formService = $formService; } public static function middleware(): array { $sector = 'folu'; $code = 'lahan_mineral'; return [ //new Middleware('permission:/' . $sector . '/' . $code), ]; } public function data($sector, $code, $inventoryYear, $instansi = null) { // Fetch the form from the database based on sector and code $form = SettingForm::rowActive()->where('sector', $sector)->where('code', $code)->first(); if (!$form) { abort(404, 'Page not found'); } // Fetch form details $lands = $this->lands; if ($instansi && $instansi != 'all' && $instansi != 'none') { $agency = Agency::where('name', $instansi)->rowActive()->first(); $instansi = $agency ? $agency->id : null; } // get Agencies for produsen data mapping $user = Auth::user(); $scope = $user->getScope(); if ($scope === LingkupAksesData::INTERNAL->value) { $instansi = $user->agency_id; } $agencies = Agency::whereHas('agencyActivity', function ($query) use ($sector, $code, $scope, $user) { $query->where('form_sector', $sector) ->where('form_code', $code); if ($scope === LingkupAksesData::INTERNAL->value) { $query->where('agency_id', $user->agency_id); } })->get(); // Fetch activity form and activity form details using service $activityForm = $this->formService->getActivityForm($sector, $code, $inventoryYear, $instansi); if ($instansi == 'all') { $activityFormId = $activityForm->pluck('id')->toArray(); } else { $activityFormId = $activityForm->id ?? null; } $activityFormDetails = $this->formService->getActivityFormDetails($activityFormId, $instansi); $isLocked = ActivityLock::isLocked($inventoryYear); $isApprove = false; if ($instansi && $instansi != 'all' && $instansi != 'none') { $isApprove = ActivityApprovalKonsolidasi::isApprove($activityFormId, $sector, $code, $inventoryYear, $instansi); } $internal = $instansi; return compact( 'form', 'lands', 'activityForm', 'activityFormDetails', 'inventoryYear', 'isLocked', 'agencies', 'internal', 'isApprove' ); } public function show() { $sector = $this->sector; $code = $this->code; $inventoryYear = request('inventoryYear') ?? date('Y'); $instansi = request('instansi') ?? null; // Retrieve data $data = $this->data($sector, $code, $inventoryYear, $instansi); return view('form.index-kehutanan', $data); } public function import(Request $request, $inventoryYear, $instansi = null) { $request->validate([ 'import_file' => 'required|file|mimes:xlsx,xls|max:2048', // Adjust max file size as needed ]); $sector = $this->sector; $code = $this->code; $importService = $this->formService; try { $lands = $this->lands; if ($instansi && $instansi != 'all' && $instansi != 'none') { $agency = Agency::where('name', $instansi)->rowActive()->first(); $instansi = $agency ? $agency->id : null; } else { $instansi = null; } Excel::import(new FormKehutananImport($importService, $sector, $code, $inventoryYear, $lands, $instansi), $request->file('import_file')); return redirect()->back()->with('success', 'Data berhasil diimpor.'); } catch (\Exception $e) { return redirect()->back()->withErrors(['error' => 'Data gagal diimpor. Mohon dicoba kembali.' . $e->getMessage()]); } } public function export($inventoryYear, $instansi = null) { $sector = $this->sector; $code = $this->code; $data = $this->data($sector, $code, $inventoryYear, $instansi); $data['inventoryYear'] = $inventoryYear; $isTemplate = request('isTemplate') ?? false; $data['isTemplate'] = $isTemplate; $instansiTitle = ($instansi && $instansi != 'all' && $instansi != 'none') ? ' (' . $instansi . ')' : ''; $titleExcel = $data['form']->name . ' ' . $inventoryYear . $instansiTitle; if ($isTemplate) { $titleExcel = 'Template ' . $titleExcel; } else { $titleExcel = 'Data Aktivitas ' . $titleExcel; } $data['titleExcel'] = $titleExcel; $fileName = $titleExcel . '.xlsx'; return Excel::download(new FormKehutananExport($data), $fileName); } public function approvalKonsolidasi($inventoryYear, $instansi = null) { $sector = $this->sector; $code = $this->code; try { $data = $this->data($sector, $code, $inventoryYear, $instansi); if ($instansi && $instansi != 'all' && $instansi != 'none') { $agency = Agency::where('name', $instansi)->rowActive()->first(); $instansi = $agency ? $agency->id : null; } $form = $data['activityForm']; $this->formService->approvalKonsolidasi($form, $sector, $code, $inventoryYear, $instansi); return redirect()->back()->with('success', 'Persetujuan Data Produsen berhasil diproses.'); } catch (\Exception $e) { return redirect()->back()->withErrors(['error' => 'Persetujuan Data Produsen gagal diproses. Mohon dicoba kembali.' . $e->getMessage()]); } } }