<?php
namespace App\Controller;
use App\Entity\DocumentCategory;
use App\Entity\Folder;
use App\Entity\MarriageCertificate;
use App\Entity\Media;
use App\Entity\Sites;
use App\Form\MarriageCertificateType;
use App\Form\SiteCbmType;
use App\Service\FileUploader;
use Doctrine\Persistence\ManagerRegistry;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Endroid\QrCode\QrCode;
class MarriageCertificateController extends AbstractController
{
private FileUploader $fileUploader;
private ManagerRegistry $managerRegistry;
/**
* @param FileUploader $fileUploader
* @param ManagerRegistry $managerRegistry
*/
public function __construct(FileUploader $fileUploader, ManagerRegistry $managerRegistry)
{
$this->fileUploader = $fileUploader;
$this->managerRegistry = $managerRegistry;
}
public function add(Request $request)
{
$marriage = new MarriageCertificate();
$marriageForm = $this->createForm(MarriageCertificateType::class, $marriage);
$marriageForm->handleRequest($request);
if ($marriageForm->isSubmitted() && $marriageForm->isValid()) {
#que l'ages des parents et des mariés sont correctes
$folder = new Folder();
$folder->setUserCreate($this->getUser());
$dc = $this->managerRegistry->getRepository(DocumentCategory::class)->findOneBy([
'number' => 'AA2',
'isDeleted' => false,
]);
if (!is_null($dc)) {
$folder->setDocumentCategory($dc);
}
$folder->setSite($this->getUser()->getSite());
$folder->setBeneficiary($marriage->getMan());
$marriage->setUserCreate($this->getUser());
$marriage->setStatus(2);
$marriage->setSite($this->getUser()->getSite());
$em = $this->managerRegistry->getManager();
$em->persist($marriage);
$em->flush();
$documentFile = $marriageForm->get('file')->getData();
if ($documentFile) {
$media = new Media();
$this->fileUploader->setTargetDirectory($this->getParameter('demandes_directory'));
$documentFileName = $this->fileUploader->upload($documentFile);
$media->setPath($documentFileName);
$media->setDocumentId($marriage->getId());
$media->setUserCreate($this->getUser());
$em = $this->managerRegistry->getManager();
$em->persist($media);
$em->flush();
}
$m = $this->managerRegistry->getRepository(MarriageCertificate::class)->findOneBy([
'man' => $marriage->getMan(),
'women' => $marriage->getWomen(),
'witness_1' => $marriage->getWitness1(),
'witness_2' => $marriage->getWitness2(),
'userCreate' => $this->getUser(),
'isDeleted' => false,
]);
if (!is_null($m)) {
$folder->setRequestId($m->getId() . "");
}
$folder->setStatus(2);
$em->persist($folder);
$em->flush();
$this->addFlash('add_mc_success', "L'acte de mariage enregistré avec succès");
}
return $this->render('marriage_certificate/add.html.twig', [
'marriageForm' => $marriageForm->createView(),
'media' => null
]);
}
public function update(Request $request)
{
$marriage = $this->managerRegistry->getRepository(MarriageCertificate::class)->findOneBy([
'id' => $request->get('mc_id'),
'isDeleted' => false,
]);
if ($marriage === null) {
$this->addFlash('not_found_mc', "L'acte " . ucfirst($request->get('mc_id')) . "n'a pas été trouvé");
return $this->redirectToRoute('app_folder_register');
}
$media = $this->managerRegistry->getRepository(Media::class)->findOneBy(['documentId' => $marriage->getId() ]);
$marriageForm = $this->createForm(MarriageCertificateType::class, $marriage);
$marriageForm->handleRequest($request);
if ($marriageForm->isSubmitted() && $marriageForm->isValid()) {
$marriage->setUserUpdate($this->getUser());
$marriage->setDateUpdate(new \DateTime());
$em = $this->managerRegistry->getManager();
$em->persist($marriage);
$em->flush();
$folder = $this->managerRegistry->getRepository(Folder::class)->findOneBy([
'documentCategory' => 2,
'requestId' => $marriage->getId() . '',
'isDeleted' => false,
]);
if ($folder === null) {
$this->addFlash('update_folder_success', "L'acte " . ucfirst($request->get('mc_id')) . "n'a pas été trouvé");
return $this->redirectToRoute('app_folder_register');
}
$this->addFlash('update_mc_success', "L'acte de mariage a été modifié avec succès!");
return $this->redirectToRoute('app_folder_view', [
'folder_id' => $folder->getId()
]);
}
return $this->render('marriage_certificate/add.html.twig', [
'marriageForm' => $marriageForm->createView(),
'media' => $media
]);
}
public function publish(Request $request)
{
$marriage = $this->managerRegistry->getRepository(MarriageCertificate::class)->findOneBy([
'id' => $request->get('mc_id'),
'isDeleted' => false,
]);
if ($marriage === null) {
$this->addFlash('not_found_mc', "L'acte " . ucfirst($request->get('mc_id')) . "n'a pas été trouvé");
return $this->redirectToRoute('app_folder_register');
}
$marriage->setUserUpdate($this->getUser());
$marriage->setDatePublish(new \DateTime());
$marriage->setIsPublished(true);
$em = $this->managerRegistry->getManager();
$em->persist($marriage);
$em->flush();
$folder = $this->managerRegistry->getRepository(Folder::class)->findOneBy([
'documentCategory' => 2,
'requestId' => $marriage->getId() . '',
'isDeleted' => false,
]);
if ($folder === null) {
$this->addFlash('update_folder_success', "L'acte " . ucfirst($request->get('mc_id')) . "n'a pas été trouvé");
return $this->redirectToRoute('app_folder_register');
}
$this->addFlash('publish_mc_success', "Le mariage a été publié avec succès!");
return $this->redirectToRoute('app_folder_view', [
'folder_id' => $folder->getId()
]);
}
public function register(Request $request)
{
$marriages = $this->managerRegistry->getRepository(MarriageCertificate::class)->findBy([
'isDeleted' => false,
]);
return $this->render('marriage_certificate/register.html.twig', [
'marriages' => $marriages,
]);
}
public function publishRegister(Request $request)
{
$marriages = $this->managerRegistry->getRepository(MarriageCertificate::class)->findBy([
'isDeleted' => false,
'isPublished' => true,
]);
$marriage = new MarriageCertificate();
$siteForm = $this->createForm(SiteCbmType::class, $marriage);
$siteForm->handleRequest($request);
if ($siteForm->isSubmitted() && $siteForm->isValid()) {
}
return $this->render('marriage_certificate/publish_register.html.twig', [
'marriages' => $marriages,
'siteForm' => $siteForm->createView(),
]);
}
public function viewDocHtml(Request $request)
{
$marriage = $this->managerRegistry->getRepository(MarriageCertificate::class)->findOneBy([
'id' => $request->get('mc_id'),
'isDeleted' => false,
]);
if ($marriage === null) {
$this->addFlash('not_found_mc', "L'acte " . ucfirst($request->get('mc_id')) . "n'a pas été trouvé");
return $this->redirectToRoute('app_folder_register');
}
$qrCodeUrl = $this->getParameter("server_url").$this->getParameter("url_scan"). $request->get('folder_id');
$qrCode = new QrCode($qrCodeUrl);
$qrCode->setSize(100);
return $this->render('marriage_certificate/view_doc_html.html.twig', [
'marriage' => $marriage,
'qrcode' => $qrCode->writeDataUri(),
'qrCodeUrl' => $qrCodeUrl,
]);
}
public function printDocToPdf(Request $request)
{
$doc = $this->managerRegistry->getRepository(MarriageCertificate::class)->findOneBy([
'id' => $request->get('mc_id'),
'isDeleted' => false,
]);
//Si le document n'existe pas dans la bd
if ($doc === null) {
throw $this->createNotFoundException("Document non trouvé dans la base de données");
}
$pdf = new \FPDF('P', 'mm', 'A4');
// $pdf->AddFont('RobotoCondensed', '', 'RobotoCondensed-Regular.php');
// $pdf->AddFont('RobotoCondensed', 'I', 'RobotoCondensed-Italic.php');
// $pdf->AddFont('RobotoCondensed', 'B', 'RobotoCondensed-Bold.php');
// $pdf->AddFont('RobotoCondensed', 'L', 'RobotoCondensed-Light.php');
// $pdf->AddFont('Roboto', 'B', 'Roboto-Bold.php');
$pdf->SetMargins(0, 3, 0);
//RECTO
$pdf->AddPage();
$pdf->SetFont('Arial', 'B', 12);
$pdf->Cell(0, 3, utf8_decode('ENTRE LES SOUSSIGNES :'), false, true, '', false);
$pdf->Output();
}
public function validation(Request $request)
{
$document = $this->managerRegistry->getRepository(MarriageCertificate::class)->findOneBy([
'id' => $request->get('pr_id'),
'isDeleted' => false,
]);
if ($document === null) {
$this->addFlash('not_found_folder', "L'acte de mariage " . ucfirst($request->get('pr_id')) . "n'a pas été trouvé");
return $this->redirectToRoute('app_folder_register');
}
$folder = $this->managerRegistry->getRepository(Folder::class)->findOneBy([
'requestId' => $document->getId(),
]);
if ($folder === null) {
$this->addFlash('not_found_folder', "L'acte de mariage" . ucfirst($request->get('pr_id')) . "n'a pas été trouvé");
return $this->redirectToRoute('app_folder_register');
}
$folder->setStatus(4);
$folder->setUserValidation($this->getUser());
$folder->setDateValidation(new \DateTime());
$document->setStatus(4);
$em = $this->managerRegistry->getManager();
$em->persist($document);
$em->persist($folder);
$em->flush();
$this->addFlash('update_folder_success', "La demande a été validée avec succès ");
return $this->redirectToRoute('app_folder_register');
}
public function sign(Request $request)
{
$document = $this->managerRegistry->getRepository(MarriageCertificate::class)->findOneBy([
'id' => $request->get('pr_id'),
'isDeleted' => false,
]);
if ($document === null) {
$this->addFlash('not_found_folder', "L'acte de mariage " . ucfirst($request->get('pr_id')) . "n'a pas été trouvé");
return $this->redirectToRoute('app_folder_register');
}
$folder = $this->managerRegistry->getRepository(Folder::class)->findOneBy([
'requestId' => $document->getId(),
]);
if ($folder === null) {
$this->addFlash('not_found_folder', "L'acte de mariage " . ucfirst($request->get('pr_id')) . "n'a pas été trouvé");
return $this->redirectToRoute('app_folder_register');
}
$folder->setStatus(5);
$folder->setUserAutority($this->getUser());
$folder->setDateSign(new \DateTime());
$document->setStatus(5);
$em = $this->managerRegistry->getManager();
$em->persist($document);
$em->persist($folder);
$em->flush();
$this->addFlash('update_folder_success', "Le document a été signé avec succès ");
return $this->redirectToRoute('app_folder_register');
}
}