src/Controller/DocumentController.php line 46

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-date-echeance", methods={"POST"}, name="update_doc_date_echeance")
  353.      */
  354.     public function updateDateEcheance(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.         $data $res->getData();
  361.         if(!$this->isGranted('ROLE_ADMIN')) $res->addErrMsg('Vous n\'avez pas les droits pour effectuer cette action');
  362.         if(empty($data['id_document'])) $res->addErrMsg('erreur id_document');
  363.         if(empty($data['date_echeance'])) $res->addErrMsg('erreur date_echeance');
  364.         if(!$res->isSuccess()) die($res->returnJson());
  365.         $dateBudget date_create_from_format('Y-m-d'$data['date_echeance']);
  366.         if(!$dateBudget$res->addErrMsg('Le format de la date est incorrect');
  367.         if(!$res->isSuccess()) die($res->returnJson());
  368.         $documentRepository $this->em->getRepository(Document::class);
  369.         /** @var Document $document */
  370.         $document $documentRepository->find($data['id_document']);
  371.         if(empty($document)) $res->addErrMsg('Document non trouvé dans la base de donnée');
  372.         if(!$res->isSuccess()) die($res->returnJson());
  373.         /** @var \App\Entity\User $currentUser */
  374.         $currentUser $this->getUser()->getId();
  375.         $document->setDateEcheance($dateBudget)
  376.             ->setUserModif($currentUser)
  377.             ->setDateModif(new \DateTime())
  378.         ;
  379.         $this->em->persist($document);
  380.         $this->em->flush();
  381.         $res->setData($data);
  382.         die($res->returnJson());
  383.     }
  384.     /**
  385.      * @Route("/document/update-statut", methods={"POST"}, name="update_doc_statut")
  386.      */
  387.     public function updateStatut(Request $request): Response
  388.     {
  389.         //TODO: page erreur entity manager
  390.         if(null===$this->em) return $this->render('misc/404.html.twig');
  391.         // Initialisation du retour Json
  392.         $res = new JsonRes($request->request->all());
  393.         if($res->isSuccess()) {
  394.             $data $res->getData();
  395.             if(!isset($data['id_document'])) $res->addErrMsg('champs id_document inconnu');
  396.             if($res->isSuccess()) {
  397.                 if(''===$data['id_document']) $res->addErrMsg('champs id_document obligatoire');
  398.                 if($res->isSuccess()) {
  399.                     $documentRepository $this->em->getRepository(Document::class);
  400.                     /** @var Document $document */
  401.                     $document $documentRepository->find($data['id_document']);
  402.                     if(!null==$document) {
  403.                         /** @var \App\Entity\User $currentUser */
  404.                         $currentUser $this->getUser()->getId();
  405.                         $document->setStatut('payé')
  406.                             ->setDatePaiement(new \DateTime())
  407.                             ->setUserModif($currentUser)
  408.                             ->setDateModif(new \DateTime())
  409.                         ;
  410.                         $this->em->persist($document);
  411.                         $this->em->flush();
  412.                     }
  413.                     $res->setData($data);
  414.                 }
  415.             }
  416.         }
  417.         die($res->returnJson());
  418.     }
  419.     /**
  420.      * @Route("/document/insert-ligne", methods={"POST"}, name="insert_ligne")
  421.      */
  422.     public function insertLigne(Request $request): Response
  423.     {
  424.         //TODO: page erreur entity manager
  425.         if(null===$this->em) return $this->render('misc/404.html.twig');
  426.         // Initialisation du retour Json
  427.         $res = new JsonRes($request->request->all());
  428.         if($res->isSuccess()) {
  429.             $data $res->getData();
  430.             if(!isset($data['id_document'])) $res->addErrMsg('champs id_document inconnu');
  431.             if(!isset($data['id_projet'])) $res->addErrMsg('champs id_projet inconnu');
  432.             if(!isset($data['type_document'])) $res->addErrMsg('champs type_document inconnu');
  433.             if(!isset($data['id_adresse'])) $res->addErrMsg('champs id_adresse inconnu');
  434.             if(!isset($data['lib_projet_document'])) $res->addErrMsg('champs lib_projet_document inconnu');
  435.             if(!isset($data['date_bdc_document'])) $res->addErrMsg('champs date_bdc_document inconnu');
  436.             if(!isset($data['reference_document'])) $res->addErrMsg('champs reference_document inconnu');
  437.             if(!isset($data['contact_document'])) $res->addErrMsg('champs contact_document inconnu');
  438.             if(!isset($data['nouvelle_ligne'])) $res->addErrMsg('champs nouvelle_ligne inconnu');
  439.             if(empty($data['date_budget'])) $res->addErrMsg('erreur date_budget');
  440.             if(!$res->isSuccess()) die($res->returnJson());
  441.             if($res->isSuccess()) {
  442.                 if(''===$data['id_document']) $res->addErrMsg('champs id_document obligatoire');
  443.                 if(''===$data['id_projet']) $res->addErrMsg('champs id_projet obligatoire');
  444.                 if(''===$data['type_document']) $res->addErrMsg('champs type_document obligatoire');
  445.                 if(empty($data['nouvelle_ligne'])) $res->addErrMsg('champs nouvelle_ligne vide');
  446.                 if($res->isSuccess()) {
  447.                     if(!isset($data['nouvelle_ligne']['libelle'])) $res->addErrMsg('champs libelle inconnu');
  448.                     if(!isset($data['nouvelle_ligne']['description'])) $res->addErrMsg('champs description inconnu');
  449.                     if(!isset($data['nouvelle_ligne']['qte'])) $res->addErrMsg('champs qte inconnu');
  450.                     if(!isset($data['nouvelle_ligne']['puht'])) $res->addErrMsg('champs puht inconnu');
  451.                     if(!isset($data['nouvelle_ligne']['taux_tva'])) $res->addErrMsg('champs taux_tva inconnu');
  452.                     if('COMMANDE PRESTATAIRE'===$data['type_document']){
  453.                         if(!isset($data['id_prestataire'])) $res->addErrMsg('champs id_prestataire inconnu');
  454.                     }
  455.                     if($res->isSuccess()) {
  456.                         if(''===$data['nouvelle_ligne']['libelle']) $res->addErrMsg('champs libelle obligatoire');
  457.                         if(''===$data['nouvelle_ligne']['qte']) $res->addErrMsg('champs qte obligatoire');
  458.                         if(''===$data['nouvelle_ligne']['puht']) $res->addErrMsg('champs puht obligatoire');
  459.                         if(''===$data['nouvelle_ligne']['taux_tva']) $res->addErrMsg('champs taux_tva obligatoire');
  460.                         if('COMMANDE PRESTATAIRE'===$data['type_document']){
  461.                             if(''===$data['id_prestataire']) $res->addErrMsg('champs id_prestataire obligatoire');
  462.                         }
  463.                     }
  464.                 }
  465.                 $dateBudget date_create_from_format('Y-m-d'$data['date_budget']);
  466.                 if(!$dateBudget$res->addErrMsg('Le format de la date est incorrect');
  467.                 $dateBdc date_create_from_format('Y-m-d'$data['date_bdc_document']);
  468.                 if(!$dateBdc$res->addErrMsg('Le format de la date est incorrect');
  469.                 if($res->isSuccess()) {
  470.                     /** @var \App\Entity\User $currentUser */
  471.                     $currentUser $this->getUser()->getId();
  472.                     /** @var Document $document */
  473.                     $document null;
  474.                     if(0===intval($data['id_document'])){ // si id_document = 0 alors création du document
  475.                         $projetRepository $this->em->getRepository(Projet::class);
  476.                         /** @var Projet $projet */
  477.                         $projet $projetRepository->find($data['id_projet']);
  478.                         if(!null==$projet){
  479.                             $document = new Document();
  480.                             $document->setProjet($projet)
  481.                                 ->setTiers($projet->getSociete())
  482.                                 ->setTypeDocument($data['type_document'])
  483.                                 ->setDateCrea($dateBudget)
  484.                                 ->setUserCrea($currentUser)
  485.                                 ->setMontantHt(0)
  486.                                 ->setMontantTva(0)
  487.                                 ->setReference($data['reference_document'])
  488.                                 ->setContact($data['contact_document'])
  489. //                                ->setLibProjet($data['lib_projet_document']) // pas obligatoire
  490.                                 ->setDateBdc($dateBdc)
  491.                             ;
  492.                             $adresseRepository $this->em->getRepository(Adresse::class);
  493.                             /**  @var Adresse $adresse */
  494.                             $adresse $adresseRepository->find($data['id_adresse']);
  495.                             if(null!==$adresse$document->setAdresse($adresse);
  496.                             $this->em->persist($document);
  497.                             $this->em->flush();
  498.                             $numPiece 'undefined';
  499.                             if('FACTURE PROFORMA'===$data['type_document']) $numPiece $projet->getNumProd() .'-'$document->getId();
  500.                             if('COMMANDE PRESTATAIRE'===$data['type_document']) {
  501.                                 $numPiece 'BDC-' $document->getId();
  502.                                 $tiersRepository $this->em->getRepository(Tiers::class);
  503.                                 $prestataire $tiersRepository->find($data['id_prestataire']);
  504.                                 if(null!==$prestataire$document->setTiers($prestataire);
  505.                             }
  506.                             $document->setNumPiece($numPiece);
  507.                             $this->em->persist($document);
  508.                             $this->em->flush();
  509.                             $data['id_document'] = $document->getId();
  510.                         } else {
  511.                             $res->addErrMsg('Projet non identifié');
  512.                         }
  513.                     } else { // sinon update du document
  514.                         $documentRepository $this->em->getRepository(Document::class);
  515.                         $document $documentRepository->find($data['id_document']);
  516.                         if(null===$document$res->addErrMsg('Document non identifié');
  517.                     }
  518.                     if($res->isSuccess()) {
  519.                         $newLigne $data['nouvelle_ligne'];
  520.                         $ligne = new DocumentLigne();
  521.                         $ligne->setDocument($document)
  522.                             ->setLibelle($newLigne['libelle'])
  523.                             ->setDescription($newLigne['description'])
  524.                             ->setDateCrea(new \DateTime())
  525.                             ->setUserCrea($currentUser)
  526.                             ->setQte($newLigne['qte'])
  527.                             ->setPuht($newLigne['puht'])
  528.                             ->setTauxTva($newLigne['taux_tva'])
  529.                             ->performMontant()
  530.                         ;
  531.                         $document->addDocumentLigne($ligne)
  532.                             ->performMontant()
  533.                             ->setDateModif(new \DateTime())
  534.                             ->setUserModif($currentUser)
  535.                         ;
  536.                         $this->em->persist($document);
  537.                         $this->em->flush();
  538.                         $res->setData($data);
  539.                     }
  540.                 }
  541.             }
  542.         }
  543.         die($res->returnJson());
  544.     }
  545.     /**
  546.      * @Route("/document/update-ligne", methods={"POST"}, name="update_ligne")
  547.      */
  548.     public function updateLigne(Request $request): Response
  549.     {
  550.         //TODO: page erreur entity manager
  551.         if(null===$this->em) return $this->render('misc/404.html.twig');
  552.         // Initialisation du retour Json
  553.         $res = new JsonRes($request->request->all());
  554.         if(!$res->isSuccess()) die($res->returnJson());
  555.         $data $res->getData();
  556.         if(empty($data['id_ligne'])) $res->addErrMsg('champs id_ligne obligatoire');
  557.         if(empty($data['libelle'])) $res->addErrMsg('champs libelle obligatoire');
  558.         if(empty($data['qte'])) $res->addErrMsg('champs qte obligatoire');
  559.         if(empty($data['puht'])) $res->addErrMsg('champs puht obligatoire');
  560.         if(empty($data['taux_tva'])) $res->addErrMsg('champs taux_tva obligatoire');
  561.         if(!$res->isSuccess()) die($res->returnJson());
  562.         $docLigneRepository $this->em->getRepository(DocumentLigne::class);
  563.         $ligne $docLigneRepository->find($data['id_ligne']);
  564.         if(null===$ligne$res->addErrMsg('Ligne document non identifiée');
  565.         if(!$res->isSuccess()) die($res->returnJson());
  566.         /** @var \App\Entity\User $currentUser */
  567.         $currentUser $this->getUser()->getId();
  568.         $ligne->setLibelle($data['libelle'])
  569.             ->setDescription($data['description'])
  570.             ->setDateModif(new \DateTime())
  571.             ->setUserModif($currentUser)
  572.             ->setQte($data['qte'])
  573.             ->setPuht($data['puht'])
  574.             ->setTauxTva($data['taux_tva'])
  575.             ->performMontant()
  576.         ;
  577.         $this->em->persist($ligne);
  578.         $this->em->flush();
  579.         $document $ligne->getDocument();
  580.         $document->performMontant()
  581.             ->setDateModif(new \DateTime())
  582.             ->setUserModif($currentUser)
  583.         ;
  584.         $this->em->persist($document);
  585.         $this->em->flush();
  586.         $data['id_document'] = $document->getId();
  587.         $res->setData($data);
  588.         die($res->returnJson());
  589.     }
  590.     /**
  591.      * @Route("/document/delete-ligne", methods={"POST"}, name="delete_ligne")
  592.      */
  593.     public function deleteLigne(Request $request): Response
  594.     {
  595.         //TODO: page erreur entity manager
  596.         if(null===$this->em) return $this->render('misc/404.html.twig');
  597.         // Initialisation du retour Json
  598.         $res = new JsonRes($request->request->all());
  599.         if($res->isSuccess()) {
  600.             $data $res->getData();
  601.             if(!isset($data['id_document'])) $res->addErrMsg('champs id_document inconnu');
  602.             if(!isset($data['id_ligne'])) $res->addErrMsg('champs id_ligne inconnu');
  603.             if($res->isSuccess()) {
  604.                 if(''===$data['id_document']) $res->addErrMsg('champs id_document obligatoire');
  605.                 if(''===$data['id_ligne']) $res->addErrMsg('champs id_ligne obligatoire');
  606.                 if($res->isSuccess()) {
  607.                     /** @var \App\Entity\User $currentUser */
  608.                     $currentUser $this->getUser()->getId();
  609.                     $docLigneRepository $this->em->getRepository(DocumentLigne::class);
  610.                     /** @var DocumentLigne $docLigne */
  611.                     $docLigne $docLigneRepository->find($data['id_ligne']);
  612.                     if(null===$docLigne$res->addErrMsg('Ligne document non identifiée');
  613.                     if($res->isSuccess()) {
  614.                         $docLigneRepository->remove($docLigne);
  615.                         $document $docLigne->getDocument()
  616.                             ->performMontant()
  617.                             ->setDateModif(new \DateTime())
  618.                             ->setUserModif($currentUser)
  619.                         ;
  620.                         $this->em->persist($document);
  621.                         $this->em->flush();
  622.                         $res->setData($data);
  623.                     }
  624.                 }
  625.             }
  626.         }
  627.         die($res->returnJson());
  628.     }
  629.     /**
  630.      * @Route("/document/edit/{id}", methods={"GET"}, name="edit_document")
  631.      */
  632.     public function getDocumentForEdit($id)
  633.     {
  634.         $documentRepository $this->em->getRepository(Document::class);
  635.         $document $documentRepository->find($id);
  636.         return $this->render('projet/document/document-form.html.twig', [
  637.             'societe' => $this->dataSociete,
  638.             'document' => $document,
  639.             'label_btn_cancel' => 'Supprimer',
  640.         ]);
  641.     }
  642.     /**
  643.      * @Route("/document/vierge/{id}", methods={"GET"}, name="init_document_vierge")
  644.      */
  645.     public function getDocumentVierge($id)
  646.     {
  647.         $projetRepository $this->em->getRepository(Projet::class);
  648.         /** @var Projet $projet */
  649.         $projet $projetRepository->find($id);
  650.         if(null===$projet) return $this->render('misc/404.html.twig');
  651.         $documentVierge = new Document();
  652.         $documentVierge->initDocVierge($projet'FACTURE PROFORMA');
  653.         return $this->render('projet/document/document-form.html.twig', [
  654.             'societe' => $this->dataSociete,
  655.             'document_vierge' => $documentVierge,
  656.             'label_btn_cancel' => 'Annuler',
  657.         ]);
  658.     }
  659.     /**
  660.      * @Route("/document/reload-list/{typeDocument}/{idProjet}", methods={"GET"}, name="document_reload_list")
  661.      */
  662.     public function documentReloadList($typeDocument$idProjet)
  663.     {
  664.         $projetRepository $this->em->getRepository(Projet::class);
  665.         /** @var Projet $projet */
  666.         $projet $projetRepository->find($idProjet);
  667.         $docList = array();
  668.         switch ($typeDocument){
  669.             case 'FACTURE PROFORMA':
  670.                 $docList $projet->getDocuments()->filter(function (Document $document){
  671.                     return $document->getTypeDocument() === 'FACTURE PROFORMA';
  672.                 });
  673.                 $typeDocument 'devis';
  674.                 break;
  675.             case 'FACTURE':
  676.                 $docList $projet->getDocuments()->filter(function (Document $document){
  677.                     return in_array($document->getTypeDocument(), ['FACTURE''AVOIR']);
  678.                 });
  679.                 break;
  680.             default:
  681.                 $docList = array();
  682.                 break;
  683.         }
  684.         return $this->render('projet/document/document-'strtolower($typeDocument) .'-list.html.twig', [
  685.             strtolower($typeDocument) .'List' => $docList,
  686.         ]);
  687.     }
  688.     /**
  689.      * @Route("/document/delete-document", methods={"POST"}, name="delete_document")
  690.      */
  691.     public function deleteDocument(Request $request): Response
  692.     {
  693.         //TODO: page erreur entity manager
  694.         if(null===$this->em) return $this->render('misc/404.html.twig');
  695.         // Initialisation du retour Json
  696.         $res = new JsonRes($request->request->all());
  697.         if($res->isSuccess()) {
  698.             $data $res->getData();
  699.             if(!isset($data['id_document'])) $res->addErrMsg('champs id_document inconnu');
  700.             if($res->isSuccess()) {
  701.                 if(''===$data['id_document']) $res->addErrMsg('champs id_document obligatoire');
  702.                 if($res->isSuccess()) {
  703.                     $documentRepository $this->em->getRepository(Document::class);
  704.                     /** @var Document $document */
  705.                     $document $documentRepository->find($data['id_document']);
  706.                     if(null===$document$res->addErrMsg('Document non identifiée');
  707.                     if($res->isSuccess()) {
  708.                         $docLigneRepository $this->em->getRepository(DocumentLigne::class);
  709.                         foreach ($document->getDocumentLignes()->toArray() as $documentLigne) {
  710.                             $docLigneRepository->remove($documentLigne);
  711.                         }
  712.                         $documentRepository->remove($document);
  713.                         $res->setData($data);
  714.                     }
  715.                 }
  716.             }
  717.         }
  718.         die($res->returnJson());
  719.     }
  720.     /**
  721.      * @Route("/document/update-tva", methods={"POST"}, name="update_doc_tva")
  722.      */
  723.     public function updateTvaDocument(Request $request): Response
  724.     {
  725.         //TODO: page erreur entity manager
  726.         if(null===$this->em) return $this->render('misc/404.html.twig');
  727.         // Initialisation du retour Json
  728.         $res = new JsonRes($request->request->all());
  729.         if(!$res->isSuccess()) die($res->returnJson());
  730.         $data $res->getData();
  731.         if(empty($data['id_document'])) $res->addErrMsg('champs id_document obligatoire');
  732.         if(!isset($data['taux_tva'])) $res->addErrMsg('champs taux_tva obligatoire');
  733.         if(!$res->isSuccess()) die($res->returnJson());
  734.         $documentRepository $this->em->getRepository(Document::class);
  735.         /** @var Document $document */
  736.         $document $documentRepository->find($data['id_document']);
  737.         if(null===$document$res->addErrMsg('Document non identifiée');
  738.         if(!$res->isSuccess()) die($res->returnJson());
  739.         /** @var \App\Entity\User $currentUser */
  740.         $currentUser $this->getUser()->getId();
  741.         foreach ($document->getDocumentLignes() as $documentLigne){
  742.             $documentLigne->setTauxTva(floatval($data['taux_tva']));
  743.             $documentLigne->performMontant();
  744.             $documentLigne->setDateModif(new \DateTime());
  745.             $documentLigne->setUserModif($currentUser);
  746.             $this->em->persist($documentLigne);
  747.             $this->em->flush();
  748.         }
  749.         $document->performMontant();
  750.         $document->setDateModif(new \DateTime());
  751.         $document->setUserModif($currentUser);
  752.         $this->em->persist($document);
  753.         $this->em->flush();
  754.         $res->setData($data);
  755.         die($res->returnJson());
  756.     }
  757.     /**
  758.      * @Route("/document/transform-document", methods={"POST"}, name="transform_document")
  759.      */
  760.     public function transformDocument(Request $request): Response
  761.     {
  762.         //TODO: page erreur entity manager
  763.         if(null===$this->em) return $this->render('misc/404.html.twig');
  764.         // Initialisation du retour Json
  765.         $res = new JsonRes($request->request->all());
  766.         if($res->isSuccess()) {
  767.             $data $res->getData();
  768.             if(!isset($data['id_document'])) $res->addErrMsg('champs id_document inconnu');
  769.             if($res->isSuccess()) {
  770.                 if(''===$data['id_document']) $res->addErrMsg('champs id_document obligatoire');
  771.                 if($res->isSuccess()) {
  772.                     $documentRepository $this->em->getRepository(Document::class);
  773.                     /** @var Document $devis */
  774.                     $devis $documentRepository->find($data['id_document']);
  775.                     if(null===$devis$res->addErrMsg('Document non identifiée');
  776.                     if($res->isSuccess()) {
  777.                         /** @var \App\Entity\User $currentUser */
  778.                         $currentUser $this->getUser()->getId();
  779.                         $soucheRepository $this->em->getRepository(Souche::class);
  780.                         $numSouche $soucheRepository->generateNumSouche();
  781.                         $numPiece $devis->getProjet()->getNumProd() .'-'$numSouche;
  782.                         $facture = new Document();
  783.                         $facture->setProjet$devis->getProjet() )
  784.                             ->setTiers$devis->getTiers() )
  785.                             ->setAdresse$devis->getAdresse() )
  786.                             ->setTypeDocument('FACTURE')
  787.                             ->setReference$devis->getReference() )
  788.                             ->setNumPiece($numPiece)
  789.                             ->setStatut('envoyé')
  790.                             ->setDateEnvoi(new \DateTime())
  791.                             ->setDateCrea(new \DateTime())
  792.                             ->setUserCrea($currentUser)
  793.                             ->setMontantHt$devis->getMontantHt() )
  794.                             ->setMontantTva$devis->getMontantTva() )
  795.                             ->setContact$devis->getContact() )
  796.                             ->setIdDocOrigine$devis->getId() )
  797.                             ->setDateBdc$devis->getDateBdc() )
  798.                             ->setLibProjet$devis->getLibProjet() )
  799.                             ->setConditionReglement$devis->getConditionReglement() )
  800.                         ;
  801.                         $today = new \DateTime();
  802.                         $endOfNextMonth $today->modify('+2 month')->modify('last day of this month');
  803.                         $facture->setDateEcheance($endOfNextMonth);
  804.                         $this->em->persist($facture);
  805.                         $this->em->flush();
  806.                         foreach ($devis->getDocumentLignes() as $ligne) {
  807.                             $newLigne = new DocumentLigne();
  808.                             $newLigne->setLibelle$ligne->getLibelle() )
  809.                                 ->setDescription$ligne->getDescription() )
  810.                                 ->setMontantHt$ligne->getMontantHt() )
  811.                                 ->setTauxTva$ligne->getTauxTva() )
  812.                                 ->setMontantTva$ligne->getMontantTva() )
  813.                                 ->setDateCrea(new \DateTime())
  814.                                 ->setUserCrea($currentUser)
  815.                                 ->setQte$ligne->getQte() )
  816.                                 ->setPuht$ligne->getPuht() )
  817.                             ;
  818.                             $facture->addDocumentLigne($newLigne);
  819.                         }
  820.                         $this->em->persist($facture);
  821.                         $this->em->flush();
  822.                         $devis->setIdDocOrigine$facture->getId() );
  823.                         $this->em->persist($devis);
  824.                         $this->em->flush();
  825.                         $res->setData($data);
  826.                     }
  827.                 }
  828.             }
  829.         }
  830.         die($res->returnJson());
  831.     }
  832.     /**
  833.      * @Route("/document/create-avoir", methods={"POST"}, name="create_avoir")
  834.      */
  835.     public function createAvoir(Request $request): Response
  836.     {
  837.         //TODO: page erreur entity manager
  838.         if(null===$this->em) return $this->render('misc/404.html.twig');
  839.         // Initialisation du retour Json
  840.         $res = new JsonRes($request->request->all());
  841.         if(!$res->isSuccess()) die($res->returnJson());
  842.         $data $res->getData();
  843.         if(!isset($data['id_document'])) $res->addErrMsg('champs id_document inconnu');
  844.         if(!isset($data['montant_ttc'])) $res->addErrMsg('champs montant_ttc inconnu');
  845.         if(!$res->isSuccess()) die($res->returnJson());
  846.         $documentRepository $this->em->getRepository(Document::class);
  847.         /** @var Document $facture */
  848.         $facture $documentRepository->find($data['id_document']);
  849.         if(null===$facture$res->addErrMsg('Facture non identifiée');
  850.         if(!$res->isSuccess()) die($res->returnJson());
  851.         /** @var \App\Entity\User $currentUser */
  852.         $currentUser $this->getUser()->getId();
  853.         $soucheRepository $this->em->getRepository(Souche::class);
  854.         $numSouche $soucheRepository->generateNumSouche();
  855.         $numPiece $facture->getProjet()->getNumProd() .'-'$numSouche;
  856.         $montantAvoir round(floatval($data['montant_ttc']) * 100)/100;
  857.         $montantHt $montantAvoir/1.2;
  858.         $montantTva $montantAvoir-$montantHt;
  859.         $avoir = new Document();
  860.         $avoir->setProjet$facture->getProjet() )
  861.             ->setTiers$facture->getTiers() )
  862.             ->setAdresse$facture->getAdresse() )
  863.             ->setTypeDocument('AVOIR')
  864.             ->setReference$facture->getReference() )
  865.             ->setNumPiece($numPiece)
  866.             ->setStatut('avoir')
  867.             ->setDateEnvoi(new \DateTime())
  868.             ->setDateCrea(new \DateTime())
  869.             ->setUserCrea($currentUser)
  870.             ->setMontantHt($montantHt)
  871.             ->setMontantTva($montantTva)
  872.             ->setContact$facture->getContact() )
  873.             ->setIdDocOrigine$facture->getId() )
  874.             ->setDateBdc$facture->getDateBdc() )
  875.             ->setLibProjet$facture->getLibProjet() )
  876.         ;
  877.         $this->em->persist($avoir);
  878.         $this->em->flush();
  879.         $newLigne = new DocumentLigne();
  880.         $newLigne->setLibelle'AVOIR' )
  881.             ->setDescription'Facture : '$facture->getNumPiece())
  882.             ->setMontantHt($montantHt)
  883.             ->setTauxTva(0.2)
  884.             ->setMontantTva($montantTva)
  885.             ->setDateCrea(new \DateTime())
  886.             ->setUserCrea($currentUser)
  887.             ->setQte(1)
  888.             ->setPuht($montantHt)
  889.         ;
  890.         $avoir->addDocumentLigne($newLigne);
  891.         $this->em->persist($avoir);
  892.         $this->em->flush();
  893.         $facture->setStatut('annulé')
  894.             ->setDateModif(new \DateTime())
  895.             ->setUserModif($currentUser)
  896.         ;
  897.         $this->em->persist($facture);
  898.         $this->em->flush();
  899.         $docOrigine $documentRepository->find($facture->getIdDocOrigine());
  900.         $docOrigine->setIdDocOrigine(null)
  901.             ->setDateModif(new \DateTime())
  902.             ->setUserModif($currentUser)
  903.         ;
  904.         $this->em->persist($docOrigine);
  905.         $this->em->flush();
  906.         $res->setData($data);
  907.         die($res->returnJson());
  908.     }
  909.     /**
  910.      * @Route("/document/facture-retard", methods={"GET"}, name="document_facture_retard")
  911.      */
  912.     public function factureRetard(): Response
  913.     {
  914.         $documentRepository $this->em->getRepository(Document::class);
  915.         $factureList $documentRepository->getFactureNonEchue();
  916.         $montantEncours array_reduce($factureList, function ($sumDocument $facture){
  917.             return $sum+= $facture->getMontantHt();
  918.         }, 0);
  919.         $parameters = [
  920.             'facture_count' => count($factureList),
  921.             'facture_list' => $this->render('module/module-facture-retard-list.html.twig',['facture_list'=>$factureList])->getContent(),
  922.             'montant_encours' => $montantEncours,
  923.         ];
  924.         return $this->json($parameters);
  925.     }
  926. }