src/Controller/AdminController.php line 5448

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