checkAuthorization(auth()->user(), ['budget_control.view']); session()->put('redirect_url', route('budget_control')); $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) { $budget = BudgetControl::whereHas('cabang', function ($query) use ($region_id) { $query->where('region_id', $region_id); })->with(['receiver', 'sender', 'cabang'])->get(); } } elseif ($role == 'Area Manager Cabang') { $cabang_id = auth()->user()->getMyCabangAndRegionId()['cabang']; if ($cabang_id) { $budget = BudgetControl::where('cabang_id', $cabang_id) ->with(['receiver', 'sender', 'cabang']) ->get(); } } else { $budget = BudgetControl::with(['receiver', 'sender', 'cabang'])->get(); } // Calculate usedBudget and availableBudget for each cabang $budget->map(function ($b) { $b->availableBudget = BudgetHelper::getAvailableBudget($b->cabang_id); return $b; }); return view('backend.pages.budget_control.index', [ 'data' => $budget, ]); } 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(['receiver', 'sender', 'cabang'])->get(), ] ); } public function create() { $this->checkAuthorization(auth()->user(), ['budget_control.create']); $role = auth()->user()->getRoleNames()[0]; if ($role == 'Admin Region' || $role == 'Marketing Operational Manager Region') { $region_id = auth()->user()->getMyCabangAndRegionId()['region']; if ($region_id) { // only show users from the same region $users = Admin::where('id', '!=', auth()->user()->id) ->whereHas('cabang', function ($query) use ($region_id) { $query->where('region_id', $region_id); }) ->get(); } else { $users = Admin::getUserByRoleName('Area Manager Cabang'); } } elseif ($role == 'Area Manager Cabang') { $cabang_id = auth()->user()->getMyCabangAndRegionId()['cabang']; if ($cabang_id) { // only show users from the same cabang $users = Admin::where('id', '!=', auth()->user()->id) ->whereHas('cabang', function ($query) use ($cabang_id) { $query->where('id', $cabang_id); }) ->get(); } } else { $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']; $periode = [ 'periode_month' => $validated['periode_month'], 'periode_year' => $validated['periode_year'], ]; BudgetControl::updateOrCreate( array_merge(['cabang_id' => $cabang_id], $periode), array_merge($periode, [ 'sender_id' => auth()->user()->id, 'receiver_id' => $validated['receiver_id'], 'amount' => $validated['amount'], 'remarks' => $validated['remarks'], 'closing_at' => null, 'status' => 'Assigned', ]) ); BudgetControlLog::create([ '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'); } }