model = $model; } public function save($code, $inventoryYear) { try { $dataBatch = []; $ws = $this->getWs($code); $years = activityYearRange($inventoryYear); if ($ws && class_basename($ws->model) == 'Waste4C2a') { 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 $dataForms = []; $wsCode = $ws->ws_code; $items = ['kertas', 'tekstil', 'nappies', 'karet_kulit', 'plastik', 'anorganik_lainnya']; $activities = []; $open_burned = 0; # inisialisasi data aktivitas foreach ($items as $item) { $activities[$item . '_composition'] = 0; $activities[$item . '_dry_matter'] = 0; } try { # ambil data aktivitas $ws4a_pre = Waste4APre::whereIn('activity', ['composition', 'dry_matter']) ->where('inventory_year', $inventoryYear)->where('activity_year', $activityYear) ->rowActive()->get(); foreach ($ws4a_pre as $row) { foreach ($items as $item) { $activities[$item . '_' . $row->activity] = $row->$item; } } $ws4c1 = Waste4C1::where('inventory_year', $inventoryYear)->where('activity_year', $activityYear) ->rowActive()->first(); $msw_b = $ws4c1->msw_b ?? 0; $no = 1; foreach ($items as $item) { $open_burned = $activities[$item . '_composition'] * $msw_b / 100; $ef_carbon_f = ReferenceEf::getValue($item, 'carbon_f'); $ef_fossil_carbon_f = ReferenceEf::getValue($item, 'fossil_carbon_f'); $ef_oxidation_f = ReferenceEf::getValue($item, 'oxidation_f'); $ef_cf = ReferenceEf::getValue($item, 'cf'); $co2 = $open_burned * ($activities[$item . '_dry_matter'] / 100) * $ef_carbon_f * $ef_fossil_carbon_f * $ef_oxidation_f * $ef_cf; $dataForm = [ 'inventory_year' => $inventoryYear, 'activity_year' => $activityYear, 'category' => $wsCode, 'activity_code' => $item, 'composition' => $activities[$item . '_composition'], 'msw_b' => $msw_b, 'open_burned' => $open_burned, 'dry_matter' => $activities[$item . '_dry_matter'], 'ef_carbon_f' => $ef_carbon_f, 'ef_fossil_carbon_f' => $ef_fossil_carbon_f, 'ef_oxidation_f' => $ef_oxidation_f, 'ef_cf' => $ef_cf, 'co2' => $co2, 'row_num' => $no++, ]; $this->createOrUpdate([ 'inventory_year' => $inventoryYear, 'activity_year' => $activityYear, 'category' => $wsCode, 'activity_code' => $item, '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 = array_sum(array_column($dataForms, 'co2')); // $ch4 = null; // $n2o = null; $dataForm = [ 'inventory_year' => $inventoryYear, 'activity_year' => $activityYear, 'sector' => $this->sectorCode, 'ws_code' => '4C', 'co2' => $co2, // 'ch4' => $ch4, // 'n2o' => $n2o, ]; $this->createOrUpdate([ 'inventory_year' => $inventoryYear, 'activity_year' => $activityYear, 'sector' => $this->sectorCode, 'ws_code' => '4C', 'row_status' => 1, ], $dataForm, ActivityCrf::class); } catch (\Exception $e) { throw $e; } } }