Merge branch 'staging' of https://git.putrakuningan.com/daengdeni/lpj into tender

This commit is contained in:
2024-11-20 08:25:53 +07:00
12 changed files with 344 additions and 278 deletions

View File

@@ -1,34 +1,17 @@
<?php
use Carbon\Carbon;
use Modules\Lpj\Models\HolidayCalendar;
use Modules\Lpj\Models\PenawaranDetailTender;
use Modules\Lpj\Models\PenawaranTender;
function formatTanggalIndonesia($date)
function formatTanggalIndonesia($date,$time=false)
{
$carbonDate = Carbon::parse($date);
$indonesianMonths = [
'Januari',
'Februari',
'Maret',
'April',
'Mei',
'Juni',
'Juli',
'Agustus',
'September',
'Oktober',
'November',
'Desember',
];
$month = $indonesianMonths[$carbonDate->month - 1];
return $carbonDate->format('d') . ' ' . $month . ' ' . $carbonDate->format('Y');
Carbon::setLocale('id');
$waktu = Carbon::parse($date);
if(!$time){
return $waktu->translatedFormat('d F 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';
}
@@ -42,11 +25,7 @@ function formatRupiah($number)
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 ?? '');
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
@@ -80,10 +59,8 @@ 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) {
$query = PenawaranDetailTender::select('id')->where('penawaran_id', '=', $id)->where('status', '=', 1)->where(
function ($query) {
// no_proposal
$query->orWhere('no_proposal', '', "");
$query->orWhereNull('no_proposal');
@@ -100,7 +77,8 @@ function checkKelengkapanDetailKJPP($id)
$query->orWhere('dokumen_persetujuan', '', "");
$query->orWhereNull('dokumen_persetujuan');
})->get();
},
)->get();
// $sql = DB::getQueryLog();
@@ -114,7 +92,6 @@ function checkKelengkapanDetailKJPP($id)
// convert
function convertSlug($slug)
{
$words = explode('-', $slug);
foreach ($words as $index => $word) {
@@ -123,4 +100,32 @@ function convertSlug($slug)
return implode(' ', $words);
}
// andy add
function hitungHariKerja($tanggalMulai, $tanggalSelesai)
{
$tanggalMulai = Carbon::parse($tanggalMulai)->startOfDay();
$tanggalSelesai = Carbon::parse($tanggalSelesai)->endOfDay();
$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;
}

View File

@@ -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);
});

View File

@@ -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) {

View File

@@ -0,0 +1,10 @@
<?php
namespace Modules\Lpj\Models;
use Modules\Basicdata\Models\HolidayCalendar as BasicdataHolidayCalendar;
class HolidayCalendar extends BasicdataHolidayCalendar
{
}

View File

@@ -2,6 +2,7 @@
namespace Modules\Lpj\Models;
use Illuminate\Support\Facades\Storage;
use Modules\Lpj\Database\Factories\PermohonanFactory;
use Modules\Lpj\Services\PermohonanHistoryService;
use Modules\Usermanagement\Models\User;
@@ -39,7 +40,6 @@ class Permohonan extends Base
'registrasi_at',
'jenis_penilaian_id',
'region_id',
'attachment'
];
protected static function boot()
@@ -70,12 +70,7 @@ class Permohonan extends Base
$fileName = time() . '_' . $file->getClientOriginalName();
$filePath = $file->storeAs('permohonan_attachments', $fileName, 'public');
// Delete old file if it exists
if ($permohonan->attachment) {
Storage::disk('public')->delete($permohonan->attachment);
}
$permohonan->attachment = $filePath;
$permohonan->dokumen = $filePath;
}
}
@@ -87,7 +82,7 @@ class Permohonan extends Base
$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;
$file = $permohonan->dokumen ?? null;
$historyService->createHistory(
$permohonan,
@@ -95,7 +90,7 @@ class Permohonan extends Base
$keterangan,
$beforeRequest,
$afterRequest,
$file
$file,
);
}
@@ -149,7 +144,13 @@ class Permohonan extends Base
return $this->belongsTo(Regions::class, 'region_id');
}
public function penawaran(){
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');
}
}

View File

@@ -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

View File

@@ -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,

View File

@@ -277,4 +277,5 @@
</div>
</div>
@include('lpj::component.history-permohonan')
@include('lpj::component.pdfviewer')

View File

@@ -0,0 +1,78 @@
<div class="card min-w-full">
<div class="card-header">
<h3 class="card-title">
Activity
</h3>
</div>
<div class="card-body">
<div class="flex flex-col">
@foreach($permohonan->histories as $activity)
<div class="flex items-start relative">
@if($loop->first)
<div
class="w-9 left-0 top-9 absolute bottom-0 translate-x-1/2 border-l border-l-primary">
</div>
@endif
@if(!$loop->last && !$loop->first)
<div
class="w-9 left-0 top-9 absolute bottom-0 translate-x-1/2 border-l border-l-gray-300">
</div>
@endif
<div
class="flex items-center justify-center shrink-0 rounded-full
{{ $loop->first ? 'btn-outline btn-primary' : 'bg-gray-100 border-gray-300 text-gray-600' }}
size-9">
@switch(strtolower($activity->status))
@case('preregister')
<i class="ki-filled ki-note-2 text-base"></i>
@break
@case('order')
<i class="ki-filled ki-handcart text-base"></i>
@break
@case('revisi')
<i class="ki-filled ki-notepad-edit text-base"></i>
@break
@case('register')
<i class="ki-filled ki-note-2 text-base"></i>
@break
@case('assign')
<i class="ki-filled ki-file-added"></i>
@break
@case('survey')
<i class="ki-filled ki-map text-base"></i>
@break
@case('proses laporan')
<i class="ki-filled ki-paper-plane text-base"></i>
@break
@case('approved')
<i class="ki-filled ki-check text-base"></i>
@break
@case('delivered')
<i class="ki-filled ki-delivery-3 text-base"></i>
@break
@default
<i class="ki-filled ki-information text-base"></i>
@endswitch
</div>
<div class="ml-3 mb-5">
<span class="text-sm text-gray-700 capitalize font-medium">{{ $activity->status }}</span>
<p class="text-xs text-gray-500 mt-1">{{ $activity->keterangan }}</p>
<div class="flex items-center mt-2">
<span class="text-xs text-gray-400">{{ $activity->created_by ? $activity->creator->name : 'System' }}</span>
<span class="text-xs text-gray-400 ml-2">{{ $activity->created_at->format('d M Y H:i') }}</span>
</div>
@if($activity->file_path)
<a href="{{ route('activity.download', $activity->permohonan_id) }}" class="text-xs text-blue-600 hover:underline mt-2 inline-block">
<i class="ki-outline ki-attachment"></i> Attachment
</a>
@endif
</div>
</div>
@endforeach
</div>
</div>
</div>

View File

@@ -139,7 +139,7 @@
</ul>
<p>Harap proposal dibuat dengan harga yang minimal sehingga tidak perlu tawar menawar lagi.</p>
<p>Mohon proposal dapat saya terima segera, sebelum
<span class="font-bold">{{ formatTanggalIndonesia2($penawaran->end_date) }}</span>
<span class="font-bold">{{ formatTanggalIndonesia($penawaran->end_date,true) }}</span>
</p>
<p>Best Regards,
<div class="font-bold">

View File

@@ -154,7 +154,7 @@
<div class="content">
Harap proposal dibuat dengan harga yang minimal sehingga tidak perlu tawar menawar lagi. <br />
Mohon proposal dapat saya terima segera, sebelum <span
class="important">{{ formatTanggalIndonesia2($penawaran->end_date) }}</span>
class="important">{{ formatTanggalIndonesia($penawaran->end_date,true) }}</span>
</div>
<div class="signature">

View File

@@ -9,7 +9,7 @@
@include('lpj::component.detail-jaminan',['backLink' => 'authorization.index'])
<div class="card">
<form action="{{ route('authorization.update', $permohonan->id) }}" method="POST" id="authorizationForm">
<form action="{{ route('authorization.update', $permohonan->id) }}" method="POST" id="authorizationForm" enctype="multipart/form-data">
<input type="hidden" name="_method" value="PUT">
@csrf
<div class="card-body lg:py-7.5">
@@ -27,7 +27,7 @@
Upload File Revisi
</label>
<div class="flex flex-wrap items-baseline w-full">
<input type="file" class="file-input" id="revisionFile" name="revisionFile">
<input type="file" class="file-input" id="revisionFile" name="attachment">
<em class="alert text-danger text-sm hidden" id="file-message"></em>
</div>
</div>