151 lines
5.0 KiB
PHP
151 lines
5.0 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Tool;
|
|
|
|
use App\Enums\ActivityType;
|
|
use App\Enums\SigdStatus;
|
|
use App\Http\Controllers\Controller;
|
|
use App\Models\ActivityLock;
|
|
use App\Services\Tool\CalculationService;
|
|
use Carbon\Carbon;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Routing\Controllers\HasMiddleware;
|
|
use Illuminate\Routing\Controllers\Middleware;
|
|
|
|
class CalculationController implements HasMiddleware
|
|
{
|
|
protected $title = 'Kalkulasi Emisi';
|
|
protected $template = 'modules.tool.calculation';
|
|
protected $route = 'modules.kalkulasi.kalkulasi-emisi';
|
|
protected $service;
|
|
|
|
public function __construct(CalculationService $service)
|
|
{
|
|
$this->service = $service;
|
|
}
|
|
|
|
public static function middleware(): array
|
|
{
|
|
return [
|
|
//new Middleware('permission:/tool/calculation'),
|
|
];
|
|
}
|
|
|
|
public function index(Request $request)
|
|
{
|
|
|
|
$data['route'] = $this->route;
|
|
$data['title'] = $this->title;
|
|
$data['sectors'] = $this->service->getSectors();
|
|
|
|
return view($this->template.'.index', $data);
|
|
}
|
|
|
|
|
|
public function create()
|
|
{
|
|
$data['route'] = $this->route;
|
|
$data['title'] = $this->title;
|
|
|
|
return view($this->template.'.create',$data);
|
|
}
|
|
|
|
public function store(Request $request)
|
|
{
|
|
// Validate the form data
|
|
$request->validate([
|
|
'inventory_year' => 'required|integer|min:2000|max:' . date('Y'),
|
|
'energy' => 'boolean',
|
|
'agriculture' => 'boolean',
|
|
'folu' => 'boolean',
|
|
'waste' => 'boolean',
|
|
'ippu' => 'boolean',
|
|
]);
|
|
|
|
$isLocked = ActivityLock::isLocked($request->inventory_year);
|
|
|
|
if ($isLocked) {
|
|
return back()->withErrors(['error' => 'Kalkulasi Emisi gagal disimpan. Tahun Inventory dikunci.']);
|
|
}
|
|
|
|
try {
|
|
$data = $request->all();
|
|
$data['energy'] = $request->has('energy') ? 1 : 0;
|
|
$data['agriculture'] = $request->has('agriculture') ? 1 : 0;
|
|
$data['folu'] = $request->has('folu') ? 1 : 0;
|
|
$data['waste'] = $request->has('waste') ? 1 : 0;
|
|
$data['ippu'] = $request->has('ippu') ? 1 : 0;
|
|
|
|
$this->service->create($data);
|
|
logUserActivity(ActivityType::CALCULATION_EMISI);
|
|
|
|
return redirect()->route($this->route.'.index')->with('success', 'Kalkulasi Emisi berhasil ditambahkan.');
|
|
} catch (\Exception $e) {
|
|
return back()->withErrors(['error' => 'Kalkulasi Emisi gagal disimpan. Silakan coba lagi. Error: ' . $e->getMessage()]);
|
|
}
|
|
}
|
|
|
|
public function getActivityYearRange(Request $request)
|
|
{
|
|
$inventoryYear = (int) $request->query('inventoryYear');
|
|
$years = activityYearRange($inventoryYear);
|
|
|
|
return response()->json([
|
|
'years' => $years
|
|
]);
|
|
}
|
|
|
|
public function grid(Request $request)
|
|
{
|
|
$_data = [];
|
|
|
|
$data = $this->service->getRawAll();
|
|
|
|
// Apply category filter if a category is selected
|
|
if ($request->has('sectorFilter') && $request->sectorFilter != '' && $request->sectorFilter != 'SEMUA SEKTOR') {
|
|
$data = $query->where($request->sectorFilter, true);
|
|
}
|
|
|
|
if ($request->has('inventoryYearFilter') && $request->inventoryYearFilter != '' && $request->inventoryYearFilter != 'SEMUA TAHUN') {
|
|
$data = $query->where('inventory_year', $request->inventoryYearFilter);
|
|
}
|
|
|
|
foreach ($data->get() as $key => $row) {
|
|
|
|
$status = SigdStatus::from($row->calculation_status);
|
|
if ($row->finished_time === null || $row->executed_time === null) {
|
|
$duration = '';
|
|
}
|
|
|
|
// Parse the date-time strings into Carbon instances
|
|
$start = Carbon::parse($row->executed_time);
|
|
$end = Carbon::parse($row->finished_time);
|
|
|
|
// Calculate the difference in seconds
|
|
$diffInSeconds = $start->diffInSeconds($end);
|
|
|
|
// Format the duration as HH:MM:SS
|
|
$hours = floor($diffInSeconds / 3600);
|
|
$minutes = floor(($diffInSeconds % 3600) / 60);
|
|
$seconds = $diffInSeconds % 60;
|
|
|
|
$duration = sprintf('%02d:%02d:%02d', $hours, $minutes, $seconds);
|
|
|
|
|
|
$_data[] = [
|
|
'no' => $key+1,
|
|
'sector' => $row->sector,
|
|
'inventory_year' => $row->inventory_year,
|
|
'status' => $status->badge() ?? '',
|
|
'finished_time' => @$row->finished_time ? date('d-m-Y H:i:s', strtotime(@$row->finished_time)) : '',
|
|
'executed_time' => @$row->executed_time ? date('d-m-Y H:i:s', strtotime(@$row->executed_time)) : '',
|
|
'created_at' => @$row->created_at ? date('d-m-Y H:i:s', strtotime(@$row->created_at)) : '',
|
|
'duration' => $duration,
|
|
];
|
|
|
|
}
|
|
|
|
return response()->json($_data);
|
|
}
|
|
}
|