FIX_BDS_BULK_UPLOAD_AND_BDS_FLOW

This commit is contained in:
VENKATESHWARAN 2025-12-02 15:59:23 +05:30
parent 993eebf4eb
commit e19abc0ebb
3 changed files with 111 additions and 64 deletions

View File

@ -5256,12 +5256,20 @@ class EmpDataServiceController extends BaseController
return ['status' => "Success", 'message' => "Policy transaction entry created successfully", 'data' => ['params' => $params, 'insert_id' => $insert_id]];
} catch (\Throwable $e) {
$errorDetails = [
'error_message' => $e->getMessage(),
'file' => $e->getFile(),
'line' => $e->getLine(),
'stack_trace' => $e->getTraceAsString(),
];
$this->myLogger->logme("error", "Exception occurred in makeEntryForBDSPolicyTransaction(): " . json_encode([
'error' => $e->getMessage(),
'trace' => $e->getTraceAsString()
]));
return ['status' => "Error", 'message' => "An unexpected error occurred", 'data' => ['error' => $e]];
return ['status' => "Error", 'message' => "An unexpected error occurred", 'data' => $errorDetails];
}
}
@ -5420,11 +5428,11 @@ class EmpDataServiceController extends BaseController
$policy_no = trim($params['policy_no']);
// Base query
$policy_transaction_data = $this->policyTransactionModel->where('is_active', 1)->where('TRIM(policy_no)', $policy_no, false);
$policy_transaction_data = $this->policyTransactionModel->where('is_active', 1)->where('TRIM(policy_no)', $policy_no);
// Add endorsement condition only if not inception
if ($params['action_type'] !== "inception") {
$policy_transaction_data = $policy_transaction_data ->where('TRIM(endorsement_no)', trim($params['endorsement_no']), false);
$policy_transaction_data = $policy_transaction_data ->where('TRIM(endorsement_no)', trim($params['endorsement_no']));
}
$policy_transaction_data = $policy_transaction_data->first();

View File

@ -3763,7 +3763,7 @@
$data['page_name'] = "BDS Bulk File Upload";
$data['tab_name'] = "BDS File Upload";
// $response = $this->insertBulkBdsData(['file_id' => 2]);
// $response = $this->insertBulkBdsData(['file_id' => 17]);
// dd($response);
@ -4163,62 +4163,10 @@
$gst_amt = calculate_gst_amount($row) ?? null;
$vehicle_id = '';
$client_id = '';
foreach ($vehicle_data as $vehicles) {
if($vehicles['vehicle_no'] == $vehicle_number){
$vehicle_id = $vehicles['id'];
$client_id = $vehicles['owner'];
}
}
$second_stage_client_id = '';
if(empty($vehicle_id) && empty($client_id)){
foreach ($client_data as $clients) {
if($clients['email'] == $client_email){
$second_stage_client_id = $clients['id'];
}
}
}
if(empty($second_stage_client_id)){
$client_insert_data = [
'client_name' => $client_name,
'short_name' => $client_name,
'email' => $client_email,
'entity_type_id' => 7,
'client_type' => 2,
];
$client_id = $this->clientModel->insert($client_insert_data);
if($client_id){
// Pattern: 2 letters + 2 digits
// if (preg_match('/^([A-Z]{2})([0-9]{2})/i', $vehicle_number, $matches)) {
// $vehicle_state = strtoupper($matches[1]); // TN
// $vehicle_state_code = $matches[2]; // 10
// } else {
// $vehicle_state = null;
// $vehicle_state_code = null;
// }
// $matched_rto_id = ($m = array_values(array_filter($rto_master, fn($r) => strtoupper($r['rto_state']) === $vehicle_state && (int)$r['rto_code'] === (int)$vehicle_state_code)))[0]['id'] ?? null;
$matched_rto_id = check_rto_data($row, $rto_master);
$vehicle_type_id = check_vehicle_type($row, $vehicle_type_data);
$vehicle_insert_data = [
'vehicle_no' => $vehicle_number,
'vehicle_type' => $vehicle_type_id['vehicle_type']['id'] ?? null,
'owner' => $client_id,
'rto_id' => $matched_rto_id['rto_data']['id'] ?? null,
];
$vehicle_id = $this->vehicleModel->insert($vehicle_insert_data);
}
}
// get the client and vehicle id
$vehicle_and_client_ids = $this->getClientAndVehicleId($row, $vehicle_data, $client_data, $rto_master, $vehicle_type_data);
$vehicle_id = $vehicle_and_client_ids['vehicle_id'] ?? null;
$client_id = $vehicle_and_client_ids['client_id'] ?? null;
$policy_transaction_data = [
@ -4366,6 +4314,10 @@
$this->myLogger->logme("error", '{file_id} uploaded failed', ['file_id' => $file_id]);
} else{
$result = count($pt_ids);
$status = 'success';
$failure_reason = ((json_encode($result)));
$this->bdsDumpModel->where('id', $file_id)->set(['status' => $status, 'reason' => $failure_reason])->update();
$this->myLogger->logme("error", '{file_id} uploaded success', ['file_id' => $file_id]);
}
return $result;
@ -4528,4 +4480,92 @@
echo view('errors/html/production');
}
}
public function getClientAndVehicleId($row, $vehicle_data, $client_data, $rto_master, $vehicle_type_data)
{
$vehicle_number = trim($row[2]);
$client_name = trim($row[5]);
$client_email = trim($row[6]);
$vehicle_id = null;
$client_id = null;
// -------------------------------------------
// 1. First Stage: Check if vehicle already exists
// -------------------------------------------
foreach ($vehicle_data as $v) {
if (strcasecmp(trim($v['vehicle_no']), $vehicle_number) === 0) {
$vehicle_id = $v['id'];
$client_id = $v['owner'];
break;
}
}
// -------------------------------------------
// 2. Second Stage: Vehicle not found -> check client by email
// -------------------------------------------
$second_stage_client_id = null;
if (empty($vehicle_id) && empty($client_id)) {
foreach ($client_data as $c) {
if (strcasecmp(trim($c['email']), $client_email) === 0) {
$second_stage_client_id = $c['id'];
break;
}
}
if (!empty($second_stage_client_id)) {
// Existing client Insert vehicle
$matched_rto_id = check_rto_data($row, $rto_master);
$vehicle_type_id = check_vehicle_type($row, $vehicle_type_data);
$vehicle_insert = [
'vehicle_no' => $vehicle_number,
'vehicle_type' => $vehicle_type_id['vehicle_type']['id'] ?? null,
'owner' => $second_stage_client_id,
'rto_id' => $matched_rto_id['rto_data']['id'] ?? null,
];
$vehicle_id = $this->vehicleModel->insert($vehicle_insert);
$client_id = $second_stage_client_id;
} else {
// -------------------------------------------
// 3. Third Stage: No existing client → Insert new client then insert vehicle
// -------------------------------------------
$client_insert = [
'client_name' => $client_name,
'short_name' => $client_name,
'email' => $client_email,
'entity_type_id' => 7,
'client_type' => 2,
];
$client_id = $this->clientModel->insert($client_insert);
if ($client_id) {
$matched_rto_id = check_rto_data($row, $rto_master);
$vehicle_type_id = check_vehicle_type($row, $vehicle_type_data);
$vehicle_insert = [
'vehicle_no' => $vehicle_number,
'vehicle_type' => $vehicle_type_id['vehicle_type']['id'] ?? null,
'owner' => $client_id,
'rto_id' => $matched_rto_id['rto_data']['id'] ?? null,
];
$vehicle_id = $this->vehicleModel->insert($vehicle_insert);
}
}
}
return [
'client_id' => $client_id,
'vehicle_id' => $vehicle_id,
];
}
}

View File

@ -52,18 +52,17 @@
<td><?php echo change_date_format($file['created_at'], 'Y-m-d H:i:s', 'd M Y h:i A') . ' by <strong>' . $file['user_name'] . '</strong>' ?> </td>
<td>
<?php if ($file['status'] == "failed") { ?>
<span style="color : #BD0707 ;"> <?= $file['status'] ?> </span>
<span> <?= $file['status'] ?> </span>
<span class='col-xl-3 col-lg-4 col-sm-6'>
<!-- <a href="<?= base_url('util/bds_dump_excel_error/') . $file['file_id'] ?>" target="_blank" class='fe-alert-circle' data-err="<?= $file['file_id'] ?>"></a> -->
<a href="#" class='fe-alert-circle' onclick="fetchFileError(<?= $file['file_id'] ?>)"></a>
</span>
<?php } else if ($file['status'] == "inprogress") { ?>
<a data-id="<?= $file['status'] ?>" class="reload" href="#"
style="color : #938e04ff ;">
<a data-id="<?= $file['status'] ?>" class="reload" href="#">
<?= $file['status'] ?>
</a>
<?php } else { ?>
<span style="color : #34A853 ;"> <?= $file['status'] ?> </span>
<span> <?= $file['status'] ?> </span>
<?php } ?>
</td>
<td>