sigd/app/Services/Emisi/Waste4C1Service.php

87 lines
2.6 KiB
PHP

<?php
namespace App\Services\Emisi;
use App\Models\ActivityFormDetail;
use App\Models\ReferenceEf;
use App\Models\Waste4C1;
use App\Services\SigdCrudService;
class Waste4C1Service extends SigdCrudService
{
private $sectorCode = 'waste';
private $formCode = 'kependudukan';
public function __construct(Waste4C1 $model)
{
$this->model = $model;
}
public function save($code, $inventoryYear)
{
try {
$dataBatch = [];
$ws = $this->getWs($code);
$years = activityYearRange($inventoryYear);
if ($ws && class_basename($ws->model) == 'Waste4C1') {
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)
{
$dataForms = [];
$sector = $this->sectorCode;
$code = $this->formCode;
$wsCode = $ws->ws_code;
try {
// ambil data aktivitas
$population = ActivityFormDetail::getValue($inventoryYear, $activityYear, $sector, $code, 'jumlah_penduduk');
$fraction = ActivityFormDetail::getValue($inventoryYear, $activityYear, $sector, 'pengelolaan_sampah', 'dibakar');
$waste_rate = ActivityFormDetail::getValue($inventoryYear, $activityYear, $sector, 'sampah', 'laju_timbulan_sampah');
$ef_b_frac = ReferenceEf::getValue('laju_timbulan_sampah', 'b_frac');
$msw_b = $population * ($fraction / 100) * $waste_rate * ($ef_b_frac / 100) / 1000;
$no = 1;
$dataForm = [
'inventory_year' => $inventoryYear,
'activity_year' => $activityYear,
'category' => $wsCode,
'population' => $population,
'fraction' => $fraction,
'msw_p' => $waste_rate,
'ef_b_frac' => $ef_b_frac,
'msw_b' => $msw_b,
'row_num' => $no++,
];
$this->createOrUpdate([
'inventory_year' => $inventoryYear,
'activity_year' => $activityYear,
'category' => $wsCode,
'row_status' => 1,
], $dataForm);
$dataForms[] = $dataForm;
return $dataForms;
} catch (\Exception $e) {
throw $e;
}
}
}