217 lines
6.8 KiB
PHP
217 lines
6.8 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Activity;
|
|
|
|
use App\Enums\LingkupAksesData;
|
|
use App\Exports\FormKehutananExport;
|
|
use App\Http\Controllers\Controller;
|
|
use App\Imports\FormKehutananImport;
|
|
use App\Models\ActivityApprovalKonsolidasi;
|
|
use App\Models\ActivityForm;
|
|
use App\Models\ActivityLock;
|
|
use App\Models\Agency;
|
|
use App\Models\SettingForm;
|
|
use App\Services\Activity\FormKehutananService;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Routing\Controllers\HasMiddleware;
|
|
use Illuminate\Routing\Controllers\Middleware;
|
|
use Illuminate\Support\Facades\Auth;
|
|
use Maatwebsite\Excel\Facades\Excel;
|
|
|
|
class FormKehutananController implements HasMiddleware
|
|
{
|
|
protected $formService;
|
|
private $sector = 'folu';
|
|
private $code = 'lahan_mineral';
|
|
private $lands = array(
|
|
'HP',
|
|
'HS',
|
|
'HMP',
|
|
'HRP',
|
|
'HT',
|
|
'B',
|
|
'PK',
|
|
'PM',
|
|
'T',
|
|
'AW',
|
|
'S',
|
|
'A',
|
|
'HMS',
|
|
'HRS',
|
|
'BR',
|
|
'PT',
|
|
'PC',
|
|
'SW',
|
|
'TM',
|
|
'BDR',
|
|
'TR',
|
|
'TB',
|
|
'RW'
|
|
);
|
|
|
|
public function __construct(FormKehutananService $formService)
|
|
{
|
|
$this->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()]);
|
|
}
|
|
}
|
|
}
|