<?php
namespace App\Controller;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Security\Core\Security;
use App\Service\EmailService;
use App\Service\DemandeAchatService;
use App\Service\ExcelImportService;
use App\Service\ContratCadreService;
use App\Service\TranslationWriter;
use PhpOffice\PhpSpreadsheet\IOFactory;
use PhpOffice\PhpSpreadsheet\Reader\Xlsx;
use Twig\Environment;
use Dompdf\Dompdf;
use Symfony\Component\Form\Extension\Core\Type\FileType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\Extension\Core\Type\IntegerType;
use Symfony\Component\Form\Extension\Core\Type\HiddenType;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use App\Form\demAchatType;
use App\Form\ModifDemAchatType;
use App\Form\DemAchatAddItemType;
use App\Form\RegistrationFormType;
use App\Form\PPMdemAchatType;
use App\Entity\User;
use App\Entity\Parametre;
use App\Entity\NumDA;
use App\Entity\demAchat;
use App\Entity\RapportageDA;
use App\Entity\DemAchatTemp;
use App\Entity\Approb;
use App\Entity\Bailleur;
use App\Entity\UseBailleur;
use App\Entity\CategoryCatalogue;
use App\Entity\CommandeAchat;
use App\Entity\Catalogue;
use App\Entity\SupH;
use App\Entity\Image;
use App\Entity\ImageS;
use App\Form\BonImageType;
use App\Form\ImageSType;
use App\Entity\demPaiement;
use App\Entity\UserCentre;
use App\Entity\CentreCout;
use App\Entity\ReviewTec;
use App\Entity\CategorieMarche;
use App\Entity\ContratCadre;
class DemandeAchatController extends AbstractController
{
private TranslationWriter $translationWriter;
private EntityManagerInterface $em;
private Security $security;
private DemandeAchatService $demandeAchatService;
private EmailService $emailService;
private ExcelImportService $excelImportService;
private Environment $twig;
private ContratCadreService $contratCadreService;
// Le constructeur prend tous les services en paramètre
public function __construct(
EntityManagerInterface $em,
Security $security,
DemandeAchatService $demandeAchatService,
EmailService $emailService,
ExcelImportService $excelImportService,
Environment $twig,
ContratCadreService $contratCadreService,
TranslationWriter $translationWriter
) {
$this->em = $em;
$this->security = $security;
$this->demandeAchatService = $demandeAchatService;
$this->emailService = $emailService;
$this->excelImportService = $excelImportService;
$this->twig = $twig;
$this->translationWriter = $translationWriter;
$this->contratCadreService = $contratCadreService;
}
public function updateData(Request $request, EntityManagerInterface $em): JsonResponse
{
$input = $request->request->get('input');
if (!$input) {
return new JsonResponse(['countryList' => ''], 400);
}
// Requête DQL corrigée pour Symfony 5+
$queryBuilder = $em->createQueryBuilder()
->select('c.designation')
->from(Catalogue::class, 'c')
->where('c.designation LIKE :input')
// C'est ici que l'on modifie la clause ORDER BY pour donner la priorité aux résultats
// qui commencent par la chaîne de recherche.
->orderBy('CASE WHEN c.designation LIKE :start THEN 0 ELSE 1 END', 'ASC')
->addOrderBy('c.designation', 'ASC')
->setParameter('input', '%' . $input . '%')
->setParameter('start', $input . '%');
$results = $queryBuilder->getQuery()->getArrayResult();
$countryList = '<ul id="matchList" class="ui-autocomplete ui-menu ui-widget ui-widget-content ui-corner-all">';
foreach ($results as $result) {
$matchStringBold = preg_replace('/('.$input.')/i', '<strong>$1</strong>', $result['designation']); // Replace text field input by bold one
$countryList .= '<span id="li"><li class="ui-menu-item" id="'.$result['designation'].'"><span id="bol">'.$matchStringBold.'</span></li></span>'; // Create the matching list - we put maching name in the ID too
}
$countryList .= '</ul>';
return new JsonResponse(['countryList' => $countryList]);
}
public function gestionDemandeAchat(Request $request): Response
{
$user = $this->security->getUser();
$list_demAcha = [];
$list_demAcha2 = [];
$demAchat = new demAchat;
$usersel=new User;
$data = $this->demandeAchatService->getValidationData();
$admin = $data['admin'];
$list_demAchaall = $data['list_demAchaall'];
$list_demAchavalide = $data['list_demAchavalide'];
$list_demAchauser = $data['list_demAchauser'];
$list_demAcharefuse = $data['list_demAcharefuse'];
$list_demAcha1 = $data['list_demAcha1'];
$list_demAcha3 = $data['list_demAcha3'];
$list_demAcha = $data['list_demAcha'];
$list_demAcha2 = $data['list_demAcha2'];
$list_use = $data['list_use'];
$list_useb = $data['list_useb'];
$list_demAchaval = $data['list_demAchaval'];
$nbdarejet = $data['nbdarejet'];
$nballda = $data['nballda'];
$nbdavalid = $data['nbdavalid'];
$nbdanivo = $data['nbdanivo'];
$nbmesda = $data['nbmesda'];
$form = $this->createForm(demAchatType::class);
$form3 = $this->createForm(DemAchatAddItemType::class);
$form33 = $this->createForm(PPMdemAchatType::class);
$form2 = $this->createFormBuilder()
->add('listnum', ChoiceType::class, [
'label' => 'Toute DA',
'choices' => $list_demAchaall,
'required' => false,
'mapped' => false,
'placeholder'=>'Toute DA',
])
->getForm();
$form5 = $this->createFormBuilder()
->add('listnum3', ChoiceType::class, [
'label' => 'DA que j\'ai validé',
'choices' => $list_demAchavalide,
'required' => false,
'mapped' => false,
'placeholder'=>'choisir',
])
->getForm();
$form7 = $this->createFormBuilder()
->add('listnum7', ChoiceType::class, [
'label' => 'DA rejeté',
'choices' => $list_demAcharefuse,
'required' => false,
'mapped' => false,
'placeholder'=>'choisir',
])
->getForm();
$form9 = $this->createFormBuilder()
->add('listnum9', ChoiceType::class, [
'label' => 'Mes DA',
'choices' => $list_demAchauser,
'required' => false,
'mapped' => false,
'placeholder'=>'choisir',
])
->getForm();
$form4 = $this->createFormBuilder()
->add('listnum2', ChoiceType::class, [
'label' => 'DA à valider',
'choices' => $list_demAcha2,
'required' => false,
'mapped' => false,
'placeholder'=>'choisir',
])
->getForm();
$form1 = $this->createFormBuilder()
->add('listnum1', ChoiceType::class, [
'label' => 'DA valider non pris en charge',
'choices' => $list_demAcha1,
'required' => false,
'mapped' => false,
'placeholder'=>'DA valider non pris en charge',
])
->getForm();
$form10 = $this->createFormBuilder()
->add('listnum5', ChoiceType::class, [
'label' => 'DA pris en charge',
'choices' => $list_demAcha3,
'required' => false,
'mapped' => false,
'placeholder'=>'DA pris en charge',
])
->getForm();
$form6 = $this->createFormBuilder()
->add('user', ChoiceType::class, [
'label' => 'utilisateur',
'choices' => $list_use,
'required' => false,
'mapped' => false,
'placeholder'=> 'choisir un utilisateur',
])
->add('listnum4', ChoiceType::class, [
'label' => '',
'choices' => [], // Le tableau est vide
'required' => false,
'mapped' => false, // Important si ce champ n'est pas lié à une entité
'placeholder'=>'Liste DA /utilisateur',
])
->getForm();
$form8 = $this->createFormBuilder()
->add('usebaille', ChoiceType::class, [
'label' => 'usebaille',
'choices' => $list_useb,
'required' => false,
'mapped' => false,
'placeholder'=>'choisir un bailleur',
])
->add('listnum6', ChoiceType::class, [
'label' => '',
'choices' => [], // Le tableau est vide
'required' => false,
'mapped' => false, // Important si ce champ n'est pas lié à une entité
'placeholder'=>'Liste DA/ bailleur',
])
->getForm();
$form10 = $this->createFormBuilder()
->add('listnum5', ChoiceType::class, [
'label' => 'DA pris en charge',
'choices' => $list_demAcha3,
'required' => false,
'mapped' => false,
'placeholder'=>'DA pris en charge',
])
->getForm();
$form110 = $this->createFormBuilder()
->add('listnum55', ChoiceType::class, [
'label' => ' DA valider',
'choices' => $list_demAchavalide,
'required' => false,
'mapped' => false,
'placeholder'=>'DAs valider',
])
->getForm();
$form01 = $this->createFormBuilder()
->add('fiche', FileType::class, [
'required' => false,
'mapped' => false, // Cette ligne est cruciale
])
->getForm();
$demacha=$this->em->getRepository(demAchat::class)->find(8745);
$form200 = $this->createForm(demAchatType::class, $demacha);
$form01->handleRequest( $request);
if ($form01->isSubmitted() ) {
$file = $form01->get('fiche')->getData();
if ($file) {
try {
// Appel du service qui gère l'importation
$this->excelImportService->importDemandesAchat($file);
// $this->addFlash('success', 'Le fichier a été importé avec succès !');
} catch (\Exception $e) {
$this->addFlash('error', 'Erreur lors de l\'importation : ' . $e->getMessage());
}
}
return $this->redirect( $this->generateUrl('mstopes_gestion_demande_achat'));
}
return $this->render('DemandeAchatVue/demandeAchat.html.twig'
,['form' => $form->createView(),'form2' => $form2->createView(),'form4' => $form4->createView(),
'form3' => $form3->createView(),'form6' => $form6->createView(),'form5' => $form5->createView(),
'form7' => $form7->createView(),'form9' => $form9->createView(),'nbmesda' => $nbmesda,
'nbdanivo' => $nbdanivo,'nbdavalid' => $nbdavalid,'nballda' => $nballda,'nbdarejet' => $nbdarejet,
'form1' => $form1->createView(),'form10' => $form10->createView(),'form8' => $form8->createView(),
'form33' => $form33->createView(),'form01' => $form01->createView(),
'form110' => $form110->createView(),'admin' => $admin,'form200' => $form200->createView(),
]
);
}
public function ajaxListDemAchat(Request $request): Response
{
// On vérifie que la requête est bien une requête AJAX.
// C'est un point de contrôle important pour éviter les accès directs.
if ($request->isXmlHttpRequest()) {
$id = $request->request->get('listnum');
// On s'assure que l'ID n'est pas vide avant de continuer.
if ($id !== null) {
// On redirige vers la route 'liste_demachat' avec l'ID en paramètre.
// Cela permet de ne pas dupliquer la logique d'affichage.
return $this->redirect($this->generateUrl('liste_demachat', ['id' => $id]));
}
}
// Si la requête n'est pas une requête AJAX ou si l'ID est manquant,
// on retourne une réponse d'erreur HTTP 400 Bad Request.
return new Response('Requête invalide', Response::HTTP_BAD_REQUEST);
}
public function listdemachat(int $id, Request $request): Response
{
$user = $this->security->getUser();
// 1. Appelez le service pour obtenir les données
$data = $this->demandeAchatService->getDemandeAchatData($id);
// Si le service ne trouve pas la demande, lancez une 404
if (empty($data)) {
throw $this->createNotFoundException("La demande d'achat n'existe pas.");
}
$da_sans_cc = $data['da_sans_cc'];
$utildrmedical = $data['utildrmedical'];
$usedrmedical = $data['usedrmedical'];
$demachats = $data['demachats'];
$numach = $data['numach'];
$x = $data['x'];
$total3 = $data['total3'];
$param = $data['param'];
$usesuph = $data['usesuph'];
$userr = $data['userr'];
$usedscsc = $data['usedscsc'];
$usedp = $data['usedp'];
$uselead = $data['uselead'];
$code = $data['code'];
$useprojet = $data['useprojet'];
$usechef1 = $data['usechef1'];
$usechef2 = $data['usechef2'];
$usechef3 = $data['usechef3'];
$usechef4 = $data['usechef4'];
$usechef5 = $data['usechef5'];
$usechef6 = $data['usechef6'];
$usechef7 = $data['usechef7'];
$userreg = $data['userreg'];
$userespacha = $data['userespacha'];
$demachatrefus = $data['demachatrefus'];
$v = $data['v'];
$usereg = $data['usereg'];
$signechefp1 = $data['signechefp1'];
$signechefp2 = $data['signechefp2'];
$signechefp3 = $data['signechefp3'];
$signechefp4 = $data['signechefp4'];
$signechefp5 = $data['signechefp5'];
$signechefp6 = $data['signechefp6'];
$signechefp7 = $data['signechefp7'];
$nb = $data['nb'];
$nomb = $data['nomb'];
$suph = $data['suph'];
$ub = $data['ub'];
$nbch = $data['nbch'];
$usebaille1 = $data['usebaille1'];
$usebaille2 = $data['usebaille2'];
$usebaille3 = $data['usebaille3'];
$usebaille4 = $data['usebaille4'];
$usebaille5 = $data['usebaille5'];
$usebaille6 = $data['usebaille6'];
$usebaille7 = $data['usebaille7'];
$valid1 = $data['valid1'];
$valid2 = $data['valid2'];
$usevalid1 = $data['usevalid1'];
$usevalid2 = $data['usevalid2'];
$uselead1 = $data['uselead1'];
$uselead2 = $data['uselead2'];
$uselead3 = $data['uselead3'];
$uselead4 = $data['uselead4'];
$uselead5 = $data['uselead5'];
$w = $data['w'];
$signelead1 = $data['signelead1'];
$signelead2 = $data['signelead2'];
$signelead3 = $data['signelead3'];
$signelead4 = $data['signelead4'];
$signelead5 = $data['signelead5'];
$utiltecgarag = $data['utiltecgarag'];
$utiltecinfo = $data['utiltecinfo'];
$utilrachat = $data['utilrachat'];
$utildscsc = $data['utildscsc'];
$utildscsc2 = $data['utildscsc2'];
$utilrr = $data['utilrr'];
$userlead = $data['userlead'];
$demachatrefuleads = $data['demachatrefuleads'];
$signeDP1 = $data['signeDP1'];
$signeDP2 = $data['signeDP2'];
$signeDP3 = $data['signeDP3'];
$signeDP4 = $data['signeDP4'];
$signeDP5 = $data['signeDP5'];
$signeDP6 = $data['signeDP6'];
$signeDP7 = $data['signeDP7'];
$signeDP8 = $data['signeDP8'];
$usedp1 = $data['usedp1'];
$usedp2 = $data['usedp2'];
$usedp3 = $data['usedp3'];
$usedp4 = $data['usedp4'];
$usedp5 = $data['usedp5'];
$usedp6 = $data['usedp6'];
$usedp7 = $data['usedp7'];
$usedp8 = $data['usedp8'];
$usedep = $data['usedep'];
$usechefp = $data['usechefp'];
$categmedical = $data['categmedical'];
$cloture = $data['cloture'];
// 2. Gérez les formulaires. La logique de gestion des requêtes POST reste ici.
$demach = $demachats[0]; // Récupérez l'objet principal
$form10 = $this->createFormBuilder(new demAchat())
->add('tva', ChoiceType::class, ['choices' => ['0' => 0, '5' => 5, '15' => 15, '18' => 18]])
->getForm();
/* $form20 = $this->createForm(demAchatType::class, $demach);
$form20= $this->createFormBuilder()
->add('images', ImageSType::class,['required' => false, ])
->getForm();
// Gérez l'envoi de formulaire si la méthode est POST
$form20->handleRequest($request);
if ($form20->isSubmitted() && $form20->isValid()) {
$this->em->flush();
return $this->redirectToRoute('mstopes_gestion_demande_achat');
}*/
return $this->render('DemandeAchatVue/show.html.twig'
,[
'cloture' => $cloture,
'da_sans_cc' => $da_sans_cc,
'utildrmedical' => $utildrmedical,
'categmedical' => $categmedical,
'usedrmedical' => $usedrmedical,
'demachats' => $demachats,
'numach' => $numach,
'user' => $user,
'id' => $id,
'x' => $x,
'total3' => $total3,
'param' => $param,
'usesuph' => $usesuph,
'userr' => $userr,
'usedscsc' => $usedscsc,
'usedp' => $usedp,
'uselead' => $uselead,
'usechefp' => $usechefp,
'usedep' => $usedep,
'code' => $code,
'useprojet' => $useprojet,
'usechef1' => $usechef1,
'usechef2' => $usechef2,
'usechef3' => $usechef3,
'userreg' => $userreg,
'usechef4' => $usechef4,
'usechef5' => $usechef5,
'usechef6' => $usechef6,
'userespacha' => $userespacha,
'usereg' => $usereg,
'signechefp1' => $signechefp1,
'signechefp2' => $signechefp2,
'signechefp3' => $signechefp3,
'signechefp4' => $signechefp4,
'signechefp5' => $signechefp5,
'signechefp6' => $signechefp6,
'v' => $v,
'demachatrefus' => $demachatrefus,
'nb' => $nb,
'form10' => $form10->createView(),
'nomb' => $nomb,
'suph' => $suph,
'ub' => $ub,
'nbch' => $nbch,
//'form20' => $form20->createView(),
'signechefp7' => $signechefp7,
'usechef7' => $usechef7,
'usebaille1' => $usebaille1,
'usebaille2' => $usebaille2,
'usebaille3' => $usebaille3,
'usebaille4' => $usebaille4,
'usebaille5' => $usebaille5,
'usebaille6' => $usebaille6,
'usebaille7' => $usebaille7
,'valid1' => $valid1,
'valid2' => $valid2,
'usevalid1' => $usevalid1,
'usegarage' => $usevalid2,
'uselead1' => $uselead1,
'uselead2' => $uselead2,
'uselead3' => $uselead3,
'w' => $w,
'signelead1' => $signelead1,
'signelead2' => $signelead2,
'signelead3' => $signelead3,
'signelead4' => $signelead4,
'signelead5' => $signelead5,
'utiltecgarag' => $utiltecgarag,
'utiltecinfo' => $utiltecinfo,
'utilrachat' => $utilrachat,
'utildscsc' => $utildscsc,
'utildscsc2' => $utildscsc2,
'utilrr' => $utilrr,
'uselead4' => $uselead4,
'uselead5' => $uselead5,
'userlead' => $userlead,
'demachatrefuleads' => $demachatrefuleads,
'signeDP1' => $signeDP1,
'signeDP2' => $signeDP2,
'signeDP3' => $signeDP3,
'signeDP4' => $signeDP4,
'signeDP5' => $signeDP5,
'signeDP6' => $signeDP6,
'signeDP7' => $signeDP7,
'signeDP8' => $signeDP8,
'usedp1' => $usedp1,
'usedp2' => $usedp2,
'usedp3' => $usedp3,
'usedp4' => $usedp4,
'usedp5' => $usedp5,
'usedp6' => $usedp6,
'usedp7' => $usedp7,
'usedp8' => $usedp8
]
);
}
public function addfileda(int $id, Request $request): Response
{
//$user = $this->security->getUser();
$demacha=$this->em->getRepository(demAchat::class)->find($id);
$form = $this->createForm(demAchatType::class, $demacha);
// Gérez l'envoi de formulaire si la méthode est POST
$form->handleRequest($request);
if ($form->isSubmitted() ) {
$this->em->flush();
return $this->redirectToRoute('mstopes_gestion_demande_achat');
}
return $this->render('DemandeAchatVue/addfileda.html.twig'
,[
'id' => $id,'form' => $form->createView()]
);
}
public function uploadImageAndLink(Request $request): JsonResponse
{
// 1. Récupérer l'ID du demAchat à partir des données POST de FormData
// JQuery doit inclure 'demAchatId' dans le FormData.
$demAchatId = $request->request->get('demAchatId');
if (!$demAchatId) {
return new JsonResponse(['error' => 'Missing demAchat ID'], 400);
}
/** @var demAchat $demAchat */
$demAchat = $this->em->getRepository(demAchat::class)->find($demAchatId);
if (!$demAchat) {
return new JsonResponse(['error' => 'DemAchat not found'], 404);
}
/** @var UploadedFile $file */
$file = $request->files->get('image'); // 'image' est le nom du champ file
if (!$file) {
return new JsonResponse(['error' => 'No file uploaded'], 400);
}
// --- Logique d'upload et de persistance de ImageS ---
/*
$imageS = new Image();
$fileName = md5(uniqid()) . '.' . $file->guessExtension();
try {
$file->move($imageS->getUploadRootDir(), $fileName);
} catch (\Exception $e) {
return new JsonResponse(['error' => 'File move failed'], 500);
}
$imageS->setUrl($fileName);
$imageS->setAlt($file->getClientOriginalName());
// 2. Lier l'ImageS au demAchat et persister/flusher
// Si un ancien fichier existait, vous pouvez le supprimer ici.
if ($oldImage = $demAchat->getImage()) {
// Logique de suppression de l'ancien fichier/entité ImageS (Optionnel)
$oldImagePath = $oldImage->getUploadRootDir() . '/' . $oldImage->getUrl();
if (file_exists($oldImagePath)) {
unlink($oldImagePath);
}
$this->em->remove($oldImage);
}
$demAchat->setImage($imageS); // Lier la nouvelle image
$this->em->persist($imageS);
$this->em->flush(); // Le flush va enregistrer ImageS et mettre à jour demAchat
*/
// --- Fin Logique d'upload ---
return new JsonResponse([
'success' => true,
//'imageId' => $imageS->getId(),
'message' => 'Image uploaded and linked successfully to DemAchat ID: ' . $demAchatId,
]);
}
public function listedatemp(int $id, Request $request): Response
{
$datemps=null;
$user = $this->security->getUser();
$datemps=$this->em->getRepository(DemAchatTemp::class)->findDemandeAchatPerso($id);
$montant=0; $nb=count($datemps);
if($datemps!==null){
foreach($datemps as $datemp)
{
$montant= $montant+$datemp->getPrixU()*$datemp->getQuantDemande();
}
$datemps[0]->setNumOrdre($montant);
$this->em->flush();
}
return $this->render('DemandeAchatVue/listedatemp.html.twig'
,[
'demachats' => $datemps,'nb' => $nb]
);
}
public function ajouterachattemp(Request $request): Response
{
$demAch = new DemAchatTemp;
$user = $this->security->getUser();
$demachas=$this->em->getRepository(DemAchatTemp::class)->findAll();
$obje = $request->request->get('obje');
$idcentreCout = $request->request->get('centreCout');
$idnomprojet = $request->request->get('bailleur');
$descrip = $request->request->get('descrip');
$quantDemand = $request->request->get('quantDemand');
$delais = $request->request->get('delais');
$region = $request->request->get('region');
$prixUnit = $request->request->get('prixUnit');
$iddesignrech = $request->request->get('iddesignrech');
if($region ==1){$region="Bamako";}
elseif($region ==2){$region="Segou";}
elseif($region ==3){$region="Mopti";}
elseif($region ==4){$region="Sikasso";}
elseif($region ==5){$region="Koulikoro";}
$nomprojet= $this->em->getRepository(Bailleur::class)->find($idnomprojet);
$cecout= $this->em->getRepository(CentreCout::class)->find($idcentreCout);
if($iddesignrech!=null)
$designrech= $this->em->getRepository(Catalogue::class)->findOneByDesignation($iddesignrech);
else
$designrech=null;
$num=1;
if($demachas!==null){
foreach($demachas as $demacha)
{
if($demacha->getNumDemandeAchat()>$num)
$num=$demacha->getNumDemandeAchat();
}
$num=$num+1;
}
$demAch->setCentreCout($cecout->getLibele());
$demAch->setCostcenter($cecout);
$demAch->setNombaille($nomprojet);
$demAch->setNomProjet($nomprojet->getLibele());
$demAch->setQuantDemande($quantDemand);
$demAch->setObjet($obje);
$demAch->setRegion($region);
$demAch->setDescription($descrip);
if($designrech != null){
$demAch->setDesignation($designrech->getDesignation());
$demAch->setCatalogue($designrech);
$demAch->setPrixU($prixUnit);
}
else {
$demAch->setDesignation('votre article selectionner ne se trouve pas dans le catalogue');
}
$dat=date('Y-m-d H:i:s');
$demAch->setDateSoumis(new \DateTime($dat));
$demAch->setUser($user);
$demAch->setNumDemandeAchat($num);
//$demAch->setNumOrdre(1);
$demAch->setDelais($delais);
$this->em->persist($demAch);
$this->em->flush();
return $this->redirectToRoute('liste_da_temp', ['id' => $num]);
}
public function ajoutdesigndatemp(Request $request): Response
{
$demAch = new DemAchatTemp;
$user = $this->security->getUser();
$demtempuses = $this->em->getRepository(DemAchatTemp::class)->findByUser( $user);
$demtemp = end($demtempuses);
$idbailleur = $request->request->get('bailleur');
$descrip = $request->request->get('descrip');
$idcentreCout = $request->request->get('centreCout');
$quantDemand = $request->request->get('quantDemand');
$prixUnit = $request->request->get('prixUnit');
$iddesignrech = $request->request->get('iddesignrech');
$nomprojet = $this->em->getRepository(Bailleur::class)->find($idbailleur);
$centrecout = $this->em->getRepository(CentreCout::class)->find($idcentreCout);
if($iddesignrech!=null)
$designrech= $this->em->getRepository(Catalogue::class)->findOneByDesignation($iddesignrech);
else
$designrech=null;
$num=$demtemp->getNumDemandeAchat();
$demAch->setCentreCout($centrecout->getLibele());
$demAch->setCostcenter($centrecout);
$demAch->setNomProjet($nomprojet->getLibele());
$demAch->setNombaille($nomprojet);
$demAch->setRegion($demtemp->getRegion());
$demAch->setQuantDemande($quantDemand);
$demAch->setObjet($demtemp->getObjet());
$demAch->setDescription($descrip);
if($designrech != null){
$demAch->setDesignation($designrech->getDesignation());
$demAch->setCatalogue($designrech);
$demAch->setPrixU($prixUnit);
}
else {
$demAch->setDesignation('votre article selectionner ne se trouve pas dans le catalogue');
}
$dat=date('Y-m-d H:i:s');
$demAch->setDateSoumis(new \DateTime($dat));
$demAch->setUser($user);
$demAch->setNumDemandeAchat($num);
$demAch->setNumOrdre(1);
$demAch->setDelais($demtemp->getDelais());
$this->em->persist($demAch);
$this->em->flush();
return $this->redirectToRoute('liste_da_temp', ['id' => $num]);
}
//creer DA sans le centre de cout
public function ajaxadatemp(Request $request): Response
{
$demAch = new DemAchatTemp;
$user = $this->security->getUser();
$demachas=$this->em->getRepository(DemAchatTemp::class)->findAll();
$obje = $request->request->get('obje');
$descrip = $request->request->get('descrip');
$region = $request->request->get('region');
$baille2 = $request->request->get('baille2');
$quantDemand = $request->request->get('quantDemand');
$prixUnit = $request->request->get('prixUnit');
$iddesignrech = $request->request->get('iddesignrech');
$nomprojet= $this->em->getRepository(Bailleur::class)->find($baille2);
if($iddesignrech!=null)
$designrech= $this->em->getRepository(Catalogue::class)->findOneByDesignation($iddesignrech);
else
$designrech=null;
$num=1;
if($demachas!=null){
foreach($demachas as $demacha)
{
if($demacha->getNumDemandeAchat()>$num)
$num=$demacha->getNumDemandeAchat();
}
$num=$num+1;
}
$demAch->setQuantDemande($quantDemand);
$demAch->setObjet($obje);
$demAch->setNombaille($nomprojet);
$demAch->setNomProjet($nomprojet->getLibele());
$demAch->setDescription($descrip);
$demAch->setRegion($region);
if($designrech !=null ){
if($designrech[0]->getId()!=749){
$demAch->setDesignation($designrech[0]->getDesignation());
$demAch->setPrixU($prixUnit);
$demAch->setCatalogue($designrech[0]);
}
else
$demAch->setDesignation('votre article selectionner ne se trouve pas dans le catalogue');
}
if($designrech==null )
$demAch->setDesignation('votre article selectionner ne se trouve pas dans le catalogue');
$demAch->setUser($user);
$demAch->setNumDemandeAchat($num);
$demAch->setNumOrdre(1);
$this->em->persist($demAch);
$this->em->flush();
return $this->redirectToRoute('liste_da_temp', ['id' => $num]);
}
public function ajaxajoutdatempAction()
{
$request = $this->container->get('request');
$em = $this->getDoctrine()->getEntityManager();
$demAch = new demAchatTemp;
$user = $this->container->get('security.context')->getToken()->getUser();
$demtempuses=$this->em->getRepository(DemAchatTemp::class)->selectdemuser($user);
$demtemp=end($demtempuses);
$descrip = $request->request->get('descrip');
$obje = $request->request->get('obje');
$quantDemand = $request->request->get('quantDemand');
$idbailleur = $request->request->get('baille2');
$prixUnit = $request->request->get('prixUnit');
$iddesignrech = $request->request->get('iddesignrech');
$designrech=$em->getRepository('mstopeIntranetBundle:Catalogue')->findByDesignation($iddesignrech);
$nomprojet=$em->getRepository('mstopeIntranetBundle:Bailleur')->find($idbailleur);
$num=$demtemp->getNumDemandeAchat();
$demAch->setQuantDemande($quantDemand);
$demAch->setObjet($demtemp->getObjet());
$demAch->setRegion($demtemp->getRegion());
$demAch->setDescription($descrip);
if(isset($designrech)){
if($designrech[0]->getId()!=749){
$demAch->setDesignation($designrech[0]->getDesignation());
$demAch->setCatalogue($designrech[0]);}
else
$demAch->setDesignation('votre article selectionner ne se trouve pas dans le catalogue');
}
if($designrech==null )
$demAch->setDesignation('votre article selectionner ne se trouve pas dans le catalogue');
$demAch->setPrixU($prixUnit);
$demAch->setNomProjet($nomprojet->getLibele());
$demAch->setNombaille($nomprojet);
$demAch->setUser($user);
$demAch->setNumDemandeAchat($num);
$demAch->setNumOrdre(1);
$em->persist($demAch);
$em->flush();
//return $this->redirect( $this->generateUrl('mstopes_gestion_demande_achat'));
return $this->redirect( $this->generateUrl('liste_da_temp', array('id' => $num)));
}
public function daenvoyer(Request $request): Response
{
$user = $this->security->getUser();
$numero = $request->request->get('num');
$datemps=$this->em->getRepository(DemAchatTemp::class)->findDemandeAchatPerso($numero);
$numda = $this->em->getRepository(NumDA::class)->find(1);
$num=$numda->getNum()+1;
$total=0;$total3=0;
$contratCadreSelectionne = null;
$presenceLigneSansCC = false;
foreach($datemps as $datemp)
{
$numtemp= $datemp->getNumDemandeAchat();
$achat = new demAchat; $raport= new RapportageDA;
$achat->setDesignation($datemp->getDesignation());
$achat->setPrixU($datemp->getPrixU());
$achat->setCentreCout($datemp->getCentreCout());
$achat->setNomProjet($datemp->getNomProjet());
$achat->setNombaille($datemp->getNombaille());
$achat->setCostcenter($datemp->getCostcenter());
$achat->setCatalogue($datemp->getCatalogue());
$achat->setObjet($datemp->getObjet());
$achat->setRegion($datemp->getRegion());
$achat->setDescription($datemp->getDescription());
$achat->setUser($datemp->getUser());
$achat->setNomProjet($datemp->getNomProjet());
$achat->setQuantDemande($datemp->getQuantDemande());
$achat->setResteACommander($datemp->getQuantDemande());
$achat->setDelais($datemp->getDelais());
$achat->setNumOrdre(1);
$dat=date('Y-m-d H:i:s');
$achat->setDateSoumis(new \DateTime($dat));
// =====================================================
// GESTION AUTOMATIQUE CONTRAT-CADRE
// =====================================================
$montantLigne =
(float)$datemp->getPrixU()
* (float)$datemp->getQuantDemande();
$contratCadre = null;
$catalogue = $datemp->getCatalogue();
$categorieCatalogue = $catalogue
? $catalogue->getCategorycatalogue()
: null;
if ($categorieCatalogue) {
// ManyToMany :
// CategoryCatalogue -> CategoriesMarche
$categoriesMarche =
$categorieCatalogue->getCategoriesMarche();
if (!$categoriesMarche->isEmpty()) {
foreach ($categoriesMarche as $categorieMarche) {
$contrats =
$this->contratCadreService
->listerDisponiblesPourDA(
$categorieMarche->getId(),
$montantLigne
);
// premier contrat compatible
if (!empty($contrats)) {
$contratCadre = $contrats[0];
break;
}
}
}
}
// =====================================================
// CONTROLE COHERENCE DA
// =====================================================
// contrat trouvé
if ($contratCadre) {
// rattachement DA -> ContratCadre
$achat->setContratCadre($contratCadre);
$achat->setStatutContratCadree(demAchat::CC_SUGGERE);
// réservation budget
$montantReserve =
(float)$contratCadre->getMontantReserve();
$contratCadre->setMontantReserve(
(string)($montantReserve + $montantLigne)
);
$this->em->persist($contratCadre);
}
$numda->setNum($num);
$achat->setNumDemandeAchat($num);
$this->em->persist($achat);
$this->em->remove($datemp);
$raport->setDateSoumis(new \DateTime($dat));
$raport->setDemAchat($achat);
$this->em->persist($raport);
$this->em->flush();
if (!empty($datemp->getDescription()) && $datemp->getDescription() !== "undefined" &&(trim($datemp->getDescription()) !== ""))
{// 🔥 2. Sauvegarde traductions FR
$this->translationWriter->create
(
'demAchat',
$achat->getId(),
'description',
$achat->getDescription()
);
}
}
$this->em->refresh($achat);
// 🔥 2. Sauvegarde traductions FR
$this->translationWriter->create(
'demAchat',
$achat->getId(),
'objet',
$achat->getObjet()
);
$this->em->flush();
// return $this->redirectToRoute('liste_da_temp', ['id' => $numero]);
return $this->redirect( $this->generateUrl('mstopes_gestion_demande_achat'));
}
//ajout article apres creation de la DA
public function ajaxajoutdesignachat(Request $request)
{
if (!$request->isXmlHttpRequest()) {
return new JsonResponse([
'error' => 'Invalid request'
], 400);
}
$user = $this->getUser();
$id = $request->request->get('listnum');
$id2 = $request->request->get('listnum2');
$id3 = $request->request->get('listnum9');
$id4 = $request->request->get('listnum4');
$id5 = $request->request->get('listnum3');
$id6 = $request->request->get('listnum7');
$id7 = $request->request->get('listnum1');
$id8 = $request->request->get('listnum5');
$idcentreCout = $request->request->get('centreCout');
$idbailleur = $request->request->get('bailleur');
$quantDemand = (float)$request->request->get('quantDemand');
$prixUni = (float)$request->request->get('prixUni');
$descrip = $request->request->get('descrip');
$designation = $request->request->get('designation');
// =====================================================
// Catalogue
// =====================================================
$design = $this->em
->getRepository(Catalogue::class)
->findOneBy([
'designation' => $designation
]);
$bailleur = $this->em
->getRepository(Bailleur::class)
->find($idbailleur);
$centrecout = $this->em
->getRepository(CentreCout::class)
->find($idcentreCout);
// =====================================================
// Demande principale
// =====================================================
$ids = [$id, $id2, $id3, $id4, $id5, $id6, $id7, $id8];
$demacha = null;
foreach ($ids as $oneId) {
if ($oneId) {
$demacha = $this->em
->getRepository(DemAchat::class)
->find($oneId);
if ($demacha) {
break;
}
}
}
if (!$demacha) {
return new JsonResponse([
'message' =>
"Ajout impossible : demande introuvable"
], 400);
}
// =====================================================
// Sécurité logique
// =====================================================
if (($id2 && $id) || ($id3 && $id)) {
return new JsonResponse([
'message' =>
"Ajout non effectué : veuillez actualiser la page"
], 400);
}
// =====================================================
// Création ligne DA
// =====================================================
$demAch = new demAchat();
if ($design) {
$demAch->setDesignation($designation);
$demAch->setCatalogue($design);
} else {
$demAch->setDesignation(
'Produit introuvable dans le catalogue'
);
}
$demAch->setPrixU($prixUni);
$demAch->setCentreCout(
$centrecout?->getLibele()
);
$demAch->setCostcenter($centrecout);
$demAch->setNombaille($bailleur);
$demAch->setNomProjet(
$bailleur?->getLibele()
);
$demAch->setQuantDemande($quantDemand);
$demAch->setDelais(
$demacha->getDelais()
);
$demAch->setObjet(
$demacha->getObjet()
);
if (
!empty($descrip)
&&
$descrip !== "undefined"
) {
$demAch->setDescription($descrip);
}
$demAch->setRegion(
$demacha->getRegion()
);
$demAch->setNumOrdre(1);
$demAch->setUser($user);
$demAch->setNumDemandeAchat(
$demacha->getNumDemandeAchat()
);
$demAch->setDateSoumis(new \DateTime());
// =====================================================
// GESTION CONTRAT CADRE
// =====================================================
$contratCadre = null;
$montantLigne =
$prixUni * $quantDemand;
if (
$design
&&
$design->getCategorycatalogue()
) {
$categorieCatalogue =
$design->getCategorycatalogue();
foreach (
$categorieCatalogue->getCategoriesMarche()
as $categorieMarche
) {
$contrats =
$this->contratCadreService
->listerDisponiblesPourDA(
$categorieMarche->getId(),
$montantLigne
);
if (!empty($contrats)) {
$contratCadre = $contrats[0];
break;
}
}
}
// =====================================================
// Affectation contrat + réservation
// =====================================================
if ($contratCadre) {
$demAch->setContratCadre(
$contratCadre
);
$demAch->setStatutContratCadree(
demAchat::CC_SUGGERE
);
// réservation
$reserve =
(float)$contratCadre->getMontantReserve();
$contratCadre->setMontantReserve(
(string)($reserve + $montantLigne)
);
$this->em->persist($contratCadre);
}
// =====================================================
// Save
// =====================================================
$this->em->persist($demAch);
$this->em->flush();
$this->em->refresh($demAch);
// =====================================================
// Traduction description
// =====================================================
if (
!empty($descrip)
&&
$descrip !== "undefined"
&&
trim($descrip) !== ""
) {
$this->translationWriter->create(
'demAchat',
$demAch->getId(),
'description',
$demAch->getDescription()
);
$this->em->flush();
}
// =====================================================
// Retour
// =====================================================
return $this->redirect(
$this->generateUrl(
'liste_demachat',
[
'id' => $demacha->getId()
]
)
);
}
public function downloadfileDA(int $id_ap):Response
{
$img = $this->em->getRepository(ImageS::class)->find($id_ap);
$fichier = $img->getAlt();
$chemin =$img->getUploadRootDir().'/';
$response = new Response();
$response->setContent(file_get_contents($chemin.$fichier));
$response->headers->set('Content-Type', 'application/force-download');
$response->headers->set('Content-disposition', 'filename='.$fichier);
return $response;
}
public function imprimdemachat(int $id, Request $request): Response
{
$user = $this->security->getUser();
// 1. Appelez le service pour obtenir les données
$data = $this->demandeAchatService->getDemandeAchatData($id);
// Si le service ne trouve pas la demande, lancez une 404
if (empty($data)) {
throw $this->createNotFoundException("La demande d'achat n'existe pas.");
}
$demachats = $data['demachats'];
$numach = $data['numach'];
$x = $data['x'];
$total3 = $data['total3'];
$param = $data['param'];
$usesuph = $data['usesuph'];
$userr = $data['userr'];
$usedscsc = $data['usedscsc'];
$usedp = $data['usedp'];
$uselead = $data['uselead'];
$code = $data['code'];
$useprojet = $data['useprojet'];
$usechef1 = $data['usechef1'];
$usechef2 = $data['usechef2'];
$usechef3 = $data['usechef3'];
$usechef4 = $data['usechef4'];
$usechef5 = $data['usechef5'];
$usechef6 = $data['usechef6'];
$usechef7 = $data['usechef7'];
$userreg = $data['userreg'];
$userespacha = $data['userespacha'];
$demachatrefus = $data['demachatrefus'];
$v = $data['v'];
$usereg = $data['usereg'];
$signechefp1 = $data['signechefp1'];
$signechefp2 = $data['signechefp2'];
$signechefp3 = $data['signechefp3'];
$signechefp4 = $data['signechefp4'];
$signechefp5 = $data['signechefp5'];
$signechefp6 = $data['signechefp6'];
$signechefp7 = $data['signechefp7'];
$nb = $data['nb'];
$nomb = $data['nomb'];
$suph = $data['suph'];
$ub = $data['ub'];
$nbch = $data['nbch'];
$usebaille1 = $data['usebaille1'];
$usebaille2 = $data['usebaille2'];
$usebaille3 = $data['usebaille3'];
$usebaille4 = $data['usebaille4'];
$usebaille5 = $data['usebaille5'];
$usebaille6 = $data['usebaille6'];
$usebaille7 = $data['usebaille7'];
$valid1 = $data['valid1'];
$valid2 = $data['valid2'];
$usevalid1 = $data['usevalid1'];
$usevalid2 = $data['usevalid2'];
$uselead1 = $data['uselead1'];
$uselead2 = $data['uselead2'];
$uselead3 = $data['uselead3'];
$uselead4 = $data['uselead4'];
$uselead5 = $data['uselead5'];
$w = $data['w'];
$signelead1 = $data['signelead1'];
$signelead2 = $data['signelead2'];
$signelead3 = $data['signelead3'];
$signelead4 = $data['signelead4'];
$signelead5 = $data['signelead5'];
$utiltecgarag = $data['utiltecgarag'];
$utiltecinfo = $data['utiltecinfo'];
$utilrachat = $data['utilrachat'];
$utildscsc = $data['utildscsc'];
$utildscsc2 = $data['utildscsc2'];
$utilrr = $data['utilrr'];
$userlead = $data['userlead'];
$demachatrefuleads = $data['demachatrefuleads'];
$signeDP1 = $data['signeDP1'];
$signeDP2 = $data['signeDP2'];
$signeDP3 = $data['signeDP3'];
$signeDP4 = $data['signeDP4'];
$signeDP5 = $data['signeDP5'];
$signeDP6 = $data['signeDP6'];
$signeDP7 = $data['signeDP7'];
$signeDP8 = $data['signeDP8'];
$usedp1 = $data['usedp1'];
$usedp2 = $data['usedp2'];
$usedp3 = $data['usedp3'];
$usedp4 = $data['usedp4'];
$usedp5 = $data['usedp5'];
$usedp6 = $data['usedp6'];
$usedp7 = $data['usedp7'];
$usedp8 = $data['usedp8'];
$usedep = $data['usedep'];
$usechefp = $data['usechefp'];
// 2. Gérez les formulaires. La logique de gestion des requêtes POST reste ici.
$demach = $demachats[0]; // Récupérez l'objet principal
$path = 'C:\wamp64\www\intranetbf\public\img\valid.png';
$type = pathinfo($path, PATHINFO_EXTENSION);
$data = file_get_contents($path);
$base64 = base64_encode($data);
$html = $this->twig->render('DemandeAchatVue/imprimdemachat.html.twig'
,[
'base64_image_data' => $base64,
'demachats' => $demachats,
'numach' => $numach,
'user' => $user,
'id' => $id,
'x' => $x,
'total3' => $total3,
'param' => $param,
'usesuph' => $usesuph,
'userr' => $userr,
'usedscsc' => $usedscsc,
'usedp' => $usedp,
'uselead' => $uselead,
'usechefp' => $usechefp,
'usedep' => $usedep,
'code' => $code,
'useprojet' => $useprojet,
'usechef1' => $usechef1,
'usechef2' => $usechef2,
'usechef3' => $usechef3,
'userreg' => $userreg,
'usechef4' => $usechef4,
'usechef5' => $usechef5,
'usechef6' => $usechef6,
'userespacha' => $userespacha,
'usereg' => $usereg,
'signechefp1' => $signechefp1,
'signechefp2' => $signechefp2,
'signechefp3' => $signechefp3,
'signechefp4' => $signechefp4,
'signechefp5' => $signechefp5,
'signechefp6' => $signechefp6,
'v' => $v,
'demachatrefus' => $demachatrefus,
'nb' => $nb,
//'form10' => $form10->createView(),
'nomb' => $nomb,
'suph' => $suph,
'ub' => $ub,
'nbch' => $nbch,
//'form20' => $form20->createView(),
'signechefp7' => $signechefp7,
'usechef7' => $usechef7,
'usebaille1' => $usebaille1,
'usebaille2' => $usebaille2,
'usebaille3' => $usebaille3,
'usebaille4' => $usebaille4,
'usebaille5' => $usebaille5,
'usebaille6' => $usebaille6,
'usebaille7' => $usebaille7
,'valid1' => $valid1,
'valid2' => $valid2,
'usevalid1' => $usevalid1,
'usegarage' => $usevalid2,
'uselead1' => $uselead1,
'uselead2' => $uselead2,
'uselead3' => $uselead3,
'w' => $w,
'signelead1' => $signelead1,
'signelead2' => $signelead2,
'signelead3' => $signelead3,
'signelead4' => $signelead4,
'signelead5' => $signelead5,
'utiltecgarag' => $utiltecgarag,
'utiltecinfo' => $utiltecinfo,
'utilrachat' => $utilrachat,
'utildscsc' => $utildscsc,
'utildscsc2' => $utildscsc2,
'utilrr' => $utilrr,
'uselead4' => $uselead4,
'uselead5' => $uselead5,
'userlead' => $userlead,
'demachatrefuleads' => $demachatrefuleads,
'signeDP1' => $signeDP1,
'signeDP2' => $signeDP2,
'signeDP3' => $signeDP3,
'signeDP4' => $signeDP4,
'signeDP5' => $signeDP5,
'signeDP6' => $signeDP6,
'signeDP7' => $signeDP7,
'signeDP8' => $signeDP8,
'usedp1' => $usedp1,
'usedp2' => $usedp2,
'usedp3' => $usedp3,
'usedp4' => $usedp4,
'usedp5' => $usedp5,
'usedp6' => $usedp6,
'usedp7' => $usedp7,
'usedp8' => $usedp8
]
);
// 3. Utiliser une bibliothèque plus récente pour le PDF, comme 'dompdf/dompdf'
// Installez-la via Composer si ce n'est pas déjà fait : composer require dompdf/dompdf
$html2pdf = new \Dompdf\Dompdf();
$html2pdf->loadHtml($html);
$html2pdf->setPaper('A4', 'landscape');
$html2pdf->render();
$output = $html2pdf->output();
// Envoi direct de la sortie PDF en tant que réponse
$response = new Response($output);
$response->headers->set('Content-Type', 'application/pdf');
$response->headers->set('Content-Disposition', 'inline; filename="demande_achat_'.$id.'.pdf"');
// 4. Remplacer la logique d'envoi d'e-mail par le composant Mailer
$userE = $demach->getUser();
$emailUser = $userE->getEmail();
$nom = $userE->getNom();
$prenom = $userE->getPrenom();
/*
$email = (new Email())
->from('votre_email@votredomaine.com')
->to($emailUser)
->subject('Demande d\'achat imprimée')
->html(
"<html><head></head><body><b>Bonjour</b>,<br/>
Mrs/Mr $nom $prenom, votre demande d'achat N°$numach a été imprimé.<br/><br/>
Suivez ce lien pour voir la demande:<br/>
http://www.intranet-mariestopesbf.org/web/login
</body></html>"
);
$mailer->send($email);*/
return $response;
}
public function telechargerFileA($id_ap)
{
$img = $this->em->getRepository(Image::class)->find($id_ap);
$fichier = $img->getAlt();
$chemin =$img->getUploadRootDir().'/';
$response = new Response();
$response->setContent(file_get_contents($chemin.$id_ap.$fichier));
$response->headers->set('Content-Type', 'application/force-download');
$response->headers->set('Content-disposition', 'filename='.$fichier);
return $response;
}
public function ajaxmodifierdelaiprevu($id_dem): Response
{
$achat = $this->em->getRepository(demAchat::class)->find($id_dem);
$form = $this->createForm(ModifDemAchatType::class, $achat);
return $this->render('DemandeAchatVue/modifierdelaiprevu.html.twig',
['id_dem' => $id_dem,'form' => $form->createView(),]);
}
public function modifierdelaiprevu(Request $request): Response
{
$listnum = $request->request->get('id');
$delai = $request->request->get('delai');
$demacha=$this->em->getRepository(demAchat::class)->find($listnum);
$demachas = $this->em->getRepository(demAchat::class)->findBy([
'numDemandeAchat' =>$demacha->getNumDemandeAchat(),'drapoRejetchef'=>0]);
foreach($demachas as $demach){
$demach->setDelaisPrevu($delai);
}
$this->em->flush();
return $this->redirect( $this->generateUrl('liste_demachat', array('id' => $listnum)));
}
public function ajaxmodifierdemacha($id_dem)
{
$demach = $this->em->getRepository(demAchat::class)->find($id_dem);
//$demachats = $this->em->getRepository(demAchat::class)->findByNumDemandeAchat($demach->getNumDemandeAchat() );
$user1=$demach->getUser();
$user = $this->security->getUser();
$form9 = $this->createForm(ModifDemAchatType::class, $demach);
return $this->render('DemandeAchatVue/modifierdemacha.html.twig',
['id_dem' => $id_dem,'form9' => $form9->createView(),'user1' => $user1,'user' => $user]);
}
public function modifierdemacha(Request $request): Response
{
$objet = $request->request->get('objet');
$designation = $request->request->get('designatio');
$description = $request->request->get('description');
$quantd = (float)$request->request->get('quantd');
$idcentreCout = $request->request->get('centreCout');
$idnomProjet = $request->request->get('nomProjet');
$prixU = (float)$request->request->get('prixU');
$id = $request->request->get('id');
$demacha = $this->em
->getRepository(demAchat::class)
->find($id);
if (!$demacha) {
throw $this->createNotFoundException();
}
// =====================================================
// Ancien contrat + ancien montant
// =====================================================
$ancienContrat = $demacha->getContratCadre();
$ancienMontant =
(float)$demacha->getPrixU()
*
(float)$demacha->getQuantDemande();
if ($demacha->getTva()) {
$ancienMontant +=
$ancienMontant
*
((float)$demacha->getTva() / 100);
}
// =====================================================
// Données liées
// =====================================================
$centreCout = $this->em
->getRepository(CentreCout::class)
->find($idcentreCout);
$nomProjet = $this->em
->getRepository(Bailleur::class)
->find($idnomProjet);
$design = $this->em
->getRepository(Catalogue::class)
->findOneByDesignation($designation);
// =====================================================
// MAJ ligne DA
// =====================================================
if ($design != null) {
$demacha->setDesignation(
$design->getDesignation()
);
$demacha->setCatalogue($design);
} else {
$demacha->setDesignation(
'votre article selectionner ne se trouve pas dans le catalogue'
);
}
$demacha->setPrixU($prixU);
$demacha->setQuantDemande($quantd);
$demacha->setResteACommander($quantd);
$demacha->setCentreCout(
$centreCout->getLibele()
);
$demacha->setCostcenter($centreCout);
$demacha->setNomProjet(
$nomProjet->getLibele()
);
$demacha->setNombaille($nomProjet);
$demacha->setDescription($description);
// =====================================================
// MAJ objet sur toutes lignes DA
// =====================================================
$numach = $demacha->getNumDemandeAchat();
$demachats = $this->em
->getRepository(demAchat::class)
->findBy([
'numDemandeAchat' => $numach,
'drapoRejetchef' => 0
]);
foreach ($demachats as $demachat) {
$demachat->setObjet($objet);
}
// =====================================================
// Nouveau montant
// =====================================================
$nouveauMontant =
$prixU * $quantd;
if ($demacha->getTva()) {
$nouveauMontant +=
$nouveauMontant
*
((float)$demacha->getTva() / 100);
}
// =====================================================
// Retrait ancien montant réservation
// =====================================================
if ($ancienContrat) {
$ancienReserve =
(float)$ancienContrat->getMontantReserve();
$ancienContrat->setMontantReserve(
(string)max(
0,
$ancienReserve - $ancienMontant
)
);
$this->em->persist($ancienContrat);
}
// =====================================================
// Recherche nouveau contrat compatible
// =====================================================
$nouveauContrat = null;
if ($design && $design->getCategorycatalogue()) {
$categorieCatalogue =
$design->getCategorycatalogue();
foreach (
$categorieCatalogue->getCategoriesMarche()
as $categorieMarche
) {
$contrats =
$this->contratCadreService
->listerDisponiblesPourDA(
$categorieMarche->getId(),
$nouveauMontant
);
if (!empty($contrats)) {
$nouveauContrat = $contrats[0];
break;
}
}
}
// =====================================================
// Nouveau contrat
// =====================================================
$demacha->setContratCadre($nouveauContrat);
if ($nouveauContrat) {
$reserve =
(float)$nouveauContrat->getMontantReserve();
$nouveauContrat->setMontantReserve(
(string)($reserve + $nouveauMontant)
);
$demacha->setStatutContratCadree(
demAchat::CC_SUGGERE
);
$this->em->persist($nouveauContrat);
} else {
$demacha->setStatutContratCadree(null);
}
// =====================================================
// Save
// =====================================================
$this->em->persist($demacha);
$this->em->flush();
return $this->redirect( $this->generateUrl( 'liste_demachat',
[
'id' => $id
]
)
);
}
public function ajaxmodacha($id_dem)
{
$demac = $this->em->getRepository(demAchat::class)->find($id_dem);
$form8 = $this->createForm(ModifDemAchatType::class, $demac);
return $this->render('DemandeAchatVue/modifacha.html.twig'
,['id_dem' => $id_dem,'form8' => $form8->createView(),]
);
}
public function modifacha(Request $request): Response
{
$id = $request->request->get('id');
$bailleur = $request->request->get('bailleur');
$projet = $request->request->get('projet');
$ligneBudget = $request->request->get('ligneBudget');
$demacha=$this->em->getRepository(demAchat::class)->find($id);
$demacha->setBailleur($bailleur);
$demacha->setProjet($projet);
$demacha->setLigneBudget($ligneBudget);
$this->em->flush();
return $this->redirect( $this->generateUrl('liste_demachat', array('id' => $id)));
}
public function ajaxmodifdemacha($id_dem)
{
$demac = $this->em->getRepository(demAchat::class)->find($id_dem);
$form = $this->createForm(ModifDemAchatType::class, $demac);
return $this->render('DemandeAchatVue/modifdemacha.html.twig',
['id_dem' => $id_dem,'form' => $form->createView(),]);
}
public function modifdemacha(Request $request): Response
{
$user = $this->security->getUser();
$observation = $request->request->get('observation');
$id = $request->request->get('id');
//$quanta = $request->request->get('quantA');
$demacha=$this->em->getRepository(demAchat::class)->find($id);
$observation= $observation.' / par '.$user->getNom().' '.$user->getPrenom();
// $demacha->setQuantAccorde(null);
$demacha->setObservation($observation);
$this->em->flush();
return $this->redirect( $this->generateUrl('liste_demachat', array('id' => $id)));
}
public function ajaxcorrectionda(Request $request): Response
{
$data = $this->demandeAchatService->getDemachatSigneData($request);
$demachas = $data['demachas'];
$id_achat = $data['id_achat'];
foreach($demachas as $demach){
$demach->setDrapoRespRegrefu(0);
$demach->setDrapoRespAcharefu(0);
$demach->setDrapoDSCSCrefu(0);
$demach->setDrapoDPrefu(0);
$demach->setDrapoRRrefu(0);
$demach->setDrapoSuprefu(0);
$demach->setDrapoLeadrefu(0);
$demach->setDrapoLeadrefu1(0);
$demach->setDrapoLeadrefu2(0);
$demach->setDrapoLeadrefu3(0);
$demach->setDrapoLeadrefu4(0);
$demach->setDrapoLeadrefu5(0);
$demach->setDrapoRejetLead(0);
$demach->setDrapoChefprefu(0);
$demach->setDrapoChefprefu1(0);
$demach->setDrapoChefprefu2(0);
$demach->setDrapoChefprefu3(0);
$demach->setDrapoChefprefu4(0);
$demach->setDrapoChefprefu5(0);
$demach->setDrapoChefprefu6(0);
$demach->setDrapoChefprefu7(0);
$demach->setDrapoDPrefu1(0);
$demach->setDrapoDPrefu2(0);
$demach->setDrapoDPrefu3(0);
$demach->setDrapoDPrefu4(0);
$demach->setDrapoDPrefu5(0);
$demach->setDrapoDPrefu6(0);
$demach->setDrapoDPrefu7(0);
$demach->setRaisonRefu(null);
$demach->setObservation(null);
$demach->setSigneLead(null);
$demach->setSigneLead1(null);
$demach->setSigneLead2(null);
$demach->setSigneLead3(null);
$demach->setSigneLead4(null);
$demach->setSigneLead5(null);
$demach->setSigneSUP(null);
$demach->setSigneChefp(null);
$demach->setSigneChefp1(null);
$demach->setSigneChefp2(null);
$demach->setSigneChefp3(null);
$demach->setSigneChefp4(null);
$demach->setSigneChefp5(null);
$demach->setSigneChefp6(null);
$demach->setSigneChefp7(null);
$demach->setSigneDF(null);
$demach->setSigneDP(null);
$demach->setSigneRR(null);
$demach->setSigneDP1(null);
$demach->setSigneDP2(null);
$demach->setSigneDP3(null);
$demach->setSigneDP4(null);
$demach->setSigneDP5(null);
$demach->setSigneDP6(null);
$demach->setSigneDP7(null);
$demach->setDrapoRespReg(0);
$demach->setDrapoRespAcha(0);
$demach->setDrapoDSCSC(0);
$demach->setDrapoDP(0);
$demach->setDrapoRR(0);
$demach->setDrapoSup(0);
$demach->setDrapoLead(0);
$demach->setDrapoChefp(0);
$demach->setDrapoChefp1(0);
$demach->setDrapoChefp2(0);
$demach->setDrapoChefp3(0);
$demach->setDrapoChefp4(0);
$demach->setDrapoChefp5(0);
$demach->setDrapoChefp6(0);
$demach->setDrapoChefp7(0);
$demach->setDrapoRejetchef(0);
$demach->setDrapoLead1(0);
$demach->setDrapoLead2(0);
$demach->setDrapoLead3(0);
$demach->setDrapoLead4(0);
$demach->setDrapoLead5(0);
$demach->setDrapoDP1(0);
$demach->setDrapoDP2(0);
$demach->setDrapoDP3(0);
$demach->setDrapoDP4(0);
$demach->setDrapoDP5(0);
$demach->setDrapoDP6(0);
$demach->setDrapoDP7(0);
$demach->setDrapoGaragerefu(0);
}
$this->em->flush();
return $this->redirect( $this->generateUrl('liste_demachat', array('id' => $id_achat)));
}
/*public function ajaxmodtva(Request $request): Response
{
$data = $this->demandeAchatService->getDemachatSigneData($request);
$demachas = $data['demachas'];
$id_achat = $data['id_achat'];
$tva = $data['tva'];
foreach($demachas as $demach){
$demach->setTva($tva);
}
$this->em->flush();
return $this->redirect( $this->generateUrl('liste_demachat', array('id' => $id_achat)));
} */
public function ajaxmodtva(Request $request): Response
{
$data = $this->demandeAchatService->getDemachatSigneData($request);
$demachas = $data['demachas'];
$id_achat = $data['id_achat'];
$tva = (float)$data['tva'];
if (empty($demachas)) {
return $this->redirect(
$this->generateUrl('liste_demachat', ['id' => $id_achat])
);
}
// même contrat pour toute la DA
$contratCadre = $demachas[0]->getContratCadre();
$ancienMontantTotal = 0;
$nouveauMontantTotal = 0;
foreach ($demachas as $demach) {
$prixU = (float)$demach->getPrixU();
$qte = (float)$demach->getQuantDemande();
// ancien montant avec ancienne TVA
$ancienneTva = (float)$demach->getTva();
$ancienLigne =
($prixU * $qte)
+
(($prixU * $qte) * $ancienneTva / 100);
$ancienMontantTotal += $ancienLigne;
// mise à jour TVA
$demach->setTva((string)$tva);
// nouveau montant
$nouveauLigne =
($prixU * $qte)
+
(($prixU * $qte) * $tva / 100);
$nouveauMontantTotal += $nouveauLigne;
}
// ajustement réservation CC
if ($contratCadre) {
$montantReserveActuel =
(float)$contratCadre->getMontantReserve();
// différence TTC
$difference =
$nouveauMontantTotal - $ancienMontantTotal;
$contratCadre->setMontantReserve(
(string)($montantReserveActuel + $difference)
);
$this->em->persist($contratCadre);
}
$this->em->flush();
return $this->redirect(
$this->generateUrl('liste_demachat', ['id' => $id_achat])
);
}
public function ajaxdrapoCharge(Request $request): Response
{
$data = $this->demandeAchatService->getDemachatSigneData($request);
$demachas = $data['demachas'];
$id_achat = $data['id_achat'];
$user = $data['user'];
$demacha = $data['demacha'];
$var=0;
foreach($demachas as $demach){
if (empty($demach->getDelaisPrevu()))
$var=1;
}
if($var==1){
return new JsonResponse(['message' => 'veuillez renseigner le delais prévisionnel !']);
}
else
{
foreach($demachas as $demach){
$demach->setDrapoPriCharge(1);
}
$this->em->flush();
$delais=$demacha->getDelaisPrevu();
$emailuser=$user->getEmail();
$num=$demacha->getNumDemandeAchat();
$nom=$user->getNom();
$prenom=$user->getPrenom();
$contenu="<html><head></head><body><b>Bonjour</b>,<br/>
la demande d'achat N°$num de Mrs/Mr $nom $prenom a ete pris en charge.
le delais de livraison prévisionnel est de $delais jours.
.<br/><br/>
<br/>
</body></html>
</body></html>";
// $this->Envoi($emailuser,$contenu);
return $this->redirect( $this->generateUrl('liste_demachat', array('id' => $id_achat)));
}
}
public function ajaxvalidtech1(Request $request): Response
{
$data = $this->demandeAchatService->getDemachatSigneData($request);
$demachas = $data['demachas'];
// $id_achat = $data['id_achat'];
$user = $data['user'];
$demacha = $data['demacha'];
$dat = $data['dat'];
foreach($demachas as $demach){
$demach->setSigneInfo($user);
$demach->setDrapoInfo(1);
$demach->setDrapoInforefu(0);
$demach->setDateInfo(new \DateTime($dat));
}
$this->em->flush();
$id_achat=$demacha->getId();
$user=$demacha->getUser();
$emailuser=$user->getEmail();
$num=$demacha->getNumDemandeAchat();
$nom=$user->getNom();
$prenom=$user->getPrenom();
$contenu="<html><head></head><body><b>Bonjour,
le responsable technique a validé la DA</b>,<br/>
http://www.intranet-mariestopesmali.org/web/gestionDemandeAchat
</body></html>";
// $this->Envoi($emailuser,$contenu);
return $this->redirect( $this->generateUrl('liste_demachat', array('id' => $id_achat)));
}
public function ajaxvalidtech1refu(Request $request): Response
{
$data = $this->demandeAchatService->getDemachatSigneData($request);
$demachas = $data['demachas'];
$id_achat = $data['id_achat'];
$user = $data['user'];
$demacha = $data['demacha'];
$dat = $data['dat'];
foreach($demachas as $demach){
$demach->setSigneInfo($user);
$demach->setDrapoInfo(0);
$demach->setDrapoInforefu(1);
$demach->setDateInfo(new \DateTime($dat));
}
$this->em->flush();
$user=$demacha->getUser();
$emailuser=$user->getEmail();
$num=$demacha->getNumDemandeAchat();
$nom=$user->getNom();
$prenom=$user->getPrenom();
$contenu="<html><head></head><body><b>Bonjour,
le responsable technique a rejeté la DA</b>,<br/>
http://www.intranet-mariestopesmali.org/web/gestionDemandeAchat
</body></html>";
// $this->Envoi($emailuser,$contenu);
return $this->redirect( $this->generateUrl('liste_demachat', array('id' => $id_achat)));
}
public function ajaxvalid2(Request $request): Response
{
$data = $this->demandeAchatService->getDemachatSigneData($request);
$demachas = $data['demachas'];
$id_achat = $data['id_achat'];
$user = $data['user'];
$demacha = $data['demacha'];
$dat = $data['dat'];
foreach($demachas as $demach){
$demach->setSigneGarage($user);
$demach->setDrapoGarage(1);
$demach->setDrapoGaragerefu(0);
$demach->setDateGarage(new \DateTime($dat));
if($demach->getUser()->getId()==294){
$demach->setDrapoSup(1);
$demach->setDrapoSuprefu(0);
$demach->setSigneSUP($user);
$demach->setDateSuph(new \DateTime($dat));
}
}
$this->em->flush();
$user=$demacha->getUser();
$emailuser=$user->getEmail();
$num=$demacha->getNumDemandeAchat();
$nom=$user->getNom();
$prenom=$user->getPrenom();
$contenu="<html><head></head><body><b>Bonjour,
le responsable technique a validé la DA</b>,<br/>
http://www.intranet-mariestopesmali.org/web/gestionDemandeAchat
</body></html>";
// $this->Envoi($emailuser,$contenu);
return $this->redirect( $this->generateUrl('liste_demachat', array('id' => $id_achat)));
}
public function ajaxvalid2refu(Request $request): Response
{
$data = $this->demandeAchatService->getDemachatSigneData($request);
$demachas = $data['demachas'];
$id_achat = $data['id_achat'];
$user = $data['user'];
$demacha = $data['demacha'];
$dat = $data['dat'];
foreach($demachas as $demach){
$demach->setSigneGarage($user);
$demach->setDrapoGarage(0);
$demach->setDrapoGaragerefu(1);
$demach->setDateGarage(new \DateTime($dat));
if($demach->getUser()->getId()==294){
$demach->setDrapoSup(1);
$demach->setDrapoSuprefu(0);
$demach->setSigneSUP($user);
$demach->setDateSuph(new \DateTime($dat));
}
}
$this->em->flush();
$user=$demacha->getUser();
$emailuser=$user->getEmail();
$num=$demacha->getNumDemandeAchat();
$nom=$user->getNom();
$prenom=$user->getPrenom();
$contenu="<html><head></head><body><b>Bonjour,
le responsable technique a rejeté la DA</b>,<br/>
http://www.intranet-mariestopesmali.org/web/gestionDemandeAchat
</body></html>";
// $this->Envoi($emailuser,$contenu);
return $this->redirect( $this->generateUrl('liste_demachat', array('id' => $id_achat)));
}
public function ajaxdraporacha(Request $request): Response
{
$data = $this->demandeAchatService->getDemachatSigneData($request);
$demachas = $data['demachas'];
$id_achat = $data['id_achat'];
$user = $data['user'];
$demacha = $data['demacha'];
$dat = $data['dat'];
$nbselect = $data['nbselect'];
if( $nbselect >1){
return new JsonResponse(array('message' => 'veuillez actualiser la page, vous avez plusieurs DAs ouvertes !'));
}
foreach($demachas as $demach){
$demach->setSigneRespAcha($user);
$demach->setDrapoRespAcha(1);
$demach->setDrapoRespAcharefu(0);
$demach->setDateRespAcha(new \DateTime($dat));
}
$this->em->flush();
$user=$demacha->getUser();
$emailuser=$user->getEmail();
$num=$demacha->getNumDemandeAchat();
$nom=$user->getNom();
$prenom=$user->getPrenom();
$contenu="<html><head></head><body><b>Bonjour,
le responsable achat a validé la DA</b>,<br/>
http://www.intranet-mariestopesmali.org/web/gestionDemandeAchat
</body></html>";
// $this->Envoi($emailuser,$contenu);
return $this->redirect( $this->generateUrl('liste_demachat', array('id' => $id_achat)));
}
public function ajaxdraporacharefu(Request $request): Response
{
$data = $this->demandeAchatService->getDemachatSigneData($request);
$demachas = $data['demachas'];
$id_achat = $data['id_achat'];
$user = $data['user'];
$demacha = $data['demacha'];
$dat = $data['dat'];
$nbselect = $data['nbselect'];
if( $nbselect >1){
return new JsonResponse(array('message' => 'veuillez actualiser la page, vous avez plusieurs DAs ouvertes !'));
}
foreach($demachas as $demach){
$demach->setSigneRespAcha($user);
$demach->setDrapoRespAcha(0);
$demach->setDrapoRespAcharefu(1);
$demach->setDateRespAcha(new \DateTime($dat));
}
$this->em->flush();
$user=$demacha->getUser();
$emailuser=$user->getEmail();
$num=$demacha->getNumDemandeAchat();
$nom=$user->getNom();
$prenom=$user->getPrenom();
$contenu="<html><head></head><body><b>Bonjour,
le responsable achat a validé la DA</b>,<br/>
http://www.intranet-mariestopesmali.org/web/gestionDemandeAchat
</body></html>";
// $this->Envoi($emailuser,$contenu);
return $this->redirect( $this->generateUrl('liste_demachat', array('id' => $id_achat)));
}
public function ajaxdrapodrmedical(Request $request): Response
{
$data = $this->demandeAchatService->getDemachatSigneData($request);
$demachas = $data['demachas'];
$id_achat = $data['id_achat'];
$user = $data['user'];
$demacha = $data['demacha'];
$dat = $data['dat'];
foreach($demachas as $demach){
$demach->setSigneDRMEDICAL($user);
$demach->setDrapoDRMEDICAL(1);
$demach->setDrapoDRMEDICALrefu(0);
$demach->setDateDRMEDICAL(new \DateTime($dat));
}
$this->em->flush();
$user=$demacha->getUser();
$emailuser=$user->getEmail();
$num=$demacha->getNumDemandeAchat();
$nom=$user->getNom();
$prenom=$user->getPrenom();
$contenu="<html><head></head><body><b>Bonjour,
le responsable médical a validé la DA</b>,<br/>
http://www.intranet-mariestopesmali.org/web/gestionDemandeAchat
</body></html>";
// $this->Envoi($emailuser,$contenu);
return $this->redirect( $this->generateUrl('liste_demachat', array('id' => $id_achat)));
}
public function ajaxdrmedicalrefu(Request $request): Response
{
$data = $this->demandeAchatService->getDemachatSigneData($request);
$demachas = $data['demachas'];
$id_achat = $data['id_achat'];
$user = $data['user'];
$demacha = $data['demacha'];
$dat = $data['dat'];
foreach($demachas as $demach){
$demach->setSigneDRMEDICAL($user);
$demach->setDrapoDRMEDICAL(0);
$demach->setDrapoDRMEDICALrefu(1);
$demach->setDateDRMEDICAL(new \DateTime($dat));
}
$this->em->flush();
$user=$demacha->getUser();
$emailuser=$user->getEmail();
$num=$demacha->getNumDemandeAchat();
$nom=$user->getNom();
$prenom=$user->getPrenom();
$contenu="<html><head></head><body><b>Bonjour,
le responsable médical a validé la DA</b>,<br/>
http://www.intranet-mariestopesmali.org/web/gestionDemandeAchat
</body></html>";
// $this->Envoi($emailuser,$contenu);
return $this->redirect( $this->generateUrl('liste_demachat', array('id' => $id_achat)));
}
public function ajaxdraposuph(Request $request): Response
{
$data = $this->demandeAchatService->getDemachatSigneData($request);
$demachas = $data['demachas'];
$id_achat = $data['id_achat'];
$user = $data['user'];
$demacha = $data['demacha'];
$dat = $data['dat'];
foreach($demachas as $demach){
$demach->setSigneSUP($user);
$demach->setDrapoSup(1);
$demach->setDrapoSuprefu(0);
$demach->setDateSuph(new \DateTime($dat));}
$this->em->flush();
$user=$demacha->getUser();
$emailuser=$user->getEmail();
$num=$demacha->getNumDemandeAchat();
$nom=$user->getNom();
$prenom=$user->getPrenom();
$contenu="<html><head></head><body><b>Bonjour</b>,<br/>
le superieur hierarchique de Mrs/Mr $nom $prenom a approuvé la demande d'achat N°$num .<br/><br/>
Suivez ce lien pour voir la demande:<br/>
http://www.intranet-mariestopesmali.org/web/gestionDemandeAchat
</body></html>";
$centrecout=$demacha->getCentreCout();
$centre = $this->em->getRepository(CentreCout::class)->findOneByLibele($centrecout);
$usecentres = $this->em->getRepository(UserCentre::class)->findByCentrecout($centre);
$usedp=null;
foreach ($usecentres as $usecentre)
{
if($usecentre->getUser()->hasRole('ROLE_DP'))
$usedp=$usecentre->getUser();
}
$email=$usedp->getEmail();
// $this->Envoi($email,$contenu);
// $this->Envoi($emailuser,$contenu);
return $this->redirect( $this->generateUrl('liste_demachat', array('id' => $id_achat)));
}
public function ajaxdraposuphrefu(Request $request): Response
{
$data = $this->demandeAchatService->getDemachatSigneData($request);
$demachas = $data['demachas'];
$id_achat = $data['id_achat'];
$user = $data['user'];
$demacha = $data['demacha'];
$dat = $data['dat'];
foreach($demachas as $demach){
$demach->setSigneSUP($user);
$demach->setDrapoSup(0);
$demach->setDrapoSuprefu(1);
$demach->setDateSuph(new \DateTime($dat));}
$this->em->flush();
$user=$demacha->getUser();
$emailuser=$user->getEmail();
$num=$demacha->getNumDemandeAchat();
$nom=$user->getNom();
$prenom=$user->getPrenom();
$contenu="<html><head></head><body><b>Bonjour</b>,<br/>
le superieur hierarchique de Mrs/Mr $nom $prenom n'a pas approuvé la demande d'achat N°$num .<br/><br/>
Suivez ce lien pour voir la demande:<br/>
http://www.intranet-mariestopesmali.org/web/gestionDemandeAchat
</body></html>";
// $this->Envoi($emailuser,$contenu);
return $this->redirect( $this->generateUrl('liste_demachat', array('id' => $id_achat)));
}
public function ajaxdraporespreg(Request $request): Response
{
$data = $this->demandeAchatService->getDemachatSigneData($request);
$demachas = $data['demachas'];
$id_achat = $data['id_achat'];
$user = $data['user'];
$demacha = $data['demacha'];
$dat = $data['dat'];
foreach($demachas as $demach){
$demach->setSigneRespReg($user);
$demach->setDrapoRespReg(1);
$demach->setDrapoRespRegrefu(0);
$demach->setDateRespReg(new \DateTime($dat));
if($user->hasRole('ROLE_DP2') )
{
$demach->setSigneDP2($user);
$demach->setDrapoDP2(1);
$demach->setDrapoDPrefu2(0);
$demach->setDateDP2(new \DateTime($dat));
}
}
$this->em->flush();
$user=$demacha->getUser();
$emailuser=$user->getEmail();
$num=$demacha->getNumDemandeAchat();
$nom=$user->getNom();
$prenom=$user->getPrenom();
$contenu="<html><head></head><body><b>Bonjour</b>,
le responsable regionale a validé la DA<br/>
http://www.intranet-mariestopesmali.org/web/gestionDemandeAchat
</body></html>";
$centrecout=$demacha->getCentreCout();
$centre = $this->em->getRepository(CentreCout::class)->findOneByLibele($centrecout);
$usecentres = $this->em->getRepository(UserCentre::class)->findByCentrecout($centre);
$code= $usecentres[0]->getCode();
$usedp=null; $usefinance=null; $uselead=null;
if($code==13)
{
foreach ($usecentres as $usecentre)
{
if($usecentre->getUselead()->hasRole('ROLE_LEAD'))
$uselead=$usecentre->getUser();
$email=$uselead->getEmail();
//$this->Envoi($email,$contenu);
}
}
if($code==61)
{
foreach ($usecentres as $usecentre)
{
if($usecentre->getUser()->hasRole('ROLE_DP'))
$usedp=$usecentre->getUser();
$email=$usedp->getEmail();
//$this->Envoi($email,$contenu);
}
}
// $this->Envoi($emailuser,$contenu);
return $this->redirect( $this->generateUrl('liste_demachat', array('id' => $id_achat)));
}
public function ajaxdraporespregrefu(Request $request): Response
{
$data = $this->demandeAchatService->getDemachatSigneData($request);
$demachas = $data['demachas'];
$id_achat = $data['id_achat'];
$user = $data['user'];
$demacha = $data['demacha'];
$dat = $data['dat'];
foreach($demachas as $demach){
$demach->setSigneRespReg($user);
$demach->setDrapoRespReg(0);
$demach->setDrapoRespRegrefu(1);
$demach->setDateRespReg(new \DateTime($dat));
}
$this->em->flush();
$use=$demacha->getUser();
$emailuser=$use->getEmail();
$num=$demacha->getNumDemandeAchat();
$nom=$use->getNom();
$prenom=$use->getPrenom();
$contenu="<html><head></head><body><b>Bonjour</b>,<br/>
le responsable regional n'a pas approuvé la demande d'achat N°$num .<br/><br/>
Suivez ce lien pour voir la demande:<br/>
http://www.intranet-mariestopesmali.org/web/gestionDemandeAchat
</body></html>";
// $this->Envoi($emailuser,$contenu);
return $this->redirect( $this->generateUrl('liste_demachat', array('id' => $id_achat)));
}
public function ajaxdrapolead(Request $request): Response
{
$data = $this->demandeAchatService->getDemachatSigneData($request);
$demachas = $data['demachas'];
$id_achat = $data['id_achat'];
$user = $data['user'];
$demacha = $data['demacha'];
$dat = $data['dat'];
if($user->hasRole('ROLE_LEAD1') )
{
foreach($demachas as $demach)
{
$demach->setSigneLead1($user);
$demach->setDrapoLead1(1);
$demach->setDrapoLeadrefu1(0);
$demach->setDateLead1(new \DateTime($dat));
}
$this->em->flush();
}
elseif($user->hasRole('ROLE_LEAD2') )
{
foreach($demachas as $demach)
{
$demach->setSigneLead2($user);
$demach->setDrapoLead2(1);
$demach->setDrapoLeadrefu2(0);
$demach->setDateLead2(new \DateTime($dat));
}
$this->em->flush();
}
elseif($user->hasRole('ROLE_LEAD3') )
{
foreach($demachas as $demach)
{
$demach->setSigneLead3($user);
$demach->setDrapoLead3(1);
$demach->setDrapoLeadrefu3(0);
$demach->setDateLead3(new \DateTime($dat));
}
$this->em->flush();
}
elseif($user->hasRole('ROLE_LEAD4') )
{
foreach($demachas as $demach)
{
$demach->setSigneLead4($user);
$demach->setDrapoLead4(1);
$demach->setDrapoLeadrefu4(0);
$demach->setDateLead4(new \DateTime($dat));
}
$this->em->flush();
}
elseif($user->hasRole('ROLE_LEAD5') )
{
foreach($demachas as $demach)
{
$demach->setSigneLead5($user);
$demach->setDrapoLead5(1);
$demach->setDrapoLeadrefu5(0);
$demach->setDateLead5(new \DateTime($dat));
}
$this->em->flush();
}
$user=$demacha->getUser();
$emailuser=$user->getEmail();
$num=$demacha->getNumDemandeAchat();
$nom=$user->getNom();
$prenom=$user->getPrenom();
$contenu="<html><head></head><body><b>Bonjour</b>,<br/>
le Channel Lead a approuvé la demande d'achat N°$num .<br/><br/>
Suivez ce lien pour voir la demande:<br/>
http://www.intranet-mariestopesmali.org/web/gestionDemandeAchat
</body></html>";
$bailleur=$demacha->getNomProjet();
$baille = $this->em->getRepository(Bailleur::class)->findOneByLibele($bailleur);
$usebaille = $this->em->getRepository(UseBailleur::class)->findOneByBailleur($baille);
$email=$usebaille->getUser()->getEmail();
// $this->Envoi($email,$contenu);
// $this->Envoi($emailuser,$contenu);
return $this->redirect( $this->generateUrl('liste_demachat', array('id' => $id_achat)));
}
public function ajaxdrapoleadrefu(Request $request): Response
{
$data = $this->demandeAchatService->getDemachatSigneData($request);
$demachas = $data['demachas'];
$id_achat = $data['id_achat'];
$user = $data['user'];
$demacha = $data['demacha'];
$dat = $data['dat'];
$usecentres = $data['usecentres'];
if($user->hasRole('ROLE_LEAD1') )
{
foreach($demachas as $demach)
{
$demach->setSigneLead1($user);
$demach->setDrapoLead1(0);
$demach->setDrapoLeadrefu1(1);
$demach->setDateLead1(new \DateTime($dat));
foreach($usecentres as $usecentre)
{
if( $demach->getCostcenter()==$usecentre->getCentrecout())
$demach->setDrapoRejetLead(1);
}
}
$this->em->flush();
}
elseif($user->hasRole('ROLE_LEAD2') )
{
foreach($demachas as $demach)
{
$demach->setSigneLead2($user);
$demach->setDrapoLead2(0);
$demach->setDrapoLeadrefu2(1);
$demach->setDateLead2(new \DateTime($dat));
foreach($usecentres as $usecentre)
{
if( $demach->getCostcenter()==$usecentre->getCentrecout())
$demach->setDrapoRejetLead(1);
}
}
$this->em->flush();
}
elseif($user->hasRole('ROLE_LEAD3') )
{
foreach($demachas as $demach)
{
$demach->setSigneLead3($user);
$demach->setDrapoLead3(0);
$demach->setDrapoLeadrefu3(1);
$demach->setDateLead3(new \DateTime($dat));
foreach($usecentres as $usecentre)
{
if( $demach->getCostcenter()==$usecentre->getCentrecout())
$demach->setDrapoRejetLead(1);
}
}
$this->em->flush();
}
elseif($user->hasRole('ROLE_LEAD4') )
{
foreach($demachas as $demach)
{
$demach->setSigneLead4($user);
$demach->setDrapoLead4(0);
$demach->setDrapoLeadrefu4(1);
$demach->setDateLead4(new \DateTime($dat));
foreach($usecentres as $usecentre)
{
if( $demach->getCostcenter()==$usecentre->getCentrecout())
$demach->setDrapoRejetLead(1);
}
}
$this->em->flush();
}
elseif($user->hasRole('ROLE_LEAD5') )
{
foreach($demachas as $demach)
{
$demach->setSigneLead5($user);
$demach->setDrapoLead5(0);
$demach->setDrapoLeadrefu5(1);
$demach->setDateLead5(new \DateTime($dat));
foreach($usecentres as $usecentre)
{
if( $demach->getCostcenter()==$usecentre->getCentrecout())
$demach->setDrapoRejetLead(1);
}
}
$this->em->flush();
}
$user=$demacha->getUser();
$emailuser=$user->getEmail();
$num=$demacha->getNumDemandeAchat();
$nom=$user->getNom();
$prenom=$user->getPrenom();
$contenu="<html><head></head><body><b>Bonjour</b>,<br/>
lechannel lead n'a pas approuvé la demande d'achat N°$num .<br/><br/>
Suivez ce lien pour voir la demande:<br/>
http://www.intranet-mariestopesmali.org/web/gestionDemandeAchat
</body></html>";
// $this->Envoi($emailuser,$contenu);
return $this->redirect( $this->generateUrl('liste_demachat', array('id' => $id_achat)));
}
public function ajaxdrapochefp(Request $request): Response
{
$data = $this->demandeAchatService->getDemachatSigneData($request);
$demachas = $data['demachas'];
$id_achat = $data['id_achat'];
$user = $data['user'];
$demacha = $data['demacha'];
$dat = $data['dat'];
$var=0;
if($demacha->getCostcenter()!=null)
{
foreach($demachas as $demach)
{
$usebail= $this->em->getRepository(UseBailleur::class)->findOneByBailleur($demach->getNombaille());
if($usebail!=null){
if($usebail->getUser()==$user)
{
if($demach->getBailleur()=="" || $demach->getProjet()=="" || $demach->getLigneBudget()=="")
$var=1;
}
}
}
}
if($var==1)
{
// Retourner la réponse JSON
return new JsonResponse(array('message' => 'veuillez renseigner les codes bailleurs,codes projets et lignes budgetaires !'));
}
elseif( $var==0){
// $iduser=$user->getId();
$total=0;
if($user->hasRole('ROLE_CHEFP1') )
{
foreach($demachas as $demach)
{
if($demach->getQuantAccorde()!=null)
$total=$demach->getQuantAccorde()*$demach->getPrixU()+$total;
else
$total=$demach->getQuantDemande()*$demach->getPrixU()+$total;
$demach->setSigneChefp1($user);
$demach->setDrapoChefp1(1);
$demach->setDrapoChefprefu1(0);
$demach->setDateChefp1(new \DateTime($dat));
/*if($user->hasRole('ROLE_RR') ){
$demach->setDrapoChefp6(1);
$demach->setDrapoChefprefu6(0);
$demach->setSigneChefp6($user);}*/
}
$this->em->flush();
}
if($user->hasRole('ROLE_CHEFP2') )
{
foreach($demachas as $demach)
{
if($demach->getQuantAccorde()!=null)
$total=$demach->getQuantAccorde()*$demach->getPrixU()+$total;
else
$total=$demach->getQuantDemande()*$demach->getPrixU()+$total;
$demach->setSigneChefp2($user);
$demach->setDrapoChefp2(1);
$demach->setDrapoChefprefu2(0);
$demach->setDateChefp2(new \DateTime($dat));
}
$this->em->flush();
}
if($user->hasRole('ROLE_CHEFP3') )
{
foreach($demachas as $demach)
{
$total=$demach->getQuantDemande()*$demach->getPrixU()+$total;
$demach->setSigneChefp3($user);
$demach->setDrapoChefp3(1);
$demach->setDrapoChefprefu3(0);
$demach->setDateChefp3(new \DateTime($dat));
/*if($user->hasRole('ROLE_RR') ){
$demach->setDrapoChefp6(1);
$demach->setDrapoChefprefu6(0);
$demach->setSigneChefp6($user);}*/
}
$this->em->flush();
}
if($user->hasRole('ROLE_CHEFP4') )
{
foreach($demachas as $demach)
{
$total=$demach->getQuantDemande()*$demach->getPrixU()+$total;
$demach->setSigneChefp4($user);
$demach->setDrapoChefp4(1);
$demach->setDrapoChefprefu4(0);
$demach->setDateChefp4(new \DateTime($dat));
/* if($user->hasRole('ROLE_RR') ){
$demach->setDrapoChefp6(1);
$demach->setDrapoChefprefu6(0);
$demach->setSigneChefp6($user);}*/
}
$this->em->flush();
}
if($user->hasRole('ROLE_CHEFP5') )
{
foreach($demachas as $demach)
{
if($demach->getQuantAccorde()!=null)
$total=$demach->getQuantAccorde()*$demach->getPrixU()+$total;
else
$total=$demach->getQuantDemande()*$demach->getPrixU()+$total;
$demach->setSigneChefp5($user);
$demach->setDrapoChefp5(1);
$demach->setDrapoChefprefu5(0);
$demach->setDateChefp5(new \DateTime($dat));
/* if($user->hasRole('ROLE_RR') ){
$demach->setDrapoChefp6(1);
$demach->setDrapoChefprefu6(0);
$demach->setSigneChefp6($user);}*/
}
$em->flush();
}
if($user->hasRole('ROLE_CHEFP6') )
{
foreach($demachas as $demach)
{
if($demach->getQuantAccorde()!=null)
$total=$demach->getQuantAccorde()*$demach->getPrixU()+$total;
else
$total=$demach->getQuantDemande()*$demach->getPrixU()+$total;
$demach->setSigneChefp6($user);
$demach->setDrapoChefp6(1);
$demach->setDrapoChefprefu6(0);
$demach->setDateChefp6(new \DateTime($dat));
}
$this->em->flush();
}
if($user->hasRole('ROLE_CHEFP7') )
{
foreach($demachas as $demach)
{
if($demach->getQuantAccorde()!=null)
$total=$demach->getQuantAccorde()*$demach->getPrixU()+$total;
else
$total=$demach->getQuantDemande()*$demach->getPrixU()+$total;
$demach->setSigneChefp7($user);
$demach->setDrapoChefp7(1);
$demach->setDrapoChefprefu7(0);
$demach->setDateChefp7(new \DateTime($dat));
}
$this->em->flush();
}
$use=$demacha->getUser();
$emailuser=$use->getEmail();
$num=$demacha->getNumDemandeAchat();
$nom=$use->getNom();
$prenom=$use->getPrenom();
$contenu="<html><head></head><body><b>Bonjour</b>,<br/>
le Chef de projet a approuvé la demande d'achat N°$num .<br/><br/>
Suivez ce lien pour voir la demande:<br/>
http://www.intranet-mariestopesmali.org/web/gestionDemandeAchat
</body></html>";
if($demacha->getCostcenter()!=null){
$utils=$this->em->getRepository(User::class)->findAll();
$centrecout=$demacha->getCentreCout();
$centre = $this->em->getRepository(CentreCout::class)->findOneByLibele($centrecout);
$usecentres = $this->em->getRepository(UserCentre::class)->findByCentrecout($centre);
$code= $usecentres[0]->getCode();
$usedp=null; $usefinance=null;
if($code==13)
{
foreach ($usecentres as $usecentre)
{
if($usecentre->getUser()->hasRole('ROLE_DP'))
$usedp=$usecentre->getUser();
if($usedp!=null){
$email=$usedp->getEmail();
// $this->Envoi($email,$contenu);
}
}
}
elseif($code==61)
{
foreach ($utils as $util)
{
if($util->hasRole('ROLE_DSCSC2') and $total<2500000){
//$usefinance=$usecentre->getUser();
$email=$util->getEmail();
$this->Envoi($email,$contenu);}
if($util->hasRole('ROLE_DSCSC') and $total>2499999){
//$usefinance=$usecentre->getUser();
$email=$util->getEmail();
// $this->Envoi($email,$contenu);}
}
}
// $this->Envoi($emailuser,$contenu);
}
}
else{
foreach ($utils as $util)
{
if($util->hasRole('ROLE_RACHAT'))
{
$email=$util->getEmail();
// $this->Envoi($email,$contenu);
}
}
}
return $this->redirect( $this->generateUrl('liste_demachat', array('id' => $id_achat)));
}
}
//formulaire de confirmation du rejet d'une ligne du DA par un chef de projet
//formulaire de confirmation du rejet du DA par un chef de projet
public function rairefchefp($id): Response
{
$demach =$this->em->getRepository(demAchat::class)->find($id);
$form = $this->createFormBuilder($demach)
->add('id')
->add('raisonRefu')
->getForm();
return $this->render('DemandeAchatVue/raisonrefu.html.twig'
,['id_dem' => $id,'form' => $form->createView(),]
);
}
//rejet du DA par un chef de projet,
public function ajaxraisonrefu(Request $request): Response
{
$user = $this->security->getUser();
$id = $request->request->get('id');
$raisonRefu = $request->request->get('raison');
$demacha=$this->em->getRepository(demAchat::class)->find($id);
$dat=date('Y-m-d H:i:s');
$num= $demacha->getNumDemandeAchat();
$demachas=$this->em->getRepository(demAchat::class)->Selectnumda($num);
$use=$demacha->getUser();
$emailuser=$use->getEmail();
$num=$demacha->getNumDemandeAchat();
$nom=$use->getNom();
$prenom=$use->getPrenom();
if($user->hasRole('ROLE_CHEFP1') )
{
foreach($demachas as $demach)
{
$demach->setSigneChefp1($user);
$demach->setDrapoChefp1(0);
$demach->setDrapoChefprefu1(1);
$demach->setDateChefp1(new \DateTime($dat));
$demach->setRaisonRefu($raisonRefu);
}
$this->em->flush();
}
elseif($user->hasRole('ROLE_CHEFP2') )
{
foreach($demachas as $demach)
{
$demach->setSigneChefp2($user);
$demach->setDrapoChefp2(0);
$demach->setDrapoChefprefu2(1);
$demach->setRaisonRefu($raisonRefu);
$demach->setDateChefp2(new \DateTime($dat));
}
$this->em->flush();
}
elseif($user->hasRole('ROLE_CHEFP3') )
{
foreach($demachas as $demach)
{
$demach->setSigneChefp3($user);
$demach->setDrapoChefp3(0);
$demach->setDrapoChefprefu3(1);
$demach->setRaisonRefu($raisonRefu);
$demach->setDateChefp3(new \DateTime($dat));
}
$this->em->flush();
}
elseif($user->hasRole('ROLE_CHEFP4') )
{
foreach($demachas as $demach)
{
$demach->setSigneChefp4($user);
$demach->setDrapoChefp4(0);
$demach->setDrapoChefprefu4(1);
$demach->setRaisonRefu($raisonRefu);
$demach->setDateChefp4(new \DateTime($dat));
}
$this->em->flush();
}
elseif($user->hasRole('ROLE_CHEFP5') )
{
foreach($demachas as $demach)
{
$demach->setSigneChefp5($user);
$demach->setDrapoChefp5(0);
$demach->setRaisonRefu($raisonRefu);
$demach->setDrapoChefprefu5(1);
$demach->setDateChefp5(new \DateTime($dat));
}
$this->em->flush();
}
elseif($user->hasRole('ROLE_CHEFP6') )
{
foreach($demachas as $demach)
{
$demach->setSigneChefp6($user);
$demach->setDrapoChefp6(0);
$demach->setRaisonRefu($raisonRefu);
$demach->setDrapoChefprefu6(1);
$demach->setDateChefp6(new \DateTime($dat));
}
$this->em->flush();
}
elseif($user->hasRole('ROLE_CHEFP7') )
{
foreach($demachas as $demach)
{
$demach->setSigneChefp7($user);
$demach->setDrapoChefp7(0);
$demach->setRaisonRefu($raisonRefu);
$demach->setDrapoChefprefu7(1);
$demach->setDateChefp7(new \DateTime($dat));
}
$this->em->flush();
}
$contenu="<html><head></head><body><b>Bonjour</b>,<br/>
le Chef de projet n'a pas approuvé la demande d'achat N°$num .<br/><br/>
Suivez ce lien pour voir la demande:<br/>
http://www.intranet-mariestopesmali.org/web/gestionDemandeAchat
</body></html>";
//$this->Envoi($emailuser,$contenu);
return $this->redirect( $this->generateUrl('liste_demachat', array('id' => $id)));
}
public function articleraisonrefu($id)
{
$demach =$this->em->getRepository(demAchat::class)->find($id);
$form = $this->createFormBuilder($demach)
->add('id')
->add('raisonRefu')
->getForm();
return $this->render('DemandeAchatVue/articleraisonrefu.html.twig'
,['id_dem' => $id,'form' => $form->createView(),]
);
}
public function ajaxarticlerefu(Request $request): Response
{
$user = $this->security->getUser();
$id = $request->request->get('id');
$raisonRefu = $request->request->get('raison');
$demacha=$this->em->getRepository(demAchat::class)->find($id);
$num= $demacha->getNumDemandeAchat();
$dat=date('Y-m-d H:i:s');
$demacha->setRaisonRefu($raisonRefu);
$demacha->setSigneChef($user);
$demacha->setDrapoRejetchef(1);
$this->em->flush();
$demachas=$this->em->getRepository(demAchat::class)->Selectnumda($num);
$idachat= $demachas[0]->getId();
$contenu="<html><head></head><body><b>Bonjour</b>,<br/>
le Chef de projet n'a pas approuvé la demande d'achat N°$num .<br/><br/>
Suivez ce lien pour voir la demande:<br/>
http://www.intranet-mariestopesmali.org/web/gestionDemandeAchat
</body></html>";
// $this->Envoi($emailuser,$contenu);
return $this->redirect( $this->generateUrl('liste_demachat', array('id' => $idachat)));
}
public function moduleachat(): Response
{
$id = $request->request->get('id');
$data = $this->demandeAchatService ->getdaParUser($id); // ton return actuel
return new JsonResponse($data);
}
public function uploadPieceJointe(
Request $request,
DemAchat $demAchat,
EntityManagerInterface $em
): JsonResponse {
// ✅ Défini UNE SEULE FOIS ici
$uploadDir = $this->getParameter('kernel.project_dir') . '/public/uploads/dem_achat';
$file = $request->files->get('pieceJointe');
if (!$file) {
return $this->json(['success' => false, 'message' => 'Aucun fichier reçu.'], 400);
}
$maxSize = 5 * 1024 * 1024;
if ($file->getSize() > $maxSize) {
return $this->json(['success' => false, 'message' => 'Fichier trop volumineux. Taille max : 5 Mo.'], 422);
}
$allowedExtensions = ['pdf', 'doc', 'docx', 'xls', 'xlsx', 'png', 'jpeg', 'txt'];
$extension = strtolower($file->getClientOriginalExtension());
if (!in_array($extension, $allowedExtensions)) {
return $this->json(['success' => false, 'message' => 'Type de fichier non autorisé.'], 422);
}
$newFilename = uniqid('pj_') . '.' . $extension;
// Créer le dossier s'il n'existe pas
if (!is_dir($uploadDir)) {
mkdir($uploadDir, 0777, true);
}
// Supprimer l'ancien fichier si existant
if ($demAchat->getPieceJointe()) {
$oldFile = $uploadDir . '/' . $demAchat->getPieceJointe();
if (file_exists($oldFile)) unlink($oldFile);
}
try {
$file->move($uploadDir, $newFilename);
} catch (\Exception $e) {
return $this->json(['success' => false, 'message' => 'Erreur lors de l\'upload : ' . $e->getMessage()], 500);
}
$demAchat->setPieceJointe($newFilename);
$em->flush();
return $this->json([
'success' => true,
'message' => 'Fichier uploadé avec succès.',
'filename' => $newFilename,
'downloadUrl' => '/uploads/dem_achat/' . $newFilename,
]);
}
public function ajaxdrapodp(Request $request): Response
{
$data = $this->demandeAchatService->getDemachatSigneData($request);
$demachas = $data['demachas'];
$id_achat = $data['id_achat'];
$use = $data['user'];
$demacha = $data['demacha'];
$dat = $data['dat'];
// $iduser=$user->getId();
$total=0;
$totalprix=0;
if($use->hasRole('ROLE_DP1') )
{
foreach($demachas as $demach){
$demach->setSigneDP1($use);
$demach->setDrapoDP1(1);
$demach->setDrapoDPrefu1(0);
$demach->setDateDP1(new \DateTime($dat));
if($demach->getQuantAccorde() != null)
$totalprix=$totalprix+($demach->getPrixU()*$demach->getQuantAccorde());
else
$totalprix=$totalprix+($demach->getPrixU()*$demach->getQuantDemande());
$this->em->persist($demach);}
$this->em->flush();
}
elseif($use->hasRole('ROLE_DP2') )
{
foreach($demachas as $demach){
$demach->setSigneDP2($use);
$demach->setDrapoDP2(1);
$demach->setDrapoDPrefu2(0);
$demach->setDateDP2(new \DateTime($dat));
if($demach->getQuantAccorde() != null)
$totalprix=$totalprix+($demach->getPrixU()*$demach->getQuantAccorde());
else
$totalprix=$totalprix+($demach->getPrixU()*$demach->getQuantDemande());
$this->em->persist($demach);}
$this->em->flush();
}
elseif($use->hasRole('ROLE_DP3') )
{
foreach($demachas as $demach){
$demach->setSigneDP3($use);
$demach->setDrapoDP3(1);
$demach->setDrapoDPrefu3(0);
$demach->setDateDP3(new \DateTime($dat));
if($demach->getQuantAccorde() != null)
$totalprix=$totalprix+($demach->getPrixU()*$demach->getQuantAccorde());
else
$totalprix=$totalprix+($demach->getPrixU()*$demach->getQuantDemande());
$this->em->persist($demach);}
$this->em->flush();
}
elseif($use->hasRole('ROLE_DP4') )
{
foreach($demachas as $demach){
$demach->setSigneDP4($use);
$demach->setDrapoDP4(1);
$demach->setDrapoDPrefu4(0);
$demach->setDateDP4(new \DateTime($dat));
if($demach->getQuantAccorde() != null)
$totalprix=$totalprix+($demach->getPrixU()*$demach->getQuantAccorde());
else
$totalprix=$totalprix+($demach->getPrixU()*$demach->getQuantDemande());
$this->em->persist($demach);}
$this->em->flush();
}
elseif($use->hasRole('ROLE_DP5') )
{
foreach($demachas as $demach){
$demach->setSigneDP5($use);
$demach->setDrapoDP5(1);
$demach->setDrapoDPrefu5(0);
$demach->setDateDP5(new \DateTime($dat));
if($demach->getQuantAccorde() != null)
$totalprix=$totalprix+($demach->getPrixU()*$demach->getQuantAccorde());
else
$totalprix=$totalprix+($demach->getPrixU()*$demach->getQuantDemande());
$this->em->persist($demach);}
$this->em->flush();
}
elseif($use->hasRole('ROLE_DP6') )
{
foreach($demachas as $demach){
$demach->setSigneDP6($use);
$demach->setDrapoDP6(1);
$demach->setDrapoDPrefu6(0);
$demach->setDateDP6(new \DateTime($dat));
if($demach->getQuantAccorde() != null)
$totalprix=$totalprix+($demach->getPrixU()*$demach->getQuantAccorde());
else
$totalprix=$totalprix+($demach->getPrixU()*$demach->getQuantDemande());
$this->em->persist($demach);}
$this->em->flush();
}
elseif($use->hasRole('ROLE_DP7') )
{
foreach($demachas as $demach){
$demach->setSigneDP7($use);
$demach->setDrapoDP7(1);
$demach->setDrapoDPrefu7(0);
$demach->setDateDP7(new \DateTime($dat));
if($demach->getQuantAccorde() != null)
$totalprix=$totalprix+($demach->getPrixU()*$demach->getQuantAccorde());
else
$totalprix=$totalprix+($demach->getPrixU()*$demach->getQuantDemande());
$this->em->persist($demach);}
$this->em->flush();
}
elseif($use->hasRole('ROLE_DP8') )
{
foreach($demachas as $demach){
$demach->setSigneDP8($use);
$demach->setDrapoDP8(1);
$demach->setDrapoDPrefu8(0);
$demach->setDateDP8(new \DateTime($dat));
if($demach->getQuantAccorde() != null)
$totalprix=$totalprix+($demach->getPrixU()*$demach->getQuantAccorde());
else
$totalprix=$totalprix+($demach->getPrixU()*$demach->getQuantDemande());
$this->em->persist($demach);}
$this->em->flush();
}
/*$user=$demacha->getUser();
$emailuser=$user->getEmail();
$num=$demacha->getNumDemandeAchat();
$nom=$user->getNom();
$suphemail=$user->getSupH()->getEmail();
$prenom=$user->getPrenom();
$contenu="<html><head></head><body><b>Bonjour</b>,<br/>
le Directeur des Département a approuvé la demande d'achat N°$num de Mrs/Mr $nom $prenom<br/><br/>
Suivez ce lien pour voir la demande:<br/>
http://www.intranet-mariestopesmali.org/web/gestionDemandeAchat
</body></html>";
$utils=$em->getRepository('mstopeUserBundle:User')->findAll();
$centrecout=$demacha->getCentreCout();
$nomProjet=$demacha->getNomProjet();
$baille = $em->getRepository('mstopeIntranetBundle:Bailleur')->findOneByLibele($nomProjet);
$bailleur = $em->getRepository('mstopeIntranetBundle:UseBailleur')->findOneByBailleur($baille);
$centre = $em->getRepository('mstopeIntranetBundle:CentreCout')->findOneByLibele($centrecout);
$usecentres = $em->getRepository('mstopeIntranetBundle:UserCentre')->findByCentrecout($centre);
$code= $usecentres[0]->getCode();
$usedp=null; $usefinance=null;
if($code==13)
{
foreach ($utils as $util)
{
if($util->hasRole('ROLE_DSCSC2') and $totalprix < 2500000)
{
$email=$util->getEmail();
//$this->Envoi($email,$contenu);
}
if($util->hasRole('ROLE_DSCSC') and $totalprix >2499999)
{
$email=$util->getEmail();
// $this->Envoi($email,$contenu);
}
}
}
if($code==61)
{
if($bailleur!=null){
$chefprojet=$bailleur->getUser();
$email=$chefprojet->getEmail();
// $this->Envoi($email,$contenu);
}
}
*/
// $this->Envoi($emailuser,$contenu);
return $this->redirect( $this->generateUrl('liste_demachat', array('id' => $id_achat)));
}
public function ajaxdrapodprefu(Request $request): Response
{
$data = $this->demandeAchatService->getDemachatSigneData($request);
$demachas = $data['demachas'];
$id_achat = $data['id_achat'];
$user = $data['user'];
$demacha = $data['demacha'];
$dat = $data['dat'];
// $iduser=$user->getId();
$total=0;
$totalprix=0;
if($user->hasRole('ROLE_DP1') )
{
foreach($demachas as $demach){
$demach->setSigneDP1($user);
$demach->setDrapoDP1(0);
$demach->setDrapoDPrefu1(1);
$demach->setDateDP1(new \DateTime($dat));
$this->em->persist($demach);}
$this->em->flush();
}
elseif($user->hasRole('ROLE_DP2') )
{
foreach($demachas as $demach){
$demach->setSigneDP2($user);
$demach->setDrapoDP2(0);
$demach->setDrapoDPrefu2(1);
$demach->setDateDP2(new \DateTime($dat));
$this->em->persist($demach);}
$this->em->flush();
}
elseif($user->hasRole('ROLE_DP3') )
{
foreach($demachas as $demach){
$demach->setSigneDP3($user);
$demach->setDrapoDP3(0);
$demach->setDrapoDPrefu3(1);
$demach->setDateDP3(new \DateTime($dat));
$this->em->persist($demach);}
$this->em->flush();
}
elseif($user->hasRole('ROLE_DP4') )
{
foreach($demachas as $demach){
$demach->setSigneDP4($use);
$demach->setDrapoDP4(0);
$demach->setDrapoDPrefu4(1);
$demach->setDateDP4(new \DateTime($dat));
$this->em->persist($demach);}
$this->em->flush();
}
elseif($user->hasRole('ROLE_DP5') )
{
foreach($demachas as $demach){
$demach->setSigneDP5($user);
$demach->setDrapoDP5(0);
$demach->setDrapoDPrefu5(1);
$demach->setDateDP5(new \DateTime($dat));
$this->em->persist($demach);}
$this->em->flush();
}
elseif($user->hasRole('ROLE_DP6') )
{
foreach($demachas as $demach){
$demach->setSigneDP6($user);
$demach->setDrapoDP6(0);
$demach->setDrapoDPrefu6(1);
$demach->setDateDP6(new \DateTime($dat));
$this->em->persist($demach);}
$this->em->flush();
}
elseif($user->hasRole('ROLE_DP7') )
{
foreach($demachas as $demach){
$demach->setSigneDP7($user);
$demach->setDrapoDP7(0);
$demach->setDrapoDPrefu7(1);
$demach->setDateDP7(new \DateTime($dat));
$this->em->persist($demach);}
$this->em->flush();
}
elseif($user->hasRole('ROLE_DP8') )
{
foreach($demachas as $demach){
$demach->setSigneDP8($user);
$demach->setDrapoDP8(0);
$demach->setDrapoDPrefu8(1);
$demach->setDateDP8(new \DateTime($dat));
$this->em->persist($demach);}
$this->em->flush();
}
/* $user=$demacha->getUser();
$emailuser=$user->getEmail();
$num=$demacha->getNumDemandeAchat();
$nom=$user->getNom();
$suphemail=$user->getSupH()->getEmail();
$prenom=$user->getPrenom();
$contenu="<html><head></head><body><b>Bonjour</b>,<br/>
le Directeur de Département n'a pas approuvé la demande d'achat N°$num
de Mrs/Mr $nom $prenom<br/><br/>
Suivez ce lien pour voir la demande:<br/>
</body></html>";*/
//$this->Envoi($suphemail,$contenu);
//$this->Envoi($emailuser,$contenu);
return $this->redirect( $this->generateUrl('liste_demachat', array('id' => $id_achat)));
}
public function ajaxdrapodscsc(Request $request): Response
{
$data = $this->demandeAchatService->getDemachatSigneData($request);
$demachas = $data['demachas'];
$id_achat = $data['id_achat'];
$user = $data['user'];
$demacha = $data['demacha'];
$dat = $data['dat'];
$totalprix=0;
$dat=date('Y-m-d H:i:s');
foreach($demachas as $demach)
{
$demach->setSigneDF($user);
$demach->setDrapoDSCSC(1);
$demach->setDrapoDSCSCrefu(0);
$demach->setDateDSCSC(new \DateTime($dat));
if($demach->getQuantAccorde()!=null)
$totalprix=$totalprix+($demach->getPrixU()*$demach->getQuantAccorde());
else
$totalprix=$totalprix+($demach->getPrixU()*$demach->getQuantDemande());
$this->em->persist($demach);
}
$this->em->flush();
/* $user=$demacha->getUser();
$emailuser=$user->getEmail();
$num=$demacha->getNumDemandeAchat();
$nom=$user->getNom();
$suphemail=$user->getSupH()->getEmail();
$prenom=$user->getPrenom();
$contenu="<html><head></head><body><b>Bonjour</b>,<br/>
le Directeur des Finances a approuvé la demande d'achat N°$num de Mrs/Mr $nom $prenom<br/><br/>
Suivez ce lien pour voir la demande:<br/>
</body></html>";
$contenu2="<html><head></head><body><b>Bonjour</b>,<br/>
la Finance a approuvé la demande d'achat N°$num de Mrs/Mr $nom $prenom<br/><br/>
la demande est prete pour l'impression<br/><br/>
Suivez ce lien pour voir la demande:<br/>
</body></html>";
$users=$em->getRepository('mstopeUserBundle:User')->findAll();
foreach ($users as $use)
{
if($use->hasRole('ROLE_RR') and $demacha->getMontant() > 4999999)
{
$emaildest=$use->getEmail();
$this->Envoi($emaildest,$contenu);
}
if($use->hasRole('ROLE_RACHAT') and $demacha->getMontant() < 4999999)
{
$emailachat=$use->getEmail();
$this->Envoi($emailuser,$contenu2);
$this->Envoi($emailachat,$contenu2);
}
}
*/
return $this->redirect( $this->generateUrl('liste_demachat', array('id' => $id_achat)));
}
public function ajaxdrapodscscrefu(Request $request): Response
{
$data = $this->demandeAchatService->getDemachatSigneData($request);
$demachas = $data['demachas'];
$id_achat = $data['id_achat'];
$user = $data['user'];
$demacha = $data['demacha'];
$dat = $data['dat'];
$totalprix=0;
$dat=date('Y-m-d H:i:s');
foreach($demachas as $demach){
$demach->setSigneDF($user);
$demach->setDrapoDSCSC(0);
$demach->setDrapoDSCSCrefu(1);
$demach->setDateDSCSC(new \DateTime($dat));
$this->em->persist($demach);}
$this->em->flush();
/* $user=$demacha->getUser();
$emailuser=$user->getEmail();
$num=$demacha->getNumDemandeAchat();
$nom=$user->getNom();
$suphemail=$user->getSupH()->getEmail();
$prenom=$user->getPrenom();
$contenu="<html><head></head><body><b>Bonjour</b>,<br/>
la Finance n'a pas approuvé la demande d'achat N°$num de Mrs/Mr $nom $prenom<br/><br/>
Suivez ce lien pour voir la demande:<br/>
</body></html>";
$users=$em->getRepository('mstopeUserBundle:User')->findAll();
foreach ($users as $use)
{
if($use->hasRole('ROLE_RR')){
//if($use->hasRole('ROLE_ADMIN')){
$emaildest=$use->getEmail();
$this->Envoi($emaildest,$contenu);
}
}
$this->Envoi($suphemail,$contenu);
$this->Envoi($emailuser,$contenu);*/
return $this->redirect( $this->generateUrl('liste_demachat', array('id' => $id_achat)));
}
public function ajaxdraporr(Request $request): Response
{
$data = $this->demandeAchatService->getDemachatSigneData($request);
$demachas = $data['demachas'];
$id_achat = $data['id_achat'];
$user = $data['user'];
$demacha = $data['demacha'];
$dat = $data['dat'];
$totalprix=0;
$dat=date('Y-m-d H:i:s');
foreach($demachas as $demacha){
$demacha->setSigneRR($user);
$demacha->setDrapoRR(1);
$demacha->setDrapoRRrefu(0);
$demacha->setDrapoImp(1);
$demacha->setDateRR(new \DateTime($dat));
$this->em->persist($demacha);}
$this->em->flush();
/* $user=$demacha->getUser();
$emailuser=$user->getEmail();
$num=$demacha->getNumDemandeAchat();
$nom=$user->getNom();
$suphemail=$user->getSupH()->getEmail();
$prenom=$user->getPrenom();
$contenu="<html><head></head><body><b>Bonjour</b>,<br/>
le Représentant Résident a approuvé la demande d'achat N°$num
de Mrs/Mr $nom $prenom<br/>
<br/>
La demande est prête pour impression!
<br/><br/>
Suivez ce lien pour voir la demande:<br/>
</body></html>";
$users=$em->getRepository('mstopeUserBundle:User')->findAll();
foreach ($users as $use)
{
if( $use->hasRole('ROLE_RACHAT')){
// if($use->hasRole('ROLE_ADMIN')){
$emaildest=$use->getEmail();
$this->Envoi($emaildest,$contenu);
}
}
// $this->Envoi($suphemail,$contenu);
$this->Envoi($emailuser,$contenu);*/
return $this->redirect( $this->generateUrl('liste_demachat', array('id' => $id_achat)));
}
public function ajaxdraporrrefu(Request $request): Response
{
$data = $this->demandeAchatService->getDemachatSigneData($request);
$demachas = $data['demachas'];
$id_achat = $data['id_achat'];
$user = $data['user'];
$demacha = $data['demacha'];
$dat = $data['dat'];
foreach($demachas as $demacha){
$demacha->setSigneRR($user);
$demacha->setDrapoRR(0);
$demacha->setDrapoRRrefu(1);
$demacha->setDateRR(new \DateTime($dat));
//$demacha->setDrapoRR(0);
//$demacha->setDrapoRRrefu(1);
$this->em->persist($demacha);}
$this->em->flush();
/*
$user=$demacha->getUser();
$emailuser=$user->getEmail();
$num=$demacha->getNumDemandeAchat();
$nom=$user->getNom();
$prenom=$user->getPrenom();
$contenu="<html><head></head><body><b>Bonjour</b>,<br/>
le Représentant Résident n'a pas approuvé la demande d'achat N°$num
de Mrs/Mr $nom $prenom<br/>
<br/>
Suivez ce lien pour voir la demande:<br/>
</body></html>";
$users=$em->getRepository('mstopeUserBundle:User')->findAll();
foreach ($users as $use)
{
if($use->hasRole('ROLE_ADMIN')){
//if($use->hasRole('ROLE_ADMIN')){
$emaildest=$use->getEmail();
$this->Envoi($emaildest,$contenu);
}
}
// $this->Envoi($suphemail,$contenu);
$this->Envoi($emailuser,$contenu);*/
return $this->redirect( $this->generateUrl('liste_demachat', array('id' => $id_achat)));
}
public function ajaxlistnum4( Request $request): JsonResponse
{
// Tableau de réponse
$listnum4 = [];
// Récupérer l'id envoyé
$id = $request->request->get('id');
// Récupérer l'utilisateur
$user = $this->em->getRepository(User::class)->find($id);
// Récupérer les demandes d'achat
$dems = $this->em->getRepository(demAchat::class) ->SelectListdemachat($user);
// Valeur par défaut
$listnum4[0] = 'choisir';
// Remplir le tableau
foreach ($dems as $dem) {
$listnum4[$dem->getId()] = $dem->getNumDemandeAchat();
}
// Retour JSON
return new JsonResponse($listnum4);
}
public function ajaxlistnum6( Request $request): JsonResponse
{
// Tableau de réponse
$listnum6 = [];
$dems=array();
// Récupérer l'id envoyé
$id = $request->request->get('id');
// Récupérer l'utilisateur
$useb = $this->em->getRepository(UseBailleur::class)->find($id);
$bail=$useb->getBailleur();
// Récupérer les demandes d'achat
$dems = $this->em->getRepository(demAchat::class) ->listDemachatBail($bail);
// Valeur par défaut
$listnum6[0] = 'choisir';
// Remplir le tableau
foreach ($dems as $dem) {
$listnum6[$dem->getId()] = $dem->getNumDemandeAchat();
}
// Retour JSON
return new JsonResponse($listnum6);
}
public function ajaxmodifcontracadre($id_dem)
{
$demac = $this->em->getRepository(demAchat::class)->find($id_dem);
// ============================
// Contrats compatibles
// ============================
$contratsDisponibles = [];
$categorieCatalogue =
$demac->getCatalogue()?->getCategorycatalogue();
if ($categorieCatalogue) {
foreach ( $categorieCatalogue->getCategoriesMarche()as $categorieMarche) {
$v=0;
$contrats = $this->em
->getRepository(ContratCadre::class)
->createQueryBuilder('cc')
->where('cc.categorieMarche = :cat')
->andWhere('cc.actif = true')
->setParameter('cat', $categorieMarche)
->orderBy('cc.reference', 'ASC')
->getQuery()
->getResult();
foreach ($contrats as $cc) {
$contratsDisponibles[$cc->getId()] = $cc;
}
}
}
$contratsDisponibles = array_values($contratsDisponibles);
// ============================
// Formulaire
// ============================
$form = $this->createFormBuilder($demac)
->add('id', HiddenType::class)
->add('contratCadre', EntityType::class, [
'class' => ContratCadre::class,
'choices' => $contratsDisponibles,
'choice_label' => function ($cc) {
return sprintf(
'%s - %s',
$cc->getReference(),
$cc->getFournisseur()?->getRaisonSociale()
);
},
'placeholder' => 'Aucun contrat-cadre',
'required' => false,
])
->getForm();
return $this->render('DemandeAchatVue/ajaxmodifcontracadre.html.twig'
,['id_dem' => $id_dem,'form' => $form->createView(),]
);
}
public function modifcontracadre(Request $request): Response
{
$idContrat = $request->request->get('contrat');
$idDemande = $request->request->get('id');
$demacha = $this->em
->getRepository(demAchat::class)
->find($idDemande);
if (!$demacha) {
return new JsonResponse([
'success' => false,
'message' => 'Demande achat introuvable.'
]);
}
// =========================
// Ancien contrat
// =========================
$ancienContrat = $demacha->getContratCadre();
// =========================
// Nouveau contrat
// =========================
$nouveauContrat = null;
if (!empty($idContrat)) {
$nouveauContrat = $this->em
->getRepository(ContratCadre::class)
->find($idContrat);
if (!$nouveauContrat) {
return new JsonResponse([
'success' => false,
'message' => 'Contrat-cadre introuvable.'
]);
}
}
// =========================
// Calcul montant réservation
// =========================
$montantLigne =
(float)$demacha->getPrixU()
*
(float)$demacha->getQuantDemande();
// TVA éventuelle
if ($demacha->getTva()) {
$montantLigne +=
$montantLigne
*
((float)$demacha->getTva() / 100);
}
// =========================
// Retirer réservation ancien contrat
// =========================
if ($ancienContrat) {
$ancienReserve =
(float)$ancienContrat->getMontantReserve();
$ancienContrat->setMontantReserve(
(string)max(
0,
$ancienReserve - $montantLigne
)
);
$this->em->persist($ancienContrat);
}
// =========================
// Ajouter réservation nouveau contrat
// =========================
if ($nouveauContrat) {
$nouveauReserve =
(float)$nouveauContrat->getMontantReserve();
$nouveauContrat->setMontantReserve(
(string)($nouveauReserve + $montantLigne)
);
$this->em->persist($nouveauContrat);
}
// =========================
// Mise à jour DA
// =========================
$demacha->setContratCadre($nouveauContrat);
// statut contrat
if ($nouveauContrat) {
$demacha->setStatutContratCadree(
demAchat::CC_VALIDE
);
} else {
$demacha->setStatutContratCadree(null);
}
$this->em->persist($demacha);
// =========================
// Save
// =========================
$this->em->flush();
return $this->redirect( $this->generateUrl('liste_demachat', array('id' => $idDemande)));
}
public function supprimeracha($id)
{
$demac = $this->em->getRepository(demAchat::class)->find($id);
$form = $this->createFormBuilder($demac)
->add('id', HiddenType::class) ->getForm();
return $this->render('DemandeAchatVue/supprimeracha.html.twig'
,['id' => $id,'form' => $form->createView(),]
);
}
public function ajaxsupprimeracha(Request $request): Response
{
$idDemande = $request->request->get('id');
$demacha = $this->em
->getRepository(demAchat::class)
->find($idDemande);
$num=$demacha->getNumDemandeAchat();
if (!$demacha) {
return new JsonResponse([
'success' => false,
'message' => 'Demande achat introuvable.'
]);
}
// =========================
// Ancien contrat
// =========================
$ancienContrat = $demacha->getContratCadre();
// =========================
// Calcul montant réservation
// =========================
$montantLigne =
(float)$demacha->getPrixU()
*
(float)$demacha->getQuantDemande();
// TVA éventuelle
if ($demacha->getTva()) {
$montantLigne +=
$montantLigne
*
((float)$demacha->getTva() / 100);
}
// =========================
// Retirer réservation ancien contrat
// =========================
if ($ancienContrat) {
$ancienReserve =
(float)$ancienContrat->getMontantReserve();
$ancienContrat->setMontantReserve(
(string)max(
0,
$ancienReserve - $montantLigne
)
);
$this->em->persist($ancienContrat);
}
$this->em->remove($demacha);
//$this->em->persist($demacha);
// =========================
// Save
// =========================
$this->em->flush();
$demacha = $this->em
->getRepository(demAchat::class)
->findOneByNumDemandeAchat($num);
return $this->redirect( $this->generateUrl('liste_demachat', array('id' =>$demacha ->getId())));
}
}