From 6f9f0d34a38bc951f51fb62da247cd174dd1a859 Mon Sep 17 00:00:00 2001 From: Fiqh Pratama Date: Thu, 23 Oct 2025 17:21:46 +0700 Subject: [PATCH] update by CODEX --- .../Backend/DashboardController.php | 84 ++--- .../Controllers/Backend/ReportController.php | 286 ++++++++++-------- .../Controllers/Forms/FormOtherController.php | 25 +- .../Forms/FormUpCountryController.php | 91 ++++-- .../pages/forms/meeting/create.blade.php | 12 +- .../pages/forms/meeting/edit.blade.php | 25 +- .../partials/attachment-modal.blade.php | 6 +- .../partials/attachment-scripts.blade.php | 67 +++- .../pages/forms/meeting/view.blade.php | 10 +- .../pages/forms/upcountry/create.blade.php | 70 +++-- .../pages/forms/upcountry/edit.blade.php | 68 +++-- .../backend/pages/report/jurnal.blade.php | 39 +-- 12 files changed, 457 insertions(+), 326 deletions(-) diff --git a/app/Http/Controllers/Backend/DashboardController.php b/app/Http/Controllers/Backend/DashboardController.php index 034ab9f..9c80af6 100644 --- a/app/Http/Controllers/Backend/DashboardController.php +++ b/app/Http/Controllers/Backend/DashboardController.php @@ -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( diff --git a/app/Http/Controllers/Backend/ReportController.php b/app/Http/Controllers/Backend/ReportController.php index 6d1a57f..6fd791b 100644 --- a/app/Http/Controllers/Backend/ReportController.php +++ b/app/Http/Controllers/Backend/ReportController.php @@ -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']; diff --git a/app/Http/Controllers/Forms/FormOtherController.php b/app/Http/Controllers/Forms/FormOtherController.php index 416fdfb..218f4ee 100644 --- a/app/Http/Controllers/Forms/FormOtherController.php +++ b/app/Http/Controllers/Forms/FormOtherController.php @@ -37,6 +37,25 @@ class FormOtherController extends Controller { protected AttachmentService $attachmentService; + /** + * Kategori yang tidak boleh dipilih pada Form Others. + * + * @var array + */ + protected array $excludedKategoriNames = [ + 'Up Country', + 'Vehicle Running Cost', + 'Entertainment', + 'Meeting / Seminar', + 'Presentation', + 'Sponsorship', + 'Cash in Bank BCA', + 'Donasi/Gift', + 'PPn Masukan', + 'Vehicle Maintenance', + 'Bahan Promosi', + ]; + protected array $attachmentCategories = [ 'bukti_total', ]; @@ -155,7 +174,7 @@ class FormOtherController extends Controller return view('backend.pages.forms.other.view', [ 'form' => $form, - 'kategori' => Kategori::whereNotIn('name', ['Up Country', 'Vehicle Running Cost', 'Entertainment', 'Meeting / Seminar'])->get(), + 'kategori' => Kategori::whereNotIn('name', $this->excludedKategoriNames)->get(), 'attachments' => $attachments, ]); } @@ -165,7 +184,7 @@ class FormOtherController extends Controller $this->checkAuthorization(auth()->user(), ['forms.other.create']); return view('backend.pages.forms.other.create', [ - 'kategori' => Kategori::whereNotIn('name', ['Up Country', 'Vehicle Running Cost', 'Entertainment','Presentation','Sponsorship', 'Meeting / Seminar'])->get(), + 'kategori' => Kategori::whereNotIn('name', $this->excludedKategoriNames)->get(), 'attachmentCategories' => $this->attachmentCategories, ]); } @@ -396,7 +415,7 @@ class FormOtherController extends Controller return view('backend.pages.forms.other.edit', [ 'form' => $form, - 'kategori' => Kategori::whereNotIn('name', ['Up Country', 'Vehicle Running Cost', 'Entertainment','Presentation','Sponsorship', 'Meeting / Seminar'])->get(), + 'kategori' => Kategori::whereNotIn('name', $this->excludedKategoriNames)->get(), 'attachments' => $this->formatAttachmentCollection($form), 'attachmentCategories' => $this->attachmentCategories, ]); diff --git a/app/Http/Controllers/Forms/FormUpCountryController.php b/app/Http/Controllers/Forms/FormUpCountryController.php index fe3af60..3b0ba4b 100644 --- a/app/Http/Controllers/Forms/FormUpCountryController.php +++ b/app/Http/Controllers/Forms/FormUpCountryController.php @@ -38,19 +38,26 @@ use Illuminate\Container\Attributes\Auth; class FormUpCountryController extends Controller { protected AttachmentService $attachmentService; + + /** + * Attachment categories (key => label) for Up Country forms. + * + * @var array + */ protected array $attachmentCategories = [ - 'bukti_allowance', - 'bukti_transport_dalkot', - 'bukti_transport_ankot', - 'bukti_hotel', - 'bukti_total', - 'bukti_lainnya', + 'bukti_allowance' => 'Bukti Allowance', + 'bukti_transport_dalkot' => 'Bukti Transport Dalam Kota', + 'bukti_transport_ankot' => 'Bukti Transport Antar Kota', + 'bukti_hotel' => 'Bukti Hotel', + 'bukti_total' => 'Bukti Total', + 'bukti_lainnya' => 'Bukti Lainnya', ]; public function __construct(AttachmentService $attachmentService) { $this->attachmentService = $attachmentService; view()->share('upCountryAttachmentCategories', $this->attachmentCategories); + view()->share('upCountryAttachmentCategoryKeys', array_keys($this->attachmentCategories)); } public function index() @@ -186,11 +193,12 @@ class FormUpCountryController extends Controller public function create() { $this->checkAuthorization(auth()->user(), ['forms.country.create']); - $cabang = UserHasCabang::with('cabang')->where('user_id', auth()->user()->id)->first()->cabang; + $rayons = $this->getAccessibleRayonsForCurrentUser(); return view('backend.pages.forms.upcountry.create', [ - 'rayons' => Rayon::where('cabang_id', $cabang->id)->get(), - 'attachmentCategories' => $this->attachmentCategories, + 'rayons' => $rayons, + 'attachmentCategories' => array_keys($this->attachmentCategories), + 'attachmentCategoryLabels' => $this->attachmentCategories, ]); } @@ -207,7 +215,7 @@ class FormUpCountryController extends Controller 'transport_ankot' => 'nullable|numeric', 'hotel' => 'nullable|numeric', 'attachments' => 'nullable|array', - 'attachments.*.file_category' => 'required|string|in:' . implode(',', $this->attachmentCategories), + 'attachments.*.file_category' => 'required|string|in:' . implode(',', array_keys($this->attachmentCategories)), 'attachments.*.file_path' => ['nullable', 'file', 'mimes:jpg,jpeg,png,pdf', 'max:5120'], 'uc_plan' => 'nullable|file|max:51200', ]); @@ -416,32 +424,19 @@ class FormUpCountryController extends Controller $this->checkAuthorization(auth()->user(), ['forms.country.edit']); $role = auth()->user()->getRoleNames()[0]; - $cabang = UserHasCabang::with('cabang')->where('user_id', auth()->user()->id)->first()->cabang; - $regionId = Cabang::where('id', 1)->value('region_id'); - $rayonData = Rayon::where('cabang_id', $cabang->id)->get(); - - if ($role == "Admin Region") { - $rayonData = DB::table('rayon') - ->join('cabang', 'rayon.cabang_id', '=', 'cabang.id') - ->join('region', 'cabang.region_id', '=', 'region.id') - ->where('region.id', $regionId) - ->select('rayon.*') - ->get(); - } elseif ($role == "Marketing Information System" || $role == "Superadmin") { - $rayonData = DB::table('rayon') - ->join('cabang', 'rayon.cabang_id', '=', 'cabang.id') - ->join('region', 'cabang.region_id', '=', 'region.id') - ->whereNotNull('region.id') - ->select('rayon.*') - ->get(); - } + $rayonData = $this->getAccessibleRayonsForCurrentUser(); - $form = FormUpCountry::with(['rayon', 'attachments'])->findOrfail($id); + $form = FormUpCountry::with(['rayon.cabang', 'attachments'])->findOrfail($id); if (($form->status != 'On Progress' && $form->status != 'Rejected') && $role == 'Medical Representatif') { session()->flash('error', 'You cannot edit this form because it has been approved or closed.'); return redirect()->back(); } + if ($form->rayon && !$rayonData->contains('id', $form->rayon_id)) { + $rayonData->push($form->rayon); + $rayonData = $rayonData->sortBy('name')->values(); + } + $existingAttachments = $form->attachments->map(function ($attachment) { $filePath = $attachment->file_path; $extension = strtolower(pathinfo($filePath, PATHINFO_EXTENSION)); @@ -462,10 +457,42 @@ class FormUpCountryController extends Controller 'rayons' => $rayonData, 'form' => $form, 'attachments' => $existingAttachments, - 'attachmentCategories' => $this->attachmentCategories, + 'attachmentCategories' => array_keys($this->attachmentCategories), + 'attachmentCategoryLabels' => $this->attachmentCategories, ]); } + protected function getAccessibleRayonsForCurrentUser() + { + $user = auth()->user(); + $role = $user->getRoleNames()->first(); + $rayonQuery = Rayon::with('cabang')->orderBy('name'); + + if (in_array($role, ['Superadmin', 'Marketing Information System'], true)) { + return $rayonQuery->get(); + } + + $userRegionData = $user->getMyCabangAndRegionId(); + $regionContextId = $userRegionData['region'] !== '-' ? $userRegionData['region'] : null; + $cabangContextId = $userRegionData['cabang'] !== '-' ? $userRegionData['cabang'] : null; + + if ($role === 'Admin Region' && $regionContextId) { + return $rayonQuery + ->whereHas('cabang', function ($query) use ($regionContextId) { + $query->where('region_id', $regionContextId); + }) + ->get(); + } + + if ($cabangContextId) { + return $rayonQuery + ->where('cabang_id', $cabangContextId) + ->get(); + } + + return collect(); + } + public function update(Request $request, $id) { $this->checkAuthorization(auth()->user(), ['forms.country.edit']); @@ -481,7 +508,7 @@ class FormUpCountryController extends Controller 'transport_ankot' => 'nullable|numeric', 'hotel' => 'nullable|numeric', 'attachments' => 'nullable|array', - 'attachments.*.file_category' => 'required|string|in:' . implode(',', $this->attachmentCategories), + 'attachments.*.file_category' => 'required|string|in:' . implode(',', array_keys($this->attachmentCategories)), 'attachments.*.file_path' => ['nullable', 'file', 'mimes:jpg,jpeg,png,pdf', 'max:5120'], 'uc_plan' => 'nullable|file|max:51200', ]); diff --git a/resources/views/backend/pages/forms/meeting/create.blade.php b/resources/views/backend/pages/forms/meeting/create.blade.php index 9ddba4d..1768c87 100644 --- a/resources/views/backend/pages/forms/meeting/create.blade.php +++ b/resources/views/backend/pages/forms/meeting/create.blade.php @@ -41,6 +41,10 @@ color: white; } + @php + $attachmentCategoryLabels = $meetingAttachmentCategories ?? []; + $attachmentCategories = $meetingAttachmentCategoryKeys ?? array_keys($attachmentCategoryLabels); + @endphp
@@ -76,7 +80,7 @@
Lampiran
@@ -85,13 +89,13 @@ Kategori File - Preview + Pratinjau Aksi - Belum ada attachment. + Belum ada lampiran. @@ -111,7 +115,7 @@
-

Submitting, please wait...

+

Sedang mengirim, mohon tunggu...

diff --git a/resources/views/backend/pages/forms/meeting/edit.blade.php b/resources/views/backend/pages/forms/meeting/edit.blade.php index 37e2e0b..86f209f 100644 --- a/resources/views/backend/pages/forms/meeting/edit.blade.php +++ b/resources/views/backend/pages/forms/meeting/edit.blade.php @@ -81,12 +81,15 @@ Kategori Nama File - Preview - Download - Delete + Pratinjau + Unduh + Hapus + @php + $attachmentCategoryLabels = $meetingAttachmentCategories ?? []; + @endphp @forelse ($attachments as $attachment) {{ $attachment['category_label'] ?? '-' }} @@ -98,13 +101,13 @@ data-preview-source="{{ $attachment['preview_url'] ?? '' }}" data-download-url="{{ $attachment['download_url'] ?? '' }}" data-filename="{{ $attachment['filename'] }}"> - Preview + Pratinjau @if (!empty($attachment['download_url'])) - Download + Unduh @else Tidak tersedia @@ -123,8 +126,8 @@ @empty - - Belum ada attachment. + + Belum ada lampiran. @endforelse @@ -137,7 +140,7 @@
Tambah Lampiran Baru
@@ -146,13 +149,13 @@ Kategori File - Preview + Pratinjau Aksi - Belum ada attachment. + Belum ada lampiran. @@ -172,7 +175,7 @@
-

Submitting, please wait...

+

Sedang mengirim, mohon tunggu...

diff --git a/resources/views/backend/pages/forms/meeting/partials/attachment-modal.blade.php b/resources/views/backend/pages/forms/meeting/partials/attachment-modal.blade.php index e9d57c1..caf3496 100644 --- a/resources/views/backend/pages/forms/meeting/partials/attachment-modal.blade.php +++ b/resources/views/backend/pages/forms/meeting/partials/attachment-modal.blade.php @@ -2,21 +2,21 @@