model = $model; } public function save($code, $inventoryYear) { try { $dataBatch = []; $ws = $this->getWs($code); $years = activityYearRange($inventoryYear); if ($ws && class_basename($ws->model) == 'Waste4D1c') { 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) { $dataForms = []; $activities = []; $sector = $this->sectorCode; $code = $this->formCode; $wsCode = $ws->ws_code; $group_fraction = 100; try { // ambil data aktivitas // Initialize activities $formSetting = $this->getDataSettingFormDetail($sector, $code); foreach ($formSetting as $row) $activities[$row->activity_code] = 0; // Get data activities $formActivity = $this->getActivityFormDetailsByYear($inventoryYear, $activityYear, $sector, $code); foreach ($formActivity as $row) $activities[$row->activity_code] = $row->activity_value ?? 0; $ws4d1a = Waste4D1a::where('inventory_year', $inventoryYear)->where('activity_year', $activityYear) ->rowActive()->first(); $tow = $ws4d1a->tow ?? 0; $no = 1; foreach ($activities as $activity => $value) { $usage_level = $value / 100; $ef = ReferenceEf::getValue($activity, 'ef'); $ef_sludge_removed = ReferenceEf::getValue($activity, 'sludge_removed'); $ef_methane_flared = ReferenceEf::getValue($activity, 'methane_flared'); $ch4_kg = ($group_fraction / 100) * ($value / 100) * $ef * $tow; $ch4_gg = $ch4_kg / 1000000; $dataForm = [ 'inventory_year' => $inventoryYear, 'activity_year' => $activityYear, 'activity_code' => $activity, 'category' => $wsCode, 'group_fraction' => $group_fraction, 'value' => $value, 'usage_level' => $usage_level, 'ef' => $ef, 'tow' => $tow, 'ef_sludge_removed' => $ef_sludge_removed, 'ef_methane_flared' => $ef_methane_flared, 'ch4_kg' => $ch4_kg, 'ch4_gg' => $ch4_gg, 'row_num' => $no++, ]; $this->createOrUpdate([ 'inventory_year' => $inventoryYear, 'activity_year' => $activityYear, 'activity_code' => $activity, '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_gg')); // $n2o = null; $dataForm = [ 'inventory_year' => $inventoryYear, 'activity_year' => $activityYear, 'sector' => $this->sectorCode, 'ws_code' => '4D1', // 'co2' => $co2, 'ch4' => $ch4, // 'n2o' => $n2o, ]; $this->createOrUpdate([ 'inventory_year' => $inventoryYear, 'activity_year' => $activityYear, 'sector' => $this->sectorCode, 'ws_code' => '4D1', 'row_status' => 1, ], $dataForm, ActivityCrf::class); } catch (\Exception $e) { throw $e; } } }