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 56842b57..d93a7b81 100644 --- a/app/Controllers/TicketController.php +++ b/app/Controllers/TicketController.php @@ -3180,12 +3180,11 @@ class TicketController extends BaseController ], 'url.*' => [ 'label' => 'URL', - 'rules' => 'if_exist|required|regex_match[/^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/]', + 'rules' => 'required', 'errors' => [ - 'required' => 'URL is required.', - 'regex_match' => 'The URL format is invalid. Example: www.google.com or https://google.com' + 'required' => 'URL is required', ] - ], + ] ]; if (!$this->validate($rules)) {