Compare commits

...

10 Commits

10 changed files with 100 additions and 61 deletions

View File

@ -133,7 +133,7 @@ class App extends BaseConfig
* @see https://www.php.net/manual/en/timezones.php for list of timezones * @see https://www.php.net/manual/en/timezones.php for list of timezones
* supported by PHP. * supported by PHP.
*/ */
public string $appTimezone = 'UTC'; public $appTimezone = 'Asia/Kolkata';
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------

View File

@ -89,6 +89,7 @@ $routes->group('api', ['filter' => ["jwtAuth:Org Admin,Travel Admin,Travel Agent
$routes->get('plans/view', 'PlanController::viewPlan'); $routes->get('plans/view', 'PlanController::viewPlan');
$routes->get('plans/plan_pdf', 'PlanController::plan_pdf'); $routes->get('plans/plan_pdf', 'PlanController::plan_pdf');
$routes->get('plans/plan_policy_action_status', 'PlanController::plan_policy_action_status'); $routes->get('plans/plan_policy_action_status', 'PlanController::plan_policy_action_status');
$routes->get('getHotels', 'MasterController::getHotels');
@ -103,6 +104,7 @@ $routes->group('api', ['filter' => ["jwtAuth:Org Admin,Travel Admin,User","appSi
$routes->post('plans/approvePlan', 'PlanController::approvePlan'); // Org admin, Travel admin,user $routes->post('plans/approvePlan', 'PlanController::approvePlan'); // Org admin, Travel admin,user
$routes->post('plans/rejectPlan', 'PlanController::rejectPlan'); // Org admin, Travel admin,user $routes->post('plans/rejectPlan', 'PlanController::rejectPlan'); // Org admin, Travel admin,user
$routes->get('plans/findApprovalList', 'PlanController::findApprovalList'); // Org admin, Travel admin,user $routes->get('plans/findApprovalList', 'PlanController::findApprovalList'); // Org admin, Travel admin,user
$routes->get('plans', 'PlanController::userPlans');
}); });
@ -143,7 +145,6 @@ $routes->group('api', ['filter' => ["jwtAuth:Org Admin,Travel Admin","appSignatu
$routes->post('forex_signature_upload', 'MasterController::forex_signature_upload');// Org admin, Travel admin, $routes->post('forex_signature_upload', 'MasterController::forex_signature_upload');// Org admin, Travel admin,
$routes->get('getForexSignaturePath', 'MasterController::getForexSignaturePath');// Org admin, Travel admin, $routes->get('getForexSignaturePath', 'MasterController::getForexSignaturePath');// Org admin, Travel admin,
// Hotels Master // Hotels Master
$routes->get('getHotels', 'MasterController::getHotels');// Org admin, Travel admin,
$routes->post('createHotels', 'MasterController::createHotels');// Org admin, Travel admin, $routes->post('createHotels', 'MasterController::createHotels');// Org admin, Travel admin,
$routes->get('findHotels', 'MasterController::findHotels');// Org admin, Travel admin, $routes->get('findHotels', 'MasterController::findHotels');// Org admin, Travel admin,
$routes->put('updateHotels/(:num)', 'MasterController::updateHotels/$1');// Org admin, Travel admin, $routes->put('updateHotels/(:num)', 'MasterController::updateHotels/$1');// Org admin, Travel admin,
@ -176,6 +177,7 @@ $routes->group('api', ['filter' => ["jwtAuth:Org Admin","appSignature"] ], funct
$routes->put('organizations/org-status/(:num)', 'OrganizationController::updateOrganizationStatus/$1'); $routes->put('organizations/org-status/(:num)', 'OrganizationController::updateOrganizationStatus/$1');
$routes->post('organizations/testMail', 'OrganizationController::testMail'); // Org admin, $routes->post('organizations/testMail', 'OrganizationController::testMail'); // Org admin,
}); });
$routes->group('api', ['filter' => ["jwtAuth:Travel Agent","appSignature"] ], function ($routes) { $routes->group('api', ['filter' => ["jwtAuth:Travel Agent","appSignature"] ], function ($routes) {
@ -183,15 +185,9 @@ $routes->group('api', ['filter' => ["jwtAuth:Travel Agent","appSignature"] ], fu
$routes->get('plans/findTravelAgentPlanList', 'PlanController::findTravelAgentPlanList');//Travel agent $routes->get('plans/findTravelAgentPlanList', 'PlanController::findTravelAgentPlanList');//Travel agent
$routes->post('plans/addOrEditPlanRemark', 'PlanController::addOrEditPlanRemark');//Travel agent $routes->post('plans/addOrEditPlanRemark', 'PlanController::addOrEditPlanRemark');//Travel agent
}); });
$routes->group('api', ['filter' => ["jwtAuth:User","appSignature"] ], function ($routes) {
$routes->get('plans', 'PlanController::userPlans');
});

View File

@ -115,6 +115,9 @@ class AuthController extends ResourceController
return $this->failUnauthorized($msg); return $this->failUnauthorized($msg);
} }
//store last login
$lastLoginBeforeUpdate = $user['last_login_at'];
// Reset failed attempts after successful login // Reset failed attempts after successful login
$this->userModel->update($user['user_id'], [ $this->userModel->update($user['user_id'], [
'failed_attempts' => 0, 'failed_attempts' => 0,
@ -123,28 +126,46 @@ class AuthController extends ResourceController
]); ]);
// Format date for FE // Format date for FE
$user = $this->userModel->select('user_id,first_name,last_name,role_id,org_id,group_id,last_login_at')->where('email', $data->email)->first(); $user = $this->userModel->select('user_id,first_name,last_name,role_id,org_id,group_id,last_login_at,agent_supported_service_ids')->where('email', $data->email)->first();
$user['last_login_at'] = !empty($user['last_login_at']) $user['last_login_at'] = empty($lastLoginBeforeUpdate)
? date('d, M-Y h:iA', strtotime($user['last_login_at'])) ? null
: null; : date('d, M-Y h:iA', strtotime($lastLoginBeforeUpdate));
//get service for the organization
$orgService = $this->organizationModel->find($user['org_id']);
$user['service'] = json_decode($orgService['services_ids'],true);
foreach ($user['service'] as $key => $value)
{
$serviceData = $this->serviceModel->find($value['service_id']);
$user['service'][$key]['name'] = $serviceData['name'];
$user['service'][$key]['icon'] = $serviceData['icon'];
$user['service'][$key]['order'] = $serviceData['order'];
}
//get role //get role
$user['role'] = $this->userModel->getRole($user['role_id']); $user['role'] = $this->userModel->getRole($user['role_id']);
//find user has the all access if($user['role_id'] != 5)
$user['plan_action'] = getUserPlanCreationRestrictionStatus($user); {
//get service for the organization
$orgService = $this->organizationModel->find($user['org_id']);
$user['service'] = json_decode($orgService['services_ids'],true);
foreach ($user['service'] as $key => $value)
{
$serviceData = $this->serviceModel->find($value['service_id']);
$user['service'][$key]['name'] = $serviceData['name'];
$user['service'][$key]['icon'] = $serviceData['icon'];
$user['service'][$key]['order'] = $serviceData['order'];
}
//find user has the all access
$user['plan_action'] = getUserPlanCreationRestrictionStatus($user);
}else{
$user['service'] = json_decode($user['agent_supported_service_ids'],true);
foreach ($user['service'] as $key => $value)
{
$serviceData = $this->serviceModel->find($value['service_id']);
$user['service'][$key]['name'] = $serviceData['name'];
$user['service'][$key]['icon'] = $serviceData['icon'];
$user['service'][$key]['order'] = $serviceData['order'];
}
}
// Generate JWT Token // Generate JWT Token
$token = generateJWT($user); $token = generateJWT($user);

View File

@ -637,6 +637,8 @@ class MasterController extends ResourceController
public function forex_signature_upload() public function forex_signature_upload()
{ {
try {
$data = $this->request->getPost(); $data = $this->request->getPost();
// Handle file upload // Handle file upload
@ -657,14 +659,14 @@ class MasterController extends ResourceController
return $this->failValidationErrors(['passport_document' => 'Invalid file upload']); return $this->failValidationErrors(['passport_document' => 'Invalid file upload']);
} }
try {
$this->mailTemplateModel->set(['image_location' => $newName])->where('template_name','forex')->update(); $this->mailTemplateModel->set(['image_location' => $newName])->where('template_name','forex')->update();
return $this->respondCreated([ return $this->respond([
'status' => 201, 'status' => 201,
'message' => 'organization created successfully', 'message' => 'uploaded successfully',
'data' => $data 'data' => $data
]); ]);
} catch (\Exception $e) { } catch (\Exception $e) {

View File

@ -27,6 +27,7 @@ use App\Models\MailTemplateModel;
use App\Models\ReportsModel; use App\Models\ReportsModel;
use App\Models\GroupModel; use App\Models\GroupModel;
use App\Models\PolicyModel; use App\Models\PolicyModel;
use App\Models\TravellerModel;
use Mpdf\Mpdf; use Mpdf\Mpdf;
class PlanController extends ResourceController class PlanController extends ResourceController
@ -54,6 +55,7 @@ class PlanController extends ResourceController
protected $reportsModel; protected $reportsModel;
protected $groupModel; protected $groupModel;
protected $policyModel; protected $policyModel;
protected $travellerModel;
public function __construct() public function __construct()
{ {
@ -80,6 +82,7 @@ class PlanController extends ResourceController
$this->reportsModel = new ReportsModel(); $this->reportsModel = new ReportsModel();
$this->groupModel = new GroupModel(); $this->groupModel = new GroupModel();
$this->policyModel = new PolicyModel(); $this->policyModel = new PolicyModel();
$this->travellerModel = new TravellerModel();
} }
@ -1318,7 +1321,8 @@ class PlanController extends ResourceController
->where('c_user_visa_details.valid_upto >=', date('Y-m-d')) ->where('c_user_visa_details.valid_upto >=', date('Y-m-d'))
->findAll(); ->findAll();
$userId = $plan['user_id'] ?? $plan['traveller_id']; $userId = !empty($plan['user_id']) ? $plan['user_id'] : $plan['traveller_id'];
//current plan status //current plan status
$status = getCurrentPlanStatus($planId); $status = getCurrentPlanStatus($planId);
@ -1326,7 +1330,14 @@ class PlanController extends ResourceController
$plan['status_details'] = $status; $plan['status_details'] = $status;
//get user data //get user data
$plan['user_data'] = $this->userModel->where('user_id', $userId)->first(); if($plan['user_id'] != 0){
$plan['user_data'] = $this->userModel->where('user_id', $userId)->first();
}else{
$plan['user_data'] = $this->travellerModel->select('first_name,last_name,email,mobile as mobile_no')->where('traveller_id', $userId)->first();
}
// dd($plan['user_data']);
$plan['view'] = $view; $plan['view'] = $view;
$data['data'] = $plan; $data['data'] = $plan;
// dd($data); // dd($data);
@ -1478,6 +1489,7 @@ class PlanController extends ResourceController
public function canclePlan() public function canclePlan()
{ {
$plan_id = $this->request->getGet('plan_id') ?? null; $plan_id = $this->request->getGet('plan_id') ?? null;
$updated_by = $this->request->getGet('updated_by') ?? null;
log_message('error', "Recived plan_id: {$plan_id} in update()"); log_message('error', "Recived plan_id: {$plan_id} in update()");
@ -1486,7 +1498,7 @@ class PlanController extends ResourceController
return $this->failNotFound('Plan ID is required'); return $this->failNotFound('Plan ID is required');
} }
$return = $this->planModel->where('plan_id', $plan_id)->set(['status' => 7])->update(); $return = $this->planModel->where('plan_id', $plan_id)->set(['status' => 7,'updated_by'=>$updated_by])->update();
if($return){ if($return){
@ -1532,7 +1544,7 @@ class PlanController extends ResourceController
// echo getUserPlanCreationRestrictionStatus($user); die; // echo getUserPlanCreationRestrictionStatus($user); die;
// print_r(getPlanApproverAction(126)); die; // print_r(getPlanApproverAction(126)); die;
return $this->generatePlanPdf(174, true); return $this->generatePlanPdf(223, true);
die; die;
// updatePlanStatus(57); die; // updatePlanStatus(57); die;
@ -1708,22 +1720,25 @@ class PlanController extends ResourceController
return false; return false;
} }
$userId = $planData['user_id'] ?? $planData['traveller_id']; // $userId = $planData['user_id'] ?? $planData['traveller_id'];
$userId = !empty($planData['user_id']) ? $planData['user_id'] : $planData['created_by'];
$userData = $this->userModel->where('user_id', $userId)->first(); $userData = $this->userModel->where('user_id', $userId)->first();
if (!$userData) { if (!$userData) {
log_message('error', "User data not found for user_id: {$userId}"); log_message('error', "User data not found for user_id: {$userId}");
return false; return false;
} }
$groupId = $userData['group_id'];
$planStatusData = $this->planStatusModel->where('plan_id', $plan_id)->where('is_active', 1)->first();
$groupId = $planStatusData['group_id'];
$groupData = $this->groupModel->where('group_id', $groupId)->first(); $groupData = $this->groupModel->where('group_id', $groupId)->first();
if (!$groupData) { if (!$groupData) {
log_message('error', "Group data not found for group_id: {$groupId}"); log_message('error', "Group data not found for group_id: {$groupId}");
return false; return false;
} }
$planStatusData = $this->planStatusModel->where('plan_id', $plan_id)->where('is_active', 1)->first();
$result['traveller'] = $userData['first_name'].' '.$userData['last_name']; $result['traveller'] = $userData['first_name'].' '.$userData['last_name'];
$result['group_name'] = $groupData['name']; $result['group_name'] = $groupData['name'];

View File

@ -43,10 +43,10 @@ class ReportsController extends BaseController
} }
// Separate domestic // Separate domestic
$domestic = array_values(array_filter($result, fn($row) => $row['plan_trip_type'] === 'domestic')); $domestic = array_values(array_filter($result, fn($row) => $row['plan_trip_type'] === 'Domestic'));
// Separate international // Separate international
$international = array_values(array_filter($result, fn($row) => $row['plan_trip_type'] === 'international')); $international = array_values(array_filter($result, fn($row) => $row['plan_trip_type'] === 'International'));
if(isset($data['export'])) if(isset($data['export']))
{ {
@ -108,10 +108,10 @@ class ReportsController extends BaseController
} }
// Separate domestic // Separate domestic
$domestic = array_values(array_filter($flat_result, fn($row) => $row['plan_trip_type'] === 'domestic')); $domestic = array_values(array_filter($flat_result, fn($row) => $row['plan_trip_type'] === 'Domestic'));
// Separate international // Separate international
$international = array_values(array_filter($flat_result, fn($row) => $row['plan_trip_type'] === 'international')); $international = array_values(array_filter($flat_result, fn($row) => $row['plan_trip_type'] === 'International'));
@ -167,10 +167,10 @@ class ReportsController extends BaseController
} }
// Separate domestic // Separate domestic
$domestic = array_values(array_filter($result, fn($row) => $row['plan_trip_type'] === 'domestic')); $domestic = array_values(array_filter($result, fn($row) => $row['plan_trip_type'] === 'Domestic'));
// Separate international // Separate international
$international = array_values(array_filter($result, fn($row) => $row['plan_trip_type'] === 'international')); $international = array_values(array_filter($result, fn($row) => $row['plan_trip_type'] === 'International'));
if(isset($data['export'])) if(isset($data['export']))
{ {
@ -222,10 +222,10 @@ class ReportsController extends BaseController
} }
// Separate domestic // Separate domestic
$domestic = array_values(array_filter($result, fn($row) => $row['plan_trip_type'] === 'domestic')); $domestic = array_values(array_filter($result, fn($row) => $row['plan_trip_type'] === 'Domestic'));
// Separate international // Separate international
$international = array_values(array_filter($result, fn($row) => $row['plan_trip_type'] === 'international')); $international = array_values(array_filter($result, fn($row) => $row['plan_trip_type'] === 'International'));
if(isset($data['export'])) if(isset($data['export']))
@ -324,10 +324,10 @@ class ReportsController extends BaseController
} }
// Separate domestic // Separate domestic
$domestic = array_values(array_filter($result, fn($row) => $row['plan_trip_type'] === 'domestic')); $domestic = array_values(array_filter($result, fn($row) => $row['plan_trip_type'] === 'Domestic'));
// Separate international // Separate international
$international = array_values(array_filter($result, fn($row) => $row['plan_trip_type'] === 'international')); $international = array_values(array_filter($result, fn($row) => $row['plan_trip_type'] === 'International'));
if(isset($data['export'])) if(isset($data['export']))
{ {

View File

@ -42,7 +42,8 @@ if (!function_exists('palnStatusHandler')) {
log_message('debug', "Plan services found: " . json_encode($planServices)); log_message('debug', "Plan services found: " . json_encode($planServices));
$userId = $planData['user_id'] ?? $planData['traveller_id']; // $userId = $planData['user_id'] ?? $planData['traveller_id'];
$userId = !empty($planData['user_id']) ? $planData['user_id'] : $planData['created_by'];
$userData = $userModel->where('user_id', $userId)->first(); $userData = $userModel->where('user_id', $userId)->first();
if (!$userData) { if (!$userData) {
log_message('error', "User data not found for user_id: {$userId}"); log_message('error', "User data not found for user_id: {$userId}");
@ -157,7 +158,9 @@ if (!function_exists('palnStatusHandler')) {
'a4_action' => $policyA4Action, 'a4_action' => $policyA4Action,
'is_a4_action_done' => ($policyA4Action == 'None') ? 1 : 0, 'is_a4_action_done' => ($policyA4Action == 'None') ? 1 : 0,
'parallel_process_from' => $policyParallelAction, 'parallel_process_from' => $policyParallelAction,
'policy_action' => $policyAction 'policy_action' => $policyAction,
'group_id'=> $groupId,
'policy_id'=> $policyId,
]; ];
// dd($data); // dd($data);

View File

@ -18,6 +18,8 @@ class PlanStatusModel extends Model
'a4_id', 'a4_action', 'is_a4_action_done', 'a4_reject_reason', 'a4_action_done_on','a4_action_done_by','is_a4_mail_send', 'a4_id', 'a4_action', 'is_a4_action_done', 'a4_reject_reason', 'a4_action_done_on','a4_action_done_by','is_a4_mail_send',
'parallel_process_from', 'parallel_process_from',
'policy_action', 'policy_action',
'group_id',
'policy_id',
'is_active', 'is_active',
'created_on', 'created_by' 'created_on', 'created_by'
]; ];

View File

@ -21,8 +21,8 @@ class ReportsModel extends Model
m_plan.so_number, m_plan.so_number,
m_cost_center.name AS cost_center, m_cost_center.name AS cost_center,
CASE CASE
WHEN m_plan.trip_type = 1 THEN 'domestic' WHEN m_plan.trip_type = 1 THEN 'Domestic'
WHEN m_plan.trip_type = 2 THEN 'international' WHEN m_plan.trip_type = 2 THEN 'International'
ELSE 'unknown' ELSE 'unknown'
END AS plan_trip_type, END AS plan_trip_type,
al.Service, al.Service,
@ -124,8 +124,8 @@ class ReportsModel extends Model
'{$serviceAlias}' As 'Service', '{$serviceAlias}' As 'Service',
COUNT(*) AS service_count, COUNT(*) AS service_count,
CASE CASE
WHEN m_plan.trip_type = 1 THEN 'domestic' WHEN m_plan.trip_type = 1 THEN 'Domestic'
WHEN m_plan.trip_type = 2 THEN 'international' WHEN m_plan.trip_type = 2 THEN 'International'
ELSE 'unknown' ELSE 'unknown'
END AS plan_trip_type END AS plan_trip_type
FROM FROM
@ -169,8 +169,8 @@ class ReportsModel extends Model
m_cost_center.name AS cost_center, m_cost_center.name AS cost_center,
c_flight.trip_type AS flight_trip_type, c_flight.trip_type AS flight_trip_type,
CASE CASE
WHEN m_plan.trip_type = 1 THEN 'domestic' WHEN m_plan.trip_type = 1 THEN 'Domestic'
WHEN m_plan.trip_type = 2 THEN 'international' WHEN m_plan.trip_type = 2 THEN 'International'
ELSE 'unknown' ELSE 'unknown'
END AS plan_trip_type, END AS plan_trip_type,
-- CONCAT_WS(' - ', -- CONCAT_WS(' - ',
@ -230,8 +230,8 @@ class ReportsModel extends Model
m_plan.so_number, m_plan.so_number,
m_cost_center.name AS cost_center, m_cost_center.name AS cost_center,
CASE CASE
WHEN m_plan.trip_type = 1 THEN 'domestic' WHEN m_plan.trip_type = 1 THEN 'Domestic'
WHEN m_plan.trip_type = 2 THEN 'international' WHEN m_plan.trip_type = 2 THEN 'International'
ELSE 'unknown' ELSE 'unknown'
END AS plan_trip_type, END AS plan_trip_type,
c_accomodation.hotel_name AS hotel_name, c_accomodation.hotel_name AS hotel_name,
@ -331,8 +331,8 @@ class ReportsModel extends Model
m_cost_center.name AS cost_center, m_cost_center.name AS cost_center,
c_flight.trip_type AS flight_trip_type, c_flight.trip_type AS flight_trip_type,
CASE CASE
WHEN m_plan.trip_type = 1 THEN 'domestic' WHEN m_plan.trip_type = 1 THEN 'Domestic'
WHEN m_plan.trip_type = 2 THEN 'international' WHEN m_plan.trip_type = 2 THEN 'International'
ELSE 'unknown' ELSE 'unknown'
END AS plan_trip_type, END AS plan_trip_type,
CONCAT_WS(' - ', CONCAT_WS(' - ',

View File

@ -192,7 +192,7 @@
<tr class="invoice-section"> <tr class="invoice-section">
<td class="quotation-company"> <td class="quotation-company">
<div> <div>
<span class="user-name"><?= esc($data['user_data']['first_name']) ?> <?= esc($data['user_data']['last_name']) ?> <?php if($data['user_data']['employee_code']){ echo '- '.$data['user_data']['employee_code']; } ?> </span> <span class="user-name"><?= esc($data['user_data']['first_name']) ?> <?= esc($data['user_data']['last_name']) ?> <?php if(isset($data['user_data']['employee_code'])){ echo '- '.$data['user_data']['employee_code']; } ?> </span>
</div> </div>
<div> <div>
<span class="user-email" ><?= esc($data['user_data']['email']) ?></span>, <span class="user-email" ><?= esc($data['user_data']['email']) ?></span>,
@ -209,7 +209,7 @@
</tr> </tr>
<tr> <tr>
<td style="text-align:left; border-bottom:1px solid #ddd; border-right:1px solid #ddd;">Expiry Date</td> <td style="text-align:left; border-bottom:1px solid #ddd; border-right:1px solid #ddd;">Expiry Date</td>
<td style="text-align:left; border-bottom:1px solid #ddd; color:#6b6b6b;"><?= $data['user_data']['date_of_expiry'] ? date('d, M y', strtotime($data['user_data']['date_of_expiry'])) : '' ?></td> <td style="text-align:left; border-bottom:1px solid #ddd; color:#6b6b6b;"><?= !empty($data['user_data']['date_of_expiry']) ? date('d, M y', strtotime($data['user_data']['date_of_expiry'])) : '' ?></td>
</tr> </tr>
<tr> <tr>
<td style="text-align:left; border-bottom:1px solid #ddd; border-right:1px solid #ddd;">Place Of Issue</td> <td style="text-align:left; border-bottom:1px solid #ddd; border-right:1px solid #ddd;">Place Of Issue</td>