Merge branch 'dev' of bitbucket.org:jubilian/nhance into dev

This commit is contained in:
VENKATESHWARAN 2026-02-13 09:07:47 +05:30
commit ad67bc647a
21 changed files with 1456 additions and 461 deletions

View File

@ -38,6 +38,12 @@ class Acl
'teams' => []
],
// ===================== VIEW INCEPTION PAGE =====================
'#^/hrFileList#' => [
'roles' => [ ADMIN_ROLE_ID,HEAD_ROLE_ID, MANAGER_ROLE_ID, STAFF_ROLE_ID, ACCOUNT_MANAGER_ROLE_ID],
'teams' => []
],
// ===================== USER MANAGEMENT =====================
'#^/user#' => [
'roles' => [ HEAD_ROLE_ID,ADMIN_ROLE_ID],

View File

@ -270,6 +270,7 @@ class BDSReportController extends AdminController
//Function for get BAP INSURE wise data for premium , policy count , revenue only
public function getBAPInsurerData($category = 0, $start_date = null, $end_date = null)
{
$category = (int)$category;
try {
$this->myLogger->logme('error', 'getBAPInsurerData function called');
$this->myLogger->logme('error', 'category : {data}', ['data' => $category]);
@ -429,7 +430,7 @@ class BDSReportController extends AdminController
//Function for get BAP CLIENT wise data for premium , policy count , revenue only
public function getBAPClientData($category = 0, $start_date = null, $end_date = null)
{
$category = (int)$category;
try {
$this->myLogger->logme('error', 'getBAPClientData function called');
$this->myLogger->logme('error', 'category : {data}', ['data' => $category]);
@ -530,7 +531,7 @@ class BDSReportController extends AdminController
//Function for get CLIENT wise data for premium and policy count only
public function getClientData($category = 0, $start_date = null, $end_date = null)
{
$category = (int)$category;
try {
$this->myLogger->logme('error', 'getClientData function called');

View File

@ -783,11 +783,19 @@ class ClientController extends AdminController
]
],
// 'cd_ac_no' => [
// 'rules' => 'required|regex_match[/^[a-zA-Z0-9\/_\\-]+$/]',
// 'errors' => [
// 'required' => 'Account number is required',
// 'regex_match' => 'Account number can only contain letters, numbers, slashes (/), underscores (_), and hyphens (-)',
// ]
// ],
'cd_ac_no' => [
'rules' => 'required|regex_match[/^[a-zA-Z0-9\/_\\-]+$/]',
'rules' => 'required|numeric',
'errors' => [
'required' => 'Account number is required',
'regex_match' => 'Account number can only contain letters, numbers, slashes (/), underscores (_), and hyphens (-)',
'required' => 'CD Account number is required.',
'numeric' => 'CD Account number must contain only numbers.',
]
],
@ -974,22 +982,28 @@ class ClientController extends AdminController
$rules = [
'entity_type_id' => [
'rules' => 'required',
'rules' => 'required|numeric',
'errors' => [
'required' => 'Entity Type is required',
'numeric' => 'Invalid Entity Type selected'
]
],
'client_name' => [
'rules' => 'required|alpha_space',
'rules' => 'required|regex_match[/^[a-zA-Z0-9\s_-]+$/]|min_length[2]|max_length[45]',
'errors' => [
'required' => 'Client Name is required',
'alpha_space' => 'Client Name can only contain alphabets and spaces.',
'required' => 'Client Name is required',
'regex_match' => 'Client Name can only contain letters, numbers, spaces, hyphens and underscores.',
'min_length' => 'Client Name must be at least 2 characters.',
'max_length' => 'Client Name must not exceed 45 characters.',
]
],
'short_name' => [
'rules' => 'required',
'rules' => 'required|regex_match[/^[a-zA-Z0-9_-]+$/]|min_length[2]|max_length[15]',
'errors' => [
'required' => 'Client Short Name is required',
'required' => 'Client Short Name is required',
'regex_match' => 'Client Short Name can only contain letters, numbers, hyphens and underscores.',
'min_length' => 'Client Short Name must be at least 2 characters.',
'max_length' => 'Client Short Name must not exceed 15 characters.',
]
],
'pan' => [
@ -1005,21 +1019,31 @@ class ClientController extends AdminController
'required' => 'HR File Processed By is required.',
]
],
// 'client_logo' => [
// 'rules' => [
// 'uploaded[client_logo]', // Add this to check if a file was actually sent
// 'is_image[client_logo]',
// 'max_size[client_logo,200]',
// 'ext_in[client_logo,jpg,jpeg,png]',
// 'max_dims[client_logo,100,100]',
// ],
// 'errors' => [
// 'uploaded' => 'Please upload a client logo',
// 'is_image' => 'The uploaded file must be an image',
// 'max_size' => 'File size should not exceed 200 KB',
// 'ext_in' => 'Allowed file types: jpg, jpeg, png',
// 'max_dims' => 'Image dimensions must be 100 x 100 pixels',
// ]
// ],
'client_logo' => [
'rules' => [
'is_image[client_logo]',
'max_size[client_logo,200]', // 200 KB
'ext_in[client_logo,jpg,jpeg,png]',
'max_dims[client_logo,100,100]',
],
'errors' => [
'is_image' => 'The uploaded file must be an image',
'max_size' => 'File size should not exceed 200 KB',
'ext_in' => 'Allowed file types: jpg, jpeg, png',
'max_dims' => 'Image dimensions must be 100 x 100 pixels',
]
'rules' => 'permit_empty|is_image[client_logo]|max_size[client_logo,200]|ext_in[client_logo,jpg,jpeg,png]|max_dims[client_logo,100,100]',
'errors' => [
'is_image' => 'The uploaded file must be an image',
'max_size' => 'File size should not exceed 200 KB',
'ext_in' => 'Allowed file types: jpg, jpeg, png',
'max_dims' => 'Image dimensions must be 100 x 100 pixels',
]
],
];
if (!$this->validate($rules)) {
@ -1071,6 +1095,65 @@ class ClientController extends AdminController
public function editClientGeneralInfo()
{
$rules = [
'entity_type_id' => [
'rules' => 'required|numeric',
'errors' => [
'required' => 'Entity Type is required',
'numeric' => 'Invalid Entity Type selected'
]
],
'client_name' => [
'rules' => 'required|regex_match[/^[a-zA-Z0-9\s_-]+$/]',
'errors' => [
'required' => 'Client Name is required',
'regex_match' => 'Client Name can only contain letters, numbers, spaces, hyphens and underscores.',
'min_length' => 'Client Name must be at least 2 characters.',
'max_length' => 'Client Name must not exceed 45 characters.',
]
],
'short_name' => [
'rules' => 'required|regex_match[/^[a-zA-Z0-9_-]+$/]',
'errors' => [
'required' => 'Client Short Name is required',
'regex_match' => 'Client Short Name can only contain letters, numbers, hyphens and underscores.',
'min_length' => 'Client Short Name must be at least 2 characters.',
'max_length' => 'Client Short Name must not exceed 15 characters.',
]
],
'pan' => [
'rules' => 'required|regex_match[/^[A-Z]{5}[0-9]{4}[A-Z]$/]',
'errors' => [
'required' => 'PAN Number is required.',
'regex_match' => 'Invalid PAN format. Example: ABCDE1234F'
]
],
'hr_file_processed_by' => [
'rules' => 'required',
'errors' => [
'required' => 'HR File Processed By is required.',
]
],
'client_logo' => [
'rules' => 'permit_empty|is_image[client_logo]|max_size[client_logo,200]|ext_in[client_logo,jpg,jpeg,png]|max_dims[client_logo,100,100]',
'errors' => [
'is_image' => 'The uploaded file must be an image',
'max_size' => 'File size should not exceed 200 KB',
'ext_in' => 'Allowed file types: jpg, jpeg, png',
'max_dims' => 'Image dimensions must be 100 x 100 pixels',
]
],
];
if (!$this->validate($rules)) {
return $this->response->setStatusCode(400)->setJSON([
'status' => false,
'message' => 'Input validation failed',
'code' => 400,
'errors' => $this->validator->getErrors()
]);
}
$this->myLogger->logme('error', 'edit client general info function called');
$uploadFilePath = ROOTPATH . 'public/uploads/logo/';
$file_name = file_Upload($this->request->getFile('client_logo'), $uploadFilePath);
@ -1145,6 +1228,14 @@ class ClientController extends AdminController
$this->myLogger->logme('error', 'Create Client KYC function called');
$rules = [
'other_docs_name' => [
'label' => 'Documents Name',
'rules' => 'permit_empty|regex_match[/^[a-zA-Z0-9_\- ]+$/]',
'errors' => [
'regex_match' => 'Document Name can only contain letters, numbers, hyphens, and underscores'
]
],
'file_name' => [
'rules' => 'uploaded[file_name]|max_size[file_name,5120]|ext_in[file_name,pdf,jpg,jpeg,png]',
'errors' => [
@ -1508,6 +1599,52 @@ class ClientController extends AdminController
$this->myLogger->logme('error', 'Client relation function called');
$rules = [
// --- Hidden Fields ---
'PrimaryKey' => [
'rules' => 'permit_empty|numeric',
],
'client_id' => [
'rules' => 'required|numeric',
'errors' => ['required' => 'Client ID is missing.']
],
// --- Account Manager (Array Category) ---
// Note the .* which validates every item inside the multiple select array
'account_manager' => [
'rules' => 'required',
'errors' => [
'required' => 'Please select at least one Account Manager (L1).',
]
],
// --- Manager (L2) ---
'manager' => [
'rules' => 'required|numeric',
'errors' => [
'required' => 'Please select a Manager (L2).',
'numeric' => 'Invalid Manager selection.'
]
],
// --- Head ---
'head' => [
'rules' => 'required|numeric',
'errors' => [
'required' => 'Please select a Head.',
'numeric' => 'Invalid Head selection.'
]
],
];
// if (!$this->validate($rules)) {
// return $this->response->setStatusCode(400)->setJSON([
// 'status' => false,
// 'message' => 'Input validation failed',
// 'code' => 400,
// 'errors' => $this->validator->getErrors()
// ]);
// }
$data['client_id'] = $this->request->getPost('client_id');
$data['created_by'] = get_session_userid();
$inserted = false;
@ -1542,6 +1679,52 @@ class ClientController extends AdminController
public function editClientRelation()
{
$this->myLogger->logme('error', 'Client relation function called');
$rules = [
// --- Hidden Fields ---
'PrimaryKey' => [
'rules' => 'permit_empty|numeric',
],
'client_id' => [
'rules' => 'required|numeric',
'errors' => ['required' => 'Client ID is missing.']
],
// --- Account Manager (Array Category) ---
// Note the .* which validates every item inside the multiple select array
'account_manager' => [
'rules' => 'required',
'errors' => [
'required' => 'Please select at least one Account Manager (L1).',
]
],
// --- Manager (L2) ---
'manager' => [
'rules' => 'required|numeric',
'errors' => [
'required' => 'Please select a Manager (L2).',
'numeric' => 'Invalid Manager selection.'
]
],
// --- Head ---
'head' => [
'rules' => 'required|numeric',
'errors' => [
'required' => 'Please select a Head.',
'numeric' => 'Invalid Head selection.'
]
],
];
// if (!$this->validate($rules)) {
// return $this->response->setStatusCode(400)->setJSON([
// 'status' => false,
// 'message' => 'Input validation failed',
// 'code' => 400,
// 'errors' => $this->validator->getErrors()
// ]);
// }
$id = $this->request->getPost('PrimaryKey');
$data['client_id'] = $this->request->getPost('client_id');
@ -1619,84 +1802,100 @@ class ClientController extends AdminController
$this->myLogger->logme('error', 'Client branch CREATE function called');
$rules = [
'branch_name' => [
'rules' => 'required',
'errors' => [
'required' => 'Branch Name is required',
]
],
'branch_code' => [
'rules' => 'required',
'errors' => [
'required' => 'Branch Code is required',
]
],
'address1' => [
'rules' => 'required',
'errors' => [
'required' => 'Address Line 1 is required',
]
],
'state' => [
'rules' => 'required',
'errors' => [
'required' => 'State is required',
]
],
'district' => [
'rules' => 'required',
'errors' => [
'required' => 'District is required.',
]
],
'city' => [
'rules' => 'required',
'errors' => [
'required' => 'City is required.',
]
],
'pincode' => [
'rules' => 'required',
'errors' => [
'required' => 'Pincode is required.',
]
],
'gst' => [
'rules' => 'required|regex_match[/^\d{2}[A-Z]{5}\d{4}[A-Z]{1}[A-Z\d]{1}Z[A-Z\d]{1}$/]',
'errors' => [
'required' => 'GST number is required',
'regex_match' => 'Invalid GST Number. Example: 12ABCDE1234F5Z6'
]
],
'name.*' => [
'rules' => 'required|alpha_space',
'errors' => [
'required' => 'Contact name is required',
'alpha_space' => 'Contact name may contain only letters and spaces'
]
],
'designation.*' => [
'rules' => 'required|alpha_space',
'errors' => [
'required' => 'Designation is required',
'alpha_space' => 'Designation may contain only letters and spaces'
]
],
'email.*' => [
'rules' => 'required|valid_email',
'errors' => [
'required' => 'Email is required',
'valid_email' => 'Please enter a valid email address'
]
],
'mobile.*' => [
'rules' => 'required|numeric|exact_length[10]',
'errors' => [
'required' => 'Mobile number is required',
'numeric' => 'Mobile number must contain digits only',
'exact_length' => 'Mobile number must be exactly 10 digits'
]
],
'branch_name' => [
'rules' => 'required|regex_match[/^[a-zA-Z0-9\s_-]+$/]|min_length[3]',
'errors' => [
'required' => 'Branch Name is required',
'regex_match' => 'Branch Name can only contain letters, numbers, spaces, hyphens and underscores.',
]
],
'branch_code' => [
'rules' => 'required|regex_match[/^[a-zA-Z0-9_-]+$/]',
'errors' => [
'required' => 'Branch Code is required',
'regex_match' => 'Branch Code can only contain letters, numbers, hyphens and underscores.',
]
],
'address1' => [
'rules' => 'required',
'errors' => ['required' => 'Address Line 1 is required']
],
'address2' => [
'rules' => 'permit_empty|string',
],
'state' => [
'label' => 'State',
'rules' => 'required',
'errors' => ['required' => 'State is required.']
// 'rules' => 'required|regex_match[/^[a-zA-Z\s\-]+$/]',
// 'errors' => [
// 'required' => 'State is required.',
// 'regex_match' => 'State name can only contain letters, spaces, and hyphens.'
// ]
],
'district' => [
'rules' => 'required|regex_match[/^[a-zA-Z0-9\s\-]+$/]',
'errors' => [
'required' => 'District is required.',
'regex_match' => 'District can contain letters, numbers, spaces, and hyphens.'
]
],
'city' => [
'rules' => 'required|regex_match[/^[a-zA-Z0-9\s\-]+$/]',
'errors' => [
'regex_match' => 'City can contain letters, numbers, spaces, and hyphens.'
]
],
'pincode' => [
'rules' => 'required|numeric|exact_length[6]',
'errors' => [
'required' => 'Pincode is required.',
'numeric' => 'Pincode must be digits only.',
'exact_length' => 'Pincode must be exactly 6 digits.'
]
],
'gst' => [
'rules' => 'required|regex_match[/^\d{2}[A-Z]{5}\d{4}[A-Z]{1}[A-Z\d]{1}Z[A-Z\d]{1}$/]',
'errors' => [
'required' => 'GST number is required',
'regex_match' => 'Invalid GST Number format.'
]
],
'name.*' => [
'rules' => 'required|alpha_space',
'errors' => [
'required' => 'Contact name is required',
'alpha_space' => 'Contact name may contain only letters and spaces'
]
],
'designation.*' => [
'rules' => 'required|alpha_space',
'errors' => [
'required' => 'Designation is required',
'alpha_space' => 'Designation may contain only letters and spaces'
]
],
'email.*' => [
'rules' => 'required|regex_match[/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/]',
'errors' => [
'required' => 'Email address is required.',
'regex_match' => 'Please enter a valid email format (e.g., name@domain.com).'
]
],
'mobile.*' => [
'rules' => 'required|numeric|exact_length[10]',
'errors' => [
'required' => 'Mobile number is required',
'numeric' => 'Mobile number must contain digits only',
'exact_length' => 'Mobile number must be exactly 10 digits'
]
],
'units.*' => [
'rules' => 'permit_empty|numeric' // For the multiple select
],
'sez' => [
'rules' => 'permit_empty' // For the checkbox
]
];
if (!$this->validate($rules)) {
@ -2009,15 +2208,20 @@ class ClientController extends AdminController
$rules = [
'branch_name' => [
'rules' => 'required',
'rules' => 'required|min_length[3]|regex_match[/^[a-zA-Z0-9\s\-_]+$/]',
'errors' => [
'required' => 'Branch Name is required',
'required' => 'Branch Name is required',
'min_length' => 'Branch Name must be at least 3 characters long',
'regex_match' => 'Branch Name can only contain letters, numbers, spaces, hyphens and underscores.'
]
],
'branch_code' => [
'rules' => 'required',
// Note: Codes usually don't have spaces, but I've included the others
'rules' => 'required|min_length[2]|regex_match[/^[a-zA-Z0-9\-_]+$/]',
'errors' => [
'required' => 'Branch Code is required',
'required' => 'Branch Code is required',
'min_length' => 'Branch Code must be at least 2 characters long',
'regex_match' => 'Branch Code can only contain letters, numbers, hyphens and underscores.'
]
],
'address1' => [
@ -2027,29 +2231,35 @@ class ClientController extends AdminController
]
],
'state' => [
'rules' => 'required',
'errors' => [
'required' => 'State is required',
]
],
'district' => [
'rules' => 'required',
'errors' => [
'required' => 'District is required.',
]
],
'city' => [
'rules' => 'required',
'errors' => [
'required' => 'City is required.',
]
],
'pincode' => [
'rules' => 'required',
'errors' => [
'required' => 'Pincode is required.',
]
],
'label' => 'State',
// 'rules' => 'required|regex_match[/^[a-zA-Z\s\-]+$/]',
'rules' => 'required',
'errors' => [
'required' => 'State is required.',
// 'regex_match' => 'State name can only contain letters, spaces, and hyphens.'
]
],
'district' => [
'rules' => 'required|regex_match[/^[a-zA-Z0-9\s\-]+$/]',
'errors' => [
'required' => 'District is required.',
'regex_match' => 'District can contain letters, numbers, spaces, and hyphens.'
]
],
'city' => [
'rules' => 'required|regex_match[/^[a-zA-Z0-9\s\-]+$/]',
'errors' => [
'regex_match' => 'City can contain letters, numbers, spaces, and hyphens.'
]
],
'pincode' => [
'rules' => 'required|numeric|exact_length[6]',
'errors' => [
'required' => 'Pincode is required.',
'numeric' => 'Pincode must be digits only.',
'exact_length' => 'Pincode must be exactly 6 digits.'
]
],
'gst' => [
'rules' => 'required|regex_match[/^\d{2}[A-Z]{5}\d{4}[A-Z]{1}[A-Z\d]{1}Z[A-Z\d]{1}$/]',
'errors' => [
@ -2058,10 +2268,11 @@ class ClientController extends AdminController
]
],
'name.*' => [
'rules' => 'required|alpha_space',
'rules' => 'required|min_length[3]|regex_match[/^[a-zA-Z0-9\s\-_]+$/]',
'errors' => [
'required' => 'Contact name is required',
'alpha_space' => 'Contact name may contain only letters and spaces'
'min_length' => 'Contact name must be at least 3 characters long',
'regex_match' => 'Contact name can only contain letters, numbers, spaces, hyphens and underscores.'
]
],
'designation.*' => [
@ -2072,11 +2283,11 @@ class ClientController extends AdminController
]
],
'email.*' => [
'rules' => 'required|valid_email',
'errors' => [
'required' => 'Email is required',
'valid_email' => 'Please enter a valid email address'
]
'rules' => 'required|regex_match[/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/]',
'errors' => [
'required' => 'Email address is required.',
'regex_match' => 'Please enter a valid email format (e.g., name@domain.com).'
]
],
'mobile.*' => [
'rules' => 'required|numeric|exact_length[10]',
@ -2183,6 +2394,104 @@ class ClientController extends AdminController
$client_id = $this->request->getPost('client_id');
$pre_branch_id = $this->request->getPost('pre_branch_id') ?? '';
$rules = [
'branch_name' => [
'rules' => 'required|min_length[3]|regex_match[/^[a-zA-Z0-9\s\-_]+$/]',
'errors' => [
'required' => 'Branch Name is required',
'min_length' => 'Branch Name must be at least 3 characters long',
'regex_match' => 'Branch Name can only contain letters, numbers, spaces, hyphens and underscores.'
]
],
'branch_code' => [
// Note: Codes usually don't have spaces, but I've included the others
'rules' => 'required|min_length[2]|regex_match[/^[a-zA-Z0-9\-_]+$/]',
'errors' => [
'required' => 'Branch Code is required',
'min_length' => 'Branch Code must be at least 2 characters long',
'regex_match' => 'Branch Code can only contain letters, numbers, hyphens and underscores.'
]
],
'address1' => [
'rules' => 'required',
'errors' => [
'required' => 'Address Line 1 is required',
]
],
'state' => [
'label' => 'State',
'rules' => 'required',
'errors' => ['required' => 'State is required.']
],
'district' => [
'rules' => 'required|regex_match[/^[a-zA-Z0-9\s\-]+$/]',
'errors' => [
'required' => 'District is required.',
'regex_match' => 'District can contain letters, numbers, spaces, and hyphens.'
]
],
'city' => [
'rules' => 'required|regex_match[/^[a-zA-Z0-9\s\-]+$/]',
'errors' => [
'regex_match' => 'City can contain letters, numbers, spaces, and hyphens.'
]
],
'pincode' => [
'rules' => 'required|numeric|exact_length[6]',
'errors' => [
'required' => 'Pincode is required.',
'numeric' => 'Pincode must be digits only.',
'exact_length' => 'Pincode must be exactly 6 digits.'
]
],
'gst' => [
'rules' => 'required|regex_match[/^\d{2}[A-Z]{5}\d{4}[A-Z]{1}[A-Z\d]{1}Z[A-Z\d]{1}$/]',
'errors' => [
'required' => 'GST number is required',
'regex_match' => 'Invalid GST Number. Example: 12ABCDE1234F5Z6'
]
],
'name.*' => [
'rules' => 'required|min_length[3]|regex_match[/^[a-zA-Z0-9\s\-_]+$/]',
'errors' => [
'required' => 'Contact name is required',
'min_length' => 'Contact name must be at least 3 characters long',
'regex_match' => 'Contact name can only contain letters, numbers, spaces, hyphens and underscores.'
]
],
'designation.*' => [
'rules' => 'required|alpha_space',
'errors' => [
'required' => 'Designation is required',
'alpha_space' => 'Designation may contain only letters and spaces'
]
],
'email.*' => [
'rules' => 'required|regex_match[/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/]',
'errors' => [
'required' => 'Email address is required.',
'regex_match' => 'Please enter a valid email format (e.g., name@domain.com).'
]
],
'mobile.*' => [
'rules' => 'required|numeric|exact_length[10]',
'errors' => [
'required' => 'Mobile number is required',
'numeric' => 'Mobile number must contain digits only',
'exact_length' => 'Mobile number must be exactly 10 digits'
]
],
];
if (!$this->validate($rules)) {
return $this->response->setStatusCode(400)->setJSON([
'status' => false,
'message' => 'Input validation failed',
'code' => 400,
'errors' => $this->validator->getErrors()
]);
}
$data = $this->request->getPost();
$data = sanitizeInputArrayAdvanced($data);
$data['pre_branch_id'] = $pre_branch_id;
@ -2374,6 +2683,76 @@ class ClientController extends AdminController
$request_post_data = $this->request->getPost();
$sanitized_post_data = sanitizeInputArrayAdvanced($request_post_data);
$rules = [
'client_branch_id' => [
'rules' => 'required',
'errors' => ['required' => 'Please select a Client Branch.']
],
'policy_type_id' => [
'rules' => 'required|is_natural_no_zero',
'errors' => [
'required' => 'Policy Type is required.',
'is_natural_no_zero' => 'Please select a valid Policy Type.'
]
],
'insurer' => [
'rules' => 'required',
'errors' => ['required' => 'Please select an Insurer.']
],
'tpa' => [
'rules' => 'required',
'errors' => ['required' => 'Please select a TPA.']
],
'policy_no' => [
'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.'
]
],
'gst' => [
'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.',
'greater_than_equal_to' => 'GST cannot be negative.',
'less_than_equal_to' => 'GST percentage cannot exceed 100%.'
]
],
'policy_start_date' => [
'rules' => 'required',
'errors' => ['required' => 'Start date is required.']
],
'policy_end_date' => [
'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.']
],
'wellness_vendor_id' => [
'rules' => 'permit_empty'
],
'disclaimer' => [
'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)) {
return $this->response->setStatusCode(400)->setJSON([
'status' => false,
'message' => 'Input validation failed',
'code' => 400,
'errors' => $this->validator->getErrors()
]);
}
$policy_type_id = $sanitized_post_data['policy_type_id'] ?? null;
$client_branch_id = $sanitized_post_data['client_branch_id'] ?? null;
$client_id = $sanitized_post_data['client_id'] ?? null;
@ -2471,6 +2850,94 @@ class ClientController extends AdminController
/** here ci4 rules not implemented, because UI screen Fields are hide/show implemented thats why */
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',
'errors' => [
'required' => 'Policy Type is required.',
'is_natural_no_zero' => 'Please select a valid Policy Type.'
]
],
'insurer' => [
'rules' => 'required',
'errors' => ['required' => 'Please select an Insurer.']
],
'tpa' => [
'rules' => 'required',
'errors' => ['required' => 'Please select a TPA.']
],
// --- TEXT FIELDS (Required & Specific Format) ---
'policy_no' => [
'rules' => 'required|regex_match[/^[a-zA-Z0-9\s_\-\/\\\]+$/]',
'errors' => [
'required' => 'This field is required.',
'regex_match' => 'Only letters, numbers, spaces, _, -, /, and \ are allowed.'
]
],
'gst' => [
'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.',
'greater_than_equal_to' => 'GST cannot be negative.',
'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).'
]
],
'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'
],
'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).'
]
],
'wellness_vendor_id' => [
'rules' => 'permit_empty'
],
'disclaimer' => [
'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)) {
return $this->response->setStatusCode(400)->setJSON([
'status' => false,
'message' => 'Input validation failed',
'code' => 400,
'errors' => $this->validator->getErrors()
]);
}
$this->myLogger->logme('error', 'Client policy function called');
$data = $this->request->getPost();
$sanitized_post_data = sanitizeInputArrayAdvanced($data);

View File

@ -1905,7 +1905,7 @@ class EmployeeController extends AdminController
$query = "
UPDATE employee_polices
SET employee_polices.status = 'truncated', employee_polices.is_active = 0
WHERE employee_polices.file_id == :file_id:
WHERE employee_polices.file_id = :file_id:
";
$binds = ["file_id" => $file_id];
@ -2767,10 +2767,10 @@ class EmployeeController extends AdminController
// ]
// ],
'email_corporate' => [
'rules' => 'required|valid_email',
'rules' => 'required|regex_match[/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/]',
'errors' => [
'required' => 'Email is required',
'valid_email' => 'Enter a valid email address'
'required' => 'Email address is required.',
'regex_match' => 'Please enter a valid email format (e.g., name@domain.com).'
]
],
'mobile' => [

View File

@ -121,28 +121,28 @@ class ICICILombardController extends AdminController
$body = [
"PolicyNumber" => "4016/PPN/A/O/53185987/00/000",
"CDBGAccountNumber" => "CD-MUM-0026",
"CorrelationId" => "550e8400-e29b-41d4-a716-446655440018",
"CorrelationId" => "550e8400-e29b-41d4-a716-446655440021",
"MemberDetails" => [
[
"MemberEmpId" => "EMPID3625562",
"MemberEmpId" => "EMPID3625564",
"DOJ" => "21-MAR-2019",
"InsuredName" => "Jeeva",
"DOB" => "7-JUL-1993",
"Relationship" => "SELF",
"Gender" => "MALE",
"DOC" => '19-Nov-2025',
"DOC" => '18-Nov-2025',
"SumInsured" => "500000",
"EmailId" => "Jeeva@GMAIL.COM",
"FlagStatus" => "A"
],
[
"MemberEmpId" => "EMPID3625562",
"MemberEmpId" => "EMPID3625564",
"DOJ" => "21-MAR-2019",
"InsuredName" => "Muthu",
"DOB" => "8-AUG-1970",
"Relationship" => "MOTHER",
"Gender" => "FEMALE",
"DOC" => '19-Nov-2025',
"DOC" => '18-Nov-2025',
"EmailId" => "Muthu@GMAIL.COM",
"FlagStatus" => "A"
],
@ -180,8 +180,8 @@ class ICICILombardController extends AdminController
$body = [
"PolicyNumber" => "4016/PPN/A/O/53185987/00/000",
"BatchId" => "3725147",
"CorrelationId" => "550e8400-e29b-41d4-a716-446655440018"
"BatchId" => "3727144",
"CorrelationId" => "550e8400-e29b-41d4-a716-446655440021"
];
$response = call_third_party_api($url, 'POST', $headers, $body, true);
@ -213,9 +213,9 @@ class ICICILombardController extends AdminController
];
$body = [
"PolicyNumber" => "4016/PPN/A/O/53167743/00/000",
"PolicyNumber" => "4016/PPN/A/O/53185987/00/000",
"IMID" => "201580517901",
"CorrelationId" => "550e8400-e29b-41d4-a716-446655440018"
"CorrelationId" => "550e8400-e29b-41d4-a716-446655440020"
];
$response = call_third_party_api($url, 'POST', $headers, $body, true);

View File

@ -366,19 +366,8 @@ class LeadsController extends BaseController
// print_r($this->request->getPost()); die;
$id = $this->request->getPost('id');
$data = $this->prepareLeadData();
// print_r($data); die;
if (!$id) {
return $this->insertNewLead($data);
} else {
return $this->updateOldLead($id, $data);
}
}
private function prepareLeadData()
{
$rules = [
'lead_type' => [
'rules' => 'integer',
'errors' => ['required' => 'Lead Type is required']
@ -392,39 +381,63 @@ class LeadsController extends BaseController
'errors' => ['required' => 'Entity Type is required']
],
'client_name' => [
'rules' => 'required',
'errors' => ['required' => 'Client Name is required']
'rules' => 'required|regex_match[/^[a-zA-Z0-9_ -]+$/]',
'errors' => [
'required' => 'Client Name is required',
'regex_match' => 'Client Name only letters, numbers, space, hyphens and underscores are allowed'
]
],
'client_short_name' => [
'rules' => 'required',
'errors' => ['required' => 'Client Short Name is required']
'rules' => 'required|regex_match[/^[a-zA-Z0-9_-]+$/]',
'errors' => ['required' => 'Client Short Name is required','regex_match' => 'Client Short Name only letters, numbers, hyphens and underscores are allowed']
],
'gst' => [
'rules' => 'required',
'errors' => ['required' => 'GST Number is required']
'rules' => 'required|regex_match[/^[0-9]{2}[A-Z]{5}[0-9]{4}[A-Z]{1}[1-9A-Z]{1}Z[0-9A-Z]{1}$/]',
'errors' => [
'required' => 'GST Number is required.',
'regex_match' => 'Invalid GST format. Example: 22AAAAA0000A1Z5'
]
],
'branch_name' => [
'rules' => 'required',
'errors' => ['required' => 'Branch Name is required']
'rules' => 'required|regex_match[/^[a-zA-Z0-9\s_-]+$/]|min_length[3]',
'errors' => [
'required' => 'Branch Name is required.',
'regex_match' => 'Branch Name can only contain letters, numbers, spaces, hyphens and underscores..',
'min_length' => 'Branch Name must be at least 3 characters long.'
]
],
'branch_code' => [
'rules' => 'required',
'errors' => ['required' => 'Branch Code is required']
'branch_code' => [
'rules' => 'required|regex_match[/^[a-zA-Z0-9_-]+$/]',
'errors' => [
'required' => 'Branch Code is required.',
'regex_match' => 'Branch Code can only contain letters, numbers, hyphens and underscores..'
]
],
'contact_person_name' => [
'rules' => 'required',
'errors' => ['required' => 'Contact Person Name is required']
'rules' => 'required|regex_match[/^[a-zA-Z0-9_ -]+$/]',
'errors' => [
'required' => 'Contact Person Name is required',
'regex_match' => 'Contact person name only letters, numbers and spaces, hyphens and underscores..'
]
],
'contact_person_mobile' => [
'rules' => 'required',
'errors' => ['required' => 'Contact Person Mobile is required']
'rules' => 'required|exact_length[10]|regex_match[/^[0-9]+$/]',
'errors' => [
'required' => 'Contact Person Mobile is required' ,
'regex_match' => 'Contact Person Mobile Only numbers',
'exact_length'=> 'Contact Person Mobile must be exactly 10 digits long.'
]
],
'contact_person_email' => [
'rules' => 'required|valid_email',
'rules' => 'required|regex_match[/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/]',
'errors' => [
'required' => 'Contact Person Email is required',
'valid_email' => 'Please enter a valid email address'
'required' => 'Contact Person Email address is required.',
'regex_match' => 'Please enter a valid email format (e.g., name@domain.com).'
]
// 'rules' => 'required|valid_email|regex_match[/^[a-zA-Z0-9_-]+$/]',
// 'regex_match' => 'Contact Person Email Only letters, numbers and characters _ - @ . are allowed'
],
'salse_person_id' => [
'rules' => 'required',
@ -435,8 +448,7 @@ class LeadsController extends BaseController
'errors' => ['required' => 'Status is required']
]
];
$request_data = $this->request->getPost();
$data = sanitizeInputArrayAdvanced($request_data);
if (isset($data['lead_form_type']) && (int)$data['lead_form_type'] === 2) {
$rules['client_type'] = [
'rules' => 'required',
@ -497,8 +509,23 @@ class LeadsController extends BaseController
]);
}
// print_r($data); die;
if (!$id) {
return $this->insertNewLead($data);
} else {
return $this->updateOldLead($id, $data);
}
}
private function prepareLeadData()
{
$request_data = $this->request->getPost();
$data = sanitizeInputArrayAdvanced($request_data);
$data['client_type'] = 1;
$data['pan'] = "";

View File

@ -254,7 +254,7 @@ class MasterController extends AdminController
$this->myLogger->logme('error','Insurer Onboarding function called');
$headerData['tab_name'] = 'Insurer Masters';
$headerData['page_name'] = 'Insurers';
$types = array(
(object) array('id' => 'pvt', 'name' => 'PVT'),
(object) array('id' => 'psu', 'name' => 'PSU')
@ -284,29 +284,78 @@ class MasterController extends AdminController
$this->myLogger->logme('error','Insurer general info function called');
$rules = [
'name' => [
'rules' => 'required',
'errors' => [
'required' => 'Name is required'
]
],
'short_name' => [
'rules' => 'required|min_length[3]|max_length[8]',
'errors' => [
'required' => 'Short name is required',
'min_length' => 'Short name must be at least 3 characters',
'max_length' => 'Short name cannot exceed 8 characters'
]
],
'insurer_logo' => [
'name' => [
'label' => 'Insurer Name',
'rules' => ['required', 'regex_match[/^[a-zA-Z0-9\s\-_]+$/]'],
'errors' => [
'required' => 'Insurer Name is required.',
'regex_match' => 'Insurer Name can only contain letters, numbers, spaces, hyphens, and underscores.',
]
],
'short_name' => [
'label' => 'Insurer Short Name',
'rules' => ['required', 'regex_match[/^[a-zA-Z0-9\-_]+$/]'],
'errors' => [
'required' => 'Short Name is required.',
'regex_match' => 'Short Name can only contain letters, numbers, hyphens, and underscores.',
]
],
'type' => [
'label' => 'Insurer Type',
'rules' => 'permit_empty|in_list[pvt,psu]',
'errors' => [
'in_list' => 'Please select a valid Insurer Type (PVT or PSU).'
]
],
'category' => [
'label' => 'Insurer Category',
'rules' => 'permit_empty|in_list[life,general]',
'errors' => [
'in_list' => 'Please select a valid Category (Life or General).'
]
],
'addition_add_day' => [
'rules' => 'permit_empty' // Checkboxes return null if unchecked
],
'deletion_add_day' => [
'rules' => 'permit_empty'
],
'is_multi_event' => [
'rules' => 'permit_empty'
],
'insurer_logo' => [
'rules' => 'if_exist|is_image[insurer_logo]|max_size[insurer_logo,200]|ext_in[insurer_logo,jpg,jpeg,png]',
'errors' => [
'is_image' => 'The uploaded file must be an image',
'max_size' => 'File size should not exceed 200 KB',
'ext_in' => 'Allowed file types: jpg, jpeg, png',
]
],
];
],
];
// $rules = [
// 'name' => [
// 'rules' => 'required',
// 'errors' => [
// 'required' => 'Name is required'
// ]
// ],
// 'short_name' => [
// 'rules' => 'required|min_length[3]|max_length[8]',
// 'errors' => [
// 'required' => 'Short name is required',
// 'min_length' => 'Short name must be at least 3 characters',
// 'max_length' => 'Short name cannot exceed 8 characters'
// ]
// ],
// 'insurer_logo' => [
// 'rules' => 'if_exist|is_image[insurer_logo]|max_size[insurer_logo,200]|ext_in[insurer_logo,jpg,jpeg,png]',
// 'errors' => [
// 'is_image' => 'The uploaded file must be an image',
// 'max_size' => 'File size should not exceed 200 KB',
// 'ext_in' => 'Allowed file types: jpg, jpeg, png',
// ]
// ],
// ];
if (!$this->validate($rules)) {
return $this->response->setStatusCode(400)->setJSON([
@ -370,43 +419,44 @@ class MasterController extends AdminController
],
'state' => [
'rules' => 'required|is_natural_no_zero',
'errors' => [
'required' => 'State is required'
]
],
'district' => [
'rules' => 'required|trim',
'errors' => [
'required' => 'District is required'
]
],
'city' => [
'rules' => 'required|trim',
'errors' => [
'required' => 'City is required'
]
],
'pincode' => [
'rules' => 'required|numeric|exact_length[6]',
'errors' => [
'required' => 'Pincode is required',
'numeric' => 'Pincode must contain only numbers',
'exact_length' => 'Pincode must be exactly 6 digits'
]
],
'label' => 'State',
'rules' => 'required|regex_match[/^[a-zA-Z\s\-]+$/]',
'errors' => [
'required' => 'State is required.',
'regex_match' => 'State name can only contain letters, spaces, and hyphens.'
]
],
'district' => [
'rules' => 'required|regex_match[/^[a-zA-Z0-9\s\-]+$/]',
'errors' => [
'required' => 'District is required.',
'regex_match' => 'District can contain letters, numbers, spaces, and hyphens.'
]
],
'city' => [
'rules' => 'required|regex_match[/^[a-zA-Z0-9\s\-]+$/]',
'errors' => [
'regex_match' => 'City can contain letters, numbers, spaces, and hyphens.'
]
],
'pincode' => [
'rules' => 'required|numeric|exact_length[6]',
'errors' => [
'required' => 'Pincode is required.',
'numeric' => 'Pincode must be digits only.',
'exact_length' => 'Pincode must be exactly 6 digits.'
]
],
// ======================
// Contact Details (Array)
// ======================
'name.*' => [
'rules' => 'required|trim|min_length[2]',
'rules' => 'required|trim|min_length[2]|regex_match[/^[a-zA-Z0-9\s_-]+$/]',
'errors' => [
'required' => 'Contact name is required',
'min_length' => 'Contact name must be at least 2 characters'
'min_length' => 'Contact name must be at least 2 characters',
'regex_match' => 'Contact name is invalid Format'
]
],
@ -418,10 +468,10 @@ class MasterController extends AdminController
],
'email.*' => [
'rules' => 'required|valid_email',
'rules' => 'required|regex_match[/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/]',
'errors' => [
'required' => 'Email is required',
'valid_email' => 'Invalid email format'
'required' => 'Email address is required.',
'regex_match' => 'Please enter a valid email format (e.g., name@domain.com).'
]
],
@ -610,34 +660,34 @@ class MasterController extends AdminController
],
'state' => [
'rules' => 'required|is_natural_no_zero',
'errors' => [
'required' => 'State is required'
]
],
'district' => [
'rules' => 'required|trim',
'errors' => [
'required' => 'District is required'
]
],
'city' => [
'rules' => 'required|trim',
'errors' => [
'required' => 'City is required'
]
],
'pincode' => [
'rules' => 'required|numeric|exact_length[6]',
'errors' => [
'required' => 'Pincode is required',
'numeric' => 'Pincode must contain only numbers',
'exact_length' => 'Pincode must be exactly 6 digits'
]
],
'label' => 'State',
'rules' => 'required|regex_match[/^[a-zA-Z\s\-]+$/]',
'errors' => [
'required' => 'State is required.',
'regex_match' => 'State name can only contain letters, spaces, and hyphens.'
]
],
'district' => [
'rules' => 'required|regex_match[/^[a-zA-Z0-9\s\-]+$/]',
'errors' => [
'required' => 'District is required.',
'regex_match' => 'District can contain letters, numbers, spaces, and hyphens.'
]
],
'city' => [
'rules' => 'required|regex_match[/^[a-zA-Z0-9\s\-]+$/]',
'errors' => [
'regex_match' => 'City can contain letters, numbers, spaces, and hyphens.'
]
],
'pincode' => [
'rules' => 'required|numeric|exact_length[6]',
'errors' => [
'required' => 'Pincode is required.',
'numeric' => 'Pincode must be digits only.',
'exact_length' => 'Pincode must be exactly 6 digits.'
]
],
// ======================
// Contact Details (Array)
@ -658,10 +708,10 @@ class MasterController extends AdminController
],
'email.*' => [
'rules' => 'required|valid_email',
'rules' => 'required|regex_match[/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/]',
'errors' => [
'required' => 'Email is required',
'valid_email' => 'Invalid email format'
'required' => 'Email address is required.',
'regex_match' => 'Please enter a valid email format (e.g., name@domain.com).'
]
],
@ -1006,34 +1056,34 @@ class MasterController extends AdminController
],
'state' => [
'rules' => 'required|is_natural_no_zero',
'errors' => [
'required' => 'State is required'
]
],
'district' => [
'rules' => 'required|trim',
'errors' => [
'required' => 'District is required'
]
],
'city' => [
'rules' => 'required|trim',
'errors' => [
'required' => 'City is required'
]
],
'pincode' => [
'rules' => 'required|numeric|exact_length[6]',
'errors' => [
'required' => 'Pincode is required',
'numeric' => 'Pincode must contain only numbers',
'exact_length' => 'Pincode must be exactly 6 digits'
]
],
'label' => 'State',
'rules' => 'required|regex_match[/^[a-zA-Z\s\-]+$/]',
'errors' => [
'required' => 'State is required.',
'regex_match' => 'State name can only contain letters, spaces, and hyphens.'
]
],
'district' => [
'rules' => 'required|regex_match[/^[a-zA-Z0-9\s\-]+$/]',
'errors' => [
'required' => 'District is required.',
'regex_match' => 'District can contain letters, numbers, spaces, and hyphens.'
]
],
'city' => [
'rules' => 'required|regex_match[/^[a-zA-Z0-9\s\-]+$/]',
'errors' => [
'regex_match' => 'City can contain letters, numbers, spaces, and hyphens.'
]
],
'pincode' => [
'rules' => 'required|numeric|exact_length[6]',
'errors' => [
'required' => 'Pincode is required.',
'numeric' => 'Pincode must be digits only.',
'exact_length' => 'Pincode must be exactly 6 digits.'
]
],
// ======================
// Contact Details (Array)
@ -1054,10 +1104,10 @@ class MasterController extends AdminController
],
'email.*' => [
'rules' => 'required|valid_email',
'rules' => 'required|regex_match[/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/]',
'errors' => [
'required' => 'Email is required',
'valid_email' => 'Invalid email format'
'required' => 'Email address is required.',
'regex_match' => 'Please enter a valid email format (e.g., name@domain.com).'
]
],
@ -1319,35 +1369,34 @@ class MasterController extends AdminController
],
'state' => [
'rules' => 'required|is_natural_no_zero',
'errors' => [
'required' => 'State is required'
]
],
'district' => [
'rules' => 'required|trim',
'errors' => [
'required' => 'District is required'
]
],
'city' => [
'rules' => 'required|trim',
'errors' => [
'required' => 'City is required'
]
],
'pincode' => [
'rules' => 'required|numeric|exact_length[6]',
'errors' => [
'required' => 'Pincode is required',
'numeric' => 'Pincode must contain only numbers',
'exact_length' => 'Pincode must be exactly 6 digits'
]
],
'label' => 'State',
'rules' => 'required|regex_match[/^[a-zA-Z\s\-]+$/]',
'errors' => [
'required' => 'State is required.',
'regex_match' => 'State name can only contain letters, spaces, and hyphens.'
]
],
'district' => [
'rules' => 'required|regex_match[/^[a-zA-Z0-9\s\-]+$/]',
'errors' => [
'required' => 'District is required.',
'regex_match' => 'District can contain letters, numbers, spaces, and hyphens.'
]
],
'city' => [
'rules' => 'required|regex_match[/^[a-zA-Z0-9\s\-]+$/]',
'errors' => [
'regex_match' => 'City can contain letters, numbers, spaces, and hyphens.'
]
],
'pincode' => [
'rules' => 'required|numeric|exact_length[6]',
'errors' => [
'required' => 'Pincode is required.',
'numeric' => 'Pincode must be digits only.',
'exact_length' => 'Pincode must be exactly 6 digits.'
]
],
// ======================
// Contact Details (Array)
// ======================
@ -1367,10 +1416,10 @@ class MasterController extends AdminController
],
'email.*' => [
'rules' => 'required|valid_email',
'rules' => 'required|regex_match[/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/]',
'errors' => [
'required' => 'Email is required',
'valid_email' => 'Invalid email format'
'required' => 'Email address is required.',
'regex_match' => 'Please enter a valid email format (e.g., name@domain.com).'
]
],
@ -3518,10 +3567,10 @@ class MasterController extends AdminController
]
],
'email' => [
'rules' => 'required|valid_email',
'rules' => 'required|regex_match[/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/]',
'errors' => [
'required' => 'Email is required',
'valid_email' => 'Enter a valid email address'
'required' => 'Email address is required.',
'regex_match' => 'Please enter a valid email format (e.g., name@domain.com).'
]
],
'mobile' => [
@ -3539,28 +3588,28 @@ class MasterController extends AdminController
'min_length' => 'Address must be at least 5 characters'
]
],
'city' => [
'rules' => 'required|alpha_space',
'errors' => [
'required' => 'City is required',
'alpha_space' => 'City must contain only letters and spaces'
]
],
'state' => [
'rules' => 'required|alpha_space',
'errors' => [
'required' => 'State is required',
'alpha_space' => 'State must contain only letters and spaces'
]
],
'pincode' => [
'rules' => 'required|numeric|exact_length[6]',
'errors' => [
'required' => 'Pincode is required',
'numeric' => 'Pincode must contain only digits',
'exact_length' => 'Pincode must be exactly 6 digits'
]
],
'label' => 'State',
'rules' => 'required|regex_match[/^[a-zA-Z\s\-]+$/]',
'errors' => [
'required' => 'State is required.',
'regex_match' => 'State name can only contain letters, spaces, and hyphens.'
]
],
'city' => [
'rules' => 'required|regex_match[/^[a-zA-Z0-9\s\-]+$/]',
'errors' => [
'regex_match' => 'City can contain letters, numbers, spaces, and hyphens.'
]
],
'pincode' => [
'rules' => 'required|numeric|exact_length[6]',
'errors' => [
'required' => 'Pincode is required.',
'numeric' => 'Pincode must be digits only.',
'exact_length' => 'Pincode must be exactly 6 digits.'
]
],
'aadhar' => [
'rules' => 'required|numeric|exact_length[12]',
'errors' => [

View File

@ -1012,11 +1012,11 @@
'calc_policy_issue_date.*' => ['label' => 'Policy Issue Date', 'rules' => 'required','errors' => [ 'required' => 'Policy Issue Date is required' ]],
'co_share_per.*' => ['label' => 'Co-Share %', 'rules' => 'permit_empty|decimal','errors' => ['decimal' => 'Co-Share % must be a valid decimal.']],
'non_comm_per_amt.*' => ['label' => 'Non-Comm Premium', 'rules' => 'permit_empty|decimal','errors' => ['decimal' => 'Amount must be numeric.']],
'base_premium.*' => ['label' => 'Base Premium', 'rules' => 'required|numeric|differs[0]','errors' => [
'required' => 'Base Premium is required.',
'numeric' => 'Base Premium must be a valid number.',
'differs' => 'Base Premium cannot be zero; please enter a positive or negative value.'
]],
'base_premium.*' => ['label' => 'Base Premium', 'rules' => 'permit_empty|regex_match[/^-?\d+(\.\d+)?$/]|differs[0]',
'errors' => [
'regex_match' => 'Base Premium must be a valid positive or negative number.',
'differs' => 'Base Premium cannot be zero.'
]],
'tp_premium.*' => ['label' => 'TP Premium', 'rules' => 'permit_empty|decimal','errors' => ['decimal' => 'TP Premium must be numeric.']],
'ter_premium.*' => ['label' => 'TEP Premium', 'rules' => 'permit_empty|decimal','errors' => ['decimal' => 'TEP Premium must be numeric.']],
'co_premium.*' => ['label' => 'Co-Premium', 'rules' => 'permit_empty|decimal','errors'=> ['decimal' => 'Co-Premium must be numeric.']],
@ -2482,11 +2482,10 @@
],
'base_premium.*' => [
'label' => 'Base Premium',
'rules' => 'required|numeric|differs[0]',
'errors' => [
'required' => 'Base Premium is required.',
'numeric' => 'Base Premium must be a valid number.',
'differs' => 'Base Premium cannot be zero; please enter a positive or negative value.'
'rules' => 'permit_empty|regex_match[/^-?\d+(\.\d+)?$/]|differs[0]',
'errors' => [
'regex_match' => 'Base Premium must be a valid positive or negative number.',
'differs' => 'Base Premium cannot be zero.'
]
],
'total.*' => [

View File

@ -89,10 +89,10 @@ class ThzController extends BaseController
],
'email' => [
'rules' => 'required|valid_email|max_length[150]',
'rules' => 'required|regex_match[/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/]',
'errors' => [
'required' => 'Email is required',
'valid_email' => 'Please enter a valid email address'
'required' => 'Email address is required.',
'regex_match' => 'Please enter a valid email format (e.g., name@domain.com).'
]
],

View File

@ -1135,20 +1135,47 @@ class TicketController extends BaseController
if ($selected_ticket_type == 1 || $selected_ticket_type == 72) {
$rules = [
// --- EMPLOYEE DETAILS ---
'emp_code' => ['label' => 'Employee Code','rules' => 'required|alpha_numeric_space',
'errors' => ['required' => 'Employee Code is required']
'emp_code' => [
'label' => 'Employee ID',
'rules' => 'required|min_length[2]|max_length[20]|regex_match[/^[a-zA-Z0-9_-]+$/]',
'errors' => [
'required' => 'Employee ID is required.',
'regex_match' => 'Employee ID cannot contain spaces or special characters (only letters, numbers, hyphens and underscores. allowed).'
]
],
'emp_name' => ['label' => 'Employee Name','rules' => 'required|min_length[3]',
'errors' => ['required' => 'Employee Name is required','min_length' => 'Employee Name must be at least 3 characters long']
'emp_name' => [
'label' => 'Employee Name',
'rules' => 'required|min_length[3]|regex_match[/^[a-zA-Z0-9\s_-]+$/]',
'errors' => [
'required' => 'Employee Name is required',
'min_length' => 'Employee Name must be at least 3 characters long',
'regex_match' => 'Employee Name can only contain letters, numbers, spaces, hyphens, and underscores.'
]
],
'insured_name' => ['label' => 'Insured Name','rules' => 'required',
'errors' => ['required' => 'Insured Name is required']
'insured_name' => [
'label' => 'Insured Name',
'rules' => 'required|min_length[3]|regex_match[/^[a-zA-Z0-9\s_-]+$/]',
'errors' => [
'required' => 'Insured Name is required',
'min_length' => 'Insured Name must be at least 3 characters long',
'regex_match' => 'Insured Name can only contain letters, numbers, spaces, hyphens, and underscores.'
]
],
'relationship' => ['label' => 'Relationship','rules' => 'required',
'errors' => ['required' => 'Please select a Relationship']
],
'policy_no' => ['label' => 'Policy No','rules' => 'permit_empty','errors' => []],
'tpa_no' => ['label' => 'TPA ID','rules' => 'permit_empty','errors' => []],
'policy_no' => [
'label' => 'Policy Number',
// Allows: A-Z, a-z, 0-9, spaces (\s), hyphens (\-), underscores (_), and slashes (\/)
'rules' => 'permit_empty|min_length[3]|max_length[50]|regex_match[/^[a-zA-Z0-9\s\-\/_]+$/]',
'errors' => [
'min_length' => 'Policy Number appears too short (min 5 characters).',
'regex_match' => 'Policy Number can only contain letters, numbers, spaces, hyphens(-) underscores(_), and slashes(/).'
]
],
'tpa_no' => ['label' => 'TPA ID','rules' => 'permit_empty|regex_match[/^[a-zA-Z0-9]+$/]','errors' => [
'regex_match' => 'TPA ID can only contain letters and numbers.'
]],
'emp_mobile' => ['label' => 'Employee Mobile No','rules' => 'required|numeric|exact_length[10]',
'errors' => [
'required' => 'Mobile number is required',
@ -1156,11 +1183,18 @@ class TicketController extends BaseController
'exact_length' => 'Mobile must be exactly 10 digits'
]
],
'emp_mail' => ['label' => 'Employee Mail ID','rules' => 'required|valid_email',
'errors' => ['required' => 'Employee Email is required','valid_email' => 'Please provide a valid email address']
'emp_mail' => ['label' => 'Employee Mail ID',
'rules' => 'required|regex_match[/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/]',
'errors' => [
'required' => 'Employee Email address is required.',
'regex_match' => 'Please enter a valid email format (e.g., name@domain.com).'
]
],
'emp_personal_mail' => ['label' => 'Personal Mail ID','rules' => 'permit_empty|valid_email',
'errors' => ['valid_email' => 'Personal email format is invalid']
'emp_personal_mail' => ['label' => 'Personal Mail ID',
'rules' => 'permit_empty|regex_match[/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/]',
'errors' => [
'regex_match' => 'Please enter a valid email format (e.g., name@domain.com).'
]
],
'client_policy_id' => ['label' => 'Policy','rules' => 'required',
'errors' => ['required' => 'Please select a Policy']
@ -1188,15 +1222,29 @@ class TicketController extends BaseController
'hospital_address' => ['label' => 'Hospital Address','rules' => 'required',
'errors' => ['required' => 'Hospital Address is required']
],
'hospital_city' => ['label' => 'Hospital City','rules' => 'required',
'errors' => ['required' => 'City is required']
],
'hospital_state' => ['label' => 'Hospital State','rules' => 'required',
'errors' => ['required' => 'State is required']
],
'hospital_pin_code' => ['label' => 'Hospital Pincode','rules' => 'required|numeric|exact_length[6]',
'errors' => ['exact_length' => 'Pincode must be 6 digits']
],
'hospital_state' => [
'label' => 'hospital_State',
'rules' => 'required|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\-]+$/]',
'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]',
'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]',
'errors' => ['min_length' => 'Phone number too short']
],
@ -1258,15 +1306,20 @@ class TicketController extends BaseController
'insurer_id' => ['label' => 'Insurer ID','rules' => 'required',
'errors' => ['required' => 'Insurer data is missing. Please re-select the policy.']
],
'emp_mobile' => ['label' => 'Mobile No','rules' => 'permit_empty|numeric|exact_length[10]',
'errors' => ['numeric' => 'Mobile number must contain only digits.',
'exact_length' => 'Mobile number must be exactly 10 digits.'
'emp_mobile' => ['label' => 'Employee Mobile No','rules' => 'required|numeric|exact_length[10]',
'errors' => [
'required' => 'Mobile number is required',
'numeric' => 'Mobile must contain only numbers',
'exact_length' => 'Mobile must be exactly 10 digits'
]
],
'emp_mail' => ['label' => 'Mail ID','rules' => 'permit_empty|valid_email',
'errors' => ['valid_email' => 'Please provide a valid email address format.']
'emp_mail' => ['label' => 'Employee Mail ID',
'rules' => 'required|regex_match[/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/]',
'errors' => [
'required' => 'Employee Email address is required.',
'regex_match' => 'Please enter a valid email format (e.g., name@domain.com).'
]
],
// --- CLAIM DETAILS ---
'ticket_type_id' => ['label' => 'Policy Type','rules' => 'required','errors' => ['required' => 'Policy Type is required.']],
'claim_status_id' => ['label' => 'Status','rules' => 'required','errors' => ['required' => 'Status is required.']],
@ -1278,24 +1331,42 @@ class TicketController extends BaseController
} else {
$rules = [
// --- EMPLOYEE DETAILS ---
'emp_code' => ['label' => 'Employee ID', 'rules' => 'required',
'errors' => ['required' => 'Employee Code is required']
'emp_code' => [
'label' => 'Employee ID',
'rules' => 'required|min_length[2]|max_length[20]|regex_match[/^[a-zA-Z0-9_-]+$/]',
'errors' => [
'required' => 'Employee ID is required.',
'regex_match' => 'Employee ID cannot contain spaces or special characters (only letters, numbers, hyphens and underscores. allowed).',
]
],
'emp_name' => ['label' => 'Employee Name','rules' => 'required|min_length[3]',
'errors' => ['required' => 'Employee Name is required','min_length' => 'Employee Name must be at least 3 characters long']
'emp_name' => [
'label' => 'Employee Name',
'rules' => 'required|min_length[3]|regex_match[/^[a-zA-Z0-9\s_-]+$/]',
'errors' => [
'required' => 'Employee Name is required',
'min_length' => 'Employee Name must be at least 3 characters long',
'regex_match' => 'Employee Name can only contain letters, numbers, spaces, hyphens, and underscores.'
]
],
'emp_mobile' => ['label' => 'Mobile No','rules' => 'required|numeric|exact_length[10]',
'emp_mobile' => ['label' => 'Employee Mobile No','rules' => 'required|numeric|exact_length[10]',
'errors' => [
'required' => 'Mobile number is required',
'numeric' => 'Mobile must be digits only',
'numeric' => 'Mobile must contain only numbers',
'exact_length' => 'Mobile must be exactly 10 digits'
]
],
'emp_mail' => ['label' => 'Mail ID','rules' => 'required|valid_email',
'errors' => ['required' => 'Official email is required','valid_email' => 'Please provide a valid official email']
'emp_mail' => ['label' => 'Employee Mail ID',
'rules' => 'required|regex_match[/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/]',
'errors' => [
'required' => 'Employee Email address is required.',
'regex_match' => 'Please enter a valid email format (e.g., name@domain.com).'
]
],
'emp_personal_mail' => ['label' => 'Personal Mail','rules' => 'permit_empty|valid_email',
'errors' => ['valid_email' => 'Personal email format is invalid']
'emp_personal_mail' => ['label' => 'Personal Mail ID',
'rules' => 'permit_empty|regex_match[/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/]',
'errors' => [
'regex_match' => 'Please enter a valid email format (e.g., name@domain.com).'
]
],
'client_policy_id' => ['label' => 'Policy','rules' => 'required','errors' => ['required' => 'Please select a Policy']],
'acm_id' => ['label' => 'Account Manager','rules' => 'required','errors' => ['required' => 'Account Manager must be selected']],
@ -1399,20 +1470,47 @@ class TicketController extends BaseController
if ($selected_ticket_type == 1 || $selected_ticket_type == 72) {
$rules = [
// --- EMPLOYEE DETAILS ---
'emp_code' => ['label' => 'Employee Code','rules' => 'required|alpha_numeric_space',
'errors' => ['required' => 'Employee Code is required']
'emp_code' => [
'label' => 'Employee ID',
'rules' => 'required|min_length[2]|max_length[20]|regex_match[/^[a-zA-Z0-9_-]+$/]',
'errors' => [
'required' => 'Employee ID is required.',
'regex_match' => 'Employee ID cannot contain spaces or special characters (only letters, numbers, hyphens and underscores. allowed).',
]
],
'emp_name' => ['label' => 'Employee Name','rules' => 'required|min_length[3]',
'errors' => ['required' => 'Employee Name is required','min_length' => 'Employee Name must be at least 3 characters long']
'emp_name' => [
'label' => 'Employee Name',
'rules' => 'required|min_length[3]|regex_match[/^[a-zA-Z0-9\s_-]+$/]',
'errors' => [
'required' => 'Employee Name is required',
'min_length' => 'Employee Name must be at least 3 characters long',
'regex_match' => 'Employee Name can only contain letters, numbers, spaces, hyphens, and underscores.'
]
],
'insured_name' => ['label' => 'Insured Name','rules' => 'required',
'errors' => ['required' => 'Insured Name is required']
'insured_name' => [
'label' => 'Insured Name',
'rules' => 'required|min_length[3]|regex_match[/^[a-zA-Z0-9\s_-]+$/]',
'errors' => [
'required' => 'Insured Name is required',
'min_length' => 'Insured Name must be at least 3 characters long',
'regex_match' => 'Insured Name can only contain letters, numbers, spaces, hyphens, and underscores.'
]
],
'relationship' => ['label' => 'Relationship','rules' => 'required',
'errors' => ['required' => 'Please select a Relationship']
],
'policy_no' => ['label' => 'Policy No','rules' => 'permit_empty','errors' => []],
'tpa_no' => ['label' => 'TPA ID','rules' => 'permit_empty','errors' => []],
'policy_no' => [
'label' => 'Policy Number',
// Allows: A-Z, a-z, 0-9, spaces (\s), hyphens (\-), underscores (_), and slashes (\/)
'rules' => 'permit_empty|min_length[3]|max_length[50]|regex_match[/^[a-zA-Z0-9\s\-\/_]+$/]',
'errors' => [
'min_length' => 'Policy Number appears too short (min 3 characters).',
'regex_match' => 'Policy Number can only contain letters, numbers, spaces, hyphens(-) underscores(_), and slashes(/).'
]
],
'tpa_no' => ['label' => 'TPA ID','rules' => 'permit_empty|regex_match[/^[a-zA-Z0-9]+$/]','errors' => [
'regex_match' => 'TPA ID can only contain letters and numbers.'
]],
'emp_mobile' => ['label' => 'Employee Mobile No','rules' => 'required|numeric|exact_length[10]',
'errors' => [
'required' => 'Mobile number is required',
@ -1420,11 +1518,18 @@ class TicketController extends BaseController
'exact_length' => 'Mobile must be exactly 10 digits'
]
],
'emp_mail' => ['label' => 'Employee Mail ID','rules' => 'required|valid_email',
'errors' => ['required' => 'Employee Email is required','valid_email' => 'Please provide a valid email address']
'emp_mail' => ['label' => 'Employee Mail ID',
'rules' => 'required|regex_match[/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/]',
'errors' => [
'required' => 'Employee Email address is required.',
'regex_match' => 'Please enter a valid email format (e.g., name@domain.com).'
]
],
'emp_personal_mail' => ['label' => 'Personal Mail ID','rules' => 'permit_empty|valid_email',
'errors' => ['valid_email' => 'Personal email format is invalid']
'emp_personal_mail' => ['label' => 'Personal Mail ID',
'rules' => 'permit_empty|regex_match[/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/]',
'errors' => [
'regex_match' => 'Please enter a valid email format (e.g., name@domain.com).'
]
],
'client_policy_id' => ['label' => 'Policy','rules' => 'required',
'errors' => ['required' => 'Please select a Policy']
@ -1522,15 +1627,20 @@ class TicketController extends BaseController
'insurer_id' => ['label' => 'Insurer ID','rules' => 'required',
'errors' => ['required' => 'Insurer data is missing. Please re-select the policy.']
],
'emp_mobile' => ['label' => 'Mobile No','rules' => 'permit_empty|numeric|exact_length[10]',
'errors' => ['numeric' => 'Mobile number must contain only digits.',
'exact_length' => 'Mobile number must be exactly 10 digits.'
'emp_mobile' => ['label' => 'Employee Mobile No','rules' => 'required|numeric|exact_length[10]',
'errors' => [
'required' => 'Mobile number is required',
'numeric' => 'Mobile must contain only numbers',
'exact_length' => 'Mobile must be exactly 10 digits'
]
],
'emp_mail' => ['label' => 'Mail ID','rules' => 'permit_empty|valid_email',
'errors' => ['valid_email' => 'Please provide a valid email address format.']
'emp_mail' => ['label' => 'Employee Mail ID',
'rules' => 'required|regex_match[/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/]',
'errors' => [
'required' => 'Employee Email address is required.',
'regex_match' => 'Please enter a valid email format (e.g., name@domain.com).'
]
],
// --- CLAIM DETAILS ---
'ticket_type_id' => ['label' => 'Policy Type','rules' => 'required','errors' => ['required' => 'Policy Type is required.']],
'claim_status_id' => ['label' => 'Status','rules' => 'required','errors' => ['required' => 'Status is required.']],
@ -1542,24 +1652,42 @@ class TicketController extends BaseController
} else {
$rules = [
// --- EMPLOYEE DETAILS ---
'emp_code' => ['label' => 'Employee ID', 'rules' => 'required',
'errors' => ['required' => 'Employee Code is required']
'emp_code' => [
'label' => 'Employee ID',
'rules' => 'required|min_length[2]|max_length[20]|regex_match[/^[a-zA-Z0-9_-]+$/]',
'errors' => [
'required' => 'Employee ID is required.',
'regex_match' => 'Employee ID cannot contain spaces or special characters (only letters, numbers, hyphens and underscores. allowed).',
]
],
'emp_name' => ['label' => 'Employee Name','rules' => 'required|min_length[3]',
'errors' => ['required' => 'Employee Name is required','min_length' => 'Employee Name must be at least 3 characters long']
'emp_name' => [
'label' => 'Employee Name',
'rules' => 'required|min_length[3]|regex_match[/^[a-zA-Z0-9\s_-]+$/]',
'errors' => [
'required' => 'Employee Name is required',
'min_length' => 'Employee Name must be at least 3 characters long',
'regex_match' => 'Employee Name can only contain letters, numbers, spaces, hyphens, and underscores.'
]
],
'emp_mobile' => ['label' => 'Mobile No','rules' => 'required|numeric|exact_length[10]',
'emp_mobile' => ['label' => 'Employee Mobile No','rules' => 'required|numeric|exact_length[10]',
'errors' => [
'required' => 'Mobile number is required',
'numeric' => 'Mobile must be digits only',
'numeric' => 'Mobile must contain only numbers',
'exact_length' => 'Mobile must be exactly 10 digits'
]
],
'emp_mail' => ['label' => 'Mail ID','rules' => 'required|valid_email',
'errors' => ['required' => 'Official email is required','valid_email' => 'Please provide a valid official email']
'emp_mail' => ['label' => 'Employee Mail ID',
'rules' => 'required|regex_match[/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/]',
'errors' => [
'required' => 'Employee Email address is required.',
'regex_match' => 'Please enter a valid email format (e.g., name@domain.com).'
]
],
'emp_personal_mail' => ['label' => 'Personal Mail','rules' => 'permit_empty|valid_email',
'errors' => ['valid_email' => 'Personal email format is invalid']
'emp_personal_mail' => ['label' => 'Personal Mail ID',
'rules' => 'permit_empty|regex_match[/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/]',
'errors' => [
'regex_match' => 'Please enter a valid email format (e.g., name@domain.com).'
]
],
'client_policy_id' => ['label' => 'Policy','rules' => 'required','errors' => ['required' => 'Please select a Policy']],
'acm_id' => ['label' => 'Account Manager','rules' => 'required','errors' => ['required' => 'Account Manager must be selected']],
@ -1813,8 +1941,11 @@ class TicketController extends BaseController
$rules = [
'emp_mail' => [
'label' => 'To',
'rules' => 'required|valid_email',
'errors' => ['required' => 'Recipient email is missing.','valid_email' => 'Please provide a valid email address for the recipient.']
'rules' => 'required|regex_match[/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/]',
'errors' => [
'required' => 'Email address is required.',
'regex_match' => 'Please enter a valid email format (e.g., name@domain.com).'
]
],
'mail_subject' => [
'label' => 'Subject',
@ -1823,11 +1954,6 @@ class TicketController extends BaseController
'required' => 'Please enter a Subject for the mail.',
'min_length' => 'Subject should be at least 5 characters long.'
]
],
'content' => [
'label' => 'Mail Content',
'rules' => 'required',
'errors' => ['required' => 'You cannot send an empty mail.']
]
];
@ -3509,6 +3635,160 @@ class TicketController extends BaseController
// -------- END CLAIM DUMP UPLOAD ----------------------------------------------------------------------------------------------
public function saveIRDocsJson()
{
// -----------------------------------------------------
// 1) GET INPUT
// -----------------------------------------------------
$request_data = $this->request->getPost();
$data = sanitizeInputArrayAdvanced($request_data);
$ticket_id = $data['ticket_id'] ?? '';
$required_docs = $data['required_docs'] ?? '';
// -----------------------------------------------------
// 2) BASIC VALIDATION (CI4)
// -----------------------------------------------------
$rules = [
'ticket_id' => [
'label' => 'Ticket ID',
'rules' => 'required|numeric',
'errors' => [
'required' => 'System could not identify the Number.',
'numeric' => 'Invalid format.'
]
],
'required_docs' => [
'label' => 'Required Documents',
'rules' => 'required',
'errors' => [
'required' => 'Document data is required'
]
]
];
if (!$this->validate($rules)) {
return $this->response->setStatusCode(400)->setJSON([
'status' => false,
'message' => 'Input validation failed',
'code' => 400,
'errors' => $this->validator->getErrors()
]);
}
// -----------------------------------------------------
// 3) VALIDATE JSON FORMAT
// -----------------------------------------------------
$docsArray = json_decode($required_docs, true);
if (json_last_error() !== JSON_ERROR_NONE) {
return $this->response->setStatusCode(400)->setJSON([
'status' => false,
'message' => 'Input validation failed',
'code' => 400,
'errors' => [
'required_docs' => 'Invalid JSON format'
]
]);
}
// -----------------------------------------------------
// 4) VALIDATE JSON STRUCTURE
// -----------------------------------------------------
if (!isset($docsArray['docs']) || !is_array($docsArray['docs'])) {
return $this->response->setStatusCode(400)->setJSON([
'status' => false,
'message' => 'Input validation failed',
'code' => 400,
'errors' => [
'required_docs' => 'Invalid document structure'
]
]);
}
// -----------------------------------------------------
// 5) VALIDATE EACH DOCUMENT NAME
// -----------------------------------------------------
foreach ($docsArray['docs'] as $index => $doc) {
// Check document_name exists
if (!isset($doc['document_name'])) {
return $this->response->setStatusCode(400)->setJSON([
'status' => false,
'code' => 400,
'message' => 'Input validation failed',
'errors' => [
'required_docs' =>
"Document name missing at row " . ($index + 1)
]
]);
}
// YOUR REQUIRED REGEX RULE
if (!preg_match('/^[a-zA-Z0-9_\- ]+$/', $doc['document_name'])) {
return $this->response->setStatusCode(400)->setJSON([
'status' => false,
'code' => 400,
'message' => 'Input validation failed',
'errors' => [
'required_docs' =>
"Document name '{$doc['document_name']}' can only contain letters, numbers, hyphens and underscores"
]
]);
}
// Check document_received exists
if (!array_key_exists('document_received', $doc)) {
return $this->response->setStatusCode(400)->setJSON([
'status' => false,
'code' => 400,
'message' => 'Input validation failed',
'errors' => [
'required_docs' =>
"document_received key missing at row " . ($index + 1)
]
]);
}
}
// -----------------------------------------------------
// 6) EXTRA SAFETY CHECKS
// -----------------------------------------------------
if (empty($ticket_id) || empty($required_docs)) {
return $this->respond([
'status' => false,
'code' => 404,
'message' => 'Failed to save Docs'
], 200);
}
// -----------------------------------------------------
// 7) UPDATE DATABASE
// -----------------------------------------------------
db_connect()->query(
"UPDATE ticket_master SET required_docs = ? WHERE id = ?",
[$required_docs, $ticket_id]
);
// -----------------------------------------------------
// 8) RETURN UPDATED DATA
// -----------------------------------------------------
$saved = $this->ticketMasterModel
->select('required_docs')
->where('id', $ticket_id)
->first();
$savedDocs = json_decode($saved['required_docs'] ?? '{}', true) ?? [];
return $this->respond([
'status' => true,
'code' => 200,
'message' => 'IR docs saved successfully',
'data' => $savedDocs
], 200);
}
public function saveIRDocsJson_old()
{
$request_data = $this->request->getPost();
$data = sanitizeInputArrayAdvanced($request_data);

View File

@ -139,10 +139,10 @@ class UserController extends AdminController
// Email
// ======================
'email' => [
'rules' => 'required|valid_email',
'rules' => 'required|regex_match[/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/]',
'errors' => [
'required' => 'Email is required',
'valid_email' => 'Please enter a valid email address',
'required' => 'Email address is required.',
'regex_match' => 'Please enter a valid email format (e.g., name@domain.com).'
]
],
@ -323,10 +323,10 @@ class UserController extends AdminController
// Email
// ======================
'email' => [
'rules' => 'required|valid_email',
'rules' => 'required|regex_match[/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/]',
'errors' => [
'required' => 'Email is required',
'valid_email' => 'Please enter a valid email address',
'required' => 'Email address is required.',
'regex_match' => 'Please enter a valid email format (e.g., name@domain.com).'
]
],
@ -829,10 +829,10 @@ class UserController extends AdminController
// Email
// ======================
'email' => [
'rules' => 'required|valid_email',
'rules' => 'required|regex_match[/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/]',
'errors' => [
'required' => 'Email is required',
'valid_email' => 'Please enter a valid email address',
'required' => 'Email address is required.',
'regex_match' => 'Please enter a valid email format (e.g., name@domain.com).'
]
],
// ======================

View File

@ -836,9 +836,9 @@ class VidalApiController extends BaseController
// log_message('error', "✅ Match found: emp_code={$row['empNo']} policy={$row['policyNumber']}");
$sql = "UPDATE employee_polices
SET tpa_id = ?
WHERE id = ?";
$this->db->query($sql, [$row['enrollmentId'], $policy_data['emp_policy_id']]);
SET tpa_id = :tpa_id:,
WHERE id = :emp_policy_id:";
$this->db->query($sql, ["tpa_id"=>$row['enrollmentId'], "emp_policy_id"=>$policy_data['emp_policy_id']]);
// for e-card send
if(strtolower(trim($policy_data['relationship'])) == 'self'){

View File

@ -1114,9 +1114,9 @@ class EmployeePolicyModel extends Model
public function getDeletionEmployeeDataForExportExcel($ref_data, $return_type = 0)
{
$client_id = $ref_data['client_id'];
$client_policy_id = $ref_data['client_policy_id'];
$client_branch_id = $ref_data['client_branch_id'];
$client_id = (string) "'".$ref_data['client_id']."'";
$client_policy_id = (string) "'".$ref_data['client_policy_id']."'";
$client_branch_id = (string) "'".$ref_data['client_branch_id']."'";
$insurer_or_tpa = $ref_data['insurer_or_tpa'];
$get_insurer_id_from_client_policy = $this->db->table('client_policy')
@ -1929,6 +1929,8 @@ class EmployeePolicyModel extends Model
public function getDeletionDataForTruncated($file_id)
{
$file_id = (int)$file_id;
// Fetch the necessary details in a single query using JOINs
$result = $this->db->table('files f')
->select('i.deletion_add_day')
@ -2064,6 +2066,8 @@ class EmployeePolicyModel extends Model
$action = "da";
}
$file_id = (int)$file_id;
$query = $this->db->query("
SELECT
@ -2086,6 +2090,7 @@ class EmployeePolicyModel extends Model
// dd($this->db->getLastQuery(), $result);
// dd($result);
return $result[0];
}
@ -2096,6 +2101,8 @@ class EmployeePolicyModel extends Model
log_message('error', 'updateEmployeePolicyTruncateReverse model function called');
log_message('error', 'FILE ID : {data}', ['data' => $file_id]);
$file_id = (int)$file_id;
$this->db->query("
UPDATE employee_polices
SET
@ -2137,6 +2144,9 @@ class EmployeePolicyModel extends Model
//calculate the CD Transaction sum of the amount for the inception, addition, dependent addition, missed inception
public function calculateCdTranctionAmount($file_id)
{
$file_id = (int)$file_id;
$query = $this->db->query("
SELECT

View File

@ -73,6 +73,6 @@ class MessageModel extends Model
$query = $builder->get();
return $query->getResult();
dd($this->db->getLastQuery());
// dd($this->db->getLastQuery());
}
}

View File

@ -2432,6 +2432,9 @@
return $result;
}
//not in use function due to complexity of query and union, so writing raw query with bindings to avoid sql injection
public function getBDSReportListSingleUnion($start_date = 0, $end_date = 0, $client_id = 0, $insurer_id = 0, $policy_type_id = 0, $date_type = 0, $issuer = 0, $client_branch_id = 0, $insurer_branch_id = 0, $client_policy_id = 0, $user_id = 0, $where = [])
{
@ -3015,6 +3018,15 @@
public function getBDSReportList($start_date = 0, $end_date = 0, $client_id = 0, $insurer_id = 0, $policy_type_id = 0, $date_type = 0, $issuer = 0, $client_branch_id = 0, $insurer_branch_id = 0, $client_policy_id = 0, $user_id = 0, $where = [])
{
$client_id = (int)$client_id;
$insurer_id = (int)$insurer_id;
$policy_type_id = (int)$policy_type_id;
$client_branch_id = (int)$client_branch_id;
$insurer_branch_id = (int)$insurer_branch_id;
$client_policy_id = (int)$client_policy_id;
$user_id = (int)$user_id;
$issuer = (int)$issuer;
$whereAdded = false;
$statement_month_condition = '';
if ($date_type == 'statement_month' && $start_date != 0 && $end_date != 0) {
@ -3689,6 +3701,8 @@
";
$query = $this->db->query($sql);
$result = $query->getResultArray();
// $countofalldata = count($result);
// dd($result);
// dd($this->db->getLastQuery()->getQuery());

View File

@ -664,9 +664,13 @@ class TicketMasterModel extends Model
// Execute the query
$binds = ["start_date"=>$start_date,"end_date"=>$end_date];
// Merge policy_type binds if present
if (!empty($statusBinds)) {
$binds = array_merge($binds, $statusBinds);
}
$result = $this->db->query($sql, $binds)->getResultArray();
// print_rr($result);die();
// print_rr(count(($result)));
// print_rr($this->db->lastQuery);die();
return $result;
}
@ -729,8 +733,13 @@ class TicketMasterModel extends Model
";
$binds = ["start_date"=>$start_date,"end_date"=>$end_date];
// Merge policy_type binds if present
if (!empty($statusBinds)) {
$binds = array_merge($binds, $statusBinds);
}
$result = $this->db->query($sql,$binds)->getResultArray();
// print_rr(count(($result)));
// print_rr($this->db->lastQuery);die();
return $result;
} else {
$ticket_type_data_1 = "";
@ -804,8 +813,13 @@ class TicketMasterModel extends Model
$binds = ["start_date"=>$start_date,"end_date"=>$end_date];
// Execute the query
$result = $this->db->query($sql,$binds)->getResultArray();
// Merge policy_type binds if present
if (!empty($statusBinds)) {
$binds = array_merge($binds, $statusBinds);
}
$result = $this->db->query($sql,$binds)->getResultArray();
// print_rr($this->db->lastQuery);die();
return $result;

View File

@ -67,12 +67,12 @@
<div class="form-row">
<div class="form-group col-md-6">
<label for="mobile">CD Account Number<span class="text-danger">*</span></label>
<input type="text" class="form-control" id="cd_ac_no_for_cd_master" name="cd_ac_no" required>
<input type="text" class="form-control" id="cd_ac_no_for_cd_master" name="cd_ac_no" onkeypress="return onlyNumbers(event)" required data-parsley-type="digits">
</div>
<div class="form-group col-md-6">
<label for="mobile">Opening Amount<span class="text-danger">*</span></label>
<input type="text" class="form-control" id="opening_bal" name="opening_bal" onkeypress="return onlyNumbers(event)" required>
<input type="text" class="form-control" id="opening_bal" name="opening_bal" onkeypress="return onlyNumbers(event)" required data-parsley-type="digits">
</div>
</div>

View File

@ -165,7 +165,32 @@
console.error(status, error);
$('.loader').fadeOut();
$('.loader-mask').delay(350).fadeOut('slow');
toastr.warning('Something Wrong!', 'Warning');
if (xhr.status === 400) {
let response = JSON.parse(xhr.responseText);
let errorMessages = "";
let seenMessages = []; // Array to store unique messages
if (response.errors) {
$.each(response.errors, function (field, message) {
if (!seenMessages.includes(message)) {
errorMessages += `• ${message}<br>`;
seenMessages.push(message); // Mark this message as "seen"
}
});
toastr.error(errorMessages, 'Validation Error', { "allowHtml": true });
} else {
toastr.warning(response.message || 'Validation failed', 'Warning');
}
} else if (xhr.status === 403) {
let response = JSON.parse(xhr.responseText);
toastr.error(response.message, 'Security Policy');
} else if (xhr.status === 404) {
toastr.warning('Resource not found', 'Warning');
} else if (xhr.status === 500) {
toastr.error('Something went wrong . Please try again later.', 'Server Error');
} else {
toastr.error('An unexpected error occurred. Please try again later.', 'Error');
}
}
});
});
@ -221,7 +246,31 @@
console.error(status, error);
$('.loader').fadeOut();
$('.loader-mask').delay(350).fadeOut('slow');
toastr.warning('Something Wrong!', 'Warning');
if (xhr.status === 400) {
let response = JSON.parse(xhr.responseText);
let errorMessages = "";
let seenMessages = []; // Array to store unique messages
if (response.errors) {
$.each(response.errors, function (field, message) {
if (!seenMessages.includes(message)) {
errorMessages += `• ${message}<br>`;
seenMessages.push(message); // Mark this message as "seen"
}
});
toastr.error(errorMessages, 'Validation Error', { "allowHtml": true });
} else {
toastr.warning(response.message || 'Validation failed', 'Warning');
}
} else if (xhr.status === 403) {
let response = JSON.parse(xhr.responseText);
toastr.error(response.message, 'Security Policy');
} else if (xhr.status === 404) {
toastr.warning('Resource not found', 'Warning');
} else if (xhr.status === 500) {
toastr.error('Something went wrong . Please try again later.', 'Server Error');
} else {
toastr.error('An unexpected error occurred. Please try again later.', 'Error');
}
}
});

View File

@ -158,7 +158,33 @@ $(document).ready(function(){
setTimeout(function() {
$('.loader').fadeOut();
$('.loader-mask').delay(350).fadeOut('slow');
console.log('Something Wrong!', 'warning'); }, 1000);
if (xhr.status === 400) {
let response = JSON.parse(xhr.responseText);
let errorMessages = "";
let seenMessages = []; // Array to store unique messages
if (response.errors) {
$.each(response.errors, function (field, message) {
if (!seenMessages.includes(message)) {
errorMessages += `• ${message}<br>`;
seenMessages.push(message); // Mark this message as "seen"
}
});
toastr.error(errorMessages, 'Validation Error', { "allowHtml": true });
} else {
toastr.warning(response.message || 'Validation failed', 'Warning');
}
} else if (xhr.status === 403) {
let response = JSON.parse(xhr.responseText);
toastr.error(response.message, 'Security Policy');
} else if (xhr.status === 404) {
toastr.warning('Resource not found', 'Warning');
} else if (xhr.status === 500) {
toastr.error('Something went wrong . Please try again later.', 'Server Error');
} else {
toastr.error('An unexpected error occurred. Please try again later.', 'Error');
}
}, 1000);
}
});

View File

@ -88,7 +88,31 @@ $(document).ready(function () {
setTimeout(function() {
$('.loader').fadeOut();
$('.loader-mask').delay(350).fadeOut('slow');
toastr.warning('Something Wrong!', 'Warning');
if (xhr.status === 400) {
let response = JSON.parse(xhr.responseText);
let errorMessages = "";
let seenMessages = []; // Array to store unique messages
if (response.errors) {
$.each(response.errors, function (field, message) {
if (!seenMessages.includes(message)) {
errorMessages += `• ${message}<br>`;
seenMessages.push(message); // Mark this message as "seen"
}
});
toastr.error(errorMessages, 'Validation Error', { "allowHtml": true });
} else {
toastr.warning(response.message || 'Validation failed', 'Warning');
}
} else if (xhr.status === 403) {
let response = JSON.parse(xhr.responseText);
toastr.error(response.message, 'Security Policy');
} else if (xhr.status === 404) {
toastr.warning('Resource not found', 'Warning');
} else if (xhr.status === 500) {
toastr.error('Something went wrong . Please try again later.', 'Server Error');
} else {
toastr.error('An unexpected error occurred. Please try again later.', 'Error');
}
}, 1000);
}
});

View File

@ -383,12 +383,23 @@
let $label = $('#employee_data_points_label');
let $input = $('#emp_mobile_number_for_claim');
// Remove old attributes but DO NOT clear the .val()
$input.removeAttr('onkeypress maxlength oninput');
if (value == "mobile") {
$label.text('Employee Mobile Number');
$input.attr('onkeypress', 'return onlyNumbers(event)').attr('maxlength', '10');
$input.val($input.val().replace(/[^0-9]/g, '').substring(0, 10));
$input.attr('oninput', "this.value = this.value.replace(/[^0-9]/g, '').substring(0, 10)");
} else {
$label.text('Employee ID');
$input.removeAttr('onkeypress maxlength');
$input.attr('onkeypress', 'return onlyEmployee(event)');
$input.val($input.val().replace(/[^a-zA-Z0-9\s\-_/]/g, ''));
$input.attr('oninput', "this.value = this.value.replace(/[^a-zA-Z0-9\\s\\-_/]/g, '')");
}
});
@ -1069,6 +1080,24 @@
return false;
}
function onlyEmployee(event) {
var charCode = (event.which) ? event.which : event.keyCode;
// Allow Numbers (48-57)
// Allow Uppercase (65-90)
// Allow Lowercase (97-122)
// Allow Space (32), Hyphen (45), Underscore (95), Forward Slash (47)
if (
(charCode >= 48 && charCode <= 57) ||
(charCode >= 65 && charCode <= 90) ||
(charCode >= 97 && charCode <= 122) ||
[32, 45, 95, 47].includes(charCode)
) {
return true;
}
return false;
}
function setClientPolicyData(input) {
// console.log('policy_value ',input);