diff --git a/app/Config/Routes.php b/app/Config/Routes.php index c091eaf1..ba3bd13a 100755 --- a/app/Config/Routes.php +++ b/app/Config/Routes.php @@ -529,6 +529,7 @@ $routes->cli('cli/insurerRFQRemainder', 'LeadsController::remainderForQcr'); $routes->cli('cli/sendMailWithAutoQuery','TicketController::sendMailWithAutoQuery'); $routes->cli('cli/ClaimStatusUpdate','MediAssistApiController::ClaimStatusUpdate'); $routes->cli('cli/syncTpaClaimToNhance','MediAssistApiController::syncTpaClaimToNhance'); +$routes->cli('cli/thzReminderCrone','ThzController::getOpenTicketsOlderThan24HoursAndAssignNextLevel'); @@ -821,6 +822,7 @@ $routes->group('test', function($routes) { $routes->get('membervalidation', 'TestingController::membervalidation'); $routes->get('generateExcel', 'TestingController::generateExcel'); $routes->get('logo_renaming','TestingController::logo_renaming'); + $routes->get('thzReminderCrone','ThzController::getOpenTicketsOlderThan24HoursAndAssignNextLevel'); // $routes->get('createDefaultMailTempalteInDB','TestingController::createDefaultMailTempalteInCrossDB'); // $routes->get('createDefaultMailTempalteInSameDB','TestingController::createDefaultMailTempalteInSameDB'); }); diff --git a/app/Controllers/ThzController.php b/app/Controllers/ThzController.php index 8ffdbfd7..0d152a31 100644 --- a/app/Controllers/ThzController.php +++ b/app/Controllers/ThzController.php @@ -5,6 +5,8 @@ namespace App\Controllers; use App\Controllers\BaseController; use App\Helpers\MailHelper; use CodeIgniter\HTTP\ResponseInterface; +use CodeIgniter\API\ResponseTrait; + use App\Models\ThzMasterModel; use App\Models\ThzMasterNotesModel; @@ -20,6 +22,7 @@ use App\Models\ClientRMModel; class ThzController extends BaseController { + use ResponseTrait; protected $thzMasterModel; protected $thzMasterNotesModel; @@ -685,6 +688,151 @@ class ThzController extends BaseController return null; } + private function getRmsIdUsingClientId($client_id) + { + if(!empty($client_id)){ + + $acm_data = $this->cientRmModel + ->select('client_rm.*, user_profiles.email') + ->join('user_profiles', 'client_rm.user_id = user_profiles.id') + ->where('client_rm.is_active', 1) + ->where('client_rm.client_id', $client_id) + ->orderBy('id', 'asc') + ->findAll(); + + if($acm_data){ + return $acm_data; + } + + $this->myLogger->logme('error', 'Account Manager data not found'); + return []; + + } + + $this->myLogger->logme('error', 'client id is null'); + return null; + } + + public function getOpenTicketsOlderThan24HoursAndAssignNextLevel() + { + + $current_day = date('D'); // Sun, Mon, Tue... + + $nl = (php_sapi_name() === 'cli') ? PHP_EOL : '
'; + + echo $current_day . $nl; + + if ($this->request) { + echo "REQUEST" . $nl; + } else { + echo "CLI" . $nl; + } + + if ($current_day === 'Sun') { + + if($this->request){ + return $this->respond(['message' => "Today is Sunday. Ticket reminder mail skipped"], 200); + }else{ + $this->myLogger->logme('error', 'Today is Sunday. Ticket reminder mail skipped'); + echo 'Today is Sunday. Ticket reminder mail skipped'; + return; + } + } + + $client_id = $this->request->getGet('client_id') ?? null; + $ticket_id = $this->request->getGet('ticket_id') ?? null; + + // Fetch tickets older than 8 hours + $builder = $this->thzMasterModel + ->whereIn('status', ['Open', 'In Progress']) + // ->where('thz_id', 85) + ->where('created_at <= DATE_SUB(NOW(), INTERVAL 8 HOUR)', null, false); + + // add condition only if client_id exists + if (!empty($client_id)) { + $builder->where('client_id', $client_id); + } + + // add condition only if ticket_id exists + if (!empty($ticket_id)) { + $builder->where('thz_id', $ticket_id); + } + + $result = $builder->findAll(); + + + $subjectTemplate = 'Ticket Pending for More Than ((HOURS)) Hours – Action Required'; + $messageTemplate = ' Ticket ID : ((TICKET_ID)) has remained in the same status for ((HOURS)) hours. Please take the necessary action.'; + + $common = [ + 'module' => 'THZ', + 'mail_type' => 'Thz_Reminder_mail' + ]; + + $mail_send_count = 0; + + if(!empty($result)){ + foreach ($result as $value) { + + // Calculate hours difference + $createdAt = new \DateTime($value['created_at']); + $now = new \DateTime(); + $hours = floor(($now->getTimestamp() - $createdAt->getTimestamp()) / 3600); + $ticket_url = base_url('ticketConversationList?return_type=web&thz_id=' . $value['thz_id']); + + // Replace placeholders + $subject = str_replace('((HOURS))', $hours, $subjectTemplate); + + $message = str_replace( + ['((TICKET_ID))', '((HOURS))', '((TICKET_URL))'], + [$value['thz_id'], $hours, $ticket_url], + $messageTemplate + ); + + + $client_id = $value['client_id']; + $level_of_user_data = $this->getRmsIdUsingClientId($client_id); + + if(!empty($level_of_user_data)){ + foreach ($level_of_user_data as $user) { + + $res = MailHelper::send_email([ + 'mail' => $user['email'], + 'subject' => $subject, + 'message' => $message, + 'common' => $common + ]); + + $mail_send_count++; + + $this->myLogger->logme( + 'error', + 'THZ Reminder Mail Sent | Ticket ID: ' . $value['thz_id'] . ' | Client ID : ' . $client_id . ' | Response: ' . json_encode($res) + ); + } + }else{ + $this->myLogger->logme('error', 'CLIENT ID : ' . $client_id . "has no RM's found skipped...." ); + } + } + }else{ + if($this->request){ + return $this->respond(['message' => "No ticket Pending for More Than 8 hrs"], 200); + }else{ + $this->myLogger->logme('error', 'No ticket Pending for More Than 8 hrs'); + echo 'No ticket Pending for More Than 8 hrs'; + return; + } + } + + if($this->request){ + return $this->respond(['mail_send_count' => $mail_send_count], 200); + }else{ + print_r(['mail_send_count' => $mail_send_count]); + return; + } + } + + }