memperbaiki konflik dari branch staging

This commit is contained in:
Andy Chaerudin
2024-10-02 15:00:54 +07:00
135 changed files with 10674 additions and 924 deletions

View File

@@ -0,0 +1,47 @@
<?php
namespace Modules\Lpj\Exports;
use Maatwebsite\Excel\Concerns\FromCollection;
use Maatwebsite\Excel\Concerns\WithColumnFormatting;
use Maatwebsite\Excel\Concerns\WithHeadings;
use Maatwebsite\Excel\Concerns\WithMapping;
use Modules\Lpj\Models\IjinUsaha;
use PhpOffice\PhpSpreadsheet\Style\NumberFormat;
class IjinUsahaExport implements WithColumnFormatting, WithHeadings, FromCollection, withMapping
{
public function collection()
{
return IjinUsaha::all();
}
public function map($row): array
{
return [
$row->id,
$row->code,
$row->name,
$row->created_at
];
}
public function headings(): array
{
return [
'ID',
'Code',
'Name',
'Created At'
];
}
public function columnFormats(): array
{
return [
'A' => NumberFormat::FORMAT_NUMBER,
'B' => NumberFormat::FORMAT_NUMBER,
'E' => NumberFormat::FORMAT_DATE_DATETIME
];
}
}

View File

@@ -0,0 +1,46 @@
<?php
namespace Modules\Lpj\Exports;
use Maatwebsite\Excel\Concerns\FromCollection;
use Maatwebsite\Excel\Concerns\WithColumnFormatting;
use Maatwebsite\Excel\Concerns\WithHeadings;
use Maatwebsite\Excel\Concerns\WithMapping;
use Modules\Lpj\Models\JenisLaporan;
use PhpOffice\PhpSpreadsheet\Style\NumberFormat;
class JenisLaporanExport implements WithColumnFormatting, WithHeadings, FromCollection, withMapping
{
public function collection()
{
return JenisLaporan::all();
}
public function map($row): array
{
return [
$row->id,
$row->code,
$row->name,
$row->created_at
];
}
public function headings(): array
{
return [
'ID',
'Code',
'Name',
'Created At'
];
}
public function columnFormats(): array
{
return [
'A' => NumberFormat::FORMAT_NUMBER,
'D' => NumberFormat::FORMAT_DATE_DATETIME
];
}
}

View File

@@ -0,0 +1,46 @@
<?php
namespace Modules\Lpj\Exports;
use Maatwebsite\Excel\Concerns\FromCollection;
use Maatwebsite\Excel\Concerns\WithColumnFormatting;
use Maatwebsite\Excel\Concerns\WithHeadings;
use Maatwebsite\Excel\Concerns\WithMapping;
use Modules\Lpj\Models\JenisPenilaian;
use PhpOffice\PhpSpreadsheet\Style\NumberFormat;
class JenisPenilaianExport implements WithColumnFormatting, WithHeadings, FromCollection, withMapping
{
public function collection()
{
return JenisPenilaian::all();
}
public function map($row): array
{
return [
$row->id,
$row->code,
$row->name,
$row->created_at
];
}
public function headings(): array
{
return [
'ID',
'Code',
'Jenis Penilaian',
'Created At'
];
}
public function columnFormats(): array
{
return [
'A' => NumberFormat::FORMAT_NUMBER,
'D' => NumberFormat::FORMAT_DATE_DATETIME
];
}
}

View File

@@ -0,0 +1,89 @@
<?php
namespace Modules\Lpj\Exports;
use Maatwebsite\Excel\Concerns\FromCollection;
use Maatwebsite\Excel\Concerns\WithColumnFormatting;
use Maatwebsite\Excel\Concerns\WithHeadings;
use Maatwebsite\Excel\Concerns\WithMapping;
use Modules\Lpj\Models\KJPP;
use PhpOffice\PhpSpreadsheet\Style\NumberFormat;
class KJPPExport implements WithColumnFormatting, WithHeadings, FromCollection, withMapping
{
public function collection()
{
return KJPP::all();
}
public function map($row): array
{
return [
$row->id,
$row->code,
$row->name,
$row->jenis_kantor,
$row->nomor_ijin_usaha,
$row->province_code,
$row->city_code,
$row->district_code,
$row->village_code,
$row->address,
$row->postal_code,
$row->nomor_telepon_kantor,
$row->email_kantor,
$row->nama_pimpinan,
$row->nomor_hp_pimpinan,
$row->nama_pic_reviewer,
$row->nomor_hp_pic_reviewer,
$row->nama_pic_admin,
$row->nomor_hp_pic_admin,
$row->nama_pic_marketing,
$row->nomor_hp_pic_marketing,
$row->ijin_usaha_id,
$row->jenis_aset_id,
$row->attachment,
$row->created_at
];
}
public function headings(): array
{
return [
'ID',
'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',
'Created At'
];
}
public function columnFormats(): array
{
return [
'A' => NumberFormat::FORMAT_NUMBER,
'B' => NumberFormat::FORMAT_NUMBER,
'E' => NumberFormat::FORMAT_DATE_DATETIME
];
}
}

View File

@@ -0,0 +1,63 @@
<?php
namespace Modules\Lpj\Exports;
use Maatwebsite\Excel\Concerns\FromCollection;
use Maatwebsite\Excel\Concerns\WithColumnFormatting;
use Maatwebsite\Excel\Concerns\WithHeadings;
use Maatwebsite\Excel\Concerns\WithMapping;
use Modules\Lpj\Models\PenawaranTender;
use PhpOffice\PhpSpreadsheet\Style\NumberFormat;
class PenawaranTenderExport implements WithColumnFormatting, WithHeadings, FromCollection, withMapping
{
public function collection()
{
return PenawaranTender::all();
}
public function map($row): array
{
return [
$row->id,
$row->code,
$row->nama_kjpp_sebelumnya,
$row->biaya_kjpp_sebelumnya,
$row->tanggal_penilaian_sebelumnya,
$row->nomor_registrasi,
$row->tujuan_penilaian_kjpp_id,
$row->jenis_laporan_id,
$row->start_date,
$row->end_date,
$row->catatan,
$row->created_at
];
}
public function headings(): array
{
return [
'ID',
'Nomor Penawaran',
'Nama KJPP Sebelumnya',
'Biaya KJPP Sebelumnya',
'Tanggal Penilaian Sebelumnya',
'Nomor Registrasi',
'Tujuan Penilaian KJPP ID',
'Jenis Laporan ID',
'Start Date',
'End Date',
'Catatan',
'Created At'
];
}
public function columnFormats(): array
{
return [
'A' => NumberFormat::FORMAT_NUMBER,
'B' => NumberFormat::FORMAT_NUMBER,
'E' => NumberFormat::FORMAT_DATE_DATETIME
];
}
}

View File

@@ -28,6 +28,8 @@
$row->branch->name,
$row->tujuanPenilaian->name,
$row->debiture->name,
$row->fasilitasKredit->name,
$row->plafond->name,
$row->status,
$row->authorized_at,
$row->authorized_status,
@@ -47,7 +49,9 @@
'Branch Pemohon',
'Tujuan Penilaian',
'Debitur',
'Status',
'Jenis Fasilitas Kredit',
'Nilai Plafond',
'Status Permohonan',
'Tanggal Pengesahan',
'Status Pengesahan',
'Pengesah',
@@ -61,7 +65,8 @@
return [
'A' => NumberFormat::FORMAT_NUMBER,
'C' => NumberFormat::FORMAT_DATE_DATETIME,
'L' => NumberFormat::FORMAT_DATE_DATETIME
'K' => NumberFormat::FORMAT_DATE_DATETIME,
'N' => NumberFormat::FORMAT_DATE_DATETIME
];
}
}

View File

@@ -0,0 +1,49 @@
<?php
namespace Modules\Lpj\Exports;
use Maatwebsite\Excel\Concerns\FromCollection;
use Maatwebsite\Excel\Concerns\WithColumnFormatting;
use Maatwebsite\Excel\Concerns\WithHeadings;
use Maatwebsite\Excel\Concerns\WithMapping;
use Modules\Lpj\Models\Regions;
use PhpOffice\PhpSpreadsheet\Style\NumberFormat;
class RegionExport implements WithColumnFormatting, WithHeadings, FromCollection, withMapping
{
public function collection()
{
return Regions::all();
}
public function map($row)
: array
{
return [
$row->id,
$row->code,
$row->name,
$row->created_at
];
}
public function headings()
: array
{
return [
'ID',
'Code',
'Name',
'Created At'
];
}
public function columnFormats()
: array
{
return [
'A' => NumberFormat::FORMAT_NUMBER,
'D' => NumberFormat::FORMAT_DATE_DATETIME
];
}
}

View File

@@ -0,0 +1,57 @@
<?php
namespace Modules\Lpj\Exports;
use Maatwebsite\Excel\Concerns\FromCollection;
use Maatwebsite\Excel\Concerns\WithColumnFormatting;
use Maatwebsite\Excel\Concerns\WithHeadings;
use Maatwebsite\Excel\Concerns\WithMapping;
use Modules\Lpj\Models\JenisPenilaian;
use PhpOffice\PhpSpreadsheet\Style\NumberFormat;
use Illuminate\Support\Facades\DB;
use Modules\Lpj\Models\Teams;
class TeamPenilaianExport implements WithColumnFormatting, WithHeadings, FromCollection, withMapping
{
public function collection()
{
return Teams::select(
'teams.id as id',
'teams.name as team_name',
'regions.name as region_name',
DB::raw('STRING_AGG(users.name, \', \') as team_group')
)
->join('regions', 'teams.regions_id', '=', 'regions.id')
->leftJoin('teams_users', 'teams.id', '=', 'teams_users.teams_id')
->leftJoin('users', 'teams_users.user_id', '=', 'users.id')
->groupBy('teams.id', 'teams.name', 'regions.name')
->get();
}
public function map($row): array
{
return [
$row->team_name,
$row->region_name,
$row->team_group,
];
}
public function headings(): array
{
return [
'Name',
'Region',
'Anggota Team',
];
}
public function columnFormats(): array
{
return [
'A' => NumberFormat::FORMAT_TEXT,
'B' => NumberFormat::FORMAT_TEXT,
'C' => NumberFormat::FORMAT_TEXT,
];
}
}

View File

@@ -0,0 +1,46 @@
<?php
namespace Modules\Lpj\Exports;
use Maatwebsite\Excel\Concerns\FromCollection;
use Maatwebsite\Excel\Concerns\WithColumnFormatting;
use Maatwebsite\Excel\Concerns\WithHeadings;
use Maatwebsite\Excel\Concerns\WithMapping;
use Modules\Lpj\Models\TujuanPenilaianKJPP;
use PhpOffice\PhpSpreadsheet\Style\NumberFormat;
class TujuanPenilaianKJPPExport implements WithColumnFormatting, WithHeadings, FromCollection, withMapping
{
public function collection()
{
return TujuanPenilaianKJPP::all();
}
public function map($row): array
{
return [
$row->id,
$row->code,
$row->name,
$row->created_at
];
}
public function headings(): array
{
return [
'ID',
'Code',
'Name',
'Created At'
];
}
public function columnFormats(): array
{
return [
'A' => NumberFormat::FORMAT_NUMBER,
'D' => NumberFormat::FORMAT_DATE_DATETIME
];
}
}

View File

@@ -0,0 +1,152 @@
<?php
namespace Modules\Lpj\Http\Controllers;
use App\Http\Controllers\Controller;
use Exception;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Modules\Lpj\Models\Permohonan;
use Modules\Lpj\Models\StatusPermohonan;
class ActivityController extends Controller
{
public $user;
/**
* Display a listing of the resource.
*/
public function index()
{
$status_permohonan = StatusPermohonan::all();
return view('lpj::activity.index', compact('status_permohonan'));
}
/**
* Show the form for creating a new resource.
*/
/**
* Store a newly created resource in storage.
*/
public function store(Request $request): RedirectResponse
{
//
}
/**
* Show the specified resource.
*/
public function show($id)
{
$status_permohonan = StatusPermohonan::orderBy('id')->get();
$permohonan = Permohonan::with(
[
'user',
'debiture.province',
'debiture.city',
'debiture.district',
'debiture.village',
'branch',
'tujuanPenilaian',
'penilaian'
],
)->findOrFail($id);
return view('lpj::activity.activitydetail', compact('id', 'status_permohonan', '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 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();
// Apply search filter if provided
if ($request->has('search') && !empty($request->get('search'))) {
$search = $request->get('search');
$query->where(function ($q) use ($search) {
$q->where('nomor_registrasi', 'LIKE', '%' . $search . '%');
$q->orWhere('tanggal_permohonan', 'LIKE', '%' . $search . '%');
$q->orWhereRelation('user', 'name', 'LIKE', '%' . $search . '%');
$q->orWhereRelation('debiture', 'name', 'LIKE', '%' . $search . '%');
$q->orWhereRelation('tujuanPenilaian', 'name', 'LIKE', '%' . $search . '%');
$q->orWhereRelation('branch', 'name', 'LIKE', '%' . $search . '%');
$q->orWhere('status', 'LIKE', '%' . $search . '%');
});
}
// Apply status filter if provided
if ($request->has('status') && !empty($request->get('status'))) {
$status = $request->get('status');
$query->where('status', '=', $status);
}
// Default sorting if no sort provided
if ($request->has('sortOrder') && !empty($request->get('sortOrder'))) {
$order = $request->get('sortOrder');
$column = $request->get('sortField');
$query->orderBy($column, $order);
} else {
$query->orderBy('nomor_registrasi', 'asc'); // Default order by nomor_registrasi
}
// Get the total count of records before paginating
$totalRecords = $query->count();
// Apply pagination if provided
if ($request->has('page') && $request->has('size')) {
$page = (int) $request->get('page', 1); // Default page is 1
$size = (int) $request->get('size', 10); // Default size is 10
$offset = ($page - 1) * $size; // Calculate the offset
// Limit results based on pagination
$query->skip($offset)->take($size);
}
// Get the filtered count of records (after search & filters applied)
$filteredRecords = $query->count();
// Get the data for the current page
$data = $query->with(['user', 'debiture', 'branch', 'tujuanPenilaian'])->get();
// Calculate the total number of pages
$pageCount = ceil($totalRecords / $request->get('size', 10));
// Return the response data as a JSON object
return response()->json([
'draw' => $request->get('draw'),
'recordsTotal' => $totalRecords,
'recordsFiltered' => $filteredRecords,
'pageCount' => $pageCount,
'page' => $request->get('page', 1),
'totalCount' => $totalRecords,
'data' => $data,
]);
}
/**
* Download the specified resource from storage.
*/
public function download($id)
{
$document = Permohonan::find($id);
return response()->download(storage_path('app/public/' . $document->dokumen));
}
}

View File

@@ -71,6 +71,7 @@
public function update(DebitureRequest $request, $id)
{
//print_r($request->all());exit;
$validate = $request->validated();
if ($validate) {
@@ -174,10 +175,4 @@
{
return Excel::download(new DebitureExport, 'debitur.xlsx');
}
public function download($id)
{
$document = DokumenJaminan::find($id);
return response()->download(storage_path('app/public/' . $document->dokumen_jaminan));
}
}

View File

@@ -4,12 +4,15 @@
use App\Http\Controllers\Controller;
use Exception;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Storage;
use Modules\Location\Models\City;
use Modules\Location\Models\District;
use Modules\Location\Models\Province;
use Modules\Location\Models\Village;
use Modules\Lpj\Http\Requests\DokumenJaminanRequest;
use Modules\Lpj\Models\Debiture;
use Modules\Lpj\Models\DetailDokumenJaminan;
use Modules\Lpj\Models\DokumenJaminan;
use Modules\Lpj\Models\JenisJaminan;
use Modules\Lpj\Models\JenisLegalitasJaminan;
@@ -23,7 +26,7 @@
public function index($id)
{
$debitur = Debiture::find($id);
$documents = DokumenJaminan::with('pemilik')->where('debiture_id', $id)->get();
$documents = DokumenJaminan::with('pemilik', 'detail')->where('debiture_id', $id)->get();
return view(
'lpj::debitur.edit',
@@ -36,8 +39,10 @@
$debitur = Debiture::find($id);
$validate = $request->validated();
if ($validate) {
try {
DB::beginTransaction();
$validate['debiture_id'] = $id;
if ($validate['pemilik_jaminan_id'] == 0) {
@@ -61,22 +66,53 @@
$validate['pemilik_jaminan_id'] = $pemilikJaminan->id;
}
if ($request->hasFile('dokumen_jaminan')) {
$file = $request->file('dokumen_jaminan');
$file_name = $file->getClientOriginalName();
$file->storeAs('public/jaminan/' . $debitur->id, $file_name);
$validate['dokumen_jaminan'] = 'jaminan/' . $debitur->id . '/' . $file_name;
$document = DokumenJaminan::create($validate);
try {
foreach ($request->dokumen_jaminan as $key => $value) {
$file_name = $value->getClientOriginalName();
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(),
);
}
}
}
DB::commit();
} catch (Exception $e) {
DB::rollBack();
return redirect()->route('debitur.jaminan.index', $id)->with(
'error',
'gg' . $e->getMessage(),
);
}
DokumenJaminan::create($validate);
return redirect()->route('debitur.jaminan.index', $id)->with(
'success',
'Dokumen Jaminan berhasil ditambahkan',
);
} catch (Exception $e) {
return redirect()->route('debitur.jaminan.index', $id)->with('error', $e->getMessage());
DB::rollBack();
return redirect()->route('debitur.jaminan.index', $id)->with('error', 'ggl' . $e->getMessage());
}
}
}
@@ -102,6 +138,7 @@
$validate = $request->validated();
if ($validate) {
try {
DB::beginTransaction();
$validate['debiture_id'] = $id;
if ($validate['pemilik_jaminan_id'] == 0) {
@@ -124,29 +161,77 @@
], $pemilik_jaminan);
}
if ($request->hasFile('dokumen_jaminan')) {
$file = $request->file('dokumen_jaminan');
$file_name = $file->getClientOriginalName();
$file->storeAs('public/jaminan/' . $debitur->id, $file_name);
$validate['dokumen_jaminan'] = 'jaminan/' . $debitur->id . '/' . $file_name;
}
$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();
}
if (isset($file_name)) {
$file->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],
];
if (isset($request->detail_dokumen_jaminan_id[$key])) {
$detailDocument = DetailDokumenJaminan::find(
$request->detail_dokumen_jaminan_id[$key],
);
$detailDocument->update($detail);
$detailDocument->save();
}
}
} 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);
}
}
}
}
DB::commit();
return redirect()->route('debitur.jaminan.index', $id)->with(
'success',
'Dokumen Jaminan berhasil diubah',
);
} catch (Exception $e) {
} catch
(Exception $e) {
DB::rollBack();
return redirect()->route('debitur.jaminan.index', $id)->with('error', $e->getMessage());
}
}
}
public function edit($id, $jaminan)
{
public
function edit(
$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();
@@ -164,6 +249,7 @@
'jenisJaminan',
'jenisLegalitasJaminan',
'document',
'details',
'cities',
'districts',
'villages',
@@ -172,14 +258,30 @@
);
}
public function destroy($id, $jaminan_id)
{
public
function destroy(
$id,
$jaminan_id,
) {
try {
$jaminan = DokumenJaminan::find($jaminan_id);
$details = DetailDokumenJaminan::where('dokumen_jaminan_id',$jaminan->id)->get();
foreach ($details as $detail){
Storage::delete('public/'. $detail->dokumen_jaminan);
$detail->delete();
}
$jaminan->delete();
echo json_encode(['success' => true, 'message' => 'Dokumen Jaminan deleted successfully']);
} catch (Exception $e) {
echo json_encode(['success' => false, 'message' => 'Failed to delete Dokumen Jaminan']);
}
}
public
function download(
$id,
) {
$document = DetailDokumenJaminan::find($id);
return response()->download(storage_path('app/public/' . $document->dokumen_jaminan));
}
}

View File

@@ -0,0 +1,174 @@
<?php
namespace Modules\Lpj\Http\Controllers;
use App\Http\Controllers\Controller;
use Exception;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Maatwebsite\Excel\Facades\Excel;
use Modules\Lpj\Exports\IjinUsahaExport;
use Modules\Lpj\Http\Requests\IjinUsahaRequest;
use Modules\Lpj\Models\IjinUsaha;
class IjinUsahaController extends Controller
{
public $user;
/**
* Display a listing of the resource.
*/
public function index()
{
return view('lpj::Ijin_usaha.index');
}
/**
* Show the form for creating a new resource.
*/
public function create()
{
return view('lpj::Ijin_usaha.create');
}
/**
* Store a newly created resource in storage.
*/
public function store(IjinUsahaRequest $request)
{
$validate = $request->validated();
if ($validate) {
try {
IjinUsaha::create($validate);
return redirect()
->route('basicdata.ijin_usaha.index')
->with('success', 'Ijin Usaha created successfully');
} catch (Exception $e) {
return redirect()
->route('basicdata.ijin_usaha.create')
->with('error', 'Failed to create ijin Usaha');
}
}
}
/**
* Show the specified resource.
*/
public function show($id)
{
// return view('lpj::show');
}
/**
* Show the form for editing the specified resource.
*/
public function edit($id)
{
$ijin_usaha = IjinUsaha::find($id);
return view('lpj::Ijin_usaha.create', compact('ijin_usaha'));
}
/**
* Update the specified resource in storage.
*/
public function update(IjinUsahaRequest $request, $id)
{
$validate = $request->validated();
if ($validate) {
try {
// Update in database
$ijin_usaha = IjinUsaha::find($id);
$ijin_usaha->update($validate);
return redirect()
->route('basicdata.ijin_usaha.index')
->with('success', 'Ijin Usaha updated successfully');
} catch (Exception $e) {
return redirect()
->route('basicdata.ijin_usaha.edit', $id)
->with('error', 'Failed to update ijin$ijin_usaha');
}
}
}
/**
* Remove the specified resource from storage.
*/
public function destroy($id)
{
try {
$ijin_usaha = IjinUsaha::find($id);
$ijin_usaha->delete();
echo json_encode(['success' => true, 'message' => 'Ijin Usaha deleted successfully']);
} catch (Exception $e) {
echo json_encode(['success' => false, 'message' => 'Failed to delete Ijin Usaha']);
}
}
public function dataForDatatables(Request $request)
{
if (is_null($this->user) || !$this->user->can('Ijin_usaha.view')) {
//abort(403, 'Sorry! You are not allowed to view users.');
}
// Retrieve data from the database
$query = IjinUsaha::query();
// Apply search filter if provided
if ($request->has('search') && !empty($request->get('search'))) {
$search = $request->get('search');
$query->where(function ($q) use ($search) {
$q->where('code', 'LIKE', "%$search%");
$q->orWhere('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->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,
]);
}
public function export()
{
return Excel::download(new IjinUsahaExport, 'ijin_usaha.xlsx');
}
}

View File

@@ -9,6 +9,7 @@
use Modules\Lpj\Exports\JenisJaminanExport;
use Modules\Lpj\Http\Requests\JenisJaminanRequest;
use Modules\Lpj\Models\JenisJaminan;
use Modules\Lpj\Models\JenisLegalitasJaminan;
class JenisJaminanController extends Controller
{
@@ -40,13 +41,15 @@
public function create()
{
return view('lpj::jenis_jaminan.create');
$jenisLegalitasJaminan = JenisLegalitasJaminan::all();
return view('lpj::jenis_jaminan.create', compact('jenisLegalitasJaminan'));
}
public function edit($id)
{
$jenisJaminan = JenisJaminan::find($id);
return view('lpj::jenis_jaminan.create', compact('jenisJaminan'));
$jenisLegalitasJaminan = JenisLegalitasJaminan::all();
return view('lpj::jenis_jaminan.create', compact('jenisJaminan', 'jenisLegalitasJaminan'));
}
public function update(JenisJaminanRequest $request, $id)
@@ -147,4 +150,13 @@
{
return Excel::download(new JenisJaminanExport, 'jenis_jaminan.xlsx');
}
public function legalitasJaminan($id)
{
$jenisJaminan = JenisJaminan::find($id);
$legalitasJaminan = $jenisJaminan->jenis_legalitas_jaminan_id;
$legalitas = JenisLegalitasJaminan::whereIn('code', json_decode($legalitasJaminan, true))->get();
echo json_encode($legalitas);
}
}

View File

@@ -0,0 +1,174 @@
<?php
namespace Modules\Lpj\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Maatwebsite\Excel\Facades\Excel;
use Modules\Lpj\Models\JenisLaporan;
use Modules\Lpj\Exports\JenisLaporanExport;
use Modules\Lpj\Http\Requests\JenisLaporanRequest;
use Throwable;
class JenisLaporanController extends Controller
{
public $user;
/**
* Display a listing of the resource.
*/
public function index()
{
return view('lpj::jenis_laporan.index');
}
/**
* Show the form for creating a new resource.
*/
public function create()
{
return view('lpj::jenis_laporan.create');
}
/**
* Store a newly created resource in storage.
*/
public function store(JenisLaporanRequest $request)
{
$validate = $request->validated();
if ($validate) {
try {
JenisLaporan::create($validate);
return redirect()
->route('basicdata.jenis_laporan.index')
->with('success', 'Jenis Laporan created successfully');
} catch (Throwable $e) {
return redirect()
->route('basicdata.jenis_laporan.create')
->with('success', 'Failed to create Jenis Laporan: ' . $e);
}
}
}
/**
* Show the specified resource.
*/
public function show($id)
{
// return view('lpj::show');
}
/**
* Show the form for editing the specified resource.
*/
public function edit($id)
{
$jenisLaporan = JenisLaporan::find($id);
return view('lpj::jenis_laporan.create', compact('jenisLaporan'));
}
/**
* Update the specified resource in storage.
*/
public function update(JenisLaporanRequest $request, $id)
{
$validate = $request->validated();
if ($validate) {
try {
$jenisLaporan = JenisLaporan::find($id);
$jenisLaporan->update($validate);
return redirect()
->route('basicdata.jenis_laporan.index')
->with('success', 'Jenis Laporan updated successfully');
} catch (Throwable $e) {
return redirect()
->route('basicdata.jenis_laporan.edit', $id)
->with('success', 'Failed to update Jenis Laporan: ' . $e);
}
}
}
/**
* Remove the specified resource from storage.
*/
public function destroy($id)
{
try {
// Delete from database
$jenisLaporan = JenisLaporan::find($id);
$jenisLaporan->delete();
echo json_encode(['success' => true, 'message' => 'Jenis Laporan deleted successfully']);
} catch (Throwable $e) {
echo json_encode(['success' => false, 'message' => 'Failed to delete jenis Laporan']);
}
}
public function dataForDatatables(Request $request)
{
if (is_null($this->user) || !$this->user->can('jenis_jaminan.view')) {
//abort(403, 'Sorry! You are not allowed to view users.');
}
// Retrieve data from the database
$query = JenisLaporan::query();
// Apply search filter if provided
if ($request->has('search') && !empty($request->get('search'))) {
$search = $request->get('search');
$query->where(function ($q) use ($search) {
$q->where('code', 'LIKE', "%$search%");
$q->orWhere('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->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,
]);
}
public function export()
{
return Excel::download(new JenisLaporanExport, 'jenis_laporan.xlsx');
}
}

View File

@@ -0,0 +1,156 @@
<?php
namespace Modules\Lpj\Http\Controllers;
use Exception;
use App\Http\Controllers\Controller;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Modules\Lpj\Models\JenisPenilaian;
use Modules\Lpj\Http\Requests\JenisPenilaianRequest;
use Modules\Lpj\Exports\JenisPenilaianExport;
use Maatwebsite\Excel\Facades\Excel;
class JenisPenilaianController extends Controller
{
public $user;
/**
* Display a listing of the resource.
*/
public function index()
{
return view('lpj::jenis_penilaian.index');
}
/**
* Show the form for creating a new resource.
*/
public function create()
{
return view('lpj::jenis_penilaian.form');
}
/**
* Store a newly created resource in storage.
*/
public function store(JenisPenilaianRequest $request)
{
$validate = $request->validated();
try {
JenisPenilaian::create($validate);
return redirect()->route('basicdata.jenis-penilaian.index')->with('success', 'Jenis Penilaian created successfully');
} catch (Exception $e) {
return redirect()->route('basicdata.jenis-penilaian.create')->with('error', $e->getMessage());
}
}
/**
* Show the form for editing the specified resource.
*/
public function edit($id)
{
$jenisPenilaian = JenisPenilaian::find($id);
return view('lpj::jenis_penilaian.form', compact('jenisPenilaian'));
}
/**
* Update the specified resource in storage.
*/
public function update(JenisPenilaianRequest $request, $id)
{
$validated = $request->validated();
if ($validated) {
try {
$jenisPenilaian = JenisPenilaian::find($id);
$jenisPenilaian->update($validated);
return redirect()->route('basicdata.jenis-penilaian.index')->with('success', 'Jenis Penilaian updated successfully');
} catch (Exception $e) {
return redirect()->route('basicdata.jenis-penilaian.edit', $id)->with('error', $e->getMessage());
}
}
}
/**
* Remove the specified resource from storage.
*/
public function destroy($id)
{
try {
$jenisPenilaian = JenisPenilaian::find($id);
$jenisPenilaian->delete();
echo json_encode(['success' => true, 'message' => 'Jenis Penilaian deleted successfully']);
} catch (Exception $e) {
echo json_encode(['success' => false, 'message' => 'Failed to delete Jenis Penilaian']);
}
}
public function dataForDatatables(Request $request)
{
if (is_null($this->user) || !$this->user->can('jenis_penilaian.view')) {
//abort(403, 'Sorry! You are not allowed to view users.');
}
$query = JenisPenilaian::query();
if ($request->has('search') && !empty($request->get('search'))) {
$search = $request->get('search');
$query->where(function ($q) use ($search) {
$q->where('code', 'LIKE', "%$search%");
$q->orWhere('name', 'LIKE', "%$search%");
});
}
if ($request->has('sortOrder') && !empty($request->get('sortOrder'))) {
$order = $request->get('sortOrder');
$column = $request->get('sortField');
$query->orderBy($column, $order);
}
$totalRecords = $query->count();
$size = $request->get('size');
$pageCount = 1;
if ($size > 0) {
if ($request->has('page') && $request->has('size')) {
$page = $request->get('page');
$offset = ($page - 1) * $size;
$query->skip($offset)->take($size);
$filteredRecords = $query->count();
$pageCount = ceil($totalRecords / $size);
}
$data = $query->get();
} else {
$filteredRecords = $totalRecords;
$data = $query->get();
}
$currentPage = $request->get('page') ?? 1;
// Return the response data as a JSON object
return response()->json([
'draw' => $request->get('draw'),
'recordsTotal' => $totalRecords,
'recordsFiltered' => $filteredRecords,
'pageCount' => $pageCount,
'page' => $currentPage,
'totalCount' => $totalRecords,
'data' => $data
]);
}
public function export()
{
return Excel::download(new JenisPenilaianExport(), 'jenis-penilaian.xlsx');
}
}

View File

@@ -0,0 +1,255 @@
<?php
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;
use App\Http\Controllers\Controller;
use Maatwebsite\Excel\Facades\Excel;
use Modules\Location\Models\Village;
use Modules\Lpj\Models\JenisJaminan;
use Modules\Location\Models\District;
use Modules\Location\Models\Province;
use Illuminate\Support\Facades\Storage;
use Modules\Lpj\Http\Requests\KJPPRequest;
class KJPPController extends Controller
{
public $user;
/**
* Display a listing of the resource.
*/
public function index()
{
return view('lpj::kjpp.index');
}
/**
* Show the form for creating a new resource.
*/
public function create()
{
$branch = Branch::all();
$ijin_usaha = IjinUsaha::all();
$jenis_aset = JenisJaminan::all();
$provinces = Province::all();
// Generate KJPP Number
$lastKjpp = KJPP::orderBy('code', 'desc')->first();
$nextNumber = $lastKjpp ? intval(substr($lastKjpp->code, 1, 6)) + 1 : 1;
$kjppNumber = 'K' . str_pad($nextNumber, 6, '0', STR_PAD_LEFT);
// Combine KJPP number with branch code
$fullKjppNumber = $kjppNumber;
return view('lpj::kjpp.create', compact('branch', 'ijin_usaha', 'jenis_aset', 'provinces', 'fullKjppNumber'));
}
/**
* Store a newly created resource in storage.
*/
public function store(KJPPRequest $request)
{
$validated = $request->validated();
if ($validated) {
$file = $request->file('attachment');
$filename = $file ? time() . '.' . $file->getClientOriginalExtension() : 'default.pdf';
if ($file) {
// Simpan file yang diunggah
$file->storeAs('public/uploads_pdf', $filename);
} else {
// Salin file default ke lokasi yang diinginkan
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'));
// Tambahkan nama file ke data yang divalidasi
$validated['attachment'] = $filename;
// Simpan data ke database
KJPP::create($validated);
return redirect()
->route('basicdata.kjpp.index')
->with('success', 'KJPP created successfully');
} else {
return redirect()
->route('basicdata.kjpp.create')
->with('error', 'Validation failed');
}
}
/**
* Show the specified resource.
*/
public function show($id)
{
$kjpp = KJPP::find($id);
$ijin_usaha = IjinUsaha::where('code', $kjpp->nomor_ijin_usaha)->get();
$ijin_usahas = IjinUsaha::all();
$jenis_jaminan = JenisJaminan::all();
$branches = Branch::where('name', $kjpp->jenis_kantor)->get();
$provinces = Province::where('code', $kjpp->province_code)->get();
$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', 'branches', 'kjpp', 'provinces', 'cities', 'districts', 'villages'));
}
/**
* Show the form for editing the specified resource.
*/
public function edit($id)
{
$kjpp = KJPP::find($id);
$branch = Branch::all();
$ijin_usaha = IjinUsaha::all();
$jenis_aset = JenisJaminan::all();
$provinces = Province::all();
$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();
return view('lpj::kjpp.create', compact('kjpp', 'branch', 'ijin_usaha', 'jenis_aset', 'provinces', 'cities', 'districts', 'villages'));
}
/**
* Update the specified resource in storage.
*/
public function update(KJPPRequest $request, $id)
{
$validated = $request->validated();
if ($validated) {
$file = $request->file('attachment');
$filename = $file ? time() . '.' . $file->getClientOriginalExtension() : null;
if ($file !== null) {
// Jika ada file dari database maka hapus file yang lama ke file yang baru
$kjpp = KJPP::find($id);
// Jika filenya ada default.pdf jangan dihapus
if ($kjpp->attachment !== 'default.pdf') {
Storage::delete('public/uploads_pdf/' . $kjpp->attachment);
}
// Simpan file yang diunggah
$file->storeAs('public/uploads_pdf', $filename);
$validated['attachment'] = $filename;
} else {
// Jika tidak ada file yang diunggah, gunakan file yang sudah ada atau file default
$kjpp = KJPP::find($id);
$validated['attachment'] = $kjpp->attachment ?? 'default.pdf';
}
// Perbarui data di database
KJPP::where('id', $id)->update($validated);
return redirect()
->route('basicdata.kjpp.index')
->with('success', 'KJPP updated successfully');
} else {
return redirect()
->route('basicdata.kjpp.edit', $id)
->with('error', 'Validation failed');
}
}
/**
* Remove the specified resource from storage.
*/
public function destroy($id)
{
try {
$kjpp = KJPP::find($id);
// Jangan hapus file default.pdf
if ($kjpp->attachment && $kjpp->attachment !== 'default.pdf') {
Storage::delete('public/uploads_pdf/' . $kjpp->attachment);
}
// Hapus data dari database
$kjpp->delete();
echo json_encode(['success' => true, 'message' => 'KJPP deleted successfully']);
} catch (Throwable $e) {
echo json_encode(['success' => false, 'message' => 'Failed to delete branch: ' . $e]);
}
}
public function dataForDatatables(Request $request)
{
if (is_null($this->user) || !$this->user->can('kjpp.view')) {
//abort(403, 'Sorry! You are not allowed to view users.');
}
// Retrieve data from the database
$query = KJPP::query();
// Apply search filter if provided
if ($request->has('search') && !empty($request->get('search'))) {
$search = $request->get('search');
$query->where(function ($q) use ($search) {
$q->where('code', 'LIKE', "%$search%");
$q->orWhere('name', 'LIKE', "%$search%");
$q->orWhere('jenis_kantor', '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->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,
]);
}
public function export()
{
return Excel::download(new KJPPExport, 'kjpp.xlsx');
}
}

View File

@@ -0,0 +1,225 @@
<?php
namespace Modules\Lpj\Http\Controllers;
use App\Http\Controllers\Controller;
use Exception;
use Illuminate\Http\Request;
use Modules\Lpj\Http\Requests\PenilaianRequest;
use Modules\Lpj\Models\JenisPenilaian;
use Modules\Lpj\Models\Penilaian;
use Modules\Lpj\Models\Permohonan;
use Modules\Lpj\Models\StatusPermohonan;
use Modules\Lpj\Models\Teams;
use Modules\Lpj\Models\TeamsUsers;
use Modules\Usermanagement\Models\User;
class PenilaianController extends Controller
{
public $user;
/**
* Display a listing of the resource.
*/
public function index()
{
$status_permohonan = StatusPermohonan::all();
return view('lpj::penilaian.index', compact('status_permohonan'));
}
/**
* Store a newly created resource in storage.
*/
public function store(PenilaianRequest $request)
{
//print_r($request->all());exit;
$validatedData = $request->validated();
if ($validatedData) {
try {
$penilaian = Penilaian::create($validatedData);
$permohonan = Permohonan::where('nomor_registrasi', $request->nomor_registrasi);
$permohonan->update([
'status' => 'assign',
]);
return redirect()->route('penilaian.index')->with('success', 'Penilaian berhasil disimpan');
} catch (Exception $e) {
return redirect()->route('penilaian.index')->with('error', $e->getMessage());
}
}
}
/**
* Show the form for creating a new resource.
*/
public function create($id)
{
return view('lpj::penilaian.form');
}
/**
* Update the specified resource in storage.
*/
public function update(PenilaianRequest $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',
]);
return redirect()->route('penilaian.index', $id)->with('success', 'Penilaian berhasil diubah');
} catch (Exception $e) {
return redirect()->route('penilaian.index', $id)->with('error', $e->getMessage());
}
}
}
/**
* Show the form for editing the specified resource.
*/
public function assignment($id)
{
$permohonan = Permohonan::with(
[
'user',
'debiture.province',
'debiture.city',
'debiture.district',
'debiture.village',
'branch',
'tujuanPenilaian',
],
)->findOrFail($id);
$jenisPenilaian = JenisPenilaian::all();
$teamPenilai = Teams::with(['regions', 'teamsUsers'])->get();
$penilaian = Penilaian::where('nomor_registrasi', $permohonan->nomor_registrasi)->first();
return view('lpj::penilaian.form', compact('permohonan', 'teamPenilai', 'jenisPenilaian', 'penilaian'));
}
/**
* Remove the specified resource from storage.
*/
public function revisi(PenilaianRequest $request, $nomor_registrasi)
{
$validatedData = $request->validated();
if ($validatedData) {
try {
if (isset($validatedData['dokumen']) && $request->hasFile('dokumen')) {
$file_name = $validatedData['dokumen']->getClientOriginalName();
$validatedData['dokumen']->storeAs('public/dokumen_revisi', $file_name);
}
$dataToUpdate = [
'keterangan' => $validatedData['keterangan'],
'dokumen' => 'dokumen_revisi/' . $file_name,
'status' => 'revisi',
];
// dump($dataToUpdate);
$permohonan = Permohonan::where('nomor_registrasi', $nomor_registrasi)->first();
$permohonan->update($dataToUpdate);
return redirect()->route('penilaian.index')->with('success', 'Penilaian berhasil direvisi');
} catch (Exception $e) {
dump($e->getMessage());
// return redirect()->route('penilaian.index')->with('error', $e->getMessage());
}
}
}
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();
if ($request->has('search') && !empty($request->get('search'))) {
$search = $request->get('search');
$query->where(function ($q) use ($search) {
$q->where('nomor_registrasi', 'LIKE', '%' . $search . '%');
$q->orWhere('tanggal_permohonan', 'LIKE', '%' . $search . '%');
$q->orWhereRelation('user', 'name', 'LIKE', '%' . $search . '%');
$q->orWhereRelation('debiture', 'name', 'LIKE', '%' . $search . '%');
$q->orWhereRelation('tujuanPenilaian', 'name', 'LIKE', '%' . $search . '%');
$q->orWhereRelation('branch', 'name', 'LIKE', '%' . $search . '%');
$q->orWhere('status', 'LIKE', '%' . $search . '%');
});
}
$query->whereRaw('LOWER(status) = ?', ['register']);
if ($request->has('sortOrder') && !empty($request->get('sortOrder'))) {
$order = $request->get('sortOrder');
$column = $request->get('sortField');
$query->orderBy($column, $order);
}
$totalRecords = $query->count();
$size = $request->get('size', 10);
if ($size == 0) {
$size = 10;
}
if ($request->has('page') && $request->has('size')) {
$page = $request->get('page', 1);
$offset = ($page - 1) * $size;
$query->skip($offset)->take($size);
}
$filteredRecords = $query->count();
$data = $query->with(['user', 'debiture', 'branch', 'tujuanPenilaian'])->get();
$pageCount = ceil($totalRecords / $size);
$currentPage = max(1, $request->get('page', 1));
return response()->json([
'draw' => $request->get('draw'),
'recordsTotal' => $totalRecords,
'recordsFiltered' => $filteredRecords,
'pageCount' => $pageCount,
'page' => $currentPage,
'totalCount' => $totalRecords,
'data' => $data,
]);
}
public function getUserTeams($id)
{
$teamsUser = TeamsUsers::where('teams_id', $id)->get();
$userIds = $teamsUser->pluck('user_id');
$users = User::whereIn('id', $userIds)
->with('roles')
->get();
if ($users->isNotEmpty()) {
return response()->json($users, 200);
}
return response()->json([], 200);
}
}

View File

@@ -6,11 +6,19 @@
use Exception;
use Illuminate\Http\Request;
use Maatwebsite\Excel\Facades\Excel;
use Modules\Location\Models\City;
use Modules\Location\Models\District;
use Modules\Location\Models\Province;
use Modules\Location\Models\Village;
use Modules\Lpj\Exports\PermohonanExport;
use Modules\Lpj\Http\Requests\PermohonanRequest;
use Modules\Lpj\Models\Branch;
use Modules\Lpj\Models\Debiture;
use Modules\Lpj\Models\DokumenJaminan;
use Modules\Lpj\Models\JenisFasilitasKredit;
use Modules\Lpj\Models\NilaiPlafond;
use Modules\Lpj\Models\Permohonan;
use Modules\Lpj\Models\StatusPermohonan;
use Modules\Lpj\Models\TujuanPenilaian;
class PermohonanController extends Controller
@@ -26,7 +34,6 @@
{
$validate = $request->validated();
if ($validate) {
try {
// Save to database
@@ -49,49 +56,56 @@
public function create()
{
$branches = Branch::all();
$debitures = Debiture::all();
$tujuanPenilaian = TujuanPenilaian::all();
$status = [
'order' => 'Order',
'revisi' => 'Revisi',
'register' => 'Register',
'assign' => 'Assign',
'survey' => 'Survey',
'finalisasi' => 'Proses Laporan',
'approved' => 'Diterima',
'rejected' => 'Ditolak',
'cancel' => 'Dibatalkan',
'finished' => 'Selesai',
'not_started' => 'Belum dimulai',
];
return view('lpj::permohonan.create');
}
return view('lpj::permohonan.form', compact('branches', 'debitures', 'tujuanPenilaian','status'));
public function createPermohonan($debitur)
{
$branches = Branch::all();
$debitur = Debiture::find($debitur);
$tujuanPenilaian = TujuanPenilaian::all();
$status = StatusPermohonan::all();
$fasilitasKredit = JenisFasilitasKredit::all();
$plafond = NilaiPlafond::all();
return view(
'lpj::permohonan.form',
compact('branches', 'debitur', 'tujuanPenilaian', 'status', 'fasilitasKredit', 'plafond'),
);
}
public function edit($id)
{
$permohonan = Permohonan::find($id);
$branches = Branch::all();
$debitures = Debiture::all();
$debitur = Debiture::find($permohonan->debiture_id);
$tujuanPenilaian = TujuanPenilaian::all();
$status = [
'order' => 'Order',
'revisi' => 'Revisi',
'register' => 'Register',
'assign' => 'Assign',
'survey' => 'Survey',
'finalisasi' => 'Proses Laporan',
'approved' => 'Diterima',
'rejected' => 'Ditolak',
'cancel' => 'Dibatalkan',
'finished' => 'Selesai',
'not_started' => 'Belum dimulai',
];
$status = StatusPermohonan::all();
$provinces = Province::all();
$cities = City::where('province_code', $debitur->province_code)->get();
$districts = District::where('city_code', $debitur->city_code)->get();
$villages = Village::where('district_code', $debitur->district_code)->get();
$documents = DokumenJaminan::with('pemilik', 'detail')->where('debiture_id', $id)->get();
$fasilitasKredit = JenisFasilitasKredit::all();
$plafond = NilaiPlafond::all();
return view(
'lpj::permohonan.form',
compact('permohonan', 'branches', 'debitures', 'tujuanPenilaian','status'),
compact(
'permohonan',
'branches',
'debitur',
'tujuanPenilaian',
'status',
'provinces',
'cities',
'districts',
'villages',
'documents',
'fasilitasKredit',
'plafond',
),
);
}
@@ -198,4 +212,96 @@
{
return Excel::download(new PermohonanExport, 'permohonan.xlsx');
}
public function authorization()
{
return view('lpj::permohonan.authorization.index');
}
public function dataForAuthorization(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();
// Apply search filter if provided
if ($request->has('search') && !empty($request->get('search'))) {
$search = $request->get('search');
$query->where(function ($q) use ($search) {
$q->where('nomor_registrasi', 'LIKE', '%' . $search . '%');
$q->orWhere('tanggal_permohonan', 'LIKE', '%' . $search . '%');
$q->orWhereRelation('user', 'name', 'LIKE', '%' . $search . '%');
$q->orWhereRelation('debiture', 'name', 'LIKE', '%' . $search . '%');
$q->orWhereRelation('tujuanPenilaian', 'name', 'LIKE', '%' . $search . '%');
$q->orWhereRelation('branch', 'name', 'LIKE', '%' . $search . '%');
$q->orWhere('status', 'LIKE', '%' . $search . '%');
});
}
// Apply sorting if provided
if ($request->has('sortOrder') && !empty($request->get('sortOrder'))) {
$order = $request->get('sortOrder');
$column = $request->get('sortField');
$query->orderBy($column, $order);
}
// Get the total count of records
$totalRecords = $query->count();
// 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'])->where('status', '=', 'order')->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,
]);
}
public function showAuthorization($id)
{
$permohonan = Permohonan::find($id);
return view('lpj::permohonan.authorization.show', compact('permohonan'));
}
public function updateAuthorization(Request $request, $id)
{
try {
$permohonan = Permohonan::find($id);
$permohonan->status = $request->status;
$permohonan->keterangan = $request->keterangan;
$permohonan->save();
} catch (Exception $e) {
return redirect()->route('authorization.show', $id)->with('error', 'Failed to update permohonan');
}
return redirect()->route('authorization.index')->with('success', 'Permohonan updated successfully');
}
}

View File

@@ -0,0 +1,164 @@
<?php
namespace Modules\Lpj\Http\Controllers;
use App\Http\Controllers\Controller;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Modules\Lpj\Models\Regions;
use Modules\Lpj\Http\Requests\RegionRequest;
use Maatwebsite\Excel\Facades\Excel;
use Modules\Lpj\Exports\RegionExport;
class RegionController extends Controller
{
public $user;
public function index()
{
return view('lpj::region.index');
}
/**
* Show the form for creating a new resource.
*/
public function create()
{
return view('lpj::region.create');
}
/**
* Store a newly created resource in storage.
*/
public function store(RegionRequest $request)
{
$validate = $request->validated();
if ($validate) {
try {
// Save to database
Regions::create($validate);
return redirect()
->route('basicdata.region.index')
->with('success', 'region created successfully');
} catch (Exception $e) {
return redirect()
->route('basicdata.region.create')
->with('error', 'Failed to create region');
}
}
}
public function edit($id)
{
$region = Regions::find($id);
return view('lpj::region.create', compact('region'));
}
/**
* Update the specified resource in storage.
*/
public function update(RegionRequest $request, $id)
{
$validate = $request->validated();
if ($validate) {
try {
// Update in database
$region = Regions::find($id);
$region->update($validate);
return redirect()
->route('basicdata.region.index')
->with('success', 'Region updated successfully');
} catch (Exception $e) {
return redirect()
->route('basicdata.region.edit', $id)
->with('error', 'Failed to update region');
}
}
}
/**
* Remove the specified resource from storage.
*/
public function destroy($id)
{
try {
// Delete from database
$region = Regions::find($id);
$region->delete();
echo json_encode(['success' => true, 'message' => 'Region deleted successfully']);
} catch (Exception $e) {
echo json_encode(['success' => false, 'message' => 'Failed to delete region']);
}
}
public function dataForDatatables(Request $request)
{
if (is_null($this->user) || !$this->user->can('region.view')) {
//abort(403, 'Sorry! You are not allowed to view users.');
}
$query = Regions::query();
if ($request->has('search') && !empty($request->get('search'))) {
$search = $request->get('search');
$query->where(function ($q) use ($search) {
$q->where('code', 'LIKE', "%$search%");
$q->orWhere('name', 'LIKE', "%$search%");
});
}
if($request->has('sortOrder') && !empty($request->get('sortOrder'))){
$order = $request->get('sortOrder');
$column = $request->get('sortField');
$query->orderBy($column, $order);
}
$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->get();
// Calculate the page count
$pageCount = ceil($totalRecords / $request->get('size'));
// Calculate the current page number
$currentPage = 0 + 1;
// dump($data);
// 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 export()
{
return Excel::download(new RegionExport, 'region.xlsx');
}
}

View File

@@ -0,0 +1,260 @@
<?php
namespace Modules\Lpj\Http\Controllers;
use App\Http\Controllers\Controller;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Modules\Lpj\Models\Regions;
use Modules\Usermanagement\Models\User;
use Modules\Lpj\Models\Teams;
use Modules\Lpj\Models\TeamsUsers;
use Modules\Lpj\Http\Requests\TeamsRequest;
use Illuminate\Support\Facades\DB;
use Modules\Lpj\Exports\TeamPenilaianExport;
use Maatwebsite\Excel\Facades\Excel;
class TeamsController extends Controller
{
public $user;
/**
* Display a listing of the resource.
*/
public function index()
{
return view('lpj::teams.index');
}
/**
* 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();
// cek user apakah sudah ada di tabel teams_users
$userTeam = TeamsUsers::pluck('user_id')->toArray();
$user = User::whereNotIn('id', $userTeam)
->with('roles')
->get();
return view('lpj::teams.form', compact('region', 'user'));
}
/**
* Store a newly created resource in storage.
*/
public function store(TeamsRequest $request)
{
$validate = $request->validated();
DB::beginTransaction();
try {
$teams = Teams::create($validate);
$users = $request->input('user', []);
// loop untuk insert data users ke tabel teams_users
foreach ($users as $user) {
TeamsUsers::create([
'teams_id' => $teams->id,
'user_id' => $user
]);
}
DB::commit();
return redirect()
->route('basicdata.teams.index')
->with('success', 'Data saved successfully. ');
} catch (Exception $e) {
DB::rollBack();
return redirect()
->route('basicdata.teams.create')
->with('error', 'Failed to save data. ');
}
}
/**
* Show the specified resource.
*/
public function show($id)
{
return view('lpj::show');
}
/**
* Show the form for editing the specified resource.
*/
public function edit($id)
{
$teams = Teams::find($id);
$region = Regions::all();
$usedUsers = TeamsUsers::where('teams_id', '!=', $id)->pluck('user_id')->toArray();
$user = User::whereNotIn('id', $usedUsers)
->with('roles')
->get();
// 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'));
}
/**
* Update the specified resource in storage.
*/
public function update(TeamsRequest $request, $id)
{
$validate = $request->validated();
DB::beginTransaction();
try {
$teams = Teams::findOrFail($id);
// Update data tim
$teams->update($validate);
$userIds = $request->input('user', []);
$teams->teamsUsers()->delete();
foreach ($userIds as $userId) {
TeamsUsers::create([
'teams_id' => $teams->id,
'user_id' => $userId
]);
}
DB::commit();
return redirect()
->route('basicdata.teams.index')
->with('success', 'Data updated successfully. ');
} catch (Exception $e) {
DB::rollBack();
return redirect()
->route('basicdata.teams.create')
->with('error', 'Failed to update data. ');
}
}
/**
* Remove the specified resource from storage.
*/
public function destroy($id)
{
DB::beginTransaction();
try {
$teams = Teams::findOrFail($id);
$teams->teamsUsers()->delete();
// Hapus tim
$teams->delete();
DB::commit();
echo json_encode(['success' => true, 'message' => 'Team has been deleted successfully']);
} catch (Exception $e) {
DB::rollBack();
echo json_encode(['success' => false, 'message' => 'Failed to delete Team']);
}
}
public function dataForDatatables(Request $request)
{
if (is_null($this->user) || !$this->user->can('teams.view')) {
//abort(403, 'Sorry! You are not allowed to view users.');
}
// Inisialisasi query
$query = Teams::select('teams.id as id', 'teams.name as team_name', 'regions.name as region_name')
->join('regions', 'teams.regions_id', '=', 'regions.id')
->leftJoin('teams_users', 'teams.id', '=', 'teams_users.teams_id')
->leftJoin('users', 'teams_users.user_id', '=', 'users.id')
->addSelect('users.id as user_id', 'users.name as user_name');
// Filter pencarian
if ($request->has('search') && !empty($request->get('search'))) {
$search = $request->get('search');
$query->where(function ($q) use ($search) {
$q->where('teams.name', 'LIKE', "%$search%")
->orWhere('regions.name', 'LIKE', "%$search%")
->orWhere('users.name', 'LIKE', "%$search%");
});
}
// Sorting
if ($request->has('sortOrder') && !empty($request->get('sortOrder'))) {
$order = $request->get('sortOrder');
$column = $request->get('sortField');
$query->orderBy($column, $order);
}
// Hitung total records
$totalRecords = $query->count();
// Pagination
$size = $request->get('size', 10);
$page = $request->get('page', 1);
$offset = ($page - 1) * $size;
// Ambil data dengan pagination
$data = $query->skip($offset)->take($size)->get();
$filteredRecords = $data->count();
$pageCount = ceil($totalRecords / $size);
// Ambil ID pengguna dari hasil query
$userIds = $data->pluck('user_id')->unique();
// Ambil data pengguna dengan peran mereka
$users = User::whereIn('id', $userIds)
->with('roles')
->get()
->keyBy('id');
// Format data
$formattedData = $data->groupBy('id')->map(function ($group) use ($users) {
$team = $group->first();
$team->user_team = $group->map(function ($item) use ($users) {
$user = $users->get($item->user_id);
return [
'nama' => $item->user_name,
'roles' => $user ? $user->roles->pluck('name')->toArray() : [],
];
})->toArray();
return $team;
})->values();
return response()->json([
'draw' => $request->get('draw'),
'recordsTotal' => $totalRecords,
'recordsFiltered' => $filteredRecords,
'pageCount' => $pageCount,
'page' => $page,
'totalCount' => $totalRecords,
'data' => $formattedData
]);
}
public function export()
{
return Excel::download(new TeamPenilaianExport(), 'team-penilai.xlsx');
}
}

View File

@@ -0,0 +1,179 @@
<?php
namespace Modules\Lpj\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Modules\Lpj\Models\Penawaran;
use App\Http\Controllers\Controller;
use Maatwebsite\Excel\Facades\Excel;
use Modules\Lpj\Models\PenawaranTender;
use Modules\Lpj\Exports\PenawaranTenderExport;
use Modules\Lpj\Http\Requests\TenderPenawaranRequest;
use Modules\Lpj\Models\JenisLaporan;
use Modules\Lpj\Models\KJPP;
use Modules\Lpj\Models\Permohonan;
use Modules\Lpj\Models\StatusPermohonan;
use Modules\Lpj\Models\TujuanPenilaianKJPP;
class TenderController extends Controller
{
public $user;
/**
* Display a listing of the resource.
*/
public function penawaran_index()
{
return view('lpj::penawaran/index');
}
/**
* Show the form for creating a new resource.
*/
public function penawaran_create($id)
{
$status = StatusPermohonan::all();
$tujuan_penilaian_kjpp = TujuanPenilaianKJPP::all();
$jenis_laporan = JenisLaporan::all();
$kjpp = KJPP::all();
$permohonan = Permohonan::find($id);
$permohonanId = $permohonan->id;
$permohonanNomorRegistrasi = $permohonan->nomor_registrasi;
return view('lpj::penawaran/create', compact('status', 'tujuan_penilaian_kjpp', 'jenis_laporan', 'kjpp', 'permohonanId', 'permohonanNomorRegistrasi'));
}
/**
* Store a newly created resource in storage.
*/
public function penawaran_store(TenderPenawaranRequest $request, $id)
{
$validated = $request->validated();
if ($validated) {
$validated['nomor_registrasi'] = $request->nomor_registrasi;
$validated['nama_kjpp_sebelumnya'] = json_encode($request->input('nama_kjpp_sebelumnya'));
PenawaranTender::create($validated);
return redirect()
->route('tender.penawaran.index')
->with('success', 'Data Penawaran created successfully');
} else {
return redirect()
->route('tender.penawaran.createPenawaran', $id)
->with('error', 'Validation failed');
}
}
/**
* Show the specified resource.
*/
public function penawaran_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)
{
//
}
public function datatablesPenawaran(Request $request)
{
if (is_null($this->user) || !$this->user->can('penawaran.view')) {
//abort(403, 'Sorry! You are not allowed to view users.');
}
// Retrieve data from the database
$query = PenawaranTender::query();
// Apply search filter if provided
if ($request->has('search') && !empty($request->get('search'))) {
$search = $request->get('search');
$query->where(function ($q) use ($search) {
$q->where('code', 'LIKE', "%$search%");
$q->orWhere('nama_kjpp_sebelumnya', 'LIKE', "%$search%");
$q->orWhere('tanggal_penilaian_sebelumnya', '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->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,
]);
}
public function exportPenawaran()
{
return Excel::download(new PenawaranTenderExport, 'kjpp.xlsx');
}
public function proses_penawaran_index()
{
return view('lpj::proses_penawaran/index');
}
public function penawaran_ulang_index()
{
return view('lpj::penawaran_ulang/index');
}
}

View File

@@ -0,0 +1,174 @@
<?php
namespace Modules\Lpj\Http\Controllers;
use Throwable;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Maatwebsite\Excel\Facades\Excel;
use Modules\Lpj\Models\TujuanPenilaianKJPP;
use Modules\Lpj\Exports\TujuanPenilaianKJPPExport;
use Modules\Lpj\Http\Requests\JenisPenilaianKJPPRequest;
class TujuanPenilaianKJPPController extends Controller
{
public $user;
/**
* Display a listing of the resource.
*/
public function index()
{
return view('lpj::tujuan_penilaian_kjpp.index');
}
/**
* Show the form for creating a new resource.
*/
public function create()
{
return view('lpj::tujuan_penilaian_kjpp.create');
}
/**
* Store a newly created resource in storage.
*/
public function store(JenisPenilaianKJPPRequest $request)
{
$validate = $request->validated();
if ($validate) {
try {
TujuanPenilaianKJPP::create($validate);
return redirect()
->route('basicdata.tujuan_penilaian_kjpp.index')
->with('success', 'Tujuan Penilaian KJPP created successfully');
} catch (Throwable $e) {
return redirect()
->route('basicdata.tujuan_penilaian_kjpp.create')
->with('success', 'Failed to create Tujuan Penilaian KJPP: ' . $e);
}
}
}
/**
* Show the specified resource.
*/
public function show($id)
{
return view('lpj::show');
}
/**
* Show the form for editing the specified resource.
*/
public function edit($id)
{
$tujuanPenilaianKJPP = TujuanPenilaianKJPP::find($id);
return view('lpj::tujuan_penilaian_kjpp.create', compact('tujuanPenilaianKJPP'));
}
/**
* Update the specified resource in storage.
*/
public function update(JenisPenilaianKJPPRequest $request, $id)
{
$validate = $request->validated();
if ($validate) {
try {
$tujuanPenilaianKJPP = TujuanPenilaianKJPP::find($id);
$tujuanPenilaianKJPP->update($validate);
return redirect()
->route('basicdata.tujuan_penilaian_kjpp.index')
->with('success', 'Tujuan Penilaian KJPP updated successfully');
} catch (Throwable $e) {
return redirect()
->route('basicdata.tujuan_penilaian_kjpp.edit', $id)
->with('success', 'Failed to update Tujuan Penilaian KJPP: ' . $e);
}
}
}
/**
* Remove the specified resource from storage.
*/
public function destroy($id)
{
try {
// Delete from database
$tujuanPenilaianKJPP = TujuanPenilaianKJPP::find($id);
$tujuanPenilaianKJPP->delete();
echo json_encode(['success' => true, 'message' => 'Tujuan Penilaian deleted successfully']);
} catch (Throwable $e) {
echo json_encode(['success' => false, 'message' => 'Failed to delete deleted']);
}
}
public function dataForDatatables(Request $request)
{
if (is_null($this->user) || !$this->user->can('jenis_jaminan.view')) {
//abort(403, 'Sorry! You are not allowed to view users.');
}
// Retrieve data from the database
$query = TujuanPenilaianKJPP::query();
// Apply search filter if provided
if ($request->has('search') && !empty($request->get('search'))) {
$search = $request->get('search');
$query->where(function ($q) use ($search) {
$q->where('code', 'LIKE', "%$search%");
$q->orWhere('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->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,
]);
}
public function export()
{
return Excel::download(new TujuanPenilaianKJPPExport, 'jenis_laporan.xlsx');
}
}

View File

@@ -3,6 +3,7 @@
namespace Modules\Lpj\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
use Modules\Lpj\Rules\UniqueCifExceptZero;
class DebitureRequest extends FormRequest
{
@@ -21,7 +22,7 @@
'nomor_rekening' => 'nullable|string|max:50',
'name' => 'required',
'registered_at' => 'nullable|date',
'npwp' => 'nullable|string|max:16',
'npwp' => 'nullable|string|min:15|max:16',
'email' => 'nullable|email',
'phone' => 'nullable|string|max:15',
'address' => 'nullable|string',
@@ -30,9 +31,9 @@
];
if($this->method() == 'PUT'){
$rules['cif'] = 'nullable|unique:debitures,cif,' . $this->id;
$rules['cif'] = ['required', new UniqueCifExceptZero($this->id)];
}else{
$rules['cif'] = 'nullable|unique:debitures,cif';
$rules['cif'] = ['required', new UniqueCifExceptZero(null)];
}
return $rules;

View File

@@ -0,0 +1,43 @@
<?php
namespace Modules\Lpj\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class DokumenJaminanRequest extends FormRequest
{
/**
* Get the validation rules that apply to the request.
*/
public function rules()
: array
{
$rules = [
'debiture_id' => 'required|exists:debitures,id',
'pemilik_jaminan_id' => 'required',
'jenis_jaminan_id' => 'required',
'jenis_legalitas_jaminan_id' => 'required',
'dokumen_jaminan' => 'nullable|file|mimes:pdf',
'keterangan' => 'nullable|string|max:255',
'province_code' => 'nullable|exists:provinces,code',
'city_code' => 'nullable|exists:cities,code',
'district_code' => 'nullable|exists:districts,code',
'village_code' => 'nullable|exists:villages,code',
'name' => 'required',
'address' => 'nullable|string',
'postal_code' => 'nullable|string|max:10',
'status' => 'nullable|boolean',
];
return $rules;
}
/**
* Determine if the user is authorized to make this request.
*/
public function authorize()
: bool
{
return true;
}
}

View File

@@ -16,14 +16,10 @@
'debiture_id' => 'required|exists:debitures,id',
'pemilik_jaminan_id' => 'required',
'jenis_jaminan_id' => 'required',
'jenis_legalitas_jaminan_id' => 'required',
'dokumen_jaminan' => 'nullable|file|mimes:pdf',
'keterangan' => 'nullable|string|max:255',
'province_code' => 'nullable|exists:provinces,code',
'city_code' => 'nullable|exists:cities,code',
'district_code' => 'nullable|exists:districts,code',
'village_code' => 'nullable|exists:villages,code',
'name' => 'required',
'address' => 'nullable|string',
'postal_code' => 'nullable|string|max:10',
'status' => 'nullable|boolean',

View File

@@ -0,0 +1,46 @@
<?php
namespace Modules\Lpj\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class IjinUsahaRequest extends FormRequest
{
/**
* Get the validation rules that apply to the request.
*/
public function rules(): array
{
$rules = [
'name' => 'required|string|not_regex:/^\d+$/|max:255'
];
if ($this->method() == 'PUT') {
$rules['code'] = 'required|max:50|unique:ijin_usaha,code,' . $this->id;
} else {
$rules['code'] = 'required|max:50|unique:ijin_usaha,code';
}
return $rules;
}
/**
* Determine if the user is authorized to make this request.
*/
public function authorize(): bool
{
return true;
}
public function messages(): array
{
return [
'code.required' => 'Kode Ijin Usaha harus diisi!',
'code.max' => 'Kode Ijin Usaha maksimal 255 huruf!',
'code.unique' => 'Kode Ijin Usaha tidak boleh sama!',
'name.required' => 'Nama Ijin Usaha harus diisi!',
'name.not_regex' => 'Nama Ijin Usaha harus berupa huruf!',
'name.max' => 'Nama Ijin Usaha maksimal 255 huruf!'
];
}
}

View File

@@ -2,7 +2,9 @@
namespace Modules\Lpj\Http\Requests;
use daengdeni\LaravelIdGenerator\IdGenerator;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Support\Str;
class JenisJaminanRequest extends FormRequest
{
@@ -12,16 +14,12 @@
public function rules()
: array
{
$rules = [
return [
'code' => 'required|max:5',
'name' => 'required|max:255',
'slug' => 'required|max:255',
'jenis_legalitas_jaminan_id' => 'nullable',
];
if ($this->method() == 'PUT') {
$rules['code'] = 'required|max:50|unique:jenis_jaminan,code,' . $this->id;
} else {
$rules['code'] = 'required|max:50|unique:jenis_jaminan,code';
}
return $rules;
}
/**
@@ -32,4 +30,21 @@
{
return true;
}
public function prepareForValidation()
: void
{
if ($this->method() == 'POST') {
$this->merge([
'code' => IdGenerator::generate(
['table' => 'jenis_jaminan', 'length' => 5, 'prefix' => 'JJ', 'field' => 'code'],
)
]);
}
$this->merge([
'jenis_legalitas_jaminan_id' => json_encode($this->jenis_legalitas_jaminan_id),
'slug' => Str::slug($this->name),
]);
}
}

View File

@@ -0,0 +1,46 @@
<?php
namespace Modules\Lpj\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class JenisLaporanRequest extends FormRequest
{
/**
* Get the validation rules that apply to the request.
*/
public function rules(): array
{
$rules = [
'code' => 'required|max:5',
'name' => 'required|max:255',
];
if ($this->method() == 'PUT') {
$rules['code'] = 'required|max:5|unique:jenis_laporan,code,' . $this->id;
} else {
$rules['code'] = 'required|max:5|unique:jenis_laporan,code';
}
return $rules;
}
/**
* Determine if the user is authorized to make this request.
*/
public function authorize(): bool
{
return true;
}
public function messages(): array
{
return [
'code.required' => 'Kode Jenis Laporan Wajib diisi!',
'code.max' => 'Kode Jenis Laporan maksimum 5 huruf!',
'code.unique' => 'Kode Jenis Laporan tidak boleh sama!',
'name.required' => 'Nama Jenis Laporan Wajib diisi!',
'name.max' => 'Nama Jenis Laporan Wajib diisi!'
];
}
}

View File

@@ -2,7 +2,9 @@
namespace Modules\Lpj\Http\Requests;
use daengdeni\LaravelIdGenerator\IdGenerator;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Support\Str;
class JenisLegalitasJaminanRequest extends FormRequest
{
@@ -12,16 +14,11 @@
public function rules()
: array
{
$rules = [
return [
'code' => 'required|max:6',
'name' => 'required|max:255',
'slug' => 'required|max:255',
];
if ($this->method() == 'PUT') {
$rules['code'] = 'required|max:50|unique:jenis_legalitas_jaminan,code,' . $this->id;
} else {
$rules['code'] = 'required|max:50|unique:jenis_legalitas_jaminan,code';
}
return $rules;
}
/**
@@ -32,4 +29,20 @@
{
return true;
}
public function prepareForValidation()
{
if($this->method() == 'POST' && $this->code == null) {
$this->merge([
'code' => IdGenerator::generate(
['table' => 'jenis_legalitas_jaminan', 'length' => 6, 'prefix' => 'JLJ', 'field' => 'code'],
),
'slug' => Str::slug($this->name),
]);
} else {
$this->merge([
'slug' => Str::slug($this->name),
]);
}
}
}

View File

@@ -0,0 +1,45 @@
<?php
namespace Modules\Lpj\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class JenisPenilaianKJPPRequest extends FormRequest
{
/**
* Get the validation rules that apply to the request.
*/
public function rules(): array
{
$rules = [
'code' => 'required|max:5',
'name' => 'required|max:255',
];
if ($this->method() == 'PUT') {
$rules['code'] = 'required|max:5|unique:tujuan_penilaian_kjpp,code,' . $this->id;
} else {
$rules['code'] = 'required|max:5|unique:tujuan_penilaian_kjpp,code';
}
return $rules;
}
/**
* Determine if the user is authorized to make this request.
*/
public function authorize(): bool
{
return true;
}
public function messages(): array
{
return [
'code.required' => 'Kode Tujuan Penilaian KJPP Wajib diisi!',
'code.max' => 'Kode Tujuan Penilaian KJPP maksimum 5 huruf!',
'code.unique' => 'Kode Tujuan Penilaian KJPP tidak boleh sama!',
'name.required' => 'Nama Tujuan Penilaian KJPP Wajib diisi!',
'name.max' => 'Nama Tujuan Penilaian KJPP Wajib diisi!'
];
}
}

View File

@@ -0,0 +1,41 @@
<?php
namespace Modules\Lpj\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class JenisPenilaianRequest extends FormRequest
{
/**
* Get the validation rules that apply to the request.
*/
public function rules(): array
{
$rules = [
'name' => 'required|string|max:255',
'status' => 'nullable|boolean',
'authorized_at' => 'nullable|datetime',
'authorized_status' => 'nullable|string|max:1',
'authorized_by' => 'nullable|exists:users,id',
];
if ($this->method() == 'PUT') {
$rules['code'] = 'required|string|max:3|unique:jenis_penilaian,code,' . $this->id;
} else {
$rules['code'] = 'required|string|max:3|unique:jenis_penilaian,code';
}
return $rules;
}
/**
* Determine if the user is authorized to make this request.
*/
public function authorize(): bool
{
return true;
}
}

View File

@@ -0,0 +1,111 @@
<?php
namespace Modules\Lpj\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
use daengdeni\LaravelIdGenerator\IdGenerator;
class KJPPRequest extends FormRequest
{
/**
* Get the validation rules that apply to the request.
*/
public function rules(): array
{
$rules = [
'name' => 'required|string|not_regex:/^\d+$/|max:255',
'jenis_kantor' => 'required',
'nomor_ijin_usaha' => 'required',
'province_code' => 'required',
'city_code' => 'required',
'district_code' => 'required',
'village_code' => 'required',
'address' => 'required',
'postal_code' => 'required|numeric',
'nomor_telepon_kantor' => 'required|numeric|digits_between:8,15',
'email_kantor' => 'required|email',
'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',
'ijin_usaha_id' => 'required|array',
'ijin_usaha_id.*' => 'exists:ijin_usaha,code',
'jenis_aset_id' => 'required|array',
'jenis_aset_id.*' => 'exists:jenis_jaminan,code',
'attachment' => 'nullable|mimes:pdf|max:1024'
];
if ($this->method() == 'PUT') {
$rules['code'] = 'required|max:50|unique:kjpp,code,' . $this->id;
} else {
$rules['code'] = 'required|max:50|unique:kjpp,code';
}
return $rules;
}
/**
* Determine if the user is authorized to make this request.
*/
public function authorize(): bool
{
return true;
}
public function messages(): array
{
return [
'code.required' => 'Kode KJPP Wajib diisi!',
'code.max' => 'Kode KJPP maksimal 255 huruf!',
'code.unique' => 'Kode KJPP tidak boleh sama!',
'name.required' => 'Nama KJPP Wajib diisi!',
'name.not_regex' => 'Nama KJPP harus berupa huruf!',
'name.max' => 'Nama KJPP maksimal 255 huruf!',
'jenis_kantor.required' => 'Jenis Kantor Wajib diisi!',
'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!',
'email_kantor.email' => 'Email Kantor tidak valid!',
'nama_pimpinan.required' => 'Nama Pimpinan Wajib diisi!',
'nama_pimpinan.not_regex' => 'Nama Pimpinan harus berupa huruf!',
'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

@@ -28,8 +28,8 @@
'status' => 'nullable|boolean',
];
$rules['nomor_id'] = 'nullable|max:16|unique:pemilik_jaminan,nomor_id,debiture_id,' . $this->debiture_id;
//$rules['nomor_id'] = 'nullable|max:16|unique:pemilik_jaminan,nomor_id,debiture_id,' . $this->debiture_id;
$rules['nomor_id'] = 'nullable|max:16|unique:pemilik_jaminan,debiture_id,' . $this->debiture_id;
return $rules;
}

View File

@@ -0,0 +1,59 @@
<?php
namespace Modules\Lpj\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class PenilaianRequest extends FormRequest
{
/**
* Get the validation rules that apply to the request.
*/
public function rules(): array
{
$action = $this->input('action');
if ($action === 'revisi') {
return [
'dokumen' => 'required|file|mimes:pdf',
'keterangan' => 'required|string',
];
}
return [
'jenis_penilaian_id' => 'required|max:255',
'teams_id' => 'required|max:255',
'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',
'keterangan' => 'nullable',
];
}
/**
* Determine if the user is authorized to make this request.
*/
public function authorize(): bool
{
return true;
}
protected function prepareForValidation()
{
// Menetapkan nilai default untuk 'status' jika tidak ada dalam request
$this->merge([
'status' => $this->status ?? 'assign',
]);
}
}

View File

@@ -21,6 +21,10 @@
'tujuan_penilaian_id' => 'required|exists:tujuan_penilaian,id',
'debiture_id' => 'required|exists:debitures,id',
'status' => 'required|string',
'jenis_fasilitas_kredit_id' => 'required|exists:jenis_fasilitas_kredit,id',
'nilai_plafond_id' => 'required|exists:nilai_plafond,id',
'status_bayar' => 'required|string',
'nilai_njop' => 'nullable|numeric'
];
return $rules;
@@ -44,6 +48,7 @@
),
'tanggal_permohonan' => date('Y-m-d'),
'user_id' => auth()->user()->id,
'branch_id' => auth()->user()->branch_id,
]);
}
}

View File

@@ -0,0 +1,38 @@
<?php
namespace Modules\Lpj\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class RegionRequest extends FormRequest
{
/**
* Get the validation rules that apply to the request.
*/
public function rules(): array
{
$rules = [
'name' => 'required|string|max:255',
'status' => 'nullable|boolean',
'authorized_at' => 'nullable|datetime',
'authorized_status' => 'nullable|string|max:1',
'authorized_by' => 'nullable|exists:users,id',
];
if ($this->method() == 'PUT') {
$rules['code'] = 'required|string|max:3|unique:regions,code,' . $this->id;
} else {
$rules['code'] = 'required|string|max:3|unique:regions,code';
}
return $rules;
}
/**
* Determine if the user is authorized to make this request.
*/
public function authorize(): bool
{
return true;
}
}

View File

@@ -16,6 +16,7 @@
$rules = [
'description' => 'nullable|max:255',
'status' => 'required|boolean',
'slug' => 'nullable|max:255',
];
if ($this->method() == 'PUT') {
@@ -37,9 +38,9 @@
public function prepareForValidation()
{
$this->merge([
return $this->merge([
'status' => isset($this->status) ? 1 : 0,
'slug'=> Str::slug($this->name)
'slug' => Str::slug($this->name),
]);
}
}

View File

@@ -0,0 +1,41 @@
<?php
namespace Modules\Lpj\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class TeamsRequest extends FormRequest
{
/**
* Get the validation rules that apply to the request.
*/
public function rules(): array
{
$rules = [
'name' => 'required|string|max:255',
'status' => 'nullable|boolean',
'regions_id' => 'required|nullable|exists:regions,id',
'user.*' => 'nullable|exists:users,id',
'authorized_at' => 'nullable|datetime',
'authorized_status' => 'nullable|string|max:1',
'authorized_by' => 'nullable|exists:users,id',
];
if ($this->method() == 'PUT') {
$rules['code'] = 'required|string|max:3|unique:teams,code,' . $this->id;
} else {
$rules['code'] = 'required|string|max:3|unique:teams,code';
}
return $rules;
}
/**
* Determine if the user is authorized to make this request.
*/
public function authorize(): bool
{
return true;
}
}

View File

@@ -0,0 +1,75 @@
<?php
namespace Modules\Lpj\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class TenderPenawaranRequest extends FormRequest
{
/**
* Get the validation rules that apply to the request.
*/
public function rules(): array
{
$rules = [
'nama_kjpp_sebelumnya' => 'required|array',
'nama_kjpp_sebelumnya.*' => 'exists:kjpp,name',
'biaya_kjpp_sebelumnya' => 'required|numeric',
'tanggal_penilaian_sebelumnya' => 'required',
'nomor_registrasi' => 'required',
'tujuan_penilaian_kjpp_id' => 'required',
'jenis_laporan_id' => 'required',
'start_date' => 'required',
'end_date' => 'required',
'catatan' => 'nullable',
'status' => 'required'
];
if ($this->method() == 'PUT') {
$rules['code'] = 'required|max:50|unique:penawaran,code,' . $this->id;
} else {
$rules['code'] = 'required|max:50|unique:penawaran,code';
}
return $rules;
}
/**
* Determine if the user is authorized to make this request.
*/
public function authorize(): bool
{
return true;
}
public function messages(): array
{
return [
'code.required' => 'Kode Penawaran Wajib diisi!',
'code.max' => 'Kode Penawaran maksimal 255 huruf!',
'code.unique' => 'Kode Penawaran tidak boleh sama!',
'nama_kjpp_sebelumnya.required' => 'Nama KJPP Sebelumnya Wajib diisi!',
'biaya_kjpp_sebelumnya.required' => 'Biaya KJPP Sebelumnya Wajib diisi!',
'biaya_kjpp_sebelumnya.numeric' => 'Biaya KJPP Sebelumnya harus berupa angka!',
'tanggal_penilaian_sebelumnya.required' => 'Tanggal Penilaian Sebelumnya Wajib diisi!',
'nomor_registrasi.required' => 'Nomor Registrasi Wajib diisi!',
'tujuan_penilaian_kjpp_id.required' => 'Tujuan Penilaian KJPP Wajib diisi!',
'jenis_laporan_id.required' => 'Jenis Laporan Wajib diisi!',
'start_date.required' => 'Tanggal Awal Wajib diisi!',
'end_date.required' => 'Tanggal Akhir Wajib diisi!',
'status.required' => 'Status Wajib diisi!'
];
}
public function withValidator($validator)
{
$validator->after(function ($validator) {
$startDate = strtotime($this->input('start_date'));
$endDate = strtotime($this->input('end_date'));
if ($endDate < $startDate) {
$validator->errors()->add('end_date', 'Tanggal Akhir tidak boleh lebih awal dari Tanggal Awal.');
}
});
}
}

View File

@@ -56,4 +56,8 @@
return $this->belongsTo(Village::class, 'village_code', 'code');
}
public function documents(){
return $this->hasMany(DokumenJaminan::class);
}
}

View File

@@ -0,0 +1,34 @@
<?php
namespace Modules\Lpj\Models;
use Modules\Location\Models\City;
use Modules\Location\Models\District;
use Modules\Location\Models\Province;
use Modules\Location\Models\Village;
use Modules\Lpj\Database\Factories\DokumenJaminanFactory;
class DetailDokumenJaminan extends Base
{
protected $table = 'detail_dokumen_jaminan';
protected $fillable = [
'dokumen_jaminan_id',
'jenis_legalitas_jaminan_id',
'name',
'dokumen_jaminan',
'keterangan',
'status',
'authorized_at',
'authorized_status',
'authorized_by',
];
public function jenisLegalitasJaminan(){
return $this->belongsTo(JenisLegalitasJaminan::class, 'jenis_legalitas_jaminan_id', 'id');
}
public function dokumenJaminan(){
return $this->belongsTo(DokumenJaminan::class, 'dokumen_jaminan_id', 'id');
}
}

View File

@@ -16,10 +16,6 @@
'permohonan_id',
'pemilik_jaminan_id',
'jenis_jaminan_id',
'jenis_legalitas_jaminan_id',
'name',
'dokumen_jaminan',
'keterangan',
'province_code',
'city_code',
'district_code',
@@ -64,11 +60,11 @@
return $this->belongsTo(JenisJaminan::class, 'jenis_jaminan_id', 'id');
}
public function jenisLegalitasJaminan(){
return $this->belongsTo(JenisLegalitasJaminan::class, 'jenis_legalitas_jaminan_id', 'id');
}
public function permohonan(){
return $this->belongsTo(Permohonan::class, 'permohonan_id', 'id');
}
public function detail(){
return $this->hasMany(DetailDokumenJaminan::class, 'dokumen_jaminan_id', 'id');
}
}

18
app/Models/IjinUsaha.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 IjinUsaha extends Model
{
use HasFactory;
protected $table = 'ijin_usaha';
/**
* The attributes that are mass assignable.
*/
protected $fillable = ['code', 'name'];
}

View File

@@ -2,10 +2,8 @@
namespace Modules\Lpj\Models;
use Modules\Lpj\Database\Factories\JenisJaminanFactory;
class JenisJaminan extends Base
{
protected $table = 'jenis_jaminan';
protected $fillable = ['code', 'name'];
protected $fillable = ['code', 'name', 'slug', 'jenis_legalitas_jaminan_id'];
}

View File

@@ -0,0 +1,22 @@
<?php
namespace Modules\Lpj\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Modules\Lpj\Database\Factories\JenisLaporanFactory;
class JenisLaporan extends Model
{
use HasFactory;
/**
* The attributes that are mass assignable.
*/
// Define the table if not using default table naming
protected $table = 'jenis_laporan';
protected $fillable = ['code', 'name'];
}

View File

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

View File

@@ -0,0 +1,25 @@
<?php
namespace Modules\Lpj\Models;
use Illuminate\Database\Eloquent\Model;
use Modules\Lpj\Database\Factories\JenisPenilaianFactory;
use Modules\Lpj\Models\Penilaian;
class JenisPenilaian extends Model
{
/**
* The attributes that are mass assignable.
*/
protected $table = 'jenis_penilaian';
protected $fillable = [
'code', 'name', 'status', 'authorized_status', 'authorized_at', 'authorized_by',
'created_at', 'created_by', 'updated_at', 'updated_by', 'deleted_at', 'deleted_by'
];
public function penilaian(){
return $this->hasMany(Penilaian::class , 'jenis_penilaian_id', 'id');
}
}

46
app/Models/KJPP.php Normal file
View File

@@ -0,0 +1,46 @@
<?php
namespace Modules\Lpj\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Modules\Location\Models\Province;
// use Modules\Lpj\Database\Factories\KJPPFactory;
class KJPP extends Model
{
use HasFactory;
// Define the table if not using default table naming
protected $table = 'kjpp';
/**
* 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'
];
}

View File

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

56
app/Models/Penilaian.php Normal file
View File

@@ -0,0 +1,56 @@
<?php
namespace Modules\Lpj\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Modules\Lpj\Database\Factories\PenilaianFactory;
use Modules\Lpj\Models\JenisPenilaian;
use Modules\Lpj\Models\Teams;
use Modules\Lpj\Models\Permohonan;
use Modules\Usermanagement\Models\User;
class Penilaian extends Model
{
/**
* The attributes that are mass assignable.
*/
protected $table = 'penilaian';
protected $fillable = [
'jenis_penilaian_id', 'teams_id', 'user_id', 'tanggal_kunjungan', 'keterangan','nomor_registrasi','penilaian_id','surveyor_id','penilai_surveyor_id',
'status', 'authorized_status', 'authorized_at', 'authorized_by', 'created_at',
'created_by', 'updated_at', 'updated_by', 'deleted_at', 'deleted_by'
];
public function jenis_penilaian(){
return $this->belongsTo(JenisPenilaian::class, 'jenis_penilaian_id', 'id');
}
public function teams(){
return $this->belongsTo(Teams::class, 'teams_id', 'id');
}
public function users(){
return $this->belongsTo(User::class, 'user_id', 'id');
}
public function userPenilai(){
return $this->belongsTo(User::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

@@ -6,6 +6,8 @@ use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Modules\Lpj\Database\Factories\PermohonanFactory;
use Modules\Usermanagement\Models\User;
use Modules\Lpj\Models\TujuanPenilaian;
use Modules\Lpj\Models\JenisFasilitasKredit;
class Permohonan extends Base
{
@@ -17,6 +19,10 @@ class Permohonan extends Base
'branch_id',
'tujuan_penilaian_id',
'debiture_id',
'keterangan',
'dokumen',
'jenis_fasilitas_kredit_id',
'nilai_plafond_id',
'status',
'authorized_at',
'authorized_status',
@@ -26,7 +32,10 @@ class Permohonan extends Base
'registrasi_by',
'registrasi_at',
'jenis_penilaian_id',
'region_id'
'region_id',
// andy add
'status_bayar',
'nilai_njop'
];
public function user(){
@@ -48,4 +57,16 @@ class Permohonan extends Base
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');
}
}

26
app/Models/Regions.php Normal file
View File

@@ -0,0 +1,26 @@
<?php
namespace Modules\Lpj\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Modules\Lpj\Database\Factories\RegionsFactory;
use Modules\Lpj\Models\Teams;
class Regions extends Model
{
use HasFactory;
/**
* The attributes that are mass assignable.
*/
protected $table = 'regions';
protected $fillable = [
'code', 'name', 'status', 'authorized_status', 'authorized_at', 'authorized_by'
];
public function teams(){
return $this->hasMany(Teams::class, 'regions_id', 'id');
}
}

40
app/Models/Teams.php Normal file
View File

@@ -0,0 +1,40 @@
<?php
namespace Modules\Lpj\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Modules\Lpj\Database\Factories\TeamsFactory;
use Modules\Lpj\Models\TeamsUsers;
use Modules\Lpj\Models\Regions;
use Modules\Lpj\Models\Penilaian;
class Teams extends Model
{
/**
* The attributes that are mass assignable.
*/
protected $table = 'teams';
protected $fillable = [
'regions_id', 'code', 'name', 'status', 'authorized_status', 'authorized_at',
'authorized_by', 'created_at', 'created_by', 'updated_at', 'updated_by',
'deleted_at', 'deleted_by'
];
public function regions(){
return $this->belongsTo(Regions::class, 'regions_id', 'id');
}
public function teamsUsers(){
return $this->hasMany(TeamsUsers::class, 'teams_id', 'id');
}
public function penilaian(){
return $this->hasMany(Penilaian::class, 'teams_id', 'id');
}
}

33
app/Models/TeamsUsers.php Normal file
View File

@@ -0,0 +1,33 @@
<?php
namespace Modules\Lpj\Models;
use Illuminate\Database\Eloquent\Model;
use Modules\Lpj\Database\Factories\TeamsUsersFactory;
use Modules\Usermanagement\Models\User;
use Modules\Lpj\Models\Teams;
class TeamsUsers extends Model
{
/**
* The attributes that are mass assignable.
*/
protected $table = 'teams_users';
protected $fillable = [
'teams_id', 'user_id', 'status', 'authorized_status', 'authorized_at',
'authorized_by', 'created_at', 'created_by', 'updated_at', 'updated_by',
'deleted_at', 'deleted_by'
];
public function team()
{
return $this->belongsTo(Teams::class, 'teams_id', 'id');
}
public function user()
{
return $this->belongsTo(User::class, 'user_id', 'id');
}
}

View File

@@ -0,0 +1,19 @@
<?php
namespace Modules\Lpj\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Modules\Lpj\Database\Factories\TujuanPenilaianKJPPFactory;
class TujuanPenilaianKJPP extends Model
{
use HasFactory;
protected $table = 'tujuan_penilaian_kjpp';
/**
* The attributes that are mass assignable.
*/
protected $fillable = ['code', 'name'];
}

View File

@@ -0,0 +1,25 @@
<?php
namespace Modules\Lpj\Rules;
use Closure;
use Illuminate\Contracts\Validation\ValidationRule;
use Modules\Lpj\Models\Debiture;
class UniqueCifExceptZero implements ValidationRule
{
public function __construct($id = null)
{
$this->id = $id;
}
public function validate($attribute, $value, $fail): void
{
if (Debiture::where($attribute, $value)
->where('id', '!=', $this->id)
->where($attribute, '!=', '000000')
->exists()) {
$fail('The :attribute field must be uniquse.'.$this->id);
}
}
}

View File

@@ -0,0 +1,38 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
use Modules\Lpj\Models\DokumenJaminan;
use Modules\Lpj\Models\Permohonan;
return new class extends Migration {
/**
* Run the migrations.
*/
public function up()
: void
{
Schema::create('permohonan_jaminan', function (Blueprint $table) {
$table->id();
$table->foreignIdFor(Permohonan::class)->constrained('permohonan');
$table->foreignIdFor(DokumenJaminan::class)->constrained('dokumen_jaminan');
$table->boolean('status')->default(true)->nullable();
$table->timestamps();
$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('permohonan_jaminan');
}
};

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

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_jaminan', function (Blueprint $table) {
$table->string('slug')->after('name');
$table->string('jenis_legalitas_jaminan_id')->nullable()->after('slug');
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::table('jenis_jaminan', function (Blueprint $table) {
$table->dropColumn('slug');
$table->dropColumn('jenis_legalitas_jaminan_id');
});
}
};

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('regions', function (Blueprint $table) {
$table->id();
$table->string('code')->unique()->index();
$table->string('name');
$table->char('status')->nullable();
$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('regions');
}
};

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('jenis_penilaian', function (Blueprint $table) {
$table->id();
$table->string('code')->unique()->index();
$table->string('name');
$table->char('status')->nullable();
$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('jenis_penilaian');
}
};

View File

@@ -18,20 +18,16 @@ use Illuminate\Support\Facades\Schema;
{
Schema::create('dokumen_jaminan', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->foreignIdFor(Debiture::class)->constrained('debitures')->onDelete('cascade');
$table->foreignIdFor(Permohonan::class)->nullable()->constrained('permohonan')->onDelete('cascade');
$table->foreignIdFor(JenisJaminan::class)->constrained('jenis_jaminan')->onDelete('cascade');
$table->foreignIdFor(PemilikJaminan::class)->constrained('pemilik_jaminan')->onDelete('cascade');
$table->foreignIdFor(JenisLegalitasJaminan::class)->constrained('jenis_legalitas_jaminan')->onDelete('cascade');
$table->string('province_code')->nullable()->index();
$table->string('city_code')->nullable()->index();
$table->string('district_code')->nullable()->index();
$table->string('village_code')->nullable()->index();
$table->string('postal_code', 5)->nullable();
$table->text('address')->nullable();
$table->string('dokumen_jaminan')->nullable();
$table->string('keterangan')->nullable();
$table->boolean('status')->default(true)->nullable();
$table->timestamps();

View File

@@ -0,0 +1,41 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
use Modules\Lpj\Models\Regions;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('teams', function (Blueprint $table) {
$table->id();
$table->foreignIdFor(Regions::class)->constrained()->onDelete('cascade');
$table->string('code')->unique()->index();
$table->string('name');
$table->char('status')->nullable();
$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('teams');
}
};

View File

@@ -0,0 +1,39 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
use Modules\Lpj\Models\Teams;
use Modules\Lpj\Models\Users;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('teams_users', function (Blueprint $table) {
$table->id();
$table->foreignIdFor(Teams::class)->constrained()->onDelete('cascade');
$table->unsignedBigInteger('user_id');
$table->boolean('status')->default(true)->nullable();
$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('teams_users');
}
};

View File

@@ -0,0 +1,44 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
use Modules\Lpj\Models\DokumenJaminan;
use Modules\Lpj\Models\JenisLegalitasJaminan;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('detail_dokumen_jaminan', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->foreignIdFor(DokumenJaminan::class)->constrained('dokumen_jaminan')->onDelete('cascade');
$table->foreignIdFor(JenisLegalitasJaminan::class)->constrained('jenis_legalitas_jaminan')->onDelete('cascade');
$table->string('dokumen_jaminan')->nullable();
$table->string('keterangan')->nullable();
$table->boolean('status')->default(true)->nullable();
$table->timestamps();
$table->timestamp('authorized_at')->nullable();
$table->char('authorized_status', 1)->nullable();
$table->softDeletes();
$table->unsignedBigInteger('created_by')->nullable();
$table->unsignedBigInteger('updated_by')->nullable();
$table->unsignedBigInteger('deleted_by')->nullable();
$table->unsignedBigInteger('authorized_by')->nullable();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('detail_dokumen_jaminan');
}
};

View File

@@ -0,0 +1,43 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
use Modules\Lpj\Models\JenisPenilaian;
use Modules\Lpj\Models\Teams;
use Modules\Lpj\Models\Permohonan;
return new class () extends Migration {
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('penilaian', function (Blueprint $table) {
$table->id();
$table->foreignIdFor(JenisPenilaian::class);
$table->foreignIdFor(Teams::class);
$table->datetime('tanggal_kunjungan');
$table->text('keterangan')->nullable();
$table->string('status')->nullable();
$table->unsignedBigInteger('user_id');
$table->timestamps();
$table->char('authorized_status', 1)->nullable();
$table->timestamp('authorized_at')->nullable();
$table->softDeletes();
$table->unsignedBigInteger('created_by')->nullable();
$table->unsignedBigInteger('updated_by')->nullable();
$table->unsignedBigInteger('deleted_by')->nullable();
$table->unsignedBigInteger('authorized_by')->nullable();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('penilaian');
}
};

View File

@@ -0,0 +1,33 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
use Modules\Lpj\Models\JenisFasilitasKredit;
use Modules\Lpj\Models\NilaiPlafond;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::table('permohonan', function (Blueprint $table) {
$table->foreignIdFor(JenisFasilitasKredit::class)->nullable()->onDelete('cascade');
$table->foreignIdFor(NilaiPlafond::class)->nullable()->onDelete('cascade');
$table->string('status')->default('order')->change();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::table('permohonan', function (Blueprint $table) {
$table->dropForeign(['fasilitas_kredit_id']);
$table->dropForeign(['nilai_plafond_id']);
});
}
};

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

View File

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

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('permohonan', function (Blueprint $table) {
$table->enum('status_bayar',['sudah_bayar','belum_bayar'])->default('sudah_bayar');
$table->string('nilai_njop')->nullable();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::table('permohonan', function (Blueprint $table) {
$table->dropColumn('status_bayar');
$table->dropColumn('nilai_njop');
});
}
};

View File

@@ -0,0 +1,29 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class () extends Migration {
/**
* Run the migrations.
*/
public function up(): void
{
Schema::table('permohonan', function (Blueprint $table) {
$table->string('dokumen')->nullable()->after('status');
$table->string('keterangan')->nullable()->after('dokumen');
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::table('permohonan', function (Blueprint $table) {
$table->dropColumn('dokumen');
$table->dropColumn('keterangan');
});
}
};

View File

@@ -0,0 +1,37 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
use Modules\Lpj\Models\Permohonan;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::table('penilaian', function (Blueprint $table) {
$table->dropColumn('user_id');
$table->string('nomor_registrasi')->references('nomor_registrasi')->on(Permohonan::class)->onDelete('cascade');
$table->unsignedBigInteger('penilaian_id')->unsigned()->nullable();
$table->unsignedBigInteger('surveyor_id')->unsigned()->nullable();
$table->unsignedBigInteger('penilai_surveyor_id')->unsigned()->nullable();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::table('penilaian', function (Blueprint $table) {
$table->unsignedBigInteger('user_id')->unsigned();
$table->dropColumn('nomor_registrasi');
$table->dropColumn('penilaian_id');
$table->dropColumn('surveyor_id');
$table->dropColumn('penilai_surveyor_id');
});
}
};

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

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

View File

@@ -0,0 +1,44 @@
<?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('penawaran', function (Blueprint $table) {
$table->id();
$table->string('code');
$table->string('nama_kjpp_sebelumnya');
$table->string('biaya_kjpp_sebelumnya');
$table->datetime('tanggal_penilaian_sebelumnya');
$table->string('nomor_registrasi');
$table->foreignId('tujuan_penilaian_kjpp_id')->constrained('tujuan_penilaian_kjpp');
$table->foreignId('jenis_laporan_id')->constrained('jenis_laporan');
$table->date('start_date');
$table->date('end_date');
$table->text('catatan');
$table->boolean('status')->default(true)->nullable();
$table->char('authorized_status', 1)->nullable();
$table->timestamp('authorized_at')->nullable();
$table->unsignedBigInteger('authorized_by')->nullable();
$table->timestamps();
$table->softDeletes();
$table->unsignedBigInteger('deleted_by')->nullable();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('penawaran');
}
};

View File

@@ -0,0 +1,43 @@
<?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('persetujuan_penawaran', function (Blueprint $table) {
$table->id();
$table->foreignId('penawaran_id')->constrained('penawaran');
$table->string('nomor_proposal_penawaran');
$table->date('tanggal_proposal_penawaran');
$table->string('biaya_final');
$table->datetime('sls_resume');
$table->datetime('sla_final');
$table->string('catatan');
$table->string('attachment');
$table->foreignId('region_id')->constrained('regions');
$table->boolean('status')->default(true)->nullable();
$table->char('authorized_status', 1)->nullable();
$table->timestamp('authorized_at')->nullable();
$table->unsignedBigInteger('authorized_by')->nullable();
$table->timestamps();
$table->softDeletes();
$table->unsignedBigInteger('deleted_by')->nullable();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('persetujuan_penawaran');
}
};

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('detail_penawaran', function (Blueprint $table) {
$table->id();
$table->foreignId('kjpp_rekanan_id')->constrained('kjpp');
$table->foreignId('penawaran_id')->constrained('penawaran');
$table->string('biaya_penawaran');
$table->string('attachment');
$table->string('dokumen_persetujuan');
$table->boolean('status')->default(true)->nullable();
$table->char('authorized_status', 1)->nullable();
$table->timestamp('authorized_at')->nullable();
$table->unsignedBigInteger('authorized_by')->nullable();
$table->timestamps();
$table->softDeletes();
$table->unsignedBigInteger('deleted_by')->nullable();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('detail_penawaran');
}
};

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('kjpp', function (Blueprint $table) {
$table->string('ijin_usaha_id')->change();
$table->string('jenis_aset_id')->change();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::table('kjpp', function (Blueprint $table) {
$table->string('ijin_usaha_id')->nullable()->change();
$table->string('jenis_aset_id')->nullable()->change();
});
}
};

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('penawaran', function (Blueprint $table) {
$table->char('status')->change();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::table('penawaran', function (Blueprint $table) {
$table->boolean('status')->default(true)->nullable();
});
}
};

View File

@@ -5,8 +5,90 @@
"description": "",
"keywords": [],
"priority": 0,
"providers": [
"Modules\\Lpj\\Providers\\LpjServiceProvider"
"providers": ["Modules\\Lpj\\Providers\\LpjServiceProvider"],
"files": [],
"menu": {
"main": [
{
"title": "Permohonan",
"path": "permohonan",
"icon": "ki-filled ki-questionnaire-tablet text-lg",
"classes": "",
"attributes": [],
"permission": "",
"roles": ["administrator"]
},
{
"title": "Tender",
"path": "tender",
"icon": "ki-filled ki-category text-lg",
"classes": "",
"attributes": [],
"permission": "",
"roles": ["administrator"],
"sub": [
{
"title": "Data Penawaran",
"path": "tender.penawaran",
"classes": "",
"attributes": [],
"permission": "",
"roles": []
},
{
"title": "Data Proses Penawaran",
"path": "tender.proses_penawaran",
"classes": "",
"attributes": [],
"permission": "",
"roles": []
},
{
"title": "Data Penawaran Ulang",
"path": "tender.penawaran_ulang",
"classes": "",
"attributes": [],
"permission": "",
"roles": []
}
]
},
{
"title": "Pembatalan",
"path": "",
"icon": "ki-filled ki-file-deleted text-lg",
"classes": "",
"attributes": [],
"permission": "",
"roles": ["administrator"]
},
{
"title": "Data Debitur",
"path": "debitur",
"icon": "ki-filled ki-people text-lg",
"classes": "",
"attributes": [],
"permission": "",
"roles": ["administrator"]
},
{
"title": "Authorization",
"path": "authorization",
"icon": "ki-filled ki-some-files text-lg",
"classes": "",
"attributes": [],
"permission": "",
"roles": ["administrator"]
},
{
"title": "Laporan",
"path": "",
"icon": "ki-filled ki-some-files text-lg",
"classes": "",
"attributes": [],
"permission": "",
"roles": ["administrator"]
}
],
"files": [],
"menu": {
@@ -19,7 +101,44 @@
"attributes": [],
"permission": "",
"roles": [
"Administrator"
"administrator"
]
},
{
"title": "Tender",
"path": "tender",
"icon": "ki-filled ki-category text-lg",
"classes": "",
"attributes": [],
"permission": "",
"roles": [
"administrator"
],
"sub": [
{
"title": "Data Penawaran",
"path": "tender.penawaran",
"classes": "",
"attributes": [],
"permission": "",
"roles": []
},
{
"title": "Data Proses Penawaran",
"path": "tender.proses_penawaran",
"classes": "",
"attributes": [],
"permission": "",
"roles": []
},
{
"title": "Data Penawaran Ulang",
"path": "tender.penawaran_ulang",
"classes": "",
"attributes": [],
"permission": "",
"roles": []
}
]
},
{
@@ -30,7 +149,7 @@
"attributes": [],
"permission": "",
"roles": [
"Administrator"
"administrator"
]
},
{
@@ -53,13 +172,24 @@
"classes": "",
"attributes": [],
"permission": "",
"roles": [
"administrator"
]
},
{
"title": "Assignment",
"path": "penilaian",
"icon": "ki-filled ki-badge",
"classes": "",
"attributes": [],
"permission": "",
"roles": [
"Administrator"
]
},
{
"title": "Authorization",
"path": "authorization",
"title": "Activity",
"path": "activity",
"icon": "ki-filled ki-some-files text-lg",
"classes": "",
"attributes": [],
@@ -76,7 +206,7 @@
"attributes": [],
"permission": "",
"roles": [
"Administrator"
"administrator"
]
}
],
@@ -116,14 +246,6 @@
"permission": "",
"roles": []
},
{
"title": "Jenis Jaminan",
"path": "basicdata.jenis-jaminan",
"classes": "",
"attributes": [],
"permission": "",
"roles": []
},
{
"title": "Jenis Legalitas Jaminan",
"path": "basicdata.jenis-legalitas-jaminan",
@@ -134,7 +256,7 @@
},
{
"title": "Jenis Aset",
"path": "basicdata.jenis-aset",
"path": "basicdata.jenis-jaminan",
"classes": "",
"attributes": [],
"permission": "",
@@ -195,6 +317,46 @@
"attributes": [],
"permission": "",
"roles": []
},
{
"title": "Region",
"path": "basicdata.region",
"classes": "",
"attributes": [],
"permission": "",
"roles": []
},
{
"title": "Staff Appraisal",
"path": "basicdata.teams",
"classes": "",
"attributes": [],
"permission": "",
"roles": []
},
{
"title": "Jenis Penilaian",
"path": "basicdata.jenis-penilaian",
"classes": "",
"attributes": [],
"permission": "",
"roles": []
},
{
"title": "KJPP",
"path": "basicdata.kjpp",
"classes": "",
"attributes": [],
"permission": "",
"roles": []
},
{
"title": "Ijin Usaha",
"path": "basicdata.ijin_usaha",
"classes": "",
"attributes": [],
"permission": "",
"roles": []
}
]
}
@@ -202,3 +364,4 @@
"system": []
}
}
}

View File

@@ -0,0 +1,77 @@
@extends('layouts.main')
@section('breadcrumbs')
{{ Breadcrumbs::render(request()->route()->getName()) }}
@endsection
@section('content')
<div class="w-full grid gap-5 lg:gap-7.5 mx-auto">
@if (isset($ijin_usaha->id))
<form action="{{ route('basicdata.ijin_usaha.update', $ijin_usaha->id) }}" method="POST">
<input type="hidden" name="id" value="{{ $ijin_usaha->id }}">
@method('PUT')
@else
<form method="POST" action="{{ route('basicdata.ijin_usaha.store') }}">
@endif
@csrf
<div class="card pb-2.5">
<div class="card-header" id="basic_settings">
<h3 class="card-title">
{{ isset($ijin_usaha->id) ? 'Edit' : 'Tambah' }} Ijin Usaha
</h3>
<div class="flex items-center gap-2">
<a href="{{ route('basicdata.ijin_usaha.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($ijin_usaha->id))
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Kode Ijin Usaha
</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="{{ $ijin_usaha->code ?? old('code') }}">
@error('code')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
</div>
</div>
@else
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Kode Ijin Usaha
</label>
<div class="flex flex-wrap items-baseline w-full">
<input class="input @error('code') border-danger bg-danger-light @enderror" type="text"
name="code" value="{{ $ijin_usaha->code ?? old('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">
Nama Ijin Usaha
</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="{{ $ijin_usaha->name ?? old('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>
</div>
@endsection

View File

@@ -0,0 +1,152 @@
@extends('layouts.main')
@section('breadcrumbs')
{{ Breadcrumbs::render('basicdata.ijin_usaha') }}
@endsection
@section('content')
<div class="grid">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="5"
data-datatable-state-save="false" id="ijin-table" data-api-url="{{ route('basicdata.ijin_usaha.datatables') }}">
<div class="card-header py-5 flex-wrap">
<h3 class="card-title">
Ijin Usaha
</h3>
<div class="flex flex-wrap gap-2 lg:gap-5">
<div class="flex">
<label class="input input-sm"> <i class="ki-filled ki-magnifier"> </i>
<input placeholder="Search Ijin Usaha" id="search" type="text" value="">
</label>
</div>
<div class="flex flex-wrap gap-2.5">
<div class="h-[24px] border border-r-gray-200"></div>
<a class="btn btn-sm btn-light" href="{{ route('basicdata.ijin_usaha.export') }}"> Export to Excel
</a>
<a class="btn btn-sm btn-primary" href="{{ route('basicdata.ijin_usaha.create') }}"> Tambah Ijin
Usaha
</a>
</div>
</div>
</div>
<div class="card-body">
<div class="scrollable-x-auto">
<table class="table table-auto table-border align-middle text-gray-700 font-medium text-sm"
data-datatable-table="true">
<thead>
<tr>
<th class="w-14">
<input class="checkbox checkbox-sm" data-datatable-check="true" type="checkbox" />
</th>
<th class="min-w-[250px]" data-datatable-column="code">
<span class="sort"> <span class="sort-label"> Kode Ijin Usaha </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[250px]" data-datatable-column="name">
<span class="sort"> <span class="sort-label"> Nama Ijin Usaha </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[50px] text-center" data-datatable-column="actions">Action</th>
</tr>
</thead>
</table>
</div>
<div
class="card-footer justify-center md:justify-between flex-col md:flex-row gap-3 text-gray-600 text-2sm font-medium">
<div class="flex items-center gap-2">
Show
<select class="select select-sm w-16" data-datatable-size="true" name="perpage"> </select> per page
</div>
<div class="flex items-center gap-4">
<span data-datatable-info="true"> </span>
<div class="pagination" data-datatable-pagination="true">
</div>
</div>
</div>
</div>
</div>
</div>
@endsection
@push('scripts')
<script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script>
<script type="text/javascript">
function deleteData(data) {
Swal.fire({
title: 'Are you sure?',
text: "You won't be able to revert this!",
icon: 'warning',
showCancelButton: true,
confirmButtonColor: '#3085d6',
cancelButtonColor: '#d33',
confirmButtonText: 'Yes, delete it!'
}).then((result) => {
if (result.isConfirmed) {
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': '{{ csrf_token() }}'
}
});
$.ajax(`basic-data/ijin_usaha/${data}`, {
type: 'DELETE'
}).then((response) => {
swal.fire('Deleted!', 'Ijin Usaha has been deleted.', 'success').then(() => {
window.location.reload();
});
}).catch((error) => {
console.error('Error:', error);
Swal.fire('Error!', 'An error occurred while deleting the file.', 'error');
});
}
})
}
</script>
<script type="module">
const element = document.querySelector('#ijin-table');
const searchInput = document.getElementById('search');
const apiUrl = element.getAttribute('data-api-url');
const dataTableOptions = {
apiEndpoint: apiUrl,
pageSize: 5,
columns: {
select: {
render: (item, data, context) => {
const checkbox = document.createElement('input');
checkbox.className = 'checkbox checkbox-sm';
checkbox.type = 'checkbox';
checkbox.value = data.id.toString();
checkbox.setAttribute('data-datatable-row-check', 'true');
return checkbox.outerHTML.trim();
},
},
code: {
title: 'Kode Ijin Usaha',
},
name: {
title: 'Nama Ijin Usaha',
},
actions: {
title: 'Status',
render: (item, data) => {
return `<div class="flex flex-nowrap justify-center">
<a class="btn btn-sm btn-icon btn-clear btn-info" href="basic-data/ijin_usaha/${data.id}/edit">
<i class="ki-outline ki-notepad-edit"></i>
</a>
<a onclick="deleteData(${data.id})" class="delete btn btn-sm btn-icon btn-clear btn-danger">
<i class="ki-outline ki-trash"></i>
</a>
</div>`;
},
}
},
};
let dataTable = new KTDataTable(element, dataTableOptions);
// Custom search functionality
searchInput.addEventListener('input', function() {
const searchValue = this.value.trim();
dataTable.search(searchValue, true);
});
</script>
@endpush

View File

@@ -0,0 +1,120 @@
@extends('layouts.main')
@section('breadcrumbs')
{{ Breadcrumbs::render(request()->route()->getName()) }}
@endsection
@section('content')
@push('styles')
<style>
.border-l-primary {
border-left-color: #0d6efd !important;
}
</style>
@endpush
<div class="w-full grid gap-5 lg:gap-7.5 mx-auto">
<div class="card">
<div class="card-header" id="advanced_settings_appearance">
<h3 class="card-title">
Activity Permohonan
</h3>
<div class="flex items-center gap-2">
<a href="{{ route('activity.index') }}" class="btn btn-xs btn-info"><i class="ki-filled ki-exit-left"></i>
Back</a>
</div>
</div>
<div class="card-body lg:py-7.5 grid grid-cols-3">
<div class="mb-5">
<h3 class="text-md font-medium text-gray-900">
Nomor Register Permohonan:
</h3>
<span class="text-2sm text-gray-700">
{{ $permohonan->nomor_registrasi }}
</span>
</div>
<div class="mb-5">
<h3 class="text-md font-medium text-gray-900">
Pemohon:
</h3>
<span class="text-2sm text-gray-700">
{{ $permohonan->user->nik }} | {{ $permohonan->user->name }} | {{ $permohonan->user->branch->name }}
</span>
</div>
<div class="mb-5">
<h3 class="text-md font-medium text-gray-900">
Tujan Permohonan:
</h3>
<span class="text-2sm text-gray-700">
{{ $permohonan->tujuanPenilaian->name }}
</span>
</div>
</div>
</div>
<div class="card grow" id="activity_2024">
<div class="card-header">
<h3 class="text-md font-medium text-gray-900">
Status Activity
</h3>
</div>
<div class="card-body">
<div class="flex flex-col">
@foreach ($status_permohonan as $index => $status)
{{-- Cek apakah status adalah "Revisi" dan status permohonan tidak sama, maka tidak ditampilkan --}}
@if (strtolower($status->name) == 'revisi' && strtolower($status->name) != strtolower($permohonan->status))
@continue
@endif
<div class="flex items-start relative">
@if ($index < count($status_permohonan) - 1)
<div
class="w-9 left-0 top-9 absolute bottom-0 translate-x-1/2
{{ strtolower($status->name) == strtolower($permohonan->status) ? 'border-l border-l-primary' : 'border-l border-l-gray-300' }}">
</div>
@endif
<div
class="flex items-center justify-center shrink-0 rounded-full
{{ strtolower($status->name) == strtolower($permohonan->status) ? ' btn-outline btn-primary' : 'bg-gray-100 border-gray-300 text-gray-600' }}
size-9">
@switch(strtolower($status->name))
@case('order')
<i class="ki-filled ki-handcart text-base"></i>
@break
@case('revisi')
<i class="ki-filled ki-notepad-edit text-base"></i>
@break
@case('register')
<i class="ki-filled ki-note-2 text-base"></i>
@break
@case('assign')
<i class="ki-filled ki-file-added"></i>
@break
@case('survey')
<i class="ki-filled ki-map text-base"></i>
@break
@default
<i class="ki-filled ki-people text-base"></i>
@endswitch
</div>
@include('lpj::activity.components.status')
</div>
@endforeach
</div>
</div>
<div class="card-footer justify-center">
</div>
</div>
</div>
@endsection

View File

@@ -0,0 +1,94 @@
<div class="pl-2.5 mb-7 text-md grow">
<div class="flex flex-col">
<div class="text-sm text-gray-800">
{{ $status->name . ' ' . $status->description }}
</div>
<span class="text-xs text-gray-600">
@if (strtolower($status->name) == 'order')
{{ $permohonan->created_at }}
@elseif (strtolower($status->name) == strtolower($permohonan->status))
{{ $permohonan->updated_at }}
@endif
</span>
</div>
@php
$isCurrentStatus = strtolower($status->name) == strtolower($permohonan->status);
$hasKeterangan = isset($permohonan->keterangan);
@endphp
{{-- Tampilkan keterangan jika status 'register' --}}
@if (strtolower($status->name) == 'register' && $hasKeterangan && $isCurrentStatus)
<div class="card shadow-none">
<div class="card-body">
<p class="text-xs text-gray-800 leading-[22px]">
{{ $permohonan->keterangan }}
</p>
</div>
</div>
@endif
{{-- Tampilkan dokumen dan keterangan jika status 'revisi' --}}
@if (strtolower($status->name) == 'revisi' && $hasKeterangan)
<div class="card shadow-none">
<div class="card-body">
<a href="{{ route('activity.download', $permohonan->id) }}" class="badge badge-sm badge-outline">
{{ basename($permohonan->dokumen) }}
<i class="ki-filled ki-cloud-download"></i>
</a>
<p class="text-xs text-gray-800 leading-[22px]">
{{ $permohonan->keterangan }}
</p>
</div>
</div>
@endif
{{-- Tampilkan informasi assign jika status 'assign' --}}
@if (strtolower($status->name) == 'assign' && $isCurrentStatus)
<div class="card shadow-none">
<div class="card-body grid grid-cols-3 gap-5">
{{-- Informasi Penilai, Surveyor, dan Penilai Surveyor --}}
<div>
@isset($permohonan->penilaian)
@if ($penilai = $permohonan->penilaian->userPenilai->name ?? null)
<div class="mb-3">
<p class="text-md font-medium text-gray-900">Penilai:</p>
<span class="text-2sm text-gray-700">{{ $penilai }}</span>
</div>
@endif
@if ($surveyor = $permohonan->penilaian->userSurveyor->name ?? null)
<div class="mb-3">
<p class="text-md font-medium text-gray-900">Surveyor:</p>
<span class="text-2sm text-gray-700">{{ $surveyor }}</span>
</div>
@endif
@if ($penilaiSurveyor = $permohonan->penilaian->userPenilaiSurveyor->name ?? null)
<div class="mb-3">
<p class="text-md font-medium text-gray-900">Penilai Surveyor:</p>
<span class="text-2sm text-gray-700">{{ $penilaiSurveyor }}</span>
</div>
@endif
@endisset
</div>
{{-- Teams --}}
<div>
<h3 class="text-md font-medium text-gray-900">Teams:</h3>
<ul>
@foreach ($permohonan->penilaian->teams->teamsUsers as $item)
<li class="text-xs text-gray-800 leading-[22px]">{{ $item->user->name }}</li>
@endforeach
</ul>
</div>
{{-- Catatan --}}
<div>
<h3 class="text-md font-medium text-gray-900">Catatan:</h3>
<span class="text-2sm text-gray-700">{{ $permohonan->penilaian->keterangan }}</span>
</div>
</div>
</div>
@endif
</div>

View File

@@ -0,0 +1,211 @@
@extends('layouts.main')
@section('breadcrumbs')
{{ Breadcrumbs::render('activity') }}
@endsection
@section('content')
<div class="w-full grid gap-5 lg:gap-7.5 mx-auto">
<div class="card pb-2.5">
<div class="card-header" id="basic_settings">
<div class="card-title flex flex-row gap-1.5">
Activity
</div>
<div class="card-header py-5 flex-wrap">
<h3 class="card-title">
{{-- Daftar {{}} --}}
</h3>
<div class="flex flex-wrap gap-2 lg:gap-5">
<div class="flex">
<label class="input input-sm">
<i class="ki-filled ki-magnifier"></i>
<input placeholder="Search Penilaian" id="search" type="text" value="">
</label>
</div>
<div class="flex">
<select class="select select-sm w-28" name="select" id="status-filter">
<option value="">Pilih Status</option>
@foreach ($status_permohonan as $item)
<option value="{{ strtolower($item->name) }}">{{ $item->name }}</option>
@endforeach
</select>
</div>
<div class="flex flex-wrap gap-2.5">
<div class="h-[24px] border border-r-gray-200"></div>
<a class="btn btn-sm btn-light" href="{{ route('activity.export') }}"> Export to Excel </a>
</div>
</div>
</div>
</div>
<div class="card-grid min-w-full" data-datatable="false" data-datatable-page-size="5"
data-datatable-state-save="false" id="permohonan-table" data-api-url="{{ route('activity.datatables') }}">
<div class="card-body">
<div class="scrollable-x-auto">
<table class="table table-auto table-border align-middle text-gray-700 font-medium text-sm"
data-datatable-table="true">
<thead>
<tr>
<th class="w-14">
<input class="checkbox checkbox-sm" data-datatable-check="true" type="checkbox" />
</th>
<th class="min-w-[150px]" data-datatable-column="nomor_registrasi">
<span class="sort"><span class="sort-label">Nomor Registrasi</span>
<span class="sort-icon"></span>
</span>
</th>
<th class="min-w-[150px]" data-datatable-column="tanggal_permohonan">
<span class="sort"><span class="sort-label">Tanggal Permohonan</span>
<span class="sort-icon"></span>
</span>
</th>
<th class="min-w-[150px]" data-datatable-column="user_id">
<span class="sort"><span class="sort-label">User Pemohon</span>
<span class="sort-icon"></span>
</span>
</th>
<th class="min-w-[150px]" data-datatable-column="branch_id">
<span class="sort"><span class="sort-label">Cabang Pemohon</span>
<span class="sort-icon"></span>
</span>
</th>
<th class="min-w-[150px]" data-datatable-column="debitur_id">
<span class="sort"><span class="sort-label">Debitur</span>
<span class="sort-icon"></span>
</span>
</th>
<th class="min-w-[150px]" data-datatable-column="tujuan_penilaian_id">
<span class="sort"><span class="sort-label">Tujuan Penilaian</span>
<span class="sort-icon"></span>
</span>
</th>
<th class="min-w-[150px]" data-datatable-column="status">
<span class="sort"><span class="sort-label">Status</span>
<span class="sort-icon"></span>
</span>
</th>
<th class="min-w-[50px] text-center" data-datatable-column="actions">Action</th>
</tr>
</thead>
</table>
</div>
<div
class="card-footer justify-center md:justify-between flex-col md:flex-row gap-3 text-gray-600 text-2sm font-medium">
<div class="flex items-center gap-2">
Show
<select class="select select-sm w-16" data-datatable-size="true" name="perpage"> </select> per
page
</div>
<div class="flex items-center gap-4">
<span data-datatable-info="true"></span>
<div class="pagination" data-datatable-pagination="true"></div>
</div>
</div>
</div>
</div>
</div>
</div>
@endsection
@push('scripts')
<script type="module">
const element = document.querySelector('#permohonan-table');
const searchInput = document.getElementById('search');
const statusFilter = document.getElementById('status-filter'); // Dropdown filter element
const apiUrl = element.getAttribute('data-api-url');
const dataTableOptions = {
apiEndpoint: apiUrl,
pageSize: 5,
order: [{
column: 'nomor_registrasi',
dir: 'asc'
} // Default order by 'nomor_registrasi' ascending
],
columns: {
select: {
render: (item, data, context) => {
const checkbox = document.createElement('input');
checkbox.className = 'checkbox checkbox-sm';
checkbox.type = 'checkbox';
checkbox.value = data.id.toString();
checkbox.setAttribute('data-datatable-row-check', 'true');
return checkbox.outerHTML.trim();
},
},
nomor_registrasi: {
title: 'Nomor Registrasi',
},
tanggal_permohonan: {
title: 'Tanggal Permohonan'
},
user_id: {
title: 'User Pemohon',
render: (item, data) => `${data.user.name}`,
},
branch_id: {
title: 'Cabang Pemohon',
render: (item, data) => `${data.branch.name}`,
},
debitur_id: {
title: 'Debitur',
render: (item, data) => `${data.debiture.name}`,
},
tujuan_penilaian_id: {
title: 'Tujuan Penilaian',
render: (item, data) => `${data.tujuan_penilaian.name}`,
},
status: {
title: 'Status',
render: (item, data) => {
let badgeClass = '';
switch (data.status.toLowerCase()) {
case 'revisi':
badgeClass = 'badge badge-pill badge-outline badge-warning';
break;
case 'order':
badgeClass = 'badge badge-pill badge-outline badge-info';
break;
case 'register':
badgeClass = 'badge badge-pill badge-outline badge-success';
break;
case 'survey':
badgeClass = 'badge badge-pill badge-outline badge-primary';
break;
case 'assign':
badgeClass = 'badge badge-pill badge-outline badge-dark';
break;
default:
badgeClass = 'badge badge-pill badge-outline';
}
return `<span class="badge ${badgeClass}">${data.status}</span>`;
},
},
actions: {
title: 'Action',
render: (item, data) => `
<div class="flex flex-nowrap justify-center">
<a class="btn btn-sm btn-icon btn-clear btn-warning" href="activity/${data.id}/show">
<i class="ki-outline ki-eye"></i>
</a>
</div>`,
}
},
};
let dataTable = new KTDataTable(element, dataTableOptions);
searchInput.addEventListener('input', function() {
const searchValue = this.value.trim();
dataTable.search(searchValue, true);
});
statusFilter.addEventListener('change', function() {
const selectedStatus = this.value;
dataTable.search(selectedStatus);
});
</script>
@endpush

View File

@@ -29,7 +29,7 @@
Name
</label>
<div class="flex flex-wrap items-baseline w-full">
<input class="input @error('name') border-danger @enderror" type="text" name="name" value="{{ $arahMataAngin->name ?? '' }}">
<input class="input @error('name') border-danger bg-danger-light @enderror" type="text" name="name" value="{{ $arahMataAngin->name ?? '' }}">
@error('name')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror

View File

@@ -29,7 +29,7 @@
Code
</label>
<div class="flex flex-wrap items-baseline w-full">
<input class="input @error('code') border-danger @enderror" type="text" name="code" value="{{ $branch->code ?? '' }}">
<input class="input @error('code') border-danger bg-danger-light @enderror" type="text" name="code" value="{{ $branch->code ?? '' }}">
@error('code')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
@@ -40,7 +40,7 @@
Name
</label>
<div class="flex flex-wrap items-baseline w-full">
<input class="input @error('name') border-danger @enderror" type="text" name="name" value="{{ $branch->name ?? '' }}">
<input class="input @error('name') border-danger bg-danger-light @enderror" type="text" name="name" value="{{ $branch->name ?? '' }}">
@error('name')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror

View File

@@ -29,7 +29,7 @@
Code
</label>
<div class="flex flex-wrap items-baseline w-full">
<input class="input @error('code') border-danger @enderror" type="text" name="code" value="{{ $currency->code ?? '' }}">
<input class="input @error('code') border-danger bg-danger-light @enderror" type="text" name="code" value="{{ $currency->code ?? '' }}">
@error('code')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
@@ -40,7 +40,7 @@
Name
</label>
<div class="flex flex-wrap items-baseline w-full">
<input class="input @error('name') border-danger @enderror" type="text" name="name" value="{{ $currency->name ?? '' }}">
<input class="input @error('name') border-danger bg-danger-light @enderror" type="text" name="name" value="{{ $currency->name ?? '' }}">
@error('name')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
@@ -51,7 +51,7 @@
Decimal Places
</label>
<div class="flex flex-wrap items-baseline w-full">
<input class="input @error('decimal_places') border-danger @enderror" type="number" min="0" max="3" name="decimal_places" value="{{ $currency->decimal_places ?? '' }}">
<input class="input @error('decimal_places') border-danger bg-danger-light @enderror" type="number" min="0" max="3" name="decimal_places" value="{{ $currency->decimal_places ?? '' }}">
@error('decimal_places')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror

View File

@@ -1,5 +1,6 @@
<form action="{{ isset($debitur->id) ? route('debitur.update', $debitur->id) : route('debitur.store') }}" method="POST" class="grid gap-5">
@if(isset($debitur->id))
<input type="hidden" name="id" value="{{ $debitur->id }}">
@method('PUT')
@endif
@csrf
@@ -8,7 +9,7 @@
Cabang
</label>
<div class="flex flex-wrap items-baseline w-full">
<select class="input tomselect w-full @error('branch_id') border-danger @enderror" name="branch_id" id="branch_id">
<select class="input tomselect w-full @error('branch_id') border-danger bg-danger-light @enderror" name="branch_id" id="branch_id">
<option value="">Pilih Cabang</option>
@foreach($branches as $branch)
@if(isset($debitur))
@@ -29,7 +30,7 @@
CIF
</label>
<div class="flex flex-wrap items-baseline w-full">
<input class="input @error('cif') border-danger @enderror" type="number" name="cif" value="{{ $debitur->cif ?? '' }}">
<input class="input @error('cif') border-danger bg-danger-light @enderror" type="number" name="cif" value="{{ $debitur->cif ?? '0000000000' }}">
@error('cif')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
@@ -40,7 +41,7 @@
Nomor Rekening
</label>
<div class="flex flex-wrap items-baseline w-full">
<input class="input @error('nomor_rekening') border-danger @enderror" type="number" name="nomor_rekening" value="{{ $debitur->nomor_rekening ?? '' }}">
<input class="input @error('nomor_rekening') border-danger bg-danger-light @enderror" type="number" name="nomor_rekening" value="{{ $debitur->nomor_rekening ?? '' }}">
@error('nomor_rekening')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
@@ -51,7 +52,7 @@
Nama Debitur
</label>
<div class="flex flex-wrap items-baseline w-full">
<input class="input @error('name') border-danger @enderror" type="text" name="name" value="{{ $debitur->name ?? '' }}">
<input class="input @error('name') border-danger bg-danger-light @enderror" type="text" name="name" value="{{ $debitur->name ?? '' }}">
@error('name')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
@@ -62,7 +63,7 @@
NPWP
</label>
<div class="flex flex-wrap items-baseline w-full">
<input class="input @error('npwp') border-danger @enderror" type="number" name="npwp" value="{{ $debitur->npwp ?? '' }}">
<input class="input @error('npwp') border-danger bg-danger-light @enderror" type="number" name="npwp" value="{{ $debitur->npwp ?? '' }}">
@error('npwp')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
@@ -73,7 +74,7 @@
Email
</label>
<div class="flex flex-wrap items-baseline w-full">
<input class="input @error('email') border-danger @enderror" type="email" name="email" value="{{ $debitur->email ?? '' }}">
<input class="input @error('email') border-danger bg-danger-light @enderror" type="email" name="email" value="{{ $debitur->email ?? '' }}">
@error('email')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
@@ -84,7 +85,7 @@
No Handphone
</label>
<div class="flex flex-wrap items-baseline w-full">
<input class="input @error('phone') border-danger @enderror" type="number" name="phone" value="{{ $debitur->phone ?? '' }}">
<input class="input @error('phone') border-danger bg-danger-light @enderror" type="number" name="phone" value="{{ $debitur->phone ?? '' }}">
@error('phone')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
@@ -97,7 +98,7 @@
<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">
<select id="province_code" name="province_code" class="select w-full @error('province_code') border-danger @enderror">
<select id="province_code" name="province_code" class="select w-full @error('province_code') border-danger bg-danger-light @enderror">
<option value="">Select Province</option>
@foreach($provinces as $province)
@if(isset($debitur))
@@ -116,7 +117,7 @@
@enderror
</div>
<div class="flex flex-wrap items-baseline w-full">
<select id="city_code" name="city_code" class="select w-full @error('city_code') border-danger @enderror">
<select id="city_code" name="city_code" class="select w-full @error('city_code') border-danger bg-danger-light @enderror">
<option value="">Select City</option>
@if(isset($cities))
@foreach($cities as $city)
@@ -140,7 +141,7 @@
</div>
<div class="flex flex-col lg:flex-row gap-2 w-full mt-2 lg:mt-5">
<div class="flex flex-wrap items-baseline w-full">
<select id="district_code" name="district_code" class="select w-full @error('district_code') border-danger @enderror">
<select id="district_code" name="district_code" class="select w-full @error('district_code') border-danger bg-danger-light @enderror">
<option value="">Select District</option>
@if(isset($districts))
@foreach($districts as $district)
@@ -162,7 +163,7 @@
@enderror
</div>
<div class="flex flex-wrap items-baseline w-full">
<select id="village_code" name="village_code" class="select w-full @error('district_code') border-danger @enderror">
<select id="village_code" name="village_code" class="select w-full @error('district_code') border-danger bg-danger-light @enderror">
<option value="">Select Village</option>
@if(isset($villages))
@foreach($villages as $village)
@@ -184,14 +185,14 @@
@enderror
</div>
<div class="flex flex-wrap items-baseline w-full">
<input class="input @error('postal_code') border-danger @enderror" type="number" id="postal_code" name="postal_code" value="{{ $debitur->postal_code ?? '' }}" placeholder="Postal Code">
<input class="input @error('postal_code') border-danger bg-danger-light @enderror" type="number" id="postal_code" name="postal_code" value="{{ $debitur->postal_code ?? '' }}" placeholder="Postal Code">
@error('postal_code')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
</div>
</div>
<div class="flex flex-row w-full mt-2 lg:mt-5">
<textarea class="textarea @error('address') border-danger @enderror" rows="3" type="number" id="address" name="address">{{ $debitur->address ?? '' }}</textarea>
<textarea class="textarea @error('address') border-danger bg-danger-light @enderror" rows="3" type="number" id="address" name="address">{{ $debitur->address ?? '' }}</textarea>
@error('address')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror

View File

@@ -19,7 +19,7 @@
</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 @enderror" name="pemilik_jaminan_id" id="pemilik_jaminan_id">
<select 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>
@if(isset($pemilikJaminan))
@@ -56,7 +56,10 @@
Jenis Jaminan
</label>
<div class="flex flex-wrap items-baseline w-full">
<select class="input tomselect w-full @error('branch_id') border-danger @enderror" name="jenis_jaminan_id" id="jenis_jaminan_id">
@if(isset($document->id))
<input type="hidden" name="jenis_jaminan_id" value="{{ $document->jenis_jaminan_id }}">
@endif
<select onchange="getLegalitasJaminan()" class="input tomselect w-full @error('branch_id') border-danger bg-danger-light @enderror" name="jenis_jaminan_id" id="jenis_jaminan_id">
<option value="">Pilih Jenis Jaminan</option>
@foreach($jenisJaminan as $row)
@if(isset($document))
@@ -73,38 +76,23 @@
@enderror
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Jenis Legalitas Jaminan
</label>
<div class="flex flex-wrap items-baseline w-full">
<select class="input tomselect w-full @error('branch_id') border-danger @enderror" name="jenis_legalitas_jaminan_id" id="jenis_legalitas_jaminan_id">
<option value="">Pilih Jenis Legalitas Jaminan</option>
@foreach($jenisLegalitasJaminan as $row)
@if(isset($document))
<option value="{{ $row->id }}" {{ isset($document->jenis_legalitas_jaminan_id) && $document->jenis_legalitas_jaminan_id == $row->id?'selected' : '' }}>
{{ $row->name }}
</option>
@else
<option value="{{ $row->id }}">{{ $row->name }}</option>
@endif
@endforeach
</select>
@error('jenis_legalitas_jaminan_id')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
</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 @error('name') border-danger @enderror" type="text " id="name" name="name" value="{{ $document->name ?? '' }}" placeholder="Nama Dokumen">
@error('name')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
<input class="input " type="text" id="name" name="name[]" value="{{ $detail->name ?? "" }}" placeholder="Nama Dokumen">
</div>
</div>
@@ -113,14 +101,10 @@
Dokumen Jaminan
</label>
<div class="flex flex-wrap items-baseline w-full">
<input class="file-input @error('dokumen_jaminan') border-danger @enderror" type="file" name="dokumen_jaminan" value="">
@if(isset($document->dokumen_jaminan))
<a href="{{ route('debitur.download',$document->id) }}" class="mt-1 badge badge-sm badge-outline">{{ basename($document->dokumen_jaminan) }}
<i class="ki-filled ki-cloud-download"></i></a>
<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>
@endif
@error('dokumen_jaminan')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
</div>
</div>
@@ -129,12 +113,15 @@
Keterangan
</label>
<div class="flex flex-wrap items-baseline w-full">
<textarea class="textarea @error('keterangan') border-danger @enderror" rows="3" type="number" name="keterangan"> {{ $document->keterangan ?? '' }}</textarea>
@error('keterangan')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
<textarea class="textarea" rows="3" type="number" name="keterangan[]">{{ $detail->keterangan ?? "" }}</textarea>
</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">
@@ -143,7 +130,7 @@
<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">
<select id="province_code" name="province_code" class="select w-full @error('province_code') border-danger @enderror">
<select id="province_code" name="province_code" class="select w-full @error('province_code') border-danger bg-danger-light @enderror">
<option value="">Select Province</option>
@foreach($provinces as $province)
@if(isset($document))
@@ -155,6 +142,7 @@
{{ $province->name }}
</option>
@endif
;
@endforeach
</select>
@error('province_code')
@@ -162,7 +150,7 @@
@enderror
</div>
<div class="flex flex-wrap items-baseline w-full">
<select id="city_code" name="city_code" class="select w-full @error('city_code') border-danger @enderror">
<select id="city_code" name="city_code" class="select w-full @error('city_code') border-danger bg-danger-light @enderror">
<option value="">Select City</option>
@if(isset($cities))
@foreach($cities as $city)
@@ -186,7 +174,7 @@
</div>
<div class="flex flex-col lg:flex-row gap-2 w-full mt-2 lg:mt-5">
<div class="flex flex-wrap items-baseline w-full">
<select id="district_code" name="district_code" class="select w-full @error('district_code') border-danger @enderror">
<select id="district_code" name="district_code" class="select w-full @error('district_code') border-danger bg-danger-light @enderror">
<option value="">Select District</option>
@if(isset($districts))
@foreach($districts as $district)
@@ -208,7 +196,7 @@
@enderror
</div>
<div class="flex flex-wrap items-baseline w-full">
<select id="village_code" name="village_code" class="select w-full @error('district_code') border-danger @enderror">
<select id="village_code" name="village_code" class="select w-full @error('district_code') border-danger bg-danger-light @enderror">
<option value="">Select Village</option>
@if(isset($villages))
@foreach($villages as $village)
@@ -230,14 +218,14 @@
@enderror
</div>
<div class="flex flex-wrap items-baseline w-full">
<input class="input @error('postal_code') border-danger @enderror" type="number" id="postal_code" name="postal_code" value="{{ $document->postal_code ?? '' }}" placeholder="Postal Code">
<input class="input @error('postal_code') border-danger bg-danger-light @enderror" type="number" id="postal_code" name="postal_code" value="{{ $document->postal_code ?? '' }}" placeholder="Postal Code">
@error('postal_code')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
</div>
</div>
<div class="flex flex-row w-full mt-2 lg:mt-5">
<textarea class="textarea @error('address') border-danger @enderror" rows="3" type="number" id="address" name="address">{{ $document->address ?? '' }}</textarea>
<textarea class="textarea @error('address') border-danger bg-danger-light @enderror" rows="3" type="number" id="address" name="address">{{ $document->address ?? '' }}</textarea>
@error('address')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
@@ -250,3 +238,69 @@
</button>
</div>
</form>
@push('scripts')
<script>
function getLegalitasJaminan() {
var legalitasJaminan = document.getElementById('jenis_jaminan_id').value;
var url = '/basic-data/jenis-jaminan/legalitas/' + legalitasJaminan;
fetch(url, {
method: 'GET',
headers: {
'Content-Type': 'application/json'
}
})
.then(response => {
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
return response.json();
})
.then(data => {
console.log(data);
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>
</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>
</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>
</div>`;
})
})
.catch(error => {
console.error('Error:', error);
// Handle the error here
});
}
</script>
@endpush

View File

@@ -1,4 +1,4 @@
<div class="grid grid-cols-1 lg:grid-cols-2 xl:grid-cols-3 gap-5 lg:gap-7.5">
<div class="grid grid-cols-1 lg:grid-cols-2 gap-5 lg:gap-7.5">
@foreach($documents as $document)
<div class="card flex flex-col gap-5 p-5 lg:p-7.5">
<div class="flex items-center flex-wrap justify-between gap-1">
@@ -19,14 +19,7 @@
</i>
</div>
</div>
<div class="flex flex-col">
<a class="text-md font-semibold text-gray-900 hover:text-primary-active mb-px" href="/metronic/tailwind/demo1/public-profile/profiles/creator">
{{ $document->name }}
</a>
<span class="text-2sm font-medium text-gray-600">
{{ $document->jenisJaminan->name }} | {{ $document->jenisLegalitasJaminan->name }}
</span>
</div>
</div>
<div class="menu inline-flex" data-menu="true">
<div class="flex flex-nowrap justify-center gap-1.5">
@@ -50,27 +43,7 @@
</div>
<div class="border-t border-gray-300 border-dashed">
</div>
@if($document->dokumen_jaminan)
<div class="flex items-center justify-between flex-wrap my-2.5 gap-2">
<span class="text-2xs text-gray-600 uppercase">
dokumen jaminan
</span>
<a href="{{ route('debitur.download',$document->id) }}" class="badge badge-sm badge-outline">{{ basename($document->dokumen_jaminan) }} <i class="ki-filled ki-cloud-download"></i></a>
</div>
<div class="border-t border-gray-300 border-dashed">
</div>
@endif
<div class="flex items-start justify-between flex-wrap my-2.5 gap-2">
<span class="text-2xs text-gray-600 uppercase">
keterangan
</span>
<p class="text-2xs text-gray-600 text-right max-w-[250px]">
{{ $document->keterangan }}
</p>
</div>
<div class="border-t border-gray-300 border-dashed mb-3.5">
</div>
<div class="flex items-start justify-between flex-wrap gap-2">
<span class="text-2xs text-gray-600 uppercase">
alamat
</span>
@@ -78,6 +51,35 @@
{{ $document->address.', '.$document->village->name.', '.$document->city->name.', '.$document->province->name.', '.$document->postal_code }}
</p>
</div>
<div class="border-t border-gray-300 border-dashed">
</div>
<div class="flex items-center justify-between flex-wrap my-2.5 gap-2">
<span class="text-2xs text-gray-600 uppercase">
dokumen jaminan
</span>
</div>
<div class="border-t border-gray-300 border-dashed">
</div>
@foreach($document->detail as $detail)
<div class="flex items-center justify-between flex-wrap my-2.5 gap-2">
<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>
<div class="border-t border-gray-300 border-dashed">
</div>
<div class="flex items-start justify-between flex-wrap my-2.5 gap-2">
<span class="text-2xs text-gray-600 uppercase pl-3">
keterangan
</span>
<p class="text-2xs text-gray-600 text-right max-w-[250px]">
{{ $detail->keterangan }}
</p>
</div>
<div class="border-t border-gray-300 border-dashed mb-3.5">
</div>
@endforeach
</div>
</div>
@endforeach

View File

@@ -85,7 +85,7 @@
alamat
</span>
<p class="text-2xs text-gray-600 text-right max-w-[250px]">
{{ $pemilik->address.', '.$pemilik->village->name.', '.$pemilik->city->name.', '.$pemilik->province->name.', '.$pemilik->postal_code }}
{{ $pemilik->address ?? '' }}, {{ $pemilik->village->name ?? ''}}, {{ $pemilik->city->name ?? ''}}, {{ $pemilik->province->name ?? '' }}, {{ $pemilik->postal_code ?? '' }}
</p>
</div>
</div>

View File

@@ -13,6 +13,9 @@
{{ isset($debitur->id) ? 'Edit' : 'Tambah' }} Debitur
</h3>
<div class="flex items-center gap-2">
@if(isset($debitur->id))
<a class="btn btn-sm btn-primary" href="{{ route('permohonan.create.debitur', $debitur->id) }}"> Buat Permohonan </a>
@endif
<a href="{{ route('debitur.index') }}" class="btn btn-xs btn-info"><i class="ki-filled ki-exit-left"></i> Back</a>
</div>
</div>

View File

@@ -6,16 +6,28 @@
@section('content')
<div class="w-full grid gap-5 lg:gap-7.5 mx-auto">
<div class="card pb-2.5">
<div class="card-header" id="basic_settings">
<div class="card-title flex flex-row gap-1.5">
<a href="{{ route('debitur.edit',$debitur->id) }}" class="btn btn-xs {{ request()->routeIs('debitur.edit') ? 'btn-outline btn-primary' : 'btn-light' }}">Data Debitur</a>
<a href="{{ route('debitur.jaminan.index',$debitur->id) }}" class="btn btn-xs {{ request()->routeIs('debitur.jaminan.index') ? 'btn-outline btn-primary' : 'btn-light' }}">Dokumen Jaminan</a>
<a href="{{ route('debitur.pemilik.index',$debitur->id) }}" class="btn btn-xs {{ request()->routeIs('debitur.pemilik.index') ? 'btn-outline btn-primary' : 'btn-light' }}">Pemilk Jaminan</a>
@if(request()->get('permohonan_id'))
<a href="{{ route('permohonan.edit',['permohonan'=>request()->get('permohonan_id')]) }}" class="btn btn-xs {{ request()->routeIs('permohonan.edit') ? 'btn-outline btn-primary' : 'btn-light' }}">Data Permohonan</a>
@endif
<a href="{{ route('debitur.edit',array_merge(request()->query(),['debitur'=>$debitur->id])) }}" class="btn btn-xs {{ request()->routeIs('debitur.edit') ? 'btn-outline btn-primary' : 'btn-light' }}">Data Debitur</a>
<a href="{{ route('debitur.jaminan.index',array_merge(request()->query(),['id'=>$debitur->id])) }}" class="btn btn-xs {{ request()->routeIs('debitur.jaminan.index') ? 'btn-outline btn-primary' : 'btn-light' }}">Dokumen Jaminan</a>
<a href="{{ route('debitur.pemilik.index',array_merge(request()->query(),['id'=>$debitur->id])) }}" class="btn btn-xs {{ request()->routeIs('debitur.pemilik.index') ? 'btn-outline btn-primary' : 'btn-light' }}">Pemilk Jaminan</a>
</div>
<div class="flex items-center gap-2">
@if(isset($debitur->id) && request()->get('permohonan_id') == null)
<a class="btn btn-sm btn-primary" href="{{ route('permohonan.create.debitur', $debitur->id) }}"> Buat Permohonan </a>
@endif
@if(request()->get('from') == 'permohonan')
<a href="{{ route('permohonan.create') }}" class="btn btn-xs btn-info"><i class="ki-filled ki-exit-left"></i> Back</a>
@elseif(request()->get('permohonan_id'))
<a href="{{ route('permohonan.index') }}" class="btn btn-xs btn-info"><i class="ki-filled ki-exit-left"></i> Back</a>
@else
<a href="{{ route('debitur.index') }}" class="btn btn-xs btn-info"><i class="ki-filled ki-exit-left"></i> Back</a>
@endif
</div>
</div>
<div class="card-body">

View File

@@ -29,7 +29,7 @@
Name
</label>
<div class="flex flex-wrap items-baseline w-full">
<input class="input @error('name') border-danger @enderror" type="text" name="name" value="{{ $hubunganPemilikJaminan->name ?? '' }}">
<input class="input @error('name') border-danger bg-danger-light @enderror" type="text" name="name" value="{{ $hubunganPemilikJaminan->name ?? '' }}">
@error('name')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror

View File

@@ -29,7 +29,7 @@
Name
</label>
<div class="flex flex-wrap items-baseline w-full">
<input class="input @error('name') border-danger @enderror" type="text" name="name" value="{{ $hubunganPenghuniJaminan->name ?? '' }}">
<input class="input @error('name') border-danger bg-danger-light @enderror" type="text" name="name" value="{{ $hubunganPenghuniJaminan->name ?? '' }}">
@error('name')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror

View File

@@ -29,7 +29,7 @@
Code
</label>
<div class="flex flex-wrap items-baseline w-full">
<input class="input @error('code') border-danger @enderror" type="text" name="code" value="{{ $jenisAset->code ?? '' }}">
<input class="input @error('code') border-danger bg-danger-light @enderror" type="text" name="code" value="{{ $jenisAset->code ?? '' }}">
@error('code')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
@@ -40,7 +40,7 @@
Name
</label>
<div class="flex flex-wrap items-baseline w-full">
<input class="input @error('name') border-danger @enderror" type="text" name="name" value="{{ $jenisAset->name ?? '' }}">
<input class="input @error('name') border-danger bg-danger-light @enderror" type="text" name="name" value="{{ $jenisAset->name ?? '' }}">
@error('name')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror

View File

@@ -29,7 +29,7 @@
Name
</label>
<div class="flex flex-wrap items-baseline w-full">
<input class="input @error('name') border-danger @enderror" type="text" name="name" value="{{ $jenisDokumen->name ?? '' }}">
<input class="input @error('name') border-danger bg-danger-light @enderror" type="text" name="name" value="{{ $jenisDokumen->name ?? '' }}">
@error('name')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
@@ -40,7 +40,7 @@
Max Size
</label>
<div class="flex flex-wrap items-baseline w-full">
<input placeholder="Ukuran dalam MB" class="input @error('max_size') border-danger @enderror" type="number" name="max_size" value="{{ $jenisDokumen->max_size ?? '' }}">
<input placeholder="Ukuran dalam MB" class="input @error('max_size') border-danger bg-danger-light @enderror" type="number" name="max_size" value="{{ $jenisDokumen->max_size ?? '' }}">
@error('max_size')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
@@ -51,7 +51,7 @@
Description
</label>
<div class="flex flex-wrap items-baseline w-full">
<textarea class="textarea @error('description') border-danger @enderror" rows="2" type="number" id="description" name="description">{{ $jenisDokumen->description ?? '' }}</textarea>
<textarea class="textarea @error('description') border-danger bg-danger-light @enderror" rows="2" type="number" id="description" name="description">{{ $jenisDokumen->description ?? '' }}</textarea>
@error('description')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror

View File

@@ -32,8 +32,11 @@
<label class="form-label max-w-56">
Code
</label>
<div id="{{$route[1]}}_code" class="flex flex-wrap items-baseline w-full">
{{ $jenisFasilitasKredit->code ?? '-' }}
<div class="flex flex-wrap items-baseline w-full">
<input class="input @error('code') border-danger bg-danger-light @enderror" type="text" name="code" value="{{ $jenisFasilitasKredit->code ?? '' }}">
@error('code')
<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">
@@ -41,7 +44,7 @@
Name
</label>
<div class="flex flex-wrap items-baseline w-full">
<input class="input @error('name') border-danger @enderror" type="text" name="name" value="{{ $jenisFasilitasKredit->name ?? '' }}">
<input class="input @error('name') border-danger bg-danger-light @enderror" type="text" name="name" value="{{ $jenisFasilitasKredit->name ?? '' }}">
@error('name')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror

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