sigd/app/Services/Emisi/Waste4AService.php

131 lines
3.6 KiB
PHP

<?php
namespace App\Services\Emisi;
use App\Models\ActivityCrf;
use App\Models\ReferenceEf;
use App\Models\Waste4A;
use App\Models\Waste4AMethane;
use App\Services\SigdCrudService;
class Waste4AService extends SigdCrudService
{
private $sectorCode = 'waste';
public function __construct(Waste4A $model)
{
$this->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;
}
}
}