diff --git a/app/Config/Database.php b/app/Config/Database.php index dcc1c2dd..c0f91c65 100755 --- a/app/Config/Database.php +++ b/app/Config/Database.php @@ -134,6 +134,10 @@ class Database extends Config 'ssl_ca' => ROOTPATH . 'ca.pem', 'ssl_verify' => true, ]; + $this->preDB['encrypt'] = [ + 'ssl_ca' => ROOTPATH . 'ca.pem', + 'ssl_verify' => true, + ]; } } diff --git a/app/Config/Routes.php b/app/Config/Routes.php index 48c7fbb8..e88bbc81 100755 --- a/app/Config/Routes.php +++ b/app/Config/Routes.php @@ -213,6 +213,8 @@ $routes->group("/employee", ["filter" => "authMVC"], function ($routes) { $routes->post('get_emp_history','EmployeeController::getEmpHistory'); $routes->get("retail-endorsement-list", "EmployeeController::retailendorsementlist"); $routes->post("retail-endorsement-save", "EmployeeController::retailendorsementsave"); + $routes->get("getTPADataVariationReport/(:num)", "EmployeeController::getTPADataVariationReport/$1"); + $routes->get("bulkGenerateEcardAndStoreinS3", "EmployeeController::bulkGenerateEcardAndStoreinS3"); }); @@ -508,6 +510,8 @@ $routes->get('cli/sendZeptoMail', 'MasterController::testZeptoSMTP'); $routes->cli('cli/processjob', 'JobWorker::processJob'); $routes->cli('cli/processjobs', 'JobWorker::processJobs'); +$routes->cli('cli/bulkGenerateEcardAndStoreinS3', 'EmployeeController::bulkGenerateEcardAndStoreinS3'); + $routes->get("processjob", "JobWorker::processJob"); $routes->cli('cli/new_gmail_token', 'MasterController::generateNewGmailAPIToken'); $routes->cli('cli/send_mail_cli', 'MasterController::testGmailAPIViaCLI'); @@ -766,11 +770,12 @@ $routes->get('claimStatus','VidalApiController::claimStatus'); $routes->get('EcardRequest','MediAssistApiController::EcardRequest'); $routes->get('HospitalNetwork','MediAssistApiController::HospitalNetwork'); $routes->get('GetBenefDetails','MediAssistApiController::GetBenefDetails'); -$routes->get('ClaimDetail','VidalApiController::ClaimDetail'); +$routes->get('ClaimDetail','MediAssistApiController::ClaimDetail'); $routes->get('SubmitClaim','MediAssistApiController::SubmitClaim'); $routes->get('IntimateClaim','MediAssistApiController::IntimateClaim'); $routes->get('IRSubmission','MediAssistApiController::IRSubmission'); $routes->get('ClaimStatusUpdate','MediAssistApiController::ClaimStatusUpdate'); +$routes->get('syncTpaClaimToNhance','MediAssistApiController::syncTpaClaimToNhance'); // API service diff --git a/app/Config/Services.php b/app/Config/Services.php index 5f982877..73d75683 100755 --- a/app/Config/Services.php +++ b/app/Config/Services.php @@ -9,6 +9,7 @@ use App\Libraries\GmailAPI; use App\Libraries\MyGoogleDrive; use App\Libraries\RuleImportService; use App\Libraries\DataServiceSqlite; +use App\Libraries\S3Service; use App\Controllers\Home; /** @@ -90,5 +91,14 @@ class Services extends BaseService return new RuleImportService(); } + + public static function getS3Service($getShared = true) + { + if ($getShared) { + return static::getSharedInstance('getS3Service'); + } + + return new S3Service(); + } } diff --git a/app/Controllers/ApiServiceController.php b/app/Controllers/ApiServiceController.php index 5f8f17e4..e1858c95 100644 --- a/app/Controllers/ApiServiceController.php +++ b/app/Controllers/ApiServiceController.php @@ -92,13 +92,25 @@ class ApiServiceController extends BaseController } + // $employee_policy = $this->employeePolicyModel + // ->select('employees.*, employee_polices.tpa_id , employee_polices.rand_string , employee_polices.uhid as uhid , client_policy.tpa_id as tpa_primary_id ') + // ->join('employees', 'employee_polices.employee_id = employees.id', 'left') + // ->join('client_policy', 'employee_polices.client_policy_id = client_policy.id', 'left') + // ->where('employee_polices.employee_id',$id) + // ->where('employee_polices.client_policy_id',$client_policy_id) + // ->where('employee_polices.is_active', 1 )->findAll(); + $employee_policy = $this->employeePolicyModel ->select('employees.*, employee_polices.tpa_id , employee_polices.rand_string , employee_polices.uhid as uhid , client_policy.tpa_id as tpa_primary_id ') ->join('employees', 'employee_polices.employee_id = employees.id', 'left') ->join('client_policy', 'employee_polices.client_policy_id = client_policy.id', 'left') - ->where('employee_polices.employee_id',$id) - ->where('employee_polices.client_policy_id',$client_policy_id) - ->where('employee_polices.is_active', 1 )->findAll(); + ->where('employees.emp_code', $emp_code) + ->where('employee_polices.client_policy_id', $client_policy_id) + ->where('employee_polices.is_active', 1) + ->where('employees.is_active', 1) + ->where('employee_polices.status', 'active') + ->where('employees.emp_status', 'active') + ->findAll(); if(count($employee_policy) > 0) diff --git a/app/Controllers/ClientController.php b/app/Controllers/ClientController.php index 039f6f99..db355961 100755 --- a/app/Controllers/ClientController.php +++ b/app/Controllers/ClientController.php @@ -2726,7 +2726,9 @@ class ClientController extends AdminController $search_term = 'GMC'; } else if (preg_match($gpa_pattern, $subject) || $policy_type_id == 6 || $policy_type_id == 7) { $search_term = 'GPA'; - } else { + } else if($policy_type_id == 72){ + $search_term = 'GMC'; + }else { $search_term = ""; } @@ -2736,7 +2738,7 @@ class ClientController extends AdminController if ($search_term === 'GPA' || $policy_type_id == 6 || $policy_type_id == 7) { $premiumData = $this->policyPremium1Model->where(['client_id' => $record['client_id'], 'client_policy_id' => $client_policy_id, 'is_active' => 1])->findAll(); - } else if ($search_term === 'GMC') { + } else if ($search_term === 'GMC' || $policy_type_id == 72) { $premiumData = $this->policyPremium2Model->where(['client_id' => $record['client_id'], 'client_policy_id' => $client_policy_id, 'is_active' => 1])->findAll(); @@ -2766,7 +2768,7 @@ class ClientController extends AdminController // echo '
';
         // echo $family_floater;
 
-        if ($search_term === 'GMC') {
+        if ($search_term === 'GMC'  || $policy_type_id == 72 ) {
 
             // $resultss = [];
             $resultss = $results;
@@ -3400,6 +3402,7 @@ class ClientController extends AdminController
                 [
                     'Status' => true,
                     'code' => 200,
+                    'policy_type_id' => $record['policy_type_id'],
                     'data' => $record['policy_terms'],
                     'policy_addon' => $record['is_addon'],
                     'emp_count_by_policy' => $emp_count_by_policy
@@ -4225,40 +4228,147 @@ class ClientController extends AdminController
         $client_policy_id = $this->request->getPost("client_policy_id");
         $policy_terms = $this->request->getPost("policy_terms");
         $policy_terms = json_decode($policy_terms, true);
-
-        $data = [];
-
-        foreach ($policy_terms as $key => $value) {
-
-            if (str_ends_with($key, '_display')) {
-
-                $original_key = substr($key, 0, -8);
-
-                $newKey = implode(' ', array_map('ucfirst', explode('_', $original_key)));
-
-                $data['enrollment_display_key'][$newKey] = $policy_terms[$original_key] ?? " ";
-            } else {
-
-                $data[$key] = $value;
-            }
-        }
-
-        if (!empty($data)) {
-            $policy_terms['is_payable_employee']['self'] = 0;
-            $policy_terms = json_encode($data);
-        }
-
-
         $record = $this->clientPolicyModel->where('id', $client_policy_id)->first();
+        // print_r($policy_terms); die;
+
+        if (empty($policy_terms)) {
+            return $this->respond(['status' => false, 'code' => 404, 'message' => 'Policy terms data could not be empty', 'formdata' => $this->request->getPost()], 200);
+        }
 
         if ($record) {
 
-            $update = $this->clientPolicyModel->where('id', $client_policy_id)->set('policy_terms',  $policy_terms)->update();
+            $data = [];
 
-            if ($update) {
-                return $this->respond(['status' => true, 'code' => 200, 'message' => 'Data updated successfully', 'client_policy_id' => $client_policy_id], 200);
+            if ($record['policy_type_id'] == 72) {
+
+                $data['sum_insured']   = $policy_terms['sum_insured'] ?? 0;
+                $data['multiple_sum_insured']   = $policy_terms['multiple_sum_insured'] ?? [];
+                $data['family_floater']   = $policy_terms['family_floater'] ?? 0;
+                $data['family_floaters'] = $policy_terms["family_floaters"] ?? [];
+
+                $data['age_ratio']['self']['min'] =  $policy_terms["self_min_age"] ?? 0;
+                $data['age_ratio']['self']['max'] = $policy_terms["self_max_age"] ?? 0;
+                $data['age_ratio']['spouse']['min'] = $policy_terms["spouse_min_age"] ?? 0;
+                $data['age_ratio']['spouse']['max'] = $policy_terms["spouse_max_age"] ?? 0;
+                $data['age_ratio']['child']['min'] = $policy_terms["child_min_age"] ?? 0;
+                $data['age_ratio']['child']['max'] = $policy_terms["child_max_age"] ?? 0;
+                $data['age_ratio']['elders']['min'] = $policy_terms["other_member_min_age"] ?? 0;
+                $data['age_ratio']['elders']['max'] = $policy_terms["other_member_max_age"] ?? 0;
+
+                $temp_family_floaters = $data['family_floaters'];
+                $data['family_floaters'] = [];
+
+                if (in_array("self", $temp_family_floaters) == 1) {
+                    $data['family_floaters']['self'] = 1;
+                } else {
+                    $data['family_floaters']['self'] = 0;
+                }
+
+                if (in_array("spouse", $temp_family_floaters) == 1) {
+                    $data['family_floaters']['spouse'] = 1;
+                } else {
+                    $data['family_floaters']['spouse'] = 0;
+                }
+
+                if (count($temp_family_floaters)) {
+
+                    $children_value = 0;
+                    $value = 0;
+
+                    if (count($temp_family_floaters) == 2) {
+                        $children_value = 0;
+                        $value = 1;
+                    } else if (count($temp_family_floaters) == 3) {
+                        $children_value = 1;
+                        $value = 2;
+                    } else {
+                        $children_value = 2;
+                        $value = 3;
+                    }
+                    $data['family_floaters']['childrens'] = (int)$temp_family_floaters[$children_value];
+
+                    if ($temp_family_floaters[$value] == '1P') {
+                        $data['family_floaters']['parents'] = 1;
+                        $data['family_floaters']['parents-in-law'] = 0;
+                        $data['family_floaters']['either-parents-pil'] = 0;
+                    } else if ($temp_family_floaters[$value] == '2P') {
+                        $data['family_floaters']['parents'] = 2;
+                        $data['family_floaters']['parents-in-law'] = 0;
+                        $data['family_floaters']['either-parents-pil'] = 0;
+                    } else if ($temp_family_floaters[$value] == '1PIL') {
+                        $data['family_floaters']['parents'] = 0;
+                        $data['family_floaters']['parents-in-law'] = 1;
+                        $data['family_floaters']['either-parents-pil'] = 0;
+                    } else if ($temp_family_floaters[$value] == '2PIL') {
+                        $data['family_floaters']['parents'] = 0;
+                        $data['family_floaters']['parents-in-law'] = 2;
+                        $data['family_floaters']['either-parents-pil'] = 0;
+                    } else if ($temp_family_floaters[$value] == '2EPORPIL') {
+                        //Parents or PIL (Any two of Father, Mother, MIl, FIL)
+                        $data['family_floaters']['parents'] = 0;
+                        $data['family_floaters']['parents-in-law'] = 0;
+                        $data['family_floaters']['either-parents-pil'] = 2;
+                    } else if ($temp_family_floaters[$value] == 'EPORPIL') {
+                        //Either Parents or PIL (Parents or Parents In Law)
+                        $data['family_floaters']['parents'] = 0;
+                        $data['family_floaters']['parents-in-law'] = 0;
+                        $data['family_floaters']['either-parents-pil'] = 1;
+                    } else if ($temp_family_floaters[$value] == '4EPORPIL') {
+                        $data['family_floaters']['parents'] = 2;
+                        $data['family_floaters']['parents-in-law'] = 2;
+                        $data['family_floaters']['either-parents-pil'] = 0;
+                    } else {
+                        $data['family_floaters']['parents'] = 0;
+                        $data['family_floaters']['parents-in-law'] = 0;
+                        $data['family_floaters']['either-parents-pil'] = 0;
+                    }
+                }
+
+                $data['family_floaters']['elders_count'] = $this->request->getPost("elder_member_count") ? $this->request->getPost("elder_member_count") : 0;
+                $data['special_condition_label']   = $policy_terms['special_condition_label'] ?? [];
+                $data['special_condition_input'] = $policy_terms["special_condition_input"] ?? [];
+
+                $data['enrollment_display_key'] = $this->otherPolicyTermsDisplayKeyConstruct($policy_terms);
             } else {
-                return $this->respond(['status' => false, 'code' => 404, 'message' => 'Failed to update data', 'formdata' => $this->request->getPost()], 200);
+                foreach ($policy_terms as $key => $value) {
+
+                    if (str_ends_with($key, '_display')) {
+
+                        $original_key = substr($key, 0, -8);
+
+                        $newKey = implode(' ', array_map('ucfirst', explode('_', $original_key)));
+
+                        $data['enrollment_display_key'][$newKey] = $policy_terms[$original_key] ?? " ";
+                    } else {
+
+                        $data[$key] = $value;
+                    }
+                }
+            }
+
+            if (!empty($data)) {
+
+                if ($record['policy_type_id'] == 72) {
+                    $policy_terms['is_payable_employee']['self'] = 0;
+                    $policy_terms['is_payable_employee']['spouse'] = 0;
+                    $policy_terms['is_payable_employee']['childern'] = 0;
+                    $policy_terms['is_payable_employee']['elders'] = 0;
+                } else {
+                    $policy_terms['is_payable_employee']['self'] = 0;
+                }
+
+                $policy_terms = json_encode($data);
+
+                $update = $this->clientPolicyModel->where('id', $client_policy_id)->set('policy_terms',  $policy_terms)->update();
+
+                if ($update) {
+                    return $this->respond(['status' => true, 'code' => 200, 'message' => 'Data updated successfully', 'client_policy_id' => $client_policy_id], 200);
+                } else {
+                    return $this->respond(['status' => false, 'code' => 404, 'message' => 'Failed to update data', 'formdata' => $this->request->getPost()], 200);
+                }
+
+            } else {
+                return $this->respond(['status' => false, 'code' => 404, 'message' => 'Failed to store data the policy therms.', 'formdata' => $this->request->getPost()], 200);
             }
         } else {
 
@@ -4266,6 +4376,27 @@ class ClientController extends AdminController
         }
     }
 
+    public function otherPolicyTermsDisplayKeyConstruct($data)
+    {
+        $labels = $data['special_condition_label'] ?? [];
+        $values = $data['special_condition_input'] ?? [];
+
+        $special_conditions = [];
+
+        foreach ($labels as $i => $label) {
+            $value = $values[$i] ?? '';
+
+            // skip if label or value is empty
+            if (trim($label) === '' || trim($value) === '') {
+                continue;
+            }
+
+            $special_conditions[$label] = $value;
+        }
+
+        return $special_conditions;
+    }
+
     public function checkPolicyType($policy_type_id, $client_branch_id, $client_id)
     {
 
@@ -5971,8 +6102,8 @@ class ClientController extends AdminController
         // ---------- EMP SERVICE CONTROLLER --------------------------------------------------------------------------------
 
         $empServiceController = new EmployeeServiceController();
-        // $res = $empServiceController->excelFileFormatValidation(['file_id' => '1126']);
-        // $res = $empServiceController->excelFileDataValidation(['file_id' => '865']);
+        // $res = $empServiceController->excelFileFormatValidation(['file_id' => '1248']);
+        // $res = $empServiceController->excelFileDataValidation(['file_id' => '1248']);
         // $res = $empServiceController->employeesOnboardPreprocess(['file_id' => 1183]);
         // $res = $empServiceController->employeesOnboardPreprocess(['file_id' => 1169]);
         // $res = $empServiceController->employeesOnboardProcess(['file_id' => 835]);
diff --git a/app/Controllers/DashboardController.php b/app/Controllers/DashboardController.php
index 8958c26d..50a9e4c1 100755
--- a/app/Controllers/DashboardController.php
+++ b/app/Controllers/DashboardController.php
@@ -238,7 +238,7 @@ class DashboardController extends AdminController
 
             $data['client_branch_emp_list'] = $results;
             $session = \Config\Services::session();
-            $session->set('enrollment_data', json_encode($data));
+            // $session->set('enrollment_data', json_encode($data));
 
             $data['pendingActionsData'] = $pendingActionsData;
             $data['businessTeamCount'] = count($businessTeamData) ?? 0;
diff --git a/app/Controllers/EmployeeController.php b/app/Controllers/EmployeeController.php
index dc72314e..fe377c2a 100755
--- a/app/Controllers/EmployeeController.php
+++ b/app/Controllers/EmployeeController.php
@@ -28,6 +28,7 @@ use App\Models\PolicyPremium2Model;
 use App\Models\AuditHistoryModel;
 use App\Models\UserModel;
 use App\Models\PartnerEndorsementRequestModel;
+use App\Models\TpaApiDataModel;
 
 
 use App\Controllers\Jobs;
@@ -42,6 +43,8 @@ use CodeIgniter\API\ResponseTrait;
 use PhpOffice\PhpSpreadsheet\Spreadsheet;
 use PhpOffice\PhpSpreadsheet\IOFactory;
 use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
+use PhpOffice\PhpSpreadsheet\Cell\Coordinate;
+use PhpOffice\PhpSpreadsheet\Style\Fill;
 
 use Dompdf\Dompdf;
 use Dompdf\Options;
@@ -98,6 +101,14 @@ class EmployeeController extends AdminController
 
     public function list()
     {
+
+        // $s3 = \Config\Services::getS3Service();
+        // $file = WRITEPATH.'uploads/excel/inception.ods';
+        // print_rr($s3->exists('inception_1766475604.ods'));
+        // print_rr($s3->getPresignedUrl('inception_1766.ods'));
+        // print_rr($s3->upload($file));
+        // print_rr($s3->download('inception_1766475604.ods',__DIR__));
+        // die();
         // $model = new UserModel();
         $data = [];
         $data['status'] = ['draft' => 'Draft', 'enrolled' => 'Enrolled', 'active' => 'Active', 'inactive' => 'In-Active', 'pending' => 'Pending'];
@@ -1426,7 +1437,10 @@ class EmployeeController extends AdminController
     //E-CARD DOWNLOAD FUNCTION USING DOM PDF ( CURRENTLY USING THIS ) Dompdf
     public function generateIDCardForEmployee($rand_string, $people = 0, $mode = 0)
     {    
-        // dd($rand_string, $people);
+        $mode = (int)$mode;
+
+
+        // dd($rand_string, $people,$mode);
         $this->myLogger->logme('error', 'generateIDCardForEmployee params .' . json_encode(["rand_string" => $rand_string, "people" => $people, "mode" => $mode]));
         try {
             $this->myLogger->logme('error', 'generateIDCardForEmployee function started.');
@@ -1435,7 +1449,7 @@ class EmployeeController extends AdminController
             $this->myLogger->logme('error', 'Fetching employee code and client policy ID.');
 
             $get_emp_code_and_client_policy_id = $this->employeePolicyModel
-                ->select('employee_polices.client_policy_id, employees.emp_code, tpa.short_name,employees.client_id')
+                ->select('employee_polices.client_policy_id, employees.emp_code,employees.name, employee_polices.tpa_id,tpa.short_name,employees.client_id')
                 ->join('client_policy', 'client_policy.id = employee_polices.client_policy_id')
                 ->join('employees', 'employees.id = employee_polices.employee_id')
                 ->join('tpa', 'tpa.id = client_policy.tpa_id')
@@ -1462,7 +1476,44 @@ class EmployeeController extends AdminController
             $client_policy_id = $get_emp_code_and_client_policy_id['client_policy_id'];
             $emp_code = $get_emp_code_and_client_policy_id['emp_code'];
             $client_id = $get_emp_code_and_client_policy_id['client_id'];
-        
+            
+            //new step check in S3 if yes then fetch from S3 bucket 
+            $s3_key = 'ecard_'.$get_emp_code_and_client_policy_id['name'].'('.$get_emp_code_and_client_policy_id['emp_code'].')'.'_'.$get_emp_code_and_client_policy_id['tpa_id'].'.pdf';
+            // echo $s3_key;die();
+            $s3 = \Config\Services::getS3Service();            
+            if($s3->exists($s3_key) && $mode != 2) //2 => for bulk generate so skip s3 check and generate PDF
+            {
+                //get pre signed url & make it download
+                $s3_url = $s3->getPresignedUrl($s3_key );
+
+                $pdf = file_get_contents($s3_url['url']);
+                if ($mode == 1) {
+                        // Inline view
+                        return $this->response
+                            ->setHeader('Content-Type', 'application/pdf')
+                            ->setHeader('Content-Disposition', 'inline; filename="' . $s3_key . '"')
+                            ->setBody($pdf);
+                    } else if($mode == 0){
+                        // echo 'Force download';//die();
+                        return $this->response
+                            ->setHeader('Content-Type', 'application/pdf')
+                            ->setHeader('Content-Disposition', 'attachment; filename="' . $s3_key . '"')
+                            ->setBody($pdf);
+                    }
+                    // exit();
+            }
+            else
+            {
+                if($mode !== 2)
+                {
+                     $data['message'] = 'Inprogress... Comeback later! or Contact support';
+                     return view('errors/404', $data);
+                }
+            }
+
+            //in else generate PDF and upload it in s3
+            // echo 'else';
+            // exit();
             // Step 2: Fetch ECard data
             $this->myLogger->logme('error', 'Fetching ECard data using client_policy_id: ' . $client_policy_id . ' and emp_code: ' . $emp_code);
             $data = $this->employeePolicyModel->getECardDataUsingMd5($client_policy_id, $emp_code,$client_id);
@@ -1559,6 +1610,7 @@ class EmployeeController extends AdminController
             }
 
             // return $html;
+            // echo  $html;die();
             // DomPdf 
             $options = new Options();
             $options->set('isRemoteEnabled', true);
@@ -1582,28 +1634,34 @@ class EmployeeController extends AdminController
             $dompdf->addInfo("Title", "E-Card");
 
             $filename = 'ecard_' . date('Y-m-d_H-i-s') . '.pdf';
-
+            $temp_local_path = WRITEPATH.'/tmp/'.$s3_key;
+            file_put_contents(($temp_local_path),$dompdf->output());
             // if($mode == 1){
             //     $dompdf->stream($filename, ['Attachment' => false]); // Inline view 
             // }else{
             //     $dompdf->stream($filename, ['Attachment' => true]); // Force download
             // }
+            $aws_upload_res = $s3->upload(($temp_local_path));
+            // print_rr($aws_upload_res);
+            // echo '
PDF generated and uploaded to S3 successfully.
'; + unlink($temp_local_path); - if ($mode == 1) { - // Inline view - return $this->response - ->setHeader('Content-Type', 'application/pdf') - ->setHeader('Content-Disposition', 'inline; filename="' . $filename . '"') - ->setBody($dompdf->output()); - } else { - // Force download - return $this->response - ->setHeader('Content-Type', 'application/pdf') - ->setHeader('Content-Disposition', 'attachment; filename="' . $filename . '"') - ->setBody($dompdf->output()); - } + // exit(); + // if ($mode == 1) { + // // Inline view + // return $this->response + // ->setHeader('Content-Type', 'application/pdf') + // ->setHeader('Content-Disposition', 'inline; filename="' . $filename . '"') + // ->setBody($dompdf->output()); + // } else { + // // Force download + // return $this->response + // ->setHeader('Content-Type', 'application/pdf') + // ->setHeader('Content-Disposition', 'attachment; filename="' . $filename . '"') + // ->setBody($dompdf->output()); + // } - $this->myLogger->logme('error', 'generateIDCardForEmployee function completed successfully.'); + // $this->myLogger->logme('error', 'generateIDCardForEmployee function completed successfully.'); } catch (\Exception $e) { $this->myLogger->logme('error', 'Exception occurred: ' . $e->getMessage()); @@ -3579,5 +3637,571 @@ class EmployeeController extends AdminController } } + public function getTPADataVariationReport($file_id) + { + $file_info = $this->batchFileModel->where('id', $file_id)->find(); + $client_id = $file_info[0]['client_id']; + $client_policy_id = $file_info[0]['client_policy_id']; + $TpaApiDataModel = new TpaApiDataModel(); + $emp_data_wo_tpa_id = $this->employeePolicyModel->getTPADataVariationReport($client_id, $client_policy_id, $file_id); + + + //loop emp data with TPA data for matches + foreach ($emp_data_wo_tpa_id as $db_key => $db_row) + { + //get TPA API data from table for current DB ep code + $tpa_temp_data = $TpaApiDataModel->select('*') + ->where('emp_code', $db_row['emp_code']) + ->where('file_id', $file_id) + ->where('is_active', 1) + ->findAll(); + $match= $this->reconcileDbWithTpa($db_row,$tpa_temp_data); + $emp_data_wo_tpa_id[$db_key]['match'] = $match; + } + + // d($emp_data_wo_tpa_id); + + // die(); + //not_in_tpa + $tpa_emp_codes = $TpaApiDataModel->select('emp_code') + ->where('file_id', $file_id) + ->where('is_active', 1) + ->groupBy('emp_code') + ->findAll(); + $tpa_emp_codes = array_column($tpa_emp_codes, 'emp_code'); + + $not_in_tpa = $this->employeePolicyModel->getTPADataVariationReport($client_id, $client_policy_id, $file_id,$tpa_emp_codes); + // d($not_in_tpa);die(); + + // not_in_nhance + $master_emp_codes = $this->employeePolicyModel->getTPADataVariationReport($client_id, $client_policy_id, $file_id,[],true); + $master_emp_codes = array_column($master_emp_codes, 'emp_code'); + + $not_in_nhance = $TpaApiDataModel->select('*') + ->where('is_active',1) + ->where('file_id',$file_id) + ->whereNotIn('emp_code',$master_emp_codes) + ->findAll(); + // d($not_in_nhance);die(); + + if( !empty($not_in_tpa) || !empty($not_in_nhance) || !empty($emp_data_wo_tpa_id) ) + { + $this->exportVariationReportExcel($not_in_tpa,$not_in_nhance,$emp_data_wo_tpa_id); + } + else + { + return false; + } + // $this->exportVariationReportExcel([],[],[]); + + + } + + + // not in use once all functionality workes well in this funciton then remvoe this function + function compareDbWithTpa(array $db, array $tpaRows): array + { + $partialMatches = []; + + // Normalize helper + $normalizeName = function ($name) { + return strtolower( + preg_replace('/[.\s_]+/', '', trim($name)) + ); + }; + + foreach ($tpaRows as $tpa) { + + // 0️⃣ emp_code must match + if (($db['emp_code'] ?? '') !== ($tpa['emp_code'] ?? '')) { + continue; + } + + $relationMatch = strtolower($db['relation'] ?? '') === strtolower($tpa['relation'] ?? ''); + $genderMatch = strtoupper($db['gender'] ?? '') === strtoupper($tpa['gender'] ?? ''); + $dobMatch = ($db['dob'] ?? '') === ($tpa['dob'] ?? ''); + + $nameMatch = $normalizeName($db['name'] ?? '') === + $normalizeName($tpa['name'] ?? ''); + + // ✅ FULL MATCH + if ($nameMatch && $relationMatch && $genderMatch && $dobMatch) { + return [ + 'match' => 'full_match', + 'record'=> $tpa + ]; + } + + // ⚠️ PARTIAL MATCH + if ($relationMatch || $genderMatch || $dobMatch) { + $partialMatches[] = [ + 'record' => $tpa, + 'matched_on' => [ + 'relation' => $relationMatch, + 'gender' => $genderMatch, + 'dob' => $dobMatch + ] + ]; + } + } + + // If no full match but partial exists + if (!empty($partialMatches)) { + return [ + 'match' => 'partial_match', + 'candidates' => $partialMatches + ]; + } + + // Nothing matched + return [ + 'match' => 'no_match' + ]; + } + + + function reconcileDbWithTpa(array $db, array $tpaRows): array + { + // Name normalization + $normalizeName = function ($name) { + return strtolower( + preg_replace('/[.\s_]+/', '', trim($name)) + ); + }; + + foreach ($tpaRows as $tpa) { + + // 1️⃣ emp_code + relation must match + if ( + // ($db['emp_code'] ?? '') !== ($tpa['emp_code'] ?? '') || + strtolower($db['relationship']) !== strtolower($tpa['relation']) + ) { + continue; + } + + // 2️⃣ Field comparison + $diff = []; + + if ( + ($db['name'] ?? '') !== + ($tpa['name'] ?? '') + ) { + $diff[] = 'name'; + } + + if (($db['dob'] ?? '') !== ($tpa['dob'] ?? '')) { + $diff[] = 'dob'; + } + + if ( + strtoupper($db['gender'] ?? '') !== + strtoupper($tpa['gender'] ?? '') + ) { + $diff[] = 'gender'; + } + + // 3️⃣ Match found + return [ + 'status' => 'matched', + 'tpa_record' => $tpa, + 'not_matching' => $diff // empty = perfect match + ]; + } + + // 4️⃣ No match found + return [ + 'status' => 'no_match' + ]; + } + + + function exportVariationReportExcel( + array $notInTPA, + array $notInNhance, + array $reviewNeeded, + string $filename = 'employee_review.xlsx') + { + + function setCell($sheet, int $col, int $row, $value) + { + $cell = Coordinate::stringFromColumnIndex($col) . $row; + $sheet->setCellValue($cell, $value); + } + + $EXPORT_COLUMNS = [ + + // Sheet 1 — Not in TPA + 'not_in_tpa' => [ + 'emp_code' => 'Employee Code', + 'name' => 'Employee Name', + 'relationship' => 'Relation', + 'dob' => 'Date of Birth', + 'gender' => 'Gender', + 'mobile' => 'Mobile No', + 'email_corporate' => 'Corporate Email', + 'policy_no' => 'Policy No', + 'tpa_name' => 'TPA Name', + 'change_event' => 'Change Event', + ], + + // Sheet 2 — Not in Nhance + 'not_in_nhance' => [ + 'emp_code' => 'Employee Code', + 'name' => 'Employee Name', + 'relation' => 'Relation', + 'dob' => 'Date of Birth', + 'gender' => 'Gender', + 'age' => 'Age', + 'tpa_id' => 'TPA Member ID', + ], + + // Sheet 3 — Review Needed (DB side) + 'review_main' => [ + 'emp_code' => 'Employee Code', + 'name' => 'Employee Name', + 'relationship' => 'Relation', + 'dob' => 'Date of Birth', + 'gender' => 'Gender', + 'policy_no' => 'Policy No', + 'uhid' => 'UHID', + 'change_event' => 'Change event' + ], + + // Sheet 3 — Review Needed (TPA side) + 'review_tpa' => [ + 'emp_code' => 'TPA Employee Code', + 'name' => 'TPA Name', + 'relation' => 'TPA Relation', + 'dob' => 'TPA DOB', + 'gender' => 'TPA Gender', + 'tpa_id' => 'TPA Member ID', + 'age' => 'TPA Age', + ], + ]; + + + $spreadsheet = new Spreadsheet(); + + /* ========================================================= + * SHEET 1 — NOT IN TPA + * ========================================================= */ + $sheet1 = $spreadsheet->getActiveSheet(); + $sheet1->setTitle('Not in TPA'); + + $cols = $EXPORT_COLUMNS['not_in_tpa']; + + $colNo = 1; + foreach ($cols as $label) { + setCell($sheet1, $colNo++, 1, $label); + } + + $rowNo = 2; + foreach ($notInTPA as $row) { + $colNo = 1; + foreach ($cols as $key => $label) { + setCell($sheet1, $colNo++, $rowNo, $row[$key] ?? ''); + } + $rowNo++; + } + + foreach (range(1, count($cols)) as $c) { + $sheet1->getColumnDimension(Coordinate::stringFromColumnIndex($c))->setAutoSize(true); + } + + /* ========================================================= + * SHEET 2 — NOT IN NHANCE + * ========================================================= */ + $sheet2 = $spreadsheet->createSheet(); + $sheet2->setTitle('Not in Nhance'); + + $cols = $EXPORT_COLUMNS['not_in_nhance']; + + $colNo = 1; + foreach ($cols as $label) { + setCell($sheet2, $colNo++, 1, $label); + } + + $rowNo = 2; + foreach ($notInNhance as $row) { + $colNo = 1; + foreach ($cols as $key => $label) { + setCell($sheet2, $colNo++, $rowNo, $row[$key] ?? ''); + } + $rowNo++; + } + + foreach (range(1, count($cols)) as $c) { + $sheet2->getColumnDimension(Coordinate::stringFromColumnIndex($c))->setAutoSize(true); + } + + /* ========================================================= + * SHEET 3 — REVIEW NEEDED + * ========================================================= */ + $sheet3 = $spreadsheet->createSheet(); + $sheet3->setTitle('Review Needed'); + + $mainCols = $EXPORT_COLUMNS['review_main']; + $tpaCols = $EXPORT_COLUMNS['review_tpa']; + + // headers + $colNo = 1; + foreach ($mainCols as $label) { + setCell($sheet3, $colNo++, 1, $label); + } + foreach ($tpaCols as $label) { + setCell($sheet3, $colNo++, 1, $label); + } + + // rows + $rowNo = 2; + foreach ($reviewNeeded as $row) { + + // main (DB) + $colNo = 1; + foreach ($mainCols as $key => $label) { + setCell($sheet3, $colNo++, $rowNo, $row[$key] ?? ''); + } + + $tpaData = []; + $notMatching = []; + + if (($row['match']['status'] ?? '') === 'matched') { + $tpaData = $row['match']['tpa_record'] ?? []; + $notMatching = $row['match']['not_matching'] ?? []; + } + + // TPA + foreach ($tpaCols as $key => $label) { + setCell($sheet3, $colNo++, $rowNo, $tpaData[$key] ?? ''); + } + + // highlight mismatches + foreach ($notMatching as $field) { + + if (isset($mainCols[$field])) { + $idx = array_keys($mainCols); + $pos = array_search($field, $idx); + $cell = Coordinate::stringFromColumnIndex($pos + 1) . $rowNo; + $sheet3->getStyle($cell)->getFill() + ->setFillType(Fill::FILL_SOLID) + ->getStartColor()->setARGB('FFFFFF00'); + } + + if (isset($tpaCols[$field])) { + $idx = array_keys($tpaCols); + $pos = array_search($field, $idx); + $cell = Coordinate::stringFromColumnIndex(count($mainCols) + $pos + 1) . $rowNo; + $sheet3->getStyle($cell)->getFill() + ->setFillType(Fill::FILL_SOLID) + ->getStartColor()->setARGB('FFFFFF00'); + } + } + + $rowNo++; + } + + foreach (range(1, count($mainCols) + count($tpaCols)) as $c) { + $sheet3->getColumnDimension(Coordinate::stringFromColumnIndex($c))->setAutoSize(true); + } + + /* ========================================================= + * OUTPUT + * ========================================================= */ + $writer = new Xlsx($spreadsheet); + + if (ob_get_length()) ob_end_clean(); + + header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); + header('Content-Disposition: attachment; filename="' . $filename . '"'); + header('Cache-Control: max-age=0'); + + $writer->save('php://output'); + exit; + } + + public function bulkGenerateEcardAndStoreinS3(array $params = []) + { + /** + * --------------------------- + * 1. Detect mode + collect inputs + * --------------------------- + */ + + $client_policy_id = $params['client_policy_id'] ?? null; + $emp_code = $params['emp_code'] ?? null; + $emp_pk = $params['emp_pk'] ?? null; + $batch_size = $params['batch_size'] ?? null; + $batch_no = $params['batch_no'] ?? null; + $execution_mode = $params['execution_mode'] ?? 'sequential';//parallel + $total_batches = $params['total_batches'] ?? 0;//parallel + + if (is_cli()) { + $mode = 'CLI'; + + + } elseif (empty($params) && $this->request->getMethod() === 'get') { + $mode = 'WEB'; + + $client_policy_id = $this->request->getGet('client_policy_id'); + $emp_code = $this->request->getGet('emp_code'); + $emp_pk = $this->request->getGet('emp_pk'); + $execution_mode = $this->request->getGet('execution_mode') ?? 'sequential'; + $batch_size = (int) ($this->request->getGet('batch_size') ?? 100); + if($client_policy_id == null || empty($client_policy_id) || $client_policy_id == '') + { + return $this->respond(['status' => false, 'code' => 200, 'message' => 'client_policy_id is necessary'], 200); + } + /** + * --------------------------- + * 2. Calculate total records + * --------------------------- + */ + $total = $this->employeePolicyModel + ->join('employees', 'employees.id = employee_polices.employee_id') + ->where('employees.emp_status', 'active') + ->where('employees.is_active', '1') + ->where("employee_polices.tpa_id IS NOT NULL AND employee_polices.tpa_id <> ''") + ->where('employee_polices.status', 'active') + ->where('employee_polices.is_active', '1') + ->where('employee_polices.client_policy_id', $client_policy_id) + ->countAllResults(); + + $total_batches = (int) ceil($total / $batch_size); + // echo $total_batches;die(); + + + + /** + * --------------------------- + * 3. Push JOB per batch + * --------------------------- + */ + if ($execution_mode === 'parallel') { + for ($batch_no = 1; $batch_no <= $total_batches; $batch_no++) { + Jobs::addJob([ + 'job_name' => 'bulkGenerateEcardAndStoreinS3', + 'payload' => [ + 'client_policy_id' => $client_policy_id, + 'emp_code' => $emp_code, + 'emp_pk' => $emp_pk, + 'batch_size' => $batch_size, + 'batch_no' => $batch_no, + 'total_batches' => $total_batches, + 'execution_mode' => 'parallel', + ], + ]); + } + } + + if ($execution_mode === 'sequential') { + Jobs::addJob([ + 'job_name' => 'bulkGenerateEcardAndStoreinS3', + 'payload' => [ + 'client_policy_id' => $client_policy_id, + 'batch_size' => $batch_size, + 'batch_no' => $batch_no ?? 1, + 'total_batches' => $total_batches, + 'execution_mode' => 'sequential', + ], + ]); + } + + return $this->respond(['status' => true, 'code' => 200, 'message' => 'E-card generation started', + 'total' => $total, + 'batches' => $total_batches,], 200); + // return [ + // 'status' => true, + // 'message' => 'E-card generation started', + // 'total' => $total, + // 'batches' => $total_batches, + // ]; + } + //else { + // return true; + // } + + /** + * --------------------------- + * 4. Build query (CLI execution) + * --------------------------- + */ + $builder = $this->employeePolicyModel + ->select(' + employee_polices.client_policy_id, + employees.emp_code, + tpa.short_name, + employees.client_id, + employee_polices.rand_string, + employees.id as emp_id + ') + ->join('client_policy', 'client_policy.id = employee_polices.client_policy_id') + ->join('employees', 'employees.id = employee_polices.employee_id') + ->join('tpa', 'tpa.id = client_policy.tpa_id') + ->where('employees.emp_status', 'active') + ->where('employees.is_active', '1') + ->where("employee_polices.tpa_id IS NOT NULL AND employee_polices.tpa_id <> ''") + ->where('employee_polices.status', 'active') + ->where('employee_polices.is_active', '1') + ->where('employee_polices.client_policy_id', $client_policy_id); + + if (!empty($emp_code)) { + $builder->where('employees.emp_code', $emp_code); + } + + if (!empty($emp_pk)) { + $builder->where('employees.id', $emp_pk); + } + + /** + * --------------------------- + * 5. Apply batching (only if provided) + * --------------------------- + */ + if (!empty($batch_size) && !empty($batch_no)) { + $offset = ($batch_no - 1) * $batch_size; + $builder->limit($batch_size, $offset); + } + + $res = $builder->findAll(); + + /** + * --------------------------- + * 6. Process batch + * --------------------------- + */ + foreach ($res as $row) { + $ecard_gen_res = $this->generateIDCardForEmployee( + $row['rand_string'], + 0, + 2 // skip S3 check, force regenerate + ); + + // print_rr([ + // 'batch' => $batch_no, + // 'emp' => $row['emp_code'], + // 'res' => $ecard_gen_res, + // ]); + + // echo date('Y-m-d H:i:s') . PHP_EOL; + } + + if ($execution_mode === 'sequential' && $batch_no < $total_batches) { + Jobs::addJob([ + 'job_name' => 'bulkGenerateEcardAndStoreinS3', + 'payload' => [ + 'client_policy_id' => $client_policy_id, + 'batch_size' => $batch_size, + 'batch_no' => ($batch_no + 1), + 'total_batches' => $total_batches, + 'execution_mode' => 'sequential', + ], + ]); + } + + // echo "BATCH {$batch_no} COMPLETED @ " . date('Y-m-d H:i:s') . PHP_EOL; + return array($batch_no); + } + + } diff --git a/app/Controllers/EmployeeMultiEventServiceController.php b/app/Controllers/EmployeeMultiEventServiceController.php index 782a189b..3c8846e9 100644 --- a/app/Controllers/EmployeeMultiEventServiceController.php +++ b/app/Controllers/EmployeeMultiEventServiceController.php @@ -1029,7 +1029,7 @@ class EmployeeMultiEventServiceController extends BaseController //check physical file if (!file_exists($file_name_with_path)) { //file not found update status and reason - $message = "Physcial file not found"; + $message = "Physcial file not found - " . $file_name_with_path; // echo $message; $this->myLogger->logme('error', ($message . ' for file id ' . $file_id)); $this->fileModel->where('id', $file_id)->set(['status' => 'failed', 'reason' => json_encode(['error_summary' => array_count_values([5]), 'error_data' => $message])])->update(); @@ -1402,7 +1402,7 @@ class EmployeeMultiEventServiceController extends BaseController //check physical file if (!file_exists($file_name_with_path)) { //file not found update status and reason - $message = "Physcial file not found"; + $message = "Physcial file not found - " . $file_name_with_path; $this->myLogger->logme('error', ($message . ' for file id ' . $file_id)); $this->fileModel->where('id', $file_id)->set(['status' => 'failed', 'reason' => json_encode(['error_summary' => array_count_values([5]), 'error_data' => $message])])->update(); return array('error_summary' => [5], 'error_data' => $message); diff --git a/app/Controllers/JobWorker.php b/app/Controllers/JobWorker.php index c32da5e6..4a52fc54 100755 --- a/app/Controllers/JobWorker.php +++ b/app/Controllers/JobWorker.php @@ -194,6 +194,10 @@ class JobWorker extends AdminController 'type' => 'CC', // Handler Category 'handler' => 'App\Controllers\MediAssistApiController', ], + 'bulkGenerateEcardAndStoreinS3' => [ + 'type' => 'CC', // Handler Category + 'handler' => 'App\Controllers\EmployeeController', + ] ]; @@ -253,6 +257,8 @@ class JobWorker extends AdminController // print_r($jobdata); // echo 'listen'; // die(); + // $jobdata = ['id' => 11954,'uuid' => '001700c2-8127-4d02-80b3-ea26e7603ccf']; + // dd($job); $query = " SELECT id, name, payload, uuid FROM jobs diff --git a/app/Controllers/MediAssistApiController.php b/app/Controllers/MediAssistApiController.php index d2b40c67..df595bb5 100644 --- a/app/Controllers/MediAssistApiController.php +++ b/app/Controllers/MediAssistApiController.php @@ -6,6 +6,7 @@ use App\Controllers\BaseController; use App\Models\BatchFileModel; use App\Models\EmployeePolicyModel; use App\Models\TpaApiDataModel; +use App\Models\ClientPolicyModel; use CodeIgniter\HTTP\ResponseInterface; use CodeIgniter\HTTP\IncomingRequest; use CodeIgniter\HTTP\RequestInterface; @@ -25,6 +26,7 @@ class MediAssistApiController extends BaseController } + public function SubmitClaim ($claimId = null) { @@ -353,6 +355,7 @@ class MediAssistApiController extends BaseController // now update DB + $batch_file_success = 'success'; $updated = 0; $employee_policy_ids = []; foreach ($employeePolicyData as $policy_data) { @@ -403,6 +406,7 @@ class MediAssistApiController extends BaseController 'gender' => $policy_data['gender'] ?? null, 'dob' => $policy_data['dob'] ?? null, ]; + $batch_file_success = 'partially success'; log_message( 'error', @@ -423,7 +427,8 @@ class MediAssistApiController extends BaseController // update file table status after the tpa id successfully updated if (isset($requestData['file_id']) && !empty($requestData['file_id'])) { $file_model = new BatchFileModel(); - $file_model->where('id', $requestData['file_id'])->set('status', 'success')->update(); + + $file_model->where('id', $requestData['file_id'])->set('status', $batch_file_success)->update(); log_message('error', "Files table status updated for the file id : {$requestData['file_id']}"); } else { log_message('error', "Failed to update file table status."); @@ -540,21 +545,23 @@ class MediAssistApiController extends BaseController } - // dd($body); + // $body = [ // "policyNo" => "97000063250400000031", - // "startDate" => "31/08/2025", - // "endDate" => "01/09/2025", - // "employeeCode" => "CITPL120193", + // "startDate" => "01/11/2025", + // "endDate" => "05/11/2025", + // "employeeCode" => "", // "memberID" => "", // "claimNo" => "", - // "claimRefNo" => "HOSP4078102577_16092025111030" + // "claimRefNo" => "" // ]; // CALL API $response = call_third_party_api($url, $method, $headers, $body); + + if ($response['status'] != true || empty($response['data']['claimsData'][0])) { log_message('error', 'CLAIM STATUS FAILED | for ticket ID: ' . $claimId.' | response: '.json_encode($response)); @@ -613,9 +620,9 @@ class MediAssistApiController extends BaseController // Maping tpa claim status with local claim Status if (isset($validStatuses[$currentStatus])) { - $updateArray = ['claim_status_id' => $validStatuses[$currentStatus] , 'tpa_claim_status' => $currentStatus , 'tpa_claim_id' => $tpa_claim_no , 'updated_at' => date('Y-m-d H:i:s')]; + $updateArray = ['claim_status_id' => $validStatuses[$currentStatus] , 'tpa_claim_status' => $currentStatus , 'tpa_claim_id' => $tpa_claim_no, 'claim_number' => $tpa_claim_no, 'updated_at' => date('Y-m-d H:i:s')]; }else{ - $updateArray = ['tpa_claim_status' => $currentStatus , 'tpa_claim_id' => $tpa_claim_no , 'updated_at' => date('Y-m-d H:i:s')]; + $updateArray = ['tpa_claim_status' => $currentStatus , 'tpa_claim_id' => $tpa_claim_no, 'claim_number' => $tpa_claim_no , 'updated_at' => date('Y-m-d H:i:s')]; } // UPDATE ticket_master @@ -794,7 +801,6 @@ class MediAssistApiController extends BaseController // unlink($file_array['json_file_path']); // delete temp json file } - public function ClaimStatusUpdate() { helper('api'); @@ -925,9 +931,9 @@ class MediAssistApiController extends BaseController // Maping tpa claim status with local claim Status if (isset($validStatuses[$currentStatus])) { - $updateArray = ['claim_status_id' => $validStatuses[$currentStatus] , 'tpa_claim_status' => $currentStatus , 'tpa_claim_id' => $tpa_claim_no , 'updated_at' => date('Y-m-d H:i:s')]; + $updateArray = ['claim_status_id' => $validStatuses[$currentStatus] , 'tpa_claim_status' => $currentStatus , 'tpa_claim_id' => $tpa_claim_no , 'claim_number' => $tpa_claim_no , 'updated_at' => date('Y-m-d H:i:s')]; }else{ - $updateArray = ['tpa_claim_status' => $currentStatus , 'tpa_claim_id' => $tpa_claim_no , 'updated_at' => date('Y-m-d H:i:s')]; + $updateArray = ['tpa_claim_status' => $currentStatus , 'tpa_claim_id' => $tpa_claim_no , 'claim_number' => $tpa_claim_no, 'updated_at' => date('Y-m-d H:i:s')]; } // UPDATE ticket_master @@ -949,6 +955,328 @@ class MediAssistApiController extends BaseController ]); } + public function syncTpaClaimToNhance() + { + helper(['api', 'date']); + + $url = getenv('MEDI_ASSIST_API_BASE_URL_CLAIMSTATUS'); + $method = 'POST'; + + $headers = [ + 'Content-Type: application/json', + 'Username:' . getenv('MEDI_ASSIST_API_USERNAME'), + 'Password:' . getenv('MEDI_ASSIST_API_PASSWORD'), + ]; + + // REQUEST DATES + $reqStartDate = $this->request->getGet('start_date'); + $reqEndDate = $this->request->getGet('end_date'); + + // If start_date OR end_date is missing → last 7 days + if (empty($reqStartDate) || empty($reqEndDate)) { + + $endDateObj = new \DateTime(); // today + $startDateObj = (clone $endDateObj)->modify('-6 days'); + + } else { + + $startDateObj = new \DateTime($reqStartDate); + $endDateObj = new \DateTime($reqEndDate); + } + + // Final usable variables + $reqStartDate = $startDateObj->format('Y-m-d'); + $reqEndDate = $endDateObj->format('Y-m-d'); + + // Final usable variables + $reqStartDate = new \DateTime($reqStartDate); + $reqEndDate = new \DateTime($reqEndDate); + + + + // FETCH POLICY DATA + $policies = $this->db->table('client_policy cp') + ->select(" + cp.policy_no AS policyNo, + cp.policy_start_date AS policyStartDate, + cp.policy_end_date AS policyEndDate + ") + ->where('cp.is_active', 1) + ->where('cp.policy_type_id', 2) + ->where('cp.policy_status', 1) + // ->where('cp.policy_no', '97000063250400000031') + ->where('cp.tpa_id', $this->mediAssistTpaId) + ->get() + ->getResultArray(); + + if (empty($policies)) { + log_message('error', 'No policies found for claim sync'); + return $this->response->setJSON([ + 'status' => false, + 'message' => 'Policies not found' + ]); + } + + + + $finalResult = []; + $errorData = []; + + + // LOOP POLICIES + + foreach ($policies as $policy) { + + $policyStart = new \DateTime($policy['policyStartDate']); + $policyEnd = new \DateTime($policy['policyEndDate']); + + + // ADJUST DATE RANGE (inside policy period) + + $startDate = max($reqStartDate, $policyStart); + $endDate = min($reqEndDate, $policyEnd); + + + if ($startDate > $endDate) { + continue; // No valid range for this policy + } + + + // SPLIT INTO 7-DAY CHUNKS + + $chunkStart = clone $startDate; + + while ($chunkStart <= $endDate) { + + $chunkEnd = clone $chunkStart; + $chunkEnd->modify('+6 days'); + + if ($chunkEnd > $endDate) { + $chunkEnd = clone $endDate; + } + + + // PREPARE BODY + + $body = [ + "policyNo" => $policy['policyNo'], + "startDate" => $chunkStart->format('d/m/Y'), + "endDate" => $chunkEnd->format('d/m/Y'), + "employeeCode" => "", + "memberID" => "", + "claimNo" => "", + "claimRefNo" => "", + ]; + + + // CALL TPA API + + $response = call_third_party_api($url, $method, $headers, $body); + + if (empty($response['status']) || empty($response['data']['claimsData'])) { + + log_message('error','CLAIM STATUS FAILED | ' .'policyNo: ' . $policy['policyNo'] .' | ' . $chunkStart->format('Y-m-d') .' to ' . $chunkEnd->format('Y-m-d') .' | response: ' . json_encode($response) ); + + $errorData[] = [ + 'policy_no' => $policy['policyNo'], + 'start' => $chunkStart->format('Y-m-d'), + 'end' => $chunkEnd->format('Y-m-d'), + ]; + + } else { + + $finalResult = array_merge($finalResult,$response['data']['claimsData']); + } + + // Move to next chunk + $chunkStart->modify('+7 days'); + } + } + + + // 5️⃣ FINAL RESPONSE + foreach ($finalResult as $key => $value) { + + $relationship = strtolower(trim($value['relation'] ?? '')); + + if ($relationship === 'employee') { + $relationship = 'self'; + } + + $ticket = $this->db->table('ticket_master tm')->select("tm.id") + ->where('tm.policy_no', $value['policY_NUMBER']) + ->where('tm.emp_code', $value['employeE_NO']) + ->where('tm.claim_number', $value['tpA_CLAIM_NO']) + ->get() + ->getRowArray(); + + if(!$ticket) + { + + // VALID STATUS LIST + $validStatuses = [ + + "Claim Received" => 1, + "In Progress" => 5, + "Processed" => 11, + "Claim Paid" => 11, + "Denied" => 13, + "Cancelled" => 13, + + "Information Awaited" => 4, + "Confirmation Awaited" => 4, + "Information Awaited Reminder" => 4, + "Information Awaited Final Reminder" => 4, + "Insurer Concurrence Awaited" => 6, + "Closed" => 12, + + "Physical Documents Awaited" => 9, + "Processed - Payment Initiated" => 10, + "Processed - Transaction Failed" => 10, + "Processed - Account Details Updated" => 10, + "Processed - Debit Note Raised With Insurer for Payment"=> 10, + "Processed - Payment Initiated by Insurer" => 10, + "Payment - Refunded to Insurer" => 14, + "Processed - Processing Payment" => 10, + "Processed - Physical Documents Awaited" => 9, + + // Extra Mappings (based on your DB list) + "NON ID" => 1, + "ID NOT GENERATED" => 2, + "CDA" => 3, + "REJECTED" => 8, + "APPROVED" => 9, + "PAYMENT INITIATED" => 10, + "SETTLED" => 11, + "RETURNED" => 14, + "UNDER PROCESS - TPA" => 61, + "DENIAL REVIEW AWAITED" => 66, + ]; + + $currentStatus = trim($value['claim_Current_Status'] ?? ''); + + $claimStatusId = $validStatuses[$currentStatus] ?? null; + + if (!$claimStatusId) { + log_message('error', 'Unknown claim status: '.$currentStatus); + continue; + } + + $clientpolicy = $this->db->table('client_policy cp') + ->select(" + cp.id as client_policy_id, + cp.client_id , + cp.insurer_id , + cp.tpa_id , + client_rm.id as acm_id + ") + ->join('client_rm', 'client_rm.client_id = cp.client_id AND client_rm.level = 3', 'left') + ->where('cp.policy_no', $value['policY_NUMBER']) + ->get() + ->getRowArray(); + + $employee = $this->db->table('employees e') + ->select(" + e.id as emp_id, + e.emp_code , + e2.id as insured_emp_id, + ") + ->join( + 'employees e2', + "e2.emp_code = e.emp_code AND e2.relationship = ".$this->db->escape($relationship), + 'left' + ) + ->where('e.emp_code', $value['employeE_NO']) + ->where('e.relationship', 'self') + ->get() + ->getRowArray(); + + + + $claimData = [ + // Core + 'ticket_type_id' => 1, + 'claim_status_id' => $claimStatusId, + 'policy_no' => $value['policY_NUMBER'] ?? null, + 'claim_number' => $value['tpA_CLAIM_NO'] ?? null, + 'tpa_claim_id' => $value['tpA_CLAIM_NO'] ?? null, + + // local promary id + 'tpa_id' => $clientpolicy['tpa_id'] ?? null, + 'insurer_id' => $clientpolicy['insurer_id'] ?? null, + 'client_policy_id' => $clientpolicy['client_policy_id'] ?? null, + 'client_id' => $clientpolicy['client_id'] ?? null, + 'acm_id' => $clientpolicy['acm_id'] ?? null, + + // Employee / Insured + 'emp_id' => $employee['emp_id'] ?? null, + 'insured_emp_id' => $employee['insured_emp_id'] ?? null, + 'emp_code' => $value['employeE_NO'] ?? null, + 'emp_name' => $value['employeE_NAME'] ?? null, + 'insured_name' => $value['beneficiarY_NAME'] ?? null, + 'relationship' => $relationship, + 'emp_mobile' => $value['mobile'] ?? null, + 'emp_mail' => $value['email'] ?? null, + + // Claim info + 'claim_type' => 1, + 'mode_of_intimation' => 5, + 'claim_amount' => $value['estimateD_CLAIM_AMOUNT'] + ?? $value['finaL_BILL_AMOUNT'] + ?? null, + 'approved_amount' => $value['claiM_APPROVED_AMOUNT'] ?? null, + + // Dates + 'dob' => $this->mediDate($value['datE_OF_BIRTH'] ?? null), + 'doa' => $this->mediDate($value['datE_OF_ADMISSION'] ?? null), + 'dod' => $this->mediDate($value['datE_OF_DISCHARGE'] ?? null), + 'raised_date' => $this->mediDate($value['claiM_REGISTERED_DATE'] ?? null), + 'approved_date' => $this->mediDate($value['approved_Date'] ?? null), + 'settled_date' => $this->mediDate($value['paiD_DATE'] ?? null), + + // Hospital + 'hospital_name' => $value['hospitaL_NAME'] ?? null, + 'hospital_address' => $value['hospitaL_ADDRESS'] ?? null, + 'hospital_state' => $value['hospitaL_STATE'] ?? null, + 'hospital_city' => $value['hospitaL_CITY'] ?? null, + 'hospital_pin_code'=> $value['hosP_PINCODE'] ?? null, + + // Payment + 'utr_details' => $value['banK_CHEQUE_NO'] ?? null, + 'settle_letter' => $value['settlement_LetterLink'] ?? null, + ]; + + $this->db->table('ticket_master')->insert($claimData); + + log_message( + 'info', + 'New claim created | Policy: '.$claimData['policy_no']. + ' | Claim: '.$claimData['claim_number'] + ); + + } + + } + + + return $this->response->setJSON([ + 'status' => true, + 'message' => 'TPA claim status sync completed', + 'total_records' => count($finalResult), + 'result' => $finalResult, + 'errors' => $errorData + ]); + } + + + public function mediDate($date) + { + if (empty($date)) return null; + $dt = \DateTime::createFromFormat('d/m/Y H:i:s', $date); + return $dt ? $dt->format('Y-m-d') : null; + } + + diff --git a/app/Controllers/PolicyTransactionController.php b/app/Controllers/PolicyTransactionController.php index 385a4bff..f106f274 100644 --- a/app/Controllers/PolicyTransactionController.php +++ b/app/Controllers/PolicyTransactionController.php @@ -732,6 +732,11 @@ // dd($data); + //Fetch POS + $data['pos_data'] = db_connect()->table('partner_pos') + ->where('is_active', 1) + ->get() + ->getResultArray(); // Load view $this->loadLayout('policy_transaction_inception_list', $data); @@ -985,11 +990,11 @@ $data['co_share'] = 1; } - if (!isset($data['bro_payable_by'])) { - $data['bro_payable_by'] = 0; - } elseif ($data['bro_payable_by']) { - $data['bro_payable_by'] = 1; - } + // if (!isset($data['bro_payable_by'])) { + // $data['bro_payable_by'] = 0; + // } elseif ($data['bro_payable_by']) { + // $data['bro_payable_by'] = 1; + // } if (!isset($data['same_as_proposer'])) { $data['same_as_proposer'] = 0; @@ -2382,6 +2387,7 @@ 'service_person_branch_id' => $issue_type['service_person_branch_id'] ?? null, 'agent_id' => $issue_type['agent_id'] ?? null, 'agent_code' => $issue_type['agent_code'] ?? null, + 'pos_id' => $issue_type['pos_id'] ?? null, ]; $data['client_branch_id'] = $client_branch_id; diff --git a/app/Helpers/utility_helper.php b/app/Helpers/utility_helper.php index 9095986c..0a6d9e51 100755 --- a/app/Helpers/utility_helper.php +++ b/app/Helpers/utility_helper.php @@ -238,7 +238,7 @@ if (!function_exists('generate_download_link')) { } if (!function_exists('generate_random_alphanumeric')) { - function generate_random_alphanumeric($length = 6) { + function generate_random_alphanumeric($length = 12) { $random_string = ''; for ($i = 0; $i < $length; $i++) { $random_ascii = rand(0, 61); diff --git a/app/Libraries/S3Service.php b/app/Libraries/S3Service.php new file mode 100644 index 00000000..872b13ab --- /dev/null +++ b/app/Libraries/S3Service.php @@ -0,0 +1,268 @@ +bucket = getenv('AWS_BUCKET'); + $this->region = getenv('AWS_DEFAULT_REGION'); + + $this->s3Client = new S3Client([ + 'version' => 'latest', + 'region' => $this->region, + 'credentials' => [ + 'key' => getenv('AWS_ACCESS_KEY_ID'), + 'secret' => getenv('AWS_SECRET_ACCESS_KEY'), + ], + ]); + + $this->baseUrl = "https://{$this->bucket}.s3.{$this->region}.amazonaws.com/"; + // echo $this->baseUrl;die(); + } + + /** + * Upload file to S3 + * + * @param mixed $file File object or file path + * @param string $folder Folder path in S3 bucket (optional) + * @param string $fileName Custom file name (optional) + * @return array ['success' => bool, 'url' => string, 'key' => string, 'message' => string] + */ + public function upload($file, string $folder = '', string $fileName = null): array + { + try { + // Handle CodeIgniter file upload object + if (is_object($file) && method_exists($file, 'isValid')) { + if (!$file->isValid()) { + return [ + 'success' => false, + 'message' => 'Invalid file upload', + 'url' => null, + 'key' => null + ]; + } + $filePath = $file->getTempName(); + $originalName = $fileName ?? $file->getClientName(); + } else { + // Handle file path string + $filePath = $file; + $originalName = $fileName ?? basename($file); + } + + // Generate unique file name + $extension = pathinfo($originalName, PATHINFO_EXTENSION); + // $uniqueName = pathinfo($originalName, PATHINFO_FILENAME) . '_' . time() . '.' . $extension; + $uniqueName = pathinfo($originalName, PATHINFO_FILENAME) . '.' . $extension; + + // Build S3 key (path) + $key = $folder ? rtrim($folder, '/') . '/' . $uniqueName : $uniqueName; + + // Upload to S3 + // NEW - Faster with streaming and proper content type + $finfo = finfo_open(FILEINFO_MIME_TYPE); + $mimeType = finfo_file($finfo, $filePath); + finfo_close($finfo); + + $result = $this->s3Client->putObject([ + 'Bucket' => $this->bucket, + 'Key' => $key, + 'Body' => fopen($filePath, 'rb'), // Stream instead of loading into memory + 'ContentType' => $mimeType, + // 'ACL' => 'public-read', + ]); + + return [ + 'success' => true, + 'url' => $this->baseUrl . $key, + 'key' => $key, + 'message' => 'File uploaded successfully' + ]; + + } catch (AwsException $e) { + log_message('error', 'S3 Upload Error: ' . $e->getMessage()); + return [ + 'success' => false, + 'message' => 'Upload failed: ' . $e->getMessage(), + 'url' => null, + 'key' => null + ]; + } + } + + /** + * Download file from S3 + * + * @param string $key S3 object key (file path in bucket) + * @param string $savePath Local path to save the file (optional) + * @return array ['success' => bool, 'path' => string, 'content' => string, 'message' => string] + */ + public function download(string $key, string $savePath = null): array + { + try { + $result = $this->s3Client->getObject([ + 'Bucket' => $this->bucket, + 'Key' => $key, + ]); + + $content = (string) $result['Body']; + + // If save path is provided, save to local file + if ($savePath) { + $directory = dirname($savePath); + if (!is_dir($directory)) { + mkdir($directory, 0755, true); + } + file_put_contents($savePath, $content); + + return [ + 'success' => true, + 'path' => $savePath, + 'content' => $content, + 'message' => 'File downloaded successfully' + ]; + } + + return [ + 'success' => true, + 'path' => null, + 'content' => $content, + 'message' => 'File content retrieved successfully' + ]; + + } catch (AwsException $e) { + log_message('error', 'S3 Download Error: ' . $e->getMessage()); + return [ + 'success' => false, + 'path' => null, + 'content' => null, + 'message' => 'Download failed: ' . $e->getMessage() + ]; + } + } + + /** + * Get a pre-signed URL for temporary access to a private file + * + * @param string $key S3 object key + * @param int $expiration Expiration time in minutes (default: 60) + * @return array ['success' => bool, 'url' => string, 'message' => string] + */ + public function getPresignedUrl(string $key, int $expiration = 60): array + { + try { + $cmd = $this->s3Client->getCommand('GetObject', [ + 'Bucket' => $this->bucket, + 'Key' => $key + ]); + + $request = $this->s3Client->createPresignedRequest($cmd, "+{$expiration} minutes"); + $presignedUrl = (string) $request->getUri(); + + return [ + 'success' => true, + 'url' => $presignedUrl, + 'message' => 'Pre-signed URL generated successfully' + ]; + + } catch (AwsException $e) { + log_message('error', 'S3 Presigned URL Error: ' . $e->getMessage()); + return [ + 'success' => false, + 'url' => null, + 'message' => 'Failed to generate URL: ' . $e->getMessage() + ]; + } + } + + /** + * Delete file from S3 + * + * @param string $key S3 object key + * @return array ['success' => bool, 'message' => string] + */ + public function delete(string $key): array + { + try { + $this->s3Client->deleteObject([ + 'Bucket' => $this->bucket, + 'Key' => $key, + ]); + + return [ + 'success' => true, + 'message' => 'File deleted successfully' + ]; + + } catch (AwsException $e) { + log_message('error', 'S3 Delete Error: ' . $e->getMessage()); + return [ + 'success' => false, + 'message' => 'Delete failed: ' . $e->getMessage() + ]; + } + } + + /** + * Check if file exists in S3 + * + * @param string $key S3 object key + * @return bool + */ + public function exists(string $key): bool + { + return $this->s3Client->doesObjectExist($this->bucket, $key); + } + + /** + * List files in S3 bucket + * + * @param string $prefix Folder prefix (optional) + * @return array ['success' => bool, 'files' => array, 'message' => string] + */ + public function listFiles(string $prefix = ''): array + { + try { + $result = $this->s3Client->listObjectsV2([ + 'Bucket' => $this->bucket, + 'Prefix' => $prefix, + ]); + + $files = []; + if (isset($result['Contents'])) { + foreach ($result['Contents'] as $object) { + $files[] = [ + 'key' => $object['Key'], + 'size' => $object['Size'], + 'last_modified' => $object['LastModified']->format('Y-m-d H:i:s'), + 'url' => $this->baseUrl . $object['Key'] + ]; + } + } + + return [ + 'success' => true, + 'files' => $files, + 'message' => 'Files retrieved successfully' + ]; + + } catch (AwsException $e) { + log_message('error', 'S3 List Error: ' . $e->getMessage()); + return [ + 'success' => false, + 'files' => [], + 'message' => 'Failed to list files: ' . $e->getMessage() + ]; + } + } +} \ No newline at end of file diff --git a/app/Models/EmployeePolicyModel.php b/app/Models/EmployeePolicyModel.php index 16d4a815..0e86d94a 100755 --- a/app/Models/EmployeePolicyModel.php +++ b/app/Models/EmployeePolicyModel.php @@ -2139,5 +2139,60 @@ class EmployeePolicyModel extends Model return $data; } + public function getTPADataVariationReport($client_id, $client_policy_id, $file_id,$emp_codes = [],$all = false) + { + $result = $this->select([ + 'employee_polices.*', + 'tpam.name as tpa_name', + 'tpam.short_name as tpa_short_name', + 'emp.relationship', + 'emp.relationship_code', + 'emp.change_event', + 'emp.emp_code', + 'emp.name', + 'emp.email_corporate', + 'emp.dob', + 'emp.gender', + 'emp.emp_status', + 'emp.is_active as emp_is_active', + 'emp.mobile as mobile', + 'emp.doj', + 'emp.basic_pay', + 'emp.band as grade', + 'cp.policy_no', + 'cp.policy_type_id', + + ]) + ->join('employees emp', 'employee_polices.employee_id = emp.id') + ->join('client_policy cp', 'employee_polices.client_policy_id = cp.id') + ->join('tpa tpam', 'cp.tpa_id = tpam.id', 'left') //tpam - tpa master + // ->orderBy('emp.emp_code', 'ASC') + // ->orderBy('employee_polices.employee_id', 'ASC'); + ->where('employee_polices.status', 'active') + ->where('employee_polices.is_active', 1) + ->where('emp.is_active', 1) + ->where('employee_polices.status !=', 'inactive') + ->where('cp.id', $client_policy_id) + ->where('employee_polices.client_policy_id', $client_policy_id) + ->where('emp.client_id', $client_id); + + if(count($emp_codes) == 0 && $all == false) + { + $result->where('employee_polices.tpa_id IS NULL'); + } + else if(count($emp_codes) > 0 && $all == false) + { + $result->whereNotIn('emp.emp_code',$emp_codes); + } + else if(count($emp_codes) == 0 && $all == true) + { + $result->groupBy('emp.emp_code'); + } + + return $result->findAll(); + // print_r($result); + // return $result; + } + } \ No newline at end of file diff --git a/app/Models/PolicyTransactionModel.php b/app/Models/PolicyTransactionModel.php index 05a734c1..92ab47d8 100644 --- a/app/Models/PolicyTransactionModel.php +++ b/app/Models/PolicyTransactionModel.php @@ -88,6 +88,7 @@ 'salse_person_manager_id', 'service_person_manager_id', 'service_person_branch_id', + 'pos_id', ]; @@ -616,9 +617,9 @@ policy_transaction.*, DATE_FORMAT(policy_transaction.policy_issue_date, '%d %b %Y') AS policy_issue_date, DATE_FORMAT( - IF(policy_transaction.month IS NULL, + IF(pt_co_share_details.pt_policy_issue_date IS NULL, policy_transaction.policy_issue_date, - policy_transaction.month), + pt_co_share_details.pt_policy_issue_date), '%b %Y') AS policy_issue_month, CASE WHEN clients.client_type = 1 THEN 'Group' diff --git a/app/Views/batch_list.php b/app/Views/batch_list.php index 123950fb..aa2aa0da 100755 --- a/app/Views/batch_list.php +++ b/app/Views/batch_list.php @@ -176,6 +176,12 @@ + + + + + + diff --git a/app/Views/employee_list.php b/app/Views/employee_list.php index 45ad39a0..6f6d74dc 100755 --- a/app/Views/employee_list.php +++ b/app/Views/employee_list.php @@ -355,11 +355,54 @@ // } }); + + var client_list = ''; // local variable for storing the client branch list + var branch_list = ''; // local variable for storing the client branch list + var policy_list = ''; // local variable for storing the client policy list + var branch_policy = ''; + var policy_list_by_client = ''; + + $(document).ready(function() { + getClientAndBranchAndPolicy(); + }) + + //featch client and branch and policy + function getClientAndBranchAndPolicy() { + $.ajax({ + url: '', + type: "GET", + dataType: 'json', + success: function(res) { + + console.log('getClientAndBranchAndPolicy', res); + if (res.status == true) { + + client_list = res.client_data; + branch_list = res.branch_data; + policy_list = res.policy_data; + policy_list_by_client = res.policyListByClient; + + appendClients(client_list); + // appendBranch(branch_list); + // appendPolicies(policy_list); + + } else { + console.log('No data found'); + } + + }, + error: function(xhr, status, error) { + console.error(xhr.responseText); + console.error(status, error); + } + }); + } + // Declare a global variable to store API response data - var clientPolicies = []; - var clientPoliciesWithBranch = { - policies: [] - }; + // var clientPolicies = []; + // var clientPoliciesWithBranch = { + // policies: [] + // }; var client_id = ''; var client_branch_id = ''; @@ -376,91 +419,91 @@ }); - $(document).ready(function() { - console.log("document loaded"); - //fetchClientPolicies(); - }); + // $(document).ready(function() { + // console.log("document loaded"); + // //fetchClientPolicies(); + // }); - $(window).on("load", function() { - console.log("window loaded"); - fetchClientPolicies(); - }); + // $(window).on("load", function() { + // console.log("window loaded"); + // fetchClientPolicies(); + // }); - function fetchClientPolicies() { - $('#loader').show(); - var apiURL = '' + 'util/clients-with-policies'; - console.log('fetchClientPolicies'); - // console.log(apiURL); - $.ajax({ - url: apiURL, - method: 'GET', - headers: { - "Content-Type": "application/json", - "X-Requested-With": "XMLHttpRequest" - }, - success: function(response) { - // console.log(response.code); - // console.log(response.dataStatus); - // console.log(response.data); - if (response.code === 200 && response.dataStatus === true && response.data !== "") { - try { - clientPolicies = (response.data); + // function fetchClientPolicies() { + // $('#loader').show(); + // var apiURL = '' + 'util/clients-with-policies'; + // console.log('fetchClientPolicies'); + // // console.log(apiURL); + // $.ajax({ + // url: apiURL, + // method: 'GET', + // headers: { + // "Content-Type": "application/json", + // "X-Requested-With": "XMLHttpRequest" + // }, + // success: function(response) { + // // console.log(response.code); + // // console.log(response.dataStatus); + // // console.log(response.data); + // if (response.code === 200 && response.dataStatus === true && response.data !== "") { + // try { + // clientPolicies = (response.data); - response.data.forEach(policy => { - // console.log('policies', policy.policies); - policy.policies.forEach(p => { - clientPoliciesWithBranch.policies.push(p); - }); - }); + // response.data.forEach(policy => { + // // console.log('policies', policy.policies); + // policy.policies.forEach(p => { + // clientPoliciesWithBranch.policies.push(p); + // }); + // }); - // console.log('1',clientPolicies); - appendClients(clientPolicies); + // // console.log('1',clientPolicies); + // appendClients(clientPolicies); - //this function for reselect the policy - setTimeout(function() { - if (client_id != 0) { - var foundPolicies = clientPolicies.find(function(item) { - // console.log(typeof item.id) - return item.id == client_id; - }); - appendBranch(foundPolicies.branchs); - } - }, 500); + // //this function for reselect the policy + // setTimeout(function() { + // if (client_id != 0) { + // var foundPolicies = clientPolicies.find(function(item) { + // // console.log(typeof item.id) + // return item.id == client_id; + // }); + // appendBranch(foundPolicies.branchs); + // } + // }, 500); - setTimeout(function() { - if (client_branch_id != 0) { + // setTimeout(function() { + // if (client_branch_id != 0) { - var foundPolicies = clientPoliciesWithBranch.policies.filter(function(item) { - // console.log('item', item); - return item.branch_id === client_branch_id; - }); + // var foundPolicies = clientPoliciesWithBranch.policies.filter(function(item) { + // // console.log('item', item); + // return item.branch_id === client_branch_id; + // }); - if (foundPolicies) { - // console.log('foundPolicies', foundPolicies); - appendPolicies(foundPolicies); - } else { - console.log('No policies found for the selected client'); - } - } - }, 500); - //end + // if (foundPolicies) { + // // console.log('foundPolicies', foundPolicies); + // appendPolicies(foundPolicies); + // } else { + // console.log('No policies found for the selected client'); + // } + // } + // }, 500); + // //end - } catch (error) { - console.error('Error parsing API response data:', error); - } - } else if (response.code === 404 && response.dataStatus === false) { - console.error('no data found', response); - } else { - console.error('Something went wrong!'); - } - }, - error: function(xhr, status, error) { - console.error('Error fetching data from API:', error); - } - }); + // } catch (error) { + // console.error('Error parsing API response data:', error); + // } + // } else if (response.code === 404 && response.dataStatus === false) { + // console.error('no data found', response); + // } else { + // console.error('Something went wrong!'); + // } + // }, + // error: function(xhr, status, error) { + // console.error('Error fetching data from API:', error); + // } + // }); - $('#loader').hide(); - } + // $('#loader').hide(); + // } function appendClients(data) { var clientID = ; @@ -507,8 +550,9 @@ // console.log(PolicyID) $.each(data, function(index, item) { var option = $('