756 lines
30 KiB
PHP
756 lines
30 KiB
PHP
<?php
|
|
|
|
namespace App\Controllers;
|
|
|
|
use App\Controllers\BaseController;
|
|
use CodeIgniter\HTTP\ResponseInterface;
|
|
use App\Models\TicketMasterModel;
|
|
use App\Models\TicketClaimStatusModel;
|
|
use App\Models\ClientModel;
|
|
use App\Models\TicketHistoryModel;
|
|
use App\Models\TicketMailTemplateModel;
|
|
use App\Models\TicketMessageModel;
|
|
use App\Models\TicketNoteModel;
|
|
use App\Models\UserModel;
|
|
use DOMDocument;
|
|
use Psr\Log\LoggerInterface;
|
|
use Kint\Kint;
|
|
use App\Models\EmployeeModel;
|
|
|
|
use App\Helpers\MailHelper;
|
|
|
|
use CodeIgniter\API\ResponseTrait;
|
|
|
|
class TicketController extends BaseController
|
|
{
|
|
use ResponseTrait;
|
|
|
|
protected $myLogger;
|
|
protected $ticketType;
|
|
protected $priorityType;
|
|
protected $relationshipType;
|
|
protected $modeOFIntimate;
|
|
protected $claimType;
|
|
protected $claimStatus;
|
|
protected $placeHolders;
|
|
|
|
protected $clientModel;
|
|
protected $ticketMasterModel;
|
|
protected $ticketHistoryModel;
|
|
protected $ticketMailTemplateModel;
|
|
protected $ticketMessageModel;
|
|
protected $ticketNoteModel;
|
|
protected $triggerType;
|
|
protected $userModel;
|
|
protected $employeeModel;
|
|
|
|
public function __construct()
|
|
{
|
|
$this->myLogger = \Config\Services::mylogger();
|
|
|
|
$this->ticketMasterModel = new TicketMasterModel();
|
|
|
|
$this->ticketType = [1 => "Claim-GMC", 2 => "Claim-GPA", 3 => "EDLI", 4 => "GTLI"];
|
|
$this->priorityType = [
|
|
1 => "Low",
|
|
2 => "Medium",
|
|
3 => "High",
|
|
4 => "Urgent",
|
|
5 => "Emergency",
|
|
6 => "Critical"
|
|
];
|
|
$this->relationshipType = [
|
|
"self" => "Self",
|
|
"spouse" => "Spouse",
|
|
"son" => "Son",
|
|
"daughter" => "Daughter",
|
|
"father" => "Father",
|
|
"mother" => "Mother",
|
|
"father-in-law" => "Father-in-Law",
|
|
"mother-in-law" => "Mother-in-Law"
|
|
];
|
|
$this->modeOFIntimate = [
|
|
1 => "In Person",
|
|
2 => "Courier",
|
|
3 => "Online Mode - Email",
|
|
4 => "Online Mode - To TPA"
|
|
];
|
|
$this->claimType = [
|
|
1 => [
|
|
1 => "Main",
|
|
2 => "OPD",
|
|
3 => "Pre ReOpen",
|
|
4 => "Post ReOpen",
|
|
],
|
|
2 => [
|
|
1 => "TTD",
|
|
2 => "PTD",
|
|
3 => "PPD",
|
|
4 => "Death",
|
|
]
|
|
];
|
|
$this->triggerType = [
|
|
1 => "Trigger 1",
|
|
2 => "Trigger 2",
|
|
3 => "Trigger 3",
|
|
4 => "Trigger 4",
|
|
5 => "Trigger 5",
|
|
6 => "Trigger 6",
|
|
7 => "Trigger 7"
|
|
];
|
|
|
|
$this->placeHolders = [
|
|
|
|
'((ACM))' => 'acm',
|
|
'((ACM_CONTACT))' => 'acm_mobile',
|
|
'((EMPLOYEE_NAME))' => 'emp_name',
|
|
'((EMPLOYEE_ID))' => 'emp_code',
|
|
'((CORPORATE_NAME))' => 'client_name',
|
|
'((INSURED_NAME))' => 'insured_name',
|
|
'((CLAIM_NO))' => 'claim_number',
|
|
'((RELATIONSHIP))' => 'relationship',
|
|
];
|
|
|
|
$this->ticketMasterModel = new TicketMasterModel();
|
|
$this->claimStatus = new TicketClaimStatusModel();
|
|
$this->clientModel = new ClientModel();
|
|
$this->ticketHistoryModel = new TicketHistoryModel();
|
|
$this->ticketMailTemplateModel = new TicketMailTemplateModel();
|
|
$this->ticketNoteModel = new TicketNoteModel();
|
|
$this->ticketMessageModel = new TicketMessageModel();
|
|
$this->userModel = new UserModel();
|
|
$this->employeeModel = new EmployeeModel();
|
|
}
|
|
|
|
public function ticketList()
|
|
{
|
|
if ($this->request->is('get')) {
|
|
$data['page_name'] = "Claims";
|
|
$data['ticket_type'] = $this->ticketType;
|
|
$data['claim_status'] = $this->claimStatus->select('id,ticket_type,claim_status')->where('is_active', 1)->findAll();
|
|
$data['client_list'] = $this->clientModel->select('id,client_name')->where('is_active', 1)->findAll();
|
|
$data['ticket_data'] = $this->ticketSearch(1);
|
|
return $this->loadLayout('ticket_search', $data);
|
|
} else {
|
|
|
|
$data['ticket_data'] = $this->ticketSearch();
|
|
$html = view('ticket_list', $data);
|
|
return $this->respond(['status' => true, 'html' => $html], 200);
|
|
}
|
|
}
|
|
|
|
public function ticketSearch($action = null)
|
|
{
|
|
//action 1 get last 100 rows, action 2 filter and get all rows related to that
|
|
if ($action == 1) {
|
|
$data = $this->ticketMasterModel
|
|
->select('ticket_master.id, ticket_claim_status.claim_status as status,
|
|
ticket_master.claim_number as claim_no,ticket_master.tpa_id,ticket_master.emp_name,
|
|
insurers.name as insurer_name, clients.client_name,
|
|
DATE_FORMAT(ticket_master.created_at, "%d-%m-%Y") as tat')
|
|
->join('insurers', 'insurers.id = ticket_master.insurer_id and insurers.is_active = 1', 'left')
|
|
->join('clients', 'clients.id = ticket_master.client_id and clients.is_active = 1', 'left')
|
|
->join('ticket_claim_status', 'ticket_claim_status.id = ticket_master.claim_status_id and ticket_claim_status.is_active = 1', 'left')
|
|
->where('ticket_master.is_active', 1)
|
|
->orderBy('ticket_master.id', 'DESC')
|
|
->limit(100)
|
|
->findAll();
|
|
|
|
return $data;
|
|
} else {
|
|
$search_data = $this->request->getPost();
|
|
// print_r($search_data);
|
|
$where = [];
|
|
foreach ($search_data as $search_objects => $key) {
|
|
if ($key != null && $key != '' && $key != 0) {
|
|
$where[$search_objects] = $key;
|
|
}
|
|
}
|
|
// print_rr($where);
|
|
$data = $this->ticketMasterModel
|
|
->select('ticket_master.id, ticket_claim_status.claim_status as status,
|
|
ticket_master.claim_number as claim_no,ticket_master.tpa_id,ticket_master.emp_name,
|
|
insurers.name as insurer_name, clients.client_name,
|
|
DATE_FORMAT(ticket_master.created_at, "%d-%m-%Y") as tat')
|
|
->join('insurers', 'insurers.id = ticket_master.insurer_id and insurers.is_active = 1', 'left')
|
|
->join('clients', 'clients.id = ticket_master.client_id and clients.is_active = 1', 'left')
|
|
->join('ticket_claim_status', 'ticket_claim_status.id = ticket_master.claim_status_id and ticket_claim_status.is_active = 1', 'left')
|
|
->where('ticket_master.is_active', 1)
|
|
->where($where)
|
|
->findAll();
|
|
// print_rr($data);
|
|
// log_message('error',' Claims Master Data '.json_encode($data));die();
|
|
// print_rr($data);die();
|
|
return $data;
|
|
}
|
|
}
|
|
|
|
public function ticket_form($ticket_type)
|
|
{
|
|
$data = $this->ticket_form_data($ticket_type);
|
|
// dd($data);
|
|
return $this->loadLayout('ticket_form_handler', $data);
|
|
}
|
|
|
|
public function ticket_form_data($ticket_type)
|
|
{
|
|
$this->myLogger->logme('error', "Fetching ticket form data for Ticket Type: $ticket_type");
|
|
|
|
$data = [
|
|
'ticket_form' => 1,
|
|
'selected_ticket_type' => $ticket_type,
|
|
'ticket_type' => $this->ticketType,
|
|
'priorityType' => $this->priorityType,
|
|
'relationshipType' => $this->relationshipType,
|
|
'modeOFIntimate' => $this->modeOFIntimate
|
|
];
|
|
|
|
switch ($ticket_type) {
|
|
case 2:
|
|
$data['ticket_form'] = 'GPA';
|
|
break;
|
|
case 3:
|
|
$data['ticket_form'] = 'EDLI';
|
|
break;
|
|
case 4:
|
|
$data['ticket_form'] = 'GTLI';
|
|
break;
|
|
}
|
|
|
|
// Fetch ACM Users
|
|
$db = db_connect();
|
|
$data['acms'] = $db->table('user_profiles')
|
|
->select('id, first_name')
|
|
->where(['is_active' => 1, 'role' => 3])
|
|
->get()
|
|
->getResultArray();
|
|
|
|
// Fetch Claim Status
|
|
$data['claim_status'] = $this->claimStatus
|
|
->select('*')
|
|
->where(['is_active' => 1, 'ticket_type' => $ticket_type])
|
|
->get()
|
|
->getResultArray();
|
|
|
|
if ($ticket_type == 1) {
|
|
$data['claim_type'] = $this->claimType[1];
|
|
} else {
|
|
$data['claim_type'] = $this->claimType[2];
|
|
}
|
|
|
|
$this->myLogger->logme('error', "Ticket form data fetched successfully for Ticket Type: $ticket_type");
|
|
|
|
return $data;
|
|
}
|
|
|
|
public function view_ticket($ticket_id)
|
|
{
|
|
// $ticket_data = $this->ticketMasterModel->where('id', $ticket_id)->where('is_active', 1)->first();
|
|
$ticket_data = $this->ticketMasterModel->getTicketDataByTicketID($ticket_id);
|
|
$ticket_data = $this->formatDateForClaim($ticket_data, 'd/m/Y');
|
|
// dd($ticket_data);
|
|
$template_data = $this->ticketMasterModel->getTemplateDataByTicketID($ticket_id);
|
|
$template_data['mail_content'] = $this->replacePlaceholders($template_data['mail_content'], $ticket_data);
|
|
$template_data['subject'] = $this->replacePlaceholders($template_data['subject'], $ticket_data);
|
|
|
|
$data = $this->ticket_form_data($ticket_data['ticket_type_id']);
|
|
$data['ticket_data'] = $ticket_data;
|
|
$data['reply_data'] = $template_data;
|
|
$data['placeHolders'] = $this->placeHolders;
|
|
$data['message_data'] = $this->getTicketMessage($ticket_id);
|
|
$data['view_ticket_page'] = [];
|
|
$data['member_data'] = $this->employeeModel->getEmployeeByEmployeeCode($ticket_data['emp_code']);
|
|
$data['ticket_history'] = $this->ticketHistory($ticket_id);
|
|
// dd($data);
|
|
|
|
return $this->loadLayout('ticket_edit_onbording', $data);
|
|
}
|
|
|
|
public function formatDateForClaim($ticket_data, $out_put_format = 'Y-m-d')
|
|
{
|
|
|
|
if (empty($ticket_data['doa'])) {
|
|
$ticket_data['doa'] = null;
|
|
} else {
|
|
$ticket_data['doa'] = change_date_format($ticket_data['doa'], null, $out_put_format);
|
|
}
|
|
|
|
if (empty($ticket_data['dod'])) {
|
|
$ticket_data['dod'] = null;
|
|
} else {
|
|
$ticket_data['dod'] = change_date_format($ticket_data['dod'], null, $out_put_format);
|
|
}
|
|
|
|
if (empty($ticket_data['dob'])) {
|
|
$ticket_data['dob'] = null;
|
|
} else {
|
|
$ticket_data['dob'] = change_date_format($ticket_data['dob'], null, $out_put_format);
|
|
}
|
|
|
|
if (empty($ticket_data['date_of_join'])) {
|
|
$ticket_data['date_of_join'] = null;
|
|
} else {
|
|
$ticket_data['date_of_join'] = change_date_format($ticket_data['date_of_join'], null, $out_put_format);
|
|
}
|
|
|
|
if (empty($ticket_data['date_of_incep'])) {
|
|
$ticket_data['date_of_incep'] = null;
|
|
} else {
|
|
$ticket_data['date_of_incep'] = change_date_format($ticket_data['date_of_incep'], null, $out_put_format);
|
|
}
|
|
|
|
if (empty($ticket_data['date_of_accident'])) {
|
|
$ticket_data['date_of_accident'] = null;
|
|
} else {
|
|
$ticket_data['date_of_accident'] = change_date_format($ticket_data['date_of_accident'], null, $out_put_format);
|
|
}
|
|
|
|
if (empty($ticket_data['date_of_death'])) {
|
|
$ticket_data['date_of_death'] = null;
|
|
} else {
|
|
$ticket_data['date_of_death'] = change_date_format($ticket_data['date_of_death'], null, $out_put_format);
|
|
}
|
|
|
|
if (empty($ticket_data['date_of_intimat'])) {
|
|
$ticket_data['date_of_intimat'] = null;
|
|
} else {
|
|
$ticket_data['date_of_intimat'] = change_date_format($ticket_data['date_of_intimat'], null, $out_put_format);
|
|
}
|
|
|
|
return $ticket_data;
|
|
}
|
|
|
|
public function createTicket()
|
|
{
|
|
$ticket_data = $this->request->getPost();
|
|
$ticket_data = $this->formatDateForClaim($ticket_data);
|
|
// print_rr($ticket_data); die;
|
|
|
|
if ($ticket_data) {
|
|
$return_value = $this->ticketMasterModel->insert($ticket_data);
|
|
if ($return_value) {
|
|
//mail trigger part
|
|
$mail_responce = $this->sendAutoMailTrigger($return_value);
|
|
return $this->respond(['status' => true, 'code' => 200, 'data' => $ticket_data, "message" => "Claim created successfully", 'mail_responce' => $mail_responce], 200);
|
|
} else {
|
|
return $this->respond(['status' => false, 'code' => 404, 'message' => 'Failed to create claim'], 200);
|
|
}
|
|
} else {
|
|
return $this->respond(['status' => false, 'code' => 404, 'message' => 'claim data not found'], 200);
|
|
}
|
|
}
|
|
|
|
public function updateTicket()
|
|
{
|
|
$ticket_id = $this->request->getPost('ticket_master_id');
|
|
$ticket_data = $this->request->getPost();
|
|
$ticket_data = $this->formatDateForClaim($ticket_data);
|
|
// print_rr($ticket_data); die;
|
|
$old_ticket_data = $this->ticketMasterModel->where('id', $ticket_id)->where('is_active', 1)->first();
|
|
|
|
if ($ticket_data) {
|
|
$return_value = $this->ticketMasterModel->where('id', $ticket_id)->set($ticket_data)->update();
|
|
if ($return_value) {
|
|
|
|
//mail trigger part
|
|
$mail_responce = $this->sendAutoMailTrigger($ticket_id);
|
|
|
|
return $this->respond(['status' => true, 'code' => 200, 'data' => $ticket_data, "message" => "Claim updated successfully", 'mail_responce' => $mail_responce], 200);
|
|
} else {
|
|
return $this->respond(['status' => false, 'code' => 404, 'message' => 'Failed to update claim'], 200);
|
|
}
|
|
} else {
|
|
return $this->respond(['status' => false, 'code' => 404, 'message' => 'claim data not found'], 200);
|
|
}
|
|
}
|
|
|
|
public function mailTemplate()
|
|
{
|
|
$data = [];
|
|
$data['trigger_type'] = $this->triggerType;
|
|
$data['policy_type'] = $this->ticketType;
|
|
$data['placeHolders'] = $this->placeHolders;
|
|
$data['ticket_data'] = $this->ticketMailTemplateModel->where('is_active', 1)->findAll();
|
|
$data['ticket_type'] = $this->ticketType;
|
|
$data['trigger_type'] = $this->triggerType;
|
|
return $this->loadLayout('ticket_mail_template', $data);
|
|
}
|
|
|
|
public function crudTemplate($action)
|
|
{
|
|
//action 1 is create. action 2 is edit and action 3 is delete
|
|
if ($action == 1) {
|
|
$received_data = $this->request->getPost();
|
|
if (isset($received_data['id']) && $received_data['id'] != '') {
|
|
$status = $this->ticketMailTemplateModel->save($received_data);
|
|
if ($status) {
|
|
return $this->respond(['status' => true], 200);
|
|
} else {
|
|
return $this->respond(['status' => false], 200);
|
|
}
|
|
} else {
|
|
$status = $this->ticketMailTemplateModel->save($received_data);
|
|
if ($status) {
|
|
return $this->respond(['status' => true], 200);
|
|
} else {
|
|
return $this->respond(['status' => false], 200);
|
|
}
|
|
}
|
|
} elseif ($action == 2) {
|
|
$table_id = (int)$this->request->getPost('id');
|
|
$data = $this->ticketMailTemplateModel->where('id', $table_id)->where('is_active', 1)->first();
|
|
if ($data) {
|
|
return $this->respond(['status' => true, 'data' => $data], 200);
|
|
} else {
|
|
return $this->respond(['status' => false], 404);
|
|
}
|
|
} elseif ($action == 3) {
|
|
$table_id = (int)$this->request->getPost('id');
|
|
|
|
$sql = "update ticket_mail_template set is_active = 0 where id = $table_id ";
|
|
$status = $this->ticketMailTemplateModel->query($sql);
|
|
if ($status) {
|
|
return $this->respond(['status' => true], 200);
|
|
} else {
|
|
return $this->respond(['status' => false], 404);
|
|
}
|
|
}
|
|
}
|
|
|
|
public function crudNote($action)
|
|
{
|
|
// action = 1 is read, action 2 is insert/update
|
|
if ($action == 1) {
|
|
$ticket_master_id = $this->request->getPost('id');
|
|
if (isset($ticket_master_id) && $ticket_master_id != '') {
|
|
$data = $this->ticketNoteModel->where('is_active', 1)->where('ticket_id', $ticket_master_id)->first();
|
|
if ($data) {
|
|
return $this->respond(['status' => true, 'data' => $data], 200);
|
|
} else {
|
|
return $this->respond(['status' => false], 200);
|
|
}
|
|
}
|
|
} elseif ($action == 2) {
|
|
$data = $this->request->getPost();
|
|
// if (isset($data['id']) && $data['id'] != ''){
|
|
$status = $this->ticketNoteModel->save($data);
|
|
// }
|
|
if ($status) {
|
|
return $this->respond(['status' => true], 200);
|
|
} else {
|
|
return $this->respond(['status' => false], 200);
|
|
}
|
|
}
|
|
}
|
|
|
|
public function saveReply()
|
|
{
|
|
|
|
$received_data = $this->request->getPost();
|
|
// print_r($received_data); die;
|
|
$received_data['sender'] = 'staff';
|
|
$status = $this->ticketMessageModel->insert($received_data);
|
|
if ($status) {
|
|
$return = $this->sendReplyMessage($received_data);
|
|
return $this->respond(['status' => true, 'code' => 200, 'return' => $return], 200);
|
|
} else {
|
|
return $this->respond(['status' => false, 'code' => 404], 404);
|
|
}
|
|
}
|
|
|
|
public function getTicketMessage($ticket_master_id)
|
|
{
|
|
// log_message('error','Function called');die();
|
|
// $ticket_master_id = $this->request->getPost('id');
|
|
$user_id = get_session_userid();
|
|
$logged_user = $this->userModel->select('first_name,last_name,profile')->where('id', $user_id)->first();
|
|
$dataToSend = [];
|
|
$dataToSend['user_name'] = $logged_user['first_name'] . ' ' . $logged_user['last_name'];
|
|
$dataToSend['messages'] = $this->ticketMessageModel->where('is_active', 1)
|
|
->where('ticket_id', $ticket_master_id)->orderBy('created_at', 'DESC')
|
|
->findAll();
|
|
foreach ($dataToSend['messages'] as $message) {
|
|
$mail_content_converted = $this->convertHtmlToText($message['mail_content']);
|
|
$message['mail_content'] = $mail_content_converted;
|
|
}
|
|
$dataToSend['emp_name'] = $this->ticketMasterModel->select('emp_name')
|
|
->where('id', $ticket_master_id)->where('is_active', 1)
|
|
->first()['emp_name'];
|
|
// dd($dataToSend);
|
|
if ($dataToSend) {
|
|
return $dataToSend;
|
|
} else {
|
|
$data = [];
|
|
return $data;
|
|
}
|
|
}
|
|
|
|
public function convertHtmlToText($html)
|
|
{
|
|
$dom = new DOMDocument();
|
|
@$dom->loadHTML($html);
|
|
return strip_tags($dom->saveHTML());
|
|
}
|
|
|
|
//---- Email Trigger Part----------------------------------------------------------------------------------------------
|
|
|
|
public function constructMailContent($ticket_id)
|
|
{
|
|
$this->myLogger->logme('error', "Constructing mail content for Ticket ID: $ticket_id");
|
|
|
|
try {
|
|
// Fetch Ticket Data
|
|
$ticket_data = $this->ticketMasterModel->getTicketDataByTicketID($ticket_id);
|
|
|
|
if (!$ticket_data) {
|
|
$this->myLogger->logme('ERROR', "No ticket data found for Ticket ID: $ticket_id");
|
|
return null;
|
|
}
|
|
|
|
$this->myLogger->logme('error', "Fetched ticket data: " . json_encode($ticket_data));
|
|
|
|
// Fetch Email Template Data
|
|
$template_data = $this->ticketMasterModel->getTemplateDataByTicketID($ticket_id);
|
|
|
|
if (!$template_data) {
|
|
$this->myLogger->logme('ERROR', "No email template found for Claim Status ID: " . $ticket_data['claim_status_id']);
|
|
return null;
|
|
}
|
|
|
|
$this->myLogger->logme('error', "Fetched email template: " . json_encode($template_data));
|
|
|
|
// Generate Email Content
|
|
$subject = $this->replacePlaceholders($template_data['subject'], $ticket_data);
|
|
$message = $this->replacePlaceholders($template_data['mail_content'], $ticket_data);
|
|
|
|
// Validate Essential Fields
|
|
if (empty($ticket_data['emp_mail'])) {
|
|
$this->myLogger->logme('ERROR', "Employee email is missing for Ticket ID: $ticket_id");
|
|
return null;
|
|
}
|
|
|
|
if (empty($subject) || empty($message)) {
|
|
$this->myLogger->logme('ERROR', "Generated email content is empty for Ticket ID: $ticket_id");
|
|
return null;
|
|
}
|
|
|
|
// Construct Mail Data
|
|
$mailData = [
|
|
'mail' => $ticket_data['emp_mail'],
|
|
'subject' => $subject,
|
|
'message' => $message,
|
|
'cc' => $ticket_data['common_mails'] ?? '',
|
|
'attachments' => []
|
|
];
|
|
|
|
$this->myLogger->logme('error', "Final Email Data");
|
|
|
|
return $mailData;
|
|
} catch (\Exception $e) {
|
|
$this->myLogger->logme('ERROR', "Exception in constructMailContent: " . $e->getMessage());
|
|
return null;
|
|
}
|
|
}
|
|
|
|
public function replacePlaceholders($content, $ticket_data)
|
|
{
|
|
$this->myLogger->logme('error', "Replacing placeholders in content");
|
|
|
|
if (!empty($ticket_data) && !empty($content)) {
|
|
foreach ($this->placeHolders as $key => $value) {
|
|
$replaceData = strtoupper($ticket_data[$value]) ?? '';
|
|
if ($value == "emp_code") {
|
|
$replaceData = $ticket_data[$value] ?? '';
|
|
}
|
|
$content = str_replace($key, $replaceData, $content);
|
|
}
|
|
}
|
|
|
|
$this->myLogger->logme('error', "Final content after placeholder replacement");
|
|
|
|
return $content;
|
|
}
|
|
|
|
//mail send function
|
|
public function sendTrigger($mail_content)
|
|
{
|
|
$this->myLogger->logme('error', "Sending email with content");
|
|
|
|
$response = MailHelper::send_email($mail_content);
|
|
|
|
$this->myLogger->logme('error', "Email sent response: " . json_encode($response));
|
|
|
|
return $response;
|
|
}
|
|
|
|
//reply mail part
|
|
public function sendReplyMessage($mail_data)
|
|
{
|
|
$this->myLogger->logme('error', "Preparing reply email for Ticket ID: " . $mail_data['ticket_id']);
|
|
|
|
$acm_mails = $this->ticketMasterModel->getTicketDataByTicketID($mail_data['ticket_id']);
|
|
|
|
if (!$acm_mails) {
|
|
$this->myLogger->logme('ERROR', "No ACM mails found for Ticket ID: " . $mail_data['ticket_id']);
|
|
return false;
|
|
}
|
|
|
|
$this->myLogger->logme('error', "Fetched ACM emails");
|
|
|
|
$emailData = [
|
|
'mail' => $mail_data['emp_mail'],
|
|
'subject' => $mail_data['mail_subject'],
|
|
'message' => $mail_data['mail_content'],
|
|
'common' => [],
|
|
'cc' => $acm_mails['common_mails'],
|
|
'attachments' => []
|
|
];
|
|
|
|
$this->myLogger->logme('error', "Final Reply Email Data");
|
|
|
|
return $this->sendTrigger($emailData);
|
|
}
|
|
|
|
//auto mail part
|
|
public function sendAutoMailTrigger($ticket_id)
|
|
{
|
|
$auto_mail_enable = $this->ticketMasterModel->getTemplateDataByTicketID($ticket_id);
|
|
|
|
$mail_responce = [];
|
|
if ($auto_mail_enable['is_auto_mail'] == 1) {
|
|
$mail_content = $this->constructMailContent($ticket_id);
|
|
$mail_responce = $this->sendTrigger($mail_content);
|
|
}
|
|
|
|
return $mail_responce;
|
|
}
|
|
|
|
//---- End Email Trigger Part----------------------------------------------------------------------------------------------
|
|
|
|
|
|
public function ticketHistory($ticket_id)
|
|
{
|
|
$sql = "SELECT
|
|
th.id,
|
|
th.field_name,
|
|
th.display_name,
|
|
th.old_value,
|
|
th.new_value,
|
|
th.created_at,
|
|
CONCAT(creator.first_name, ' ', creator.last_name) as modified_by,
|
|
-- Claim Status
|
|
old_status.claim_status as old_status_value,
|
|
new_status.claim_status as new_status_value,
|
|
|
|
-- Account Manager
|
|
CONCAT(old_account_manager.first_name, ' ', old_account_manager.last_name) as old_account_manager,
|
|
CONCAT(new_account_manager.first_name, ' ', new_account_manager.last_name) as new_account_manager,
|
|
|
|
-- Insured Employee ID Change
|
|
old_insured_emp.name as old_insured_id_name,
|
|
new_insured_emp.name as new_insured_id_name,
|
|
|
|
ticket_master.ticket_type_id
|
|
|
|
FROM
|
|
ticket_history th
|
|
|
|
-- Join for the user who made the change
|
|
LEFT JOIN user_profiles creator
|
|
ON th.created_by = creator.id
|
|
|
|
-- Status value lookups
|
|
LEFT JOIN ticket_claim_status old_status
|
|
ON th.field_name = 'claim_status_id'
|
|
AND th.old_value = old_status.id
|
|
AND old_status.is_active = 1
|
|
|
|
LEFT JOIN ticket_claim_status new_status
|
|
ON th.field_name = 'claim_status_id'
|
|
AND th.new_value = new_status.id
|
|
|
|
LEFT JOIN user_profiles as old_account_manager
|
|
ON th.field_name = 'acm_id'
|
|
AND th.old_value = old_account_manager.id
|
|
|
|
LEFT JOIN user_profiles as new_account_manager
|
|
ON th.field_name = 'acm_id'
|
|
AND th.new_value = new_account_manager.id
|
|
|
|
LEFT JOIN employees as old_insured_emp
|
|
ON th.field_name = 'insured_emp_id'
|
|
AND th.old_value = old_insured_emp.id
|
|
|
|
LEFT JOIN employees as new_insured_emp
|
|
ON th.field_name = 'insured_emp_id'
|
|
AND th.new_value = new_insured_emp.id
|
|
|
|
LEFT JOIN ticket_master as ticket_master
|
|
on th.field_name = 'claim_type'
|
|
AND th.ticket_id = ticket_master.id
|
|
|
|
|
|
|
|
WHERE
|
|
th.ticket_id = $ticket_id
|
|
AND th.is_active = 1
|
|
ORDER BY
|
|
th.created_at DESC";
|
|
$data = $this->ticketHistoryModel->query($sql)->getResultArray();
|
|
$priorityType = $this->priorityType;
|
|
$relationshipType = $this->relationshipType;
|
|
$modeOFIntimate = $this->modeOFIntimate;
|
|
$claim_type = $this->claimType;
|
|
foreach ($data as &$row) {
|
|
if ($row['field_name'] == 'claim_status_id') {
|
|
$new_old_value = isset($row['old_status_value']) ? $row['old_status_value'] : '-';
|
|
$new_new_value = $row['new_status_value'];
|
|
$row['old_value'] = $new_old_value;
|
|
$row['new_value'] = $new_new_value;
|
|
} elseif ($row['field_name'] == 'acm_id') {
|
|
$new_old_value = isset($row['old_account_manager']) ? $row['old_account_manager'] : '-';
|
|
$new_new_value = $row['new_account_manager'];
|
|
$row['old_value'] = $new_old_value;
|
|
$row['new_value'] = $new_new_value;
|
|
} elseif ($row['field_name'] == 'insured_emp_id') {
|
|
$new_old_value = isset($row['old_insured_id_name']) ? $row['old_insured_id_name'] : '-';
|
|
$new_new_value = $row['new_insured_id_name'];
|
|
$row['old_value'] = $new_old_value;
|
|
$row['new_value'] = $new_new_value;
|
|
} elseif ($row['field_name'] == 'priority') {
|
|
$new_old_value = isset($priorityType[$row['old_value']]) ? $priorityType[$row['old_value']] : '-';
|
|
$new_new_value = isset($priorityType[$row['new_value']]) ? $priorityType[$row['new_value']] : '-';
|
|
$row['old_value'] = $new_old_value;
|
|
$row['new_value'] = $new_new_value;
|
|
} elseif ($row['field_name'] == 'relationship') {
|
|
$new_old_value = isset($relationshipType[$row['old_value']]) ? $relationshipType[$row['old_value']] : '-';
|
|
$new_new_value = isset($relationshipType[$row['new_value']]) ? $relationshipType[$row['new_value']] : '-';
|
|
$row['old_value'] = $new_old_value;
|
|
$row['new_value'] = $new_new_value;
|
|
} elseif ($row['field_name'] == 'mode_of_intimation') {
|
|
$new_old_value = isset($modeOFIntimate[$row['old_value']]) ? $modeOFIntimate[$row['old_value']] : "-";
|
|
$new_new_value = isset($modeOFIntimate[$row['old_value']]) ? $modeOFIntimate[$row['old_value']] : "-";
|
|
$row['old_value'] = $new_old_value;
|
|
$row['new_value'] = $new_new_value;
|
|
} elseif ($row['field_name'] == 'claim_type') {
|
|
$new_old_value = isset($claim_type[$row['ticket_type_id']][$row['old_value']]) ? $claim_type[$row['ticket_type_id']][$row['old_value']] : '-';
|
|
$new_new_value = isset($claim_type[$row['ticket_type_id']][$row['new_value']])?$claim_type[$row['ticket_type_id']][$row['new_value']]:'-';
|
|
$row['old_value'] = $new_old_value;
|
|
$row['new_value'] = $new_new_value;
|
|
} elseif ($row['field_name'] == 'claim_type') {
|
|
$new_old_value = isset($claim_type[$row['old_value']]) ? $claim_type[$row['old_value']] : '-';
|
|
$new_new_value = isset($claim_type[$row['new_value']]) ? $claim_type[$row['new_value']] : '-';
|
|
$row['old_value'] = $new_old_value;
|
|
$row['new_value'] = $new_new_value;
|
|
} else {
|
|
$new_old_value = isset($row['old_value']) ? $row['old_value'] : '-';
|
|
$new_new_value = isset($row['new_value']) ? $row['new_value'] : '-';
|
|
$row['old_value'] = $new_old_value;
|
|
$row['new_value'] = $new_new_value;
|
|
}
|
|
}
|
|
|
|
return ($data);
|
|
}
|
|
}
|