fix filter role

This commit is contained in:
Jagad R R
2025-07-21 19:47:08 +07:00
parent 738d53a67a
commit f8da120227
2 changed files with 79 additions and 62 deletions
@@ -53,12 +53,9 @@ class BudgetControlController extends Controller
$startDate = Carbon::create($now->copy()->subMonth()->year, $now->copy()->subMonth()->month, $startDay)->startOfDay(); $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 // Hitung available budget berdasarkan periode
$budget->map(function ($b) use ($periodeMonth, $periodeYear) { $budget->map(function ($b) {
$b->availableBudget = BudgetHelper::getAvailableBudget($b->cabang_id, $periodeMonth, $periodeYear); $b->availableBudget = BudgetHelper::getAvailableBudget($b->cabang_id, $b->periode_month, $b->periode_year);
return $b; return $b;
}); });
@@ -464,10 +464,9 @@ class ReportController extends Controller
public function all() public function all()
{ {
$role = auth()->user()->getRoleNames()[0]; $role = auth()->user()->getRoleNames()[0]; // Assuming Spatie Laravel-permission
$cabangs = []; $cabangs = collect(); // Initialize as an empty collection
$regions = []; $regions = collect(); // Initialize as an empty collection
$forms = null;
$availableBudget = 0; $availableBudget = 0;
@@ -478,54 +477,84 @@ class ReportController extends Controller
$cabang_id = auth()->user()->getMyCabangAndRegionId()['cabang'] ?? null; $cabang_id = auth()->user()->getMyCabangAndRegionId()['cabang'] ?? null;
$userId = auth()->user()->id; $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 ($role == 'Admin Region' || $role == 'Marketing Operational Manager Region') {
if ($region_id) { 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(); $cabangs = Cabang::where('region_id', $region_id)->get();
$regions = Region::where('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') { } elseif ($role == 'Area Manager Cabang') {
if ($cabang_id) { if ($cabang_id) {
$users = UserHasCabang::where('cabang_id', $cabang_id)->get();
$userIds = $users->pluck('user_id')->toArray();
$cabangs = Cabang::where('id', $cabang_id)->get(); $cabangs = Cabang::where('id', $cabang_id)->get();
$regions = Region::where('id', $cabangs[0]->region_id)->get(); $regions = Region::where('id', $cabangs->first()->region_id)->get();
$forms = FormHelper::getFormsByUserIds($userIds, $month, $year)->sortByDesc('created_at'); $userIds = UserHasCabang::where('cabang_id', $cabang_id)->pluck('user_id');
} $formsQuery->whereIn('user_id', $userIds);
} else { } 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(); $cabangs = Cabang::all();
$regions = Region::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(); $params = request()->all();
// Apply additional filters from URL parameters
if ($params) { if ($params) {
// Filter by region // Filter by region (if parameter exists and no prior role-based region filter was applied for Admin Region/MOM)
if (isset($params['region'])) { // 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(); $region = Region::where('code', $params['region'])->first();
if ($region) { if ($region) {
$userIds = UserHasCabang::whereIn('cabang_id', Cabang::where('region_id', $region->id)->pluck('id'))->pluck('user_id')->toArray(); $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 // Filter by cabang (if parameter exists and no prior role-based cabang filter was applied for Area Manager)
if (isset($params['cabang'])) { // 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(); $cabang = Cabang::where('code', $params['cabang'])->first();
if ($cabang) { if ($cabang) {
$userIds = UserHasCabang::where('cabang_id', $cabang->id)->pluck('user_id')->toArray(); $userIds = UserHasCabang::where('cabang_id', $cabang->id)->pluck('user_id')->toArray();
$forms = isset($forms) $formsQuery->whereIn('user_id', $userIds);
? $forms->whereIn('user_id', $userIds)
: FormHelper::getFormsByUserIds($userIds, $month, $year);
// Ensure lowercase month // Ensure lowercase month for BudgetHelper
$availableBudget = BudgetHelper::getAvailableBudget($cabang->id, strtolower($month), (int) $year); $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(); $startOfMonth = Carbon::parse("first day of $month $year")->startOfDay();
$endOfMonth = Carbon::parse("last day of $month $year")->endOfDay(); $endOfMonth = Carbon::parse("last day of $month $year")->endOfDay();
if (isset($forms)) { $dateColumn = Schema::hasColumn('form_others', 'tanggal') ? 'tanggal' : 'created_at'; // Assuming your forms table is 'form_others'
$dateColumn = Schema::hasColumn('forms', 'tanggal') ? 'tanggal' : 'created_at'; $formsQuery->whereBetween($dateColumn, [$startOfMonth, $endOfMonth]);
$forms = $forms->whereBetween($dateColumn, [$startOfMonth, $endOfMonth]);
} else { // Recalculate available budget if month/year changed and a cabang filter is present
if ($role == 'Admin Region' || $role == 'Marketing Operational Manager Region') { if (isset($params['cabang'])) {
if ($region_id) { $cabang = Cabang::where('code', $params['cabang'])->first();
$users = UserHasCabang::whereHas('cabang', function ($query) use ($region_id) { if ($cabang) {
$query->where('region_id', $region_id); $availableBudget = BudgetHelper::getAvailableBudget($cabang->id, strtolower($month), (int) $year);
})->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') { } elseif ($cabang_id) { // If Area Manager Cabang and no specific cabang param, use their assigned cabang
if ($cabang_id) { $cabang = Cabang::find($cabang_id);
$users = UserHasCabang::where('cabang_id', $cabang_id)->get(); if ($cabang) {
$userIds = $users->pluck('user_id')->toArray(); $availableBudget = BudgetHelper::getAvailableBudget($cabang->id, strtolower($month), (int) $year);
$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');
} }
} }
} }
// Filter by status // Filter by status
if (isset($params['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', [ return view('backend.pages.report.all', [
'pageInfo' => [ 'pageInfo' => [
'title' => 'Generate Reports For All Forms', 'title' => 'Generate Reports For All Forms',
], ],
'forms' => $forms, 'forms' => $forms,
'cabang' => $cabangs, 'cabangs' => $cabangs, // Note the plural 'cabangs' for the variable name
'regions' => $regions, 'regions' => $regions,
'availableBudget' => $availableBudget 'availableBudget' => $availableBudget
]); ]);