From b47cd582e2786fa1e663c5d892f4793f0e61b932 Mon Sep 17 00:00:00 2001 From: Gowtham M Date: Tue, 5 Aug 2025 10:47:56 +0530 Subject: [PATCH] Tracket issue : GWM --- .gitignore | 3 + app/Controllers/PlanController.php | 14 +++-- app/Helpers/common_helper.php | 97 +++++++++++++++++++++++++++--- app/Helpers/mail_helper.php | 2 +- app/Helpers/status_helper.php | 1 - app/Models/AccomodationModel.php | 1 + app/Models/ReportsModel.php | 23 +++++-- 7 files changed, 121 insertions(+), 20 deletions(-) diff --git a/.gitignore b/.gitignore index be97383..1128019 100644 --- a/.gitignore +++ b/.gitignore @@ -10,3 +10,6 @@ # Ignore env File here .env +/writable/pdf/forex/* +/writable/pdf/trips/* + diff --git a/app/Controllers/PlanController.php b/app/Controllers/PlanController.php index fb7f86f..4f2f580 100644 --- a/app/Controllers/PlanController.php +++ b/app/Controllers/PlanController.php @@ -1018,8 +1018,11 @@ class PlanController extends ResourceController $todayStart = date('Y-m-d 00:00:00'); $todayEnd = date('Y-m-d 23:59:59'); - $startOfWeek = date('Y-m-d 00:00:00', strtotime('monday this week')); - $endOfWeek = date('Y-m-d 23:59:59', strtotime('sunday this week')); + // $startOfWeek = date('Y-m-d 00:00:00', strtotime('monday this week')); + // $endOfWeek = date('Y-m-d 23:59:59', strtotime('sunday this week')); + $startOfWeek = date('Y-m-d 00:00:00', strtotime('-6 days')); + $endOfWeek = date('Y-m-d 23:59:59'); // today + $typeResultToday = []; $typeResultWeekly = []; @@ -1215,8 +1218,9 @@ class PlanController extends ResourceController $plan['flight'] = $flights; //get accomodation details - $plan['accomodation'] = $this->accomodationModel->select('c_accomodation.* , C.dropdown_value as hotel_class') + $plan['accomodation'] = $this->accomodationModel->select('c_accomodation.*, C.dropdown_value as hotel_class, H.hotel_name') ->join('m_dropdown C', 'C.dropdown_key = c_accomodation.class AND C.dropdown = "hotel_class"', 'left') + ->join('m_hotels H', 'H.hotel_id = c_accomodation.hotel_id', 'left') ->where('c_accomodation.plan_id', $planId) ->where('c_accomodation.is_active', 1)->findAll(); @@ -1476,7 +1480,9 @@ class PlanController extends ResourceController public function url() { echo '
';
-        print_r(getPlanApproverAction(119)); die;
+        $user = $this->userModel->where('email', 'pavithrakavi1100@gmail.com')->first();
+        echo getUserPlanCreationRestrictionStatus($user); die;
+        print_r(getPlanApproverAction(126)); die;
 
         return $this->generatePlanPdf(57, true);
         die;
diff --git a/app/Helpers/common_helper.php b/app/Helpers/common_helper.php
index d02d7b9..4c66aff 100644
--- a/app/Helpers/common_helper.php
+++ b/app/Helpers/common_helper.php
@@ -51,19 +51,55 @@ if (!function_exists('checkUserExist')) {
 if (!function_exists('getUserPlanCreationRestrictionStatus')) {
     function getUserPlanCreationRestrictionStatus($user)
     {
-        if($user['group_id'] != null && ( $user['first_approver'] != null || $user['second_approver'] != null || $user['third_approver'] != null ) )
+        if($user['group_id'] != null)
         {
             $groupModel = new GroupModel();
             $groupData = $groupModel->find($user['group_id']);
             if($groupData)
             {
-                if($groupData['domestic_policy_id'] != null && $groupData['international_policy_id'] != null)
-                    return 'Both Type Plan Creation Allowed';
-                else if($groupData['domestic_policy_id'] != null)
-                    return 'Only Domestic Plan Creation Allowed';
-                else if($groupData['international_policy_id'] != null)
-                    return 'Only International Plan Creation Allowed';
-                
+                $domesticPolicyId = $groupData['domestic_policy_id'];
+                $internationalPolicyId = $groupData['international_policy_id'];
+                $policyDetailsModel = new PolicyDetailsModel();
+
+                if($domesticPolicyId != null && $internationalPolicyId != null)
+                {
+                    $domesticPolicy = $policyDetailsModel->where('policy_id',$domesticPolicyId)->where('service_id', 1)->find();
+                    $domesticCheck =  checkApproverSetOrNotBasedOnPolicy($domesticPolicy,$user);
+                    $internationalPolicy = $policyDetailsModel->where('policy_id',$internationalPolicyId)->where('service_id', 1)->find();
+                    $internationalCheck =  checkApproverSetOrNotBasedOnPolicy($internationalPolicy,$user);
+
+                    if($domesticCheck == true && $internationalCheck == true)
+                        return 'Both Type Plan Creation Allowed';
+                    else
+                        return 'Plan Creation Not Allowed'; 
+
+                }
+                else if($domesticPolicyId != null)
+                {
+                    $domesticPolicy = $policyDetailsModel->where('policy_id',$domesticPolicyId)->where('service_id', 1)->find();
+                    $check =  checkApproverSetOrNotBasedOnPolicy($domesticPolicy,$user);
+                    $internationalPolicy = $policyDetailsModel->where('policy_id',$domesticPolicyId)->where('service_id', 1)->find();
+                    $check =  checkApproverSetOrNotBasedOnPolicy($internationalPolicy,$user);
+
+                    if($check == true)
+                        return 'Only Domestic Plan Creation Allowed';
+                    else
+                        return 'Plan Creation Not Allowed'; 
+                    
+                }
+                else if($internationalPolicyId != null)
+                {
+
+                    $internationalPolicy = $policyDetailsModel->where('policy_id',$internationalPolicyId)->where('service_id', 1)->find();
+                    $check = checkApproverSetOrNotBasedOnPolicy($internationalPolicy,$user);
+
+                    if($check == true)
+                        return 'Only International Plan Creation Allowed';
+                    else
+                        return 'Plan Creation Not Allowed'; 
+                   
+                }
+   
 
             }else{ 
                 return 'Plan Creation Not Allowed'; 
@@ -77,6 +113,51 @@ if (!function_exists('getUserPlanCreationRestrictionStatus')) {
     }
 }
 
+function checkApproverSetOrNotBasedOnPolicy($Policy,$user)
+{
+    // Step 1: Determine required approver levels (a1 to a4)
+    $requiredApprovers = [];
+
+    foreach (['', '_exceptional', '_amendment'] as $type) {
+        for ($i = 1; $i <= 4; $i++) {
+            $key = "a{$i}{$type}_action";
+            if (isset($Policy[0][$key]) && $Policy[0][$key] === 'Approval') {
+                $requiredApprovers[] = $i; // add level (1 to 4)
+            }
+        }
+    }
+
+    // Remove duplicates (in case multiple types require same level)
+    $requiredApprovers = array_unique($requiredApprovers);
+
+    // Step 2: Check user profile for each required approver level
+    $missingApprovers = [];
+
+    foreach ($requiredApprovers as $level) {
+        $profileKey = match ($level) {
+            1 => 'first_approver',
+            2 => 'second_approver',
+            3 => 'third_approver',
+            4 => 'fourth_approver',
+        };
+
+        if (empty($user[$profileKey]) || $user[$profileKey] == 0) {
+            $missingApprovers[] = $profileKey;
+        }
+    }
+
+    // Step 3: Final check
+    if (!empty($missingApprovers)) {
+        // One or more approvers missing
+        // echo "Missing approvers in user profile: " . implode(', ', $missingApprovers);
+        return false;
+    } else {
+        // echo "All required approvers are set in user profile.";
+        return true;
+    }
+
+}
+
 if (!function_exists('isDataChanged')) {
     function isDataChanged($model, $id, array $newData): bool
     {
diff --git a/app/Helpers/mail_helper.php b/app/Helpers/mail_helper.php
index b6da284..fef5a8e 100644
--- a/app/Helpers/mail_helper.php
+++ b/app/Helpers/mail_helper.php
@@ -46,7 +46,7 @@ if (!function_exists('sendPlanCreationMail')) {
             // Skip if action is None
             if ($value['action'] === 'None') { continue; }
             // mail success check
-            if ($value['is_mail_send'] === 1) { continue; }
+            if ($value['is_mail_send'] == 1) { continue; }
             // skip with below condition
             if($mailOn == 'send_mail_to_only_approver' && $action['parallel_process_from'] == 1){ continue; }
 
diff --git a/app/Helpers/status_helper.php b/app/Helpers/status_helper.php
index e69d44d..4b8005c 100644
--- a/app/Helpers/status_helper.php
+++ b/app/Helpers/status_helper.php
@@ -748,7 +748,6 @@ if (!function_exists('getPlanApproverAction')) {
                                     ->whereIn($actionField, ['Approval', 'Notification', 'None'])
                                     ->where('is_active', 1)
                                     ->first();
-
             if ($record) {
                 $user = $userModel->where('user_id', $record[$idField])->first();
                 if ($user) {
diff --git a/app/Models/AccomodationModel.php b/app/Models/AccomodationModel.php
index 0f4a43c..120bba2 100644
--- a/app/Models/AccomodationModel.php
+++ b/app/Models/AccomodationModel.php
@@ -12,6 +12,7 @@ class AccomodationModel extends Model
     protected $allowedFields = [
         'plan_id',
         'destination_city',
+        'hotel_id',
         'hotel_name',
         'class',
         'checkin_date',
diff --git a/app/Models/ReportsModel.php b/app/Models/ReportsModel.php
index cec9530..61fe497 100644
--- a/app/Models/ReportsModel.php
+++ b/app/Models/ReportsModel.php
@@ -74,6 +74,7 @@ class ReportsModel extends Model
                         GROUP BY plan_id
                     ) AS al ON m_plan.plan_id = al.plan_id
 
+
                     WHERE
                         mts.is_active = 1
                         AND mts.status_value = 'Approved'
@@ -415,8 +416,12 @@ class ReportsModel extends Model
 
                                 JOIN m_plan mp ON cf.plan_id = mp.plan_id 
 
-                                WHERE   cf.created_on >= DATE_SUB(CURDATE(), INTERVAL WEEKDAY(CURDATE()) DAY)
-                                AND     cf.created_on <  DATE_ADD(DATE_SUB(CURDATE(), INTERVAL WEEKDAY(CURDATE()) DAY), INTERVAL 7 DAY)
+                                WHERE cf.created_on >= DATE_SUB(CURDATE(), INTERVAL 6 DAY)
+                                AND   cf.created_on <  DATE_ADD(CURDATE(), INTERVAL 1 DAY)
+
+
+                                -- WHERE   cf.created_on >= DATE_SUB(CURDATE(), INTERVAL WEEKDAY(CURDATE()) DAY)
+                                -- AND     cf.created_on <  DATE_ADD(DATE_SUB(CURDATE(), INTERVAL WEEKDAY(CURDATE()) DAY), INTERVAL 7 DAY)
 
                                 -- previous week
                                 -- WHERE cf.created_on >= DATE_SUB(CURDATE(), INTERVAL (WEEKDAY(CURDATE()) + 7) DAY)
@@ -482,8 +487,11 @@ class ReportsModel extends Model
 
                         JOIN m_plan mp ON ca.plan_id = mp.plan_id 
 
-                        WHERE   ca.created_on >= DATE_SUB(CURDATE(), INTERVAL WEEKDAY(CURDATE()) DAY)
-                        AND     ca.created_on <  DATE_ADD(DATE_SUB(CURDATE(), INTERVAL WEEKDAY(CURDATE()) DAY), INTERVAL 7 DAY)
+                        WHERE ca.created_on >= DATE_SUB(CURDATE(), INTERVAL 6 DAY)
+                        AND   ca.created_on <  DATE_ADD(CURDATE(), INTERVAL 1 DAY)
+
+                        -- WHERE   ca.created_on >= DATE_SUB(CURDATE(), INTERVAL WEEKDAY(CURDATE()) DAY)
+                        -- AND     ca.created_on <  DATE_ADD(DATE_SUB(CURDATE(), INTERVAL WEEKDAY(CURDATE()) DAY), INTERVAL 7 DAY)
 
                             -- previous week
                             -- WHERE cf.created_on >= DATE_SUB(CURDATE(), INTERVAL (WEEKDAY(CURDATE()) + 7) DAY)
@@ -547,8 +555,11 @@ class ReportsModel extends Model
 
                             JOIN m_plan mp ON cf.plan_id = mp.plan_id 
 
-                            WHERE cf.created_on >= DATE_SUB(CURDATE(), INTERVAL WEEKDAY(CURDATE()) DAY)
-                            AND cf.created_on <  DATE_ADD(DATE_SUB(CURDATE(), INTERVAL WEEKDAY(CURDATE()) DAY), INTERVAL 7 DAY)
+                            WHERE cf.created_on >= DATE_SUB(CURDATE(), INTERVAL 6 DAY)
+                            AND   cf.created_on <  DATE_ADD(CURDATE(), INTERVAL 1 DAY)
+
+                            -- WHERE cf.created_on >= DATE_SUB(CURDATE(), INTERVAL WEEKDAY(CURDATE()) DAY)
+                            -- AND cf.created_on <  DATE_ADD(DATE_SUB(CURDATE(), INTERVAL WEEKDAY(CURDATE()) DAY), INTERVAL 7 DAY)
 
                                 -- previous week
                                 -- WHERE cf.created_on >= DATE_SUB(CURDATE(), INTERVAL (WEEKDAY(CURDATE()) + 7) DAY)