FIXSEC_ISSUE_SQL_INJECT

This commit is contained in:
velz 2026-02-27 12:05:37 +05:30
parent 997aae68ef
commit f616c5219b
8 changed files with 318 additions and 263 deletions

View File

@ -142,24 +142,38 @@ class ClientController extends AdminController
return $this->response->setJSON(['isDuplicate' => $isDuplicate]); return $this->response->setJSON(['isDuplicate' => $isDuplicate]);
} }
private const ALLOWED_DUPLICATE_CHECK_TABLES = [
'clients', 'client_branch', 'level_contacts', 'insurers', 'insurer_branch',
'tpa', 'tpa_branch', 'policies', 'client_policy', 'user_profiles',
];
public function checkDuplicateTableFieldValue() public function checkDuplicateTableFieldValue()
{ {
$table = $this->request->getPost('table'); $table = $this->request->getPost('table');
$field = $this->request->getPost('field'); $field = $this->request->getPost('field');
$value = $this->request->getPost('value'); $value = $this->request->getPost('value');
// Load the database if not already loaded if (!in_array($table, self::ALLOWED_DUPLICATE_CHECK_TABLES, true)) {
$db = db_connect(); return $this->response->setJSON(['isDuplicate' => false, 'error' => 'Invalid table']);
}
$db = db_connect();
$tableFields = $db->getFieldNames($table);
// Perform the query
$builder = $db->table($table); $builder = $db->table($table);
if (is_array($value)) { if (is_array($value)) {
$isDuplicate = $builder->where($value)->where('is_active', 1)->countAllResults() > 0; $filteredValue = array_intersect_key($value, array_flip($tableFields));
if (empty($filteredValue)) {
return $this->response->setJSON(['isDuplicate' => false, 'error' => 'Invalid fields']);
}
$isDuplicate = $builder->where($filteredValue)->where('is_active', 1)->countAllResults() > 0;
} else { } else {
if (!in_array($field, $tableFields, true)) {
return $this->response->setJSON(['isDuplicate' => false, 'error' => 'Invalid field']);
}
$isDuplicate = $builder->where($field, $value)->where('is_active', 1)->countAllResults() > 0; $isDuplicate = $builder->where($field, $value)->where('is_active', 1)->countAllResults() > 0;
} }
// Return the result
return $this->response->setJSON(['isDuplicate' => $isDuplicate]); return $this->response->setJSON(['isDuplicate' => $isDuplicate]);
} }

View File

@ -4360,13 +4360,15 @@ class EmpDataServiceController extends BaseController
{ {
$client_policy_id = $arrayData['client_policy_id']; $client_policy_id = $arrayData['client_policy_id'];
$cd_ac_pk = $this->clientPolicyModel->select('cd_ac_pk')->where('id',$client_policy_id)->first(); $cd_ac_pk = $this->clientPolicyModel->select('cd_ac_pk')->where('id',$client_policy_id)->first();
$sanitizedIds = array_map('intval', $arrayData['employeeIds']);
$placeholders = implode(',', array_fill(0, count($sanitizedIds), '?'));
$amount = $this->employeePolicyModel->query(" $amount = $this->employeePolicyModel->query("
SELECT SUM(rata_premimum + gst) AS total_sum SELECT SUM(rata_premimum + gst) AS total_sum
FROM employee_polices FROM employee_polices
JOIN employees ON employees.id = employee_polices.employee_id JOIN employees ON employees.id = employee_polices.employee_id
WHERE employees.unit = '$unit' WHERE employees.unit = ?
AND employee_polices.id IN (" . implode(',', $arrayData['employeeIds']) . ") AND employee_polices.id IN ($placeholders)
")->getRow(); ", array_merge([$unit], $sanitizedIds))->getRow();
if($amount){ if($amount){
@ -4625,11 +4627,14 @@ class EmpDataServiceController extends BaseController
// AND employee_polices.id IN (" . implode(',', $arrayData['employeeIds']) . ") // AND employee_polices.id IN (" . implode(',', $arrayData['employeeIds']) . ")
// ")->getRow(); // ")->getRow();
$sanitizedIds = array_map('intval', $arrayData['employeeIds']);
$placeholders = implode(',', array_fill(0, count($sanitizedIds), '?'));
$safeAddOneDay = (int)$add_one_day;
$amount = $this->employeePolicyModel->query(" $amount = $this->employeePolicyModel->query("
SELECT SELECT
SUM(ROUND( SUM(ROUND(
((employee_polices.rata_premimum * (DATEDIFF(employee_polices.policy_end_date, emp_endorsement.new_value) + '$add_one_day')) / 365) + ((employee_polices.rata_premimum * (DATEDIFF(employee_polices.policy_end_date, emp_endorsement.new_value) + ?)) / 365) +
(((employee_polices.rata_premimum * (DATEDIFF(employee_polices.policy_end_date, emp_endorsement.new_value) + '$add_one_day')) / 365) * 0.18), (((employee_polices.rata_premimum * (DATEDIFF(employee_polices.policy_end_date, emp_endorsement.new_value) + ?)) / 365) * 0.18),
2 2
)) AS total_sum )) AS total_sum
FROM FROM
@ -4639,14 +4644,14 @@ class EmpDataServiceController extends BaseController
JOIN JOIN
emp_endorsement ON emp_endorsement.pk = employee_polices.id emp_endorsement ON emp_endorsement.pk = employee_polices.id
WHERE WHERE
employee_polices.id IN (" . implode(',', $arrayData['employeeIds']) . ") employee_polices.id IN ($placeholders)
AND emp_endorsement.pk IN (" . implode(',', $arrayData['employeeIds']) . ") AND emp_endorsement.pk IN ($placeholders)
AND employee_polices.claim_status = 0 AND employee_polices.claim_status = 0
AND emp_endorsement.field_name = 'date_of_exit' AND emp_endorsement.field_name = 'date_of_exit'
AND emp_endorsement.is_active = 1 AND emp_endorsement.is_active = 1
AND emp_endorsement.actions = 'd' AND emp_endorsement.actions = 'd'
AND emp_endorsement.status != 'truncated'; AND emp_endorsement.status != 'truncated'
")->getRow(); ", array_merge([$safeAddOneDay, $safeAddOneDay], $sanitizedIds, $sanitizedIds))->getRow();
// dd(db_connect()->getLastQuery(), $amount); // dd(db_connect()->getLastQuery(), $amount);

View File

@ -766,18 +766,18 @@ if(!function_exists('query_construct_for_emp_policy_id')){
$gst_alise = ''; $gst_alise = '';
} }
$subQuery .= "SELECT " . intval($index) . $row_id_alise; $subQuery .= "SELECT " . intval($index) . $row_id_alise;
$subQuery .= "'" . $employee[$col_index['emp_name']] . "'" . $emp_name_alise; $subQuery .= $db->escape($employee[$col_index['emp_name']]) . $emp_name_alise;
$subQuery .= "'" . $employee[$col_index['emp_code']] . "'" . $emp_code_alise; $subQuery .= $db->escape($employee[$col_index['emp_code']]) . $emp_code_alise;
$subQuery .= "'" . $employee[$col_index['emp_dob']] . "'" . $emp_dob_alise; $subQuery .= $db->escape($employee[$col_index['emp_dob']]) . $emp_dob_alise;
$subQuery .= "'" . $employee[$col_index['emp_gender']] . "'" . $emp_gender_alise; $subQuery .= $db->escape($employee[$col_index['emp_gender']]) . $emp_gender_alise;
$subQuery .= "'" . $employee[$col_index['pre_existing_alignments']] . "'" . $pre_existing_alignments_alise; $subQuery .= $db->escape($employee[$col_index['pre_existing_alignments']]) . $pre_existing_alignments_alise;
$subQuery .= "'" . $employee[$col_index['basic_cover_si']] . "'" . $basic_cover_si_alise; $subQuery .= $db->escape($employee[$col_index['basic_cover_si']]) . $basic_cover_si_alise;
$subQuery .= "'" . $employee[$col_index['emp_relationship']] . "'" . $emp_relationship_alise; $subQuery .= $db->escape($employee[$col_index['emp_relationship']]) . $emp_relationship_alise;
$subQuery .= "'" . $employee[$col_index['policy_end_date']] . "'" . $policy_end_date_alise; $subQuery .= $db->escape($employee[$col_index['policy_end_date']]) . $policy_end_date_alise;
$subQuery .= "'" . $employee[$col_index['days']] . "'" . $days_alise; $subQuery .= $db->escape($employee[$col_index['days']]) . $days_alise;
$subQuery .= "'" . $employee[$col_index['premium']] . "'" . $premium_alise; $subQuery .= $db->escape($employee[$col_index['premium']]) . $premium_alise;
$subQuery .= "'" . $employee[$col_index['rata_premimum']] . "'" . $rata_premimum_alise; $subQuery .= $db->escape($employee[$col_index['rata_premimum']]) . $rata_premimum_alise;
$subQuery .= "'" . $employee[$col_index['gst']] . "'" . $gst_alise; $subQuery .= $db->escape($employee[$col_index['gst']]) . $gst_alise;
} }
// Complete the query // Complete the query
@ -893,18 +893,18 @@ if(!function_exists('query_construct_second_stage')){
$gst_alise = ''; $gst_alise = '';
} }
$subQuery .= "SELECT " . intval($index) . $row_id_alise; $subQuery .= "SELECT " . intval($index) . $row_id_alise;
$subQuery .= "'" . $employee[$col_index['emp_name']] . "'" . $emp_name_alise; $subQuery .= $db->escape($employee[$col_index['emp_name']]) . $emp_name_alise;
$subQuery .= "'" . $employee[$col_index['emp_code']] . "'" . $emp_code_alise; $subQuery .= $db->escape($employee[$col_index['emp_code']]) . $emp_code_alise;
$subQuery .= "'" . $employee[$col_index['emp_dob']] . "'" . $emp_dob_alise; $subQuery .= $db->escape($employee[$col_index['emp_dob']]) . $emp_dob_alise;
$subQuery .= "'" . $employee[$col_index['emp_gender']] . "'" . $emp_gender_alise; $subQuery .= $db->escape($employee[$col_index['emp_gender']]) . $emp_gender_alise;
$subQuery .= "'" . $employee[$col_index['pre_existing_alignments']] . "'" . $pre_existing_alignments_alise; $subQuery .= $db->escape($employee[$col_index['pre_existing_alignments']]) . $pre_existing_alignments_alise;
$subQuery .= "'" . $employee[$col_index['basic_cover_si']] . "'" . $basic_cover_si_alise; $subQuery .= $db->escape($employee[$col_index['basic_cover_si']]) . $basic_cover_si_alise;
$subQuery .= "'" . $employee[$col_index['emp_relationship']] . "'" . $emp_relationship_alise; $subQuery .= $db->escape($employee[$col_index['emp_relationship']]) . $emp_relationship_alise;
$subQuery .= "'" . $employee[$col_index['policy_end_date']] . "'" . $policy_end_date_alise; $subQuery .= $db->escape($employee[$col_index['policy_end_date']]) . $policy_end_date_alise;
$subQuery .= "'" . $employee[$col_index['days']] . "'" . $days_alise; $subQuery .= $db->escape($employee[$col_index['days']]) . $days_alise;
$subQuery .= "'" . $employee[$col_index['premium']] . "'" . $premium_alise; $subQuery .= $db->escape($employee[$col_index['premium']]) . $premium_alise;
$subQuery .= "'" . $employee[$col_index['rata_premimum']] . "'" . $rata_premimum_alise; $subQuery .= $db->escape($employee[$col_index['rata_premimum']]) . $rata_premimum_alise;
$subQuery .= "'" . $employee[$col_index['gst']] . "'" . $gst_alise; $subQuery .= $db->escape($employee[$col_index['gst']]) . $gst_alise;
} }
// Complete the query // Complete the query

View File

@ -65,12 +65,23 @@ class DataServiceSqlite
$this->sqliteDb->exec($sql); $this->sqliteDb->exec($sql);
} }
private const ALLOWED_TABLES = ['http', 'log'];
public function insertData(array $data, string $tableName): bool public function insertData(array $data, string $tableName): bool
{ {
log_message('error', 'SQLite insert called: '); log_message('error', 'SQLite insert called: ');
if (!in_array($tableName, self::ALLOWED_TABLES, true)) {
log_message('error', 'SQLite insert rejected: invalid table name: ' . $tableName);
return false;
}
unset($data['context']); unset($data['context']);
$columns = implode(', ', array_keys($data));
// print_r($columns); $safeColumns = array_map(function ($col) {
return preg_replace('/[^a-zA-Z0-9_]/', '', $col);
}, array_keys($data));
$columns = implode(', ', $safeColumns);
$placeholders = implode(', ', array_fill(0, count($data), '?')); $placeholders = implode(', ', array_fill(0, count($data), '?'));
$sql = "INSERT INTO $tableName ($columns) VALUES ($placeholders)"; $sql = "INSERT INTO $tableName ($columns) VALUES ($placeholders)";

View File

@ -228,8 +228,14 @@ class ClientModel extends Model
return $result; return $result;
} }
private const ALLOWED_CONTACT_FIELDS = ['email', 'mobile', 'phone', 'name', 'contact_name', 'contact_email', 'contact_mobile'];
public function isDuplicateByClientBranch($value, $field, $clientId, $branchId) public function isDuplicateByClientBranch($value, $field, $clientId, $branchId)
{ {
if (!in_array($field, self::ALLOWED_CONTACT_FIELDS, true)) {
throw new \InvalidArgumentException("Invalid field name: {$field}");
}
$builder = $this->db->table('level_contacts lc') $builder = $this->db->table('level_contacts lc')
->select('lc.id') ->select('lc.id')
->join('client_branch cb', 'lc.ref_id = cb.id', 'left') ->join('client_branch cb', 'lc.ref_id = cb.id', 'left')

View File

@ -1146,6 +1146,8 @@ class EmployeePolicyModel extends Model
$endorsement_condition = "{$insurer_or_tpa}" === 'tpa' ? "AND (a.endorsement_id IS NULL OR a.endorsement_id = '')" : "AND (a.endorsement_id IS NULL OR a.endorsement_id = '')"; $endorsement_condition = "{$insurer_or_tpa}" === 'tpa' ? "AND (a.endorsement_id IS NULL OR a.endorsement_id = '')" : "AND (a.endorsement_id IS NULL OR a.endorsement_id = '')";
$add_one_day = (int)$add_one_day;
$query = $this->db->query(" $query = $this->db->query("
SELECT DISTINCT SELECT DISTINCT
a.id as endorsement_primarykey, a.id as endorsement_primarykey,
@ -1688,30 +1690,29 @@ class EmployeePolicyModel extends Model
public function bulkUpdate($emp_details) public function bulkUpdate($emp_details)
{ {
// Extract IDs, tpa_ids, and uhids // Extract IDs, tpa_ids, and uhids
$ids = array_column($emp_details, 'id'); $ids = array_map('intval', array_column($emp_details, 'id'));
$tpa_ids = array_column($emp_details, 'tpa_id'); $tpa_ids = array_column($emp_details, 'tpa_id');
$uhids = array_column($emp_details, 'uhid'); $uhids = array_column($emp_details, 'uhid');
// Escape values for SQL // Escape string values for SQL
$escapedIds = array_map([$this->db, 'escape'], $ids);
$escapedTpaIds = array_map([$this->db, 'escape'], $tpa_ids); $escapedTpaIds = array_map([$this->db, 'escape'], $tpa_ids);
$escapedUhids = array_map([$this->db, 'escape'], $uhids); $escapedUhids = array_map([$this->db, 'escape'], $uhids);
// Construct the CASE statements // Construct the CASE statements with int-cast IDs
$caseTpaId = array_map(function($id, $tpa_id) { $caseTpaId = array_map(function($id, $tpa_id) {
return "WHEN id = $id THEN $tpa_id"; return "WHEN id = {$id} THEN {$tpa_id}";
}, $escapedIds, $escapedTpaIds); }, $ids, $escapedTpaIds);
$caseUhid = array_map(function($id, $uhid) { $caseUhid = array_map(function($id, $uhid) {
return "WHEN id = $id THEN $uhid"; return "WHEN id = {$id} THEN {$uhid}";
}, $escapedIds, $escapedUhids); }, $ids, $escapedUhids);
// Convert cases to a string // Convert cases to a string
$caseTpaIdString = implode(' ', $caseTpaId); $caseTpaIdString = implode(' ', $caseTpaId);
$caseUhidString = implode(' ', $caseUhid); $caseUhidString = implode(' ', $caseUhid);
// Convert ids to a string // Convert ids to a string
$idsString = implode(', ', $escapedIds); $idsString = implode(', ', $ids);
// Construct the SQL query // Construct the SQL query
$sql = " $sql = "
@ -1837,18 +1838,19 @@ class EmployeePolicyModel extends Model
$groupKeys = []; $groupKeys = [];
foreach ($endorsement_details as $row) { foreach ($endorsement_details as $row) {
$groupKey = $this->db->escape($row['group_key']); $groupKey = (int)$row['group_key'];
$endorsementId = $this->db->escape($row['endorsement_id']); $endorsementId = $this->db->escape($row['endorsement_id']);
$caseParts[] = "WHEN group_key = {$groupKey} THEN {$endorsementId}"; $caseParts[] = "WHEN group_key = {$groupKey} THEN {$endorsementId}";
$groupKeys[] = $groupKey; $groupKeys[] = $groupKey;
} }
$groupKeysStr = implode(', ', $groupKeys);
$sql = " $sql = "
UPDATE emp_endorsement UPDATE emp_endorsement
SET SET
endorsement_id = CASE " . implode(' ', $caseParts) . " END, endorsement_id = CASE " . implode(' ', $caseParts) . " END,
status = 'complete' status = 'complete'
WHERE group_key IN (" . implode(', ', $groupKeys) . ") WHERE group_key IN ({$groupKeysStr})
"; ";
$this->db->query($sql); $this->db->query($sql);
@ -1866,26 +1868,37 @@ class EmployeePolicyModel extends Model
public function bulkUpdateForCorrection($emp_details){ public function bulkUpdateForCorrection($emp_details){
$ids = [];
$caseStatements = [];
$employeeTableFields = $this->db->getFieldNames('employees');
foreach ($emp_details as $employee) { foreach ($emp_details as $employee) {
$id = $this->db->escape($employee['id']); $id = (int)$employee['id'];
$ids[] = $id; $ids[] = $id;
foreach ($employee as $field => $value) { foreach ($employee as $field => $value) {
if ($field === 'id') continue; if ($field === 'id') continue;
$safeField = preg_replace('/[^a-zA-Z0-9_]/', '', $field);
if (!in_array($safeField, $employeeTableFields, true)) {
continue;
}
$escapedValue = $this->db->escape($value); $escapedValue = $this->db->escape($value);
if (!isset($caseStatements[$field])) { if (!isset($caseStatements[$safeField])) {
$caseStatements[$field] = []; $caseStatements[$safeField] = [];
} }
$caseStatements[$field][] = "WHEN id = $id THEN $escapedValue"; $caseStatements[$safeField][] = "WHEN id = {$id} THEN {$escapedValue}";
} }
} }
// Construct the CASE strings // Construct the CASE strings
$caseStrings = []; $caseStrings = [];
foreach ($caseStatements as $field => $cases) { foreach ($caseStatements as $field => $cases) {
$caseStrings[] = "$field = CASE " . implode(' ', $cases) . " END"; $caseStrings[] = "{$field} = CASE " . implode(' ', $cases) . " END";
} }
// Convert ids to a string // Convert ids to a string
@ -1941,7 +1954,7 @@ class EmployeePolicyModel extends Model
->getRowArray(); ->getRowArray();
// Determine if one day should be added for deletion // Determine if one day should be added for deletion
$add_one_day = (!empty($result) && $result['deletion_add_day'] == 1) ? 1 : 0; $add_one_day = (int)((!empty($result) && $result['deletion_add_day'] == 1) ? 1 : 0);
$query = $this->db->query(" $query = $this->db->query("
@ -2130,14 +2143,17 @@ class EmployeePolicyModel extends Model
$caseEndorsementId = "CASE "; $caseEndorsementId = "CASE ";
$ids = []; $ids = [];
foreach ($array as $item) { foreach ($array as $item) {
$caseStatus .= "WHEN id = {$item['id']} THEN '{$item['status']}' "; $safeId = (int)$item['id'];
$caseEndorsementId .= "WHEN id = {$item['id']} THEN '{$item['endorsement_id']}' "; $safeStatus = $this->db->escape($item['status']);
$ids[] = $item['id']; $safeEndorsementId = $this->db->escape($item['endorsement_id']);
$caseStatus .= "WHEN id = {$safeId} THEN {$safeStatus} ";
$caseEndorsementId .= "WHEN id = {$safeId} THEN {$safeEndorsementId} ";
$ids[] = $safeId;
} }
$caseStatus .= "END"; $caseStatus .= "END";
$caseEndorsementId .= "END"; $caseEndorsementId .= "END";
$ids = implode(',', $ids); $ids = implode(',', $ids);
$query = "UPDATE emp_endorsement SET status = $caseStatus, endorsement_id = $caseEndorsementId WHERE id IN ($ids);"; // Execute the query $query = "UPDATE emp_endorsement SET status = $caseStatus, endorsement_id = $caseEndorsementId WHERE id IN ($ids);";
$this->db->query($query); $this->db->query($query);
} }

View File

@ -127,6 +127,22 @@
return $data; return $data;
} }
private const ALLOWED_DATE_TYPES = [
'policy_issue_date',
'policy_start_date',
'policy_end_date',
'created_at',
'updated_at',
];
private function validateDateType($date_type)
{
if (!in_array($date_type, self::ALLOWED_DATE_TYPES, true)) {
throw new \InvalidArgumentException("Invalid date_type: {$date_type}");
}
return $date_type;
}
// BDS Report OLD Functin for QUERY // BDS Report OLD Functin for QUERY
// public function getBDSReportList($client_id, $policy_id, $branch_id, $issuer) // public function getBDSReportList($client_id, $policy_id, $branch_id, $issuer)
public function getBDSReportListOld($start_date = 0, $end_date = 0, $client_id = 0, $insurer_id = 0, $policy_type_id = 0, $date_type = 0, $issuer = 0) public function getBDSReportListOld($start_date = 0, $end_date = 0, $client_id = 0, $insurer_id = 0, $policy_type_id = 0, $date_type = 0, $issuer = 0)
@ -282,11 +298,12 @@
// Check if the start date and end date are provided // Check if the start date and end date are provided
if ($start_date != 0 && $end_date != 0 && $date_type != 0) { if ($start_date != 0 && $end_date != 0 && $date_type != 0) {
$this->validateDateType($date_type);
$startDate = date('Y-m-d 00:00:00', strtotime($start_date)); $startDate = date('Y-m-d 00:00:00', strtotime($start_date));
$endDate = date('Y-m-d 23:59:59', strtotime($end_date)); $endDate = date('Y-m-d 23:59:59', strtotime($end_date));
$builder->where('policy_transaction.' . $date_type . '>=', $startDate) $builder->where('policy_transaction.' . $date_type . ' >=', $startDate)
->where('policy_transaction.' . $date_type . '<=', $endDate); ->where('policy_transaction.' . $date_type . ' <=', $endDate);
} else { } else {
// $fromDate = date('Y-m-d', strtotime('-30 days')); // $fromDate = date('Y-m-d', strtotime('-30 days'));
@ -835,18 +852,16 @@
// Check if the start date and end date are provided // Check if the start date and end date are provided
if ($start_date != 0 && $end_date != 0 && $date_type != 0 && $date_type != 'statement_month') { if ($start_date != 0 && $end_date != 0 && $date_type != 0 && $date_type != 'statement_month') {
$this->validateDateType($date_type);
$startDate = date('Y-m-d 00:00:00', strtotime($start_date)); $startDate = date('Y-m-d 00:00:00', strtotime($start_date));
$endDate = date('Y-m-d 23:59:59', strtotime($end_date)); $endDate = date('Y-m-d 23:59:59', strtotime($end_date));
// $builder->where('policy_transaction.' . $date_type . '>=', $startDate)
// ->where('policy_transaction.' . $date_type . '<=', $endDate);
if($date_type == "policy_issue_date"){ if($date_type == "policy_issue_date"){
$builder->where("pt_co_share_details.pt_policy_issue_date >=", $startDate) $builder->where("pt_co_share_details.pt_policy_issue_date >=", $startDate)
->where("pt_co_share_details.pt_policy_issue_date <=", $endDate); ->where("pt_co_share_details.pt_policy_issue_date <=", $endDate);
}else{ }else{
$builder->where('policy_transaction.' . $date_type . '>=', $startDate) $builder->where('policy_transaction.' . $date_type . ' >=', $startDate)
->where('policy_transaction.' . $date_type . '<=', $endDate); ->where('policy_transaction.' . $date_type . ' <=', $endDate);
} }
} }
@ -1064,6 +1079,7 @@
// Optimize Date Filtering // Optimize Date Filtering
if (!empty($start_date) && !empty($end_date) && !empty($date_type)) { if (!empty($start_date) && !empty($end_date) && !empty($date_type)) {
$this->validateDateType($date_type);
$startDate = change_date_format($start_date, 'd/m/Y', 'Y-m-d 00:00:00'); $startDate = change_date_format($start_date, 'd/m/Y', 'Y-m-d 00:00:00');
$endDate = change_date_format($end_date, 'd/m/Y', 'Y-m-d 23:59:59'); $endDate = change_date_format($end_date, 'd/m/Y', 'Y-m-d 23:59:59');
@ -1165,6 +1181,7 @@
if ($start_date != 0 && $end_date != 0 && $date_type != 0) { if ($start_date != 0 && $end_date != 0 && $date_type != 0) {
$this->validateDateType($date_type);
$startDate = change_date_format($start_date, 'd/m/Y', 'Y-m-d 00:00:00'); $startDate = change_date_format($start_date, 'd/m/Y', 'Y-m-d 00:00:00');
$endDate = change_date_format($end_date, 'd/m/Y', 'Y-m-d 23:59:59'); $endDate = change_date_format($end_date, 'd/m/Y', 'Y-m-d 23:59:59');
@ -1172,8 +1189,8 @@
$builder->where("pt_co_share_details.pt_policy_issue_date >=", $startDate) $builder->where("pt_co_share_details.pt_policy_issue_date >=", $startDate)
->where("pt_co_share_details.pt_policy_issue_date <=", $endDate); ->where("pt_co_share_details.pt_policy_issue_date <=", $endDate);
}else{ }else{
$builder->where('policy_transaction.' . $date_type . '>=', $startDate) $builder->where('policy_transaction.' . $date_type . ' >=', $startDate)
->where('policy_transaction.' . $date_type . '<=', $endDate); ->where('policy_transaction.' . $date_type . ' <=', $endDate);
} }
} else { } else {
@ -1349,18 +1366,16 @@
if ($start_date != 0 && $end_date != 0 && $date_type != 0) { if ($start_date != 0 && $end_date != 0 && $date_type != 0) {
$this->validateDateType($date_type);
$startDate = date('Y-m-d 00:00:00', strtotime($start_date)); $startDate = date('Y-m-d 00:00:00', strtotime($start_date));
$endDate = date('Y-m-d 23:59:59', strtotime($end_date)); $endDate = date('Y-m-d 23:59:59', strtotime($end_date));
// $builder->where('policy_transaction.' . $date_type . '>=', $startDate)
// ->where('policy_transaction.' . $date_type . '<=', $endDate);
if($date_type == "policy_issue_date"){ if($date_type == "policy_issue_date"){
$builder->where("pt_co_share_details.pt_policy_issue_date >=", $startDate) $builder->where("pt_co_share_details.pt_policy_issue_date >=", $startDate)
->where("pt_co_share_details.pt_policy_issue_date <=", $endDate); ->where("pt_co_share_details.pt_policy_issue_date <=", $endDate);
}else{ }else{
$builder->where('policy_transaction.' . $date_type . '>=', $startDate) $builder->where('policy_transaction.' . $date_type . ' >=', $startDate)
->where('policy_transaction.' . $date_type . '<=', $endDate); ->where('policy_transaction.' . $date_type . ' <=', $endDate);
} }
} else { } else {
@ -1463,18 +1478,16 @@
if ($start_date != 0 && $end_date != 0 && $date_type != 0) { if ($start_date != 0 && $end_date != 0 && $date_type != 0) {
$this->validateDateType($date_type);
$startDate = date('Y-m-d 00:00:00', strtotime($start_date)); $startDate = date('Y-m-d 00:00:00', strtotime($start_date));
$endDate = date('Y-m-d 23:59:59', strtotime($end_date)); $endDate = date('Y-m-d 23:59:59', strtotime($end_date));
// $builder->where('policy_transaction.' . $date_type . '>=', $startDate)
// ->where('policy_transaction.' . $date_type . '<=', $endDate);
if($date_type == "policy_issue_date"){ if($date_type == "policy_issue_date"){
$builder->where("pt_co_share_details.pt_policy_issue_date >=", $startDate) $builder->where("pt_co_share_details.pt_policy_issue_date >=", $startDate)
->where("pt_co_share_details.pt_policy_issue_date <=", $endDate); ->where("pt_co_share_details.pt_policy_issue_date <=", $endDate);
}else{ }else{
$builder->where('policy_transaction.' . $date_type . '>=', $startDate) $builder->where('policy_transaction.' . $date_type . ' >=', $startDate)
->where('policy_transaction.' . $date_type . '<=', $endDate); ->where('policy_transaction.' . $date_type . ' <=', $endDate);
} }
} else { } else {
@ -1574,18 +1587,16 @@
if ($start_date != 0 && $end_date != 0 && $date_type != 0) { if ($start_date != 0 && $end_date != 0 && $date_type != 0) {
$this->validateDateType($date_type);
$startDate = date('Y-m-d 00:00:00', strtotime($start_date)); $startDate = date('Y-m-d 00:00:00', strtotime($start_date));
$endDate = date('Y-m-d 23:59:59', strtotime($end_date)); $endDate = date('Y-m-d 23:59:59', strtotime($end_date));
// $builder->where('policy_transaction.' . $date_type . '>=', $startDate)
// ->where('policy_transaction.' . $date_type . '<=', $endDate);
if($date_type == "policy_issue_date"){ if($date_type == "policy_issue_date"){
$builder->where("pt_co_share_details.pt_policy_issue_date >=", $startDate) $builder->where("pt_co_share_details.pt_policy_issue_date >=", $startDate)
->where("pt_co_share_details.pt_policy_issue_date <=", $endDate); ->where("pt_co_share_details.pt_policy_issue_date <=", $endDate);
}else{ }else{
$builder->where('policy_transaction.' . $date_type . '>=', $startDate) $builder->where('policy_transaction.' . $date_type . ' >=', $startDate)
->where('policy_transaction.' . $date_type . '<=', $endDate); ->where('policy_transaction.' . $date_type . ' <=', $endDate);
} }
} else { } else {
@ -1689,18 +1700,16 @@
// Date range filtering // Date range filtering
if ($start_date != 0 && $end_date != 0 && $date_type != 0) { if ($start_date != 0 && $end_date != 0 && $date_type != 0) {
$this->validateDateType($date_type);
$startDate = date('Y-m-d 00:00:00', strtotime($start_date)); $startDate = date('Y-m-d 00:00:00', strtotime($start_date));
$endDate = date('Y-m-d 23:59:59', strtotime($end_date)); $endDate = date('Y-m-d 23:59:59', strtotime($end_date));
// $builder->where('policy_transaction.' . $date_type . '>=', $startDate)
// ->where('policy_transaction.' . $date_type . '<=', $endDate);
if($date_type == "policy_issue_date"){ if($date_type == "policy_issue_date"){
$builder->where("pt_co_share_details.pt_policy_issue_date >=", $startDate) $builder->where("pt_co_share_details.pt_policy_issue_date >=", $startDate)
->where("pt_co_share_details.pt_policy_issue_date <=", $endDate); ->where("pt_co_share_details.pt_policy_issue_date <=", $endDate);
}else{ }else{
$builder->where('policy_transaction.' . $date_type . '>=', $startDate) $builder->where('policy_transaction.' . $date_type . ' >=', $startDate)
->where('policy_transaction.' . $date_type . '<=', $endDate); ->where('policy_transaction.' . $date_type . ' <=', $endDate);
} }
} else { } else {
$fromDate = date('Y-m-d', strtotime('-90 days')); $fromDate = date('Y-m-d', strtotime('-90 days'));
@ -2364,6 +2373,7 @@
} }
if ($start_date != 0 && $end_date != 0 && $date_type != 0 && $date_type != 'statement_month') { if ($start_date != 0 && $end_date != 0 && $date_type != 0 && $date_type != 'statement_month') {
$this->validateDateType($date_type);
$startDate = date('Y-m-d 00:00:00', strtotime($start_date)); $startDate = date('Y-m-d 00:00:00', strtotime($start_date));
$endDate = date('Y-m-d 23:59:59', strtotime($end_date)); $endDate = date('Y-m-d 23:59:59', strtotime($end_date));
@ -2489,6 +2499,7 @@
// 3. Date condition (except statement_month) // 3. Date condition (except statement_month)
if ($start_date != 0 && $end_date != 0 && $date_type != 0 && $date_type != 'statement_month') { if ($start_date != 0 && $end_date != 0 && $date_type != 0 && $date_type != 'statement_month') {
$this->validateDateType($date_type);
$startDate = date('Y-m-d 00:00:00', strtotime($start_date)); $startDate = date('Y-m-d 00:00:00', strtotime($start_date));
$endDate = date('Y-m-d 23:59:59', strtotime($end_date)); $endDate = date('Y-m-d 23:59:59', strtotime($end_date));
@ -3080,6 +3091,7 @@
// 3. Date condition (except statement_month) // 3. Date condition (except statement_month)
if ($start_date != 0 && $end_date != 0 && $date_type != 0 && $date_type != 'statement_month') { if ($start_date != 0 && $end_date != 0 && $date_type != 0 && $date_type != 'statement_month') {
$this->validateDateType($date_type);
$startDate = date('Y-m-d 00:00:00', strtotime($start_date)); $startDate = date('Y-m-d 00:00:00', strtotime($start_date));
$endDate = date('Y-m-d 23:59:59', strtotime($end_date)); $endDate = date('Y-m-d 23:59:59', strtotime($end_date));

View File

@ -1,5 +1,4 @@
<?php <?php
namespace App\Models; namespace App\Models;
use CodeIgniter\Model; use CodeIgniter\Model;
@ -12,7 +11,7 @@ class TicketMasterModel extends Model
protected $returnType = 'array'; protected $returnType = 'array';
protected $useSoftDeletes = false; protected $useSoftDeletes = false;
protected $protectFields = true; protected $protectFields = true;
protected $allowedFields = [ protected $allowedFields = [
'id', 'id',
'ticket_type_id', 'ticket_type_id',
'feedback_json', 'feedback_json',
@ -79,9 +78,9 @@ class TicketMasterModel extends Model
'approved_description', 'approved_description',
'file_id', 'file_id',
'denial_letter', 'denial_letter',
'manager_id', 'manager_id',
'agent_id' , 'agent_id',
'vehicle_id', 'vehicle_id',
'hospital_address', 'hospital_address',
@ -98,17 +97,16 @@ class TicketMasterModel extends Model
]; ];
// Callbacks // Callbacks
protected $allowCallbacks = true; protected $allowCallbacks = true;
protected $beforeInsert = ["checkAndADDCreatedByValue"]; protected $beforeInsert = ["checkAndADDCreatedByValue"];
protected $afterInsert = []; protected $afterInsert = [];
protected $beforeUpdate = ["checkAndUpdateUpdatedByValue"]; protected $beforeUpdate = ["checkAndUpdateUpdatedByValue"];
protected $afterUpdate = []; protected $afterUpdate = [];
protected $beforeFind = []; protected $beforeFind = [];
protected $afterFind = []; protected $afterFind = [];
protected $beforeDelete = []; protected $beforeDelete = [];
protected $afterDelete = []; protected $afterDelete = [];
protected function checkAndADDCreatedByValue(array $data) protected function checkAndADDCreatedByValue(array $data)
{ {
@ -150,15 +148,15 @@ class TicketMasterModel extends Model
public function getTemplateDataByTicketID($ticket_id) public function getTemplateDataByTicketID($ticket_id)
{ {
$template_data = $this $template_data = $this
->select("ticket_mail_template.*, CASE ->select("ticket_mail_template.*, CASE
WHEN employees.email_corporate IS NULL OR employees.email_corporate = '' WHEN employees.email_corporate IS NULL OR employees.email_corporate = ''
THEN ticket_master.emp_mail THEN ticket_master.emp_mail
ELSE employees.email_corporate ELSE employees.email_corporate
END as emp_mail, ,ticket_master.claim_status_id") END as emp_mail, ,ticket_master.claim_status_id")
->join('ticket_claim_status', 'ticket_master.claim_status_id = ticket_claim_status.id and ticket_claim_status.is_active = 1') ->join('ticket_claim_status', 'ticket_master.claim_status_id = ticket_claim_status.id and ticket_claim_status.is_active = 1')
->join('ticket_mail_template', ' ->join('ticket_mail_template', '
ticket_claim_status.trigger_type = ticket_mail_template.trigger_type ticket_claim_status.trigger_type = ticket_mail_template.trigger_type
and ticket_claim_status.ticket_type = ticket_mail_template.ticket_type and ticket_claim_status.ticket_type = ticket_mail_template.ticket_type
and ticket_mail_template.is_active = 1') and ticket_mail_template.is_active = 1')
->join('employees', 'employees.id = ticket_master.emp_id', 'left') ->join('employees', 'employees.id = ticket_master.emp_id', 'left')
->where('ticket_master.id', $ticket_id) ->where('ticket_master.id', $ticket_id)
@ -173,11 +171,11 @@ class TicketMasterModel extends Model
{ {
$ticket_data = $this->select(" $ticket_data = $this->select("
ticket_master.*, ticket_master.*,
CASE CASE
WHEN employees.email_corporate IS NULL OR employees.email_corporate = '' WHEN employees.email_corporate IS NULL OR employees.email_corporate = ''
THEN ticket_master.emp_mail THEN ticket_master.emp_mail
ELSE employees.email_corporate ELSE employees.email_corporate
END as emp_mail, END as emp_mail,
user_profiles.first_name as acm, user_profiles.first_name as acm,
user_profiles.mobile as acm_mobile, user_profiles.mobile as acm_mobile,
@ -205,7 +203,7 @@ class TicketMasterModel extends Model
//get TAT report BAND wise Data //get TAT report BAND wise Data
// public function getTATReport($ticket_type = null, $start_date = null, $end_date = null) // public function getTATReport($ticket_type = null, $start_date = null, $end_date = null)
// { // {
// //set default last 3 months data date // //set default last 3 months data date
// $fromDate = date('Y-m-d', strtotime('-90 days')); // $fromDate = date('Y-m-d', strtotime('-90 days'));
// $toDate = date('Y-m-d 23:59:59'); // $toDate = date('Y-m-d 23:59:59');
@ -222,9 +220,9 @@ class TicketMasterModel extends Model
// } // }
// // Fetch claim statuses from the `ticket_claim_status` table // // Fetch claim statuses from the `ticket_claim_status` table
// $statusQuery = " SELECT // $statusQuery = " SELECT
// id, claim_status, ticket_type // id, claim_status, ticket_type
// FROM ticket_claim_status // FROM ticket_claim_status
// Where is_active = 1 // Where is_active = 1
// $ticket_type_data_1 // $ticket_type_data_1
// "; // ";
@ -273,7 +271,6 @@ class TicketMasterModel extends Model
// $dynamicSelect = rtrim($dynamicSelect, ', '); // $dynamicSelect = rtrim($dynamicSelect, ', ');
// // dd($dynamicSelect); // // dd($dynamicSelect);
// // Construct the full SQL query // // Construct the full SQL query
// $sql = " // $sql = "
// SELECT // SELECT
@ -326,7 +323,7 @@ class TicketMasterModel extends Model
// WHERE // WHERE
// tm.ticket_type_id = tcs.id // tm.ticket_type_id = tcs.id
// $ticket_type_data_2 // $ticket_type_data_2
// AND tm.created_at >= '$fromDate' // AND tm.created_at >= '$fromDate'
// AND tm.created_at <= '$toDate' // AND tm.created_at <= '$toDate'
// AND tm.is_active = 1 // AND tm.is_active = 1
// AND th.is_active = 1 // AND th.is_active = 1
@ -371,9 +368,9 @@ class TicketMasterModel extends Model
// } // }
// // Fetch claim statuses from the `ticket_claim_status` table // // Fetch claim statuses from the `ticket_claim_status` table
// $statusQuery = " SELECT // $statusQuery = " SELECT
// id, claim_status, ticket_type // id, claim_status, ticket_type
// FROM ticket_claim_status // FROM ticket_claim_status
// Where is_active = 1 // Where is_active = 1
// $ticket_type_data_1 // $ticket_type_data_1
// "; // ";
@ -422,7 +419,6 @@ class TicketMasterModel extends Model
// $dynamicSelect = rtrim($dynamicSelect, ', '); // $dynamicSelect = rtrim($dynamicSelect, ', ');
// // dd($dynamicSelect); // // dd($dynamicSelect);
// // Construct the full SQL query // // Construct the full SQL query
// $sql = " // $sql = "
// SELECT // SELECT
@ -451,20 +447,20 @@ class TicketMasterModel extends Model
// FROM // FROM
// ticket_master tm // ticket_master tm
// LEFT JOIN ( // LEFT JOIN (
// SELECT // SELECT
// th.ticket_id, // th.ticket_id,
// th.new_value AS claim_status_id, // th.new_value AS claim_status_id,
// MAX(th.created_at) AS change_date // MAX(th.created_at) AS change_date
// FROM // FROM
// ticket_history th // ticket_history th
// WHERE // WHERE
// th.field_name = 'claim_status_id' // th.field_name = 'claim_status_id'
// AND th.is_active = 1 // AND th.is_active = 1
// GROUP BY // GROUP BY
// th.ticket_id, th.new_value // th.ticket_id, th.new_value
// ) AS latest_status ON latest_status.ticket_id = tm.id // ) AS latest_status ON latest_status.ticket_id = tm.id
// WHERE tm.is_active = 1 // WHERE tm.is_active = 1
// AND tm.created_at >= '$fromDate' // AND tm.created_at >= '$fromDate'
// AND tm.created_at <= '$toDate' // AND tm.created_at <= '$toDate'
// " . (!empty($ticket_type) ? " AND tm.ticket_type_id = $ticket_type" : "") . " // " . (!empty($ticket_type) ? " AND tm.ticket_type_id = $ticket_type" : "") . "
// GROUP BY tm.id, latest_status.claim_status_id, latest_status.change_date, tm.created_at // GROUP BY tm.id, latest_status.claim_status_id, latest_status.change_date, tm.created_at
@ -493,33 +489,33 @@ class TicketMasterModel extends Model
{ {
// Set default date range (last 90 days) // Set default date range (last 90 days)
$fromDate = date('Y-m-d', strtotime('-90 days')); $fromDate = date('Y-m-d', strtotime('-90 days'));
$toDate = date('Y-m-d 23:59:59'); $toDate = date('Y-m-d 23:59:59');
if (!empty($start_date) && !empty($end_date)) { if (! empty($start_date) && ! empty($end_date)) {
$fromDate = change_date_format($start_date); $fromDate = change_date_format($start_date);
$toDate = change_date_format($end_date); $toDate = change_date_format($end_date);
} }
// Get all active claim statuses // Get all active claim statuses
$statusQuery = $this->db->table('ticket_claim_status') $statusQuery = $this->db->table('ticket_claim_status')
->select('id, claim_status') ->select('id, claim_status')
->where('is_active', 1) ->where('is_active', 1)
->orderBy('id', 'ASC'); ->orderBy('id', 'ASC');
if (!empty($ticket_type)) { if (! empty($ticket_type)) {
$statusQuery->where('ticket_type', $ticket_type); $statusQuery->where('ticket_type', $ticket_type);
} }
$statusResult = $statusQuery->get()->getResultArray(); $statusResult = $statusQuery->get()->getResultArray();
// Create a list of all TAT categories we want in the output // Create a list of all TAT categories we want in the output
$tatCategories = [ $tatCategories = [
'Above 20 Days', 'Above 20 Days',
'13-20 Days', '13-20 Days',
'7-12 Days', '7-12 Days',
'0-6 Days' '0-6 Days',
]; ];
// Initialize the result array with all TAT categories // Initialize the result array with all TAT categories
$result = []; $result = [];
foreach ($tatCategories as $category) { foreach ($tatCategories as $category) {
@ -529,39 +525,39 @@ class TicketMasterModel extends Model
} }
$result[] = $row; $result[] = $row;
} }
// Get the base query for ticket counts by status and TAT category // Get the base query for ticket counts by status and TAT category
$query = $this->db->table('ticket_master tm') $query = $this->db->table('ticket_master tm')
->select([ ->select([
'tcs.claim_status', 'tcs.claim_status',
'CASE 'CASE
WHEN DATEDIFF(CURDATE(), COALESCE( WHEN DATEDIFF(CURDATE(), COALESCE(
(SELECT MAX(th.created_at) (SELECT MAX(th.created_at)
FROM ticket_history th FROM ticket_history th
WHERE th.ticket_id = tm.id WHERE th.ticket_id = tm.id
AND th.field_name = "claim_status_id" AND th.field_name = "claim_status_id"
AND th.is_active = 1), AND th.is_active = 1),
tm.created_at tm.created_at
)) BETWEEN 0 AND 6 THEN "0-6 Days" )) BETWEEN 0 AND 6 THEN "0-6 Days"
WHEN DATEDIFF(CURDATE(), COALESCE( WHEN DATEDIFF(CURDATE(), COALESCE(
(SELECT MAX(th.created_at) (SELECT MAX(th.created_at)
FROM ticket_history th FROM ticket_history th
WHERE th.ticket_id = tm.id WHERE th.ticket_id = tm.id
AND th.field_name = "claim_status_id" AND th.field_name = "claim_status_id"
AND th.is_active = 1), AND th.is_active = 1),
tm.created_at tm.created_at
)) BETWEEN 7 AND 12 THEN "7-12 Days" )) BETWEEN 7 AND 12 THEN "7-12 Days"
WHEN DATEDIFF(CURDATE(), COALESCE( WHEN DATEDIFF(CURDATE(), COALESCE(
(SELECT MAX(th.created_at) (SELECT MAX(th.created_at)
FROM ticket_history th FROM ticket_history th
WHERE th.ticket_id = tm.id WHERE th.ticket_id = tm.id
AND th.field_name = "claim_status_id" AND th.field_name = "claim_status_id"
AND th.is_active = 1), AND th.is_active = 1),
tm.created_at tm.created_at
)) BETWEEN 13 AND 20 THEN "13-20 Days" )) BETWEEN 13 AND 20 THEN "13-20 Days"
ELSE "Above 20 Days" ELSE "Above 20 Days"
END AS tat_category', END AS tat_category',
'COUNT(*) AS count' 'COUNT(*) AS count',
]) ])
->join('ticket_claim_status tcs', 'tcs.id = tm.claim_status_id AND tcs.is_active = 1') ->join('ticket_claim_status tcs', 'tcs.id = tm.claim_status_id AND tcs.is_active = 1')
->where('tm.is_active', 1) ->where('tm.is_active', 1)
@ -569,23 +565,23 @@ class TicketMasterModel extends Model
->where('tm.created_at <=', $toDate) ->where('tm.created_at <=', $toDate)
->groupBy('tcs.claim_status, tat_category') ->groupBy('tcs.claim_status, tat_category')
->orderBy('FIELD(tat_category, "Above 20 Days", "13-20 Days", "7-12 Days", "0-6 Days")'); ->orderBy('FIELD(tat_category, "Above 20 Days", "13-20 Days", "7-12 Days", "0-6 Days")');
if (!empty($ticket_type)) { if (! empty($ticket_type)) {
$query->where('tm.ticket_type_id', $ticket_type); $query->where('tm.ticket_type_id', $ticket_type);
} }
$countResults = $query->get()->getResultArray(); $countResults = $query->get()->getResultArray();
// Populate the result array with actual counts // Populate the result array with actual counts
foreach ($countResults as $row) { foreach ($countResults as $row) {
foreach ($result as &$categoryRow) { foreach ($result as &$categoryRow) {
if ($categoryRow['TAT_Category'] === $row['tat_category']) { if ($categoryRow['TAT_Category'] === $row['tat_category']) {
$categoryRow[$row['claim_status']] = (int)$row['count']; $categoryRow[$row['claim_status']] = (int) $row['count'];
break; break;
} }
} }
} }
return $result; return $result;
} }
@ -593,21 +589,21 @@ class TicketMasterModel extends Model
{ {
$ticket_type_data_1 = ""; $ticket_type_data_1 = "";
$ticket_type_data_2 = ""; $ticket_type_data_2 = "";
$statusBinds = []; $statusBinds = [];
if (!empty($policy_type)) { if (! empty($policy_type)) {
$ticket_type_data_1 = "AND ticket_type = :policy_type:"; $ticket_type_data_1 = "AND ticket_type = :policy_type:";
$ticket_type_data_2 = "AND master.ticket_type_id = :policy_type:"; $ticket_type_data_2 = "AND master.ticket_type_id = :policy_type:";
$statusBinds['policy_type'] = $policy_type; $statusBinds['policy_type'] = $policy_type;
} }
// Fetch claim statuses dynamically // Fetch claim statuses dynamically
$statusQuery = "SELECT id, claim_status FROM ticket_claim_status WHERE is_active = 1 $ticket_type_data_1"; $statusQuery = "SELECT id, claim_status FROM ticket_claim_status WHERE is_active = 1 $ticket_type_data_1";
$statusResult = $this->db->query($statusQuery, $statusBinds)->getResultArray(); $statusResult = $this->db->query($statusQuery, $statusBinds)->getResultArray();
// Initialize dynamic query parts // Initialize dynamic query parts
$dynamicSelect = ''; $dynamicSelect = '';
$dynamicTotal = ''; $dynamicTotal = '';
$dynamicClosedTotal = ''; $dynamicClosedTotal = '';
// Loop through each claim status and generate the CASE statements // Loop through each claim status and generate the CASE statements
@ -624,7 +620,7 @@ class TicketMasterModel extends Model
'UNDER PROCESS - INVESTIGATION STATUS', 'UNDER PROCESS - INVESTIGATION STATUS',
'UNDER PROCESS - QUERY DOCUMENT RECEIVED', 'UNDER PROCESS - QUERY DOCUMENT RECEIVED',
'APPROVED', 'APPROVED',
'PAYMENT INITIATED' 'PAYMENT INITIATED',
])) { ])) {
$dynamicTotal .= "COUNT(CASE WHEN master.claim_status_id = {$status['id']} THEN master.id END) + "; $dynamicTotal .= "COUNT(CASE WHEN master.claim_status_id = {$status['id']} THEN master.id END) + ";
} }
@ -638,34 +634,34 @@ class TicketMasterModel extends Model
} }
// Remove the trailing commas and `+` signs // Remove the trailing commas and `+` signs
$dynamicSelect = rtrim($dynamicSelect, ', '); $dynamicSelect = rtrim($dynamicSelect, ', ');
$dynamicTotal = rtrim($dynamicTotal, ' +'); $dynamicTotal = rtrim($dynamicTotal, ' +');
$dynamicClosedTotal = rtrim($dynamicClosedTotal, ' +'); $dynamicClosedTotal = rtrim($dynamicClosedTotal, ' +');
// print_rr($dynamicSelect); // print_rr($dynamicSelect);
// Construct the final SQL query // Construct the final SQL query
$sql = " $sql = "
SELECT SELECT
tpa.id as TPA_ID, tpa.id as TPA_ID,
tpa.name AS TPA_NAME, tpa.name AS TPA_NAME,
$dynamicSelect, $dynamicSelect,
($dynamicTotal) AS TOTAL, ($dynamicTotal) AS TOTAL,
($dynamicClosedTotal) AS CLEARED_TOTAL ($dynamicClosedTotal) AS CLEARED_TOTAL
FROM FROM
ticket_master master ticket_master master
JOIN JOIN
tpa ON master.tpa_id = tpa.id AND tpa.is_active = 1 tpa ON master.tpa_id = tpa.id AND tpa.is_active = 1
WHERE WHERE
master.created_at BETWEEN :start_date: AND :end_date: master.created_at BETWEEN :start_date: AND :end_date:
AND master.is_active = 1 AND master.is_active = 1
$ticket_type_data_2 $ticket_type_data_2
GROUP BY GROUP BY
tpa.id; tpa.id;
"; ";
// Execute the query // Execute the query
$binds = ["start_date"=>$start_date,"end_date"=>$end_date]; $binds = ["start_date" => $start_date, "end_date" => $end_date];
// Merge policy_type binds if present // Merge policy_type binds if present
if (!empty($statusBinds)) { if (! empty($statusBinds)) {
$binds = array_merge($binds, $statusBinds); $binds = array_merge($binds, $statusBinds);
} }
$result = $this->db->query($sql, $binds)->getResultArray(); $result = $this->db->query($sql, $binds)->getResultArray();
@ -680,28 +676,27 @@ class TicketMasterModel extends Model
if ($policy_type == 1) { if ($policy_type == 1) {
$ticket_type_data_1 = ""; $ticket_type_data_1 = "";
$ticket_type_data_2 = ""; $ticket_type_data_2 = "";
$statusBinds = []; $statusBinds = [];
if (!empty($policy_type)) { if (! empty($policy_type)) {
$ticket_type_data_1 = "AND ticket_type = :policy_type:"; $ticket_type_data_1 = "AND ticket_type = :policy_type:";
$ticket_type_data_2 = "AND master.ticket_type_id = :policy_type:"; $ticket_type_data_2 = "AND master.ticket_type_id = :policy_type:";
$statusBinds['policy_type'] = $policy_type; $statusBinds['policy_type'] = $policy_type;
} }
// Fetch claim statuses dynamically // Fetch claim statuses dynamically
$statusQuery = "SELECT id, claim_status FROM ticket_claim_status WHERE is_active = 1 $ticket_type_data_1"; $statusQuery = "SELECT id, claim_status FROM ticket_claim_status WHERE is_active = 1 $ticket_type_data_1";
$statusResult = $this->db->query($statusQuery,$statusBinds)->getResultArray(); $statusResult = $this->db->query($statusQuery, $statusBinds)->getResultArray();
// Initialize dynamic query parts // Initialize dynamic query parts
$dynamicSelect = ''; $dynamicSelect = '';
$dynamicTotal = ''; $dynamicTotal = '';
// Loop through each claim status and generate the CASE statements // Loop through each claim status and generate the CASE statements
foreach ($statusResult as $status) { foreach ($statusResult as $status) {
$dynamicSelect .= " $dynamicSelect .= "
COUNT(CASE WHEN master.claim_status_id = {$status['id']} THEN master.id END) AS `{$status['claim_status']}`, "; COUNT(CASE WHEN master.claim_status_id = {$status['id']} THEN master.id END) AS `{$status['claim_status']}`, ";
// Include in total count // Include in total count
$dynamicTotal .= "COUNT(CASE WHEN master.claim_status_id = {$status['id']} THEN master.id END) + "; $dynamicTotal .= "COUNT(CASE WHEN master.claim_status_id = {$status['id']} THEN master.id END) + ";
@ -711,54 +706,54 @@ class TicketMasterModel extends Model
// Remove the trailing commas and `+` signs // Remove the trailing commas and `+` signs
$dynamicSelect = rtrim($dynamicSelect, ', '); $dynamicSelect = rtrim($dynamicSelect, ', ');
$dynamicTotal = rtrim($dynamicTotal, ' +'); $dynamicTotal = rtrim($dynamicTotal, ' +');
// print_rr($dynamicSelect); // print_rr($dynamicSelect);
// Construct the final SQL query // Construct the final SQL query
$sql = " $sql = "
SELECT SELECT
user_profiles.id as ACM_ID, user_profiles.id as ACM_ID,
user_profiles.first_name AS ACM_NAME, user_profiles.first_name AS ACM_NAME,
$dynamicSelect, $dynamicSelect,
($dynamicTotal) AS TOTAL ($dynamicTotal) AS TOTAL
FROM FROM
ticket_master master ticket_master master
JOIN JOIN
user_profiles ON master.acm_id = user_profiles.id AND user_profiles.is_active = 1 user_profiles ON master.acm_id = user_profiles.id AND user_profiles.is_active = 1
WHERE WHERE
master.created_at BETWEEN :start_date: AND :end_date: master.created_at BETWEEN :start_date: AND :end_date:
AND master.is_active = 1 AND master.is_active = 1
$ticket_type_data_2 $ticket_type_data_2
GROUP BY GROUP BY
user_profiles.id; user_profiles.id;
"; ";
$binds = ["start_date"=>$start_date,"end_date"=>$end_date]; $binds = ["start_date" => $start_date, "end_date" => $end_date];
// Merge policy_type binds if present // Merge policy_type binds if present
if (!empty($statusBinds)) { if (! empty($statusBinds)) {
$binds = array_merge($binds, $statusBinds); $binds = array_merge($binds, $statusBinds);
} }
$result = $this->db->query($sql,$binds)->getResultArray(); $result = $this->db->query($sql, $binds)->getResultArray();
// print_rr(count(($result))); // print_rr(count(($result)));
// print_rr($this->db->lastQuery);die(); // print_rr($this->db->lastQuery);die();
return $result; return $result;
} else { } else {
$ticket_type_data_1 = ""; $ticket_type_data_1 = "";
$ticket_type_data_2 = ""; $ticket_type_data_2 = "";
$statusBinds = []; $statusBinds = [];
if (!empty($policy_type)) { if (! empty($policy_type)) {
$ticket_type_data_1 = "AND ticket_type = :policy_type:"; $ticket_type_data_1 = "AND ticket_type = :policy_type:";
$ticket_type_data_2 = "AND master.ticket_type_id = :policy_type:"; $ticket_type_data_2 = "AND master.ticket_type_id = :policy_type:";
$statusBinds['policy_type'] = $policy_type; $statusBinds['policy_type'] = $policy_type;
} }
// Fetch claim statuses dynamically // Fetch claim statuses dynamically
$statusQuery = "SELECT id, claim_status FROM ticket_claim_status WHERE is_active = 1 $ticket_type_data_1"; $statusQuery = "SELECT id, claim_status FROM ticket_claim_status WHERE is_active = 1 $ticket_type_data_1";
$statusResult = $this->db->query($statusQuery,$statusBinds)->getResultArray(); $statusResult = $this->db->query($statusQuery, $statusBinds)->getResultArray();
// Initialize dynamic query parts // Initialize dynamic query parts
$dynamicSelect = ''; $dynamicSelect = '';
$dynamicTotal = ''; $dynamicTotal = '';
$dynamicClosedTotal = ''; $dynamicClosedTotal = '';
// Loop through each claim status and generate the CASE statements // Loop through each claim status and generate the CASE statements
@ -773,7 +768,7 @@ class TicketMasterModel extends Model
'INSURER PENDING', 'INSURER PENDING',
'INVESTIGATION', 'INVESTIGATION',
'APPROVED', 'APPROVED',
'ON HOLD' 'ON HOLD',
])) { ])) {
$dynamicTotal .= "COUNT(CASE WHEN master.claim_status_id = {$status['id']} THEN master.id END) + "; $dynamicTotal .= "COUNT(CASE WHEN master.claim_status_id = {$status['id']} THEN master.id END) + ";
} }
@ -787,52 +782,51 @@ class TicketMasterModel extends Model
} }
// Remove the trailing commas and `+` signs // Remove the trailing commas and `+` signs
$dynamicSelect = rtrim($dynamicSelect, ', '); $dynamicSelect = rtrim($dynamicSelect, ', ');
$dynamicTotal = rtrim($dynamicTotal, ' +'); $dynamicTotal = rtrim($dynamicTotal, ' +');
$dynamicClosedTotal = rtrim($dynamicClosedTotal, ' +'); $dynamicClosedTotal = rtrim($dynamicClosedTotal, ' +');
// print_rr($dynamicSelect); // print_rr($dynamicSelect);
// Construct the final SQL query // Construct the final SQL query
$sql = " $sql = "
SELECT SELECT
user_profiles.id as ACM_ID, user_profiles.id as ACM_ID,
user_profiles.first_name AS ACM_NAME, user_profiles.first_name AS ACM_NAME,
$dynamicSelect, $dynamicSelect,
($dynamicTotal) AS TOTAL, ($dynamicTotal) AS TOTAL,
($dynamicClosedTotal) AS CLEARED_TOTAL ($dynamicClosedTotal) AS CLEARED_TOTAL
FROM FROM
ticket_master master ticket_master master
JOIN JOIN
user_profiles ON master.acm_id = user_profiles.id AND user_profiles.is_active = 1 user_profiles ON master.acm_id = user_profiles.id AND user_profiles.is_active = 1
WHERE WHERE
master.created_at BETWEEN :start_date: AND :end_date: master.created_at BETWEEN :start_date: AND :end_date:
AND master.is_active = 1 AND master.is_active = 1
$ticket_type_data_2 $ticket_type_data_2
GROUP BY GROUP BY
user_profiles.id; user_profiles.id;
"; ";
$binds = ["start_date"=>$start_date,"end_date"=>$end_date]; $binds = ["start_date" => $start_date, "end_date" => $end_date];
// Execute the query // Execute the query
// Merge policy_type binds if present // Merge policy_type binds if present
if (!empty($statusBinds)) { if (! empty($statusBinds)) {
$binds = array_merge($binds, $statusBinds); $binds = array_merge($binds, $statusBinds);
} }
$result = $this->db->query($sql,$binds)->getResultArray(); $result = $this->db->query($sql, $binds)->getResultArray();
// print_rr($this->db->lastQuery);die(); // print_rr($this->db->lastQuery);die();
return $result; return $result;
} }
} }
//api //api
public function get_ticket_data($emp_id, $returnType,$ticket_type = null, $ticket_id = null) public function get_ticket_data($emp_id, $returnType, $ticket_type = null, $ticket_id = null)
{ {
$query = $this->select(" $query = $this->select("
ticket_master.*, ticket_master.*,
tms.mail_subject as subject, tms.mail_subject as subject,
tms.id as ticket_message_id, tms.id as ticket_message_id,
( (
SELECT th1.old_value SELECT th1.old_value
@ -854,11 +848,11 @@ class TicketMasterModel extends Model
$query->whereIn('sender', ['staff', 'user']); $query->whereIn('sender', ['staff', 'user']);
$query->where('ticket_master.emp_id', $emp_id); $query->where('ticket_master.emp_id', $emp_id);
if (!empty($ticket_id)) { if (! empty($ticket_id)) {
$query->where('ticket_master.id', $ticket_id); $query->where('ticket_master.id', $ticket_id);
} }
if (!empty($ticket_type)) { if (! empty($ticket_type)) {
$query->where('ticket_master.ticket_type_id', $ticket_type); $query->where('ticket_master.ticket_type_id', $ticket_type);
} }
@ -879,9 +873,9 @@ class TicketMasterModel extends Model
->select('tm.id, tm.ticket_type_id, tcs.claim_status, th.last_claim_status_change') ->select('tm.id, tm.ticket_type_id, tcs.claim_status, th.last_claim_status_change')
->join('ticket_claim_status tcs', 'tm.claim_status_id = tcs.id', 'left') ->join('ticket_claim_status tcs', 'tm.claim_status_id = tcs.id', 'left')
->join( ->join(
'(SELECT ticket_id, MAX(created_at) AS last_claim_status_change '(SELECT ticket_id, MAX(created_at) AS last_claim_status_change
FROM ticket_history FROM ticket_history
WHERE field_name = \'claim_status_id\' WHERE field_name = \'claim_status_id\'
GROUP BY ticket_id) th', GROUP BY ticket_id) th',
'tm.id = th.ticket_id', 'tm.id = th.ticket_id',
'left' 'left'
@ -898,8 +892,8 @@ class TicketMasterModel extends Model
$total = 0; $total = 0;
foreach ($statuses as $status) { foreach ($statuses as $status) {
$alias = strtolower(str_replace(' ', '_', $status)); $alias = strtolower(str_replace(' ', '_', $status));
$summary[$alias] = 0; $summary[$alias] = 0;
$summary[$alias . '_ids'] = ''; $summary[$alias . '_ids'] = '';
$dateLimit = $limit[$typeId][$status] ?? 3; $dateLimit = $limit[$typeId][$status] ?? 3;
@ -911,19 +905,18 @@ class TicketMasterModel extends Model
if ( if (
$row['claim_status'] === $status && $row['claim_status'] === $status &&
( (
!$row['last_claim_status_change'] || ! $row['last_claim_status_change'] ||
$row['last_claim_status_change'] <= $threshold $row['last_claim_status_change'] <= $threshold
) )
) { ) {
$summary[$alias]++; $summary[$alias]++;
$ticketIds[] = $row['id']; $ticketIds[] = $row['id'];
if ($status == "APPROVED"|| $status == "SETTLED"|| $status == "CLOSED" ){ if ($status == "APPROVED" || $status == "SETTLED" || $status == "CLOSED") {
continue; continue;
} }
$total++; $total++;
} }
} }
@ -934,8 +927,8 @@ class TicketMasterModel extends Model
$summary['total'] = $total; $summary['total'] = $total;
// Add approved but not settled IDs and count // Add approved but not settled IDs and count
$approvedNotSettled = $this->getNotSettledbutApprovedCount($typeId); $approvedNotSettled = $this->getNotSettledbutApprovedCount($typeId);
$summary['approved_not_settled'] = $approvedNotSettled['count']; $summary['approved_not_settled'] = $approvedNotSettled['count'];
$summary['approved_not_settled_ids'] = $approvedNotSettled['ticket_ids']; $summary['approved_not_settled_ids'] = $approvedNotSettled['ticket_ids'];
$finalResults[$typeId] = $summary; $finalResults[$typeId] = $summary;
@ -960,13 +953,13 @@ class TicketMasterModel extends Model
$ids = $builder->get()->getRowArray(); $ids = $builder->get()->getRowArray();
// If no matching status IDs are found, return empty // If no matching status IDs are found, return empty
if (!$ids) { if (! $ids) {
return ['count' => 0, 'ticket_ids' => '']; return ['count' => 0, 'ticket_ids' => ''];
} }
// Extract approved and settled status IDs // Extract approved and settled status IDs
$approved_id = $ids['approved_id']; $approved_id = $ids['approved_id'];
$settled_id = $ids['settled_id']; $settled_id = $ids['settled_id'];
// Subquery to get the latest approval time for each ticket // Subquery to get the latest approval time for each ticket
$subquery = $this->db->table('ticket_history') $subquery = $this->db->table('ticket_history')
@ -983,12 +976,12 @@ class TicketMasterModel extends Model
// Left join to find if there is a settled status for each ticket after approval // Left join to find if there is a settled status for each ticket after approval
$builder->join( $builder->join(
'ticket_history th_settled', 'ticket_history th_settled',
"th_settled.ticket_id = tm.id "th_settled.ticket_id = tm.id
AND th_settled.field_name = 'claim_status_id' AND th_settled.field_name = 'claim_status_id'
AND th_settled.new_value = {$settled_id} AND th_settled.new_value = {$settled_id}
AND th_settled.created_at > latest_approval.approved_time", AND th_settled.created_at > latest_approval.approved_time",
'left', 'left',
false // Important for raw ON condition false// Important for raw ON condition
); );
// Filtering conditions: not settled and approved time older than 12 days // Filtering conditions: not settled and approved time older than 12 days
@ -1001,7 +994,7 @@ class TicketMasterModel extends Model
$builder->select('tm.id'); $builder->select('tm.id');
// Execute the query // Execute the query
$query = $builder->get(); $query = $builder->get();
$ticketIds = array_column($query->getResultArray(), 'id'); // Extract the IDs $ticketIds = array_column($query->getResultArray(), 'id'); // Extract the IDs
// Convert ticket IDs array to a comma-separated string // Convert ticket IDs array to a comma-separated string
@ -1009,8 +1002,8 @@ class TicketMasterModel extends Model
// Return the count and comma-separated ticket IDs // Return the count and comma-separated ticket IDs
return [ return [
'count' => count($ticketIds), 'count' => count($ticketIds),
'ticket_ids' => $ticketIdsString 'ticket_ids' => $ticketIdsString,
]; ];
} }
@ -1024,8 +1017,8 @@ class TicketMasterModel extends Model
AND cp.is_active = 1 AND cp.is_active = 1
"; ";
$binds = ["ticket_id"=>$ticket_id]; $binds = ["ticket_id" => $ticket_id];
$query = $this->db->query($sql,$binds); $query = $this->db->query($sql, $binds);
if ($query && $query->getNumRows() > 0) { if ($query && $query->getNumRows() > 0) {
$row = $query->getRowArray(); $row = $query->getRowArray();
@ -1039,11 +1032,10 @@ class TicketMasterModel extends Model
public function getPolicyData($params) public function getPolicyData($params)
{ {
$client_name = $params['client_name'] ?? null; $client_name = $params['client_name'] ?? null;
$insurer_short_name = $params['insurer_short_name'] ?? null; $insurer_short_name = $params['insurer_short_name'] ?? null;
$tpa_short_name = $params['tpa_short_name'] ?? null; $tpa_short_name = $params['tpa_short_name'] ?? null;
$policy_no = $params['policy_no'] ?? null; $policy_no = $params['policy_no'] ?? null;
$builder = $this->db->table('client_policy'); $builder = $this->db->table('client_policy');
$builder->select('client_policy.*'); $builder->select('client_policy.*');
@ -1055,19 +1047,19 @@ class TicketMasterModel extends Model
$builder->where('i.is_active', 1); $builder->where('i.is_active', 1);
$builder->where('c.client_name', trim($client_name)); $builder->where('c.client_name', trim($client_name));
$builder->where('i.short_name', trim($insurer_short_name)); $builder->where('i.short_name', trim($insurer_short_name));
if(!empty($tpa_short_name)){ if (! empty($tpa_short_name)) {
$builder->where('tpa.short_name', trim($tpa_short_name)); $builder->where('tpa.short_name', trim($tpa_short_name));
} }
$builder->where('client_policy.policy_no', trim($policy_no)); $builder->where('client_policy.policy_no', trim($policy_no));
$query = $builder->get(); $query = $builder->get();
$result = $query->getResultArray(); $result = $query->getResultArray();
// dd($this->db->getLastQuery()); // dd($this->db->getLastQuery());
return $result; return $result;
} }
public function getTheClaimDetails($params) public function getTheClaimDetails($params)
{ {
$client_name = $params['client_name'] ?? null; $client_name = $params['client_name'] ?? null;
$policy_no = $params['policy_no'] ?? null; $policy_no = $params['policy_no'] ?? null;
$insurer_short_name = $params['insurer_short_name'] ?? null; $insurer_short_name = $params['insurer_short_name'] ?? null;
@ -1099,19 +1091,19 @@ class TicketMasterModel extends Model
$builder->where('ticket_master.claim_number', trim($claim_no)); $builder->where('ticket_master.claim_number', trim($claim_no));
$builder->where('ticket_master.relationship', trim($relationship)); $builder->where('ticket_master.relationship', trim($relationship));
if(!empty($tpa_short_name)){ if (! empty($tpa_short_name)) {
$builder->where('tpa.short_name', trim($tpa_short_name)); $builder->where('tpa.short_name', trim($tpa_short_name));
} }
$query = $builder->get(); $query = $builder->get();
$result = $query->getResultArray(); $result = $query->getResultArray();
return $result; return $result;
} }
public function getEmployeeAndEmployeePolicyDetails($params) public function getEmployeeAndEmployeePolicyDetails($params)
{ {
$client_name = $params['client_name'] ?? null; $client_name = $params['client_name'] ?? null;
$emp_code = $params['emp_code'] ?? null; $emp_code = $params['emp_code'] ?? null;
$emp_name = $params['emp_name'] ?? null; $emp_name = $params['emp_name'] ?? null;
@ -1124,7 +1116,6 @@ class TicketMasterModel extends Model
// $emp_name = "Lokesh"; // $emp_name = "Lokesh";
// $policy_no = "GMC-1999/2000/2021/2022"; // $policy_no = "GMC-1999/2000/2021/2022";
$builder = $this->db->table('employees e'); $builder = $this->db->table('employees e');
$builder->select(" $builder->select("
e.id as emp_id, e.id as emp_id,
@ -1143,7 +1134,7 @@ class TicketMasterModel extends Model
cp.insurer_id, cp.insurer_id,
cp.tpa_id, cp.tpa_id,
cp.policy_no, cp.policy_no,
CASE CASE
WHEN cp.policy_type_id = 2 THEN 1 WHEN cp.policy_type_id = 2 THEN 1
WHEN cp.policy_type_id = 1 THEN 2 WHEN cp.policy_type_id = 1 THEN 2
WHEN cp.policy_type_id = 6 THEN 3 WHEN cp.policy_type_id = 6 THEN 3
@ -1165,7 +1156,7 @@ class TicketMasterModel extends Model
$builder->where('cp.policy_no', trim($policy_no)); $builder->where('cp.policy_no', trim($policy_no));
$builder->where('LOWER(e.relationship)', strtolower('self')); $builder->where('LOWER(e.relationship)', strtolower('self'));
$query = $builder->get(); $query = $builder->get();
$result = $query->getRowArray(); $result = $query->getRowArray();
return $result; return $result;
@ -1181,8 +1172,8 @@ class TicketMasterModel extends Model
$builder = $this->db->table('user_profiles'); $builder = $this->db->table('user_profiles');
$builder->select("user_profiles.*"); $builder->select("user_profiles.*");
$builder->where('user_profiles.is_active', 1); $builder->where('user_profiles.is_active', 1);
$builder->where('user_profiles.mobile', trim($acm_mobile)); $builder->where('user_profiles.mobile', trim($acm_mobile));
$query = $builder->get(); $query = $builder->get();
$result = $query->getRowArray(); $result = $query->getRowArray();
return $result; return $result;
@ -1193,9 +1184,9 @@ class TicketMasterModel extends Model
public function getInsuredDetails($params) public function getInsuredDetails($params)
{ {
$client_id = $params['client_id'] ?? null; $client_id = $params['client_id'] ?? null;
$emp_code = $params['emp_code'] ?? null; $emp_code = $params['emp_code'] ?? null;
$policy_id = $params['client_policy_id'] ?? null; $policy_id = $params['client_policy_id'] ?? null;
$insured_name = $params['insured_name'] ?? null; $insured_name = $params['insured_name'] ?? null;
$builder = $this->db->table('employees e'); $builder = $this->db->table('employees e');
@ -1220,7 +1211,7 @@ class TicketMasterModel extends Model
$builder->where('e.client_id', trim($client_id)); $builder->where('e.client_id', trim($client_id));
$builder->where('ep.client_policy_id', trim($policy_id)); $builder->where('ep.client_policy_id', trim($policy_id));
$query = $builder->get(); $query = $builder->get();
$result = $query->getRowArray(); $result = $query->getRowArray();
// dd($this->db->getLastQuery()); // dd($this->db->getLastQuery());
return $result; return $result;