FIX_STATEMENT_UPLOAD_ISSUE
This commit is contained in:
parent
eb4e2752fa
commit
f1bc4fddea
@ -508,6 +508,7 @@ $routes->group("policy_tranction", ["filter" => "authMVC"], function ($routes) {
|
||||
$routes->post("saveInvoicePaymentDetails", "PolicyTransactionController::saveInvoicePaymentDetails");
|
||||
$routes->get("deletePaymentEntry/(:any)", "PolicyTransactionController::deletePaymentEntry/$1");
|
||||
$routes->get("downloadSampleInsurerStatement", "PolicyTransactionController::downloadSampleInsurerStatement");
|
||||
$routes->get("downloadInsurerStatement/(:num)", "PolicyTransactionController::downloadInsurerStatement/$1");
|
||||
$routes->get("getFileErr/(:any)", "PolicyTransactionController::getFileErr/$1");
|
||||
$routes->get("getInsurerStatementMonth", "PolicyTransactionController::getInsurerStatementMonth");
|
||||
$routes->get("deleteStatement/(:any)", "PolicyTransactionController::deleteStatement/$1");
|
||||
|
||||
@ -1068,7 +1068,7 @@ class FhplApiController extends BaseController
|
||||
|
||||
'is_active' => 1,
|
||||
'created_by' => $file_info[0]['created_by'] ?? null,
|
||||
'action_flag_status' => $row['IsActive'] == 1 ? 'A' : 'D'
|
||||
'action_flag_status' => $row['IsActive'] == 1 ? 'A' : 'D',
|
||||
'si' => $row['BASE_SUMINSURED'],
|
||||
'doj' => change_date_format($row['DATE_OF_JOINING'],'Y-m-d\TH:i:s'),
|
||||
'endorsement_no' => $row['ENDORSEMENT_NO']
|
||||
|
||||
@ -4236,7 +4236,7 @@ class PolicyTransactionController extends BaseController
|
||||
return array('status' => $ret_status, 'error_code' => $error_data['error_code'], 'error_data' => $error_data['error_data']);
|
||||
}
|
||||
|
||||
public function validateInsurerStatement($params)
|
||||
public function validateInsurerStatementOLD1($params)
|
||||
{
|
||||
helper('excel_util_helper');
|
||||
|
||||
@ -4392,8 +4392,7 @@ class PolicyTransactionController extends BaseController
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public function updateInsurerStatement($params)
|
||||
public function updateInsurerStatementOLD($params)
|
||||
{
|
||||
helper('excel_util_helper');
|
||||
//get file info
|
||||
@ -4559,6 +4558,375 @@ class PolicyTransactionController extends BaseController
|
||||
return array('status' => $ret_status, 'error_code' => $error_data['error_code'], 'error_data' => $error_data['error_data']);
|
||||
}
|
||||
|
||||
public function validateInsurerStatement($params)
|
||||
{
|
||||
/*
|
||||
* Changes made: 12-06-2024
|
||||
* - Added safe file_id handling and DB file record validation before using file details.
|
||||
* - Fixed physical file missing response and error message.
|
||||
* - Skips empty Excel rows and collects unique policy numbers from the uploaded statement.
|
||||
* - Fetches NHance source records only for those uploaded policy numbers.
|
||||
* - Sanitizes policy and endorsement numbers before comparison to avoid hidden-space mismatch.
|
||||
* - Validates each row by policy number + endorsement number combination.
|
||||
* - Detects duplicate policy + endorsement rows and returns row-wise validation errors.
|
||||
*/
|
||||
helper('excel_util_helper');
|
||||
|
||||
$file_id = $params['file_id'] ?? 0;
|
||||
|
||||
try {
|
||||
|
||||
$error_data = ['error_code' => '', 'error_data' => []];
|
||||
$status = 'success';
|
||||
$ret_status = true;
|
||||
|
||||
//get file info
|
||||
$file = $this->insurerStatements->find((int)$file_id);
|
||||
// dd($file);
|
||||
|
||||
if (empty($file)) {
|
||||
//file not found in DB
|
||||
$this->insurerStatements->where('id', $file_id)->set(['file_status' => 'failed', 'reason' => json_encode(['error_code' => 0, 'error_data' => 'statement file not found in DB'])])->update();
|
||||
return array('status' => false, 'error_code' => 0, 'error_data' => 'statement file not found in DB');
|
||||
}
|
||||
$file_name_with_path = WRITEPATH . "/uploads/statements/" . $file['file_name'];
|
||||
|
||||
//check physical file
|
||||
if (!file_exists($file_name_with_path)) {
|
||||
//file not found update status and reason
|
||||
$message = "Physical file not found";
|
||||
// echo $message;
|
||||
$this->myLogger->logme('error', ($message . ' for statement file id ' . $file_id));
|
||||
$this->insurerStatements->where('id', $file_id)->set(['file_status' => 'failed', 'reason' => json_encode(['error_code' => 0, 'error_data' => $message])])->update();
|
||||
return array('status' => false, 'error_code' => 0, 'error_data' => $message); //0 - Physcial file not found
|
||||
}
|
||||
|
||||
//get excel data to php array
|
||||
$spreadsheet = \PhpOffice\PhpSpreadsheet\IOFactory::load($file_name_with_path);
|
||||
$sheet = $spreadsheet->getActiveSheet();
|
||||
|
||||
$highestRow = $sheet->getHighestRow();
|
||||
$highestColumn = $sheet->getHighestColumn();
|
||||
|
||||
$excel_data = $sheet->rangeToArray('A1:' . $highestColumn . $highestRow);
|
||||
unset($excel_data[0]);
|
||||
$excel_data = ExcelSanitizeHelper::sanitizeArrayData($excel_data);
|
||||
// dd($excel_data);
|
||||
|
||||
//get no of line items and update in DB
|
||||
$line_items = 0;
|
||||
|
||||
$policyNos = [];
|
||||
|
||||
foreach ($excel_data as $row) {
|
||||
if (check_row_is_empty_or_null($row)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// row[1] => second column (B column)
|
||||
$policyNo = $this->sanitizeStatementLookupValue($row[1] ?? '');
|
||||
|
||||
if ($policyNo !== '') {
|
||||
$policyNos[] = $policyNo;
|
||||
}
|
||||
}
|
||||
$policyNos = array_values(array_unique($policyNos));
|
||||
|
||||
// get uploaded month transactions data
|
||||
// $source_data = $this->PTCOShareDetailsModel->getNonReconcileredPolicyTransactions(insurer_id: $file['insurer_id'], insurer_branch_id: $file['branch_id'], month: $file['month']);
|
||||
$source_data = !empty($policyNos) ? $this->PTCOShareDetailsModel->getNonReconcileredPolicyTransactionByPolicyAndEndorsement(insurer_id: $file['insurer_id'], insurer_branch_id: $file['branch_id'], policy_no: $policyNos) : [];
|
||||
// dd($source_data);
|
||||
|
||||
$source_lookup = [];
|
||||
$source_policy_lookup = [];
|
||||
$source_endorsement_lookup = [];
|
||||
|
||||
foreach ($source_data as $source_row) {
|
||||
$source_policy_no = $this->sanitizeStatementLookupValue($source_row['policy_no'] ?? '');
|
||||
$source_endorsement_no = $this->sanitizeStatementLookupValue($source_row['endorsement_no'] ?? '');
|
||||
$source_entry_key = $source_policy_no . '|' . $source_endorsement_no;
|
||||
|
||||
$source_lookup[$source_entry_key] = true;
|
||||
$source_policy_lookup[$source_policy_no] = true;
|
||||
$source_endorsement_lookup[$source_policy_no][$source_endorsement_no] = true;
|
||||
}
|
||||
|
||||
// check policy no,insurer and etc in DB for this month
|
||||
// if all good return true, otherwise return false with messssage
|
||||
$matched_entry = [];
|
||||
$error_messages = []; // row-wise error storage
|
||||
|
||||
foreach ($excel_data as $excel_key => $excel_row) {
|
||||
|
||||
$row_number = $excel_key;
|
||||
$is_row_empty = check_row_is_empty_or_null($excel_row);
|
||||
$policy_source_found = 0;
|
||||
$endorsement_source_found = 0;
|
||||
$duplicate_found = 0;
|
||||
|
||||
if (!$is_row_empty) {
|
||||
|
||||
$policy_no = $this->sanitizeStatementLookupValue($excel_row[1] ?? ''); //policy_number from excel
|
||||
$endorsement_no = $this->sanitizeStatementLookupValue($excel_row[2] ?? ''); //endorsement number from excel
|
||||
$entry_key = $policy_no . '|' . $endorsement_no;
|
||||
|
||||
if (isset($matched_entry[$entry_key])) {
|
||||
$duplicate_found = 1;
|
||||
} elseif (isset($source_lookup[$entry_key])) {
|
||||
$line_items = $line_items + 1;
|
||||
$matched_entry[$entry_key] = true;
|
||||
continue;
|
||||
}
|
||||
|
||||
$policy_source_found = isset($source_policy_lookup[$policy_no]) ? 1 : 0;
|
||||
$endorsement_source_found = isset($source_endorsement_lookup[$policy_no][$endorsement_no]) ? 1 : 0;
|
||||
|
||||
// Policy number mismatch
|
||||
if ($policy_source_found == 0) {
|
||||
$error_messages[$row_number]['policy_no_mismatch'] =
|
||||
"Policy number <strong>({$policy_no}) </strong> not in NHance.";
|
||||
}
|
||||
|
||||
// Endorsement number mismatch
|
||||
if ($policy_source_found == 1 && $endorsement_source_found == 0) {
|
||||
$error_messages[$row_number]['endorsement_no_mismatch'] =
|
||||
"Endorsement number <strong>({$endorsement_no})</strong> not in NHance for policy <strong>({$policy_no})</strong>.";
|
||||
}
|
||||
|
||||
// Duplicate check
|
||||
if ($duplicate_found == 1) {
|
||||
$error_messages[$row_number]['duplicate'] =
|
||||
"Duplicate entry found. This policy and endorsement <strong>({$policy_no} | {$endorsement_no})</strong> combination has already been matched.";
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
// print_rr($error_messages);die;
|
||||
|
||||
if (!empty($error_messages)) {
|
||||
$error_data['error_code'] = 2;
|
||||
$error_data['error_data'] = $error_messages;
|
||||
$status = 'failed';
|
||||
$ret_status = false;
|
||||
}
|
||||
|
||||
//update in DB
|
||||
$this->insurerStatements->where('id', $file_id)->set(['line_items' => $line_items, 'file_status' => $status, 'reason' => json_encode($error_data)])->update();
|
||||
return array('status' => $ret_status, 'error_code' => $error_data['error_code'], 'error_data' => $error_data['error_data']);
|
||||
} 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,
|
||||
];
|
||||
|
||||
$this->myLogger->logme("error", "POLICY-TRANSACTION-CONTROLLER - validateInsurerStatement: Exception: " . json_encode($errorData ?? []));
|
||||
$this->insurerStatements->where('id', $file_id)->set(['line_items' => 0, 'file_status' => 'failed', 'reason' => json_encode($errorData)])->update();
|
||||
return array('status' => false, 'error_code' => [], 'error_data' => $errorData);
|
||||
}
|
||||
}
|
||||
|
||||
private function sanitizeStatementLookupValue($value): string
|
||||
{
|
||||
$value = trim((string)($value ?? ''));
|
||||
$value = preg_replace('/^\p{Z}+|\p{Z}+$/u', '', $value);
|
||||
return preg_replace('/[\x{200B}\x{200C}\x{200D}\x{FEFF}\x{00A0}\x{200E}\x{200F}\x{202A}-\x{202E}]/u', '', $value);
|
||||
}
|
||||
|
||||
public function updateInsurerStatement($params)
|
||||
{
|
||||
/*
|
||||
* Changes made: 12-06-2024
|
||||
* - Added safe file_id handling and DB file record validation before using file details.
|
||||
* - Fixed physical file missing response and error message.
|
||||
* - Skips empty Excel rows and collects unique policy numbers from the uploaded statement.
|
||||
* - Fetches NHance source records only for those uploaded policy numbers.
|
||||
* - Uses the same sanitized policy number + endorsement number matching as validation.
|
||||
* - Inserts statement details only for matched rows and skips empty or unmatched Excel rows.
|
||||
* - Added safe default handling for amount and reward columns before calculation/insert.
|
||||
*/
|
||||
helper('excel_util_helper');
|
||||
$file_id = $params['file_id'] ?? 0;
|
||||
|
||||
$error_data = ['error_code' => '', 'error_data' => []];
|
||||
$status = 'success';
|
||||
$ret_status = true;
|
||||
|
||||
//get file info
|
||||
$file = $this->insurerStatements->find((int)$file_id);
|
||||
// dd($file);
|
||||
|
||||
if (empty($file)) {
|
||||
//file not found in DB
|
||||
return array('status' => false, 'error_code' => 0, 'error_data' => 'statement file not found in DB');
|
||||
}
|
||||
$file_name_with_path = WRITEPATH . "/uploads/statements/" . $file['file_name'];
|
||||
|
||||
//check physical file
|
||||
if (!file_exists($file_name_with_path)) {
|
||||
//file not found update status and reason
|
||||
$message = "Physical file not found";
|
||||
// echo $message;
|
||||
$this->myLogger->logme('error', ($message . ' for statement file id ' . $file_id));
|
||||
$this->insurerStatements->where('id', $file_id)->set(['file_status' => 'failed', 'reason' => json_encode(['error_code' => 0, 'error_data' => $message])])->update();
|
||||
return array('status' => false, 'error_code' => 0, 'error_data' => $message); //0 - Physcial file not found
|
||||
}
|
||||
|
||||
//get excel data to php array
|
||||
$spreadsheet = \PhpOffice\PhpSpreadsheet\IOFactory::load($file_name_with_path);
|
||||
$sheet = $spreadsheet->getActiveSheet();
|
||||
|
||||
$highestRowAndColumn = $sheet->getHighestRowAndColumn();
|
||||
// dd($highestRowAndColumn);
|
||||
$excel_data = $sheet->rangeToArray('A1:' . $highestRowAndColumn['column'] . $highestRowAndColumn['row']);
|
||||
unset($excel_data[0]);
|
||||
$excel_data = ExcelSanitizeHelper::sanitizeArrayData($excel_data);
|
||||
// dd($excel_data);
|
||||
|
||||
$policyNos = [];
|
||||
|
||||
foreach ($excel_data as $row) {
|
||||
if (check_row_is_empty_or_null($row)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$policyNo = $this->sanitizeStatementLookupValue($row[1] ?? '');
|
||||
|
||||
if ($policyNo !== '') {
|
||||
$policyNos[] = $policyNo;
|
||||
}
|
||||
}
|
||||
$policyNos = array_values(array_unique($policyNos));
|
||||
|
||||
// get uploaded month transactions data
|
||||
// $source_data = $this->PTCOShareDetailsModel->getNonReconcileredPolicyTransactions(insurer_id: $file['insurer_id'], insurer_branch_id: $file['branch_id'], month: $file['month']);
|
||||
$source_data = !empty($policyNos) ? $this->PTCOShareDetailsModel->getNonReconcileredPolicyTransactionByPolicyAndEndorsement(insurer_id: $file['insurer_id'], insurer_branch_id: $file['branch_id'], policy_no: $policyNos) : [];
|
||||
// Kint::dump($source_data);//die;
|
||||
// Kint::dump($excel_data);
|
||||
// die;
|
||||
$source_lookup = [];
|
||||
|
||||
foreach ($source_data as $source_row) {
|
||||
$source_policy_no = $this->sanitizeStatementLookupValue($source_row['policy_no'] ?? '');
|
||||
$source_endorsement_no = $this->sanitizeStatementLookupValue($source_row['endorsement_no'] ?? '');
|
||||
$source_lookup[$source_policy_no . '|' . $source_endorsement_no][] = $source_row;
|
||||
}
|
||||
|
||||
// check policy no,insurer and etc in DB for this month
|
||||
// if all good return true, otherwise return false with messssage
|
||||
$data_to_update = [];
|
||||
try {
|
||||
foreach ($excel_data as $excel_row) {
|
||||
if (check_row_is_empty_or_null($excel_row)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// $policy_start_date = preg_replace('/^\p{Z}+|\p{Z}+$/u', '', $excel_row[4]); //policy_start_date from excel
|
||||
// $policy_end_date = preg_replace('/^\p{Z}+|\p{Z}+$/u', '', $excel_row[5]); //policy_end_date from excel
|
||||
$policy_no = $this->sanitizeStatementLookupValue($excel_row[1] ?? ''); //policy_number from excel
|
||||
// $client_name = preg_replace('/^\p{Z}+|\p{Z}+$/u', '', $excel_row[3]); //clientname from excel
|
||||
$endorsement_no = $this->sanitizeStatementLookupValue($excel_row[2] ?? ''); //endorsement number from excel
|
||||
$entry_key = $policy_no . '|' . $endorsement_no;
|
||||
|
||||
if (empty($source_lookup[$entry_key])) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$source_row = array_shift($source_lookup[$entry_key]);
|
||||
|
||||
//calculate percentage first
|
||||
$total_amt = 0;
|
||||
|
||||
// $actual_bp_per = trim($excel_row[9]); //commented becoz this filed removed tfrom excel file
|
||||
$actual_bp_per = 0; //set default value 0 for maintaining existing code flow
|
||||
$actual_bp_brokerage = (int) trim((string)($excel_row[5] ?? 0));
|
||||
$actual_bp_amt = (int) trim((string)($excel_row[3] ?? 0));
|
||||
|
||||
if (($actual_bp_brokerage && $actual_bp_brokerage != 0 && $actual_bp_brokerage != "")) {
|
||||
$total_amt += $actual_bp_brokerage;
|
||||
//percentage reverse calculation
|
||||
if (($actual_bp_per == 0 || $actual_bp_per == 0) && !empty($actual_bp_amt)) {
|
||||
$actual_bp_per = (int) round(($actual_bp_brokerage / $actual_bp_amt) * 100, 2);
|
||||
}
|
||||
} else {
|
||||
$actual_bp_brokerage = $actual_bp_amt * ($actual_bp_per / 100);
|
||||
$total_amt += $actual_bp_brokerage;
|
||||
}
|
||||
|
||||
// $actual_tp_per = trim($excel_row[10]);//commented becoz this filed removed tfrom excel file
|
||||
$actual_tp_per = 0;//set default value 0 for maintaining existing code flow
|
||||
$actual_tp_brokerage = (int) trim((string)($excel_row[6] ?? 0));
|
||||
$actual_tp_amt = (int) trim((string)($excel_row[4] ?? 0));
|
||||
|
||||
if ($actual_tp_brokerage && $actual_tp_brokerage != 0 && $actual_tp_brokerage != "") {
|
||||
$total_amt += $actual_tp_brokerage;
|
||||
//percentage reverse calculation
|
||||
if (($actual_tp_per == 0 || $actual_tp_per == "") && !empty($actual_tp_amt)) {
|
||||
$actual_tp_per = (int) round(($actual_tp_brokerage / $actual_tp_amt) * 100, 2);
|
||||
}
|
||||
} else {
|
||||
$actual_tp_brokerage = $actual_tp_amt * ($actual_tp_per / 100);
|
||||
$total_amt += $actual_tp_brokerage;
|
||||
}
|
||||
|
||||
// $actual_tep_per = trim($excel_row[11]);
|
||||
// $actual_tep_brokerage = trim($excel_row[14]);
|
||||
// $actual_tep_amt = trim($excel_row[8]);
|
||||
|
||||
$actual_tep_per = 0;
|
||||
$actual_tep_brokerage = 0;
|
||||
$actual_tep_amt = 0;
|
||||
|
||||
if ($actual_tep_brokerage && $actual_tep_brokerage != 0 && $actual_tep_brokerage != "") {
|
||||
$total_amt += $actual_tep_brokerage;
|
||||
//percentage reverse calculation
|
||||
if (($actual_tep_per == 0 || $actual_tep_per == "") && !empty($actual_tep_amt)) {
|
||||
$actual_tep_per = ($actual_tep_brokerage / $actual_tep_amt) * 100;
|
||||
}
|
||||
} else {
|
||||
$actual_tep_brokerage = $actual_tep_amt * ($actual_tep_per / 100);
|
||||
$total_amt += $actual_tep_brokerage;
|
||||
}
|
||||
|
||||
//find variance
|
||||
$variance_amt = $source_row['exp_amt'] - $total_amt;
|
||||
|
||||
$data_to_update[] = ['co_share_id' => $source_row['id'], 'actual_bp_amt' => $actual_bp_amt, 'actual_tp_amt' => $actual_tp_amt, 'actual_tep_amt' => $actual_tep_amt, 'actual_bp_per' => $actual_bp_per, 'actual_tp_per' => $actual_tp_per, 'actual_tep_per' => $actual_tep_per, 'variance' => $variance_amt, 'actual_tep_brokerage_amt' => $actual_tep_brokerage, 'actual_tp_brokerage_amt' => $actual_tp_brokerage, 'actual_bp_brokerage_amt' => $actual_bp_brokerage, 'reward' => trim((string)($excel_row[7] ?? '')), 'statement_id' => $file_id];
|
||||
}
|
||||
} catch (\Throwable $th) {
|
||||
|
||||
$this->myLogger->logme("error", "REST-AUTH-CONTROLLER - updateInsurerStatement: Exception: " . $th->getMessage() . " --- Line: " . $th->getLine() . " --- Trace: " . $th->getTraceAsString());
|
||||
$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,
|
||||
];
|
||||
return ['status' => 'failed', 'code' => 500, 'message' => $th->getMessage(), 'error_data' => $errorData];
|
||||
}
|
||||
// dd($data_to_update);
|
||||
$this->coShareStmtDetailsModel->insertBatch($data_to_update, 'id');
|
||||
// dd($data_to_update);
|
||||
// if($error_data['error_code'])
|
||||
// {
|
||||
// $status = 'failed';
|
||||
// $ret_status = false;
|
||||
// }
|
||||
//update in DB
|
||||
$this->insurerStatements->where('id', $file_id)->set(['file_status' => $status, 'reason' => json_encode($error_data), 'invoice_status' => 'pending'])->update();
|
||||
return array('status' => $ret_status, 'error_code' => $error_data['error_code'], 'error_data' => $error_data['error_data']);
|
||||
}
|
||||
|
||||
public function getInvoicePaymentDetails()
|
||||
{
|
||||
$statement_id = $this->request->getUri()->getSegment(4);
|
||||
|
||||
@ -121,5 +121,41 @@ class PTCOShareDetailsModel extends Model
|
||||
->get()
|
||||
->getResultArray();
|
||||
}
|
||||
|
||||
public function getNonReconcileredPolicyTransactionByPolicyAndEndorsement(string $insurer_id, string $insurer_branch_id, array $policy_no)
|
||||
{
|
||||
$builder = $this->db->table('pt_co_share_details pt_co')
|
||||
->select("
|
||||
pt_co.id,
|
||||
pt_co.pt_id,
|
||||
pt_co.exp_amt,
|
||||
pt.id AS policy_transaction_id,
|
||||
pt.endorsement_no,
|
||||
c.client_name,
|
||||
pt.created_at,
|
||||
pt_co.insurer_id,
|
||||
pt_co.insurer_branch_id,
|
||||
pt.policy_no,
|
||||
pt.policy_issue_date,
|
||||
pt.policy_start_date,
|
||||
pt.policy_end_date,
|
||||
pt.status,
|
||||
pt_co.bp_amt,
|
||||
pt_co.tp_amt,
|
||||
pt_co.tep_amt,
|
||||
pt_co.exp_amt,
|
||||
pt_co.statement_id
|
||||
")
|
||||
->join('policy_transaction pt', 'pt_co.pt_id = pt.id')
|
||||
->join('clients c', 'pt.client_id = c.id')
|
||||
->where('pt_co.is_active', 1)
|
||||
->where('pt.is_active', 1)
|
||||
->where('pt_co.insurer_id', $insurer_id)
|
||||
->where('pt_co.insurer_branch_id', $insurer_branch_id)
|
||||
->whereIn('pt.policy_no', $policy_no);
|
||||
|
||||
|
||||
return $builder->get()->getResultArray();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -302,7 +302,15 @@ $isl_col_width_px = nhance_dt_column_widths_px($isl_header_labels, $isl_col_max_
|
||||
<td><?php echo $row['short_name'] . '-' . $row['branch_code']; ?></td>
|
||||
<td><?php echo change_date_format($row['month'], 'Y-m-d', 'M-Y'); ?></td>
|
||||
<td><?php echo $row['stmt_sno'] ?> </td>
|
||||
<td><?php echo $row['file_name'] ?> </td>
|
||||
<td>
|
||||
<?php if (!empty($row['file_name'])) { ?>
|
||||
<a href="<?php echo base_url('policy_tranction/statement/downloadInsurerStatement/' . $row['id']); ?>" class="text-primary" title="Download <?php echo esc($row['file_name']); ?>">
|
||||
<?php echo esc($row['file_name']); ?>
|
||||
</a>
|
||||
<?php } else { ?>
|
||||
-
|
||||
<?php } ?>
|
||||
</td>
|
||||
<td><?php echo $row['line_items'] ?></td>
|
||||
<td><?php echo $row['file_status'];
|
||||
if ($row['file_status'] == 'failed') {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user