141 lines
4.2 KiB
PHP
141 lines
4.2 KiB
PHP
<?php
|
|
|
|
namespace App\Services\Emisi;
|
|
|
|
use App\Models\ActivityCrf;
|
|
use App\Models\ActivityForm;
|
|
use App\Models\ActivityFormDetail;
|
|
use App\Models\ReferenceEf;
|
|
use App\Models\Waste4B2;
|
|
use App\Services\SigdCrudService;
|
|
|
|
class Waste4B2Service extends SigdCrudService
|
|
{
|
|
private $sectorCode = 'waste';
|
|
private $formCode = 'sampah';
|
|
|
|
public function __construct(Waste4B2 $model)
|
|
{
|
|
$this->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;
|
|
}
|
|
}
|
|
}
|