<?php
namespace App\Controller;
use App\Entity\TrashCrmEnquiries;
use App\Entity\CrmEnquiryQuotes;
use App\Entity\CrmEnquiriesJobBooked;
use App\Entity\CrmEnquiryPriorities;
use App\Entity\CrmEnquiriesPaymentSchedule;
use App\Entity\CrmFollowup;
use App\Entity\CrmEnquiryScheduleSms;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use App\Repository\EnquiriesRepository;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
use App\Form\Filters\EnquiriesPageFilter;
#[Route('/trash-enquiries')]
class TrashEnquiriesController extends AbstractController
{
#[Route('/customer-view/{id}', name: 'trash_enquiries_customer_view', methods: ['GET'])]
public function view(TrashCrmEnquiries $crmEnquiries, EntityManagerInterface $entityManager): Response
{
return $this->render('trash-enquiries/customer-view.html.twig', [
'enquiries' => $crmEnquiries,
]);
}
#[Route('/view-quote/{id}', name: 'trash_quote_view', methods: ['GET'])]
public function viewQuote(TrashCrmEnquiries $crmEnquiries, EntityManagerInterface $entityManager,$id): Response
{
$crmEnquiryQuotes = $entityManager->getRepository(\App\Entity\TrashCrmEnquiryQuotes::class)->findOneBy(array('enquiryId' => $id));
return $this->render('trash-enquiries/view-quote-enquiry.html.twig', [
'quote' => $crmEnquiryQuotes,
'enquiries' => $crmEnquiries,
]);
}
#[Route('/view-job/{id}', name: 'trash_job_view', methods: ['GET'])]
public function viewJob(TrashCrmEnquiries $crmEnquiries, EntityManagerInterface $entityManager,$id): Response
{
$crmEnquiriesJobBooked = $entityManager->getRepository(\App\Entity\TrashCrmEnquiriesJobBooked::class)->findBy(array('enquiryId' => $id));
return $this->render('trash-enquiries/view-job-enquiry.html.twig', [
'job' => $crmEnquiriesJobBooked,
'enquiries' => $crmEnquiries,
]);
}
#[Route('/view-priority/{id}', name: 'trash_priority_view', methods: ['GET'])]
public function viewPriority(TrashCrmEnquiries $crmEnquiries, EntityManagerInterface $entityManager,$id): Response
{
$crmEnquiryPriorities = $entityManager->getRepository(\App\Entity\TrashCrmEnquiryPriorities::class)->findBy(array('enquiryId' => $id));
return $this->render('trash-enquiries/view-priority-enquiry.html.twig', [
'priority' => $crmEnquiryPriorities,
'enquiries' => $crmEnquiries,
]);
}
#[Route('/job-summary/{id}', name: 'trash_job_summary', methods: ['GET'])]
public function viewJobSummary(TrashCrmEnquiries $crmEnquiries, EntityManagerInterface $entityManager,$id): Response
{
$enquiryDescriptions = $entityManager->getRepository(\App\Entity\TrashCrmEnquiryDescriptions::class)->findBy(array('enquiryId' => $id));
return $this->render('trash-enquiries/view-job-summary.html.twig', [
'summary' => $enquiryDescriptions,
'enquiries' => $crmEnquiries,
]);
}
#[Route('/payment-schedule/{id}', name: 'trash_payment_schedule', methods: ['GET'])]
public function viewPaymentSchedule(TrashCrmEnquiries $crmEnquiries, EntityManagerInterface $entityManager,$id): Response
{
$paymentSchedule = $entityManager->getRepository(\App\Entity\TrashCrmEnquiriesPaymentSchedule::class)->findBy(array('enquiryId' => $id));
return $this->render('trash-enquiries/view-payment-schedule.html.twig', [
'trash_payment_schedule' => $paymentSchedule,
'enquiries' => $crmEnquiries,
]);
}
#[Route('/view-followup/{id}', name: 'trash_followup_view', methods: ['GET'])]
public function viewFollowup(TrashCrmEnquiries $crmEnquiries, EntityManagerInterface $entityManager,$id): Response
{
$crmFollowup = $entityManager->getRepository(\App\Entity\TrashCrmFollowup::class)->findBy(array('enquiryId' => $id));
return $this->render('trash-enquiries/view-followup-enquiry.html.twig', [
'followup' => $crmFollowup,
'enquiries' => $crmEnquiries,
]);
}
#[Route('/view-sms/{id}', name: 'trash_sms_view', methods: ['GET'])]
public function viewSms($id, TrashCrmEnquiries $crmEnquiries, EntityManagerInterface $entityManager): Response
{
$crmEnquiryScheduleSms = $entityManager->getRepository(\App\Entity\TrashCrmEnquiryScheduleSms::class)->findBy(array('enquiryId' => $id));
return $this->render('trash-enquiries/view-sms-enquiry.html.twig', [
'sms_data' => $crmEnquiryScheduleSms,
'enquiries' => $crmEnquiries,
]);
}
#[Route('/view-email/{id}', name: 'trash_email_view', methods: ['GET'])]
public function viewEmail($id, TrashCrmEnquiries $crmEnquiries, EntityManagerInterface $entityManager): Response
{
$listMailData =[];
$mailLogs = [];
$crmId = $crmEnquiries->getCrmId();
$welcomeEmails = $entityManager->getRepository(\App\Entity\TrashCrmEnquiryWelcomeMails::class)->findBy(array('crmId' => $crmId, 'enquiryId' => $id));
foreach($welcomeEmails as $item){
$mailTo ='';
$body = unserialize(base64_decode($item->getBody()),[]);
$emailTo = unserialize($item->getRecipientEmail(),[]);
if (is_string($emailTo)){
$mailTo = $emailTo;
}else{
$mailTo = implode(',',$emailTo);
}
$mailLogs[] = array(
'id' => $item->getId(),
'enquiryId' => $item->getEnquiryId(),
'settingId' => 0,
'sentDate' => $item->getSentDate(),
'date' => $item->getSentDate()->format('Y-m-d H:i:s'),
'time' => $item->getSentDate()->format('H:i:s'),
//'responsible' => isset($body['user_id']) ? $entityManager->getRepository(\App\Entity\User::class)->findUserByField('userId',$body['user_id'], 'snap') : '',
'type' => 'general',
'templateId' => $body['mail_template'],
'subject' => $body['mail_subject'],
'body' => str_replace(' ',' ',strip_tags($body['mail_body'])),
'emails' => $mailTo
);
}
$invoiceMails = $entityManager->getRepository(\App\Entity\TrashCrmInvoiceMails::class)->findBy(array('crmId' => $crmId,'enquiryId' => $id));
foreach($invoiceMails as $item){
$body = unserialize(base64_decode($item->getBody()),[]);
$templateId = 0;
$responsible = '';
$passign = $entityManager->getRepository(\App\Entity\TrashCrmEnquiriesPaymentAssigned::class)->findOneBy(array('scheduleId' => $item->getPaymentId()));
if($passign){
$responsible = $passign->getPaymentAssigned();
}
$responsible = $item->getUserId();
$invSubject = '';
$invBody = '';
if($item->getType() == 'invoice'){
if(isset($body['pdfData']['params']['reqData']['mail_data']['h_mail_template'])){
$templateId = $body['pdfData']['params']['reqData']['mail_data']['h_mail_template'];
$invSubject = $body['pdfData']['params']['reqData']['mail_data']['h_mail_subject'];
$invBody = $body['pdfData']['params']['reqData']['mail_data']['h_mail_body'];
}
$type = 'invoice';
}else{
if(isset($body['mail_data']['templateId'])){
$templateId = $body['mail_data']['templateId'];
$invSubject = $body['mail_data']['subject'];
$invBody = $body['mail_data']['body'];
}
$type = 'payment_receipt';
}
if(!empty($item->getSentDate())){
$emailTo = unserialize($item->getRecipientEmail(),[]);
$mailLogs[] = array(
'date' => $item->getSentDate(),
'time' => $item->getSentDate(),
//'responsible' => $entityManager->getRepository(\App\Entity\User::class)->findUserByField('userId',$responsible, 'snap'),
'type' => $type,
'templateId' => $templateId,
'user_id' => $item->getUserId(),
'subject' => $invSubject,
'body' => str_replace(' ',' ',strip_tags($invBody)),
'emails' => implode(',',$emailTo)
);
}
}
$quoteMails = $entityManager->getRepository(\App\Entity\TrashCrmEnquiryMails::class)->findBy(array('enquiryId' => $id));
foreach($quoteMails as $item){
$body = unserialize(base64_decode($item->getBody()),[]);
$templateId = 0;
$responsible = '';
if(isset($body['mail_data']['h_mail_template'])){
$templateId = $body['mail_data']['h_mail_template'];
}
if(isset($body['quoteResponsibleId'])){
$responsible = $body['quoteResponsibleId'];
}
$quote_user_id = '';
if(isset($body['items']['user_id'])){
$quote_user_id = $body['items']['user_id'];
}
$templateTitle = '';
$quote = $entityManager->getRepository(\App\Entity\TrashCrmEnquiryQuotes::class)
->findOneBy(array('enquiryId' => $id, 'crmId' => $crmId));
$bodyContent = str_replace(' ',' ',strip_tags($body['mail_data']['h_mail_body']));
$bodyContent = str_replace('p {margin:0px;}', '', $bodyContent);
$bodyContent = str_replace(' ', ' ', $bodyContent);
$emailTo = unserialize($item->getRecipientEmail(),[]);
$template = $entityManager>getRepository(\App\Entity\TrashCrmMailTemplate::class)->findOneBy(array('id' =>$templateId, 'crmId' => $crmId));
if ($template) {
$templateTitle = $template->getTitle();
}
$mailLogs[] = array(
'date' => $item->getSentDate(),
'time' => $item->getSentDate(),
//'responsible' => $quote ? $entityManager->getRepository(\App\Entity\User::class)->findUserByField('userId', $quote->getArrangedBy(), 'snap') : '',
'type' => 'quote',
'templateId' => $templateId,
'templateTitle' => $templateTitle,
'user_id' => $quote_user_id,
'subject' => $body['mail_data']['h_mail_subject'],
'body' => $bodyContent,
'emails' => implode(',',$emailTo)
);
}
$followupEmails = $entityManager->getRepository(\App\Entity\TrashCrmEmailFollowup::class)->findBy(array('enquiryId' => $id));
foreach($followupEmails as $item){
$setting = $entityManager->getRepository(\App\Entity\TrashCrmFollowupEmailSettings::class)
->findOneBy(array('crmId' => $crmId, 'settingId' => $item->getSettingId()));
$followupSubject = '';
$followupBody = '';
$crmFollowMailBody="";
if($setting){
//getbody
$crmFollowMailBody = $entityManager->getRepository(\App\Entity\SiteMailLogs::class)->findBy(array('crmId' => $crmId, 'templateId' => $setting->getTemplateId(), 'sourceId' => $item->getId()));
if(!$crmFollowMailBody){
$crmFollowMailTemplate = $entityManager->getRepository(\App\Entity\TrashCrmMailTemplate::class)->findOneBy(array('crmId' => $crmId, 'id' => $setting->getTemplateId()));
$followupSubject = $crmFollowMailTemplate->getSubject();
$followupBody = $crmFollowMailTemplate->getBody();
}
}
$templateTitle = '';
if($setting){
$template = $entityManager>getRepository(\App\Entity\TrashCrmMailTemplate::class)->findOneBy(array('id' => $setting->getTemplateId(), 'crmId' => $crmId));
if ($template) {
$templateTitle = $template->getTitle();
}
}
if($crmFollowMailBody){
foreach ($crmFollowMailBody as $mailBody) {
$body = unserialize(base64_decode($mailBody->getBody()))['body'];
$body = str_replace('p {margin:0px;}', '', $body);
$mailLogs[] = array(
'date' => $item->getSentDate(),
'time' => $item->getSentDate(),
'type' => 'follow-up',
'responsible' => '',
'templateId' => $setting ? $setting->getTemplateId() : 0,
'isExpired' => $item->getIsExpired(),
'subject' => $followupSubject,
//'body' => $body['body'],
'body' => str_replace(' ',' ',strip_tags($body)),
'templateTitle' => $templateTitle,
'emails' => ''
);
}
} else{
$mailLogs[] = array(
'date' => $item->getSentDate(),
'time' => $item->getSentDate(),
'type' => 'follow-up',
'responsible' => '',
'templateId' => $setting ? $setting->getTemplateId() : 0,
'isExpired' => $item->getIsExpired(),
'subject' => $followupSubject,
//'body' => $body['body'],
'body' => str_replace(' ',' ',strip_tags($followupBody)),
'templateTitle' => $templateTitle,
'emails' => ""
);
}
}
$jobEmails = $entityManager->getRepository(\App\Entity\TrashCrmJobConfirmationMails::class)->findBy(array('enquiryId' => $id));
foreach($jobEmails as $item){
$body = unserialize(base64_decode($item->getBody()),[]);
$emailTo = unserialize($item->getRecipientEmail(),[]);
$mailLogs[] = array(
'date' => $item->getSentDate(),
'time' => $item->getSentDate(),
//'responsible' => isset($body['responsible']) ? $entityManager->getRepository(\App\Entity\User::class)->findUserByField('userId', $body['responsible'], 'snap') : '',
'type' => 'job',
'templateId' => $body['mail_template'],
'subject' => $body['mail_subject'],
'body' => str_replace(' ',' ',str_replace(' ',' ',strip_tags($body['mail_body']))),
'emails' => implode(',',$emailTo)
);
}
$listMailData = $mailLogs;
return $this->render('trash-enquiries/view-email-enquiry.html.twig', [
'email_data' => $listMailData,
'enquiries' => $crmEnquiries,
]);
}
}