src/Controller/ContratController.php line 229

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Contrat;
  4. use App\Entity\InfoSalarie;
  5. use App\Entity\Projet;
  6. use App\Entity\Tiers;
  7. use App\Service\URSSAF\Embauche;
  8. use App\Service\URSSAF\UrssafAPI;
  9. use App\Tools\Fnc;
  10. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  11. use Symfony\Component\HttpFoundation\Request;
  12. use Symfony\Component\HttpFoundation\RequestStack;
  13. use Symfony\Component\HttpFoundation\Response;
  14. use Symfony\Component\Routing\Annotation\Route;
  15. use App\Tools\JsonRes;
  16. use Doctrine\Persistence\ManagerRegistry;
  17. use Doctrine\Persistence\ObjectManager;
  18. class ContratController extends AbstractController
  19. {
  20.     private ?ObjectManager $em null;
  21.     private ?string $prefixSociete null;
  22.     /**
  23.      * Stockage des informations de la société pour affichage sur entête document
  24.      * @var object|mixed|null
  25.      */
  26.     private ?object $dataSociete null;
  27.     public function __construct(RequestStack $requestStackManagerRegistry $doctrine)
  28.     {
  29.         $request $requestStack->getCurrentRequest();
  30.         //TODO: page erreur subdomain
  31.         if(null===$request->getSession()->get('societe')) return $this->render('misc/404.html.twig');
  32.         // on récupère le sous-domaine stocké en session pour pointer vers le bon entity manager
  33.         $subdomain $request->getSession()->get('societe')->getBase();
  34.         $this->em $doctrine->getManager($subdomain);
  35.         $this->prefixSociete $request->getSession()->get('societe')->getPrefix();
  36.         if(null!==$this->prefixSociete$this->prefixSociete strtoupper($this->prefixSociete);
  37.         $jsonString $request->getSession()->get('societe')->getData();
  38.         if(null!==$jsonString) {
  39.             $this->dataSociete json_decode($jsonString);
  40.             $this->dataSociete->lib_societe $request->getSession()->get('societe')->getLibSociete();
  41.             $this->dataSociete->logo_path $request->getSession()->get('societe')->getLogoPath();
  42.         }
  43.     }
  44.     /**
  45.      * @Route("/contrat/insert", methods={"POST"}, name="insert_contrat")
  46.      */
  47.     public function insertContrat(Request $request): Response
  48.     {
  49.         //TODO: page erreur entity manager
  50.         if(null===$this->em) return $this->render('misc/404.html.twig');
  51.         // Initialisation du retour Json
  52.         $res = new JsonRes($request->request->all());
  53.         $data $res->getData();
  54.         if(!isset($data['id_projet'])) $res->addErrMsg('champs id_projet manquant');
  55.         if(!isset($data['id_salarie'])) $res->addErrMsg('champs id_salarie manquant');
  56.         if(!isset($data['charge_contrat'])) $res->addErrMsg('champs charge_contrat manquant');
  57.         if(!isset($data['description_contrat'])) $res->addErrMsg('champs description_contrat manquant');
  58.         if(!isset($data['annee_contrat'])) $res->addErrMsg('champs annee_contrat manquant');
  59.         if(!isset($data['mois_contrat'])) $res->addErrMsg('champs mois_contrat manquant');
  60.         if(!isset($data['liste_date_pointage'])) $res->addErrMsg('champs liste_date_pointage manquant');
  61.         if(!isset($data['tarif_jour'])) $res->addErrMsg('champs tarif_jour manquant');
  62.         if(!isset($data['heure_par_jour'])) $res->addErrMsg('champs heure_par_jour manquant');
  63.         if(!$res->isSuccess()) die($res->returnJson());
  64.         if(''===($data['id_projet'])) $res->addErrMsg('ID projet obligatoire');
  65.         if(''===($data['id_salarie'])) $res->addErrMsg('ID salarie obligatoire');
  66.         if(''===($data['charge_contrat'])) $res->addErrMsg('taux charge obligatoire');
  67.         if(''===($data['annee_contrat'])) $res->addErrMsg('année contrat obligatoire');
  68.         if(''===($data['mois_contrat'])) $res->addErrMsg('mois contrat obligatoire');
  69.         if(0===count($data['liste_date_pointage'])) $res->addErrMsg('Aucun jour pointage');
  70.         if(''===($data['tarif_jour'])) $res->addErrMsg('tarif jour obligatoire');
  71.         if(''===($data['heure_par_jour'])) $res->addErrMsg('nombre d\'heure par jour obligatoire');
  72.         if(!$res->isSuccess()) die($res->returnJson());
  73.         /** @var \App\Entity\User $currentUser */
  74.         $currentUser $this->getUser()->getId();
  75.         $tiersRepository $this->em->getRepository(Tiers::class);
  76.         /** @var Tiers $salarie */
  77.         $salarie $tiersRepository->find($data['id_salarie']);
  78.         if(null===$salarie$res->addErrMsg('Salarié non trouvé dans la base de donnée');
  79.         $projetRepository $this->em->getRepository(Projet::class);
  80.         /** @var Projet $projet */
  81.         $projet $projetRepository->find($data['id_projet']);
  82.         if(null===$projet$res->addErrMsg('Projet non trouvé dans la base de donnée');
  83.         if(!$res->isSuccess()) die($res->returnJson());
  84.         $salarieList $projet->getSalaries();
  85.         $isSalarie false;
  86.         foreach ($salarieList as $s) if($salarie===$s$isSalarie true;
  87.         if(!$isSalarie) {
  88.             $projet->addSalary($salarie);
  89.             $projetRepository->add($projet);
  90.         }
  91.         $contrat = new Contrat();
  92.         $contrat->setSalarie($salarie)
  93.             ->setIdProjet($projet->getId())
  94.             ->setCharge($data['charge_contrat'])
  95.             ->setDescription($data['description_contrat'])
  96.             ->setAnnee($data['annee_contrat'])
  97.             ->setMois($data['mois_contrat'])
  98.             ->setListeDatePointage($data['liste_date_pointage'])
  99.             ->setNbJourPointage(count($data['liste_date_pointage']))
  100.             ->setTarifJour($data['tarif_jour'])
  101.             ->setHeureParJour($data['heure_par_jour'])
  102.             ->setIdStatutSignatureElec(1)
  103.             ->setDateCrea(new \DateTime())
  104.             ->setUserCrea($currentUser)
  105.         ;
  106.         $this->em->persist($contrat);
  107.         $this->em->flush();
  108.         die($res->returnJson());
  109.     }
  110.     /**
  111.      * @Route("/contrat/update", methods={"POST"}, name="update_contrat")
  112.      */
  113.     public function updateContrat(Request $request): Response
  114.     {
  115.         //TODO: page erreur entity manager
  116.         if(null===$this->em) return $this->render('misc/404.html.twig');
  117.         // Initialisation du retour Json
  118.         $res = new JsonRes($request->request->all());
  119.         $data $res->getData();
  120.         if(!isset($data['id_contrat'])) $res->addErrMsg('champs id_contrat manquant');
  121.         if(!isset($data['id_projet'])) $res->addErrMsg('champs id_projet manquant');
  122.         if(!isset($data['id_salarie'])) $res->addErrMsg('champs id_salarie manquant');
  123.         if(!isset($data['charge_contrat'])) $res->addErrMsg('champs charge_contrat manquant');
  124.         if(!isset($data['description_contrat'])) $res->addErrMsg('champs description_contrat manquant');
  125.         if(!isset($data['liste_date_pointage'])) $res->addErrMsg('champs liste_date_pointage manquant');
  126.         if(!isset($data['tarif_jour'])) $res->addErrMsg('champs tarif_jour manquant');
  127.         if(!isset($data['heure_par_jour'])) $res->addErrMsg('champs heure_par_jour manquant');
  128.         if(!$res->isSuccess()) die($res->returnJson());
  129.         if(''===($data['id_contrat'])) $res->addErrMsg('champs id_contrat manquant');
  130.         if(''===($data['id_projet'])) $res->addErrMsg('champs id_projet manquant');
  131.         if(''===($data['id_salarie'])) $res->addErrMsg('champs id_salarie manquant');
  132.         if(''===($data['charge_contrat'])) $res->addErrMsg('champs charge_contrat manquant');
  133.         if(0===count($data['liste_date_pointage'])) $res->addErrMsg('Aucun jour pointage');
  134.         if(''===($data['tarif_jour'])) $res->addErrMsg('champs tarif_jour manquant');
  135.         if(''===($data['heure_par_jour'])) $res->addErrMsg('champs heure_par_jour manquant');
  136.         if(!$res->isSuccess()) die($res->returnJson());
  137.         /** @var \App\Entity\User $currentUser */
  138.         $currentUser $this->getUser()->getId();
  139.         $contratRepository $this->em->getRepository(Contrat::class);
  140.         $contrat $contratRepository->find($data['id_contrat']);
  141.         if(null===$contrat$res->addErrMsg('Contrat non trouvé dans la base de données');
  142.         if(!$res->isSuccess()) die($res->returnJson());
  143.         $contrat->setCharge($data['charge_contrat'])
  144.             ->setDescription($data['description_contrat'])
  145.             ->setAnnee($data['annee_contrat'])
  146.             ->setMois($data['mois_contrat'])
  147.             ->setListeDatePointage($data['liste_date_pointage'])
  148.             ->setNbJourPointage(count($data['liste_date_pointage']))
  149.             ->setTarifJour($data['tarif_jour'])
  150.             ->setHeureParJour($data['heure_par_jour'])
  151.             ->setDateModif(new \DateTime())
  152.             ->setUserModif($currentUser)
  153.             ->setIdStatutSignatureElec(1)
  154.             ->setIdSignatureElec(null)
  155.         ;
  156.         $this->em->persist($contrat);
  157.         $this->em->flush();
  158.         die($res->returnJson());
  159.     }
  160.     /**
  161.      * @Route("/contrat/vierge/{id}", methods={"GET"}, name="init_contrat_vierge")
  162.      */
  163.     public function getContratVierge($id): response
  164.     {
  165.         $projetRepository $this->em->getRepository(Projet::class);
  166.         /** @var Projet $projet */
  167.         $projet $projetRepository->find($id);
  168.         if(null===$projet) return $this->render('misc/404.html.twig');
  169.         $webPath $this->getParameter('kernel.project_dir');
  170.         $contratVierge = new Contrat();
  171.         $salarieVierge = new Tiers();
  172.         $infosSalarieVierge = new InfoSalarie($webPath);
  173.         $infosSalarieVierge->initInfosVierge();
  174.         $salarieVierge->setInfoSalarie($infosSalarieVierge);
  175.         $contratVierge->setIdProjet($projet->getId())
  176.             ->setSalarie($salarieVierge)
  177.             ->setNbJourPointage(0)
  178.             ->setHeureParJour(8)
  179.         ;
  180.         return $this->render('projet/contrat/contrat-form.html.twig', [
  181.             'societe' => $this->dataSociete,
  182.             'projet' => $projet,
  183.             'contrat_vierge' => $contratVierge,
  184.             'label_btn_cancel' => 'Annuler',
  185.         ]);
  186.     }
  187.     /**
  188.      * @Route("/contrat/edit/{id}", methods={"GET"}, name="edit_contrat")
  189.      */
  190.     public function getContratForEdit($id)
  191.     {
  192.         $contratRepository $this->em->getRepository(Contrat::class);
  193.         /** @var Contrat $contrat */
  194.         $contrat $contratRepository->find($id);
  195.         if(null===$contrat) return $this->render('misc/404.html.twig');
  196.         $webPath $this->getParameter('kernel.project_dir');
  197.         $contrat->getSalarie()->getInfoSalarie()->initEncryptionKey($webPath);
  198.         $contrat->getSalarie()->getInfoSalarie()->decryptContent();
  199.         $projetRepository $this->em->getRepository(Projet::class);
  200.         $projet $projetRepository->find($contrat->getIdProjet());
  201.         if(null===$projet) return $this->render('misc/404.html.twig');
  202.         return $this->render('projet/contrat/contrat-form.html.twig', [
  203.             'societe' => $this->dataSociete,
  204.             'projet' => $projet,
  205.             'contrat' => $contrat,
  206.             'label_btn_cancel' => 'Supprimer',
  207.         ]);
  208.     }
  209.     /**
  210.      * @Route("/contrat/delete-contrat", methods={"POST"}, name="delete_contrat")
  211.      */
  212.     public function deleteContrat(Request $request): Response
  213.     {
  214.         //TODO: page erreur entity manager
  215.         if(null===$this->em) return $this->render('misc/404.html.twig');
  216.         // Initialisation du retour Json
  217.         $res = new JsonRes($request->request->all());
  218.         if($res->isSuccess()) {
  219.             $data $res->getData();
  220.             if(!isset($data['id_contrat'])) $res->addErrMsg('champs id_contrat inconnu');
  221.             if($res->isSuccess()) {
  222.                 if ('' === $data['id_contrat']) $res->addErrMsg('champs id_contrat obligatoire');
  223.                 if ($res->isSuccess()) {
  224.                     $contratRepository $this->em->getRepository(Contrat::class);
  225.                     /** @var Contrat $contrat */
  226.                     $contrat $contratRepository->find($data['id_contrat']);
  227.                     if(null===$contrat$res->addErrMsg('Contrat non identifiée');
  228.                     if ($res->isSuccess()) {
  229.                         if(!$this->isGranted('ROLE_SUPER_ADMIN') && null!==$contrat->getIdSignatureElec())
  230.                             $res->addErrMsg('Impossible, ce contrat a été signé !');
  231.                         if ($res->isSuccess()) {
  232.                             $contratRepository->remove($contrat);
  233.                             $idProjet $contrat->getIdProjet();
  234.                             /** @var Tiers $salarie */
  235.                             $salarie $contrat->getSalarie();
  236.                             $contratList $contratRepository->findBy([
  237.                                 'id_projet' => $idProjet,
  238.                                 'salarie' => $salarie,
  239.                             ]);
  240.                             if (=== count($contratList)) {
  241.                                 $projetRepository $this->em->getRepository(Projet::class);
  242.                                 /** @var Projet $projet */
  243.                                 $projet $projetRepository->find($idProjet);
  244.                                 $projet->removeSalary($salarie);
  245.                                 $projetRepository->add($projet);
  246.                             }
  247.                             $res->setData($data);
  248.                         }
  249.                     }
  250.                 }
  251.             }
  252.         }
  253.         die($res->returnJson());
  254.     }
  255.     /**
  256.      * @Route("/contrat/transfert-salarie", methods={"POST"}, name="transfert_salarie")
  257.      */
  258.     public function transfertContrat(Request $request): Response
  259.     {
  260.         //TODO: page erreur entity manager
  261.         if(null===$this->em) return $this->render('misc/404.html.twig');
  262.         // Initialisation du retour Json
  263.         $res = new JsonRes($request->request->all());
  264.         if($res->isSuccess()) {
  265.             $data $res->getData();
  266.             if(!isset($data['id_projet'])) $res->addErrMsg('champs id_projet inconnu');
  267.             if(!isset($data['id_salarie_out'])) $res->addErrMsg('champs id_salarie_out inconnu');
  268.             if(!isset($data['id_salarie_in'])) $res->addErrMsg('champs id_salarie_in inconnu');
  269.             if($res->isSuccess()) {
  270.                 if ('' === $data['id_projet']) $res->addErrMsg('champs id_projet obligatoire');
  271.                 if ('' === $data['id_salarie_out']) $res->addErrMsg('champs id_salarie_out obligatoire');
  272.                 if ('' === $data['id_salarie_in']) $res->addErrMsg('champs id_salarie_in obligatoire');
  273.                 if ($res->isSuccess()) {
  274.                     // vérifier que aucun contrat n'est été signé
  275.                     $salarieRepository $this->em->getRepository(Tiers::class);
  276.                     /** @var Tiers $salarieOut */
  277.                     $salarieOut $salarieRepository->find($data['id_salarie_out']);
  278.                     if(null===$salarieOut$res->addErrMsg('Salarié non identifiée');
  279.                     $contratRepository $this->em->getRepository(Contrat::class);
  280.                     $canTransfert $contratRepository->canTransfertSalarie($data['id_projet'], $salarieOut);
  281.                     if(!$canTransfert) {
  282.                         $res->addErrMsg('Impossible de faire le transfert');
  283.                         $res->addErrMsg($salarieOut->getPrenomTiers() .' '$salarieOut->getNomTiers() . ' a des contrats signés sur ce projet');
  284.                     }
  285.                     /** @var Tiers $salarieIn */
  286.                     $salarieIn $salarieRepository->find($data['id_salarie_in']);
  287.                     if(null===$salarieIn$res->addErrMsg('Salarié non identifiée');
  288.                     if ($res->isSuccess()) {
  289.                         /** @var Contrat $contrat */
  290.                         foreach ($salarieOut->getContratByIdProjet($data['id_projet']) as $contrat){
  291.                             $contrat->setSalarie($salarieIn);
  292.                             $contratRepository->add($contrat);
  293.                         }
  294.                         $projetRepository $this->em->getRepository(Projet::class);
  295.                         /** @var Projet $projet */
  296.                         $projet $projetRepository->find($data['id_projet']);
  297.                         $projet->removeSalary($salarieOut);
  298.                         $projet->addSalary($salarieIn);
  299.                         $projetRepository->add($projet);
  300.                         $res->setData($data);
  301.                     }
  302.                 }
  303.             }
  304.         }
  305.         die($res->returnJson());
  306.     }
  307.     /**
  308.      * @Route("/contrat/reload-list/{idProjet}", methods={"GET"}, name="contrat_reload_list")
  309.      */
  310.     public function contratReloadList($idProjet)
  311.     {
  312.         $projetRepository $this->em->getRepository(Projet::class);
  313.         /** @var Projet $projet */
  314.         $projet $projetRepository->find($idProjet);
  315.         $salarieList = array();
  316.         $salarieProjet $projet->getSalaries();
  317.         foreach ($salarieProjet as $salarie){
  318.             $contratList $salarie->getContratByIdProjet($projet->getId());
  319.             foreach ($contratList as $contrat){
  320.                 $id $salarie->getId();
  321.                 if(!isset($salarieList[$id])){
  322.                     $contrat->total_jour_pointage 0;
  323.                     $contrat->total_salaire 0;
  324.                     $contrat->contrat_list = array();
  325.                     $salarieList[$id] = $contrat;
  326.                 }
  327.                 $tel '+33'substr($salarie->getTelPortableTiers(), 1);
  328.                 $mois = ['janvier','février','mars','avril','mai','juin','juillet','aout','septembre','octobre','novembre','décembre'];
  329.                 $mois $mois[intval($contrat->getMois())-1];
  330.                 $nomDemande 'CONTRAT TRAVAIL '$salarie->getNomTiers() .' '$salarie->getPrenomTiers() .' - '$mois .' '$contrat->getAnnee();
  331.                 $coordonnee = array(
  332.                     'nom_salarie' => $salarie->getNomTiers(),
  333.                     'prenom_salarie' => $salarie->getPrenomTiers(),
  334.                     'email_salarie' => $salarie->getEmailTiers(),
  335.                     'portable_salarie' => $tel,
  336.                     'nom_demande' => mb_strtoupper($nomDemande),
  337.                     'id_projet' => $projet->getId(),
  338.                     'id_salarie' => $salarie->getId(),
  339.                     'id_contrat' => $contrat->getId(),
  340.                 );
  341.                 $coordonnee json_encode($coordonnee);
  342.                 $contrat->coordonnee htmlentities($coordonnee);
  343.                 $salarieList[$id]->total_jour_pointage+= $contrat->getNbJourPointage();
  344.                 $salarieList[$id]->total_salaire+= $contrat->getTarifJour() * $contrat->getNbJourPointage();
  345.                 $salarieList[$id]->contrat_list[] = $contrat;
  346.             }
  347.         }
  348.         $salarieList Fnc::array_orderby($salarieList'getSalarie()->getInfoSalarie()->getFonction()'SORT_ASC);
  349. //        dd($salarieList);
  350.         return $this->render('projet/contrat/contrat-list.html.twig', [
  351.             'salarieList' => $salarieList,
  352.         ]);
  353.     }
  354.     /**
  355.      * @Route("/contrat/gestion-contrat", methods={"GET"}, name="contrat_gestion_contrat")
  356.      */
  357.     public function gestionContrat(): Response
  358.     {
  359.         $contratRepository $this->em->getRepository(Contrat::class);
  360.         $contratList $contratRepository->findBy([
  361.             'annee' => date('Y'),
  362.             'mois' => date('m'),
  363.         ]);
  364.         $btn '
  365.             <button class="btn btn-primary" onclick="window.open(\'/pdf/contrat-mensuel/'date('Y-m') .'\',\'_blank\')">
  366.                 Imprimer pdf contrats 'date('Y-m') .'
  367.             </button>
  368.         ';
  369.         return $this->render('contrat/gestion_contrat.html.twig', [
  370.             'id_menu' => 'gestion_contrat',
  371.             'contrat_list' => $this->performContratList($contratList),
  372.             'btn_print_pdf' => $btn,
  373.         ]);
  374.     }
  375.     /**
  376.      * @Route("/contrat/gestion-contrat/reload-list", methods={"POST"}, name="reload_contrat_gestion_contrat")
  377.      */
  378.     public function reloadGestionContrat(Request $request): Response
  379.     {
  380.         $res = new JsonRes($request->request->all());
  381.         $data $res->getData();
  382.         $contratList = [];
  383.         $btn '';
  384.         if(!empty($data['field']) && !empty($data['value'])){
  385.             switch ($data['field']){
  386.                 case 'date':
  387.                     $contratList $this->getContratByDate($data['value']);
  388.                     $btn '
  389.                         <button class="btn btn-primary" onclick="window.open(\'/pdf/contrat-mensuel/'$data['value'] .'\',\'_blank\')">
  390.                             Imprimer pdf contrats '$data['value'] .'
  391.                         </button>
  392.                     ';
  393.                     break;
  394.                 case 'id_salarie':
  395.                     $tiersRepository $this->em->getRepository(Tiers::class);
  396.                     $salarie $tiersRepository->find($data['value']);
  397.                     $contratList $salarie->getContratTiers()->toArray();
  398.                     break;
  399.                 default:
  400.                     $contratRepository $this->em->getRepository(Contrat::class);
  401.                     $contratList $contratRepository->findBy([
  402.                         $data['field'] => $data['value'],
  403.                     ]);
  404.                     break;
  405.             }
  406.         }
  407.         return $this->render('contrat/gestion_contrat_list.html.twig', [
  408.             'contrat_list' => $this->performContratList($contratList),
  409.             'btn_print_pdf' => $btn,
  410.         ]);
  411.     }
  412.     private function getContratByDate($date)
  413.     {
  414.         $date explode('-'$date);
  415.         if(2!==count($date)) return [];
  416.         $contratRepository $this->em->getRepository(Contrat::class);
  417.         return $contratRepository->findBy([
  418.             'annee' => $date[0],
  419.             'mois' => intval($date[1]),
  420.         ]);
  421.     }
  422.     private function performContratList($contratList)
  423.     {
  424.         return array_map(function (Contrat $contrat){
  425.             $webPath $this->getParameter('kernel.project_dir');
  426.             $projetRepository $this->em->getRepository(Projet::class);
  427.             $contrat->projet $projetRepository->find($contrat->getIdProjet());
  428.             $contrat->checkData($webPath);
  429.             return $contrat;
  430.         }, $contratList);
  431.     }
  432.     /**
  433.      * @Route("/contrat/gestion-dpae", methods={"GET"}, name="contrat_gestion_dpae")
  434.      */
  435.     public function gestionDPAE(): Response
  436.     {
  437.         $contratRepository $this->em->getRepository(Contrat::class);
  438.         $projetRepository $this->em->getRepository(Projet::class);
  439.         $webPath $this->getParameter('kernel.project_dir');
  440.         $contratList $contratRepository->findBy(['date_urssaf'=>null]);
  441.         $semaineList = array();
  442.         foreach ($contratList as $contrat) {
  443.             $i $contrat->getAnnee();
  444.             if(null!==$contrat->getFirstDate()) $i.= ' - Sem. '$contrat->getFirstDate()->format('W');
  445.             $contrat->projet $projetRepository->find($contrat->getIdProjet());
  446.             $contrat->checkData($webPath);
  447.             $semaineList[$i][] = $contrat;
  448.         };
  449.         ksort($semaineList);
  450.         return $this->render('contrat/gestion_dpae.html.twig', [
  451.             'id_menu' => 'gestion_dpae',
  452.             'semaine_list' => $semaineList,
  453.         ]);
  454.     }
  455.     /**
  456.      * @Route("/contrat/upload-dpae/{id}", methods={"GET"}, name="contrat_upload_dpae")
  457.      */
  458.     public function uploadDPAE($id)
  459.     {
  460.         $this->processUploadDPAE($id);
  461.     }
  462.     /**
  463.      * @Route("/contrat/upload-dpae-list", methods={"POST"}, name="contrat_upload_dpae_list")
  464.      */
  465.     public function uploadDPAEList(Request $request)
  466.     {
  467.         $res = new JsonRes($request->request->all());
  468.         $data $res->getData();
  469.         if(!isset($data['id_list'])) $res->addErrMsg('champs id_list inconnu');
  470.         if(!$res->isSuccess()) die($res->returnJson());
  471.         foreach ($data['id_list'] as $id$this->processUploadDPAE($id);
  472.         die($res->returnJson());
  473.     }
  474.     public function processUploadDPAE($id)
  475.     {
  476.         $contratRepository $this->em->getRepository(Contrat::class);
  477.         $contrat $contratRepository->find($id);
  478.         $webPath $this->getParameter('kernel.project_dir');
  479.         $salarie $contrat->getSalarie();
  480.         $info $salarie->getInfoSalarie()->initEncryptionKey($webPath)->decryptContent();
  481.         $dateNaissance join('-'array_reverse(explode('/'$info->getDateNaissance())));
  482.         $datePointageListe $contrat->getListeDatePointage();
  483.         $dateDebContrat date('Y-m-d'$datePointageListe[0]);
  484.         $dateFinContrat date('Y-m-d'array_pop($datePointageListe));
  485.         $siret str_replace(' '''$this->dataSociete->siret);
  486.         $siret.= $this->dataSociete->code_naf;// $siret = '51871382100032';
  487. //        $siret = '51871382100024';
  488.         $codeApe str_replace(' '''$this->dataSociete->code_ape);
  489.         $dpae = new Embauche();
  490.         $dpae->setRaisonSociale(mb_strtoupper($this->dataSociete->lib_societe))
  491.             ->setSiret($siret)
  492.             ->setCodeApe($codeApe)
  493.             ->setCodeUrssaf($this->dataSociete->code_urssaf)
  494.             ->setRueEmployeur($this->dataSociete->rue)
  495.             ->setVilleEmployeur($this->dataSociete->ville)
  496.             ->setCodePostalEmployeur($this->dataSociete->code_postal)
  497.             ->setTelephoneEmployeur($this->dataSociete->telephone)
  498.             ->setNomSalarie($salarie->getNomTiers())
  499.             ->setPrenomSalarie($salarie->getPrenomTiers())
  500.             ->setNumSecuSalarie($info->getNumSecuSociale())
  501.             ->setDateNaissanceSalarie($dateNaissance)
  502.             ->setLieuNaissanceSalarie($info->getLieuNaissance())
  503.             ->setDateDebContrat($dateDebContrat)
  504.             ->setDateFinContrat($dateFinContrat)
  505.             ->setNatureContrat('CDD')
  506.             ->setServiceSante('176')
  507.             ->setDureePeriodeEssaie('1')
  508.             ->setIdContrat(strval($contrat->getId()))
  509.         ;
  510.         $Urssaf = new UrssafAPI('dpae'$webPath);
  511. //        $res = $Urssaf->sendDPAE($dpae);
  512. //        if($res) {
  513. //            $contrat->setStatutUrssaf('envoyé')
  514. //                ->setDateUrssaf(new \DateTime());
  515. //
  516. //        } else {
  517. //            $contrat->setStatutUrssaf('Erreur retour api');
  518. //        }
  519.         $contrat->setStatutUrssaf('envoyé')
  520.             ->setDateUrssaf(new \DateTime());
  521.         $contrat->getSalarie()->getInfoSalarie()->initEncryptionKey($webPath)->persistContent();
  522.         sleep(2);
  523. //        $contratRepository->add($contrat);
  524.         $contratRepository->updateStatutUrssaf($contrat->getId());
  525.         unset($contratRepository);
  526.         unset($contrat);
  527.     }
  528.     /**
  529.      * @Route("/contrat/generate-txt-dpae/{id}", methods={"GET"}, name="contrat_generate_txt_dpae")
  530.      */
  531.     function generateTxtDue($id)
  532.     {
  533.         $contratRepository $this->em->getRepository(Contrat::class);
  534.         $contrat $contratRepository->find($id);
  535.         $webPath $this->getParameter('kernel.project_dir');
  536.         $salarie $contrat->getSalarie();
  537.         $info $salarie->getInfoSalarie()->initEncryptionKey($webPath)->decryptContent();
  538.         $dateNaissance join('-'array_reverse(explode('/'$info->getDateNaissance())));
  539.         $datePointageListe $contrat->getListeDatePointage();
  540.         $dateDebContrat date('Y-m-d'$datePointageListe[0]);
  541.         $dateFinContrat date('Y-m-d'array_pop($datePointageListe));
  542.         $siret str_replace(' '''$this->dataSociete->siret);
  543.         $siret.= $this->dataSociete->code_naf;// $siret = '51871382100032';
  544. //        $siret = '51871382100024';
  545.         $codeApe str_replace(' '''$this->dataSociete->code_ape);
  546.         $dpae = new Embauche();
  547.         $dpae->setRaisonSociale(mb_strtoupper($this->dataSociete->lib_societe))
  548.             ->setSiret($siret)
  549.             ->setCodeApe($codeApe)
  550.             ->setCodeUrssaf($this->dataSociete->code_urssaf)
  551.             ->setRueEmployeur($this->dataSociete->rue)
  552.             ->setVilleEmployeur($this->dataSociete->ville)
  553.             ->setCodePostalEmployeur($this->dataSociete->code_postal)
  554.             ->setTelephoneEmployeur($this->dataSociete->telephone)
  555.             ->setNomSalarie($salarie->getNomTiers())
  556.             ->setPrenomSalarie($salarie->getPrenomTiers())
  557.             ->setNumSecuSalarie($info->getNumSecuSociale())
  558.             ->setDateNaissanceSalarie($dateNaissance)
  559.             ->setLieuNaissanceSalarie($info->getLieuNaissance())
  560.             ->setDateDebContrat($dateDebContrat)
  561.             ->setDateFinContrat($dateFinContrat)
  562.             ->setNatureContrat('CDD')
  563.             ->setServiceSante('176')
  564.             ->setDureePeriodeEssaie('1')
  565.             ->setIdContrat(strval($contrat->getId()))
  566.         ;
  567.         $recup_nom utf8_decode($dpae->getNomSalarie());
  568. //        $recup_nom = strtoupper($this->stripAccents($ModelFonction->suppr_accents($recup_nom))); //stripAccents($ModelFonction->suppr_accents($recup_nom))
  569.         $recup_prenom utf8_decode($dpae->getPrenomSalarie());
  570. //        $recup_prenom = strtoupper($this->stripAccents($ModelFonction->suppr_accents($recup_prenom))); //stripAccents($ModelFonction->suppr_accents($recup_prenom))
  571.         $recup_naissance $dpae->getDateNaissanceSalarie();
  572.         $recup_lieu_naissance $dpae->getLieuNaissanceSalarie();
  573. //        $recup_lieu_naissance = strtoupper($this->stripparentese($ModelFonction->suppr_accents($result_salarie['Lieu_Naissance_Salaries'])));
  574.         $recup_numero_secu $dpae->getNumSecuSalarie();
  575. //        $recup_cle_secu = substr($result_salarie['Numero_Securite_Sociale_Salaries'],13 ,2);
  576.         $recup_sexe $dpae->getSexeSalarie();
  577.         if($recup_sexe == 1) {
  578.             $recup_sexe "M";
  579.         }
  580.         if ($recup_sexe == 2) {
  581.             $recup_sexe "F";
  582.         }
  583.         $recup_dep_naissance $dpae->getDepartementNaissanceSalarie();
  584.         $nom_salarie strtoupper($recup_nom);
  585.         $nom_salarie str_replace("'""-"$nom_salarie);
  586.         $nom_salarie str_replace(" ""-"$nom_salarie);
  587.         $cheminDue $webPath .'/var/due/txt/due-';
  588.         if (file_exists($cheminDue.$dpae->getIdContrat().".txt")) {
  589.             unlink($cheminDue.$dpae->getIdContrat().".txt");
  590.         }
  591.         $monfichier fopen($cheminDue.$dpae->getIdContrat().".txt"'a+');
  592.         $raison_social ="GUNSMOKE";
  593.         $adresse "1TER RUE MORERE";
  594.         $adresse2 "";
  595.         $cp="75014";
  596.         $ville="PARIS";
  597.         $tel"0672573540";
  598.         $contenu "";
  599.         $contenu $raison_social."".$dpae->getIdContrat();
  600.         $contenu str_pad($contenu14);
  601.         fputs($monfichier$contenu);
  602.         fputs($monfichier"DUE");
  603.         fputs($monfichier"                ");
  604.         //C_ADR_RET_AR
  605.         $mail str_pad("due@gunsmoke.fr"30);
  606.         fputs($monfichier$mail);
  607.         //N_LG_MESS
  608.         fputs($monfichier"      912");
  609.         //C_VERSION
  610.         fputs($monfichier"120");
  611.         //C_RET_AR_LOT
  612.         fputs($monfichier"  ");
  613.         //LIBRE
  614.         fputs($monfichier"               ");
  615.         fputs($monfichier"               ");
  616.         fputs($monfichier"              ");
  617.         //D_CREATION
  618.         fputs($monfichier"        ");
  619.         //H_CREATION
  620.         fputs($monfichier"    ");
  621.         //C_URSSAF
  622.         fputs($monfichier"310");
  623.         //N_SIRET
  624.         fputs($monfichier"51871382100032");
  625.         fputs($monfichier" ");
  626.         //L_RAISON_SOC_1
  627.         $raison_social str_pad($raison_social32);
  628.         fputs($monfichier$raison_social);
  629.         fputs($monfichier"    ");
  630.         //L_ADR_EMP_1
  631.         $adresse str_pad($adresse32);
  632.         fputs($monfichier$adresse);
  633.         //L_ADR_EMP_2
  634.         $adresse2 str_pad($adresse232);
  635.         fputs($monfichier$adresse2);
  636.         //C_POSTAL_EMP
  637.         $cp str_pad($cp5);
  638.         fputs($monfichier$cp);
  639.         //L_BUR_DIST_EMP
  640.         $ville str_pad($ville27);
  641.         fputs($monfichier$ville);
  642.         //L_NOM_PATRO_SAL
  643.         $recup_nom str_pad($recup_nom32);
  644.         fputs($monfichier$recup_nom);
  645.         //L_PRENOMS_SAL
  646.         $recup_prenom str_pad($recup_prenom32);
  647.         fputs($monfichier$recup_prenom);
  648.         //N_SECU_SOC
  649.         fputs($monfichier$recup_numero_secu);
  650.         //D_NAISSANCE_SAL
  651.         fputs($monfichier$recup_naissance);
  652.         //L_LIEU_NAISS_SAL
  653.         $recup_lieu_naissance str_pad($recup_lieu_naissance24);
  654.         fputs($monfichier$recup_lieu_naissance);
  655.         fputs($monfichier"                    ");
  656.         fputs($monfichier$dpae->getDateDebContrat());
  657.         fputs($monfichier"0800");
  658.         fputs($monfichier"       ");
  659.         /////////////
  660.         //EMPLOYEUR//
  661.         /////////////
  662.         fputs($monfichier"                                                                              ");
  663.         $raison_social str_pad($raison_social32);
  664.         fputs($monfichier$raison_social);
  665.         //N_TEL_EMP
  666.         $tel str_pad($tel11);
  667.         fputs($monfichier$tel);
  668.         fputs($monfichier"                                                                                                           ");
  669.         //C_ORIG_SAISIE
  670.         fputs($monfichier" ");
  671.         //C_NAF_NN
  672.         fputs($monfichier"5911A                                 ");
  673.         ////////////
  674.         //SALARIE //
  675.         ////////////
  676.         $recup_nom str_pad($recup_nom32);
  677.         fputs($monfichier$recup_nom);
  678.         fputs($monfichier$recup_sexe);
  679.         fputs($monfichier"                                                                                                ");
  680.         fputs($monfichier$recup_dep_naissance);
  681.         fputs($monfichier"                                   ");
  682.         //C_TYPE_CONTRAT
  683.         fputs($monfichier"1");
  684.         //D_FIN_CDD
  685.         fputs($monfichier$dpae->getDateFinContrat());
  686.         fputs($monfichier"           ");
  687.         //N_JJ_ESSAI
  688.         fputs($monfichier"001");
  689.         fputs($monfichier"                                                  ");
  690.         //Code centre de médecine du travail
  691.         fputs($monfichier"MT176");
  692.         fputs($monfichier"                                               \n");
  693.         fclose($monfichier);
  694.         $contrat->setStatutUrssaf('due-'.$dpae->getIdContrat().'.txt')
  695.             ->setDateUrssaf(new \DateTime())
  696.         ;
  697.         $contrat->getSalarie()->getInfoSalarie()->initEncryptionKey($webPath)->persistContent();
  698.         $contratRepository->add($contrat);
  699.         header('Content-Type: text/plain');
  700.         header('Content-Disposition: attachment; filename="'.$dpae->getIdContrat().'.txt');
  701.         $fileContent file_get_contents($cheminDue.$dpae->getIdContrat().".txt");
  702.         echo $fileContent;
  703.         exit;
  704.     }
  705. }