diff --git a/app/Helpers/BudgetHelper.php b/app/Helpers/BudgetHelper.php new file mode 100644 index 0000000..fa5dfbd --- /dev/null +++ b/app/Helpers/BudgetHelper.php @@ -0,0 +1,67 @@ +with(['user', 'cabang'])->get(); + + // Initialize an empty array to hold the used budget sums + $usedBudget = []; + + foreach ($budget as $b) { + // Get the month and year from the budget + $month = $b->periode_month; + $year = $b->periode_year; + + // Add the used budget per model for the specified month and year to the usedBudget array + $usedBudget[] = [ + 'FormUpCountry' => FormUpCountry::whereIn('status', ['Approved', 'Closed']) + ->whereMonth('tanggal', '=', date('m', strtotime($month))) + ->whereYear('tanggal', '=', $year) + ->sum('approved_total'), + + 'FormMeetingSeminar' => FormMeetingSeminar::whereIn('status', ['Approved', 'Closed']) + ->whereMonth('created_at', '=', date('m', strtotime($month))) + ->whereYear('created_at', '=', $year) + ->sum('approved_total'), + + 'FormOthers' => FormOthers::whereIn('status', ['Approved', 'Closed']) + ->whereMonth('tanggal', '=', date('m', strtotime($month))) + ->whereYear('tanggal', '=', $year) + ->sum('approved_total'), + + 'FormEntertaimentPresentation' => FormEntertaimentPresentation::whereIn('status', ['Approved', 'Closed']) + ->whereMonth('tanggal', '=', date('m', strtotime($month))) + ->whereYear('tanggal', '=', $year) + ->sum('approved_total'), + + 'FormVehicleRunningCost' => FormVehicleRunningCost::whereIn('status', ['Approved', 'Closed']) + ->whereMonth('tanggal', '=', date('m', strtotime($month))) + ->whereYear('tanggal', '=', $year) + ->sum('approved_total') + ]; + } + + $usedBudget = array_sum(array_map(function ($b) { + return array_sum($b); + }, $usedBudget)); + + $availableBudget = $budget->sum('amount') - $usedBudget; + + return $availableBudget; + } +} diff --git a/app/Http/Controllers/Forms/FormEntertainmentPresentationController.php b/app/Http/Controllers/Forms/FormEntertainmentPresentationController.php index eed607d..e87ea98 100644 --- a/app/Http/Controllers/Forms/FormEntertainmentPresentationController.php +++ b/app/Http/Controllers/Forms/FormEntertainmentPresentationController.php @@ -23,6 +23,7 @@ use App\Helpers\WhatsappHelper; use App\Helpers\AuditTrailHelper; use App\Models\Admin; use App\Rules\FileType; +use App\Helpers\BudgetHelper; class FormEntertainmentPresentationController extends Controller { @@ -63,7 +64,8 @@ class FormEntertainmentPresentationController extends Controller session()->put('redirect_url', route('forms.entertainment')); return view('backend.pages.forms.entertainment.index', [ - 'forms' => $forms + 'forms' => $forms, + 'availableBudget' => BudgetHelper::getAvailableBudget(), ]); } @@ -104,7 +106,7 @@ class FormEntertainmentPresentationController extends Controller 'tanggal' => 'required', 'jenis' => 'required|in:entertainment,presentation,sponsorship', 'keterangan' => 'required', - 'total' => 'required', + 'total' => 'required|numeric|min:1|max:' . BudgetHelper::getAvailableBudget(), 'name' => 'required', 'alamat' => 'required', 'nik_or_npwp' => 'required', @@ -216,7 +218,7 @@ class FormEntertainmentPresentationController extends Controller 'tanggal' => 'required', 'jenis' => 'required|in:entertainment,presentation,sponsorship', 'keterangan' => 'required', - 'total' => 'required', + 'total' => 'required|numeric|min:1|max:' . BudgetHelper::getAvailableBudget(), 'name' => 'required', 'alamat' => 'required', 'nik_or_npwp' => 'required', @@ -271,7 +273,7 @@ class FormEntertainmentPresentationController extends Controller { $this->checkAuthorization(auth()->user(), ['approval.approve']); $request->validate([ - 'total' => 'required', + 'total' => 'required|numeric|min:1|max:' . BudgetHelper::getAvailableBudget(), ]); $form = FormEntertaimentPresentation::findOrfail($id); diff --git a/app/Http/Controllers/Forms/FormMeetingSeminarController.php b/app/Http/Controllers/Forms/FormMeetingSeminarController.php index 256b310..a294aea 100644 --- a/app/Http/Controllers/Forms/FormMeetingSeminarController.php +++ b/app/Http/Controllers/Forms/FormMeetingSeminarController.php @@ -23,6 +23,7 @@ use App\Helpers\WhatsappHelper; use App\Helpers\AuditTrailHelper; use App\Rules\FileType; use App\Models\Admin; +use App\Helpers\BudgetHelper; class FormMeetingSeminarController extends Controller { @@ -63,7 +64,8 @@ class FormMeetingSeminarController extends Controller session()->put('redirect_url', route('forms.meeting')); return view('backend.pages.forms.meeting.index', [ - 'forms' => $forms + 'forms' => $forms, + 'availableBudget' => BudgetHelper::getAvailableBudget(), ]); } @@ -169,6 +171,12 @@ class FormMeetingSeminarController extends Controller 'hotel' => $request->hotel ?? 0, ]; + // Check if the total nominal exceeds the available budget + if(array_sum($data_nominal) > BudgetHelper::getAvailableBudget()) { + session()->flash('error', 'The total nominal exceeds the available budget.'); + return redirect()->back(); + } + // Save the form data $form = FormMeetingSeminar::create([ 'expense_number' => $expense_number, @@ -310,6 +318,12 @@ class FormMeetingSeminarController extends Controller 'hotel' => $request->hotel ?? 0, ]; + // Check if the total nominal exceeds the available budget + if(array_sum($data_nominal) > BudgetHelper::getAvailableBudget()) { + session()->flash('error', 'The total nominal exceeds the available budget.'); + return redirect()->back(); + } + // Save the form data $form->update([ 'allowance' => $data_nominal['allowance'], @@ -338,6 +352,12 @@ class FormMeetingSeminarController extends Controller 'hotel' => $request->hotel ? $form->hotel : 0, ]; + // Check if the total nominal exceeds the available budget + if(array_sum($approved_data) > BudgetHelper::getAvailableBudget()) { + session()->flash('error', 'The total nominal exceeds the available budget.'); + return redirect()->back(); + } + $form->update([ 'approved_at' => now(), 'approved_by' => auth()->user()->id, diff --git a/app/Http/Controllers/Forms/FormOtherController.php b/app/Http/Controllers/Forms/FormOtherController.php index 2bd7a97..0d098ec 100644 --- a/app/Http/Controllers/Forms/FormOtherController.php +++ b/app/Http/Controllers/Forms/FormOtherController.php @@ -23,6 +23,7 @@ use App\Helpers\WhatsappHelper; use App\Helpers\AuditTrailHelper; use App\Rules\FileType; use App\Models\Admin; +use App\Helpers\BudgetHelper; class FormOtherController extends Controller { @@ -63,7 +64,8 @@ class FormOtherController extends Controller session()->put('redirect_url', route('forms.other')); return view('backend.pages.forms.other.index', [ - 'forms' => $forms + 'forms' => $forms, + 'availableBudget' => BudgetHelper::getAvailableBudget(), ]); } @@ -107,7 +109,7 @@ class FormOtherController extends Controller 'kategori_id' => 'required', 'tanggal' => 'required|date', 'keterangan' => 'required', - 'total' => 'required', + 'total' => 'required|numeric|min:1|max:' . BudgetHelper::getAvailableBudget(), 'bukti_total' => ['nullable', 'file', 'max:51200', new FileType(['php', 'exe', 'js', 'sh', 'bat', 'exe', 'sh', 'php', 'vbs'])], ]); @@ -214,7 +216,7 @@ class FormOtherController extends Controller 'kategori_id' => 'required', 'tanggal' => 'required|date', 'keterangan' => 'required', - 'total' => 'required', + 'total' => 'required|numeric|min:1|max:' . BudgetHelper::getAvailableBudget(), 'bukti_total' => ['nullable', 'file', 'max:51200', new FileType(['php', 'exe', 'js', 'sh', 'bat', 'exe', 'sh', 'php', 'vbs'])], ]); @@ -264,7 +266,7 @@ class FormOtherController extends Controller $this->checkAuthorization(auth()->user(), ['approval.approve']); $request->validate([ - 'total' => 'required', + 'total' => 'required|numeric|min:1|max:' . BudgetHelper::getAvailableBudget(), ]); $form = FormOthers::findOrfail($id); diff --git a/app/Http/Controllers/Forms/FormUpCountryController.php b/app/Http/Controllers/Forms/FormUpCountryController.php index 9647dd9..56fe9f9 100644 --- a/app/Http/Controllers/Forms/FormUpCountryController.php +++ b/app/Http/Controllers/Forms/FormUpCountryController.php @@ -23,6 +23,7 @@ use App\Helpers\AuditTrailHelper; use App\Helpers\NextCloudHelper; use App\Rules\FileType; use App\Models\Admin; +use App\Helpers\BudgetHelper; class FormUpCountryController extends Controller { @@ -63,7 +64,8 @@ class FormUpCountryController extends Controller session()->put('redirect_url', route('forms.up-country')); return view('backend.pages.forms.upcountry.index', [ - 'forms' => $forms + 'forms' => $forms, + 'availableBudget' => BudgetHelper::getAvailableBudget() ]); } @@ -92,7 +94,7 @@ class FormUpCountryController extends Controller return view('backend.pages.forms.upcountry.view', [ 'form' => $form, - 'rayons' => Rayon::all() + 'rayons' => Rayon::all(), ]); } @@ -193,6 +195,12 @@ class FormUpCountryController extends Controller 'hotel' => $request->hotel ?? 0, ]; + // Check if the total nominal exceeds the available budget + if(array_sum($data_nominal) > BudgetHelper::getAvailableBudget()) { + session()->flash('error', 'The total nominal exceeds the available budget.'); + return redirect()->back(); + } + // Save the form data $form = FormUpCountry::create([ 'expense_number' => $expense_number, @@ -360,6 +368,12 @@ class FormUpCountryController extends Controller 'hotel' => $request->hotel ?? 0, ]; + // Check if the total nominal exceeds the available budget + if(array_sum($data_nominal) > BudgetHelper::getAvailableBudget()) { + session()->flash('error', 'The total nominal exceeds the available budget.'); + return redirect()->back(); + } + // Save the form data $form->update([ 'rayon_id' => $request->rayon_id, @@ -395,6 +409,12 @@ class FormUpCountryController extends Controller 'hotel' => $request->hotel ? $form->hotel : 0, ]; + // Check if the total nominal exceeds the available budget + if(array_sum($approved_data) > BudgetHelper::getAvailableBudget()) { + session()->flash('error', 'The total nominal exceeds the available budget.'); + return redirect()->back(); + } + $form->update([ 'approved_at' => now(), 'approved_by' => auth()->user()->id, diff --git a/app/Http/Controllers/Forms/FormVehicleController.php b/app/Http/Controllers/Forms/FormVehicleController.php index 3cf81ba..238fb86 100644 --- a/app/Http/Controllers/Forms/FormVehicleController.php +++ b/app/Http/Controllers/Forms/FormVehicleController.php @@ -23,6 +23,7 @@ use App\Helpers\WhatsappHelper; use App\Helpers\AuditTrailHelper; use App\Rules\FileType; use App\Models\Admin; +use App\Helpers\BudgetHelper; class FormVehicleController extends Controller { @@ -63,7 +64,8 @@ class FormVehicleController extends Controller session()->put('redirect_url', route('forms.vehicle')); return view('backend.pages.forms.vehicle.index', [ - 'forms' => $forms + 'forms' => $forms, + 'availableBudget' => BudgetHelper::getAvailableBudget(), ]); } @@ -103,7 +105,7 @@ class FormVehicleController extends Controller $request->validate([ 'tanggal' => 'required', 'liter' => 'required', - 'total' => 'required', + 'total' => 'required|numeric|min:1|max:' . BudgetHelper::getAvailableBudget(), 'jarak' => 'required', 'tipe_bensin' => 'required|in:pertalite,pertamax', 'nopol' => 'required', @@ -216,7 +218,7 @@ class FormVehicleController extends Controller $request->validate([ 'tanggal' => 'required', 'liter' => 'required', - 'total' => 'required', + 'total' => 'required|numeric|min:1|max:' . BudgetHelper::getAvailableBudget(), 'jarak' => 'required', 'tipe_bensin' => 'required|in:pertalite,pertamax', 'nopol' => 'required', @@ -273,7 +275,7 @@ class FormVehicleController extends Controller { $this->checkAuthorization(auth()->user(), ['approval.approve']); $request->validate([ - 'total' => 'required', + 'total' => 'required|numeric|min:1|max:' . BudgetHelper::getAvailableBudget(), ]); $form = FormVehicleRunningCost::findOrfail($id); diff --git a/resources/views/backend/pages/forms/entertainment/index.blade.php b/resources/views/backend/pages/forms/entertainment/index.blade.php index 573df7b..ddfb42c 100644 --- a/resources/views/backend/pages/forms/entertainment/index.blade.php +++ b/resources/views/backend/pages/forms/entertainment/index.blade.php @@ -24,7 +24,7 @@
Available Budget
+Available Budget
+Available Budget
+Available Budget
+Available Budget
+