94 lines
3.1 KiB
PHP
94 lines
3.1 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 $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('reports.worksheet.index', [
|
|
'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');
|
|
}
|
|
}
|