update by CODEX
This commit is contained in:
@@ -41,64 +41,40 @@ class DashboardController extends Controller
|
||||
$closingDate = Carbon::create($now->year, $now->month, $closingDay)->endOfDay();
|
||||
}
|
||||
|
||||
$forms = [
|
||||
'vehicle' => FormVehicleRunningCost::whereMonth('tanggal', date('m'))
|
||||
->whereBetween('tanggal', [$startDate, $closingDate])
|
||||
->orderBy('tanggal', 'desc')
|
||||
->get(),
|
||||
'upcountry' => FormUpCountry::whereMonth('tanggal', date('m'))
|
||||
->whereBetween('tanggal', [$startDate, $closingDate])
|
||||
->orderBy('tanggal', 'desc')
|
||||
->get(),
|
||||
'entertainment' => FormEntertaimentPresentation::whereMonth('tanggal', date('m'))
|
||||
->whereBetween('tanggal', [$startDate, $closingDate])
|
||||
->orderBy('tanggal', 'desc')
|
||||
->get(),
|
||||
'meeting' => FormMeetingSeminar::whereMonth('created_at', date('m'))
|
||||
->whereBetween('created_at', [$startDate, $closingDate])
|
||||
->orderBy('created_at', 'desc')
|
||||
->get(),
|
||||
'others' => FormOthers::whereMonth('tanggal', date('m'))
|
||||
->whereBetween('tanggal', [$startDate, $closingDate])
|
||||
->orderBy('tanggal', 'desc')
|
||||
->get(),
|
||||
$formQueries = [
|
||||
'vehicle' => FormVehicleRunningCost::query()
|
||||
->whereMonth('tanggal', date('m'))
|
||||
->whereBetween('tanggal', [$startDate, $closingDate]),
|
||||
'upcountry' => FormUpCountry::query()
|
||||
->whereMonth('tanggal', date('m'))
|
||||
->whereBetween('tanggal', [$startDate, $closingDate]),
|
||||
'entertainment' => FormEntertaimentPresentation::query()
|
||||
->whereMonth('tanggal', date('m'))
|
||||
->whereBetween('tanggal', [$startDate, $closingDate]),
|
||||
'meeting' => FormMeetingSeminar::query()
|
||||
->whereMonth('created_at', date('m'))
|
||||
->whereBetween('created_at', [$startDate, $closingDate]),
|
||||
'others' => FormOthers::query()
|
||||
->whereMonth('tanggal', date('m'))
|
||||
->whereBetween('tanggal', [$startDate, $closingDate]),
|
||||
];
|
||||
|
||||
if ($role == 'Admin Region' || $role == 'Marketing Operational Manager Region') {
|
||||
$region_id = auth()->user()->getMyCabangAndRegionId()['region'];
|
||||
$approvedStatuses = [
|
||||
// 'Approved',
|
||||
// 'Approved 1',
|
||||
// 'Approved 2',
|
||||
// 'Final Approved',
|
||||
// 'Final Approve',
|
||||
'Closed',
|
||||
];
|
||||
|
||||
if ($region_id) {
|
||||
$users = UserHasCabang::whereHas('cabang', function ($query) use ($region_id) {
|
||||
$query->where('region_id', $region_id);
|
||||
})->pluck('user_id');
|
||||
$forms = [];
|
||||
|
||||
foreach ($forms as $key => $query) {
|
||||
$forms[$key] = $query->whereIn('user_id', $users)->whereIn('status', ['Approved', 'Closed']);
|
||||
}
|
||||
}
|
||||
} elseif ($role == 'Area Manager Cabang') {
|
||||
$cabang_id = auth()->user()->getMyCabangAndRegionId()['cabang'];
|
||||
|
||||
if ($cabang_id) {
|
||||
$users = UserHasCabang::where('cabang_id', $cabang_id)->pluck('user_id');
|
||||
|
||||
foreach ($forms as $key => $query) {
|
||||
$forms[$key] = $query->whereIn('user_id', $users)->whereIn('status', ['Approved', 'Closed']);
|
||||
}
|
||||
}
|
||||
} elseif ($role == 'Medical Representatif') {
|
||||
foreach ($forms as $key => $query) {
|
||||
$forms[$key] = $query->where('user_id', auth()->user()->id)->whereIn('status', ['Approved', 'Closed']);
|
||||
}
|
||||
} else {
|
||||
foreach ($forms as $key => $query) {
|
||||
$forms[$key] = $query->whereIn('status', ['Approved', 'Closed']);
|
||||
}
|
||||
}
|
||||
|
||||
// Sum the filtered queries
|
||||
foreach ($forms as $key => $query) {
|
||||
$forms[$key] = $query->sum('approved_total');
|
||||
foreach ($formQueries as $key => $query) {
|
||||
$forms[$key] = $query
|
||||
->whereIn('status', $approvedStatuses)
|
||||
->whereNotNull('final_approved_at')
|
||||
->sum('approved_total');
|
||||
}
|
||||
|
||||
return view(
|
||||
|
||||
@@ -465,147 +465,147 @@ class ReportController extends Controller
|
||||
|
||||
public function all()
|
||||
{
|
||||
$role = auth()->user()->getRoleNames()[0]; // Assuming Spatie Laravel-permission
|
||||
$cabangs = collect(); // Initialize as an empty collection
|
||||
$regions = collect(); // Initialize as an empty collection
|
||||
|
||||
$role = auth()->user()->getRoleNames()[0];
|
||||
$cabangs = collect();
|
||||
$regions = collect();
|
||||
$availableBudget = 0;
|
||||
|
||||
$month = strtolower(date('F')); // convert to lowercase for DB compatibility
|
||||
$year = (int) date('Y');
|
||||
$currentMonthKey = strtolower(date('F'));
|
||||
$currentYear = (int) date('Y');
|
||||
|
||||
$region_id = auth()->user()->getMyCabangAndRegionId()['region'] ?? null;
|
||||
$cabang_id = auth()->user()->getMyCabangAndRegionId()['cabang'] ?? null;
|
||||
$userRegionData = auth()->user()->getMyCabangAndRegionId();
|
||||
$region_id = isset($userRegionData['region']) && $userRegionData['region'] !== '-' ? (int) $userRegionData['region'] : null;
|
||||
$cabang_id = isset($userRegionData['cabang']) && $userRegionData['cabang'] !== '-' ? (int) $userRegionData['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'
|
||||
]);
|
||||
$userFilter = null;
|
||||
$statusFilter = null;
|
||||
$dateRange = null;
|
||||
$selectedMonth = $currentMonthKey;
|
||||
$selectedYear = $currentYear;
|
||||
|
||||
$monthLookup = [
|
||||
'january' => 'January',
|
||||
'february' => 'February',
|
||||
'march' => 'March',
|
||||
'april' => 'April',
|
||||
'may' => 'May',
|
||||
'june' => 'June',
|
||||
'july' => 'July',
|
||||
'august' => 'August',
|
||||
'september' => 'September',
|
||||
'october' => 'October',
|
||||
'november' => 'November',
|
||||
'december' => 'December',
|
||||
];
|
||||
|
||||
$applyUserFilter = static function (array $ids) use (&$userFilter): void {
|
||||
$ids = array_values(array_unique(array_filter($ids, static fn ($id) => !is_null($id))));
|
||||
|
||||
if (empty($ids)) {
|
||||
$userFilter = [];
|
||||
return;
|
||||
}
|
||||
|
||||
if (is_null($userFilter)) {
|
||||
$userFilter = $ids;
|
||||
} else {
|
||||
$userFilter = array_values(array_intersect($userFilter, $ids));
|
||||
}
|
||||
};
|
||||
|
||||
// Apply role-based query logic for initial data
|
||||
if ($role == 'Admin Region' || $role == 'Marketing Operational Manager Region') {
|
||||
if ($region_id) {
|
||||
$cabangs = Cabang::where('region_id', $region_id)->get();
|
||||
$regions = Region::where('id', $region_id)->get();
|
||||
$userIds = UserHasCabang::whereIn('cabang_id', $cabangs->pluck('id'))->pluck('user_id');
|
||||
$formsQuery->whereIn('user_id', $userIds);
|
||||
$userIds = UserHasCabang::whereIn('cabang_id', $cabangs->pluck('id'))->pluck('user_id')->toArray();
|
||||
$applyUserFilter($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
|
||||
$userFilter = [];
|
||||
}
|
||||
} elseif ($role == 'Area Manager Cabang') {
|
||||
if ($cabang_id) {
|
||||
$cabangs = Cabang::where('id', $cabang_id)->get();
|
||||
$regions = Region::where('id', $cabangs->first()->region_id)->get();
|
||||
$userIds = UserHasCabang::where('cabang_id', $cabang_id)->pluck('user_id');
|
||||
$formsQuery->whereIn('user_id', $userIds);
|
||||
$regions = $cabangs->isNotEmpty() ? Region::where('id', $cabangs->first()->region_id)->get() : collect();
|
||||
$userIds = UserHasCabang::where('cabang_id', $cabang_id)->pluck('user_id')->toArray();
|
||||
$applyUserFilter($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
|
||||
$userFilter = [];
|
||||
}
|
||||
} 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
|
||||
$applyUserFilter([$userId]);
|
||||
$cabangs = collect();
|
||||
$regions = collect();
|
||||
} else {
|
||||
// Default for roles like 'Admin' or others without specific restrictions
|
||||
$cabangs = Cabang::all();
|
||||
$regions = Region::all();
|
||||
// No specific user_id filter needed here as it's for all forms
|
||||
}
|
||||
|
||||
// Get all params in URL
|
||||
$params = request()->all();
|
||||
|
||||
// Apply additional filters from URL parameters
|
||||
if ($params) {
|
||||
// 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();
|
||||
$formsQuery->whereIn('user_id', $userIds);
|
||||
} else {
|
||||
// If region param is provided but not found, ensure no results
|
||||
$formsQuery->whereRaw('1 = 0');
|
||||
}
|
||||
}
|
||||
if (!empty($params['region'])) {
|
||||
$selectedRegion = Region::where('code', $params['region'])->first();
|
||||
$regionUserIds = $selectedRegion
|
||||
? UserHasCabang::whereIn('cabang_id', Cabang::where('region_id', $selectedRegion->id)->pluck('id'))->pluck('user_id')->toArray()
|
||||
: [];
|
||||
$applyUserFilter($regionUserIds);
|
||||
|
||||
// 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();
|
||||
$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');
|
||||
}
|
||||
}
|
||||
|
||||
// Filter by date range
|
||||
if (isset($params['month']) || isset($params['year'])) {
|
||||
$month = strtolower($params['month'] ?? date('F'));
|
||||
$year = (int) ($params['year'] ?? date('Y'));
|
||||
|
||||
$startOfMonth = Carbon::parse("first day of $month $year")->startOfDay();
|
||||
$endOfMonth = Carbon::parse("last day of $month $year")->endOfDay();
|
||||
|
||||
$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'])) {
|
||||
$formsQuery->where('status', $params['status']);
|
||||
if ($selectedRegion && ($regions->isEmpty() || in_array($role, ['Superadmin', 'Admin'], true))) {
|
||||
$regions = Region::all();
|
||||
}
|
||||
}
|
||||
|
||||
// Get the forms after all filters have been applied
|
||||
// Sort by 'tanggal' if it exists, otherwise by 'created_at'
|
||||
|
||||
$tables = [
|
||||
if (!empty($params['month']) || !empty($params['year'])) {
|
||||
$selectedMonth = strtolower($params['month'] ?? $selectedMonth);
|
||||
$selectedYear = (int) ($params['year'] ?? $selectedYear);
|
||||
|
||||
if (!isset($monthLookup[$selectedMonth])) {
|
||||
$selectedMonth = $currentMonthKey;
|
||||
}
|
||||
|
||||
$monthName = $monthLookup[$selectedMonth];
|
||||
$startOfMonth = Carbon::parse("first day of {$monthName} {$selectedYear}")->startOfDay();
|
||||
$endOfMonth = Carbon::parse("last day of {$monthName} {$selectedYear}")->endOfDay();
|
||||
$dateRange = [$startOfMonth, $endOfMonth];
|
||||
}
|
||||
|
||||
if (!empty($params['cabang'])) {
|
||||
$selectedCabang = Cabang::where('code', $params['cabang'])->first();
|
||||
$cabangUserIds = $selectedCabang
|
||||
? UserHasCabang::where('cabang_id', $selectedCabang->id)->pluck('user_id')->toArray()
|
||||
: [];
|
||||
$applyUserFilter($cabangUserIds);
|
||||
|
||||
if ($selectedCabang) {
|
||||
$availableBudget = BudgetHelper::getAvailableBudget($selectedCabang->id, $selectedMonth, $selectedYear);
|
||||
}
|
||||
} elseif ($cabang_id && $dateRange) {
|
||||
$cabang = Cabang::find($cabang_id);
|
||||
if ($cabang) {
|
||||
$availableBudget = BudgetHelper::getAvailableBudget($cabang->id, $selectedMonth, $selectedYear);
|
||||
}
|
||||
}
|
||||
|
||||
if (!empty($params['status'])) {
|
||||
$statusFilter = $params['status'];
|
||||
}
|
||||
|
||||
$tables = [
|
||||
'form_others',
|
||||
'form_up_country',
|
||||
'form_vehicle_running_cost',
|
||||
'form_meeting_seminar',
|
||||
'form_entertainment_presentation'
|
||||
'form_entertainment_presentation',
|
||||
];
|
||||
|
||||
$formsQuery = null;
|
||||
|
||||
foreach ($tables as $table) {
|
||||
$dateColumn = Schema::hasColumn($table, 'tanggal') ? 'tanggal' : 'created_at';
|
||||
|
||||
$query = DB::table($table)
|
||||
->selectRaw("
|
||||
id,
|
||||
expense_number,
|
||||
'$table' as type,
|
||||
user_id,
|
||||
@@ -613,40 +613,62 @@ class ReportController extends Controller
|
||||
approved_total,
|
||||
account_number,
|
||||
status,
|
||||
$dateColumn as report_date,
|
||||
created_at
|
||||
");
|
||||
|
||||
if (!is_null($userFilter)) {
|
||||
$query->whereIn('user_id', $userFilter);
|
||||
}
|
||||
|
||||
if ($statusFilter !== null) {
|
||||
$query->where('status', $statusFilter);
|
||||
}
|
||||
|
||||
if ($dateRange) {
|
||||
$query->whereBetween($dateColumn, $dateRange);
|
||||
}
|
||||
|
||||
if (Schema::hasColumn($table, 'deleted_at')) {
|
||||
$query->whereNull('deleted_at');
|
||||
}
|
||||
|
||||
$formsQuery = $formsQuery
|
||||
? $formsQuery->unionAll($query)
|
||||
: $query;
|
||||
}
|
||||
|
||||
$forms = DB::query()
|
||||
->fromSub($formsQuery, 'forms')
|
||||
->join('admins', 'admins.id', '=', 'forms.user_id')
|
||||
->select('forms.*', 'admins.id as admin_id')
|
||||
->orderBy('forms.created_at', 'desc')
|
||||
->paginate(100);
|
||||
if (!$formsQuery) {
|
||||
$forms = collect();
|
||||
} else {
|
||||
$forms = DB::query()
|
||||
->fromSub($formsQuery, 'forms')
|
||||
->join('admins', 'admins.id', '=', 'forms.user_id')
|
||||
->select('forms.*', 'admins.id as admin_id')
|
||||
->orderByDesc('forms.report_date')
|
||||
->paginate(100)
|
||||
->appends($params);
|
||||
|
||||
|
||||
|
||||
// inject relasi Admin model ke setiap item
|
||||
$forms->getCollection()->transform(function ($item) {
|
||||
$item->user = \App\Models\Admin::with(['region', 'rayon.region'])->find($item->admin_id);
|
||||
$item->type = ucwords(str_replace('_', ' ', str_replace('form_', '', $item->type)));
|
||||
|
||||
return $item;
|
||||
});
|
||||
$forms->getCollection()->transform(function ($item) {
|
||||
$item->user = \App\Models\Admin::with([
|
||||
'region.cabang.region',
|
||||
'cabang.cabang.region',
|
||||
'rayon.region',
|
||||
])->find($item->admin_id);
|
||||
$item->type = ucwords(str_replace('_', ' ', str_replace('form_', '', $item->type)));
|
||||
|
||||
return $item;
|
||||
});
|
||||
}
|
||||
|
||||
return view('backend.pages.report.all', [
|
||||
'pageInfo' => [
|
||||
'title' => 'Generate Reports For All Forms',
|
||||
],
|
||||
'forms' => $forms,
|
||||
'cabangs' => $cabangs, // Note the plural 'cabangs' for the variable name
|
||||
'cabangs' => $cabangs,
|
||||
'regions' => $regions,
|
||||
'availableBudget' => $availableBudget
|
||||
'availableBudget' => $availableBudget,
|
||||
]);
|
||||
}
|
||||
|
||||
@@ -670,6 +692,22 @@ class ReportController extends Controller
|
||||
$cabangs = Cabang::where('id', $cabang_id)->get();
|
||||
$regions = Region::where('id', $cabangs[0]->region_id)->get();
|
||||
}
|
||||
} else if ($role == 'Superadmin') {
|
||||
$regions = Region::all();
|
||||
$cabangs = collect();
|
||||
$selectedRegionCode = request()->get('region');
|
||||
|
||||
if ($selectedRegionCode) {
|
||||
$selectedRegion = Region::where('code', $selectedRegionCode)->first();
|
||||
|
||||
if ($selectedRegion) {
|
||||
$cabangs = Cabang::where('region_id', $selectedRegion->id)->get();
|
||||
} else {
|
||||
$cabangs = Cabang::all();
|
||||
}
|
||||
} else {
|
||||
$cabangs = Cabang::all();
|
||||
}
|
||||
} else {
|
||||
$cabangs = Cabang::all();
|
||||
$regions = Region::all();
|
||||
@@ -689,8 +727,18 @@ class ReportController extends Controller
|
||||
{
|
||||
$params = request()->all();
|
||||
|
||||
$kategoris = Kategori::all();
|
||||
$kategori_bca = Kategori::where('name', 'Cash in Bank BCA')->first();
|
||||
$excludedCategories = [
|
||||
'Cash in Bank BCA',
|
||||
'Donasi/Gift',
|
||||
'PPn Masukan',
|
||||
'Vehicle Maintenance',
|
||||
'Bahan Promosi',
|
||||
'Sponsorship',
|
||||
'Presentation',
|
||||
];
|
||||
|
||||
$kategoris = Kategori::whereNotIn('name', $excludedCategories)->get();
|
||||
$cabang = Cabang::with('cost')->where('code', $params['cabang'])->firstOrFail();
|
||||
|
||||
$year = $params['year'];
|
||||
|
||||
Reference in New Issue
Block a user