src/Controller/Articles/ConditionAchatController.php line 703

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Articles;
  3. use App\Entity\Articles\Article;
  4. use App\Entity\Articles\ConditionAchat;
  5. use App\Entity\Fournisseurs\Fournisseur;
  6. use App\Form\Articles\ConditionAchatType;
  7. use App\Form\Articles\SupprimerConditionAchatType;
  8. use App\Library\Datatable\Util\Datatable;
  9. use App\Security\Voter\EntityVoter;
  10. use App\Service\Articles\ArticleService;
  11. use Doctrine\ORM\EntityManagerInterface;
  12. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  13. use Symfony\Component\HttpFoundation\Request;
  14. use Symfony\Component\HttpFoundation\JsonResponse;
  15. use Symfony\Component\HttpFoundation\Response;
  16. use Symfony\Component\Routing\Annotation\Route;
  17. use Symfony\Component\Validator\Validator\ValidatorInterface;
  18. use Symfony\Contracts\Translation\TranslatorInterface;
  19. class ConditionAchatController extends AbstractController
  20. {
  21.     /**
  22.      * @Route("/article/achat/prix/{id}/{fournisseur}", name="dtc_condition_achat_prix_fournisseur")
  23.      */
  24.     public function getPrixArticleConditionAchatAction(Fournisseur $fournisseurArticle $article$quantite)
  25.     {
  26.         $prix      "";
  27.         $reference "";
  28.         $delai     '';
  29.         foreach ($article->getConditionsAchat() as $c) {
  30.             //echo "<div>TEST ==> ".$fournisseur->getId()." ::: </div>";
  31.             if ($fournisseur->getId() == $c->getFournisseur()->getId()) {
  32.                 $prix      $c->getPrixAchatNet();
  33.                 $prix      number_format($prix2'.''&nbsp;');
  34.                 $prix      .= "&nbsp;&euro;";
  35.                 $reference $c->getReferenceFournisseur();
  36.                 $delai     $c->getDelai();
  37.             }
  38.         }
  39.         return new JsonResponse([
  40.                                     'prix'            => $prix,
  41.                                     'reference'       => $reference,
  42.                                     'delai'           => $delai,
  43.                                     'conditionnement' => $conditionnement,
  44.                                 ],
  45.                                 200,
  46.                                 ['Content-Type' => 'application/json']);
  47.     }
  48.     /**
  49.      * @Route("/condition-achat/nouveau/{id}/{type}", name="dtc_condition_achat_ajouter")
  50.      */
  51.     public function ajouterAction(Request            $request$id$type ""EntityManagerInterface $emArticleService $articleServiceTranslatorInterface $translator,
  52.                                   ValidatorInterface $validator
  53.     ) {
  54.         $titre_modal $translator->trans("Nouvelle condition d'achat");
  55.         $repo_objet  $em->getRepository(Article::class);
  56.         $get            $request->query->all();
  57.         $conditionAchat = new ConditionAchat();
  58.         $objet $repo_objet->find($id);
  59.         if (is_object($objet)) {
  60.             $conditionAchat->setArticle($objet);
  61.             $conditionAchat->setLibelle($objet->getLibelle());
  62.         }
  63.         $user $this->getUser();
  64.         $conditionAchat->setUtilisateur($user);
  65.         $form   $this->createForm(ConditionAchatType::class, $conditionAchat);
  66.         $errors "";
  67.         $form->handleRequest($request);
  68.         if ($form->isSubmitted()) {
  69.             if ($form->isValid()) {
  70.                 //Calcul du prix achat net
  71.                 if ( ! $conditionAchat->getPrixNet()) {
  72.                     $prixAchatNet $conditionAchat->getPrixAchatBrut() * (- ($conditionAchat->getTauxRemise() / 100)) * (- ($conditionAchat->getTauxRemiseSupplementaire() / 100));
  73.                     $coefficient  $conditionAchat->getCoefficient();
  74.                     if ($coefficient != 0) {
  75.                         $prixAchatNet $prixAchatNet $coefficient;
  76.                     }
  77.                     $prixAchatNet += $conditionAchat->getFraisAnnexes();
  78.                     $conditionAchat->setPrixAchatNet($prixAchatNet);
  79.                 }
  80.                 //Calcul du coefficient
  81.                 /*
  82.                 if($prixAchatNet > 0){
  83.                     $coefficient = $conditionAchat->getPrixAchatBrut() / $prixAchatNet;
  84.                     $conditionAchat->setCoefficient($coefficient);
  85.                 }
  86.                  *
  87.                  */
  88.                 if ($type == 'article') {
  89.                     $repo_objet $em->getRepository(Article::class);
  90.                     $objet      $repo_objet->find($id);
  91.                     if (is_object($objet)) {
  92.                         $conditionAchat->setArticle($objet);
  93.                         if ($conditionAchat->getDefaut() == true) {
  94.                             if (count($objet->getConditionsAchat()) > 0) {
  95.                                 foreach ($objet->getConditionsAchat() as $condition) {
  96.                                     if ($condition->getDefaut() == 1) {
  97.                                         $condition->setDefaut(false);
  98.                                         $em->persist($condition);
  99.                                     }
  100.                                 }
  101.                             }
  102.                             $conditionAchat->setDefaut(true);
  103.                             //Mise à jour de l'article
  104.                             //$objet->setPrixBase($prixAchatNet);
  105.                             /*
  106.                             if($objet->getMajPrix() == 1)
  107.                                 $articleService->majEnFonctionDuPrixAchat($objet, $conditionAchat->getPrixAchatBrut());
  108.                                 */
  109.                         }
  110.                     }
  111.                     $url $this->generateUrl('dtc_article_modifier', ['id' => $objet->getId(), 'tab' => 'conditions']);
  112.                 }
  113.                 $em->persist($conditionAchat);
  114.                 //$em->persist($objet);
  115.                 $em->flush();
  116.                 if ($type == 'article') {
  117.                     $em->refresh($conditionAchat);
  118.                     $message_historique            = [];
  119.                     $message_historique["titre"]   = "Création d'une nouvelle condition d'achat pour le fournisseur ".$conditionAchat->getFournisseur()->getLibelle();
  120.                     $message_historique["message"] = $conditionAchat->getReferenceFournisseur()." (id : ".$conditionAchat->getId().")";
  121.                     $articleService->creerHistorique($objet'defaut'$message_historique);
  122.                 }
  123.                 if (is_object($conditionAchat->getArticle())) {
  124.                     $articleService->majEnFonctionDuPrixAchat($conditionAchat->getArticle());
  125.                     $articleService->setFournisseurDefaut($conditionAchat->getArticle());
  126.                 }
  127.                 //$articleService->setFournisseurDefaut($objet);
  128.                 $articleService->majrefAppelFourSurArticle($conditionAchat->getArticle()->getId());
  129.                 $retour = ['rendu' => '''valide' => '1''url' => $url];
  130.                 if (array_key_exists('table'$get) && $get["table"] != "") {
  131.                     $retour['type']         = 'recharger_datatable';
  132.                     $retour['id_datatable'] = $get["table"];
  133.                     if ($type == 'article' && is_object($objet)) {
  134.                         $em->refresh($objet);
  135.                         $retour['prixBase'] = $objet->getPrixBase();
  136.                     }
  137.                     return new Response(json_encode($retour));
  138.                 } else {
  139.                     $this->addFlash('notice''Condition d\'achat ajoutée avec succès !');
  140.                     return new Response(json_encode($retour));
  141.                 }
  142.             } else {
  143.                 $errors $validator->validate($conditionAchat);
  144.                 $rendu  $this->renderView(
  145.                     'Articles/ConditionAchat/ajouter.html.twig',
  146.                     ['form' => $form->createView(), 'errors' => $errors'id' => $id'type' => $type'conditionAchat' => $conditionAchat]
  147.                 );
  148.                 return new JsonResponse(['rendu' => $rendu'valide' => '0''url' => '''titre' => $titre_modal]);
  149.             }
  150.         }
  151.         $rendu $this->renderView(
  152.             'Articles/ConditionAchat/ajouter.html.twig',
  153.             ['form' => $form->createView(), 'errors' => $errors'id' => $id'type' => $type'conditionAchat' => $conditionAchat]
  154.         );
  155.         return new JsonResponse(['rendu' => $rendu'valide' => '0''url' => '''titre' => $titre_modal]);
  156.         //return $this->render('Articles/ConditionAchat/ajouter.html.twig', array('form' => $form->createView(),'errors'=>$errors,'id'=>$id,'type'=>$type));
  157.     }
  158.     /**
  159.      * @Route("/condition-achat/modifier/{objet}/{id}/{type}", name="dtc_condition_achat_modifier")
  160.      */
  161.     public function modifierAction(Request             $requestConditionAchat $objet$id$typeEntityManagerInterface $emArticleService $articleService
  162.                                    TranslatorInterface $translatorValidatorInterface $validator
  163.     ) {
  164.         $conditionAchat $objet;
  165.         $titre_modal    $translator->trans("Modifier la condition d'achat");
  166.         $get            $request->query->all();
  167.         $user           $this->getUser();
  168.         $conditionAchat->setUtilisateur($user);
  169.         $form   $this->createForm(ConditionAchatType::class, $conditionAchat);
  170.         $errors "";
  171.         $form->handleRequest($request);
  172.         if ($form->isSubmitted()) {
  173.             $droit $this->isGranted(EntityVoter::UPDATEConditionAchat::class);
  174.             /*
  175.             if(!$droit) {
  176.                 $rendu = $this->renderView('Articles/ConditionAchat/ajouter.html.twig', array('form' => $form->createView(),'errors'=>$errors,'id'=>$id,'type'=>$type,'objet'=>$objet));
  177.                 return new Response(json_encode(array('rendu'=>$rendu,'valide'=>'0','url'=>'','titre'=>$titre_modal)), 200, array('Content-Type'=>'application/json'));
  178.             }
  179.             */
  180.             if ($form->isValid()) {
  181.                 if ( ! $conditionAchat->getPrixNet()) {
  182.                     $prixAchatNet $conditionAchat->getPrixAchatBrut() * (- ($conditionAchat->getTauxRemise() / 100)) * (- ($conditionAchat->getTauxRemiseSupplementaire() / 100));
  183.                     $coefficient  $conditionAchat->getCoefficient();
  184.                     if ($coefficient != 0) {
  185.                         $prixAchatNet $prixAchatNet $coefficient;
  186.                     }
  187.                     $prixAchatNet += $conditionAchat->getFraisAnnexes();
  188.                     $conditionAchat->setPrixAchatNet($prixAchatNet);
  189.                 }
  190.                 /*
  191.                 if($prixAchatNet > 0){
  192.                     $coefficient = $conditionAchat->getPrixAchatBrut() / $prixAchatNet;
  193.                     $conditionAchat->setCoefficient($coefficient);
  194.                 }
  195.                  *
  196.                  */
  197.                 if ($type == 'article') {
  198.                     $repo_objet $em->getRepository(Article::class);
  199.                     $article    $repo_objet->find($id);
  200.                     if (is_object($article)) {
  201.                         $conditionAchat->setArticle($article);
  202.                         if ($conditionAchat->getDefaut() == true) {
  203.                             if (count($article->getConditionsAchat()) > 0) {
  204.                                 foreach ($article->getConditionsAchat() as $condition) {
  205.                                     if ($condition->getDefaut() == 1) {
  206.                                         $condition->setDefaut(false);
  207.                                         $em->persist($condition);
  208.                                     }
  209.                                 }
  210.                             }
  211.                             $conditionAchat->setDefaut(true);
  212.                             //Mise à jour de l'article
  213.                             //$article->setPrixBase($prixAchatNet);
  214.                             /*
  215.                             if($article->getMajPrix() == 1)
  216.                                 $articleService->majEnFonctionDuPrixAchat($article, $conditionAchat->getPrixAchatBrut());
  217.                                 */
  218.                         }
  219.                     }
  220.                     $url $this->generateUrl('dtc_article_modifier', ['id' => $article->getId(), 'tab' => 'conditions']);
  221.                 }
  222.                 if ($type == 'fournisseur') {
  223.                     $url $this->generateUrl('dtc_fournisseur_modifier', ['id' => $id'tab' => 'conditions']);
  224.                 }
  225.                 if ($type == 'commandeFournisseur') {
  226.                     $url $this->generateUrl('dtc_commande_fournisseur_modifier', ['id' => $id]);
  227.                 }
  228.                 $em->persist($conditionAchat);
  229.                 $em->flush();
  230.                 if ($type == 'article') {
  231.                     $em->refresh($conditionAchat);
  232.                     $message_historique            = [];
  233.                     $message_historique["titre"]   = "Modification d'une condition d'achat pour le fournisseur ".$conditionAchat->getFournisseur()->getLibelle();
  234.                     $message_historique["message"] = $conditionAchat->getReferenceFournisseur()." (id : ".$conditionAchat->getId().")";
  235.                     $articleService->creerHistorique($objet->getArticle(), 'defaut'$message_historique);
  236.                 }
  237.                 if (is_object($conditionAchat->getArticle())) {
  238.                     $articleService->majEnFonctionDuPrixAchat($conditionAchat->getArticle());
  239.                     $articleService->setFournisseurDefaut($conditionAchat->getArticle());
  240.                 }
  241.                 $articleService->majrefAppelFourSurArticle($conditionAchat->getArticle()->getId());
  242.                 $retour = ['rendu' => '''valide' => '1''url' => $url];
  243.                 if (array_key_exists('table'$get) && $get["table"] != "") {
  244.                     $retour['type']         = 'recharger_datatable';
  245.                     $retour['id_datatable'] = $get["table"];
  246.                     if ($type == 'article' && is_object($article)) {
  247.                         $em->refresh($article);
  248.                         $retour['prixBase'] = $article->getPrixBase();
  249.                     }
  250.                     return new JsonResponse($retour);
  251.                 } else {
  252.                     $this->addFlash('notice''Condition d\'achat modifiée avec succès !');
  253.                     return new JsonResponse($retour);
  254.                 }
  255.             } else {
  256.                 $errors $validator->validate($conditionAchat);
  257.                 $rendu  $this->renderView(
  258.                     'Articles/ConditionAchat/ajouter.html.twig',
  259.                     ['form' => $form->createView(), 'errors' => $errors'id' => $id'type' => $type'objet' => $objet'conditionAchat' => $conditionAchat]
  260.                 );
  261.                 return new JsonResponse(['rendu' => $rendu'valide' => '0''url' => '''titre' => $titre_modal]);
  262.             }
  263.         }
  264.         $rendu $this->renderView(
  265.             'Articles/ConditionAchat/ajouter.html.twig',
  266.             ['form' => $form->createView(), 'errors' => $errors'id' => $id'type' => $type'objet' => $objet'conditionAchat' => $conditionAchat]
  267.         );
  268.         return new JsonResponse(['rendu' => $rendu'valide' => '0''url' => '''titre' => $titre_modal]);
  269.     }
  270.     /**
  271.      * @Route("/condition-achat/supprimer/{objet}/{id}/{type}", name="dtc_condition_achat_supprimer")
  272.      */
  273.     public function supprimerAction(Request             $requestConditionAchat $objet$id$typeEntityManagerInterface $emArticleService $articleService,
  274.                                     TranslatorInterface $translatorValidatorInterface $validator
  275.     ) {
  276.         $conditionAchat $objet;
  277.         $titre_modal    $translator->trans("Demande de confirmation");
  278.         $get            $request->query->all();
  279.         $user           $this->getUser();
  280.         $form   $this->createForm(SupprimerConditionAchatType::class, $conditionAchat);
  281.         $errors "";
  282.         $form->handleRequest($request);
  283.         if ($form->isSubmitted()) {
  284.             if ($form->isValid()) {
  285.                 $article $conditionAchat->getArticle();
  286.                 $em->remove($conditionAchat);
  287.                 $em->flush();
  288.                 if (is_object($article)) {
  289.                     $articleService->majEnFonctionDuPrixAchat($article);
  290.                     $articleService->setFournisseurDefaut($article);
  291.                 }
  292.                 $url "";
  293.                 if ($type == 'article') {
  294.                     $url $this->generateUrl('dtc_article_modifier', ['id' => $id'tab' => 'conditions']);
  295.                 }
  296.                 $retour = ['rendu' => '''valide' => '1''url' => $url];
  297.                 $articleService->majrefAppelFourSurArticle($conditionAchat->getArticle()->getId());
  298.                 if (array_key_exists('table'$get) && $get["table"] != "") {
  299.                     $retour['type']         = 'recharger_datatable';
  300.                     $retour['id_datatable'] = $get["table"];
  301.                     if (is_object($article)) {
  302.                         $em->refresh($article);
  303.                         $retour['prixBase'] = $article->getPrixBase();
  304.                     }
  305.                     return new JsonResponse($retour);
  306.                 } else {
  307.                     $this->addFlash('notice''Condition d\'achat supprimée avec succès !');
  308.                     return new JsonResponse($retour);
  309.                 }
  310.             } else {
  311.                 $errors $validator->validate($conditionAchat);
  312.                 $rendu  $this->renderView('FO/Supprimer/supprimer.html.twig', ['form' => $form->createView(), 'errors' => $errors'id' => $id'type' => $type'objet' => $objet]);
  313.                 return new JsonResponse(['rendu' => $rendu'valide' => '0''url' => '''titre' => $titre_modal]);
  314.             }
  315.         }
  316.         $rendu $this->renderView('FO/Supprimer/supprimer.html.twig', ['form' => $form->createView(), 'errors' => $errors'id' => $id'type' => $type'objet' => $objet]);
  317.         return new JsonResponse(['rendu' => $rendu'valide' => '0''url' => '''titre' => $titre_modal]);
  318.     }
  319.     /**
  320.      * @Route("/condition-achat/charger-tableau/{id}/{type}", name="dtc_condition_achat_charger_tableau")
  321.      * @Route("/condition/charger-tableau/{id}/{type}", name="dtc_condition_charger_tableau")
  322.      */
  323.     public function chargerTableauAction(Request $request$id "0"$type "a")
  324.     {
  325.         $rendu $this->renderView('Articles/ConditionAchat/charger_tableau.html.twig', ["id" => $id"type" => $type]);
  326.         return new JsonResponse(['rendu' => $rendu]);
  327.     }
  328.     /**
  329.      * @Route("/condition-achat", name="dtc_condition_achat_liste")
  330.      */
  331.     public function listerAction(Request $request$id "0"$type "a"EntityManagerInterface $emDatatable $datatableTranslatorInterface $translator)
  332.     {
  333.         $tableau_class_cellule   = [];
  334.         $tableau_class_cellule[] = ["searchable" => false"className" => "visible_export colonne_id text-center""targets" => [0], "visible" => true];
  335.         $tableau_class_cellule[] = ["searchable" => false"className" => "visible_export colonne_id text-center""targets" => [1], "visible" => true];
  336.         $tableau_class_cellule[] = ["searchable" => false"className" => "visible_export colonne_id""targets" => [2], "visible" => true];
  337.         $tableau_class_cellule[] = ["searchable" => false"className" => "visible_export colonne_id ""targets" => [3], "visible" => true];
  338.         $tableau_class_cellule[] = ["searchable" => false"className" => "visible_export colonne_id text-right""targets" => [4], "visible" => true];
  339.         $tableau_class_cellule[] = ["searchable" => false"className" => "visible_export colonne_id text-center""targets" => [5], "visible" => true];
  340.         $tableau_class_cellule[] = ["searchable" => false"className" => "visible_export colonne_id text-center""targets" => [6], "visible" => true];
  341.         $tableau_class_cellule[] = ["searchable" => false"className" => "visible_export colonne_id text-center""targets" => [7], "visible" => true];
  342.         $tableau_class_cellule[] = ["searchable" => false"className" => "visible_export colonne_id text-center""targets" => [8], "visible" => true];
  343.         $tableau_class_cellule[] = ["searchable" => false"className" => "visible_export colonne_id text-right""targets" => [9], "visible" => true];
  344.         $tableau_class_cellule[] = ["searchable" => false"className" => "visible_export colonne_id text-center""targets" => [10], "visible" => true];
  345.         $tableau_class_cellule[] = ["searchable" => false"className" => "visible_export colonne_id text-right""targets" => [11], "visible" => true];
  346.         $tableau_class_cellule[] = ["searchable" => false"className" => "visible_export colonne_id text-center""targets" => [12], "visible" => true];
  347.         $tableau_class_cellule[] = ["orderable" => false"searchable" => false"className" => " colonne_id text-center""targets" => [13], "visible" => true];
  348.         $tableau_class_cellule[] = ["orderable" => false"searchable" => false"className" => " colonne_id text-center""targets" => [14], "visible" => true];
  349.         $tableau_class_cellule[] = ["orderable" => false"searchable" => false"className" => " colonne_id text-center""targets" => [15], "visible" => true];
  350.         $modal     $request->query->get('modal');
  351.         $articleId $request->query->get('id');
  352.         $qte       $request->query->get('qte');
  353.         if ($type == "article") {
  354.             $repo_objet $em->getRepository(Article::class);
  355.         }
  356.         if ($type == "fournisseur") {
  357.             $repo_objet $em->getRepository(Fournisseur::class);
  358.         }
  359.         $objet $repo_objet->find($id);
  360.         if ($articleId != '') {
  361.             $article $repo_objet->find($articleId);
  362.             if ($modal == && is_object($article)) {
  363.                 $titre_modal 'Conditions d\'achat';
  364.                 $this->datatableArticle($article$type$datatable$translator);
  365.                 $rendu $this->renderView(
  366.                     'Articles/ConditionAchat/lister.html.twig',
  367.                     ['tableauClassColonne' => $tableau_class_cellule"id" => $articleId"type" => $type'qte' => $qte]
  368.                 );
  369.                 //$rendu = $this->renderView('FO/Supprimer/supprimer.html.twig', array('form' => $form->createView(),'errors'=>$errors,'id'=>$id,'type'=>$type,'objet'=>$objet));
  370.                 return new JsonResponse(['rendu' => $rendu'valide' => '0''url' => '''titre' => $titre_modal]);
  371.             }
  372.         }
  373.         if (is_object($objet)) {
  374.             if ($type == "article") {
  375.                 $tableau_class_cellule   = [];
  376.                 $tableau_class_cellule[] = ["searchable" => false"className" => "visible_export colonne_id text-center""targets" => [0], "visible" => true];
  377.                 $tableau_class_cellule[] = ["searchable" => true"className" => "visible_export colonne_id text-center""targets" => [1], "visible" => true];
  378.                 $tableau_class_cellule[] = ["searchable" => true"className" => "visible_export colonne_id""targets" => [2], "visible" => true];
  379.                 $tableau_class_cellule[] = ["searchable" => true"className" => "visible_export colonne_id""targets" => [3], "visible" => true];
  380.                 $tableau_class_cellule[] = ["searchable" => true"className" => "visible_export colonne_id text-right""targets" => [4], "visible" => true];
  381.                 $tableau_class_cellule[] = ["searchable" => true"className" => "visible_export colonne_id text-center""targets" => [5], "visible" => true];
  382.                 $tableau_class_cellule[] = ["searchable" => true"className" => "visible_export colonne_id text-center""targets" => [6], "visible" => true];
  383.                 $tableau_class_cellule[] = ["searchable" => true"className" => "visible_export colonne_id text-center""targets" => [7], "visible" => true];
  384.                 $tableau_class_cellule[] = ["searchable" => true"className" => "visible_export colonne_id text-center""targets" => [8], "visible" => true];
  385.                 $tableau_class_cellule[] = ["searchable" => true"className" => "visible_export colonne_id text-right""targets" => [9], "visible" => true];
  386.                 $tableau_class_cellule[] = ["orderable" => true"className" => "colonne_id visible_export text-right""targets" => [10], "visible" => true];
  387.                 $tableau_class_cellule[] = ["orderable" => true"className" => "colonne_id visible_export text-right""targets" => [11], "visible" => true];
  388.                 $tableau_class_cellule[] = ["orderable" => true"className" => "colonne_id visible_export text-left""targets" => [12], "visible" => true];
  389.                 $tableau_class_cellule[] = ["orderable" => true"className" => "colonne_id visible_export text-center""targets" => [13], "visible" => true];
  390.                 $tableau_class_cellule[] = ["orderable" => true"className" => "colonne_id visible_export text-center""targets" => [14], "visible" => true];
  391.                 $tableau_class_cellule[] = ["orderable" => true"className" => "colonne_id visible_export text-center""targets" => [15], "visible" => true];
  392.                 $tableau_class_cellule[] = ["orderable" => true"className" => "colonne_id visible_export text-center""targets" => [16], "visible" => true];
  393.                 $tableau_class_cellule[] = ["orderable" => true"className" => "colonne_id visible_export""targets text-center" => [17], "visible" => true];
  394.                 $tableau_class_cellule[] = ["orderable" => true"className" => "colonne_id visible_export""targets text-center" => [18], "visible" => true];
  395.                 $tableau_class_cellule[] = ["orderable" => false"className" => "colonne_id visible_export ""targets" => [19], "visible" => true];
  396.                 $this->datatableArticle($objet$type$datatable$translator);
  397.             } elseif ($type == "fournisseur") {
  398.                 $tableau_class_cellule   = [];
  399.                 $tableau_class_cellule[] = ["searchable" => false"className" => "visible_export colonne_id""targets" => [0], "visible" => true];
  400.                 $tableau_class_cellule[] = ["searchable" => true"className" => "visible_export colonne_id""targets" => [1], "visible" => true];
  401.                 $tableau_class_cellule[] = ["searchable" => true"className" => "visible_export colonne_id""targets" => [2], "visible" => true];
  402.                 $tableau_class_cellule[] = ["searchable" => true"className" => "visible_export colonne_id text-center""targets" => [3], "visible" => true];
  403.                 $tableau_class_cellule[] = ["searchable" => true"className" => "visible_export colonne_id text-center""targets" => [4], "visible" => true];
  404.                 $tableau_class_cellule[] = ["searchable" => true"className" => "visible_export colonne_id text-center""targets" => [5], "visible" => true];
  405.                 $tableau_class_cellule[] = ["searchable" => true"className" => "visible_export colonne_id text-center""targets" => [6], "visible" => true];
  406.                 $tableau_class_cellule[] = ["searchable" => true"className" => "visible_export colonne_id text-right""targets" => [7], "visible" => true];
  407.                 $tableau_class_cellule[] = ["searchable" => true"className" => "visible_export colonne_id text-center""targets" => [8], "visible" => true];
  408.                 $tableau_class_cellule[] = ["searchable" => true"className" => "visible_export colonne_id text-center""targets" => [9], "visible" => true];
  409.                 $tableau_class_cellule[] = ["orderable" => false"className" => "colonne_id visible_export text-right""targets" => [10], "visible" => true];
  410.                 $this->datatableFournisseur($objet$type$datatable$translator);
  411.             }
  412.             return $this->render('Articles/ConditionAchat/lister.html.twig', ['tableauClassColonne' => $tableau_class_cellule"id" => $id"type" => $type]);
  413.         } else {
  414.             $this->datatable($datatable$translator);
  415.             return $this->render('Articles/ConditionAchat/lister.html.twig', ['tableauClassColonne' => $tableau_class_cellule"id" => $id"type" => $type]);
  416.         }
  417.     }
  418.     /**
  419.      * set datatable configs
  420.      *
  421.      * @return \App\Library\Datatable\Util\Datatable
  422.      */
  423.     private function datatable(Datatable $datatableTranslatorInterface $translator)
  424.     {
  425.         $datatable->setDatatableId('dta-condition-achat')
  426.                   ->setEntity(ConditionAchat::class, "x")
  427.                   ->setFields(
  428.                       [
  429.                           $translator->trans("ID")      => 'x.id',
  430.                           //$translator->trans("Libelle") =>  'x.libelle',
  431.                           $translator->trans("Actions") => 'x.id',
  432.                           "_identifier_"                => 'x.id',
  433.                       ]
  434.                   )
  435.             //->addJoin('x.statutCommande', 's', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  436.             /*->setWhere(
  437.                     $type_jointure.' = :objet',
  438.                     array('objet' => $objet)
  439.                )
  440.               */
  441.                   ->setRenderers(
  442.                 [
  443.                     => [
  444.                         'view'   => 'FO/DataTable/actions.html.twig',
  445.                         'params' => [
  446.                             //'edit_route'  => 'dtc_garantie_modifier',
  447.                             //'supprimer_route'  => 'dtc_garantie_supprimer',
  448.                             'entite' => 'garantie',
  449.                             'objet'  => ConditionAchat::class,
  450.                         ],
  451.                     ],
  452.                 ]
  453.             )
  454.                   ->setOrder("x.id""desc")
  455.                   ->setSearch(true)
  456.                   ->setSearchFields([14]);
  457.         return $datatable;
  458.     }
  459.     /**
  460.      * set datatable configs
  461.      *
  462.      * @return \App\Library\Datatable\Util\Datatable
  463.      */
  464.     private function datatableFournisseur($objet$type ""Datatable $datatableTranslatorInterface $translator)
  465.     {
  466.         $type_jointure 'x.'.$type;
  467.         $datatable->setDatatableId('dta-condition-achat-fournisseur')
  468.                   ->setEntity(ConditionAchat::class, "x")
  469.                   ->setFields(
  470.                       [
  471.                           //$translator->trans("ID") =>  'x.id',
  472.                           $translator->trans("Réf")           => 'a.reference',
  473.                           $translator->trans("Réf fourn")     => 'x.referenceFournisseur',
  474.                           $translator->trans("Libellé")       => 'a.libelle',
  475.                           $translator->trans("Qté mini cond") => 'x.quantite',
  476.                           $translator->trans("Qté mini art") => 'a.seuilMiniCommandeFournisseur',
  477.                           $translator->trans("Qté maxi art") => 'a.seuilMaxiCommandeFournisseur',
  478.                           $translator->trans("Conditionnement")  => 'x.conditionnement',
  479.                           $translator->trans("Prix achat brut")  => 'x.prixAchatBrut',
  480.                           $translator->trans("Tx remise")        => 'x.tauxRemise',
  481.                           $translator->trans("Tx remise suppl.") => 'x.tauxRemiseSupplementaire',
  482.                           $translator->trans("Prix achat net")   => 'x.prixAchatNet',
  483.                           //$translator->trans("Fournisseur") =>  'f.libelle',
  484.                           //$translator->trans("Devise") =>  "d.name",
  485.                           $translator->trans("Défaut")           => 'x.defaut',
  486.                           $translator->trans("Actions")          => 'x.id',
  487.                           "_identifier_"                         => 'x.id',
  488.                       ]
  489.                   )
  490.                   ->addJoin('x.article''a'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  491.                   ->addJoin('x.fournisseur''f'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  492.                   ->addJoin('f.devise''d'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  493.                   ->setWhere(
  494.                       'x.fournisseur = :objet',
  495.                       ['objet' => $objet]
  496.                   )
  497.                   ->setRenderers(
  498.                       [
  499.                           /*
  500.                           1 => array(
  501.                               'view' => 'FO/DataTable/actions_modal.html.twig',
  502.                               'params' => array(
  503.                                       'edit_route'  => 'dtc_article_modifier',
  504.                                       'id'    => '',
  505.                                       'type'    => $type,
  506.                                       //'entite'    => 'article',
  507.                                       //'objet' => "DTCArticlesBundle:Article",
  508.                                       'typeDocument' => 'article'
  509.                                   ),
  510.                           ),
  511.                            *
  512.                            */
  513.                           => [
  514.                               'view'   => 'FO/DataTable/actions_modal.html.twig',
  515.                               'params' => [
  516.                                   'edit_route' => 'dtc_condition_achat_modifier',
  517.                                   'id'         => $objet->getId(),
  518.                                   'type'       => $type,
  519.                                   'entite'     => 'garantie',
  520.                                   'objet'      => ConditionAchat::class,
  521.                                   'affichage'  => 'item',
  522.                               ],
  523.                           ],
  524.                           7  => [
  525.                               'view'   => 'FO/DataTable/prix.html.twig',
  526.                               'params' => [
  527.                                   'arrondi'        => 3,
  528.                                   'afficher_total' => false,
  529.                               ],
  530.                           ],
  531.                           10 => [
  532.                               'view'   => 'FO/DataTable/prix.html.twig',
  533.                               'params' => [
  534.                                   'arrondi'        => 3,
  535.                                   'afficher_total' => false,
  536.                               ],
  537.                           ],
  538.                           11 => [
  539.                               'view' => 'FO/DataTable/booleen.html.twig',
  540.                           ],
  541.                           12 => [
  542.                               'view'   => 'FO/DataTable/actions_modal.html.twig',
  543.                               'params' => [
  544.                                   'edit_route'      => 'dtc_condition_achat_modifier',
  545.                                   'supprimer_route' => 'dtc_condition_achat_supprimer',
  546.                                   'id'              => $objet->getId(),
  547.                                   'type'            => $type,
  548.                                   'table'           => "dta-condition-achat",
  549.                                   'entite'          => 'garantie',
  550.                                   'objet'           => ConditionAchat::class
  551.                               ,
  552.                                   'width_modal'     => 800,
  553.                               ],
  554.                           ],
  555.                       ]
  556.                   )
  557.                   ->setOrder("x.id""desc")
  558.                   ->setSearch(true)
  559.             //->setFilteringType(array(2 => 'f',3 => 'e'))
  560.                   ->setSearchFields([123678910]);
  561.         return $datatable;
  562.     }
  563.     /**
  564.      * set datatable configs
  565.      *
  566.      * @return \App\Library\Datatable\Util\Datatable
  567.      */
  568.     private function datatableArticle($objet$type ""Datatable $datatableTranslatorInterface $translator)
  569.     {
  570.         $type_jointure 'x.'.$type;
  571.         $datatable->setDatatableId('dta-condition-achat')
  572.                   ->setEntity(ConditionAchat::class, "x")
  573.                   ->setFields(
  574.                       [
  575.                           //$translator->trans("ID") =>  'x.id',
  576.                           $translator->trans("Date de màj")          => 'x.dateMaj',
  577.                           $translator->trans("màj prix")             => 'x.dateMajPrix',
  578.                           $translator->trans("Fournisseur")          => 'f.libelle',
  579.                           $translator->trans("Réf fourn.")           => 'x.referenceFournisseur',
  580.                           $translator->trans("Prix base")            => 'x.prixAchatBrut',
  581.                           $translator->trans("Remise")               => 'x.tauxRemise',
  582.                           $translator->trans("Remise suppl.")        => 'x.tauxRemiseSupplementaire',
  583.                           $translator->trans("Frais annexes")        => 'x.fraisAnnexes',
  584.                           $translator->trans("Coeff.")               => 'x.coefficient',
  585.                           $translator->trans("Px achat net(devise)") => 'x.prixAchatNet',
  586.                           $translator->trans("Devise")               => "d.name",
  587.                           $translator->trans("Prix achat net(€)")    => 'x.prixAchatNet',
  588.                           $translator->trans("Unité d'achat")        => 'u.libelle',
  589.                           $translator->trans("CC")                   => 'x.coefficientConditionnement',
  590.                           $translator->trans("Qté mini")             => 'x.quantite',
  591.                           $translator->trans("Cond.")                => 'x.conditionnement',
  592.                           $translator->trans("Délai")                => 'x.delai',
  593.                           $translator->trans("Défaut")   => 'x.defaut',
  594.                           $translator->trans("Prix net") => 'x.prixNet',
  595.                           $translator->trans("Actions")  => 'x.id',
  596.                           "_identifier_"                 => 'x.id',
  597.                       ]
  598.                   )
  599.                   ->addJoin('x.fournisseur''f'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  600.                   ->addJoin('f.devise''d'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  601.                   ->addJoin('x.uniteMesure''u'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  602.             /*->setWhere(
  603.                     $type_jointure.' = :objet',
  604.                     array('objet' => $objet)
  605.                )
  606.               */
  607.                   ->setWhere(
  608.                 'x.article = :objet',
  609.                 ['objet' => $objet]
  610.             )
  611.                   ->setRenderers(
  612.                       [
  613.                           => [
  614.                               'view' => 'FO/DataTable/date.html.twig',
  615.                           ],
  616.                           => [
  617.                               'view' => 'FO/DataTable/datetime.html.twig',
  618.                           ],
  619.                           => [
  620.                               'view'   => 'FO/DataTable/avec_lien_edit_route.html.twig',
  621.                               'params' => [
  622.                                   'edit_route'   => 'dtc_fournisseur_modifier',
  623.                                   'typeDocument' => 'fournisseur',
  624.                                   'target'       => '_blank',
  625.                               ],
  626.                           ],
  627.                           => [
  628.                               'view'   => 'FO/DataTable/prix.html.twig',
  629.                               'params' => ['arrondi' => 3"afficher_total" => false],
  630.                           ],
  631.                           => [
  632.                               'view' => 'FO/DataTable/num2chiffres.html.twig',
  633.                           ],
  634.                           => [
  635.                               'view'   => 'FO/DataTable/prix.html.twig',
  636.                               'params' => ['arrondi' => 3"afficher_total" => false],
  637.                           ],
  638.                           11 => [
  639.                               'view'   => 'FO/DataTable/prix.html.twig',
  640.                               'params' => [
  641.                                   'conversion'     => '*',
  642.                                   'forceEuro'      => 1,
  643.                                   'arrondi'        => 3,
  644.                                   "afficher_total" => false,
  645.                               ],
  646.                           ],
  647.                           17 => [
  648.                               'view'   => 'FO/DataTable/statut.html.twig',
  649.                               'params' => [
  650.                                   'edit_route' => 'dtc_condition_achat_statut',
  651.                               ],
  652.                           ],
  653.                           18 => [
  654.                               'view'   => 'FO/DataTable/booleen.html.twig',
  655.                               'params' => [],
  656.                           ],
  657.                           19 => [
  658.                               'view'   => 'FO/DataTable/actions_modal.html.twig',
  659.                               'params' => [
  660.                                   'edit_route'      => 'dtc_condition_achat_modifier',
  661.                                   'supprimer_route' => 'dtc_condition_achat_supprimer',
  662.                                   'id'              => $objet->getId(),
  663.                                   'type'            => $type,
  664.                                   'table'           => "dta-condition-achat",
  665.                                   'entite'          => 'garantie',
  666.                                   'objet'           => ConditionAchat::class
  667.                               ,
  668.                                   'width_modal'     => 800,
  669.                               ],
  670.                           ],
  671.                       ]
  672.                   )
  673.                   ->setOrder("x.id""desc")
  674.                   ->setSearch(true)//->setSearchFields(array(1,2))
  675.         ;
  676.         return $datatable;
  677.     }
  678.     /**
  679.      * @Route("/condition-achat/grid/{id}/{type}", name="dtc_condition_achat_liste_grid")
  680.      */
  681.     public function gridAction($id ""$type ""EntityManagerInterface $emDatatable $datatableTranslatorInterface $translator)
  682.     {
  683.         if ($type == "article") {
  684.             $repo_objet $em->getRepository(Article::class);
  685.         } elseif ($type == "fournisseur") {
  686.             $repo_objet $em->getRepository(Fournisseur::class);
  687.         }
  688.         $objet $repo_objet->find($id);
  689.         if (is_object($objet) and $type == "article") {
  690.             return $this->datatableArticle($objet$type$datatable$translator)->execute();
  691.         } elseif (is_object($objet) and $type == "fournisseur") {
  692.             return $this->datatableFournisseur($objet$type$datatable$translator)->execute();
  693.         } else {
  694.             return $this->datatable($datatable$translator)->execute();
  695.         }
  696.     }
  697.     /**
  698.      * @Route("/condition-achat/statut/{id}", name="dtc_condition_achat_statut")
  699.      */
  700.     public function changeStatutAction(ConditionAchat $conditionAchatEntityManagerInterface $emArticleService $articleService)
  701.     {
  702.         if ($conditionAchat->getDefaut() == 1) {
  703.             $conditionAchat->setDefaut(false);
  704.         } else {
  705.             //Changer le statut de toutes les conditions d'achat de l'article
  706.             $article         $conditionAchat->getArticle();
  707.             $conditionsAchat $article->getConditionsAchat();
  708.             foreach ($conditionsAchat as $condition) {
  709.                 if ($condition->getDefaut() == 1) {
  710.                     $condition->setDefaut(false);
  711.                     $em->persist($condition);
  712.                 }
  713.             }
  714.             //Changer le statut de cette condition d'achat
  715.             $conditionAchat->setDefaut(true);
  716.             $em->flush();
  717.             //Modifier le fournisseur par défaut
  718.             $fournisseur $conditionAchat->getFournisseur();
  719.             $article->setFournisseurDefaut($fournisseur);
  720.             $em->persist($article);
  721.             //Modifier l'article
  722.             if ($article->getMajPrix() == 1) {
  723.                 $articleService->majEnFonctionDuPrixAchat($article$conditionAchat->getPrixAchatBrut());
  724.             }
  725.         }
  726.         $em->persist($conditionAchat);
  727.         $em->flush();
  728.         $headers = [
  729.             'Content-Type'                 => 'application/json',
  730.             'Access-Control-Allow-Origin'  => '*',
  731.             'Access-Control-Allow-Methods' => 'POST',
  732.         ];
  733.         return new JsonResponse(['data' => '1''multiple' => '1'], 200$headers);
  734.     }
  735.     /**
  736.      * @Route("/condition-achat/choix-auto/{fournisseur}/{article}/{quantite}", name="dtc_condition_achat_choix_auto")
  737.      */
  738.     public function choixAutoAction($fournisseur$article$quantiteEntityManagerInterface $em)
  739.     {
  740.         $retour                      = [];
  741.         $conditionsAchat             $em->getRepository(ConditionAchat::class)->findBy([
  742.                                                                                              'article'     => $article,
  743.                                                                                              'fournisseur' => $fournisseur,
  744.                                                                                          ]);
  745.         $conditionAchatActuelle      null;
  746.         $conditionAchatQteSuperieure null;
  747.         if (count($conditionsAchat)) {
  748.             foreach ($conditionsAchat as $conditionAchat) {
  749.                 $quantiteCondHa floatval($conditionAchat->getQuantite());
  750.                 if ( ! empty(floatval($conditionAchat->getCoefficientConditionnement()))) {
  751.                     $quantiteCondHa $quantiteCondHa floatval($conditionAchat->getCoefficientConditionnement());
  752.                 }
  753.                 if (floatval($quantite) >= $quantiteCondHa) {
  754.                     if ($conditionAchatActuelle == null) {
  755.                         $conditionAchatActuelle $conditionAchat;
  756.                     }
  757.                     if (floatval($conditionAchatActuelle->getprixAchatNet()) > floatval($conditionAchat->getprixAchatNet())) {
  758.                         $conditionAchatActuelle $conditionAchat;
  759.                     }
  760.                 }
  761.                 if (floatval($quantite) < $quantiteCondHa) {
  762.                     if ($conditionAchatQteSuperieure == null) {
  763.                         $conditionAchatQteSuperieure $conditionAchat;
  764.                     }
  765.                     $quantiteCondHaQteSuperieure floatval($conditionAchatQteSuperieure->getQuantite());
  766.                     if ( ! empty(floatval($conditionAchatQteSuperieure->getCoefficientConditionnement()))) {
  767.                         $quantiteCondHaQteSuperieure $quantiteCondHaQteSuperieure floatval($conditionAchatQteSuperieure->getCoefficientConditionnement());
  768.                     }
  769.                     if ($quantiteCondHaQteSuperieure $quantiteCondHa) {
  770.                         $conditionAchatQteSuperieure $conditionAchat;
  771.                     }
  772.                 }
  773.             }
  774.         }
  775.         /*
  776.         $retour = array(
  777.             'conditionAchatActuelle' => $conditionAchatActuelle,
  778.             'conditionAchatQteSuperieure' => $conditionAchatQteSuperieure,
  779.         );
  780.         */
  781.         if (is_object($conditionAchatActuelle)) {
  782.             $retour['conditionAchatActuelle'] = [
  783.                 'id'                   => $conditionAchatActuelle->getId(),
  784.                 'prixAchatBrut'        => $conditionAchatActuelle->getPrixAchatBrut(),
  785.                 'remise'               => floatval($conditionAchatActuelle->getRemise()),
  786.                 'remiseSupplementaire' => floatval($conditionAchatActuelle->getRemiseSupplementaire()),
  787.                 'referenceFournisseur' => $conditionAchatActuelle->getReferenceFournisseur(),
  788.                 'libelle'              => $conditionAchatActuelle->getLibelle(),
  789.                 //'coefficientConditionnement' => floatval($conditionAchatActuelle->getCoefficientConditionnement()),
  790.                 //'conditionnement' => floatval($conditionAchatActuelle->getConditionnement()),
  791.                 'fraisAnnexes'         => floatval($conditionAchatActuelle->getFraisAnnexes()),
  792.                 'delai'                => $conditionAchatActuelle->getDelai(),
  793.                 'referenceFournisseur' => $conditionAchatActuelle->getReferenceFournisseur(),
  794.                 'prixAchatNet'         => $conditionAchatActuelle->getPrixAchatNet(),
  795.             ];
  796.             if (in_array($conditionAchatActuelle->getCoefficientConditionnement(), [''0])) {
  797.                 $retour['conditionAchatActuelle']['coefficientConditionnement'] = 1;
  798.             } else {
  799.                 $retour['conditionAchatActuelle']['coefficientConditionnement'] = floatval($conditionAchatActuelle->getCoefficientConditionnement());
  800.             }
  801.             if (in_array($conditionAchatActuelle->getConditionnement(), [''0])) {
  802.                 $retour['conditionAchatActuelle']['conditionnement'] = 1;
  803.             } else {
  804.                 $retour['conditionAchatActuelle']['conditionnement'] = floatval($conditionAchatActuelle->getConditionnement());
  805.             }
  806.         }
  807.         if (is_object($conditionAchatQteSuperieure)) {
  808.             $retour['conditionAchatQteSuperieure'] = [
  809.                 'id'       => $conditionAchatQteSuperieure->getId(),
  810.                 'prix'     => $conditionAchatQteSuperieure->getPrixAchatNet(),
  811.                 'quantite' => $conditionAchatQteSuperieure->getQuantite(),
  812.             ];
  813.         }
  814.         return new JsonResponse($retour);
  815.     }
  816. }