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