<?php
namespace App\Controller;
use App\Entity\Service;
use App\Entity\FundRequest;
use App\Form\FundRequestType;
use App\Entity\FundRequestItem;
use App\Entity\RequestValidation;
use App\Form\FundRequestItemType;
use PhpParser\Node\Stmt\TryCatch;
use Symfony\Component\Mime\Email;
use App\Entity\FundRequestAnnotation;
use App\Entity\FundRequestAttachment;
use App\Form\FundRequestActivityType;
use App\Entity\FundRequestDisbursement;
use App\Entity\Station;
use App\Form\FundRequestAnnotationType;
use App\Form\FundRequestAttachmentType;
use Doctrine\ORM\EntityManagerInterface;
use App\Form\FundRequestDisbursementType;
use App\Form\SearchFundRequestRegisterFinType;
use App\Form\SearchFundRequestRegisterType;
use App\Repository\ServiceRepository;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\String\Slugger\SluggerInterface;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\File\Exception\FileException;
use Symfony\Component\Mailer\MailerInterface;
class FundRequestController extends AbstractController
{
#[Route('/fund-request-add', name: 'fund_request_add')]
public function add(Request $request, EntityManagerInterface $em, MailerInterface $mailer): Response
{
$fundRequest = new FundRequest();
$fundRequestForm = $this->createForm(FundRequestType::class, $fundRequest);
$services = [];
$user = $this->getUser();
if ($user->getUserRole() == "ADMIN") {
$services = $em->getRepository(Service::class)->findAll();
} else {
$iSViewAllServData = UtilsController::getIsAccess("view_all_serv_data", $this->getUser()->getId(), $em);
if ($iSViewAllServData == true) {
$services = $em->getRepository(Service::class)->findAll();
} else {
$services = $em->getRepository(Service::class)->findBy([
'id' => $user->getService()->getId(),
]);
}
}
$fundRequestForm->add(
'service',
ChoiceType::class,
[
'label' => "Service demandeur",
'required' => true,
'multiple' => false,
'expanded' => false,
'placeholder' => 'Sélectionner...',
'choices' => $services,
'choice_label' => 'label',
'choice_value' => 'id',
'attr' => [
//'class' => 'js-choice',
'class' => 'chosen-select',
],
]
);
$fundRequestForm->handleRequest($request);
if ($fundRequestForm->isSubmitted() && $fundRequestForm->isValid()) {
$user = $this->getUser();
$fundRequest->setIsDeleted(false);
$fundRequest->setNumber("DF-" . ucfirst(uniqid()));
$fundRequest->setStatus(0);
$fundRequest->setUserCreate($user);
$fundRequest->setDateCreate(new \DateTime());
$fundRequest->setIsRejected(false);
$em->persist($fundRequest);
$em->flush();
try {
//code...send mail
$email = (new Email())
->from('email@cilumarket.com')
->to($user->getEmail())
//->to( 'steventshas@gmail.com' )
->subject('création de la demande de fonds')
->text('Votre demande a été crée avec succès!')
->html('<p>Nous informons que votre demande a été créée avec succès</p>');
$mailer->send($email);
$this->addFlash('message', 'le message a été envoyé');
} catch (\Throwable $th) {
//throw $th;
}
$this->addFlash('success_message', 'Demande de fonds initiée avec succès !');
return $this->redirectToRoute('fund_request_view', [
'fund_request_id' => $fundRequest->getId(),
]);
}
return $this->render('fund_request/add.html.twig', [
'fundRequestForm' => $fundRequestForm->createView(),
]);
}
#[Route('/fund-request-update/{fund_request_id}', name: 'fund_request_update')]
public function update(Request $request, EntityManagerInterface $em): Response
{
$user = $this->getUser();
$fundRequest = $em->getRepository(FundRequest::class)->findOneBy([
'id' => $request->get('fund_request_id')
]);
if (is_null($fundRequest)) {
$this->addFlash('warning_message', "Aucune donnée trouvée avec l'id fourni!");
return $this->redirectToRoute('fund_request_register');
}
if ($fundRequest->getUserCreate()->getId() != $user->getId()) {
$this->addFlash('warning_message', "Impossible de modifier une demande que vous n'avez pas initiée");
return $this->redirectToRoute('fund_request_register');
}
$fundRequestForm = $this->createForm(FundRequestType::class, $fundRequest);
$services = [];
if ($user->getUserRole() == "ADMIN") {
$services = $em->getRepository(Service::class)->findAll();
} else {
$iSViewAllServData = UtilsController::getIsAccess("view_all_serv_data", $this->getUser()->getId(), $em);
if ($iSViewAllServData == true) {
$services = $em->getRepository(Service::class)->findAll();
} else {
$services = $em->getRepository(Service::class)->findBy([
'id' => $user->getService()->getId(),
]);
}
}
$fundRequestForm->add(
'service',
ChoiceType::class,
[
'label' => "Service demandeur",
'required' => true,
'multiple' => false,
'expanded' => false,
'placeholder' => 'Sélectionner...',
'choices' => $services,
'choice_label' => 'label',
'choice_value' => 'id',
'attr' => [
//'class' => 'js-choice',
],
]
);
$fundRequestForm->handleRequest($request);
if ($fundRequestForm->isSubmitted() && $fundRequestForm->isValid()) {
$fundRequest->setDateUpdate(new \DateTime());
$fundRequest->setUserUpdate($this->getUser());
$em->persist($fundRequest);
$em->flush();
$this->addFlash('success_message', 'Modification effectuée avec succès !');
return $this->redirectToRoute('fund_request_view', [
'fund_request_id' => $fundRequest->getId(),
]);
}
return $this->render('fund_request/add.html.twig', [
'fundRequestForm' => $fundRequestForm->createView(),
]);
}
#[Route('/fund-request-view/{fund_request_id}', name: 'fund_request_view')]
public function view(Request $request, EntityManagerInterface $em, SluggerInterface $slugger): Response
{
$fundRequest = $em->getRepository(FundRequest::class)->findOneBy([
'id' => $request->get('fund_request_id')
]);
if (is_null($fundRequest)) {
$this->addFlash('warning_message', "Aucune donnée trouvée avec l'id fourni!");
return $this->redirectToRoute('fund_request_register');
}
$items = $em->getRepository(FundRequestItem::class)->findBy([
'fundRequest' => $fundRequest->getId(),
'isDeleted' => false,
]);
$item = new FundRequestItem();
$itemForm = $this->createForm(FundRequestItemType::class, $item);
$itemForm->handleRequest($request);
if ($itemForm->isSubmitted() && $itemForm->isValid()) {
$item->setDateCreate(new \DateTime());
$item->setUserCreate($this->getUser());
$item->setFundRequest($fundRequest);
$item->setIsDeleted(false);
$stationId = $itemForm->get('station')->getData();
$station = $em->getRepository(Station::class)->findOneBy([
'id' => $stationId,
]);
if (!is_null($station)) {
$item->setStation($station);
}
$em->persist($item);
$em->flush();
$items = $em->getRepository(FundRequestItem::class)->findBy([
'fundRequest' => $fundRequest->getId(),
'isDeleted' => false,
]);
if (!is_null($items) && count($items) > 0) {
$rate = UtilsController::getRate($em);
if ($rate == 0) {
}
$totalAmount = 0;
foreach ($items as $i) {
if ($i->getCurrency()->getId() == 1) {
$totalAmount = $totalAmount + ($i->getAmount() / $rate);
} else {
$totalAmount = $totalAmount + $i->getAmount();
}
}
$fundRequest->setTotalAmount($totalAmount);
$em->persist($fundRequest);
$em->flush();
}
$this->addFlash('success_message', "L'ajout du détail effectué avec succès !");
return $this->redirectToRoute('fund_request_view', [
'fund_request_id' => $fundRequest->getId(),
]);
}
//Gestion des annotations -----------------------------------------------------
$annotations = $em->getRepository(FundRequestAnnotation::class)->findBy([
'fundRequest' => $fundRequest->getId(),
'isDeleted' => false,
]);
$annotation = new FundRequestAnnotation();
$annotationForm = $this->createForm(FundRequestAnnotationType::class, $annotation);
$annotationForm->handleRequest($request);
if ($annotationForm->isSubmitted() && $annotationForm->isValid()) {
$annotation->setDateCreate(new \DateTime());
$annotation->setUserCreate($this->getUser());
$annotation->setFundRequest($fundRequest);
$annotation->setIsDeleted(false);
$em->persist($annotation);
$em->flush();
$this->addFlash('success_message', "Observation ajoutée avec succès !");
return $this->redirectToRoute('fund_request_view', [
'fund_request_id' => $fundRequest->getId(),
]);
}
//Fin gestion des annotations ----------------------------------------------------
//Gestion des pièces jointes -----------------------------------------------------
$attachments = $em->getRepository(FundRequestAttachment::class)->findBy([
'fundRequest' => $fundRequest->getId(),
'isDeleted' => false,
], ['dateCreate' => 'DESC']);
$attachment = new FundRequestAttachment();
$attachmentForm = $this->createForm(FundRequestAttachmentType::class, $attachment);
$attachmentForm->handleRequest($request);
if ($attachmentForm->isSubmitted() && $attachmentForm->isValid()) {
$attachmentFile = $attachmentForm->get('attachment')->getData();
if ($attachmentFile) {
$originalFilename = pathinfo($attachmentFile->getClientOriginalName(), PATHINFO_FILENAME);
$safeFilename = $slugger->slug($originalFilename);
$newFilename = $fundRequest->getId() . '-' . uniqid() . '.' . $attachmentFile->guessExtension();
}
try {
$attachmentFile->move(
$this->getParameter('attachement_directory'),
$newFilename
);
} catch (FileException $e) {
$this->addFlash('warning_message', "Erreur : " . $e->getMessage());
return $this->redirectToRoute('fund_request_view', [
'fund_request_id' => $fundRequest->getId(),
]);
}
$user = $this->getUser();
$attachment->setAttachmentFilename($newFilename);
$attachment->setIsDeleted(false);
$attachment->setUserCreate($user);
$attachment->setFundRequest($fundRequest);
$attachment->setDateCreate(new \DateTime());
$em->persist($attachment);
$em->flush();
$this->addFlash('success_message', "Pièce jointe ajoutée avec succès !");
return $this->redirectToRoute('fund_request_view', [
'fund_request_id' => $fundRequest->getId(),
]);
}
//Fin gestion des pièces jointes ----------------------------------------------------
//Validation data
// $sceValidation = $em->getRepository(RequestValidation::class)->findOneBy([
// 'category' => 'FRSCE',
// 'requestId' => 'FR-' . $fundRequest->getId(),
// 'isDeleted' => false
// ]);
$scmValidation = $em->getRepository(RequestValidation::class)->findOneBy([
'category' => 'FRSCM',
'requestId' => 'FR-' . $fundRequest->getId(),
'isDeleted' => false
]);
$cgValidation = $em->getRepository(RequestValidation::class)->findOneBy([
'category' => 'FRCG',
'requestId' => 'FR-' . $fundRequest->getId(),
'isDeleted' => false
]);
$dgValidation = $em->getRepository(RequestValidation::class)->findOneBy([
'category' => 'FRDG',
'requestId' => 'FR-' . $fundRequest->getId(),
'isDeleted' => false
]);
//Les droits d'accèss
$iSAccessVldFundReqCg = UtilsController::getIsAccess("vld_fund_req_cg", $this->getUser()->getId(), $em);
$iSAccessVldFundReqDg = UtilsController::getIsAccess("vld_fund_req_dg", $this->getUser()->getId(), $em);
$iSAccessVldFundReqScm = UtilsController::getIsAccess("vld_fund_req_scm", $this->getUser()->getId(), $em);
$totalAmountUsd = 0;
$totalAmountCdf = 0;
$rate = UtilsController::getRate($em);
$totalAmountCdf = $fundRequest->getTotalAmount() * $rate;
$totalAmountUsd = $fundRequest->getTotalAmount();
//Montant décaissé
$totalDisbursementCdf = $fundRequest->getTotalAmountDisbursed() * $rate;
$totalDisbursementUsd = $fundRequest->getTotalAmountDisbursed();
return $this->render('fund_request/view.html.twig', [
'fundRequest' => $fundRequest,
'items' => $items,
'annotations' => $annotations,
'attachments' => $attachments,
//'sceValidation' => $sceValidation,
'scmValidation' => $scmValidation,
'cgValidation' => $cgValidation,
'dgValidation' => $dgValidation,
'totalDisbursementUsd' => $totalDisbursementUsd,
'totalDisbursementCdf' => $totalDisbursementCdf,
'iSAccessVldFundReqCg' => $iSAccessVldFundReqCg,
'iSAccessVldFundReqDg' => $iSAccessVldFundReqDg,
'iSAccessVldFundReqScm' => $iSAccessVldFundReqScm,
'totalAmountUsd' => $totalAmountUsd,
'totalAmountCdf' => $totalAmountCdf,
'itemForm' => $itemForm->createView(),
'annotationForm' => $annotationForm->createView(),
'attachmentForm' => $attachmentForm->createView(),
]);
}
#[Route('/fin/fund-request-view/{fund_request_id}', name: 'fin_fund_request_view')]
public function viewFin(Request $request, EntityManagerInterface $em): Response
{
$fundRequest = $em->getRepository(FundRequest::class)->findOneBy([
'id' => $request->get('fund_request_id')
]);
if (is_null($fundRequest)) {
$this->addFlash('warning_message', "Aucune donnée trouvée avec l'id fourni!");
return $this->redirectToRoute('fund_request_register');
}
$items = $em->getRepository(FundRequestItem::class)->findBy([
'fundRequest' => $fundRequest->getId(),
'isDeleted' => false,
]);
$disbursements = $em->getRepository(FundRequestDisbursement::class)->findBy([
'fundRequest' => $fundRequest->getId(),
'isDeleted' => false,
]);
$attachments = $em->getRepository(FundRequestAttachment::class)->findBy([
'fundRequest' => $fundRequest->getId(),
'isDeleted' => false,
], ['dateCreate' => 'DESC']);
$annotations = $em->getRepository(FundRequestAnnotation::class)->findBy([
'fundRequest' => $fundRequest->getId(),
'isDeleted' => false,
]);
$disbursement = new FundRequestDisbursement();
$disbursementForm = $this->createForm(FundRequestDisbursementType::class, $disbursement);
$disbursementForm->handleRequest($request);
if ($disbursementForm->isSubmitted() && $disbursementForm->isValid()) {
$disbursement->setDateCreate(new \DateTime());
$disbursement->setUserCreate($this->getUser());
$disbursement->setFundRequest($fundRequest);
$disbursement->setIsDeleted(false);
$em->persist($disbursement);
$em->flush();
$disbursementTots = $em->getRepository(FundRequestDisbursement::class)->findBy([
'fundRequest' => $fundRequest->getId(),
'isDeleted' => false,
]);
if (!is_null($disbursementTots) && count($disbursementTots) > 0) {
$rate = UtilsController::getRate($em);
if ($rate == 0) {
}
$totaldisbursement = 0;
foreach ($disbursementTots as $i) {
if ($i->getCurrency()->getId() == 1) {
$totaldisbursement = $totaldisbursement + ($i->getAmount() / $rate);
} else {
$totaldisbursement = $totaldisbursement + $i->getAmount();
}
}
$fundRequest->setTotalAmountDisbursed($totaldisbursement);
$em->persist($fundRequest);
$em->flush();
}
$this->addFlash('success_message', "Enregistrement effectué avec succès !");
return $this->redirectToRoute('fin_fund_request_view', [
'fund_request_id' => $fundRequest->getId(),
]);
}
$rate = UtilsController::getRate($em);
//Montant demandé
$totalAmountCdf = $fundRequest->getTotalAmount() * $rate;
$totalAmountUsd = $fundRequest->getTotalAmount();
//Montant décaissé
$totalDisbursementCdf = $fundRequest->getTotalAmountDisbursed() * $rate;
$totalDisbursementUsd = $fundRequest->getTotalAmountDisbursed();
return $this->render('fund_request/view_fin.html.twig', [
'fundRequest' => $fundRequest,
'items' => $items,
'totalAmountUsd' => $totalAmountUsd,
'totalAmountCdf' => $totalAmountCdf,
'totalDisbursementUsd' => $totalDisbursementUsd,
'totalDisbursementCdf' => $totalDisbursementCdf,
'disbursementForm' => $disbursementForm->createView(),
'disbursements' => $disbursements,
'attachments' => $attachments,
'annotations' => $annotations,
]);
}
#[Route('/fund-request-confirm/{fund_request_id}', name: 'fund_request_confirm')]
public function confirmRequest(Request $request, EntityManagerInterface $em): Response
{
$fundRequest = $em->getRepository(FundRequest::class)->findOneBy([
'id' => $request->get('fund_request_id')
]);
if (is_null($fundRequest)) {
$this->addFlash('warning_message', "Aucune donnée trouvée avec l'id fourni!");
return $this->redirectToRoute('fund_request_register');
}
$user = $this->getUser();
if ($fundRequest->getUserCreate()->getId() != $user->getId()) {
$this->addFlash('danger_message', "Vous n'êtes pas l'initiateur de cette demande, impossible de la confirmer");
return $this->redirectToRoute('fund_request_register');
}
$fundRequest->setDateUpdate(new \DateTime());
$fundRequest->setUserUpdate($this->getUser());
$fundRequest->setStatus(1);
$em->persist($fundRequest);
$em->flush();
$this->addFlash('success_message', "Demande confirmée avec succès !");
return $this->redirectToRoute('fund_request_view', [
'fund_request_id' => $fundRequest->getId(),
]);
}
#[Route('/fund-request-register', name: 'fund_request_register')]
public function list(Request $request,EntityManagerInterface $em): Response
{
$user = $this->getUser();
$serviceId = "";
$userId = "";
$startDate = "";
$endDate = "";
$like = "";
$limit = "500";
$showService = false;
$iSViewAllServData = UtilsController::getIsAccess("view_all_serv_data", $this->getUser()->getId(), $em);
if ($user->getUserRole() != "ADMIN" && $iSViewAllServData != true) {
$serviceId = $user->getService()->getId();
}
$fundRequests = [];
$searchForm = $this->createForm(SearchFundRequestRegisterType::class);
if ($user->getUserRole() == "ADMIN" || $iSViewAllServData == true) {
$searchForm
->add('service', EntityType::class, [
'label' => false,
'required' => false,
'placeholder' => "Sélectionner...",
'class' => Service::class,
'choice_label' => function (Service $a) {
return $a->getLabel();
},
'query_builder' => function (ServiceRepository $r) {
return $r->findByNoDeleted();
},
'attr' => [
'class' => 'chosen-select',
],
'multiple' => false,
]);
$showService = true;
}
$searchForm->handleRequest($request);
if ($searchForm->isSubmitted() && $searchForm->isValid()) {
$criterias = $searchForm->getData();
$sDate = $criterias['startDate'];
$eDate = $criterias['endDate'];
$like = $criterias['like'];
$limit = "";
if ($user->getUserRole() == "ADMIN" || $iSViewAllServData == true) {
$service = $criterias['service'];
}
if(!is_null($service)){
$serviceId = $service->getId();
}
if(!is_null($sDate)){
$startDate = $sDate->format('Y-m-d'). " 00:00:00";
}
if(!is_null($sDate)){
$endDate = $eDate->format('Y-m-d'). " 23:59:59";
}
}
$fundRequests = $em->getRepository(FundRequest::class)->findByCriteria($like,$serviceId,$startDate,$endDate,$userId,$limit);
$totalAmountFundRequests = 0;
if (!is_null($fundRequests) && count($fundRequests) > 0) {
foreach ($fundRequests as $e) {
$totalAmountFundRequests = $totalAmountFundRequests + $e->getTotalAmount();
}
}
return $this->render('fund_request/register.html.twig', [
'fundRequests' => $fundRequests,
'searchForm' => $searchForm->createView(),
'showService' => $showService,
'totalAmountFundRequests' => $totalAmountFundRequests,
]);
}
#[Route('/fund-request-my', name: 'fund_request_my')]
public function myRequest(Request $request,EntityManagerInterface $em): Response
{
$user = $this->getUser();
$userId = $user->getId();
$startDate = "";
$endDate = "";
$like = "";
$showService = false;
$fundRequests = [];
$searchForm = $this->createForm(SearchFundRequestRegisterType::class);
$searchForm->handleRequest($request);
if ($searchForm->isSubmitted() && $searchForm->isValid()) {
$criterias = $searchForm->getData();
$sDate = $criterias['startDate'];
$eDate = $criterias['endDate'];
$like = $criterias['like'];
if(!is_null($sDate)){
$startDate = $sDate->format('Y-m-d'). " 00:00:00";
}
if(!is_null($sDate)){
$endDate = $eDate->format('Y-m-d'). " 23:59:59";
}
}
$fundRequests = $em->getRepository(FundRequest::class)->findByCriteria($like,"",$startDate,$endDate,$userId,"");
$totalAmountFundRequests = 0;
if (!is_null($fundRequests) && count($fundRequests) > 0) {
foreach ($fundRequests as $e) {
$totalAmountFundRequests = $totalAmountFundRequests + $e->getTotalAmount();
}
}
return $this->render('fund_request/register.html.twig', [
'fundRequests' => $fundRequests,
'searchForm' => $searchForm->createView(),
'showService' => $showService,
'totalAmountFundRequests' => $totalAmountFundRequests,
]);
}
#[Route('/fund-request-validation', name: 'fund_request_validation')]
public function validation(Request $request, EntityManagerInterface $em, MailerInterface $mailer): Response
{
$status = 'ok';
$message = "succuss";
$dataSend = $request->request->all();
if (is_null($dataSend)) {
$status = 'ko';
$message = "data_empty";
}
//Récupération de la demande
$requestId = '';
if (isset($dataSend['requestId'])) {
$requestId = $dataSend['requestId'];
}
$fundRequest = $em->getRepository(FundRequest::class)->findOneBy([
'id' => $requestId,
'isDeleted' => false
]);
if (is_null($fundRequest)) {
$status = 'ko';
$message = "fund_request_not_exist";
return $this->json(['status' => $status, 'message' => $message, 'data' => '']);
}
//Récupération du commentaire
$comment = '';
if (isset($dataSend['comment'])) {
$comment = $dataSend['comment'];
}
//Récupération de l'avis
$isValide = '';
if (isset($dataSend['isValide'])) {
$isValide = $dataSend['isValide'];
}
//Récupération du type de validation
$category = '';
if (isset($dataSend['category'])) {
$category = $dataSend['category'];
}
$validation = new RequestValidation();
$validation->setDateValidation(new \DateTime());
$validation->setUserValidator($this->getUser());
$validation->setIsValidated($isValide);
$validation->setIsDeleted(false);
$validation->setCategory($category);
$validation->setComment($comment);
$validation->setrequestId('FR-' . $fundRequest->getId());
if ($isValide == 0) {
$fundRequest->setIsRejected(true);
}
switch ($category) {
case "FRSCE":
$fundRequest->setStatus(2);
break;
case "FRSCM":
$fundRequest->setStatus(3);
break;
case "FRCG":
$fundRequest->setStatus(4);
break;
case "FRDG":
$fundRequest->setStatus(5);
$fundRequest->setDateApproved(new \DateTime());
break;
}
$em->persist($validation);
$em->persist($fundRequest);
$em->flush();
try {
//code...
$email = (new Email())
->from('email@cilumarket.com')
->to($user->getEmail())
//->to( 'steventshas@gmail.com' )
->subject('Validation de votre demande')
->text('La demande de fonds a été validée avec succès!')
->html('<p>Nous informons que votre demande a été validée</p>');
$mailer->send($email);
$this->addFlash('message', 'le message a été envoyé');
} catch (\Throwable $th) {
//throw $th;
}
$this->addFlash('success_message', "L'enregistrement de la validation est effectué avec succès");
return $this->json(['status' => $status, 'message' => $message, 'data' => '']);
}
#[Route('/fin/fund-request-register', name: 'fin_fund_request_register')]
public function listApproved(Request $request,EntityManagerInterface $em): Response
{
$fundRequests = [];
$searchForm = $this->createForm(SearchFundRequestRegisterFinType::class);
$searchForm->handleRequest($request);
if ($searchForm->isSubmitted() && $searchForm->isValid()) {
$criterias = $searchForm->getData();
$startDate = $criterias['startDate'];
$endDate = $criterias['endDate'];
$fundRequests = $em->getRepository(FundRequest::class)->
findByApprovedAndPeriodApproved($startDate->format('Y-m-d'). " 00:00:00",$endDate->format('Y-m-d'). " 23:59:59");
} else {
$fundRequests = $em->getRepository(FundRequest::class)->findByApproved();
}
$totalAmountFundRequests = 0;
$totalAmountDisbursementFundRequests = 0;
if (!is_null($fundRequests) && count($fundRequests) > 0) {
foreach ($fundRequests as $e) {
$totalAmountFundRequests = $totalAmountFundRequests + $e->getTotalAmount();
$totalAmountDisbursementFundRequests = $totalAmountDisbursementFundRequests + $e->getTotalAmountDisbursed();
}
}
$restDisbursement = $totalAmountFundRequests - $totalAmountDisbursementFundRequests;
return $this->render('fund_request/register_fin.html.twig', [
'fundRequests' => $fundRequests,
'totalAmountFundRequests' => $totalAmountFundRequests,
'restDisbursement' => $restDisbursement,
'totalAmountDisbursementFundRequests' => $totalAmountDisbursementFundRequests,
'searchForm' => $searchForm->createView(),
]);
}
#[Route('/fund-request-delete-item/{item_id}', name: 'fund_request_delete_item')]
public function deleteItem(Request $request, EntityManagerInterface $em): Response
{
$item = $em->getRepository(FundRequestItem::class)->findOneBy([
'id' => $request->get('item_id')
]);
if (is_null($item)) {
$this->addFlash('warning_message', "Aucune donnée trouvée avec l'id fourni!");
return $this->redirectToRoute('fund_request_register');
}
$item->setIsDeleted(true);
$em->persist($item);
$em->flush();
$fundRequest = $item->getFundRequest();
$items = $em->getRepository(FundRequestItem::class)->findBy([
'fundRequest' => $fundRequest->getId(),
'isDeleted' => false,
]);
if (!is_null($items) && count($items) > 0) {
$rate = UtilsController::getRate($em);
if ($rate == 0) {
}
$totalAmount = 0;
foreach ($items as $i) {
if ($i->getCurrency()->getId() == 1) {
$totalAmount = $totalAmount + ($i->getAmount() / $rate);
} else {
$totalAmount = $totalAmount + $i->getAmount();
}
}
$fundRequest->setTotalAmount($totalAmount);
$em->persist($fundRequest);
$em->flush();
}
$this->addFlash('success_message', "Suppression du détail effectuée avec succès !");
return $this->redirectToRoute('fund_request_view', [
'fund_request_id' => $item->getFundRequest()->getId(),
]);
}
#[Route('/fund-request-delete/{fund_request_id}', name: 'fund_request_delete')]
public function deleteRequest(Request $request, EntityManagerInterface $em): Response
{
$fundRequest = $em->getRepository(FundRequest::class)->findOneBy([
'id' => $request->get('fund_request_id')
]);
if (is_null($fundRequest)) {
$this->addFlash('warning_message', "Aucune donnée trouvée avec l'id fourni!");
return $this->redirectToRoute('fund_request_register');
}
$user = $this->getUser();
if ($fundRequest->getUserCreate()->getId() != $user->getId()) {
$this->addFlash('danger_message', "Vous n'êtes pas l'initiateur de cette demande, impossible de la confirmer");
return $this->redirectToRoute('fund_request_register');
}
$fundRequest->setDateUpdate(new \DateTime());
$fundRequest->setUserUpdate($this->getUser());
$fundRequest->setIsdeleted(true);
$em->persist($fundRequest);
$em->flush();
$this->addFlash('success_message', "Demande supprimer avec succès !");
return $this->redirectToRoute('fund_request_view', [
'fund_request_id' => $fundRequest->getId(),
]);
}
}