Files
expense/app/Http/Controllers/Backend/BudgetControlController.php
T
Jagad R R d2ff42f58b update
2025-03-06 16:24:55 +07:00

136 lines
4.0 KiB
PHP

<?php
declare(strict_types=1);
namespace App\Http\Controllers\Backend;
use App\Helpers\BudgetHelper;
use App\Http\Controllers\Controller;
use App\Models\BudgetControl;
use App\Models\BudgetControlLog;
use App\Models\Admin;
use Illuminate\Http\Request;
use App\Models\FormUpCountry;
use App\Models\FormMeetingSeminar;
use App\Models\FormOthers;
use App\Models\FormEntertaimentPresentation;
use App\Models\FormVehicleRunningCost;
use App\Models\UserHasCabang;
class BudgetControlController extends Controller
{
public function index()
{
$this->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']);
$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',
]);
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');
}
}