src/Controller/Afd/HandleDataController.php line 83

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Afd;
  3. use App\Entity\ContractStep;
  4. use App\Entity\Document;
  5. use App\Entity\User;
  6. use App\Repository\AddressRepository;
  7. use App\Repository\DocumentTypeRepository;
  8. use App\Service\Afd\EncryptorService;
  9. use App\Service\Afd\QuoteService;
  10. use DateTime;
  11. use App\Entity\Loan;
  12. use App\Entity\Stage;
  13. use App\Entity\Company;
  14. use App\Entity\Garanty;
  15. use App\Entity\Insurer;
  16. use App\Entity\Contract;
  17. use App\Entity\Criteria;
  18. use App\Entity\QuoteApi;
  19. use App\Entity\Addresses;
  20. use App\Entity\CatSocPro;
  21. use App\Entity\JsonSurvey;
  22. use App\Entity\Differedtype;
  23. use App\Service\Afd\MailService;
  24. use App\Repository\BrokerRepository;
  25. use App\Repository\LoanTypeRepository;
  26. use App\Service\Afd\ContractNumberService;
  27. use Doctrine\ORM\EntityManagerInterface;
  28. use Error;
  29. use Exception;
  30. use Symfony\Component\HttpFoundation\BinaryFileResponse;
  31. use Symfony\Component\HttpFoundation\Request;
  32. use Symfony\Component\HttpFoundation\Response;
  33. use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
  34. use Symfony\Component\Mailer\Exception\TransportExceptionInterface;
  35. use Symfony\Component\Routing\Annotation\Route;
  36. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  37. use Symfony\Component\HttpFoundation\JsonResponse;
  38. class HandleDataController extends AbstractController
  39. {
  40.     public function __construct(
  41.         BrokerRepository       $brokerRepository,
  42.         MailService            $mailService,
  43.         EncryptorService       $encryptorService,
  44.         DocumentTypeRepository $documentTypeRepository,
  45.         LoanTypeRepository     $loanTypeRepository,
  46.         ContractNumberService  $contractNumberService,
  47.         QuoteService           $quoteService,
  48.         AddressRepository      $addressRepository,
  49.         EntityManagerInterface $em
  50.     )
  51.     {
  52.         $this->brokerRepository $brokerRepository;
  53.         $this->mailService $mailService;
  54.         $this->documentTypeRepository $documentTypeRepository;
  55.         $this->loanTypeRepository $loanTypeRepository;
  56.         $this->contractNumberService $contractNumberService;
  57.         $this->quoteService $quoteService;
  58.         $this->addressRepository $addressRepository;
  59.         $this->encryptorService $encryptorService;
  60.         $this->em $em;
  61.     }
  62.     /**
  63.      * @Route("/handledata", name="handle_data")
  64.      */
  65.     public function index(Request $request): Response
  66.     {
  67.         $params $request->getContent();
  68.         //ob_start();
  69.         //var_dump($params);
  70.         //file_put_contents('json', ob_get_clean());
  71. //        if (strstr($params, "\"data=\'") != 0)
  72.         $params substr($params6strlen($params) - 7);
  73.         $params json_decode($params);
  74.         $dataPhp $params;
  75.         $jsonModified $dataPhp->jsonModified;
  76.         $prets $jsonModified->quest->PRETS;
  77.         $assures $jsonModified->quest->ASSURES;
  78.         $garanties $jsonModified->quest->GARANTIES;
  79.         $contrat $jsonModified->quest;
  80.         $id_produit $jsonModified->quest->id_produit;
  81.         $entityManager $this->getDoctrine()->getManager();
  82.         $getDifferedType $entityManager->getRepository(Differedtype::class);
  83.         $getCompany $entityManager->getRepository(Company::class);
  84.         $getInsurer $entityManager->getRepository(Insurer::class);
  85.         $getCSP $entityManager->getRepository(CatSocPro::class);
  86.         $company $getCompany->findByName($id_produit);
  87.         $contract = new Contract();
  88.         if ($jsonModified != null) {
  89.             $contract->setJsonModified((array)$jsonModified->quest);
  90.         }
  91.         //TODO more than 4 quotes send mail
  92.         if (count($jsonModified->quest->PRETS) > 4) {
  93.             $this->mailService->sendMoreThan4quotes($contract$jsonModifiedjson_decode(json_encode($dataPhp), true));
  94.             return $this->json([
  95.                 'message' => 'le contrat a bien été ajouté',
  96.             ]);
  97.         }
  98.         $broker $this->brokerRepository->findAll();
  99.         $folderId = ($params->resp->resp->simulation->id_dossier);
  100.         //set contract
  101.         $contract->setActivationDate(new DateTime($contrat->date_effet))
  102.             ->setCompany($company[0])
  103.             ->setBroker($broker[0])
  104.             ->setFolderId($folderId)
  105.             ->setJson(json_decode(json_encode($dataPhp), true));
  106.         //set quote for this contract (devis)
  107.         $quote = new QuoteApi();
  108.         $quote->setQuoteNumber((int)$dataPhp->resp->resp->simulation->id_dossier);
  109.         $quote->setQuote(json_encode($dataPhp->resp));
  110.         $quote->setContractId($contract);
  111.         $entityManager->persist($quote);
  112.         $countLoan 0;
  113.         $pretIdIfStage = -1;
  114.         foreach ($prets as $pretsKeys => $pret) {
  115.             $loan = new Loan();
  116.             $loanType $this->loanTypeRepository->find($pret->type);
  117.             $differedType $getDifferedType->findByName($pret->type_differe);
  118.             // set each loan
  119.             $loan->setNumber($pret->numero)
  120.                 ->setRate($pret->taux ?? 0)
  121.                 ->setTotalDuration($pret->duree_totale)
  122.                 ->setRefundPeriod($pret->period_rembours)
  123.                 ->setDelay($pret->duree_differe ?? null)
  124.                 ->setCreationDate(new DateTime())
  125.                 ->setAmount($pret->capital_emprunte)
  126.                 ->setLoanType($loanType)
  127.                 ->setDifferedType($differedType[0])
  128.                 ->setContract($contract);
  129.             foreach ($assures as $assureKeys => $assure) {
  130.                 // Criteria
  131.                 $criteria = new Criteria();
  132.                 $criteria->setSmoker($assure->fumeur)
  133.                     ->setIsmorethan25k($assure->critere1)
  134.                     ->setLiftjob($assure->critere3)
  135.                     ->setHeavyWeightTask($assure->critere2);
  136.                 $contract->addCriteria($criteria);
  137.                 //if insurer already exist retrieve object
  138.                 if (isset($getInsurer->findByEmail($assure->email)[0])) {
  139.                     $insurer $getInsurer->findByEmail($assure->email)[0];
  140.                     $actualAddress $insurer->getActualAddress();
  141.                     $futurAddress $insurer->getActualAddress();
  142.                 } else {
  143.                     $insurer = new Insurer();
  144.                     $actualAddress = new Addresses();
  145.                     $futurAddress = new Addresses();
  146.                 }
  147.                 //retrieve CSP
  148.                 $catSocPro $getCSP->findByCode($assure->csp);
  149.                 $actualAddress->setAddress1($assure->adresse_lgn1)
  150.                     ->setAddress2($assure->adresse_lgn2 ?? null)
  151.                     ->setCity($assure->city ?? null)
  152.                     ->setZipcode((int)$assure->code_postal);
  153.                 $futurAddress->setAddress1($assure->adresse_futur_lgn1 ?? null)
  154.                     ->setAddress2($assure->adresse_futur_lgn2 ?? null)
  155.                     ->setCity($assure->futur_city ?? null)
  156.                     ->setZipcode(isset($assure->code_postal_futur) ? (int)$assure->code_postal_futur null);
  157.                 $assure->civilite == $gender $gender 0;
  158.                 $insurer->setFirstName($assure->prenom)
  159.                     ->setLastname($assure->nom)
  160.                     ->setBirthdate(new DateTime($assure->date_naissance))
  161.                     ->setEmail($assure->email)
  162.                     ->setPhone($assure->tel_domicile)
  163.                     ->setOccupation(isset($assure->profession) ? substr($assure->profession044) : null)
  164. //                    ->setOccupation("test")
  165.                     ->setCreationDate(new DateTime())
  166.                     ->setActualAddress($actualAddress)
  167.                     ->setFuturAddress($futurAddress)
  168.                     ->setReservedProfession((int)$assure->profession_reserve)
  169.                     ->setBirthName(isset($assure->Nom_de_naissance) ? $assures->Nom_de_naissance null)
  170.                     ->setGender($gender)
  171.                     ->setCatSocPro($catSocPro[0]);
  172.                 //create Survey(qestionnaire) if it is new insurer
  173.                 //contract for both insurer
  174.                 $assureKeys == $contract->setAssure1($insurer) : $contract->setAssure2($insurer);
  175.                 // stock survey(raw questionnaire) for assure1 (principal assure)
  176.                 if ($assureKeys == 0) {
  177.                     $survey = new JsonSurvey();
  178.                     $survey->setContractId($contract);
  179.                     $dataSurvey json_encode($dataPhp->json);
  180.                     $survey->setSurvey($dataSurvey);
  181.                     $entityManager->persist($survey);
  182.                     $entityManager->flush();
  183.                 }
  184.                 foreach ($garanties as $garantie) {
  185.                     if (($garantie->numero_assure == ($assureKeys 1)) && ($garantie->numero_pret == ($pretsKeys 1))) {
  186.                         $garanty = new Garanty();
  187.                         $garanty->setFormule($garantie->formule)
  188.                             ->setDc($garantie->dc_ptia->quotite_dc_ptia)
  189.                             ->setPtia($garantie->dc_ptia->quotite_dc_ptia)
  190.                             ->setItt(isset($garantie->garantie1->quotite1) ? $garantie->garantie1->quotite1 null)
  191.                             ->setIpt(isset($garantie->garantie1->quotite1) ? $garantie->garantie1->quotite1 null)
  192.                             ->setIpp(isset($garantie->garantie2->quotite1) ? $garantie->garantie1->quotite1 null)
  193.                             ->setItp(isset($garantie->garantie2->quotite1) ? $garantie->garantie1->quotite1 null)
  194.                             ->setFranchiseItt(isset($garantie->garantie1->franchise1) ? $garantie->garantie1->franchise1 null)
  195.                             ->setFranchiseIpt(isset($garantie->garantie1->franchise1) ? $garantie->garantie1->franchise1 null)
  196.                             ->setFranchiseIpp(isset($garantie->garantie2->franchise1) ? $garantie->garantie1->franchise1 null)
  197.                             ->setFranchiseItp(isset($garantie->garantie2->franchise1) ? $garantie->garantie1->franchise1 null)
  198.                             ->setExtention($garantie->extension1)
  199.                             //->setAssure($insurer)
  200.                             ->setLoan($loan);
  201.                         $entityManager->persist($garanty);
  202.                         $entityManager->flush();
  203.                     }
  204.                 }
  205.                 $entityManager->persist($insurer);
  206.                 $entityManager->flush();
  207.             }
  208.             //on loan type2 u got stages(palier)
  209.             if (isset($pret->palier[0])) {
  210.                 $pretIdIfStage $pretsKeys;
  211.                 foreach ($pret->palier as $palier) {
  212.                     $stage = new Stage();
  213.                     $stage->setAmount((int)$palier->mt_echeance)
  214.                         ->setLength((int)$palier->duree)
  215.                         ->setLoan($loan)
  216.                         ->setRate((int)$palier->taux);
  217.                     $entityManager->persist($stage);
  218.                     //TODO check json syntax with stage
  219.                     //try{
  220.                     //$this->mailService->sendQuoteWithStages($contract);
  221.                     //}
  222.                     //catch(Error $e){
  223.                     //return new JsonResponse(array("error"=>$e->getMessage()));
  224.                     // }
  225.                 }
  226.             }
  227.             $entityManager->persist($loan);
  228.             $entityManager->flush();
  229.             $countLoan += 1;
  230.         }
  231.         if ($countLoan 4) {
  232.             // var_dump($countLoan);
  233.             // die;
  234.             $this->mailService->sendMoreThan4quotes($contract$jsonModifiedjson_decode(json_encode($dataPhp), true));
  235.         }
  236.         // send quote
  237.         $jsonSurvey json_decode($survey->getSurvey());
  238.         if ($jsonSurvey->devis == "false")
  239.             $contract->setIsBlock(true);
  240.         // set folderId
  241.         $entityManager->persist($contract);
  242.         $entityManager->flush();
  243.         // make quote
  244.         $this->quoteService->makeQuote($contract->getIdcontract());
  245.         $contractNumber $this->contractNumberService->getContractNumber($contract);
  246.         if ($jsonSurvey->palier == "true") {
  247.             $this->mailService->sendQuoteToCustomer($contract$contractNumber);
  248. //            try {
  249. //                $this->mailService->sendQuoteWithStages($contract);
  250. //            } catch (Exception|TransportExceptionInterface|Error $e) {
  251. //                return new JsonResponse(array("error" => $e->getMessage()));
  252. //            }
  253.         } else if (!isset($jsonSurvey->devis)) {
  254.             $this->mailService->sendQuoteToCustomer($contract$contractNumber);
  255.         } else if (isset($jsonSurvey->devis) && $jsonSurvey->devis === "true") {
  256.             $this->mailService->sendQuoteToCustomer($contract$contractNumber);
  257.         }
  258.         if ((isset($jsonSurvey->question10) && $jsonSurvey->question10 == "Oui") || (isset($jsonSurvey->question11) && $jsonSurvey->question11 == "Oui")) {
  259.             $this->mailService->advertiseRiskyInsurerJob($contract$contractNumber,$jsonSurvey);
  260.         }
  261.         if ((isset($jsonSurvey->ppe) && $jsonSurvey->ppe == "true") || (isset($jsonSurvey->ppeco) && $jsonSurvey->ppeco == "true")) {
  262.             $this->mailService->sendPPE($contract$contractNumber);
  263.         }
  264.         if ((isset($jsonSurvey->gel) && $jsonSurvey->gel == "true") || (isset($jsonSurvey->gelco) && $jsonSurvey->gelco == "true")) {
  265.             $this->mailService->sendCreditFreeze($contract$contractNumber);
  266.         }
  267.         // delete quote encrypted
  268.         $quote $contract->getQuotePdf();
  269.         unlink($quote);
  270.         $contract->setQuotePdf(null);
  271.         $this->em->persist($contract);
  272. //        $this->em->flush();
  273.         // Link notice doc to insurer and contract
  274.          $this->addNoticeTo($contract$contract->getAssure1());
  275.         // Create Contract step for each insurer
  276.         $borrowerContractStep = new ContractStep();
  277.         $borrowerContractStep->setContract($contract);
  278.         $borrowerContractStep->setInsurer($contract->getAssure1());
  279.         $borrowerContractStep->setCount(0);
  280.         $this->em->persist($borrowerContractStep);
  281.         // Create second contract step if there is a co borrower
  282.         if ($contract->getAssure2() !== null) {
  283.             $this->addNoticeTo($contract$contract->getAssure2());
  284.             $coBorrowerContractStep = new ContractStep();
  285.             $coBorrowerContractStep->setContract($contract);
  286.             $coBorrowerContractStep->setInsurer($contract->getAssure2());
  287.             $coBorrowerContractStep->setCount(0);
  288.             $this->em->persist($coBorrowerContractStep);
  289.         }
  290.         $this->em->flush();
  291.         return $this->json([
  292.             'message' => 'le contrat a bien été ajouté'
  293.         ]);
  294.     }
  295. //    /**
  296. //     * @Route("/test/notice", name="test_notice")
  297. //     */
  298.     public function addNoticeTo(Contract $contractInsurer $insurer): void
  299.     {
  300.         // Get document type from db
  301.         $documentType $this->documentTypeRepository->find(23); // 23 === Notice
  302.         if ($documentType === null) {
  303.             throw new NotFoundHttpException('Document type not found');
  304.         }
  305.         // Read file from /public/attached_mail/Notice Information_Contrat FFD 1_2021-10-29[65].pdf
  306.         $filePath $this->getParameter('kernel.project_dir') . '/public/attached_mail/Notice Information_Contrat FFD 1_2022-06-07.pdf';
  307.         $file file_get_contents($filePath);
  308.         // Name of the file to be saved
  309.         $fileName 'document' '-' rand(1099) . '-' uniqid();
  310.         // Name of the file when downloaded by the user
  311.         $docName 'Notice_' $insurer->getFirstName() . '_' $insurer->getLastName() . '_n°' $contract->getFolderId();
  312.         // Encrypt file and save it in /public/document/
  313.         $encryptedFile $this->encryptorService->encryptor('encrypt'$file);
  314.         $this->encryptorService->createFile($fileName$encryptedFile);
  315.         // Create new Document
  316.         $document = new Document();
  317.         $document->setName($docName);
  318.         $document->setFileName($fileName);
  319.         $document->setType($documentType);
  320.         $document->setExtention('pdf');
  321.         $document->setContract($contract);
  322.         $document->setInsurer($insurer);
  323.         $this->em->persist($document);
  324.     }
  325. }