diff --git a/app/Config/Acl.php b/app/Config/Acl.php index b66743fb..df90b2f2 100644 --- a/app/Config/Acl.php +++ b/app/Config/Acl.php @@ -122,7 +122,7 @@ class Acl // ===================== POLICY TRANSACTION / BDS ===================== '#^/policy_tranction#' => [ - 'roles' => [ HEAD_ROLE_ID,ADMIN_ROLE_ID, MANAGER_ROLE_ID, ACCOUNT_MANAGER_ROLE_ID], + 'roles' => [ HEAD_ROLE_ID,ADMIN_ROLE_ID, MANAGER_ROLE_ID, ACCOUNT_MANAGER_ROLE_ID,STAFF_ROLE_ID], 'teams' => [FINANCE_TEAM_ID,POS_TEAM_ID] ], '#^/dmsSearch#' => [ diff --git a/app/Config/Routes.php b/app/Config/Routes.php index 33aa40e1..2d363f2d 100755 --- a/app/Config/Routes.php +++ b/app/Config/Routes.php @@ -609,7 +609,7 @@ $routes->group("employeeRest/api/v1", ["filter" => ['ratelimit', 'authJWT']], fu $routes->post('create', 'Api\NonEbClaimApiController::createClaim'); $routes->post('list', 'Api\NonEbClaimApiController::listClaims'); $routes->get('history/(:num)', 'Api\NonEbClaimApiController::claimHistory/$1'); - $routes->post('(:num)/upload-required-doc', 'Api\NonEbClaimApiController::uploadRequiredDoc/$1'); + $routes->post('upload-required-doc', 'Api\NonEbClaimApiController::uploadRequiredDoc'); $routes->get('statuses', 'Api\NonEbClaimApiController::listClaimStatuses'); $routes->post('policies', 'Api\NonEbClaimApiController::listPolicies'); }); diff --git a/app/Controllers/Api/NonEbClaimApiController.php b/app/Controllers/Api/NonEbClaimApiController.php index 3cfa914d..0e2355b5 100644 --- a/app/Controllers/Api/NonEbClaimApiController.php +++ b/app/Controllers/Api/NonEbClaimApiController.php @@ -653,7 +653,61 @@ class NonEbClaimApiController extends BaseController ], 200); } - public function uploadRequiredDoc(int $claim_id) + public function uploadRequiredDoc() + { + $authUser = $this->getAuthUser(); + if (!$authUser) { + return $this->respond(['status' => false, 'code' => 401, 'message' => 'Unauthorized'], 401); + } + + $ticket_id = $this->request->getPost('ticket_id') ?? null; + $get_file_data = $this->request->getFiles('claim_docs') ?? null; + $get_docs_name = $this->request->getPost('claim_doc_names') ?? []; + $required_docs = $this->request->getPost('required_docs') ?? null; + + if (is_string($get_docs_name)) { + $decoded = json_decode($get_docs_name, true); + $get_docs_name = json_last_error() === JSON_ERROR_NONE ? $decoded : []; + } elseif (!is_array($get_docs_name)) { + $get_docs_name = []; + } + + $file_data = []; + if (!empty($get_file_data)) { + $file_path = WRITEPATH . 'uploads/claim_files/'; + $file_data = multi_file_Upload($get_file_data, $file_path, $get_docs_name, UPLOAD_EXT_CLAIM_DOCS); + } + + if (!empty($file_data) && !empty($ticket_id)) { + foreach ($file_data as $value) { + $this->claimFilesModel->insert([ + 'ticket_id' => $ticket_id, + 'ticket_type' => 2, + 'doc_name' => $value['doc_name'], + 'file_name' => $value['file_name'], + 'url' => $value['file_path'], + 'file_type' => 2, + 'mime_type' => getMimeTypeByFileName($value['file_name']), + 'docs_for_ir' => 1, + 'is_active' => 1, + 'created_by' => self::API_SYSTEM_USER_ID, + ]); + } + + db_connect()->query( + 'UPDATE non_eb_ticket_master SET required_docs = ? WHERE id = ?', + [$required_docs, $ticket_id] + ); + + $this->myLogger->logme('error', "[NON_EB_API][uploadRequiredDoc] Docs uploaded. ticket_id: $ticket_id, count: " . count($file_data) . ", user: {$authUser['id']}"); + + return $this->respond(['status' => true, 'code' => 200, 'message' => 'Files uploaded successfully'], 200); + } + + return $this->respond(['status' => false, 'code' => 400, 'message' => 'Failed to upload the file'], 400); + } + + public function uploadRequiredDoc_v1(int $claim_id) { $authUser = $this->getAuthUser(); if (!$authUser) { diff --git a/app/Controllers/LeadsController.php b/app/Controllers/LeadsController.php index 9a8ec5f1..12f9ed38 100644 --- a/app/Controllers/LeadsController.php +++ b/app/Controllers/LeadsController.php @@ -4083,9 +4083,16 @@ class LeadsController extends BaseController private function prepareClientPolicyData($data, $client_id, $branch_id) { - $proposel_data = json_decode($data['proposel_data'], true); - // print_r($proposel_data); die; - list($insurer_branch_id, $insurer_id) = explode('-', $proposel_data['insurer'], 2); + $proposel_data = json_decode($data['proposel_data'] ?? '', true) ?? []; + + if ($data['lead_form_type'] == 1) { + // EB: insurer stored as "{insurer_branch_id}-{insurer_id}" inside proposel_data + list($insurer_branch_id, $insurer_id) = explode('-', $proposel_data['insurer'] ?? '-', 2); + } else { + // Non-EB: insurer IDs are direct columns on the lead row + $insurer_id = $data['insurer_id'] ?? null; + $insurer_branch_id = $data['insurer_branch_id'] ?? null; + } $client_policy_data = [ 'client_id' => $client_id, @@ -4315,7 +4322,7 @@ class LeadsController extends BaseController public function getPlacementJson(array $data): ?string { - $proposel_data = json_decode($data['proposel_data'], true); + $proposel_data = json_decode($data['proposel_data'] ?? '', true) ?? []; $QCRData = $this->RFQModel ->where('is_active', 1) diff --git a/app/Controllers/TicketController.php b/app/Controllers/TicketController.php index 44d25abe..91d71085 100644 --- a/app/Controllers/TicketController.php +++ b/app/Controllers/TicketController.php @@ -1307,7 +1307,7 @@ class TicketController extends BaseController 'approved_date' => ['label' => 'Approved Date','rules' => 'permit_empty|regex_match[/^\d{2}\/\d{2}\/\d{4}$/]','errors' => ['regex_match' => 'Approved Date must be dd/mm/yyyy.']], 'approved_letter' => ['label' => 'Approved Letter','rules' => 'permit_empty','errors' => []], 'approved_description' => ['label' => 'Approved Description','rules' => 'permit_empty','errors' => []], - 'utr_details' => ['label' => 'UTR Details','rules' => 'permit_empty|alpha_numeric_punct','errors' => ['alpha_numeric_punct' => 'UTR Details contains invalid characters.']], + 'utr_details' => ['label' => 'UTR Details','rules' => 'permit_empty|regex_match[/^[a-zA-Z0-9 ~!#$%&*\-_+=|:.,]+$/]','errors' => ['regex_match' => 'UTR Details only allows alphanumeric, spaces, and ~ ! # $ % & * - _ + = | : . , ']], 'settled_date' => ['label' => 'Settled Date','rules' => 'permit_empty|regex_match[/^\d{2}\/\d{2}\/\d{4}$/]','errors' => ['regex_match' => 'Settled Date must be dd/mm/yyyy.']], 'settle_letter' => ['label' => 'Settle Letter','rules' => 'permit_empty','errors' => []], 'pay_initiate_date' => ['label' => 'Payment Initiate Date','rules' => 'permit_empty|regex_match[/^\d{2}\/\d{2}\/\d{4}$/]','errors' => ['regex_match' => 'Payment Initiate Date must be dd/mm/yyyy.']], @@ -1418,7 +1418,7 @@ class TicketController extends BaseController 'approved_date' => ['label' => 'Approved Date','rules' => 'permit_empty|regex_match[/^\d{2}\/\d{2}\/\d{4}$/]','errors' => ['regex_match' => 'Approved Date must be dd/mm/yyyy.']], 'approved_letter' => ['label' => 'Approved Letter','rules' => 'permit_empty','errors' => []], 'approved_description' => ['label' => 'Approved Description','rules' => 'permit_empty','errors' => []], - 'utr_details' => ['label' => 'UTR Details','rules' => 'permit_empty|alpha_numeric_punct','errors' => ['alpha_numeric_punct' => 'UTR Details contains invalid characters.']], + 'utr_details' => [ 'label' => 'UTR Details', 'rules' => 'permit_empty|regex_match[/^[a-zA-Z0-9 ~!#$%&*\-_+=|:.,]+$/]','errors' => ['regex_match' => 'UTR Details only allows alphanumeric, spaces, and ~ ! # $ % & * - _ + = | : . , ']], 'settled_date' => ['label' => 'Settled Date','rules' => 'permit_empty|regex_match[/^\d{2}\/\d{2}\/\d{4}$/]','errors' => ['regex_match' => 'Settled Date must be dd/mm/yyyy.']], 'settle_letter' => ['label' => 'Settle Letter','rules' => 'permit_empty','errors' => []], 'pay_initiate_date' => ['label' => 'Payment Initiate Date','rules' => 'permit_empty|regex_match[/^\d{2}\/\d{2}\/\d{4}$/]','errors' => ['regex_match' => 'Payment Initiate Date must be dd/mm/yyyy.']], @@ -1672,7 +1672,8 @@ class TicketController extends BaseController 'approved_date' => ['label' => 'Approved Date','rules' => 'permit_empty|regex_match[/^\d{2}\/\d{2}\/\d{4}$/]','errors' => ['regex_match' => 'Approved Date must be dd/mm/yyyy.']], 'approved_letter' => ['label' => 'Approved Letter','rules' => 'permit_empty','errors' => []], 'approved_description' => ['label' => 'Approved Description','rules' => 'permit_empty','errors' => []], - 'utr_details' => ['label' => 'UTR Details','rules' => 'permit_empty|alpha_numeric_punct','errors' => ['alpha_numeric_punct' => 'UTR Details contains invalid characters.']], + 'utr_details' => ['label' => 'UTR Details','rules' => 'permit_empty|regex_match[/^[a-zA-Z0-9 ~!#$%&*\-_+=|:.,]+$/]','errors' => ['regex_match' => 'UTR Details only allows alphanumeric, spaces, and ~ ! # $ % & * - _ + = | : . , ']], + 'errors' => [ 'regex_match' => 'UTR Details only allows alphanumeric, spaces, and ~ ! # $ % & * - _ + = | : . , '], 'settled_date' => ['label' => 'Settled Date','rules' => 'permit_empty|regex_match[/^\d{2}\/\d{2}\/\d{4}$/]','errors' => ['regex_match' => 'Settled Date must be dd/mm/yyyy.']], 'settle_letter' => ['label' => 'Settle Letter','rules' => 'permit_empty','errors' => []], 'pay_initiate_date' => ['label' => 'Payment Initiate Date','rules' => 'permit_empty|regex_match[/^\d{2}\/\d{2}\/\d{4}$/]','errors' => ['regex_match' => 'Payment Initiate Date must be dd/mm/yyyy.']], @@ -1783,7 +1784,7 @@ class TicketController extends BaseController 'approved_date' => ['label' => 'Approved Date','rules' => 'permit_empty|regex_match[/^\d{2}\/\d{2}\/\d{4}$/]','errors' => ['regex_match' => 'Approved Date must be dd/mm/yyyy.']], 'approved_letter' => ['label' => 'Approved Letter','rules' => 'permit_empty','errors' => []], 'approved_description' => ['label' => 'Approved Description','rules' => 'permit_empty','errors' => []], - 'utr_details' => ['label' => 'UTR Details','rules' => 'permit_empty|alpha_numeric_punct','errors' => ['alpha_numeric_punct' => 'UTR Details contains invalid characters.']], + 'utr_details' => ['label' => 'UTR Details','rules' => 'permit_empty|regex_match[/^[a-zA-Z0-9 ~!#$%&*\-_+=|:.,]+$/]','errors' => ['regex_match' => 'UTR Details only allows alphanumeric, spaces, and ~ ! # $ % & * - _ + = | : . , ']], 'settled_date' => ['label' => 'Settled Date','rules' => 'permit_empty|regex_match[/^\d{2}\/\d{2}\/\d{4}$/]','errors' => ['regex_match' => 'Settled Date must be dd/mm/yyyy.']], 'settle_letter' => ['label' => 'Settle Letter','rules' => 'permit_empty','errors' => []], 'pay_initiate_date' => ['label' => 'Payment Initiate Date','rules' => 'permit_empty|regex_match[/^\d{2}\/\d{2}\/\d{4}$/]','errors' => ['regex_match' => 'Payment Initiate Date must be dd/mm/yyyy.']], diff --git a/app/Models/LeadsModel.php b/app/Models/LeadsModel.php index 5ed42522..d194375a 100644 --- a/app/Models/LeadsModel.php +++ b/app/Models/LeadsModel.php @@ -186,13 +186,19 @@ class LeadsModel extends Model public function getLeadForInsertClientList($type = null, $client_id = null) { $query = $this->db->table('leads') - ->select('leads.*, user_profiles.first_name as user_name') + ->select('leads.*, user_profiles.first_name as user_name, policy_type.allocg') ->join('user_profiles', 'leads.created_by = user_profiles.id') + ->join('policy_type', 'leads.policy_type_id = policy_type.id', 'left') ->where('leads.is_active', 1) ->where('leads.status', 'won') - ->where("leads.proposel_data IS NOT NULL AND leads.proposel_data <> ''") - ->where("(leads.is_client_created = '' OR leads.is_client_created IS NULL)") - ->where("(leads.is_policy_created = '' OR leads.is_policy_created IS NULL)"); + ->groupStart() + ->where("(leads.is_client_created = '' OR leads.is_client_created IS NULL)") + ->orWhere("(leads.is_policy_created = '' OR leads.is_policy_created IS NULL)") + ->groupEnd() + ->groupStart() + ->where("policy_type.allocg != 'EB'") + ->orWhere("(policy_type.allocg = 'EB' AND leads.proposel_data IS NOT NULL AND leads.proposel_data <> '')") + ->groupEnd(); if ($type) { $query->where('leads.lead_type', $type); diff --git a/app/Views/client_policy.php b/app/Views/client_policy.php index e8720c97..b45d5d11 100755 --- a/app/Views/client_policy.php +++ b/app/Views/client_policy.php @@ -357,7 +357,7 @@ input:checked + .slider_blue::before {