525 lines
		
	
	
		
			17 KiB
		
	
	
	
		
			PHP
		
	
	
			
		
		
	
	
			525 lines
		
	
	
		
			17 KiB
		
	
	
	
		
			PHP
		
	
	
| <?php
 | |
| 
 | |
| namespace App\Http\Controllers\Pelaporan\AL;
 | |
| 
 | |
| use App\Http\Controllers\Controller;
 | |
| use Illuminate\Http\Request;
 | |
| use App\Models\Komponen;
 | |
| use App\Models\Spl_AL;
 | |
| use App\Models\Ipal;
 | |
| use App\Models\IpalParameter;
 | |
| use App\Models\HasilUjiAL;
 | |
| use App\Models\LampiranAL;
 | |
| use App\Models\NilaiKomponen;
 | |
| use App\Models\PelaporanDate;
 | |
| use App\Models\Catatan;
 | |
| use App\Models\Pelaporan\Lampiran;
 | |
| use App\Models\Pelaporan\Pelaporan;
 | |
| use Illuminate\Support\Facades\Auth;
 | |
| use Illuminate\Support\Facades\Gate;
 | |
| use Barryvdh\DomPDF\Facade\Pdf;
 | |
| use Illuminate\Support\Facades\Log;
 | |
| 
 | |
| /**
 | |
|  * Controller untuk Laporan Pengelolaan Air Limbah
 | |
|  *
 | |
|  * @author Muammar <official.muammar@gmail.com>
 | |
|  */
 | |
| class ALController extends Controller
 | |
| {
 | |
|     const ID_REFPELAPORAN = 2;
 | |
| 
 | |
|     /**
 | |
|      * Menampilkan halaman laporan
 | |
|      */
 | |
|     public function laporan($idPelaporan)
 | |
|     {
 | |
|         // Check authorization
 | |
|         if (!Gate::allows('pelaporan.view')) {
 | |
|             abort(403);
 | |
|         }
 | |
| 
 | |
|         // Load models
 | |
|         $pelaporan = Pelaporan::findOrFail($idPelaporan);
 | |
| 
 | |
|         // Set breadcrumb data
 | |
|         $breadcrumb = $this->_generateBreadcrumb('Pelaporan');
 | |
| 
 | |
|         // Get editable status
 | |
|         $editable = $this->_isEditable($idPelaporan, 'AL') && Gate::allows('pelaporan.edit');
 | |
| 
 | |
|         // Check IPAL Komunal status
 | |
|         $ipalKomunal = $this->_getIpalKomunalStatus($idPelaporan);
 | |
|         $lampiranSk = 0;
 | |
|         $verifikasiSk = '';
 | |
|         $ketSk = '';
 | |
| 
 | |
|         if ($ipalKomunal) {
 | |
|             if ($ipalKomunal->tersambung == 'Iya') {
 | |
|                 $sk = Lampiran::getKomponenByKode('SK');
 | |
|                 if ($sk) {
 | |
|                     $lampiranSk = $this->_cekLampiranSk($idPelaporan, $sk->id) ? 1 : 0;
 | |
|                 }
 | |
|             }
 | |
| 
 | |
|             // Verifikasi surat kerjasama
 | |
|             $idKomponenSk = Lampiran::getKomponenByKode('SK')->id;
 | |
|             $komponenSk = Ipal::getNilaiKomponen([
 | |
|                 'idmcpelaporan' => $idPelaporan,
 | |
|                 'idrefkomponen' => $idKomponenSk
 | |
|             ]);
 | |
| 
 | |
|             if (!$editable && $komponenSk) {
 | |
|                 if ($komponenSk->verifikasi !== null) {
 | |
|                     $verifikasiSk = $komponenSk->verifikasi == '1' ? 'Approved' : 'Not Approved';
 | |
|                 }
 | |
|                 $ketSk = $komponenSk->keterangan;
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         // Prepare data for view
 | |
|         $data = [
 | |
|             'breadcrumb' => $breadcrumb,
 | |
|             'NamaPerusahaan' => $pelaporan->perusahaan,
 | |
|             'Tahun' => $pelaporan->tahun,
 | |
|             'periode' => $pelaporan->periode,
 | |
|             'editable' => $editable,
 | |
|             'lampiran_sk' => $lampiranSk,
 | |
|             'verifikasi_sk' => $verifikasiSk,
 | |
|             'ipal_komunal' => $ipalKomunal ? $ipalKomunal->tersambung : '',
 | |
|             'ket_sk' => $ketSk,
 | |
|             'idmcpelaporan' => $idPelaporan,
 | |
|             'catatan' => Komponen::getCatatan($idPelaporan, self::ID_REFPELAPORAN)
 | |
|         ];
 | |
| 
 | |
|         return view('pelaporan.al', $data);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Function to load al table
 | |
|      */
 | |
|     public function table($idPelaporan)
 | |
|     {
 | |
|         // Check authorization
 | |
|         if (!Gate::allows('pelaporan.view')) {
 | |
|             abort(403);
 | |
|         }
 | |
| 
 | |
|         // Load pelaporan data
 | |
|         $pelaporan = Pelaporan::findOrFail($idPelaporan);
 | |
| 
 | |
|         // Get reference data
 | |
|         $getData = Komponen::getDataRef(self::ID_REFPELAPORAN);
 | |
|         $dataTable = $getData['data'];
 | |
|         $rowspan1 = $getData['total_rows'] + 1;
 | |
| 
 | |
|         // Get nilai komponen
 | |
|         $nilaiKomponen = Komponen::getNilaiKomponen($idPelaporan, self::ID_REFPELAPORAN);
 | |
| 
 | |
|         // Get nilai komponen A6 and A7
 | |
|         $komponenCodes = ['A6', 'A7'];
 | |
|         $nilaiData = [];
 | |
| 
 | |
|         foreach ($komponenCodes as $code) {
 | |
|             $nilaiData['nilai_' . $code] = '';
 | |
|             $idRefKomponen = Ipal::getIdRefKomponen($code);
 | |
|             $filter = [
 | |
|                 'idmcpelaporan' => $idPelaporan,
 | |
|                 'idrefkomponen' => $idRefKomponen
 | |
|             ];
 | |
| 
 | |
|             $nilaiKomponenValue = Ipal::getNilaiKomponen($filter);
 | |
|             if ($nilaiKomponenValue) {
 | |
|                 $nilaiData['nilai_' . $code] = $nilaiKomponenValue->nilai;
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         // Get nilai syarat teknis
 | |
|         $kodeSyaratTeknis = ['A1', 'A2', 'A3', 'A4', 'A5'];
 | |
|         $nilaiSyaratTeknis = [];
 | |
| 
 | |
|         foreach ($kodeSyaratTeknis as $kode) {
 | |
|             $idKomponen = Ipal::getIdRefKomponen($kode);
 | |
|             $komponenSyaratTeknis = Ipal::getNilaiKomponen([
 | |
|                 'idmcpelaporan' => $idPelaporan,
 | |
|                 'idmcipal' => null,
 | |
|                 'idrefkomponen' => $idKomponen
 | |
|             ]);
 | |
| 
 | |
|             $nilaiSyaratTeknis[$kode] = $komponenSyaratTeknis ? $komponenSyaratTeknis->nilai : 0;
 | |
|         }
 | |
| 
 | |
|         // Update nilai SPL
 | |
|         $this->_updateNilaiSpl($idPelaporan);
 | |
|         $spl = number_format($pelaporan->spl_al, 2, '.', ' ');
 | |
| 
 | |
|         $splAl = Ipal::getNilaiSpl($idPelaporan);
 | |
|         $spl2 = $splAl ? number_format($splAl->nilaispl, 2, '.', ' ') : 0;
 | |
| 
 | |
|         // Prepare data for view
 | |
|         $data = array_merge($nilaiData, [
 | |
|             'data_table' => $dataTable,
 | |
|             'rowspan_1' => $rowspan1,
 | |
|             'nilai_komponen' => $nilaiKomponen,
 | |
|             'nilai_syarat_teknis' => $nilaiSyaratTeknis,
 | |
|             'spl' => $spl,
 | |
|             'spl_2' => $spl2,
 | |
|             'idmcpelaporan' => $idPelaporan,
 | |
|             'idrefpelaporan' => self::ID_REFPELAPORAN
 | |
|         ]);
 | |
| 
 | |
|         return view('pelaporan.al_table', $data);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Display SPL data
 | |
|      */
 | |
|     public function spl($idPelaporan)
 | |
|     {
 | |
|         // Load pelaporan data
 | |
|         $pelaporan = Pelaporan::findOrFail($idPelaporan);
 | |
|         $spl = Ipal::getNilaiSpl($idPelaporan);
 | |
| 
 | |
|         // Prepare data for view
 | |
|         $data = [
 | |
|             'NamaPerusahaan' => $pelaporan->perusahaan,
 | |
|             'Tahun' => $pelaporan->tahun,
 | |
|             'periode' => $pelaporan->periode,
 | |
|             'spl' => $spl
 | |
|         ];
 | |
| 
 | |
|         return view('pelaporan.spl_al', $data);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Check if there are attachments
 | |
|      */
 | |
|     public function cekAdaLampiran($idPelaporan)
 | |
|     {
 | |
|         // Check authorization
 | |
|         if (!Gate::allows('pelaporan.view')) {
 | |
|             abort(403);
 | |
|         }
 | |
| 
 | |
|         $response = Lampiran::cekAdaLampiran($idPelaporan, self::ID_REFPELAPORAN);
 | |
|         return response()->json($response);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Check for surat kerjasama
 | |
|      */
 | |
|     public function cekSuratKerjasama($idPelaporan)
 | |
|     {
 | |
|         // Check authorization
 | |
|         if (!Gate::allows('pelaporan.view')) {
 | |
|             abort(403);
 | |
|         }
 | |
| 
 | |
|         $sk = Lampiran::getKomponenByKode('SK');
 | |
|         if ($sk) {
 | |
|             $lampiranSk = $this->_cekLampiranSk($idPelaporan, $sk->id);
 | |
|             $response = ['lampiran' => $lampiranSk ? true : false];
 | |
|         } else {
 | |
|             $response = ['lampiran' => false];
 | |
|         }
 | |
| 
 | |
|         return response()->json($response);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Save AL data
 | |
|      */
 | |
|     public function simpan(Request $request, $idPelaporan)
 | |
|     {
 | |
|         // Check authorization
 | |
|         if (!Gate::allows('pelaporan.view') || !Gate::allows('pelaporan.edit')) {
 | |
|             abort(403);
 | |
|         }
 | |
| 
 | |
|         $dataCatatan = $request->input('catatan');
 | |
|         $dataHasil = [];
 | |
| 
 | |
|         if ($request->has('hasil')) {
 | |
|             foreach ($request->input('hasil') as $row => $value) {
 | |
|                 $dataHasil[$row] = $value;
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         if (!empty($dataHasil)) {
 | |
|             Komponen::updateHasil($idPelaporan, self::ID_REFPELAPORAN, $dataHasil);
 | |
|         }
 | |
| 
 | |
|         // Update SKL nilai if provided
 | |
|         if ($request->has('skl-nilai')) {
 | |
|             $nilaiSkl = $request->input('skl-nilai');
 | |
|             Pelaporan::updateNilaiSkl($idPelaporan, self::ID_REFPELAPORAN, $nilaiSkl);
 | |
|             Pelaporan::updateAvgSkl($idPelaporan);
 | |
|         }
 | |
| 
 | |
|         // Update status IPAL Komunal
 | |
|         $statusIpalKomunal = $request->input('ipal_komunal', 'Tidak');
 | |
|         $this->_updateStatusIpalKomunal($idPelaporan, $statusIpalKomunal);
 | |
| 
 | |
|         // Save catatan
 | |
|         Komponen::simpanCatatan($idPelaporan, self::ID_REFPELAPORAN, $dataCatatan);
 | |
| 
 | |
|         // Update mcpelaporan_date
 | |
|         Pelaporan::updateTanggalPelaporan([
 | |
|             'id_mcpelaporan' => $idPelaporan,
 | |
|             'id_refpelaporan' => self::ID_REFPELAPORAN
 | |
|         ], now()->toDateString());
 | |
| 
 | |
|         // Update table mcverifikasi
 | |
|         $filter = [
 | |
|             'idmcpelaporan' => $idPelaporan,
 | |
|             'idrefpelaporan' => self::ID_REFPELAPORAN
 | |
|         ];
 | |
| 
 | |
|         $dataUpdate = [
 | |
|             'verifikasi' => 1,
 | |
|             'tanggal' => now()->format('Y-m-d H:i:s'),
 | |
|             'oleh' => Auth::id()
 | |
|         ];
 | |
| 
 | |
|         Pelaporan::updateStatusVerifikasi($filter, $dataUpdate);
 | |
| 
 | |
|         // Log activity
 | |
|         $pelaporan = Pelaporan::findOrFail($idPelaporan);
 | |
|         $perusahaan = Pelaporan::getPerusahaan($pelaporan->idrefperusahaan);
 | |
|         $aktivitas = 'Pelaporan AL - ' . $perusahaan->nama . ' - Tahun ' . $pelaporan->tahun .
 | |
|                     ' - Periode ' . $pelaporan->periode;
 | |
| 
 | |
|         Log::info('LOG_EDIT', ['message' => $aktivitas, 'module' => 'pelaporan']);
 | |
| 
 | |
|         $response = [
 | |
|             'message' => 'Data Pengelolaan Air Limbah berhasil disimpan',
 | |
|             'status' => 'success'
 | |
|         ];
 | |
| 
 | |
|         return response()->json($response);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Export data to PDF
 | |
|      */
 | |
|     public function exportPdf($idPelaporan)
 | |
|     {
 | |
|         // Check authorization
 | |
|         if (!Gate::allows('pelaporan.export')) {
 | |
|             abort(403);
 | |
|         }
 | |
| 
 | |
|         // Load pelaporan data
 | |
|         $pelaporan = Pelaporan::findOrFail($idPelaporan);
 | |
| 
 | |
|         // Prepare data for PDF
 | |
|         $getData = Komponen::getDataRef(self::ID_REFPELAPORAN);
 | |
|         $dataTable = $getData['data'];
 | |
|         $rowspan1 = $getData['total_rows'] + 1;
 | |
|         $nilaiKomponen = Komponen::getNilaiKomponen($idPelaporan, self::ID_REFPELAPORAN);
 | |
|         $catatan = Komponen::getCatatan($idPelaporan, self::ID_REFPELAPORAN);
 | |
| 
 | |
|         // Get IPAL Komunal status
 | |
|         $ipalKomunal = $this->_getIpalKomunalStatus($idPelaporan);
 | |
|         $lampiranSk = 0;
 | |
|         $komponenSk = null;
 | |
| 
 | |
|         if ($ipalKomunal) {
 | |
|             $statusIpalKomunal = $ipalKomunal->tersambung;
 | |
|             // Check lampiran surat kerjasama
 | |
|             $sk = Lampiran::getKomponenByKode('SK');
 | |
|             if ($sk) {
 | |
|                 $lampiranSk = $this->_cekLampiranSk($idPelaporan, $sk->id);
 | |
|                 if ($lampiranSk) {
 | |
|                     $komponenSk = Ipal::getNilaiKomponen([
 | |
|                         'idmcpelaporan' => $idPelaporan,
 | |
|                         'idrefkomponen' => $sk->id
 | |
|                     ]);
 | |
|                     $lampiranSk = 1;
 | |
|                 }
 | |
|             }
 | |
|         } else {
 | |
|             $statusIpalKomunal = 'Tidak';
 | |
|         }
 | |
| 
 | |
|         // Get syarat teknis values
 | |
|         $syaratTeknis = ['A1', 'A2', 'A3', 'A4', 'A5'];
 | |
|         $nilaiSyaratTeknis = [];
 | |
| 
 | |
|         foreach ($syaratTeknis as $kode) {
 | |
|             $idKomponen = Ipal::getIdRefKomponen($kode);
 | |
|             $komponenSyaratTeknis = Ipal::getNilaiKomponen([
 | |
|                 'idmcpelaporan' => $idPelaporan,
 | |
|                 'idmcipal' => null,
 | |
|                 'idrefkomponen' => $idKomponen
 | |
|             ]);
 | |
| 
 | |
|             $nilaiSyaratTeknis[$kode] = $komponenSyaratTeknis ? $komponenSyaratTeknis->nilai : 0;
 | |
|         }
 | |
| 
 | |
|         // Get SKL and SPL values
 | |
|         $skl = Pelaporan::getNilaiSkl($idPelaporan, self::ID_REFPELAPORAN);
 | |
|         $spl = $ipalKomunal && $ipalKomunal->tersambung == 'Iya' ? 100 : number_format($pelaporan->spl_al, 2, '.', ' ');
 | |
| 
 | |
|         // Generate PDF
 | |
|         $pdf = PDF::loadView('pelaporan.al_pdf', [
 | |
|             'NamaPerusahaan' => $pelaporan->perusahaan,
 | |
|             'Tahun' => $pelaporan->tahun,
 | |
|             'periode' => $pelaporan->periode,
 | |
|             'data_table' => $dataTable,
 | |
|             'rowspan_1' => $rowspan1,
 | |
|             'nilai_komponen' => $nilaiKomponen,
 | |
|             'catatan' => $catatan,
 | |
|             'ipal_komunal' => $statusIpalKomunal,
 | |
|             'lampiran_sk' => $lampiranSk,
 | |
|             'komponen_sk' => $komponenSk,
 | |
|             'skl' => $skl,
 | |
|             'spl' => $spl,
 | |
|             'nilai_syarat_teknis' => $nilaiSyaratTeknis
 | |
|         ]);
 | |
| 
 | |
|         return $pdf->download('Laporan_al_' . $pelaporan->perusahaan . '_' . $pelaporan->tahun . '_' . $pelaporan->periode . '.pdf');
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Update nilai SPL
 | |
|      */
 | |
|     private function _updateNilaiSpl($idPelaporan)
 | |
|     {
 | |
|         $allIpal = Ipal::getData($idPelaporan);
 | |
|         $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 each 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' && $param->batasemisi) {
 | |
|                     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++;
 | |
|                         }
 | |
|                     }
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         $totalParam = $jmlParam * 3;
 | |
|         $melebihiBakuMutuEmisi = $totalParam - $memenuhiBakuMutu - $memenuhiBatasEmisi;
 | |
|         $nilaiSpl = $totalParam ? 100 - (($melebihiBakuMutuEmisi / $totalParam) * 100) : 0;
 | |
| 
 | |
|         // Save or update nilai SPL
 | |
|         $splAl = Ipal::getNilaiSpl($idPelaporan);
 | |
| 
 | |
|         if ($splAl) {
 | |
|             $data = [
 | |
|                 'diuji' => $totalParam,
 | |
|                 'melebihi' => $melebihiBakuMutuEmisi,
 | |
|                 'nilaispl' => $nilaiSpl
 | |
|             ];
 | |
|             Ipal::updateNilaiSpl($idPelaporan, $data);
 | |
|         } else {
 | |
|             $data = [
 | |
|                 'idmcpelaporan' => $idPelaporan,
 | |
|                 'diuji' => $totalParam,
 | |
|                 'melebihi' => $melebihiBakuMutuEmisi,
 | |
|                 'nilaispl' => $nilaiSpl
 | |
|             ];
 | |
|             Ipal::insertNilaiSpl($data);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Generate breadcrumb
 | |
|      */
 | |
|     private function _generateBreadcrumb($module)
 | |
|     {
 | |
|         // Implementation of breadcrumb generation
 | |
|         return ['Home' => route('home'), 'Pelaporan' => route('pelaporan.index')];
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Check if report is editable
 | |
|      */
 | |
|     private function _isEditable($idPelaporan, $module)
 | |
|     {
 | |
|         // Implementation to check if report is editable
 | |
|         return Pelaporan::checkEditable($idPelaporan, $module);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Get Ipal Komunal status
 | |
|      */
 | |
|     private function _getIpalKomunalStatus($idPelaporan)
 | |
|     {
 | |
|         return Spl_AL::getStatusMcKomunal($idPelaporan);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Check Lampiran SK
 | |
|      */
 | |
|     private function _cekLampiranSk($idPelaporan, $skId)
 | |
|     {
 | |
|         return LampiranAL::cekLampiranSk($idPelaporan, $skId);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Update status IPAL Komunal
 | |
|      */
 | |
|     private function _updateStatusIpalKomunal($idPelaporan, $status)
 | |
|     {
 | |
|         // Update IPAL komunal status
 | |
|         Spl_AL::updateStatusMcKomunal($idPelaporan, $status);
 | |
| 
 | |
|         // If connected to IPAL komunal and has SK
 | |
|         if ($status == 'Iya') {
 | |
|             $sk = Lampiran::getKomponenByKode('SK');
 | |
|             if ($sk) {
 | |
|                 $lampiranSk = $this->_cekLampiranSk($idPelaporan, $sk->id);
 | |
|                 if ($lampiranSk) {
 | |
|                     Pelaporan::updateNilaiSkl($idPelaporan, 2, 100);
 | |
|                     Pelaporan::updateAvgSkl($idPelaporan);
 | |
|                     Pelaporan::updateNilaiSpl($idPelaporan, 2, 100);
 | |
|                     Pelaporan::updateAvgSpl($idPelaporan);
 | |
|                     return;
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         // Otherwise, calculate regular SPL value
 | |
|         $spl = Ipal::getNilaiSpl($idPelaporan);
 | |
| 
 | |
|         if ($spl) {
 | |
|             Pelaporan::updateNilaiSpl($idPelaporan, 2, $spl->nilaispl);
 | |
|         } else {
 | |
|             Pelaporan::updateNilaiSpl($idPelaporan, 2, 0);
 | |
|         }
 | |
| 
 | |
|         Pelaporan::updateAvgSpl($idPelaporan);
 | |
|     }
 | |
| }
 |