1319 lines
		
	
	
		
			44 KiB
		
	
	
	
		
			PHP
		
	
	
			
		
		
	
	
			1319 lines
		
	
	
		
			44 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\Spl_AL;
 | |
| use App\Models\Ipal;
 | |
| use App\Models\IpalParameter;
 | |
| use App\Models\HasilUjiAL;
 | |
| use App\Models\Komponen;
 | |
| use App\Models\NilaiKomponen;
 | |
| use App\Models\LampiranAL;
 | |
| use App\Models\Pelaporan\Lampiran;
 | |
| use Carbon\Carbon;
 | |
| use Illuminate\Support\Facades\Auth;
 | |
| use Illuminate\Support\Facades\DB;
 | |
| use Illuminate\Support\Facades\Gate;
 | |
| use Illuminate\Support\Facades\Storage;
 | |
| use Illuminate\Support\Facades\File;
 | |
| use Illuminate\Support\Facades\Log;
 | |
| use Illuminate\Support\Facades\Validator;
 | |
| 
 | |
| /**
 | |
|  * Controller untuk IPAL
 | |
|  *
 | |
|  * @author Beti Tuntari <beti.tuntari@gmail.com>
 | |
|  */
 | |
| class IpalController extends Controller
 | |
| {
 | |
|     /**
 | |
|      * Display a listing of IPAL data.
 | |
|      *
 | |
|      * @param int $idPelaporan
 | |
|      * @return \Illuminate\Http\Response
 | |
|      */
 | |
|     public function data($idPelaporan)
 | |
|     {
 | |
|         // Check authorization
 | |
|         if (!Gate::allows('pelaporan.view')) {
 | |
|             abort(403);
 | |
|         }
 | |
| 
 | |
|         // Load models and data
 | |
|         $pelaporan = Pelaporan::findOrFail($idPelaporan);
 | |
| 
 | |
|         // Prepare data for view
 | |
|         $data = [
 | |
|             'PelaporanId' => $idPelaporan,
 | |
|             'NamaPerusahaan' => $pelaporan->perusahaan,
 | |
|             'Tahun' => $pelaporan->tahun,
 | |
|             'Periode' => $pelaporan->periode,
 | |
|             'Editable' => Pelaporan::checkEditable($idPelaporan, 'AL') && Gate::allows('pelaporan.edit'),
 | |
|         ];
 | |
| 
 | |
|         // Get IPAL komunal status
 | |
|         $ipalKomunal = Spl_AL::getStatusMcKomunal($idPelaporan);
 | |
|         $data['IpalKomunal'] = $ipalKomunal ? $ipalKomunal->tersambung : 'Tidak';
 | |
| 
 | |
|         // Check if IPAL data exists and create from reference if not
 | |
|         $dataIpal = Ipal::getData($idPelaporan);
 | |
| 
 | |
|         if (!$dataIpal) {
 | |
|             $refIpal = Ipal::getRefIpal($pelaporan->idrefperusahaan);
 | |
| 
 | |
|             if ($refIpal) {
 | |
|                 foreach ($refIpal as $row) {
 | |
|                     $insertData = [
 | |
|                         'PelaporanId' => $idPelaporan,
 | |
|                         'RefIpalId' => $row->id,
 | |
|                         'Nomor' => $row->nomor,
 | |
|                         'Nama' => $row->nama,
 | |
|                         'Lampiran' => $row->lampiran,
 | |
|                         'IzinTerbit' => $row->izin_terbit,
 | |
|                         'IzinHabis' => $row->izin_habis,
 | |
|                         'Sumber' => $row->sumber,
 | |
|                         'Kapasitas' => $row->kapasitas,
 | |
|                         'Teknologi' => $row->teknologi,
 | |
|                         'BadanAir' => $row->badanair
 | |
|                     ];
 | |
| 
 | |
|                     Ipal::insertMcIpal($insertData);
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         return view('pelaporan.ipal.index', $data);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Get data for datatable.
 | |
|      *
 | |
|      * @param int $idPelaporan
 | |
|      * @return \Illuminate\Http\JsonResponse
 | |
|      */
 | |
|     public function getData($idPelaporan)
 | |
|     {
 | |
|         $dataIpal = Ipal::getData($idPelaporan);
 | |
| 
 | |
|         $data = [];
 | |
|         foreach ($dataIpal as $row) {
 | |
|             $data[] = [
 | |
|                 $row->nomor,
 | |
|                 $row->nama,
 | |
|                 0,
 | |
|                 0,
 | |
|                 0,
 | |
|                 0,
 | |
|                 $row->id
 | |
|             ];
 | |
|         }
 | |
| 
 | |
|         $response = [
 | |
|             'data' => $data,
 | |
|             'recordsTotal' => count($data)
 | |
|         ];
 | |
| 
 | |
|         return response()->json($response);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Add new IPAL.
 | |
|      *
 | |
|      * @param int $idPelaporan
 | |
|      * @param Request $request
 | |
|      * @return \Illuminate\Http\Response|\Illuminate\Http\JsonResponse
 | |
|      */
 | |
|     public function addIpal(Request $request, $idPelaporan)
 | |
|     {
 | |
|         // Check authorization
 | |
|         if (!Gate::allows('pelaporan.edit')) {
 | |
|             abort(403);
 | |
|         }
 | |
| 
 | |
|         if ($request->has('action')) {
 | |
|             try {
 | |
|                 $pelaporan = Pelaporan::findOrFail($idPelaporan);
 | |
|                 $idrefperusahaan = $pelaporan->idrefperusahaan;
 | |
| 
 | |
|                 if ($request->filled('nomor') && $request->filled('nama')) {
 | |
|                     DB::beginTransaction();
 | |
| 
 | |
|                     try {
 | |
|                         $dataRefIpal = [
 | |
|                             'PerusahaanId' => $idrefperusahaan,
 | |
|                             'Nomor' => $request->input('nomor'),
 | |
|                             'Nama' => $request->input('nama'),
 | |
|                             'Lampiran' => '',
 | |
|                             'IzinTerbit' => '0000-00-00',
 | |
|                             'IzinHabis' => '0000-00-00',
 | |
|                             'Sumber' => '',
 | |
|                             'Kapasitas' => 0,
 | |
|                             'Teknologi' => '',
 | |
|                             'BadanAir' => '',
 | |
|                             'IsPublish' => '0'
 | |
|                         ];
 | |
| 
 | |
|                         $idRefIpal = Ipal::insertRefIpal($dataRefIpal);
 | |
|                         $dataMcIpal = [
 | |
|                             'PelaporanId' => $idPelaporan,
 | |
|                             'RefIpalId' => $idRefIpal,
 | |
|                             'Nomor' => $request->input('nomor'),
 | |
|                             'Nama' => $request->input('nama'),
 | |
|                             'Lampiran' => '',
 | |
|                             'IzinTerbit' => '0000-00-00',
 | |
|                             'IzinHabis' => '0000-00-00',
 | |
|                             'Sumber' => '',
 | |
|                             'Kapasitas' => 0,
 | |
|                             'Teknologi' => '',
 | |
|                             'BadanAir' => ''
 | |
|                         ];
 | |
|                         Ipal::insertMcIpal($dataMcIpal);
 | |
| 
 | |
|                         $this->_updateRerataSyaratTeknis($idPelaporan);
 | |
|                         $this->_updateNilaiA6($idPelaporan);
 | |
|                         $this->_updateNilaiA7($idPelaporan);
 | |
|                         $this->_updateNilaiSpl($idPelaporan);
 | |
| 
 | |
|                         if (!$this->_cekIpalKomunal($idPelaporan)) {
 | |
|                             $this->_updateNilaiSkl($idPelaporan);
 | |
|                         }
 | |
| 
 | |
|                         // Log activity
 | |
|                         $perusahaan = Pelaporan::getPerusahaan($idrefperusahaan);
 | |
|                         $aktivitas = 'Pelaporan AL - ' . $perusahaan->nama . ' - Tahun ' . $pelaporan->tahun .
 | |
|                                     ' - Periode ' . $pelaporan->periode . ' - Nama IPAL ' . $dataMcIpal['Nama'];
 | |
| 
 | |
|                         DB::commit();
 | |
| 
 | |
|                         Log::info('LOG_CREATE', ['message' => $aktivitas, 'module' => 'pelaporan']);
 | |
| 
 | |
|                         $response = ['message' => 'Data IPAL Berhasil Disimpan', 'status' => 'success'];
 | |
|                         return response()->json($response);
 | |
| 
 | |
|                     } catch (\Exception $e) {
 | |
|                         DB::rollBack();
 | |
|                         Log::error('Error adding IPAL: ' . $e->getMessage(), [
 | |
|                             'pelaporan_id' => $idPelaporan,
 | |
|                             'module' => 'pelaporan'
 | |
|                         ]);
 | |
| 
 | |
|                         $response = ['message' => 'Gagal menyimpan data IPAL: ' . $e->getMessage(), 'status' => 'error'];
 | |
|                         return response()->json($response);
 | |
|                     }
 | |
|                 } else {
 | |
|                     $response = ['message' => 'Nomor atau Nama IPAL belum diisi', 'status' => 'error'];
 | |
|                     return response()->json($response);
 | |
|                 }
 | |
|             } catch (\Exception $e) {
 | |
|                 Log::error('Error processing IPAL request: ' . $e->getMessage(), [
 | |
|                     'pelaporan_id' => $idPelaporan,
 | |
|                     'module' => 'pelaporan'
 | |
|                 ]);
 | |
| 
 | |
|                 $response = ['message' => 'Terjadi kesalahan saat memproses data: ' . $e->getMessage(), 'status' => 'error'];
 | |
|                 return response()->json($response);
 | |
|             }
 | |
|         } else {
 | |
|             $data['PelaporanId'] = $idPelaporan;
 | |
|             return view('pelaporan.ipal.index', $data);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Edit IPAL.
 | |
|      *
 | |
|      * @param Request $request
 | |
|      * @param int $idMcIpal
 | |
|      * @return \Illuminate\Http\Response|\Illuminate\Http\JsonResponse
 | |
|      */
 | |
|     public function edit(Request $request, $idMcIpal)
 | |
|     {
 | |
|         // Check authorization
 | |
|         if (!Gate::allows('pelaporan.edit')) {
 | |
|             abort(403);
 | |
|         }
 | |
| 
 | |
|         if ($request->has('action')) {
 | |
|             if ($request->filled('nomor') && $request->filled('nama')) {
 | |
|                 $data = [
 | |
|                     'Nomor' => $request->input('Nomor'),
 | |
|                     'Nama' => $request->input('nNama')
 | |
|                 ];
 | |
| 
 | |
|                 Ipal::editMcIpal($idMcIpal, $data);
 | |
| 
 | |
|                 if ($request->has('ref_save')) {
 | |
|                     $idRefIpal = Ipal::getOneBy(['id' => $idMcIpal])->idrefipal;
 | |
|                     Ipal::editRefIpal($idRefIpal, $data);
 | |
|                 }
 | |
| 
 | |
|                 // Log activity
 | |
|                 $idmcpelaporan = Ipal::getOneBy(['id' => $idMcIpal])->idmcpelaporan;
 | |
|                 $pelaporan = Pelaporan::findOrFail($idmcpelaporan);
 | |
|                 $perusahaan = Pelaporan::getPerusahaan($pelaporan->idrefperusahaan);
 | |
|                 $aktivitas = 'Pelaporan AL - ' . $perusahaan->nama . ' - Tahun ' . $pelaporan->tahun .
 | |
|                             ' - Periode ' . $pelaporan->periode . ' - Nama IPAL ' . $data['nama'];
 | |
| 
 | |
|                 Log::info('LOG_EDIT', ['message' => $aktivitas, 'module' => 'pelaporan']);
 | |
| 
 | |
|                 $response = ['message' => 'Data IPAL berhasil diubah', 'status' => 'success'];
 | |
|             } else {
 | |
|                 $response = ['message' => 'Nomor atau Nama IPAL belum diisi', 'status' => 'error'];
 | |
|             }
 | |
| 
 | |
|             return response()->json($response);
 | |
|         } else {
 | |
|             $dataIpal = Ipal::getOneBy(['id' => $idMcIpal]);
 | |
| 
 | |
|             $data = [
 | |
|                 'idmcipal' => $idMcIpal,
 | |
|                 'nomor' => $dataIpal->nomor,
 | |
|                 'nama' => $dataIpal->nama
 | |
|             ];
 | |
| 
 | |
|             return view('pelaporan.ipal.edit_ipal', $data);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Delete IPAL.
 | |
|      *
 | |
|      * @param Request $request
 | |
|      * @param int $idMcIpal
 | |
|      * @return \Illuminate\Http\Response|\Illuminate\Http\JsonResponse
 | |
|      */
 | |
|     public function delete(Request $request, $idMcIpal)
 | |
|     {
 | |
|         // Check authorization
 | |
|         if (!Gate::allows('pelaporan.edit')) {
 | |
|             abort(403);
 | |
|         }
 | |
| 
 | |
|         if ($request->has('action')) {
 | |
|             $idRefIpal = Ipal::getOneBy(['id' => $idMcIpal])->idrefipal;
 | |
| 
 | |
|             // Get data for logging
 | |
|             $idmcpelaporan = Ipal::getOneBy(['id' => $idMcIpal])->idmcpelaporan;
 | |
|             $pelaporan = Pelaporan::findOrFail($idmcpelaporan);
 | |
|             $perusahaan = Pelaporan::getPerusahaan($pelaporan->idrefperusahaan);
 | |
|             $namaIpal = Ipal::getOneBy(['id' => $idMcIpal])->nama;
 | |
| 
 | |
|             // Delete IPAL
 | |
|             Ipal::deleteMcIpal($idMcIpal);
 | |
| 
 | |
|             if ($request->has('ref_delete')) {
 | |
|                 Ipal::disableRefIpal($idRefIpal);
 | |
|             }
 | |
| 
 | |
|             // Delete IPAL parameters, hasil uji and lampiran
 | |
|             IpalParameter::deleteMcIpalParam(['idmcipal' => $idMcIpal]);
 | |
|             Ipal::deleteHasilUji(['idmcipal' => $idMcIpal]);
 | |
|             Ipal::deleteLampiranHasilUji(['idmcipal' => $idMcIpal]);
 | |
| 
 | |
|             // Delete nilai komponen for syarat teknis
 | |
|             Ipal::deleteNilaiKomponen(['idmcipal' => $idMcIpal]);
 | |
| 
 | |
|             // Delete lampiran for komponen syarat teknis
 | |
|             Lampiran::deleteFile(['idmcipal' => $idMcIpal]);
 | |
| 
 | |
|             // Delete lampiran files
 | |
|             $notAllowedChar = [' ', '.', '/', '-', ',', ':'];
 | |
|             $noInduk = $perusahaan->nomorinduk;
 | |
|             $tahun = $pelaporan->tahun;
 | |
|             $periode = strtolower(str_replace($notAllowedChar, '_', $pelaporan->periode));
 | |
|             $urlLampiran = 'data_perusahaan/' . $noInduk . '/lampiran' . '/' . 'al' . '/' . $tahun . '_' . $periode . '/' . str_replace($notAllowedChar, '_', $namaIpal) . '/';
 | |
| 
 | |
|             $this->_recursiveRmdir(storage_path('app/public/' . $urlLampiran));
 | |
| 
 | |
|             // Update values
 | |
|             $this->_updateRerataSyaratTeknis($idmcpelaporan);
 | |
|             $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;
 | |
| 
 | |
|             Log::info('LOG_DELETE', ['message' => $aktivitas, 'module' => 'pelaporan']);
 | |
| 
 | |
|             $response = ['message' => 'Data IPAL berhasil dihapus', 'status' => 'success'];
 | |
|             return response()->json($response);
 | |
|         } else {
 | |
|             $dataIpal = Ipal::getOneBy(['id' => $idMcIpal]);
 | |
| 
 | |
|             $data = [
 | |
|                 'idmcipal' => $idMcIpal,
 | |
|                 'nomor' => $dataIpal->nomor,
 | |
|                 'nama' => $dataIpal->nama
 | |
|             ];
 | |
| 
 | |
|             return view('pelaporan.ipal.delete_ipal', $data);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Edit persyaratan teknis.
 | |
|      *
 | |
|      * @param Request $request
 | |
|      * @param int $idMcIpal
 | |
|      * @return \Illuminate\Http\Response|\Illuminate\Http\JsonResponse
 | |
|      */
 | |
|     public function syaratTeknis(Request $request, $idMcIpal)
 | |
|     {
 | |
|         // Check authorization
 | |
|         if (!Gate::allows('pelaporan.view')) {
 | |
|             abort(403);
 | |
|         }
 | |
| 
 | |
|         $ipal = Ipal::getOneBy(['id' => $idMcIpal]);
 | |
|         $idmcpelaporan = $ipal->idmcpelaporan;
 | |
|         $pelaporan = Pelaporan::findOrFail($idmcpelaporan);
 | |
| 
 | |
|         $data = [
 | |
|             'nama_ipal' => $ipal->nama,
 | |
|             'idmcipal' => $idMcIpal
 | |
|         ];
 | |
| 
 | |
|         if ($request->has('action')) {
 | |
|             $dataHasil = $request->input('hasil');
 | |
| 
 | |
|             if ($dataHasil) {
 | |
|                 foreach ($dataHasil as $refkomponen => $refhasil) {
 | |
|                     $nilai = Ipal::getNilaiByIdRefHasil($refhasil);
 | |
| 
 | |
|                     $filter = [
 | |
|                         'idmcpelaporan' => $idmcpelaporan,
 | |
|                         'idrefkomponen' => $refkomponen,
 | |
|                         'idmcipal' => $idMcIpal
 | |
|                     ];
 | |
| 
 | |
|                     $dataUpdate = [
 | |
|                         'idrefhasil' => $refhasil,
 | |
|                         'nilai' => $nilai
 | |
|                     ];
 | |
| 
 | |
|                     Ipal::updateNilaiSyaratTeknis($filter, $dataUpdate);
 | |
|                 }
 | |
| 
 | |
|                 $this->_updateRerataSyaratTeknis($idmcpelaporan);
 | |
|                 $this->_updateNilaiSkl($idmcpelaporan);
 | |
|             }
 | |
| 
 | |
|             $response = ['message' => 'Persyaratan Teknis berhasil Disimpan', 'status' => 'success'];
 | |
|             return response()->json($response);
 | |
|         } else {
 | |
|             $idrefpelaporan = 2;
 | |
| 
 | |
|             $dataTable = Komponen::getDataRef($idrefpelaporan);
 | |
|             unset($dataTable['data'][0]);
 | |
|             unset($dataTable['data'][3]);
 | |
| 
 | |
|             $daftarKomponen = [];
 | |
|             foreach ($dataTable['data'] as $key => $c) {
 | |
|                 foreach ($c['komponen'] as $kex => $x) {
 | |
|                     $daftarKomponen[] = $kex;
 | |
|                 }
 | |
|             }
 | |
| 
 | |
|             $allNilaiKomponen = [];
 | |
|             foreach ($daftarKomponen as $komponen) {
 | |
|                 $idkomponen = Ipal::getIdRefKomponen($komponen);
 | |
|                 $filterKomponen = [
 | |
|                     'idmcpelaporan' => $idmcpelaporan,
 | |
|                     'idrefkomponen' => $idkomponen,
 | |
|                     'idmcipal' => $idMcIpal
 | |
|                 ];
 | |
| 
 | |
|                 $nilaiKomponen = Ipal::getNilaiKomponen($filterKomponen);
 | |
|                 $allNilaiKomponen[$komponen] = $nilaiKomponen;
 | |
|             }
 | |
| 
 | |
|             $data['nilai_komponen'] = $allNilaiKomponen;
 | |
|             $data['rowspan_1'] = $dataTable['total_rows'] + 1;
 | |
|             $data['data_table'] = $dataTable['data'];
 | |
|             $data['idmcpelaporan'] = $idmcpelaporan;
 | |
|             $data['idrefpelaporan'] = $idrefpelaporan;
 | |
| 
 | |
|             return view('pelaporan.ipal.syarat_teknis', $data);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Add data pendukung.
 | |
|      *
 | |
|      * @param Request $request
 | |
|      * @param int $idMcIpal
 | |
|      * @return \Illuminate\Http\Response|\Illuminate\Http\JsonResponse
 | |
|      */
 | |
|     public function addDataPendukung(Request $request, $idMcIpal)
 | |
|     {
 | |
|         // Check authorization
 | |
|         if (!Gate::allows('pelaporan.view')) {
 | |
|             abort(403);
 | |
|         }
 | |
| 
 | |
|         if ($request->has('action')) {
 | |
|             $validator = Validator::make($request->all(), [
 | |
|                 'nomor' => 'required|string',
 | |
|                 'lintang' => 'required|string',
 | |
|                 'bujur' => 'required|string'
 | |
|             ]);
 | |
| 
 | |
|             if ($validator->passes()) {
 | |
|                 $data = [
 | |
|                     'nomor' => $request->input('nomor'),
 | |
|                     'izin_terbit' => $request->filled('izin_terbit') ? date('Y-m-d', strtotime($request->input('izin_terbit'))) : '0000-00-00',
 | |
|                     'izin_habis' => $request->filled('izin_habis') ? date('Y-m-d', strtotime($request->input('izin_habis'))) : '0000-00-00',
 | |
|                     'kapasitas' => $request->input('kapasitas'),
 | |
|                     'sumber' => $request->input('sumber'),
 | |
|                     'teknologi' => $request->input('teknologi'),
 | |
|                     'badanair' => $request->input('badanair'),
 | |
|                     'debit_maksimum' => $request->input('debitmax') == '' ? null : $request->input('debitmax'),
 | |
|                     'lintang' => $request->input('lintang') == '' ? null : $request->input('lintang'),
 | |
|                     'bujur' => $request->input('bujur') == '' ? null : $request->input('bujur')
 | |
|                 ];
 | |
| 
 | |
|                 $pathLampiran = '';
 | |
|                 if ($request->hasFile('lampiran')) {
 | |
|                     $pathLampiran = $this->_uploadFile($idMcIpal, $request->file('lampiran'));
 | |
| 
 | |
|                     if ($pathLampiran != 'max filesize exceeded') {
 | |
|                         $data['lampiran'] = $pathLampiran;
 | |
|                     }
 | |
|                 }
 | |
| 
 | |
|                 Ipal::editMcIpal($idMcIpal, $data);
 | |
| 
 | |
|                 if ($request->has('ref_save')) {
 | |
|                     $idRefIpal = Ipal::getOneBy(['id' => $idMcIpal])->idrefipal;
 | |
|                     Ipal::editRefIpal($idRefIpal, $data);
 | |
|                 }
 | |
| 
 | |
|                 // Log activity
 | |
|                 $idmcpelaporan = Ipal::getOneBy(['id' => $idMcIpal])->idmcpelaporan;
 | |
|                 $pelaporan = Pelaporan::findOrFail($idmcpelaporan);
 | |
|                 $perusahaan = Pelaporan::getPerusahaan($pelaporan->idrefperusahaan);
 | |
|                 $namaIpal = Ipal::getOneBy(['id' => $idMcIpal])->nama;
 | |
|                 $aktivitas = 'Pelaporan AL - ' . $perusahaan->nama . ' - Tahun ' . $pelaporan->tahun .
 | |
|                             ' - Periode ' . $pelaporan->periode . ' - Data Pendukung IPAL ' . $namaIpal;
 | |
| 
 | |
|                 Log::info('LOG_EDIT', ['message' => $aktivitas, 'module' => 'pelaporan']);
 | |
| 
 | |
|                 if ($pathLampiran == 'max filesize exceeded') {
 | |
|                     $response = ['message' => 'Ukuran file lampiran melebihi 20 MB. Lampiran tidak tersimpan.', 'status' => 'error'];
 | |
|                 } else {
 | |
|                     $response = ['message' => 'Berhasil menambah data pendukung', 'status' => 'success'];
 | |
|                 }
 | |
| 
 | |
|                 return response()->json($response);
 | |
|             } else {
 | |
|                 return response()->json([
 | |
|                     'error' => [
 | |
|                         'type' => 'validation',
 | |
|                         'messages' => $validator->errors()
 | |
|                     ]
 | |
|                 ]);
 | |
|             }
 | |
|         } else {
 | |
|             $ipal = Ipal::getOneBy(['id' => $idMcIpal]);
 | |
|             $data = [
 | |
|                 'nama_lampiran' => '',
 | |
|                 'data_ipal' => $ipal,
 | |
|                 'idmcipal' => $idMcIpal
 | |
|             ];
 | |
| 
 | |
|             if ($ipal) {
 | |
|                 $lampiranPath = $ipal->lampiran;
 | |
| 
 | |
|                 if ($lampiranPath && File::exists(public_path($lampiranPath))) {
 | |
|                     $listLampiranPath = explode('/', $lampiranPath);
 | |
|                     $namaLampiran = end($listLampiranPath);
 | |
|                     $data['nama_lampiran'] = $namaLampiran;
 | |
|                     $data['url_lampiran'] = url($lampiranPath);
 | |
|                     $data['ukuran_lampiran'] = $this->_formatBytes(File::size(public_path($lampiranPath)));
 | |
|                 }
 | |
|             }
 | |
| 
 | |
|             return view('pelaporan.ipal.add_data_pendukung', $data);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Delete lampiran data pendukung.
 | |
|      *
 | |
|      * @param Request $request
 | |
|      * @param int $idMcIpal
 | |
|      * @return \Illuminate\Http\Response|\Illuminate\Http\JsonResponse
 | |
|      */
 | |
|     public function deleteLampiranDataPendukung(Request $request, $idMcIpal)
 | |
|     {
 | |
|         // Check authorization
 | |
|         if (!Gate::allows('pelaporan.edit')) {
 | |
|             abort(403);
 | |
|         }
 | |
| 
 | |
|         $data['idmcipal'] = $idMcIpal;
 | |
| 
 | |
|         if ($request->has('action')) {
 | |
|             $dataIpal = Ipal::getOneBy(['id' => $idMcIpal]);
 | |
| 
 | |
|             Ipal::editMcIpal($idMcIpal, ['lampiran' => '']);
 | |
| 
 | |
|             if ($request->has('ref_delete')) {
 | |
|                 $idRefIpal = Ipal::getOneBy(['id' => $idMcIpal])->idrefipal;
 | |
|                 Ipal::editRefIpal($idRefIpal, ['lampiran' => '']);
 | |
|             }
 | |
| 
 | |
|             $response = ['message' => 'Lampiran data pendukung berhasil dihapus', 'status' => 'success'];
 | |
|             return response()->json($response);
 | |
|         } else {
 | |
|             return view('pelaporan.ipal.delete_lampiran_data_pendukung', $data);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Show hasil uji form.
 | |
|      *
 | |
|      * @param int $idMcIpal
 | |
|      * @return \Illuminate\Http\Response
 | |
|      */
 | |
|     public function hasilUji($idMcIpal)
 | |
|     {
 | |
|         // Check authorization
 | |
|         if (!Gate::allows('pelaporan.view')) {
 | |
|             abort(403);
 | |
|         }
 | |
| 
 | |
|         $ipal = Ipal::getOneBy(['id' => $idMcIpal]);
 | |
|         $pelaporan = Pelaporan::findOrFail($ipal->idmcpelaporan);
 | |
| 
 | |
|         $data = [
 | |
|             'idmcipal' => $idMcIpal,
 | |
|             'nama_ipal' => $ipal->nama
 | |
|         ];
 | |
| 
 | |
|         $listParam = IpalParameter::getData($idMcIpal);
 | |
| 
 | |
|         $nilaiHasilUji = [];
 | |
|         $bebanEmisi = [];
 | |
| 
 | |
|         foreach ($listParam as $row) {
 | |
|             $nilai = Ipal::getNilaiHasilUji($pelaporan->idrefperusahaan, $pelaporan->tahun, $row->idrefipal_parameter);
 | |
|             $hasilUji = [];
 | |
|             $bebanEmisiParameter = [];
 | |
| 
 | |
|             if ($row->bakumutu_nilai2) {
 | |
|                 $bakumutu = $row->bakumutu_nilai1 . ' - ' . $row->bakumutu_nilai2;
 | |
|             } else {
 | |
|                 $bakumutu = $row->bakumutu_nilai1;
 | |
|             }
 | |
| 
 | |
|             $hasilUji = [];
 | |
|             $hasilUji['bakumutu'] = $bakumutu;
 | |
| 
 | |
|             foreach ($nilai as $item) {
 | |
|                 $hasilUji[$item->bulan] = $item->nilai;
 | |
|                 $bebanEmisiParameter[$item->bulan] = $item->bebanemisi;
 | |
|             }
 | |
| 
 | |
|             $nilaiHasilUji[$row->id] = $hasilUji;
 | |
|             $bebanEmisi[$row->id] = $bebanEmisiParameter;
 | |
|         }
 | |
| 
 | |
|         $lampiranExists = [];
 | |
|         $debit = [];
 | |
| 
 | |
|         for ($i = 1; $i <= 12; $i++) {
 | |
|             $allLampiran = Ipal::getLampiranHasilUji([
 | |
|                 'b.idrefipal' => $ipal->idrefipal,
 | |
|                 'a.idrefperusahaan' => $pelaporan->idrefperusahaan,
 | |
|                 'a.bulan' => $this->_mcMonth($i),
 | |
|                 'a.tahun' => $pelaporan->tahun
 | |
|             ]);
 | |
| 
 | |
|             $lampiranExists[$i-1] = false;
 | |
| 
 | |
|             if ($allLampiran) {
 | |
|                 foreach ($allLampiran as $lampiran) {
 | |
|                     if (File::exists($lampiran->dokumen)) {
 | |
|                         $lampiranExists[$i-1] = true;
 | |
|                         break;
 | |
|                     }
 | |
|                 }
 | |
|             }
 | |
| 
 | |
|             $debit[$i] = Ipal::getDebitBy([
 | |
|                 'b.idrefipal' => $ipal->idrefipal,
 | |
|                 'a.idrefperusahaan' => $pelaporan->idrefperusahaan,
 | |
|                 'a.bulan' => $this->_mcMonth($i),
 | |
|                 'a.tahun' => $pelaporan->tahun
 | |
|             ]);
 | |
|         }
 | |
| 
 | |
|         $data['periode'] = $pelaporan->idrefperiodepelaporan;
 | |
|         $data['tahun'] = $pelaporan->tahun;
 | |
|         $data['params'] = $listParam;
 | |
|         $data['hasiluji'] = $nilaiHasilUji;
 | |
|         $data['bebanemisi'] = $bebanEmisi;
 | |
|         $data['lampiran'] = $lampiranExists;
 | |
|         $data['debit'] = $debit;
 | |
|         $data['debitmax'] = $ipal->debit_maksimum ? $ipal->debit_maksimum : 0;
 | |
| 
 | |
|         $hasilUjiEmpty = true;
 | |
|         if ($ipal && $ipal->lintang && $ipal->bujur) {
 | |
|             $hasilUjiEmpty = false;
 | |
|         }
 | |
| 
 | |
|         $data['hasil_uji_empty'] = $hasilUjiEmpty;
 | |
| 
 | |
|         return view('pelaporan.ipal.hasil_uji', $data);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Save hasil uji.
 | |
|      *
 | |
|      * @param Request $request
 | |
|      * @param int $idMcIpal
 | |
|      * @return \Illuminate\Http\JsonResponse
 | |
|      */
 | |
|     public function saveHasilUji(Request $request, $idMcIpal)
 | |
|     {
 | |
|         // Check authorization
 | |
|         if (!Gate::allows('pelaporan.edit')) {
 | |
|             abort(403);
 | |
|         }
 | |
| 
 | |
|         $ipal = Ipal::getOneBy(['id' => $idMcIpal]);
 | |
|         $periode = Pelaporan::findOrFail($ipal->idmcpelaporan)->idrefperiodepelaporan;
 | |
| 
 | |
|         $params = Ipal::getNamaParam($idMcIpal);
 | |
| 
 | |
|         $bulanAwal = (($periode - 1) * 3) + 1;
 | |
| 
 | |
|         $nilaiParam = $request->input('param');
 | |
|         $debit = $request->input('debit');
 | |
|         $nilaiExist = false;
 | |
| 
 | |
|         foreach ($params as $row) {
 | |
|             for ($i = 0; $i < 3; $i++) {
 | |
|                 $bulan = $bulanAwal + $i;
 | |
| 
 | |
|                 $nilai = null;
 | |
|                 if (isset($nilaiParam[$row->id][$bulan]) && $nilaiParam[$row->id][$bulan] != '') {
 | |
|                     $nilai = $nilaiParam[$row->id][$bulan];
 | |
|                     $nilaiExist = true;
 | |
|                 }
 | |
| 
 | |
|                 $bebanEmisi = null;
 | |
|                 if ($nilai !== null && is_numeric($nilai) && isset($debit[$bulan]) && $debit[$bulan] && $row->batasemisi !== null) {
 | |
|                     $bebanEmisi = ($debit[$bulan] * $nilai) / 1000;
 | |
|                 }
 | |
| 
 | |
|                 $data = [
 | |
|                     'nilai' => $nilai,
 | |
|                     'debit' => (isset($debit[$bulan]) && $debit[$bulan] != '') ? $debit[$bulan] : null,
 | |
|                     'bebanemisi' => $bebanEmisi
 | |
|                 ];
 | |
| 
 | |
|                 Ipal::updateHasilUji($row->id, $this->_mcMonth($bulan), $data);
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         $this->_updateNilaiA6($ipal->idmcpelaporan);
 | |
|         $this->_updateNilaiA7($ipal->idmcpelaporan);
 | |
|         $this->_updateNilaiSpl($ipal->idmcpelaporan);
 | |
| 
 | |
|         if (!$this->_cekIpalKomunal($ipal->idmcpelaporan)) {
 | |
|             $this->_updateNilaiSkl($ipal->idmcpelaporan);
 | |
|         }
 | |
| 
 | |
|         // Update mcverifikasi table
 | |
|         if ($nilaiExist) {
 | |
|             $filter = [
 | |
|                 'idmcpelaporan' => $ipal->idmcpelaporan,
 | |
|                 'idrefpelaporan' => 2
 | |
|             ];
 | |
| 
 | |
|             $dataUpdate = [
 | |
|                 'verifikasi' => 1,
 | |
|                 'tanggal' => now()->format('Y-m-d H:i:s'),
 | |
|                 'oleh' => Auth::id()
 | |
|             ];
 | |
| 
 | |
|             Pelaporan::updateStatusVerifikasi($filter, $dataUpdate);
 | |
|         }
 | |
| 
 | |
|         // Log activity
 | |
|         $idmcpelaporan = Ipal::getOneBy(['id' => $idMcIpal])->idmcpelaporan;
 | |
|         $pelaporan = Pelaporan::findOrFail($idmcpelaporan);
 | |
|         $perusahaan = Pelaporan::getPerusahaan($pelaporan->idrefperusahaan);
 | |
|         $namaIpal = $ipal->nama;
 | |
|         $aktivitas = 'Pelaporan AL - ' . $perusahaan->nama . ' - Tahun ' . $pelaporan->tahun .
 | |
|                     ' - Periode ' . $pelaporan->periode . ' - Nama IPAL ' . $namaIpal . ' - Data Hasil Uji Lab';
 | |
| 
 | |
|         Log::info('LOG_EDIT', ['message' => $aktivitas, 'module' => 'pelaporan']);
 | |
| 
 | |
|         $response = ['message' => 'Data Hasil Uji Berhasil Disimpan', 'status' => 'success'];
 | |
|         return response()->json($response);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Check lampiran hasil uji.
 | |
|      *
 | |
|      * @param int $idMcIpal
 | |
|      * @param int $bulan
 | |
|      * @return \Illuminate\Http\JsonResponse
 | |
|      */
 | |
|     public function cekLampiranHasilUji($idMcIpal, $bulan)
 | |
|     {
 | |
|         $ipal = Ipal::getOneBy(['id' => $idMcIpal]);
 | |
|         $pelaporan = Pelaporan::findOrFail($ipal->idmcpelaporan);
 | |
|         $idrefperusahaan = $pelaporan->idrefperusahaan;
 | |
| 
 | |
|         $allLampiran = Ipal::getLampiranHasilUji([
 | |
|             'a.idmcipal' => $idMcIpal,
 | |
|             'a.idrefperusahaan' => $idrefperusahaan,
 | |
|             'a.bulan' => $this->_mcMonth($bulan)
 | |
|         ]);
 | |
| 
 | |
|         $response = ['lampiran' => false];
 | |
| 
 | |
|         if ($allLampiran) {
 | |
|             foreach ($allLampiran as $lampiran) {
 | |
|                 if (File::exists($lampiran->dokumen)) {
 | |
|                     $response['lampiran'] = true;
 | |
|                     break;
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         return response()->json($response);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Synchronize IPAL data.
 | |
|      *
 | |
|      * @param Request $request
 | |
|      * @return \Illuminate\Http\JsonResponse
 | |
|      */
 | |
|     public function sinkronisasiIpal(Request $request)
 | |
|     {
 | |
|         // Check authorization
 | |
|         if (!Gate::allows('pelaporan.edit')) {
 | |
|             abort(403);
 | |
|         }
 | |
| 
 | |
|         $idmcpelaporan = $request->input('id');
 | |
| 
 | |
|         $allIpal = Ipal::getData($idmcpelaporan);
 | |
|         $pelaporan = Pelaporan::findOrFail($idmcpelaporan);
 | |
|         $perusahaan = Pelaporan::getPerusahaan($pelaporan->idrefperusahaan);
 | |
|         $allRefIpal = Ipal::getRefIpal($pelaporan->idrefperusahaan);
 | |
| 
 | |
|         // Delete all mcipal
 | |
|         $notAllowedChar = [' ', '.', '/', '-', ',', ':'];
 | |
|         $noInduk = $perusahaan->nomorinduk;
 | |
|         $tahun = $pelaporan->tahun;
 | |
|         $periode = strtolower(str_replace($notAllowedChar, '_', $pelaporan->periode));
 | |
|         $bulanAwal = (($pelaporan->idrefperiodepelaporan - 1) * 3) + 1;
 | |
| 
 | |
|         foreach ($allIpal as $ipal) {
 | |
|             $idmcipal = $ipal->id;
 | |
| 
 | |
|             // Delete ipal parameter, nilai hasiluji dan lampiran hasil uji
 | |
|             IpalParameter::deleteMcIpalParam(['idmcipal' => $idmcipal]);
 | |
|             Ipal::deleteHasilUji(['idmcipal' => $idmcipal]);
 | |
|             Ipal::deleteLampiranHasilUji(['idmcipal' => $idmcipal]);
 | |
| 
 | |
|             // Delete nilai komponen-komponen syarat teknis
 | |
|             Ipal::deleteNilaiKomponen(['idmcipal' => $idmcipal]);
 | |
| 
 | |
|             // Delete lampiran komponen-komponen syarat teknis
 | |
|             Lampiran::deleteFile(['idmcipal' => $idmcipal]);
 | |
| 
 | |
|             // Delete lampiran files
 | |
|             $namaIpal = Ipal::getOneBy(['id' => $idmcipal])->nama;
 | |
|             $urlLampiran = 'data_perusahaan/' . $noInduk . '/lampiran' . '/' . 'al' . '/' . $tahun . '_' . $periode . '/' . str_replace($notAllowedChar, '_', $namaIpal) . '/';
 | |
| 
 | |
|             $this->_recursiveRmdir(storage_path('app/public/' . $urlLampiran));
 | |
| 
 | |
|             Ipal::deleteMcIpal($idmcipal);
 | |
|         }
 | |
| 
 | |
|         // Add mcipal from refipal
 | |
|         $allRefIpal = Ipal::getRefIpal($pelaporan->idrefperusahaan);
 | |
|         foreach ($allRefIpal as $refipal) {
 | |
|             // Add ipal
 | |
|             $insertData = [
 | |
|                 'idmcpelaporan' => $idmcpelaporan,
 | |
|                 'idrefipal' => $refipal->id,
 | |
|                 'nomor' => $refipal->nomor,
 | |
|                 'nama' => $refipal->nama,
 | |
|                 'lampiran' => $refipal->lampiran,
 | |
|                 'izin_terbit' => $refipal->izin_terbit,
 | |
|                 'izin_habis' => $refipal->izin_habis,
 | |
|                 'sumber' => $refipal->sumber,
 | |
|                 'kapasitas' => $refipal->kapasitas,
 | |
|                 'teknologi' => $refipal->teknologi,
 | |
|                 'badanair' => $refipal->badanair
 | |
|             ];
 | |
| 
 | |
|             $idmcipal = Ipal::insertMcIpal($insertData);
 | |
| 
 | |
|             // Add parameter ipal
 | |
|             $refipalParam = IpalParameter::getRefIpalParam($refipal->id);
 | |
|             foreach ($refipalParam as $row) {
 | |
|                 $dataMcIpalParam = [
 | |
|                     'idmcipal' => $idmcipal,
 | |
|                     'idrefipal_parameter' => $row->id,
 | |
|                     'nama' => $row->nama,
 | |
|                     'satuan' => $row->satuan,
 | |
|                     'bakumutu_jenis' => $row->bakumutu_jenis,
 | |
|                     'bakumutu_nilai1' => $row->bakumutu_nilai1,
 | |
|                     'bakumutu_nilai2' => $row->bakumutu_nilai2,
 | |
|                     'batasemisi' => $row->batasemisi
 | |
|                 ];
 | |
| 
 | |
|                 $idmcipalParam = IpalParameter::insertMcIpalParam($dataMcIpalParam);
 | |
| 
 | |
|                 // Insert data to mchasiluji_al
 | |
|                 $dataHasilUji = [];
 | |
|                 for ($i = 0; $i < 3; $i++) {
 | |
|                     $dataHasilUji[] = [
 | |
|                         'idmcipal' => $idmcipal,
 | |
|                         'tahun' => $pelaporan->tahun,
 | |
|                         'idrefperusahaan' => $pelaporan->idrefperusahaan,
 | |
|                         'idmcipal_parameter' => $idmcipalParam,
 | |
|                         'bulan' => $this->_mcMonth($bulanAwal + $i)
 | |
|                     ];
 | |
|                 }
 | |
| 
 | |
|                 Ipal::insertHasilUji($dataHasilUji);
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         $this->_updateRerataSyaratTeknis($idmcpelaporan);
 | |
|         $this->_updateNilaiA6($idmcpelaporan);
 | |
|         $this->_updateNilaiA7($idmcpelaporan);
 | |
|         $this->_updateNilaiSpl($idmcpelaporan);
 | |
| 
 | |
|         if (!$this->_cekIpalKomunal($idmcpelaporan)) {
 | |
|             $this->_updateNilaiSkl($idmcpelaporan);
 | |
|         }
 | |
| 
 | |
|         $response = ['message' => 'Sinkronisasi Berhasil', 'status' => 'success'];
 | |
|         return response()->json($response);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * 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;
 | |
|         }
 | |
| 
 | |
|         $nilaiA6 = count($allIpal) ? $jmlNilaiIpal / count($allIpal) : 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)
 | |
|     {
 | |
|         $nilaiA7 = Ipal::getNilaiA7($idmcpelaporan);
 | |
|         $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' && $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;
 | |
| 
 | |
|         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 && $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);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Update rerata syarat teknis.
 | |
|      *
 | |
|      * @param int $idmcpelaporan
 | |
|      * @return void
 | |
|      */
 | |
|     private function _updateRerataSyaratTeknis($idmcpelaporan)
 | |
|     {
 | |
|         $daftarKomponen = ['A1', 'A2', 'A3', 'A4', 'A5'];
 | |
| 
 | |
|         foreach ($daftarKomponen as $komponen) {
 | |
|             $idkomponen = Ipal::getIdRefKomponen($komponen);
 | |
| 
 | |
|             // Calculate average for each component
 | |
|             $nilaiKomponen = Ipal::getNilaiSyaratTeknis([
 | |
|                 'idmcpelaporan' => $idmcpelaporan,
 | |
|                 'idrefkomponen' => $idkomponen,
 | |
|                 'idmcipal !=' => null
 | |
|             ]);
 | |
| 
 | |
|             $jmlNilai = 0;
 | |
|             foreach ($nilaiKomponen as $row) {
 | |
|                 $jmlNilai += $row->nilai;
 | |
|             }
 | |
| 
 | |
|             $jmlIpal = count(Ipal::getData($idmcpelaporan));
 | |
|             $rerataNilai = $jmlIpal ? $jmlNilai / $jmlIpal : 0;
 | |
| 
 | |
|             // Update average for each component
 | |
|             $filter = [
 | |
|                 'idmcpelaporan' => $idmcpelaporan,
 | |
|                 'idrefkomponen' => $idkomponen,
 | |
|                 'idmcipal' => null
 | |
|             ];
 | |
| 
 | |
|             $dataUpdate = [
 | |
|                 'idrefhasil' => 0,
 | |
|                 'nilai' => $rerataNilai
 | |
|             ];
 | |
| 
 | |
|             Ipal::updateNilaiSyaratTeknis($filter, $dataUpdate);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Upload file.
 | |
|      *
 | |
|      * @param int $idMcIpal
 | |
|      * @param \Illuminate\Http\UploadedFile $file
 | |
|      * @return string
 | |
|      */
 | |
|     private function _uploadFile($idMcIpal, $file)
 | |
|     {
 | |
|         // Check authorization
 | |
|         if (!Gate::allows('pelaporan.edit')) {
 | |
|             abort(403);
 | |
|         }
 | |
| 
 | |
|         $dataIpal = Ipal::getOneBy(['id' => $idMcIpal]);
 | |
|         $pelaporan = Pelaporan::findOrFail($dataIpal->idmcpelaporan);
 | |
|         $perusahaan = Pelaporan::getPerusahaan($pelaporan->idrefperusahaan);
 | |
| 
 | |
|         $notAllowedChar = [' ', '.', '/', '-', ',', ':'];
 | |
| 
 | |
|         $noInduk = $perusahaan->nomorinduk;
 | |
|         $tahun = $pelaporan->tahun;
 | |
|         $periode = strtolower(str_replace($notAllowedChar, '_', $pelaporan->periode));
 | |
|         $noIpal = $dataIpal->nomor;
 | |
| 
 | |
|         $dirUpload = 'data_perusahaan/' . $noInduk . '/lampiran' . '/' . 'al' . '/' . 'A6' . '/' . $tahun . '_' . $periode . '/data_pendukung' . '/' . $noIpal . '/';
 | |
| 
 | |
|         // Create directory if it doesn't exist
 | |
|         if (!Storage::disk('public')->exists($dirUpload)) {
 | |
|             Storage::disk('public')->makeDirectory($dirUpload, 0777, true);
 | |
|         }
 | |
| 
 | |
|         $filesize = $file->getSize();
 | |
| 
 | |
|         // If filesize > 20 MB
 | |
|         if ($filesize / pow(1024, 2) > 20) {
 | |
|             return 'max filesize exceeded';
 | |
|         }
 | |
| 
 | |
|         $name = $file->getClientOriginalName();
 | |
|         $ext = $file->getClientOriginalExtension();
 | |
|         $baseName = pathinfo($name, PATHINFO_FILENAME);
 | |
|         $newName = $baseName . '_' . date('Ymd_His') . '.' . $ext;
 | |
| 
 | |
|         // Delete old file if exists
 | |
|         if ($dataIpal->lampiran && Storage::disk('public')->exists($dataIpal->lampiran)) {
 | |
|             Storage::disk('public')->delete($dataIpal->lampiran);
 | |
|         }
 | |
| 
 | |
|         // Store new file
 | |
|         $path = $file->storeAs($dirUpload, $newName, 'public');
 | |
| 
 | |
|         return $path;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Recursively remove directory.
 | |
|      *
 | |
|      * @param string $dir
 | |
|      * @return void
 | |
|      */
 | |
|     private function _recursiveRmdir($dir)
 | |
|     {
 | |
|         if (is_dir($dir)) {
 | |
|             $objects = scandir($dir);
 | |
|             foreach ($objects as $object) {
 | |
|                 if ($object != "." && $object != "..") {
 | |
|                     if (filetype($dir . "/" . $object) == "dir") {
 | |
|                         $this->_recursiveRmdir($dir . "/" . $object);
 | |
|                     } else {
 | |
|                         unlink($dir . "/" . $object);
 | |
|                     }
 | |
|                 }
 | |
|             }
 | |
|             reset($objects);
 | |
|             rmdir($dir);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Format bytes to human readable format.
 | |
|      *
 | |
|      * @param int $bytes
 | |
|      * @param int $precision
 | |
|      * @return string
 | |
|      */
 | |
|     private function _formatBytes($bytes, $precision = 2)
 | |
|     {
 | |
|         $units = ['B', 'KB', 'MB', 'GB', 'TB'];
 | |
|         $bytes = max($bytes, 0);
 | |
|         $pow = floor(($bytes ? log($bytes) : 0) / log(1024));
 | |
|         $pow = min($pow, count($units) - 1);
 | |
| 
 | |
|         $bytes /= pow(1024, $pow);
 | |
| 
 | |
|         return round($bytes, $precision) . ' ' . $units[$pow];
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * 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] ?? '';
 | |
|     }
 | |
| }
 |