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]; $cabangs = collect(); $regions = collect(); $availableBudget = 0; $currentMonthKey = strtolower(date('F')); $currentYear = (int) date('Y'); $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; $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)); } }; 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')->toArray(); $applyUserFilter($userIds); } else { $userFilter = []; } } elseif ($role == 'Area Manager Cabang') { if ($cabang_id) { $cabangs = Cabang::where('id', $cabang_id)->get(); $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 { $userFilter = []; } } elseif ($role == 'Medical Representatif') { $applyUserFilter([$userId]); $cabangs = collect(); $regions = collect(); } else { $cabangs = Cabang::all(); $regions = Region::all(); } $params = request()->all(); 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); if ($selectedRegion && ($regions->isEmpty() || in_array($role, ['Superadmin', 'Admin'], true))) { $regions = Region::all(); } } 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', ]; $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, total, 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; } 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); $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, '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 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(); } return view('backend.pages.report.jurnal', [ 'pageInfo' => [ 'title' => 'Generate Reports For Jurnal', ], 'cabang' => $cabangs, 'regions' => $regions ]); } public function generateJurnal() { $params = request()->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']; $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, ]); } }