user()->getRoleNames()[0]; $cabangs = collect(); // Default empty collection $regions = collect(); // Default empty collection $formsQuery = FormUpCountry::with([ 'user.region', 'user.cabang', 'rayon' ]); if ($role == 'Admin Region' || $role == 'Marketing Operational Manager Region') { $region_id = auth()->user()->getMyCabangAndRegionId()['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); } } elseif ($role == 'Area Manager Cabang') { $cabang_id = auth()->user()->getMyCabangAndRegionId()['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); } } else { $cabangs = Cabang::all(); $regions = Region::all(); } // Apply filters from URL params $params = request()->all(); if (isset($params['region'])) { $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'); $formsQuery->whereIn('user_id', $userIds); } } if (isset($params['cabang'])) { $cabang = Cabang::where('code', $params['cabang'])->first(); if ($cabang) { $userIds = UserHasCabang::where('cabang_id', $cabang->id)->pluck('user_id'); $formsQuery->whereIn('user_id', $userIds); } } if (isset($params['start_date']) || isset($params['end_date'])) { $startDate = $params['start_date'] ?? null; $endDate = $params['end_date'] ?? null; if ($startDate && $endDate) { $formsQuery->whereBetween('tanggal', [$startDate, $endDate]); } elseif ($startDate) { $formsQuery->where('tanggal', '>=', $startDate); } elseif ($endDate) { $formsQuery->where('tanggal', '<=', $endDate); } } if (isset($params['status'])) { $formsQuery->where('status', $params['status']); } // Fetch forms after applying all filters $forms = $formsQuery->get(); return view('backend.pages.report.upcountry', [ 'pageInfo' => [ 'title' => 'Generate Reports For Form Up Country', ], 'forms' => $forms, 'cabang' => $cabangs, 'regions' => $regions ]); } public function vehicle() { $role = auth()->user()->getRoleNames()[0]; $cabangs = collect(); // Default empty collection $regions = collect(); // Default empty collection $formsQuery = FormVehicleRunningCost::with([ 'user.region', // Eager load 'region' within 'user' 'user.cabang', // Eager load 'cabang' within 'user' ]); // Apply role-based query logic if ($role == 'Admin Region' || $role == 'Marketing Operational Manager Region') { $region_id = auth()->user()->getMyCabangAndRegionId()['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); } } elseif ($role == 'Area Manager Cabang') { $cabang_id = auth()->user()->getMyCabangAndRegionId()['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); } } else { // Default behavior for other roles (if no specific role is matched) $cabangs = Cabang::all(); $regions = Region::all(); } // Get all params in URL for filtering $params = request()->all(); if ($params) { // Filter by region if (isset($params['region'])) { $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'); $formsQuery->whereIn('user_id', $userIds); } } // Filter by cabang if (isset($params['cabang'])) { $cabang = Cabang::where('code', $params['cabang'])->first(); if ($cabang) { $userIds = UserHasCabang::where('cabang_id', $cabang->id)->pluck('user_id'); $formsQuery->whereIn('user_id', $userIds); } } // Filter by date range if (isset($params['start_date']) || isset($params['end_date'])) { $startDate = $params['start_date'] ?? null; $endDate = $params['end_date'] ?? null; if ($startDate && $endDate) { $formsQuery->whereBetween('tanggal', [$startDate, $endDate]); } elseif ($startDate) { $formsQuery->where('tanggal', '>=', $startDate); } elseif ($endDate) { $formsQuery->where('tanggal', '<=', $endDate); } } // Filter by status if (isset($params['status'])) { $formsQuery->where('status', $params['status']); } } // Fetch forms after applying all filters $forms = $formsQuery->get(); return view('backend.pages.report.vehicle', [ 'pageInfo' => [ 'title' => 'Generate Reports For Form Vehicle Running Cost', ], 'forms' => $forms, 'cabang' => $cabangs, 'regions' => $regions ]); } public function entertainment() { $role = auth()->user()->getRoleNames()[0]; $cabangs = Cabang::all(); $regions = Region::all(); $formsQuery = FormEntertaimentPresentation::with([ 'user.region', // Eager load 'region' within 'user' 'user.cabang', // Eager load 'cabang' within 'user' ]); // Apply role-based query logic if ($role == 'Admin Region' || $role == 'Marketing Operational Manager Region') { $region_id = auth()->user()->getMyCabangAndRegionId()['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); } } elseif ($role == 'Area Manager Cabang') { $cabang_id = auth()->user()->getMyCabangAndRegionId()['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); } } // Get all params in URL for filtering $params = request()->all(); if ($params) { // Filter by region if (isset($params['region'])) { $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'); $formsQuery->whereIn('user_id', $userIds); } } // Filter by cabang if (isset($params['cabang'])) { $cabang = Cabang::where('code', $params['cabang'])->first(); if ($cabang) { $userIds = UserHasCabang::where('cabang_id', $cabang->id)->pluck('user_id'); $formsQuery->whereIn('user_id', $userIds); } } // Filter by date range if (isset($params['start_date']) || isset($params['end_date'])) { $startDate = $params['start_date'] ?? null; $endDate = $params['end_date'] ?? null; if ($startDate && $endDate) { $formsQuery->whereBetween('tanggal', [$startDate, $endDate]); } elseif ($startDate) { $formsQuery->where('tanggal', '>=', $startDate); } elseif ($endDate) { $formsQuery->where('tanggal', '<=', $endDate); } } // Filter by status if (isset($params['status'])) { $formsQuery->where('status', $params['status']); } } // Fetch forms after applying all filters $forms = $formsQuery->get(); return view('backend.pages.report.entertainment', [ 'pageInfo' => [ 'title' => 'Generate Reports For Form Entertainment & Presentation', ], 'forms' => $forms, 'cabang' => $cabangs, 'regions' => $regions ]); } public function meeting() { $role = auth()->user()->getRoleNames()[0]; $cabangs = Cabang::all(); $regions = Region::all(); // Initialize the query for FormMeetingSeminar with eager loading $formsQuery = FormMeetingSeminar::with([ 'user.region', // Eager load 'region' within 'user' 'user.cabang', // Eager load 'cabang' within 'user' ]); // Apply role-based query logic if ($role == 'Admin Region' || $role == 'Marketing Operational Manager Region') { $region_id = auth()->user()->getMyCabangAndRegionId()['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); } } elseif ($role == 'Area Manager Cabang') { $cabang_id = auth()->user()->getMyCabangAndRegionId()['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); } } // Get all params in URL for filtering $params = request()->all(); if ($params) { // Filter by region if (isset($params['region'])) { $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'); $formsQuery->whereIn('user_id', $userIds); } } // Filter by cabang if (isset($params['cabang'])) { $cabang = Cabang::where('code', $params['cabang'])->first(); if ($cabang) { $userIds = UserHasCabang::where('cabang_id', $cabang->id)->pluck('user_id'); $formsQuery->whereIn('user_id', $userIds); } } // Filter by date range if (isset($params['start_date']) || isset($params['end_date'])) { $startDate = $params['start_date'] ?? null; $endDate = $params['end_date'] ?? null; if ($startDate && $endDate) { $formsQuery->whereBetween('tanggal', [$startDate, $endDate]); } elseif ($startDate) { $formsQuery->where('tanggal', '>=', $startDate); } elseif ($endDate) { $formsQuery->where('tanggal', '<=', $endDate); } } // Filter by status if (isset($params['status'])) { $formsQuery->where('status', $params['status']); } } // Fetch forms after applying all filters $forms = $formsQuery->get(); return view('backend.pages.report.meeting', [ 'pageInfo' => [ 'title' => 'Generate Reports For Form Meeting & Seminar', ], 'forms' => $forms, 'cabang' => $cabangs, 'regions' => $regions ]); } public function others() { $role = auth()->user()->getRoleNames()[0]; $cabangs = Cabang::all(); $regions = Region::all(); // Initialize the query for FormOthers 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 if ($role == 'Admin Region' || $role == 'Marketing Operational Manager Region') { $region_id = auth()->user()->getMyCabangAndRegionId()['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); } } elseif ($role == 'Area Manager Cabang') { $cabang_id = auth()->user()->getMyCabangAndRegionId()['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); } } // Get all params in URL for filtering $params = request()->all(); if ($params) { // Filter by region if (isset($params['region'])) { $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'); $formsQuery->whereIn('user_id', $userIds); } } // Filter by cabang if (isset($params['cabang'])) { $cabang = Cabang::where('code', $params['cabang'])->first(); if ($cabang) { $userIds = UserHasCabang::where('cabang_id', $cabang->id)->pluck('user_id'); $formsQuery->whereIn('user_id', $userIds); } } // Filter by date range if (isset($params['start_date']) || isset($params['end_date'])) { $startDate = $params['start_date'] ?? null; $endDate = $params['end_date'] ?? null; if ($startDate && $endDate) { $formsQuery->whereBetween('tanggal', [$startDate, $endDate]); } elseif ($startDate) { $formsQuery->where('tanggal', '>=', $startDate); } elseif ($endDate) { $formsQuery->where('tanggal', '<=', $endDate); } } // Filter by status if (isset($params['status'])) { $formsQuery->where('status', $params['status']); } } // Fetch forms after applying all filters $forms = $formsQuery->get(); return view('backend.pages.report.others', [ 'pageInfo' => [ 'title' => 'Generate Reports For Form Others', ], 'forms' => $forms, 'cabang' => $cabangs, 'regions' => $regions ]); } 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 $availableBudget = 0; $month = strtolower(date('F')); // convert to lowercase for DB compatibility $year = (int) date('Y'); $region_id = auth()->user()->getMyCabangAndRegionId()['region'] ?? null; $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) { $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); } 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) { $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); } 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(); // 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'); } } // 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']); } } // Get the forms after all filters have been applied // Sort by 'tanggal' if it exists, otherwise by 'created_at' $tables = [ 'form_others', 'form_up_country', 'form_vehicle_running_cost', 'form_meeting_seminar', 'form_entertainment_presentation' ]; $formsQuery = null; foreach ($tables as $table) { $query = DB::table($table) ->selectRaw(" expense_number, '$table' as type, user_id, total, approved_total, account_number, status, created_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); // 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; }); 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 'regions' => $regions, 'availableBudget' => $availableBudget ]); } public function jurnal() { $role = auth()->user()->getRoleNames()[0]; $cabangs = []; $regions = []; if ($role == 'Admin Region' || $role == 'Marketing Operational Manager Region') { $region_id = auth()->user()->getMyCabangAndRegionId()['region']; if ($region_id) { $cabangs = Cabang::where('region_id', $region_id)->get(); $regions = Region::where('id', $region_id)->get(); } } else if ($role == 'Area Manager Cabang') { $cabang_id = auth()->user()->getMyCabangAndRegionId()['cabang']; if ($cabang_id) { $cabangs = Cabang::where('id', $cabang_id)->get(); $regions = Region::where('id', $cabangs[0]->region_id)->get(); } } else { $cabangs = Cabang::all(); $regions = Region::all(); } return view('backend.pages.report.jurnal', [ 'pageInfo' => [ 'title' => 'Generate Reports For Jurnal', ], 'cabang' => $cabangs, 'regions' => $regions ]); } public function generateJurnal() { $params = request()->all(); $kategoris = Kategori::all(); $kategori_bca = Kategori::where('name', 'Cash in Bank BCA')->first(); $cabang = Cabang::with('cost')->where('code', $params['cabang'])->firstOrFail(); $year = $params['year']; $month = $params['month']; // format: angka atau teks bulan (pastikan valid) // Hitung range periode (11 bulan_ini - 10 bulan_depan) [$startDate, $endDate] = PeriodeHelper::getPeriodeRange($month, $year); // Ambil data terakhir dari log budget $budget = BudgetControlLog::where('cabang_id', $cabang->id) ->where('periode_year', $year) ->where('periode_month', $month) ->orderBy('created_at', 'desc') ->first(); $userIds = UserHasCabang::where('cabang_id', $cabang->id)->pluck('user_id'); // Fetch semua forms berdasarkan periode range $forms = [ 'Up Country' => FormUpCountry::whereIn('user_id', $userIds) ->whereBetween('final_approved_at', [$startDate, $endDate]) ->whereIn('status', ['Approved', 'Closed']) ->get(), 'Vehicle Running Cost' => FormVehicleRunningCost::whereIn('user_id', $userIds) ->whereBetween('final_approved_at', [$startDate, $endDate]) ->whereIn('status', ['Approved', 'Closed']) ->get(), 'Entertainment' => FormEntertaimentPresentation::whereIn('user_id', $userIds) ->whereBetween('final_approved_at', [$startDate, $endDate]) ->whereIn('status', ['Approved', 'Closed']) ->get(), 'Meeting / Seminar' => FormMeetingSeminar::whereIn('user_id', $userIds) ->whereBetween('final_approved_at', [$startDate, $endDate]) ->whereIn('status', ['Approved', 'Closed']) ->get(), ]; // Forms "Others" dikelompokkan berdasarkan kategori $otherForms = FormOthers::whereIn('user_id', $userIds) ->whereBetween('final_approved_at', [$startDate, $endDate]) ->whereIn('status', ['Approved', 'Closed']) ->get(); // Total nominal per kategori $nominals = []; foreach ($kategoris as $item) { if (isset($forms[$item->name])) { $nominals[$item->id] = $forms[$item->name]->sum('approved_total'); } else { $nominals[$item->id] = $otherForms->where('kategori_id', $item->id)->sum('approved_total'); } } $totalKategori = array_sum($nominals); $pettyCashAmount = $budget && $budget->amount ? $budget->amount : 0; return view('backend.pages.report.generate_jurnal', [ 'pageInfo' => [ 'title' => 'Generate Reports For Jurnal', ], 'kategori' => $kategoris, 'cabang' => $cabang, 'year' => $year, 'month' => $month, 'kategori_bca' => $kategori_bca, 'nominals' => $nominals, 'budget' => $budget, 'totalKategori' => $totalKategori, 'pettyCashAmount' => $pettyCashAmount, ]); } }