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
@@ -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
]);