From 4b0822540344acc2f944b248f1e4648b86651ff8 Mon Sep 17 00:00:00 2001 From: majid Date: Tue, 29 Oct 2024 14:22:25 +0700 Subject: [PATCH 01/45] update pemilihan team hanya surveyor atau penilai dan update form foto menggunakan camera --- app/Http/Controllers/ActivityController.php | 2 +- app/Http/Controllers/PenilaianController.php | 6 +- app/Http/Controllers/SurveyorController.php | 231 ++++++----- app/Http/Controllers/TeamsController.php | 39 +- app/Http/Requests/SurveyorRequest.php | 157 ++++++-- app/Models/GolonganMasySekitar.php | 4 +- app/Models/Lantai.php | 23 ++ app/Models/SpekBangunan.php | 2 +- app/Models/SpekKategoritBangunan.php | 2 +- app/Models/TingkatKeramaian.php | 1 + app/Models/ViewUnit.php | 23 ++ ...2024_10_16_153543_create_analisa_table.php | 1 + .../2024_10_16_153841_create_denah_table.php | 2 +- ...10_16_153902_create_foto_jaminan_table.php | 2 +- ...0_16_153918_create_objek_jaminan_table.php | 1 + ..._10_25_014340_create_lokasi_unit_table.php | 37 ++ ...24_10_25_014428_create_view_unit_table.php | 36 ++ module.json | 60 ++- .../activity/progres_activity/index.blade.php | 2 +- resources/views/penilaian/form.blade.php | 200 ++++++--- .../penilaian/otorisator/index.blade.php | 48 ++- .../views/penilaian/otorisator/show.blade.php | 30 +- .../surveyor/components/alat-berat.blade.php | 192 +++++++++ .../components/apartemen-kantor.blade.php | 14 +- .../views/surveyor/components/foto.blade.php | 379 ++++++++++++++++-- .../surveyor/components/inspeksi.blade.php | 164 ++++++-- .../components/tanah-bangunan.blade.php | 2 +- resources/views/surveyor/data/form.blade.php | 41 +- resources/views/surveyor/data/index.blade.php | 6 +- resources/views/surveyor/index.blade.php | 1 + resources/views/teams/form.blade.php | 1 + routes/breadcrumbs.php | 72 ++++ routes/web.php | 10 +- 33 files changed, 1477 insertions(+), 314 deletions(-) create mode 100644 app/Models/Lantai.php create mode 100644 app/Models/ViewUnit.php create mode 100644 database/migrations/2024_10_25_014340_create_lokasi_unit_table.php create mode 100644 database/migrations/2024_10_25_014428_create_view_unit_table.php create mode 100644 resources/views/surveyor/components/alat-berat.blade.php diff --git a/app/Http/Controllers/ActivityController.php b/app/Http/Controllers/ActivityController.php index 496f1b4..74bb5f7 100644 --- a/app/Http/Controllers/ActivityController.php +++ b/app/Http/Controllers/ActivityController.php @@ -195,7 +195,7 @@ class ActivityController extends Controller public function dataTablesForActivity(Request $request, $id) { // Query Penilaian dengan relasi yang diperlukan - $query = Penilaian::with(['permohonan', 'permohonan.debiture', 'permohonan.tujuanPenilaian']) + $query = Penilaian::with(['permohonan', 'permohonan.debiture', 'permohonan.tujuanPenilaian', 'permohonan.debiture.documents.jenisJaminan']) ->where(function($q) use ($id) { $q->where('surveyor_id', $id) ->orWhere('penilaian_id', $id) diff --git a/app/Http/Controllers/PenilaianController.php b/app/Http/Controllers/PenilaianController.php index f273b0a..3ae9cde 100644 --- a/app/Http/Controllers/PenilaianController.php +++ b/app/Http/Controllers/PenilaianController.php @@ -222,7 +222,8 @@ class PenilaianController extends Controller - public function otorisator(Request $request){ + public function otorisator(Request $request) + { $type = $request->route('type'); $header = ''; @@ -248,7 +249,8 @@ class PenilaianController extends Controller return view('lpj::penilaian.otorisator.index', compact('header')); } - public function show($id){ + public function show($id) + { $permohonan = Permohonan::find($id); diff --git a/app/Http/Controllers/SurveyorController.php b/app/Http/Controllers/SurveyorController.php index 36b9ae2..d4e30df 100644 --- a/app/Http/Controllers/SurveyorController.php +++ b/app/Http/Controllers/SurveyorController.php @@ -32,9 +32,14 @@ use Modules\Lpj\Models\Denah; use Modules\Lpj\Models\FotoJaminan; use Modules\Lpj\Models\Lingkungan; use Modules\Lpj\Models\LantaiUnit; +use Modules\Lpj\Models\Lantai; +use Modules\Lpj\Models\ViewUnit; use Modules\Lpj\Models\ObjekJaminan; use Modules\Lpj\Models\RuteJaminan; use Modules\Lpj\Models\AnalisaUnit; +use Modules\Lpj\Models\GolonganMasySekitar; +use Modules\Lpj\Models\TingkatKeramaian; +use Modules\Lpj\Models\LaluLintasLokasi; use Modules\Lpj\Models\SpekBagunanAnalisaDetail; use Modules\Lpj\Http\Requests\SurveyorRequest; use Modules\Lpj\Http\Requests\FormSurveyorRequest; @@ -552,6 +557,8 @@ class SurveyorController extends Controller { $permohonan = $this->getPermohonanJaminanId($id, $jaminanId); + + $branches = Branch::all(); $provinces = Province::all(); @@ -570,6 +577,11 @@ class SurveyorController extends Controller $spekBangunan = SpekBangunan::all(); $saranaPelengkap = SaranaPelengkap::all(); $arahMataAngin = ArahMataAngin::all(); + $lantai = Lantai::all(); + $viewUnit = ViewUnit::all(); + $golMasySekitar = GolonganMasySekitar::all(); + $tingkatKeramaian = TingkatKeramaian::all(); + $laluLintasLokasi = LaluLintasLokasi::all(); $analisa = Analisa::with('analisaTanahBangunan', 'analisaLingkungan', 'analisaFakta', 'jenisJaminan') @@ -597,6 +609,12 @@ class SurveyorController extends Controller 'spekBangunan', 'saranaPelengkap', 'arahMataAngin', + 'lantai', + 'viewUnit', + 'golMasySekitar', + 'tingkatKeramaian', + 'laluLintasLokasi' + )); } @@ -625,10 +643,6 @@ class SurveyorController extends Controller $provinces = Province::all(); $fotoJaminan = FotoJaminan::with(['objekJaminan', 'lantaiUnit' ,'ruteJaminan', 'lingkungan'])->where('permohonan_id', $id)->where('jenis_jaminan_id', $jaminanId)->first(); - - // return response()->json([ - // 'data' => $fotoJaminan, - // ]); return view('lpj::surveyor.components.foto', compact('permohonan', 'surveyor', 'branches', 'provinces', 'fotoJaminan')); } @@ -658,25 +672,18 @@ class SurveyorController extends Controller } + + + private function getHeader(string $type): array + { + return self::HEADERS[$type] ?? []; + } + public function data(Request $request) { $type = $request->route('type'); - - $headers = [ - 'bentuk-tanah' => ['Bentuk Tanah', 'bentuk-tanah'], - 'kontur-tanah' => ['Kontur Tanah', 'kontur-tanah'], - 'posisi-kavling' => ['Posisi Kavling', 'posisi-kavling'], - 'ketinggian-tanah' => ['Ketinggian Tanah', 'ketinggian-tanah'], - 'kondisi-fisik-tanah' => ['Kondisi Fisik Tanah', 'kondisi-fisik-tanah'], - 'jenis-bangunan' => ['Jenis Bangunan', 'jenis-bangunan'], - 'kondisi-bangunan' => ['Kondisi Bangunan', 'kondisi-bangunan'], - 'sifat-bangunan' => ['Sifat Bangunan', 'sifat-bangunan'], - 'sarana-pelengkap' => ['Sarana Pelengkap', 'sarana-pelengkap'], - ]; - - $header = $headers[$type] ?? ''; - + $header = $this->getHeader($request->route('type')); return view('lpj::surveyor.data.index', compact('header')); } @@ -684,21 +691,9 @@ class SurveyorController extends Controller public function createData($type) { - $headers = [ - 'bentuk-tanah' => ['Bentuk Tanah', 'bentuk-tanah'], - 'kontur-tanah' => ['Kontur Tanah', 'kontur-tanah'], - 'posisi-kavling' => ['Posisi Kavling', 'posisi-kavling'], - 'ketinggian-tanah' => ['Ketinggian Tanah', 'ketinggian-tanah'], - 'kondisi-fisik-tanah' => ['Kondisi Fisik Tanah', 'kondisi-fisik-tanah'], - 'jenis-bangunan' => ['Jenis Bangunan', 'jenis-bangunan'], - 'kondisi-bangunan' => ['Kondisi Bangunan', 'kondisi-bangunan'], - 'sifat-bangunan' => ['Sifat Bangunan', 'sifat-bangunan'], - 'sarana-pelengkap' => ['Sarana Pelengkap', 'sarana-pelengkap'], - ]; - - - $header = $headers[$type] ?? ''; - return view('lpj::surveyor.data.form', compact('header')); + $spekKategoriBagunan = SpekKategoritBangunan::all(); + $header = $this->getHeader($type); + return view('lpj::surveyor.data.form', compact('header','spekKategoriBagunan')); } @@ -710,30 +705,21 @@ class SurveyorController extends Controller $type = $request->route('type'); - $modelClasses = [ - 'bentuk-tanah' => BentukTanah::class, - 'kontur-tanah' => KonturTanah::class, - 'posisi-kavling' => PosisiKavling::class, - 'bentuk-tanah' => BentukTanah::class, - 'kontur-tanah' => KonturTanah::class, - 'posisi-kavling' => PosisiKavling::class, - 'ketinggian-tanah' => KetinggianTanah::class, - 'kondisi-fisik-tanah' => KondisiFisikTanah::class, - 'jenis-bangunan' => JenisBangunan::class, - 'kondisi-bangunan' => KondisiBangunan::class, - 'sifat-bangunan' => SifatBangunan::class, - 'sarana-pelengkap' => SaranaPelengkap::class, - ]; + $modelClass = $this->getModelClass($type); - if (!array_key_exists($type, $modelClasses)) { + if (!$modelClass) { return redirect() ->route('basicdata.'. $type .'.index') ->with('error', 'Invalid type specified.'); } - $modelClass = $modelClasses[$type]; - $data = $request->all(); - $data['status'] = true; + if($type == 'spek-bangunan') { + $validate['spek_kategori_bagunan_id'] = $request->spek_kategori_bagunan_id; + + } + + + $data = array_merge($validate, ['status' => true]); $modelClass::create($data); return redirect() @@ -757,6 +743,9 @@ class SurveyorController extends Controller 'spek-bangunan' => ['Spek Bangunan', 'spek-bangunan', SpekBangunan::class], 'spek-kategori-bangunan' => ['Spek Kategori Bangunan', 'spek-kategori-bangunan', SpekKategoritBangunan::class], 'sarana-pelengkap' => ['Sarana Pelengkap', 'sarana-pelengkap', SaranaPelengkap::class], + 'lantai-unit' => ['Lantai Unit', 'lantai-unit', Lantai::class], + 'view-unit' => ['View Unit', 'view-unit', ViewUnit::class], + 'gol-mas-sekitar' => ['Golongan Masyarakat Sekitar', 'gol-mas-sekitar', GolonganMasySekitar::class], ]; @@ -769,7 +758,13 @@ class SurveyorController extends Controller $header = $dataMap[$type] ?? ''; $model = $modelClass::findOrFail($id); - return view('lpj::surveyor.data.form', compact('header', 'model')); + if ($type == 'spek-bangunan') { + $spekKategoriBagunan = SpekKategoritBangunan::all(); + + } + + + return view('lpj::surveyor.data.form', compact('header', 'model','spekKategoriBagunan')); } @@ -777,26 +772,22 @@ class SurveyorController extends Controller { $validate = $request->validated(); if ($validate) { - $modelClasses = [ - 'bentuk-tanah' => BentukTanah::class, - 'kontur-tanah' => KonturTanah::class, - 'posisi-kavling' => PosisiKavling::class, - 'ketinggian-tanah' => KetinggianTanah::class, - 'kondisi-fisik-tanah' => KondisiFisikTanah::class, - 'jenis-bangunan' => JenisBangunan::class, - 'kondisi-bangunan' => KondisiBangunan::class, - 'sifat-bangunan' => SifatBangunan::class, - 'sarana-pelengkap' => SaranaPelengkap::class, + $modelClass = $this->getModelClass($type); - ]; + if($type == 'spek-bangunan') { + $validate['spek_kategori_bagunan_id'] = $request->spek_kategori_bagunan_id; + + } // Check if the provided type exists in the modelClasses - if (!array_key_exists($type, $modelClasses)) { + if (!$modelClass) { return redirect() ->route('basicdata.' . $type . '.index') ->with('error', 'Invalid type specified.'); } - $modelClass = $modelClasses[$type]; + + + $model = $modelClass::findOrFail($id); $model->update($validate); @@ -817,8 +808,6 @@ class SurveyorController extends Controller //abort(403, 'Sorry! You are not allowed to view users.'); } - // Retrieve data from the database - $models = [ 'Bentuk Tanah' => BentukTanah::class, 'Kontur Tanah' => KonturTanah::class, @@ -828,9 +817,14 @@ class SurveyorController extends Controller 'Jenis Bangunan' => JenisBangunan::class, 'Kondisi Bangunan' => KondisiBangunan::class, 'Sifat Bangunan' => SifatBangunan::class, - // 'Spek Kategori Bangunan' => SpekKategoritBangunan::class, - // 'Spek Bangunan' => SpekBangunan::class, + 'Spek Kategori Bangunan' => SpekKategoritBangunan::class, + 'Spek Bangunan' => SpekBangunan::class, 'Sarana Pelengkap' => SaranaPelengkap::class, + 'Lalu Lintas Depan Lokasi' => LaluLintasLokasi::class, + 'Tingkat Keramaian' => TingkatKeramaian::class, + 'Golongan Masyarakat Sekitar' => GolonganMasySekitar::class, + 'Lantai Unit' => Lantai::class, + 'View Unit' => ViewUnit::class, ]; @@ -840,8 +834,6 @@ class SurveyorController extends Controller throw new InvalidArgumentException("Invalid type: $type"); } - - // Apply search filter if provided if ($request->has('search') && !empty($request->get('search'))) { $search = $request->get('search'); $query->where(function ($q) use ($search) { @@ -897,24 +889,13 @@ class SurveyorController extends Controller { try { - $modelClasses = [ - 'bentuk-tanah' => BentukTanah::class, - 'kontur-tanah' => KonturTanah::class, - 'posisi-kavling' => PosisiKavling::class, - 'ketinggian-tanah' => KetinggianTanah::class, - 'kondisi-fisik-tanah' => KondisiFisikTanah::class, - 'jenis-bangunan' => JenisBangunan::class, - 'kondisi-bangunan' => KondisiBangunan::class, - 'sifat-bangunan' => SifatBangunan::class, - 'sarana-pelengkap' => SaranaPelengkap::class, - ]; + $modelClass = $this->getModelClass($type); - - if (!array_key_exists($type, $modelClasses)) { + if (!$modelClass) { return response()->json(['success' => false, 'message' => 'Invalid type specified.'], 400); } - $modelClass = $modelClasses[$type]; + $model = $modelClass::findOrFail($id); $model->delete(); @@ -948,6 +929,47 @@ class SurveyorController extends Controller ->findOrFail($id); } + public function submitSurveyor(Request $request, $id) + { + $permohonan = Permohonan::find($id); + $permohonan->update([ + 'status' => 'done', + ]); + return redirect() + ->route('surveyor.index') + ->with('success', 'form surveyor submitted successfully'); + + } + + + private function getModelClass(string $type): ?string + { + return $this->modelClasses[$type] ?? null; + } + + + + private $modelClasses = [ + 'bentuk-tanah' => BentukTanah::class, + 'kontur-tanah' => KonturTanah::class, + 'posisi-kavling' => PosisiKavling::class, + 'ketinggian-tanah' => KetinggianTanah::class, + 'kondisi-fisik-tanah' => KondisiFisikTanah::class, + 'jenis-bangunan' => JenisBangunan::class, + 'kondisi-bangunan' => KondisiBangunan::class, + 'sifat-bangunan' => SifatBangunan::class, + 'sarana-pelengkap' => SaranaPelengkap::class, + 'lalu-lintas-lokasi' => LaluLintasLokasi::class, + 'tingkat-keramaian' => TingkatKeramaian::class, + 'gol-mas-sekitar' => GolonganMasySekitar::class, + 'spek-kategori-bangunan' => SpekKategoritBangunan::class, + 'lantai-unit' => Lantai::class, + 'view-unit' => ViewUnit::class, + ]; + + + + private function getCommonData() { return [ @@ -964,21 +986,34 @@ class SurveyorController extends Controller 'spekKategoriBangunan' => SpekKategoritBangunan::all(), 'spekBangunan' => SpekBangunan::all(), 'saranaPelengkap' => SaranaPelengkap::all(), - 'arahMataAngin' => ArahMataAngin::all() + 'arahMataAngin' => ArahMataAngin::all(), + 'lantai' => Lantai::all(), + 'viewUnit' => ViewUnit::all(), + 'golMasySekitar' => GolonganMasySekitar::all(), + 'tingkatKeramaian' => TingkatKeramaian::all(), + 'laluLintasLokasi' => LaluLintasLokasi::all(), + ]; } - public function submitSurveyor(Request $request, $id) - { - $permohonan = Permohonan::find($id); - $permohonan->update([ - 'status' => 'done', - ]); - return redirect() - ->route('surveyor.index') - ->with('success', 'form surveyor submitted successfully'); - - } + private const HEADERS = [ + 'bentuk-tanah' => ['Bentuk Tanah', 'bentuk-tanah'], + 'kontur-tanah' => ['Kontur Tanah', 'kontur-tanah'], + 'posisi-kavling' => ['Posisi Kavling', 'posisi-kavling'], + 'ketinggian-tanah' => ['Ketinggian Tanah', 'ketinggian-tanah'], + 'kondisi-fisik-tanah' => ['Kondisi Fisik Tanah', 'kondisi-fisik-tanah'], + 'jenis-bangunan' => ['Jenis Bangunan', 'jenis-bangunan'], + 'kondisi-bangunan' => ['Kondisi Bangunan', 'kondisi-bangunan'], + 'sifat-bangunan' => ['Sifat Bangunan', 'sifat-bangunan'], + 'sarana-pelengkap' => ['Sarana Pelengkap', 'sarana-pelengkap'], + 'lalu-lintas-lokasi' => ['Lalu Lintas Depan Lokasi', 'lalu-lintas-lokasi'], + 'tingkat-keramaian' => ['Tingkat Keramaian', 'tingkat-keramaian'], + 'gol-mas-sekitar' => ['Golongan Masyarakat Sekitar', 'gol-mas-sekitar'], + 'spek-kategori-bangunan' => ['Spek Kategori Bangunan', 'spek-kategori-bangunan'], + 'spek-bangunan' => ['Spek Bangunan', 'spek-bangunan'], + 'lantai-unit' => ['Lantai Unit', 'lantai-unit'], + 'view-unit' => ['View Unit', 'view-unit'], + ]; } diff --git a/app/Http/Controllers/TeamsController.php b/app/Http/Controllers/TeamsController.php index e360132..a6eb9ca 100644 --- a/app/Http/Controllers/TeamsController.php +++ b/app/Http/Controllers/TeamsController.php @@ -31,20 +31,26 @@ class TeamsController extends Controller * Show the form for creating a new resource. */ public function create() - { +{ - // cek region apakah sudah ada di tabel teams - $regionTeam = Teams::pluck('regions_id')->toArray(); - $region = Regions::whereNotIn('id', $regionTeam)->get(); + $regionTeam = Teams::pluck('regions_id')->toArray(); + $regions = 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(); + $userTeam = TeamsUsers::pluck('user_id')->toArray(); + $usersWithRole = User::whereNotIn('id', $userTeam) + ->with('roles') // Eager load roles + ->get(); - return view('lpj::teams.form', compact('region', 'user')); - } + $user = $usersWithRole->filter(function ($user) { + return $user->roles->contains(function ($role) { + return $role->name === 'surveyor' || $role->name === 'surveyor-penilai'; + }); + }); + + + + return view('lpj::teams.form', compact('regions', 'user')); +} /** * Store a newly created resource in storage. @@ -97,12 +103,19 @@ class TeamsController extends Controller { $teams = Teams::find($id); - $region = Regions::all(); $usedUsers = TeamsUsers::where('teams_id', '!=', $id)->pluck('user_id')->toArray(); - $user = User::whereNotIn('id', $usedUsers) + $usersWithRole = User::whereNotIn('id', $usedUsers) ->with('roles') ->get(); + + + $user = $usersWithRole->filter(function ($user) { + return $user->roles->contains(function ($role) { + return $role->name === 'surveyor' || $role->name === 'surveyor-penilai'; + }); + }); + // Ambil user yang sudah ada di tim ini $selectedUsers = $teams->teamsUsers->pluck('user_id')->toArray(); diff --git a/app/Http/Requests/SurveyorRequest.php b/app/Http/Requests/SurveyorRequest.php index b986f8e..7fbb8b7 100644 --- a/app/Http/Requests/SurveyorRequest.php +++ b/app/Http/Requests/SurveyorRequest.php @@ -4,62 +4,137 @@ namespace Modules\Lpj\Http\Requests; use Illuminate\Foundation\Http\FormRequest; +use Illuminate\Validation\Rule; + class SurveyorRequest extends FormRequest { /** - * Get the validation rules that apply to the request. + * Table mapping for different actionszz */ - public function rules() - : array - { - - $action = $this->input('action'); - - $uniqueTable = [ - 'bentuk-tanah' => 'bentuk_tanah', - 'kontur-tanah' => 'kontur_tanah', - 'posisi-kavling' => 'posisi_kavling', - 'ketinggian-tanah' => 'ketinggian_tanah', - 'kondisi-fisik-tanah' => 'kondisi_fisik_tanah', - 'kondisi-bangunan' => 'kondisi_bangunan', - 'jenis-bangunan' => 'jenis_bangunan', - 'sifat-bangunan' => 'sifat_bangunan', - 'sarana-pelengkap' => 'sarana_pelengkap', - 'lalu_lintas_lokasi' => 'lalu_lintas_lokasi', - 'tingkat-keramaian' => 'tingkat_keramaian', - ]; - - - - $rules = [ - 'name' => 'required|max:255', - - ]; - - $id = $this->route('id'); - - if ($this->method() == 'PUT' || $this->method() == 'PATCH') { - $rules['code'] = 'required|max:50|unique:' . $uniqueTable[$action] . ',code,' . $id; - } else { - - $rules['code'] = 'required|max:50|unique:' . $uniqueTable[$action] . ',code'; - } - return $rules; - } + private const TABLE_MAPPING = [ + 'bentuk-tanah' => 'bentuk_tanah', + 'kontur-tanah' => 'kontur_tanah', + 'posisi-kavling' => 'posisi_kavling', + 'ketinggian-tanah' => 'ketinggian_tanah', + 'kondisi-fisik-tanah' => 'kondisi_fisik_tanah', + 'kondisi-bangunan' => 'kondisi_bangunan', + 'jenis-bangunan' => 'jenis_bangunan', + 'sifat-bangunan' => 'sifat_bangunan', + 'sarana-pelengkap' => 'sarana_pelengkap', + 'lalu-lintas-lokasi' => 'lalu_lintas_lokasi', + 'tingkat-keramaian' => 'tingkat_keramaian', + 'gol-mas-sekitar' => 'gol_mas_sekitar', + 'spek-kategori-bangunan' => 'spek_kategori_bangunan', + 'spek-bangunan' => 'spek_bangunan', + 'lantai-unit' => 'lantai', + 'view-unit' => 'view_unit', + ]; /** * Determine if the user is authorized to make this request. */ - public function authorize() - : bool + public function authorize(): bool { return true; } - protected function prepareForValidation() + /** + * Get the validation rules that apply to the request. + */ + public function rules(): array + { + return array_merge( + $this->getBaseRules(), + $this->getActionSpecificRules(), + $this->getCodeValidationRules() + ); + } + + /** + * Get base validation rules + */ + private function getBaseRules(): array + { + return [ + 'name' => 'required|max:255', + ]; + } + + /** + * Get action specific validation rules + */ + private function getActionSpecificRules(): array + { + $action = $this->input('action'); + + return match ($action) { + 'spek-bangunan' => [ + 'spek_kategori_bangunan_id' => [ + 'required' + ], + ], + // Add more action specific rules here + default => [], + }; + } + + /** + * Get code validation rules + */ + private function getCodeValidationRules(): array + { + $action = $this->input('action'); + $table = self::TABLE_MAPPING[$action] ?? null; + + if (!$table) { + return []; + } + + $rules = ['required', 'max:50']; + + if ($this->isMethod('PUT') || $this->isMethod('PATCH')) { + $rules[] = Rule::unique($table, 'code')->ignore($this->route('id')); + } else { + $rules[] = Rule::unique($table, 'code'); + } + + return ['code' => $rules]; + } + + /** + * Prepare the data for validation. + */ + protected function prepareForValidation(): void { $this->merge([ 'status' => true, ]); } + + /** + * Get custom messages for validator errors. + */ + public function messages(): array + { + return [ + 'name.required' => 'Nama harus diisi', + 'name.max' => 'Nama tidak boleh lebih dari 255 karakter', + 'code.required' => 'Kode harus diisi', + 'code.max' => 'Kode tidak boleh lebih dari 50 karakter', + 'code.unique' => 'Kode sudah digunakan', + 'spek_kategori_bangunan_id.required' => 'Kategori bangunan harus dipilih', + ]; + } + + /** + * Get custom attributes for validator errors. + */ + public function attributes(): array + { + return [ + 'name' => 'Nama', + 'code' => 'Kode', + 'spek_kategori_bangunan_id' => 'Kategori Bangunan', + ]; + } } diff --git a/app/Models/GolonganMasySekitar.php b/app/Models/GolonganMasySekitar.php index 5140710..a4d1f9a 100644 --- a/app/Models/GolonganMasySekitar.php +++ b/app/Models/GolonganMasySekitar.php @@ -10,10 +10,12 @@ class GolonganMasySekitar extends Model { use HasFactory; + protected $table = 'gol_mas_sekitar'; /** * The attributes that are mass assignable. */ - protected $fillable = []; + protected $fillable = ['code', 'name', 'status']; + protected static function newFactory(): GolonganMasySekitarFactory { diff --git a/app/Models/Lantai.php b/app/Models/Lantai.php new file mode 100644 index 0000000..3330df1 --- /dev/null +++ b/app/Models/Lantai.php @@ -0,0 +1,23 @@ +unsignedBigInteger('permohonan_id'); $table->foreign('permohonan_id')->references('id')->on('permohonan'); $table->string('luas'); + $table->unsignedBigInteger('jenis_jaminan_id'); $table->char('authorized_status', 1)->nullable(); $table->timestamp('authorized_at')->nullable(); $table->unsignedBigInteger('authorized_by')->nullable(); diff --git a/database/migrations/2024_10_16_153841_create_denah_table.php b/database/migrations/2024_10_16_153841_create_denah_table.php index 308a7ad..71475ff 100644 --- a/database/migrations/2024_10_16_153841_create_denah_table.php +++ b/database/migrations/2024_10_16_153841_create_denah_table.php @@ -18,7 +18,7 @@ return new class () extends Migration { $table->string('foto_denah'); $table->string('luas'); - + $table->unsignedBigInteger('jenis_jaminan_id'); $table->char('authorized_status', 1)->nullable(); $table->timestamp('authorized_at')->nullable(); $table->unsignedBigInteger('authorized_by')->nullable(); diff --git a/database/migrations/2024_10_16_153902_create_foto_jaminan_table.php b/database/migrations/2024_10_16_153902_create_foto_jaminan_table.php index f0e1000..3c7f514 100644 --- a/database/migrations/2024_10_16_153902_create_foto_jaminan_table.php +++ b/database/migrations/2024_10_16_153902_create_foto_jaminan_table.php @@ -16,7 +16,7 @@ return new class () extends Migration { $table->foreign('permohonan_id')->references('id')->on('permohonan'); $table->string('pendamping'); - + $table->unsignedBigInteger('jenis_jaminan_id'); $table->char('authorized_status', 1)->nullable(); $table->timestamp('authorized_at')->nullable(); $table->unsignedBigInteger('authorized_by')->nullable(); diff --git a/database/migrations/2024_10_16_153918_create_objek_jaminan_table.php b/database/migrations/2024_10_16_153918_create_objek_jaminan_table.php index b55f7eb..3d02a38 100644 --- a/database/migrations/2024_10_16_153918_create_objek_jaminan_table.php +++ b/database/migrations/2024_10_16_153918_create_objek_jaminan_table.php @@ -19,6 +19,7 @@ return new class () extends Migration { $table->string('name'); $table->string('foto_objek'); + $table->unsignedBigInteger('jenis_jaminan_id'); $table->char('authorized_status', 1)->nullable(); $table->timestamp('authorized_at')->nullable(); $table->unsignedBigInteger('authorized_by')->nullable(); diff --git a/database/migrations/2024_10_25_014340_create_lokasi_unit_table.php b/database/migrations/2024_10_25_014340_create_lokasi_unit_table.php new file mode 100644 index 0000000..cc51e6d --- /dev/null +++ b/database/migrations/2024_10_25_014340_create_lokasi_unit_table.php @@ -0,0 +1,37 @@ +id(); + $table->string('code')->unique()->index(); + $table->string('name'); + $table->boolean('status')->default(true); + $table->char('authorized_status', 1)->nullable(); + $table->timestamps(); + $table->timestamp('authorized_at')->nullable(); + $table->unsignedBigInteger('authorized_by')->nullable(); + $table->softDeletes(); + $table->unsignedBigInteger('created_by')->nullable(); + $table->unsignedBigInteger('updated_by')->nullable(); + $table->unsignedBigInteger('deleted_by')->nullable(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('lokasi_unit'); + } +}; diff --git a/database/migrations/2024_10_25_014428_create_view_unit_table.php b/database/migrations/2024_10_25_014428_create_view_unit_table.php new file mode 100644 index 0000000..5a99cfe --- /dev/null +++ b/database/migrations/2024_10_25_014428_create_view_unit_table.php @@ -0,0 +1,36 @@ +id(); + $table->string('code')->unique()->index(); + $table->string('name'); + $table->boolean('status')->default(true); + $table->char('authorized_status', 1)->nullable(); + $table->timestamps(); + $table->timestamp('authorized_at')->nullable(); + $table->unsignedBigInteger('authorized_by')->nullable(); + $table->softDeletes(); + $table->unsignedBigInteger('created_by')->nullable(); + $table->unsignedBigInteger('updated_by')->nullable(); + $table->unsignedBigInteger('deleted_by')->nullable(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('view_unit'); + } +}; diff --git a/module.json b/module.json index 427bfca..ed66671 100644 --- a/module.json +++ b/module.json @@ -344,7 +344,7 @@ "roles": ["administrator", "admin"] }, { - "title": "Bentuk Tanah", + "title": "Bentuk", "path": "basicdata.bentuk-tanah", "classes": "", "attributes": [], @@ -415,8 +415,66 @@ "attributes": [], "permission": "", "roles": ["surveyor"] + }, + + { + "title": "Lalu Lintas Sekitar", + "path": "basicdata.lalu-lintas-lokasi", + "classes": "", + "attributes": [], + "permission": "", + "roles": ["surveyor"] + }, + { + "title": "Tingkat Keramaian", + "path": "basicdata.tingkat-keramaian", + "classes": "", + "attributes": [], + "permission": "", + "roles": ["surveyor"] + }, + { + "title": "Masyarakat Sekitar", + "path": "basicdata.gol-mas-sekitar", + "classes": "", + "attributes": [], + "permission": "", + "roles": ["surveyor"] + }, + { + "title": "Lantai Unit", + "path": "basicdata.lantai-unit", + "classes": "", + "attributes": [], + "permission": "", + "roles": ["surveyor"] + }, + { + "title": "View unit", + "path": "basicdata.view-unit", + "classes": "", + "attributes": [], + "permission": "", + "roles": ["surveyor"] + }, + { + "title": "Spesifikasi Bangunan", + "path": "basicdata.spek-bangunan", + "classes": "", + "attributes": [], + "permission": "", + "roles": ["surveyor"] + }, + { + "title": "Kategori Speksikasi Bangunan", + "path": "basicdata.spek-kategori-bangunan", + "classes": "", + "attributes": [], + "permission": "", + "roles": ["surveyor"] } + ] } ], diff --git a/resources/views/activity/progres_activity/index.blade.php b/resources/views/activity/progres_activity/index.blade.php index 7f824da..67942a7 100644 --- a/resources/views/activity/progres_activity/index.blade.php +++ b/resources/views/activity/progres_activity/index.blade.php @@ -180,7 +180,7 @@ }, jenis_asset: { title: 'Jenis Asset', - render: (item, data) => `${data.jenis_asset || ''}`, + render: (item, data) => `${data.permohonan.debiture.documents.map(d => d.jenis_jaminan.name) || ''}`, }, jenis_report: { title: 'Jenis Report', diff --git a/resources/views/penilaian/form.blade.php b/resources/views/penilaian/form.blade.php index 07e7061..8ac5c47 100644 --- a/resources/views/penilaian/form.blade.php +++ b/resources/views/penilaian/form.blade.php @@ -280,15 +280,14 @@ +
- + + type="text" value="{{ $jenisPenilaian->name }}" readonly> @error('jenis_penilaian_id') {{ $message }} @enderror @@ -300,9 +299,7 @@ Tim Penilai yang di tunjuk
- + @error('teams_id') @@ -311,62 +308,115 @@
+
- +
+ +
- @error('surveyor_id') + @error('surveyor_selection') {{ $message }} @enderror
- -
- -
- - @error('penilaian_id') - {{ $message }} - @enderror + -
- -
- - @error('penilai_surveyor_id') - {{ $message }} - @enderror + + -
- -
- -
- - -
@@ -473,8 +516,51 @@
@endsection @push('scripts') - + + + + +@endpush diff --git a/resources/views/surveyor/components/alat-berat.blade.php b/resources/views/surveyor/components/alat-berat.blade.php new file mode 100644 index 0000000..c010e38 --- /dev/null +++ b/resources/views/surveyor/components/alat-berat.blade.php @@ -0,0 +1,192 @@ + + +
+ + +
+

Identitas Debitur

+
+
+ +
+ + + @error('bentuk_tanah') + {{ $message }} + @enderror +
+
+ +
+

Lokasi Jaminan

+
+
+ @php + $inputDataLoaksi = []; + + $inputDataLoaksi = [ + ['label' => 'Nama Jalan', 'index' => 0], + ['label' => 'Perumahan/Gang', 'index' => 1], + ['label' => 'Blok/Nomor', 'index' => 2], + ['label' => 'Desa/Kelurahan', 'index' => 3], + ['label' => 'Kecamatan', 'index' => 4], + ['label' => 'Kota/Kotamadya', 'index' => 5], + ['label' => 'Provinsi', 'index' => 6] + ]; + + @endphp + + @if (count($inputDataLoaksi) > 0) + @foreach ($inputDataLoaksi as $item) + +
+ +
+ + + @error('bentuk_tanah') + {{ $message }} + @enderror +
+
+ @endforeach + @endif +
+
+ + +
+
+

Data Data Jaminan

+
+
+
+ +
+ + + @error('hadapMataAngin') + {{ $message }} + @enderror +
+
+ + @php + $inputDataJaminan = []; + + $inputDataJaminan = [ + ['label' => 'Nomor Lambung', 'index' => 0], + ['label' => 'Model Unit', 'index' => 1], + ['label' => 'Tahun Pembuatan', 'index' => 2], + ['label' => 'Merk', 'index' => 3], + ['label' => 'Negara Pembuat', 'index' => 4], + ['label' => 'Tahun Pembelian', 'index' => 5], + ['label' => 'Nomor Faktur/Invoice', 'index' => 6], + ['label' => 'Nomor Kontrak Pembelian', 'index' => 7], + ['label' => 'Nama Pemilik', 'index' => 8], + ['label' => 'Alamaat Pemilik', 'index' => 9], + ['label' => 'Nomor Asuransi', 'index' => 10], + ['label' => 'Nomor Rangka', 'index' => 11], + ['label' => 'Nomor Mesin', 'index' => 12], + ['label' => 'Hour Mesin', 'index' => 13], + ['label' => 'Overhaul Mesin', 'index' => 14], + ]; + + @endphp + + @if (count($inputDataJaminan) > 0) + @foreach ($inputDataJaminan as $item) + +
+ +
+ + + @error('bentuk_tanah') + {{ $message }} + @enderror +
+
+ @endforeach + @endif +
+
+ + + +
+
+

Kondisi Objek Jaminan

+
+
+
+ +
+ + + @error('hadapMataAngin') + {{ $message }} + @enderror +
+
+ + @php + $kondisiObjeck = []; + + $kondisiObjeck = [ + ['label' => 'Mesin dan Panel Instrument', 'index' => 0], + ['label' => 'Fungsi mesin dan panel instrument', 'index' => 1], + ['label' => 'Interior (jok, dll)', 'index' => 2], + ['label' => 'Rangka dan Karoseri', 'index' => 3], + ['label' => 'Ban', 'index' => 4], + ['label' => 'Velg', 'index' => 5], + ['label' => 'Air Conditioner', 'index' => 6], + ['label' => 'Aksesoris Tambahan lainnya', 'index' => 7], + ['label' => 'LCD', 'index' => 8], + ['label' => 'Perlengkapan Keamanan', 'index' => 9], + ['label' => 'Asuransi', 'index' => 10], + ]; + + @endphp + + @if (count($kondisiObjeck) > 0) + @foreach ($kondisiObjeck as $item) + +
+ +
+ + + @error('bentuk_tanah') + {{ $message }} + @enderror +
+
+ @endforeach + @endif +
+
diff --git a/resources/views/surveyor/components/apartemen-kantor.blade.php b/resources/views/surveyor/components/apartemen-kantor.blade.php index 05e0adb..28cb7e8 100644 --- a/resources/views/surveyor/components/apartemen-kantor.blade.php +++ b/resources/views/surveyor/components/apartemen-kantor.blade.php @@ -1,5 +1,5 @@
-
+

Analisa Unit

@@ -104,8 +104,8 @@ class="input tomselect w-full @error('lantai') border-danger bg-danger-light @enderror" name="lantai"> - @if (isset($posisiKavling)) - @foreach ($posisiKavling as $item) + @if (isset($lantai)) + @foreach ($lantai as $item) @endforeach @endif @@ -126,8 +126,8 @@ class="input tomselect w-full @error('view') border-danger bg-danger-light @enderror" name="view"> - @if (isset($kondisiFisikTanah)) - @foreach ($kondisiFisikTanah as $item) + @if (isset($viewUnit)) + @foreach ($viewUnit as $item) @endforeach @endif @@ -146,8 +146,8 @@ class="input tomselect w-full @error('bentuk_unit') border-danger bg-danger-light @enderror" name="bentuk_unit"> - @if (isset($kondisiFisikTanah)) - @foreach ($kondisiFisikTanah as $item) + @if (isset($bentukTanah)) + @foreach ($bentukTanah as $item) @endforeach @endif diff --git a/resources/views/surveyor/components/foto.blade.php b/resources/views/surveyor/components/foto.blade.php index 4ca2845..b31698f 100644 --- a/resources/views/surveyor/components/foto.blade.php +++ b/resources/views/surveyor/components/foto.blade.php @@ -5,6 +5,7 @@ @endsection --}} @section('content') +
@@ -120,7 +121,6 @@
-
+ +

Rute Menuju Lokasi

@@ -177,25 +179,33 @@ @if (isset($fotoJaminan)) @foreach ($fotoJaminan->ruteJaminan as $item) - + @if (isset($item->foto_rute)) + Gambar Pendamping + @endif
- @if (isset($item->foto_rute)) - Gambar Pendamping - @endif - - - -
+ +
+ + + +
+ + +
@error('foto_rute.*') {{ $message }} @@ -211,9 +221,17 @@ - - + +
+ + + +
+
+
@@ -289,7 +314,7 @@
-
+
@@ -336,10 +361,16 @@ - - +
+ + + +
+
+
+ +
+
+ + + + + @endsection @push('scripts') + + + + @include('lpj::surveyor.js.camera-editor') +@endpush diff --git a/routes/breadcrumbs.php b/routes/breadcrumbs.php index 556342e..2ea8c02 100644 --- a/routes/breadcrumbs.php +++ b/routes/breadcrumbs.php @@ -550,7 +550,8 @@ Breadcrumbs::for('basicdata.editData', function (BreadcrumbTrail $trail, $type = $otorisatorSurveyor = [ 'pelaporan' => 'Pelaporan', 'pembayaran' => 'Pembayaran', - 'pembayaran' => 'Pembayaran' + 'pembatalan' => 'Pembatalan', + 'sla' => 'SLA', ]; foreach ($otorisatorSurveyor as $route => $title) { From cd3b7301fce87d0affc4818042193505de023983 Mon Sep 17 00:00:00 2001 From: Daeng Deni Mardaeni Date: Mon, 4 Nov 2024 16:32:55 +0700 Subject: [PATCH 03/45] Change 'Kode Penawaran' column to 'Nama Debitur' Renamed the 'Kode Penawaran' field to 'Nama Debitur' in the table header and datatable configuration, including the necessary rendering function to display the debiture name correctly. This improves clarity by accurately reflecting the data being displayed in the column. --- resources/views/prosespenawaran/index.blade.php | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/resources/views/prosespenawaran/index.blade.php b/resources/views/prosespenawaran/index.blade.php index 67e4ccb..dd9d260 100644 --- a/resources/views/prosespenawaran/index.blade.php +++ b/resources/views/prosespenawaran/index.blade.php @@ -38,8 +38,8 @@ Nomor Registrasi - - Kode Penawaran + + Nama Debitur @@ -132,8 +132,11 @@ 'nomor_registrasi': { title: 'Nomor Registrasi', }, - code: { - title: 'Kode Penawaran', + debiture: { + title: 'Nama Debitur', + render: (item, data) => { + return `${data.debiture.name}` + } }, start_date: { title: 'Tanggal Penawaran', From e8ff13ce6a54104259e939fdd53360eedd5a1d90 Mon Sep 17 00:00:00 2001 From: Daeng Deni Mardaeni Date: Mon, 4 Nov 2024 16:53:16 +0700 Subject: [PATCH 04/45] Fix data retrieval and error handling in ProsesPenawaran Enhanced data fetching to include 'permohonan' and 'debiture' relations. Improved error messaging and validations in multiple methods, ensuring more robust data processing. Removed unnecessary whitespace for code clarity. --- .../Controllers/ProsesPenawaranController.php | 56 +++++++++---------- .../views/prosespenawaran/index.blade.php | 7 ++- 2 files changed, 34 insertions(+), 29 deletions(-) diff --git a/app/Http/Controllers/ProsesPenawaranController.php b/app/Http/Controllers/ProsesPenawaranController.php index a37669b..18929fb 100644 --- a/app/Http/Controllers/ProsesPenawaranController.php +++ b/app/Http/Controllers/ProsesPenawaranController.php @@ -75,7 +75,7 @@ class ProsesPenawaranController extends Controller // Get the data for the current page //$data = $query->with(['user', 'debiture', 'branch', 'tujuanPenilaian'])->get(); - $data = $query->with(['tujuanPenilaianKJPP'])->get(); + $data = $query->with(['tujuanPenilaianKJPP','permohonan','permohonan.debiture'])->get(); // Calculate the page count $pageCount = ceil($totalRecords / $request->get('size')); @@ -110,13 +110,13 @@ class ProsesPenawaranController extends Controller $id = $request->id; $penawaran = PenawaranTender::find($id); $penawrandetails = PenawaranDetailTender::where('penawaran_id','=',$id) - ->leftJoin('kjpp', 'kjpp.id', '=', 'detail_penawaran.kjpp_rekanan_id') + ->leftJoin('kjpp', 'kjpp.id', '=', 'detail_penawaran.kjpp_rekanan_id') ->select('detail_penawaran.*', 'kjpp.code AS kjpp_code', 'kjpp.name AS kjpp_name') ->where('detail_penawaran.status','=',1) ->get(); - + if ($penawaran) { - + $i=0; foreach($penawrandetails as $obj) { @@ -156,11 +156,11 @@ class ProsesPenawaranController extends Controller $dataPenawaranDetail = array(); if (request()->ajax()) { $validator = ProsesPenawaranController::rulesEditnya($request, $id); - + if ($validator['fails']) { $data['message'] = $validator['errors']; $data['status'] = 'error'; - } + } else { try { @@ -174,9 +174,9 @@ class ProsesPenawaranController extends Controller { $file_tmp = $request->file('dokumen_persetujuan'); $folderPath = 'uploads/penawaran/'; - if ($file_tmp->isValid()) + if ($file_tmp->isValid()) { - $myFile=$file_tmp->getClientOriginalName(); // nama file with extension + $myFile=$file_tmp->getClientOriginalName(); // nama file with extension $file_name = pathinfo($myFile, PATHINFO_FILENAME); // nama file without extension $extension = $file_tmp->getClientOriginalExtension(); @@ -205,16 +205,16 @@ class ProsesPenawaranController extends Controller { $data['status'] = 'error'; $data['message'] ['check_file'] = array("Silahkan upload file"); - + } - + } catch (Exception $e) { - + $data['status'] = 'error'; $data['message'] ['message_error_try_catch'] = array('Proses Penawarn KJPP failed.'); } } - + } else { $data['status'] = 'error'; $data['message'] ['message_ajax'] = array("no ajax request"); @@ -257,12 +257,12 @@ class ProsesPenawaranController extends Controller $dataPenawaran = array(); $penawaran = PenawaranTender::find($id); $checkActiveDateRange = checkActiveDateRangePenawaran($id); - + // cek masa aktif penawaran if($checkActiveDateRange) { - - $checkKelengkapanDetailKJPP = checkKelengkapanDetailKJPP($id); + + $checkKelengkapanDetailKJPP = checkKelengkapanDetailKJPP($id); if($checkKelengkapanDetailKJPP) { DB::beginTransaction(); @@ -271,43 +271,43 @@ class ProsesPenawaranController extends Controller 'updated_by' => Auth::id(), 'updated_at' => now() ]; - + $dataPermohonan = ['status' => 'persetujuan-penawaran', 'updated_by' => Auth::id(), 'updated_at' => now() ]; - + $permohonan = Permohonan::where('nomor_registrasi','=', $penawaran->nomor_registrasi)->first(); - - $penawaran->update($dataPenawaran); - $permohonan->update($dataPermohonan); - + + $penawaran->update($dataPenawaran); + $permohonan->update($dataPermohonan); + DB::commit(); - + $data['message'] ['message_success'] = array('Sukses melakukan Proses Penawaran'); $data['status'] = 'success'; - + } catch (Exception $e) { DB::rollBack(); // dd($e); $data['message'] ['message_error_try_catch'] = array("Gagal melakukan Proses Penawaran"); $data['status'] = 'error'; } - + } else { $data['message'] ['cek_kelengkapan_data'] = array("Silahkan lengkapi data KJPP"); $data['status'] = 'error'; } - + } else { $data['message'] ['active_date_range'] = array("Penawaran sudah di tutup"); $data['status'] = 'error'; } - + return response()->json($data); } @@ -326,12 +326,12 @@ class ProsesPenawaranController extends Controller 'updated_at' => now() ]; - $detailpenawaran->update($dataDetailPenawaran); + $detailpenawaran->update($dataDetailPenawaran); $data['status'] = 'success'; $data['message'] ['message_success'] = array('Sukses delete Penawaran KJPP '.$request->kjppName); } catch (Exception $e) { - + $data['status'] = 'error'; $data['message'] ['message_error_try_catch'] = array("Gagal delete Penawaran KJPP ".$request->kjppName); } diff --git a/resources/views/prosespenawaran/index.blade.php b/resources/views/prosespenawaran/index.blade.php index dd9d260..88ca76f 100644 --- a/resources/views/prosespenawaran/index.blade.php +++ b/resources/views/prosespenawaran/index.blade.php @@ -135,8 +135,13 @@ debiture: { title: 'Nama Debitur', render: (item, data) => { - return `${data.debiture.name}` + if(data.permohonan) { + return `${data.permohonan.debiture.name}`; + } + return "-"; } + + }, start_date: { title: 'Tanggal Penawaran', From 19ad8fad76389757a2cccf2f5898055eb9a45d53 Mon Sep 17 00:00:00 2001 From: Daeng Deni Mardaeni Date: Mon, 4 Nov 2024 17:04:44 +0700 Subject: [PATCH 05/45] Update penawaran status to 'proposal-tender' Changed the status filter from 'persetujuan-penawaran' to 'proposal-tender' in multiple controllers, ensuring consistency in status management throughout the application. Also corrected some trailing whitespaces and improved code readability. --- .../OtorisasiPenawaranController.php | 40 ++++++++-------- .../Controllers/ProsesPenawaranController.php | 11 ++--- .../ProsesPenawaranUlangController.php | 46 +++++++++---------- 3 files changed, 46 insertions(+), 51 deletions(-) diff --git a/app/Http/Controllers/OtorisasiPenawaranController.php b/app/Http/Controllers/OtorisasiPenawaranController.php index 91762f2..66180ed 100644 --- a/app/Http/Controllers/OtorisasiPenawaranController.php +++ b/app/Http/Controllers/OtorisasiPenawaranController.php @@ -42,16 +42,16 @@ class OtorisasiPenawaranController extends Controller $query =PenawaranTender::query() ->select('penawaran.*',DB::raw("CONCAT(DATE_FORMAT(penawaran.start_date, '%d %M %Y'), ' - ', DATE_FORMAT(penawaran.end_date, '%d %M %Y')) AS date_range"), 'tujuan_penilaian_kjpp.name as tujuan_penilaian_kjpp_name') ->leftJoin('tujuan_penilaian_kjpp', 'tujuan_penilaian_kjpp.id','=','penawaran.tujuan_penilaian_kjpp_id') - ->where('penawaran.status','=','persetujuan-penawaran') - ->withCount('penawarandetails'); - + ->where('penawaran.status','=','proposal-tender') + ->withCount('penawarandetails'); + // Apply search filter if provided if ($request->has('search') && !empty($request->get('search'))) { $search = $request->get('search'); $query->where(function ($q) use ($search) { $q->where('nomor_registrasi', 'LIKE', '%' . $search . '%'); $q->orWhere('tanggal_permohonan', 'LIKE', '%' . $search . '%'); - + $q->orWhere('status', 'LIKE', '%' . $search . '%'); }); } @@ -114,19 +114,19 @@ class OtorisasiPenawaranController extends Controller if (request()->ajax()) { $id = $request->id; - $penawaran = PenawaranTender::where('status','=','persetujuan-penawaran')->find($id); - + $penawaran = PenawaranTender::where('status','=','proposal-tender')->find($id); + if ($penawaran) { $penawarandetailLogs = PenawaranDetailTenderLog::where('penawaran_id',$id) - ->leftJoin('kjpp', 'kjpp.id', '=', 'detail_penawaran_logs.kjpp_rekanan_id') + ->leftJoin('kjpp', 'kjpp.id', '=', 'detail_penawaran_logs.kjpp_rekanan_id') ->select('detail_penawaran_logs.*', DB::raw("DATE_FORMAT(detail_penawaran_logs.created_at, '%d-%m-%Y %H:%i') AS created_at2"),'kjpp.code AS kjpp_code', 'kjpp.name AS kjpp_name') ->get(); $penawrandetails = PenawaranDetailTender::where('penawaran_id','=',$id) - ->leftJoin('kjpp', 'kjpp.id', '=', 'detail_penawaran.kjpp_rekanan_id') + ->leftJoin('kjpp', 'kjpp.id', '=', 'detail_penawaran.kjpp_rekanan_id') ->select('detail_penawaran.*', 'kjpp.code AS kjpp_code', 'kjpp.name AS kjpp_name') ->where('detail_penawaran.status','=',1) ->get(); - + if(sizeof($penawarandetailLogs)>0) { $h=0; @@ -139,8 +139,8 @@ class OtorisasiPenawaranController extends Controller } $h++; } - - } + + } $i=0; foreach($penawrandetails as $obj) @@ -149,17 +149,17 @@ class OtorisasiPenawaranController extends Controller { $penawrandetails_path = Storage::url($obj->dokumen_persetujuan); $penawrandetails[$i]->dokumen_persetujuan = $penawrandetails_path; - + } $i++; } - + $penawaranString = ""; if($penawaran->status) { $penawaranString = convertSlug($penawaran->status); $penawaran->status = $penawaranString; - } + } $kjpp=null; $kjpp = KJPP::pluck('name', 'id'); @@ -202,11 +202,11 @@ class OtorisasiPenawaranController extends Controller // update status Penawaran menjadi SPK // update status Permohonan menjadi SPK // insert detail_permohonan_log - + PenawaranDetailTender::where('status', 1) ->where('penawaran_id', $request->penawaran_id) ->whereNotIn('id', [$id]) - ->update(['status' => 2, + ->update(['status' => 2, 'updated_by' => Auth::id(), 'updated_at' => now() ]); @@ -228,12 +228,12 @@ class OtorisasiPenawaranController extends Controller 'updated_by' => Auth::id(), 'updated_at' => now() ]); - + // log $detailPenawaran = PenawaranDetailTender::where('penawaran_id', $request->penawaran_id)->get(); if(sizeof($detailPenawaran)>0) { - + foreach ($detailPenawaran as $model) { array_push($dataDetailPenawaranLog, [ 'detail_penawaran_id' =>$model->id, @@ -248,12 +248,12 @@ class OtorisasiPenawaranController extends Controller 'authorized_at' =>$model->authorized_at, 'created_at' =>$model->created_at, 'updated_at' =>$model->updated_at, - 'deleted_at' =>$model->deleted_at, + 'deleted_at' =>$model->deleted_at, 'created_by' =>$model->created_by, 'updated_by' =>$model->updated_by, 'deleted_by' =>$model->deleted_by ]); - + } PenawaranDetailTenderLog::insert($dataDetailPenawaranLog); diff --git a/app/Http/Controllers/ProsesPenawaranController.php b/app/Http/Controllers/ProsesPenawaranController.php index 18929fb..d8a5e9b 100644 --- a/app/Http/Controllers/ProsesPenawaranController.php +++ b/app/Http/Controllers/ProsesPenawaranController.php @@ -267,20 +267,15 @@ class ProsesPenawaranController extends Controller { DB::beginTransaction(); try { - $dataPenawaran = ['status' => 'persetujuan-penawaran', - 'updated_by' => Auth::id(), - 'updated_at' => now() - ]; - - $dataPermohonan = ['status' => 'persetujuan-penawaran', + $_updatestatus = ['status' => 'proposal-tender', 'updated_by' => Auth::id(), 'updated_at' => now() ]; $permohonan = Permohonan::where('nomor_registrasi','=', $penawaran->nomor_registrasi)->first(); - $penawaran->update($dataPenawaran); - $permohonan->update($dataPermohonan); + $penawaran->update($_updatestatus); + $permohonan->update($_updatestatus); DB::commit(); diff --git a/app/Http/Controllers/ProsesPenawaranUlangController.php b/app/Http/Controllers/ProsesPenawaranUlangController.php index f34ee70..c6aa41b 100644 --- a/app/Http/Controllers/ProsesPenawaranUlangController.php +++ b/app/Http/Controllers/ProsesPenawaranUlangController.php @@ -41,16 +41,16 @@ class ProsesPenawaranUlangController extends Controller $query =PenawaranTender::query() ->select('penawaran.*',DB::raw("CONCAT(DATE_FORMAT(penawaran.start_date, '%d %M %Y'), ' - ', DATE_FORMAT(penawaran.end_date, '%d %M %Y')) AS date_range"), 'tujuan_penilaian_kjpp.name as tujuan_penilaian_kjpp_name') ->leftJoin('tujuan_penilaian_kjpp', 'tujuan_penilaian_kjpp.id','=','penawaran.tujuan_penilaian_kjpp_id') - ->where('penawaran.status','=','persetujuan-penawaran') - ->withCount('penawarandetails'); - + ->where('penawaran.status','=','proposal-tender') + ->withCount('penawarandetails'); + // Apply search filter if provided if ($request->has('search') && !empty($request->get('search'))) { $search = $request->get('search'); $query->where(function ($q) use ($search) { $q->where('nomor_registrasi', 'LIKE', '%' . $search . '%'); $q->orWhere('tanggal_permohonan', 'LIKE', '%' . $search . '%'); - + $q->orWhere('status', 'LIKE', '%' . $search . '%'); }); } @@ -118,11 +118,11 @@ class ProsesPenawaranUlangController extends Controller if (request()->ajax()) { $id = $request->id; - $penawaran = PenawaranTender::where('status','=','persetujuan-penawaran')->find($id); - + $penawaran = PenawaranTender::where('status','=','proposal-tender')->find($id); + if ($penawaran) { $penawrandetails = PenawaranDetailTender::where('penawaran_id','=',$id) - ->leftJoin('kjpp', 'kjpp.id', '=', 'detail_penawaran.kjpp_rekanan_id') + ->leftJoin('kjpp', 'kjpp.id', '=', 'detail_penawaran.kjpp_rekanan_id') ->select('detail_penawaran.*', 'kjpp.code AS kjpp_code', 'kjpp.name AS kjpp_name') ->where('detail_penawaran.status','=',1) ->get(); @@ -143,7 +143,7 @@ class ProsesPenawaranUlangController extends Controller { $penawaranString = convertSlug($penawaran->status); $penawaran->status = $penawaranString; - } + } $data['penawaran'] = $penawaran; $data['penawrandetails'] = $penawrandetails; @@ -176,7 +176,7 @@ class ProsesPenawaranUlangController extends Controller if ($validator['fails']) { $data['message'] = $validator['errors']; $data['status'] = 'error'; - } + } else { // cek masa aktif penawaran @@ -187,7 +187,7 @@ class ProsesPenawaranUlangController extends Controller { DB::beginTransaction(); try { - + $dataDetailPenawaranLog = [ 'detail_penawaran_id' =>$detailpenawaran->id, 'kjpp_rekanan_id' =>$detailpenawaran->kjpp_rekanan_id, @@ -201,15 +201,15 @@ class ProsesPenawaranUlangController extends Controller 'authorized_at' =>$detailpenawaran->authorized_at, 'created_at' =>$detailpenawaran->created_at, 'updated_at' =>$detailpenawaran->updated_at, - 'deleted_at' =>$detailpenawaran->deleted_at, + 'deleted_at' =>$detailpenawaran->deleted_at, 'created_by' =>$detailpenawaran->created_by, 'updated_by' =>$detailpenawaran->updated_by, 'deleted_by' =>$detailpenawaran->deleted_by ]; - + PenawaranDetailTenderLog::create($dataDetailPenawaranLog); - + $biaya_penawaran=""; if($request->biaya_penawaran) $biaya_penawaran= str_replace(".","",$request->biaya_penawaran); @@ -222,9 +222,9 @@ class ProsesPenawaranUlangController extends Controller { $file_tmp = $request->file('dokumen_persetujuan'); $folderPath = 'uploads/penawaran/'; - if ($file_tmp->isValid()) + if ($file_tmp->isValid()) { - $myFile=$file_tmp->getClientOriginalName(); // nama file with extension + $myFile=$file_tmp->getClientOriginalName(); // nama file with extension $file_name = pathinfo($myFile, PATHINFO_FILENAME); // nama file without extension $extension = $file_tmp->getClientOriginalExtension(); @@ -247,9 +247,9 @@ class ProsesPenawaranUlangController extends Controller { $data['status'] = 'error'; $data['message']['check_file'] = array("Silahkan upload file"); - + } - + $detailpenawaran->update($dataDetailPenawaran); if($pleaseCommit) @@ -279,7 +279,7 @@ class ProsesPenawaranUlangController extends Controller $data['status'] = 'error'; $data['message']['active_date_range'] = array("Penawaran sudah di tutup"); } - + } } else { @@ -288,7 +288,7 @@ class ProsesPenawaranUlangController extends Controller } return response()->json($data); - } + } // delete KJPP di detail_penawaran (status di buat 0) public function updateKJPPStatus(Request $request, $id): JsonResponse @@ -316,16 +316,16 @@ class ProsesPenawaranUlangController extends Controller 'authorized_at' =>$model->authorized_at, 'created_at' =>$model->created_at, 'updated_at' =>$model->updated_at, - 'deleted_at' =>$model->deleted_at, + 'deleted_at' =>$model->deleted_at, 'created_by' =>$model->created_by, 'updated_by' =>$model->updated_by, 'deleted_by' =>$model->deleted_by ]; - + PenawaranDetailTenderLog::create($dataDetailPenawaranLog); // log - + $data['id']=$id; $dataku = ['status' => '0', @@ -333,7 +333,7 @@ class ProsesPenawaranUlangController extends Controller 'updated_at' => now() ]; - $model->update($dataku); + $model->update($dataku); DB::commit(); $data['status'] = 'success'; From 2903280424ce5ebe51afa6f753dfb12da7eb2d01 Mon Sep 17 00:00:00 2001 From: Daeng Deni Mardaeni Date: Mon, 4 Nov 2024 17:22:42 +0700 Subject: [PATCH 06/45] Refactor JS formatting and update icon in edit views Standardize the JavaScript code formatting across editjs.blade.php files and replace the 'notepad-edit' icon with 'bookmark' for update actions. This enhances code readability and consistency while providing a more appropriate icon for the update functionality. --- .../views/prosespenawaran/js/editjs.blade.php | 38 +++++++++---------- .../prosespenawaranulang/js/editjs.blade.php | 26 ++++++------- 2 files changed, 32 insertions(+), 32 deletions(-) diff --git a/resources/views/prosespenawaran/js/editjs.blade.php b/resources/views/prosespenawaran/js/editjs.blade.php index 58dd528..34a98c6 100644 --- a/resources/views/prosespenawaran/js/editjs.blade.php +++ b/resources/views/prosespenawaran/js/editjs.blade.php @@ -1,19 +1,19 @@ @push('scripts') @include('lpj::assetsku.includenya') - @include('lpj::prosespenawaran.js.editextjs') - -@endpush \ No newline at end of file +@endpush diff --git a/resources/views/prosespenawaranulang/js/editjs.blade.php b/resources/views/prosespenawaranulang/js/editjs.blade.php index 7d8d9da..0bde8e5 100644 --- a/resources/views/prosespenawaranulang/js/editjs.blade.php +++ b/resources/views/prosespenawaranulang/js/editjs.blade.php @@ -1,19 +1,19 @@ @push('scripts') @include('lpj::assetsku.includenya') - @include('lpj::prosespenawaranulang.js.editextjs') - -@endpush \ No newline at end of file +@endpush From d2afeaa845ecfa083cb672b18808f9b3653aec1f Mon Sep 17 00:00:00 2001 From: Andy Chaerudin Date: Mon, 4 Nov 2024 19:12:57 +0700 Subject: [PATCH 07/45] add feature SPK --- app/Http/Controllers/SpkController.php | 226 +++++++++++++++++++++- module.json | 9 + resources/views/spk/documentSPK.blade.php | 189 ++++++++++++++++++ resources/views/spk/dokumennya.blade.php | 185 ++++++++++++++++++ resources/views/spk/edit.blade.php | 211 ++++++++++++++++++++ resources/views/spk/index.blade.php | 207 +++++++++++--------- resources/views/spk/js/editjs.blade.php | 39 ++++ routes/breadcrumbs.php | 9 + routes/registrasi.php | 10 + routes/web.php | 13 -- 10 files changed, 989 insertions(+), 109 deletions(-) create mode 100644 resources/views/spk/documentSPK.blade.php create mode 100644 resources/views/spk/dokumennya.blade.php create mode 100644 resources/views/spk/edit.blade.php create mode 100644 resources/views/spk/js/editjs.blade.php diff --git a/app/Http/Controllers/SpkController.php b/app/Http/Controllers/SpkController.php index 5b4d9de..ec96a62 100644 --- a/app/Http/Controllers/SpkController.php +++ b/app/Http/Controllers/SpkController.php @@ -1,14 +1,22 @@ user) || !$this->user->can('debitur.view')) { + //abort(403, 'Sorry! You are not allowed to view users.'); + } + + // Retrieve data from the database + $query =Permohonan::query() + ->leftJoin('penawaran', 'penawaran.nomor_registrasi','=','permohonan.nomor_registrasi') + ->leftJoin('tujuan_penilaian_kjpp', 'tujuan_penilaian_kjpp.id','=','penawaran.tujuan_penilaian_kjpp_id') + ->where('permohonan.status','=','spk') + ->select('penawaran.*', 'tujuan_penilaian_kjpp.name as tujuan_penilaian_kjpp_name', 'permohonan.dokumen as dokumenSPK'); + + // Apply search filter if provided + if ($request->has('search') && !empty($request->get('search'))) { + $search = $request->get('search'); + $query->where(function ($q) use ($search) { + $q->where('nomor_registrasi', 'LIKE', '%' . $search . '%'); + $q->orWhere('tanggal_permohonan', 'LIKE', '%' . $search . '%'); + + $q->orWhere('status', 'LIKE', '%' . $search . '%'); + }); + } + + // Apply sorting if provided + if ($request->has('sortOrder') && !empty($request->get('sortOrder'))) { + $order = $request->get('sortOrder'); + $column = $request->get('sortField'); + $query->orderBy($column, $order); + } + + // Get the total count of records + $totalRecords = $query->count(); + + // Apply pagination if provided + if ($request->has('page') && $request->has('size')) { + $page = $request->get('page'); + $size = $request->get('size'); + $offset = ($page - 1) * $size; // Calculate the offset + + $query->skip($offset)->take($size); + } + + // Get the filtered count of records + $filteredRecords = $query->count(); + + // Get the data for the current page + //$data = $query->with(['user', 'debiture', 'branch', 'tujuanPenilaian'])->get(); + + $data = $query->get(); + + $i=0; + foreach($data as $obj) + { + if($obj->tanggal_penilaian_sebelumnya) + { + $data[$i]->tanggal_penilaian_sebelumnya = Carbon::parse($obj->tanggal_penilaian_sebelumnya)->format('d F Y H:i:s'); + } + + if($obj->biaya_kjpp_sebelumnya) + { + $data[$i]->biaya_kjpp_sebelumnya = formatRupiah($obj->biaya_kjpp_sebelumnya); + + } + + // date_range + if($obj->start_date && $obj->end_date) + { + $data[$i]->date_range = Carbon::parse($obj->start_date)->format('d M Y').' - '.Carbon::parse($obj->end_date)->format('d M Y'); + + } + + $i++; + } + + + // Calculate the page count + $pageCount = ceil($totalRecords / $request->get('size')); + + // Calculate the current page number + $currentPage = 0 + 1; + + // Return the response data as a JSON object + return response()->json([ + 'draw' => $request->get('draw'), + 'recordsTotal' => $totalRecords, + 'recordsFiltered' => $filteredRecords, + 'pageCount' => $pageCount, + 'page' => $currentPage, + 'totalCount' => $totalRecords, + 'data' => $data + ]); + } + public function viewSpk() { // return Excel::download(new TujuanPenilaianExport, 'tujuan_penilaian.xlsx'); return view('lpj::spk.view'); } + + public function show($id) + { + $penawaran = PenawaranTender::find($id); + // return view('lpj::spk.show', compact('id','permohonan')); + } + + public function edit($id) + { + $penawaran = PenawaranTender::leftJoin('detail_penawaran', 'detail_penawaran.penawaran_id','=','penawaran.id') + ->leftJoin('jenis_laporan', 'jenis_laporan.id','=','penawaran.jenis_laporan_id') + ->leftJoin('kjpp', 'kjpp.id','=','detail_penawaran.kjpp_rekanan_id') + ->where('detail_penawaran.status','=',1) + ->where('penawaran.id','=', $id) + ->select('penawaran.*', 'detail_penawaran.attachment as attachmentku', + 'detail_penawaran.biaya_penawaran as detail_penawaran_biaya_penawaran', + 'kjpp.name as kjpp_name', + 'kjpp.address as kjpp_address', + 'jenis_laporan.name as jenis_laporan_name' + )->first(); + + $permohonan = Permohonan::where('nomor_registrasi','=',$penawaran->nomor_registrasi) + ->leftJoin('dokumen_jaminan', 'dokumen_jaminan.permohonan_id','=','permohonan.id') + ->leftJoin('jenis_jaminan', 'jenis_jaminan.id','=','dokumen_jaminan.jenis_jaminan_id') + ->select('permohonan.*', 'jenis_jaminan.name as jenis_jaminan_name', + 'dokumen_jaminan.address as dokumen_jaminan_address'); + + $data = $permohonan->with(['user', 'debiture', 'branch', 'tujuanPenilaian'])->first(); + + return view('lpj::spk.edit', compact('data', 'penawaran')); + } + + public function update(Request $request, $id): JsonResponse + { + // init + $data1 = array(); + $dataPermohonan = array(); + // data + + $penawaran = PenawaranTender::leftJoin('detail_penawaran', 'detail_penawaran.penawaran_id','=','penawaran.id') + ->leftJoin('jenis_laporan', 'jenis_laporan.id','=','penawaran.jenis_laporan_id') + ->leftJoin('kjpp', 'kjpp.id','=','detail_penawaran.kjpp_rekanan_id') + ->where('detail_penawaran.status','=',1) + ->where('penawaran.id','=', $id) + ->select('penawaran.*', 'detail_penawaran.attachment as attachmentku', + 'kjpp.name as kjpp_name', + 'kjpp.address as kjpp_address', + 'jenis_laporan.name as jenis_laporan_name' + )->first(); + + $permohonan = Permohonan::where('nomor_registrasi','=',$penawaran->nomor_registrasi) + ->leftJoin('dokumen_jaminan', 'dokumen_jaminan.permohonan_id','=','permohonan.id') + ->leftJoin('jenis_jaminan', 'jenis_jaminan.id','=','dokumen_jaminan.jenis_jaminan_id') + ->select('permohonan.*', 'jenis_jaminan.name as jenis_jaminan_name'); + + $data = $permohonan->with(['user', 'debiture', 'branch', 'tujuanPenilaian'])->first(); + + $folderPath = 'uploads/spk/'; + $extension = '.pdf'; + $newFileName = "SPK_".$penawaran->nomor_registrasi."_".Auth::user()->id."_".time(). $extension; + $newFileNameWithPath = $folderPath . $newFileName; + + // update table permohonan + $dataPermohonan=['dokumen' => $newFileNameWithPath]; + $data->update($dataPermohonan); + // update table permohonan + + // pdf path + $spkpenawaran_path = Storage::url($newFileNameWithPath); + + $pdf =Pdf::loadView('lpj::spk.documentSPK', compact('data', 'penawaran')); + + $content = $pdf->download()->getOriginalContent(); + Storage::put('public/'.$newFileNameWithPath,$content); + + $data1['status'] = 'success'; + $data1['spkpenawaran_path'] = $spkpenawaran_path; + $data1['message']['message_success'] = array('Generate SPK PDF successfully'); + + return response()->json($data1); + } + + public function dokumennya() + { + // return view('lpj::spk.dokumennya'); + $id="3"; + $penawaran = PenawaranTender::leftJoin('detail_penawaran', 'detail_penawaran.penawaran_id','=','penawaran.id') + ->leftJoin('jenis_laporan', 'jenis_laporan.id','=','penawaran.jenis_laporan_id') + ->leftJoin('kjpp', 'kjpp.id','=','detail_penawaran.kjpp_rekanan_id') + ->where('detail_penawaran.status','=',1) + ->where('penawaran.id','=', $id) + ->select('penawaran.*', 'detail_penawaran.attachment as attachmentku', + 'detail_penawaran.biaya_penawaran as detail_penawaran_biaya_penawaran', + 'kjpp.name as kjpp_name', + 'kjpp.address as kjpp_address', + 'jenis_laporan.name as jenis_laporan_name' + )->first(); + + $permohonan = Permohonan::where('nomor_registrasi','=',$penawaran->nomor_registrasi) + ->leftJoin('dokumen_jaminan', 'dokumen_jaminan.permohonan_id','=','permohonan.id') + ->leftJoin('jenis_jaminan', 'jenis_jaminan.id','=','dokumen_jaminan.jenis_jaminan_id') + ->select('permohonan.*', 'jenis_jaminan.name as jenis_jaminan_name', + 'dokumen_jaminan.address as dokumen_jaminan_address'); + + $data = $permohonan->with(['user', 'debiture', 'branch', 'tujuanPenilaian'])->first(); + + return view('lpj::spk.dokumennya', compact('data', 'penawaran')); + } } diff --git a/module.json b/module.json index 6ab8ec6..63e608d 100644 --- a/module.json +++ b/module.json @@ -91,6 +91,15 @@ } ] }, + { + "title": "SPK", + "path": "spk", + "icon": "ki-filled ki-file-added text-lg", + "classes": "", + "attributes": [], + "permission": "", + "roles": ["administrator", "admin"] + }, { "title": "Registrasi Final", "path": "registrasifinal", diff --git a/resources/views/spk/documentSPK.blade.php b/resources/views/spk/documentSPK.blade.php new file mode 100644 index 0000000..7fa8ade --- /dev/null +++ b/resources/views/spk/documentSPK.blade.php @@ -0,0 +1,189 @@ + + + + + + + +
+
+ +
+
\ No newline at end of file diff --git a/resources/views/spk/dokumennya.blade.php b/resources/views/spk/dokumennya.blade.php new file mode 100644 index 0000000..f4db8fa --- /dev/null +++ b/resources/views/spk/dokumennya.blade.php @@ -0,0 +1,185 @@ +@php + use Nwidart\Modules\Module; +@endphp +@vite(Module::getAssets()) + @stack('styles') +
+
+ +
+
\ No newline at end of file diff --git a/resources/views/spk/edit.blade.php b/resources/views/spk/edit.blade.php new file mode 100644 index 0000000..6ff8488 --- /dev/null +++ b/resources/views/spk/edit.blade.php @@ -0,0 +1,211 @@ +@extends('layouts.main') + +@section('breadcrumbs') + {{ Breadcrumbs::render(request()->route()->getName()) }} +@endsection +@php + // $route = Route::currentRouteName(); + // dd($route); + $route = explode('.', Route::currentRouteName()); +@endphp + +@section('content') +
+
+
+

Buat SPK

+
+ +
+ +
+
+
+ +
+
+
+
+@endsection +@include('lpj::spk.js.editjs') diff --git a/resources/views/spk/index.blade.php b/resources/views/spk/index.blade.php index fb973a3..65d6e92 100644 --- a/resources/views/spk/index.blade.php +++ b/resources/views/spk/index.blade.php @@ -1,27 +1,26 @@ @extends('layouts.main') @section('breadcrumbs') - {{ Breadcrumbs::render('basicdata.tujuan-penilaian') }} + {{ Breadcrumbs::render('spk') }} @endsection @section('content')
-
+

- SPK Menu + Daftar SPK

@@ -32,12 +31,28 @@ - - No SPK + + Nomor Registrasi - - Perihal + + Kode Penawaran + + + + Tanggal Penawaran + + + + Tujuan Penilaian + + + + KJPP Data + + + + Status Action @@ -62,87 +77,103 @@ @endsection @push('scripts') - - - + + let dataTable = new KTDataTable(element, dataTableOptions); + // Custom search functionality + searchInput.addEventListener('input', function () { + const searchValue = this.value.trim(); + dataTable.search(searchValue, true); + + }); + + @endpush diff --git a/resources/views/spk/js/editjs.blade.php b/resources/views/spk/js/editjs.blade.php new file mode 100644 index 0000000..813e378 --- /dev/null +++ b/resources/views/spk/js/editjs.blade.php @@ -0,0 +1,39 @@ +@push('scripts') + @include('lpj::assetsku.includenya') + +@endpush \ No newline at end of file diff --git a/routes/breadcrumbs.php b/routes/breadcrumbs.php index 39a97be..0f54909 100644 --- a/routes/breadcrumbs.php +++ b/routes/breadcrumbs.php @@ -515,6 +515,15 @@ Breadcrumbs::for('otorisasitender.penawaran.show', function (BreadcrumbTrail $tr $trail->push('Detail Data Otorisasi Penawaran'); }); // andy add Otorisasi Tender +// spk +Breadcrumbs::for('spk', function (BreadcrumbTrail $trail) { + $trail->push('SPK', route('spk.index')); +}); +Breadcrumbs::for('spk.edit', function (BreadcrumbTrail $trail) { + $trail->parent('spk'); + $trail->push('Buat SPK'); +}); +// spk // andy add registrasi final Breadcrumbs::for('registrasifinal', function (BreadcrumbTrail $trail) { $trail->push('Registrasi Final', route('registrasifinal.index')); diff --git a/routes/registrasi.php b/routes/registrasi.php index f8b3893..a9334bd 100644 --- a/routes/registrasi.php +++ b/routes/registrasi.php @@ -4,6 +4,7 @@ use Modules\Lpj\Http\Controllers\RegistrasiController; use Modules\Lpj\Http\Controllers\ProsesPenawaranController; use Modules\Lpj\Http\Controllers\ProsesPenawaranUlangController; use Modules\Lpj\Http\Controllers\OtorisasiPenawaranController; +use Modules\Lpj\Http\Controllers\SpkController; use Modules\Lpj\Http\Controllers\RegistrasiFinalController; Route::middleware(['auth'])->group(function () { @@ -85,6 +86,15 @@ Route::middleware(['auth'])->group(function () { }); }); + Route::controller(SpkController::class)->group(function(){ + Route::get('/spk/dokumennya', 'dokumennya')->name('spk.dokumennya'); + Route::get('/spk', 'index')->name('spk.index'); + Route::get('/spk/datatables', 'dataForDatatables')->name('spk.datatables'); + Route::get('/spk/{spk}', 'show')->name('spk.show'); + Route::get('/spk/{spk}/edit', 'edit')->name('spk.edit'); + Route::put('/spk/{spk}', 'update')->name('spk.update'); + }); + Route::controller(RegistrasiFinalController::class)->group(function(){ Route::get('/registrasifinal', 'index')->name('registrasifinal.index'); Route::get('/registrasifinal/datatables', 'dataForDatatables')->name('registrasifinal.datatables'); diff --git a/routes/web.php b/routes/web.php index 8292c9b..eadf6f9 100644 --- a/routes/web.php +++ b/routes/web.php @@ -27,7 +27,6 @@ use Modules\Lpj\Http\Controllers\TeamsController; use Modules\Lpj\Http\Controllers\TenderController; use Modules\Lpj\Http\Controllers\TujuanPenilaianController; use Modules\Lpj\Http\Controllers\TujuanPenilaianKJPPController; -use Modules\Lpj\Http\Controllers\SpkController; // use Modules\Lpj\Http\Controllers\ActivityController; use Modules\Lpj\Http\Controllers\SurveyorController; @@ -376,18 +375,6 @@ Route::middleware(['auth'])->group(function () { Route::get('export', [PermohonanController::class, 'export'])->name('export'); }); - Route::name('spk.')->prefix('spk')->group(function () { - // Route::get('download', [PermohonanController::class, 'createPermohonan'])->name('create.debitur'); - Route::get('view', [SpkController::class, 'viewSpk'])->name('spk.view'); - // Route::get('{id}/create', [PermohonanController::class, 'createPermohonan'])->name('create.debitur'); - // Route::get('download/{id}', [PermohonanController::class, 'download'])->name('download'); - // Route::get('restore/{id}', [PermohonanController::class, 'restore'])->name('restore'); - // Route::get('datatables', [PermohonanController::class, 'dataForDatatables'])->name('datatables'); - // Route::get('export', [PermohonanController::class, 'export'])->name('export'); - }); - - Route::resource('spk', SpkController::class); - Route::get('authorization', [PermohonanController::class, 'authorization'])->name('authorization.index'); Route::resource('permohonan', PermohonanController::class); From 10c9567b4f1546871b9a5cf39f47cd1aad4b6cbf Mon Sep 17 00:00:00 2001 From: majid Date: Tue, 5 Nov 2024 08:29:27 +0700 Subject: [PATCH 08/45] update assigment lintas region --- app/Http/Controllers/ActivityController.php | 79 ++++-- app/Http/Controllers/PenilaianController.php | 199 ++++++++++--- app/Http/Controllers/SurveyorController.php | 25 +- app/Http/Controllers/TeamsController.php | 4 +- app/Http/Requests/PenilaianRequest.php | 9 +- app/Models/Penilaian.php | 13 +- app/Models/PenilaianTeam.php | 39 +++ app/Models/Permohonan.php | 5 + app/Models/Teams.php | 4 +- ...24227_create_kategori_jenis_aset_table.php | 37 +++ ...24_10_31_032505_update_penilaian_table.php | 38 +++ ...10_31_032940_create_penilai_team_table.php | 38 +++ ...e_kategori_form_analisa_inspeksi_table.php | 38 +++ ...81225_create_label_name_inspeksi_table.php | 28 ++ .../activity/progres_activity/index.blade.php | 20 +- resources/views/penilaian/form.blade.php | 265 +++++++++++------- .../surveyor/components/inspeksi.blade.php | 90 +++--- resources/views/surveyor/detail.blade.php | 2 +- resources/views/surveyor/index.blade.php | 18 +- 19 files changed, 699 insertions(+), 252 deletions(-) create mode 100644 app/Models/PenilaianTeam.php create mode 100644 database/migrations/2024_10_31_024227_create_kategori_jenis_aset_table.php create mode 100644 database/migrations/2024_10_31_032505_update_penilaian_table.php create mode 100644 database/migrations/2024_10_31_032940_create_penilai_team_table.php create mode 100644 database/migrations/2024_11_01_081201_create_kategori_form_analisa_inspeksi_table.php create mode 100644 database/migrations/2024_11_01_081225_create_label_name_inspeksi_table.php diff --git a/app/Http/Controllers/ActivityController.php b/app/Http/Controllers/ActivityController.php index 74bb5f7..816e1e8 100644 --- a/app/Http/Controllers/ActivityController.php +++ b/app/Http/Controllers/ActivityController.php @@ -30,31 +30,44 @@ class ActivityController extends Controller */ - public function progres_activity() - { - // Ambil user yang sedang login - $user = auth()->user(); - $roles = $user->load('roles'); - $regionId = null; + public function progres_activity() + { + // Ambil user yang sedang login + $user = auth()->user(); + $roles = $user->load('roles'); - // Cek apakah user memiliki role 'senior officer' - if ($roles->roles->pluck('name')->contains('senior officer')) { - $regionId = TeamsUsers::with('team.regions') - ->where('user_id', $user->id) - ->first()?->team->regions_id; - } + // Inisialisasi regionId dan teamId sebagai null agar bisa dinamis + $regionId = null; + $teamId = null; - $teamsActivity = TeamsUsers::with(['user', 'team', 'team.regions']) - ->whereHas('team', function ($q) use ($regionId) { - if ($regionId) { - $q->where('regions_id', $regionId); - } - }) - ->where('user_id', '!=', $user->id) - ->get(); + if ($roles->roles->pluck('name')->contains('senior-officer')) { + $userTeam = TeamsUsers::with('team') + ->where('user_id', $user->id) + ->first(); + $regionId = $userTeam?->team->regions_id; + $teamId = $userTeam?->teams_id; + + } + + $teamsActivity = TeamsUsers::with(['user', 'team', 'team.regions', 'user.roles']) + ->whereHas('team', function ($q) use ($regionId, $teamId) { + if ($regionId) { + $q->where('regions_id', $regionId); + } + if ($teamId) { + $q->where('id', $teamId); // Hanya tim yang sama + } + }) + ->where('user_id', '!=', $user->id) + ->whereHas('user.roles', function ($query) { + // Filter hanya peran 'surveyor' atau 'surveyor-penilai' + $query->whereIn('name', ['surveyor', 'surveyor-penilai']); + }) + ->get(); + + return view('lpj::activity.progres_activity.index', compact('teamsActivity')); + } - return view('lpj::activity.progres_activity.index', compact('teamsActivity')); - } public function senior() @@ -194,13 +207,23 @@ class ActivityController extends Controller public function dataTablesForActivity(Request $request, $id) { + + if (is_null($this->user) || !$this->user->can('debitur.view')) { + // abort(403, 'Sorry! You are not allowed to view users.'); + } // Query Penilaian dengan relasi yang diperlukan - $query = Penilaian::with(['permohonan', 'permohonan.debiture', 'permohonan.tujuanPenilaian', 'permohonan.debiture.documents.jenisJaminan']) - ->where(function($q) use ($id) { - $q->where('surveyor_id', $id) - ->orWhere('penilaian_id', $id) - ->orWhere('penilai_surveyor_id', $id); - }); + $query = Penilaian::with([ + 'permohonan', + 'permohonan.debiture', + 'permohonan.tujuanPenilaian', + 'permohonan.debiture.documents.jenisJaminan', + 'userPenilai' + ]) + ->whereHas('userPenilai', function ($q) use ($id) { + $q->where('user_id', $id); + }); + + // Filter pencarian if ($request->has('search') && !empty($request->get('search'))) { diff --git a/app/Http/Controllers/PenilaianController.php b/app/Http/Controllers/PenilaianController.php index c25f341..c0730a6 100644 --- a/app/Http/Controllers/PenilaianController.php +++ b/app/Http/Controllers/PenilaianController.php @@ -5,14 +5,18 @@ namespace Modules\Lpj\Http\Controllers; use App\Http\Controllers\Controller; use Exception; use Illuminate\Http\Request; +use Illuminate\Support\Facades\DB; use Modules\Lpj\Http\Requests\PenilaianRequest; use Modules\Lpj\Models\JenisPenilaian; use Modules\Lpj\Models\Penilaian; +use Modules\Lpj\Models\PenilaianTeam; use Modules\Lpj\Models\Permohonan; use Modules\Lpj\Models\StatusPermohonan; use Modules\Lpj\Models\Teams; +use Modules\Lpj\Models\Regions; use Modules\Lpj\Models\TeamsUsers; use Modules\Usermanagement\Models\User; +use Illuminate\Support\Facades\Auth; class PenilaianController extends Controller { @@ -37,17 +41,84 @@ class PenilaianController extends Controller if ($validatedData) { try { - $penilaian = Penilaian::create($validatedData); + DB::beginTransaction(); + + $penilaian = Penilaian::create($validatedData); + $validatedData['penilaian_id'] = $penilaian->id; + + $teams_ids = []; + $user_ids = []; + $roles = []; + + if ($validatedData['surveyor_id'] === 'pilih_dari_region') { + $surveyor_region_id = $validatedData['surveyor_region_id']; + + // Hapus team_id sebelumnya di Permohonan jika ada + $permohonan = Permohonan::where('nomor_registrasi', $request->nomor_registrasi)->first(); + if ($permohonan) { + $permohonan->update([ + 'region_id' => $surveyor_region_id, + ]); + } + + $teams_ids[] = $surveyor_region_id; + $user_ids[] = null; + $roles[] = 'surveyor'; + } else { + $permohonan = Permohonan::where('nomor_registrasi', $request->nomor_registrasi)->first(); + $teams_ids[] = $validatedData['teams_id']; + $user_ids[] = $validatedData['surveyor_id']; + $roles[] = 'surveyor'; + + } + + if ($validatedData['penilai_id'] === 'pilih_dari_region') { + $penilaian_region_id = $validatedData['penilai_region_id']; + + // Hapus team_id sebelumnya di Permohonan jika ada + $permohonan = Permohonan::where('nomor_registrasi', $request->nomor_registrasi)->first(); + if ($permohonan) { + $permohonan->update([ + 'region_id' => $penilaian_region_id, + ]); + } + + $teams_ids[] = $penilaian_region_id; + $user_ids[] = null; + $roles[] = 'penilai'; + } else { + $permohonan = Permohonan::where('nomor_registrasi', $request->nomor_registrasi)->first(); + $teams_ids[] = $validatedData['teams_id']; + $user_ids[] = $validatedData['penilai_id']; + $roles[] = 'penilai'; + + } + + foreach ($teams_ids as $key => $teams_id) { + PenilaianTeam::create([ + 'penilaian_id' => $validatedData['penilaian_id'], + 'team_id' => $teams_id, + 'user_id' => $user_ids[$key], + 'role' => $roles[$key], + ]); + } + + if ($validatedData['surveyor_id'] === 'pilih_dari_region' || $validatedData['penilai_id'] === 'pilih_dari_region') { + $status = 'registered'; + } else { + $status = 'assign'; + } - $permohonan = Permohonan::where('nomor_registrasi', $request->nomor_registrasi); $permohonan->update([ - 'status' => 'assign', + 'status' => $status, ]); + DB::commit(); + return redirect()->route('penilaian.index')->with('success', 'Penilaian berhasil disimpan'); } catch (Exception $e) { - - return redirect()->route('penilaian.index')->with('error', $e->getMessage()); + DB::rollBack(); + return response()->json(array('error' => $e->getMessage())); } } } @@ -63,22 +134,43 @@ class PenilaianController extends Controller /** * Update the specified resource in storage. */ - public function update(PenilaianRequest $request, $id) + public function update(Request $request, $id) { - $validate = $request->validated(); - if ($validate) { - try { - $penilaian = Penilaian::where('nomor_registrasi', $request->nomor_registrasi)->firstOrFail(); - $penilaian->update($validate); - $permohonan = Permohonan::where('nomor_registrasi', $request->nomor_registrasi); - $permohonan->update([ - 'status' => 'assign', - ]); + try { + DB::beginTransaction(); + $penilaian = Penilaian::where('nomor_registrasi', $request->nomor_registrasi)->first(); + + $penilaianId = $penilaian->id; + + $penilainTeam = PenilaianTeam::where('penilaian_id', $penilaianId)->get(); + + + foreach ($penilainTeam as $item) { + if ($item->role === 'surveyor' && $item->user_id === null) { + $item->update([ + 'user_id' => $request->surveyor_id, + 'role' => 'surveyor', + ]); + } + + if ($item->role === 'penilai' && $item->user_id === null) { + $item->update([ + 'user_id' => $request->penilai_id, + 'role' => 'penilai', + ]); + } - return redirect()->route('penilaian.index', $id)->with('success', 'Penilaian berhasil diubah'); - } catch (Exception $e) { - return redirect()->route('penilaian.index', $id)->with('error', $e->getMessage()); } + + $permohonan = Permohonan::where('nomor_registrasi', $request->nomor_registrasi); + $permohonan->update([ + 'status' => 'assign', + ]); + DB::commit(); + return redirect()->route('penilaian.index')->with('success', 'Penilaian berhasil disimpan'); + } catch (Exception $e) { + DB::rollBack(); + return response()->json(array('error' => $e->getMessage())); } } @@ -87,29 +179,36 @@ class PenilaianController extends Controller */ public function assignment($id) { - $permohonan = Permohonan::with( - [ - 'user', - 'debiture.province', - 'debiture.city', - 'debiture.district', - 'debiture.village', - 'branch', - 'tujuanPenilaian', - ], - )->findOrFail($id); + $permohonan = Permohonan::with([ + 'user', + 'debiture.province', + 'debiture.city', + 'debiture.district', + 'debiture.village', + 'branch', + 'tujuanPenilaian', + ])->findOrFail($id); - $idPenilaian = $permohonan->jenis_penilaian_id; + $idPenilaian = $permohonan->jenis_penilaian_id; $idRegion = $permohonan->region_id; $jenisPenilaian = JenisPenilaian::find($idPenilaian); + $userTeam = Teams::with(['regions', 'teamsUsers.user']) + ->whereHas('regions', function ($q) use ($idRegion) { + $q->where('id', $idRegion); + }) + ->get(); - $teamPenilai = Teams::with(['regions', 'teamsUsers', 'teamsUsers.user']) - ->whereHas('regions', function ($q) use ($idRegion) { - $q->where('id', $idRegion); - })->get(); - + $teamPenilai = $userTeam->flatMap(function ($team) { + return $team->teamsUsers->filter(function ($teamUser) { + return $teamUser->user->roles->contains(function ($role) { + return $role->name === 'surveyor' || $role->name === 'surveyor-penilai'; + }); + })->map(function ($teamUser) { + return $teamUser->user; + }); + })->unique('id'); $existingTeamIds = $teamPenilai->pluck('id')->toArray(); @@ -117,19 +216,29 @@ class PenilaianController extends Controller ->whereNotIn('id', $existingTeamIds) ->get(); - $regionName = null; - foreach ($teamPenilai as $item) { + foreach ($userTeam as $item) { $regionName = $item->regions; } + // $regionName = $userTeam->first()?->regions->name; + - // dd($teamPenilai); $penilaian = Penilaian::where('nomor_registrasi', $permohonan->nomor_registrasi)->first(); - return view('lpj::penilaian.form', compact('permohonan', 'teamPenilai', 'jenisPenilaian', 'penilaian', 'regionName', 'updateTeamPenilai')); - } + $penilaianTeam = collect(); + if ($penilaian && $penilaian->id) { + $penilaianTeam = PenilaianTeam::where('penilaian_id', $penilaian->id)->get(); + } + + // return response()->json([ + // 'penilaianTeam' => $penilaianTeam + // ]); + + + return view('lpj::penilaian.form', compact('permohonan', 'teamPenilai', 'jenisPenilaian', 'penilaian', 'regionName', 'updateTeamPenilai', 'penilaianTeam')); + } /** * Remove the specified resource from storage. */ @@ -167,8 +276,9 @@ class PenilaianController extends Controller public function dataForDatatables(Request $request) { + if (is_null($this->user) || !$this->user->can('debitur.view')) { - // abort(403, 'Sorry! You are not allowed to view users.'); + } $query = Permohonan::query(); @@ -187,6 +297,9 @@ class PenilaianController extends Controller } $query->whereRaw('LOWER(status) = ?', ['registered']); + $query->whereHas('region.teams.teamsUsers.user', function ($q) { + $q->where('id', Auth::user()->id); + }); if ($request->has('sortOrder') && !empty($request->get('sortOrder'))) { $order = $request->get('sortOrder'); @@ -209,7 +322,7 @@ class PenilaianController extends Controller } $filteredRecords = $query->count(); - $data = $query->with(['user', 'debiture', 'branch', 'tujuanPenilaian'])->get(); + $data = $query->with(['user', 'debiture', 'branch', 'tujuanPenilaian', 'region.teams.teamsUsers.user'])->get(); $pageCount = ceil($totalRecords / $size); @@ -312,7 +425,7 @@ class PenilaianController extends Controller if (!empty($otorisator)) { if ($status == 'proses') { $query->whereIn('status_bayar', ['sudah_bayar', 'belum_bayar']); - }else{ + } else { $query->whereRaw('LOWER(status) = ?', [strtolower($status)]); } } diff --git a/app/Http/Controllers/SurveyorController.php b/app/Http/Controllers/SurveyorController.php index d4e30df..c9ff799 100644 --- a/app/Http/Controllers/SurveyorController.php +++ b/app/Http/Controllers/SurveyorController.php @@ -6,6 +6,7 @@ use App\Http\Controllers\Controller; use Illuminate\Http\RedirectResponse; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; +use Illuminate\Support\Facades\Auth; use Illuminate\Http\Response; use Modules\Lpj\Models\Permohonan; use Modules\Lpj\Models\Branch; @@ -47,6 +48,7 @@ use Modules\Lpj\Http\Requests\FormSurveyorRequest; class SurveyorController extends Controller { public $user; + /** * Display a listing of the resource. */ @@ -118,6 +120,8 @@ class SurveyorController extends Controller ->where('permohonan_id', $id) ->get(); + + return view('lpj::surveyor.detail', compact( 'buttonDisable', 'fotojaminan', @@ -513,6 +517,11 @@ class SurveyorController extends Controller $query->whereRaw('LOWER(status) = ?', ['assign']); + $query->whereHas('region.teams.teamsUsers.user', function ($q) { + $q->where('id', Auth::user()->id); + }); + + if ($request->has('sortOrder') && !empty($request->get('sortOrder'))) { $order = $request->get('sortOrder'); $column = $request->get('sortField'); @@ -614,7 +623,6 @@ class SurveyorController extends Controller 'golMasySekitar', 'tingkatKeramaian', 'laluLintasLokasi' - )); } @@ -693,7 +701,7 @@ class SurveyorController extends Controller $spekKategoriBagunan = SpekKategoritBangunan::all(); $header = $this->getHeader($type); - return view('lpj::surveyor.data.form', compact('header','spekKategoriBagunan')); + return view('lpj::surveyor.data.form', compact('header', 'spekKategoriBagunan')); } @@ -713,7 +721,7 @@ class SurveyorController extends Controller ->with('error', 'Invalid type specified.'); } - if($type == 'spek-bangunan') { + if ($type == 'spek-bangunan') { $validate['spek_kategori_bagunan_id'] = $request->spek_kategori_bagunan_id; } @@ -764,7 +772,7 @@ class SurveyorController extends Controller } - return view('lpj::surveyor.data.form', compact('header', 'model','spekKategoriBagunan')); + return view('lpj::surveyor.data.form', compact('header', 'model', 'spekKategoriBagunan')); } @@ -774,7 +782,7 @@ class SurveyorController extends Controller if ($validate) { $modelClass = $this->getModelClass($type); - if($type == 'spek-bangunan') { + if ($type == 'spek-bangunan') { $validate['spek_kategori_bagunan_id'] = $request->spek_kategori_bagunan_id; } @@ -931,6 +939,8 @@ class SurveyorController extends Controller public function submitSurveyor(Request $request, $id) { + + $permohonan = Permohonan::find($id); $permohonan->update([ 'status' => 'done', @@ -942,6 +952,11 @@ class SurveyorController extends Controller } + public function validateSubmit(){ + + } + + private function getModelClass(string $type): ?string { return $this->modelClasses[$type] ?? null; diff --git a/app/Http/Controllers/TeamsController.php b/app/Http/Controllers/TeamsController.php index a6eb9ca..c699c81 100644 --- a/app/Http/Controllers/TeamsController.php +++ b/app/Http/Controllers/TeamsController.php @@ -43,7 +43,7 @@ class TeamsController extends Controller $user = $usersWithRole->filter(function ($user) { return $user->roles->contains(function ($role) { - return $role->name === 'surveyor' || $role->name === 'surveyor-penilai'; + return $role->name === 'surveyor' || $role->name === 'surveyor-penilai' || $role->name === 'senior-officer'; }); }); @@ -112,7 +112,7 @@ class TeamsController extends Controller $user = $usersWithRole->filter(function ($user) { return $user->roles->contains(function ($role) { - return $role->name === 'surveyor' || $role->name === 'surveyor-penilai'; + return $role->name === 'surveyor' || $role->name === 'surveyor-penilai' || $role->name === 'senior-officer'; }); }); diff --git a/app/Http/Requests/PenilaianRequest.php b/app/Http/Requests/PenilaianRequest.php index 0d9c1bf..af33782 100644 --- a/app/Http/Requests/PenilaianRequest.php +++ b/app/Http/Requests/PenilaianRequest.php @@ -33,9 +33,12 @@ class PenilaianRequest extends FormRequest 'tanggal_kunjungan' => 'required|max:255', 'status' => 'required|string', 'nomor_registrasi' => 'required|string', - 'surveyor_id' => 'nullable|required_without:penilai_surveyor_id', - 'penilaian_id' => 'nullable|required_without:penilai_surveyor_id', - 'penilai_surveyor_id' => 'nullable|required_without_all:surveyor_id,penilaian_id', + 'surveyor_id' => 'nullable| required_without:penilai_surveyor_id', + 'penilai_id' => 'nullable|required_without:penilai_surveyor_id', + 'penilai_surveyor_id' => 'nullable|required_without_all:surveyor_id,penilai_id', + 'surveyor_region_id' => 'nullable|required_without:surveyor_id', + 'penilai_region_id' => 'nullable|required_without:penilai_id', + 'keterangan' => 'nullable', ]; } diff --git a/app/Models/Penilaian.php b/app/Models/Penilaian.php index cb2f44c..b77937a 100644 --- a/app/Models/Penilaian.php +++ b/app/Models/Penilaian.php @@ -17,7 +17,7 @@ class Penilaian extends Model */ protected $table = 'penilaian'; protected $fillable = [ - 'jenis_penilaian_id', 'teams_id', 'tanggal_kunjungan', 'keterangan','nomor_registrasi','penilaian_id','surveyor_id','penilai_surveyor_id', + 'jenis_penilaian_id', 'tanggal_kunjungan', 'keterangan','nomor_registrasi', 'status', 'authorized_status', 'authorized_at', 'authorized_by', 'created_at', 'created_by', 'updated_at', 'updated_by', 'deleted_at', 'deleted_by' ]; @@ -39,18 +39,9 @@ class Penilaian extends Model public function userPenilai() { - return $this->belongsTo(User::class, 'penilaian_id', 'id'); + return $this->hasMany(PenilaianTeam::class, 'penilaian_id', 'id'); } - public function userSurveyor() - { - return $this->belongsTo(User::class, 'surveyor_id', 'id'); - } - - public function userPenilaiSurveyor() - { - return $this->belongsTo(User::class, 'penilai_surveyor_id', 'id'); - } public function permohonan() { diff --git a/app/Models/PenilaianTeam.php b/app/Models/PenilaianTeam.php new file mode 100644 index 0000000..8df88ef --- /dev/null +++ b/app/Models/PenilaianTeam.php @@ -0,0 +1,39 @@ +belongsTo(User::class, 'user_id', 'id'); + } + + public function team(){ + + return $this->belongsTo(Team::class, 'team_id', 'id'); + } + + public function penilaian(){ + + return $this->belongsTo(Penilaian::class, 'penilaian_id', 'id'); + } + + protected static function newFactory(): PenilaianTeamFactory + { + //return PenilaianTeamFactory::new(); + } +} diff --git a/app/Models/Permohonan.php b/app/Models/Permohonan.php index 8e4676b..8f6b0bd 100644 --- a/app/Models/Permohonan.php +++ b/app/Models/Permohonan.php @@ -83,4 +83,9 @@ class Permohonan extends Base { return $this->belongsTo(Penilaian::class, 'nomor_registrasi', 'nomor_registrasi'); } + + public function region() + { + return $this->belongsTo(Regions::class, 'region_id'); + } } diff --git a/app/Models/Teams.php b/app/Models/Teams.php index 0fd48a8..1348a6c 100644 --- a/app/Models/Teams.php +++ b/app/Models/Teams.php @@ -30,8 +30,8 @@ class Teams extends Model return $this->hasMany(TeamsUsers::class, 'teams_id', 'id'); } - public function penilaian(){ - return $this->hasMany(Penilaian::class, 'teams_id', 'id'); + public function penilaianTeam(){ + return $this->hasMany(penilaianTeam::class, 'team_id', 'id'); } diff --git a/database/migrations/2024_10_31_024227_create_kategori_jenis_aset_table.php b/database/migrations/2024_10_31_024227_create_kategori_jenis_aset_table.php new file mode 100644 index 0000000..50b5cb3 --- /dev/null +++ b/database/migrations/2024_10_31_024227_create_kategori_jenis_aset_table.php @@ -0,0 +1,37 @@ +id(); + $table->string('name'); + $table->string('code'); + $table->boolean('status')->default(true); + $table->char('authorized_status', 1)->nullable(); + $table->timestamps(); + $table->timestamp('authorized_at')->nullable(); + $table->unsignedBigInteger('authorized_by')->nullable(); + $table->softDeletes(); + $table->unsignedBigInteger('created_by')->nullable(); + $table->unsignedBigInteger('updated_by')->nullable(); + $table->unsignedBigInteger('deleted_by')->nullable(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('kategori_jenis_aset'); + } +}; diff --git a/database/migrations/2024_10_31_032505_update_penilaian_table.php b/database/migrations/2024_10_31_032505_update_penilaian_table.php new file mode 100644 index 0000000..53d1715 --- /dev/null +++ b/database/migrations/2024_10_31_032505_update_penilaian_table.php @@ -0,0 +1,38 @@ +dropColumn('teams_id'); + + + $table->dropColumn('surveyor_id'); + $table->dropColumn('penilaian_id'); + + $table->dropColumn('penilai_surveyor_id'); + + }); + } + + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('penilaian', function (Blueprint $table) { + $table->foreignIdFor(Teams::class); + $table->foreignIdFor(User::class); + }); + } +}; diff --git a/database/migrations/2024_10_31_032940_create_penilai_team_table.php b/database/migrations/2024_10_31_032940_create_penilai_team_table.php new file mode 100644 index 0000000..db287b2 --- /dev/null +++ b/database/migrations/2024_10_31_032940_create_penilai_team_table.php @@ -0,0 +1,38 @@ +id(); + $table->unsignedBigInteger('penilaian_id'); + $table->unsignedBigInteger('team_id'); + $table->unsignedBigInteger('user_id'); + $table->string('role'); + $table->boolean('status')->default(true); + $table->char('authorized_status', 1)->nullable(); + $table->timestamps(); + $table->timestamp('authorized_at')->nullable(); + $table->unsignedBigInteger('authorized_by')->nullable(); + $table->softDeletes(); + $table->unsignedBigInteger('created_by')->nullable(); + $table->unsignedBigInteger('updated_by')->nullable(); + $table->unsignedBigInteger('deleted_by')->nullable(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('penilai_team'); + } +}; diff --git a/database/migrations/2024_11_01_081201_create_kategori_form_analisa_inspeksi_table.php b/database/migrations/2024_11_01_081201_create_kategori_form_analisa_inspeksi_table.php new file mode 100644 index 0000000..7b14758 --- /dev/null +++ b/database/migrations/2024_11_01_081201_create_kategori_form_analisa_inspeksi_table.php @@ -0,0 +1,38 @@ +id(); + $table->string('name'); + $table->string('code'); + $table->foreign('kategori_jenis_aset_id')->references('id')->on('kategori_jenis_aset'); + $table->boolean('status')->default(true); + $table->char('authorized_status', 1)->nullable(); + $table->timestamps(); + $table->timestamp('authorized_at')->nullable(); + $table->unsignedBigInteger('authorized_by')->nullable(); + $table->softDeletes(); + $table->unsignedBigInteger('created_by')->nullable(); + $table->unsignedBigInteger('updated_by')->nullable(); + $table->unsignedBigInteger('deleted_by')->nullable(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('kategori_form_analisa_inspeksi'); + } +}; diff --git a/database/migrations/2024_11_01_081225_create_label_name_inspeksi_table.php b/database/migrations/2024_11_01_081225_create_label_name_inspeksi_table.php new file mode 100644 index 0000000..814024d --- /dev/null +++ b/database/migrations/2024_11_01_081225_create_label_name_inspeksi_table.php @@ -0,0 +1,28 @@ +id(); + + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('label_name_inspeksi'); + } +}; diff --git a/resources/views/activity/progres_activity/index.blade.php b/resources/views/activity/progres_activity/index.blade.php index 67942a7..6bf9a2b 100644 --- a/resources/views/activity/progres_activity/index.blade.php +++ b/resources/views/activity/progres_activity/index.blade.php @@ -46,14 +46,14 @@ @php $sortedTeamsActivity = $teamsActivity->sortBy(function ($item) { - return $item->team->penilaian - ->filter(function ($penilaian) use ($item) { - return $penilaian->penilaian_id == $item->user->id || - $penilaian->surveyor_id == $item->user->id || - $penilaian->penilai_surveyor_id == $item->user->id; + + return $item->team->penilaianTeam + ->filter(function ($penilaianTeam) use ($item) { + return $penilaianTeam->user_id == $item->user->id; }) ->count(); }); + @endphp @foreach ($sortedTeamsActivity as $index => $item) @@ -70,11 +70,9 @@ @php - $totalTasks = $item->team->penilaian - ->filter(function ($penilaian) use ($item) { - return $penilaian->penilaian_id == $item->user->id || - $penilaian->surveyor_id == $item->user->id || - $penilaian->penilai_surveyor_id == $item->user->id; + $totalTasks = $item->team->penilaianTeam + ->filter(function ($penilaianTeam) use ($item) { + return $penilaianTeam->user_id == $item->user->id; }) ->count(); @endphp @@ -156,8 +154,6 @@ const apiUrl = accordion.querySelector('.card-grid').getAttribute( 'data-api-url'); - console.log("This is the API URL: " + apiUrl); - const dataTableOptions = { apiEndpoint: apiUrl, pageSize: 5, diff --git a/resources/views/penilaian/form.blade.php b/resources/views/penilaian/form.blade.php index d068566..2986624 100644 --- a/resources/views/penilaian/form.blade.php +++ b/resources/views/penilaian/form.blade.php @@ -308,8 +308,12 @@
+ {{-- @php + var_dump($penilaianTeam); + @endphp --}} -
+
@@ -328,6 +332,7 @@ @enderror
+ - + @endif
+
+
+ +
+
+

Struktur Kapal

+
+
+ @php + $inputDataLoaksi = []; + + $inputDataLoaksi = [ + ['label' => 'Lambung Kapal', 'index' => 0], + ['label' => 'Dek', 'index' => 1], + ['label' => 'Struktur Rangka', 'index' => 2], + ['label' => 'Palka', 'index' => 3], + ['label' => 'Pondasi Mesin', 'index' => 4], + ['label' => 'Area Mesin', 'index' => 5], + ['label' => 'Cat dan Korosi', 'index' => 6], + ['label' => 'Sistem Pengelasan', 'index' => 7] + ]; + + @endphp + + @if (count($inputDataLoaksi) > 0) + @foreach ($inputDataLoaksi as $item) + +
+ +
+ + + @error('bentuk_tanah') + {{ $message }} + @enderror +
+
+ @endforeach + @endif +
+ +
+ + @error('deskripsi') + {{ $message }} + @enderror +
+
+
+
+ +{{-- Peralatan Keselamatan --}} +
+
+

Peralatan Keselamatan

+
+
+ @php + $inputDataLoaksi = []; + + $inputDataLoaksi = [ + ['label' => 'Sekoci/Lifeboat', 'index' => 0], + ['label' => 'Jaket Pelampung', 'index' => 1], + ['label' => 'Alat Pemadam', 'index' => 2], + ['label' => 'Rambu Darurat', 'index' => 3], + ['label' => 'Sistem Alarm', 'index' => 4], + ['label' => 'Sistem Pencegah', 'index' => 5], + ['label' => 'Kebaran', 'index' => 6], + ['label' => 'Lampu Darurat', 'index' => 7] + ]; + + @endphp + + @if (count($inputDataLoaksi) > 0) + @foreach ($inputDataLoaksi as $item) + +
+ +
+ + + @error('bentuk_tanah') + {{ $message }} + @enderror +
+
+ @endforeach + @endif +
+ +
+ + @error('deskripsi') + {{ $message }} + @enderror +
+
+
+
+ +{{-- Sistwm Navigasi dan Komunikasi --}} +
+
+

Sistem Navigasi dan Komunikasi

+
+
+ @php + $inputDataLoaksi = []; + + $inputDataLoaksi = [ + ['label' => 'Gps', 'index' => 0], + ['label' => 'Radat', 'index' => 1], + ['label' => 'Radio Komunikasi', 'index' => 2], + ['label' => 'Lampu Navigasi', 'index' => 3], + ['label' => 'Sistem Kendali otomatis', 'index' => 4], + ['label' => 'Kompas', 'index' => 5], + ]; + + @endphp + + @if (count($inputDataLoaksi) > 0) + @foreach ($inputDataLoaksi as $item) + +
+ +
+ + + @error('bentuk_tanah') + {{ $message }} + @enderror +
+
+ @endforeach + @endif +
+ +
+ + @error('deskripsi') + {{ $message }} + @enderror +
+
+
+
+ + +{{-- Sistwm Mesin dan Penggerak Kapal --}} +
+
+

Sistem Mesin dan Penggerak Kapal

+
+
+ @php + $inputDataLoaksi = []; + + $inputDataLoaksi = [ + ['label' => 'Mesin Utama', 'index' => 0], + ['label' => 'Mesin Bantu', 'index' => 1], + ['label' => 'Pompa Pendingin', 'index' => 2], + ['label' => 'Sistem Pelumasan', 'index' => 3], + ['label' => 'Propeller', 'index' => 4], + ['label' => 'Sistem Kelistrikan', 'index' => 5], + ]; + + @endphp + + @if (count($inputDataLoaksi) > 0) + @foreach ($inputDataLoaksi as $item) + +
+ +
+ + + @error('bentuk_tanah') + {{ $message }} + @enderror +
+
+ @endforeach + @endif +
+ +
+ + @error('deskripsi') + {{ $message }} + @enderror +
+
+
+
+ + +{{-- Sistwm kelistrikan dan Elektronik --}} +
+
+

Sistem Kelistrikan dan Elektronik

+
+
+ @php + $inputDataLoaksi = []; + + $inputDataLoaksi = [ + ['label' => 'Lampu Navigasi', 'index' => 0], + ['label' => 'Sistem Penerangan', 'index' => 1], + ['label' => 'Sistem Panel Distribusi', 'index' => 2], + ['label' => 'Kabel dan Perangkat Pendukung', 'index' => 3], + ]; + + @endphp + + @if (count($inputDataLoaksi) > 0) + @foreach ($inputDataLoaksi as $item) + +
+ +
+ + + @error('bentuk_tanah') + {{ $message }} + @enderror +
+
+ @endforeach + @endif +
+ +
+ + @error('deskripsi') + {{ $message }} + @enderror +
+
+
+
+ +{{-- Linkungan dan Kebersihan Kapal --}} +
+
+

Linkungan dan Kebersihan Kapal

+
+
+ @php + $inputDataLoaksi = []; + + $inputDataLoaksi = [ + ['label' => 'Kebersihan Dek Luar', 'index' => 0], + ['label' => 'Tangki Limbah', 'index' => 1], + ['label' => 'Sistem Pengelolaan Limbah', 'index' => 2], + ['label' => 'Pengelolaan Air Ballast', 'index' => 3], + ]; + + @endphp + + @if (count($inputDataLoaksi) > 0) + @foreach ($inputDataLoaksi as $item) + +
+ +
+ + + @error('bentuk_tanah') + {{ $message }} + @enderror +
+
+ @endforeach + @endif +
+ +
+ + @error('deskripsi') + {{ $message }} + @enderror +
+
+
+
diff --git a/resources/views/surveyor/components/kendaraan.blade.php b/resources/views/surveyor/components/kendaraan.blade.php new file mode 100644 index 0000000..a96d64b --- /dev/null +++ b/resources/views/surveyor/components/kendaraan.blade.php @@ -0,0 +1,160 @@ +
+
+

Order Penilaian

+
+
+ +
+ + + @error('bentuk_tanah') + {{ $message }} + @enderror +
+
+
+ + + +
+
+

Identitas Debitur

+
+
+ +
+ +
+ + + @error('bentuk_tanah') + {{ $message }} + @enderror +
+
+
+ +
+ + + @error('bentuk_tanah') + {{ $message }} + @enderror +
+
+
+ +
+

Lokasi Jaminan

+
+
+ @php + $inputDataLoaksi = []; + + $inputDataLoaksi = [ + ['label' => 'Nama Jalan', 'index' => 0], + ['label' => 'Perumahan/Gang', 'index' => 1], + ['label' => 'Blok/Nomor', 'index' => 2], + ['label' => 'Desa/Kelurahan', 'index' => 3], + ['label' => 'Kecamatan', 'index' => 4], + ['label' => 'Kota/Kotamadya', 'index' => 5], + ['label' => 'Provinsi', 'index' => 6], + ]; + + @endphp + + @if (count($inputDataLoaksi) > 0) + @foreach ($inputDataLoaksi as $item) + +
+ +
+ + + @error('bentuk_tanah') + {{ $message }} + @enderror +
+
+ @endforeach + @endif +
+
+ + +
+
+

Data Data Jaminan

+
+
+ +
+ +
+ + @error('hadapMataAngin') + {{ $message }} + @enderror +
+
+ +
+ +
+ + @error('hadapMataAngin') + {{ $message }} + @enderror +
+
+
+ +
+ + + @error('hadapMataAngin') + {{ $message }} + @enderror +
+
+ + @php + $inputDataJaminan = []; + $inputDataJaminan = [ + ['label' => 'Tipe/Model', 'index' => 0], + ['label' => 'Merek', 'index' => 1], + ['label' => 'Tahun Pembuatan', 'index' => 2], + ['label' => 'Negara Pembuat', 'index' => 3], + ['label' => 'Kondisi Mesin', 'index' => 4], + ]; + @endphp + + @if (count($inputDataJaminan) > 0) + @foreach ($inputDataJaminan as $item) + +
+ +
+ + + @error('bentuk_tanah') + {{ $message }} + @enderror +
+
+ @endforeach + @endif + +
+ +
+ + @error('deskripsi') + {{ $message }} + @enderror +
+
+
+
diff --git a/resources/views/surveyor/components/mesin.blade.php b/resources/views/surveyor/components/mesin.blade.php new file mode 100644 index 0000000..81d71c0 --- /dev/null +++ b/resources/views/surveyor/components/mesin.blade.php @@ -0,0 +1,133 @@ + + +
+
+

Identitas Debitur

+
+
+ +
+ + + @error('bentuk_tanah') + {{ $message }} + @enderror +
+
+ +
+

Lokasi Jaminan

+
+
+ @php + $inputDataLoaksi = []; + + $inputDataLoaksi = [ + ['label' => 'Nama Jalan', 'index' => 0], + ['label' => 'Perumahan/Gang', 'index' => 1], + ['label' => 'Blok/Nomor', 'index' => 2], + ['label' => 'Desa/Kelurahan', 'index' => 3], + ['label' => 'Kecamatan', 'index' => 4], + ['label' => 'Kota/Kotamadya', 'index' => 5], + ['label' => 'Provinsi', 'index' => 6] + ]; + + @endphp + + @if (count($inputDataLoaksi) > 0) + @foreach ($inputDataLoaksi as $item) + +
+ +
+ + + @error('bentuk_tanah') + {{ $message }} + @enderror +
+
+ @endforeach + @endif +
+
+ + +
+
+

Data Data Jaminan

+
+
+
+ +
+ + + @error('hadapMataAngin') + {{ $message }} + @enderror +
+
+ + @php + $inputDataJaminan = []; + + $inputDataJaminan = [ + ['label' => 'Tipe/Model', 'index' => 0], + ['label' => 'Merek', 'index' => 1], + ['label' => 'Tahun Pembuatan', 'index' => 2], + ['label' => 'Negara Pembuat', 'index' => 3], + ['label' => 'Kondisi Mesin', 'index' => 4], + ]; + @endphp + + @if (count($inputDataJaminan) > 0) + @foreach ($inputDataJaminan as $item) + +
+ +
+ + + @error('bentuk_tanah') + {{ $message }} + @enderror +
+
+ @endforeach + @endif + +
+ +
+ + @error('deskripsi') + {{ $message }} + @enderror +
+
+
+ +
+ +
+
+ + + diff --git a/resources/views/surveyor/components/tanah-bangunan.blade.php b/resources/views/surveyor/components/tanah.blade.php similarity index 52% rename from resources/views/surveyor/components/tanah-bangunan.blade.php rename to resources/views/surveyor/components/tanah.blade.php index bba59a2..c71af11 100644 --- a/resources/views/surveyor/components/tanah-bangunan.blade.php +++ b/resources/views/surveyor/components/tanah.blade.php @@ -246,235 +246,3 @@
- -@if ($analisaType == 'tanah_bangunan') -
-
-

Analisa Bangunan

-
-
-
- -
-
- - -
- - @error('luas_tanah_bagunan') - {{ $message }} - @enderror -
-
- - - -
- -
- - - @error('jenis_bangunan') - {{ $message }} - @enderror -
-
- - -
- -
- - - @error('kondisi_bangunan') - {{ $message }} - @enderror -
-
- - -
- -
- - - @error('sifat_bangunan') - {{ $message }} - @enderror -
-
- - -
-
- - -
-
- -
- @if (@isset($spekKategoriBagunan)) - @foreach ($spekKategoriBagunan as $item) -
- -
- - - @error('name') - {{ $message }} - @enderror -
-
- @endforeach - @endif -
- -
-
-
- -
- -
-
- - - - -
- -
- - - @error('sarana_pelengkap') - {{ $message }} - @enderror -
-
-
-
-@endif - -@push('scripts') - -@endpush diff --git a/routes/web.php b/routes/web.php index e40bd3c..0ec7f55 100644 --- a/routes/web.php +++ b/routes/web.php @@ -437,6 +437,7 @@ Route::middleware(['auth'])->group(function () { Route::get('restore/{id}', [ActivityController::class, 'restore'])->name('restore'); Route::get('datatables', [ActivityController::class, 'dataForDatatables'])->name('datatables'); Route::get('export', [ActivityController::class, 'export'])->name('export'); + Route::get('/', [ActivityController::class, 'index'])->name('index'); Route::get('/{id}/show', [ActivityController::class, 'show'])->name('show'); From 43e6573bf24f185e870a8ded442e801a3306908b Mon Sep 17 00:00:00 2001 From: Daeng Deni Mardaeni Date: Tue, 5 Nov 2024 19:00:11 +0700 Subject: [PATCH 21/45] Add multiple file upload functionality Enhanced the document upload section to support multiple file uploads for "Dokumen Jaminan". Added "Add More" and "Remove" buttons for dynamically managing file inputs. Implemented helper functions to handle dynamic input fields and update the UI accordingly. --- .../debitur/components/dokumen.blade.php | 139 +++++++++++------- 1 file changed, 89 insertions(+), 50 deletions(-) diff --git a/resources/views/debitur/components/dokumen.blade.php b/resources/views/debitur/components/dokumen.blade.php index 23acee9..be5c1c0 100644 --- a/resources/views/debitur/components/dokumen.blade.php +++ b/resources/views/debitur/components/dokumen.blade.php @@ -158,7 +158,14 @@ Dokumen Jaminan
- +
+
+ + +
+
+
+ @if(isset($detail->dokumen_jaminan)) {{ basename($detail->dokumen_jaminan) }} @@ -444,7 +451,7 @@ -
+
+ +
+ +
diff --git a/resources/views/registrasi/js/editjs.blade.php b/resources/views/registrasi/js/editjs.blade.php index 1863f78..80bc38d 100644 --- a/resources/views/registrasi/js/editjs.blade.php +++ b/resources/views/registrasi/js/editjs.blade.php @@ -13,6 +13,7 @@ $("#{{ $route[0] }}_div_jenis_pilihan").show(); $("#{{ $route[0] }}_div_catatan").hide(); $("#{{ $route[0] }}_div_region").hide(); + $("#{{ $route[0] }}_div_catatan2").show(); // prepare data setData(); } @@ -94,12 +95,14 @@ $("#{{ $route[0] }}_div_jenis_pilihan").show(); $("#{{ $route[0] }}_catatan").val(''); $("#{{ $route[0] }}_div_catatan").hide(); + $("#{{ $route[0] }}_div_catatan2").show(); } else { $("#{{$route[0]}}_jenis_penilaian option[value=0]").prop('selected', true); $("#{{ $route[0] }}_div_jenis_pilihan").hide(); $("#{{ $route[0] }}_div_catatan").show(); + $("#{{ $route[0] }}_div_catatan2").hide(); } }); @@ -115,6 +118,7 @@ let jenis_penilaian = $("#{{$route[0]}}_jenis_penilaian").val(); let region = $("#{{$route[0]}}_region").val(); let catatan = $("#{{$route[0]}}_catatan").val(); + let catatan2 = $("#{{$route[0]}}_catatan2").val(); if(jenis_penilaian==0) jenis_penilaian=''; @@ -129,6 +133,7 @@ input_data.jenis_penilaian= jenis_penilaian; input_data.region= region; input_data.catatan = catatan; + input_data.catatan2 = catatan2; let useURL= '{{ route($route[0].'.update', $id) }}'; $.ajax({ diff --git a/resources/views/registrasi/show.blade.php b/resources/views/registrasi/show.blade.php index 9ff7791..22cc87f 100644 --- a/resources/views/registrasi/show.blade.php +++ b/resources/views/registrasi/show.blade.php @@ -199,7 +199,7 @@
-
+
@@ -208,6 +208,15 @@ +
+

+
+ +
+ +
diff --git a/resources/views/registrasifinal/show.blade.php b/resources/views/registrasifinal/show.blade.php index 7592d0d..b9471ad 100644 --- a/resources/views/registrasifinal/show.blade.php +++ b/resources/views/registrasifinal/show.blade.php @@ -45,10 +45,9 @@ Tujan Permohonan: - {{ $permohonan->tujuanPenilaian->name }} + {{ $permohonan->tujuanPenilaian->name }} {!! $permohonan->dokumen !!}
-
From 315a52a78db08170d268472af2fdcc922adfc21f Mon Sep 17 00:00:00 2001 From: Daeng Deni Mardaeni Date: Wed, 6 Nov 2024 10:58:03 +0700 Subject: [PATCH 34/45] Perbaiki referensi ID permohonan dan relasi di Registrasi Final Mengubah referensi ID dari `data.id` ke `data.permohonan.id` pada tombol aksi di view registrasifinal.index.blade.php. Juga, menambahkan relasi `permohonan` pada query dan menghapus beberapa spasi kosong yang tidak perlu di RegistrasiFinalController.php untuk meningkatkan keterbacaan kode. --- .../Controllers/RegistrasiFinalController.php | 48 +++++++++---------- .../views/registrasifinal/index.blade.php | 4 +- 2 files changed, 26 insertions(+), 26 deletions(-) diff --git a/app/Http/Controllers/RegistrasiFinalController.php b/app/Http/Controllers/RegistrasiFinalController.php index deb2781..4ccb0e7 100644 --- a/app/Http/Controllers/RegistrasiFinalController.php +++ b/app/Http/Controllers/RegistrasiFinalController.php @@ -28,7 +28,7 @@ use Exception; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Storage; - + use Modules\Lpj\Models\PenawaranTender; class RegistrasiFinalController extends Controller @@ -51,15 +51,15 @@ use Modules\Lpj\Models\PenawaranTender; ->select('penawaran.*', 'tujuan_penilaian_kjpp.name as tujuan_penilaian_kjpp_name') ->leftJoin('tujuan_penilaian_kjpp', 'tujuan_penilaian_kjpp.id','=','penawaran.tujuan_penilaian_kjpp_id') ->where('penawaran.status','=','spk') - ->withCount('penawarandetails'); - + ->withCount('penawarandetails'); + // Apply search filter if provided if ($request->has('search') && !empty($request->get('search'))) { $search = $request->get('search'); $query->where(function ($q) use ($search) { $q->where('nomor_registrasi', 'LIKE', '%' . $search . '%'); $q->orWhere('tanggal_permohonan', 'LIKE', '%' . $search . '%'); - + $q->orWhere('status', 'LIKE', '%' . $search . '%'); }); } @@ -85,10 +85,10 @@ use Modules\Lpj\Models\PenawaranTender; // Get the filtered count of records $filteredRecords = $query->count(); - + // Get the data for the current page //$data = $query->with(['user', 'debiture', 'branch', 'tujuanPenilaian'])->get(); - $data = $query->get(); + $data = $query->with(['permohonan'])->get(); // dd($data); $i=0; foreach($data as $obj) @@ -97,18 +97,18 @@ use Modules\Lpj\Models\PenawaranTender; { $data[$i]->tanggal_penilaian_sebelumnya = Carbon::parse($obj->tanggal_penilaian_sebelumnya)->format('d F Y H:i:s'); } - + if($obj->biaya_kjpp_sebelumnya) { $data[$i]->biaya_kjpp_sebelumnya = formatRupiah($obj->biaya_kjpp_sebelumnya); - + } // date_range if($obj->start_date && $obj->end_date) { $data[$i]->date_range = Carbon::parse($obj->start_date)->format('d M Y').' - '.Carbon::parse($obj->end_date)->format('d M Y'); - + } $i++; @@ -141,7 +141,7 @@ use Modules\Lpj\Models\PenawaranTender; $pdfSPK_path = Storage::url($permohonan->dokumen); $permohonan->dokumen = $pdfSPK_path; $permohonan->dokumen = '| Dokumen SPK.pdf   '; - } + } return view('lpj::registrasifinal.show', compact('id','permohonan')); } @@ -159,7 +159,7 @@ use Modules\Lpj\Models\PenawaranTender; if (request()->ajax()) { $id = $request->id; $datas = Permohonan::find($id); - + if ($datas) { $penawaran=null; $regions=null; @@ -171,13 +171,13 @@ use Modules\Lpj\Models\PenawaranTender; { $penawaranString = convertSlug($penawaran->status); $penawaran->status = $penawaranString; - } - + } + if($datas->dokumen) { $pdfSPK_path = Storage::url($datas->dokumen); $datas->dokumen = $pdfSPK_path; - } + } $data['status'] = 'success'; $data['regions'] = $regions; @@ -203,14 +203,14 @@ use Modules\Lpj\Models\PenawaranTender; $data = array(); $dataPermohonan = array(); $dataPenawaran = array(); - + if (request()->ajax()) { $validator = RegistrasiFinalController::rulesEditnya($request, $id); - + if ($validator['fails']) { $data['message'] = $validator['errors']; $data['status'] = 'error'; - } + } else { DB::beginTransaction(); @@ -224,18 +224,18 @@ use Modules\Lpj\Models\PenawaranTender; 'keterangan' => $request->catatan, 'authorized_at' => now(), 'authorized_status' =>1, - 'authorized_by' => Auth::id() + 'authorized_by' => Auth::id() ]; $dataPenawaran = ['status' => 'registrasi-final']; - + $permohonan = Permohonan::find($id); - $penawaran = PenawaranTender::where('nomor_registrasi','=',$permohonan->nomor_registrasi)->first(); - + $penawaran = PenawaranTender::where('nomor_registrasi','=',$permohonan->nomor_registrasi)->first(); + $permohonan->update($dataPermohonan); $penawaran->update($dataPenawaran); - // + // DB::commit(); $data['status'] = 'success'; @@ -246,7 +246,7 @@ use Modules\Lpj\Models\PenawaranTender; $data['message']['message_try_catch'] = array('Regitrasi Final '.$permohonan->nomor_registrasi.' failed.'); } } - + } else { $data['status'] = 'error'; $data['message']['message_ajax'] = array("no ajax request"); @@ -259,7 +259,7 @@ use Modules\Lpj\Models\PenawaranTender; public function rulesEditnya($request, $id) { $validate_catatan=''; - + $validateIt = [ // 'name' diambil dari definisi parameter yang di kirim pada POST Data 'region' => 'required', diff --git a/resources/views/registrasifinal/index.blade.php b/resources/views/registrasifinal/index.blade.php index 4e50882..b25be3f 100644 --- a/resources/views/registrasifinal/index.blade.php +++ b/resources/views/registrasifinal/index.blade.php @@ -133,10 +133,10 @@ title: 'Status', render: (item, data) => { return ``; From f135cf0a1aa37f9114ad8183b3b89abb29c112de Mon Sep 17 00:00:00 2001 From: Daeng Deni Mardaeni Date: Wed, 6 Nov 2024 11:48:01 +0700 Subject: [PATCH 35/45] Perbaiki format kode dan tambahkan relasi pada pengecekan penawaran Menghilangkan whitespace yang tidak perlu di dalam file SpkController.php untuk meningkatkan kerapian kode. Juga menambahkan eager loading relasi 'permohonan' saat mengambil data penawaran untuk meningkatkan efisiensi query SQL. Menyesuaikan URL download di file view untuk memastikan ID yang benar digunakan. --- app/Http/Controllers/SpkController.php | 64 +++++++++++++------------- resources/views/spk/index.blade.php | 4 +- 2 files changed, 34 insertions(+), 34 deletions(-) diff --git a/app/Http/Controllers/SpkController.php b/app/Http/Controllers/SpkController.php index 8496397..77389f0 100644 --- a/app/Http/Controllers/SpkController.php +++ b/app/Http/Controllers/SpkController.php @@ -39,14 +39,14 @@ use Illuminate\Support\Facades\Auth; ->leftJoin('tujuan_penilaian_kjpp', 'tujuan_penilaian_kjpp.id','=','penawaran.tujuan_penilaian_kjpp_id') ->where('permohonan.status','=','spk') ->select('penawaran.*', 'tujuan_penilaian_kjpp.name as tujuan_penilaian_kjpp_name', 'permohonan.dokumen as dokumenSPK'); - + // Apply search filter if provided if ($request->has('search') && !empty($request->get('search'))) { $search = $request->get('search'); $query->where(function ($q) use ($search) { $q->where('nomor_registrasi', 'LIKE', '%' . $search . '%'); $q->orWhere('tanggal_permohonan', 'LIKE', '%' . $search . '%'); - + $q->orWhere('status', 'LIKE', '%' . $search . '%'); }); } @@ -72,12 +72,12 @@ use Illuminate\Support\Facades\Auth; // Get the filtered count of records $filteredRecords = $query->count(); - + // Get the data for the current page //$data = $query->with(['user', 'debiture', 'branch', 'tujuanPenilaian'])->get(); - - $data = $query->get(); - + + $data = $query->with(['permohonan'])->get(); + $i=0; foreach($data as $obj) { @@ -85,18 +85,18 @@ use Illuminate\Support\Facades\Auth; { $data[$i]->tanggal_penilaian_sebelumnya = Carbon::parse($obj->tanggal_penilaian_sebelumnya)->format('d F Y H:i:s'); } - + if($obj->biaya_kjpp_sebelumnya) { $data[$i]->biaya_kjpp_sebelumnya = formatRupiah($obj->biaya_kjpp_sebelumnya); - + } // date_range if($obj->start_date && $obj->end_date) { $data[$i]->date_range = Carbon::parse($obj->start_date)->format('d M Y').' - '.Carbon::parse($obj->end_date)->format('d M Y'); - + } $i++; @@ -137,25 +137,25 @@ use Illuminate\Support\Facades\Auth; public function edit($id) { $penawaran = PenawaranTender::leftJoin('detail_penawaran', 'detail_penawaran.penawaran_id','=','penawaran.id') - ->leftJoin('jenis_laporan', 'jenis_laporan.id','=','penawaran.jenis_laporan_id') - ->leftJoin('kjpp', 'kjpp.id','=','detail_penawaran.kjpp_rekanan_id') + ->leftJoin('jenis_laporan', 'jenis_laporan.id','=','penawaran.jenis_laporan_id') + ->leftJoin('kjpp', 'kjpp.id','=','detail_penawaran.kjpp_rekanan_id') ->where('detail_penawaran.status','=',1) ->where('penawaran.id','=', $id) - ->select('penawaran.*', 'detail_penawaran.attachment as attachmentku', + ->select('penawaran.*', 'detail_penawaran.attachment as attachmentku', 'detail_penawaran.biaya_penawaran as detail_penawaran_biaya_penawaran', 'kjpp.name as kjpp_name', 'kjpp.address as kjpp_address', 'jenis_laporan.name as jenis_laporan_name' )->first(); - + $permohonan = Permohonan::where('nomor_registrasi','=',$penawaran->nomor_registrasi) ->leftJoin('dokumen_jaminan', 'dokumen_jaminan.permohonan_id','=','permohonan.id') ->leftJoin('jenis_jaminan', 'jenis_jaminan.id','=','dokumen_jaminan.jenis_jaminan_id') - ->select('permohonan.*', 'jenis_jaminan.name as jenis_jaminan_name', + ->select('permohonan.*', 'jenis_jaminan.name as jenis_jaminan_name', 'dokumen_jaminan.address as dokumen_jaminan_address'); - + $data = $permohonan->with(['user', 'debiture', 'branch', 'tujuanPenilaian'])->first(); - + return view('lpj::spk.edit', compact('data', 'penawaran')); } @@ -165,30 +165,30 @@ use Illuminate\Support\Facades\Auth; $data1 = array(); $dataPermohonan = array(); // data - + $penawaran = PenawaranTender::leftJoin('detail_penawaran', 'detail_penawaran.penawaran_id','=','penawaran.id') - ->leftJoin('jenis_laporan', 'jenis_laporan.id','=','penawaran.jenis_laporan_id') - ->leftJoin('kjpp', 'kjpp.id','=','detail_penawaran.kjpp_rekanan_id') + ->leftJoin('jenis_laporan', 'jenis_laporan.id','=','penawaran.jenis_laporan_id') + ->leftJoin('kjpp', 'kjpp.id','=','detail_penawaran.kjpp_rekanan_id') ->where('detail_penawaran.status','=',1) ->where('penawaran.id','=', $id) - ->select('penawaran.*', 'detail_penawaran.attachment as attachmentku', + ->select('penawaran.*', 'detail_penawaran.attachment as attachmentku', 'kjpp.name as kjpp_name', 'kjpp.address as kjpp_address', 'jenis_laporan.name as jenis_laporan_name' )->first(); - + $permohonan = Permohonan::where('nomor_registrasi','=',$penawaran->nomor_registrasi) ->leftJoin('dokumen_jaminan', 'dokumen_jaminan.permohonan_id','=','permohonan.id') ->leftJoin('jenis_jaminan', 'jenis_jaminan.id','=','dokumen_jaminan.jenis_jaminan_id') ->select('permohonan.*', 'jenis_jaminan.name as jenis_jaminan_name'); $data = $permohonan->with(['user', 'debiture', 'branch', 'tujuanPenilaian'])->first(); - + $folderPath = 'uploads/spk/'; $extension = '.pdf'; $newFileName = "SPK_".$penawaran->nomor_registrasi."_".Auth::user()->id."_".time(). $extension; $newFileNameWithPath = $folderPath . $newFileName; - + // update table permohonan $dataPermohonan=['dokumen' => $newFileNameWithPath]; $data->update($dataPermohonan); @@ -210,35 +210,35 @@ use Illuminate\Support\Facades\Auth; } public function dokumennya() - { + { // return view('lpj::spk.dokumennya'); $id="3"; $penawaran = PenawaranTender::leftJoin('detail_penawaran', 'detail_penawaran.penawaran_id','=','penawaran.id') - ->leftJoin('jenis_laporan', 'jenis_laporan.id','=','penawaran.jenis_laporan_id') - ->leftJoin('kjpp', 'kjpp.id','=','detail_penawaran.kjpp_rekanan_id') + ->leftJoin('jenis_laporan', 'jenis_laporan.id','=','penawaran.jenis_laporan_id') + ->leftJoin('kjpp', 'kjpp.id','=','detail_penawaran.kjpp_rekanan_id') ->where('detail_penawaran.status','=',1) ->where('penawaran.id','=', $id) - ->select('penawaran.*', 'detail_penawaran.attachment as attachmentku', + ->select('penawaran.*', 'detail_penawaran.attachment as attachmentku', 'detail_penawaran.biaya_penawaran as detail_penawaran_biaya_penawaran', 'kjpp.name as kjpp_name', 'kjpp.address as kjpp_address', 'jenis_laporan.name as jenis_laporan_name' )->first(); - + $permohonan = Permohonan::where('nomor_registrasi','=',$penawaran->nomor_registrasi) ->leftJoin('dokumen_jaminan', 'dokumen_jaminan.permohonan_id','=','permohonan.id') ->leftJoin('jenis_jaminan', 'jenis_jaminan.id','=','dokumen_jaminan.jenis_jaminan_id') - ->select('permohonan.*', 'jenis_jaminan.name as jenis_jaminan_name', + ->select('permohonan.*', 'jenis_jaminan.name as jenis_jaminan_name', 'dokumen_jaminan.address as dokumen_jaminan_address'); - + $data = $permohonan->with(['user', 'debiture', 'branch', 'tujuanPenilaian'])->first(); - + return view('lpj::spk.dokumennya', compact('data', 'penawaran')); } public function download($id) { $document = Permohonan::find($id); - + return response()->download(storage_path('app/public/' .$document->dokumen)); } } diff --git a/resources/views/spk/index.blade.php b/resources/views/spk/index.blade.php index 7739980..0d70282 100644 --- a/resources/views/spk/index.blade.php +++ b/resources/views/spk/index.blade.php @@ -150,7 +150,7 @@ else { spkShow =`
- + `; spkCreate=` @@ -158,7 +158,7 @@ `; } - return `
` + return `
` +spkShow+spkCreate+ `
`; }, From 019e12535e27dbfeba959f4dff430a8d8eff8e0c Mon Sep 17 00:00:00 2001 From: Daeng Deni Mardaeni Date: Wed, 6 Nov 2024 11:52:23 +0700 Subject: [PATCH 36/45] Enhance table styling in SPK edit view Tambahkan padding pada bagian yang dapat di-scroll dan perbaharui kelas pada tabel untuk meningkatkan tampilan dan keterbacaan. Perubahan ini akan memberikan margin yang lebih baik dan membuat tabel lebih responsif dalam tampilan mobile. --- resources/views/spk/edit.blade.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/resources/views/spk/edit.blade.php b/resources/views/spk/edit.blade.php index 03edfae..80b780a 100644 --- a/resources/views/spk/edit.blade.php +++ b/resources/views/spk/edit.blade.php @@ -15,7 +15,7 @@

Buat SPK

- +
@@ -25,9 +25,9 @@
-
+