diff --git a/app/Http/Controllers/PembayaranController.php b/app/Http/Controllers/PembayaranController.php index 1c8eaa8..8f48d54 100644 --- a/app/Http/Controllers/PembayaranController.php +++ b/app/Http/Controllers/PembayaranController.php @@ -2,17 +2,18 @@ namespace Modules\Lpj\Http\Controllers; -use App\Http\Controllers\Controller; use Exception; -use Illuminate\Http\JsonResponse; +use Modules\Lpj\Models\Noc; use Illuminate\Http\Request; -use Illuminate\Support\Facades\Auth; -use Illuminate\Support\Facades\Validator; -use Maatwebsite\Excel\Facades\Excel; -use Modules\Lpj\Http\Requests\PersetujuanPenawaranRequest; -use Modules\Lpj\Models\PenawaranTender; +use Illuminate\Http\JsonResponse; use Modules\Lpj\Models\Permohonan; +use App\Http\Controllers\Controller; +use Illuminate\Support\Facades\Auth; +use Maatwebsite\Excel\Facades\Excel; +use Modules\Lpj\Models\PenawaranTender; +use Illuminate\Support\Facades\Validator; use Modules\Lpj\Models\PersetujuanPenawaran; +use Modules\Lpj\Http\Requests\PersetujuanPenawaranRequest; // use Modules\Lpj\Models\JenisPenilaian; @@ -149,6 +150,15 @@ class PembayaranController extends Controller $validated ); + if(isset($validated['nomor_tiket'])){ + $noc = Noc::where('nomor_tiket',$validated['nomor_tiket'])->first(); + if($noc){ + $noc->persetujuan_penawaran_id = $persetujuanPenawaran->id; + $noc->permohonan_id = $validated['permohonan_id']; + $noc->save(); + } + } + $folderPath = 'persetujuan_penawaran/' . $validated['penawaran_id']; if ($request->hasFile('bukti_bayar')) { diff --git a/app/Http/Requests/PersetujuanPenawaranRequest.php b/app/Http/Requests/PersetujuanPenawaranRequest.php index d1f87f8..e6bdf73 100644 --- a/app/Http/Requests/PersetujuanPenawaranRequest.php +++ b/app/Http/Requests/PersetujuanPenawaranRequest.php @@ -14,49 +14,52 @@ public function rules() { return [ - 'permohonan_id' => 'nullable|exists:permohonan,id', - 'penawaran_id' => 'nullable|exists:penawaran,id', - 'nomor_proposal_penawaran' => 'nullable|string|max:255', - 'tanggal_proposal_penawaran' => 'nullable|date', - 'biaya_final' => 'nullable|numeric|min:0', - 'sla_resume' => 'nullable|numeric|min:0', - 'sla_final' => 'nullable|numeric|min:0', - 'file_persetujuan_penawaran' => 'nullable|file|mimes:pdf,doc,docx|max:10240', - 'surat_representasi' => 'nullable|file|mimes:pdf,doc,docx|max:10240', - 'status' => 'nullable|boolean', - 'authorized_status' => 'boolean', - 'authorized_at' => 'nullable|date', - 'authorized_by' => 'nullable|exists:users,id', - 'catatan' => 'nullable|string', - ]; + 'permohonan_id' => 'nullable|exists:permohonan,id', + 'penawaran_id' => 'nullable|exists:penawaran,id', + 'nomor_proposal_penawaran' => 'nullable|string|max:255', + 'nomor_tiket' => 'nullable|string|max:100', + 'tanggal_proposal_penawaran' => 'nullable|date', + 'biaya_final' => 'nullable|numeric|min:0', + 'sla_resume' => 'nullable|numeric|min:0', + 'sla_final' => 'nullable|numeric|min:0', + 'file_persetujuan_penawaran' => 'nullable|file|mimes:pdf,doc,docx|max:10240', + 'surat_representasi' => 'nullable|file|mimes:pdf,doc,docx|max:10240', + 'status' => 'nullable|boolean', + 'authorized_status' => 'boolean', + 'authorized_at' => 'nullable|date', + 'authorized_by' => 'nullable|exists:users,id', + 'catatan' => 'nullable|string', + ]; } public function messages() { return [ - 'penawaran_id.required' => 'Penawaran ID wajib diisi.', - 'penawaran_id.exists' => 'Penawaran ID tidak valid.', - 'nomor_proposal_penawaran.required' => 'Nomor proposal penawaran wajib diisi.', - 'tanggal_proposal_penawaran.required' => 'Tanggal proposal penawaran wajib diisi.', - 'tanggal_proposal_penawaran.date' => 'Tanggal proposal penawaran harus berupa tanggal yang valid.', - 'biaya_final.required' => 'Biaya final wajib diisi.', - 'biaya_final.numeric' => 'Biaya final harus berupa angka.', - 'biaya_final.min' => 'Biaya final tidak boleh kurang dari 0.', - 'sla_resume.required' => 'SLA Resume wajib diisi.', - 'sla_final.required' => 'SLA Final wajib diisi.', - '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.', - 'region_id.required' => 'Region ID wajib diisi.', - 'region_id.exists' => 'Region ID tidak valid.', - 'status.required' => 'Status wajib diisi.', - 'status.boolean' => 'Status harus berupa nilai boolean.', - '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.', - ]; + 'penawaran_id.required' => 'Penawaran ID wajib diisi.', + 'penawaran_id.exists' => 'Penawaran ID tidak valid.', + 'nomor_proposal_penawaran.required' => 'Nomor proposal penawaran wajib diisi.', + 'nomor_tiket.string' => 'Nomor tiket harus berupa teks.', + 'nomor_tiket.max' => 'Nomor tiket tidak boleh lebih dari 100 karakter.', + 'tanggal_proposal_penawaran.required' => 'Tanggal proposal penawaran wajib diisi.', + 'tanggal_proposal_penawaran.date' => 'Tanggal proposal penawaran harus berupa tanggal yang valid.', + 'biaya_final.required' => 'Biaya final wajib diisi.', + 'biaya_final.numeric' => 'Biaya final harus berupa angka.', + 'biaya_final.min' => 'Biaya final tidak boleh kurang dari 0.', + 'sla_resume.required' => 'SLA Resume wajib diisi.', + 'sla_final.required' => 'SLA Final wajib diisi.', + '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.', + 'region_id.required' => 'Region ID wajib diisi.', + 'region_id.exists' => 'Region ID tidak valid.', + 'status.required' => 'Status wajib diisi.', + 'status.boolean' => 'Status harus berupa nilai boolean.', + '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.', + ]; } } diff --git a/app/Models/PersetujuanPenawaran.php b/app/Models/PersetujuanPenawaran.php index 0bb8158..feec460 100644 --- a/app/Models/PersetujuanPenawaran.php +++ b/app/Models/PersetujuanPenawaran.php @@ -2,7 +2,7 @@ namespace Modules\Lpj\Models; - use Modules\Usermanagemenet\Models\User; + use Modules\Usermanagement\Models\User; class PersetujuanPenawaran extends Base { @@ -13,6 +13,7 @@ 'permohonan_id', 'penawaran_id', 'nomor_proposal_penawaran', + 'nomor_tiket', 'tanggal_proposal_penawaran', 'biaya_final', 'sla_resume', @@ -46,12 +47,6 @@ return $this->belongsTo(Permohonan::class, 'permohonan_id'); } - // Relationship with Region - public function region() - { - return $this->belongsTo(Region::class); - } - // Relationship with User (for authorized_by) public function authorizedBy() { diff --git a/database/migrations/2025_09_11_145857_add_nomor_tiket_to_persetujuan_penawaran_table.php b/database/migrations/2025_09_11_145857_add_nomor_tiket_to_persetujuan_penawaran_table.php new file mode 100644 index 0000000..de8706d --- /dev/null +++ b/database/migrations/2025_09_11_145857_add_nomor_tiket_to_persetujuan_penawaran_table.php @@ -0,0 +1,33 @@ +string('nomor_tiket', 100)->nullable()->after('nomor_proposal_penawaran') + ->comment('Nomor tiket untuk tracking persetujuan penawaran'); + }); + } + + /** + * Reverse the migrations. + * Menghapus kolom nomor_tiket dari tabel persetujuan_penawaran + */ + public function down(): void + { + Schema::table('persetujuan_penawaran', function (Blueprint $table) { + // Menghapus kolom nomor_tiket + $table->dropColumn('nomor_tiket'); + }); + } +};