diff --git a/app/Http/Controllers/Backend/BudgetControlController.php b/app/Http/Controllers/Backend/BudgetControlController.php index ec1b469..8cde750 100644 --- a/app/Http/Controllers/Backend/BudgetControlController.php +++ b/app/Http/Controllers/Backend/BudgetControlController.php @@ -53,12 +53,9 @@ class BudgetControlController extends Controller $startDate = Carbon::create($now->copy()->subMonth()->year, $now->copy()->subMonth()->month, $startDay)->startOfDay(); } - $periodeMonth = strtolower($startDate->format('F')); - $periodeYear = (int) $startDate->format('Y'); - // Hitung available budget berdasarkan periode - $budget->map(function ($b) use ($periodeMonth, $periodeYear) { - $b->availableBudget = BudgetHelper::getAvailableBudget($b->cabang_id, $periodeMonth, $periodeYear); + $budget->map(function ($b) { + $b->availableBudget = BudgetHelper::getAvailableBudget($b->cabang_id, $b->periode_month, $b->periode_year); return $b; }); diff --git a/app/Http/Controllers/Backend/ReportController.php b/app/Http/Controllers/Backend/ReportController.php index 712405b..de78b11 100644 --- a/app/Http/Controllers/Backend/ReportController.php +++ b/app/Http/Controllers/Backend/ReportController.php @@ -464,10 +464,9 @@ class ReportController extends Controller public function all() { - $role = auth()->user()->getRoleNames()[0]; - $cabangs = []; - $regions = []; - $forms = null; + $role = auth()->user()->getRoleNames()[0]; // Assuming Spatie Laravel-permission + $cabangs = collect(); // Initialize as an empty collection + $regions = collect(); // Initialize as an empty collection $availableBudget = 0; @@ -478,54 +477,84 @@ class ReportController extends Controller $cabang_id = auth()->user()->getMyCabangAndRegionId()['cabang'] ?? null; $userId = auth()->user()->id; + // Initialize the query for forms with eager loading + $formsQuery = FormOthers::with([ + 'user.region', // Eager load 'region' within 'user' + 'user.cabang', // Eager load 'cabang' within 'user' + 'kategori' + ]); + + // Apply role-based query logic for initial data if ($role == 'Admin Region' || $role == 'Marketing Operational Manager Region') { if ($region_id) { - $users = UserHasCabang::whereHas('cabang', function ($query) use ($region_id) { - $query->where('region_id', $region_id); - })->get(); - $userIds = $users->pluck('user_id')->toArray(); $cabangs = Cabang::where('region_id', $region_id)->get(); $regions = Region::where('id', $region_id)->get(); - $forms = FormHelper::getFormsByUserIds($userIds, $month, $year)->sortByDesc('created_at'); + $userIds = UserHasCabang::whereIn('cabang_id', $cabangs->pluck('id'))->pluck('user_id'); + $formsQuery->whereIn('user_id', $userIds); + } else { + // If no region found for Admin Region/MOM Region, return empty results + $cabangs = collect(); + $regions = collect(); + $formsQuery->whereRaw('1 = 0'); // Ensure no results are returned } } elseif ($role == 'Area Manager Cabang') { if ($cabang_id) { - $users = UserHasCabang::where('cabang_id', $cabang_id)->get(); - $userIds = $users->pluck('user_id')->toArray(); $cabangs = Cabang::where('id', $cabang_id)->get(); - $regions = Region::where('id', $cabangs[0]->region_id)->get(); - $forms = FormHelper::getFormsByUserIds($userIds, $month, $year)->sortByDesc('created_at'); + $regions = Region::where('id', $cabangs->first()->region_id)->get(); + $userIds = UserHasCabang::where('cabang_id', $cabang_id)->pluck('user_id'); + $formsQuery->whereIn('user_id', $userIds); + } else { + // If no cabang found for Area Manager, return empty results + $cabangs = collect(); + $regions = collect(); + $formsQuery->whereRaw('1 = 0'); // Ensure no results are returned } + } elseif ($role == 'Medical Representatif') { + // For Medical Representative, filter forms by their own user ID + $formsQuery->where('user_id', $userId); + // Cabangs and regions might be determined by the user's assigned cabang, or kept empty if not directly relevant to their view + // If a user is assigned to a specific cabang, you might want to fetch that. + // For now, let's keep them empty as per your original logic if not explicitly needed. + $cabangs = collect(); // Or fetch the user's assigned cabang: Cabang::find($cabang_id) + $regions = collect(); // Or fetch the region of the user's assigned cabang } else { + // Default for roles like 'Admin' or others without specific restrictions $cabangs = Cabang::all(); $regions = Region::all(); - $forms = FormHelper::getAllForms2()->sortByDesc('created_at'); + // No specific user_id filter needed here as it's for all forms } - // get all params in url + // Get all params in URL $params = request()->all(); + // Apply additional filters from URL parameters if ($params) { - // Filter by region - if (isset($params['region'])) { + // Filter by region (if parameter exists and no prior role-based region filter was applied for Admin Region/MOM) + // Or, if it's a general user (not Admin Region/MOM/Area Manager), allow filtering by region param + if (isset($params['region']) && (!in_array($role, ['Admin Region', 'Marketing Operational Manager Region', 'Area Manager Cabang']) || empty($region_id))) { $region = Region::where('code', $params['region'])->first(); if ($region) { $userIds = UserHasCabang::whereIn('cabang_id', Cabang::where('region_id', $region->id)->pluck('id'))->pluck('user_id')->toArray(); - $forms = $forms->whereIn('user_id', $userIds); + $formsQuery->whereIn('user_id', $userIds); + } else { + // If region param is provided but not found, ensure no results + $formsQuery->whereRaw('1 = 0'); } } - // Filter by cabang - if (isset($params['cabang'])) { + // Filter by cabang (if parameter exists and no prior role-based cabang filter was applied for Area Manager) + // Or, if it's a general user, allow filtering by cabang param + if (isset($params['cabang']) && (!in_array($role, ['Area Manager Cabang']) || empty($cabang_id))) { $cabang = Cabang::where('code', $params['cabang'])->first(); if ($cabang) { $userIds = UserHasCabang::where('cabang_id', $cabang->id)->pluck('user_id')->toArray(); - $forms = isset($forms) - ? $forms->whereIn('user_id', $userIds) - : FormHelper::getFormsByUserIds($userIds, $month, $year); - - // Ensure lowercase month + $formsQuery->whereIn('user_id', $userIds); + + // Ensure lowercase month for BudgetHelper $availableBudget = BudgetHelper::getAvailableBudget($cabang->id, strtolower($month), (int) $year); + } else { + // If cabang param is provided but not found, ensure no results + $formsQuery->whereRaw('1 = 0'); } } @@ -537,52 +566,43 @@ class ReportController extends Controller $startOfMonth = Carbon::parse("first day of $month $year")->startOfDay(); $endOfMonth = Carbon::parse("last day of $month $year")->endOfDay(); - if (isset($forms)) { - $dateColumn = Schema::hasColumn('forms', 'tanggal') ? 'tanggal' : 'created_at'; - $forms = $forms->whereBetween($dateColumn, [$startOfMonth, $endOfMonth]); - } else { - if ($role == 'Admin Region' || $role == 'Marketing Operational Manager Region') { - if ($region_id) { - $users = UserHasCabang::whereHas('cabang', function ($query) use ($region_id) { - $query->where('region_id', $region_id); - })->get(); - $userIds = $users->pluck('user_id')->toArray(); - $cabangs = Cabang::where('region_id', $region_id)->get(); - $regions = Region::where('id', $region_id)->get(); - $forms = FormHelper::getFormsByUserIds($userIds, $month, $year)->sortByDesc('tanggal')->sortByDesc('created_at'); - } - } elseif ($role == 'Area Manager Cabang') { - if ($cabang_id) { - $users = UserHasCabang::where('cabang_id', $cabang_id)->get(); - $userIds = $users->pluck('user_id')->toArray(); - $cabangs = Cabang::where('id', $cabang_id)->get(); - $regions = Region::where('id', $cabangs[0]->region_id)->get(); - $forms = FormHelper::getFormsByUserIds($userIds, $month, $year)->sortByDesc('tanggal')->sortByDesc('created_at'); - } - } elseif ($role == 'Medical Representatif') { - $cabangs = null; - $regions = null; - $forms = FormHelper::getFormsByUserIds([$userId], $month, $year)->sortByDesc('tanggal')->sortByDesc('created_at'); - } else { - $cabangs = Cabang::all(); - $regions = Region::all(); - $forms = FormHelper::getAllForms($month, $year)->sortByDesc('tanggal')->sortByDesc('created_at'); + $dateColumn = Schema::hasColumn('form_others', 'tanggal') ? 'tanggal' : 'created_at'; // Assuming your forms table is 'form_others' + $formsQuery->whereBetween($dateColumn, [$startOfMonth, $endOfMonth]); + + // Recalculate available budget if month/year changed and a cabang filter is present + if (isset($params['cabang'])) { + $cabang = Cabang::where('code', $params['cabang'])->first(); + if ($cabang) { + $availableBudget = BudgetHelper::getAvailableBudget($cabang->id, strtolower($month), (int) $year); + } + } elseif ($cabang_id) { // If Area Manager Cabang and no specific cabang param, use their assigned cabang + $cabang = Cabang::find($cabang_id); + if ($cabang) { + $availableBudget = BudgetHelper::getAvailableBudget($cabang->id, strtolower($month), (int) $year); } } } // Filter by status if (isset($params['status'])) { - $forms = isset($forms) ? $forms->where('status', $params['status']) : $forms; + $formsQuery->where('status', $params['status']); } } + // Get the forms after all filters have been applied + // Sort by 'tanggal' if it exists, otherwise by 'created_at' + $forms = $formsQuery->orderBy( + Schema::hasColumn('form_others', 'tanggal') ? 'tanggal' : 'created_at', + 'desc' + )->get(); + + return view('backend.pages.report.all', [ 'pageInfo' => [ 'title' => 'Generate Reports For All Forms', ], 'forms' => $forms, - 'cabang' => $cabangs, + 'cabangs' => $cabangs, // Note the plural 'cabangs' for the variable name 'regions' => $regions, 'availableBudget' => $availableBudget ]);