src/Controller/DemandeAchatController.php line 460

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use Doctrine\ORM\EntityManagerInterface;
  4. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  5. use Symfony\Component\HttpFoundation\Request;
  6. use Symfony\Component\HttpFoundation\Response;
  7. use Symfony\Component\HttpFoundation\JsonResponse;
  8. use Symfony\Component\Routing\Annotation\Route;
  9. use Symfony\Component\Security\Core\Security;
  10. use App\Service\EmailService;
  11. use App\Repository\DemAchatTempRepository;
  12. use App\Service\DemandeAchatService;
  13. use App\Service\ExcelImportService;
  14. use App\Service\ContratCadreService;
  15. use App\Service\TranslationWriter;
  16. use App\Service\PlanAchatBudgetService;
  17. use App\Service\RejectionService;
  18. use PhpOffice\PhpSpreadsheet\IOFactory;
  19. use PhpOffice\PhpSpreadsheet\Reader\Xlsx;
  20. use Twig\Environment;
  21. use Dompdf\Dompdf;
  22. use Symfony\Component\Form\Extension\Core\Type\FileType;
  23. use Symfony\Component\Form\Extension\Core\Type\TextType;
  24. use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
  25. use Symfony\Component\Form\Extension\Core\Type\IntegerType;
  26. use Symfony\Component\Form\Extension\Core\Type\HiddenType;
  27. use Symfony\Bridge\Doctrine\Form\Type\EntityType;
  28. use App\Form\demAchatType;
  29. use App\Form\ModifDemAchatType;
  30. use App\Form\DemAchatAddItemType;
  31. use App\Form\RegistrationFormType;
  32. use App\Form\PPMdemAchatType;
  33. use App\Entity\User;
  34. use App\Entity\Parametre;
  35. use App\Entity\NumDA;
  36. use App\Entity\demAchat;
  37. use App\Entity\RapportageDA;
  38. use App\Entity\DemAchatTemp;
  39. use App\Entity\Approb;
  40. use App\Entity\Bailleur;
  41. use App\Entity\UseBailleur;
  42. use App\Entity\CategoryCatalogue;
  43. use App\Entity\CommandeAchat;
  44. use App\Entity\Catalogue;
  45. use App\Entity\SupH;
  46. use App\Entity\Image;
  47. use App\Entity\ImageS;
  48. use App\Form\BonImageType;
  49. use App\Form\ImageSType;
  50. use App\Entity\demPaiement;
  51. use App\Entity\UserCentre;
  52. use App\Entity\CentreCout;
  53. use App\Entity\ReviewTec;
  54. use App\Entity\CategorieMarche;
  55. use App\Entity\ContratCadre;
  56. class DemandeAchatController extends AbstractController
  57. {
  58. // Le constructeur prend tous les services en paramètre
  59. public function __construct(
  60. private TranslationWriter $translationWriter,
  61. private EntityManagerInterface $em,
  62. private Security $security,
  63. private DemandeAchatService $demandeAchatService,
  64. private EmailService $emailService,
  65. private ExcelImportService $excelImportService,
  66. private Environment $twig,
  67. private ContratCadreService $contratCadreService,
  68. private PlanAchatBudgetService $planBudgetService,
  69. private RejectionService $rejectionService,
  70. ) {
  71. }
  72. public function updateData(Request $request, EntityManagerInterface $em): JsonResponse
  73. {
  74. $input = $request->request->get('input');
  75. // Récupération de l'utilisateur connecté via le contexte de sécurité
  76. $user = $this->security->getUser();
  77. // 1. Récupérer la DA active (le brouillon) de l'utilisateur
  78. $demtempuses = $em->getRepository(DemAchatTemp::class)->findByUser($user);
  79. $dernierBrouillon = end($demtempuses); // Le brouillon en cours
  80. $qb = $em->createQueryBuilder()
  81. ->select('c.id,c.designation')
  82. ->from(Catalogue::class, 'c');
  83. // 2. FILTRE : Si le brouillon a déjà un catalogue (article)
  84. if ($dernierBrouillon && $dernierBrouillon->getCatalogue()) {
  85. $catId = $dernierBrouillon->getCatalogue()->getCategorycatalogue()->getId();
  86. $qb->where('c.categorycatalogue = :catId')
  87. ->setParameter('catId', $catId);
  88. }
  89. // 3. RECHERCHE : Application du LIKE sur la désignation
  90. $qb->andWhere('c.designation LIKE :input')
  91. ->orderBy('CASE WHEN c.designation LIKE :start THEN 0 ELSE 1 END', 'ASC')
  92. ->addOrderBy('c.designation', 'ASC')
  93. ->setParameter('input', '%' . $input . '%')
  94. ->setParameter('start', $input . '%');
  95. $results = $qb->getQuery()->getArrayResult();
  96. $countryList = '<ul id="matchList" class="ui-autocomplete ui-menu ui-widget ui-widget-content ui-corner-all">';
  97. foreach ($results as $result) {
  98. $matchStringBold = preg_replace('/('.$input.')/i', '<strong>$1</strong>', $result['designation']);
  99. $countryList .= '<span id="li">
  100. <li class="ui-menu-item"
  101. id="'.$result['designation'].'"
  102. data-id="'.$result['id'].'"
  103. data-designation="'.$result['designation'].'">
  104. <span id="bol">'.$matchStringBold.'</span>
  105. </li>
  106. </span>';
  107. }
  108. $countryList .= '</ul>';
  109. return new JsonResponse(['countryList' => $countryList]);
  110. }
  111. public function gestionDemandeAchat(Request $request): Response
  112. {
  113. $user = $this->security->getUser();
  114. $list_demAcha = [];
  115. $list_demAcha2 = [];
  116. $demAchat = new demAchat;
  117. $usersel=new User;
  118. $data = $this->demandeAchatService->getValidationData();
  119. $admin = $data['admin'];
  120. $list_demAchaall = $data['list_demAchaall'];
  121. $list_demAchavalide = $data['list_demAchavalide'];
  122. $list_demAchauser = $data['list_demAchauser'];
  123. $list_demAcharefuse = $data['list_demAcharefuse'];
  124. $list_demAcha1 = $data['list_demAcha1'];
  125. $list_demAcha3 = $data['list_demAcha3'];
  126. $list_demAcha = $data['list_demAcha'];
  127. $list_demAcha2 = $data['list_demAcha2'];
  128. $list_use = $data['list_use'];
  129. $list_useb = $data['list_useb'];
  130. $list_demAchaval = $data['list_demAchaval'];
  131. $nbdarejet = $data['nbdarejet'];
  132. $nballda = $data['nballda'];
  133. $nbdavalid = $data['nbdavalid'];
  134. $nbdanivo = $data['nbdanivo'];
  135. $nbmesda = $data['nbmesda'];
  136. $form = $this->createForm(demAchatType::class);
  137. $form3 = $this->createForm(DemAchatAddItemType::class);
  138. $form33 = $this->createForm(PPMdemAchatType::class);
  139. $form2 = $this->createFormBuilder()
  140. ->add('listnum', ChoiceType::class, [
  141. 'label' => 'Toute DA',
  142. 'choices' => $list_demAchaall,
  143. 'required' => false,
  144. 'mapped' => false,
  145. 'placeholder'=>'Toute DA',
  146. ])
  147. ->getForm();
  148. $form5 = $this->createFormBuilder()
  149. ->add('listnum3', ChoiceType::class, [
  150. 'label' => 'DA que j\'ai validé',
  151. 'choices' => $list_demAchavalide,
  152. 'required' => false,
  153. 'mapped' => false,
  154. 'placeholder'=>'choisir',
  155. ])
  156. ->getForm();
  157. $form7 = $this->createFormBuilder()
  158. ->add('listnum7', ChoiceType::class, [
  159. 'label' => 'DA rejeté',
  160. 'choices' => $list_demAcharefuse,
  161. 'required' => false,
  162. 'mapped' => false,
  163. 'placeholder'=>'choisir',
  164. ])
  165. ->getForm();
  166. $form9 = $this->createFormBuilder()
  167. ->add('listnum9', ChoiceType::class, [
  168. 'label' => 'Mes DA',
  169. 'choices' => $list_demAchauser,
  170. 'required' => false,
  171. 'mapped' => false,
  172. 'placeholder'=>'choisir',
  173. ])
  174. ->getForm();
  175. $form4 = $this->createFormBuilder()
  176. ->add('listnum2', ChoiceType::class, [
  177. 'label' => 'DA à valider',
  178. 'choices' => $list_demAcha2,
  179. 'required' => false,
  180. 'mapped' => false,
  181. 'placeholder'=>'choisir',
  182. ])
  183. ->getForm();
  184. $form1 = $this->createFormBuilder()
  185. ->add('listnum1', ChoiceType::class, [
  186. 'label' => 'DA valider non pris en charge',
  187. 'choices' => $list_demAcha1,
  188. 'required' => false,
  189. 'mapped' => false,
  190. 'placeholder'=>'DA valider non pris en charge',
  191. ])
  192. ->getForm();
  193. $form10 = $this->createFormBuilder()
  194. ->add('listnum5', ChoiceType::class, [
  195. 'label' => 'DA pris en charge',
  196. 'choices' => $list_demAcha3,
  197. 'required' => false,
  198. 'mapped' => false,
  199. 'placeholder'=>'DA pris en charge',
  200. ])
  201. ->getForm();
  202. $form6 = $this->createFormBuilder()
  203. ->add('user', ChoiceType::class, [
  204. 'label' => 'utilisateur',
  205. 'choices' => $list_use,
  206. 'required' => false,
  207. 'mapped' => false,
  208. 'placeholder'=> 'choisir un utilisateur',
  209. ])
  210. ->add('listnum4', ChoiceType::class, [
  211. 'label' => '',
  212. 'choices' => [], // Le tableau est vide
  213. 'required' => false,
  214. 'mapped' => false, // Important si ce champ n'est pas lié à une entité
  215. 'placeholder'=>'Liste DA /utilisateur',
  216. ])
  217. ->getForm();
  218. $form8 = $this->createFormBuilder()
  219. ->add('usebaille', ChoiceType::class, [
  220. 'label' => 'usebaille',
  221. 'choices' => $list_useb,
  222. 'required' => false,
  223. 'mapped' => false,
  224. 'placeholder'=>'choisir un bailleur',
  225. ])
  226. ->add('listnum6', ChoiceType::class, [
  227. 'label' => '',
  228. 'choices' => [], // Le tableau est vide
  229. 'required' => false,
  230. 'mapped' => false, // Important si ce champ n'est pas lié à une entité
  231. 'placeholder'=>'Liste DA/ bailleur',
  232. ])
  233. ->getForm();
  234. $form10 = $this->createFormBuilder()
  235. ->add('listnum5', ChoiceType::class, [
  236. 'label' => 'DA pris en charge',
  237. 'choices' => $list_demAcha3,
  238. 'required' => false,
  239. 'mapped' => false,
  240. 'placeholder'=>'DA pris en charge',
  241. ])
  242. ->getForm();
  243. $form110 = $this->createFormBuilder()
  244. ->add('listnum55', ChoiceType::class, [
  245. 'label' => ' DA valider',
  246. 'choices' => $list_demAchavalide,
  247. 'required' => false,
  248. 'mapped' => false,
  249. 'placeholder'=>'DAs valider',
  250. ])
  251. ->getForm();
  252. $form01 = $this->createFormBuilder()
  253. ->add('fiche', FileType::class, [
  254. 'required' => false,
  255. 'mapped' => false, // Cette ligne est cruciale
  256. ])
  257. ->getForm();
  258. $demacha=$this->em->getRepository(demAchat::class)->find(8745);
  259. $form200 = $this->createForm(demAchatType::class, $demacha);
  260. $form01->handleRequest( $request);
  261. if ($form01->isSubmitted() ) {
  262. $file = $form01->get('fiche')->getData();
  263. if ($file) {
  264. try {
  265. // Appel du service qui gère l'importation
  266. $this->excelImportService->importDemandesAchat($file);
  267. // $this->addFlash('success', 'Le fichier a été importé avec succès !');
  268. } catch (\Exception $e) {
  269. $this->addFlash('error', 'Erreur lors de l\'importation : ' . $e->getMessage());
  270. }
  271. }
  272. return $this->redirect( $this->generateUrl('mstopes_gestion_demande_achat'));
  273. }
  274. return $this->render('DemandeAchatVue/demandeAchat.html.twig'
  275. ,['form' => $form->createView(),'form2' => $form2->createView(),'form4' => $form4->createView(),
  276. 'form3' => $form3->createView(),'form6' => $form6->createView(),'form5' => $form5->createView(),
  277. 'form7' => $form7->createView(),'form9' => $form9->createView(),'nbmesda' => $nbmesda,
  278. 'nbdanivo' => $nbdanivo,'nbdavalid' => $nbdavalid,'nballda' => $nballda,'nbdarejet' => $nbdarejet,
  279. 'form1' => $form1->createView(),'form10' => $form10->createView(),'form8' => $form8->createView(),
  280. 'form33' => $form33->createView(),'form01' => $form01->createView(),
  281. 'form110' => $form110->createView(),'admin' => $admin,'form200' => $form200->createView(),
  282. ]
  283. );
  284. }
  285. public function ajaxListDemAchat(Request $request): Response
  286. {
  287. // On vérifie que la requête est bien une requête AJAX.
  288. // C'est un point de contrôle important pour éviter les accès directs.
  289. if ($request->isXmlHttpRequest()) {
  290. $id = $request->request->get('listnum');
  291. // On s'assure que l'ID n'est pas vide avant de continuer.
  292. if ($id !== null) {
  293. // On redirige vers la route 'liste_demachat' avec l'ID en paramètre.
  294. // Cela permet de ne pas dupliquer la logique d'affichage.
  295. return $this->redirect($this->generateUrl('liste_demachat', ['id' => $id]));
  296. }
  297. }
  298. // Si la requête n'est pas une requête AJAX ou si l'ID est manquant,
  299. // on retourne une réponse d'erreur HTTP 400 Bad Request.
  300. return new Response('Requête invalide', Response::HTTP_BAD_REQUEST);
  301. }
  302. public function listdemachat(int $id, Request $request): Response
  303. {
  304. $user = $this->security->getUser();
  305. // 1. Appelez le service pour obtenir les données
  306. $data = $this->demandeAchatService->getDemandeAchatData($id);
  307. // Si le service ne trouve pas la demande, lancez une 404
  308. if (empty($data)) {
  309. throw $this->createNotFoundException("La demande d'achat n'existe pas.");
  310. }
  311. $da_sans_cc = $data['da_sans_cc'];
  312. $utildrmedical = $data['utildrmedical'];
  313. $usedrmedical = $data['usedrmedical'];
  314. $demachats = $data['demachats'];
  315. $numach = $data['numach'];
  316. $x = $data['x'];
  317. $total3 = $data['total3'];
  318. $param = $data['param'];
  319. $usesuph = $data['usesuph'];
  320. $userr = $data['userr'];
  321. $usedscsc = $data['usedscsc'];
  322. $usedp = $data['usedp'];
  323. $uselead = $data['uselead'];
  324. $code = $data['code'];
  325. $useprojet = $data['useprojet'];
  326. $usechef1 = $data['usechef1'];
  327. $usechef2 = $data['usechef2'];
  328. $usechef3 = $data['usechef3'];
  329. $usechef4 = $data['usechef4'];
  330. $usechef5 = $data['usechef5'];
  331. $usechef6 = $data['usechef6'];
  332. $usechef7 = $data['usechef7'];
  333. $userreg = $data['userreg'];
  334. $userespacha = $data['userespacha'];
  335. $demachatrefus = $data['demachatrefus'];
  336. $v = $data['v'];
  337. $usereg = $data['usereg'];
  338. $signechefp1 = $data['signechefp1'];
  339. $signechefp2 = $data['signechefp2'];
  340. $signechefp3 = $data['signechefp3'];
  341. $signechefp4 = $data['signechefp4'];
  342. $signechefp5 = $data['signechefp5'];
  343. $signechefp6 = $data['signechefp6'];
  344. $signechefp7 = $data['signechefp7'];
  345. $nb = $data['nb'];
  346. $nomb = $data['nomb'];
  347. $suph = $data['suph'];
  348. $ub = $data['ub'];
  349. $nbch = $data['nbch'];
  350. $usebaille1 = $data['usebaille1'];
  351. $usebaille2 = $data['usebaille2'];
  352. $usebaille3 = $data['usebaille3'];
  353. $usebaille4 = $data['usebaille4'];
  354. $usebaille5 = $data['usebaille5'];
  355. $usebaille6 = $data['usebaille6'];
  356. $usebaille7 = $data['usebaille7'];
  357. $valid1 = $data['valid1'];
  358. $valid2 = $data['valid2'];
  359. $usevalid1 = $data['usevalid1'];
  360. $usevalid2 = $data['usevalid2'];
  361. $uselead1 = $data['uselead1'];
  362. $uselead2 = $data['uselead2'];
  363. $uselead3 = $data['uselead3'];
  364. $uselead4 = $data['uselead4'];
  365. $uselead5 = $data['uselead5'];
  366. $w = $data['w'];
  367. $signelead1 = $data['signelead1'];
  368. $signelead2 = $data['signelead2'];
  369. $signelead3 = $data['signelead3'];
  370. $signelead4 = $data['signelead4'];
  371. $signelead5 = $data['signelead5'];
  372. $utiltecgarag = $data['utiltecgarag'];
  373. $utiltecinfo = $data['utiltecinfo'];
  374. $utilrachat = $data['utilrachat'];
  375. $utildscsc = $data['utildscsc'];
  376. $utildscsc2 = $data['utildscsc2'];
  377. $utilrr = $data['utilrr'];
  378. $userlead = $data['userlead'];
  379. $demachatrefuleads = $data['demachatrefuleads'];
  380. $signeDP1 = $data['signeDP1'];
  381. $signeDP2 = $data['signeDP2'];
  382. $signeDP3 = $data['signeDP3'];
  383. $signeDP4 = $data['signeDP4'];
  384. $signeDP5 = $data['signeDP5'];
  385. $signeDP6 = $data['signeDP6'];
  386. $signeDP7 = $data['signeDP7'];
  387. $signeDP8 = $data['signeDP8'];
  388. $usedp1 = $data['usedp1'];
  389. $usedp2 = $data['usedp2'];
  390. $usedp3 = $data['usedp3'];
  391. $usedp4 = $data['usedp4'];
  392. $usedp5 = $data['usedp5'];
  393. $usedp6 = $data['usedp6'];
  394. $usedp7 = $data['usedp7'];
  395. $usedp8 = $data['usedp8'];
  396. $usedep = $data['usedep'];
  397. $usechefp = $data['usechefp'];
  398. $categmedical = $data['categmedical'];
  399. $cloture = $data['cloture'];
  400. // 2. Gérez les formulaires. La logique de gestion des requêtes POST reste ici.
  401. $demach = $demachats[0]; // Récupérez l'objet principal
  402. $form10 = $this->createFormBuilder(new demAchat())
  403. ->add('tva', ChoiceType::class, ['choices' => ['0' => 0, '5' => 5, '15' => 15, '18' => 18]])
  404. ->getForm();
  405. /* $form20 = $this->createForm(demAchatType::class, $demach);
  406. $form20= $this->createFormBuilder()
  407. ->add('images', ImageSType::class,['required' => false, ])
  408. ->getForm();
  409. // Gérez l'envoi de formulaire si la méthode est POST
  410. $form20->handleRequest($request);
  411. if ($form20->isSubmitted() && $form20->isValid()) {
  412. $this->em->flush();
  413. return $this->redirectToRoute('mstopes_gestion_demande_achat');
  414. }*/
  415. return $this->render('DemandeAchatVue/show.html.twig'
  416. ,[
  417. 'cloture' => $cloture,
  418. 'da_sans_cc' => $da_sans_cc,
  419. 'utildrmedical' => $utildrmedical,
  420. 'categmedical' => $categmedical,
  421. 'usedrmedical' => $usedrmedical,
  422. 'demachats' => $demachats,
  423. 'numach' => $numach,
  424. 'user' => $user,
  425. 'id' => $id,
  426. 'x' => $x,
  427. 'total3' => $total3,
  428. 'param' => $param,
  429. 'usesuph' => $usesuph,
  430. 'userr' => $userr,
  431. 'usedscsc' => $usedscsc,
  432. 'usedp' => $usedp,
  433. 'uselead' => $uselead,
  434. 'usechefp' => $usechefp,
  435. 'usedep' => $usedep,
  436. 'code' => $code,
  437. 'useprojet' => $useprojet,
  438. 'usechef1' => $usechef1,
  439. 'usechef2' => $usechef2,
  440. 'usechef3' => $usechef3,
  441. 'userreg' => $userreg,
  442. 'usechef4' => $usechef4,
  443. 'usechef5' => $usechef5,
  444. 'usechef6' => $usechef6,
  445. 'userespacha' => $userespacha,
  446. 'usereg' => $usereg,
  447. 'signechefp1' => $signechefp1,
  448. 'signechefp2' => $signechefp2,
  449. 'signechefp3' => $signechefp3,
  450. 'signechefp4' => $signechefp4,
  451. 'signechefp5' => $signechefp5,
  452. 'signechefp6' => $signechefp6,
  453. 'v' => $v,
  454. 'demachatrefus' => $demachatrefus,
  455. 'nb' => $nb,
  456. 'form10' => $form10->createView(),
  457. 'nomb' => $nomb,
  458. 'suph' => $suph,
  459. 'ub' => $ub,
  460. 'nbch' => $nbch,
  461. //'form20' => $form20->createView(),
  462. 'signechefp7' => $signechefp7,
  463. 'usechef7' => $usechef7,
  464. 'usebaille1' => $usebaille1,
  465. 'usebaille2' => $usebaille2,
  466. 'usebaille3' => $usebaille3,
  467. 'usebaille4' => $usebaille4,
  468. 'usebaille5' => $usebaille5,
  469. 'usebaille6' => $usebaille6,
  470. 'usebaille7' => $usebaille7
  471. ,'valid1' => $valid1,
  472. 'valid2' => $valid2,
  473. 'usevalid1' => $usevalid1,
  474. 'usegarage' => $usevalid2,
  475. 'uselead1' => $uselead1,
  476. 'uselead2' => $uselead2,
  477. 'uselead3' => $uselead3,
  478. 'w' => $w,
  479. 'signelead1' => $signelead1,
  480. 'signelead2' => $signelead2,
  481. 'signelead3' => $signelead3,
  482. 'signelead4' => $signelead4,
  483. 'signelead5' => $signelead5,
  484. 'utiltecgarag' => $utiltecgarag,
  485. 'utiltecinfo' => $utiltecinfo,
  486. 'utilrachat' => $utilrachat,
  487. 'utildscsc' => $utildscsc,
  488. 'utildscsc2' => $utildscsc2,
  489. 'utilrr' => $utilrr,
  490. 'uselead4' => $uselead4,
  491. 'uselead5' => $uselead5,
  492. 'userlead' => $userlead,
  493. 'demachatrefuleads' => $demachatrefuleads,
  494. 'signeDP1' => $signeDP1,
  495. 'signeDP2' => $signeDP2,
  496. 'signeDP3' => $signeDP3,
  497. 'signeDP4' => $signeDP4,
  498. 'signeDP5' => $signeDP5,
  499. 'signeDP6' => $signeDP6,
  500. 'signeDP7' => $signeDP7,
  501. 'signeDP8' => $signeDP8,
  502. 'usedp1' => $usedp1,
  503. 'usedp2' => $usedp2,
  504. 'usedp3' => $usedp3,
  505. 'usedp4' => $usedp4,
  506. 'usedp5' => $usedp5,
  507. 'usedp6' => $usedp6,
  508. 'usedp7' => $usedp7,
  509. 'usedp8' => $usedp8
  510. ]
  511. );
  512. }
  513. public function addfileda(int $id, Request $request): Response
  514. {
  515. //$user = $this->security->getUser();
  516. $demacha=$this->em->getRepository(demAchat::class)->find($id);
  517. $form = $this->createForm(demAchatType::class, $demacha);
  518. // Gérez l'envoi de formulaire si la méthode est POST
  519. $form->handleRequest($request);
  520. if ($form->isSubmitted() ) {
  521. $this->em->flush();
  522. return $this->redirectToRoute('mstopes_gestion_demande_achat');
  523. }
  524. return $this->render('DemandeAchatVue/addfileda.html.twig'
  525. ,[
  526. 'id' => $id,'form' => $form->createView()]
  527. );
  528. }
  529. public function uploadImageAndLink(Request $request): JsonResponse
  530. {
  531. // 1. Récupérer l'ID du demAchat à partir des données POST de FormData
  532. // JQuery doit inclure 'demAchatId' dans le FormData.
  533. $demAchatId = $request->request->get('demAchatId');
  534. if (!$demAchatId) {
  535. return new JsonResponse(['error' => 'Missing demAchat ID'], 400);
  536. }
  537. /** @var demAchat $demAchat */
  538. $demAchat = $this->em->getRepository(demAchat::class)->find($demAchatId);
  539. if (!$demAchat) {
  540. return new JsonResponse(['error' => 'DemAchat not found'], 404);
  541. }
  542. /** @var UploadedFile $file */
  543. $file = $request->files->get('image'); // 'image' est le nom du champ file
  544. if (!$file) {
  545. return new JsonResponse(['error' => 'No file uploaded'], 400);
  546. }
  547. // --- Logique d'upload et de persistance de ImageS ---
  548. /*
  549. $imageS = new Image();
  550. $fileName = md5(uniqid()) . '.' . $file->guessExtension();
  551. try {
  552. $file->move($imageS->getUploadRootDir(), $fileName);
  553. } catch (\Exception $e) {
  554. return new JsonResponse(['error' => 'File move failed'], 500);
  555. }
  556. $imageS->setUrl($fileName);
  557. $imageS->setAlt($file->getClientOriginalName());
  558. // 2. Lier l'ImageS au demAchat et persister/flusher
  559. // Si un ancien fichier existait, vous pouvez le supprimer ici.
  560. if ($oldImage = $demAchat->getImage()) {
  561. // Logique de suppression de l'ancien fichier/entité ImageS (Optionnel)
  562. $oldImagePath = $oldImage->getUploadRootDir() . '/' . $oldImage->getUrl();
  563. if (file_exists($oldImagePath)) {
  564. unlink($oldImagePath);
  565. }
  566. $this->em->remove($oldImage);
  567. }
  568. $demAchat->setImage($imageS); // Lier la nouvelle image
  569. $this->em->persist($imageS);
  570. $this->em->flush(); // Le flush va enregistrer ImageS et mettre à jour demAchat
  571. */
  572. // --- Fin Logique d'upload ---
  573. return new JsonResponse([
  574. 'success' => true,
  575. //'imageId' => $imageS->getId(),
  576. 'message' => 'Image uploaded and linked successfully to DemAchat ID: ' . $demAchatId,
  577. ]);
  578. }
  579. public function listedatemp(int $id, Request $request): Response
  580. {
  581. $datemps=null;
  582. $user = $this->security->getUser();
  583. $datemps=$this->em->getRepository(DemAchatTemp::class)->findDemandeAchatPerso($id);
  584. $montant=0; $nb=count($datemps);
  585. if($datemps!==null){
  586. foreach($datemps as $datemp)
  587. {
  588. $montant= $montant+$datemp->getPrixU()*$datemp->getQuantDemande();
  589. }
  590. $datemps[0]->setNumOrdre($montant);
  591. $this->em->flush();
  592. }
  593. return $this->render('DemandeAchatVue/listedatemp.html.twig'
  594. ,[
  595. 'demachats' => $datemps,'nb' => $nb]
  596. );
  597. }
  598. public function ajouterachattemp(Request $request): Response
  599. {
  600. $demAch = new DemAchatTemp;
  601. $user = $this->security->getUser();
  602. $demachas=$this->em->getRepository(DemAchatTemp::class)->findAll();
  603. $obje = $request->request->get('obje');
  604. $idcentreCout = $request->request->get('centreCout');
  605. $idnomprojet = $request->request->get('bailleur');
  606. $descrip = $request->request->get('descrip');
  607. $quantDemand = $request->request->get('quantDemand');
  608. $delais = $request->request->get('delais');
  609. $region = $request->request->get('region');
  610. $prixUnit = $request->request->get('prixUnit');
  611. $iddesignrech = $request->request->get('iddesignrech');
  612. if($region ==1){$region="Bamako";}
  613. elseif($region ==2){$region="Segou";}
  614. elseif($region ==3){$region="Mopti";}
  615. elseif($region ==4){$region="Sikasso";}
  616. elseif($region ==5){$region="Koulikoro";}
  617. $nomprojet= $this->em->getRepository(Bailleur::class)->find($idnomprojet);
  618. $cecout= $this->em->getRepository(CentreCout::class)->find($idcentreCout);
  619. if($iddesignrech!=null)
  620. $designrech= $this->em->getRepository(Catalogue::class)->findOneByDesignation($iddesignrech);
  621. else
  622. $designrech=null;
  623. $num=1;
  624. if($demachas!==null){
  625. foreach($demachas as $demacha)
  626. {
  627. if($demacha->getNumDemandeAchat()>$num)
  628. $num=$demacha->getNumDemandeAchat();
  629. }
  630. $num=$num+1;
  631. }
  632. $demAch->setCentreCout($cecout->getLibele());
  633. $demAch->setCostcenter($cecout);
  634. $demAch->setNombaille($nomprojet);
  635. $demAch->setNomProjet($nomprojet->getLibele());
  636. $demAch->setQuantDemande($quantDemand);
  637. $demAch->setObjet($obje);
  638. $demAch->setRegion($region);
  639. $demAch->setDescription($descrip);
  640. if($designrech != null){
  641. $demAch->setDesignation($designrech->getDesignation());
  642. $demAch->setCatalogue($designrech);
  643. $demAch->setPrixU($prixUnit);
  644. }
  645. else {
  646. $demAch->setDesignation('votre article selectionner ne se trouve pas dans le catalogue');
  647. }
  648. $dat=date('Y-m-d H:i:s');
  649. $demAch->setDateSoumis(new \DateTime($dat));
  650. $demAch->setUser($user);
  651. $demAch->setNumDemandeAchat($num);
  652. //$demAch->setNumOrdre(1);
  653. $demAch->setDelais($delais);
  654. $this->em->persist($demAch);
  655. $this->em->flush();
  656. return $this->redirectToRoute('liste_da_temp', ['id' => $num]);
  657. }
  658. public function ajoutdesigndatemp(Request $request): Response
  659. {
  660. $demAch = new DemAchatTemp;
  661. $user = $this->security->getUser();
  662. $demtempuses = $this->em->getRepository(DemAchatTemp::class)->findByUser( $user);
  663. $demtemp = end($demtempuses);
  664. $idbailleur = $request->request->get('bailleur');
  665. $descrip = $request->request->get('descrip');
  666. $idcentreCout = $request->request->get('centreCout');
  667. $quantDemand = $request->request->get('quantDemand');
  668. $prixUnit = $request->request->get('prixUnit');
  669. $iddesignrech = $request->request->get('iddesignrech');
  670. $nomprojet = $this->em->getRepository(Bailleur::class)->find($idbailleur);
  671. $centrecout = $this->em->getRepository(CentreCout::class)->find($idcentreCout);
  672. if($iddesignrech!=null)
  673. $designrech= $this->em->getRepository(Catalogue::class)->findOneByDesignation($iddesignrech);
  674. else
  675. $designrech=null;
  676. $num=$demtemp->getNumDemandeAchat();
  677. $demAch->setCentreCout($centrecout->getLibele());
  678. $demAch->setCostcenter($centrecout);
  679. $demAch->setNomProjet($nomprojet->getLibele());
  680. $demAch->setNombaille($nomprojet);
  681. $demAch->setRegion($demtemp->getRegion());
  682. $demAch->setQuantDemande($quantDemand);
  683. $demAch->setObjet($demtemp->getObjet());
  684. $demAch->setDescription($descrip);
  685. if($designrech != null){
  686. $demAch->setDesignation($designrech->getDesignation());
  687. $demAch->setCatalogue($designrech);
  688. $demAch->setPrixU($prixUnit);
  689. }
  690. else {
  691. $demAch->setDesignation('votre article selectionner ne se trouve pas dans le catalogue');
  692. }
  693. $dat=date('Y-m-d H:i:s');
  694. $demAch->setDateSoumis(new \DateTime($dat));
  695. $demAch->setUser($user);
  696. $demAch->setNumDemandeAchat($num);
  697. $demAch->setNumOrdre(1);
  698. $demAch->setDelais($demtemp->getDelais());
  699. $this->em->persist($demAch);
  700. $this->em->flush();
  701. return $this->redirectToRoute('liste_da_temp', ['id' => $num]);
  702. }
  703. //creer DA sans le centre de cout
  704. public function ajaxadatemp(Request $request): Response
  705. {
  706. $demAch = new DemAchatTemp;
  707. $user = $this->security->getUser();
  708. $demachas=$this->em->getRepository(DemAchatTemp::class)->findAll();
  709. $obje = $request->request->get('obje');
  710. $descrip = $request->request->get('descrip');
  711. $region = $request->request->get('region');
  712. $baille2 = $request->request->get('baille2');
  713. $quantDemand = $request->request->get('quantDemand');
  714. $prixUnit = $request->request->get('prixUnit');
  715. $iddesignrech = $request->request->get('iddesignrech');
  716. $nomprojet= $this->em->getRepository(Bailleur::class)->find($baille2);
  717. if($iddesignrech!=null)
  718. $designrech= $this->em->getRepository(Catalogue::class)->findOneByDesignation($iddesignrech);
  719. else
  720. $designrech=null;
  721. $num=1;
  722. if($demachas!=null){
  723. foreach($demachas as $demacha)
  724. {
  725. if($demacha->getNumDemandeAchat()>$num)
  726. $num=$demacha->getNumDemandeAchat();
  727. }
  728. $num=$num+1;
  729. }
  730. $demAch->setQuantDemande($quantDemand);
  731. $demAch->setObjet($obje);
  732. $demAch->setNombaille($nomprojet);
  733. $demAch->setNomProjet($nomprojet->getLibele());
  734. $demAch->setDescription($descrip);
  735. $demAch->setRegion($region);
  736. if($designrech !=null ){
  737. if($designrech[0]->getId()!=749){
  738. $demAch->setDesignation($designrech[0]->getDesignation());
  739. $demAch->setPrixU($prixUnit);
  740. $demAch->setCatalogue($designrech[0]);
  741. }
  742. else
  743. $demAch->setDesignation('votre article selectionner ne se trouve pas dans le catalogue');
  744. }
  745. if($designrech==null )
  746. $demAch->setDesignation('votre article selectionner ne se trouve pas dans le catalogue');
  747. $demAch->setUser($user);
  748. $demAch->setNumDemandeAchat($num);
  749. $demAch->setNumOrdre(1);
  750. $this->em->persist($demAch);
  751. $this->em->flush();
  752. return $this->redirectToRoute('liste_da_temp', ['id' => $num]);
  753. }
  754. public function ajaxajoutdatempAction()
  755. {
  756. $request = $this->container->get('request');
  757. $em = $this->getDoctrine()->getEntityManager();
  758. $demAch = new demAchatTemp;
  759. $user = $this->container->get('security.context')->getToken()->getUser();
  760. $demtempuses=$this->em->getRepository(DemAchatTemp::class)->selectdemuser($user);
  761. $demtemp=end($demtempuses);
  762. $descrip = $request->request->get('descrip');
  763. $obje = $request->request->get('obje');
  764. $quantDemand = $request->request->get('quantDemand');
  765. $idbailleur = $request->request->get('baille2');
  766. $prixUnit = $request->request->get('prixUnit');
  767. $iddesignrech = $request->request->get('iddesignrech');
  768. $designrech=$em->getRepository('mstopeIntranetBundle:Catalogue')->findByDesignation($iddesignrech);
  769. $nomprojet=$em->getRepository('mstopeIntranetBundle:Bailleur')->find($idbailleur);
  770. $num=$demtemp->getNumDemandeAchat();
  771. $demAch->setQuantDemande($quantDemand);
  772. $demAch->setObjet($demtemp->getObjet());
  773. $demAch->setRegion($demtemp->getRegion());
  774. $demAch->setDescription($descrip);
  775. if(isset($designrech)){
  776. if($designrech[0]->getId()!=749){
  777. $demAch->setDesignation($designrech[0]->getDesignation());
  778. $demAch->setCatalogue($designrech[0]);}
  779. else
  780. $demAch->setDesignation('votre article selectionner ne se trouve pas dans le catalogue');
  781. }
  782. if($designrech==null )
  783. $demAch->setDesignation('votre article selectionner ne se trouve pas dans le catalogue');
  784. $demAch->setPrixU($prixUnit);
  785. $demAch->setNomProjet($nomprojet->getLibele());
  786. $demAch->setNombaille($nomprojet);
  787. $demAch->setUser($user);
  788. $demAch->setNumDemandeAchat($num);
  789. $demAch->setNumOrdre(1);
  790. $em->persist($demAch);
  791. $em->flush();
  792. //return $this->redirect( $this->generateUrl('mstopes_gestion_demande_achat'));
  793. return $this->redirect( $this->generateUrl('liste_da_temp', array('id' => $num)));
  794. }
  795. public function daenvoyer(Request $request): Response
  796. {
  797. $user = $this->security->getUser();
  798. $numero = $request->request->get('num');
  799. $datemps=$this->em->getRepository(DemAchatTemp::class)->findDemandeAchatPerso($numero);
  800. $numda = $this->em->getRepository(NumDA::class)->find(1);
  801. $num=$numda->getNum()+1;
  802. $total=0;$total3=0;
  803. $contratCadreSelectionne = null;
  804. $presenceLigneSansCC = false;
  805. foreach($datemps as $datemp)
  806. {
  807. $numtemp= $datemp->getNumDemandeAchat();
  808. $achat = new demAchat; $raport= new RapportageDA;
  809. $achat->setDesignation($datemp->getDesignation());
  810. $achat->setPrixU($datemp->getPrixU());
  811. $achat->setCentreCout($datemp->getCentreCout());
  812. $achat->setNomProjet($datemp->getNomProjet());
  813. $achat->setNombaille($datemp->getNombaille());
  814. $achat->setCostcenter($datemp->getCostcenter());
  815. $achat->setCatalogue($datemp->getCatalogue());
  816. $achat->setObjet($datemp->getObjet());
  817. $achat->setRegion($datemp->getRegion());
  818. $achat->setDescription($datemp->getDescription());
  819. $achat->setUser($datemp->getUser());
  820. $achat->setNomProjet($datemp->getNomProjet());
  821. $achat->setQuantDemande($datemp->getQuantDemande());
  822. $achat->setResteACommander($datemp->getQuantDemande());
  823. $achat->setDelais($datemp->getDelais());
  824. $achat->setNumOrdre(1);
  825. $dat=date('Y-m-d H:i:s');
  826. $achat->setDateSoumis(new \DateTime($dat));
  827. // =====================================================
  828. // GESTION AUTOMATIQUE CONTRAT-CADRE
  829. // =====================================================
  830. $montantLigne =
  831. (float)$datemp->getPrixU()
  832. * (float)$datemp->getQuantDemande();
  833. $contratCadre = null;
  834. $catalogue = $datemp->getCatalogue();
  835. $categorieCatalogue = $catalogue
  836. ? $catalogue->getCategorycatalogue()
  837. : null;
  838. if ($categorieCatalogue) {
  839. // ManyToMany :
  840. // CategoryCatalogue -> CategoriesMarche
  841. $categoriesMarche =
  842. $categorieCatalogue->getCategoriesMarche();
  843. if (!$categoriesMarche->isEmpty()) {
  844. foreach ($categoriesMarche as $categorieMarche) {
  845. $contrats =
  846. $this->contratCadreService
  847. ->listerDisponiblesPourDA(
  848. $categorieMarche->getId(),
  849. $montantLigne
  850. );
  851. // premier contrat compatible
  852. if (!empty($contrats)) {
  853. $contratCadre = $contrats[0];
  854. break;
  855. }
  856. }
  857. }
  858. }
  859. // =====================================================
  860. // CONTROLE COHERENCE DA
  861. // =====================================================
  862. // contrat trouvé
  863. if ($contratCadre) {
  864. // rattachement DA -> ContratCadre
  865. $achat->setContratCadre($contratCadre);
  866. $achat->setStatutContratCadree(demAchat::CC_SUGGERE);
  867. // réservation budget
  868. $montantReserve =
  869. (float)$contratCadre->getMontantReserve();
  870. $contratCadre->setMontantReserve(
  871. (string)($montantReserve + $montantLigne)
  872. );
  873. $this->em->persist($contratCadre);
  874. }
  875. $numda->setNum($num);
  876. $achat->setNumDemandeAchat($num);
  877. $this->em->persist($achat);
  878. $this->em->remove($datemp);
  879. $raport->setDateSoumis(new \DateTime($dat));
  880. $raport->setDemAchat($achat);
  881. $this->em->persist($raport);
  882. $this->em->flush();
  883. if (!empty($datemp->getDescription()) && $datemp->getDescription() !== "undefined" &&(trim($datemp->getDescription()) !== ""))
  884. {// 🔥 2. Sauvegarde traductions FR
  885. $this->translationWriter->create
  886. (
  887. 'demAchat',
  888. $achat->getId(),
  889. 'description',
  890. $achat->getDescription()
  891. );
  892. }
  893. }
  894. $this->em->refresh($achat);
  895. // 🔥 2. Sauvegarde traductions FR
  896. $this->translationWriter->create(
  897. 'demAchat',
  898. $achat->getId(),
  899. 'objet',
  900. $achat->getObjet()
  901. );
  902. $this->em->flush();
  903. // return $this->redirectToRoute('liste_da_temp', ['id' => $numero]);
  904. return $this->redirect( $this->generateUrl('mstopes_gestion_demande_achat'));
  905. }
  906. //ajout article apres creation de la DA
  907. public function ajaxajoutdesignachat(Request $request)
  908. {
  909. if (!$request->isXmlHttpRequest()) {
  910. return new JsonResponse([
  911. 'error' => 'Invalid request'
  912. ], 400);
  913. }
  914. $user = $this->getUser();
  915. $id = $request->request->get('listnum');
  916. $id2 = $request->request->get('listnum2');
  917. $id3 = $request->request->get('listnum9');
  918. $id4 = $request->request->get('listnum4');
  919. $id5 = $request->request->get('listnum3');
  920. $id6 = $request->request->get('listnum7');
  921. $id7 = $request->request->get('listnum1');
  922. $id8 = $request->request->get('listnum5');
  923. $idcentreCout = $request->request->get('centreCout');
  924. $idbailleur = $request->request->get('bailleur');
  925. $quantDemand = (float)$request->request->get('quantDemand');
  926. $prixUni = (float)$request->request->get('prixUni');
  927. $descrip = $request->request->get('descrip');
  928. $designation = $request->request->get('designation');
  929. // =====================================================
  930. // Catalogue
  931. // =====================================================
  932. $design = $this->em
  933. ->getRepository(Catalogue::class)
  934. ->findOneBy([
  935. 'designation' => $designation
  936. ]);
  937. $bailleur = $this->em
  938. ->getRepository(Bailleur::class)
  939. ->find($idbailleur);
  940. $centrecout = $this->em
  941. ->getRepository(CentreCout::class)
  942. ->find($idcentreCout);
  943. // =====================================================
  944. // Demande principale
  945. // =====================================================
  946. $ids = [$id, $id2, $id3, $id4, $id5, $id6, $id7, $id8];
  947. $demacha = null;
  948. foreach ($ids as $oneId) {
  949. if ($oneId) {
  950. $demacha = $this->em
  951. ->getRepository(DemAchat::class)
  952. ->find($oneId);
  953. if ($demacha) {
  954. break;
  955. }
  956. }
  957. }
  958. if (!$demacha) {
  959. return new JsonResponse([
  960. 'message' =>
  961. "Ajout impossible : demande introuvable"
  962. ], 400);
  963. }
  964. // =====================================================
  965. // Sécurité logique
  966. // =====================================================
  967. if (($id2 && $id) || ($id3 && $id)) {
  968. return new JsonResponse([
  969. 'message' =>
  970. "Ajout non effectué : veuillez actualiser la page"
  971. ], 400);
  972. }
  973. // =====================================================
  974. // Création ligne DA
  975. // =====================================================
  976. $demAch = new demAchat();
  977. if ($design) {
  978. $demAch->setDesignation($designation);
  979. $demAch->setCatalogue($design);
  980. } else {
  981. $demAch->setDesignation(
  982. 'Produit introuvable dans le catalogue'
  983. );
  984. }
  985. $demAch->setPrixU($prixUni);
  986. $demAch->setCentreCout(
  987. $centrecout?->getLibele()
  988. );
  989. $demAch->setCostcenter($centrecout);
  990. $demAch->setNombaille($bailleur);
  991. $demAch->setNomProjet(
  992. $bailleur?->getLibele()
  993. );
  994. $demAch->setQuantDemande($quantDemand);
  995. $demAch->setDelais(
  996. $demacha->getDelais()
  997. );
  998. $demAch->setObjet(
  999. $demacha->getObjet()
  1000. );
  1001. if (
  1002. !empty($descrip)
  1003. &&
  1004. $descrip !== "undefined"
  1005. ) {
  1006. $demAch->setDescription($descrip);
  1007. }
  1008. $demAch->setRegion(
  1009. $demacha->getRegion()
  1010. );
  1011. $demAch->setNumOrdre(1);
  1012. $demAch->setUser($user);
  1013. $demAch->setNumDemandeAchat(
  1014. $demacha->getNumDemandeAchat()
  1015. );
  1016. $demAch->setDateSoumis(new \DateTime());
  1017. // =====================================================
  1018. // GESTION CONTRAT CADRE
  1019. // =====================================================
  1020. $contratCadre = null;
  1021. $montantLigne =
  1022. $prixUni * $quantDemand;
  1023. if (
  1024. $design
  1025. &&
  1026. $design->getCategorycatalogue()
  1027. ) {
  1028. $categorieCatalogue =
  1029. $design->getCategorycatalogue();
  1030. foreach (
  1031. $categorieCatalogue->getCategoriesMarche()
  1032. as $categorieMarche
  1033. ) {
  1034. $contrats =
  1035. $this->contratCadreService
  1036. ->listerDisponiblesPourDA(
  1037. $categorieMarche->getId(),
  1038. $montantLigne
  1039. );
  1040. if (!empty($contrats)) {
  1041. $contratCadre = $contrats[0];
  1042. break;
  1043. }
  1044. }
  1045. }
  1046. // =====================================================
  1047. // Affectation contrat + réservation
  1048. // =====================================================
  1049. if ($contratCadre) {
  1050. $demAch->setContratCadre(
  1051. $contratCadre
  1052. );
  1053. $demAch->setStatutContratCadree(
  1054. demAchat::CC_SUGGERE
  1055. );
  1056. // réservation
  1057. $reserve =
  1058. (float)$contratCadre->getMontantReserve();
  1059. $contratCadre->setMontantReserve(
  1060. (string)($reserve + $montantLigne)
  1061. );
  1062. $this->em->persist($contratCadre);
  1063. }
  1064. // =====================================================
  1065. // Save
  1066. // =====================================================
  1067. $this->em->persist($demAch);
  1068. $this->em->flush();
  1069. $this->em->refresh($demAch);
  1070. // =====================================================
  1071. // Traduction description
  1072. // =====================================================
  1073. if (
  1074. !empty($descrip)
  1075. &&
  1076. $descrip !== "undefined"
  1077. &&
  1078. trim($descrip) !== ""
  1079. ) {
  1080. $this->translationWriter->create(
  1081. 'demAchat',
  1082. $demAch->getId(),
  1083. 'description',
  1084. $demAch->getDescription()
  1085. );
  1086. $this->em->flush();
  1087. }
  1088. // =====================================================
  1089. // Retour
  1090. // =====================================================
  1091. return $this->redirect(
  1092. $this->generateUrl(
  1093. 'liste_demachat',
  1094. [
  1095. 'id' => $demacha->getId()
  1096. ]
  1097. )
  1098. );
  1099. }
  1100. public function downloadfileDA(int $id_ap):Response
  1101. {
  1102. $img = $this->em->getRepository(ImageS::class)->find($id_ap);
  1103. $fichier = $img->getAlt();
  1104. $chemin =$img->getUploadRootDir().'/';
  1105. $response = new Response();
  1106. $response->setContent(file_get_contents($chemin.$fichier));
  1107. $response->headers->set('Content-Type', 'application/force-download');
  1108. $response->headers->set('Content-disposition', 'filename='.$fichier);
  1109. return $response;
  1110. }
  1111. public function imprimdemachat(int $id, Request $request): Response
  1112. {
  1113. $user = $this->security->getUser();
  1114. // 1. Appelez le service pour obtenir les données
  1115. $data = $this->demandeAchatService->getDemandeAchatData($id);
  1116. // Si le service ne trouve pas la demande, lancez une 404
  1117. if (empty($data)) {
  1118. throw $this->createNotFoundException("La demande d'achat n'existe pas.");
  1119. }
  1120. $demachats = $data['demachats'];
  1121. $numach = $data['numach'];
  1122. $x = $data['x'];
  1123. $total3 = $data['total3'];
  1124. $param = $data['param'];
  1125. $usesuph = $data['usesuph'];
  1126. $userr = $data['userr'];
  1127. $usedscsc = $data['usedscsc'];
  1128. $usedp = $data['usedp'];
  1129. $uselead = $data['uselead'];
  1130. $code = $data['code'];
  1131. $useprojet = $data['useprojet'];
  1132. $usechef1 = $data['usechef1'];
  1133. $usechef2 = $data['usechef2'];
  1134. $usechef3 = $data['usechef3'];
  1135. $usechef4 = $data['usechef4'];
  1136. $usechef5 = $data['usechef5'];
  1137. $usechef6 = $data['usechef6'];
  1138. $usechef7 = $data['usechef7'];
  1139. $userreg = $data['userreg'];
  1140. $userespacha = $data['userespacha'];
  1141. $demachatrefus = $data['demachatrefus'];
  1142. $v = $data['v'];
  1143. $usereg = $data['usereg'];
  1144. $signechefp1 = $data['signechefp1'];
  1145. $signechefp2 = $data['signechefp2'];
  1146. $signechefp3 = $data['signechefp3'];
  1147. $signechefp4 = $data['signechefp4'];
  1148. $signechefp5 = $data['signechefp5'];
  1149. $signechefp6 = $data['signechefp6'];
  1150. $signechefp7 = $data['signechefp7'];
  1151. $nb = $data['nb'];
  1152. $nomb = $data['nomb'];
  1153. $suph = $data['suph'];
  1154. $ub = $data['ub'];
  1155. $nbch = $data['nbch'];
  1156. $usebaille1 = $data['usebaille1'];
  1157. $usebaille2 = $data['usebaille2'];
  1158. $usebaille3 = $data['usebaille3'];
  1159. $usebaille4 = $data['usebaille4'];
  1160. $usebaille5 = $data['usebaille5'];
  1161. $usebaille6 = $data['usebaille6'];
  1162. $usebaille7 = $data['usebaille7'];
  1163. $valid1 = $data['valid1'];
  1164. $valid2 = $data['valid2'];
  1165. $usevalid1 = $data['usevalid1'];
  1166. $usevalid2 = $data['usevalid2'];
  1167. $uselead1 = $data['uselead1'];
  1168. $uselead2 = $data['uselead2'];
  1169. $uselead3 = $data['uselead3'];
  1170. $uselead4 = $data['uselead4'];
  1171. $uselead5 = $data['uselead5'];
  1172. $w = $data['w'];
  1173. $signelead1 = $data['signelead1'];
  1174. $signelead2 = $data['signelead2'];
  1175. $signelead3 = $data['signelead3'];
  1176. $signelead4 = $data['signelead4'];
  1177. $signelead5 = $data['signelead5'];
  1178. $utiltecgarag = $data['utiltecgarag'];
  1179. $utiltecinfo = $data['utiltecinfo'];
  1180. $utilrachat = $data['utilrachat'];
  1181. $utildscsc = $data['utildscsc'];
  1182. $utildscsc2 = $data['utildscsc2'];
  1183. $utilrr = $data['utilrr'];
  1184. $userlead = $data['userlead'];
  1185. $demachatrefuleads = $data['demachatrefuleads'];
  1186. $signeDP1 = $data['signeDP1'];
  1187. $signeDP2 = $data['signeDP2'];
  1188. $signeDP3 = $data['signeDP3'];
  1189. $signeDP4 = $data['signeDP4'];
  1190. $signeDP5 = $data['signeDP5'];
  1191. $signeDP6 = $data['signeDP6'];
  1192. $signeDP7 = $data['signeDP7'];
  1193. $signeDP8 = $data['signeDP8'];
  1194. $usedp1 = $data['usedp1'];
  1195. $usedp2 = $data['usedp2'];
  1196. $usedp3 = $data['usedp3'];
  1197. $usedp4 = $data['usedp4'];
  1198. $usedp5 = $data['usedp5'];
  1199. $usedp6 = $data['usedp6'];
  1200. $usedp7 = $data['usedp7'];
  1201. $usedp8 = $data['usedp8'];
  1202. $usedep = $data['usedep'];
  1203. $usechefp = $data['usechefp'];
  1204. // 2. Gérez les formulaires. La logique de gestion des requêtes POST reste ici.
  1205. $demach = $demachats[0]; // Récupérez l'objet principal
  1206. $path = 'C:\wamp64\www\intranetbf\public\img\valid.png';
  1207. $type = pathinfo($path, PATHINFO_EXTENSION);
  1208. $data = file_get_contents($path);
  1209. $base64 = base64_encode($data);
  1210. $html = $this->twig->render('DemandeAchatVue/imprimdemachat.html.twig'
  1211. ,[
  1212. 'base64_image_data' => $base64,
  1213. 'demachats' => $demachats,
  1214. 'numach' => $numach,
  1215. 'user' => $user,
  1216. 'id' => $id,
  1217. 'x' => $x,
  1218. 'total3' => $total3,
  1219. 'param' => $param,
  1220. 'usesuph' => $usesuph,
  1221. 'userr' => $userr,
  1222. 'usedscsc' => $usedscsc,
  1223. 'usedp' => $usedp,
  1224. 'uselead' => $uselead,
  1225. 'usechefp' => $usechefp,
  1226. 'usedep' => $usedep,
  1227. 'code' => $code,
  1228. 'useprojet' => $useprojet,
  1229. 'usechef1' => $usechef1,
  1230. 'usechef2' => $usechef2,
  1231. 'usechef3' => $usechef3,
  1232. 'userreg' => $userreg,
  1233. 'usechef4' => $usechef4,
  1234. 'usechef5' => $usechef5,
  1235. 'usechef6' => $usechef6,
  1236. 'userespacha' => $userespacha,
  1237. 'usereg' => $usereg,
  1238. 'signechefp1' => $signechefp1,
  1239. 'signechefp2' => $signechefp2,
  1240. 'signechefp3' => $signechefp3,
  1241. 'signechefp4' => $signechefp4,
  1242. 'signechefp5' => $signechefp5,
  1243. 'signechefp6' => $signechefp6,
  1244. 'v' => $v,
  1245. 'demachatrefus' => $demachatrefus,
  1246. 'nb' => $nb,
  1247. //'form10' => $form10->createView(),
  1248. 'nomb' => $nomb,
  1249. 'suph' => $suph,
  1250. 'ub' => $ub,
  1251. 'nbch' => $nbch,
  1252. //'form20' => $form20->createView(),
  1253. 'signechefp7' => $signechefp7,
  1254. 'usechef7' => $usechef7,
  1255. 'usebaille1' => $usebaille1,
  1256. 'usebaille2' => $usebaille2,
  1257. 'usebaille3' => $usebaille3,
  1258. 'usebaille4' => $usebaille4,
  1259. 'usebaille5' => $usebaille5,
  1260. 'usebaille6' => $usebaille6,
  1261. 'usebaille7' => $usebaille7
  1262. ,'valid1' => $valid1,
  1263. 'valid2' => $valid2,
  1264. 'usevalid1' => $usevalid1,
  1265. 'usegarage' => $usevalid2,
  1266. 'uselead1' => $uselead1,
  1267. 'uselead2' => $uselead2,
  1268. 'uselead3' => $uselead3,
  1269. 'w' => $w,
  1270. 'signelead1' => $signelead1,
  1271. 'signelead2' => $signelead2,
  1272. 'signelead3' => $signelead3,
  1273. 'signelead4' => $signelead4,
  1274. 'signelead5' => $signelead5,
  1275. 'utiltecgarag' => $utiltecgarag,
  1276. 'utiltecinfo' => $utiltecinfo,
  1277. 'utilrachat' => $utilrachat,
  1278. 'utildscsc' => $utildscsc,
  1279. 'utildscsc2' => $utildscsc2,
  1280. 'utilrr' => $utilrr,
  1281. 'uselead4' => $uselead4,
  1282. 'uselead5' => $uselead5,
  1283. 'userlead' => $userlead,
  1284. 'demachatrefuleads' => $demachatrefuleads,
  1285. 'signeDP1' => $signeDP1,
  1286. 'signeDP2' => $signeDP2,
  1287. 'signeDP3' => $signeDP3,
  1288. 'signeDP4' => $signeDP4,
  1289. 'signeDP5' => $signeDP5,
  1290. 'signeDP6' => $signeDP6,
  1291. 'signeDP7' => $signeDP7,
  1292. 'signeDP8' => $signeDP8,
  1293. 'usedp1' => $usedp1,
  1294. 'usedp2' => $usedp2,
  1295. 'usedp3' => $usedp3,
  1296. 'usedp4' => $usedp4,
  1297. 'usedp5' => $usedp5,
  1298. 'usedp6' => $usedp6,
  1299. 'usedp7' => $usedp7,
  1300. 'usedp8' => $usedp8
  1301. ]
  1302. );
  1303. // 3. Utiliser une bibliothèque plus récente pour le PDF, comme 'dompdf/dompdf'
  1304. // Installez-la via Composer si ce n'est pas déjà fait : composer require dompdf/dompdf
  1305. $html2pdf = new \Dompdf\Dompdf();
  1306. $html2pdf->loadHtml($html);
  1307. $html2pdf->setPaper('A4', 'landscape');
  1308. $html2pdf->render();
  1309. $output = $html2pdf->output();
  1310. // Envoi direct de la sortie PDF en tant que réponse
  1311. $response = new Response($output);
  1312. $response->headers->set('Content-Type', 'application/pdf');
  1313. $response->headers->set('Content-Disposition', 'inline; filename="demande_achat_'.$id.'.pdf"');
  1314. // 4. Remplacer la logique d'envoi d'e-mail par le composant Mailer
  1315. $userE = $demach->getUser();
  1316. $emailUser = $userE->getEmail();
  1317. $nom = $userE->getNom();
  1318. $prenom = $userE->getPrenom();
  1319. /*
  1320. $email = (new Email())
  1321. ->from('votre_email@votredomaine.com')
  1322. ->to($emailUser)
  1323. ->subject('Demande d\'achat imprimée')
  1324. ->html(
  1325. "<html><head></head><body><b>Bonjour</b>,<br/>
  1326. Mrs/Mr $nom $prenom, votre demande d'achat N&deg$numach a &eacutet&eacute imprim&eacute.<br/><br/>
  1327. Suivez ce lien pour voir la demande:<br/>
  1328. http://www.intranet-mariestopesbf.org/web/login
  1329. </body></html>"
  1330. );
  1331. $mailer->send($email);*/
  1332. return $response;
  1333. }
  1334. public function telechargerFileA($id_ap)
  1335. {
  1336. $img = $this->em->getRepository(Image::class)->find($id_ap);
  1337. $fichier = $img->getAlt();
  1338. $chemin =$img->getUploadRootDir().'/';
  1339. $response = new Response();
  1340. $response->setContent(file_get_contents($chemin.$id_ap.$fichier));
  1341. $response->headers->set('Content-Type', 'application/force-download');
  1342. $response->headers->set('Content-disposition', 'filename='.$fichier);
  1343. return $response;
  1344. }
  1345. public function ajaxmodifierdelaiprevu($id_dem): Response
  1346. {
  1347. $achat = $this->em->getRepository(demAchat::class)->find($id_dem);
  1348. $form = $this->createForm(ModifDemAchatType::class, $achat);
  1349. return $this->render('DemandeAchatVue/modifierdelaiprevu.html.twig',
  1350. ['id_dem' => $id_dem,'form' => $form->createView(),]);
  1351. }
  1352. public function modifierdelaiprevu(Request $request): Response
  1353. {
  1354. $listnum = $request->request->get('id');
  1355. $delai = $request->request->get('delai');
  1356. $demacha=$this->em->getRepository(demAchat::class)->find($listnum);
  1357. $demachas = $this->em->getRepository(demAchat::class)->findBy([
  1358. 'numDemandeAchat' =>$demacha->getNumDemandeAchat(),'drapoRejetchef'=>0]);
  1359. foreach($demachas as $demach){
  1360. $demach->setDelaisPrevu($delai);
  1361. }
  1362. $this->em->flush();
  1363. return $this->redirect( $this->generateUrl('liste_demachat', array('id' => $listnum)));
  1364. }
  1365. public function ajaxmodifierdemacha($id_dem)
  1366. {
  1367. $demach = $this->em->getRepository(demAchat::class)->find($id_dem);
  1368. //$demachats = $this->em->getRepository(demAchat::class)->findByNumDemandeAchat($demach->getNumDemandeAchat() );
  1369. $user1=$demach->getUser();
  1370. $user = $this->security->getUser();
  1371. $form9 = $this->createForm(ModifDemAchatType::class, $demach);
  1372. return $this->render('DemandeAchatVue/modifierdemacha.html.twig',
  1373. ['id_dem' => $id_dem,'form9' => $form9->createView(),'user1' => $user1,'user' => $user]);
  1374. }
  1375. public function modifierdemacha(Request $request): Response
  1376. {
  1377. $objet = $request->request->get('objet');
  1378. $designation = $request->request->get('designatio');
  1379. $description = $request->request->get('description');
  1380. $quantd = (float)$request->request->get('quantd');
  1381. $idcentreCout = $request->request->get('centreCout');
  1382. $idnomProjet = $request->request->get('nomProjet');
  1383. $prixU = (float)$request->request->get('prixU');
  1384. $id = $request->request->get('id');
  1385. $demacha = $this->em
  1386. ->getRepository(demAchat::class)
  1387. ->find($id);
  1388. if (!$demacha) {
  1389. throw $this->createNotFoundException();
  1390. }
  1391. // =====================================================
  1392. // Ancien contrat + ancien montant
  1393. // =====================================================
  1394. $ancienContrat = $demacha->getContratCadre();
  1395. $ancienMontant =
  1396. (float)$demacha->getPrixU()
  1397. *
  1398. (float)$demacha->getQuantDemande();
  1399. if ($demacha->getTva()) {
  1400. $ancienMontant +=
  1401. $ancienMontant
  1402. *
  1403. ((float)$demacha->getTva() / 100);
  1404. }
  1405. // =====================================================
  1406. // Données liées
  1407. // =====================================================
  1408. $centreCout = $this->em
  1409. ->getRepository(CentreCout::class)
  1410. ->find($idcentreCout);
  1411. $nomProjet = $this->em
  1412. ->getRepository(Bailleur::class)
  1413. ->find($idnomProjet);
  1414. $design = $this->em
  1415. ->getRepository(Catalogue::class)
  1416. ->findOneByDesignation($designation);
  1417. // =====================================================
  1418. // MAJ ligne DA
  1419. // =====================================================
  1420. if ($design != null) {
  1421. $demacha->setDesignation(
  1422. $design->getDesignation()
  1423. );
  1424. $demacha->setCatalogue($design);
  1425. } else {
  1426. $demacha->setDesignation(
  1427. 'votre article selectionner ne se trouve pas dans le catalogue'
  1428. );
  1429. }
  1430. $demacha->setPrixU($prixU);
  1431. $demacha->setQuantDemande($quantd);
  1432. $demacha->setResteACommander($quantd);
  1433. $demacha->setCentreCout(
  1434. $centreCout->getLibele()
  1435. );
  1436. $demacha->setCostcenter($centreCout);
  1437. $demacha->setNomProjet(
  1438. $nomProjet->getLibele()
  1439. );
  1440. $demacha->setNombaille($nomProjet);
  1441. $demacha->setDescription($description);
  1442. // =====================================================
  1443. // MAJ objet sur toutes lignes DA
  1444. // =====================================================
  1445. $numach = $demacha->getNumDemandeAchat();
  1446. $demachats = $this->em
  1447. ->getRepository(demAchat::class)
  1448. ->findBy([
  1449. 'numDemandeAchat' => $numach,
  1450. 'drapoRejetchef' => 0
  1451. ]);
  1452. foreach ($demachats as $demachat) {
  1453. $demachat->setObjet($objet);
  1454. }
  1455. // =====================================================
  1456. // Nouveau montant
  1457. // =====================================================
  1458. $nouveauMontant =
  1459. $prixU * $quantd;
  1460. if ($demacha->getTva()) {
  1461. $nouveauMontant +=
  1462. $nouveauMontant
  1463. *
  1464. ((float)$demacha->getTva() / 100);
  1465. }
  1466. // =====================================================
  1467. // Retrait ancien montant réservation
  1468. // =====================================================
  1469. if ($ancienContrat) {
  1470. $ancienReserve =
  1471. (float)$ancienContrat->getMontantReserve();
  1472. $ancienContrat->setMontantReserve(
  1473. (string)max(
  1474. 0,
  1475. $ancienReserve - $ancienMontant
  1476. )
  1477. );
  1478. $this->em->persist($ancienContrat);
  1479. }
  1480. // =====================================================
  1481. // Recherche nouveau contrat compatible
  1482. // =====================================================
  1483. $nouveauContrat = null;
  1484. if ($design && $design->getCategorycatalogue()) {
  1485. $categorieCatalogue =
  1486. $design->getCategorycatalogue();
  1487. foreach (
  1488. $categorieCatalogue->getCategoriesMarche()
  1489. as $categorieMarche
  1490. ) {
  1491. $contrats =
  1492. $this->contratCadreService
  1493. ->listerDisponiblesPourDA(
  1494. $categorieMarche->getId(),
  1495. $nouveauMontant
  1496. );
  1497. if (!empty($contrats)) {
  1498. $nouveauContrat = $contrats[0];
  1499. break;
  1500. }
  1501. }
  1502. }
  1503. // =====================================================
  1504. // Nouveau contrat
  1505. // =====================================================
  1506. $demacha->setContratCadre($nouveauContrat);
  1507. if ($nouveauContrat) {
  1508. $reserve =
  1509. (float)$nouveauContrat->getMontantReserve();
  1510. $nouveauContrat->setMontantReserve(
  1511. (string)($reserve + $nouveauMontant)
  1512. );
  1513. $demacha->setStatutContratCadree(
  1514. demAchat::CC_SUGGERE
  1515. );
  1516. $this->em->persist($nouveauContrat);
  1517. } else {
  1518. $demacha->setStatutContratCadree(null);
  1519. }
  1520. // =====================================================
  1521. // Save
  1522. // =====================================================
  1523. $this->em->persist($demacha);
  1524. $this->em->flush();
  1525. return $this->redirect( $this->generateUrl( 'liste_demachat',
  1526. [
  1527. 'id' => $id
  1528. ]
  1529. )
  1530. );
  1531. }
  1532. public function ajaxmodacha($id_dem)
  1533. {
  1534. $demac = $this->em->getRepository(demAchat::class)->find($id_dem);
  1535. $form8 = $this->createForm(ModifDemAchatType::class, $demac);
  1536. return $this->render('DemandeAchatVue/modifacha.html.twig'
  1537. ,['id_dem' => $id_dem,'form8' => $form8->createView(),]
  1538. );
  1539. }
  1540. public function modifacha(Request $request): Response
  1541. {
  1542. $id = $request->request->get('id');
  1543. $bailleur = $request->request->get('bailleur');
  1544. $projet = $request->request->get('projet');
  1545. $ligneBudget = $request->request->get('ligneBudget');
  1546. $demacha=$this->em->getRepository(demAchat::class)->find($id);
  1547. $demacha->setBailleur($bailleur);
  1548. $demacha->setProjet($projet);
  1549. $demacha->setLigneBudget($ligneBudget);
  1550. $this->em->flush();
  1551. return $this->redirect( $this->generateUrl('liste_demachat', array('id' => $id)));
  1552. }
  1553. public function ajaxmodifdemacha($id_dem)
  1554. {
  1555. $demac = $this->em->getRepository(demAchat::class)->find($id_dem);
  1556. $form = $this->createForm(ModifDemAchatType::class, $demac);
  1557. return $this->render('DemandeAchatVue/modifdemacha.html.twig',
  1558. ['id_dem' => $id_dem,'form' => $form->createView(),]);
  1559. }
  1560. public function modifdemacha(Request $request): Response
  1561. {
  1562. $user = $this->security->getUser();
  1563. $observation = $request->request->get('observation');
  1564. $id = $request->request->get('id');
  1565. //$quanta = $request->request->get('quantA');
  1566. $demacha=$this->em->getRepository(demAchat::class)->find($id);
  1567. $observation= $observation.' / par '.$user->getNom().' '.$user->getPrenom();
  1568. // $demacha->setQuantAccorde(null);
  1569. $demacha->setObservation($observation);
  1570. $this->em->flush();
  1571. return $this->redirect( $this->generateUrl('liste_demachat', array('id' => $id)));
  1572. }
  1573. public function ajaxcorrectionda(Request $request): Response
  1574. {
  1575. $data = $this->demandeAchatService->getDemachatSigneData($request);
  1576. $demachas = $data['demachas'];
  1577. $id_achat = $data['id_achat'];
  1578. foreach($demachas as $demach){
  1579. $demach->setDrapoRespRegrefu(0);
  1580. $demach->setDrapoRespAcharefu(0);
  1581. $demach->setDrapoDSCSCrefu(0);
  1582. $demach->setDrapoDPrefu(0);
  1583. $demach->setDrapoRRrefu(0);
  1584. $demach->setDrapoSuprefu(0);
  1585. $demach->setDrapoLeadrefu(0);
  1586. $demach->setDrapoLeadrefu1(0);
  1587. $demach->setDrapoLeadrefu2(0);
  1588. $demach->setDrapoLeadrefu3(0);
  1589. $demach->setDrapoLeadrefu4(0);
  1590. $demach->setDrapoLeadrefu5(0);
  1591. $demach->setDrapoRejetLead(0);
  1592. $demach->setDrapoChefprefu(0);
  1593. $demach->setDrapoChefprefu1(0);
  1594. $demach->setDrapoChefprefu2(0);
  1595. $demach->setDrapoChefprefu3(0);
  1596. $demach->setDrapoChefprefu4(0);
  1597. $demach->setDrapoChefprefu5(0);
  1598. $demach->setDrapoChefprefu6(0);
  1599. $demach->setDrapoChefprefu7(0);
  1600. $demach->setDrapoDPrefu1(0);
  1601. $demach->setDrapoDPrefu2(0);
  1602. $demach->setDrapoDPrefu3(0);
  1603. $demach->setDrapoDPrefu4(0);
  1604. $demach->setDrapoDPrefu5(0);
  1605. $demach->setDrapoDPrefu6(0);
  1606. $demach->setDrapoDPrefu7(0);
  1607. $demach->setRaisonRefu(null);
  1608. $demach->setObservation(null);
  1609. $demach->setSigneLead(null);
  1610. $demach->setSigneLead1(null);
  1611. $demach->setSigneLead2(null);
  1612. $demach->setSigneLead3(null);
  1613. $demach->setSigneLead4(null);
  1614. $demach->setSigneLead5(null);
  1615. $demach->setSigneSUP(null);
  1616. $demach->setSigneChefp(null);
  1617. $demach->setSigneChefp1(null);
  1618. $demach->setSigneChefp2(null);
  1619. $demach->setSigneChefp3(null);
  1620. $demach->setSigneChefp4(null);
  1621. $demach->setSigneChefp5(null);
  1622. $demach->setSigneChefp6(null);
  1623. $demach->setSigneChefp7(null);
  1624. $demach->setSigneDF(null);
  1625. $demach->setSigneDP(null);
  1626. $demach->setSigneRR(null);
  1627. $demach->setSigneDP1(null);
  1628. $demach->setSigneDP2(null);
  1629. $demach->setSigneDP3(null);
  1630. $demach->setSigneDP4(null);
  1631. $demach->setSigneDP5(null);
  1632. $demach->setSigneDP6(null);
  1633. $demach->setSigneDP7(null);
  1634. $demach->setDrapoRespReg(0);
  1635. $demach->setDrapoRespAcha(0);
  1636. $demach->setDrapoDSCSC(0);
  1637. $demach->setDrapoDP(0);
  1638. $demach->setDrapoRR(0);
  1639. $demach->setDrapoSup(0);
  1640. $demach->setDrapoLead(0);
  1641. $demach->setDrapoChefp(0);
  1642. $demach->setDrapoChefp1(0);
  1643. $demach->setDrapoChefp2(0);
  1644. $demach->setDrapoChefp3(0);
  1645. $demach->setDrapoChefp4(0);
  1646. $demach->setDrapoChefp5(0);
  1647. $demach->setDrapoChefp6(0);
  1648. $demach->setDrapoChefp7(0);
  1649. $demach->setDrapoRejetchef(0);
  1650. $demach->setDrapoLead1(0);
  1651. $demach->setDrapoLead2(0);
  1652. $demach->setDrapoLead3(0);
  1653. $demach->setDrapoLead4(0);
  1654. $demach->setDrapoLead5(0);
  1655. $demach->setDrapoDP1(0);
  1656. $demach->setDrapoDP2(0);
  1657. $demach->setDrapoDP3(0);
  1658. $demach->setDrapoDP4(0);
  1659. $demach->setDrapoDP5(0);
  1660. $demach->setDrapoDP6(0);
  1661. $demach->setDrapoDP7(0);
  1662. $demach->setDrapoGaragerefu(0);
  1663. }
  1664. $this->em->flush();
  1665. return $this->redirect( $this->generateUrl('liste_demachat', array('id' => $id_achat)));
  1666. }
  1667. /*public function ajaxmodtva(Request $request): Response
  1668. {
  1669. $data = $this->demandeAchatService->getDemachatSigneData($request);
  1670. $demachas = $data['demachas'];
  1671. $id_achat = $data['id_achat'];
  1672. $tva = $data['tva'];
  1673. foreach($demachas as $demach){
  1674. $demach->setTva($tva);
  1675. }
  1676. $this->em->flush();
  1677. return $this->redirect( $this->generateUrl('liste_demachat', array('id' => $id_achat)));
  1678. } */
  1679. public function ajaxmodtva(Request $request): Response
  1680. {
  1681. $data = $this->demandeAchatService->getDemachatSigneData($request);
  1682. $demachas = $data['demachas'];
  1683. $id_achat = $data['id_achat'];
  1684. $tva = (float)$data['tva'];
  1685. if (empty($demachas)) {
  1686. return $this->redirect(
  1687. $this->generateUrl('liste_demachat', ['id' => $id_achat])
  1688. );
  1689. }
  1690. // même contrat pour toute la DA
  1691. $contratCadre = $demachas[0]->getContratCadre();
  1692. $ancienMontantTotal = 0;
  1693. $nouveauMontantTotal = 0;
  1694. foreach ($demachas as $demach) {
  1695. $prixU = (float)$demach->getPrixU();
  1696. $qte = (float)$demach->getQuantDemande();
  1697. // ancien montant avec ancienne TVA
  1698. $ancienneTva = (float)$demach->getTva();
  1699. $ancienLigne =
  1700. ($prixU * $qte)
  1701. +
  1702. (($prixU * $qte) * $ancienneTva / 100);
  1703. $ancienMontantTotal += $ancienLigne;
  1704. // mise à jour TVA
  1705. $demach->setTva((string)$tva);
  1706. // nouveau montant
  1707. $nouveauLigne =
  1708. ($prixU * $qte)
  1709. +
  1710. (($prixU * $qte) * $tva / 100);
  1711. $nouveauMontantTotal += $nouveauLigne;
  1712. }
  1713. // ajustement réservation CC
  1714. if ($contratCadre) {
  1715. $montantReserveActuel =
  1716. (float)$contratCadre->getMontantReserve();
  1717. // différence TTC
  1718. $difference =
  1719. $nouveauMontantTotal - $ancienMontantTotal;
  1720. $contratCadre->setMontantReserve(
  1721. (string)($montantReserveActuel + $difference)
  1722. );
  1723. $this->em->persist($contratCadre);
  1724. }
  1725. $this->em->flush();
  1726. return $this->redirect(
  1727. $this->generateUrl('liste_demachat', ['id' => $id_achat])
  1728. );
  1729. }
  1730. public function ajaxdrapoCharge(Request $request): Response
  1731. {
  1732. $data = $this->demandeAchatService->getDemachatSigneData($request);
  1733. $demachas = $data['demachas'];
  1734. $id_achat = $data['id_achat'];
  1735. $user = $data['user'];
  1736. $demacha = $data['demacha'];
  1737. $var=0;
  1738. foreach($demachas as $demach){
  1739. if (empty($demach->getDelaisPrevu()))
  1740. $var=1;
  1741. }
  1742. if($var==1){
  1743. return new JsonResponse(['message' => 'veuillez renseigner le delais prévisionnel !']);
  1744. }
  1745. else
  1746. {
  1747. foreach($demachas as $demach){
  1748. $demach->setDrapoPriCharge(1);
  1749. }
  1750. $this->em->flush();
  1751. $delais=$demacha->getDelaisPrevu();
  1752. $emailuser=$user->getEmail();
  1753. $num=$demacha->getNumDemandeAchat();
  1754. $nom=$user->getNom();
  1755. $prenom=$user->getPrenom();
  1756. $contenu="<html><head></head><body><b>Bonjour</b>,<br/>
  1757. la demande d'achat N&deg$num de Mrs/Mr $nom $prenom a ete pris en charge.
  1758. le delais de livraison prévisionnel est de $delais jours.
  1759. .<br/><br/>
  1760. <br/>
  1761. </body></html>
  1762. </body></html>";
  1763. // $this->Envoi($emailuser,$contenu);
  1764. return $this->redirect( $this->generateUrl('liste_demachat', array('id' => $id_achat)));
  1765. }
  1766. }
  1767. public function ajaxvalidtech1(Request $request): Response
  1768. {
  1769. $data = $this->demandeAchatService->getDemachatSigneData($request);
  1770. $demachas = $data['demachas'];
  1771. // $id_achat = $data['id_achat'];
  1772. $user = $data['user'];
  1773. $demacha = $data['demacha'];
  1774. $dat = $data['dat'];
  1775. foreach($demachas as $demach){
  1776. $demach->setSigneInfo($user);
  1777. $demach->setDrapoInfo(1);
  1778. $demach->setDrapoInforefu(0);
  1779. $demach->setDateInfo(new \DateTime($dat));
  1780. }
  1781. $this->em->flush();
  1782. $id_achat=$demacha->getId();
  1783. $user=$demacha->getUser();
  1784. $emailuser=$user->getEmail();
  1785. $num=$demacha->getNumDemandeAchat();
  1786. $nom=$user->getNom();
  1787. $prenom=$user->getPrenom();
  1788. $contenu="<html><head></head><body><b>Bonjour,
  1789. le responsable technique a validé la DA</b>,<br/>
  1790. http://www.intranet-mariestopesmali.org/web/gestionDemandeAchat
  1791. </body></html>";
  1792. // $this->Envoi($emailuser,$contenu);
  1793. return $this->redirect( $this->generateUrl('liste_demachat', array('id' => $id_achat)));
  1794. }
  1795. public function ajaxvalidtech1refu(Request $request): Response
  1796. {
  1797. $data = $this->demandeAchatService->getDemachatSigneData($request);
  1798. $demachas = $data['demachas'];
  1799. $id_achat = $data['id_achat'];
  1800. $user = $data['user'];
  1801. $demacha = $data['demacha'];
  1802. $dat = $data['dat'];
  1803. foreach($demachas as $demach){
  1804. $demach->setSigneInfo($user);
  1805. $demach->setDrapoInfo(0);
  1806. $demach->setDrapoInforefu(1);
  1807. $demach->setDateInfo(new \DateTime($dat));
  1808. }
  1809. $this->em->flush();
  1810. $this->rejectionService->libererBudgetDA($demachas);
  1811. $user=$demacha->getUser();
  1812. $emailuser=$user->getEmail();
  1813. $num=$demacha->getNumDemandeAchat();
  1814. $nom=$user->getNom();
  1815. $prenom=$user->getPrenom();
  1816. $contenu="<html><head></head><body><b>Bonjour,
  1817. le responsable technique a rejeté la DA</b>,<br/>
  1818. http://www.intranet-mariestopesmali.org/web/gestionDemandeAchat
  1819. </body></html>";
  1820. // $this->Envoi($emailuser,$contenu);
  1821. return $this->redirect( $this->generateUrl('liste_demachat', array('id' => $id_achat)));
  1822. }
  1823. public function ajaxvalid2(Request $request): Response
  1824. {
  1825. $data = $this->demandeAchatService->getDemachatSigneData($request);
  1826. $demachas = $data['demachas'];
  1827. $id_achat = $data['id_achat'];
  1828. $user = $data['user'];
  1829. $demacha = $data['demacha'];
  1830. $dat = $data['dat'];
  1831. foreach($demachas as $demach){
  1832. $demach->setSigneGarage($user);
  1833. $demach->setDrapoGarage(1);
  1834. $demach->setDrapoGaragerefu(0);
  1835. $demach->setDateGarage(new \DateTime($dat));
  1836. if($demach->getUser()->getId()==294){
  1837. $demach->setDrapoSup(1);
  1838. $demach->setDrapoSuprefu(0);
  1839. $demach->setSigneSUP($user);
  1840. $demach->setDateSuph(new \DateTime($dat));
  1841. }
  1842. }
  1843. $this->em->flush();
  1844. $user=$demacha->getUser();
  1845. $emailuser=$user->getEmail();
  1846. $num=$demacha->getNumDemandeAchat();
  1847. $nom=$user->getNom();
  1848. $prenom=$user->getPrenom();
  1849. $contenu="<html><head></head><body><b>Bonjour,
  1850. le responsable technique a validé la DA</b>,<br/>
  1851. http://www.intranet-mariestopesmali.org/web/gestionDemandeAchat
  1852. </body></html>";
  1853. // $this->Envoi($emailuser,$contenu);
  1854. return $this->redirect( $this->generateUrl('liste_demachat', array('id' => $id_achat)));
  1855. }
  1856. public function ajaxvalid2refu(Request $request): Response
  1857. {
  1858. $data = $this->demandeAchatService->getDemachatSigneData($request);
  1859. $demachas = $data['demachas'];
  1860. $id_achat = $data['id_achat'];
  1861. $user = $data['user'];
  1862. $demacha = $data['demacha'];
  1863. $dat = $data['dat'];
  1864. foreach($demachas as $demach){
  1865. $demach->setSigneGarage($user);
  1866. $demach->setDrapoGarage(0);
  1867. $demach->setDrapoGaragerefu(1);
  1868. $demach->setDateGarage(new \DateTime($dat));
  1869. if($demach->getUser()->getId()==294){
  1870. $demach->setDrapoSup(1);
  1871. $demach->setDrapoSuprefu(0);
  1872. $demach->setSigneSUP($user);
  1873. $demach->setDateSuph(new \DateTime($dat));
  1874. }
  1875. }
  1876. $this->em->flush();
  1877. $user=$demacha->getUser();
  1878. $emailuser=$user->getEmail();
  1879. $num=$demacha->getNumDemandeAchat();
  1880. $nom=$user->getNom();
  1881. $prenom=$user->getPrenom();
  1882. $contenu="<html><head></head><body><b>Bonjour,
  1883. le responsable technique a rejeté la DA</b>,<br/>
  1884. http://www.intranet-mariestopesmali.org/web/gestionDemandeAchat
  1885. </body></html>";
  1886. // $this->Envoi($emailuser,$contenu);
  1887. return $this->redirect( $this->generateUrl('liste_demachat', array('id' => $id_achat)));
  1888. }
  1889. public function ajaxdraporacha(Request $request): Response
  1890. {
  1891. $data = $this->demandeAchatService->getDemachatSigneData($request);
  1892. $demachas = $data['demachas'];
  1893. $id_achat = $data['id_achat'];
  1894. $user = $data['user'];
  1895. $demacha = $data['demacha'];
  1896. $dat = $data['dat'];
  1897. $nbselect = $data['nbselect'];
  1898. if( $nbselect >1){
  1899. return new JsonResponse(array('message' => 'veuillez actualiser la page, vous avez plusieurs DAs ouvertes !'));
  1900. }
  1901. foreach($demachas as $demach){
  1902. $demach->setSigneRespAcha($user);
  1903. $demach->setDrapoRespAcha(1);
  1904. $demach->setDrapoRespAcharefu(0);
  1905. $demach->setDateRespAcha(new \DateTime($dat));
  1906. }
  1907. $this->em->flush();
  1908. $user=$demacha->getUser();
  1909. $emailuser=$user->getEmail();
  1910. $num=$demacha->getNumDemandeAchat();
  1911. $nom=$user->getNom();
  1912. $prenom=$user->getPrenom();
  1913. $contenu="<html><head></head><body><b>Bonjour,
  1914. le responsable achat a validé la DA</b>,<br/>
  1915. http://www.intranet-mariestopesmali.org/web/gestionDemandeAchat
  1916. </body></html>";
  1917. // $this->Envoi($emailuser,$contenu);
  1918. return $this->redirect( $this->generateUrl('liste_demachat', array('id' => $id_achat)));
  1919. }
  1920. public function ajaxdraporacharefu(Request $request): Response
  1921. {
  1922. $data = $this->demandeAchatService->getDemachatSigneData($request);
  1923. $demachas = $data['demachas'];
  1924. $id_achat = $data['id_achat'];
  1925. $user = $data['user'];
  1926. $demacha = $data['demacha'];
  1927. $dat = $data['dat'];
  1928. $nbselect = $data['nbselect'];
  1929. if( $nbselect >1){
  1930. return new JsonResponse(array('message' => 'veuillez actualiser la page, vous avez plusieurs DAs ouvertes !'));
  1931. }
  1932. foreach($demachas as $demach){
  1933. $demach->setSigneRespAcha($user);
  1934. $demach->setDrapoRespAcha(0);
  1935. $demach->setDrapoRespAcharefu(1);
  1936. $demach->setDateRespAcha(new \DateTime($dat));
  1937. }
  1938. $this->em->flush();
  1939. $this->rejectionService->libererBudgetDA($demachas);
  1940. $user=$demacha->getUser();
  1941. $emailuser=$user->getEmail();
  1942. $num=$demacha->getNumDemandeAchat();
  1943. $nom=$user->getNom();
  1944. $prenom=$user->getPrenom();
  1945. $contenu="<html><head></head><body><b>Bonjour,
  1946. le responsable achat a validé la DA</b>,<br/>
  1947. http://www.intranet-mariestopesmali.org/web/gestionDemandeAchat
  1948. </body></html>";
  1949. // $this->Envoi($emailuser,$contenu);
  1950. return $this->redirect( $this->generateUrl('liste_demachat', array('id' => $id_achat)));
  1951. }
  1952. public function ajaxdrapodrmedical(Request $request): Response
  1953. {
  1954. $data = $this->demandeAchatService->getDemachatSigneData($request);
  1955. $demachas = $data['demachas'];
  1956. $id_achat = $data['id_achat'];
  1957. $user = $data['user'];
  1958. $demacha = $data['demacha'];
  1959. $dat = $data['dat'];
  1960. foreach($demachas as $demach){
  1961. $demach->setSigneDRMEDICAL($user);
  1962. $demach->setDrapoDRMEDICAL(1);
  1963. $demach->setDrapoDRMEDICALrefu(0);
  1964. $demach->setDateDRMEDICAL(new \DateTime($dat));
  1965. }
  1966. $this->em->flush();
  1967. $user=$demacha->getUser();
  1968. $emailuser=$user->getEmail();
  1969. $num=$demacha->getNumDemandeAchat();
  1970. $nom=$user->getNom();
  1971. $prenom=$user->getPrenom();
  1972. $contenu="<html><head></head><body><b>Bonjour,
  1973. le responsable médical a validé la DA</b>,<br/>
  1974. http://www.intranet-mariestopesmali.org/web/gestionDemandeAchat
  1975. </body></html>";
  1976. // $this->Envoi($emailuser,$contenu);
  1977. return $this->redirect( $this->generateUrl('liste_demachat', array('id' => $id_achat)));
  1978. }
  1979. public function ajaxdrmedicalrefu(Request $request): Response
  1980. {
  1981. $data = $this->demandeAchatService->getDemachatSigneData($request);
  1982. $demachas = $data['demachas'];
  1983. $id_achat = $data['id_achat'];
  1984. $user = $data['user'];
  1985. $demacha = $data['demacha'];
  1986. $dat = $data['dat'];
  1987. foreach($demachas as $demach){
  1988. $demach->setSigneDRMEDICAL($user);
  1989. $demach->setDrapoDRMEDICAL(0);
  1990. $demach->setDrapoDRMEDICALrefu(1);
  1991. $demach->setDateDRMEDICAL(new \DateTime($dat));
  1992. }
  1993. $this->em->flush();
  1994. $user=$demacha->getUser();
  1995. $emailuser=$user->getEmail();
  1996. $num=$demacha->getNumDemandeAchat();
  1997. $nom=$user->getNom();
  1998. $prenom=$user->getPrenom();
  1999. $contenu="<html><head></head><body><b>Bonjour,
  2000. le responsable médical a validé la DA</b>,<br/>
  2001. http://www.intranet-mariestopesmali.org/web/gestionDemandeAchat
  2002. </body></html>";
  2003. // $this->Envoi($emailuser,$contenu);
  2004. return $this->redirect( $this->generateUrl('liste_demachat', array('id' => $id_achat)));
  2005. }
  2006. public function ajaxdraposuph(Request $request): Response
  2007. {
  2008. $data = $this->demandeAchatService->getDemachatSigneData($request);
  2009. $demachas = $data['demachas'];
  2010. $id_achat = $data['id_achat'];
  2011. $user = $data['user'];
  2012. $demacha = $data['demacha'];
  2013. $dat = $data['dat'];
  2014. foreach($demachas as $demach){
  2015. $demach->setSigneSUP($user);
  2016. $demach->setDrapoSup(1);
  2017. $demach->setDrapoSuprefu(0);
  2018. $demach->setDateSuph(new \DateTime($dat));}
  2019. $this->em->flush();
  2020. $user=$demacha->getUser();
  2021. $emailuser=$user->getEmail();
  2022. $num=$demacha->getNumDemandeAchat();
  2023. $nom=$user->getNom();
  2024. $prenom=$user->getPrenom();
  2025. $contenu="<html><head></head><body><b>Bonjour</b>,<br/>
  2026. le superieur hierarchique de Mrs/Mr $nom $prenom a approuv&eacute la demande d'achat N&deg$num .<br/><br/>
  2027. Suivez ce lien pour voir la demande:<br/>
  2028. http://www.intranet-mariestopesmali.org/web/gestionDemandeAchat
  2029. </body></html>";
  2030. $centrecout=$demacha->getCentreCout();
  2031. $centre = $this->em->getRepository(CentreCout::class)->findOneByLibele($centrecout);
  2032. $usecentres = $this->em->getRepository(UserCentre::class)->findByCentrecout($centre);
  2033. $usedp=null;
  2034. foreach ($usecentres as $usecentre)
  2035. {
  2036. if($usecentre->getUser()->hasRole('ROLE_DP'))
  2037. $usedp=$usecentre->getUser();
  2038. }
  2039. $email=$usedp->getEmail();
  2040. // $this->Envoi($email,$contenu);
  2041. // $this->Envoi($emailuser,$contenu);
  2042. return $this->redirect( $this->generateUrl('liste_demachat', array('id' => $id_achat)));
  2043. }
  2044. public function ajaxdraposuphrefu(Request $request): Response
  2045. {
  2046. $data = $this->demandeAchatService->getDemachatSigneData($request);
  2047. $demachas = $data['demachas'];
  2048. $id_achat = $data['id_achat'];
  2049. $user = $data['user'];
  2050. $demacha = $data['demacha'];
  2051. $dat = $data['dat'];
  2052. foreach($demachas as $demach){
  2053. $demach->setSigneSUP($user);
  2054. $demach->setDrapoSup(0);
  2055. $demach->setDrapoSuprefu(1);
  2056. $demach->setDateSuph(new \DateTime($dat));}
  2057. $this->em->flush();
  2058. $user=$demacha->getUser();
  2059. $emailuser=$user->getEmail();
  2060. $num=$demacha->getNumDemandeAchat();
  2061. $nom=$user->getNom();
  2062. $prenom=$user->getPrenom();
  2063. $contenu="<html><head></head><body><b>Bonjour</b>,<br/>
  2064. le superieur hierarchique de Mrs/Mr $nom $prenom n'a pas approuv&eacute la demande d'achat N&deg$num .<br/><br/>
  2065. Suivez ce lien pour voir la demande:<br/>
  2066. http://www.intranet-mariestopesmali.org/web/gestionDemandeAchat
  2067. </body></html>";
  2068. // $this->Envoi($emailuser,$contenu);
  2069. return $this->redirect( $this->generateUrl('liste_demachat', array('id' => $id_achat)));
  2070. }
  2071. public function ajaxdraporespreg(Request $request): Response
  2072. {
  2073. $data = $this->demandeAchatService->getDemachatSigneData($request);
  2074. $demachas = $data['demachas'];
  2075. $id_achat = $data['id_achat'];
  2076. $user = $data['user'];
  2077. $demacha = $data['demacha'];
  2078. $dat = $data['dat'];
  2079. foreach($demachas as $demach){
  2080. $demach->setSigneRespReg($user);
  2081. $demach->setDrapoRespReg(1);
  2082. $demach->setDrapoRespRegrefu(0);
  2083. $demach->setDateRespReg(new \DateTime($dat));
  2084. if($user->hasRole('ROLE_DP2') )
  2085. {
  2086. $demach->setSigneDP2($user);
  2087. $demach->setDrapoDP2(1);
  2088. $demach->setDrapoDPrefu2(0);
  2089. $demach->setDateDP2(new \DateTime($dat));
  2090. }
  2091. }
  2092. $this->em->flush();
  2093. $user=$demacha->getUser();
  2094. $emailuser=$user->getEmail();
  2095. $num=$demacha->getNumDemandeAchat();
  2096. $nom=$user->getNom();
  2097. $prenom=$user->getPrenom();
  2098. $contenu="<html><head></head><body><b>Bonjour</b>,
  2099. le responsable regionale a valid&eacute la DA<br/>
  2100. http://www.intranet-mariestopesmali.org/web/gestionDemandeAchat
  2101. </body></html>";
  2102. $centrecout=$demacha->getCentreCout();
  2103. $centre = $this->em->getRepository(CentreCout::class)->findOneByLibele($centrecout);
  2104. $usecentres = $this->em->getRepository(UserCentre::class)->findByCentrecout($centre);
  2105. $code= $usecentres[0]->getCode();
  2106. $usedp=null; $usefinance=null; $uselead=null;
  2107. if($code==13)
  2108. {
  2109. foreach ($usecentres as $usecentre)
  2110. {
  2111. if($usecentre->getUselead()->hasRole('ROLE_LEAD'))
  2112. $uselead=$usecentre->getUser();
  2113. $email=$uselead->getEmail();
  2114. //$this->Envoi($email,$contenu);
  2115. }
  2116. }
  2117. if($code==61)
  2118. {
  2119. foreach ($usecentres as $usecentre)
  2120. {
  2121. if($usecentre->getUser()->hasRole('ROLE_DP'))
  2122. $usedp=$usecentre->getUser();
  2123. $email=$usedp->getEmail();
  2124. //$this->Envoi($email,$contenu);
  2125. }
  2126. }
  2127. // $this->Envoi($emailuser,$contenu);
  2128. return $this->redirect( $this->generateUrl('liste_demachat', array('id' => $id_achat)));
  2129. }
  2130. public function ajaxdraporespregrefu(Request $request): Response
  2131. {
  2132. $data = $this->demandeAchatService->getDemachatSigneData($request);
  2133. $demachas = $data['demachas'];
  2134. $id_achat = $data['id_achat'];
  2135. $user = $data['user'];
  2136. $demacha = $data['demacha'];
  2137. $dat = $data['dat'];
  2138. foreach($demachas as $demach){
  2139. $demach->setSigneRespReg($user);
  2140. $demach->setDrapoRespReg(0);
  2141. $demach->setDrapoRespRegrefu(1);
  2142. $demach->setDateRespReg(new \DateTime($dat));
  2143. }
  2144. $this->em->flush();
  2145. $use=$demacha->getUser();
  2146. $emailuser=$use->getEmail();
  2147. $num=$demacha->getNumDemandeAchat();
  2148. $nom=$use->getNom();
  2149. $prenom=$use->getPrenom();
  2150. $contenu="<html><head></head><body><b>Bonjour</b>,<br/>
  2151. le responsable regional n'a pas approuv&eacute la demande d'achat N&deg$num .<br/><br/>
  2152. Suivez ce lien pour voir la demande:<br/>
  2153. http://www.intranet-mariestopesmali.org/web/gestionDemandeAchat
  2154. </body></html>";
  2155. // $this->Envoi($emailuser,$contenu);
  2156. return $this->redirect( $this->generateUrl('liste_demachat', array('id' => $id_achat)));
  2157. }
  2158. public function ajaxdrapolead(Request $request): Response
  2159. {
  2160. $data = $this->demandeAchatService->getDemachatSigneData($request);
  2161. $demachas = $data['demachas'];
  2162. $id_achat = $data['id_achat'];
  2163. $user = $data['user'];
  2164. $demacha = $data['demacha'];
  2165. $dat = $data['dat'];
  2166. if($user->hasRole('ROLE_LEAD1') )
  2167. {
  2168. foreach($demachas as $demach)
  2169. {
  2170. $demach->setSigneLead1($user);
  2171. $demach->setDrapoLead1(1);
  2172. $demach->setDrapoLeadrefu1(0);
  2173. $demach->setDateLead1(new \DateTime($dat));
  2174. }
  2175. $this->em->flush();
  2176. }
  2177. elseif($user->hasRole('ROLE_LEAD2') )
  2178. {
  2179. foreach($demachas as $demach)
  2180. {
  2181. $demach->setSigneLead2($user);
  2182. $demach->setDrapoLead2(1);
  2183. $demach->setDrapoLeadrefu2(0);
  2184. $demach->setDateLead2(new \DateTime($dat));
  2185. }
  2186. $this->em->flush();
  2187. }
  2188. elseif($user->hasRole('ROLE_LEAD3') )
  2189. {
  2190. foreach($demachas as $demach)
  2191. {
  2192. $demach->setSigneLead3($user);
  2193. $demach->setDrapoLead3(1);
  2194. $demach->setDrapoLeadrefu3(0);
  2195. $demach->setDateLead3(new \DateTime($dat));
  2196. }
  2197. $this->em->flush();
  2198. }
  2199. elseif($user->hasRole('ROLE_LEAD4') )
  2200. {
  2201. foreach($demachas as $demach)
  2202. {
  2203. $demach->setSigneLead4($user);
  2204. $demach->setDrapoLead4(1);
  2205. $demach->setDrapoLeadrefu4(0);
  2206. $demach->setDateLead4(new \DateTime($dat));
  2207. }
  2208. $this->em->flush();
  2209. }
  2210. elseif($user->hasRole('ROLE_LEAD5') )
  2211. {
  2212. foreach($demachas as $demach)
  2213. {
  2214. $demach->setSigneLead5($user);
  2215. $demach->setDrapoLead5(1);
  2216. $demach->setDrapoLeadrefu5(0);
  2217. $demach->setDateLead5(new \DateTime($dat));
  2218. }
  2219. $this->em->flush();
  2220. }
  2221. $user=$demacha->getUser();
  2222. $emailuser=$user->getEmail();
  2223. $num=$demacha->getNumDemandeAchat();
  2224. $nom=$user->getNom();
  2225. $prenom=$user->getPrenom();
  2226. $contenu="<html><head></head><body><b>Bonjour</b>,<br/>
  2227. le Channel Lead a approuv&eacute la demande d'achat N&deg$num .<br/><br/>
  2228. Suivez ce lien pour voir la demande:<br/>
  2229. http://www.intranet-mariestopesmali.org/web/gestionDemandeAchat
  2230. </body></html>";
  2231. $bailleur=$demacha->getNomProjet();
  2232. $baille = $this->em->getRepository(Bailleur::class)->findOneByLibele($bailleur);
  2233. $usebaille = $this->em->getRepository(UseBailleur::class)->findOneByBailleur($baille);
  2234. $email=$usebaille->getUser()->getEmail();
  2235. // $this->Envoi($email,$contenu);
  2236. // $this->Envoi($emailuser,$contenu);
  2237. return $this->redirect( $this->generateUrl('liste_demachat', array('id' => $id_achat)));
  2238. }
  2239. public function ajaxdrapoleadrefu(Request $request): Response
  2240. {
  2241. $data = $this->demandeAchatService->getDemachatSigneData($request);
  2242. $demachas = $data['demachas'];
  2243. $id_achat = $data['id_achat'];
  2244. $user = $data['user'];
  2245. $demacha = $data['demacha'];
  2246. $dat = $data['dat'];
  2247. $usecentres = $data['usecentres'];
  2248. if($user->hasRole('ROLE_LEAD1') )
  2249. {
  2250. foreach($demachas as $demach)
  2251. {
  2252. $demach->setSigneLead1($user);
  2253. $demach->setDrapoLead1(0);
  2254. $demach->setDrapoLeadrefu1(1);
  2255. $demach->setDateLead1(new \DateTime($dat));
  2256. foreach($usecentres as $usecentre)
  2257. {
  2258. if( $demach->getCostcenter()==$usecentre->getCentrecout())
  2259. $demach->setDrapoRejetLead(1);
  2260. }
  2261. }
  2262. $this->em->flush();
  2263. }
  2264. elseif($user->hasRole('ROLE_LEAD2') )
  2265. {
  2266. foreach($demachas as $demach)
  2267. {
  2268. $demach->setSigneLead2($user);
  2269. $demach->setDrapoLead2(0);
  2270. $demach->setDrapoLeadrefu2(1);
  2271. $demach->setDateLead2(new \DateTime($dat));
  2272. foreach($usecentres as $usecentre)
  2273. {
  2274. if( $demach->getCostcenter()==$usecentre->getCentrecout())
  2275. $demach->setDrapoRejetLead(1);
  2276. }
  2277. }
  2278. $this->em->flush();
  2279. }
  2280. elseif($user->hasRole('ROLE_LEAD3') )
  2281. {
  2282. foreach($demachas as $demach)
  2283. {
  2284. $demach->setSigneLead3($user);
  2285. $demach->setDrapoLead3(0);
  2286. $demach->setDrapoLeadrefu3(1);
  2287. $demach->setDateLead3(new \DateTime($dat));
  2288. foreach($usecentres as $usecentre)
  2289. {
  2290. if( $demach->getCostcenter()==$usecentre->getCentrecout())
  2291. $demach->setDrapoRejetLead(1);
  2292. }
  2293. }
  2294. $this->em->flush();
  2295. }
  2296. elseif($user->hasRole('ROLE_LEAD4') )
  2297. {
  2298. foreach($demachas as $demach)
  2299. {
  2300. $demach->setSigneLead4($user);
  2301. $demach->setDrapoLead4(0);
  2302. $demach->setDrapoLeadrefu4(1);
  2303. $demach->setDateLead4(new \DateTime($dat));
  2304. foreach($usecentres as $usecentre)
  2305. {
  2306. if( $demach->getCostcenter()==$usecentre->getCentrecout())
  2307. $demach->setDrapoRejetLead(1);
  2308. }
  2309. }
  2310. $this->em->flush();
  2311. }
  2312. elseif($user->hasRole('ROLE_LEAD5') )
  2313. {
  2314. foreach($demachas as $demach)
  2315. {
  2316. $demach->setSigneLead5($user);
  2317. $demach->setDrapoLead5(0);
  2318. $demach->setDrapoLeadrefu5(1);
  2319. $demach->setDateLead5(new \DateTime($dat));
  2320. foreach($usecentres as $usecentre)
  2321. {
  2322. if( $demach->getCostcenter()==$usecentre->getCentrecout())
  2323. $demach->setDrapoRejetLead(1);
  2324. }
  2325. }
  2326. $this->em->flush();
  2327. }
  2328. $user=$demacha->getUser();
  2329. $emailuser=$user->getEmail();
  2330. $num=$demacha->getNumDemandeAchat();
  2331. $nom=$user->getNom();
  2332. $prenom=$user->getPrenom();
  2333. $contenu="<html><head></head><body><b>Bonjour</b>,<br/>
  2334. lechannel lead n'a pas approuv&eacute la demande d'achat N&deg$num .<br/><br/>
  2335. Suivez ce lien pour voir la demande:<br/>
  2336. http://www.intranet-mariestopesmali.org/web/gestionDemandeAchat
  2337. </body></html>";
  2338. // $this->Envoi($emailuser,$contenu);
  2339. return $this->redirect( $this->generateUrl('liste_demachat', array('id' => $id_achat)));
  2340. }
  2341. public function ajaxdrapochefp(Request $request): Response
  2342. {
  2343. $data = $this->demandeAchatService->getDemachatSigneData($request);
  2344. $demachas = $data['demachas'];
  2345. $id_achat = $data['id_achat'];
  2346. $user = $data['user'];
  2347. $demacha = $data['demacha'];
  2348. $dat = $data['dat'];
  2349. $var=0;
  2350. if($demacha->getCostcenter()!=null)
  2351. {
  2352. foreach($demachas as $demach)
  2353. {
  2354. $usebail= $this->em->getRepository(UseBailleur::class)->findOneByBailleur($demach->getNombaille());
  2355. if($usebail!=null){
  2356. if($usebail->getUser()==$user)
  2357. {
  2358. if($demach->getBailleur()=="" || $demach->getProjet()=="" || $demach->getLigneBudget()=="")
  2359. $var=1;
  2360. }
  2361. }
  2362. }
  2363. }
  2364. if($var==1)
  2365. {
  2366. // Retourner la réponse JSON
  2367. return new JsonResponse(array('message' => 'veuillez renseigner les codes bailleurs,codes projets et lignes budgetaires !'));
  2368. }
  2369. elseif( $var==0){
  2370. // $iduser=$user->getId();
  2371. $total=0;
  2372. if($user->hasRole('ROLE_CHEFP1') )
  2373. {
  2374. foreach($demachas as $demach)
  2375. {
  2376. if($demach->getQuantAccorde()!=null)
  2377. $total=$demach->getQuantAccorde()*$demach->getPrixU()+$total;
  2378. else
  2379. $total=$demach->getQuantDemande()*$demach->getPrixU()+$total;
  2380. $demach->setSigneChefp1($user);
  2381. $demach->setDrapoChefp1(1);
  2382. $demach->setDrapoChefprefu1(0);
  2383. $demach->setDateChefp1(new \DateTime($dat));
  2384. /*if($user->hasRole('ROLE_RR') ){
  2385. $demach->setDrapoChefp6(1);
  2386. $demach->setDrapoChefprefu6(0);
  2387. $demach->setSigneChefp6($user);}*/
  2388. }
  2389. $this->em->flush();
  2390. }
  2391. if($user->hasRole('ROLE_CHEFP2') )
  2392. {
  2393. foreach($demachas as $demach)
  2394. {
  2395. if($demach->getQuantAccorde()!=null)
  2396. $total=$demach->getQuantAccorde()*$demach->getPrixU()+$total;
  2397. else
  2398. $total=$demach->getQuantDemande()*$demach->getPrixU()+$total;
  2399. $demach->setSigneChefp2($user);
  2400. $demach->setDrapoChefp2(1);
  2401. $demach->setDrapoChefprefu2(0);
  2402. $demach->setDateChefp2(new \DateTime($dat));
  2403. }
  2404. $this->em->flush();
  2405. }
  2406. if($user->hasRole('ROLE_CHEFP3') )
  2407. {
  2408. foreach($demachas as $demach)
  2409. {
  2410. $total=$demach->getQuantDemande()*$demach->getPrixU()+$total;
  2411. $demach->setSigneChefp3($user);
  2412. $demach->setDrapoChefp3(1);
  2413. $demach->setDrapoChefprefu3(0);
  2414. $demach->setDateChefp3(new \DateTime($dat));
  2415. /*if($user->hasRole('ROLE_RR') ){
  2416. $demach->setDrapoChefp6(1);
  2417. $demach->setDrapoChefprefu6(0);
  2418. $demach->setSigneChefp6($user);}*/
  2419. }
  2420. $this->em->flush();
  2421. }
  2422. if($user->hasRole('ROLE_CHEFP4') )
  2423. {
  2424. foreach($demachas as $demach)
  2425. {
  2426. $total=$demach->getQuantDemande()*$demach->getPrixU()+$total;
  2427. $demach->setSigneChefp4($user);
  2428. $demach->setDrapoChefp4(1);
  2429. $demach->setDrapoChefprefu4(0);
  2430. $demach->setDateChefp4(new \DateTime($dat));
  2431. /* if($user->hasRole('ROLE_RR') ){
  2432. $demach->setDrapoChefp6(1);
  2433. $demach->setDrapoChefprefu6(0);
  2434. $demach->setSigneChefp6($user);}*/
  2435. }
  2436. $this->em->flush();
  2437. }
  2438. if($user->hasRole('ROLE_CHEFP5') )
  2439. {
  2440. foreach($demachas as $demach)
  2441. {
  2442. if($demach->getQuantAccorde()!=null)
  2443. $total=$demach->getQuantAccorde()*$demach->getPrixU()+$total;
  2444. else
  2445. $total=$demach->getQuantDemande()*$demach->getPrixU()+$total;
  2446. $demach->setSigneChefp5($user);
  2447. $demach->setDrapoChefp5(1);
  2448. $demach->setDrapoChefprefu5(0);
  2449. $demach->setDateChefp5(new \DateTime($dat));
  2450. /* if($user->hasRole('ROLE_RR') ){
  2451. $demach->setDrapoChefp6(1);
  2452. $demach->setDrapoChefprefu6(0);
  2453. $demach->setSigneChefp6($user);}*/
  2454. }
  2455. $em->flush();
  2456. }
  2457. if($user->hasRole('ROLE_CHEFP6') )
  2458. {
  2459. foreach($demachas as $demach)
  2460. {
  2461. if($demach->getQuantAccorde()!=null)
  2462. $total=$demach->getQuantAccorde()*$demach->getPrixU()+$total;
  2463. else
  2464. $total=$demach->getQuantDemande()*$demach->getPrixU()+$total;
  2465. $demach->setSigneChefp6($user);
  2466. $demach->setDrapoChefp6(1);
  2467. $demach->setDrapoChefprefu6(0);
  2468. $demach->setDateChefp6(new \DateTime($dat));
  2469. }
  2470. $this->em->flush();
  2471. }
  2472. if($user->hasRole('ROLE_CHEFP7') )
  2473. {
  2474. foreach($demachas as $demach)
  2475. {
  2476. if($demach->getQuantAccorde()!=null)
  2477. $total=$demach->getQuantAccorde()*$demach->getPrixU()+$total;
  2478. else
  2479. $total=$demach->getQuantDemande()*$demach->getPrixU()+$total;
  2480. $demach->setSigneChefp7($user);
  2481. $demach->setDrapoChefp7(1);
  2482. $demach->setDrapoChefprefu7(0);
  2483. $demach->setDateChefp7(new \DateTime($dat));
  2484. }
  2485. $this->em->flush();
  2486. }
  2487. $use=$demacha->getUser();
  2488. $emailuser=$use->getEmail();
  2489. $num=$demacha->getNumDemandeAchat();
  2490. $nom=$use->getNom();
  2491. $prenom=$use->getPrenom();
  2492. $contenu="<html><head></head><body><b>Bonjour</b>,<br/>
  2493. le Chef de projet a approuv&eacute la demande d'achat N&deg$num .<br/><br/>
  2494. Suivez ce lien pour voir la demande:<br/>
  2495. http://www.intranet-mariestopesmali.org/web/gestionDemandeAchat
  2496. </body></html>";
  2497. if($demacha->getCostcenter()!=null){
  2498. $utils=$this->em->getRepository(User::class)->findAll();
  2499. $centrecout=$demacha->getCentreCout();
  2500. $centre = $this->em->getRepository(CentreCout::class)->findOneByLibele($centrecout);
  2501. $usecentres = $this->em->getRepository(UserCentre::class)->findByCentrecout($centre);
  2502. $code= $usecentres[0]->getCode();
  2503. $usedp=null; $usefinance=null;
  2504. if($code==13)
  2505. {
  2506. foreach ($usecentres as $usecentre)
  2507. {
  2508. if($usecentre->getUser()->hasRole('ROLE_DP'))
  2509. $usedp=$usecentre->getUser();
  2510. if($usedp!=null){
  2511. $email=$usedp->getEmail();
  2512. // $this->Envoi($email,$contenu);
  2513. }
  2514. }
  2515. }
  2516. elseif($code==61)
  2517. {
  2518. foreach ($utils as $util)
  2519. {
  2520. if($util->hasRole('ROLE_DSCSC2') and $total<2500000){
  2521. //$usefinance=$usecentre->getUser();
  2522. $email=$util->getEmail();
  2523. $this->Envoi($email,$contenu);}
  2524. if($util->hasRole('ROLE_DSCSC') and $total>2499999){
  2525. //$usefinance=$usecentre->getUser();
  2526. $email=$util->getEmail();
  2527. // $this->Envoi($email,$contenu);}
  2528. }
  2529. }
  2530. // $this->Envoi($emailuser,$contenu);
  2531. }
  2532. }
  2533. else{
  2534. foreach ($utils as $util)
  2535. {
  2536. if($util->hasRole('ROLE_RACHAT'))
  2537. {
  2538. $email=$util->getEmail();
  2539. // $this->Envoi($email,$contenu);
  2540. }
  2541. }
  2542. }
  2543. return $this->redirect( $this->generateUrl('liste_demachat', array('id' => $id_achat)));
  2544. }
  2545. }
  2546. //formulaire de confirmation du rejet d'une ligne du DA par un chef de projet
  2547. //formulaire de confirmation du rejet du DA par un chef de projet
  2548. public function rairefchefp($id): Response
  2549. {
  2550. $demach =$this->em->getRepository(demAchat::class)->find($id);
  2551. $form = $this->createFormBuilder($demach)
  2552. ->add('id')
  2553. ->add('raisonRefu')
  2554. ->getForm();
  2555. return $this->render('DemandeAchatVue/raisonrefu.html.twig'
  2556. ,['id_dem' => $id,'form' => $form->createView(),]
  2557. );
  2558. }
  2559. //rejet du DA par un chef de projet,
  2560. public function ajaxraisonrefu(Request $request): Response
  2561. {
  2562. $user = $this->security->getUser();
  2563. $id = $request->request->get('id');
  2564. $raisonRefu = $request->request->get('raison');
  2565. $demacha=$this->em->getRepository(demAchat::class)->find($id);
  2566. $dat=date('Y-m-d H:i:s');
  2567. $num= $demacha->getNumDemandeAchat();
  2568. $demachas=$this->em->getRepository(demAchat::class)->Selectnumda($num);
  2569. $use=$demacha->getUser();
  2570. $emailuser=$use->getEmail();
  2571. $num=$demacha->getNumDemandeAchat();
  2572. $nom=$use->getNom();
  2573. $prenom=$use->getPrenom();
  2574. if($user->hasRole('ROLE_CHEFP1') )
  2575. {
  2576. foreach($demachas as $demach)
  2577. {
  2578. $demach->setSigneChefp1($user);
  2579. $demach->setDrapoChefp1(0);
  2580. $demach->setDrapoChefprefu1(1);
  2581. $demach->setDateChefp1(new \DateTime($dat));
  2582. $demach->setRaisonRefu($raisonRefu);
  2583. }
  2584. $this->em->flush();
  2585. }
  2586. elseif($user->hasRole('ROLE_CHEFP2') )
  2587. {
  2588. foreach($demachas as $demach)
  2589. {
  2590. $demach->setSigneChefp2($user);
  2591. $demach->setDrapoChefp2(0);
  2592. $demach->setDrapoChefprefu2(1);
  2593. $demach->setRaisonRefu($raisonRefu);
  2594. $demach->setDateChefp2(new \DateTime($dat));
  2595. }
  2596. $this->em->flush();
  2597. }
  2598. elseif($user->hasRole('ROLE_CHEFP3') )
  2599. {
  2600. foreach($demachas as $demach)
  2601. {
  2602. $demach->setSigneChefp3($user);
  2603. $demach->setDrapoChefp3(0);
  2604. $demach->setDrapoChefprefu3(1);
  2605. $demach->setRaisonRefu($raisonRefu);
  2606. $demach->setDateChefp3(new \DateTime($dat));
  2607. }
  2608. $this->em->flush();
  2609. }
  2610. elseif($user->hasRole('ROLE_CHEFP4') )
  2611. {
  2612. foreach($demachas as $demach)
  2613. {
  2614. $demach->setSigneChefp4($user);
  2615. $demach->setDrapoChefp4(0);
  2616. $demach->setDrapoChefprefu4(1);
  2617. $demach->setRaisonRefu($raisonRefu);
  2618. $demach->setDateChefp4(new \DateTime($dat));
  2619. }
  2620. $this->em->flush();
  2621. }
  2622. elseif($user->hasRole('ROLE_CHEFP5') )
  2623. {
  2624. foreach($demachas as $demach)
  2625. {
  2626. $demach->setSigneChefp5($user);
  2627. $demach->setDrapoChefp5(0);
  2628. $demach->setRaisonRefu($raisonRefu);
  2629. $demach->setDrapoChefprefu5(1);
  2630. $demach->setDateChefp5(new \DateTime($dat));
  2631. }
  2632. $this->em->flush();
  2633. }
  2634. elseif($user->hasRole('ROLE_CHEFP6') )
  2635. {
  2636. foreach($demachas as $demach)
  2637. {
  2638. $demach->setSigneChefp6($user);
  2639. $demach->setDrapoChefp6(0);
  2640. $demach->setRaisonRefu($raisonRefu);
  2641. $demach->setDrapoChefprefu6(1);
  2642. $demach->setDateChefp6(new \DateTime($dat));
  2643. }
  2644. $this->em->flush();
  2645. }
  2646. elseif($user->hasRole('ROLE_CHEFP7') )
  2647. {
  2648. foreach($demachas as $demach)
  2649. {
  2650. $demach->setSigneChefp7($user);
  2651. $demach->setDrapoChefp7(0);
  2652. $demach->setRaisonRefu($raisonRefu);
  2653. $demach->setDrapoChefprefu7(1);
  2654. $demach->setDateChefp7(new \DateTime($dat));
  2655. }
  2656. $this->em->flush();
  2657. }
  2658. $contenu="<html><head></head><body><b>Bonjour</b>,<br/>
  2659. le Chef de projet n'a pas approuv&eacute la demande d'achat N&deg$num .<br/><br/>
  2660. Suivez ce lien pour voir la demande:<br/>
  2661. http://www.intranet-mariestopesmali.org/web/gestionDemandeAchat
  2662. </body></html>";
  2663. //$this->Envoi($emailuser,$contenu);
  2664. return $this->redirect( $this->generateUrl('liste_demachat', array('id' => $id)));
  2665. }
  2666. public function articleraisonrefu($id)
  2667. {
  2668. $demach =$this->em->getRepository(demAchat::class)->find($id);
  2669. $form = $this->createFormBuilder($demach)
  2670. ->add('id')
  2671. ->add('raisonRefu')
  2672. ->getForm();
  2673. return $this->render('DemandeAchatVue/articleraisonrefu.html.twig'
  2674. ,['id_dem' => $id,'form' => $form->createView(),]
  2675. );
  2676. }
  2677. public function ajaxarticlerefu(Request $request): Response
  2678. {
  2679. $user = $this->security->getUser();
  2680. $id = $request->request->get('id');
  2681. $raisonRefu = $request->request->get('raison');
  2682. $demacha=$this->em->getRepository(demAchat::class)->find($id);
  2683. $num= $demacha->getNumDemandeAchat();
  2684. $dat=date('Y-m-d H:i:s');
  2685. $demacha->setRaisonRefu($raisonRefu);
  2686. $demacha->setSigneChef($user);
  2687. $demacha->setDrapoRejetchef(1);
  2688. $this->em->flush();
  2689. $demachas=$this->em->getRepository(demAchat::class)->Selectnumda($num);
  2690. $idachat= $demachas[0]->getId();
  2691. $contenu="<html><head></head><body><b>Bonjour</b>,<br/>
  2692. le Chef de projet n'a pas approuv&eacute la demande d'achat N&deg$num .<br/><br/>
  2693. Suivez ce lien pour voir la demande:<br/>
  2694. http://www.intranet-mariestopesmali.org/web/gestionDemandeAchat
  2695. </body></html>";
  2696. // $this->Envoi($emailuser,$contenu);
  2697. return $this->redirect( $this->generateUrl('liste_demachat', array('id' => $idachat)));
  2698. }
  2699. public function moduleachat(): Response
  2700. {
  2701. $id = $request->request->get('id');
  2702. $data = $this->demandeAchatService ->getdaParUser($id); // ton return actuel
  2703. return new JsonResponse($data);
  2704. }
  2705. public function uploadPieceJointe(
  2706. Request $request,
  2707. DemAchat $demAchat,
  2708. EntityManagerInterface $em
  2709. ): JsonResponse {
  2710. // ✅ Défini UNE SEULE FOIS ici
  2711. $uploadDir = $this->getParameter('kernel.project_dir') . '/public/uploads/dem_achat';
  2712. $file = $request->files->get('pieceJointe');
  2713. if (!$file) {
  2714. return $this->json(['success' => false, 'message' => 'Aucun fichier reçu.'], 400);
  2715. }
  2716. $maxSize = 5 * 1024 * 1024;
  2717. if ($file->getSize() > $maxSize) {
  2718. return $this->json(['success' => false, 'message' => 'Fichier trop volumineux. Taille max : 5 Mo.'], 422);
  2719. }
  2720. $allowedExtensions = ['pdf', 'doc', 'docx', 'xls', 'xlsx', 'png', 'jpeg', 'txt'];
  2721. $extension = strtolower($file->getClientOriginalExtension());
  2722. if (!in_array($extension, $allowedExtensions)) {
  2723. return $this->json(['success' => false, 'message' => 'Type de fichier non autorisé.'], 422);
  2724. }
  2725. $newFilename = uniqid('pj_') . '.' . $extension;
  2726. // Créer le dossier s'il n'existe pas
  2727. if (!is_dir($uploadDir)) {
  2728. mkdir($uploadDir, 0777, true);
  2729. }
  2730. // Supprimer l'ancien fichier si existant
  2731. if ($demAchat->getPieceJointe()) {
  2732. $oldFile = $uploadDir . '/' . $demAchat->getPieceJointe();
  2733. if (file_exists($oldFile)) unlink($oldFile);
  2734. }
  2735. try {
  2736. $file->move($uploadDir, $newFilename);
  2737. } catch (\Exception $e) {
  2738. return $this->json(['success' => false, 'message' => 'Erreur lors de l\'upload : ' . $e->getMessage()], 500);
  2739. }
  2740. $demAchat->setPieceJointe($newFilename);
  2741. $em->flush();
  2742. return $this->json([
  2743. 'success' => true,
  2744. 'message' => 'Fichier uploadé avec succès.',
  2745. 'filename' => $newFilename,
  2746. 'downloadUrl' => '/uploads/dem_achat/' . $newFilename,
  2747. ]);
  2748. }
  2749. public function ajaxdrapodp(Request $request): Response
  2750. {
  2751. $data = $this->demandeAchatService->getDemachatSigneData($request);
  2752. $demachas = $data['demachas'];
  2753. $id_achat = $data['id_achat'];
  2754. $use = $data['user'];
  2755. $demacha = $data['demacha'];
  2756. $dat = $data['dat'];
  2757. // $iduser=$user->getId();
  2758. $total=0;
  2759. $totalprix=0;
  2760. if($use->hasRole('ROLE_DP1') )
  2761. {
  2762. foreach($demachas as $demach){
  2763. $demach->setSigneDP1($use);
  2764. $demach->setDrapoDP1(1);
  2765. $demach->setDrapoDPrefu1(0);
  2766. $demach->setDateDP1(new \DateTime($dat));
  2767. if($demach->getQuantAccorde() != null)
  2768. $totalprix=$totalprix+($demach->getPrixU()*$demach->getQuantAccorde());
  2769. else
  2770. $totalprix=$totalprix+($demach->getPrixU()*$demach->getQuantDemande());
  2771. $this->em->persist($demach);}
  2772. $this->em->flush();
  2773. }
  2774. elseif($use->hasRole('ROLE_DP2') )
  2775. {
  2776. foreach($demachas as $demach){
  2777. $demach->setSigneDP2($use);
  2778. $demach->setDrapoDP2(1);
  2779. $demach->setDrapoDPrefu2(0);
  2780. $demach->setDateDP2(new \DateTime($dat));
  2781. if($demach->getQuantAccorde() != null)
  2782. $totalprix=$totalprix+($demach->getPrixU()*$demach->getQuantAccorde());
  2783. else
  2784. $totalprix=$totalprix+($demach->getPrixU()*$demach->getQuantDemande());
  2785. $this->em->persist($demach);}
  2786. $this->em->flush();
  2787. }
  2788. elseif($use->hasRole('ROLE_DP3') )
  2789. {
  2790. foreach($demachas as $demach){
  2791. $demach->setSigneDP3($use);
  2792. $demach->setDrapoDP3(1);
  2793. $demach->setDrapoDPrefu3(0);
  2794. $demach->setDateDP3(new \DateTime($dat));
  2795. if($demach->getQuantAccorde() != null)
  2796. $totalprix=$totalprix+($demach->getPrixU()*$demach->getQuantAccorde());
  2797. else
  2798. $totalprix=$totalprix+($demach->getPrixU()*$demach->getQuantDemande());
  2799. $this->em->persist($demach);}
  2800. $this->em->flush();
  2801. }
  2802. elseif($use->hasRole('ROLE_DP4') )
  2803. {
  2804. foreach($demachas as $demach){
  2805. $demach->setSigneDP4($use);
  2806. $demach->setDrapoDP4(1);
  2807. $demach->setDrapoDPrefu4(0);
  2808. $demach->setDateDP4(new \DateTime($dat));
  2809. if($demach->getQuantAccorde() != null)
  2810. $totalprix=$totalprix+($demach->getPrixU()*$demach->getQuantAccorde());
  2811. else
  2812. $totalprix=$totalprix+($demach->getPrixU()*$demach->getQuantDemande());
  2813. $this->em->persist($demach);}
  2814. $this->em->flush();
  2815. }
  2816. elseif($use->hasRole('ROLE_DP5') )
  2817. {
  2818. foreach($demachas as $demach){
  2819. $demach->setSigneDP5($use);
  2820. $demach->setDrapoDP5(1);
  2821. $demach->setDrapoDPrefu5(0);
  2822. $demach->setDateDP5(new \DateTime($dat));
  2823. if($demach->getQuantAccorde() != null)
  2824. $totalprix=$totalprix+($demach->getPrixU()*$demach->getQuantAccorde());
  2825. else
  2826. $totalprix=$totalprix+($demach->getPrixU()*$demach->getQuantDemande());
  2827. $this->em->persist($demach);}
  2828. $this->em->flush();
  2829. }
  2830. elseif($use->hasRole('ROLE_DP6') )
  2831. {
  2832. foreach($demachas as $demach){
  2833. $demach->setSigneDP6($use);
  2834. $demach->setDrapoDP6(1);
  2835. $demach->setDrapoDPrefu6(0);
  2836. $demach->setDateDP6(new \DateTime($dat));
  2837. if($demach->getQuantAccorde() != null)
  2838. $totalprix=$totalprix+($demach->getPrixU()*$demach->getQuantAccorde());
  2839. else
  2840. $totalprix=$totalprix+($demach->getPrixU()*$demach->getQuantDemande());
  2841. $this->em->persist($demach);}
  2842. $this->em->flush();
  2843. }
  2844. elseif($use->hasRole('ROLE_DP7') )
  2845. {
  2846. foreach($demachas as $demach){
  2847. $demach->setSigneDP7($use);
  2848. $demach->setDrapoDP7(1);
  2849. $demach->setDrapoDPrefu7(0);
  2850. $demach->setDateDP7(new \DateTime($dat));
  2851. if($demach->getQuantAccorde() != null)
  2852. $totalprix=$totalprix+($demach->getPrixU()*$demach->getQuantAccorde());
  2853. else
  2854. $totalprix=$totalprix+($demach->getPrixU()*$demach->getQuantDemande());
  2855. $this->em->persist($demach);}
  2856. $this->em->flush();
  2857. }
  2858. elseif($use->hasRole('ROLE_DP8') )
  2859. {
  2860. foreach($demachas as $demach){
  2861. $demach->setSigneDP8($use);
  2862. $demach->setDrapoDP8(1);
  2863. $demach->setDrapoDPrefu8(0);
  2864. $demach->setDateDP8(new \DateTime($dat));
  2865. if($demach->getQuantAccorde() != null)
  2866. $totalprix=$totalprix+($demach->getPrixU()*$demach->getQuantAccorde());
  2867. else
  2868. $totalprix=$totalprix+($demach->getPrixU()*$demach->getQuantDemande());
  2869. $this->em->persist($demach);}
  2870. $this->em->flush();
  2871. }
  2872. /*$user=$demacha->getUser();
  2873. $emailuser=$user->getEmail();
  2874. $num=$demacha->getNumDemandeAchat();
  2875. $nom=$user->getNom();
  2876. $suphemail=$user->getSupH()->getEmail();
  2877. $prenom=$user->getPrenom();
  2878. $contenu="<html><head></head><body><b>Bonjour</b>,<br/>
  2879. le Directeur des Département a approuv&eacute la demande d'achat N&deg$num de Mrs/Mr $nom $prenom<br/><br/>
  2880. Suivez ce lien pour voir la demande:<br/>
  2881. http://www.intranet-mariestopesmali.org/web/gestionDemandeAchat
  2882. </body></html>";
  2883. $utils=$em->getRepository('mstopeUserBundle:User')->findAll();
  2884. $centrecout=$demacha->getCentreCout();
  2885. $nomProjet=$demacha->getNomProjet();
  2886. $baille = $em->getRepository('mstopeIntranetBundle:Bailleur')->findOneByLibele($nomProjet);
  2887. $bailleur = $em->getRepository('mstopeIntranetBundle:UseBailleur')->findOneByBailleur($baille);
  2888. $centre = $em->getRepository('mstopeIntranetBundle:CentreCout')->findOneByLibele($centrecout);
  2889. $usecentres = $em->getRepository('mstopeIntranetBundle:UserCentre')->findByCentrecout($centre);
  2890. $code= $usecentres[0]->getCode();
  2891. $usedp=null; $usefinance=null;
  2892. if($code==13)
  2893. {
  2894. foreach ($utils as $util)
  2895. {
  2896. if($util->hasRole('ROLE_DSCSC2') and $totalprix < 2500000)
  2897. {
  2898. $email=$util->getEmail();
  2899. //$this->Envoi($email,$contenu);
  2900. }
  2901. if($util->hasRole('ROLE_DSCSC') and $totalprix >2499999)
  2902. {
  2903. $email=$util->getEmail();
  2904. // $this->Envoi($email,$contenu);
  2905. }
  2906. }
  2907. }
  2908. if($code==61)
  2909. {
  2910. if($bailleur!=null){
  2911. $chefprojet=$bailleur->getUser();
  2912. $email=$chefprojet->getEmail();
  2913. // $this->Envoi($email,$contenu);
  2914. }
  2915. }
  2916. */
  2917. // $this->Envoi($emailuser,$contenu);
  2918. return $this->redirect( $this->generateUrl('liste_demachat', array('id' => $id_achat)));
  2919. }
  2920. public function ajaxdrapodprefu(Request $request): Response
  2921. {
  2922. $data = $this->demandeAchatService->getDemachatSigneData($request);
  2923. $demachas = $data['demachas'];
  2924. $id_achat = $data['id_achat'];
  2925. $user = $data['user'];
  2926. $demacha = $data['demacha'];
  2927. $dat = $data['dat'];
  2928. // $iduser=$user->getId();
  2929. $total=0;
  2930. $totalprix=0;
  2931. if($user->hasRole('ROLE_DP1') )
  2932. {
  2933. foreach($demachas as $demach){
  2934. $demach->setSigneDP1($user);
  2935. $demach->setDrapoDP1(0);
  2936. $demach->setDrapoDPrefu1(1);
  2937. $demach->setDateDP1(new \DateTime($dat));
  2938. $this->em->persist($demach);}
  2939. $this->em->flush();
  2940. }
  2941. elseif($user->hasRole('ROLE_DP2') )
  2942. {
  2943. foreach($demachas as $demach){
  2944. $demach->setSigneDP2($user);
  2945. $demach->setDrapoDP2(0);
  2946. $demach->setDrapoDPrefu2(1);
  2947. $demach->setDateDP2(new \DateTime($dat));
  2948. $this->em->persist($demach);}
  2949. $this->em->flush();
  2950. }
  2951. elseif($user->hasRole('ROLE_DP3') )
  2952. {
  2953. foreach($demachas as $demach){
  2954. $demach->setSigneDP3($user);
  2955. $demach->setDrapoDP3(0);
  2956. $demach->setDrapoDPrefu3(1);
  2957. $demach->setDateDP3(new \DateTime($dat));
  2958. $this->em->persist($demach);}
  2959. $this->em->flush();
  2960. }
  2961. elseif($user->hasRole('ROLE_DP4') )
  2962. {
  2963. foreach($demachas as $demach){
  2964. $demach->setSigneDP4($use);
  2965. $demach->setDrapoDP4(0);
  2966. $demach->setDrapoDPrefu4(1);
  2967. $demach->setDateDP4(new \DateTime($dat));
  2968. $this->em->persist($demach);}
  2969. $this->em->flush();
  2970. }
  2971. elseif($user->hasRole('ROLE_DP5') )
  2972. {
  2973. foreach($demachas as $demach){
  2974. $demach->setSigneDP5($user);
  2975. $demach->setDrapoDP5(0);
  2976. $demach->setDrapoDPrefu5(1);
  2977. $demach->setDateDP5(new \DateTime($dat));
  2978. $this->em->persist($demach);}
  2979. $this->em->flush();
  2980. }
  2981. elseif($user->hasRole('ROLE_DP6') )
  2982. {
  2983. foreach($demachas as $demach){
  2984. $demach->setSigneDP6($user);
  2985. $demach->setDrapoDP6(0);
  2986. $demach->setDrapoDPrefu6(1);
  2987. $demach->setDateDP6(new \DateTime($dat));
  2988. $this->em->persist($demach);}
  2989. $this->em->flush();
  2990. }
  2991. elseif($user->hasRole('ROLE_DP7') )
  2992. {
  2993. foreach($demachas as $demach){
  2994. $demach->setSigneDP7($user);
  2995. $demach->setDrapoDP7(0);
  2996. $demach->setDrapoDPrefu7(1);
  2997. $demach->setDateDP7(new \DateTime($dat));
  2998. $this->em->persist($demach);}
  2999. $this->em->flush();
  3000. }
  3001. elseif($user->hasRole('ROLE_DP8') )
  3002. {
  3003. foreach($demachas as $demach){
  3004. $demach->setSigneDP8($user);
  3005. $demach->setDrapoDP8(0);
  3006. $demach->setDrapoDPrefu8(1);
  3007. $demach->setDateDP8(new \DateTime($dat));
  3008. $this->em->persist($demach);}
  3009. $this->em->flush();
  3010. }
  3011. /* $user=$demacha->getUser();
  3012. $emailuser=$user->getEmail();
  3013. $num=$demacha->getNumDemandeAchat();
  3014. $nom=$user->getNom();
  3015. $suphemail=$user->getSupH()->getEmail();
  3016. $prenom=$user->getPrenom();
  3017. $contenu="<html><head></head><body><b>Bonjour</b>,<br/>
  3018. le Directeur de Département n'a pas approuv&eacute la demande d'achat N&deg$num
  3019. de Mrs/Mr $nom $prenom<br/><br/>
  3020. Suivez ce lien pour voir la demande:<br/>
  3021. </body></html>";*/
  3022. //$this->Envoi($suphemail,$contenu);
  3023. //$this->Envoi($emailuser,$contenu);
  3024. return $this->redirect( $this->generateUrl('liste_demachat', array('id' => $id_achat)));
  3025. }
  3026. public function ajaxdrapodscsc(Request $request): Response
  3027. {
  3028. $data = $this->demandeAchatService->getDemachatSigneData($request);
  3029. $demachas = $data['demachas'];
  3030. $id_achat = $data['id_achat'];
  3031. $user = $data['user'];
  3032. $demacha = $data['demacha'];
  3033. $dat = $data['dat'];
  3034. $totalprix=0;
  3035. $dat=date('Y-m-d H:i:s');
  3036. foreach ($demachas as $demach) {
  3037. $demach->setSigneDF($user);
  3038. $demach->setDrapoDSCSC(1);
  3039. $demach->setDrapoDSCSCrefu(0);
  3040. $demach->setDateDSCSC(new \DateTime($dat));
  3041. if ($demach->getMontant() < 5000000) {
  3042. $demach->setDrapoValide(1);
  3043. $this->em->persist($demach);
  3044. $this->em->flush();
  3045. // ── Consommer le budget ───────────────────────────────────────
  3046. $this->planBudgetService->consommerBudget($demach);
  3047. } else {
  3048. $this->em->persist($demach);
  3049. }
  3050. }
  3051. $this->em->flush();
  3052. return $this->redirect( $this->generateUrl('liste_demachat', array('id' => $id_achat)));
  3053. }
  3054. public function ajaxdrapodscscrefu(Request $request): Response
  3055. {
  3056. $data = $this->demandeAchatService->getDemachatSigneData($request);
  3057. $demachas = $data['demachas'];
  3058. $id_achat = $data['id_achat'];
  3059. $user = $data['user'];
  3060. $demacha = $data['demacha'];
  3061. $dat = $data['dat'];
  3062. $totalprix=0;
  3063. $dat=date('Y-m-d H:i:s');
  3064. foreach($demachas as $demach){
  3065. $demach->setSigneDF($user);
  3066. $demach->setDrapoDSCSC(0);
  3067. $demach->setDrapoDSCSCrefu(1);
  3068. $demach->setDateDSCSC(new \DateTime($dat));
  3069. $this->em->persist($demach);}
  3070. $this->em->flush();
  3071. /* $user=$demacha->getUser();
  3072. $emailuser=$user->getEmail();
  3073. $num=$demacha->getNumDemandeAchat();
  3074. $nom=$user->getNom();
  3075. $suphemail=$user->getSupH()->getEmail();
  3076. $prenom=$user->getPrenom();
  3077. $contenu="<html><head></head><body><b>Bonjour</b>,<br/>
  3078. la Finance n'a pas approuv&eacute la demande d'achat N&deg$num de Mrs/Mr $nom $prenom<br/><br/>
  3079. Suivez ce lien pour voir la demande:<br/>
  3080. </body></html>";
  3081. $users=$em->getRepository('mstopeUserBundle:User')->findAll();
  3082. foreach ($users as $use)
  3083. {
  3084. if($use->hasRole('ROLE_RR')){
  3085. //if($use->hasRole('ROLE_ADMIN')){
  3086. $emaildest=$use->getEmail();
  3087. $this->Envoi($emaildest,$contenu);
  3088. }
  3089. }
  3090. $this->Envoi($suphemail,$contenu);
  3091. $this->Envoi($emailuser,$contenu);*/
  3092. return $this->redirect( $this->generateUrl('liste_demachat', array('id' => $id_achat)));
  3093. }
  3094. public function ajaxdraporr(Request $request): Response
  3095. {
  3096. $data = $this->demandeAchatService->getDemachatSigneData($request);
  3097. $demachas = $data['demachas'];
  3098. $id_achat = $data['id_achat'];
  3099. $user = $data['user'];
  3100. $demacha = $data['demacha'];
  3101. $dat = $data['dat'];
  3102. $totalprix=0;
  3103. $dat=date('Y-m-d H:i:s');
  3104. foreach ($demachas as $demacha) {
  3105. $demacha->setSigneRR($user);
  3106. $demacha->setDrapoRR(1);
  3107. $demacha->setDrapoRRrefu(0);
  3108. $demacha->setDrapoImp(1);
  3109. $demacha->setDrapoValide(1);
  3110. $demacha->setDateRR(new \DateTime($dat));
  3111. $this->em->persist($demacha);
  3112. $this->em->flush();
  3113. // ── Consommer le budget ───────────────────────────────────────────
  3114. $this->planBudgetService->consommerBudget($demacha);
  3115. }
  3116. $this->em->flush();$this->em->flush();
  3117. return $this->redirect( $this->generateUrl('liste_demachat', array('id' => $id_achat)));
  3118. }
  3119. public function ajaxdraporrrefu(Request $request): Response
  3120. {
  3121. $data = $this->demandeAchatService->getDemachatSigneData($request);
  3122. $demachas = $data['demachas'];
  3123. $id_achat = $data['id_achat'];
  3124. $user = $data['user'];
  3125. $demacha = $data['demacha'];
  3126. $dat = $data['dat'];
  3127. foreach($demachas as $demacha){
  3128. $demacha->setSigneRR($user);
  3129. $demacha->setDrapoRR(0);
  3130. $demacha->setDrapoRRrefu(1);
  3131. $demacha->setDateRR(new \DateTime($dat));
  3132. //$demacha->setDrapoRR(0);
  3133. //$demacha->setDrapoRRrefu(1);
  3134. $this->em->persist($demacha);}
  3135. $this->em->flush();
  3136. /*
  3137. $user=$demacha->getUser();
  3138. $emailuser=$user->getEmail();
  3139. $num=$demacha->getNumDemandeAchat();
  3140. $nom=$user->getNom();
  3141. $prenom=$user->getPrenom();
  3142. $contenu="<html><head></head><body><b>Bonjour</b>,<br/>
  3143. le Repr&eacutesentant R&eacutesident n'a pas approuv&eacute la demande d'achat N&deg$num
  3144. de Mrs/Mr $nom $prenom<br/>
  3145. <br/>
  3146. Suivez ce lien pour voir la demande:<br/>
  3147. </body></html>";
  3148. $users=$em->getRepository('mstopeUserBundle:User')->findAll();
  3149. foreach ($users as $use)
  3150. {
  3151. if($use->hasRole('ROLE_ADMIN')){
  3152. //if($use->hasRole('ROLE_ADMIN')){
  3153. $emaildest=$use->getEmail();
  3154. $this->Envoi($emaildest,$contenu);
  3155. }
  3156. }
  3157. // $this->Envoi($suphemail,$contenu);
  3158. $this->Envoi($emailuser,$contenu);*/
  3159. return $this->redirect( $this->generateUrl('liste_demachat', array('id' => $id_achat)));
  3160. }
  3161. public function ajaxlistnum4( Request $request): JsonResponse
  3162. {
  3163. // Tableau de réponse
  3164. $listnum4 = [];
  3165. // Récupérer l'id envoyé
  3166. $id = $request->request->get('id');
  3167. // Récupérer l'utilisateur
  3168. $user = $this->em->getRepository(User::class)->find($id);
  3169. // Récupérer les demandes d'achat
  3170. $dems = $this->em->getRepository(demAchat::class) ->SelectListdemachat($user);
  3171. // Valeur par défaut
  3172. $listnum4[0] = 'choisir';
  3173. // Remplir le tableau
  3174. foreach ($dems as $dem) {
  3175. $listnum4[$dem->getId()] = $dem->getNumDemandeAchat();
  3176. }
  3177. // Retour JSON
  3178. return new JsonResponse($listnum4);
  3179. }
  3180. public function ajaxlistnum6( Request $request): JsonResponse
  3181. {
  3182. // Tableau de réponse
  3183. $listnum6 = [];
  3184. $dems=array();
  3185. // Récupérer l'id envoyé
  3186. $id = $request->request->get('id');
  3187. // Récupérer l'utilisateur
  3188. $useb = $this->em->getRepository(UseBailleur::class)->find($id);
  3189. $bail=$useb->getBailleur();
  3190. // Récupérer les demandes d'achat
  3191. $dems = $this->em->getRepository(demAchat::class) ->listDemachatBail($bail);
  3192. // Valeur par défaut
  3193. $listnum6[0] = 'choisir';
  3194. // Remplir le tableau
  3195. foreach ($dems as $dem) {
  3196. $listnum6[$dem->getId()] = $dem->getNumDemandeAchat();
  3197. }
  3198. // Retour JSON
  3199. return new JsonResponse($listnum6);
  3200. }
  3201. public function ajaxmodifcontracadre($id_dem)
  3202. {
  3203. $demac = $this->em->getRepository(demAchat::class)->find($id_dem);
  3204. // ============================
  3205. // Contrats compatibles
  3206. // ============================
  3207. $contratsDisponibles = [];
  3208. $categorieCatalogue =
  3209. $demac->getCatalogue()?->getCategorycatalogue();
  3210. if ($categorieCatalogue) {
  3211. foreach ( $categorieCatalogue->getCategoriesMarche()as $categorieMarche) {
  3212. $v=0;
  3213. $contrats = $this->em
  3214. ->getRepository(ContratCadre::class)
  3215. ->createQueryBuilder('cc')
  3216. ->where('cc.categorieMarche = :cat')
  3217. ->andWhere('cc.actif = true')
  3218. ->setParameter('cat', $categorieMarche)
  3219. ->orderBy('cc.reference', 'ASC')
  3220. ->getQuery()
  3221. ->getResult();
  3222. foreach ($contrats as $cc) {
  3223. $contratsDisponibles[$cc->getId()] = $cc;
  3224. }
  3225. }
  3226. }
  3227. $contratsDisponibles = array_values($contratsDisponibles);
  3228. // ============================
  3229. // Formulaire
  3230. // ============================
  3231. $form = $this->createFormBuilder($demac)
  3232. ->add('id', HiddenType::class)
  3233. ->add('contratCadre', EntityType::class, [
  3234. 'class' => ContratCadre::class,
  3235. 'choices' => $contratsDisponibles,
  3236. 'choice_label' => function ($cc) {
  3237. return sprintf(
  3238. '%s - %s',
  3239. $cc->getReference(),
  3240. $cc->getFournisseur()?->getRaisonSociale()
  3241. );
  3242. },
  3243. 'placeholder' => 'Aucun contrat-cadre',
  3244. 'required' => false,
  3245. ])
  3246. ->getForm();
  3247. return $this->render('DemandeAchatVue/ajaxmodifcontracadre.html.twig'
  3248. ,['id_dem' => $id_dem,'form' => $form->createView(),]
  3249. );
  3250. }
  3251. public function modifcontracadre(Request $request): Response
  3252. {
  3253. $idContrat = $request->request->get('contrat');
  3254. $idDemande = $request->request->get('id');
  3255. $demacha = $this->em
  3256. ->getRepository(demAchat::class)
  3257. ->find($idDemande);
  3258. if (!$demacha) {
  3259. return new JsonResponse([
  3260. 'success' => false,
  3261. 'message' => 'Demande achat introuvable.'
  3262. ]);
  3263. }
  3264. // =========================
  3265. // Ancien contrat
  3266. // =========================
  3267. $ancienContrat = $demacha->getContratCadre();
  3268. // =========================
  3269. // Nouveau contrat
  3270. // =========================
  3271. $nouveauContrat = null;
  3272. if (!empty($idContrat)) {
  3273. $nouveauContrat = $this->em
  3274. ->getRepository(ContratCadre::class)
  3275. ->find($idContrat);
  3276. if (!$nouveauContrat) {
  3277. return new JsonResponse([
  3278. 'success' => false,
  3279. 'message' => 'Contrat-cadre introuvable.'
  3280. ]);
  3281. }
  3282. }
  3283. // =========================
  3284. // Calcul montant réservation
  3285. // =========================
  3286. $montantLigne =
  3287. (float)$demacha->getPrixU()
  3288. *
  3289. (float)$demacha->getQuantDemande();
  3290. // TVA éventuelle
  3291. if ($demacha->getTva()) {
  3292. $montantLigne +=
  3293. $montantLigne
  3294. *
  3295. ((float)$demacha->getTva() / 100);
  3296. }
  3297. // =========================
  3298. // Retirer réservation ancien contrat
  3299. // =========================
  3300. if ($ancienContrat) {
  3301. $ancienReserve =
  3302. (float)$ancienContrat->getMontantReserve();
  3303. $ancienContrat->setMontantReserve(
  3304. (string)max(
  3305. 0,
  3306. $ancienReserve - $montantLigne
  3307. )
  3308. );
  3309. $this->em->persist($ancienContrat);
  3310. }
  3311. // =========================
  3312. // Ajouter réservation nouveau contrat
  3313. // =========================
  3314. if ($nouveauContrat) {
  3315. $nouveauReserve =
  3316. (float)$nouveauContrat->getMontantReserve();
  3317. $nouveauContrat->setMontantReserve(
  3318. (string)($nouveauReserve + $montantLigne)
  3319. );
  3320. $this->em->persist($nouveauContrat);
  3321. }
  3322. // =========================
  3323. // Mise à jour DA
  3324. // =========================
  3325. $demacha->setContratCadre($nouveauContrat);
  3326. // statut contrat
  3327. if ($nouveauContrat) {
  3328. $demacha->setStatutContratCadree(
  3329. demAchat::CC_VALIDE
  3330. );
  3331. } else {
  3332. $demacha->setStatutContratCadree(null);
  3333. }
  3334. $this->em->persist($demacha);
  3335. // =========================
  3336. // Save
  3337. // =========================
  3338. $this->em->flush();
  3339. return $this->redirect( $this->generateUrl('liste_demachat', array('id' => $idDemande)));
  3340. }
  3341. public function supprimeracha($id)
  3342. {
  3343. $demac = $this->em->getRepository(demAchat::class)->find($id);
  3344. $form = $this->createFormBuilder($demac)
  3345. ->add('id', HiddenType::class) ->getForm();
  3346. return $this->render('DemandeAchatVue/supprimeracha.html.twig'
  3347. ,['id' => $id,'form' => $form->createView(),]
  3348. );
  3349. }
  3350. public function ajaxsupprimeracha(Request $request): Response
  3351. {
  3352. $idDemande = $request->request->get('id');
  3353. $demacha = $this->em
  3354. ->getRepository(demAchat::class)
  3355. ->find($idDemande);
  3356. $num=$demacha->getNumDemandeAchat();
  3357. if (!$demacha) {
  3358. return new JsonResponse([
  3359. 'success' => false,
  3360. 'message' => 'Demande achat introuvable.'
  3361. ]);
  3362. }
  3363. // =========================
  3364. // Ancien contrat
  3365. // =========================
  3366. $ancienContrat = $demacha->getContratCadre();
  3367. // =========================
  3368. // Calcul montant réservation
  3369. // =========================
  3370. $montantLigne =
  3371. (float)$demacha->getPrixU()
  3372. *
  3373. (float)$demacha->getQuantDemande();
  3374. // TVA éventuelle
  3375. if ($demacha->getTva()) {
  3376. $montantLigne +=
  3377. $montantLigne
  3378. *
  3379. ((float)$demacha->getTva() / 100);
  3380. }
  3381. // =========================
  3382. // Retirer réservation ancien contrat
  3383. // =========================
  3384. if ($ancienContrat) {
  3385. $ancienReserve =
  3386. (float)$ancienContrat->getMontantReserve();
  3387. $ancienContrat->setMontantReserve(
  3388. (string)max(
  3389. 0,
  3390. $ancienReserve - $montantLigne
  3391. )
  3392. );
  3393. $this->em->persist($ancienContrat);
  3394. }
  3395. $this->em->remove($demacha);
  3396. //$this->em->persist($demacha);
  3397. // =========================
  3398. // Save
  3399. // =========================
  3400. $this->em->flush();
  3401. $demacha = $this->em
  3402. ->getRepository(demAchat::class)
  3403. ->findOneByNumDemandeAchat($num);
  3404. return $this->redirect( $this->generateUrl('liste_demachat', array('id' =>$demacha ->getId())));
  3405. }
  3406. public function ajaxmodifierdemachatemp(int $id_dem, DemAchatTempRepository $repository): Response
  3407. {
  3408. $demach = $repository->find($id_dem);
  3409. if (!$demach) {
  3410. throw $this->createNotFoundException('Demande non trouvée');
  3411. }
  3412. $form19 = $this->createFormBuilder($demach)
  3413. ->add('id', HiddenType::class)
  3414. ->add('objet', TextType::class, ['required' => false])
  3415. ->add('quantDemande')
  3416. ->add('description')
  3417. ->add('designation', TextType::class, ['required' => false])
  3418. ->add('nombaille', EntityType::class, [
  3419. 'class' => Bailleur::class,
  3420. 'choice_label' => 'libele',
  3421. ])
  3422. ->add('costcenter', EntityType::class, [
  3423. 'class' => CentreCout::class,
  3424. 'choice_label' => 'libele',
  3425. ])
  3426. ->add('prixU', IntegerType::class)
  3427. ->add('region', ChoiceType::class, [
  3428. 'choices' => [
  3429. 'Segou' => 'Segou',
  3430. 'Mopti' => 'Mopti',
  3431. 'Sikasso' => 'Sikasso',
  3432. 'Bamako' => 'Bamako'
  3433. ],
  3434. 'placeholder' => ''
  3435. ])
  3436. ->getForm();
  3437. return $this->render('DemandeAchatVue/modifierdemachatemp.html.twig', [
  3438. 'id_dem' => $id_dem,
  3439. 'form19' => $form19->createView()
  3440. ]);
  3441. }
  3442. public function modifierdemachatemp(
  3443. Request $request,
  3444. EntityManagerInterface $em,
  3445. DemAchatTempRepository $repo
  3446. ): Response {
  3447. // Vérification AJAX
  3448. if (!$request->isXmlHttpRequest()) {
  3449. return new Response('Accès non autorisé', 403);
  3450. }
  3451. // Récupération des données via $request->request
  3452. $listnum = $request->request->get('id');
  3453. $demach = $repo->find($listnum);
  3454. if (!$demach) {
  3455. throw $this->createNotFoundException('Demande non trouvée');
  3456. }
  3457. // Hydratation des entités liées
  3458. $idcentreCout = $request->request->get('centreCout');
  3459. $idnomProjet = $request->request->get('nomProjet');
  3460. $centreCout = $em->getRepository(CentreCout::class)->find($idcentreCout);
  3461. $bailleur = $em->getRepository(Bailleur::class)->find($idnomProjet);
  3462. // Gestion du catalogue
  3463. $designation = $request->request->get('designatio');
  3464. $design = null;
  3465. if ($designation) {
  3466. $design = $em->getRepository(Catalogue::class)->findBy(['designation' => $designation]);
  3467. }
  3468. if ($design ) {
  3469. $demach->setDesignation($design[0]->getDesignation());
  3470. $demach->setCatalogue($design[0]);
  3471. } else {
  3472. $demach->setDesignation('votre article selectionner ne se trouve pas dans le catalogue');
  3473. }
  3474. // Mise à jour des propriétés
  3475. $demach->setPrixU((int)$request->request->get('prixU'));
  3476. $demach->setQuantDemande($request->request->get('quantd'));
  3477. $demach->setDescription($request->request->get('descrip'));
  3478. $demach->setObjet($request->request->get('objet'));
  3479. if ($centreCout) {
  3480. $demach->setCentreCout($centreCout->getLibele());
  3481. $demach->setCostcenter($centreCout);
  3482. }
  3483. if ($bailleur) {
  3484. $demach->setNomProjet($bailleur->getLibele());
  3485. $demach->setNombaille($bailleur);
  3486. }
  3487. // Mise à jour de la collection (DA groupées)
  3488. $demachats = $repo->findBy(['numDemandeAchat' => $demach->getNumDemandeAchat()]);
  3489. foreach ($demachats as $demachat) {
  3490. $demachat->setObjet($request->request->get('objet'));
  3491. $demachat->setRegion($request->request->get('region'));
  3492. }
  3493. $em->flush();
  3494. return $this->redirectToRoute('liste_da_temp', ['id' => $demach->getNumDemandeAchat()]);
  3495. }
  3496. }