sigd/app/Http/Controllers/Reports/WorksheetController.php

99 lines
3.3 KiB
PHP

<?php
namespace App\Http\Controllers\Reports;
use App\Exports\WorksheetExport;
use App\Http\Controllers\Controller;
use App\Models\ReferenceSector;
use App\Services\Reports\WorksheetService;
use Illuminate\Http\Request;
use Maatwebsite\Excel\Facades\Excel;
use Illuminate\Support\Facades\Validator;
class WorksheetController extends Controller
{
protected $title = 'Laporan Worksheet';
protected $template = 'modules.reports.worksheet';
protected $route = 'modules.laporan.worksheet';
protected $service;
public function __construct(WorksheetService $service)
{
$this->service = $service;
}
public function show($inventoryYear = null, $activityYear = null, $sectorCode = null, $wsCode = null)
{
$categories = ReferenceSector::rowActive()->orderByRowNum()->get();
$worksheets = $sectorCode ? $this->service->getWorksheets($sectorCode) : [];
// Fetch worksheet data
$wsData = $this->service->getWorksheet($sectorCode, $wsCode);
// Check if wsData and model are valid
if ($wsData && class_exists($wsData->model)) {
$modelClass = $wsData->model;
$emisiData = $this->service->getEmissionsData($modelClass, $inventoryYear, $activityYear, $wsCode);
} else {
$emisiData = [];
}
return view($this->template.'.index', [
'title' => $this->title,
'route' => $this->route,
'inventoryYear' => $inventoryYear ?? date('Y'),
'activityYear' => $activityYear,
'sectorCode' => $sectorCode,
'wsCode' => $wsCode,
'categories' => $categories,
'worksheets' => $worksheets,
'wsData' => $wsData,
'emisiData' => $emisiData
]);
}
public function getWorksheetsBySector(Request $request)
{
$code = $request->input('sector');
$worksheets = $this->service->getWorksheets($code);
return response()->json($worksheets);
}
public function export(Request $request)
{
// Validate and sanitize inputs
$validator = Validator::make($request->all(), [
'inventoryYear' => 'required|integer',
'activityYear' => 'required|integer',
'sectorCode' => 'required|string',
'wsCode' => 'required|string',
]);
if ($validator->fails()) {
return redirect()->back()->withErrors($validator)->withInput();
}
$inventoryYear = (int) $request->input('inventoryYear');
$activityYear = $request->input('activityYear') ? (int) $request->input('activityYear') : null;
$sectorCode = $request->input('sectorCode');
$wsCode = $request->input('wsCode');
$wsData = $this->service->getWorksheet($sectorCode, $wsCode);
if ($wsData && class_exists($wsData->model)) {
$modelClass = $wsData->model;
$emisiData = $this->service->getEmissionsData($modelClass, $inventoryYear, $activityYear, $wsCode);
} else {
$emisiData = [];
}
$titleExcel = 'WORKSHEET ' . strtoupper($sectorCode) . '-' . $wsCode . '-' . $activityYear . '-' . $inventoryYear;
$wsData['titleExcel'] = $titleExcel;
return Excel::download(new WorksheetExport($wsData, $emisiData), $titleExcel . '.xlsx');
}
}