add pengecekan jika melebihi budget

This commit is contained in:
Jagad R R
2025-01-09 14:17:28 +07:00
parent 154b3a274b
commit 210203f964
11 changed files with 203 additions and 30 deletions
+67
View File
@@ -0,0 +1,67 @@
<?php
namespace App\Helpers;
use GuzzleHttp\Client;
use GuzzleHttp\Exception\RequestException;
use Illuminate\Support\Str;
use App\Models\BudgetControl;
use App\Models\FormUpCountry;
use App\Models\FormMeetingSeminar;
use App\Models\FormOthers;
use App\Models\FormEntertaimentPresentation;
use App\Models\FormVehicleRunningCost;
class BudgetHelper
{
public static function getAvailableBudget()
{
// Get the budget control data
$budget = BudgetControl::orderBy('created_at', 'desc')->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;
}
}
@@ -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);
@@ -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,
@@ -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);
@@ -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,
@@ -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);