diff --git a/app/Config/Routes.php b/app/Config/Routes.php index 15c4aa0a..251e26ee 100755 --- a/app/Config/Routes.php +++ b/app/Config/Routes.php @@ -817,6 +817,8 @@ $routes->group("/ticket", ["filter" => "authMVC"], function ($routes) { $routes->post('saveIRDocsJson',"TicketController::saveIRDocsJson"); $routes->get('getTpaClaimStatus',"ApiServiceController::getClaimStatus"); $routes->post('manualTpaClaimPush',"ApiServiceController::manualTpaClaimPush"); + $routes->match(['get', 'post'], 'getClaimTemplateData', 'TicketController::getClaimTemplateData'); + $routes->post('uploadApprovedLetterFromReply', 'TicketController::uploadApprovedLetterFromReply'); }); // Non-EB Claims diff --git a/app/Controllers/TicketController.php b/app/Controllers/TicketController.php index 7aacb3a8..c01192c9 100644 --- a/app/Controllers/TicketController.php +++ b/app/Controllers/TicketController.php @@ -2438,7 +2438,7 @@ class TicketController extends BaseController //---- Email Trigger Part---------------------------------------------------------------------------------------------- - public function constructMailContent($ticket_id) + public function constructMailContent($ticket_id, $status_id = null) { $this->myLogger->logme('error', "Constructing mail content for Ticket ID: $ticket_id"); @@ -2454,9 +2454,14 @@ class TicketController extends BaseController $this->myLogger->logme('error', "Fetched ticket data: " . json_encode($ticket_data)); + if (!empty($status_id)) { + $ticket_data['claim_status_id'] = (int) $status_id; + } + // Fetch Email Template Data - $template_data = $this->ticketMasterModel->getTemplateDataByTicketID($ticket_id); - // print_r($template_data); die; + $template_data = !empty($status_id) + ? ($this->ticketMasterModel->getTemplateDataByStatusID((int) $status_id, (int) ($ticket_data['ticket_type_id'] ?? 0))[0] ?? null) + : $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']); @@ -2628,7 +2633,7 @@ class TicketController extends BaseController 'mail' => [$mail_data['emp_mail'], $ticket_data['emp_personal_mail'] ?? ""], 'subject' => $mail_data['mail_subject'], 'message' => $mail_data['mail_content'], - 'common' => [], + 'common' => ['module' => "claim", 'pk' => $mail_data['ticket_id']], 'cc' => $acm_mails['common_mails'], 'attachments' => [] ]; @@ -2826,7 +2831,7 @@ class TicketController extends BaseController 'mail' => $template_data['emp_mail'], 'subject' => $template_data['subject'], 'message' => $template_data['mail_content'], - 'common' => [], + 'common' => ['module' => "claim", 'pk' => $ticket_id], 'cc' => $acm_mails['common_mails'], 'attachments' => [] ]; @@ -2987,7 +2992,7 @@ class TicketController extends BaseController 'mail' => $head_mail['email'], 'subject' => $subject, 'message' => $message, - 'common' => [], + 'common' => ['module' => "claim", 'pk' => $ticket_data['id']], ]; $this->sendTrigger($emailData); @@ -3722,7 +3727,7 @@ class TicketController extends BaseController return $input; } - function convertTermsToDisplay(array $data) + public function convertTermsToDisplay(array $data) { $result = []; @@ -3902,6 +3907,106 @@ class TicketController extends BaseController return $result; } + public function getClaimTemplateData() + { + try { + $ticket_id = $this->request->getPost('ticket_id') ?? $this->request->getGet('ticket_id'); + $status_id = $this->request->getPost('status_id') ?? $this->request->getGet('status_id'); + + if (empty($ticket_id) || empty($status_id)) { + return $this->respond(['status' => false, 'message' => 'Ticket ID and Status ID are required'], 400); + } + + $mail_content = $this->constructMailContent($ticket_id, $status_id); + if ($mail_content) { + return $this->respond(['status' => true, 'data' => $mail_content], 200); + } + + return $this->respond(['status' => false, 'message' => 'Failed to construct mail content'], 200); + } catch (\Exception $e) { + $this->myLogger->logme('error', 'Error in getClaimTemplateData: ' . $e->getMessage() . ' in file ' . $e->getFile() . ' on line ' . $e->getLine() . $e->getTraceAsString()); + return $this->respond(['status' => false, 'message' => 'An error occurred while fetching template data'], 500); + } + } + + public function uploadApprovedLetterFromReply() + { + try { + $ticket_id = $this->request->getPost('ticket_id'); + $status_id = $this->request->getPost('status_id'); + $approvedLetterUrl = trim((string) $this->request->getPost('approved_letter')); + $approvedLetterFile = $this->request->getFile('approved_letter_file'); + + if (empty($ticket_id) || empty($status_id)) { + return $this->respond(['status' => false, 'message' => 'Ticket ID and Status ID are required'], 400); + } + + if ((int) $status_id !== 9) { + return $this->respond(['status' => false, 'message' => 'Approved letter upload is allowed only for APPROVED status'], 400); + } + + $ticket_data = $this->ticketMasterModel->getTicketDataByTicketID($ticket_id); + if (empty($ticket_data)) { + return $this->respond(['status' => false, 'message' => 'Ticket not found'], 404); + } + + if (!empty($ticket_data['approved_letter'])) { + return $this->respond([ + 'status' => false, + 'message' => 'Approved letter already available', + 'data' => ['approved_letter' => $ticket_data['approved_letter']], + ], 200); + } + + $hasApprovedLetterFile = $approvedLetterFile !== null + && $approvedLetterFile->isValid() + && $approvedLetterFile->getError() !== UPLOAD_ERR_NO_FILE; + + if ($approvedLetterUrl !== '' && $hasApprovedLetterFile) { + return $this->respond([ + 'status' => false, + 'message' => 'Provide either Approved Letter URL or Approved Letter PDF file, not both.', + ], 400); + } + + if ($approvedLetterUrl !== '' && !$this->isClaimUploadUrl($approvedLetterUrl)) { + return $this->respond(['status' => false, 'message' => 'Approved Letter URL format is invalid.'], 400); + } + + if ($approvedLetterUrl === '' && !$hasApprovedLetterFile) { + return $this->respond(['status' => false, 'message' => 'Provide Approved Letter URL or Approved Letter PDF file.'], 400); + } + + $approvedLetterValue = $approvedLetterUrl; + if ($hasApprovedLetterFile) { + $uploadResult = $this->uploadApprovedLetterPdf($approvedLetterFile, 'Approved Letter'); + if (!($uploadResult['status'] ?? false)) { + return $this->respond(['status' => false, 'message' => $uploadResult['message'] ?? 'Invalid Approved Letter file.'], 400); + } + + $approvedLetterValue = $this->createApprovedLetterFileUrl( + (int) $ticket_id, + (int) ($ticket_data['ticket_type_id'] ?? 1), + $uploadResult['data'], + 'APPROVED_LETTER_PDF' + ); + } + + $this->ticketMasterModel + ->where('id', (int) $ticket_id) + ->set(['approved_letter' => $approvedLetterValue]) + ->update(); + + return $this->respond([ + 'status' => true, + 'message' => 'Approved letter uploaded successfully', + 'data' => ['approved_letter' => $approvedLetterValue], + ], 200); + } catch (\Exception $e) { + $this->myLogger->logme('error', 'Error in uploadApprovedLetterFromReply: ' . $e->getMessage() . ' in file ' . $e->getFile() . ' on line ' . $e->getLine() . $e->getTraceAsString()); + return $this->respond(['status' => false, 'message' => 'An error occurred while uploading approved letter'], 500); + } + } // -------- CLAIM DUMP UPLOAD ---------------------------------------------------------------------------------------------- diff --git a/app/Models/TicketMasterModel.php b/app/Models/TicketMasterModel.php index 475df9b1..d6202941 100644 --- a/app/Models/TicketMasterModel.php +++ b/app/Models/TicketMasterModel.php @@ -133,17 +133,20 @@ class TicketMasterModel extends Model return $data; } - public function getTemplateDataByStatusID($claim_status_id) + public function getTemplateDataByStatusID($claim_status_id, $ticket_type_id = null) { - - $template_data = $this->table('ticket_claim_status') + $builder = $this->db->table('ticket_claim_status tcs') ->select('ticket_mail_template.*') - ->join('ticket_mail_template', 'ticket_mail_template.trigger_type = ticket_claim_status.trigger_type') + ->join('ticket_mail_template', 'ticket_mail_template.trigger_type = tcs.trigger_type') ->where('ticket_mail_template.is_active', 1) - ->where('ticket_claim_status.is_active', 1) - ->where('ticket_claim_status.id', $claim_status_id) - ->get() - ->getResultArray(); + ->where('tcs.id', $claim_status_id) + ->where('tcs.is_active', 1); + + if ($ticket_type_id !== null && $ticket_type_id !== '') { + $builder->where('ticket_mail_template.ticket_type', $ticket_type_id); + } + + $template_data = $builder->get()->getResultArray(); return $template_data; } diff --git a/app/Views/ticket_reply.php b/app/Views/ticket_reply.php index 9a732b39..b05168c7 100644 --- a/app/Views/ticket_reply.php +++ b/app/Views/ticket_reply.php @@ -4,6 +4,27 @@