5436 lines
254 KiB
PHP
5436 lines
254 KiB
PHP
<?php
|
||
|
||
namespace App\Controllers;
|
||
|
||
use App\Controllers\BaseController;
|
||
use App\Controllers\GoogleDriveController;
|
||
|
||
use App\Helpers\DepositHelper;
|
||
use CodeIgniter\API\ResponseTrait;
|
||
|
||
use App\Models\PolicyTransactionModel;
|
||
use App\Models\PolicyTransactionStatusModel;
|
||
use App\Models\ClientModel;
|
||
use App\Models\ClientBranchModel;
|
||
use App\Models\ClientDepositModel;
|
||
use App\Models\ClientPolicyModel;
|
||
use App\Models\PolicyTypeModel;
|
||
use App\Models\InsurerBranchModel;
|
||
use App\Models\InsurerModel;
|
||
use App\Models\KYCEntityTypeModel;
|
||
use App\Models\ClientKYCDocsModel;
|
||
use App\Models\TPABranchModel;
|
||
use App\Models\TPAModel;
|
||
use App\Models\PTFileModel;
|
||
use App\Models\PTCOShareDetailsModel;
|
||
use App\Models\EmployeeModel;
|
||
use App\Models\UserTeamsModel;
|
||
use App\Models\UserModel;
|
||
use App\Models\EmployeePolicyModel;
|
||
use App\Models\InsurerStatements;
|
||
use App\Models\InvPaymentDetailsModel;
|
||
use App\Models\BatchFileModel;
|
||
use App\Models\FileModel;
|
||
use App\Models\COShareStmtDetailsModel;
|
||
use App\Models\BdsPlacementModel;
|
||
use Kint\Kint;
|
||
use App\Helpers\MailHelper;
|
||
use App\Helpers\ExcelSanitizeHelper;
|
||
use App\Models\NhanceBranchModel;
|
||
use App\Models\BDSDumpModel;
|
||
use App\Models\VehicleModel;
|
||
use Exception;
|
||
|
||
class PolicyTransactionController extends BaseController
|
||
{
|
||
use ResponseTrait;
|
||
|
||
protected $myLogger;
|
||
protected $policyTransactionModel;
|
||
protected $policyTransactionStatusModel;
|
||
protected $clientModel;
|
||
protected $clientPolicyModel;
|
||
protected $clientBranchModel;
|
||
protected $clientDepositModel;
|
||
protected $policyTypeModel;
|
||
protected $insurerBranchModel;
|
||
protected $insurerModel;
|
||
protected $kycEntityTypeModel;
|
||
protected $clientKYCDocsModel;
|
||
protected $tpaBranchModel;
|
||
protected $tpaModel;
|
||
protected $PTFileModel;
|
||
protected $PTCOShareDetailsModel;
|
||
protected $employeeModel;
|
||
protected $userTeamsModel;
|
||
protected $userModel;
|
||
protected $employeePolicyModel;
|
||
protected $insurerStatements;
|
||
protected $invoiceStatus;
|
||
protected $invPaymentDetailsModel;
|
||
protected $batchFileModel;
|
||
protected $filesModel;
|
||
protected $coShareStmtDetailsModel;
|
||
protected $BdsPlacementModel;
|
||
protected $nhanceBranchModel;
|
||
protected $bdsDumpModel;
|
||
protected $vehicleModel;
|
||
protected $bds_bulk_upload_excel_file_column;
|
||
|
||
|
||
public function __construct()
|
||
{
|
||
set_session_context('Policy Tranction');
|
||
$this->myLogger = \Config\Services::mylogger();
|
||
|
||
$this->clientModel = new ClientModel();
|
||
$this->clientBranchModel = new ClientBranchModel();
|
||
$this->policyTypeModel = new PolicyTypeModel();
|
||
$this->clientDepositModel = new ClientDepositModel();
|
||
$this->clientPolicyModel = new ClientPolicyModel();
|
||
$this->insurerBranchModel = new InsurerBranchModel();
|
||
$this->insurerModel = new InsurerModel();
|
||
$this->policyTransactionModel = new PolicyTransactionModel();
|
||
$this->policyTransactionStatusModel = new PolicyTransactionStatusModel();
|
||
$this->kycEntityTypeModel = new KYCEntityTypeModel();
|
||
$this->clientKYCDocsModel = new ClientKYCDocsModel();
|
||
$this->tpaBranchModel = new TPABranchModel();
|
||
$this->tpaModel = new TPAModel();
|
||
$this->PTFileModel = new PTFileModel();
|
||
$this->PTCOShareDetailsModel = new PTCOShareDetailsModel();
|
||
$this->employeeModel = new EmployeeModel();
|
||
$this->userTeamsModel = new UserTeamsModel();
|
||
$this->userModel = new UserModel();
|
||
$this->employeePolicyModel = new EmployeePolicyModel();
|
||
$this->insurerStatements = new InsurerStatements();
|
||
$this->invPaymentDetailsModel = new InvPaymentDetailsModel();
|
||
$this->batchFileModel = new BatchFileModel();
|
||
$this->filesModel = new FileModel();
|
||
$this->coShareStmtDetailsModel = new COShareStmtDetailsModel();
|
||
$this->BdsPlacementModel = new BdsPlacementModel();
|
||
$this->nhanceBranchModel = new NhanceBranchModel();
|
||
$this->bdsDumpModel = new BDSDumpModel();
|
||
$this->vehicleModel = new VehicleModel();
|
||
$this->invoiceStatus = [
|
||
'pending' => 'Pending',
|
||
'generated' => 'Generated',
|
||
'sent' => 'Sent',
|
||
'payment_received' => 'Payment<br> Received',
|
||
];
|
||
|
||
$this->bds_bulk_upload_excel_file_column = [
|
||
|
||
'sno' => [
|
||
'col_idx' => 0,
|
||
'col_cell_name' => 'A',
|
||
'col_name' => 'S.No.',
|
||
'is_mandatory' => false,
|
||
'data_type' => '',
|
||
'format' => null,
|
||
'allowed_values' => null,
|
||
'custom' => null,
|
||
'params' => null
|
||
],
|
||
|
||
'nhance_branch' => [
|
||
'col_idx' => 1,
|
||
'col_cell_name' => 'B',
|
||
'col_name' => 'Nhance Branch',
|
||
'is_mandatory' => true,
|
||
'data_type' => '',
|
||
'format' => null,
|
||
'allowed_values' => null,
|
||
'custom' => 'check_nhance_branch',
|
||
'params' => ['row', 'nhance_branch_data']
|
||
],
|
||
|
||
'vehicle_no' => [
|
||
'col_idx' => 2,
|
||
'col_cell_name' => 'C',
|
||
'col_name' => 'Vehicle No',
|
||
'is_mandatory' => true,
|
||
'data_type' => 'vehicle',
|
||
'format' => null,
|
||
'allowed_values' => null,
|
||
'custom' => 'check_rto_data',
|
||
'params' => ['row', 'rto_master']
|
||
],
|
||
|
||
'vehicle_type' => [
|
||
'col_idx' => 3,
|
||
'col_cell_name' => 'D',
|
||
'col_name' => 'Vehicle Type',
|
||
'is_mandatory' => true,
|
||
'data_type' => '',
|
||
'format' => null,
|
||
'allowed_values' => null,
|
||
'custom' => 'check_vehicle_type',
|
||
'params' => ['row', 'vehicle_type']
|
||
],
|
||
|
||
'policy_no' => [
|
||
'col_idx' => 4,
|
||
'col_cell_name' => 'E',
|
||
'col_name' => 'Policy No',
|
||
'is_mandatory' => true,
|
||
'data_type' => '',
|
||
'format' => null,
|
||
'allowed_values' => null,
|
||
'custom' => 'check_policy_no',
|
||
'params' => ['row', 'pt_data']
|
||
],
|
||
|
||
'insured_name' => [
|
||
'col_idx' => 5,
|
||
'col_cell_name' => 'F',
|
||
'col_name' => 'Insured Name',
|
||
'is_mandatory' => true,
|
||
'data_type' => '',
|
||
'format' => null,
|
||
'allowed_values' => null,
|
||
'custom' => null,
|
||
'params' => null
|
||
],
|
||
|
||
'insured_email' => [
|
||
'col_idx' => 6,
|
||
'col_cell_name' => 'G',
|
||
'col_name' => 'Insured Email',
|
||
'is_mandatory' => true,
|
||
'data_type' => 'email',
|
||
'format' => null,
|
||
'allowed_values' => null,
|
||
'custom' => null,
|
||
'params' => null
|
||
],
|
||
|
||
'insurer' => [
|
||
'col_idx' => 7,
|
||
'col_cell_name' => 'H',
|
||
'col_name' => 'Insurer',
|
||
'is_mandatory' => true,
|
||
'data_type' => '',
|
||
'format' => null,
|
||
'allowed_values' => null,
|
||
'custom' => 'check_insurer_exist',
|
||
'params' => ['row', 'insurer_data']
|
||
],
|
||
|
||
'insurer_branch' => [
|
||
'col_idx' => 8,
|
||
'col_cell_name' => 'I',
|
||
'col_name' => 'Insurer Branch',
|
||
'is_mandatory' => true,
|
||
'data_type' => '',
|
||
'format' => null,
|
||
'allowed_values' => null,
|
||
'custom' => 'check_insurer_branch_exist',
|
||
'params' => ['row', 'insurer_branch_data', 'insurers']
|
||
],
|
||
|
||
'policy_issue_date' => [
|
||
'col_idx' => 9,
|
||
'col_cell_name' => 'J',
|
||
'col_name' => 'Policy Issue Date',
|
||
'is_mandatory' => true,
|
||
'data_type' => 'date',
|
||
'format' => 'd/M/Y',
|
||
'allowed_values' => null,
|
||
'custom' => null,
|
||
'params' => null
|
||
],
|
||
|
||
'policy_start_date' => [
|
||
'col_idx' => 10,
|
||
'col_cell_name' => 'K',
|
||
'col_name' => 'Policy Start Date',
|
||
'is_mandatory' => true,
|
||
'data_type' => 'date',
|
||
'format' => 'd/M/Y',
|
||
'allowed_values' => null,
|
||
'custom' => null,
|
||
'params' => null
|
||
],
|
||
|
||
'policy_end_date' => [
|
||
'col_idx' => 11,
|
||
'col_cell_name' => 'L',
|
||
'col_name' => 'Policy End Date',
|
||
'is_mandatory' => true,
|
||
'data_type' => 'date',
|
||
'format' => 'd/M/Y',
|
||
'allowed_values' => null,
|
||
'custom' => null,
|
||
'params' => null
|
||
],
|
||
|
||
'revenue_type' => [
|
||
'col_idx' => 12,
|
||
'col_cell_name' => 'M',
|
||
'col_name' => 'Revenue Type',
|
||
'is_mandatory' => true,
|
||
'data_type' => '',
|
||
'format' => null,
|
||
'allowed_values' => ['NA', 'EA', 'EANR'],
|
||
'custom' => null,
|
||
'params' => null
|
||
],
|
||
|
||
'sales_generated_by' => [
|
||
'col_idx' => 13,
|
||
'col_cell_name' => 'N',
|
||
'col_name' => 'Sales Generated By',
|
||
'is_mandatory' => true,
|
||
'data_type' => '',
|
||
'format' => null,
|
||
'allowed_values' => null,
|
||
'custom' => 'check_user_exist',
|
||
'params' => ['row', 'col_key', 'user_data']
|
||
],
|
||
|
||
'serviced_by' => [
|
||
'col_idx' => 14,
|
||
'col_cell_name' => 'O',
|
||
'col_name' => 'Serviced By',
|
||
'is_mandatory' => true,
|
||
'data_type' => '',
|
||
'format' => null,
|
||
'allowed_values' => null,
|
||
'custom' => 'check_user_exist',
|
||
'params' => ['row', 'col_key', 'user_data']
|
||
],
|
||
|
||
'agent_code' => [
|
||
'col_idx' => 15,
|
||
'col_cell_name' => 'P',
|
||
'col_name' => 'Agent Code',
|
||
'is_mandatory' => true,
|
||
'data_type' => '',
|
||
'format' => null,
|
||
'allowed_values' => null,
|
||
'custom' => 'check_agent_exist',
|
||
'params' => ['row', 'agent_data']
|
||
],
|
||
|
||
'base_premium' => [
|
||
'col_idx' => 16,
|
||
'col_cell_name' => 'Q',
|
||
'col_name' => 'Base Premium',
|
||
'is_mandatory' => false,
|
||
'data_type' => '',
|
||
'format' => null,
|
||
'allowed_values' => null,
|
||
'custom' => null,
|
||
'params' => null
|
||
],
|
||
|
||
'non_commission_premium_amount' => [
|
||
'col_idx' => 17,
|
||
'col_cell_name' => 'R',
|
||
'col_name' => 'Non commission permium Amount',
|
||
'is_mandatory' => false,
|
||
'data_type' => '',
|
||
'format' => null,
|
||
'allowed_values' => null,
|
||
'custom' => null,
|
||
'params' => null
|
||
],
|
||
|
||
'tp_premium' => [
|
||
'col_idx' => 18,
|
||
'col_cell_name' => 'S',
|
||
'col_name' => 'TP Premium',
|
||
'is_mandatory' => false,
|
||
'data_type' => '',
|
||
'format' => null,
|
||
'allowed_values' => null,
|
||
'custom' => null,
|
||
'params' => null
|
||
],
|
||
|
||
'igst' => [
|
||
'col_idx' => 19,
|
||
'col_cell_name' => 'T',
|
||
'col_name' => 'IGST',
|
||
'is_mandatory' => false,
|
||
'data_type' => '',
|
||
'format' => null,
|
||
'allowed_values' => null,
|
||
'custom' => 'check_gst_percentage',
|
||
'params' => ['row']
|
||
],
|
||
|
||
'cgst' => [
|
||
'col_idx' => 20,
|
||
'col_cell_name' => 'U',
|
||
'col_name' => 'CGST',
|
||
'is_mandatory' => false,
|
||
'data_type' => '',
|
||
'format' => null,
|
||
'allowed_values' => null,
|
||
'custom' => 'check_gst_percentage',
|
||
'params' => ['row']
|
||
],
|
||
|
||
'sgst' => [
|
||
'col_idx' => 21,
|
||
'col_cell_name' => 'V',
|
||
'col_name' => 'SGST',
|
||
'is_mandatory' => false,
|
||
'data_type' => '',
|
||
'format' => null,
|
||
'allowed_values' => null,
|
||
'custom' => 'check_gst_percentage',
|
||
'params' => ['row']
|
||
|
||
],
|
||
|
||
'stamp_duty' => [
|
||
'col_idx' => 22,
|
||
'col_cell_name' => 'W',
|
||
'col_name' => 'Stamp Duty',
|
||
'is_mandatory' => false,
|
||
'data_type' => '',
|
||
'format' => null,
|
||
'allowed_values' => null,
|
||
'custom' => null,
|
||
'params' => null
|
||
],
|
||
|
||
// 'total' => [
|
||
// 'col_idx' => 23,
|
||
// 'col_cell_name' => 'X',
|
||
// 'col_name' => 'Total',
|
||
// 'is_mandatory' => false,
|
||
// 'data_type' => '',
|
||
// 'format' => null,
|
||
// 'allowed_values' => null,
|
||
// 'custom' => null,
|
||
// 'params' => null
|
||
// ],
|
||
|
||
'agreed_amount' => [
|
||
'col_idx' => 23,
|
||
'col_cell_name' => 'X',
|
||
'col_name' => 'Agreed Amount',
|
||
'is_mandatory' => false,
|
||
'data_type' => '',
|
||
'format' => null,
|
||
'allowed_values' => null,
|
||
'custom' => null,
|
||
'params' => null
|
||
],
|
||
|
||
'agreed_bp_percentage' => [
|
||
'col_idx' => 24,
|
||
'col_cell_name' => 'Y',
|
||
'col_name' => 'Agreed BP Percentage',
|
||
'is_mandatory' => false,
|
||
'data_type' => '',
|
||
'format' => null,
|
||
'allowed_values' => null,
|
||
'custom' => null,
|
||
'params' => null
|
||
],
|
||
|
||
'agreed_tp_percentage' => [
|
||
'col_idx' => 25,
|
||
'col_cell_name' => 'Z',
|
||
'col_name' => 'Agreed TP Percentage',
|
||
'is_mandatory' => false,
|
||
'data_type' => '',
|
||
'format' => null,
|
||
'allowed_values' => null,
|
||
'custom' => null,
|
||
'params' => null
|
||
],
|
||
|
||
// 'actual_bp_amount' => [
|
||
// 'col_idx' => 27,
|
||
// 'col_cell_name' => 'AB',
|
||
// 'col_name' => 'Actual BP Amount',
|
||
// 'is_mandatory' => false,
|
||
// 'data_type' => '',
|
||
// 'format' => null,
|
||
// 'allowed_values' => null,
|
||
// 'custom' => null,
|
||
// 'params' => null
|
||
// ],
|
||
|
||
// 'actual_tp_amount' => [
|
||
// 'col_idx' => 28,
|
||
// 'col_cell_name' => 'AC',
|
||
// 'col_name' => 'Actual TP Amount',
|
||
// 'is_mandatory' => false,
|
||
// 'data_type' => '',
|
||
// 'format' => null,
|
||
// 'allowed_values' => null,
|
||
// 'custom' => null,
|
||
// 'params' => null
|
||
// ],
|
||
|
||
// 'actual_bp_percentage' => [
|
||
// 'col_idx' => 29,
|
||
// 'col_cell_name' => 'AD',
|
||
// 'col_name' => 'Actual BP Percentage',
|
||
// 'is_mandatory' => false,
|
||
// 'data_type' => '',
|
||
// 'format' => null,
|
||
// 'allowed_values' => null,
|
||
// 'custom' => null,
|
||
// 'params' => null
|
||
// ],
|
||
|
||
// 'actual_tp_percentage' => [
|
||
// 'col_idx' => 30,
|
||
// 'col_cell_name' => 'AE',
|
||
// 'col_name' => 'Actual TP Percentage',
|
||
// 'is_mandatory' => false,
|
||
// 'data_type' => '',
|
||
// 'format' => null,
|
||
// 'allowed_values' => null,
|
||
// 'custom' => null,
|
||
// 'params' => null
|
||
// ],
|
||
|
||
// 'actual_bp_brokerage_amount' => [
|
||
// 'col_idx' => 31,
|
||
// 'col_cell_name' => 'AF',
|
||
// 'col_name' => 'Actual BP Brokerage Amount',
|
||
// 'is_mandatory' => false,
|
||
// 'data_type' => '',
|
||
// 'format' => null,
|
||
// 'allowed_values' => null,
|
||
// 'custom' => null,
|
||
// 'params' => null
|
||
// ],
|
||
|
||
// 'actual_tp_brokerage_amount' => [
|
||
// 'col_idx' => 32,
|
||
// 'col_cell_name' => 'AG',
|
||
// 'col_name' => 'Actual TP Brokerage Amount',
|
||
// 'is_mandatory' => false,
|
||
// 'data_type' => '',
|
||
// 'format' => null,
|
||
// 'allowed_values' => null,
|
||
// 'custom' => null,
|
||
// 'params' => null
|
||
// ],
|
||
|
||
// 'expected_amount' => [
|
||
// 'col_idx' => 33,
|
||
// 'col_cell_name' => 'AH',
|
||
// 'col_name' => 'Expected Amount',
|
||
// 'is_mandatory' => true,
|
||
// 'data_type' => '',
|
||
// 'format' => null,
|
||
// 'allowed_values' => null,
|
||
// 'custom' => null,
|
||
// 'params' => null
|
||
// ],
|
||
|
||
// 'rewards' => [
|
||
// 'col_idx' => 34,
|
||
// 'col_cell_name' => 'AI',
|
||
// 'col_name' => 'Rewards',
|
||
// 'is_mandatory' => false,
|
||
// 'data_type' => '',
|
||
// 'format' => null,
|
||
// 'allowed_values' => null,
|
||
// 'custom' => null,
|
||
// 'params' => null
|
||
// ],
|
||
|
||
];
|
||
|
||
}
|
||
|
||
// Policy Transaction Inception
|
||
public function viewInception()
|
||
{
|
||
$bds_edit_pt_id = $this->request->getGet('pt_id') ?? null;
|
||
$data['tab_name'] = 'Policies';
|
||
$data['page_name'] = 'Policies';
|
||
|
||
// Static arrays for dropdowns
|
||
$data['issuer'] = [1 => 'JIBS', 2 => 'Nhance'];
|
||
$data['issuer_branch'] = $this->nhanceBranchModel->where('is_active', 1)->findAll();
|
||
$data['client_type'] = [1 => 'Group', 2 => 'Individual'];
|
||
$data['issuing_type'] = [1 => 'Fresh', 2 => 'Renewal', 3 => 'Roll Over'];
|
||
$data['policy_status'] = [
|
||
'under_process' => 'Under Process',
|
||
'client_pending' => 'Client Pending',
|
||
'insurer_pending' => 'Insurer Pending',
|
||
'co_insurer_pending' => 'Co-Insurer Pending',
|
||
'tpa_pending' => 'TPA Pending',
|
||
'validated' => 'Validated',
|
||
'cancelled' => 'Cancelled',
|
||
'instalment_pending' => 'Instalment Pending',
|
||
'completed' => 'Completed',
|
||
'lost' => 'Lost',
|
||
];
|
||
$data['invoice_status_array'] = [
|
||
'yet_to_generate' => 'Pending',
|
||
'generated' => 'Generated',
|
||
'send' => 'Sent',
|
||
'recived' => 'Payment Received',
|
||
];
|
||
// $data['vehicle_type'] = [
|
||
// 'two_wheeler' => 'Two Wheeler',
|
||
// 'four_wheeler' => 'Four Wheeler',
|
||
// 'truck' => 'Truck',
|
||
// 'bus' => 'Bus',
|
||
// 'van' => 'Van',
|
||
// 'suv' => 'SUV',
|
||
// 'motorcycle' => 'Motorcycle',
|
||
// 'bicycle' => 'Bicycle'
|
||
// ];
|
||
$data['vehicle_type'] = db_connect()->table('vehicle_type')->where('is_active', 1)->get()->getResultArray();
|
||
$data['rto_details'] = db_connect()->table('rto_master')->where('is_active', 1)->get()->getResultArray();
|
||
|
||
$data['vehicle_des'] = [
|
||
'commercial' => 'Commercial',
|
||
'private' => 'Private',
|
||
];
|
||
$data['date_type'] = [
|
||
'policy_issue_date' => 'Policy Issue Date',
|
||
'policy_start_date' => 'Policy Start Date',
|
||
'policy_end_date' => 'Policy End Date',
|
||
];
|
||
|
||
// Filter data
|
||
$start_date = $this->request->getGet('start_date');
|
||
$end_date = $this->request->getGet('end_date');
|
||
$client_id = $this->request->getGet('client_id');
|
||
$insurer_id = $this->request->getGet('insurer_id');
|
||
$policy_type_id = $this->request->getGet('policy_type_id');
|
||
$date_type = $this->request->getGet('date_type');
|
||
$issuer = $this->request->getGet('issuer');
|
||
$status = $this->request->getGet('status');
|
||
|
||
// Handle null or empty values
|
||
$start_date = empty($start_date) ? 0 : $start_date;
|
||
$end_date = empty($end_date) ? 0 : $end_date;
|
||
$client_id = empty($client_id) ? 0 : $client_id;
|
||
$insurer_id = empty($insurer_id) ? 0 : $insurer_id;
|
||
$policy_type_id = empty($policy_type_id) ? 0 : $policy_type_id;
|
||
$date_type = empty($date_type) ? 0 : $date_type;
|
||
$issuer = empty($issuer) ? 0 : $issuer;
|
||
$status = empty($status) ? 0 : $status; // Corrected from `$issuer`
|
||
|
||
if(empty($bds_edit_pt_id)){
|
||
if ($this->request->is('get')) {
|
||
|
||
// Fetch inception data list
|
||
$data['inception_data_list'] = $this->policyTransactionModel->getInceptionTranctionListData(
|
||
$start_date,
|
||
$end_date,
|
||
$client_id,
|
||
$insurer_id,
|
||
$policy_type_id,
|
||
$date_type,
|
||
$issuer,
|
||
$status
|
||
);
|
||
} else {
|
||
|
||
$ids = $this->request->getPost('ids');
|
||
$ids = array_filter(explode(',', $ids));
|
||
$data['inception_data_list'] = $this->policyTransactionModel->getInceptionTranctionListData(
|
||
$start_date = 0,
|
||
$end_date = 0,
|
||
$client_id = 0,
|
||
$insurer_id = 0,
|
||
$policy_type_id = 0,
|
||
$date_type = 0,
|
||
$issuer = 0,
|
||
$status = 0,
|
||
$ids
|
||
);
|
||
}
|
||
}else{
|
||
$data['inception_data_list'] = [];
|
||
}
|
||
|
||
|
||
|
||
// Fetch additional data
|
||
$data['client'] = $this->clientModel->where('is_active', 1)->findAll();
|
||
$data['client_branch'] = $this->clientBranchModel->where('is_active', 1)->findAll();
|
||
$data['policy_type'] = $this->policyTypeModel->where('is_active', 1)->findAll();
|
||
$data['insurer'] = $this->insurerModel->where('is_active', 1)->findAll();
|
||
$data['entity'] = $this->kycEntityTypeModel->where('is_active', 1)->findAll();
|
||
$data['policy_types'] = $this->policyTypeModel->where('is_active', 1)->findAll();
|
||
$data['insurer_branch'] = $this->insurerBranchModel->getInsurerBranchesWithInsurerNames();
|
||
$data['tpa'] = $this->tpaBranchModel->getTpaBranchesWithTpaNames();
|
||
|
||
// Fetch PP Teams Data
|
||
$data['ppTeamsData'] = $this->userModel
|
||
->where('is_active', 1)
|
||
->findAll();
|
||
|
||
// // Fetch Sales Team
|
||
// $data['salse_team'] = $this->userModel
|
||
// ->select('user_profiles.*,nhance_branch.id as nhance_branch_id, nhance_branch.branch_name as nhance_branch_name')
|
||
// ->join('user_teams', 'user_profiles.id = user_teams.user_id')
|
||
// ->join('nhance_branch', 'user_profiles.nhance_branch_id = nhance_branch.id','left')
|
||
// ->where('user_teams.team_id', 5)
|
||
// ->where('user_teams.is_active', 1)
|
||
// ->where('user_profiles.is_active', 1)
|
||
// ->findAll();
|
||
|
||
// // Fetch Partner Agent
|
||
// $data['partner_agent'] = db_connect()->table('partner_agent')
|
||
// ->where('is_active', 1)
|
||
// ->get()
|
||
// ->getResultArray();
|
||
|
||
// // Fetch ACM
|
||
// $data['ACM'] = $this->userModel
|
||
// ->where('role', 3) // Assuming `role` is in `user_profiles`
|
||
// ->where('is_active', 1)
|
||
// ->findAll();
|
||
|
||
// Fetch Sales Team
|
||
$data['salse_team'] = $this->userModel
|
||
->select('
|
||
user_profiles.*,
|
||
nhance_branch.id as nhance_branch_id,
|
||
nhance_branch.branch_name as nhance_branch_name,
|
||
rm.first_name AS rm_name
|
||
')
|
||
->join('user_teams', 'user_profiles.id = user_teams.user_id')
|
||
->join('nhance_branch', 'user_profiles.nhance_branch_id = nhance_branch.id','left')
|
||
->join('user_profiles AS rm', 'user_profiles.rm_id = rm.id', 'left')
|
||
->where('user_teams.team_id', 5)
|
||
->where('user_teams.is_active', 1)
|
||
->where('user_profiles.is_active', 1)
|
||
->groupBy('user_profiles.id', 'asc')
|
||
->findAll();
|
||
|
||
// Fetch Partner Agent
|
||
$data['partner_agent'] = db_connect()->table('partner_agent')
|
||
->where('is_active', 1)
|
||
->get()
|
||
->getResultArray();
|
||
|
||
// Fetch ACM
|
||
$data['ACM'] = $this->userModel
|
||
->select('
|
||
user_profiles.*,
|
||
nhance_branch.id AS nhance_branch_id,
|
||
nhance_branch.branch_name AS nhance_branch_name,
|
||
rm.first_name AS rm_name
|
||
')
|
||
->join('user_teams', 'user_profiles.id = user_teams.user_id')
|
||
->join('nhance_branch', 'user_profiles.nhance_branch_id = nhance_branch.id', 'left')
|
||
->join('user_profiles AS rm', 'user_profiles.rm_id = rm.id', 'left')
|
||
->where('user_profiles.role', 3)
|
||
->where('user_profiles.is_active', 1)
|
||
->groupBy('user_profiles.id', 'asc')
|
||
->findAll();
|
||
|
||
|
||
// dd($data);
|
||
|
||
// Load view
|
||
$this->loadLayout('policy_transaction_inception_list', $data);
|
||
}
|
||
|
||
public function viewInception2()
|
||
{
|
||
$bds_edit_pt_id = $this->request->getGet('pt_id') ?? null;
|
||
$data['tab_name'] = 'Policies';
|
||
$data['page_name'] = 'Policies';
|
||
|
||
// Static arrays for dropdowns
|
||
$data['issuer'] = [1 => 'JIBS', 2 => 'Nhance'];
|
||
$data['issuer_branch'] = $this->nhanceBranchModel->where('is_active', 1)->findAll();
|
||
$data['client_type'] = [1 => 'Group', 2 => 'Individual'];
|
||
$data['issuing_type'] = [1 => 'Fresh', 2 => 'Renewal', 3 => 'Roll Over'];
|
||
$data['policy_status'] = [
|
||
'under_process' => 'Under Process',
|
||
'client_pending' => 'Client Pending',
|
||
'insurer_pending' => 'Insurer Pending',
|
||
'co_insurer_pending' => 'Co-Insurer Pending',
|
||
'tpa_pending' => 'TPA Pending',
|
||
'validated' => 'Validated',
|
||
'cancelled' => 'Cancelled',
|
||
'instalment_pending' => 'Instalment Pending',
|
||
'completed' => 'Completed',
|
||
'lost' => 'Lost',
|
||
];
|
||
$data['invoice_status_array'] = [
|
||
'yet_to_generate' => 'Pending',
|
||
'generated' => 'Generated',
|
||
'send' => 'Sent',
|
||
'recived' => 'Payment Received',
|
||
];
|
||
// $data['vehicle_type'] = [
|
||
// 'two_wheeler' => 'Two Wheeler',
|
||
// 'four_wheeler' => 'Four Wheeler',
|
||
// 'truck' => 'Truck',
|
||
// 'bus' => 'Bus',
|
||
// 'van' => 'Van',
|
||
// 'suv' => 'SUV',
|
||
// 'motorcycle' => 'Motorcycle',
|
||
// 'bicycle' => 'Bicycle'
|
||
// ];
|
||
$data['vehicle_type'] = db_connect()->table('vehicle_type')->where('is_active', 1)->get()->getResultArray();
|
||
$data['rto_details'] = db_connect()->table('rto_master')->where('is_active', 1)->get()->getResultArray();
|
||
|
||
$data['vehicle_des'] = [
|
||
'commercial' => 'Commercial',
|
||
'private' => 'Private',
|
||
];
|
||
$data['date_type'] = [
|
||
'policy_issue_date' => 'Policy Issue Date',
|
||
'policy_start_date' => 'Policy Start Date',
|
||
'policy_end_date' => 'Policy End Date',
|
||
];
|
||
|
||
// Filter data
|
||
$start_date = $this->request->getGet('start_date');
|
||
$end_date = $this->request->getGet('end_date');
|
||
$client_id = $this->request->getGet('client_id');
|
||
$insurer_id = $this->request->getGet('insurer_id');
|
||
$policy_type_id = $this->request->getGet('policy_type_id');
|
||
$date_type = $this->request->getGet('date_type');
|
||
$issuer = $this->request->getGet('issuer');
|
||
$status = $this->request->getGet('status');
|
||
|
||
// Handle null or empty values
|
||
$start_date = empty($start_date) ? 0 : $start_date;
|
||
$end_date = empty($end_date) ? 0 : $end_date;
|
||
$client_id = empty($client_id) ? 0 : $client_id;
|
||
$insurer_id = empty($insurer_id) ? 0 : $insurer_id;
|
||
$policy_type_id = empty($policy_type_id) ? 0 : $policy_type_id;
|
||
$date_type = empty($date_type) ? 0 : $date_type;
|
||
$issuer = empty($issuer) ? 0 : $issuer;
|
||
$status = empty($status) ? 0 : $status; // Corrected from `$issuer`
|
||
|
||
if(empty($bds_edit_pt_id)){
|
||
if ($this->request->is('get')) {
|
||
|
||
// Fetch inception data list
|
||
$data['inception_data_list'] = $this->policyTransactionModel->getInceptionTranctionListData(
|
||
$start_date,
|
||
$end_date,
|
||
$client_id,
|
||
$insurer_id,
|
||
$policy_type_id,
|
||
$date_type,
|
||
$issuer,
|
||
$status
|
||
);
|
||
} else {
|
||
|
||
$ids = $this->request->getPost('ids');
|
||
$ids = array_filter(explode(',', $ids));
|
||
$data['inception_data_list'] = $this->policyTransactionModel->getInceptionTranctionListData(
|
||
$start_date = 0,
|
||
$end_date = 0,
|
||
$client_id = 0,
|
||
$insurer_id = 0,
|
||
$policy_type_id = 0,
|
||
$date_type = 0,
|
||
$issuer = 0,
|
||
$status = 0,
|
||
$ids
|
||
);
|
||
}
|
||
}else{
|
||
$data['inception_data_list'] = [];
|
||
}
|
||
|
||
|
||
|
||
// Fetch additional data
|
||
$data['client'] = $this->clientModel->where('is_active', 1)->findAll();
|
||
$data['client_branch'] = $this->clientBranchModel->where('is_active', 1)->findAll();
|
||
$data['policy_type'] = $this->policyTypeModel->where('is_active', 1)->findAll();
|
||
$data['insurer'] = $this->insurerModel->where('is_active', 1)->findAll();
|
||
$data['entity'] = $this->kycEntityTypeModel->where('is_active', 1)->findAll();
|
||
$data['policy_types'] = $this->policyTypeModel->where('is_active', 1)->findAll();
|
||
$data['insurer_branch'] = $this->insurerBranchModel->getInsurerBranchesWithInsurerNames();
|
||
$data['tpa'] = $this->tpaBranchModel->getTpaBranchesWithTpaNames();
|
||
|
||
// Fetch PP Teams Data
|
||
$data['ppTeamsData'] = $this->userModel
|
||
->where('is_active', 1)
|
||
->findAll();
|
||
|
||
// Fetch Sales Team
|
||
$data['salse_team'] = $this->userModel
|
||
->select('
|
||
user_profiles.*,
|
||
nhance_branch.id as nhance_branch_id,
|
||
nhance_branch.branch_name as nhance_branch_name,
|
||
rm.first_name AS rm_name
|
||
')
|
||
->join('user_teams', 'user_profiles.id = user_teams.user_id')
|
||
->join('nhance_branch', 'user_profiles.nhance_branch_id = nhance_branch.id','left')
|
||
->join('user_profiles AS rm', 'user_profiles.rm_id = rm.id', 'left')
|
||
->where('user_teams.team_id', 5)
|
||
->where('user_teams.is_active', 1)
|
||
->where('user_profiles.is_active', 1)
|
||
->groupBy('user_profiles.id', 'asc')
|
||
->findAll();
|
||
|
||
// Fetch Partner Agent
|
||
$data['partner_agent'] = db_connect()->table('partner_agent')
|
||
->where('is_active', 1)
|
||
->get()
|
||
->getResultArray();
|
||
|
||
// Fetch ACM
|
||
$data['ACM'] = $this->userModel
|
||
->select('
|
||
user_profiles.*,
|
||
nhance_branch.id AS nhance_branch_id,
|
||
nhance_branch.branch_name AS nhance_branch_name,
|
||
rm.first_name AS rm_name
|
||
')
|
||
->join('user_teams', 'user_profiles.id = user_teams.user_id')
|
||
->join('nhance_branch', 'user_profiles.nhance_branch_id = nhance_branch.id', 'left')
|
||
->join('user_profiles AS rm', 'user_profiles.rm_id = rm.id', 'left')
|
||
->where('user_profiles.role', 3)
|
||
->where('user_profiles.is_active', 1)
|
||
->groupBy('user_profiles.id', 'asc')
|
||
->findAll();
|
||
|
||
// echo '<pre>';
|
||
|
||
// print_r($data['ppTeamsData']); die;
|
||
|
||
// dd($data);
|
||
|
||
// Load view
|
||
$this->loadLayout('policy_transaction_inception_list_2', $data);
|
||
}
|
||
|
||
// policy Transaction Create function start
|
||
public function createInceptionPolicy()
|
||
{
|
||
$post_data = $this->request->getPost() ?? [];
|
||
$this->myLogger->logme('error', 'Policy Trancaction form data : '. json_encode($post_data));
|
||
|
||
$id = $this->request->getPost('id');
|
||
$data = $this->preparePolicyData();
|
||
$data['cd_ac_pk'] = $this->request->getPost('cd_ac_no');
|
||
$data['issuer'] = 2;
|
||
$data['status'] = 'completed';
|
||
$this->myLogger->logme('error', 'Policy Trancaction modified form data ( insert data ) : '. json_encode($data));
|
||
|
||
|
||
if (!$id) {
|
||
return $this->insertInceptionPolicy($data);
|
||
} else {
|
||
return $this->updateInceptionPolicy($id, $data);
|
||
}
|
||
}
|
||
|
||
private function preparePolicyData()
|
||
{
|
||
$data = $this->request->getPost();
|
||
|
||
$file_data = $this->request->getFiles() ?? null;
|
||
$data['file_data'] = $file_data ?? null;
|
||
|
||
$vehicle_file_data = $this->request->getFiles() ?? null;
|
||
$data['vehicle_file_data'] = $vehicle_file_data ?? null;
|
||
|
||
// print_r($data); die;
|
||
|
||
if (empty($data['policy_issue_date'])) {
|
||
$data['policy_issue_date'] = null;
|
||
}
|
||
|
||
if (empty($data['policy_start_date'])) {
|
||
$data['policy_start_date'] = null;
|
||
}
|
||
|
||
if (empty($data['policy_end_date'])) {
|
||
$data['policy_end_date'] = null;
|
||
}
|
||
|
||
if (empty($data['renewal_date'])) {
|
||
$data['renewal_date'] = null;
|
||
}
|
||
|
||
if (empty($data['rollover_date'])) {
|
||
$data['rollover_date'] = null;
|
||
}
|
||
|
||
if (empty($data['last_action_date'])) {
|
||
$data['last_action_date'] = null;
|
||
} else {
|
||
$data['last_action_date'] = change_date_format($data['last_action_date']);
|
||
}
|
||
|
||
// Separate Insurer and TPA Branch IDs and IDs
|
||
if (isset($data['insurer_id']) && !empty($data['insurer_id'])) {
|
||
list($data['insurer_branch_id'], $data['insurer_id']) = explode('-', $data['insurer_id']);
|
||
if (isset($data['tpa']) && !empty($data['tpa'])) {
|
||
list($data['tpa_branch_id'], $data['tpa_id']) = explode('-', $data['tpa']);
|
||
}
|
||
}
|
||
|
||
$data['tsi'] = generate_tsi_code($data['issue_type']);
|
||
$data['action_type'] = 'inception';
|
||
|
||
if (!isset($data['co_share'])) {
|
||
$data['co_share'] = 0;
|
||
} elseif ($data['co_share']) {
|
||
$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['same_as_proposer'])) {
|
||
$data['same_as_proposer'] = 0;
|
||
} elseif ($data['same_as_proposer']) {
|
||
$data['same_as_proposer'] = 1;
|
||
}
|
||
|
||
if (!isset($data['policy_with_corr'])) {
|
||
$data['policy_with_corr'] = 0;
|
||
} elseif ($data['policy_with_corr']) {
|
||
$data['policy_with_corr'] = 1;
|
||
}
|
||
|
||
$data['is_cd_reduce_from_bds'] = ($data['policy_type_id'] > 7 && $data['client_type'] == 1) ? 1 : 0;
|
||
|
||
|
||
if ($data['ct_type'] == "") {
|
||
$data['ct_type'] = 1;
|
||
}
|
||
|
||
// $month = '01-'.(string)$this->request->getPost('month');
|
||
// $data['month'] = empty($data['month']) ? null : date('Y-m-d', strtotime($month));
|
||
|
||
// Determine $is_addon value
|
||
$data['is_addon'] = in_array($data['policy_type_id'], [1, 2, 6, 7]) ? 1 : (in_array($data['policy_type_id'], [4, 5]) ? 2 : ($data['policy_type_id'] == 3 && isset($data['base_policy']) ? 3 : 1));
|
||
|
||
// print_r($data); die;
|
||
|
||
return $data;
|
||
}
|
||
|
||
private function insertInceptionPolicy($data)
|
||
{
|
||
// print_r($data); die;
|
||
|
||
$insert = $this->policyTransactionModel->insert($data);
|
||
|
||
if ($insert) {
|
||
|
||
$this->insertTransactionStatus($insert, $data, 1);
|
||
$emp_data = $this->processInsertIndividualMemberInEmpTable($data);
|
||
|
||
if (isset($data['follow_insurer_id']) && !empty($data['follow_insurer_id'][0])) {
|
||
|
||
$pt_co_share_details = $this->insertOrUpdateCoShareDetails($data, $insert);
|
||
|
||
$client_policy_id = null;
|
||
if ($data['ct_type'] == 2) {
|
||
$client_policy_insert_data = $this->prepareClientPolicyInsertData($data);
|
||
$client_policy_id = $this->clientPolicyModel->insert($client_policy_insert_data);
|
||
$this->policyTransactionModel->update($insert, ['client_policy_id' => $client_policy_id]);
|
||
$emp_policy_insert = $this->InsertIndividualEmpPolicyTable($emp_data, $client_policy_id);
|
||
}
|
||
|
||
if ($data['client_type'] == 1 && $data['status'] == 'completed' && $data['is_cd_reduce_from_bds'] == 1) {
|
||
$this->processCompletedStatus($data, $client_policy_id, $data['insurer_id'], $insert);
|
||
}
|
||
}
|
||
|
||
// policy file upload
|
||
if(isset($data['doc_name']) && isset($data['file_data']) && !empty($data['doc_name']) && !empty($data['file_data'])){
|
||
$this->uploadFile($data['doc_name'], $data['file_data'], $insert);
|
||
}
|
||
|
||
// policy file upload
|
||
if(
|
||
isset($data['other_docs_name']) && isset($data['vehicle_file_data']) && isset($data['client_id']) && isset($data['vehicle_id']) &&
|
||
!empty($data['other_docs_name']) && !empty($data['vehicle_file_data']) && !empty($data['client_id']) && !empty($data['vehicle_id'])
|
||
)
|
||
{
|
||
$vdd = [
|
||
'other_docs_name' => $data['other_docs_name'],
|
||
'file_data' => $data['vehicle_file_data'],
|
||
'client_id' => $data['client_id'],
|
||
'vehicle_id' => $data['vehicle_id'],
|
||
];
|
||
$clientController = new ClientController();
|
||
$clientController->uploadVehicleFile($vdd);
|
||
}
|
||
|
||
|
||
$client_data = $this->clientModel->where('id', $data['client_id'])->first();
|
||
$data['client_kyc'] = $this->clientKYCDocsModel->where('client_id', $data['client_id'])->findAll();
|
||
|
||
$clientController = new ClientController();
|
||
$data['client_kyc_primary_table'] = $clientController->generateKycPrimaryTable($data['client_id']);
|
||
$data['client_kyc_other_table'] = $clientController->generateKycOthersTable($data['client_id']);
|
||
// $data['client_kyc_single_table'] = $clientController->generateKycSingleTable($data['client_id']);
|
||
$data['entity_type_id'] = $client_data['entity_type_id'];
|
||
|
||
return $this->respondSuccess($insert, "Policy transaction created successfully", $data);
|
||
}
|
||
|
||
return $this->respondError("Failed to create policy transaction");
|
||
}
|
||
|
||
private function updateInceptionPolicy($id, $data)
|
||
{
|
||
// print_r($data); die;
|
||
$old_pt_data = $this->policyTransactionModel->where('is_active', 1)->where("id", $id)->first();
|
||
$old_pt_co_share_data = $this->PTCOShareDetailsModel->where('is_active', 1)->where("id", $id)->first();
|
||
if ($this->policyTransactionModel->update($id, $data)) {
|
||
|
||
$this->insertTransactionStatus($id, $data, 1);
|
||
$emp_data = $this->processInsertIndividualMemberInEmpTable($data);
|
||
|
||
if (isset($data['follow_insurer_id']) && !empty($data['follow_insurer_id'][0])) {
|
||
|
||
$this->insertOrUpdateCoShareDetails($data, $id);
|
||
|
||
if ($data['ct_type'] == 1) {
|
||
$this->policyTransactionModel->update($id, ['client_policy_id' => $data['client_policy_id']]);
|
||
}
|
||
|
||
if (empty($data['client_policy_id']) || $data['client_policy_id'] == 0) {
|
||
|
||
if ($data['ct_type'] == 2) {
|
||
$client_policy_insert_data = $this->prepareClientPolicyInsertData($data);
|
||
$client_policy_id = $this->clientPolicyModel->insert($client_policy_insert_data);
|
||
$this->policyTransactionModel->update($id, ['client_policy_id' => $client_policy_id]);
|
||
$this->InsertIndividualEmpPolicyTable($emp_data, $client_policy_id);
|
||
}
|
||
} else {
|
||
if (isset($data['emp_policy_id']) && !empty($data['emp_policy_id'][0])) {
|
||
$this->InsertIndividualEmpPolicyTable($emp_data, $data['client_policy_id']);
|
||
}
|
||
}
|
||
|
||
// if($old_pt_data['status'] != "completed"){
|
||
// if ($data['status'] == 'completed' && $data['ct_type'] == 2) {
|
||
// if ($data['client_type'] == 1 && $data['is_cd_reduce_from_bds'] == 1) {
|
||
// $this->processCompletedStatus($data, $data['client_policy_id'], $data['insurer_id'], $id);
|
||
// }
|
||
// }
|
||
// }
|
||
|
||
$data['pt_co_share_details'] = $this->PTCOShareDetailsModel->where('pt_id', $id)->where('is_active', 1)->findAll();
|
||
}
|
||
|
||
if(isset($data['cd_amt_changed']) && !empty($data['cd_amt_changed'])){
|
||
$policy_data = $this->policyTransactionModel->where('is_active', 1)->where('id', $id)->first();
|
||
$this->cdCorrection($policy_data, $data['cd_amt_changed'], $id);
|
||
}
|
||
|
||
$client_data = $this->clientModel->where('id', $data['client_id'])->first();
|
||
$data['client_kyc'] = $this->clientKYCDocsModel->where('client_id', $data['client_id'])->findAll();
|
||
|
||
$clientController = new ClientController();
|
||
$data['client_kyc_primary_table'] = $clientController->generateKycPrimaryTable($data['client_id']);
|
||
$data['client_kyc_other_table'] = $clientController->generateKycOthersTable($data['client_id']);
|
||
// $data['client_kyc_single_table'] = $clientController->generateKycSingleTable($data['client_id']);
|
||
|
||
$data['entity_type_id'] = $client_data['entity_type_id'];
|
||
|
||
return $this->respondSuccess($id, "Policy transaction updated successfully", $data);
|
||
}
|
||
|
||
return $this->respondError("Failed to update policy transaction");
|
||
}
|
||
|
||
private function insertOrUpdateCoShareDetails($data, $pt_id)
|
||
{
|
||
// Prepare data for insertion and updating
|
||
$coShareDetails = [];
|
||
if (isset($data['co_share_id']) && !empty($data['co_share_id'])) {
|
||
$this->removePtCoShareRecords($data['co_share_id'], $pt_id);
|
||
}
|
||
|
||
if (isset($data['follow_insurer_id'])) {
|
||
|
||
foreach ($data['follow_insurer_id'] as $index => $insurer) {
|
||
|
||
// Separate the insurer and insurer branch
|
||
if (isset($insurer) && !empty($insurer)) {
|
||
list($insurer_branch_id, $insurer_id) = explode('-', $insurer);
|
||
} else {
|
||
$insurer_branch_id = null;
|
||
$insurer_id = null;
|
||
}
|
||
|
||
if ($data['bro_payable_by'] == 1) {
|
||
$cop_amt = isset($data['co_premium'][$index]) && ($data['co_premium'][$index] != "0.00" && !empty($data['co_premium'][$index])) ? $data['co_premium'][$index] : ($data['base_premium'][$index] ?? 0);
|
||
// print_r($cop_amt);die();
|
||
} else {
|
||
$cop_amt = $data['co_premium'][$index] ?? 0;
|
||
}
|
||
|
||
if(isset($data['calc_policy_issue_date'][$index])){
|
||
$data['calc_policy_issue_date'][$index] = change_date_format($data['calc_policy_issue_date'][$index]);
|
||
}
|
||
|
||
$co_share_type_value = (($data['co_share'] ?? 0) == 1) ? ($data['co_share_type'][$index] ?? 1) : 1;
|
||
|
||
// Prepare each co-share detail entry
|
||
$coShareDetails[] = [
|
||
'pt_id' => $pt_id,
|
||
'insurer_id' => $insurer_id ?? 0,
|
||
'insurer_branch_id' => $insurer_branch_id ?? 0,
|
||
'co_share_type' => $co_share_type_value,
|
||
'co_share_per' => $data['co_share_per'][$index] ?? 0,
|
||
'bp_amt' => $data['base_premium'][$index] ?? 0,
|
||
'bp_gst_amt' => $data['gst_amount'][$index] ?? 0,
|
||
'bp_igst' => $data['igst'][$index] ?? 0,
|
||
'bp_sgst' => $data['sgst'][$index] ?? 0,
|
||
'bp_cgst' => $data['cgst'][$index] ?? 0,
|
||
'tp_amt' => $data['tp_premium'][$index] ?? 0,
|
||
'tep_amt' => $data['ter_premium'][$index] ?? 0,
|
||
'cotp_amt' => $data['co_tp_premium'][$index] ?? 0,
|
||
'cotep_amt' => $data['co_ter_premium'][$index] ?? 0,
|
||
'agreed_amt' => $data['agreed_amount'][$index] ?? 0,
|
||
'agreed_bp_per' => $data['agreed_bp'][$index] ?? 0,
|
||
'agreed_tp_per' => $data['agreed_tp'][$index] ?? 0,
|
||
'agreed_tep_per' => $data['agreed_ter'][$index] ?? 0,
|
||
'standerd_bp_per' => $data['standard_bp'][$index] ?? 0,
|
||
'standerd_tp_per' => $data['standard_tp'][$index] ?? 0,
|
||
'standerd_tep_per' => $data['standard_ter'][$index] ?? 0,
|
||
'actual_bp_amt' => $data['actual_bp_amt'][$index] ?? 0,
|
||
'actual_tp_amt' => $data['actual_tp_amt'][$index] ?? 0,
|
||
'actual_tep_amt' => $data['actual_tep_amt'][$index] ?? 0,
|
||
'actual_bp_per' => $data['actual_bp_per'][$index] ?? 0,
|
||
'actual_tp_per' => $data['actual_tp_per'][$index] ?? 0,
|
||
'actual_tep_per' => $data['actual_tep_per'][$index] ?? 0,
|
||
'actual_bp_brokerage_amt' => $data['actual_bp_brokerage_amt'][$index] ?? 0,
|
||
'actual_tp_brokerage_amt' => $data['actual_tp_brokerage_amt'][$index] ?? 0,
|
||
'actual_tep_brokerage_amt' => $data['actual_tep_brokerage_amt'][$index] ?? 0,
|
||
'exp_amt' => isset($data['exp_amt'][$index]) && !empty($data['exp_amt'][$index]) ? $data['exp_amt'][$index] : expected_amount_calc($data, $index),
|
||
'amount' => $data['total'][$index] ?? 0,
|
||
'stamp_duty' => $data['stamp_duty'][$index] ?? 0,
|
||
'cop_amt' => $cop_amt,
|
||
'variance' => $data['variance'][$index] ?? 0,
|
||
'reward' => $data['reward'][$index] ?? null,
|
||
'created_by' => get_session_userid() ?? null,
|
||
'updated_by' => get_session_userid() ?? null,
|
||
'id' => $data['co_share_id'][$index] ?? null, // Assuming this is the ID to identify existing records
|
||
'follower_policy_no' => $data['follower_policy_no'][$index] ?? null,
|
||
'non_comm_per_amt' => $data['non_comm_per_amt'][$index] ?? null,
|
||
'pt_policy_issue_date' => $data['calc_policy_issue_date'][$index] ?? null,
|
||
];
|
||
}
|
||
|
||
// print_r($pt_id);
|
||
// print_r($coShareDetails);
|
||
// die;
|
||
|
||
// Separate data into insert and update batches
|
||
$insertData = array_filter($coShareDetails, function ($detail) {
|
||
return empty($detail['id']); // Only insert new records
|
||
});
|
||
|
||
$updateData = array_filter($coShareDetails, function ($detail) {
|
||
return !empty($detail['id']); // Only update existing records
|
||
});
|
||
|
||
// Insert new records
|
||
if (!empty($insertData)) {
|
||
$this->PTCOShareDetailsModel->insertBatch($insertData);
|
||
}
|
||
|
||
// Update existing records
|
||
if (!empty($updateData)) {
|
||
$this->PTCOShareDetailsModel->updateBatch($updateData, 'id'); // Assuming 'id' is the unique identifier
|
||
}
|
||
|
||
// print_r($this->PTCOShareDetailsModel->getLastQuery()); die;
|
||
// print_r($coShareDetails);
|
||
// die;
|
||
|
||
return true;
|
||
}
|
||
|
||
// print_r($data);
|
||
// die;
|
||
}
|
||
|
||
private function prepareClientPolicyInsertData($data)
|
||
{
|
||
return [
|
||
'client_id' => $data['client_id'] ?? null,
|
||
'insurer_id' => $data['insurer_id'] ?? null,
|
||
'insurer_branch_id' => $data['insurer_branch_id'] ?? null,
|
||
'tpa_id' => $data['tpa_id'] ?? null,
|
||
'tpa_branch_id' => $data['tpa_branch_id'] ?? null,
|
||
'policy_type_id' => $data['policy_type_id'] ?? null,
|
||
'policy_start_date' => $data['policy_start_date'] ?? null,
|
||
'policy_end_date' => $data['policy_end_date'] ?? null,
|
||
'policy_status' => 1,
|
||
'is_addon' => $data['is_addon'] ?? null,
|
||
'base_policy' => $data['base_policy'] ?? 0,
|
||
'created_by' => get_session_userid(),
|
||
'policy_no' => $data['policy_no'] ?? null,
|
||
'client_branch_id' => $data['client_branch_id'] ?? 0,
|
||
'cd_ac_pk' => $data['cd_ac_no'] ?? null,
|
||
'gst' => 18,
|
||
'policy_entry_from' => 2,
|
||
];
|
||
}
|
||
|
||
private function insertTransactionStatus($policyTranId, $data, $statusType)
|
||
{
|
||
$statusData = [
|
||
'policy_tran_id' => $policyTranId,
|
||
'status' => $data['status'],
|
||
'last_action_date' => $data['last_action_date'],
|
||
'status_type' => $statusType,
|
||
'created_by' => get_session_userid(),
|
||
];
|
||
$this->policyTransactionStatusModel->insert($statusData);
|
||
}
|
||
|
||
private function processCompletedStatus($data, $client_policy_id, $insurer_id, $policyTranId)
|
||
{
|
||
$totalAmount = (int)$data['total'][0] ?? 0;
|
||
$description = 'The following amount of Rs. ' . $totalAmount . '/- has been debited for the ' . $data['emp_count'] . ' employees at Inception (BDS).';
|
||
|
||
$cdTransactionData = [
|
||
'amount' => $totalAmount,
|
||
'sub_type_id' => 4,
|
||
'client_id' => $data['client_id'],
|
||
'client_policy_id' => $client_policy_id ?? 0,
|
||
'endorsement_no' => null,
|
||
'cd_ac_no' => $data['cd_ac_no'] ?? null,
|
||
'insurer_id' => $insurer_id,
|
||
'description' => $description,
|
||
'transaction_type' => 'Debit',
|
||
'updated_by' => get_session_userid(),
|
||
'event_name' => 'inception',
|
||
'is_active' => 1,
|
||
'cd_ac_pk' => $data['cd_ac_pk'],
|
||
'pt_id' => $policyTranId ?? null,
|
||
];
|
||
|
||
$result = DepositHelper::saveDeposit($cdTransactionData, get_session_userid());
|
||
|
||
if(isset($result) && $result['success'] == true){
|
||
$update_data['ct_tran_id'] = $result['insert_id'];
|
||
$this->policyTransactionModel->where('id', $policyTranId)->set($update_data)->update();
|
||
}
|
||
}
|
||
|
||
private function cdCorrection($data, $amt, $policyTranId)
|
||
{
|
||
$totalAmount = (int)($amt ?? 0);
|
||
$description = 'The following amount of Rs. ' . $totalAmount . '/- has been debited towards the difference arising from the change in the BDS base premium.';
|
||
|
||
$cdTransactionData = [
|
||
'amount' => abs($totalAmount),
|
||
'sub_type_id' => 4,
|
||
'client_id' => $data['client_id'],
|
||
'client_policy_id' => $data['client_policy_id'] ?? 0,
|
||
'endorsement_no' => null,
|
||
'cd_ac_no' => $data['cd_ac_no'] ?? null,
|
||
'insurer_id' => $data['insurer_id'],
|
||
'description' => $description,
|
||
'transaction_type' => $totalAmount < 0 ? 'Credit' : 'Debit',
|
||
'updated_by' => get_session_userid(),
|
||
'event_name' => 'inception',
|
||
'is_active' => 1,
|
||
'cd_ac_pk' => $data['cd_ac_pk'],
|
||
'pt_id' => $policyTranId ?? null,
|
||
];
|
||
|
||
DepositHelper::saveDeposit($cdTransactionData, get_session_userid());
|
||
}
|
||
|
||
private function processInsertIndividualMemberInEmpTable($data)
|
||
{
|
||
// print_r($data);
|
||
if (isset($data['family_name']) && !empty($data['family_name'])) {
|
||
|
||
$emp_data = [];
|
||
$emp_ids = [];
|
||
$random_code = generateRandomCode(); // Generate random code once
|
||
|
||
foreach ($data['family_name'] as $index => $val) {
|
||
|
||
// Determine the gender based on the relationship
|
||
$relationship = $data['relationship'][$index] ?? '';
|
||
$gender = 'M'; // Default to Male
|
||
|
||
// Set gender based on relationship
|
||
if (in_array($relationship, ['Mother', 'Daughter', 'Mother in law', 'Spouse'])) {
|
||
$gender = 'F';
|
||
}
|
||
|
||
$emp_data[] = [
|
||
'client_id' => $data['client_id'] ?? 0,
|
||
'client_branch_id' => $data['client_branch_id'] ?? 0,
|
||
'name' => $val,
|
||
'relationship' => $relationship,
|
||
'gender' => $gender,
|
||
'emp_status' => 'active',
|
||
'created_by' => get_session_userid(),
|
||
'emp_code' => $random_code, // Use the same random code for all
|
||
'id' => $data['emp_id'][$index] ?? null
|
||
];
|
||
|
||
$emp_ids[] = $data['emp_id'][$index] ?? 0;
|
||
}
|
||
|
||
|
||
// print_r($emp_data); die;
|
||
|
||
// Separate data into insert and update batches
|
||
$insertData = array_filter($emp_data, function ($detail) {
|
||
return empty($detail['id']); // Only insert new records
|
||
});
|
||
|
||
$updateData = array_filter($emp_data, function ($detail) {
|
||
return !empty($detail['id']); // Only update existing records
|
||
});
|
||
|
||
// Insert new records
|
||
if (!empty($insertData)) {
|
||
$this->employeeModel->insertBatch($insertData);
|
||
}
|
||
|
||
// Update existing records
|
||
if (!empty($updateData)) {
|
||
$this->employeeModel->updateBatch($updateData, 'id'); // Assuming 'id' is the unique identifier
|
||
}
|
||
|
||
return $emp_ids;
|
||
}
|
||
}
|
||
|
||
private function InsertIndividualEmpPolicyTable($emp_ids, $client_policy_id)
|
||
{
|
||
if (!empty($emp_ids)) {
|
||
|
||
$emp_policy_data = [];
|
||
|
||
foreach ($emp_ids as $index => $emp_id) {
|
||
|
||
$emp_policy_data[] = [
|
||
'employee_id' => $emp_id ?? 0,
|
||
'client_policy_id' => $client_policy_id ?? 0,
|
||
'created_by' => get_session_userid(),
|
||
'status' => 'active',
|
||
];
|
||
}
|
||
|
||
// print_r($emp_policy_data); die;
|
||
|
||
// Insert new records
|
||
if (!empty($emp_policy_data)) {
|
||
$this->employeePolicyModel->insertBatch($emp_policy_data);
|
||
}
|
||
|
||
|
||
return true;
|
||
}
|
||
}
|
||
|
||
private function respondSuccess($id, $message, $data)
|
||
{
|
||
return $this->respond(['status' => true, 'pt_id' => $id, 'message' => $message, 'data' => $data], 200);
|
||
}
|
||
|
||
private function respondError($message)
|
||
{
|
||
return $this->respond(['status' => false, 'message' => $message], 200);
|
||
}
|
||
// policy Transaction Create function End
|
||
|
||
// Get the Single Inception Tranction data for edit
|
||
public function getInceptionDataForEdit($id)
|
||
{
|
||
$data = $this->policyTransactionModel
|
||
->select('
|
||
policy_transaction.*,
|
||
clients.short_name as client_short_name,
|
||
clients.client_type,
|
||
clients.entity_type_id,
|
||
policy_type.policy_type,
|
||
client_policy.tpa_id as master_tpa_id,
|
||
client_policy.tpa_branch_id as master_tpa_branch_id,
|
||
client_policy.policy_type_id as master_policy_type_id,
|
||
client_policy.is_addon,
|
||
client_policy.base_policy,
|
||
(
|
||
select last_action_date
|
||
from policy_transaction_status
|
||
where policy_tran_id = policy_transaction.id
|
||
and status = policy_transaction.status
|
||
order by id desc
|
||
limit 1
|
||
|
||
) as last_action_date
|
||
')
|
||
->join('clients', 'clients.id = policy_transaction.client_id')
|
||
->join('client_policy', 'policy_transaction.client_policy_id = client_policy.id', 'left')
|
||
->join('policy_type', 'client_policy.policy_type_id = policy_type.id', 'left')
|
||
->where('policy_transaction.id', $id)
|
||
->where('policy_transaction.is_active', 1)
|
||
->first();
|
||
|
||
$data['created_at'] = (isset($data['created_at']) && $data['created_at'] !== null && $data['created_at'] !== '')
|
||
? date('d/m/Y h:i:s A', strtotime($data['created_at']))
|
||
: null;
|
||
|
||
$data['updated_at'] = (isset($data['updated_at']) && $data['updated_at'] !== null && $data['updated_at'] !== '')
|
||
? date('d/m/Y h:i:s A', strtotime($data['updated_at']))
|
||
: null;
|
||
|
||
|
||
if (!empty($data['policy_issue_date'])) {
|
||
$data['policy_issue_date'] = change_date_format($data['policy_issue_date'], 'Y-m-d', 'd/m/Y');
|
||
}
|
||
|
||
if (!empty($data['policy_start_date'])) {
|
||
$data['policy_start_date'] = change_date_format($data['policy_start_date'], 'Y-m-d', 'd/m/Y');
|
||
}
|
||
|
||
if (!empty($data['policy_end_date'])) {
|
||
$data['policy_end_date'] = change_date_format($data['policy_end_date'], 'Y-m-d', 'd/m/Y');
|
||
}
|
||
|
||
if (!empty($data['renewal_date'])) {
|
||
$data['renewal_date'] = change_date_format($data['renewal_date'], 'Y-m-d', 'd/m/Y');
|
||
}
|
||
|
||
if (!empty($data['rollover_date'])) {
|
||
$data['rollover_date'] = change_date_format($data['rollover_date'], 'Y-m-d', 'd/m/Y');
|
||
}
|
||
|
||
if (!empty($data['endorse_eff_date'])) {
|
||
$data['endorse_eff_date'] = change_date_format($data['endorse_eff_date'], 'Y-m-d', 'd/m/Y');
|
||
}
|
||
|
||
if (!empty($data['last_action_date'])) {
|
||
$data['last_action_date'] = change_date_format($data['last_action_date'], 'Y-m-d', 'd/m/Y');
|
||
}
|
||
|
||
if (!empty($data['month'])) {
|
||
$data['month'] = change_date_format($data['month'], 'Y-m-d', 'M/Y');
|
||
} else {
|
||
$data['month'] = null;
|
||
}
|
||
|
||
// print_r($data); die;
|
||
|
||
$data['renewal_policy'] = $this->clientPolicyModel
|
||
->select('client_policy.*, policy_type.policy_type')
|
||
->join('policy_type', 'policy_type.id = client_policy.policy_type_id')
|
||
->where('client_policy.client_id', $data['client_id'])
|
||
->where('client_policy.client_branch_id', $data['client_branch_id'])
|
||
->where('client_policy.is_active', 1)
|
||
->findAll();
|
||
|
||
$data['base_policy_data'] = $this->clientPolicyModel
|
||
->select('client_policy.*, policy_type.policy_type')
|
||
->join('policy_type', 'policy_type.id = client_policy.policy_type_id')
|
||
->where('client_policy.client_id', $data['client_id'])
|
||
->where('client_policy.client_branch_id', $data['client_branch_id'])
|
||
->whereIn('client_policy.policy_type_id', [2, 3])
|
||
->where('client_policy.is_active', 1)
|
||
->findAll();
|
||
|
||
$pt_bp_amt = $this->PTCOShareDetailsModel
|
||
->select('bp_amt, amount')
|
||
->where('pt_id', $id)
|
||
->where('co_share_type', 1)
|
||
->where('is_active', 1)
|
||
->first();
|
||
|
||
// dd(db_connect()->getLastQuery() ,$pt_bp_amt);
|
||
$data['base_cd_amount'] = $pt_bp_amt['amount'] ?? null;
|
||
|
||
|
||
$ptFileQuery = $this->PTFileModel
|
||
->join('policy_transaction', 'pt_files.pt_id = policy_transaction.id')
|
||
->where('pt_files.pt_id', $id)
|
||
->where('pt_files.is_active', 1);
|
||
|
||
if (!in_array(get_role_id(), [1, 5]) && empty(array_intersect(user_team(), [MANAGEMENT_TEAM_ID, FINANCE_TEAM_ID, BUSINESS_TEAM_ID]))) {
|
||
|
||
if (get_role_id() == 4 && in_array(POS_TEAM_ID, user_team())) {
|
||
$ptFileQuery->where('pt_files.created_by', get_session_userid());
|
||
}
|
||
}
|
||
|
||
$data['pt_files'] = $ptFileQuery->findAll();
|
||
|
||
|
||
|
||
$data['pt_co_share_details'] = $this->PTCOShareDetailsModel
|
||
->select("
|
||
pt_co_share_details.*,
|
||
|
||
(
|
||
SELECT
|
||
COUNT(*)
|
||
FROM
|
||
co_share_stmt_details
|
||
WHERE
|
||
co_share_stmt_details.co_share_id = pt_co_share_details.id
|
||
AND co_share_stmt_details.is_active = 1
|
||
) AS record_count,
|
||
|
||
(
|
||
SELECT
|
||
SUM(actual_bp_amt)
|
||
FROM
|
||
co_share_stmt_details
|
||
WHERE
|
||
co_share_id = pt_co_share_details.id
|
||
AND is_active = 1
|
||
|
||
) AS actual_bp_amount,
|
||
|
||
(
|
||
SELECT
|
||
SUM(actual_tp_amt)
|
||
FROM
|
||
co_share_stmt_details
|
||
WHERE
|
||
co_share_id = pt_co_share_details.id
|
||
AND is_active = 1
|
||
|
||
) AS actual_tp_amount,
|
||
|
||
(
|
||
SELECT
|
||
SUM(actual_tep_amt)
|
||
FROM
|
||
co_share_stmt_details
|
||
WHERE
|
||
co_share_id = pt_co_share_details.id
|
||
AND is_active = 1
|
||
|
||
) AS actual_tep_amount,
|
||
|
||
(
|
||
SELECT
|
||
SUM(actual_bp_per)
|
||
FROM
|
||
co_share_stmt_details
|
||
WHERE
|
||
co_share_id = pt_co_share_details.id
|
||
AND is_active = 1
|
||
|
||
) AS actual_bp_percentage,
|
||
|
||
(
|
||
SELECT
|
||
SUM(actual_tp_per)
|
||
FROM
|
||
co_share_stmt_details
|
||
WHERE
|
||
co_share_id = pt_co_share_details.id
|
||
AND is_active = 1
|
||
|
||
) AS actual_tp_percentage,
|
||
|
||
(
|
||
SELECT
|
||
SUM(actual_tep_per)
|
||
FROM
|
||
co_share_stmt_details
|
||
WHERE
|
||
co_share_id = pt_co_share_details.id
|
||
AND is_active = 1
|
||
|
||
) AS actual_tep_percentage,
|
||
|
||
|
||
(
|
||
SELECT
|
||
SUM(actual_bp_brokerage_amt)
|
||
FROM
|
||
co_share_stmt_details
|
||
WHERE
|
||
co_share_id = pt_co_share_details.id
|
||
AND is_active = 1
|
||
|
||
) AS actual_bp_brokerage_amount,
|
||
|
||
|
||
(
|
||
SELECT
|
||
SUM(actual_tp_brokerage_amt)
|
||
FROM
|
||
co_share_stmt_details
|
||
WHERE
|
||
co_share_id = pt_co_share_details.id
|
||
AND is_active = 1
|
||
|
||
) AS actual_tp_brokerage_amount,
|
||
|
||
|
||
(
|
||
SELECT
|
||
SUM(actual_tep_brokerage_amt)
|
||
FROM
|
||
co_share_stmt_details
|
||
WHERE
|
||
co_share_id = pt_co_share_details.id
|
||
AND is_active = 1
|
||
|
||
) AS actual_tep_brokerage_amount,
|
||
|
||
DATE_FORMAT(pt_policy_issue_date, '%d/%m/%Y') AS pt_policy_issue_date
|
||
|
||
")
|
||
->where('pt_id', $id)
|
||
->where('is_active', 1)
|
||
->orderBy('id', 'asc')
|
||
->findAll();
|
||
|
||
$data['emp_data'] = $this->employeeModel
|
||
->select('employees.*, employee_polices.id as emp_policy_id')
|
||
->join('employee_polices', 'employees.id = employee_polices.employee_id', 'left')
|
||
->where('employees.client_id', $data['client_id'])
|
||
->where('employees.is_active', 1)->findAll();
|
||
// $data['client_kyc'] = $this->clientKYCDocsModel->where('client_id', $data['client_id'])->findAll();
|
||
|
||
$clientController = new ClientController();
|
||
$data['client_kyc_primary_table'] = $clientController->generateKycPrimaryTable($data['client_id']);
|
||
$data['client_kyc_other_table'] = $clientController->generateKycOthersTable($data['client_id']);
|
||
$data['client_kyc_single_table'] = $clientController->generateKycSingleTable($data['client_id']);
|
||
$data['client_kyc_dd_data'] = $clientController->fetch_dropdown($data['client_id']);
|
||
|
||
$data['vehicle_docs'] = $this->clientKYCDocsModel
|
||
->where('client_id', $data['client_id'])
|
||
->where('vehicle_id', $data['vehicle_id'])
|
||
->findAll();
|
||
|
||
// print_r( $data['pt_co_share_details']); die;
|
||
// return $data;
|
||
if ($data) {
|
||
return $this->respond(['status' => true, 'data' => $data], 200);
|
||
} else {
|
||
return $this->respond(['status' => false], 200);
|
||
}
|
||
}
|
||
|
||
// Get the Single Inception Tranction data for edit
|
||
public function getInceptionDataForEdit2($id)
|
||
{
|
||
$data = $this->policyTransactionModel
|
||
->select('
|
||
policy_transaction.*,
|
||
clients.short_name as client_short_name,
|
||
clients.client_type,
|
||
clients.entity_type_id,
|
||
policy_type.policy_type,
|
||
client_policy.tpa_id as master_tpa_id,
|
||
client_policy.tpa_branch_id as master_tpa_branch_id,
|
||
client_policy.policy_type_id as master_policy_type_id,
|
||
client_policy.is_addon,
|
||
client_policy.base_policy,
|
||
(
|
||
select last_action_date
|
||
from policy_transaction_status
|
||
where policy_tran_id = policy_transaction.id
|
||
and status = policy_transaction.status
|
||
order by id desc
|
||
limit 1
|
||
|
||
) as last_action_date
|
||
')
|
||
->join('clients', 'clients.id = policy_transaction.client_id')
|
||
->join('client_policy', 'policy_transaction.client_policy_id = client_policy.id', 'left')
|
||
->join('policy_type', 'client_policy.policy_type_id = policy_type.id', 'left')
|
||
->where('policy_transaction.id', $id)
|
||
->where('policy_transaction.is_active', 1)
|
||
->first();
|
||
|
||
$data['created_at'] = (isset($data['created_at']) && $data['created_at'] !== null && $data['created_at'] !== '')
|
||
? date('d/m/Y h:i:s A', strtotime($data['created_at']))
|
||
: null;
|
||
|
||
$data['updated_at'] = (isset($data['updated_at']) && $data['updated_at'] !== null && $data['updated_at'] !== '')
|
||
? date('d/m/Y h:i:s A', strtotime($data['updated_at']))
|
||
: null;
|
||
|
||
|
||
if (!empty($data['policy_issue_date'])) {
|
||
$data['policy_issue_date'] = change_date_format($data['policy_issue_date'], 'Y-m-d', 'd/m/Y');
|
||
}
|
||
|
||
if (!empty($data['policy_start_date'])) {
|
||
$data['policy_start_date'] = change_date_format($data['policy_start_date'], 'Y-m-d', 'd/m/Y');
|
||
}
|
||
|
||
if (!empty($data['policy_end_date'])) {
|
||
$data['policy_end_date'] = change_date_format($data['policy_end_date'], 'Y-m-d', 'd/m/Y');
|
||
}
|
||
|
||
if (!empty($data['renewal_date'])) {
|
||
$data['renewal_date'] = change_date_format($data['renewal_date'], 'Y-m-d', 'd/m/Y');
|
||
}
|
||
|
||
if (!empty($data['rollover_date'])) {
|
||
$data['rollover_date'] = change_date_format($data['rollover_date'], 'Y-m-d', 'd/m/Y');
|
||
}
|
||
|
||
if (!empty($data['endorse_eff_date'])) {
|
||
$data['endorse_eff_date'] = change_date_format($data['endorse_eff_date'], 'Y-m-d', 'd/m/Y');
|
||
}
|
||
|
||
if (!empty($data['last_action_date'])) {
|
||
$data['last_action_date'] = change_date_format($data['last_action_date'], 'Y-m-d', 'd/m/Y');
|
||
}
|
||
|
||
if (!empty($data['month'])) {
|
||
$data['month'] = change_date_format($data['month'], 'Y-m-d', 'M/Y');
|
||
} else {
|
||
$data['month'] = null;
|
||
}
|
||
|
||
// print_r($data); die;
|
||
|
||
$data['renewal_policy'] = $this->clientPolicyModel
|
||
->select('client_policy.*, policy_type.policy_type')
|
||
->join('policy_type', 'policy_type.id = client_policy.policy_type_id')
|
||
->where('client_policy.client_id', $data['client_id'])
|
||
->where('client_policy.client_branch_id', $data['client_branch_id'])
|
||
->where('client_policy.is_active', 1)
|
||
->findAll();
|
||
|
||
$data['base_policy_data'] = $this->clientPolicyModel
|
||
->select('client_policy.*, policy_type.policy_type')
|
||
->join('policy_type', 'policy_type.id = client_policy.policy_type_id')
|
||
->where('client_policy.client_id', $data['client_id'])
|
||
->where('client_policy.client_branch_id', $data['client_branch_id'])
|
||
->whereIn('client_policy.policy_type_id', [2, 3])
|
||
->where('client_policy.is_active', 1)
|
||
->findAll();
|
||
|
||
$pt_bp_amt = $this->PTCOShareDetailsModel
|
||
->select('bp_amt, amount')
|
||
->where('pt_id', $id)
|
||
->where('co_share_type', 1)
|
||
->where('is_active', 1)
|
||
->first();
|
||
|
||
// dd(db_connect()->getLastQuery() ,$pt_bp_amt);
|
||
$data['base_cd_amount'] = $pt_bp_amt['amount'] ?? null;
|
||
|
||
|
||
$ptFileQuery = $this->PTFileModel
|
||
->join('policy_transaction', 'pt_files.pt_id = policy_transaction.id')
|
||
->where('pt_files.pt_id', $id)
|
||
->where('pt_files.is_active', 1);
|
||
|
||
if (!in_array(get_role_id(), [1, 5]) && empty(array_intersect(user_team(), [MANAGEMENT_TEAM_ID, FINANCE_TEAM_ID, BUSINESS_TEAM_ID]))) {
|
||
|
||
if (get_role_id() == 4 && in_array(POS_TEAM_ID, user_team())) {
|
||
$ptFileQuery->where('pt_files.created_by', get_session_userid());
|
||
}
|
||
}
|
||
|
||
$data['pt_files'] = $ptFileQuery->findAll();
|
||
|
||
|
||
|
||
$data['pt_co_share_details'] = $this->PTCOShareDetailsModel
|
||
->select("
|
||
pt_co_share_details.*,
|
||
|
||
(
|
||
SELECT
|
||
COUNT(*)
|
||
FROM
|
||
co_share_stmt_details
|
||
WHERE
|
||
co_share_stmt_details.co_share_id = pt_co_share_details.id
|
||
AND co_share_stmt_details.is_active = 1
|
||
) AS record_count,
|
||
|
||
(
|
||
SELECT
|
||
SUM(actual_bp_amt)
|
||
FROM
|
||
co_share_stmt_details
|
||
WHERE
|
||
co_share_id = pt_co_share_details.id
|
||
AND is_active = 1
|
||
|
||
) AS actual_bp_amount,
|
||
|
||
(
|
||
SELECT
|
||
SUM(actual_tp_amt)
|
||
FROM
|
||
co_share_stmt_details
|
||
WHERE
|
||
co_share_id = pt_co_share_details.id
|
||
AND is_active = 1
|
||
|
||
) AS actual_tp_amount,
|
||
|
||
(
|
||
SELECT
|
||
SUM(actual_tep_amt)
|
||
FROM
|
||
co_share_stmt_details
|
||
WHERE
|
||
co_share_id = pt_co_share_details.id
|
||
AND is_active = 1
|
||
|
||
) AS actual_tep_amount,
|
||
|
||
(
|
||
SELECT
|
||
SUM(actual_bp_per)
|
||
FROM
|
||
co_share_stmt_details
|
||
WHERE
|
||
co_share_id = pt_co_share_details.id
|
||
AND is_active = 1
|
||
|
||
) AS actual_bp_percentage,
|
||
|
||
(
|
||
SELECT
|
||
SUM(actual_tp_per)
|
||
FROM
|
||
co_share_stmt_details
|
||
WHERE
|
||
co_share_id = pt_co_share_details.id
|
||
AND is_active = 1
|
||
|
||
) AS actual_tp_percentage,
|
||
|
||
(
|
||
SELECT
|
||
SUM(actual_tep_per)
|
||
FROM
|
||
co_share_stmt_details
|
||
WHERE
|
||
co_share_id = pt_co_share_details.id
|
||
AND is_active = 1
|
||
|
||
) AS actual_tep_percentage,
|
||
|
||
|
||
(
|
||
SELECT
|
||
SUM(actual_bp_brokerage_amt)
|
||
FROM
|
||
co_share_stmt_details
|
||
WHERE
|
||
co_share_id = pt_co_share_details.id
|
||
AND is_active = 1
|
||
|
||
) AS actual_bp_brokerage_amount,
|
||
|
||
|
||
(
|
||
SELECT
|
||
SUM(actual_tp_brokerage_amt)
|
||
FROM
|
||
co_share_stmt_details
|
||
WHERE
|
||
co_share_id = pt_co_share_details.id
|
||
AND is_active = 1
|
||
|
||
) AS actual_tp_brokerage_amount,
|
||
|
||
|
||
(
|
||
SELECT
|
||
SUM(actual_tep_brokerage_amt)
|
||
FROM
|
||
co_share_stmt_details
|
||
WHERE
|
||
co_share_id = pt_co_share_details.id
|
||
AND is_active = 1
|
||
|
||
) AS actual_tep_brokerage_amount,
|
||
|
||
DATE_FORMAT(pt_policy_issue_date, '%d/%m/%Y') AS pt_policy_issue_date
|
||
|
||
")
|
||
->where('pt_id', $id)
|
||
->where('is_active', 1)
|
||
->orderBy('id', 'asc')
|
||
->findAll();
|
||
|
||
$data['emp_data'] = $this->employeeModel
|
||
->select('employees.*, employee_polices.id as emp_policy_id')
|
||
->join('employee_polices', 'employees.id = employee_polices.employee_id', 'left')
|
||
->where('employees.client_id', $data['client_id'])
|
||
->where('employees.is_active', 1)->findAll();
|
||
// $data['client_kyc'] = $this->clientKYCDocsModel->where('client_id', $data['client_id'])->findAll();
|
||
|
||
$clientController = new ClientController();
|
||
$data['client_kyc_primary_table'] = $clientController->generateKycPrimaryTable($data['client_id']);
|
||
$data['client_kyc_other_table'] = $clientController->generateKycOthersTable($data['client_id']);
|
||
$data['client_kyc_single_table'] = $clientController->generateKycSingleTable($data['client_id']);
|
||
$data['client_kyc_dd_data'] = $clientController->fetch_dropdown($data['client_id']);
|
||
|
||
$data['vehicle_docs'] = $this->clientKYCDocsModel
|
||
->where('client_id', $data['client_id'])
|
||
->where('vehicle_id', $data['vehicle_id'])
|
||
->findAll();
|
||
|
||
// print_r( $data['pt_co_share_details']); die;
|
||
// return $data;
|
||
if ($data) {
|
||
return $this->respond(['status' => true, 'data' => $data], 200);
|
||
} else {
|
||
return $this->respond(['status' => false], 200);
|
||
}
|
||
}
|
||
|
||
public function removePolicyTransaction($id, $type = 0)
|
||
{
|
||
if ($id) {
|
||
$data['is_active'] = 0;
|
||
$policy_transaction_data = $this->policyTransactionModel->where('id', $id)->first();
|
||
if($policy_transaction_data['policy_type_id'] > 7 && $type == 0){
|
||
|
||
$this->policyTransactionModel->where('id', $id)->set($data)->update();
|
||
$this->PTCOShareDetailsModel->where('pt_id', $id)->set($data)->update();
|
||
$this->clientPolicyModel->where('id', $policy_transaction_data['client_policy_id'])->set($data)->update();
|
||
$this->policyTransactionModel->where('client_policy_id', $policy_transaction_data['client_policy_id'])->set($data)->update();
|
||
|
||
$cd_transaction_model = new ClientDepositModel();
|
||
$cd_transaction_model->where('policy_transaction_id', $id)->set($data)->update();
|
||
|
||
}else{
|
||
$this->policyTransactionModel->where('id', $id)->set($data)->update();
|
||
$this->PTCOShareDetailsModel->where('pt_id', $id)->set($data)->update();
|
||
|
||
$cd_transaction_model = new ClientDepositModel();
|
||
$cd_transaction_model->where('policy_transaction_id', $id)->set($data)->update();
|
||
|
||
}
|
||
return $this->respond(['status' => true, 'code' => 200, 'message' => 'Policy Transaction removed successfully'], 200);
|
||
} else {
|
||
|
||
return $this->respond(['status' => false, 'code' => 404, 'message' => 'Failed to remove policy transaction'], 200);
|
||
}
|
||
}
|
||
|
||
//function for soft delete for pt_co_share_details records
|
||
public function removePtCoShareRecords($primaryKeys, $pt_id)
|
||
{
|
||
if (empty($primaryKeys)) {
|
||
return false;
|
||
}
|
||
|
||
// Convert array to a comma-separated string of placeholders for query binding
|
||
$placeholders = implode(',', array_fill(0, count($primaryKeys), '?'));
|
||
|
||
// Prepare the query with proper binding
|
||
$sql = "UPDATE pt_co_share_details SET is_active = 0 WHERE pt_id = ? AND id NOT IN ($placeholders)";
|
||
|
||
// Merge pt_id with primary keys for binding
|
||
$params = array_merge([$pt_id], $primaryKeys);
|
||
|
||
// Execute the query with bound parameters
|
||
return db_connect()->query($sql, $params);
|
||
}
|
||
|
||
|
||
//------------------------------------------------------------------------------------------------
|
||
|
||
// Policy Transaction Endorsement
|
||
public function viewEndorsement()
|
||
{
|
||
// echo '<pre>';
|
||
// !dd($this->getEndorsementDataForEdit(17));
|
||
$bds_edit_pt_id = $this->request->getGet('pt_id') ?? null;
|
||
$data['tab_name'] = 'Endorsement';
|
||
$data['page_name'] = 'Endorsement';
|
||
$data['issuer'] = [1 => 'JIBS', 2 => 'Nhance'];
|
||
$data['issuer_branch'] = $this->nhanceBranchModel->where('is_active', 1)->findAll();
|
||
$data['client_type'] = [1 => 'Group', 2 => 'Individual'];
|
||
|
||
$data['policy_status'] = [
|
||
'under_process' => 'Under Process',
|
||
'client_pending' => 'Client Pending',
|
||
'insurer_pending' => 'Insurer Pending',
|
||
'co_insurer_pending' => 'Co-Insurer Pending',
|
||
'tpa_pending' => 'TPA Pending',
|
||
'validated' => 'Validated',
|
||
'cancelled' => 'Cancelled',
|
||
'instalment_pending' => 'Instalment Pending',
|
||
'completed' => 'Completed',
|
||
];
|
||
|
||
$data['invoice_status'] = [
|
||
'yet_to_generate' => 'Pending',
|
||
'generated' => 'Generated',
|
||
'send' => 'Sent',
|
||
'recived' => 'Payment Received',
|
||
];
|
||
|
||
$data['action_type'] = [
|
||
'addition' => 'Addition',
|
||
'deletion' => 'Deletion',
|
||
'addition_deletion' => 'Addition & Deletion',
|
||
'si_enhancement' => 'SI Enhancement',
|
||
'combo_a_d_si' => 'Combo A, D & SI',
|
||
'correction' => 'Correction',
|
||
'baby_addition' => 'Baby Addition',
|
||
'policy_instalment' => 'Policy Instalment',
|
||
'addition_inception' => 'Addition-Inception',
|
||
'bds_correction' => 'BDS Correction',
|
||
'policy_correction' => 'Policy Correction',
|
||
'policy_cancellation' => 'Policy Cancellation',
|
||
];
|
||
|
||
$data['date_type'] = [
|
||
'policy_issue_date' => 'Policy Issue Date',
|
||
'policy_start_date' => 'Policy Start Date',
|
||
'policy_end_date' => 'Policy End Date',
|
||
];
|
||
|
||
//filter datas
|
||
$start_date = $this->request->getGet('start_date');
|
||
$end_date = $this->request->getGet('end_date');
|
||
$client_id = $this->request->getGet('client_id');
|
||
$insurer_id = $this->request->getGet('insurer_id');
|
||
$policy_type_id = $this->request->getGet('policy_type_id');
|
||
$date_type = $this->request->getGet('date_type');
|
||
$issuer = $this->request->getGet('issuer');
|
||
$status = $this->request->getGet('status');
|
||
|
||
$start_date = (!isset($start_date) || $start_date === '' || $start_date === null) ? 0 : $start_date;
|
||
$end_date = (!isset($end_date) || $end_date === '' || $end_date === null) ? 0 : $end_date;
|
||
|
||
$client_id = (!isset($client_id) || $client_id === '' || $client_id === null) ? 0 : $client_id;
|
||
$insurer_id = (!isset($insurer_id) || $insurer_id === '' || $insurer_id === null) ? 0 : $insurer_id;
|
||
$policy_type_id = (!isset($policy_type_id) || $policy_type_id === '' || $policy_type_id === null) ? 0 : $policy_type_id;
|
||
$date_type = (!isset($date_type) || $date_type === '' || $date_type === null) ? 0 : $date_type;
|
||
$issuer = (!isset($issuer) || $issuer === '' || $issuer === null) ? 0 : $issuer;
|
||
$status = (!isset($issuer) || $status === '' || $status === null) ? 0 : $status;
|
||
|
||
if($bds_edit_pt_id == null){
|
||
$data['endorsement_data_list'] = $this->policyTransactionModel->getEndorsementTranctionListData($start_date, $end_date, $client_id, $insurer_id, $policy_type_id, $date_type, $issuer, $status);
|
||
}else{
|
||
$data['endorsement_data_list'] = [];
|
||
}
|
||
$data['client'] = $this->clientModel->where('is_active', 1)->findAll();
|
||
$data['policy_types'] = $this->policyTypeModel->where('is_active', 1)->findAll();
|
||
|
||
$data['insurer'] = $this->insurerModel->where('is_active', 1)->findAll();
|
||
// $data['tpa'] = $this->tpaModel->where('is_active', 1)->findAll();
|
||
$data['insurer_branch'] = $this->insurerBranchModel->getInsurerBranchesWithInsurerNames();
|
||
$data['tpa'] = $this->tpaBranchModel->getTpaBranchesWithTpaNames();
|
||
list($policyList, $policyListByClient) = $this->getPolicyForEndorsment();
|
||
|
||
$data['endorsementPolicies'] = $policyList;
|
||
$data['endorsementPolicyListByClient'] = $policyListByClient;
|
||
|
||
// dd($data);
|
||
// print_r($data['endorsementPolicies']);die();
|
||
|
||
$this->loadLayout('policy_transaction_endorsement_list', $data);
|
||
}
|
||
|
||
public function viewEndorsement2()
|
||
{
|
||
// echo '<pre>';
|
||
// !dd($this->getEndorsementDataForEdit(17));
|
||
$bds_edit_pt_id = $this->request->getGet('pt_id') ?? null;
|
||
$data['tab_name'] = 'Endorsements';
|
||
$data['page_name'] = 'Endorsements';
|
||
$data['issuer'] = [1 => 'JIBS', 2 => 'Nhance'];
|
||
$data['issuer_branch'] = $this->nhanceBranchModel->where('is_active', 1)->findAll();
|
||
$data['client_type'] = [1 => 'Group', 2 => 'Individual'];
|
||
|
||
$data['policy_status'] = [
|
||
'under_process' => 'Under Process',
|
||
'client_pending' => 'Client Pending',
|
||
'insurer_pending' => 'Insurer Pending',
|
||
'co_insurer_pending' => 'Co-Insurer Pending',
|
||
'tpa_pending' => 'TPA Pending',
|
||
'validated' => 'Validated',
|
||
'cancelled' => 'Cancelled',
|
||
'instalment_pending' => 'Instalment Pending',
|
||
'completed' => 'Completed',
|
||
];
|
||
|
||
$data['invoice_status'] = [
|
||
'yet_to_generate' => 'Pending',
|
||
'generated' => 'Generated',
|
||
'send' => 'Sent',
|
||
'recived' => 'Payment Received',
|
||
];
|
||
|
||
$data['action_type'] = [
|
||
'addition' => 'Addition',
|
||
'deletion' => 'Deletion',
|
||
'addition_deletion' => 'Addition & Deletion',
|
||
'si_enhancement' => 'SI Enhancement',
|
||
'combo_a_d_si' => 'Combo A, D & SI',
|
||
'correction' => 'Correction',
|
||
'baby_addition' => 'Baby Addition',
|
||
'policy_instalment' => 'Policy Instalment',
|
||
'addition_inception' => 'Addition-Inception',
|
||
'bds_correction' => 'BDS Correction',
|
||
'policy_correction' => 'Policy Correction',
|
||
'policy_cancellation' => 'Policy Cancellation',
|
||
];
|
||
|
||
$data['date_type'] = [
|
||
'policy_issue_date' => 'Policy Issue Date',
|
||
'policy_start_date' => 'Policy Start Date',
|
||
'policy_end_date' => 'Policy End Date',
|
||
];
|
||
|
||
//filter datas
|
||
$start_date = $this->request->getGet('start_date');
|
||
$end_date = $this->request->getGet('end_date');
|
||
$client_id = $this->request->getGet('client_id');
|
||
$insurer_id = $this->request->getGet('insurer_id');
|
||
$policy_type_id = $this->request->getGet('policy_type_id');
|
||
$date_type = $this->request->getGet('date_type');
|
||
$issuer = $this->request->getGet('issuer');
|
||
$status = $this->request->getGet('status');
|
||
|
||
$start_date = (!isset($start_date) || $start_date === '' || $start_date === null) ? 0 : $start_date;
|
||
$end_date = (!isset($end_date) || $end_date === '' || $end_date === null) ? 0 : $end_date;
|
||
|
||
$client_id = (!isset($client_id) || $client_id === '' || $client_id === null) ? 0 : $client_id;
|
||
$insurer_id = (!isset($insurer_id) || $insurer_id === '' || $insurer_id === null) ? 0 : $insurer_id;
|
||
$policy_type_id = (!isset($policy_type_id) || $policy_type_id === '' || $policy_type_id === null) ? 0 : $policy_type_id;
|
||
$date_type = (!isset($date_type) || $date_type === '' || $date_type === null) ? 0 : $date_type;
|
||
$issuer = (!isset($issuer) || $issuer === '' || $issuer === null) ? 0 : $issuer;
|
||
$status = (!isset($issuer) || $status === '' || $status === null) ? 0 : $status;
|
||
|
||
if($bds_edit_pt_id == null){
|
||
$data['endorsement_data_list'] = $this->policyTransactionModel->getEndorsementTranctionListData($start_date, $end_date, $client_id, $insurer_id, $policy_type_id, $date_type, $issuer, $status);
|
||
}else{
|
||
$data['endorsement_data_list'] = [];
|
||
}
|
||
$data['client'] = $this->clientModel->where('is_active', 1)->findAll();
|
||
$data['policy_types'] = $this->policyTypeModel->where('is_active', 1)->findAll();
|
||
|
||
$data['insurer'] = $this->insurerModel->where('is_active', 1)->findAll();
|
||
// $data['tpa'] = $this->tpaModel->where('is_active', 1)->findAll();
|
||
$data['insurer_branch'] = $this->insurerBranchModel->getInsurerBranchesWithInsurerNames();
|
||
$data['tpa'] = $this->tpaBranchModel->getTpaBranchesWithTpaNames();
|
||
list($policyList, $policyListByClient) = $this->getPolicyForEndorsment();
|
||
|
||
$data['endorsementPolicies'] = $policyList;
|
||
$data['endorsementPolicyListByClient'] = $policyListByClient;
|
||
|
||
// dd($data);
|
||
// print_r($data['endorsementPolicies']);die();
|
||
|
||
$this->loadLayout('policy_transaction_endorsement_list_2', $data);
|
||
}
|
||
|
||
public function createEndorsementPolicy()
|
||
{
|
||
$id = $this->request->getPost('id');
|
||
$data = $this->preparePolicyTransactionData();
|
||
$data['status'] = 'completed';
|
||
// print_r($data); die;
|
||
|
||
if (!$id) {
|
||
return $this->insertEndorsementTransaction($data);
|
||
} else {
|
||
return $this->updateEndorsementTransaction($id, $data);
|
||
}
|
||
}
|
||
|
||
private function preparePolicyTransactionData()
|
||
{
|
||
$data = $this->request->getPost();
|
||
|
||
// echo '<pre>';
|
||
// print_r($data);
|
||
// die;
|
||
|
||
if (!isset($data['policy_with_corr'])) {
|
||
$data['policy_with_corr'] = 0;
|
||
} elseif ($data['policy_with_corr']) {
|
||
$data['policy_with_corr'] = 1;
|
||
}
|
||
|
||
// if (!isset($data['is_cd_reduce_from_bds'])) {
|
||
// $data['is_cd_reduce_from_bds'] = 0;
|
||
// } elseif ($data['is_cd_reduce_from_bds']) {
|
||
// $data['is_cd_reduce_from_bds'] = 1;
|
||
// }
|
||
|
||
if (empty($data['data_received_date'])) {
|
||
$data['data_received_date'] = null;
|
||
} else {
|
||
$data['data_received_date'] = change_date_format($data['data_received_date'], 'd/m/Y', 'Y-m-d');
|
||
}
|
||
|
||
if (empty($data['policy_issue_date'])) {
|
||
$data['policy_issue_date'] = null;
|
||
} else {
|
||
$data['policy_issue_date'] = change_date_format($data['policy_issue_date'], 'd/m/Y', 'Y-m-d');
|
||
}
|
||
|
||
if (empty($data['endorse_eff_date'])) {
|
||
$data['endorse_eff_date'] = null;
|
||
} else {
|
||
$data['endorse_eff_date'] = change_date_format($data['endorse_eff_date'], 'd/m/Y', 'Y-m-d');
|
||
}
|
||
|
||
if (empty($data['install_due_date'])) {
|
||
$data['install_due_date'] = null;
|
||
} else {
|
||
$data['install_due_date'] = change_date_format($data['install_due_date'], 'd/m/Y', 'Y-m-d');
|
||
}
|
||
|
||
if (!empty($data['month'])) {
|
||
$month = '01/' . $data['month'];
|
||
$data['month'] = change_date_format($month, 'd/M/Y', 'Y-m-d');
|
||
}
|
||
|
||
if (empty($data['last_action_date'])) {
|
||
$data['last_action_date'] = null;
|
||
} else {
|
||
$data['last_action_date'] = change_date_format($data['last_action_date']);
|
||
}
|
||
|
||
// print_r($data); die;
|
||
|
||
// Separate Insurer and TPA Branch IDs and IDs
|
||
if (isset($data['insurer_id']) && !empty($data['insurer_id'])) {
|
||
list($data['insurer_branch_id'], $data['insurer_id']) = explode('-', $data['insurer_id']);
|
||
if (isset($data['tpa']) && !empty($data['tpa'])) {
|
||
list($data['tpa_branch_id'], $data['tpa_id']) = explode('-', $data['tpa']);
|
||
}
|
||
}
|
||
|
||
$issue_type = $this->policyTransactionModel
|
||
->where('action_type', 'inception')
|
||
->where('client_id', $this->request->getPost('client_id'))
|
||
// ->where('client_policy_id', $this->request->getPost('client_policy_id'))
|
||
->where('id', $this->request->getPost('client_policy_id'))
|
||
->where('policy_transaction.is_active', 1)
|
||
->first();
|
||
|
||
$data['tsi'] = generate_tsi_code($issue_type['issue_type'] ?? 1);
|
||
|
||
if (!isset($data['client_branch_id']) || $data['client_branch_id'] == "") {
|
||
$client_branch_id = $issue_type['client_branch_id'];
|
||
}else{
|
||
$client_branch_id = $data['client_branch_id'];
|
||
}
|
||
|
||
$data['is_cd_reduce_from_bds'] = (isset($issue_type['policy_type_id']) && $issue_type['policy_type_id'] > 7 && $data['client_type'] == 1) ? 1 : 0;
|
||
|
||
// if($data['bro_payable_by'] == ""){
|
||
// $data['bro_payable_by'] = $issue_type['bro_payable_by'];
|
||
// }
|
||
|
||
if (!$data['id']) {
|
||
|
||
$data += [
|
||
'issuer' => 2,
|
||
'issuer_branch' => $data['issuer_branch'] ?? 1,
|
||
'client_type' => $data['client_type'] ?? $issue_type['client_type'] ?? null,
|
||
'policy_type_id' => $issue_type['policy_type_id'] ?? null,
|
||
'issue_type' => $issue_type['issue_type'] ?? null,
|
||
'source_client_policy_id' => $issue_type['source_client_policy_id'] ?? null,
|
||
'cd_ac_no' => isset($data['cd_ac_no']) && !empty($data['cd_ac_no']) ? $data['cd_ac_no'] : $issue_type['cd_ac_no'] ?? null,
|
||
'cd_ac_pk' => isset($data['cd_ac_pk']) && !empty($data['cd_ac_pk']) ? $data['cd_ac_pk'] : $issue_type['cd_ac_pk'] ?? null,
|
||
// 'policy_issue_date' => $issue_type['policy_issue_date'] ?? null,
|
||
'policy_start_date' => $issue_type['policy_start_date'] ?? null,
|
||
'policy_end_date' => $issue_type['policy_end_date'] ?? null,
|
||
'revenue_type' => $issue_type['revenue_type'] ?? null,
|
||
'co_share' => $issue_type['co_share'] ?? 0,
|
||
'bro_payable_by' => $data['bro_payable_by'] == "" ? $issue_type['bro_payable_by'] ?? 0 : $data['bro_payable_by'],
|
||
'installment' => $issue_type['installment'] ?? null,
|
||
'installment_data' => $issue_type['installment_data'] ?? null,
|
||
'location' => $issue_type['location'] ?? null,
|
||
'links' => $issue_type['links'] ?? null,
|
||
'stage' => $issue_type['stage'] ?? null,
|
||
'etat' => $issue_type['etat'] ?? null,
|
||
'etat_band' => $issue_type['etat_band'] ?? null,
|
||
'edate' => $issue_type['edate'] ?? null,
|
||
'renewal_date' => $issue_type['renewal_date'] ?? null,
|
||
'rollover_date' => $issue_type['rollover_date'] ?? null,
|
||
'policy_holder_name' => $issue_type['policy_holder_name'] ?? null,
|
||
'same_as_proposer' => $issue_type['same_as_proposer'] ?? 1,
|
||
'ref' => $issue_type['ref'] ?? null,
|
||
'spl' => $issue_type['spl'] ?? null,
|
||
'fund_received' => $issue_type['fund_received'] ?? null,
|
||
'listed_insurers' => $issue_type['listed_insurers'] ?? null,
|
||
'ppteam' => $issue_type['ppteam'] ?? null,
|
||
'sales_generated_by' => $issue_type['sales_generated_by'] ?? null,
|
||
'serviced_by' => $issue_type['serviced_by'] ?? null,
|
||
'salse_person_manager_id' => $issue_type['salse_person_manager_id'] ?? null,
|
||
'service_person_manager_id' => $issue_type['service_person_manager_id'] ?? null,
|
||
'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,
|
||
];
|
||
|
||
$data['client_branch_id'] = $client_branch_id;
|
||
}
|
||
|
||
// print_r($issue_type);
|
||
// print_r($data);
|
||
// die;
|
||
|
||
return $data;
|
||
}
|
||
|
||
private function insertEndorsementTransaction($data)
|
||
{
|
||
$insert = $this->policyTransactionModel->insert($data);
|
||
|
||
if ($insert) {
|
||
|
||
$this->insertTransactionStatus($insert, $data, 1);
|
||
$this->handleCompletedStatus($data, $insert);
|
||
$this->insertOrUpdateCoShareDetails($data, $insert);
|
||
|
||
return $this->respond(['status' => true, 'message' => 'Endorsement transaction created successfully'], 200);
|
||
}
|
||
|
||
return $this->respond(['status' => false, 'message' => 'Endorsement transaction creation failed'], 400);
|
||
}
|
||
|
||
private function updateEndorsementTransaction($id, $data)
|
||
{
|
||
$old_endorse_data = $this->policyTransactionModel->where('id', $id)->where('is_active', 1)->first();
|
||
$update = $this->policyTransactionModel->where('id', $id)->set($data)->update();
|
||
|
||
if ($update) {
|
||
|
||
$this->insertTransactionStatus($id, $data, 1);
|
||
// if($old_endorse_data['status'] != "completed"){
|
||
// $this->handleCompletedStatus($data, $id);
|
||
// }
|
||
$this->insertOrUpdateCoShareDetails($data, $id);
|
||
|
||
|
||
return $this->respond(['status' => true, 'message' => 'Endorsement transaction updated successfully'], 200);
|
||
}
|
||
|
||
return $this->respond(['status' => false, 'message' => 'Endorsement transaction update failed'], 400);
|
||
}
|
||
|
||
private function handleCompletedStatus($data, $policy_tran_id)
|
||
{
|
||
if ($data['client_type'] == 1 && $data['status'] == 'completed' && $data['is_cd_reduce_from_bds'] == 1) {
|
||
|
||
$tolamt = (int) $data['total'][0] ?? 0;
|
||
|
||
if(!empty($tolamt)){
|
||
$description = 'The following amount of Rs. ' . round($tolamt, 2) . '/- has been' .
|
||
($data['action_type'] == 'deletion' ? ' Credit ' : ' Debit ') . 'from the policy transaction (BDS)';
|
||
|
||
$cd_tranction_data = [
|
||
'amount' => abs($tolamt),
|
||
'sub_type_id' => $data['action_type'] == 'deletion' ? 3 : 4,
|
||
'client_id' => $data['client_id'],
|
||
'client_policy_id' => $data['client_policy_id'],
|
||
'endorsement_no' => null,
|
||
'cd_ac_no' => $data['cd_ac_no'] ?? null,
|
||
'insurer_id' => $data['insurer_id'],
|
||
'description' => $description,
|
||
'transaction_type' => $data['action_type'] == 'deletion' ? 'Credit' : 'Debit',
|
||
'updated_by' => get_session_userid(),
|
||
'event_name' => $data['action_type'],
|
||
'is_active' => 1,
|
||
'cd_ac_pk' => $data['cd_ac_pk'] ?? null,
|
||
'pt_id' => $policy_tran_id ?? null,
|
||
];
|
||
|
||
$result = DepositHelper::saveDeposit($cd_tranction_data, get_session_userid());
|
||
|
||
if(isset($result['success']) && $result['success']){
|
||
$update_data['ct_tran_id'] = $result['insert_id'];
|
||
$this->policyTransactionModel->where('id', $policy_tran_id)->set($update_data)->update();
|
||
}
|
||
}
|
||
|
||
}
|
||
}
|
||
|
||
public function getEndorsementDataForEdit($id)
|
||
{
|
||
$data = $this->policyTransactionModel
|
||
->select('
|
||
policy_transaction.*,
|
||
clients.short_name as client_short_name,
|
||
clients.client_type,
|
||
(
|
||
select last_action_date
|
||
from policy_transaction_status
|
||
where policy_tran_id = policy_transaction.id
|
||
and status = policy_transaction.status
|
||
order by id desc
|
||
limit 1
|
||
|
||
) as last_action_date
|
||
')
|
||
->join('clients', 'clients.id = policy_transaction.client_id')
|
||
->join('client_policy', 'policy_transaction.client_policy_id = client_policy.id', 'left')
|
||
->where('policy_transaction.id', $id)
|
||
->where('policy_transaction.is_active', 1)
|
||
->orderBy('id', 'asc')
|
||
->first();
|
||
|
||
$pt_id = null;
|
||
|
||
if(!empty($data)){
|
||
$inception_data = $this->policyTransactionModel
|
||
->where('policy_no', $data['policy_no'])
|
||
->where('client_id', $data['client_id'])
|
||
->where('action_type', 'inception')
|
||
->first();
|
||
$pt_id = $inception_data['id'];
|
||
}
|
||
|
||
if (!empty($data['policy_start_date'])) {
|
||
$data['policy_start_date'] = change_date_format($data['policy_start_date'], 'Y-m-d', 'd/m/Y');
|
||
}
|
||
|
||
if (!empty($data['policy_end_date'])) {
|
||
$data['policy_end_date'] = change_date_format($data['policy_end_date'], 'Y-m-d', 'd/m/Y');
|
||
}
|
||
|
||
if (!empty($data['data_received_date'])) {
|
||
$data['data_received_date'] = change_date_format($data['data_received_date'], 'Y-m-d', 'd/m/Y');
|
||
}
|
||
|
||
if (!empty($data['policy_issue_date'])) {
|
||
$data['policy_issue_date'] = change_date_format($data['policy_issue_date'], 'Y-m-d', 'd/m/Y');
|
||
}
|
||
|
||
if (!empty($data['endorse_eff_date'])) {
|
||
$data['endorse_eff_date'] = change_date_format($data['endorse_eff_date'], 'Y-m-d', 'd/m/Y');
|
||
}
|
||
|
||
if (!empty($data['install_due_date'])) {
|
||
$data['install_due_date'] = change_date_format($data['install_due_date'], 'Y-m-d', 'd/m/Y');
|
||
}
|
||
|
||
if (!empty($data['last_action_date'])) {
|
||
$data['last_action_date'] = change_date_format($data['last_action_date'], 'Y-m-d', 'd/m/Y');
|
||
}
|
||
|
||
if (!empty($data['month'])) {
|
||
$data['month'] = change_date_format($data['month'], 'Y-m-d', 'M/Y');
|
||
}
|
||
|
||
// print_r($data); die;
|
||
|
||
//get PT Co-Share Details
|
||
$data['pt_co_share_details'] = $this->PTCOShareDetailsModel
|
||
|
||
->select("
|
||
pt_co_share_details.*,
|
||
|
||
(
|
||
SELECT
|
||
COUNT(*)
|
||
FROM
|
||
co_share_stmt_details
|
||
WHERE
|
||
co_share_stmt_details.co_share_id = pt_co_share_details.id
|
||
AND co_share_stmt_details.is_active = 1
|
||
) AS record_count,
|
||
|
||
(
|
||
SELECT
|
||
SUM(actual_bp_amt)
|
||
FROM
|
||
co_share_stmt_details
|
||
WHERE
|
||
co_share_id = pt_co_share_details.id
|
||
AND is_active = 1
|
||
|
||
) AS actual_bp_amount,
|
||
|
||
(
|
||
SELECT
|
||
SUM(actual_tp_amt)
|
||
FROM
|
||
co_share_stmt_details
|
||
WHERE
|
||
co_share_id = pt_co_share_details.id
|
||
AND is_active = 1
|
||
|
||
) AS actual_tp_amount,
|
||
|
||
(
|
||
SELECT
|
||
SUM(actual_tep_amt)
|
||
FROM
|
||
co_share_stmt_details
|
||
WHERE
|
||
co_share_id = pt_co_share_details.id
|
||
AND is_active = 1
|
||
|
||
) AS actual_tep_amount,
|
||
|
||
(
|
||
SELECT
|
||
SUM(actual_bp_per)
|
||
FROM
|
||
co_share_stmt_details
|
||
WHERE
|
||
co_share_id = pt_co_share_details.id
|
||
AND is_active = 1
|
||
|
||
) AS actual_bp_percentage,
|
||
|
||
(
|
||
SELECT
|
||
SUM(actual_tp_per)
|
||
FROM
|
||
co_share_stmt_details
|
||
WHERE
|
||
co_share_id = pt_co_share_details.id
|
||
AND is_active = 1
|
||
|
||
) AS actual_tp_percentage,
|
||
|
||
(
|
||
SELECT
|
||
SUM(actual_tep_per)
|
||
FROM
|
||
co_share_stmt_details
|
||
WHERE
|
||
co_share_id = pt_co_share_details.id
|
||
AND is_active = 1
|
||
|
||
) AS actual_tep_percentage,
|
||
|
||
|
||
(
|
||
SELECT
|
||
SUM(actual_bp_brokerage_amt)
|
||
FROM
|
||
co_share_stmt_details
|
||
WHERE
|
||
co_share_id = pt_co_share_details.id
|
||
AND is_active = 1
|
||
|
||
) AS actual_bp_brokerage_amount,
|
||
|
||
|
||
(
|
||
SELECT
|
||
SUM(actual_tp_brokerage_amt)
|
||
FROM
|
||
co_share_stmt_details
|
||
WHERE
|
||
co_share_id = pt_co_share_details.id
|
||
AND is_active = 1
|
||
|
||
) AS actual_tp_brokerage_amount,
|
||
|
||
|
||
(
|
||
SELECT
|
||
SUM(actual_tep_brokerage_amt)
|
||
FROM
|
||
co_share_stmt_details
|
||
WHERE
|
||
co_share_id = pt_co_share_details.id
|
||
AND is_active = 1
|
||
|
||
) AS actual_tep_brokerage_amount,
|
||
|
||
DATE_FORMAT(pt_policy_issue_date, '%d/%m/%Y') AS pt_policy_issue_date
|
||
|
||
")
|
||
->where('pt_id', $id)
|
||
->where('is_active', 1)
|
||
->orderBy('id', 'asc')
|
||
->findAll();
|
||
|
||
// print_r($data['endorse_eff_date']); die;
|
||
|
||
$pt_bp_amt = $this->PTCOShareDetailsModel
|
||
->select('bp_amt, amount')
|
||
->where('pt_id', $id)
|
||
->where('co_share_type', 1)
|
||
->where('is_active', 1)
|
||
->first();
|
||
|
||
// dd(db_connect()->getLastQuery() ,$pt_bp_amt);
|
||
$data['base_cd_amount'] = $pt_bp_amt['amount'] ?? null;
|
||
|
||
if ($data) {
|
||
return $this->respond(['status' => true, 'data' => $data, 'pt_id' => $pt_id], 200);
|
||
} else {
|
||
return $this->respond(['status' => false], 200);
|
||
}
|
||
}
|
||
|
||
public function getEndorsementDataForEdit2($id)
|
||
{
|
||
$data = $this->policyTransactionModel
|
||
->select('
|
||
policy_transaction.*,
|
||
clients.short_name as client_short_name,
|
||
clients.client_type,
|
||
(
|
||
select last_action_date
|
||
from policy_transaction_status
|
||
where policy_tran_id = policy_transaction.id
|
||
and status = policy_transaction.status
|
||
order by id desc
|
||
limit 1
|
||
|
||
) as last_action_date
|
||
')
|
||
->join('clients', 'clients.id = policy_transaction.client_id')
|
||
->join('client_policy', 'policy_transaction.client_policy_id = client_policy.id', 'left')
|
||
->where('policy_transaction.id', $id)
|
||
->where('policy_transaction.is_active', 1)
|
||
->orderBy('id', 'asc')
|
||
->first();
|
||
|
||
$pt_id = null;
|
||
|
||
if(!empty($data)){
|
||
$inception_data = $this->policyTransactionModel
|
||
->where('policy_no', $data['policy_no'])
|
||
->where('client_id', $data['client_id'])
|
||
->where('action_type', 'inception')
|
||
->first();
|
||
$pt_id = $inception_data['id'];
|
||
}
|
||
|
||
if (!empty($data['policy_start_date'])) {
|
||
$data['policy_start_date'] = change_date_format($data['policy_start_date'], 'Y-m-d', 'd/m/Y');
|
||
}
|
||
|
||
if (!empty($data['policy_end_date'])) {
|
||
$data['policy_end_date'] = change_date_format($data['policy_end_date'], 'Y-m-d', 'd/m/Y');
|
||
}
|
||
|
||
if (!empty($data['data_received_date'])) {
|
||
$data['data_received_date'] = change_date_format($data['data_received_date'], 'Y-m-d', 'd/m/Y');
|
||
}
|
||
|
||
if (!empty($data['policy_issue_date'])) {
|
||
$data['policy_issue_date'] = change_date_format($data['policy_issue_date'], 'Y-m-d', 'd/m/Y');
|
||
}
|
||
|
||
if (!empty($data['endorse_eff_date'])) {
|
||
$data['endorse_eff_date'] = change_date_format($data['endorse_eff_date'], 'Y-m-d', 'd/m/Y');
|
||
}
|
||
|
||
if (!empty($data['install_due_date'])) {
|
||
$data['install_due_date'] = change_date_format($data['install_due_date'], 'Y-m-d', 'd/m/Y');
|
||
}
|
||
|
||
if (!empty($data['last_action_date'])) {
|
||
$data['last_action_date'] = change_date_format($data['last_action_date'], 'Y-m-d', 'd/m/Y');
|
||
}
|
||
|
||
if (!empty($data['month'])) {
|
||
$data['month'] = change_date_format($data['month'], 'Y-m-d', 'M/Y');
|
||
}
|
||
|
||
// print_r($data); die;
|
||
|
||
//get PT Co-Share Details
|
||
$data['pt_co_share_details'] = $this->PTCOShareDetailsModel
|
||
|
||
->select("
|
||
pt_co_share_details.*,
|
||
|
||
(
|
||
SELECT
|
||
COUNT(*)
|
||
FROM
|
||
co_share_stmt_details
|
||
WHERE
|
||
co_share_stmt_details.co_share_id = pt_co_share_details.id
|
||
AND co_share_stmt_details.is_active = 1
|
||
) AS record_count,
|
||
|
||
(
|
||
SELECT
|
||
SUM(actual_bp_amt)
|
||
FROM
|
||
co_share_stmt_details
|
||
WHERE
|
||
co_share_id = pt_co_share_details.id
|
||
AND is_active = 1
|
||
|
||
) AS actual_bp_amount,
|
||
|
||
(
|
||
SELECT
|
||
SUM(actual_tp_amt)
|
||
FROM
|
||
co_share_stmt_details
|
||
WHERE
|
||
co_share_id = pt_co_share_details.id
|
||
AND is_active = 1
|
||
|
||
) AS actual_tp_amount,
|
||
|
||
(
|
||
SELECT
|
||
SUM(actual_tep_amt)
|
||
FROM
|
||
co_share_stmt_details
|
||
WHERE
|
||
co_share_id = pt_co_share_details.id
|
||
AND is_active = 1
|
||
|
||
) AS actual_tep_amount,
|
||
|
||
(
|
||
SELECT
|
||
SUM(actual_bp_per)
|
||
FROM
|
||
co_share_stmt_details
|
||
WHERE
|
||
co_share_id = pt_co_share_details.id
|
||
AND is_active = 1
|
||
|
||
) AS actual_bp_percentage,
|
||
|
||
(
|
||
SELECT
|
||
SUM(actual_tp_per)
|
||
FROM
|
||
co_share_stmt_details
|
||
WHERE
|
||
co_share_id = pt_co_share_details.id
|
||
AND is_active = 1
|
||
|
||
) AS actual_tp_percentage,
|
||
|
||
(
|
||
SELECT
|
||
SUM(actual_tep_per)
|
||
FROM
|
||
co_share_stmt_details
|
||
WHERE
|
||
co_share_id = pt_co_share_details.id
|
||
AND is_active = 1
|
||
|
||
) AS actual_tep_percentage,
|
||
|
||
|
||
(
|
||
SELECT
|
||
SUM(actual_bp_brokerage_amt)
|
||
FROM
|
||
co_share_stmt_details
|
||
WHERE
|
||
co_share_id = pt_co_share_details.id
|
||
AND is_active = 1
|
||
|
||
) AS actual_bp_brokerage_amount,
|
||
|
||
|
||
(
|
||
SELECT
|
||
SUM(actual_tp_brokerage_amt)
|
||
FROM
|
||
co_share_stmt_details
|
||
WHERE
|
||
co_share_id = pt_co_share_details.id
|
||
AND is_active = 1
|
||
|
||
) AS actual_tp_brokerage_amount,
|
||
|
||
|
||
(
|
||
SELECT
|
||
SUM(actual_tep_brokerage_amt)
|
||
FROM
|
||
co_share_stmt_details
|
||
WHERE
|
||
co_share_id = pt_co_share_details.id
|
||
AND is_active = 1
|
||
|
||
) AS actual_tep_brokerage_amount,
|
||
|
||
DATE_FORMAT(pt_policy_issue_date, '%d/%m/%Y') AS pt_policy_issue_date
|
||
|
||
")
|
||
->where('pt_id', $id)
|
||
->where('is_active', 1)
|
||
->orderBy('id', 'asc')
|
||
->findAll();
|
||
|
||
// print_r($data['endorse_eff_date']); die;
|
||
|
||
$pt_bp_amt = $this->PTCOShareDetailsModel
|
||
->select('bp_amt, amount')
|
||
->where('pt_id', $id)
|
||
->where('co_share_type', 1)
|
||
->where('is_active', 1)
|
||
->first();
|
||
|
||
// dd(db_connect()->getLastQuery() ,$pt_bp_amt);
|
||
$data['base_cd_amount'] = $pt_bp_amt['amount'] ?? null;
|
||
|
||
if ($data) {
|
||
return $this->respond(['status' => true, 'data' => $data, 'pt_id' => $pt_id], 200);
|
||
} else {
|
||
return $this->respond(['status' => false], 200);
|
||
}
|
||
}
|
||
|
||
//------------------------------------------------------------------------------------------------
|
||
|
||
//file upload function
|
||
public function uploadFile($docs_name = null, $files = null, $pt_id = null)
|
||
{
|
||
$GoogleDriveController = new GoogleDriveController();
|
||
|
||
|
||
if(empty($docs_name) && empty($files) && empty($pt_id) && $this->request){
|
||
$files = $this->request->getFiles();
|
||
$docs_name = $this->request->getPost('doc_name');
|
||
$pt_id = $this->request->getPost('pt_id');
|
||
$client_policy_id = $this->request->getPost('client_policy_id');
|
||
}
|
||
|
||
$uploadFilePath = WRITEPATH . 'uploads/client_kyc_documents';
|
||
|
||
$uploadData = [];
|
||
|
||
foreach ($docs_name as $key => $docName) {
|
||
|
||
// Get the corresponding file for this document name
|
||
$file = $files['file'][$key];
|
||
|
||
if (!empty($docName) && $file->isValid() && !$file->hasMoved()) {
|
||
|
||
// Upload the file
|
||
$uploadedFileName = file_Upload_for_lead($file, $uploadFilePath);
|
||
|
||
if ($uploadedFileName) {
|
||
// Prepare data for each document upload
|
||
$docData = [
|
||
'pt_id' => $pt_id,
|
||
'doc_name' => $docName,
|
||
'file_name' => $uploadedFileName,
|
||
'created_by' => get_session_userid(),
|
||
];
|
||
|
||
// $uploadFilePath = $uploadFilePath . '/' . $uploadedFileName;
|
||
|
||
// $GoogleDriveController->uploadFiletoGdrive(client_policy_id: $client_policy_id, doc_type: 'POLICY', file_path: $uploadFilePath, file_name: $uploadedFileName);
|
||
|
||
// Insert into database
|
||
$insert = $this->PTFileModel->insert($docData);
|
||
|
||
if ($insert) {
|
||
$uploadData[] = $docData;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
if(!empty($docs_name) && !empty($files) && !empty($pt_id) && !$this->request){
|
||
return true;
|
||
}
|
||
|
||
// print_r($uploadData); die;
|
||
|
||
// $uploadData = uploadFilesToGoogleDrive($files['file'], $doc_name, $pt_id);
|
||
|
||
if (!empty($uploadData)) {
|
||
|
||
$ptFileQuery = $this->PTFileModel
|
||
->join('policy_transaction', 'pt_files.pt_id = policy_transaction.id')
|
||
->where('pt_files.pt_id', $pt_id)
|
||
->where('pt_files.is_active', 1);
|
||
|
||
if (!in_array(get_role_id(), [1, 5]) && empty(array_intersect(user_team(), [MANAGEMENT_TEAM_ID, FINANCE_TEAM_ID, BUSINESS_TEAM_ID]))) {
|
||
|
||
if (get_role_id() == 4 && in_array(POS_TEAM_ID, user_team())) {
|
||
$ptFileQuery->where('pt_files.created_by', get_session_userid());
|
||
}
|
||
}
|
||
|
||
$data['pt_files'] = $ptFileQuery->findAll();
|
||
|
||
return $this->respond(['status' => true, 'message' => 'File uploaded successfully in G-Drive', 'data' => $data]);
|
||
} else {
|
||
return $this->respond(['status' => false, 'message' => 'Failed to upload file in G-Drive']);
|
||
}
|
||
}
|
||
|
||
// update Invoice Status
|
||
public function updateInvoiceStatus()
|
||
{
|
||
$ids = $this->request->getPost('ids');
|
||
$ids = json_decode($ids);
|
||
|
||
// var_dump($ids); die;
|
||
|
||
$data['invoice_status'] = $this->request->getPost('invoice_status');
|
||
if ($this->request->getPost('invoice_status') == 'generated') {
|
||
$data['invoice_no'] = $this->request->getPost('invoice_no');
|
||
}
|
||
|
||
|
||
$update = $this->policyTransactionModel
|
||
->whereIn('id', $ids)
|
||
->set($data)
|
||
->update();
|
||
|
||
|
||
if ($update) {
|
||
|
||
return $this->respond(['status' => true, 'data' => $ids, 'message' => 'Invoice status updated successfully'], 200);
|
||
} else {
|
||
return $this->respond(['status' => true, 'data' => $ids, 'message' => 'Failed to update invoice status'], 200);
|
||
}
|
||
}
|
||
|
||
public function removeCoShareData($id)
|
||
{
|
||
$this->myLogger->logme('error', 'PT Co Share Detailes Remove function called');
|
||
|
||
$data = [
|
||
'updated_by' => get_session_userid(),
|
||
'is_active' => 0
|
||
];
|
||
|
||
$update = $this->PTCOShareDetailsModel->where('id', $id)->set($data)->update();
|
||
|
||
if ($update) {
|
||
return $this->respond(['status' => true, 'code' => 200, 'message' => 'Data removed successfully'], 200);
|
||
} else {
|
||
return $this->respond(['status' => false, 'code' => 404, 'message' => 'Failed to remove data'], 200);
|
||
}
|
||
}
|
||
|
||
public function getPTCOShareCount($client_id, $client_policy_id)
|
||
{
|
||
$totalCount = $this->PTCOShareDetailsModel
|
||
->select("
|
||
pt_co_share_details.*,
|
||
policy_transaction.bro_payable_by,
|
||
policy_transaction.cd_ac_pk,
|
||
(
|
||
select cd_ac_no
|
||
from cd_master
|
||
where id = policy_transaction.cd_ac_pk
|
||
) as cd_account_no,
|
||
(
|
||
select balance
|
||
from cash_deposit
|
||
where cd_ac_pk = policy_transaction.cd_ac_pk
|
||
and is_active = 1
|
||
order by id desc
|
||
limit 1
|
||
) as cd_amount,
|
||
")
|
||
->join('policy_transaction', 'policy_transaction.id = pt_co_share_details.pt_id')
|
||
->where('policy_transaction.client_id', $client_id)
|
||
// ->where('policy_transaction.client_policy_id', $client_policy_id)
|
||
->where('policy_transaction.id', $client_policy_id)
|
||
->where('policy_transaction.action_type', 'inception')
|
||
->where('policy_transaction.is_active', 1)
|
||
->findAll();
|
||
|
||
$is_copay_yes = $this->policyTransactionModel
|
||
->where('client_id', $client_id)
|
||
// ->where('client_policy_id', $client_policy_id)
|
||
->where('id', $client_policy_id)
|
||
->where('action_type', 'inception')
|
||
->where('is_active', 1)
|
||
->first();
|
||
|
||
$cd_ac_no = db_connect()->table('cd_master')->where('id', $is_copay_yes['cd_ac_pk'] ?? null)->get()->getRowArray();
|
||
|
||
if ($totalCount) {
|
||
return $this->respond(['status' => true, 'code' => 200, 'data' => $totalCount, 'is_copay_yes' => $is_copay_yes, "cd_master_data" => $cd_ac_no], 200);
|
||
} else {
|
||
$insurer_data = $this->clientPolicyModel->where('id', $client_policy_id)->where('is_active', 1)->first();
|
||
return $this->respond(['status' => false, 'code' => 404, 'message' => 'There is no policy inception data.'], 200);
|
||
}
|
||
}
|
||
|
||
public function checkInvoiceStatus($pt_id)
|
||
{
|
||
$data = $this->policyTransactionModel
|
||
->join('pt_co_share_details', 'policy_transaction.id = pt_co_share_details.pt_id')
|
||
->join('insurer_statements', 'pt_co_share_details.statement_id = insurer_statements.id')
|
||
->where('policy_transaction.id', $pt_id)
|
||
->where('policy_transaction.is_active', 1)
|
||
->where('pt_co_share_details.is_active', 1)
|
||
->where('pt_co_share_details.statement_id IS NOT NULL')
|
||
->where('insurer_statements.invoice_no IS NOT NULL')
|
||
->countAllResults();
|
||
|
||
if ($data) {
|
||
return $this->respond(['status' => true, 'count' => $data, 'code' => 200], 200);
|
||
} else {
|
||
return $this->respond(['status' => false, 'count' => 0, 'message' => 'No Data Found', 'code' => 404], 200);
|
||
}
|
||
}
|
||
|
||
public function getBasePolicy($client_id, $client_branch_id)
|
||
{
|
||
$data = $this->clientPolicyModel
|
||
->select('client_policy.*, policy_type.policy_type')
|
||
->join('policy_type', 'policy_type.id = client_policy.policy_type_id')
|
||
->where('client_policy.client_id', $client_id)
|
||
->where('client_policy.client_branch_id', $client_branch_id)
|
||
->whereIn('client_policy.policy_type_id', [2, 3])
|
||
->where('client_policy.is_active', 1)
|
||
->findAll();
|
||
|
||
if ($data) {
|
||
return $this->respond(['status' => true, 'data' => $data, 'code' => 200], 200);
|
||
} else {
|
||
return $this->respond(['status' => false, 'count' => 0, 'message' => 'No Data Found', 'code' => 404], 200);
|
||
}
|
||
}
|
||
|
||
//---------------------------------------------------------------------------------------------------
|
||
|
||
//get BDS Reports data old function
|
||
public function reportBDSOld()
|
||
{
|
||
$data['tab_name'] = 'BDS Report';
|
||
$data['page_name'] = 'BDS Report';
|
||
|
||
$data['issuer'] = [1 => 'JIBS', 2 => 'Nhance'];
|
||
$data['client_type'] = [1 => 'Group', 2 => 'Individual'];
|
||
$data['issuing_type'] = [1 => 'Fresh', 2 => 'Renewal', 3 => 'Roll Over'];
|
||
$data['policy_status'] = [
|
||
'pending' => 'Pending',
|
||
'exported_to_insurer' => 'Exported to Insurer',
|
||
'imported_from_insurer' => 'Imported from Insurer',
|
||
'exported_to_tpa' => 'Exported to TPA',
|
||
'imported_from_tpa' => 'Imported from TPA',
|
||
'completed' => 'Completed'
|
||
];
|
||
$data['invoice_status_array'] = [
|
||
'yet_to_generate' => 'Yet to Generate',
|
||
'generated' => 'Generated',
|
||
'send' => 'Send',
|
||
'recived' => 'Recived',
|
||
];
|
||
$data['date_type'] = [
|
||
'policy_issue_date' => 'Policy Issue Date',
|
||
'policy_start_date' => 'Policy Start Date',
|
||
'policy_end_date' => 'Policy End Date',
|
||
'data_received_date' => 'Data Received Date',
|
||
'closure_date' => 'Closure Date',
|
||
];
|
||
|
||
$data['insurer'] = $this->insurerModel->where('is_active', 1)->findAll();
|
||
$data['policy_types'] = $this->policyTypeModel->where('is_active', 1)->findAll();
|
||
$data['clients'] = $this->clientModel->where('is_active', 1)->findAll();
|
||
|
||
//filter datas
|
||
$start_date = $this->request->getGet('start_date');
|
||
$end_date = $this->request->getGet('end_date');
|
||
$client_id = $this->request->getGet('client_id');
|
||
$insurer_id = $this->request->getGet('insurer_id');
|
||
$policy_type_id = $this->request->getGet('policy_type_id');
|
||
$date_type = $this->request->getGet('date_type');
|
||
$issuer = $this->request->getGet('issuer');
|
||
|
||
$start_date = (!isset($start_date) || $start_date === '' || $start_date === null) ? 0 : $start_date;
|
||
$end_date = (!isset($end_date) || $end_date === '' || $end_date === null) ? 0 : $end_date;
|
||
|
||
$client_id = (!isset($client_id) || $client_id === '' || $client_id === null) ? 0 : $client_id;
|
||
$insurer_id = (!isset($insurer_id) || $insurer_id === '' || $insurer_id === null) ? 0 : $insurer_id;
|
||
$policy_type_id = (!isset($policy_type_id) || $policy_type_id === '' || $policy_type_id === null) ? 0 : $policy_type_id;
|
||
$date_type = (!isset($date_type) || $date_type === '' || $date_type === null) ? 0 : $date_type;
|
||
$issuer = (!isset($issuer) || $issuer === '' || $issuer === null) ? 0 : $issuer;
|
||
|
||
|
||
//Actual data for the list
|
||
$data['report_list'] = $this->policyTransactionModel->getBDSReportList($start_date, $end_date, $client_id, $insurer_id, $policy_type_id, $date_type, $issuer);
|
||
// dd($data);
|
||
|
||
$this->loadLayout('report_bds_filter', $data);
|
||
}
|
||
|
||
//get BDS Reports data New Function
|
||
public function reportBDS()
|
||
{
|
||
|
||
$data['tab_name'] = 'BDS Report';
|
||
$data['page_name'] = 'BDS Report';
|
||
|
||
$data['issuer'] = [1 => 'JIBS', 2 => 'Nhance'];
|
||
$data['client_type'] = [1 => 'Group', 2 => 'Individual'];
|
||
$data['issuing_type'] = [1 => 'Fresh', 2 => 'Renewal', 3 => 'Roll Over'];
|
||
$data['policy_status'] = [
|
||
'pending' => 'Pending',
|
||
'exported_to_insurer' => 'Exported to Insurer',
|
||
'imported_from_insurer' => 'Imported from Insurer',
|
||
'exported_to_tpa' => 'Exported to TPA',
|
||
'imported_from_tpa' => 'Imported from TPA',
|
||
'completed' => 'Completed'
|
||
];
|
||
$data['invoice_status_array'] = [
|
||
'yet_to_generate' => 'Yet to Generate',
|
||
'generated' => 'Generated',
|
||
'send' => 'Send',
|
||
'recived' => 'Recived',
|
||
];
|
||
$data['date_type'] = [
|
||
'policy_issue_date' => 'Policy Issue Date',
|
||
'policy_start_date' => 'Policy Start Date',
|
||
'policy_end_date' => 'Policy End Date',
|
||
'data_received_date' => 'Data Received Date',
|
||
'closure_date' => 'Closure Date',
|
||
'statement_month' => 'Statement Month',
|
||
];
|
||
|
||
$data['insurer'] = $this->insurerModel->where('is_active', 1)->findAll();
|
||
$data['policy_types'] = $this->policyTypeModel->where('is_active', 1)->findAll();
|
||
$data['clients'] = $this->clientModel->where('is_active', 1)->findAll();
|
||
$data['users'] = $this->userModel->where('is_active', 1)->findAll();
|
||
$data['policy_count'] = $this->policyTransactionModel->where('is_active', 1)->countAllResults();
|
||
|
||
|
||
//filter datas
|
||
$start_date = $this->request->getGet('start_date');
|
||
$end_date = $this->request->getGet('end_date');
|
||
$client_id = $this->request->getGet('client_id');
|
||
$insurer_id = $this->request->getGet('insurer_id');
|
||
$policy_type_id = $this->request->getGet('policy_type_id');
|
||
$date_type = $this->request->getGet('date_type');
|
||
$issuer = $this->request->getGet('issuer');
|
||
$client_branch_id = $this->request->getGet('client_branch_id');
|
||
$insurer_branch_id = $this->request->getGet('insurer_branch_id');
|
||
$client_policy_id = $this->request->getGet('client_policy_id');
|
||
$user_id = $this->request->getGet('user_id');
|
||
|
||
if ($date_type == 'statement_month') {
|
||
$start_date = (string)date('Y-m-01', strtotime($start_date));
|
||
$end_date = (string)date('Y-m-31', strtotime($end_date));
|
||
}
|
||
|
||
// dd($start_date, $end_date, $date_type);
|
||
|
||
$start_date = (!isset($start_date) || $start_date === '' || $start_date === null) ? 0 : $start_date;
|
||
$end_date = (!isset($end_date) || $end_date === '' || $end_date === null) ? 0 : $end_date;
|
||
|
||
$client_id = (!isset($client_id) || $client_id === '' || $client_id === null) ? 0 : $client_id;
|
||
$insurer_id = (!isset($insurer_id) || $insurer_id === '' || $insurer_id === null) ? 0 : $insurer_id;
|
||
$policy_type_id = (!isset($policy_type_id) || $policy_type_id === '' || $policy_type_id === null) ? 0 : $policy_type_id;
|
||
$date_type = (!isset($date_type) || $date_type === '' || $date_type === null) ? 0 : $date_type;
|
||
$issuer = (!isset($issuer) || $issuer === '' || $issuer === null) ? 0 : $issuer;
|
||
$client_branch_id = (!isset($client_branch_id) || $client_branch_id === '' || $client_branch_id === null) ? 0 : $client_branch_id;
|
||
$insurer_branch_id = (!isset($insurer_branch_id) || $insurer_branch_id === '' || $insurer_branch_id === null) ? 0 : $insurer_branch_id;
|
||
$client_policy_id = (!isset($client_policy_id) || $client_policy_id === '' || $client_policy_id === null) ? 0 : $client_policy_id;
|
||
$user_id = (!isset($user_id) || $user_id === '' || $user_id === null) ? 0 : $user_id;
|
||
if ($this->request->is('post')) {
|
||
$isFromDashboard = $this->request->getPost("is_dashboard");
|
||
|
||
if (isset($isFromDashboard) && !empty($isFromDashboard) && $isFromDashboard == 1) {
|
||
$ids = $this->request->getPost('ids');
|
||
|
||
$ids = array_filter(explode(',', $ids));
|
||
|
||
if (!empty($ids)) {
|
||
$idsStr = implode(',', array_map('intval', $ids)); // sanitize IDs to be integers
|
||
$where = "policy_transaction.id IN ($idsStr)";
|
||
} else {
|
||
$where = []; // No valid IDs, return empty result
|
||
}
|
||
}
|
||
// dd($ids);
|
||
}
|
||
//Actual data for the list
|
||
$data['report_list'] = $this->policyTransactionModel->getBDSReportList($start_date, $end_date, $client_id, $insurer_id, $policy_type_id, $date_type, $issuer, $client_branch_id, $insurer_branch_id, $client_policy_id, $user_id, isset($where) ? $where : '');
|
||
// dd($data);
|
||
|
||
$this->loadLayout('report_bds_filter', $data);
|
||
}
|
||
|
||
public function reportVarience()
|
||
{
|
||
$data['tab_name'] = 'Variance Report';
|
||
$data['page_name'] = 'Variance Report';
|
||
|
||
$data['issuer'] = [1 => 'JIBS', 2 => 'Nhance'];
|
||
$data['insurer'] = $this->insurerModel->where('is_active', 1)->findAll();
|
||
$data['policy_types'] = $this->policyTypeModel->where('is_active', 1)->findAll();
|
||
$data['clients'] = $this->clientModel->where('is_active', 1)->findAll();
|
||
$data['date_type'] = [
|
||
'policy_issue_date' => 'Policy Issue Date',
|
||
'policy_start_date' => 'Policy Start Date',
|
||
'policy_end_date' => 'Policy End Date',
|
||
'data_received_date' => 'Data Received Date',
|
||
'closure_date' => 'Closure Date',
|
||
];
|
||
|
||
//filter datas
|
||
$start_date = $this->request->getGet('start_date');
|
||
$end_date = $this->request->getGet('end_date');
|
||
$client_id = $this->request->getGet('client_id');
|
||
$insurer_id = $this->request->getGet('insurer_id');
|
||
$policy_type_id = $this->request->getGet('policy_type_id');
|
||
$date_type = $this->request->getGet('date_type');
|
||
$issuer = $this->request->getGet('issuer');
|
||
$client_branch_id = $this->request->getGet('client_branch_id');
|
||
$insurer_branch_id = $this->request->getGet('insurer_branch_id');
|
||
$client_policy_id = $this->request->getGet('client_policy_id');
|
||
|
||
|
||
$start_date = (!isset($start_date) || $start_date === '' || $start_date === null) ? 0 : $start_date;
|
||
$end_date = (!isset($end_date) || $end_date === '' || $end_date === null) ? 0 : $end_date;
|
||
|
||
$client_id = (!isset($client_id) || $client_id === '' || $client_id === null) ? 0 : $client_id;
|
||
$insurer_id = (!isset($insurer_id) || $insurer_id === '' || $insurer_id === null) ? 0 : $insurer_id;
|
||
$policy_type_id = (!isset($policy_type_id) || $policy_type_id === '' || $policy_type_id === null) ? 0 : $policy_type_id;
|
||
$date_type = (!isset($date_type) || $date_type === '' || $date_type === null) ? 0 : $date_type;
|
||
$issuer = (!isset($issuer) || $issuer === '' || $issuer === null) ? 0 : $issuer;
|
||
|
||
$client_branch_id = (!isset($client_branch_id) || $client_branch_id === '' || $client_branch_id === null) ? 0 : $client_branch_id;
|
||
$insurer_branch_id = (!isset($insurer_branch_id) || $insurer_branch_id === '' || $insurer_branch_id === null) ? 0 : $insurer_branch_id;
|
||
$client_policy_id = (!isset($client_policy_id) || $client_policy_id === '' || $client_policy_id === null) ? 0 : $client_policy_id;
|
||
|
||
|
||
$data['varience_list'] = $this->policyTransactionModel->getVarienceReportLIst($start_date, $end_date, $client_id, $insurer_id, $policy_type_id, $date_type, $issuer, $client_branch_id, $insurer_branch_id, $client_policy_id);
|
||
// !dd($data['varience_list']);
|
||
$this->loadLayout('variance_report_list', $data);
|
||
}
|
||
|
||
|
||
public function reportBusinessList()
|
||
{
|
||
$data['tab_name'] = 'Business Report';
|
||
$data['page_name'] = 'Business Report';
|
||
|
||
$data['issuer'] = [1 => 'JIBS', 2 => 'Nhance'];
|
||
$data['insurer'] = $this->insurerModel->where('is_active', 1)->findAll();
|
||
$data['policy_types'] = $this->policyTypeModel->where('is_active', 1)->findAll();
|
||
$data['clients'] = $this->clientModel->where('is_active', 1)->findAll();
|
||
$data['date_type'] = [
|
||
'policy_issue_date' => 'Policy Issue Date',
|
||
'policy_start_date' => 'Policy Start Date',
|
||
'policy_end_date' => 'Policy End Date',
|
||
'data_received_date' => 'Data Received Date',
|
||
'closure_date' => 'Closure Date',
|
||
];
|
||
|
||
//filter datas
|
||
$start_date = $this->request->getGet('start_date');
|
||
$end_date = $this->request->getGet('end_date');
|
||
$client_id = $this->request->getGet('client_id');
|
||
$insurer_id = $this->request->getGet('insurer_id');
|
||
$policy_type_id = $this->request->getGet('policy_type_id');
|
||
$date_type = $this->request->getGet('date_type');
|
||
$issuer = $this->request->getGet('issuer');
|
||
|
||
$start_date = (!isset($start_date) || $start_date === '' || $start_date === null) ? 0 : $start_date;
|
||
$end_date = (!isset($end_date) || $end_date === '' || $end_date === null) ? 0 : $end_date;
|
||
|
||
$client_id = (!isset($client_id) || $client_id === '' || $client_id === null) ? 0 : $client_id;
|
||
$insurer_id = (!isset($insurer_id) || $insurer_id === '' || $insurer_id === null) ? 0 : $insurer_id;
|
||
$policy_type_id = (!isset($policy_type_id) || $policy_type_id === '' || $policy_type_id === null) ? 0 : $policy_type_id;
|
||
$date_type = (!isset($date_type) || $date_type === '' || $date_type === null) ? 0 : $date_type;
|
||
$issuer = (!isset($issuer) || $issuer === '' || $issuer === null) ? 0 : $issuer;
|
||
|
||
|
||
$data['business_list'] = $this->policyTransactionModel->getBusinessReportList($start_date, $end_date, $client_id, $insurer_id, $policy_type_id, $date_type, $issuer);
|
||
$this->loadLayout('business_team_list', $data);
|
||
}
|
||
|
||
|
||
public function reportFinanceList()
|
||
{
|
||
$data['tab_name'] = 'Finance Report';
|
||
$data['page_name'] = 'Finance Report';
|
||
|
||
$data['issuer'] = [1 => 'JIBS', 2 => 'Nhance'];
|
||
$data['insurer'] = $this->insurerModel->where('is_active', 1)->findAll();
|
||
$data['policy_types'] = $this->policyTypeModel->where('is_active', 1)->findAll();
|
||
$data['clients'] = $this->clientModel->where('is_active', 1)->findAll();
|
||
$data['date_type'] = [
|
||
'policy_issue_date' => 'Policy Issue Date',
|
||
'policy_start_date' => 'Policy Start Date',
|
||
'policy_end_date' => 'Policy End Date',
|
||
'data_received_date' => 'Data Received Date',
|
||
'closure_date' => 'Closure Date',
|
||
];
|
||
|
||
//filter datas
|
||
$start_date = $this->request->getGet('start_date');
|
||
$end_date = $this->request->getGet('end_date');
|
||
$client_id = $this->request->getGet('client_id');
|
||
$insurer_id = $this->request->getGet('insurer_id');
|
||
$policy_type_id = $this->request->getGet('policy_type_id');
|
||
$date_type = $this->request->getGet('date_type');
|
||
$issuer = $this->request->getGet('issuer');
|
||
|
||
$start_date = (!isset($start_date) || $start_date === '' || $start_date === null) ? 0 : $start_date;
|
||
$end_date = (!isset($end_date) || $end_date === '' || $end_date === null) ? 0 : $end_date;
|
||
|
||
$client_id = (!isset($client_id) || $client_id === '' || $client_id === null) ? 0 : $client_id;
|
||
$insurer_id = (!isset($insurer_id) || $insurer_id === '' || $insurer_id === null) ? 0 : $insurer_id;
|
||
$policy_type_id = (!isset($policy_type_id) || $policy_type_id === '' || $policy_type_id === null) ? 0 : $policy_type_id;
|
||
$date_type = (!isset($date_type) || $date_type === '' || $date_type === null) ? 0 : $date_type;
|
||
$issuer = (!isset($issuer) || $issuer === '' || $issuer === null) ? 0 : $issuer;
|
||
|
||
|
||
|
||
$data['finance_list'] = $this->policyTransactionModel->getFinanceReportList($start_date, $end_date, $client_id, $insurer_id, $policy_type_id, $date_type, $issuer);
|
||
$this->loadLayout('finance_team_list', $data);
|
||
}
|
||
|
||
public function reportOutstanding()
|
||
{
|
||
$data['tab_name'] = 'Outstanding Report';
|
||
$data['page_name'] = 'Outstanding Report';
|
||
|
||
$data['issuer'] = [1 => 'JIBS', 2 => 'Nhance'];
|
||
$data['insurer'] = $this->insurerModel->where('is_active', 1)->findAll();
|
||
$data['policy_types'] = $this->policyTypeModel->where('is_active', 1)->findAll();
|
||
$data['clients'] = $this->clientModel->where('is_active', 1)->findAll();
|
||
$data['date_type'] = [
|
||
'policy_issue_date' => 'Policy Issue Date',
|
||
'policy_start_date' => 'Policy Start Date',
|
||
'policy_end_date' => 'Policy End Date',
|
||
'data_received_date' => 'Data Received Date',
|
||
'closure_date' => 'Closure Date',
|
||
];
|
||
|
||
//filter datas
|
||
$start_date = $this->request->getGet('start_date');
|
||
$end_date = $this->request->getGet('end_date');
|
||
$client_id = $this->request->getGet('client_id');
|
||
$insurer_id = $this->request->getGet('insurer_id');
|
||
$insurer_branch_id = $this->request->getGet('insurer_branch_id');
|
||
|
||
$start_date = (!isset($start_date) || $start_date === '' || $start_date === null) ? 0 : change_date_format($start_date, 'd-m-Y', 'Y-m-01');
|
||
$end_date = (!isset($end_date) || $end_date === '' || $end_date === null) ? 0 : change_date_format($end_date, 'd-m-Y', 'Y-m-31');
|
||
// dd([$start_date,$end_date]);
|
||
|
||
|
||
$insurer_id = (!isset($insurer_id) || $insurer_id === '' || $insurer_id === null) ? 0 : $insurer_id;
|
||
$insurer_branch_id = (!isset($insurer_branch_id) || $insurer_branch_id === '' || $insurer_branch_id === null) ? 0 : $insurer_branch_id;
|
||
|
||
$data['outstanting_list'] = $this->policyTransactionModel->getOutstandingReportLIst($start_date, $end_date, $insurer_id, $insurer_branch_id);
|
||
// dd($this->policyTransactionModel->getLastQuery());
|
||
// dd($data);
|
||
$this->loadLayout('outstanding_report_list', $data);
|
||
}
|
||
|
||
//---------------------------------------------------------------------------------------------------
|
||
|
||
//insurer statement list page
|
||
public function statementList()
|
||
{
|
||
// dd($this->updateInsurerStatement(['file_id' => 133])); // for check validateInsurerStatementfunction with hard coded file id always un command
|
||
$data['insurers'] = $this->insurerModel->where('is_active',1)->findAll();
|
||
$today = date('Y-m-d');
|
||
$fromday = $from_date = date('Y-m-d', strtotime('-180 days', strtotime($today)));
|
||
// echo $fromday;die();
|
||
$data['invoice_status_array'] = $this->invoiceStatus;
|
||
$data['insurers'] = $this->insurerBranchModel->getInsurerBranchesWithInsurerNames();
|
||
|
||
// dd( $data['insurers']);
|
||
$data['insurer_statement_list'] = $this->insurerStatements
|
||
->select(
|
||
'insurer_statements.*,
|
||
insurers.name AS insurer_name,
|
||
insurers.short_name,
|
||
user_profiles.first_name,
|
||
insurer_branch.branch_code,
|
||
(SELECT SUM(pt_co_share_details.exp_amt)
|
||
FROM pt_co_share_details
|
||
WHERE pt_co_share_details.is_active = 1
|
||
AND pt_co_share_details.statement_id = insurer_statements.id
|
||
) AS exp_inv_amt,
|
||
(SELECT SUM(inv_payment_details.inv_amt) + SUM(inv_payment_details.tds) + SUM(inv_payment_details.gst)
|
||
FROM inv_payment_details
|
||
WHERE inv_payment_details.is_active = 1
|
||
AND inv_payment_details.statement_id = insurer_statements.id
|
||
) AS received_inv_amt'
|
||
)
|
||
->join('insurers', 'insurer_statements.insurer_id = insurers.id')
|
||
->join('insurer_branch', 'insurer_statements.branch_id = insurer_branch.id')
|
||
->join('user_profiles', 'insurer_statements.created_by = user_profiles.id')
|
||
->where('insurer_statements.is_active', 1)
|
||
->where('insurers.is_active', 1)
|
||
->where('insurer_branch.is_active', 1)
|
||
// ->where('insurer_statements.file_status','success')
|
||
->where('date(insurer_statements.created_at) >= ', $from_date)
|
||
->where('date(insurer_statements.created_at) <= ', $today)
|
||
->orderBy('insurer_statements.id', 'DESC')
|
||
->findAll();
|
||
|
||
// dd( $this->insurerStatements->getLastQuery());
|
||
$data['tab_name'] = 'Statement Upload';
|
||
$data['page_name'] = 'Statement Upload';
|
||
|
||
$this->loadLayout('insurer_statement_list', $data);
|
||
}
|
||
|
||
// public function failedStatementList(){
|
||
// $today = date('Y-m-d');
|
||
// $fromday = $from_date = date('Y-m-d', strtotime('-180 days', strtotime($today)));
|
||
// // echo $fromday;die();
|
||
// $data['invoice_status_array'] = $this->invoiceStatus;
|
||
// $data['insurers'] = $this->insurerBranchModel ->getInsurerBranchesWithInsurerNames();
|
||
|
||
// // dd( $data['insurers']);
|
||
// $data['insurer_statement_list'] = $this->insurerStatements
|
||
// ->select('insurer_statements.*,
|
||
// insurers.name AS insurer_name,
|
||
// insurers.short_name,
|
||
// user_profiles.first_name,
|
||
// insurer_branch.branch_code,
|
||
// (SELECT SUM(pt_co_share_details.exp_amt)
|
||
// FROM pt_co_share_details
|
||
// WHERE pt_co_share_details.is_active = 1
|
||
// AND pt_co_share_details.statement_id = insurer_statements.id
|
||
// ) AS exp_inv_amt,
|
||
// (SELECT SUM(inv_payment_details.inv_amt) + SUM(inv_payment_details.tds) + SUM(inv_payment_details.gst)
|
||
// FROM inv_payment_details
|
||
// WHERE inv_payment_details.is_active = 1
|
||
// AND inv_payment_details.statement_id = insurer_statements.id
|
||
// ) AS received_inv_amt'
|
||
// )
|
||
// ->join('insurers', 'insurer_statements.insurer_id = insurers.id')
|
||
// ->join('insurer_branch', 'insurer_statements.branch_id = insurer_branch.id')
|
||
// ->join('user_profiles', 'insurer_statements.created_by = user_profiles.id')
|
||
// ->where('insurer_statements.is_active', 1)
|
||
// ->where('insurer_statements.file_status','failed')
|
||
// ->where('date(insurer_statements.created_at) >= ', $from_date)
|
||
// ->where('date(insurer_statements.created_at) <= ', $today)
|
||
// ->orderBy('insurer_statements.id', 'DESC')
|
||
// ->findAll();
|
||
// if($data['insurer_statement_list']){
|
||
// return $this->respond(['status' => true, 'code' => 200,'data'=>$data ], 200);
|
||
// }else{
|
||
// return $this->respond(['status'=>false,'message'=>'Data Not Fount'],404);
|
||
// }
|
||
|
||
// }
|
||
|
||
public function uploadInsurerStatement()
|
||
{
|
||
|
||
//validate uploaded file
|
||
$filename = '';
|
||
$validated = $this->validate([
|
||
'statement' => [
|
||
'uploaded[statement]',
|
||
'mime_in[statement,application/vnd.ms-excel,application/vnd,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,application/vnd.oasis.opendocument.spreadsheet]',
|
||
'max_size[statement,16384]',
|
||
],
|
||
]);
|
||
// $this->createStatementFolder();
|
||
if ($validated) {
|
||
$avatar = $this->request->getFile('statement');
|
||
if (!$avatar) {
|
||
$this->myLogger->logme("error", 'Statement File not found');
|
||
return $this->respond(['dataStatus' => false, 'code' => 400, 'message' => 'File not found'], 400);
|
||
}
|
||
|
||
$is_moved = $avatar->move(WRITEPATH . 'uploads/statements/');
|
||
if ($is_moved) {
|
||
$filename = $avatar->getName();
|
||
// Handle successful upload, e.g., log success or further processing
|
||
$this->myLogger->logme("error", 'Statement File moved successful');
|
||
} else {
|
||
$this->myLogger->logme("error", 'Statement File move failed');
|
||
return $this->respond(['dataStatus' => false, 'code' => 500, 'message' => 'File move failed'], 500);
|
||
}
|
||
} else {
|
||
$this->myLogger->logme("error", 'Statement Upload failed Invalid file');
|
||
return $this->respond(['dataStatus' => false, 'code' => 404, 'message' => 'Invalid file'], 404);
|
||
}
|
||
|
||
//process post variable entry in file table
|
||
$loggedInUserID = get_session_userid();
|
||
// dd($loggedInUserID);
|
||
// $loggedInUserID = 8;
|
||
|
||
$insurer = $this->request->getPost('insurer');
|
||
|
||
$insurer_id = explode('-', $insurer)[0];
|
||
$branch_id = explode('-', $insurer)[1];
|
||
// print_r($insurer_id);
|
||
// print_r($branch_id);
|
||
// die();
|
||
$month = $this->request->getPost('statement_month');
|
||
$month = $month . '-01';
|
||
// print_r($month);die;
|
||
$month = change_date_format($month, 'Y-M-d', 'Y-m-d');
|
||
$stmt_sno = $this->request->getPost('statement_no');
|
||
// print_r($month);die;
|
||
|
||
$file_id = $this->insurerStatements->insert(['insurer_id' => $insurer_id, 'branch_id' => $branch_id, 'file_name' => $filename, 'month' => $month, 'created_by' => $loggedInUserID, 'stmt_sno' => $stmt_sno]); //here field policy_id have client_policy_id and not policy id from policy master
|
||
$this->myLogger->logme("error", '{file_id} statement uploaded success', ['file_id' => $file_id]);
|
||
|
||
//validate file
|
||
$validation_result = $this->validateInsurerStatement(['file_id' => $file_id]);
|
||
//update file content to DB
|
||
if ($validation_result['status']) {
|
||
$this->updateInsurerStatement(['file_id' => $file_id]);
|
||
}
|
||
|
||
if (!isset($file_id) || !$validation_result['status']) {
|
||
return $this->respond(['dataStatus' => false, 'code' => 404, 'message' => 'file not uploaded', 'error_data' => $validation_result['error_data'], 'error_code' => $validation_result['error_code']], 200);
|
||
}
|
||
|
||
if (isset($file_id) || $validation_result['status']) {
|
||
$this->insurerStatements->where('id', $file_id)->set(['invoice_status' => 'pending'])->update();
|
||
}
|
||
|
||
|
||
|
||
return $this->respond(['dataStatus' => true, 'code' => 200, 'data' => 'file upload success'], 200);
|
||
}
|
||
|
||
public function createStatementFolder()
|
||
{
|
||
$folderPath = WRITEPATH . 'uploads/statements/';
|
||
|
||
// Check if the folder doesn't exist
|
||
if (!file_exists($folderPath)) {
|
||
// Create the folder
|
||
if (mkdir($folderPath, 0777, true)) {
|
||
$this->myLogger->logme('error', 'statement upload folder created successfully');
|
||
|
||
// Set permissions to a+rwx (read, write, execute for all)
|
||
chmod($folderPath, 0777);
|
||
$this->myLogger->logme('error', 'Permissions set to a+rwx.');
|
||
} else {
|
||
// echo "Failed to create folder.";
|
||
$this->myLogger->logme('error', 'Failed to create statement upload folder.');
|
||
}
|
||
} else {
|
||
$this->myLogger->logme('error', 'upload folder exists.');
|
||
}
|
||
}
|
||
|
||
public function validateInsurerStatement($params)
|
||
{
|
||
helper('excel_util_helper');
|
||
//get file info
|
||
$file_id = $params['file_id'];
|
||
$file = $this->insurerStatements->find($file_id);
|
||
// dd($file);
|
||
$date = new \DateTime($file['month']);
|
||
|
||
$month = $date->format('m');
|
||
$year = $date->format('Y');
|
||
|
||
$error_data = ['error_code' => '', 'error_data' => []];
|
||
$status = 'success';
|
||
$ret_status = true;
|
||
// dd($month.'-'.$year);
|
||
$return = [];
|
||
if (!isset($file)) {
|
||
//file not found in DB
|
||
return array('status' => false, 'msg' => 'statement file not found in DB');
|
||
}
|
||
$file_name_with_path = WRITEPATH . "/uploads/statements/" . $file['file_name'];
|
||
|
||
//check physical file
|
||
if (!file_exists($file_name_with_path)) {
|
||
//file not found update status and reason
|
||
$message = "Physcial file not found";
|
||
// echo $message;
|
||
$this->myLogger->logme('error', ($message . ' for statement file id ' . $file_id));
|
||
$this->insurerStatements->where('id', $file_id)->set(['file_status' => 'failed', 'reason' => json_encode(['error_code' => 0, 'error_data' => $message])])->update();
|
||
return array('status' => false, 'error_code' => 0); //0 - Physcial file not found
|
||
}
|
||
|
||
//get excel data to php array
|
||
$spreadsheet = \PhpOffice\PhpSpreadsheet\IOFactory::load($file_name_with_path);
|
||
$sheet = $spreadsheet->getActiveSheet();
|
||
|
||
$highestRowAndColumn = $sheet->getHighestRowAndColumn();
|
||
// dd($highestRowAndColumn);
|
||
$excel_data = $sheet->rangeToArray('A1:' . $highestRowAndColumn['column'] . $highestRowAndColumn['row']);
|
||
unset($excel_data[0]);
|
||
$excel_data = ExcelSanitizeHelper::sanitizeArrayData($excel_data);
|
||
// Kint::dump($excel_data); // die();
|
||
//get no of line items and update in DB
|
||
$line_items = 0;
|
||
// get uploaded month transactions data
|
||
$source_data = $this->PTCOShareDetailsModel->getNonReconcileredPolicyTransactions(insurer_id: $file['insurer_id'], insurer_branch_id: $file['branch_id']);
|
||
// var_dump($source_data);die();
|
||
// Kint::dump($source_data);die();
|
||
|
||
|
||
// check policy no,insurer and etc in DB for this month
|
||
// if all good return true, otherwise return false with messssage
|
||
foreach ($excel_data as $excel_key => $excel_row) {
|
||
$is_row_empty = check_row_is_empty_or_null($excel_row);
|
||
|
||
if (!$is_row_empty) {
|
||
|
||
// $excel_row = ExcelSanitizeHelper::sanitizeArrayData($excel_row);
|
||
$is_source_found = 0;
|
||
// Kint::dump($excel_key,$excel_row[1],$excel_row[2]);
|
||
// $policy_start_date = preg_replace('/^\p{Z}+|\p{Z}+$/u', '', $excel_row[4]); //policy_start_date from excel
|
||
// $policy_end_date = preg_replace('/^\p{Z}+|\p{Z}+$/u', '', $excel_row[5]); //policy_end_date from excel
|
||
|
||
$policy_no = preg_replace('/^\p{Z}+|\p{Z}+$/u', '', $excel_row[1]); //policy_end_date from excel
|
||
$policy_no = preg_replace( '/[\x{200B}\x{200C}\x{200D}\x{FEFF}\x{00A0}\x{200E}\x{200F}\x{202A}-\x{202E}]/u', '', $excel_row[1]); //policy_end_date from excel
|
||
|
||
// $client_name = preg_replace('/^\p{Z}+|\p{Z}+$/u', '', $excel_row[3]); //clientname from excel
|
||
|
||
$endorsement_no = preg_replace('/^\p{Z}+|\p{Z}+$/u', '', $excel_row[2]??''); //policy_end_date from excel
|
||
$endorsement_no = preg_replace( '/[\x{200B}\x{200C}\x{200D}\x{FEFF}\x{00A0}\x{200E}\x{200F}\x{202A}-\x{202E}]/u', '', $excel_row[2]??''); //policy_end_date from excel
|
||
|
||
// Kint::dump($excel_key,$policy_no,$endorsement_no,$policy_start_date,$policy_end_date);//die();
|
||
foreach ($source_data as $source_key => $source_row) {
|
||
$source_endorsement_no = $source_row['endorsement_no'] !== null ? $source_row['endorsement_no'] : null;
|
||
// Kint::dump($source_row, $source_endorsement_no, $policy_no, $endorsement_no);
|
||
|
||
// if (($policy_no == $source_row['policy_no']) && $endorsement_no == $source_endorsement_no && change_date_format($policy_start_date, 'd-m-Y', 'Y-m-d') == $source_row['policy_start_date'] && change_date_format($policy_end_date, 'd-m-Y', 'Y-m-d') == $source_row['policy_end_date'] && $client_name == $source_row['client_name'])
|
||
// {
|
||
// $is_source_found = 1;
|
||
// $line_items = $line_items + 1;
|
||
// unset($source_data[$source_key]);
|
||
// continue 2;
|
||
// }
|
||
|
||
if (($policy_no == $source_row['policy_no']) && $endorsement_no == $source_endorsement_no)
|
||
{
|
||
$is_source_found = 1;
|
||
$line_items = $line_items + 1;
|
||
unset($source_data[$source_key]);
|
||
continue 2;
|
||
}
|
||
}
|
||
|
||
if ($is_source_found == 0) {
|
||
// echo $excel_key.'-'.$excel_row[1] . '- not found<br>';
|
||
$error_data['error_code'] = 1; //match not found
|
||
// $error_data['error_data'] = ($error_data['error_data'] ?? []);
|
||
$error_data['error_data'] = array_merge($error_data['error_data'], [$excel_row[0]]); //match not found
|
||
}
|
||
}
|
||
}
|
||
|
||
// dd($error_data);
|
||
|
||
if ($error_data['error_code']) {
|
||
$status = 'failed';
|
||
$ret_status = false;
|
||
}
|
||
//update in DB
|
||
$this->insurerStatements->where('id', $file_id)->set(['line_items' => $line_items, 'file_status' => $status, 'reason' => json_encode($error_data)])->update();
|
||
return array('status' => $ret_status, 'error_code' => $error_data['error_code'], 'error_data' => $error_data['error_data']);
|
||
}
|
||
|
||
|
||
public function updateInsurerStatement($params)
|
||
{
|
||
helper('excel_util_helper');
|
||
//get file info
|
||
$file_id = $params['file_id'];
|
||
$file = $this->insurerStatements->find($file_id);
|
||
// dd($file);
|
||
$date = new \DateTime($file['month']);
|
||
|
||
$month = $date->format('m');
|
||
$year = $date->format('Y');
|
||
|
||
$error_data = ['error_code' => '', 'error_data' => []];
|
||
$status = 'success';
|
||
$ret_status = true;
|
||
// dd($month.'-'.$year);
|
||
$return = [];
|
||
if (!isset($file)) {
|
||
//file not found in DB
|
||
return array('status' => false, 'msg' => 'statement file not found in DB');
|
||
}
|
||
$file_name_with_path = WRITEPATH . "/uploads/statements/" . $file['file_name'];
|
||
|
||
//check physical file
|
||
if (!file_exists($file_name_with_path)) {
|
||
//file not found update status and reason
|
||
$message = "Physcial file not found";
|
||
// echo $message;
|
||
$this->myLogger->logme('error', ($message . ' for statement file id ' . $file_id));
|
||
$this->insurerStatements->where('id', $file_id)->set(['file_status' => 'failed', 'reason' => json_encode(['error_code' => 0, 'error_data' => $message])])->update();
|
||
return array('status' => false, 'error_code' => 0); //0 - Physcial file not found
|
||
}
|
||
|
||
//get excel data to php array
|
||
$spreadsheet = \PhpOffice\PhpSpreadsheet\IOFactory::load($file_name_with_path);
|
||
$sheet = $spreadsheet->getActiveSheet();
|
||
|
||
$highestRowAndColumn = $sheet->getHighestRowAndColumn();
|
||
// dd($highestRowAndColumn);
|
||
$excel_data = $sheet->rangeToArray('A1:' . $highestRowAndColumn['column'] . $highestRowAndColumn['row']);
|
||
unset($excel_data[0]);
|
||
$excel_data = ExcelSanitizeHelper::sanitizeArrayData($excel_data);
|
||
// dd($excel_data);
|
||
//get no of line items and update in DB
|
||
$line_items = count($excel_data);
|
||
// get uploaded month transactions data
|
||
$source_data = $this->PTCOShareDetailsModel->getNonReconcileredPolicyTransactions(insurer_id: $file['insurer_id'], insurer_branch_id: $file['branch_id']);
|
||
// Kint::dump($source_data);//die;
|
||
// Kint::dump($excel_data);
|
||
// die;
|
||
// check policy no,insurer and etc in DB for this month
|
||
// if all good return true, otherwise return false with messssage
|
||
$data_to_update = [];
|
||
try{
|
||
foreach ($excel_data as $excel_key => $excel_row) {
|
||
$is_row_empty = check_row_is_empty_or_null($excel_row);
|
||
if (!$is_row_empty) {
|
||
|
||
$is_source_found = 0;
|
||
// $policy_start_date = preg_replace('/^\p{Z}+|\p{Z}+$/u', '', $excel_row[4]); //policy_start_date from excel
|
||
// $policy_end_date = preg_replace('/^\p{Z}+|\p{Z}+$/u', '', $excel_row[5]); //policy_end_date from excel
|
||
$policy_no = preg_replace('/^\p{Z}+|\p{Z}+$/u', '', $excel_row[1]); //policy_end_date from excel
|
||
$policy_no = preg_replace('/[\x{200C}\x{200B}]/u', '', $excel_row[1]); //
|
||
// $client_name = preg_replace('/^\p{Z}+|\p{Z}+$/u', '', $excel_row[3]); //clientname from excel
|
||
$endorsement_no = preg_replace('/^\p{Z}+|\p{Z}+$/u', '', $excel_row[2]); //policy_end_date from excel
|
||
|
||
foreach ($source_data as $source_key => $source_row) {
|
||
// Kint::dump(change_date_format($excel_row[3],'d-m-Y','Y-m-d'));
|
||
$source_endorsement_no = $source_row['endorsement_no'] !== null ? $source_row['endorsement_no'] : null;
|
||
// if (($policy_no == $source_row['policy_no']) && $endorsement_no == $source_endorsement_no && change_date_format($policy_start_date, 'd-m-Y', 'Y-m-d') == $source_row['policy_start_date'] && change_date_format($policy_end_date, 'd-m-Y', 'Y-m-d') == $source_row['policy_end_date'] && $client_name == $source_row['client_name']) {
|
||
if (($policy_no == $source_row['policy_no']) && $endorsement_no == $source_endorsement_no) {
|
||
$is_source_found = 1;
|
||
|
||
//calculate percentage first
|
||
$total_amt = 0;
|
||
|
||
// $actual_bp_per = trim($excel_row[9]); //commented becoz this filed removed tfrom excel file
|
||
$actual_bp_per = 0; //set default value 0 for maintaining existing code flow
|
||
$actual_bp_brokerage = (int) trim($excel_row[5]);
|
||
$actual_bp_amt = (int) trim($excel_row[3]);
|
||
|
||
if (($actual_bp_brokerage && $actual_bp_brokerage != 0 && $actual_bp_brokerage != "")) {
|
||
$total_amt += $actual_bp_brokerage;
|
||
//percentage reverse calculation
|
||
if (($actual_bp_per == 0 || $actual_bp_per == 0) && !empty($actual_bp_amt)) {
|
||
$actual_bp_per = (int) round(($actual_bp_brokerage / $actual_bp_amt) * 100, 2);
|
||
}
|
||
} else {
|
||
$actual_bp_brokerage = $actual_bp_amt * ($actual_bp_per / 100);
|
||
$total_amt += $actual_bp_brokerage;
|
||
}
|
||
|
||
// $actual_tp_per = trim($excel_row[10]);//commented becoz this filed removed tfrom excel file
|
||
$actual_tp_per = 0;//set default value 0 for maintaining existing code flow
|
||
$actual_tp_brokerage = (int) trim($excel_row[6]);
|
||
$actual_tp_amt = (int) trim($excel_row[4]);
|
||
|
||
if ($actual_tp_brokerage && $actual_tp_brokerage != 0 && $actual_tp_brokerage != "") {
|
||
$total_amt += $actual_tp_brokerage;
|
||
//percentage reverse calculation
|
||
if (($actual_tp_per == 0 || $actual_tp_per == "") && !empty($actual_tp_amt)) {
|
||
$actual_tp_per = (int) round(($actual_tp_brokerage / $actual_tp_amt) * 100, 2);
|
||
}
|
||
} else {
|
||
$actual_tp_brokerage = $actual_tp_amt * ($actual_tp_per / 100);
|
||
$total_amt += $actual_tp_brokerage;
|
||
}
|
||
|
||
// $actual_tep_per = trim($excel_row[11]);
|
||
// $actual_tep_brokerage = trim($excel_row[14]);
|
||
// $actual_tep_amt = trim($excel_row[8]);
|
||
|
||
$actual_tep_per = 0;
|
||
$actual_tep_brokerage = 0;
|
||
$actual_tep_amt = 0;
|
||
|
||
if ($actual_tep_brokerage && $actual_tep_brokerage != 0 && $actual_tep_brokerage != "") {
|
||
$total_amt += $actual_tep_brokerage;
|
||
//percentage reverse calculation
|
||
if (($actual_tep_per == 0 || $actual_tep_per == "") && !empty($actual_tep_amt)) {
|
||
$actual_tep_per = ($actual_tep_brokerage / $actual_tep_amt) * 100;
|
||
}
|
||
} else {
|
||
$actual_tep_brokerage = $actual_tep_amt * ($actual_tep_per / 100);
|
||
$total_amt += $actual_tep_brokerage;
|
||
}
|
||
|
||
//find variance
|
||
$variance_amt = $source_row['exp_amt'] - $total_amt;
|
||
|
||
$data_to_update[] = ['co_share_id' => $source_row['id'], 'actual_bp_amt' => $actual_bp_amt, 'actual_tp_amt' => $actual_tp_amt, 'actual_tep_amt' => $actual_tep_amt, 'actual_bp_per' => $actual_bp_per, 'actual_tp_per' => $actual_tp_per, 'actual_tep_per' => $actual_tep_per, 'variance' => $variance_amt, 'actual_tep_brokerage_amt' => $actual_tep_brokerage, 'actual_tp_brokerage_amt' => $actual_tp_brokerage, 'actual_bp_brokerage_amt' => $actual_bp_brokerage, 'reward' => trim($excel_row[7]), 'statement_id' => $file_id];
|
||
|
||
unset($source_data[$source_key]);
|
||
continue 2;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}catch (\Throwable $th) {
|
||
|
||
$this->myLogger->logme("error", "REST-AUTH-CONTROLLER - updateInsurerStatement: Exception: " . $th->getMessage() . " --- Line: " . $th->getLine() . " --- Trace: " . $th->getTraceAsString());
|
||
$errorData = [
|
||
'message' => $th->getMessage(),
|
||
'file' => $th->getFile(),
|
||
'line' => $th->getLine(),
|
||
'code' => $th->getCode(),
|
||
'trace' => $th->getTraceAsString(),
|
||
'trace_array' => $th->getTrace(), // full array version (optional)
|
||
'function' => $th->getTrace()[0]['function'] ?? null,
|
||
'class' => $th->getTrace()[0]['class'] ?? null,
|
||
];
|
||
return ['status' => 'failed', 'code' => 500, 'message' => $th->getMessage(), 'error_data' => $errorData];
|
||
}
|
||
// dd($data_to_update);
|
||
$this->coShareStmtDetailsModel->insertBatch($data_to_update, 'id');
|
||
// dd($data_to_update);
|
||
// if($error_data['error_code'])
|
||
// {
|
||
// $status = 'failed';
|
||
// $ret_status = false;
|
||
// }
|
||
//update in DB
|
||
$this->insurerStatements->where('id', $file_id)->set(['file_status' => $status, 'reason' => json_encode($error_data), 'invoice_status' => 'pending'])->update();
|
||
return array('status' => $ret_status, 'error_code' => $error_data['error_code'], 'error_data' => $error_data['error_data']);
|
||
}
|
||
|
||
public function getInvoicePaymentDetails()
|
||
{
|
||
$statement_id = $this->request->getUri()->getSegment(4);
|
||
|
||
$inv_details = $this->insurerStatements->find($statement_id);
|
||
$inv_payment_details = $this->invPaymentDetailsModel
|
||
->where('statement_id', $statement_id)
|
||
->where('is_active', 1)
|
||
->get()
|
||
->getResultArray();
|
||
if (!$inv_details['invoice_value']) {
|
||
$stmt_level_value = $this->coShareStmtDetailsModel->select('sum(actual_tep_brokerage_amt) + sum(actual_tp_brokerage_amt) + sum(actual_bp_brokerage_amt) + sum(reward) as invoice_value')
|
||
->where('statement_id', $statement_id)
|
||
->groupBy('statement_id')
|
||
->get()
|
||
->getResultArray();
|
||
// print_r($stmt_level_value);
|
||
if ($stmt_level_value && count($stmt_level_value) && isset($stmt_level_value[0])) {
|
||
$inv_details['invoice_value'] = $stmt_level_value[0]['invoice_value'];
|
||
}
|
||
}
|
||
// ~dd($inv_details);
|
||
$data = [
|
||
'invoice_status' => $inv_details['invoice_status'],
|
||
'gst_per' => isset($inv_details['gst_per']) ? $inv_details['gst_per'] : 18,
|
||
'invoice_value' => $inv_details['invoice_value'],
|
||
'gst_value' => $inv_details['gst_value'],
|
||
'invoice_no' => $inv_details['invoice_no'],
|
||
'invoice_amount' => $inv_details['invoice_amount'],
|
||
'invoice_date' => isset($inv_details['invoice_date']) ? change_date_format($inv_details['invoice_date'], 'Y-m-d', 'd/m/Y') : null
|
||
];
|
||
$data['payments'] = $inv_payment_details;
|
||
return $this->respond(['dataStatus' => true, 'code' => 200, 'data' => $data], 200);
|
||
}
|
||
|
||
public function saveInvoicePaymentDetails()
|
||
{
|
||
$jsonData = $this->request->getJSON();
|
||
$jsonData = (array)$jsonData;
|
||
// echo 'Hi';
|
||
// print_r($jsonData);die();
|
||
|
||
$invoiceStatus = $jsonData['invoice_status'];
|
||
$hiddenStatementId = $jsonData['hidden_statement_id'];
|
||
$invoiceNo = $jsonData['invoice_no'];
|
||
$invoiceDate = change_date_format($jsonData['invoice_date'], 'd/m/Y', 'Y-m-d');
|
||
$invoice_amount = $jsonData['invoice_amount'];
|
||
$invoice_value = $jsonData['invoice_value'];
|
||
$gst_per = $jsonData['invoice_gst_per'];
|
||
$gst_value = $jsonData['invoice_gst'];
|
||
|
||
//Update statement table
|
||
$parentData = [
|
||
'invoice_status' => $invoiceStatus,
|
||
'invoice_no' => $invoiceNo,
|
||
'invoice_date' => $invoiceDate,
|
||
'invoice_amount' => $invoice_amount,
|
||
'gst_per' => $gst_per,
|
||
'gst_value' => $gst_value,
|
||
'invoice_value' => $invoice_value,
|
||
'updated_by' => get_session_userid()
|
||
];
|
||
|
||
|
||
|
||
$this->insurerStatements->update($hiddenStatementId, $parentData);
|
||
|
||
// Process child data
|
||
$receivedAmounts = $jsonData['received_amount'];
|
||
$utrNos = $jsonData['utr_no'];
|
||
$tdsTotal = $jsonData['tds'];
|
||
$gstTotal = $jsonData['gst_amount'];
|
||
$paymentDates = $jsonData['payment_date'];
|
||
$pks = $jsonData['pk'];
|
||
|
||
foreach ($receivedAmounts as $index => $receivedAmount) {
|
||
$pk = $pks[$index]; // Get the pk for the current record
|
||
$utrNo = $utrNos[$index];
|
||
$tds = $tdsTotal[$index];
|
||
$gst = $gstTotal[$index];
|
||
$paymentDate = $paymentDates[$index];
|
||
|
||
if($utrNo == "" && $tds == "" && $gst == "" && $receivedAmount == "")
|
||
{
|
||
continue;
|
||
}
|
||
// Prepare data for insert/update
|
||
$childData = [
|
||
'inv_amt' => $receivedAmount,
|
||
'utr_no' => $utrNo,
|
||
'tds' => $tds,
|
||
'gst' => $gst,
|
||
'received_date' => change_date_format($paymentDate, 'd/m/Y', 'Y-m-d'),
|
||
'statement_id' => $hiddenStatementId
|
||
];
|
||
if ($pk) {
|
||
$childData['updated_by'] = get_session_userid();
|
||
$childData['id'] = (int)$pk;
|
||
} else {
|
||
$childData['created_by'] = get_session_userid();
|
||
}
|
||
// print_r($childData);
|
||
// Insert or update
|
||
$this->invPaymentDetailsModel->save($childData);
|
||
// print_r($this->invPaymentDetailsModel->errors());
|
||
|
||
}
|
||
|
||
return $this->respond(['dataStatus' => true, 'code' => 200], 200);
|
||
//return $this->response->setJSON(['dataStatus' => 'true']);
|
||
}
|
||
|
||
public function deletePaymentEntry()
|
||
{
|
||
$payment_id = $this->request->getUri()->getSegment(4);
|
||
//echo $payment_id;
|
||
$this->invPaymentDetailsModel->update($payment_id, ['is_active' => 0]);
|
||
return $this->respond(['dataStatus' => true, 'code' => 200], 200);
|
||
}
|
||
|
||
public function downloadSampleInsurerStatement()
|
||
{
|
||
|
||
$filePath = ROOTPATH . 'public/sample_excel/insurer_stament_sample.xlsx';
|
||
// Check if the file exists
|
||
if (file_exists($filePath)) {
|
||
|
||
// Set the appropriate MIME type
|
||
$mimeType = mime_content_type($filePath);
|
||
|
||
// Send the file to the client for download
|
||
return $this->response->download($filePath, null, $mimeType);
|
||
} else {
|
||
// File not found, show an error message or redirect
|
||
echo view('errors/html/production');
|
||
}
|
||
}
|
||
|
||
public function getFileErr()
|
||
{
|
||
$file_id = $this->request->getUri()->getSegment(4);
|
||
$file = $this->insurerStatements->find($file_id);
|
||
return $this->respond(['dataStatus' => true, 'code' => 200, 'data' => $file['reason']], 200);
|
||
}
|
||
|
||
public function dmsSearch()
|
||
{
|
||
// echo 'scbsc';die();
|
||
if ($this->request->is('post')) {
|
||
// $jsonData = (array)$this->request->getJSON();
|
||
$customer_id = $this->request->getPost('customer_id');
|
||
$policy_id = $this->request->getPost('policy_id');
|
||
$cus_doc_name = $this->request->getPost('cus_doc_name');
|
||
$policy_doc_name = $this->request->getPost('policy_doc_name');
|
||
$pt_files = [];
|
||
$kyc_files = [];
|
||
$batch_files = [];
|
||
$files = [];
|
||
// print_r($jsonData);die();
|
||
if ($policy_id != "") {
|
||
//get policy docs from policy transation related tables
|
||
$pt_files = $this->PTFileModel->getPolicyDriveFilesIndex($policy_id, $policy_doc_name);
|
||
$batch_files = $this->batchFileModel->getBatchFilesDataForDocumentSearch($policy_id, $policy_doc_name);
|
||
$files = $this->filesModel->getFilesDataForDocumentSearch($policy_id, $policy_doc_name);
|
||
// dd($files);
|
||
// dd($this->PTFileModel->getLastQuery());
|
||
// ~dd($pt_files);
|
||
}
|
||
if ($customer_id != "") {
|
||
$kyc_files = $this->clientKYCDocsModel->getClientKYCDriveFilesIndex($customer_id, $cus_doc_name);
|
||
// dd($this->clientKYCDocsModel->getLastQuery());
|
||
// !dd($kyc_files);
|
||
}
|
||
|
||
$data['files'] = array_merge($pt_files, $kyc_files, $batch_files, $files);
|
||
// dd($data['files']);
|
||
}
|
||
$data['tab_name'] = 'Documents Search';
|
||
$data['page_name'] = 'Documents';
|
||
|
||
$data['customers'] = $this->clientModel->select('id,client_name,short_name as display_value')->where('is_active', 1)->get()->getResultarray();
|
||
$data['policies'] = $this->clientPolicyModel->select("client_policy.id,client_policy.policy_no,policy_type.policy_type,concat(policy_type.policy_type,' - ',client_policy.policy_no) as display_value")
|
||
->join('policy_type', 'client_policy.policy_type_id = policy_type.id')
|
||
->where('client_policy.is_active', 1)->get()->getResultarray();
|
||
// dd($data);
|
||
$this->loadLayout('dms_search', $data);
|
||
}
|
||
|
||
//---------------------------------------------------------------------------------------------------
|
||
|
||
public function getCoShareStatementDetails($pt_id)
|
||
{
|
||
if (!$pt_id) {
|
||
return $this->respond([
|
||
'status' => false,
|
||
'code' => 400,
|
||
'message' => 'No data found'
|
||
], 200);
|
||
}
|
||
|
||
// Fetch data from the database
|
||
$data = db_connect()->table("co_share_stmt_details")
|
||
->select("
|
||
co_share_stmt_details.*,
|
||
insurer_statements.month,
|
||
insurer_statements.invoice_status,
|
||
insurer_statements.invoice_date,
|
||
insurer_statements.invoice_no,
|
||
insurer_statements.invoice_amount,
|
||
insurer_statements.stmt_sno,
|
||
(co_share_stmt_details.actual_bp_amt + co_share_stmt_details.actual_tp_amt + co_share_stmt_details.actual_tep_amt) AS sum_of_actual_amt
|
||
")
|
||
->join('insurer_statements', 'co_share_stmt_details.statement_id = insurer_statements.id')
|
||
->where([
|
||
'co_share_stmt_details.is_active' => 1,
|
||
'insurer_statements.is_active' => 1,
|
||
'co_share_stmt_details.co_share_id' => $pt_id
|
||
])
|
||
->get()
|
||
->getResultArray();
|
||
|
||
// Check if data exists before formatting
|
||
if ($data) {
|
||
|
||
foreach ($data as &$row) {
|
||
// Check if invoice_date is not null before formatting
|
||
$row['invoice_date'] = $row['invoice_date'] ? change_date_format($row['invoice_date'], 'Y-m-d', 'd/m/Y') : null;
|
||
|
||
// Check if month is not null before formatting
|
||
$row['month'] = $row['month'] ? change_date_format($row['month'], 'Y-m-d', 'M-Y') : null;
|
||
}
|
||
|
||
return $this->respond([
|
||
'status' => true,
|
||
'code' => 200,
|
||
'data' => $data
|
||
], 200);
|
||
} else {
|
||
return $this->respond([
|
||
'status' => false,
|
||
'code' => 400,
|
||
'message' => 'No data found'
|
||
], 200);
|
||
}
|
||
}
|
||
|
||
public function getClientPolicyDataBasedOnClientAndInsuer()
|
||
{
|
||
|
||
$client_id = $this->request->getGet('client_id') ?? 0;
|
||
$client_branch_id = $this->request->getGet('client_branch_id') ?? 0;
|
||
$insurer_id = $this->request->getGet('insurer_id') ?? 0;
|
||
$insurer_branch_id = $this->request->getGet('insurer_branch_id') ?? 0;
|
||
$policy_type_id = $this->request->getGet('policy_type_id') ?? 0;
|
||
|
||
$builder = db_connect()->table("client_policy")
|
||
->select("
|
||
client_policy.*,
|
||
policy_type.policy_type,
|
||
")
|
||
->join('policy_type', 'client_policy.policy_type_id = policy_type.id')
|
||
->where([
|
||
'client_policy.is_active' => 1,
|
||
]);
|
||
|
||
if (!empty($client_id)) {
|
||
$builder->where('client_policy.client_id', $client_id);
|
||
}
|
||
if (!empty($client_branch_id)) {
|
||
$builder->where('client_policy.client_branch_id', $client_branch_id);
|
||
}
|
||
if (!empty($insurer_id)) {
|
||
$builder->where('client_policy.insurer_id', $insurer_id);
|
||
}
|
||
if (!empty($insurer_branch_id)) {
|
||
$builder->where('client_policy.insurer_branch_id', $insurer_branch_id);
|
||
}
|
||
if (!empty($policy_type_id)) {
|
||
$builder->where('client_policy.policy_type_id', $policy_type_id);
|
||
}
|
||
|
||
$result = $builder->get()->getResultArray();
|
||
|
||
if ($result) {
|
||
return $this->respond(['status' => true, 'code' => 200, 'data' => $result, 'getData' => $this->request->getGet()], 200);
|
||
} else {
|
||
return $this->respond(['status' => false, 'code' => 400, 'message' => 'No data found'], 200);
|
||
}
|
||
}
|
||
|
||
public function checkCDAmountForBasePremium()
|
||
{
|
||
$base_premium = $this->request->getGet('base_premium') ?? 0;
|
||
$cd_ac_no = $this->request->getGet('cd_ac_no') ?? 0;
|
||
|
||
// Validate inputs
|
||
if (empty($cd_ac_no)) {
|
||
return $this->respond(['status' => false, 'code' => 400, 'message' => 'CD Account Number is required'], 200);
|
||
}
|
||
|
||
// Build query
|
||
$db = db_connect();
|
||
$builder = $db->table("cash_deposit")
|
||
->where('cd_ac_pk', $cd_ac_no)
|
||
->where('is_active', 1)
|
||
->orderBy('id', 'desc')
|
||
->limit(1);
|
||
|
||
$result = $builder->get()->getRowArray();
|
||
|
||
if ($result) {
|
||
// Check if base premium exceeds balance
|
||
$base_premium_greater_than_balance = $base_premium > $result['balance'];
|
||
|
||
return $this->respond([
|
||
'status' => true,
|
||
'code' => 200,
|
||
'data' => $result,
|
||
'base_premium' => $base_premium,
|
||
'cd_ac_no' => $cd_ac_no,
|
||
'base_premium_greater_than_balance' => $base_premium_greater_than_balance,
|
||
], 200);
|
||
}
|
||
|
||
return $this->respond(['status' => false, 'code' => 400, 'message' => 'No data found for this CD'], 200);
|
||
}
|
||
|
||
public function getInsurerStatementMonth()
|
||
{
|
||
$insurer_id = $this->request->getGet('insurer_id');
|
||
$month = $this->request->getGet('month');
|
||
// echo $month;
|
||
$insurer_branch_id = explode('-', $insurer_id)[1];
|
||
$insurer_id = explode('-', $insurer_id)[0];
|
||
$month = $month . '-01';
|
||
$month = change_date_format($month, 'Y-M-d', 'Y-m-d');
|
||
// echo $month;
|
||
|
||
$res_data = $this->insurerStatements
|
||
->where('insurer_id', $insurer_id)
|
||
->where('branch_id', $insurer_branch_id)
|
||
->where('month', $month)
|
||
->where('is_active', 1)
|
||
->where('file_status', 'success')
|
||
->findAll();
|
||
|
||
return $this->respond(['dataStatus' => true, 'code' => 200, 'data' => $res_data], 200);
|
||
}
|
||
|
||
public function deleteStatement($id)
|
||
{
|
||
// echo $id;die();
|
||
$this->coShareStmtDetailsModel->where('statement_id', $id)
|
||
->set(['is_active' => 0])
|
||
->update();
|
||
$this->invPaymentDetailsModel->where('statement_id', $id)
|
||
->set(['is_active' => 0])
|
||
->update();
|
||
$this->insurerStatements->where('id', $id)
|
||
->set(['is_active' => 0])
|
||
->update();
|
||
return $this->respond(['dataStatus' => true, 'code' => 200], 200);
|
||
}
|
||
|
||
public function sendInstallmentRemainderMail()
|
||
{
|
||
|
||
$this->myLogger->logme("error", "Cron Job For Send Installment Remainder Mail Started");
|
||
|
||
try {
|
||
|
||
try {
|
||
|
||
$bdsInstallmentData = $this->BdsPlacementModel->getClientInstallmentDetails();
|
||
} catch (Exception $e) {
|
||
|
||
$this->myLogger->logme('error', 'Exception: ' . $e->getMessage() . 'Page: ' . $e->getFile() . ' Line: ' . $e->getLine());
|
||
}
|
||
$this->myLogger->logme("error", "Data for BDS Installment " . json_encode($bdsInstallmentData));
|
||
// dd($bdsInstallmentData);
|
||
|
||
if (empty($bdsInstallmentData)) {
|
||
|
||
$this->myLogger->logme("error", "No Client Installment is Due in the 15th Day");
|
||
|
||
return false;
|
||
}
|
||
|
||
foreach ($bdsInstallmentData as $installmentData) {
|
||
|
||
$mailData = $this->PrepareBDSMailData($installmentData);
|
||
$to_mail = $mailData['to_mail'];
|
||
$message = $mailData['message'];
|
||
$subject = $mailData['subject'];
|
||
|
||
$this->myLogger->logme("error", "Installment Pending for" . $subject);
|
||
|
||
$common = ['mail_type' => 'installment_amount_due_remainder_mail'];
|
||
|
||
$res = MailHelper::send_email(['mail' => $to_mail, 'subject' => $subject, 'message' => $message, 'common' => $common]);
|
||
|
||
$res = json_decode($res);
|
||
$this->myLogger->logme('error', 'res: ' . json_encode($res));
|
||
|
||
if ($res->status == 'success') {
|
||
return true;
|
||
} else {
|
||
return false;
|
||
}
|
||
}
|
||
} catch (Exception $e) {
|
||
|
||
$this->myLogger->logme('error', 'Exception: ' . $e->getMessage() . 'Page: ' . $e->getFile() . ' Line: ' . $e->getLine());
|
||
}
|
||
}
|
||
|
||
protected function PrepareBDSMailData($data)
|
||
{
|
||
|
||
try {
|
||
|
||
$installment_amount = $data['installment_amount'];
|
||
$payment_date = date('d-m-Y', strtotime($data['payment_date']));
|
||
$client = $data['client_name'];
|
||
$branch = $data['branch_name'];
|
||
$sales_person_mail = $data['sales_person'];
|
||
$heads = $data['heads'];
|
||
$admins = $data['admins'];
|
||
$buisness_team = $data['buisness_team'];
|
||
$policy_no = $data['policy_no'];
|
||
$client_short_name = isset($data['short_name']) && $data['short_name'] != null ? $data['short_name'] : $data['client_name'];
|
||
|
||
$subject = "Installment Amount Due For Client - {$client_short_name} - Policy NO({$policy_no}) is Due On - {$payment_date}";
|
||
|
||
$message = "Policy Installment for Client - {$client}, Branch - {$branch} is Due on {$payment_date}
|
||
with amount of {$installment_amount}.<br>
|
||
Policy No : {$policy_no}";
|
||
|
||
|
||
$to_mail = array_merge(
|
||
array_column($heads, 'email'),
|
||
array_column($admins, 'email'),
|
||
array_column($buisness_team, 'email'),
|
||
[$sales_person_mail]
|
||
);
|
||
|
||
$to_mail = array_unique($to_mail);
|
||
|
||
$this->myLogger->logme("error", "Selected To Address : " . json_encode($to_mail));
|
||
|
||
// dd($to_mail);
|
||
return [
|
||
'to_mail' => $to_mail,
|
||
'message' => $message,
|
||
'subject' => $subject
|
||
];
|
||
} catch (Exception $e) {
|
||
|
||
$this->myLogger->logme('error', 'Exception: ' . $e->getMessage() . 'Page: ' . $e->getFile() . ' Line: ' . $e->getLine());
|
||
}
|
||
}
|
||
|
||
public function getMoreInfo()
|
||
{
|
||
|
||
$pt_id = $this->request->getPost("pt_id");
|
||
$data_to_send['bds_data'] = $this->BdsPlacementModel->where("is_active", 1)->where("pt_id", $pt_id)->findAll();
|
||
|
||
foreach ($data_to_send['bds_data'] as &$data) {
|
||
|
||
$data['payment_date'] = (new \DateTime($data['payment_date']))->format('d-m-Y');
|
||
}
|
||
|
||
if (!empty($data_to_send)) {
|
||
|
||
return $this->respond(['status' => true, "data" => $data_to_send], 200);
|
||
} else {
|
||
|
||
return $this->respond(['status' => false, "No Data Found For the Policy Transaction"], 404);
|
||
}
|
||
}
|
||
|
||
public function saveInstallment()
|
||
{
|
||
|
||
$installments = $this->request->getPost('installments');
|
||
|
||
if (!$installments || !is_array($installments)) {
|
||
return $this->respond(['status' => false, 'message' => 'No data received'], 400);
|
||
}
|
||
|
||
$this->myLogger->logme("error", json_encode($installments));
|
||
// die();
|
||
|
||
foreach ($installments as &$row) {
|
||
// Convert date from d-m-Y to Y-m-d
|
||
if (!empty($row['payment_date'])) {
|
||
$date = \DateTime::createFromFormat('d-m-Y', $row['payment_date']);
|
||
if ($date) {
|
||
$row['payment_date'] = $date->format('Y-m-d');
|
||
}
|
||
}
|
||
$this->BdsPlacementModel->save($row);
|
||
}
|
||
|
||
return $this->respond(['status' => true, 'message' => 'Data saved successfully'], 200);
|
||
}
|
||
|
||
protected function getPolicyForEndorsment()
|
||
{
|
||
|
||
$policyList = [];
|
||
$policyListByClient = [];
|
||
|
||
|
||
$clients = $this->clientModel
|
||
->select("*, DATE_FORMAT(dob, '%d-%m-%Y') as dob")
|
||
->where('is_active', 1)
|
||
->findAll();
|
||
|
||
$clientIds = array_column($clients, 'id');
|
||
|
||
// $policies = $this->clientPolicyModel
|
||
// ->select("
|
||
// client_policy.*,
|
||
// policy_type.policy_type,
|
||
// policy_type.ebp,
|
||
// policy_type.etp,
|
||
// policy_type.iep,
|
||
// policy_type.itp,
|
||
// policy_type.bap,
|
||
// policy_type.allocg,
|
||
// DATE_FORMAT(client_policy.policy_start_date, '%d/%m/%Y') as policy_start_date,
|
||
// DATE_FORMAT(client_policy.policy_end_date, '%d/%m/%Y') as policy_end_date
|
||
// ")
|
||
// ->join('policy_type', 'policy_type.id = client_policy.policy_type_id')
|
||
// ->join('policy_transaction pt', 'pt.client_policy_id = client_policy.id and pt.action_type = "inception" and pt.is_active = 1 and pt.client_policy_id is not null')
|
||
// ->whereIn('client_policy.client_id', $clientIds)
|
||
// ->where('client_policy.is_active', 1)
|
||
// ->findAll();
|
||
|
||
$policies = $this->policyTransactionModel
|
||
->select("
|
||
policy_transaction.*,
|
||
policy_type.policy_type,
|
||
policy_type.ebp,
|
||
policy_type.etp,
|
||
policy_type.iep,
|
||
policy_type.itp,
|
||
policy_type.bap,
|
||
policy_type.allocg,
|
||
DATE_FORMAT(policy_transaction.policy_start_date, '%d/%m/%Y') as policy_start_date,
|
||
DATE_FORMAT(policy_transaction.policy_end_date, '%d/%m/%Y') as policy_end_date
|
||
")
|
||
->join('policy_type', 'policy_type.id = policy_transaction.policy_type_id')
|
||
->whereIn('policy_transaction.client_id', $clientIds)
|
||
->where('policy_transaction.is_active', 1)
|
||
->where('policy_transaction.action_type', "inception")
|
||
->findAll();
|
||
|
||
foreach ($policies as $policy) {
|
||
$policyList[$policy['client_branch_id']][] = $policy;
|
||
$policyListByClient[$policy['client_id']][] = $policy;
|
||
if (isset($policyCount[$policy['client_id']])) {
|
||
$policyCount[$policy['client_id']]++;
|
||
} else {
|
||
$policyCount[$policy['client_id']] = 1;
|
||
}
|
||
}
|
||
|
||
return [$policyList, $policyListByClient];
|
||
}
|
||
|
||
public function reportBDSNew()
|
||
{
|
||
// 🧭 Basic Page Info
|
||
$data['tab_name'] = 'BDS Report';
|
||
$data['page_name'] = 'BDS Report';
|
||
|
||
// 📋 Dropdown Data
|
||
$data['issuer'] = [1 => 'JIBS', 2 => 'Nhance'];
|
||
$data['client_type'] = [1 => 'Group', 2 => 'Individual'];
|
||
$data['issuing_type'] = [1 => 'Fresh', 2 => 'Renewal', 3 => 'Roll Over'];
|
||
$data['policy_status'] = [
|
||
'pending' => 'Pending',
|
||
'exported_to_insurer' => 'Exported to Insurer',
|
||
'imported_from_insurer'=> 'Imported from Insurer',
|
||
'exported_to_tpa' => 'Exported to TPA',
|
||
'imported_from_tpa' => 'Imported from TPA',
|
||
'completed' => 'Completed'
|
||
];
|
||
$data['invoice_status_array'] = [
|
||
'yet_to_generate' => 'Yet to Generate',
|
||
'generated' => 'Generated',
|
||
'send' => 'Send',
|
||
'recived' => 'Recived',
|
||
];
|
||
$data['date_type'] = [
|
||
'policy_issue_date' => 'Policy Issue Date',
|
||
'policy_start_date' => 'Policy Start Date',
|
||
'policy_end_date' => 'Policy End Date',
|
||
'data_received_date' => 'Data Received Date',
|
||
'closure_date' => 'Closure Date',
|
||
'statement_month' => 'Statement Month',
|
||
];
|
||
|
||
// 🏢 Fetch Active Data
|
||
$data['insurer'] = $this->insurerModel->where('is_active', 1)->findAll();
|
||
$data['policy_types'] = $this->policyTypeModel->where('is_active', 1)->findAll();
|
||
$data['clients'] = $this->clientModel->where('is_active', 1)->findAll();
|
||
$data['users'] = $this->userModel->where('is_active', 1)->findAll();
|
||
$data['policy_count'] = $this->policyTransactionModel->where('is_active', 1)->countAllResults();
|
||
|
||
// 🕐 Filters
|
||
$start_date = $this->request->getGet('start_date');
|
||
$end_date = $this->request->getGet('end_date');
|
||
$client_id = $this->request->getGet('client_id');
|
||
$insurer_id = $this->request->getGet('insurer_id');
|
||
$policy_type_id = $this->request->getGet('policy_type_id');
|
||
$date_type = $this->request->getGet('date_type');
|
||
$issuer = $this->request->getGet('issuer');
|
||
$client_branch_id = $this->request->getGet('client_branch_id');
|
||
$insurer_branch_id = $this->request->getGet('insurer_branch_id');
|
||
$client_policy_id = $this->request->getGet('client_policy_id');
|
||
$user_id = $this->request->getGet('user_id');
|
||
|
||
// Handle statement month range
|
||
if ($date_type == 'statement_month') {
|
||
$start_date = (string) date('Y-m-01', strtotime($start_date));
|
||
$end_date = (string) date('Y-m-31', strtotime($end_date));
|
||
}
|
||
|
||
// Ensure default values
|
||
$start_date = $start_date ?: 0;
|
||
$end_date = $end_date ?: 0;
|
||
$client_id = $client_id ?: 0;
|
||
$insurer_id = $insurer_id ?: 0;
|
||
$policy_type_id = $policy_type_id ?: 0;
|
||
$date_type = $date_type ?: 0;
|
||
$issuer = $issuer ?: 0;
|
||
$client_branch_id = $client_branch_id ?: 0;
|
||
$insurer_branch_id = $insurer_branch_id ?: 0;
|
||
$client_policy_id = $client_policy_id ?: 0;
|
||
$user_id = $user_id ?: 0;
|
||
|
||
// 🧾 Handle POST requests (Dashboard filters)
|
||
if ($this->request->is('post')) {
|
||
$isFromDashboard = $this->request->getPost('is_dashboard');
|
||
|
||
if (!empty($isFromDashboard) && $isFromDashboard == 1) {
|
||
$ids = array_filter(explode(',', $this->request->getPost('ids')));
|
||
|
||
if (!empty($ids)) {
|
||
$idsStr = implode(',', array_map('intval', $ids)); // sanitize IDs
|
||
$where = "policy_transaction.id IN ($idsStr)";
|
||
} else {
|
||
$where = []; // No valid IDs
|
||
}
|
||
}
|
||
}
|
||
|
||
// 📊 Fetch report data
|
||
$data['report_list'] = $this->policyTransactionModel->reportBDSNew(
|
||
$start_date,
|
||
$end_date,
|
||
$client_id,
|
||
$insurer_id,
|
||
$policy_type_id,
|
||
$date_type,
|
||
$issuer,
|
||
$client_branch_id,
|
||
$insurer_branch_id,
|
||
$client_policy_id,
|
||
$user_id,
|
||
$where ?? ''
|
||
);
|
||
|
||
$data['list_new'] = true;
|
||
|
||
// 🧩 Load View
|
||
$this->loadLayout('report_bds_filter', $data);
|
||
}
|
||
|
||
// ------------ BDS BULK MOTER POLICY UPLOAD -----------------------------------------------------------------------------------------------
|
||
|
||
public function policyBulkUpload()
|
||
{
|
||
$data['page_name'] = "BDS Bulk File Upload";
|
||
$data['tab_name'] = "BDS File Upload";
|
||
|
||
// $response = $this->insertBulkBdsData(['file_id' => 17]);
|
||
// dd($response);
|
||
|
||
|
||
if ($this->request->is('get')) {
|
||
|
||
$data['bds_dump_file_data'] = $this->bdsDumpModel
|
||
->select('
|
||
bds_dump_files.id as file_id,
|
||
bds_dump_files.file_name,
|
||
bds_dump_files.status,
|
||
bds_dump_files.created_at,
|
||
up.first_name as user_name
|
||
')
|
||
->join('user_profiles as up', 'bds_dump_files.created_by = up.id', 'left')
|
||
->where('bds_dump_files.is_active', 1)
|
||
->orderBy('bds_dump_files.id', 'desc')
|
||
->findAll();
|
||
|
||
return $this->loadLayout('bds_dump_file_list', $data);
|
||
} else {
|
||
|
||
$filename = '';
|
||
$fileSize = '';
|
||
|
||
//validate uploaded file
|
||
$validated = $this->validate([
|
||
'bds_dump_list' => [
|
||
'uploaded[bds_dump_list]',
|
||
'mime_in[bds_dump_list,application/vnd.ms-excel,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,application/vnd.oasis.opendocument.spreadsheet]',
|
||
'max_size[bds_dump_list,16384]',
|
||
],
|
||
]);
|
||
|
||
if ($validated) {
|
||
$avatar = $this->request->getFile('bds_dump_list');
|
||
if (!$avatar) {
|
||
$this->myLogger->logme("error", 'File not found');
|
||
return $this->respond(['status' => false, 'code' => 400, 'message' => 'File not found'], 400);
|
||
}
|
||
|
||
$is_moved = $avatar->move(WRITEPATH . 'uploads/bds_dump_excel/');
|
||
|
||
if ($is_moved) {
|
||
$filename = $avatar->getName();
|
||
$fileSize = $avatar->getSize(); // File size in bytes
|
||
$fileSize = $fileSize / (1024 * 1024); // Convert to MB
|
||
|
||
$this->myLogger->logme("error", 'File move successful');
|
||
} else {
|
||
$this->myLogger->logme("error", 'File move failed');
|
||
return $this->respond(['status' => false, 'code' => 500, 'message' => 'File move failed'], 500);
|
||
}
|
||
} else {
|
||
$this->myLogger->logme("error", 'Upload failed Invalid file');
|
||
return $this->respond(['status' => false, 'code' => 404, 'message' => 'Invalid file'], 404);
|
||
}
|
||
|
||
|
||
$status = 'inprogress';
|
||
$insert_data = [
|
||
'file_name' => $filename,
|
||
'status' => $status
|
||
];
|
||
|
||
$file_id = $this->bdsDumpModel->insert($insert_data);
|
||
$this->myLogger->logme("error", 'claim_dumb_file_id : {file_id}, uploaded success', ['file_id' => $file_id]);
|
||
|
||
//after file upload success than call the file formate validation
|
||
// $response = $this->bdsDumpExcelFileFormatValidation(["file_id" => $file_id]);
|
||
$r = Jobs::addJob(['job_name' => 'bdsDumpExcelFileFormatValidation', 'payload' => ['file_id' => $file_id]]);
|
||
|
||
return $this->respond(['status' => true, 'code' => 200, 'message' => 'File uploaded successfully. File being validated'], 200);
|
||
}
|
||
}
|
||
|
||
public function downloadBDSDumpFile($file_id)
|
||
{
|
||
// $actionType = $this->request->getGet();
|
||
$file_data = $this->bdsDumpModel->where('id', $file_id)->first();
|
||
$fileName = $file_data['file_name'];
|
||
|
||
$filePath = WRITEPATH . '/uploads/bds_dump_excel/' . $fileName;
|
||
|
||
try {
|
||
|
||
// Check if the file exists
|
||
if (file_exists($filePath)) {
|
||
// Set the appropriate MIME type
|
||
$mimeType = mime_content_type($filePath);
|
||
|
||
// Send the file to the client for download
|
||
return $this->response->download($filePath, null, $mimeType);
|
||
} else {
|
||
|
||
$data['message'] = 'The Physical File Not Found';
|
||
echo view('errors/404', $data);
|
||
}
|
||
} catch (\Exception $e) {
|
||
// Handle any exceptions
|
||
$errorMessage = $e->getMessage();
|
||
$this->myLogger->logme('error', $errorMessage);
|
||
// You can return an error response here
|
||
echo $errorMessage;
|
||
}
|
||
}
|
||
|
||
public function bdsDumpExcelFileFormatValidation($params)
|
||
{
|
||
helper('excel_util_helper');
|
||
$file_id = $params['file_id'];
|
||
$file = $this->bdsDumpModel->where("id", $file_id)->first();
|
||
|
||
$return = [];
|
||
if (empty($file)) {
|
||
return array('status' => false, 'message' => 'File not found in Database');
|
||
}
|
||
|
||
$file_name_with_path = WRITEPATH . "/uploads/bds_dump_excel/" . $file['file_name'];
|
||
|
||
//check physical file exist
|
||
if (!file_exists($file_name_with_path)) {
|
||
$message = "Physcial file not found";
|
||
$this->myLogger->logme('error', ($message . ' for file id : ' . $file_id));
|
||
$this->bdsDumpModel->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);
|
||
}
|
||
|
||
// get the BDS dump excel colums
|
||
$columns_to_check = $this->bds_bulk_upload_excel_file_column;
|
||
$keys = array_keys($columns_to_check);
|
||
$allowedHighestColumn = end($columns_to_check);
|
||
|
||
// Read the excel file
|
||
$excel_data = $this->extractExcelData($file['file_name'], $allowedHighestColumn['col_cell_name']);
|
||
$excel_columns = ($excel_data[0]);
|
||
// echo '<pre>'; var_dump($excel_columns);
|
||
|
||
|
||
//check no of columns in excel
|
||
$total_defined_columns = count($columns_to_check);
|
||
$excel_columns_count = count($excel_columns);
|
||
|
||
if($total_defined_columns != $excel_columns_count)
|
||
{
|
||
//columns count mismatch
|
||
$message = "File columns count mismatch. Expected - $total_defined_columns and received - $excel_columns_count";
|
||
$this->myLogger->logme('error',($message . ' for file id ' . $file_id));
|
||
$this->bdsDumpModel->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);
|
||
}
|
||
|
||
//check columns order in excel
|
||
$column_count_res = check_columns_name($columns_to_check, $excel_columns);
|
||
|
||
if(isset($column_count_res) && count($column_count_res))
|
||
{
|
||
//columns count mismatch
|
||
$message = implode("\n", $column_count_res);
|
||
$this->myLogger->logme('error',($message . ' for file id ' . $file_id));
|
||
$this->bdsDumpModel->where('id', $file_id)->set(['status' => 'failed','reason' => json_encode(['error_summary' => array_count_values([6]), 'error_data' => $message])])->update();
|
||
return array('error_summary' => [6], 'error_data' => $message);
|
||
}
|
||
|
||
//Store the error data by this structure
|
||
$result = ['error_type' => 1, 'error_summary' => [], 'error_data' => []];
|
||
|
||
$insurer_data = $this->insurerModel->where('is_active', 1)->findAll();
|
||
$insurer_branch_data = $this->insurerBranchModel->where('is_active', 1)->findAll();
|
||
$pt_data = $this->policyTransactionModel->where('is_active', 1)->findAll();
|
||
$user_data = $this->userModel->where('is_active', 1)->findAll();
|
||
$agent_data = db_connect()->table('partner_agent')->where('is_active', 1)->get()->getResultArray();
|
||
$rto_master = db_connect()->table('rto_master')->where('is_active', 1)->get()->getResultArray();
|
||
$vehicle_type = db_connect()->table('vehicle_type')->where('is_active', 1)->get()->getResultArray();
|
||
$nhance_branch_data = db_connect()->table('nhance_branch')->where('is_active', 1)->get()->getResultArray();
|
||
|
||
|
||
//remove header
|
||
unset($excel_data[0]);
|
||
|
||
try {
|
||
foreach ($excel_data as $row_key => $row) {
|
||
|
||
//avoid empty rows
|
||
if (check_row_is_empty_or_null($row)) {
|
||
break;
|
||
}
|
||
|
||
$insurers = [];
|
||
foreach ($row as $col_key => $col)
|
||
{
|
||
$is_mandatory = $columns_to_check[$keys[$col_key]]['is_mandatory'];
|
||
$format = $columns_to_check[$keys[$col_key]]['format'];
|
||
$data_type = $columns_to_check[$keys[$col_key]]['data_type'];
|
||
$allowed_values = $columns_to_check[$keys[$col_key]]['allowed_values'];
|
||
$custom_function = isset($columns_to_check[$keys[$col_key]]['custom']) ? $columns_to_check[$keys[$col_key]]['custom'] : null;
|
||
$binding_params = isset($columns_to_check[$keys[$col_key]]['params']) ? $columns_to_check[$keys[$col_key]]['params'] : null;
|
||
|
||
$column_dispaly_name = $columns_to_check[$keys[$col_key]]['col_name'];
|
||
$column_index = $columns_to_check[$keys[$col_key]]['col_idx'];
|
||
$column_cell = $columns_to_check[$keys[$col_key]]['col_cell_name'];
|
||
|
||
|
||
//mandatory check
|
||
if(is_bool($is_mandatory) && $is_mandatory === true)
|
||
{
|
||
if($col == "" || $col == NULL)
|
||
{
|
||
array_push($result['error_summary'],1); //push error code for summary
|
||
$result['error_data'][$row_key][$keys[$col_key]]['col_name'] = $column_dispaly_name; //push column name
|
||
$result['error_data'][$row_key][$keys[$col_key]]['col_idx'] = $column_index; //push column index
|
||
$result['error_data'][$row_key][$keys[$col_key]]['error'][] = 'Value is mandatory'; //push exact error desc
|
||
}
|
||
}
|
||
|
||
//format check
|
||
if(isset($format))
|
||
{
|
||
$validation = validate_excel_value($col, $data_type, $format, $allowed_values);
|
||
if (!$validation['status']) {
|
||
array_push($result['error_summary'], 2);
|
||
|
||
$result['error_data'][$row_key][$keys[$col_key]]['col_name'] = $column_dispaly_name;
|
||
$result['error_data'][$row_key][$keys[$col_key]]['col_idx'] = $column_index;
|
||
$result['error_data'][$row_key][$keys[$col_key]]['error'][] = $validation['error'];
|
||
}
|
||
}
|
||
|
||
//allowed values check
|
||
if(($is_mandatory === true && isset($allowed_values) && is_array($allowed_values)) || (is_array($is_mandatory) && (isset($allowed_values) && is_array($allowed_values))))
|
||
{
|
||
if(!in_array((trim($col)),$allowed_values))
|
||
{
|
||
array_push($result['error_summary'],3);
|
||
$result['error_data'][$row_key][$keys[$col_key]]['col_name'] = $column_dispaly_name; //push column name
|
||
$result['error_data'][$row_key][$keys[$col_key]]['col_idx'] = $column_index; //push column index
|
||
$result['error_data'][$row_key][$keys[$col_key]]['error'][] = "Value not allowed: Expected ".implode(",",$allowed_values)." and received $col";
|
||
}
|
||
}
|
||
|
||
//custom function check
|
||
if(isset($custom_function))
|
||
{
|
||
//convert string params into PHP variables
|
||
// Create an array of variables to pass custom helper funcitons
|
||
$param_values = [];
|
||
foreach($binding_params as $bkey => $bparam) { $param_values[] = ($$bparam); }
|
||
$res = call_user_func_array($custom_function,$param_values);
|
||
if($res['status'] === false) {
|
||
array_push($result['error_summary'],4);
|
||
$result['error_data'][$row_key][$keys[$col_key]]['col_name'] = $column_dispaly_name; //push column name
|
||
$result['error_data'][$row_key][$keys[$col_key]]['col_idx'] = $column_index; //push column index
|
||
$result['error_data'][$row_key][$keys[$col_key]]['error'][] = $res['error'];
|
||
}
|
||
|
||
if($res['status'] == true && isset($res['insurer'])){
|
||
$insurers = $res['insurer'];
|
||
}
|
||
|
||
}
|
||
|
||
}//col foreach
|
||
|
||
}
|
||
} catch (\Exception $e) {
|
||
$errorDetails = [
|
||
'error_message' => $e->getMessage(),
|
||
'file' => $e->getFile(),
|
||
'line' => $e->getLine(),
|
||
'stack_trace' => $e->getTraceAsString(),
|
||
];
|
||
$message = "Contact system admin";
|
||
$this->bdsDumpModel->where('id', $file_id)->set(['status' => 'failed', 'reason' => json_encode(['error_summary' => array_count_values([5]), 'error_data' => $message])])->update();
|
||
$this->myLogger->logme("error", 'Claim dump file format validation failed due to : ' . json_encode($errorDetails ?? []));
|
||
return $errorDetails;
|
||
}
|
||
|
||
// return $result;
|
||
|
||
if (isset($result['error_summary']) && count($result['error_summary'])) {
|
||
$result['error_summary'] = array_count_values($result['error_summary']);
|
||
$status = 'failed';
|
||
$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 failed', ['file_id' => $file_id]);
|
||
} else { //trigger next data validation via job queue server
|
||
//proceed next data level validation in JOB queue
|
||
$r = Jobs::addJob(['job_name' => 'insertBulkBdsData', 'payload' => ['file_id' => $file_id]]);
|
||
// $response = $this->insertBulkBdsData(['file_id' => $file_id]);
|
||
}
|
||
|
||
return $result;
|
||
}
|
||
|
||
public function insertBulkBdsData($params)
|
||
{
|
||
helper('excel_util_helper');
|
||
$file_id = $params['file_id'];
|
||
$file = $this->bdsDumpModel->where("id", $file_id)->first();
|
||
|
||
$return = [];
|
||
if (empty($file)) {
|
||
return array('status' => false, 'message' => 'File not found in Database');
|
||
}
|
||
|
||
$file_name_with_path = WRITEPATH . "/uploads/bds_dump_excel/" . $file['file_name'];
|
||
|
||
//check physical file exist
|
||
if (!file_exists($file_name_with_path)) {
|
||
$message = "Physcial file not found";
|
||
$this->myLogger->logme('error', ($message . ' for file id : ' . $file_id));
|
||
$this->bdsDumpModel->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);
|
||
}
|
||
|
||
// get the BDS dump excel colums
|
||
$columns_to_check = $this->bds_bulk_upload_excel_file_column;
|
||
$keys = array_keys($columns_to_check);
|
||
$allowedHighestColumn = end($columns_to_check);
|
||
|
||
// Read the excel file
|
||
$excel_data = $this->extractExcelData($file['file_name'], $allowedHighestColumn['col_cell_name']);
|
||
$excel_columns = ($excel_data[0]);
|
||
|
||
//remove header
|
||
unset($excel_data[0]);
|
||
// dd($excel_data);
|
||
|
||
//Store the error data by this structure
|
||
$result = ['error_type' => 1, 'error_summary' => [], 'error_data' => []];
|
||
|
||
$client_data = $this->clientModel->where('is_active', 1)->where('client_type', 1)->findAll();
|
||
$insurer_data = $this->insurerModel->where('is_active', 1)->findAll();
|
||
$insurer_branch_data = $this->insurerBranchModel->where('is_active', 1)->findAll();
|
||
$vehicle_data = $this->vehicleModel->where('is_active', 1)->findAll();
|
||
$user_data = $this->userModel->where('is_active', 1)->findAll();
|
||
$agent_data = db_connect()->table('partner_agent')->where('is_active', 1)->get()->getResultArray();
|
||
$rto_master = db_connect()->table('rto_master')->where('is_active', 1)->get()->getResultArray();
|
||
$vehicle_type_data = db_connect()->table('vehicle_type')->where('is_active', 1)->get()->getResultArray();
|
||
$nhance_branch_data = db_connect()->table('nhance_branch')->where('is_active', 1)->get()->getResultArray();
|
||
|
||
try {
|
||
|
||
$pt_ids = [];
|
||
foreach ($excel_data as $row_key => $row) {
|
||
|
||
//avoid empty rows
|
||
if (check_row_is_empty_or_null($row)) {
|
||
break;
|
||
}
|
||
|
||
$vehicle_number = trim($row[2]);
|
||
$vehicle_type = trim($row[3]);
|
||
$client_name = trim($row[5]);
|
||
$client_email = trim($row[6]);
|
||
|
||
$insurer_short_name = trim($row[7]);
|
||
$insurer_branch_code = trim($row[8]);
|
||
$salse_generated_by = trim($row[13]);
|
||
$serviced_by = trim($row[14]);
|
||
$agent_code = trim($row[15]);
|
||
$nhance_branch = trim($row[1]);
|
||
|
||
$policy_no = trim($row[4]);
|
||
$policy_issue_date = trim($row[9]);
|
||
$policy_start_date = trim($row[10]);
|
||
$policy_end_date = trim($row[11]);
|
||
$revenue_type = trim($row[12]);
|
||
|
||
$base_premium = trim($row[16]);
|
||
$non_commission_premium_amount = trim($row[17]);
|
||
$tp_premium = trim($row[18]);
|
||
$igst = trim($row[19]);
|
||
$cgst = trim($row[20]);
|
||
$sgst = trim($row[21]);
|
||
$stamp_duty = trim($row[22]);
|
||
// $total = trim($row[23]);
|
||
$agreed_amount = trim($row[23]);
|
||
$agreed_bp_percentage = trim($row[24]);
|
||
$agreed_tp_percentage = trim($row[25]);
|
||
// $actual_bp_amount = trim($row[27]);
|
||
// $actual_tp_amount = trim($row[28]);
|
||
// $actual_bp_percentage = trim($row[29]);
|
||
// $actual_tp_percentage = trim($row[30]);
|
||
// $actual_bp_brokerage_amount = trim($row[31]);
|
||
// $actual_tp_brokerage_amount = trim($row[32]);
|
||
// $expected_amount = trim($row[33]);
|
||
// $rewards = trim($row[34]);
|
||
$actual_bp_amount = 0;
|
||
$actual_tp_amount = 0;
|
||
$actual_bp_percentage = 0;
|
||
$actual_tp_percentage = 0;
|
||
$actual_bp_brokerage_amount = 0;
|
||
$actual_tp_brokerage_amount = 0;
|
||
$expected_amount = 0;
|
||
$rewards = 0;
|
||
|
||
$calculation = calculateMotorPolicyAmounts([
|
||
'base_premium' => trim($row[16]),
|
||
'non_commission_premium_amount' => trim($row[17]),
|
||
'tp_premium' => trim($row[18]),
|
||
'igst' => trim($row[19]),
|
||
'cgst' => trim($row[20]),
|
||
'sgst' => trim($row[21]),
|
||
'stamp_duty' => trim($row[22]),
|
||
'agreed_amount' => trim($row[23]),
|
||
'agreed_bp_percentage' => trim($row[24]),
|
||
'agreed_tp_percentage' => trim($row[25]),
|
||
'standard_bp_percentage' => 15.00,
|
||
'standard_tp_percentage' => 2.5
|
||
]);
|
||
|
||
log_message('error', 'Motor Policy Calculation: ' . json_encode($calculation));
|
||
|
||
|
||
$current_insurer_data = check_insurer_exist($row, $insurer_data)['insurer'] ?? null;
|
||
$current_insurer_branch_data = check_insurer_branch_exist($row, $insurer_branch_data, $current_insurer_data)['branch'] ?? null;
|
||
|
||
$current_nhance_branch = check_nhance_branch($row, $nhance_branch_data)['branch'] ?? null;
|
||
$current_agent_data = check_agent_exist($row, $agent_data)['agent'] ?? null;
|
||
|
||
$salse = check_user_exist($row, 13, $user_data)['user'] ?? null;
|
||
$service = check_user_exist($row, 14, $user_data)['user'] ?? null;
|
||
|
||
$gst_amt = calculate_gst_amount($row) ?? null;
|
||
|
||
// 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 = [
|
||
|
||
'issuer' => 2,
|
||
'issuer_branch' => $salse['nhance_branch_id'] ?? null,
|
||
'client_id' => $client_id,
|
||
'policy_type_id' => 8,
|
||
'insurer_id' => $current_insurer_branch_data['insurer_id'] ?? null,
|
||
'insurer_branch_id' => $current_insurer_branch_data['id'] ?? null,
|
||
'policy_no' => $policy_no,
|
||
'vehicle_id' => $vehicle_id,
|
||
'issue_type' => 1,
|
||
'policy_issue_date' => change_date_format($policy_issue_date, 'd/M/Y', 'Y-m-d'),
|
||
'policy_start_date' => change_date_format($policy_start_date, 'd/M/Y', 'Y-m-d'),
|
||
'policy_end_date' => change_date_format($policy_end_date, 'd/M/Y', 'Y-m-d'),
|
||
'action_type' => 'inception',
|
||
'revenue_type' => $revenue_type,
|
||
'co_share' => 0,
|
||
'status' => 'completed',
|
||
'renewal_date' => change_date_format($policy_end_date, 'd/M/Y', 'Y-m-d'),
|
||
'policy_holder_name' => $client_name,
|
||
'month' => change_date_format($policy_issue_date, 'd/M/Y', 'Y-m-d'),
|
||
'sales_generated_by' => $salse['id'] ?? null,
|
||
'serviced_by' => $service['id'] ?? null,
|
||
'salse_person_manager_id' => $salse['rm_id'] ?? null,
|
||
'service_person_manager_id' => $service['rm_id'] ?? null,
|
||
'service_person_branch_id' => $service['nhance_branch_id'] ?? null,
|
||
'agent_id' => $current_agent_data['id'] ?? null,
|
||
'agent_code' => $current_agent_data['agent_code'] ?? null,
|
||
'file_id' => $params['file_id'],
|
||
'endorsement_no' => null,
|
||
'client_branch_id' => null,
|
||
'client_policy_id' => null,
|
||
'ct_type' => null,
|
||
'remarks' => null,
|
||
|
||
];
|
||
|
||
$co_share_data = [
|
||
|
||
'pt_id' => null,
|
||
'insurer_id' => $current_insurer_branch_data['insurer_id'] ?? null,
|
||
'insurer_branch_id' => $current_insurer_branch_data['id'] ?? null,
|
||
'co_share_type' => 1,
|
||
'co_share_per' => 100,
|
||
|
||
'bp_amt' => $base_premium,
|
||
'bp_gst_amt' => $calculation['gst_amount'] ?? $gst_amt,
|
||
'bp_igst' => $igst ,
|
||
'bp_sgst' => $sgst,
|
||
'bp_cgst' => $cgst,
|
||
|
||
'tp_amt' => $tp_premium,
|
||
'tp_gst_amt' => 0,
|
||
'tp_igst' => 0,
|
||
'tp_sgst' => 0,
|
||
'tp_cgst' => 0,
|
||
|
||
'tep_amt' => 0,
|
||
'tep_gst_amt' => 0,
|
||
'tep_igst' => 0,
|
||
'tep_sgst' => 0,
|
||
'tep_cgst' => 0,
|
||
|
||
'agreed_amt' => $agreed_amount,
|
||
'agreed_bp_per' => $agreed_bp_percentage,
|
||
'agreed_tp_per' => $agreed_tp_percentage,
|
||
'agreed_tep_per' => 0,
|
||
|
||
'actual_bp_amt' => $actual_bp_amount,
|
||
'actual_tp_amt' => $actual_tp_amount,
|
||
'actual_tep_amt' => 0,
|
||
|
||
'actual_bp_per' => $actual_bp_percentage,
|
||
'actual_tp_per' => $actual_tp_percentage,
|
||
'actual_tep_per' => 0,
|
||
|
||
'actual_bp_brokerage_amt' => $actual_bp_brokerage_amount,
|
||
'actual_tp_brokerage_amt' => $actual_tp_brokerage_amount,
|
||
'actual_tep_brokerage_amt' => 0,
|
||
|
||
'standerd_bp_per' => 15.00,
|
||
'standerd_tp_per' => 2.50,
|
||
'agreed_tep_per' => 0,
|
||
|
||
'reward' => $rewards,
|
||
'variance' => 0,
|
||
|
||
'remark' => null,
|
||
'amount' => $calculation['total_amount'] ?? 0,
|
||
'stamp_duty' => $stamp_duty,
|
||
|
||
'cop_amt' => $base_premium,
|
||
'cotp_amt' => $tp_premium,
|
||
'cotep_amt' => 0.00,
|
||
|
||
'exp_amt' => $calculation['expected_amount'] ?? $expected_amount,
|
||
'statement_id' => null,
|
||
|
||
'follower_policy_no' => null,
|
||
'non_comm_per_amt' => $non_commission_premium_amount,
|
||
|
||
'pt_policy_issue_date' => change_date_format($policy_issue_date, 'd/M/Y', 'Y-m-d'),
|
||
|
||
'file_id' => $params['file_id']
|
||
];
|
||
|
||
if(!empty($vehicle_id) && !empty($client_id)){
|
||
$pt_id = $this->policyTransactionModel->insert($policy_transaction_data);
|
||
if($pt_id){
|
||
$co_share_data['pt_id'] = $pt_id;
|
||
$pt_co_share_id = $this->PTCOShareDetailsModel->insert($co_share_data);
|
||
|
||
$client_policy_insert_data = $this->prepareClientPolicyInsertData($policy_transaction_data);
|
||
$client_policy_id = $this->clientPolicyModel->insert($client_policy_insert_data);
|
||
$this->policyTransactionModel->update($pt_id, ['client_policy_id' => $client_policy_id]);
|
||
$pt_ids[] = $pt_id;
|
||
$this->myLogger->logme('error', "BDS entry successfully added with pt_id : $pt_id, pt_co_share_id : $pt_co_share_id, client_policy_id :$client_policy_id");
|
||
|
||
}
|
||
}else{
|
||
$this->myLogger->logme('error', 'Skipped......... , vehicle id and client id missing');
|
||
}
|
||
|
||
}
|
||
|
||
} catch (\Exception $e) {
|
||
$errorDetails = [
|
||
'error_message' => $e->getMessage(),
|
||
'file' => $e->getFile(),
|
||
'line' => $e->getLine(),
|
||
'stack_trace' => $e->getTraceAsString(),
|
||
];
|
||
$message = "Contact system admin";
|
||
$this->bdsDumpModel->where('id', $file_id)->set(['status' => 'failed', 'reason' => json_encode(['error_summary' => array_count_values([5]), 'error_data' => $message])])->update();
|
||
$this->myLogger->logme("error", 'Claim dump file format validation failed due to : ' . json_encode($errorDetails ?? []));
|
||
return $errorDetails;
|
||
}
|
||
|
||
// return $result;
|
||
|
||
if (isset($result['error_summary']) && count($result['error_summary'])) {
|
||
$result['error_summary'] = array_count_values($result['error_summary']);
|
||
$status = 'failed';
|
||
$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 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;
|
||
}
|
||
|
||
public function extractExcelData($file_name, $highestColumn)
|
||
{
|
||
// $file_name = "claims_dump_form_client.xlsx";
|
||
// Load the Excel file
|
||
$file_name_with_path = WRITEPATH . "/uploads/bds_dump_excel/" . $file_name;
|
||
$spreadsheet = \PhpOffice\PhpSpreadsheet\IOFactory::load($file_name_with_path);
|
||
$worksheet = $spreadsheet->getActiveSheet();
|
||
|
||
// Get the highest row and column numbers
|
||
$highestRow = $worksheet->getHighestDataRow();
|
||
// $highestColumn = $worksheet->getHighestDataColumn();
|
||
// dd($highestRow, $highestColumn);
|
||
|
||
// Get header row (assuming headers are in row 1)
|
||
// $headerRow = $worksheet->rangeToArray('A1:' . $highestColumn . '1', null, true, false)[0];
|
||
$excel_data = $worksheet->rangeToArray('A1:' . $highestColumn . $highestRow);
|
||
// print_rr($excel_data); die;
|
||
|
||
//Sanitize the excel data
|
||
$excel_data = ExcelSanitizeHelper::sanitizeArrayData($excel_data);
|
||
// dd($excel_data);
|
||
|
||
// dd($data);
|
||
return $excel_data;
|
||
}
|
||
|
||
public function getBdsBulkUploadExcelErrorData($file_id)
|
||
{
|
||
try {
|
||
|
||
$file = $this->bdsDumpModel->where('id', $file_id)->first();
|
||
$error_data = json_decode($file['reason']);
|
||
// dd($error_data);
|
||
|
||
$file_name_with_path = WRITEPATH . "/uploads/bds_dump_excel/" . $file['file_name'];
|
||
// Kint::dump(file_exists($file_name_with_path)); die;
|
||
|
||
//check the file exist or not
|
||
if (!file_exists($file_name_with_path)) {
|
||
$error_message = "File not found";
|
||
$this->myLogger->logme('error', ($error_message . ' for file id ' . $file_id));
|
||
return 0;
|
||
}
|
||
|
||
$columns_to_check = $this->bds_bulk_upload_excel_file_column;
|
||
$allowedHighestColumn = end($columns_to_check);
|
||
// Kint::dump($columns_to_check); die;
|
||
|
||
$excel_data = $this->extractExcelData($file['file_name'], $allowedHighestColumn['col_cell_name']);
|
||
$excelErrorData['excel_header'] = $excel_data[0];
|
||
unset($excel_data[0]);
|
||
|
||
// Kint::dump($excel_data); die;
|
||
if ($error_data->error_type == 1) {
|
||
|
||
$finalArray = [];
|
||
foreach ($error_data->error_data as $key => $value) {
|
||
foreach ($value as $key2 => $value2) {
|
||
$error_data = $value2->error;
|
||
$data = ['value' => $excel_data[$key][$value2->col_idx], 'error' => $error_data,];
|
||
$excel_data[$key][$value2->col_idx] = $data;
|
||
}
|
||
array_push($finalArray, $excel_data[$key]);
|
||
}
|
||
|
||
foreach ($finalArray as $fkey => $value) {
|
||
foreach ($value as $vkey => $arrayData) {
|
||
if (!is_array($arrayData)) {
|
||
$data = ['value' => $arrayData];
|
||
$finalArray[$fkey][$vkey] = $data;
|
||
}
|
||
}
|
||
}
|
||
|
||
$excelErrorData['excel_data'] = $finalArray;
|
||
return $excelErrorData;
|
||
} else if ($error_data->error_type == 2) {
|
||
|
||
|
||
$allErrors = [];
|
||
$typeTowArray = [];
|
||
|
||
foreach ($error_data->error_data as $index => $item) {
|
||
|
||
foreach ($item as $field) {
|
||
if (!isset($allErrors[$index])) {
|
||
$allErrors[$index] = [];
|
||
}
|
||
$allErrors[$index] = array_merge($allErrors[$index], $field->error);
|
||
}
|
||
}
|
||
|
||
// dd(array_keys($allErrors));
|
||
foreach ($allErrors as $key => $value) {
|
||
// echo $key;
|
||
// print_r($value);
|
||
foreach ($excel_data as $excel_data_index => $excel_data_value) {
|
||
if ($excel_data_value[0] == $key) {
|
||
$data = ['value' => $excel_data[$excel_data_index][1], 'error' => $value,];
|
||
$excel_data[$excel_data_index][1] = $data;
|
||
array_push($typeTowArray, $excel_data[$excel_data_index]);
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
// dd($data);
|
||
foreach ($typeTowArray as $fkey => $value) {
|
||
foreach ($value as $vkey => $arrayData) {
|
||
if (!is_array($arrayData)) {
|
||
$data = ['value' => $arrayData];
|
||
$typeTowArray[$fkey][$vkey] = $data;
|
||
}
|
||
}
|
||
}
|
||
|
||
$excelErrorData['excel_data'] = $typeTowArray;
|
||
return $excelErrorData;
|
||
}
|
||
|
||
} catch (\Exception $e) {
|
||
// Handle any exceptions
|
||
$errorMessage = $e->getMessage(); //die();
|
||
$this->myLogger->logme('error', $errorMessage);
|
||
return false; // You can return an error response here
|
||
}
|
||
}
|
||
|
||
public function getBdsdumpFileErrorData()
|
||
{
|
||
$file_id = $this->request->getGet('file_id');
|
||
$file = $this->bdsDumpModel->where('id', $file_id)->first();
|
||
if (!isset($file)) {
|
||
return $this->respond(['status' => false, 'code' => 404, 'message' => 'No data found'], 200);
|
||
} else {
|
||
return $this->respond(['status' => true, 'code' => 200, 'data' => $file['reason']], 200);
|
||
}
|
||
}
|
||
|
||
public function getBdsDumpExcelFileErrors($file_id)
|
||
{
|
||
// Render views and capture output
|
||
$result = $this->getBdsBulkUploadExcelErrorData($file_id) ?? [];
|
||
// dd($result);
|
||
|
||
if ($result != 0) {
|
||
|
||
$result['file_id'] = $file_id;
|
||
echo view('excel_errors', $result);
|
||
} else if ($result == 0) {
|
||
|
||
$data['message'] = 'File Not Found Physically';
|
||
return view('errors/404', $data);
|
||
} else {
|
||
|
||
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,
|
||
];
|
||
}
|
||
|
||
}
|