diff --git a/app/Helpers/Lpj.php b/app/Helpers/Lpj.php index 355c589..e27ff54 100644 --- a/app/Helpers/Lpj.php +++ b/app/Helpers/Lpj.php @@ -1,126 +1,131 @@ month - 1]; - return $carbonDate->format('d') . ' ' . $month . ' ' . $carbonDate->format('Y'); -} - -function formatTanggalIndonesia2($date) -{ - \Carbon\Carbon::setLocale('id'); - $waktu = \Carbon\Carbon::parse($date); - return $waktu->translatedFormat('d F Y') . ' pukul ' . $waktu->format('H.i') . ' WIB'; -} + function formatTanggalIndonesia($date,$time=false) + { + Carbon::setLocale('id'); + $waktu = Carbon::parse($date); + if(!$time){ + return $waktu->translatedFormat('d F Y'); + } + return $waktu->translatedFormat('d F Y') . ' pukul ' . $waktu->format('H.i') . ' WIB'; + } -function formatRupiah($number) -{ - $number = (float) $number; - return 'Rp ' . number_format($number, 2, ',', '.'); -} + function formatRupiah($number) + { + $number = (float)$number; + return 'Rp ' . number_format($number, 2, ',', '.'); + } -function formatAlamat($alamat) -{ - return ($alamat->address ? $alamat->address . ', ' : '') . - (isset($alamat->village) ? $alamat->village->name . ', ' : '') . - (isset($alamat->city) ? $alamat->city->name . ', ' : '') . - (isset($alamat->province) ? $alamat->province->name . ', ' : '') . - ($alamat->postal_code ?? ''); -} + function formatAlamat($alamat) + { + return ($alamat->address ? $alamat->address . ', ' : '') . (isset($alamat->village) ? $alamat->village->name . ', ' : '') . (isset($alamat->city) ? $alamat->city->name . ', ' : '') . (isset($alamat->province) ? $alamat->province->name . ', ' : '') . ($alamat->postal_code ?? ''); + } -// andy add -function checkActiveDateRangePenawaran($id) -{ - $penawaran = PenawaranTender::find($id); + // andy add + function checkActiveDateRangePenawaran($id) + { + $penawaran = PenawaranTender::find($id); - $start_date = strtotime($penawaran->start_date); - $end_date = strtotime($penawaran->end_date); - $todays_date = strtotime(now()); + $start_date = strtotime($penawaran->start_date); + $end_date = strtotime($penawaran->end_date); + $todays_date = strtotime(now()); - $allow = true; - if ($todays_date >= $start_date && $todays_date <= $end_date) { - //Penawaran dibuka $allow = true; - } else { - if ($todays_date < $start_date) { - //Penawaran Belum dibuka + if ($todays_date >= $start_date && $todays_date <= $end_date) { + //Penawaran dibuka $allow = true; } else { - //Penawaran sudah ditutup + if ($todays_date < $start_date) { + //Penawaran Belum dibuka + $allow = true; + } else { + //Penawaran sudah ditutup + $allow = false; + } + } + + return $allow; + } + + function checkKelengkapanDetailKJPP($id) + { + $allow = true; + // DB::enableQueryLog(); + // detail_penawaran apakah isian biaya_penawaran, attachment, dokumen_persetujuan sudah lengkap? + $query = PenawaranDetailTender::select('id')->where('penawaran_id', '=', $id)->where('status', '=', 1)->where( + function ($query) { + // no_proposal + $query->orWhere('no_proposal', '', ""); + $query->orWhereNull('no_proposal'); + + // tgl_proposal + $query->orWhere('tgl_proposal', '', ""); + $query->orWhereNull('tgl_proposal'); + + $query->orWhere('biaya_penawaran', '', ""); + $query->orWhereNull('biaya_penawaran'); + + $query->orWhere('attachment', '', ""); + $query->orWhereNull('attachment'); + + $query->orWhere('dokumen_persetujuan', '', ""); + $query->orWhereNull('dokumen_persetujuan'); + }, + )->get(); + // $sql = DB::getQueryLog(); + + + if (sizeof($query) > 0) { $allow = false; } + + return $allow; } - return $allow; -} + // convert + function convertSlug($slug) + { + $words = explode('-', $slug); -function checkKelengkapanDetailKJPP($id) -{ - $allow = true; - // DB::enableQueryLog(); - // detail_penawaran apakah isian biaya_penawaran, attachment, dokumen_persetujuan sudah lengkap? - $query = PenawaranDetailTender::select('id') - ->where('penawaran_id', '=', $id) - ->where('status','=',1) - ->where(function ($query) { - // no_proposal - $query->orWhere('no_proposal', '', ""); - $query->orWhereNull('no_proposal'); - - // tgl_proposal - $query->orWhere('tgl_proposal', '', ""); - $query->orWhereNull('tgl_proposal'); - - $query->orWhere('biaya_penawaran', '', ""); - $query->orWhereNull('biaya_penawaran'); + foreach ($words as $index => $word) { + $words[$index] = strtoupper($word); + } - $query->orWhere('attachment', '', ""); - $query->orWhereNull('attachment'); - - $query->orWhere('dokumen_persetujuan', '', ""); - $query->orWhereNull('dokumen_persetujuan'); - })->get(); - // $sql = DB::getQueryLog(); - - - if (sizeof($query) > 0) { - $allow = false; + return implode(' ', $words); } - return $allow; -} + // andy add -// convert -function convertSlug($slug) -{ - $words = explode('-', $slug); + function hitungHariKerja($tanggalMulai, $tanggalSelesai) + { + $tanggalMulai = Carbon::parse($tanggalMulai)->startOfDay(); + $tanggalSelesai = Carbon::parse($tanggalSelesai)->endOfDay(); - foreach ($words as $index => $word) { - $words[$index] = strtoupper($word); + $hariKerja = 0; + $tanggalSekarang = $tanggalMulai->copy(); + + // Ambil semua tanggal libur dari tabel holiday calendar + $tanggalLibur = HolidayCalendar::whereBetween('date', [$tanggalMulai, $tanggalSelesai])->pluck('date')->map( + function ($item) { + return Carbon::parse($item)->format('Y-m-d'); + }, + )->toArray(); + + while ($tanggalSekarang <= $tanggalSelesai) { + // Cek apakah hari ini bukan Sabtu atau Minggu dan bukan hari libur + if (!$tanggalSekarang->isWeekend() && !in_array($tanggalSekarang->format('Y-m-d'), $tanggalLibur)) { + $hariKerja++; + } + $tanggalSekarang->addDay(); + } + + return $hariKerja; } - - return implode(' ', $words); -} -// andy add diff --git a/app/Http/Controllers/PenilaianController.php b/app/Http/Controllers/PenilaianController.php index 137cb6b..c5d5252 100644 --- a/app/Http/Controllers/PenilaianController.php +++ b/app/Http/Controllers/PenilaianController.php @@ -298,9 +298,7 @@ class PenilaianController extends Controller $q->orWhere('status', 'LIKE', '%' . $search . '%'); }); } - - // $query->whereRaw('LOWER(status) = ?', ['registered']); - $query->whereIn('status', ['registered', 'proses_penawaran']); + $query->whereIn('status', ['registered', 'registrasi-final']); $query->whereHas('region.teams.teamsUsers.user', function ($q) { $q->where('id', Auth::user()->id); }); diff --git a/app/Http/Controllers/PermohonanController.php b/app/Http/Controllers/PermohonanController.php index 3a0956d..20a379b 100644 --- a/app/Http/Controllers/PermohonanController.php +++ b/app/Http/Controllers/PermohonanController.php @@ -147,30 +147,8 @@ if ($permohonan->status == 'revisi') { $validate['status'] = 'order'; } - $permohonan->update($validate); - $afterRequest = $permohonan->fresh()->toArray(); - // Process file upload - $file = null; - if ($request->hasFile('attachment')) { - $file = $request->file('attachment'); - } - - // Get keterangan if provided - $keterangan = $request->input('keterangan') ?? null; - - $status =$validate['status'] ?? $permohonan->status; - - $this->historyService->createHistory( - $permohonan, - $status, - $keterangan, - $beforeRequest, - $afterRequest, - $file - ); - return redirect() ->route('permohonan.index')->with('success', 'Permohonan updated successfully'); } catch (Exception $e) { diff --git a/app/Models/HolidayCalendar.php b/app/Models/HolidayCalendar.php new file mode 100644 index 0000000..ec721d6 --- /dev/null +++ b/app/Models/HolidayCalendar.php @@ -0,0 +1,10 @@ +hasFile('attachment')) { - $file = request()->file('attachment'); - $fileName = time() . '_' . $file->getClientOriginalName(); - $filePath = $file->storeAs('permohonan_attachments', $fileName, 'public'); + static::updated(function ($permohonan) { + static::createHistory($permohonan, 'updated'); + }); + } - // Delete old file if it exists - if ($permohonan->attachment) { - Storage::disk('public')->delete($permohonan->attachment); + protected static function handleFileUpload($permohonan) + { + if (request()->hasFile('attachment')) { + $file = request()->file('attachment'); + $fileName = time() . '_' . $file->getClientOriginalName(); + $filePath = $file->storeAs('permohonan_attachments', $fileName, 'public'); + + $permohonan->dokumen = $filePath; } + } - $permohonan->attachment = $filePath; + protected static function createHistory($permohonan, $action) + { + $historyService = app(PermohonanHistoryService::class); + + $status = $permohonan->status; + $keterangan = request()->input('keterangan'); // Get keterangan from request + $beforeRequest = $action === 'updated' ? $permohonan->getOriginal() : []; + $afterRequest = $permohonan->toArray(); + $file = $permohonan->dokumen ?? null; + + $historyService->createHistory( + $permohonan, + $status, + $keterangan, + $beforeRequest, + $afterRequest, + $file, + ); + } + + public function user() + { + return $this->belongsTo(User::class); + } + + public function branch() + { + return $this->belongsTo(Branch::class); + } + + public function tujuanPenilaian() + { + return $this->belongsTo(TujuanPenilaian::class); + } + + public function debiture() + { + return $this->belongsTo(Debiture::class); + } + + public function documents() + { + return $this->hasMany(DokumenJaminan::class); + } + + public function nilaiPlafond() + { + return $this->belongsTo(NilaiPlafond::class); + } + + public function jenisFasilitasKredit() + { + return $this->belongsTo(JenisFasilitasKredit::class); + } + + public function penilaian() + { + return $this->belongsTo(Penilaian::class, 'nomor_registrasi', 'nomor_registrasi'); + } + + public function penawaranTender() + { + return $this->hasMany(PenawaranTender::class, 'nomor_registrasi'); + } + + public function region() + { + return $this->belongsTo(Regions::class, 'region_id'); + } + + public function penawaran() + { + return $this->belongsTo(PenawaranTender::class, 'nomor_registrasi', 'nomor_registrasi'); + } + + public function histories() + { + return $this->hasMany(PermohonanHistory::class, 'permohonan_id', 'id')->orderBy('created_at', 'desc'); } } - - protected static function createHistory($permohonan, $action) - { - $historyService = app(PermohonanHistoryService::class); - - $status = $permohonan->status; - $keterangan = request()->input('keterangan'); // Get keterangan from request - $beforeRequest = $action === 'updated' ? $permohonan->getOriginal() : []; - $afterRequest = $permohonan->toArray(); - $file = $permohonan->attachment ? Storage::disk('public')->path($permohonan->attachment) : null; - - $historyService->createHistory( - $permohonan, - $status, - $keterangan, - $beforeRequest, - $afterRequest, - $file - ); - } - - public function user() - { - return $this->belongsTo(User::class); - } - - public function branch() - { - return $this->belongsTo(Branch::class); - } - - public function tujuanPenilaian() - { - return $this->belongsTo(TujuanPenilaian::class); - } - - public function debiture() - { - return $this->belongsTo(Debiture::class); - } - - public function documents() - { - return $this->hasMany(DokumenJaminan::class); - } - - public function nilaiPlafond() - { - return $this->belongsTo(NilaiPlafond::class); - } - - public function jenisFasilitasKredit() - { - return $this->belongsTo(JenisFasilitasKredit::class); - } - - public function penilaian() - { - return $this->belongsTo(Penilaian::class, 'nomor_registrasi', 'nomor_registrasi'); - } - - public function penawaranTender() - { - return $this->hasMany(PenawaranTender::class, 'nomor_registrasi'); - } - - public function region() - { - return $this->belongsTo(Regions::class, 'region_id'); - } - - public function penawaran(){ - return $this->belongsTo(PenawaranTender::class, 'nomor_registrasi', 'nomor_registrasi'); - } -} diff --git a/app/Models/PermohonanHistory.php b/app/Models/PermohonanHistory.php index 2b58a8f..a0f7d34 100644 --- a/app/Models/PermohonanHistory.php +++ b/app/Models/PermohonanHistory.php @@ -4,6 +4,8 @@ namespace Modules\Lpj\Models; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Factories\HasFactory; +use Modules\Usermanagement\Models\User; + // use Modules\Lpj\Database\Factories\PermohonanHistoryFactory; class PermohonanHistory extends Base diff --git a/app/Services/PermohonanHistoryService.php b/app/Services/PermohonanHistoryService.php index 783d41b..3b9e60c 100644 --- a/app/Services/PermohonanHistoryService.php +++ b/app/Services/PermohonanHistoryService.php @@ -7,15 +7,8 @@ use Modules\Lpj\Models\PermohonanHistory; class PermohonanHistoryService { - public function createHistory(Permohonan $permohonan, string $status, ?string $keterangan, array $beforeRequest, array $afterRequest, ?string $file = null) + public function createHistory(Permohonan $permohonan, string $status, ?string $keterangan, array $beforeRequest, array $afterRequest, ?string $filePath = null) { - - $filePath = null; - if ($file) { - $filePath = $file->store('permohonan_history_files', 'public'); - } - - try { $history = PermohonanHistory::create([ 'permohonan_id' => $permohonan->id, diff --git a/resources/views/component/detail-jaminan.blade.php b/resources/views/component/detail-jaminan.blade.php index 63b2817..4d5266e 100644 --- a/resources/views/component/detail-jaminan.blade.php +++ b/resources/views/component/detail-jaminan.blade.php @@ -277,4 +277,5 @@ +@include('lpj::component.history-permohonan') @include('lpj::component.pdfviewer') diff --git a/resources/views/component/history-permohonan.blade.php b/resources/views/component/history-permohonan.blade.php new file mode 100644 index 0000000..85ed489 --- /dev/null +++ b/resources/views/component/history-permohonan.blade.php @@ -0,0 +1,78 @@ +
+
+

+ Activity +

+
+
+
+ @foreach($permohonan->histories as $activity) +
+ @if($loop->first) +
+
+ @endif + @if(!$loop->last && !$loop->first) +
+
+ @endif +
+ @switch(strtolower($activity->status)) + @case('preregister') + + @break + @case('order') + + @break + + @case('revisi') + + @break + + @case('register') + + @break + + @case('assign') + + @break + + @case('survey') + + @break + @case('proses laporan') + + @break + @case('approved') + + @break + @case('delivered') + + @break + @default + + @endswitch +
+
+ {{ $activity->status }} +

{{ $activity->keterangan }}

+
+ {{ $activity->created_by ? $activity->creator->name : 'System' }} + {{ $activity->created_at->format('d M Y H:i') }} +
+ @if($activity->file_path) + + Attachment + + @endif +
+
+ @endforeach +
+
+
diff --git a/resources/views/penawaran/surat_tender.blade.php b/resources/views/penawaran/surat_tender.blade.php index 7db7b5c..06996a2 100644 --- a/resources/views/penawaran/surat_tender.blade.php +++ b/resources/views/penawaran/surat_tender.blade.php @@ -139,7 +139,7 @@

Harap proposal dibuat dengan harga yang minimal sehingga tidak perlu tawar menawar lagi.

Mohon proposal dapat saya terima segera, sebelum - {{ formatTanggalIndonesia2($penawaran->end_date) }} + {{ formatTanggalIndonesia($penawaran->end_date,true) }}

Best Regards,

diff --git a/resources/views/penawaran/surat_tender_download.blade.php b/resources/views/penawaran/surat_tender_download.blade.php index 0f058bc..a5b269a 100644 --- a/resources/views/penawaran/surat_tender_download.blade.php +++ b/resources/views/penawaran/surat_tender_download.blade.php @@ -154,7 +154,7 @@
Harap proposal dibuat dengan harga yang minimal sehingga tidak perlu tawar menawar lagi.
Mohon proposal dapat saya terima segera, sebelum {{ formatTanggalIndonesia2($penawaran->end_date) }} + class="important">{{ formatTanggalIndonesia($penawaran->end_date,true) }}
diff --git a/resources/views/permohonan/authorization/show.blade.php b/resources/views/permohonan/authorization/show.blade.php index bd40825..193999a 100644 --- a/resources/views/permohonan/authorization/show.blade.php +++ b/resources/views/permohonan/authorization/show.blade.php @@ -9,7 +9,7 @@ @include('lpj::component.detail-jaminan',['backLink' => 'authorization.index'])
-
+ @csrf
@@ -27,7 +27,7 @@ Upload File Revisi
- +