diff --git a/app/Controllers/TicketController.php b/app/Controllers/TicketController.php index 815b6265..d202d2ab 100644 --- a/app/Controllers/TicketController.php +++ b/app/Controllers/TicketController.php @@ -129,7 +129,7 @@ class TicketController extends BaseController $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 { @@ -139,32 +139,50 @@ class TicketController extends BaseController } } - public function ticketSearch() + public function ticketSearch($action = null) { - $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; + //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, + // 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; + ->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) @@ -202,8 +220,8 @@ class TicketController extends BaseController // Fetch ACM Users $db = db_connect(); $data['acms'] = $db->table('user_profiles') - ->select('id, first_name') - ->where(['is_active' => 1, 'role' => 3]) + ->select('id, first_name') + ->where(['is_active' => 1, 'role' => 3]) ->get() ->getResultArray(); @@ -224,9 +242,9 @@ class TicketController extends BaseController 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'); @@ -242,7 +260,7 @@ class TicketController extends BaseController $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); @@ -313,7 +331,7 @@ class TicketController extends BaseController 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); + 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); } @@ -337,7 +355,7 @@ class TicketController extends BaseController //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); + 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); } @@ -479,7 +497,7 @@ class TicketController extends BaseController 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); @@ -488,9 +506,9 @@ class TicketController extends BaseController $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); @@ -498,24 +516,24 @@ class TicketController extends BaseController $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'], @@ -524,62 +542,61 @@ class TicketController extends BaseController '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)){ + + if (!empty($ticket_data) && !empty($content)) { foreach ($this->placeHolders as $key => $value) { $replaceData = strtoupper($ticket_data[$value]) ?? ''; - if($value == "emp_code"){ + 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'], @@ -588,9 +605,9 @@ class TicketController extends BaseController 'cc' => $acm_mails['common_mails'], 'attachments' => [] ]; - + $this->myLogger->logme('error', "Final Reply Email Data"); - + return $this->sendTrigger($emailData); } @@ -600,7 +617,7 @@ class TicketController extends BaseController $auto_mail_enable = $this->ticketMasterModel->getTemplateDataByTicketID($ticket_id); $mail_responce = []; - if($auto_mail_enable['is_auto_mail'] == 1){ + if ($auto_mail_enable['is_auto_mail'] == 1) { $mail_content = $this->constructMailContent($ticket_id); $mail_responce = $this->sendTrigger($mail_content); } @@ -610,6 +627,122 @@ class TicketController extends BaseController //---- 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 + + + + 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 + + + + 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 = $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 = $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 = $modeOFIntimate[$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 = $claim_type[$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 = $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'] : '-'; + $row['old_value'] = $new_old_value; + } + } + + return ($data); + } } diff --git a/app/Models/TicketHistoryModel.php b/app/Models/TicketHistoryModel.php index 6337be4b..6d7eb0f5 100644 --- a/app/Models/TicketHistoryModel.php +++ b/app/Models/TicketHistoryModel.php @@ -12,7 +12,8 @@ class TicketHistoryModel extends Model protected $returnType = 'array'; protected $useSoftDeletes = false; protected $protectFields = true; - protected $allowedFields = []; + protected $allowedFields = ['id','field_name','display_name','old_value', + 'new_value','created_by','created_at','updated_by','updated_at','is_active']; // Callbacks protected $allowCallbacks = true; diff --git a/app/Views/ticket_history.php b/app/Views/ticket_history.php index 73e0850b..05534579 100644 --- a/app/Views/ticket_history.php +++ b/app/Views/ticket_history.php @@ -2,12 +2,13 @@
| Field | -Old Value | -New Value | + +Change | User | Date/Time | ||||
|---|---|---|---|---|---|---|---|---|---|
| - | - | - | - | - | + | + | '.$row['new_value']; ?> | + ++ |