<?php
namespace App\Controller\GestionComerciale;
use App\Entity\Clients\Client;
use App\Entity\GestionComerciale\Acompte;
use App\Entity\GestionComerciale\Commande;
use App\Entity\GestionComerciale\ModeReglement;
use App\Entity\GestionComerciale\MouvementCaisse;
use App\Entity\GestionComerciale\TypeMouvementCaisse;
use App\Entity\GestionComerciale\TypeReglement;
use App\Form\GestionComerciale\AcompteType;
use App\Form\GestionComerciale\SupprimerAcompteType;
use App\Form\GestionComerciale\ReglementType;
use App\Library\Datatable\Util\Datatable;
use App\Model\GestionCommerciale\TypeDocumentCommercial;
use App\Security\Voter\EntityVoter;
use App\Service\GestionComerciale\AcompteService;
use App\Service\GestionComerciale\FactureService;
use App\Service\GestionComerciale\MouvementCaisseService;
use App\Service\GestionComerciale\NumerotationDocumentService;
use App\Service\Utilisateur\ColonneTableauService;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Validator\Validator\ValidatorInterface;
use Symfony\Contracts\Translation\TranslatorInterface;
class ReglementController extends AbstractController
{
/**
* @Route("/vente/reglement/client/nouveau/", name="dtc_reglement_client_ajouter")
*/
public function ajouterClientAction(Request $request, EntityManagerInterface $em, TranslatorInterface $translator, ValidatorInterface $validator,
FactureService $serviceFacture, NumerotationDocumentService $numerotationService, AcompteService $acompteService
) {
$parametres = $request->query->all();
$titre_modal = $translator->trans("Nouveau règlement");
$mode = "reglement";
$montant = "";
$factures = [];
$get = $request->query->all();
$page = $request->query->get('page');
$reglement = new Acompte();
$repo_acompte = $em->getRepository(Acompte::class);
$repo_commande = $em->getRepository(Commande::class);
$type_acompte = $em->getRepository(TypeReglement::class)->find(2);
$reglement->setTypeReglement($type_acompte);
$user = $this->getUser();
$reglement->setUtilisateur($user);
$url = $this->generateUrl('dtc_reglement_remise_banque_liste', []);
if (array_key_exists('client', $parametres) && $parametres["client"] != "") {
$client = $em->getRepository(Client::class)->find($parametres["client"]);
if (is_object($client)) {
$reglement->setClient($client);
$url = $this->generateUrl('dtc_client_modifier', ["id" => $client->getId()]);
if (array_key_exists('mode', $parametres) && $parametres["mode"] == "e") {
$titre_modal = $translator->trans("Equilibrage");
$mode = "equilibrage";
} elseif (array_key_exists('mode', $parametres) && $parametres["mode"] == "r") {
$titre_modal = $translator->trans("Remboursement");
$mode = "remboursement";
//$montant = $serviceAcompte->getMontantRembousement($client);
$montant = $acompteService->getSoldeClient($client);
if ($montant < 0) {
$montant = 0;
} else {
$montant = -$montant;
}
if ($request->query->get('remboursement') != "") {
$montant = $request->query->get('remboursement');
$avoir = $repo_commande->find($request->query->get('avoir'));
$reste_du_avoir = $repo_acompte->findOneBy(["avoir" => $avoir]);
if (is_object($reste_du_avoir)) {
$reste_du_avoir->setRemboursement($reglement);
$em->persist($reste_du_avoir);
}
$reglement->setCommande($avoir);
$url = $this->generateUrl('dtc_avoir_modifier', ["id" => $request->query->get('avoir')]);
}
} else {
//if($page != "commande") $factures = $repo_commande->getFacturesNonReglees($client);
if ($page != "commande") {
$factures = $repo_commande->getFacturesEtAvoirsNonReglesEtNonLettres($client);
}
}
//$commandes = array(array('id'=>2272, 'reference'=>'ref1'), array('id'=>2, 'reference'=>'ref2'));
}
}
$montant = round($montant, 2);
$form = $this->createForm(ReglementType::class, $reglement);
$errors = "";
$form->handleRequest($request);
if ($form->isSubmitted()) {
if ($form->isValid()) {
$requestform = $request->request->all();
if (array_key_exists('idReglement', $requestform) && $requestform["idReglement"] != "") {
$accompteasupprimerr = $repo_acompte->findOneBy(['id' => $requestform['idReglement']]);
$em->remove($accompteasupprimerr);
}
$reglement->setNumTraite($numerotationService->generer($reglement));
$em->persist($reglement);
$em->flush();
$client = $reglement->getClient();
if (is_object($client)) {
$soldeClient = $acompteService->getSoldeClient($client);
$reglement->setSolde($soldeClient);
$em->persist($reglement);
$em->flush();
}
if (array_key_exists('mode', $parametres) && $parametres["mode"] == "e") {
} elseif (array_key_exists('mode', $parametres) && $parametres["mode"] == "r") {
if ($request->query->get('remboursement') != "") {
$commentaire = "Remboursement de l'avoir : ".$avoir->getReference();
} else {
$commentaire = "Remboursement des règlements : ";
foreach ($client->getReglements() as $r) {
if ( ! is_object($r->getCommande()) && $r->getEstParent() == false && $r->getMontant() > 0 && ! is_object($r->getRemboursement())) {
$r->setRemboursement($reglement);
$em->persist($r);
$commentaire .= $r->getNumTraite()." ";
}
}
}
$reglement->setCommentaire($commentaire);
$em->persist($reglement);
$em->flush();
if (isset($avoir) && is_object($avoir)) {
$serviceFacture->changerStatutPaiementFacture($avoir);
}
}
//Reglement pour plusieurs factures ou commandes ou or
$montant = $reglement->getMontant();
$montant += floatval($reglement->getOperationDiverse());
$ids = $request->request->get('commandes');
//var_dump($ids);
if (count($ids) > 0) {
//Re-order pour commencer par les avoirs
$commandes = [];
$avoirs = [];
foreach ($ids as $id) {
$commande = $repo_commande->find($id);
if (is_object($commande)) {
$typeDocumentCommercial = $commande->getTypeDocumentCommercial();
if (is_int($typeDocumentCommercial) && $typeDocumentCommercial == 6) {
$commandes[] = $commande;
} elseif (is_int($typeDocumentCommercial) && $typeDocumentCommercial == 7) {
$avoirs[] = $commande;
}
}
}
$commandes = array_merge($avoirs, $commandes);
foreach ($commandes as $commande) {
$resteAregler = $serviceFacture->getMontantReglementFacture($commande);
if ($resteAregler >= $montant) {
$nouveauMontant = $montant;
} else {
$nouveauMontant = $resteAregler;
}
$montant -= $nouveauMontant;
//var_dump($montant);
if ($montant >= 0) {
$reglement->setEstParent(1);
$reg = clone $reglement;
$reg->setEstParent(0);
$reg->setNumTraite($numerotationService->generer($reglement));
$reg->setMontant($nouveauMontant);
$reg->setOperationDiverse(0);
$reg->setReglementParent($reglement);
$reg->setCommande($commande);
if ($nouveauMontant < 0) {
$commentaire = "Remboursement de l'avoir ";
} else {
$commentaire = "Règlement de la facture ";
}
$commentaire .= $commande->getReference()." suite réglement ".$reglement->getNumTraite();
$reg->setCommentaire($commentaire);
if (is_object($commande->getCommande())) {
$reg->setParent($commande->getCommande());
}
$em->persist($reglement);
$em->persist($reg);
$em->flush();
$serviceFacture->changerStatutPaiementFacture($commande);
$client = $reg->getClient();
if (is_object($client)) {
$soldeClient = $acompteService->getSoldeClient($client);
$reg->setSolde($soldeClient);
$em->persist($reg);
$em->flush();
}
}
}
}
if ($reglement->getEstParent() == "1" and round($montant, 2) > 0) {
$reglement_reste_du = clone $reglement;
$reglement_reste_du->setNumTraite($numerotationService->generer($reglement));
$reglement_reste_du->setMontant(round($montant, 2));
$reglement_reste_du->setCommentaire("Reste dû disponible suite réglement ".$reglement->getNumTraite());
$reglement_reste_du->setReglementParent($reglement);
$reglement_reste_du->setCommande(null);
$reglement_reste_du->setEstParent(0);
$em->persist($reglement_reste_du);
$em->flush();
$client = $reglement_reste_du->getClient();
if (is_object($client)) {
$soldeClient = $acompteService->getSoldeClient($client);
$reglement_reste_du->setSolde($soldeClient);
$em->persist($reglement_reste_du);
$em->flush();
}
}
//echo "<div>MONTANT ".$montant."</div>";
$em->flush();
//echo $page;
if ($page == 'commande') {
$montant = $acompteService->getMontantRembousement($client);
$montant = str_replace("-", "", $montant);
$avoir = round($montant, 2);
return new JsonResponse(
['type' => 'reglement', 'IdReglement' => $reglement->getId(), 'avoir' => $avoir, 'rendu' => '', 'valide' => '1', 'url' => '']
);
} else {
if (array_key_exists('table', $get) && $get["table"] != "") {
return new JsonResponse(
['rendu' => '', 'valide' => '1', 'url' => $url, 'type' => 'recharger_datatable', 'id_datatable' => $get["table"]]
);
} else {
$this->addFlash('notice', $translator->trans('Règlement ajouté avec succès !'));
return new JsonResponse(['rendu' => '', 'valide' => '1', 'url' => $url]);
}
}
} else {
$errors = $validator->validate($reglement);
$rendu = $this->renderView('GestionComerciale/Reglement/ajouter-client.html.twig', [
"montant" => $montant,
"mode" => $mode,
'form' => $form->createView(),
'errors' => $errors,
'reglement' => $reglement,
'factures' => $factures,
]);
return new JsonResponse(["montant" => $montant, 'rendu' => $rendu, 'valide' => '0', 'url' => '', 'titre' => $titre_modal]
);
}
}
$rendu = $this->renderView(
'GestionComerciale/Reglement/ajouter-client.html.twig',
[
"montant" => $montant,
"mode" => $mode,
'form' => $form->createView(),
'errors' => $errors,
'reglement' => $reglement,
'factures' => $factures,
]
);
return new JsonResponse(
["montant" => $montant, 'rendu' => $rendu, 'valide' => '0', 'url' => '', 'titre' => $titre_modal]
);
}
/**
* @Route("/vente/reglement/nouveau/{id}/{type}", name="dtc_reglement_ajouter")
*/
public function ajouterAction(Request $request, $id, $type = "", EntityManagerInterface $em, TranslatorInterface $translator, ValidatorInterface $validator,
NumerotationDocumentService $numerotationService, AcompteService $acompteService, FactureService $serviceFacture
) {
$titre_modal = $translator->trans("Nouveau règlement");
$reglement = new Acompte;
$type_acompte = $em->getRepository(TypeReglement::class)->find(2);
$reglement->setTypeReglement($type_acompte);
$user = $this->getUser();
$reglement->setUtilisateur($user);
$repo_objet = $em->getRepository(Commande::class);
$objet = $repo_objet->find($id);
$reglement->setCommande($objet);
$client = $objet->getClient();
$delai = $client->getDelaiPaiement();
$reglement->setDelaiPaiement($delai);
$moderegle = $client->getmodeReglement();
//$reglement->setModeReglement($moderegle);
$reglement->setModeReglement(null);
$reglement->setClient($client);
$form = $this->createForm(AcompteType::class, $reglement);
$errors = "";
$form->handleRequest($request);
if ($form->isSubmitted()) {
if ($form->isValid()) {
$url = $this->generateUrl('dtc_facture_afficher', ['id' => $objet->getId(), 'tab' => 'reglements']);
//$this->generateUrl('dtc_ordre_reparation_modifier', array('id' => $objet->getId(),'tab'=>'acomptes'));
$totalRestant = $objet->getTotalTtc();
if (is_object($objet->getCommande())) {
foreach ($objet->getCommande()->getAcomptes() as $a) {
$totalRestant = $totalRestant - $a->getMontant();
}
}
$montant = $reglement->getMontant();
//echo "<div>(".$montant.") (".$totalRestant.")</div>";
//echo "<div>(".$montant.") AAA ".$totalRestant - $montant." (".$totalRestant.")</div>";
if ($totalRestant - $montant > 0 and 1 != 1) {
$type_acompte = $em->getRepository(TypeReglement::class)->find(1);
$reglement->setCommande($objet->getCommande());
$reglement->setTypeReglement($type_acompte);
$reglement->setCommentaire(
"Acompte de ".$reglement->getMontant()."€ versé pour la Commande : ".$objet->getCommande()->getReference()."<br/>".$reglement->getCommentaire()
);
} else {
$reglement->setCommande($objet);
if (is_object($objet->getCommande())) {
$reglement->setParent($objet->getCommande());
}
$reglement->setCommentaire("Règlement de ".$reglement->getMontant()."€ versé pour la Facture : ".$objet->getReference()."<br/>".$reglement->getCommentaire());
}
$nom = $client->getPrenom().' '.$client->getNom();
$reglement->setNomClient($nom);
$reglement->setClient($client);
$reglement->setNumTraite($numerotationService->generer($reglement));
$em->persist($reglement);
$em->flush();
$client = $reglement->getClient();
if (is_object($client) && ! is_object($client->getCompteMarketPlace())) {
$soldeClient = $acompteService->getSoldeClient($client);
$reglement->setSolde($soldeClient);
$em->persist($reglement);
$em->flush();
}
$commande = $reglement->getCommande();
if (is_int($commande->getTypeDocumentCommercial()) && in_array($commande->getTypeDocumentCommercial(), [TypeDocumentCommercial::FACTURE, TypeDocumentCommercial::AVOIR])) {//facture
$serviceFacture->changerStatutPaiementFacture($commande);
}
$this->addFlash(
'notice',
$translator->trans('Règlement ajouté avec succès !')
);
return new JsonResponse(['rendu' => '', 'valide' => '1', 'url' => $url]);
} else {
$errors = $validator->validate($reglement);
$rendu = $this->renderView(
'GestionComerciale/Reglement/ajouter.html.twig',
['form' => $form->createView(), 'errors' => $errors, 'id' => $id, 'type' => $type, 'objet' => $objet]
);
return new JsonResponse(['rendu' => $rendu, 'valide' => '0', 'url' => '', 'titre' => $titre_modal]);
}
}
$rendu = $this->renderView(
'GestionComerciale/Reglement/ajouter.html.twig',
['form' => $form->createView(), 'errors' => $errors, 'id' => $id, 'type' => $type, 'objet' => $objet]
);
return new JsonResponse(['rendu' => $rendu, 'valide' => '0', 'url' => '', 'titre' => $titre_modal]);
//return $this->render('GestionComerciale/Reglement/ajouter.html.twig', array('form' => $form->createView(),'errors'=>$errors,'id'=>$id,'type'=>$type));
}
/**
* @Route("/vente/reglement/modifier/{objet}/{id}/{type}", name="dtc_reglement_modifier")
*/
public function modifierAction(Request $request, Acompte $objet, $id, $type, EntityManagerInterface $em, TranslatorInterface $translator, ValidatorInterface $validator,
FactureService $serviceFacture, AcompteService $acompteService, NumerotationDocumentService $numerotationService,
MouvementCaisseService $serviceMouvementCaisse
) {
$reglement = $objet;
$repo_objet = $em->getRepository(Commande::class);
$objet = $objet->getCommande();
$titre_modal = $translator->trans("Modifier règlement");
$user = $this->getUser();
$reglement->setUtilisateur($user);
$form = $this->createForm(AcompteType::class, $reglement);
$errors = "";
//si le reglement est lié à un mouvement de caisse ou à un bordereau, il n'est plus modifiable
$repo_mvt_caisse = $em->getRepository(MouvementCaisse::class);
$mouvementCaisse = $repo_mvt_caisse->findOneBy(['reglement' => $reglement]);
if (is_object($reglement->getBordereau()) || is_object($mouvementCaisse)) {
$this->addFlash(
'warning',
$translator->trans('Le règlement n\'est plus modifiable!')
);
$rendu = $this->renderView(
'GestionComerciale/Reglement/ajouter.html.twig',
['form' => $form->createView(), 'errors' => $errors, 'id' => $id, 'type' => $type, 'nonModifiable' => 1, 'reglement' => $reglement]
);
return new JsonResponse(['rendu' => $rendu, 'valide' => '0', 'url' => '', 'titre' => $titre_modal]);
}
$modificationModeReglement = false;
$modificationMontant = false;
$modeReglementInitial = $reglement->getModeReglement();
$montantInitial = $reglement->getMontant();
$form->handleRequest($request);
if ($modeReglementInitial->getId() != $reglement->getModeReglement()->getId()) {
$modificationModeReglement = true;
}
if ($modificationMontant != $reglement->getMontant()) {
$modificationMontant = true;
}
if ($form->isSubmitted()) {
$droit = $this->isGranted(EntityVoter::UPDATE, Acompte::class);
if ( ! $droit) {
$rendu = $this->renderView(
'GestionComerciale/Reglement/ajouter.html.twig',
['form' => $form->createView(), 'errors' => $errors, 'id' => $id, 'type' => $type, 'objet' => $objet]
);
return new Response(json_encode(['rendu' => $rendu, 'valide' => '0', 'url' => '', 'titre' => $titre_modal]));
}
if ($form->isValid()) {
//Modification du mode de reglement
if ($modificationModeReglement) {
$reglement->setNumTraite($numerotationService->generer($reglement));
//Si l'acompte était lié à un mouvement de caisse, il faut supprimer le mouvement de caisse
$repo_mvt_caisse = $em->getRepository(MouvementCaisse::class);
$mouvementCaisse = $repo_mvt_caisse->findOneBy(['reglement' => $reglement]);
$commentaire = $reglement->getCommentaire();
$date = new \Datetime;
$commentaire .= '. Modification du mode de reglement le '.$date->format('d/m/Y H:i').' par '.$user->getNom().' '.$user->getPrenom();
$reglement->setCommentaire($commentaire);
//Il existe un mouvement de caisse
if (is_object($mouvementCaisse)) {
$serviceMouvementCaisse->supprimerMouvementCaisse($mouvementCaisse);
}
//Si c'est un reglement en especes, il faut creer le mouvement de caisse
if (1 != 1 && is_object($reglement->getModeReglement()) && $reglement->getModeReglement()->getId() == 1) {
$mouvementCaisse = new MouvementCaisse;
$type_mvt_caisse = $em->getRepository(TypeMouvementCaisse::class)->find(1);
if (is_object($type_mvt_caisse)) {
$mouvementCaisse->setTypeMouvementCaisse($type_mvt_caisse);
}
$mouvementCaisse->setUtilisateur($user);
$montant = $reglement->getMontant();
$mouvementCaisse->setMontant(abs($montant));
$nom = '';
$commande = '';
if ($montant < 0) {
$mouvementCaisse->setEntreeSortie(true);
$libelle = 'Remboursement';
} else {
$mouvementCaisse->setEntreeSortie(false);
$libelle = 'Versement';
}
if (is_object($reglement->getClient())) {
$nom = $reglement->getClient()->getNom().' '.$reglement->getClient()->getPrenom();
$libelle .= ' de '.$nom;
}
if (is_object($reglement->getCommande())) {
$commande = $reglement->getCommande()->getReference();
$libelle .= ' sur '.$commande;
}
$mouvementCaisse->setReglement($reglement);
$mouvementCaisse->setLibelle($libelle);
$serviceMouvementCaisse->ajouterMouvementCaisse($mouvementCaisse);
}
}
//Modification du montant
if ($modificationMontant) {
//Supprimer les reglements enfants
$reglementsEnfant = $reglement->getReglementsEnfant();
$commandes = [];
if (count($reglementsEnfant) > 0) {
$commandes = [];
$avoirs = [];
foreach ($reglementsEnfant as $reglementEnfant) {
$commandeTmp = $reglementEnfant->getCommande();
if (is_object($commandeTmp)) {
$typeDocumentCommercial = $commandeTmp->getTypeDocumentCommercial();
if (is_int($typeDocumentCommercial) && $typeDocumentCommercial == 6) {
$commandes[] = $commandeTmp;
} elseif (is_int($typeDocumentCommercial) && $typeDocumentCommercial == 7) {
$avoirs[] = $commandeTmp;
}
}
$em->remove($reglementEnfant);
}
$commandes = array_merge($avoirs, $commandes);
$em->flush();
}
//Creer les reglements enfants
$montant = $reglement->getMontant();
if (count($commandes) > 0) {
foreach ($commandes as $commande) {
$resteAregler = $serviceFacture->getMontantReglementFacture($commande);
if ($resteAregler >= $montant) {
$nouveauMontant = $montant;
} else {
$nouveauMontant = $resteAregler;
}
$montant -= $nouveauMontant;
//var_dump($montant);
if ($montant >= 0) {
$reglement->setEstParent(1);
$reg = clone $reglement;
$reg->setEstParent(0);
$reg->setNumTraite($numerotationService->generer($reglement));
$reg->setMontant($nouveauMontant);
$reg->setReglementParent($reglement);
$reg->setCommande($commande);
if ($nouveauMontant < 0) {
$commentaire = "Remboursement de l'avoir ";
} else {
$commentaire = "Règlement de la facture ";
}
$commentaire .= $commande->getReference()." suite réglement ".$reglement->getNumTraite();
$reg->setCommentaire($commentaire);
if (is_object($commande->getCommande())) {
$reg->setParent($commande->getCommande());
}
$em->persist($reglement);
$em->persist($reg);
$em->flush();
$serviceFacture->changerStatutPaiementFacture($commande);
$client = $reg->getClient();
if (is_object($client)) {
$soldeClient = $acompteService->getSoldeClient($client);
$reg->setSolde($soldeClient);
$em->persist($reg);
$em->flush();
}
}
}
}
if ($reglement->getEstParent() == "1" and round($montant, 2) > 0) {
$reglement_reste_du = clone $reglement;
$reglement_reste_du->setNumTraite($numerotationService->generer($reglement));
$reglement_reste_du->setMontant(round($montant, 2));
$reglement_reste_du->setCommentaire("Reste dû disponible suite réglement ".$reglement->getNumTraite());
$reglement_reste_du->setReglementParent($reglement);
$reglement_reste_du->setCommande(null);
$reglement_reste_du->setEstParent(0);
$em->persist($reglement_reste_du);
$em->flush();
$client = $reglement_reste_du->getClient();
if (is_object($client)) {
$soldeClient = $acompteService->getSoldeClient($client);
$reglement_reste_du->setSolde($soldeClient);
$em->persist($reglement_reste_du);
$em->flush();
}
}
//Si l'acompte était lié à un mouvement de caisse, il faut supprimer le mouvement de caisse et le recréer
$repo_mvt_caisse = $em->getRepository(MouvementCaisse::class);
$mouvementCaisse = $repo_mvt_caisse->findOneBy(['reglement' => $reglement]);
$commentaire = $reglement->getCommentaire();
$date = new \Datetime;
$commentaire .= '. Modification du montant le '.$date->format('d/m/Y H:i').' par '.$user->getNom().' '.$user->getPrenom();
$reglement->setCommentaire($commentaire);
//Il existe un mouvement de caisse
if (is_object($mouvementCaisse)) {
$serviceMouvementCaisse->supprimerMouvementCaisse($mouvementCaisse);
}
//Si c'est un reglement en especes, il faut creer le mouvement de caisse
if (is_object($reglement->getModeReglement()) && $reglement->getModeReglement()->getId() == 1) {
$mouvementCaisse = new MouvementCaisse;
$type_mvt_caisse = $em->getRepository(TypeMouvementCaisse::class)->find(1);
if (is_object($type_mvt_caisse)) {
$mouvementCaisse->setTypeMouvementCaisse($type_mvt_caisse);
}
$mouvementCaisse->setUtilisateur($user);
$montant = $reglement->getMontant();
$mouvementCaisse->setMontant(abs($montant));
$nom = '';
$commande = '';
if ($montant < 0) {
$mouvementCaisse->setEntreeSortie(true);
$libelle = 'Remboursement';
} else {
$mouvementCaisse->setEntreeSortie(false);
$libelle = 'Versement';
}
if (is_object($reglement->getClient())) {
$nom = $reglement->getClient()->getNom().' '.$reglement->getClient()->getPrenom();
$libelle .= ' de '.$nom;
}
if (is_object($reglement->getCommande())) {
$commande = $reglement->getCommande()->getReference();
$libelle .= ' sur '.$commande;
}
$mouvementCaisse->setReglement($reglement);
$mouvementCaisse->setLibelle($libelle);
$serviceMouvementCaisse->ajouterMouvementCaisse($mouvementCaisse);
}
}
//$reglement->setCommande($objet);
if ($type == 'reglements') {
$url = $this->generateUrl('dtc_reglement_remise_banque_liste');
} elseif ($type == 'client') {
$url = $this->generateUrl('dtc_client_modifier', ['id' => $reglement->getClient()->getId(), 'tab' => 'solde']);
} else {
$url = $this->generateUrl('dtc_commande_modifier', ['id' => $objet->getId(), 'tab' => 'reglements']);
}
$em->persist($reglement);
$em->flush();
$client = $reglement->getClient();
if (is_object($client)) {
$soldeClient = $acompteService->getSoldeClient($client);
$reglement->setSolde($soldeClient);
$em->persist($reglement);
$em->flush();
}
$commande = $reglement->getCommande();
if (is_object($commande) && is_int($commande->getTypeDocumentCommercial()) && $commande->getTypeDocumentCommercial() == TypeDocumentCommercial::FACTURE) {//facture
$serviceFacture->changerStatutPaiementFacture($commande);
}
$this->addFlash(
'notice',
$translator->trans('Règlement modifié avec succès !')
);
return new JsonResponse(['rendu' => '', 'valide' => '1', 'url' => $url]);
} else {
$errors = $validator->validate($reglement);
$rendu = $this->renderView(
'GestionComerciale/Reglement/ajouter.html.twig',
['form' => $form->createView(), 'errors' => $errors, 'id' => $id, 'type' => $type, 'objet' => $objet, 'reglement' => $reglement]
);
return new JsonResponse(['rendu' => $rendu, 'valide' => '0', 'url' => '', 'titre' => $titre_modal]);
}
}
$rendu = $this->renderView(
'GestionComerciale/Reglement/ajouter.html.twig',
['form' => $form->createView(), 'errors' => $errors, 'id' => $id, 'type' => $type, 'objet' => $objet, 'reglement' => $reglement]
);
return new JsonResponse(['rendu' => $rendu, 'valide' => '0', 'url' => '', 'titre' => $titre_modal]);
}
/**
* @Route("/vente/reglement/supprimer/{objet}/{id}/{type}", name="dtc_reglement_supprimer")
*/
public function supprimerAction(Request $request, Acompte $objet, $id, $type, EntityManagerInterface $em, TranslatorInterface $translator, ValidatorInterface $validator,
MouvementCaisseService $serviceMouvementCaisse, FactureService $serviceFacture
) {
$reglement = $objet;
$titre_modal = $translator->trans("Demande de confirmation");
$user = $this->getUser();
$form = $this->createForm(SupprimerAcompteType::class, $reglement);
$errors = "";
$form->handleRequest($request);
if ($form->isSubmitted()) {
if ($form->isValid()) {
$commande = $reglement->getCommande();
$reglementsEnfant = $reglement->getReglementsEnfant();
$nbEnfants = count($reglementsEnfant);
$supprimable = true;
if ($nbEnfants > 0) {
if (count($nbEnfants) == 1) {
foreach ($reglementsEnfant as $reglementEnfant) {
if ($reglementEnfant->getMontant() == $reglement->getMontant()) {
$em->remove($reglementEnfant);
$em->flush();
} else {
$supprimable = false;
}
}
}
}
if ($supprimable) {
$em->remove($reglement);
$em->flush();
//Si reglement en especes il faut supprimer le mouvement de caisse
if (is_object($reglement->getModeReglement()) && $reglement->getModeReglement()->getId() == 1) {
$repo_mvt_caisse = $em->getRepository(MouvementCaisse::class);
$mouvementCaisse = $repo_mvt_caisse->findOneBy(['reglement' => $reglement]);
//Il existe un mouvement de caisse
if (is_object($mouvementCaisse)) {
$serviceMouvementCaisse->supprimerMouvementCaisse($mouvementCaisse);
}
}
if (is_int($commande->getTypeDocumentCommercial()) && $commande->getTypeDocumentCommercial() == TypeDocumentCommercial::FACTURE) {//facture
$serviceFacture->changerStatutPaiementFacture($commande);
}
$this->addFlash(
'notice',
'Règlement supprimé avec succès !'.$nbEnfants.'///'
);
} else {
$this->addFlash(
'warning',
$translator->trans('Règlement non supprimable !')
);
}
if ($type == 'reglements') {
$url = $this->generateUrl('dtc_reglement_remise_banque_liste');
} else {
$url = $this->generateUrl('dtc_commande_modifier', ['id' => $id, 'tab' => 'acomptes']);
}
return new JsonResponse(['rendu' => '', 'valide' => '1', 'url' => $url]);
} else {
$errors = $validator->validate($reglement);
$rendu = $this->renderView(
'FO/Supprimer/supprimer.html.twig',
['form' => $form->createView(), 'errors' => $errors, 'id' => $id, 'type' => $type, 'objet' => $objet]
);
return new JsonResponse(['rendu' => $rendu, 'valide' => '0', 'url' => '', 'titre' => $titre_modal]);
}
}
$rendu = $this->renderView('FO/Supprimer/supprimer.html.twig', ['form' => $form->createView(), 'errors' => $errors, 'id' => $id, 'type' => $type, 'objet' => $objet]);
return new JsonResponse(['rendu' => $rendu, 'valide' => '0', 'url' => '', 'titre' => $titre_modal]);
}
/**
* @Route("/vente/reglement/{id}/{type}", name="dtc_reglement_liste")
*/
public function listerAction(Request $request, $id, $type = "", $redirection = "", EntityManagerInterface $em, Datatable $datatable, TranslatorInterface $translator)
{
if ($type == "client") {
$repo_objet = $em->getRepository(Client::class);
$objet = $repo_objet->find($id);
} else {
$repo_objet = $em->getRepository(Commande::class);
$objet = $repo_objet->find($id);
}
$tableau_class_cellule[] = ["className" => "visible_export colonne_id", "targets" => [0], "visible" => true, "orderable" => true];
$tableau_class_cellule[] = ["className" => "visible_export colonne_id text-center", "targets" => [1], "visible" => true, "orderable" => false];
$tableau_class_cellule[] = ["className" => "visible_export colonne_id", "targets" => [2], "visible" => true, "orderable" => true];
$tableau_class_cellule[] = ["className" => "visible_export colonne_id", "targets" => [3], "visible" => true, "orderable" => true];
$tableau_class_cellule[] = ["orderable" => false, "className" => "colonne_id", "targets" => [4], "visible" => true];
$tableau_class_cellule[] = ["orderable" => false, "className" => "colonne_id", "targets" => [5], "visible" => true];
$tableau_class_cellule[] = ["orderable" => false, "className" => "colonne_id", "targets" => [6], "visible" => true];
$tableau_class_cellule[] = ["orderable" => false, "className" => "colonne_id ", "targets" => [7], "visible" => true];
$tableau_class_cellule[] = ["orderable" => false, "className" => "colonne_id", "targets" => [8], "visible" => true];
$tableau_class_cellule[] = ["orderable" => false, "className" => "colonne_id", "targets" => [9], "visible" => true];
$this->datatable($datatable, $translator, $objet, $type);
return $this->render(
'GestionComerciale/Reglement/lister.html.twig',
['tableauClassColonne' => $tableau_class_cellule, "id" => $id, "type" => $type, "redirection" => $redirection, "objet" => $objet]
);
}
/**
* set datatable configs
*
* @return \App\Library\Datatable\Util\Datatable
*/
private function datatable(Datatable $datatable, TranslatorInterface $translator, $objet, $type = "", $redirection = "")
{
$libelle = "Facture";
if ($type == "client") {
$libelle = "Document";
}
//if(is_object($objet)) $id = $objet->getId(); else $id="1";
$type_jointure = 'x.'.$type;
$datatable->setDatatableId('dta-reglements')
->setEntity(Acompte::class, "x")
->setFields(
[
$translator->trans("N° règlement") => 'x.numTraite',
$translator->trans("Date") => 'x.dateReglement',
$translator->trans("Montant") => 'x.montant',
$translator->trans("Mode de Règlement") => 'r.libelle',
$libelle => 'c.reference',
$translator->trans("Payé ?") => 'x.id',
$translator->trans("Commentaire") => 'x.commentaire',
$translator->trans("equilibrage") => 'x.mouvementEquilibrage',
$translator->trans("hors erp") => 'x.horsErp',
$translator->trans("Actions") => 'x.id',
"_identifier_" => 'x.id',
]
)
->addJoin('x.modeReglement', 'r', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->addJoin('x.commande', 'c', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->setRenderers(
[
0 => [
'view' => 'FO/DataTable/reglement-libelle.html.twig',
'params' => [],
],
1 => [
'view' => 'FO/DataTable/heure.html.twig',
'params' => [],
],
2 => [
'view' => 'FO/DataTable/reglement-prix.html.twig',
'params' => [],
],
/*
4 => array(
'view' => 'FO/DataTable/avec_lien_edit_route.html.twig',
'params' => array(
'edit_route' => 'dtc_facture_afficher',
'objet' => 'DTCGestionComercialeBundle:Facture',
//'id' => 'factures'
'typeDocument' => 'true'
),
),
*
*/
4 => [
'view' => 'FO/DataTable/docs_lies_reglement.html.twig',
'params' => [],
],
5 => [
'view' => 'FO/DataTable/reglement_facture_est_paye_solde.html.twig',
],
7 => [
'view' => 'FO/DataTable/booleen.html.twig',
],
8 => [
'view' => 'FO/DataTable/booleen.html.twig',
],
9 => [
'view' => 'FO/DataTable/actions_modal.html.twig',
'params' => [
'edit_route' => 'dtc_reglement_modifier',
'supprimer_route' => 'dtc_acompte_supprimer',
'id' => $objet->getId(),
'redirection' => $redirection,
'type' => $type,
'entite' => 'acompte',
'objet' => Acompte::class,
],
],
]
)
->setOrder("x.id", "desc")
->setSearch(true)
->setSearchFields([1, 2, 3, 4, 5]);
$where = $type_jointure.' = :objet and x.typeReglement IN (:typeReglement)';
if ($type == "client") {
$params = ['objet' => $objet->getId(), 'typeReglement' => ['2', '1']];
$where .= ' AND x.reglementParent IS NULL';
} else {
$params = ['objet' => $objet->getId(), 'typeReglement' => ['2']];
}
//var_dump($where);
//var_dump($params);
$datatable->setWhere(
$where,
$params
);
//echo $type_jointure;
return $datatable;
}
/**
* Grid action
* @return Response
*/
/**
* @Route("/vente/reglement/grid/{id}/{type}/{redirection}", name="dtc_reglement_liste_grid")
*/
public function gridAction(Request $request, $id = "", $type = "", $redirection = "", EntityManagerInterface $em, TranslatorInterface $translator, Datatable $datatable)
{
if ($type == "client") {
$repo_objet = $em->getRepository(Client::class);
$objet = $repo_objet->find($id);
} else {
$repo_objet = $em->getRepository(Commande::class);
$objet = $repo_objet->find($id);
}
return $this->datatable($datatable, $translator, $objet, $type, $redirection)->execute();
}
/**
* @Route("/vente/reglement-remise-banque", name="dtc_reglement_remise_banque_liste")
*/
public function listerReglementRemiseBanqueAction(Request $request, $type = '', $bordereauId = '', EntityManagerInterface $em, ColonneTableauService $serviceColonneTableau,
Datatable $datatable, TranslatorInterface $translator
) {
$tableau_class_cellule[] = ["className" => "colonne_id", "targets" => [0], "visible" => true, "orderable" => false];
$tableau_class_cellule[] = [
"className" => "visible_export colonne_id",
"targets" => [1],
// TODO CHANGE THIS
"visible" => $serviceColonneTableau->getColonneUtilisateur("DTCGestionComercialeBundle:Reglement", "id"),
"orderable" => true,
];
$tableau_class_cellule[] = [
"className" => "visible_export colonne_id text-center",
"targets" => [2],
"visible" => $serviceColonneTableau->getColonneUtilisateur("DTCGestionComercialeBundle:Reglement", "date"),
"orderable" => true,
];
$tableau_class_cellule[] = [
"className" => "visible_export colonne_id text-center",
"targets" => [3],
"visible" => $serviceColonneTableau->getColonneUtilisateur("DTCGestionComercialeBundle:Reglement", "echeance"),
"orderable" => true,
];
$tableau_class_cellule[] = [
"className" => "visible_export colonne_id",
"targets" => [4],
"visible" => $serviceColonneTableau->getColonneUtilisateur("DTCGestionComercialeBundle:Reglement", "modeReglement"),
"orderable" => true,
];
$tableau_class_cellule[] = [
"className" => "visible_export colonne_id",
"targets" => [5],
"visible" => $serviceColonneTableau->getColonneUtilisateur("DTCGestionComercialeBundle:Reglement", "numReglement"),
"orderable" => true,
];
$tableau_class_cellule[] = [
"className" => "visible_export colonne_id",
"targets" => [6],
"visible" => $serviceColonneTableau->getColonneUtilisateur("DTCGestionComercialeBundle:Reglement", "numPiece"),
"orderable" => true,
];
$tableau_class_cellule[] = [
"className" => "visible_export colonne_id",
"targets" => [7],
"visible" => $serviceColonneTableau->getColonneUtilisateur("DTCGestionComercialeBundle:Reglement", "client"),
"orderable" => true,
];
$tableau_class_cellule[] = [
"className" => "visible_export colonne_id text-right",
"targets" => [8],
"visible" => $serviceColonneTableau->getColonneUtilisateur("DTCGestionComercialeBundle:Reglement", "montant"),
"orderable" => true,
];
$tableau_class_cellule[] = [
"className" => "visible_export colonne_id",
"targets" => [9],
"visible" => $serviceColonneTableau->getColonneUtilisateur("DTCGestionComercialeBundle:Reglement", "choixBanque"),
"orderable" => true,
];
$tableau_class_cellule[] = ["orderable" => false, "className" => "colonne_id", "targets" => [10], "visible" => true];
/*
$tableau_class_cellule[]=array("className"=>"colonne_id","targets"=>array(1),"visible"=>$serviceColonneTableau->getColonneUtilisateur("DTCGestionComercialeBundle:ModeReglement","id"));
$tableau_class_cellule[]=array("className"=>"colonne_id","targets"=>array(2),"visible"=>$serviceColonneTableau->getColonneUtilisateur("DTCGestionComercialeBundle:ModeReglement","libelle"));
*
*/
$this->datatableReglementRemiseBanque($datatable, $translator, $bordereauId);
if ($bordereauId == '') {
$typesReglement = $em->getRepository(ModeReglement::class)->findAll();
return $this->render(
'GestionComerciale/Reglement/lister-remise-banque.html.twig',
['tableauClassColonne' => $tableau_class_cellule, 'type' => $type, 'typesReglement' => $typesReglement]
);
} else {
return $this->render(
'GestionComerciale/Reglement/listerByBordereau.html.twig',
['tableauClassColonne' => $tableau_class_cellule, 'type' => $type, 'bordereauId' => $bordereauId]
);
}
}
private function datatableReglementRemiseBanque(Datatable $datatable, TranslatorInterface $translator, $bordereauId = '')
{
$datatable->setDatatableId('dta-reglements')
->setEntity(Acompte::class, "x")
->setFields(
[
$translator->trans("ID") => 'x.id',
$translator->trans("Date") => 'x.date',
$translator->trans("Echéance") => 'x.dateEcheance',
$translator->trans("Mode de règlement") => "r.libelle",
$translator->trans("Equipier") => "t.email",
$translator->trans("N° règlement") => "x.numTraite",
$translator->trans("N° pièce") => 'fa.reference',
$translator->trans('Client') => 'c.nom',
$translator->trans('Montant') => 'x.montant',
$translator->trans('Choix Banque') => 'cbs.id',
$translator->trans("Actions") => 'x.id',
"_identifier_" => 'x.id',
]
)
->addJoin('x.client', 'c', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->addJoin('x.mouvementCaisse', 'mc', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->addJoin('x.compteBancaireSociete', 'cbs', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
//->addJoin('x.factures', 'fa', \Doctrine\ORM\Query\Expr\Join::INNER_JOIN)
->addJoin('x.commande', 'fa', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->addJoin('x.utilisateur', 't', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->addJoin('x.modeReglement', 'r', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN);
/*
->setWhere(
$type_jointure.' = :objet and x.typeReglement = :typeReglement',
array('objet' => $objet,'typeReglement'=>'2')
)
*
*/
$params = [
'edit_route' => 'dtc_lcr_modifier',
'objet' => Acompte::class,
];
$multiple = [];
if ($bordereauId == '') {
$multiple = [
'generer-bordereau' => [
'title' => 'Générer les bordereaux',
'route' => 'dtc_bordereau_liste_ajouter',
],
'reglement-ajouter-caisse' => [
'title' => 'Passer en caisse',
'route' => 'dtc_reglement_ajouter_caisse',
],
/*
'delete' => array(
'title' => 'Supprimer',
'route' => 'dtc_acompte_supprimer'
),
*
*/
];
$params['supprimer_route'] = 'dtc_lcr_supprimer';
$datatable->setWhere(
'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)'
);
} else {
$redirection = $this->generateUrl('dtc_bordereau_modifier', ['id' => 3, 'tab' => 'lcr']);
$multiple = [
'aucune-action' => [
'title' => 'Non disponible',
'route' => 'dtc_fo_datatable_multiple_aucune_action',
],
];
$datatable->setWhere('x.bordereau = '.$bordereauId);
}
$datatable->setRenderers(
[
0 => [
'view' => 'FO/DataTable/lien_modal.html.twig',
'params' => [
'edit_route' => 'dtc_reglement_modifier',
'objet' => 'DTCGestionComercialeBundle:Reglement',
'type' => 'reglements',
],
],
1 => ['view' => 'FO/DataTable/heure.html.twig'],
2 => ['view' => 'FO/DataTable/heure.html.twig'],
3 => ['view' => 'FO/DataTable/reglement.html.twig'],
4 => [
'view' => 'FO/DataTable/utilisateur.html.twig',
],
5 => [
'view' => 'FO/DataTable/lien_modal.html.twig',
'params' => [
'edit_route' => 'dtc_reglement_modifier',
'objet' => 'DTCGestionComercialeBundle:Reglement',
'type' => 'reglements',
],
],
/*
5 => array(
'view' => 'FO/DataTable/avec_lien_edit_route.html.twig',
'params' => array(
'edit_route' => 'dtc_facture_afficher',
'objet' => 'DTCGestionComercialeBundle:Facture',
//'id' => 'factures'
'typeDocument' => 'true'
),
),
*
*/
6 => [
'view' => 'FO/DataTable/docs_lies_reglement.html.twig',
'params' => [],
],
7 => ['view' => 'FO/DataTable/client.html.twig'],
8 => ['view' => 'FO/DataTable/prixAvecHidden.html.twig'],
9 => ['view' => 'FO/DataTable/choix-banque-select.html.twig'],
10 => [
'view' => 'FO/DataTable/actions_modal.html.twig',
'params' => [
'edit_route' => 'dtc_reglement_modifier',
'supprimer_route' => 'dtc_acompte_supprimer',
//'id' => $objet->getId(),
'id' => 0,
//'redirection' => $redirection,
'redirection' => 0,
'type' => 'reglements',
'entite' => 'adresse',
'objet' => Acompte::class,
],
],
]
)
->setOrder("x.id", "desc")
->setSearch(true)
->setSearchFields([3, 4, 5, 6, 7])
->setMultiple($multiple);;
return $datatable;
}
/**
* @Route("/vente/reglement-remise-banque/grid", name="dtc_reglement_remise_banque_liste_grid")
*/
public function gridReglementRemiseBanqueAction(Request $request, $bordereauId = '', Datatable $datatable, TranslatorInterface $translator)
{
/*
$em = $em;
$repo_objet = $em->getRepository(Commande::class);
$objet = $repo_objet->find($id);
*
*/
return $this->datatableReglementRemiseBanque($datatable, $translator, $bordereauId)->execute();
}
/**
* @Route("/vente/reglement-by-bordereau/{bordereauId}", name="dtc_reglement_by_bordereau_liste")
*/
public function listerByBordereauAction(Request $request, $bordereauId, Datatable $datatable, TranslatorInterface $translator)
{
$tableau_class_cellule[] = ["className" => "colonne_id", "targets" => [0], "visible" => true, "orderable" => false];
/*
$tableau_class_cellule[]=array("className"=>"colonne_id","targets"=>array(1),"visible"=>$serviceColonneTableau->getColonneUtilisateur("DTCGestionComercialeBundle:ModeReglement","id"));
$tableau_class_cellule[]=array("className"=>"colonne_id","targets"=>array(2),"visible"=>$serviceColonneTableau->getColonneUtilisateur("DTCGestionComercialeBundle:ModeReglement","libelle"));
*
*/
$this->datatableByBordereau($datatable, $translator, $bordereauId);
return $this->render('GestionComerciale/Reglement/lister-by-bordereau.html.twig', ['tableauClassColonne' => $tableau_class_cellule, "bordereauId" => $bordereauId]);
}
/**
* set datatable configs
*
* @return \App\Library\Datatable\Util\Datatable
*/
private function datatableByBordereau(Datatable $datatable, TranslatorInterface $translator, $bordereauId)
{
$datatable //->setDatatableId('dta-reglements')
->setEntity(Acompte::class, "x")
->setFields(
[
//$translator->trans("ID") => 'x.id',
$translator->trans("Date") => 'x.dateReglement',
$translator->trans("Mode de règlement") => "r.id",
$translator->trans("N° règlement") => "x.numTraite",
$translator->trans("N° pièce") => 'fa.reference',
$translator->trans("Factures") => 'x.id',
$translator->trans('Réf client') => 'c.reference',
$translator->trans('Client') => 'c.nom',
$translator->trans('Montant') => 'x.montant',
//$translator->trans("Actions") => 'x.id',
"_identifier_" => 'x.id',
]
)
->addJoin('x.modeReglement', 'r', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->addJoin('x.bordereau', 'b', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->addJoin('x.client', 'c', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->addJoin('x.commande', 'fa', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->setWhere(
'b.id = :bordereauId',
['bordereauId' => $bordereauId]
)
->setRenderers(
[
/*
0 => array(
'view' => 'FO/DataTable/lien_modal.html.twig',
'params' => array(
'edit_route' => 'dtc_reglement_modifier',
'objet' => 'DTCGestionComercialeBundle:Reglement',
'type' => 'reglements',
),
),
*
*/
0 => [
'view' => 'FO/DataTable/date.html.twig',
'params' => [],
],
1 => ['view' => 'FO/DataTable/reglement.html.twig'],
/*
2 => array(
'view' => 'FO/DataTable/lien_modal.html.twig',
'params' => array(
'edit_route' => 'dtc_reglement_modifier',
'objet' => 'DTCGestionComercialeBundle:Reglement',
'type' => 'reglements',
),
),
*
*/
/*
3 => array(
'view' => 'FO/DataTable/avec_lien_edit_route.html.twig',
'params' => array(
'edit_route' => 'dtc_facture_afficher',
'objet' => 'DTCGestionComercialeBundle:Facture',
//'id' => 'factures'
'typeDocument' => 'true'
),
),
*/
//
3 => [
'view' => 'FO/DataTable/docs_lies_reglement.html.twig',
'params' => [],
],
4 => [
'view' => 'FO/DataTable/factures_lies_reglement.html.twig',
'params' => [],
],
5 => ['view' => 'FO/DataTable/client-reference.html.twig'],
6 => ['view' => 'FO/DataTable/client.html.twig'],
7 => ['view' => 'FO/DataTable/prix.html.twig'],
/*
4 => array(
'view' => 'FO/DataTable/actions_modal.html.twig',
'params' => array(
//'edit_route' => 'dtc_acompte_modifier',
//'supprimer_route' => 'dtc_acompte_supprimer',
//'id' => $objet->getId(),
//'redirection' => $redirection,
//'type' => $type,
//'entite' => 'adresse',
//'objet' => "DTCGestionComercialeBundle:Acompte"
),
),
*
*/
]
)
->setOrder("x.id", "desc")
->setSearch(true)
->setSearchFields([1, 2, 3, 4, 5]);
return $datatable;
}
/**
* @Route("/vente/reglement-by-bordereau/grid/{bordereauId}", name="dtc_reglement_by_bordereau_liste_grid")
*/
public function gridByBordereauAction(Request $request, $bordereauId, Datatable $datatable, TranslatorInterface $translator)
{
//$bordereauId = $request->request->get('bordereauId');
return $this->datatableByBordereau($datatable, $translator, $bordereauId)->execute();
}
/**
* @Route("/vente/reglements/ajouter/caisse", name="dtc_reglement_ajouter_caisse")
*/
public function ajouterReglementCaisseAction(Request $request, EntityManagerInterface $em, TranslatorInterface $translator, MouvementCaisseService $serviceMouvementCaisse)
{
$user = $this->getUser();
//$data = $request->get('dataTables');
$data = $request->request->get('dataTables');
$ids = $data['actions'];
$repo_reglement = $em->getRepository(Acompte::class);
$type_mvt_caisse = $em->getRepository(TypeMouvementCaisse::class)->find(1);
$errors = [];
$count = 0;
//var_dump($data);
//\Doctrine\Common\Util\Debug::dump($data);
foreach ($ids as $key => $id) {
$reglement = $repo_reglement->find($id);
if (is_object($reglement)) {
if (is_object($reglement->getModeReglement()) && $reglement->getModeReglement()->getId() == 1) {
$count++;
$mouvementCaisse = new MouvementCaisse;
if (is_object($type_mvt_caisse)) {
$mouvementCaisse->setTypeMouvementCaisse($type_mvt_caisse);
}
$mouvementCaisse->setUtilisateur($user);
$montant = $reglement->getMontant();
$mouvementCaisse->setMontant(abs($montant));
$nom = '';
$commande = '';
if ($montant < 0) {
$mouvementCaisse->setEntreeSortie(true);
$libelle = 'Remboursement';
} else {
$mouvementCaisse->setEntreeSortie(false);
$libelle = 'Versement';
}
if (is_object($reglement->getClient())) {
$nom = $reglement->getClient()->getNom().' '.$reglement->getClient()->getPrenom();
$libelle .= ' de '.$nom;
}
if (is_object($reglement->getCommande())) {
$commande = $reglement->getCommande()->getReference();
$libelle .= ' sur '.$commande;
}
$mouvementCaisse->setReglement($reglement);
$mouvementCaisse->setLibelle($libelle);
$serviceMouvementCaisse->ajouterMouvementCaisse($mouvementCaisse);
} else {
$errors[] = 'Le règlement '.$reglement->getId().' ne peut pas être mis en caisse.';
}
//$em->persist($reglement);
}
}
//$em->flush();
if (count($errors)) {
$this->addFlash(
'warning',
implode(" ", $errors)
);
}
if ($count == 1) {
$this->addFlash(
'notice',
$translator->trans('Un règlement a été ajouté!')
);
} elseif ($count > 0) {
$this->addFlash(
'notice',
$count.' règlements ont été ajoutés!'
);
}
$url = $this->generateUrl('dtc_caisse_afficher');
return new JsonResponse(['url' => $url, 'valide' => '1']);
}
/**
* @Route("", name="")
*/
public function listerReglementsEtfacturesAction(Request $request, $clientId, $type = "", $redirection = "", EntityManagerInterface $em, Datatable $datatable,
TranslatorInterface $translator
) {
$repo_objet = $em->getRepository(Client::class);
$objet = $repo_objet->find($clientId);
$tableau_class_cellule[] = ["className" => "visible_export colonne_id", "targets" => [0], "visible" => true, "orderable" => true];
/*
$tableau_class_cellule[]=array("className"=>"visible_export colonne_id","targets"=>array(1),"visible"=>true,"orderable"=>false);
$tableau_class_cellule[]=array("className"=>"visible_export colonne_id","targets"=>array(2),"visible"=>true,"orderable"=>true);
$tableau_class_cellule[]=array("className"=>"visible_export colonne_id","targets"=>array(3),"visible"=>true,"orderable"=>true);
$tableau_class_cellule[]=array("orderable"=>false,"className"=>"colonne_id","targets"=>array(4),"visible"=>true);
$tableau_class_cellule[]=array("orderable"=>false,"className"=>"colonne_id","targets"=>array(5),"visible"=>true);
$tableau_class_cellule[]=array("orderable"=>false,"className"=>"colonne_id","targets"=>array(6),"visible"=>true);
$tableau_class_cellule[]=array("orderable"=>false,"className"=>"colonne_id","targets"=>array(7),"visible"=>true);
$tableau_class_cellule[]=array("orderable"=>false,"className"=>"colonne_id","targets"=>array(8),"visible"=>true);
$tableau_class_cellule[]=array("orderable"=>false,"className"=>"colonne_id","targets"=>array(9),"visible"=>true);
*/
$this->datatableReglementsEtFacture($em, $datatable, $translator, $objet, $type, $redirection);
return $this->render(
'GestionComerciale/Reglement/listerReglementsEtFactures.html.twig',
['tableauClassColonne' => $tableau_class_cellule, "client" => $clientId, "type" => $type, "redirection" => $redirection, "objet" => $objet]
);
}
/**
* @Route("/datatable/facture-et-reglements/{client}", name="dtc_datatable_factures_et_reglements")
*/
public function datatableFacturesEtReglementAction(Request $request, Client $client, EntityManagerInterface $em)
{
$infos = $request->request->all();
$draw = floatval($infos['draw']);
$length = floatval($infos['length']);
$order = $infos['order'];
$column = $order[0]['column'];
$dir = $order[0]['dir'];
$search = $infos['search'];
$searchValue = $search['value'];
$searchRegex = $search['regex'];
$start = floatval($infos['start']);
//$start = 30;
$requeteFacture = '';
$requeteAcompte = '';
$sortColumn = $column;
$sortColumnFacture = 'date';
$sortColumnAcompte = 'dateReglement';
$ajouterAcomptes = true;
$ajouterFactures = true;
switch ($column) {
case 2:
$sortColumnFacture = 'date';
$sortColumnAcompte = 'dateReglement';
break;
case 3:
$sortColumnFacture = 'reference';
$sortColumnAcompte = 'numTraite';
break;
case 5:
$sortColumnFacture = 'date';
$sortColumnAcompte = 'dateReglement';
break;
case 6:
$sortColumnFacture = 'commentaire';
$sortColumnAcompte = 'commentaire';
break;
case 7:
$sortColumnFacture = 'total';
$sortColumnAcompte = 'montant';
break;
case 8:
$sortColumnFacture = 'total';
$sortColumnAcompte = 'montant';
break;
case 9:
$sortColumnFacture = 'solde';
$sortColumnAcompte = 'solde';
break;
case 10:
$sortColumnFacture = 'lettrage';
$sortColumnAcompte = 'lettrage';
break;
}
if ($infos['columns'][4]['search']['value'] != '')
switch ($infos['columns'][4]['search']['value']) {
case '^Remboursement$':
$requeteAcompte .= ' AND p.montant < 0';
$ajouterFactures = false;
break;
case '^Règlement$':
$requeteAcompte .= ' AND p.montant > 0';
$ajouterFactures = false;
break;
case '^Facture$':
$requeteFacture .= ' AND p.total > 0';
$ajouterAcomptes = false;
break;
case '^Avoir$':
$requeteFacture .= ' AND p.total < 0';
$ajouterAcomptes = false;
break;
}
if ($infos['columns'][10]['search']['value'] != '') {
$requeteFacture .= " AND p.lettrage LIKE '".$infos['columns'][10]['search']['value']."%'";
$requeteAcompte .= " AND p.lettrage LIKE '".$infos['columns'][10]['search']['value']."%'";
}
if ($infos['search']['value'] != '') {
$requeteFacture .= " AND p.lettrage LIKE '".$infos['columns'][10]['search']['value']."%'";
$requeteAcompte .= " AND p.lettrage LIKE '".$infos['columns'][10]['search']['value']."%'";
}
$error = '';
//$error = $infos;
$response = new JsonResponse;
$donnees = [];
/*
$facture = array('12','2','19/01/2017','F201700012','Facture','','test','120.00€','','3500','','','','');
$donnees[] = $facture;
$facture = array('9','1','20/01/2017','F201700012','Facture','','test','120.00€','','3500','','','','');
$donnees[] = $facture;
$facture = array('536','3','18/01/2017','F201700012','Facture','','test','120.00€','','3500','','','','');
$donnees[] = $facture;
*
*/
$repo_commande = $em->getRepository(Commande::class);
$nbFacturesEtAvoirs = $repo_commande->getNbFacturesEtAvoirsClient($client);
if ($ajouterFactures) {
$facturesEtAvoirs = $repo_commande->getFacturesEtAvoirsClient($client, $start, $length, $sortColumnFacture, $dir, $requeteFacture)->getQuery()->getResult();
} else {
$facturesEtAvoirs = [];
}
if (count($facturesEtAvoirs) > 0) {
foreach ($facturesEtAvoirs as $commande) {
$regOuF = [];
$regOuF[0] = $commande->getId();
//$regOuF['objet'] = 'commande';
//$regOuF['route'] = 'dtc_facture_afficher';
//$regOuF['route'] = $this->generateUrl('dtc_facture_afficher', array('id'=>$commande->getId()));
if (is_object($commande->getDate())) {
$regOuF[1] = $commande->getDate()->format('U');
$regOuF[2] = $commande->getDate()->format('d/m/Y H:i:s');
} else {
$regOuF[1] = '';
$regOuF[2] = '';
}
//$regOuF[3] = $commande->getReference();
$regOuF[3] = $this->renderView(
'FO/DataTable/avec_lien_edit_route.html.twig',
['dt_obj' => $commande, 'edit_route' => 'auto', 'dt_item' => $commande->getReference()]
);
$regOuF[5] = '';
$regOuF[6] = $commande->getCommentaire();
if ($commande->getAvecTaxe() == 1) {
$montant = $commande->getTotalTtc();
} else {
$montant = $commande->getTotal() + $commande->getFraisPortSupplementaire() + $commande->getTotalFraisPort();
}
if ($montant > 0) {
$regOuF[7] = $this->renderView('FO/DataTable/prix.html.twig', ['dt_item' => abs($montant)]);
$regOuF[8] = '';
$regOuF[4] = 'Facture';
$regOuF[7] .= '<input type="hidden" name="debit[]" value="'.abs($montant).'">';
$regOuF[7] .= '<input type="hidden" name="credit[]" value="0">';
} else {
$regOuF[7] = '';
$regOuF[8] = $this->renderView('FO/DataTable/prix.html.twig', ['dt_item' => abs($montant)]);
$regOuF[4] = 'Avoir';
$regOuF[7] .= '<input type="hidden" name="debit[]" value="0">';
$regOuF[7] .= '<input type="hidden" name="credit[]" value="'.abs($montant).'">';
}
$regOuF[7] .= '<input type="hidden" name="objet[]" value="commande">';
$regOuF[7] .= '<input type="hidden" name="id[]" value="'.$commande->getId().'">';
$regOuF[9] = $this->renderView('FO/DataTable/prix.html.twig', ['dt_item' => $commande->getSolde()]);
$regOuF[10] = $commande->getLettrage();
$regOuF[11] = '';
$regOuF[12] = '';
$regOuF[13] = '';
//$reglementsEtFactures[] = $regOuF;
$donnees[] = $regOuF;
}
}
$repo_acompte = $em->getRepository(Acompte::class);
$nbAcomptesEtReglements = $repo_acompte->getNbAcomptesEtReglementsClient($client);
if ($ajouterAcomptes) {
$reglements = $repo_acompte->getAcomptesEtReglementsClient($client, $start, $length, $sortColumnAcompte, $dir, $requeteAcompte)->getQuery()->getResult();
} else {
$reglements = [];
}
if (count($reglements) > 0) {
foreach ($reglements as $reglement) {
$regOuF = [];
$regOuF[0] = $reglement->getId();
//$regOuF['objet'] = 'acompte';
$lien = $this->generateUrl('dtc_reglement_modifier', ['id' => $client->getId(), 'objet' => $reglement->getId(), 'type' => 'client', 'redirection' => 'solde']);
$regOuF[2] = $reglement->getDateReglement()->format('d/m/Y H:i:s');
$regOuF[1] = $reglement->getDateReglement()->format('U');
$regOuF[3] = '<a class="edit-modal" data-target="#conteneur-modal" title="Modifier"href="'.$lien.'">'.$reglement->getNumTraite().'</a>';
$modeReglement = $reglement->getModeReglement();
if (is_object($modeReglement)) {
$regOuF[5] = $modeReglement->getLibelle();
} else {
$regOuF[5] = '';
}
$regOuF[6] = $reglement->getCommentaire();
$montant = floatval($reglement->getMontant());
$od = floatval($reglement->getOperationDiverse());
$montantAvecOD = $montant + $od;
if ($montant > 0) {
$regOuF[7] = '';
$regOuF[8] = $this->renderView('FO/DataTable/prix.html.twig', ['dt_item' => abs($montant), 'od' => $od]);
$regOuF[4] = 'Règlement';
$regOuF[7] .= '<input type="hidden" name="debit[]" value="0">';
$regOuF[7] .= '<input type="hidden" name="credit[]" value="'.abs($montantAvecOD).'">';
} else {
$regOuF[7] = $this->renderView('FO/DataTable/prix.html.twig', ['dt_item' => abs($montant), 'od' => $od]);
$regOuF[8] = '';
$regOuF[4] = 'Remboursement';
$regOuF[7] .= '<input type="hidden" name="debit[]" value="'.abs($montantAvecOD).'">';
$regOuF[7] .= '<input type="hidden" name="credit[]" value="0">';
}
$regOuF[7] .= '<input type="hidden" name="objet[]" value="acompte">';
$regOuF[7] .= '<input type="hidden" name="id[]" value="'.$reglement->getId().'">';
//$regOuF[9] = $reglement->getSolde();
$regOuF[9] = $this->renderView('FO/DataTable/prix.html.twig', ['dt_item' => $reglement->getSolde()]);
$regOuF[10] = $reglement->getLettrage();
//$regOuF[11] = $reglement->getMouvementEquilibrage();
//$regOuF[12] = $reglement->getHorsErp();
$regOuF[11] = $this->renderView('FO/DataTable/booleen.html.twig', ['dt_item' => $reglement->getMouvementEquilibrage()]);
$regOuF[12] = $this->renderView('FO/DataTable/booleen.html.twig', ['dt_item' => $reglement->getHorsErp()]);
$regOuF[13] = '';
//$reglementsEtFactures[] = $regOuF;
$donnees[] = $regOuF;
}
}
$recordsTotal = $nbAcomptesEtReglements + $nbFacturesEtAvoirs;
$recordsFiltered = $recordsTotal;
//Trier le tableau par date
foreach ($donnees as $key => $row) {
$tabSort[$key] = $row[$sortColumn];
}
if ($dir == 'desc') {
$sort = SORT_DESC;
} else {
$sort = SORT_ASC;
}
if (isset($tabSort)) {
array_multisort($tabSort, $sort, $donnees);
}
$donneesSlice = array_slice($donnees, $start, $length);
$datas = [
'draw' => $draw,
'recordsTotal' => $recordsTotal,
'recordsFiltered' => $recordsFiltered,
'data' => $donneesSlice,
'start' => $start,
//'order' => array(0=>array("column"=>"1","dir"=>"desc")),
'order' => $order,
'length' => $length,
'infos' => $infos,
];
if ($error != '') {
$datas['error'] = $error;
}
$response->setData($datas);
return $response;
}
/**
* set datatable configs
*
* @return \App\Library\Datatable\Util\Datatable
*/
private function datatableReglementsEtFacture(EntityManagerInterface $em, Datatable $datatable, TranslatorInterface $translator, $objet, $type = "", $redirection = "")
{
$libelle = "Document";
//if(is_object($objet)) $id = $objet->getId(); else $id="1";
$qb = $em->createQueryBuilder();
$qb->select('x')
->from(Client::class, "x")
->join('x.commandes', 'f')
->where('x.id = :clientId')
->setParameters(['clientId' => $objet])
->orderBy("x.date", "desc");
$type_jointure = 'x.'.$type;
$datatable->setDatatableId('dta-reglementsEtFactures')
//->setEntity("DTCClientsBundle:Client", "x")
->setFields(
[
$translator->trans("ID") => 'x.id',
$translator->trans("Réf") => 'f.reference',
$translator->trans("Libellé") => 'r.libelle',
$translator->trans("Date") => 'x.date',
$translator->trans("Commande") => 'f.commandes',
$translator->trans("Qté") => 'x.qte',
$translator->trans("Prix unitaire HT") => 'x.prixunitaire',
$translator->trans("Remise") => 'x.remise',
$translator->trans("Total HT") => 'x.total',
$translator->trans("Action") => 'x.action',
"_identifier_" => 'x.id',
]
)
//->addJoin('x.modeReglement', 'r', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
//->addJoin('x.commande', 'c', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
//->addJoin('x.client', 'cl', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
//->addJoin('x.commandes', 'f', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->setRenderers(
[
0 => [
'view' => 'FO/DataTable/heure.html.twig',
'params' => [],
],
/*
2 => array(
'view' => 'FO/DataTable/prix.html.twig',
'params' => array(
),
),
4 => array(
'view' => 'FO/DataTable/docs_lies_reglement.html.twig',
'params' => array(
)
),
5 => array(
'view' => 'FO/DataTable/reglement_facture_est_paye_solde.html.twig'
),
7 => array(
'view' => 'FO/DataTable/booleen.html.twig'
),
8 => array(
'view' => 'FO/DataTable/booleen.html.twig'
),
9 => array(
'view' => 'FO/DataTable/actions_modal.html.twig',
'params' => array(
//'edit_route' => 'dtc_acompte_modifier',
'supprimer_route' => 'dtc_acompte_supprimer',
'id' => $objet->getId(),
'redirection' => $redirection,
'type' => $type,
'entite' => 'adresse',
'objet' => "DTCGestionComercialeBundle:Acompte"
),
),
*/
]
)
->setOrder("x.id", "desc")
->setSearch(true)// ->setSearchFields(array(1,2,3,4,5))
;
/*
$where = $type_jointure.' = :objet and x.typeReglement IN (:typeReglement)';
if($type == "client") {
$params = array('objet' => $objet,'typeReglement'=>array('2','1'));
$where .= ' AND x.reglementParent IS NULL';
}
else {
$params = array('objet' => $objet,'typeReglement'=>array('2'));
}
*
*/
/*
$where = 'x.id = :clientId';
$params = array('clientId' => $objet);
$datatable->setWhere(
$where,
$params
);
*
*/
$datatable->getQueryBuilder()->setDoctrineQueryBuilder($qb);
//echo $type_jointure;
return $datatable;
}
/**
* Grid action
* @return Response
*/
/**
* @Route("/vente/reglement-et-factures/grid/{clientId}/{type}/{redirection}", name="dtc_reglement_et_factures_liste_grid")
*/
public function gridReglementsEtFactureAction(Request $request, $clientId = "", $type = "", $redirection = "", EntityManagerInterface $em, Datatable $datatable,
TranslatorInterface $translator
) {
$repo_objet = $em->getRepository(Client::class);
$objet = $repo_objet->find($clientId);
return $this->datatableReglementsEtFacture($em, $datatable, $translator, $objet, $type, $redirection)->execute();
}
/**
* @Route("/reglement/charger-tableau/{id}/{type}", name="dtc_reglement_charger_tableau")
*/
public function chargerTableauAction(Request $request, Client $client)
{
$rendu = $this->renderView('GestionComerciale/Reglement/charger_tableau.html.twig', ["client" => $client]);
return new JsonResponse(['rendu' => $rendu]);
}
/**
* @Route("/solde/charger-tableau/{id}/{type}", name="dtc_solde_charger_tableau")
*/
public function chargerTableauRetFAction(Request $request, Client $clientId)
{
$rendu = $this->renderView('GestionComerciale/Reglement/charger_tableauRetF.html.twig', ["client" => $clientId]);
return new JsonResponse(['rendu' => $rendu]);
}
/**
* @Route("/solde/charger-tableau2/{id}/{type}", name="dtc_solde_charger_tableau_2")
*/
public function chargerTableauSoldeClientAction(Request $request, Client $client)
{
$rendu = $this->renderView('GestionComerciale/Reglement/charger_tableau_solde.html.twig', ["client" => $client]);
return new JsonResponse(['rendu' => $rendu]);
}
}