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); } } }