From 24424c5be36e973b636ec3d0bad804608e7178ee Mon Sep 17 00:00:00 2001 From: Gowtham M Date: Tue, 2 Sep 2025 09:54:05 +0530 Subject: [PATCH] GWM : user management and auth apis --- app/Config/Routes.php | 158 +++-------------- app/Controllers/AgentAuthController.php | 2 +- app/Controllers/AgentController.php | 224 ++++++++++++++++++------ app/Controllers/EnquiryController.php | 189 ++++++++++++++++++++ app/Controllers/PolicyController.php | 177 +++++++++++++++++++ app/Controllers/QuotationController.php | 149 ++++++++++++++++ app/Controllers/StaffAuthController.php | 2 +- app/Controllers/StaffController.php | 177 +++++++++++++------ app/Filters/SignedUrlFilter.php | 44 ----- app/Helpers/jwt_helper.php | 2 +- app/Models/EnquiryModel.php | 31 ++++ app/Models/PolicyModel.php | 22 +++ app/Models/QuotationModel.php | 23 +++ 13 files changed, 905 insertions(+), 295 deletions(-) create mode 100644 app/Controllers/EnquiryController.php create mode 100644 app/Controllers/PolicyController.php create mode 100644 app/Controllers/QuotationController.php delete mode 100755 app/Filters/SignedUrlFilter.php create mode 100644 app/Models/EnquiryModel.php create mode 100644 app/Models/PolicyModel.php create mode 100644 app/Models/QuotationModel.php diff --git a/app/Config/Routes.php b/app/Config/Routes.php index 05f82e8..e4dd014 100755 --- a/app/Config/Routes.php +++ b/app/Config/Routes.php @@ -11,158 +11,40 @@ $routes->get('swagger/json', 'SwaggerController::generate'); //Auth $routes->group('api', ['filter' => 'appSignature'], function ($routes) { -// Agent Login api -$routes->post('auth/verifyAgentWithMobileNumber', 'AgentAuthController::verifyAgentWithMobileNumber'); -$routes->post('auth/verifyAgentWithEmailId', 'AgentAuthController::verifyAgentWithEmailId'); -$routes->post('auth/getVerifiedAgentData', 'AgentAuthController::getVerifiedAgentData'); + // Agent Login api + $routes->post('auth/verifyAgentWithMobileNumber', 'AgentAuthController::verifyAgentWithMobileNumber'); + $routes->post('auth/verifyAgentWithEmailId', 'AgentAuthController::verifyAgentWithEmailId'); + $routes->post('auth/getVerifiedAgentData', 'AgentAuthController::getVerifiedAgentData'); -// Staff Login api -$routes->post('auth/verifyStaffWithMobileNumber', 'StaffAuthController::verifyStaffWithMobileNumber'); -$routes->post('auth/verifyStaffWithEmailId', 'StaffAuthController::verifyStaffWithEmailId'); -$routes->post('auth/getVerifiedStaffData', 'StaffAuthController::getVerifiedStaffData'); + // Staff Login api + $routes->post('auth/verifyStaffWithMobileNumber', 'StaffAuthController::verifyStaffWithMobileNumber'); + $routes->post('auth/verifyStaffWithEmailId', 'StaffAuthController::verifyStaffWithEmailId'); + $routes->post('auth/getVerifiedStaffData', 'StaffAuthController::getVerifiedStaffData'); }); - - - //api's with token $routes->group('api', ['filter' => ["jwtAuth","appSignature"] ], function ($routes) { - $routes->get('user/refreshUserToken', 'AuthController::refreshUserToken'); + //Agent + $routes->get('agentList', 'AgentController::agentList'); + $routes->get('findAgent', 'AgentController::findAgent'); + $routes->post('createAgent', 'AgentController::createAgent'); + $routes->post('updateAgent', 'AgentController::updateAgent'); + $routes->post('updateAgent', 'AgentController::updateAgent'); - //Organization - $routes->get('organizations', 'OrganizationController::index'); - $routes->get('organizations/find/(:num)', 'OrganizationController::find/$1'); - $routes->post('organizations/create', 'OrganizationController::create'); - $routes->put('organizations/update/(:num)', 'OrganizationController::update/$1'); - $routes->put('organizations/org-status/(:num)', 'OrganizationController::updateOrganizationStatus/$1'); - $routes->post('organizations/testMail', 'OrganizationController::testMail'); - - //Service - $routes->get('service', 'OrganizationController::getServices'); - - //Group - $routes->get('groups', 'OrganizationController::getGroups'); - $routes->get('groups/find/(:num)', 'OrganizationController::findGroup/$1'); - $routes->post('groups/create', 'OrganizationController::createGroup'); - $routes->put('groups/update/(:num)', 'OrganizationController::updateGroup/$1'); - $routes->put('groups/group-status/(:num)', 'OrganizationController::updateGroupStatus/$1'); - - //Policy - $routes->get('policy', 'OrganizationController::getPolicy'); - $routes->get('policy/find/(:num)', 'OrganizationController::findPolicy/$1'); - $routes->post('policy/createOrUpdate', 'OrganizationController::createOrUpdatePolicy'); - $routes->put('policy/policy-status/(:num)', 'OrganizationController::updatePolicyStatus/$1'); - - //User - $routes->get('users', 'UserController::index'); - $routes->get('agentList', 'UserController::agentList'); - $routes->get('users/find/(:num)', 'UserController::find/$1'); - $routes->post('users/create', 'UserController::create'); - $routes->put('users/update/(:num)', 'UserController::update/$1'); - $routes->put('user/user-status/(:num)', 'UserController::updateUserStatus/$1'); - $routes->put('user/user-password/(:num)', 'UserController::changePassword/$1'); - $routes->get('checkDuplicate', 'UserController::checkDuplicate'); - $routes->post('user/userUpload','UserController::userUpload'); - $routes->get('user/userUploadTemplate','UserController::userUploadTemplate'); - - - //Traveller - $routes->get('travellers', 'TravellerController::index'); - $routes->post('travellers/create', 'TravellerController::create'); - $routes->get('travellers/find', 'TravellerController::find'); - $routes->put('travellers/update/(:num)', 'TravellerController::update/$1'); - $routes->get('travellers/find/name/(:any)', 'TravellerController::findByName/$1'); - $routes->get('travellers/find/email/(:any)', 'TravellerController::findByEmail/$1'); - $routes->get('travellers/find/mobile/(:any)', 'TravellerController::findByMobile/$1'); - - - //Plan - $routes->get('plans', 'PlanController::index'); - $routes->put('plans/find/(:num)', 'PlanController::find/$1'); - $routes->post('plans/createOrEditPlan', 'PlanController::createOrEditPlan'); - $routes->post('plans/getForexPerdiem', 'PlanController::getForexPerdiem'); - $routes->post('plans/approvePlan', 'PlanController::approvePlan'); - $routes->post('plans/rejectPlan', 'PlanController::rejectPlan'); - $routes->get('plans/statusDashboard', 'PlanController::statusDashboard'); - $routes->get('plans/download', 'PlanController::downloadPlan'); - $routes->get('plans/view', 'PlanController::viewPlan'); - $routes->get('plans/findApprovalList', 'PlanController::findApprovalList'); - $routes->get('plans/findTravelAgentPlanList', 'PlanController::findTravelAgentPlanList'); - $routes->post('plans/addOrEditPlanRemark', 'PlanController::addOrEditPlanRemark'); - $routes->get('plans/getRemarksByPlanId', 'PlanController::getRemarksByPlanId'); - $routes->get('plans/forexDownload', 'PlanController::forexDownload'); - $routes->get('plans/cancle_plan', 'PlanController::canclePlan'); - $routes->get('plans/get_plan_approval_status', 'PlanController::get_plan_approval_status'); - $routes->get('plans/plan_pdf', 'PlanController::plan_pdf'); - $routes->get('plans/plan_policy_action_status', 'PlanController::plan_policy_action_status'); - - //Master - $routes->get('getDropdownMaster', 'MasterController::getDropdownMaster'); - $routes->get('getTravelStatusMaster', 'MasterController::getTravelStatusMaster'); - $routes->get('getcountryMaster', 'MasterController::getcountryMaster'); - $routes->get('getAirportCodeMaster', 'MasterController::getAirportCodeMaster'); - $routes->get('getAirlineMaster', 'MasterController::getAirlineMaster'); - $routes->get('getTrainCodeMaster', 'MasterController::getTrainCodeMaster'); - $routes->get('getFlightAndTrainClass', 'MasterController::getFlightAndTrainClass'); - // Costcenter - $routes->get('getCostCenterMaster', 'MasterController::getCostCenterMaster'); - $routes->post('createCostCenter', 'MasterController::createCostCenter'); - $routes->get('findCostCenter', 'MasterController::findCostCenter'); - $routes->put('updateCostCenter/(:num)', 'MasterController::updateCostCenter/$1'); - // Department Master - $routes->get('getDepartmentList', 'MasterController::getDepartmentList'); - $routes->post('createDepartment', 'MasterController::createDepartment'); - $routes->get('findDepartment', 'MasterController::findDepartment'); - $routes->put('updateDepartment/(:num)', 'MasterController::updateDepartment/$1'); - // Purpose of travel Master - $routes->get('getPurposeOfTravelList', 'MasterController::getPurposeOfTravelList'); - $routes->post('createPurposeOfTravel', 'MasterController::createPurposeOfTravel'); - $routes->get('findPurposeOfTravel', 'MasterController::findPurposeOfTravel'); - $routes->put('updatePurposeOfTravel/(:num)', 'MasterController::updatePurposeOfTravel/$1'); - // Forex Master - $routes->get('getForexPerdiemList', 'MasterController::getForexPerdiemList'); - $routes->post('createForexPerdiem', 'MasterController::createForexPerdiem'); - $routes->get('findForexPerdiem', 'MasterController::findForexPerdiem'); - $routes->put('updateForexPerdiem/(:num)', 'MasterController::updateForexPerdiem/$1'); - $routes->post('forex_signature_upload', 'MasterController::forex_signature_upload'); - $routes->get('getForexSignaturePath', 'MasterController::getForexSignaturePath'); - // Hotels Master - $routes->get('getHotels', 'MasterController::getHotels'); - $routes->post('createHotels', 'MasterController::createHotels'); - $routes->get('findHotels', 'MasterController::findHotels'); - $routes->put('updateHotels/(:num)', 'MasterController::updateHotels/$1'); - - - //mail template - $routes->get('template', 'EmailTemplateController::index'); - $routes->put('template/find/(:num)', 'EmailTemplateController::find/$1'); - $routes->post('template/create', 'EmailTemplateController::create'); - $routes->put('template/update/(:num)', 'EmailTemplateController::update/$1'); - $routes->get('getForexTemplate', 'EmailTemplateController::getForexTemplate'); - - $routes->get('getRoles', 'UserController::roleList'); - - - $routes->post('advancePurchaseReport', 'ReportsController::advancePurchaseReport'); - $routes->post('misServicesAnalysis', 'ReportsController::misServicesAnalysis'); - $routes->post('misAirReport', 'ReportsController::misAirReport'); - $routes->post('misHotelReport', 'ReportsController::misHotelReport'); - $routes->post('misForexReport', 'ReportsController::misForexReport'); - $routes->post('guestHouseReport', 'ReportsController::guestHouseReport'); - + //Agent + $routes->get('staffList', 'StaffController::staffList'); + $routes->get('findStaff', 'StaffController::findStaff'); + $routes->post('createStaff', 'StaffController::createStaff'); + $routes->post('updateStaff', 'StaffController::updateStaff'); + $routes->post('changeStaffStatus', 'StaffController::changeStaffStatus'); }); -// plan review related signed url -$routes->post('approvePlan', 'PlanController::approvePlan'); -$routes->post('rejectPlan', 'PlanController::rejectPlan'); -$routes->get('review', 'PlanController::protectedPage', ['filter' => 'signedUrl']); -$routes->get('url', 'PlanController::url'); diff --git a/app/Controllers/AgentAuthController.php b/app/Controllers/AgentAuthController.php index f9fc4cc..2228f6f 100644 --- a/app/Controllers/AgentAuthController.php +++ b/app/Controllers/AgentAuthController.php @@ -112,7 +112,7 @@ class AgentAuthController extends ResourceController if ($agentData && $otp_verification == true || $agentData && isset($this->request->getJSON()->otp) ) { if(isset($this->request->getJSON()->otp)){ - $this->AgentModel->where('id', $agentData['id'])->where('otp', $otp)->where('is_active', 1)->set(['otp'=>null])->update(); + $this->AgentModel->where('id', $agentData['id'])->where('email_otp', $otp)->where('is_active', 1)->set(['email_otp'=>null])->update(); } $result = generateJWT($agentData); diff --git a/app/Controllers/AgentController.php b/app/Controllers/AgentController.php index b3a09c1..1979fc6 100644 --- a/app/Controllers/AgentController.php +++ b/app/Controllers/AgentController.php @@ -1,11 +1,11 @@ AgentModel = new AgentModel(); } - // ========================= - // 1. List all records - // ========================= - public function list() + // List of all agents + public function agentList() { - $data = $this->AgentModel->findAll(); - return $this->response->setJSON($data); - } + try{ - // ========================= - // 2. Find single record by ID - // ========================= - public function find($id = null) - { - $record = $this->AgentModel->find($id); + $data = $this->AgentModel->findAll(); - if (!$record) { - return $this->response->setJSON([ - 'status' => 'error', - 'message' => 'Record not found' - ])->setStatusCode(404); + return $this->respond(['status' => 'success', 'code' => 200, 'data' => $data], 200); + + } catch (\Exception $e) { + return $this->respond(['status' => 'failed', 'code' => 500, 'data' => $e->getMessage()], 500); } - - return $this->response->setJSON($record); + } - // ========================= - // 3. Create new record - // ========================= - public function create() + // Find a agent + public function findAgent() { - $data = $this->request->getJSON(true); // get JSON body as array + try{ - if (!$this->AgentModel->insert($data)) { - return $this->response->setJSON([ - 'status' => 'error', - 'message' => 'Failed to insert', - 'errors' => $this->AgentModel->errors() - ])->setStatusCode(400); + $id = $this->request->getGet('id'); + + $record = $this->AgentModel->find($id); + + if (!$record) { + return $this->respond(['status' => 'failed', 'code' => 404, 'data' => []], 200); + } + + return $this->respond(['status' => 'success', 'code' => 200, 'data' => $record], 200); + + } catch (\Exception $e) { + return $this->respond(['status' => 'failed', 'code' => 500, 'data' => $e->getMessage()], 500); } - - return $this->response->setJSON([ - 'status' => 'success', - 'message' => 'Record created successfully', - 'id' => $this->AgentModel->getInsertID() - ]); } - // ========================= - // 4. Update record by ID - // ========================= - public function update($id = null) + // CREATE agent + public function createAgent() { - $data = $this->request->getJSON(true); + try{ + $data = $this->request->getPost(); - if (!$this->AgentModel->update($id, $data)) { - return $this->response->setJSON([ - 'status' => 'error', - 'message' => 'Failed to update', - 'errors' => $this->AgentModel->errors() - ])->setStatusCode(400); + // handle file uploads + $certificateFile = $this->request->getFile('certificate_file_name'); + $incentiveFile = $this->request->getFile('incentive_file_name'); + + $certificateFileName = null; + $incentiveFileName = null; + + // certificate upload + if ($certificateFile && $certificateFile->isValid()) { + $uploadPath = WRITEPATH . 'uploads/agent/certificate_file/'; + if (!is_dir($uploadPath)) { + mkdir($uploadPath, 0777, true); + } + $certificateFileName = time() . '_' . $certificateFile->getRandomName(); + $certificateFile->move($uploadPath, $certificateFileName); + } + + // incentive upload + if ($incentiveFile && $incentiveFile->isValid()) { + $uploadPath = WRITEPATH . 'uploads/agent/incentive_file/'; + if (!is_dir($uploadPath)) { + mkdir($uploadPath, 0777, true); + } + $incentiveFileName = time() . '_' . $incentiveFile->getRandomName(); + $incentiveFile->move($uploadPath, $incentiveFileName); + } + + $insertData = [ + 'name' => $data['name'], + 'email' => $data['email'], + 'mobile' => $data['mobile'], + 'address' => $data['address'] ?? null, + 'certificate_file_name' => $certificateFileName, + 'incentive_file_name' => $incentiveFileName, + 'created_by' => $data['created_by'] ?? null + ]; + + $this->AgentModel->insert($insertData); + + return $this->respond(['status' => 'success', 'code' => 200, 'data' => []], 200); + + } catch (\Exception $e) { + return $this->respond(['status' => 'failed', 'code' => 500, 'data' => $e->getMessage()], 500); } - - return $this->response->setJSON([ - 'status' => 'success', - 'message' => 'Record updated successfully' - ]); } + + // UPDATE agent + public function updateAgent() + { + try{ + + $data = $this->request->getPost(); + if (!isset($data['id'])) { + return $this->respond(['status' => 'failed', 'code' => 200, 'data' => 'ID Required'], 200); + } + + $id = $data['id']; + + // check if agent exists + $agent = $this->AgentModel->find($id); + if (!$agent) { + return $this->respond(['status' => 'failed', 'code' => 200, 'data' => 'Date Not Found'], 200); + } + + // handle file uploads + $certificateFile = $this->request->getFile('certificate_file_name'); + $incentiveFile = $this->request->getFile('incentive_file_name'); + + $updateData = [ + 'name' => $data['name'] ?? null, + 'email' => $data['email'] ?? null, + 'mobile' => $data['mobile'] ?? null, + 'address' => $data['address'] ?? null, + 'updated_by' => $data['updated_by'] ?? null, + ]; + + if ($certificateFile && $certificateFile->isValid()) { + $uploadPath = WRITEPATH . 'uploads/agent/certificate_file/'; + if (!is_dir($uploadPath)) { + mkdir($uploadPath, 0777, true); + } + $certificateFileName = time() . '_' . $certificateFile->getRandomName(); + $certificateFile->move($uploadPath, $certificateFileName); + $updateData['certificate_file_name'] = $certificateFileName; + } + + if ($incentiveFile && $incentiveFile->isValid()) { + $uploadPath = WRITEPATH . 'uploads/agent/incentive_file/'; + if (!is_dir($uploadPath)) { + mkdir($uploadPath, 0777, true); + } + $incentiveFileName = time() . '_' . $incentiveFile->getRandomName(); + $incentiveFile->move($uploadPath, $incentiveFileName); + $updateData['incentive_file_name'] = $incentiveFileName; + } + + $this->AgentModel->update($id, $updateData); + + return $this->respond(['status' => 'success', 'code' => 200, 'data' => []], 200); + + } catch (\Exception $e) { + return $this->respond(['status' => 'failed', 'code' => 500, 'data' => $e->getMessage()], 500); + } + } + + // ACTIVATE / DEACTIVATE agent + public function changeAgentStatus() + { + try { + $data = $this->request->getPost(); + + // validate inputs + if (!isset($data['id']) || !isset($data['is_active'])) { + return $this->respond(['status' => 'failed', 'code' => 200,'data' => 'ID and Status are required'], 200); + } + + $id = $data['id']; + $is_active = (int) $data['is_active']; // 0 or 1 + + $status = ($is_active == 1) ? 0 : 1; + + // check if agent exists + $agent = $this->AgentModel->find($id); + if (!$agent) { + return $this->respond(['status' => 'failed','code' => 200, 'data' => 'Agent not found'], 200); + } + + // update status + $this->AgentModel->update($id, ['is_active' => $status]); + + return $this->respond([ + 'status' => 'success', 'code' => 200,'data' => "Agent status updated"], 200); + + } catch (\Exception $e) { + return $this->respond(['status' => 'failed','code' => 500,'data' => $e->getMessage()], 500); + } + } + + + + } diff --git a/app/Controllers/EnquiryController.php b/app/Controllers/EnquiryController.php new file mode 100644 index 0000000..34d6a56 --- /dev/null +++ b/app/Controllers/EnquiryController.php @@ -0,0 +1,189 @@ +enquiryModel = new EnquiryModel(); + } + + // List all enquiries + public function enquiryList() + { + try { + $data = $this->enquiryModel->findAll(); + return $this->respond(['status' => 'success', 'code' => 200, 'data' => $data], 200); + } catch (\Exception $e) { + return $this->respond(['status' => 'failed', 'code' => 500, 'error' => $e->getMessage()], 500); + } + } + + // Find a single enquiry + public function findEnquiry() + { + try { + $id = $this->request->getGet('id'); + $record = $this->enquiryModel->find($id); + + if (!$record) { + return $this->respond(['status' => 'failed', 'code' => 404, 'data' => []], 200); + } + + return $this->respond(['status' => 'success', 'code' => 200, 'data' => $record], 200); + } catch (\Exception $e) { + return $this->respond(['status' => 'failed', 'code' => 500, 'error' => $e->getMessage()], 500); + } + } + + // CREATE enquiry + public function createEnquiry() + { + try { + $data = $this->request->getPost(); + + // handle file uploads + $idProofFile = $this->request->getFile('id_proof_file_name'); + $rcFile = $this->request->getFile('rc_file_name'); + $previousPolicy = $this->request->getFile('previous_policy_file_name'); + + $idProofFileName = null; + $rcFileName = null; + $previousPolicyFileName = null; + + // ID proof upload + if ($idProofFile && $idProofFile->isValid()) { + $uploadPath = WRITEPATH . 'uploads/enquiry/id_proof/'; + if (!is_dir($uploadPath)) mkdir($uploadPath, 0777, true); + $idProofFileName = time() . '_' . $idProofFile->getRandomName(); + $idProofFile->move($uploadPath, $idProofFileName); + } + + // RC upload + if ($rcFile && $rcFile->isValid()) { + $uploadPath = WRITEPATH . 'uploads/enquiry/rc/'; + if (!is_dir($uploadPath)) mkdir($uploadPath, 0777, true); + $rcFileName = time() . '_' . $rcFile->getRandomName(); + $rcFile->move($uploadPath, $rcFileName); + } + + // Previous policy upload + if ($previousPolicy && $previousPolicy->isValid()) { + $uploadPath = WRITEPATH . 'uploads/enquiry/previous_policy/'; + if (!is_dir($uploadPath)) mkdir($uploadPath, 0777, true); + $previousPolicyFileName = time() . '_' . $previousPolicy->getRandomName(); + $previousPolicy->move($uploadPath, $previousPolicyFileName); + } + + $insertData = [ + 'agent_id' => $data['agent_id'], + 'reg_no' => $data['reg_no'], + 'vehicle_type_id' => $data['vehicle_type_id'] ?? null, + 'insurer_id' => $data['insurer_id'] ?? null, + 'rc_file_name' => $rcFileName, + 'id_proof_file_name' => $idProofFileName, + 'previous_policy_file_name' => $previousPolicyFileName, + 'remarks' => $data['remarks'] ?? null, + 'status' => $data['status'] ?? 'Pending', + 'created_by' => $data['created_by'] ?? null + ]; + + $this->enquiryModel->insert($insertData); + + return $this->respond(['status' => 'success', 'code' => 200, 'message' => 'Enquiry created successfully'], 200); + + } catch (\Exception $e) { + return $this->respond(['status' => 'failed', 'code' => 500, 'error' => $e->getMessage()], 500); + } + } + + // UPDATE enquiry + public function updateEnquiry() + { + try { + $data = $this->request->getPost(); + + if (!isset($data['id'])) { + return $this->respond(['status' => 'failed', 'code' => 200, 'error' => 'ID Required'], 200); + } + + $id = $data['id']; + $enquiry = $this->enquiryModel->find($id); + + if (!$enquiry) { + return $this->respond(['status' => 'failed', 'code' => 200, 'error' => 'Data Not Found'], 200); + } + + $updateData = [ + 'agent_id' => $data['agent_id'] ?? $enquiry['agent_id'], + 'reg_no' => $data['reg_no'] ?? $enquiry['reg_no'], + 'vehicle_type_id' => $data['vehicle_type_id'] ?? $enquiry['vehicle_type_id'], + 'insurer_id' => $data['insurer_id'] ?? $enquiry['insurer_id'], + 'remarks' => $data['remarks'] ?? $enquiry['remarks'], + 'status' => $data['status'] ?? $enquiry['status'], + 'updated_by' => $data['updated_by'] ?? null, + ]; + + // File updates + $idProofFile = $this->request->getFile('id_proof_file_name'); + $rcFile = $this->request->getFile('rc_file_name'); + $previousPolicy = $this->request->getFile('previous_policy_file_name'); + + if ($idProofFile && $idProofFile->isValid()) { + $uploadPath = WRITEPATH . 'uploads/enquiry/id_proof/'; + if (!is_dir($uploadPath)) mkdir($uploadPath, 0777, true); + $idProofFileName = time() . '_' . $idProofFile->getRandomName(); + $idProofFile->move($uploadPath, $idProofFileName); + $updateData['id_proof_file_name'] = $idProofFileName; + } + + if ($rcFile && $rcFile->isValid()) { + $uploadPath = WRITEPATH . 'uploads/enquiry/rc/'; + if (!is_dir($uploadPath)) mkdir($uploadPath, 0777, true); + $rcFileName = time() . '_' . $rcFile->getRandomName(); + $rcFile->move($uploadPath, $rcFileName); + $updateData['rc_file_name'] = $rcFileName; + } + + if ($previousPolicy && $previousPolicy->isValid()) { + $uploadPath = WRITEPATH . 'uploads/enquiry/previous_policy/'; + if (!is_dir($uploadPath)) mkdir($uploadPath, 0777, true); + $previousPolicyFileName = time() . '_' . $previousPolicy->getRandomName(); + $previousPolicy->move($uploadPath, $previousPolicyFileName); + $updateData['previous_policy_file_name'] = $previousPolicyFileName; + } + + $this->enquiryModel->update($id, $updateData); + + return $this->respond(['status' => 'success', 'code' => 200, 'message' => 'Enquiry updated successfully'], 200); + + } catch (\Exception $e) { + return $this->respond(['status' => 'failed', 'code' => 500, 'error' => $e->getMessage()], 500); + } + } + + // Activate/Deactivate enquiry + public function toggleEnquiryStatus() + { + try { + $id = $this->request->getPost('id'); + $isActive = $this->request->getPost('is_active'); + + if (!$id) { + return $this->respond(['status' => 'failed', 'code' => 200, 'error' => 'ID Required'], 200); + } + + $this->enquiryModel->update($id, ['is_active' => $isActive]); + + return $this->respond(['status' => 'success', 'code' => 200, 'message' => 'Status updated'], 200); + } catch (\Exception $e) { + return $this->respond(['status' => 'failed', 'code' => 500, 'error' => $e->getMessage()], 500); + } + } +} diff --git a/app/Controllers/PolicyController.php b/app/Controllers/PolicyController.php new file mode 100644 index 0000000..16c8e15 --- /dev/null +++ b/app/Controllers/PolicyController.php @@ -0,0 +1,177 @@ +PolicyModel = new PolicyModel(); + } + + // List policies + public function policyList() + { + try { + $data = $this->PolicyModel->findAll(); + return $this->respond(['status' => 'success', 'code' => 200, 'data' => $data], 200); + } catch (\Exception $e) { + return $this->respond(['status' => 'failed', 'code' => 500, 'data' => $e->getMessage()], 500); + } + } + + // Find single policy + public function findPolicy() + { + try { + $id = $this->request->getGet('id'); + $record = $this->PolicyModel->find($id); + + if (!$record) { + return $this->respond(['status' => 'failed', 'code' => 404, 'data' => []], 200); + } + return $this->respond(['status' => 'success', 'code' => 200, 'data' => $record], 200); + + } catch (\Exception $e) { + return $this->respond(['status' => 'failed', 'code' => 500, 'data' => $e->getMessage()], 500); + } + } + + // Create policy + public function createPolicy() + { + try { + $data = $this->request->getPost(); + $uploadPath = WRITEPATH . 'uploads/policy/'; + + $policyPdf = $this->request->getFile('policy_pdf_file_name'); + $policyReceipt = $this->request->getFile('policy_payment_receipt_file_name'); + + $pdfFileName = null; + $receiptFileName = null; + + // PDF Upload + if ($policyPdf && $policyPdf->isValid()) { + $pdfPath = $uploadPath . 'policy_pdf/'; + if (!is_dir($pdfPath)) { + mkdir($pdfPath, 0777, true); + } + $pdfFileName = time() . '_' . $policyPdf->getRandomName(); + $policyPdf->move($pdfPath, $pdfFileName); + } + + // Receipt Upload + if ($policyReceipt && $policyReceipt->isValid()) { + $receiptPath = $uploadPath . 'policy_payment_receipt/'; + if (!is_dir($receiptPath)) { + mkdir($receiptPath, 0777, true); + } + $receiptFileName = time() . '_' . $policyReceipt->getRandomName(); + $policyReceipt->move($receiptPath, $receiptFileName); + } + + $insertData = [ + 'quotation_id' => $data['quotation_id'], + 'insurer_name' => $data['insurer_name'], + 'premium_amount' => $data['premium_amount'], + 'policy_number' => $data['policy_number'], + 'policy_pdf_file_name' => $pdfFileName, + 'policy_payment_receipt_file_name' => $receiptFileName, + 'created_by' => $data['created_by'] ?? null + ]; + + $this->PolicyModel->insert($insertData); + + return $this->respond(['status' => 'success', 'code' => 200, 'data' => []], 200); + + } catch (\Exception $e) { + return $this->respond(['status' => 'failed', 'code' => 500, 'data' => $e->getMessage()], 500); + } + } + + // Update policy + public function updatePolicy() + { + try { + $data = $this->request->getPost(); + if (!isset($data['id'])) { + return $this->respond(['status' => 'failed', 'code' => 200, 'data' => 'ID Required'], 200); + } + + $id = $data['id']; + $policy = $this->PolicyModel->find($id); + if (!$policy) { + return $this->respond(['status' => 'failed', 'code' => 200, 'data' => 'Data Not Found'], 200); + } + + $updateData = [ + 'quotation_id' => $data['quotation_id'] ?? $policy['quotation_id'], + 'insurer_name' => $data['insurer_name'] ?? $policy['insurer_name'], + 'premium_amount' => $data['premium_amount'] ?? $policy['premium_amount'], + 'policy_number' => $data['policy_number'] ?? $policy['policy_number'], + 'updated_by' => $data['updated_by'] ?? null + ]; + + $uploadPath = WRITEPATH . 'uploads/policy/'; + + // PDF Update + $policyPdf = $this->request->getFile('policy_pdf_file_name'); + if ($policyPdf && $policyPdf->isValid()) { + $pdfPath = $uploadPath . 'policy_pdf/'; + if (!is_dir($pdfPath)) { + mkdir($pdfPath, 0777, true); + } + $pdfFileName = time() . '_' . $policyPdf->getRandomName(); + $policyPdf->move($pdfPath, $pdfFileName); + $updateData['policy_pdf_file_name'] = $pdfFileName; + } + + // Receipt Update + $policyReceipt = $this->request->getFile('policy_payment_receipt_file_name'); + if ($policyReceipt && $policyReceipt->isValid()) { + $receiptPath = $uploadPath . 'policy_payment_receipt/'; + if (!is_dir($receiptPath)) { + mkdir($receiptPath, 0777, true); + } + $receiptFileName = time() . '_' . $policyReceipt->getRandomName(); + $policyReceipt->move($receiptPath, $receiptFileName); + $updateData['policy_payment_receipt_file_name'] = $receiptFileName; + } + + $this->PolicyModel->update($id, $updateData); + + return $this->respond(['status' => 'success', 'code' => 200, 'data' => []], 200); + + } catch (\Exception $e) { + return $this->respond(['status' => 'failed', 'code' => 500, 'data' => $e->getMessage()], 500); + } + } + + // Active / Deactive policy + public function toggleActiveStatus() + { + try { + $id = $this->request->getPost('id'); + if (!$id) { + return $this->respond(['status' => 'failed', 'code' => 200, 'data' => 'ID Required'], 200); + } + + $policy = $this->PolicyModel->find($id); + if (!$policy) { + return $this->respond(['status' => 'failed', 'code' => 200, 'data' => 'Data Not Found'], 200); + } + + $newStatus = ($policy['is_active'] == 1) ? 0 : 1; + $this->PolicyModel->update($id, ['is_active' => $newStatus]); + + return $this->respond(['status' => 'success', 'code' => 200, 'data' => ['is_active' => $newStatus]], 200); + + } catch (\Exception $e) { + return $this->respond(['status' => 'failed', 'code' => 500, 'data' => $e->getMessage()], 500); + } + } +} diff --git a/app/Controllers/QuotationController.php b/app/Controllers/QuotationController.php new file mode 100644 index 0000000..f8512c3 --- /dev/null +++ b/app/Controllers/QuotationController.php @@ -0,0 +1,149 @@ +QuotationModel = new QuotationModel(); + } + + // List quotations + public function quotationList() + { + try { + $data = $this->QuotationModel->findAll(); + return $this->respond(['status' => 'success', 'code' => 200, 'data' => $data], 200); + } catch (\Exception $e) { + return $this->respond(['status' => 'failed', 'code' => 500, 'data' => $e->getMessage()], 500); + } + } + + // Find single quotation + public function findQuotation() + { + try { + $id = $this->request->getGet('id'); + $record = $this->QuotationModel->find($id); + + if (!$record) { + return $this->respond(['status' => 'failed', 'code' => 404, 'data' => []], 200); + } + return $this->respond(['status' => 'success', 'code' => 200, 'data' => $record], 200); + + } catch (\Exception $e) { + return $this->respond(['status' => 'failed', 'code' => 500, 'data' => $e->getMessage()], 500); + } + } + + // Create quotation + public function createQuotation() + { + try { + $data = $this->request->getPost(); + + $uploadFile = $this->request->getFile('additional_uploaded_file_name'); + $uploadedFileName = null; + + if ($uploadFile && $uploadFile->isValid()) { + $uploadPath = WRITEPATH . 'uploads/quotation/'; + if (!is_dir($uploadPath)) { + mkdir($uploadPath, 0777, true); + } + $uploadedFileName = time() . '_' . $uploadFile->getRandomName(); + $uploadFile->move($uploadPath, $uploadedFileName); + } + + $insertData = [ + 'enquiry_id' => $data['enquiry_id'], + 'insured_declared_value' => $data['insured_declared_value'], + 'premium_amount' => $data['premium_amount'], + 'insurance_plan_type_id' => $data['insurance_plan_type_id'], + 'additional_uploaded_file_name' => $uploadedFileName, + 'created_by' => $data['created_by'] ?? null + ]; + + $this->QuotationModel->insert($insertData); + + return $this->respond(['status' => 'success', 'code' => 200, 'data' => []], 200); + + } catch (\Exception $e) { + return $this->respond(['status' => 'failed', 'code' => 500, 'data' => $e->getMessage()], 500); + } + } + + // Update quotation + public function updateQuotation() + { + try { + $data = $this->request->getPost(); + if (!isset($data['id'])) { + return $this->respond(['status' => 'failed', 'code' => 200, 'data' => 'ID Required'], 200); + } + + $id = $data['id']; + $quotation = $this->QuotationModel->find($id); + if (!$quotation) { + return $this->respond(['status' => 'failed', 'code' => 200, 'data' => 'Data Not Found'], 200); + } + + $updateData = [ + 'enquiry_id' => $data['enquiry_id'] ?? $quotation['enquiry_id'], + 'insured_declared_value' => $data['insured_declared_value'] ?? $quotation['insured_declared_value'], + 'premium_amount' => $data['premium_amount'] ?? $quotation['premium_amount'], + 'insurance_plan_type_id' => $data['insurance_plan_type_id'] ?? $quotation['insurance_plan_type_id'], + 'status' => $data['status'] ?? $quotation['status'], + 'reject_reason' => $data['reject_reason'] ?? $quotation['reject_reason'], + 'updated_by' => $data['updated_by'] ?? null + ]; + + // File upload + $uploadFile = $this->request->getFile('additional_uploaded_file_name'); + if ($uploadFile && $uploadFile->isValid()) { + $uploadPath = WRITEPATH . 'uploads/quotation/'; + if (!is_dir($uploadPath)) { + mkdir($uploadPath, 0777, true); + } + $uploadedFileName = time() . '_' . $uploadFile->getRandomName(); + $uploadFile->move($uploadPath, $uploadedFileName); + $updateData['additional_uploaded_file_name'] = $uploadedFileName; + } + + $this->QuotationModel->update($id, $updateData); + + return $this->respond(['status' => 'success', 'code' => 200, 'data' => []], 200); + + } catch (\Exception $e) { + return $this->respond(['status' => 'failed', 'code' => 500, 'data' => $e->getMessage()], 500); + } + } + + // Active / Deactive quotation + public function toggleActiveStatus() + { + try { + $id = $this->request->getPost('id'); + if (!$id) { + return $this->respond(['status' => 'failed', 'code' => 200, 'data' => 'ID Required'], 200); + } + + $quotation = $this->QuotationModel->find($id); + if (!$quotation) { + return $this->respond(['status' => 'failed', 'code' => 200, 'data' => 'Data Not Found'], 200); + } + + $newStatus = ($quotation['is_active'] == 1) ? 0 : 1; + $this->QuotationModel->update($id, ['is_active' => $newStatus]); + + return $this->respond(['status' => 'success', 'code' => 200, 'data' => ['is_active' => $newStatus]], 200); + + } catch (\Exception $e) { + return $this->respond(['status' => 'failed', 'code' => 500, 'data' => $e->getMessage()], 500); + } + } +} diff --git a/app/Controllers/StaffAuthController.php b/app/Controllers/StaffAuthController.php index 0fb4c92..3d2b73e 100644 --- a/app/Controllers/StaffAuthController.php +++ b/app/Controllers/StaffAuthController.php @@ -112,7 +112,7 @@ class StaffAuthController extends ResourceController if ($StaffData && $otp_verification == true || $StaffData && isset($this->request->getJSON()->otp) ) { if(isset($this->request->getJSON()->otp)){ - $this->StaffModel->where('id', $StaffData['id'])->where('otp', $otp)->where('is_active', 1)->set(['otp'=>null])->update(); + $this->StaffModel->where('id', $StaffData['id'])->where('email_otp', $otp)->where('is_active', 1)->set(['email_otp'=>null])->update(); } $result = generateJWT($StaffData); diff --git a/app/Controllers/StaffController.php b/app/Controllers/StaffController.php index d7bf091..cc8f1e5 100644 --- a/app/Controllers/StaffController.php +++ b/app/Controllers/StaffController.php @@ -1,11 +1,11 @@ StaffModel = new StaffModel(); } - // ========================= - // 1. List all staff - // ========================= - public function list() + // List of all Staffs + public function staffList() { - $data = $this->StaffModel->findAll(); - return $this->response->setJSON($data); - } + try{ + $data = $this->StaffModel->select('partner_staff.* , R.role') + ->join('partner_role_master R', 'R.id = partner_staff.role_id', 'left') + ->findAll(); - // ========================= - // 2. Find single staff by ID - // ========================= - public function find($id = null) - { - $record = $this->StaffModel->find($id); + return $this->respond(['status' => 'success', 'code' => 200, 'data' => $data], 200); - if (!$record) { - return $this->response->setJSON([ - 'status' => 'error', - 'message' => 'Record not found' - ])->setStatusCode(404); + } catch (\Exception $e) { + return $this->respond(['status' => 'failed', 'code' => 500, 'data' => $e->getMessage()], 500); } - - return $this->response->setJSON($record); + } - // ========================= - // 3. Create new staff - // ========================= - public function create() + // Find a Staff + public function findStaff() { - $data = $this->request->getJSON(true); // JSON body to array + try{ - if (!$this->StaffModel->insert($data)) { - return $this->response->setJSON([ - 'status' => 'error', - 'message' => 'Failed to insert', - 'errors' => $this->StaffModel->errors() - ])->setStatusCode(400); + $id = $this->request->getGet('id'); + + $record = $this->StaffModel->find($id); + + if (!$record) { + return $this->respond(['status' => 'failed', 'code' => 404, 'data' => []], 200); + } + + return $this->respond(['status' => 'success', 'code' => 200, 'data' => $record], 200); + + } catch (\Exception $e) { + return $this->respond(['status' => 'failed', 'code' => 500, 'data' => $e->getMessage()], 500); } - - return $this->response->setJSON([ - 'status' => 'success', - 'message' => 'Staff created successfully', - 'id' => $this->StaffModel->getInsertID() - ]); } - // ========================= - // 4. Update staff by ID - // ========================= - public function update($id = null) + // CREATE Staff + public function createStaff() { - $data = $this->request->getJSON(true); + try{ + $data = $this->request->getPost(); - if (!$this->StaffModel->update($id, $data)) { - return $this->response->setJSON([ - 'status' => 'error', - 'message' => 'Failed to update', - 'errors' => $this->StaffModel->errors() - ])->setStatusCode(400); + $insertData = [ + 'name' => $data['name'], + 'email' => $data['email'], + 'mobile' => $data['mobile'], + 'role_id' => $data['role_id'] ?? null, + 'emp_id' => $data['emp_id'] ?? null, + 'created_by' => $data['created_by'] ?? null + ]; + + $this->StaffModel->insert($insertData); + + return $this->respond(['status' => 'success', 'code' => 200, 'data' => []], 200); + + } catch (\Exception $e) { + return $this->respond(['status' => 'failed', 'code' => 500, 'data' => $e->getMessage()], 500); } - - return $this->response->setJSON([ - 'status' => 'success', - 'message' => 'Staff updated successfully' - ]); } + + // UPDATE Staff + public function updateStaff() + { + try{ + + $data = $this->request->getPost(); + if (!isset($data['id'])) { + return $this->respond(['status' => 'failed', 'code' => 200, 'data' => 'ID Required'], 200); + } + + $id = $data['id']; + + // check if Staff exists + $Staff = $this->StaffModel->find($id); + if (!$Staff) { + return $this->respond(['status' => 'failed', 'code' => 200, 'data' => 'Date Not Found'], 200); + } + + + $updateData = [ + 'name' => $data['name'], + 'email' => $data['email'], + 'mobile' => $data['mobile'], + 'role_id' => $data['role_id'] ?? null, + 'emp_id' => $data['emp_id'] ?? null, + 'updated_by' => $data['updated_by'] ?? null, + ]; + + + + $this->StaffModel->update($id, $updateData); + + return $this->respond(['status' => 'success', 'code' => 200, 'data' => []], 200); + + } catch (\Exception $e) { + return $this->respond(['status' => 'failed', 'code' => 500, 'data' => $e->getMessage()], 500); + } + } + + // ACTIVATE / DEACTIVATE Staff + public function changeStaffStatus() + { + try { + $data = $this->request->getPost(); + + // validate inputs + if (!isset($data['id']) || !isset($data['is_active'])) { + return $this->respond(['status' => 'failed', 'code' => 200,'data' => 'ID and Status are required'], 200); + } + + $id = $data['id']; + $is_active = (int) $data['is_active']; // 0 or 1 + + $status = ($is_active == 1) ? 0 : 1; + + // check if Staff exists + $Staff = $this->StaffModel->find($id); + if (!$Staff) { + return $this->respond(['status' => 'failed','code' => 200, 'data' => 'Staff not found'], 200); + } + + // update status + $this->StaffModel->update($id, ['is_active' => $status]); + + return $this->respond([ + 'status' => 'success', 'code' => 200,'data' => "Staff status updated"], 200); + + } catch (\Exception $e) { + return $this->respond(['status' => 'failed','code' => 500,'data' => $e->getMessage()], 500); + } + } + + + + } diff --git a/app/Filters/SignedUrlFilter.php b/app/Filters/SignedUrlFilter.php deleted file mode 100755 index 00492c6..0000000 --- a/app/Filters/SignedUrlFilter.php +++ /dev/null @@ -1,44 +0,0 @@ -getGet('expires'); - $signature = $request->getGet('signature'); - - if (!$expires || !$signature) { - return Services::response()->setStatusCode(403)->setBody('Forbidden'); - } - - if (time() > $expires) { - $body = view('expired_link'); - return Services::response()->setStatusCode(403)->setBody($body); - } - - $queryParams = $request->getGet(); - unset($queryParams['signature']); - $route = $request->getPath(); - $expectedSignature = hash_hmac('sha256', $route . '?' . http_build_query($queryParams), $secretKey); - - if (!hash_equals($expectedSignature, $signature)) { - return Services::response()->setStatusCode(403)->setBody('Invalid signature'); - } - - return true; // Allow the request - } - - public function after(RequestInterface $request, ResponseInterface $response, $arguments = null) - { - // Do nothing here - } -} - - diff --git a/app/Helpers/jwt_helper.php b/app/Helpers/jwt_helper.php index 0e272c9..6987988 100644 --- a/app/Helpers/jwt_helper.php +++ b/app/Helpers/jwt_helper.php @@ -14,7 +14,7 @@ if (!function_exists('generateJWT')) { 'iss' => base_url(), // Issuer 'iat' => $issuedAt, // Issued at 'exp' => $expire, // Expiration time - 'sub' => $userData['user_id'], // Subject (User ID) + 'sub' => $userData['id'], // Subject (User ID) 'data' => $userData // Additional user data ]; diff --git a/app/Models/EnquiryModel.php b/app/Models/EnquiryModel.php new file mode 100644 index 0000000..2a8b188 --- /dev/null +++ b/app/Models/EnquiryModel.php @@ -0,0 +1,31 @@ +