Tambah fitur unggah dokumen dan update status permohonan

Menambahkan fitur untuk mengunggah dokumen persetujuan penawaran, surat representasi, dan bukti bayar saat menyimpan persetujuan penawaran. Sekaligus mengupdate status permohonan terkait menjadi 'spk'. Menambahkan tampilan baru untuk formulir persetujuan penawaran dan memperbarui breadcrumb untuk mendukung halaman baru ini.
This commit is contained in:
Daeng Deni Mardaeni
2024-11-21 13:00:57 +07:00
parent 43caa255a1
commit 41687dfdd6
3 changed files with 726 additions and 559 deletions

View File

@@ -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,42 @@
$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 = '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.');
}
/**
@@ -54,9 +93,11 @@
/**
* 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 +138,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 +165,7 @@
$filteredRecords = $query->count();
// Get the data for the current page
$data = $query->with(['debiture','penawaranTender.detail','penawaranTender.persetujuan'])->get();
$data = $query->with(['debiture', 'penawaranTender.detail', 'penawaranTender.persetujuan'])->get();
// Calculate the page count
$pageCount = ceil($totalRecords / $request->get('size'));

View File

@@ -0,0 +1,126 @@
@extends('layouts.main')
@section('breadcrumbs')
{{ Breadcrumbs::render(request()->route()->getName()) }}
@endsection
@section('content')
<div class="w-full grid gap-5 lg:gap-7.5 mx-auto">
<div class="card pb-2.5">
<div class="card-header" id="basic_settings">
<div class="card-title flex flex-row gap-1.5">
Persetujuan Penawaran
</div>
<div class="flex items-center gap-2">
<a href="{{ route('persetujuan-penawaran.index') }}" class="btn btn-xs btn-info"><i class="ki-filled ki-exit-left"></i> Back</a>
</div>
</div>
<div class="card-body">
<form action="{{ route('persetujuan-penawaran.store') }}" method="POST" class="grid gap-5" enctype="multipart/form-data">
@csrf
<input type="hidden" name="permohonan_id" value="{{ $permohonan->id }}">
<input type="hidden" name="penawaran_id" value="{{ $permohonan->penawaran->id ?? old('penawaran_id') }}">
<input type="hidden" name="nomor_proposal_penawaran" value="{{ $permohonan->penawaran->detail->no_proposal ?? old('nomor_proposal_penawaran') }}">
<input type="hidden" name="tanggal_proposal_penawaran" value="{{ $permohonan->penawaran->detail->tgl_proposal ?? old('tanggal_proposal_penawaran') }}">
<input type="hidden" name="biaya_final" value="{{ $permohonan->penawaran->detail->biaya_penawaran ?? old('biaya_final') }}">
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Status Bayar
</label>
<div class="flex flex-wrap items-baseline w-full">
<select class="input tomselect w-full @error('status_bayar') border-danger bg-danger-light @enderror" name="status_bayar" id="status_bayar">
<option value="">Pilih Status Bayar</option>
<option value="sudah_bayar" {{ (old('status_bayar') == 'sudah_bayar') || (isset($permohonan) && $permohonan->status_bayar == 'sudah_bayar') ? 'selected' : '' }}>Sudah Bayar</option>
<option value="belum_bayar" {{ (old('status_bayar') == 'belum_bayar') || (isset($permohonan) && $permohonan->status_bayar == 'belum_bayar') ? 'selected' : '' }}>Belum Bayar</option>
</select>
@error('status_bayar')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
SLA Resume
</label>
<div class="flex flex-wrap items-baseline w-full">
<input type="date" name="sla_resume" id="sla_resume" class="input w-full @error('sla_resume') border-danger bg-danger-light @enderror" value="{{ old('sla_resume', $persetujuanPenawaran->sla_resume ?? '') }}">
@error('sla_resume')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
SLA Final
</label>
<div class="flex flex-wrap items-baseline w-full">
<input type="date" name="sla_final" id="sla_final" class="input w-full @error('sla_final') border-danger bg-danger-light @enderror" value="{{ old('sla_final', $persetujuanPenawaran->sla_final ?? '') }}">
@error('sla_final')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
File Persetujuan Penawaran
</label>
<div class="flex flex-wrap items-baseline w-full">
<input type="file" name="file_persetujuan_penawaran" id="file_persetujuan_penawaran" class="file-input w-full @error('file_persetujuan_penawaran') border-danger bg-danger-light @enderror" accept=".pdf,.doc,.docx">
@error('file_persetujuan_penawaran')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Surat Representasi
</label>
<div class="flex flex-wrap items-baseline w-full">
<input type="file" name="surat_representasi" id="surat_representasi" class="file-input w-full @error('surat_representasi') border-danger bg-danger-light @enderror" accept=".pdf,.doc,.docx">
@error('surat_representasi')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Bukti Bayar
</label>
<div class="flex flex-wrap items-baseline w-full">
<input type="file" name="bukti_bayar" id="bukti_bayar" class="file-input w-full @error('bukti_bayar') border-danger bg-danger-light @enderror" accept=".pdf,.jpg,.jpeg,.png">
@error('bukti_bayar')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Catatan
</label>
<div class="flex flex-wrap items-baseline w-full">
<textarea name="catatan" id="catatan" rows="4" class="textarea w-full @error('catatan') border-danger bg-danger-light @enderror" placeholder="Masukkan catatan">{{ old('catatan', $persetujuanPenawaran->catatan ?? '') }}</textarea>
@error('catatan')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
</div>
</div>
<div class="flex justify-end">
<button type="submit" class="btn btn-primary">
Proses
</button>
</div>
</form>
</div>
</div>
</div>
@endsection

File diff suppressed because it is too large Load Diff