139 lines
5.2 KiB
PHP
139 lines
5.2 KiB
PHP
<?php
|
|
|
|
namespace App\Services\Emisi;
|
|
|
|
use App\Models\ReferenceEf;
|
|
use App\Models\Waste4AMethane;
|
|
use App\Models\Waste4APre;
|
|
use App\Services\SigdCrudService;
|
|
|
|
class Waste4AMethaneService extends SigdCrudService
|
|
{
|
|
private $sectorCode = 'waste';
|
|
private $formCode = 'sampah';
|
|
public function __construct(Waste4AMethane $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) == 'Waste4AMethane') {
|
|
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 = [];
|
|
|
|
# inisialisasi data aktivitas
|
|
foreach ($items as $item) {
|
|
$activities[$item . '_amount'] = 0;
|
|
$activities[$item . '_dry_matter'] = 0;
|
|
}
|
|
|
|
try {
|
|
$dataForms = [];
|
|
$wsCode = $ws->ws_code;
|
|
|
|
# ambil data aktivitas
|
|
$ws4a_pre = Waste4APre::whereIn('activity', ['amount', '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;
|
|
}
|
|
}
|
|
|
|
# ambil ddocm_accumulated tahun sebelumnya
|
|
$no = 1;
|
|
foreach ($items as $item) {
|
|
$ws4a_methane = [];
|
|
if (abs($activityYear - $inventoryYear) == 15) {
|
|
$ws4a_methane = Waste4AMethane::where('activity_year', $activityYear - 1)
|
|
->where('activity_code', $item)->rowActive()->orderBy('updated_at', 'DESC')->first();
|
|
} else {
|
|
$ws4a_methane = Waste4AMethane::where('inventory_year', $inventoryYear)
|
|
->where('activity_year', $activityYear - 1)
|
|
->where('activity_code', $item)->rowActive()->orderBy('updated_at', 'DESC')->first();
|
|
}
|
|
|
|
$ddocm_accumulated_prev = $ws4a_methane->ddocm_accumulated ?? 0;
|
|
$ef_doc = ReferenceEf::getValue($item, 'DOC');
|
|
$ef_docf = ReferenceEf::getValue($item, 'DOCf');
|
|
$ef_exp1 = ReferenceEf::getValue($item, 'exp1');
|
|
$ef_exp2 = ReferenceEf::getValue($item, 'exp2');
|
|
$ef_f = ReferenceEf::getValue($item, 'F');
|
|
$ef_mcf = ReferenceEf::getValue('timbulan_sampah', 'total_weighted_mcf');
|
|
|
|
$amount = $activities[$item . '_amount'] ?? 0;
|
|
$dry_matter = $activities[$item . '_dry_matter'] ? $activities[$item . '_dry_matter'] / 100 : 0;
|
|
|
|
$ddocm_deposited = $amount * $dry_matter * $ef_doc * $ef_docf * $ef_mcf;
|
|
$ddocm_unreacted = $ddocm_deposited * $ef_exp2;
|
|
$ddocm_decomposed_1 = $ddocm_deposited * (1 - $ef_exp2);
|
|
$ddocm_accumulated = $ddocm_unreacted + ($ddocm_accumulated_prev * $ef_exp1);
|
|
$ddocm_decomposed_2 = $ddocm_accumulated_prev * (1 - $ef_exp1) + $ddocm_decomposed_1;
|
|
$ch4 = $ddocm_decomposed_2 * $ef_f * 16 / 12;
|
|
|
|
$dataForm = [
|
|
'inventory_year' => $inventoryYear,
|
|
'activity_year' => $activityYear,
|
|
// 'category' => $wsCode,
|
|
'activity_code' => $item,
|
|
'amount' => $amount,
|
|
'dry_matter' => $dry_matter,
|
|
'ef_doc' => $ef_doc,
|
|
'ef_docf' => $ef_docf,
|
|
'ef_exp1' => $ef_exp1,
|
|
'ef_exp2' => $ef_exp2,
|
|
'ef_f' => $ef_f,
|
|
'ef_mcf' => $ef_mcf,
|
|
|
|
'ddocm_deposited' => $ddocm_deposited,
|
|
'ddocm_unreacted' => $ddocm_unreacted,
|
|
'ddocm_decomposed_1' => $ddocm_decomposed_1,
|
|
'ddocm_accumulated' => $ddocm_accumulated,
|
|
'ddocm_accumulated_prev' => $ddocm_accumulated_prev,
|
|
'ddocm_decomposed_2' => $ddocm_decomposed_2,
|
|
'ch4' => $ch4,
|
|
'row_num' => $no++,
|
|
];
|
|
|
|
$this->createOrUpdate([
|
|
'inventory_year' => $inventoryYear,
|
|
'activity_year' => $activityYear,
|
|
// 'category' => $wsCode,
|
|
'activity_code' => $item,
|
|
'row_status' => 1,
|
|
], $dataForm);
|
|
|
|
$dataForms[] = $dataForm;
|
|
}
|
|
|
|
return $dataForms;
|
|
} catch (\Exception $e) {
|
|
throw $e;
|
|
}
|
|
}
|
|
}
|