src/Controller/DocumentController.php line 38

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Adresse;
  4. use App\Entity\Document;
  5. use App\Entity\DocumentLigne;
  6. use App\Entity\Projet;
  7. use App\Entity\Societe;
  8. use App\Entity\Souche;
  9. use App\Entity\Tiers;
  10. use App\Repository\DocumentRepository;
  11. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  12. use Symfony\Component\HttpFoundation\Request;
  13. use Symfony\Component\HttpFoundation\RequestStack;
  14. use Symfony\Component\HttpFoundation\Response;
  15. use Symfony\Component\Routing\Annotation\Route;
  16. use App\Tools\JsonRes;
  17. use Doctrine\Persistence\ManagerRegistry;
  18. use Doctrine\Persistence\ObjectManager;
  19. class DocumentController extends AbstractController
  20. {
  21.     private ?ObjectManager $em null;
  22.     private ?string $prefixSociete null;
  23.     /**
  24.      * Stockage des informations de la société pour affichage sur entête document
  25.      * @var object|mixed|null
  26.      */
  27.     private ?object $dataSociete null;
  28.     public function __construct(RequestStack $requestStackManagerRegistry $doctrine)
  29.     {
  30.         $request $requestStack->getCurrentRequest();
  31.         //TODO: page erreur subdomain
  32.         if(null===$request->getSession()->get('societe')) return $this->render('misc/404.html.twig');
  33.         // on récupère le sous-domaine stocké en session pour pointer vers le bon entity manager
  34.         $subdomain $request->getSession()->get('societe')->getBase();
  35.         $this->em $doctrine->getManager($subdomain);
  36.         $this->prefixSociete $request->getSession()->get('societe')->getPrefix();
  37.         if(null!==$this->prefixSociete$this->prefixSociete strtoupper($this->prefixSociete);
  38.         $jsonString $request->getSession()->get('societe')->getData();
  39.         if(null!==$jsonString) {
  40.             $this->dataSociete json_decode($jsonString);
  41.             $this->dataSociete->lib_societe $request->getSession()->get('societe')->getLibSociete();
  42.             $this->dataSociete->logo_path $request->getSession()->get('societe')->getLogoPath();
  43.         }
  44.     }
  45.     /**
  46.      * @Route("/document/update-societe", methods={"POST"}, name="update_doc_societe")
  47.      */
  48.     public function updateSociete(Request $request): Response
  49.     {
  50.         //TODO: page erreur entity manager
  51.         if(null===$this->em) return $this->render('misc/404.html.twig');
  52.         // Initialisation du retour Json
  53.         $res = new JsonRes($request->request->all());
  54.         if($res->isSuccess()) {
  55.             $data $res->getData();
  56.             if(!isset($data['id_document'])) $res->addErrMsg('champs id_document inconnu');
  57.             if(!isset($data['id_societe'])) $res->addErrMsg('champs id_societe inconnu');
  58.             if($res->isSuccess()) {
  59.                 if(''===$data['id_document']) $res->addErrMsg('champs id_document obligatoire');
  60.                 if(''===$data['id_societe']) $res->addErrMsg('champs id_societe obligatoire');
  61.                 if($res->isSuccess()) {
  62.                     $adresseRepository $this->em->getRepository(Societe::class);
  63.                     /**  @var Societe $societe */
  64.                     $societe $adresseRepository->find($data['id_societe']);
  65.                     if(null===$societe$res->addErrMsg('Societe introuvable');
  66.                     if($res->isSuccess()) {
  67.                         if(0===$societe->getAdresses()->count()) $res->addErrMsg('Cette société n\'a pas d\'adresse, ajouter une adresse');
  68.                         if($res->isSuccess()) {
  69.                             $documentRepository $this->em->getRepository(Document::class);
  70.                             /** @var Document $document */
  71.                             $document $documentRepository->find($data['id_document']);
  72.                             if(!null==$document) {
  73.                                 /** @var \App\Entity\User $currentUser */
  74.                                 $currentUser $this->getUser()->getId();
  75.                                 $document->setTiers($societe)
  76.                                     ->setAdresse($societe->getAdresses()->first())
  77.                                     ->setUserModif($currentUser)
  78.                                     ->setDateModif(new \DateTime())
  79.                                 ;
  80.                                 $this->em->persist($document);
  81.                                 $this->em->flush();
  82.                             }
  83.                             $res->setData($data);
  84.                         }
  85.                     }
  86.                 }
  87.             }
  88.         }
  89.         die($res->returnJson());
  90.     }
  91.     /**
  92.      * @Route("/document/update-adresse", methods={"POST"}, name="update_doc_adresse")
  93.      */
  94.     public function updateAdresse(Request $request): Response
  95.     {
  96.         //TODO: page erreur entity manager
  97.         if(null===$this->em) return $this->render('misc/404.html.twig');
  98.         // Initialisation du retour Json
  99.         $res = new JsonRes($request->request->all());
  100.         if($res->isSuccess()) {
  101.             $data $res->getData();
  102.             if(!isset($data['id_document'])) $res->addErrMsg('champs id_document inconnu');
  103.             if(!isset($data['id_adresse'])) $res->addErrMsg('champs id_adresse inconnu');
  104.             if($res->isSuccess()) {
  105.                 if(''===$data['id_document']) $res->addErrMsg('champs id_document obligatoire');
  106.                 if(''===$data['id_adresse']) $res->addErrMsg('champs id_adresse obligatoire');
  107.                 if($res->isSuccess()) {
  108.                     $adresseRepository $this->em->getRepository(Adresse::class);
  109.                     /**  @var Adresse $adresse */
  110.                     $adresse $adresseRepository->find($data['id_adresse']);
  111.                     if(null===$adresse$res->addErrMsg('Adresse introuvable');
  112.                     if($res->isSuccess()) {
  113.                         $res->setHtml('
  114.                             <p>' $adresse->getLigne1() . '</p>
  115.                             <p>' $adresse->getLigne2() . '</p>
  116.                             <p>' $adresse->getCodePostal() . ' ' $adresse->getVille() . '</p>
  117.                             <p>' $adresse->getPays() . '</p>
  118.                         ');
  119.                     }
  120.                     $documentRepository $this->em->getRepository(Document::class);
  121.                     /** @var Document $document */
  122.                     $document $documentRepository->find($data['id_document']);
  123.                     if(!null==$document) {
  124.                         /** @var \App\Entity\User $currentUser */
  125.                         $currentUser $this->getUser()->getId();
  126.                         $document->setAdresse($adresse)
  127.                             ->setUserModif($currentUser)
  128.                             ->setDateModif(new \DateTime())
  129.                         ;
  130.                         $this->em->persist($document);
  131.                         $this->em->flush();
  132.                     }
  133.                     $res->setData($data);
  134.                 }
  135.             }
  136.         }
  137.         die($res->returnJson());
  138.     }
  139.     /**
  140.      * @Route("/document/update-lib-projet", methods={"POST"}, name="update_doc_lib_projet")
  141.      */
  142.     public function updateLibProjet(Request $request): Response
  143.     {
  144.         //TODO: page erreur entity manager
  145.         if(null===$this->em) return $this->render('misc/404.html.twig');
  146.         // Initialisation du retour Json
  147.         $res = new JsonRes($request->request->all());
  148.         if($res->isSuccess()) {
  149.             $data $res->getData();
  150.             if(!isset($data['id_document'])) $res->addErrMsg('champs id_document inconnu');
  151.             if(!isset($data['lib_projet_document'])) $res->addErrMsg('champs lib_projet_document inconnu');
  152.             if($res->isSuccess()) {
  153.                 if(''===$data['id_document']) $res->addErrMsg('champs id_document obligatoire');
  154.                 if($res->isSuccess()) {
  155.                     $documentRepository $this->em->getRepository(Document::class);
  156.                     /** @var Document $document */
  157.                     $document $documentRepository->find($data['id_document']);
  158.                     if(!null==$document) {
  159.                         if(''===$data['lib_projet_document']) $data['lib_projet_document'] = $document->getProjet()->getLibProjet();
  160.                         /** @var \App\Entity\User $currentUser */
  161.                         $currentUser $this->getUser()->getId();
  162.                         $document->setLibProjet($data['lib_projet_document'])
  163.                             ->setUserModif($currentUser)
  164.                             ->setDateModif(new \DateTime())
  165.                         ;
  166.                         $this->em->persist($document);
  167.                         $this->em->flush();
  168.                     }
  169.                     $res->setData($data);
  170.                 }
  171.             }
  172.         }
  173.         die($res->returnJson());
  174.     }
  175.     /**
  176.      * @Route("/document/update-date-bdc", methods={"POST"}, name="update_doc_date_bdc")
  177.      */
  178.     public function updateDateBdc(Request $request): Response
  179.     {
  180.         //TODO: page erreur entity manager
  181.         if(null===$this->em) return $this->render('misc/404.html.twig');
  182.         // Initialisation du retour Json
  183.         $res = new JsonRes($request->request->all());
  184.         if($res->isSuccess()) {
  185.             $data $res->getData();
  186.             if(!isset($data['id_document'])) $res->addErrMsg('champs id_document inconnu');
  187.             if(!isset($data['date_bdc_document'])) $res->addErrMsg('champs date_bdc_document inconnu');
  188.             if($res->isSuccess()) {
  189.                 if(''===$data['id_document']) $res->addErrMsg('champs id_document obligatoire');
  190.                 $dateBdc date_create_from_format('Y-m-d'$data['date_bdc_document']);
  191.                 if(!$dateBdc$res->addErrMsg('Le format de la date est incorrect');
  192.                 if($res->isSuccess()) {
  193.                     $documentRepository $this->em->getRepository(Document::class);
  194.                     /** @var Document $document */
  195.                     $document $documentRepository->find($data['id_document']);
  196.                     if(!null==$document) {
  197.                         /** @var \App\Entity\User $currentUser */
  198.                         $currentUser $this->getUser()->getId();
  199.                         $document->setDateBdc($dateBdc)
  200.                             ->setUserModif($currentUser)
  201.                             ->setDateModif(new \DateTime())
  202.                         ;
  203.                         $this->em->persist($document);
  204.                         $this->em->flush();
  205.                     }
  206.                     $res->setData($data);
  207.                 }
  208.             }
  209.         }
  210.         die($res->returnJson());
  211.     }
  212.     /**
  213.      * @Route("/document/update-date-budget", methods={"POST"}, name="update_doc_date_budget")
  214.      */
  215.     public function updateDateBudget(Request $request): Response
  216.     {
  217.         //TODO: page erreur entity manager
  218.         if(null===$this->em) return $this->render('misc/404.html.twig');
  219.         // Initialisation du retour Json
  220.         $res = new JsonRes($request->request->all());
  221.         $data $res->getData();
  222.         if(!$this->isGranted('ROLE_ADMIN')) $res->addErrMsg('Vous n\'avez pas les droits pour effectuer cette action');
  223.         if(empty($data['id_document'])) $res->addErrMsg('erreur id_document');
  224.         if(empty($data['date_budget'])) $res->addErrMsg('erreur date_budget');
  225.         if(!$res->isSuccess()) die($res->returnJson());
  226.         $dateBudget date_create_from_format('Y-m-d'$data['date_budget']);
  227.         if(!$dateBudget$res->addErrMsg('Le format de la date est incorrect');
  228.         if(!$res->isSuccess()) die($res->returnJson());
  229.         $documentRepository $this->em->getRepository(Document::class);
  230.         /** @var Document $document */
  231.         $document $documentRepository->find($data['id_document']);
  232.         if(empty($document)) $res->addErrMsg('Document non trouvé dans la base de donnée');
  233.         if(!$res->isSuccess()) die($res->returnJson());
  234.         /** @var \App\Entity\User $currentUser */
  235.         $currentUser $this->getUser()->getId();
  236.         $document->setDateCrea($dateBudget)
  237.             ->setUserModif($currentUser)
  238.             ->setDateModif(new \DateTime())
  239.         ;
  240.         $this->em->persist($document);
  241.         $this->em->flush();
  242.         $res->setData($data);
  243.         die($res->returnJson());
  244.     }
  245.     /**
  246.      * @Route("/document/update-reference", methods={"POST"}, name="update_doc_reference")
  247.      */
  248.     public function updateReference(Request $request): Response
  249.     {
  250.         //TODO: page erreur entity manager
  251.         if(null===$this->em) return $this->render('misc/404.html.twig');
  252.         // Initialisation du retour Json
  253.         $res = new JsonRes($request->request->all());
  254.         if($res->isSuccess()) {
  255.             $data $res->getData();
  256.             if(!isset($data['id_document'])) $res->addErrMsg('champs id_document inconnu');
  257.             if(!isset($data['reference_document'])) $res->addErrMsg('champs reference_document inconnu');
  258.             if($res->isSuccess()) {
  259.                 if(''===$data['id_document']) $res->addErrMsg('champs id_document obligatoire');
  260.                 if($res->isSuccess()) {
  261.                     $documentRepository $this->em->getRepository(Document::class);
  262.                     /** @var Document $document */
  263.                     $document $documentRepository->find($data['id_document']);
  264.                     if(!null==$document) {
  265.                         /** @var \App\Entity\User $currentUser */
  266.                         $currentUser $this->getUser()->getId();
  267.                         $document->setReference($data['reference_document'])
  268.                             ->setUserModif($currentUser)
  269.                             ->setDateModif(new \DateTime())
  270.                         ;
  271.                         $this->em->persist($document);
  272.                         $this->em->flush();
  273.                     }
  274.                     $res->setData($data);
  275.                 }
  276.             }
  277.         }
  278.         die($res->returnJson());
  279.     }
  280.     /**
  281.      * @Route("/document/update-contact", methods={"POST"}, name="update_doc_contact")
  282.      */
  283.     public function updateContact(Request $request): Response
  284.     {
  285.         //TODO: page erreur entity manager
  286.         if(null===$this->em) return $this->render('misc/404.html.twig');
  287.         // Initialisation du retour Json
  288.         $res = new JsonRes($request->request->all());
  289.         if($res->isSuccess()) {
  290.             $data $res->getData();
  291.             if(!isset($data['id_document'])) $res->addErrMsg('champs id_document inconnu');
  292.             if(!isset($data['contact_document'])) $res->addErrMsg('champs contact_document inconnu');
  293.             if($res->isSuccess()) {
  294.                 if(''===$data['id_document']) $res->addErrMsg('champs id_document obligatoire');
  295.                 if($res->isSuccess()) {
  296.                     $documentRepository $this->em->getRepository(Document::class);
  297.                     /** @var Document $document */
  298.                     $document $documentRepository->find($data['id_document']);
  299.                     if(!null==$document) {
  300.                         /** @var \App\Entity\User $currentUser */
  301.                         $currentUser $this->getUser()->getId();
  302.                         $document->setContact($data['contact_document'])
  303.                             ->setUserModif($currentUser)
  304.                             ->setDateModif(new \DateTime())
  305.                         ;
  306.                         $this->em->persist($document);
  307.                         $this->em->flush();
  308.                     }
  309.                     $res->setData($data);
  310.                 }
  311.             }
  312.         }
  313.         die($res->returnJson());
  314.     }
  315.     /**
  316.      * @Route("/document/update-condition-reglement", methods={"POST"}, name="update_doc_condition_reglement")
  317.      */
  318.     public function updateConditionReglement(Request $request): Response
  319.     {
  320.         //TODO: page erreur entity manager
  321.         if(null===$this->em) return $this->render('misc/404.html.twig');
  322.         // Initialisation du retour Json
  323.         $res = new JsonRes($request->request->all());
  324.         if($res->isSuccess()) {
  325.             $data $res->getData();
  326.             if(!isset($data['id_document'])) $res->addErrMsg('champs id_document inconnu');
  327.             if(!isset($data['condition_reglement_document'])) $res->addErrMsg('champs condition_reglement_document inconnu');
  328.             if($res->isSuccess()) {
  329.                 if(''===$data['id_document']) $res->addErrMsg('champs id_document obligatoire');
  330.                 if($res->isSuccess()) {
  331.                     if(empty($data['condition_reglement_document'])) $data['condition_reglement_document'] = null;
  332.                     $documentRepository $this->em->getRepository(Document::class);
  333.                     /** @var Document $document */
  334.                     $document $documentRepository->find($data['id_document']);
  335.                     if(!null==$document) {
  336.                         /** @var \App\Entity\User $currentUser */
  337.                         $currentUser $this->getUser()->getId();
  338.                         $document->setConditionReglement($data['condition_reglement_document'])
  339.                             ->setUserModif($currentUser)
  340.                             ->setDateModif(new \DateTime())
  341.                         ;
  342.                         $this->em->persist($document);
  343.                         $this->em->flush();
  344.                     }
  345.                     $res->setData($data);
  346.                 }
  347.             }
  348.         }
  349.         die($res->returnJson());
  350.     }
  351.     /**
  352.      * @Route("/document/update-statut", methods={"POST"}, name="update_doc_statut")
  353.      */
  354.     public function updateStatut(Request $request): Response
  355.     {
  356.         //TODO: page erreur entity manager
  357.         if(null===$this->em) return $this->render('misc/404.html.twig');
  358.         // Initialisation du retour Json
  359.         $res = new JsonRes($request->request->all());
  360.         if($res->isSuccess()) {
  361.             $data $res->getData();
  362.             if(!isset($data['id_document'])) $res->addErrMsg('champs id_document inconnu');
  363.             if($res->isSuccess()) {
  364.                 if(''===$data['id_document']) $res->addErrMsg('champs id_document obligatoire');
  365.                 if($res->isSuccess()) {
  366.                     $documentRepository $this->em->getRepository(Document::class);
  367.                     /** @var Document $document */
  368.                     $document $documentRepository->find($data['id_document']);
  369.                     if(!null==$document) {
  370.                         /** @var \App\Entity\User $currentUser */
  371.                         $currentUser $this->getUser()->getId();
  372.                         $document->setStatut('payé')
  373.                             ->setDatePaiement(new \DateTime())
  374.                             ->setUserModif($currentUser)
  375.                             ->setDateModif(new \DateTime())
  376.                         ;
  377.                         $this->em->persist($document);
  378.                         $this->em->flush();
  379.                     }
  380.                     $res->setData($data);
  381.                 }
  382.             }
  383.         }
  384.         die($res->returnJson());
  385.     }
  386.     /**
  387.      * @Route("/document/insert-ligne", methods={"POST"}, name="insert_ligne")
  388.      */
  389.     public function insertLigne(Request $request): Response
  390.     {
  391.         //TODO: page erreur entity manager
  392.         if(null===$this->em) return $this->render('misc/404.html.twig');
  393.         // Initialisation du retour Json
  394.         $res = new JsonRes($request->request->all());
  395.         if($res->isSuccess()) {
  396.             $data $res->getData();
  397.             if(!isset($data['id_document'])) $res->addErrMsg('champs id_document inconnu');
  398.             if(!isset($data['id_projet'])) $res->addErrMsg('champs id_projet inconnu');
  399.             if(!isset($data['type_document'])) $res->addErrMsg('champs type_document inconnu');
  400.             if(!isset($data['id_adresse'])) $res->addErrMsg('champs id_adresse inconnu');
  401.             if(!isset($data['lib_projet_document'])) $res->addErrMsg('champs lib_projet_document inconnu');
  402.             if(!isset($data['date_bdc_document'])) $res->addErrMsg('champs date_bdc_document inconnu');
  403.             if(!isset($data['reference_document'])) $res->addErrMsg('champs reference_document inconnu');
  404.             if(!isset($data['contact_document'])) $res->addErrMsg('champs contact_document inconnu');
  405.             if(!isset($data['nouvelle_ligne'])) $res->addErrMsg('champs nouvelle_ligne inconnu');
  406.             if(empty($data['date_budget'])) $res->addErrMsg('erreur date_budget');
  407.             if(!$res->isSuccess()) die($res->returnJson());
  408.             if($res->isSuccess()) {
  409.                 if(''===$data['id_document']) $res->addErrMsg('champs id_document obligatoire');
  410.                 if(''===$data['id_projet']) $res->addErrMsg('champs id_projet obligatoire');
  411.                 if(''===$data['type_document']) $res->addErrMsg('champs type_document obligatoire');
  412.                 if(empty($data['nouvelle_ligne'])) $res->addErrMsg('champs nouvelle_ligne vide');
  413.                 if($res->isSuccess()) {
  414.                     if(!isset($data['nouvelle_ligne']['libelle'])) $res->addErrMsg('champs libelle inconnu');
  415.                     if(!isset($data['nouvelle_ligne']['description'])) $res->addErrMsg('champs description inconnu');
  416.                     if(!isset($data['nouvelle_ligne']['qte'])) $res->addErrMsg('champs qte inconnu');
  417.                     if(!isset($data['nouvelle_ligne']['puht'])) $res->addErrMsg('champs puht inconnu');
  418.                     if(!isset($data['nouvelle_ligne']['taux_tva'])) $res->addErrMsg('champs taux_tva inconnu');
  419.                     if('COMMANDE PRESTATAIRE'===$data['type_document']){
  420.                         if(!isset($data['id_prestataire'])) $res->addErrMsg('champs id_prestataire inconnu');
  421.                     }
  422.                     if($res->isSuccess()) {
  423.                         if(''===$data['nouvelle_ligne']['libelle']) $res->addErrMsg('champs libelle obligatoire');
  424.                         if(''===$data['nouvelle_ligne']['qte']) $res->addErrMsg('champs qte obligatoire');
  425.                         if(''===$data['nouvelle_ligne']['puht']) $res->addErrMsg('champs puht obligatoire');
  426.                         if(''===$data['nouvelle_ligne']['taux_tva']) $res->addErrMsg('champs taux_tva obligatoire');
  427.                         if('COMMANDE PRESTATAIRE'===$data['type_document']){
  428.                             if(''===$data['id_prestataire']) $res->addErrMsg('champs id_prestataire obligatoire');
  429.                         }
  430.                     }
  431.                 }
  432.                 $dateBudget date_create_from_format('Y-m-d'$data['date_budget']);
  433.                 if(!$dateBudget$res->addErrMsg('Le format de la date est incorrect');
  434.                 $dateBdc date_create_from_format('Y-m-d'$data['date_bdc_document']);
  435.                 if(!$dateBdc$res->addErrMsg('Le format de la date est incorrect');
  436.                 if($res->isSuccess()) {
  437.                     /** @var \App\Entity\User $currentUser */
  438.                     $currentUser $this->getUser()->getId();
  439.                     /** @var Document $document */
  440.                     $document null;
  441.                     if(0===intval($data['id_document'])){ // si id_document = 0 alors création du document
  442.                         $projetRepository $this->em->getRepository(Projet::class);
  443.                         /** @var Projet $projet */
  444.                         $projet $projetRepository->find($data['id_projet']);
  445.                         if(!null==$projet){
  446.                             $document = new Document();
  447.                             $document->setProjet($projet)
  448.                                 ->setTiers($projet->getSociete())
  449.                                 ->setTypeDocument($data['type_document'])
  450.                                 ->setDateCrea($dateBudget)
  451.                                 ->setUserCrea($currentUser)
  452.                                 ->setMontantHt(0)
  453.                                 ->setMontantTva(0)
  454.                                 ->setReference($data['reference_document'])
  455.                                 ->setContact($data['contact_document'])
  456. //                                ->setLibProjet($data['lib_projet_document']) // pas obligatoire
  457.                                 ->setDateBdc($dateBdc)
  458.                             ;
  459.                             $adresseRepository $this->em->getRepository(Adresse::class);
  460.                             /**  @var Adresse $adresse */
  461.                             $adresse $adresseRepository->find($data['id_adresse']);
  462.                             if(null!==$adresse$document->setAdresse($adresse);
  463.                             $this->em->persist($document);
  464.                             $this->em->flush();
  465.                             $numPiece 'undefined';
  466.                             if('FACTURE PROFORMA'===$data['type_document']) $numPiece $projet->getNumProd() .'-'$document->getId();
  467.                             if('COMMANDE PRESTATAIRE'===$data['type_document']) {
  468.                                 $numPiece 'BDC-' $document->getId();
  469.                                 $tiersRepository $this->em->getRepository(Tiers::class);
  470.                                 $prestataire $tiersRepository->find($data['id_prestataire']);
  471.                                 if(null!==$prestataire$document->setTiers($prestataire);
  472.                             }
  473.                             $document->setNumPiece($numPiece);
  474.                             $this->em->persist($document);
  475.                             $this->em->flush();
  476.                             $data['id_document'] = $document->getId();
  477.                         } else {
  478.                             $res->addErrMsg('Projet non identifié');
  479.                         }
  480.                     } else { // sinon update du document
  481.                         $documentRepository $this->em->getRepository(Document::class);
  482.                         $document $documentRepository->find($data['id_document']);
  483.                         if(null===$document$res->addErrMsg('Document non identifié');
  484.                     }
  485.                     if($res->isSuccess()) {
  486.                         $newLigne $data['nouvelle_ligne'];
  487.                         $ligne = new DocumentLigne();
  488.                         $ligne->setDocument($document)
  489.                             ->setLibelle($newLigne['libelle'])
  490.                             ->setDescription($newLigne['description'])
  491.                             ->setDateCrea(new \DateTime())
  492.                             ->setUserCrea($currentUser)
  493.                             ->setQte($newLigne['qte'])
  494.                             ->setPuht($newLigne['puht'])
  495.                             ->setTauxTva($newLigne['taux_tva'])
  496.                             ->performMontant()
  497.                         ;
  498.                         $document->addDocumentLigne($ligne)
  499.                             ->performMontant()
  500.                             ->setDateModif(new \DateTime())
  501.                             ->setUserModif($currentUser)
  502.                         ;
  503.                         $this->em->persist($document);
  504.                         $this->em->flush();
  505.                         $res->setData($data);
  506.                     }
  507.                 }
  508.             }
  509.         }
  510.         die($res->returnJson());
  511.     }
  512.     /**
  513.      * @Route("/document/update-ligne", methods={"POST"}, name="update_ligne")
  514.      */
  515.     public function updateLigne(Request $request): Response
  516.     {
  517.         //TODO: page erreur entity manager
  518.         if(null===$this->em) return $this->render('misc/404.html.twig');
  519.         // Initialisation du retour Json
  520.         $res = new JsonRes($request->request->all());
  521.         if(!$res->isSuccess()) die($res->returnJson());
  522.         $data $res->getData();
  523.         if(empty($data['id_ligne'])) $res->addErrMsg('champs id_ligne obligatoire');
  524.         if(empty($data['libelle'])) $res->addErrMsg('champs libelle obligatoire');
  525.         if(empty($data['qte'])) $res->addErrMsg('champs qte obligatoire');
  526.         if(empty($data['puht'])) $res->addErrMsg('champs puht obligatoire');
  527.         if(empty($data['taux_tva'])) $res->addErrMsg('champs taux_tva obligatoire');
  528.         if(!$res->isSuccess()) die($res->returnJson());
  529.         $docLigneRepository $this->em->getRepository(DocumentLigne::class);
  530.         $ligne $docLigneRepository->find($data['id_ligne']);
  531.         if(null===$ligne$res->addErrMsg('Ligne document non identifiée');
  532.         if(!$res->isSuccess()) die($res->returnJson());
  533.         /** @var \App\Entity\User $currentUser */
  534.         $currentUser $this->getUser()->getId();
  535.         $ligne->setLibelle($data['libelle'])
  536.             ->setDescription($data['description'])
  537.             ->setDateModif(new \DateTime())
  538.             ->setUserModif($currentUser)
  539.             ->setQte($data['qte'])
  540.             ->setPuht($data['puht'])
  541.             ->setTauxTva($data['taux_tva'])
  542.             ->performMontant()
  543.         ;
  544.         $this->em->persist($ligne);
  545.         $this->em->flush();
  546.         $document $ligne->getDocument();
  547.         $document->performMontant()
  548.             ->setDateModif(new \DateTime())
  549.             ->setUserModif($currentUser)
  550.         ;
  551.         $this->em->persist($document);
  552.         $this->em->flush();
  553.         $data['id_document'] = $document->getId();
  554.         $res->setData($data);
  555.         die($res->returnJson());
  556.     }
  557.     /**
  558.      * @Route("/document/delete-ligne", methods={"POST"}, name="delete_ligne")
  559.      */
  560.     public function deleteLigne(Request $request): Response
  561.     {
  562.         //TODO: page erreur entity manager
  563.         if(null===$this->em) return $this->render('misc/404.html.twig');
  564.         // Initialisation du retour Json
  565.         $res = new JsonRes($request->request->all());
  566.         if($res->isSuccess()) {
  567.             $data $res->getData();
  568.             if(!isset($data['id_document'])) $res->addErrMsg('champs id_document inconnu');
  569.             if(!isset($data['id_ligne'])) $res->addErrMsg('champs id_ligne inconnu');
  570.             if($res->isSuccess()) {
  571.                 if(''===$data['id_document']) $res->addErrMsg('champs id_document obligatoire');
  572.                 if(''===$data['id_ligne']) $res->addErrMsg('champs id_ligne obligatoire');
  573.                 if($res->isSuccess()) {
  574.                     /** @var \App\Entity\User $currentUser */
  575.                     $currentUser $this->getUser()->getId();
  576.                     $docLigneRepository $this->em->getRepository(DocumentLigne::class);
  577.                     /** @var DocumentLigne $docLigne */
  578.                     $docLigne $docLigneRepository->find($data['id_ligne']);
  579.                     if(null===$docLigne$res->addErrMsg('Ligne document non identifiée');
  580.                     if($res->isSuccess()) {
  581.                         $docLigneRepository->remove($docLigne);
  582.                         $document $docLigne->getDocument()
  583.                             ->performMontant()
  584.                             ->setDateModif(new \DateTime())
  585.                             ->setUserModif($currentUser)
  586.                         ;
  587.                         $this->em->persist($document);
  588.                         $this->em->flush();
  589.                         $res->setData($data);
  590.                     }
  591.                 }
  592.             }
  593.         }
  594.         die($res->returnJson());
  595.     }
  596.     /**
  597.      * @Route("/document/edit/{id}", methods={"GET"}, name="edit_document")
  598.      */
  599.     public function getDocumentForEdit($id)
  600.     {
  601.         $documentRepository $this->em->getRepository(Document::class);
  602.         $document $documentRepository->find($id);
  603.         return $this->render('projet/document/document-form.html.twig', [
  604.             'societe' => $this->dataSociete,
  605.             'document' => $document,
  606.             'label_btn_cancel' => 'Supprimer',
  607.         ]);
  608.     }
  609.     /**
  610.      * @Route("/document/vierge/{id}", methods={"GET"}, name="init_document_vierge")
  611.      */
  612.     public function getDocumentVierge($id)
  613.     {
  614.         $projetRepository $this->em->getRepository(Projet::class);
  615.         /** @var Projet $projet */
  616.         $projet $projetRepository->find($id);
  617.         if(null===$projet) return $this->render('misc/404.html.twig');
  618.         $documentVierge = new Document();
  619.         $documentVierge->initDocVierge($projet'FACTURE PROFORMA');
  620.         return $this->render('projet/document/document-form.html.twig', [
  621.             'societe' => $this->dataSociete,
  622.             'document_vierge' => $documentVierge,
  623.             'label_btn_cancel' => 'Annuler',
  624.         ]);
  625.     }
  626.     /**
  627.      * @Route("/document/reload-list/{typeDocument}/{idProjet}", methods={"GET"}, name="document_reload_list")
  628.      */
  629.     public function documentReloadList($typeDocument$idProjet)
  630.     {
  631.         $projetRepository $this->em->getRepository(Projet::class);
  632.         /** @var Projet $projet */
  633.         $projet $projetRepository->find($idProjet);
  634.         $docList = array();
  635.         switch ($typeDocument){
  636.             case 'FACTURE PROFORMA':
  637.                 $docList $projet->getDocuments()->filter(function (Document $document){
  638.                     return $document->getTypeDocument() === 'FACTURE PROFORMA';
  639.                 });
  640.                 $typeDocument 'devis';
  641.                 break;
  642.             case 'FACTURE':
  643.                 $docList $projet->getDocuments()->filter(function (Document $document){
  644.                     return in_array($document->getTypeDocument(), ['FACTURE''AVOIR']);
  645.                 });
  646.                 break;
  647.             default:
  648.                 $docList = array();
  649.                 break;
  650.         }
  651.         return $this->render('projet/document/document-'strtolower($typeDocument) .'-list.html.twig', [
  652.             strtolower($typeDocument) .'List' => $docList,
  653.         ]);
  654.     }
  655.     /**
  656.      * @Route("/document/delete-document", methods={"POST"}, name="delete_document")
  657.      */
  658.     public function deleteDocument(Request $request): Response
  659.     {
  660.         //TODO: page erreur entity manager
  661.         if(null===$this->em) return $this->render('misc/404.html.twig');
  662.         // Initialisation du retour Json
  663.         $res = new JsonRes($request->request->all());
  664.         if($res->isSuccess()) {
  665.             $data $res->getData();
  666.             if(!isset($data['id_document'])) $res->addErrMsg('champs id_document inconnu');
  667.             if($res->isSuccess()) {
  668.                 if(''===$data['id_document']) $res->addErrMsg('champs id_document obligatoire');
  669.                 if($res->isSuccess()) {
  670.                     $documentRepository $this->em->getRepository(Document::class);
  671.                     /** @var Document $document */
  672.                     $document $documentRepository->find($data['id_document']);
  673.                     if(null===$document$res->addErrMsg('Document non identifiée');
  674.                     if($res->isSuccess()) {
  675.                         $docLigneRepository $this->em->getRepository(DocumentLigne::class);
  676.                         foreach ($document->getDocumentLignes()->toArray() as $documentLigne) {
  677.                             $docLigneRepository->remove($documentLigne);
  678.                         }
  679.                         $documentRepository->remove($document);
  680.                         $res->setData($data);
  681.                     }
  682.                 }
  683.             }
  684.         }
  685.         die($res->returnJson());
  686.     }
  687.     /**
  688.      * @Route("/document/update-tva", methods={"POST"}, name="update_doc_tva")
  689.      */
  690.     public function updateTvaDocument(Request $request): Response
  691.     {
  692.         //TODO: page erreur entity manager
  693.         if(null===$this->em) return $this->render('misc/404.html.twig');
  694.         // Initialisation du retour Json
  695.         $res = new JsonRes($request->request->all());
  696.         if(!$res->isSuccess()) die($res->returnJson());
  697.         $data $res->getData();
  698.         if(empty($data['id_document'])) $res->addErrMsg('champs id_document obligatoire');
  699.         if(!isset($data['taux_tva'])) $res->addErrMsg('champs taux_tva obligatoire');
  700.         if(!$res->isSuccess()) die($res->returnJson());
  701.         $documentRepository $this->em->getRepository(Document::class);
  702.         /** @var Document $document */
  703.         $document $documentRepository->find($data['id_document']);
  704.         if(null===$document$res->addErrMsg('Document non identifiée');
  705.         if(!$res->isSuccess()) die($res->returnJson());
  706.         /** @var \App\Entity\User $currentUser */
  707.         $currentUser $this->getUser()->getId();
  708.         foreach ($document->getDocumentLignes() as $documentLigne){
  709.             $documentLigne->setTauxTva(floatval($data['taux_tva']));
  710.             $documentLigne->performMontant();
  711.             $documentLigne->setDateModif(new \DateTime());
  712.             $documentLigne->setUserModif($currentUser);
  713.             $this->em->persist($documentLigne);
  714.             $this->em->flush();
  715.         }
  716.         $document->performMontant();
  717.         $document->setDateModif(new \DateTime());
  718.         $document->setUserModif($currentUser);
  719.         $this->em->persist($document);
  720.         $this->em->flush();
  721.         $res->setData($data);
  722.         die($res->returnJson());
  723.     }
  724.     /**
  725.      * @Route("/document/transform-document", methods={"POST"}, name="transform_document")
  726.      */
  727.     public function transformDocument(Request $request): Response
  728.     {
  729.         //TODO: page erreur entity manager
  730.         if(null===$this->em) return $this->render('misc/404.html.twig');
  731.         // Initialisation du retour Json
  732.         $res = new JsonRes($request->request->all());
  733.         if($res->isSuccess()) {
  734.             $data $res->getData();
  735.             if(!isset($data['id_document'])) $res->addErrMsg('champs id_document inconnu');
  736.             if($res->isSuccess()) {
  737.                 if(''===$data['id_document']) $res->addErrMsg('champs id_document obligatoire');
  738.                 if($res->isSuccess()) {
  739.                     $documentRepository $this->em->getRepository(Document::class);
  740.                     /** @var Document $devis */
  741.                     $devis $documentRepository->find($data['id_document']);
  742.                     if(null===$devis$res->addErrMsg('Document non identifiée');
  743.                     if($res->isSuccess()) {
  744.                         /** @var \App\Entity\User $currentUser */
  745.                         $currentUser $this->getUser()->getId();
  746.                         $soucheRepository $this->em->getRepository(Souche::class);
  747.                         $numSouche $soucheRepository->generateNumSouche();
  748.                         $numPiece $devis->getProjet()->getNumProd() .'-'$numSouche;
  749.                         $facture = new Document();
  750.                         $facture->setProjet$devis->getProjet() )
  751.                             ->setTiers$devis->getTiers() )
  752.                             ->setAdresse$devis->getAdresse() )
  753.                             ->setTypeDocument('FACTURE')
  754.                             ->setReference$devis->getReference() )
  755.                             ->setNumPiece($numPiece)
  756.                             ->setStatut('envoyé')
  757.                             ->setDateEnvoi(new \DateTime())
  758.                             ->setDateCrea(new \DateTime())
  759.                             ->setUserCrea($currentUser)
  760.                             ->setMontantHt$devis->getMontantHt() )
  761.                             ->setMontantTva$devis->getMontantTva() )
  762.                             ->setContact$devis->getContact() )
  763.                             ->setIdDocOrigine$devis->getId() )
  764.                             ->setDateBdc$devis->getDateBdc() )
  765.                             ->setLibProjet$devis->getLibProjet() )
  766.                             ->setConditionReglement$devis->getConditionReglement() )
  767.                         ;
  768.                         $this->em->persist($facture);
  769.                         $this->em->flush();
  770.                         foreach ($devis->getDocumentLignes() as $ligne) {
  771.                             $newLigne = new DocumentLigne();
  772.                             $newLigne->setLibelle$ligne->getLibelle() )
  773.                                 ->setDescription$ligne->getDescription() )
  774.                                 ->setMontantHt$ligne->getMontantHt() )
  775.                                 ->setTauxTva$ligne->getTauxTva() )
  776.                                 ->setMontantTva$ligne->getMontantTva() )
  777.                                 ->setDateCrea(new \DateTime())
  778.                                 ->setUserCrea($currentUser)
  779.                                 ->setQte$ligne->getQte() )
  780.                                 ->setPuht$ligne->getPuht() )
  781.                             ;
  782.                             $facture->addDocumentLigne($newLigne);
  783.                         }
  784.                         $this->em->persist($facture);
  785.                         $this->em->flush();
  786.                         $devis->setIdDocOrigine$facture->getId() );
  787.                         $this->em->persist($devis);
  788.                         $this->em->flush();
  789.                         $res->setData($data);
  790.                     }
  791.                 }
  792.             }
  793.         }
  794.         die($res->returnJson());
  795.     }
  796.     /**
  797.      * @Route("/document/create-avoir", methods={"POST"}, name="create_avoir")
  798.      */
  799.     public function createAvoir(Request $request): Response
  800.     {
  801.         //TODO: page erreur entity manager
  802.         if(null===$this->em) return $this->render('misc/404.html.twig');
  803.         // Initialisation du retour Json
  804.         $res = new JsonRes($request->request->all());
  805.         if(!$res->isSuccess()) die($res->returnJson());
  806.         $data $res->getData();
  807.         if(!isset($data['id_document'])) $res->addErrMsg('champs id_document inconnu');
  808.         if(!isset($data['montant_ttc'])) $res->addErrMsg('champs montant_ttc inconnu');
  809.         if(!$res->isSuccess()) die($res->returnJson());
  810.         $documentRepository $this->em->getRepository(Document::class);
  811.         /** @var Document $facture */
  812.         $facture $documentRepository->find($data['id_document']);
  813.         if(null===$facture$res->addErrMsg('Facture non identifiée');
  814.         if(!$res->isSuccess()) die($res->returnJson());
  815.         /** @var \App\Entity\User $currentUser */
  816.         $currentUser $this->getUser()->getId();
  817.         $soucheRepository $this->em->getRepository(Souche::class);
  818.         $numSouche $soucheRepository->generateNumSouche();
  819.         $numPiece $facture->getProjet()->getNumProd() .'-'$numSouche;
  820.         $montantAvoir round(floatval($data['montant_ttc']) * 100)/100;
  821.         $montantHt $montantAvoir/1.2;
  822.         $montantTva $montantAvoir-$montantHt;
  823.         $avoir = new Document();
  824.         $avoir->setProjet$facture->getProjet() )
  825.             ->setTiers$facture->getTiers() )
  826.             ->setAdresse$facture->getAdresse() )
  827.             ->setTypeDocument('AVOIR')
  828.             ->setReference$facture->getReference() )
  829.             ->setNumPiece($numPiece)
  830.             ->setStatut('avoir')
  831.             ->setDateEnvoi(new \DateTime())
  832.             ->setDateCrea(new \DateTime())
  833.             ->setUserCrea($currentUser)
  834.             ->setMontantHt($montantHt)
  835.             ->setMontantTva($montantTva)
  836.             ->setContact$facture->getContact() )
  837.             ->setIdDocOrigine$facture->getId() )
  838.             ->setDateBdc$facture->getDateBdc() )
  839.             ->setLibProjet$facture->getLibProjet() )
  840.         ;
  841.         $this->em->persist($avoir);
  842.         $this->em->flush();
  843.         $newLigne = new DocumentLigne();
  844.         $newLigne->setLibelle'AVOIR' )
  845.             ->setDescription'Facture : '$facture->getNumPiece())
  846.             ->setMontantHt($montantHt)
  847.             ->setTauxTva(0.2)
  848.             ->setMontantTva($montantTva)
  849.             ->setDateCrea(new \DateTime())
  850.             ->setUserCrea($currentUser)
  851.             ->setQte(1)
  852.             ->setPuht($montantHt)
  853.         ;
  854.         $avoir->addDocumentLigne($newLigne);
  855.         $this->em->persist($avoir);
  856.         $this->em->flush();
  857.         $facture->setStatut('annulé')
  858.             ->setDateModif(new \DateTime())
  859.             ->setUserModif($currentUser)
  860.         ;
  861.         $this->em->persist($facture);
  862.         $this->em->flush();
  863.         $docOrigine $documentRepository->find($facture->getIdDocOrigine());
  864.         $docOrigine->setIdDocOrigine(null)
  865.             ->setDateModif(new \DateTime())
  866.             ->setUserModif($currentUser)
  867.         ;
  868.         $this->em->persist($docOrigine);
  869.         $this->em->flush();
  870.         $res->setData($data);
  871.         die($res->returnJson());
  872.     }
  873.     /**
  874.      * @Route("/document/facture-retard", methods={"GET"}, name="document_facture_retard")
  875.      */
  876.     public function factureRetard(): Response
  877.     {
  878.         $documentRepository $this->em->getRepository(Document::class);
  879.         $factureList $documentRepository->getFactureNonEchue();
  880.         $montantEncours array_reduce($factureList, function ($sumDocument $facture){
  881.             return $sum+= $facture->getMontantHt();
  882.         }, 0);
  883.         $parameters = [
  884.             'facture_count' => count($factureList),
  885.             'facture_list' => $this->render('module/module-facture-retard-list.html.twig',['facture_list'=>$factureList])->getContent(),
  886.             'montant_encours' => $montantEncours,
  887.         ];
  888.         return $this->json($parameters);
  889.     }
  890. }