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] ?? '';
 | |
|     }
 | |
| }
 |