src/Controller/AdminController.php line 5118

Open in your IDE?
  1. <?php
  2. // src/Controller/EntrepriseController.php
  3. namespace App\Controller;
  4. use App\Entity\AppUser;
  5. use App\Entity\SlidePhoto;
  6. use App\Entity\ImageArticleBlog;
  7. use App\Entity\CategorieArticle;
  8. use App\Entity\FactureAcompte;
  9. use App\Entity\ProductPhoto;
  10. use App\Form\ArticleEditType;
  11. use App\Form\ArticleType;
  12. use App\Entity\Article;
  13. use App\Entity\Product;
  14. use App\Entity\ProductOrder;
  15. use App\Entity\TVA;
  16. use App\Entity\Pays;
  17. use App\Form\TVAEditType;
  18. use App\Form\TVAType;
  19. use App\Entity\PaymentMethod;
  20. use App\Form\PaymentMethodEditType;
  21. use App\Form\PaymentMethodType;
  22. use App\Form\ProduitType;
  23. use App\Form\ProduitEditType;
  24. use App\Form\SujetFAQType;
  25. use App\Form\SujetFAQEditType;
  26. use App\Entity\Entreprise;
  27. use App\Form\ProductType;
  28. use App\Form\ProductEditType;
  29. use App\Entity\Tiers;
  30. use App\Entity\Produit;
  31. use App\Entity\ProduitCommande;
  32. use App\Entity\Category;
  33. use App\Entity\SubCategory;
  34. use App\Form\CategorieProduitType;
  35. use App\Form\CategorieArticleEditType;
  36. use App\Form\CategorieArticleType;
  37. use App\Form\CategoryType;
  38. use App\Entity\ShippingMethod;
  39. use App\Form\ShippingMethodType;
  40. use App\Form\ShippingMethodEditType;
  41. use App\Form\CategoryEditType;
  42. use App\Form\SubCategoryType;
  43. use App\Form\SubCategoryEditType;
  44. use App\Form\ArticleAideType;
  45. use App\Entity\ArticleAide;
  46. use App\Entity\Boutique;
  47. use App\Form\ArticleAideEditType;
  48. use App\Entity\Coupon;
  49. use App\Entity\PrixProduit;
  50. use App\Form\CouponType;
  51. use App\Form\CouponEditType;
  52. use App\Form\BoutiqueType;
  53. use App\Form\CategorieProduitEditType;
  54. use App\Entity\Commande;
  55. use App\Entity\CategorieProduit;
  56. use App\Form\TiersType;
  57. use App\Form\TiersEditType;
  58. use App\Entity\ModeleReglement;
  59. use App\Entity\Payment;
  60. use App\Entity\ValiditeService;
  61. use App\Entity\UserBoutique;
  62. use App\Form\CategorieArticleAideType;
  63. use App\Form\CategorieArticleAideEditType;
  64. use App\Entity\Ticket;
  65. use App\Form\TicketType;
  66. use App\Entity\CommentaireTicket;
  67. use App\Form\CommentaireTicketType;
  68. use App\Services\ChiffreEnLettre;
  69. use App\Entity\RequeteAjoutBoutique;
  70. use App\Entity\EntreeDeStock;
  71. use App\Entity\ProduitEntreeDeStock;
  72. use App\Entity\Expensive;
  73. use App\Form\ExpensiveType;
  74. use App\Form\ExpensiveEditType;
  75. use App\Entity\PresenceEmploye;
  76. use App\Entity\PresenceEmployeUser;
  77. use App\Entity\RubriqueSalaire;
  78. use App\Form\RubriqueSalaireType;
  79. use App\Form\RubriqueSalaireEditType;
  80. use App\Entity\RubriqueSalaireEmploye;
  81. use App\Entity\Conge;
  82. use App\Entity\Compte;
  83. use App\Form\CompteType;
  84. use App\Form\EcritureComptableType;
  85. use App\Form\JournalComptabiliteType;
  86. use App\Form\JournalComptabiliteEditType;
  87. use App\Entity\JournalComptabilite;
  88. use App\Entity\EcritureComptable;
  89. use App\Entity\RubriqueSalairePaiement;
  90. use App\Entity\PaiementSalaire;
  91. use App\Entity\GroupeEcritureComptable;
  92. use App\Form\CategorieDepenseType;
  93. use App\Entity\CategorieDepense;
  94. use App\Form\CategorieDepenseEditType;
  95. use App\Form\EmployeType;
  96. use App\Form\EmployeEditType;
  97. use App\Entity\Photo;
  98. use App\Entity\DroitUtilisateur;
  99. use Symfony\Component\HttpFoundation\Response;
  100. use Symfony\Component\HttpFoundation\Request;
  101. use Symfony\Component\HttpFoundation\JsonResponse;
  102. use Symfony\Component\Routing\Annotation\Route;
  103. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  104. use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
  105. use Symfony\Component\HttpKernel\KernelInterface;
  106. use Spipu\Html2Pdf\Html2Pdf;
  107. /**
  108.  * @Route("/{_locale}/dashboard")
  109.  */
  110. class AdminController extends AbstractController
  111. {    
  112.     private $kernel;
  113.     
  114.     public function  __construct(KernelInterface $kernel)
  115.     {
  116.         $this->kernel $kernel;
  117.         
  118.     }
  119.     
  120.     /**
  121.      * @Route("/shop/{slug}", name="admin.show_shop")
  122.      * @return \Symfony\Component\HttpFoundation\Response
  123.      */
  124.     public function afficherBoutiqueAction(Request $requestBoutique $boutique)
  125.     {
  126.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  127.            return $this->redirectToRoute('security_login');
  128.         }
  129.         
  130.         $em $this->getDoctrine()
  131.                     ->getManager();
  132.         $user $this->getUser();
  133.         $intervalleDeDate  $this->intervalleSemaine(date('Y-m-d'));
  134.         $dateDebut = new \DateTime($intervalleDeDate['debut']);
  135.         $dateDebut->setTime(00);
  136.         $dateFin = new \DateTime($intervalleDeDate['fin']);
  137.         $dateFin->setTime(2359);
  138.         
  139.         $intervalleMois $this->intervalleMois(date('Y-m-d'));
  140.         $startMonth $intervalleMois['debut'];
  141.         $endMonth $intervalleMois['fin'];
  142.         
  143.         $invoices  $em->getRepository(Commande::class)
  144.                         ->commandeParDateEtType($boutique->getId(), 'invoice'$dateDebut$dateFin);
  145.         
  146.         $startYear date('Y-01-01');
  147.         $endYear date('Y-12-31');
  148.         $userBoutique $em->getRepository(UserBoutique::class)
  149.                         ->findOneBy(
  150.                             array(
  151.                             'user' => $user->getId(),
  152.                             'boutique' => $boutique->getId()
  153.                             )
  154.                         );
  155.                         
  156.         return $this->render('admin/afficher_boutique.html.twig', [
  157.             'boutique' => $boutique,
  158.             'userBoutique' => $userBoutique,
  159.             'dateDebut' => $dateDebut,
  160.            'dateFin' => $dateFin,
  161.            'startMonth' => $startMonth,
  162.            'endMonth' => $endMonth,
  163.            'startYear' => $startYear,
  164.            'endYear' => $endYear,
  165.         ]);
  166.     }
  167.     
  168.     /**
  169.      * @Route("/shop/{slug}/mini-statistic", name="admin.mini_statistic")
  170.      * @return \Symfony\Component\HttpFoundation\Response
  171.      */
  172.     public function miniStatisticAction(Request $requestBoutique $boutique)
  173.     {
  174.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  175.            return $this->redirectToRoute('security_login');
  176.         }
  177.         
  178.         $em $this->getDoctrine()
  179.                     ->getManager();
  180.         
  181.         $user $this->getUser();
  182.               
  183.         
  184.         $mois date('mY');
  185.         $annee date('Y');
  186.         $chiffrDAffaireMois $em->getRepository(Commande::class)
  187.                         ->chiffrDAffairePeriodique($mois$boutique->getId());
  188.         
  189.         $chiffrDAffaireAnnee $em->getRepository(Commande::class)
  190.                         ->chiffrDAffairePeriodique($annee$boutique->getId());
  191.                         
  192.         $depenseMois $em->getRepository(Expensive::class)
  193.                         ->depensePeriodique($mois$boutique->getId());
  194.         $depenseAnnee $em->getRepository(Expensive::class)
  195.                         ->depensePeriodique($annee$boutique->getId());
  196.         $nombreTiers 0;
  197.         
  198.         $nombreTiers $em->getRepository(Tiers::class)
  199.                         ->nombreTiers($boutique->getId());
  200.         
  201.         $nombreProduit $em->getRepository(Produit::class)
  202.                         ->nombreProduit($boutique->getId());
  203.         
  204.         $commandParMois $em->getRepository(Commande::class)
  205.                         ->chiffrDAffaireParMois($annee$boutique->getId());
  206.         
  207.         $chiffreDAffaireSurPlsAnnees $em->getRepository(Commande::class)
  208.                         ->chiffrDAffaireSurPluisieursAnnees($boutique->getId());
  209.         
  210.         $intervalleDeDate  $this->intervalleSemaine(date('Y-m-d'));
  211.         $dateDebut = new \DateTime($intervalleDeDate['debut']);
  212.         $dateDebut->setTime(00);
  213.         $dateFin = new \DateTime($intervalleDeDate['fin']);
  214.         $dateFin->setTime(2359);
  215.         if($request->getMethod() == 'POST'){
  216.             $dateDebut $request->request->get('dateDebut');
  217.             $dateDebut = new \DateTime($dateDebut);
  218.             $dateDebut->setTime(00);
  219.             $dateFin $request->request->get('dateFin');
  220.             $dateFin = new \DateTime($dateFin);
  221.             $dateFin->setTime(2359);
  222.         }
  223.         $chiffreDAffaireDUnePeriode $em->getRepository(Commande::class)
  224.                                         ->chiffreDAffaireDUnePeriode('invoice'$boutique->getId(), $dateDebut$dateFin);
  225.         
  226.         $devisPeriodique  $em->getRepository(Commande::class)
  227.                                         ->chiffreDAffaireDUnePeriode('proposal'$boutique->getId(), $dateDebut$dateFin);
  228.         
  229.         if(!empty($devisPeriodique)){
  230.             $devisPeriodique $devisPeriodique[0]['totalVente'];
  231.         }else{
  232.             $devisPeriodique 0;
  233.         }
  234.         if(!empty($chiffreDAffaireDUnePeriode)){
  235.             
  236.             $chiffreDAffaireDUnePeriode $chiffreDAffaireDUnePeriode[0]['totalVente'];
  237.         }else{
  238.             $chiffreDAffaireDUnePeriode 0;
  239.         }
  240.         $paiementDUnePeriode $em->getRepository(Payment::class)
  241.                                 ->paiementDUnePeriode($boutique$dateDebut$dateFin);
  242.         
  243.         if(!empty($paiementDUnePeriode)){
  244.             $paiementDUnePeriode $paiementDUnePeriode[0]['montantTotal'];
  245.         }else{
  246.             $paiementDUnePeriode 0;
  247.         }
  248.         $totalDepenseParDate $em->getRepository(Expensive::class)
  249.                                 ->totalDepenseParDate($boutique->getId(), $dateDebut$dateFin);
  250.         if(!empty($totalDepenseParDate)){
  251.             $totalDepenseParDate $totalDepenseParDate[0]['totalDepense'];
  252.         } else{
  253.             $totalDepenseParDate 0;
  254.         }
  255.         $soldeTimbreFNE $boutique->getSoldeTimbreFNE();
  256.         $userBoutique $em->getRepository(UserBoutique::class)
  257.                         ->findOneBy(
  258.                             array(
  259.                             'user' => $user->getId(),
  260.                             'boutique' => $boutique->getId()
  261.                             )
  262.                         );
  263.         return $this->render('admin/mini_statistic.html.twig', [
  264.            'boutique' => $boutique,
  265.            'chiffrDAffaireAnnee' => $chiffrDAffaireAnnee,
  266.            'chiffrDAffaireMois' => $chiffrDAffaireMois,
  267.            'nombreTiers' => $nombreTiers,
  268.            'nombreProduit' => $nombreProduit,
  269.            'commandParMois' => $commandParMois,
  270.            'chiffreDAffaireSurPlsAnnees' => $chiffreDAffaireSurPlsAnnees,
  271.            'userBoutique' => $userBoutique,
  272.            'depenseMois' => $depenseMois,
  273.            'depenseAnnee' => $depenseAnnee,
  274.            'chiffreDAffaireDUnePeriode' => $chiffreDAffaireDUnePeriode,
  275.            'totalDepenseParDate' => $totalDepenseParDate,
  276.            'soldeTimbreFNE' => $soldeTimbreFNE,
  277.            'paiementDUnePeriode' => $paiementDUnePeriode,
  278.            'devisPeriodique' => $devisPeriodique
  279.         ]);
  280.     }
  281.     
  282.     
  283.     /**
  284.      * @Route("/sales-total/{slug}", name="admin.sales_total")
  285.      * @return \Symfony\Component\HttpFoundation\Response
  286.      */
  287.     public function salesTotal(Request $requestBoutique $boutique)
  288.     {
  289.         $em $this->getDoctrine()
  290.                     ->getManager();
  291.         
  292.         $user $this->getUser();
  293.               
  294.             
  295.         $mois date('mY');
  296.         $annee date('Y');
  297.         $chiffrDAffaireMois $em->getRepository(Commande::class)
  298.                         ->chiffrDAffairePeriodique($mois$boutique->getId());
  299.         
  300.         $chiffrDAffaireAnnee $em->getRepository(Commande::class)
  301.                         ->chiffrDAffairePeriodique($annee$boutique->getId());
  302.         $nombreTiers 0;
  303.         
  304.         $nombreTiers $em->getRepository(Tiers::class)
  305.                         ->nombreTiers($boutique->getId());
  306.         
  307.         $nombreProduit $em->getRepository(Produit::class)
  308.                         ->nombreProduit($boutique->getId());
  309.         
  310.         $commandParMois $em->getRepository(Commande::class)
  311.                         ->chiffrDAffaireParMois($annee$boutique->getId());
  312.         
  313.         $chiffreDAffaireSurPlsAnnees $em->getRepository(Commande::class)
  314.                         ->chiffrDAffaireSurPluisieursAnnees($boutique->getId());
  315.         $userBoutique $em->getRepository(UserBoutique::class)
  316.                         ->findOneBy(
  317.                             array(
  318.                             'user' => $user->getId(),
  319.                             'boutique' => $boutique->getId()
  320.                             )
  321.                         );
  322.         return $this->render('admin/sales_total.html.twig', [
  323.            'boutique' => $boutique,
  324.            'chiffrDAffaireAnnee' => $chiffrDAffaireAnnee,
  325.            'chiffrDAffaireMois' => $chiffrDAffaireMois,
  326.            'nombreTiers' => $nombreTiers,
  327.            'nombreProduit' => $nombreProduit,
  328.            'commandParMois' => $commandParMois,
  329.            'chiffreDAffaireSurPlsAnnees' => $chiffreDAffaireSurPlsAnnees,
  330.            'userBoutique' => $userBoutique
  331.         ]);
  332.     }
  333.     
  334.     
  335.     /**
  336.      * @Route("/{slug}/verifier-abonnement", name="admin.verifier_abonnement")
  337.      * @return \Symfony\Component\HttpFoundation\Response
  338.      */
  339.     public function verifierAbonnementAction(Request $requestBoutique $boutique)
  340.     {
  341.             
  342.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  343.            return $this->redirectToRoute('security_login');
  344.         }
  345.         
  346.         $em $this->getDoctrine()
  347.                     ->getManager();
  348.                     
  349.         $derniereValiditeService =  $em->getRepository(ValiditeService::class)
  350.                         ->derniereValiditeService($boutique->getId());
  351.             
  352.         $user $this->getUser();
  353.         
  354.         $nombreDeJour 0;
  355.         $aujourdhui = new \DateTime();
  356.         $interV '';
  357.         if(null !== $derniereValiditeService){
  358.                 
  359.             $interV $aujourdhui->diff($derniereValiditeService->getValableJusquAu());
  360.             
  361.             $nombreDeJour $interV->days;
  362.         }
  363.         
  364.         if($nombreDeJour <= 0){
  365.             
  366.             //return $this->redirectToRoute('choose_paied_plan');
  367.         }
  368.         $userBoutique $em->getRepository(UserBoutique::class)
  369.                         ->findOneBy(
  370.                             array(
  371.                             'user' => $user->getId(),
  372.                             'boutique' => $boutique->getId()
  373.                             )
  374.                         );
  375.         return $this->render('admin/verifier_abonnement.html.twig', [
  376.            'boutique' => $boutique,
  377.            'derniereValiditeService' => $derniereValiditeService,
  378.            'nombreDeJour' => $nombreDeJour,
  379.            'userBoutique' => $userBoutique
  380.         ]);
  381.     }
  382.     
  383.     
  384.     //Proposals
  385.     /**
  386.      * @Route("/{slug}/proposals", name="admin.proposals")
  387.      * @return \Symfony\Component\HttpFoundation\Response
  388.      */
  389.     public function proposalsActionRequest $requestBoutique $boutique)
  390.     {
  391.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  392.            return $this->redirectToRoute('security_login');
  393.         }
  394.         
  395.         $em $this->getDoctrine()
  396.                     ->getManager();
  397.         $intervalleDeDate  $this->intervalleSemaine(date('Y-m-d'));
  398.         $dateDebut = new \DateTime($intervalleDeDate['debut']);
  399.         $dateDebut->setTime(00);
  400.         $dateFin = new \DateTime($intervalleDeDate['fin']);
  401.         $dateFin->setTime(2359);
  402.         
  403.         $intervalleMois $this->intervalleMois(date('Y-m-d'));
  404.         $startMonth $intervalleMois['debut'];
  405.         $endMonth $intervalleMois['fin'];
  406.         
  407.         $proposals  $em->getRepository(Commande::class)
  408.                         ->commandeParDateEtType($boutique->getId(), 'proposal'$dateDebut$dateFin);
  409.         $user $this->getUser();
  410.         $userBoutique $em->getRepository(UserBoutique::class)
  411.                         ->findOneBy(
  412.                             array(
  413.                             'user' => $user->getId(),
  414.                             'boutique' => $boutique->getId()
  415.                             )
  416.                         );
  417.         $startYear date('Y-01-01');
  418.         $endYear date('Y-12-31');
  419.         $clients $em->getRepository(Tiers::class)
  420.                     ->findBy(
  421.                         array(
  422.                             'boutique' => $boutique->getId(),
  423.                             'estSupprime' => false
  424.                             
  425.                         ),
  426.                         array(
  427.                             'nom' => 'ASC'
  428.                         )
  429.                     );
  430.         if('POST' == $request->getMethod()){
  431.             $dateDebut $_POST['dateDebut'];
  432.             $dateFin $_POST['dateFin'];
  433.             
  434.             $dateDebut = new \DateTime($dateDebut);
  435.             $dateDebut->setTime(00);
  436.             $dateFin = new \DateTime($dateFin);
  437.             $dateFin->setTime(2359);
  438.             
  439.             $proposals  $em->getRepository(Commande::class)
  440.                         ->commandeParDateEtType($boutique->getId(), 'proposal'$dateDebut$dateFin);
  441.             
  442.             
  443.             return $this->render('admin/proposals_table_content.html.twig', [
  444.                'boutique' => $boutique,
  445.                'proposals' => $proposals
  446.             ]);
  447.             
  448.         }
  449.         
  450.         return $this->render('admin/proposals.html.twig', [
  451.            'boutique' => $boutique,
  452.            'proposals' => $proposals,
  453.            'dateDebut' => $dateDebut,
  454.            'dateFin' => $dateFin,
  455.            'startMonth' => $startMonth,
  456.            'endMonth' => $endMonth,
  457.            'startYear' => $startYear,
  458.            'endYear' => $endYear,
  459.            'userBoutique' => $userBoutique,
  460.            'clients' => $clients
  461.         ]);
  462.     }
  463.     
  464.     //Proposals
  465.     /**
  466.      * @Route("/{slug}/deposits", name="admin.deposits")
  467.      * @return \Symfony\Component\HttpFoundation\Response
  468.      */
  469.     public function depositsActionRequest $requestBoutique $boutique)
  470.     {
  471.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  472.            return $this->redirectToRoute('security_login');
  473.         }
  474.         
  475.         $em $this->getDoctrine()
  476.                     ->getManager();
  477.         
  478.             
  479.         $user $this->getUser();
  480.         $userBoutique $em->getRepository(UserBoutique::class)
  481.                         ->findOneBy(
  482.                             array(
  483.                             'user' => $user->getId(),
  484.                             'boutique' => $boutique->getId()
  485.                             )
  486.                         );
  487.         $intervalleDeDate  $this->intervalleSemaine(date('Y-m-d'));
  488.         $dateDebut = new \DateTime($intervalleDeDate['debut']);
  489.         $dateFin = new \DateTime($intervalleDeDate['fin']);
  490.         
  491.         $intervalleMois $this->intervalleMois(date('Y-m-d'));
  492.         $startMonth $intervalleMois['debut'];
  493.         $endMonth $intervalleMois['fin'];
  494.         
  495.         $deposits  $em->getRepository(FactureAcompte::class)
  496.                         ->factureParDate($boutique->getId(), $dateDebut$dateFin);
  497.         
  498.         
  499.         $startYear date('Y-01-01');
  500.         $endYear date('Y-12-31');
  501.         if('POST' == $request->getMethod()){
  502.             $dateDebut $_POST['dateDebut'];
  503.             $dateFin $_POST['dateFin'];
  504.             
  505.             $dateDebut = new \DateTime($dateDebut);
  506.             $dateFin = new \DateTime($dateFin);
  507.             
  508.             $deposits  $em->getRepository(FactureAcompte::class)
  509.                         ->factureParDate($boutique->getId(), $dateDebut$dateFin);
  510.         
  511.             return $this->render('admin/deposits_table_content.html.twig', [
  512.                'boutique' => $boutique,
  513.                'deposits' => $deposits
  514.             ]);
  515.             
  516.         }
  517.         
  518.         
  519.     
  520.         return $this->render('admin/deposits.html.twig', [
  521.            'boutique' => $boutique,
  522.            'deposits' => $deposits,
  523.            'dateDebut' => $dateDebut,
  524.            'dateFin' => $dateFin,
  525.            'startMonth' => $startMonth,
  526.            'endMonth' => $endMonth,
  527.            'startYear' => $startYear,
  528.            'endYear' => $endYear,
  529.            'userBoutique' => $userBoutique
  530.         ]);
  531.     }
  532.     
  533.     //Proposals
  534.     /**
  535.      * @Route("/{slug}/new-deposit", name="admin.new_deposit")
  536.      * @return \Symfony\Component\HttpFoundation\Response
  537.      */
  538.     public function newDepositActionRequest $requestBoutique $boutique)
  539.     {
  540.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  541.            return $this->redirectToRoute('security_login');
  542.         }
  543.         
  544.         $responseFNE '';
  545.         $vehicules = array(1222328);
  546.         $em $this->getDoctrine()
  547.                     ->getManager();
  548.         $tvas  $em->getRepository(TVA::class)
  549.                         ->findBy(
  550.                             array(
  551.                                 'boutique' => $boutique->getId()
  552.                             )
  553.                         );
  554.         $factures  $em->getRepository(Commande::class)
  555.                         ->findBy(
  556.                             array(
  557.                                 'boutique' => $boutique->getId(),
  558.                                 'typeFacture' => 'invoice'
  559.                             )
  560.                         );
  561.                         
  562.         $editMode 'new';
  563.         $user $this->getUser();
  564.         $userBoutique $em->getRepository(UserBoutique::class)
  565.                         ->findOneBy(
  566.                             array(
  567.                             'user' => $user->getId(),
  568.                             'boutique' => $boutique->getId()
  569.                             )
  570.                         );
  571.         if($request->getMethod() == 'POST'){
  572.             $facture $_POST['facture'];
  573.             $facture $em->getRepository(Commande::class)
  574.                             ->findOneBy(
  575.                                 array(
  576.                                 'boutique' => $boutique->getId(),
  577.                                 'id' => $facture
  578.                                 )
  579.                             );
  580.         
  581.             $montant $_POST['montant'];
  582.             $valableJusquAu '';
  583.             if(isset($_POST['valableJusquAu'])){
  584.                 $valableJusquAu $_POST['valableJusquAu'];
  585.             }
  586.             
  587.             $pourcentage $_POST['pourcentage'];
  588.             $appliquerTVA false;
  589.             if(isset($_POST['appliquerTVA'])){
  590.                 $appliquerTVA = (bool) $_POST['appliquerTVA'];
  591.             }
  592.             
  593.             $tva 0;
  594.             if(isset($_POST['tva'])){
  595.                 $tva $_POST['tva'];
  596.             }
  597.             $laDate '';
  598.             if(isset($_POST['laDate'])){
  599.                 $laDate $_POST['laDate'];
  600.             }
  601.             
  602.             $deposit = new FactureAcompte;
  603.             $deposit->setTotalHT($montant);
  604.             $deposit->setPourcentage($pourcentage);
  605.             $deposit->setBoutique($boutique);
  606.             $deposit->setTiers($facture->getTiers());
  607.             $deposit->setFacture($facture);
  608.             $deposit->setLaDate(new \DateTime($laDate));
  609.             $deposit->setValableJusquAu(new \DateTime($valableJusquAu));
  610.             $deposit->setNumero($this->getNumero('deposit'$boutique));
  611.             if($appliquerTVA){
  612.                 $deposit->setTotalTVA(($montant $tva)/100);
  613.                 $ttc $montant * ($tva/100);
  614.                 $deposit->setTotalTTC($ttc);
  615.                 $deposit->setValeurTVA($tva);
  616.             } else{
  617.                 $deposit->setTotalTTC($montant);
  618.                 $deposit->setValeurTVA(0);
  619.             }
  620.             $em->persist($deposit);
  621.             $em->flush();
  622.             
  623.             $pdf = new Html2Pdf('P'$boutique->getSettings()->getFormatPapierImpression(), 'en');
  624.                     
  625.             $content $this->renderView('pdf/facture_acompte.html.twig', [
  626.                 'boutique' => $boutique,
  627.                 'facture' => $deposit,
  628.             ]);
  629.             $pdf->writeHTML($content);
  630.             $name 'deposit'.$deposit->getId().time().$boutique->getId().rand(110000).'.pdf';
  631.             $lienPhysique $deposit->getUploadRootDir().$name;
  632.             
  633.             $deposit->setLienPDF($this->getDomain().'/pdf478njkp01/'.$name);
  634.             $pdf->output($lienPhysique'F');
  635.             
  636.             $em->flush();
  637.             
  638.             return $this->render('admin/response_new_sale.html.twig', [
  639.                    'boutique' => $boutique,
  640.                    'commande' => $deposit,
  641.                    'responseFNE' => $responseFNE,
  642.                     'vehicules' => $vehicules
  643.                 ]);
  644.         }
  645.         return $this->render('admin/new_deposit.html.twig', [
  646.            'boutique' => $boutique,
  647.            'factures' => $factures,
  648.            'editMode' => $editMode,
  649.            'tvas' => $tvas,
  650.            'userBoutique' => $userBoutique
  651.         ]);
  652.     }
  653.     
  654.     //Proposals
  655.     /**
  656.      * @Route("/{slug}/edit-deposit/{id}", name="admin.edit_deposit")
  657.      * @return \Symfony\Component\HttpFoundation\Response
  658.      */
  659.     public function editDepositActionRequest $request,  $slug$id)
  660.     {
  661.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  662.            return $this->redirectToRoute('security_login');
  663.         }
  664.         
  665.         $em $this->getDoctrine()
  666.                     ->getManager();
  667.         
  668.         $boutique  $em->getRepository(Boutique::class)
  669.                         ->findOneBySlug($slug);
  670.         $user $this->getUser();
  671.         $userBoutique $em->getRepository(UserBoutique::class)
  672.                         ->findOneBy(
  673.                             array(
  674.                             'user' => $user->getId(),
  675.                             'boutique' => $boutique->getId()
  676.                             )
  677.                         );
  678.                         
  679.         $factures  $em->getRepository(Commande::class)
  680.                         ->findBy(
  681.                             array(
  682.                                 'boutique' => $boutique->getId(),
  683.                                 'typeFacture' => 'invoice'
  684.                             )
  685.                         );
  686.         
  687.         $tvas  $em->getRepository(TVA::class)
  688.                         ->findBy(
  689.                             array(
  690.                                 'boutique' => $boutique->getId()
  691.                             )
  692.                         );
  693.         
  694.         $deposit  $em->getRepository(FactureAcompte::class)
  695.                         ->findOneBy(
  696.                             array(
  697.                                 'boutique' => $boutique->getId(),
  698.                                 'id' => $id
  699.                             )
  700.                         );
  701.         
  702.         $editMode 'edit';
  703.         if($request->getMethod() == 'POST'){
  704.         $facture $_POST['facture'];
  705.             $facture $em->getRepository(Commande::class)
  706.                             ->findOneBy(
  707.                                 array(
  708.                                 'boutique' => $boutique->getId(),
  709.                                 'id' => $facture
  710.                                 )
  711.                             );
  712.         
  713.             $montant $_POST['montant'];
  714.             $pourcentage $_POST['pourcentage'];
  715.             $appliquerTVA false;
  716.             if(isset($_POST['appliquerTVA'])){
  717.                 $appliquerTVA = (bool) $_POST['appliquerTVA'];
  718.             }
  719.             
  720.             $tva 0;
  721.             if(isset($_POST['tva'])){
  722.                 $tva $_POST['tva'];
  723.             }
  724.             
  725.             $laDate '';
  726.             if(isset($_POST['laDate'])){
  727.                 $laDate $_POST['laDate'];
  728.             }
  729.             
  730.             $deposit->setTotalHT($montant);
  731.             $deposit->setPourcentage($pourcentage);
  732.             $deposit->setBoutique($boutique);
  733.             $deposit->setTiers($facture->getTiers());
  734.             $deposit->setLaDate(new \DateTime($laDate));
  735.             if($appliquerTVA){
  736.                 $deposit->setTotalTVA(($montant $tva)/100);
  737.                 $ttc $montant * ($tva)/100;
  738.                 $deposit->setTotalTVA(($montant $tva)/100);
  739.                 $deposit->setTotalTTC($ttc);
  740.                 $deposit->setValeurTVA($tva);
  741.             } else{
  742.                 $deposit->setTotalTTC($montant);
  743.                 $deposit->setValeurTVA(0);
  744.                 $deposit->setTotalTVA(0);
  745.             }
  746.             
  747.             $em->flush();
  748.         }
  749.         return $this->render('admin/edit_deposit.html.twig', [
  750.            'boutique' => $boutique,
  751.            'factures' => $factures,
  752.            'editMode' => $editMode,
  753.            'tvas' => $tvas,
  754.            'deposit' => $deposit,
  755.            'userBoutique' => $userBoutique
  756.         ]);
  757.     }
  758.     
  759.     /**
  760.      * @Route("/{slug}/delete-deposit/{id}", name="admin.delete_deposit")
  761.      * @return \Symfony\Component\HttpFoundation\Response
  762.      */
  763.     public function deleteDepositActionRequest $request,  $slug$id)
  764.     {
  765.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  766.            return $this->redirectToRoute('security_login');
  767.         }
  768.         
  769.         $em $this->getDoctrine()
  770.                     ->getManager();
  771.         
  772.         $boutique  $em->getRepository(Boutique::class)
  773.                         ->findOneBySlug($slug);
  774.         
  775.         $user $this->getUser();
  776.         $userBoutique $em->getRepository(UserBoutique::class)
  777.                         ->findOneBy(
  778.                             array(
  779.                             'user' => $user->getId(),
  780.                             'boutique' => $boutique->getId()
  781.                             )
  782.                         );
  783.         $deposit  $em->getRepository(FactureAcompte::class)
  784.                         ->findOneBy(
  785.                             array(
  786.                                 'boutique' => $boutique->getId(),
  787.                                 'id' => $id
  788.                             )
  789.                         );
  790.         if(null != $deposit){
  791.             $em->remove($deposit);
  792.             $em->flush();
  793.         }
  794.         return $this->redirectToRoute('admin.deposits', array('slug' => $boutique->getSlug()));
  795.     }
  796.     
  797.     
  798.     /**
  799.      * @Route("/{slug}/invoices", name="admin.invoices")
  800.      * @return \Symfony\Component\HttpFoundation\Response
  801.      */
  802.     public function invoicesActionRequest $requestBoutique $boutique)
  803.     {
  804.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  805.            return $this->redirectToRoute('security_login');
  806.         }
  807.         
  808.         $em $this->getDoctrine()
  809.                     ->getManager();
  810.                     
  811.         $paymentMethods $em->getRepository(PaymentMethod::class)
  812.                     ->findBy(
  813.                         array(
  814.                             'boutique' => $boutique->getId()
  815.                         )
  816.                     );
  817.         $intervalleDeDate  $this->intervalleSemaine(date('Y-m-d'));
  818.         $dateDebut = new \DateTime($intervalleDeDate['debut']);
  819.         $dateDebut->setTime(00);
  820.         $dateFin = new \DateTime($intervalleDeDate['fin']);
  821.         $dateFin->setTime(2359);
  822.         
  823.         
  824.         $intervalleMois $this->intervalleMois(date('Y-m-d'));
  825.         $startMonth $intervalleMois['debut'];
  826.         $endMonth $intervalleMois['fin'];
  827.         
  828.         $invoices  $em->getRepository(Commande::class)
  829.                         ->commandeParDateEtType($boutique->getId(), 'invoice'$dateDebut$dateFin);
  830.         
  831.         $startYear date('Y-01-01');
  832.         $endYear date('Y-12-31');
  833.         $user $this->getUser();
  834.         $userBoutique $em->getRepository(UserBoutique::class)
  835.                         ->findOneBy(
  836.                             array(
  837.                             'user' => $user->getId(),
  838.                             'boutique' => $boutique->getId()
  839.                             )
  840.                         );
  841.         $clients $em->getRepository(Tiers::class)
  842.                     ->findBy(
  843.                         array(
  844.                             'boutique' => $boutique->getId(),
  845.                             'estSupprime' => false
  846.                             
  847.                         ),
  848.                         array(
  849.                             'nom' => 'ASC'
  850.                         )
  851.                     );
  852.         if('POST' == $request->getMethod()){
  853.             $dateDebut $_POST['dateDebut'];
  854.             $dateFin $_POST['dateFin'];
  855.             
  856.             $dateDebut = new \DateTime($dateDebut);
  857.             $dateDebut->setTime(00);
  858.             $dateFin = new \DateTime($dateFin);
  859.             $dateFin->setTime(2359);
  860.             
  861.             $invoices  $em->getRepository(Commande::class)
  862.                         ->commandeParDateEtType($boutique->getId(), 'invoice'$dateDebut$dateFin);
  863.             
  864.             
  865.             return $this->render('admin/invoices_table_content.html.twig', [
  866.                'boutique' => $boutique,
  867.                'invoices' => $invoices
  868.             ]);
  869.             
  870.         }
  871.         
  872.         return $this->render('admin/invoices.html.twig', [
  873.            'boutique' => $boutique,
  874.            'paymentMethods' => $paymentMethods,
  875.            'invoices' => $invoices,
  876.            'dateDebut' => $dateDebut,
  877.            'dateFin' => $dateFin,
  878.            'startMonth' => $startMonth,
  879.            'endMonth' => $endMonth,
  880.            'startYear' => $startYear,
  881.            'endYear' => $endYear,
  882.            'userBoutique' => $userBoutique,
  883.            'clients' => $clients
  884.         ]);
  885.     }
  886.     /**
  887.      * @Route("/{slug}/point-par-client/{id}/{type}/{dateDebut}/{dateFin}", name="admin_point_par_client")
  888.      * @return \Symfony\Component\HttpFoundation\Response
  889.      */
  890.     public function pointParClientActionRequest $request$slug$id 0$type 'invoice'$dateDebut ''$dateFin '')
  891.     {
  892.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  893.            return $this->redirectToRoute('security_login');
  894.         }
  895.         
  896.         $em $this->getDoctrine()
  897.                     ->getManager();
  898.                         
  899.         $boutique $em->getRepository(Boutique::class)
  900.                         ->findOneBySlug($slug);
  901.         
  902.         
  903.         $user $this->getUser();
  904.         $userBoutique $em->getRepository(UserBoutique::class)
  905.                         ->findOneBy(
  906.                             array(
  907.                             'user' => $user->getId(),
  908.                             'boutique' => $boutique->getId()
  909.                             )
  910.                         );
  911.         $client $em->getRepository(Tiers::class)
  912.                     ->findOneById($id);
  913.         $dateDebut = new \DateTime($dateDebut);
  914.         $dateDebut->setTime(00);
  915.         $dateFin = new \DateTime($dateFin);
  916.         $dateFin->setTime(2359);
  917.         $invoices  $em->getRepository(Commande::class)
  918.                         ->commandeParClientDateEtType($boutique->getId(), $type$client->getId(), $dateDebut$dateFin);
  919.     
  920.         return $this->render('admin/point_par_client.html.twig', [
  921.            'boutique' => $boutique,
  922.            
  923.            'invoices' => $invoices,
  924.            'dateDebut' => $dateDebut,
  925.            'dateFin' => $dateFin,
  926.            'userBoutique' => $userBoutique,
  927.         ]);
  928.     }
  929.         /**
  930.      * @Route("/{slug}/imprimer-point-par-client/{id}/{type}/{dateDebut}/{dateFin}", name="admin_imprimer_point_par_client")
  931.      * @return \Symfony\Component\HttpFoundation\Response
  932.      */
  933.     public function imprimerPointParClientActionRequest $request$slug$id 0$type 'invoice'$dateDebut ''$dateFin '')
  934.     {
  935.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  936.            return $this->redirectToRoute('security_login');
  937.         }
  938.         
  939.         $em $this->getDoctrine()
  940.                     ->getManager();
  941.                         
  942.         $boutique $em->getRepository(Boutique::class)
  943.                         ->findOneBySlug($slug);
  944.         
  945.         
  946.         $user $this->getUser();
  947.         $userBoutique $em->getRepository(UserBoutique::class)
  948.                         ->findOneBy(
  949.                             array(
  950.                             'user' => $user->getId(),
  951.                             'boutique' => $boutique->getId()
  952.                             )
  953.                         );
  954.         $client $em->getRepository(Tiers::class)
  955.                     ->findOneById($id);
  956.         $dateDebut = new \DateTime($dateDebut);
  957.         $dateDebut->setTime(00);
  958.         $dateFin = new \DateTime($dateFin);
  959.         $dateFin->setTime(2359);
  960.         $invoices  $em->getRepository(Commande::class)
  961.                         ->commandeParClientDateEtType($boutique->getId(), $type$client->getId(), $dateDebut$dateFin);
  962.         $pdf = new Html2Pdf('P''A4''fr');
  963.         $content $this->renderView('pdf/point_par_client.html.twig', [
  964.                         'boutique' => $boutique,
  965.                         'client' => $client,
  966.                         'invoices' => $invoices,
  967.                         'dateDebut' => $dateDebut,
  968.                         'dateFin' => $dateFin,
  969.                         'userBoutique' => $userBoutique,
  970.                     ]);
  971.         $pdf->writeHTML($content);
  972.         $name time().$boutique->getId().rand(110000).'.pdf';
  973.         $photo = new Photo;
  974.         $lienPhysique $photo->getUploadRootDir().$name;
  975.                 
  976.         $pdf->output($lienPhysique'I');
  977.         return $this->render('pdf/point_par_client.html.twig', [
  978.            'boutique' => $boutique,
  979.            'client' => $client,
  980.            'invoices' => $invoices,
  981.            'dateDebut' => $dateDebut,
  982.            'dateFin' => $dateFin,
  983.            'userBoutique' => $userBoutique,
  984.         ]);
  985.     }
  986.     //Proposals
  987.     /**
  988.      * @Route("/{slug}/detail-commande/{id}", name="admin_detail_commande")
  989.      * @return \Symfony\Component\HttpFoundation\Response
  990.      */
  991.     public function detailCommandeActionRequest $request$slug$id=0)
  992.     {
  993.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  994.            return $this->redirectToRoute('security_login');
  995.         }
  996.         $em $this->getDoctrine()
  997.                     ->getManager();
  998.         $boutique $em->getRepository(Boutique::class)
  999.                         ->findOneBySlug($slug);
  1000.         $produitCommandes $em->getRepository(ProduitCommande::class)
  1001.                                 ->findBy(
  1002.                                     array(
  1003.                                         'commande' => $id
  1004.                                     )
  1005.                                 );
  1006.         return $this->render('admin/detail_commande.html.twig', [
  1007.            'produitCommandes' => $produitCommandes,
  1008.         ]);
  1009.     }
  1010.     /**
  1011.      * @Route("/{slug}/rh/tableau-de-bord", name="admin_rh_tableau_de_bord")
  1012.      * @return \Symfony\Component\HttpFoundation\Response
  1013.      */
  1014.     public function rhTableauDeBordActionRequest $requestBoutique $boutique)
  1015.     {
  1016.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  1017.            return $this->redirectToRoute('security_login');
  1018.         }  
  1019.         $em $this->getDoctrine()
  1020.                     ->getManager();
  1021.         
  1022.         $user $this->getUser();
  1023.         $intervalleDeDate  $this->intervalleSemaine(date('Y-m-d'));
  1024.         $dateDebut = new \DateTime($intervalleDeDate['debut']);
  1025.         $dateDebut->setTime(00);
  1026.         $dateFin = new \DateTime($intervalleDeDate['fin']);
  1027.         $dateFin->setTime(2359);
  1028.         
  1029.         $intervalleMois $this->intervalleMois(date('Y-m-d'));
  1030.         $startMonth $intervalleMois['debut'];
  1031.         $endMonth $intervalleMois['fin'];
  1032.         
  1033.         $startYear date('Y-01-01');
  1034.         $endYear date('Y-12-31');
  1035.         
  1036.         $estParti false;
  1037.         $nombreDEmployeActuel $em->getRepository(UserBoutique::class)
  1038.                     ->nombreDEmployeActuel($boutique->getId(), 'ROLE_EMPLOYE'$estParti);
  1039.         $nombreDEmployeActuel $nombreDEmployeActuel[0]['nombreEmploye'];
  1040.         $estParti true;
  1041.         $nombreDEmployeParti $em->getRepository(UserBoutique::class)
  1042.                     ->nombreDEmployeActuel($boutique->getId(), 'ROLE_EMPLOYE'$estParti);
  1043.         $nombreDEmployeParti $nombreDEmployeParti[0]['nombreEmploye'];
  1044.         $heureDeTravails $em->getRepository(PresenceEmployeUser::class)
  1045.                     ->heureDeTravail($boutique->getId(), $dateDebut$dateFin);
  1046.         
  1047.         $tempsDeTravail 0;
  1048.         $heureSupplementaires 0;
  1049.         
  1050.         if(!empty($heureDeTravails)){
  1051.             $tempsDeTravail $heureDeTravails[0]['tempsDeTravail'];
  1052.             $heureSupplementaires $heureDeTravails[0]['heureSupplementaire'];
  1053.         }
  1054.         
  1055.         
  1056.         $userBoutique $em->getRepository(UserBoutique::class)
  1057.                         ->findOneBy(
  1058.                             array(
  1059.                             'user' => $user->getId(),
  1060.                             'boutique' => $boutique->getId()
  1061.                             )
  1062.                         );
  1063.         
  1064.         
  1065.         return $this->render('admin/rh_tableau_de_bord.html.twig', [
  1066.            'boutique' => $boutique,
  1067.             'nombreDEmployeParti' => $nombreDEmployeParti,
  1068.            'userBoutique' => $userBoutique,
  1069.            'nombreDEmployeActuel' => $nombreDEmployeActuel,
  1070.            'tempsDeTravail' => $tempsDeTravail,
  1071.             'heureSupplementaires' => $heureSupplementaires,
  1072.             'dateDebut' => $dateDebut,
  1073.            'dateFin' => $dateFin,
  1074.            'startMonth' => $startMonth,
  1075.            'endMonth' => $endMonth,
  1076.            'startYear' => $startYear,
  1077.            'endYear' => $endYear,
  1078.         ]);
  1079.     }
  1080.     /**
  1081.      * @Route("/{slug}/rh/employees", name="admin_rh_employees")
  1082.      * @return \Symfony\Component\HttpFoundation\Response
  1083.      */
  1084.     public function employeesActionRequest $requestBoutique $boutique)
  1085.     {
  1086.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  1087.            return $this->redirectToRoute('security_login');
  1088.         }      
  1089.         $em $this->getDoctrine()
  1090.                     ->getManager();
  1091.         
  1092.         $user $this->getUser();
  1093.         
  1094.         
  1095.         $employes $em->getRepository(AppUser::class)
  1096.                     ->findBy(
  1097.                         array(
  1098.                             'boutique' => $boutique->getId()
  1099.                         )
  1100.                     );
  1101.         
  1102.         
  1103.         $userBoutique $em->getRepository(UserBoutique::class)
  1104.                         ->findOneBy(
  1105.                             array(
  1106.                             'user' => $user->getId(),
  1107.                             'boutique' => $boutique->getId()
  1108.                             )
  1109.                         );
  1110.         
  1111.         
  1112.         return $this->render('admin/employes.html.twig', [
  1113.            'boutique' => $boutique,
  1114.             'employes' => $employes,
  1115.            'userBoutique' => $userBoutique
  1116.         ]);
  1117.     }
  1118.     /**
  1119.      * @Route("/{slug}/rh/pointage-journalier", name="admin_pointage_journalier")
  1120.      * @return \Symfony\Component\HttpFoundation\Response
  1121.      */
  1122.     public function pointageJournalierActionRequest $requestBoutique $boutique)
  1123.     {
  1124.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  1125.            return $this->redirectToRoute('security_login');
  1126.         }      
  1127.         $em $this->getDoctrine()
  1128.                     ->getManager();
  1129.         
  1130.         $user $this->getUser();
  1131.         $intervalleDeDate  $this->intervalleSemaine(date('Y-m-d'));
  1132.         $dateDebut = new \DateTime($intervalleDeDate['debut']);
  1133.         
  1134.         $dateFin = new \DateTime($intervalleDeDate['fin']);
  1135.         
  1136.         
  1137.         $intervalleMois $this->intervalleMois(date('Y-m-d'));
  1138.         $startMonth $intervalleMois['debut'];
  1139.         $endMonth $intervalleMois['fin'];
  1140.         
  1141.         $presenceEmployeParDates  $em->getRepository(PresenceEmploye::class)
  1142.                         ->presenceEmployeParDate($boutique->getId(), $dateDebut$dateFin);
  1143.         
  1144.         $startYear date('Y-01-01');
  1145.         $endYear date('Y-12-31');
  1146.         if($request->getMethod() == 'POST'){
  1147.             $dateDebut $request->request->get('dateDebut');
  1148.             $dateDebut = new \DateTime($dateDebut);
  1149.             $dateFin $request->request->get('dateFin');
  1150.             $dateFin = new \DateTime($dateFin);
  1151.             $presenceEmployeParDates  $em->getRepository(PresenceEmploye::class)
  1152.                         ->presenceEmployeParDate($boutique->getId(), $dateDebut$dateFin);
  1153.              return $this->render('admin/contenu_table_pointage_journalier.html.twig', [
  1154.                 
  1155.                 'presenceEmployeParDates' => $presenceEmployeParDates
  1156.                 
  1157.                 ]);
  1158.                     
  1159.         }
  1160.         $userBoutique $em->getRepository(UserBoutique::class)
  1161.                         ->findOneBy(
  1162.                             array(
  1163.                             'user' => $user->getId(),
  1164.                             'boutique' => $boutique->getId()
  1165.                             )
  1166.                         );
  1167.         
  1168.         
  1169.         return $this->render('admin/pointage_journalier.html.twig', [
  1170.            'boutique' => $boutique,
  1171.            'userBoutique' => $userBoutique,
  1172.            'presenceEmployeParDates' => $presenceEmployeParDates,
  1173.             'dateDebut' => $dateDebut,
  1174.            'dateFin' => $dateFin,
  1175.            'startMonth' => $startMonth,
  1176.            'endMonth' => $endMonth,
  1177.            'startYear' => $startYear,
  1178.            'endYear' => $endYear,
  1179.         ]);
  1180.     }
  1181.     /**
  1182.      * @Route("/{slug}/rh/element-pointage-journalier/{idPresence}", name="admin_element_pointage_journalier")
  1183.      * @return \Symfony\Component\HttpFoundation\Response
  1184.      */
  1185.     public function elementPointageJournalierActionRequest $requestBoutique $boutique$idPresence '')
  1186.     {
  1187.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  1188.            return $this->redirectToRoute('security_login');
  1189.         }      
  1190.         $em $this->getDoctrine()
  1191.                     ->getManager();
  1192.         
  1193.         $user $this->getUser();
  1194.         $presenceEmploye  $em->getRepository(PresenceEmploye::class)
  1195.                         ->findOneById($idPresence);
  1196.         
  1197.         $presenceEmployeUsers  $em->getRepository(PresenceEmployeUser::class)
  1198.                         ->findByPresenceEmploye($presenceEmploye);
  1199.         
  1200.         
  1201.         
  1202.         $userBoutique $em->getRepository(UserBoutique::class)
  1203.                         ->findOneBy(
  1204.                             array(
  1205.                             'user' => $user->getId(),
  1206.                             'boutique' => $boutique->getId()
  1207.                             )
  1208.                         );
  1209.         
  1210.         
  1211.         return $this->render('admin/element_pointage_journalier.html.twig', [
  1212.            'boutique' => $boutique,
  1213.            'userBoutique' => $userBoutique,
  1214.            'presenceEmployeUsers' => $presenceEmployeUsers,
  1215.         ]);
  1216.     }
  1217.     /**
  1218.      * @Route("/{slug}/rh/nouveau-pointage-journalier", name="admin_nouveau_pointage_journalier")
  1219.      * @return \Symfony\Component\HttpFoundation\Response
  1220.      */
  1221.     public function nouveauPointageJournalierActionRequest $requestBoutique $boutique)
  1222.     {
  1223.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  1224.            return $this->redirectToRoute('security_login');
  1225.         }      
  1226.         $em $this->getDoctrine()
  1227.                     ->getManager();
  1228.         
  1229.         $user $this->getUser();
  1230.         $intervalleDeDate  $this->intervalleSemaine(date('Y-m-d'));
  1231.         $dateDebut = new \DateTime($intervalleDeDate['debut']);
  1232.         $dateFin = new \DateTime($intervalleDeDate['fin']);
  1233.         
  1234.         $intervalleMois $this->intervalleMois(date('Y-m-d'));
  1235.         $startMonth $intervalleMois['debut'];
  1236.         $endMonth $intervalleMois['fin'];
  1237.         
  1238.         $presenceEmployeParDates  $em->getRepository(PresenceEmploye::class)
  1239.                         ->presenceEmployeParDate($boutique->getId(), $dateDebut$dateFin);
  1240.         
  1241.         $startYear date('Y-01-01');
  1242.         $endYear date('Y-12-31');
  1243.         
  1244.         $employes $em->getRepository(UserBoutique::class)
  1245.                         ->findBy(
  1246.                             array(
  1247.                                 'boutique' => $boutique,
  1248.                                 'estParti' => false
  1249.                             )
  1250.                         );
  1251.         if($request->getMethod() == 'POST'){
  1252.             $laDate $request->request->get('la_date');
  1253.             $laDate = new \DateTime($laDate);
  1254.             $presenceEmploye = new PresenceEmploye;
  1255.             $presenceEmploye->setBoutique($boutique);
  1256.             $presenceEmploye->setLaDate($laDate);
  1257.             $em->persist($presenceEmploye);
  1258.             $em->flush();
  1259.             foreach($employes as $employe){
  1260.                 $estPresent =  (bool)$request->request->get('est_present'.$employe->getUser()->getId());
  1261.                 $heureDebut =  $request->request->get('heure_debut'.$employe->getUser()->getId());
  1262.                 $heureDebut = new \DateTime($heureDebut);
  1263.                 $heureFin =  $request->request->get('heure_fin'.$employe->getUser()->getId());
  1264.                 $heureFin = new \DateTime($heureFin);
  1265.                 $tempsDeTravail =  (float)$request->request->get('temps_de_travail'.$employe->getUser()->getId());
  1266.                 $heureSupplementaire =  $request->request->get('heure_supplementaire'.$employe->getUser()->getId());
  1267.                 
  1268.                 if($estPresent){
  1269.                     $presenceEmployeUser = new PresenceEmployeUser;
  1270.                     $presenceEmployeUser->setUser($employe->getUser());
  1271.                     $presenceEmployeUser->setBoutique($boutique);
  1272.                     $presenceEmployeUser->setPresenceEmploye($presenceEmploye);
  1273.                     $presenceEmployeUser->setEstPresent($estPresent);
  1274.                     $presenceEmployeUser->setDatePresence($laDate);
  1275.                     $presenceEmployeUser->setHeureArrivee($heureDebut);
  1276.                     $presenceEmployeUser->setHeureDepart($heureFin);
  1277.                     $presenceEmployeUser->setHeurePassee($tempsDeTravail);
  1278.                     $presenceEmployeUser->setHeureSupplementaire($heureSupplementaire);
  1279.                     $em->persist($presenceEmployeUser);
  1280.                     $em->flush();
  1281.                     
  1282.                 }
  1283.             }
  1284.         }
  1285.         $userBoutique $em->getRepository(UserBoutique::class)
  1286.                         ->findOneBy(
  1287.                             array(
  1288.                             'user' => $user->getId(),
  1289.                             'boutique' => $boutique->getId()
  1290.                             )
  1291.                         );
  1292.         
  1293.         
  1294.         return $this->render('admin/nouveau_pointage_journalier.html.twig', [
  1295.            'boutique' => $boutique,
  1296.            'userBoutique' => $userBoutique,
  1297.            'employes' => $employes,
  1298.            'presenceEmployeParDates' => $presenceEmployeParDates,
  1299.             'dateDebut' => $dateDebut,
  1300.            'dateFin' => $dateFin,
  1301.            'startMonth' => $startMonth,
  1302.            'endMonth' => $endMonth,
  1303.            'startYear' => $startYear,
  1304.            'endYear' => $endYear,
  1305.         ]);
  1306.     }
  1307.     
  1308.     
  1309.     //Salaire
  1310.     /**
  1311.      * @Route("/{slug}/rh/salaire", name="admin_rh_salaires")
  1312.      * @return \Symfony\Component\HttpFoundation\Response
  1313.      */
  1314.     public function salairesActionRequest $requestBoutique $boutique)
  1315.     {
  1316.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  1317.            return $this->redirectToRoute('security_login');
  1318.         }      
  1319.         $em $this->getDoctrine()
  1320.                     ->getManager();
  1321.         
  1322.         $user $this->getUser();
  1323.         
  1324.         
  1325.         $employes $em->getRepository(UserBoutique::class)
  1326.                     ->findBy(
  1327.                         array(
  1328.                             'boutique' => $boutique->getId(),
  1329.                             'estParti' => false
  1330.                         )
  1331.                     );
  1332.         
  1333.         
  1334.         $userBoutique $em->getRepository(UserBoutique::class)
  1335.                         ->findOneBy(
  1336.                             array(
  1337.                             'user' => $user->getId(),
  1338.                             'boutique' => $boutique->getId()
  1339.                             )
  1340.                         );
  1341.         
  1342.         $mois $this->getMois();
  1343.         $annees $this->getAnnee();
  1344.         $moyenDePaiements = array(
  1345.             'VIREMENT BANCAIRE''CHEQUE''ESPECE''WAVE''ORANGE MONEY''MTN MONEY''MOOV MONEY'
  1346.         );
  1347.         return $this->render('admin/salaries.html.twig', [
  1348.            'boutique' => $boutique,
  1349.             'employes' => $employes,
  1350.            'userBoutique' => $userBoutique,
  1351.            'mois' => $mois,
  1352.            'annees' => $annees,
  1353.            'moyenDePaiements' => $moyenDePaiements
  1354.         ]);
  1355.     }
  1356.     /**
  1357.      * @Route("/{slug}/rh/calculer-salaire", name="admin_rh_calcuer_salaire")
  1358.      * @return \Symfony\Component\HttpFoundation\Response
  1359.      */
  1360.     public function calculerSalaireActionRequest $requestBoutique $boutique)
  1361.     {
  1362.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  1363.            return $this->redirectToRoute('security_login');
  1364.         }      
  1365.         $em $this->getDoctrine()
  1366.                     ->getManager();
  1367.         
  1368.         $user $this->getUser();
  1369.         
  1370.         
  1371.         $rubriques = array();
  1372.         if($request->getMethod() == 'POST'){
  1373.             $idEmploye $request->request->get('idEmploye');
  1374.             $mois = (int)$request->request->get('mois');
  1375.             $annee $request->request->get('annee');
  1376.             $moyenDePaiement $request->request->get('moyenDePaiement');
  1377.             $employe $em->getRepository(UserBoutique::class)
  1378.                     ->findOneBy(
  1379.                         array(
  1380.                             'user' => $idEmploye,
  1381.                             'boutique' => $boutique->getId()
  1382.                         )    
  1383.                     );
  1384.             if($mois 10){
  1385.                 $mois '0'.$mois;
  1386.             }
  1387.             $dateDebutPaiementSalaire $annee.'-'.$mois.'-01';
  1388.             $dateDebutPaiementSalaire = new \DateTime($dateDebutPaiementSalaire);
  1389.             $laDatePaiement $annee.'-'.$mois.'-01';
  1390.             
  1391.             $datePaiementSalaire = new \DateTime($laDatePaiement);
  1392.             $datePaiementSalaire $datePaiementSalaire->modify('last day of this month');
  1393.             $anncienete $employe->getDateDePriseDeFonction()->diff($datePaiementSalaire);
  1394.             $nNombreDeJourDeTravail 30;
  1395.             $nNombreDeJourDeConge 0;
  1396.             
  1397.             //Salaire de base
  1398.             $salaireDeBase $em->getRepository(RubriqueSalaireEmploye::class)
  1399.                                         ->findOneBy(
  1400.                                             array(
  1401.                                                 'boutique' => $boutique->getId(),
  1402.                                                 'user' => $employe->getUser()->getId(),
  1403.                                                 'designation' => 'SALAIRE DE BASE'
  1404.                                             )
  1405.                                         );
  1406.             
  1407.             
  1408.             $rSalaireDeBase $salaireDeBase->getLaBase();
  1409.             
  1410.             //Congé
  1411.             $totaux = array();
  1412.             $conge $em->getRepository(Conge::class)
  1413.                         ->dernierConge($boutique->getId(), $employe->getUser()->getId());
  1414.             $bFautAjouterCongePaye false;
  1415.             if(!empty($conge)){
  1416.                 $dateDebut $conge[0]->getDateDebut();
  1417.                 $dateDiff $dateDebut->diff($datePaiementSalaire);
  1418.                 $nombreDeJour $dateDiff->format("%a");
  1419.                 if($nombreDeJour && $nombreDeJour <= 30 ){
  1420.                     $totaux['dateDebutConge'] = $conge[0]->getDateDebut();
  1421.                     $totaux['dateFinConge'] = $conge[0]->getDateFin();
  1422.                     $nNombreDeJourDeConge =  $conge[0]->getNombreDeJour();
  1423.                     $bFautAjouterCongePaye true;
  1424.                     if($datePaiementSalaire $conge[0]->getDateDebut()){
  1425.                         $nNombreDeJourDeTravail -= $nNombreDeJourDeConge;
  1426.                     }
  1427.                     $rSalaireDeBase = ($salaireDeBase->getLaBase() * $nNombreDeJourDeTravail)/30;
  1428.                 }
  1429.             }
  1430.             $rubrique = array(
  1431.                     'code' => $salaireDeBase->getCode(),
  1432.                     'designation' => $salaireDeBase->getDesignation(),
  1433.                     'nombre' => $nNombreDeJourDeTravail,
  1434.                     'base' => $rSalaireDeBase,
  1435.                     'tauxSalarial' => 0,
  1436.                     'gainSalarial' => $rSalaireDeBase,
  1437.                     'retenueSalarial' => 0,
  1438.                     'tauxPatronal' => 0,
  1439.                     'gainPatronal' => 0,
  1440.                     'retenuePatronal' => 0
  1441.                 
  1442.                 );    
  1443.                 array_push($rubriques$rubrique);
  1444.             
  1445.             
  1446.             $rIndemniteCongePaye 0;
  1447.             if($bFautAjouterCongePaye){
  1448.                 $rIndemniteCongePaye = ($salaireDeBase->getLaBase() * 12 $nNombreDeJourDeConge)/(10 30);
  1449.                 $rubrique = array(
  1450.                     'code' => '100',
  1451.                     'designation' => 'INDEMNITE CONGE PAYE',
  1452.                     'nombre' => $nNombreDeJourDeConge,
  1453.                     'base' => $rIndemniteCongePaye,
  1454.                     'tauxSalarial' => '',
  1455.                     'gainSalarial' => $rIndemniteCongePaye,
  1456.                     'retenueSalarial' => '',
  1457.                     'tauxPatronal' => '',
  1458.                     'gainPatronal' => '',
  1459.                     'retenuePatronal' => ''
  1460.                 
  1461.                 );
  1462.                 array_push($rubriques$rubrique);
  1463.                 
  1464.             }
  1465.             //Sursalaire
  1466.             $surSalaire $em->getRepository(RubriqueSalaireEmploye::class)
  1467.                                         ->findOneBy(
  1468.                                             array(
  1469.                                                 'boutique' => $boutique->getId(),
  1470.                                                 'user' => $employe->getUser()->getId(),
  1471.                                                 'designation' => 'SURSALAIRE'
  1472.                                             )
  1473.                                         );
  1474.             $rubrique = array(
  1475.                     'code' => $surSalaire->getCode(),
  1476.                     'designation' => $surSalaire->getDesignation(),
  1477.                     'nombre' => $nNombreDeJourDeTravail,
  1478.                     'base' => $surSalaire->getLaBase(),
  1479.                     'tauxSalarial' => '',
  1480.                     'gainSalarial' => $surSalaire->getLaBase(),
  1481.                     'retenueSalarial' => '',
  1482.                     'tauxPatronal' => '',
  1483.                     'gainPatronal' => '',
  1484.                     'retenuePatronal' => ''
  1485.                 
  1486.                 );    
  1487.                 array_push($rubriques$rubrique);
  1488.         
  1489.             //
  1490.             // Ancienneté
  1491.             $anciennte 0;
  1492.             $dateAnciennete $datePaiementSalaire->diff($employe->getDateDePriseDeFonction());
  1493.             $anneeAnciennete $dateAnciennete->format('%y');
  1494.             $moisAnciennete $dateAnciennete->format('%m');
  1495.             if(($anneeAnciennete >= && $moisAnciennete >= 1) || $anneeAnciennete 2){
  1496.                 $anciennte $anneeAnciennete;
  1497.             }
  1498.             $rMontantAnciennete = ($anciennte $salaireDeBase->getLaBase())/100;
  1499.             $rubrique = array(
  1500.                         'code' => $salaireDeBase->getCode(),
  1501.                         'designation' => 'ANCIENNETE',
  1502.                         'nombre' => '',
  1503.                         'base' => $salaireDeBase->getLaBase(),
  1504.                         'tauxSalarial' => $anciennte,
  1505.                         'gainSalarial' => $rMontantAnciennete,
  1506.                         'retenueSalarial' => '',
  1507.                         'tauxPatronal' => '',
  1508.                         'gainPatronal' => '',
  1509.                         'retenuePatronal' => ''
  1510.                     
  1511.                     );    
  1512.             array_push($rubriques$rubrique);
  1513.             $userBoutique $em->getRepository(UserBoutique::class)
  1514.                             ->findOneBy(
  1515.                                 array(
  1516.                                 'user' => $user->getId(),
  1517.                                 'boutique' => $boutique->getId()
  1518.                                 )
  1519.                             );
  1520.             $rTotalBrut $rSalaireDeBase +  $surSalaire->getLaBase() + $rMontantAnciennete $rIndemniteCongePaye;
  1521.             $rubrique = array(
  1522.                         'code' => '',
  1523.                         'designation' => 'TOTAL BRUT',
  1524.                         'nombre' => '',
  1525.                         'base' => '',
  1526.                         'tauxSalarial' => '',
  1527.                         'gainSalarial' => $rTotalBrut,
  1528.                         'retenueSalarial' => '',
  1529.                         'tauxPatronal' => '',
  1530.                         'gainPatronal' => '',
  1531.                         'retenuePatronal' => ''
  1532.                     
  1533.                     );    
  1534.             array_push($rubriques$rubrique);
  1535.             $rImpotNet 0;
  1536.             $rTranche1 0;
  1537.             $rTranche2 0;
  1538.             if($rTotalBrut 75000 && $rTotalBrut <= 240000){
  1539.                 $rTranche2 = (($rTotalBrut 75000)*16)/100;
  1540.             }else{
  1541.                 if($rTotalBrut 240000){
  1542.                     $rTranche2 = ((240000 75000)*16)/100;
  1543.                 }
  1544.             }
  1545.             $rTranche3 0;
  1546.             if ($rTotalBrut 240000 && $rTotalBrut <= 800000){
  1547.                 $rTranche3 = (($rTotalBrut 240000)*21)/100;
  1548.             }else{
  1549.                 if($rTotalBrut 800000){
  1550.                     $rTranche3 = ((800000 240000)*21)/100;
  1551.                 }
  1552.             }
  1553.             $rTranche4  0;
  1554.             if($rTotalBrut 800000 && $rTotalBrut <= 2400000){
  1555.                 $rTranche4 = (($rTotalBrut 800000)*24)/100;
  1556.             } else{
  1557.                 if($rTotalBrut 2400000){
  1558.                     $rTranche4 = ((2400000 800000)*24)/100;
  1559.                 }
  1560.             }
  1561.             $rTranche5 0;
  1562.             if($rTotalBrut 2400000 && $rTotalBrut <= 8000000){
  1563.                 $rTranche5 = ((rTotalBrut 2400000)*28)/100;
  1564.             } else{
  1565.                 if($rTotalBrut 8000000){
  1566.                     $rTranche5 = ((8000000 2400000)*28)/100;
  1567.                 }
  1568.             }
  1569.             $rTranche6 0;
  1570.             if($rTotalBrut 8000000){
  1571.                 $rTranche6 = ((rTotalBrut 8000000)*32)/100;
  1572.             }
  1573.             $rImpotBrut $rTranche1 $rTranche2 $rTranche3 $rTranche4 $rTranche5 $rTranche6;
  1574.             
  1575.             $rPartIGR  $employe->getIgr();
  1576.             $rReductionImpt1  0;
  1577.             $rReductionImpt2 0;
  1578.             if ($rPartIGR == 1.5){
  1579.                 $rReductionImpt2 5500;
  1580.             }
  1581.             $rReductionImpt3 0;
  1582.             if($rPartIGR == 2){
  1583.                 $rReductionImpt3 11000;
  1584.             }
  1585.             $rReductionImpt4 0;
  1586.             if($rPartIGR == 2.5){
  1587.                 $rReductionImpt4 16500;
  1588.             }
  1589.             $rReductionImpt5  0;
  1590.             if($rPartIGR == 3){
  1591.                 $rReductionImpt5 22000;
  1592.             }
  1593.             $rReductionImpt6 0;
  1594.             if($rPartIGR == 3.5){
  1595.                 $rReductionImpt6 27500;
  1596.             }
  1597.             $rReductionImpt7 0;
  1598.             if($rPartIGR == 4){
  1599.                 $rReductionImpt7 33000;
  1600.             }
  1601.             $rReductionImpt8 0;
  1602.             if($rPartIGR == 4.5){
  1603.                 $rReductionImpt8 38500;
  1604.             }
  1605.             $rReductionImpt9 0;
  1606.             if($rPartIGR == 5){
  1607.                 $rReductionImpt9 44000;
  1608.             }
  1609.             $rReduction $rReductionImpt1 $rReductionImpt2 $rReductionImpt3 $rReductionImpt4 $rReductionImpt5 $rReductionImpt6 $rReductionImpt7 $rReductionImpt8 $rReductionImpt9;
  1610.             $rImpotNet $rImpotBrut $rReduction;
  1611.             if($rImpotNet <= 0){
  1612.                 $rImpotNet 0;
  1613.             }
  1614.             $rubrique = array(
  1615.                         'code' => '04',
  1616.                         'designation' => 'IMPOT NET',
  1617.                         'nombre' => '',
  1618.                         'base' => '',
  1619.                         'tauxSalarial' => '',
  1620.                         'gainSalarial' => '',
  1621.                         'retenueSalarial' => $rImpotNet,
  1622.                         'tauxPatronal' => '',
  1623.                         'gainPatronal' => '',
  1624.                         'retenuePatronal' => ''
  1625.                     
  1626.                     );    
  1627.             array_push($rubriques$rubrique);
  1628.             
  1629.             $rCNPSSalarie 0;
  1630.             $rCNPSEmployeur 0;
  1631.             $cnps $em->getRepository(RubriqueSalaireEmploye::class)
  1632.                                             ->findOneBy(
  1633.                                                 array(
  1634.                                                     'boutique' => $boutique->getId(),
  1635.                                                     'user' => $employe->getUser()->getId(),
  1636.                                                     'designation' => 'CNPS'
  1637.                                                 )
  1638.                                             );
  1639.         $rCNPSSalarie = ($rTotalBrut 6.3)/100;
  1640.         $rCNPSEmployeur = ($rTotalBrut 7.7)/100;
  1641.         
  1642.         $rubrique = array(
  1643.                         'code' => $cnps->getCode(),
  1644.                         'designation' => $cnps->getDesignation(),
  1645.                         'nombre' => '',
  1646.                         'base' => $rTotalBrut,
  1647.                         'tauxSalarial' => 6.3,
  1648.                         'gainSalarial' => '',
  1649.                         'retenueSalarial' => $rCNPSSalarie,
  1650.                         'tauxPatronal' => 7.7,
  1651.                         'gainPatronal' => '',
  1652.                         'retenuePatronal' => $rCNPSEmployeur
  1653.                     
  1654.                     );    
  1655.         array_push($rubriques$rubrique);
  1656.         $rCMU 1000 1000 $employe->getNombreDEnfant();
  1657.         $rCMUSalarie $rCMU/2;
  1658.         $rCMUEmployeur $rCMU/2;
  1659.         $cmu $em->getRepository(RubriqueSalaireEmploye::class)
  1660.                                             ->findOneBy(
  1661.                                                 array(
  1662.                                                     'boutique' => $boutique->getId(),
  1663.                                                     'user' => $employe->getUser()->getId(),
  1664.                                                     'designation' => 'CMU'
  1665.                                                 )
  1666.                                             );
  1667.         
  1668.         $rubrique = array(
  1669.                         'code' => $cmu->getCode(),
  1670.                         'designation' => $cmu->getDesignation(),
  1671.                         'nombre' => '',
  1672.                         'base' => '',
  1673.                         'tauxSalarial' => '',
  1674.                         'gainSalarial' => '',
  1675.                         'retenueSalarial' => $rCMUSalarie,
  1676.                         'tauxPatronal' => '',
  1677.                         'gainPatronal' => '',
  1678.                         'retenuePatronal' => $rCMUEmployeur
  1679.                     
  1680.                     );
  1681.         
  1682.         array_push($rubriques$rubrique);
  1683.         $rPrestationFamiliale 0;
  1684.         $prestation $em->getRepository(RubriqueSalaireEmploye::class)
  1685.                                             ->findOneBy(
  1686.                                                 array(
  1687.                                                     'boutique' => $boutique->getId(),
  1688.                                                     'user' => $employe->getUser()->getId(),
  1689.                                                     'designation' => 'PRESTATION FAMILIALE'
  1690.                                                 )
  1691.                                             );
  1692.         $rPrestationFamiliale = ($prestation->getLaBase() * $prestation->getTaux())/100;
  1693.         $rubrique = array(
  1694.                         'code' => $prestation->getCode(),
  1695.                         'designation' => $prestation->getDesignation(),
  1696.                         'nombre' => '',
  1697.                         'base' => $prestation->getLaBase(),
  1698.                         'tauxSalarial' => '',
  1699.                         'gainSalarial' => '',
  1700.                         'retenueSalarial' => '',
  1701.                         'tauxPatronal' => $prestation->getTaux(),
  1702.                         'gainPatronal' => '',
  1703.                         'retenuePatronal' => $rPrestationFamiliale
  1704.                     
  1705.                     );
  1706.         
  1707.         array_push($rubriques$rubrique);
  1708.         $rAccidentDeTravail 0;
  1709.         $accident $em->getRepository(RubriqueSalaireEmploye::class)
  1710.                                             ->findOneBy(
  1711.                                                 array(
  1712.                                                     'boutique' => $boutique->getId(),
  1713.                                                     'user' => $employe->getUser()->getId(),
  1714.                                                     'designation' => 'ACCIDENT DE TRAVAIL'
  1715.                                                 )
  1716.                                             );
  1717.     $rAccidentDeTravail = ($accident->getLaBase() * $accident->getTaux())/100;
  1718.     $rubrique = array(
  1719.                         'code' => $accident->getCode(),
  1720.                         'designation' => $accident->getDesignation(),
  1721.                         'nombre' => '',
  1722.                         'base' => $accident->getLaBase(),
  1723.                         'tauxSalarial' => '',
  1724.                         'gainSalarial' => '',
  1725.                         'retenueSalarial' => '',
  1726.                         'tauxPatronal' => $accident->getTaux(),
  1727.                         'gainPatronal' => '',
  1728.                         'retenuePatronal' => $rAccidentDeTravail
  1729.                     
  1730.                     );
  1731.         
  1732.         array_push($rubriques$rubrique);
  1733.         $rTaxeDApprentissage 0;
  1734.         $taxeAppr $em->getRepository(RubriqueSalaireEmploye::class)
  1735.                                             ->findOneBy(
  1736.                                                 array(
  1737.                                                     'boutique' => $boutique->getId(),
  1738.                                                     'user' => $employe->getUser()->getId(),
  1739.                                                     'designation' => 'TAXE D\'APPRENTISSAGE'
  1740.                                                 )
  1741.                                             );
  1742.     $rTaxeDApprentissage = ($rTotalBrut $taxeAppr->getTaux())/100;
  1743.     $rubrique = array(
  1744.                         'code' => $taxeAppr->getCode(),
  1745.                         'designation' => $taxeAppr->getDesignation(),
  1746.                         'nombre' => '',
  1747.                         'base' => $rTotalBrut,
  1748.                         'tauxSalarial' => '',
  1749.                         'gainSalarial' => '',
  1750.                         'retenueSalarial' => '',
  1751.                         'tauxPatronal' => $taxeAppr->getTaux(),
  1752.                         'gainPatronal' => '',
  1753.                         'retenuePatronal' => $rTaxeDApprentissage
  1754.                     
  1755.                     );
  1756.         
  1757.         array_push($rubriques$rubrique);
  1758.         $rFormationContinue 0;
  1759.         $formationC $em->getRepository(RubriqueSalaireEmploye::class)
  1760.                                             ->findOneBy(
  1761.                                                 array(
  1762.                                                     'boutique' => $boutique->getId(),
  1763.                                                     'user' => $employe->getUser()->getId(),
  1764.                                                     'designation' => 'FORMATION CONTINUE'
  1765.                                                 )
  1766.                                             );
  1767.     $rFormationContinue = ($rTotalBrut $formationC->getTaux())/100;
  1768.     $rubrique = array(
  1769.                         'code' => $formationC->getCode(),
  1770.                         'designation' => $formationC->getDesignation(),
  1771.                         'nombre' => '',
  1772.                         'base' => $rTotalBrut,
  1773.                         'tauxSalarial' => '',
  1774.                         'gainSalarial' => '',
  1775.                         'retenueSalarial' => '',
  1776.                         'tauxPatronal' => $formationC->getTaux(),
  1777.                         'gainPatronal' => '',
  1778.                         'retenuePatronal' => $rFormationContinue
  1779.                     
  1780.                     );
  1781.         
  1782.         array_push($rubriques$rubrique);
  1783.         $rCE 0;
  1784.         $ce $em->getRepository(RubriqueSalaireEmploye::class)
  1785.                                             ->findOneBy(
  1786.                                                 array(
  1787.                                                     'boutique' => $boutique->getId(),
  1788.                                                     'user' => $employe->getUser()->getId(),
  1789.                                                     'designation' => 'CE'
  1790.                                                 )
  1791.                                             );
  1792.     $rCE = ($rTotalBrut *2.8 )/100;
  1793.     $rubrique = array(
  1794.                         'code' => $ce->getCode(),
  1795.                         'designation' => $ce->getDesignation(),
  1796.                         'nombre' => '',
  1797.                         'base' => '',
  1798.                         'tauxSalarial' => '',
  1799.                         'gainSalarial' => '',
  1800.                         'retenueSalarial' => '',
  1801.                         'tauxPatronal' => 2.8,
  1802.                         'gainPatronal' => '',
  1803.                         'retenuePatronal' => $rCE
  1804.                     
  1805.                     );
  1806.         
  1807.         array_push($rubriques$rubrique);
  1808.         $rChargeSalariales $rImpotNet $rCNPSSalarie $rCMUSalarie;
  1809.         $rChargeEmployeur $rCNPSEmployeur $rCE $rCMUEmployeur $rPrestationFamiliale $rAccidentDeTravail $rTaxeDApprentissage $rFormationContinue;
  1810.         
  1811.         $rubrique = array(
  1812.                         'code' => '',
  1813.                         'designation' => 'TOTAL COTISATION',
  1814.                         'nombre' => '',
  1815.                         'base' => '',
  1816.                         'tauxSalarial' => '',
  1817.                         'gainSalarial' => '',
  1818.                         'retenueSalarial' => $rChargeSalariales,
  1819.                         'tauxPatronal' => '',
  1820.                         'gainPatronal' => '',
  1821.                         'retenuePatronal' => $rChargeEmployeur
  1822.                     
  1823.                     );
  1824.         
  1825.         array_push($rubriques$rubrique);
  1826.         $primeDeTransport $em->getRepository(RubriqueSalaireEmploye::class)
  1827.                                             ->findOneBy(
  1828.                                                 array(
  1829.                                                     'boutique' => $boutique->getId(),
  1830.                                                     'user' => $employe->getUser()->getId(),
  1831.                                                     'designation' => 'PRIME DE TRANSPORT'
  1832.                                                 )
  1833.                                             );
  1834.     $rubrique = array(
  1835.                         'code' => $primeDeTransport->getCode(),
  1836.                         'designation' => $primeDeTransport->getDesignation(),
  1837.                         'nombre' => '',
  1838.                         'base' => $primeDeTransport->getLaBase(),
  1839.                         'tauxSalarial' => '',
  1840.                         'gainSalarial' => $primeDeTransport->getLaBase(),
  1841.                         'retenueSalarial' => '',
  1842.                         'tauxPatronal' => '',
  1843.                         'gainPatronal' => '',
  1844.                         'retenuePatronal' => ''
  1845.                     
  1846.                     );
  1847.         
  1848.         array_push($rubriques$rubrique);
  1849.     $rPrimeDeSalissure 0;
  1850.     $salissure $em->getRepository(RubriqueSalaireEmploye::class)
  1851.                                             ->findOneBy(
  1852.                                                 array(
  1853.                                                     'boutique' => $boutique->getId(),
  1854.                                                     'user' => $employe->getUser()->getId(),
  1855.                                                     'designation' => 'PRIME DE SALISSURE'
  1856.                                                 )
  1857.                                             );
  1858.     if($salissure != null){
  1859.         $rPrimeDeSalissure $salissure->getLaBase() * 7;
  1860.         if($rPrimeDeSalissure 0){ 
  1861.             
  1862.         $rubrique = array(
  1863.                             'code' => $salissure->getCode(),
  1864.                             'designation' => $salissure->getDesignation(),
  1865.                             'nombre' => 7,
  1866.                             'base' => $salissure->getLaBase(),
  1867.                             'tauxSalarial' => '',
  1868.                             'gainSalarial' => $rPrimeDeSalissure,
  1869.                             'retenueSalarial' => '',
  1870.                             'tauxPatronal' => '',
  1871.                             'gainPatronal' => '',
  1872.                             'retenuePatronal' => ''
  1873.                         
  1874.                         );
  1875.             
  1876.             array_push($rubriques$rubrique);
  1877.         }
  1878.     }
  1879.         $rPrimeDeTenue 0;
  1880.         $tenue $em->getRepository(RubriqueSalaireEmploye::class)
  1881.                                             ->findOneBy(
  1882.                                                 array(
  1883.                                                     'boutique' => $boutique->getId(),
  1884.                                                     'user' => $employe->getUser()->getId(),
  1885.                                                     'designation' => 'PRIME DE TENUE'
  1886.                                                 )
  1887.                                             );
  1888.         if($tenue != null){
  1889.             $rPrimeDeTenue $tenue->getLaBase() * 3;
  1890.             if($rPrimeDeTenue 0){
  1891.                 
  1892.                 $rubrique = array(
  1893.                                 'code' => $tenue->getCode(),
  1894.                                 'designation' => $tenue->getDesignation(),
  1895.                                 'nombre' => 3,
  1896.                                 'base' => $tenue->getLaBase(),
  1897.                                 'tauxSalarial' => '',
  1898.                                 'gainSalarial' => $rPrimeDeTenue,
  1899.                                 'retenueSalarial' => '',
  1900.                                 'tauxPatronal' => '',
  1901.                                 'gainPatronal' => '',
  1902.                                 'retenuePatronal' => ''
  1903.                             
  1904.                             );
  1905.                 
  1906.                 array_push($rubriques$rubrique);
  1907.             }
  1908.         }
  1909.     //Heures supplementaires
  1910.     $heureDeTravail $em->getRepository(PresenceEmployeUser::class)
  1911.                             ->heureDeTravail($boutique$dateDebutPaiementSalaire$datePaiementSalaire);
  1912.     $heuresSupplementaires 0;
  1913.     $heuresTravaillees 0;
  1914.         $rTauxHoraire 470;
  1915.         $rValeureuresSupplementaires 0;
  1916.         if(!empty($heureDeTravail)){
  1917.             $lesHeurs = (float)$heureDeTravail[0]['heureSupplementaire'];
  1918.             $heuresTravaillees $heureDeTravail[0]['tempsDeTravail'];
  1919.             $heuresSupplementaires =  $heureDeTravail[0]['heureSupplementaire'];
  1920.             if( $lesHeurs0){
  1921.                     $rValeureuresSupplementaires $lesHeurs *  $rTauxHoraire * (1.25);
  1922.             
  1923.                     $rubrique = array(
  1924.                                 'code' => '00',
  1925.                                 'designation' => 'HEURES SUPPLEMENTAIRES',
  1926.                                 'nombre' => $lesHeurs,
  1927.                                 'base' => $rTauxHoraire,
  1928.                                 'tauxSalarial' => '',
  1929.                                 'gainSalarial' => $rValeureuresSupplementaires,
  1930.                                 'retenueSalarial' => '',
  1931.                                 'tauxPatronal' => '',
  1932.                                 'gainPatronal' => '',
  1933.                                 'retenuePatronal' => ''
  1934.                             
  1935.                             );
  1936.                 
  1937.                 array_push($rubriques$rubrique);
  1938.             }
  1939.         }
  1940.         $supprimerPaiementSalaireDUnMoisDunEmploye $em->getRepository(RubriqueSalairePaiement::class)
  1941.                                                     ->findBy(
  1942.                                                         array(
  1943.                                                             'boutique' => $boutique->getId(),
  1944.                                                             'user' => $employe->getUser()->getId(),
  1945.                                                             'moisPaiementSalaire' =>$mois,
  1946.                                                             'anneePaiementSalaire' => $annee
  1947.                                                         )
  1948.                                                     );
  1949.         foreach($supprimerPaiementSalaireDUnMoisDunEmploye as $rb){
  1950.             $em->remove($rb);
  1951.         }
  1952.         $em->flush();
  1953.         foreach($rubriques as $rub){
  1954.             $rubriqueSalairePaiement = new RubriqueSalairePaiement;
  1955.             $rubriqueSalairePaiement->setBoutique($boutique);
  1956.             $rubriqueSalairePaiement->setUser($employe->getUser());
  1957.             $rubriqueSalairePaiement->setCode($rub['code']);
  1958.             $rubriqueSalairePaiement->setDesignation($rub['designation']);
  1959.             $rubriqueSalairePaiement->setNombre((float)$rub['nombre']);
  1960.             $rubriqueSalairePaiement->setLaBase((float)$rub['base']);
  1961.             $rubriqueSalairePaiement->setTauxSalarial((float)$rub['tauxSalarial']);
  1962.             $rubriqueSalairePaiement->setGainSalarial((float)$rub['gainSalarial']);
  1963.             $rubriqueSalairePaiement->setRetenueSalarial((float)$rub['retenueSalarial']);
  1964.             $rubriqueSalairePaiement->setTauxPatronal((float)$rub['tauxPatronal']);
  1965.             $rubriqueSalairePaiement->setGainPatronal((float)$rub['gainPatronal']);
  1966.             $rubriqueSalairePaiement->setRetenuePatronal((float)$rub['retenuePatronal']);
  1967.             $rubriqueSalairePaiement->setMoisPaiementSalaire($mois);
  1968.             $rubriqueSalairePaiement->setAnneePaiementSalaire($annee);
  1969.             $rubriqueSalairePaiement->setDatePaiementSalaire(new \DateTime());
  1970.             $em->persist($rubriqueSalairePaiement);
  1971.         }
  1972.         $em->flush();
  1973.         $paiementSalaireASupprimer $em->getRepository(PaiementSalaire::class)
  1974.                                         ->findOneBy(
  1975.                                             array(
  1976.                                                 'boutique' => $boutique->getId(),
  1977.                                                 'user' =>$employe->getUser()->getId(),
  1978.                                                 'moisSalaire' =>$mois,
  1979.                                                 'anneeSalaire' => $annee
  1980.                                             )
  1981.                                         );
  1982.         if($paiementSalaireASupprimer != null){
  1983.             $em->remove($paiementSalaireASupprimer);
  1984.             $em->flush();
  1985.         }
  1986.         $salaireNetAPayer $rTotalBrut $rChargeSalariales $primeDeTransport->getLaBase();
  1987.         $paiementSalaire = new PaiementSalaire;
  1988.         $paiementSalaire->setBoutique($boutique);
  1989.         $paiementSalaire->setUser($employe->getUser());
  1990.         $paiementSalaire->setSalaireBrut($rTotalBrut);
  1991.         $paiementSalaire->setChargesSalariales($rChargeSalariales);
  1992.         $paiementSalaire->setChargesPatronales($rChargeEmployeur);
  1993.         $paiementSalaire->setHeuresTravaillees($heuresTravaillees);
  1994.         $paiementSalaire->setHeuresSupplementaires($heuresSupplementaires);
  1995.         $paiementSalaire->setSalaireNetAPayer($salaireNetAPayer);
  1996.         $paiementSalaire->setDatePaiementFinDuMois($datePaiementSalaire);
  1997.         $paiementSalaire->setMoisSalaire($mois);
  1998.         $paiementSalaire->setAnneeSalaire($annee);
  1999.         $cumulElementPaiementSalaire $em->getRepository(PaiementSalaire::class)
  2000.                                         ->cumulElementPaiementSalaire($boutique->getId(), $employe->getUser()->getId(), new \DateTime());
  2001.         
  2002.         $cumulSalaireBrut $rTotalBrut + (float)$cumulElementPaiementSalaire['0']['cumulSalaireBrut'];
  2003.         $paiementSalaire->setCumulSalaireBrut($cumulSalaireBrut);
  2004.         
  2005.         $cumulChargesSalariales $rChargeSalariales + (float)$cumulElementPaiementSalaire['0']['cumulChargesSalariales'];
  2006.         $paiementSalaire->setCumulChargesSalariales($cumulChargesSalariales);
  2007.         $cumulChargesPatronales $rChargeEmployeur + (float)$cumulElementPaiementSalaire['0']['cumulChargesPatronales'];
  2008.         $paiementSalaire->setCumulChargesPatronales($cumulChargesPatronales);
  2009.         $cumulHeuresTravaillees =  $heuresTravaillees + (float)$cumulElementPaiementSalaire['0']['cumulHeuresTravaillees'];
  2010.         $paiementSalaire->setCumulHeuresTravaillees($cumulHeuresTravaillees);
  2011.         $cumulHeuresSupplementaires $heuresSupplementaires + (float)$cumulElementPaiementSalaire['0']['cumulHeuresSupplementaires'];
  2012.         $paiementSalaire->setCumulHeuresSupplementaires($cumulHeuresSupplementaires);
  2013.         $cumulSalaireNetAPayer $salaireNetAPayer + (float)$cumulElementPaiementSalaire['0']['cumulSalaireNetAPayer'];
  2014.         $paiementSalaire->setCumulSalaireNetAPayer($cumulSalaireNetAPayer);
  2015.         $em->persist($paiementSalaire);
  2016.         $em->flush();
  2017. }
  2018.         return $this->render('admin/calculer_salaire.html.twig', [
  2019.            'boutique' => $boutique,
  2020.            'userBoutique' => $userBoutique
  2021.         ]);
  2022.     }
  2023.     /**
  2024.      * @Route("/{slug}/rh/imprimer-bulletin-salaire/{employe}/{dateDebut}/{dateFin}/{moyenDePaiement}", name="admin_imprimer_bulletin_salaire")
  2025.      * @return \Symfony\Component\HttpFoundation\Response
  2026.      */
  2027.     public function imprimerBulletinSalaireActionRequest $requestBoutique $boutique$employe 0$dateDebut ''$dateFin ''$moyenDePaiement '')
  2028.     {
  2029.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  2030.            return $this->redirectToRoute('security_login');
  2031.         }  
  2032.         $em $this->getDoctrine()
  2033.                     ->getManager();
  2034.         
  2035.         $user $this->getUser();
  2036.         $employe $em->getRepository(UserBoutique::class)
  2037.                     ->findOneBy(
  2038.                         array(
  2039.                             'boutique' => $boutique,
  2040.                             'user' => $employe
  2041.                         )
  2042.                     );
  2043.         $dateDebut = new \DateTime($dateDebut);
  2044.         $dateFin = new \DateTime($dateFin);
  2045.         $userBoutique $em->getRepository(UserBoutique::class)
  2046.                         ->findOneBy(
  2047.                             array(
  2048.                             'user' => $user->getId(),
  2049.                             'boutique' => $boutique->getId()
  2050.                             )
  2051.                         );
  2052.         
  2053.         $rubriques $em->getRepository(RubriqueSalairePaiement::class)
  2054.                                         ->findBy(
  2055.                                             array(
  2056.                                                 'boutique' => $boutique->getId(),
  2057.                                                 'user' => $employe->getUser()->getId(),
  2058.                                                 'moisPaiementSalaire' => $dateDebut->format('m'),
  2059.                                                 'anneePaiementSalaire' => $dateDebut->format('Y')
  2060.                                             )
  2061.                                         );
  2062.         $paiementSalaire $em->getRepository(PaiementSalaire::class)
  2063.                                         ->findOneBy(
  2064.                                             array(
  2065.                                                 'boutique' => $boutique->getId(),
  2066.                                                 'user' =>$employe->getUser()->getId(),
  2067.                                                 'moisSalaire' =>$dateDebut->format('m'),
  2068.                                                 'anneeSalaire' => $dateDebut->format('Y')
  2069.                                             )
  2070.                                         );
  2071.         
  2072.         $pdf = new Html2Pdf('P''A4''fr');
  2073.         $content $this->renderView('pdf/bulletin_de_salaire.html.twig', [
  2074.                         'boutique' => $boutique,
  2075.                         'dateDebut' => $dateDebut,
  2076.                         'dateFin' => $dateFin,
  2077.                         'moyenDePaiement' => $moyenDePaiement,
  2078.                         'rubriques' => $rubriques,
  2079.                         'employe' => $employe,
  2080.                         'paiementSalaire' => $paiementSalaire
  2081.                     ]);
  2082.         $pdf->writeHTML($content);
  2083.         $name $employe->getUser()->getId().time().$boutique->getId().rand(110000).'.pdf';
  2084.         $photo = new Photo;
  2085.         $lienPhysique $photo->getUploadRootDir().$name;
  2086.                 
  2087.         $pdf->output($lienPhysique'I');
  2088.         
  2089.         return $this->render('pdf/bulletin_de_salaire.html.twig', [
  2090.            'boutique' => $boutique,
  2091.             'rubriques' => $rubriques,
  2092.            'userBoutique' => $userBoutique
  2093.         ]);
  2094.     }
  2095.     /**
  2096.      * @Route("/{slug}/rh/rubriques-salaires", name="admin_rubriques_slaires")
  2097.      * @return \Symfony\Component\HttpFoundation\Response
  2098.      */
  2099.     public function rubriquesSalairesActionRequest $requestBoutique $boutique)
  2100.     {
  2101.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  2102.            return $this->redirectToRoute('security_login');
  2103.         }  
  2104.         $em $this->getDoctrine()
  2105.                     ->getManager();
  2106.         
  2107.         $user $this->getUser();
  2108.         
  2109.         
  2110.         $rubriquesSalaires $em->getRepository(RubriqueSalaire::class)
  2111.                     ->findBy(
  2112.                         array(
  2113.                             'boutique' => $boutique->getId(),
  2114.                             
  2115.                         )
  2116.                     );
  2117.         
  2118.         
  2119.         $userBoutique $em->getRepository(UserBoutique::class)
  2120.                         ->findOneBy(
  2121.                             array(
  2122.                             'user' => $user->getId(),
  2123.                             'boutique' => $boutique->getId()
  2124.                             )
  2125.                         );
  2126.         
  2127.         
  2128.         return $this->render('admin/rubriques_slaires.html.twig', [
  2129.            'boutique' => $boutique,
  2130.             'rubriquesSalaires' => $rubriquesSalaires,
  2131.            'userBoutique' => $userBoutique
  2132.         ]);
  2133.     }
  2134.     
  2135.     
  2136.     /**
  2137.      * @Route("/{slug}/rh/editer-rubriques-salaires-employer/{id}", name="admin_editer_rubriques_slaires_employe")
  2138.      * @return \Symfony\Component\HttpFoundation\Response
  2139.      */
  2140.     public function editerRubriquesSalairesEmployeActionRequest $request,  $slug$id)
  2141.     {
  2142.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  2143.            return $this->redirectToRoute('security_login');
  2144.         }      
  2145.         $em $this->getDoctrine()
  2146.                     ->getManager();
  2147.         
  2148.         $user $this->getUser();
  2149.         $boutique $em->getRepository(Boutique::class)
  2150.                     ->findOneBySlug($slug);
  2151.         
  2152.         
  2153.         $rubriquesSalaires $em->getRepository(RubriqueSalaire::class)
  2154.                     ->findBy(
  2155.                         array(
  2156.                             'boutique' => $boutique->getId(),    
  2157.                         )
  2158.                     );
  2159.         
  2160.         $employe $em->getRepository(AppUser::class)
  2161.                     ->findOneById($id);
  2162.         $rubriqueSalaireEmployes $em->getRepository(RubriqueSalaireEmploye::class)
  2163.                                 ->findBy(
  2164.                                     array(
  2165.                                         'boutique' => $boutique,
  2166.                                         'user' => $employe
  2167.                                     )
  2168.                                 );
  2169.         $lesRubriques = array();
  2170.         
  2171.         foreach($rubriquesSalaires as $rubriquesSalaire){
  2172.             $estDeDans false;
  2173.             if(empty($rubriqueSalaireEmployes))
  2174.             {
  2175.                 $r = array(
  2176.                             'code' => $rubriquesSalaire->getCode(),
  2177.                             'designation' =>  $rubriquesSalaire->getDesignation(),
  2178.                             'laBase' => '',
  2179.                             'taux' =>  '',
  2180.                             'part' => $rubriquesSalaire->getPart(),
  2181.                             'gainOuRetenu' => $rubriquesSalaire->getGainOuRetenu(),
  2182.                             'existeDeja' => false
  2183.                         );
  2184.                     array_push($lesRubriques$r);
  2185.             }else{
  2186.                 $taux 0;
  2187.             $laBase 0;
  2188.             $existeDeja false;
  2189.             foreach($rubriqueSalaireEmployes as $rubriqueSalaireEmploye){
  2190.                     
  2191.                 if($rubriqueSalaireEmploye->getCode() == $rubriquesSalaire->getCode()){
  2192.                     //existe_deja permet de savoir si le
  2193.                     $taux $rubriqueSalaireEmploye->getTaux();
  2194.                     $laBase $rubriqueSalaireEmploye->getLaBase();
  2195.                     $existeDeja true;
  2196.                 }else{
  2197.                     $existeDeja false;
  2198.                 }
  2199.             }
  2200.             $r = array(
  2201.                     'code' => $rubriquesSalaire->getCode(),
  2202.                     'designation' => $rubriquesSalaire->getDesignation(),
  2203.                     'laBase' => $laBase,
  2204.                     'taux'  => $taux,
  2205.                     'part' =>$rubriquesSalaire->getPart(),
  2206.                     'gainOuRetenu' => $rubriquesSalaire->getGainOuRetenu(),
  2207.                     'existeDeja' => $existeDeja
  2208.                 );
  2209.             array_push($lesRubriques$r);
  2210.             }
  2211.             
  2212.         }
  2213.         if($request->getMethod() == 'POST'){
  2214.             $i 0;
  2215.             foreach($rubriquesSalaires as $rubriquesSalaire){
  2216.                 $i++;
  2217.                 $laBase = (float)$request->request->get('la_base'.$i);
  2218.                 $taux =  (float)$request->request->get('taux'.$i);
  2219.                 $existeDeja = (bool)$request->request->get('existe_deja'.$i);
  2220.                 $rubrique $em->getRepository(RubriqueSalaireEmploye::class)
  2221.                                 ->findOneBy(
  2222.                                     array(
  2223.                                         'boutique' => $boutique,
  2224.                                         'user' => $employe,
  2225.                                         'code' =>$rubriquesSalaire->getCode()
  2226.                                     )
  2227.                                 );
  2228.                 if($rubrique == null){
  2229.                     $rubrique = new RubriqueSalaireEmploye;
  2230.                     $rubrique->setUser($employe);
  2231.                     $rubrique->setBoutique($boutique);
  2232.                     $rubrique->setCode($rubriquesSalaire->getCode());
  2233.                     $rubrique->setDesignation($rubriquesSalaire->getDesignation());
  2234.                     $rubrique->setPart($rubriquesSalaire->getPart());
  2235.                     $rubrique->setGainOuRetenu($rubriquesSalaire->getGainOuRetenu());
  2236.                 }
  2237.                 
  2238.                 $rubrique->setLaBase($laBase);
  2239.                 $rubrique->setTaux($taux);
  2240.                 $em->persist($rubrique);
  2241.                 $em->flush();
  2242.                 
  2243.                 
  2244.                 
  2245.             }
  2246.             return $this->redirectToRoute('admin_rh_salaires', array('slug' => $boutique->getSlug()));
  2247.         }
  2248.         $userBoutique $em->getRepository(UserBoutique::class)
  2249.                         ->findOneBy(
  2250.                             array(
  2251.                             'user' => $user->getId(),
  2252.                             'boutique' => $boutique->getId()
  2253.                             )
  2254.                         );
  2255.         
  2256.         
  2257.         return $this->render('admin/editer_rubriques_slaires_employe.html.twig', [
  2258.            'boutique' => $boutique,
  2259.             'rubriquesSalaires' => $rubriquesSalaires,
  2260.            'userBoutique' => $userBoutique,
  2261.            'employe' => $employe,
  2262.            'rubriqueSalaireEmployes' => $rubriqueSalaireEmployes,
  2263.            'lesRubriques' => $lesRubriques
  2264.         ]);
  2265.     }
  2266.     /**
  2267.      * @Route("/{slug}/rh/rubriques-salaires/nouveau", name="admin_nouvelle_rubrique_slaire")
  2268.      * @return \Symfony\Component\HttpFoundation\Response
  2269.      */
  2270.     public function nouvelleRubriqueSalaireActionRequest $requestBoutique $boutique)
  2271.     {
  2272.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  2273.            return $this->redirectToRoute('security_login');
  2274.         }      
  2275.         $em $this->getDoctrine()
  2276.                     ->getManager();
  2277.         
  2278.         $user $this->getUser();
  2279.         
  2280.         $rubriquesSalaire = new RubriqueSalaire;
  2281.         $form $this->createForm(RubriqueSalaireType::class, $rubriquesSalaire);
  2282.         
  2283.         if($request->getMethod() == 'POST'){
  2284.             $form->handleRequest($request);
  2285.             if($form->isValid()){
  2286.                    
  2287.                 $rubriquesSalaire->setBoutique($boutique);
  2288.                    
  2289.                 $em->persist($rubriquesSalaire);
  2290.                 $em->flush();
  2291.                 
  2292.                 $ok_soumission =" Votre message a été pris en compte";
  2293.                     
  2294.                 
  2295.                 $rubriquesSalaire = new RubriqueSalaire;
  2296.                 $form $this->createForm(RubriqueSalaireType::class, $rubriquesSalaire);
  2297.                     
  2298.                 } else {
  2299.                     $error =" Veillez corrigez vos erreurs";
  2300.                 }
  2301.                 
  2302.         
  2303.         }
  2304.         $userBoutique $em->getRepository(UserBoutique::class)
  2305.                         ->findOneBy(
  2306.                             array(
  2307.                             'user' => $user->getId(),
  2308.                             'boutique' => $boutique->getId()
  2309.                             )
  2310.                         );
  2311.         
  2312.         
  2313.         return $this->render('admin/nouvelle_rubrique_salaire.html.twig', [
  2314.            'boutique' => $boutique,
  2315.             
  2316.            'userBoutique' => $userBoutique,
  2317.            'form' =>$form->createView()
  2318.         ]);
  2319.     }
  2320.     
  2321.     /**
  2322.      * @Route("/{slug}/rh/rubriques-salaires/modifier/{id}", name="admin_modifier_rubrique_salaire")
  2323.      * @return \Symfony\Component\HttpFoundation\Response
  2324.      */
  2325.     public function modifierRubriqueSalaireActionRequest $request$slug$id)
  2326.     {
  2327.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  2328.            return $this->redirectToRoute('security_login');
  2329.         }      
  2330.         $em $this->getDoctrine()
  2331.                     ->getManager();
  2332.         
  2333.         $user $this->getUser();
  2334.         $boutique $em->getRepository(Boutique::class)
  2335.                                 ->findOneBySlug($slug);
  2336.         
  2337.         $rubriqueSalaire $em->getRepository(RubriqueSalaire::class)
  2338.                                 ->findOneById($id);
  2339.         $form $this->createForm(RubriqueSalaireEditType::class, $rubriqueSalaire);
  2340.         
  2341.         if($request->getMethod() == 'POST'){
  2342.             $form->handleRequest($request);
  2343.             if($form->isValid()){
  2344.     
  2345.                 $em->flush();
  2346.                 
  2347.                 $ok_soumission =" Votre message a été pris en compte";
  2348.                     
  2349.                 } else {
  2350.                     $error =" Veillez corrigez vos erreurs";
  2351.                 }
  2352.                 
  2353.         
  2354.         }
  2355.         $userBoutique $em->getRepository(UserBoutique::class)
  2356.                         ->findOneBy(
  2357.                             array(
  2358.                             'user' => $user->getId(),
  2359.                             'boutique' => $boutique->getId()
  2360.                             )
  2361.                         );
  2362.         
  2363.         
  2364.         return $this->render('admin/modifier_rubrique_salaire.html.twig', [
  2365.            'boutique' => $boutique,
  2366.            'userBoutique' => $userBoutique,
  2367.            'form' =>$form->createView()
  2368.         ]);
  2369.     }
  2370.     /**
  2371.      * @Route("/{slug}/rh/rubriques-salaires/supprimer/{id}", name="admin_supprimer_rubrique_salaire")
  2372.      * @return \Symfony\Component\HttpFoundation\Response
  2373.      */
  2374.     public function supprimerRubriqueSalaireActionRequest $request,  $slug$id)
  2375.     {
  2376.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  2377.            return $this->redirectToRoute('security_login');
  2378.         }      
  2379.         $em $this->getDoctrine()
  2380.                     ->getManager();
  2381.         
  2382.         $user $this->getUser();
  2383.         $boutique $em->getRepository(Boutique::class)
  2384.                                 ->findOneBySlug($slug);
  2385.         
  2386.         $rubriquesSalaire $em->getRepository(RubriqueSalaire::class)
  2387.                                 ->findOneById($id);
  2388.     
  2389.         if(null !== $rubriquesSalaire){
  2390.             $em->remove($rubriquesSalaire);
  2391.             $em->flush();
  2392.         }
  2393.         
  2394.         return $this->redirectToRoute('admin_rubriques_slaires', array('slug'=>$boutique->getSlug()));
  2395.     }
  2396.     /**
  2397.      * @Route("/{slug}/rh/conges", name="admin_conges")
  2398.      * @return \Symfony\Component\HttpFoundation\Response
  2399.      */
  2400.     public function congesActionRequest $requestBoutique $boutique)
  2401.     {
  2402.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  2403.            return $this->redirectToRoute('security_login');
  2404.         }  
  2405.         $em $this->getDoctrine()
  2406.                     ->getManager();
  2407.         
  2408.         $user $this->getUser();
  2409.     
  2410.         $userBoutiques $em->getRepository(UserBoutique::class)
  2411.                             ->findBy(
  2412.                                 array(
  2413.                                     'boutique' => $boutique->getId(),
  2414.                                     'estParti' => false
  2415.                                 )
  2416.                             );
  2417.         
  2418.         $userBoutique $em->getRepository(UserBoutique::class)
  2419.                         ->findOneBy(
  2420.                             array(
  2421.                             'user' => $user->getId(),
  2422.                             'boutique' => $boutique->getId()
  2423.                             )
  2424.                         );
  2425.         
  2426.         $employes = array();
  2427.         foreach($userBoutiques as $ub){
  2428.             $e = array(
  2429.                 'id' =>$ub->getUser()->getId(),
  2430.                 'name' =>$ub->getUser()->getNom().' '.$ub->getUser()->getPrenom(),
  2431.                 'department' => $ub->getDepartementEmploi()
  2432.             );
  2433.             array_push($employes$e);
  2434.         }
  2435.         $employes json_encode($employes);
  2436.         $conges $em->getRepository(Conge::class)
  2437.                     ->findBy(
  2438.                         array(
  2439.                         'boutique' => $boutique->getId()
  2440.                         )
  2441.                     );
  2442.         $cgs = array();
  2443.         foreach($conges as $conge){
  2444.             $cg = array(
  2445.                 'id' => $conge->getId(),
  2446.                 'employeeId' =>$conge->getUser()->getId(),
  2447.                 'employeeName' => $conge->getUser()->getNom(). ' '.$conge->getUser()->getPrenom(),
  2448.                 'type' => $conge->getTypeConge(),
  2449.                 'startDate' => $conge->getDateDebut()->format('Y-m-d'),
  2450.                 'endDate' => $conge->getDateFin()->format('Y-m-d'),
  2451.                 'notes' => $conge->getNotes()
  2452.             );
  2453.             array_push($cgs$cg);
  2454.         }
  2455.         return $this->render('admin/conges.html.twig', [
  2456.            'boutique' => $boutique,
  2457.            'userBoutiques' => $userBoutiques,
  2458.            'userBoutique' => $userBoutique,
  2459.            'employes' => $employes,
  2460.            'conges' => json_encode($cgs)
  2461.         ]);
  2462.         
  2463.     }    
  2464.     /**
  2465.      * @Route("/{slug}/rh/nouveau-conge", name="admin_rh_nouveau_conge")
  2466.      * @return \Symfony\Component\HttpFoundation\Response
  2467.      */
  2468.     public function nouveauCongeActionRequest $request,  $slug)
  2469.     {
  2470.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  2471.            return $this->redirectToRoute('security_login');
  2472.         }
  2473.         $em $this->getDoctrine()
  2474.                     ->getManager();
  2475.         $boutique $em->getRepository(Boutique::class)
  2476.                         ->findOneBySlug($slug);
  2477.         $user $this->getUser();
  2478.         
  2479.         if($request->getMethod() == 'POST'){
  2480.             $employe $request->request->get('employe');
  2481.             $employe $em->getRepository(UserBoutique::class)
  2482.                     ->findOneBy(
  2483.                         array(
  2484.                             'boutique' => $boutique->getId(),
  2485.                             'user'=>$employe
  2486.                         )
  2487.                     );
  2488.             $typeConge $request->request->get('typeConge');
  2489.             $notes $request->request->get('notes');
  2490.             $dateDebut $request->request->get('dateDebut');
  2491.             $dateDebut = new \DateTime($dateDebut);
  2492.         
  2493.             $dateFin $request->request->get('dateFin');
  2494.                 
  2495.             $dateFin = new \DateTime($dateFin);
  2496.             $conge = new Conge;
  2497.             $conge->setDateDebut($dateDebut);
  2498.             $conge->setDateFin($dateFin);
  2499.             $conge->setTypeConge($typeConge);
  2500.             $conge->setNotes($notes);
  2501.             $conge->setUser($employe->getUser());
  2502.             $conge->setBoutique($boutique);
  2503.             
  2504.             $conge->setAnnee($dateDebut->format('Y'));
  2505.             $conge->setMois($dateDebut->format('m'));
  2506.             $nombreDeJour $dateFin->diff($dateDebut)->format("%a");
  2507.             $conge->setNombreDeJour($nombreDeJour);
  2508.             $em->persist($conge);
  2509.             $em->flush();
  2510.             return $this->redirectToRoute('admin_conges', array('slug'=>$boutique->getSlug()));
  2511.         }
  2512.         $userBoutique $em->getRepository(UserBoutique::class)
  2513.                         ->findOneBy(
  2514.                             array(
  2515.                             'user' => $user->getId(),
  2516.                             'boutique' => $boutique->getId()
  2517.                             )
  2518.                         );
  2519.         
  2520.         
  2521.         return $this->render('admin/nouveau_conge.html.twig', [
  2522.            'boutique' => $boutique,
  2523.            'userBoutique' => $userBoutique,
  2524.         ]);
  2525.     }
  2526.     /**
  2527.      * @Route("/{slug}/rh/nouvel-employe", name="admin.nouvel_employe")
  2528.      * @return \Symfony\Component\HttpFoundation\Response
  2529.     */
  2530.     public function nouvelEmployeAction(Request $requestBoutique $boutique)
  2531.     {
  2532.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  2533.            return $this->redirectToRoute('security_login');
  2534.         }
  2535.         $em $this->getDoctrine()
  2536.                     ->getManager();
  2537.         $employe = new AppUser;
  2538.         $form $this->createForm(EmployeType::class, $employe);
  2539.         $error '';
  2540.         
  2541.         $ok_submission '';
  2542.         if('POST' == $request->getMethod()){
  2543.             $form->handleRequest($request);
  2544.             if($form->isValid()){
  2545.                 $employe->setUsername($form->getData()->getNom().$form->getData()->getPrenom().time());
  2546.                 $roles $employe->getRoles();
  2547.                 $roles[] = 'ROLE_EMPLOYE';
  2548.                 $employe->setRoles($roles);
  2549.                 $employe->setEnabled(true);
  2550.                 $employe->setBoutique($boutique);
  2551.                 $email $form->getData()->getEmail();
  2552.                 if($email == ''){
  2553.                     $employe->setEmail($form->getData()->getNom().$form->getData()->getPrenom().time());
  2554.                 }
  2555.                 //$hashedPassword = $passwordHasher->hashPassword($planteur, $form->getData()->getNom().$form->getData()->getPrenom());
  2556.                 $employe->setPassword('A changer');
  2557.                 $em->persist($employe);
  2558.                 $em->flush();
  2559.                 
  2560.                 $matricule $request->request->get('matricule');
  2561.                 $salaire = (float)$request->request->get('salaire');
  2562.                 $laFonction $request->request->get('la_fonction');
  2563.                 $categorie $request->request->get('categorie');
  2564.                 $departement $request->request->get('departement');
  2565.                 $dateDePriseDeFonction $request->request->get('date_de_prise_de_fonction');
  2566.                 $dateDePriseDeFonction = new \DateTime($dateDePriseDeFonction);
  2567.                 $nombreDEnfant =  (float)$request->request->get('nombre_d_enfant');
  2568.                 $igr =  (float)$request->request->get('igr');
  2569.                 
  2570.                 $employeBoutique = new UserBoutique;
  2571.                 $employeBoutique->setUser($employe);
  2572.                 $employeBoutique->setBoutique($boutique);
  2573.                 $employeBoutique->setMatricule($matricule);
  2574.                 $employeBoutique->setSalaire($salaire);
  2575.                 $employeBoutique->setLaFonction($laFonction);
  2576.                 $employeBoutique->setCategorieEmploi($categorie);
  2577.                 $employeBoutique->setDepartementEmploi($departement);
  2578.                 $employeBoutique->setDateDePriseDeFonction($dateDePriseDeFonction);
  2579.                 $employeBoutique->setNombreDEnfant($nombreDEnfant);
  2580.                 $employeBoutique->setIgr($igr);
  2581.                 $employeBoutique->setRole('ROLE_EMPLOYE');
  2582.                 $em->persist($employeBoutique);
  2583.                 $em->flush();
  2584.                 $employe = new AppUser;
  2585.                 $form $this->createForm(EmployeType::class, $employe);
  2586.                 $ok_submission 'Enregistrement effectué';
  2587.             } else{
  2588.                 $error 'error';
  2589.             }
  2590.         }
  2591.         
  2592.         $userBoutique $em->getRepository(UserBoutique::class)
  2593.                             ->findOneBy(
  2594.                                 array(
  2595.                                     'user' => $this->getUser(),
  2596.                                     'boutique' => $boutique
  2597.                                 )
  2598.                             );
  2599.         
  2600.         
  2601.         return $this->render('admin/nouvel_employe.html.twig', [ 
  2602.             'boutique' => $boutique,
  2603.             'form' => $form->createView(),
  2604.             'ok_submission' => $ok_submission,
  2605.             'error' => $error,
  2606.             'userBoutique' => $userBoutique
  2607.         ]);    
  2608.     } 
  2609.     
  2610.     /**
  2611.      * @Route("/{slug}/rh/modifier-employe/{id}", name="admin.modifier_employe")
  2612.      * @return \Symfony\Component\HttpFoundation\Response
  2613.     */
  2614.     public function modifierEmployeAction(Request $request,  $slug$id)
  2615.     {
  2616.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  2617.            return $this->redirectToRoute('security_login');
  2618.         }
  2619.         $em $this->getDoctrine()
  2620.                     ->getManager();
  2621.         
  2622.         $boutique $em->getRepository(Boutique::class)
  2623.                         ->findOneBySlug($slug);
  2624.         $employe $em->getRepository(AppUser::class)
  2625.                     ->findOneById($id);
  2626.         
  2627.         $form $this->createForm(EmployeEditType::class, $employe);
  2628.         $error '';
  2629.         
  2630.         $ok_submission '';
  2631.         if('POST' == $request->getMethod()){
  2632.             $form->handleRequest($request);
  2633.             if($form->isValid()){
  2634.                 $em->flush();
  2635.                 $ok_submission 'Enregistrement effectué';
  2636.             } else{
  2637.                 $error 'error';
  2638.             }
  2639.         }
  2640.         
  2641.         $userBoutique $em->getRepository(UserBoutique::class)
  2642.                             ->findOneBy(
  2643.                                 array(
  2644.                                     'user' => $this->getUser(),
  2645.                                     'boutique' => $boutique
  2646.                                 )
  2647.                             );
  2648.         
  2649.         
  2650.         return $this->render('admin/modifier_employe.html.twig', [ 
  2651.             'boutique' => $boutique,
  2652.             'form' => $form->createView(),
  2653.             'ok_submission' => $ok_submission,
  2654.             'error' => $error,
  2655.             'userBoutique' => $userBoutique,
  2656.             'employe' => $employe
  2657.         ]);    
  2658.     } 
  2659.     
  2660.     
  2661.     /**
  2662.      * @Route("/{slug}/comptes", name="admin_comptabilite_comptes")
  2663.      * @return \Symfony\Component\HttpFoundation\Response
  2664.      */
  2665.     public function comptesAction(Request $request,  $slug)
  2666.     {
  2667.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  2668.            return $this->redirectToRoute('security_login');
  2669.         }      
  2670.         $em $this->getDoctrine()
  2671.                     ->getManager();
  2672.         $user $this->getUser();
  2673.         $boutique $em->getRepository(Boutique::class)
  2674.                     ->findOneBySlug($slug);
  2675.         $userBoutique $em->getRepository(UserBoutique::class)
  2676.                             ->findOneBy(
  2677.                                 array(
  2678.                                     'user' => $this->getUser(),
  2679.                                     'boutique' => $boutique
  2680.                                 )
  2681.                             );
  2682.         $comptes $em->getRepository(Compte::class)
  2683.                     ->findBy(
  2684.                         array(
  2685.                         'boutique' => $boutique->getId()
  2686.                         )
  2687.                         
  2688.                     );
  2689.         $intervalleDeDate  $this->intervalleSemaine(date('Y-m-d'));
  2690.         $dateDebut = new \DateTime($intervalleDeDate['debut']);
  2691.         $dateDebut->setTime(00);
  2692.         $dateFin = new \DateTime($intervalleDeDate['fin']);
  2693.         $dateFin->setTime(2359);
  2694.         
  2695.         
  2696.         $intervalleMois $this->intervalleMois(date('Y-m-d'));
  2697.         $startMonth $intervalleMois['debut'];
  2698.         $endMonth $intervalleMois['fin'];
  2699.         
  2700.         $invoices  $em->getRepository(Commande::class)
  2701.                         ->commandeParDateEtType($boutique->getId(), 'invoice'$dateDebut$dateFin);
  2702.         
  2703.         $startYear date('Y-01-01');
  2704.         $endYear date('Y-12-31');
  2705.         $user $this->getUser();
  2706.         return $this->render('admin/comptes.html.twig', [ 
  2707.             'boutique' => $boutique,
  2708.             'userBoutique' => $userBoutique,
  2709.             'comptes' => $comptes,
  2710.            'dateDebut' => $dateDebut,
  2711.            'dateFin' => $dateFin,
  2712.            'startMonth' => $startMonth,
  2713.            'endMonth' => $endMonth,
  2714.            'startYear' => $startYear,
  2715.            'endYear' => $endYear,
  2716.         ]);    
  2717.     }
  2718.     /**
  2719.      * @Route("/{slug}/ecritures-comptable-d-un-compte", name="admin_ecritures_comptale_d_un_compte")
  2720.      * @return \Symfony\Component\HttpFoundation\Response
  2721.      */
  2722.     public function ecrituresComptableDUnCompteAction(Request $request,  $slug)
  2723.     {
  2724.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  2725.            return $this->redirectToRoute('security_login');
  2726.         }      
  2727.         $em $this->getDoctrine()
  2728.                     ->getManager();
  2729.         $user $this->getUser();
  2730.         $boutique $em->getRepository(Boutique::class)
  2731.                     ->findOneBySlug($slug);
  2732.         $userBoutique $em->getRepository(UserBoutique::class)
  2733.                             ->findOneBy(
  2734.                                 array(
  2735.                                     'user' => $this->getUser(),
  2736.                                     'boutique' => $boutique
  2737.                                 )
  2738.                             );
  2739.         if($request->getMethod() == 'POST'){
  2740.             $compte $request->request->get('compte');
  2741.             $dateDebut $request->request->get('dateDebut');
  2742.             $dateDebut = new \DateTime($dateDebut);
  2743.             $dateFin $request->request->get('dateFin');
  2744.             $dateFin = new \DateTime($dateFin);
  2745.             $ecrituresComptables $em->getRepository(EcritureComptable::class)
  2746.                     ->ecrituresComptableParDate($boutique$dateDebut$dateFin$compte);
  2747.         }
  2748.         return $this->render('admin/ecritures_comptale_d_un_compte.html.twig', [ 
  2749.             'boutique' => $boutique,
  2750.             'userBoutique' => $userBoutique,
  2751.             'ecrituresComptables' => $ecrituresComptables
  2752.         ]);    
  2753.     }
  2754.     /**
  2755.      * @Route("/{slug}/nouveau-compte", name="admin_nouveau_compte")
  2756.      * @return \Symfony\Component\HttpFoundation\Response
  2757.      */
  2758.     public function nouveauCompteAction(Request $requestBoutique $boutique)
  2759.     {
  2760.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  2761.            return $this->redirectToRoute('security_login');
  2762.         }
  2763.         $em $this->getDoctrine()
  2764.                     ->getManager();
  2765.         
  2766.         $compte = new Compte;
  2767.         
  2768.         $user $this->getUser();
  2769.         $userBoutique $em->getRepository(UserBoutique::class)
  2770.                         ->findOneBy(
  2771.                             array(
  2772.                             'user' => $user->getId(),
  2773.                             'boutique' => $boutique->getId()
  2774.                             )
  2775.                         );
  2776.         $form $this->createForm(CompteType::class, $compte, array('boutique' => $boutique->getId()));
  2777.         
  2778.         $ok_soumission '';
  2779.         $error '';
  2780.         
  2781.         if($request->getMethod() == 'POST'){
  2782.             
  2783.                $form->handleRequest($request);
  2784.                if($form->isValid()){
  2785.                    $compte->setBoutique($boutique);
  2786.                   $em->persist($compte);
  2787.                   $em->flush();
  2788.         
  2789.                 $ok_soumission =" Votre message a été pris en compte";
  2790.                     
  2791.                 unset($compte);
  2792.                 unset($form);
  2793.                 $compte = new Compte;
  2794.                 
  2795.                 $form $this->createForm(CompteType::class, $compte, array('boutique' => $boutique->getId()));
  2796.                     
  2797.                 } else {
  2798.                     $error =" Veillez corrigez vos erreurs";
  2799.                 }
  2800.         }
  2801.     
  2802.         return $this->render('admin/nouveau_compte.html.twig', [
  2803.            'boutique' => $boutique,
  2804.            'form' => $form->createView(),
  2805.            'userBoutique' => $userBoutique
  2806.         ]);
  2807.     }
  2808.     /**
  2809.      * @Route("/{slug}/journaux", name="admin_comptabilite_journaux")
  2810.      * @return \Symfony\Component\HttpFoundation\Response
  2811.      */
  2812.     public function journauxAction(Request $requestBoutique $boutique)
  2813.     {
  2814.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  2815.            return $this->redirectToRoute('security_login');
  2816.         }
  2817.         $em $this->getDoctrine()
  2818.                     ->getManager();
  2819.         
  2820.         $compte = new Compte;
  2821.         
  2822.         $user $this->getUser();
  2823.         $userBoutique $em->getRepository(UserBoutique::class)
  2824.                         ->findOneBy(
  2825.                             array(
  2826.                             'user' => $user->getId(),
  2827.                             'boutique' => $boutique->getId()
  2828.                             )
  2829.                         );
  2830.         
  2831.         $journaux $em->getRepository(JournalComptabilite::class)
  2832.                         ->findBy(
  2833.                             array(
  2834.                                 'boutique' => $boutique->getId(),
  2835.                                 'estSupprime' => false
  2836.                             ),
  2837.                             array(
  2838.                                 'nom' => 'ASC'
  2839.                             )
  2840.                         );
  2841.     
  2842.         return $this->render('admin/journaux.html.twig', [
  2843.            'boutique' => $boutique,
  2844.            'journaux' => $journaux,
  2845.            'userBoutique' => $userBoutique
  2846.         ]);
  2847.     }
  2848.     /**
  2849.      * @Route("/{slug}/nouveau-journal", name="admin_comptabilite_nouveau_journal")
  2850.      * @return \Symfony\Component\HttpFoundation\Response
  2851.      */
  2852.     public function nouveauJournalAction(Request $requestBoutique $boutique)
  2853.     {
  2854.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  2855.            return $this->redirectToRoute('security_login');
  2856.         }
  2857.         $em $this->getDoctrine()
  2858.                     ->getManager();
  2859.         
  2860.         $journal = new JournalComptabilite;
  2861.         
  2862.         $user $this->getUser();
  2863.         $userBoutique $em->getRepository(UserBoutique::class)
  2864.                         ->findOneBy(
  2865.                             array(
  2866.                             'user' => $user->getId(),
  2867.                             'boutique' => $boutique->getId()
  2868.                             )
  2869.                         );
  2870.         $form $this->createForm(JournalComptabiliteType::class, $journal);
  2871.         
  2872.         $ok_soumission '';
  2873.         $error '';
  2874.         
  2875.         if($request->getMethod() == 'POST'){
  2876.             
  2877.                $form->handleRequest($request);
  2878.                if($form->isValid()){
  2879.                    $journal->setBoutique($boutique);
  2880.                   $em->persist($journal);
  2881.                   $em->flush();
  2882.         
  2883.                 $ok_soumission =" Votre message a été pris en compte";
  2884.                     
  2885.                 unset($journal);
  2886.                 unset($form);
  2887.                 $journal = new JournalComptabilite;
  2888.                 
  2889.                 $form $this->createForm(JournalComptabiliteType::class, $journal);
  2890.                     
  2891.                 } else {
  2892.                     $error =" Veillez corrigez vos erreurs";
  2893.                 }
  2894.         }
  2895.     
  2896.         return $this->render('admin/nouveau_journal.html.twig', [
  2897.            'boutique' => $boutique,
  2898.            'form' => $form->createView(),
  2899.            'userBoutique' => $userBoutique
  2900.         ]);
  2901.     }
  2902.     /**
  2903.      * @Route("/{slug}/modifier-journal/{id}", name="admin_comptabilite_modifier_journal")
  2904.      * @return \Symfony\Component\HttpFoundation\Response
  2905.      */
  2906.     public function modifierJournalAction(Request $request,  $slug$id)
  2907.     {
  2908.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  2909.            return $this->redirectToRoute('security_login');
  2910.         }
  2911.         $em $this->getDoctrine()
  2912.                     ->getManager();
  2913.         
  2914.         $journal $em->getRepository(JournalComptabilite::class)
  2915.                     ->findOneById($id);
  2916.         $boutique $em->getRepository(Boutique::class)
  2917.                     ->findOneBySlug($slug);
  2918.         
  2919.         $user $this->getUser();
  2920.         $userBoutique $em->getRepository(UserBoutique::class)
  2921.                         ->findOneBy(
  2922.                             array(
  2923.                             'user' => $user->getId(),
  2924.                             'boutique' => $boutique->getId()
  2925.                             )
  2926.                         );
  2927.         $form $this->createForm(JournalComptabiliteEditType::class, $journal);
  2928.         
  2929.         $ok_soumission '';
  2930.         $error '';
  2931.         
  2932.         if($request->getMethod() == 'POST'){
  2933.             
  2934.                $form->handleRequest($request);
  2935.                if($form->isValid()){
  2936.                   $em->flush();
  2937.         
  2938.                 $ok_soumission =" Votre message a été pris en compte";
  2939.                     
  2940.                     
  2941.                 } else {
  2942.                     $error =" Veillez corrigez vos erreurs";
  2943.                 }
  2944.         }
  2945.     
  2946.         return $this->render('admin/modifier_journal.html.twig', [
  2947.            'boutique' => $boutique,
  2948.            'form' => $form->createView(),
  2949.            'userBoutique' => $userBoutique,
  2950.            'journal' => $journal
  2951.         ]);
  2952.     }
  2953.     /**
  2954.      * @Route("/{slug}/supprimer-journal/{id}", name="admin_comptabilite_supprimer_journal")
  2955.      * @return \Symfony\Component\HttpFoundation\Response
  2956.      */
  2957.     public function supprimerJournalAction(Request $request,  $slug$id)
  2958.     {
  2959.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  2960.            return $this->redirectToRoute('security_login');
  2961.         }
  2962.         $em $this->getDoctrine()
  2963.                     ->getManager();
  2964.         
  2965.         $journal $em->getRepository(JournalComptabilite::class)
  2966.                     ->findOneById($id);
  2967.         $boutique $em->getRepository(Boutique::class)
  2968.                     ->findOneBySlug($slug);
  2969.         
  2970.         $user $this->getUser();
  2971.         $userBoutique $em->getRepository(UserBoutique::class)
  2972.                         ->findOneBy(
  2973.                             array(
  2974.                             'user' => $user->getId(),
  2975.                             'boutique' => $boutique->getId()
  2976.                             )
  2977.                         );
  2978.     
  2979.         
  2980.         if(null !== $journal){
  2981.             $journal->setEstSupprime(true);
  2982.             $em->flush();
  2983.         }
  2984.         return $this->redirectToRoute('admin_comptabilite_journaux', array('slug' => $boutique->getSlug()));
  2985.     
  2986.        
  2987.     }
  2988.     /**
  2989.      * @Route("/{slug}/etats-financiers", name="admin_comptabilite_etats_financiers")
  2990.      * @return \Symfony\Component\HttpFoundation\Response
  2991.      */
  2992.     public function etatsFinanciersAction(Request $requestBoutique $boutique)
  2993.     {
  2994.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  2995.            return $this->redirectToRoute('security_login');
  2996.         }
  2997.         $em $this->getDoctrine()
  2998.                     ->getManager();
  2999.     
  3000.         
  3001.         $intervalleDeDate  $this->intervalleSemaine(date('Y-m-d'));
  3002.         $dateDebut date('Y-01-01');
  3003.         $dateDebut = new \DateTime($dateDebut);
  3004.         $dateDebut->setTime(00);
  3005.         $dateFin date('Y-12-31');
  3006.         $dateFin = new \DateTime($dateFin);
  3007.         $dateFin->setTime(2359);
  3008.         
  3009.         $intervalleMois $this->intervalleMois(date('Y-m-d'));
  3010.         $startMonth $intervalleMois['debut'];
  3011.         $endMonth $intervalleMois['fin'];
  3012.         $chargeDExploitations  $em->getRepository(Expensive::class)
  3013.                         ->chargeCompteDeResultatParDate($boutique->getId(), $dateDebut$dateFin'Charges d\'exploitation');
  3014.         
  3015.         $chargeFinancieres  $em->getRepository(Expensive::class)
  3016.                         ->chargeCompteDeResultatParDate($boutique->getId(), $dateDebut$dateFin'Charges financières');
  3017.         
  3018.         $chargeExceptionnelles  $em->getRepository(Expensive::class)
  3019.                         ->chargeCompteDeResultatParDate($boutique->getId(), $dateDebut$dateFin'Charges exceptionnelles');
  3020.         
  3021.         $impotSurLeBenefice  $em->getRepository(Expensive::class)
  3022.                         ->chargeCompteDeResultatParDate($boutique->getId(), $dateDebut$dateFin'Impôts sur les bénéficices');
  3023.         
  3024.         
  3025.         $venteDeMarchandise $em->getRepository(Commande::class)
  3026.                                         ->chiffreDAffaireDUnePeriode('invoice'$boutique->getId(), $dateDebut$dateFin);
  3027.         if(!empty($venteDeMarchandise)){
  3028.             $venteDeMarchandise $venteDeMarchandise['0'];
  3029.         }else{
  3030.             $venteDeMarchandise = array(
  3031.                                         'totalVente' => 0
  3032.                                     );
  3033.         }
  3034.         
  3035.         
  3036.         $startYear date('Y-01-01');
  3037.         $endYear date('Y-12-31');
  3038.         $user $this->getUser();
  3039.     
  3040.         
  3041.         if($request->getMethod() == 'POST'){
  3042.             
  3043.             
  3044.         }
  3045.             $userBoutique $em->getRepository(UserBoutique::class)
  3046.                         ->findOneBy(
  3047.                             array(
  3048.                             'user' => $user->getId(),
  3049.                             'boutique' => $boutique->getId()
  3050.                             )
  3051.                         );
  3052.                         
  3053.         return $this->render('admin/etats_financiers.html.twig', [
  3054.            'boutique' => $boutique,
  3055.            'userBoutique' => $userBoutique,
  3056.            'intervalleDeDate' => $intervalleDeDate,
  3057.            'dateDebut' => $dateDebut,
  3058.            'dateFin' => $dateFin,
  3059.            'startMonth' => $startMonth,
  3060.            'intervalleMois' => $intervalleMois,
  3061.            'endMonth' => $endMonth,
  3062.            'startYear' => $startYear,
  3063.            'endYear' => $endYear,
  3064.            'chargeDExploitations' => $chargeDExploitations,
  3065.            'chargeFinancieres' => $chargeFinancieres,
  3066.            'chargeExceptionnelles' => $chargeExceptionnelles,
  3067.            'impotSurLeBenefice' => $impotSurLeBenefice,
  3068.            'venteDeMarchandise' => $venteDeMarchandise
  3069.            
  3070.         ]);
  3071.     }
  3072.     
  3073.     /**
  3074.      * @Route("/{slug}/ecritures-comptable", name="admin_comptabilite_ecritures_comptable")
  3075.      * @return \Symfony\Component\HttpFoundation\Response
  3076.      */
  3077.     public function ecrituresEomptableAction(Request $requestBoutique $boutique)
  3078.     {
  3079.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  3080.            return $this->redirectToRoute('security_login');
  3081.         }
  3082.         $em $this->getDoctrine()
  3083.                     ->getManager();
  3084.         
  3085.         $compte = new Compte;
  3086.         
  3087.         $user $this->getUser();
  3088.         $userBoutique $em->getRepository(UserBoutique::class)
  3089.                         ->findOneBy(
  3090.                             array(
  3091.                             'user' => $user->getId(),
  3092.                             'boutique' => $boutique->getId()
  3093.                             )
  3094.                         );
  3095.         $ecritureComptables $em->getRepository(EcritureComptable::class)
  3096.                                 ->findBy(
  3097.                                     array(
  3098.                                         'boutique' => $boutique->getId()
  3099.                                     ),
  3100.                                     array(
  3101.                                         'laDate' => 'ASC'
  3102.                                     )
  3103.                                 );
  3104.         
  3105.         if($request->getMethod() == 'POST'){
  3106.             $ecritureComptables = array();
  3107.             
  3108.         }
  3109.     
  3110.         return $this->render('admin/ecriture_comptables.html.twig', [
  3111.            'boutique' => $boutique,
  3112.            'ecritureComptables' => $ecritureComptables,
  3113.            'userBoutique' => $userBoutique
  3114.         ]);
  3115.     }
  3116.     /**
  3117.      * @Route("/{slug}/grand-livre", name="admin_comptabilite_grand_livre")
  3118.      * @return \Symfony\Component\HttpFoundation\Response
  3119.      */
  3120.     public function grandLivreAction(Request $requestBoutique $boutique)
  3121.     {
  3122.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  3123.            return $this->redirectToRoute('security_login');
  3124.         }
  3125.         $em $this->getDoctrine()
  3126.                     ->getManager();
  3127.         
  3128.         $compte = new Compte;
  3129.         
  3130.         $user $this->getUser();
  3131.         $userBoutique $em->getRepository(UserBoutique::class)
  3132.                         ->findOneBy(
  3133.                             array(
  3134.                             'user' => $user->getId(),
  3135.                             'boutique' => $boutique->getId()
  3136.                             )
  3137.                         );
  3138.         $intervalleDeDate  $this->intervalleSemaine(date('Y-m-d'));
  3139.         $dateDebut date('Y-01-01');
  3140.         $dateDebut = new \DateTime($dateDebut);
  3141.         $dateDebut->setTime(00);
  3142.         $dateFin date('Y-12-31');
  3143.         $dateFin = new \DateTime($dateFin);
  3144.         $dateFin->setTime(2359);
  3145.         
  3146.         $intervalleMois $this->intervalleMois(date('Y-m-d'));
  3147.         $startMonth $intervalleMois['debut'];
  3148.         $endMonth $intervalleMois['fin'];
  3149.         $ecritureComptables $em->getRepository(EcritureComptable::class)
  3150.                                 ->grandLivre($boutique->getId(), $dateDebut$dateFin);
  3151.         
  3152.         if($request->getMethod() == 'POST'){
  3153.             $ecritureComptables = array();
  3154.             
  3155.         }
  3156.     
  3157.         return $this->render('admin/grand_livre.html.twig', [
  3158.            'boutique' => $boutique,
  3159.            'ecritureComptables' => $ecritureComptables,
  3160.            'userBoutique' => $userBoutique
  3161.         ]);
  3162.     }
  3163.     
  3164.     /**
  3165.      * @Route("/{slug}/nouvelle-ecriture-comptable", name="admin_comptabilite_nouvelle_ecriture_comptable")
  3166.      * @return \Symfony\Component\HttpFoundation\Response
  3167.      */
  3168.     public function nouvelleEcritureEomptableAction(Request $requestBoutique $boutique)
  3169.     {
  3170.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  3171.            return $this->redirectToRoute('security_login');
  3172.         }
  3173.         $em $this->getDoctrine()
  3174.                     ->getManager();
  3175.         
  3176.         $ecritureComptable = new EcritureComptable;
  3177.         
  3178.         $user $this->getUser();
  3179.         $userBoutique $em->getRepository(UserBoutique::class)
  3180.                         ->findOneBy(
  3181.                             array(
  3182.                             'user' => $user->getId(),
  3183.                             'boutique' => $boutique->getId()
  3184.                             )
  3185.                         );
  3186.         $form $this->createForm(EcritureComptableType::class, $ecritureComptable, array('boutique' => $boutique->getId()));
  3187.         
  3188.         $ok_soumission '';
  3189.         $error '';
  3190.         
  3191.         if($request->getMethod() == 'POST'){
  3192.             
  3193.                $form->handleRequest($request);
  3194.                if($form->isValid()){
  3195.                    $ecritureComptable->setBoutique($boutique);
  3196.                   $em->persist($ecritureComptable);
  3197.                   $em->flush();
  3198.         
  3199.                 $ok_soumission =" Votre message a été pris en compte";
  3200.                     
  3201.                 unset($ecritureComptable);
  3202.                 unset($form);
  3203.                 $ecritureComptable = new EcritureComptable;
  3204.                 
  3205.                 $form $this->createForm(EcritureComptableType::class, $ecritureComptable, array('boutique' => $boutique->getId()));
  3206.                     
  3207.                 } else {
  3208.                     $error =" Veillez corrigez vos erreurs";
  3209.                 }
  3210.         }
  3211.     
  3212.         return $this->render('admin/nouvelle_ecriture_comptable.html.twig', [
  3213.            'boutique' => $boutique,
  3214.            'form' => $form->createView(),
  3215.            'userBoutique' => $userBoutique
  3216.         ]);
  3217.     }
  3218.     
  3219.     
  3220.     
  3221.     /**
  3222.      * @Route("/{slug}/new-payment/{id}", name="admin.new_payment")
  3223.      * @return \Symfony\Component\HttpFoundation\Response
  3224.      */
  3225.     public function newPaymentAction(Request $request,  $slug$id)
  3226.     {
  3227.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  3228.            return $this->redirectToRoute('security_login');
  3229.         }      
  3230.         $em $this->getDoctrine()
  3231.                     ->getManager();
  3232.         
  3233.         $boutique $em->getRepository(Boutique::class)
  3234.                     ->findOneBySlug($slug);
  3235.             
  3236.         $commande $em->getRepository(Commande::class)
  3237.                     ->findOneBy(
  3238.                         array(
  3239.                             'boutique' => $boutique->getId(),
  3240.                             'id' => $id
  3241.                         )
  3242.                     );
  3243.         $factures $em->getRepository(Commande::class)
  3244.                     ->facturesPourVersement($boutique->getId());
  3245.         
  3246.         $user $this->getUser();        
  3247.         $userBoutique $em->getRepository(UserBoutique::class)
  3248.                         ->findOneBy(
  3249.                             array(
  3250.                             'user' => $user->getId(),
  3251.                             'boutique' => $boutique->getId()
  3252.                             )
  3253.                         );
  3254.         $paymentMethods $em->getRepository(PaymentMethod::class)
  3255.                     ->findBy(
  3256.                         array(
  3257.                             'boutique' => $boutique->getId()
  3258.                         )
  3259.                     );
  3260.                     
  3261.         $ok_soumission '';
  3262.         $error '';
  3263.         
  3264.         if($request->getMethod() == 'POST'){
  3265.             $laDate $request->request->get('laDate'); 
  3266.             $frais = (float)$request->request->get('frais');
  3267.             $paymentMethod $request->request->get('paymentMethod');
  3268.             $montant = (float)$request->request->get('montant');
  3269.             $referencePaiement $request->request->get('referencePaiement');
  3270.             $commande $request->request->get('facture');
  3271.             
  3272.             
  3273.             $commande $em->getRepository(Commande::class)
  3274.                             ->findOneBy(
  3275.                                 array(
  3276.                                 'boutique' =>$boutique->getId(),
  3277.                                 'id' => $commande
  3278.                                 )
  3279.                             );
  3280.             
  3281.             if((float)$commande->getResteAPayer() < $montant || $montant == 0){
  3282.                 $this->addFlash(
  3283.                     'danger',
  3284.                     'Montant invalide '$montant
  3285.                 );
  3286.             } else{
  3287.                 $laDate = new \DateTime($laDate);
  3288.                 $payment = new Payment;
  3289.                 $payment->setLaDate($laDate);
  3290.                 $payment->setCommande($commande);
  3291.                 $payment->setBoutique($boutique);
  3292.                 $payment->setMontant($montant);
  3293.                 $payment->setReferencePaiement($referencePaiement);
  3294.                 $payment->setMoyenDePaiement($paymentMethod);
  3295.                 
  3296.                 $em->persist($payment);
  3297.                 
  3298.                 $commande->setMontantPaye($commande->getMontantPaye() + $montant);
  3299.                 $commande->setResteAPayer($commande->getResteAPayer() - $montant);
  3300.                 $em->flush();
  3301.                 if($boutique->getSettings()->isGenererAutomatiquementEcrituresComptabilite()){
  3302.                     $groupeEcritureComptable = new GroupeEcritureComptable;
  3303.                     $groupeEcritureComptable->setBoutique($boutique);
  3304.                     
  3305.                     $groupeEcritureComptable->setLibelleEcriture('Règlement client');
  3306.                     $groupeEcritureComptable->setDebit($montant);
  3307.                     $groupeEcritureComptable->setCredit($montant);
  3308.                     $groupeEcritureComptable->setLaDate($payment->getLaDate());
  3309.                     $groupeEcritureComptable->setNumeroPiece($commande->getNumero());
  3310.                     $groupeEcritureComptable->setAnnee($payment->getLaDate()->format('Y'));
  3311.                     $groupeEcritureComptable->setMois($payment->getLaDate()->format('m'));
  3312.                     $em->persist($groupeEcritureComptable);
  3313.                     $em->flush();
  3314.                 
  3315.                 
  3316.                 if($paymentMethod == 'check' || $paymentMethod == 'transfer'){
  3317.                     //Debit
  3318.                     
  3319.                     $ecritureComptable = new EcritureComptable;
  3320.                     $groupeEcritureComptable->setLeJournal($boutique->getSettings()->getJournalDeBanque());
  3321.                     $ecritureComptable->setBoutique($boutique);
  3322.                     $ecritureComptable->setGroupeEcritureComptable($groupeEcritureComptable);
  3323.                     
  3324.                     $ecritureComptable->setLeJournal($leJournal);
  3325.                     $compte $em->getRepository(Compte::class)
  3326.                                 ->findOneByNumero('521'); //Banque
  3327.                     $compte->setSolde($compte->getSolde() + $montant);
  3328.                     $ecritureComptable->setCompte($compte);
  3329.                     $ecritureComptable->setLibelleEcriture('Règlement client');
  3330.                     $ecritureComptable->setDebit($montant);
  3331.                     $ecritureComptable->setSolde($compte->getSolde());
  3332.                     $ecritureComptable->setLaDate($payment->getLaDate());
  3333.                     $ecritureComptable->setNumeroPiece($commande->getNumero());
  3334.                     $ecritureComptable->setAnnee($ecritureComptable->getLaDate()->format('Y'));
  3335.                     $ecritureComptable->setMois($ecritureComptable->getLaDate()->format('m'));
  3336.                     $em->persist($ecritureComptable);
  3337.                     //Credit
  3338.                     $ecritureComptable = new EcritureComptable;
  3339.                     $ecritureComptable->setGroupeEcritureComptable($groupeEcritureComptable);
  3340.                     $ecritureComptable->setBoutique($boutique);
  3341.                     
  3342.                     $ecritureComptable->setLeJournal($boutique->getSettings()->getJournalDeBanque());
  3343.                     $compte $em->getRepository(Compte::class)
  3344.                                 ->findOneByNumero('411'); //Client
  3345.                     $compte->setSolde($compte->getSolde() - $montant);
  3346.                     $ecritureComptable->setCompte($compte);
  3347.                     $ecritureComptable->setLibelleEcriture('Règlement client');
  3348.                     $ecritureComptable->setCredit($montant);
  3349.                     $ecritureComptable->setSolde($compte->getSolde());
  3350.                     $ecritureComptable->setLaDate($payment->getLaDate());
  3351.                     $ecritureComptable->setNumeroPiece($commande->getNumero());
  3352.                     $ecritureComptable->setAnnee($ecritureComptable->getLaDate()->format('Y'));
  3353.                     $ecritureComptable->setMois($ecritureComptable->getLaDate()->format('m'));
  3354.                     $em->persist($ecritureComptable);
  3355.                 }
  3356.                 if($paymentMethod == 'cash'){
  3357.                     //Débit
  3358.                     $ecritureComptable = new EcritureComptable;
  3359.                     $ecritureComptable->setBoutique($boutique);
  3360.                     $ecritureComptable->setGroupeEcritureComptable($groupeEcritureComptable);
  3361.                     $leJournal $em->getRepository(JournalComptabilite::class)
  3362.                                     ->findOneBy(
  3363.                                         array(
  3364.                                         'boutique' => $boutique->getId(),
  3365.                                         'reference' => 'CA',
  3366.                                         'nom' => 'Caisse'
  3367.                                         )
  3368.                                     );
  3369.                     $groupeEcritureComptable->setLeJournal($leJournal);
  3370.                     $ecritureComptable->setLeJournal($leJournal);
  3371.                     $compte $em->getRepository(Compte::class)
  3372.                                 ->findOneByNumero('5711'); //caisse
  3373.                     $compte->setSolde($compte->getSolde() + $montant);
  3374.                     $ecritureComptable->setCompte($compte);
  3375.                     $ecritureComptable->setLibelleEcriture('Règlement client');
  3376.                     $ecritureComptable->setDebit($montant);
  3377.                     $ecritureComptable->setSolde($compte->getSolde());
  3378.                     $ecritureComptable->setLaDate($payment->getLaDate());
  3379.                     $ecritureComptable->setNumeroPiece($commande->getNumero());
  3380.                     $ecritureComptable->setAnnee($ecritureComptable->getLaDate()->format('Y'));
  3381.                     $ecritureComptable->setMois($ecritureComptable->getLaDate()->format('m'));
  3382.                     $em->persist($ecritureComptable);
  3383.                     //Credit
  3384.                     $ecritureComptable = new EcritureComptable;
  3385.                     $ecritureComptable->setBoutique($boutique);
  3386.                     $ecritureComptable->setGroupeEcritureComptable($groupeEcritureComptable);
  3387.                     
  3388.                     $ecritureComptable->setLeJournal($leJournal);
  3389.                     $compte $em->getRepository(Compte::class)
  3390.                                 ->findOneByNumero('411'); //Client
  3391.                     $compte->setSolde($compte->getSolde() - $montant);
  3392.                     $ecritureComptable->setCompte($compte);
  3393.                     $ecritureComptable->setLibelleEcriture('Règlement client');
  3394.                     $ecritureComptable->setCredit($montant);
  3395.                     $ecritureComptable->setSolde($compte->getSolde());
  3396.                     $ecritureComptable->setLaDate($payment->getLaDate());
  3397.                     $ecritureComptable->setNumeroPiece($commande->getNumero());
  3398.                     $ecritureComptable->setAnnee($ecritureComptable->getLaDate()->format('Y'));
  3399.                     $ecritureComptable->setMois($ecritureComptable->getLaDate()->format('m'));
  3400.                     $em->persist($ecritureComptable);
  3401.                 }
  3402.                 if($paymentMethod == 'card'){
  3403.                     $ecritureComptable = new EcritureComptable;
  3404.                     $ecritureComptable->setGroupeEcritureComptable($groupeEcritureComptable);
  3405.                     $ecritureComptable->setBoutique($boutique);
  3406.                     $leJournal $em->getRepository(JournalComptabilite::class)
  3407.                                     ->findOneBy(
  3408.                                         array(
  3409.                                         'boutique' => $boutique->getId(),
  3410.                                         'reference' => 'BQ',
  3411.                                         'nom' => 'Banque'
  3412.                                         )
  3413.                                     );
  3414.                     $ecritureComptable->setLeJournal($leJournal);
  3415.                     $groupeEcritureComptable->setLeJournal($leJournal);
  3416.                     $compte $em->getRepository(Compte::class)
  3417.                                 ->findOneByNumero('521'); //Banque
  3418.                     $compte->setSolde($compte->getSolde() + $montant $frais);
  3419.                     $ecritureComptable->setCompte($compte);
  3420.                     $ecritureComptable->setLibelleEcriture('Règlement client');
  3421.                     $ecritureComptable->setDebit($montant $frais);
  3422.                     $ecritureComptable->setSolde($compte->getSolde());
  3423.                     $ecritureComptable->setLaDate($payment->getLaDate());
  3424.                     $ecritureComptable->setNumeroPiece($commande->getNumero());
  3425.                     $ecritureComptable->setAnnee($ecritureComptable->getLaDate()->format('Y'));
  3426.                     $ecritureComptable->setMois($ecritureComptable->getLaDate()->format('m'));
  3427.                     $em->persist($ecritureComptable);
  3428.                     if($frais 0){
  3429.                         $ecritureComptable = new EcritureComptable;
  3430.                         $ecritureComptable->setGroupeEcritureComptable($groupeEcritureComptable);
  3431.                         $ecritureComptable->setBoutique($boutique);
  3432.                         
  3433.                         $ecritureComptable->setLeJournal($leJournal);
  3434.                         $compte $em->getRepository(Compte::class)
  3435.                                     ->findOneByNumero('6315'); //Commissions sur cartes de crédit
  3436.                         $compte->setSolde($compte->getSolde() + $frais);
  3437.                         $ecritureComptable->setCompte($compte);
  3438.                         $ecritureComptable->setLibelleEcriture('Règlement client');
  3439.                         $ecritureComptable->setDebit($frais);
  3440.                         $ecritureComptable->setSolde($compte->getSolde());
  3441.                         $ecritureComptable->setLaDate($payment->getLaDate());
  3442.                         $ecritureComptable->setNumeroPiece($commande->getNumero());
  3443.                         $ecritureComptable->setAnnee($ecritureComptable->getLaDate()->format('Y'));
  3444.                         $ecritureComptable->setMois($ecritureComptable->getLaDate()->format('m'));
  3445.                         $em->persist($ecritureComptable);
  3446.                     }
  3447.                     //Credit
  3448.                     $ecritureComptable = new EcritureComptable;
  3449.                     $ecritureComptable->setBoutique($boutique);
  3450.                     $ecritureComptable->setGroupeEcritureComptable($groupeEcritureComptable);
  3451.                     
  3452.                     $ecritureComptable->setLeJournal($leJournal);
  3453.                     $compte $em->getRepository(Compte::class)
  3454.                                 ->findOneByNumero('515'); //CARTES DE CREDIT A ENCAISSER
  3455.                     $compte->setSolde($compte->getSolde() - $montant );
  3456.                     $ecritureComptable->setCompte($compte);
  3457.                     $ecritureComptable->setLibelleEcriture('Règlement client');
  3458.                     $ecritureComptable->setCredit($montant);
  3459.                     $ecritureComptable->setSolde($compte->getSolde());
  3460.                     $ecritureComptable->setLaDate($payment->getLaDate());
  3461.                     $ecritureComptable->setNumeroPiece($commande->getNumero());
  3462.                     $ecritureComptable->setAnnee($ecritureComptable->getLaDate()->format('Y'));
  3463.                     $ecritureComptable->setMois($ecritureComptable->getLaDate()->format('m'));
  3464.                     $em->persist($ecritureComptable);
  3465.                 }
  3466.                 if($paymentMethod == 'mobile-money'){
  3467.                     $ecritureComptable = new EcritureComptable;
  3468.                     $ecritureComptable->setBoutique($boutique);
  3469.                     $ecritureComptable->setGroupeEcritureComptable($groupeEcritureComptable);
  3470.                     $leJournal $em->getRepository(JournalComptabilite::class)
  3471.                                     ->findOneBy(
  3472.                                         array(
  3473.                                             'boutique' => $boutique->getId(),
  3474.                                         'reference' => 'CA',
  3475.                                         'nom' => 'Caisse'
  3476.                                         )
  3477.                                     );
  3478.                     $ecritureComptable->setLeJournal($leJournal);
  3479.                     $groupeEcritureComptable->setLeJournal($leJournal);
  3480.                     $compte $em->getRepository(Compte::class)
  3481.                                 ->findOneByNumero('5711'); //Caisse en monnaie nationale
  3482.                     $compte->setSolde($compte->getSolde() + $montant $frais);
  3483.                     $ecritureComptable->setCompte($compte);
  3484.                     $ecritureComptable->setLibelleEcriture('Règlement client');
  3485.                     $ecritureComptable->setDebit($montant $frais);
  3486.                     $ecritureComptable->setSolde($compte->getSolde());
  3487.                     $ecritureComptable->setLaDate($payment->getLaDate());
  3488.                     $ecritureComptable->setNumeroPiece($commande->getNumero());
  3489.                     $ecritureComptable->setAnnee($ecritureComptable->getLaDate()->format('Y'));
  3490.                     $ecritureComptable->setMois($ecritureComptable->getLaDate()->format('m'));
  3491.                     $em->persist($ecritureComptable);
  3492.                     if($frais 0){
  3493.                         $ecritureComptable = new EcritureComptable;
  3494.                         $ecritureComptable->setBoutique($boutique);
  3495.                         $ecritureComptable->setGroupeEcritureComptable($groupeEcritureComptable);
  3496.                         
  3497.                         $ecritureComptable->setLeJournal($leJournal);
  3498.                         $compte $em->getRepository(Compte::class)
  3499.                                     ->findOneByNumero('6317'); //Frais sur instruments monnaie électronique
  3500.                         $compte->setSolde($compte->getSolde() + $frais);
  3501.                         $ecritureComptable->setCompte($compte);
  3502.                         $ecritureComptable->setLibelleEcriture('Règlement client');
  3503.                         $ecritureComptable->setDebit($frais);
  3504.                         $ecritureComptable->setSolde($compte->getSolde());
  3505.                         $ecritureComptable->setLaDate($payment->getLaDate());
  3506.                         $ecritureComptable->setNumeroPiece($commande->getNumero());
  3507.                         $ecritureComptable->setAnnee($ecritureComptable->getLaDate()->format('Y'));
  3508.                         $ecritureComptable->setMois($ecritureComptable->getLaDate()->format('m'));
  3509.                         $em->persist($ecritureComptable);
  3510.                     }
  3511.                     //Credit
  3512.                     $ecritureComptable = new EcritureComptable;
  3513.                     $ecritureComptable->setBoutique($boutique);
  3514.                     $ecritureComptable->setGroupeEcritureComptable($groupeEcritureComptable);
  3515.                     
  3516.                     $ecritureComptable->setLeJournal($leJournal);
  3517.                     $compte $em->getRepository(Compte::class)
  3518.                                 ->findOneByNumero('554'); //PORTE-MONNAIE ELECTRONIQUE
  3519.                     $compte->setSolde($compte->getSolde() - $montant);
  3520.                     $ecritureComptable->setCompte($compte);
  3521.                     $ecritureComptable->setLibelleEcriture('Règlement client');
  3522.                     $ecritureComptable->setCredit($montant);
  3523.                     $ecritureComptable->setSolde($compte->getSolde());
  3524.                     $ecritureComptable->setLaDate($payment->getLaDate());
  3525.                     $ecritureComptable->setNumeroPiece($commande->getNumero());
  3526.                     $ecritureComptable->setAnnee($ecritureComptable->getLaDate()->format('Y'));
  3527.                     $ecritureComptable->setMois($ecritureComptable->getLaDate()->format('m'));
  3528.                     $em->persist($ecritureComptable);
  3529.                 }
  3530.                 } //Fin condition ecriture comptable automatique
  3531.                 $em->flush();
  3532.                  $this->addFlash(
  3533.                         'success',
  3534.                         'Enregistrement effectué'
  3535.                     );
  3536.             }
  3537.         }
  3538.     
  3539.        return $this->render('admin/new_payment.html.twig', [
  3540.            'boutique' => $boutique,
  3541.            'commande' => $commande,
  3542.            'paymentMethods' => $paymentMethods,
  3543.            'factures' => $factures,
  3544.            'userBoutique' => $userBoutique
  3545.         ]);
  3546.     
  3547.    }
  3548.     
  3549.     
  3550.     
  3551.     //bill_credit
  3552.     /**
  3553.      * @Route("/{slug}/bill-credits", name="admin.bill_credits")
  3554.      * @return \Symfony\Component\HttpFoundation\Response
  3555.      */
  3556.     public function billCreditsActionRequest $requestBoutique $boutique)
  3557.     {
  3558.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  3559.            return $this->redirectToRoute('security_login');
  3560.         }      
  3561.         $em $this->getDoctrine()
  3562.                     ->getManager();
  3563.     
  3564.         $intervalleDeDate  $this->intervalleSemaine(date('Y-m-d'));
  3565.         $dateDebut = new \DateTime($intervalleDeDate['debut']);
  3566.         $dateFin = new \DateTime($intervalleDeDate['fin']);
  3567.         
  3568.         $intervalleMois $this->intervalleMois(date('Y-m-d'));
  3569.         $startMonth $intervalleMois['debut'];
  3570.         $endMonth $intervalleMois['fin'];
  3571.         
  3572.         $billCredits  $em->getRepository(Commande::class)
  3573.                         ->commandeParDateEtType($boutique->getId(), 'bill_credit'$dateDebut$dateFin);
  3574.         
  3575.         $startYear date('Y-01-01');
  3576.         $endYear date('Y-12-31');
  3577.         $user $this->getUser();
  3578.         $userBoutique $em->getRepository(UserBoutique::class)
  3579.                         ->findOneBy(
  3580.                             array(
  3581.                             'user' => $user->getId(),
  3582.                             'boutique' => $boutique->getId()
  3583.                             )
  3584.                         );
  3585.         if('POST' == $request->getMethod()){
  3586.             $dateDebut $_POST['dateDebut'];
  3587.             $dateFin $_POST['dateFin'];
  3588.             
  3589.             $dateDebut = new \DateTime($dateDebut);
  3590.             $dateFin = new \DateTime($dateFin);
  3591.             
  3592.             $billCredits  $em->getRepository(Commande::class)
  3593.                         ->commandeParDateEtType($boutique->getId(), 'bill_credit'$dateDebut$dateFin);
  3594.             
  3595.             
  3596.             return $this->render('admin/bill_credits_table_content.html.twig', [
  3597.                'boutique' => $boutique,
  3598.                'billCredits' => $billCredits
  3599.             ]);
  3600.             
  3601.         }
  3602.     
  3603.     
  3604.         return $this->render('admin/bill_credits.html.twig', [
  3605.            'boutique' => $boutique,
  3606.            'billCredits' => $billCredits,
  3607.            'dateDebut' => $dateDebut,
  3608.            'dateFin' => $dateFin,
  3609.            'startMonth' => $startMonth,
  3610.            'endMonth' => $endMonth,
  3611.            'startYear' => $startYear,
  3612.            'endYear' => $endYear,
  3613.            'userBoutique' => $userBoutique
  3614.         ]);
  3615.     }
  3616.     
  3617.     //Sales
  3618.     /**
  3619.      * @Route("/{slug}/proposals/new", name="admin.new_proposal")
  3620.      * @return \Symfony\Component\HttpFoundation\Response
  3621.      */
  3622.     public function newProposalsActionRequest $requestBoutique $boutique)
  3623.     {
  3624.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  3625.            return $this->redirectToRoute('security_login');
  3626.         }  
  3627.         $em $this->getDoctrine()
  3628.                     ->getManager();
  3629.         
  3630.         $intervalleDeDate  $this->intervalleSemaine(date('Y-m-d'));
  3631.         $dateDebut = new \DateTime($intervalleDeDate['debut']);
  3632.         $dateFin = new \DateTime($intervalleDeDate['fin']);
  3633.         
  3634.         $intervalleMois $this->intervalleMois(date('Y-m-d'));
  3635.         $startMonth $intervalleMois['debut'];
  3636.         $endMonth $intervalleMois['fin'];
  3637.         
  3638.         $proposals  $em->getRepository(Commande::class)
  3639.                         ->commandeParDateEtType($boutique->getId(), 'proposal'$dateDebut$dateFin);
  3640.         
  3641.         $startYear date('Y-01-01');
  3642.         $endYear date('Y-12-31');
  3643.         $user $this->getUser();
  3644.         $userBoutique $em->getRepository(UserBoutique::class)
  3645.                         ->findOneBy(
  3646.                             array(
  3647.                             'user' => $user->getId(),
  3648.                             'boutique' => $boutique->getId()
  3649.                             )
  3650.                         );
  3651.         if('POST' == $request->getMethod()){
  3652.             $dateDebut $_POST['dateDebut'];
  3653.             $dateFin $_POST['dateFin'];
  3654.             
  3655.             $dateDebut = new \DateTime($dateDebut);
  3656.             $dateFin = new \DateTime($dateFin);
  3657.             
  3658.             $proposals  $em->getRepository(Commande::class)
  3659.                         ->commandeParDateEtType($boutique->getId(), 'proposal'$dateDebut$dateFin);
  3660.             
  3661.             
  3662.             return $this->render('admin/proposals_table_content.html.twig', [
  3663.                'boutique' => $boutique,
  3664.                'proposals' => $proposals
  3665.             ]);
  3666.             
  3667.         }
  3668.     
  3669.         return $this->render('admin/nouvelle_commande.html.twig', [
  3670.            'boutique' => $boutique,
  3671.            'proposals' => $proposals,
  3672.            'dateDebut' => $dateDebut,
  3673.            'dateFin' => $dateFin,
  3674.            'startMonth' => $startMonth,
  3675.            'endMonth' => $endMonth,
  3676.            'startYear' => $startYear,
  3677.            'endYear' => $endYear,
  3678.            'userBoutique' => $userBoutique
  3679.         ]);
  3680.     }
  3681.     
  3682.     //Sales
  3683.     /**
  3684.      * @Route("/{slug}/sales", name="admin.sales")
  3685.      * @return \Symfony\Component\HttpFoundation\Response
  3686.      */
  3687.     public function salesActionRequest $requestChiffreEnLettre $chiffreEnLettreBoutique $boutique$type 'Invoice')
  3688.     {
  3689.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  3690.            return $this->redirectToRoute('security_login');
  3691.         }      
  3692.         $em $this->getDoctrine()
  3693.                     ->getManager();
  3694.         $produits  $em->getRepository(Produit::class)
  3695.                         ->findByBoutique($boutique);
  3696.         $modeleReglements $em->getRepository(ModeleReglement::class)
  3697.                                 ->findByBoutique($boutique);        
  3698.         $tiers $em->getRepository(Tiers::class)
  3699.                                 ->findByBoutique($boutique);        
  3700.         
  3701.         $user $this->getUser();
  3702.     
  3703.         $ok_soumission '';
  3704.         $error '';
  3705.         
  3706.         
  3707.         if($request->getMethod() == 'POST'){
  3708.             $typeFacture $_POST['typeFacture'];
  3709.             $modeleReglement $_POST['modeleReglement'];
  3710.             $client $_POST['client'];
  3711.             $dateCommande $_POST['dateCommande'];
  3712.             $montantHT $_POST['montantHT'];
  3713.             $montantTVA $_POST['montantTVA'];
  3714.             $montantTTC $_POST['montantTTC'];
  3715.             $listeProduits json_decode($_POST['listeProduits']);
  3716.             
  3717.             $commande = new Commande;
  3718.             $commande->setBoutique($boutique);
  3719.             $client $em->getRepository(Tiers::class)
  3720.                         ->findOneById($client);
  3721.             if(null !== $client){
  3722.                 
  3723.                 $commande->setTiers($client);
  3724.             }
  3725.             
  3726.             $laDate = new \DateTime($dateCommande);
  3727.             $commande->setLaDate($laDate);
  3728.             $commande->setTotalHT($montantHT);
  3729.             $commande->setTotalTVA($montantTVA);
  3730.             $commande->setTotalTTC($montantTTC);
  3731.             $montantlettre strtoupper($chiffreEnLettre->Conversion($montantTTC));
  3732.             $commande->setMontantEnLettre($montantlettre);
  3733.             $commande->setTypeFacture($typeFacture);
  3734.             $em->persist($commande);
  3735.             $em->flush();
  3736.             $produitCommandes = array();
  3737.             foreach($listeProduits as $listeProduit){
  3738.                 $listeProduit = (array)$listeProduit;
  3739.                 $leProduit $em->getRepository(Produit::class)->findOneById($listeProduit['idProduit']);
  3740.                 
  3741.                 $produitCommande = new ProduitCommande;
  3742.                 $produitCommande->setProduit($leProduit);
  3743.                 $produitCommande->setCommande($commande);
  3744.                 $produitCommande->setQuantite($listeProduit['quantite']);
  3745.                 $produitCommande->setPrix((float)$listeProduit['prixUnitaire']);
  3746.                 $produitCommande->setRemise($listeProduit['reduction']);
  3747.                 $produitCommande->setTotalHT($listeProduit['totalHT']);
  3748.                 $produitCommande->setTotalTVA($listeProduit['totalTVA']);
  3749.                 $produitCommande->setTotalTTC($listeProduit['totalTTC']);
  3750.                 $em->persist($produitCommande);
  3751.                 array_push($produitCommandes$produitCommande);
  3752.                 
  3753.             }
  3754.             $em->flush();
  3755.             return $this->render('admin/facture.html.twig', [
  3756.                    'boutique' => $boutique,
  3757.                    'commande' => $commande,
  3758.                    'typeFacture' => $typeFacture,
  3759.                    'client' => $client,
  3760.                    'produitCommandes' => $produitCommandes,
  3761.                    'listeProduit' => $listeProduit,
  3762.                    'montantHT' => $montantHT,
  3763.                    'montantTVA' => $montantTVA,
  3764.                    'montantTTC' => $montantTTC,
  3765.                    'userBoutique' => $userBoutique
  3766.                 ]);
  3767.             
  3768.             
  3769.         }
  3770.     
  3771.         return $this->render('admin/nouvelle_commande.html.twig', [
  3772.            'boutique' => $boutique,
  3773.            'produits' => $produits,
  3774.            'modeleReglements' => $modeleReglements,
  3775.            'tiers' => $tiers,
  3776.            'userBoutique' => $userBoutique
  3777.         ]);
  3778.     }
  3779.     
  3780.     //Vente
  3781.     /**
  3782.      * @Route("/{slug}/new-sale/{type}", name="admin.new_sale")
  3783.      * @return \Symfony\Component\HttpFoundation\Response
  3784.      */
  3785.     public function newSaleActionRequest $requestChiffreEnLettre $chiffreEnLettreBoutique $boutique$type 'invoice')
  3786.     {
  3787.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  3788.            return $this->redirectToRoute('security_login');
  3789.         }      
  3790.         $em $this->getDoctrine()
  3791.                     ->getManager();
  3792.         $produits  $em->getRepository(Produit::class)
  3793.                         ->findByBoutique($boutique);
  3794.         $modeleReglements $em->getRepository(ModeleReglement::class)
  3795.                                 ->findByBoutique($boutique);        
  3796.         $tiers $em->getRepository(Tiers::class)
  3797.                                 ->findByBoutique($boutique);        
  3798.         
  3799.         $user $this->getUser();
  3800.         $vehicules = array( 222328);
  3801.         
  3802.         $userBoutique $em->getRepository(UserBoutique::class)
  3803.                         ->findOneBy(
  3804.                             array(
  3805.                             'user' => $user->getId(),
  3806.                             'boutique' => $boutique->getId()
  3807.                             )
  3808.                         );
  3809.     
  3810.         $ok_soumission '';
  3811.         $error '';
  3812.         
  3813.         $editMode 'new';
  3814.         $responseFNE '';
  3815.         $natureFacture '';
  3816.         if($request->getMethod() == 'POST'){
  3817.             $typeFacture $_POST['typeFacture'];
  3818.             $modeleReglement $_POST['modeleReglement'];
  3819.             $client $_POST['client'];
  3820.             $moyenDePaiement $_POST['moyenDePaiement'];
  3821.             $clientFinalNom $_POST['clientFinalNom'];
  3822.             $clientFinalNumero $_POST['clientFinalNumero'];
  3823.             $dateCommande $_POST['dateCommande'];
  3824.             $montantHT = (float)$_POST['montantHT'];
  3825.             $remise =   (float)$_POST['remise'];
  3826.             $remisePourcentage =  (float)$_POST['remisePourcentage'];
  3827.             $totalHTApresRemise =  (float)$_POST['totalHTApresRemise'];
  3828.             $montantTVA = (float)$_POST['montantTVA'];
  3829.             $montantTTC = (float)$_POST['montantTTC'];
  3830.             $titreDocument $_POST['titreDocument'];
  3831.             $valableJusquAu $_POST['valableJusquAu'];
  3832.             $observation $_POST['observation'];
  3833.             $matriculeVehicule $_POST['matriculeVehicule'];
  3834.             $marqueVehicule $_POST['marqueVehicule'];
  3835.             $kilometrageVehicule = (float)$_POST['kilometrageVehicule'];
  3836.             
  3837.                         
  3838.             $listeProduits json_decode($_POST['listeProduits']);
  3839.             $natureFacture $_POST['natureFacture'];
  3840.             
  3841.             $commande = new Commande;
  3842.             $commande->setNatureFacture($natureFacture);
  3843.             $commande->setClientFinalNom($clientFinalNom);
  3844.             $commande->setClientFinalNumero($clientFinalNumero);
  3845.             $commande->setCreePar($user);
  3846.             $commande->setBoutique($boutique);
  3847.             $client $em->getRepository(Tiers::class)
  3848.                         ->findOneById($client);
  3849.             if(null !== $client){
  3850.                 
  3851.                 $commande->setTiers($client);
  3852.             }
  3853.             
  3854.             $laDate = new \DateTime($dateCommande);
  3855.             $commande->setLaDate($laDate);
  3856.             $commande->setMoyenDePaiement($moyenDePaiement);
  3857.             $commande->setMatriculeVehicule($matriculeVehicule);
  3858.             $commande->setMarqueVehicule($marqueVehicule);
  3859.             $commande->setKilometrageVehicule($kilometrageVehicule);
  3860.             
  3861.             $commande->setTotalHT($montantHT);
  3862.             $commande->setRemise($remise);
  3863.             $commande->setRemisePourcentage(round($remisePourcentage2));
  3864.             $commande->setTotalHTApresRemise($totalHTApresRemise);
  3865.             if($commande->getNatureFacture() == 'purchase'){
  3866.                 $commande->setTotalTVA(0);
  3867.                 $commande->setTotalTTC($totalHTApresRemise);
  3868.                 $commande->setResteAPayer($totalHTApresRemise);
  3869.             }else{
  3870.                 $commande->setTotalTVA($montantTVA);
  3871.                 $commande->setTotalTTC($montantTTC);
  3872.                 $commande->setResteAPayer($montantTTC);
  3873.             }
  3874.             
  3875.             
  3876.             
  3877.             $commande->setTitreDocument($titreDocument);
  3878.             $commande->setObservation($observation);
  3879.             if($valableJusquAu != ''){
  3880.                 $commande->setValableJusquAu(new \DateTime($valableJusquAu));
  3881.             }
  3882.             $montantlettre strtoupper($chiffreEnLettre->Conversion($commande->getTotalTTC()));
  3883.             $commande->setMontantEnLettre($montantlettre);
  3884.             $commande->setTypeFacture($type);
  3885.             
  3886.             if($commande->getNumero() == ''){
  3887.                 $commande->setNumero($this->getNumero($type$boutique));
  3888.             }
  3889.             
  3890.             $em->persist($commande);
  3891.             $em->flush();
  3892.             $produitCommandes = array();
  3893.             $coutDeRevientCommande 0;
  3894.             foreach($listeProduits as $listeProduit){
  3895.                 $listeProduit = (array)$listeProduit;
  3896.                 $idDuProduit $listeProduit['idProduit'];
  3897.                 
  3898.                 if($idDuProduit == ''){
  3899.                     //Produit inexistant, il faut le créer
  3900.                     $leProduit = new Produit;
  3901.                     $leProduit->setNom($listeProduit['nomProduit']);
  3902.                     $em->persist($leProduit);
  3903.                     $em->flush();
  3904.                     
  3905.                     //TVA
  3906.                     if($listeProduit['tva'] > 0){
  3907.                         $tva $em->getRepository(TVA::class)
  3908.                                     ->findOneBy(
  3909.                                         array(
  3910.                                             'boutique' => $boutique->getId(),
  3911.                                             'valeur'  => $listeProduit['tva']
  3912.                                         )
  3913.                                     );
  3914.                         if($tva == null){
  3915.                             $tva = new TVA;
  3916.                             $tva->setValeur($listeProduit['tva']);
  3917.                             $em->persist($tva);
  3918.                             $em->flush();
  3919.                         }
  3920.                         
  3921.                         $leProduit->setTva($tva);
  3922.                         
  3923.                     }else{
  3924.                         $tva $em->getRepository(TVA::class)
  3925.                                     ->findOneBy(
  3926.                                         array(
  3927.                                             'boutique' => $boutique->getId(),
  3928.                                             'estPrincipale'  => true
  3929.                                         )
  3930.                                     );
  3931.                         $leProduit->setTva($tva);
  3932.                     }
  3933.                     //Prix
  3934.                     $produitP = new PrixProduit;
  3935.                     $produitP->setValeur($listeProduit['prixUnitaire']);
  3936.                     $leProduit->addPrix($produitP);
  3937.                     $leProduit->setPrixActuel($produitP);
  3938.                     $leProduit->setBoutique($boutique);
  3939.                     $em->persist($produitP);
  3940.                     $em->persist($leProduit);
  3941.                     $em->flush();
  3942.                     
  3943.                 } else{
  3944.                     $leProduit $em->getRepository(Produit::class)
  3945.                         ->findOneById($idDuProduit);
  3946.                 }
  3947.                 
  3948.                 
  3949.                 $produitCommande = new ProduitCommande;
  3950.                 $produitCommande->setProduit($leProduit);
  3951.                 $produitCommande->setCommande($commande);
  3952.                 $quantite = (float)$listeProduit['quantite'];
  3953.                 $produitCommande->setQuantite($quantite);
  3954.                 $produitCommande->setPrix((float)$listeProduit['prixUnitaire']);
  3955.                 $prixDeRevient = (float)$listeProduit['prixDeRevient'];
  3956.                 $produitCommande->setCoutDeRevient($prixDeRevient);
  3957.                 $totalCoutDeRevient $prixDeRevient $quantite;
  3958.                 $produitCommande->setTotalCoutDeRevient($totalCoutDeRevient);
  3959.                 $coutDeRevientCommande += $totalCoutDeRevient;
  3960.                 $produitCommande->setRemise((float)$listeProduit['reduction']);
  3961.                 $produitCommande->setMontantRemise((float)$listeProduit['montantReduction']);
  3962.                 $produitCommande->setTotalHT((float)$listeProduit['totalHT']);
  3963.                 $produitCommande->setTotalHTApresRemise((float)$listeProduit['totalHTApresRemise']);
  3964.                 $produitCommande->setTotalTVA((float)$listeProduit['totalTVA']);
  3965.                 
  3966.                 $produitCommande->setTva((float)$listeProduit['tva']);
  3967.                 $produitCommande->setTotalTTC((float)$listeProduit['totalTTC']);
  3968.                 if($produitCommande->getProduit()->getTypeProduit() != null){
  3969.                     if($produitCommande->getProduit()->getTypeProduit()->getNomInterne() == 'produit'){
  3970.                         if($type == 'invoice'){
  3971.                             
  3972.                             
  3973.                             $leProduit->setStockDisponible($leProduit->getStockDisponible() - $produitCommande->getQuantite());
  3974.                         }
  3975.                     }
  3976.                 }
  3977.                 $em->persist($produitCommande);
  3978.                 array_push($produitCommandes$produitCommande);
  3979.                 
  3980.             }
  3981.             $commande->setCoutDeRevient($coutDeRevientCommande);
  3982.             $em->flush();
  3983.             
  3984.             $pdf = new Html2Pdf('P'$boutique->getSettings()->getFormatPapierImpression(), 'en');
  3985.             $content '';
  3986.             switch($type){
  3987.                 case 'invoice':
  3988.                     //Facture FNE qui
  3989.                     
  3990.                     if($boutique->getApiKeyFNE() != ''){
  3991.                         if($boutique->getSettings()->isGenererAutomatiquementFNE()){
  3992.                             $responseFNE $this->genererFactureFNE($boutique->getSlug(), $commande->getId(), $natureFacture);
  3993.                         }
  3994.                     
  3995.                     }
  3996.                     $commande->setEtat(Commande::ETAT_FACTURE_PROVISOIRE);
  3997.                     
  3998.                     $content $this->renderView('pdf/facture.html.twig', [
  3999.                         'boutique' => $boutique,
  4000.                         'facture' => $commande,
  4001.                         'produits' => $produitCommandes,
  4002.                         'natureFacture' => $natureFacture,
  4003.                         'vehicules' => $vehicules
  4004.                     ]);
  4005.                     
  4006.                     if($boutique->getSettings()->isGenererAutomatiquementEcrituresComptabilite()){
  4007.                         $this->genererEcritureComptableDeVente($boutique$commande);
  4008.                         //Ecriture comptable
  4009.                     }
  4010.                     
  4011.                     $em->flush();
  4012.                     
  4013.                 break;
  4014.                 
  4015.                 case 'proposal':
  4016.                     $commande->setEtat(Commande::ETAT_DEVIS_PROVISOIRE);
  4017.                     
  4018.                     $content $this->renderView('pdf/devis.html.twig', [
  4019.                         'boutique' => $boutique,
  4020.                         'facture' => $commande,
  4021.                         'produits' => $produitCommandes,
  4022.                         'vehicules' => $vehicules
  4023.                     ]);
  4024.                 break;
  4025.                 
  4026.                 
  4027.                 case 'bill_credit':
  4028.                     
  4029.                     $content $this->renderView('pdf/facture_avoir.html.twig', [
  4030.                         'boutique' => $boutique,
  4031.                         'facture' => $commande,
  4032.                         'produits' => $produitCommandes,
  4033.                         'vehicules' => $vehicules
  4034.                     ]);
  4035.                     
  4036.                 break;
  4037.             }
  4038.             
  4039.             
  4040.             $pdf->writeHTML($content);
  4041.             $name $commande->getTypeFacture().$commande->getId().time().$boutique->getId().rand(110000).'.pdf';
  4042.             $lienPhysique $commande->getUploadRootDir().$name;
  4043.                 
  4044.             $commande->setLienPDF($this->getDomain().'/pdf478njkp01/'.$name);
  4045.             $pdf->output($lienPhysique'F');
  4046.             
  4047.             $em->flush();
  4048.             
  4049.             return $this->render('admin/response_new_sale.html.twig', [
  4050.                    'boutique' => $boutique,
  4051.                    'commande' => $commande,
  4052.                    'responseFNE' => $responseFNE,
  4053.                    'vehicules' => $vehicules
  4054.                    
  4055.                 ]);
  4056.             
  4057.             
  4058.             /*
  4059.             return $this->render('admin/facture.html.twig', [
  4060.                    'boutique' => $boutique,
  4061.                    'commande' => $commande,
  4062.                    'typeFacture' => $typeFacture,
  4063.                    'client' => $client,
  4064.                    'produitCommandes' => $produitCommandes,
  4065.                    'listeProduit' => $listeProduit,
  4066.                    'montantHT' => $montantHT,
  4067.                    'montantTVA' => $montantTVA,
  4068.                    'montantTTC' => $montantTTC,
  4069.                    'userBoutique' => $userBoutique
  4070.                 ]);
  4071.             */
  4072.             
  4073.         }
  4074.     
  4075.         return $this->render('admin/nouvelle_commande.html.twig', [
  4076.            'boutique' => $boutique,
  4077.            'produits' => $produits,
  4078.            'modeleReglements' => $modeleReglements,
  4079.            'tiers' => $tiers,
  4080.            'editMode' => $editMode,
  4081.            'userBoutique' => $userBoutique,
  4082.            'responseFNE' => $responseFNE,
  4083.            'type' => $type,
  4084.            'vehicules' => $vehicules
  4085.           
  4086.         ]);
  4087.     }
  4088.     public function genererEcritureComptableDeVente($boutique$commande)
  4089.     {
  4090.         $em $this->getDoctrine()
  4091.                     ->getManager();
  4092.                     
  4093.         $groupeEcritureComptable = new GroupeEcritureComptable;
  4094.         $groupeEcritureComptable->setBoutique($boutique);
  4095.         $libelle 'Vente client';
  4096.         if($commande->getTiers() != null){
  4097.             $libelle 'Vente à ' $commande->getTiers()->getNom();
  4098.         }
  4099.         $groupeEcritureComptable->setLibelleEcriture($libelle);
  4100.         $groupeEcritureComptable->setDebit($commande->getTotalTTC());
  4101.         $groupeEcritureComptable->setCredit($commande->getTotalTTC());
  4102.         $groupeEcritureComptable->setLaDate($commande->getLaDate());
  4103.         $groupeEcritureComptable->setNumeroPiece($commande->getNumero());
  4104.         $groupeEcritureComptable->setAnnee($commande->getLaDate()->format('Y'));
  4105.         $groupeEcritureComptable->setMois($commande->getLaDate()->format('m'));
  4106.         $em->persist($groupeEcritureComptable);
  4107.         $em->flush();
  4108.         //Débit
  4109.         $ecritureComptable = new EcritureComptable;
  4110.         $ecritureComptable->setBoutique($boutique);
  4111.         $ecritureComptable->setGroupeEcritureComptable($groupeEcritureComptable);
  4112.         $ecritureComptable->setLeJournal($boutique->getSettings()->getJournalDeVente());
  4113.         $groupeEcritureComptable->setLeJournal($boutique->getSettings()->getJournalDeVente());
  4114.         $compteClient $em->getRepository(Compte::class)
  4115.                                     ->findOneBy(
  4116.                                         array(
  4117.                                             'numero' => '411',
  4118.                                             'boutique' =>$boutique->getId()
  4119.                                         )
  4120.                                     );
  4121.         $compteClient->setSolde($compteClient->getSolde() + $commande->getTotalTTC());
  4122.         $ecritureComptable->setCompte($compteClient);
  4123.         $ecritureComptable->setNumeroPiece($commande->getNumero());
  4124.         $nomClient '';
  4125.         if($commande->getTiers() != null){
  4126.             $nomClient =  ' à '.$commande->getTiers()->getNom();
  4127.         }
  4128.         $ecritureComptable->setLibelleEcriture('Vente'.$nomClient);
  4129.         $ecritureComptable->setDebit($commande->getTotalTTC());
  4130.         $ecritureComptable->setSolde($compteClient->getSolde());
  4131.         $ecritureComptable->setLaDate($commande->getLaDate());
  4132.         $ecritureComptable->setAnnee($commande->getLaDate()->format('Y'));
  4133.         $ecritureComptable->setMois($commande->getLaDate()->format('m'));
  4134.                     
  4135.         $em->persist($ecritureComptable);
  4136.         $ecritureComptable = new EcritureComptable;
  4137.         $ecritureComptable->setBoutique($boutique);
  4138.         $ecritureComptable->setGroupeEcritureComptable($groupeEcritureComptable);
  4139.         
  4140.         //Crédit
  4141.         $ecritureComptable->setLeJournal($boutique->getSettings()->getJournalDeVente());
  4142.         $compte $em->getRepository(Compte::class)
  4143.                     ->findOneBy(
  4144.                         array(
  4145.                                 'numero' => '701',
  4146.                                 'boutique' => $boutique->getId()
  4147.                             )
  4148.                         );
  4149.         
  4150.         $compte->setSolde($compte->getSolde() - $commande->getTotalHTApresRemise() );
  4151.         $ecritureComptable->setCompte($compte);
  4152.         $ecritureComptable->setNumeroPiece($commande->getNumero());
  4153.                     
  4154.         $ecritureComptable->setLibelleEcriture('Vente'.$nomClient);
  4155.         $ecritureComptable->setCredit($commande->getTotalHTApresRemise());
  4156.         $ecritureComptable->setSolde($compte->getSolde());
  4157.         $ecritureComptable->setLaDate($commande->getLaDate());
  4158.         $ecritureComptable->setAnnee($commande->getLaDate()->format('Y'));
  4159.         $ecritureComptable->setMois($commande->getLaDate()->format('m'));
  4160.                     
  4161.                     
  4162.         $em->persist($ecritureComptable);
  4163.         //TVA pour une entreprise qui facture la TVA
  4164.         if($commande->getTotalTVA() > 0){
  4165.             $ecritureComptable = new EcritureComptable;
  4166.             $ecritureComptable->setBoutique($boutique);
  4167.             $ecritureComptable->setGroupeEcritureComptable($groupeEcritureComptable);
  4168.                         
  4169.             $ecritureComptable->setLeJournal($boutique->getSettings()->getJournalDeVente());
  4170.             $compte $em->getRepository(Compte::class)
  4171.                             ->findOneBy(
  4172.                                 array(
  4173.                                     'numero' => '4431',
  4174.                                     'boutique' => $boutique->getId()
  4175.                                 )
  4176.                             );
  4177.             $compte->setSolde($compte->getSolde() - $commande->getTotalTVA() );
  4178.             $ecritureComptable->setCompte($compte);
  4179.             $ecritureComptable->setNumeroPiece($commande->getNumero());
  4180.                         
  4181.             $ecritureComptable->setLibelleEcriture('Vente'.$nomClient);
  4182.             $ecritureComptable->setCredit($commande->getTotalTVA());
  4183.             $ecritureComptable->setSolde($compte->getSolde());
  4184.             $ecritureComptable->setLaDate($commande->getLaDate());
  4185.             $ecritureComptable->setAnnee($commande->getLaDate()->format('Y'));
  4186.             $ecritureComptable->setMois($commande->getLaDate()->format('m'));
  4187.                     
  4188.                         
  4189.             $em->persist($ecritureComptable);
  4190.         }
  4191.         $em->flush();
  4192.     }
  4193.     
  4194.     /**
  4195.       * @Route("/{slug}/generer-facture-fne/{id}", name="admin_url_generer_facture_fne")
  4196.     */
  4197.     public function urlGenererFactureFNEAction(Request $request$slug$id)
  4198.     {
  4199.         
  4200.         $em $this->getDoctrine()
  4201.                     ->getManager();
  4202.         $boutique $em->getRepository(Boutique::class)
  4203.                         ->findOneBySlug($slug);
  4204.         $commande $em->getRepository(Commande::class)
  4205.                         ->findOneById($id);
  4206.         
  4207.         $produitCommandes $em->getRepository(ProduitCommande::class)
  4208.                             ->findByCommande($commande);
  4209.         $reponse '';
  4210.         $vehicules = array( 222328);
  4211.         if($boutique->getApiKeyFNE() != ''){
  4212.             $reponse $this->genererFactureFNE($slug$id$commande->getNatureFacture());
  4213.             //$reponse = json_decode($reponse);
  4214.             if(isset($reponse['invoice']['id'])){
  4215.                 $commande->setIdFactureFNE($reponse['invoice']['id']);
  4216.             }
  4217.             if(isset($reponse['token'])){
  4218.                 $commande->seTtokenFNE($reponse['token']);
  4219.             }
  4220.             if(isset($reponse['balance_sticker'])){
  4221.                 $boutique->setSoldeTimbreFNE($reponse['balance_sticker']);
  4222.             }
  4223.             if(isset($reponse['balance_sticker'])){
  4224.                 $boutique->setSoldeTimbreFNE($reponse['balance_sticker']);
  4225.             }
  4226.             if(isset($reponse['balance_funds'])){
  4227.                 $boutique->setSoldeTimbreFNE($reponse['balance_funds']);
  4228.             }
  4229.             
  4230.             
  4231.             $em->flush();
  4232.         
  4233.         }
  4234.         
  4235.         $pdf = new Html2Pdf('P'$boutique->getSettings()->getFormatPapierImpression(), 'fr');
  4236.     
  4237.         $content $this->renderView('pdf/facture.html.twig', [
  4238.                     'boutique' => $boutique,
  4239.                     'facture' => $commande,
  4240.                     'produits' => $produitCommandes,
  4241.                     'natureFacture' => $commande->getNatureFacture(),
  4242.                     'vehicules' => $vehicules
  4243.                 ]);
  4244.         $pdf->writeHTML($content);
  4245.         $name $commande->getTypeFacture().$commande->getId().time().$boutique->getId().rand(110000).'.pdf';
  4246.         $lienPhysique $commande->getUploadRootDir().$name;
  4247.                 
  4248.         $commande->setLienPDF($this->getDomain().'/pdf478njkp01/'.$name);
  4249.         $pdf->output($lienPhysique'F');
  4250.         $em->flush();
  4251.         return $this->redirectToRoute('admin.invoices', array('slug' => $boutique->getSlug()));
  4252.         return $this->render('admin/admin_generer_facture_fne.html.twig', [
  4253.            'boutique' => $boutique,
  4254.            'content' => $content,
  4255.            'userBoutique' => $userBoutique
  4256.         ]);
  4257.         
  4258.     }
  4259.     public function genererFactureFNE($slug$idCommande$invoiceType 'sale')
  4260.     {
  4261.         
  4262.         $em $this->getDoctrine()
  4263.                     ->getManager();
  4264.         $boutique $em->getRepository(Boutique::class)
  4265.                         ->findOneBySlug($slug);
  4266.         $commande $em->getRepository(Commande::class)
  4267.                         ->findOneById($idCommande);
  4268.         $user $this->getUser();
  4269.         $userBoutique $em->getRepository(UserBoutique::class)
  4270.                         ->findOneBy(
  4271.                             array(
  4272.                                 'user' => $user,
  4273.                                 'boutique' => $boutique
  4274.                             )
  4275.                         );
  4276.         $url $boutique->getUrlFNEDeBase().'/external/invoices/sign';
  4277.         $produitCommandes $em->getRepository(ProduitCommande::class)
  4278.                                 ->findByCommande($commande);
  4279.                                 
  4280.         $globalCustomTaxes = array();
  4281.         
  4282.         $items = array();
  4283.         foreach($produitCommandes as $produitCommande){
  4284.             $tvas = array();
  4285.             $customTaxes = array();
  4286.             if($invoiceType == 'sale'){
  4287.                 if($produitCommande->getProduit()->getTVA() != null){
  4288.                     array_push($tvas$produitCommande->getProduit()->getTVA()->getLibelleInterne());
  4289.                     $nested = array(
  4290.                         'name' => $produitCommande->getProduit()->getTVA()->getLibelleInterne(),
  4291.                         'amount' =>$produitCommande->getProduit()->getTVA()->getValeur()
  4292.                     );
  4293.                     $nested  json_encode($nested);
  4294.                     array_push($customTaxes$nested);
  4295.                 }
  4296.             }else{
  4297.                 array_push($tvas'TVAD');
  4298.                     $nested = array(
  4299.                         'name' => $produitCommande->getProduit()->getTVA()->getLibelleInterne(),
  4300.                         'amount' =>0
  4301.                     );
  4302.                     $nested  json_encode($nested);
  4303.                     array_push($customTaxes$nested);
  4304.             }
  4305.             
  4306.             
  4307.             
  4308.             $item = array(
  4309.                     //'taxes' => $tvas,
  4310.                     //'customTaxes' => $customTaxes,
  4311.                     'reference' => $produitCommande->getProduit()->getReference(),
  4312.                     'description' =>  $produitCommande->getProduit()->getNom(),
  4313.                     'quantity' => $produitCommande->getQuantite(),
  4314.                     'amount' => $produitCommande->getPrix(),
  4315.                     'discount' => $produitCommande->getRemisePourcentage(),
  4316.                     'measurementUnit' => $produitCommande->getProduit()->getUniteDeMesure()
  4317.             );
  4318.             if($invoiceType == 'sale'){
  4319.                 $item['taxes'] = $tvas;
  4320.             }
  4321.             array_push($items$item);
  4322.         }
  4323.         
  4324.         $clientNcc =  '';
  4325.         if($invoiceType == 'sale'){
  4326.             if($commande->getTiers() != null){
  4327.                 $clientNcc $commande->getTiers()->getCodeTVA();
  4328.             }
  4329.             
  4330.         }
  4331.         $template 'B2C';
  4332.         $clientCompanyName $commande->getClientFinalNom();
  4333.         $clientPhone $commande->getClientFinalNumero();
  4334.         $clientEmail '';
  4335.         if($commande->getTiers() != null){
  4336.             $template $commande->getTiers()->getTypeClient();
  4337.             $clientCompanyName $commande->getTiers()->getNom();
  4338.             $clientPhone $commande->getTiers()->getTelephone();
  4339.             $clientEmail $commande->getTiers()->getEmail();
  4340.         }
  4341.         $content = array(
  4342.             
  4343.             'invoiceType' => $invoiceType ,
  4344.             'paymentMethod'=> $commande->getMoyenDePaiement(),
  4345.             'template' => $template,
  4346.             'isRne' => false,
  4347.             'clientNcc' => $clientNcc,
  4348.             'clientCompanyName' => $clientCompanyName,
  4349.             'clientPhone' => $clientPhone,
  4350.             'clientEmail' => $clientEmail,
  4351.             'clientSellerName' => $user->getNomComplet(),
  4352.             'pointOfSale' => $userBoutique->getNomPointDeVenteFNE(),
  4353.             'establishment' =>  $userBoutique->getNomEtablissementFNE(),
  4354.             'commercialMessage' => $commande->getTitreDocument(),
  4355.             'footer' => 'Arrêtée la presente facture à la somme de '.$commande->getMontantEnLettre().' '.$boutique->getSettings()->getDevise(),
  4356.             //'foreignCurrency' => '',
  4357.             //'foreignCurrencyRate' => 0,
  4358.             'items' => $items,
  4359.             
  4360.             'discount' => $commande->getRemise()
  4361.         );
  4362.         
  4363.         if($invoiceType == 'sale'){
  4364.             $content['customTaxes'] = $globalCustomTaxes;
  4365.         }
  4366.         
  4367.         $content json_encode($content);
  4368.         $ch curl_init($url);
  4369.         curl_setopt($chCURLOPT_RETURNTRANSFERtrue);
  4370.         curl_setopt($chCURLOPT_HTTPHEADER, ['Content-Type: application/json''Authorization: Bearer '.$boutique->getApiKeyFNE()]);
  4371.         curl_setopt($chCURLOPT_POSTFIELDS$content);
  4372.         $serverOutput curl_exec($ch);
  4373.         curl_close($ch);
  4374.         
  4375.         $response = new JsonResponse;
  4376.         
  4377.         
  4378.         //$response->setContent(json_encode($serverOutput));
  4379.         //return $response;
  4380.         $serverOutput json_decode($serverOutputtrue);
  4381.         if(isset($serverOutput['invoice'])){
  4382.             $commande->setIdFactureFNE($serverOutput['invoice']['id']);
  4383.             $commande->seTtokenFNE($serverOutput['token']);
  4384.             //$boutique->setSoldeTimbreFNE($serverOutput['balance_sticker']);
  4385.             if(isset($serverOutput['balance_funds'])){
  4386.                 $boutique->setSoldeTimbreFNE($serverOutput['balance_funds']);
  4387.             }
  4388.             if(isset($serverOutput['balance_sticker'])){
  4389.                 $boutique->setSoldeTimbreFNE($serverOutput['balance_sticker']);
  4390.             }
  4391.             
  4392.             
  4393.             //Mettre aussi les produitCommande Ajour pour d'eventuel facture d'avoir
  4394.             
  4395.             $itemsRetournes $serverOutput['invoice']['items'];
  4396.             foreach($itemsRetournes as $itemsRetourne){
  4397.                 $pro $em->getRepository(Produit::class)
  4398.                             ->findOneBy(
  4399.                                 array(
  4400.                                     'boutique' => $boutique,
  4401.                                     'nom' => $itemsRetourne['description'],
  4402.                                     'reference' => $itemsRetourne['reference']
  4403.                                 )
  4404.                             );
  4405.                 if($pro != null){
  4406.                     $proCom $em->getRepository(ProduitCommande::class)
  4407.                             ->findOneBy(
  4408.                                 array(
  4409.                                     'commande' => $commande->getId(),
  4410.                                     'produit' => $pro->getId()
  4411.                                 )
  4412.                             );
  4413.                     if($proCom != null){
  4414.                         $proCom->setIdProduitPourFactureDAvoirFNE($itemsRetourne['id']);
  4415.                         $em->persist($proCom);
  4416.                     }
  4417.                 
  4418.                 }
  4419.             }
  4420.             
  4421.             $em->flush();
  4422.         }
  4423.         return $serverOutput;
  4424.         
  4425.     }
  4426.     
  4427.     
  4428.     /**
  4429.       * @Route("/{slug}/url-generer-facture-d-avoir-fne/{id}", name="admin_url_generer_facture_d_avoir_fne")
  4430.     */
  4431.     public function urlGenererFactureDAvoirFNEAction(Request $requestChiffreEnLettre $chiffreEnLettre$slug$id)
  4432.     {
  4433.         
  4434.         $em $this->getDoctrine()
  4435.                     ->getManager();
  4436.         $boutique $em->getRepository(Boutique::class)
  4437.                         ->findOneBySlug($slug);
  4438.         $commande $em->getRepository(Commande::class)
  4439.                         ->findOneById($id);
  4440.         $user $this->getUser();
  4441.         $userBoutique $em->getRepository(UserBoutique::class)
  4442.                         ->findOneBy(
  4443.                             array(
  4444.                                 'user' => $user,
  4445.                                 'boutique' => $boutique
  4446.                             )
  4447.                         );
  4448.         $produitCommandes $em->getRepository(ProduitCommande::class)
  4449.                                 ->findByCommande($commande);
  4450.         $reponse '';
  4451.         
  4452.         if($request->getMethod() == 'POST'){
  4453.                 
  4454.             $chiffreEnLettre = new ChiffreEnLettre;
  4455.             if($boutique->getApiKeyFNE() != ''){
  4456.                 $reponse $this->genererFactureDAvoirFNE($chiffreEnLettre$boutique->getSlug(), $commande->getId());
  4457.             }
  4458.         }
  4459.         
  4460.         
  4461.          return $this->render('admin/url_generer_facture_d_avoir_fne.html.twig', [
  4462.            'boutique' => $boutique,
  4463.            'reponse' => $reponse,
  4464.            'userBoutique' => $userBoutique,
  4465.            'produitCommandes' => $produitCommandes
  4466.         ]);
  4467.     }
  4468.     
  4469.     public function genererFactureDAvoirFNE(ChiffreEnLettre $chiffreEnLettre$slug$id)
  4470.     {
  4471.         
  4472.         $em $this->getDoctrine()
  4473.                     ->getManager();
  4474.         $boutique $em->getRepository(Boutique::class)
  4475.                         ->findOneBySlug($slug);
  4476.         $commande $em->getRepository(Commande::class)
  4477.                         ->findOneById($id);
  4478.         $user $this->getUser();
  4479.         $userBoutique $em->getRepository(UserBoutique::class)
  4480.                         ->findOneBy(
  4481.                             array(
  4482.                                 'user' => $user,
  4483.                                 'boutique' => $boutique
  4484.                             )
  4485.                         );
  4486.         $url $boutique->getUrlFNEDeBase().'/external/invoices/'.$commande->getIdFactureFNE().'/refund';
  4487.         
  4488.         $produitCommandes $em->getRepository(ProduitCommande::class)
  4489.                                 ->findByCommande($commande);
  4490.                                 
  4491.         
  4492.             
  4493.             $items = array();
  4494.             $avoir = new Commande;
  4495.             $avoir->setBoutique($boutique);
  4496.             $avoir->setTypeFacture('bill_credit');
  4497.             $avoir->setNumero($this->getNumero('bill_credit'$boutique));
  4498.             $avoir->setTiers($commande->getTiers());
  4499.             $avoir->setIdFactureDeBase($commande->getId());
  4500.             $em->persist($avoir);
  4501.             
  4502.             $em->flush();
  4503.             $avoirProduits = array();
  4504.             foreach($produitCommandes as $produitCommande){
  4505.                     $idProduitPourFactureDAvoirFNE $_POST['idProduit'.$produitCommande->getProduit()->getId()];
  4506.                     $quantiteRetournee = (float)$_POST['quantite'.$produitCommande->getProduit()->getId()];
  4507.                 if($quantiteRetournee && $quantiteRetournee <= $produitCommande->getQuantite()){
  4508.                     $item = array(
  4509.                             'id' => $idProduitPourFactureDAvoirFNE,
  4510.                             'quantity' => $quantiteRetournee,
  4511.                     );
  4512.                     
  4513.                     array_push($items$item);
  4514.                     $avoirProduit = new ProduitCommande;
  4515.                     $avoirProduit->setCommande($avoir);
  4516.                     $avoirProduit->setProduit($produitCommande->getProduit());
  4517.                     $avoirProduit->setQuantite($quantiteRetournee);
  4518.                     $avoirProduit->setPrix($produitCommande->getPrix());
  4519.                     $totalHt $quantiteRetournee $produitCommande->getPrix();
  4520.                     
  4521.                     $totalTVA =  $produitCommande->getTotalTva() * $quantiteRetournee/$produitCommande->getQuantite();
  4522.                     $totalTTC $totalHt $totalTVA;
  4523.                     $avoirProduit->setTotalHT($totalHt);
  4524.                     $avoirProduit->setTva($totalTVA);
  4525.                     $avoirProduit->setTotalTTC($totalTTC);
  4526.                     $em->persist($avoirProduit);
  4527.                     array_push($avoirProduits$avoirProduit);
  4528.                     $avoir->setTotalHT($avoir->getTotalHT()+ $totalHt);
  4529.                     $avoir->setTotalHTApresRemise($avoir->getTotalHTApresRemise() + $totalHt);
  4530.                     $avoir->setTotalTTC($avoir->getTotalTTC()+ $totalTTC);
  4531.                     $avoir->setTotalTVA($avoir->getTotalTVA()+ $totalTVA);
  4532.                 }
  4533.             }
  4534.             $avoir->setmontantEnLettre($chiffreEnLettre->Conversion($avoir->getTotalTTC()));
  4535.             $em->flush();
  4536.             $pdf = new Html2Pdf('P'$boutique->getSettings()->getFormatPapierImpression(), 'en');
  4537.                 
  4538.                     
  4539.             $pdfContent $this->renderView('pdf/facture_avoir.html.twig', [
  4540.                         'boutique' => $boutique,
  4541.                         'facture' => $avoir,
  4542.                         'produits' => $avoirProduits,
  4543.                         'commandeDeBasse' => $commande
  4544.                 ]);
  4545.             $pdf->writeHTML($pdfContent);
  4546.             $name $avoir->getTypeFacture().$avoir->getId().time().$boutique->getId().rand(110000).'.pdf';
  4547.             $lienPhysique $avoir->getUploadRootDir().$name;
  4548.                 
  4549.             $avoir->setLienPDF($this->getDomain().'/pdf478njkp01/'.$name);
  4550.             $pdf->output($lienPhysique'F');
  4551.             // Fin facture PDF
  4552.             
  4553.             $em->flush();
  4554.             $content = array(
  4555.                 'id' => $commande->getIdFactureFNE(),
  4556.                 'items' => $items
  4557.             );
  4558.             
  4559.             
  4560.             $content json_encode($content);
  4561.             
  4562.             $ch curl_init($url);
  4563.             curl_setopt($chCURLOPT_RETURNTRANSFERtrue);
  4564.             curl_setopt($chCURLOPT_HTTPHEADER, ['Content-Type: application/json''Authorization: Bearer '.$boutique->getApiKeyFNE()]);
  4565.             curl_setopt($chCURLOPT_POSTFIELDS$content);
  4566.             $serverOutput curl_exec($ch);
  4567.             curl_close($ch);
  4568.             
  4569.             $response = new JsonResponse;
  4570.             
  4571.             
  4572.             //$response->setContent(json_encode($serverOutput));
  4573.             //return $response;
  4574.             $serverOutput json_decode($serverOutputtrue);
  4575.             //$commande->setIdFactureFNE($serverOutput['invoice']['id']);
  4576.             if(isset($serverOutput['token'])){
  4577.                 $avoir->seTtokenFNE($serverOutput['token']);
  4578.             }
  4579.             //$boutique->setSoldeTimbreFNE($serverOutput['balance_sticker']);
  4580.             if(isset($serverOutput['balance_funds'])){
  4581.                 $boutique->setSoldeTimbreFNE($serverOutput['balance_funds']);
  4582.             }
  4583.             if(isset($serverOutput['balance_sticker'])){
  4584.                 $boutique->setSoldeTimbreFNE($serverOutput['balance_sticker']);
  4585.             }
  4586.             
  4587.             
  4588.             $em->flush();
  4589.             return $serverOutput;
  4590.         
  4591.         
  4592.     }
  4593.     
  4594.     //Vente
  4595.     /**
  4596.      * @Route("/{slug}/change-sale-state/{type}/{id}/{state}", name="admin.change_sale_state")
  4597.      * @return \Symfony\Component\HttpFoundation\Response
  4598.      */
  4599.     public function changeSaleStateAction(Request $request$slug$type$id$state)
  4600.     {
  4601.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  4602.            return $this->redirectToRoute('security_login');
  4603.         }
  4604.         
  4605.         $em $this->getDoctrine()
  4606.                     ->getManager();
  4607.                     
  4608.         $boutique  $em->getRepository(Boutique::class)
  4609.                         ->findOneBySlug($slug);
  4610.     
  4611.         $user $this->getUser();
  4612.         $userBoutique $em->getRepository(UserBoutique::class)
  4613.                         ->findOneBy(
  4614.                             array(
  4615.                             'user' => $user->getId(),
  4616.                             'boutique' => $boutique->getId()
  4617.                             )
  4618.                         );
  4619.         $commande  $em->getRepository(Commande::class)
  4620.                         ->findOneBy(
  4621.                             array(
  4622.                                 'boutique' => $boutique->getId(),
  4623.                                 'id' => $id
  4624.                         ));
  4625.         if($commande->getNumero() == ''){
  4626.             $commande->setNumero($this->getNumero($type$boutique));
  4627.         }
  4628.         $commande->setEtat($state);
  4629.         $em->flush();
  4630.         
  4631.         //Produit commande du devis
  4632.                     
  4633.         $produitCommandesDevis $em->getRepository(ProduitCommande::class)
  4634.                                 ->findByCommande($commande);
  4635.         //
  4636.         $produitCommandes = array();
  4637.         
  4638.         
  4639.         switch($type){
  4640.             case 'proposal':
  4641.                 
  4642.                     $facture = new  Commande;
  4643.                     $facture->setTypeFacture('invoice');
  4644.                     $facture->setNatureFacture('sale');
  4645.                     $facture->setEtat(Commande::ETAT_FACTURE_FINALISE);
  4646.                     $facture->setLaDate(new \DateTime());
  4647.                     $facture->setTotalHT($commande->getTotalHT());
  4648.                     $facture->setTotalHTApresRemise($commande->getTotalHTApresRemise());
  4649.                     $facture->setTotalTVA($commande->getTotalTVA());
  4650.                     $facture->setTotalTTC($commande->getTotalTTC());
  4651.                     $facture->setResteAPayer($commande->getTotalTTC());
  4652.                     $facture->setCoutDeRevient($commande->getCoutDeRevient());
  4653.                     
  4654.                     $facture->setRemise($commande->getRemise());
  4655.                     $facture->setRemisePourcentage($commande->getRemisePourcentage());
  4656.                     $facture->setMontantEnLettre($commande->getMontantEnLettre());
  4657.                     $facture->setBoutique($commande->getBoutique());
  4658.                     $facture->setTiers($commande->getTiers());
  4659.                     
  4660.                     $facture->setNumero($this->getNumero('invoice'$boutique));
  4661.                     $em->persist($facture);
  4662.                     $em->flush();
  4663.                     $this->genererEcritureComptableDeVente($boutique$facture);
  4664.                     
  4665.                     if($boutique->getApiKeyFNE() != ''){
  4666.                         if($boutique->getSettings()->isGenererAutomatiquementFNE()){
  4667.                             $responseFNE $this->genererFactureFNE($boutique->getSlug(), $facture->getId(), $facture->getNatureFacture());
  4668.                         }
  4669.                     
  4670.                     }
  4671.                     foreach($produitCommandesDevis as $produitCommandeDevis){
  4672.                         $prodCom = new ProduitCommande;
  4673.                         $prodCom->setProduit($produitCommandeDevis->getProduit());
  4674.                         $prodCom->setCommande($facture);
  4675.                         $prodCom->setQuantite($produitCommandeDevis->getQuantite());
  4676.                         $prodCom->setPrix($produitCommandeDevis->getPrix());
  4677.                         $prodCom->setRemise($produitCommandeDevis->getRemise());
  4678.                         $prodCom->setTotalHT($produitCommandeDevis->getTotalHT());
  4679.                         $prodCom->setTotalHTApresRemise($produitCommandeDevis->getTotalHTApresRemise());
  4680.                         $prodCom->setCutDeRevient($produitCommandeDevis->getCoutDeRevient());
  4681.                         $prodCom->setTotalCoutDeRevient($produitCommandeDevis->getTotalCoutDeRevient());
  4682.                         
  4683.                         
  4684.                         $prodCom->setTotalTVA($produitCommandeDevis->getTotalTVA());
  4685.                         $prodCom->setTotalTTC($produitCommandeDevis->getTotalTTC());
  4686.                         $prodCom->setTva($produitCommandeDevis->getTva());
  4687.                         if($produitCommandeDevis->getProduit()->getTypeProduit() == 'produit'){
  4688.                             $produitCommandeDevis->getProduit()->setStockDisponible($produitCommandeDevis->getProduit()->getStockDisponible() - $produitCommandeDevis->getQuantite());
  4689.                         }
  4690.                         if($produitCommandeDevis->getProduit()->getTypeProduit() == 'produit'){
  4691.                             if($type == 'invoice'){
  4692.                                 
  4693.                                 $produitVendu $em->getRepository(Produit::class)
  4694.                                                 ->findOneById($idDuProduit);
  4695.                                 $produitVendu->setStockDisponible($produitVendu->getStockDisponible() - $produitCommandeDevis->getQuantite());
  4696.                             }
  4697.                         }
  4698.                         $em->persist($prodCom);
  4699.                         array_push($produitCommandes$prodCom);
  4700.                     }
  4701.                     
  4702.                     $pdf = new Html2Pdf('P'$boutique->getSettings()->getFormatPapierImpression(), 'en');
  4703.                     
  4704.                     $content $this->renderView('pdf/facture.html.twig', [
  4705.                         'boutique' => $boutique,
  4706.                         'facture' => $facture,
  4707.                         'produits' => $produitCommandes
  4708.                     ]);
  4709.                     
  4710.                     $pdf->writeHTML($content);
  4711.                     $lienPhysique $facture->getUploadRootDir().$facture->getTypeFacture().$facture->getId().'.pdf';
  4712.                 
  4713.                     $facture->setLienPDF($this->getDomain().'/pdf478njkp01/'.$facture->getTypeFacture().$facture->getId().'.pdf');
  4714.                     $pdf->output($lienPhysique'F');
  4715.                     
  4716.                     $commande->setEtat(Commande::ETAT_DEVIS_FINALISE);
  4717.                     $em->flush();
  4718.                 return $this->redirectToRoute('admin.proposals', array('slug' => $boutique->getSlug()));
  4719.             
  4720.             break;
  4721.             
  4722.             case 'invoice':
  4723.                     $pdf = new Html2Pdf('P'$boutique->getSettings()->getFormatPapierImpression(), 'en');
  4724.                     
  4725.                     $content $this->renderView('pdf/facture.html.twig', [
  4726.                         'boutique' => $boutique,
  4727.                         'facture' => $commande,
  4728.                         'produits' => $produitCommandes
  4729.                     ]);
  4730.                     
  4731.                     $pdf->writeHTML($content);
  4732.                     $lienPhysique $commande->getUploadRootDir().$commande->getTypeFacture().$commande->getId().'.pdf';
  4733.                 
  4734.                     $commande->setLienPDF($this->getDomain().'/pdf478njkp01/'.$commande->getTypeFacture().$commande->getId().'.pdf');
  4735.                     $commande->setEtat(Commande::ETAT_FACTURE_FINALISE);
  4736.                     $pdf->output($lienPhysique'F');
  4737.                     
  4738.                     $em->flush();
  4739.                 return $this->redirectToRoute('admin.invoices', array('slug' => $boutique->getSlug()));
  4740.             break;
  4741.         }
  4742.         
  4743.         
  4744.         return $this->redirectToRoute('admin.invoices', array('slug' => $boutique->getSlug()));
  4745.         
  4746.     }
  4747.     
  4748.     
  4749.     /**
  4750.      * @Route("/{slug}/check-customer-vat-status", name="admin.check_customer_vat_status")
  4751.      * @return \Symfony\Component\HttpFoundation\Response
  4752.      */
  4753.     public function checkCustomerVATStatusAction(Request $request$slug)
  4754.     {
  4755.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  4756.            return $this->redirectToRoute('security_login');
  4757.         }
  4758.         $em $this->getDoctrine()
  4759.                     ->getManager();
  4760.         $response = new JsonResponse;
  4761.         $response->headers->set('Access-Control-Allow-Origin''*');
  4762.         $response->headers->set('Content-Type''application/json');
  4763.         
  4764.         $boutique $em->getRepository(Boutique::class)
  4765.                                     ->findOneBySlug($slug);
  4766.                         
  4767.         $data = array();
  4768.         
  4769.         if($request->getMethod() == 'POST'){
  4770.             $id $_POST['id'];
  4771.             $customer  $em->getRepository(Tiers::class)
  4772.                         ->findOneBy(
  4773.                             array(
  4774.                                 'boutique' => $boutique->getId(),
  4775.                                 'id' => $id
  4776.                         ));
  4777.             
  4778.             $data = array(
  4779.                 "assujettiALaTVA" => $customer->getAssujettiALaTVA()
  4780.             );
  4781.         }
  4782.         
  4783.         $response->setContent(json_encode($data));
  4784.         return $response;
  4785.     }
  4786.     
  4787.     
  4788.     //Vente
  4789.     /**
  4790.      * @Route("/{slug}/edit-sale/{type}/{id}", name="admin.edit_sale")
  4791.      * @return \Symfony\Component\HttpFoundation\Response
  4792.      */
  4793.     public function editSaleAction(Request $requestChiffreEnLettre $chiffreEnLettre$slug$type$id)
  4794.     {
  4795.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  4796.            return $this->redirectToRoute('security_login');
  4797.         }  
  4798.         $em $this->getDoctrine()
  4799.                     ->getManager();
  4800.         $boutique  $em->getRepository(Boutique::class)
  4801.                         ->findOneBySlug($slug);
  4802.     
  4803.         $produits  $em->getRepository(Produit::class)
  4804.                         ->findByBoutique($boutique->getId());
  4805.     
  4806.         $commande  $em->getRepository(Commande::class)
  4807.                         ->findOneBy(
  4808.                             array(
  4809.                                 'boutique' => $boutique->getId(),
  4810.                                 'id' => $id
  4811.                         ));
  4812.         
  4813.         $ancienProduitCommandes  $em->getRepository(ProduitCommande::class)
  4814.                         ->findBy(
  4815.                             array(
  4816.                                 'commande' => $commande->getId()
  4817.                         ));
  4818.                         
  4819.         $modeleReglements $em->getRepository(ModeleReglement::class)
  4820.                                 ->findByBoutique($boutique);        
  4821.         $tiers $em->getRepository(Tiers::class)
  4822.                                 ->findByBoutique($boutique);        
  4823.         
  4824.         $user $this->getUser();
  4825.         $userBoutique $em->getRepository(UserBoutique::class)
  4826.                         ->findOneBy(
  4827.                             array(
  4828.                             'user' => $user->getId(),
  4829.                             'boutique' => $boutique->getId()
  4830.                             )
  4831.                         );
  4832.         $vehicules = array(1222328);
  4833.     
  4834.         $ok_soumission '';
  4835.         $error '';
  4836.         $editMode 'edit';
  4837.         if($request->getMethod() == 'POST'){
  4838.             $typeFacture $_POST['typeFacture'];
  4839.             $observation $_POST['observation'];
  4840.             $titreDocument $_POST['titreDocument'];
  4841.             $modeleReglement $_POST['modeleReglement'];
  4842.             $moyenDePaiement $_POST['moyenDePaiement'];
  4843.             $client $_POST['client'];
  4844.             $dateCommande $_POST['dateCommande'];
  4845.             
  4846.             $montantHT = (float)$_POST['montantHT'];
  4847.             $remise =   (float)$_POST['remise'];
  4848.             $remisePourcentage =  (float)$_POST['remisePourcentage'];
  4849.             $totalHTApresRemise =  (float)$_POST['totalHTApresRemise'];
  4850.             $montantTVA = (float)$_POST['montantTVA'];
  4851.             $montantTTC = (float)$_POST['montantTTC'];
  4852.             $matriculeVehicule $_POST['matriculeVehicule'];
  4853.             $marqueVehicule $_POST['marqueVehicule'];
  4854.             $kilometrageVehicule = (float)$_POST['kilometrageVehicule'];
  4855.             $listeProduits json_decode($_POST['listeProduits']);
  4856.             
  4857.             $client $em->getRepository(Tiers::class)
  4858.                         ->findOneById($client);
  4859.             if(null !== $client){
  4860.                 $commande->setTiers($client);
  4861.             }
  4862.             
  4863.             $laDate = new \DateTime($dateCommande);
  4864.             $commande->setLaDate($laDate);
  4865.             $commande->setTitreDocument($titreDocument);
  4866.             $commande->setObservation($observation);
  4867.             $commande->setModifiePar($user);
  4868.             $commande->setMoyenDePaiement($moyenDePaiement);
  4869.             
  4870.             $commande->setMatriculeVehicule($matriculeVehicule);
  4871.             $commande->setMarqueVehicule($marqueVehicule);
  4872.             $commande->setKilometrageVehicule($kilometrageVehicule);
  4873.             $commande->setTotalHT($montantHT);
  4874.             $commande->setRemise($remise);
  4875.             $commande->setRemisePourcentage(round($remisePourcentage2));
  4876.             $commande->setTotalHTApresRemise($totalHTApresRemise);
  4877.             
  4878.             $commande->setTotalTVA($montantTVA);
  4879.             $commande->setTotalTTC($montantTTC);
  4880.             $commande->setResteAPayer($montantTTC);
  4881.             $montantlettre strtoupper($chiffreEnLettre->Conversion($montantTTC));
  4882.             $commande->setMontantEnLettre($montantlettre);
  4883.             $commande->setTypeFacture($type);
  4884.             if($commande->getNumero() == ''){
  4885.                 $commande->setNumero($this->getNumero($type$boutique));
  4886.             }
  4887.             $em->flush();
  4888.             
  4889.             //Supprimer les ancien ProduitCommande lié 
  4890.             foreach($ancienProduitCommandes as $ancienProduitCommande){
  4891.                 $em->remove($ancienProduitCommande);
  4892.             }
  4893.             $em->flush();
  4894.             $produitCommandes = array();
  4895.             $coutDeRevientCommande 0;
  4896.             foreach($listeProduits as $listeProduit){
  4897.                 $listeProduit = (array)$listeProduit;
  4898.                 $idDuProduit $listeProduit['idProduit'];
  4899.                 
  4900.                 if($idDuProduit == ''){
  4901.                     //Produit inexistant, il faut le créer
  4902.                     $leProduit = new Produit;
  4903.                     $leProduit->setNom($listeProduit['nomProduit']);
  4904.                     $em->persist($leProduit);
  4905.                     
  4906.                     //TVA
  4907.                     if($listeProduit['tva'] > 0){
  4908.                         $tva $em->getRepository(TVA::class)
  4909.                                     ->findOneBy(
  4910.                                         array(
  4911.                                             'boutique' => $boutique->getId(),
  4912.                                             'valeur'  => $listeProduit['tva']
  4913.                                         )
  4914.                                     );
  4915.                         if($tva == null){
  4916.                             $tva = new TVA;
  4917.                             $tva->setValeur($listeProduit['tva']);
  4918.                             $em->persist($tva);
  4919.                             $em->flush();
  4920.                         }
  4921.                         
  4922.                         $leProduit->setTva($tva);
  4923.                         
  4924.                     }
  4925.                     //Prix
  4926.                     $produitP = new PrixProduit;
  4927.                     $produitP->setValeur($listeProduit['prixUnitaire']);
  4928.                     $produitP->setBoutique($boutique);
  4929.                     $leProduit->addPrix($produitP);
  4930.                     $leProduit->setPrixActuel($produitP);
  4931.                     $leProduit->setBoutique($boutique);
  4932.                     $em->persist($produitP);
  4933.                     $em->persist($leProduit);
  4934.                     $em->flush();
  4935.                     
  4936.                 } else{
  4937.                     $leProduit $em->getRepository(Produit::class)
  4938.                         ->findOneById($idDuProduit);
  4939.                 }
  4940.                 
  4941.                 $produitCommande = new ProduitCommande;
  4942.                 $produitCommande->setProduit($leProduit);
  4943.                 $produitCommande->setCommande($commande);
  4944.                 $quantite = (float)$listeProduit['quantite'];
  4945.                 $produitCommande->setQuantite($quantite);
  4946.                 $produitCommande->setPrix((float)$listeProduit['prixUnitaire']);
  4947.                 $prixDeRevient = (float)$listeProduit['prixDeRevient'];
  4948.                 $produitCommande->setCoutDeRevient($prixDeRevient);
  4949.                 $totalCoutDeRevient $prixDeRevient $quantite;
  4950.                 $produitCommande->setTotalCoutDeRevient($totalCoutDeRevient);
  4951.                 $coutDeRevientCommande += $totalCoutDeRevient;
  4952.                 $produitCommande->setRemise((float)$listeProduit['reduction']);
  4953.                 $produitCommande->setMontantRemise((float)$listeProduit['montantReduction']);
  4954.                 $produitCommande->setTotalHT((float)$listeProduit['totalHT']);
  4955.                 $produitCommande->setTotalHTApresRemise((float)$listeProduit['totalHTApresRemise']);
  4956.                 
  4957.                 $produitCommande->setTotalTVA((float)$listeProduit['totalTVA']);
  4958.                 $produitCommande->setTva((float)$listeProduit['tva']);
  4959.                 $produitCommande->setTotalTTC((float)$listeProduit['totalTTC']);
  4960.                 $em->persist($produitCommande);
  4961.                 array_push($produitCommandes$produitCommande);
  4962.                 
  4963.             }
  4964.             $em->flush();
  4965.             $commande->setCoutDeRevient($coutDeRevientCommande);
  4966.             
  4967.             $pdf = new Html2Pdf('P'$boutique->getSettings()->getFormatPapierImpression(), 'en');
  4968.             $content '';
  4969.             switch($type){
  4970.                 case 'invoice':    
  4971.                     $content $this->renderView('pdf/facture.html.twig', [
  4972.                         'boutique' => $boutique,
  4973.                         'facture' => $commande,
  4974.                         'produits' => $produitCommandes
  4975.                     ]);
  4976.                 break;
  4977.                 
  4978.                 case 'proposal':
  4979.                     $content $this->renderView('pdf/devis.html.twig', [
  4980.                         'boutique' => $boutique,
  4981.                         'facture' => $commande,
  4982.                         'produits' => $produitCommandes
  4983.                     ]);
  4984.                 break;
  4985.             }
  4986.             
  4987.             $pdf->writeHTML($content);
  4988.             $lienPhysique $commande->getUploadRootDir().$commande->getTypeFacture().$commande->getId().'.pdf';
  4989.                 
  4990.             $commande->setLienPDF($this->getDomain().'/pdf478njkp01/'.$commande->getTypeFacture().$commande->getId().'.pdf');
  4991.             $pdf->output($lienPhysique'F');
  4992.             
  4993.             $em->flush();
  4994.             
  4995.             return $this->render('admin/response_new_sale.html.twig', [
  4996.                    'boutique' => $boutique,
  4997.                    'commande' => $commande,
  4998.                    'responseFNE' => '',
  4999.                    'vehicules' => $vehicules,
  5000.                    'typeFacture' => $typeFacture,
  5001.                    'client' => $client,
  5002.                    'produitCommandes' => $produitCommandes,
  5003.                    'listeProduit' => $listeProduit,
  5004.                    'montantHT' => $montantHT,
  5005.                    'montantTVA' => $montantTVA,
  5006.                    'montantTTC' => $montantTTC,
  5007.                    'userBoutique' => $userBoutique
  5008.                 ]);
  5009.             
  5010.         }
  5011.     
  5012.         return $this->render('admin/edit_sale.html.twig', [
  5013.            'boutique' => $boutique,
  5014.            'produits' => $produits,
  5015.            'modeleReglements' => $modeleReglements,
  5016.            'tiers' => $tiers,
  5017.            'editMode' => $editMode,
  5018.            'commande' => $commande,
  5019.            'ancienProduitCommandes' => $ancienProduitCommandes,
  5020.            'type' => $type,
  5021.            'userBoutique' => $userBoutique,
  5022.            'vehicules' => $vehicules
  5023.         ]);
  5024.     }
  5025.     /**
  5026.      * @Route("/{slug}/bon-de-livraison/{id}", name="admin.bon_de_livraison")
  5027.      * @return \Symfony\Component\HttpFoundation\Response
  5028.      */
  5029.     public function bonDeLivraisonAction(Request $request$slug$id)
  5030.     {
  5031.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  5032.            return $this->redirectToRoute('security_login');
  5033.         }      
  5034.         $em $this->getDoctrine()
  5035.                     ->getManager();
  5036.         $boutique  $em->getRepository(Boutique::class)
  5037.                         ->findOneBySlug($slug);
  5038.     
  5039.         $user $this->getUser();
  5040.         $userBoutique $em->getRepository(UserBoutique::class)
  5041.                         ->findOneBy(
  5042.                             array(
  5043.                             'user' => $user->getId(),
  5044.                             'boutique' => $boutique->getId()
  5045.                             )
  5046.                         );
  5047.         $commande  $em->getRepository(Commande::class)
  5048.                         ->findOneBy(
  5049.                             array(
  5050.                                 'boutique' => $boutique->getId(),
  5051.                                 'id' => $id
  5052.                         ));
  5053.         
  5054.         
  5055.             
  5056.             return $this->render('admin/bon_de_livraison.html.twig', [
  5057.                 'boutique' => $boutique,
  5058.                 'facture' => $commande,
  5059.                 'userBoutique' => $userBoutique,
  5060.                 'commande' => $commande
  5061.             ]);
  5062.     }        
  5063.     /**
  5064.      * @Route("/{slug}/bon-de-livraison-avec-date/{id}", name="admin_bon_de_livraison_avec_date")
  5065.      * @return \Symfony\Component\HttpFoundation\Response
  5066.      */
  5067.     public function bonDeLivraisonAvecDateAction(Request $request$slug$id)
  5068.     {
  5069.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  5070.            return $this->redirectToRoute('security_login');
  5071.         }      
  5072.         $em $this->getDoctrine()
  5073.                     ->getManager();
  5074.         $boutique  $em->getRepository(Boutique::class)
  5075.                         ->findOneBySlug($slug);
  5076.     
  5077.         $user $this->getUser();
  5078.         $userBoutique $em->getRepository(UserBoutique::class)
  5079.                         ->findOneBy(
  5080.                             array(
  5081.                             'user' => $user->getId(),
  5082.                             'boutique' => $boutique->getId()
  5083.                             )
  5084.                         );
  5085.         if($request->getMethod() == 'POST'){
  5086.         $dateDImpression $request->request->get('dateDImpression');
  5087.         $dateDImpression = new \DateTime($dateDImpression);
  5088.         $commande  $em->getRepository(Commande::class)
  5089.                         ->findOneBy(
  5090.                             array(
  5091.                                 'boutique' => $boutique->getId(),
  5092.                                 'id' => $id
  5093.                         ));
  5094.         
  5095.         $listeProduits  $em->getRepository(ProduitCommande::class)
  5096.                         ->findBy(
  5097.                             array(
  5098.                                 'commande' => $commande->getId()
  5099.                         ));
  5100.                 
  5101.             
  5102.             $produitCommandes = array();
  5103.             foreach($listeProduits as $listeProduit){
  5104.                 
  5105.                 array_push($produitCommandes$listeProduit);
  5106.                 
  5107.             }
  5108.             
  5109.             $pdf = new Html2Pdf('P'$boutique->getSettings()->getFormatPapierImpression(), 'en');
  5110.             
  5111.             
  5112.             $content $this->renderView('pdf/bon_de_livraison.html.twig', [
  5113.                 'boutique' => $boutique,
  5114.                 'facture' => $commande,
  5115.                 'produits' => $produitCommandes,
  5116.                 'dateDImpression' => $dateDImpression
  5117.             ]);
  5118.             
  5119.             
  5120.             $pdf->writeHTML($content);
  5121.             $lienPhysique $commande->getUploadRootDir().'_bon_de_livraison_'.$commande->getId().'.pdf';
  5122.                 
  5123.             $pdf->output($lienPhysique'I');
  5124.             
  5125.             return $this->renderView('pdf/bon_de_livraison.html.twig', [
  5126.                 'boutique' => $boutique,
  5127.                 'facture' => $commande,
  5128.                 'produits' => $produitCommandes,
  5129.                 'dateDImpression' => $dateDImpression
  5130.             ]);
  5131.         }
  5132.     }        
  5133.     
  5134.     
  5135.     /**
  5136.      * @Route("/{slug}/duplicate-sale/{id}", name="admin.duplicate_sale")
  5137.      * @return \Symfony\Component\HttpFoundation\Response
  5138.      */
  5139.     public function duplicateSaleAction(Request $request$slug$id)
  5140.     {
  5141.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  5142.            return $this->redirectToRoute('security_login');
  5143.         }      
  5144.         $em $this->getDoctrine()
  5145.                     ->getManager();
  5146.         $boutique  $em->getRepository(Boutique::class)
  5147.                         ->findOneBySlug($slug);
  5148.     
  5149.         $user $this->getUser();
  5150.         $userBoutique $em->getRepository(UserBoutique::class)
  5151.                         ->findOneBy(
  5152.                             array(
  5153.                             'user' => $user->getId(),
  5154.                             'boutique' => $boutique->getId()
  5155.                             )
  5156.                         );
  5157.         $commande  $em->getRepository(Commande::class)
  5158.                         ->findOneBy(
  5159.                             array(
  5160.                                 'boutique' => $boutique->getId(),
  5161.                                 'id' => $id
  5162.                         ));
  5163.         
  5164.         $listeProduits  $em->getRepository(ProduitCommande::class)
  5165.                         ->findBy(
  5166.                             array(
  5167.                                 'commande' => $commande->getId()
  5168.                         ));
  5169.                 
  5170.             $nouvelleCommande = new Commande;
  5171.             $nouvelleCommande->setBoutique($boutique);
  5172.             $nouvelleCommande->setTiers($commande->getTiers());
  5173.             
  5174.             $nouvelleCommande->setLaDate(new \DateTime());
  5175.             $nouvelleCommande->setTotalHT($commande->getTotalHT());
  5176.             $nouvelleCommande->setTotalHTApresRemise($commande->getTotalHTApresRemise());
  5177.             $nouvelleCommande->setRemise($commande->getRemise());
  5178.             $nouvelleCommande->setRemisePourcentage($commande->getRemisePourcentage());
  5179.             $nouvelleCommande->setTotalTVA($commande->getTotalTVA());
  5180.             $nouvelleCommande->setTotalAutreTaxe($commande->getTotalAutreTaxe());
  5181.             $nouvelleCommande->setTotalTTC($commande->getTotalTTC());
  5182.             $nouvelleCommande->setResteAPayer($commande->getTotalTTC());
  5183.             $nouvelleCommande->setTitreDocument($commande->getTitreDocument());
  5184.             $nouvelleCommande->setObservation($commande->getObservation());
  5185.             $nouvelleCommande->setValableJusquAu($commande->getValableJusquAu());
  5186.             $nouvelleCommande->setMontantEnLettre($commande->getMontantEnLettre());
  5187.             $nouvelleCommande->setTypeFacture($commande->getTypeFacture());
  5188.             $nouvelleCommande->setNatureFacture($commande->getNatureFacture());
  5189.             
  5190.             $nouvelleCommande->setNumero($this->getNumero($nouvelleCommande->getTypeFacture(), $boutique));
  5191.             $em->persist($nouvelleCommande);
  5192.             $em->flush();
  5193.             $produitCommandes = array();
  5194.             foreach($listeProduits as $listeProduit){
  5195.                 $produitCommande = new ProduitCommande;
  5196.                 $produitCommande->setProduit($listeProduit->getProduit());
  5197.                 $produitCommande->setCommande($nouvelleCommande);
  5198.                 $produitCommande->setQuantite($listeProduit->getQuantite());
  5199.                 $produitCommande->setPrix($listeProduit->getPrix());
  5200.                 $produitCommande->setRemise($listeProduit->getRemise());
  5201.                 $produitCommande->setRemisePourcentage($listeProduit->getRemisePourcentage());
  5202.                 $produitCommande->setTotalHT($listeProduit->getTotalHT());
  5203.                 $produitCommande->setTotalHTApresRemise($listeProduit->getTotalHTApresRemise());
  5204.                 $produitCommande->setTotalTVA($listeProduit->getTotalTVA());
  5205.                 $produitCommande->setAutreTaxe($listeProduit->getAutreTaxe());
  5206.                 $produitCommande->setTotalTTC($listeProduit->getTotalTTC());
  5207.                 $em->persist($produitCommande);
  5208.                 
  5209.                 array_push($produitCommandes$produitCommande);
  5210.                 
  5211.             }
  5212.             $em->flush();
  5213.             
  5214.             if($nouvelleCommande->getTypeFacture() == 'invoice'){
  5215.                     
  5216.                 if($boutique->getApiKeyFNE() != ''){
  5217.                     if($boutique->getSettings()->isGenererAutomatiquementFNE()){
  5218.                         $responseFNE $this->genererFactureFNE($boutique->getSlug(), $nouvelleCommande->getId(), $nouvelleCommande->getNatureFacture());
  5219.                     }
  5220.                     
  5221.                 }
  5222.                 $this->genererEcritureComptableDeVente($boutique$nouvelleCommande);
  5223.                     //Ecriture comptable
  5224.             }
  5225.             $pdf = new Html2Pdf('P'$boutique->getSettings()->getFormatPapierImpression(), 'en');
  5226.             $content '';
  5227.             switch($commande->getTypeFacture()){
  5228.                 case 'invoice':    
  5229.                     $content $this->renderView('pdf/facture.html.twig', [
  5230.                         'boutique' => $boutique,
  5231.                         'facture' => $nouvelleCommande,
  5232.                         'produits' => $produitCommandes
  5233.                     ]);
  5234.                 break;
  5235.                 
  5236.                 case 'proposal':
  5237.                     $content $this->renderView('pdf/devis.html.twig', [
  5238.                         'boutique' => $boutique,
  5239.                         'facture' => $nouvelleCommande,
  5240.                         'produits' => $produitCommandes
  5241.                     ]);
  5242.                 break;
  5243.             }
  5244.             
  5245.             $pdf->writeHTML($content);
  5246.             $lienPhysique $nouvelleCommande->getUploadRootDir().$nouvelleCommande->getTypeFacture().$nouvelleCommande->getId().'.pdf';
  5247.                 
  5248.             $nouvelleCommande->setLienPDF($this->getDomain().'/pdf478njkp01/'.$nouvelleCommande->getTypeFacture().$nouvelleCommande->getId().'.pdf');
  5249.             $pdf->output($lienPhysique'F');
  5250.             
  5251.             $em->flush();
  5252.             
  5253.             switch($commande->getTypeFacture()){
  5254.                 case 'invoice':    
  5255.                     return $this->redirectToRoute('admin.invoices',  array('slug' => $boutique->getSlug()));
  5256.                 break;
  5257.                 
  5258.                 case 'proposal':
  5259.                     return $this->redirectToRoute('admin.proposals',  array('slug' => $boutique->getSlug()));
  5260.                 break;
  5261.                 
  5262.                 case 'bill_credit':
  5263.                     return $this->redirectToRoute('admin.bill_credits',  array('slug' => $boutique->getSlug()));
  5264.                 break;
  5265.                 
  5266.                 case 'deposit':
  5267.                     return $this->redirectToRoute('admin.deposits',  array('slug' => $boutique->getSlug()));
  5268.                 break;
  5269.             }
  5270.     }
  5271.     
  5272.     /**
  5273.      * @Route("/{slug}/delete-sale/{type}/{id}", name="admin.delete_sale")
  5274.      * @return \Symfony\Component\HttpFoundation\Response
  5275.   
  5276.     */
  5277.     public function deleteSaleAction(Request $request$slug$type$id)
  5278.     {
  5279.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  5280.            return $this->redirectToRoute('security_login');
  5281.         }
  5282.         $em $this->getDoctrine()
  5283.                     ->getManager();
  5284.         
  5285.         $boutique $em->getRepository(Boutique::class)
  5286.                         ->findOneBySlug($slug);
  5287.         $user $this->getUser();
  5288.         $userBoutique $em->getRepository(UserBoutique::class)
  5289.                         ->findOneBy(
  5290.                             array(
  5291.                             'user' => $user->getId(),
  5292.                             'boutique' => $boutique->getId()
  5293.                             )
  5294.                         );
  5295.         $commande $em->getRepository(Commande::class)
  5296.                         ->findOneBy(
  5297.                             array(
  5298.                                 'boutique' => $boutique->getId(),
  5299.                                 'id' => $id
  5300.                             ));
  5301.         /*
  5302.         
  5303.         $produitCommandes = $em->getRepository(ProduitCommande::class)
  5304.                         ->findByCommande($commande->getId());
  5305.                         
  5306.         foreach($produitCommandes as $produitCommande){
  5307.             $em->remove($produitCommande);
  5308.         }
  5309.         $em->flush();
  5310.         
  5311.         $em->remove($commande);
  5312.         */
  5313.         
  5314.         
  5315.         $commande->setEstSupprime(true);
  5316.         $commande->setSupprimePar($user);
  5317.         $em->flush();
  5318.         
  5319.         switch($type){
  5320.             case 'invoice':
  5321.                 return $this->redirectToRoute('admin.invoices', array('slug' => $boutique->getSlug()));
  5322.             break;
  5323.             
  5324.             case 'bill_credit':
  5325.                 return $this->redirectToRoute('admin.bill_credits', array('slug' => $boutique->getSlug()));
  5326.             break;
  5327.             
  5328.             case 'proposal':
  5329.                 return $this->redirectToRoute('admin.proposals', array('slug' => $boutique->getSlug()));
  5330.             break;
  5331.         }
  5332.         
  5333.     }
  5334.     
  5335.     /**
  5336.      * @Route("/{slug}/product/list", name="admin.list_product")
  5337.      * @return \Symfony\Component\HttpFoundation\Response
  5338.     */
  5339.     public function listProductAction(Request $requestBoutique $boutique)
  5340.     {
  5341.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  5342.            return $this->redirectToRoute('security_login');
  5343.         }
  5344.         $em $this->getDoctrine()
  5345.                     ->getManager();
  5346.         
  5347.         $produits $em->getRepository(Produit::class)
  5348.                         ->findBy(
  5349.                             array(
  5350.                                 'boutique' => $boutique->getId(),
  5351.                                 'estSupprime' => false
  5352.                             ),    
  5353.                             array(
  5354.                                 'nom' => 'ASC'
  5355.                             )
  5356.                         );
  5357.         $user $this->getUser();
  5358.         $userBoutique $em->getRepository(UserBoutique::class)
  5359.                         ->findOneBy(
  5360.                             array(
  5361.                             'user' => $user->getId(),
  5362.                             'boutique' => $boutique->getId()
  5363.                             )
  5364.                         );
  5365.         return $this->render('admin/liste_produit.html.twig', [
  5366.            'boutique' => $boutique,
  5367.            'produits' => $produits,
  5368.            'userBoutique' => $userBoutique
  5369.         ]);
  5370.     }
  5371.     
  5372.     /**
  5373.      * @Route("/{slug}/new-product", name="admin.new_product")
  5374.      * @return \Symfony\Component\HttpFoundation\Response
  5375.      */
  5376.     public function newProductAction(Request $requestBoutique $boutique)
  5377.     {
  5378.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  5379.            return $this->redirectToRoute('security_login');
  5380.         }
  5381.         $em $this->getDoctrine()
  5382.                     ->getManager();
  5383.         
  5384.         $produit = new Produit;
  5385.         
  5386.         $user $this->getUser();
  5387.         $userBoutique $em->getRepository(UserBoutique::class)
  5388.                         ->findOneBy(
  5389.                             array(
  5390.                             'user' => $user->getId(),
  5391.                             'boutique' => $boutique->getId()
  5392.                             )
  5393.                         );
  5394.         $form $this->createForm(ProduitType::class, $produit, array('boutique' => $boutique->getId()));
  5395.         
  5396.         $ok_soumission '';
  5397.         $error '';
  5398.         
  5399.         if($request->getMethod() == 'POST'){
  5400.             
  5401.                $form->handleRequest($request);
  5402.                if($form->isValid()){
  5403.                  $em->persist($produit);
  5404.                    $em->flush();
  5405.                  
  5406.                    //Prix
  5407.                    $prix = (float)$_POST['prix'];
  5408.                    $produitP = new PrixProduit;
  5409.                    $produitP->setValeur($prix);
  5410.                    $produitP->setBoutique($boutique);
  5411.                    $produit->addPrix($produitP);
  5412.                    $produit->setPrixActuel($produitP);
  5413.                    $produit->setBoutique($boutique);
  5414.                   $em->persist($produitP);
  5415.                   
  5416.                   $em->flush();
  5417.                 
  5418.                 $ok_soumission =" Votre message a été pris en compte";
  5419.                     
  5420.                 unset($produit);
  5421.                 unset($form);
  5422.                 $produit = new Produit;
  5423.                 $form $this->createForm(ProduitType::class, $produit, array('boutique' => $boutique->getId()));
  5424.                     
  5425.                 } else {
  5426.                     $error =" Veillez corrigez vos erreurs";
  5427.                 }
  5428.         }
  5429.     
  5430.         return $this->render('admin/nouveau_produit.html.twig', [
  5431.            'boutique' => $boutique,
  5432.            'form' => $form->createView(),
  5433.            'userBoutique' => $userBoutique
  5434.         ]);
  5435.     }
  5436.     
  5437.     /**
  5438.      * @Route("/{slug}/product/edit/{id}", name="admin.edit_product")
  5439.      * @return \Symfony\Component\HttpFoundation\Response
  5440.     */
  5441.     public function edtProductAction(Request $request$slug$id)
  5442.     {
  5443.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  5444.            return $this->redirectToRoute('security_login');
  5445.         }
  5446.         $em $this->getDoctrine()
  5447.                     ->getManager();
  5448.         
  5449.         $boutique $em->getRepository(Boutique::class)
  5450.                         ->findOneBySlug($slug);
  5451.         
  5452.         $produit $em->getRepository(Produit::class)
  5453.                         ->findOneBy(
  5454.                             array(
  5455.                             'boutique' => $boutique->getId(),
  5456.                             'id' => $id
  5457.                             )
  5458.                         );
  5459.         
  5460.         $user $this->getUser();
  5461.         $userBoutique $em->getRepository(UserBoutique::class)
  5462.                         ->findOneBy(
  5463.                             array(
  5464.                             'user' => $user->getId(),
  5465.                             'boutique' => $boutique->getId()
  5466.                             )
  5467.                         );
  5468.         $form $this->createForm(ProduitEditType::class, $produit, array('boutique' => $boutique->getId()));
  5469.         
  5470.         $ok_soumission '';
  5471.         $error '';
  5472.         
  5473.         if($request->getMethod() == 'POST'){
  5474.             
  5475.                $form->handleRequest($request);
  5476.                if($form->isValid()){
  5477.                    //Prix
  5478.                     $prix = (float)$_POST['prix'];
  5479.                     if($prix && $produit->getPrixActuel()->getValeur() != $prix){
  5480.                         $produit->getPrixActuel()->setValeur($prix);
  5481.                         $produitP = new PrixProduit;
  5482.                        $produitP->setValeur($prix);
  5483.                        $produit->addPrix($produitP);
  5484.                        $produit->setPrixActuel($produitP);
  5485.                        $produit->setBoutique($boutique);
  5486.                       $em->persist($produitP);
  5487.                         
  5488.                     }
  5489.                     $em->flush();
  5490.                     $ok_soumission =" Votre message a été pris en compte";
  5491.                 } else {
  5492.                     $error =" Veillez corrigez vos erreurs";
  5493.                 }
  5494.         }
  5495.     
  5496.         return $this->render('admin/edit_product.html.twig', [
  5497.            'boutique' => $boutique,
  5498.            'form' => $form->createView(),
  5499.            'produit' => $produit,
  5500.            'userBoutique' => $userBoutique
  5501.         ]);
  5502.     }
  5503.     
  5504.     //Produit/Service
  5505.     /**
  5506.      * @Route("/{slug}/delete-product/{id}", name="admin.delete_product")
  5507.      * @return \Symfony\Component\HttpFoundation\Response
  5508.      */
  5509.     public function deleteProductAction(Request $request,  $slug$id)
  5510.     { 
  5511.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  5512.            return $this->redirectToRoute('security_login');
  5513.         }
  5514.         $em $this->getDoctrine()
  5515.                     ->getManager();
  5516.         $boutique $em->getRepository(Boutique::class)
  5517.                         ->findOneBySlug($slug);
  5518.         
  5519.         $product $em->getRepository(Produit::class)
  5520.                         ->findOneBy(
  5521.                         array(
  5522.                             'boutique' => $boutique->getId(),
  5523.                             'id' => $id
  5524.                         )
  5525.                         );
  5526.         if(null !== $product){
  5527.             
  5528.             $product->setEstSupprime(true);
  5529.             $em->flush();
  5530.         }
  5531.         return $this->redirectToRoute('admin.list_product', array('slug' => $boutique->getSlug()));
  5532.     
  5533.     }
  5534.     
  5535.     /**
  5536.      * @Route("/{slug}/product-category/list", name="admin.category_product")
  5537.      * @return \Symfony\Component\HttpFoundation\Response
  5538.     */
  5539.     public function listeCategoryProductAction(Request $requestBoutique $boutique)
  5540.     {
  5541.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  5542.            return $this->redirectToRoute('security_login');
  5543.         }
  5544.         $em $this->getDoctrine()
  5545.                     ->getManager();
  5546.         
  5547.         $categories $em->getRepository(CategorieProduit::class)
  5548.                         ->findByBoutique($boutique);
  5549.         $user $this->getUser();
  5550.         $userBoutique $em->getRepository(UserBoutique::class)
  5551.                         ->findOneBy(
  5552.                             array(
  5553.                             'user' => $user->getId(),
  5554.                             'boutique' => $boutique->getId()
  5555.                             )
  5556.                         );
  5557.         return $this->render('admin/category_product.html.twig', [
  5558.            'categories' => $categories,
  5559.            'boutique' => $boutique,
  5560.            'userBoutique' => $userBoutique
  5561.         ]);
  5562.     }
  5563.     
  5564.     //Produit/Service
  5565.     /**
  5566.      * @Route("/{slug}/new-product-category", name="admin.new_product_category")
  5567.      * @return \Symfony\Component\HttpFoundation\Response
  5568.      */
  5569.     public function newProductCategoryAction(Request $requestBoutique $boutique)
  5570.     {
  5571.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  5572.            return $this->redirectToRoute('security_login');
  5573.         }      
  5574.         $em $this->getDoctrine()
  5575.                     ->getManager();
  5576.         
  5577.         $categorie = new CategorieProduit;
  5578.         $form $this->createForm(CategorieProduitType::class, $categorie);
  5579.         
  5580.         $ok_soumission '';
  5581.         $error '';
  5582.         $user $this->getUser();
  5583.         $userBoutique $em->getRepository(UserBoutique::class)
  5584.                         ->findOneBy(
  5585.                             array(
  5586.                             'user' => $user->getId(),
  5587.                             'boutique' => $boutique->getId()
  5588.                             )
  5589.                         );
  5590.         if($request->getMethod() == 'POST'){
  5591.             
  5592.                $form->handleRequest($request);
  5593.                if($form->isValid()){
  5594.                    $categorie->setBoutique($boutique);
  5595.                   $em->persist($categorie);
  5596.                   $em->flush();
  5597.         
  5598.                 $ok_soumission =" Votre message a été pris en compte";
  5599.                     
  5600.                 unset($categorie);
  5601.                 unset($form);
  5602.                 $categorie = new CategorieProduit;
  5603.                 
  5604.                 $form $this->createForm(CategorieProduitType::class, $categorie);
  5605.                     
  5606.                 } else {
  5607.                     $error =" Veillez corrigez vos erreurs";
  5608.                 }
  5609.         }
  5610.     
  5611.         return $this->render('admin/new_product_category.html.twig', [
  5612.            'boutique' => $boutique,
  5613.            'form' => $form->createView(),
  5614.            'userBoutique' => $userBoutique
  5615.         ]);
  5616.     }
  5617.     
  5618.     
  5619.     //Produit/Service
  5620.     /**
  5621.      * @Route("/{slug}/edit-product-category/{id}", name="admin.edit_product_category")
  5622.      * @return \Symfony\Component\HttpFoundation\Response
  5623.      */
  5624.     public function editProductCategoryAction(Request $request$slug$id)
  5625.     { 
  5626.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  5627.            return $this->redirectToRoute('security_login');
  5628.         }
  5629.         $em $this->getDoctrine()
  5630.                     ->getManager();
  5631.         
  5632.         $user $this->getUser();
  5633.         
  5634.         $categorie $em->getRepository(CategorieProduit::class)
  5635.                         ->findOneById($id);
  5636.         $boutique $em->getRepository(Boutique::class)
  5637.                         ->findOneBySlug($slug);
  5638.         $userBoutique $em->getRepository(UserBoutique::class)
  5639.                         ->findOneBy(
  5640.                             array(
  5641.                             'user' => $user->getId(),
  5642.                             'boutique' => $boutique->getId()
  5643.                             )
  5644.                         );
  5645.         $form $this->createForm(CategorieProduitEditType::class, $categorie);
  5646.         
  5647.         $ok_soumission '';
  5648.         $error '';
  5649.         
  5650.         if($request->getMethod() == 'POST'){
  5651.             
  5652.                $form->handleRequest($request);
  5653.                if($form->isValid()){
  5654.                   $em->flush();
  5655.         
  5656.                 $ok_soumission =" Votre message a été pris en compte";    
  5657.                 } else {
  5658.                     $error =" Veillez corrigez vos erreurs";
  5659.                 }
  5660.         }
  5661.     
  5662.         return $this->render('admin/edit_product_category.html.twig', [
  5663.            'boutique' => $boutique,
  5664.            'categorie' => $categorie,
  5665.            'form' => $form->createView(),
  5666.            'userBoutique' => $userBoutique
  5667.         ]);
  5668.     }
  5669.     
  5670.     //Produit/Service
  5671.     /**
  5672.      * @Route("/{slug}/delete-product-category/{id}", name="admin.delete_product_category")
  5673.      * @return \Symfony\Component\HttpFoundation\Response
  5674.      */
  5675.     public function deleteProductCategoryAction(Request $request,  $slug$id)
  5676.     { 
  5677.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  5678.            return $this->redirectToRoute('security_login');
  5679.         }
  5680.         $em $this->getDoctrine()
  5681.                     ->getManager();
  5682.         $boutique $em->getRepository(Boutique::class)
  5683.                         ->findOneBySlug($slug);
  5684.                         
  5685.         $categorie $em->getRepository(CategorieProduit::class)
  5686.                         ->findOneBy(
  5687.                         array(
  5688.                             'boutique' => $boutique->getId(),
  5689.                             'id' => $id
  5690.                         )
  5691.                         );
  5692.         if(null !== $categorie){
  5693.             $em->remove($categorie);
  5694.             $em->flush();
  5695.         }
  5696.         return $this->redirectToRoute('admin.category_product', array('slug' => $boutique->getSlug()));
  5697.         
  5698.         
  5699.     }
  5700.     /**
  5701.      * @Route("/{slug}/tax/list", name="admin.list_tax")
  5702.      * @return \Symfony\Component\HttpFoundation\Response
  5703.      */
  5704.     public function listTaxAction(Request $requestBoutique $boutique)
  5705.     {    
  5706.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  5707.            return $this->redirectToRoute('security_login');
  5708.         }
  5709.         $em $this->getDoctrine()
  5710.                     ->getManager();
  5711.         
  5712.         $taxes $em->getRepository(TVA::class)
  5713.                         ->findByBoutique($boutique);
  5714.         $user $this->getUser();
  5715.         $userBoutique $em->getRepository(UserBoutique::class)
  5716.                         ->findOneBy(
  5717.                             array(
  5718.                             'user' => $user->getId(),
  5719.                             'boutique' => $boutique->getId()
  5720.                             )
  5721.                         );
  5722.         return $this->render('admin/liste_tva.html.twig', [
  5723.            'boutique' => $boutique,
  5724.            'taxes' => $taxes,
  5725.            'userBoutique' => $userBoutique
  5726.         ]);
  5727.     }
  5728.     
  5729.     /**
  5730.      * @Route("/{slug}/new-tax", name="admin.new_tax")
  5731.      * @return \Symfony\Component\HttpFoundation\Response
  5732.      */
  5733.     public function newTaxAction(Request $requestBoutique $boutique)
  5734.     {
  5735.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  5736.            return $this->redirectToRoute('security_login');
  5737.         }
  5738.         $em $this->getDoctrine()
  5739.                     ->getManager();
  5740.         
  5741.         $tva = new TVA;
  5742.         
  5743.         $user $this->getUser();
  5744.         $userBoutique $em->getRepository(UserBoutique::class)
  5745.                         ->findOneBy(
  5746.                             array(
  5747.                             'user' => $user->getId(),
  5748.                             'boutique' => $boutique->getId()
  5749.                             )
  5750.                         );
  5751.         $form $this->createForm(TVAType::class, $tva);
  5752.         
  5753.         $ok_soumission '';
  5754.         $error '';
  5755.         
  5756.         if($request->getMethod() == 'POST'){
  5757.             
  5758.                $form->handleRequest($request);
  5759.                if($form->isValid()){
  5760.                    $tva->setBoutique($boutique);
  5761.                   $em->persist($tva);
  5762.                   $em->flush();
  5763.         
  5764.                 $ok_soumission =" Votre message a été pris en compte";
  5765.                     
  5766.                 unset($tva);
  5767.                 unset($form);
  5768.                 $tva = new TVA;
  5769.                 
  5770.                 $form $this->createForm(TVAType::class, $tva);
  5771.                     
  5772.                 } else {
  5773.                     $error =" Veillez corrigez vos erreurs";
  5774.                 }
  5775.         }
  5776.     
  5777.         return $this->render('admin/nouvelle_tva.html.twig', [
  5778.            'boutique' => $boutique,
  5779.            'form' => $form->createView(),
  5780.            'userBoutique' => $userBoutique
  5781.         ]);
  5782.     }
  5783.     
  5784.     /**
  5785.      * @Route("/{slug}/edit-tax/{tva}", name="admin.edit_tax")
  5786.      * @return \Symfony\Component\HttpFoundation\Response
  5787.      */
  5788.     public function editTaxAction(Request $request$slug$tva)
  5789.     {
  5790.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  5791.            return $this->redirectToRoute('security_login');
  5792.         }
  5793.         $em $this->getDoctrine()
  5794.                     ->getManager();
  5795.         
  5796.         $boutique $em->getRepository(Boutique::class)
  5797.                         ->findOneBySlug($slug);
  5798.                         
  5799.         $tva $em->getRepository(TVA::class)
  5800.                         ->findOneBy(
  5801.                         array(
  5802.                             'boutique' => $boutique->getId(),
  5803.                             'id' => $tva
  5804.                         )
  5805.                         );
  5806.         
  5807.         $user $this->getUser();
  5808.         $userBoutique $em->getRepository(UserBoutique::class)
  5809.                         ->findOneBy(
  5810.                             array(
  5811.                             'user' => $user->getId(),
  5812.                             'boutique' => $boutique->getId()
  5813.                             )
  5814.                         );
  5815.         $userBoutique $em->getRepository(UserBoutique::class)
  5816.                         ->findOneBy(
  5817.                             array(
  5818.                             'user' => $user->getId(),
  5819.                             'boutique' => $boutique->getId()
  5820.                             )
  5821.                         );
  5822.         $form $this->createForm(TVAEditType::class, $tva);
  5823.         
  5824.         $ok_soumission '';
  5825.         $error '';
  5826.         
  5827.         if($request->getMethod() == 'POST'){
  5828.             
  5829.                $form->handleRequest($request);
  5830.                if($form->isValid()){
  5831.                   $em->flush();
  5832.         
  5833.                 $ok_soumission =" Votre message a été pris en compte";
  5834.                     
  5835.                     
  5836.                 } else {
  5837.                     $error =" Veillez corrigez vos erreurs";
  5838.                 }
  5839.         }
  5840.     
  5841.         return $this->render('admin/edit_tax.html.twig', [
  5842.            'boutique' => $boutique,
  5843.            'tva' => $tva,
  5844.            'form' => $form->createView(),
  5845.            'userBoutique' => $userBoutique
  5846.         ]);
  5847.     }
  5848.     
  5849.     /**
  5850.      * @Route("/{slug}/delete-tax/{id}", name="admin.delete_tax")
  5851.      * @return \Symfony\Component\HttpFoundation\Response
  5852.      */
  5853.     public function deleteTaxAction(Request $request$slugTVA $tva)
  5854.     {
  5855.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  5856.            return $this->redirectToRoute('security_login');
  5857.         }
  5858.         $em $this->getDoctrine()
  5859.                     ->getManager();
  5860.         $boutique $em->getRepository(Boutique::class)
  5861.                         ->findOneBySlug($slug);
  5862.         
  5863.         $tva $em->getRepository(TVA::class)
  5864.                         ->findOneBy(
  5865.                         array(
  5866.                             'boutique' => $boutique->getId(),
  5867.                             'id' => $tva
  5868.                         )
  5869.                         );
  5870.         if(null !== $tva){
  5871.             $em->remove($tva);
  5872.             $em->flush();
  5873.         }
  5874.         return $this->redirectToRoute('admin.list_tax', array('slug' => $boutique->getSlug()));
  5875.     }
  5876.     
  5877.     /**
  5878.      * @Route("/{slug}/payment-method/list", name="admin.payment_methods")
  5879.      * @return \Symfony\Component\HttpFoundation\Response
  5880.      */
  5881.     public function paymentMethodsAction(Request $requestBoutique $boutique)
  5882.     {
  5883.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  5884.            return $this->redirectToRoute('security_login');
  5885.         }
  5886.         $em $this->getDoctrine()
  5887.                     ->getManager();
  5888.         
  5889.         $paymentMethods $em->getRepository(PaymentMethod::class)
  5890.                         ->findByBoutique($boutique);
  5891.         $user $this->getUser();
  5892.         $userBoutique $em->getRepository(UserBoutique::class)
  5893.                         ->findOneBy(
  5894.                             array(
  5895.                             'user' => $user->getId(),
  5896.                             'boutique' => $boutique->getId()
  5897.                             )
  5898.                         );
  5899.         return $this->render('admin/payment_methods.html.twig', [
  5900.            'boutique' => $boutique,
  5901.            'paymentMethods' => $paymentMethods,
  5902.            'userBoutique' => $userBoutique
  5903.         ]);
  5904.     }
  5905.     
  5906.     /**
  5907.      * @Route("/{slug}/payment-method/new", name="admin.new_payment_method")
  5908.      * @return \Symfony\Component\HttpFoundation\Response
  5909.      */
  5910.     public function newPaymentMethodAction(Request $requestBoutique $boutique)
  5911.     {
  5912.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  5913.            return $this->redirectToRoute('security_login');
  5914.         }
  5915.         $em $this->getDoctrine()
  5916.                     ->getManager();
  5917.         
  5918.         $paymentMethod = new PaymentMethod;
  5919.         
  5920.         $user $this->getUser();
  5921.         $userBoutique $em->getRepository(UserBoutique::class)
  5922.                         ->findOneBy(
  5923.                             array(
  5924.                             'user' => $user->getId(),
  5925.                             'boutique' => $boutique->getId()
  5926.                             )
  5927.                         );
  5928.         $form $this->createForm(PaymentMethodType::class, $paymentMethod);
  5929.         
  5930.         $ok_soumission '';
  5931.         $error '';
  5932.         
  5933.         if($request->getMethod() == 'POST'){
  5934.             
  5935.                $form->handleRequest($request);
  5936.                if($form->isValid()){
  5937.                    $paymentMethod->setBoutique($boutique);
  5938.                   $em->persist($paymentMethod);
  5939.                   $em->flush();
  5940.         
  5941.                 $ok_soumission =" Votre message a été pris en compte";
  5942.                     
  5943.                 $paymentMethod = new PaymentMethod;
  5944.                 
  5945.                 $form $this->createForm(PaymentMethodType::class, $paymentMethod);
  5946.                     
  5947.                 } else {
  5948.                     $error =" Veillez corrigez vos erreurs";
  5949.                 }
  5950.         }
  5951.     
  5952.         return $this->render('admin/new_payment_method.html.twig', [
  5953.            'boutique' => $boutique,
  5954.            'form' => $form->createView(),
  5955.            'userBoutique' => $userBoutique
  5956.         ]);
  5957.     }
  5958.     
  5959.     /**
  5960.      * @Route("/{slug}/payment-method/edit/{paymentMethod}", name="admin.edit_payment_method")
  5961.      * @return \Symfony\Component\HttpFoundation\Response
  5962.      */
  5963.     public function editPaymentMethodAction(Request $request,  $slug$paymentMethod)
  5964.     {
  5965.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  5966.            return $this->redirectToRoute('security_login');
  5967.         }
  5968.         $em $this->getDoctrine()
  5969.                     ->getManager();
  5970.         
  5971.         $boutique $em->getRepository(Boutique::class)
  5972.                     ->findOneBySlug($slug);
  5973.         $user $this->getUser();
  5974.         $userBoutique $em->getRepository(UserBoutique::class)
  5975.                         ->findOneBy(
  5976.                             array(
  5977.                             'user' => $user->getId(),
  5978.                             'boutique' => $boutique->getId()
  5979.                             )
  5980.                         );
  5981.         $paymentMethod $em->getRepository(PaymentMethod::class)
  5982.                     ->findOneBy(
  5983.                         array(
  5984.                             'boutique' => $boutique->getId(),
  5985.                             'id' => $paymentMethod
  5986.                         )
  5987.                     );
  5988.         
  5989.         $form $this->createForm(PaymentMethodEditType::class, $paymentMethod);
  5990.         
  5991.         $ok_soumission '';
  5992.         $error '';
  5993.         
  5994.         if($request->getMethod() == 'POST'){
  5995.             
  5996.                $form->handleRequest($request);
  5997.                if($form->isValid()){
  5998.                   $em->flush();
  5999.         
  6000.                 $ok_soumission =" Votre message a été pris en compte";
  6001.                     
  6002.                     
  6003.                 } else {
  6004.                     $error =" Veillez corrigez vos erreurs";
  6005.                 }
  6006.         }
  6007.     
  6008.         return $this->render('admin/edit_payment_method.html.twig', [
  6009.            'boutique' => $boutique,
  6010.            'paymentMethod' => $paymentMethod,
  6011.            'form' => $form->createView(),
  6012.            'userBoutique' => $userBoutique
  6013.         ]);
  6014.     }
  6015.     
  6016.     /**
  6017.      * @Route("/{slug}/payment-method/delete/{id}", name="admin.delete_payment_method")
  6018.      * @return \Symfony\Component\HttpFoundation\Response
  6019.      */
  6020.     public function deletePaymentMethodAction(Request $request$slug$id)
  6021.     {
  6022.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  6023.            return $this->redirectToRoute('security_login');
  6024.         }
  6025.         $em $this->getDoctrine()
  6026.                     ->getManager();
  6027.         $boutique $em->getRepository(Boutique::class)
  6028.                         ->findOneBySlug($slug);
  6029.                         
  6030.         $paymentMethod $em->getRepository(PaymentMethod::class)
  6031.                         ->findOneBy(
  6032.                         array(
  6033.                             'boutique' => $boutique->getId(),
  6034.                             'id' => $id
  6035.                         )
  6036.                         );
  6037.         if(null !== $paymentMethod){
  6038.             $em->remove($paymentMethod);
  6039.             $em->flush();
  6040.         }
  6041.         return $this->redirectToRoute('admin.payment_methods', array('slug' => $boutique->getSlug()));
  6042.     }
  6043.     
  6044.     /**
  6045.      * @Route("/{slug}/expensives/list", name="admin.expensives")
  6046.      * @return \Symfony\Component\HttpFoundation\Response
  6047.      */
  6048.     public function expensivesAction(Request $requestBoutique $boutique)
  6049.     {
  6050.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  6051.            return $this->redirectToRoute('security_login');
  6052.         }
  6053.         $em $this->getDoctrine()
  6054.                     ->getManager();
  6055.         
  6056.         $intervalleDeDate  $this->intervalleSemaine(date('Y-m-d'));
  6057.         $dateDebut = new \DateTime($intervalleDeDate['debut']);
  6058.         $dateDebut->setTime(00);
  6059.         $dateFin = new \DateTime($intervalleDeDate['fin']);
  6060.         $dateFin->setTime(2359);
  6061.         
  6062.         $intervalleMois $this->intervalleMois(date('Y-m-d'));
  6063.         $startMonth $intervalleMois['debut'];
  6064.         $endMonth $intervalleMois['fin'];
  6065.         
  6066.         $expensives  $em->getRepository(Expensive::class)
  6067.                         ->depenseParDate($boutique->getId(), $dateDebut$dateFin);
  6068.         
  6069.         $startYear date('Y-01-01');
  6070.         $endYear date('Y-12-31');
  6071.         $user $this->getUser();
  6072.         $userBoutique $em->getRepository(UserBoutique::class)
  6073.                         ->findOneBy(
  6074.                             array(
  6075.                             'user' => $user->getId(),
  6076.                             'boutique' => $boutique->getId()
  6077.                             )
  6078.                         );
  6079.         if('POST' == $request->getMethod()){
  6080.             $dateDebut $_POST['dateDebut'];
  6081.             $dateFin $_POST['dateFin'];
  6082.             
  6083.             $dateDebut = new \DateTime($dateDebut);
  6084.             $dateFin = new \DateTime($dateFin);
  6085.             
  6086.             $expensives $em->getRepository(Expensive::class)
  6087.                         ->depenseParDate($boutique->getId(), $dateDebut$dateFin);
  6088.             
  6089.             
  6090.             return $this->render('admin/expensives_table_content.html.twig', [
  6091.                'boutique' => $boutique,
  6092.                'expensives' => $expensives
  6093.             ]);
  6094.         }
  6095.         
  6096.             
  6097.         return $this->render('admin/expensives.html.twig', [
  6098.            'boutique' => $boutique,
  6099.            'expensives' => $expensives,
  6100.            'userBoutique' => $userBoutique,
  6101.            'intervalleDeDate' => $intervalleDeDate,
  6102.            'dateDebut' => $dateDebut,
  6103.            'dateFin' => $dateFin,
  6104.            'startMonth' => $startMonth,
  6105.            'intervalleMois' => $intervalleMois,
  6106.            'endMonth' => $endMonth,
  6107.            'startYear' => $startYear,
  6108.            'endYear' => $endYear
  6109.            
  6110.         ]);
  6111.     }
  6112.     
  6113.     /**
  6114.      * @Route("/{slug}/expensives/new", name="admin.new_expensive")
  6115.      * @return \Symfony\Component\HttpFoundation\Response
  6116.      */
  6117.     public function newExpensiveAction(Request $requestBoutique $boutique)
  6118.     {
  6119.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  6120.            return $this->redirectToRoute('security_login');
  6121.         }
  6122.         $em $this->getDoctrine()
  6123.                     ->getManager();
  6124.         
  6125.         $expensive = new Expensive;
  6126.         
  6127.         $user $this->getUser();
  6128.         $userBoutique $em->getRepository(UserBoutique::class)
  6129.                         ->findOneBy(
  6130.                             array(
  6131.                             'user' => $user->getId(),
  6132.                             'boutique' => $boutique->getId()
  6133.                             )
  6134.                         );
  6135.         $form $this->createForm(ExpensiveType::class, $expensive, array('boutique' => $boutique->getId()));
  6136.         
  6137.         $ok_soumission '';
  6138.         $error '';
  6139.         $laDate '';
  6140.         if($request->getMethod() == 'POST'){
  6141.             
  6142.                $form->handleRequest($request);
  6143.                if($form->isValid()){
  6144.                 $data $form->getData();
  6145.                    $expensive->setBoutique($boutique);
  6146.                    $expensive->setCreePar($user);
  6147.                   $em->persist($expensive);
  6148.                   $em->flush();
  6149.         
  6150.                 $ok_soumission =" Votre message a été pris en compte";
  6151.                     
  6152.                 $moyenDePaiement $request->request->get('moyenDePaiement');
  6153.                 $expensive->setMoyenDePaiement($moyenDePaiement);
  6154.                 if($boutique->getSettings()->isGenererAutomatiquementEcrituresComptabilite()){
  6155.                 $libelle 'Règlement fournisseur';
  6156.                 if($expensive->getTiers() != null){
  6157.                     $libelle $libelle' '$expensive->getTiers()->getNom();
  6158.                 }
  6159.                 $groupeEcritureComptable = new GroupeEcritureComptable;
  6160.                 $groupeEcritureComptable->setBoutique($boutique);
  6161.                 $groupeEcritureComptable->setLibelleEcriture($libelle);
  6162.                 $groupeEcritureComptable->setDebit($data->getMontant());
  6163.                 $groupeEcritureComptable->setCredit($data->getMontant());
  6164.                 $groupeEcritureComptable->setLaDate($data->getLaDate());
  6165.                 $groupeEcritureComptable->setNumeroPiece($data->getPiece());
  6166.                 $groupeEcritureComptable->setAnnee($data->getLaDate()->format('Y'));
  6167.                 $groupeEcritureComptable->setMois($data->getLaDate()->format('m'));
  6168.                 $em->persist($groupeEcritureComptable);
  6169.                 $em->flush();
  6170.                     
  6171.                 //Ecriture comptable
  6172.                 
  6173.                 //$ecritureComptable->setLeJournal($boutique->getSettings()->getJournalDeVente());
  6174.                 if($moyenDePaiement == 'cash' || $moyenDePaiement == 'mobile-money'){
  6175.                     //Debit
  6176.                     
  6177.                     
  6178.                     $groupeEcritureComptable->setLeJournal($boutique->getSettings()->getJournalDeCaisse());
  6179.                     $ecritureComptable = new EcritureComptable;
  6180.                     
  6181.                     $ecritureComptable->setBoutique($boutique);
  6182.                     $ecritureComptable->setGroupeEcritureComptable($groupeEcritureComptable);
  6183.                     
  6184.                     $ecritureComptable->setLeJournal($boutique->getSettings()->getJournalDeCaisse());
  6185.                     $compte $em->getRepository(Compte::class)
  6186.                                 ->findOneBy(
  6187.                                     array(
  6188.                                         'boutique' => $boutique,
  6189.                                         'numero' => '5711' //Caisse
  6190.                                     )    
  6191.                                 ); 
  6192.                     $compte->setSolde($compte->getSolde() - $data->getMontant());
  6193.                     $ecritureComptable->setCompte($compte);
  6194.                     $ecritureComptable->setLibelleEcriture($libelle);
  6195.                     $ecritureComptable->setCredit($data->getMontant());
  6196.                     $ecritureComptable->setSolde($compte->getSolde());
  6197.                     $ecritureComptable->setLaDate($data->getLaDate());
  6198.                     $ecritureComptable->setNumeroPiece($data->getPiece());
  6199.                     $ecritureComptable->setAnnee($ecritureComptable->getLaDate()->format('Y'));
  6200.                     $ecritureComptable->setMois($ecritureComptable->getLaDate()->format('m'));
  6201.                     $em->persist($ecritureComptable);
  6202.                     //Debit
  6203.                     $ecritureComptable = new EcritureComptable;
  6204.                     $ecritureComptable->setGroupeEcritureComptable($groupeEcritureComptable);
  6205.                     $ecritureComptable->setBoutique($boutique);
  6206.                     
  6207.                     $ecritureComptable->setLeJournal($boutique->getSettings()->getJournalDeCaisse());
  6208.                     $compte $em->getRepository(Compte::class)
  6209.                                 ->findOneBy(
  6210.                                     array(
  6211.                                         'boutique' => $boutique,
  6212.                                         'numero' => '658'
  6213.                                     )    
  6214.                                 ); //Charge divers
  6215.                     $compte->setSolde($compte->getSolde() + $data->getMontant());
  6216.                     $ecritureComptable->setCompte($compte);
  6217.                     $ecritureComptable->setLibelleEcriture($libelle);
  6218.                     $ecritureComptable->setDebit($data->getMontant());
  6219.                     $ecritureComptable->setSolde($compte->getSolde());
  6220.                     $ecritureComptable->setLaDate($data->getLaDate());
  6221.                     $ecritureComptable->setNumeroPiece($data->getPiece());
  6222.                     $ecritureComptable->setAnnee($ecritureComptable->getLaDate()->format('Y'));
  6223.                     $ecritureComptable->setMois($ecritureComptable->getLaDate()->format('m'));
  6224.                     $em->persist($ecritureComptable);
  6225.                 }else{
  6226.                     $leJournal $boutique->getSettings()->getJournalDeBanque();
  6227.                     
  6228.                     $groupeEcritureComptable->setLeJournal($leJournal);
  6229.                     $ecritureComptable = new EcritureComptable;
  6230.                     
  6231.                     $ecritureComptable->setBoutique($boutique);
  6232.                     $ecritureComptable->setGroupeEcritureComptable($groupeEcritureComptable);
  6233.                     
  6234.                     $ecritureComptable->setLeJournal($leJournal);
  6235.                     $compte $em->getRepository(Compte::class)
  6236.                                 ->findOneBy(
  6237.                                     array(
  6238.                                         'boutique' => $boutique,
  6239.                                         'numero' => '521'
  6240.                                     )    
  6241.                                 ); //Banque
  6242.                     $compte->setSolde($compte->getSolde() - $data->getMontant());
  6243.                     $ecritureComptable->setCompte($compte);
  6244.                     $ecritureComptable->setLibelleEcriture($libelle);
  6245.                     $ecritureComptable->setCredit($data->getMontant());
  6246.                     $ecritureComptable->setSolde($compte->getSolde());
  6247.                     $ecritureComptable->setLaDate($data->getLaDate());
  6248.                     $ecritureComptable->setNumeroPiece($data->getPiece());
  6249.                     $ecritureComptable->setAnnee($ecritureComptable->getLaDate()->format('Y'));
  6250.                     $ecritureComptable->setMois($ecritureComptable->getLaDate()->format('m'));
  6251.                     $em->persist($ecritureComptable);
  6252.                     //Debit
  6253.                     $ecritureComptable = new EcritureComptable;
  6254.                     $ecritureComptable->setGroupeEcritureComptable($groupeEcritureComptable);
  6255.                     $ecritureComptable->setBoutique($boutique);
  6256.                     
  6257.                     $ecritureComptable->setLeJournal($leJournal);
  6258.                     $compte $em->getRepository(Compte::class)
  6259.                                 ->findOneBy(
  6260.                                     array(
  6261.                                         'boutique' => $boutique,
  6262.                                         'numero' => '658'
  6263.                                     )    
  6264.                                 ); //Charge divers
  6265.                     $compte->setSolde($compte->getSolde() + $data->getMontant());
  6266.                     $ecritureComptable->setCompte($compte);
  6267.                     $ecritureComptable->setLibelleEcriture($libelle);
  6268.                     $ecritureComptable->setDebit($data->getMontant());
  6269.                     $ecritureComptable->setSolde($compte->getSolde());
  6270.                     $ecritureComptable->setLaDate($data->getLaDate());
  6271.                     $ecritureComptable->setNumeroPiece($data->getPiece());
  6272.                     $ecritureComptable->setAnnee($ecritureComptable->getLaDate()->format('Y'));
  6273.                     $ecritureComptable->setMois($ecritureComptable->getLaDate()->format('m'));
  6274.                     $em->persist($ecritureComptable);
  6275.                 }
  6276.                 }
  6277.                 $em->flush();
  6278.                 $expensive = new Expensive;
  6279.                 
  6280.                 $form $this->createForm(ExpensiveType::class, $expensive);
  6281.                     
  6282.                 } else {
  6283.                     $error =" Veillez corrigez vos erreurs";
  6284.                 }
  6285.         }
  6286.     
  6287.         return $this->render('admin/new_expensive.html.twig', [
  6288.            'boutique' => $boutique,
  6289.            'form' => $form->createView(),
  6290.            'userBoutique' => $userBoutique
  6291.         ]);
  6292.     }
  6293.     
  6294.     /**
  6295.      * @Route("/{slug}/expensive/edit/{id}", name="admin.edit_expensive")
  6296.      * @return \Symfony\Component\HttpFoundation\Response
  6297.      */
  6298.     public function editExpensivesAction(Request $request,  $slug$id)
  6299.     {
  6300.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  6301.            return $this->redirectToRoute('security_login');
  6302.         }
  6303.         $em $this->getDoctrine()
  6304.                     ->getManager();
  6305.         
  6306.         $boutique $em->getRepository(Boutique::class)
  6307.                     ->findOneBySlug($slug);
  6308.         $user $this->getUser();
  6309.         $userBoutique $em->getRepository(UserBoutique::class)
  6310.                         ->findOneBy(
  6311.                             array(
  6312.                             'user' => $user->getId(),
  6313.                             'boutique' => $boutique->getId()
  6314.                             )
  6315.                         );
  6316.         $expensive $em->getRepository(Expensive::class)
  6317.                     ->findOneBy(
  6318.                         array(
  6319.                             'boutique' => $boutique->getId(),
  6320.                             'id' => $id
  6321.                         )
  6322.                     );
  6323.         
  6324.         $form $this->createForm(ExpensiveEditType::class, $expensive, array('boutique' => $boutique->getId()));
  6325.         
  6326.         $ok_soumission '';
  6327.         $error '';
  6328.         
  6329.         if($request->getMethod() == 'POST'){
  6330.             
  6331.                $form->handleRequest($request);
  6332.                if($form->isValid()){
  6333.                 $expensive->setModifiePar($user);
  6334.                   $em->flush();
  6335.         
  6336.                 $ok_soumission =" Votre message a été pris en compte";
  6337.                     
  6338.                     
  6339.                 } else {
  6340.                     $error =" Veillez corrigez vos erreurs";
  6341.                 }
  6342.         }
  6343.     
  6344.         return $this->render('admin/edit_expensive.html.twig', [
  6345.            'boutique' => $boutique,
  6346.            'expensive' => $expensive,
  6347.            'form' => $form->createView(),
  6348.            'userBoutique' => $userBoutique
  6349.         ]);
  6350.     }
  6351.     
  6352.     /**
  6353.      * @Route("/{slug}/expensive/delete/{id}", name="admin.delete_expensive")
  6354.      * @return \Symfony\Component\HttpFoundation\Response
  6355.      */
  6356.     public function deleteExpensiveAction(Request $request$slug$id)
  6357.     {
  6358.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  6359.            return $this->redirectToRoute('security_login');
  6360.         }
  6361.         $em $this->getDoctrine()
  6362.                     ->getManager();
  6363.         $boutique $em->getRepository(Boutique::class)
  6364.                         ->findOneBySlug($slug);
  6365.         $user $this->getUser();
  6366.                         
  6367.         $expensive $em->getRepository(Expensive::class)
  6368.                         ->findOneBy(
  6369.                         array(
  6370.                             'boutique' => $boutique->getId(),
  6371.                             'id' => $id
  6372.                         )
  6373.                         );
  6374.         if(null !== $expensive){
  6375.             $expensive->setEstSupprime(true);
  6376.             $expensive->setSupprimePar($user);
  6377.             //$em->remove($expensive);
  6378.             $em->flush();
  6379.         }
  6380.         return $this->redirectToRoute('admin.expensives', array('slug' => $boutique->getSlug()));
  6381.     }
  6382.     /**
  6383.      * @Route("/{slug}/categorie-depense/list", name="admin_categorie_depenses")
  6384.      * @return \Symfony\Component\HttpFoundation\Response
  6385.      */
  6386.     public function categorieDepenseAction(Request $requestBoutique $boutique)
  6387.     {
  6388.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  6389.            return $this->redirectToRoute('security_login');
  6390.         }
  6391.         $em $this->getDoctrine()
  6392.                     ->getManager();
  6393.         
  6394.         $categorieDepenses  $em->getRepository(CategorieDepense::class)
  6395.                         ->findBy(
  6396.                             array(
  6397.                                 'boutique' => $boutique->getId()
  6398.                             )    
  6399.                         );
  6400.         
  6401.         $user $this->getUser();
  6402.         $userBoutique $em->getRepository(UserBoutique::class)
  6403.                         ->findOneBy(
  6404.                             array(
  6405.                             'user' => $user->getId(),
  6406.                             'boutique' => $boutique->getId()
  6407.                             )
  6408.                         );
  6409.         
  6410.         
  6411.             
  6412.         return $this->render('admin/categorie_depenses.html.twig', [
  6413.            'boutique' => $boutique,
  6414.            'userBoutique' => $userBoutique,
  6415.            'categorieDepenses' => $categorieDepenses
  6416.            
  6417.         ]);
  6418.     }
  6419.     
  6420.     /**
  6421.      * @Route("/{slug}/categorie-depense/nouveau", name="admin_nouvelle_categorie_dedepense")
  6422.      * @return \Symfony\Component\HttpFoundation\Response
  6423.      */
  6424.     public function nouvelleCategorieDepenseAction(Request $requestBoutique $boutique)
  6425.     {
  6426.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  6427.            return $this->redirectToRoute('security_login');
  6428.         }
  6429.         $em $this->getDoctrine()
  6430.                     ->getManager();
  6431.         
  6432.         $categorieDepense = new CategorieDepense;
  6433.         
  6434.         $user $this->getUser();
  6435.         $userBoutique $em->getRepository(UserBoutique::class)
  6436.                         ->findOneBy(
  6437.                             array(
  6438.                             'user' => $user->getId(),
  6439.                             'boutique' => $boutique->getId()
  6440.                             )
  6441.                         );
  6442.         $form $this->createForm(CategorieDepenseType::class, $categorieDepense);
  6443.         
  6444.         $ok_soumission '';
  6445.         
  6446.         if($request->getMethod() == 'POST'){
  6447.             
  6448.                $form->handleRequest($request);
  6449.                if($form->isValid()){
  6450.                 $categorieDepense->setBoutique($boutique);
  6451.                   $em->persist($categorieDepense);
  6452.                   $em->flush();
  6453.         
  6454.                 $ok_soumission =" Votre message a été pris en compte";
  6455.                     
  6456.                 $categorieDepense = new CategorieDepense;
  6457.                 
  6458.                 $form $this->createForm(CategorieDepenseType::class, $categorieDepense);
  6459.                     
  6460.                 } else {
  6461.                     $error =" Veillez corrigez vos erreurs";
  6462.                 }
  6463.         }
  6464.     
  6465.         return $this->render('admin/nouvelle_categorie_depense.html.twig', [
  6466.            'boutique' => $boutique,
  6467.            'form' => $form->createView(),
  6468.            'userBoutique' => $userBoutique
  6469.         ]);
  6470.     }
  6471.     
  6472.     /**
  6473.      * @Route("/{slug}/categorie-depense/modifier/{id}", name="admin_modifier_categorie_depense")
  6474.      * @return \Symfony\Component\HttpFoundation\Response
  6475.      */
  6476.     public function modifierCategorieDepenseAction(Request $request,  $slug$id)
  6477.     {
  6478.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  6479.            return $this->redirectToRoute('security_login');
  6480.         }
  6481.         $em $this->getDoctrine()
  6482.                     ->getManager();
  6483.         
  6484.         $boutique $em->getRepository(Boutique::class)
  6485.                     ->findOneBySlug($slug);
  6486.         $user $this->getUser();
  6487.         $userBoutique $em->getRepository(UserBoutique::class)
  6488.                         ->findOneBy(
  6489.                             array(
  6490.                             'user' => $user->getId(),
  6491.                             'boutique' => $boutique->getId()
  6492.                             )
  6493.                         );
  6494.         $categorieDepense $em->getRepository(CategorieDepense::class)
  6495.                     ->findOneBy(
  6496.                         array(
  6497.                             'boutique' => $boutique->getId(),
  6498.                             'id' => $id
  6499.                         )
  6500.                     );
  6501.         
  6502.         $form $this->createForm(CategorieDepenseEditType::class, $categorieDepense);
  6503.         
  6504.         $ok_soumission '';
  6505.         $error '';
  6506.         
  6507.         if($request->getMethod() == 'POST'){
  6508.             
  6509.                $form->handleRequest($request);
  6510.                if($form->isValid()){
  6511.                 
  6512.                   $em->flush();
  6513.         
  6514.                 $ok_soumission =" Votre message a été pris en compte";
  6515.                     
  6516.                     
  6517.                 } else {
  6518.                     $error =" Veillez corrigez vos erreurs";
  6519.                 }
  6520.         }
  6521.     
  6522.         return $this->render('admin/modifier_categorie_depense.html.twig', [
  6523.            'boutique' => $boutique,
  6524.            'categorieDepense' => $categorieDepense,
  6525.            'form' => $form->createView(),
  6526.            'userBoutique' => $userBoutique
  6527.         ]);
  6528.     }
  6529.     
  6530.     /**
  6531.      * @Route("/{slug}/categorie-depense/supprimer/{id}", name="admin_supprimer_categorie_depense")
  6532.      * @return \Symfony\Component\HttpFoundation\Response
  6533.      */
  6534.     public function supprimerCategorieDepenseAction(Request $request$slug$id)
  6535.     {
  6536.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  6537.            return $this->redirectToRoute('security_login');
  6538.         }
  6539.         $em $this->getDoctrine()
  6540.                     ->getManager();
  6541.         $boutique $em->getRepository(Boutique::class)
  6542.                         ->findOneBySlug($slug);
  6543.         $user $this->getUser();
  6544.                         
  6545.         $categorieDepense $em->getRepository(CategorieDepense::class)
  6546.                         ->findOneBy(
  6547.                         array(
  6548.                             'boutique' => $boutique->getId(),
  6549.                             'id' => $id
  6550.                         )
  6551.                         );
  6552.         if(null !== $categorieDepense){
  6553.             
  6554.             $em->remove($categorieDepense);
  6555.             $em->flush();
  6556.         }
  6557.         return $this->redirectToRoute('admin_categorie_depenses', array('slug' => $boutique->getSlug()));
  6558.     }
  6559.     
  6560.     
  6561.     /**
  6562.      * @Route("/{slug}/third/list", name="admin.liste_tiers")
  6563.      * @return \Symfony\Component\HttpFoundation\Response
  6564.      */
  6565.     public function listeTiersAction(Request $requestBoutique $boutique)
  6566.     {
  6567.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  6568.            return $this->redirectToRoute('security_login');
  6569.         }
  6570.         $em $this->getDoctrine()
  6571.                     ->getManager();
  6572.         
  6573.         $tiers $em->getRepository(Tiers::class)
  6574.                     ->findBy(
  6575.                         array(
  6576.                             'boutique' => $boutique->getId(),
  6577.                             'estSupprime' => false
  6578.                             
  6579.                         ),
  6580.                         array(
  6581.                             'nom' => 'ASC'
  6582.                         )
  6583.                         );
  6584.         $user $this->getUser();
  6585.         $userBoutique $em->getRepository(UserBoutique::class)
  6586.                         ->findOneBy(
  6587.                             array(
  6588.                             'user' => $user->getId(),
  6589.                             'boutique' => $boutique->getId()
  6590.                             )
  6591.                         );
  6592.         return $this->render('admin/liste_tiers.html.twig', [
  6593.            'boutique' => $boutique,
  6594.            'tiers' => $tiers,
  6595.            'userBoutique' => $userBoutique
  6596.         ]);
  6597.     }
  6598.     
  6599.     //Service
  6600.     
  6601.     /**
  6602.      * @Route("/{slug}/new-third", name="admin.new_third")
  6603.      * @return \Symfony\Component\HttpFoundation\Response
  6604.      */
  6605.     public function newThirdAction(Request $requestBoutique $boutique)
  6606.     {
  6607.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  6608.            return $this->redirectToRoute('security_login');
  6609.         }
  6610.         $em $this->getDoctrine()
  6611.                     ->getManager();
  6612.         
  6613.         $tiers = new Tiers;
  6614.         $form $this->createForm(TiersType::class, $tiers);
  6615.         
  6616.         $user $this->getUser();
  6617.         $userBoutique $em->getRepository(UserBoutique::class)
  6618.                         ->findOneBy(
  6619.                             array(
  6620.                             'user' => $user->getId(),
  6621.                             'boutique' => $boutique->getId()
  6622.                             )
  6623.                         );
  6624.         
  6625.         $ok_soumission '';
  6626.         $error '';
  6627.         
  6628.         if($request->getMethod() == 'POST'){
  6629.             
  6630.                $form->handleRequest($request);
  6631.                if($form->isValid()){
  6632.                    $tiers->setBoutique($boutique);
  6633.                    $tiers->setCreePar($user);
  6634.                   $em->persist($tiers);
  6635.                   $em->flush();
  6636.         
  6637.                 $ok_soumission =" Votre message a été pris en compte";
  6638.                 $tiers = new Tiers;
  6639.                 
  6640.                 $form $this->createForm(TiersType::class, $tiers);
  6641.                     
  6642.                 } else {
  6643.                     $error =" Veillez corrigez vos erreurs";
  6644.                 }
  6645.         }
  6646.         return $this->render('admin/nouveau_tiers.html.twig', [
  6647.            'boutique' => $boutique,
  6648.            'form' => $form->createView(),
  6649.            'userBoutique' => $userBoutique
  6650.         ]);
  6651.     }
  6652.     /**
  6653.      * @Route("/{slug}/edit-third/{third}", name="admin.edit_third")
  6654.      * @return \Symfony\Component\HttpFoundation\Response
  6655.      */
  6656.     public function editThirdAction(Request $requestBoutique $boutique$third)
  6657.     {
  6658.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  6659.            return $this->redirectToRoute('security_login');
  6660.         }
  6661.         $em $this->getDoctrine()
  6662.                     ->getManager();
  6663.                     
  6664.         $user $this->getUser();
  6665.         $userBoutique $em->getRepository(UserBoutique::class)
  6666.                         ->findOneBy(
  6667.                             array(
  6668.                             'user' => $user->getId(),
  6669.                             'boutique' => $boutique->getId()
  6670.                             )
  6671.                         );
  6672.         $third $em->getRepository(Tiers::class)
  6673.                     ->findOneById($third);
  6674.         $form $this->createForm(TiersEditType::class, $third);
  6675.         
  6676.         $ok_soumission '';
  6677.         $error '';
  6678.         
  6679.         if($request->getMethod() == 'POST'){
  6680.             
  6681.                $form->handleRequest($request);
  6682.                if($form->isValid()){
  6683.                     $third->setModifiePar($user);
  6684.                   $em->flush();
  6685.         
  6686.                 $ok_soumission =" Votre message a été pris en compte";
  6687.                     
  6688.                 } else {
  6689.                     $error =" Veillez corrigez vos erreurs";
  6690.                 }
  6691.         }
  6692.         return $this->render('admin/edit_third.html.twig', [
  6693.            'boutique' => $boutique,
  6694.            'form' => $form->createView(),
  6695.            'third' => $third,
  6696.            'userBoutique' => $userBoutique
  6697.         ]);
  6698.     }
  6699.     /**
  6700.      * @Route("/{slug}/delete-third/{third}", name="admin.delete_third")
  6701.      * @return \Symfony\Component\HttpFoundation\Response
  6702.      */
  6703.     public function deleteThirdAction(Request $requestBoutique $boutique$third)
  6704.     {
  6705.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  6706.            return $this->redirectToRoute('security_login');
  6707.         }
  6708.         $em $this->getDoctrine()
  6709.                     ->getManager();
  6710.         $user $this->getUser();
  6711.         $third $em->getRepository(Tiers::class)
  6712.                     ->findOneById($third);
  6713.                     
  6714.         if(null != $third){
  6715.             $third->setEstSupprime(true);
  6716.             $third->setSupprimePar($user);
  6717.             $em->flush();
  6718.         }
  6719.         
  6720.         return $this->redirectToRoute('admin.liste_tiers', array('slug' => $boutique->getSlug()));
  6721.     }
  6722.     /**
  6723.      * @Route("/{slug}/statistics", name="admin.statistics")
  6724.      * @return \Symfony\Component\HttpFoundation\Response
  6725.      */
  6726.     public function statisticsAction(Request $requestBoutique $boutique)
  6727.     {
  6728.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  6729.            return $this->redirectToRoute('security_login');
  6730.         }
  6731.         $em $this->getDoctrine()
  6732.                     ->getManager();
  6733.         
  6734.         $tiers $em->getRepository(Tiers::class)
  6735.                     ->findByBoutique($boutique);
  6736.         $user $this->getUser();
  6737.         $userBoutique $em->getRepository(UserBoutique::class)
  6738.                         ->findOneBy(
  6739.                             array(
  6740.                             'user' => $user->getId(),
  6741.                             'boutique' => $boutique->getId()
  6742.                             )
  6743.                         );
  6744.                         
  6745.         return $this->render('admin/statistics.html.twig', [
  6746.            'boutique' => $boutique,
  6747.            'tiers' => $tiers,
  6748.            'userBoutique' => $userBoutique
  6749.         ]);
  6750.     }
  6751.     
  6752.     /**
  6753.      * @Route("/{slug}/promotions", name="admin.promotions")
  6754.      * @return \Symfony\Component\HttpFoundation\Response
  6755.      */
  6756.     public function promotionsAction(Request $requestBoutique $boutique)
  6757.     {
  6758.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  6759.            return $this->redirectToRoute('security_login');
  6760.         }
  6761.         $em $this->getDoctrine()
  6762.                     ->getManager();
  6763.         
  6764.         $tiers $em->getRepository(Tiers::class)
  6765.                     ->findByBoutique($boutique);
  6766.         $user $this->getUser();
  6767.         $userBoutique $em->getRepository(UserBoutique::class)
  6768.                         ->findOneBy(
  6769.                             array(
  6770.                             'user' => $user->getId(),
  6771.                             'boutique' => $boutique->getId()
  6772.                             )
  6773.                         );
  6774.         return $this->render('admin/liste_tiers.html.twig', [
  6775.            'boutique' => $boutique,
  6776.            'tiers' => $tiers,
  6777.            'userBoutique' => $userBoutique
  6778.         ]);
  6779.     }
  6780.     
  6781.     /**
  6782.      * @Route("/{slug}/new-payment-patern", name="admin.new_payment_patern")
  6783.      * @return \Symfony\Component\HttpFoundation\Response
  6784.      */
  6785.     public function newPayementPaternMethodAction(Request $requestBoutique $boutique)
  6786.     {
  6787.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  6788.            return $this->redirectToRoute('security_login');
  6789.         }
  6790.         $em $this->getDoctrine()
  6791.                     ->getManager();
  6792.         
  6793.         $modeleReglement = new ModeleReglement;
  6794.         $form $this->createForm(ModeleReglementType::class, $modeleReglement);
  6795.         
  6796.         $ok_soumission '';
  6797.         $error '';
  6798.         $user $this->getUser();
  6799.         $userBoutique $em->getRepository(UserBoutique::class)
  6800.                         ->findOneBy(
  6801.                             array(
  6802.                             'user' => $user->getId(),
  6803.                             'boutique' => $boutique->getId()
  6804.                             )
  6805.                         );
  6806.         if($request->getMethod() == 'POST'){
  6807.             
  6808.                $form->handleRequest($request);
  6809.                if($form->isValid()){
  6810.                    $modeleReglement->setBoutique($boutique);
  6811.                   $em->persist($modeleReglement);
  6812.                   $em->flush();
  6813.         
  6814.                 $ok_soumission =" Votre message a été pris en compte";
  6815.                     
  6816.                 unset($modeleReglement);
  6817.                 unset($form);
  6818.                 $modeleReglement = new ModeleReglement;
  6819.                 
  6820.                 $form $this->createForm(ModeleReglementType::class, $modeleReglement);
  6821.                     
  6822.                 } else {
  6823.                     $error =" Veillez corrigez vos erreurs";
  6824.                 }
  6825.         }
  6826.         return $this->render('admin/nouveau_modele_reglement.html.twig', [
  6827.            'boutique' => $boutique
  6828.            'form' => $form->createView(),
  6829.            'userBoutique' => $userBoutique
  6830.         ]);
  6831.     }
  6832.     
  6833.     /**
  6834.      * @Route("/{slug}/payment-patern/list", name="admin.list_payment_patern")
  6835.      * @return \Symfony\Component\HttpFoundation\Response
  6836.      */
  6837.     public function listeModeleReglementAction(Request $requestBoutique $boutique)
  6838.     {
  6839.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  6840.            return $this->redirectToRoute('security_login');
  6841.         }
  6842.         $em $this->getDoctrine()
  6843.                     ->getManager();
  6844.         
  6845.         $modeleReglements $em->getRepository(ModeleReglement::class)
  6846.                     ->findByBoutique($boutique);
  6847.         $user $this->getUser();
  6848.         $userBoutique $em->getRepository(UserBoutique::class)
  6849.                         ->findOneBy(
  6850.                             array(
  6851.                             'user' => $user->getId(),
  6852.                             'boutique' => $boutique->getId()
  6853.                             )
  6854.                         );
  6855.                         
  6856.         return $this->render('admin/liste_modele_reglement.html.twig', [
  6857.            'boutique' => $boutique,
  6858.            'modeleReglements' => $modeleReglements,
  6859.            'userBoutique' => $userBoutique
  6860.         ]);
  6861.     }
  6862.     
  6863.     /**
  6864.      * @Route("/{slug}/send-document-mail/{id}", name="admin.send_document_mail")
  6865.      * @return \Symfony\Component\HttpFoundation\Response
  6866.      */
  6867.     public function sendDocumentMailAction(Request $request, \Swift_Mailer $mailer$slug$id)
  6868.     {
  6869.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  6870.            return $this->redirectToRoute('security_login');
  6871.         }
  6872.         $em $this->getDoctrine()
  6873.                     ->getManager();
  6874.         $boutique $em->getRepository(Boutique::class)
  6875.                         ->findOneBySlug($slug);
  6876.         $user $this->getUser();
  6877.         $userBoutique $em->getRepository(UserBoutique::class)
  6878.                         ->findOneBy(
  6879.                             array(
  6880.                             'user' => $user->getId(),
  6881.                             'boutique' => $boutique->getId()
  6882.                             )
  6883.                         );        
  6884.         $commande $em->getRepository(Commande::class)
  6885.                     ->findOneBy(
  6886.                         array(
  6887.                         'boutique' => $boutique->getId(),
  6888.                         'id' => $id
  6889.                         )
  6890.                     );
  6891.         
  6892.         $appName $this->getParameter('app_name');
  6893.         if('POST'== $request->getMethod()){
  6894.             $from $_POST['from'];
  6895.             $to $_POST['to_mail'];
  6896.             $subject $_POST['subject'];
  6897.             $contenu $_POST['message'];
  6898.             $sendAttachment = (bool)$_POST['send_attachment'];
  6899.             
  6900.             $message = (new \Swift_Message($subject))
  6901.             ->setFrom([$from  => $appName])
  6902.             ->setTo([$to])
  6903.             ->setBody(
  6904.                 $this->renderView(
  6905.                 'admin/document_email.html.twig',
  6906.                 [
  6907.                 'message' => $contenu
  6908.                 ]
  6909.                 ),
  6910.             'text/html'
  6911.             );
  6912.             if($sendAttachment){
  6913.                 $message->attach(\Swift_Attachment::fromPath($commande->getLienPDF()));
  6914.             }
  6915.             
  6916.             $mailer->send($message);
  6917.             
  6918.         }
  6919.         
  6920.         return $this->render('admin/send_document_mail.html.twig', [
  6921.            'boutique' => $boutique,
  6922.            'commande' => $commande,
  6923.            'userBoutique' => $userBoutique
  6924.         ]);
  6925.     }
  6926.     
  6927.     
  6928.     /**
  6929.      * @Route("/{slug}/nombre-commande-en-retard", name="admin.nombre_commande_en_retard")
  6930.      * @return \Symfony\Component\HttpFoundation\Response
  6931.      */
  6932.     public function nombreCommandeEnRetard(Request $requestBoutique $boutique)
  6933.     {
  6934.         $em $this->getDoctrine()
  6935.                     ->getManager();
  6936.         $nombreCommandeEnRetard $em->getRepository(Commande::class)
  6937.                         -> nombreCommandeEnRetard($boutique->getId());
  6938.                         
  6939.         $nombreCommandeEnRetard count($nombreCommandeEnRetard);
  6940.         $user $this->getUser();
  6941.         $userBoutique $em->getRepository(UserBoutique::class)
  6942.                         ->findOneBy(
  6943.                             array(
  6944.                             'user' => $user->getId(),
  6945.                             'boutique' => $boutique->getId()
  6946.                             )
  6947.                         );
  6948.         return $this->render('admin/nombre_commande_en_retard.html.twig', [
  6949.            'boutique' => $boutique,
  6950.            'nombreCommandeEnRetard' => $nombreCommandeEnRetard,
  6951.            'userBoutique' => $userBoutique
  6952.         ]);
  6953.     }
  6954.     
  6955.     /**
  6956.      * @Route("/{slug}/liste-commande-en-retard", name="admin.liste_commande_en_retard")
  6957.      * @return \Symfony\Component\HttpFoundation\Response
  6958.      */
  6959.     public function listeCommandeEnRetard(Request $requestBoutique $boutique)
  6960.     {
  6961.         $em $this->getDoctrine()
  6962.                     ->getManager();
  6963.         $nombreCommandeEnRetards $em->getRepository(Commande::class)
  6964.                         -> nombreCommandeEnRetard($boutique->getId());
  6965.                         
  6966.         $user $this->getUser();
  6967.         $userBoutique $em->getRepository(UserBoutique::class)
  6968.                         ->findOneBy(
  6969.                             array(
  6970.                             'user' => $user->getId(),
  6971.                             'boutique' => $boutique->getId()
  6972.                             )
  6973.                         );
  6974.         
  6975.         return $this->render('admin/liste_commande_en_retard.html.twig', [
  6976.            'boutique' => $boutique,
  6977.            'nombreCommandeEnRetards' => $nombreCommandeEnRetards,
  6978.            'userBoutique' => $userBoutique
  6979.         ]);
  6980.     }
  6981.     
  6982.     /**
  6983.      * @Route("/{slug}/my-invoices", name="admin.my_invoices")
  6984.      * @return \Symfony\Component\HttpFoundation\Response
  6985.      */
  6986.     public function myInvoicesAction(Request $requestBoutique $boutique)
  6987.     {
  6988.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  6989.            return $this->redirectToRoute('security_login');
  6990.         }
  6991.         $em $this->getDoctrine()
  6992.                     ->getManager();
  6993.                     
  6994.         
  6995.                         
  6996.         $toutesLesValiditeServices $em->getRepository(ValiditeService::class)
  6997.                     ->toutesLesValiditeService($boutique->getId());
  6998.                     
  6999.         
  7000.         $user $this->getUser();
  7001.         $userBoutique $em->getRepository(UserBoutique::class)
  7002.                         ->findOneBy(
  7003.                             array(
  7004.                             'user' => $user->getId(),
  7005.                             'boutique' => $boutique->getId()
  7006.                             )
  7007.                         );
  7008.                         
  7009.         return $this->render('admin/my_invoices.html.twig', [
  7010.            'toutesLesValiditeServices' => $toutesLesValiditeServices,
  7011.            'boutique' => $boutique,
  7012.            'userBoutique' => $userBoutique
  7013.         ]);
  7014.     }
  7015.     
  7016.     /**
  7017.      * @Route("/{slug}/my-tickets/{id}", name="admin.my_tickets")
  7018.      * @return \Symfony\Component\HttpFoundation\Response
  7019.      */
  7020.     public function myTicketsAction(Request $request$slug$id)
  7021.     {
  7022.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  7023.            return $this->redirectToRoute('security_login');
  7024.         }
  7025.         $em $this->getDoctrine()
  7026.                     ->getManager();
  7027.                     
  7028.         $boutique $em->getRepository(Boutique::class)
  7029.                         ->findOneBySlug($slug);
  7030.         $user $this->getUser();
  7031.         $userBoutique $em->getRepository(UserBoutique::class)
  7032.                         ->findOneBy(
  7033.                             array(
  7034.                             'user' => $user->getId(),
  7035.                             'boutique' => $boutique->getId()
  7036.                             )
  7037.                         );
  7038.         
  7039.         $tickets $em->getRepository(Ticket::class)
  7040.                         ->findBy(
  7041.                             array(
  7042.                                 'boutique'=>$boutique->getId(),
  7043.                                 'user' => $user->getId()
  7044.                             )
  7045.                         );
  7046.         
  7047.         return $this->render('admin/my_tickets.html.twig', [
  7048.            'boutique' => $boutique,
  7049.            'tickets'  => $tickets,
  7050.            'userBoutique' => $userBoutique
  7051.         ]);
  7052.     }
  7053.     
  7054.     /**
  7055.      * @Route("/{slug}/new-ticket", name="admin.new_ticket")
  7056.      * @return \Symfony\Component\HttpFoundation\Response
  7057.      */
  7058.     public function newTicketAction(Request $request$slug)
  7059.     {
  7060.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  7061.            return $this->redirectToRoute('security_login');
  7062.         }
  7063.         $em $this->getDoctrine()
  7064.                     ->getManager();
  7065.                     
  7066.         $boutique $em->getRepository(Boutique::class)
  7067.                         ->findOneBySlug($slug);
  7068.         $user $this->getUser();
  7069.         
  7070.         $ticket = new Ticket;
  7071.         
  7072.         $user $this->getUser();
  7073.         $userBoutique $em->getRepository(UserBoutique::class)
  7074.                         ->findOneBy(
  7075.                             array(
  7076.                             'user' => $user->getId(),
  7077.                             'boutique' => $boutique->getId()
  7078.                             )
  7079.                         );
  7080.         $form $this->createForm(TicketType::class, $ticket);
  7081.         
  7082.         $ok_soumission '';
  7083.         $error '';
  7084.         
  7085.         if($request->getMethod() == 'POST'){
  7086.             
  7087.                $form->handleRequest($request);
  7088.                if($form->isValid()){
  7089.                    $ticket->setBoutique($boutique);
  7090.                    $ticket->setUser($user);
  7091.                    
  7092.                   $em->persist($ticket);
  7093.                   $em->flush();
  7094.                   
  7095.                 return $this->redirectToRoute('admin.display_ticket', array('slug' => $boutique->getSlug(), 'id' => $ticket->getId()));
  7096.                 $ok_soumission =" Votre message a été pris en compte";
  7097.                     
  7098.                 $ticket = new Ticket;
  7099.                 
  7100.                 $form $this->createForm(TicketType::class, $ticket);
  7101.                     
  7102.                 } else {
  7103.                     $error =" Veillez corrigez vos erreurs";
  7104.                 }
  7105.         }
  7106.         
  7107.         return $this->render('admin/new_ticket.html.twig', [
  7108.            'boutique' => $boutique,
  7109.            'form' => $form->createView(),
  7110.            'userBoutique' => $userBoutique
  7111.         ]);
  7112.     }
  7113.     
  7114.     /**
  7115.      * @Route("/{slug}/display-ticket/{id}", name="admin.display_ticket")
  7116.      * @return \Symfony\Component\HttpFoundation\Response
  7117.      */
  7118.     public function displayTicketAction(Request $request$slug$id)
  7119.     {
  7120.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  7121.            return $this->redirectToRoute('security_login');
  7122.         }
  7123.         $em $this->getDoctrine()
  7124.                     ->getManager();
  7125.                     
  7126.         $boutique $em->getRepository(Boutique::class)
  7127.                         ->findOneBySlug($slug);
  7128.         $user $this->getUser();
  7129.         $userBoutique $em->getRepository(UserBoutique::class)
  7130.                         ->findOneBy(
  7131.                             array(
  7132.                             'user' => $user->getId(),
  7133.                             'boutique' => $boutique->getId()
  7134.                             )
  7135.                         );
  7136.         
  7137.         $ticket $em->getRepository(Ticket::class)
  7138.                     ->findOneBy(
  7139.                         array(
  7140.                             'boutique' => $boutique->getId(),
  7141.                             'id' => $id
  7142.                         )
  7143.                     );
  7144.         $commentaires $em->getRepository(CommentaireTicket::class)
  7145.                             ->findByTicket($ticket->getId());
  7146.         $commentaireTicket = new CommentaireTicket;
  7147.         
  7148.         $user $this->getUser();
  7149.         $form $this->createForm(CommentaireTicketType::class, $commentaireTicket);
  7150.         
  7151.         $ok_soumission '';
  7152.         $error '';
  7153.         
  7154.         if($request->getMethod() == 'POST'){
  7155.             
  7156.                $form->handleRequest($request);
  7157.                if($form->isValid()){
  7158.                    
  7159.                    $commentaireTicket->setTicket($ticket);
  7160.                    $commentaireTicket->setUser($user);
  7161.                    
  7162.                   $em->persist($commentaireTicket);
  7163.                   $em->flush();
  7164.                 
  7165.                 $commentaires $em->getRepository(CommentaireTicket::class)
  7166.                             ->findByTicket($ticket->getId());
  7167.                 $ok_soumission =" Votre message a été pris en compte";
  7168.                     
  7169.                 $commentaireTicket = new CommentaireTicket;
  7170.                 
  7171.                 $form $this->createForm(CommentaireTicketType::class, $commentaireTicket);
  7172.                     
  7173.                 } else {
  7174.                     $error =" Veillez corrigez vos erreurs";
  7175.                 }
  7176.         }
  7177.         
  7178.         return $this->render('admin/display_ticket.html.twig', [
  7179.            'boutique' => $boutique,
  7180.            'ticket' => $ticket,
  7181.            'form' => $form->createView(),
  7182.            'commentaires' => $commentaires,
  7183.            'userBoutique' => $userBoutique
  7184.         ]);
  7185.     }
  7186.     
  7187.     /**
  7188.      * @Route("/{slug}/close-ticket/{id}", name="admin.close_ticket")
  7189.      * @return \Symfony\Component\HttpFoundation\Response
  7190.      */
  7191.     public function closeTicketAction(Request $request$slug$id)
  7192.     {
  7193.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  7194.            return $this->redirectToRoute('security_login');
  7195.         }
  7196.         $em $this->getDoctrine()
  7197.                     ->getManager();
  7198.                     
  7199.         $boutique $em->getRepository(Boutique::class)
  7200.                         ->findOneBySlug($slug);
  7201.         
  7202.         $ticket $em->getRepository(Ticket::class)
  7203.                     ->findOneBy(
  7204.                         array(
  7205.                             'boutique' => $boutique->getId(),
  7206.                             'id' => $id
  7207.                         )
  7208.                     );
  7209.         
  7210.         if(null !== $ticket){
  7211.             $ticket->setLesCommentairesSontFermes(true);
  7212.             $em->flush();
  7213.         }
  7214.         
  7215.         return $this->redirectToRoute('admin.display_ticket',array('slug'=>$boutique->getSlug(), 'id'=>$ticket->getId()));
  7216.     }
  7217.     
  7218.     
  7219.     /**
  7220.      * @Route("/{slug}/delete-ticket/{id}", name="admin.delete_ticket")
  7221.      * @return \Symfony\Component\HttpFoundation\Response
  7222.      */
  7223.     public function deleteTicketAction(Request $request$slug$id)
  7224.     {
  7225.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  7226.            return $this->redirectToRoute('security_login');
  7227.         }
  7228.         $em $this->getDoctrine()
  7229.                     ->getManager();
  7230.                     
  7231.         $boutique $em->getRepository(Boutique::class)
  7232.                         ->findOneBySlug($slug);
  7233.         $user $this->getUser();
  7234.         
  7235.         
  7236.         $ok_soumission '';
  7237.         $error '';
  7238.         
  7239.         $ticket $em->getRepository(Ticket::class)
  7240.                     ->findOneBy(
  7241.                         array(
  7242.                             'boutique' => $boutique->getId(),
  7243.                             'id' => $id
  7244.                         )
  7245.                     );
  7246.         if(null !== $ticket){
  7247.             $commentaireTickets $em->getRepository(CommentaireTicket::class)
  7248.                                     ->findByTicket($ticket->getId());
  7249.             foreach($commentaireTickets as $commentaireTicket)
  7250.             {
  7251.                 $em->remove($commentaireTicket);
  7252.             }
  7253.             $em->remove($ticket);
  7254.             $em->flush();
  7255.         }
  7256.         
  7257.         return $this->redirectToRoute('admin.my_tickets',array('slug'=>$boutique->getSlug(), 'id'=>$user->getId()));
  7258.     }
  7259.     
  7260.     
  7261.     /**
  7262.      * @Route("/{slug}/delete-commentaire-ticket/{id}", name="admin.delete_commentaire_ticket")
  7263.      * @return \Symfony\Component\HttpFoundation\Response
  7264.      */
  7265.     public function deleteCommentaireTicketAction(Request $request$slug$id)
  7266.     {
  7267.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  7268.            return $this->redirectToRoute('security_login');
  7269.         }
  7270.         $em $this->getDoctrine()
  7271.                     ->getManager();
  7272.                     
  7273.         $boutique $em->getRepository(Boutique::class)
  7274.                         ->findOneBySlug($slug);
  7275.         $user $this->getUser();
  7276.     
  7277.         $commentaireTicket $em->getRepository(CommentaireTicket::class)
  7278.                     ->findOneById($id);
  7279.                     
  7280.         if(null !== $commentaireTicket){
  7281.             
  7282.             $em->remove($commentaireTicket);
  7283.             $em->flush();
  7284.         }
  7285.         
  7286.         return $this->redirectToRoute('admin.my_tickets',array('slug'=>$boutique->getSlug(), 'id'=>$user->getId()));
  7287.     }
  7288.     
  7289.     /**
  7290.      * @Route("/{slug}/liste-produit-lors-commande", name="admin.liste_produit_lors_commande")
  7291.      * @return \Symfony\Component\HttpFoundation\Response
  7292.      */
  7293.     public function listeProduitLorsCommandeAction(Request $requestBoutique $boutique)
  7294.     {
  7295.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  7296.            return $this->redirectToRoute('security_login');
  7297.         }
  7298.         
  7299.         $em $this->getDoctrine()
  7300.                     ->getManager();
  7301.                     
  7302.         $produits $em->getRepository(Produit::class)
  7303.                         ->findBy(
  7304.                             array(
  7305.                                 'boutique' => $boutique->getId(),
  7306.                                 'estSupprime' => false
  7307.                             )    
  7308.                         );
  7309.         $user $this->getUser();
  7310.         $userBoutique $em->getRepository(UserBoutique::class)
  7311.                         ->findOneBy(
  7312.                             array(
  7313.                             'user' => $user->getId(),
  7314.                             'boutique' => $boutique->getId()
  7315.                             )
  7316.                         );
  7317.         
  7318.         
  7319.         return $this->render('admin/liste_produit_lors_commande.html.twig', [
  7320.            'boutique' => $boutique,
  7321.            'produits' => $produits,
  7322.            'userBoutique' => $userBoutique
  7323.         ]);
  7324.     }
  7325.     
  7326.     /**
  7327.      * @Route("/{slug}/stock-management", name="admin.stock_management")
  7328.      * @return \Symfony\Component\HttpFoundation\Response
  7329.      */
  7330.     public function stockManagementAction(Request $requestBoutique $boutique)
  7331.     {
  7332.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  7333.            return $this->redirectToRoute('security_login');
  7334.         }
  7335.         $em $this->getDoctrine()
  7336.                     ->getManager();
  7337.                     
  7338.         $produits $em->getRepository(Produit::class)
  7339.                         ->findByBoutique($boutique->getId());
  7340.         $user $this->getUser();
  7341.         $intervalleDeDate  $this->intervalleSemaine(date('Y-m-d'));
  7342.         
  7343.         
  7344.         $intervalleMois $this->intervalleMois(date('Y-m-d'));
  7345.         $startMonth $intervalleMois['debut'];
  7346.         $endMonth $intervalleMois['fin'];
  7347.         
  7348.         $dateDebut = new \DateTime($startMonth);
  7349.         $dateFin = new \DateTime($endMonth);
  7350.         $startYear date('Y-01-01');
  7351.         $endYear date('Y-12-31');
  7352.         $user $this->getUser();
  7353.         
  7354.         $userBoutique $em->getRepository(UserBoutique::class)
  7355.                         ->findOneBy(
  7356.                             array(
  7357.                             'user' => $user->getId(),
  7358.                             'boutique' => $boutique->getId()
  7359.                             )
  7360.                         );
  7361.         
  7362.         $stockEntries  $em->getRepository(EntreeDeStock::class)
  7363.                         ->entreeParDateEtType($boutique->getId(),  $dateDebut$dateFin);
  7364.         $produitVendus  $em->getRepository(ProduitCommande::class)
  7365.                         ->produitVenduSurUnePeriode($boutique->getId(), 'invoice'$dateDebut$dateFin);
  7366.         if('POST' == $request->getMethod()){
  7367.             $dateDebut $_POST['dateDebut'];
  7368.             $dateFin $_POST['dateFin'];
  7369.             
  7370.             $dateDebut = new \DateTime($dateDebut);
  7371.             $dateFin = new \DateTime($dateFin);
  7372.             
  7373.             $stockEntries  $em->getRepository(EntreeDeStock::class)
  7374.                         ->entreeParDateEtType($boutique->getId(),  $dateDebut$dateFin);
  7375.             
  7376.             return $this->render('admin/entries_table_content.html.twig', [
  7377.                'boutique' => $boutique,
  7378.                'stockEntries' => $stockEntries
  7379.             ]);
  7380.             
  7381.         }
  7382.         
  7383.         return $this->render('admin/stock_management.html.twig', [
  7384.            'boutique' => $boutique,
  7385.            'produits' => $produits,
  7386.            'userBoutique' => $userBoutique,
  7387.            'dateDebut' => $dateDebut,
  7388.            'dateFin' => $dateFin,
  7389.            'startMonth' => $startMonth,
  7390.            'endMonth' => $endMonth,
  7391.            'startYear' => $startYear,
  7392.            'endYear' => $endYear,
  7393.            'stockEntries' => $stockEntries,
  7394.            'produitVendus' => $produitVendus
  7395.         ]);
  7396.     }
  7397.     
  7398.     /**
  7399.      * @Route("/{slug}/nouvel-inventaire", name="admin_nouvel_inventaire")
  7400.      * @return \Symfony\Component\HttpFoundation\Response
  7401.      */
  7402.     public function nouvelInventaireAction(Request $requestBoutique $boutique)
  7403.     {
  7404.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  7405.            return $this->redirectToRoute('security_login');
  7406.         }
  7407.         $em $this->getDoctrine()
  7408.                     ->getManager();
  7409.                     
  7410.         $produits $em->getRepository(Produit::class)
  7411.                         ->findByBoutique($boutique->getId());
  7412.         $user $this->getUser();
  7413.         $intervalleDeDate  $this->intervalleSemaine(date('Y-m-d'));
  7414.         $dateDebut = new \DateTime($intervalleDeDate['debut']);
  7415.         $dateFin = new \DateTime($intervalleDeDate['fin']);
  7416.         
  7417.         $intervalleMois $this->intervalleMois(date('Y-m-d'));
  7418.         $startMonth $intervalleMois['debut'];
  7419.         $endMonth $intervalleMois['fin'];
  7420.         
  7421.         $startYear date('Y-01-01');
  7422.         $endYear date('Y-12-31');
  7423.         $user $this->getUser();
  7424.         
  7425.         $userBoutique $em->getRepository(UserBoutique::class)
  7426.                         ->findOneBy(
  7427.                             array(
  7428.                             'user' => $user->getId(),
  7429.                             'boutique' => $boutique->getId()
  7430.                             )
  7431.                         );
  7432.         
  7433.         $stockEntries  $em->getRepository(EntreeDeStock::class)
  7434.                         ->entreeParDateEtType($boutique->getId(),  $dateDebut$dateFin);
  7435.         $produits $em->getRepository(Produit::class)
  7436.                         ->findBy(
  7437.                             array(
  7438.                                 'boutique' => $boutique->getId() 
  7439.                             ),
  7440.                             array(
  7441.                                 'nom' => 'ASC'
  7442.                             )
  7443.                         );
  7444.         if('POST' == $request->getMethod()){
  7445.             $dateDebut $_POST['dateDebut'];
  7446.             $dateFin $_POST['dateFin'];
  7447.             
  7448.             $dateDebut = new \DateTime($dateDebut);
  7449.             $dateFin = new \DateTime($dateFin);
  7450.             
  7451.             $stockEntries  $em->getRepository(EntreeDeStock::class)
  7452.                         ->entreeParDateEtType($boutique->getId(),  $dateDebut$dateFin);
  7453.             
  7454.             return $this->render('admin/entries_table_content.html.twig', [
  7455.                'boutique' => $boutique,
  7456.                'stockEntries' => $stockEntries
  7457.             ]);
  7458.             
  7459.         }
  7460.         
  7461.         return $this->render('admin/nouvel_inventaire.html.twig', [
  7462.            'boutique' => $boutique,
  7463.            'produits' => $produits,
  7464.            'userBoutique' => $userBoutique,
  7465.            'dateDebut' => $dateDebut,
  7466.            'dateFin' => $dateFin,
  7467.            'startMonth' => $startMonth,
  7468.            'endMonth' => $endMonth,
  7469.            'startYear' => $startYear,
  7470.            'endYear' => $endYear,
  7471.            'stockEntries' => $stockEntries,
  7472.            'produits' => $produits
  7473.         ]);
  7474.     }
  7475.     /**
  7476.      * @Route("/{slug}/payer-entree-de-stock/{id}", name="admin_payer_entree_de_stock")
  7477.      * @return \Symfony\Component\HttpFoundation\Response
  7478.      */
  7479.     public function payerEntreeDeSTockAction(Request $request,  $slug$id)
  7480.     {
  7481.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  7482.            return $this->redirectToRoute('security_login');
  7483.         }
  7484.         $em $this->getDoctrine()
  7485.                     ->getManager();
  7486.         $entreeDeStock $em->getRepository(EntreeDeStock::class)
  7487.                                 ->findOneById($id);    
  7488.                                 
  7489.         $boutique $em->getRepository(Boutique::class)
  7490.                                 ->findOneBySlug($slug);    
  7491.         
  7492.                     
  7493.         $user $this->getUser();
  7494.         $userBoutique $em->getRepository(UserBoutique::class)
  7495.                         ->findOneBy(
  7496.                             array(
  7497.                             'user' => $user->getId(),
  7498.                             'boutique' => $boutique->getId()
  7499.                             )
  7500.                         );
  7501.         
  7502.         if($request->getMethod() == 'POST'){
  7503.             
  7504.             $montant = (float)$_POST['montant'];
  7505.             $moyenDePaiement $_POST['moyenDePaiement'];
  7506.             
  7507.             
  7508.             $depense = new Expensive;
  7509.             $depense->setBoutique($boutique);
  7510.             $depense->setMontant($montant);
  7511.             $categorieDepense $em->getRepository(CategorieDepense::class)
  7512.                                 ->findOneBy(
  7513.                                     array(
  7514.                                         'boutique' => $boutique,
  7515.                                         'nom' => 'ACHAT DE MARCHANDISES'
  7516.                                     )
  7517.                                 );
  7518.             
  7519.             $depense->setCategorieDepense($categorieDepense);
  7520.         
  7521.             $em->persist($depense);
  7522.             $entreeDeStock->setResteAPayer($entreeDeStock->getResteAPayer() - $montant);
  7523.             $entreeDeStock->setMontantPaye($entreeDeStock->getMontantPaye() + $montant);
  7524.             $em->flush();
  7525.             
  7526.         }
  7527.     
  7528.         return $this->render('admin/payer_entree_de_stock.html.twig', [
  7529.            'boutique' => $boutique,
  7530.            'userBoutique' => $userBoutique,
  7531.            
  7532.            'entreeDeStock' => $entreeDeStock
  7533.         ]);
  7534.     }
  7535.     /**
  7536.      * @Route("/{slug}/new-stock-entry", name="admin.new_stock_entry")
  7537.      * @return \Symfony\Component\HttpFoundation\Response
  7538.      */
  7539.     public function newStockEntryAction(Request $requestBoutique $boutique)
  7540.     {
  7541.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  7542.            return $this->redirectToRoute('security_login');
  7543.         }
  7544.         $em $this->getDoctrine()
  7545.                     ->getManager();
  7546.         $tiers $em->getRepository(Tiers::class)
  7547.                                 ->findByBoutique($boutique);        
  7548.         
  7549.                     
  7550.         $produits $em->getRepository(Produit::class)
  7551.                         ->findByBoutique($boutique->getId());
  7552.         $user $this->getUser();
  7553.         $userBoutique $em->getRepository(UserBoutique::class)
  7554.                         ->findOneBy(
  7555.                             array(
  7556.                             'user' => $user->getId(),
  7557.                             'boutique' => $boutique->getId()
  7558.                             )
  7559.                         );
  7560.         $editMode'new';
  7561.         
  7562.         if($request->getMethod() == 'POST'){
  7563.             
  7564.             $dateCommande $_POST['dateCommande'];
  7565.             $tiers $_POST['tiers'];
  7566.             
  7567.             $tiers $em->getRepository(Tiers::class)
  7568.                         ->findOneById($tiers);
  7569.             $fraisDeTransport =  (float)$_POST['fraisDeTransport'];
  7570.             $autreFrais =  (float)$_POST['autreFrais'];
  7571.             $listeProduits json_decode($_POST['listeProduits']);
  7572.             
  7573.             $entreeDeStock = new EntreeDeStock;
  7574.             $entreeDeStock->setBoutique($boutique);
  7575.         
  7576.             $laDate = new \DateTime($dateCommande);
  7577.             $entreeDeStock->setLaDate($laDate);
  7578.         
  7579.             $em->persist($entreeDeStock);
  7580.             $em->flush();
  7581.             $produitCommandes = array();
  7582.             $sousTotal 0;
  7583.             foreach($listeProduits as $listeProduit){
  7584.                 $listeProduit = (array)$listeProduit;
  7585.                 $idDuProduit $listeProduit['idProduit'];
  7586.                 
  7587.                 $leProduit $em->getRepository(Produit::class)
  7588.                         ->findOneById($idDuProduit);
  7589.                 $leProduit->setStockDisponible($leProduit->getStockDisponible() + $listeProduit['quantite']);
  7590.                 
  7591.                 $produitEntreeDeStock = new ProduitEntreeDeStock;
  7592.                 $produitEntreeDeStock->setProduit($leProduit);
  7593.                 $produitEntreeDeStock->setEntreeDeStock($entreeDeStock);
  7594.                 $produitEntreeDeStock->setQuantite((float)$listeProduit['quantite']);
  7595.                 $produitEntreeDeStock->setPrixDAchat((float)$listeProduit['prixDAchat']);
  7596.                 $produitEntreeDeStock->setSousTotal((float)$listeProduit['sousTotal']);
  7597.                 
  7598.                 $sousTotal += (float)$listeProduit['sousTotal'];
  7599.                 $em->persist($produitEntreeDeStock);
  7600.             }
  7601.             $entreeDeStock->setTotalAchat($sousTotal);
  7602.             $entreeDeStock->setFraisDeTransport($fraisDeTransport);
  7603.             $entreeDeStock->setAutreFrais($autreFrais);
  7604.             $entreeDeStock->setNetPaye($autreFrais $sousTotal);
  7605.             $entreeDeStock->setResteAPayer($sousTotal $autreFrais);
  7606.             $entreeDeStock->setTiers($tiers);
  7607.             
  7608.             $em->flush();
  7609.             
  7610.         }
  7611.     
  7612.         return $this->render('admin/new_stock_entry.html.twig', [
  7613.            'boutique' => $boutique,
  7614.            'produits' => $produits,
  7615.            'userBoutique' => $userBoutique,
  7616.            'editMode' => $editMode,
  7617.            'tiers' => $tiers
  7618.         ]);
  7619.     }
  7620.     
  7621.     /**
  7622.      * @Route("/{slug}/edit-stock-entry/{id}", name="admin.edit_stock_entry")
  7623.      * @return \Symfony\Component\HttpFoundation\Response
  7624.      */
  7625.     public function editStockEntryAction(Request $request$slug$id)
  7626.     {
  7627.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  7628.            return $this->redirectToRoute('security_login');
  7629.         }      
  7630.         $em $this->getDoctrine()
  7631.                     ->getManager();
  7632.         $boutique  $em->getRepository(Boutique::class)
  7633.                         ->findOneBySlug($slug);
  7634.         $tiers $em->getRepository(Tiers::class)
  7635.                     ->findByBoutique($boutique);
  7636.     
  7637.         $produits  $em->getRepository(Produit::class)
  7638.                         ->findByBoutique($boutique->getId());
  7639.     
  7640.         $entreeDeStock  $em->getRepository(EntreeDeStock::class)
  7641.                         ->findOneBy(
  7642.                             array(
  7643.                                 'boutique' => $boutique->getId(),
  7644.                                 'id' => $id
  7645.                         ));
  7646.         
  7647.         $ancienProduitEntreeDeStocks  $em->getRepository(ProduitEntreeDeStock::class)
  7648.                         ->findBy(
  7649.                             array(
  7650.                                 'entreeDeStock' => $entreeDeStock->getId()
  7651.                         ));
  7652.                         
  7653.         $user $this->getUser();
  7654.         $userBoutique $em->getRepository(UserBoutique::class)
  7655.                         ->findOneBy(
  7656.                             array(
  7657.                             'user' => $user->getId(),
  7658.                             'boutique' => $boutique->getId()
  7659.                             )
  7660.                         );
  7661.     
  7662.         $ok_soumission '';
  7663.         $error '';
  7664.         $editMode 'edit';
  7665.         if($request->getMethod() == 'POST'){
  7666.             $dateCommande $_POST['dateCommande'];
  7667.             $listeProduits json_decode($_POST['listeProduits']);
  7668.             
  7669.             $tiers $_POST['tiers'];
  7670.             
  7671.             $tiers $em->getRepository(Tiers::class)
  7672.                         ->findOneById($tiers);
  7673.             $fraisDeTransport =  (float)$_POST['fraisDeTransport'];
  7674.             $autreFrais =  (float)$_POST['autreFrais'];
  7675.             $em->flush();
  7676.             
  7677.             //Supprimer les ancien ProduitCommande lié 
  7678.             foreach($ancienProduitEntreeDeStocks as $ancienProduitEntreeDeStock){
  7679.                 $em->remove($ancienProduitEntreeDeStock);
  7680.                 
  7681.                 $leProduit $em->getRepository(Produit::class)
  7682.                         ->findOneById($ancienProduitEntreeDeStock->getProduit()->getId());
  7683.                 $leProduit->setStockDisponible($leProduit->getStockDisponible() - $ancienProduitEntreeDeStock->getQuantite());
  7684.             }
  7685.             $em->flush();
  7686.             $produitEntreeDeStocks = array();
  7687.             $sousTotal 0;
  7688.             foreach($listeProduits as $listeProduit){
  7689.                 $listeProduit = (array)$listeProduit;
  7690.                 $idDuProduit $listeProduit['idProduit'];
  7691.                 
  7692.                 $leProduit $em->getRepository(Produit::class)
  7693.                         ->findOneById($idDuProduit);
  7694.                 $leProduit->setStockDisponible($leProduit->getStockDisponible() + $listeProduit['quantite']);
  7695.         
  7696.                 
  7697.                 $produitEntreeDeStock = new ProduitEntreeDeStock;
  7698.                 $produitEntreeDeStock->setProduit($leProduit);
  7699.                 $produitEntreeDeStock->setEntreeDeStock($entreeDeStock);
  7700.                 $produitEntreeDeStock->setQuantite($listeProduit['quantite']);
  7701.                 
  7702.                 $produitEntreeDeStock->setPrixDAchat((float)$listeProduit['prixDAchat']);
  7703.                 $produitEntreeDeStock->setSousTotal((float)$listeProduit['sousTotal']);
  7704.                 
  7705.                 $sousTotal += (float)$listeProduit['sousTotal'];
  7706.                 $em->persist($produitEntreeDeStock);
  7707.             }
  7708.             
  7709.             $entreeDeStock->setTotalAchat($sousTotal);
  7710.             $entreeDeStock->setFraisDeTransport($fraisDeTransport);
  7711.             $entreeDeStock->setAutreFrais($autreFrais);
  7712.             $entreeDeStock->setNetPaye($autreFrais $sousTotal);
  7713.             $entreeDeStock->setResteAPayer($sousTotal $autreFrais);
  7714.             $entreeDeStock->setTiers($tiers);
  7715.             $em->flush();
  7716.         }
  7717.     
  7718.         return $this->render('admin/edit_stock_entry.html.twig', [
  7719.            'boutique' => $boutique,
  7720.            'produits' => $produits,
  7721.            'editMode' => $editMode,
  7722.            'entreeDeStock' => $entreeDeStock,
  7723.            'ancienProduitEntreeDeStocks' => $ancienProduitEntreeDeStocks,
  7724.            'userBoutique' => $userBoutique,
  7725.            'tiers' => $tiers
  7726.         ]);
  7727.     }
  7728.     
  7729.     
  7730.     /**
  7731.      * @Route("/{slug}/delete-stock-entry/{id}", name="admin.delete_stock_entry")
  7732.      * @return \Symfony\Component\HttpFoundation\Response
  7733.      */
  7734.     public function deleteStockEntryAction(Request $request,  $slug$id)
  7735.     {
  7736.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  7737.            return $this->redirectToRoute('security_login');
  7738.         }  
  7739.         $em $this->getDoctrine()
  7740.                     ->getManager();
  7741.         
  7742.         $boutique  $em->getRepository(Boutique::class)
  7743.                         ->findOneBySlug($slug);
  7744.         
  7745.         $user $this->getUser();
  7746.         $userBoutique $em->getRepository(UserBoutique::class)
  7747.                         ->findOneBy(
  7748.                             array(
  7749.                             'user' => $user->getId(),
  7750.                             'boutique' => $boutique->getId()
  7751.                             )
  7752.                         );
  7753.         $entreeDeStock  $em->getRepository(EntreeDeStock::class)
  7754.                         ->findOneBy(
  7755.                             array(
  7756.                                 'boutique' => $boutique->getId(),
  7757.                                 'id' => $id
  7758.                             )
  7759.                         );
  7760.         
  7761.         if(null != $entreeDeStock){
  7762.             $produitEntreeDeStocks $em->getRepository(ProduitEntreeDeStock::class)
  7763.                                         ->findBy(
  7764.                                             array(
  7765.                                                 'entreeDeStock' => $entreeDeStock->getId()
  7766.                                             )
  7767.                                         );
  7768.             foreach($produitEntreeDeStocks as $produitEntreeDeStock){
  7769.                 $em->remove($produitEntreeDeStock);
  7770.                 $produit $em->getRepository(Produit::class)
  7771.                                 ->findOneById($produitEntreeDeStock->getProduit()->getId());
  7772.                 $produit->setStockDisponible($produit->getStockDisponible() - $produitEntreeDeStock->getQuantite());
  7773.             }
  7774.             $em->flush();
  7775.             
  7776.             $em->remove($entreeDeStock);
  7777.             $em->flush();
  7778.         }
  7779.         return $this->redirectToRoute('admin.stock_management', array('slug' => $boutique->getSlug()));
  7780.     }
  7781.     /**
  7782.      * @Route("/{slug}/produits-vendus", name="admin_produits_vendus")
  7783.      * @return \Symfony\Component\HttpFoundation\Response
  7784.      */
  7785.     public function produitsVendusActionRequest $requestBoutique $boutique)
  7786.     {
  7787.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  7788.            return $this->redirectToRoute('security_login');
  7789.         }
  7790.         
  7791.         $em $this->getDoctrine()
  7792.                     ->getManager();
  7793.         
  7794.         $userBoutique $em->getRepository(UserBoutique::class)
  7795.                         ->findOneBy(
  7796.                             array(
  7797.                             'user' => $this->getUser()->getId(),
  7798.                             'boutique' => $boutique->getId()
  7799.                             )
  7800.                         );
  7801.         
  7802.         if('POST' == $request->getMethod()){
  7803.             $dateDebut $_POST['dateDebut'];
  7804.             $dateFin $_POST['dateFin'];
  7805.             
  7806.             $dateDebut = new \DateTime($dateDebut);
  7807.             $dateDebut->setTime(00);
  7808.             $dateFin = new \DateTime($dateFin);
  7809.             $dateFin->setTime(2359);
  7810.             
  7811.             $produitsVendus  $em->getRepository(ProduitCommande::class)
  7812.                         ->produitVenduSurUnePeriode($boutique->getId(), 'invoice'$dateDebut$dateFin);
  7813.             
  7814.             
  7815.             return $this->render('admin/produits_vendus.html.twig', [
  7816.                'boutique' => $boutique,
  7817.                'produitsVendus' => $produitsVendus
  7818.             ]);
  7819.             
  7820.         }
  7821.         
  7822.         return $this->render('admin/sortie_de_stock.html.twig', [
  7823.            'boutique' => $boutique,
  7824.            'dateDebut' => $dateDebut,
  7825.            'dateFin' => $dateFin,
  7826.            'userBoutique' => $userBoutique,
  7827.            'typeFacture' => $typeFacture
  7828.         ]);
  7829.     }
  7830.     
  7831.     /**
  7832.      * @Route("/{slug}/import-products", name="admin.import_products")
  7833.      * @return \Symfony\Component\HttpFoundation\Response
  7834.      */
  7835.     public function importProductsAction(Request $requestBoutique $boutique)
  7836.     {
  7837.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  7838.            return $this->redirectToRoute('security_login');
  7839.         }
  7840.         $em $this->getDoctrine()
  7841.                     ->getManager();
  7842.                     
  7843.         $user $this->getUser();
  7844.         
  7845.         $userBoutique $em->getRepository(UserBoutique::class)
  7846.                         ->findOneBy(
  7847.                             array(
  7848.                             'user' => $user->getId(),
  7849.                             'boutique' => $boutique->getId()
  7850.                             )
  7851.                         );
  7852.         
  7853.         $error '';
  7854.         $success '';
  7855.         if('POST' == $request->getMethod()){
  7856.             if(isset($_FILES['fichier']) && $_FILES['fichier']['error'] == 0)
  7857.             {
  7858.                 
  7859.             
  7860.                 $em->flush();
  7861.                 if ($this->gererFichierMultipleImportation($_FILES['fichier'], $boutique)){
  7862.                     $success 'success';
  7863.                 } else{
  7864.                     $error 'error';
  7865.                 }
  7866.                 
  7867.             }
  7868.         }
  7869.         
  7870.         return $this->render('admin/import_products.html.twig', [
  7871.            'boutique' => $boutique,
  7872.            'userBoutique' => $userBoutique,
  7873.            'error' => $error,
  7874.            'success' => $success
  7875.         ]);
  7876.     }
  7877.     
  7878.     /**
  7879.      * @Route("/{slug}/import-customers", name="admin.import_customers")
  7880.      * @return \Symfony\Component\HttpFoundation\Response
  7881.      */
  7882.     public function importCustomersAction(Request $requestBoutique $boutique)
  7883.     {
  7884.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  7885.            return $this->redirectToRoute('security_login');
  7886.         }
  7887.         $em $this->getDoctrine()
  7888.                     ->getManager();
  7889.                     
  7890.         $user $this->getUser();
  7891.         
  7892.         $userBoutique $em->getRepository(UserBoutique::class)
  7893.                         ->findOneBy(
  7894.                             array(
  7895.                             'user' => $user->getId(),
  7896.                             'boutique' => $boutique->getId()
  7897.                             )
  7898.                         );
  7899.         
  7900.         $error '';
  7901.         $success '';
  7902.         if('POST' == $request->getMethod()){
  7903.             if(isset($_FILES['fichier']) && $_FILES['fichier']['error'] == 0)
  7904.             {
  7905.                 
  7906.             
  7907.                 $em->flush();
  7908.                 if ($this->gererFichierMultipleCustomerImportation($_FILES['fichier'], $boutique)){
  7909.                     $success 'success';
  7910.                 } else{
  7911.                     $error 'error';
  7912.                 }
  7913.                 
  7914.             }
  7915.         }
  7916.         
  7917.         return $this->render('admin/import_customers.html.twig', [
  7918.            'boutique' => $boutique,
  7919.            'userBoutique' => $userBoutique,
  7920.            'error' => $error,
  7921.            'success' => $success
  7922.         ]);
  7923.     }
  7924.     
  7925.     /**
  7926.      * @Route("/{slug}/ajout-utilisateur-employe", name="admin_ajout_utilisateur_employe")
  7927.      * @return \Symfony\Component\HttpFoundation\Response
  7928.      */
  7929.     public function ajoutUtilisateurEmployeAction(Request $requestBoutique $boutique)
  7930.     {
  7931.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  7932.            return $this->redirectToRoute('security_login');
  7933.         }
  7934.         $em $this->getDoctrine()
  7935.                     ->getManager();
  7936.                     
  7937.         $droits DroitUtilisateur::getDroits();
  7938.         $userBoutiques $em->getRepository(UserBoutique::class)
  7939.                         ->findByBoutique($boutique->getId());
  7940.         $user $this->getUser();
  7941.         $userBoutique $em->getRepository(UserBoutique::class)
  7942.                         ->findOneBy(
  7943.                             array(
  7944.                             'user' => $user->getId(),
  7945.                             'boutique' => $boutique->getId()
  7946.                             )
  7947.                         );
  7948.         
  7949.         return $this->render('admin/ajout_utilisateur_employe.html.twig', [
  7950.            'boutique' => $boutique,
  7951.            'userBoutiques' => $userBoutiques,
  7952.            'userBoutique' => $userBoutique,
  7953.            'droits' => $droits
  7954.            
  7955.         ]);
  7956.     }
  7957.     /**
  7958.      * @Route("/{slug}/users", name="admin.users")
  7959.      * @return \Symfony\Component\HttpFoundation\Response
  7960.      */
  7961.     public function usersAction(Request $requestBoutique $boutique)
  7962.     {
  7963.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  7964.            return $this->redirectToRoute('security_login');
  7965.         }
  7966.         $em $this->getDoctrine()
  7967.                     ->getManager();
  7968.                     
  7969.         $userBoutiques $em->getRepository(UserBoutique::class)
  7970.                         ->findByBoutique($boutique->getId());
  7971.         $user $this->getUser();
  7972.         $userBoutique $em->getRepository(UserBoutique::class)
  7973.                         ->findOneBy(
  7974.                             array(
  7975.                             'user' => $user->getId(),
  7976.                             'boutique' => $boutique->getId()
  7977.                             )
  7978.                         );
  7979.         
  7980.         return $this->render('admin/users.html.twig', [
  7981.            'boutique' => $boutique,
  7982.            'userBoutiques' => $userBoutiques,
  7983.            'userBoutique' => $userBoutique,
  7984.            
  7985.         ]);
  7986.     }
  7987.     
  7988.     /**
  7989.      * @Route("/{slug}/add-user", name="admin.add_user")
  7990.      * @return \Symfony\Component\HttpFoundation\Response
  7991.      */
  7992.     public function addUserAction(Request $request, \Swift_Mailer $mailerBoutique $boutique)
  7993.     {
  7994.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  7995.            return $this->redirectToRoute('security_login');
  7996.         }
  7997.         $em $this->getDoctrine()
  7998.                     ->getManager();
  7999.                     
  8000.         $userBoutiques $em->getRepository(UserBoutique::class)
  8001.                         ->findByBoutique($boutique->getId());
  8002.         $user $this->getUser();
  8003.         $userBoutique $em->getRepository(UserBoutique::class)
  8004.                         ->findOneBy(
  8005.                             array(
  8006.                             'user' => $user->getId(),
  8007.                             'boutique' => $boutique->getId()
  8008.                             )
  8009.                         );
  8010.         $appName $this->getParameter('app_name');
  8011.         
  8012.     
  8013.         if('POST' == $request->getMethod()){
  8014.             $email $_POST['email'];
  8015.             $role $_POST['role'];
  8016.             
  8017.             $requeteAjoutBoutique  = new RequeteAjoutBoutique;
  8018.             
  8019.             $requeteAjoutBoutique->setRole($role);
  8020.             $requeteAjoutBoutique->setEmail($email);
  8021.             $requeteAjoutBoutique->setBoutique($boutique);
  8022.             
  8023.             $em->persist($requeteAjoutBoutique);
  8024.             $em->flush();
  8025.             
  8026.             //Envoi de mail
  8027.             $message = (new \Swift_Message('Welcome to '.$appName))
  8028.             ->setFrom(['no-reply-myinvoice@assiemail.com'  => $appName])
  8029.             ->setTo([$email])
  8030.             ->setBody(
  8031.                 $this->renderView(
  8032.                 'admin/requete_ajout_boutique_email.html.twig',
  8033.                 [
  8034.                     'appName' => $appName,
  8035.                     'role' => $role,
  8036.                     'boutique' => $boutique
  8037.                 ]
  8038.                 ),
  8039.             'text/html'
  8040.             );
  8041.             
  8042.             $mailer->send($message);
  8043.         }
  8044.         
  8045.         return $this->render('admin/users.html.twig', [
  8046.            'boutique' => $boutique,
  8047.            'userBoutiques' => $userBoutiques,
  8048.            'userBoutique' => $userBoutique
  8049.         ]);
  8050.     }
  8051.     /**
  8052.      * @Route("/{slug}/mon-compte", name="admin_mon_compte")
  8053.      * @return \Symfony\Component\HttpFoundation\Response
  8054.      */
  8055.     public function monCompteAction(Request $requestBoutique $boutique)
  8056.     {
  8057.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  8058.            return $this->redirectToRoute('security_login');
  8059.         }
  8060.         $em $this->getDoctrine()
  8061.                     ->getManager();
  8062.     return $this->render('admin/mon_compte.html.twig', [
  8063.            'boutique' => $boutique,
  8064.            'userBoutiques' => $userBoutiques,
  8065.            'userBoutique' => $userBoutique
  8066.         ]);
  8067.     }
  8068.     /**
  8069.      * @Route("/{slug}/mot-de-passe", name="admin_mot_de_passe")
  8070.      * @return \Symfony\Component\HttpFoundation\Response
  8071.      */
  8072.     public function motDePasseAction(Request $requestUserPasswordHasherInterface $passwordHasherBoutique $boutique)
  8073.     {
  8074.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  8075.            return $this->redirectToRoute('security_login');
  8076.         }
  8077.         $em $this->getDoctrine()
  8078.                     ->getManager();
  8079.         
  8080.         $user $this->getUser();
  8081.         $error '';
  8082.         $ok_submission '';
  8083.         $error_submission '';
  8084.         $actuel $user->getPassword();
  8085.         $hashed '';
  8086.         if('POST' == $request->getMethod())
  8087.         {
  8088.             $motDePasseActuel $request->request->get('motDePasseActuel');
  8089.             $nouveauMotDePasse $request->request->get('nouveauMotDePasse');
  8090.             
  8091.             $repeterMotDePasse $request->request->get('repeterMotDePasse'); 
  8092.             //$user->setPassword('');
  8093.             //$hashed = $passwordHasher->hashPassword($user, $motDePasseActuel);
  8094.             //if(  $hashed == $user->getPassword()){
  8095.                 $user->setPassword('');
  8096.                 $hashedPassword $passwordHasher->hashPassword($user$nouveauMotDePasse);
  8097.                 $user->setPassword($hashedPassword);
  8098.                 $ok_submission 'Mot de passe changé';
  8099.             //}else{
  8100.             //    $error_submission = 'Ancien mot de passe incorrect';
  8101.             //}
  8102.             //Effacer l'ancien mot de passe
  8103.             
  8104.             
  8105.             $em->flush();
  8106.         }
  8107.         $userBoutique $em->getRepository(UserBoutique::class)
  8108.                             ->findOneBy(
  8109.                                 array(
  8110.                                     'user' => $user,
  8111.                                     'boutique' => $boutique
  8112.                                 )
  8113.                             );
  8114.     return $this->render('admin/mot_de_passe.html.twig', [
  8115.            'boutique' => $boutique,
  8116.            'userBoutique' => $userBoutique,
  8117.            'ok_submission' => $ok_submission,
  8118.            'error_submission' => $error_submission,
  8119.            'hashed' => $hashed,
  8120.            'actuel' => $actuel
  8121.         ]);
  8122.     }
  8123.     
  8124.     
  8125.     
  8126.     public function getDomain()
  8127.     {
  8128.         $domaine $_SERVER['HTTP_HOST'];
  8129.         $protocol '';
  8130.         if($domaine == 'localhost' || $domaine == '127.0.0.1'){
  8131.             $domaine $domaine.'/myinvoice-def/public';
  8132.         }
  8133.         if(!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off'){
  8134.             $protocol 'https://';
  8135.         } else{
  8136.             $protocol 'http://';
  8137.         }
  8138.         
  8139.         return $protocol.$domaine;
  8140.     }
  8141.     
  8142.     public function getNumero($type$boutique)
  8143.     {
  8144.         $numero '';
  8145.         $em $this->getDoctrine()
  8146.                     ->getManager();
  8147.         $nombre 0;
  8148.         if($type == 'deposit'){
  8149.             $nombre $em->getRepository(FactureAcompte::class)
  8150.                     ->getNumero($type$boutique->getId());
  8151.         } else{
  8152.             $nombre $em->getRepository(Commande::class)
  8153.                     ->getNumero($type$boutique->getId());
  8154.         
  8155.         }
  8156.         if(empty($nombre)){
  8157.             $nombre ;
  8158.         } else {
  8159.             $nombre = (int)$nombre[0]['nombre'];
  8160.             $nombre++;
  8161.         }
  8162.         
  8163.         
  8164.         
  8165.         switch($type){
  8166.             case 'invoice':
  8167.                 $numero .= $boutique->getSettings()->getLettreDebutFacture();
  8168.             break;
  8169.             
  8170.             case 'deposit':
  8171.                 $numero .= $boutique->getSettings()->getLettreDebutFactureAcompte();
  8172.             break;
  8173.             case 'bill_credit':
  8174.                 $numero .= $boutique->getSettings()->getLettreDebutFactureAvoir();
  8175.             break;
  8176.             
  8177.             case 'proposal':
  8178.                 $numero .= $boutique->getSettings()->getLettreDebutDevis();
  8179.             break;
  8180.         }
  8181.         
  8182.         if($boutique->getSettings()->getIncluAnnee()){
  8183.             $numero .= date('y');
  8184.         }
  8185.         
  8186.         $nombreDeZeroAAjouter strlen((string)$nombre);
  8187.         
  8188.         $nombreDeZeroAAjouter =  $boutique->getSettings()->getNombreDeChiffre() - $nombreDeZeroAAjouter;
  8189.         
  8190.         for($i 0$i $nombreDeZeroAAjouter$i++){
  8191.             $numero .= '0';
  8192.         }
  8193.         
  8194.         $numero .= $nombre;
  8195.         
  8196.         return $numero;
  8197.         
  8198.     }
  8199.     
  8200.     function intervalleMois($datestr)
  8201.     {
  8202.        date_default_timezone_set (date_default_timezone_get());
  8203.         $dt strtotime ($datestr);
  8204.        return array (
  8205.          "debut" => date ('Y-m-d'strtotime ('first day of this month'$dt)),
  8206.          "fin" => date ('Y-m-d'strtotime ('last day of this month'$dt))
  8207.        );
  8208.     }
  8209.     function intervalleSemaine($datestr) {
  8210.        date_default_timezone_set (date_default_timezone_get());
  8211.        $dt strtotime ($datestr);
  8212.        return array (
  8213.          "debut" => date ('N'$dt) == date ('Y-m-d'$dt) : date ('Y-m-d'strtotime ('last monday'$dt)),
  8214.          "fin" => date('N'$dt) == date ('Y-m-d'$dt) : date ('Y-m-d'strtotime ('next sunday'$dt))
  8215.        );
  8216.     }
  8217.     
  8218.     public function gererFichierMultipleImportation($data$boutique)
  8219.     {        
  8220.             $leRetour false;
  8221.             $em $this->getDoctrine()->getManager();
  8222.             
  8223.             $ex pathinfo($data['name'])['extension'];
  8224.             $exA = array('csv');
  8225.             
  8226.             if (in_array(strtolower($ex), $exA)){
  8227.             } else{
  8228.                 throw new \RuntimeException('Désolé, vous n\'avez pas le droit de télécharger ce type de fichier: '.$ex);
  8229.             }
  8230.             
  8231.             $name time();
  8232.             $namePourRepertoire $name;
  8233.             //hydratation des attributs de l'objet
  8234.             $domaine $_SERVER['HTTP_HOST'];
  8235.             $protocol '';
  8236.             if(!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off'){
  8237.                 $protocol 'https://';
  8238.             } else{
  8239.                 $protocol 'http://';
  8240.             }
  8241.             
  8242.             //$url = $protocol.$domaine.'myinvoice-def/uploads/img/'.$name.'.'.$ex;
  8243.             //$url = $protocol.$domaine.'/uploads/img/'.$name.'.'.$ex;
  8244.             $url $boutique->getLogo()->getUploadRootDir().'/'.$name.'.'.$ex;
  8245.             
  8246.             //deplacement (création de l'image original)
  8247.             //$this->file->move($photo->getUploadRootDir().'/original/', $name.'.'.photo->getExtension()));
  8248.             
  8249.             
  8250.             if(!is_dir($boutique->getLogo()->getUploadRootDir()) && !mkdir($boutique->getLogo()->getUploadRootDir(), 0777true))
  8251.             {
  8252.                 throw new \RuntimeException('Impossible de créer le dossier de destination');
  8253.             }
  8254.             
  8255.             if (!move_uploaded_file($data['tmp_name'], $boutique->getLogo()->getUploadRootDir().'/'.$name.'.'.$ex))
  8256.             {
  8257.                 throw new \RuntimeException('Désolé, une erreur s\'est produite.');
  8258.             }
  8259.             
  8260.             $fileToHandle fopen($url'r');
  8261.             $row 1;
  8262.             while (($data fgetcsv($fileToHandle10000",")) !== false) {
  8263.                 $num count($data);
  8264.                 //echo "<p> $num champs à la ligne $row: <br /></p>\n";
  8265.                 $row++;
  8266.                 $categorie $data[0];
  8267.                 $categorieProduit $em->getRepository(CategorieProduit::class)
  8268.                                 ->findOneByNom($categorie);
  8269.                 if(null == $categorieProduit){
  8270.                     $categorieProduit = new CategorieProduit;
  8271.                     $categorieProduit->setNom($categorie);
  8272.                     $em->persist($categorieProduit);
  8273.                     $em->flush();
  8274.                 }
  8275.                 
  8276.                 $ref             $data[1];
  8277.                 $nomProd         $data[2];
  8278.                 $prix            $data[3];
  8279.                 $stockDisponible $data[4];
  8280.                 $stockDAlerte    $data[5];
  8281.                 $stockDeSecurite $data[6];
  8282.                 $stockMinimum    $data[7];
  8283.                 $stockMaximum    $data[8];
  8284.                 $stockOutil      $data[9];
  8285.                 $coutDeStockage  $data[10];
  8286.                 
  8287.                 $produit $em->getRepository(Produit::class)
  8288.                                 ->findOneBy(
  8289.                                     array(
  8290.                                         'reference' => $ref,
  8291.                                         'nom' => $nomProd
  8292.                                     )
  8293.                                 );
  8294.                 if(null == $produit){
  8295.                     $produit = new Produit;
  8296.                     $produit->setCategorieProduit($categorieProduit);
  8297.                     $produit->setReference($ref);
  8298.                     $produit->setNom($nomProd);
  8299.                     
  8300.                     $prixActuel = new PrixProduit;
  8301.                     $prixActuel->setValeur($prix);
  8302.                     $produit->addPrix($prixActuel);
  8303.                     $produit->setPrixActuel($prixActuel);
  8304.                     $produit->setStockDisponible($stockDisponible);
  8305.                     $produit->setStockDAlerte($stockDAlerte);
  8306.                     $produit->setStockDeSecurite($stockDeSecurite);
  8307.                     $produit->setStockMinimum($stockMinimum);
  8308.                     $produit->setStockMaximum($stockMaximum);
  8309.                     $produit->setStockOutil($stockOutil);
  8310.                     $produit->setCoutDeStockage($coutDeStockage);
  8311.                     
  8312.                     $produit->setBoutique($boutique);
  8313.                     $em->persist($produit);
  8314.                     $em->flush();
  8315.                 }
  8316.                 
  8317.                 
  8318.             }
  8319.             $leRetour true;
  8320.             fclose($fileToHandle);
  8321.             
  8322.             //$this->getDoctrine()->getManager()->flush();
  8323.             
  8324.         return $leRetour;
  8325.     }
  8326.     
  8327.     public function gererFichierMultipleCustomerImportation($data$boutique)
  8328.     {        
  8329.             $leRetour false;
  8330.             $em $this->getDoctrine()->getManager();
  8331.             
  8332.             $ex pathinfo($data['name'])['extension'];
  8333.             $exA = array('csv');
  8334.             
  8335.             if (in_array(strtolower($ex), $exA)){
  8336.             } else{
  8337.                 throw new \RuntimeException('Désolé, vous n\'avez pas le droit de télécharger ce type de fichier: '.$ex);
  8338.             }
  8339.             
  8340.             $name time();
  8341.             $namePourRepertoire $name;
  8342.             //hydratation des attributs de l'objet
  8343.             $domaine $_SERVER['HTTP_HOST'];
  8344.             $protocol '';
  8345.             if(!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off'){
  8346.                 $protocol 'https://';
  8347.             } else{
  8348.                 $protocol 'http://';
  8349.             }
  8350.             
  8351.             //$url = $protocol.$domaine.'myinvoice-def/uploads/img/'.$name.'.'.$ex;
  8352.             //$url = $protocol.$domaine.'/uploads/img/'.$name.'.'.$ex;
  8353.             $url $boutique->getLogo()->getUploadRootDir().'/'.$name.'.'.$ex;
  8354.             
  8355.             //deplacement (création de l'image original)
  8356.             //$this->file->move($photo->getUploadRootDir().'/original/', $name.'.'.photo->getExtension()));
  8357.             
  8358.             
  8359.             if(!is_dir($boutique->getLogo()->getUploadRootDir()) && !mkdir($boutique->getLogo()->getUploadRootDir(), 0777true))
  8360.             {
  8361.                 throw new \RuntimeException('Impossible de créer le dossier de destination');
  8362.             }
  8363.             
  8364.             if (!move_uploaded_file($data['tmp_name'], $boutique->getLogo()->getUploadRootDir().'/'.$name.'.'.$ex))
  8365.             {
  8366.                 throw new \RuntimeException('Désolé, une erreur s\'est produite.');
  8367.             }
  8368.             
  8369.             $fileToHandle fopen($url'r');
  8370.             $row 1;
  8371.             while (($data fgetcsv($fileToHandle10000",")) !== false) {
  8372.                 $num count($data);
  8373.                 $row++;
  8374.                 
  8375.                 $nomClient    $data[0];
  8376.                 $adresse      $data[1];
  8377.                 $codePostal   $data[2];
  8378.                 $nomPays      $data[3];
  8379.                 $ville        $data[4];
  8380.                 $email        $data[5];
  8381.                 $telephone    $data[6];
  8382.                 $soumisALaTVA $data[7];
  8383.                 $codeTVA      $data[8];
  8384.                 
  8385.                 $tier $em->getRepository(Tiers::class)
  8386.                                 ->findOneBy(
  8387.                                     array(
  8388.                                     'boutique' => $boutique->getId(),
  8389.                                     'nom' => $nomClient
  8390.                                     )
  8391.                                 );
  8392.                 if(null == $tier){
  8393.                     $tier = new Tiers;
  8394.                     $tier->setNom($nomClient);
  8395.                     $tier->setAdresse($adresse);
  8396.                     $tier->setCodePostal($codePostal);
  8397.                     $tier->setEmail($email);
  8398.                     $tier->setTelephone($telephone);
  8399.                     $tier->setVille($ville);
  8400.                     $tier->setAssujettiALaTVA($soumisALaTVA);
  8401.                     $tier->setCodeTVA($codeTVA);
  8402.                     
  8403.                     $pays $em->getRepository(Pays::class)
  8404.                                 ->findOneBy(
  8405.                                     array(
  8406.                                     'nom' => $nomPays
  8407.                                     )
  8408.                                 );
  8409.                     if (null == $pays){
  8410.                         $pays $em->getRepository(Pays::class)
  8411.                                 ->findOneBy(
  8412.                                     array(
  8413.                                     'nomFr' => $nomPays
  8414.                                     )
  8415.                                 );
  8416.                         if(null == $pays){
  8417.                             $pays = new Pays;
  8418.                             $pays->setNom($nomPays);
  8419.                             $em->persist($pays);
  8420.                             $em->flush();
  8421.                         }
  8422.                     }
  8423.                     
  8424.                     $tier->setPays($pays);
  8425.                     $tier->setBoutique($boutique);
  8426.                     $em->persist($tier);
  8427.                     $em->flush();
  8428.                 }    
  8429.             }
  8430.             $leRetour true;
  8431.             fclose($fileToHandle);
  8432.             
  8433.             //$this->getDoctrine()->getManager()->flush();
  8434.             
  8435.         return $leRetour;
  8436.     }
  8437.     public function getMois()
  8438.     {
  8439.         $mois = array(
  8440.             array(
  8441.                 'index' => 1,
  8442.                 'nom' => 'Janvier'
  8443.             ),
  8444.             array(
  8445.                 'index' => 2,
  8446.                 'nom' => 'Février'
  8447.             ),
  8448.             array(
  8449.                 'index' => 3,
  8450.                 'nom' => 'Mars'
  8451.             ),
  8452.             array(
  8453.                 'index' => 4,
  8454.                 'nom' => 'Avril'
  8455.             ),
  8456.             array(
  8457.                 'index' => 5,
  8458.                 'nom' => 'Mai'
  8459.             ),
  8460.             array(
  8461.                 'index' => 6,
  8462.                 'nom' => 'Juin'
  8463.             ),
  8464.             array(
  8465.                 'index' => 7,
  8466.                 'nom' => 'Juillet'
  8467.             ),
  8468.             array(
  8469.                 'index' => 8,
  8470.                 'nom' => 'Août'
  8471.             ),
  8472.             array(
  8473.                 'index' => 9,
  8474.                 'nom' => 'Septembre'
  8475.             ),
  8476.             array(
  8477.                 'index' => 10,
  8478.                 'nom' => 'Octobre'
  8479.             ),
  8480.             array(
  8481.                 'index' => 11,
  8482.                 'nom' => 'Novembre'
  8483.             ),
  8484.             array(
  8485.                 'index' => 12,
  8486.                 'nom' => 'Décembre'
  8487.             ),
  8488.         );
  8489.         return $mois;
  8490.     }
  8491.     public function getAnnee()
  8492.     {
  8493.         $actuel date('Y');
  8494.         $annees = array();
  8495.         for($i $actuel$i >= 2020$i--){
  8496.             array_push($annees$i);
  8497.         }
  8498.         return $annees;
  8499.     }
  8500. }