This commit is contained in:
2024-11-08 17:38:47 +07:00
150 changed files with 11011 additions and 2642 deletions

View File

@@ -35,28 +35,41 @@ class ActivityController extends Controller
// Ambil user yang sedang login
$user = auth()->user();
$roles = $user->load('roles');
$regionId = null;
// Cek apakah user memiliki role 'senior officer'
if ($roles->roles->pluck('name')->contains('senior officer')) {
$regionId = TeamsUsers::with('team.regions')
// Inisialisasi regionId dan teamId sebagai null agar bisa dinamis
$regionId = null;
$teamId = null;
if ($roles->roles->pluck('name')->contains('senior-officer')) {
$userTeam = TeamsUsers::with('team')
->where('user_id', $user->id)
->first()?->team->regions_id;
->first();
$regionId = $userTeam?->team->regions_id;
$teamId = $userTeam?->teams_id;
}
$teamsActivity = TeamsUsers::with(['user', 'team', 'team.regions'])
->whereHas('team', function ($q) use ($regionId) {
$teamsActivity = TeamsUsers::with(['user', 'team', 'team.regions', 'user.roles'])
->whereHas('team', function ($q) use ($regionId, $teamId) {
if ($regionId) {
$q->where('regions_id', $regionId);
}
if ($teamId) {
$q->where('id', $teamId); // Hanya tim yang sama
}
})
->where('user_id', '!=', $user->id)
->whereHas('user.roles', function ($query) {
// Filter hanya peran 'surveyor' atau 'surveyor-penilai'
$query->whereIn('name', ['surveyor', 'surveyor-penilai']);
})
->get();
return view('lpj::activity.progres_activity.index', compact('teamsActivity'));
}
public function senior()
{
return view('lpj::activity.senior_officer.index');
@@ -106,6 +119,10 @@ class ActivityController extends Controller
* Update the specified resource in storage.
*/public function dataForDatatables(Request $request)
{
$user = auth()->user();
// Check permissions
if (is_null($this->user) || !$this->user->can('debitur.view')) {
// abort(403, 'Sorry! You are not allowed to view users.');
@@ -157,7 +174,23 @@ class ActivityController extends Controller
$filteredRecords = $query->count();
// Get data
$data = $query->with(['user', 'debiture', 'branch', 'tujuanPenilaian'])->get();
$data = null;
$userRole = $user->roles[0]->name ?? null;
if (in_array($userRole, ['surveyor', 'surveyor-penilai'])) {
$data = $query->with(['user', 'debiture', 'branch', 'tujuanPenilaian', 'penilaian',])
->whereHas('penilaian.userPenilai', function ($q) use ($user) {
$q->where('user_id', $user->id);
})
->get();
} else {
$data = $query->with(['user', 'debiture', 'branch', 'tujuanPenilaian'])
->get();
}
// Calculate total pages
$pageCount = ceil($totalRecords / $request->get('size', 10));
@@ -194,13 +227,23 @@ class ActivityController extends Controller
public function dataTablesForActivity(Request $request, $id)
{
if (is_null($this->user) || !$this->user->can('debitur.view')) {
// abort(403, 'Sorry! You are not allowed to view users.');
}
// Query Penilaian dengan relasi yang diperlukan
$query = Penilaian::with(['permohonan', 'permohonan.debiture', 'permohonan.tujuanPenilaian'])
->where(function($q) use ($id) {
$q->where('surveyor_id', $id)
->orWhere('penilaian_id', $id)
->orWhere('penilai_surveyor_id', $id);
});
$query = Penilaian::with([
'permohonan',
'permohonan.debiture',
'permohonan.tujuanPenilaian',
'permohonan.debiture.documents.jenisJaminan',
'userPenilai'
])
->whereHas('userPenilai', function ($q) use ($id) {
$q->where('user_id', $id);
});
// Filter pencarian
if ($request->has('search') && !empty($request->get('search'))) {

View File

@@ -4,6 +4,8 @@
use App\Http\Controllers\Controller;
use Exception;
use Illuminate\Http\JsonResponse;
use Illuminate\Support\Collection;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Storage;
use Modules\Location\Models\City;
@@ -14,6 +16,7 @@
use Modules\Lpj\Models\Debiture;
use Modules\Lpj\Models\DetailDokumenJaminan;
use Modules\Lpj\Models\DokumenJaminan;
use Modules\Lpj\Models\HubunganPemilikJaminan;
use Modules\Lpj\Models\JenisJaminan;
use Modules\Lpj\Models\JenisLegalitasJaminan;
use Modules\Lpj\Models\PemilikJaminan;
@@ -69,44 +72,41 @@
$document = DokumenJaminan::create($validate);
try {
foreach ($request->dokumen_jaminan as $key => $value) {
$file_name = $value->getClientOriginalName();
if ($request->jenis_legalitas_jaminan_id) {
foreach ($request->jenis_legalitas_jaminan_id as $key => $value) {
$detailData = [
'dokumen_jaminan_id' => $document->id,
'jenis_legalitas_jaminan_id' => $value,
'name' => $request->name[$key],
'keterangan' => $request->keterangan[$key],
];
if ($file_name) {
try {
$file_name = $value->getClientOriginalName();
$value->storeAs(
'public/jaminan/' . $debitur->id . '/' . $document->id . '/',
$file_name,
);
$detail = [
'dokumen_jaminan_id' => $document->id,
'jenis_legalitas_jaminan_id' => $request->jenis_legalitas_jaminan_id[$key],
'dokumen_jaminan' => 'jaminan/' . $debitur->id . '/' . $document->id . '/' . $file_name,
'name' => $request->name[$key],
'keterangan' => $request->keterangan[$key],
];
DetailDokumenJaminan::create($detail);
} catch (Exception $e) {
DB::rollBack();
return redirect()->route('debitur.jaminan.index', $id)->with(
'error',
'Gagal upload file dokumen jaminan ' . $key . ': ' . $e->getMessage(),
);
$dokumenJaminan = [];
$dokumenNomor = [];
if (isset($request->dokumen_jaminan[$key]) && is_array($request->dokumen_jaminan[$key])) {
foreach ($request->dokumen_jaminan[$key] as $index => $file) {
if ($file) {
$file_name = $file->getClientOriginalName();
$file->storeAs(
'public/jaminan/' . $debitur->id . '/' . $document->id . '/',
$file_name,
);
$dokumenJaminan[] = 'jaminan/' . $debitur->id . '/' . $document->id . '/' . $file_name;
$dokumenNomor[] = $request->dokumen_nomor[$key][$index] ?? '';
}
}
}
if (!empty($dokumenJaminan)) {
$detailData['dokumen_jaminan'] = json_encode($dokumenJaminan);
$detailData['dokumen_nomor'] = json_encode($dokumenNomor);
}
DetailDokumenJaminan::create($detailData);
}
DB::commit();
} catch (Exception $e) {
DB::rollBack();
return redirect()->route('debitur.jaminan.index', $id)->with(
'error',
'gg' . $e->getMessage(),
);
}
DB::commit();
return redirect()->route('debitur.jaminan.index', $id)->with(
'success',
'Dokumen Jaminan berhasil ditambahkan',
@@ -125,10 +125,18 @@
$jenisJaminan = JenisJaminan::all();
$jenisLegalitasJaminan = JenisLegalitasJaminan::all();
$pemilikJaminan = PemilikJaminan::where('debiture_id', $id)->get();
$hubunganPemilik = HubunganPemilikJaminan::all();
return view(
'lpj::debitur.jaminan',
compact('debitur', 'provinces', 'jenisJaminan', 'jenisLegalitasJaminan', 'pemilikJaminan'),
compact(
'debitur',
'provinces',
'jenisJaminan',
'jenisLegalitasJaminan',
'pemilikJaminan',
'hubunganPemilik',
),
);
}
@@ -137,11 +145,58 @@
$debitur = Debiture::find($id);
$validate = $request->validated();
if ($validate) {
try {
DB::beginTransaction();
$validate['debiture_id'] = $id;
if ($validate['pemilik_jaminan_id'] == 00) {
$pemilik_jaminan = [
'hubungan_pemilik_jaminan_id' => request()->get('hubungan_pemilik_jaminan_id'),
'province_code' => $debitur->province_code,
'city_code' => $debitur->city_code,
'district_code' => $debitur->district_code,
'village_code' => $debitur->village_code,
'postal_code' => $debitur->postal_code,
'address' => $debitur->address,
'nomor_id' => request()->get('nomor_id'),
'name' => request()->get('pemilik_name'),
];
$detailSertifikat = [];
$names = request()->input('detail_sertifikat.name', []);
$nomorIds = request()->input('detail_sertifikat.nomor_id', []);
foreach ($names as $index => $name) {
if (isset($nomorIds[$index])) {
$detailSertifikat[] = [
'name' => $name,
'nomor_id' => $nomorIds[$index],
];
}
}
$pemilik_jaminan['detail_sertifikat'] = json_encode($detailSertifikat);
//dd($pemilik_jaminan);
try {
$pemilikJaminan = PemilikJaminan::updateOrCreate([
'debiture_id' => $id,
'name' => request()->get('pemilik_name'),
], $pemilik_jaminan);
} catch (Exception $e) {
return redirect()->route('debitur.jaminan.index', $id)->with(
'error',
'Gagal update pemilik jaminan: ' . $e->getMessage(),
);
}
$validate['pemilik_jaminan_id'] = $pemilikJaminan->id;
}
if ($validate['pemilik_jaminan_id'] == 0) {
$pemilik_jaminan = [
'hubungan_pemilik_jaminan_id' => 1,
@@ -160,59 +215,86 @@
'debiture_id' => $id,
'name' => $debitur->name,
], $pemilik_jaminan);
$validate['pemilik_jaminan_id'] = $pemilikJaminan->id;
}
$document = DokumenJaminan::find($jaminan);
$document->update($validate);
if ($request->detail_dokumen_jaminan_id) {
foreach ($request->detail_dokumen_jaminan_id as $key => $value) {
if (isset($request->dokumen_jaminan[$key])) {
$file = $request->dokumen_jaminan[$key];
if ($file) {
$file_name = $file->getClientOriginalName();
}
// Get existing detail documents
$existingDetails = DetailDokumenJaminan::where('dokumen_jaminan_id', $document->id)->get()->keyBy(
'id',
);
if (isset($file_name)) {
$file->storeAs(
'public/jaminan/' . $debitur->id . '/' . $document->id . '/',
$file_name,
);
if ($request->jenis_legalitas_jaminan_id) {
foreach ($request->jenis_legalitas_jaminan_id as $key => $value) {
$detailData = [
'dokumen_jaminan_id' => $document->id,
'jenis_legalitas_jaminan_id' => $value,
'name' => $request->name[$key],
'keterangan' => $request->keterangan[$key],
];
$detail = [
'dokumen_jaminan_id' => $document->id,
'jenis_legalitas_jaminan_id' => $request->jenis_legalitas_jaminan_id[$key],
'dokumen_jaminan' => 'jaminan/' . $debitur->id . '/' . $document->id . '/' . $file_name,
'name' => $request->name[$key],
'keterangan' => $request->keterangan[$key],
];
if (isset($request->detail_dokumen_jaminan_id[$key])) {
$detailDocument = DetailDokumenJaminan::find(
$request->detail_dokumen_jaminan_id[$key],
$dokumenJaminan = [];
$dokumenNomor=[];
if (isset($request->dokumen_jaminan[$key]) && is_array($request->dokumen_jaminan[$key])) {
foreach ($request->dokumen_jaminan[$key] as $index => $file) {
if ($file) {
$file_name = $file->getClientOriginalName();
$file->storeAs(
'public/jaminan/' . $debitur->id . '/' . $document->id . '/',
$file_name,
);
$detailDocument->update($detail);
$detailDocument->save();
$dokumenJaminan[] = 'jaminan/' . $debitur->id . '/' . $document->id . '/' . $file_name;
$dokumenNomor[] = $request->dokumen_nomor[$key][$index] ?? '';
}
}
} else {
$detail = [
'dokumen_jaminan_id' => $document->id,
'jenis_legalitas_jaminan_id' => $request->jenis_legalitas_jaminan_id[$key],
'name' => $request->name[$key],
'keterangan' => $request->keterangan[$key],
];
}
if (isset($request->detail_dokumen_jaminan_id[$key])) {
$detailDocument = DetailDokumenJaminan::find(
$request->detail_dokumen_jaminan_id[$key],
);
$detailDocument->update($detail);
if (!empty($dokumenJaminan)) {
$detailData['dokumen_jaminan'] = json_encode($dokumenJaminan);
$detailData['dokumen_nomor'] = json_encode($dokumenNomor);
}
if (isset($request->detail_dokumen_jaminan_id[$key])) {
$detailId = $request->detail_dokumen_jaminan_id[$key];
$detailDocument = $existingDetails->get($detailId);
if ($detailDocument) {
// Merge new files with existing ones
if (!empty($dokumenJaminan)) {
$existingFiles = json_decode(
$detailDocument->dokumen_jaminan,
true,
) ?: [];
$existingNomor = json_decode(
$detailDocument->dokumen_nomor,
true,
) ?: [];
$mergedFiles = array_merge($existingFiles, $dokumenJaminan);
$mergedNomor = array_merge($existingNomor, $dokumenNomor);
$detailData['dokumen_jaminan'] = json_encode($mergedFiles);
$detailData['dokumen_nomor'] = json_encode($mergedNomor);
}
$detailDocument->update($detailData);
$existingDetails->forget($detailId);
}
} else {
DetailDokumenJaminan::create($detailData);
}
}
}
// Delete any remaining existing details that weren't updated
foreach ($existingDetails as $detail) {
$files = json_decode($detail->dokumen_jaminan, true) ?: [];
foreach ($files as $file) {
Storage::delete('public/' . $file);
}
$detail->delete();
}
DB::commit();
return redirect()->route('debitur.jaminan.index', $id)->with(
'success',
@@ -229,16 +311,35 @@
$id,
$jaminan,
) {
$document = DokumenJaminan::find($jaminan);
$details = DetailDokumenJaminan::where('dokumen_jaminan_id', $document->id)->get();
$debitur = Debiture::find($document->debiture_id);
$provinces = Province::all();
$cities = City::where('province_code', $document->province_code)->get();
$districts = District::where('city_code', $document->city_code)->get();
$villages = Village::where('district_code', $document->district_code)->get();
$document = DokumenJaminan::find($jaminan);
$details = DetailDokumenJaminan::where('dokumen_jaminan_id', $document->id)->get();
$debitur = Debiture::find($document->debiture_id);
$provinces = Province::all();
$cities = City::where('province_code', $document->province_code)->get();
$districts = District::where('city_code', $document->city_code)->get();
$villages = Village::where('district_code', $document->district_code)->get();
$jenisJaminan = JenisJaminan::all();
$jenisLegalitasJaminan = JenisLegalitasJaminan::all();
$pemilikJaminan = PemilikJaminan::where('debiture_id', $document->debiture_id)->get();
$_jenisJaminan = JenisJaminan::find($document->jenis_jaminan_id);
$legalitasJaminan = json_decode($_jenisJaminan->jenis_legalitas_jaminan_id, true);
$currentLegalitasJaminan = JenisLegalitasJaminan::whereIn(
'id',
$document->detail->pluck('jenis_legalitas_jaminan_id')->toArray(),
)->get();
// Remove values from $legalitasJaminan that are in $currentLegalitasJaminan
$legalitasJaminan = array_diff($legalitasJaminan, $currentLegalitasJaminan->pluck('code')->toArray());
$legalitas = JenisLegalitasJaminan::whereIn('code', $legalitasJaminan)->get();
$pemilikJaminan = PemilikJaminan::where('debiture_id', $document->debiture_id)->get();
$hubunganPemilik = HubunganPemilikJaminan::all();
return view(
'lpj::debitur.jaminan',
@@ -253,6 +354,8 @@
'districts',
'villages',
'pemilikJaminan',
'hubunganPemilik',
'legalitas',
),
);
}
@@ -289,12 +392,18 @@
if ($zip->open($zipFilePath, ZipArchive::CREATE) === true) {
foreach ($documents as $document) {
$filePath = storage_path('app/public/' . $document->dokumen_jaminan);
if (file_exists($filePath)) {
$zip->addFile($filePath, basename($filePath));
} else {
// Log or display an error message for missing files
return redirect()->back()->with('error', 'File not found: ' . $filePath);
$files = is_array(json_decode($document->dokumen_jaminan)) ? json_decode(
$document->dokumen_jaminan,
) : [$document->dokumen_jaminan];
foreach ($files as $file) {
$filePath = storage_path('app/public/' . $file);
if (file_exists($filePath)) {
$zip->addFile($filePath, basename($filePath));
} else {
// Log or display an error message for missing files
return redirect()->back()->with('error', 'File not found: ' . $filePath);
}
}
}
$zip->close();
@@ -305,11 +414,11 @@
} else {
return redirect()->back()->with('error', 'Failed to create ZIP file.');
}
return response()->download($zipFilePath, $zipFileName, [
'Content-Type' => 'application/zip',
'Content-Type' => 'application/zip',
'Content-Disposition' => 'attachment; filename="' . $zipFileName . '"',
'Content-Length' => filesize($zipFilePath),
'Content-Length' => filesize($zipFilePath),
])->deleteFileAfterSend(false);
}
@@ -318,10 +427,13 @@
{
$dokumen = request()->get('dokumen');
$document = DetailDokumenJaminan::find($dokumen);
return response()->download(storage_path('app/public/' . $document->dokumen_jaminan));
$file = is_array(json_decode($document->dokumen_jaminan)) ? json_decode(
$document->dokumen_jaminan,
) : [$document->dokumen_jaminan];
return response()->download(storage_path('app/public/' . $file[request()->get('index')]));
}
public function legalitasJaminan($id, $jaminan)
public function legalitasJaminan($id)
{
$jenisJaminan = JenisJaminan::find($id);
$legalitasJaminan = $jenisJaminan->jenis_legalitas_jaminan_id;
@@ -329,4 +441,65 @@
$legalitas = JenisLegalitasJaminan::whereIn('code', json_decode($legalitasJaminan, true))->get();
echo json_encode($legalitas);
}
public function getLegalitasJaminan($id = 10, $jenisJaminanId = 1)
: JsonResponse {
$jenisJaminan = JenisJaminan::findOrFail($jenisJaminanId);
$legalitasJaminan = $jenisJaminan->jenis_legalitas_jaminan_id;
$newLegalitasJaminan = JenisLegalitasJaminan::whereIn('code', json_decode($legalitasJaminan, true))->get();
$existingLegalitas = [];
$newLegalitas = [];
// Create a set of new jenis_legalitas_jaminan_ids for quick lookup
$newLegalitasIds = $newLegalitasJaminan->pluck('id')->toArray();
if ($id > 0) {
$document = DokumenJaminan::findOrFail($id);
if ($document && $document->detail) {
foreach ($document->detail as $detail) {
// Only include existing legalitas if its id is in the new set
if (in_array($detail->jenis_legalitas_jaminan_id, $newLegalitasIds)) {
$existingLegalitas[] = [
'id' => $detail->id,
'jenis_legalitas_jaminan_id' => $detail->jenis_legalitas_jaminan_id,
'name' => $detail->jenisLegalitasJaminan->name,
'dokumen_jaminan' => json_decode(
$detail->dokumen_jaminan,
) ?? $detail->dokumen_jaminan,
'dokumen_nomor' => json_decode(
$detail->dokumen_nomor,
) ?? $detail->dokumen_nomor,
'custom_field' => $detail->jenisLegalitasJaminan->custom_field,
'custom_field_type' => $detail->jenisLegalitasJaminan->custom_field_type,
'details' => $detail->details,
'keterangan' => $detail->keterangan,
'is_existing' => true,
];
}
}
}
}
foreach ($newLegalitasJaminan as $legalitas) {
if (!Collection::make($existingLegalitas)->contains('jenis_legalitas_jaminan_id', $legalitas->id)) {
$newLegalitas[] = [
'id' => null,
'jenis_legalitas_jaminan_id' => $legalitas->id,
'name' => $legalitas->name,
'dokumen_jaminan' => null,
'dokumen_nomor' => null,
'custom_field' => $legalitas->custom_field,
'custom_field_type' => $legalitas->custom_field_type,
'details' => null,
'keterangan' => null,
'is_existing' => false,
];
}
}
$combinedLegalitas = array_merge($existingLegalitas, $newLegalitas);
return response()->json($combinedLegalitas);
}
}

View File

@@ -5,8 +5,6 @@ namespace Modules\Lpj\Http\Controllers;
use Throwable;
use Illuminate\Http\Request;
use Modules\Lpj\Models\KJPP;
use Illuminate\Http\Response;
use Modules\Lpj\Models\Branch;
use Modules\Location\Models\City;
use Modules\Lpj\Models\IjinUsaha;
use Modules\Lpj\Exports\KJPPExport;
@@ -58,6 +56,79 @@ class KJPPController extends Controller
$validated = $request->validated();
if ($validated) {
$detailEmailKantor = [];
$detailNamaPicReviewer = [];
$detailNomorHpPicReviewer = [];
$detailNamaPicAdmin = [];
$detailNomorHpPicAdmin = [];
$detailNamaPicMarketing = [];
$detailNomorHpPicMarketing = [];
$emailKantor = $request->input('detail_email_kantor.email_kantor', []);
$namaPicReviewer = $request->input('detail_nama_pic_reviewer.nama_pic_reviewer', []);
$nomorHpPicReviewer = $request->input('detail_nomor_hp_pic_reviewer.nomor_hp_pic_reviewer', []);
$namaPicAdmin = $request->input('detail_nama_pic_admin.nama_pic_admin', []);
$nomorHpPicAdmin = $request->input('detail_nomor_hp_pic_admin.nomor_hp_pic_admin', []);
$namaPicMarketing = $request->input('detail_nama_pic_marketing.nama_pic_marketing', []);
$nomorHpPicMarketing = $request->input('detail_nomor_hp_pic_marketing.nomor_hp_pic_marketing', []);
foreach ($emailKantor as $value) {
$detailEmailKantor[] = [
'email_kantor' => $value
];
}
// Encode to JSON and store
$detailEmailKantorJson = json_encode($detailEmailKantor);
// Process detail_nama_pic_reviewer
foreach ($namaPicReviewer as $value) {
$detailNamaPicReviewer[] = [
'nama_pic_reviewer' => $value
];
}
$detailNamaPicReviewerJson = json_encode($detailNamaPicReviewer);
// Process detail_nomor_hp_pic_reviewer
foreach ($nomorHpPicReviewer as $value) {
$detailNomorHpPicReviewer[] = [
'nomor_hp_pic_reviewer' => $value
];
}
$detailNomorHpPicReviewerJson = json_encode($detailNomorHpPicReviewer);
// Process detail_nama_pic_admin
foreach ($namaPicAdmin as $value) {
$detailNamaPicAdmin[] = [
'nama_pic_admin' => $value
];
}
$detailNamaPicAdminJson = json_encode($detailNamaPicAdmin);
// Process detail_nomor_hp_pic_admin
foreach ($nomorHpPicAdmin as $value) {
$detailNomorHpPicAdmin[] = [
'nomor_hp_pic_admin' => $value
];
}
$detailNomorHpPicAdminJson = json_encode($detailNomorHpPicAdmin);
// Process detail_nama_pic_marketing
foreach ($namaPicMarketing as $value) {
$detailNamaPicMarketing[] = [
'nama_pic_marketing' => $value
];
}
$detailNamaPicMarketingJson = json_encode($detailNamaPicMarketing);
// Process detail_nomor_hp_pic_marketing
foreach ($nomorHpPicMarketing as $value) {
$detailNomorHpPicMarketing[] = [
'nomor_hp_pic_marketing' => $value
];
}
$detailNomorHpPicMarketingJson = json_encode($detailNomorHpPicMarketing);
$file = $request->file('attachment');
$filename = $file ? time() . '.' . $file->getClientOriginalExtension() : 'default.pdf';
@@ -69,12 +140,20 @@ class KJPPController extends Controller
Storage::copy('public/test/default.pdf', 'public/uploads_pdf/' . $filename);
}
$validated['ijin_usaha_id'] = json_encode($request->input('ijin_usaha_id'));
$validated['jenis_aset_id'] = json_encode($request->input('jenis_aset_id'));
$validated['detail_email_kantor'] = $detailEmailKantorJson;
$validated['detail_nama_pic_reviewer'] = $detailNamaPicReviewerJson;
$validated['detail_nomor_hp_pic_reviewer'] = $detailNomorHpPicReviewerJson;
$validated['detail_nama_pic_admin'] = $detailNamaPicAdminJson;
$validated['detail_nomor_hp_pic_admin'] = $detailNomorHpPicAdminJson;
$validated['detail_nama_pic_marketing'] = $detailNamaPicMarketingJson;
$validated['detail_nomor_hp_pic_marketing'] = $detailNomorHpPicMarketingJson;
$validated['ijin_usaha_id'] = json_encode($validated['ijin_usaha_id']);
$validated['jenis_aset_id'] = json_encode($validated['jenis_aset_id']);
// Tambahkan nama file ke data yang divalidasi
$validated['attachment'] = $filename;
// dd($validated);
// Simpan data ke database
KJPP::create($validated);
@@ -101,8 +180,36 @@ class KJPPController extends Controller
$cities = City::where('code', $kjpp->city_code)->get();
$districts = District::where('code', $kjpp->district_code)->get();
$villages = Village::where('code', $kjpp->village_code)->get();
// dd($branches);
return view('lpj::kjpp.show', compact('jenis_jaminan', 'ijin_usahas', 'ijin_usaha', 'kjpp', 'provinces', 'cities', 'districts', 'villages'));
$detailEmailKantor = json_decode($kjpp->detail_email_kantor);
$detailNamaPicReviewer = json_decode($kjpp->detail_nama_pic_reviewer);
$detailNomorHpPicReviewer = json_decode($kjpp->detail_nomor_hp_pic_reviewer);
$detailNamaPicAdmin = json_decode($kjpp->detail_nama_pic_admin);
$detailNomorHpPicAdmin = json_decode($kjpp->detail_nomor_hp_pic_admin);
$detailNamaPicMarketing = json_decode($kjpp->detail_nama_pic_marketing);
$detailNomorHpPicMarketing = json_decode($kjpp->detail_nomor_hp_pic_marketing);
$detailJoinPicReviewer = json_encode(array_map(function ($nama, $nomor) {
return [
'nama_pic_reviewer' => $nama->nama_pic_reviewer,
'nomor_hp_pic_reviewer' => $nomor->nomor_hp_pic_reviewer
];
}, $detailNamaPicReviewer, $detailNomorHpPicReviewer));
$detailJoinPicAdmin = json_encode(array_map(function ($nama, $nomor) {
return [
'nama_pic_admin' => $nama->nama_pic_admin,
'nomor_hp_pic_admin' => $nomor->nomor_hp_pic_admin
];
}, $detailNamaPicAdmin, $detailNomorHpPicAdmin));
$detailJoinPicMarketing = json_encode(array_map(function ($nama, $nomor) {
return [
'nama_pic_marketing' => $nama->nama_pic_marketing,
'nomor_hp_pic_marketing' => $nomor->nomor_hp_pic_marketing
];
}, $detailNamaPicMarketing, $detailNomorHpPicMarketing));
return view('lpj::kjpp.show', compact('jenis_jaminan', 'ijin_usahas', 'ijin_usaha', 'kjpp', 'provinces', 'cities', 'districts', 'villages', 'detailEmailKantor', 'detailJoinPicReviewer', 'detailJoinPicAdmin', 'detailJoinPicMarketing'));
}
/**
@@ -117,8 +224,36 @@ class KJPPController extends Controller
$cities = City::where('province_code', $kjpp->province_code)->get();
$districts = District::where('city_code', $kjpp->city_code)->get();
$villages = Village::where('district_code', $kjpp->district_code)->get();
$detailEmailKantor = json_decode($kjpp->detail_email_kantor);
$detailNamaPicReviewer = json_decode($kjpp->detail_nama_pic_reviewer);
$detailNomorHpPicReviewer = json_decode($kjpp->detail_nomor_hp_pic_reviewer);
$detailNamaPicAdmin = json_decode($kjpp->detail_nama_pic_admin);
$detailNomorHpPicAdmin = json_decode($kjpp->detail_nomor_hp_pic_admin);
$detailNamaPicMarketing = json_decode($kjpp->detail_nama_pic_marketing);
$detailNomorHpPicMarketing = json_decode($kjpp->detail_nomor_hp_pic_marketing);
return view('lpj::kjpp.create', compact('kjpp', 'ijin_usaha', 'jenis_aset', 'provinces', 'cities', 'districts', 'villages'));
$detailJoinPicReviewer = json_encode(array_map(function ($nama, $nomor) {
return [
'nama_pic_reviewer' => $nama->nama_pic_reviewer,
'nomor_hp_pic_reviewer' => $nomor->nomor_hp_pic_reviewer
];
}, $detailNamaPicReviewer, $detailNomorHpPicReviewer));
$detailJoinPicAdmin = json_encode(array_map(function ($nama, $nomor) {
return [
'nama_pic_admin' => $nama->nama_pic_admin,
'nomor_hp_pic_admin' => $nomor->nomor_hp_pic_admin
];
}, $detailNamaPicAdmin, $detailNomorHpPicAdmin));
$detailJoinPicMarketing = json_encode(array_map(function ($nama, $nomor) {
return [
'nama_pic_marketing' => $nama->nama_pic_marketing,
'nomor_hp_pic_marketing' => $nomor->nomor_hp_pic_marketing
];
}, $detailNamaPicMarketing, $detailNomorHpPicMarketing));
return view('lpj::kjpp.create', compact('kjpp', 'ijin_usaha', 'jenis_aset', 'provinces', 'cities', 'districts', 'villages', 'detailJoinPicReviewer', 'detailJoinPicAdmin', 'detailJoinPicMarketing', 'detailEmailKantor'));
}
/**
@@ -128,7 +263,82 @@ class KJPPController extends Controller
{
$validated = $request->validated();
// dd($validated);
if ($validated) {
$detailEmailKantor = [];
$detailNamaPicReviewer = [];
$detailNomorHpPicReviewer = [];
$detailNamaPicAdmin = [];
$detailNomorHpPicAdmin = [];
$detailNamaPicMarketing = [];
$detailNomorHpPicMarketing = [];
$emailKantor = $request->input('detail_email_kantor.email_kantor', []);
$namaPicReviewer = $request->input('detail_nama_pic_reviewer.nama_pic_reviewer', []);
$nomorHpPicReviewer = $request->input('detail_nomor_hp_pic_reviewer.nomor_hp_pic_reviewer', []);
$namaPicAdmin = $request->input('detail_nama_pic_admin.nama_pic_admin', []);
$nomorHpPicAdmin = $request->input('detail_nomor_hp_pic_admin.nomor_hp_pic_admin', []);
$namaPicMarketing = $request->input('detail_nama_pic_marketing.nama_pic_marketing', []);
$nomorHpPicMarketing = $request->input('detail_nomor_hp_pic_marketing.nomor_hp_pic_marketing', []);
foreach ($emailKantor as $value) {
$detailEmailKantor[] = [
'email_kantor' => $value
];
}
// Encode to JSON and store
$detailEmailKantorJson = json_encode($detailEmailKantor);
// Process detail_nama_pic_reviewer
foreach ($namaPicReviewer as $value) {
$detailNamaPicReviewer[] = [
'nama_pic_reviewer' => $value
];
}
$detailNamaPicReviewerJson = json_encode($detailNamaPicReviewer);
// Process detail_nomor_hp_pic_reviewer
foreach ($nomorHpPicReviewer as $value) {
$detailNomorHpPicReviewer[] = [
'nomor_hp_pic_reviewer' => $value
];
}
$detailNomorHpPicReviewerJson = json_encode($detailNomorHpPicReviewer);
// Process detail_nama_pic_admin
foreach ($namaPicAdmin as $value) {
$detailNamaPicAdmin[] = [
'nama_pic_admin' => $value
];
}
$detailNamaPicAdminJson = json_encode($detailNamaPicAdmin);
// Process detail_nomor_hp_pic_admin
foreach ($nomorHpPicAdmin as $value) {
$detailNomorHpPicAdmin[] = [
'nomor_hp_pic_admin' => $value
];
}
$detailNomorHpPicAdminJson = json_encode($detailNomorHpPicAdmin);
// Process detail_nama_pic_marketing
foreach ($namaPicMarketing as $value) {
$detailNamaPicMarketing[] = [
'nama_pic_marketing' => $value
];
}
$detailNamaPicMarketingJson = json_encode($detailNamaPicMarketing);
// Process detail_nomor_hp_pic_marketing
foreach ($nomorHpPicMarketing as $value) {
$detailNomorHpPicMarketing[] = [
'nomor_hp_pic_marketing' => $value
];
}
$detailNomorHpPicMarketingJson = json_encode($detailNomorHpPicMarketing);
$file = $request->file('attachment');
$filename = $file ? time() . '.' . $file->getClientOriginalExtension() : null;
@@ -148,6 +358,16 @@ class KJPPController extends Controller
$validated['attachment'] = $kjpp->attachment ?? 'default.pdf';
}
$validated['detail_email_kantor'] = $detailEmailKantorJson;
$validated['detail_nama_pic_reviewer'] = $detailNamaPicReviewerJson;
$validated['detail_nomor_hp_pic_reviewer'] = $detailNomorHpPicReviewerJson;
$validated['detail_nama_pic_admin'] = $detailNamaPicAdminJson;
$validated['detail_nomor_hp_pic_admin'] = $detailNomorHpPicAdminJson;
$validated['detail_nama_pic_marketing'] = $detailNamaPicMarketingJson;
$validated['detail_nomor_hp_pic_marketing'] = $detailNomorHpPicMarketingJson;
$validated['ijin_usaha_id'] = json_encode($validated['ijin_usaha_id']);
$validated['jenis_aset_id'] = json_encode($validated['jenis_aset_id']);
// Perbarui data di database
KJPP::where('id', $id)->update($validated);

View File

@@ -42,16 +42,16 @@ class OtorisasiPenawaranController extends Controller
$query =PenawaranTender::query()
->select('penawaran.*',DB::raw("CONCAT(DATE_FORMAT(penawaran.start_date, '%d %M %Y'), ' - ', DATE_FORMAT(penawaran.end_date, '%d %M %Y')) AS date_range"), 'tujuan_penilaian_kjpp.name as tujuan_penilaian_kjpp_name')
->leftJoin('tujuan_penilaian_kjpp', 'tujuan_penilaian_kjpp.id','=','penawaran.tujuan_penilaian_kjpp_id')
->where('penawaran.status','=','persetujuan-penawaran')
->withCount('penawarandetails');
->where('penawaran.status','=','proposal-tender')
->withCount('penawarandetails');
// 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->orWhere('status', 'LIKE', '%' . $search . '%');
});
}
@@ -114,19 +114,19 @@ class OtorisasiPenawaranController extends Controller
if (request()->ajax()) {
$id = $request->id;
$penawaran = PenawaranTender::where('status','=','persetujuan-penawaran')->find($id);
$penawaran = PenawaranTender::where('status','=','proposal-tender')->find($id);
if ($penawaran) {
$penawarandetailLogs = PenawaranDetailTenderLog::where('penawaran_id',$id)
->leftJoin('kjpp', 'kjpp.id', '=', 'detail_penawaran_logs.kjpp_rekanan_id')
->leftJoin('kjpp', 'kjpp.id', '=', 'detail_penawaran_logs.kjpp_rekanan_id')
->select('detail_penawaran_logs.*', DB::raw("DATE_FORMAT(detail_penawaran_logs.created_at, '%d-%m-%Y %H:%i') AS created_at2"),'kjpp.code AS kjpp_code', 'kjpp.name AS kjpp_name')
->get();
$penawrandetails = PenawaranDetailTender::where('penawaran_id','=',$id)
->leftJoin('kjpp', 'kjpp.id', '=', 'detail_penawaran.kjpp_rekanan_id')
->leftJoin('kjpp', 'kjpp.id', '=', 'detail_penawaran.kjpp_rekanan_id')
->select('detail_penawaran.*', 'kjpp.code AS kjpp_code', 'kjpp.name AS kjpp_name')
->where('detail_penawaran.status','=',1)
->get();
if(sizeof($penawarandetailLogs)>0)
{
$h=0;
@@ -139,8 +139,8 @@ class OtorisasiPenawaranController extends Controller
}
$h++;
}
}
}
$i=0;
foreach($penawrandetails as $obj)
@@ -149,17 +149,17 @@ class OtorisasiPenawaranController extends Controller
{
$penawrandetails_path = Storage::url($obj->dokumen_persetujuan);
$penawrandetails[$i]->dokumen_persetujuan = $penawrandetails_path;
}
$i++;
}
$penawaranString = "";
if($penawaran->status)
{
$penawaranString = convertSlug($penawaran->status);
$penawaran->status = $penawaranString;
}
}
$kjpp=null;
$kjpp = KJPP::pluck('name', 'id');
@@ -202,11 +202,11 @@ class OtorisasiPenawaranController extends Controller
// update status Penawaran menjadi SPK
// update status Permohonan menjadi SPK
// insert detail_permohonan_log
PenawaranDetailTender::where('status', 1)
->where('penawaran_id', $request->penawaran_id)
->whereNotIn('id', [$id])
->update(['status' => 2,
->update(['status' => 2,
'updated_by' => Auth::id(),
'updated_at' => now()
]);
@@ -228,12 +228,12 @@ class OtorisasiPenawaranController extends Controller
'updated_by' => Auth::id(),
'updated_at' => now()
]);
// log
$detailPenawaran = PenawaranDetailTender::where('penawaran_id', $request->penawaran_id)->get();
if(sizeof($detailPenawaran)>0)
{
foreach ($detailPenawaran as $model) {
array_push($dataDetailPenawaranLog, [
'detail_penawaran_id' =>$model->id,
@@ -248,12 +248,12 @@ class OtorisasiPenawaranController extends Controller
'authorized_at' =>$model->authorized_at,
'created_at' =>$model->created_at,
'updated_at' =>$model->updated_at,
'deleted_at' =>$model->deleted_at,
'deleted_at' =>$model->deleted_at,
'created_by' =>$model->created_by,
'updated_by' =>$model->updated_by,
'deleted_by' =>$model->deleted_by
]);
}
PenawaranDetailTenderLog::insert($dataDetailPenawaranLog);

View File

@@ -63,6 +63,7 @@
public function update(PemilikJaminanRequest $request, $id, $pemilik)
{
$validate = $request->validated();
if ($validate) {
try {
$pemilik = PemilikJaminan::find($pemilik);
@@ -88,6 +89,7 @@
$districts = District::where('city_code', $pemilik->city_code)->get();
$villages = Village::where('district_code', $pemilik->district_code)->get();
$hubunganPemilik = HubunganPemilikJaminan::all();
$detailSertifikat = $pemilik->detail_sertifikat;
return view(
'lpj::pemilik_jaminan.form',
@@ -99,6 +101,7 @@
'villages',
'hubunganPemilik',
'pemilik',
'detailSertifikat'
),
);
}

View File

@@ -0,0 +1,135 @@
<?php
namespace Modules\Lpj\Http\Controllers;
use Illuminate\Http\Request;
use Modules\Lpj\Models\Permohonan;
use App\Http\Controllers\Controller;
class PenilaiController extends Controller
{
public $user;
/**
* Display a listing of the resource.
*/
public function index()
{
return view('lpj::penilai.index');
}
/**
* Show the form for creating a new resource.
*/
public function create()
{
return view('lpj::create');
}
/**
* Store a newly created resource in storage.
*/
public function store(Request $request)
{
//
}
/**
* Show the specified resource.
*/
public function show($id)
{
$permohonan = Permohonan::with('debiture.documents.jenisjaminan')->find($id);
return view('lpj::penilai.show', compact('permohonan'));
}
/**
* Show the form for editing the specified resource.
*/
public function edit($id)
{
return view('lpj::edit');
}
/**
* Update the specified resource in storage.
*/
public function update(Request $request, $id)
{
//
}
/**
* Remove the specified resource from storage.
*/
public function destroy($id)
{
//
}
public function dataForDatatables(Request $request)
{
if (is_null($this->user) || !$this->user->can('penilai.view')) {
//abort(403, 'Sorry! You are not allowed to view users.');
}
// Retrieve data from the database
$query = Permohonan::query()->where('status', '=', 'done');
// 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->orWhereRelation('debiture', 'name', 'LIKE', '%' . $search . '%');
$q->orWhereRelation('branch', 'name', 'LIKE', '%' . $search . '%');
$q->orWhereRelation('user', 'name', 'LIKE', '%' . $search . '%');
$q->orWhereRelation('tujuanPenilaian', 'name', 'LIKE', '%' . $search . '%');
$q->orWhereRelation('jenisfasilitasKredit', 'name', '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(['user', 'debiture', 'branch', 'tujuanPenilaian', 'jenisfasilitasKredit'])->get();
// Calculate the page count
$pageCount = ceil($totalRecords / $request->get('size'));
// Calculate the current page number
$currentPage = 0 + 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

@@ -5,14 +5,18 @@ namespace Modules\Lpj\Http\Controllers;
use App\Http\Controllers\Controller;
use Exception;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Modules\Lpj\Http\Requests\PenilaianRequest;
use Modules\Lpj\Models\JenisPenilaian;
use Modules\Lpj\Models\Penilaian;
use Modules\Lpj\Models\PenilaianTeam;
use Modules\Lpj\Models\Permohonan;
use Modules\Lpj\Models\StatusPermohonan;
use Modules\Lpj\Models\Teams;
use Modules\Lpj\Models\Regions;
use Modules\Lpj\Models\TeamsUsers;
use Modules\Usermanagement\Models\User;
use Illuminate\Support\Facades\Auth;
class PenilaianController extends Controller
{
@@ -37,16 +41,95 @@ class PenilaianController extends Controller
if ($validatedData) {
try {
$penilaian = Penilaian::create($validatedData);
DB::beginTransaction();
$penilaian = Penilaian::create($validatedData);
$validatedData['penilaian_id'] = $penilaian->id;
$teams_ids = [];
$user_ids = [];
$roles = [];
if ($validatedData['surveyor_id'] === 'pilih_dari_region') {
$surveyor_region_id = $validatedData['surveyor_region_id'];
// Hapus team_id sebelumnya di Permohonan jika ada
$permohonan = Permohonan::where('nomor_registrasi', $request->nomor_registrasi)->first();
if ($permohonan) {
$permohonan->update([
'region_id' => $surveyor_region_id,
]);
}
$teams_ids[] = $surveyor_region_id;
$user_ids[] = null;
$roles[] = 'surveyor';
} else {
$permohonan = Permohonan::where('nomor_registrasi', $request->nomor_registrasi)->first();
$teams_ids[] = $validatedData['teams_id'];
if (isset($validatedData['penilai_surveyor_id'])) {
$user_ids[] = $validatedData['penilai_surveyor_id'];
} else {
$user_ids[] = $validatedData['surveyor_id'];
}
$roles[] = 'surveyor';
}
if ($validatedData['penilai_id'] === 'pilih_dari_region') {
$penilaian_region_id = $validatedData['penilai_region_id'];
// Hapus team_id sebelumnya di Permohonan jika ada
$permohonan = Permohonan::where('nomor_registrasi', $request->nomor_registrasi)->first();
if ($permohonan) {
$permohonan->update([
'region_id' => $penilaian_region_id,
]);
}
$teams_ids[] = $penilaian_region_id;
$user_ids[] = null;
$roles[] = 'penilai';
} else {
$permohonan = Permohonan::where('nomor_registrasi', $request->nomor_registrasi)->first();
$teams_ids[] = $validatedData['teams_id'];
if (isset($validatedData['penilai_surveyor_id'])) {
$user_ids[] = $validatedData['penilai_surveyor_id'];
}else {
$user_ids[] = $validatedData['penilai_id'];
}
$roles[] = 'penilai';
}
foreach ($teams_ids as $key => $teams_id) {
PenilaianTeam::create([
'penilaian_id' => $validatedData['penilaian_id'],
'team_id' => $teams_id,
'user_id' => $user_ids[$key],
'role' => $roles[$key],
]);
}
if ($validatedData['surveyor_id'] === 'pilih_dari_region' || $validatedData['penilai_id'] === 'pilih_dari_region') {
$status = 'registered';
} else {
$status = 'assign';
}
$permohonan = Permohonan::where('nomor_registrasi', $request->nomor_registrasi);
$permohonan->update([
'status' => 'assign',
'status' => $status,
]);
DB::commit();
return redirect()->route('penilaian.index')->with('success', 'Penilaian berhasil disimpan');
} catch (Exception $e) {
DB::rollBack();
return redirect()->route('penilaian.index')->with('error', $e->getMessage());
}
}
@@ -63,22 +146,43 @@ class PenilaianController extends Controller
/**
* Update the specified resource in storage.
*/
public function update(PenilaianRequest $request, $id)
public function update(Request $request, $id)
{
$validate = $request->validated();
if ($validate) {
try {
$penilaian = Penilaian::where('nomor_registrasi', $request->nomor_registrasi)->firstOrFail();
$penilaian->update($validate);
$permohonan = Permohonan::where('nomor_registrasi', $request->nomor_registrasi);
$permohonan->update([
'status' => 'assign',
]);
try {
DB::beginTransaction();
$penilaian = Penilaian::where('nomor_registrasi', $request->nomor_registrasi)->first();
$penilaianId = $penilaian->id;
$penilainTeam = PenilaianTeam::where('penilaian_id', $penilaianId)->get();
foreach ($penilainTeam as $item) {
if ($item->role === 'surveyor' && $item->user_id === null) {
$item->update([
'user_id' => $request->surveyor_id,
'role' => 'surveyor',
]);
}
if ($item->role === 'penilai' && $item->user_id === null) {
$item->update([
'user_id' => $request->penilai_id,
'role' => 'penilai',
]);
}
return redirect()->route('penilaian.index', $id)->with('success', 'Penilaian berhasil diubah');
} catch (Exception $e) {
return redirect()->route('penilaian.index', $id)->with('error', $e->getMessage());
}
$permohonan = Permohonan::where('nomor_registrasi', $request->nomor_registrasi);
$permohonan->update([
'status' => 'assign',
]);
DB::commit();
return redirect()->route('penilaian.index')->with('success', 'Penilaian berhasil disimpan');
} catch (Exception $e) {
DB::rollBack();
return redirect()->route('penilaian.index')->with('error', $e->getMessage());
}
}
@@ -87,42 +191,66 @@ class PenilaianController extends Controller
*/
public function assignment($id)
{
$permohonan = Permohonan::with(
[
'user',
'debiture.province',
'debiture.city',
'debiture.district',
'debiture.village',
'branch',
'tujuanPenilaian',
],
)->findOrFail($id);
$permohonan = Permohonan::with([
'user',
'debiture.province',
'debiture.city',
'debiture.district',
'debiture.village',
'branch',
'tujuanPenilaian',
])->findOrFail($id);
$idPenilaian = $permohonan->jenis_penilaian_id;
$idPenilaian = $permohonan->jenis_penilaian_id;
$idRegion = $permohonan->region_id;
$jenisPenilaian = JenisPenilaian::find($idPenilaian);
$userTeam = Teams::with(['regions', 'teamsUsers.user'])
->whereHas('regions', function ($q) use ($idRegion) {
$q->where('id', $idRegion);
})
->get();
$teamPenilai = Teams::with(['regions', 'teamsUsers', 'teamsUsers.user', ])
->whereHas('regions', function ($q) use ($idRegion) {
$q->where('id', $idRegion);
})->get();
$teamPenilai = $userTeam->flatMap(function ($team) {
return $team->teamsUsers->filter(function ($teamUser) {
return $teamUser->user->roles->contains(function ($role) {
return $role->name === 'surveyor' || $role->name === 'surveyor-penilai';
});
})->map(function ($teamUser) {
return $teamUser->user;
});
})->unique('id');
$existingTeamIds = $teamPenilai->pluck('id')->toArray();
$updateTeamPenilai = Teams::with(['regions', 'teamsUsers', 'teamsUsers.user'])
->whereNotIn('id', $existingTeamIds)
->get();
$regionName = null;
foreach ($teamPenilai as $item) {
foreach ($userTeam as $item) {
$regionName = $item->regions;
}
// $regionName = $userTeam->first()?->regions->name;
// dd($teamPenilai);
$penilaian = Penilaian::where('nomor_registrasi', $permohonan->nomor_registrasi)->first();
return view('lpj::penilaian.form', compact('permohonan', 'teamPenilai', 'jenisPenilaian', 'penilaian', 'regionName'));
}
$penilaianTeam = collect();
if ($penilaian && $penilaian->id) {
$penilaianTeam = PenilaianTeam::where('penilaian_id', $penilaian->id)->get();
}
// return response()->json([
// 'penilaianTeam' => $penilaianTeam
// ]);
return view('lpj::penilaian.form', compact('permohonan', 'teamPenilai', 'jenisPenilaian', 'penilaian', 'regionName', 'updateTeamPenilai', 'penilaianTeam'));
}
/**
* Remove the specified resource from storage.
*/
@@ -160,8 +288,9 @@ class PenilaianController extends Controller
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();
@@ -180,6 +309,9 @@ class PenilaianController extends Controller
}
$query->whereRaw('LOWER(status) = ?', ['registered']);
$query->whereHas('region.teams.teamsUsers.user', function ($q) {
$q->where('id', Auth::user()->id);
});
if ($request->has('sortOrder') && !empty($request->get('sortOrder'))) {
$order = $request->get('sortOrder');
@@ -202,7 +334,7 @@ class PenilaianController extends Controller
}
$filteredRecords = $query->count();
$data = $query->with(['user', 'debiture', 'branch', 'tujuanPenilaian'])->get();
$data = $query->with(['user', 'debiture', 'branch', 'tujuanPenilaian', 'region.teams.teamsUsers.user'])->get();
$pageCount = ceil($totalRecords / $size);
@@ -222,7 +354,8 @@ class PenilaianController extends Controller
public function otorisator(Request $request){
public function otorisator(Request $request)
{
$type = $request->route('type');
$header = '';
@@ -248,7 +381,8 @@ class PenilaianController extends Controller
return view('lpj::penilaian.otorisator.index', compact('header'));
}
public function show($id){
public function show($id)
{
$permohonan = Permohonan::find($id);
@@ -272,7 +406,10 @@ class PenilaianController extends Controller
$status = 'proses paparan';
break;
case 'Pembayaran':
$status = 'proses pembayaran';
$status = 'proses';
break;
case 'Pembatalan':
$status = 'order';
break;
default:
$status = '';
@@ -298,7 +435,11 @@ class PenilaianController extends Controller
if (!empty($otorisator)) {
$query->whereRaw('LOWER(status) = ?', [strtolower($status)]);
if ($status == 'proses') {
$query->whereIn('status_bayar', ['sudah_bayar', 'belum_bayar']);
} else {
$query->whereRaw('LOWER(status) = ?', [strtolower($status)]);
}
}
// Sorting berdasarkan sortField dan sortOrder

View File

@@ -3,6 +3,7 @@
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;
@@ -32,25 +33,20 @@
public function store(PermohonanRequest $request)
{
$validate = $request->validated();
if ($validate) {
try {
// Save to database
Permohonan::create($validate);
return redirect()
->route('permohonan.index')
->with('success', 'Permohonan created successfully');
->route('permohonan.index')->with('success', 'Permohonan created successfully');
} catch (Exception $e) {
return redirect()
->route('permohonan.create')
->with('error', 'Failed to create permohonan' . $e->getMessage());
->route('permohonan.create')->with('error', 'Failed to create permohonan' . $e->getMessage());
}
} else {
return redirect()
->route('permohonan.create')
->with('success', 'error naon iye')
->withInput();
->route('permohonan.create')->with('success', 'error naon iye')->withInput();
}
}
@@ -112,19 +108,20 @@
public function update(PermohonanRequest $request, $id)
{
$validate = $request->validated();
if ($validate) {
try {
// Update in database
$permohonan = Permohonan::find($id);
if ($permohonan->status == 'revisi') {
$validate['status'] = 'order';
}
$permohonan->update($validate);
return redirect()
->route('permohonan.index')
->with('success', 'Permohonan updated successfully');
->route('permohonan.index')->with('success', 'Permohonan updated successfully');
} catch (Exception $e) {
return redirect()
->route('permohonan.edit', $id)
->with('error', 'Failed to update permohonan');
->route('permohonan.edit', $id)->with('error', 'Failed to update permohonan');
}
}
}
@@ -304,4 +301,20 @@
return redirect()->route('authorization.index')->with('success', 'Permohonan updated successfully');
}
public function show($id)
{
$permohonan = Permohonan::find($id);
return view('lpj::permohonan.show', compact('permohonan'));
}
public function print($id)
{
$permohonan = Permohonan::find($id);
return view('lpj::permohonan.print', compact('permohonan'));
// $pdf = Pdf::loadView('lpj::permohonan.print', compact('permohonan'));
// return $pdf->stream();
}
}

View File

@@ -75,7 +75,7 @@ class ProsesPenawaranController extends Controller
// Get the data for the current page
//$data = $query->with(['user', 'debiture', 'branch', 'tujuanPenilaian'])->get();
$data = $query->with(['tujuanPenilaianKJPP'])->get();
$data = $query->with(['tujuanPenilaianKjpp','permohonan','permohonan.debiture'])->get();
// Calculate the page count
$pageCount = ceil($totalRecords / $request->get('size'));
@@ -110,13 +110,12 @@ class ProsesPenawaranController extends Controller
$id = $request->id;
$penawaran = PenawaranTender::find($id);
$penawrandetails = PenawaranDetailTender::where('penawaran_id','=',$id)
->leftJoin('kjpp', 'kjpp.id', '=', 'detail_penawaran.kjpp_rekanan_id')
->leftJoin('kjpp', 'kjpp.id', '=', 'detail_penawaran.kjpp_rekanan_id')
->select('detail_penawaran.*', 'kjpp.code AS kjpp_code', 'kjpp.name AS kjpp_name')
->where('detail_penawaran.status','=',1)
->get();
if ($penawaran) {
$i=0;
foreach($penawrandetails as $obj)
{
@@ -156,11 +155,11 @@ class ProsesPenawaranController extends Controller
$dataPenawaranDetail = array();
if (request()->ajax()) {
$validator = ProsesPenawaranController::rulesEditnya($request, $id);
if ($validator['fails']) {
$data['message'] = $validator['errors'];
$data['status'] = 'error';
}
}
else
{
try {
@@ -174,9 +173,9 @@ class ProsesPenawaranController extends Controller
{
$file_tmp = $request->file('dokumen_persetujuan');
$folderPath = 'uploads/penawaran/';
if ($file_tmp->isValid())
if ($file_tmp->isValid())
{
$myFile=$file_tmp->getClientOriginalName(); // nama file with extension
$myFile=$file_tmp->getClientOriginalName(); // nama file with extension
$file_name = pathinfo($myFile, PATHINFO_FILENAME); // nama file without extension
$extension = $file_tmp->getClientOriginalExtension();
@@ -205,16 +204,16 @@ class ProsesPenawaranController extends Controller
{
$data['status'] = 'error';
$data['message'] ['check_file'] = array("Silahkan upload file");
}
} catch (Exception $e) {
$data['status'] = 'error';
$data['message'] ['message_error_try_catch'] = array('Proses Penawarn KJPP failed.');
}
}
} else {
$data['status'] = 'error';
$data['message'] ['message_ajax'] = array("no ajax request");
@@ -257,57 +256,52 @@ class ProsesPenawaranController extends Controller
$dataPenawaran = array();
$penawaran = PenawaranTender::find($id);
$checkActiveDateRange = checkActiveDateRangePenawaran($id);
// cek masa aktif penawaran
if($checkActiveDateRange)
{
$checkKelengkapanDetailKJPP = checkKelengkapanDetailKJPP($id);
$checkKelengkapanDetailKJPP = checkKelengkapanDetailKJPP($id);
if($checkKelengkapanDetailKJPP)
{
DB::beginTransaction();
try {
$dataPenawaran = ['status' => 'persetujuan-penawaran',
$_updatestatus = ['status' => 'proposal-tender',
'updated_by' => Auth::id(),
'updated_at' => now()
];
$dataPermohonan = ['status' => 'persetujuan-penawaran',
'updated_by' => Auth::id(),
'updated_at' => now()
];
$permohonan = Permohonan::where('nomor_registrasi','=', $penawaran->nomor_registrasi)->first();
$penawaran->update($dataPenawaran);
$permohonan->update($dataPermohonan);
$penawaran->update($_updatestatus);
$permohonan->update($_updatestatus);
DB::commit();
$data['message'] ['message_success'] = array('Sukses melakukan Proses Penawaran');
$data['status'] = 'success';
} catch (Exception $e) {
DB::rollBack();
// dd($e);
$data['message'] ['message_error_try_catch'] = array("Gagal melakukan Proses Penawaran");
$data['status'] = 'error';
}
}
else
{
$data['message'] ['cek_kelengkapan_data'] = array("Silahkan lengkapi data KJPP");
$data['status'] = 'error';
}
}
else
{
$data['message'] ['active_date_range'] = array("Penawaran sudah di tutup");
$data['status'] = 'error';
}
return response()->json($data);
}
@@ -326,12 +320,12 @@ class ProsesPenawaranController extends Controller
'updated_at' => now()
];
$detailpenawaran->update($dataDetailPenawaran);
$detailpenawaran->update($dataDetailPenawaran);
$data['status'] = 'success';
$data['message'] ['message_success'] = array('Sukses delete Penawaran KJPP '.$request->kjppName);
} catch (Exception $e) {
$data['status'] = 'error';
$data['message'] ['message_error_try_catch'] = array("Gagal delete Penawaran KJPP ".$request->kjppName);
}

View File

@@ -41,16 +41,16 @@ class ProsesPenawaranUlangController extends Controller
$query =PenawaranTender::query()
->select('penawaran.*',DB::raw("CONCAT(DATE_FORMAT(penawaran.start_date, '%d %M %Y'), ' - ', DATE_FORMAT(penawaran.end_date, '%d %M %Y')) AS date_range"), 'tujuan_penilaian_kjpp.name as tujuan_penilaian_kjpp_name')
->leftJoin('tujuan_penilaian_kjpp', 'tujuan_penilaian_kjpp.id','=','penawaran.tujuan_penilaian_kjpp_id')
->where('penawaran.status','=','persetujuan-penawaran')
->withCount('penawarandetails');
->where('penawaran.status','=','proposal-tender')
->withCount('penawarandetails');
// 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->orWhere('status', 'LIKE', '%' . $search . '%');
});
}
@@ -118,11 +118,11 @@ class ProsesPenawaranUlangController extends Controller
if (request()->ajax()) {
$id = $request->id;
$penawaran = PenawaranTender::where('status','=','persetujuan-penawaran')->find($id);
$penawaran = PenawaranTender::where('status','=','proposal-tender')->find($id);
if ($penawaran) {
$penawrandetails = PenawaranDetailTender::where('penawaran_id','=',$id)
->leftJoin('kjpp', 'kjpp.id', '=', 'detail_penawaran.kjpp_rekanan_id')
->leftJoin('kjpp', 'kjpp.id', '=', 'detail_penawaran.kjpp_rekanan_id')
->select('detail_penawaran.*', 'kjpp.code AS kjpp_code', 'kjpp.name AS kjpp_name')
->where('detail_penawaran.status','=',1)
->get();
@@ -143,7 +143,7 @@ class ProsesPenawaranUlangController extends Controller
{
$penawaranString = convertSlug($penawaran->status);
$penawaran->status = $penawaranString;
}
}
$data['penawaran'] = $penawaran;
$data['penawrandetails'] = $penawrandetails;
@@ -176,7 +176,7 @@ class ProsesPenawaranUlangController extends Controller
if ($validator['fails']) {
$data['message'] = $validator['errors'];
$data['status'] = 'error';
}
}
else
{
// cek masa aktif penawaran
@@ -187,7 +187,7 @@ class ProsesPenawaranUlangController extends Controller
{
DB::beginTransaction();
try {
$dataDetailPenawaranLog = [
'detail_penawaran_id' =>$detailpenawaran->id,
'kjpp_rekanan_id' =>$detailpenawaran->kjpp_rekanan_id,
@@ -201,15 +201,15 @@ class ProsesPenawaranUlangController extends Controller
'authorized_at' =>$detailpenawaran->authorized_at,
'created_at' =>$detailpenawaran->created_at,
'updated_at' =>$detailpenawaran->updated_at,
'deleted_at' =>$detailpenawaran->deleted_at,
'deleted_at' =>$detailpenawaran->deleted_at,
'created_by' =>$detailpenawaran->created_by,
'updated_by' =>$detailpenawaran->updated_by,
'deleted_by' =>$detailpenawaran->deleted_by
];
PenawaranDetailTenderLog::create($dataDetailPenawaranLog);
$biaya_penawaran="";
if($request->biaya_penawaran)
$biaya_penawaran= str_replace(".","",$request->biaya_penawaran);
@@ -222,9 +222,9 @@ class ProsesPenawaranUlangController extends Controller
{
$file_tmp = $request->file('dokumen_persetujuan');
$folderPath = 'uploads/penawaran/';
if ($file_tmp->isValid())
if ($file_tmp->isValid())
{
$myFile=$file_tmp->getClientOriginalName(); // nama file with extension
$myFile=$file_tmp->getClientOriginalName(); // nama file with extension
$file_name = pathinfo($myFile, PATHINFO_FILENAME); // nama file without extension
$extension = $file_tmp->getClientOriginalExtension();
@@ -247,9 +247,9 @@ class ProsesPenawaranUlangController extends Controller
{
$data['status'] = 'error';
$data['message']['check_file'] = array("Silahkan upload file");
}
$detailpenawaran->update($dataDetailPenawaran);
if($pleaseCommit)
@@ -279,7 +279,7 @@ class ProsesPenawaranUlangController extends Controller
$data['status'] = 'error';
$data['message']['active_date_range'] = array("Penawaran sudah di tutup");
}
}
} else {
@@ -288,7 +288,7 @@ class ProsesPenawaranUlangController extends Controller
}
return response()->json($data);
}
}
// delete KJPP di detail_penawaran (status di buat 0)
public function updateKJPPStatus(Request $request, $id): JsonResponse
@@ -316,16 +316,16 @@ class ProsesPenawaranUlangController extends Controller
'authorized_at' =>$model->authorized_at,
'created_at' =>$model->created_at,
'updated_at' =>$model->updated_at,
'deleted_at' =>$model->deleted_at,
'deleted_at' =>$model->deleted_at,
'created_by' =>$model->created_by,
'updated_by' =>$model->updated_by,
'deleted_by' =>$model->deleted_by
];
PenawaranDetailTenderLog::create($dataDetailPenawaranLog);
// log
$data['id']=$id;
$dataku = ['status' => '0',
@@ -333,7 +333,7 @@ class ProsesPenawaranUlangController extends Controller
'updated_at' => now()
];
$model->update($dataku);
$model->update($dataku);
DB::commit();
$data['status'] = 'success';

View File

@@ -167,6 +167,8 @@
$dataku['jenis_penilaian_id'] =$request->jenis_penilaian;
$dataku['region_id'] =$request->region;
$dataku['status'] = 'registered';
if($request->catatan2)
$dataku['registrasi_catatan'] =$request->catatan2;
}
else
{

View File

@@ -3,10 +3,19 @@
namespace Modules\Lpj\Http\Controllers;
use App\Http\Controllers\Controller;
use Carbon\Carbon;
use Exception;
use Carbon\Carbon;
use Exception;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Facades\Validator;
use Maatwebsite\Excel\Facades\Excel;
use Modules\Lpj\Models\PenawaranTender;
use Modules\Lpj\Models\Permohonan;
use Modules\Lpj\Models\Regions;
// use Modules\Location\Models\City;
// use Modules\Location\Models\District;
// use Modules\Location\Models\Province;
@@ -20,15 +29,6 @@ use Exception;
// use Modules\Lpj\Models\JenisJaminan;
// use Modules\Lpj\Models\JenisLegalitasJaminan;
// use Modules\Lpj\Models\PemilikJaminan;
use Modules\Lpj\Models\Permohonan;
use Modules\Lpj\Models\JenisPenilaian;
use Modules\Lpj\Models\Regions;
use Illuminate\Http\JsonResponse;
use Illuminate\Support\Facades\Validator;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;
use Modules\Lpj\Models\PenawaranTender;
class RegistrasiFinalController extends Controller
{
@@ -46,19 +46,20 @@ use Modules\Lpj\Models\PenawaranTender;
}
// Retrieve data from the database
$query =PenawaranTender::query()
->select('penawaran.*', 'tujuan_penilaian_kjpp.name as tujuan_penilaian_kjpp_name')
->leftJoin('tujuan_penilaian_kjpp', 'tujuan_penilaian_kjpp.id','=','penawaran.tujuan_penilaian_kjpp_id')
->where('penawaran.status','=','spk')
->withCount('penawarandetails');
$query = PenawaranTender::with(['permohonan', 'tujuanPenilaianKjpp'])->whereHas(
'permohonan',
function ($q) {
$q->where('status', '=', 'spk');
},
)->withCount('penawarandetails');
// 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->orWhere('status', 'LIKE', '%' . $search . '%');
});
}
@@ -84,30 +85,28 @@ use Modules\Lpj\Models\PenawaranTender;
// Get the filtered count of records
$filteredRecords = $query->count();
// Get the data for the current page
//$data = $query->with(['user', 'debiture', 'branch', 'tujuanPenilaian'])->get();
$data = $query->get();
$data = $query->with(['permohonan'])->get();
// dd($data);
$i=0;
foreach($data as $obj)
{
if($obj->tanggal_penilaian_sebelumnya)
{
$data[$i]->tanggal_penilaian_sebelumnya = Carbon::parse($obj->tanggal_penilaian_sebelumnya)->format('d F Y H:i:s');
$i = 0;
foreach ($data as $obj) {
if ($obj->tanggal_penilaian_sebelumnya) {
$data[$i]->tanggal_penilaian_sebelumnya = Carbon::parse($obj->tanggal_penilaian_sebelumnya)->format(
'd F Y H:i:s',
);
}
if($obj->biaya_kjpp_sebelumnya)
{
if ($obj->biaya_kjpp_sebelumnya) {
$data[$i]->biaya_kjpp_sebelumnya = formatRupiah($obj->biaya_kjpp_sebelumnya);
}
// date_range
if($obj->start_date && $obj->end_date)
{
$data[$i]->date_range = Carbon::parse($obj->start_date)->format('d M Y').' - '.Carbon::parse($obj->end_date)->format('d M Y');
if ($obj->start_date && $obj->end_date) {
$data[$i]->date_range = Carbon::parse($obj->start_date)->format('d M Y') . ' - ' . Carbon::parse(
$obj->end_date,
)->format('d M Y');
}
$i++;
@@ -128,14 +127,20 @@ use Modules\Lpj\Models\PenawaranTender;
'pageCount' => $pageCount,
'page' => $currentPage,
'totalCount' => $totalRecords,
'data' => $data
'data' => $data,
]);
}
public function show($id)
{
$permohonan = Permohonan::find($id);
return view('lpj::registrasifinal.show', compact('id','permohonan'));
$permohonan = Permohonan::find($id);
if ($permohonan->dokumen) {
$pdfSPK_path = Storage::url($permohonan->dokumen);
$permohonan->dokumen = $pdfSPK_path;
$permohonan->dokumen = '| <a download href="' . $pdfSPK_path . '" class="badge badge-sm badge-outline" target="_blank">Dokumen SPK.pdf &nbsp;&nbsp;<i class="ki-filled ki-cloud-download"></i></a>';
}
return view('lpj::registrasifinal.show', compact('id', 'permohonan'));
}
public function edit($id)
@@ -143,123 +148,123 @@ use Modules\Lpj\Models\PenawaranTender;
return view('lpj::registrasifinal.edit', compact('id'));
}
public function setData(Request $request): JsonResponse
{
$data = array();
$datas = array();
public function setData(Request $request)
: JsonResponse {
$data = [];
$datas = [];
if (request()->ajax()) {
$id = $request->id;
$id = $request->id;
$datas = Permohonan::find($id);
if ($datas) {
$penawaran=null;
$regions=null;
$regions=Regions::pluck('name', 'id');
$penawaran = PenawaranTender::where('nomor_registrasi','=',$datas->nomor_registrasi)->first();
$penawaran = null;
$regions = null;
$regions = Regions::pluck('name', 'id');
$penawaran = PenawaranTender::where('nomor_registrasi', '=', $datas->nomor_registrasi)->first();
$penawaranString = "";
if($penawaran->status)
{
$penawaranString = convertSlug($penawaran->status);
if ($penawaran->status) {
$penawaranString = convertSlug($penawaran->status);
$penawaran->status = $penawaranString;
}
}
$data['status'] = 'success';
$data['regions'] = $regions;
$data['penawaran'] = $penawaran;
$data['datas'] = $datas;
$data['message']['message_success'] = array("data successfully found");
if ($datas->dokumen) {
$pdfSPK_path = Storage::url($datas->dokumen);
$datas->dokumen = $pdfSPK_path;
}
$data['status'] = 'success';
$data['regions'] = $regions;
$data['penawaran'] = $penawaran;
$data['datas'] = $datas;
$data['message']['message_success'] = ["data successfully found"];
} else {
$data['status'] = 'error';
$data['datas'] = null;
$data['message']['message_data'] = array("data not found");
$data['status'] = 'error';
$data['datas'] = null;
$data['message']['message_data'] = ["data not found"];
}
} else {
$data['status'] = 'error';
$data['message']['message_ajax'] = array("no ajax request");
$data['status'] = 'error';
$data['message']['message_ajax'] = ["no ajax request"];
}
return response()->json($data);
}
public function update(Request $request, $id): JsonResponse
{
public function update(Request $request, $id)
: JsonResponse {
// init
$data = array();
$dataPermohonan = array();
$dataPenawaran = array();
$data = [];
$dataPermohonan = [];
$dataPenawaran = [];
if (request()->ajax()) {
$validator = RegistrasiFinalController::rulesEditnya($request, $id);
if ($validator['fails']) {
$data['message'] = $validator['errors'];
$data['status'] = 'error';
}
else
{
$data['status'] = 'error';
} else {
DB::beginTransaction();
try {
// update table permohonan => status (registrasi-final), region_id, keterangan, authorized_at, authorized_status, authorized_by
// update table penawaran => status (registrasi-final)
$dataPermohonan = [
'status' => 'registrasi-final',
'region_id' => $request->region,
'keterangan' => $request->catatan,
'authorized_at' => now(),
'authorized_status' =>1,
'authorized_by' => Auth::id()
];
'status' => 'registrasi-final',
'region_id' => $request->region,
'keterangan' => $request->catatan,
'authorized_at' => now(),
'authorized_status' => 1,
'authorized_by' => Auth::id(),
];
$dataPenawaran = ['status' => 'registrasi-final'];
$permohonan = Permohonan::find($id);
$penawaran = PenawaranTender::where('nomor_registrasi','=',$permohonan->nomor_registrasi)->first();
$penawaran = PenawaranTender::where('nomor_registrasi', '=', $permohonan->nomor_registrasi)
->first();
$permohonan->update($dataPermohonan);
$penawaran->update($dataPenawaran);
//
//
DB::commit();
$data['status'] = 'success';
$data['message']['message_success'] = array('Regitrasi Final '.$permohonan->nomor_registrasi.' successfully');
$data['status'] = 'success';
$data['message']['message_success'] = ['Regitrasi Final ' . $permohonan->nomor_registrasi . ' successfully'];
} catch (Exception $e) {
DB::rollBack();
$data['status'] = 'error';
$data['message']['message_try_catch'] = array('Regitrasi Final '.$permohonan->nomor_registrasi.' failed.');
$data['status'] = 'error';
$data['message']['message_try_catch'] = ['Regitrasi Final ' . $permohonan->nomor_registrasi . ' failed.'];
}
}
} else {
$data['status'] = 'error';
$data['message']['message_ajax'] = array("no ajax request");
$data['status'] = 'error';
$data['message']['message_ajax'] = ["no ajax request"];
}
return response()->json($data);
}
public function rulesEditnya($request, $id)
{
$validate_catatan='';
$validate_catatan = '';
$validateIt = [
// 'name' diambil dari definisi parameter yang di kirim pada POST Data
'region' => 'required',
'region' => 'required',
'catatan' => 'required',
];
$messageIt = [
'region.required' => 'Silahkan pilih Region',
'catatan.required' => 'Silahkan isi Catatan'
'region.required' => 'Silahkan pilih Region',
'catatan.required' => 'Silahkan isi Catatan',
];
$validator = Validator::make($request->all(), $validateIt, $messageIt);
$data['fails'] = $validator->fails();
$data['fails'] = $validator->fails();
$data['errors'] = $validator->errors();
return $data;

View File

@@ -0,0 +1,65 @@
<?php
namespace Modules\Lpj\Http\Controllers;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
class SLAController extends Controller
{
/**
* Display a listing of the resource.
*/
public function index()
{
return view('lpj::SLA.index');
}
/**
* Show the form for creating a new resource.
*/
public function create()
{
return view('lpj::create');
}
/**
* Store a newly created resource in storage.
*/
public function store(Request $request)
{
//
}
/**
* Show the specified resource.
*/
public function show($id)
{
return view('lpj::show');
}
/**
* Show the form for editing the specified resource.
*/
public function edit($id)
{
return view('lpj::edit');
}
/**
* Update the specified resource in storage.
*/
public function update(Request $request, $id)
{
//
}
/**
* Remove the specified resource from storage.
*/
public function destroy($id)
{
//
}
}

View File

@@ -1,14 +1,22 @@
<?php
namespace Modules\Lpj\Http\Controllers;
namespace Modules\Lpj\Http\Controllers;
use App\Http\Controllers\Controller;
use Exception;
use Illuminate\Http\Request;
use Maatwebsite\Excel\Facades\Excel;
// use Modules\Lpj\Exports\TujuanPenilaianExport;
// use Modules\Lpj\Http\Requests\TujuanPenilaianRequest;
// use Modules\Lpj\Models\TujuanPenilaian;
use Carbon\Carbon;
use App\Http\Controllers\Controller;
use Barryvdh\DomPDF\Facade\Pdf; // https://github.com/barryvdh/laravel-dompdf
use Exception;
use Illuminate\Http\Request;
use Maatwebsite\Excel\Facades\Excel;
// use Modules\Lpj\Exports\TujuanPenilaianExport;
// use Modules\Lpj\Http\Requests\TujuanPenilaianRequest;
// use Modules\Lpj\Models\TujuanPenilaian;
use Modules\Lpj\Models\PenawaranTender;
use Illuminate\Support\Facades\DB;
use Modules\Lpj\Models\Permohonan;
use Illuminate\Http\JsonResponse;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Facades\Auth;
class SpkController extends Controller
{
@@ -19,10 +27,223 @@
return view('lpj::spk.index');
}
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()->with(['penawaran','penawaran.tujuanPenilaianKjpp'])
->where('permohonan.status','=','spk');
// 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->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();
// 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'])->get();
$data = $query->get();
$i=0;
foreach($data as $obj)
{
if($obj->tanggal_penilaian_sebelumnya)
{
$data[$i]->tanggal_penilaian_sebelumnya = Carbon::parse($obj->tanggal_penilaian_sebelumnya)->format('d F Y H:i:s');
}
if($obj->biaya_kjpp_sebelumnya)
{
$data[$i]->biaya_kjpp_sebelumnya = formatRupiah($obj->biaya_kjpp_sebelumnya);
}
// date_range
if($obj->start_date && $obj->end_date)
{
$data[$i]->date_range = Carbon::parse($obj->start_date)->format('d M Y').' - '.Carbon::parse($obj->end_date)->format('d M Y');
}
// data dokumen_spk
if($obj->dokumen)
{
$spkpenawaran_path = Storage::url($obj->dokumen);
// dd($spkpenawaran_path);
$data[$i]->dokumen = $spkpenawaran_path;
}
$i++;
}
// Calculate the page count
$pageCount = ceil($totalRecords / $request->get('size'));
// Calculate the current page number
$currentPage = 0 + 1;
// Return the response data as a JSON object
return response()->json([
'draw' => $request->get('draw'),
'recordsTotal' => $totalRecords,
'recordsFiltered' => $filteredRecords,
'pageCount' => $pageCount,
'page' => $currentPage,
'totalCount' => $totalRecords,
'data' => $data
]);
}
public function viewSpk()
{
// return Excel::download(new TujuanPenilaianExport, 'tujuan_penilaian.xlsx');
return view('lpj::spk.view');
}
public function show($id)
{
$penawaran = PenawaranTender::find($id);
// return view('lpj::spk.show', compact('id','permohonan'));
}
public function edit($id)
{
$penawaran = PenawaranTender::leftJoin('detail_penawaran', 'detail_penawaran.penawaran_id','=','penawaran.id')
->leftJoin('jenis_laporan', 'jenis_laporan.id','=','penawaran.jenis_laporan_id')
->leftJoin('kjpp', 'kjpp.id','=','detail_penawaran.kjpp_rekanan_id')
->where('detail_penawaran.status','=',1)
->where('penawaran.id','=', $id)
->select('penawaran.*', 'detail_penawaran.attachment as attachmentku',
'detail_penawaran.biaya_penawaran as detail_penawaran_biaya_penawaran',
'kjpp.name as kjpp_name',
'kjpp.address as kjpp_address',
'jenis_laporan.name as jenis_laporan_name'
)->first();
$permohonan = Permohonan::where('nomor_registrasi','=',$penawaran->nomor_registrasi)
->leftJoin('dokumen_jaminan', 'dokumen_jaminan.permohonan_id','=','permohonan.id')
->leftJoin('jenis_jaminan', 'jenis_jaminan.id','=','dokumen_jaminan.jenis_jaminan_id')
->select('permohonan.*', 'jenis_jaminan.name as jenis_jaminan_name',
'dokumen_jaminan.address as dokumen_jaminan_address');
$data = $permohonan->with(['user', 'debiture', 'branch', 'tujuanPenilaian'])->first();
return view('lpj::spk.edit', compact('data', 'penawaran'));
}
public function update(Request $request, $id): JsonResponse
{
// init
$data1 = array();
$dataPermohonan = array();
// data
$penawaran = PenawaranTender::leftJoin('detail_penawaran', 'detail_penawaran.penawaran_id','=','penawaran.id')
->leftJoin('jenis_laporan', 'jenis_laporan.id','=','penawaran.jenis_laporan_id')
->leftJoin('kjpp', 'kjpp.id','=','detail_penawaran.kjpp_rekanan_id')
->where('detail_penawaran.status','=',1)
->where('penawaran.id','=', $id)
->select('penawaran.*', 'detail_penawaran.attachment as attachmentku',
'kjpp.name as kjpp_name',
'kjpp.address as kjpp_address',
'jenis_laporan.name as jenis_laporan_name'
)->first();
$permohonan = Permohonan::where('nomor_registrasi','=',$penawaran->nomor_registrasi)
->leftJoin('dokumen_jaminan', 'dokumen_jaminan.permohonan_id','=','permohonan.id')
->leftJoin('jenis_jaminan', 'jenis_jaminan.id','=','dokumen_jaminan.jenis_jaminan_id')
->select('permohonan.*', 'jenis_jaminan.name as jenis_jaminan_name');
$data = $permohonan->with(['user', 'debiture', 'branch', 'tujuanPenilaian'])->first();
$folderPath = 'uploads/spk/';
$extension = '.pdf';
$newFileName = "SPK_".$penawaran->nomor_registrasi."_".Auth::user()->id."_".time(). $extension;
$newFileNameWithPath = $folderPath . $newFileName;
// update table permohonan
$dataPermohonan=['dokumen' => $newFileNameWithPath];
$data->update($dataPermohonan);
// update table permohonan
// pdf path
$spkpenawaran_path = Storage::url($newFileNameWithPath);
$pdf =Pdf::loadView('lpj::spk.documentSPK', compact('data', 'penawaran'));
$content = $pdf->download()->getOriginalContent();
Storage::put('public/'.$newFileNameWithPath,$content);
$data1['status'] = 'success';
$data1['spkpenawaran_path'] = $spkpenawaran_path;
$data1['message']['message_success'] = array('Generate SPK PDF successfully');
return response()->json($data1);
}
public function dokumennya()
{
// return view('lpj::spk.dokumennya');
$id="3";
$penawaran = PenawaranTender::leftJoin('detail_penawaran', 'detail_penawaran.penawaran_id','=','penawaran.id')
->leftJoin('jenis_laporan', 'jenis_laporan.id','=','penawaran.jenis_laporan_id')
->leftJoin('kjpp', 'kjpp.id','=','detail_penawaran.kjpp_rekanan_id')
->where('detail_penawaran.status','=',1)
->where('penawaran.id','=', $id)
->select('penawaran.*', 'detail_penawaran.attachment as attachmentku',
'detail_penawaran.biaya_penawaran as detail_penawaran_biaya_penawaran',
'kjpp.name as kjpp_name',
'kjpp.address as kjpp_address',
'jenis_laporan.name as jenis_laporan_name'
)->first();
$permohonan = Permohonan::where('nomor_registrasi','=',$penawaran->nomor_registrasi)
->leftJoin('dokumen_jaminan', 'dokumen_jaminan.permohonan_id','=','permohonan.id')
->leftJoin('jenis_jaminan', 'jenis_jaminan.id','=','dokumen_jaminan.jenis_jaminan_id')
->select('permohonan.*', 'jenis_jaminan.name as jenis_jaminan_name',
'dokumen_jaminan.address as dokumen_jaminan_address');
$data = $permohonan->with(['user', 'debiture', 'branch', 'tujuanPenilaian'])->first();
return view('lpj::spk.dokumennya', compact('data', 'penawaran'));
}
public function download($id) {
$document = Permohonan::find($id);
return response()->download(storage_path('app/public/' .$document->dokumen));
}
}

View File

@@ -6,6 +6,7 @@ use App\Http\Controllers\Controller;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Auth;
use Illuminate\Http\Response;
use Modules\Lpj\Models\Permohonan;
use Modules\Lpj\Models\Branch;
@@ -32,9 +33,14 @@ use Modules\Lpj\Models\Denah;
use Modules\Lpj\Models\FotoJaminan;
use Modules\Lpj\Models\Lingkungan;
use Modules\Lpj\Models\LantaiUnit;
use Modules\Lpj\Models\Lantai;
use Modules\Lpj\Models\ViewUnit;
use Modules\Lpj\Models\ObjekJaminan;
use Modules\Lpj\Models\RuteJaminan;
use Modules\Lpj\Models\AnalisaUnit;
use Modules\Lpj\Models\GolonganMasySekitar;
use Modules\Lpj\Models\TingkatKeramaian;
use Modules\Lpj\Models\LaluLintasLokasi;
use Modules\Lpj\Models\SpekBagunanAnalisaDetail;
use Modules\Lpj\Http\Requests\SurveyorRequest;
use Modules\Lpj\Http\Requests\FormSurveyorRequest;
@@ -42,6 +48,7 @@ use Modules\Lpj\Http\Requests\FormSurveyorRequest;
class SurveyorController extends Controller
{
public $user;
/**
* Display a listing of the resource.
*/
@@ -113,6 +120,8 @@ class SurveyorController extends Controller
->where('permohonan_id', $id)
->get();
return view('lpj::surveyor.detail', compact(
'buttonDisable',
'fotojaminan',
@@ -508,6 +517,11 @@ class SurveyorController extends Controller
$query->whereRaw('LOWER(status) = ?', ['assign']);
$query->whereHas('region.teams.teamsUsers.user', function ($q) {
$q->where('id', Auth::user()->id);
});
if ($request->has('sortOrder') && !empty($request->get('sortOrder'))) {
$order = $request->get('sortOrder');
$column = $request->get('sortField');
@@ -552,6 +566,8 @@ class SurveyorController extends Controller
{
$permohonan = $this->getPermohonanJaminanId($id, $jaminanId);
$branches = Branch::all();
$provinces = Province::all();
@@ -570,6 +586,11 @@ class SurveyorController extends Controller
$spekBangunan = SpekBangunan::all();
$saranaPelengkap = SaranaPelengkap::all();
$arahMataAngin = ArahMataAngin::all();
$lantai = Lantai::all();
$viewUnit = ViewUnit::all();
$golMasySekitar = GolonganMasySekitar::all();
$tingkatKeramaian = TingkatKeramaian::all();
$laluLintasLokasi = LaluLintasLokasi::all();
$analisa = Analisa::with('analisaTanahBangunan', 'analisaLingkungan', 'analisaFakta', 'jenisJaminan')
@@ -597,6 +618,11 @@ class SurveyorController extends Controller
'spekBangunan',
'saranaPelengkap',
'arahMataAngin',
'lantai',
'viewUnit',
'golMasySekitar',
'tingkatKeramaian',
'laluLintasLokasi'
));
}
@@ -625,10 +651,6 @@ class SurveyorController extends Controller
$provinces = Province::all();
$fotoJaminan = FotoJaminan::with(['objekJaminan', 'lantaiUnit' ,'ruteJaminan', 'lingkungan'])->where('permohonan_id', $id)->where('jenis_jaminan_id', $jaminanId)->first();
// return response()->json([
// 'data' => $fotoJaminan,
// ]);
return view('lpj::surveyor.components.foto', compact('permohonan', 'surveyor', 'branches', 'provinces', 'fotoJaminan'));
}
@@ -658,25 +680,18 @@ class SurveyorController extends Controller
}
private function getHeader(string $type): array
{
return self::HEADERS[$type] ?? [];
}
public function data(Request $request)
{
$type = $request->route('type');
$headers = [
'bentuk-tanah' => ['Bentuk Tanah', 'bentuk-tanah'],
'kontur-tanah' => ['Kontur Tanah', 'kontur-tanah'],
'posisi-kavling' => ['Posisi Kavling', 'posisi-kavling'],
'ketinggian-tanah' => ['Ketinggian Tanah', 'ketinggian-tanah'],
'kondisi-fisik-tanah' => ['Kondisi Fisik Tanah', 'kondisi-fisik-tanah'],
'jenis-bangunan' => ['Jenis Bangunan', 'jenis-bangunan'],
'kondisi-bangunan' => ['Kondisi Bangunan', 'kondisi-bangunan'],
'sifat-bangunan' => ['Sifat Bangunan', 'sifat-bangunan'],
'sarana-pelengkap' => ['Sarana Pelengkap', 'sarana-pelengkap'],
];
$header = $headers[$type] ?? '';
$header = $this->getHeader($request->route('type'));
return view('lpj::surveyor.data.index', compact('header'));
}
@@ -684,21 +699,9 @@ class SurveyorController extends Controller
public function createData($type)
{
$headers = [
'bentuk-tanah' => ['Bentuk Tanah', 'bentuk-tanah'],
'kontur-tanah' => ['Kontur Tanah', 'kontur-tanah'],
'posisi-kavling' => ['Posisi Kavling', 'posisi-kavling'],
'ketinggian-tanah' => ['Ketinggian Tanah', 'ketinggian-tanah'],
'kondisi-fisik-tanah' => ['Kondisi Fisik Tanah', 'kondisi-fisik-tanah'],
'jenis-bangunan' => ['Jenis Bangunan', 'jenis-bangunan'],
'kondisi-bangunan' => ['Kondisi Bangunan', 'kondisi-bangunan'],
'sifat-bangunan' => ['Sifat Bangunan', 'sifat-bangunan'],
'sarana-pelengkap' => ['Sarana Pelengkap', 'sarana-pelengkap'],
];
$header = $headers[$type] ?? '';
return view('lpj::surveyor.data.form', compact('header'));
$spekKategoriBagunan = SpekKategoritBangunan::all();
$header = $this->getHeader($type);
return view('lpj::surveyor.data.form', compact('header', 'spekKategoriBagunan'));
}
@@ -708,37 +711,37 @@ class SurveyorController extends Controller
$validate = $request->validated();
if ($validate) {
$type = $request->route('type');
try {
$type = $request->route('type');
$modelClasses = [
'bentuk-tanah' => BentukTanah::class,
'kontur-tanah' => KonturTanah::class,
'posisi-kavling' => PosisiKavling::class,
'bentuk-tanah' => BentukTanah::class,
'kontur-tanah' => KonturTanah::class,
'posisi-kavling' => PosisiKavling::class,
'ketinggian-tanah' => KetinggianTanah::class,
'kondisi-fisik-tanah' => KondisiFisikTanah::class,
'jenis-bangunan' => JenisBangunan::class,
'kondisi-bangunan' => KondisiBangunan::class,
'sifat-bangunan' => SifatBangunan::class,
'sarana-pelengkap' => SaranaPelengkap::class,
];
$modelClass = $this->getModelClass($type);
if (!array_key_exists($type, $modelClasses)) {
if (!$modelClass) {
return redirect()
->route('basicdata.'. $type .'.index')
->with('error', 'Invalid type specified.');
}
$modelClass = $modelClasses[$type];
$data = $request->all();
$data['status'] = true;
if ($type == 'spek-bangunan') {
$validate['spek_kategori_bagunan_id'] = $request->spek_kategori_bagunan_id;
}
$data = array_merge($validate, ['status' => true]);
$modelClass::create($data);
return redirect()
->route('basicdata.' . $type .'.index')
->with('success', 'created successfully');
} catch (Exeception $e) {
return response()->json(array('error' => $e->getMessage()), 400);
// return redirect()
// ->route('basicdata.' . $type .'.index')
// ->with('error', $th->getMessage());
}
}
}
@@ -757,6 +760,9 @@ class SurveyorController extends Controller
'spek-bangunan' => ['Spek Bangunan', 'spek-bangunan', SpekBangunan::class],
'spek-kategori-bangunan' => ['Spek Kategori Bangunan', 'spek-kategori-bangunan', SpekKategoritBangunan::class],
'sarana-pelengkap' => ['Sarana Pelengkap', 'sarana-pelengkap', SaranaPelengkap::class],
'lantai-unit' => ['Lantai Unit', 'lantai-unit', Lantai::class],
'view-unit' => ['View Unit', 'view-unit', ViewUnit::class],
'gol-mas-sekitar' => ['Golongan Masyarakat Sekitar', 'gol-mas-sekitar', GolonganMasySekitar::class],
];
@@ -769,7 +775,13 @@ class SurveyorController extends Controller
$header = $dataMap[$type] ?? '';
$model = $modelClass::findOrFail($id);
return view('lpj::surveyor.data.form', compact('header', 'model'));
if ($type == 'spek-bangunan') {
$spekKategoriBagunan = SpekKategoritBangunan::all();
}
return view('lpj::surveyor.data.form', compact('header', 'model', 'spekKategoriBagunan'));
}
@@ -777,26 +789,22 @@ class SurveyorController extends Controller
{
$validate = $request->validated();
if ($validate) {
$modelClasses = [
'bentuk-tanah' => BentukTanah::class,
'kontur-tanah' => KonturTanah::class,
'posisi-kavling' => PosisiKavling::class,
'ketinggian-tanah' => KetinggianTanah::class,
'kondisi-fisik-tanah' => KondisiFisikTanah::class,
'jenis-bangunan' => JenisBangunan::class,
'kondisi-bangunan' => KondisiBangunan::class,
'sifat-bangunan' => SifatBangunan::class,
'sarana-pelengkap' => SaranaPelengkap::class,
$modelClass = $this->getModelClass($type);
];
if ($type == 'spek-bangunan') {
$validate['spek_kategori_bagunan_id'] = $request->spek_kategori_bagunan_id;
}
// Check if the provided type exists in the modelClasses
if (!array_key_exists($type, $modelClasses)) {
if (!$modelClass) {
return redirect()
->route('basicdata.' . $type . '.index')
->with('error', 'Invalid type specified.');
}
$modelClass = $modelClasses[$type];
$model = $modelClass::findOrFail($id);
$model->update($validate);
@@ -817,8 +825,6 @@ class SurveyorController extends Controller
//abort(403, 'Sorry! You are not allowed to view users.');
}
// Retrieve data from the database
$models = [
'Bentuk Tanah' => BentukTanah::class,
'Kontur Tanah' => KonturTanah::class,
@@ -828,9 +834,14 @@ class SurveyorController extends Controller
'Jenis Bangunan' => JenisBangunan::class,
'Kondisi Bangunan' => KondisiBangunan::class,
'Sifat Bangunan' => SifatBangunan::class,
// 'Spek Kategori Bangunan' => SpekKategoritBangunan::class,
// 'Spek Bangunan' => SpekBangunan::class,
'Spek Kategori Bangunan' => SpekKategoritBangunan::class,
'Spek Bangunan' => SpekBangunan::class,
'Sarana Pelengkap' => SaranaPelengkap::class,
'Lalu Lintas Depan Lokasi' => LaluLintasLokasi::class,
'Tingkat Keramaian' => TingkatKeramaian::class,
'Golongan Masyarakat Sekitar' => GolonganMasySekitar::class,
'Lantai Unit' => Lantai::class,
'View Unit' => ViewUnit::class,
];
@@ -840,8 +851,6 @@ class SurveyorController extends Controller
throw new InvalidArgumentException("Invalid type: $type");
}
// Apply search filter if provided
if ($request->has('search') && !empty($request->get('search'))) {
$search = $request->get('search');
$query->where(function ($q) use ($search) {
@@ -897,24 +906,13 @@ class SurveyorController extends Controller
{
try {
$modelClasses = [
'bentuk-tanah' => BentukTanah::class,
'kontur-tanah' => KonturTanah::class,
'posisi-kavling' => PosisiKavling::class,
'ketinggian-tanah' => KetinggianTanah::class,
'kondisi-fisik-tanah' => KondisiFisikTanah::class,
'jenis-bangunan' => JenisBangunan::class,
'kondisi-bangunan' => KondisiBangunan::class,
'sifat-bangunan' => SifatBangunan::class,
'sarana-pelengkap' => SaranaPelengkap::class,
];
$modelClass = $this->getModelClass($type);
if (!array_key_exists($type, $modelClasses)) {
if (!$modelClass) {
return response()->json(['success' => false, 'message' => 'Invalid type specified.'], 400);
}
$modelClass = $modelClasses[$type];
$model = $modelClass::findOrFail($id);
$model->delete();
@@ -948,6 +946,55 @@ class SurveyorController extends Controller
->findOrFail($id);
}
public function submitSurveyor(Request $request, $id)
{
$permohonan = Permohonan::find($id);
$permohonan->update([
'status' => 'done',
]);
return redirect()
->route('surveyor.index')
->with('success', 'form surveyor submitted successfully');
}
public function validateSubmit(){
}
private function getModelClass(string $type): ?string
{
return $this->modelClasses[$type] ?? null;
}
private $modelClasses = [
'bentuk-tanah' => BentukTanah::class,
'kontur-tanah' => KonturTanah::class,
'posisi-kavling' => PosisiKavling::class,
'ketinggian-tanah' => KetinggianTanah::class,
'kondisi-fisik-tanah' => KondisiFisikTanah::class,
'jenis-bangunan' => JenisBangunan::class,
'kondisi-bangunan' => KondisiBangunan::class,
'sifat-bangunan' => SifatBangunan::class,
'sarana-pelengkap' => SaranaPelengkap::class,
'lalu-lintas-lokasi' => LaluLintasLokasi::class,
'tingkat-keramaian' => TingkatKeramaian::class,
'gol-mas-sekitar' => GolonganMasySekitar::class,
'spek-kategori-bangunan' => SpekKategoritBangunan::class,
'spek-bangunan' => SpekBangunan::class,
'lantai-unit' => Lantai::class,
'view-unit' => ViewUnit::class,
];
private function getCommonData()
{
return [
@@ -964,21 +1011,34 @@ class SurveyorController extends Controller
'spekKategoriBangunan' => SpekKategoritBangunan::all(),
'spekBangunan' => SpekBangunan::all(),
'saranaPelengkap' => SaranaPelengkap::all(),
'arahMataAngin' => ArahMataAngin::all()
'arahMataAngin' => ArahMataAngin::all(),
'lantai' => Lantai::all(),
'viewUnit' => ViewUnit::all(),
'golMasySekitar' => GolonganMasySekitar::all(),
'tingkatKeramaian' => TingkatKeramaian::all(),
'laluLintasLokasi' => LaluLintasLokasi::all(),
];
}
public function submitSurveyor(Request $request, $id)
{
$permohonan = Permohonan::find($id);
$permohonan->update([
'status' => 'done',
]);
return redirect()
->route('surveyor.index')
->with('success', 'form surveyor submitted successfully');
}
private const HEADERS = [
'bentuk-tanah' => ['Bentuk Tanah', 'bentuk-tanah'],
'kontur-tanah' => ['Kontur Tanah', 'kontur-tanah'],
'posisi-kavling' => ['Posisi Kavling', 'posisi-kavling'],
'ketinggian-tanah' => ['Ketinggian Tanah', 'ketinggian-tanah'],
'kondisi-fisik-tanah' => ['Kondisi Fisik Tanah', 'kondisi-fisik-tanah'],
'jenis-bangunan' => ['Jenis Bangunan', 'jenis-bangunan'],
'kondisi-bangunan' => ['Kondisi Bangunan', 'kondisi-bangunan'],
'sifat-bangunan' => ['Sifat Bangunan', 'sifat-bangunan'],
'sarana-pelengkap' => ['Sarana Pelengkap', 'sarana-pelengkap'],
'lalu-lintas-lokasi' => ['Lalu Lintas Depan Lokasi', 'lalu-lintas-lokasi'],
'tingkat-keramaian' => ['Tingkat Keramaian', 'tingkat-keramaian'],
'gol-mas-sekitar' => ['Golongan Masyarakat Sekitar', 'gol-mas-sekitar'],
'spek-kategori-bangunan' => ['Spek Kategori Bangunan', 'spek-kategori-bangunan'],
'spek-bangunan' => ['Spek Bangunan', 'spek-bangunan'],
'lantai-unit' => ['Lantai Unit', 'lantai-unit'],
'view-unit' => ['View Unit', 'view-unit'],
];
}

View File

@@ -31,20 +31,25 @@ class TeamsController extends Controller
* Show the form for creating a new resource.
*/
public function create()
{
{
// cek region apakah sudah ada di tabel teams
$regionTeam = Teams::pluck('regions_id')->toArray();
$region = Regions::whereNotIn('id', $regionTeam)->get();
$regionTeam = Teams::pluck('regions_id')->toArray();
// cek user apakah sudah ada di tabel teams_users
$userTeam = TeamsUsers::pluck('user_id')->toArray();
$user = User::whereNotIn('id', $userTeam)
->with('roles')
->get();
$regions = Regions::whereNotIn('id', $regionTeam)->get();
return view('lpj::teams.form', compact('region', 'user'));
}
$userTeam = TeamsUsers::pluck('user_id')->toArray();
$usersWithRole = User::whereNotIn('id', $userTeam)
->with('roles') // Eager load roles
->get();
$user = $usersWithRole->filter(function ($user) {
return $user->roles->contains(function ($role) {
return $role->name === 'surveyor' || $role->name === 'surveyor-penilai' || $role->name === 'senior-officer';
});
});
return view('lpj::teams.form', compact('regions', 'user'));
}
/**
* Store a newly created resource in storage.
@@ -97,16 +102,23 @@ class TeamsController extends Controller
{
$teams = Teams::find($id);
$region = Regions::all();
$regions = Regions::all();
$usedUsers = TeamsUsers::where('teams_id', '!=', $id)->pluck('user_id')->toArray();
$user = User::whereNotIn('id', $usedUsers)
$usersWithRole = User::whereNotIn('id', $usedUsers)
->with('roles')
->get();
$user = $usersWithRole->filter(function ($user) {
return $user->roles->contains(function ($role) {
return $role->name === 'surveyor' || $role->name === 'surveyor-penilai' || $role->name === 'senior-officer';
});
});
// Ambil user yang sudah ada di tim ini
$selectedUsers = $teams->teamsUsers->pluck('user_id')->toArray();
return view('lpj::teams.form', compact('teams', 'region', 'user', 'selectedUsers'));
return view('lpj::teams.form', compact('teams', 'regions', 'user', 'selectedUsers'));
}
/**

View File

@@ -241,15 +241,25 @@ class TenderController extends Controller
}
/**
* Remove the specified resource from storage.
* Tampilkan Surat Tender
*/
public function destroy($id)
public function showSuratTender($noreg)
{
//
$penawaran = PenawaranTender::where('nomor_registrasi', '=', $noreg)->first();
// Kalau tidak ketemu nomor registrasi dengan tabel penawaran
if (!$penawaran) {
return redirect()->route('tender.penawaran.createPenawaran', ['noreg' => $noreg])
->with('error', 'Anda Belum Membuat Penawaran. Silahkan isi terlebih dahulu!');
}
// Jika batas tanggal penawaran sudah lewat
if ($penawaran->end_date < date('Y-m-d')) {
return redirect()->route('tender.penawaran.editPenawaran', ['noreg' => $noreg])
->with('error', 'Sudah Kadaluarsa. Silahkan perpanjang tanggal penawaran terlebih dahulu!');
}
return view('lpj::penawaran.surat_tender', compact('penawaran', 'noreg'));
}
public function datatablesPenawaran(Request $request)

View File

@@ -4,6 +4,7 @@
use Illuminate\Foundation\Http\FormRequest;
use Modules\Lpj\Rules\UniqueCifExceptZero;
use Modules\Lpj\Rules\UniqueExcept;
class DebitureRequest extends FormRequest
{

View File

@@ -15,9 +15,11 @@
: array
{
return [
'code' => 'required|max:6',
'name' => 'required|max:255',
'slug' => 'required|max:255',
'code' => 'required|max:6',
'name' => 'required|max:255',
'slug' => 'required|max:255',
'custom_field' => 'nullable|max:255',
'custom_field_type' => 'nullable|max:255',
];
}
@@ -32,7 +34,7 @@
public function prepareForValidation()
{
if($this->method() == 'POST' && $this->code == null) {
if ($this->method() == 'POST' && $this->code == null) {
$this->merge([
'code' => IdGenerator::generate(
['table' => 'jenis_legalitas_jaminan', 'length' => 6, 'prefix' => 'JLJ', 'field' => 'code'],
@@ -41,7 +43,7 @@
]);
} else {
$this->merge([
'slug' => Str::slug($this->name),
'slug' => Str::slug($this->name),
]);
}
}

View File

@@ -3,7 +3,6 @@
namespace Modules\Lpj\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
use daengdeni\LaravelIdGenerator\IdGenerator;
class KJPPRequest extends FormRequest
{
@@ -17,21 +16,28 @@ class KJPPRequest extends FormRequest
'jenis_kantor' => 'required',
'nomor_ijin_usaha' => 'required',
'province_code' => 'required',
'city_code' => 'required',
'district_code' => 'required',
'village_code' => 'required',
'city_code' => 'nullable',
'district_code' => 'nullable',
'village_code' => 'nullable',
'address' => 'required',
'postal_code' => 'required|numeric',
'nomor_telepon_kantor' => 'required|numeric|digits_between:8,15',
'postal_code' => 'nullable|numeric',
'nomor_telepon_kantor' => 'nullable|numeric|digits_between:8,15',
'email_kantor' => 'required|email',
'detail_email_kantor' => 'nullable',
'nama_pimpinan' => 'required|string|not_regex:/^\d+$/|max:255',
'nomor_hp_pimpinan' => 'required|numeric|digits_between:10,15',
'nama_pic_reviewer' => 'required|string|not_regex:/^\d+$/|max:255',
'nomor_hp_pic_reviewer' => 'required|numeric|digits_between:10,15',
'nama_pic_admin' => 'required|string|not_regex:/^\d+$/|max:255',
'nomor_hp_pic_admin' => 'required|numeric|digits_between:10,15',
'nama_pic_marketing' => 'required|string|not_regex:/^\d+$/|max:255',
'nomor_hp_pic_marketing' => 'required|numeric|digits_between:10,15',
'nama_pic_reviewer' => 'nullable|string|not_regex:/^\d+$/|max:255',
'detail_nama_pic_reviewer' => 'nullable',
'nomor_hp_pic_reviewer' => 'nullable|numeric|digits_between:10,15',
'detail_nomor_hp_pic_reviewer' => 'nullable',
'nama_pic_admin' => 'nullable|string|not_regex:/^\d+$/|max:255',
'detail_nama_pic_admin' => 'nullable',
'nomor_hp_pic_admin' => 'nullable|numeric|digits_between:10,15',
'detail_nomor_hp_pic_admin' => 'nullable',
'nama_pic_marketing' => 'nullable|string|not_regex:/^\d+$/|max:255',
'detail_nama_pic_marketing' => 'nullable',
'nomor_hp_pic_marketing' => 'nullable|numeric|digits_between:10,15',
'detail_nomor_hp_pic_marketing' => 'nullable',
'ijin_usaha_id' => 'required|array',
'ijin_usaha_id.*' => 'exists:ijin_usaha,code',
'jenis_aset_id' => 'required|array',
@@ -69,13 +75,8 @@ class KJPPRequest extends FormRequest
'nomor_ijin_usaha.required' => 'Nomor Ijin Usaha Wajib diisi!',
'nomor_ijin_usaha.max' => 'Nomor Ijin Usaha maksimal 255 huruf!',
'province_code.required' => 'Provinsi Wajib diisi!',
'city_code.required' => 'Kota / Kabupaten Wajib diisi!',
'district_code.required' => 'Kecamatan Wajib diisi!',
'village_code.required' => 'Kelurahan Wajib diisi!',
'postal_code.required' => 'Kode Pos Wajib diisi!',
'postal_code.numeric' => 'Kode Pos harus berupa angka!',
'address.required' => 'Alamat Kantor Wajib diisi!',
'nomor_telepon_kantor.required' => 'Nomor Telepon Kantor Wajib diisi!',
'nomor_telepon_kantor.numeric' => 'Nomor Telepon Kantor harus berupa angka!',
'nomor_telepon_kantor.digits_between' => 'Nomor Telepon Kantor minimum 8 digit dan maksimum 15 digit!',
'email_kantor.required' => 'Email Kantor Wajib diisi!',
@@ -85,25 +86,17 @@ class KJPPRequest extends FormRequest
'nomor_hp_pimpinan.required' => 'Nomor HP Pimpinan Wajib diisi!',
'nomor_hp_pimpinan.numeric' => 'Nomor HP Pimpinan harus berupa angka!',
'nomor_hp_pimpinan.digits_between' => 'Nomor HP Pimpinan minimum 10 digit dan maksimum 15 digit!',
'nama_pic_reviewer.required' => 'Nama PIC Reviewer Wajib diisi!',
'nama_pic_reviewer.not_regex' => 'Nama PIC Reviewer harus berupa huruf!',
'nomor_hp_pic_reviewer.required' => 'Nomor HP PIC Reviewer Wajib diisi!',
'nomor_hp_pic_reviewer.numeric' => 'Nomor HP PIC Reviewer harus berupa angka!',
'nomor_hp_pic_reviewer.digits_between' => 'Nomor HP PIC Reviewer minimum 10 digit dan maksimum 15 digit!',
'nama_pic_admin.required' => 'Nama PIC Admin Wajib diisi!',
'nama_pic_admin.not_regex' => 'Nama PIC Admin harus berupa huruf!',
'nomor_hp_pic_admin.required' => 'Nomor HP PIC Admin Wajib diisi!',
'nomor_hp_pic_admin.numeric' => 'Nomor HP PIC Admin harus berupa angka!',
'nomor_hp_pic_admin.digits_between' => 'Nomor HP PIC Admin minimum 10 digit dan maksimum 15 digit!',
'nama_pic_marketing.required' => 'Nama PIC Marketing Wajib diisi!',
'nama_pic_marketing.not_regex' => 'Nama PIC Marketing harus berupa huruf!',
'nomor_hp_pic_marketing.required' => 'Nomor HP PIC Marketing Wajib diisi!',
'nomor_hp_pic_marketing.numeric' => 'Nomor HP PIC Marketing harus berupa angka!',
'nomor_hp_pic_marketing.digits_between' => 'Nomor HP PIC Marketing minimum 10 digit dan maksimum 15 digit!',
'ijin_usaha_id.required' => 'Ijin Usaha Wajib diisi!',
'ijin_usaha_id.min' => 'Ijin Usaha Wajib diisi minimal satu atau lebih!',
'jenis_aset_id.required' => 'Jenis Aset Wajib diisi!',
'jenis_aset_id.min' => 'Jenis Aset Wajib diisi minimal satu atau lebih!',
'attachment.mimes' => 'Attachment harus berformat pdf!',
'attachment.max' => 'Attachment berukuran maksimum 1 MB!',
];

View File

@@ -26,6 +26,7 @@
'address' => 'nullable|string',
'postal_code' => 'nullable|string|max:10',
'status' => 'nullable|boolean',
'detail_sertifikat' => 'nullable|string|max:255',
];
//$rules['nomor_id'] = 'nullable|max:16|unique:pemilik_jaminan,nomor_id,debiture_id,' . $this->debiture_id;
@@ -41,4 +42,24 @@
{
return true;
}
public function prepareForValidation() {
$detailSertifikat = [];
$names = $this->input('detail_sertifikat.name', []);
$nomorIds = $this->input('detail_sertifikat.nomor_id', []);
foreach ($names as $index => $name) {
if (isset($nomorIds[$index])) {
$detailSertifikat[] = [
'name' => $name,
'nomor_id' => $nomorIds[$index]
];
}
}
$this->merge([
'detail_sertifikat' => json_encode($detailSertifikat),
]);
}
}

View File

@@ -33,11 +33,16 @@ class PenilaianRequest extends FormRequest
'tanggal_kunjungan' => 'required|max:255',
'status' => 'required|string',
'nomor_registrasi' => 'required|string',
'surveyor_id' => 'nullable|required_without:penilai_surveyor_id',
'penilaian_id' => 'nullable|required_without:penilai_surveyor_id',
'penilai_surveyor_id' => 'nullable|required_without_all:surveyor_id,penilaian_id',
'surveyor_id' => 'nullable|required_without_all:penilai_surveyor_id,surveyor_region_id,penilai_region_id,penilai_id',
'penilai_id' => 'nullable|required_without_all:penilai_surveyor_id,surveyor_region_id,penilai_region_id,surveyor_id',
'penilai_surveyor_id' => 'nullable',
'surveyor_region_id' => 'nullable|required_without_all:penilai_surveyor_id,penilai_region_id,penilai_id,surveyor_id',
'penilai_region_id' => 'nullable|required_without_all:penilai_surveyor_id,surveyor_region_id,penilai_id,surveyor_id',
'keterangan' => 'nullable',
];
}

View File

@@ -17,10 +17,10 @@
'nomor_registrasi' => 'nullable|string|max:10',
'tanggal_permohonan' => 'nullable|date',
'user_id' => 'nullable|exists:users,id',
'branch_id' => 'required|exists:branches,id',
'branch_id' => 'nullable|exists:branches,id',
'tujuan_penilaian_id' => 'required|exists:tujuan_penilaian,id',
'debiture_id' => 'required|exists:debitures,id',
'status' => 'required|string',
'status' => 'nullable|string',
'jenis_fasilitas_kredit_id' => 'required|exists:jenis_fasilitas_kredit,id',
'nilai_plafond_id' => 'required|exists:nilai_plafond,id',
'status_bayar' => 'required|string',
@@ -49,6 +49,7 @@
'tanggal_permohonan' => date('Y-m-d'),
'user_id' => auth()->user()->id,
'branch_id' => auth()->user()->branch_id,
'status' => 'order'
]);
}
}

View File

@@ -4,62 +4,138 @@ namespace Modules\Lpj\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Validation\Rule;
class SurveyorRequest extends FormRequest
{
/**
* Get the validation rules that apply to the request.
* Table mapping for different actionszz
*/
public function rules()
: array
{
$action = $this->input('action');
$uniqueTable = [
'bentuk-tanah' => 'bentuk_tanah',
'kontur-tanah' => 'kontur_tanah',
'posisi-kavling' => 'posisi_kavling',
'ketinggian-tanah' => 'ketinggian_tanah',
'kondisi-fisik-tanah' => 'kondisi_fisik_tanah',
'kondisi-bangunan' => 'kondisi_bangunan',
'jenis-bangunan' => 'jenis_bangunan',
'sifat-bangunan' => 'sifat_bangunan',
'sarana-pelengkap' => 'sarana_pelengkap',
'lalu_lintas_lokasi' => 'lalu_lintas_lokasi',
'tingkat-keramaian' => 'tingkat_keramaian',
];
$rules = [
'name' => 'required|max:255',
];
$id = $this->route('id');
if ($this->method() == 'PUT' || $this->method() == 'PATCH') {
$rules['code'] = 'required|max:50|unique:' . $uniqueTable[$action] . ',code,' . $id;
} else {
$rules['code'] = 'required|max:50|unique:' . $uniqueTable[$action] . ',code';
}
return $rules;
}
private const TABLE_MAPPING = [
'bentuk-tanah' => 'bentuk_tanah',
'kontur-tanah' => 'kontur_tanah',
'posisi-kavling' => 'posisi_kavling',
'ketinggian-tanah' => 'ketinggian_tanah',
'kondisi-fisik-tanah' => 'kondisi_fisik_tanah',
'kondisi-bangunan' => 'kondisi_bangunan',
'jenis-bangunan' => 'jenis_bangunan',
'sifat-bangunan' => 'sifat_bangunan',
'sarana-pelengkap' => 'sarana_pelengkap',
'lalu-lintas-lokasi' => 'lalu_lintas_lokasi',
'tingkat-keramaian' => 'tingkat_keramaian',
'gol-mas-sekitar' => 'gol_mas_sekitar',
'spek-kategori-bangunan' => 'spek_kategori_bangunan',
'spek-bangunan' => 'spek_bangunan',
'lantai-unit' => 'lantai',
'view-unit' => 'view_unit',
];
/**
* Determine if the user is authorized to make this request.
*/
public function authorize()
: bool
public function authorize(): bool
{
return true;
}
protected function prepareForValidation()
/**
* Get the validation rules that apply to the request.
*/
public function rules(): array
{
return array_merge(
$this->getBaseRules(),
$this->getActionSpecificRules(),
$this->getCodeValidationRules()
);
}
/**
* Get base validation rules
*/
private function getBaseRules(): array
{
return [
'name' => 'required|max:255',
];
}
/**
* Get action specific validation rules
*/
private function getActionSpecificRules(): array
{
$action = $this->input('action');
return match ($action) {
'spek-bangunan' => [
'spek_kategori_bangunan_id' => [
'required',
],
],
// Add more action specific rules here
default => [],
};
}
/**
* Get code validation rules
*/
private function getCodeValidationRules(): array
{
$action = $this->input('action');
$table = self::TABLE_MAPPING[$action] ?? null;
if (!$table) {
return [];
}
$rules = ['required', 'max:50'];
if ($this->isMethod('PUT') || $this->isMethod('PATCH')) {
$rules[] = Rule::unique($table, 'code')->ignore($this->route('id'));
} else {
$rules[] = Rule::unique($table, 'code');
}
return ['code' => $rules];
}
/**
* Prepare the data for validation.
*/
protected function prepareForValidation(): void
{
$this->merge([
'status' => true,
]);
}
/**
* Get custom messages for validator errors.
*/
public function messages(): array
{
return [
'name.required' => 'Nama harus diisi',
'name.max' => 'Nama tidak boleh lebih dari 255 karakter',
'code.required' => 'Kode harus diisi',
'code.max' => 'Kode tidak boleh lebih dari 50 karakter',
'code.unique' => 'Kode sudah digunakan',
'spek_kategori_bangunan_id.required' => 'Kategori bangunan harus dipilih',
];
}
/**
* Get custom attributes for validator errors.
*/
public function attributes(): array
{
return [
'name' => 'Nama',
'code' => 'Kode',
'spek_kategori_bangunan_id' => 'Kategori Bangunan',
];
}
}

View File

@@ -63,13 +63,17 @@ class TenderPenawaranRequest extends FormRequest
$endDate = strtotime($this->input('end_date'));
$today = strtotime(date('Y-m-d'));
// Jika dalam keadaan tambah penawaran maka munculkan pesan ini
if ($this->method() !== 'PUT') {
if ($startDate < $today) {
$validator->errors()->add('start_date', 'Tanggal Awal tidak boleh sebelum hari ini.');
}
}
if ($endDate < $startDate) {
$validator->errors()->add('end_date', 'Tanggal Akhir tidak boleh lebih awal dari Tanggal Awal.');
}
if ($startDate < $today) {
$validator->errors()->add('start_date', 'Tanggal Awal tidak boleh sebelum hari ini.');
}
// Validasi minimal 3 pilihan pada nama_kjpp
$namaKjpp = $this->input('kjpp', []);

View File

@@ -16,8 +16,9 @@
'jenis_legalitas_jaminan_id',
'name',
'dokumen_jaminan',
'dokumen_nomor',
'keterangan',
'details',
'status',
'authorized_at',
'authorized_status',

View File

@@ -10,10 +10,12 @@ class GolonganMasySekitar extends Model
{
use HasFactory;
protected $table = 'gol_mas_sekitar';
/**
* The attributes that are mass assignable.
*/
protected $fillable = [];
protected $fillable = ['code', 'name', 'status'];
protected static function newFactory(): GolonganMasySekitarFactory
{

View File

@@ -19,4 +19,9 @@ class JenisLaporan extends Model
protected $fillable = ['code', 'name'];
public function penawaran()
{
return $this->hasMany(PenawaranTender::class, 'jenis_laporan_id', 'id');
}
}

View File

@@ -7,5 +7,5 @@
class JenisLegalitasJaminan extends Base
{
protected $table = 'jenis_legalitas_jaminan';
protected $fillable = ['code', 'name','slug'];
protected $fillable = ['code', 'name','slug','custom_field','custom_field_type'];
}

View File

@@ -18,29 +18,5 @@ class KJPP extends Model
/**
* The attributes that are mass assignable.
*/
protected $fillable = [
'code',
'name',
'jenis_kantor',
'nomor_ijin_usaha',
'province_code',
'city_code',
'district_code',
'village_code',
'address',
'postal_code',
'nomor_telepon_kantor',
'email_kantor',
'nama_pimpinan',
'nomor_hp_pimpinan',
'nama_pic_reviewer',
'nomor_hp_pic_reviewer',
'nama_pic_admin',
'nomor_hp_pic_admin',
'nama_pic_marketing',
'nomor_hp_pic_marketing',
'ijin_usaha_id',
'jenis_aset_id',
'attachment'
];
protected $guarded = ['id'];
}

View File

@@ -14,7 +14,7 @@ class KondisiBangunan extends Model
/**
* The attributes that are mass assignable.
*/
protected $fillable = [];
protected $fillable = ['code','name'];
protected static function newFactory(): KondisiBangunanFactory
{

23
app/Models/Lantai.php Normal file
View File

@@ -0,0 +1,23 @@
<?php
namespace Modules\Lpj\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Modules\Lpj\Database\Factories\LokasiUnitFactory;
class Lantai extends Model
{
use HasFactory;
protected $table = 'lantai';
/**
* The attributes that are mass assignable.
*/
protected $fillable = ['name', 'code', 'status', 'authorized_status', 'authorized_at', 'authorized_by', 'created_by', 'updated_by', 'deleted_by'];
protected static function newFactory(): LokasiUnitFactory
{
//return LokasiUnitFactory::new();
}
}

View File

@@ -30,7 +30,8 @@ class PemilikJaminan extends Base
'status',
'authorized_at',
'authorized_status',
'authorized_by'
'authorized_by',
'detail_sertifikat',
];
public function province()

View File

@@ -32,8 +32,20 @@ class PenawaranTender extends Model
}
// menambahkan relasi tujuan penilaian KJPP
public function tujuanPenilaianKJPP()
public function tujuanPenilaianKjpp()
{
return $this->hasMany(TujuanPenilaianKJPP::class, 'id', 'tujuan_penilaian_kjpp_id');
return $this->belongsTo(TujuanPenilaianKJPP::class, 'tujuan_penilaian_kjpp_id','id');
}
public function permohonan()
{
return $this->belongsTo(Permohonan::class, 'nomor_registrasi', 'nomor_registrasi');
}
public function jenisLaporan()
{
return $this->belongsTo(JenisLaporan::class, 'jenis_laporan_id', 'id');
}
}

View File

@@ -17,7 +17,7 @@ class Penilaian extends Model
*/
protected $table = 'penilaian';
protected $fillable = [
'jenis_penilaian_id', 'teams_id', 'tanggal_kunjungan', 'keterangan','nomor_registrasi','penilaian_id','surveyor_id','penilai_surveyor_id',
'jenis_penilaian_id', 'penilaian_id', 'tanggal_kunjungan', 'keterangan','nomor_registrasi',
'status', 'authorized_status', 'authorized_at', 'authorized_by', 'created_at',
'created_by', 'updated_at', 'updated_by', 'deleted_at', 'deleted_by'
];
@@ -39,23 +39,12 @@ class Penilaian extends Model
public function userPenilai()
{
return $this->belongsTo(User::class, 'penilaian_id', 'id');
return $this->hasMany(PenilaianTeam::class, 'penilaian_id', 'id');
}
public function userSurveyor()
{
return $this->belongsTo(User::class, 'surveyor_id', 'id');
}
public function userPenilaiSurveyor()
{
return $this->belongsTo(User::class, 'penilai_surveyor_id', 'id');
}
public function permohonan()
{
return $this->belongsTo(Permohonan::class, 'nomor_registrasi', 'nomor_registrasi');
}
}

View File

@@ -0,0 +1,39 @@
<?php
namespace Modules\Lpj\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Modules\Lpj\Database\Factories\PenilaianTeamFactory;
class PenilaianTeam extends Model
{
use HasFactory;
protected $table = 'penilaian_team';
/**
* The attributes that are mass assignable.
*/
protected $fillable = ['penilaian_id', 'team_id', 'user_id','role'];
public function userPenilaiTeam()
{
return $this->belongsTo(User::class, 'user_id', 'id');
}
public function team(){
return $this->belongsTo(Team::class, 'team_id', 'id');
}
public function penilaian(){
return $this->hasMany(Penilaian::class, 'penilaian_id', 'id');
}
protected static function newFactory(): PenilaianTeamFactory
{
//return PenilaianTeamFactory::new();
}
}

View File

@@ -1,82 +1,96 @@
<?php
namespace Modules\Lpj\Models;
namespace Modules\Lpj\Models;
use Modules\Lpj\Database\Factories\PermohonanFactory;
use Modules\Usermanagement\Models\User;
use Modules\Lpj\Database\Factories\PermohonanFactory;
use Modules\Usermanagement\Models\User;
class Permohonan extends Base
class Permohonan extends Base
{
protected $table = 'permohonan';
protected $fillable = [
'nomor_registrasi',
'tanggal_permohonan',
'user_id',
'branch_id',
'tujuan_penilaian_id',
'debiture_id',
'keterangan',
'dokumen',
'jenis_fasilitas_kredit_id',
'nilai_plafond_id',
'status',
'authorized_at',
'authorized_status',
'authorized_by',
// andy add
'registrasi_catatan',
'registrasi_by',
'registrasi_at',
'jenis_penilaian_id',
'region_id',
// andy add
'status_bayar',
'nilai_njop',
// andy add
'registrasi_catatan',
'registrasi_by',
'registrasi_at',
'jenis_penilaian_id',
'region_id',
];
public function user()
{
protected $table = 'permohonan';
protected $fillable = [
'nomor_registrasi',
'tanggal_permohonan',
'user_id',
'branch_id',
'tujuan_penilaian_id',
'debiture_id',
'keterangan',
'dokumen',
'jenis_fasilitas_kredit_id',
'nilai_plafond_id',
'status',
'authorized_at',
'authorized_status',
'authorized_by',
// andy add
'registrasi_catatan',
'registrasi_by',
'registrasi_at',
'jenis_penilaian_id',
'region_id',
// andy add
'status_bayar',
'nilai_njop',
// andy add
'registrasi_catatan',
'registrasi_by',
'registrasi_at',
'jenis_penilaian_id',
'region_id',
];
public function user()
{
return $this->belongsTo(User::class);
}
public function branch()
{
return $this->belongsTo(Branch::class);
}
public function tujuanPenilaian()
{
return $this->belongsTo(TujuanPenilaian::class);
}
public function debiture()
{
return $this->belongsTo(Debiture::class);
}
public function documents()
{
return $this->hasMany(DokumenJaminan::class);
}
public function nilaiPlafond()
{
return $this->belongsTo(NilaiPlafond::class);
}
public function jenisFasilitasKredit()
{
return $this->belongsTo(JenisFasilitasKredit::class);
}
public function penilaian()
{
return $this->belongsTo(Penilaian::class, 'nomor_registrasi', 'nomor_registrasi');
}
return $this->belongsTo(User::class);
}
public function branch()
{
return $this->belongsTo(Branch::class);
}
public function tujuanPenilaian()
{
return $this->belongsTo(TujuanPenilaian::class);
}
public function debiture()
{
return $this->belongsTo(Debiture::class);
}
public function documents()
{
return $this->hasMany(DokumenJaminan::class);
}
public function nilaiPlafond()
{
return $this->belongsTo(NilaiPlafond::class);
}
public function jenisFasilitasKredit()
{
return $this->belongsTo(JenisFasilitasKredit::class);
}
public function penilaian()
{
return $this->belongsTo(Penilaian::class, 'nomor_registrasi', 'nomor_registrasi');
}
public function penawaranTender()
{
return $this->hasMany(PenawaranTender::class, 'nomor_registrasi');
}
public function region()
{
return $this->belongsTo(Regions::class, 'region_id');
}
public function penawaran(){
return $this->belongsTo(PenawaranTender::class, 'nomor_registrasi', 'nomor_registrasi');
}
}

18
app/Models/SLA.php Normal file
View File

@@ -0,0 +1,18 @@
<?php
namespace Modules\Lpj\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Factories\HasFactory;
class SLA extends Model
{
use HasFactory;
protected $table = 'sla';
/**
* The attributes that are mass assignable.
*/
protected $guarded = ['id'];
}

View File

@@ -15,7 +15,7 @@ class SpekBangunan extends Model
/**
* The attributes that are mass assignable.
*/
protected $fillable = [];
protected $fillable = ['code','name','status','spek_kategori_bangunan_id','authorized_status'];

View File

@@ -14,7 +14,7 @@ class SpekKategoritBangunan extends Model
/**
* The attributes that are mass assignable.
*/
protected $fillable = [];
protected $fillable = ['code','name','status','authorized_status'];
public function bangunan()

View File

@@ -30,8 +30,8 @@ class Teams extends Model
return $this->hasMany(TeamsUsers::class, 'teams_id', 'id');
}
public function penilaian(){
return $this->hasMany(Penilaian::class, 'teams_id', 'id');
public function penilaianTeam(){
return $this->hasMany(PenilaianTeam::class, 'team_id', 'id');
}

View File

@@ -10,6 +10,7 @@ class TingkatKeramaian extends Model
{
use HasFactory;
protected $table = 'tingkat_keramaian';
/**
* The attributes that are mass assignable.
*/

23
app/Models/ViewUnit.php Normal file
View File

@@ -0,0 +1,23 @@
<?php
namespace Modules\Lpj\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Modules\Lpj\Database\Factories\ViewUnitFactory;
class ViewUnit extends Model
{
use HasFactory;
protected $table = 'view_unit';
/**
* The attributes that are mass assignable.
*/
protected $fillable = ['name', 'status', 'authorized_status', 'authorized_at', 'authorized_by', 'code'];
protected static function newFactory(): ViewUnitFactory
{
//return ViewUnitFactory::new();
}
}

View File

@@ -1,25 +1,32 @@
<?php
namespace Modules\Lpj\Rules;
namespace Modules\Lpj\Rules;
use Closure;
use Illuminate\Contracts\Validation\ValidationRule;
use Modules\Lpj\Models\Debiture;
use Closure;
use Illuminate\Contracts\Validation\ValidationRule;
use Modules\Lpj\Models\Debiture;
class UniqueCifExceptZero implements ValidationRule
{
public function __construct($id = null)
class UniqueCifExceptZero implements ValidationRule
{
$this->id = $id;
}
protected $id;
public function validate($attribute, $value, $fail): void
{
if (Debiture::where($attribute, $value)
->where('id', '!=', $this->id)
->where($attribute, '!=', '0000000000')
->exists()) {
$fail('The :attribute field must be uniquse.'.$this->id);
public function __construct($id = null)
{
$this->id = $id;
}
/**
* Run the validation rule.
*/
public function validate(string $attribute, mixed $value, Closure $fail)
: void {
if ($value !== '0000000000' && $value !== null && Debiture::query()->where($attribute, $value)->when(
$this->id,
function ($query) {
$query->where('id', '!=', $this->id);
},
)->exists()) {
$fail('The :attribute field must be unique.');
}
}
}
}

View File

@@ -18,23 +18,30 @@ return new class extends Migration
$table->string('jenis_kantor');
$table->string('nomor_ijin_usaha');
$table->string('province_code');
$table->string('city_code');
$table->string('district_code');
$table->string('village_code');
$table->string('city_code')->nullable();
$table->string('district_code')->nullable();
$table->string('village_code')->nullable();
$table->string('address');
$table->string('postal_code');
$table->string('nomor_telepon_kantor');
$table->string('postal_code')->nullable();
$table->string('nomor_telepon_kantor')->nullable();
$table->string('email_kantor');
$table->string('detail_email_kantor')->nullable();
$table->string('nama_pimpinan');
$table->string('nomor_hp_pimpinan');
$table->string('nama_pic_reviewer');
$table->string('nomor_hp_pic_reviewer');
$table->string('nama_pic_admin');
$table->string('nomor_hp_pic_admin');
$table->string('nama_pic_marketing');
$table->string('nomor_hp_pic_marketing');
$table->string('ijin_usaha_id')->nullable();
$table->string('jenis_aset_id')->nullable();
$table->string('nama_pic_reviewer')->nullable();
$table->string('detail_nama_pic_reviewer')->nullable();
$table->string('nomor_hp_pic_reviewer')->nullable();
$table->string('detail_nomor_hp_pic_reviewer')->nullable();
$table->string('nama_pic_admin')->nullable();
$table->string('detail_nama_pic_admin')->nullable();
$table->string('nomor_hp_pic_admin')->nullable();
$table->string('detail_nomor_hp_pic_admin')->nullable();
$table->string('nama_pic_marketing')->nullable();
$table->string('detail_nama_pic_marketing')->nullable();
$table->string('nomor_hp_pic_marketing')->nullable();
$table->string('detail_nomor_hp_pic_marketing')->nullable();
$table->string('ijin_usaha_id');
$table->string('jenis_aset_id');
$table->string('attachment')->nullable();
$table->boolean('status')->default(true)->nullable();
$table->char('authorized_status', 1)->nullable();

View File

@@ -17,6 +17,7 @@ return new class extends Migration
$table->unsignedBigInteger('permohonan_id');
$table->foreign('permohonan_id')->references('id')->on('permohonan');
$table->string('luas');
$table->unsignedBigInteger('jenis_jaminan_id');
$table->char('authorized_status', 1)->nullable();
$table->timestamp('authorized_at')->nullable();
$table->unsignedBigInteger('authorized_by')->nullable();

View File

@@ -20,7 +20,7 @@ return new class extends Migration
$table->string('kontur_tanah');
$table->string('ketinggian_jalan');
$table->string('kontur_jalan');
$table->string('posis_kavling');
$table->string('posisi_kavling');
$table->enum('tusuk_sate', ['yes', 'no']);
$table->enum('lockland', ['yes', 'no']);
$table->string('kondisi_fisik_tanah');

View File

@@ -18,7 +18,7 @@ return new class () extends Migration {
$table->string('foto_denah');
$table->string('luas');
$table->unsignedBigInteger('jenis_jaminan_id');
$table->char('authorized_status', 1)->nullable();
$table->timestamp('authorized_at')->nullable();
$table->unsignedBigInteger('authorized_by')->nullable();

View File

@@ -16,7 +16,7 @@ return new class () extends Migration {
$table->foreign('permohonan_id')->references('id')->on('permohonan');
$table->string('pendamping');
$table->unsignedBigInteger('jenis_jaminan_id');
$table->char('authorized_status', 1)->nullable();
$table->timestamp('authorized_at')->nullable();
$table->unsignedBigInteger('authorized_by')->nullable();

View File

@@ -19,6 +19,7 @@ return new class () extends Migration {
$table->string('name');
$table->string('foto_objek');
$table->unsignedBigInteger('jenis_jaminan_id');
$table->char('authorized_status', 1)->nullable();
$table->timestamp('authorized_at')->nullable();
$table->unsignedBigInteger('authorized_by')->nullable();

View File

@@ -0,0 +1,37 @@
<?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::create('lantai', function (Blueprint $table) {
$table->id();
$table->string('code')->unique()->index();
$table->string('name');
$table->boolean('status')->default(true);
$table->char('authorized_status', 1)->nullable();
$table->timestamps();
$table->timestamp('authorized_at')->nullable();
$table->unsignedBigInteger('authorized_by')->nullable();
$table->softDeletes();
$table->unsignedBigInteger('created_by')->nullable();
$table->unsignedBigInteger('updated_by')->nullable();
$table->unsignedBigInteger('deleted_by')->nullable();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('lokasi_unit');
}
};

View File

@@ -0,0 +1,36 @@
<?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::create('view_unit', function (Blueprint $table) {
$table->id();
$table->string('code')->unique()->index();
$table->string('name');
$table->boolean('status')->default(true);
$table->char('authorized_status', 1)->nullable();
$table->timestamps();
$table->timestamp('authorized_at')->nullable();
$table->unsignedBigInteger('authorized_by')->nullable();
$table->softDeletes();
$table->unsignedBigInteger('created_by')->nullable();
$table->unsignedBigInteger('updated_by')->nullable();
$table->unsignedBigInteger('deleted_by')->nullable();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('view_unit');
}
};

View File

@@ -0,0 +1,27 @@
<?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::create('sla', function (Blueprint $table) {
$table->id();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('sla');
}
};

View File

@@ -0,0 +1,37 @@
<?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::create('kategori_jenis_aset', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('code');
$table->boolean('status')->default(true);
$table->char('authorized_status', 1)->nullable();
$table->timestamps();
$table->timestamp('authorized_at')->nullable();
$table->unsignedBigInteger('authorized_by')->nullable();
$table->softDeletes();
$table->unsignedBigInteger('created_by')->nullable();
$table->unsignedBigInteger('updated_by')->nullable();
$table->unsignedBigInteger('deleted_by')->nullable();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('kategori_jenis_aset');
}
};

View File

@@ -0,0 +1,38 @@
<?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('penilaian', function (Blueprint $table) {
$table->dropColumn('teams_id');
$table->dropColumn('surveyor_id');
$table->dropColumn('penilaian_id');
$table->dropColumn('penilai_surveyor_id');
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::table('penilaian', function (Blueprint $table) {
$table->foreignIdFor(Teams::class);
$table->foreignIdFor(User::class);
});
}
};

View File

@@ -0,0 +1,38 @@
<?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::create('penilaian_team', function (Blueprint $table) {
$table->id();
$table->unsignedBigInteger('penilaian_id');
$table->unsignedBigInteger('team_id');
$table->unsignedBigInteger('user_id');
$table->string('role');
$table->boolean('status')->default(true);
$table->char('authorized_status', 1)->nullable();
$table->timestamps();
$table->timestamp('authorized_at')->nullable();
$table->unsignedBigInteger('authorized_by')->nullable();
$table->softDeletes();
$table->unsignedBigInteger('created_by')->nullable();
$table->unsignedBigInteger('updated_by')->nullable();
$table->unsignedBigInteger('deleted_by')->nullable();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('penilai_team');
}
};

View File

@@ -0,0 +1,28 @@
<?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('debitures', function (Blueprint $table) {
$table->dropUnique(['cif']);
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::table('debitures', function (Blueprint $table) {
$table->string('cif')->unique()->change();
});
}
};

View File

@@ -0,0 +1,39 @@
<?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::create('kategori_form_analisa_inspeksi', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('code');
$table->unsignedBigInteger('kategori_jenis_aset_id'); // Add this line
$table->foreign('kategori_jenis_aset_id')->references('id')->on('kategori_jenis_aset');
$table->boolean('status')->default(true);
$table->char('authorized_status', 1)->nullable();
$table->timestamps();
$table->timestamp('authorized_at')->nullable();
$table->unsignedBigInteger('authorized_by')->nullable();
$table->softDeletes();
$table->unsignedBigInteger('created_by')->nullable();
$table->unsignedBigInteger('updated_by')->nullable();
$table->unsignedBigInteger('deleted_by')->nullable();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('kategori_form_analisa_inspeksi');
}
};

View File

@@ -0,0 +1,28 @@
<?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::create('label_name_inspeksi', function (Blueprint $table) {
$table->id();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('label_name_inspeksi');
}
};

View File

@@ -0,0 +1,28 @@
<?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('pemilik_jaminan', function (Blueprint $table) {
$table->string('detail_sertifikat')->nullable()->after('name');
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::table('pemilik_jaminan', function (Blueprint $table) {
$table->dropColumn('detail_sertifikat');
});
}
};

View File

@@ -0,0 +1,30 @@
<?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('jenis_legalitas_jaminan', function (Blueprint $table) {
$table->string('custom_field')->nullable()->after('slug');
$table->string('custom_field_type')->nullable()->after('custom_field');
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::table('jenis_legalitas_jaminan', function (Blueprint $table) {
$table->dropColumn('custom_field');
$table->dropColumn('custom_field_type');
});
}
};

View File

@@ -0,0 +1,28 @@
<?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('detail_dokumen_jaminan', function (Blueprint $table) {
$table->string('details')->nullable()->after('dokumen_jaminan_id');
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::table('detail_dokumen_jaminan', function (Blueprint $table) {
$table->dropColumn('details');
});
}
};

View File

@@ -0,0 +1,28 @@
<?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('detail_dokumen_jaminan', function (Blueprint $table) {
$table->string('dokumen_nomor')->nullable()->after('dokumen_jaminan');
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::table('detail_dokumen_jaminan', function (Blueprint $table) {
$table->dropColumn('dokumen_nomor');
});
}
};

View File

@@ -0,0 +1,42 @@
<?php
namespace Modules\Lpj\Database\Seeders;
use Illuminate\Database\Seeder;
use Modules\Lpj\Models\ArahMataAngin;
class ArahMataAnginSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
ArahMataAngin::insert([
[
'name' => 'Utara',
],
[
'name' => 'Timur Laut',
],
[
'name' => 'Timur',
],
[
'name' => 'Tenggara',
],
[
'name' => 'Selatan',
],
[
'name' => 'Barat Daya',
],
[
'name' => 'Barat',
],
[
'name' => 'Barat Laut',
],
]);
}
}

View File

@@ -0,0 +1,27 @@
<?php
namespace Modules\Lpj\Database\Seeders;
use Illuminate\Database\Seeder;
use Modules\Basicdata\Models\Branch;
class BranchSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
Branch::insert([
[
'code' => 'C01',
'name' => 'KPNO',
'status' => 1,
'created_at' => now(),
'updated_at' => now(),
'created_by' => 1,
'updated_by' => 1
]
]);
}
}

View File

@@ -0,0 +1,48 @@
<?php
namespace Modules\Lpj\Database\Seeders;
use Illuminate\Database\Seeder;
use Modules\Basicdata\Models\Currency;
class CurrencySeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
Currency::insert([
[
'code' => 'IDR',
'name' => 'Rupiah',
'decimal_places' => 2,
'status' => 1,
'created_at' => now(),
'updated_at' => now(),
'created_by' => 1,
'updated_by' => 1
],
[
'code' => 'MYR',
'name' => 'Ringgit',
'decimal_places' => 2,
'status' => 1,
'created_at' => now(),
'updated_at' => now(),
'created_by' => 1,
'updated_by' => 1
],
[
'code' => 'SAR',
'name' => 'Riyadh',
'decimal_places' => 2,
'status' => 1,
'created_at' => now(),
'updated_at' => now(),
'created_by' => 1,
'updated_by' => 1
]
]);
}
}

View File

@@ -0,0 +1,158 @@
<?php
namespace Modules\Lpj\Database\Seeders;
use Illuminate\Database\Seeder;
use Modules\Lpj\Models\Debiture;
class DebitureSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
Debiture::insert([
[
'branch_id' => 1,
'cif' => '1234567890',
'name' => 'Willy',
'npwp' => '123455432109876',
'email' => 'w@gmail.com',
'phone' => '08113242341',
'nomor_rekening' => '1081666666',
'province_code' => '31',
'city_code' => '31.74',
'district_code' => '31.74.09',
'village_code' => '31.74.09.1003',
'postal_code' => '12630',
'address' => null,
'status' => 1,
'created_at' => now(),
'updated_at' => now(),
'created_by' => 1,
'updated_by' => 1
],
[
'branch_id' => 1,
'cif' => '0987654321',
'name' => 'Antonius Ginting',
'npwp' => '234567890123456',
'email' => 'x@gmail.com',
'phone' => '081234567891',
'nomor_rekening' => '987654310',
'province_code' => '31',
'city_code' => '31.71',
'district_code' => '31.71.06',
'village_code' => '31.71.06.1001',
'postal_code' => '10310',
'address' => 'Jl. Menteng Tengah No.66',
'status' => 1,
'created_at' => now(),
'updated_at' => now(),
'created_by' => 1,
'updated_by' => 1
],
[
'branch_id' => 1,
'cif' => '1518467',
'name' => 'PT ABCD SEJATI',
'npwp' => '001852600023342',
'email' => 'abcd@ag.co.id',
'phone' => '081111555',
'nomor_rekening' => '0082346',
'province_code' => '31',
'city_code' => '31.74',
'district_code' => '31.74.04',
'village_code' => '31.74.04.1005',
'postal_code' => '10420',
'address' => 'Jl. Raya Kwitang No. 105, Senen, Kwitang, Jakarta Pusat',
'status' => 1,
'created_at' => now(),
'updated_at' => now(),
'created_by' => 1,
'updated_by' => 1
],
[
'branch_id' => 1,
'cif' => '12345',
'name' => 'Testing',
'npwp' => '102928018391211',
'email' => 'testing@email.com',
'phone' => '098172386',
'nomor_rekening' => '12345',
'province_code' => '11',
'city_code' => '11.01',
'district_code' => '11.01.01',
'village_code' => '11.01.01.2001',
'postal_code' => '23773',
'address' => 'alamat',
'status' => 1,
'created_at' => now(),
'updated_at' => now(),
'created_by' => 1,
'updated_by' => 1
],
[
'branch_id' => 1,
'cif' => '0000000000',
'name' => 'Gartika Pertiwi',
'npwp' => '123456789101112',
'email' => 'Gartika_Pertiwi@gmail.com',
'phone' => '1234567',
'nomor_rekening' => '1234567',
'province_code' => '31',
'city_code' => '31.71',
'district_code' => '31.71.04',
'village_code' => '31.71.04.1005',
'postal_code' => '10420',
'address' => null,
'status' => 1,
'created_at' => now(),
'updated_at' => now(),
'created_by' => 1,
'updated_by' => 1
],
[
'branch_id' => 1,
'cif' => '1235464575',
'name' => 'Fleming',
'npwp' => '123455432109876',
'email' => 'x@gmail.com',
'phone' => '08113242341',
'nomor_rekening' => '1081666666',
'province_code' => '31',
'city_code' => '31.74',
'district_code' => '31.74.09',
'village_code' => '31.74.09.1001',
'postal_code' => '12620',
'address' => 'testt',
'status' => 1,
'created_at' => now(),
'updated_at' => now(),
'created_by' => 1,
'updated_by' => 1
],
[
'branch_id' => 1,
'cif' => '1234689743',
'name' => 'Testing 2',
'npwp' => '1234689743418451',
'email' => 'testing@mail.com',
'phone' => '081385777611',
'nomor_rekening' => '3575467279562',
'province_code' => '31',
'city_code' => '31.71',
'district_code' => '31.71.06',
'village_code' => '31.71.06.1001',
'postal_code' => '10310',
'address' => 'Jl. Menteng Raya no. 13',
'status' => 1,
'created_at' => now(),
'updated_at' => now(),
'created_by' => 1,
'updated_by' => 1
],
]);
}
}

View File

@@ -0,0 +1,73 @@
<?php
namespace Modules\Lpj\Database\Seeders;
use Illuminate\Database\Seeder;
use Modules\Lpj\Models\DetailDokumenJaminan;
class DetailDokumenJaminanSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
DetailDokumenJaminan::insert([
[
'name' => 'Tanah Bangunan',
'dokumen_jaminan_id' => 1,
'jenis_legalitas_jaminan_id' => 1,
'dokumen_jaminan' => 'jaminan/1/1/Test.pdf',
'status' => 1,
'created_at' => now(),
'updated_at' => now(),
'created_by' => 1,
'updated_by' => 1
],
[
'name' => 'Tanah Bangunan',
'dokumen_jaminan_id' => 1,
'jenis_legalitas_jaminan_id' => 3,
'dokumen_jaminan' => 'jaminan/1/1/Test.pdf',
'status' => 1,
'created_at' => now(),
'updated_at' => now(),
'created_by' => 1,
'updated_by' => 1
],
[
'name' => 'Tanah Bangunan',
'dokumen_jaminan_id' => 1,
'jenis_legalitas_jaminan_id' => 4,
'dokumen_jaminan' => 'jaminan/1/1/Test.pdf',
'status' => 1,
'created_at' => now(),
'updated_at' => now(),
'created_by' => 1,
'updated_by' => 1
],
[
'name' => 'Tanah Bangunan',
'dokumen_jaminan_id' => 1,
'jenis_legalitas_jaminan_id' => 5,
'dokumen_jaminan' => 'jaminan/1/1/Test.pdf',
'status' => 1,
'created_at' => now(),
'updated_at' => now(),
'created_by' => 1,
'updated_by' => 1
],
[
'name' => 'Tanah Bangunan',
'dokumen_jaminan_id' => 1,
'jenis_legalitas_jaminan_id' => 6,
'dokumen_jaminan' => 'jaminan/1/1/Test.pdf',
'status' => 1,
'created_at' => now(),
'updated_at' => now(),
'created_by' => 1,
'updated_by' => 1
]
]);
}
}

View File

@@ -0,0 +1,54 @@
<?php
namespace Modules\Lpj\Database\Seeders;
use Illuminate\Database\Seeder;
use Modules\Lpj\Models\PenawaranDetailTender;
class DetailPenawaranSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
PenawaranDetailTender::insert([
[
'kjpp_rekanan_id' => 1,
'penawaran_id' => 1,
'biaya_penawaran' => 15000000,
'attachment' => 'Test.pdf',
'dokumen_persetujuan' => 'uploads/penawaran/1_1_Test_2_1729826174.pdf',
'status' => 1,
'created_at' => now(),
'updated_at' => now(),
'created_by' => 1,
'updated_by' => 1
],
[
'kjpp_rekanan_id' => 2,
'penawaran_id' => 1,
'biaya_penawaran' => 30000000,
'attachment' => 'Test.pdf',
'dokumen_persetujuan' => 'uploads/penawaran/2_2_Test_2_1729826198.pdf',
'status' => 1,
'created_at' => now(),
'updated_at' => now(),
'created_by' => 1,
'updated_by' => 1
],
[
'kjpp_rekanan_id' => 3,
'penawaran_id' => 1,
'biaya_penawaran' => 20000000,
'attachment' => 'Test.pdf',
'dokumen_persetujuan' => 'uploads/penawaran/3_3_Test_2_1729826215.pdf',
'status' => 1,
'created_at' => now(),
'updated_at' => now(),
'created_by' => 1,
'updated_by' => 1
]
]);
}
}

View File

@@ -0,0 +1,34 @@
<?php
namespace Modules\Lpj\Database\Seeders;
use Illuminate\Database\Seeder;
use Modules\Lpj\Models\DokumenJaminan;
class DokumenJaminanSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
DokumenJaminan::insert([
[
'debiture_id' => 1,
'jenis_jaminan_id' => 1,
'pemilik_jaminan_id' => 3,
'province_code' => '32',
'city_code' => '32.75',
'district_code' => '32.75.03',
'village_code' => '32.75.03.1001',
'postal_code' => '17125',
'address' => 'Jl. Apel No. 9',
'status' => 1,
'created_at' => now(),
'updated_at' => now(),
'created_by' => 1,
'updated_by' => 1
]
]);
}
}

View File

@@ -0,0 +1,36 @@
<?php
namespace Modules\Lpj\Database\Seeders;
use Illuminate\Database\Seeder;
use Modules\Lpj\Models\HubunganPemilikJaminan;
class HubunganPemilikJaminanSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
HubunganPemilikJaminan::insert([
[
'name' => 'Milik Pribadi'
],
[
'name' => 'Suami/Istri'
],
[
'name' => 'Anak'
],
[
'name' => 'Saudara Kandung'
],
[
'name' => 'Ayah'
],
[
'name' => 'Ibu'
]
]);
}
}

View File

@@ -0,0 +1,33 @@
<?php
namespace Modules\Lpj\Database\Seeders;
use Illuminate\Database\Seeder;
use Modules\Lpj\Models\HubunganPenghuniJaminan;
class HubunganPenghuniJaminanSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
HubunganPenghuniJaminan::insert([
[
'name' => 'Suami/Istri',
],
[
'name' => 'Anak',
],
[
'name' => 'Saudara Kandung',
],
[
'name' => 'Orang Tua',
],
[
'name' => 'Kontrak/Kost'
]
]);
}
}

View File

@@ -0,0 +1,39 @@
<?php
namespace Modules\Lpj\Database\Seeders;
use Illuminate\Database\Seeder;
use Modules\Lpj\Models\IjinUsaha;
class IjinUsahaSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
IjinUsaha::insert([
[
'code' => 'IU001',
'name' => 'Bisnis',
'status' => 1,
'created_at' => now(),
'updated_at' => now()
],
[
'code' => 'IU002',
'name' => 'Properti',
'status' => 1,
'created_at' => now(),
'updated_at' => now()
],
[
'code' => 'IU003',
'name' => 'Personal Properti',
'status' => 1,
'created_at' => now(),
'updated_at' => now()
]
]);
}
}

View File

@@ -0,0 +1,68 @@
<?php
namespace Modules\Lpj\Database\Seeders;
use Illuminate\Database\Seeder;
use Modules\Lpj\Models\JenisDokumen;
class JenisDokumenSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
JenisDokumen::insert([
[
'name' => 'Sertifikat',
'max_size' => 15,
'description' => 'Foto copy Sertifikat sesuai dengan asli',
'status' => 1,
'created_at' => now(),
'updated_at' => now(),
'created_by' => 1,
'updated_by' => 1
],
[
'name' => 'PBB/NJOP',
'max_size' => 15,
'description' => 'Foto Copy PBB/NJOP Tahun Terakhir',
'status' => 1,
'created_at' => now(),
'updated_at' => now(),
'created_by' => 1,
'updated_by' => 1
],
[
'name' => 'NPWP Perorangan/Perusahaan',
'max_size' => 10,
'description' => 'Copy NPWP Perorangan/Perusahaan',
'status' => 1,
'created_at' => now(),
'updated_at' => now(),
'created_by' => 1,
'updated_by' => 1
],
[
'name' => 'Siteplan',
'max_size' => 10,
'description' => 'Siteplan',
'status' => 1,
'created_at' => now(),
'updated_at' => now(),
'created_by' => 1,
'updated_by' => 1
],
[
'name' => 'Surat Pernyataan Kebenaran Data',
'max_size' => 5,
'description' => 'Surat Pernyataan Kebenaran Data (Surat Representasi)',
'status' => 1,
'created_at' => now(),
'updated_at' => now(),
'created_by' => 1,
'updated_by' => 1
]
]);
}
}

View File

@@ -0,0 +1,90 @@
<?php
namespace Modules\Lpj\Database\Seeders;
use Illuminate\Database\Seeder;
use Modules\Lpj\Models\JenisFasilitasKredit;
class JenisFasilitasKreditSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
JenisFasilitasKredit::insert([
[
'code' => 'JFK001',
'name' => 'KPR FLPP',
'status' => 1,
'created_at' => now(),
'updated_at' => now(),
'created_by' => 1,
'updated_by' => 1
],
[
'code' => 'JFK002',
'name' => 'KPR KERJASAMA',
'status' => 1,
'created_at' => now(),
'updated_at' => now(),
'created_by' => 1,
'updated_by' => 1
],
[
'code' => 'JFK003',
'name' => 'KPR ≤ 500 JT',
'status' => 1,
'created_at' => now(),
'updated_at' => now(),
'created_by' => 1,
'updated_by' => 1
],
[
'code' => 'JFK004',
'name' => 'KPR > 500 JT',
'status' => 1,
'created_at' => now(),
'updated_at' => now(),
'created_by' => 1,
'updated_by' => 1
],
[
'code' => 'JFK005',
'name' => 'KKB',
'status' => 1,
'created_at' => now(),
'updated_at' => now(),
'created_by' => 1,
'updated_by' => 1
],
[
'code' => 'JFK006',
'name' => 'KPA',
'status' => 1,
'created_at' => now(),
'updated_at' => now(),
'created_by' => 1,
'updated_by' => 1
],
[
'code' => 'JFK007',
'name' => 'MODAL KERJA',
'status' => 1,
'created_at' => now(),
'updated_at' => now(),
'created_by' => 1,
'updated_by' => 1
],
[
'code' => 'JFK008',
'name' => 'INVESTASI',
'status' => 1,
'created_at' => now(),
'updated_at' => now(),
'created_by' => 1,
'updated_by' => 1
],
]);
}
}

View File

@@ -0,0 +1,73 @@
<?php
namespace Modules\Lpj\Database\Seeders;
use Illuminate\Database\Seeder;
use Modules\Lpj\Models\JenisJaminan;
class JenisJaminanSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
JenisJaminan::insert([
[
'code' => 'JJ001',
'name' => 'Tanah',
'slug' => 'tanah',
'jenis_legalitas_jaminan_id' => '["JLJ001","JLJ003","JLJ004","JLJ005","JLJ006"]',
'created_at' => now(),
'updated_at' => now(),
'authorized_at' => now(),
'created_by' => 1,
'updated_by' => 1
],
[
'code' => 'JJ002',
'name' => 'Rumah Tinggal / Ruko (Unit) / Apartemen (Unit) / Gudang',
'slug' => 'rumah-tinggal-ruko-unit-apartemen-unit-gudang',
'jenis_legalitas_jaminan_id' => null,
'created_at' => now(),
'updated_at' => now(),
'authorized_at' => now(),
'created_by' => 1,
'updated_by' => 1
],
[
'code' => 'JJ003',
'name' => 'Kawasan Industrial / Komersil / Residensial - Perumahan',
'slug' => 'kawasan-industrial-komersil-residensial-perumahan',
'jenis_legalitas_jaminan_id' => null,
'created_at' => now(),
'updated_at' => now(),
'authorized_at' => now(),
'created_by' => 1,
'updated_by' => 1
],
[
'code' => 'JJ004',
'name' => 'Gedung Apartement / Kantor / Condotel (Strata Tittle)',
'slug' => 'gedung-apartement-kantor-condotel-strata-tittle',
'jenis_legalitas_jaminan_id' => '["JLJ001","JLJ002"]',
'created_at' => now(),
'updated_at' => now(),
'authorized_at' => now(),
'created_by' => 1,
'updated_by' => 1
],
[
'code' => 'JJ005',
'name' => 'Mall',
'slug' => 'mall',
'jenis_legalitas_jaminan_id' => '["JLJ001","JLJ006"]',
'created_at' => now(),
'updated_at' => now(),
'authorized_at' => null,
'created_by' => 1,
'updated_by' => 1
]
]);
}
}

View File

@@ -0,0 +1,32 @@
<?php
namespace Modules\Lpj\Database\Seeders;
use Illuminate\Database\Seeder;
use Modules\Lpj\Models\JenisLaporan;
class JenisLaporanSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
JenisLaporan::insert([
[
'code' => 'JL001',
'name' => 'Short Report',
'status' => 1,
'created_at' => now(),
'updated_at' => now()
],
[
'code' => 'JL002',
'name' => 'Full Report',
'status' => 1,
'created_at' => now(),
'updated_at' => now()
]
]);
}
}

View File

@@ -0,0 +1,116 @@
<?php
namespace Modules\Lpj\Database\Seeders;
use Illuminate\Database\Seeder;
use Modules\Lpj\Models\JenisLegalitasJaminan;
class JenisLegalitasJaminanSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
JenisLegalitasJaminan::insert([
[
'code' => 'JLJ001',
'name' => 'Sertifikat',
'slug' => 'sertifikat',
'custom_field' => 'Luas Tanah',
'custom_field_type' => 'number',
'status' => 1,
'created_at' => now(),
'updated_at' => now(),
'deleted_at' => null,
'created_by' => 1,
'updated_by' => 1,
'deleted_by' => null
],
[
'code' => 'JLJ002',
'name' => 'SHGB',
'slug' => 'shgb',
'custom_field' => null,
'custom_field_type' => null,
'status' => 1,
'created_at' => now(),
'updated_at' => now(),
'deleted_at' => now(),
'created_by' => 1,
'updated_by' => 1,
'deleted_by' => 1
],
[
'code' => 'JLJ003',
'name' => 'Copy PBB / NJOP Tahun Terakhir (Jika Ada)',
'slug' => 'copy-pbb-njop-tahun-terakhir-jika-ada',
'custom_field' => null,
'custom_field_type' => null,
'status' => 1,
'created_at' => now(),
'updated_at' => now(),
'deleted_at' => null,
'created_by' => 1,
'updated_by' => 1,
'deleted_by' => null
],
[
'code' => 'JLJ004',
'name' => 'Copy NPWP Perusahaan/Perorangan',
'slug' => 'copy-npwp-perusahaanperorangan',
'custom_field' => null,
'custom_field_type' => null,
'status' => 1,
'created_at' => now(),
'updated_at' => now(),
'deleted_at' => null,
'created_by' => 1,
'updated_by' => 1,
'deleted_by' => null
],
[
'code' => 'JLJ005',
'name' => 'Siteplan',
'slug' => 'siteplan',
'custom_field' => null,
'custom_field_type' => null,
'status' => 1,
'created_at' => now(),
'updated_at' => now(),
'deleted_at' => null,
'created_by' => 1,
'updated_by' => 1,
'deleted_by' => null
],
[
'code' => 'JLJ006',
'name' => 'Surat Pernyataan Kebenaran Data (Surat Representasi)',
'slug' => 'surat-pernyataan-kebenaran-data-surat-representasi',
'custom_field' => null,
'custom_field_type' => null,
'status' => 1,
'created_at' => now(),
'updated_at' => now(),
'deleted_at' => null,
'created_by' => 1,
'updated_by' => 1,
'deleted_by' => null
],
[
'code' => 'JLJ007',
'name' => 'IMB',
'slug' => 'imb',
'custom_field' => 'Luas Bangunan',
'custom_field_type' => 'number',
'status' => 1,
'created_at' => now(),
'updated_at' => now(),
'deleted_at' => null,
'created_by' => 1,
'updated_by' => 1,
'deleted_by' => null
]
]);
}
}

View File

@@ -0,0 +1,30 @@
<?php
namespace Modules\Lpj\Database\Seeders;
use Illuminate\Database\Seeder;
use Modules\Lpj\Models\JenisPenilaian;
class JenisPenilaianSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
JenisPenilaian::insert([
[
'code' => 'JP1',
'name' => 'Internal',
'created_at' => now(),
'updated_at' => now()
],
[
'code' => 'JP2',
'name' => 'External',
'created_at' => now(),
'updated_at' => now()
],
]);
}
}

View File

@@ -0,0 +1,102 @@
<?php
namespace Modules\Lpj\Database\Seeders;
use Modules\Lpj\Models\KJPP;
use Illuminate\Database\Seeder;
class KJPPSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
KJPP::insert([
[
'code' => 'K000101',
'name' => 'Bank Anda',
'jenis_kantor' => 'Kantor Pusat',
'nomor_ijin_usaha' => 'IU001',
'province_code' => '32',
'city_code' => '32.75',
'district_code' => '32.75.03',
'village_code' => '32.75.03.1001',
'address' => 'Jl. Apel no. 1',
'postal_code' => '17125',
'nomor_telepon_kantor' => '0219976896',
'email_kantor' => 'bankanda@bankanda.id',
'nama_pimpinan' => 'Ida Royani',
'nomor_hp_pimpinan' => '081800908070',
'nama_pic_reviewer' => 'Beno',
'nomor_hp_pic_reviewer' => '081765489070',
'nama_pic_admin' => 'Dani',
'nomor_hp_pic_admin' => '081278786666',
'nama_pic_marketing' => 'Feni',
'nomor_hp_pic_marketing' => '087867590801',
'ijin_usaha_id' => '["IU001","IU002"]',
'jenis_aset_id' => '["JJ001","JJ002","JJ003"]',
'attachment' => 'default.pdf',
'status' => 1,
'created_at' => now(),
'updated_at' => now()
],
[
'code' => 'K000201',
'name' => 'Bank Juri',
'jenis_kantor' => 'Kantor Pusat',
'nomor_ijin_usaha' => 'IU001',
'province_code' => '12',
'city_code' => '12.04',
'district_code' => '12.04.11',
'village_code' => '12.04.11.2005',
'address' => 'Jl. Mangga no. 1',
'postal_code' => '22876',
'nomor_telepon_kantor' => '0219976890',
'email_kantor' => 'bankjuri@bankjuri.id',
'nama_pimpinan' => 'Arif Simbolo bolo',
'nomor_hp_pimpinan' => '089643475023',
'nama_pic_reviewer' => 'Beno Harefa',
'nomor_hp_pic_reviewer' => '081765489080',
'nama_pic_admin' => 'Dani Harefa',
'nomor_hp_pic_admin' => '081278786667',
'nama_pic_marketing' => 'Feni Harefa',
'nomor_hp_pic_marketing' => '081765489075',
'ijin_usaha_id' => '["IU001","IU002","IU003"]',
'jenis_aset_id' => '["JJ001","JJ004","JJ003"]',
'attachment' => 'default.pdf',
'status' => 1,
'created_at' => now(),
'updated_at' => now()
],
[
'code' => 'K000301',
'name' => 'Bank Gantra',
'jenis_kantor' => 'Kantor Pusat',
'nomor_ijin_usaha' => 'IU001',
'province_code' => '12',
'city_code' => '12.21',
'district_code' => '12.21.05',
'village_code' => '12.21.05.2005',
'address' => 'Jl. Apel no. 1',
'postal_code' => '22776',
'nomor_telepon_kantor' => '0219976889',
'email_kantor' => 'bankgantra@bankgantra.id',
'nama_pimpinan' => 'Arif Simantra',
'nomor_hp_pimpinan' => '089643475020',
'nama_pic_reviewer' => 'Beno Aditya',
'nomor_hp_pic_reviewer' => '081765489079',
'nama_pic_admin' => 'Dani Maulana',
'nomor_hp_pic_admin' => '081278786680',
'nama_pic_marketing' => 'Feni Rose',
'nomor_hp_pic_marketing' => '081890901234',
'ijin_usaha_id' => '["IU001","IU002","IU003"]',
'jenis_aset_id' => '["JJ001","JJ002","JJ005"]',
'attachment' => 'default.pdf',
'status' => 1,
'created_at' => now(),
'updated_at' => now()
]
]);
}
}

View File

@@ -1,17 +1,45 @@
<?php
namespace Modules\Lpj\Database\Seeders;
namespace Modules\Lpj\Database\Seeders;
use Illuminate\Database\Seeder;
use Illuminate\Database\Seeder;
class LpjDatabaseSeeder extends Seeder
class LpjDatabaseSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
/**
* Run the database seeds.
*/
public function run()
: void
{
// $this->call([]);
}
$this->call([
BranchSeeder::class,
CurrencySeeder::class,
JenisFasilitasKreditSeeder::class,
JenisLegalitasJaminanSeeder::class,
JenisJaminanSeeder::class,
JenisDokumenSeeder::class,
TujuanPenilaianSeeder::class,
NilaiPlatformSeeder::class,
HubunganPemilikJaminanSeeder::class,
HubunganPenghuniJaminanSeeder::class,
ArahMataAnginSeeder::class,
StatusPermohonanSeeder::class,
RegionSeeder::class,
TeamsSeeder::class,
TeamUsersSeeder::class,
JenisPenilaianSeeder::class,
TujuanPenilaianKJPPSeeder::class,
IjinUsahaSeeder::class,
JenisLaporanSeeder::class,
DebitureSeeder::class,
PermohonanSeeder::class,
PemilikJaminanSeeder::class,
DokumenJaminanSeeder::class,
DetailDokumenJaminanSeeder::class,
KJPPSeeder::class,
PenawaranSeeder::class,
DetailPenawaranSeeder::class,
PenilaianSeeder::class,
]);
}
}

View File

@@ -0,0 +1,45 @@
<?php
namespace Modules\Lpj\Database\Seeders;
use Illuminate\Database\Seeder;
use Modules\Lpj\Models\NilaiPlafond;
class NilaiPlatformSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
NilaiPlafond::insert([
[
'code' => 'NP001',
'name' => '5 M - 10 M',
'status' => 1,
'created_at' => now(),
'updated_at' => now(),
'created_by' => 1,
'updated_by' => 1
],
[
'code' => 'NP002',
'name' => '2 M - 5 M',
'status' => 1,
'created_at' => now(),
'updated_at' => now(),
'created_by' => 1,
'updated_by' => 1
],
[
'code' => 'NP003',
'name' => '< 2M',
'status' => 1,
'created_at' => now(),
'updated_at' => now(),
'created_by' => 1,
'updated_by' => 1
]
]);
}
}

View File

@@ -0,0 +1,118 @@
<?php
namespace Modules\Lpj\Database\Seeders;
use Illuminate\Database\Seeder;
use Modules\Lpj\Models\PemilikJaminan;
class PemilikJaminanSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
PemilikJaminan::insert([
[
'debiture_id' => 2,
'hubungan_pemilik_jaminan_id' => 1,
'name' => 'Antonius Ginting',
'npwp' => '234567890123456',
'nomor_id' => '13144213123',
'email' => 'x@gmail.com',
'phone' => '081234567891',
'province_code' => '31',
'city_code' => '31.71',
'district_code' => '31.71.06',
'village_code' => '31.71.06.1001',
'postal_code' => '10310',
'address' => 'Jl. Menteng Tengah No.66',
'status' => 1,
'created_at' => now(),
'updated_at' => now(),
'created_by' => 1,
'updated_by' => 1
],
[
'debiture_id' => 7,
'hubungan_pemilik_jaminan_id' => 1,
'name' => 'Rahmat Rafli',
'npwp' => '1234689743418451',
'nomor_id' => '32754590325823',
'email' => 'testing@mail.com',
'phone' => '081385777611',
'province_code' => '32',
'city_code' => '32.75',
'district_code' => '32.75.03',
'village_code' => '32.75.03.1001',
'postal_code' => '10310',
'address' => 'Jl. Apel 1 no. 9',
'status' => 1,
'created_at' => now(),
'updated_at' => now(),
'created_by' => 1,
'updated_by' => 1
],
[
'debiture_id' => 1,
'hubungan_pemilik_jaminan_id' => 1,
'name' => 'Willy',
'npwp' => '123455432109876',
'nomor_id' => null,
'email' => 'w@gmail.com',
'phone' => '08113242341',
'province_code' => '31',
'city_code' => '31.74',
'district_code' => '31.74.09',
'village_code' => '31.74.09.1003',
'postal_code' => '12630',
'address' => null,
'status' => 1,
'created_at' => now(),
'updated_at' => now(),
'created_by' => 1,
'updated_by' => 1
],
[
'debiture_id' => 4,
'hubungan_pemilik_jaminan_id' => 1,
'name' => 'Testing',
'npwp' => '1029280183912111',
'nomor_id' => null,
'email' => 'testing@email.com',
'phone' => '098172386',
'province_code' => '11',
'city_code' => '11.01',
'district_code' => '11.01.01',
'village_code' => '11.01.01.2001',
'postal_code' => '23773',
'address' => 'alamat',
'status' => 1,
'created_at' => now(),
'updated_at' => now(),
'created_by' => 1,
'updated_by' => 1
],
[
'debiture_id' => 7,
'hubungan_pemilik_jaminan_id' => 1,
'name' => 'Testing 2',
'npwp' => '1234689743418451',
'nomor_id' => null,
'email' => 'testing@mail.com',
'phone' => '081385777611',
'province_code' => '31',
'city_code' => '31.71',
'district_code' => '31.71.06',
'village_code' => '31.71.06.1001',
'postal_code' => '10310',
'address' => 'Jl. Menteng Raya no. 13',
'status' => 1,
'created_at' => now(),
'updated_at' => now(),
'created_by' => 1,
'updated_by' => 1
]
]);
}
}

View File

@@ -0,0 +1,46 @@
<?php
namespace Modules\Lpj\Database\Seeders;
use Illuminate\Database\Seeder;
use Modules\Lpj\Models\PenawaranTender;
class PenawaranSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
PenawaranTender::insert([
[
'code' => 'NP001',
'nomor_registrasi' => 'REG0000002',
'tujuan_penilaian_kjpp_id' => 3,
'jenis_laporan_id' => 2,
'start_date' => '2024-10-21',
'end_date' => '2024-10-28',
'catatan' => 'Hai',
'status' => 'tender',
'created_at' => now(),
'updated_at' => now(),
'created_by' => 1,
'updated_by' => 1
],
[
'code' => 'NP002',
'nomor_registrasi' => 'REG0000003',
'tujuan_penilaian_kjpp_id' => 1,
'jenis_laporan_id' => 1,
'start_date' => '2024-10-28',
'end_date' => '2024-10-31',
'catatan' => null,
'status' => 'tender',
'created_at' => now(),
'updated_at' => now(),
'created_by' => 1,
'updated_by' => 1
]
]);
}
}

View File

@@ -0,0 +1,51 @@
<?php
namespace Modules\Lpj\Database\Seeders;
use Illuminate\Database\Seeder;
use Modules\Lpj\Models\Penilaian;
class PenilaianSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
Penilaian::insert([
[
'jenis_penilaian_id' => 2,
'teams_id' => 2,
'tanggal_kunjungan' => now(),
'keterangan' => 'Hai',
'status' => 'done',
'nomor_registrasi' => 'REG0000010',
'penilaian_id' => 2,
'surveyor_id' => 1,
'penilai_surveyor_id' => 1
],
[
'jenis_penilaian_id' => 2,
'teams_id' => 1,
'tanggal_kunjungan' => now(),
'keterangan' => 'Hello',
'status' => 'done',
'nomor_registrasi' => 'REG0000008',
'penilaian_id' => 2,
'surveyor_id' => 1,
'penilai_surveyor_id' => 1
],
[
'jenis_penilaian_id' => 2,
'teams_id' => 2,
'tanggal_kunjungan' => now(),
'keterangan' => 'Hello',
'status' => 'done',
'nomor_registrasi' => 'REG0000007',
'penilaian_id' => 1,
'surveyor_id' => 1,
'penilai_surveyor_id' => 1
]
]);
}
}

View File

@@ -0,0 +1,126 @@
<?php
namespace Modules\Lpj\Database\Seeders;
use Illuminate\Database\Seeder;
use Modules\Lpj\Models\Permohonan;
class PermohonanSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
Permohonan::insert([
[
'nomor_registrasi' => 'REG0000002',
'tanggal_permohonan' => '2024-09-11',
'user_id' => 1,
'branch_id' => 1,
'tujuan_penilaian_id' => 1,
'debiture_id' => 1,
'status' => 'registered',
'created_at' => now(),
'updated_at' => now(),
'created_by' => 1,
'updated_by' => 1,
'jenis_fasilitas_kredit_id' => 1,
'nilai_plafond_id' => 1,
'status_bayar' => 'sudah_bayar',
'nilai_njop' => 'KJM3413259230951024',
'jenis_penilaian_id' => 2
],
[
'nomor_registrasi' => 'REG0000003',
'tanggal_permohonan' => '2024-09-13',
'user_id' => 1,
'branch_id' => 1,
'tujuan_penilaian_id' => 1,
'debiture_id' => 1,
'status' => 'registered',
'created_at' => now(),
'updated_at' => now(),
'created_by' => 1,
'updated_by' => 1,
'jenis_fasilitas_kredit_id' => 1,
'nilai_plafond_id' => 1,
'status_bayar' => 'sudah_bayar',
'nilai_njop' => 'KJM3413259230951025',
'jenis_penilaian_id' => 2
],
[
'nomor_registrasi' => 'REG0000006',
'tanggal_permohonan' => '2024-10-18',
'user_id' => 1,
'branch_id' => 1,
'tujuan_penilaian_id' => 1,
'debiture_id' => 2,
'status' => 'registered',
'created_at' => now(),
'updated_at' => now(),
'created_by' => 1,
'updated_by' => 1,
'jenis_fasilitas_kredit_id' => 4,
'nilai_plafond_id' => 1,
'status_bayar' => 'sudah_bayar',
'nilai_njop' => '23425654765868',
'jenis_penilaian_id' => 2
],
[
'nomor_registrasi' => 'REG0000007',
'tanggal_permohonan' => '2024-10-28',
'user_id' => 1,
'branch_id' => 1,
'tujuan_penilaian_id' => 7,
'debiture_id' => 4,
'status' => 'done',
'created_at' => now(),
'updated_at' => now(),
'created_by' => 1,
'updated_by' => 1,
'jenis_fasilitas_kredit_id' => 7,
'nilai_plafond_id' => 1,
'status_bayar' => 'sudah_bayar',
'nilai_njop' => '421354365747658',
'jenis_penilaian_id' => 2
],
[
'nomor_registrasi' => 'REG0000008',
'tanggal_permohonan' => '2024-10-28',
'user_id' => 1,
'branch_id' => 1,
'tujuan_penilaian_id' => 1,
'debiture_id' => 7,
'status' => 'done',
'created_at' => now(),
'updated_at' => now(),
'created_by' => 1,
'updated_by' => 1,
'jenis_fasilitas_kredit_id' => 7,
'nilai_plafond_id' => 2,
'status_bayar' => 'sudah_bayar',
'nilai_njop' => '421354365747659',
'jenis_penilaian_id' => 2
],
[
'nomor_registrasi' => 'REG0000010',
'tanggal_permohonan' => '2024-10-28',
'user_id' => 1,
'branch_id' => 1,
'tujuan_penilaian_id' => 5,
'debiture_id' => 7,
'status' => 'done',
'created_at' => now(),
'updated_at' => now(),
'created_by' => 1,
'updated_by' => 1,
'jenis_fasilitas_kredit_id' => 4,
'nilai_plafond_id' => 1,
'status_bayar' => 'sudah_bayar',
'nilai_njop' => '421354365747660',
'jenis_penilaian_id' => 2
]
]);
}
}

View File

@@ -0,0 +1,30 @@
<?php
namespace Modules\Lpj\Database\Seeders;
use Illuminate\Database\Seeder;
use Modules\Lpj\Models\Regions;
class RegionSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
Regions::insert([
[
'code' => 'R01',
'name' => 'Region 1',
'created_at' => now(),
'updated_at' => now()
],
[
'code' => 'R02',
'name' => 'Region 2',
'created_at' => now(),
'updated_at' => now()
]
]);
}
}

View File

@@ -0,0 +1,128 @@
<?php
namespace Modules\Lpj\Database\Seeders;
use Illuminate\Database\Seeder;
use Modules\Lpj\Models\StatusPermohonan;
class StatusPermohonanSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
StatusPermohonan::insert([
[
'name' => 'Order',
'slug' => 'order',
'description' => 'Status pengisian pengajuan dari AO sampai dengan approval dari BD atau EO Pemohon',
'status' => 1,
'created_at' => now(),
'updated_at' => now(),
'created_by' => 1,
'updated_by' => 1
],
[
'name' => 'Revisi',
'slug' => 'revisi',
'description' => 'Back to pemohon dari admin',
'status' => 1,
'created_at' => now(),
'updated_at' => now(),
'created_by' => 1,
'updated_by' => 1
],
[
'name' => 'Register',
'slug' => 'register',
'description' => 'pengajuan pemohon yang sudah diperiksa admin dan diproses ke SO',
'status' => 1,
'created_at' => now(),
'updated_at' => now(),
'created_by' => 1,
'updated_by' => 1
],
[
'name' => 'Assign',
'slug' => 'assign',
'description' => 'posisi dari SO ke penilai setelah penunjukkan penilai',
'status' => 1,
'created_at' => now(),
'updated_at' => now(),
'created_by' => 1,
'updated_by' => 1
],
[
'name' => 'Survey',
'slug' => 'survey',
'description' => 'tanggal kunjungan yang sudah ditentukan',
'status' => 1,
'created_at' => now(),
'updated_at' => now(),
'created_by' => 1,
'updated_by' => 1
],
[
'name' => 'Proses Laporan',
'slug' => 'proses-laporan',
'description' => 'posisi penginputan yang dilakukan oleh penilai, dengan indikator tanggal kunjungan sampai laporan selesai (sesuai SLA)',
'status' => 1,
'created_at' => now(),
'updated_at' => now(),
'created_by' => 1,
'updated_by' => 1
],
[
'name' => 'Approved',
'slug' => 'approved',
'description' => 'Laporan atau resume selesai',
'status' => 1,
'created_at' => now(),
'updated_at' => now(),
'created_by' => 1,
'updated_by' => 1
],
[
'name' => 'Delivered',
'slug' => 'delivered',
'description' => 'Sudah isi nilai likuidasi',
'status' => 1,
'created_at' => now(),
'updated_at' => now(),
'created_by' => 1,
'updated_by' => 1
],
[
'name' => 'Registered',
'slug' => 'registered',
'description' => 'abc',
'status' => 1,
'created_at' => now(),
'updated_at' => now(),
'created_by' => 1,
'updated_by' => 1
],
[
'name' => 'Tender',
'slug' => 'tender',
'description' => 'abc',
'status' => 1,
'created_at' => now(),
'updated_at' => now(),
'created_by' => 1,
'updated_by' => 1
],
[
'name' => 'Done',
'slug' => 'done',
'description' => 'abc',
'status' => 1,
'created_at' => now(),
'updated_at' => now(),
'created_by' => 1,
'updated_by' => 1
]
]);
}
}

View File

@@ -0,0 +1,32 @@
<?php
namespace Modules\Lpj\Database\Seeders;
use Illuminate\Database\Seeder;
use Modules\Lpj\Models\TeamsUsers;
class TeamUsersSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
TeamsUsers::insert([
[
'teams_id' => 1,
'user_id' => 3,
'status' => 1,
'created_at' => now(),
'updated_at' => now()
],
[
'teams_id' => 2,
'user_id' => 4,
'status' => 1,
'created_at' => now(),
'updated_at' => now()
]
]);
}
}

View File

@@ -0,0 +1,32 @@
<?php
namespace Modules\Lpj\Database\Seeders;
use Illuminate\Database\Seeder;
use Modules\Lpj\Models\Teams;
class TeamsSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
Teams::insert([
[
'regions_id' => 1,
'code' => 'T01',
'name' => 'Penilai 1',
'created_at' => now(),
'updated_at' => now()
],
[
'regions_id' => 2,
'code' => 'T02',
'name' => 'Penilai 2',
'created_at' => now(),
'updated_at' => now()
]
]);
}
}

View File

@@ -0,0 +1,46 @@
<?php
namespace Modules\Lpj\Database\Seeders;
use Illuminate\Database\Seeder;
use Modules\Lpj\Models\TujuanPenilaianKJPP;
class TujuanPenilaianKJPPSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
TujuanPenilaianKJPP::insert([
[
'code' => 'TPK01',
'name' => 'Transaksi Jual Beli Aset',
'status' => 1,
'created_at' => now(),
'updated_at' => now()
],
[
'code' => 'TPK02',
'name' => 'Penjaminan Utang atau Pembiayaan',
'status' => 1,
'created_at' => now(),
'updated_at' => now()
],
[
'code' => 'TPK03',
'name' => 'Pelaporan Keuangan',
'status' => 1,
'created_at' => now(),
'updated_at' => now()
],
[
'code' => 'TPK04',
'name' => 'Pengambilalihan atau Merger dan Akuisisi (M&A)',
'status' => 1,
'created_at' => now(),
'updated_at' => now()
]
]);
}
}

View File

@@ -0,0 +1,95 @@
<?php
namespace Modules\Lpj\Database\Seeders;
use Illuminate\Database\Seeder;
use Modules\Lpj\Models\TujuanPenilaian;
class TujuanPenilaianSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
TujuanPenilaian::insert([
[
'code' => 'TP0001',
'name' => 'Penilaian Baru',
'status' => 1,
'created_at' => now(),
'updated_at' => now(),
'deleted_at' => null,
'created_by' => 1,
'updated_by' => 1,
'deleted_by' => null
],
[
'code' => 'TP0002',
'name' => 'Penilaian Ulang',
'status' => 1,
'created_at' => now(),
'updated_at' => now(),
'deleted_at' => null,
'created_by' => 1,
'updated_by' => 1,
'deleted_by' => null
],
[
'code' => 'TP0003',
'name' => 'Review',
'status' => 1,
'created_at' => now(),
'updated_at' => now(),
'deleted_at' => now(),
'created_by' => 1,
'updated_by' => 1,
'deleted_by' => 1
],
[
'code' => 'TP0004',
'name' => 'Lelang',
'status' => 1,
'created_at' => now(),
'updated_at' => now(),
'deleted_at' => null,
'created_by' => 1,
'updated_by' => 1,
'deleted_by' => null
],
[
'code' => 'TP0005',
'name' => 'RAP',
'status' => 1,
'created_at' => now(),
'updated_at' => now(),
'deleted_at' => null,
'created_by' => 1,
'updated_by' => 1,
'deleted_by' => null
],
[
'code' => 'TP0006',
'name' => 'Revaluasi Aset',
'status' => 1,
'created_at' => now(),
'updated_at' => now(),
'deleted_at' => null,
'created_by' => 1,
'updated_by' => 1,
'deleted_by' => null
],
[
'code' => 'TP0007',
'name' => 'Asuransi',
'status' => 1,
'created_at' => now(),
'updated_at' => now(),
'deleted_at' => null,
'created_by' => 1,
'updated_by' => 1,
'deleted_by' => null
]
]);
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,8 @@
@extends('layouts.main')
@section('breadcrumbs')
{{ Breadcrumbs::render('sla') }}
@endsection
@section('content')
@endsection

View File

@@ -46,14 +46,14 @@
@php
$sortedTeamsActivity = $teamsActivity->sortBy(function ($item) {
return $item->team->penilaian
->filter(function ($penilaian) use ($item) {
return $penilaian->penilaian_id == $item->user->id ||
$penilaian->surveyor_id == $item->user->id ||
$penilaian->penilai_surveyor_id == $item->user->id;
return $item->team->penilaianTeam
->filter(function ($penilaianTeam) use ($item) {
return $penilaianTeam->user_id == $item->user->id;
})
->count();
});
@endphp
@foreach ($sortedTeamsActivity as $index => $item)
@@ -70,11 +70,9 @@
<th class="min-w-[150px]">
<span class="text-base text-gray-900 font-normal">
@php
$totalTasks = $item->team->penilaian
->filter(function ($penilaian) use ($item) {
return $penilaian->penilaian_id == $item->user->id ||
$penilaian->surveyor_id == $item->user->id ||
$penilaian->penilai_surveyor_id == $item->user->id;
$totalTasks = $item->team->penilaianTeam
->filter(function ($penilaianTeam) use ($item) {
return $penilaianTeam->user_id == $item->user->id;
})
->count();
@endphp
@@ -156,8 +154,6 @@
const apiUrl = accordion.querySelector('.card-grid').getAttribute(
'data-api-url');
console.log("This is the API URL: " + apiUrl);
const dataTableOptions = {
apiEndpoint: apiUrl,
pageSize: 5,
@@ -180,7 +176,7 @@
},
jenis_asset: {
title: 'Jenis Asset',
render: (item, data) => `${data.jenis_asset || ''}`,
render: (item, data) => `${data.permohonan.debiture.documents.map(d => d.jenis_jaminan.name) || ''}`,
},
jenis_report: {
title: 'Jenis Report',

View File

@@ -69,14 +69,34 @@
</td>
</tr>
<tr>
<td class="py-3 max-w-[100px]">
<td class="py-3 max-w-[100px] align-top">
Dokumen Jaminan
</td>
<td class="py-3 text-gray-700 text-2sm font-normal">
@if(isset($detail->dokumen_jaminan))
<a href="{{ route('debitur.jaminan.download',['id'=>$permohonan->debiture->id,'dokumen'=>$detail->id]) }}" class="badge badge-sm badge-outline mt-2">{{ basename($detail->dokumen_jaminan) }}
<i class="ki-filled ki-cloud-download"></i></a>
@php
$dokumen_jaminan = is_array(json_decode($detail->dokumen_jaminan)) ? json_decode($detail->dokumen_jaminan) : [$detail->dokumen_jaminan];
$dokumen_nomor = is_array(json_decode($detail->dokumen_nomor)) ? json_decode($detail->dokumen_nomor) : ($detail->dokumen_nomor ? [$detail->dokumen_nomor] : []);
@endphp
@foreach($dokumen_jaminan as $index => $dokumen)
<div class="flex w-full lg:w-[30%]">
@if(in_array(Auth::user()->roles[0]->name,['administrator','pemohon-eo']))
@if(!empty($dokumen_nomor))
<span class="flex-1 mt-2 text-info">Nomor Dokumen : {{ $dokumen_nomor[$index] }}</span>
@endif
<a href="{{ route('debitur.jaminan.download', ['id' => $permohonan->debiture->id, 'dokumen' => $detail->id, 'index' => $index]) }}"
class="flex-none badge badge-sm badge-outline mt-2 mr-2">
{{ basename($dokumen) }}
<i class="ki-filled ki-cloud-download"></i>
</a>
@endif
<span class="flex-none badge badge-sm badge-outline badge-warning mt-2" onclick="viewPDF('{{ Storage::url($dokumen_jaminan[$index]) }}')"><i class="ki-filled ki-eye mr-2"></i>Preview</span>
</div>
<br>
@endforeach
@endif
</td>
</tr>
<tr>
@@ -95,3 +115,5 @@
@endforeach
</div>
</div>
@include('lpj::component.pdfviewer')

View File

@@ -0,0 +1,25 @@
<!-- Modal for PDF viewing -->
<div id="pdfModal" class="fixed inset-0 bg-gray-800 bg-opacity-75 flex items-center justify-center hidden w-full">
<div class="bg-white rounded-lg overflow-hidden shadow-xl transform transition-all min-w-3xl w-[1500px] h-[1200px]">
<div class="p-4 h-full">
<button onclick="closePDFModal()" class="float-right text-2xl">
<i class="ki-filled ki-cross-square text-red-600"></i>
</button>
<div id="pdfViewer" class="h-full"></div>
</div>
</div>
</div>
@push('scripts')
<script src="https://cdnjs.cloudflare.com/ajax/libs/pdfobject/2.3.0/pdfobject.min.js"></script>
<script>
function viewPDF(url) {
PDFObject.embed(url, "#pdfViewer");
document.getElementById('pdfModal').classList.remove('hidden');
}
function closePDFModal() {
document.getElementById('pdfModal').classList.add('hidden');
}
</script>
@endpush

View File

@@ -22,9 +22,10 @@
</label>
<div class="flex flex-wrap items-baseline w-full">
<div class="input-group w-full">
<select class="input tomselect w-full @error('branch_id') border-danger bg-danger-light @enderror" name="pemilik_jaminan_id" id="pemilik_jaminan_id">
<select onchange="changePemilikJaminan()" class="input tomselect w-full @error('branch_id') border-danger bg-danger-light @enderror" name="pemilik_jaminan_id" id="pemilik_jaminan_id">
<option value="">Pilih Pemilik Jaminan</option>
<option value="0">Sama Dengan Debitur</option>
<option value="00">Tidak Sama Dengan Debitur</option>
@if(isset($pemilikJaminan))
@foreach($pemilikJaminan as $pemilik)
@if(isset($document))
@@ -39,19 +40,71 @@
@endforeach
@endif
</select>
@if(isset($document->id))
<a href="{{ route('debitur.pemilik.create',$debitur->id) }}?from=update-document&document={{ $document->id }}" class="btn btn-light">
<i class="ki-outline ki-plus-squared"></i> Tambah Pemilik Jaminan
</a>
@else
<a href="{{ route('debitur.pemilik.create',$debitur->id) }}?from=create-document" class="btn btn-light">
<i class="ki-outline ki-plus-squared"></i> Tambah Pemilik Jaminan
</a>
@endif
</div>
@error('pemilik_jaminan_id')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
<fieldset id="pemilik_jaminan" class="hidden border border-solid border-gray-300 p-3 w-full mt-5 grid gap-5">
<legend class="text-sm">Pemilik Jaminan</legend>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Hubungan Pemilik Jaminan
</label>
<div class="flex flex-wrap items-baseline w-full">
<select class="input tomselect w-full @error('branch_id') border-danger bg-danger-light @enderror" name="hubungan_pemilik_jaminan_id" id="hubungan_pemilik_jaminan_id">
<option value="">Pilih Hubungan Pemilik Jaminan</option>
@if(isset($hubunganPemilik))
@foreach($hubunganPemilik as $hubungan)
@if(isset($pemilik))
<option value="{{ $hubungan->id }}" {{ isset($pemilik->hubungan_pemilik_jaminan_id) && $pemilik->hubungan_pemilik_jaminan_id == $hubungan->id?'selected' : '' }}>
{{ $hubungan->name }}
</option>
@else
<option value="{{ $hubungan->id }}">
{{ $hubungan->name }}
</option>
@endif
@endforeach
@endif
</select>
@error('hubungan_pemilik_jaminan_id')
<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">
Nama Lengkap
</label>
<div class="flex flex-wrap items-baseline w-full">
<div class="flex flex-col lg:flex-row gap-2 w-full">
<div class="flex flex-wrap items-baseline w-full">
<input class="input @error('pemilik_name') border-danger bg-danger-light @enderror" type="text " id="pemilik_name" name="pemilik_name" value="{{ $pemilik->name ?? '' }}" placeholder="Nama Pemilik Jaminan">
@error('pemilik_name')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
</div>
<div class="flex flex-wrap items-baseline w-full">
<input class="input @error('nomor_id') border-danger bg-danger-light @enderror" type="number" name="nomor_id" value="{{ $debitur->nomor_id ?? '' }}" placeholder="Nomor ID/KTP">
@error('nomor_id')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
</div>
</div>
</div>
</div>
<div id="nama_sertifikat">
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
&nbsp;
</label>
<div class="flex flex-wrap items-baseline w-full">
<button type="button" id="tambah_sertifikat" class="btn btn-primary btn-xs">Tambah Nama di Sertifikat</button>
</div>
</div>
</fieldset>
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
@@ -79,53 +132,175 @@
@enderror
</div>
</div>
@if(isset($document->id))
@foreach($document->detail as $detail)
<input type="hidden" name="detail_dokumen_jaminan_id[]" value="{{ $detail->id }}">
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56 font-bold">
{{ $loop->index + 1 }}. {{ $detail->jenisLegalitasJaminan->name }}
</label>
<input type="hidden" name="jenis_legalitas_jaminan_id[]" value=" {{ $detail->jenis_legalitas_jaminan_id }}">
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Nama Dokumen
</label>
<div class="flex flex-wrap items-baseline w-full">
<input class="input " type="text" id="name" name="name[]" value="{{ $detail->name ?? "" }}" placeholder="Nama Dokumen">
<div id="doctainer" class="grid gap-5">
@if(isset($document->id))
@php $n = 0; @endphp
@foreach($document->detail as $detail)
<input type="hidden" name="detail_dokumen_jaminan_id[]" value="{{ $detail->id }}">
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56 font-bold">
{{ $n + 1 }}. {{ $detail->jenisLegalitasJaminan->name }}
</label>
<input type="hidden" name="jenis_legalitas_jaminan_id[]" value=" {{ $detail->jenis_legalitas_jaminan_id }}">
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Dokumen Jaminan
</label>
<div class="flex flex-wrap items-baseline w-full">
<input class="file-input" type="file" name="dokumen_jaminan[]" value="">
@if(isset($detail->dokumen_jaminan))
<a href="{{ route('debitur.jaminan.download',['id'=>$debitur->id,'dokumen'=>$detail->id]) }}" class="badge badge-sm badge-outline mt-2">{{ basename($detail->dokumen_jaminan) }}
<i class="ki-filled ki-cloud-download"></i></a>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Nomor
</label>
<div class="flex flex-wrap items-baseline w-full">
<input class="input " type="text" id="name" name="name[]" value="{{ $detail->name ?? "" }}" placeholder="Nomor">
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Dokumen Jaminan
</label>
<div class="flex flex-wrap items-baseline w-full">
<div class="flex flex-col w-full gap-2" id="file-container-{{$n}}">
<div class="flex items-center gap-2">
<input class="flex-1 input" type="text" name="dokumen_nomor[{{ $n }}][]" placeholder="Nomor Dokumen">
<input class="flex-1 file-input" type="file" name="dokumen_jaminan[{{ $n }}][]">
<button type="button" class="flex-none btn btn-primary w-[100px] text-center" onclick="addFileInput({{ $n }})">Add More</button>
</div>
<div id="additional-files-{{ $n }}"></div>
</div>
@if(isset($detail->dokumen_jaminan))
@if(isset($detail->dokumen_jaminan))
@php
$dokumen_jaminan = is_array(json_decode($detail->dokumen_jaminan)) ? json_decode($detail->dokumen_jaminan) : [$detail->dokumen_jaminan];
$dokumen_nomor = is_array(json_decode($detail->dokumen_nomor)) ? json_decode($detail->dokumen_nomor) : ($detail->dokumen_nomor ? [$detail->dokumen_nomor] : []);
@endphp
<div class="flex flex-col w-full gap-2">
@foreach($dokumen_jaminan as $index => $dokumen)
<div class="flex w-full lg:w-[30%]">
@if(!empty($dokumen_nomor))
<span class="flex-1 mt-2 text-info text-sm">Nomor Dokumen : {{ $dokumen_nomor[$index] }}</span>
@endif
<a href="{{ route('debitur.jaminan.download', ['id' => $debitur->id, 'dokumen' => $detail->id, 'index' => $index]) }}"
class="flex-none badge badge-sm badge-outline mt-2 mr-2">
{{ basename($dokumen) }}
<i class="ki-filled ki-cloud-download"></i>
</a>
</div>
@endforeach
</div>
@endif
@endif
</div>
</div>
@if($detail->details)
@php $custom_field = json_decode($detail->details,true) @endphp
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56 capitalize">
{{ str_replace('_',' ',$detail->jenisLegalitasJaminan->custom_field) }}
</label>
<div class="flex flex-wrap items-baseline w-full">
<input class="input" type="text" name="custom_field[][$detail->jenisLegalitasJaminan->custom_field]" value="{{ $custom_field[$detail->jenisLegalitasJaminan->custom_field] }}">
</div>
</div>
@else
@if($detail->jenisLegalitasJaminan->custom_field)
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56 capitalize">
{{ str_replace('_',' ',$detail->jenisLegalitasJaminan->custom_field) }}
</label>
<div class="flex flex-wrap items-baseline w-full">
@if($detail->jenisLegalitasJaminan->custom_field_type === "text")
<input class="input" type="text" name="custom_field[][{{$detail->jenisLegalitasJaminan->custom_field}}]" placeholder="... M2">
@elseif($detail->jenisLegalitasJaminan->custom_field_type === "number")
<input class="input" type="number" name="custom_field[][{{$detail->jenisLegalitasJaminan->custom_field}}]" placeholder="... M2">
@elseif($detail->jenisLegalitasJaminan->custom_field_type === "date")
<input class="input" type="date" name="custom_field[][{{$detail->jenisLegalitasJaminan->custom_field}}]" placeholder="... M2">
@elseif($detail->jenisLegalitasJaminan->custom_field_type === "textarea")
<textarea class="textarea" rows="3" name="custom_field[][{{$detail->jenisLegalitasJaminan->custom_field}}]" placeholder="... M2"></textarea>
@else
<input class="input" type="text" name="custom_field[][{{$detail->jenisLegalitasJaminan->custom_field}}]" placeholder="... M2">
@endif
</div>
</div>
@endif
</div>
</div>
@endif
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Keterangan
</label>
<div class="flex flex-wrap items-baseline w-full">
<textarea class="textarea" rows="3" type="number" name="keterangan[]">{{ $detail->keterangan ?? "" }}</textarea>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Keterangan
</label>
<div class="flex flex-wrap items-baseline w-full">
<textarea class="textarea" rows="3" type="number" name="keterangan[]">{{ $detail->keterangan ?? "" }}</textarea>
</div>
</div>
@php $n++; @endphp
@endforeach
@foreach($legalitas as $item)
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56 font-bold">
{{ $n + 1 }}. {{ $item->name }}
</label>
<input type="hidden" name="jenis_legalitas_jaminan_id[]" value=" {{ $item->id }}">
</div>
</div>
@endforeach
@else
<div id="doctainer" class="grid gap-5">
</div>
@endif
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Nomor
</label>
<div class="flex flex-wrap items-baseline w-full">
<input class="input " type="text" id="name" name="name[]" value="" placeholder="Nomor">
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Dokumen Jaminan
</label>
<div class="flex flex-wrap items-baseline w-full">
<div class="flex flex-col w-full gap-2" id="file-container-{{$n}}">
<div class="flex items-center gap-2">
<input class="flex-1 input" type="text" name="dokumen_nomor[{{ $n }}][]" placeholder="Nomor Dokumen">
<input class="flex-1 file-input" type="file" name="dokumen_jaminan[{{ $n }}][]" multiple>
<button type="button" class="flex-none btn btn-primary w-[100px] text-center" onclick="addFileInput({{ $n }})">Add More</button>
</div>
<div id="additional-files-{{ $n }}"></div>
</div>
</div>
</div>
@if($item->custom_field)
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56 capitalize">
{{ str_replace('_',' ',$item->custom_field) }}
</label>
<div class="flex flex-wrap items-baseline w-full">
@if($item->custom_field_type === "text")
<input class="input" type="text" name="custom_field[][{{$item->custom_field}}]" placeholder="... M2">
@elseif($item->custom_field_type === "number")
<input class="input" type="number" name="custom_field[][{{$item->custom_field}}]" placeholder="... M2">
@elseif($item->custom_field_type === "date")
<input class="input" type="date" name="custom_field[][{{$item->custom_field}}]" placeholder="... M2">
@elseif($item->custom_field_type === "textarea")
<textarea class="textarea" rows="3" name="custom_field[][{{$item->custom_field}}]" placeholder="... M2"></textarea>
@else
<input class="input" type="text" name="custom_field[][{{$item->custom_field}}]" placeholder="... M2">
@endif
</div>
</div>
@endif
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Keterangan
</label>
<div class="flex flex-wrap items-baseline w-full">
<textarea class="textarea" rows="3" type="number" name="keterangan[]"></textarea>
</div>
</div>
@php $n++; @endphp
@endforeach
@endif
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
@@ -244,14 +419,72 @@
</form>
@push('scripts')
{{--Pemilik Jaminan--}}
<script>
document.addEventListener("DOMContentLoaded", function () {
const namaSertifikatDiv = document.getElementById("nama_sertifikat");
// Function to add delete event listeners to existing buttons
function addDeleteListeners() {
document.querySelectorAll(".delete-button").forEach(button => {
button.addEventListener("click", function () {
this.closest(".flex.items-baseline.flex-wrap.lg\\:flex-nowrap.gap-2\\.5.mb-5").remove();
});
});
}
// Add delete listeners to existing buttons
addDeleteListeners();
document.getElementById("tambah_sertifikat").addEventListener("click", function () {
const newDiv = document.createElement("div");
newDiv.className = "flex items-baseline flex-wrap lg:flex-nowrap gap-2.5 mb-5";
newDiv.innerHTML = `
<label class="form-label max-w-56">
Nama Lengkap
</label>
<div class="flex flex-wrap items-baseline w-full">
<div class="flex flex-col lg:flex-row gap-2 w-full">
<div class="flex flex-wrap items-baseline w-full">
<input class="input" type="text" name="detail_sertifikat[name][]" value="" placeholder="Nama Pemilik Jaminan">
</div>
<div class="flex flex-wrap items-baseline w-full">
<input class="input" type="number" name="detail_sertifikat[nomor_id][]" value="" placeholder="Nomor ID/KTP">
</div>
<button type="button" class="btn btn-danger btn-xs delete-button">Hapus</button>
</div>
</div>
`;
namaSertifikatDiv.appendChild(newDiv);
// Add delete listener to the new button
addDeleteListeners();
});
});
function changePemilikJaminan() {
var pemilikJaminan = document.getElementById("pemilik_jaminan_id").value;
var fieldsetPemilikJaminan = document.getElementById("pemilik_jaminan");
if (pemilikJaminan === "00") {
fieldsetPemilikJaminan.classList.remove("hidden");
} else {
fieldsetPemilikJaminan.classList.add("hidden");
}
}
</script>
{{--Legalitas Jaminan--}}
<script>
function getLegalitasJaminan() {
var legalitasJaminan = document.getElementById('jenis_jaminan_id').value;
var url = '/basic-data/jenis-jaminan/legalitas/' + legalitasJaminan;
var legalitasJaminan = document.getElementById("jenis_jaminan_id").value;
var documentId = "{{ $document->id ?? "0" }}";
var debiturId = "{{ $debitur->id }}";
var url = `/basic-data/jenis-jaminan/legalitas/${documentId}/${legalitasJaminan}`;
fetch(url, {
method: 'GET',
method: "GET",
headers: {
'Content-Type': 'application/json'
"Content-Type": "application/json",
"X-Requested-With": "XMLHttpRequest"
}
})
.then(response => {
@@ -261,49 +494,121 @@
return response.json();
})
.then(data => {
var doctainer = document.getElementById('doctainer');
doctainer.innerHTML = '';
var doctainer = document.getElementById("doctainer");
doctainer.innerHTML = "";
data.forEach((item, index) => {
doctainer.innerHTML += `
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56 font-bold">
${index + 1}. ${item.name}
</label>
<input type="hidden" name="jenis_legalitas_jaminan_id[]" value="${item.id}">
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Nama Dokumen
</label>
<div class="flex flex-wrap items-baseline w-full">
<input class="input " type="text" id="name" name="name[]" value="" placeholder="Nama Dokumen">
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56 font-bold">
${index + 1}. ${item.name}
</label>
<input type="hidden" name="jenis_legalitas_jaminan_id[]" value="${item.jenis_legalitas_jaminan_id}">
${item.is_existing ? `<input type="hidden" name="detail_dokumen_jaminan_id[]" value="${item.id}">` : ''}
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Dokumen Jaminan
</label>
<div class="flex flex-wrap items-baseline w-full">
<input class="file-input" type="file" name="dokumen_jaminan[]" value="">
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Nomor
</label>
<div class="flex flex-wrap items-baseline w-full">
<input class="input" type="text" name="name[]" value="${item.name || ''}" placeholder="Nomor">
</div>
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Keterangan
</label>
<div class="flex flex-wrap items-baseline w-full">
<textarea class="textarea" rows="3" type="number" name="keterangan[]"></textarea>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Dokumen Jaminan
</label>
<div class="flex flex-wrap items-baseline w-full" id="file-container-${index}">
<div class="flex flex-col w-full gap-2">
${item.dokumen_jaminan ? renderExistingFiles(item.dokumen_jaminan, debiturId, item.id, item.dokumen_nomor) : ''}
</div>
<div class="flex items-center gap-2 my-2 w-full">
<input class="flex-1 input" type="text" name="dokumen_nomor[${index}][]" placeholder="Nomor Dokumen">
<input class="flex-1 file-input" type="file" name="dokumen_jaminan[${index}][]" multiple>
<button type="button" class="flex-none btn btn-primary w-[100px] text-center" onclick="addFileInput(${index})">Add File</button>
</div>
</div>
</div>
</div>`;
})
${item.custom_field ? `
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56 capitalize">
${item.custom_field.replace(/_/g, " ")}
</label>
<div class="flex flex-wrap items-baseline w-full">
${getCustomFieldInput(item.custom_field_type, item.custom_field, item.details)}
</div>
</div>
` : ''}
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Keterangan
</label>
<div class="flex flex-wrap items-baseline w-full">
<textarea class="textarea" rows="3" name="keterangan[]">${item.keterangan || ''}</textarea>
</div>
</div>
`;
});
})
.catch(error => {
console.error('Error:', error);
// Handle the error here
});
.catch(error => console.error('Error:', error));
}
function addFileInput(index) {
const container = document.getElementById(`file-container-${index}`);
const newInput = document.createElement('div');
newInput.className = 'flex items-center gap-2 mb-2 w-full';
newInput.innerHTML = `
<input class="flex-1 input" type="text" name="dokumen_nomor[${index}][]" placeholder="Nomor Dokumen">
<input class="flex-1 file-input" type="file" name="dokumen_jaminan[${index}][]" multiple>
<button type="button" class="flex-none btn btn-danger w-[100px] text-center" onclick="removeFileInput(this)">Remove</button>
`;
container.appendChild(newInput);
}
function removeFileInput(button) {
button.closest('.flex.items-center.gap-2.mb-2').remove();
}
function renderExistingFiles(dokumenJaminan, debiturId, itemId, dokumenNomor) {
if (typeof dokumenJaminan === 'string' && typeof dokumenNomor === 'string') {
return `
<div class="flex w-full lg:w-[30%]">
<span class="flex-1 mt-2 text-info text-sm">Nomor Dokumen : ${dokumenNomor}</span>
<a href="/debitur/${debiturId}/jaminan/download?dokumen=${itemId}" class="flex-none badge badge-sm badge-outline mt-2">
${dokumenJaminan.split('/').pop()}
<i class="ki-filled ki-cloud-download"></i>
</a>
</div>
`;
} else if (Array.isArray(dokumenJaminan) && Array.isArray(dokumenNomor)) {
return dokumenJaminan.map((file, index) => `<div class="flex w-full lg:w-[30%]">
<span class="flex-1 mt-2 text-info text-sm">Nomor Dokumen : ${dokumenNomor[index] || 'N/A'}</span>
<a href="/debitur/${debiturId}/jaminan/download?dokumen=${itemId}&file=${file}" class="flex-none badge badge-sm badge-outline mt-2 mr-2">
${file.split('/').pop()}
<i class="ki-filled ki-cloud-download"></i>
</a></div>
`).join('');
}
return '';
}
function getCustomFieldInput(type, fieldName, value) {
value = value ? JSON.parse(value)[fieldName] || '' : '';
switch (type) {
case "text":
return `<input class="input" type="text" name="custom_field[][${fieldName}]" value="${value}">`;
case "number":
return `<input class="input" type="number" name="custom_field[][${fieldName}]" value="${value}">`;
case "date":
return `<input class="input" type="date" name="custom_field[][${fieldName}]" value="${value}">`;
case "textarea":
return `<textarea class="textarea" rows="3" name="custom_field[][${fieldName}]">${value}</textarea>`;
default:
return `<input class="input" type="text" name="custom_field[][${fieldName}]" value="${value}">`;
}
}
</script>
@endpush

View File

@@ -23,9 +23,11 @@
</div>
<div class="menu inline-flex" data-menu="true">
<div class="flex flex-nowrap justify-center gap-1.5">
@if(in_array(Auth::user()->roles[0]->name,['administrator','pemohon-eo']))
<a href="{{ route('debitur.jaminan.bulk.download',['id' => $debitur->id,'jaminan' => $document->id]) }}" class="btn btn-sm btn-icon btn-dark">
<i class="ki-outline ki-cloud-download"></i>
</a>
@endif
<a href="{{ route('debitur.jaminan.edit',['id' => $debitur->id,'jaminan' => $document->id]) }}" class="btn btn-sm btn-icon btn-outline btn-info">
<i class="ki-outline ki-notepad-edit"></i>
</a>
@@ -68,7 +70,12 @@
<span class="text-2xs text-gray-600 uppercase">
{{ $loop->index+1 }}. {{ $detail->jenisLegalitasJaminan->name }}
</span>
<a href="{{ route('debitur.jaminan.download',['id'=>$debitur->id, 'dokumen'=>$detail->id]) }}" class="badge badge-sm badge-outline">{{ basename($detail->dokumen_jaminan) }} <i class="ki-filled ki-cloud-download"></i></a>
<div>
@if(in_array(Auth::user()->roles[0]->name,['administrator','pemohon-eo']))
<a href="{{ route('debitur.jaminan.download',['id'=>$debitur->id,'dokumen'=>$detail->id]) }}" class="badge badge-sm badge-outline mt-2 badge-info"><i class="ki-filled ki-cloud-download mr-2"></i> Download</a>
@endif
<span class="badge badge-sm badge-outline badge-warning mt-2" onclick="viewPDF('{{ Storage::url($detail->dokumen_jaminan) }}')"><i class="ki-filled ki-eye mr-2"></i>Preview</span>
</div>
</div>
<div class="border-t border-gray-300 border-dashed">
</div>
@@ -129,6 +136,7 @@
</a>
</div>
@include('lpj::component.pdfviewer')
@push('scripts')
<script type="text/javascript">

View File

@@ -10,51 +10,83 @@
<form action="{{ route('basicdata.jenis-legalitas-jaminan.update', $jenisLegalitasJaminan->id) }}" method="POST">
<input type="hidden" name="id" value="{{ $jenisLegalitasJaminan->id }}">
@method('PUT')
@else
<form method="POST" action="{{ route('basicdata.jenis-legalitas-jaminan.store') }}">
@endif
@csrf
<div class="card pb-2.5">
<div class="card-header" id="basic_settings">
<h3 class="card-title">
{{ isset($jenisLegalitasJaminan->id) ? 'Edit' : 'Tambah' }} Jenis Legalitas Jaminan
</h3>
<div class="flex items-center gap-2">
<a href="{{ route('basicdata.jenis-legalitas-jaminan.index') }}" class="btn btn-xs btn-info"><i class="ki-filled ki-exit-left"></i> Back</a>
</div>
</div>
<div class="card-body grid gap-5">
@if(isset($jenisLegalitasJaminan->id))
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Code
</label>
<div class="flex flex-wrap items-baseline w-full">
<input readonly class="input border-warning bg-warning-light @error('code') border-danger bg-danger-light @enderror" type="text" name="code" value="{{ $jenisLegalitasJaminan->code ?? '' }}">
@error('code')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
</div>
</div>
@endif
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Name
</label>
<div class="flex flex-wrap items-baseline w-full">
<input class="input @error('name') border-danger bg-danger-light @enderror" type="text" name="name" value="{{ $jenisLegalitasJaminan->name ?? '' }}">
@error('name')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
</div>
</div>
<div class="flex justify-end">
<button type="submit" class="btn btn-primary">
Save
</button>
</div>
</div>
</div>
</form>
@else
<form method="POST" action="{{ route('basicdata.jenis-legalitas-jaminan.store') }}">
@endif
@csrf
<div class="card pb-2.5">
<div class="card-header" id="basic_settings">
<h3 class="card-title">
{{ isset($jenisLegalitasJaminan->id) ? 'Edit' : 'Tambah' }} Jenis Legalitas Jaminan
</h3>
<div class="flex items-center gap-2">
<a href="{{ route('basicdata.jenis-legalitas-jaminan.index') }}" class="btn btn-xs btn-info"><i class="ki-filled ki-exit-left"></i> Back</a>
</div>
</div>
<div class="card-body grid gap-5">
@if(isset($jenisLegalitasJaminan->id))
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Code
</label>
<div class="flex flex-wrap items-baseline w-full">
<input readonly class="input border-warning bg-warning-light @error('code') border-danger bg-danger-light @enderror" type="text" name="code" value="{{ $jenisLegalitasJaminan->code ?? '' }}">
@error('code')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
</div>
</div>
@endif
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Name
</label>
<div class="flex flex-wrap items-baseline w-full">
<input class="input @error('name') border-danger bg-danger-light @enderror" type="text" name="name" value="{{ $jenisLegalitasJaminan->name ?? '' }}">
@error('name')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
</div>
</div>
<!-- Tambahkan inputan custom_field -->
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Custom Field
</label>
<div class="flex flex-wrap items-baseline w-full">
<input class="input @error('custom_field') border-danger bg-danger-light @enderror" type="text" name="custom_field" value="{{ $jenisLegalitasJaminan->custom_field ?? '' }}">
@error('custom_field')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
</div>
</div>
<!-- Tambahkan inputan custom_field_type -->
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Custom Field Type
</label>
<div class="flex flex-wrap items-baseline w-full">
<select class="input tomselect @error('custom_field_type') border-danger bg-danger-light @enderror" name="custom_field_type">
<option value="">Pilih Tipe</option>
<option value="text" {{ (isset($jenisLegalitasJaminan) && $jenisLegalitasJaminan->custom_field_type == 'text') ? 'selected' : '' }}>Text</option>
<option value="number" {{ (isset($jenisLegalitasJaminan) && $jenisLegalitasJaminan->custom_field_type == 'number') ? 'selected' : '' }}>Number</option>
<option value="date" {{ (isset($jenisLegalitasJaminan) && $jenisLegalitasJaminan->custom_field_type == 'date') ? 'selected' : '' }}>Date</option>
</select>
@error('custom_field_type')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
</div>
</div>
<div class="flex justify-end">
<button type="submit" class="btn btn-primary">
Save
</button>
</div>
</div>
</div>
</form>
</div>
@endsection

Some files were not shown because too many files have changed in this diff Show More