nhance_partner_be/app/Controllers/EndorsementController.php
2025-10-27 13:03:50 +05:30

175 lines
7.3 KiB
PHP

<?php
namespace App\Controllers;
use App\Models\EndorsementModel;
use App\Models\PolicyModel;
use App\Models\EnquiryModel;
use App\Models\QuotationModel;
use CodeIgniter\RESTful\ResourceController;
class EndorsementController extends ResourceController
{
protected $db;
protected $EndorsementModel;
protected $PolicyModel;
protected $QuotationModel;
protected $EnquiryModel;
public function __construct()
{
$this->db = db_connect();
$this->EndorsementModel = new EndorsementModel();
$this->PolicyModel = new PolicyModel();
$this->QuotationModel = new QuotationModel();
$this->EnquiryModel = new EnquiryModel();
}
public function EndorsementList()
{
try {
$id = $this->request->getGet('id'); // endorsement id
$manager_id = $this->request->getGet('manager_id');
$agent_id = $this->request->getGet('agent_id');
$policy_number = $this->request->getGet('policy_number');
$builder = $this->EndorsementModel
->select('partner_endorsement_request.*,
i.name as insurer_name,
ib.branch_name as insurer_branch,
c.client_name, c.phone as client_phone, c.email as client_email,
pa.name as agent_name,
pp.enquiry_id,
pe.reg_no,
etm.endorsement_type as endorsement_type_value')
->join('insurers i', 'i.id = partner_endorsement_request.insurer_id', 'left')
->join('insurer_branch ib', 'ib.id = partner_endorsement_request.insurer_branch_id', 'left')
->join('clients c', 'c.id = partner_endorsement_request.client_id', 'left')
->join('partner_agent pa', 'pa.id = partner_endorsement_request.agent_id', 'left')
->join('partner_policy pp', 'pp.policy_number = partner_endorsement_request.policy_number', 'left')
->join('partner_enquiry pe', 'pe.id = pp.enquiry_id', 'left')
->join('partner_endorsement_type_master etm', 'etm.id = partner_endorsement_request.endorsement_type', 'left')
->where('partner_endorsement_request.is_active', 1);
// If ID is provided, fetch single record
if (!empty($id)) {
$builder->where('partner_endorsement_request.id', $id);
$record = $builder->get()->getRowArray();
if (!$record) {
return $this->respond(['status' => 'failed','code' => 404,'data' => 'Not Found'], 404);
}
return $this->respond(['status' => 'success','code' => 200,'data' => $record ], 200);
}
// Apply filters
if (!empty($manager_id)) {
$builder->where('partner_endorsement_request.manager_id', $manager_id);
}
if (!empty($agent_id)) {
$builder->where('partner_endorsement_request.agent_id', $agent_id);
}
if (!empty($policy_number)) {
$builder->where('partner_endorsement_request.policy_number', $policy_number);
}
$data = $builder->get()->getResultArray();
foreach ($data as $key => $row) {
$data[$key]['created_at'] = date('d-m-Y h:i A', strtotime($row['created_at']));
$data[$key]['updated_at'] = date('d-m-Y h:i A', strtotime($row['updated_at']));
}
return $this->respond(['status' => 'success','code' => 200,'data' => $data], 200);
} catch (\Exception $e) {
return $this->respond(['status' => 'failed','code' => 500,'data' => $e->getMessage()], 500);
}
}
public function createEndorsement()
{
try {
$reqData = $this->request->getPost();
// Validate required fields
if (empty($reqData['policy_number']) || empty($reqData['endorsement_type']) || empty($reqData['endorsement_description'])) {
return $this->respond(['status' => 'failed','code' => 400,'data' => 'policy_number, endorsement_type and endorsement_description are required' ], 200);
}
// Fetch policy details
$policy = $this->PolicyModel->select('partner_policy.*, Q.insurer_id, Q.insurer_branch_id, E.name as client_name, E.mobile as client_mobile, E.email as client_email, E.reg_no')
->join('partner_quotation Q', 'Q.id = partner_policy.quotation_id AND Q.status = "Accepted"', 'left')
->join('partner_enquiry E', 'E.id = partner_policy.enquiry_id', 'left')
->where('partner_policy.policy_number', $reqData['policy_number'])
->first();
if (empty($policy)) {
return $this->respond(['status' => 'failed','code' => 404,'data' => 'Policy not found'], 200);
}
$uploadFile = $this->request->getFile('endorsement_file_name');
$uploadedFileName = null;
if ($uploadFile && $uploadFile->isValid()) {
$uploadPath = WRITEPATH . 'uploads/endorsement/';
if (!is_dir($uploadPath)) {
mkdir($uploadPath, 0777, true);
}
$uploadedFileName = time() . '_' . $uploadFile->getRandomName();
$uploadFile->move($uploadPath, $uploadedFileName);
}
// Prepare endorsement data
$endorsementData = [
'policy_number' => $policy['policy_number'],
'client_policy_id' => $policy['client_policy_id'] ?? null,
'insurer_id' => $policy['insurer_id'] ?? null,
'insurer_branch_id' => $policy['insurer_branch_id'] ?? null,
'client_id' => $policy['client_id'] ?? null,
'agent_id' => $policy['agent_id'] ?? null,
'manager_id' => $policy['manager_id'] ?? null,
'endorsement_type' => $reqData['endorsement_type'],
'endorsement_description'=> $reqData['endorsement_description'],
'endorsement_no' => $reqData['endorsement_no'] ?? null,
'created_by' => $reqData['created_by'] ?? null,
'status' => 'Open',
'endorsement_file_name' => $uploadedFileName,
'is_active' => 1
];
// ✅ Insert endorsement
if (!$this->EndorsementModel->insert($endorsementData)) {
return $this->respond([
'status' => 'failed',
'code' => 422,
'data' => $this->EndorsementModel->errors()
], 422);
}
return $this->respond([
'status' => 'success',
'code' => 200,
'data' => ['endorsement_id' => $this->EndorsementModel->getInsertID()]
], 200);
} catch (\Exception $e) {
return $this->respond([
'status' => 'failed',
'code' => 500,
'data' => $e->getMessage()
], 500);
}
}
}