Merge remote-tracking branch 'origin/dev' into dev

This commit is contained in:
velz 2026-01-02 12:41:24 +05:30
commit 6c0478e62d
9 changed files with 258 additions and 14 deletions

View File

@ -530,6 +530,7 @@ $routes->cli('cli/insurerRFQRemainder', 'LeadsController::remainderForQcr');
$routes->cli('cli/sendMailWithAutoQuery','TicketController::sendMailWithAutoQuery'); $routes->cli('cli/sendMailWithAutoQuery','TicketController::sendMailWithAutoQuery');
$routes->cli('cli/ClaimStatusUpdate','MediAssistApiController::ClaimStatusUpdate'); $routes->cli('cli/ClaimStatusUpdate','MediAssistApiController::ClaimStatusUpdate');
$routes->cli('cli/syncTpaClaimToNhance','MediAssistApiController::syncTpaClaimToNhance'); $routes->cli('cli/syncTpaClaimToNhance','MediAssistApiController::syncTpaClaimToNhance');
$routes->cli('cli/thzReminderCrone','ThzController::getOpenTicketsOlderThan24HoursAndAssignNextLevel');
@ -822,6 +823,7 @@ $routes->group('test', function($routes) {
$routes->get('membervalidation', 'TestingController::membervalidation'); $routes->get('membervalidation', 'TestingController::membervalidation');
$routes->get('generateExcel', 'TestingController::generateExcel'); $routes->get('generateExcel', 'TestingController::generateExcel');
$routes->get('logo_renaming','TestingController::logo_renaming'); $routes->get('logo_renaming','TestingController::logo_renaming');
$routes->get('thzReminderCrone','ThzController::getOpenTicketsOlderThan24HoursAndAssignNextLevel');
// $routes->get('createDefaultMailTempalteInDB','TestingController::createDefaultMailTempalteInCrossDB'); // $routes->get('createDefaultMailTempalteInDB','TestingController::createDefaultMailTempalteInCrossDB');
// $routes->get('createDefaultMailTempalteInSameDB','TestingController::createDefaultMailTempalteInSameDB'); // $routes->get('createDefaultMailTempalteInSameDB','TestingController::createDefaultMailTempalteInSameDB');
}); });

View File

@ -2203,6 +2203,9 @@ class EmpDataServiceController extends BaseController
if ($get_policy_type['policy_type_id'] != 1) { if ($get_policy_type['policy_type_id'] != 1) {
// generate e-card and store S3
$r = Jobs::addJob(['job_name' => 'bulkGenerateEcardAndStoreinS3', 'payload' => ['client_policy_id' => $client_policy_id]]);
$job_details = new Jobs(); $job_details = new Jobs();
$r = Jobs::addJob(['job_name' => 'sendMailForDownloadingECard', 'payload' => ['ids' => $emp_policy_ids, 'client_policy_id' => $client_policy_id]]); $r = Jobs::addJob(['job_name' => 'sendMailForDownloadingECard', 'payload' => ['ids' => $emp_policy_ids, 'client_policy_id' => $client_policy_id]]);
} }
@ -2524,6 +2527,7 @@ class EmpDataServiceController extends BaseController
$event_type = $file['event_type']; $event_type = $file['event_type'];
$policy_issue_date = $file['policy_issue_date']; $policy_issue_date = $file['policy_issue_date'];
$client_policy_data = $this->clientPolicyModel->where('id', $client_policy_id)->first();
$status_val = 'success'; $status_val = 'success';
if ($status == 'in-progress-partially') { if ($status == 'in-progress-partially') {
@ -2613,6 +2617,10 @@ class EmpDataServiceController extends BaseController
'status' => $status_val, 'status' => $status_val,
]); ]);
if($client_policy_data['policy_type_id'] != 1){
// re-generate e-card and store S3
$r = Jobs::addJob(['job_name' => 'bulkGenerateEcardAndStoreinS3', 'payload' => ['client_policy_id' => $client_policy_id]]);
}
$this->myLogger->logme('error', 'importCorrectionUpdateEndorsementID employee count : {data}', ['data'=> $emp_count]); $this->myLogger->logme('error', 'importCorrectionUpdateEndorsementID employee count : {data}', ['data'=> $emp_count]);
$this->myLogger->logme('error', 'importCorrectionUpdateEndorsementID batch file status : {data}', ['data'=> $status_val]); $this->myLogger->logme('error', 'importCorrectionUpdateEndorsementID batch file status : {data}', ['data'=> $status_val]);

View File

@ -1076,10 +1076,23 @@ class EmployeeController extends AdminController
} }
return $this->respond(['dataStatus' => true, 'code' => 200, 'data' => $html, 'file_data' => $file_name, 'excel_data' => $excel_data], 200); return $this->respond(['dataStatus' => true, 'code' => 200, 'data' => $html, 'file_data' => $file_name, 'excel_data' => $excel_data], 200);
} catch (\Exception $e) { } catch (\Throwable $th) {
$errorData = [
'message' => $th->getMessage(),
'file' => $th->getFile(),
'line' => $th->getLine(),
'code' => $th->getCode(),
'trace' => $th->getTraceAsString(),
'trace_array' => $th->getTrace(), // full array version (optional)
'function' => $th->getTrace()[0]['function'] ?? null,
'class' => $th->getTrace()[0]['class'] ?? null,
];
// Handle exception // Handle exception
$errorMessage = 'Error occurred: ' . $e->getMessage(); $errorMessage = 'Error occurred:' . PHP_EOL . json_encode($errorData, JSON_PRETTY_PRINT);
$this->myLogger->logme('error', $errorMessage); $this->myLogger->logme('error', $errorMessage);
$html = '<div class="text-center">No Data Found</div>'; $html = '<div class="text-center">No Data Found</div>';
return $this->respond(['dataStatus' => false, 'code' => 500, 'data' => $html, 'file_data' => $file_name], 500); return $this->respond(['dataStatus' => false, 'code' => 500, 'data' => $html, 'file_data' => $file_name], 500);
} }
@ -4150,6 +4163,8 @@ class EmployeeController extends AdminController
return $this->respond([ return $this->respond([
'status' => 'ECARD_BULK_TO_S3 Job queued', 'status' => 'ECARD_BULK_TO_S3 Job queued',
'message' => 'E-card re-generation process has started successfully.',
'dataStatus' => true,
'total' => $total, 'total' => $total,
'batches' => $total_batches 'batches' => $total_batches
], 200); ], 200);

View File

@ -362,7 +362,7 @@ class NotificationController extends AdminController
// Define upload path and attempt file upload // Define upload path and attempt file upload
$uploadFilePath = WRITEPATH . 'uploads/attachments'; $uploadFilePath = WRITEPATH . 'uploads/attachments';
$uploadedFile = $this->request->getFile('file'); $uploadedFile = $this->request->getFile('file');
$fileName = file_Upload($uploadedFile, $uploadFilePath); // Assume file_Upload handles file saving $fileName = file_Upload_for_lead($uploadedFile, $uploadFilePath); // Assume file_Upload handles file saving
if ($fileName) { if ($fileName) {
// Prepare data for insertion // Prepare data for insertion

View File

@ -101,6 +101,7 @@ class RestAuthenticationController extends AdminController
->where('employees.mobile', $mobile_number) ->where('employees.mobile', $mobile_number)
->where('EP.is_active', 1) ->where('EP.is_active', 1)
->whereIn('EP.status', ['active', 'expired']) ->whereIn('EP.status', ['active', 'expired'])
->orderBy('employees.id', 'desc')
->first(); ->first();
$lastQuery = $this->employeeModel->db->getLastQuery(); $lastQuery = $this->employeeModel->db->getLastQuery();
@ -122,7 +123,7 @@ class RestAuthenticationController extends AdminController
AND employees.relationship = 'self' AND employees.relationship = 'self'
AND employees.is_active = 1 AND employees.is_active = 1
AND employee_polices.is_active = 1 AND employee_polices.is_active = 1
AND employee_polices.status IN ('active') AND employee_polices.status IN ('active', 'expired')
"; ";
$db = db_connect(); $db = db_connect();
@ -166,7 +167,7 @@ class RestAuthenticationController extends AdminController
log_message('error', ' '); log_message('error', ' ');
log_message('error', ' ************************************* POST END **************************************** '); log_message('error', ' ************************************* POST END **************************************** ');
log_message('error', ' '); log_message('error', ' ');
return $this->respond(['status' => 'failed','code' => 500,'data' => $th],500); return $this->respond(['status' => 'failed','code' => 500,'data' => $th->getMessage()],500);
} }
} }

View File

@ -5,6 +5,8 @@ namespace App\Controllers;
use App\Controllers\BaseController; use App\Controllers\BaseController;
use App\Helpers\MailHelper; use App\Helpers\MailHelper;
use CodeIgniter\HTTP\ResponseInterface; use CodeIgniter\HTTP\ResponseInterface;
use CodeIgniter\API\ResponseTrait;
use App\Models\ThzMasterModel; use App\Models\ThzMasterModel;
use App\Models\ThzMasterNotesModel; use App\Models\ThzMasterNotesModel;
@ -20,6 +22,7 @@ use App\Models\ClientRMModel;
class ThzController extends BaseController class ThzController extends BaseController
{ {
use ResponseTrait;
protected $thzMasterModel; protected $thzMasterModel;
protected $thzMasterNotesModel; protected $thzMasterNotesModel;
@ -685,6 +688,151 @@ class ThzController extends BaseController
return null; 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 : '<br>';
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 = '<a href="((TICKET_URL))"> <strong> Ticket ID : ((TICKET_ID)) </strong> </a> 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;
}
}
} }

View File

@ -279,6 +279,7 @@ class EmployeePolicyModel extends Model
'client_branch.branch_code as client_branch_code', 'client_branch.branch_code as client_branch_code',
'cp.policy_no', 'cp.policy_no',
'cp.policy_type_id', 'cp.policy_type_id',
'cp.is_addon',
$ecard_download_link $ecard_download_link
]) ])
->join('employees emp', 'employee_polices.employee_id = emp.id') ->join('employees emp', 'employee_polices.employee_id = emp.id')

View File

@ -206,6 +206,14 @@
<a class="dropdown-item" onclick="send_mail_for_individual_employee_ecard('<?= $employee['id'];?>', '<?= $employee['client_policy_id'];?>')" ><i class="mdi mdi-email-alert mr-2 text-muted font-18 vertical-middle"></i>Send E-Card Mail</a> <a class="dropdown-item" onclick="send_mail_for_individual_employee_ecard('<?= $employee['id'];?>', '<?= $employee['client_policy_id'];?>')" ><i class="mdi mdi-email-alert mr-2 text-muted font-18 vertical-middle"></i>Send E-Card Mail</a>
<?php } ?> <?php } ?>
<?php if($employee['relationship'] == 'Self' && in_array($employee['policy_type_id'], [2,3,4,5]) && $employee['emp_status'] == 'active' && $employee['status'] == 'active' && !empty($employee['tpa_id'])) { ?>
<a class="dropdown-item" onclick="showReGenerateConfirmation('<?= $employee['client_policy_id'];?>', '<?= $employee['emp_code'];?>')" ><i class="mdi mdi-refresh mr-2 text-muted font-18 vertical-middle"></i>Re-Generate E-Card</a>
<?php } ?>
<?php if($employee['is_addon'] == 3 && $employee['policy_type_id'] == 3 && $employee['emp_status'] == 'active' && $employee['status'] == 'active' && !empty($employee['tpa_id'])) { ?>
<a class="dropdown-item" onclick="showReGenerateConfirmation('<?= $employee['client_policy_id'];?>', '<?= $employee['emp_code'];?>')" ><i class="mdi mdi-refresh mr-2 text-muted font-18 vertical-middle"></i>Re-Generate E-Card</a>
<?php } ?>
</div> </div>
</div> </div>
</td> </td>
@ -780,4 +788,67 @@
} }
function showReGenerateConfirmation(client_policy_id, emp_code){
Swal.fire({
title: "Do you want to Re-Generate Ecard for this family?",
showDenyButton: true,
showCancelButton: false,
confirmButtonText: "Yes",
denyButtonText: "No"
}).then((result) => {
if (result.isConfirmed) {
reGenerateEcardForSingleFamily(client_policy_id, emp_code)
}
});
}
function reGenerateEcardForSingleFamily(client_policy_id, emp_code)
{
if(!client_policy_id){
toastr.warning('Failed to re-Generate E-card', 'WARNING');
}
if(!emp_code){
toastr.warning('Failed to re-Generate E-card', 'WARNING');
}
console.log({client_policy_id, emp_code});
let url = '<?= base_url('/employee/bulkGenerateEcardAndStoreinS3') ?>';
// Data to send in the AJAX request
let requestData = {
client_policy_id: client_policy_id,
emp_code: emp_code,
};
$('.loader').fadeIn();
$('.loader-mask').fadeIn();
// Send AJAX request
sendAjaxRequestForGlobal(url, 'GET', requestData, function(response) {
console.log('Data fetched successfully:', response);
if (response.dataStatus == true) {
toastr.success(response.message || 'Initiating successafully.', 'SUCCESS');
} else {
toastr.warning(response.status || 'Unable to regenerate e-card.', 'WARNING');
}
$('.loader').fadeOut();
$('.loader-mask').delay(350).fadeOut('slow');
}, function(xhr, status, error) {
console.error('Error fetching data:', error);
console.error(xhr.responseText);
toastr.error('Unable to regenerate e-card.', 'ERROR');
});
}
</script> </script>

View File

@ -22,15 +22,13 @@ table.dataTable tbody td {
</thead> </thead>
<tbody class="font-12"> <tbody class="font-12">
<?php for ($i = 1; $i <= $count; $i++): ?> <?php helper('excel_util_helper'); foreach ($tbody as $body) { if(check_row_is_empty_or_null($body)){break;} ?>
<tr> <tr>
<?php foreach ($tbody[$i] as $data): ?> <?php foreach ($body as $data){ ?>
<td> <td><?= esc($data) ?></td>
<?php echo $data;?> <?php } ?>
</td> </tr>
<?php endforeach; ?> <?php } ?>
</tr>
<?php endfor; ?>
</tbody> </tbody>
</table> </table>
</div> <!-- end .table-responsive --> </div> <!-- end .table-responsive -->