<?php
namespace App\Controller\Afd;
use App\Repository\AdditionnalSurveyRepository;
use App\Repository\ContractRepository;
use App\Repository\ContractStepRepository;
use App\Repository\InsurerRepository;
use App\Repository\CriteriaRepository;
use App\Repository\DocumentRepository;
use App\Repository\DocumentTypeRepository;
use App\Repository\GarantyRepository;
use App\Repository\JsonSurveyRepository;
use App\Repository\LoanRepository;
use App\Repository\QuoteApiRepository;
use App\Service\Afd\ChartService;
use App\Form\UploadFilesToPersoType;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Validator\Validator\ValidatorInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\Routing\Annotation\Route;
use App\Service\Afd\EncryptorService;
use App\Entity\Document;
use App\Service\Afd\DocumentService;
/**
* @Route("/contract", name="contract")
*/
class ContratController extends AbstractController
{
public function __construct(RequestStack $requestStack, ChartService $chartService)
{
$this->session = $requestStack->getSession();
$this->chartService = $chartService;
}
/**
* @Route("/index", name="_index")
*/
public function index(ContractRepository $contractRepository): Response
{
$contracts = $contractRepository->getContractNotDeleted();
return $this->render('/contract/index.html.twig', [
'contracts' => array_reverse($contracts),
'uniqUsers' => $this->chartService->getUniqUsers()
]);
}
/**
* @Route("/show/{id}", name="_show")
*/
public function show(
ContractRepository $contractRepository,
ContractStepRepository $contractStepRepository,
QuoteApiRepository $quoteApiRepository,
LoanRepository $loanRepository,
JsonSurveyRepository $jsonSurveyRepository,
DocumentTypeRepository $documentTypeRepository,
$id
): Response
{
$contract = $contractRepository->find($id);
$step = $contractStepRepository->findOneBy(['contract' => $contract]);
$jsonSurvey = $jsonSurveyRepository->findOneBy(['contractId' => $contract]);
$jsonQuote = $quoteApiRepository->findOneBy(['contractId' => $contract]);
$documentsType = $documentTypeRepository->findall();
$periodicity = "";
if ($jsonSurvey != null) {
$survey = json_decode($jsonSurvey->getSurvey());
if (!isset($survey->question39)) {
$survey->question39 = "Prélèvement";
$survey->question40 = "Mensuel";
}
if ($survey->question39 == "Prélèvement") {
$periodicity = $survey->question40;
} else {
$periodicity = $survey->question41;
}
}
$loans = $loanRepository->findBy(['contractIdcontract' => $contract]);
$lemoine = [0, 0];
$json_qs = json_decode($jsonSurvey->getSurvey());
if ($contract->getCompany()->getIdcompany() == 2) {
$lemoine = [(isset($json_qs->question005) and $json_qs->question005 === "Oui"), (isset($json_qs->question010) and $json_qs->question010 === "Oui")];
}
if($step != null) {
return $this->render('/contract/show.html.twig', [
'contract' => $contract,
'loans' => $loans,
'periodicity' => $periodicity,
'quote' => json_decode($jsonQuote->getQuote()),
'survey' => json_decode($jsonSurvey->getSurvey()),
'documentsType' => $documentsType,
'lemoine' => $lemoine,
'step' => $step->getCount()
]);
}else{
return $this->render('/contract/show.html.twig', [
'contract' => $contract,
'loans' => $loans,
'periodicity' => $periodicity,
'quote' => json_decode($jsonQuote->getQuote()),
'survey' => json_decode($jsonSurvey->getSurvey()),
'documentsType' => $documentsType,
'lemoine' => $lemoine,
'step' => '0'
]);
}
}
/**
* @Route("/delete2/{id}", name="_delete2")
*/
public function deleteContract(
$id,
ContractRepository $contractRepository,
EntityManagerInterface $em
): Response
{
$contrat = $contractRepository->find($id);
$contrat->setIsDeleted(true);
$em->persist($contrat);
$em->flush();
return $this->redirectToRoute('contract_index');
}
/**
* @Route("/delete/{id}", name="_delete")
*/
public function delete(
int $id,
ContractRepository $contractRepository,
JsonSurveyRepository $jsonSurveyRepository,
LoanRepository $loanRepository,
GarantyRepository $garantyRepository,
QuoteApiRepository $quoteApiRepository,
CriteriaRepository $criteriaRepository,
EntityManagerInterface $em,
AdditionnalSurveyRepository $additionnalSurveyRepository,
DocumentRepository $documentRepository
): Response
{
$contrats = $contractRepository->findby(['folderId' => $id]);
foreach ($contrats as $contrat) {
$json = $jsonSurveyRepository->findBy(['contractId' => $contrat]);
$loans = $loanRepository->findBy(['contractIdcontract' => $contrat]);
$criteria = $criteriaRepository->findBy(['contract' => $contrat]);
$additionnalSurey = $additionnalSurveyRepository->findBy(['contract' => $contrat]);
$quoteApi = $quoteApiRepository->findBy(['contractId' => $contrat]);
$documents = $documentRepository->findBy(['contract' => $contrat]);
foreach ($additionnalSurey as $s) {
$em->remove($s);
}
foreach ($documents as $d) {
$em->remove($d);
}
$em->flush();
$em->remove($contrat);
foreach ($loans as $loan) {
$garanties = $garantyRepository->findBy(['fkLoan' => $loan->getIdloan()]);
foreach ($garanties as $garanty) {
$em->remove($garanty);
}
$em->remove($loan);
}
foreach ($criteria as $criterion) {
$em->remove($criterion);
}
foreach ($additionnalSurey as $survey) {
$em->remove($survey);
}
foreach ($json as $j) {
$em->remove($j);
}
if (count($quoteApi) > 0) {
foreach ($quoteApi as $q) {
$em->remove($q);
}
}
try {
$em->flush();
} catch (\Exception $e) {
dd($e);
};
}
return $this->json([
'response' => 200
]);
}
/**
* @param Request $request
* @param ValidatorInterface $validator
* @param ContractRepository $contractRepository
* @param EntityManagerInterface $em
* @param $id
* @return Response
*
* @Route("/adComment/{id}", name="_add_comment")
*/
function editComment(
Request $request,
ValidatorInterface $validator,
ContractRepository $contractRepository,
EntityManagerInterface $em,
$id): Response
{
if ($request->isXmlHttpRequest()) {
$contract = $contractRepository->find($id);
$comment = $request->request->get('comment');
$contract->setComment($comment);
$errors = $validator->validate($contract);
if (count($errors) > 0) {
return new JsonResponse(["response" => 400, "error" => $errors[0]->getMessage()]);
} else {
$em->persist($contract);
$em->flush();
}
}
return new JsonResponse(["response" => 200]);
}
/**
* @param Request $request
* @return Response
*
* @Route("/addDocument/{id}/{co}", name="_add_doc")
*/
function addDocument(Request $request, $id, $co,
ContractRepository $contractRepository,
ContractStepRepository $contractStepRepository,
InsurerRepository $insurerRepository,
DocumentService $documentService
): Response
{
$contract = $contractRepository->find($id);
$insurer = $insurerRepository->find($co);
$form = $this->createForm(UploadFilesToPersoType::class);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$task = $form->getData();
foreach (['BPA' => 21, 'CIA' => 20] as $toFetch => $type) {
$documentService->uploadDocument($insurer, $task[$toFetch], $type, $toFetch, $id);
}
$contractStep = $contractStepRepository->findOneBy(['contract' => $contract, 'insurer' => $insurer]);
$contractStep->setCount(1);
$em = $this->getDoctrine()->getManager();
$em->persist($contractStep);
$em->flush();
return $this->redirectToRoute('contract_show', ['id' => $id]);
}
return $this->render('/contract/addDoc.html.twig', [
'form' => $form->createView(),
]);
}
}