checkAuthorization(auth()->user(), ['budget_control.view']); session()->put('redirect_url', route('budget_control')); // Get the budget control data // $budget = BudgetControl::orderBy('created_at', 'desc')->with(['user', 'cabang'])->get(); $role = auth()->user()->getRoleNames()[0]; $budget = null; if ($role == 'Admin Region' || $role == 'Marketing Operational Manager Region') { $region_id = auth()->user()->getMyCabangAndRegionId()['region']; if ($region_id) { // Get budget controls where the region matches $budget = BudgetControl::whereHas('cabang', function ($query) use ($region_id) { $query->where('region_id', $region_id); })->get(); } } elseif ($role == 'Area Manager Cabang') { $cabang_id = auth()->user()->getMyCabangAndRegionId()['cabang']; if ($cabang_id) { // Get budget controls where the cabang matches $budget = BudgetControl::where('cabang_id', $cabang_id)->get(); } } else { // Get all budget controls for other roles $budget = BudgetControl::all(); } // 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)); return view( 'backend.pages.budget_control.index', [ 'data' => $budget, 'usedBudget' => $usedBudget, 'availableBudget' => $budget->sum('amount') - $usedBudget, ] ); } public function log() { $this->checkAuthorization(auth()->user(), ['budget_control.view']); session()->put('redirect_url', route('budget_control')); return view( 'backend.pages.budget_control.log', [ 'data' => BudgetControlLog::orderBy('created_at', 'desc')->with(['user', 'cabang'])->get(), ] ); } public function create() { $this->checkAuthorization(auth()->user(), ['budget_control.create']); $users = Admin::getUserByRoleName('Area Manager Cabang'); return view('backend.pages.budget_control.create', [ 'users' => $users, ]); } public function store(Request $request) { $this->checkAuthorization(auth()->user(), ['budget_control.create']); $validated = $request->validate([ 'receiver_id' => 'required|exists:admins,id', 'periode_month' => 'required|string|in:january,february,march,april,may,june,july,august,september,october,november,december', 'periode_year' => 'required|numeric', 'amount' => 'required|numeric', 'remarks' => 'nullable|string', ]); $cabang_id = Admin::find($validated['receiver_id'])->getMyCabangAndRegionId()['cabang']; BudgetControl::updateOrCreate(['cabang_id' => $cabang_id], [ 'sender_id' => auth()->user()->id, 'receiver_id' => $validated['receiver_id'], 'periode_month' => $validated['periode_month'], 'periode_year' => $validated['periode_year'], 'amount' => $validated['amount'], 'remarks' => $validated['remarks'], 'closing_at' => null, 'status' => 'Assigned', ]); session()->flash('success', 'Budget has been added or updated successfully'); return redirect()->route('budget_control'); } public function destroy($id) { $this->checkAuthorization(auth()->user(), ['budget_control.delete']); $budgetRequest = BudgetControl::findOrfail($id); $budgetRequest->delete(); return redirect()->route('budget_control'); } }