src/Controller/ManageAccountsController.php line 49

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\SiteBannedIps;
  4. use App\Entity\CrmEnquiries;
  5. use App\Entity\UserCrms;
  6. use App\Form\ManageCompaniesForm;
  7. use Doctrine\ORM\EntityManagerInterface;
  8. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  9. use Symfony\Component\HttpFoundation\Request;
  10. use Symfony\Component\HttpFoundation\Response;
  11. use Symfony\Component\Routing\Annotation\Route;
  12. use App\Form\Filters\ManageCompaniesFilter;
  13. use App\Form\Filters\CrmRecycleBinFilter;
  14. use App\Repository\CompaniesRepository;
  15. use App\Service\ServiceStorage;
  16. use App\Service\ServiceEnquiry;
  17. use App\Repository\TrashItemsRepository;
  18. use App\Repository\EnquiriesRepository;
  19. use App\Repository\UserSubscriptionsRepository;
  20. use App\Form\Filters\UserSubscriptionsFilter;
  21. #[Route('/manage/accounts')]
  22. class ManageAccountsController extends AbstractController
  23. {
  24.     #[Route('/'defaults: ['page' => '1'], methods: ['GET'], name'manage_account_index')]
  25.     #[Route('/page/{page<[1-9]\d*>}'methods: ['GET'], name'manage_account_index_paginated')]
  26.     #[Cache(smaxage10)]
  27.     public function index(Request $request,int $page,EntityManagerInterface $entityManager,CompaniesRepository $companiesRepository): Response
  28.     {
  29.         $params $request->query->all();
  30.         $filter = [];
  31.         $filterForm $this->createForm(ManageCompaniesFilter::class,$params);
  32.         $data $companiesRepository->adminPaginatorFetchAll($page$params);
  33.         return $this->render('manage/accounts/index.html.twig', [
  34.             'paginator' => $data,
  35.             'filter' => $params,
  36.             'form' => $filterForm->createView(),
  37.         ]);
  38.     }
  39.     #[Route('/details/{id}'name'manage_account_details'methods: ['GET'])]
  40.     public function details(UserCrms $companies): Response
  41.     {
  42.         return $this->render('manage/accounts/details.html.twig', [
  43.             'companies' => $companies,
  44.         ]);
  45.     }
  46.     #[Route('/statistics/{id}'name'manage_account_statistics'methods: ['GET'])]
  47.     public function statistics(UserCrms $companies): Response
  48.     {
  49.         return $this->render('manage/accounts/statistics.html.twig', [
  50.             'companies' => $companies,
  51.         ]);
  52.     }
  53.     #[Route('/members/{id}'name'manage_account_members'methods: ['GET'])]
  54.     public function listAllMembers($idUserCrms $companiesEntityManagerInterface $entityManager): Response
  55.     {
  56.         $companyUser $entityManager->getRepository(\App\Entity\UserCrmRelationships::class)->findBy(array('crmId' => $id));
  57.         return $this->render('manage/accounts/members.html.twig', [
  58.             'companies' => $companies,
  59.             'companyUser' => $companyUser,
  60.         ]);
  61.     }
  62.     #[Route('/transaction/{id}'name'manage_account_transaction'methods: ['GET'])]
  63.     public function transactionList($idUserCrms $companiesEntityManagerInterface $entityManager): Response
  64.     {
  65.         $userTransactions $entityManager->getRepository(\App\Entity\UserTransactions::class)->findBy(array('crmId' => $id));
  66.         return $this->render('manage/accounts/transaction.html.twig', [
  67.             'companies' => $companies,
  68.             'userTransactions' => $userTransactions,
  69.         ]);
  70.     }
  71.     #[Route('/edit/{id}'name'manage_account_edit'methods: ['GET''POST'])]
  72.     public function edit(Request $requestUserCrms $companiesEntityManagerInterface $entityManager,ServiceStorage $serviceStorage): Response
  73.     {
  74.         $form $this->createForm(ManageCompaniesForm::class, $companies);
  75.         $form->handleRequest($request);
  76.         $crm_img_path $serviceStorage->getFileUrl($companies->getMediaId());
  77.         if ($form->isSubmitted() && $form->isValid()) {
  78.             $lifetime $form->get('lifetime')->getData();
  79.             $import_csv $form->get('import_csv')->getData();
  80.             $mass_email $form->get('mass_email')->getData();
  81.             $csvEnable $entityManager->getRepository(\App\Entity\CrmSettings::class)->findOneBy(['crmId'=>$companies->getCrmId(), 'name' => 'csv.enable']);
  82.             $massEmailEnable $entityManager->getRepository(\App\Entity\CrmSettings::class)->findOneBy(['crmId'=>$companies->getCrmId(), 'name' => 'mass_email.enable']);
  83.             $lifetimeEnable $entityManager->getRepository(\App\Entity\CrmSettings::class)->findOneBy(['crmId'=>$companies->getCrmId(), 'name' => 'lifetime.enable']);
  84.             if($csvEnable){
  85.                 $csvEnable->setValue($import_csv);
  86.                 $entityManager->persist($csvEnable);
  87.                 $entityManager->flush();
  88.             }else{
  89.                 $companySettings = new \App\Entity\CrmSettings();
  90.                 $companySettings->setCrmId($companies->getCrmId());
  91.                 $companySettings->setSection('csv.enable');
  92.                 $companySettings->setName('csv.enable');
  93.                 $companySettings->setValue($import_csv);
  94.                 $entityManager->persist($companySettings);
  95.                 $entityManager->flush();
  96.             }
  97.             if($massEmailEnable){
  98.                 $massEmailEnable->setValue($mass_email);
  99.                 $entityManager->persist($massEmailEnable);
  100.                 $entityManager->flush();
  101.             }else{
  102.                 $companySettings = new \App\Entity\CrmSettings();
  103.                 $companySettings->setCrmId($companies->getCrmId());
  104.                 $companySettings->setSection('mass_email.enable');
  105.                 $companySettings->setName('mass_email.enable');
  106.                 $companySettings->setValue($mass_email);
  107.                 $entityManager->persist($companySettings);
  108.                 $entityManager->flush();
  109.             }
  110.             if($lifetimeEnable){
  111.                 $lifetimeEnable->setValue($lifetime);
  112.                 $entityManager->persist($lifetimeEnable);
  113.                 $entityManager->flush();
  114.             }else{
  115.                 $companySettings = new \App\Entity\CrmSettings();
  116.                 $companySettings->setCrmId($companies->getCrmId());
  117.                 $companySettings->setSection('lifetime.enable');
  118.                 $companySettings->setName('lifetime.enable');
  119.                 $companySettings->setValue($lifetime);
  120.                 $entityManager->persist($companySettings);
  121.                 $entityManager->flush();
  122.             }
  123.             $entityManager->flush();
  124.             $this->addFlash('success''Update successfully.');
  125.             return $this->redirectToRoute('manage_account_details', ['id' => $companies->getCrmId()], Response::HTTP_SEE_OTHER);
  126.         }
  127.         
  128.         return $this->renderForm('manage/accounts/edit.html.twig', [
  129.             'companies' => $companies,
  130.             'form' => $form,
  131.             'crm_img_path' => $crm_img_path,
  132.         ]);
  133.     }
  134.     #[Route('/recycle-bin/{id}'defaults: ['page' => '1'], name'manage_account_recycle_bin'methods: ['GET'])]
  135.     #[Route('/recycle-bin/{id}/page/{page<[1-9]\d*>}'methods: ['GET'], name'manage_account_recycle_bin_paginated')]
  136.     #[Cache(smaxage10)]
  137.     public function recycleBin($id$pageUserCrms $companiesTrashItemsRepository $trashItemsRepositoryEntityManagerInterface $entityManagerRequest $request): Response
  138.     {
  139.         $filter $params $request->query->all();
  140.       
  141.         $restoreAllBtn false;
  142.         if(isset($params['start_date']) && $params['start_date'] || isset($params['end_date']) && $params['end_date'] || !empty($params['user']) || !empty($params['enquiry_id']) || !empty($params['quote_id']) || !empty($params['job_id'])){
  143.             $restoreAllBtn true;
  144.         }
  145.         $filterForm $this->createForm(CrmRecycleBinFilter::class,$filter);
  146.         $data $trashItemsRepository->adminPaginatorFetchAllByCrm($id$page$filter);
  147.         unset($params['_token']);
  148.         return $this->render('manage/accounts/recycle-bin.html.twig', [
  149.             'paginator' => $data,
  150.             'companies' => $companies,
  151.             'filter' => $filter,
  152.             'restoreAllBtn' => $restoreAllBtn,
  153.             'urlParams' => base64_encode(json_encode($params)),
  154.             'form' => $filterForm->createView()
  155.         ]);
  156.     }
  157.     #[Route('/bulk-restore/{id}/{params?}'name'company_manage_bulk_restore'methods: ['POST','GET'])]
  158.     public function bulkRestore($id$paramsRequest $requestUserCrms $companiesEntityManagerInterface $entityManager): Response
  159.     {   
  160.         $filter json_decode(base64_decode($params),true);
  161.         $start_at = (isset($filter['start_at']) && $filter['start_at']) ? date('Y-m-d 00:00:00'strtotime($filter['start_at'])) : date('Y-m-d 00:00:00',strtotime('01-01-2000'));
  162.         $end_at = (isset($filter['end_at']) && $filter['end_at']) ? date('Y-m-d 23:59:59',strtotime($filter['end_at'])) : date('Y-m-d 23:59:59');
  163.     
  164.         if ($this->isCsrfTokenValid('restore'.$companies->getCrmId(), $request->request->get('_token'))) {
  165.             $trashItem $entityManager->getRepository(\App\Entity\TrashItems::class)->createQueryBuilder('p')
  166.                     ->update()
  167.                     ->set('p.isRestoring'1)
  168.                     ->andWhere("p.crmId = {$id}");
  169.                     if (isset($filter['user']) && !empty($filter['user'])) {
  170.                         $entityManager $this->getEntityManager();
  171.                         $user $entityManager->getRepository(\App\Entity\User::class)->createQueryBuilder('u')
  172.                                             ->add('select''u.userId')
  173.                                             ->andWhere('u.name LIKE :name OR u.email LIKE :name')
  174.                                             ->setParameter('name''%'$filter['user'] . '%')
  175.                                             ->getQuery()->getResult();
  176.                         $userIds = array();
  177.                         if($user){
  178.                             foreach($user as $user){
  179.                                 $userIds[] = $user['userId'];
  180.                             }
  181.                         }
  182.                         if(count($userIds)){
  183.                             $trashItem->andWhere("p.userId IN(:ids)")
  184.                                 ->setParameter('ids'array_values($userIds));
  185.                         }else{
  186.                             $trashItem->andWhere("p.userId = :userId")
  187.                                 ->setParameter('userId',0);
  188.                         }
  189.                     }
  190.                     if (isset($filter['enquiry_id']) && !empty($filter['enquiry_id'])) {   
  191.                         $trashItem->andWhere('p.objectType = :type OR p.resourceType = :type')
  192.                         ->setParameter('type''enquiry')
  193.                         ->andWhere('p.objectId LIKE :id OR p.resourceId LIKE :id')
  194.                         ->setParameter('id''%'$filter['enquiry_id'] . '%');
  195.                     }
  196.                     if (isset($filter['quote_id']) && !empty($filter['quote_id'])) {
  197.                         $trashItem->andWhere('p.objectType = :type OR p.resourceType = :type')
  198.                             ->setParameter('type''quote_outcome')
  199.                             ->andWhere('p.objectId LIKE :id OR p.resourceId LIKE :id')
  200.                             ->setParameter('id''%'$filter['quote_id'] . '%')
  201.                         ;
  202.                     }
  203.             
  204.                     if (isset($filter['job_id']) && !empty($filter['job_id'])) {
  205.                         $trashItem->andWhere('p.resourceId LIKE :id')
  206.                             ->setParameter('id''%'$filter['job_id'] . '%')
  207.                         ;
  208.                     }
  209.                     if($start_at || $end_at){
  210.                         $trashItem->andwhere('p.createdAt BETWEEN :startAt AND :endAt')
  211.                         ->setParameter('startAt',$start_at)
  212.                         ->setParameter('endAt',$end_at);
  213.                     }
  214.                     $trashItem->getQuery()->execute();
  215.             $this->addFlash('success''Data restore starting.');
  216.             return $this->redirectToRoute('manage_account_recycle_bin', ['id'=> $companies->getCrmId()], Response::HTTP_SEE_OTHER);
  217.         }
  218.         return $this->renderForm('manage/accounts/bulk-restore.html.twig', [
  219.             'companies' => $companies,
  220.             'start_at' => $start_at,
  221.             'end_at' => $end_at,
  222.             'params' => $params
  223.         ]);
  224.     }
  225.     #[Route('/enquiry/{id}'defaults: ['page' => '1'], methods: ['GET'], name'enquiries_index')]
  226.     #[Route('/enquiry/{id}/page/{page<[1-9]\d*>}'methods: ['GET'], name'enquiries_index_paginated')]
  227.     #[Cache(smaxage10)]
  228.     public function enquiriesIndex($idUserCrms $companiesRequest $request,int $page,EntityManagerInterface $entityManager,EnquiriesRepository $enquiriesRepository): Response
  229.     {
  230.         $params $request->query->all();
  231.         $data $enquiriesRepository->adminPaginatorFetchAll($id$page$params);
  232.         return $this->render('manage/accounts/enquiries-index.html.twig', [
  233.             'paginator' => $data,
  234.             'companies' => $companies,
  235.         ]);
  236.     }
  237.     #[Route('/enquiry/customer-view/{id}'name'enquiries_customer_view'methods: ['GET'])]
  238.     public function view(CrmEnquiries $crmEnquiriesEntityManagerInterface $entityManager): Response
  239.     {        
  240.         return $this->render('manage/accounts/customer-view.html.twig', [
  241.             'enquiries' => $crmEnquiries,
  242.         ]);
  243.     }
  244.     #[Route('/enquiry/quote/{id}'name'quote_view'methods: ['GET'])]
  245.     public function viewQuote(CrmEnquiries $crmEnquiriesEntityManagerInterface $entityManager,$id): Response
  246.     {
  247.         $crmEnquiryQuotes $entityManager->getRepository(\App\Entity\CrmEnquiryQuotes::class)->findOneBy(array('enquiryId' => $id));
  248.         return $this->render('manage/accounts/view-quote-enquiry.html.twig', [
  249.             'quote' => $crmEnquiryQuotes,
  250.             'enquiries' => $crmEnquiries,
  251.         ]);
  252.     }
  253.     #[Route('/enquiry/job/{id}'name'job_view'methods: ['GET'])]
  254.     public function viewJob(CrmEnquiries $crmEnquiries,  EntityManagerInterface $entityManager,$id): Response
  255.     {
  256.         $crmEnquiriesJobBooked $entityManager->getRepository(\App\Entity\CrmEnquiriesJobBooked::class)->findBy(array('enquiryId' => $id));
  257.         
  258.         return $this->render('manage/accounts/view-job-enquiry.html.twig', [
  259.             'job' => $crmEnquiriesJobBooked,
  260.             'enquiries' => $crmEnquiries,
  261.         ]);
  262.     }
  263.     #[Route('/enquiry/priority/{id}'name'priority_view'methods: ['GET'])]
  264.     public function viewPriority(CrmEnquiries $crmEnquiriesEntityManagerInterface $entityManager,$id): Response
  265.     {
  266.         $crmEnquiryPriorities $entityManager->getRepository(\App\Entity\CrmEnquiryPriorities::class)->findBy(array('enquiryId' => $id));
  267.         return $this->render('manage/accounts/view-priority-enquiry.html.twig', [
  268.             'priority' => $crmEnquiryPriorities,
  269.             'enquiries' => $crmEnquiries,
  270.         ]);
  271.     }
  272.     #[Route('/enquiry/payment/{id}'name'payment_view'methods: ['GET'])]
  273.     public function viewPayment(CrmEnquiries $crmEnquiries,  EntityManagerInterface $entityManager,$id): Response
  274.     {
  275.         $crmEnquiriesPaymentSchedule $entityManager->getRepository(\App\Entity\CrmEnquiriesPaymentSchedule::class)->findBy(array('enquiryId' => $id));
  276.         return $this->render('manage/accounts/view-payment-enquiry.html.twig', [
  277.             'payment_schedule' => $crmEnquiriesPaymentSchedule,
  278.             'enquiries' => $crmEnquiries,
  279.         ]);
  280.     }
  281.     #[Route('/enquiry/sms/{id}'name'sms_view'methods: ['GET'])]
  282.     public function viewSms($idCrmEnquiries $crmEnquiries,  EntityManagerInterface $entityManager): Response
  283.     {
  284.         $crmEnquiryScheduleSms $entityManager->getRepository(\App\Entity\CrmEnquiryScheduleSms::class)->findBy(array('enquiryId' => $id));
  285.         return $this->render('manage/accounts/view-sms-enquiry.html.twig', [
  286.             'sms_data' => $crmEnquiryScheduleSms,
  287.             'enquiries' => $crmEnquiries,
  288.         ]);
  289.     }
  290.     #[Route('/enquiry/email/{id}'name'email_view'methods: ['GET'])]
  291.     public function viewEmail($idCrmEnquiries $crmEnquiries,  EntityManagerInterface $entityManagerServiceEnquiry $serviceEnquiry): Response
  292.     {
  293.         $listMailData =[];
  294.         $pendingMailLogs = [];
  295.         $mailLogs = [];
  296.         $crmId $crmEnquiries->getCrmId();
  297.         
  298.         $welcomeEmails $entityManager->getRepository(\App\Entity\CrmEnquiryWelcomeMails::class)->findBy(array('crmId' => $crmId'enquiryId' => $id));
  299.         foreach($welcomeEmails as $item){
  300.             $mailTo ='';
  301.             $body unserialize(base64_decode($item->getBody()),[]);
  302.             $emailTo unserialize($item->getRecipientEmail(),[]);
  303.             if (is_string($emailTo)){
  304.                 $mailTo $emailTo;
  305.             }else{
  306.                 $mailTo implode(',',$emailTo);
  307.             }
  308.             $mailLogs[] = array(
  309.                 'id' => $item->getId(),
  310.                 'enquiryId' => $item->getEnquiryId(),
  311.                 'settingId' => 0,
  312.                 'sentDate' => $item->getSentDate(),
  313.                 'date' => $item->getSentDate()->format('Y-m-d H:i:s'),
  314.                 'time' => $item->getSentDate()->format('H:i:s'),
  315.                 'type' => 'general',
  316.                 'templateId' => $body['mail_template'],
  317.                 'subject' => $body['mail_subject'],
  318.                 'body' => str_replace('&nbsp;',' ',strip_tags($body['mail_body'])),
  319.                 'emails' => $mailTo
  320.             );
  321.         }
  322.         $invoiceMails $entityManager->getRepository(\App\Entity\CrmInvoiceMails::class)->findBy(array('crmId' => $crmId,'enquiryId' => $id));
  323.        
  324.         foreach($invoiceMails as $item){
  325.             $body unserialize(base64_decode($item->getBody()),[]);
  326.             $templateId 0;
  327.             $responsible '';
  328.             $passign $entityManager->getRepository(\App\Entity\CrmEnquiriesPaymentAssigned::class)->findOneBy(array('scheduleId' => $item->getPaymentId()));
  329.             if($passign){
  330.                 $responsible $passign->getPaymentAssigned();
  331.             }
  332.             $responsible $item->getUserId();
  333.             $invSubject '';
  334.             $invBody '';
  335.             if($item->getType() == 'invoice'){
  336.                 if(isset($body['pdfData']['params']['reqData']['mail_data']['h_mail_template'])){
  337.                     $templateId $body['pdfData']['params']['reqData']['mail_data']['h_mail_template'];
  338.                     $invSubject $body['pdfData']['params']['reqData']['mail_data']['h_mail_subject'];
  339.                     $invBody $body['pdfData']['params']['reqData']['mail_data']['h_mail_body'];
  340.                 }
  341.                 $type 'invoice';
  342.             }else{
  343.                 if(isset($body['mail_data']['templateId'])){
  344.                     $templateId $body['mail_data']['templateId'];
  345.                     $invSubject $body['mail_data']['subject'];
  346.                     $invBody $body['mail_data']['body'];
  347.                 }
  348.                 $type 'payment_receipt';
  349.             }
  350.             
  351.             if(!empty($item->getSentDate())){
  352.                 $emailTo unserialize($item->getRecipientEmail(),[]);
  353.                 $mailLogs[] = array(
  354.                     'date' => $item->getSentDate(),
  355.                     'time' => $item->getSentDate(),
  356.                     'type' => $type,
  357.                     'templateId' => $templateId,
  358.                     'user_id' => $item->getUserId(),
  359.                     'subject' => $invSubject,
  360.                     'body' => str_replace('&nbsp;',' ',strip_tags($invBody)),
  361.                     'emails' => implode(',',$emailTo)
  362.                 );
  363.             }
  364.         }
  365.         $quoteMails $entityManager->getRepository(\App\Entity\CrmEnquiryMails::class)->findBy(array('enquiryId' => $id));
  366.         
  367.         foreach($quoteMails as $item){
  368.             $body unserialize(base64_decode($item->getBody()),[]);
  369.             $templateId 0;
  370.             $responsible '';
  371.             if(isset($body['mail_data']['h_mail_template'])){
  372.                 $templateId $body['mail_data']['h_mail_template'];
  373.             }
  374.             if(isset($body['quoteResponsibleId'])){
  375.                 $responsible $body['quoteResponsibleId'];
  376.             }
  377.             $quote_user_id '';
  378.             if(isset($body['items']['user_id'])){
  379.                 $quote_user_id $body['items']['user_id'];
  380.             }
  381.             $quote $entityManager->getRepository(\App\Entity\CrmEnquiryQuotes::class)
  382.                     ->findOneBy(array('enquiryId' => $id'crmId' => $crmId));
  383.             $bodyContent str_replace('&nbsp;',' ',strip_tags($body['mail_data']['h_mail_body']));
  384.             $bodyContent str_replace('p {margin:0px;}'''$bodyContent);
  385.             $bodyContent str_replace('&nbsp;'' '$bodyContent);
  386.             $emailTo unserialize($item->getRecipientEmail(),[]);
  387.             $mailLogs[] = array(
  388.                 'date' => $item->getSentDate(),
  389.                 'time' => $item->getSentDate(),
  390.                 'type' => 'quote',
  391.                 'templateId' => $templateId,
  392.                 'templateTitle' =>  $serviceEnquiry->getTemplateNameById($templateId,$crmId),
  393.                 'user_id' => $quote_user_id,
  394.                 'subject' => $body['mail_data']['h_mail_subject'],
  395.                 'body' => $bodyContent,
  396.                 'emails' => implode(',',$emailTo)
  397.             );
  398.         }
  399.         $followupEmails $entityManager->getRepository(\App\Entity\CrmEmailFollowup::class)->findBy(array('enquiryId' => $id));
  400.         foreach($followupEmails as $item){
  401.             $setting $serviceEnquiry->getFollowupEmailSetting($item->getSettingId(),$crmId);
  402.             $followupSubject '';
  403.             $followupBody '';
  404.             if($setting){
  405.                 //getbody 
  406.                 $crmFollowMailBody $entityManager->getRepository(\App\Entity\SiteMailLogs::class)->findBy(array('crmId' => $crmId'templateId' => $setting->getTemplateId(), 'sourceId' => $item->getId()));
  407.                 if(!$crmFollowMailBody){
  408.                     $crmFollowMailTemplate $entityManager->getRepository(\App\Entity\CrmMailTemplate::class)->findOneBy(array('crmId' => $crmId'id' => $setting->getTemplateId()));
  409.                     $followupSubject $crmFollowMailTemplate->getSubject();
  410.                     $followupBody $crmFollowMailTemplate->getBody();
  411.                 }
  412.             }
  413.             $templateTitle '';
  414.             if($setting){
  415.                 $templateTitle =  $serviceEnquiry->getTemplateNameById($setting->getTemplateId(),$crmId);
  416.             }
  417.             
  418.             if($crmFollowMailBody){
  419.                 foreach ($crmFollowMailBody as $mailBody) {
  420.                     $body =  unserialize(base64_decode($mailBody->getBody()))['body'];
  421.                     $body str_replace('p {margin:0px;}'''$body);
  422.                     $mailLogs[] = array(
  423.                         'date' => $item->getSentDate(),
  424.                         'time' => $item->getSentDate(),
  425.                         'type' => 'follow-up',
  426.                         'responsible' => '',
  427.                         'templateId' => $setting $setting->getTemplateId() : 0,
  428.                         'isExpired' => $item->getIsExpired(),
  429.                         'subject' => $followupSubject,
  430.                         'body' => str_replace('&nbsp;',' ',strip_tags($body)),
  431.                         'templateTitle' => $templateTitle,
  432.                         'emails' => ''
  433.                     );
  434.                 }
  435.             } else{
  436.                 $mailLogs[] = array(
  437.                     'date' => $item->getSentDate(),
  438.                     'time' => $item->getSentDate(),
  439.                     'type' => 'follow-up',
  440.                     'responsible' => '',
  441.                     'templateId' => $setting $setting->getTemplateId() : 0,
  442.                     'isExpired' => $item->getIsExpired(),
  443.                     'subject' => $followupSubject,
  444.                     'body' => str_replace('&nbsp;',' ',strip_tags($followupBody)),
  445.                     'templateTitle' => $templateTitle,
  446.                     'emails' => ""
  447.                 );
  448.             }
  449.         }
  450.         $jobEmails $entityManager->getRepository(\App\Entity\CrmJobConfirmationMails::class)->findBy(array('enquiryId' => $id));
  451.         foreach($jobEmails as $item){
  452.             $body unserialize(base64_decode($item->getBody()),[]);
  453.             $emailTo unserialize($item->getRecipientEmail(),[]);
  454.             $mailLogs[] = array(
  455.                 'date' => $item->getSentDate(),
  456.                 'time' => $item->getSentDate(),
  457.                 'type' => 'job',
  458.                 'templateId' => $body['mail_template'],
  459.                 'subject' => $body['mail_subject'],
  460.                 'body' => str_replace('&nbsp;',' ',str_replace('&nbsp;',' ',strip_tags($body['mail_body']))),
  461.                 'emails' => implode(',',$emailTo)
  462.             );
  463.         }
  464.         $listMailData $mailLogs;
  465.         return $this->render('manage/accounts/view-email-enquiry.html.twig', [
  466.             'email_data' => $listMailData,
  467.             'enquiries' => $crmEnquiries,
  468.         ]);
  469.     }
  470.     #[Route('/enquiry/job-summary/{id}'name'job_summary'methods: ['GET'])]
  471.     public function viewJobSummary(CrmEnquiries $crmEnquiries,  EntityManagerInterface $entityManager,$id): Response
  472.     {
  473.         $enquiryDescriptions $entityManager->getRepository(\App\Entity\CrmEnquiryDescriptions::class)->findBy(array('enquiryId' => $id));
  474.         
  475.         return $this->render('manage/accounts/view-job-summary.html.twig', [
  476.             'summary' => $enquiryDescriptions,
  477.             'enquiries' => $crmEnquiries,
  478.         ]);
  479.     }
  480.     #[Route('/enquiry/payment-schedule/{id}'name'payment_schedule'methods: ['GET'])]
  481.     public function viewPaymentSchedule(CrmEnquiries $crmEnquiries,  EntityManagerInterface $entityManager,$id): Response
  482.     {
  483.         $paymentSchedule $entityManager->getRepository(\App\Entity\CrmEnquiriesPaymentSchedule::class)->findBy(array('enquiryId' => $id));
  484.         
  485.         return $this->render('manage/accounts/view-payment-schedule.html.twig', [
  486.             'payment_schedule' => $paymentSchedule,
  487.             'enquiries' => $crmEnquiries,
  488.         ]);
  489.     }
  490.     #[Route('/enquiry/followup/{id}'name'followup_view'methods: ['GET'])]
  491.     public function viewFollowup(CrmEnquiries $crmEnquiries,  EntityManagerInterface $entityManager,$id): Response
  492.     {
  493.         $crmFollowup $entityManager->getRepository(\App\Entity\CrmFollowup::class)->findBy(array('enquiryId' => $id));
  494.         return $this->render('manage/accounts/view-followup-enquiry.html.twig', [
  495.             'followup' => $crmFollowup,
  496.             'enquiries' => $crmEnquiries,
  497.         ]);
  498.     }
  499. }