model = $model; } public function save($code, $inventoryYear) { try { $dataBatch = []; $ws = $this->getWs($code); $years = activityYearRange($inventoryYear); if ($ws && class_basename($ws->model) == 'Waste4B2') { 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; } } private function getKomposBasedOnInventoryYear($inventoryYear, $activityYear) { $form = ActivityForm::where('inventory_year', $inventoryYear) ->where('sector', 'waste')->where('form_code', 'pengelolaan_sampah')->whereNull('agency_id') ->rowActive()->first(); if ($form) { $activityFormDetail = ActivityFormDetail::where('form_id', $form->id) ->where('activity_year', $activityYear) ->where('activity_code', 'kompos') ->rowActive() ->first(); return $activityFormDetail ? $activityFormDetail->activity_value : 0; } return 0; } public function calcAndSave($inventoryYear, $activityYear, $ws) { // Initialize variables $dataForms = []; $sector = $this->sectorCode; $code = $this->formCode; $wsCode = $ws->ws_code; try { $activity = 'timbulan_sampah'; $value = ActivityFormDetail::getValue($inventoryYear, $activityYear, $sector, $code, $activity); $kompos = $this->getKomposBasedOnInventoryYear($inventoryYear, $activityYear); $num_waste = $value / 1000 * $kompos / 100; $ef = ReferenceEf::getValue($activity, 'ef_n2o', 'kompos'); $n2o = $num_waste * 0.5053375 * $ef / 1000; $no = 1; $dataForm = [ 'inventory_year' => $inventoryYear, 'activity_year' => $activityYear, 'activity_code' => $activity, 'category' => $wsCode, 'value' => $value, 'kompos' => $kompos, 'num_waste' => $num_waste, 'ef' => $ef, 'n2o' => $n2o, '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 = null; $n2o = array_sum(array_column($dataForms, 'n2o')); $dataForm = [ 'inventory_year' => $inventoryYear, 'activity_year' => $activityYear, 'sector' => $this->sectorCode, 'ws_code' => '4B', 'co2' => $co2, // 'ch4' => $ch4, 'n2o' => $n2o, ]; $this->createOrUpdate([ 'inventory_year' => $inventoryYear, 'activity_year' => $activityYear, 'sector' => $this->sectorCode, 'ws_code' => '4B', 'row_status' => 1, ], $dataForm, ActivityCrf::class); } catch (\Exception $e) { throw $e; } } }