<?php
namespace App\Controller\GestionComerciale;
use App\Entity\GestionComerciale\Acompte;
use App\Entity\GestionComerciale\LCR;
use App\Form\GestionComerciale\AcompteLCRType;
use App\Form\GestionComerciale\LCRType;
use App\Form\GestionComerciale\SupprimerLCRType;
use App\Library\Datatable\Util\Datatable;
use App\Security\Voter\EntityVoter;
use App\Service\GestionComerciale\BordereauLCRService;
use App\Service\GestionComerciale\NumerotationDocumentService;
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 LCRController extends AbstractController
{
/**
* @Route("/vente/lcr/nouveau", name="dtc_lcr_ajouter")
*/
public function ajouterAction(Request $request, EntityManagerInterface $em, TranslatorInterface $translator, ValidatorInterface $validator,
NumerotationDocumentService $numerotationService
) {
$objet = new LCR();
$user = $this->getUser();
$objet->setUtilisateur($user);
$form = $this->createForm(LCRType::class, $objet);
$errors = "";
$form->handleRequest($request);
if ($form->isSubmitted()) {
//$tokenP = $request->request->get('tokenPicture');
if ($form->isValid()) {
if ($objet->getNomClient() == '') {
$nom = $objet->getClient()->getPrenom().' '.$objet->getClient()->getNom();
$objet->setNomClient($nom);
}
$objet->setNumTraite($numerotationService->generer($objet));
$em->persist($objet);
$em->flush();
$this->addFlash(
'notice',
$translator->trans('LCR ajoutée avec succès !')
);
return $this->redirectToRoute('dtc_lcr_liste');
} else {
$errors = $validator->validate($objet);
}
}
return $this->render('GestionComerciale/lcr/ajouter.html.twig', ['form' => $form->createView(), 'errors' => $errors]);
}
/**
* @Route("/vente/lcr/supprimer/multiple", name="dtc_lcr_liste_supprimer")
*/
public function supprimerMultipleAction(Request $request, EntityManagerInterface $em, TranslatorInterface $translator, BordereauLCRService $service_bordereau)
{
$url = $this->generateUrl('dtc_lcr_liste', []);
//return new JsonResponse(array('url'=>$url,'valide'=>'1'), 200, array('Content-Type'=>'application/json'));
$data = $request->get('dataTables');
$ids = $data['actions'];
$repo = $em->getRepository(LCR::class);
for ($i = 0; $i < count($ids); $i++) {
$v = $repo->find($ids[$i]);
if (is_object($v)) {
if ($v->getTransfertCompta() == false) {
$bordereau = $v->getBordereauLCR();
$em->remove($v);
$em->flush();
//Recalculer le montant du bordereau
if (is_object($bordereau)) {
$service_bordereau->calculTotaux($bordereau);
}
} else {
$this->addFlash(
'warning',
'La LCR '.$v->getNumTraite().' n\'est plus supprimable!'
);
}
}
}
$em->flush();
$this->addFlash(
'notice',
$translator->trans('LCR supprimées avec succès !')
);
return new JsonResponse(['url' => $url, 'valide' => '1']);
}
/**
* @Route("/vente/lcr/supprimer/{id}", name="dtc_lcr_supprimer")
*/
public function supprimerAction(Request $request, LCR $objet, EntityManagerInterface $em, TranslatorInterface $translator, ValidatorInterface $validator,
BordereauLCRService $service_bordereau
) {
$titre_modal = $translator->trans("Demande de confirmation");
$user = $this->getUser();
$form = $this->createForm(SupprimerLCRType::class, $objet);
$errors = "";
$form->handleRequest($request);
if ($form->isSubmitted()) {
if ($form->isValid()) {
if ($objet->getTransfertCompta() == false) {
$bordereau = $objet->getBordereauLCR();
$em->remove($objet);
$em->flush();
//Recalculer le montant du bordereau
if (is_object($bordereau)) {
$service_bordereau->calculTotaux($bordereau);
}
$this->addFlash(
'notice',
'LCR '.$objet->getNumTraite().' supprimée avec succès !'
);
} else {
$this->addFlash(
'warning',
'La LCR '.$objet->getNumTraite().' n\'est plus supprimable!'
);
}
$this->addFlash(
'notice',
$translator->trans('LCR supprimée avec succès !')
);
$url = $this->generateUrl('dtc_lcr_liste', []);
return new JsonResponse(['rendu' => '', 'valide' => '1', 'url' => $url]);
} else {
$errors = $validator->validate($objet);
$rendu = $this->renderView('FO/Supprimer/supprimer.html.twig', ['form' => $form->createView(), 'errors' => $errors, 'id' => $objet->getId(), 'type' => '']);
return new JsonResponse(['rendu' => $rendu, 'valide' => '0', 'url' => '', 'titre' => $titre_modal]);
}
}
$rendu = $this->renderView('FO/Supprimer/supprimer.html.twig', ['form' => $form->createView(), 'id' => $objet->getId(), 'type' => '', 'errors' => $errors]);
return new JsonResponse(['rendu' => $rendu, 'valide' => '0', 'url' => '', 'titre' => $titre_modal]);
}
/**
* @Route("/vente/lcr/modifier/{id}", name="dtc_lcr_modifier")
*/
public function modifierAction(Request $request, LCR $objet, EntityManagerInterface $em, NumerotationDocumentService $numerotationService,
TranslatorInterface $translator, ValidatorInterface $validator
) {
$user = $this->getUser();
$objet->setUtilisateur($user);
$form = $this->createForm(LCRType::class, $objet);
$errors = "";
$form->handleRequest($request);
if ($form->isSubmitted()) {
$droit = $this->isGranted(EntityVoter::UPDATE, LCR::class);
if ( ! $droit) {
return $this->redirectToRoute('dtc_lcr_modifier', ["id" => $objet->getId()]);
}
if ($form->isValid()) {
if ($objet->getNumPiece() == '') {
$objet->setNumPiece($numerotationService->generer($objet));
}
$em->persist($objet);
$em->flush();
$this->addFlash(
'notice',
$translator->trans('LCR sauvegardée avec succès !')
);
return $this->redirectToRoute('dtc_lcr_modifier', ['id' => $objet->getId()]);
} else {
$errors = $validator->validate($objet);
}
}
return $this->render('GestionComerciale/lcr/ajouter.html.twig', ['form' => $form->createView(), 'errors' => $errors, 'objet' => $objet]);
}
/**
* @Route("/vente/lcr/modifier-modal/{id}", name="dtc_lcr_modifier_modal")
*/
public function modifierModalAction(Request $request, Acompte $objet, EntityManagerInterface $em, NumerotationDocumentService $numerotationService,
TranslatorInterface $translator, ValidatorInterface $validator
) {
$user = $this->getUser();
$objet->setUtilisateur($user);
$form = $this->createForm(AcompteLCRType::class, $objet);
$errors = "";
$form->handleRequest($request);
$titre_modal = $translator->trans('Modification règlement LCR');
if ($form->isSubmitted()) {
$droit = $this->isGranted(EntityVoter::UPDATE, Acompte::class);
if ( ! $droit) {
$rendu = $this->renderView(
'GestionComerciale/Reglement/ajouter-lcr.html.twig',
['form' => $form->createView(), 'errors' => $errors, 'id' => '', 'type' => '', 'objet' => $objet]
);
return new Response(json_encode(['rendu' => $rendu, 'valide' => '0', 'url' => '', 'titre' => $titre_modal]));
}
if ($form->isValid()) {
if ($objet->getNumPiece() == '') {
$objet->setNumPiece($numerotationService->generer($objet));
}
$em->persist($objet);
$em->flush();
$this->addFlash(
'notice',
$translator->trans('LCR sauvegardée avec succès !')
);
$url = $this->generateUrl('dtc_reglement_remise_banque_liste');
//return $this->redirectToRoute('dtc_lcr_modifier', array('id'=>$objet->getId()));
return new JsonResponse(['rendu' => '', 'valide' => '1', 'url' => $url]);
} else {
$errors = $validator->validate($objet);
}
}
//return $this->render('GestionComerciale/lcr/ajouter.html.twig', array('form' => $form->createView(),'errors'=>$errors,'objet'=>$objet));
$rendu = $this->renderView(
'GestionComerciale/Reglement/ajouter-lcr.html.twig',
['form' => $form->createView(), 'errors' => $errors, 'id' => '', 'type' => '', 'objet' => $objet]
);
return new JsonResponse(['rendu' => $rendu, 'valide' => '0', 'url' => '', 'titre' => $titre_modal]);
}
/**
* @Route("/vente/lcr", name="dtc_lcr_liste")
*/
public function listerAction(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->datatable($bordereauId, $datatable, $translator);
if ($bordereauId == '') {
return $this->render('GestionComerciale/lcr/lister.html.twig', ['tableauClassColonne' => $tableau_class_cellule]);
} else {
return $this->render('GestionComerciale/lcr/listerByBordereau.html.twig', ['tableauClassColonne' => $tableau_class_cellule, 'bordereauId' => $bordereauId]);
}
}
/**
* set datatable configs
*
* @return \App\Library\Datatable\Util\Datatable
*/
private function datatable($bordereauId = '', Datatable $datatable, TranslatorInterface $translator)
{
$datatable->setEntity(LCR::class, "x")
->setFields(
[
$translator->trans("ID") => 'x.id',
$translator->trans("Date") => 'x.date',
$translator->trans("Echéance") => 'x.dateEcheance',
$translator->trans("N° traite") => "x.numTraite",
$translator->trans("N° pièce") => 'fa.reference',
'Client' => 'c.id',
'Montant' => 'x.montant',
'Choix Banque' => 'cbs.id',
$translator->trans("Actions") => 'x.id',
"_identifier_" => 'x.id',
]
)
->addJoin('x.client', 'c', \Doctrine\ORM\Query\Expr\Join::INNER_JOIN)
->addJoin('x.compteBancaireSociete', 'cbs', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->addJoin('x.factures', 'fa', \Doctrine\ORM\Query\Expr\Join::INNER_JOIN)
->setOrder("x.id", "desc")
->setSearch(true)
->setSearchFields([1, 2, 3]);
$params = [
'edit_route' => 'dtc_lcr_modifier',
'objet' => LCR::class,
];
$multiple = [];
if ($bordereauId == '') {
$multiple = [
'generer-bordereau' => [
'title' => 'Générer les bordereaux',
'route' => 'dtc_borderau_lcr_liste_ajouter',
],
'delete' => [
'title' => 'Supprimer',
'route' => 'dtc_lcr_liste_supprimer',
],
];
$params['supprimer_route'] = 'dtc_lcr_supprimer';
$datatable->setWhere('x.bordereauLCR is null');
} else {
$redirection = $this->generateUrl('dtc_bordereau_lcr_modifier', ['id' => 3, 'tab' => 'lcr']);
$multiple = [
'aucune-action' => [
'title' => 'Non disponible',
'route' => 'dtc_fo_datatable_multiple_aucune_action',
],
];
$datatable->setWhere('x.bordereauLCR = '.$bordereauId);
}
$datatable->setRenderers(
[
0 => [
'view' => 'FO/DataTable/avec_lien_edit_route.html.twig',
'params' => [
'edit_route' => 'dtc_lcr_modifier',
],
],
1 => ['view' => 'FO/DataTable/date.html.twig'],
2 => ['view' => 'FO/DataTable/date.html.twig'],
3 => [
'view' => 'FO/DataTable/avec_lien_edit_route.html.twig',
'params' => [
'edit_route' => 'dtc_lcr_modifier',
],
],
4 => [
'view' => 'FO/DataTable/avec_lien_edit_route.html.twig',
'params' => [
'edit_route' => 'dtc_facture_afficher',
'id' => 'factures',
],
],
5 => ['view' => 'FO/DataTable/client.html.twig'],
6 => ['view' => 'FO/DataTable/prix.html.twig'],
7 => ['view' => 'FO/DataTable/choix-banque-select.html.twig'],
8 => [
'view' => 'FO/DataTable/actions.html.twig',
'params' => $params,
],
]
)
->setMultiple(
$multiple
);
return $datatable;
}
/**
* @Route("/vente/lcr/grid", name="dtc_lcr_liste_grid")
*/
public function gridAction(Request $request, Datatable $datatable, TranslatorInterface $translator)
{
$bordereauId = $request->query->get('bordereauId');
return $this->datatable($bordereauId, $datatable, $translator)->execute();
}
}