Merge remote-tracking branch 'origin/staging' into feature/senior-officer

This commit is contained in:
majid
2024-12-24 08:54:20 +07:00
75 changed files with 2761 additions and 714 deletions

View File

@@ -7,6 +7,7 @@
use Modules\Lpj\Models\PenawaranTender;
use Modules\Lpj\Models\Penilaian;
use Modules\Lpj\Models\JenisDokumen;
use Modules\Usermanagement\Models\User;
function formatTanggalIndonesia($date, $time = false)
{
@@ -131,10 +132,10 @@
$noUrutAkhirString = sprintf("%04s", abs($code_penawaran_last + 1));
}
// jika ternyata tahun tdk sama (kurang dari tahun sekarang), maka nomor di set 0001
}
}
}
return 'NP' . Carbon::now()->format('y') . $noUrutAkhirString;
}
@@ -143,7 +144,7 @@
return ctype_digit($str);
}
// generate last penawaran.no_spk
// generate last penawaran.no_spk
function onLastnumberCodePenawaranSPK($jenis_laporan_code): string
{
@@ -311,3 +312,7 @@
return $maxSizeInKB;
}
function getUser($userId){
return User::find($userId);
}

View File

@@ -4,6 +4,7 @@ namespace Modules\Lpj\Http\Controllers;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Modules\Lpj\Models\Permohonan;
class LaporanController extends Controller
{
@@ -37,4 +38,75 @@ class LaporanController extends Controller
public function store(Request $request) {}
public function update(Request $request, $id) {}
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.');
}
// Retrieve data from the database
$query = Permohonan::query()->whereIn('status',['proses-laporan','done']);
$query = $query->orderBy('nomor_registrasi', 'desc');
// Apply search filter if provided
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('tujuanPenilaian', 'name', 'LIKE', '%' . $search . '%');
$q->orWhereRelation('branch', 'name', 'LIKE', '%' . $search . '%');
$q->orWhere('status', '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();
$size = $request->get('size', 10);
if ($size == 0) {
$size = 10;
}
// 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(['user', 'debiture', 'branch', 'tujuanPenilaian', 'penilaian','jenisFasilitasKredit'])->get();
// Calculate the page count
$pageCount = ceil($totalRecords / $size);
// Calculate the current page number
$currentPage = max(1, $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,
]);
}
}

View File

@@ -43,7 +43,6 @@
$status = "persetujuan-penawaran";
}
$persetujuanPenawaran = PersetujuanPenawaran::updateOrCreate(
['penawaran_id' => $validated['penawaran_id']],
$validated,
@@ -64,16 +63,20 @@
$permohonan = Permohonan::find(request()->get('permohonan_id'));
if ($permohonan) {
$permohonan->status_bayar = request()->get('status_bayar');
$permohonan->status = $status;
if($permohonan->jenis_penilaian_id==2) {
$permohonan->status = $status;
}
$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' => $status,
'updated_by' => Auth::id(),
'updated_at' => now(),
]);
if($permohonan->jenis_penilaian_id==2) {
PenawaranTender::where('nomor_registrasi', $permohonan->nomor_registrasi)->update([
'status' => $status,
'updated_by' => Auth::id(),
'updated_at' => now(),
]);
}
// andy add, update status penawaran.status='spk'
}
@@ -114,7 +117,7 @@
public function edit($id)
{
$persetujuanPenawaran = PersetujuanPenawaran::where('id', $id)->with(
['penawaran.detail', 'penawaran.permohonan.debiture'],
['penawaran.detail', 'penawaran.permohonan.debiture','permohonan'],
)->first();
return view('lpj::noc.form', compact('persetujuanPenawaran'));
}
@@ -175,6 +178,8 @@
[
'penawaran.permohonan.debiture',
'penawaran.permohonan.branch',
'permohonan.debiture',
'permohonan.branch',
'penawaran.detail',
'penawaran.persetujuan',
],

View File

@@ -0,0 +1,147 @@
<?php
namespace Modules\Lpj\Http\Controllers;
use App\Http\Controllers\Controller;
use Barryvdh\DomPDF\Facade\Pdf;
use Exception;
use Illuminate\Http\Request;
use Maatwebsite\Excel\Facades\Excel;
use Modules\Location\Models\City;
use Modules\Location\Models\District;
use Modules\Location\Models\Province;
use Modules\Location\Models\Village;
use Modules\Lpj\Exports\PermohonanExport;
use Modules\Lpj\Http\Requests\PermohonanRequest;
use Modules\Lpj\Models\Branch;
use Modules\Lpj\Models\Debiture;
use Modules\Lpj\Models\DokumenJaminan;
use Modules\Lpj\Models\JenisFasilitasKredit;
use Modules\Lpj\Models\NilaiPlafond;
use Modules\Lpj\Models\Permohonan;
use Modules\Lpj\Models\PermohonanPembatalan;
use Modules\Lpj\Models\StatusPermohonan;
use Modules\Lpj\Models\TujuanPenilaian;
use Modules\Lpj\Services\PermohonanHistoryService;
class PembatalanController extends Controller
{
public $user;
protected $historyService;
public function __construct(PermohonanHistoryService $historyService)
{
$this->historyService = $historyService;
}
public function index()
{
return view('lpj::pembatalan.index');
}
public function edit($id)
{
$pembatalan = PermohonanPembatalan::with(['permohonan.debiture','permohonan.branch'])->find($id);
return view(
'lpj::pembatalan.form',
compact(
'pembatalan'
),
);
}
public function update(Request $request, $id)
{
$pembatalan = PermohonanPembatalan::findOrFail($id);
$permohonan = Permohonan::find($pembatalan->permohonan_id);
$beforeRequest = $permohonan->toArray();
try {
// Update Permohonan Pembatalan
if($request->status=='approved'){
$pembatalan->status = 'approved';
$pembatalan->save();
$permohonan->status = 'batal';
$permohonan->save();
} else{
$pembatalan->status = 'rejected';
$pembatalan->save();
}
return redirect()
->route('pembatalan.index')->with('success', 'Permohonan Pembatalan updated successfully');
} catch (Exception $e) {
return redirect()
->route('pembatalan.edit', $id)->with('error', 'Failed to update permohonan Pembatalan');
}
}
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.');
}
// Retrieve data from the database
$query = PermohonanPembatalan::query();
$query = $query->orderBy('created_at', 'desc');
// 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('permohonan', 'nomor_registrasi', 'LIKE', '%' . $search . '%');
$q->orWhereRelation('permohonan.debiture', 'name', 'LIKE', '%' . $search . '%');
$q->orWhere('alasan_pembatalan', 'LIKE', '%' . $search . '%');
$q->orWhere('status', '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();
$size = $request->get('size', 10);
if ($size == 0) {
$size = 10;
}
// 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(['permohonan.debiture','permohonan.branch','creator'])->get();
// Calculate the page count
$pageCount = ceil($totalRecords / $size);
// Calculate the current page number
$currentPage = max(1, $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,
]);
}
}

View File

@@ -0,0 +1,266 @@
<?php
namespace Modules\Lpj\Http\Controllers;
use App\Http\Controllers\Controller;
use Exception;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Validator;
use Maatwebsite\Excel\Facades\Excel;
use Modules\Lpj\Http\Requests\PersetujuanPenawaranRequest;
use Modules\Lpj\Models\PenawaranTender;
use Modules\Lpj\Models\Permohonan;
use Modules\Lpj\Models\PersetujuanPenawaran;
// use Modules\Lpj\Models\JenisPenilaian;
// use Modules\Lpj\Models\Regions;
class PembayaranController extends Controller
{
public $user;
public function index()
{
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->where('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;
$modal = Permohonan::find($id);
$modal->update($data);
//
$output['status'] = 'success';
$output['message'] = ['Otorisasi' . $modal->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,
]);
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -11,6 +11,7 @@
use Modules\Location\Models\District;
use Modules\Location\Models\Province;
use Modules\Location\Models\Village;
use Modules\Lpj\Models\PermohonanPembatalan;
use Modules\Lpj\Exports\PermohonanExport;
use Modules\Lpj\Http\Requests\PermohonanRequest;
use Modules\Lpj\Models\Branch;
@@ -25,7 +26,7 @@
class PermohonanController extends Controller
{
public $user;
public $user;
protected $historyService;
public function __construct(PermohonanHistoryService $historyService)
@@ -46,7 +47,7 @@
// Process file upload
$filePath = null;
if ($request->hasFile('attachment')) {
$file = $request->file('attachment');
$file = $request->file('attachment');
$fileName = time() . '_' . $file->getClientOriginalName();
$filePath = $file->storeAs('permohonan_attachments', $fileName, 'public');
}
@@ -65,7 +66,7 @@
$keterangan,
[], // beforeRequest is empty for new permohonan
$permohonan->toArray(),
$filePath
$filePath,
);
return redirect()
->route('permohonan.index')->with('success', 'Permohonan created successfully');
@@ -136,7 +137,7 @@
public function update(PermohonanRequest $request, $id)
{
$permohonan = Permohonan::findOrFail($id);
$permohonan = Permohonan::findOrFail($id);
$beforeRequest = $permohonan->toArray();
$validate = $request->validated();
@@ -203,10 +204,10 @@
// Get the total count of records
$totalRecords = $query->count();
$size = $request->get('size', 10);
if ($size == 0) {
$size = 10;
}
$size = $request->get('size', 10);
if ($size == 0) {
$size = 10;
}
// Apply pagination if provided
if ($request->has('page') && $request->has('size')) {
@@ -221,7 +222,7 @@
$filteredRecords = $query->count();
// Get the data for the current page
$data = $query->with(['user', 'debiture', 'branch', 'tujuanPenilaian','penilaian'])->get();
$data = $query->with(['user', 'debiture', 'branch', 'tujuanPenilaian', 'penilaian'])->get();
// Calculate the page count
$pageCount = ceil($totalRecords / $size);
@@ -353,4 +354,38 @@
// $pdf = Pdf::loadView('lpj::permohonan.print', compact('permohonan'));
// return $pdf->stream();
}
public function showPembatalan($id)
{
$permohonan = Permohonan::with(['pembatalan','debiture'])->findOrFail($id);
return view('lpj::permohonan.pembatalan-form', compact('permohonan'));
}
public function pembatalan(Request $request)
{
// Validate the request
$validatedData = $request->validate([
'permohonan_id' => 'required|exists:permohonan,id',
'alasan_pembatalan' => 'required|string',
'file_pembatalan' => 'required|file|mimes:pdf,doc,docx|max:2048',
]);
// Handle file upload
if ($request->hasFile('file_pembatalan')) {
$file = $request->file('file_pembatalan');
$filename = time() . '_' . $file->getClientOriginalName();
$filePath = $file->storeAs('pembatalan', $filename, 'public');
$validatedData['file_pembatalan'] = $filePath;
}
// Add created_by
$validatedData['created_by'] = auth()->id();
// Create new PermohonanPembatalan
$pembatalan = PermohonanPembatalan::create($validatedData);
return redirect()->route('permohonan.index')->with('success', 'Pembatalan Permohonan Menunggu Approval');
}
}

View File

@@ -36,15 +36,17 @@ use Illuminate\Support\Facades\Auth;
// Retrieve data from the database
// $query =Permohonan::query()->with(['penawaran','penawaran.tujuanPenilaianKjpp'])->where('permohonan.status','=','spk');
// $data = $query->with(['user', 'debiture', 'branch', 'tujuanPenilaian','penilaian'])->get();
$query =Permohonan::query()->with(['user', 'debiture', 'branch', 'tujuanPenilaian','penilaian','penawaran','penawaran.tujuanPenilaianKjpp'])->where('permohonan.status','=','spk');
//$query =Permohonan::query()->with(['user', 'debiture', 'branch', 'tujuanPenilaian','penilaian','penawaran','penawaran.tujuanPenilaianKjpp'])->where('permohonan.status','=','spk');
$query = PenawaranTender::query()->with(['permohonan.user', 'permohonan.debiture', 'permohonan.branch', 'permohonan.tujuanPenilaian','permohonan.penilaian','tujuanPenilaianKjpp']);
// Apply search filter if provided
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('penawaran.tanggal_permohonan', 'LIKE', '%' . $search . '%');
$q->whereRelation('permohonan','nomor_registrasi', 'LIKE', '%' . $search . '%');
$q->orWhere('tanggal_permohonan', 'LIKE', '%' . $search . '%');
$q->orWhere('status', 'LIKE', '%' . $search . '%');
});
@@ -81,34 +83,34 @@ use Illuminate\Support\Facades\Auth;
foreach($data as $obj)
{
// tanggal_permohonan
if ($obj->tanggal_permohonan) {
$data[$i]->tanggal_permohonan = Carbon::parse($obj->tanggal_permohonan)->format('d M Y');
if ($obj->permohonan->tanggal_permohonan) {
$data[$i]->permohonan->tanggal_permohonan = Carbon::parse($obj->permohonan->tanggal_permohonan)->format('d M Y');
}
if($obj->penawaran->tanggal_penilaian_sebelumnya)
if($obj->tanggal_penilaian_sebelumnya)
{
$data[$i]->penawaran->tanggal_penilaian_sebelumnya = Carbon::parse($obj->penawaran->tanggal_penilaian_sebelumnya)->format('d F Y H:i:s');
$data[$i]->tanggal_penilaian_sebelumnya = Carbon::parse($obj->tanggal_penilaian_sebelumnya)->format('d F Y H:i:s');
}
if($obj->penawaran->biaya_kjpp_sebelumnya)
if($obj->biaya_kjpp_sebelumnya)
{
$data[$i]->penawaran->biaya_kjpp_sebelumnya = formatRupiah($obj->penawaran->biaya_kjpp_sebelumnya);
$data[$i]->biaya_kjpp_sebelumnya = formatRupiah($obj->biaya_kjpp_sebelumnya);
}
// date_range
if($obj->penawaran->start_date && $obj->penawaran->end_date)
if($obj->start_date && $obj->end_date)
{
$data[$i]->date_range = Carbon::parse($obj->penawaran->start_date)->format('d M Y').' - '.
Carbon::parse($obj->penawaran->end_date)->format('d M Y');
$data[$i]->date_range = Carbon::parse($obj->start_date)->format('d M Y').' - '.
Carbon::parse($obj->end_date)->format('d M Y');
}
// data spk_dokumen_path
if($obj->penawaran->spk_dokumen_path)
if($obj->spk_dokumen_path)
{
$spk_dokumen_path = Storage::url($obj->penawaran->spk_dokumen_path);
$data[$i]->penawaran->spk_dokumen_path = $spk_dokumen_path;
$spk_dokumen_path = Storage::url($obj->spk_dokumen_path);
$data[$i]->spk_dokumen_path = $spk_dokumen_path;
}
$i++;
@@ -393,8 +395,7 @@ use Illuminate\Support\Facades\Auth;
public function download($id) {
// dokumen pdf diambil dari penawaran.spk_dokumen_path
$permohonan = Permohonan::find($id);
$document = PenawaranTender::where('nomor_registrasi','=',$permohonan->nomor_registrasi)->first();
$document = PenawaranTender::find($id);
return response()->download(storage_path('app/public/' .$document->spk_dokumen_path));
}

View File

@@ -14,6 +14,7 @@
public function rules()
{
return [
'permohonan_id' => 'nullable|exists:permohonan,id',
'penawaran_id' => 'nullable|exists:penawaran,id',
'nomor_proposal_penawaran' => 'nullable|string|max:255',
'tanggal_proposal_penawaran' => 'nullable|date',

View File

@@ -38,9 +38,31 @@
'registrasi_catatan',
'registrasi_by',
'registrasi_at',
'jenis_penilaian_id',
'region_id',
'sla'
'sla',
// andy add
'approve_keterangan_bayar',
'approve_bayar_by',
'approve_bayar_at',
'approval_eo',
'approval_eo_at',
'approval_dd',
'approval_dd_at',
'approval_so',
'approval_so_at',
];
protected $dates = [
'tanggal_permohonan',
'authorized_at',
'created_at',
'updated_at',
'registrasi_at',
'approve_bayar_at',
'approval_eo_at',
'approval_dd_at',
'approval_so_at',
];
protected static function boot()
@@ -130,6 +152,10 @@
return $this->belongsTo(JenisFasilitasKredit::class);
}
public function jenisPenilaian(){
return $this->belongsTo(JenisPenilaian::class);
}
public function penilaian()
{
return $this->belongsTo(Penilaian::class, 'nomor_registrasi', 'nomor_registrasi');
@@ -159,4 +185,12 @@
{
return $this->hasMany(DokumenJaminan::class);
}
public function pembatalan(){
return $this->hasMany(PermohonanPembatalan::class);
}
public function approveBayar(){
return $this->belongsTo(User::class, 'approve_bayar_by', 'id');
}
}

View File

@@ -0,0 +1,50 @@
<?php
namespace Modules\Lpj\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
use Modules\Lpj\Models\Permohonan;
use Modules\Usermanagement\Models\User;
class PermohonanPembatalan extends Base
{
protected $table = 'permohonan_pembatalan';
protected $fillable = [
'permohonan_id',
'alasan_pembatalan',
'file_pembatalan',
'status',
'keterangan',
'authorized_at',
'authorized_status',
'created_by',
'updated_by',
'deleted_by',
'authorized_by',
];
protected $dates = [
'created_at',
'updated_at',
'deleted_at',
'authorized_at',
];
protected $casts = [
'authorized_status' => 'string',
];
// Relationship with Permohonan
public function permohonan()
{
return $this->belongsTo(Permohonan::class, 'permohonan_id');
}
public function creator(){
return $this->belongsTo(User::class, 'created_by');
}
}

View File

@@ -10,6 +10,7 @@
protected $table = 'persetujuan_penawaran';
protected $fillable = [
'permohonan_id',
'penawaran_id',
'nomor_proposal_penawaran',
'tanggal_proposal_penawaran',
@@ -42,6 +43,10 @@
return $this->belongsTo(PenawaranTender::class, 'penawaran_id');
}
public function permohonan(){
return $this->belongsTo(Permohonan::class, 'permohonan_id');
}
// Relationship with Region
public function region()
{

View File

@@ -26,7 +26,11 @@ return new class extends Migration
public function down(): void
{
Schema::table('permohonan', function (Blueprint $table) {
$table->dropColumn('registrasi_catatan');
$table->dropColumn('registrasi_by');
$table->dropColumn('registrasi_at');
$table->dropColumn('jenis_penilaian_id');
$table->dropColumn('region_id');
});
}
};

View File

@@ -0,0 +1,35 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreatePermohonanPembatalansTable extends Migration
{
public function up()
{
Schema::create('permohonan_pembatalan', function (Blueprint $table) {
$table->id();
$table->unsignedBigInteger('permohonan_id');
$table->text('alasan_pembatalan');
$table->string('file_pembatalan');
$table->enum('status', ['pending', 'approved', 'rejected'])->default('pending');
$table->text('keterangan')->nullable();
$table->timestamps();
$table->timestamp('authorized_at')->nullable();
$table->char('authorized_status', 1)->nullable();
$table->softDeletes();
$table->unsignedBigInteger('created_by')->nullable();
$table->unsignedBigInteger('updated_by')->nullable();
$table->unsignedBigInteger('deleted_by')->nullable();
$table->unsignedBigInteger('authorized_by')->nullable();
$table->foreign('permohonan_id')->references('id')->on('permohonan')->onDelete('cascade');
});
}
public function down()
{
Schema::dropIfExists('permohonan_pembatalan');
}
}

View File

@@ -0,0 +1,32 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::table('permohonan', function (Blueprint $table) {
$table->text('approve_keterangan_bayar')->nullable()->after('status_bayar')->comment('kebutuhan untuk feature Pembayaran di adminl lpj');
$table->unsignedBigInteger('approve_bayar_by')->nullable()->after('approve_keterangan_bayar')->comment('kebutuhan untuk feature Pembayaran di adminl lpj');
$table->timestamp('approve_bayar_at')->nullable()->after('approve_bayar_by')->comment('kebutuhan untuk feature Pembayaran di adminl lpj');
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::table('permohonan', function (Blueprint $table) {
$table->dropColumn('approve_keterangan_bayar');
$table->dropColumn('approve_bayar_by');
$table->dropColumn('approve_bayar_at');
});
}
};

View File

@@ -0,0 +1,33 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::table('persetujuan_penawaran', function (Blueprint $table) {
$table->unsignedBigInteger('penawaran_id')->change()->nullable();
$table->unsignedBigInteger('permohonan_id')->nullable();
$table->foreign('permohonan_id')->references('id')->on('permohonan')->onDelete('cascade');
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::table('persetujuan_penawaran', function (Blueprint $table) {
$table->unsignedBigInteger('penawaran_id')->change()->nullable(false);
$table->dropForeign('persetujuan_penawaran_permohonan_id_foreign');
$table->dropColumn('permohonan_id');
});
}
};

View File

@@ -0,0 +1,43 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class AddApprovalFieldsToPermohonanTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('permohonan', function (Blueprint $table) {
$table->boolean('approval_eo')->default(false)->after('status');
$table->timestamp('approval_eo_at')->nullable()->after('approval_eo');
$table->boolean('approval_dd')->default(false)->after('approval_eo_at');
$table->timestamp('approval_dd_at')->nullable()->after('approval_dd');
$table->boolean('approval_so')->default(false)->after('approval_dd_at');
$table->timestamp('approval_so_at')->nullable()->after('approval_so');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('permohonan', function (Blueprint $table) {
$table->dropColumn([
'approval_eo', 'approval_eo_at',
'approval_dd', 'approval_dd_at',
'approval_so', 'approval_so_at'
]);
});
}
}

View File

@@ -16,7 +16,7 @@
{
"title": "Permohonan",
"path": "permohonan",
"icon": "ki-filled ki-questionnaire-tablet text-lg",
"icon": "ki-filled ki-questionnaire-tablet text-lg text-primary",
"classes": "",
"attributes": [],
"permission": "",
@@ -26,10 +26,22 @@
"pemohon-eo"
]
},
{
"title": "Pembatalan",
"path": "pembatalan",
"icon": "ki-filled ki-file-deleted text-lg text-danger",
"classes": "",
"attributes": [],
"permission": "",
"roles": [
"administrator",
"pemohon-eo"
]
},
{
"title": "Persetujuan Penawaran",
"path": "persetujuan-penawaran",
"icon": "ki-filled ki-questionnaire-tablet text-lg",
"icon": "ki-filled ki-double-check text-lg text-info",
"classes": "",
"attributes": [],
"permission": "",
@@ -41,7 +53,7 @@
{
"title": "NOC",
"path": "noc",
"icon": "ki-filled ki-questionnaire-tablet text-lg",
"icon": "ki-filled ki-two-credit-cart text-lg text-primary",
"classes": "",
"attributes": [],
"permission": "",
@@ -53,7 +65,7 @@
{
"title": "Registrasi",
"path": "registrasi",
"icon": "ki-filled ki-file-added text-lg",
"icon": "ki-filled ki-add-files text-lg text-primary",
"classes": "",
"attributes": [],
"permission": "",
@@ -65,7 +77,7 @@
{
"title": "Tender",
"path": "tender",
"icon": "ki-filled ki-category text-lg",
"icon": "ki-filled ki-briefcase text-lg text-primary",
"classes": "",
"attributes": [],
"permission": "",
@@ -101,7 +113,7 @@
{
"title": "Otorisasi Tender",
"path": "otorisasitender",
"icon": "ki-filled ki-category text-lg",
"icon": "ki-filled ki-brifecase-tick text-lg text-info",
"classes": "",
"attributes": [],
"permission": "",
@@ -130,7 +142,7 @@
{
"title": "SPK",
"path": "spk",
"icon": "ki-filled ki-file-added text-lg",
"icon": "ki-filled ki-document text-lg text-primary",
"classes": "",
"attributes": [],
"permission": "",
@@ -142,7 +154,7 @@
{
"title": "Registrasi Final",
"path": "registrasifinal",
"icon": "ki-filled ki-file-added text-lg",
"icon": "ki-filled ki-file-added text-lg text-success",
"classes": "",
"attributes": [],
"permission": "",
@@ -152,22 +164,33 @@
]
},
{
"title": "Pembatalan",
"path": "",
"icon": "ki-filled ki-file-deleted text-lg text-danger",
"title": "Pembayaran",
"path": "pembayaran",
"icon": "ki-filled ki-credit-cart text-lg text-primary",
"classes": "",
"attributes": [],
"permission": "",
"roles": [
"administrator",
"pemohon-ao",
"pemohon-eo"
"pemohon-ao"
]
},
{
"title": "Approval Pembayaran",
"path": "pembayaran.approval",
"icon": "ki-filled ki-ensure text-lg text-info",
"classes": "",
"attributes": [],
"permission": "",
"roles": [
"administrator",
"admin"
]
},
{
"title": "Data Debitur",
"path": "debitur",
"icon": "ki-filled ki-people text-lg",
"icon": "ki-filled ki-people text-lg text-primary",
"classes": "",
"attributes": [],
"permission": "",
@@ -180,7 +203,7 @@
{
"title": "Authorization",
"path": "authorization",
"icon": "ki-filled ki-security-user text-lg",
"icon": "ki-filled ki-security-user text-lg text-info",
"classes": "",
"attributes": [],
"permission": "",
@@ -192,7 +215,7 @@
{
"title": "Assignment",
"path": "penilaian",
"icon": "ki-filled ki-badge text-lg",
"icon": "ki-filled ki-badge text-lg text-primary",
"classes": "",
"attributes": [],
"permission": "",
@@ -204,7 +227,7 @@
{
"title": "Team Activity",
"path": "activity.progres",
"icon": "ki-filled ki-questionnaire-tablet text-lg",
"icon": "ki-filled ki-calendar-tick text-lg text-primary",
"classes": "",
"attributes": [],
"permission": "",
@@ -216,7 +239,7 @@
{
"title": "Otorisator",
"path": "otorisator",
"icon": "ki-filled ki-security-user text-lg",
"icon": "ki-filled ki-security-user text-lg text-info",
"classes": "",
"attributes": [],
"permission": "",
@@ -233,18 +256,9 @@
"permission": "",
"roles": [
"administrator",
"senior-officer"
]
},
{
"title": "Pembayaran",
"path": "otorisator.pembayaran",
"classes": "",
"attributes": [],
"permission": "",
"roles": [
"administrator",
"senior-officer"
"senior-officer",
"EO Appraisal",
"DD Appraisal"
]
},
{
@@ -274,7 +288,7 @@
{
"title": "Surveyor",
"path": "surveyor",
"icon": "ki-filled ki-questionnaire-tablet text-lg",
"icon": "ki-filled ki-questionnaire-tablet text-lg text-primary",
"classes": "",
"attributes": [],
"permission": "",
@@ -286,7 +300,7 @@
{
"title": "Activity",
"path": "activity",
"icon": "ki-filled ki-calendar-edit text-lg",
"icon": "ki-filled ki-calendar-edit text-lg text-primary",
"classes": "",
"attributes": [],
"permission": "",
@@ -301,7 +315,7 @@
{
"title": "Penilai",
"path": "penilai",
"icon": "ki-filled ki-brush text-lg",
"icon": "ki-filled ki-brush text-lg text-primary",
"classes": "",
"attributes": [],
"permission": "",
@@ -311,9 +325,9 @@
]
},
{
"title": "Laporan",
"title": "Resume dan Laporan",
"path": "laporan",
"icon": "ki-filled ki-filter-tablet text-lg",
"icon": "ki-filled ki-filter-tablet text-lg text-primary",
"classes": "",
"attributes": [],
"permission": "",
@@ -324,26 +338,13 @@
"admin",
"senior-officer"
]
},
{
"title": "Resume",
"path": "resume",
"icon": "ki-filled ki-questionnaire-tablet text-lg",
"classes": "",
"attributes": [],
"permission": "",
"roles": [
"administrator",
"pemohon-ao",
"pemohon-eo"
]
}
],
"master": [
{
"title": "Basic Data",
"path": "basicdata",
"icon": "ki-filled ki-category text-lg",
"icon": "ki-filled ki-category text-lg text-primary",
"classes": "",
"attributes": [],
"permission": "",

View File

@@ -6,7 +6,7 @@
@section('content')
<div class="grid">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="5"
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="10"
data-datatable-state-save="false" id="ijin-table" data-api-url="{{ route('basicdata.ijin_usaha.datatables') }}">
<div class="card-header py-5 flex-wrap">
<h3 class="card-title">

View File

@@ -95,7 +95,7 @@
</div>
</div>
<div class="card-grid min-w-full" data-datatable="false" data-datatable-page-size="5"
<div class="card-grid min-w-full" data-datatable="false" data-datatable-page-size="10"
data-datatable-state-save="false" id="permohonan-table" data-api-url="{{ route('activity.datatables') }}">
<div class="card-body">

View File

@@ -6,7 +6,7 @@
@section('content')
<div class="grid">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="5" data-datatable-state-save="false" id="arah-mata-angin-table" data-api-url="{{ route('basicdata.arah-mata-angin.datatables') }}">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="10" data-datatable-state-save="false" id="arah-mata-angin-table" data-api-url="{{ route('basicdata.arah-mata-angin.datatables') }}">
<div class="card-header py-5 flex-wrap">
<h3 class="card-title">
Daftar Arah Mata Angin

View File

@@ -6,7 +6,7 @@
@section('content')
<div class="grid">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="5" data-datatable-state-save="false" id="authorization-table" data-api-url="{{ route('authorization.datatables') }}">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="10" data-datatable-state-save="false" id="authorization-table" data-api-url="{{ route('authorization.datatables') }}">
<div class="card-header py-5 flex-wrap">
<h3 class="card-title">
Daftar Authorization

View File

@@ -29,7 +29,6 @@
@case('order')
<i class="ki-filled ki-handcart text-base"></i>
@break
@case('revisi')
<i class="ki-filled ki-notepad-edit text-base"></i>
@break
@@ -59,7 +58,7 @@
@endswitch
</div>
<div class="ml-3 mb-5">
<span class="text-sm text-gray-700 capitalize font-medium">{{ $activity->status }}</span>
<span class="text-sm text-gray-700 capitalize font-medium">{{ str_replace('-',' ',$activity->status) }}</span>
<p class="text-xs text-gray-500 mt-1">{{ $activity->keterangan }}</p>
<div class="flex items-center mt-2">
<span class="text-xs text-gray-400">{{ $activity->created_by ? $activity->creator->name : 'System' }}</span>

View File

@@ -6,7 +6,7 @@
@section('content')
<div class="grid">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="5" data-datatable-state-save="false" id="debitur-table" data-api-url="{{ route('debitur.datatables') }}">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="10" data-datatable-state-save="false" id="debitur-table" data-api-url="{{ route('debitur.datatables') }}">
<div class="card-header py-5 flex-wrap">
<h3 class="card-title">
Daftar Debitur

View File

@@ -6,7 +6,7 @@
@section('content')
<div class="grid">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="5" data-datatable-state-save="false" id="hubungan-pemilik-jaminan-table" data-api-url="{{ route('basicdata.hubungan-pemilik-jaminan.datatables') }}">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="10" data-datatable-state-save="false" id="hubungan-pemilik-jaminan-table" data-api-url="{{ route('basicdata.hubungan-pemilik-jaminan.datatables') }}">
<div class="card-header py-5 flex-wrap">
<h3 class="card-title">
Daftar Hubungan Pemilik Jaminan

View File

@@ -6,7 +6,7 @@
@section('content')
<div class="grid">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="5" data-datatable-state-save="false" id="hubungan-penghuni-jaminan-table" data-api-url="{{ route('basicdata.hubungan-penghuni-jaminan.datatables') }}">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="10" data-datatable-state-save="false" id="hubungan-penghuni-jaminan-table" data-api-url="{{ route('basicdata.hubungan-penghuni-jaminan.datatables') }}">
<div class="card-header py-5 flex-wrap">
<h3 class="card-title">
Daftar Hubungan Penghuni Jaminan

View File

@@ -6,7 +6,7 @@
@section('content')
<div class="grid">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="5" data-datatable-state-save="false" id="jenis-aset-table" data-api-url="{{ route('basicdata.jenis-aset.datatables') }}">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="10" data-datatable-state-save="false" id="jenis-aset-table" data-api-url="{{ route('basicdata.jenis-aset.datatables') }}">
<div class="card-header py-5 flex-wrap">
<h3 class="card-title">
Daftar Jenis Aset

View File

@@ -6,7 +6,7 @@
@section('content')
<div class="grid">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="5" data-datatable-state-save="false" id="jenis-dokumen-table" data-api-url="{{ route('basicdata.jenis-dokumen.datatables') }}">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="10" data-datatable-state-save="false" id="jenis-dokumen-table" data-api-url="{{ route('basicdata.jenis-dokumen.datatables') }}">
<div class="card-header py-5 flex-wrap">
<h3 class="card-title">
Daftar Jenis Dokumen

View File

@@ -6,7 +6,7 @@
@section('content')
<div class="grid">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="5" data-datatable-state-save="false" id="jenis-fasilitas-kredit-table" data-api-url="{{ route('basicdata.jenis-fasilitas-kredit.datatables') }}">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="10" data-datatable-state-save="false" id="jenis-fasilitas-kredit-table" data-api-url="{{ route('basicdata.jenis-fasilitas-kredit.datatables') }}">
<div class="card-header py-5 flex-wrap">
<h3 class="card-title">
Daftar Jenis Fasilitas Kredit

View File

@@ -6,7 +6,7 @@
@section('content')
<div class="grid">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="5" data-datatable-state-save="false" id="jenis-jaminan-table" data-api-url="{{ route('basicdata.jenis-jaminan.datatables') }}">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="10" data-datatable-state-save="false" id="jenis-jaminan-table" data-api-url="{{ route('basicdata.jenis-jaminan.datatables') }}">
<div class="card-header py-5 flex-wrap">
<h3 class="card-title">
Daftar Jenis Jaminan

View File

@@ -6,7 +6,7 @@
@section('content')
<div class="grid">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="5"
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="10"
data-datatable-state-save="false" id="jenis-laporan-table"
data-api-url="{{ route('basicdata.jenis_laporan.datatables') }}">
<div class="card-header py-5 flex-wrap">

View File

@@ -6,7 +6,7 @@
@section('content')
<div class="grid">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="5" data-datatable-state-save="false" id="jenis-legalitas-jaminan-table" data-api-url="{{ route('basicdata.jenis-legalitas-jaminan.datatables') }}">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="10" data-datatable-state-save="false" id="jenis-legalitas-jaminan-table" data-api-url="{{ route('basicdata.jenis-legalitas-jaminan.datatables') }}">
<div class="card-header py-5 flex-wrap">
<h3 class="card-title">
Daftar Jenis Legalitas Jaminan

View File

@@ -6,7 +6,7 @@
@section('content')
<div class="grid">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="5"
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="10"
data-datatable-state-save="false" id="jenis-penilaian-table"
data-api-url="{{ route('basicdata.jenis-penilaian.datatables') }}">
<div class="card-header py-5 flex-wrap">

View File

@@ -6,7 +6,7 @@
@section('content')
<div class="grid">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="5"
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="10"
data-datatable-state-save="false" id="kjpp-table" data-api-url="{{ route('basicdata.kjpp.datatables') }}">
<div class="card-header py-5 flex-wrap">
<h3 class="card-title">

View File

@@ -7,10 +7,8 @@
@section('content')
<div class="w-full grid gap-5 lg:gap-7.5 mx-auto">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="5"
data-datatable-state-save="false" id="penilai-table" data-api-url="{{ route('penilai.dataForTables') }}">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="10"
data-datatable-state-save="false" id="laporan-table" data-api-url="{{ route('laporan.datatables') }}">
<div class="card-header py-5 flex-wrap">
<h3 class="card-title">
Laporan
@@ -69,7 +67,8 @@
<span class="sort"> <span class="sort-label"> Due Date SLA </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[50px] text-center" data-datatable-column="actions">Action</th>
<th class="min-w-[50px] text-center" data-datatable-column="status">Status</th>
<th class="min-w-[50px] text-center" data-datatable-column="actions">Actions</th>
</tr>
</thead>
</table>
@@ -88,9 +87,124 @@
</div>
</div>
</div>
</div>
</div>
@endsection
@push('scripts')
<script type="module">
const element = document.querySelector('#laporan-table');
const searchInput = document.getElementById('search');
const apiUrl = element.getAttribute('data-api-url');
const dataTableOptions = {
apiEndpoint: apiUrl,
pageSize: 5,
columns: {
select: {
render: (item, data, context) => {
const checkbox = document.createElement('input');
checkbox.className = 'checkbox checkbox-sm';
checkbox.type = 'checkbox';
checkbox.value = data.id.toString();
checkbox.setAttribute('data-datatable-row-check', 'true');
return checkbox.outerHTML.trim();
},
},
nomor_registrasi: {
title: 'Nomor Registrasi',
},
debitur_id: {
title: 'Debitur',
render: (item, data) => {
if (data.debiture) {
return `${data.debiture.name.toUpperCase()}`;
}
return "-";
},
},
branch_id: {
title: 'Cabang Pemohon',
render: (item, data) => {
return `${data.branch.name}`;
},
},
user_id: {
title: 'User Pemohon',
render: (item, data) => {
return `${data.user.name}`;
},
},
tujuan_penilaian_id: {
title: 'Tujuan Penilaian',
render: (item, data) => {
switch (data.tujuan_penilaian.code) {
case "TP0001":
return `<span class="badge badge-sm badge-primary">${data.tujuan_penilaian.name}</span>`;
case "TP0002":
return `<span class="badge badge-sm badge-info">${data.tujuan_penilaian.name}</span>`;
case "TP0003":
return `<span class="badge badge-sm badge-success">${data.tujuan_penilaian.name}</span>`;
case "TP0004":
return `<span class="badge badge-sm badge-danger">${data.tujuan_penilaian.name}</span>`;
case "TP0005":
return `<span class="badge badge-sm badge-warning">${data.tujuan_penilaian.name}</span>`;
case "TP0006":
return `<span class="badge badge-sm badge-dark">${data.tujuan_penilaian.name}</span>`;
case "TP0007":
return `<span class="badge badge-sm badge-outline badge-info">${data.tujuan_penilaian.name}</span>`;
default:
return `<span class="badge badge-sm badge-outline badge-default">${data.tujuan_penilaian.name}</span>`;
}
},
},
jenis_fasilitas_kredit_id:{
title: 'Fasilitas Kredit',
render: (item, data) => {
return `${data.jenis_fasilitas_kredit.name}`;
}
},
tanggal_survei:{
title: 'Tanggal Survei',
render: (item, data) => {
return '-';
}
},
due_date_sla: {
title: 'Due Date SLA',
render: (item, data) => {
return '-';
}
},
status: {
title: 'Status',
render: (item, data) => {
return `<span class="badge badge-sm badge-default uppercase flex justify-center">${data.status}</span>`;
}
},
actions: {
title: 'Actions',
render: (item, data) => {
return `
<a href="" class="btn btn-sm btn-success">
Resume
</a>
<a href="#" class="btn btn-sm btn-dark">
Laporan
</a>
`;
},
}
},
};
let dataTable = new KTDataTable(element, dataTableOptions);
// Custom search functionality
searchInput.addEventListener('input', function () {
const searchValue = this.value.trim();
dataTable.search(searchValue, true);
});
</script>
@endpush

View File

@@ -6,7 +6,7 @@
@section('content')
<div class="grid">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="5" data-datatable-state-save="false" id="nilai-plafond-table" data-api-url="{{ route('basicdata.nilai-plafond.datatables') }}">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="10" data-datatable-state-save="false" id="nilai-plafond-table" data-api-url="{{ route('basicdata.nilai-plafond.datatables') }}">
<div class="card-header py-5 flex-wrap">
<h3 class="card-title">
Daftar Nilai Plafond

View File

@@ -19,7 +19,7 @@
<form action="{{ route('noc.store') }}" method="POST" class="grid gap-5" enctype="multipart/form-data">
@csrf
<input type="hidden" name="penawaran_id" value="{{ $persetujuanPenawaran->penawaran_id ?? old('penawaran_id') }}">
<input type="hidden" name="permohonan_id" value="{{ $persetujuanPenawaran->penawaran->permohonan->id ?? old('permohonan_id') }}">
<input type="hidden" name="permohonan_id" value="{{ $persetujuanPenawaran->penawaran->permohonan->id ?? $persetujuanPenawaran->permohonan->id }}">
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">

View File

@@ -6,7 +6,7 @@
@section('content')
<div class="w-full grid gap-5 lg:gap-7.5 mx-auto">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="5" data-datatable-state-save="false" id="noc-table" data-api-url="{{ route('noc.datatables') }}">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="10" data-datatable-state-save="false" id="noc-table" data-api-url="{{ route('noc.datatables') }}">
<div class="card-header py-5 flex-wrap">
<h3 class="card-title">
Daftar NOC
@@ -66,6 +66,19 @@
</thead>
</table>
</div>
<div
class="card-footer justify-center md:justify-between flex-col md:flex-row gap-3 text-gray-600 text-2sm font-medium">
<div class="flex items-center gap-2">
Show
<select class="select select-sm w-16" data-datatable-size="true" name="perpage"> </select> per
page
</div>
<div class="flex items-center gap-4">
<span data-datatable-info="true"> </span>
<div class="pagination" data-datatable-pagination="true">
</div>
</div>
</div>
</div>
</div>
@endsection
@@ -75,7 +88,7 @@
function prosesData(data) {
Swal.fire({
title: 'NOC',
text: "Apakah Anda yakin ingin menyetujui data penawaran ini?",
text: "Apakah Anda yakin ingin menyetujui pembayaran ini?",
icon: 'info',
showCancelButton: true,
confirmButtonColor: '#3085d6',
@@ -112,29 +125,38 @@
nomor_registrasi: {
title: 'Nomor Registrasi',
render: (item, data) => {
return `${data.penawaran.nomor_registrasi}`;
if(data.permohonan) {
return `${data.permohonan.nomor_registrasi}`;
}
return `${data.penawaran.permohonan.nomor_registrasi}`;
},
},
nama_debitur: {
title: 'Nama Debitur',
render: (item, data) => {
if(data.permohonan) {
return `${data.permohonan.debiture.name}`;
}
return `${data.penawaran.permohonan.debiture.name}`;
},
},
cabang: {
title: 'Cabang',
render: (item, data) => {
if(data.permohonan) {
return `${data.permohonan.branch.name}`;
}
return `${data.penawaran.permohonan.branch.name}`;
},
},
tanggal_setor: {
title: 'Cabang',
title: 'Tanggal Setor',
render: (item, data) => {
return `${window.formatTanggalIndonesia(data.created_at)}`;
},
},
nominal_bayar: {
title: 'Cabang',
title: 'Nominal Bayar',
render: (item, data) => {
return `${window.formatRupiah(data.nominal_bayar)}`;
},
@@ -152,7 +174,7 @@
},
},
tanggal_penyelesaian: {
title: 'Cabang',
title: 'Tanggal Penyelesaian',
render: (item, data) => {
if(data.status==1) {
return `${window.formatTanggalIndonesia(data.updated_at)}`;

View File

@@ -6,7 +6,7 @@
@section('content')
<div class="grid">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="5" data-datatable-state-save="false" id="otorisasipenawaran-table" data-api-url="{{ route('otorisasitender.penawaran.datatables') }}">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="10" data-datatable-state-save="false" id="otorisasipenawaran-table" data-api-url="{{ route('otorisasitender.penawaran.datatables') }}">
<div class="card-header py-5 flex-wrap">
<h3 class="card-title">
Daftar Otorisasi Penawaran

View File

@@ -0,0 +1,80 @@
@extends('layouts.main')
@section('breadcrumbs')
{{ Breadcrumbs::render(request()->route()->getName()) }}
@endsection
@section('content')
<div class="w-full grid gap-5 lg:gap-7.5 mx-auto">
<div class="card pb-2.5">
<div class="card-header">
<h3 class="card-title">Form Pembatalan Permohonan</h3>
<div class="flex items-center gap-2">
<a href="{{ route('pembatalan.index') }}" class="btn btn-xs btn-info"><i class="ki-filled ki-exit-left"></i> Back</a>
</div>
</div>
<div class="card-body">
<form action="{{ route('pembatalan.update', $pembatalan) }}" method="POST" class="grid gap-5">
@method('PUT')
@csrf
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Nomor Registrasi
</label>
<div class="flex flex-wrap items-baseline w-full">
<input type="hidden" name="permohonan_id" value="{{ $pembatalan->permohonan->id }}">
<input type="text" class="input" value="{{ $pembatalan->permohonan->nomor_registrasi ?? '' }}" readonly>
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Nama Debitur
</label>
<div class="flex flex-wrap items-baseline w-full">
<input type="text" class="input" value="{{ $pembatalan->permohonan->debiture->name ?? '' }}" readonly>
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Alasan Pembatalan
</label>
<div class="flex flex-wrap items-baseline w-full">
<textarea readonly class="textarea @error('alasan_pembatalan') border-danger bg-danger-light @enderror"
name="alasan_pembatalan"
rows="4">{{ old('alasan_pembatalan', $pembatalan->alasan_pembatalan ) }}</textarea>
@error('alasan_pembatalan')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Dokumen Pendukung
</label>
<div class="flex flex-wrap items-baseline w-full">
@if($pembatalan->file_pembatalan)
<div class="flex gap-2">
<a href="{{ Storage::url($pembatalan->file_pembatalan) }}" target="_blank" class="btn btn-xs btn-info">
<i class="ki-filled ki-eye"></i> Lihat Dokumen Pendukung
</a>
</div>
@endif
@error('file_pembatalan')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
</div>
</div>
<div class="flex justify-end">
<button type="submit" class="btn btn-primary mr-3" name="status" value="approved">Approve</button>
<button type="submit" class="btn btn-danger" name="status" value="rejected">Reject</button>
</div>
</form>
</div>
</div>
</div>
@endsection

View File

@@ -0,0 +1,185 @@
@extends('layouts.main')
@section('breadcrumbs')
{{ Breadcrumbs::render('pembatalan') }}
@endsection
@section('content')
<div class="w-full grid gap-5 lg:gap-7.5 mx-auto">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="10" data-datatable-state-save="false" id="pembatalan-table" data-api-url="{{ route('pembatalan.datatables') }}">
<div class="card-header py-5 flex-wrap">
<h3 class="card-title">
Daftar Pembatalan Permohonan
</h3>
<div class="flex flex-wrap gap-2 lg:gap-5">
<div class="flex">
<label class="input input-sm"> <i class="ki-filled ki-magnifier"> </i>
<input placeholder="Search Pembatalan Peprmohonan" id="search" type="text" value="">
</label>
</div>
<div class="flex flex-wrap gap-2.5">
<div class="h-[24px] border border-r-gray-200"></div>
<a class="btn btn-sm btn-light" href="#"> Export to Excel </a>
</div>
</div>
</div>
<div class="card-body">
<div class="scrollable-x-auto">
<table class="table table-auto table-border align-middle text-gray-700 font-medium text-sm" data-datatable-table="true">
<thead>
<tr>
<th class="w-14">
<input class="checkbox checkbox-sm" data-datatable-check="true" type="checkbox"/>
</th>
<th class="min-w-[150px]" data-datatable-column="nomor_registrasi">
<span class="sort"> <span class="sort-label"> Nomor Registrasi </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[150px]" data-datatable-column="nama_debitur">
<span class="sort"> <span class="sort-label"> Nama Debitur </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[150px]" data-datatable-column="cabang">
<span class="sort"> <span class="sort-label"> Cabang </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[150px]" data-datatable-column="user_pemohon">
<span class="sort"> <span class="sort-label"> User Pemohon</span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[150px]" data-datatable-column="alasan_pembatalan">
<span class="sort"> <span class="sort-label"> Alasan Pembatalan </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[150px]" data-datatable-column="file_pembatalan">
<span class="sort"> <span class="sort-label"> Dokumen Pendukung </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[150px]" data-datatable-column="status">
<span class="sort"> <span class="sort-label"> Status </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[50px] text-center" data-datatable-column="actions">Action</th>
</tr>
</thead>
</table>
</div>
<div
class="card-footer justify-center md:justify-between flex-col md:flex-row gap-3 text-gray-600 text-2sm font-medium">
<div class="flex items-center gap-2">
Show
<select class="select select-sm w-16" data-datatable-size="true" name="perpage"> </select> per
page
</div>
<div class="flex items-center gap-4">
<span data-datatable-info="true"> </span>
<div class="pagination" data-datatable-pagination="true">
</div>
</div>
</div>
</div>
</div>
@endsection
@push('scripts')
<script type="module">
const element = document.querySelector('#pembatalan-table');
const searchInput = document.getElementById('search');
const apiUrl = element.getAttribute('data-api-url');
const dataTableOptions = {
apiEndpoint: apiUrl,
pageSize: 5,
columns: {
select: {
render: (item, data, context) => {
const checkbox = document.createElement('input');
checkbox.className = 'checkbox checkbox-sm';
checkbox.type = 'checkbox';
checkbox.value = data.id.toString();
checkbox.setAttribute('data-datatable-row-check', 'true');
return checkbox.outerHTML.trim();
},
},
nomor_registrasi: {
title: 'Nomor Registrasi',
render: (item, data) => {
return `${data.permohonan.nomor_registrasi}`;
},
},
nama_debitur: {
title: 'Nama Debitur',
render: (item, data) => {
return `${data.permohonan.debiture.name}`;
},
},
cabang: {
title: 'Cabang',
render: (item, data) => {
return `${data.permohonan.branch.name}`;
},
},
user_pemohon: {
title: 'User Pemohon',
render: (item, data) => {
return `${data.creator.name}`;
},
},
alasan_pembatalan: {
title: 'Alasan Pembatalan'
},
file_pembatalan: {
title: 'Dokumen Pendukung',
render: (item, data) => {
if (data.file_pembatalan) {
return `<a href="storage/${data.file_pembatalan}" download="${data.file_pembatalan}" target="_blank" class="badge badge-sm badge-outline"> Download <i class="ki-filled ki-cloud-download"></i>
</a>`;
} else {
return 'Tidak ada dokumen';
}
}
},
status: {
title: 'Status',
render: (item, data) => {
if (data.status === 'pending') {
return `<span class="badge badge-sm badge-warning flex justify-center">Pending</span>`;
} else if (data.status === 'approved') {
return `<span class="badge badge-sm badge-success flex justify-center">Diterima</span>`;
} else if (data.status === 'rejected') {
return `<span class="badge badge-sm badge-danger flex justify-center">Ditolak</span>`;
}
}
},
actions: {
title: 'Action',
render: (item, data) => {
@if(auth()->user()->roles()->first()->name === "administrator" || auth()->user()->roles()->first()->name === "pemohon-eo")
if (data.status === 'pending') {
return `<div class="flex flex-nowrap justify-center">
<a class="btn btn-sm btn-outline btn-warning" href="pembatalan/${data.id}/edit" title="Detail Pembatalan">
<i class="ki-filled ki-eye"></i>
</a>
</div>`;
} else {
return '';
}
@else
return '';
@endif
},
}
},
};
let dataTable = new KTDataTable(element, dataTableOptions);
// Custom search functionality
searchInput.addEventListener('input', function () {
const searchValue = this.value.trim();
dataTable.search(searchValue, true);
});
</script>
@endpush

View File

@@ -0,0 +1,331 @@
@extends('layouts.main')
@section('breadcrumbs')
{{ Breadcrumbs::render('pembayaran.approval') }}
@endsection
@section('content')
<div class="grid">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="10" data-datatable-state-save="false"
id="pembayaran-table" data-api-url="{{ route('pembayaran.approval.datatables') }}">
<div class="card-header py-5 flex-wrap">
<h3 class="card-title">
Daftar Pembayaran
</h3>
<div class="flex flex-wrap gap-2 lg:gap-5">
<div class="flex">
<label class="input input-sm"> <i class="ki-filled ki-magnifier"> </i>
<input placeholder="Search Pembayaran" id="search" type="text" value="">
</label>
</div>
<div class="flex flex-wrap gap-2.5">
<div class="h-[24px] border border-r-gray-200"></div>
<a class="btn btn-sm btn-light" href="#"> Export to Excel </a>
</div>
</div>
</div>
<div class="card-body">
<div class="scrollable-x-auto">
<table class="table table-auto table-border align-middle text-gray-700 font-medium text-sm"
data-datatable-table="true">
<thead>
<tr>
<th class="w-14">
<input class="checkbox checkbox-sm" data-datatable-check="true" type="checkbox"/>
</th>
<th class="min-w-[150px]" data-datatable-column="nomor_registrasi">
<span class="sort"> <span class="sort-label"> Nomor Registrasi </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[150px]" data-datatable-column="tanggal_permohonan">
<span class="sort"> <span class="sort-label"> Tanggal Permohonan </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[150px]" data-datatable-column="user_id">
<span class="sort"> <span class="sort-label"> User Pemohon </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[150px]" data-datatable-column="branch_id">
<span class="sort"> <span class="sort-label"> Cabang Pemohon </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[150px]" data-datatable-column="debitur_id">
<span class="sort"> <span class="sort-label"> Debitur </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[150px] text-center" data-datatable-column="tujuan_penilaian_id">
<span class="sort"> <span class="sort-label"> Status Bayar </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[150px]" data-datatable-column="tanggal_setor">
<span class="sort"> <span class="sort-label"> Tanggal KSL </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[150px]" data-datatable-column="nominal_bayar">
<span class="sort"> <span class="sort-label"> Nominal bayar </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[150px]" data-datatable-column="bukti_ksl">
<span class="sort"> <span class="sort-label"> Bukti KSL </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[150px]" data-datatable-column="tanggal_penyelesaian">
<span class="sort"> <span class="sort-label"> Tanggal Penyelesaian </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[150px]" data-datatable-column="approval_by">
<span class="sort"> <span class="sort-label"> Approval By </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[50px] text-center" data-datatable-column="actions">Action</th>
</tr>
</thead>
</table>
</div>
<div
class="card-footer justify-center md:justify-between flex-col md:flex-row gap-3 text-gray-600 text-2sm font-medium">
<div class="flex items-center gap-2">
Show
<select class="select select-sm w-16" data-datatable-size="true" name="perpage"> </select> per
page
</div>
<div class="flex items-center gap-4">
<span data-datatable-info="true"> </span>
<div class="pagination" data-datatable-pagination="true">
</div>
</div>
</div>
</div>
</div>
</div>
@endsection
@push('scripts')
<script type="text/javascript">
function pembayaranOtorisator(id) {
// alert('hai id = ' + id);
Swal.fire({
title: 'Apakah Anda yakin?',
text: `Untuk melakukan approve Pembayaran!`,
icon: 'warning',
input: 'textarea', // Menambahkan input textarea
inputLabel: 'Keterangan',
inputPlaceholder: 'Masukkan keterangan...',
inputAttributes: {
'aria-label': 'Masukkan keterangan'
},
showCancelButton: true,
confirmButtonColor: '#3085d6',
cancelButtonColor: '#d33',
confirmButtonText: 'Ya, Lanjutkan!',
cancelButtonText: 'Lain kali',
}).then((result) => {
if (result.isConfirmed) {
let useURL = "{{ URL::to('pembayaran') }}" + "/" + id;
const keterangan = result.value || ''; // Ambil pesan dari textarea
var input_data = new Object();
input_data._method = 'PUT';
input_data.id = id;
input_data.keterangan = keterangan;
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': '{{ csrf_token() }}'
},
});
$.ajax({
url: useURL,
type: 'PUT',
data: input_data,
dataType: "json",
success: (response) => {
if ('success' == response.status) {
Swal.fire('Berhasil!', response.message, 'success').then(() => {
window.location.reload();
});
} else if ('error' == response.status) {
Swal.fire('Error!', response.message, 'error').then(() => {
window.location.reload();
});
}
console.log(response);
},
error: (error) => {
console.error('Error:', error);
Swal.fire('Gagal!', 'Terjadi kesalahan saat melakukan otorisator.',
'error');
}
});
}
});
}
</script>
<script type="module">
const element = document.querySelector('#pembayaran-table');
const searchInput = document.getElementById('search');
const apiUrl = element.getAttribute('data-api-url');
const dataTableOptions = {
apiEndpoint: apiUrl,
pageSize: 5,
columns: {
select: {
render: (item, data, context) => {
const checkbox = document.createElement('input');
checkbox.className = 'checkbox checkbox-sm';
checkbox.type = 'checkbox';
checkbox.value = data.id.toString();
checkbox.setAttribute('data-datatable-row-check', 'true');
return checkbox.outerHTML.trim();
},
},
nomor_registrasi: {
title: 'Nomor Registrasi',
render: (item, data) => {
if (data.permohonan) {
return `${data.permohonan.nomor_registrasi}`;
}
return `${data.penawaran.permohonan.nomor_registrasi}`;
},
},
tanggal_permohonan: {
title: 'Tanggal Permohonan',
render: (item, data) => {
if (data.permohonan) {
return `${data.permohonan.tanggal_permohonan}`;
}
return `${data.penawaran.permohonan.tanggal_permohonan}`;
},
},
user_id: {
title: 'User Pemohon',
render: (item, data) => {
if (data.permohonan) {
return `${data.permohonan.user.name}`;
}
return `${data.penawaran.permohonan.user.name}`;
},
},
branch_id: {
title: 'Cabang Pemohon',
render: (item, data) => {
if (data.permohonan) {
return `${data.permohonan.branch.name}`;
}
return `${data.penawaran.permohonan.branch.name}`;
},
},
debitur_id: {
title: 'Debitur',
render: (item, data) => {
if (data.permohonan) {
return `${data.permohonan.debiture.name}`;
}
return `${data.penawaran.permohonan.debiture.name}`;
},
},
status_bayar: {
title: 'Status Bayar',
render: (item, data) => {
if(data.permohonan){
var permohonan = data.permohonan;
} else {
var permohonan = data.penawaran.permohonan;
}
const status = permohonan.status_bayar.replace(/_/g,
' ');
const statusClass = permohonan.status_bayar === 'belum_bayar' ? 'text-red-600' :
'text-green-600';
return `<span class="text-md font-bold ${statusClass} uppercase">
${status}
</span>`;
},
},
tanggal_setor: {
title: 'Tanggal Setor',
render: (item, data) => {
return `${window.formatTanggalIndonesia(data.created_at)}`;
},
},
nominal_bayar: {
title: 'Nominal Bayar',
render: (item, data) => {
return `${window.formatRupiah(data.nominal_bayar)}`;
},
},
bukti_ksl: {
title: 'Bukti KSL',
render: (item, data) => {
if (data.bukti_ksl) {
return `<a href="storage/${data.bukti_ksl}" download="storage/${data.bukti_ksl}" target="_blank" class="badge badge-sm badge-outline">
Download <i class="ki-filled ki-cloud-download"></i>
</a>`;
} else {
return '-';
}
},
},
tanggal_penyelesaian: {
title: 'Tanggal Penyelesaian',
render: (item, data) => {
if(data.status==1) {
return `${window.formatTanggalIndonesia(data.updated_at)}`;
}
return "-";
},
},
approve_bayar_by: {
title: 'Status Approve',
render: (item, data) => {
if(data.permohonan){
var permohonan = data.permohonan;
} else {
var permohonan = data.penawaran.permohonan;
}
if(permohonan.approve_bayar_by) {
return `${permohonan.approve_bayar.name}`;
}
return "Menunggu Approval";
},
},
actions: {
title: 'Status',
render: (item, data) => {
var iconPembayaranOtorisator = '';
if (!data.approve_bayar_by) {
iconPembayaranOtorisator = `<a class="btn btn-sm btn-icon btn-clear btn-primary " onclick="pembayaranOtorisator(${data.id})">
<i class="ki-filled ki-double-check"></i>
</a>`;
}
return `<div class="flex flex-nowrap justify-center">
<a class="btn btn-sm btn-icon btn-clear btn-warning " href="#">
<i class="ki-outline ki-eye"></i>
</a>`
+ iconPembayaranOtorisator + `
</div>`;
},
}
},
};
let dataTable = new KTDataTable(element, dataTableOptions);
// Custom search functionality
searchInput.addEventListener('input', function () {
const searchValue = this.value.trim();
dataTable.search(searchValue, true);
});
</script>
@endpush

View File

@@ -0,0 +1,108 @@
@extends('layouts.main')
@section('breadcrumbs')
{{ Breadcrumbs::render(request()->route()->getName()) }}
@endsection
@section('content')
<div class="w-full grid gap-5 lg:gap-7.5 mx-auto">
<div class="card pb-2.5">
<div class="card-header" id="basic_settings">
<div class="card-title flex flex-row gap-1.5">
Pembayaran
</div>
<div class="flex items-center gap-2">
<a href="{{ route('pembayaran.index') }}" class="btn btn-xs btn-info"><i class="ki-filled ki-exit-left"></i> Back</a>
</div>
</div>
<div class="card-body">
<form action="{{ route('pembayaran.store') }}" method="POST" class="grid gap-5" enctype="multipart/form-data">
@csrf
<input type="hidden" name="permohonan_id" value="{{ $permohonan->id }}">
<input type="hidden" name="penawaran_id" value="{{ $permohonan->penawaran->id ?? "" }}">
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Nomor Registrasi
</label>
<div class="flex flex-wrap items-baseline w-full">
<input readonly type="text" name="nomor_registrasi" id="nomor_registrasi" class="input w-full @error('nomor_registrasi') border-danger bg-danger-light @enderror" value="{{ old('nomor_registrasi', $permohonan->nomor_registrasi ?? '') }}" placeholder="Nomor Registrasi">
@error('nomor_registrasi')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Debitur
</label>
<div class="flex flex-wrap items-baseline w-full">
<input readonly type="text" name="debitur" id="debitur" class="input w-full @error('debitur') border-danger bg-danger-light @enderror" value="{{ old('debitur', $permohonan->debiture->name ?? '') }}" placeholder="Debitur">
@error('debitur')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5 hidden">
<label class="form-label max-w-56">
Status Bayar
</label>
<div class="flex flex-wrap items-baseline w-full">
<select class="input tomselect w-full @error('status_bayar') border-danger bg-danger-light @enderror" name="status_bayar" id="status_bayar">
<option value="">Pilih Status Bayar</option>
<option value="sudah_bayar" {{ (old('status_bayar') == 'sudah_bayar') || (isset($permohonan) && $permohonan->status_bayar == 'sudah_bayar') ? 'selected' : '' }}>Sudah Bayar</option>
<option value="belum_bayar" {{ (old('status_bayar') == 'belum_bayar') || (isset($permohonan) && $permohonan->status_bayar == 'belum_bayar') ? 'selected' : '' }}>Belum Bayar</option>
</select>
@error('status_bayar')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Nominal Bayar
</label>
<div class="flex flex-wrap items-baseline w-full">
<input type="number" name="nominal_bayar" id="nominal_bayar" class="input w-full @error('nominal_bayar') border-danger bg-danger-light @enderror" value="{{ old('nominal_bayar', $persetujuanPenawaran->nominal_bayar ?? '') }}" placeholder="Masukkan nominal bayar">
@error('nominal_bayar')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Bukti Bayar
</label>
<div class="flex flex-wrap items-baseline w-full">
<input type="file" name="bukti_bayar" id="bukti_bayar" class="file-input w-full @error('bukti_bayar') border-danger bg-danger-light @enderror" accept=".pdf,.jpg,.jpeg,.png">
@error('bukti_bayar')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Catatan
</label>
<div class="flex flex-wrap items-baseline w-full">
<textarea name="catatan" id="catatan" rows="4" class="textarea w-full @error('catatan') border-danger bg-danger-light @enderror" placeholder="Masukkan catatan">{{ old('catatan', $persetujuanPenawaran->catatan ?? '') }}</textarea>
@error('catatan')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
</div>
</div>
<div class="flex justify-end">
<button type="submit" class="btn btn-primary">
Proses
</button>
</div>
</form>
</div>
</div>
</div>
@endsection

View File

@@ -0,0 +1,227 @@
@extends('layouts.main')
@section('breadcrumbs')
{{ Breadcrumbs::render('pembayaran') }}
@endsection
@section('content')
<div class="grid">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="10" data-datatable-state-save="false"
id="pembayaran-table" data-api-url="{{ route('pembayaran.datatables') }}">
<div class="card-header py-5 flex-wrap">
<h3 class="card-title">
Daftar Pembayaran
</h3>
<div class="flex flex-wrap gap-2 lg:gap-5">
<div class="flex">
<label class="input input-sm"> <i class="ki-filled ki-magnifier"> </i>
<input placeholder="Search Pembayaran" id="search" type="text" value="">
</label>
</div>
<div class="flex flex-wrap gap-2.5">
<div class="h-[24px] border border-r-gray-200"></div>
<a class="btn btn-sm btn-light" href="#"> Export to Excel </a>
</div>
</div>
</div>
<div class="card-body">
<div class="scrollable-x-auto">
<table class="table table-auto table-border align-middle text-gray-700 font-medium text-sm"
data-datatable-table="true">
<thead>
<tr>
<th class="w-14">
<input class="checkbox checkbox-sm" data-datatable-check="true" type="checkbox"/>
</th>
<th class="min-w-[150px]" data-datatable-column="nomor_registrasi">
<span class="sort"> <span class="sort-label"> Nomor Registrasi </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[150px]" data-datatable-column="tanggal_permohonan">
<span class="sort"> <span class="sort-label"> Tanggal Permohonan </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[150px]" data-datatable-column="user_id">
<span class="sort"> <span class="sort-label"> User Pemohon </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[150px]" data-datatable-column="branch_id">
<span class="sort"> <span class="sort-label"> Cabang Pemohon </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[150px]" data-datatable-column="debitur_id">
<span class="sort"> <span class="sort-label"> Debitur </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[150px] text-center" data-datatable-column="tujuan_penilaian_id">
<span class="sort"> <span class="sort-label"> Status Bayar </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[50px] text-center" data-datatable-column="actions">Action</th>
</tr>
</thead>
</table>
</div>
<div
class="card-footer justify-center md:justify-between flex-col md:flex-row gap-3 text-gray-600 text-2sm font-medium">
<div class="flex items-center gap-2">
Show
<select class="select select-sm w-16" data-datatable-size="true" name="perpage"> </select> per
page
</div>
<div class="flex items-center gap-4">
<span data-datatable-info="true"> </span>
<div class="pagination" data-datatable-pagination="true">
</div>
</div>
</div>
</div>
</div>
</div>
@endsection
@push('scripts')
<script type="text/javascript">
function pembayaranOtorisator(id) {
// alert('hai id = ' + id);
Swal.fire({
title: 'Apakah Anda yakin?',
text: `Untuk melakukan approve Pembayaran!`,
icon: 'warning',
input: 'textarea', // Menambahkan input textarea
inputLabel: 'Keterangan',
inputPlaceholder: 'Masukkan keterangan...',
inputAttributes: {
'aria-label': 'Masukkan keterangan'
},
showCancelButton: true,
confirmButtonColor: '#3085d6',
cancelButtonColor: '#d33',
confirmButtonText: 'Ya, Lanjutkan!',
cancelButtonText: 'Lain kali',
}).then((result) => {
if (result.isConfirmed) {
let useURL = "{{ URL::to('pembayaran') }}" + "/" + id;
const keterangan = result.value || ''; // Ambil pesan dari textarea
var input_data = new Object();
input_data._method = 'PUT';
input_data.id = id;
input_data.keterangan = keterangan;
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': '{{ csrf_token() }}'
},
});
$.ajax({
url: useURL,
type: 'PUT',
data: input_data,
dataType: "json",
success: (response) => {
if ('success' == response.status) {
Swal.fire('Berhasil!', response.message, 'success').then(() => {
window.location.reload();
});
} else if ('error' == response.status) {
Swal.fire('Error!', response.message, 'error').then(() => {
window.location.reload();
});
}
console.log(response);
},
error: (error) => {
console.error('Error:', error);
Swal.fire('Gagal!', 'Terjadi kesalahan saat melakukan otorisator.',
'error');
}
});
}
});
}
</script>
<script type="module">
const element = document.querySelector('#pembayaran-table');
const searchInput = document.getElementById('search');
const apiUrl = element.getAttribute('data-api-url');
const dataTableOptions = {
apiEndpoint: apiUrl,
pageSize: 5,
columns: {
select: {
render: (item, data, context) => {
const checkbox = document.createElement('input');
checkbox.className = 'checkbox checkbox-sm';
checkbox.type = 'checkbox';
checkbox.value = data.id.toString();
checkbox.setAttribute('data-datatable-row-check', 'true');
return checkbox.outerHTML.trim();
},
},
nomor_registrasi: {
title: 'Nomor Registrasi',
},
tanggal_permohonan: {
title: 'Tanggal Permohonan'
},
user_id: {
title: 'User Pemohon',
render: (item, data) => {
return `${data.user.name}`;
},
},
branch_id: {
title: 'Cabang Pemohon',
render: (item, data) => {
if (data.branch) {
return `${data.branch.name}`;
}
return '-';
},
},
debitur_id: {
title: 'Debitur',
render: (item, data) => {
return `${data.debiture.name}`;
},
},
status_bayar: {
title: 'Status Bayar',
render: (item, data) => {
const status = data.status_bayar.replace(/_/g,
' ');
const statusClass = data.status_bayar === 'belum_bayar' ? 'text-red-600' :
'text-green-600';
return `<span class="text-md font-bold ${statusClass} uppercase">
${status}
</span>`;
},
},
actions: {
title: 'Status',
render: (item, data) => {
return `<div class="flex justify-center gap-2">
<a class="btn btn-icon btn-clear btn-warning " href="pembayaran/${data.id}/edit" title="Lakukan Pembayaran">
<i class="ki-outline ki-credit-cart"></i>
</a>
</div>`;
},
}
},
};
let dataTable = new KTDataTable(element, dataTableOptions);
// Custom search functionality
searchInput.addEventListener('input', function () {
const searchValue = this.value.trim();
dataTable.search(searchValue, true);
});
</script>
@endpush

View File

@@ -7,7 +7,7 @@
@section('content')
<div class="w-full grid gap-5 lg:gap-7.5 mx-auto">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="5"
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="10"
data-datatable-state-save="false" id="penawaran-table" data-api-url="{{ route('tender.penawaran.datatables') }}">
<div class="card-header py-5 flex-wrap" id="basic_settings">
<h3 class="card-title">

View File

@@ -7,7 +7,7 @@
@section('content')
<div class="w-full grid gap-5 lg:gap-7.5 mx-auto">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="5"
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="10"
data-datatable-state-save="false" id="penawaran-table"
data-api-url="{{ route('tender.penawaran.ulang.datatables') }}">
<div class="card-header py-5 flex-wrap" id="basic_settings">

View File

@@ -8,7 +8,7 @@
<div class="w-full grid gap-5 lg:gap-7.5 mx-auto">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="5"
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="10"
data-datatable-state-save="false" id="penilai-table" data-api-url="{{ route('penilai.dataForTables') }}">
<div class="card-header py-5 flex-wrap">
<h3 class="card-title">

View File

@@ -7,7 +7,7 @@
@section('content')
<div class="w-full grid gap-5 lg:gap-7.5 mx-auto">
<div class="card pb-2.5">
<div class=" card-grid min-w-full" data-datatable="false" data-datatable-page-size="5" data-datatable-state-save="false" id="permohonan-table" data-api-url="{{ route('penilaian.datatables') }}">
<div class=" card-grid min-w-full" data-datatable="false" data-datatable-page-size="10" data-datatable-state-save="false" id="permohonan-table" data-api-url="{{ route('penilaian.datatables') }}">
<div class="card-header py-5 flex-wrap">
<h3 class="card-title">
Daftar assignment

View File

@@ -7,7 +7,7 @@
@section('content')
<div class="w-full grid gap-5 lg:gap-7.5 mx-auto">
<div class="card pb-2.5">
<div class=" card-grid min-w-full" data-datatable="false" data-datatable-page-size="5"
<div class=" card-grid min-w-full" data-datatable="false" data-datatable-page-size="10"
data-datatable-state-save="false" id="permohonan-table"
data-api-url="{{ route('otorisator.datatables', ['otorisator' => $header]) }}">
<div class="card-header py-5 flex-wrap">

View File

@@ -15,6 +15,37 @@
@if($permohonan->approval_so)
<div class="card pb-2.5">
<div class="card-header" id="basic_settings">
<h3 class="card-title">
Approval
</h3>
</div>
<div class="card-body">
<table class="table table-border">
<tbody>
<tr>
<td>Diperiksa Oleh</td>
<td>{{ getUser($permohonan->approval_so)->name ?? 'N/A' }}</td>
<td>{{ $permohonan->approval_so_at ? formatTanggalIndonesia($permohonan->approval_so_at,1) : 'N/A' }}</td>
</tr>
<tr>
<td>Disetujui Oleh (EO)</td>
<td>{{ getUser($permohonan->approval_eo)->name ?? 'N/A' }}</td>
<td>{{ $permohonan->approval_eo_at ? formatTanggalIndonesia($permohonan->approval_eo_at,1) : 'N/A' }}</td>
</tr>
<tr>
<td>Disetujui Oleh (DD)</td>
<td>{{ getUser($permohonan->approval_dd)->name ?? 'N/A' }}</td>
<td>{{ $permohonan->approval_dd_at ? formatTanggalIndonesia($permohonan->approval_dd_at,1) : 'N/A' }}</td>
</tr>
</tbody>
</table>
</div>
</div>
@endif
<div>
<div class="flex gap-2.5">
@php

View File

@@ -7,7 +7,7 @@
@section('content')
<div class="w-full grid gap-5 lg:gap-7.5 mx-auto">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="5" data-datatable-state-save="false" id="permohonan-table" data-api-url="{{ route('authorization.datatables') }}">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="10" data-datatable-state-save="false" id="permohonan-table" data-api-url="{{ route('authorization.datatables') }}">
<div class="card-header py-5 flex-wrap">
<h3 class="card-title">
Daftar Permohonan

View File

@@ -6,7 +6,7 @@
@section('content')
<div class="grid">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="5" data-datatable-state-save="false" id="debitur-table" data-api-url="{{ route('debitur.datatables') }}">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="10" data-datatable-state-save="false" id="debitur-table" data-api-url="{{ route('debitur.datatables') }}">
<div class="card-header py-5 flex-wrap">
<h3 class="card-title">
Daftar Debitur

View File

@@ -7,8 +7,8 @@
@section('content')
<div class="w-full grid gap-5 lg:gap-7.5 mx-auto">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="5"
data-datatable-state-save="false" id="permohonan-table" data-api-url="{{ route('permohonan.datatables') }}">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="10"
data-datatable-state-save="false" id="permohonan-table" data-api-url="{{ route('permohonan.datatables') }}">
<div class="card-header py-5 flex-wrap">
<h3 class="card-title">
Daftar Permohonan
@@ -29,46 +29,46 @@
<div class="card-body">
<div class="scrollable-x-auto">
<table class="table table-auto table-border align-middle text-gray-700 font-medium text-sm"
data-datatable-table="true">
data-datatable-table="true">
<thead>
<tr>
<th class="w-14">
<input class="checkbox checkbox-sm" data-datatable-check="true" type="checkbox" />
</th>
<th class="min-w-[150px]" data-datatable-column="nomor_registrasi">
<span class="sort"> <span class="sort-label"> Nomor Registrasi </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[150px]" data-datatable-column="tanggal_permohonan">
<span class="sort"> <span class="sort-label"> Tanggal Permohonan </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[150px]" data-datatable-column="user_id">
<span class="sort"> <span class="sort-label"> User Pemohon </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[150px]" data-datatable-column="branch_id">
<span class="sort"> <span class="sort-label"> Cabang Pemohon </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[150px]" data-datatable-column="debitur_id">
<span class="sort"> <span class="sort-label"> Debitur </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[150px]" data-datatable-column="tujuan_penilaian_id">
<span class="sort"> <span class="sort-label"> Tujuan Penilaian </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[150px]" data-datatable-column="status">
<span class="sort"> <span class="sort-label"> Status </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[150px]" data-datatable-column="keterangan">
<span class="sort"> <span class="sort-label"> Keterangan </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[50px] text-center" data-datatable-column="actions">Action</th>
</tr>
<tr>
<th class="w-14">
<input class="checkbox checkbox-sm" data-datatable-check="true" type="checkbox"/>
</th>
<th class="min-w-[150px]" data-datatable-column="nomor_registrasi">
<span class="sort"> <span class="sort-label"> Nomor Registrasi </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[150px]" data-datatable-column="tanggal_permohonan">
<span class="sort"> <span class="sort-label"> Tanggal Permohonan </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[150px]" data-datatable-column="user_id">
<span class="sort"> <span class="sort-label"> User Pemohon </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[150px]" data-datatable-column="branch_id">
<span class="sort"> <span class="sort-label"> Cabang Pemohon </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[150px]" data-datatable-column="debitur_id">
<span class="sort"> <span class="sort-label"> Debitur </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[150px]" data-datatable-column="tujuan_penilaian_id">
<span class="sort"> <span class="sort-label"> Tujuan Penilaian </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[150px] text-center" data-datatable-column="status">
<span class="sort"> <span class="sort-label"> Status </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[150px]" data-datatable-column="keterangan">
<span class="sort"> <span class="sort-label"> Keterangan </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[50px] text-right" data-datatable-column="actions">Action</th>
</tr>
</thead>
</table>
</div>
@@ -91,15 +91,15 @@
@push('scripts')
<script type="text/javascript">
function deleteData(data) {
function deleteData(data, noReg, debitur) {
Swal.fire({
title: 'Are you sure?',
text: "You won't be able to revert this!",
title: 'Pembatalan Permohonan',
text: "Yakin akan membatalkan permohonan dengan nomor " + noReg + " untuk Debitur " + debitur + "?",
icon: 'warning',
showCancelButton: true,
confirmButtonColor: '#3085d6',
cancelButtonColor: '#d33',
confirmButtonText: 'Yes, delete it!'
confirmButtonText: 'Yes!'
}).then((result) => {
if (result.isConfirmed) {
$.ajaxSetup({
@@ -108,16 +108,7 @@
}
});
$.ajax(`permohonan/${data}`, {
type: 'DELETE'
}).then((response) => {
swal.fire('Deleted!', 'User has been deleted.', 'success').then(() => {
window.location.reload();
});
}).catch((error) => {
console.error('Error:', error);
Swal.fire('Error!', 'An error occurred while deleting the file.', 'error');
});
window.location = `permohonan/${data}/pembatalan`;
}
})
}
@@ -145,7 +136,10 @@
title: 'Nomor Registrasi',
},
tanggal_permohonan: {
title: 'Tanggal Permohonan'
title: 'Tanggal Permohonan',
render: (item, data) => {
return `${window.formatTanggalIndonesia(data.tanggal_permohonan)}`;
},
},
user_id: {
title: 'User Pemohon',
@@ -163,7 +157,7 @@
title: 'Debitur',
render: (item, data) => {
if (data.debiture) {
return `${data.debiture.name}`;
return `${data.debiture.name.toUpperCase()}`;
}
return "-";
},
@@ -171,11 +165,31 @@
tujuan_penilaian_id: {
title: 'Tujuan Penilaian',
render: (item, data) => {
return `${data.tujuan_penilaian.name}`;
switch (data.tujuan_penilaian.code) {
case "TP0001":
return `<span class="badge badge-sm badge-primary">${data.tujuan_penilaian.name}</span>`;
case "TP0002":
return `<span class="badge badge-sm badge-info">${data.tujuan_penilaian.name}</span>`;
case "TP0003":
return `<span class="badge badge-sm badge-success">${data.tujuan_penilaian.name}</span>`;
case "TP0004":
return `<span class="badge badge-sm badge-danger">${data.tujuan_penilaian.name}</span>`;
case "TP0005":
return `<span class="badge badge-sm badge-warning">${data.tujuan_penilaian.name}</span>`;
case "TP0006":
return `<span class="badge badge-sm badge-dark">${data.tujuan_penilaian.name}</span>`;
case "TP0007":
return `<span class="badge badge-sm badge-outline badge-info">${data.tujuan_penilaian.name}</span>`;
default:
return `<span class="badge badge-sm badge-outline badge-default">${data.tujuan_penilaian.name}</span>`;
}
},
},
status: {
title: 'Status'
title: 'Status',
render: (item, data) => {
return `<span class="badge badge-sm badge-default uppercase flex justify-center">${data.status}</span>`;
}
},
keterangan: {
title: 'Keterangan'
@@ -183,7 +197,7 @@
actions: {
title: 'Actions',
render: (item, data) => {
let actionHtml = `<div class="flex flex-nowrap justify-center gap-1.5">`;
let actionHtml = `<div class="flex flex-nowrap justify-end gap-1.5">`;
if (data && data.penilaian && data.penilaian.waktu_penilaian !== null && data.status !==
'done' && data.penilaian.authorized_status == null) {
@@ -205,11 +219,14 @@
actionHtml += `
<a class="btn btn-sm btn-outline btn-info" href="permohonan/${data.id}/edit" title="Edit Permohonan">
<i class="ki-outline ki-notepad-edit"></i>
</a>
<a onclick="deleteData(${data.id})" class="delete btn btn-sm btn-outline btn-danger" title="Hapus Permohonan">
<i class="ki-outline ki-trash"></i>
</a>
</div>`;
</a>`;
if(data.status !== 'batal') {
actionHtml += `
<a onclick="deleteData(${data.id}, '${data.nomor_registrasi}','${data.debiture.name}')" class="delete btn btn-sm btn-outline btn-danger" title="Batalkan Permohonan">
<i class="ki-outline ki-cross-square"></i>
</a>`;
}
actionHtml += `</div>`;
return actionHtml;
},
@@ -219,7 +236,7 @@
let dataTable = new KTDataTable(element, dataTableOptions);
// Custom search functionality
searchInput.addEventListener('input', function() {
searchInput.addEventListener('input', function () {
const searchValue = this.value.trim();
dataTable.search(searchValue, true);
@@ -253,19 +270,19 @@
cache: false,
data: input_data,
dataType: "json",
success: function(response) {
success: function (response) {
console.log(response);
if ('success' == response.status) {
swal.fire('Sukses Menyetujui!', response.message, 'success').then(
() => {
location.reload(true);
});
() => {
location.reload(true);
});
} else {
Swal.fire('Error!', response.message, 'error');
}
},
error: function(response, textStatus, errorThrown) {
error: function (response, textStatus, errorThrown) {
// var errors = response.responseJSON.errors;
// console.log(errors);
console.log(response);

View File

@@ -0,0 +1,73 @@
@extends('layouts.main')
@section('breadcrumbs')
{{ Breadcrumbs::render(request()->route()->getName()) }}
@endsection
@section('content')
<div class="w-full grid gap-5 lg:gap-7.5 mx-auto">
<div class="card pb-2.5">
<div class="card-header">
<h3 class="card-title">Form Pembatalan Permohonan</h3>
<div class="flex items-center gap-2">
<a href="{{ route('permohonan.index') }}" class="btn btn-xs btn-info"><i class="ki-filled ki-exit-left"></i> Back</a>
</div>
</div>
<div class="card-body">
<form action="{{ route('permohonan.pembatalan', $permohonan) }}" method="POST" class="grid gap-5" enctype="multipart/form-data">
@csrf
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Nomor Registrasi
</label>
<div class="flex flex-wrap items-baseline w-full">
<input type="hidden" name="permohonan_id" value="{{ $permohonan->id }}">
<input type="text" class="input" value="{{ $permohonan->nomor_registrasi ?? '' }}" readonly>
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Nama Debitur
</label>
<div class="flex flex-wrap items-baseline w-full">
<input type="text" class="input" value="{{ $permohonan->debiture->name ?? '' }}" readonly>
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Alasan Pembatalan
</label>
<div class="flex flex-wrap items-baseline w-full">
<textarea class="textarea @error('alasan_pembatalan') border-danger bg-danger-light @enderror"
name="alasan_pembatalan"
rows="4">{{ old('alasan_pembatalan') }}</textarea>
@error('alasan_pembatalan')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Dokumen Pendukung
</label>
<div class="flex flex-wrap items-baseline w-full">
<input type="file" class="file-input @error('file_pembatalan') border-danger bg-danger-light @enderror"
name="file_pembatalan">
@error('file_pembatalan')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
</div>
</div>
<div class="flex justify-end">
<button type="submit" class="btn btn-primary">Submit Pembatalan</button>
</div>
</form>
</div>
</div>
</div>
@endsection

View File

@@ -25,7 +25,7 @@
<input type="hidden" name="biaya_final" value="{{ $permohonan->penawaran->detail->biaya_penawaran ?? old('biaya_final') }}">
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5 hidden">
<label class="form-label max-w-56">
Status Bayar
</label>

View File

@@ -6,7 +6,7 @@
@section('content')
<div class="w-full grid gap-5 lg:gap-7.5 mx-auto">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="5" data-datatable-state-save="false" id="persetujuan-penawaran-table" data-api-url="{{ route('persetujuan-penawaran.datatables') }}">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="10" data-datatable-state-save="false" id="persetujuan-penawaran-table" data-api-url="{{ route('persetujuan-penawaran.datatables') }}">
<div class="card-header py-5 flex-wrap">
<h3 class="card-title">
Daftar Persetujuan Penawaran
@@ -70,6 +70,19 @@
</thead>
</table>
</div>
<div
class="card-footer justify-center md:justify-between flex-col md:flex-row gap-3 text-gray-600 text-2sm font-medium">
<div class="flex items-center gap-2">
Show
<select class="select select-sm w-16" data-datatable-size="true" name="perpage"> </select> per
page
</div>
<div class="flex items-center gap-4">
<span data-datatable-info="true"> </span>
<div class="pagination" data-datatable-pagination="true">
</div>
</div>
</div>
</div>
</div>
@endsection

View File

@@ -6,7 +6,7 @@
@section('content')
<div class="grid">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="5"
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="10"
data-datatable-state-save="false" id="prosespenawaran-table"
data-api-url="{{ route('tender.prosespenawaran.datatables') }}">
<div class="card-header py-5 flex-wrap">
@@ -42,7 +42,7 @@
<span class="sort"> <span class="sort-label"> Nomor Penawaran</span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[150px]" data-datatable-column="tanggal_permohonan">
<span class="sort"> <span class="sort-label"> Tanggal Permohonan </span>
<span class="sort-icon"> </span> </span>
@@ -107,7 +107,7 @@
var url = "{{ url('tender/prosespenawaran') }}/" + regId + "/showPermohonan";
$(location).attr('href', url);
}
function showPenawaranData(regId) {
var url = "{{ url('tender/prosespenawaran') }}/" + regId;
$(location).attr('href', url);
@@ -186,7 +186,7 @@
actions: {
title: 'Status',
render: (item, data) => {
var iconProses ='';
var iconDetail =`<a onclick="showPenawaranData(${data.id})" class="btn btn-sm btn-icon btn-clear btn-primary" title="Detail">
<i class="ki-outline ki-eye"></i>
@@ -200,14 +200,14 @@
iconDetail=`<a onclick="showPermohonanData(${data.id})" class="btn btn-sm btn-icon btn-clear btn-primary" title="Detail">
<i class="ki-outline ki-eye"></i>
</a>`;
}
}
else if('tender'==data.statusnya)
{
// data.id ==> penawaran.id
iconProses=`<a class="btn btn-sm btn-icon btn-clear btn-info" title="Proses Penawaran" href="tender/prosespenawaran/${data.id}/edit">
<i class="ki-outline ki-notepad-edit"></i>
</a>`;
}
}
else if('proposal-tender'==data.statusnya)
{
// data.id ==> penawaran.id

View File

@@ -6,7 +6,7 @@
@section('content')
<div class="grid">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="5" data-datatable-state-save="false" id="prosespenawaranulang-table" data-api-url="{{ route('tender.prosespenawaranulang.datatables') }}">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="10" data-datatable-state-save="false" id="prosespenawaranulang-table" data-api-url="{{ route('tender.prosespenawaranulang.datatables') }}">
<div class="card-header py-5 flex-wrap">
<h3 class="card-title">
Daftar Proses Penawaran Ulang

View File

@@ -6,7 +6,7 @@
@section('content')
<div class="grid">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="5" data-datatable-state-save="false" id="region-table" data-api-url="{{ route('basicdata.region.datatables') }}">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="10" data-datatable-state-save="false" id="region-table" data-api-url="{{ route('basicdata.region.datatables') }}">
<div class="card-header py-5 flex-wrap">
<h3 class="card-title">
Daftar Region

View File

@@ -6,7 +6,7 @@
@section('content')
<div class="grid">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="5" data-datatable-state-save="false" id="registrasi-table" data-api-url="{{ route('registrasi.datatables') }}">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="10" data-datatable-state-save="false" id="registrasi-table" data-api-url="{{ route('registrasi.datatables') }}">
<div class="card-header py-5 flex-wrap">
<h3 class="card-title">
Daftar Registrasi

View File

@@ -6,7 +6,7 @@
@section('content')
<div class="grid">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="5" data-datatable-state-save="false" id="registrasifinal-table" data-api-url="{{ route('registrasifinal.datatables') }}">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="10" data-datatable-state-save="false" id="registrasifinal-table" data-api-url="{{ route('registrasifinal.datatables') }}">
<div class="card-header py-5 flex-wrap">
<h3 class="card-title">
Daftar Registrasi Final

View File

@@ -25,7 +25,7 @@
}
</style>
<div class="grid">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="5" data-datatable-state-save="false" id="tujuan-penilaian-table" data-api-url="{{ route('basicdata.tujuan-penilaian.datatables') }}">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="10" data-datatable-state-save="false" id="tujuan-penilaian-table" data-api-url="{{ route('basicdata.tujuan-penilaian.datatables') }}">
<div class="card-header py-5 flex-wrap">
<h3 class="card-title">Buat SPK</h3>
<div class="flex items-center gap-2">
@@ -100,7 +100,7 @@
<span style="color: red;">{{ $penawaran->jenis_laporan_name }}</span>
</td>
</tr>
@php $i=1; @endphp
@php $i=1; @endphp
@foreach ($data->debiture->documents as $dokumen)
<tr valign="top">
<td>Lokasi Jaminan {{ $i }}</td>
@@ -117,17 +117,17 @@
@foreach ($data->dokumenjaminan as $dokumen_jaminans)
@if ($dokumen->id== $dokumen_jaminans->id)
@php $details = $dokumen_jaminans->detail; @endphp
@foreach ($details as $index => $detailku)
@foreach ($details as $index => $detailku)
{{ $detailku->name }}{{ $index === count($details) - 1 ? '' : ', ' }}
@endforeach
@endif
@endforeach
@endforeach
@endif
@endforeach
</span>
</td>
</tr>
@php $i++; @endphp
@endforeach
@php $i++; @endphp
@endforeach
<tr>
<td>Fee / Harga Penilaian</td>
<td>:</td>

View File

@@ -6,7 +6,7 @@
@section('content')
<div class="grid">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="5" data-datatable-state-save="false" id="spk-table" data-api-url="{{ route('spk.datatables') }}">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="10" data-datatable-state-save="false" id="spk-table" data-api-url="{{ route('spk.datatables') }}">
<div class="card-header py-5 flex-wrap">
<h3 class="card-title">
Daftar SPK
@@ -126,12 +126,15 @@
},
'nomor_registrasi': {
title: 'Nomor Registrasi',
render: (item, data) => {
return `${data.permohonan.nomor_registrasi}`;
},
},
code: {
title: 'Nomor Penawaran',
render: (item, data) => {
if(data.penawaran) {
return `${data.penawaran.code}`;
if(data.code) {
return `${data.code}`;
}
return '-';
@@ -139,24 +142,27 @@
},
tanggal_permohonan: {
title: 'Tanggal Permohonan',
render: (item, data) => {
return `${data.permohonan.tanggal_permohonan}`;
},
},
user_id: {
title: 'User Pemohon',
render: (item, data) => {
return `${data.user.name}`;
return `${data.permohonan.user.name}`;
},
},
branch_id: {
title: 'Cabang Pemohon',
render: (item, data) => {
return `${data.branch.name}`;
return `${data.permohonan.branch.name}`;
},
},
debitur_id: {
title: 'Debitur',
render: (item, data) => {
if (data.debiture) {
return `${data.debiture.name}`;
if (data.permohonan.debiture) {
return `${data.permohonan.debiture.name}`;
}
return "-";
},
@@ -167,14 +173,14 @@
tujuan_penilaian_id: {
title: 'Tujuan Penilaian',
render: (item, data) => {
return `${data.tujuan_penilaian.name}`;
return `${data.permohonan.tujuan_penilaian.name}`;
},
},
tujuan_penilaian_kjpp_id: {
title: 'Tujuan Penilaian KJPP',
render: (item, data) => {
if(data.penawaran.tujuan_penilaian_kjpp) {
return `${data.penawaran.tujuan_penilaian_kjpp.name}`;
if(data.tujuan_penilaian_kjpp) {
return `${data.tujuan_penilaian_kjpp.name}`;
}
return '-';
@@ -183,15 +189,15 @@
kjpp_data: {
title: 'Nama KJPP Terpilih',
render: (item, data) => {
return `${data.penawaran.nama_kjpp_sebelumnya}`+'<br />'
+`${data.penawaran.biaya_kjpp_sebelumnya}`+'<br /> '
+`${data.penawaran.tanggal_penilaian_sebelumnya}`;
return `${data.nama_kjpp_sebelumnya}`+'<br />'
+`${data.biaya_kjpp_sebelumnya}`+'<br /> '
+`${data.tanggal_penilaian_sebelumnya}`;
},
},
status: {
title: 'Status',
render: (item, data) => {
return `${data.penawaran.status}`.toUpperCase();
return `${data.status}`.toUpperCase();
},
},
actions: {
@@ -199,9 +205,9 @@
render: (item, data) => {
var spkShow ='';
var spkCreate='';
if(!data.penawaran.spk_dokumen_path)
if(!data.spk_dokumen_path)
{
spkCreate=`<a class="btn btn-sm btn-icon btn-clear btn-info" title="Buat SPK" onclick="spkCreate(${data.penawaran.id})" >
spkCreate=`<a class="btn btn-sm btn-icon btn-clear btn-info" title="Buat SPK" onclick="spkCreate(${data.id})" >
<i class="ki-outline ki-notepad-edit"></i>
</a>`;
}
@@ -211,9 +217,11 @@
<a href="/spk/${data.id}/download" class="btn btn-sm btn-icon btn-clear btn-primary" title="Download SPK">
<i class="ki-filled ki-cloud-download"></i>
</a> `;
spkCreate=`<a class="btn btn-sm btn-icon btn-clear btn-info" title="Buat SPK" onclick="spkCreate(${data.penawaran.id})" >
if(data.status==='spk') {
spkCreate = `<a class="btn btn-sm btn-icon btn-clear btn-info" title="Buat SPK" onclick="spkCreate(${data.id})" >
<i class="ki-outline ki-notepad-edit"></i>
</a>`;
}
}
return `<div class="flex flex-nowrap justify-center">`

View File

@@ -6,7 +6,7 @@
@section('content')
<div class="grid">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="5" data-datatable-state-save="false" id="tujuan-penilaian-table" data-api-url="{{ route('basicdata.tujuan-penilaian.datatables') }}">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="10" data-datatable-state-save="false" id="tujuan-penilaian-table" data-api-url="{{ route('basicdata.tujuan-penilaian.datatables') }}">
<div class="card-header py-5 flex-wrap">
<h3 class="card-title">
SPK View

View File

@@ -6,7 +6,7 @@
@section('content')
<div class="grid">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="5" data-datatable-state-save="false" id="status-permohonan-table" data-api-url="{{ route('basicdata.status-permohonan.datatables') }}">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="10" data-datatable-state-save="false" id="status-permohonan-table" data-api-url="{{ route('basicdata.status-permohonan.datatables') }}">
<div class="card-header py-5 flex-wrap">
<h3 class="card-title">
Daftar Status Permohonan

View File

@@ -7,7 +7,7 @@
@section('content')
<div class="w-full grid gap-5 lg:gap-7.5">
<div class="grid gap-5">
<div class="card-grid min-w-full" data-datatable="false" data-datatable-page-size="5"
<div class="card-grid min-w-full" data-datatable="false" data-datatable-page-size="10"
data-datatable-state-save="false" id="data-table" data-api-url="">
<form id="dataPembandingForm" method="POST" enctype="multipart/form-data">

View File

@@ -6,7 +6,7 @@
@section('content')
<div class="grid">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="5" data-datatable-state-save="false" id="data-table" data-api-url="{{ route('basicdata.datatablesSurveyory', ['type' => $header[0] ]) }}">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="10" data-datatable-state-save="false" id="data-table" data-api-url="{{ route('basicdata.datatablesSurveyory', ['type' => $header[0] ]) }}">
<div class="card-header py-5 flex-wrap">
<h3 class="card-title">
Daftar {{$header[0]}}

View File

@@ -8,7 +8,7 @@
@endpush
<div class="w-full grid gap-5 lg:gap-7.5 mx-auto">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="5"
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="10"
data-datatable-state-save="false" id="permohonan-table" data-api-url="{{ route('surveyor.datatables') }}">
<div class="card-header py-5 flex-wrap">
<h3 class="card-title">

View File

@@ -6,7 +6,7 @@
@section('content')
<div class="grid">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="5"
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="10"
data-datatable-state-save="false" id="teams-table" data-api-url="{{ route('basicdata.teams.datatables') }}">
<div class="card-header py-5 flex-wrap">
<h3 class="card-title">

View File

@@ -6,7 +6,7 @@
@section('content')
<div class="grid">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="5" data-datatable-state-save="false" id="tujuan-penilaian-table" data-api-url="{{ route('basicdata.tujuan-penilaian.datatables') }}">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="10" data-datatable-state-save="false" id="tujuan-penilaian-table" data-api-url="{{ route('basicdata.tujuan-penilaian.datatables') }}">
<div class="card-header py-5 flex-wrap">
<h3 class="card-title">
Daftar Tujuan Penilaian

View File

@@ -6,7 +6,7 @@
@section('content')
<div class="grid">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="5"
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="10"
data-datatable-state-save="false" id="tujuan-penilaian-kjpp"
data-api-url="{{ route('basicdata.tujuan_penilaian_kjpp.datatables') }}">
<div class="card-header py-5 flex-wrap">

View File

@@ -298,6 +298,20 @@
$trail->push('Data Permohonan');
});
Breadcrumbs::for('permohonan.show-pembatalan', function (BreadcrumbTrail $trail) {
$trail->parent('permohonan.index');
$trail->push('Show Pembatalan Permohonan');
});
Breadcrumbs::for('pembatalan', function (BreadcrumbTrail $trail) {
$trail->push('Pembatalan', route('pembatalan.index'));
});
Breadcrumbs::for('pembatalan.edit', function (BreadcrumbTrail $trail) {
$trail->parent('pembatalan');
$trail->push('Show Pembatalan');
});
Breadcrumbs::for('basicdata.region', function (BreadcrumbTrail $trail) {
$trail->parent('basicdata');
$trail->push('Region', route('basicdata.region.index'));

View File

@@ -103,3 +103,19 @@ Breadcrumbs::for('registrasifinal.edit', function (BreadcrumbTrail $trail) {
$trail->push('Tambah Registrasi Final');
});
// registrasi final
// pembayaran
Breadcrumbs::for('pembayaran', function (BreadcrumbTrail $trail) {
$trail->push('Pembayaran', route('pembayaran.index'));
});
Breadcrumbs::for('pembayaran.edit', function (BreadcrumbTrail $trail) {
$trail->parent('pembayaran');
$trail->push('Lakukan Pembayaran');
});
Breadcrumbs::for('pembayaran.approval', function (BreadcrumbTrail $trail) {
$trail->parent('pembayaran');
$trail->push('Approval Pembayaran');
});
// pembayaran

View File

@@ -7,6 +7,7 @@ use Modules\Lpj\Http\Controllers\ProsesPenawaranController;
use Modules\Lpj\Http\Controllers\RegistrasiFinalController;
use Modules\Lpj\Http\Controllers\OtorisasiPenawaranController;
use Modules\Lpj\Http\Controllers\ProsesPenawaranUlangController;
use Modules\Lpj\Http\Controllers\PembayaranController;
Route::middleware(['auth'])->group(function () {
@@ -59,12 +60,12 @@ Route::middleware(['auth'])->group(function () {
Route::post('prosespenawaran/setDataUlang', 'setDataUlang')->name('prosespenawaran.setDataUlang');
Route::put('/prosespenawaran2/{prosespenawaran2}', 'updateulang')->name('prosespenawaran.updateulang');
Route::put('/prosespenawaranKJPPStatusUlang/{prosespenawaranKJPPStatusUlang}', 'updateKJPPStatusUlang')->name('prosespenawaran.updateKJPPStatusUlang');
// merger penawaran
// merger penawaran
Route::get('/prosespenawaran/{prosespenawaran}/showPermohonan', 'showPermohonan')->name('prosespenawaran.showPermohonan');
Route::get('prosespenawaran/{prosespenawaran}/createPenawaran', 'createPenawaran')->name('prosespenawaran.createPenawaran');
Route::post('prosespenawaran/{prosespenawaran}/storePenawaran', 'storePenawaran')->name('prosespenawaran.storePenawaran');
// merger penawaran
// merger penawaran
});
// Proses Penawaran Ulang
@@ -96,7 +97,7 @@ Route::middleware(['auth'])->group(function () {
// update KJPP data, detail penawaran
Route::put('/otorisasiPenawaranKJPP/{penawaran}', 'otorisasiPenawaranKJPP')->name('penawaran.otorisasiPenawaranKJPP');
// revisi penawaran ulang
Route::put('/penawaranulang/{penawaranulang}', 'penawaranulang')->name('penawaran.penawaranulang');
});
@@ -124,4 +125,16 @@ Route::middleware(['auth'])->group(function () {
Route::get('/registrasifinal/{registrasifinal}/edit', 'edit')->name('registrasifinal.edit');
Route::put('/registrasifinal/{registrasifinal}', 'update')->name('registrasifinal.update');
});
Route::controller(PembayaranController::class)->group(function () {
Route::get('/pembayaran', 'index')->name('pembayaran.index');
Route::get('/pembayaran/{pembayaran}/edit', 'edit')->name('pembayaran.edit');
Route::post('pembayaran','store')->name('pembayaran.store');
Route::get('/pembayaran/datatables', 'dataForDatatables')->name('pembayaran.datatables');
Route::put('/pembayaran/{pembayaran}', 'update')->name('pembayaran.update');
Route::get('/pembayaran/approval', 'approval')->name('pembayaran.approval.index');
Route::get('/pembayaran/datatables-approval', 'dataApprovalForDatatables')->name('pembayaran.approval.datatables');
});
});

View File

@@ -18,6 +18,7 @@ use Modules\Lpj\Http\Controllers\KJPPController;
use Modules\Lpj\Http\Controllers\LaporanController;
use Modules\Lpj\Http\Controllers\NilaiPlafondController;
use Modules\Lpj\Http\Controllers\NocController;
use Modules\Lpj\Http\Controllers\PembatalanController;
use Modules\Lpj\Http\Controllers\PemilikJaminanController;
use Modules\Lpj\Http\Controllers\PenilaianController;
use Modules\Lpj\Http\Controllers\PenilaiController;
@@ -348,6 +349,10 @@ Route::middleware(['auth'])->group(function () {
});
Route::resource('debitur', DebitureController::class);
Route::name('laporan.')->prefix('laporan')->group(function () {
Route::get('datatables', [LaporanController::class, 'dataForDatatables'])->name('datatables');
});
Route::resource('laporan', LaporanController::class);
@@ -367,9 +372,16 @@ Route::middleware(['auth'])->group(function () {
});
Route::get('authorization', [PermohonanController::class, 'authorization'])->name('authorization.index');
Route::get('permohonan/{id}/pembatalan', [PermohonanController::class, 'showPembatalan'])->name('permohonan.show-pembatalan');
Route::post('permohonan/pembatalan', [PermohonanController::class, 'pembatalan'])->name('permohonan.pembatalan');
Route::resource('permohonan', PermohonanController::class);
Route::name('pembatalan.')->prefix('pembatalan')->group(function () {
Route::get('datatables', [PembatalanController::class, 'dataForDatatables'])->name('datatables');
});
Route::resource('pembatalan', PembatalanController::class);
Route::get('authorization', [PermohonanController::class, 'authorization'])->name('authorization.index');
Route::get('authorization/datatables', [PermohonanController::class, 'dataForAuthorization'])->name(
'authorization.datatables',