diff --git a/app/Helpers/BudgetHelper.php b/app/Helpers/BudgetHelper.php index 4179349..374e6d2 100644 --- a/app/Helpers/BudgetHelper.php +++ b/app/Helpers/BudgetHelper.php @@ -35,7 +35,7 @@ class BudgetHelper $users = UserHasCabang::where('cabang_id', $cabang_id)->get(); $userIds = $users->pluck('user_id')->toArray(); - $forms = FormHelper::getFormsByUserIds($userIds, $periode_month, $periode_year) + $forms = FormHelper::getTotalAmount($userIds, $periode_month, $periode_year) ->sortByDesc('tanggal') ->sortByDesc('created_at'); diff --git a/app/Helpers/FormHelper.php b/app/Helpers/FormHelper.php index 4beb976..878501f 100644 --- a/app/Helpers/FormHelper.php +++ b/app/Helpers/FormHelper.php @@ -276,4 +276,91 @@ class FormHelper $nominal = $form->sum('approved_total'); return $nominal; } + + public static function getTotalAmount($userIds, $month, $year) { + $monthNumber = date('m', strtotime($month . ' 1')); + $startDate = "$year-$monthNumber-" . env('STARTING_DATE'); + + $nextMonthTimestamp = strtotime("first day of next month", strtotime("$year-$monthNumber-01")); + $closingDateNextMonth = date('Y-m-', $nextMonthTimestamp) . env('CLOSING_DATE'); + + $users = Admin::with(['region', 'cabang']) + ->whereIn('id', $userIds) + ->get(); + + $formUpCountryQuery = FormUpCountry::select( + 'expense_number', + 'user_id', + 'total', + 'approved_total', + 'status', + 'account_number', + 'created_at', + DB::raw("'Up Country' as type") + )->whereIn('user_id', $userIds) + ->whereBetween('final_approved_at', [$startDate, $closingDateNextMonth]); + + $formVehicleRunningCostQuery = FormVehicleRunningCost::select( + 'expense_number', + 'user_id', + 'total', + 'approved_total', + 'status', + 'account_number', + 'created_at', + DB::raw("'Vehicle Running Cost' as type") + )->whereIn('user_id', $userIds) + ->whereBetween('final_approved_at', [$startDate, $closingDateNextMonth]); + + $formEntertaimentPresentationQuery = FormEntertaimentPresentation::select( + 'expense_number', + 'user_id', + 'total', + 'approved_total', + 'status', + 'account_number', + 'created_at', + DB::raw("'Entertainment Presentation' as type") + )->whereIn('user_id', $userIds) + ->whereBetween('final_approved_at', [$startDate, $closingDateNextMonth]); + + $formMeetingSeminarQuery = FormMeetingSeminar::select( + 'expense_number', + 'user_id', + 'total', + 'approved_total', + 'status', + 'account_number', + 'created_at', + DB::raw("'Meeting Seminar' as type") + )->whereIn('user_id', $userIds) + ->whereBetween('final_approved_at', [$startDate, $closingDateNextMonth]); + + $formOthersQuery = FormOthers::select( + 'expense_number', + 'user_id', + 'total', + 'approved_total', + 'status', + 'account_number', + 'created_at', + DB::raw("'Others' as type") + )->whereIn('user_id', $userIds) + ->whereBetween('final_approved_at', [$startDate, $closingDateNextMonth]); + + // Use union to combine queries + $forms = $formUpCountryQuery + ->union($formVehicleRunningCostQuery) + ->union($formEntertaimentPresentationQuery) + ->union($formMeetingSeminarQuery) + ->union($formOthersQuery) + ->get(); + + // Return forms with eager loaded user details + return $forms->map(function ($form) use ($users) { + $user = $users->firstWhere('id', $form->user_id); + $form->user = $user; + return $form; + }); + } } diff --git a/app/Http/Controllers/Forms/FormEntertainmentPresentationController.php b/app/Http/Controllers/Forms/FormEntertainmentPresentationController.php index 8997795..39d4df1 100644 --- a/app/Http/Controllers/Forms/FormEntertainmentPresentationController.php +++ b/app/Http/Controllers/Forms/FormEntertainmentPresentationController.php @@ -52,7 +52,7 @@ class FormEntertainmentPresentationController extends Controller } // Calculate the actual start date for data retrieval (1 month before currentPeriodStartDate) - $dataRetrievalStartDate = $currentPeriodStartDate->copy()->subMonth()->startOfDay(); + $dataRetrievalStartDate = $currentPeriodStartDate->copy()->subMonth()->subDay()->startOfDay(); $forms = FormEntertaimentPresentation::whereBetween('tanggal', [$dataRetrievalStartDate, $currentPeriodClosingDate]) ->orderBy('tanggal', 'desc') diff --git a/app/Http/Controllers/Forms/FormMeetingSeminarController.php b/app/Http/Controllers/Forms/FormMeetingSeminarController.php index d397bcb..2a9e47b 100644 --- a/app/Http/Controllers/Forms/FormMeetingSeminarController.php +++ b/app/Http/Controllers/Forms/FormMeetingSeminarController.php @@ -53,7 +53,7 @@ class FormMeetingSeminarController extends Controller } // Calculate the actual start date for data retrieval (1 month before currentPeriodStartDate) - $dataRetrievalStartDate = $currentPeriodStartDate->copy()->subMonth()->startOfDay(); + $dataRetrievalStartDate = $currentPeriodStartDate->copy()->subMonth()->subDay()->startOfDay(); $forms = FormMeetingSeminar::whereBetween('tanggal', [$dataRetrievalStartDate, $currentPeriodClosingDate]) ->orderBy('tanggal', 'desc') diff --git a/app/Http/Controllers/Forms/FormOtherController.php b/app/Http/Controllers/Forms/FormOtherController.php index 2c06e9c..9ebb32b 100644 --- a/app/Http/Controllers/Forms/FormOtherController.php +++ b/app/Http/Controllers/Forms/FormOtherController.php @@ -50,7 +50,7 @@ class FormOtherController extends Controller } // Calculate the actual start date for data retrieval (1 month before currentPeriodStartDate) - $dataRetrievalStartDate = $currentPeriodStartDate->copy()->subMonth()->startOfDay(); + $dataRetrievalStartDate = $currentPeriodStartDate->copy()->subMonth()->subDay()->startOfDay(); $forms = FormOthers::whereBetween('tanggal', [$dataRetrievalStartDate, $currentPeriodClosingDate]) ->orderBy('tanggal', 'desc') diff --git a/app/Http/Controllers/Forms/FormUpCountryController.php b/app/Http/Controllers/Forms/FormUpCountryController.php index baa3204..0a74f1d 100644 --- a/app/Http/Controllers/Forms/FormUpCountryController.php +++ b/app/Http/Controllers/Forms/FormUpCountryController.php @@ -53,7 +53,7 @@ class FormUpCountryController extends Controller } // Calculate the actual start date for data retrieval (1 month before currentPeriodStartDate) - $dataRetrievalStartDate = $currentPeriodStartDate->copy()->subMonth()->startOfDay(); + $dataRetrievalStartDate = $currentPeriodStartDate->copy()->subMonth()->subDay()->startOfDay(); $forms = FormUpCountry::whereBetween('tanggal', [$dataRetrievalStartDate, $currentPeriodClosingDate]) ->orderBy('tanggal', 'desc') diff --git a/app/Http/Controllers/Forms/FormVehicleController.php b/app/Http/Controllers/Forms/FormVehicleController.php index 31b4100..8b55643 100644 --- a/app/Http/Controllers/Forms/FormVehicleController.php +++ b/app/Http/Controllers/Forms/FormVehicleController.php @@ -53,7 +53,7 @@ class FormVehicleController extends Controller } // Calculate the actual start date for data retrieval (1 month before currentPeriodStartDate) - $dataRetrievalStartDate = $currentPeriodStartDate->copy()->subMonth()->startOfDay(); + $dataRetrievalStartDate = $currentPeriodStartDate->copy()->subMonth()->subDay()->startOfDay(); $forms = FormVehicleRunningCost::whereBetween('tanggal', [$dataRetrievalStartDate, $currentPeriodClosingDate]) ->orderBy('tanggal', 'desc')