<?php
namespace App\Controller\Marches;
use App\Entity\BureauMarche;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\Request;
use Doctrine\ORM\EntityManagerInterface;
use App\Entity\Client;
use App\Entity\Bordereau;
use App\Service\ValidateService;
use App\Service\BaseService;
use App\Entity\Devis;
use App\Entity\DetailDevis;
use App\Entity\ModelBordereau;
use App\Entity\InfosModalBordereau;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\Serializer\SerializerInterface;
use App\Entity\Marche;
use Symfony\Component\HttpFoundation\Session\Session;
use App\Repository\DevisRepository;
use App\Entity\Bureau;
use App\Entity\DetailBord;
use App\Entity\InfosDetailBord;
use Spipu\Html2Pdf\Html2Pdf;
use App\Entity\LogUser;
use App\Repository\serviceRepo\archivesRepo;
use App\Repository\BordereauRepository;
use DateTime;
class DevisController extends AbstractController
{
public $baseService;
public function __construct(BaseService $baseService
)
{
$this->baseService = $baseService;
}
#[Route('/addDevis', name: 'addDevis')]
public function addDevis(Request $request, EntityManagerInterface $entityManager,ValidateService $validateService,
BaseService $baseService,DevisRepository $devisRepository): Response
{
$chckAccess = $this->baseService->Role(53);
if($chckAccess == 0){
return $this->redirectToRoute('login');
}else if ($chckAccess == 2){
return $this->redirectToRoute('infoUtilisateur');
}
$response = "";
$num = $devisRepository->getNumero();
$client = "";
$numero = "DE-".$num."/".date('Y');
$objet = "";
$date = "";
$clients = $entityManager->getRepository(Client::class)->findAll();
$bureaux = $entityManager->getRepository(Bureau::class)->findAll();
return $this->render('devis/addDevis.html.twig', [
'controller_name' => 'DevisController',
'response' => $response,
'clients' => $clients,
'client' => $client,
'numero' => $numero,
'objet' => $objet,
'date' => $date,
'bureaux' => $bureaux
]);
}
#[Route('/listDevis', name: 'listDevis')]
public function listDevis(Request $request, EntityManagerInterface $entityManager,BaseService $baseService): Response
{
$chckAccess = $this->baseService->Role(52);
if($chckAccess == 0){
return $this->redirectToRoute('login');
}else if ($chckAccess == 2){
return $this->redirectToRoute('infoUtilisateur');
}
$session = new Session;
$bureauSelected = $session->get('bureauSelected');
$devis = $entityManager->getRepository(Devis::class)->findAll();
$clients = $entityManager->getRepository(Client::class)->findAll();
$years = $baseService->getYears()["years"];
$months = $baseService->getYears()["months"];
$yearsFin = (new DateTime())->format('Y');
$yearSelect = $yearsFin;
$bureaux = $entityManager->getRepository(Bureau::class)->findAll();
return $this->render('devis/listDevis.html.twig', [
'controller_name' => 'DevisController',
'devis' => $devis,
'clients' => $clients,
'years'=>$years,
'months'=> $months,
'yearSelect'=> $yearSelect,
'bureaux' => $bureaux
]);
}
#[Route('/listeDevisArchivees', name: 'listeDevisArchivees')]
public function listeDevisArchivees(Request $request, archivesRepo $archivesRepo ,EntityManagerInterface $entityManager,BaseService $baseService): Response
{
$chckAccess = $this->baseService->Role(56);
if($chckAccess == 0){
return $this->redirectToRoute('login');
}else if ($chckAccess == 2){
return $this->redirectToRoute('infoUtilisateur');
}
$session = new Session;
$bureauSelected = $session->get('bureauSelected');
$devis = $entityManager->getRepository(Devis::class)->findAll();
$clients = $entityManager->getRepository(Client::class)->findAll();
$years = $baseService->getYears()["years"];
$months = $baseService->getYears()["months"];
$yearsFin = (new DateTime())->format('Y');
$yearSelect = $yearsFin;
$year = $request->get("year");
$month = $request->get("month");
// Create a DateTime object for the first day of the specified month and year
$firstDay = new \DateTime("$year-$month-01");
// Get the last day of the month by modifying the first day
$lastDay = clone $firstDay;
$lastDay->modify('last day of this month');
// Format the dates as strings in 'Y-m-d' format
$date_debut = $firstDay->format('Y-m-d') ;
$date_fin = $lastDay->format('Y-m-d');
$devis = $archivesRepo->getDevis(2 , $date_debut , $date_fin ,$bureauSelected);
return $this->render('devis/listDevisArchivees.html.twig', [
'controller_name' => 'DevisController',
'devis' => $devis,
'clients' => $clients,
'years'=>$years,
'buro'=>$bureauSelected,
'months'=> $months,
'yearSelect'=> $yearSelect
]);
}
#[Route('/updateDevis', name: 'updateDevis')]
public function updateDevis(Request $request, EntityManagerInterface $entityManager,ValidateService $validateService,BaseService $baseService): Response
{
$chckAccess = $this->baseService->Role(54);
if($chckAccess == 0){
return $this->redirectToRoute('login');
}else if ($chckAccess == 2){
return $this->redirectToRoute('infoUtilisateur');
}
$response = "";
$id=$request->get('id');
$devis = $entityManager->getRepository(Devis::class)->find($id);
$details = $entityManager->getRepository(DetailDevis::class)->findByIdDevis($id);
$clients = $entityManager->getRepository(Client::class)->findAll();
$bureaux = $entityManager->getRepository(Bureau::class)->findAll();
return $this->render('devis/updateDevis.html.twig', [
'controller_name' => 'DevisController',
'response' => $response,
'devis' => $devis,
'details' => $details,
'clients' => $clients,
'bureaux' => $bureaux
]);
}
#[Route('/deleteDevis/{id}/', name: 'deleteDevis')]
public function deleteDevis(Request $request, EntityManagerInterface $entityManager,$id,BaseService $baseService): Response
{
$session = new Session;
$user = $session->get('user');
$bureauSelected = $session->get('bureauSelected');
$response = "";
$chckAccess = $this->baseService->Role(55);
if($chckAccess == 0){
$response = "Vous n'avez pas accès à cette opération";
}else if ($chckAccess == 2){
$response = "Vous n'avez pas accès à cette opération";
}
if( $response == ""){
$devis = $entityManager->getRepository(Devis::class)->find($id);
if (!$devis)
{
$response = 'Desolé, ce devis est introuvable !';
}
else
{
// Remove the utilisateur
$details = $entityManager->getRepository(DetailDevis::class)->findByIdDevis($id);
foreach ($details as $detail) {
$entityManager->remove($detail);
}
$entityManager->remove($devis);
$entityManager->flush();
$baseService->addLogAction($user->getId(),'Supprimer un devis',$bureauSelected);
$response = "ok";
}
}
return new Response($response);
}
#[Route('/addBordereau', name: 'addBordereau')]
public function addBordereau(Request $request, EntityManagerInterface $entityManager,ValidateService $validateService,
BaseService $baseService, BordereauRepository $bordereauRepository): Response
{
$chckAccess = $this->baseService->Role(59);
if($chckAccess == 0){
return $this->redirectToRoute('login');
}else if ($chckAccess == 2){
return $this->redirectToRoute('infoUtilisateur');
}
$session = new Session;
$user = $session->get('user');
$bureauSelected = $session->get('bureauSelected');
$response = "";
$clients = $entityManager->getRepository(Client::class)->findAll();
$modeles = $entityManager->getRepository(ModelBordereau::class)->findAll();
$bureaux = $entityManager->getRepository(Bureau::class)->findAll();
$num = $bordereauRepository->getNumero();
$numero = "Bord-".$num;
return $this->render('devis/addBordereau.html.twig', [
'controller_name' => 'DevisController',
'response' => $response,
'clients' => $clients,
'modeles' => $modeles,
'numero' => $numero,
'bureaux' => $bureaux
]);
}
#[Route('/addModelBordereau', name: 'addModelBordereau')]
public function addModelBordereau(Request $request, EntityManagerInterface $entityManager,ValidateService $validateService,BaseService $baseService): Response
{
$chckAccess = $this->baseService->Role(64);
if($chckAccess == 0){
return $this->redirectToRoute('login');
}else if ($chckAccess == 2){
return $this->redirectToRoute('infoUtilisateur');
}
$response = "";
$modeles = $entityManager->getRepository(ModelBordereau::class)->findAll();
return $this->render('devis/addModelBordereau.html.twig', [
'controller_name' => 'DevisController',
'response' => $response,
'modeles' => $modeles,
]);
}
#[Route('/addModalB', name: 'addModalB')]
public function addModalB(Request $request, EntityManagerInterface $entityManager,BaseService $baseService): Response
{
$session = new Session;
$user = $session->get('user');
$bureauSelected = $session->get('bureauSelected');
$response = "";
$columns=$request->get('columns');
$relations=$request->get('relations');
$modalTitle=$request->get('modalTitle');
$designation=$request->get('designation');
$des=$request->get('des');
$quantite=$request->get('quantite');
$qte=$request->get('qte');
$ttl=$request->get('ttl');
$ttlTTC=$request->get('ttlttc');
$response=json_encode($des);
if($modalTitle == "" || $modalTitle == null || trim($modalTitle) == "")
{
$response = "Le champs titre est vide";
}
else if ($des)
{
if (($des) && $quantite){
$ttlTTC = $ttlTTC != '' ? $ttlTTC : 'TOTAL TTC' ;
$modal = new ModelBordereau();
$modal->setTitrModel($modalTitle);
$modal->setDateCreation(new \DateTime());
$modal->setDesignation($des);
$modal->setTotalInPdf($ttlTTC);
$entityManager->persist($modal);
$entityManager->flush();
for($i = 0;$i < count($columns); $i++)
{
$infos = new InfosModalBordereau();
$infos->setIdModal($modal->getId());
$infos->setNomColMo($columns[$i]);
if (isset($relations[$i]))
{
$infos->setResSumCo($relations[$i]);
}
else
{
$infos->setResSumCo("");
}
if (isset($quantite) && ($quantite == $columns[$i]))
{
$infos->setIsQte(1);
}
else
{
$infos->setIsQte(0);
}
if (isset($des) && ($des == $columns[$i]))
{
$infos->setIsDes(1);
}
else
{
$infos->setIsDes(0);
}
// if($columns[$i] == "Quantité" && $qte!="" && $qte != null)
// {
// $infos->setInPdf($qte);
// }
if($columns[$i] == "Total" && $ttl!="" && $ttl != null)
{
$infos->setInPdf($ttl);
}
$entityManager->persist($infos);
// Persist the Client entity and flush it to the database
$entityManager->flush();
$baseService->addLogAction($user->getId(),'Ajouter un modele de bordereau',$bureauSelected);
}
$response = "OK";
}
else
{
$response = "Veuillez choisir la quantité";
}
}
else
{
$response = "Veuillez choisir la designation dans le modele";
}
return new Response($response);
}
#[Route('/getModalInfos', name: 'getModalInfos')]
public function getModalInfos(Request $request, EntityManagerInterface $entityManager,BaseService $baseService,
SerializerInterface $serializer): Response
{
$response = "";
$modeleId=$request->get('modeleId');
$modeles = $entityManager->getRepository(InfosModalBordereau::class)->findByIdModal($modeleId);
$resultmodeles = array_values($modeles);
$modelesJson = $serializer->serialize($resultmodeles, 'json');
return new JsonResponse($modelesJson, 200, [], true);
}
#[Route('/listBordereaux', name: 'listBordereaux')]
public function listBordereaux(Request $request, EntityManagerInterface $entityManager,BaseService $baseService,): Response
{
$chckAccess = $this->baseService->Role(58);
if($chckAccess == 0){
return $this->redirectToRoute('login');
}else if ($chckAccess == 2){
return $this->redirectToRoute('infoUtilisateur');
}
$session = new Session;
$bureauSelected = $session->get('bureauSelected');
$borderaux = $entityManager->getRepository(Bordereau::class)->findAll();
$clients = $entityManager->getRepository(Client::class)->findAll();
$years = $baseService->getYears()["years"];
$months = $baseService->getYears()["months"];
$yearsFin = (new DateTime())->format('Y');
$yearSelect = $yearsFin;
$bureaux = $entityManager->getRepository(Bureau::class)->findAll();
return $this->render('devis/listBorderaux.html.twig', [
'controller_name' => 'DevisController',
'borderaux' => $borderaux,
'clients' => $clients,
'years'=>$years,
'months'=> $months,
'yearSelect'=> $yearSelect,
'bureaux' => $bureaux
]);
}
#[Route('/listeBorderauxArchivees', name: 'listeBordereauxArchivees')]
public function listeBordereauxArchivees(Request $request, archivesRepo $archivesRepo ,EntityManagerInterface $entityManager,BaseService $baseService): Response
{
$chckAccess = $this->baseService->Role(62);
if($chckAccess == 0){
return $this->redirectToRoute('login');
}else if ($chckAccess == 2){
return $this->redirectToRoute('infoUtilisateur');
}
$session = new Session;
$bureauSelected = $session->get('bureauSelected');
$clients = $entityManager->getRepository(Client::class)->findAll();
$clients = $entityManager->getRepository(Client::class)->findAll();
$years = $baseService->getYears()["years"];
$months = $baseService->getYears()["months"];
$yearsFin = (new DateTime())->format('Y');
$yearSelect = $yearsFin;
$year = $request->get("year");
$month = $request->get("month");
// Create a DateTime object for the first day of the specified month and year
$firstDay = new \DateTime("$year-$month-01");
// Get the last day of the month by modifying the first day
$lastDay = clone $firstDay;
$lastDay->modify('last day of this month');
// Format the dates as strings in 'Y-m-d' format
$date_debut = $firstDay->format('Y-m-d') ;
$date_fin = $lastDay->format('Y-m-d');
$bordereau = $archivesRepo->getBordereau(2 , $date_debut , $date_fin ,$bureauSelected);
return $this->render('devis/listeBorderauxArchivees.html.twig', [
'controller_name' => 'DevisController',
'Bordereau' => $bordereau,
'clients' => $clients,
'years'=>$years,
'buro'=>$bureauSelected,
'months'=> $months,
'yearSelect'=> $yearSelect
]);
}
#[Route('/updateBordereau', name: 'updateBordereau')]
public function updateBordereau(Request $request, EntityManagerInterface $entityManager,ValidateService $validateService,BaseService $baseService): Response
{
$chckAccess = $this->baseService->Role(60);
if($chckAccess == 0){
return $this->redirectToRoute('login');
}else if ($chckAccess == 2){
return $this->redirectToRoute('infoUtilisateur');
}
$response = "";
$id=$request->get('id');
$bordereau = $entityManager->getRepository(Bordereau::class)->find($id);
$clients = $entityManager->getRepository(Client::class)->findAll();
$modeles = $entityManager->getRepository(ModelBordereau::class)->findAll();
$bureaux = $entityManager->getRepository(Bureau::class)->findAll();
$details = $entityManager->getRepository(DetailBord::class)->findByIdBord($id);
$infoLines = [];
foreach ($details as $detail) {
$idDetail = $detail->getId();
// Retrieve info details for the current detail
$infosDetailBord = $entityManager->getRepository(InfosDetailBord::class)->findByIdDeta($idDetail);
foreach ($infosDetailBord as $infoDetail) {
$idInfo = $infoDetail->getIdInfo();
$value = $infoDetail->getValuInfo();
if (!isset($infoLines[$idInfo])) {
$infoLines[$idInfo] = [];
}
$infoLines[$idInfo][] = [
'idInfo' => $idInfo,
'value' => $value,
];
}
}
return $this->render('devis/updateBordereau.html.twig', [
'controller_name' => 'DevisController',
'response' => $response,
'bordereau' => $bordereau,
'clients' => $clients,
'modeles' => $modeles,
'details' => $details,
'infoCounts' => count($details),
'infoLines' => $infoLines,
'bureaux' => $bureaux
]);
}
#[Route('/deleteBordereau/{id}/', name: 'deleteBordereau')]
public function deleteBordereau(Request $request, EntityManagerInterface $entityManager,$id,BaseService $baseService): Response
{
$response = "";
$chckAccess = $this->baseService->Role(61);
if($chckAccess == 0){
$response = "Vous n'avez pas accès à cette opération";
}else if ($chckAccess == 2){
$response = "Vous n'avez pas accès à cette opération";
}
if( $response == ""){
$session = new Session;
$user = $session->get('user');
$bureauSelected = $session->get('bureauSelected');
// $check = $baseService->checkAcces('SUPPPROF');
// if($check == 1)
// {
// $session->remove('user');
// $session->set('isConnected',false);
// return $this->redirectToRoute('login'); // Redirect to 'listBureaux' route
// }
// else if ( $check == 2 )
// {
// return $this->redirectToRoute('listBureaux'); // Redirect to 'listBureaux' route
// }
$Bordereau = $entityManager->getRepository(Bordereau::class)->find($id);
if (!$Bordereau)
{
$response = 'Desolé, cette bordereau est introuvable !';
}
else
{
$details = $entityManager->getRepository(DetailBord::class)->findByIdBord($id);
foreach ($details as $detail) {
$infosDetails = $entityManager->getRepository(InfosDetailBord::class)->findByIdDeta($detail->getId());
foreach ($infosDetails as $info) {
$entityManager->remove($info);
}
$entityManager->remove($detail);
}
// Remove the utilisateur
$entityManager->remove($Bordereau);
$entityManager->flush();
$baseService->addLogAction($user->getId(),'Supprimer une bordereau',$bureauSelected);
$response = "ok";
}
}
return new Response($response);
}
#[Route('/deleteModal/{id}/', name: 'deleteModal')]
public function deleteModal(Request $request, EntityManagerInterface $entityManager,$id,BaseService $baseService): Response
{
$response="";
$chckAccess = $this->baseService->Role(66);
if($chckAccess == 0){
$response = "Vous n'avez pas accès à cette opération";
}else if ($chckAccess == 2){
$response = "Vous n'avez pas accès à cette opération";
}
if( $response == ""){
$session = new Session;
$user = $session->get('user');
$bureauSelected = $session->get('bureauSelected');
$response = "";
$modal = $entityManager->getRepository(ModelBordereau::class)->find($id);
$borderaux = $entityManager->getRepository(Bordereau::class)->findByIdModal($id);
if(!$modal)
{
$response = 'Desolé, cette modele est introuvable !';
}
else if($borderaux)
{
$response = 'Desolé, cette modele est utilisé dans votre marches !';
}
else
{
$details = $entityManager->getRepository(InfosModalBordereau::class)->findByIdModal($id);
foreach ($details as $detail) {
$entityManager->remove($detail);
}
// Remove the utilisateur
$entityManager->remove($modal);
$entityManager->flush();
$baseService->addLogAction($user->getId(),'Supprimer un modele de borderau',$bureauSelected);
$response = "ok";
}
}
return new Response($response);
}
#[Route('/valideDevis/{id}/', name: 'valideDevis')]
public function valideDevis(Request $request, EntityManagerInterface $entityManager,$id,BaseService $baseService): Response
{
$response='';
$chckAccess = $this->baseService->Role(119);
if($chckAccess == 0){
$response = "Vous n'avez pas accès à cette opération";
}else if ($chckAccess == 2){
$response = "Vous n'avez pas accès à cette opération";
}
if( $response == ""){
$session = new Session;
$user = $session->get('user');
$bureauSelected = $session->get('bureauSelected');
$response = "";
$devis = $entityManager->getRepository(Devis::class)->find($id);
if (!$devis)
{
$response = 'Desolé, cette devis est introuvable !';
}
else
{
$devis->setEtatDevis(1);
$marche = new Marche();
$marche->setNumeMarc($devis->getNumeDevi());
$marche->setDateCreation(new \DateTime());
$marche->setObjeMarc($devis->getObjeDevi());
$marche->setTotalHt($devis->getTotalTh());
$marche->setTotalTtc($devis->getTotalTtc());
$marche->setTva($devis->getTva());
$marche->setEtatMarc(0);
$marche->setIdClient($devis->getIdClient());
$marche->setTypeMarc(1);
$marche->setIdDevis($devis->getId());
$marche->setdescMarc("");
$marche->setModePaie(0);
$marche->setDateDebut(new \DateTime());
$marche->setDateFin(new \DateTime());
$entityManager->persist($marche);
$entityManager->flush();
$marche_bureau = new BureauMarche();
$marche_bureau->setIdMarche($marche->getId());
$marche_bureau->setIdBureau($bureauSelected);
$entityManager->persist($marche_bureau);
$entityManager->flush();
$baseService->addLogAction($user->getId(),'Valider un devis',$bureauSelected);
$response = "ok";
}
}
return new Response($response);
}
#[Route('/valideBordereau/{id}/', name: 'valideBordereau')]
public function valideBordereau(Request $request, EntityManagerInterface $entityManager,$id,BaseService $baseService): Response
{
$response='';
$chckAccess = $this->baseService->Role(120);
if($chckAccess == 0){
$response = "Vous n'avez pas accès à cette opération";
}else if ($chckAccess == 2){
$response = "Vous n'avez pas accès à cette opération";
}
if($response == ""){
$session = new Session;
$user = $session->get('user');
$bureauSelected = $session->get('bureauSelected');
$response = "";
$bordereau = $entityManager->getRepository(Bordereau::class)->find($id);
if (!$bordereau)
{
$response = 'Desolé, cette bordereau est introuvable !';
}
else
{
$bordereau->setEtatBord(1);
$marche = new Marche();
$marche->setNumeMarc($bordereau->getNumeAo());
$marche->setDateCreation(new \DateTime());
$marche->setObjeMarc($bordereau->getObjeBord());
$marche->setTotalHt($bordereau->getTotalHt());
$marche->setTotalTtc($bordereau->getTotalTtc());
$marche->setTva($bordereau->getTva());
$marche->setEtatMarc(0);
$marche->setIdClient($bordereau->getIdClient());
$marche->setTypeMarc(2);
$marche->setIdDevis($bordereau->getId());
$marche->setdescMarc("");
$marche->setModePaie(0);
$marche->setDateDebut(new \DateTime());
$marche->setDateFin(new \DateTime());
$entityManager->persist($marche);
$entityManager->flush();
$marche_bureau = new BureauMarche();
$marche_bureau->setIdMarche($marche->getId());
$marche_bureau->setIdBureau($bureauSelected);
$entityManager->persist($marche_bureau);
$entityManager->flush();
$baseService->addLogAction($user->getId(),'Valider une bordereau de prix',$bureauSelected);
$response = "ok";
}
}
return new Response($response);
}
#[Route('/archiverDevis/{id}/', name: 'archiverDevis')]
public function archiverDevis(Request $request, EntityManagerInterface $entityManager,
BaseService $baseService,$id): Response
{
$response='';
$chckAccess = $this->baseService->Role(57);
if($chckAccess == 0){
$response = "Vous n'avez pas accès à cette opération";
}else if ($chckAccess == 2){
$response = "Vous n'avez pas accès à cette opération";
}
if( $response == ""){
$session = new Session;
$user = $session->get('user');
$bureauSelected = $session->get('bureauSelected');
$devis = $entityManager->getRepository(Devis::class)->find($id);
if (!$devis)
{
$response = 'Desolé, ce devis est introuvable !';
}
else
{
// Toggle the etatBure (change status)
$devis->setEtatDevis(2);
$baseService->addLogAction($user->getId(),'Archiver un devis',$bureauSelected);
// Persist the changes
$entityManager->flush();
$response = "ok";
}
}
return new Response($response);
}
#[Route('/archiverBord/{id}/', name: 'archiverBord')]
public function archiverBord(Request $request, EntityManagerInterface $entityManager,
BaseService $baseService,$id): Response
{
$response='';
$chckAccess = $this->baseService->Role(67);
if($chckAccess == 0){
$response = "Vous n'avez pas accès à cette opération";
}else if ($chckAccess == 2){
$response = "Vous n'avez pas accès à cette opération";
}
if( $response == ""){
$session = new Session;
$user = $session->get('user');
$bureauSelected = $session->get('bureauSelected');
$bord = $entityManager->getRepository(Bordereau::class)->find($id);
if (!$bord)
{
$response = 'Desolé, cette bordereau de prix est introuvable !';
}
else
{
// Toggle the etatBure (change status)
$bord->setEtatBord(2);
// Persist the changes
$entityManager->flush();
$baseService->addLogAction($user->getId(),'Archiver une bordereau',$bureauSelected);
$response = "ok";
}
}
return new Response($response);
}
#[Route('/pdfDevis/{id}/', name: 'pdfDevis')]
public function pdfDevis(Request $request, EntityManagerInterface $entityManager,$id)
{
$chckAccess = $this->baseService->Role(121);
if($chckAccess == 0){
return $this->redirectToRoute('login');
}else if ($chckAccess == 2){
return $this->redirectToRoute('infoUtilisateur');
}
$devis = $entityManager->getRepository(Devis::class)->find($id);
$detailsBonCommande = $entityManager->getRepository(DetailDevis::class)->findByIdDevis($id);
$client = $entityManager->getRepository(Client::class)->find($devis->getIdClient());
if(!$client || !$detailsBonCommande || !$devis){
return $this->redirectToRoute('listDevis');
}
$totalHt = 0;
$totalTva = 0;
$tauxTva = $devis->getTva();
foreach ($detailsBonCommande as $detail) {
$qte = $detail->getQte();
$prixUnitaire = $detail->getTotalHt();
$totalDetailHt = $qte * $prixUnitaire;
$totalHt += $totalDetailHt;
$totalTva += $prixUnitaire * ($tauxTva / 100);
}
// Render the view
$htmlContent = $this->renderView('devis/devisPDF.html.twig', [
'd' => $devis,
'details' => $detailsBonCommande,
'client' => $client,
'totalTva' => number_format($totalTva, 2, '.', '')
]);
$html2pdf = new Html2Pdf();
$html2pdf->writeHTML($htmlContent);
$pdfOutput = $html2pdf->output();
$response = new Response($pdfOutput);
$response->headers->set('Content-Type', 'application/pdf');
$response->headers->set('Content-Disposition', 'inline; filename=bon_commande.pdf');
return $response;
}
#[Route('/pdfBordereau/{id}/', name: 'pdfBordereau')]
public function pdfBordereau(Request $request, EntityManagerInterface $entityManager, BordereauRepository $repo,$id)
{
$session = new Session();
$chckAccess = $this->baseService->Role(122);
if($chckAccess == 0){
return $this->redirectToRoute('login');
}else if ($chckAccess == 2){
return $this->redirectToRoute('infoUtilisateur');
}
$bordereau = $entityManager->getRepository(Bordereau::class)->find($id);
$model = $entityManager->getRepository(ModelBordereau::class)->find($bordereau->getIdModal());
$client = $entityManager->getRepository(Client::class)->find($bordereau->getIdClient());
$infos = $entityManager->getRepository(InfosModalBordereau::class)->findByIdModal($bordereau->getIdModal());
$details = $entityManager->getRepository(DetailBord::class)->findByIdBord($id);
$idBureau = $session->get('bureauSelected');
$bureau = $entityManager->getRepository(Bureau::class)->find($idBureau);
$infoLines = [];
foreach ($details as $detail) {
$idDetail = $detail->getId();
// Retrieve info details for the current detail
$infosDetailBord = $entityManager->getRepository(InfosDetailBord::class)->findByIdDeta($idDetail);
foreach ($infosDetailBord as $infoDetail) {
$idInfo = $infoDetail->getIdInfo();
$value = $infoDetail->getValuInfo();
if (!isset($infoLines[$idInfo])) {
$infoLines[$idInfo] = [];
}
$infoLines[$idInfo][] = [
'idInfo' => $idInfo,
'value' => $value,
];
}
}
// Merge $infos with $infoLines based on 'id' property
$mergedInfo = [];
foreach ($infos as $info) {
$idInfo = $info->getId();
$mergedInfo[$idInfo] = [
'idInfo' => $idInfo,
'nomColMo' => $info->getNomColMo(),
'resSumCo' => $info->getResSumCo(),
'inPdf' => $info->getInPdf(),
'isDes' => $info->getIsDes(),
'isQte' => $info->getIsQte(),
'values' => isset($infoLines[$idInfo]) ? $infoLines[$idInfo] : [],
];
}
$htmlContent = $this->renderView('devis/bordereauPDF.html.twig', [
'd' => $bordereau,
'mergedInfo' => $mergedInfo,
'client' => $client,
'model' => $model,
'bureau'=>$bureau
]);
$html2pdf = new Html2Pdf();
$html2pdf->writeHTML($htmlContent);
$pdfOutput = $html2pdf->output();
$response = new Response($pdfOutput);
$response->headers->set('Content-Type', 'application/pdf');
$response->headers->set('Content-Disposition', 'inline; filename=bon_commande.pdf');
return $response;
}
#[Route('/ajaxUpdateDevis', name: 'ajaxUpdateDevis')]
public function ajaxUpdateBonCommande(Request $request, EntityManagerInterface $entityManager, SerializerInterface $serializer,
ValidateService $validateService,DevisRepository $devisRepository,BaseService $baseService): Response
{
$response = "";
$chckAccess = $this->baseService->Role(54);
if($chckAccess == 0){
$response = "Vous n'avez pas accès à cette opération";
}else if ($chckAccess == 2){
$response = "Vous n'avez pas accès à cette opération";
}
if( $response == ""){
$session = new Session;
$user = $session->get('user');
$bureauSelected = $session->get('bureauSelected');
$response = "";
$num = $devisRepository->getNumero();
$id=$request->get('id');
$devis = $entityManager->getRepository(Devis::class)->find($id);
$details = $entityManager->getRepository(DetailDevis::class)->findByIdDevis($id);
$client=$request->get('client');
$numero=$request->get('numero');
$objet=$request->get('objet');
$tva=$request->get('tva');
$date=$request->get('date');
$objetDetail=$request->get('objetDetail');
$qteDetail=$request->get('qteDetail');
$totalThDetail=$request->get('totalThDetail');
$hht=$request->get('hht');
$httc=$request->get('httc');
if($bureauSelected == 0)
{
$bureau=$request->get('bureau');
}
$contraintes = array(
"numero" => array("val" => $numero, "length" => 255, "type" => "string", "isBlank" => true),
"objet" => array("val" => $objet, "length" => 255, "type" => "string", "isBlank" => true),
"totalThDetail" => array("val" => $hht, "type" => "float", "isBlank" => true),
);
$valideDevis = $validateService->validateur($contraintes);
if($valideDevis === true)
{
$dv = $entityManager->getRepository(Devis::class)->findBy(array("refeDevi" => $numero));
if($numero!= $devis->getRefeDevi() && $dv)
{
$response = 'Cette référence de devis est déjà exist, Veuillez vérifier s\'il vous plaît.';
}
else
{
$checkDetail = 0;
for ($k=0; $k < count($objetDetail); $k++) {
if(empty(trim($objetDetail[$k])) == " "){
$checkDetail = 1;
// break;
}
}
if($checkDetail == 0){
for ($k=0; $k < count($totalThDetail); $k++) {
if(empty(trim($totalThDetail[$k])) == " "){
if(!is_numeric($totalThDetail[$k])){
$checkDetail = 1;
}
// break;
}
}
for ($k=0; $k < count($qteDetail); $k++) {
if(empty(trim($qteDetail[$k])) == " "){
$checkDetail = 1;
// break;
}
}
}
if($checkDetail == 0){
$devis->setRefeDevi($numero);
$devis->setIdClient($client);
$devis->setObjeDevi($objet);
$devis->setTotalTh($hht);
$devis->setTotalTtc($httc);
$devis->setTva($tva);
$devis->setDateEcheance( new \DateTime($date));
foreach($details as $detail)
{
$entityManager->remove($detail);
}
for($i=0;$i<count($objetDetail);$i++)
{
$detail = new DetailDevis();
$detail->setIdDevis($devis->getId());
$detail->setTotalHt($totalThDetail[$i]);
$detail->setdescDetDev($objetDetail[$i]);
$detail->setQte($qteDetail[$i]);
$entityManager->persist($detail);
// Persist the Client entity and flush it to the database
}
$entityManager->flush();
$baseService->addLogAction($user->getId(),'Modifier un devis',$bureauSelected);
$response = 'ok';
}else{
$response = 'Veuillez vérifier vos details devis !';
}
}
}
else
{
$response = 'Veuillez vérifier vos informations, un des champs est incorrect !';
}
}
return new Response($response);
}
#[Route('/ajaxAddDevis', name: 'ajaxAddDevis')]
public function ajaxAddBonCommande(Request $request, EntityManagerInterface $entityManager, SerializerInterface $serializer,
ValidateService $validateService,DevisRepository $devisRepository,BaseService $baseService): Response
{
$response = "";
$chckAccess = $this->baseService->Role(53);
if($chckAccess == 0){
$response = "Vous n'avez pas accès à cette opération";
}else if ($chckAccess == 2){
$response = "Vous n'avez pas accès à cette opération";
}
if( $response == ""){
$session = new Session;
$user = $session->get('user');
$bureauSelected = $session->get('bureauSelected');
$num = $devisRepository->getNumero();
$client=$request->get('client');
$numero=$request->get('numero');
$objet=$request->get('objet');
$tva=$request->get('tva');
$date=$request->get('date');
$objetDetail=$request->get('objetDetail');
$qteDetail=$request->get('qteDetail');
$totalThDetail=$request->get('totalThDetail');
$hht=$request->get('hht');
$httc=$request->get('httc');
if($bureauSelected == 0)
{
$bureau=$request->get('bureau');
}
$contraintes = array(
"numero" => array("val" => $numero, "length" => 255, "type" => "string", "isBlank" => true),
"objet" => array("val" => $objet, "length" => 255, "type" => "string", "isBlank" => true),
"totalThDetail" => array("val" => $hht, "type" => "float", "isBlank" => true),
);
$valideDevis = $validateService->validateur($contraintes);
if($valideDevis === true)
{
$dv = $entityManager->getRepository(Devis::class)->findBy(array("refeDevi" => $numero));
if($dv)
{
$response = 'Cette référence de devis est déjà exist, Veuillez vérifier s\'il vous plaît.';
}
else
{
$checkDetail = 0;
for ($k=0; $k < count($objetDetail); $k++) {
if(empty(trim($objetDetail[$k])) == " "){
$checkDetail = 1;
// break;
}
}
if($checkDetail == 0){
for ($k=0; $k < count($totalThDetail); $k++) {
if(empty(trim($totalThDetail[$k])) == " "){
$checkDetail = 1;
// break;
}
}
for ($k=0; $k < count($qteDetail); $k++) {
if(empty(trim($qteDetail[$k])) == " "){
$checkDetail = 1;
// break;
}
}
}
if($checkDetail == 0){
$checkHT = true;
foreach ($totalThDetail as $value) {
if(!is_numeric($value)){
$checkHT = false;
break;
}
}
if($checkHT){
$devis = new Devis();
$devis->setNumeDevi($num);
$devis->setDateCreation(new \DateTime());
$devis->setIdClient($client);
$devis->setObjeDevi($objet);
$devis->setTotalTh($hht);
$devis->setTotalTtc($httc);
$devis->setTva($tva);
$devis->setEtatDevis(0);
$devis->setRefeDevi($numero);
$devis->setYear(date('Y'));
$devis->setDateEcheance( new \DateTime($date));
$entityManager->persist($devis);
// Persist the Client entity and flush it to the database
$entityManager->flush();
$baseService->addLogAction($user->getId(),'Ajouter un devis',$bureauSelected);
for($i=0;$i<count($objetDetail);$i++)
{
$detail = new DetailDevis();
$detail->setIdDevis($devis->getId());
$detail->setTotalHt($totalThDetail[$i]);
$detail->setdescDetDev($objetDetail[$i]);
$detail->setQte($qteDetail[$i]);
$entityManager->persist($detail);
// Persist the Client entity and flush it to the database
$entityManager->flush();
}
$response = 'ok';
}
else
{
$response = 'Veuillez vérifier vos details devis !';
}
}else{
$response = 'Veuillez vérifier vos details devis !';
}
}
}
else
{
$response = 'Veuillez vérifier vos informations, un des champs est incorrect !';
}
}
return new Response($response);
}
#[Route('/ajaxAddBord', name: 'ajaxAddBord')]
public function ajaxAddBord(Request $request, EntityManagerInterface $entityManager, SerializerInterface $serializer,
ValidateService $validateService, BordereauRepository $bordereauRepository,BaseService $baseService): Response
{
$session = new Session;
$user = $session->get('user');
$bureauSelected = $session->get('bureauSelected');
$response = "";
$num = $bordereauRepository->getNumero();
$client= $request->get('client');
$numero= $request->get('numerobord');
$objet= $request->get('objet');
$tva= $request->get('tva');
$date= $request->get('date');
$htt= $request->get('hht');
$httc= $request->get('httc');
$modele= $request->get('modele');
if($bureauSelected == 0)
{
$bureau=$request->get('bureau');
}
$modal = $entityManager->getRepository(ModelBordereau::class)->find($modele);
if(!$modal)
{
$response = 'Merci de choisir un modèle de bordereau.';
}
else
{
$qteName = $entityManager->getRepository(InfosModalBordereau::class)->findOneBy(['idModal'=>$modele ,'isQte'=>1]);
// $response = json_encode($qteName->getNomColMo());
$contraintes = array(
"numero" => array("val" => $numero, "length" => 255, "type" => "string", "isBlank" => true),
"objet" => array("val" => $objet, "length" => 255, "type" => "string", "isBlank" => true),
"htt" => array("val" => $htt, "type" => "float", "isBlank" => true),
"httc" => array("val" => $httc, "type" => "float", "isBlank" => true),
);
$valideBordereau = $validateService->validateur($contraintes);
if($valideBordereau === true)
{
$br = $entityManager->getRepository(Bordereau::class)->findBy(array("refeBord" => $numero));
if($br)
{
$response = 'Cette référence de bordereau est déjà exist, Veuillez vérifier s\'il vous plaît.';
}
else
{
$total = $request->get('total');
$des = $modal->getDesignation();
$designation = $request->get(strtolower(str_replace(' ','_',$des)));
$count = count($total);
$checkDetail = true;
for ($i = 0; $i < $count; $i++) {
if(empty(trim($total[$i])) or ($total[$i] < 0) or empty(trim($designation[$i])) )
{
$checkDetail = false;
break;
}
}
if($checkDetail == true){
$bordereau = new Bordereau();
$bordereau->setNumeAo($num);
$bordereau->setDateCreation(new \DateTime());
$bordereau->setIdClient($client);
$bordereau->setObjeBord($objet);
$bordereau->setTotalHt($htt);
$bordereau->setTotalTtc($httc);
$bordereau->setTva($tva);
$bordereau->setEtatBord(0);
$bordereau->setIdModal($modele);
$bordereau->setDateEcheance(new \DateTime($date));
$bordereau->setRefeBord($numero);
$entityManager->persist($bordereau);
// Persist the Client entity and flush it to the database
$entityManager->flush();
$infosModalBordereau = $entityManager->getRepository(InfosModalBordereau::class)->findByIdModal($modele);
$des = $modal->getDesignation();
$total = $request->get('total');
$qte = $request->get(strtolower($qteName->getNomColMo()));
$designation = $request->get(strtolower(str_replace(' ','_',$des)));
$count = count($total);
for ($i = 0; $i < $count; $i++) {
$detail = new DetailBord();
$detail->setIdBord($bordereau->getId());
$detail->setTotal($total[$i]);
$detail->setQte($qte[$i]);
$detail->setObjet($designation[$i]);
$entityManager->persist($detail);
$entityManager->flush();
foreach ($infosModalBordereau as $info) {
$name =strtolower($info->getNomColMo());
$idInfo = $info->getId();
$modeleValues = $request->get(str_replace(' ','_',$name));
$infosDetailBord = new InfosDetailBord();
$infosDetailBord->setIdDeta($detail->getId());
$infosDetailBord->setIdInfo($idInfo);
$infosDetailBord->setValuInfo($modeleValues[$i]);
$entityManager->persist($infosDetailBord);
$entityManager->flush();
}
}
$entityManager->flush();
$baseService->addLogAction($user->getId(),'Ajouter un bordereau',$bureauSelected);
$response= 'ok';
}else{
$response = 'Veuillez vérifier votre details saisie !';
}
}
}
else
{
$response = 'Veuillez vérifier vos informations, un des champs est incorrect !';
}
}
return new Response($response);
}
#[Route('/ajaxUpdateBord', name: 'ajaxUpdateBord')]
public function ajaxUpdateBord(Request $request, EntityManagerInterface $entityManager, SerializerInterface $serializer,
ValidateService $validateService,BaseService $baseService): Response
{
$session = new Session;
$user = $session->get('user');
$bureauSelected = $session->get('bureauSelected');
$response = "";
$id=$request->get('id');
$bordereau = $entityManager->getRepository(Bordereau::class)->find($id);
$details = $entityManager->getRepository(DetailBord::class)->findByIdBord($id);
$client= $request->get('client');
$numero= $request->get('numerobord');
$objet= $request->get('objet');
$tva= $request->get('tva');
$date= $request->get('date');
$htt= $request->get('hht');
$httc= $request->get('httc');
$modele= $request->get('modele');
if($bureauSelected == 0)
{
$bureau=$request->get('bureau');
}
$modal = $entityManager->getRepository(ModelBordereau::class)->find($modele);
$qteName = $entityManager->getRepository(InfosModalBordereau::class)->findOneBy(['idModal'=>$modele , 'isQte'=>1]);
if(!$modal)
{
$response = 'Merci de choisir un modèle de bordereau.';
}
else
{
$contraintes = array(
"numero" => array("val" => $numero, "length" => 255, "type" => "string", "isBlank" => true),
"objet" => array("val" => $objet, "length" => 255, "type" => "string", "isBlank" => true),
"htt" => array("val" => $htt, "type" => "float", "isBlank" => true),
"httc" => array("val" => $httc, "type" => "float", "isBlank" => true),
);
$valideBordereau = $validateService->validateur($contraintes);
if($valideBordereau === true)
{
$br = $entityManager->getRepository(Bordereau::class)->findBy(array("refeBord" => $numero));
if($numero!= $bordereau->getRefeBord() && $br)
{
$response = 'Cette référence de bordereau est déjà exist, Veuillez vérifier s\'il vous plaît.';
}
else
{
$bordereau->setRefeBord($numero);
$bordereau->setDateCreation(new \DateTime());
$bordereau->setIdClient($client);
$bordereau->setObjeBord($objet);
$bordereau->setTotalHt($htt);
$bordereau->setTotalTtc($httc);
$bordereau->setTva($tva);
$bordereau->setEtatBord(0);
$bordereau->setDateEcheance(new \DateTime($date));
foreach ($details as $detail) {
$infosDetails = $entityManager->getRepository(InfosDetailBord::class)->findByIdDeta($detail->getId());
foreach ($infosDetails as $info) {
$entityManager->remove($info);
}
$entityManager->remove($detail);
}
$infosModalBordereau = $entityManager->getRepository(InfosModalBordereau::class)->findByIdModal($modele);
$des = $modal->getDesignation();
$total = $request->get('total');
$qte = $request->get(strtolower($qteName->getNomColMo()));
$designation = strtolower($des); //$request->get(strtolower($des));
$count = count($total);
for ($i = 0; $i < $count; $i++) {
if (empty(trim($qte[$i]))) {
return new Response('La quantité ne peut pas être vide ou contenir uniquement des espaces.');
}
$detail = new DetailBord();
$detail->setIdBord($bordereau->getId());
$detail->setTotal($total[$i]);
$detail->setObjet(utf8_encode($designation));
$detail->setQte($qte[$i]);
$entityManager->persist($detail);
$entityManager->flush();
foreach ($infosModalBordereau as $info) {
$name = strtolower(trim(str_replace(" ","_",$info->getNomColMo())));
$idInfo = $info->getId();
$modeleValues = $request->get($name);
$infosDetailBord = new InfosDetailBord();
$infosDetailBord->setIdDeta($detail->getId());
$infosDetailBord->setIdInfo($idInfo);
$infosDetailBord->setValuInfo($modeleValues[$i]);
$entityManager->persist($infosDetailBord);
$entityManager->flush();
}
}
$entityManager->flush();
$baseService->addLogAction($user->getId(),'Modifier un bordereau',$bureauSelected);
$response = "ok";
}
}
else
{
$response = 'Veuillez vérifier vos informations, un des champs est incorrect !';
}
}
return new Response($response);
}
}