Files
expense/app/Http/Controllers/Backend/BudgetControlController.php
T

178 lines
5.3 KiB
PHP
Raw Normal View History

2025-01-07 17:23:42 +07:00
<?php
declare(strict_types=1);
namespace App\Http\Controllers\Backend;
2025-01-15 22:29:07 +07:00
use App\Helpers\BudgetHelper;
2025-01-07 17:23:42 +07:00
use App\Http\Controllers\Controller;
use App\Models\BudgetControl;
use App\Models\BudgetControlLog;
use App\Models\Admin;
use Illuminate\Http\Request;
2025-05-25 15:14:23 +07:00
use Illuminate\Support\Carbon;
2025-01-07 17:23:42 +07:00
class BudgetControlController extends Controller
{
public function index()
{
$this->checkAuthorization(auth()->user(), ['budget_control.view']);
session()->put('redirect_url', route('budget_control'));
2025-01-15 14:50:53 +07:00
$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);
2025-01-15 22:29:07 +07:00
})->with(['receiver', 'sender', 'cabang'])->get();
2025-01-15 14:50:53 +07:00
}
} elseif ($role == 'Area Manager Cabang') {
$cabang_id = auth()->user()->getMyCabangAndRegionId()['cabang'];
if ($cabang_id) {
2025-01-15 22:29:07 +07:00
$budget = BudgetControl::where('cabang_id', $cabang_id)
->with(['receiver', 'sender', 'cabang'])
->get();
2025-01-15 14:50:53 +07:00
}
} else {
2025-01-15 22:29:07 +07:00
$budget = BudgetControl::with(['receiver', 'sender', 'cabang'])->get();
2025-01-15 14:50:53 +07:00
}
2025-01-07 17:23:42 +07:00
2025-05-25 15:14:23 +07:00
// Tentukan periode berdasarkan start dan closing date
$startDay = (int) env('STARTING_DATE', 11);
$closingDay = (int) env('CLOSING_DATE', 10);
$now = Carbon::now();
2025-01-15 22:29:07 +07:00
2025-05-25 15:14:23 +07:00
if ($now->day >= $startDay) {
$startDate = Carbon::create($now->year, $now->month, $startDay)->startOfDay();
} else {
$startDate = Carbon::create($now->copy()->subMonth()->year, $now->copy()->subMonth()->month, $startDay)->startOfDay();
}
2025-05-26 19:42:30 +07:00
$periodeMonth = strtolower($startDate->format('F'));
$periodeYear = (int) $startDate->format('Y');
2025-05-25 15:14:23 +07:00
// Hitung available budget berdasarkan periode
$budget->map(function ($b) use ($periodeMonth, $periodeYear) {
$b->availableBudget = BudgetHelper::getAvailableBudget($b->cabang_id, $periodeMonth, $periodeYear);
2025-01-15 22:29:07 +07:00
return $b;
});
2025-01-07 17:23:42 +07:00
2025-01-15 22:29:07 +07:00
return view('backend.pages.budget_control.index', [
'data' => $budget,
]);
2025-01-07 17:23:42 +07:00
}
public function log()
{
$this->checkAuthorization(auth()->user(), ['budget_control.view']);
session()->put('redirect_url', route('budget_control'));
return view(
'backend.pages.budget_control.log',
[
2025-01-15 22:29:07 +07:00
'data' => BudgetControlLog::orderBy('created_at', 'desc')->with(['receiver', 'sender', 'cabang'])->get(),
2025-01-07 17:23:42 +07:00
]
);
}
public function create()
{
$this->checkAuthorization(auth()->user(), ['budget_control.create']);
2025-05-08 20:18:03 +07:00
$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');
}
2025-01-07 17:23:42 +07:00
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'];
2025-05-14 19:33:12 +07:00
$periode = [
2025-01-07 17:23:42 +07:00
'periode_month' => $validated['periode_month'],
'periode_year' => $validated['periode_year'],
2025-05-14 19:33:12 +07:00
];
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',
])
);
2025-01-07 17:23:42 +07:00
2025-03-06 16:24:55 +07:00
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',
]);
2025-01-07 17:23:42 +07:00
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');
}
}