fix filter role
This commit is contained in:
@@ -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
|
||||||
]);
|
]);
|
||||||
|
|||||||
Reference in New Issue
Block a user