diff --git a/app/Http/Controllers/PersetujuanPenawaranController.php b/app/Http/Controllers/PersetujuanPenawaranController.php index 73f7429..1af71bf 100644 --- a/app/Http/Controllers/PersetujuanPenawaranController.php +++ b/app/Http/Controllers/PersetujuanPenawaranController.php @@ -12,6 +12,7 @@ class PersetujuanPenawaranController extends Controller { public $user; + /** * Display a listing of the resource. */ @@ -21,6 +22,12 @@ return view('lpj::persetujuan_penawaran.index', compact('persetujuanPenawarans')); } + /** + * Store a newly created resource in storage. + */ + /** + * Store a newly created resource in storage. + */ /** * Store a newly created resource in storage. */ @@ -29,10 +36,43 @@ $validated = $request->validated(); $validated['created_by'] = Auth::id(); - PersetujuanPenawaran::create($validated); + $persetujuanPenawaran = PersetujuanPenawaran::updateOrCreate( + ['penawaran_id' => $validated['penawaran_id']], + $validated, + ); + + $folderPath = 'persetujuan_penawaran/' . $validated['penawaran_id']; + + if ($request->hasFile('file_persetujuan_penawaran')) { + $persetujuanPenawaran->file_persetujuan_penawaran = $request->file('file_persetujuan_penawaran')->store( + $folderPath, + 'public', + ); + } + + if ($request->hasFile('surat_representasi')) { + $persetujuanPenawaran->surat_representasi = $request->file('surat_representasi')->store( + $folderPath, + 'public', + ); + } + + if ($request->hasFile('bukti_bayar')) { + $persetujuanPenawaran->bukti_bayar = $request->file('bukti_bayar')->store($folderPath, 'public'); + } + + $persetujuanPenawaran->save(); + + // Update the status of the related permohonan to 'spk' + $permohonan = Permohonan::find(request()->get('permohonan_id')); + if ($permohonan) { + $permohonan->status_bayar = request()->get('status_bayar'); + $permohonan->status = 'spk'; + $permohonan->save(); + } return redirect() - ->route('persetujuan-penawaran.index')->with('success', 'Persetujuan Penawaran created successfully.'); + ->route('persetujuan-penawaran.index')->with('success', 'Persetujuan Penawaran berhasil disimpan.'); } /** @@ -46,17 +86,21 @@ /** * Display the specified resource. */ - public function show(PersetujuanPenawaran $persetujuanPenawaran) + public function show($id) { - return view('lpj::persetujuan_penawaran.show', compact('persetujuanPenawaran')); + $permohonan = Permohonan::find($id); + $permohonan->status='tender'; + return $permohonan->save(); } /** * Show the form for editing the specified resource. */ - public function edit(PersetujuanPenawaran $persetujuanPenawaran) + public function edit($id) { - return view('lpj::persetujuan_penawaran.edit', compact('persetujuanPenawaran')); + $permohonan = Permohonan::with(['debiture', 'penawaranTender.detail'])->find($id); + + return view('lpj::persetujuan_penawaran.form', compact('permohonan')); } /** @@ -97,8 +141,7 @@ 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->where('nomor_registrasi', 'LIKE', "%$search%"); }); } @@ -125,7 +168,7 @@ $filteredRecords = $query->count(); // Get the data for the current page - $data = $query->with(['debiture','penawaranTender.detail'])->get(); + $data = $query->with(['debiture', 'penawaranTender.detail', 'penawaranTender.persetujuan'])->get(); // Calculate the page count $pageCount = ceil($totalRecords / $request->get('size')); diff --git a/app/Http/Requests/PersetujuanPenawaranRequest.php b/app/Http/Requests/PersetujuanPenawaranRequest.php index b33cc7a..53315db 100644 --- a/app/Http/Requests/PersetujuanPenawaranRequest.php +++ b/app/Http/Requests/PersetujuanPenawaranRequest.php @@ -1,51 +1,37 @@ 'required|exists:penawaran_tender,id', + 'penawaran_id' => 'nullable|exists:penawaran,id', 'nomor_proposal_penawaran' => 'nullable|string|max:255', 'tanggal_proposal_penawaran' => 'nullable|date', 'biaya_final' => 'nullable|numeric|min:0', 'sla_resume' => 'nullable|date', 'sla_final' => 'nullable|date|after_or_equal:sla_resume', - 'catatan' => 'nullable|string', - 'attachment' => 'nullable|file|mimes:pdf,doc,docx|max:10240', // Max 10MB - 'region_id' => 'nullable|exists:regions,id', + 'file_persetujuan_penawaran' => 'nullable|file|mimes:pdf,doc,docx|max:10240', + 'surat_representasi' => 'nullable|file|mimes:pdf,doc,docx|max:10240', + 'bukti_bayar' => 'nullable|file|mimes:pdf,jpg,jpeg,png|max:10240', 'status' => 'nullable|boolean', - 'authorized_status' => 'nullable|boolean', + 'authorized_status' => 'boolean', 'authorized_at' => 'nullable|date', 'authorized_by' => 'nullable|exists:users,id', + 'catatan' => 'nullable|string', ]; } - /** - * Get custom messages for validator errors. - */ public function messages() - : array { return [ 'penawaran_id.required' => 'Penawaran ID wajib diisi.', @@ -61,9 +47,15 @@ 'sla_final.required' => 'SLA Final wajib diisi.', 'sla_final.date' => 'SLA Final harus berupa tanggal yang valid.', 'sla_final.after_or_equal' => 'SLA Final harus sama dengan atau setelah SLA Resume.', - 'attachment.file' => 'Attachment harus berupa file.', - 'attachment.mimes' => 'Attachment harus berupa file PDF, DOC, atau DOCX.', - 'attachment.max' => 'Ukuran attachment tidak boleh lebih dari 10MB.', + 'file_persetujuan_penawaran.file' => 'File Persetujuan Penawaran harus berupa file.', + 'file_persetujuan_penawaran.mimes' => 'File Persetujuan Penawaran harus berupa file PDF, DOC, atau DOCX.', + 'file_persetujuan_penawaran.max' => 'Ukuran File Persetujuan Penawaran tidak boleh lebih dari 10MB.', + 'surat_representasi.file' => 'Surat Representasi harus berupa file.', + 'surat_representasi.mimes' => 'Surat Representasi harus berupa file PDF, DOC, atau DOCX.', + 'surat_representasi.max' => 'Ukuran Surat Representasi tidak boleh lebih dari 10MB.', + 'bukti_bayar.file' => 'Bukti Bayar harus berupa file.', + 'bukti_bayar.mimes' => 'Bukti Bayar harus berupa file PDF, JPG, JPEG, atau PNG.', + 'bukti_bayar.max' => 'Ukuran Bukti Bayar tidak boleh lebih dari 10MB.', 'region_id.required' => 'Region ID wajib diisi.', 'region_id.exists' => 'Region ID tidak valid.', 'status.required' => 'Status wajib diisi.', @@ -71,6 +63,8 @@ 'authorized_status.boolean' => 'Status otorisasi harus berupa nilai boolean.', 'authorized_at.date' => 'Tanggal otorisasi harus berupa tanggal yang valid.', 'authorized_by.exists' => 'ID pengguna yang mengotorisasi tidak valid.', + 'status_bayar.required' => 'Status bayar wajib diisi.', + 'status_bayar.in' => 'Status bayar harus berupa "sudah_bayar" atau "belum_bayar".', ]; } } diff --git a/app/Models/PenawaranTender.php b/app/Models/PenawaranTender.php index 16b8532..1c2832c 100644 --- a/app/Models/PenawaranTender.php +++ b/app/Models/PenawaranTender.php @@ -55,4 +55,8 @@ class PenawaranTender extends Model { return $this->belongsTo(JenisLaporan::class, 'jenis_laporan_id', 'id'); } + + public function persetujuan(){ + return $this->belongsTo(PersetujuanPenawaran::class, 'id', 'penawaran_id'); + } } diff --git a/app/Models/PersetujuanPenawaran.php b/app/Models/PersetujuanPenawaran.php index d0658a6..15176de 100644 --- a/app/Models/PersetujuanPenawaran.php +++ b/app/Models/PersetujuanPenawaran.php @@ -2,9 +2,6 @@ namespace Modules\Lpj\Models; - use Modules\Lpj\Models\Base; - use Modules\Lpj\Models\PenawaranTender; - use Modules\Lpj\Models\Region; use Modules\Usermanagemenet\Models\User; class PersetujuanPenawaran extends Base @@ -19,20 +16,24 @@ 'biaya_final', 'sla_resume', 'sla_final', - 'catatan', - 'attachment', - 'region_id', + 'file_persetujuan_penawaran', + 'surat_representasi', + 'bukti_bayar', 'status', 'authorized_status', 'authorized_at', 'authorized_by', + 'status', + 'catatan', ]; protected $casts = [ 'tanggal_proposal_penawaran' => 'date', - 'sla_resume' => 'datetime', - 'sla_final' => 'datetime', + 'sla_resume' => 'date', + 'sla_final' => 'date', + 'biaya_final' => 'decimal:2', 'status' => 'boolean', + 'authorized_status' => 'boolean', 'authorized_at' => 'datetime', ]; diff --git a/database/migrations/2024_11_21_054047_update_persetujuan_penawaran_table.php b/database/migrations/2024_11_21_054047_update_persetujuan_penawaran_table.php new file mode 100644 index 0000000..04681db --- /dev/null +++ b/database/migrations/2024_11_21_054047_update_persetujuan_penawaran_table.php @@ -0,0 +1,30 @@ +unsignedBigInteger('created_by')->nullable(); + $table->unsignedBigInteger('updated_by')->nullable(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('persetujuan_penawaran', function (Blueprint $table) { + $table->dropColumn('created_by'); + $table->dropColumn('updated_by'); + }); + } +}; diff --git a/database/migrations/2024_11_21_113855_update_persetujuan_penawaran_table.php b/database/migrations/2024_11_21_113855_update_persetujuan_penawaran_table.php new file mode 100644 index 0000000..4502039 --- /dev/null +++ b/database/migrations/2024_11_21_113855_update_persetujuan_penawaran_table.php @@ -0,0 +1,44 @@ +dropForeign(['region_id']); + $table->dropColumn('attachment'); + + // Add new columns for file attachments + $table->string('file_persetujuan_penawaran')->nullable(); + $table->string('surat_representasi')->nullable(); + $table->string('bukti_bayar')->nullable(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('persetujuan_penawaran', function (Blueprint $table) { + // Reverse the changes + $table->string('attachment')->nullable(); + + $table->dropColumn('file_persetujuan_penawaran'); + $table->dropColumn('surat_representasi'); + $table->dropColumn('bukti_bayar'); + }); + } + } diff --git a/resources/views/persetujuan_penawaran/form.blade.php b/resources/views/persetujuan_penawaran/form.blade.php new file mode 100644 index 0000000..5506a39 --- /dev/null +++ b/resources/views/persetujuan_penawaran/form.blade.php @@ -0,0 +1,126 @@ +@extends('layouts.main') + +@section('breadcrumbs') + {{ Breadcrumbs::render(request()->route()->getName()) }} +@endsection + +@section('content') +
+
+
+
+ Persetujuan Penawaran +
+
+ Back +
+
+
+
+ @csrf + + + + + + + +
+ +
+ + @error('status_bayar') + {{ $message }} + @enderror +
+
+ +
+ +
+ + @error('sla_resume') + {{ $message }} + @enderror +
+
+ +
+ +
+ + @error('sla_final') + {{ $message }} + @enderror +
+
+ +
+ +
+ + @error('file_persetujuan_penawaran') + {{ $message }} + @enderror +
+
+ +
+ +
+ + @error('surat_representasi') + {{ $message }} + @enderror +
+
+ +
+ +
+ + @error('bukti_bayar') + {{ $message }} + @enderror +
+
+ + +
+ +
+ + @error('catatan') + {{ $message }} + @enderror +
+
+ +
+ +
+
+
+
+
+@endsection diff --git a/resources/views/persetujuan_penawaran/index.blade.php b/resources/views/persetujuan_penawaran/index.blade.php index f55ee5b..6a31257 100644 --- a/resources/views/persetujuan_penawaran/index.blade.php +++ b/resources/views/persetujuan_penawaran/index.blade.php @@ -49,6 +49,10 @@ Tanggal Proposal + + Dokumen Persetujuan + + Biaya Final @@ -75,6 +79,43 @@ @endsection @push('scripts') + +