CHANGE_MAIL_TEMPLATE
This commit is contained in:
parent
056af9ab45
commit
c15121aa1a
@ -3267,7 +3267,10 @@ class EmployeeController extends AdminController
|
|||||||
$sentCount = 0;
|
$sentCount = 0;
|
||||||
try {
|
try {
|
||||||
$clientPolicy = $this->clientPolicyModel->find($filePolicyId);
|
$clientPolicy = $this->clientPolicyModel->find($filePolicyId);
|
||||||
$clientLogo = base_url() . 'public/uploads/logo/' . ($clientData['client_logo'] ?? '');
|
$clientLogo = '';
|
||||||
|
if (!empty($clientData['client_logo'])) {
|
||||||
|
$clientLogo = base_url() . 'public/uploads/logo/' . $clientData['client_logo'];
|
||||||
|
}
|
||||||
|
|
||||||
$acm_Mails = $clientData['common_mails'] ?? '';
|
$acm_Mails = $clientData['common_mails'] ?? '';
|
||||||
if(empty($acm_Mails)){
|
if(empty($acm_Mails)){
|
||||||
@ -3282,6 +3285,11 @@ class EmployeeController extends AdminController
|
|||||||
: 'N/A';
|
: 'N/A';
|
||||||
|
|
||||||
$subject = 'Enrollment Closed - Enrolled Employee List | ' . ($clientData['client_name'] ?? '');
|
$subject = 'Enrollment Closed - Enrolled Employee List | ' . ($clientData['client_name'] ?? '');
|
||||||
|
$statusTilesHtml = $this->renderEnrollmentStatusTilesForMail(
|
||||||
|
$fileClientId,
|
||||||
|
(int) $file['client_branch_id'],
|
||||||
|
$filePolicyId
|
||||||
|
);
|
||||||
|
|
||||||
foreach ($hrRecipients as $hrRecipient) {
|
foreach ($hrRecipients as $hrRecipient) {
|
||||||
$hrEmail = trim($hrRecipient['email'] ?? '');
|
$hrEmail = trim($hrRecipient['email'] ?? '');
|
||||||
@ -3291,7 +3299,7 @@ class EmployeeController extends AdminController
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
$mailContent = $this->buildEnrollmentClosedHrMailContent([
|
$mailContent = $statusTilesHtml . $this->buildEnrollmentClosedHrMailContent([
|
||||||
'hr_name' => $hrName,
|
'hr_name' => $hrName,
|
||||||
'client_name' => $clientData['client_name'] ?? '',
|
'client_name' => $clientData['client_name'] ?? '',
|
||||||
'policy_no' => $clientPolicy['policy_no'] ?? 'N/A',
|
'policy_no' => $clientPolicy['policy_no'] ?? 'N/A',
|
||||||
@ -3355,6 +3363,17 @@ class EmployeeController extends AdminController
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function renderEnrollmentStatusTilesForMail(int $client_id, int $branch_id, int $policy_id): string
|
||||||
|
{
|
||||||
|
$counts = $this->employeePolicyModel->getEnrollmentStatusTileCounts(
|
||||||
|
$client_id,
|
||||||
|
$branch_id,
|
||||||
|
$policy_id
|
||||||
|
);
|
||||||
|
|
||||||
|
return view('mail/enrollment_status_tiles', ['counts' => $counts]);
|
||||||
|
}
|
||||||
|
|
||||||
private function buildEnrollmentClosedHrMailContent(array $data): string
|
private function buildEnrollmentClosedHrMailContent(array $data): string
|
||||||
{
|
{
|
||||||
$hrName = htmlspecialchars($data['hr_name'] ?? 'HR Team', ENT_QUOTES, 'UTF-8');
|
$hrName = htmlspecialchars($data['hr_name'] ?? 'HR Team', ENT_QUOTES, 'UTF-8');
|
||||||
@ -3368,19 +3387,19 @@ class EmployeeController extends AdminController
|
|||||||
<div align="center">
|
<div align="center">
|
||||||
<table width="100%" border="0" cellspacing="0" cellpadding="0" style="max-width:600px;">
|
<table width="100%" border="0" cellspacing="0" cellpadding="0" style="max-width:600px;">
|
||||||
<tr>
|
<tr>
|
||||||
<td align="left" style="padding:15px; font-family:arial, sans-serif; font-size:14px; line-height:22px; color:#333333;">
|
<td align="left" style="padding:10px 15px 20px; font-family:arial, sans-serif; font-size:14px; line-height:24px; color:#333333;">
|
||||||
<p>Dear ' . $hrName . ',</p>
|
<div style="margin-bottom:16px;">Dear ' . $hrName . ',</div>
|
||||||
<p>The enrollment window for <strong>' . $clientName . '</strong> has closed.</p>
|
<div style="margin-bottom:16px;">The enrollment window for <strong>' . $clientName . '</strong> has closed.</div>
|
||||||
<p>
|
<div style="margin-bottom:16px;">
|
||||||
<strong>Policy No:</strong> ' . $policyNo . '<br>
|
<strong>Policy No:</strong> ' . $policyNo . '<br>
|
||||||
<strong>Enrollment Open Date:</strong> ' . $openDate . '<br>
|
<strong>Enrollment Open Date:</strong> ' . $openDate . '<br>
|
||||||
<strong>Enrollment Close Date:</strong> ' . $closeDate . '
|
<strong>Enrollment Close Date:</strong> ' . $closeDate . '
|
||||||
</p>
|
</div>
|
||||||
<p>
|
<div style="margin-bottom:16px;">
|
||||||
Please find the attached Excel file with the enrolled employee list
|
Please find the attached Excel file with the enrolled employee list
|
||||||
(' . $employeeCount . ' record' . ($employeeCount === 1 ? '' : 's') . ').
|
(' . $employeeCount . ' record' . ($employeeCount === 1 ? '' : 's') . ').
|
||||||
</p>
|
</div>
|
||||||
<p>Regards,<br>Nhance Team</p>
|
<div>Regards,<br>Nhance Team</div>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
|
|||||||
@ -1987,7 +1987,9 @@ class EmployeePolicyModel extends Model
|
|||||||
|
|
||||||
|
|
||||||
// Conditionally add where clauses
|
// Conditionally add where clauses
|
||||||
if ($client_id != 0 && !empty(trim($client_id))) {
|
if (is_string($client_id) && preg_match('/^[a-f0-9]{32}$/i', $client_id)) {
|
||||||
|
$result->where('MD5(emp.client_id)', $client_id);
|
||||||
|
} elseif ($client_id != 0 && !empty($client_id)) {
|
||||||
$result->where('emp.client_id', $client_id);
|
$result->where('emp.client_id', $client_id);
|
||||||
}
|
}
|
||||||
if ($branch_id != 0 && !empty(trim($branch_id))) {
|
if ($branch_id != 0 && !empty(trim($branch_id))) {
|
||||||
@ -2124,5 +2126,65 @@ class EmployeePolicyModel extends Model
|
|||||||
->getRowArray();
|
->getRowArray();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Enrollment status tile counts (same logic as enrollment_list.php).
|
||||||
|
*/
|
||||||
|
public function getEnrollmentStatusTileCounts(int $client_id, int $branch_id, int $client_policy_id): array
|
||||||
|
{
|
||||||
|
$authSubQuery = '(SELECT user_id FROM auth_history WHERE user_type = "employee" GROUP BY user_id) auth_history';
|
||||||
|
|
||||||
|
$rows = $this->db->table('employees')
|
||||||
|
->select('employees.id, employees.relationship, employees.emp_status, auth_history.user_id as logged_in_user_id')
|
||||||
|
->join('employee_polices', 'employees.id = employee_polices.employee_id')
|
||||||
|
->join($authSubQuery, 'employees.id = auth_history.user_id', 'left', false)
|
||||||
|
->where('employees.client_id', $client_id)
|
||||||
|
->where('employees.client_branch_id', $branch_id)
|
||||||
|
->where('employees.is_active', 1)
|
||||||
|
->where('employees.emp_status !=', 'truncated')
|
||||||
|
->where('employee_polices.client_policy_id', $client_policy_id)
|
||||||
|
->where('employee_polices.is_active', 1)
|
||||||
|
->where('employee_polices.status !=', 'truncated')
|
||||||
|
->groupBy('employees.id, employees.relationship, employees.emp_status, auth_history.user_id')
|
||||||
|
->get()
|
||||||
|
->getResultArray();
|
||||||
|
|
||||||
|
$counts = [
|
||||||
|
'emp_count' => 0,
|
||||||
|
'enrolled' => 0,
|
||||||
|
'not_enrolled' => 0,
|
||||||
|
'logged_in' => 0,
|
||||||
|
'not_logged_in' => 0,
|
||||||
|
'draft' => 0,
|
||||||
|
];
|
||||||
|
|
||||||
|
foreach ($rows as $row) {
|
||||||
|
if (strtolower(trim($row['relationship'] ?? '')) !== 'self') {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
$counts['emp_count']++;
|
||||||
|
|
||||||
|
$isEnrolled = ($row['emp_status'] ?? '') === 'enrolled';
|
||||||
|
if ($isEnrolled) {
|
||||||
|
$counts['enrolled']++;
|
||||||
|
} else {
|
||||||
|
$counts['not_enrolled']++;
|
||||||
|
}
|
||||||
|
|
||||||
|
$isLoggedIn = !empty($row['logged_in_user_id']);
|
||||||
|
if ($isLoggedIn) {
|
||||||
|
$counts['logged_in']++;
|
||||||
|
} else {
|
||||||
|
$counts['not_logged_in']++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!$isEnrolled && $isLoggedIn) {
|
||||||
|
$counts['draft']++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $counts;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
57
app/Views/mail/enrollment_status_tiles.php
Normal file
57
app/Views/mail/enrollment_status_tiles.php
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
<?php
|
||||||
|
$counts = $counts ?? [];
|
||||||
|
$tiles = [
|
||||||
|
['label' => 'Emp Count', 'value' => (int) ($counts['emp_count'] ?? 0), 'accent' => '#00999E'],
|
||||||
|
['label' => 'Enroled', 'value' => (int) ($counts['enrolled'] ?? 0), 'accent' => '#0ab39c'],
|
||||||
|
['label' => 'Not Enroled', 'value' => (int) ($counts['not_enrolled'] ?? 0), 'accent' => '#f06548'],
|
||||||
|
['label' => 'Logged-In', 'value' => (int) ($counts['logged_in'] ?? 0), 'accent' => '#299cdb'],
|
||||||
|
['label' => 'Not Logged-In', 'value' => (int) ($counts['not_logged_in'] ?? 0), 'accent' => '#878a99'],
|
||||||
|
['label' => 'Draft', 'value' => (int) ($counts['draft'] ?? 0), 'accent' => '#f7b84b'],
|
||||||
|
];
|
||||||
|
$tileRows = array_chunk($tiles, 3);
|
||||||
|
?>
|
||||||
|
|
||||||
|
<div align="center" style="width:100%; margin:24px 0;">
|
||||||
|
<table width="100%" border="0" cellspacing="0" cellpadding="0" style="max-width:600px; border-collapse:collapse;">
|
||||||
|
<tr>
|
||||||
|
<td style="padding:0 12px 12px; font-family:arial, sans-serif; font-size:15px; font-weight:600; color:#343a40; text-align:left;">
|
||||||
|
Enrollment Summary
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td style="padding:0 8px;">
|
||||||
|
<table width="100%" border="0" cellspacing="0" cellpadding="0" style="border-collapse:collapse;">
|
||||||
|
<?php foreach ($tileRows as $rowTiles): ?>
|
||||||
|
<tr>
|
||||||
|
<?php foreach ($rowTiles as $tile): ?>
|
||||||
|
<td width="33%" align="center" valign="top" style="padding:6px;">
|
||||||
|
<table width="100%" border="0" cellspacing="0" cellpadding="0" style="border-collapse:collapse; background-color:#ffffff; border:1px solid #e9ecef; border-radius:8px;">
|
||||||
|
<tr>
|
||||||
|
<td height="4" style="background-color:<?= esc($tile['accent']) ?>; font-size:0; line-height:0; border-radius:8px 8px 0 0;"> </td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td align="center" style="padding:18px 10px 20px;">
|
||||||
|
<div style="font-family:arial, sans-serif; font-size:26px; font-weight:700; color:#212529; line-height:1.1; margin:0 0 6px 0;">
|
||||||
|
<?= $tile['value'] ?>
|
||||||
|
</div>
|
||||||
|
<div style="font-family:arial, sans-serif; font-size:12px; font-weight:500; color:#6c757d; line-height:1.3; letter-spacing:0.2px;">
|
||||||
|
<?= esc($tile['label']) ?>
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
<?php endforeach; ?>
|
||||||
|
<?php
|
||||||
|
$missingCells = 3 - count($rowTiles);
|
||||||
|
for ($i = 0; $i < $missingCells; $i++):
|
||||||
|
?>
|
||||||
|
<td width="33%" style="padding:6px; font-size:0; line-height:0;"> </td>
|
||||||
|
<?php endfor; ?>
|
||||||
|
</tr>
|
||||||
|
<?php endforeach; ?>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
@ -89,16 +89,11 @@ p{
|
|||||||
<table width="100%" border="0" cellspacing="0" cellpadding="0" class="mail-template-header">
|
<table width="100%" border="0" cellspacing="0" cellpadding="0" class="mail-template-header">
|
||||||
<tr style="height:90px; background-color: #ffffff !important;">
|
<tr style="height:90px; background-color: #ffffff !important;">
|
||||||
<td align="left" class="client_logo" style="padding:5px;" width="50%">
|
<td align="left" class="client_logo" style="padding:5px;" width="50%">
|
||||||
<div style="
|
<?php if (!empty($client_logo)): ?>
|
||||||
width:160px;
|
<img src="<?= esc($client_logo) ?>"
|
||||||
height:80px;
|
alt="Client Logo"
|
||||||
background-image:url('<?= $client_logo ?? "" ?>');
|
style="height:auto; max-width:160px; max-height:80px; display:block;">
|
||||||
background-size:contain;
|
<?php endif; ?>
|
||||||
background-repeat:no-repeat;
|
|
||||||
background-position: center;
|
|
||||||
">
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</td>
|
</td>
|
||||||
<td align="right" class="nhance_logo" style="padding:5px;" width="50%">
|
<td align="right" class="nhance_logo" style="padding:5px;" width="50%">
|
||||||
<img src="<?= base_url('/public/assets/images/Nhance-Logo-Final.png'); ?>"
|
<img src="<?= base_url('/public/assets/images/Nhance-Logo-Final.png'); ?>"
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user