model = $model; } public function save($code, $inventoryYear) { try { $dataBatch = []; $ws = $this->getWs($code); $years = activityYearRange($inventoryYear, false); if ($ws && class_basename($ws->model) == 'Waste4A') { foreach ($years as $year) { $dataBatch = array_merge($dataBatch, $this->calcAndSave($inventoryYear, $year, $ws)); } } else { throw new \Exception("Forbidden"); } return $dataBatch; } catch (\Exception $e) { throw $e; } } public function calcAndSave($inventoryYear, $activityYear, $ws) { # deklarasi variabel $items = ['sisa_makanan', 'kertas', 'nappies', 'taman', 'kayu', 'tekstil']; $activities = []; $ch4_recovery = 0; $total = 0; # inisialisasi data aktivitas foreach ($items as $item) { $activities[$item] = 0; } try { $dataForms = []; $wsCode = $ws->ws_code; # ambil data aktivitas $ws4a_methane = Waste4AMethane::where('inventory_year', $inventoryYear) ->where('activity_year', $activityYear) ->rowActive()->get(); foreach ($ws4a_methane as $row) { $activities[$row->activity_code] = $row->ch4 ?? 0; } $no = 1; $dataForm = [ 'inventory_year' => $inventoryYear, 'activity_year' => $activityYear, // 'category' => $wsCode, 'row_num' => $no++, ]; foreach ($activities as $activity => $value) { $total += $value; $dataForm[$activity] = $value; } $dataForm['total'] = $total; $dataForm['ch4_recovery'] = $ch4_recovery; $dataForm['ch4'] = $total - $ch4_recovery; $this->createOrUpdate([ 'inventory_year' => $inventoryYear, 'activity_year' => $activityYear, // 'category' => $wsCode, 'row_status' => 1, ], $dataForm); $dataForms[] = $dataForm; $this->saveCrfEmission($inventoryYear, $activityYear, $ws, $dataForms); return $dataForms; } catch (\Exception $e) { throw $e; } } private function saveCrfEmission($inventoryYear, $activityYear, $ws, $dataForms) { try { $co2 = null; $ch4 = array_sum(array_column($dataForms, 'ch4')); $n2o = null; $dataForm = [ 'inventory_year' => $inventoryYear, 'activity_year' => $activityYear, 'sector' => $this->sectorCode, 'ws_code' => '4A1', 'co2' => $co2, 'ch4' => $ch4, 'n2o' => $n2o, ]; $this->createOrUpdate([ 'inventory_year' => $inventoryYear, 'activity_year' => $activityYear, 'sector' => $this->sectorCode, 'ws_code' => '4A1', 'row_status' => 1, ], $dataForm, ActivityCrf::class); } catch (\Exception $e) { throw $e; } } }