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); } }