diff --git a/app/Controllers/ClientController.php b/app/Controllers/ClientController.php index 2d86b540..468e0864 100755 --- a/app/Controllers/ClientController.php +++ b/app/Controllers/ClientController.php @@ -2689,7 +2689,7 @@ class ClientController extends AdminController 'errors' => ['required' => 'Please select a Client Branch.'] ], 'policy_type_id' => [ - 'rules' => 'required|is_natural_no_zero', + 'rules' => ['required', 'is_natural_no_zero'], 'errors' => [ 'required' => 'Policy Type is required.', 'is_natural_no_zero' => 'Please select a valid Policy Type.' @@ -2707,11 +2707,16 @@ class ClientController extends AdminController 'rules' => ['required', 'regex_match[/^[a-zA-Z0-9\s_\-\/\\\]+$/]'], 'errors' => [ 'required' => 'Policy No is required.', - 'regex_match' => 'Policy No Only letters, numbers, spaces, underscores, hyphens, forward slashes, and backslashes are allowed.' + 'regex_match' => 'Invalid characters in Policy No.' ] ], 'gst' => [ - 'rules' => 'required|numeric|greater_than_equal_to[0]|less_than_equal_to[100]', + 'rules' => [ + 'required', + 'numeric', + 'greater_than_equal_to[0]', + 'less_than_equal_to[100]' + ], 'errors' => [ 'required' => 'GST percentage is required.', 'numeric' => 'GST must be a valid number.', @@ -2735,16 +2740,31 @@ class ClientController extends AdminController 'rules' => 'permit_empty' ], 'disclaimer' => [ - 'rules' => 'permit_empty|string|min_length[5]', + 'rules' => ['permit_empty', 'string', 'min_length[5]'], 'errors' => ['min_length' => 'Disclaimer should be at least 5 characters long if provided.'] ], - - // --- CHECKBOXES (Permit Empty) --- 'enrolment_visibility' => ['rules' => 'permit_empty'], 'is_lgbtq' => ['rules' => 'permit_empty'] ]; - if (!$this->validate($rules)) { + // 2. Run the initial validation + $isValid = $this->validate($rules); + + // 3. Perform manual date comparison + $start = $this->request->getPost('policy_start_date'); + $end = $this->request->getPost('policy_end_date'); + + $startDate = change_date_format($start ?? null, 'd-m-Y', 'Y-m-d') ?? null; + $endDate = change_date_format($end ?? null, 'd-m-Y', 'Y-m-d') ?? null; + + if ($startDate && $endDate && ($endDate < $startDate)) { + // Manually push the error into the validator + $this->validator->setError('policy_end_date', 'Policy start and end date are mismatched (End date cannot be before Start date).'); + $isValid = false; + } + + // 4. Check final status + if (!$isValid) { return $this->response->setStatusCode(400)->setJSON([ 'status' => false, 'message' => 'Input validation failed', @@ -2851,13 +2871,12 @@ class ClientController extends AdminController public function editClientPolicy() { $rules = [ - // --- BASIC SELECTS (Required) --- 'client_branch_id' => [ 'rules' => 'required', 'errors' => ['required' => 'Please select a Client Branch.'] ], 'policy_type_id' => [ - 'rules' => 'required|is_natural_no_zero', + 'rules' => ['required', 'is_natural_no_zero'], 'errors' => [ 'required' => 'Policy Type is required.', 'is_natural_no_zero' => 'Please select a valid Policy Type.' @@ -2871,17 +2890,20 @@ class ClientController extends AdminController 'rules' => 'required', 'errors' => ['required' => 'Please select a TPA.'] ], - - // --- TEXT FIELDS (Required & Specific Format) --- 'policy_no' => [ - 'rules' => 'required|regex_match[/^[a-zA-Z0-9\s_\-\/\\\]+$/]', + 'rules' => ['required', 'regex_match[/^[a-zA-Z0-9\s_\-\/\\\]+$/]'], 'errors' => [ - 'required' => 'This field is required.', - 'regex_match' => 'Only letters, numbers, spaces, _, -, /, and \ are allowed.' + 'required' => 'Policy No is required.', + 'regex_match' => 'Invalid characters in Policy No.' ] ], 'gst' => [ - 'rules' => 'required|numeric|greater_than_equal_to[0]|less_than_equal_to[100]', + 'rules' => [ + 'required', + 'numeric', + 'greater_than_equal_to[0]', + 'less_than_equal_to[100]' + ], 'errors' => [ 'required' => 'GST percentage is required.', 'numeric' => 'GST must be a valid number.', @@ -2889,47 +2911,47 @@ class ClientController extends AdminController 'less_than_equal_to' => 'GST percentage cannot exceed 100%.' ] ], - - // --- DATE FIELDS (Required) --- 'policy_start_date' => [ - 'rules' => 'required|valid_date', - 'errors' => [ - 'required' => 'Start date is required.', - 'valid_date' => 'Enter a valid date format (YYYY-MM-DD).' - ] + 'rules' => 'required', + 'errors' => ['required' => 'Start date is required.'] ], 'policy_end_date' => [ - 'rules' => 'required|valid_date', - 'errors' => [ - 'required' => 'End date is required.', - 'valid_date' => 'Enter a valid date format (YYYY-MM-DD).' - ] - ], - - // --- PERMIT EMPTY FIELDS (Optional) --- - 'base_policy' => [ - 'rules' => 'permit_empty' + 'rules' => 'required', + 'errors' => ['required' => 'End date is required.'] ], 'wellness_plan_id' => [ 'rules' => 'permit_empty|alpha_numeric', - 'errors' => [ - 'alpha_numeric' => 'Wellness Plan ID can only contain letters and numbers (no spaces or special characters).' - ] + 'errors' => ['alpha_numeric' => 'Wellness Plan ID can only contain letters and numbers.'] ], 'wellness_vendor_id' => [ 'rules' => 'permit_empty' ], 'disclaimer' => [ - 'rules' => 'permit_empty|string|min_length[5]', + 'rules' => ['permit_empty', 'string', 'min_length[5]'], 'errors' => ['min_length' => 'Disclaimer should be at least 5 characters long if provided.'] ], - - // --- CHECKBOXES (Permit Empty) --- 'enrolment_visibility' => ['rules' => 'permit_empty'], 'is_lgbtq' => ['rules' => 'permit_empty'] ]; - if (!$this->validate($rules)) { + // 2. Run the initial validation + $isValid = $this->validate($rules); + + // 3. Perform manual date comparison + $start = $this->request->getPost('policy_start_date'); + $end = $this->request->getPost('policy_end_date'); + + $startDate = change_date_format($start ?? null, 'd-m-Y', 'Y-m-d') ?? null; + $endDate = change_date_format($end ?? null, 'd-m-Y', 'Y-m-d') ?? null; + + if ($startDate && $endDate && ($endDate < $startDate)) { + // Manually push the error into the validator + $this->validator->setError('policy_end_date', 'Policy start and end date are mismatched (End date cannot be before Start date).'); + $isValid = false; + } + + // 4. Check final status + if (!$isValid) { return $this->response->setStatusCode(400)->setJSON([ 'status' => false, 'message' => 'Input validation failed', diff --git a/app/Controllers/TicketController.php b/app/Controllers/TicketController.php index 32e2cf34..93ddee10 100644 --- a/app/Controllers/TicketController.php +++ b/app/Controllers/TicketController.php @@ -1216,36 +1216,31 @@ class TicketController extends BaseController 'claim_type' => ['label' => 'Claim Type','rules' => 'required', 'errors' => ['required' => 'Claim Type is required'] ], - 'hospital_name' => ['label' => 'Hospital Name','rules' => 'required', - 'errors' => ['required' => 'Hospital Name is required'] - ], - 'hospital_address' => ['label' => 'Hospital Address','rules' => 'required', - 'errors' => ['required' => 'Hospital Address is required'] + 'hospital_name' => ['label' => 'Hospital Name','rules' => 'required|regex_match[/^[a-zA-Z0-9\s\-]+$/]', + 'errors' => ['required' => 'Hospital Name is required','regex_match' => 'Hospital Name can contain letters, numbers, spaces, and hyphens.'] ], + 'hospital_address' => ['label' => 'Hospital Address','rules' => 'permit_empty','errors' => []], 'hospital_state' => [ 'label' => 'hospital_State', - 'rules' => 'required|regex_match[/^[a-zA-Z\s\-]+$/]', + 'rules' => 'permit_empty|regex_match[/^[a-zA-Z\s\-]+$/]', 'errors' => [ - 'required' => 'Hospital State is required.', 'regex_match' => 'Hospital State name can only contain letters, spaces, and hyphens.' ] ], 'hospital_city' => [ - 'rules' => 'required|regex_match[/^[a-zA-Z0-9\s\-]+$/]', + 'rules' => 'permit_empty|regex_match[/^[a-zA-Z0-9\s\-]+$/]', 'errors' => [ - 'required' => 'Hospital City is required', 'regex_match' => 'Hospital City can contain letters, numbers, spaces, and hyphens.' ] ], 'hospital_pin_code' => [ - 'rules' => 'required|numeric|exact_length[6]', + 'rules' => 'permit_empty|numeric|exact_length[6]', 'errors' => [ - 'required' => 'Hospital Pincode is required.', 'numeric' => 'Hospital Pincode must be digits only.', 'exact_length' => 'Hospital Pincode must be exactly 6 digits.' ] ], - 'hospital_phone_no' => ['label' => 'Hospital Phone','rules' => 'required|numeric|min_length[10]', + 'hospital_phone_no' => ['label' => 'Hospital Phone','rules' => 'permit_empty|numeric|min_length[10]', 'errors' => ['min_length' => 'Phone number too short'] ], 'doa' => ['label' => 'DOA', 'rules' => 'required', @@ -1551,22 +1546,31 @@ class TicketController extends BaseController 'claim_type' => ['label' => 'Claim Type','rules' => 'required', 'errors' => ['required' => 'Claim Type is required'] ], - 'hospital_name' => ['label' => 'Hospital Name','rules' => 'required', - 'errors' => ['required' => 'Hospital Name is required'] + 'hospital_name' => ['label' => 'Hospital Name','rules' => 'required|regex_match[/^[a-zA-Z0-9\s\-]+$/]', + 'errors' => ['required' => 'Hospital Name is required','regex_match' => 'Hospital Name can contain letters, numbers, spaces, and hyphens.'] ], - 'hospital_address' => ['label' => 'Hospital Address','rules' => 'required', - 'errors' => ['required' => 'Hospital Address is required'] + 'hospital_address' => ['label' => 'Hospital Address','rules' => 'permit_empty','errors' => []], + 'hospital_state' => [ + 'label' => 'hospital_State', + 'rules' => 'permit_empty|regex_match[/^[a-zA-Z\s\-]+$/]', + 'errors' => [ + 'regex_match' => 'Hospital State name can only contain letters, spaces, and hyphens.' + ] ], - 'hospital_city' => ['label' => 'Hospital City','rules' => 'required', - 'errors' => ['required' => 'City is required'] + 'hospital_city' => [ + 'rules' => 'permit_empty|regex_match[/^[a-zA-Z0-9\s\-]+$/]', + 'errors' => [ + 'regex_match' => 'Hospital City can contain letters, numbers, spaces, and hyphens.' + ] ], - 'hospital_state' => ['label' => 'Hospital State','rules' => 'required', - 'errors' => ['required' => 'State is required'] + 'hospital_pin_code' => [ + 'rules' => 'permit_empty|numeric|exact_length[6]', + 'errors' => [ + 'numeric' => 'Hospital Pincode must be digits only.', + 'exact_length' => 'Hospital Pincode must be exactly 6 digits.' + ] ], - 'hospital_pin_code' => ['label' => 'Hospital Pincode','rules' => 'required|numeric|exact_length[6]', - 'errors' => ['exact_length' => 'Pincode must be 6 digits'] - ], - 'hospital_phone_no' => ['label' => 'Hospital Phone','rules' => 'required|numeric|min_length[10]', + 'hospital_phone_no' => ['label' => 'Hospital Phone','rules' => 'permit_empty|numeric|min_length[10]', 'errors' => ['min_length' => 'Phone number too short'] ], 'doa' => ['label' => 'DOA', 'rules' => 'required',