src/Controller/AdminController.php line 6424

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.             foreach($listeProduits as $listeProduit){
  3894.                 $listeProduit = (array)$listeProduit;
  3895.                 $idDuProduit $listeProduit['idProduit'];
  3896.                 
  3897.                 if($idDuProduit == ''){
  3898.                     //Produit inexistant, il faut le créer
  3899.                     $leProduit = new Produit;
  3900.                     $leProduit->setNom($listeProduit['nomProduit']);
  3901.                     $em->persist($leProduit);
  3902.                     $em->flush();
  3903.                     
  3904.                     //TVA
  3905.                     if($listeProduit['tva'] > 0){
  3906.                         $tva $em->getRepository(TVA::class)
  3907.                                     ->findOneBy(
  3908.                                         array(
  3909.                                             'boutique' => $boutique->getId(),
  3910.                                             'valeur'  => $listeProduit['tva']
  3911.                                         )
  3912.                                     );
  3913.                         if($tva == null){
  3914.                             $tva = new TVA;
  3915.                             $tva->setValeur($listeProduit['tva']);
  3916.                             $em->persist($tva);
  3917.                             $em->flush();
  3918.                         }
  3919.                         
  3920.                         $leProduit->setTva($tva);
  3921.                         
  3922.                     }else{
  3923.                         $tva $em->getRepository(TVA::class)
  3924.                                     ->findOneBy(
  3925.                                         array(
  3926.                                             'boutique' => $boutique->getId(),
  3927.                                             'estPrincipale'  => true
  3928.                                         )
  3929.                                     );
  3930.                         $leProduit->setTva($tva);
  3931.                     }
  3932.                     //Prix
  3933.                     $produitP = new PrixProduit;
  3934.                     $produitP->setValeur($listeProduit['prixUnitaire']);
  3935.                     $leProduit->addPrix($produitP);
  3936.                     $leProduit->setPrixActuel($produitP);
  3937.                     $leProduit->setBoutique($boutique);
  3938.                     $em->persist($produitP);
  3939.                     $em->persist($leProduit);
  3940.                     $em->flush();
  3941.                     
  3942.                 } else{
  3943.                     $leProduit $em->getRepository(Produit::class)
  3944.                         ->findOneById($idDuProduit);
  3945.                 }
  3946.                 
  3947.                 
  3948.                 $produitCommande = new ProduitCommande;
  3949.                 $produitCommande->setProduit($leProduit);
  3950.                 $produitCommande->setCommande($commande);
  3951.                 $produitCommande->setQuantite((float)$listeProduit['quantite']);
  3952.                 $produitCommande->setPrix((float)$listeProduit['prixUnitaire']);
  3953.                 $produitCommande->setRemise((float)$listeProduit['reduction']);
  3954.                 $produitCommande->setMontantRemise((float)$listeProduit['montantReduction']);
  3955.                 $produitCommande->setTotalHT((float)$listeProduit['totalHT']);
  3956.                 $produitCommande->setTotalHTApresRemise((float)$listeProduit['totalHTApresRemise']);
  3957.                 $produitCommande->setTotalTVA((float)$listeProduit['totalTVA']);
  3958.                 
  3959.                 $produitCommande->setTva((float)$listeProduit['tva']);
  3960.                 $produitCommande->setTotalTTC((float)$listeProduit['totalTTC']);
  3961.                 if($produitCommande->getProduit()->getTypeProduit() != null){
  3962.                     if($produitCommande->getProduit()->getTypeProduit()->getNomInterne() == 'produit'){
  3963.                         if($type == 'invoice'){
  3964.                             
  3965.                             
  3966.                             $leProduit->setStockDisponible($leProduit->getStockDisponible() - $produitCommande->getQuantite());
  3967.                         }
  3968.                     }
  3969.                 }
  3970.                 $em->persist($produitCommande);
  3971.                 array_push($produitCommandes$produitCommande);
  3972.                 
  3973.             }
  3974.             $em->flush();
  3975.             
  3976.             $pdf = new Html2Pdf('P'$boutique->getSettings()->getFormatPapierImpression(), 'en');
  3977.             $content '';
  3978.             switch($type){
  3979.                 case 'invoice':
  3980.                     //Facture FNE qui
  3981.                     
  3982.                     if($boutique->getApiKeyFNE() != ''){
  3983.                         if($boutique->getSettings()->isGenererAutomatiquementFNE()){
  3984.                             $responseFNE $this->genererFactureFNE($boutique->getSlug(), $commande->getId(), $natureFacture);
  3985.                         }
  3986.                     
  3987.                     }
  3988.                     $commande->setEtat(Commande::ETAT_FACTURE_PROVISOIRE);
  3989.                     
  3990.                     $content $this->renderView('pdf/facture.html.twig', [
  3991.                         'boutique' => $boutique,
  3992.                         'facture' => $commande,
  3993.                         'produits' => $produitCommandes,
  3994.                         'natureFacture' => $natureFacture,
  3995.                         'vehicules' => $vehicules
  3996.                     ]);
  3997.                     
  3998.                     if($boutique->getSettings()->isGenererAutomatiquementEcrituresComptabilite()){
  3999.                         $this->genererEcritureComptableDeVente($boutique$commande);
  4000.                         //Ecriture comptable
  4001.                     }
  4002.                     
  4003.                     $em->flush();
  4004.                     
  4005.                 break;
  4006.                 
  4007.                 case 'proposal':
  4008.                     $commande->setEtat(Commande::ETAT_DEVIS_PROVISOIRE);
  4009.                     
  4010.                     $content $this->renderView('pdf/devis.html.twig', [
  4011.                         'boutique' => $boutique,
  4012.                         'facture' => $commande,
  4013.                         'produits' => $produitCommandes,
  4014.                         'vehicules' => $vehicules
  4015.                     ]);
  4016.                 break;
  4017.                 
  4018.                 
  4019.                 case 'bill_credit':
  4020.                     
  4021.                     $content $this->renderView('pdf/facture_avoir.html.twig', [
  4022.                         'boutique' => $boutique,
  4023.                         'facture' => $commande,
  4024.                         'produits' => $produitCommandes,
  4025.                         'vehicules' => $vehicules
  4026.                     ]);
  4027.                     
  4028.                 break;
  4029.             }
  4030.             
  4031.             
  4032.             $pdf->writeHTML($content);
  4033.             $name $commande->getTypeFacture().$commande->getId().time().$boutique->getId().rand(110000).'.pdf';
  4034.             $lienPhysique $commande->getUploadRootDir().$name;
  4035.                 
  4036.             $commande->setLienPDF($this->getDomain().'/pdf478njkp01/'.$name);
  4037.             $pdf->output($lienPhysique'F');
  4038.             
  4039.             $em->flush();
  4040.             
  4041.             return $this->render('admin/response_new_sale.html.twig', [
  4042.                    'boutique' => $boutique,
  4043.                    'commande' => $commande,
  4044.                    'responseFNE' => $responseFNE,
  4045.                    'vehicules' => $vehicules
  4046.                    
  4047.                 ]);
  4048.             
  4049.             
  4050.             /*
  4051.             return $this->render('admin/facture.html.twig', [
  4052.                    'boutique' => $boutique,
  4053.                    'commande' => $commande,
  4054.                    'typeFacture' => $typeFacture,
  4055.                    'client' => $client,
  4056.                    'produitCommandes' => $produitCommandes,
  4057.                    'listeProduit' => $listeProduit,
  4058.                    'montantHT' => $montantHT,
  4059.                    'montantTVA' => $montantTVA,
  4060.                    'montantTTC' => $montantTTC,
  4061.                    'userBoutique' => $userBoutique
  4062.                 ]);
  4063.             */
  4064.             
  4065.         }
  4066.     
  4067.         return $this->render('admin/nouvelle_commande.html.twig', [
  4068.            'boutique' => $boutique,
  4069.            'produits' => $produits,
  4070.            'modeleReglements' => $modeleReglements,
  4071.            'tiers' => $tiers,
  4072.            'editMode' => $editMode,
  4073.            'userBoutique' => $userBoutique,
  4074.            'responseFNE' => $responseFNE,
  4075.            'type' => $type,
  4076.            'vehicules' => $vehicules
  4077.           
  4078.         ]);
  4079.     }
  4080.     public function genererEcritureComptableDeVente($boutique$commande)
  4081.     {
  4082.         $em $this->getDoctrine()
  4083.                     ->getManager();
  4084.                     
  4085.         $groupeEcritureComptable = new GroupeEcritureComptable;
  4086.         $groupeEcritureComptable->setBoutique($boutique);
  4087.         $libelle 'Vente client';
  4088.         if($commande->getTiers() != null){
  4089.             $libelle 'Vente à ' $commande->getTiers()->getNom();
  4090.         }
  4091.         $groupeEcritureComptable->setLibelleEcriture($libelle);
  4092.         $groupeEcritureComptable->setDebit($commande->getTotalTTC());
  4093.         $groupeEcritureComptable->setCredit($commande->getTotalTTC());
  4094.         $groupeEcritureComptable->setLaDate($commande->getLaDate());
  4095.         $groupeEcritureComptable->setNumeroPiece($commande->getNumero());
  4096.         $groupeEcritureComptable->setAnnee($commande->getLaDate()->format('Y'));
  4097.         $groupeEcritureComptable->setMois($commande->getLaDate()->format('m'));
  4098.         $em->persist($groupeEcritureComptable);
  4099.         $em->flush();
  4100.         //Débit
  4101.         $ecritureComptable = new EcritureComptable;
  4102.         $ecritureComptable->setBoutique($boutique);
  4103.         $ecritureComptable->setGroupeEcritureComptable($groupeEcritureComptable);
  4104.         $ecritureComptable->setLeJournal($boutique->getSettings()->getJournalDeVente());
  4105.         $groupeEcritureComptable->setLeJournal($boutique->getSettings()->getJournalDeVente());
  4106.         $compteClient $em->getRepository(Compte::class)
  4107.                                     ->findOneBy(
  4108.                                         array(
  4109.                                             'numero' => '411',
  4110.                                             'boutique' =>$boutique->getId()
  4111.                                         )
  4112.                                     );
  4113.         $compteClient->setSolde($compteClient->getSolde() + $commande->getTotalTTC());
  4114.         $ecritureComptable->setCompte($compteClient);
  4115.         $ecritureComptable->setNumeroPiece($commande->getNumero());
  4116.         $nomClient '';
  4117.         if($commande->getTiers() != null){
  4118.             $nomClient =  ' à '.$commande->getTiers()->getNom();
  4119.         }
  4120.         $ecritureComptable->setLibelleEcriture('Vente'.$nomClient);
  4121.         $ecritureComptable->setDebit($commande->getTotalTTC());
  4122.         $ecritureComptable->setSolde($compteClient->getSolde());
  4123.         $ecritureComptable->setLaDate($commande->getLaDate());
  4124.         $ecritureComptable->setAnnee($commande->getLaDate()->format('Y'));
  4125.         $ecritureComptable->setMois($commande->getLaDate()->format('m'));
  4126.                     
  4127.         $em->persist($ecritureComptable);
  4128.         $ecritureComptable = new EcritureComptable;
  4129.         $ecritureComptable->setBoutique($boutique);
  4130.         $ecritureComptable->setGroupeEcritureComptable($groupeEcritureComptable);
  4131.         
  4132.         //Crédit
  4133.         $ecritureComptable->setLeJournal($boutique->getSettings()->getJournalDeVente());
  4134.         $compte $em->getRepository(Compte::class)
  4135.                     ->findOneBy(
  4136.                         array(
  4137.                                 'numero' => '701',
  4138.                                 'boutique' => $boutique->getId()
  4139.                             )
  4140.                         );
  4141.         
  4142.         $compte->setSolde($compte->getSolde() - $commande->getTotalHTApresRemise() );
  4143.         $ecritureComptable->setCompte($compte);
  4144.         $ecritureComptable->setNumeroPiece($commande->getNumero());
  4145.                     
  4146.         $ecritureComptable->setLibelleEcriture('Vente'.$nomClient);
  4147.         $ecritureComptable->setCredit($commande->getTotalHTApresRemise());
  4148.         $ecritureComptable->setSolde($compte->getSolde());
  4149.         $ecritureComptable->setLaDate($commande->getLaDate());
  4150.         $ecritureComptable->setAnnee($commande->getLaDate()->format('Y'));
  4151.         $ecritureComptable->setMois($commande->getLaDate()->format('m'));
  4152.                     
  4153.                     
  4154.         $em->persist($ecritureComptable);
  4155.         //TVA pour une entreprise qui facture la TVA
  4156.         if($commande->getTotalTVA() > 0){
  4157.             $ecritureComptable = new EcritureComptable;
  4158.             $ecritureComptable->setBoutique($boutique);
  4159.             $ecritureComptable->setGroupeEcritureComptable($groupeEcritureComptable);
  4160.                         
  4161.             $ecritureComptable->setLeJournal($boutique->getSettings()->getJournalDeVente());
  4162.             $compte $em->getRepository(Compte::class)
  4163.                             ->findOneBy(
  4164.                                 array(
  4165.                                     'numero' => '4431',
  4166.                                     'boutique' => $boutique->getId()
  4167.                                 )
  4168.                             );
  4169.             $compte->setSolde($compte->getSolde() - $commande->getTotalTVA() );
  4170.             $ecritureComptable->setCompte($compte);
  4171.             $ecritureComptable->setNumeroPiece($commande->getNumero());
  4172.                         
  4173.             $ecritureComptable->setLibelleEcriture('Vente'.$nomClient);
  4174.             $ecritureComptable->setCredit($commande->getTotalTVA());
  4175.             $ecritureComptable->setSolde($compte->getSolde());
  4176.             $ecritureComptable->setLaDate($commande->getLaDate());
  4177.             $ecritureComptable->setAnnee($commande->getLaDate()->format('Y'));
  4178.             $ecritureComptable->setMois($commande->getLaDate()->format('m'));
  4179.                     
  4180.                         
  4181.             $em->persist($ecritureComptable);
  4182.         }
  4183.         $em->flush();
  4184.     }
  4185.     
  4186.     /**
  4187.       * @Route("/{slug}/generer-facture-fne/{id}", name="admin_url_generer_facture_fne")
  4188.     */
  4189.     public function urlGenererFactureFNEAction(Request $request$slug$id)
  4190.     {
  4191.         
  4192.         $em $this->getDoctrine()
  4193.                     ->getManager();
  4194.         $boutique $em->getRepository(Boutique::class)
  4195.                         ->findOneBySlug($slug);
  4196.         $commande $em->getRepository(Commande::class)
  4197.                         ->findOneById($id);
  4198.         
  4199.         $produitCommandes $em->getRepository(ProduitCommande::class)
  4200.                             ->findByCommande($commande);
  4201.         $reponse '';
  4202.         $vehicules = array( 222328);
  4203.         if($boutique->getApiKeyFNE() != ''){
  4204.             $reponse $this->genererFactureFNE($slug$id$commande->getNatureFacture());
  4205.             //$reponse = json_decode($reponse);
  4206.             if(isset($reponse['invoice']['id'])){
  4207.                 $commande->setIdFactureFNE($reponse['invoice']['id']);
  4208.             }
  4209.             if(isset($reponse['token'])){
  4210.                 $commande->seTtokenFNE($reponse['token']);
  4211.             }
  4212.             if(isset($reponse['balance_sticker'])){
  4213.                 $boutique->setSoldeTimbreFNE($reponse['balance_sticker']);
  4214.             }
  4215.             if(isset($reponse['balance_sticker'])){
  4216.                 $boutique->setSoldeTimbreFNE($reponse['balance_sticker']);
  4217.             }
  4218.             if(isset($reponse['balance_funds'])){
  4219.                 $boutique->setSoldeTimbreFNE($reponse['balance_funds']);
  4220.             }
  4221.             
  4222.             
  4223.             $em->flush();
  4224.         
  4225.         }
  4226.         
  4227.         $pdf = new Html2Pdf('P'$boutique->getSettings()->getFormatPapierImpression(), 'fr');
  4228.     
  4229.         $content $this->renderView('pdf/facture.html.twig', [
  4230.                     'boutique' => $boutique,
  4231.                     'facture' => $commande,
  4232.                     'produits' => $produitCommandes,
  4233.                     'natureFacture' => $commande->getNatureFacture(),
  4234.                     'vehicules' => $vehicules
  4235.                 ]);
  4236.         $pdf->writeHTML($content);
  4237.         $name $commande->getTypeFacture().$commande->getId().time().$boutique->getId().rand(110000).'.pdf';
  4238.         $lienPhysique $commande->getUploadRootDir().$name;
  4239.                 
  4240.         $commande->setLienPDF($this->getDomain().'/pdf478njkp01/'.$name);
  4241.         $pdf->output($lienPhysique'F');
  4242.         $em->flush();
  4243.         return $this->redirectToRoute('admin.invoices', array('slug' => $boutique->getSlug()));
  4244.         return $this->render('admin/admin_generer_facture_fne.html.twig', [
  4245.            'boutique' => $boutique,
  4246.            'content' => $content,
  4247.            'userBoutique' => $userBoutique
  4248.         ]);
  4249.         
  4250.     }
  4251.     public function genererFactureFNE($slug$idCommande$invoiceType 'sale')
  4252.     {
  4253.         
  4254.         $em $this->getDoctrine()
  4255.                     ->getManager();
  4256.         $boutique $em->getRepository(Boutique::class)
  4257.                         ->findOneBySlug($slug);
  4258.         $commande $em->getRepository(Commande::class)
  4259.                         ->findOneById($idCommande);
  4260.         $user $this->getUser();
  4261.         $userBoutique $em->getRepository(UserBoutique::class)
  4262.                         ->findOneBy(
  4263.                             array(
  4264.                                 'user' => $user,
  4265.                                 'boutique' => $boutique
  4266.                             )
  4267.                         );
  4268.         $url $boutique->getUrlFNEDeBase().'/external/invoices/sign';
  4269.         $produitCommandes $em->getRepository(ProduitCommande::class)
  4270.                                 ->findByCommande($commande);
  4271.                                 
  4272.         $globalCustomTaxes = array();
  4273.         
  4274.         $items = array();
  4275.         foreach($produitCommandes as $produitCommande){
  4276.             $tvas = array();
  4277.             $customTaxes = array();
  4278.             if($invoiceType == 'sale'){
  4279.                 if($produitCommande->getProduit()->getTVA() != null){
  4280.                     array_push($tvas$produitCommande->getProduit()->getTVA()->getLibelleInterne());
  4281.                     $nested = array(
  4282.                         'name' => $produitCommande->getProduit()->getTVA()->getLibelleInterne(),
  4283.                         'amount' =>$produitCommande->getProduit()->getTVA()->getValeur()
  4284.                     );
  4285.                     $nested  json_encode($nested);
  4286.                     array_push($customTaxes$nested);
  4287.                 }
  4288.             }else{
  4289.                 array_push($tvas'TVAD');
  4290.                     $nested = array(
  4291.                         'name' => $produitCommande->getProduit()->getTVA()->getLibelleInterne(),
  4292.                         'amount' =>0
  4293.                     );
  4294.                     $nested  json_encode($nested);
  4295.                     array_push($customTaxes$nested);
  4296.             }
  4297.             
  4298.             
  4299.             
  4300.             $item = array(
  4301.                     //'taxes' => $tvas,
  4302.                     //'customTaxes' => $customTaxes,
  4303.                     'reference' => $produitCommande->getProduit()->getReference(),
  4304.                     'description' =>  $produitCommande->getProduit()->getNom(),
  4305.                     'quantity' => $produitCommande->getQuantite(),
  4306.                     'amount' => $produitCommande->getPrix(),
  4307.                     'discount' => $produitCommande->getRemisePourcentage(),
  4308.                     'measurementUnit' => $produitCommande->getProduit()->getUniteDeMesure()
  4309.             );
  4310.             if($invoiceType == 'sale'){
  4311.                 $item['taxes'] = $tvas;
  4312.             }
  4313.             array_push($items$item);
  4314.         }
  4315.         
  4316.         $clientNcc =  '';
  4317.         if($invoiceType == 'sale'){
  4318.             if($commande->getTiers() != null){
  4319.                 $clientNcc $commande->getTiers()->getCodeTVA();
  4320.             }
  4321.             
  4322.         }
  4323.         $content = array(
  4324.             
  4325.             'invoiceType' => $invoiceType ,
  4326.             'paymentMethod'=> $commande->getMoyenDePaiement(),
  4327.             'template' => $commande->getTiers()->getTypeClient(),
  4328.             'isRne' => false,
  4329.             'clientNcc' => $clientNcc,
  4330.             'clientCompanyName' => $commande->getTiers()->getNom(),
  4331.             'clientPhone' => $commande->getTiers()->getTelephone(),
  4332.             'clientEmail' => $commande->getTiers()->getEmail(),
  4333.             'clientSellerName' => $user->getNomComplet(),
  4334.             'pointOfSale' => $userBoutique->getNomPointDeVenteFNE(),
  4335.             'establishment' =>  $userBoutique->getNomEtablissementFNE(),
  4336.             'commercialMessage' => $commande->getTitreDocument(),
  4337.             'footer' => 'Arrêtée la presente facture à la somme de '.$commande->getMontantEnLettre().' '.$boutique->getSettings()->getDevise(),
  4338.             //'foreignCurrency' => '',
  4339.             //'foreignCurrencyRate' => 0,
  4340.             'items' => $items,
  4341.             
  4342.             'discount' => $commande->getRemise()
  4343.         );
  4344.         
  4345.         if($invoiceType == 'sale'){
  4346.             $content['customTaxes'] = $globalCustomTaxes;
  4347.         }
  4348.         
  4349.         $content json_encode($content);
  4350.         $ch curl_init($url);
  4351.         curl_setopt($chCURLOPT_RETURNTRANSFERtrue);
  4352.         curl_setopt($chCURLOPT_HTTPHEADER, ['Content-Type: application/json''Authorization: Bearer '.$boutique->getApiKeyFNE()]);
  4353.         curl_setopt($chCURLOPT_POSTFIELDS$content);
  4354.         $serverOutput curl_exec($ch);
  4355.         curl_close($ch);
  4356.         
  4357.         $response = new JsonResponse;
  4358.         
  4359.         
  4360.         //$response->setContent(json_encode($serverOutput));
  4361.         //return $response;
  4362.         $serverOutput json_decode($serverOutputtrue);
  4363.         if(isset($serverOutput['invoice'])){
  4364.             $commande->setIdFactureFNE($serverOutput['invoice']['id']);
  4365.             $commande->seTtokenFNE($serverOutput['token']);
  4366.             //$boutique->setSoldeTimbreFNE($serverOutput['balance_sticker']);
  4367.             if(isset($serverOutput['balance_funds'])){
  4368.                 $boutique->setSoldeTimbreFNE($serverOutput['balance_funds']);
  4369.             }
  4370.             if(isset($serverOutput['balance_sticker'])){
  4371.                 $boutique->setSoldeTimbreFNE($serverOutput['balance_sticker']);
  4372.             }
  4373.             
  4374.             
  4375.             //Mettre aussi les produitCommande Ajour pour d'eventuel facture d'avoir
  4376.             
  4377.             $itemsRetournes $serverOutput['invoice']['items'];
  4378.             foreach($itemsRetournes as $itemsRetourne){
  4379.                 $pro $em->getRepository(Produit::class)
  4380.                             ->findOneBy(
  4381.                                 array(
  4382.                                     'boutique' => $boutique,
  4383.                                     'nom' => $itemsRetourne['description'],
  4384.                                     'reference' => $itemsRetourne['reference']
  4385.                                 )
  4386.                             );
  4387.                 if($pro != null){
  4388.                     $proCom $em->getRepository(ProduitCommande::class)
  4389.                             ->findOneBy(
  4390.                                 array(
  4391.                                     'commande' => $commande->getId(),
  4392.                                     'produit' => $pro->getId()
  4393.                                 )
  4394.                             );
  4395.                     if($proCom != null){
  4396.                         $proCom->setIdProduitPourFactureDAvoirFNE($itemsRetourne['id']);
  4397.                         $em->persist($proCom);
  4398.                     }
  4399.                 
  4400.                 }
  4401.             }
  4402.             
  4403.             $em->flush();
  4404.         }
  4405.         return $serverOutput;
  4406.         
  4407.     }
  4408.     
  4409.     
  4410.     /**
  4411.       * @Route("/{slug}/url-generer-facture-d-avoir-fne/{id}", name="admin_url_generer_facture_d_avoir_fne")
  4412.     */
  4413.     public function urlGenererFactureDAvoirFNEAction(Request $requestChiffreEnLettre $chiffreEnLettre$slug$id)
  4414.     {
  4415.         
  4416.         $em $this->getDoctrine()
  4417.                     ->getManager();
  4418.         $boutique $em->getRepository(Boutique::class)
  4419.                         ->findOneBySlug($slug);
  4420.         $commande $em->getRepository(Commande::class)
  4421.                         ->findOneById($id);
  4422.         $user $this->getUser();
  4423.         $userBoutique $em->getRepository(UserBoutique::class)
  4424.                         ->findOneBy(
  4425.                             array(
  4426.                                 'user' => $user,
  4427.                                 'boutique' => $boutique
  4428.                             )
  4429.                         );
  4430.         $produitCommandes $em->getRepository(ProduitCommande::class)
  4431.                                 ->findByCommande($commande);
  4432.         $reponse '';
  4433.         
  4434.         if($request->getMethod() == 'POST'){
  4435.                 
  4436.             $chiffreEnLettre = new ChiffreEnLettre;
  4437.             if($boutique->getApiKeyFNE() != ''){
  4438.                 $reponse $this->genererFactureDAvoirFNE($chiffreEnLettre$boutique->getSlug(), $commande->getId());
  4439.             }
  4440.         }
  4441.         
  4442.         
  4443.          return $this->render('admin/url_generer_facture_d_avoir_fne.html.twig', [
  4444.            'boutique' => $boutique,
  4445.            'reponse' => $reponse,
  4446.            'userBoutique' => $userBoutique,
  4447.            'produitCommandes' => $produitCommandes
  4448.         ]);
  4449.     }
  4450.     
  4451.     public function genererFactureDAvoirFNE(ChiffreEnLettre $chiffreEnLettre$slug$id)
  4452.     {
  4453.         
  4454.         $em $this->getDoctrine()
  4455.                     ->getManager();
  4456.         $boutique $em->getRepository(Boutique::class)
  4457.                         ->findOneBySlug($slug);
  4458.         $commande $em->getRepository(Commande::class)
  4459.                         ->findOneById($id);
  4460.         $user $this->getUser();
  4461.         $userBoutique $em->getRepository(UserBoutique::class)
  4462.                         ->findOneBy(
  4463.                             array(
  4464.                                 'user' => $user,
  4465.                                 'boutique' => $boutique
  4466.                             )
  4467.                         );
  4468.         $url $boutique->getUrlFNEDeBase().'/external/invoices/'.$commande->getIdFactureFNE().'/refund';
  4469.         
  4470.         $produitCommandes $em->getRepository(ProduitCommande::class)
  4471.                                 ->findByCommande($commande);
  4472.                                 
  4473.         
  4474.             
  4475.             $items = array();
  4476.             $avoir = new Commande;
  4477.             $avoir->setBoutique($boutique);
  4478.             $avoir->setTypeFacture('bill_credit');
  4479.             $avoir->setNumero($this->getNumero('bill_credit'$boutique));
  4480.             $avoir->setTiers($commande->getTiers());
  4481.             $avoir->setIdFactureDeBase($commande->getId());
  4482.             $em->persist($avoir);
  4483.             
  4484.             $em->flush();
  4485.             $avoirProduits = array();
  4486.             foreach($produitCommandes as $produitCommande){
  4487.                     $idProduitPourFactureDAvoirFNE $_POST['idProduit'.$produitCommande->getProduit()->getId()];
  4488.                     $quantiteRetournee = (float)$_POST['quantite'.$produitCommande->getProduit()->getId()];
  4489.                 if($quantiteRetournee && $quantiteRetournee <= $produitCommande->getQuantite()){
  4490.                     $item = array(
  4491.                             'id' => $idProduitPourFactureDAvoirFNE,
  4492.                             'quantity' => $quantiteRetournee,
  4493.                     );
  4494.                     
  4495.                     array_push($items$item);
  4496.                     $avoirProduit = new ProduitCommande;
  4497.                     $avoirProduit->setCommande($avoir);
  4498.                     $avoirProduit->setProduit($produitCommande->getProduit());
  4499.                     $avoirProduit->setQuantite($quantiteRetournee);
  4500.                     $avoirProduit->setPrix($produitCommande->getPrix());
  4501.                     $totalHt $quantiteRetournee $produitCommande->getPrix();
  4502.                     
  4503.                     $totalTVA =  $produitCommande->getTotalTva() * $quantiteRetournee/$produitCommande->getQuantite();
  4504.                     $totalTTC $totalHt $totalTVA;
  4505.                     $avoirProduit->setTotalHT($totalHt);
  4506.                     $avoirProduit->setTva($totalTVA);
  4507.                     $avoirProduit->setTotalTTC($totalTTC);
  4508.                     $em->persist($avoirProduit);
  4509.                     array_push($avoirProduits$avoirProduit);
  4510.                     $avoir->setTotalHT($avoir->getTotalHT()+ $totalHt);
  4511.                     $avoir->setTotalHTApresRemise($avoir->getTotalHTApresRemise() + $totalHt);
  4512.                     $avoir->setTotalTTC($avoir->getTotalTTC()+ $totalTTC);
  4513.                     $avoir->setTotalTVA($avoir->getTotalTVA()+ $totalTVA);
  4514.                 }
  4515.             }
  4516.             $avoir->setmontantEnLettre($chiffreEnLettre->Conversion($avoir->getTotalTTC()));
  4517.             $em->flush();
  4518.             $pdf = new Html2Pdf('P'$boutique->getSettings()->getFormatPapierImpression(), 'en');
  4519.                 
  4520.                     
  4521.             $pdfContent $this->renderView('pdf/facture_avoir.html.twig', [
  4522.                         'boutique' => $boutique,
  4523.                         'facture' => $avoir,
  4524.                         'produits' => $avoirProduits,
  4525.                         'commandeDeBasse' => $commande
  4526.                 ]);
  4527.             $pdf->writeHTML($pdfContent);
  4528.             $name $avoir->getTypeFacture().$avoir->getId().time().$boutique->getId().rand(110000).'.pdf';
  4529.             $lienPhysique $avoir->getUploadRootDir().$name;
  4530.                 
  4531.             $avoir->setLienPDF($this->getDomain().'/pdf478njkp01/'.$name);
  4532.             $pdf->output($lienPhysique'F');
  4533.             // Fin facture PDF
  4534.             
  4535.             $em->flush();
  4536.             $content = array(
  4537.                 'id' => $commande->getIdFactureFNE(),
  4538.                 'items' => $items
  4539.             );
  4540.             
  4541.             
  4542.             $content json_encode($content);
  4543.             
  4544.             $ch curl_init($url);
  4545.             curl_setopt($chCURLOPT_RETURNTRANSFERtrue);
  4546.             curl_setopt($chCURLOPT_HTTPHEADER, ['Content-Type: application/json''Authorization: Bearer '.$boutique->getApiKeyFNE()]);
  4547.             curl_setopt($chCURLOPT_POSTFIELDS$content);
  4548.             $serverOutput curl_exec($ch);
  4549.             curl_close($ch);
  4550.             
  4551.             $response = new JsonResponse;
  4552.             
  4553.             
  4554.             //$response->setContent(json_encode($serverOutput));
  4555.             //return $response;
  4556.             $serverOutput json_decode($serverOutputtrue);
  4557.             //$commande->setIdFactureFNE($serverOutput['invoice']['id']);
  4558.             if(isset($serverOutput['token'])){
  4559.                 $avoir->seTtokenFNE($serverOutput['token']);
  4560.             }
  4561.             //$boutique->setSoldeTimbreFNE($serverOutput['balance_sticker']);
  4562.             if(isset($serverOutput['balance_funds'])){
  4563.                 $boutique->setSoldeTimbreFNE($serverOutput['balance_funds']);
  4564.             }
  4565.             if(isset($serverOutput['balance_sticker'])){
  4566.                 $boutique->setSoldeTimbreFNE($serverOutput['balance_sticker']);
  4567.             }
  4568.             
  4569.             
  4570.             $em->flush();
  4571.             return $serverOutput;
  4572.         
  4573.         
  4574.     }
  4575.     
  4576.     //Vente
  4577.     /**
  4578.      * @Route("/{slug}/change-sale-state/{type}/{id}/{state}", name="admin.change_sale_state")
  4579.      * @return \Symfony\Component\HttpFoundation\Response
  4580.      */
  4581.     public function changeSaleStateAction(Request $request$slug$type$id$state)
  4582.     {
  4583.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  4584.            return $this->redirectToRoute('security_login');
  4585.         }
  4586.         
  4587.         $em $this->getDoctrine()
  4588.                     ->getManager();
  4589.                     
  4590.         $boutique  $em->getRepository(Boutique::class)
  4591.                         ->findOneBySlug($slug);
  4592.     
  4593.         $user $this->getUser();
  4594.         $userBoutique $em->getRepository(UserBoutique::class)
  4595.                         ->findOneBy(
  4596.                             array(
  4597.                             'user' => $user->getId(),
  4598.                             'boutique' => $boutique->getId()
  4599.                             )
  4600.                         );
  4601.         $commande  $em->getRepository(Commande::class)
  4602.                         ->findOneBy(
  4603.                             array(
  4604.                                 'boutique' => $boutique->getId(),
  4605.                                 'id' => $id
  4606.                         ));
  4607.         if($commande->getNumero() == ''){
  4608.             $commande->setNumero($this->getNumero($type$boutique));
  4609.         }
  4610.         $commande->setEtat($state);
  4611.         $em->flush();
  4612.         
  4613.         //Produit commande du devis
  4614.                     
  4615.         $produitCommandesDevis $em->getRepository(ProduitCommande::class)
  4616.                                 ->findByCommande($commande);
  4617.         //
  4618.         $produitCommandes = array();
  4619.         
  4620.         
  4621.         switch($type){
  4622.             case 'proposal':
  4623.                 
  4624.                     $facture = new  Commande;
  4625.                     $facture->setTypeFacture('invoice');
  4626.                     $facture->setNatureFacture('sale');
  4627.                     $facture->setEtat(Commande::ETAT_FACTURE_FINALISE);
  4628.                     $facture->setLaDate(new \DateTime());
  4629.                     $facture->setTotalHT($commande->getTotalHT());
  4630.                     $facture->setTotalHTApresRemise($commande->getTotalHTApresRemise());
  4631.                     $facture->setTotalTVA($commande->getTotalTVA());
  4632.                     $facture->setTotalTTC($commande->getTotalTTC());
  4633.                     $facture->setResteAPayer($commande->getTotalTTC());
  4634.                     
  4635.                     $facture->setRemise($commande->getRemise());
  4636.                     $facture->setRemisePourcentage($commande->getRemisePourcentage());
  4637.                     $facture->setMontantEnLettre($commande->getMontantEnLettre());
  4638.                     $facture->setBoutique($commande->getBoutique());
  4639.                     $facture->setTiers($commande->getTiers());
  4640.                     
  4641.                     $facture->setNumero($this->getNumero('invoice'$boutique));
  4642.                     $em->persist($facture);
  4643.                     $em->flush();
  4644.                     $this->genererEcritureComptableDeVente($boutique$facture);
  4645.                     
  4646.                     if($boutique->getApiKeyFNE() != ''){
  4647.                         if($boutique->getSettings()->isGenererAutomatiquementFNE()){
  4648.                             $responseFNE $this->genererFactureFNE($boutique->getSlug(), $facture->getId(), $facture->getNatureFacture());
  4649.                         }
  4650.                     
  4651.                     }
  4652.                     foreach($produitCommandesDevis as $produitCommandeDevis){
  4653.                         $prodCom = new ProduitCommande;
  4654.                         $prodCom->setProduit($produitCommandeDevis->getProduit());
  4655.                         $prodCom->setCommande($facture);
  4656.                         $prodCom->setQuantite($produitCommandeDevis->getQuantite());
  4657.                         $prodCom->setPrix($produitCommandeDevis->getPrix());
  4658.                         $prodCom->setRemise($produitCommandeDevis->getRemise());
  4659.                         $prodCom->setTotalHT($produitCommandeDevis->getTotalHT());
  4660.                         $prodCom->setTotalTVA($produitCommandeDevis->getTotalTVA());
  4661.                         $prodCom->setTotalTTC($produitCommandeDevis->getTotalTTC());
  4662.                         $prodCom->setTva($produitCommandeDevis->getTva());
  4663.                         if($produitCommandeDevis->getProduit()->getTypeProduit() == 'produit'){
  4664.                             $produitCommandeDevis->getProduit()->setStockDisponible($produitCommandeDevis->getProduit()->getStockDisponible() - $produitCommandeDevis->getQuantite());
  4665.                         }
  4666.                         if($produitCommandeDevis->getProduit()->getTypeProduit() == 'produit'){
  4667.                             if($type == 'invoice'){
  4668.                                 
  4669.                                 $produitVendu $em->getRepository(Produit::class)
  4670.                                                 ->findOneById($idDuProduit);
  4671.                                 $produitVendu->setStockDisponible($produitVendu->getStockDisponible() - $produitCommandeDevis->getQuantite());
  4672.                             }
  4673.                         }
  4674.                         $em->persist($prodCom);
  4675.                         array_push($produitCommandes$prodCom);
  4676.                     }
  4677.                     
  4678.                     $pdf = new Html2Pdf('P'$boutique->getSettings()->getFormatPapierImpression(), 'en');
  4679.                     
  4680.                     $content $this->renderView('pdf/facture.html.twig', [
  4681.                         'boutique' => $boutique,
  4682.                         'facture' => $facture,
  4683.                         'produits' => $produitCommandes
  4684.                     ]);
  4685.                     
  4686.                     $pdf->writeHTML($content);
  4687.                     $lienPhysique $facture->getUploadRootDir().$facture->getTypeFacture().$facture->getId().'.pdf';
  4688.                 
  4689.                     $facture->setLienPDF($this->getDomain().'/pdf478njkp01/'.$facture->getTypeFacture().$facture->getId().'.pdf');
  4690.                     $pdf->output($lienPhysique'F');
  4691.                     
  4692.                     $commande->setEtat(Commande::ETAT_DEVIS_FINALISE);
  4693.                     $em->flush();
  4694.                 return $this->redirectToRoute('admin.proposals', array('slug' => $boutique->getSlug()));
  4695.             
  4696.             break;
  4697.             
  4698.             case 'invoice':
  4699.                     $pdf = new Html2Pdf('P'$boutique->getSettings()->getFormatPapierImpression(), 'en');
  4700.                     
  4701.                     $content $this->renderView('pdf/facture.html.twig', [
  4702.                         'boutique' => $boutique,
  4703.                         'facture' => $commande,
  4704.                         'produits' => $produitCommandes
  4705.                     ]);
  4706.                     
  4707.                     $pdf->writeHTML($content);
  4708.                     $lienPhysique $commande->getUploadRootDir().$commande->getTypeFacture().$commande->getId().'.pdf';
  4709.                 
  4710.                     $commande->setLienPDF($this->getDomain().'/pdf478njkp01/'.$commande->getTypeFacture().$commande->getId().'.pdf');
  4711.                     $commande->setEtat(Commande::ETAT_FACTURE_FINALISE);
  4712.                     $pdf->output($lienPhysique'F');
  4713.                     
  4714.                     $em->flush();
  4715.                 return $this->redirectToRoute('admin.invoices', array('slug' => $boutique->getSlug()));
  4716.             break;
  4717.         }
  4718.         
  4719.         
  4720.         return $this->redirectToRoute('admin.invoices', array('slug' => $boutique->getSlug()));
  4721.         
  4722.     }
  4723.     
  4724.     
  4725.     /**
  4726.      * @Route("/{slug}/check-customer-vat-status", name="admin.check_customer_vat_status")
  4727.      * @return \Symfony\Component\HttpFoundation\Response
  4728.      */
  4729.     public function checkCustomerVATStatusAction(Request $request$slug)
  4730.     {
  4731.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  4732.            return $this->redirectToRoute('security_login');
  4733.         }
  4734.         $em $this->getDoctrine()
  4735.                     ->getManager();
  4736.         $response = new JsonResponse;
  4737.         $response->headers->set('Access-Control-Allow-Origin''*');
  4738.         $response->headers->set('Content-Type''application/json');
  4739.         
  4740.         $boutique $em->getRepository(Boutique::class)
  4741.                                     ->findOneBySlug($slug);
  4742.                         
  4743.         $data = array();
  4744.         
  4745.         if($request->getMethod() == 'POST'){
  4746.             $id $_POST['id'];
  4747.             $customer  $em->getRepository(Tiers::class)
  4748.                         ->findOneBy(
  4749.                             array(
  4750.                                 'boutique' => $boutique->getId(),
  4751.                                 'id' => $id
  4752.                         ));
  4753.             
  4754.             $data = array(
  4755.                 "assujettiALaTVA" => $customer->getAssujettiALaTVA()
  4756.             );
  4757.         }
  4758.         
  4759.         $response->setContent(json_encode($data));
  4760.         return $response;
  4761.     }
  4762.     
  4763.     
  4764.     //Vente
  4765.     /**
  4766.      * @Route("/{slug}/edit-sale/{type}/{id}", name="admin.edit_sale")
  4767.      * @return \Symfony\Component\HttpFoundation\Response
  4768.      */
  4769.     public function editSaleAction(Request $requestChiffreEnLettre $chiffreEnLettre$slug$type$id)
  4770.     {
  4771.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  4772.            return $this->redirectToRoute('security_login');
  4773.         }  
  4774.         $em $this->getDoctrine()
  4775.                     ->getManager();
  4776.         $boutique  $em->getRepository(Boutique::class)
  4777.                         ->findOneBySlug($slug);
  4778.     
  4779.         $produits  $em->getRepository(Produit::class)
  4780.                         ->findByBoutique($boutique->getId());
  4781.     
  4782.         $commande  $em->getRepository(Commande::class)
  4783.                         ->findOneBy(
  4784.                             array(
  4785.                                 'boutique' => $boutique->getId(),
  4786.                                 'id' => $id
  4787.                         ));
  4788.         
  4789.         $ancienProduitCommandes  $em->getRepository(ProduitCommande::class)
  4790.                         ->findBy(
  4791.                             array(
  4792.                                 'commande' => $commande->getId()
  4793.                         ));
  4794.                         
  4795.         $modeleReglements $em->getRepository(ModeleReglement::class)
  4796.                                 ->findByBoutique($boutique);        
  4797.         $tiers $em->getRepository(Tiers::class)
  4798.                                 ->findByBoutique($boutique);        
  4799.         
  4800.         $user $this->getUser();
  4801.         $userBoutique $em->getRepository(UserBoutique::class)
  4802.                         ->findOneBy(
  4803.                             array(
  4804.                             'user' => $user->getId(),
  4805.                             'boutique' => $boutique->getId()
  4806.                             )
  4807.                         );
  4808.         $vehicules = array(1222328);
  4809.     
  4810.         $ok_soumission '';
  4811.         $error '';
  4812.         $editMode 'edit';
  4813.         if($request->getMethod() == 'POST'){
  4814.             $typeFacture $_POST['typeFacture'];
  4815.             $observation $_POST['observation'];
  4816.             $modeleReglement $_POST['modeleReglement'];
  4817.             $moyenDePaiement $_POST['moyenDePaiement'];
  4818.             $client $_POST['client'];
  4819.             $dateCommande $_POST['dateCommande'];
  4820.             
  4821.             $montantHT = (float)$_POST['montantHT'];
  4822.             $remise =   (float)$_POST['remise'];
  4823.             $remisePourcentage =  (float)$_POST['remisePourcentage'];
  4824.             $totalHTApresRemise =  (float)$_POST['totalHTApresRemise'];
  4825.             $montantTVA = (float)$_POST['montantTVA'];
  4826.             $montantTTC = (float)$_POST['montantTTC'];
  4827.             $matriculeVehicule $_POST['matriculeVehicule'];
  4828.             $marqueVehicule $_POST['marqueVehicule'];
  4829.             $kilometrageVehicule = (float)$_POST['kilometrageVehicule'];
  4830.             $listeProduits json_decode($_POST['listeProduits']);
  4831.             
  4832.             $client $em->getRepository(Tiers::class)
  4833.                         ->findOneById($client);
  4834.             if(null !== $client){
  4835.                 $commande->setTiers($client);
  4836.             }
  4837.             
  4838.             $laDate = new \DateTime($dateCommande);
  4839.             $commande->setLaDate($laDate);
  4840.             $commande->setObservation($observation);
  4841.             $commande->setModifiePar($user);
  4842.             $commande->setMoyenDePaiement($moyenDePaiement);
  4843.             
  4844.             $commande->setMatriculeVehicule($matriculeVehicule);
  4845.             $commande->setMarqueVehicule($marqueVehicule);
  4846.             $commande->setKilometrageVehicule($kilometrageVehicule);
  4847.             $commande->setTotalHT($montantHT);
  4848.             $commande->setRemise($remise);
  4849.             $commande->setRemisePourcentage(round($remisePourcentage2));
  4850.             $commande->setTotalHTApresRemise($totalHTApresRemise);
  4851.             
  4852.             $commande->setTotalTVA($montantTVA);
  4853.             $commande->setTotalTTC($montantTTC);
  4854.             $commande->setResteAPayer($montantTTC);
  4855.             $montantlettre strtoupper($chiffreEnLettre->Conversion($montantTTC));
  4856.             $commande->setMontantEnLettre($montantlettre);
  4857.             $commande->setTypeFacture($type);
  4858.             if($commande->getNumero() == ''){
  4859.                 $commande->setNumero($this->getNumero($type$boutique));
  4860.             }
  4861.             $em->flush();
  4862.             
  4863.             //Supprimer les ancien ProduitCommande lié 
  4864.             foreach($ancienProduitCommandes as $ancienProduitCommande){
  4865.                 $em->remove($ancienProduitCommande);
  4866.             }
  4867.             $em->flush();
  4868.             $produitCommandes = array();
  4869.             foreach($listeProduits as $listeProduit){
  4870.                 $listeProduit = (array)$listeProduit;
  4871.                 $idDuProduit $listeProduit['idProduit'];
  4872.                 
  4873.                 if($idDuProduit == ''){
  4874.                     //Produit inexistant, il faut le créer
  4875.                     $leProduit = new Produit;
  4876.                     $leProduit->setNom($listeProduit['nomProduit']);
  4877.                     $em->persist($leProduit);
  4878.                     
  4879.                     //TVA
  4880.                     if($listeProduit['tva'] > 0){
  4881.                         $tva $em->getRepository(TVA::class)
  4882.                                     ->findOneBy(
  4883.                                         array(
  4884.                                             'boutique' => $boutique->getId(),
  4885.                                             'valeur'  => $listeProduit['tva']
  4886.                                         )
  4887.                                     );
  4888.                         if($tva == null){
  4889.                             $tva = new TVA;
  4890.                             $tva->setValeur($listeProduit['tva']);
  4891.                             $em->persist($tva);
  4892.                             $em->flush();
  4893.                         }
  4894.                         
  4895.                         $leProduit->setTva($tva);
  4896.                         
  4897.                     }
  4898.                     //Prix
  4899.                     $produitP = new PrixProduit;
  4900.                     $produitP->setValeur($listeProduit['prixUnitaire']);
  4901.                     $produitP->setBoutique($boutique);
  4902.                     $leProduit->addPrix($produitP);
  4903.                     $leProduit->setPrixActuel($produitP);
  4904.                     $leProduit->setBoutique($boutique);
  4905.                     $em->persist($produitP);
  4906.                     $em->persist($leProduit);
  4907.                     $em->flush();
  4908.                     
  4909.                 } else{
  4910.                     $leProduit $em->getRepository(Produit::class)
  4911.                         ->findOneById($idDuProduit);
  4912.                 }
  4913.                 
  4914.                 $produitCommande = new ProduitCommande;
  4915.                 $produitCommande->setProduit($leProduit);
  4916.                 $produitCommande->setCommande($commande);
  4917.                 $produitCommande->setQuantite((float)$listeProduit['quantite']);
  4918.                 $produitCommande->setPrix((float)$listeProduit['prixUnitaire']);
  4919.                 $produitCommande->setRemise((float)$listeProduit['reduction']);
  4920.                 $produitCommande->setMontantRemise((float)$listeProduit['montantReduction']);
  4921.                 $produitCommande->setTotalHT((float)$listeProduit['totalHT']);
  4922.                 $produitCommande->setTotalHTApresRemise((float)$listeProduit['totalHTApresRemise']);
  4923.                 
  4924.                 $produitCommande->setTotalTVA((float)$listeProduit['totalTVA']);
  4925.                 $produitCommande->setTva((float)$listeProduit['tva']);
  4926.                 $produitCommande->setTotalTTC((float)$listeProduit['totalTTC']);
  4927.                 $em->persist($produitCommande);
  4928.                 array_push($produitCommandes$produitCommande);
  4929.                 
  4930.             }
  4931.             $em->flush();
  4932.             
  4933.             $pdf = new Html2Pdf('P'$boutique->getSettings()->getFormatPapierImpression(), 'en');
  4934.             $content '';
  4935.             switch($type){
  4936.                 case 'invoice':    
  4937.                     $content $this->renderView('pdf/facture.html.twig', [
  4938.                         'boutique' => $boutique,
  4939.                         'facture' => $commande,
  4940.                         'produits' => $produitCommandes
  4941.                     ]);
  4942.                 break;
  4943.                 
  4944.                 case 'proposal':
  4945.                     $content $this->renderView('pdf/devis.html.twig', [
  4946.                         'boutique' => $boutique,
  4947.                         'facture' => $commande,
  4948.                         'produits' => $produitCommandes
  4949.                     ]);
  4950.                 break;
  4951.             }
  4952.             
  4953.             $pdf->writeHTML($content);
  4954.             $lienPhysique $commande->getUploadRootDir().$commande->getTypeFacture().$commande->getId().'.pdf';
  4955.                 
  4956.             $commande->setLienPDF($this->getDomain().'/pdf478njkp01/'.$commande->getTypeFacture().$commande->getId().'.pdf');
  4957.             $pdf->output($lienPhysique'F');
  4958.             
  4959.             $em->flush();
  4960.             
  4961.             return $this->render('admin/facture.html.twig', [
  4962.                    'boutique' => $boutique,
  4963.                    'commande' => $commande,
  4964.                    'typeFacture' => $typeFacture,
  4965.                    'client' => $client,
  4966.                    'produitCommandes' => $produitCommandes,
  4967.                    'listeProduit' => $listeProduit,
  4968.                    'montantHT' => $montantHT,
  4969.                    'montantTVA' => $montantTVA,
  4970.                    'montantTTC' => $montantTTC,
  4971.                    'userBoutique' => $userBoutique
  4972.                 ]);
  4973.             
  4974.             
  4975.         }
  4976.     
  4977.         return $this->render('admin/edit_sale.html.twig', [
  4978.            'boutique' => $boutique,
  4979.            'produits' => $produits,
  4980.            'modeleReglements' => $modeleReglements,
  4981.            'tiers' => $tiers,
  4982.            'editMode' => $editMode,
  4983.            'commande' => $commande,
  4984.            'ancienProduitCommandes' => $ancienProduitCommandes,
  4985.            'type' => $type,
  4986.            'userBoutique' => $userBoutique,
  4987.            'vehicules' => $vehicules
  4988.         ]);
  4989.     }
  4990.     /**
  4991.      * @Route("/{slug}/bon-de-livraison/{id}", name="admin.bon_de_livraison")
  4992.      * @return \Symfony\Component\HttpFoundation\Response
  4993.      */
  4994.     public function bonDeLivraisonAction(Request $request$slug$id)
  4995.     {
  4996.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  4997.            return $this->redirectToRoute('security_login');
  4998.         }      
  4999.         $em $this->getDoctrine()
  5000.                     ->getManager();
  5001.         $boutique  $em->getRepository(Boutique::class)
  5002.                         ->findOneBySlug($slug);
  5003.     
  5004.         $user $this->getUser();
  5005.         $userBoutique $em->getRepository(UserBoutique::class)
  5006.                         ->findOneBy(
  5007.                             array(
  5008.                             'user' => $user->getId(),
  5009.                             'boutique' => $boutique->getId()
  5010.                             )
  5011.                         );
  5012.         $commande  $em->getRepository(Commande::class)
  5013.                         ->findOneBy(
  5014.                             array(
  5015.                                 'boutique' => $boutique->getId(),
  5016.                                 'id' => $id
  5017.                         ));
  5018.         
  5019.         $listeProduits  $em->getRepository(ProduitCommande::class)
  5020.                         ->findBy(
  5021.                             array(
  5022.                                 'commande' => $commande->getId()
  5023.                         ));
  5024.                 
  5025.             
  5026.             $produitCommandes = array();
  5027.             foreach($listeProduits as $listeProduit){
  5028.                 
  5029.                 array_push($produitCommandes$listeProduit);
  5030.                 
  5031.             }
  5032.             
  5033.             $pdf = new Html2Pdf('P'$boutique->getSettings()->getFormatPapierImpression(), 'en');
  5034.             
  5035.             
  5036.             $content $this->renderView('pdf/bon_de_livraison.html.twig', [
  5037.                 'boutique' => $boutique,
  5038.                 'facture' => $commande,
  5039.                 'produits' => $produitCommandes
  5040.             ]);
  5041.             
  5042.             
  5043.             $pdf->writeHTML($content);
  5044.             $lienPhysique $commande->getUploadRootDir().'_bon_de_livraison_'.$commande->getId().'.pdf';
  5045.                 
  5046.             $pdf->output($lienPhysique'I');
  5047.             
  5048.             return $this->renderView('pdf/bon_de_livraison.html.twig', [
  5049.                 'boutique' => $boutique,
  5050.                 'facture' => $commande,
  5051.                 'produits' => $produitCommandes
  5052.             ]);
  5053.     }        
  5054.     
  5055.     
  5056.     /**
  5057.      * @Route("/{slug}/duplicate-sale/{id}", name="admin.duplicate_sale")
  5058.      * @return \Symfony\Component\HttpFoundation\Response
  5059.      */
  5060.     public function duplicateSaleAction(Request $request$slug$id)
  5061.     {
  5062.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  5063.            return $this->redirectToRoute('security_login');
  5064.         }      
  5065.         $em $this->getDoctrine()
  5066.                     ->getManager();
  5067.         $boutique  $em->getRepository(Boutique::class)
  5068.                         ->findOneBySlug($slug);
  5069.     
  5070.         $user $this->getUser();
  5071.         $userBoutique $em->getRepository(UserBoutique::class)
  5072.                         ->findOneBy(
  5073.                             array(
  5074.                             'user' => $user->getId(),
  5075.                             'boutique' => $boutique->getId()
  5076.                             )
  5077.                         );
  5078.         $commande  $em->getRepository(Commande::class)
  5079.                         ->findOneBy(
  5080.                             array(
  5081.                                 'boutique' => $boutique->getId(),
  5082.                                 'id' => $id
  5083.                         ));
  5084.         
  5085.         $listeProduits  $em->getRepository(ProduitCommande::class)
  5086.                         ->findBy(
  5087.                             array(
  5088.                                 'commande' => $commande->getId()
  5089.                         ));
  5090.                 
  5091.             $nouvelleCommande = new Commande;
  5092.             $nouvelleCommande->setBoutique($boutique);
  5093.             $nouvelleCommande->setTiers($commande->getTiers());
  5094.             
  5095.             $nouvelleCommande->setLaDate(new \DateTime());
  5096.             $nouvelleCommande->setTotalHT($commande->getTotalHT());
  5097.             $nouvelleCommande->setTotalHTApresRemise($commande->getTotalHTApresRemise());
  5098.             $nouvelleCommande->setRemise($commande->getRemise());
  5099.             $nouvelleCommande->setRemisePourcentage($commande->getRemisePourcentage());
  5100.             $nouvelleCommande->setTotalTVA($commande->getTotalTVA());
  5101.             $nouvelleCommande->setTotalAutreTaxe($commande->getTotalAutreTaxe());
  5102.             $nouvelleCommande->setTotalTTC($commande->getTotalTTC());
  5103.             $nouvelleCommande->setResteAPayer($commande->getTotalTTC());
  5104.             $nouvelleCommande->setTitreDocument($commande->getTitreDocument());
  5105.             $nouvelleCommande->setObservation($commande->getObservation());
  5106.             $nouvelleCommande->setValableJusquAu($commande->getValableJusquAu());
  5107.             $nouvelleCommande->setMontantEnLettre($commande->getMontantEnLettre());
  5108.             $nouvelleCommande->setTypeFacture($commande->getTypeFacture());
  5109.             $nouvelleCommande->setNatureFacture($commande->getNatureFacture());
  5110.             
  5111.             $nouvelleCommande->setNumero($this->getNumero($nouvelleCommande->getTypeFacture(), $boutique));
  5112.             $em->persist($nouvelleCommande);
  5113.             $em->flush();
  5114.             $produitCommandes = array();
  5115.             foreach($listeProduits as $listeProduit){
  5116.                 $produitCommande = new ProduitCommande;
  5117.                 $produitCommande->setProduit($listeProduit->getProduit());
  5118.                 $produitCommande->setCommande($nouvelleCommande);
  5119.                 $produitCommande->setQuantite($listeProduit->getQuantite());
  5120.                 $produitCommande->setPrix($listeProduit->getPrix());
  5121.                 $produitCommande->setRemise($listeProduit->getRemise());
  5122.                 $produitCommande->setRemisePourcentage($listeProduit->getRemisePourcentage());
  5123.                 $produitCommande->setTotalHT($listeProduit->getTotalHT());
  5124.                 $produitCommande->setTotalHTApresRemise($listeProduit->getTotalHTApresRemise());
  5125.                 $produitCommande->setTotalTVA($listeProduit->getTotalTVA());
  5126.                 $produitCommande->setAutreTaxe($listeProduit->getAutreTaxe());
  5127.                 $produitCommande->setTotalTTC($listeProduit->getTotalTTC());
  5128.                 $em->persist($produitCommande);
  5129.                 
  5130.                 array_push($produitCommandes$produitCommande);
  5131.                 
  5132.             }
  5133.             $em->flush();
  5134.             
  5135.             if($nouvelleCommande->getTypeFacture() == 'invoice'){
  5136.                     
  5137.                 if($boutique->getApiKeyFNE() != ''){
  5138.                     if($boutique->getSettings()->isGenererAutomatiquementFNE()){
  5139.                         $responseFNE $this->genererFactureFNE($boutique->getSlug(), $nouvelleCommande->getId(), $nouvelleCommande->getNatureFacture());
  5140.                     }
  5141.                     
  5142.                 }
  5143.                 $this->genererEcritureComptableDeVente($boutique$nouvelleCommande);
  5144.                     //Ecriture comptable
  5145.             }
  5146.             $pdf = new Html2Pdf('P'$boutique->getSettings()->getFormatPapierImpression(), 'en');
  5147.             $content '';
  5148.             switch($commande->getTypeFacture()){
  5149.                 case 'invoice':    
  5150.                     $content $this->renderView('pdf/facture.html.twig', [
  5151.                         'boutique' => $boutique,
  5152.                         'facture' => $nouvelleCommande,
  5153.                         'produits' => $produitCommandes
  5154.                     ]);
  5155.                 break;
  5156.                 
  5157.                 case 'proposal':
  5158.                     $content $this->renderView('pdf/devis.html.twig', [
  5159.                         'boutique' => $boutique,
  5160.                         'facture' => $nouvelleCommande,
  5161.                         'produits' => $produitCommandes
  5162.                     ]);
  5163.                 break;
  5164.             }
  5165.             
  5166.             $pdf->writeHTML($content);
  5167.             $lienPhysique $nouvelleCommande->getUploadRootDir().$nouvelleCommande->getTypeFacture().$nouvelleCommande->getId().'.pdf';
  5168.                 
  5169.             $nouvelleCommande->setLienPDF($this->getDomain().'/pdf478njkp01/'.$nouvelleCommande->getTypeFacture().$nouvelleCommande->getId().'.pdf');
  5170.             $pdf->output($lienPhysique'F');
  5171.             
  5172.             $em->flush();
  5173.             
  5174.             switch($commande->getTypeFacture()){
  5175.                 case 'invoice':    
  5176.                     return $this->redirectToRoute('admin.invoices',  array('slug' => $boutique->getSlug()));
  5177.                 break;
  5178.                 
  5179.                 case 'proposal':
  5180.                     return $this->redirectToRoute('admin.proposals',  array('slug' => $boutique->getSlug()));
  5181.                 break;
  5182.                 
  5183.                 case 'bill_credit':
  5184.                     return $this->redirectToRoute('admin.bill_credits',  array('slug' => $boutique->getSlug()));
  5185.                 break;
  5186.                 
  5187.                 case 'deposit':
  5188.                     return $this->redirectToRoute('admin.deposits',  array('slug' => $boutique->getSlug()));
  5189.                 break;
  5190.             }
  5191.     }
  5192.     
  5193.     /**
  5194.      * @Route("/{slug}/delete-sale/{type}/{id}", name="admin.delete_sale")
  5195.      * @return \Symfony\Component\HttpFoundation\Response
  5196.   
  5197.     */
  5198.     public function deleteSaleAction(Request $request$slug$type$id)
  5199.     {
  5200.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  5201.            return $this->redirectToRoute('security_login');
  5202.         }
  5203.         $em $this->getDoctrine()
  5204.                     ->getManager();
  5205.         
  5206.         $boutique $em->getRepository(Boutique::class)
  5207.                         ->findOneBySlug($slug);
  5208.         $user $this->getUser();
  5209.         $userBoutique $em->getRepository(UserBoutique::class)
  5210.                         ->findOneBy(
  5211.                             array(
  5212.                             'user' => $user->getId(),
  5213.                             'boutique' => $boutique->getId()
  5214.                             )
  5215.                         );
  5216.         $commande $em->getRepository(Commande::class)
  5217.                         ->findOneBy(
  5218.                             array(
  5219.                                 'boutique' => $boutique->getId(),
  5220.                                 'id' => $id
  5221.                             ));
  5222.         /*
  5223.         
  5224.         $produitCommandes = $em->getRepository(ProduitCommande::class)
  5225.                         ->findByCommande($commande->getId());
  5226.                         
  5227.         foreach($produitCommandes as $produitCommande){
  5228.             $em->remove($produitCommande);
  5229.         }
  5230.         $em->flush();
  5231.         
  5232.         $em->remove($commande);
  5233.         */
  5234.         
  5235.         
  5236.         $commande->setEstSupprime(true);
  5237.         $commande->setSupprimePar($user);
  5238.         $em->flush();
  5239.         
  5240.         switch($type){
  5241.             case 'invoice':
  5242.                 return $this->redirectToRoute('admin.invoices', array('slug' => $boutique->getSlug()));
  5243.             break;
  5244.             
  5245.             case 'bill_credit':
  5246.                 return $this->redirectToRoute('admin.bill_credits', array('slug' => $boutique->getSlug()));
  5247.             break;
  5248.             
  5249.             case 'proposal':
  5250.                 return $this->redirectToRoute('admin.proposals', array('slug' => $boutique->getSlug()));
  5251.             break;
  5252.         }
  5253.         
  5254.     }
  5255.     
  5256.     /**
  5257.      * @Route("/{slug}/product/list", name="admin.list_product")
  5258.      * @return \Symfony\Component\HttpFoundation\Response
  5259.     */
  5260.     public function listProductAction(Request $requestBoutique $boutique)
  5261.     {
  5262.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  5263.            return $this->redirectToRoute('security_login');
  5264.         }
  5265.         $em $this->getDoctrine()
  5266.                     ->getManager();
  5267.         
  5268.         $produits $em->getRepository(Produit::class)
  5269.                         ->findBy(
  5270.                             array(
  5271.                                 'boutique' => $boutique->getId(),
  5272.                                 'estSupprime' => false
  5273.                             ),    
  5274.                             array(
  5275.                                 'nom' => 'ASC'
  5276.                             )
  5277.                         );
  5278.         $user $this->getUser();
  5279.         $userBoutique $em->getRepository(UserBoutique::class)
  5280.                         ->findOneBy(
  5281.                             array(
  5282.                             'user' => $user->getId(),
  5283.                             'boutique' => $boutique->getId()
  5284.                             )
  5285.                         );
  5286.         return $this->render('admin/liste_produit.html.twig', [
  5287.            'boutique' => $boutique,
  5288.            'produits' => $produits,
  5289.            'userBoutique' => $userBoutique
  5290.         ]);
  5291.     }
  5292.     
  5293.     /**
  5294.      * @Route("/{slug}/new-product", name="admin.new_product")
  5295.      * @return \Symfony\Component\HttpFoundation\Response
  5296.      */
  5297.     public function newProductAction(Request $requestBoutique $boutique)
  5298.     {
  5299.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  5300.            return $this->redirectToRoute('security_login');
  5301.         }
  5302.         $em $this->getDoctrine()
  5303.                     ->getManager();
  5304.         
  5305.         $produit = new Produit;
  5306.         
  5307.         $user $this->getUser();
  5308.         $userBoutique $em->getRepository(UserBoutique::class)
  5309.                         ->findOneBy(
  5310.                             array(
  5311.                             'user' => $user->getId(),
  5312.                             'boutique' => $boutique->getId()
  5313.                             )
  5314.                         );
  5315.         $form $this->createForm(ProduitType::class, $produit, array('boutique' => $boutique->getId()));
  5316.         
  5317.         $ok_soumission '';
  5318.         $error '';
  5319.         
  5320.         if($request->getMethod() == 'POST'){
  5321.             
  5322.                $form->handleRequest($request);
  5323.                if($form->isValid()){
  5324.                  $em->persist($produit);
  5325.                    $em->flush();
  5326.                  
  5327.                    //Prix
  5328.                    $prix = (float)$_POST['prix'];
  5329.                    $produitP = new PrixProduit;
  5330.                    $produitP->setValeur($prix);
  5331.                    $produitP->setBoutique($boutique);
  5332.                    $produit->addPrix($produitP);
  5333.                    $produit->setPrixActuel($produitP);
  5334.                    $produit->setBoutique($boutique);
  5335.                   $em->persist($produitP);
  5336.                   
  5337.                   $em->flush();
  5338.                 
  5339.                 $ok_soumission =" Votre message a été pris en compte";
  5340.                     
  5341.                 unset($produit);
  5342.                 unset($form);
  5343.                 $produit = new Produit;
  5344.                 $form $this->createForm(ProduitType::class, $produit, array('boutique' => $boutique->getId()));
  5345.                     
  5346.                 } else {
  5347.                     $error =" Veillez corrigez vos erreurs";
  5348.                 }
  5349.         }
  5350.     
  5351.         return $this->render('admin/nouveau_produit.html.twig', [
  5352.            'boutique' => $boutique,
  5353.            'form' => $form->createView(),
  5354.            'userBoutique' => $userBoutique
  5355.         ]);
  5356.     }
  5357.     
  5358.     /**
  5359.      * @Route("/{slug}/product/edit/{id}", name="admin.edit_product")
  5360.      * @return \Symfony\Component\HttpFoundation\Response
  5361.     */
  5362.     public function edtProductAction(Request $request$slug$id)
  5363.     {
  5364.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  5365.            return $this->redirectToRoute('security_login');
  5366.         }
  5367.         $em $this->getDoctrine()
  5368.                     ->getManager();
  5369.         
  5370.         $boutique $em->getRepository(Boutique::class)
  5371.                         ->findOneBySlug($slug);
  5372.         
  5373.         $produit $em->getRepository(Produit::class)
  5374.                         ->findOneBy(
  5375.                             array(
  5376.                             'boutique' => $boutique->getId(),
  5377.                             'id' => $id
  5378.                             )
  5379.                         );
  5380.         
  5381.         $user $this->getUser();
  5382.         $userBoutique $em->getRepository(UserBoutique::class)
  5383.                         ->findOneBy(
  5384.                             array(
  5385.                             'user' => $user->getId(),
  5386.                             'boutique' => $boutique->getId()
  5387.                             )
  5388.                         );
  5389.         $form $this->createForm(ProduitEditType::class, $produit, array('boutique' => $boutique->getId()));
  5390.         
  5391.         $ok_soumission '';
  5392.         $error '';
  5393.         
  5394.         if($request->getMethod() == 'POST'){
  5395.             
  5396.                $form->handleRequest($request);
  5397.                if($form->isValid()){
  5398.                    //Prix
  5399.                     $prix = (float)$_POST['prix'];
  5400.                     if($prix && $produit->getPrixActuel()->getValeur() != $prix){
  5401.                         $produit->getPrixActuel()->setValeur($prix);
  5402.                         $produitP = new PrixProduit;
  5403.                        $produitP->setValeur($prix);
  5404.                        $produit->addPrix($produitP);
  5405.                        $produit->setPrixActuel($produitP);
  5406.                        $produit->setBoutique($boutique);
  5407.                       $em->persist($produitP);
  5408.                         
  5409.                     }
  5410.                     $em->flush();
  5411.                     $ok_soumission =" Votre message a été pris en compte";
  5412.                 } else {
  5413.                     $error =" Veillez corrigez vos erreurs";
  5414.                 }
  5415.         }
  5416.     
  5417.         return $this->render('admin/edit_product.html.twig', [
  5418.            'boutique' => $boutique,
  5419.            'form' => $form->createView(),
  5420.            'produit' => $produit,
  5421.            'userBoutique' => $userBoutique
  5422.         ]);
  5423.     }
  5424.     
  5425.     //Produit/Service
  5426.     /**
  5427.      * @Route("/{slug}/delete-product/{id}", name="admin.delete_product")
  5428.      * @return \Symfony\Component\HttpFoundation\Response
  5429.      */
  5430.     public function deleteProductAction(Request $request,  $slug$id)
  5431.     { 
  5432.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  5433.            return $this->redirectToRoute('security_login');
  5434.         }
  5435.         $em $this->getDoctrine()
  5436.                     ->getManager();
  5437.         $boutique $em->getRepository(Boutique::class)
  5438.                         ->findOneBySlug($slug);
  5439.         
  5440.         $product $em->getRepository(Produit::class)
  5441.                         ->findOneBy(
  5442.                         array(
  5443.                             'boutique' => $boutique->getId(),
  5444.                             'id' => $id
  5445.                         )
  5446.                         );
  5447.         if(null !== $product){
  5448.             
  5449.             $product->setEstSupprime(true);
  5450.             $em->flush();
  5451.         }
  5452.         return $this->redirectToRoute('admin.list_product', array('slug' => $boutique->getSlug()));
  5453.     
  5454.     }
  5455.     
  5456.     /**
  5457.      * @Route("/{slug}/product-category/list", name="admin.category_product")
  5458.      * @return \Symfony\Component\HttpFoundation\Response
  5459.     */
  5460.     public function listeCategoryProductAction(Request $requestBoutique $boutique)
  5461.     {
  5462.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  5463.            return $this->redirectToRoute('security_login');
  5464.         }
  5465.         $em $this->getDoctrine()
  5466.                     ->getManager();
  5467.         
  5468.         $categories $em->getRepository(CategorieProduit::class)
  5469.                         ->findByBoutique($boutique);
  5470.         $user $this->getUser();
  5471.         $userBoutique $em->getRepository(UserBoutique::class)
  5472.                         ->findOneBy(
  5473.                             array(
  5474.                             'user' => $user->getId(),
  5475.                             'boutique' => $boutique->getId()
  5476.                             )
  5477.                         );
  5478.         return $this->render('admin/category_product.html.twig', [
  5479.            'categories' => $categories,
  5480.            'boutique' => $boutique,
  5481.            'userBoutique' => $userBoutique
  5482.         ]);
  5483.     }
  5484.     
  5485.     //Produit/Service
  5486.     /**
  5487.      * @Route("/{slug}/new-product-category", name="admin.new_product_category")
  5488.      * @return \Symfony\Component\HttpFoundation\Response
  5489.      */
  5490.     public function newProductCategoryAction(Request $requestBoutique $boutique)
  5491.     {
  5492.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  5493.            return $this->redirectToRoute('security_login');
  5494.         }      
  5495.         $em $this->getDoctrine()
  5496.                     ->getManager();
  5497.         
  5498.         $categorie = new CategorieProduit;
  5499.         $form $this->createForm(CategorieProduitType::class, $categorie);
  5500.         
  5501.         $ok_soumission '';
  5502.         $error '';
  5503.         $user $this->getUser();
  5504.         $userBoutique $em->getRepository(UserBoutique::class)
  5505.                         ->findOneBy(
  5506.                             array(
  5507.                             'user' => $user->getId(),
  5508.                             'boutique' => $boutique->getId()
  5509.                             )
  5510.                         );
  5511.         if($request->getMethod() == 'POST'){
  5512.             
  5513.                $form->handleRequest($request);
  5514.                if($form->isValid()){
  5515.                    $categorie->setBoutique($boutique);
  5516.                   $em->persist($categorie);
  5517.                   $em->flush();
  5518.         
  5519.                 $ok_soumission =" Votre message a été pris en compte";
  5520.                     
  5521.                 unset($categorie);
  5522.                 unset($form);
  5523.                 $categorie = new CategorieProduit;
  5524.                 
  5525.                 $form $this->createForm(CategorieProduitType::class, $categorie);
  5526.                     
  5527.                 } else {
  5528.                     $error =" Veillez corrigez vos erreurs";
  5529.                 }
  5530.         }
  5531.     
  5532.         return $this->render('admin/new_product_category.html.twig', [
  5533.            'boutique' => $boutique,
  5534.            'form' => $form->createView(),
  5535.            'userBoutique' => $userBoutique
  5536.         ]);
  5537.     }
  5538.     
  5539.     
  5540.     //Produit/Service
  5541.     /**
  5542.      * @Route("/{slug}/edit-product-category/{id}", name="admin.edit_product_category")
  5543.      * @return \Symfony\Component\HttpFoundation\Response
  5544.      */
  5545.     public function editProductCategoryAction(Request $request$slug$id)
  5546.     { 
  5547.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  5548.            return $this->redirectToRoute('security_login');
  5549.         }
  5550.         $em $this->getDoctrine()
  5551.                     ->getManager();
  5552.         
  5553.         $user $this->getUser();
  5554.         
  5555.         $categorie $em->getRepository(CategorieProduit::class)
  5556.                         ->findOneById($id);
  5557.         $boutique $em->getRepository(Boutique::class)
  5558.                         ->findOneBySlug($slug);
  5559.         $userBoutique $em->getRepository(UserBoutique::class)
  5560.                         ->findOneBy(
  5561.                             array(
  5562.                             'user' => $user->getId(),
  5563.                             'boutique' => $boutique->getId()
  5564.                             )
  5565.                         );
  5566.         $form $this->createForm(CategorieProduitEditType::class, $categorie);
  5567.         
  5568.         $ok_soumission '';
  5569.         $error '';
  5570.         
  5571.         if($request->getMethod() == 'POST'){
  5572.             
  5573.                $form->handleRequest($request);
  5574.                if($form->isValid()){
  5575.                   $em->flush();
  5576.         
  5577.                 $ok_soumission =" Votre message a été pris en compte";    
  5578.                 } else {
  5579.                     $error =" Veillez corrigez vos erreurs";
  5580.                 }
  5581.         }
  5582.     
  5583.         return $this->render('admin/edit_product_category.html.twig', [
  5584.            'boutique' => $boutique,
  5585.            'categorie' => $categorie,
  5586.            'form' => $form->createView(),
  5587.            'userBoutique' => $userBoutique
  5588.         ]);
  5589.     }
  5590.     
  5591.     //Produit/Service
  5592.     /**
  5593.      * @Route("/{slug}/delete-product-category/{id}", name="admin.delete_product_category")
  5594.      * @return \Symfony\Component\HttpFoundation\Response
  5595.      */
  5596.     public function deleteProductCategoryAction(Request $request,  $slug$id)
  5597.     { 
  5598.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  5599.            return $this->redirectToRoute('security_login');
  5600.         }
  5601.         $em $this->getDoctrine()
  5602.                     ->getManager();
  5603.         $boutique $em->getRepository(Boutique::class)
  5604.                         ->findOneBySlug($slug);
  5605.                         
  5606.         $categorie $em->getRepository(CategorieProduit::class)
  5607.                         ->findOneBy(
  5608.                         array(
  5609.                             'boutique' => $boutique->getId(),
  5610.                             'id' => $id
  5611.                         )
  5612.                         );
  5613.         if(null !== $categorie){
  5614.             $em->remove($categorie);
  5615.             $em->flush();
  5616.         }
  5617.         return $this->redirectToRoute('admin.category_product', array('slug' => $boutique->getSlug()));
  5618.         
  5619.         
  5620.     }
  5621.     /**
  5622.      * @Route("/{slug}/tax/list", name="admin.list_tax")
  5623.      * @return \Symfony\Component\HttpFoundation\Response
  5624.      */
  5625.     public function listTaxAction(Request $requestBoutique $boutique)
  5626.     {    
  5627.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  5628.            return $this->redirectToRoute('security_login');
  5629.         }
  5630.         $em $this->getDoctrine()
  5631.                     ->getManager();
  5632.         
  5633.         $taxes $em->getRepository(TVA::class)
  5634.                         ->findByBoutique($boutique);
  5635.         $user $this->getUser();
  5636.         $userBoutique $em->getRepository(UserBoutique::class)
  5637.                         ->findOneBy(
  5638.                             array(
  5639.                             'user' => $user->getId(),
  5640.                             'boutique' => $boutique->getId()
  5641.                             )
  5642.                         );
  5643.         return $this->render('admin/liste_tva.html.twig', [
  5644.            'boutique' => $boutique,
  5645.            'taxes' => $taxes,
  5646.            'userBoutique' => $userBoutique
  5647.         ]);
  5648.     }
  5649.     
  5650.     /**
  5651.      * @Route("/{slug}/new-tax", name="admin.new_tax")
  5652.      * @return \Symfony\Component\HttpFoundation\Response
  5653.      */
  5654.     public function newTaxAction(Request $requestBoutique $boutique)
  5655.     {
  5656.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  5657.            return $this->redirectToRoute('security_login');
  5658.         }
  5659.         $em $this->getDoctrine()
  5660.                     ->getManager();
  5661.         
  5662.         $tva = new TVA;
  5663.         
  5664.         $user $this->getUser();
  5665.         $userBoutique $em->getRepository(UserBoutique::class)
  5666.                         ->findOneBy(
  5667.                             array(
  5668.                             'user' => $user->getId(),
  5669.                             'boutique' => $boutique->getId()
  5670.                             )
  5671.                         );
  5672.         $form $this->createForm(TVAType::class, $tva);
  5673.         
  5674.         $ok_soumission '';
  5675.         $error '';
  5676.         
  5677.         if($request->getMethod() == 'POST'){
  5678.             
  5679.                $form->handleRequest($request);
  5680.                if($form->isValid()){
  5681.                    $tva->setBoutique($boutique);
  5682.                   $em->persist($tva);
  5683.                   $em->flush();
  5684.         
  5685.                 $ok_soumission =" Votre message a été pris en compte";
  5686.                     
  5687.                 unset($tva);
  5688.                 unset($form);
  5689.                 $tva = new TVA;
  5690.                 
  5691.                 $form $this->createForm(TVAType::class, $tva);
  5692.                     
  5693.                 } else {
  5694.                     $error =" Veillez corrigez vos erreurs";
  5695.                 }
  5696.         }
  5697.     
  5698.         return $this->render('admin/nouvelle_tva.html.twig', [
  5699.            'boutique' => $boutique,
  5700.            'form' => $form->createView(),
  5701.            'userBoutique' => $userBoutique
  5702.         ]);
  5703.     }
  5704.     
  5705.     /**
  5706.      * @Route("/{slug}/edit-tax/{tva}", name="admin.edit_tax")
  5707.      * @return \Symfony\Component\HttpFoundation\Response
  5708.      */
  5709.     public function editTaxAction(Request $request$slug$tva)
  5710.     {
  5711.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  5712.            return $this->redirectToRoute('security_login');
  5713.         }
  5714.         $em $this->getDoctrine()
  5715.                     ->getManager();
  5716.         
  5717.         $boutique $em->getRepository(Boutique::class)
  5718.                         ->findOneBySlug($slug);
  5719.                         
  5720.         $tva $em->getRepository(TVA::class)
  5721.                         ->findOneBy(
  5722.                         array(
  5723.                             'boutique' => $boutique->getId(),
  5724.                             'id' => $tva
  5725.                         )
  5726.                         );
  5727.         
  5728.         $user $this->getUser();
  5729.         $userBoutique $em->getRepository(UserBoutique::class)
  5730.                         ->findOneBy(
  5731.                             array(
  5732.                             'user' => $user->getId(),
  5733.                             'boutique' => $boutique->getId()
  5734.                             )
  5735.                         );
  5736.         $userBoutique $em->getRepository(UserBoutique::class)
  5737.                         ->findOneBy(
  5738.                             array(
  5739.                             'user' => $user->getId(),
  5740.                             'boutique' => $boutique->getId()
  5741.                             )
  5742.                         );
  5743.         $form $this->createForm(TVAEditType::class, $tva);
  5744.         
  5745.         $ok_soumission '';
  5746.         $error '';
  5747.         
  5748.         if($request->getMethod() == 'POST'){
  5749.             
  5750.                $form->handleRequest($request);
  5751.                if($form->isValid()){
  5752.                   $em->flush();
  5753.         
  5754.                 $ok_soumission =" Votre message a été pris en compte";
  5755.                     
  5756.                     
  5757.                 } else {
  5758.                     $error =" Veillez corrigez vos erreurs";
  5759.                 }
  5760.         }
  5761.     
  5762.         return $this->render('admin/edit_tax.html.twig', [
  5763.            'boutique' => $boutique,
  5764.            'tva' => $tva,
  5765.            'form' => $form->createView(),
  5766.            'userBoutique' => $userBoutique
  5767.         ]);
  5768.     }
  5769.     
  5770.     /**
  5771.      * @Route("/{slug}/delete-tax/{id}", name="admin.delete_tax")
  5772.      * @return \Symfony\Component\HttpFoundation\Response
  5773.      */
  5774.     public function deleteTaxAction(Request $request$slugTVA $tva)
  5775.     {
  5776.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  5777.            return $this->redirectToRoute('security_login');
  5778.         }
  5779.         $em $this->getDoctrine()
  5780.                     ->getManager();
  5781.         $boutique $em->getRepository(Boutique::class)
  5782.                         ->findOneBySlug($slug);
  5783.         
  5784.         $tva $em->getRepository(TVA::class)
  5785.                         ->findOneBy(
  5786.                         array(
  5787.                             'boutique' => $boutique->getId(),
  5788.                             'id' => $tva
  5789.                         )
  5790.                         );
  5791.         if(null !== $tva){
  5792.             $em->remove($tva);
  5793.             $em->flush();
  5794.         }
  5795.         return $this->redirectToRoute('admin.list_tax', array('slug' => $boutique->getSlug()));
  5796.     }
  5797.     
  5798.     /**
  5799.      * @Route("/{slug}/payment-method/list", name="admin.payment_methods")
  5800.      * @return \Symfony\Component\HttpFoundation\Response
  5801.      */
  5802.     public function paymentMethodsAction(Request $requestBoutique $boutique)
  5803.     {
  5804.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  5805.            return $this->redirectToRoute('security_login');
  5806.         }
  5807.         $em $this->getDoctrine()
  5808.                     ->getManager();
  5809.         
  5810.         $paymentMethods $em->getRepository(PaymentMethod::class)
  5811.                         ->findByBoutique($boutique);
  5812.         $user $this->getUser();
  5813.         $userBoutique $em->getRepository(UserBoutique::class)
  5814.                         ->findOneBy(
  5815.                             array(
  5816.                             'user' => $user->getId(),
  5817.                             'boutique' => $boutique->getId()
  5818.                             )
  5819.                         );
  5820.         return $this->render('admin/payment_methods.html.twig', [
  5821.            'boutique' => $boutique,
  5822.            'paymentMethods' => $paymentMethods,
  5823.            'userBoutique' => $userBoutique
  5824.         ]);
  5825.     }
  5826.     
  5827.     /**
  5828.      * @Route("/{slug}/payment-method/new", name="admin.new_payment_method")
  5829.      * @return \Symfony\Component\HttpFoundation\Response
  5830.      */
  5831.     public function newPaymentMethodAction(Request $requestBoutique $boutique)
  5832.     {
  5833.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  5834.            return $this->redirectToRoute('security_login');
  5835.         }
  5836.         $em $this->getDoctrine()
  5837.                     ->getManager();
  5838.         
  5839.         $paymentMethod = new PaymentMethod;
  5840.         
  5841.         $user $this->getUser();
  5842.         $userBoutique $em->getRepository(UserBoutique::class)
  5843.                         ->findOneBy(
  5844.                             array(
  5845.                             'user' => $user->getId(),
  5846.                             'boutique' => $boutique->getId()
  5847.                             )
  5848.                         );
  5849.         $form $this->createForm(PaymentMethodType::class, $paymentMethod);
  5850.         
  5851.         $ok_soumission '';
  5852.         $error '';
  5853.         
  5854.         if($request->getMethod() == 'POST'){
  5855.             
  5856.                $form->handleRequest($request);
  5857.                if($form->isValid()){
  5858.                    $paymentMethod->setBoutique($boutique);
  5859.                   $em->persist($paymentMethod);
  5860.                   $em->flush();
  5861.         
  5862.                 $ok_soumission =" Votre message a été pris en compte";
  5863.                     
  5864.                 $paymentMethod = new PaymentMethod;
  5865.                 
  5866.                 $form $this->createForm(PaymentMethodType::class, $paymentMethod);
  5867.                     
  5868.                 } else {
  5869.                     $error =" Veillez corrigez vos erreurs";
  5870.                 }
  5871.         }
  5872.     
  5873.         return $this->render('admin/new_payment_method.html.twig', [
  5874.            'boutique' => $boutique,
  5875.            'form' => $form->createView(),
  5876.            'userBoutique' => $userBoutique
  5877.         ]);
  5878.     }
  5879.     
  5880.     /**
  5881.      * @Route("/{slug}/payment-method/edit/{paymentMethod}", name="admin.edit_payment_method")
  5882.      * @return \Symfony\Component\HttpFoundation\Response
  5883.      */
  5884.     public function editPaymentMethodAction(Request $request,  $slug$paymentMethod)
  5885.     {
  5886.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  5887.            return $this->redirectToRoute('security_login');
  5888.         }
  5889.         $em $this->getDoctrine()
  5890.                     ->getManager();
  5891.         
  5892.         $boutique $em->getRepository(Boutique::class)
  5893.                     ->findOneBySlug($slug);
  5894.         $user $this->getUser();
  5895.         $userBoutique $em->getRepository(UserBoutique::class)
  5896.                         ->findOneBy(
  5897.                             array(
  5898.                             'user' => $user->getId(),
  5899.                             'boutique' => $boutique->getId()
  5900.                             )
  5901.                         );
  5902.         $paymentMethod $em->getRepository(PaymentMethod::class)
  5903.                     ->findOneBy(
  5904.                         array(
  5905.                             'boutique' => $boutique->getId(),
  5906.                             'id' => $paymentMethod
  5907.                         )
  5908.                     );
  5909.         
  5910.         $form $this->createForm(PaymentMethodEditType::class, $paymentMethod);
  5911.         
  5912.         $ok_soumission '';
  5913.         $error '';
  5914.         
  5915.         if($request->getMethod() == 'POST'){
  5916.             
  5917.                $form->handleRequest($request);
  5918.                if($form->isValid()){
  5919.                   $em->flush();
  5920.         
  5921.                 $ok_soumission =" Votre message a été pris en compte";
  5922.                     
  5923.                     
  5924.                 } else {
  5925.                     $error =" Veillez corrigez vos erreurs";
  5926.                 }
  5927.         }
  5928.     
  5929.         return $this->render('admin/edit_payment_method.html.twig', [
  5930.            'boutique' => $boutique,
  5931.            'paymentMethod' => $paymentMethod,
  5932.            'form' => $form->createView(),
  5933.            'userBoutique' => $userBoutique
  5934.         ]);
  5935.     }
  5936.     
  5937.     /**
  5938.      * @Route("/{slug}/payment-method/delete/{id}", name="admin.delete_payment_method")
  5939.      * @return \Symfony\Component\HttpFoundation\Response
  5940.      */
  5941.     public function deletePaymentMethodAction(Request $request$slug$id)
  5942.     {
  5943.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  5944.            return $this->redirectToRoute('security_login');
  5945.         }
  5946.         $em $this->getDoctrine()
  5947.                     ->getManager();
  5948.         $boutique $em->getRepository(Boutique::class)
  5949.                         ->findOneBySlug($slug);
  5950.                         
  5951.         $paymentMethod $em->getRepository(PaymentMethod::class)
  5952.                         ->findOneBy(
  5953.                         array(
  5954.                             'boutique' => $boutique->getId(),
  5955.                             'id' => $id
  5956.                         )
  5957.                         );
  5958.         if(null !== $paymentMethod){
  5959.             $em->remove($paymentMethod);
  5960.             $em->flush();
  5961.         }
  5962.         return $this->redirectToRoute('admin.payment_methods', array('slug' => $boutique->getSlug()));
  5963.     }
  5964.     
  5965.     /**
  5966.      * @Route("/{slug}/expensives/list", name="admin.expensives")
  5967.      * @return \Symfony\Component\HttpFoundation\Response
  5968.      */
  5969.     public function expensivesAction(Request $requestBoutique $boutique)
  5970.     {
  5971.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  5972.            return $this->redirectToRoute('security_login');
  5973.         }
  5974.         $em $this->getDoctrine()
  5975.                     ->getManager();
  5976.         
  5977.         $intervalleDeDate  $this->intervalleSemaine(date('Y-m-d'));
  5978.         $dateDebut = new \DateTime($intervalleDeDate['debut']);
  5979.         $dateFin = new \DateTime($intervalleDeDate['fin']);
  5980.         
  5981.         $intervalleMois $this->intervalleMois(date('Y-m-d'));
  5982.         $startMonth $intervalleMois['debut'];
  5983.         $endMonth $intervalleMois['fin'];
  5984.         
  5985.         $expensives  $em->getRepository(Expensive::class)
  5986.                         ->depenseParDate($boutique->getId(), $dateDebut$dateFin);
  5987.         
  5988.         $startYear date('Y-01-01');
  5989.         $endYear date('Y-12-31');
  5990.         $user $this->getUser();
  5991.         $userBoutique $em->getRepository(UserBoutique::class)
  5992.                         ->findOneBy(
  5993.                             array(
  5994.                             'user' => $user->getId(),
  5995.                             'boutique' => $boutique->getId()
  5996.                             )
  5997.                         );
  5998.         if('POST' == $request->getMethod()){
  5999.             $dateDebut $_POST['dateDebut'];
  6000.             $dateFin $_POST['dateFin'];
  6001.             
  6002.             $dateDebut = new \DateTime($dateDebut);
  6003.             $dateFin = new \DateTime($dateFin);
  6004.             
  6005.             $expensives $em->getRepository(Expensive::class)
  6006.                         ->depenseParDate($boutique->getId(), $dateDebut$dateFin);
  6007.             
  6008.             
  6009.             return $this->render('admin/expensives_table_content.html.twig', [
  6010.                'boutique' => $boutique,
  6011.                'expensives' => $expensives
  6012.             ]);
  6013.         }
  6014.         
  6015.             
  6016.         return $this->render('admin/expensives.html.twig', [
  6017.            'boutique' => $boutique,
  6018.            'expensives' => $expensives,
  6019.            'userBoutique' => $userBoutique,
  6020.            'intervalleDeDate' => $intervalleDeDate,
  6021.            'dateDebut' => $dateDebut,
  6022.            'dateFin' => $dateFin,
  6023.            'startMonth' => $startMonth,
  6024.            'intervalleMois' => $intervalleMois,
  6025.            'endMonth' => $endMonth,
  6026.            'startYear' => $startYear,
  6027.            'endYear' => $endYear
  6028.            
  6029.         ]);
  6030.     }
  6031.     
  6032.     /**
  6033.      * @Route("/{slug}/expensives/new", name="admin.new_expensive")
  6034.      * @return \Symfony\Component\HttpFoundation\Response
  6035.      */
  6036.     public function newExpensiveAction(Request $requestBoutique $boutique)
  6037.     {
  6038.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  6039.            return $this->redirectToRoute('security_login');
  6040.         }
  6041.         $em $this->getDoctrine()
  6042.                     ->getManager();
  6043.         
  6044.         $expensive = new Expensive;
  6045.         
  6046.         $user $this->getUser();
  6047.         $userBoutique $em->getRepository(UserBoutique::class)
  6048.                         ->findOneBy(
  6049.                             array(
  6050.                             'user' => $user->getId(),
  6051.                             'boutique' => $boutique->getId()
  6052.                             )
  6053.                         );
  6054.         $form $this->createForm(ExpensiveType::class, $expensive, array('boutique' => $boutique->getId()));
  6055.         
  6056.         $ok_soumission '';
  6057.         $error '';
  6058.         $laDate '';
  6059.         if($request->getMethod() == 'POST'){
  6060.             
  6061.                $form->handleRequest($request);
  6062.                if($form->isValid()){
  6063.                 $data $form->getData();
  6064.                    $expensive->setBoutique($boutique);
  6065.                    $expensive->setCreePar($user);
  6066.                   $em->persist($expensive);
  6067.                   $em->flush();
  6068.         
  6069.                 $ok_soumission =" Votre message a été pris en compte";
  6070.                     
  6071.                 $moyenDePaiement $request->request->get('moyenDePaiement');
  6072.                 $expensive->setMoyenDePaiement($moyenDePaiement);
  6073.                 if($boutique->getSettings()->isGenererAutomatiquementEcrituresComptabilite()){
  6074.                 $libelle 'Règlement fournisseur';
  6075.                 if($expensive->getTiers() != null){
  6076.                     $libelle $libelle' '$expensive->getTiers()->getNom();
  6077.                 }
  6078.                 $groupeEcritureComptable = new GroupeEcritureComptable;
  6079.                 $groupeEcritureComptable->setBoutique($boutique);
  6080.                 $groupeEcritureComptable->setLibelleEcriture($libelle);
  6081.                 $groupeEcritureComptable->setDebit($data->getMontant());
  6082.                 $groupeEcritureComptable->setCredit($data->getMontant());
  6083.                 $groupeEcritureComptable->setLaDate($data->getLaDate());
  6084.                 $groupeEcritureComptable->setNumeroPiece($data->getPiece());
  6085.                 $groupeEcritureComptable->setAnnee($data->getLaDate()->format('Y'));
  6086.                 $groupeEcritureComptable->setMois($data->getLaDate()->format('m'));
  6087.                 $em->persist($groupeEcritureComptable);
  6088.                 $em->flush();
  6089.                     
  6090.                 //Ecriture comptable
  6091.                 
  6092.                 //$ecritureComptable->setLeJournal($boutique->getSettings()->getJournalDeVente());
  6093.                 if($moyenDePaiement == 'cash' || $moyenDePaiement == 'mobile-money'){
  6094.                     //Debit
  6095.                     
  6096.                     
  6097.                     $groupeEcritureComptable->setLeJournal($boutique->getSettings()->getJournalDeCaisse());
  6098.                     $ecritureComptable = new EcritureComptable;
  6099.                     
  6100.                     $ecritureComptable->setBoutique($boutique);
  6101.                     $ecritureComptable->setGroupeEcritureComptable($groupeEcritureComptable);
  6102.                     
  6103.                     $ecritureComptable->setLeJournal($boutique->getSettings()->getJournalDeCaisse());
  6104.                     $compte $em->getRepository(Compte::class)
  6105.                                 ->findOneBy(
  6106.                                     array(
  6107.                                         'boutique' => $boutique,
  6108.                                         'numero' => '5711' //Caisse
  6109.                                     )    
  6110.                                 ); 
  6111.                     $compte->setSolde($compte->getSolde() - $data->getMontant());
  6112.                     $ecritureComptable->setCompte($compte);
  6113.                     $ecritureComptable->setLibelleEcriture($libelle);
  6114.                     $ecritureComptable->setCredit($data->getMontant());
  6115.                     $ecritureComptable->setSolde($compte->getSolde());
  6116.                     $ecritureComptable->setLaDate($data->getLaDate());
  6117.                     $ecritureComptable->setNumeroPiece($data->getPiece());
  6118.                     $ecritureComptable->setAnnee($ecritureComptable->getLaDate()->format('Y'));
  6119.                     $ecritureComptable->setMois($ecritureComptable->getLaDate()->format('m'));
  6120.                     $em->persist($ecritureComptable);
  6121.                     //Debit
  6122.                     $ecritureComptable = new EcritureComptable;
  6123.                     $ecritureComptable->setGroupeEcritureComptable($groupeEcritureComptable);
  6124.                     $ecritureComptable->setBoutique($boutique);
  6125.                     
  6126.                     $ecritureComptable->setLeJournal($boutique->getSettings()->getJournalDeCaisse());
  6127.                     $compte $em->getRepository(Compte::class)
  6128.                                 ->findOneBy(
  6129.                                     array(
  6130.                                         'boutique' => $boutique,
  6131.                                         'numero' => '658'
  6132.                                     )    
  6133.                                 ); //Charge divers
  6134.                     $compte->setSolde($compte->getSolde() + $data->getMontant());
  6135.                     $ecritureComptable->setCompte($compte);
  6136.                     $ecritureComptable->setLibelleEcriture($libelle);
  6137.                     $ecritureComptable->setDebit($data->getMontant());
  6138.                     $ecritureComptable->setSolde($compte->getSolde());
  6139.                     $ecritureComptable->setLaDate($data->getLaDate());
  6140.                     $ecritureComptable->setNumeroPiece($data->getPiece());
  6141.                     $ecritureComptable->setAnnee($ecritureComptable->getLaDate()->format('Y'));
  6142.                     $ecritureComptable->setMois($ecritureComptable->getLaDate()->format('m'));
  6143.                     $em->persist($ecritureComptable);
  6144.                 }else{
  6145.                     $leJournal $boutique->getSettings()->getJournalDeCaisse();
  6146.                     
  6147.                     $groupeEcritureComptable->setLeJournal($leJournal);
  6148.                     $ecritureComptable = new EcritureComptable;
  6149.                     
  6150.                     $ecritureComptable->setBoutique($boutique);
  6151.                     $ecritureComptable->setGroupeEcritureComptable($groupeEcritureComptable);
  6152.                     
  6153.                     $ecritureComptable->setLeJournal($leJournal);
  6154.                     $compte $em->getRepository(Compte::class)
  6155.                                 ->findOneBy(
  6156.                                     array(
  6157.                                         'boutique' => $boutique,
  6158.                                         'numero' => '521'
  6159.                                     )    
  6160.                                 ); //Banque
  6161.                     $compte->setSolde($compte->getSolde() - $data->getMontant());
  6162.                     $ecritureComptable->setCompte($compte);
  6163.                     $ecritureComptable->setLibelleEcriture($libelle);
  6164.                     $ecritureComptable->setCredit($data->getMontant());
  6165.                     $ecritureComptable->setSolde($compte->getSolde());
  6166.                     $ecritureComptable->setLaDate($data->getLaDate());
  6167.                     $ecritureComptable->setNumeroPiece($data->getPiece());
  6168.                     $ecritureComptable->setAnnee($ecritureComptable->getLaDate()->format('Y'));
  6169.                     $ecritureComptable->setMois($ecritureComptable->getLaDate()->format('m'));
  6170.                     $em->persist($ecritureComptable);
  6171.                     //Debit
  6172.                     $ecritureComptable = new EcritureComptable;
  6173.                     $ecritureComptable->setGroupeEcritureComptable($groupeEcritureComptable);
  6174.                     $ecritureComptable->setBoutique($boutique);
  6175.                     
  6176.                     $ecritureComptable->setLeJournal($leJournal);
  6177.                     $compte $em->getRepository(Compte::class)
  6178.                                 ->findOneBy(
  6179.                                     array(
  6180.                                         'boutique' => $boutique,
  6181.                                         'numero' => '658'
  6182.                                     )    
  6183.                                 ); //Charge divers
  6184.                     $compte->setSolde($compte->getSolde() + $data->getMontant());
  6185.                     $ecritureComptable->setCompte($compte);
  6186.                     $ecritureComptable->setLibelleEcriture($libelle);
  6187.                     $ecritureComptable->setDebit($data->getMontant());
  6188.                     $ecritureComptable->setSolde($compte->getSolde());
  6189.                     $ecritureComptable->setLaDate($data->getLaDate());
  6190.                     $ecritureComptable->setNumeroPiece($data->getPiece());
  6191.                     $ecritureComptable->setAnnee($ecritureComptable->getLaDate()->format('Y'));
  6192.                     $ecritureComptable->setMois($ecritureComptable->getLaDate()->format('m'));
  6193.                     $em->persist($ecritureComptable);
  6194.                 }
  6195.                 }
  6196.                 $em->flush();
  6197.                 $expensive = new Expensive;
  6198.                 
  6199.                 $form $this->createForm(ExpensiveType::class, $expensive);
  6200.                     
  6201.                 } else {
  6202.                     $error =" Veillez corrigez vos erreurs";
  6203.                 }
  6204.         }
  6205.     
  6206.         return $this->render('admin/new_expensive.html.twig', [
  6207.            'boutique' => $boutique,
  6208.            'form' => $form->createView(),
  6209.            'userBoutique' => $userBoutique
  6210.         ]);
  6211.     }
  6212.     
  6213.     /**
  6214.      * @Route("/{slug}/expensive/edit/{id}", name="admin.edit_expensive")
  6215.      * @return \Symfony\Component\HttpFoundation\Response
  6216.      */
  6217.     public function editExpensivesAction(Request $request,  $slug$id)
  6218.     {
  6219.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  6220.            return $this->redirectToRoute('security_login');
  6221.         }
  6222.         $em $this->getDoctrine()
  6223.                     ->getManager();
  6224.         
  6225.         $boutique $em->getRepository(Boutique::class)
  6226.                     ->findOneBySlug($slug);
  6227.         $user $this->getUser();
  6228.         $userBoutique $em->getRepository(UserBoutique::class)
  6229.                         ->findOneBy(
  6230.                             array(
  6231.                             'user' => $user->getId(),
  6232.                             'boutique' => $boutique->getId()
  6233.                             )
  6234.                         );
  6235.         $expensive $em->getRepository(Expensive::class)
  6236.                     ->findOneBy(
  6237.                         array(
  6238.                             'boutique' => $boutique->getId(),
  6239.                             'id' => $id
  6240.                         )
  6241.                     );
  6242.         
  6243.         $form $this->createForm(ExpensiveEditType::class, $expensive, array('boutique' => $boutique->getId()));
  6244.         
  6245.         $ok_soumission '';
  6246.         $error '';
  6247.         
  6248.         if($request->getMethod() == 'POST'){
  6249.             
  6250.                $form->handleRequest($request);
  6251.                if($form->isValid()){
  6252.                 $expensive->setModifiePar($user);
  6253.                   $em->flush();
  6254.         
  6255.                 $ok_soumission =" Votre message a été pris en compte";
  6256.                     
  6257.                     
  6258.                 } else {
  6259.                     $error =" Veillez corrigez vos erreurs";
  6260.                 }
  6261.         }
  6262.     
  6263.         return $this->render('admin/edit_expensive.html.twig', [
  6264.            'boutique' => $boutique,
  6265.            'expensive' => $expensive,
  6266.            'form' => $form->createView(),
  6267.            'userBoutique' => $userBoutique
  6268.         ]);
  6269.     }
  6270.     
  6271.     /**
  6272.      * @Route("/{slug}/expensive/delete/{id}", name="admin.delete_expensive")
  6273.      * @return \Symfony\Component\HttpFoundation\Response
  6274.      */
  6275.     public function deleteExpensiveAction(Request $request$slug$id)
  6276.     {
  6277.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  6278.            return $this->redirectToRoute('security_login');
  6279.         }
  6280.         $em $this->getDoctrine()
  6281.                     ->getManager();
  6282.         $boutique $em->getRepository(Boutique::class)
  6283.                         ->findOneBySlug($slug);
  6284.         $user $this->getUser();
  6285.                         
  6286.         $expensive $em->getRepository(Expensive::class)
  6287.                         ->findOneBy(
  6288.                         array(
  6289.                             'boutique' => $boutique->getId(),
  6290.                             'id' => $id
  6291.                         )
  6292.                         );
  6293.         if(null !== $expensive){
  6294.             $expensive->setEstSupprime(true);
  6295.             $expensive->setSupprimePar($user);
  6296.             //$em->remove($expensive);
  6297.             $em->flush();
  6298.         }
  6299.         return $this->redirectToRoute('admin.expensives', array('slug' => $boutique->getSlug()));
  6300.     }
  6301.     /**
  6302.      * @Route("/{slug}/categorie-depense/list", name="admin_categorie_depenses")
  6303.      * @return \Symfony\Component\HttpFoundation\Response
  6304.      */
  6305.     public function categorieDepenseAction(Request $requestBoutique $boutique)
  6306.     {
  6307.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  6308.            return $this->redirectToRoute('security_login');
  6309.         }
  6310.         $em $this->getDoctrine()
  6311.                     ->getManager();
  6312.         
  6313.         $categorieDepenses  $em->getRepository(CategorieDepense::class)
  6314.                         ->findBy(
  6315.                             array(
  6316.                                 'boutique' => $boutique->getId()
  6317.                             )    
  6318.                         );
  6319.         
  6320.         $user $this->getUser();
  6321.         $userBoutique $em->getRepository(UserBoutique::class)
  6322.                         ->findOneBy(
  6323.                             array(
  6324.                             'user' => $user->getId(),
  6325.                             'boutique' => $boutique->getId()
  6326.                             )
  6327.                         );
  6328.         
  6329.         
  6330.             
  6331.         return $this->render('admin/categorie_depenses.html.twig', [
  6332.            'boutique' => $boutique,
  6333.            'userBoutique' => $userBoutique,
  6334.            'categorieDepenses' => $categorieDepenses
  6335.            
  6336.         ]);
  6337.     }
  6338.     
  6339.     /**
  6340.      * @Route("/{slug}/categorie-depense/nouveau", name="admin_nouvelle_categorie_dedepense")
  6341.      * @return \Symfony\Component\HttpFoundation\Response
  6342.      */
  6343.     public function nouvelleCategorieDepenseAction(Request $requestBoutique $boutique)
  6344.     {
  6345.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  6346.            return $this->redirectToRoute('security_login');
  6347.         }
  6348.         $em $this->getDoctrine()
  6349.                     ->getManager();
  6350.         
  6351.         $categorieDepense = new CategorieDepense;
  6352.         
  6353.         $user $this->getUser();
  6354.         $userBoutique $em->getRepository(UserBoutique::class)
  6355.                         ->findOneBy(
  6356.                             array(
  6357.                             'user' => $user->getId(),
  6358.                             'boutique' => $boutique->getId()
  6359.                             )
  6360.                         );
  6361.         $form $this->createForm(CategorieDepenseType::class, $categorieDepense);
  6362.         
  6363.         $ok_soumission '';
  6364.         
  6365.         if($request->getMethod() == 'POST'){
  6366.             
  6367.                $form->handleRequest($request);
  6368.                if($form->isValid()){
  6369.                 $categorieDepense->setBoutique($boutique);
  6370.                   $em->persist($categorieDepense);
  6371.                   $em->flush();
  6372.         
  6373.                 $ok_soumission =" Votre message a été pris en compte";
  6374.                     
  6375.                 $categorieDepense = new CategorieDepense;
  6376.                 
  6377.                 $form $this->createForm(CategorieDepenseType::class, $categorieDepense);
  6378.                     
  6379.                 } else {
  6380.                     $error =" Veillez corrigez vos erreurs";
  6381.                 }
  6382.         }
  6383.     
  6384.         return $this->render('admin/nouvelle_categorie_depense.html.twig', [
  6385.            'boutique' => $boutique,
  6386.            'form' => $form->createView(),
  6387.            'userBoutique' => $userBoutique
  6388.         ]);
  6389.     }
  6390.     
  6391.     /**
  6392.      * @Route("/{slug}/categorie-depense/modifier/{id}", name="admin_modifier_categorie_depense")
  6393.      * @return \Symfony\Component\HttpFoundation\Response
  6394.      */
  6395.     public function modifierCategorieDepenseAction(Request $request,  $slug$id)
  6396.     {
  6397.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  6398.            return $this->redirectToRoute('security_login');
  6399.         }
  6400.         $em $this->getDoctrine()
  6401.                     ->getManager();
  6402.         
  6403.         $boutique $em->getRepository(Boutique::class)
  6404.                     ->findOneBySlug($slug);
  6405.         $user $this->getUser();
  6406.         $userBoutique $em->getRepository(UserBoutique::class)
  6407.                         ->findOneBy(
  6408.                             array(
  6409.                             'user' => $user->getId(),
  6410.                             'boutique' => $boutique->getId()
  6411.                             )
  6412.                         );
  6413.         $categorieDepense $em->getRepository(CategorieDepense::class)
  6414.                     ->findOneBy(
  6415.                         array(
  6416.                             'boutique' => $boutique->getId(),
  6417.                             'id' => $id
  6418.                         )
  6419.                     );
  6420.         
  6421.         $form $this->createForm(CategorieDepenseEditType::class, $categorieDepense);
  6422.         
  6423.         $ok_soumission '';
  6424.         $error '';
  6425.         
  6426.         if($request->getMethod() == 'POST'){
  6427.             
  6428.                $form->handleRequest($request);
  6429.                if($form->isValid()){
  6430.                 
  6431.                   $em->flush();
  6432.         
  6433.                 $ok_soumission =" Votre message a été pris en compte";
  6434.                     
  6435.                     
  6436.                 } else {
  6437.                     $error =" Veillez corrigez vos erreurs";
  6438.                 }
  6439.         }
  6440.     
  6441.         return $this->render('admin/modifier_categorie_depense.html.twig', [
  6442.            'boutique' => $boutique,
  6443.            'categorieDepense' => $categorieDepense,
  6444.            'form' => $form->createView(),
  6445.            'userBoutique' => $userBoutique
  6446.         ]);
  6447.     }
  6448.     
  6449.     /**
  6450.      * @Route("/{slug}/categorie-depense/supprimer/{id}", name="admin_supprimer_categorie_depense")
  6451.      * @return \Symfony\Component\HttpFoundation\Response
  6452.      */
  6453.     public function supprimerCategorieDepenseAction(Request $request$slug$id)
  6454.     {
  6455.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  6456.            return $this->redirectToRoute('security_login');
  6457.         }
  6458.         $em $this->getDoctrine()
  6459.                     ->getManager();
  6460.         $boutique $em->getRepository(Boutique::class)
  6461.                         ->findOneBySlug($slug);
  6462.         $user $this->getUser();
  6463.                         
  6464.         $categorieDepense $em->getRepository(CategorieDepense::class)
  6465.                         ->findOneBy(
  6466.                         array(
  6467.                             'boutique' => $boutique->getId(),
  6468.                             'id' => $id
  6469.                         )
  6470.                         );
  6471.         if(null !== $categorieDepense){
  6472.             
  6473.             $em->remove($categorieDepense);
  6474.             $em->flush();
  6475.         }
  6476.         return $this->redirectToRoute('admin_categorie_depenses', array('slug' => $boutique->getSlug()));
  6477.     }
  6478.     
  6479.     
  6480.     /**
  6481.      * @Route("/{slug}/third/list", name="admin.liste_tiers")
  6482.      * @return \Symfony\Component\HttpFoundation\Response
  6483.      */
  6484.     public function listeTiersAction(Request $requestBoutique $boutique)
  6485.     {
  6486.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  6487.            return $this->redirectToRoute('security_login');
  6488.         }
  6489.         $em $this->getDoctrine()
  6490.                     ->getManager();
  6491.         
  6492.         $tiers $em->getRepository(Tiers::class)
  6493.                     ->findBy(
  6494.                         array(
  6495.                             'boutique' => $boutique->getId(),
  6496.                             'estSupprime' => false
  6497.                             
  6498.                         ),
  6499.                         array(
  6500.                             'nom' => 'ASC'
  6501.                         )
  6502.                         );
  6503.         $user $this->getUser();
  6504.         $userBoutique $em->getRepository(UserBoutique::class)
  6505.                         ->findOneBy(
  6506.                             array(
  6507.                             'user' => $user->getId(),
  6508.                             'boutique' => $boutique->getId()
  6509.                             )
  6510.                         );
  6511.         return $this->render('admin/liste_tiers.html.twig', [
  6512.            'boutique' => $boutique,
  6513.            'tiers' => $tiers,
  6514.            'userBoutique' => $userBoutique
  6515.         ]);
  6516.     }
  6517.     
  6518.     //Service
  6519.     
  6520.     /**
  6521.      * @Route("/{slug}/new-third", name="admin.new_third")
  6522.      * @return \Symfony\Component\HttpFoundation\Response
  6523.      */
  6524.     public function newThirdAction(Request $requestBoutique $boutique)
  6525.     {
  6526.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  6527.            return $this->redirectToRoute('security_login');
  6528.         }
  6529.         $em $this->getDoctrine()
  6530.                     ->getManager();
  6531.         
  6532.         $tiers = new Tiers;
  6533.         $form $this->createForm(TiersType::class, $tiers);
  6534.         
  6535.         $user $this->getUser();
  6536.         $userBoutique $em->getRepository(UserBoutique::class)
  6537.                         ->findOneBy(
  6538.                             array(
  6539.                             'user' => $user->getId(),
  6540.                             'boutique' => $boutique->getId()
  6541.                             )
  6542.                         );
  6543.         
  6544.         $ok_soumission '';
  6545.         $error '';
  6546.         
  6547.         if($request->getMethod() == 'POST'){
  6548.             
  6549.                $form->handleRequest($request);
  6550.                if($form->isValid()){
  6551.                    $tiers->setBoutique($boutique);
  6552.                    $tiers->setCreePar($user);
  6553.                   $em->persist($tiers);
  6554.                   $em->flush();
  6555.         
  6556.                 $ok_soumission =" Votre message a été pris en compte";
  6557.                 $tiers = new Tiers;
  6558.                 
  6559.                 $form $this->createForm(TiersType::class, $tiers);
  6560.                     
  6561.                 } else {
  6562.                     $error =" Veillez corrigez vos erreurs";
  6563.                 }
  6564.         }
  6565.         return $this->render('admin/nouveau_tiers.html.twig', [
  6566.            'boutique' => $boutique,
  6567.            'form' => $form->createView(),
  6568.            'userBoutique' => $userBoutique
  6569.         ]);
  6570.     }
  6571.     /**
  6572.      * @Route("/{slug}/edit-third/{third}", name="admin.edit_third")
  6573.      * @return \Symfony\Component\HttpFoundation\Response
  6574.      */
  6575.     public function editThirdAction(Request $requestBoutique $boutique$third)
  6576.     {
  6577.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  6578.            return $this->redirectToRoute('security_login');
  6579.         }
  6580.         $em $this->getDoctrine()
  6581.                     ->getManager();
  6582.                     
  6583.         $user $this->getUser();
  6584.         $userBoutique $em->getRepository(UserBoutique::class)
  6585.                         ->findOneBy(
  6586.                             array(
  6587.                             'user' => $user->getId(),
  6588.                             'boutique' => $boutique->getId()
  6589.                             )
  6590.                         );
  6591.         $third $em->getRepository(Tiers::class)
  6592.                     ->findOneById($third);
  6593.         $form $this->createForm(TiersEditType::class, $third);
  6594.         
  6595.         $ok_soumission '';
  6596.         $error '';
  6597.         
  6598.         if($request->getMethod() == 'POST'){
  6599.             
  6600.                $form->handleRequest($request);
  6601.                if($form->isValid()){
  6602.                     $third->setModifiePar($user);
  6603.                   $em->flush();
  6604.         
  6605.                 $ok_soumission =" Votre message a été pris en compte";
  6606.                     
  6607.                 } else {
  6608.                     $error =" Veillez corrigez vos erreurs";
  6609.                 }
  6610.         }
  6611.         return $this->render('admin/edit_third.html.twig', [
  6612.            'boutique' => $boutique,
  6613.            'form' => $form->createView(),
  6614.            'third' => $third,
  6615.            'userBoutique' => $userBoutique
  6616.         ]);
  6617.     }
  6618.     /**
  6619.      * @Route("/{slug}/delete-third/{third}", name="admin.delete_third")
  6620.      * @return \Symfony\Component\HttpFoundation\Response
  6621.      */
  6622.     public function deleteThirdAction(Request $requestBoutique $boutique$third)
  6623.     {
  6624.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  6625.            return $this->redirectToRoute('security_login');
  6626.         }
  6627.         $em $this->getDoctrine()
  6628.                     ->getManager();
  6629.         $user $this->getUser();
  6630.         $third $em->getRepository(Tiers::class)
  6631.                     ->findOneById($third);
  6632.                     
  6633.         if(null != $third){
  6634.             $third->setEstSupprime(true);
  6635.             $third->setSupprimePar($user);
  6636.             $em->flush();
  6637.         }
  6638.         
  6639.         return $this->redirectToRoute('admin.liste_tiers', array('slug' => $boutique->getSlug()));
  6640.     }
  6641.     /**
  6642.      * @Route("/{slug}/statistics", name="admin.statistics")
  6643.      * @return \Symfony\Component\HttpFoundation\Response
  6644.      */
  6645.     public function statisticsAction(Request $requestBoutique $boutique)
  6646.     {
  6647.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  6648.            return $this->redirectToRoute('security_login');
  6649.         }
  6650.         $em $this->getDoctrine()
  6651.                     ->getManager();
  6652.         
  6653.         $tiers $em->getRepository(Tiers::class)
  6654.                     ->findByBoutique($boutique);
  6655.         $user $this->getUser();
  6656.         $userBoutique $em->getRepository(UserBoutique::class)
  6657.                         ->findOneBy(
  6658.                             array(
  6659.                             'user' => $user->getId(),
  6660.                             'boutique' => $boutique->getId()
  6661.                             )
  6662.                         );
  6663.                         
  6664.         return $this->render('admin/statistics.html.twig', [
  6665.            'boutique' => $boutique,
  6666.            'tiers' => $tiers,
  6667.            'userBoutique' => $userBoutique
  6668.         ]);
  6669.     }
  6670.     
  6671.     /**
  6672.      * @Route("/{slug}/promotions", name="admin.promotions")
  6673.      * @return \Symfony\Component\HttpFoundation\Response
  6674.      */
  6675.     public function promotionsAction(Request $requestBoutique $boutique)
  6676.     {
  6677.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  6678.            return $this->redirectToRoute('security_login');
  6679.         }
  6680.         $em $this->getDoctrine()
  6681.                     ->getManager();
  6682.         
  6683.         $tiers $em->getRepository(Tiers::class)
  6684.                     ->findByBoutique($boutique);
  6685.         $user $this->getUser();
  6686.         $userBoutique $em->getRepository(UserBoutique::class)
  6687.                         ->findOneBy(
  6688.                             array(
  6689.                             'user' => $user->getId(),
  6690.                             'boutique' => $boutique->getId()
  6691.                             )
  6692.                         );
  6693.         return $this->render('admin/liste_tiers.html.twig', [
  6694.            'boutique' => $boutique,
  6695.            'tiers' => $tiers,
  6696.            'userBoutique' => $userBoutique
  6697.         ]);
  6698.     }
  6699.     
  6700.     /**
  6701.      * @Route("/{slug}/new-payment-patern", name="admin.new_payment_patern")
  6702.      * @return \Symfony\Component\HttpFoundation\Response
  6703.      */
  6704.     public function newPayementPaternMethodAction(Request $requestBoutique $boutique)
  6705.     {
  6706.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  6707.            return $this->redirectToRoute('security_login');
  6708.         }
  6709.         $em $this->getDoctrine()
  6710.                     ->getManager();
  6711.         
  6712.         $modeleReglement = new ModeleReglement;
  6713.         $form $this->createForm(ModeleReglementType::class, $modeleReglement);
  6714.         
  6715.         $ok_soumission '';
  6716.         $error '';
  6717.         $user $this->getUser();
  6718.         $userBoutique $em->getRepository(UserBoutique::class)
  6719.                         ->findOneBy(
  6720.                             array(
  6721.                             'user' => $user->getId(),
  6722.                             'boutique' => $boutique->getId()
  6723.                             )
  6724.                         );
  6725.         if($request->getMethod() == 'POST'){
  6726.             
  6727.                $form->handleRequest($request);
  6728.                if($form->isValid()){
  6729.                    $modeleReglement->setBoutique($boutique);
  6730.                   $em->persist($modeleReglement);
  6731.                   $em->flush();
  6732.         
  6733.                 $ok_soumission =" Votre message a été pris en compte";
  6734.                     
  6735.                 unset($modeleReglement);
  6736.                 unset($form);
  6737.                 $modeleReglement = new ModeleReglement;
  6738.                 
  6739.                 $form $this->createForm(ModeleReglementType::class, $modeleReglement);
  6740.                     
  6741.                 } else {
  6742.                     $error =" Veillez corrigez vos erreurs";
  6743.                 }
  6744.         }
  6745.         return $this->render('admin/nouveau_modele_reglement.html.twig', [
  6746.            'boutique' => $boutique
  6747.            'form' => $form->createView(),
  6748.            'userBoutique' => $userBoutique
  6749.         ]);
  6750.     }
  6751.     
  6752.     /**
  6753.      * @Route("/{slug}/payment-patern/list", name="admin.list_payment_patern")
  6754.      * @return \Symfony\Component\HttpFoundation\Response
  6755.      */
  6756.     public function listeModeleReglementAction(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.         $modeleReglements $em->getRepository(ModeleReglement::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.                         
  6775.         return $this->render('admin/liste_modele_reglement.html.twig', [
  6776.            'boutique' => $boutique,
  6777.            'modeleReglements' => $modeleReglements,
  6778.            'userBoutique' => $userBoutique
  6779.         ]);
  6780.     }
  6781.     
  6782.     /**
  6783.      * @Route("/{slug}/send-document-mail/{id}", name="admin.send_document_mail")
  6784.      * @return \Symfony\Component\HttpFoundation\Response
  6785.      */
  6786.     public function sendDocumentMailAction(Request $request, \Swift_Mailer $mailer$slug$id)
  6787.     {
  6788.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  6789.            return $this->redirectToRoute('security_login');
  6790.         }
  6791.         $em $this->getDoctrine()
  6792.                     ->getManager();
  6793.         $boutique $em->getRepository(Boutique::class)
  6794.                         ->findOneBySlug($slug);
  6795.         $user $this->getUser();
  6796.         $userBoutique $em->getRepository(UserBoutique::class)
  6797.                         ->findOneBy(
  6798.                             array(
  6799.                             'user' => $user->getId(),
  6800.                             'boutique' => $boutique->getId()
  6801.                             )
  6802.                         );        
  6803.         $commande $em->getRepository(Commande::class)
  6804.                     ->findOneBy(
  6805.                         array(
  6806.                         'boutique' => $boutique->getId(),
  6807.                         'id' => $id
  6808.                         )
  6809.                     );
  6810.         
  6811.         $appName $this->getParameter('app_name');
  6812.         if('POST'== $request->getMethod()){
  6813.             $from $_POST['from'];
  6814.             $to $_POST['to_mail'];
  6815.             $subject $_POST['subject'];
  6816.             $contenu $_POST['message'];
  6817.             $sendAttachment = (bool)$_POST['send_attachment'];
  6818.             
  6819.             $message = (new \Swift_Message($subject))
  6820.             ->setFrom([$from  => $appName])
  6821.             ->setTo([$to])
  6822.             ->setBody(
  6823.                 $this->renderView(
  6824.                 'admin/document_email.html.twig',
  6825.                 [
  6826.                 'message' => $contenu
  6827.                 ]
  6828.                 ),
  6829.             'text/html'
  6830.             );
  6831.             if($sendAttachment){
  6832.                 $message->attach(\Swift_Attachment::fromPath($commande->getLienPDF()));
  6833.             }
  6834.             
  6835.             $mailer->send($message);
  6836.             
  6837.         }
  6838.         
  6839.         return $this->render('admin/send_document_mail.html.twig', [
  6840.            'boutique' => $boutique,
  6841.            'commande' => $commande,
  6842.            'userBoutique' => $userBoutique
  6843.         ]);
  6844.     }
  6845.     
  6846.     
  6847.     /**
  6848.      * @Route("/{slug}/nombre-commande-en-retard", name="admin.nombre_commande_en_retard")
  6849.      * @return \Symfony\Component\HttpFoundation\Response
  6850.      */
  6851.     public function nombreCommandeEnRetard(Request $requestBoutique $boutique)
  6852.     {
  6853.         $em $this->getDoctrine()
  6854.                     ->getManager();
  6855.         $nombreCommandeEnRetard $em->getRepository(Commande::class)
  6856.                         -> nombreCommandeEnRetard($boutique->getId());
  6857.                         
  6858.         $nombreCommandeEnRetard count($nombreCommandeEnRetard);
  6859.         $user $this->getUser();
  6860.         $userBoutique $em->getRepository(UserBoutique::class)
  6861.                         ->findOneBy(
  6862.                             array(
  6863.                             'user' => $user->getId(),
  6864.                             'boutique' => $boutique->getId()
  6865.                             )
  6866.                         );
  6867.         return $this->render('admin/nombre_commande_en_retard.html.twig', [
  6868.            'boutique' => $boutique,
  6869.            'nombreCommandeEnRetard' => $nombreCommandeEnRetard,
  6870.            'userBoutique' => $userBoutique
  6871.         ]);
  6872.     }
  6873.     
  6874.     /**
  6875.      * @Route("/{slug}/liste-commande-en-retard", name="admin.liste_commande_en_retard")
  6876.      * @return \Symfony\Component\HttpFoundation\Response
  6877.      */
  6878.     public function listeCommandeEnRetard(Request $requestBoutique $boutique)
  6879.     {
  6880.         $em $this->getDoctrine()
  6881.                     ->getManager();
  6882.         $nombreCommandeEnRetards $em->getRepository(Commande::class)
  6883.                         -> nombreCommandeEnRetard($boutique->getId());
  6884.                         
  6885.         $user $this->getUser();
  6886.         $userBoutique $em->getRepository(UserBoutique::class)
  6887.                         ->findOneBy(
  6888.                             array(
  6889.                             'user' => $user->getId(),
  6890.                             'boutique' => $boutique->getId()
  6891.                             )
  6892.                         );
  6893.         
  6894.         return $this->render('admin/liste_commande_en_retard.html.twig', [
  6895.            'boutique' => $boutique,
  6896.            'nombreCommandeEnRetards' => $nombreCommandeEnRetards,
  6897.            'userBoutique' => $userBoutique
  6898.         ]);
  6899.     }
  6900.     
  6901.     /**
  6902.      * @Route("/{slug}/my-invoices", name="admin.my_invoices")
  6903.      * @return \Symfony\Component\HttpFoundation\Response
  6904.      */
  6905.     public function myInvoicesAction(Request $requestBoutique $boutique)
  6906.     {
  6907.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  6908.            return $this->redirectToRoute('security_login');
  6909.         }
  6910.         $em $this->getDoctrine()
  6911.                     ->getManager();
  6912.                     
  6913.         
  6914.                         
  6915.         $toutesLesValiditeServices $em->getRepository(ValiditeService::class)
  6916.                     ->toutesLesValiditeService($boutique->getId());
  6917.                     
  6918.         
  6919.         $user $this->getUser();
  6920.         $userBoutique $em->getRepository(UserBoutique::class)
  6921.                         ->findOneBy(
  6922.                             array(
  6923.                             'user' => $user->getId(),
  6924.                             'boutique' => $boutique->getId()
  6925.                             )
  6926.                         );
  6927.                         
  6928.         return $this->render('admin/my_invoices.html.twig', [
  6929.            'toutesLesValiditeServices' => $toutesLesValiditeServices,
  6930.            'boutique' => $boutique,
  6931.            'userBoutique' => $userBoutique
  6932.         ]);
  6933.     }
  6934.     
  6935.     /**
  6936.      * @Route("/{slug}/my-tickets/{id}", name="admin.my_tickets")
  6937.      * @return \Symfony\Component\HttpFoundation\Response
  6938.      */
  6939.     public function myTicketsAction(Request $request$slug$id)
  6940.     {
  6941.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  6942.            return $this->redirectToRoute('security_login');
  6943.         }
  6944.         $em $this->getDoctrine()
  6945.                     ->getManager();
  6946.                     
  6947.         $boutique $em->getRepository(Boutique::class)
  6948.                         ->findOneBySlug($slug);
  6949.         $user $this->getUser();
  6950.         $userBoutique $em->getRepository(UserBoutique::class)
  6951.                         ->findOneBy(
  6952.                             array(
  6953.                             'user' => $user->getId(),
  6954.                             'boutique' => $boutique->getId()
  6955.                             )
  6956.                         );
  6957.         
  6958.         $tickets $em->getRepository(Ticket::class)
  6959.                         ->findBy(
  6960.                             array(
  6961.                                 'boutique'=>$boutique->getId(),
  6962.                                 'user' => $user->getId()
  6963.                             )
  6964.                         );
  6965.         
  6966.         return $this->render('admin/my_tickets.html.twig', [
  6967.            'boutique' => $boutique,
  6968.            'tickets'  => $tickets,
  6969.            'userBoutique' => $userBoutique
  6970.         ]);
  6971.     }
  6972.     
  6973.     /**
  6974.      * @Route("/{slug}/new-ticket", name="admin.new_ticket")
  6975.      * @return \Symfony\Component\HttpFoundation\Response
  6976.      */
  6977.     public function newTicketAction(Request $request$slug)
  6978.     {
  6979.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  6980.            return $this->redirectToRoute('security_login');
  6981.         }
  6982.         $em $this->getDoctrine()
  6983.                     ->getManager();
  6984.                     
  6985.         $boutique $em->getRepository(Boutique::class)
  6986.                         ->findOneBySlug($slug);
  6987.         $user $this->getUser();
  6988.         
  6989.         $ticket = new Ticket;
  6990.         
  6991.         $user $this->getUser();
  6992.         $userBoutique $em->getRepository(UserBoutique::class)
  6993.                         ->findOneBy(
  6994.                             array(
  6995.                             'user' => $user->getId(),
  6996.                             'boutique' => $boutique->getId()
  6997.                             )
  6998.                         );
  6999.         $form $this->createForm(TicketType::class, $ticket);
  7000.         
  7001.         $ok_soumission '';
  7002.         $error '';
  7003.         
  7004.         if($request->getMethod() == 'POST'){
  7005.             
  7006.                $form->handleRequest($request);
  7007.                if($form->isValid()){
  7008.                    $ticket->setBoutique($boutique);
  7009.                    $ticket->setUser($user);
  7010.                    
  7011.                   $em->persist($ticket);
  7012.                   $em->flush();
  7013.                   
  7014.                 return $this->redirectToRoute('admin.display_ticket', array('slug' => $boutique->getSlug(), 'id' => $ticket->getId()));
  7015.                 $ok_soumission =" Votre message a été pris en compte";
  7016.                     
  7017.                 $ticket = new Ticket;
  7018.                 
  7019.                 $form $this->createForm(TicketType::class, $ticket);
  7020.                     
  7021.                 } else {
  7022.                     $error =" Veillez corrigez vos erreurs";
  7023.                 }
  7024.         }
  7025.         
  7026.         return $this->render('admin/new_ticket.html.twig', [
  7027.            'boutique' => $boutique,
  7028.            'form' => $form->createView(),
  7029.            'userBoutique' => $userBoutique
  7030.         ]);
  7031.     }
  7032.     
  7033.     /**
  7034.      * @Route("/{slug}/display-ticket/{id}", name="admin.display_ticket")
  7035.      * @return \Symfony\Component\HttpFoundation\Response
  7036.      */
  7037.     public function displayTicketAction(Request $request$slug$id)
  7038.     {
  7039.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  7040.            return $this->redirectToRoute('security_login');
  7041.         }
  7042.         $em $this->getDoctrine()
  7043.                     ->getManager();
  7044.                     
  7045.         $boutique $em->getRepository(Boutique::class)
  7046.                         ->findOneBySlug($slug);
  7047.         $user $this->getUser();
  7048.         $userBoutique $em->getRepository(UserBoutique::class)
  7049.                         ->findOneBy(
  7050.                             array(
  7051.                             'user' => $user->getId(),
  7052.                             'boutique' => $boutique->getId()
  7053.                             )
  7054.                         );
  7055.         
  7056.         $ticket $em->getRepository(Ticket::class)
  7057.                     ->findOneBy(
  7058.                         array(
  7059.                             'boutique' => $boutique->getId(),
  7060.                             'id' => $id
  7061.                         )
  7062.                     );
  7063.         $commentaires $em->getRepository(CommentaireTicket::class)
  7064.                             ->findByTicket($ticket->getId());
  7065.         $commentaireTicket = new CommentaireTicket;
  7066.         
  7067.         $user $this->getUser();
  7068.         $form $this->createForm(CommentaireTicketType::class, $commentaireTicket);
  7069.         
  7070.         $ok_soumission '';
  7071.         $error '';
  7072.         
  7073.         if($request->getMethod() == 'POST'){
  7074.             
  7075.                $form->handleRequest($request);
  7076.                if($form->isValid()){
  7077.                    
  7078.                    $commentaireTicket->setTicket($ticket);
  7079.                    $commentaireTicket->setUser($user);
  7080.                    
  7081.                   $em->persist($commentaireTicket);
  7082.                   $em->flush();
  7083.                 
  7084.                 $commentaires $em->getRepository(CommentaireTicket::class)
  7085.                             ->findByTicket($ticket->getId());
  7086.                 $ok_soumission =" Votre message a été pris en compte";
  7087.                     
  7088.                 $commentaireTicket = new CommentaireTicket;
  7089.                 
  7090.                 $form $this->createForm(CommentaireTicketType::class, $commentaireTicket);
  7091.                     
  7092.                 } else {
  7093.                     $error =" Veillez corrigez vos erreurs";
  7094.                 }
  7095.         }
  7096.         
  7097.         return $this->render('admin/display_ticket.html.twig', [
  7098.            'boutique' => $boutique,
  7099.            'ticket' => $ticket,
  7100.            'form' => $form->createView(),
  7101.            'commentaires' => $commentaires,
  7102.            'userBoutique' => $userBoutique
  7103.         ]);
  7104.     }
  7105.     
  7106.     /**
  7107.      * @Route("/{slug}/close-ticket/{id}", name="admin.close_ticket")
  7108.      * @return \Symfony\Component\HttpFoundation\Response
  7109.      */
  7110.     public function closeTicketAction(Request $request$slug$id)
  7111.     {
  7112.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  7113.            return $this->redirectToRoute('security_login');
  7114.         }
  7115.         $em $this->getDoctrine()
  7116.                     ->getManager();
  7117.                     
  7118.         $boutique $em->getRepository(Boutique::class)
  7119.                         ->findOneBySlug($slug);
  7120.         
  7121.         $ticket $em->getRepository(Ticket::class)
  7122.                     ->findOneBy(
  7123.                         array(
  7124.                             'boutique' => $boutique->getId(),
  7125.                             'id' => $id
  7126.                         )
  7127.                     );
  7128.         
  7129.         if(null !== $ticket){
  7130.             $ticket->setLesCommentairesSontFermes(true);
  7131.             $em->flush();
  7132.         }
  7133.         
  7134.         return $this->redirectToRoute('admin.display_ticket',array('slug'=>$boutique->getSlug(), 'id'=>$ticket->getId()));
  7135.     }
  7136.     
  7137.     
  7138.     /**
  7139.      * @Route("/{slug}/delete-ticket/{id}", name="admin.delete_ticket")
  7140.      * @return \Symfony\Component\HttpFoundation\Response
  7141.      */
  7142.     public function deleteTicketAction(Request $request$slug$id)
  7143.     {
  7144.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  7145.            return $this->redirectToRoute('security_login');
  7146.         }
  7147.         $em $this->getDoctrine()
  7148.                     ->getManager();
  7149.                     
  7150.         $boutique $em->getRepository(Boutique::class)
  7151.                         ->findOneBySlug($slug);
  7152.         $user $this->getUser();
  7153.         
  7154.         
  7155.         $ok_soumission '';
  7156.         $error '';
  7157.         
  7158.         $ticket $em->getRepository(Ticket::class)
  7159.                     ->findOneBy(
  7160.                         array(
  7161.                             'boutique' => $boutique->getId(),
  7162.                             'id' => $id
  7163.                         )
  7164.                     );
  7165.         if(null !== $ticket){
  7166.             $commentaireTickets $em->getRepository(CommentaireTicket::class)
  7167.                                     ->findByTicket($ticket->getId());
  7168.             foreach($commentaireTickets as $commentaireTicket)
  7169.             {
  7170.                 $em->remove($commentaireTicket);
  7171.             }
  7172.             $em->remove($ticket);
  7173.             $em->flush();
  7174.         }
  7175.         
  7176.         return $this->redirectToRoute('admin.my_tickets',array('slug'=>$boutique->getSlug(), 'id'=>$user->getId()));
  7177.     }
  7178.     
  7179.     
  7180.     /**
  7181.      * @Route("/{slug}/delete-commentaire-ticket/{id}", name="admin.delete_commentaire_ticket")
  7182.      * @return \Symfony\Component\HttpFoundation\Response
  7183.      */
  7184.     public function deleteCommentaireTicketAction(Request $request$slug$id)
  7185.     {
  7186.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  7187.            return $this->redirectToRoute('security_login');
  7188.         }
  7189.         $em $this->getDoctrine()
  7190.                     ->getManager();
  7191.                     
  7192.         $boutique $em->getRepository(Boutique::class)
  7193.                         ->findOneBySlug($slug);
  7194.         $user $this->getUser();
  7195.     
  7196.         $commentaireTicket $em->getRepository(CommentaireTicket::class)
  7197.                     ->findOneById($id);
  7198.                     
  7199.         if(null !== $commentaireTicket){
  7200.             
  7201.             $em->remove($commentaireTicket);
  7202.             $em->flush();
  7203.         }
  7204.         
  7205.         return $this->redirectToRoute('admin.my_tickets',array('slug'=>$boutique->getSlug(), 'id'=>$user->getId()));
  7206.     }
  7207.     
  7208.     /**
  7209.      * @Route("/{slug}/liste-produit-lors-commande", name="admin.liste_produit_lors_commande")
  7210.      * @return \Symfony\Component\HttpFoundation\Response
  7211.      */
  7212.     public function listeProduitLorsCommandeAction(Request $requestBoutique $boutique)
  7213.     {
  7214.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  7215.            return $this->redirectToRoute('security_login');
  7216.         }
  7217.         
  7218.         $em $this->getDoctrine()
  7219.                     ->getManager();
  7220.                     
  7221.         $produits $em->getRepository(Produit::class)
  7222.                         ->findByBoutique($boutique->getId());
  7223.         $user $this->getUser();
  7224.         $userBoutique $em->getRepository(UserBoutique::class)
  7225.                         ->findOneBy(
  7226.                             array(
  7227.                             'user' => $user->getId(),
  7228.                             'boutique' => $boutique->getId()
  7229.                             )
  7230.                         );
  7231.         
  7232.         
  7233.         return $this->render('admin/liste_produit_lors_commande.html.twig', [
  7234.            'boutique' => $boutique,
  7235.            'produits' => $produits,
  7236.            'userBoutique' => $userBoutique
  7237.         ]);
  7238.     }
  7239.     
  7240.     /**
  7241.      * @Route("/{slug}/stock-management", name="admin.stock_management")
  7242.      * @return \Symfony\Component\HttpFoundation\Response
  7243.      */
  7244.     public function stockManagementAction(Request $requestBoutique $boutique)
  7245.     {
  7246.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  7247.            return $this->redirectToRoute('security_login');
  7248.         }
  7249.         $em $this->getDoctrine()
  7250.                     ->getManager();
  7251.                     
  7252.         $produits $em->getRepository(Produit::class)
  7253.                         ->findByBoutique($boutique->getId());
  7254.         $user $this->getUser();
  7255.         $intervalleDeDate  $this->intervalleSemaine(date('Y-m-d'));
  7256.         
  7257.         
  7258.         $intervalleMois $this->intervalleMois(date('Y-m-d'));
  7259.         $startMonth $intervalleMois['debut'];
  7260.         $endMonth $intervalleMois['fin'];
  7261.         
  7262.         $dateDebut = new \DateTime($startMonth);
  7263.         $dateFin = new \DateTime($endMonth);
  7264.         $startYear date('Y-01-01');
  7265.         $endYear date('Y-12-31');
  7266.         $user $this->getUser();
  7267.         
  7268.         $userBoutique $em->getRepository(UserBoutique::class)
  7269.                         ->findOneBy(
  7270.                             array(
  7271.                             'user' => $user->getId(),
  7272.                             'boutique' => $boutique->getId()
  7273.                             )
  7274.                         );
  7275.         
  7276.         $stockEntries  $em->getRepository(EntreeDeStock::class)
  7277.                         ->entreeParDateEtType($boutique->getId(),  $dateDebut$dateFin);
  7278.         $produitVendus  $em->getRepository(ProduitCommande::class)
  7279.                         ->produitVenduSurUnePeriode($boutique->getId(), 'invoice'$dateDebut$dateFin);
  7280.         if('POST' == $request->getMethod()){
  7281.             $dateDebut $_POST['dateDebut'];
  7282.             $dateFin $_POST['dateFin'];
  7283.             
  7284.             $dateDebut = new \DateTime($dateDebut);
  7285.             $dateFin = new \DateTime($dateFin);
  7286.             
  7287.             $stockEntries  $em->getRepository(EntreeDeStock::class)
  7288.                         ->entreeParDateEtType($boutique->getId(),  $dateDebut$dateFin);
  7289.             
  7290.             return $this->render('admin/entries_table_content.html.twig', [
  7291.                'boutique' => $boutique,
  7292.                'stockEntries' => $stockEntries
  7293.             ]);
  7294.             
  7295.         }
  7296.         
  7297.         return $this->render('admin/stock_management.html.twig', [
  7298.            'boutique' => $boutique,
  7299.            'produits' => $produits,
  7300.            'userBoutique' => $userBoutique,
  7301.            'dateDebut' => $dateDebut,
  7302.            'dateFin' => $dateFin,
  7303.            'startMonth' => $startMonth,
  7304.            'endMonth' => $endMonth,
  7305.            'startYear' => $startYear,
  7306.            'endYear' => $endYear,
  7307.            'stockEntries' => $stockEntries,
  7308.            'produitVendus' => $produitVendus
  7309.         ]);
  7310.     }
  7311.     
  7312.     /**
  7313.      * @Route("/{slug}/nouvel-inventaire", name="admin_nouvel_inventaire")
  7314.      * @return \Symfony\Component\HttpFoundation\Response
  7315.      */
  7316.     public function nouvelInventaireAction(Request $requestBoutique $boutique)
  7317.     {
  7318.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  7319.            return $this->redirectToRoute('security_login');
  7320.         }
  7321.         $em $this->getDoctrine()
  7322.                     ->getManager();
  7323.                     
  7324.         $produits $em->getRepository(Produit::class)
  7325.                         ->findByBoutique($boutique->getId());
  7326.         $user $this->getUser();
  7327.         $intervalleDeDate  $this->intervalleSemaine(date('Y-m-d'));
  7328.         $dateDebut = new \DateTime($intervalleDeDate['debut']);
  7329.         $dateFin = new \DateTime($intervalleDeDate['fin']);
  7330.         
  7331.         $intervalleMois $this->intervalleMois(date('Y-m-d'));
  7332.         $startMonth $intervalleMois['debut'];
  7333.         $endMonth $intervalleMois['fin'];
  7334.         
  7335.         $startYear date('Y-01-01');
  7336.         $endYear date('Y-12-31');
  7337.         $user $this->getUser();
  7338.         
  7339.         $userBoutique $em->getRepository(UserBoutique::class)
  7340.                         ->findOneBy(
  7341.                             array(
  7342.                             'user' => $user->getId(),
  7343.                             'boutique' => $boutique->getId()
  7344.                             )
  7345.                         );
  7346.         
  7347.         $stockEntries  $em->getRepository(EntreeDeStock::class)
  7348.                         ->entreeParDateEtType($boutique->getId(),  $dateDebut$dateFin);
  7349.         $produits $em->getRepository(Produit::class)
  7350.                         ->findBy(
  7351.                             array(
  7352.                                 'boutique' => $boutique->getId() 
  7353.                             ),
  7354.                             array(
  7355.                                 'nom' => 'ASC'
  7356.                             )
  7357.                         );
  7358.         if('POST' == $request->getMethod()){
  7359.             $dateDebut $_POST['dateDebut'];
  7360.             $dateFin $_POST['dateFin'];
  7361.             
  7362.             $dateDebut = new \DateTime($dateDebut);
  7363.             $dateFin = new \DateTime($dateFin);
  7364.             
  7365.             $stockEntries  $em->getRepository(EntreeDeStock::class)
  7366.                         ->entreeParDateEtType($boutique->getId(),  $dateDebut$dateFin);
  7367.             
  7368.             return $this->render('admin/entries_table_content.html.twig', [
  7369.                'boutique' => $boutique,
  7370.                'stockEntries' => $stockEntries
  7371.             ]);
  7372.             
  7373.         }
  7374.         
  7375.         return $this->render('admin/nouvel_inventaire.html.twig', [
  7376.            'boutique' => $boutique,
  7377.            'produits' => $produits,
  7378.            'userBoutique' => $userBoutique,
  7379.            'dateDebut' => $dateDebut,
  7380.            'dateFin' => $dateFin,
  7381.            'startMonth' => $startMonth,
  7382.            'endMonth' => $endMonth,
  7383.            'startYear' => $startYear,
  7384.            'endYear' => $endYear,
  7385.            'stockEntries' => $stockEntries,
  7386.            'produits' => $produits
  7387.         ]);
  7388.     }
  7389.     /**
  7390.      * @Route("/{slug}/payer-entree-de-stock/{id}", name="admin_payer_entree_de_stock")
  7391.      * @return \Symfony\Component\HttpFoundation\Response
  7392.      */
  7393.     public function payerEntreeDeSTockAction(Request $request,  $slug$id)
  7394.     {
  7395.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  7396.            return $this->redirectToRoute('security_login');
  7397.         }
  7398.         $em $this->getDoctrine()
  7399.                     ->getManager();
  7400.         $entreeDeStock $em->getRepository(EntreeDeStock::class)
  7401.                                 ->findOneById($id);    
  7402.                                 
  7403.         $boutique $em->getRepository(Boutique::class)
  7404.                                 ->findOneBySlug($slug);    
  7405.         
  7406.                     
  7407.         $user $this->getUser();
  7408.         $userBoutique $em->getRepository(UserBoutique::class)
  7409.                         ->findOneBy(
  7410.                             array(
  7411.                             'user' => $user->getId(),
  7412.                             'boutique' => $boutique->getId()
  7413.                             )
  7414.                         );
  7415.         $editMode'new';
  7416.         
  7417.         if($request->getMethod() == 'POST'){
  7418.             
  7419.             $montant = (float)$_POST['montant'];
  7420.             $moyenDePaiement $_POST['moyenDePaiement'];
  7421.             
  7422.             
  7423.             $depense = new Expensive;
  7424.             $depense->setBoutique($boutique);
  7425.             $depense->setMontant($montant);
  7426.         
  7427.             $laDate = new \DateTime('');
  7428.             $depense->setLaDate($laDate);
  7429.         
  7430.             $em->persist($depense);
  7431.             $entreeDeStock->setResteAPayer($entreeDeStock->getResteAPayer() - $montant);
  7432.             $em->flush();
  7433.             
  7434.         }
  7435.     
  7436.         return $this->render('admin/payer_entree_de_stock.html.twig', [
  7437.            'boutique' => $boutique,
  7438.            'userBoutique' => $userBoutique,
  7439.            'editMode' => $editMode,
  7440.            'entreeDeStock' => $entreeDeStock
  7441.         ]);
  7442.     }
  7443.     /**
  7444.      * @Route("/{slug}/new-stock-entry", name="admin.new_stock_entry")
  7445.      * @return \Symfony\Component\HttpFoundation\Response
  7446.      */
  7447.     public function newStockEntryAction(Request $requestBoutique $boutique)
  7448.     {
  7449.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  7450.            return $this->redirectToRoute('security_login');
  7451.         }
  7452.         $em $this->getDoctrine()
  7453.                     ->getManager();
  7454.         $tiers $em->getRepository(Tiers::class)
  7455.                                 ->findByBoutique($boutique);        
  7456.         
  7457.                     
  7458.         $produits $em->getRepository(Produit::class)
  7459.                         ->findByBoutique($boutique->getId());
  7460.         $user $this->getUser();
  7461.         $userBoutique $em->getRepository(UserBoutique::class)
  7462.                         ->findOneBy(
  7463.                             array(
  7464.                             'user' => $user->getId(),
  7465.                             'boutique' => $boutique->getId()
  7466.                             )
  7467.                         );
  7468.         $editMode'new';
  7469.         
  7470.         if($request->getMethod() == 'POST'){
  7471.             
  7472.             $dateCommande $_POST['dateCommande'];
  7473.             $tiers $_POST['tiers'];
  7474.             
  7475.             $tiers $em->getRepository(Tiers::class)
  7476.                         ->findOneById($tiers);
  7477.             $fraisDeTransport =  (float)$_POST['fraisDeTransport'];
  7478.             $autreFrais =  (float)$_POST['autreFrais'];
  7479.             $listeProduits json_decode($_POST['listeProduits']);
  7480.             
  7481.             $entreeDeStock = new EntreeDeStock;
  7482.             $entreeDeStock->setBoutique($boutique);
  7483.         
  7484.             $laDate = new \DateTime($dateCommande);
  7485.             $entreeDeStock->setLaDate($laDate);
  7486.         
  7487.             $em->persist($entreeDeStock);
  7488.             $em->flush();
  7489.             $produitCommandes = array();
  7490.             $sousTotal 0;
  7491.             foreach($listeProduits as $listeProduit){
  7492.                 $listeProduit = (array)$listeProduit;
  7493.                 $idDuProduit $listeProduit['idProduit'];
  7494.                 
  7495.                 $leProduit $em->getRepository(Produit::class)
  7496.                         ->findOneById($idDuProduit);
  7497.                 $leProduit->setStockDisponible($leProduit->getStockDisponible() + $listeProduit['quantite']);
  7498.                 
  7499.                 $produitEntreeDeStock = new ProduitEntreeDeStock;
  7500.                 $produitEntreeDeStock->setProduit($leProduit);
  7501.                 $produitEntreeDeStock->setEntreeDeStock($entreeDeStock);
  7502.                 $produitEntreeDeStock->setQuantite((float)$listeProduit['quantite']);
  7503.                 $produitEntreeDeStock->setPrixDAchat((float)$listeProduit['prixDAchat']);
  7504.                 $produitEntreeDeStock->setSousTotal((float)$listeProduit['sousTotal']);
  7505.                 
  7506.                 $sousTotal += (float)$listeProduit['sousTotal'];
  7507.                 $em->persist($produitEntreeDeStock);
  7508.             }
  7509.             $entreeDeStock->setTotalAchat($sousTotal);
  7510.             $entreeDeStock->setFraisDeTransport($fraisDeTransport);
  7511.             $entreeDeStock->setNetPaye($fraisDeTransport $sousTotal);
  7512.             $entreeDeStock->setResteAPayer($sousTotal);
  7513.             $entreeDeStock->setTiers($tiers);
  7514.             
  7515.             $em->flush();
  7516.             
  7517.         }
  7518.     
  7519.         return $this->render('admin/new_stock_entry.html.twig', [
  7520.            'boutique' => $boutique,
  7521.            'produits' => $produits,
  7522.            'userBoutique' => $userBoutique,
  7523.            'editMode' => $editMode,
  7524.            'tiers' => $tiers
  7525.         ]);
  7526.     }
  7527.     
  7528.     /**
  7529.      * @Route("/{slug}/edit-stock-entry/{id}", name="admin.edit_stock_entry")
  7530.      * @return \Symfony\Component\HttpFoundation\Response
  7531.      */
  7532.     public function editStockEntryAction(Request $request$slug$id)
  7533.     {
  7534.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  7535.            return $this->redirectToRoute('security_login');
  7536.         }      
  7537.         $em $this->getDoctrine()
  7538.                     ->getManager();
  7539.         $boutique  $em->getRepository(Boutique::class)
  7540.                         ->findOneBySlug($slug);
  7541.         $tiers $em->getRepository(Tiers::class)
  7542.                     ->findByBoutique($boutique);
  7543.     
  7544.         $produits  $em->getRepository(Produit::class)
  7545.                         ->findByBoutique($boutique->getId());
  7546.     
  7547.         $entreeDeStock  $em->getRepository(EntreeDeStock::class)
  7548.                         ->findOneBy(
  7549.                             array(
  7550.                                 'boutique' => $boutique->getId(),
  7551.                                 'id' => $id
  7552.                         ));
  7553.         
  7554.         $ancienProduitEntreeDeStocks  $em->getRepository(ProduitEntreeDeStock::class)
  7555.                         ->findBy(
  7556.                             array(
  7557.                                 'entreeDeStock' => $entreeDeStock->getId()
  7558.                         ));
  7559.                         
  7560.         $user $this->getUser();
  7561.         $userBoutique $em->getRepository(UserBoutique::class)
  7562.                         ->findOneBy(
  7563.                             array(
  7564.                             'user' => $user->getId(),
  7565.                             'boutique' => $boutique->getId()
  7566.                             )
  7567.                         );
  7568.     
  7569.         $ok_soumission '';
  7570.         $error '';
  7571.         $editMode 'edit';
  7572.         if($request->getMethod() == 'POST'){
  7573.             $dateCommande $_POST['dateCommande'];
  7574.             $listeProduits json_decode($_POST['listeProduits']);
  7575.             
  7576.             $tiers $_POST['tiers'];
  7577.             
  7578.             $tiers $em->getRepository(Tiers::class)
  7579.                         ->findOneById($tiers);
  7580.             $fraisDeTransport =  (float)$_POST['fraisDeTransport'];
  7581.             $autreFrais =  (float)$_POST['autreFrais'];
  7582.             $em->flush();
  7583.             
  7584.             //Supprimer les ancien ProduitCommande lié 
  7585.             foreach($ancienProduitEntreeDeStocks as $ancienProduitEntreeDeStock){
  7586.                 $em->remove($ancienProduitEntreeDeStock);
  7587.                 
  7588.                 $leProduit $em->getRepository(Produit::class)
  7589.                         ->findOneById($ancienProduitEntreeDeStock->getProduit()->getId());
  7590.                 $leProduit->setStockDisponible($leProduit->getStockDisponible() - $ancienProduitEntreeDeStock->getQuantite());
  7591.             }
  7592.             $em->flush();
  7593.             $produitEntreeDeStocks = array();
  7594.             $sousTotal 0;
  7595.             foreach($listeProduits as $listeProduit){
  7596.                 $listeProduit = (array)$listeProduit;
  7597.                 $idDuProduit $listeProduit['idProduit'];
  7598.                 
  7599.                 $leProduit $em->getRepository(Produit::class)
  7600.                         ->findOneById($idDuProduit);
  7601.                 $leProduit->setStockDisponible($leProduit->getStockDisponible() + $listeProduit['quantite']);
  7602.         
  7603.                 
  7604.                 $produitEntreeDeStock = new ProduitEntreeDeStock;
  7605.                 $produitEntreeDeStock->setProduit($leProduit);
  7606.                 $produitEntreeDeStock->setEntreeDeStock($entreeDeStock);
  7607.                 $produitEntreeDeStock->setQuantite($listeProduit['quantite']);
  7608.                 
  7609.                 $produitEntreeDeStock->setPrixDAchat((float)$listeProduit['prixDAchat']);
  7610.                 $produitEntreeDeStock->setSousTotal((float)$listeProduit['sousTotal']);
  7611.                 
  7612.                 $sousTotal += (float)$listeProduit['sousTotal'];
  7613.                 $em->persist($produitEntreeDeStock);
  7614.             }
  7615.             $entreeDeStock->setTotalAchat($sousTotal);
  7616.             $entreeDeStock->setFraisDeTransport($fraisDeTransport);
  7617.             $entreeDeStock->setNetPaye($fraisDeTransport $sousTotal);
  7618.             $entreeDeStock->setTiers($tiers);
  7619.             $em->flush();
  7620.         }
  7621.     
  7622.         return $this->render('admin/edit_stock_entry.html.twig', [
  7623.            'boutique' => $boutique,
  7624.            'produits' => $produits,
  7625.            'editMode' => $editMode,
  7626.            'entreeDeStock' => $entreeDeStock,
  7627.            'ancienProduitEntreeDeStocks' => $ancienProduitEntreeDeStocks,
  7628.            'userBoutique' => $userBoutique,
  7629.            'tiers' => $tiers
  7630.         ]);
  7631.     }
  7632.     
  7633.     
  7634.     /**
  7635.      * @Route("/{slug}/delete-stock-entry/{id}", name="admin.delete_stock_entry")
  7636.      * @return \Symfony\Component\HttpFoundation\Response
  7637.      */
  7638.     public function deleteStockEntryAction(Request $request,  $slug$id)
  7639.     {
  7640.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  7641.            return $this->redirectToRoute('security_login');
  7642.         }  
  7643.         $em $this->getDoctrine()
  7644.                     ->getManager();
  7645.         
  7646.         $boutique  $em->getRepository(Boutique::class)
  7647.                         ->findOneBySlug($slug);
  7648.         
  7649.         $user $this->getUser();
  7650.         $userBoutique $em->getRepository(UserBoutique::class)
  7651.                         ->findOneBy(
  7652.                             array(
  7653.                             'user' => $user->getId(),
  7654.                             'boutique' => $boutique->getId()
  7655.                             )
  7656.                         );
  7657.         $entreeDeStock  $em->getRepository(EntreeDeStock::class)
  7658.                         ->findOneBy(
  7659.                             array(
  7660.                                 'boutique' => $boutique->getId(),
  7661.                                 'id' => $id
  7662.                             )
  7663.                         );
  7664.         
  7665.         if(null != $entreeDeStock){
  7666.             $produitEntreeDeStocks $em->getRepository(ProduitEntreeDeStock::class)
  7667.                                         ->findBy(
  7668.                                             array(
  7669.                                                 'entreeDeStock' => $entreeDeStock->getId()
  7670.                                             )
  7671.                                         );
  7672.             foreach($produitEntreeDeStocks as $produitEntreeDeStock){
  7673.                 $em->remove($produitEntreeDeStock);
  7674.                 $produit $em->getRepository(Produit::class)
  7675.                                 ->findOneById($produitEntreeDeStock->getProduit()->getId());
  7676.                 $produit->setStockDisponible($produit->getStockDisponible() - $produitEntreeDeStock->getQuantite());
  7677.             }
  7678.             $em->flush();
  7679.             
  7680.             $em->remove($entreeDeStock);
  7681.             $em->flush();
  7682.         }
  7683.         return $this->redirectToRoute('admin.stock_management', array('slug' => $boutique->getSlug()));
  7684.     }
  7685.     /**
  7686.      * @Route("/{slug}/produits-vendus", name="admin_produits_vendus")
  7687.      * @return \Symfony\Component\HttpFoundation\Response
  7688.      */
  7689.     public function produitsVendusActionRequest $requestBoutique $boutique)
  7690.     {
  7691.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  7692.            return $this->redirectToRoute('security_login');
  7693.         }
  7694.         
  7695.         $em $this->getDoctrine()
  7696.                     ->getManager();
  7697.         
  7698.         $userBoutique $em->getRepository(UserBoutique::class)
  7699.                         ->findOneBy(
  7700.                             array(
  7701.                             'user' => $this->getUser()->getId(),
  7702.                             'boutique' => $boutique->getId()
  7703.                             )
  7704.                         );
  7705.         
  7706.         if('POST' == $request->getMethod()){
  7707.             $dateDebut $_POST['dateDebut'];
  7708.             $dateFin $_POST['dateFin'];
  7709.             
  7710.             $dateDebut = new \DateTime($dateDebut);
  7711.             $dateDebut->setTime(00);
  7712.             $dateFin = new \DateTime($dateFin);
  7713.             $dateFin->setTime(2359);
  7714.             
  7715.             $produitsVendus  $em->getRepository(ProduitCommande::class)
  7716.                         ->produitVenduSurUnePeriode($boutique->getId(), 'invoice'$dateDebut$dateFin);
  7717.             
  7718.             
  7719.             return $this->render('admin/produits_vendus.html.twig', [
  7720.                'boutique' => $boutique,
  7721.                'produitsVendus' => $produitsVendus
  7722.             ]);
  7723.             
  7724.         }
  7725.         
  7726.         return $this->render('admin/sortie_de_stock.html.twig', [
  7727.            'boutique' => $boutique,
  7728.            'dateDebut' => $dateDebut,
  7729.            'dateFin' => $dateFin,
  7730.            'userBoutique' => $userBoutique,
  7731.            'typeFacture' => $typeFacture
  7732.         ]);
  7733.     }
  7734.     
  7735.     /**
  7736.      * @Route("/{slug}/import-products", name="admin.import_products")
  7737.      * @return \Symfony\Component\HttpFoundation\Response
  7738.      */
  7739.     public function importProductsAction(Request $requestBoutique $boutique)
  7740.     {
  7741.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  7742.            return $this->redirectToRoute('security_login');
  7743.         }
  7744.         $em $this->getDoctrine()
  7745.                     ->getManager();
  7746.                     
  7747.         $user $this->getUser();
  7748.         
  7749.         $userBoutique $em->getRepository(UserBoutique::class)
  7750.                         ->findOneBy(
  7751.                             array(
  7752.                             'user' => $user->getId(),
  7753.                             'boutique' => $boutique->getId()
  7754.                             )
  7755.                         );
  7756.         
  7757.         $error '';
  7758.         $success '';
  7759.         if('POST' == $request->getMethod()){
  7760.             if(isset($_FILES['fichier']) && $_FILES['fichier']['error'] == 0)
  7761.             {
  7762.                 
  7763.             
  7764.                 $em->flush();
  7765.                 if ($this->gererFichierMultipleImportation($_FILES['fichier'], $boutique)){
  7766.                     $success 'success';
  7767.                 } else{
  7768.                     $error 'error';
  7769.                 }
  7770.                 
  7771.             }
  7772.         }
  7773.         
  7774.         return $this->render('admin/import_products.html.twig', [
  7775.            'boutique' => $boutique,
  7776.            'userBoutique' => $userBoutique,
  7777.            'error' => $error,
  7778.            'success' => $success
  7779.         ]);
  7780.     }
  7781.     
  7782.     /**
  7783.      * @Route("/{slug}/import-customers", name="admin.import_customers")
  7784.      * @return \Symfony\Component\HttpFoundation\Response
  7785.      */
  7786.     public function importCustomersAction(Request $requestBoutique $boutique)
  7787.     {
  7788.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  7789.            return $this->redirectToRoute('security_login');
  7790.         }
  7791.         $em $this->getDoctrine()
  7792.                     ->getManager();
  7793.                     
  7794.         $user $this->getUser();
  7795.         
  7796.         $userBoutique $em->getRepository(UserBoutique::class)
  7797.                         ->findOneBy(
  7798.                             array(
  7799.                             'user' => $user->getId(),
  7800.                             'boutique' => $boutique->getId()
  7801.                             )
  7802.                         );
  7803.         
  7804.         $error '';
  7805.         $success '';
  7806.         if('POST' == $request->getMethod()){
  7807.             if(isset($_FILES['fichier']) && $_FILES['fichier']['error'] == 0)
  7808.             {
  7809.                 
  7810.             
  7811.                 $em->flush();
  7812.                 if ($this->gererFichierMultipleCustomerImportation($_FILES['fichier'], $boutique)){
  7813.                     $success 'success';
  7814.                 } else{
  7815.                     $error 'error';
  7816.                 }
  7817.                 
  7818.             }
  7819.         }
  7820.         
  7821.         return $this->render('admin/import_customers.html.twig', [
  7822.            'boutique' => $boutique,
  7823.            'userBoutique' => $userBoutique,
  7824.            'error' => $error,
  7825.            'success' => $success
  7826.         ]);
  7827.     }
  7828.     
  7829.     /**
  7830.      * @Route("/{slug}/ajout-utilisateur-employe", name="admin_ajout_utilisateur_employe")
  7831.      * @return \Symfony\Component\HttpFoundation\Response
  7832.      */
  7833.     public function ajoutUtilisateurEmployeAction(Request $requestBoutique $boutique)
  7834.     {
  7835.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  7836.            return $this->redirectToRoute('security_login');
  7837.         }
  7838.         $em $this->getDoctrine()
  7839.                     ->getManager();
  7840.                     
  7841.         $droits DroitUtilisateur::getDroits();
  7842.         $userBoutiques $em->getRepository(UserBoutique::class)
  7843.                         ->findByBoutique($boutique->getId());
  7844.         $user $this->getUser();
  7845.         $userBoutique $em->getRepository(UserBoutique::class)
  7846.                         ->findOneBy(
  7847.                             array(
  7848.                             'user' => $user->getId(),
  7849.                             'boutique' => $boutique->getId()
  7850.                             )
  7851.                         );
  7852.         
  7853.         return $this->render('admin/ajout_utilisateur_employe.html.twig', [
  7854.            'boutique' => $boutique,
  7855.            'userBoutiques' => $userBoutiques,
  7856.            'userBoutique' => $userBoutique,
  7857.            'droits' => $droits
  7858.            
  7859.         ]);
  7860.     }
  7861.     /**
  7862.      * @Route("/{slug}/users", name="admin.users")
  7863.      * @return \Symfony\Component\HttpFoundation\Response
  7864.      */
  7865.     public function usersAction(Request $requestBoutique $boutique)
  7866.     {
  7867.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  7868.            return $this->redirectToRoute('security_login');
  7869.         }
  7870.         $em $this->getDoctrine()
  7871.                     ->getManager();
  7872.                     
  7873.         $userBoutiques $em->getRepository(UserBoutique::class)
  7874.                         ->findByBoutique($boutique->getId());
  7875.         $user $this->getUser();
  7876.         $userBoutique $em->getRepository(UserBoutique::class)
  7877.                         ->findOneBy(
  7878.                             array(
  7879.                             'user' => $user->getId(),
  7880.                             'boutique' => $boutique->getId()
  7881.                             )
  7882.                         );
  7883.         
  7884.         return $this->render('admin/users.html.twig', [
  7885.            'boutique' => $boutique,
  7886.            'userBoutiques' => $userBoutiques,
  7887.            'userBoutique' => $userBoutique,
  7888.            
  7889.         ]);
  7890.     }
  7891.     
  7892.     /**
  7893.      * @Route("/{slug}/add-user", name="admin.add_user")
  7894.      * @return \Symfony\Component\HttpFoundation\Response
  7895.      */
  7896.     public function addUserAction(Request $request, \Swift_Mailer $mailerBoutique $boutique)
  7897.     {
  7898.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  7899.            return $this->redirectToRoute('security_login');
  7900.         }
  7901.         $em $this->getDoctrine()
  7902.                     ->getManager();
  7903.                     
  7904.         $userBoutiques $em->getRepository(UserBoutique::class)
  7905.                         ->findByBoutique($boutique->getId());
  7906.         $user $this->getUser();
  7907.         $userBoutique $em->getRepository(UserBoutique::class)
  7908.                         ->findOneBy(
  7909.                             array(
  7910.                             'user' => $user->getId(),
  7911.                             'boutique' => $boutique->getId()
  7912.                             )
  7913.                         );
  7914.         $appName $this->getParameter('app_name');
  7915.         
  7916.     
  7917.         if('POST' == $request->getMethod()){
  7918.             $email $_POST['email'];
  7919.             $role $_POST['role'];
  7920.             
  7921.             $requeteAjoutBoutique  = new RequeteAjoutBoutique;
  7922.             
  7923.             $requeteAjoutBoutique->setRole($role);
  7924.             $requeteAjoutBoutique->setEmail($email);
  7925.             $requeteAjoutBoutique->setBoutique($boutique);
  7926.             
  7927.             $em->persist($requeteAjoutBoutique);
  7928.             $em->flush();
  7929.             
  7930.             //Envoi de mail
  7931.             $message = (new \Swift_Message('Welcome to '.$appName))
  7932.             ->setFrom(['no-reply-myinvoice@assiemail.com'  => $appName])
  7933.             ->setTo([$email])
  7934.             ->setBody(
  7935.                 $this->renderView(
  7936.                 'admin/requete_ajout_boutique_email.html.twig',
  7937.                 [
  7938.                     'appName' => $appName,
  7939.                     'role' => $role,
  7940.                     'boutique' => $boutique
  7941.                 ]
  7942.                 ),
  7943.             'text/html'
  7944.             );
  7945.             
  7946.             $mailer->send($message);
  7947.         }
  7948.         
  7949.         return $this->render('admin/users.html.twig', [
  7950.            'boutique' => $boutique,
  7951.            'userBoutiques' => $userBoutiques,
  7952.            'userBoutique' => $userBoutique
  7953.         ]);
  7954.     }
  7955.     /**
  7956.      * @Route("/{slug}/mon-compte", name="admin_mon_compte")
  7957.      * @return \Symfony\Component\HttpFoundation\Response
  7958.      */
  7959.     public function monCompteAction(Request $requestBoutique $boutique)
  7960.     {
  7961.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  7962.            return $this->redirectToRoute('security_login');
  7963.         }
  7964.         $em $this->getDoctrine()
  7965.                     ->getManager();
  7966.     return $this->render('admin/mon_compte.html.twig', [
  7967.            'boutique' => $boutique,
  7968.            'userBoutiques' => $userBoutiques,
  7969.            'userBoutique' => $userBoutique
  7970.         ]);
  7971.     }
  7972.     /**
  7973.      * @Route("/{slug}/mot-de-passe", name="admin_mot_de_passe")
  7974.      * @return \Symfony\Component\HttpFoundation\Response
  7975.      */
  7976.     public function motDePasseAction(Request $requestUserPasswordHasherInterface $passwordHasherBoutique $boutique)
  7977.     {
  7978.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  7979.            return $this->redirectToRoute('security_login');
  7980.         }
  7981.         $em $this->getDoctrine()
  7982.                     ->getManager();
  7983.         
  7984.         $user $this->getUser();
  7985.         $error '';
  7986.         $ok_submission '';
  7987.         $error_submission '';
  7988.         $actuel $user->getPassword();
  7989.         $hashed '';
  7990.         if('POST' == $request->getMethod())
  7991.         {
  7992.             $motDePasseActuel $request->request->get('motDePasseActuel');
  7993.             $nouveauMotDePasse $request->request->get('nouveauMotDePasse');
  7994.             
  7995.             $repeterMotDePasse $request->request->get('repeterMotDePasse'); 
  7996.             //$user->setPassword('');
  7997.             //$hashed = $passwordHasher->hashPassword($user, $motDePasseActuel);
  7998.             //if(  $hashed == $user->getPassword()){
  7999.                 $user->setPassword('');
  8000.                 $hashedPassword $passwordHasher->hashPassword($user$nouveauMotDePasse);
  8001.                 $user->setPassword($hashedPassword);
  8002.                 $ok_submission 'Mot de passe changé';
  8003.             //}else{
  8004.             //    $error_submission = 'Ancien mot de passe incorrect';
  8005.             //}
  8006.             //Effacer l'ancien mot de passe
  8007.             
  8008.             
  8009.             $em->flush();
  8010.         }
  8011.         $userBoutique $em->getRepository(UserBoutique::class)
  8012.                             ->findOneBy(
  8013.                                 array(
  8014.                                     'user' => $user,
  8015.                                     'boutique' => $boutique
  8016.                                 )
  8017.                             );
  8018.     return $this->render('admin/mot_de_passe.html.twig', [
  8019.            'boutique' => $boutique,
  8020.            'userBoutique' => $userBoutique,
  8021.            'ok_submission' => $ok_submission,
  8022.            'error_submission' => $error_submission,
  8023.            'hashed' => $hashed,
  8024.            'actuel' => $actuel
  8025.         ]);
  8026.     }
  8027.     
  8028.     
  8029.     
  8030.     public function getDomain()
  8031.     {
  8032.         $domaine $_SERVER['HTTP_HOST'];
  8033.         $protocol '';
  8034.         if($domaine == 'localhost' || $domaine == '127.0.0.1'){
  8035.             $domaine $domaine.'/myinvoice-def/public';
  8036.         }
  8037.         if(!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off'){
  8038.             $protocol 'https://';
  8039.         } else{
  8040.             $protocol 'http://';
  8041.         }
  8042.         
  8043.         return $protocol.$domaine;
  8044.     }
  8045.     
  8046.     public function getNumero($type$boutique)
  8047.     {
  8048.         $numero '';
  8049.         $em $this->getDoctrine()
  8050.                     ->getManager();
  8051.         $nombre 0;
  8052.         if($type == 'deposit'){
  8053.             $nombre $em->getRepository(FactureAcompte::class)
  8054.                     ->getNumero($type$boutique->getId());
  8055.         } else{
  8056.             $nombre $em->getRepository(Commande::class)
  8057.                     ->getNumero($type$boutique->getId());
  8058.         
  8059.         }
  8060.         if(empty($nombre)){
  8061.             $nombre ;
  8062.         } else {
  8063.             $nombre = (int)$nombre[0]['nombre'];
  8064.             $nombre++;
  8065.         }
  8066.         
  8067.         
  8068.         
  8069.         switch($type){
  8070.             case 'invoice':
  8071.                 $numero .= $boutique->getSettings()->getLettreDebutFacture();
  8072.             break;
  8073.             
  8074.             case 'deposit':
  8075.                 $numero .= $boutique->getSettings()->getLettreDebutFactureAcompte();
  8076.             break;
  8077.             case 'bill_credit':
  8078.                 $numero .= $boutique->getSettings()->getLettreDebutFactureAvoir();
  8079.             break;
  8080.             
  8081.             case 'proposal':
  8082.                 $numero .= $boutique->getSettings()->getLettreDebutDevis();
  8083.             break;
  8084.         }
  8085.         
  8086.         if($boutique->getSettings()->getIncluAnnee()){
  8087.             $numero .= date('y');
  8088.         }
  8089.         
  8090.         $nombreDeZeroAAjouter strlen((string)$nombre);
  8091.         
  8092.         $nombreDeZeroAAjouter =  $boutique->getSettings()->getNombreDeChiffre() - $nombreDeZeroAAjouter;
  8093.         
  8094.         for($i 0$i $nombreDeZeroAAjouter$i++){
  8095.             $numero .= '0';
  8096.         }
  8097.         
  8098.         $numero .= $nombre;
  8099.         
  8100.         return $numero;
  8101.         
  8102.     }
  8103.     
  8104.     function intervalleMois($datestr)
  8105.     {
  8106.        date_default_timezone_set (date_default_timezone_get());
  8107.         $dt strtotime ($datestr);
  8108.        return array (
  8109.          "debut" => date ('Y-m-d'strtotime ('first day of this month'$dt)),
  8110.          "fin" => date ('Y-m-d'strtotime ('last day of this month'$dt))
  8111.        );
  8112.     }
  8113.     function intervalleSemaine($datestr) {
  8114.        date_default_timezone_set (date_default_timezone_get());
  8115.        $dt strtotime ($datestr);
  8116.        return array (
  8117.          "debut" => date ('N'$dt) == date ('Y-m-d'$dt) : date ('Y-m-d'strtotime ('last monday'$dt)),
  8118.          "fin" => date('N'$dt) == date ('Y-m-d'$dt) : date ('Y-m-d'strtotime ('next sunday'$dt))
  8119.        );
  8120.     }
  8121.     
  8122.     public function gererFichierMultipleImportation($data$boutique)
  8123.     {        
  8124.             $leRetour false;
  8125.             $em $this->getDoctrine()->getManager();
  8126.             
  8127.             $ex pathinfo($data['name'])['extension'];
  8128.             $exA = array('csv');
  8129.             
  8130.             if (in_array(strtolower($ex), $exA)){
  8131.             } else{
  8132.                 throw new \RuntimeException('Désolé, vous n\'avez pas le droit de télécharger ce type de fichier: '.$ex);
  8133.             }
  8134.             
  8135.             $name time();
  8136.             $namePourRepertoire $name;
  8137.             //hydratation des attributs de l'objet
  8138.             $domaine $_SERVER['HTTP_HOST'];
  8139.             $protocol '';
  8140.             if(!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off'){
  8141.                 $protocol 'https://';
  8142.             } else{
  8143.                 $protocol 'http://';
  8144.             }
  8145.             
  8146.             //$url = $protocol.$domaine.'myinvoice-def/uploads/img/'.$name.'.'.$ex;
  8147.             //$url = $protocol.$domaine.'/uploads/img/'.$name.'.'.$ex;
  8148.             $url $boutique->getLogo()->getUploadRootDir().'/'.$name.'.'.$ex;
  8149.             
  8150.             //deplacement (création de l'image original)
  8151.             //$this->file->move($photo->getUploadRootDir().'/original/', $name.'.'.photo->getExtension()));
  8152.             
  8153.             
  8154.             if(!is_dir($boutique->getLogo()->getUploadRootDir()) && !mkdir($boutique->getLogo()->getUploadRootDir(), 0777true))
  8155.             {
  8156.                 throw new \RuntimeException('Impossible de créer le dossier de destination');
  8157.             }
  8158.             
  8159.             if (!move_uploaded_file($data['tmp_name'], $boutique->getLogo()->getUploadRootDir().'/'.$name.'.'.$ex))
  8160.             {
  8161.                 throw new \RuntimeException('Désolé, une erreur s\'est produite.');
  8162.             }
  8163.             
  8164.             $fileToHandle fopen($url'r');
  8165.             $row 1;
  8166.             while (($data fgetcsv($fileToHandle10000",")) !== false) {
  8167.                 $num count($data);
  8168.                 //echo "<p> $num champs à la ligne $row: <br /></p>\n";
  8169.                 $row++;
  8170.                 $categorie $data[0];
  8171.                 $categorieProduit $em->getRepository(CategorieProduit::class)
  8172.                                 ->findOneByNom($categorie);
  8173.                 if(null == $categorieProduit){
  8174.                     $categorieProduit = new CategorieProduit;
  8175.                     $categorieProduit->setNom($categorie);
  8176.                     $em->persist($categorieProduit);
  8177.                     $em->flush();
  8178.                 }
  8179.                 
  8180.                 $ref             $data[1];
  8181.                 $nomProd         $data[2];
  8182.                 $prix            $data[3];
  8183.                 $stockDisponible $data[4];
  8184.                 $stockDAlerte    $data[5];
  8185.                 $stockDeSecurite $data[6];
  8186.                 $stockMinimum    $data[7];
  8187.                 $stockMaximum    $data[8];
  8188.                 $stockOutil      $data[9];
  8189.                 $coutDeStockage  $data[10];
  8190.                 
  8191.                 $produit $em->getRepository(Produit::class)
  8192.                                 ->findOneBy(
  8193.                                     array(
  8194.                                         'reference' => $ref,
  8195.                                         'nom' => $nomProd
  8196.                                     )
  8197.                                 );
  8198.                 if(null == $produit){
  8199.                     $produit = new Produit;
  8200.                     $produit->setCategorieProduit($categorieProduit);
  8201.                     $produit->setReference($ref);
  8202.                     $produit->setNom($nomProd);
  8203.                     
  8204.                     $prixActuel = new PrixProduit;
  8205.                     $prixActuel->setValeur($prix);
  8206.                     $produit->addPrix($prixActuel);
  8207.                     $produit->setPrixActuel($prixActuel);
  8208.                     $produit->setStockDisponible($stockDisponible);
  8209.                     $produit->setStockDAlerte($stockDAlerte);
  8210.                     $produit->setStockDeSecurite($stockDeSecurite);
  8211.                     $produit->setStockMinimum($stockMinimum);
  8212.                     $produit->setStockMaximum($stockMaximum);
  8213.                     $produit->setStockOutil($stockOutil);
  8214.                     $produit->setCoutDeStockage($coutDeStockage);
  8215.                     
  8216.                     $produit->setBoutique($boutique);
  8217.                     $em->persist($produit);
  8218.                     $em->flush();
  8219.                 }
  8220.                 
  8221.                 
  8222.             }
  8223.             $leRetour true;
  8224.             fclose($fileToHandle);
  8225.             
  8226.             //$this->getDoctrine()->getManager()->flush();
  8227.             
  8228.         return $leRetour;
  8229.     }
  8230.     
  8231.     public function gererFichierMultipleCustomerImportation($data$boutique)
  8232.     {        
  8233.             $leRetour false;
  8234.             $em $this->getDoctrine()->getManager();
  8235.             
  8236.             $ex pathinfo($data['name'])['extension'];
  8237.             $exA = array('csv');
  8238.             
  8239.             if (in_array(strtolower($ex), $exA)){
  8240.             } else{
  8241.                 throw new \RuntimeException('Désolé, vous n\'avez pas le droit de télécharger ce type de fichier: '.$ex);
  8242.             }
  8243.             
  8244.             $name time();
  8245.             $namePourRepertoire $name;
  8246.             //hydratation des attributs de l'objet
  8247.             $domaine $_SERVER['HTTP_HOST'];
  8248.             $protocol '';
  8249.             if(!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off'){
  8250.                 $protocol 'https://';
  8251.             } else{
  8252.                 $protocol 'http://';
  8253.             }
  8254.             
  8255.             //$url = $protocol.$domaine.'myinvoice-def/uploads/img/'.$name.'.'.$ex;
  8256.             //$url = $protocol.$domaine.'/uploads/img/'.$name.'.'.$ex;
  8257.             $url $boutique->getLogo()->getUploadRootDir().'/'.$name.'.'.$ex;
  8258.             
  8259.             //deplacement (création de l'image original)
  8260.             //$this->file->move($photo->getUploadRootDir().'/original/', $name.'.'.photo->getExtension()));
  8261.             
  8262.             
  8263.             if(!is_dir($boutique->getLogo()->getUploadRootDir()) && !mkdir($boutique->getLogo()->getUploadRootDir(), 0777true))
  8264.             {
  8265.                 throw new \RuntimeException('Impossible de créer le dossier de destination');
  8266.             }
  8267.             
  8268.             if (!move_uploaded_file($data['tmp_name'], $boutique->getLogo()->getUploadRootDir().'/'.$name.'.'.$ex))
  8269.             {
  8270.                 throw new \RuntimeException('Désolé, une erreur s\'est produite.');
  8271.             }
  8272.             
  8273.             $fileToHandle fopen($url'r');
  8274.             $row 1;
  8275.             while (($data fgetcsv($fileToHandle10000",")) !== false) {
  8276.                 $num count($data);
  8277.                 $row++;
  8278.                 
  8279.                 $nomClient    $data[0];
  8280.                 $adresse      $data[1];
  8281.                 $codePostal   $data[2];
  8282.                 $nomPays      $data[3];
  8283.                 $ville        $data[4];
  8284.                 $email        $data[5];
  8285.                 $telephone    $data[6];
  8286.                 $soumisALaTVA $data[7];
  8287.                 $codeTVA      $data[8];
  8288.                 
  8289.                 $tier $em->getRepository(Tiers::class)
  8290.                                 ->findOneBy(
  8291.                                     array(
  8292.                                     'boutique' => $boutique->getId(),
  8293.                                     'nom' => $nomClient
  8294.                                     )
  8295.                                 );
  8296.                 if(null == $tier){
  8297.                     $tier = new Tiers;
  8298.                     $tier->setNom($nomClient);
  8299.                     $tier->setAdresse($adresse);
  8300.                     $tier->setCodePostal($codePostal);
  8301.                     $tier->setEmail($email);
  8302.                     $tier->setTelephone($telephone);
  8303.                     $tier->setVille($ville);
  8304.                     $tier->setAssujettiALaTVA($soumisALaTVA);
  8305.                     $tier->setCodeTVA($codeTVA);
  8306.                     
  8307.                     $pays $em->getRepository(Pays::class)
  8308.                                 ->findOneBy(
  8309.                                     array(
  8310.                                     'nom' => $nomPays
  8311.                                     )
  8312.                                 );
  8313.                     if (null == $pays){
  8314.                         $pays $em->getRepository(Pays::class)
  8315.                                 ->findOneBy(
  8316.                                     array(
  8317.                                     'nomFr' => $nomPays
  8318.                                     )
  8319.                                 );
  8320.                         if(null == $pays){
  8321.                             $pays = new Pays;
  8322.                             $pays->setNom($nomPays);
  8323.                             $em->persist($pays);
  8324.                             $em->flush();
  8325.                         }
  8326.                     }
  8327.                     
  8328.                     $tier->setPays($pays);
  8329.                     $tier->setBoutique($boutique);
  8330.                     $em->persist($tier);
  8331.                     $em->flush();
  8332.                 }    
  8333.             }
  8334.             $leRetour true;
  8335.             fclose($fileToHandle);
  8336.             
  8337.             //$this->getDoctrine()->getManager()->flush();
  8338.             
  8339.         return $leRetour;
  8340.     }
  8341.     public function getMois()
  8342.     {
  8343.         $mois = array(
  8344.             array(
  8345.                 'index' => 1,
  8346.                 'nom' => 'Janvier'
  8347.             ),
  8348.             array(
  8349.                 'index' => 2,
  8350.                 'nom' => 'Février'
  8351.             ),
  8352.             array(
  8353.                 'index' => 3,
  8354.                 'nom' => 'Mars'
  8355.             ),
  8356.             array(
  8357.                 'index' => 4,
  8358.                 'nom' => 'Avril'
  8359.             ),
  8360.             array(
  8361.                 'index' => 5,
  8362.                 'nom' => 'Mai'
  8363.             ),
  8364.             array(
  8365.                 'index' => 6,
  8366.                 'nom' => 'Juin'
  8367.             ),
  8368.             array(
  8369.                 'index' => 7,
  8370.                 'nom' => 'Juillet'
  8371.             ),
  8372.             array(
  8373.                 'index' => 8,
  8374.                 'nom' => 'Août'
  8375.             ),
  8376.             array(
  8377.                 'index' => 9,
  8378.                 'nom' => 'Septembre'
  8379.             ),
  8380.             array(
  8381.                 'index' => 10,
  8382.                 'nom' => 'Octobre'
  8383.             ),
  8384.             array(
  8385.                 'index' => 11,
  8386.                 'nom' => 'Novembre'
  8387.             ),
  8388.             array(
  8389.                 'index' => 12,
  8390.                 'nom' => 'Décembre'
  8391.             ),
  8392.         );
  8393.         return $mois;
  8394.     }
  8395.     public function getAnnee()
  8396.     {
  8397.         $actuel date('Y');
  8398.         $annees = array();
  8399.         for($i $actuel$i >= 2020$i--){
  8400.             array_push($annees$i);
  8401.         }
  8402.         return $annees;
  8403.     }
  8404. }