diff --git a/app/Http/Controllers/PembayaranController.php b/app/Http/Controllers/PembayaranController.php index ce9139c..712b8aa 100644 --- a/app/Http/Controllers/PembayaranController.php +++ b/app/Http/Controllers/PembayaranController.php @@ -1,282 +1,298 @@ user) || !$this->user->can('noc.view')) { - //abort(403, 'Sorry! You are not allowed to view persetujuan penawaran.'); - } - - // Retrieve data from the database - $query = PersetujuanPenawaran::query(); - - // Apply search filter if provided - if ($request->has('search') && !empty($request->get('search'))) { - $search = $request->get('search'); - $query->where(function ($q) use ($search) { - $q->orWhereRelation('penawaran', 'nomor_registrasi', 'LIKE', '%' . $search . '%'); - }); - } - - // Apply sorting if provided - if ($request->has('sortOrder') && !empty($request->get('sortOrder'))) { - $order = $request->get('sortOrder'); - $column = $request->get('sortField'); - $query->orderBy($column, $order); - } - - // Get the total count of records - $totalRecords = $query->count(); - - // Apply pagination if provided - if ($request->has('page') && $request->has('size')) { - $page = $request->get('page'); - $size = $request->get('size'); - $offset = ($page - 1) * $size; // Calculate the offset - - $query->skip($offset)->take($size); - } - - // Get the filtered count of records - $filteredRecords = $query->count(); - - // Get the data for the current page - $data = $query - ->with( - [ - 'penawaran.permohonan.user', - 'penawaran.permohonan.debiture', - 'penawaran.permohonan.branch', - 'permohonan.debiture', - 'permohonan.branch', - 'permohonan.user', - 'permohonan.approveBayar', - 'penawaran.permohonan.approveBayar', - 'penawaran.detail', - 'penawaran.persetujuan', - ], - )->get(); - - - // Calculate the page count - $pageCount = ceil($totalRecords / $request->get('size')); - - // Calculate the current page number - $currentPage = $request->get('page', 1); - - // Return the response data as a JSON object - return response()->json([ - 'draw' => $request->get('draw'), - 'recordsTotal' => $totalRecords, - 'recordsFiltered' => $filteredRecords, - 'pageCount' => $pageCount, - 'page' => $currentPage, - 'totalCount' => $totalRecords, - 'data' => $data, - ]); - } - - function edit($id) - { - $permohonan = Permohonan::find($id); - return view('lpj::pembayaran.form', compact('permohonan')); - } - - public function store(PersetujuanPenawaranRequest $request) - { - $validated = $request->validated(); - $validated['created_by'] = Auth::id(); - $validated['status'] = '0'; - - if (isset($validated['penawaran_id'])) { - $persetujuanPenawaran = PersetujuanPenawaran::create( - ['penawaran_id' => $validated['penawaran_id']], - $validated, - ); - } else { - $persetujuanPenawaran = PersetujuanPenawaran::create( - $validated - ); - } - - $folderPath = 'persetujuan_penawaran/' . $validated['penawaran_id']; - - if ($request->hasFile('bukti_bayar')) { - $persetujuanPenawaran->bukti_bayar = $request->file('bukti_bayar')->store($folderPath, 'public'); - } - - $persetujuanPenawaran->save(); - - // Update the status of the related permohonan to 'spk' - $permohonan = Permohonan::find(request()->get('permohonan_id')); - if ($permohonan) { - $permohonan->status_bayar = request()->get('status_bayar'); - $permohonan->save(); - - // andy add, update status penawaran.status='spk' - // $penawaran = PenawaranTender::where('nomor_registrasi',$permohonan->nomor_registrasi)->first(); - PenawaranTender::where('nomor_registrasi', $permohonan->nomor_registrasi)->update([ - 'status' => 'noc', - 'updated_by' => Auth::id(), - 'updated_at' => now(), - ]); - // andy add, update status penawaran.status='spk' - - } - - return redirect() - ->route('pembayaran.index')->with('success', 'Pembayaran berhasil disimpan.'); - } - - public function update(Request $request, $id) - : JsonResponse { - // init - $data = []; - $output = []; - $tindakan = null; - if (request()->ajax()) { - try { - $data = [ - 'approve_bayar_by' => Auth::id(), - 'approve_bayar_at' => now(), - ]; - - if ($request->keterangan) { - $data['approve_keterangan_bayar'] = $request->keterangan; - } - $output['data'] = $data; - - // Update the status of the related permohonan to 'spk' - $permohonan = Permohonan::find($id); - - if ($permohonan) { - $data['status_bayar'] = 'sudah_bayar'; - if($permohonan->jenis_penilaian_id == 2) { - $data['status'] = 'spk'; - } - - $permohonan->update($data); - - if($permohonan->jenis_penilaian_id == 2) { - PenawaranTender::where('nomor_registrasi', $permohonan->nomor_registrasi)->update([ - 'status' => 'spk', - 'updated_by' => Auth::id(), - 'updated_at' => now(), - ]); - } - } - - $output['status'] = 'success'; - $output['message'] = ['Otorisasi' . $permohonan->nomor_registrasi . 'berhasil di lakukan']; - } catch (Exception $e) { - $output['status'] = 'error'; - $output['message'] = ['Otorisasi gagal di lakukan.']; - } - } - return response()->json($output); - } - - public function dataForDatatables(Request $request) - { - if (is_null($this->user) || !$this->user->can('debitur.view')) { - // abort(403, 'Sorry! You are not allowed to view users.'); - } - - $query = Permohonan::query()->where(['status_bayar' => 'belum_bayar', 'jenis_penilaian_id' => 1]) - ->whereNotIn('id', function($subquery) { - $subquery->select('permohonan_id') - ->from('persetujuan_penawaran') - ->whereNotNull('permohonan_id'); - }); - - // Pencarian berdasarkan parameter search - if ($request->has('search') && !empty($request->get('search'))) { - $search = $request->get('search'); - $query->where(function ($q) use ($search) { - $q->where('nomor_registrasi', 'LIKE', '%' . $search . '%'); - $q->orWhere('tanggal_permohonan', 'LIKE', '%' . $search . '%'); - $q->orWhereRelation('user', 'name', 'LIKE', '%' . $search . '%'); - $q->orWhereRelation('debiture', 'name', 'LIKE', '%' . $search . '%'); - $q->orWhereRelation('jenisPenilaian', 'name', 'LIKE', '%' . $search . '%'); - $q->orWhereRelation('branch', 'name', 'LIKE', '%' . $search . '%'); - $q->orWhere('status', 'LIKE', '%' . $search . '%'); - }); - } - - // Sorting berdasarkan sortField dan sortOrder - if ($request->has('sortOrder') && !empty($request->get('sortOrder'))) { - $order = $request->get('sortOrder'); - $column = $request->get('sortField'); - $query->orderBy($column, $order); - } - - // Hitung total records - $totalRecords = $query->count(); - - // Pagination (default page size 10) - $size = $request->get('size', 10); - if ($size == 0) { - $size = 10; - } - - if ($request->has('page') && $request->has('size')) { - $page = $request->get('page', 1); - $offset = ($page - 1) * $size; - - $query->skip($offset)->take($size); - } - - // Filtered records - $filteredRecords = $query->count(); - - // Ambil data dengan relasi - $data = $query->with(['user', 'debiture', 'branch', 'jenisPenilaian'])->get(); - - - // Hitung jumlah halaman - $pageCount = ceil($totalRecords / $size); - - // Ambil current page - $currentPage = max(1, $request->get('page', 1)); - - // Return JSON response - return response()->json([ - 'draw' => $request->get('draw'), - 'recordsTotal' => $totalRecords, - 'recordsFiltered' => $filteredRecords, - 'pageCount' => $pageCount, - 'page' => $currentPage, - 'totalCount' => $totalRecords, - 'data' => $data, - ]); - } + return view('lpj::pembayaran.index'); } + + public function approval() + { + return view('lpj::pembayaran.approval'); + } + + public function dataApprovalForDatatables(Request $request) + { + if (is_null($this->user) || !$this->user->can('noc.view')) { + //abort(403, 'Sorry! You are not allowed to view persetujuan penawaran.'); + } + + // Retrieve data from the database + $query = PersetujuanPenawaran::query(); + + // Apply search filter if provided + if ($request->has('search') && !empty($request->get('search'))) { + $search = $request->get('search'); + $query->where(function ($q) use ($search) { + $q->orWhereRelation('penawaran', 'nomor_registrasi', 'LIKE', '%' . $search . '%'); + }); + } + + // Apply sorting if provided + if ($request->has('sortOrder') && !empty($request->get('sortOrder'))) { + $order = $request->get('sortOrder'); + $column = $request->get('sortField'); + $query->orderBy($column, $order); + } + + // Get the total count of records + $totalRecords = $query->count(); + + // Apply pagination if provided + if ($request->has('page') && $request->has('size')) { + $page = $request->get('page'); + $size = $request->get('size'); + $offset = ($page - 1) * $size; // Calculate the offset + + $query->skip($offset)->take($size); + } + + // Get the filtered count of records + $filteredRecords = $query->count(); + + // Get the data for the current page + $data = $query + ->with( + [ + 'penawaran.permohonan.user', + 'penawaran.permohonan.debiture', + 'penawaran.permohonan.branch', + 'permohonan.debiture', + 'permohonan.branch', + 'permohonan.user', + 'permohonan.approveBayar', + 'penawaran.permohonan.approveBayar', + 'penawaran.detail', + 'penawaran.persetujuan', + ], + )->get(); + + + // Calculate the page count + $pageCount = ceil($totalRecords / $request->get('size')); + + // Calculate the current page number + $currentPage = $request->get('page', 1); + + // Return the response data as a JSON object + return response()->json([ + 'draw' => $request->get('draw'), + 'recordsTotal' => $totalRecords, + 'recordsFiltered' => $filteredRecords, + 'pageCount' => $pageCount, + 'page' => $currentPage, + 'totalCount' => $totalRecords, + 'data' => $data, + ]); + } + + public function edit($id) + { + $permohonan = Permohonan::find($id); + return view('lpj::pembayaran.form', compact('permohonan')); + } + + public function store(PersetujuanPenawaranRequest $request) + { + $validated = $request->validated(); + $validated['created_by'] = Auth::id(); + $validated['status'] = '0'; + + if (isset($validated['penawaran_id'])) { + $persetujuanPenawaran = PersetujuanPenawaran::create( + ['penawaran_id' => $validated['penawaran_id']], + $validated, + ); + } else { + $persetujuanPenawaran = PersetujuanPenawaran::create( + $validated + ); + } + + $folderPath = 'persetujuan_penawaran/' . $validated['penawaran_id']; + + if ($request->hasFile('bukti_bayar')) { + $persetujuanPenawaran->bukti_bayar = $request->file('bukti_bayar')->store($folderPath, 'public'); + } + + $persetujuanPenawaran->save(); + + // Update the status of the related permohonan to 'spk' + $permohonan = Permohonan::find(request()->get('permohonan_id')); + if ($permohonan) { + $permohonan->status_bayar = request()->get('status_bayar'); + $permohonan->save(); + + // andy add, update status penawaran.status='spk' + // $penawaran = PenawaranTender::where('nomor_registrasi',$permohonan->nomor_registrasi)->first(); + PenawaranTender::where('nomor_registrasi', $permohonan->nomor_registrasi)->update([ + 'status' => 'noc', + 'updated_by' => Auth::id(), + 'updated_at' => now(), + ]); + // andy add, update status penawaran.status='spk' + + } + + return redirect() + ->route('pembayaran.index')->with('success', 'Pembayaran berhasil disimpan.'); + } + + public function update(Request $request, $id): JsonResponse + { + // init + $data = []; + $output = []; + $tindakan = null; + if (request()->ajax()) { + try { + $data = [ + 'approve_bayar_by' => Auth::id(), + 'approve_bayar_at' => now(), + ]; + + if ($request->keterangan) { + $data['approve_keterangan_bayar'] = $request->keterangan; + } + $output['data'] = $data; + + // Update the status of the related permohonan to 'spk' + $permohonan = Permohonan::find($id); + + if ($permohonan) { + $data['status_bayar'] = 'sudah_bayar'; + if ($permohonan->jenis_penilaian_id == 2) { + $data['status'] = 'spk'; + } + + if ($permohonan->jenis_penilaian_id == 1) { + unset( + $data['approval_so'], + $data['approval_so_at'], + $data['approval_eo'], + $data['approval_eo_at'], + $data['approval_dd'], + $data['approval_dd_at'], + $data['keterangan'] + ); + + $data['status'] = 'proses-laporan'; + } + + $permohonan->update($data); + + if ($permohonan->jenis_penilaian_id == 2) { + PenawaranTender::where('nomor_registrasi', $permohonan->nomor_registrasi)->update([ + 'status' => 'spk', + 'updated_by' => Auth::id(), + 'updated_at' => now(), + ]); + } + } + + $output['status'] = 'success'; + $output['message'] = ['Otorisasi' . $permohonan->nomor_registrasi . 'berhasil di lakukan']; + } catch (Exception $e) { + $output['status'] = 'error'; + $output['message'] = ['Otorisasi gagal di lakukan.']; + } + } + return response()->json($output); + } + + public function dataForDatatables(Request $request) + { + if (is_null($this->user) || !$this->user->can('debitur.view')) { + // abort(403, 'Sorry! You are not allowed to view users.'); + } + + $query = Permohonan::query()->where(['status_bayar' => 'belum_bayar', 'jenis_penilaian_id' => 1]) + ->whereNotIn('id', function ($subquery) { + $subquery->select('permohonan_id') + ->from('persetujuan_penawaran') + ->whereNotNull('permohonan_id'); + }); + + // Pencarian berdasarkan parameter search + if ($request->has('search') && !empty($request->get('search'))) { + $search = $request->get('search'); + $query->where(function ($q) use ($search) { + $q->where('nomor_registrasi', 'LIKE', '%' . $search . '%'); + $q->orWhere('tanggal_permohonan', 'LIKE', '%' . $search . '%'); + $q->orWhereRelation('user', 'name', 'LIKE', '%' . $search . '%'); + $q->orWhereRelation('debiture', 'name', 'LIKE', '%' . $search . '%'); + $q->orWhereRelation('jenisPenilaian', 'name', 'LIKE', '%' . $search . '%'); + $q->orWhereRelation('branch', 'name', 'LIKE', '%' . $search . '%'); + $q->orWhere('status', 'LIKE', '%' . $search . '%'); + }); + } + + // Sorting berdasarkan sortField dan sortOrder + if ($request->has('sortOrder') && !empty($request->get('sortOrder'))) { + $order = $request->get('sortOrder'); + $column = $request->get('sortField'); + $query->orderBy($column, $order); + } + + // Hitung total records + $totalRecords = $query->count(); + + // Pagination (default page size 10) + $size = $request->get('size', 10); + if ($size == 0) { + $size = 10; + } + + if ($request->has('page') && $request->has('size')) { + $page = $request->get('page', 1); + $offset = ($page - 1) * $size; + + $query->skip($offset)->take($size); + } + + // Filtered records + $filteredRecords = $query->count(); + + // Ambil data dengan relasi + $data = $query->with(['user', 'debiture', 'branch', 'jenisPenilaian'])->get(); + + + // Hitung jumlah halaman + $pageCount = ceil($totalRecords / $size); + + // Ambil current page + $currentPage = max(1, $request->get('page', 1)); + + // Return JSON response + return response()->json([ + 'draw' => $request->get('draw'), + 'recordsTotal' => $totalRecords, + 'recordsFiltered' => $filteredRecords, + 'pageCount' => $pageCount, + 'page' => $currentPage, + 'totalCount' => $totalRecords, + 'data' => $data, + ]); + } +} diff --git a/app/Http/Controllers/PenilaiController.php b/app/Http/Controllers/PenilaiController.php index 95bbf0f..9c214d5 100644 --- a/app/Http/Controllers/PenilaiController.php +++ b/app/Http/Controllers/PenilaiController.php @@ -497,7 +497,7 @@ class PenilaiController extends Controller }); } - $query->whereRaw('LOWER(status) IN (?, ?, ?, ?, ?, ?,?)', ['assign','survey-completed', 'proses-laporan', 'paparan', 'proses-paparan','paparan', 'revisi-laporan', 'done']); + $query->whereRaw('LOWER(status) IN (?, ?, ?, ?, ?, ?,?)', ['assign','survey-completed', 'proses-laporan', 'paparan', 'proses-paparan','paparan', 'revisi-laporan']); if (!Auth::user()->hasRole('administrator')) { $query->whereHas('penilaian.userPenilai', function ($q) { diff --git a/app/Http/Controllers/PenilaianController.php b/app/Http/Controllers/PenilaianController.php index 0b2b9fb..9860b7e 100644 --- a/app/Http/Controllers/PenilaianController.php +++ b/app/Http/Controllers/PenilaianController.php @@ -27,7 +27,6 @@ use Modules\Lpj\Http\Controllers\SurveyorController; use Modules\Lpj\Http\Controllers\PenilaiController; use Modules\Lpj\Http\Requests\FormSurveyorRequest; - class PenilaianController extends Controller { public $user; @@ -573,7 +572,7 @@ class PenilaianController extends Controller ]); } elseif (Auth::user()->roles[0]->name === 'EO Appraisal') { $status = '2'; - if (!in_array($permohonan->nilai_plafond_id, [1, 4])) { + if (!in_array($permohonan->nilai_plafond_id, [1,4])) { $status = '1'; $permohonan->update([ 'status' => $authorization->request @@ -680,11 +679,11 @@ class PenilaianController extends Controller // }); // } // } else { - if (Auth::user()->hasRole('senior-officer')) { - $query->whereHas('region.teams.teamsUsers', function ($q) { - $q->where('user_id', Auth::id()); - }); - } + if (Auth::user()->hasRole('senior-officer')) { + $query->whereHas('region.teams.teamsUsers', function ($q) { + $q->where('user_id', Auth::id()); + }); + } // } diff --git a/app/Http/Controllers/SurveyorController.php b/app/Http/Controllers/SurveyorController.php index f3e7e26..c8533a4 100644 --- a/app/Http/Controllers/SurveyorController.php +++ b/app/Http/Controllers/SurveyorController.php @@ -674,6 +674,51 @@ class SurveyorController extends Controller ]); } + + public function saveEditedImage(Request $request) + { + try { + + $request->validate([ + 'edited_image' => 'required|string', + 'original_path' => 'required|string', + ]); + + // Decode base64 image + $base64Image = $request->input('edited_image'); + if (str_contains($base64Image, ';base64,')) { + [$metadata, $base64Image] = explode(';base64,', $base64Image); + } + + $decodedImage = base64_decode($base64Image); + if (!$decodedImage) { + return response()->json([ + 'status' => 'error', + 'message' => 'Gambar tidak valid', + ], 400); + } + + // Path asli + $originalPath = $request->input('original_path'); + $fileName = basename($originalPath); + $newFilePath = 'edited_images/' . $fileName; + + // Simpan file ke storage + Storage::disk('public')->put($newFilePath, $decodedImage); + + return response()->json([ + 'status' => 'success', + 'message' => 'Gambar berhasil disimpan', + 'file_path' => $newFilePath, + ], 200); + } catch (\Exception $e) { + return response()->json([ + 'status' => 'error', + 'message' => 'Terjadi kesalahan: ' . $e->getMessage(), + ], 500); + } + } + private function findFotoByParamName($fotoForm, $paramName) { // Mapping parameter name ke struktur JSON diff --git a/module.json b/module.json index 37e7ebd..73e9455 100644 --- a/module.json +++ b/module.json @@ -103,6 +103,7 @@ "roles": [ "administrator", "senior-officer", + "EO Appraisal", "DD Appraisal" ] } diff --git a/resources/views/component/form-penilai.blade.php b/resources/views/component/form-penilai.blade.php index 0866ddd..569476c 100644 --- a/resources/views/component/form-penilai.blade.php +++ b/resources/views/component/form-penilai.blade.php @@ -1,82 +1,5 @@
- {{--
-
-
-

- {{ $title ?? 'Data Jaminan' }} -

- @php - use Illuminate\Support\Facades\Route; - @endphp -
- @if (Auth::user()->hasAnyRole(['administrator', 'senior-officer', 'EO Appraisal', 'DD Appraisal']) && - Route::currentRouteName('otorisator.show')) - - Back - - @elseif (Auth::user()->hasAnyRole(['administrator', 'surveyor']) && Route::currentRouteName('penilai.show')) - - Back - - @endif -
-
-
-
- -
- @if (isset($permohonan->debiture)) -

{{ $permohonan->debiture->name }}

- @endif -
-
-
- -
- @foreach ($permohonan->documents as $dokumen) - - {{ formatAlamat($dokumen->pemilik) }} - {{ formatAlamat($dokumen->pemilik) }} - - @endforeach -
-
-
- -
-

{{ $permohonan->nomor_registrasi }}

-
-
- -
- -
- @if (isset($permohonan->branch)) -

{{ $permohonan->branch->name }}

- @endif -
-
- -
- -
-

{{ $permohonan->nomor_registrasi }}

-
-
-
- -
- @if (isset($permohonan->user)) -

{{ $permohonan->user->name }}

- @endif -
-
-
-
-
--}} - @foreach ($permohonan->documents as $dokumen) @if ($dokumen->jenisJaminan) @@ -290,60 +213,12 @@
-
-
-

- nilai asuransi -

-
-
-
- -
-
-
- - -
-
- - -
- -
- -
- - -
-
-
-
-
- --}} + - @include('lpj::surveyor.js.camera-editor') @endpush