src/Controller/GestionComerciale/ReglementController.php line 1938

Open in your IDE?
  1. <?php
  2. namespace App\Controller\GestionComerciale;
  3. use App\Entity\Clients\Client;
  4. use App\Entity\GestionComerciale\Acompte;
  5. use App\Entity\GestionComerciale\Commande;
  6. use App\Entity\GestionComerciale\ModeReglement;
  7. use App\Entity\GestionComerciale\MouvementCaisse;
  8. use App\Entity\GestionComerciale\TypeMouvementCaisse;
  9. use App\Entity\GestionComerciale\TypeReglement;
  10. use App\Form\GestionComerciale\AcompteType;
  11. use App\Form\GestionComerciale\SupprimerAcompteType;
  12. use App\Form\GestionComerciale\ReglementType;
  13. use App\Library\Datatable\Util\Datatable;
  14. use App\Model\GestionCommerciale\TypeDocumentCommercial;
  15. use App\Security\Voter\EntityVoter;
  16. use App\Service\GestionComerciale\AcompteService;
  17. use App\Service\GestionComerciale\FactureService;
  18. use App\Service\GestionComerciale\MouvementCaisseService;
  19. use App\Service\GestionComerciale\NumerotationDocumentService;
  20. use App\Service\Utilisateur\ColonneTableauService;
  21. use Doctrine\ORM\EntityManagerInterface;
  22. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  23. use Symfony\Component\HttpFoundation\Request;
  24. use Symfony\Component\HttpFoundation\JsonResponse;
  25. use Symfony\Component\HttpFoundation\Response;
  26. use Symfony\Component\Routing\Annotation\Route;
  27. use Symfony\Component\Validator\Validator\ValidatorInterface;
  28. use Symfony\Contracts\Translation\TranslatorInterface;
  29. class ReglementController extends AbstractController
  30. {
  31.     /**
  32.      * @Route("/vente/reglement/client/nouveau/", name="dtc_reglement_client_ajouter")
  33.      */
  34.     public function ajouterClientAction(Request        $requestEntityManagerInterface $emTranslatorInterface $translatorValidatorInterface $validator,
  35.                                         FactureService $serviceFactureNumerotationDocumentService $numerotationServiceAcompteService $acompteService
  36.     ) {
  37.         $parametres  $request->query->all();
  38.         $titre_modal $translator->trans("Nouveau règlement");
  39.         $mode        "reglement";
  40.         $montant     "";
  41.         $factures    = [];
  42.         $get         $request->query->all();
  43.         $page        $request->query->get('page');
  44.         $reglement   = new Acompte();
  45.         $repo_acompte  $em->getRepository(Acompte::class);
  46.         $repo_commande $em->getRepository(Commande::class);
  47.         $type_acompte  $em->getRepository(TypeReglement::class)->find(2);
  48.         $reglement->setTypeReglement($type_acompte);
  49.         $user $this->getUser();
  50.         $reglement->setUtilisateur($user);
  51.         $url $this->generateUrl('dtc_reglement_remise_banque_liste', []);
  52.         if (array_key_exists('client'$parametres) && $parametres["client"] != "") {
  53.             $client $em->getRepository(Client::class)->find($parametres["client"]);
  54.             if (is_object($client)) {
  55.                 $reglement->setClient($client);
  56.                 $url $this->generateUrl('dtc_client_modifier', ["id" => $client->getId()]);
  57.                 if (array_key_exists('mode'$parametres) && $parametres["mode"] == "e") {
  58.                     $titre_modal $translator->trans("Equilibrage");
  59.                     $mode        "equilibrage";
  60.                 } elseif (array_key_exists('mode'$parametres) && $parametres["mode"] == "r") {
  61.                     $titre_modal    $translator->trans("Remboursement");
  62.                     $mode           "remboursement";
  63.                     //$montant = $serviceAcompte->getMontantRembousement($client);
  64.                     $montant $acompteService->getSoldeClient($client);
  65.                     if ($montant 0) {
  66.                         $montant 0;
  67.                     } else {
  68.                         $montant = -$montant;
  69.                     }
  70.                     if ($request->query->get('remboursement') != "") {
  71.                         $montant $request->query->get('remboursement');
  72.                         $avoir   $repo_commande->find($request->query->get('avoir'));
  73.                         $reste_du_avoir $repo_acompte->findOneBy(["avoir" => $avoir]);
  74.                         if (is_object($reste_du_avoir)) {
  75.                             $reste_du_avoir->setRemboursement($reglement);
  76.                             $em->persist($reste_du_avoir);
  77.                         }
  78.                         $reglement->setCommande($avoir);
  79.                         $url $this->generateUrl('dtc_avoir_modifier', ["id" => $request->query->get('avoir')]);
  80.                     }
  81.                 } else {
  82.                     //if($page != "commande") $factures = $repo_commande->getFacturesNonReglees($client);
  83.                     if ($page != "commande") {
  84.                         $factures $repo_commande->getFacturesEtAvoirsNonReglesEtNonLettres($client);
  85.                     }
  86.                 }
  87.                 //$commandes = array(array('id'=>2272, 'reference'=>'ref1'), array('id'=>2, 'reference'=>'ref2'));
  88.             }
  89.         }
  90.         $montant round($montant2);
  91.         $form      $this->createForm(ReglementType::class, $reglement);
  92.         $errors "";
  93.         $form->handleRequest($request);
  94.         if ($form->isSubmitted()) {
  95.             if ($form->isValid()) {
  96.                 $requestform $request->request->all();
  97.                 if (array_key_exists('idReglement'$requestform) && $requestform["idReglement"] != "") {
  98.                     $accompteasupprimerr $repo_acompte->findOneBy(['id' => $requestform['idReglement']]);
  99.                     $em->remove($accompteasupprimerr);
  100.                 }
  101.                 $reglement->setNumTraite($numerotationService->generer($reglement));
  102.                 $em->persist($reglement);
  103.                 $em->flush();
  104.                 $client $reglement->getClient();
  105.                 if (is_object($client)) {
  106.                     $soldeClient $acompteService->getSoldeClient($client);
  107.                     $reglement->setSolde($soldeClient);
  108.                     $em->persist($reglement);
  109.                     $em->flush();
  110.                 }
  111.                 if (array_key_exists('mode'$parametres) && $parametres["mode"] == "e") {
  112.                 } elseif (array_key_exists('mode'$parametres) && $parametres["mode"] == "r") {
  113.                     if ($request->query->get('remboursement') != "") {
  114.                         $commentaire "Remboursement de l'avoir : ".$avoir->getReference();
  115.                     } else {
  116.                         $commentaire "Remboursement des règlements : ";
  117.                         foreach ($client->getReglements() as $r) {
  118.                             if ( ! is_object($r->getCommande()) && $r->getEstParent() == false && $r->getMontant() > && ! is_object($r->getRemboursement())) {
  119.                                 $r->setRemboursement($reglement);
  120.                                 $em->persist($r);
  121.                                 $commentaire .= $r->getNumTraite()." ";
  122.                             }
  123.                         }
  124.                     }
  125.                     $reglement->setCommentaire($commentaire);
  126.                     $em->persist($reglement);
  127.                     $em->flush();
  128.                     if (isset($avoir) && is_object($avoir)) {
  129.                         $serviceFacture->changerStatutPaiementFacture($avoir);
  130.                     }
  131.                 }
  132.                 //Reglement pour plusieurs factures ou commandes ou or
  133.                 $montant $reglement->getMontant();
  134.                 $montant += floatval($reglement->getOperationDiverse());
  135.                 $ids     $request->request->get('commandes');
  136.                 //var_dump($ids);
  137.                 if (count($ids) > 0) {
  138.                     //Re-order pour commencer par les avoirs
  139.                     $commandes = [];
  140.                     $avoirs    = [];
  141.                     foreach ($ids as $id) {
  142.                         $commande $repo_commande->find($id);
  143.                         if (is_object($commande)) {
  144.                             $typeDocumentCommercial $commande->getTypeDocumentCommercial();
  145.                             if (is_int($typeDocumentCommercial) && $typeDocumentCommercial == 6) {
  146.                                 $commandes[] = $commande;
  147.                             } elseif (is_int($typeDocumentCommercial) && $typeDocumentCommercial == 7) {
  148.                                 $avoirs[] = $commande;
  149.                             }
  150.                         }
  151.                     }
  152.                     $commandes array_merge($avoirs$commandes);
  153.                     foreach ($commandes as $commande) {
  154.                         $resteAregler $serviceFacture->getMontantReglementFacture($commande);
  155.                         if ($resteAregler >= $montant) {
  156.                             $nouveauMontant $montant;
  157.                         } else {
  158.                             $nouveauMontant $resteAregler;
  159.                         }
  160.                         $montant -= $nouveauMontant;
  161.                         //var_dump($montant);
  162.                         if ($montant >= 0) {
  163.                             $reglement->setEstParent(1);
  164.                             $reg = clone $reglement;
  165.                             $reg->setEstParent(0);
  166.                             $reg->setNumTraite($numerotationService->generer($reglement));
  167.                             $reg->setMontant($nouveauMontant);
  168.                             $reg->setOperationDiverse(0);
  169.                             $reg->setReglementParent($reglement);
  170.                             $reg->setCommande($commande);
  171.                             if ($nouveauMontant 0) {
  172.                                 $commentaire "Remboursement de l'avoir ";
  173.                             } else {
  174.                                 $commentaire "Règlement de la facture ";
  175.                             }
  176.                             $commentaire .= $commande->getReference()." suite réglement ".$reglement->getNumTraite();
  177.                             $reg->setCommentaire($commentaire);
  178.                             if (is_object($commande->getCommande())) {
  179.                                 $reg->setParent($commande->getCommande());
  180.                             }
  181.                             $em->persist($reglement);
  182.                             $em->persist($reg);
  183.                             $em->flush();
  184.                             $serviceFacture->changerStatutPaiementFacture($commande);
  185.                             $client $reg->getClient();
  186.                             if (is_object($client)) {
  187.                                 $soldeClient $acompteService->getSoldeClient($client);
  188.                                 $reg->setSolde($soldeClient);
  189.                                 $em->persist($reg);
  190.                                 $em->flush();
  191.                             }
  192.                         }
  193.                     }
  194.                 }
  195.                 if ($reglement->getEstParent() == "1" and round($montant2) > 0) {
  196.                     $reglement_reste_du = clone $reglement;
  197.                     $reglement_reste_du->setNumTraite($numerotationService->generer($reglement));
  198.                     $reglement_reste_du->setMontant(round($montant2));
  199.                     $reglement_reste_du->setCommentaire("Reste dû disponible suite réglement ".$reglement->getNumTraite());
  200.                     $reglement_reste_du->setReglementParent($reglement);
  201.                     $reglement_reste_du->setCommande(null);
  202.                     $reglement_reste_du->setEstParent(0);
  203.                     $em->persist($reglement_reste_du);
  204.                     $em->flush();
  205.                     $client $reglement_reste_du->getClient();
  206.                     if (is_object($client)) {
  207.                         $soldeClient $acompteService->getSoldeClient($client);
  208.                         $reglement_reste_du->setSolde($soldeClient);
  209.                         $em->persist($reglement_reste_du);
  210.                         $em->flush();
  211.                     }
  212.                 }
  213.                 //echo "<div>MONTANT ".$montant."</div>";
  214.                 $em->flush();
  215.                 //echo $page;
  216.                 if ($page == 'commande') {
  217.                     $montant $acompteService->getMontantRembousement($client);
  218.                     $montant str_replace("-"""$montant);
  219.                     $avoir   round($montant2);
  220.                     return new JsonResponse(
  221.                         ['type' => 'reglement''IdReglement' => $reglement->getId(), 'avoir' => $avoir'rendu' => '''valide' => '1''url' => '']
  222.                     );
  223.                 } else {
  224.                     if (array_key_exists('table'$get) && $get["table"] != "") {
  225.                         return new JsonResponse(
  226.                             ['rendu' => '''valide' => '1''url' => $url'type' => 'recharger_datatable''id_datatable' => $get["table"]]
  227.                         );
  228.                     } else {
  229.                         $this->addFlash('notice'$translator->trans('Règlement ajouté avec succès !'));
  230.                         return new JsonResponse(['rendu' => '''valide' => '1''url' => $url]);
  231.                     }
  232.                 }
  233.             } else {
  234.                 $errors $validator->validate($reglement);
  235.                 $rendu  $this->renderView('GestionComerciale/Reglement/ajouter-client.html.twig', [
  236.                     "montant"   => $montant,
  237.                     "mode"      => $mode,
  238.                     'form'      => $form->createView(),
  239.                     'errors'    => $errors,
  240.                     'reglement' => $reglement,
  241.                     'factures'  => $factures,
  242.                 ]);
  243.                 return new JsonResponse(["montant" => $montant'rendu' => $rendu'valide' => '0''url' => '''titre' => $titre_modal]
  244.                 );
  245.             }
  246.         }
  247.         $rendu $this->renderView(
  248.             'GestionComerciale/Reglement/ajouter-client.html.twig',
  249.             [
  250.                 "montant"   => $montant,
  251.                 "mode"      => $mode,
  252.                 'form'      => $form->createView(),
  253.                 'errors'    => $errors,
  254.                 'reglement' => $reglement,
  255.                 'factures'  => $factures,
  256.             ]
  257.         );
  258.         return new JsonResponse(
  259.             ["montant" => $montant'rendu' => $rendu'valide' => '0''url' => '''titre' => $titre_modal]
  260.         );
  261.     }
  262.     /**
  263.      * @Route("/vente/reglement/nouveau/{id}/{type}", name="dtc_reglement_ajouter")
  264.      */
  265.     public function ajouterAction(Request                     $request$id$type ""EntityManagerInterface $emTranslatorInterface $translatorValidatorInterface $validator,
  266.                                   NumerotationDocumentService $numerotationServiceAcompteService $acompteServiceFactureService $serviceFacture
  267.     ) {
  268.         $titre_modal $translator->trans("Nouveau règlement");
  269.         $reglement   = new Acompte;
  270.         $type_acompte $em->getRepository(TypeReglement::class)->find(2);
  271.         $reglement->setTypeReglement($type_acompte);
  272.         $user $this->getUser();
  273.         $reglement->setUtilisateur($user);
  274.         $repo_objet $em->getRepository(Commande::class);
  275.         $objet $repo_objet->find($id);
  276.         $reglement->setCommande($objet);
  277.         $client $objet->getClient();
  278.         $delai $client->getDelaiPaiement();
  279.         $reglement->setDelaiPaiement($delai);
  280.         $moderegle $client->getmodeReglement();
  281.         //$reglement->setModeReglement($moderegle);
  282.         $reglement->setModeReglement(null);
  283.         $reglement->setClient($client);
  284.         $form   $this->createForm(AcompteType::class, $reglement);
  285.         $errors "";
  286.         $form->handleRequest($request);
  287.         if ($form->isSubmitted()) {
  288.             if ($form->isValid()) {
  289.                 $url $this->generateUrl('dtc_facture_afficher', ['id' => $objet->getId(), 'tab' => 'reglements']);
  290.                 //$this->generateUrl('dtc_ordre_reparation_modifier', array('id' => $objet->getId(),'tab'=>'acomptes'));
  291.                 $totalRestant $objet->getTotalTtc();
  292.                 if (is_object($objet->getCommande())) {
  293.                     foreach ($objet->getCommande()->getAcomptes() as $a) {
  294.                         $totalRestant $totalRestant $a->getMontant();
  295.                     }
  296.                 }
  297.                 $montant $reglement->getMontant();
  298.                 //echo "<div>(".$montant.")  (".$totalRestant.")</div>";
  299.                 //echo "<div>(".$montant.") AAA ".$totalRestant - $montant." (".$totalRestant.")</div>";
  300.                 if ($totalRestant $montant and != 1) {
  301.                     $type_acompte $em->getRepository(TypeReglement::class)->find(1);
  302.                     $reglement->setCommande($objet->getCommande());
  303.                     $reglement->setTypeReglement($type_acompte);
  304.                     $reglement->setCommentaire(
  305.                         "Acompte de ".$reglement->getMontant()."€ versé pour la Commande : ".$objet->getCommande()->getReference()."<br/>".$reglement->getCommentaire()
  306.                     );
  307.                 } else {
  308.                     $reglement->setCommande($objet);
  309.                     if (is_object($objet->getCommande())) {
  310.                         $reglement->setParent($objet->getCommande());
  311.                     }
  312.                     $reglement->setCommentaire("Règlement de ".$reglement->getMontant()."€ versé pour la Facture : ".$objet->getReference()."<br/>".$reglement->getCommentaire());
  313.                 }
  314.                 $nom $client->getPrenom().' '.$client->getNom();
  315.                 $reglement->setNomClient($nom);
  316.                 $reglement->setClient($client);
  317.                 $reglement->setNumTraite($numerotationService->generer($reglement));
  318.                 $em->persist($reglement);
  319.                 $em->flush();
  320.                 $client $reglement->getClient();
  321.                 if (is_object($client) && ! is_object($client->getCompteMarketPlace())) {
  322.                     $soldeClient $acompteService->getSoldeClient($client);
  323.                     $reglement->setSolde($soldeClient);
  324.                     $em->persist($reglement);
  325.                     $em->flush();
  326.                 }
  327.                 $commande $reglement->getCommande();
  328.                 if (is_int($commande->getTypeDocumentCommercial()) && in_array($commande->getTypeDocumentCommercial(), [TypeDocumentCommercial::FACTURETypeDocumentCommercial::AVOIR])) {//facture
  329.                     $serviceFacture->changerStatutPaiementFacture($commande);
  330.                 }
  331.                 $this->addFlash(
  332.                     'notice',
  333.                     $translator->trans('Règlement ajouté avec succès !')
  334.                 );
  335.                 return new JsonResponse(['rendu' => '''valide' => '1''url' => $url]);
  336.             } else {
  337.                 $errors $validator->validate($reglement);
  338.                 $rendu  $this->renderView(
  339.                     'GestionComerciale/Reglement/ajouter.html.twig',
  340.                     ['form' => $form->createView(), 'errors' => $errors'id' => $id'type' => $type'objet' => $objet]
  341.                 );
  342.                 return new JsonResponse(['rendu' => $rendu'valide' => '0''url' => '''titre' => $titre_modal]);
  343.             }
  344.         }
  345.         $rendu $this->renderView(
  346.             'GestionComerciale/Reglement/ajouter.html.twig',
  347.             ['form' => $form->createView(), 'errors' => $errors'id' => $id'type' => $type'objet' => $objet]
  348.         );
  349.         return new JsonResponse(['rendu' => $rendu'valide' => '0''url' => '''titre' => $titre_modal]);
  350.         //return $this->render('GestionComerciale/Reglement/ajouter.html.twig', array('form' => $form->createView(),'errors'=>$errors,'id'=>$id,'type'=>$type));
  351.     }
  352.     /**
  353.      * @Route("/vente/reglement/modifier/{objet}/{id}/{type}", name="dtc_reglement_modifier")
  354.      */
  355.     public function modifierAction(Request                $requestAcompte $objet$id$typeEntityManagerInterface $emTranslatorInterface $translatorValidatorInterface $validator,
  356.                                    FactureService         $serviceFactureAcompteService $acompteServiceNumerotationDocumentService $numerotationService
  357.                                    MouvementCaisseService $serviceMouvementCaisse
  358.     ) {
  359.         $reglement $objet;
  360.         $repo_objet $em->getRepository(Commande::class);
  361.         $objet       $objet->getCommande();
  362.         $titre_modal $translator->trans("Modifier règlement");
  363.         $user $this->getUser();
  364.         $reglement->setUtilisateur($user);
  365.         $form   $this->createForm(AcompteType::class, $reglement);
  366.         $errors "";
  367.         //si le reglement est lié à un mouvement de caisse ou à un bordereau, il n'est plus modifiable
  368.         $repo_mvt_caisse $em->getRepository(MouvementCaisse::class);
  369.         $mouvementCaisse $repo_mvt_caisse->findOneBy(['reglement' => $reglement]);
  370.         if (is_object($reglement->getBordereau()) || is_object($mouvementCaisse)) {
  371.             $this->addFlash(
  372.                 'warning',
  373.                 $translator->trans('Le règlement n\'est plus modifiable!')
  374.             );
  375.             $rendu $this->renderView(
  376.                 'GestionComerciale/Reglement/ajouter.html.twig',
  377.                 ['form' => $form->createView(), 'errors' => $errors'id' => $id'type' => $type'nonModifiable' => 1'reglement' => $reglement]
  378.             );
  379.             return new JsonResponse(['rendu' => $rendu'valide' => '0''url' => '''titre' => $titre_modal]);
  380.         }
  381.         $modificationModeReglement false;
  382.         $modificationMontant       false;
  383.         $modeReglementInitial      $reglement->getModeReglement();
  384.         $montantInitial            $reglement->getMontant();
  385.         $form->handleRequest($request);
  386.         if ($modeReglementInitial->getId() != $reglement->getModeReglement()->getId()) {
  387.             $modificationModeReglement true;
  388.         }
  389.         if ($modificationMontant != $reglement->getMontant()) {
  390.             $modificationMontant true;
  391.         }
  392.         if ($form->isSubmitted()) {
  393.             $droit $this->isGranted(EntityVoter::UPDATEAcompte::class);
  394.             if ( ! $droit) {
  395.                 $rendu $this->renderView(
  396.                     'GestionComerciale/Reglement/ajouter.html.twig',
  397.                     ['form' => $form->createView(), 'errors' => $errors'id' => $id'type' => $type'objet' => $objet]
  398.                 );
  399.                 return new Response(json_encode(['rendu' => $rendu'valide' => '0''url' => '''titre' => $titre_modal]));
  400.             }
  401.             if ($form->isValid()) {
  402.                 //Modification du mode de reglement
  403.                 if ($modificationModeReglement) {
  404.                     $reglement->setNumTraite($numerotationService->generer($reglement));
  405.                     //Si l'acompte était lié à un mouvement de caisse, il faut supprimer le mouvement de caisse
  406.                     $repo_mvt_caisse $em->getRepository(MouvementCaisse::class);
  407.                     $mouvementCaisse $repo_mvt_caisse->findOneBy(['reglement' => $reglement]);
  408.                     $commentaire     $reglement->getCommentaire();
  409.                     $date            = new \Datetime;
  410.                     $commentaire     .= '. Modification du mode de reglement le '.$date->format('d/m/Y H:i').' par '.$user->getNom().' '.$user->getPrenom();
  411.                     $reglement->setCommentaire($commentaire);
  412.                     //Il existe un mouvement de caisse
  413.                     if (is_object($mouvementCaisse)) {
  414.                         $serviceMouvementCaisse->supprimerMouvementCaisse($mouvementCaisse);
  415.                     }
  416.                     //Si c'est un reglement en especes, il faut creer le mouvement de caisse
  417.                     if (!= && is_object($reglement->getModeReglement()) && $reglement->getModeReglement()->getId() == 1) {
  418.                         $mouvementCaisse = new MouvementCaisse;
  419.                         $type_mvt_caisse $em->getRepository(TypeMouvementCaisse::class)->find(1);
  420.                         if (is_object($type_mvt_caisse)) {
  421.                             $mouvementCaisse->setTypeMouvementCaisse($type_mvt_caisse);
  422.                         }
  423.                         $mouvementCaisse->setUtilisateur($user);
  424.                         $montant $reglement->getMontant();
  425.                         $mouvementCaisse->setMontant(abs($montant));
  426.                         $nom      '';
  427.                         $commande '';
  428.                         if ($montant 0) {
  429.                             $mouvementCaisse->setEntreeSortie(true);
  430.                             $libelle 'Remboursement';
  431.                         } else {
  432.                             $mouvementCaisse->setEntreeSortie(false);
  433.                             $libelle 'Versement';
  434.                         }
  435.                         if (is_object($reglement->getClient())) {
  436.                             $nom     $reglement->getClient()->getNom().' '.$reglement->getClient()->getPrenom();
  437.                             $libelle .= ' de '.$nom;
  438.                         }
  439.                         if (is_object($reglement->getCommande())) {
  440.                             $commande $reglement->getCommande()->getReference();
  441.                             $libelle  .= ' sur '.$commande;
  442.                         }
  443.                         $mouvementCaisse->setReglement($reglement);
  444.                         $mouvementCaisse->setLibelle($libelle);
  445.                         $serviceMouvementCaisse->ajouterMouvementCaisse($mouvementCaisse);
  446.                     }
  447.                 }
  448.                 //Modification du montant
  449.                 if ($modificationMontant) {
  450.                     //Supprimer les reglements enfants
  451.                     $reglementsEnfant $reglement->getReglementsEnfant();
  452.                     $commandes        = [];
  453.                     if (count($reglementsEnfant) > 0) {
  454.                         $commandes = [];
  455.                         $avoirs    = [];
  456.                         foreach ($reglementsEnfant as $reglementEnfant) {
  457.                             $commandeTmp $reglementEnfant->getCommande();
  458.                             if (is_object($commandeTmp)) {
  459.                                 $typeDocumentCommercial $commandeTmp->getTypeDocumentCommercial();
  460.                                 if (is_int($typeDocumentCommercial) && $typeDocumentCommercial == 6) {
  461.                                     $commandes[] = $commandeTmp;
  462.                                 } elseif (is_int($typeDocumentCommercial) && $typeDocumentCommercial == 7) {
  463.                                     $avoirs[] = $commandeTmp;
  464.                                 }
  465.                             }
  466.                             $em->remove($reglementEnfant);
  467.                         }
  468.                         $commandes array_merge($avoirs$commandes);
  469.                         $em->flush();
  470.                     }
  471.                     //Creer les reglements enfants
  472.                     $montant $reglement->getMontant();
  473.                     if (count($commandes) > 0) {
  474.                         foreach ($commandes as $commande) {
  475.                             $resteAregler $serviceFacture->getMontantReglementFacture($commande);
  476.                             if ($resteAregler >= $montant) {
  477.                                 $nouveauMontant $montant;
  478.                             } else {
  479.                                 $nouveauMontant $resteAregler;
  480.                             }
  481.                             $montant -= $nouveauMontant;
  482.                             //var_dump($montant);
  483.                             if ($montant >= 0) {
  484.                                 $reglement->setEstParent(1);
  485.                                 $reg = clone $reglement;
  486.                                 $reg->setEstParent(0);
  487.                                 $reg->setNumTraite($numerotationService->generer($reglement));
  488.                                 $reg->setMontant($nouveauMontant);
  489.                                 $reg->setReglementParent($reglement);
  490.                                 $reg->setCommande($commande);
  491.                                 if ($nouveauMontant 0) {
  492.                                     $commentaire "Remboursement de l'avoir ";
  493.                                 } else {
  494.                                     $commentaire "Règlement de la facture ";
  495.                                 }
  496.                                 $commentaire .= $commande->getReference()." suite réglement ".$reglement->getNumTraite();
  497.                                 $reg->setCommentaire($commentaire);
  498.                                 if (is_object($commande->getCommande())) {
  499.                                     $reg->setParent($commande->getCommande());
  500.                                 }
  501.                                 $em->persist($reglement);
  502.                                 $em->persist($reg);
  503.                                 $em->flush();
  504.                                 $serviceFacture->changerStatutPaiementFacture($commande);
  505.                                 $client $reg->getClient();
  506.                                 if (is_object($client)) {
  507.                                     $soldeClient $acompteService->getSoldeClient($client);
  508.                                     $reg->setSolde($soldeClient);
  509.                                     $em->persist($reg);
  510.                                     $em->flush();
  511.                                 }
  512.                             }
  513.                         }
  514.                     }
  515.                     if ($reglement->getEstParent() == "1" and round($montant2) > 0) {
  516.                         $reglement_reste_du = clone $reglement;
  517.                         $reglement_reste_du->setNumTraite($numerotationService->generer($reglement));
  518.                         $reglement_reste_du->setMontant(round($montant2));
  519.                         $reglement_reste_du->setCommentaire("Reste dû disponible suite réglement ".$reglement->getNumTraite());
  520.                         $reglement_reste_du->setReglementParent($reglement);
  521.                         $reglement_reste_du->setCommande(null);
  522.                         $reglement_reste_du->setEstParent(0);
  523.                         $em->persist($reglement_reste_du);
  524.                         $em->flush();
  525.                         $client $reglement_reste_du->getClient();
  526.                         if (is_object($client)) {
  527.                             $soldeClient $acompteService->getSoldeClient($client);
  528.                             $reglement_reste_du->setSolde($soldeClient);
  529.                             $em->persist($reglement_reste_du);
  530.                             $em->flush();
  531.                         }
  532.                     }
  533.                     //Si l'acompte était lié à un mouvement de caisse, il faut supprimer le mouvement de caisse et le recréer
  534.                     $repo_mvt_caisse $em->getRepository(MouvementCaisse::class);
  535.                     $mouvementCaisse $repo_mvt_caisse->findOneBy(['reglement' => $reglement]);
  536.                     $commentaire     $reglement->getCommentaire();
  537.                     $date            = new \Datetime;
  538.                     $commentaire     .= '. Modification du montant le '.$date->format('d/m/Y H:i').' par '.$user->getNom().' '.$user->getPrenom();
  539.                     $reglement->setCommentaire($commentaire);
  540.                     //Il existe un mouvement de caisse
  541.                     if (is_object($mouvementCaisse)) {
  542.                         $serviceMouvementCaisse->supprimerMouvementCaisse($mouvementCaisse);
  543.                     }
  544.                     //Si c'est un reglement en especes, il faut creer le mouvement de caisse
  545.                     if (is_object($reglement->getModeReglement()) && $reglement->getModeReglement()->getId() == 1) {
  546.                         $mouvementCaisse = new MouvementCaisse;
  547.                         $type_mvt_caisse $em->getRepository(TypeMouvementCaisse::class)->find(1);
  548.                         if (is_object($type_mvt_caisse)) {
  549.                             $mouvementCaisse->setTypeMouvementCaisse($type_mvt_caisse);
  550.                         }
  551.                         $mouvementCaisse->setUtilisateur($user);
  552.                         $montant $reglement->getMontant();
  553.                         $mouvementCaisse->setMontant(abs($montant));
  554.                         $nom      '';
  555.                         $commande '';
  556.                         if ($montant 0) {
  557.                             $mouvementCaisse->setEntreeSortie(true);
  558.                             $libelle 'Remboursement';
  559.                         } else {
  560.                             $mouvementCaisse->setEntreeSortie(false);
  561.                             $libelle 'Versement';
  562.                         }
  563.                         if (is_object($reglement->getClient())) {
  564.                             $nom     $reglement->getClient()->getNom().' '.$reglement->getClient()->getPrenom();
  565.                             $libelle .= ' de '.$nom;
  566.                         }
  567.                         if (is_object($reglement->getCommande())) {
  568.                             $commande $reglement->getCommande()->getReference();
  569.                             $libelle  .= ' sur '.$commande;
  570.                         }
  571.                         $mouvementCaisse->setReglement($reglement);
  572.                         $mouvementCaisse->setLibelle($libelle);
  573.                         $serviceMouvementCaisse->ajouterMouvementCaisse($mouvementCaisse);
  574.                     }
  575.                 }
  576.                 //$reglement->setCommande($objet);
  577.                 if ($type == 'reglements') {
  578.                     $url $this->generateUrl('dtc_reglement_remise_banque_liste');
  579.                 } elseif ($type == 'client') {
  580.                     $url $this->generateUrl('dtc_client_modifier', ['id' => $reglement->getClient()->getId(), 'tab' => 'solde']);
  581.                 } else {
  582.                     $url $this->generateUrl('dtc_commande_modifier', ['id' => $objet->getId(), 'tab' => 'reglements']);
  583.                 }
  584.                 $em->persist($reglement);
  585.                 $em->flush();
  586.                 $client $reglement->getClient();
  587.                 if (is_object($client)) {
  588.                     $soldeClient $acompteService->getSoldeClient($client);
  589.                     $reglement->setSolde($soldeClient);
  590.                     $em->persist($reglement);
  591.                     $em->flush();
  592.                 }
  593.                 $commande $reglement->getCommande();
  594.                 if (is_object($commande) && is_int($commande->getTypeDocumentCommercial()) && $commande->getTypeDocumentCommercial() == TypeDocumentCommercial::FACTURE) {//facture
  595.                     $serviceFacture->changerStatutPaiementFacture($commande);
  596.                 }
  597.                 $this->addFlash(
  598.                     'notice',
  599.                     $translator->trans('Règlement modifié avec succès !')
  600.                 );
  601.                 return new JsonResponse(['rendu' => '''valide' => '1''url' => $url]);
  602.             } else {
  603.                 $errors $validator->validate($reglement);
  604.                 $rendu  $this->renderView(
  605.                     'GestionComerciale/Reglement/ajouter.html.twig',
  606.                     ['form' => $form->createView(), 'errors' => $errors'id' => $id'type' => $type'objet' => $objet'reglement' => $reglement]
  607.                 );
  608.                 return new JsonResponse(['rendu' => $rendu'valide' => '0''url' => '''titre' => $titre_modal]);
  609.             }
  610.         }
  611.         $rendu $this->renderView(
  612.             'GestionComerciale/Reglement/ajouter.html.twig',
  613.             ['form' => $form->createView(), 'errors' => $errors'id' => $id'type' => $type'objet' => $objet'reglement' => $reglement]
  614.         );
  615.         return new JsonResponse(['rendu' => $rendu'valide' => '0''url' => '''titre' => $titre_modal]);
  616.     }
  617.     /**
  618.      * @Route("/vente/reglement/supprimer/{objet}/{id}/{type}", name="dtc_reglement_supprimer")
  619.      */
  620.     public function supprimerAction(Request                $requestAcompte $objet$id$typeEntityManagerInterface $emTranslatorInterface $translatorValidatorInterface $validator,
  621.                                     MouvementCaisseService $serviceMouvementCaisseFactureService $serviceFacture
  622.     ) {
  623.         $reglement   $objet;
  624.         $titre_modal $translator->trans("Demande de confirmation");
  625.         $user        $this->getUser();
  626.         $form   $this->createForm(SupprimerAcompteType::class, $reglement);
  627.         $errors "";
  628.         $form->handleRequest($request);
  629.         if ($form->isSubmitted()) {
  630.             if ($form->isValid()) {
  631.                 $commande $reglement->getCommande();
  632.                 $reglementsEnfant $reglement->getReglementsEnfant();
  633.                 $nbEnfants        count($reglementsEnfant);
  634.                 $supprimable      true;
  635.                 if ($nbEnfants 0) {
  636.                     if (count($nbEnfants) == 1) {
  637.                         foreach ($reglementsEnfant as $reglementEnfant) {
  638.                             if ($reglementEnfant->getMontant() == $reglement->getMontant()) {
  639.                                 $em->remove($reglementEnfant);
  640.                                 $em->flush();
  641.                             } else {
  642.                                 $supprimable false;
  643.                             }
  644.                         }
  645.                     }
  646.                 }
  647.                 if ($supprimable) {
  648.                     $em->remove($reglement);
  649.                     $em->flush();
  650.                     //Si reglement en especes il faut supprimer le mouvement de caisse
  651.                     if (is_object($reglement->getModeReglement()) && $reglement->getModeReglement()->getId() == 1) {
  652.                         $repo_mvt_caisse $em->getRepository(MouvementCaisse::class);
  653.                         $mouvementCaisse $repo_mvt_caisse->findOneBy(['reglement' => $reglement]);
  654.                         //Il existe un mouvement de caisse
  655.                         if (is_object($mouvementCaisse)) {
  656.                             $serviceMouvementCaisse->supprimerMouvementCaisse($mouvementCaisse);
  657.                         }
  658.                     }
  659.                     if (is_int($commande->getTypeDocumentCommercial()) && $commande->getTypeDocumentCommercial() == TypeDocumentCommercial::FACTURE) {//facture
  660.                         $serviceFacture->changerStatutPaiementFacture($commande);
  661.                     }
  662.                     $this->addFlash(
  663.                         'notice',
  664.                         'Règlement supprimé avec succès !'.$nbEnfants.'///'
  665.                     );
  666.                 } else {
  667.                     $this->addFlash(
  668.                         'warning',
  669.                         $translator->trans('Règlement non supprimable !')
  670.                     );
  671.                 }
  672.                 if ($type == 'reglements') {
  673.                     $url $this->generateUrl('dtc_reglement_remise_banque_liste');
  674.                 } else {
  675.                     $url $this->generateUrl('dtc_commande_modifier', ['id' => $id'tab' => 'acomptes']);
  676.                 }
  677.                 return new JsonResponse(['rendu' => '''valide' => '1''url' => $url]);
  678.             } else {
  679.                 $errors $validator->validate($reglement);
  680.                 $rendu  $this->renderView(
  681.                     'FO/Supprimer/supprimer.html.twig',
  682.                     ['form' => $form->createView(), 'errors' => $errors'id' => $id'type' => $type'objet' => $objet]
  683.                 );
  684.                 return new JsonResponse(['rendu' => $rendu'valide' => '0''url' => '''titre' => $titre_modal]);
  685.             }
  686.         }
  687.         $rendu $this->renderView('FO/Supprimer/supprimer.html.twig', ['form' => $form->createView(), 'errors' => $errors'id' => $id'type' => $type'objet' => $objet]);
  688.         return new JsonResponse(['rendu' => $rendu'valide' => '0''url' => '''titre' => $titre_modal]);
  689.     }
  690.     /**
  691.      * @Route("/vente/reglement/{id}/{type}", name="dtc_reglement_liste")
  692.      */
  693.     public function listerAction(Request $request$id$type ""$redirection ""EntityManagerInterface $emDatatable $datatableTranslatorInterface $translator)
  694.     {
  695.         if ($type == "client") {
  696.             $repo_objet $em->getRepository(Client::class);
  697.             $objet      $repo_objet->find($id);
  698.         } else {
  699.             $repo_objet $em->getRepository(Commande::class);
  700.             $objet      $repo_objet->find($id);
  701.         }
  702.         $tableau_class_cellule[] = ["className" => "visible_export colonne_id""targets" => [0], "visible" => true"orderable" => true];
  703.         $tableau_class_cellule[] = ["className" => "visible_export colonne_id text-center""targets" => [1], "visible" => true"orderable" => false];
  704.         $tableau_class_cellule[] = ["className" => "visible_export colonne_id""targets" => [2], "visible" => true"orderable" => true];
  705.         $tableau_class_cellule[] = ["className" => "visible_export colonne_id""targets" => [3], "visible" => true"orderable" => true];
  706.         $tableau_class_cellule[] = ["orderable" => false"className" => "colonne_id""targets" => [4], "visible" => true];
  707.         $tableau_class_cellule[] = ["orderable" => false"className" => "colonne_id""targets" => [5], "visible" => true];
  708.         $tableau_class_cellule[] = ["orderable" => false"className" => "colonne_id""targets" => [6], "visible" => true];
  709.         $tableau_class_cellule[] = ["orderable" => false"className" => "colonne_id ""targets" => [7], "visible" => true];
  710.         $tableau_class_cellule[] = ["orderable" => false"className" => "colonne_id""targets" => [8], "visible" => true];
  711.         $tableau_class_cellule[] = ["orderable" => false"className" => "colonne_id""targets" => [9], "visible" => true];
  712.         $this->datatable($datatable$translator$objet$type);
  713.         return $this->render(
  714.             'GestionComerciale/Reglement/lister.html.twig',
  715.             ['tableauClassColonne' => $tableau_class_cellule"id" => $id"type" => $type"redirection" => $redirection"objet" => $objet]
  716.         );
  717.     }
  718.     /**
  719.      * set datatable configs
  720.      *
  721.      * @return \App\Library\Datatable\Util\Datatable
  722.      */
  723.     private function datatable(Datatable $datatableTranslatorInterface $translator$objet$type ""$redirection "")
  724.     {
  725.         $libelle "Facture";
  726.         if ($type == "client") {
  727.             $libelle "Document";
  728.         }
  729.         //if(is_object($objet)) $id = $objet->getId(); else $id="1";
  730.         $type_jointure 'x.'.$type;
  731.         $datatable->setDatatableId('dta-reglements')
  732.                   ->setEntity(Acompte::class, "x")
  733.                   ->setFields(
  734.                       [
  735.                           $translator->trans("N° règlement")      => 'x.numTraite',
  736.                           $translator->trans("Date")              => 'x.dateReglement',
  737.                           $translator->trans("Montant")           => 'x.montant',
  738.                           $translator->trans("Mode de Règlement") => 'r.libelle',
  739.                           $libelle                                => 'c.reference',
  740.                           $translator->trans("Payé ?")            => 'x.id',
  741.                           $translator->trans("Commentaire")       => 'x.commentaire',
  742.                           $translator->trans("equilibrage")       => 'x.mouvementEquilibrage',
  743.                           $translator->trans("hors erp")          => 'x.horsErp',
  744.                           $translator->trans("Actions")           => 'x.id',
  745.                           "_identifier_"                          => 'x.id',
  746.                       ]
  747.                   )
  748.                   ->addJoin('x.modeReglement''r'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  749.                   ->addJoin('x.commande''c'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  750.                   ->setRenderers(
  751.                       [
  752.                           => [
  753.                               'view'   => 'FO/DataTable/reglement-libelle.html.twig',
  754.                               'params' => [],
  755.                           ],
  756.                           => [
  757.                               'view'   => 'FO/DataTable/heure.html.twig',
  758.                               'params' => [],
  759.                           ],
  760.                           => [
  761.                               'view'   => 'FO/DataTable/reglement-prix.html.twig',
  762.                               'params' => [],
  763.                           ],
  764.                           /*
  765.                           4 => array(
  766.                               'view' => 'FO/DataTable/avec_lien_edit_route.html.twig',
  767.                                'params' => array(
  768.                                       'edit_route'    => 'dtc_facture_afficher',
  769.                                       'objet' => 'DTCGestionComercialeBundle:Facture',
  770.                                       //'id' => 'factures'
  771.                                       'typeDocument' => 'true'
  772.                                   ),
  773.                           ),
  774.                            *
  775.                            */
  776.                           => [
  777.                               'view'   => 'FO/DataTable/docs_lies_reglement.html.twig',
  778.                               'params' => [],
  779.                           ],
  780.                           => [
  781.                               'view' => 'FO/DataTable/reglement_facture_est_paye_solde.html.twig',
  782.                           ],
  783.                           => [
  784.                               'view' => 'FO/DataTable/booleen.html.twig',
  785.                           ],
  786.                           => [
  787.                               'view' => 'FO/DataTable/booleen.html.twig',
  788.                           ],
  789.                           => [
  790.                               'view'   => 'FO/DataTable/actions_modal.html.twig',
  791.                               'params' => [
  792.                                   'edit_route'      => 'dtc_reglement_modifier',
  793.                                   'supprimer_route' => 'dtc_acompte_supprimer',
  794.                                   'id'              => $objet->getId(),
  795.                                   'redirection'     => $redirection,
  796.                                   'type'            => $type,
  797.                                   'entite'          => 'acompte',
  798.                                   'objet'           => Acompte::class,
  799.                               ],
  800.                           ],
  801.                       ]
  802.                   )
  803.                   ->setOrder("x.id""desc")
  804.                   ->setSearch(true)
  805.                   ->setSearchFields([12345]);
  806.         $where $type_jointure.' = :objet and x.typeReglement IN (:typeReglement)';
  807.         if ($type == "client") {
  808.             $params = ['objet' => $objet->getId(), 'typeReglement' => ['2''1']];
  809.             $where  .= ' AND x.reglementParent IS NULL';
  810.         } else {
  811.             $params = ['objet' => $objet->getId(), 'typeReglement' => ['2']];
  812.         }
  813.         //var_dump($where);
  814.         //var_dump($params);
  815.         $datatable->setWhere(
  816.             $where,
  817.             $params
  818.         );
  819.         //echo $type_jointure;
  820.         return $datatable;
  821.     }
  822.     /**
  823.      * Grid action
  824.      * @return Response
  825.      */
  826.     /**
  827.      * @Route("/vente/reglement/grid/{id}/{type}/{redirection}", name="dtc_reglement_liste_grid")
  828.      */
  829.     public function gridAction(Request $request$id ""$type ""$redirection ""EntityManagerInterface $emTranslatorInterface $translatorDatatable $datatable)
  830.     {
  831.         if ($type == "client") {
  832.             $repo_objet $em->getRepository(Client::class);
  833.             $objet      $repo_objet->find($id);
  834.         } else {
  835.             $repo_objet $em->getRepository(Commande::class);
  836.             $objet      $repo_objet->find($id);
  837.         }
  838.         return $this->datatable($datatable$translator$objet$type$redirection)->execute();
  839.     }
  840.     /**
  841.      * @Route("/vente/reglement-remise-banque", name="dtc_reglement_remise_banque_liste")
  842.      */
  843.     public function listerReglementRemiseBanqueAction(Request   $request$type ''$bordereauId ''EntityManagerInterface $emColonneTableauService $serviceColonneTableau,
  844.                                                       Datatable $datatableTranslatorInterface $translator
  845.     ) {
  846.         $tableau_class_cellule[] = ["className" => "colonne_id""targets" => [0], "visible" => true"orderable" => false];
  847.         $tableau_class_cellule[] = [
  848.             "className" => "visible_export colonne_id",
  849.             "targets"   => [1],
  850.             // TODO CHANGE THIS
  851.             "visible"   => $serviceColonneTableau->getColonneUtilisateur("DTCGestionComercialeBundle:Reglement""id"),
  852.             "orderable" => true,
  853.         ];
  854.         $tableau_class_cellule[] = [
  855.             "className" => "visible_export colonne_id text-center",
  856.             "targets"   => [2],
  857.             "visible"   => $serviceColonneTableau->getColonneUtilisateur("DTCGestionComercialeBundle:Reglement""date"),
  858.             "orderable" => true,
  859.         ];
  860.         $tableau_class_cellule[] = [
  861.             "className" => "visible_export colonne_id text-center",
  862.             "targets"   => [3],
  863.             "visible"   => $serviceColonneTableau->getColonneUtilisateur("DTCGestionComercialeBundle:Reglement""echeance"),
  864.             "orderable" => true,
  865.         ];
  866.         $tableau_class_cellule[] = [
  867.             "className" => "visible_export colonne_id",
  868.             "targets"   => [4],
  869.             "visible"   => $serviceColonneTableau->getColonneUtilisateur("DTCGestionComercialeBundle:Reglement""modeReglement"),
  870.             "orderable" => true,
  871.         ];
  872.         $tableau_class_cellule[] = [
  873.             "className" => "visible_export colonne_id",
  874.             "targets"   => [5],
  875.             "visible"   => $serviceColonneTableau->getColonneUtilisateur("DTCGestionComercialeBundle:Reglement""numReglement"),
  876.             "orderable" => true,
  877.         ];
  878.         $tableau_class_cellule[] = [
  879.             "className" => "visible_export colonne_id",
  880.             "targets"   => [6],
  881.             "visible"   => $serviceColonneTableau->getColonneUtilisateur("DTCGestionComercialeBundle:Reglement""numPiece"),
  882.             "orderable" => true,
  883.         ];
  884.         $tableau_class_cellule[] = [
  885.             "className" => "visible_export colonne_id",
  886.             "targets"   => [7],
  887.             "visible"   => $serviceColonneTableau->getColonneUtilisateur("DTCGestionComercialeBundle:Reglement""client"),
  888.             "orderable" => true,
  889.         ];
  890.         $tableau_class_cellule[] = [
  891.             "className" => "visible_export colonne_id text-right",
  892.             "targets"   => [8],
  893.             "visible"   => $serviceColonneTableau->getColonneUtilisateur("DTCGestionComercialeBundle:Reglement""montant"),
  894.             "orderable" => true,
  895.         ];
  896.         $tableau_class_cellule[] = [
  897.             "className" => "visible_export colonne_id",
  898.             "targets"   => [9],
  899.             "visible"   => $serviceColonneTableau->getColonneUtilisateur("DTCGestionComercialeBundle:Reglement""choixBanque"),
  900.             "orderable" => true,
  901.         ];
  902.         $tableau_class_cellule[] = ["orderable" => false"className" => "colonne_id""targets" => [10], "visible" => true];
  903.         /*
  904.        $tableau_class_cellule[]=array("className"=>"colonne_id","targets"=>array(1),"visible"=>$serviceColonneTableau->getColonneUtilisateur("DTCGestionComercialeBundle:ModeReglement","id"));
  905.        $tableau_class_cellule[]=array("className"=>"colonne_id","targets"=>array(2),"visible"=>$serviceColonneTableau->getColonneUtilisateur("DTCGestionComercialeBundle:ModeReglement","libelle"));
  906.          *
  907.          */
  908.         $this->datatableReglementRemiseBanque($datatable$translator$bordereauId);
  909.         if ($bordereauId == '') {
  910.             $typesReglement $em->getRepository(ModeReglement::class)->findAll();
  911.             return $this->render(
  912.                 'GestionComerciale/Reglement/lister-remise-banque.html.twig',
  913.                 ['tableauClassColonne' => $tableau_class_cellule'type' => $type'typesReglement' => $typesReglement]
  914.             );
  915.         } else {
  916.             return $this->render(
  917.                 'GestionComerciale/Reglement/listerByBordereau.html.twig',
  918.                 ['tableauClassColonne' => $tableau_class_cellule'type' => $type'bordereauId' => $bordereauId]
  919.             );
  920.         }
  921.     }
  922.     private function datatableReglementRemiseBanque(Datatable $datatableTranslatorInterface $translator$bordereauId '')
  923.     {
  924.         $datatable->setDatatableId('dta-reglements')
  925.                   ->setEntity(Acompte::class, "x")
  926.                   ->setFields(
  927.                       [
  928.                           $translator->trans("ID")                => 'x.id',
  929.                           $translator->trans("Date")              => 'x.date',
  930.                           $translator->trans("Echéance")          => 'x.dateEcheance',
  931.                           $translator->trans("Mode de règlement") => "r.libelle",
  932.                           $translator->trans("Equipier")          => "t.email",
  933.                           $translator->trans("N° règlement")      => "x.numTraite",
  934.                           $translator->trans("N° pièce")          => 'fa.reference',
  935.                           $translator->trans('Client')       => 'c.nom',
  936.                           $translator->trans('Montant')      => 'x.montant',
  937.                           $translator->trans('Choix Banque') => 'cbs.id',
  938.                           $translator->trans("Actions")      => 'x.id',
  939.                           "_identifier_"                     => 'x.id',
  940.                       ]
  941.                   )
  942.                   ->addJoin('x.client''c'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  943.                   ->addJoin('x.mouvementCaisse''mc'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  944.                   ->addJoin('x.compteBancaireSociete''cbs'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  945.                     //->addJoin('x.factures', 'fa', \Doctrine\ORM\Query\Expr\Join::INNER_JOIN)
  946.                   ->addJoin('x.commande''fa'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  947.                   ->addJoin('x.utilisateur''t'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  948.                   ->addJoin('x.modeReglement''r'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN);
  949.         /*
  950.         ->setWhere(
  951.                  $type_jointure.' = :objet and x.typeReglement = :typeReglement',
  952.                  array('objet' => $objet,'typeReglement'=>'2')
  953.             )
  954.          *
  955.          */
  956.         $params   = [
  957.             'edit_route' => 'dtc_lcr_modifier',
  958.             'objet'      => Acompte::class,
  959.         ];
  960.         $multiple = [];
  961.         if ($bordereauId == '') {
  962.             $multiple                  = [
  963.                 'generer-bordereau'        => [
  964.                     'title' => 'Générer les bordereaux',
  965.                     'route' => 'dtc_bordereau_liste_ajouter',
  966.                 ],
  967.                 'reglement-ajouter-caisse' => [
  968.                     'title' => 'Passer en caisse',
  969.                     'route' => 'dtc_reglement_ajouter_caisse',
  970.                 ],
  971.                 /*
  972.                         'delete' => array(
  973.                             'title' => 'Supprimer',
  974.                             'route' => 'dtc_acompte_supprimer'
  975.                             ),
  976.                  *
  977.                  */
  978.             ];
  979.             $params['supprimer_route'] = 'dtc_lcr_supprimer';
  980.             $datatable->setWhere(
  981.                 'x.bordereau is null AND x.acompteParent is null AND x.reglementParent is null and mc.id IS NULL AND (x.mouvementEquilibrage = 0 or x.mouvementEquilibrage IS NULL)'
  982.             );
  983.         } else {
  984.             $redirection $this->generateUrl('dtc_bordereau_modifier', ['id' => 3'tab' => 'lcr']);
  985.             $multiple    = [
  986.                 'aucune-action' => [
  987.                     'title' => 'Non disponible',
  988.                     'route' => 'dtc_fo_datatable_multiple_aucune_action',
  989.                 ],
  990.             ];
  991.             $datatable->setWhere('x.bordereau = '.$bordereauId);
  992.         }
  993.         $datatable->setRenderers(
  994.             [
  995.                 => [
  996.                     'view'   => 'FO/DataTable/lien_modal.html.twig',
  997.                     'params' => [
  998.                         'edit_route' => 'dtc_reglement_modifier',
  999.                         'objet'      => 'DTCGestionComercialeBundle:Reglement',
  1000.                         'type'       => 'reglements',
  1001.                     ],
  1002.                 ],
  1003.                 => ['view' => 'FO/DataTable/heure.html.twig'],
  1004.                 => ['view' => 'FO/DataTable/heure.html.twig'],
  1005.                 => ['view' => 'FO/DataTable/reglement.html.twig'],
  1006.                 => [
  1007.                     'view' => 'FO/DataTable/utilisateur.html.twig',
  1008.                 ],
  1009.                 => [
  1010.                     'view'   => 'FO/DataTable/lien_modal.html.twig',
  1011.                     'params' => [
  1012.                         'edit_route' => 'dtc_reglement_modifier',
  1013.                         'objet'      => 'DTCGestionComercialeBundle:Reglement',
  1014.                         'type'       => 'reglements',
  1015.                     ],
  1016.                 ],
  1017.                 /*
  1018.                 5 => array(
  1019.                     'view' => 'FO/DataTable/avec_lien_edit_route.html.twig',
  1020.                      'params' => array(
  1021.                             'edit_route'    => 'dtc_facture_afficher',
  1022.                             'objet' => 'DTCGestionComercialeBundle:Facture',
  1023.                             //'id' => 'factures'
  1024.                             'typeDocument' => 'true'
  1025.                         ),
  1026.                 ),
  1027.                  *
  1028.                  */
  1029.                 => [
  1030.                     'view'   => 'FO/DataTable/docs_lies_reglement.html.twig',
  1031.                     'params' => [],
  1032.                 ],
  1033.                 => ['view' => 'FO/DataTable/client.html.twig'],
  1034.                 => ['view' => 'FO/DataTable/prixAvecHidden.html.twig'],
  1035.                 => ['view' => 'FO/DataTable/choix-banque-select.html.twig'],
  1036.                 10 => [
  1037.                     'view'   => 'FO/DataTable/actions_modal.html.twig',
  1038.                     'params' => [
  1039.                         'edit_route'      => 'dtc_reglement_modifier',
  1040.                         'supprimer_route' => 'dtc_acompte_supprimer',
  1041.                         //'id'    => $objet->getId(),
  1042.                         'id'              => 0,
  1043.                         //'redirection'    => $redirection,
  1044.                         'redirection'     => 0,
  1045.                         'type'            => 'reglements',
  1046.                         'entite'          => 'adresse',
  1047.                         'objet'           => Acompte::class,
  1048.                     ],
  1049.                 ],
  1050.             ]
  1051.         )
  1052.                   ->setOrder("x.id""desc")
  1053.                   ->setSearch(true)
  1054.                   ->setSearchFields([34567])
  1055.                   ->setMultiple($multiple);;
  1056.         return $datatable;
  1057.     }
  1058.     /**
  1059.      * @Route("/vente/reglement-remise-banque/grid", name="dtc_reglement_remise_banque_liste_grid")
  1060.      */
  1061.     public function gridReglementRemiseBanqueAction(Request $request$bordereauId ''Datatable $datatableTranslatorInterface $translator)
  1062.     {
  1063.         /*
  1064.         $em = $em;
  1065.         $repo_objet = $em->getRepository(Commande::class);
  1066.         $objet = $repo_objet->find($id);
  1067.                  *
  1068.                  */
  1069.         return $this->datatableReglementRemiseBanque($datatable$translator$bordereauId)->execute();
  1070.     }
  1071.     /**
  1072.      * @Route("/vente/reglement-by-bordereau/{bordereauId}", name="dtc_reglement_by_bordereau_liste")
  1073.      */
  1074.     public function listerByBordereauAction(Request $request$bordereauIdDatatable $datatableTranslatorInterface $translator)
  1075.     {
  1076.         $tableau_class_cellule[] = ["className" => "colonne_id""targets" => [0], "visible" => true"orderable" => false];
  1077.         /*
  1078.        $tableau_class_cellule[]=array("className"=>"colonne_id","targets"=>array(1),"visible"=>$serviceColonneTableau->getColonneUtilisateur("DTCGestionComercialeBundle:ModeReglement","id"));
  1079.        $tableau_class_cellule[]=array("className"=>"colonne_id","targets"=>array(2),"visible"=>$serviceColonneTableau->getColonneUtilisateur("DTCGestionComercialeBundle:ModeReglement","libelle"));
  1080.          *
  1081.          */
  1082.         $this->datatableByBordereau($datatable$translator$bordereauId);
  1083.         return $this->render('GestionComerciale/Reglement/lister-by-bordereau.html.twig', ['tableauClassColonne' => $tableau_class_cellule"bordereauId" => $bordereauId]);
  1084.     }
  1085.     /**
  1086.      * set datatable configs
  1087.      *
  1088.      * @return \App\Library\Datatable\Util\Datatable
  1089.      */
  1090.     private function datatableByBordereau(Datatable $datatableTranslatorInterface $translator$bordereauId)
  1091.     {
  1092.         $datatable  //->setDatatableId('dta-reglements')
  1093.         ->setEntity(Acompte::class, "x")
  1094.         ->setFields(
  1095.             [
  1096.                 //$translator->trans("ID") =>  'x.id',
  1097.                 $translator->trans("Date")              => 'x.dateReglement',
  1098.                 $translator->trans("Mode de règlement") => "r.id",
  1099.                 $translator->trans("N° règlement")      => "x.numTraite",
  1100.                 $translator->trans("N° pièce")          => 'fa.reference',
  1101.                 $translator->trans("Factures")          => 'x.id',
  1102.                 $translator->trans('Réf client')        => 'c.reference',
  1103.                 $translator->trans('Client')            => 'c.nom',
  1104.                 $translator->trans('Montant')           => 'x.montant',
  1105.                 //$translator->trans("Actions") =>  'x.id',
  1106.                 "_identifier_"                          => 'x.id',
  1107.             ]
  1108.         )
  1109.         ->addJoin('x.modeReglement''r'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  1110.         ->addJoin('x.bordereau''b'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  1111.         ->addJoin('x.client''c'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  1112.         ->addJoin('x.commande''fa'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  1113.         ->setWhere(
  1114.             'b.id = :bordereauId',
  1115.             ['bordereauId' => $bordereauId]
  1116.         )
  1117.         ->setRenderers(
  1118.             [
  1119.                 /*
  1120.                 0 => array(
  1121.                     'view' => 'FO/DataTable/lien_modal.html.twig',
  1122.                      'params' => array(
  1123.                             'edit_route'    => 'dtc_reglement_modifier',
  1124.                             'objet' => 'DTCGestionComercialeBundle:Reglement',
  1125.                             'type' => 'reglements',
  1126.                         ),
  1127.                 ),
  1128.                  *
  1129.                  */
  1130.                 => [
  1131.                     'view'   => 'FO/DataTable/date.html.twig',
  1132.                     'params' => [],
  1133.                 ],
  1134.                 => ['view' => 'FO/DataTable/reglement.html.twig'],
  1135.                 /*
  1136.                 2 => array(
  1137.                     'view' => 'FO/DataTable/lien_modal.html.twig',
  1138.                      'params' => array(
  1139.                             'edit_route'    => 'dtc_reglement_modifier',
  1140.                            'objet' => 'DTCGestionComercialeBundle:Reglement',
  1141.                             'type' => 'reglements',
  1142.                         ),
  1143.                 ),
  1144.                  *
  1145.                  */
  1146.                 /*
  1147.                 3 => array(
  1148.                     'view' => 'FO/DataTable/avec_lien_edit_route.html.twig',
  1149.                      'params' => array(
  1150.                             'edit_route'    => 'dtc_facture_afficher',
  1151.                             'objet' => 'DTCGestionComercialeBundle:Facture',
  1152.                             //'id' => 'factures'
  1153.                             'typeDocument' => 'true'
  1154.                         ),
  1155.                 ),
  1156.                 */
  1157.                 //
  1158.                 => [
  1159.                     'view'   => 'FO/DataTable/docs_lies_reglement.html.twig',
  1160.                     'params' => [],
  1161.                 ],
  1162.                 => [
  1163.                     'view'   => 'FO/DataTable/factures_lies_reglement.html.twig',
  1164.                     'params' => [],
  1165.                 ],
  1166.                 => ['view' => 'FO/DataTable/client-reference.html.twig'],
  1167.                 => ['view' => 'FO/DataTable/client.html.twig'],
  1168.                 => ['view' => 'FO/DataTable/prix.html.twig'],
  1169.                 /*
  1170.                 4 => array(
  1171.                     'view' => 'FO/DataTable/actions_modal.html.twig',
  1172.                     'params' => array(
  1173.                             //'edit_route'  => 'dtc_acompte_modifier',
  1174.                             //'supprimer_route'  => 'dtc_acompte_supprimer',
  1175.                             //'id'    => $objet->getId(),
  1176.                             //'redirection'    => $redirection,
  1177.                             //'type'    => $type,
  1178.                             //'entite'    => 'adresse',
  1179.                             //'objet' => "DTCGestionComercialeBundle:Acompte"
  1180.                         ),
  1181.                 ),
  1182.                  *
  1183.                  */
  1184.             ]
  1185.         )
  1186.         ->setOrder("x.id""desc")
  1187.         ->setSearch(true)
  1188.         ->setSearchFields([12345]);
  1189.         return $datatable;
  1190.     }
  1191.     /**
  1192.      * @Route("/vente/reglement-by-bordereau/grid/{bordereauId}", name="dtc_reglement_by_bordereau_liste_grid")
  1193.      */
  1194.     public function gridByBordereauAction(Request $request$bordereauIdDatatable $datatableTranslatorInterface $translator)
  1195.     {
  1196.         //$bordereauId = $request->request->get('bordereauId');
  1197.         return $this->datatableByBordereau($datatable$translator$bordereauId)->execute();
  1198.     }
  1199.     /**
  1200.      * @Route("/vente/reglements/ajouter/caisse", name="dtc_reglement_ajouter_caisse")
  1201.      */
  1202.     public function ajouterReglementCaisseAction(Request $requestEntityManagerInterface $emTranslatorInterface $translatorMouvementCaisseService $serviceMouvementCaisse)
  1203.     {
  1204.         $user $this->getUser();
  1205.         //$data = $request->get('dataTables');
  1206.         $data $request->request->get('dataTables');
  1207.         $ids  $data['actions'];
  1208.         $repo_reglement  $em->getRepository(Acompte::class);
  1209.         $type_mvt_caisse $em->getRepository(TypeMouvementCaisse::class)->find(1);
  1210.         $errors = [];
  1211.         $count  0;
  1212.         //var_dump($data);
  1213.         //\Doctrine\Common\Util\Debug::dump($data);
  1214.         foreach ($ids as $key => $id) {
  1215.             $reglement $repo_reglement->find($id);
  1216.             if (is_object($reglement)) {
  1217.                 if (is_object($reglement->getModeReglement()) && $reglement->getModeReglement()->getId() == 1) {
  1218.                     $count++;
  1219.                     $mouvementCaisse = new MouvementCaisse;
  1220.                     if (is_object($type_mvt_caisse)) {
  1221.                         $mouvementCaisse->setTypeMouvementCaisse($type_mvt_caisse);
  1222.                     }
  1223.                     $mouvementCaisse->setUtilisateur($user);
  1224.                     $montant $reglement->getMontant();
  1225.                     $mouvementCaisse->setMontant(abs($montant));
  1226.                     $nom '';
  1227.                     $commande '';
  1228.                     if ($montant 0) {
  1229.                         $mouvementCaisse->setEntreeSortie(true);
  1230.                         $libelle 'Remboursement';
  1231.                     } else {
  1232.                         $mouvementCaisse->setEntreeSortie(false);
  1233.                         $libelle 'Versement';
  1234.                     }
  1235.                     if (is_object($reglement->getClient())) {
  1236.                         $nom     $reglement->getClient()->getNom().' '.$reglement->getClient()->getPrenom();
  1237.                         $libelle .= ' de '.$nom;
  1238.                     }
  1239.                     if (is_object($reglement->getCommande())) {
  1240.                         $commande $reglement->getCommande()->getReference();
  1241.                         $libelle  .= ' sur '.$commande;
  1242.                     }
  1243.                     $mouvementCaisse->setReglement($reglement);
  1244.                     $mouvementCaisse->setLibelle($libelle);
  1245.                     $serviceMouvementCaisse->ajouterMouvementCaisse($mouvementCaisse);
  1246.                 } else {
  1247.                     $errors[] = 'Le règlement '.$reglement->getId().' ne peut pas être mis en caisse.';
  1248.                 }
  1249.                 //$em->persist($reglement);
  1250.             }
  1251.         }
  1252.         //$em->flush();
  1253.         if (count($errors)) {
  1254.             $this->addFlash(
  1255.                 'warning',
  1256.                 implode(" "$errors)
  1257.             );
  1258.         }
  1259.         if ($count == 1) {
  1260.             $this->addFlash(
  1261.                 'notice',
  1262.                 $translator->trans('Un règlement a été ajouté!')
  1263.             );
  1264.         } elseif ($count 0) {
  1265.             $this->addFlash(
  1266.                 'notice',
  1267.                 $count.' règlements ont été ajoutés!'
  1268.             );
  1269.         }
  1270.         $url $this->generateUrl('dtc_caisse_afficher');
  1271.         return new JsonResponse(['url' => $url'valide' => '1']);
  1272.     }
  1273.     /**
  1274.      * @Route("", name="")
  1275.      */
  1276.     public function listerReglementsEtfacturesAction(Request             $request$clientId$type ""$redirection ""EntityManagerInterface $emDatatable $datatable,
  1277.                                                      TranslatorInterface $translator
  1278.     ) {
  1279.         $repo_objet $em->getRepository(Client::class);
  1280.         $objet      $repo_objet->find($clientId);
  1281.         $tableau_class_cellule[] = ["className" => "visible_export colonne_id""targets" => [0], "visible" => true"orderable" => true];
  1282.         /*
  1283.    $tableau_class_cellule[]=array("className"=>"visible_export colonne_id","targets"=>array(1),"visible"=>true,"orderable"=>false);
  1284.    $tableau_class_cellule[]=array("className"=>"visible_export colonne_id","targets"=>array(2),"visible"=>true,"orderable"=>true);
  1285.    $tableau_class_cellule[]=array("className"=>"visible_export colonne_id","targets"=>array(3),"visible"=>true,"orderable"=>true);
  1286.    $tableau_class_cellule[]=array("orderable"=>false,"className"=>"colonne_id","targets"=>array(4),"visible"=>true);
  1287.    $tableau_class_cellule[]=array("orderable"=>false,"className"=>"colonne_id","targets"=>array(5),"visible"=>true);
  1288.    $tableau_class_cellule[]=array("orderable"=>false,"className"=>"colonne_id","targets"=>array(6),"visible"=>true);
  1289.         $tableau_class_cellule[]=array("orderable"=>false,"className"=>"colonne_id","targets"=>array(7),"visible"=>true);
  1290.         $tableau_class_cellule[]=array("orderable"=>false,"className"=>"colonne_id","targets"=>array(8),"visible"=>true);
  1291.         $tableau_class_cellule[]=array("orderable"=>false,"className"=>"colonne_id","targets"=>array(9),"visible"=>true);
  1292. */
  1293.         $this->datatableReglementsEtFacture($em$datatable$translator$objet$type$redirection);
  1294.         return $this->render(
  1295.             'GestionComerciale/Reglement/listerReglementsEtFactures.html.twig',
  1296.             ['tableauClassColonne' => $tableau_class_cellule"client" => $clientId"type" => $type"redirection" => $redirection"objet" => $objet]
  1297.         );
  1298.     }
  1299.     /**
  1300.      * @Route("/datatable/facture-et-reglements/{client}", name="dtc_datatable_factures_et_reglements")
  1301.      */
  1302.     public function datatableFacturesEtReglementAction(Request $requestClient $clientEntityManagerInterface $em)
  1303.     {
  1304.         $infos       $request->request->all();
  1305.         $draw        floatval($infos['draw']);
  1306.         $length      floatval($infos['length']);
  1307.         $order       $infos['order'];
  1308.         $column      $order[0]['column'];
  1309.         $dir         $order[0]['dir'];
  1310.         $search      $infos['search'];
  1311.         $searchValue $search['value'];
  1312.         $searchRegex $search['regex'];
  1313.         $start       floatval($infos['start']);
  1314.         //$start = 30;
  1315.         $requeteFacture '';
  1316.         $requeteAcompte '';
  1317.         $sortColumn        $column;
  1318.         $sortColumnFacture 'date';
  1319.         $sortColumnAcompte 'dateReglement';
  1320.         $ajouterAcomptes true;
  1321.         $ajouterFactures true;
  1322.         switch ($column) {
  1323.             case 2:
  1324.                 $sortColumnFacture 'date';
  1325.                 $sortColumnAcompte 'dateReglement';
  1326.                 break;
  1327.             case 3:
  1328.                 $sortColumnFacture 'reference';
  1329.                 $sortColumnAcompte 'numTraite';
  1330.                 break;
  1331.             case 5:
  1332.                 $sortColumnFacture 'date';
  1333.                 $sortColumnAcompte 'dateReglement';
  1334.                 break;
  1335.             case 6:
  1336.                 $sortColumnFacture 'commentaire';
  1337.                 $sortColumnAcompte 'commentaire';
  1338.                 break;
  1339.             case 7:
  1340.                 $sortColumnFacture 'total';
  1341.                 $sortColumnAcompte 'montant';
  1342.                 break;
  1343.             case 8:
  1344.                 $sortColumnFacture 'total';
  1345.                 $sortColumnAcompte 'montant';
  1346.                 break;
  1347.             case 9:
  1348.                 $sortColumnFacture 'solde';
  1349.                 $sortColumnAcompte 'solde';
  1350.                 break;
  1351.             case 10:
  1352.                 $sortColumnFacture 'lettrage';
  1353.                 $sortColumnAcompte 'lettrage';
  1354.                 break;
  1355.         }
  1356.         if ($infos['columns'][4]['search']['value'] != '')
  1357.             switch ($infos['columns'][4]['search']['value']) {
  1358.                 case '^Remboursement$':
  1359.                     $requeteAcompte  .= ' AND p.montant < 0';
  1360.                     $ajouterFactures false;
  1361.                     break;
  1362.                 case '^Règlement$':
  1363.                     $requeteAcompte  .= ' AND p.montant > 0';
  1364.                     $ajouterFactures false;
  1365.                     break;
  1366.                 case '^Facture$':
  1367.                     $requeteFacture  .= ' AND p.total > 0';
  1368.                     $ajouterAcomptes false;
  1369.                     break;
  1370.                 case '^Avoir$':
  1371.                     $requeteFacture  .= ' AND p.total < 0';
  1372.                     $ajouterAcomptes false;
  1373.                     break;
  1374.             }
  1375.         if ($infos['columns'][10]['search']['value'] != '') {
  1376.             $requeteFacture .= " AND p.lettrage LIKE '".$infos['columns'][10]['search']['value']."%'";
  1377.             $requeteAcompte .= " AND p.lettrage LIKE '".$infos['columns'][10]['search']['value']."%'";
  1378.         }
  1379.         if ($infos['search']['value'] != '') {
  1380.             $requeteFacture .= " AND p.lettrage LIKE '".$infos['columns'][10]['search']['value']."%'";
  1381.             $requeteAcompte .= " AND p.lettrage LIKE '".$infos['columns'][10]['search']['value']."%'";
  1382.         }
  1383.         $error '';
  1384.         //$error = $infos;
  1385.         $response = new JsonResponse;
  1386.         $donnees = [];
  1387.         /*
  1388.         $facture = array('12','2','19/01/2017','F201700012','Facture','','test','120.00€','','3500','','','','');
  1389.         $donnees[] = $facture;
  1390.         $facture = array('9','1','20/01/2017','F201700012','Facture','','test','120.00€','','3500','','','','');
  1391.         $donnees[] = $facture;
  1392.         $facture = array('536','3','18/01/2017','F201700012','Facture','','test','120.00€','','3500','','','','');
  1393.         $donnees[] = $facture;
  1394.          *
  1395.          */
  1396.         $repo_commande $em->getRepository(Commande::class);
  1397.         $nbFacturesEtAvoirs $repo_commande->getNbFacturesEtAvoirsClient($client);
  1398.         if ($ajouterFactures) {
  1399.             $facturesEtAvoirs $repo_commande->getFacturesEtAvoirsClient($client$start$length$sortColumnFacture$dir$requeteFacture)->getQuery()->getResult();
  1400.         } else {
  1401.             $facturesEtAvoirs = [];
  1402.         }
  1403.         if (count($facturesEtAvoirs) > 0) {
  1404.             foreach ($facturesEtAvoirs as $commande) {
  1405.                 $regOuF    = [];
  1406.                 $regOuF[0] = $commande->getId();
  1407.                 //$regOuF['objet'] = 'commande';
  1408.                 //$regOuF['route'] = 'dtc_facture_afficher';
  1409.                 //$regOuF['route'] = $this->generateUrl('dtc_facture_afficher', array('id'=>$commande->getId()));
  1410.                 if (is_object($commande->getDate())) {
  1411.                     $regOuF[1] = $commande->getDate()->format('U');
  1412.                     $regOuF[2] = $commande->getDate()->format('d/m/Y H:i:s');
  1413.                 } else {
  1414.                     $regOuF[1] = '';
  1415.                     $regOuF[2] = '';
  1416.                 }
  1417.                 //$regOuF[3] = $commande->getReference();
  1418.                 $regOuF[3] = $this->renderView(
  1419.                     'FO/DataTable/avec_lien_edit_route.html.twig',
  1420.                     ['dt_obj' => $commande'edit_route' => 'auto''dt_item' => $commande->getReference()]
  1421.                 );
  1422.                 $regOuF[5] = '';
  1423.                 $regOuF[6] = $commande->getCommentaire();
  1424.                 if ($commande->getAvecTaxe() == 1) {
  1425.                     $montant $commande->getTotalTtc();
  1426.                 } else {
  1427.                     $montant $commande->getTotal() + $commande->getFraisPortSupplementaire() + $commande->getTotalFraisPort();
  1428.                 }
  1429.                 if ($montant 0) {
  1430.                     $regOuF[7] = $this->renderView('FO/DataTable/prix.html.twig', ['dt_item' => abs($montant)]);
  1431.                     $regOuF[8] = '';
  1432.                     $regOuF[4] = 'Facture';
  1433.                     $regOuF[7] .= '<input type="hidden" name="debit[]" value="'.abs($montant).'">';
  1434.                     $regOuF[7] .= '<input type="hidden" name="credit[]" value="0">';
  1435.                 } else {
  1436.                     $regOuF[7] = '';
  1437.                     $regOuF[8] = $this->renderView('FO/DataTable/prix.html.twig', ['dt_item' => abs($montant)]);
  1438.                     $regOuF[4] = 'Avoir';
  1439.                     $regOuF[7] .= '<input type="hidden" name="debit[]" value="0">';
  1440.                     $regOuF[7] .= '<input type="hidden" name="credit[]" value="'.abs($montant).'">';
  1441.                 }
  1442.                 $regOuF[7]  .= '<input type="hidden" name="objet[]" value="commande">';
  1443.                 $regOuF[7]  .= '<input type="hidden" name="id[]" value="'.$commande->getId().'">';
  1444.                 $regOuF[9]  = $this->renderView('FO/DataTable/prix.html.twig', ['dt_item' => $commande->getSolde()]);
  1445.                 $regOuF[10] = $commande->getLettrage();
  1446.                 $regOuF[11] = '';
  1447.                 $regOuF[12] = '';
  1448.                 $regOuF[13] = '';
  1449.                 //$reglementsEtFactures[] = $regOuF;
  1450.                 $donnees[] = $regOuF;
  1451.             }
  1452.         }
  1453.         $repo_acompte           $em->getRepository(Acompte::class);
  1454.         $nbAcomptesEtReglements $repo_acompte->getNbAcomptesEtReglementsClient($client);
  1455.         if ($ajouterAcomptes) {
  1456.             $reglements $repo_acompte->getAcomptesEtReglementsClient($client$start$length$sortColumnAcompte$dir$requeteAcompte)->getQuery()->getResult();
  1457.         } else {
  1458.             $reglements = [];
  1459.         }
  1460.         if (count($reglements) > 0) {
  1461.             foreach ($reglements as $reglement) {
  1462.                 $regOuF    = [];
  1463.                 $regOuF[0] = $reglement->getId();
  1464.                 //$regOuF['objet'] = 'acompte';
  1465.                 $lien      $this->generateUrl('dtc_reglement_modifier', ['id' => $client->getId(), 'objet' => $reglement->getId(), 'type' => 'client''redirection' => 'solde']);
  1466.                 $regOuF[2] = $reglement->getDateReglement()->format('d/m/Y H:i:s');
  1467.                 $regOuF[1] = $reglement->getDateReglement()->format('U');
  1468.                 $regOuF[3] = '<a class="edit-modal" data-target="#conteneur-modal" title="Modifier"href="'.$lien.'">'.$reglement->getNumTraite().'</a>';
  1469.                 $modeReglement $reglement->getModeReglement();
  1470.                 if (is_object($modeReglement)) {
  1471.                     $regOuF[5] = $modeReglement->getLibelle();
  1472.                 } else {
  1473.                     $regOuF[5] = '';
  1474.                 }
  1475.                 $regOuF[6]     = $reglement->getCommentaire();
  1476.                 $montant       floatval($reglement->getMontant());
  1477.                 $od            floatval($reglement->getOperationDiverse());
  1478.                 $montantAvecOD $montant $od;
  1479.                 if ($montant 0) {
  1480.                     $regOuF[7] = '';
  1481.                     $regOuF[8] = $this->renderView('FO/DataTable/prix.html.twig', ['dt_item' => abs($montant), 'od' => $od]);
  1482.                     $regOuF[4] = 'Règlement';
  1483.                     $regOuF[7] .= '<input type="hidden" name="debit[]" value="0">';
  1484.                     $regOuF[7] .= '<input type="hidden" name="credit[]" value="'.abs($montantAvecOD).'">';
  1485.                 } else {
  1486.                     $regOuF[7] = $this->renderView('FO/DataTable/prix.html.twig', ['dt_item' => abs($montant), 'od' => $od]);
  1487.                     $regOuF[8] = '';
  1488.                     $regOuF[4] = 'Remboursement';
  1489.                     $regOuF[7] .= '<input type="hidden" name="debit[]" value="'.abs($montantAvecOD).'">';
  1490.                     $regOuF[7] .= '<input type="hidden" name="credit[]" value="0">';
  1491.                 }
  1492.                 $regOuF[7] .= '<input type="hidden" name="objet[]" value="acompte">';
  1493.                 $regOuF[7] .= '<input type="hidden" name="id[]" value="'.$reglement->getId().'">';
  1494.                 //$regOuF[9] = $reglement->getSolde();
  1495.                 $regOuF[9]  = $this->renderView('FO/DataTable/prix.html.twig', ['dt_item' => $reglement->getSolde()]);
  1496.                 $regOuF[10] = $reglement->getLettrage();
  1497.                 //$regOuF[11] = $reglement->getMouvementEquilibrage();
  1498.                 //$regOuF[12] = $reglement->getHorsErp();
  1499.                 $regOuF[11] = $this->renderView('FO/DataTable/booleen.html.twig', ['dt_item' => $reglement->getMouvementEquilibrage()]);
  1500.                 $regOuF[12] = $this->renderView('FO/DataTable/booleen.html.twig', ['dt_item' => $reglement->getHorsErp()]);
  1501.                 $regOuF[13] = '';
  1502.                 //$reglementsEtFactures[] = $regOuF;
  1503.                 $donnees[] = $regOuF;
  1504.             }
  1505.         }
  1506.         $recordsTotal    $nbAcomptesEtReglements $nbFacturesEtAvoirs;
  1507.         $recordsFiltered $recordsTotal;
  1508.         //Trier le tableau par date
  1509.         foreach ($donnees as $key => $row) {
  1510.             $tabSort[$key] = $row[$sortColumn];
  1511.         }
  1512.         if ($dir == 'desc') {
  1513.             $sort SORT_DESC;
  1514.         } else {
  1515.             $sort SORT_ASC;
  1516.         }
  1517.         if (isset($tabSort)) {
  1518.             array_multisort($tabSort$sort$donnees);
  1519.         }
  1520.         $donneesSlice array_slice($donnees$start$length);
  1521.         $datas = [
  1522.             'draw'            => $draw,
  1523.             'recordsTotal'    => $recordsTotal,
  1524.             'recordsFiltered' => $recordsFiltered,
  1525.             'data'            => $donneesSlice,
  1526.             'start'           => $start,
  1527.             //'order' => array(0=>array("column"=>"1","dir"=>"desc")),
  1528.             'order'           => $order,
  1529.             'length'          => $length,
  1530.             'infos'           => $infos,
  1531.         ];
  1532.         if ($error != '') {
  1533.             $datas['error'] = $error;
  1534.         }
  1535.         $response->setData($datas);
  1536.         return $response;
  1537.     }
  1538.     /**
  1539.      * set datatable configs
  1540.      *
  1541.      * @return \App\Library\Datatable\Util\Datatable
  1542.      */
  1543.     private function datatableReglementsEtFacture(EntityManagerInterface $emDatatable $datatableTranslatorInterface $translator$objet$type ""$redirection "")
  1544.     {
  1545.         $libelle "Document";
  1546.         //if(is_object($objet)) $id = $objet->getId(); else $id="1";
  1547.         $qb $em->createQueryBuilder();
  1548.         $qb->select('x')
  1549.            ->from(Client::class, "x")
  1550.            ->join('x.commandes''f')
  1551.            ->where('x.id = :clientId')
  1552.            ->setParameters(['clientId' => $objet])
  1553.            ->orderBy("x.date""desc");
  1554.         $type_jointure 'x.'.$type;
  1555.         $datatable->setDatatableId('dta-reglementsEtFactures')
  1556.             //->setEntity("DTCClientsBundle:Client", "x")
  1557.                   ->setFields(
  1558.                 [
  1559.                     $translator->trans("ID")               => 'x.id',
  1560.                     $translator->trans("Réf")              => 'f.reference',
  1561.                     $translator->trans("Libellé")          => 'r.libelle',
  1562.                     $translator->trans("Date")             => 'x.date',
  1563.                     $translator->trans("Commande")         => 'f.commandes',
  1564.                     $translator->trans("Qté")              => 'x.qte',
  1565.                     $translator->trans("Prix unitaire HT") => 'x.prixunitaire',
  1566.                     $translator->trans("Remise")           => 'x.remise',
  1567.                     $translator->trans("Total HT")         => 'x.total',
  1568.                     $translator->trans("Action")           => 'x.action',
  1569.                     "_identifier_"                         => 'x.id',
  1570.                 ]
  1571.             )
  1572.             //->addJoin('x.modeReglement', 'r', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  1573.             //->addJoin('x.commande', 'c', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  1574.             //->addJoin('x.client', 'cl', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  1575.             //->addJoin('x.commandes', 'f', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  1576.                   ->setRenderers(
  1577.                 [
  1578.                     => [
  1579.                         'view'   => 'FO/DataTable/heure.html.twig',
  1580.                         'params' => [],
  1581.                     ],
  1582.                     /*
  1583.                     2 => array(
  1584.                         'view' => 'FO/DataTable/prix.html.twig',
  1585.                         'params' => array(
  1586.                             ),
  1587.                     ),
  1588.                     4 => array(
  1589.                         'view' => 'FO/DataTable/docs_lies_reglement.html.twig',
  1590.                          'params' => array(
  1591.                              )
  1592.                         ),
  1593.                     5 => array(
  1594.                         'view' => 'FO/DataTable/reglement_facture_est_paye_solde.html.twig'
  1595.                     ),
  1596.                     7 => array(
  1597.                         'view' => 'FO/DataTable/booleen.html.twig'
  1598.                     ),
  1599.                     8 => array(
  1600.                         'view' => 'FO/DataTable/booleen.html.twig'
  1601.                     ),
  1602.                     9 => array(
  1603.                         'view' => 'FO/DataTable/actions_modal.html.twig',
  1604.                         'params' => array(
  1605.                                 //'edit_route'  => 'dtc_acompte_modifier',
  1606.                                 'supprimer_route'  => 'dtc_acompte_supprimer',
  1607.                                 'id'    => $objet->getId(),
  1608.                                 'redirection'    => $redirection,
  1609.                                 'type'    => $type,
  1610.                                 'entite'    => 'adresse',
  1611.                                 'objet' => "DTCGestionComercialeBundle:Acompte"
  1612.                             ),
  1613.                     ),
  1614. */
  1615.                 ]
  1616.             )
  1617.                   ->setOrder("x.id""desc")
  1618.                   ->setSearch(true)// ->setSearchFields(array(1,2,3,4,5))
  1619.         ;
  1620.         /*
  1621.         $where = $type_jointure.' = :objet and x.typeReglement IN (:typeReglement)';
  1622.                 if($type == "client") {
  1623.                     $params = array('objet' => $objet,'typeReglement'=>array('2','1'));
  1624.                             $where .= ' AND x.reglementParent IS NULL';
  1625.                 }
  1626.                 else {
  1627.                     $params = array('objet' => $objet,'typeReglement'=>array('2'));
  1628.                 }
  1629.                 *
  1630.          */
  1631.         /*
  1632.         $where = 'x.id = :clientId';
  1633.         $params = array('clientId' => $objet);
  1634.                 $datatable->setWhere(
  1635.                          $where,
  1636.                          $params
  1637.                     );
  1638.          *
  1639.          */
  1640.         $datatable->getQueryBuilder()->setDoctrineQueryBuilder($qb);
  1641.         //echo $type_jointure;
  1642.         return $datatable;
  1643.     }
  1644.     /**
  1645.      * Grid action
  1646.      * @return Response
  1647.      */
  1648.     /**
  1649.      * @Route("/vente/reglement-et-factures/grid/{clientId}/{type}/{redirection}", name="dtc_reglement_et_factures_liste_grid")
  1650.      */
  1651.     public function gridReglementsEtFactureAction(Request             $request$clientId ""$type ""$redirection ""EntityManagerInterface $emDatatable $datatable,
  1652.                                                   TranslatorInterface $translator
  1653.     ) {
  1654.         $repo_objet $em->getRepository(Client::class);
  1655.         $objet      $repo_objet->find($clientId);
  1656.         return $this->datatableReglementsEtFacture($em$datatable$translator$objet$type$redirection)->execute();
  1657.     }
  1658.     /**
  1659.      * @Route("/reglement/charger-tableau/{id}/{type}", name="dtc_reglement_charger_tableau")
  1660.      */
  1661.     public function chargerTableauAction(Request $requestClient $client)
  1662.     {
  1663.         $rendu $this->renderView('GestionComerciale/Reglement/charger_tableau.html.twig', ["client" => $client]);
  1664.         return new JsonResponse(['rendu' => $rendu]);
  1665.     }
  1666.     /**
  1667.      * @Route("/solde/charger-tableau/{id}/{type}", name="dtc_solde_charger_tableau")
  1668.      */
  1669.     public function chargerTableauRetFAction(Request $requestClient $clientId)
  1670.     {
  1671.         $rendu $this->renderView('GestionComerciale/Reglement/charger_tableauRetF.html.twig', ["client" => $clientId]);
  1672.         return new JsonResponse(['rendu' => $rendu]);
  1673.     }
  1674.     /**
  1675.      * @Route("/solde/charger-tableau2/{id}/{type}", name="dtc_solde_charger_tableau_2")
  1676.      */
  1677.     public function chargerTableauSoldeClientAction(Request $requestClient $client)
  1678.     {
  1679.         $rendu $this->renderView('GestionComerciale/Reglement/charger_tableau_solde.html.twig', ["client" => $client]);
  1680.         return new JsonResponse(['rendu' => $rendu]);
  1681.     }
  1682. }