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

85 lines
2.9 KiB
PHP

<?php
namespace App\Http\Controllers\Reports;
use App\Exports\CrfExport;
use App\Http\Controllers\Controller;
use App\Models\ActivityCrf;
use App\Models\ReferenceSector;
use App\Models\ReferenceWs;
use App\Services\Reports\CrfService;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
use Maatwebsite\Excel\Facades\Excel;
class CrfController extends Controller
{
protected $title = 'Common Reporting Format (CRF)';
protected $template = 'modules.reports.crf';
protected $route = 'modules.laporan.crf';
protected $service;
public function __construct(CrfService $service)
{
$this->service = $service;
}
public function show($inventoryYear = null, $activityYear = null, $sectorCode = null)
{
$categories = ReferenceSector::rowActive()->orderByRowNum()->get();
$worksheets = ReferenceWs::with('children')->rowActive()->where('sector', $sectorCode)->isMain()->orderByRowNum()->get();
$crfData = ActivityCrf::rowActive()
->where('sector', $sectorCode)
->where('inventory_year', $inventoryYear)
->where('activity_year', $activityYear)
->get();
// dd($crfData);
return view($this->template.'.index', [
'title' => $this->title,
'route' => $this->route,
'inventoryYear' => $inventoryYear ?? date('Y'),
'activityYear' => $activityYear ?? date('Y') - 1,
'sectorCode' => $sectorCode,
'categories' => $categories,
'worksheets' => $worksheets,
'crfData' => $crfData,
]);
}
public function export(Request $request)
{
// Validate and sanitize inputs
$validator = Validator::make($request->all(), [
'inventoryYear' => 'required|integer',
'activityYear' => 'required|integer',
'sectorCode' => 'required|string',
]);
if ($validator->fails()) {
return redirect()->back()->withErrors($validator)->withInput();
}
$inventoryYear = $request->input('inventoryYear');
$activityYear = $request->input('activityYear');
$sectorCode = $request->input('sectorCode');
// Fetch the necessary data
$sector = ReferenceSector::rowActive()->where('code', $sectorCode)->first();
$worksheets = ReferenceWs::with('children')->rowActive()->where('sector', $sectorCode)->isMain()->orderByRowNum()->get();
$crfData = ActivityCrf::rowActive()
->where('sector', $sectorCode)
->where('inventory_year', $inventoryYear)
->where('activity_year', $activityYear)
->get();
$titleExcel = 'CRF_' . strtoupper($sector->name) . '_' . $inventoryYear . '_' . $activityYear;
$sector->inventoryYear = $inventoryYear;
$sector->activityYear = $activityYear;
return Excel::download(new CrfExport($sector, $crfData, $worksheets), $titleExcel . '.xlsx');
}
}