src/Controller/NdfController.php line 53

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\LdvStatutProjet;
  7. use App\Entity\Projet;
  8. use App\Entity\Societe;
  9. use App\Entity\Souche;
  10. use App\Entity\Tiers;
  11. use App\Model\NoteDeFrais\NDF;
  12. use App\Repository\DocumentRepository;
  13. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  14. use Symfony\Component\HttpFoundation\Request;
  15. use Symfony\Component\HttpFoundation\RequestStack;
  16. use Symfony\Component\HttpFoundation\Response;
  17. use Symfony\Component\Routing\Annotation\Route;
  18. use App\Tools\JsonRes;
  19. use Doctrine\Persistence\ManagerRegistry;
  20. use Doctrine\Persistence\ObjectManager;
  21. use function Symfony\Component\Translation\t;
  22. class NdfController extends AbstractController
  23. {
  24.     private ?ObjectManager $em null;
  25.     private ?string $prefixSociete null;
  26.     /**
  27.      * Stockage des informations de la société pour affichage sur entête document
  28.      * @var object|mixed|null
  29.      */
  30.     private ?object $dataSociete null;
  31.     public function __construct(RequestStack $requestStackManagerRegistry $doctrine)
  32.     {
  33.         $request $requestStack->getCurrentRequest();
  34.         //TODO: page erreur subdomain
  35.         if(null===$request->getSession()->get('societe')) return $this->render('misc/404.html.twig');
  36.         // on récupère le sous-domaine stocké en session pour pointer vers le bon entity manager
  37.         $subdomain $request->getSession()->get('societe')->getBase();
  38.         $this->em $doctrine->getManager($subdomain);
  39.         $this->prefixSociete $request->getSession()->get('societe')->getPrefix();
  40.         if(null!==$this->prefixSociete$this->prefixSociete strtoupper($this->prefixSociete);
  41.         $jsonString $request->getSession()->get('societe')->getData();
  42.         if(null!==$jsonString) {
  43.             $this->dataSociete json_decode($jsonString);
  44.             $this->dataSociete->lib_societe $request->getSession()->get('societe')->getLibSociete();
  45.             $this->dataSociete->logo_path $request->getSession()->get('societe')->getLogoPath();
  46.         }
  47.     }
  48.     /**
  49.      * @Route("/ndf/reload-list", methods={"POST"}, name="ndf_reload_list")
  50.      */
  51.     public function reloadListByFiltre(Request $request): Response
  52.     {
  53.         $res = new JsonRes($request->request->all());
  54.         $filtre $res->getData();
  55.         $documentRepository $this->em->getRepository(Document::class);
  56.         $doc = new Document();
  57.         $ndfList $doc->groupNdfBySalarie(
  58.             $documentRepository->findByFilter($filtre)
  59.         );
  60.         return $this->render('projet/ndf/document-ndf-list.html.twig', [
  61.             'ndfList' => $ndfList,
  62.         ]);
  63.     }
  64.     /**
  65.      * @Route("/ndf/edit/{id}", methods={"GET"}, name="show_ndf")
  66.      */
  67.     public function show($id)
  68.     {
  69.         $documentRepository $this->em->getRepository(Document::class);
  70.         /** @var Document $document */
  71.         $document $documentRepository->find($id);
  72.         $ndf = new NDF($document->getProjet(), $document->getTiers(), $document->getSalarie(), 0$document->getTypeDocument());
  73.         return $this->render('document/ndf/ndf-form.html.twig', [
  74.             'ndf' => $document,
  75.             'projet' => $document->getProjet(),
  76.             'type_charge_ndf' => $document->getTypeDocument(),
  77.             'select_option_type_ndf' => $ndf->getSelectOptionTypeNdf($document->getReference()),
  78.        ]);
  79.     }
  80.     /**
  81.      * @Route("/ndf/insert", methods={"POST"}, name="insert_ndf")
  82.      */
  83.     public function insert(Request $request)
  84.     {
  85.         $res = new JsonRes($request->request->all());
  86.         $data $res->getData();
  87.         if(empty($data['type_charge'])) $res->addErrMsg('type_charge obligatoire');
  88.         if(empty($data['id_projet'])) $res->addErrMsg('id_projet obligatoire');
  89.         if(empty($data['id_salarie'])) $res->addErrMsg('id_salarie obligatoire');
  90.         if(empty($data['date_ndf'])) $res->addErrMsg('date_ndf obligatoire');
  91.         if(!isset($data['num_piece_ndf'])) $res->addErrMsg('num_piece_ndf obligatoire');
  92.         if(empty($data['libelle_ndf'])) $res->addErrMsg('libelle_ndf obligatoire');
  93.         if(!isset($data['type_ndf'])) $res->addErrMsg('type_ndf obligatoire');
  94.         if(empty($data['montant_ttc'])) $res->addErrMsg('montant_ttc obligatoire');
  95.         if(empty($data['ventilation_tva'])) $res->addErrMsg('ventilation_tva obligatoire');
  96.         if(!$res->isSuccess()) die($res->returnJson());
  97.         /** @var \App\Entity\User $currentUser */
  98.         $currentUser $this->getUser()->getId();
  99.         $tiersRepository $this->em->getRepository(Tiers::class);
  100.         /** @var Tiers $salarie */
  101.         $salarie $tiersRepository->find($data['id_salarie']);
  102.         if(null===$salarie$res->addErrMsg('problème lié au salarié');
  103.         if(!$res->isSuccess()) die($res->returnJson());
  104.         $societeRepository $this->em->getRepository(Societe::class);
  105.         /** @var Societe $societe */
  106.         $societe $societeRepository->findOneBy(['sigle_societe'=>'@@@']);
  107.         if(null===$societe$res->addErrMsg('problème lié à la société');
  108.         if(!$res->isSuccess()) die($res->returnJson());
  109.         $projetRepository $this->em->getRepository(Projet::class);
  110.         /** @var Projet $projet */
  111.         $projet null;
  112.         if('NDF'===$data['type_charge']){
  113.             $projet $projetRepository->find($data['id_projet']);
  114.         } else {
  115.             $projet $this->getProjet($societe);
  116.         }
  117.         if(null===$projet$res->addErrMsg('problème lié au projet');
  118.         if(!$res->isSuccess()) die($res->returnJson());
  119.         $ndf = new NDF($projet$societe$salarie$currentUser$data['type_charge']);
  120.         $ndf->setType($data['type_ndf'])
  121.             ->setDateNdf($data['date_ndf'])
  122.             ->setNumPiece($data['num_piece_ndf'])
  123.             ->setDescription($data['libelle_ndf'])
  124.             ->setMontantTTC($data['montant_ttc'])
  125.         ;
  126.         foreach ($data['ventilation_tva'] as $tva$ndf->addTva(floatval($tva['taux']), floatval($tva['montant']));
  127.         if(!empty($data['montant_avance'])) $ndf->setMontantAvance(floatval($data['montant_avance']));
  128.         $document $ndf->ndfToDocument();
  129.         $document->performMontant();
  130.         $this->em->persist($document);
  131.         $this->em->flush();
  132.         die($res->returnJson());
  133.     }
  134.     /**
  135.      * @Route("/ndf/update", methods={"POST"}, name="update_ndf")
  136.      */
  137.     public function update(Request $request)
  138.     {
  139.         $res = new JsonRes($request->request->all());
  140.         $data $res->getData();
  141.         if(empty($data['id_ndf'])) $res->addErrMsg('id_ndf obligatoire');
  142.         if(empty($data['id_projet'])) $res->addErrMsg('id_projet obligatoire');
  143.         if(empty($data['id_salarie'])) $res->addErrMsg('id_salarie obligatoire');
  144.         if(empty($data['date_ndf'])) $res->addErrMsg('date_ndf obligatoire');
  145.         if(!isset($data['num_piece_ndf'])) $res->addErrMsg('num_piece_ndf obligatoire');
  146.         if(empty($data['libelle_ndf'])) $res->addErrMsg('libelle_ndf obligatoire');
  147.         if(!isset($data['type_ndf'])) $res->addErrMsg('type_ndf obligatoire');
  148.         if(empty($data['montant_ttc'])) $res->addErrMsg('montant_ttc obligatoire');
  149.         if(empty($data['ventilation_tva'])) $res->addErrMsg('ventilation_tva obligatoire');
  150.         if(!$res->isSuccess()) die($res->returnJson());
  151.         $documentRepository $this->em->getRepository(Document::class);
  152.         /** @var Document $document */
  153.         $document $documentRepository->find($data['id_ndf']);
  154.         if(null===$document$res->addErrMsg('problème lié à la base de donnée');
  155.         if(!$res->isSuccess()) die($res->returnJson());
  156.         /** @var \App\Entity\User $currentUser */
  157.         $currentUser $this->getUser()->getId();
  158.         $tiersRepository $this->em->getRepository(Tiers::class);
  159.         /** @var Tiers $salarie */
  160.         $salarie $tiersRepository->find($data['id_salarie']);
  161.         if(null===$salarie$res->addErrMsg('problème lié au salarié');
  162.         if(!$res->isSuccess()) die($res->returnJson());
  163.         $ndf = new NDF($document->getProjet(), $document->getTiers(), $salarie$currentUser$document->getTypeDocument());
  164.         $ndf->setType($data['type_ndf'])
  165.             ->setDateNdf($data['date_ndf'])
  166.             ->setNumPiece($data['num_piece_ndf'])
  167.             ->setDescription($data['libelle_ndf'])
  168.             ->setMontantTTC($data['montant_ttc'])
  169.         ;
  170.         foreach ($data['ventilation_tva'] as $tva$ndf->addTva(floatval($tva['taux']), floatval($tva['montant']));
  171.         if(!empty($data['montant_avance'])) $ndf->setMontantAvance(floatval($data['montant_avance']));
  172.         $document $ndf->updateDocument($document$this->em);
  173.         $document->performMontant();
  174.         $this->em->persist($document);
  175.         $this->em->flush();
  176.         die($res->returnJson());
  177.     }
  178.     /**
  179.      * @Route("/ndf/vierge/{type}/{id}", methods={"GET"}, name="init_ndf_vierge")
  180.      */
  181.     public function getNdfVierge($type$id)
  182.     {
  183.         $projetRepository $this->em->getRepository(Projet::class);
  184.         /** @var Projet $projet */
  185.         $projet $projetRepository->find($id);
  186.         if(null===$projet) return $this->render('misc/404.html.twig');
  187.         $ndfVierge = new Document();
  188.         $ndfVierge->initDocVierge($projet$type);
  189.         $ndf = new NDF($projet, new Societe(), new Tiers(), 0);
  190.         return $this->render('document/ndf/ndf-form.html.twig', [
  191.             'ndf_vierge' => $ndfVierge,
  192.             'projet' => $projet,
  193.             'type_charge_ndf' => $type,
  194.             'select_option_type_ndf' => $ndf->getSelectOptionTypeNdf(),
  195.         ]);
  196.     }
  197.     private function getProjet(Societe $societe): ?Projet
  198.     {
  199.         if(0<$societe->getProjets()->count()) return $societe->getProjets()->first();
  200.         $producteurRepository $this->em->getRepository(Tiers::class);
  201.         $producteur $producteurRepository->find($societe->getUserCrea());
  202.         if(null===$producteur) return null;
  203.         $statutProjetRepository $this->em->getRepository(LdvStatutProjet::class);
  204.         $statutAnnule $statutProjetRepository->find(5);
  205.         if(null===$statutAnnule) return null;
  206.         $date = new \DateTime();
  207.         $projet = new Projet();
  208.         $projet->setSociete($societe)
  209.             ->setProducteur($producteur)
  210.             ->setLibProjet('NDF INTERNE')
  211.             ->setTypeProjet('interne')
  212.             ->setDateDeb($date)
  213.             ->setDateFin($date)
  214.             ->setDateCrea($date)
  215.             ->setUserCrea(1)
  216.             ->setIsActive(false)
  217.             ->setStatut($statutAnnule)
  218.             ->setIsAppelOffre(false)
  219.         ;
  220.         $this->em->persist($projet);
  221.         $this->em->flush();
  222.         return $projet;
  223.     }
  224. }