src/Controller/ManageAccountsController.php line 31

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