747 lines
25 KiB
PHP
747 lines
25 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Pelaporan\AL;
|
|
|
|
use App\Http\Controllers\Controller;
|
|
use Illuminate\Http\Request;
|
|
use App\Models\Pelaporan;
|
|
use App\Models\Ipal;
|
|
use App\Models\IpalParameter;
|
|
use App\Models\Spl_AL;
|
|
use App\Models\NilaiKomponen;
|
|
use App\Models\Pelaporan\Lampiran;
|
|
use Illuminate\Support\Facades\Auth;
|
|
use Illuminate\Support\Facades\Log;
|
|
use Illuminate\Support\Facades\Gate;
|
|
use Carbon\Carbon;
|
|
|
|
/**
|
|
* Controller untuk Parameter Laporan Pengelolaan Air Limbah
|
|
*
|
|
* @author Muammar <official.muammar@gmail.com>
|
|
*/
|
|
class IpalParameterController extends Controller
|
|
{
|
|
/**
|
|
* Display parameter table
|
|
*
|
|
* @param int $idMcIpal
|
|
* @return \Illuminate\Http\Response
|
|
*/
|
|
public function table($idMcIpal)
|
|
{
|
|
// Check authorization
|
|
if (!Gate::allows('pelaporan.view')) {
|
|
abort(403);
|
|
}
|
|
|
|
// Get IPAL data
|
|
$ipal = Ipal::getOneBy(['IpalId' => $idMcIpal]);
|
|
|
|
$data = [
|
|
'IpalId' => $idMcIpal,
|
|
'NamaIpal' => $ipal->nama
|
|
];
|
|
|
|
// If mcipal_parameter is empty, fill it based on refipal_parameter
|
|
$parameter = IpalParameter::getOneBy(['IpalId' => $idMcIpal]);
|
|
|
|
if (!$parameter) {
|
|
$refIpalParam = IpalParameter::getRefIpalParam($ipal->idrefipal);
|
|
|
|
if ($refIpalParam) {
|
|
foreach ($refIpalParam as $row) {
|
|
$dataMcIpalParam = [
|
|
'IpalId' => $idMcIpal,
|
|
'RefIpalParameterId' => $row->id,
|
|
'Nama' => $row->nama,
|
|
'Satuan' => $row->satuan,
|
|
'BakuMutuJenis' => $row->bakumutu_jenis,
|
|
'BakuMutuNilai1' => $row->bakumutu_nilai1,
|
|
'BakuMutuNilai2' => $row->bakumutu_nilai2,
|
|
'BatasEmisi' => $row->batasemisi
|
|
];
|
|
|
|
$idMcIpalParam = IpalParameter::insertMcIpalParam($dataMcIpalParam);
|
|
|
|
// Insert data to mchasiluji_al
|
|
$this->_insertHasilUji($idMcIpal, $idMcIpalParam);
|
|
}
|
|
|
|
$this->_updateNilaiA6($ipal->idmcpelaporan);
|
|
$this->_updateNilaiA7($ipal->idmcpelaporan);
|
|
$this->_updateNilaiSpl($ipal->idmcpelaporan);
|
|
|
|
if (!$this->_cekIpalKomunal($ipal->idmcpelaporan)) {
|
|
$this->_updateNilaiSkl($ipal->idmcpelaporan);
|
|
}
|
|
}
|
|
}
|
|
|
|
return view('pelaporan.ipal.parameter.index', $data);
|
|
}
|
|
|
|
/**
|
|
* Function to get data for datatable
|
|
*
|
|
* @param int $idMcIpal
|
|
* @return \Illuminate\Http\JsonResponse
|
|
*/
|
|
public function getData($idMcIpal)
|
|
{
|
|
$dataParameter = IpalParameter::getData($idMcIpal);
|
|
|
|
$data = [];
|
|
$no = 1;
|
|
|
|
foreach ($dataParameter as $row) {
|
|
if ($row->bakumutu_nilai2) {
|
|
$bakumutu = $row->bakumutu_nilai1 . ' - ' . $row->bakumutu_nilai2;
|
|
} else {
|
|
$bakumutu = $row->bakumutu_nilai1;
|
|
}
|
|
|
|
$data[] = [
|
|
$no,
|
|
$row->nama,
|
|
$row->satuan,
|
|
$bakumutu,
|
|
($row->batasemisi != NULL ? floatval($row->batasemisi) : ''),
|
|
$row->id
|
|
];
|
|
|
|
$no++;
|
|
}
|
|
|
|
$response = [
|
|
'data' => $data,
|
|
'recordsTotal' => count($data)
|
|
];
|
|
|
|
return response()->json($response);
|
|
}
|
|
|
|
/**
|
|
* Function to add new parameter
|
|
*
|
|
* @param int $idMcIpal
|
|
* @return \Illuminate\Http\Response|\Illuminate\Http\JsonResponse
|
|
*/
|
|
public function add(Request $request, $idMcIpal)
|
|
{
|
|
// Check authorization
|
|
if (!Gate::allows('pelaporan.edit')) {
|
|
abort(403);
|
|
}
|
|
|
|
if ($request->has('action')) {
|
|
$response = $this->_insertUpdate($idMcIpal, 'insert', $request);
|
|
|
|
$ipal = Ipal::getOneBy(['IpalId' => $idMcIpal]);
|
|
|
|
$this->_updateNilaiA6($ipal->idmcpelaporan);
|
|
$this->_updateNilaiA7($ipal->idmcpelaporan);
|
|
$this->_updateNilaiSpl($ipal->idmcpelaporan);
|
|
|
|
if (!$this->_cekIpalKomunal($ipal->idmcpelaporan)) {
|
|
$this->_updateNilaiSkl($ipal->idmcpelaporan);
|
|
}
|
|
|
|
return response()->json($response);
|
|
}
|
|
|
|
$data['IpalId'] = $idMcIpal;
|
|
return view('pelaporan.ipal.parameter.add', $data);
|
|
}
|
|
|
|
/**
|
|
* Function to edit parameter
|
|
*
|
|
* @param Request $request
|
|
* @param int $idMcIpalParam
|
|
* @return \Illuminate\Http\Response|\Illuminate\Http\JsonResponse
|
|
*/
|
|
public function edit(Request $request, $idMcIpalParam)
|
|
{
|
|
// Check authorization
|
|
if (!Gate::allows('pelaporan.edit')) {
|
|
abort(403);
|
|
}
|
|
|
|
if ($request->has('action')) {
|
|
$response = $this->_insertUpdate($idMcIpalParam, 'update', $request);
|
|
return response()->json($response);
|
|
} else {
|
|
$data['param'] = IpalParameter::getOneBy(['id' => $idMcIpalParam]);
|
|
return view('pelaporan.ipal.parameter.edit', $data);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Function to delete parameter
|
|
*
|
|
* @param Request $request
|
|
* @param int $idMcIpalParam
|
|
* @return \Illuminate\Http\Response|\Illuminate\Http\JsonResponse
|
|
*/
|
|
public function delete(Request $request, $idMcIpalParam)
|
|
{
|
|
// Check authorization
|
|
if (!Gate::allows('pelaporan.edit')) {
|
|
abort(403);
|
|
}
|
|
|
|
if ($request->has('action')) {
|
|
$idRefIpalParam = IpalParameter::getOneBy(['id' => $idMcIpalParam])->idrefipal_parameter;
|
|
|
|
// Data for logging
|
|
$ipalParameter = IpalParameter::getOneBy(['id' => $idMcIpalParam]);
|
|
$idMcIpal = $ipalParameter->idmcipal;
|
|
$idMcPelaporan = Ipal::getOneBy(['id' => $idMcIpal])->idmcpelaporan;
|
|
$pelaporan = Pelaporan::findOrFail($idMcPelaporan);
|
|
$perusahaan = Pelaporan::getPerusahaan($pelaporan->idrefperusahaan);
|
|
$namaIpal = Ipal::getOneBy(['id' => $idMcIpal])->nama;
|
|
$namaIpalParameter = $ipalParameter->nama;
|
|
|
|
// Delete ipal parameter and hasiluji from database
|
|
IpalParameter::deleteMcIpalParam(['id' => $idMcIpalParam]);
|
|
Ipal::deleteHasilUji(['idmcipal_parameter' => $idMcIpalParam]);
|
|
|
|
if ($request->input('ref_delete')) {
|
|
IpalParameter::disableRefIpalParam($idRefIpalParam);
|
|
}
|
|
|
|
$this->_updateNilaiA6($idMcPelaporan);
|
|
$this->_updateNilaiA7($idMcPelaporan);
|
|
$this->_updateNilaiSpl($idMcPelaporan);
|
|
|
|
if (!$this->_cekIpalKomunal($idMcPelaporan)) {
|
|
$this->_updateNilaiSkl($idMcPelaporan);
|
|
}
|
|
|
|
// Log activity
|
|
$aktivitas = 'Pelaporan AL - ' . $perusahaan->nama . ' - Tahun ' . $pelaporan->tahun . ' - Periode ' .
|
|
$pelaporan->periode . ' - Nama IPAL ' . $namaIpal . ' - Parameter Uji Lab ' .
|
|
$namaIpalParameter;
|
|
Log::info('LOG_DELETE', ['message' => $aktivitas, 'module' => 'pelaporan']);
|
|
|
|
$response = ['message' => 'Parameter Berhasil Dihapus', 'status' => 'success'];
|
|
return response()->json($response);
|
|
} else {
|
|
$param = IpalParameter::getOneBy(['id' => $idMcIpalParam]);
|
|
$ipal = Ipal::getOneBy(['id' => $param->idmcipal]);
|
|
|
|
$data = [
|
|
'idmcipal_param' => $idMcIpalParam,
|
|
'nomor_ipal' => $ipal->nomor,
|
|
'nama_ipal' => $ipal->nama,
|
|
'nama_param' => $param->nama
|
|
];
|
|
|
|
return view('pelaporan.ipal.parameter.delete', $data);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Function to insert into or update table mcipal_parameter and refipal_parameter
|
|
*
|
|
* @param int $id if insert then $id = $idmcipal if update then $id = $idmcipal_parameter
|
|
* @param string $action insert or update
|
|
* @param Request $request
|
|
* @return array $response
|
|
*/
|
|
private function _insertUpdate($id, $action, Request $request)
|
|
{
|
|
$post = $request->all();
|
|
|
|
if ($post['nama'] !== "" && $post['satuan'] !== "") {
|
|
if ($post['bakumutu'] == 1) {
|
|
$bakumutuJenis = 'Angka Tunggal';
|
|
$bakumutuNilai1 = $post['angka_tunggal'];
|
|
$bakumutuNilai2 = '';
|
|
|
|
if (!is_numeric($bakumutuNilai1)) {
|
|
$response = ['message' => 'Data belum lengkap', 'status' => 'error'];
|
|
return $response;
|
|
}
|
|
|
|
if (!(isset($post['batasemisi']) && $post['batasemisi'])) {
|
|
$response = ['message' => 'Beban pencemaran maksimum wajib diisi', 'status' => 'error'];
|
|
return $response;
|
|
}
|
|
} else if ($post['bakumutu'] == 2) {
|
|
$bakumutuJenis = 'Rentang Angka';
|
|
$bakumutuNilai1 = $post['nilai1'];
|
|
$bakumutuNilai2 = $post['nilai2'];
|
|
|
|
if (!(is_numeric($bakumutuNilai1) && is_numeric($bakumutuNilai2))) {
|
|
$response = ['message' => 'Data belum lengkap', 'status' => 'error'];
|
|
return $response;
|
|
}
|
|
|
|
if (!(isset($post['batasemisi']) && $post['batasemisi'])) {
|
|
$response = ['message' => 'Beban pencemaran maksimum wajib diisi', 'status' => 'error'];
|
|
return $response;
|
|
}
|
|
} else if ($post['bakumutu'] == 3) {
|
|
$bakumutuJenis = 'Positif/Negatif';
|
|
$bakumutuNilai1 = $post['bakumutu_3'];
|
|
$bakumutuNilai2 = '';
|
|
|
|
if (!$bakumutuNilai1) {
|
|
$response = ['message' => 'Data belum lengkap', 'status' => 'error'];
|
|
return $response;
|
|
}
|
|
} else if ($post['bakumutu'] == 4) {
|
|
$bakumutuJenis = 'Tanpa Baku Mutu';
|
|
$bakumutuNilai1 = '-';
|
|
$bakumutuNilai2 = '';
|
|
}
|
|
|
|
$dataRefIpalParam = [
|
|
'nama' => $post['nama'],
|
|
'satuan' => $post['satuan'],
|
|
'bakumutu_jenis' => $bakumutuJenis,
|
|
'bakumutu_nilai1' => $bakumutuNilai1,
|
|
'bakumutu_nilai2' => $bakumutuNilai2,
|
|
'batasemisi' => (($post['bakumutu'] == 3 || $post['batasemisi'] === '') ? NULL : $post['batasemisi'])
|
|
];
|
|
|
|
$dataMcIpalParam = $dataRefIpalParam;
|
|
|
|
if ($action == 'insert') {
|
|
$idRefIpal = Ipal::getOneBy(['id' => $id])->idrefipal;
|
|
$dataRefIpalParam['idrefipal'] = $idRefIpal;
|
|
$dataRefIpalParam['del'] = 'n';
|
|
|
|
$idRefIpalParam = IpalParameter::insertRefIpalParam($dataRefIpalParam);
|
|
|
|
$dataMcIpalParam['idmcipal'] = $id;
|
|
$dataMcIpalParam['idrefipal_parameter'] = $idRefIpalParam;
|
|
|
|
$idMcIpalParam = IpalParameter::insertMcIpalParam($dataMcIpalParam);
|
|
|
|
// Insert data to mchasiluji_al
|
|
$this->_insertHasilUji($id, $idMcIpalParam);
|
|
|
|
// Log activity
|
|
$idMcPelaporan = Ipal::getOneBy(['id' => $id])->idmcpelaporan;
|
|
$pelaporan = Pelaporan::findOrFail($idMcPelaporan);
|
|
$perusahaan = Pelaporan::getPerusahaan($pelaporan->idrefperusahaan);
|
|
$namaIpal = Ipal::getOneBy(['id' => $id])->nama;
|
|
$namaIpalParameter = $dataMcIpalParam['nama'];
|
|
|
|
$aktivitas = 'Pelaporan AL - ' . $perusahaan->nama . ' - Tahun ' . $pelaporan->tahun . ' - Periode ' .
|
|
$pelaporan->periode . ' - Nama IPAL ' . $namaIpal . ' - Parameter Uji Lab ' .
|
|
$namaIpalParameter;
|
|
Log::info('LOG_CREATE', ['message' => $aktivitas, 'module' => 'pelaporan']);
|
|
} elseif ($action == 'update') {
|
|
IpalParameter::updateMcIpalParam($id, $dataMcIpalParam);
|
|
|
|
if (isset($post['ref_save'])) {
|
|
$idRefIpalParam = IpalParameter::getOneBy(['id' => $id])->idrefipal_parameter;
|
|
IpalParameter::updateRefIpalParam($idRefIpalParam, $dataRefIpalParam);
|
|
}
|
|
|
|
// Log activity
|
|
$ipalParameter = IpalParameter::getOneBy(['id' => $id]);
|
|
$idMcIpal = $ipalParameter->idmcipal;
|
|
$idMcPelaporan = Ipal::getOneBy(['id' => $idMcIpal])->idmcpelaporan;
|
|
$pelaporan = Pelaporan::findOrFail($idMcPelaporan);
|
|
$perusahaan = Pelaporan::getPerusahaan($pelaporan->idrefperusahaan);
|
|
$namaIpal = Ipal::getOneBy(['id' => $idMcIpal])->nama;
|
|
$namaIpalParameter = $ipalParameter->nama;
|
|
|
|
$aktivitas = 'Pelaporan AL - ' . $perusahaan->nama . ' - Tahun ' . $pelaporan->tahun . ' - Periode ' .
|
|
$pelaporan->periode . ' - Nama IPAL ' . $namaIpal . ' - Parameter Uji Lab ' .
|
|
$namaIpalParameter;
|
|
Log::info('LOG_EDIT', ['message' => $aktivitas, 'module' => 'pelaporan']);
|
|
}
|
|
|
|
$response = ['message' => 'Parameter Berhasil Disimpan', 'status' => 'success'];
|
|
} else {
|
|
$response = ['message' => 'Data belum lengkap', 'status' => 'error'];
|
|
}
|
|
|
|
return $response;
|
|
}
|
|
|
|
/**
|
|
* Insert hasil uji for new parameter
|
|
*
|
|
* @param int $idMcIpal
|
|
* @param int $idMcIpalParam
|
|
* @return void
|
|
*/
|
|
private function _insertHasilUji($idMcIpal, $idMcIpalParam)
|
|
{
|
|
$ipal = Ipal::getOneBy(['id' => $idMcIpal]);
|
|
$pelaporan = Pelaporan::findOrFail($ipal->idmcpelaporan);
|
|
|
|
$dataHasilUji = [];
|
|
$bulan = 0;
|
|
|
|
if ($pelaporan->idrefperiodepelaporan == 1) {
|
|
$bulan = 1;
|
|
} elseif ($pelaporan->idrefperiodepelaporan == 2) {
|
|
$bulan = 4;
|
|
} elseif ($pelaporan->idrefperiodepelaporan == 3) {
|
|
$bulan = 7;
|
|
} elseif ($pelaporan->idrefperiodepelaporan == 4) {
|
|
$bulan = 10;
|
|
}
|
|
|
|
for ($i = 0; $i < 3; $i++) {
|
|
$dataHasilUji[] = [
|
|
'idmcipal' => $idMcIpal,
|
|
'tahun' => $pelaporan->tahun,
|
|
'idrefperusahaan' => $pelaporan->idrefperusahaan,
|
|
'idmcipal_parameter' => $idMcIpalParam,
|
|
'bulan' => $this->_mcMonth($bulan)
|
|
];
|
|
$bulan++;
|
|
}
|
|
|
|
Ipal::insertHasilUji($dataHasilUji);
|
|
}
|
|
|
|
/**
|
|
* Update nilai A6
|
|
*
|
|
* @param int $idMcPelaporan
|
|
* @return void
|
|
*/
|
|
private function _updateNilaiA6($idMcPelaporan)
|
|
{
|
|
$pelaporan = Pelaporan::findOrFail($idMcPelaporan);
|
|
$allIpal = Ipal::getData($idMcPelaporan);
|
|
|
|
$periode = $pelaporan->idrefperiodepelaporan;
|
|
$bulanAwal = (($periode - 1) * 3) + 1;
|
|
$jmlNilaiIpal = 0;
|
|
|
|
foreach ($allIpal as $row) {
|
|
$jmlNilaiParam = 0;
|
|
for ($i = 0; $i < 3; $i++) {
|
|
$filter = [
|
|
'idmcipal' => $row->id,
|
|
'bulan' => $this->_mcMonth($bulanAwal + $i),
|
|
'nilai !=' => 'NULL'
|
|
];
|
|
$hasilUji = Ipal::getHasilUjiBy($filter);
|
|
|
|
if ($hasilUji) {
|
|
$jmlNilaiParam += 100;
|
|
}
|
|
}
|
|
$nilaiIpal = $jmlNilaiParam / 3;
|
|
$jmlNilaiIpal += $nilaiIpal;
|
|
}
|
|
|
|
if (count($allIpal)) {
|
|
$nilaiA6 = $jmlNilaiIpal / count($allIpal);
|
|
} else {
|
|
$nilaiA6 = 0;
|
|
}
|
|
|
|
$idRefKomponen = Ipal::getIdRefKomponen('A6');
|
|
|
|
$filter = [
|
|
'idmcpelaporan' => $idMcPelaporan,
|
|
'idrefkomponen' => $idRefKomponen
|
|
];
|
|
|
|
if (Ipal::getNilaiKomponen($filter)) {
|
|
$data = ['nilai' => $nilaiA6];
|
|
Ipal::updateNilaiKomponen($filter, $data);
|
|
} else {
|
|
$data = [
|
|
'idmcpelaporan' => $idMcPelaporan,
|
|
'idrefkomponen' => $idRefKomponen,
|
|
'idrefhasil' => 0,
|
|
'nilai' => $nilaiA6
|
|
];
|
|
Ipal::insertNilaiKomponen($data);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Update nilai A7
|
|
*
|
|
* @param int $idMcPelaporan
|
|
* @return void
|
|
*/
|
|
private function _updateNilaiA7($idMcPelaporan)
|
|
{
|
|
$pelaporan = Pelaporan::findOrFail($idMcPelaporan);
|
|
$allIpal = Ipal::getData($idMcPelaporan);
|
|
|
|
$periode = $pelaporan->idrefperiodepelaporan;
|
|
$bulanAwal = (($periode - 1) * 3) + 1;
|
|
$jmlNilaiIpal = 0;
|
|
|
|
foreach ($allIpal as $row) {
|
|
$jmlNilaiParam = 0;
|
|
$params = IpalParameter::getData($row->id);
|
|
$tambahNilai = false;
|
|
|
|
for ($i = 0; $i < 3; $i++) {
|
|
foreach ($params as $param) {
|
|
$filter = [
|
|
'idmcipal_parameter' => $param->id,
|
|
'bulan' => $this->_mcMonth($bulanAwal + $i)
|
|
];
|
|
$hasilUji = Ipal::getHasilUjiBy($filter);
|
|
$tambahNilai = false;
|
|
|
|
if ($hasilUji->nilai) {
|
|
if ($hasilUji->nilai == '*') {
|
|
$tambahNilai = true;
|
|
} elseif ($hasilUji->debit != NULL && $param->bakumutu_jenis != 'Positif/Negatif') {
|
|
if ($hasilUji->bebanemisi > $param->batasemisi) {
|
|
$tambahNilai = false;
|
|
break;
|
|
} else {
|
|
$tambahNilai = true;
|
|
}
|
|
} else {
|
|
if ($param->bakumutu_jenis == 'Angka Tunggal') {
|
|
if ($hasilUji->nilai > $param->bakumutu_nilai1) {
|
|
$tambahNilai = false;
|
|
break;
|
|
}
|
|
} elseif ($param->bakumutu_jenis == 'Rentang Angka') {
|
|
if ($hasilUji->nilai < $param->bakumutu_nilai1 || $hasilUji->nilai > $param->bakumutu_nilai2) {
|
|
$tambahNilai = false;
|
|
break;
|
|
}
|
|
} elseif ($param->bakumutu_jenis == 'Positif/Negatif') {
|
|
if (strtolower($hasilUji->nilai) != strtolower($param->bakumutu_nilai1)) {
|
|
$tambahNilai = false;
|
|
break;
|
|
}
|
|
}
|
|
|
|
$tambahNilai = true;
|
|
}
|
|
} else {
|
|
$tambahNilai = false;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if ($tambahNilai) {
|
|
$jmlNilaiParam += 100;
|
|
}
|
|
}
|
|
$nilaiIpal = $jmlNilaiParam / 3;
|
|
$jmlNilaiIpal += $nilaiIpal;
|
|
}
|
|
|
|
if (count($allIpal)) {
|
|
$nilaiA7 = $jmlNilaiIpal / count($allIpal);
|
|
} else {
|
|
$nilaiA7 = 0;
|
|
}
|
|
|
|
$idRefKomponen = Ipal::getIdRefKomponen('A7');
|
|
|
|
$filter = [
|
|
'idmcpelaporan' => $idMcPelaporan,
|
|
'idrefkomponen' => $idRefKomponen
|
|
];
|
|
|
|
|
|
if (Ipal::getNilaiKomponen($filter)) {
|
|
$data = ['nilai' => $nilaiA7];
|
|
Ipal::updateNilaiKomponen($filter, $data);
|
|
} else {
|
|
$data = [
|
|
'idmcpelaporan' => $idMcPelaporan,
|
|
'idrefkomponen' => $idRefKomponen,
|
|
'idrefhasil' => 0,
|
|
'nilai' => $nilaiA7
|
|
];
|
|
|
|
Ipal::insertNilaiKomponen($data);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Update nilai SPL
|
|
*
|
|
* @param int $idMcPelaporan
|
|
* @return void
|
|
*/
|
|
private function _updateNilaiSpl($idMcPelaporan)
|
|
{
|
|
$allIpal = Ipal::getData($idMcPelaporan);
|
|
$jmlParam = 0;
|
|
$memenuhiBakumutu = 0;
|
|
$memenuhiBatasEmisi = 0;
|
|
|
|
foreach ($allIpal as $ipal) {
|
|
$params = IpalParameter::getData($ipal->id);
|
|
$jmlParam += count($params);
|
|
|
|
$allHasilUji = Ipal::getAllHasilUjiBy([
|
|
'idmcipal' => $ipal->id,
|
|
'nilai !=' => NULL
|
|
]);
|
|
|
|
// Check all hasil uji against bakumutu
|
|
foreach ($allHasilUji as $hasilUji) {
|
|
$param = IpalParameter::getOneBy(['id' => $hasilUji->idmcipal_parameter]);
|
|
|
|
if ($hasilUji->nilai == '*') {
|
|
$memenuhiBakumutu++;
|
|
} elseif ($hasilUji->debit != NULL && $param->bakumutu_jenis != 'Positif/Negatif') {
|
|
if ($hasilUji->bebanemisi <= $param->batasemisi) {
|
|
$memenuhiBatasEmisi++;
|
|
}
|
|
} else {
|
|
if ($param->bakumutu_jenis == 'Angka Tunggal') {
|
|
if ($hasilUji->nilai <= $param->bakumutu_nilai1) {
|
|
$memenuhiBakumutu++;
|
|
}
|
|
} elseif ($param->bakumutu_jenis == 'Rentang Angka') {
|
|
if ($hasilUji->nilai >= $param->bakumutu_nilai1 && $hasilUji->nilai <= $param->bakumutu_nilai2) {
|
|
$memenuhiBakumutu++;
|
|
}
|
|
} elseif ($param->bakumutu_jenis == 'Positif/Negatif') {
|
|
if (strtolower($hasilUji->nilai) == strtolower($param->bakumutu_nilai1)) {
|
|
$memenuhiBakumutu++;
|
|
}
|
|
} elseif ($param->bakumutu_jenis == 'Tanpa Baku Mutu') {
|
|
$memenuhiBakumutu++;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
$totalParam = $jmlParam * 3;
|
|
$melebihiBakumutuEmisi = $totalParam - $memenuhiBakumutu - $memenuhiBatasEmisi;
|
|
|
|
if ($totalParam) {
|
|
$nilaiSpl = 100 - (($melebihiBakumutuEmisi / $totalParam) * 100);
|
|
} else {
|
|
$nilaiSpl = 0;
|
|
}
|
|
|
|
if (Ipal::getNilaiSpl($idMcPelaporan)) {
|
|
$data = [
|
|
'diuji' => $totalParam,
|
|
'melebihi' => $melebihiBakumutuEmisi,
|
|
'nilaispl' => $nilaiSpl
|
|
];
|
|
Ipal::updateNilaiSpl($idMcPelaporan, $data);
|
|
} else {
|
|
$data = [
|
|
'idmcpelaporan' => $idMcPelaporan,
|
|
'diuji' => $totalParam,
|
|
'melebihi' => $melebihiBakumutuEmisi,
|
|
'nilaispl' => $nilaiSpl
|
|
];
|
|
Ipal::insertNilaiSpl($data);
|
|
}
|
|
|
|
Pelaporan::updateNilaiSpl($idMcPelaporan, 2, $nilaiSpl);
|
|
Pelaporan::getAvgSpl($idMcPelaporan);
|
|
}
|
|
|
|
/**
|
|
* Check if IPAL is komunal
|
|
*
|
|
* @param int $idMcPelaporan
|
|
* @return bool
|
|
*/
|
|
private function _cekIpalKomunal($idMcPelaporan)
|
|
{
|
|
$ipalKomunal = Spl_AL::getStatusMcKomunal($idMcPelaporan);
|
|
|
|
if ($ipalKomunal) {
|
|
if ($ipalKomunal->tersambung == 'Iya') {
|
|
$sk = Lampiran::getKomponenByKode('SK');
|
|
if ($sk) {
|
|
$lampiranSk = Spl_AL::cekLampiranSk($idMcPelaporan, $sk->id);
|
|
if ($lampiranSk) {
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* Update nilai SKL
|
|
*
|
|
* @param int $idMcPelaporan
|
|
* @return void
|
|
*/
|
|
private function _updateNilaiSkl($idMcPelaporan)
|
|
{
|
|
$totalNilai1 = 0;
|
|
$totalNilai2 = 0;
|
|
$totalNilai3 = 0;
|
|
$kelompok1 = ['A1', 'A2', 'A3', 'A4'];
|
|
$kelompok2 = ['A5'];
|
|
$kelompok3 = ['A6', 'A7', 'A8', 'A9', 'A10'];
|
|
|
|
for ($i = 1; $i <= 10; $i++) {
|
|
$komponen = 'A' . $i;
|
|
$idRefKomponen = Ipal::getIdRefKomponen($komponen);
|
|
|
|
$nilaiKomponen = Ipal::getNilaiKomponen([
|
|
'idmcpelaporan' => $idMcPelaporan,
|
|
'idrefkomponen' => $idRefKomponen,
|
|
'idmcipal' => NULL
|
|
]);
|
|
|
|
if ($nilaiKomponen) {
|
|
if (in_array($komponen, $kelompok1)) {
|
|
$totalNilai1 += $nilaiKomponen->nilai;
|
|
} elseif (in_array($komponen, $kelompok2)) {
|
|
$totalNilai2 += $nilaiKomponen->nilai;
|
|
} else {
|
|
$totalNilai3 += $nilaiKomponen->nilai;
|
|
}
|
|
}
|
|
}
|
|
|
|
$skl = (15 * ($totalNilai1 / count($kelompok1)) / 100) +
|
|
(15 * ($totalNilai2 / count($kelompok2)) / 100) +
|
|
(70 * ($totalNilai3 / count($kelompok3)) / 100);
|
|
|
|
Pelaporan::updateNilaiSkl($idMcPelaporan, 2, $skl);
|
|
Pelaporan::updateAvgSkl($idMcPelaporan);
|
|
}
|
|
|
|
/**
|
|
* Convert month number to name
|
|
*
|
|
* @param int $monthNum
|
|
* @return string
|
|
*/
|
|
private function _mcMonth($monthNum)
|
|
{
|
|
$months = [
|
|
1 => 'January',
|
|
2 => 'February',
|
|
3 => 'March',
|
|
4 => 'April',
|
|
5 => 'May',
|
|
6 => 'June',
|
|
7 => 'July',
|
|
8 => 'August',
|
|
9 => 'September',
|
|
10 => 'October',
|
|
11 => 'November',
|
|
12 => 'December'
|
|
];
|
|
|
|
return $months[$monthNum] ?? '';
|
|
}
|
|
}
|