src/Controller/Remises/CategorieRemiseArticleController.php line 390

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Remises;
  3. use App\Entity\Articles\Article;
  4. use App\Entity\Remises\CategorieRemiseArticle;
  5. use App\Entity\Remises\CategorieRemiseArticleRemise;
  6. use App\Entity\Remises\Remise;
  7. use App\Form\Remises\CategorieRemiseArticleType;
  8. use App\Library\Datatable\Util\Datatable;
  9. use App\Security\Voter\EntityVoter;
  10. use App\Service\Utilisateur\ColonneTableauService;
  11. use Doctrine\ORM\EntityManagerInterface;
  12. use JMS\Serializer\SerializerBuilder;
  13. use Knp\Component\Pager\PaginatorInterface;
  14. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  15. use Symfony\Component\HttpFoundation\JsonResponse;
  16. use Symfony\Component\HttpFoundation\Request;
  17. use Symfony\Component\HttpFoundation\Response;
  18. use Symfony\Component\Routing\Annotation\Route;
  19. use Symfony\Component\Validator\Validator\ValidatorInterface;
  20. use Symfony\Contracts\Translation\TranslatorInterface;
  21. class CategorieRemiseArticleController extends AbstractController
  22. {
  23.     /**
  24.      * @Route("/remise/categorie-remise-article/nouveau", name="dtc_categorie_remise_article_ajouter")
  25.      */
  26.     public function ajouterAction(Request $requestEntityManagerInterface $emTranslatorInterface $translatorValidatorInterface $validator)
  27.     {
  28.         $categorieRemiseArticle = new CategorieRemiseArticle();
  29.         $user                   $this->getUser();
  30.         $categorieRemiseArticle->setUtilisateur($user);
  31.         $form $this->createForm(CategorieRemiseArticleType::class, $categorieRemiseArticle);
  32.         $errors "";
  33.         $form->handleRequest($request);
  34.         if ($form->isSubmitted()) {
  35.             if ($form->isValid()) {
  36.                 $em->persist($categorieRemiseArticle);
  37.                 $em->flush();
  38.                 $this->addFlash(
  39.                     'notice',
  40.                     $translator->trans('Remise catégorie article ajoutée avec succès !')
  41.                 );
  42.                 return $this->redirectToRoute('dtc_categorie_remise_article_liste');
  43.             } else {
  44.                 $errors $validator->validate($categorieRemiseArticle);
  45.             }
  46.         }
  47.         return $this->render('Remises/CategorieRemiseArticle/ajouter.html.twig', ['form' => $form->createView(), 'errors' => $errors]);
  48.     }
  49.     /**
  50.      * @Route("/remise/categorie-remise-article/modifier/{id}", name="dtc_categorie_remise_article_modifier")
  51.      */
  52.     public function modifierAction(Request             $requestCategorieRemiseArticle $categorieRemiseArticleEntityManagerInterface $em
  53.                                    TranslatorInterface $translatorValidatorInterface $validatorDatatable $datatable
  54.     ) {
  55.         $user $this->getUser();
  56.         $categorieRemiseArticle->setUtilisateur($user);
  57.         $form $this->createForm(CategorieRemiseArticleType::class, $categorieRemiseArticle);
  58.         $errors "";
  59.         $form->handleRequest($request);
  60.         if ($form->isSubmitted()) {
  61.             $droit $this->isGranted(EntityVoter::UPDATECategorieRemiseArticle::class);
  62.             if ( ! $droit) {
  63.                 return $this->redirectToRoute('dtc_categorie_remise_article_modifier', ["id" => $categorieRemiseArticle->getId()]);
  64.             }
  65.             if ($form->isValid()) {
  66.                 $em->persist($categorieRemiseArticle);
  67.                 $em->flush();
  68.                 $this->addFlash(
  69.                     'notice',
  70.                     $translator->trans('Remise catégorie article sauvegardée avec succès !')
  71.                 );
  72.                 return $this->redirectToRoute('dtc_categorie_remise_article_modifier', ["id" => $categorieRemiseArticle->getId()]);
  73.             } else {
  74.                 $errors $validator->validate($categorieRemiseArticle);
  75.             }
  76.         }
  77.         $this->datatableProduits($datatable$translator$categorieRemiseArticle);
  78.         $this->datatableRemises($datatable$translator$categorieRemiseArticle);
  79.         return $this->render(
  80.             'Remises/CategorieRemiseArticle/ajouter.html.twig',
  81.             ['form' => $form->createView(), 'errors' => $errors'categorieRemiseArticle' => $categorieRemiseArticle]
  82.         );
  83.     }
  84.     /**
  85.      * @Route("/remise/categorie-remise-article", name="dtc_categorie_remise_article_liste")
  86.      */
  87.     public function listerAction(Request $requestColonneTableauService $serviceColonneTableauDatatable $datatableTranslatorInterface $translator)
  88.     {
  89.         $tableau_class_cellule[] = ["className" => "colonne_id""targets" => [0], "visible" => true"orderable" => false];
  90.         $tableau_class_cellule[] = [
  91.             "className" => "visible_export colonne_id",
  92.             "targets"   => [1],
  93.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(CategorieRemiseArticle::class, "id"),
  94.         ];
  95.         $tableau_class_cellule[] = [
  96.             "className" => "visible_export colonne_id",
  97.             "targets"   => [2],
  98.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(CategorieRemiseArticle::class, "reference"),
  99.         ];
  100.         $tableau_class_cellule[] = [
  101.             "className" => "visible_export colonne_id",
  102.             "targets"   => [3],
  103.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(CategorieRemiseArticle::class, "libelle"),
  104.         ];
  105.         $tableau_class_cellule[] = [
  106.             "className" => "visible_export colonne_id",
  107.             "targets"   => [4],
  108.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(CategorieRemiseArticle::class, "libelle"),
  109.         ];
  110.         $tableau_class_cellule[] = ["orderable" => false"className" => "colonne_id""targets" => [5], "visible" => true];
  111.         $this->datatable($datatable$translator);
  112.         return $this->render('Remises/CategorieRemiseArticle/lister.html.twig', ['tableauClassColonne' => $tableau_class_cellule]);
  113.     }
  114.     /**
  115.      * set datatable configs
  116.      *
  117.      * @return \App\Library\Datatable\Util\Datatable
  118.      */
  119.     private function datatable(Datatable $datatableTranslatorInterface $translator)
  120.     {
  121.         $datatable->setEntity(CategorieRemiseArticle::class, "x")
  122.                   ->setFields(
  123.                       [
  124.                           $translator->trans("ID")      => 'x.id',
  125.                           $translator->trans("Réf")     => 'x.reference',
  126.                           $translator->trans("Libellé") => 'x.libelle',
  127.                           $translator->trans("Marque")  => 'm.libelle',
  128.                           $translator->trans("Actions") => 'x.id',
  129.                           "_identifier_"                => 'x.id',
  130.                       ]
  131.                   )
  132.                   ->addJoin('x.marque''m'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  133.                   ->setRenderers(
  134.                       [
  135.                           => [
  136.                               'view'   => 'FO/DataTable/avec_lien_edit_route.html.twig',
  137.                               'params' => [
  138.                                   'edit_route' => 'dtc_categorie_remise_article_modifier',
  139.                               ],
  140.                           ],
  141.                           => [
  142.                               'view'   => 'FO/DataTable/actions.html.twig',
  143.                               'params' => [
  144.                                   'edit_route' => 'dtc_categorie_remise_article_modifier',
  145.                                   'objet'      => CategorieRemiseArticle::class,
  146.                               ],
  147.                           ],
  148.                       ]
  149.                   )
  150.                   ->setMultiple(
  151.                       [
  152.                           'delete' => [
  153.                               'title' => 'Non disponible',
  154.                               'route' => 'dtc_categorie_remise_article_liste',
  155.                           ],
  156.                       ]
  157.                   )
  158.                   ->setOrder("x.id""desc")
  159.                   ->setSearch(true)
  160.                   ->setSearchFields([123]);
  161.         //$datatable->setSearchFields(array(0,2));
  162.         return $datatable;
  163.     }
  164.     /**
  165.      * Grid action
  166.      * @return Response
  167.      */
  168.     /**
  169.      * @Route("/remise/categorie-remise-article/grid", name="dtc_categorie_remise_article_liste_grid")
  170.      */
  171.     public function gridAction(Request $requestDatatable $datatableTranslatorInterface $translator)
  172.     {
  173.         return $this->datatable($datatable$translator)->execute();
  174.     }
  175.     /**
  176.      * set datatable configs
  177.      *
  178.      * @return \App\Library\Datatable\Util\Datatable
  179.      */
  180.     private function datatableProduits(Datatable $datatableTranslatorInterface $translator$categorieRemiseArticle)
  181.     {
  182.         $datatable->setDatatableId('dta-produits')
  183.                   ->setEntity(Article::class, "x")
  184.                   ->setFields(
  185.                       [
  186.                           $translator->trans("ID")              => 'x.id',
  187.                           $translator->trans("Img")             => 'x.reference',
  188.                           $translator->trans("Réf")             => 'x.reference',
  189.                           $translator->trans("Libellé")         => 'x.libelle',
  190.                           $translator->trans("Marque")          => 'm.libelle',
  191.                           $translator->trans("Desc courte")     => 'x.descriptionCourte',
  192.                           $translator->trans("Prix HT")         => 'x.prixVente',
  193.                           $translator->trans("Prix TTC")        => 'x.prixVente',
  194.                           $translator->trans("Marge")           => 'x.marge',
  195.                           $translator->trans("Cpump")           => 'x.cpump',
  196.                           $translator->trans("Stock")           => 'x.stock',
  197.                           $translator->trans("Statut Internet") => 'x.statut',
  198.                           $translator->trans("Actions")         => 'x.id',
  199.                           "_identifier_"                        => 'x.id',
  200.                       ]
  201.                   )
  202.                   ->addJoin('x.marque''m'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  203.             //->addJoin('x.categorieRemiseArticle', 'm', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)         
  204.                   ->setWhere(                                                     // set your dql where statement
  205.                 'x.categorieRemiseArticle = :categorieRemiseArticle',
  206.                 ['categorieRemiseArticle' => $categorieRemiseArticle]
  207.             )
  208.                   ->setRenderers(
  209.                       [
  210.                           0  => [
  211.                               'view'   => 'FO/DataTable/avec_lien_edit_route.html.twig',
  212.                               'params' => [
  213.                                   'edit_route' => 'dtc_article_modifier',
  214.                               ],
  215.                           ],
  216.                           1  => [
  217.                               'view'   => 'FO/DataTable/image.html.twig',
  218.                               'params' => [
  219.                                   'edit_route' => 'dtc_article_modifier',
  220.                               ],
  221.                           ],
  222.                           6  => [
  223.                               'view'   => 'FO/DataTable/prixSuivi.html.twig',
  224.                               'params' => [
  225.                                   'surveillance' => false,
  226.                               ],
  227.                           ],
  228.                           7  => [
  229.                               'view' => 'FO/DataTable/prix_article_ttc.html.twig',
  230.                           ],
  231.                           8  => [
  232.                               'view' => 'FO/DataTable/prix.html.twig',
  233.                           ],
  234.                           9  => [
  235.                               'view' => 'FO/DataTable/prix.html.twig',
  236.                           ],
  237.                           11 => [
  238.                               'view'   => 'FO/DataTable/statut.html.twig',
  239.                               'params' => [
  240.                                   'edit_route' => 'dtc_article_changer_statut',
  241.                               ],
  242.                           ],
  243.                           12 => [
  244.                               'view'   => 'FO/DataTable/actions.html.twig',
  245.                               'params' => [
  246.                                   'edit_route'      => 'dtc_article_modifier',
  247.                                   'dupliquer_route' => 'dtc_article_dupliquer',
  248.                                   'objet'           => Article::class,
  249.                               ],
  250.                           ],
  251.                       ]
  252.                   )
  253.                   ->setOrder("x.id""desc")
  254.                   ->setSearch(true)
  255.                   ->setSearchFields([234]);
  256.         //$datatable->setSearchFields(array(0,2));
  257.         return $datatable;
  258.     }
  259.     /**
  260.      * Grid action
  261.      * @return Response
  262.      */
  263.     /**
  264.      * @Route("/remise/categorie-remise-article/produits/grid/{id}", name="dtc_categorie_remise_article_article_liste_grid")
  265.      */
  266.     public function gridProduitsAction(Request $requestCategorieRemiseArticle $categorieRemiseArticleDatatable $datatableTranslatorInterface $translator)
  267.     {
  268.         return $this->datatableProduits($datatable$translator$categorieRemiseArticle)->execute();
  269.     }
  270.     /**
  271.      * set datatable configs
  272.      *
  273.      * @return \App\Library\Datatable\Util\Datatable
  274.      */
  275.     private function datatableRemises(Datatable $datatableTranslatorInterface $translator$categorieRemiseArticle)
  276.     {
  277.         $datatable->setDatatableId('dta-remises')
  278.                   ->setEntity(Remise::class, "x")
  279.                   ->setFields(
  280.                       [
  281.                           $translator->trans("ID")      => 'x.id',
  282.                           $translator->trans("Libelle") => 'x.libelle',
  283.                           $translator->trans("Remise")  => 'x.montant',
  284.                           $translator->trans("Client")  => 'c.nom',
  285.                           $translator->trans("Actions") => 'x.id',
  286.                           "_identifier_"                => 'x.id',
  287.                       ]
  288.                   )
  289.                   ->addJoin('x.categorieRemiseArticleRemise''ra'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  290.                   ->addJoin('x.client''c'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  291.                   ->setWhere(                                                     // set your dql where statement
  292.                       'ra.categorieRemiseArticle = :categorieRemiseArticle',
  293.                       ['categorieRemiseArticle' => $categorieRemiseArticle]
  294.                   )
  295.                   ->setRenderers(
  296.                       [
  297.                           => [
  298.                               'view'   => 'FO/DataTable/avec_lien_edit_route.html.twig',
  299.                               'params' => [
  300.                                   'edit_route' => 'dtc_remise_modifier',
  301.                               ],
  302.                           ],
  303.                           => [
  304.                               'view' => 'FO/DataTable/pourcentage.html.twig',
  305.                           ],
  306.                           => [
  307.                               'view'   => 'FO/DataTable/actions.html.twig',
  308.                               'params' => [
  309.                                   'edit_route' => 'dtc_remise_modifier',
  310.                                   'objet'      => Remise::class,
  311.                               ],
  312.                           ],
  313.                       ]
  314.                   )
  315.                   ->setOrder("x.id""desc")
  316.                   ->setSearch(true)
  317.                   ->setSearchFields([1]);
  318.         //$datatable->setSearchFields(array(0,2));
  319.         return $datatable;
  320.     }
  321.     /**
  322.      * Grid action
  323.      * @return Response
  324.      */
  325.     /**
  326.      * @Route("/remise/categorie-remise-article/remises/grid/{id}", name="dtc_categorie_remise_article_remise_liste_grid")
  327.      */
  328.     public function gridRemisesAction(Request $requestCategorieRemiseArticle $categorieRemiseArticleDatatable $datatableTranslatorInterface $translator
  329.     ) {
  330.         return $this->datatableRemises($datatable$translator$categorieRemiseArticle)->execute();
  331.     }
  332.     /**
  333.      * @Route("", name="")
  334.      */
  335.     public function listerCategorieRemiseArticlePourRemiseCheckboxAction(Request $request$remise = [], EntityManagerInterface $em)
  336.     {
  337.         $id                           '';
  338.         $repo_remise                  $em->getRepository(Remise::class);
  339.         $repo_categorie_remise        $em->getRepository(CategorieRemiseArticle::class);
  340.         $repo_remise_categorie_remise $em->getRepository(CategorieRemiseArticleRemise::class);
  341.         $id                           $request->query->get('id');
  342.         $url                          $this->generateUrl('dtc_categorie_remise_client_client_checkbox', []);
  343.         if ($request->query->get('client') != '') {
  344.             $remise $repo_remise->find($request->query->get('remise'));
  345.         }
  346.         //$categories = $repo_categorie_remise->listeCategories();
  347.         $categories    $repo_categorie_remise->getCategorieRemiseArticle();
  348.         $tabCategories = [];
  349.         foreach ($categories as $c) {
  350.             $c['checked'] = 0;
  351.             //$c['totalSousCategorie'] = count($repo_categorie_remise->findBy(array("categorieParent"=>$c)));
  352.             $c['totalSousCategorie'] = 0;
  353.             $c['selection']          = 0;
  354.             $tmp $repo_categorie_remise->find($c['id']);
  355.             if (is_object($remise) and is_object($repo_remise_categorie_remise->findOneBy(['remise' => $remise'categorieRemiseArticle' => $tmp]))) {
  356.                 $c['checked'] = 1;
  357.                 $tes $repo_remise_categorie_remise->findOneBy(['remise' => $remise'categorieRemiseArticle' => $c]);
  358.             }
  359.             $tabCategories[] = $c;
  360.         }
  361.         $categories $tabCategories;
  362.         return $this->render(
  363.             'Remises/CategorieRemiseArticle/checkbox.html.twig',
  364.             ['categories' => $categories'client' => $remise'url' => $url'objet' => 'client''name' => 'categories_remise_article']
  365.         );
  366.     }
  367.     /**
  368.      * @Route("/remise/categorie-remise-article/recherche", name="dtc_categorie_remise_article_recherche")
  369.      */
  370.     public function rechercheAction(Request $requestEntityManagerInterface $emPaginatorInterface $paginator)
  371.     {
  372.         $q       $request->query->get('q');
  373.         $repo    $em->getRepository(CategorieRemiseArticle::class);
  374.         $results $repo->getRechercheCategorieRemiseArticle($q);
  375.         $pagination $paginator->paginate(
  376.             $results/* query NOT result */
  377.             $request->query->getInt('page'1)/*page number*/,
  378.             10/*limit per page*/
  379.         );
  380.         $pagination_results $pagination->getItems();
  381.         $option_placeholde  = ["libelle" => "Sélectionnez""id" => ""];
  382.         array_unshift($pagination_results$option_placeholde);
  383.         $pagination->setItems($pagination_results);
  384.         $serializer SerializerBuilder::create()->build();
  385.         return JsonResponse::fromJsonString($serializer->serialize($pagination'json'));
  386.     }
  387. }