Merge pull request 'Menambahkan fitur Kirim Surat Tender All dan ada yang saya sedikit perbaiki dari Kirim Surat Tender dari Setiap KJPP' (#47) from tender into staging

Reviewed-on: #47
This commit is contained in:
putrakuningan
2024-11-28 04:35:31 +00:00
9 changed files with 872 additions and 617 deletions

View File

@@ -684,7 +684,12 @@ class TenderController extends Controller
->with('error', 'Anda Belum Membuat Dokumen Jaminan. Silahkan isi terlebih dahulu!');
}
$detail_penawaran = PenawaranDetailTender::where('penawaran_id', '=', $penawaran->id)->where('status', '=', 1)->pluck('kjpp_rekanan_id')->toArray();
$detail_penawaran = PenawaranDetailTender::where('penawaran_id', '=', $penawaran->id)
->where('status', '=', 1)
->pluck('kjpp_rekanan_id')
->toArray();
$kjpps = KJPP::whereIn('id', $detail_penawaran)
->get()
->map(function ($item) {
@@ -702,10 +707,11 @@ class TenderController extends Controller
}
}
return array_filter($emails);
})
->flatten()
->toArray();
return [
'kjpp' => $item,
'emails' => array_filter($emails)
];
});
foreach ($permohonan->debiture->documents as $document) {
$village_permohonan = $document->village_code;
@@ -719,9 +725,21 @@ class TenderController extends Controller
$cities = City::where('code', $city_permohonan)->get();
$provinces = Province::where('code', $province_permohonan)->get();
$subject = 'Send Penawaran Email';
$body_pdf = view('lpj::penawaran.kirimEmail', [
'penawaran' => $penawaran,
'permohonan' => $permohonan,
'kjpps' => $kjpps->pluck('emails')->flatten()->toArray(),
'villages' => $villages,
'districts' => $districts,
'cities' => $cities,
'provinces' => $provinces
])->render();
// Dispatch job untuk mengirim email
SendPenawaranTenderJob::dispatch(
$kjpps,
$kjpps->pluck('emails')->flatten()->toArray(),
$penawaran,
$permohonan,
$villages,
@@ -730,7 +748,119 @@ class TenderController extends Controller
$provinces
);
return redirect()->route('tender.penawaran.ulang.index')->with('success', 'Email Penawaran Berhasil Terkirim!');
try {
// Proses log email untuk setiap KJPP
foreach ($kjpps as $kjppData) {
foreach ($kjppData['emails'] as $email) {
// Cek log yang sudah ada
$log = PenawaranEmailTenderLog::where('penawaran_id', $penawaran->id)
->where('to_email', $email)
->where('status', 'failed')
->first();
$log1 = PenawaranEmailTenderLog::where('penawaran_id', $penawaran->id)
->where('to_email', $email)
->where('status', 'success')
->first();
if ($log) {
// Update log failed menjadi success
$log->update([
'penawaran_id' => $penawaran->id,
'kjpp' => $kjppData['kjpp']->code . ' | ' . $kjppData['kjpp']->name,
'to_email' => $email,
'subject' => $subject,
'body_pdf' => $body_pdf,
'status' => 'success',
'error_message' => null,
'updated_at' => now(),
]);
} else if ($log1) {
// Update timestamp jika sudah success
$log1->update([
'penawaran_id' => $penawaran->id,
'kjpp' => $kjppData['kjpp']->code . ' | ' . $kjppData['kjpp']->name,
'to_email' => $email,
'subject' => $subject,
'body_pdf' => $body_pdf,
'updated_at' => now(),
]);
} else {
// Buat log baru
PenawaranEmailTenderLog::create([
'penawaran_id' => $penawaran->id,
'kjpp' => $kjppData['kjpp']->code . ' | ' . $kjppData['kjpp']->name,
'to_email' => $email,
'subject' => $subject,
'body_pdf' => $body_pdf,
'status' => 'success',
'error_message' => null,
'created_at' => now(),
'updated_at' => now(),
]);
}
}
}
return redirect()->route('tender.penawaran.ulang.index')
->with('success', 'Email Penawaran Berhasil Terkirim!');
} catch (\Exception $e) {
// Log email gagal untuk setiap KJPP
foreach ($kjpps as $kjppData) {
foreach ($kjppData['emails'] as $email) {
$log = PenawaranEmailTenderLog::where('penawaran_id', $penawaran->id)
->where('to_email', $email)
->where('status', 'success')
->first();
$log1 = PenawaranEmailTenderLog::where('penawaran_id', $penawaran->id)
->where('to_email', $email)
->where('status', 'failed')
->first();
if ($log) {
// Update log success menjadi failed
$log->update([
'penawaran_id' => $penawaran->id,
'kjpp' => $kjppData['kjpp']->code . ' | ' . $kjppData['kjpp']->name,
'to_email' => $email,
'subject' => $subject,
'body_pdf' => $body_pdf,
'status' => 'failed',
'error_message' => $e->getMessage(),
'updated_at' => now(),
]);
} else if ($log1) {
// Update error message jika sudah failed
$log1->update([
'penawaran_id' => $penawaran->id,
'kjpp' => $kjppData['kjpp']->code . ' | ' . $kjppData['kjpp']->name,
'to_email' => $email,
'subject' => $subject,
'body_pdf' => $body_pdf,
'error_message' => $e->getMessage(),
'updated_at' => now(),
]);
} else {
// Buat log baru dengan status failed
PenawaranEmailTenderLog::create([
'penawaran_id' => $penawaran->id,
'kjpp' => $kjppData['kjpp']->code . ' | ' . $kjppData['kjpp']->name,
'to_email' => $email,
'subject' => $subject,
'body_pdf' => $body_pdf,
'status' => 'failed',
'error_message' => $e->getMessage(),
'created_at' => now(),
'updated_at' => now(),
]);
}
}
}
return redirect()->route('tender.penawaran.showKirimEmail', ['noreg' => $noreg])
->with('error', 'Email Penawaran Gagal Terkirim!');
}
}
public function kirimEmailKJPP($noreg, $id)
@@ -830,13 +960,23 @@ class TenderController extends Controller
if ($log) {
// Jika log ditemukan dan statusnya 'failed', update status menjadi 'success'
$log->update([
'penawaran_id' => $penawaran->id,
'kjpp' => $dp1->kjpp->code . ' | ' . $dp1->kjpp->name,
'to_email' => $email,
'subject' => $subject,
'body_pdf' => $body_pdf,
'status' => 'success',
'error_message' => null, // Reset error_message saat status diubah menjadi success
'updated_at' => now(),
]);
} else if ($log1) {
// Jika log ditemukan dan statusnya 'success' biarkan saja
$log1->update([ // Reset error_message saat status diubah menjadi success
$log1->update([
'penawaran_id' => $penawaran->id,
'kjpp' => $dp1->kjpp->code . ' | ' . $dp1->kjpp->name,
'to_email' => $email,
'subject' => $subject,
'body_pdf' => $body_pdf,
'updated_at' => now(),
]);
} else {
@@ -859,18 +999,54 @@ class TenderController extends Controller
} catch (\Exception $e) {
// Log email gagal
foreach ($kjpps as $email) {
PenawaranEmailTenderLog::create([
'penawaran_id' => $penawaran->id,
'kjpp' => $dp1->kjpp->code . ' | ' . $dp1->kjpp->name,
'to_email' => $email,
'subject' => $subject,
'body_pdf' => $body_pdf,
'status' => 'failed',
'error_message' => $e->getMessage(),
'created_at' => now(),
'updated_at' => now(),
]);
$log = PenawaranEmailTenderLog::where('penawaran_id', $penawaran->id)
->where('to_email', $email)
->where('status', 'success')
->first();
$log1 = PenawaranEmailTenderLog::where('penawaran_id', $penawaran->id)
->where('to_email', $email)
->where('status', 'failed')
->first();
if ($log) {
// Jika log ditemukan dan statusnya 'success', update status menjadi 'failed'
$log->update([
'penawaran_id' => $penawaran->id,
'kjpp' => $dp1->kjpp->code . ' | ' . $dp1->kjpp->name,
'to_email' => $email,
'subject' => $subject,
'body_pdf' => $body_pdf,
'status' => 'failed',
'error_message' => $e->getMessage(),
'updated_at' => now(),
]);
} else if ($log1) {
// Jika log ditemukan dan statusnya 'failed' biarkan saja
$log1->update([
'penawaran_id' => $penawaran->id,
'kjpp' => $dp1->kjpp->code . ' | ' . $dp1->kjpp->name,
'to_email' => $email,
'subject' => $subject,
'body_pdf' => $body_pdf,
'error_message' => $e->getMessage(),
'updated_at' => now(),
]);
} else {
PenawaranEmailTenderLog::create([
'penawaran_id' => $penawaran->id,
'kjpp' => $dp1->kjpp->code . ' | ' . $dp1->kjpp->name,
'to_email' => $email,
'subject' => $subject,
'body_pdf' => $body_pdf,
'status' => 'failed',
'error_message' => $e->getMessage(),
'created_at' => now(),
'updated_at' => now(),
]);
}
}
return redirect()->route('tender.penawaran.showKirimEmail', ['noreg' => $noreg])->with('error', 'Email Penawaran Gagal Terkirim!');
}
}

View File

@@ -131,12 +131,22 @@
@endphp
@if (is_object($details))
@if (isset($details->luas_tanah) && is_numeric($details->luas_tanah))
@php $luas_tanah = $details->luas_tanah; @endphp
@if (
$detail->jenisLegalitasJaminan->custom_field === 'Luas Tanah' &&
isset($details->{'Luas Tanah'}) &&
is_numeric($details->{'Luas Tanah'}))
@php
$luas_tanah = $details->{'Luas Tanah'};
@endphp
@endif
@if (isset($details->luas_bangunan) && is_numeric($details->luas_bangunan))
@php $luas_bangunan = $details->luas_bangunan; @endphp
@if (
$detail->jenisLegalitasJaminan->custom_field === 'Luas Bangunan' &&
isset($details->{'Luas Bangunan'}) &&
is_numeric($details->{'Luas Bangunan'}))
@php
$luas_bangunan = $details->{'Luas Bangunan'};
@endphp
@endif
@endif
@endforeach

View File

@@ -133,12 +133,22 @@
@endphp
@if (is_object($details))
@if (isset($details->luas_tanah) && is_numeric($details->luas_tanah))
@php $luas_tanah = $details->luas_tanah; @endphp
@if (
$detail->jenisLegalitasJaminan->custom_field === 'Luas Tanah' &&
isset($details->{'Luas Tanah'}) &&
is_numeric($details->{'Luas Tanah'}))
@php
$luas_tanah = $details->{'Luas Tanah'};
@endphp
@endif
@if (isset($details->luas_bangunan) && is_numeric($details->luas_bangunan))
@php $luas_bangunan = $details->luas_bangunan; @endphp
@if (
$detail->jenisLegalitasJaminan->custom_field === 'Luas Bangunan' &&
isset($details->{'Luas Bangunan'}) &&
is_numeric($details->{'Luas Bangunan'}))
@php
$luas_bangunan = $details->{'Luas Bangunan'};
@endphp
@endif
@endif
@endforeach

View File

@@ -68,18 +68,10 @@
</span>
</th>
<th class="min-w-[150px]" data-datatable-column="email_kantor">
<span class="sort">
<span class="sort-label">
Email Kantor
</span>
</span>
Email Kantor
</th>
<th class="min-w-[150px]" data-datatable-column="status">
<span class="sort">
<span class="sort-label">
Status Kirim
</span>
</span>
Status Kirim
</th>
<th class="min-w-[50px] text-center" data-datatable-column="actions">Action
</th>

View File

@@ -13,7 +13,7 @@
</h3>
<div class="flex items-center gap-2">
<a href="{{ route('tender.penawaran.downloadSuratTender', $noreg) }}" class="btn btn-xs btn-light">
<img src="{{ asset('img/pdf.png') }}" width="25" alt="pdf"></img>Download
<img src="{{ asset('img/pdf.png') }}" width="25" alt="pdf" class="pdf"></img>Download
</span>
@if (isset($penawaran->nomor_registrasi))
<a href="{{ route('tender.penawaran.editPenawaran', $noreg) }}" class="btn btn-xs btn-info"><i
@@ -24,7 +24,7 @@
@endif
</div>
</div>
<div class="card-body grid gap-5">
<div class="card-body grid gap-5 text-gray-900">
<p>Dear
<span class="font-bold">
@php
@@ -116,12 +116,22 @@
@endphp
@if (is_object($details))
@if (isset($details->luas_tanah) && is_numeric($details->luas_tanah))
@php $luas_tanah = $details->luas_tanah; @endphp
@if (
$detail->jenisLegalitasJaminan->custom_field === 'Luas Tanah' &&
isset($details->{'Luas Tanah'}) &&
is_numeric($details->{'Luas Tanah'}))
@php
$luas_tanah = $details->{'Luas Tanah'};
@endphp
@endif
@if (isset($details->luas_bangunan) && is_numeric($details->luas_bangunan))
@php $luas_bangunan = $details->luas_bangunan; @endphp
@if (
$detail->jenisLegalitasJaminan->custom_field === 'Luas Bangunan' &&
isset($details->{'Luas Bangunan'}) &&
is_numeric($details->{'Luas Bangunan'}))
@php
$luas_bangunan = $details->{'Luas Bangunan'};
@endphp
@endif
@endif
@endforeach
@@ -139,12 +149,12 @@
</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">{{ formatTanggalIndonesia($penawaran->end_date,true) }}</span>
<span class="font-bold">{{ formatTanggalIndonesia($penawaran->end_date, true) }}</span>
</p>
<p>Best Regards,
<div class="font-bold">
<img src="{{ asset('storage/signatures/' . $permohonan->user->id . '/' . $permohonan->user->sign) }}"
alt="{{ $permohonan->user->name }}" width="200">
alt="{{ $permohonan->user->name }}" width="200" class="signature">
<p>
{{ $permohonan->user->name }}
</p>
@@ -159,3 +169,16 @@
</div>
</div>
@endsection
@push('styles')
<style>
.dark img.signature {
filter: invert(1) brightness(2);
}
.dark img.pdf {
filter: invert(1) brightness(1);
mix-blend-mode: screen;
}
</style>
@endpush

View File

@@ -131,12 +131,22 @@
@endphp
@if (is_object($details))
@if (isset($details->luas_tanah) && is_numeric($details->luas_tanah))
@php $luas_tanah = $details->luas_tanah; @endphp
@if (
$detail->jenisLegalitasJaminan->custom_field === 'Luas Tanah' &&
isset($details->{'Luas Tanah'}) &&
is_numeric($details->{'Luas Tanah'}))
@php
$luas_tanah = $details->{'Luas Tanah'};
@endphp
@endif
@if (isset($details->luas_bangunan) && is_numeric($details->luas_bangunan))
@php $luas_bangunan = $details->luas_bangunan; @endphp
@if (
$detail->jenisLegalitasJaminan->custom_field === 'Luas Bangunan' &&
isset($details->{'Luas Bangunan'}) &&
is_numeric($details->{'Luas Bangunan'}))
@php
$luas_bangunan = $details->{'Luas Bangunan'};
@endphp
@endif
@endif
@endforeach
@@ -154,7 +164,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">{{ formatTanggalIndonesia($penawaran->end_date,true) }}</span>
class="important">{{ formatTanggalIndonesia($penawaran->end_date, true) }}</span>
</div>
<div class="signature">

View File

@@ -14,13 +14,13 @@
<div class="flex items-center gap-2">
<a href="{{ route('tender.penawaran.downloadSuratTenderKJPP', ['noreg' => $noreg, 'id' => $id]) }}"
class="btn btn-xs btn-light">
<img src="{{ asset('img/pdf.png') }}" width="25" alt="pdf"></img>Download
<img src="{{ asset('img/pdf.png') }}" width="25" alt="pdf" class="pdf"></img>Download
</a>
<a href="{{ route('tender.penawaran.showKirimEmail', $noreg) }}" class="btn btn-xs btn-info"><i
class="ki-filled ki-exit-left"></i> Back</a>
</div>
</div>
<div class="card-body grid gap-5">
<div class="card-body grid gap-5 text-gray-900">
<p>Dear
<span class="font-bold">
@php
@@ -114,12 +114,22 @@
@endphp
@if (is_object($details))
@if (isset($details->luas_tanah) && is_numeric($details->luas_tanah))
@php $luas_tanah = $details->luas_tanah; @endphp
@if (
$detail->jenisLegalitasJaminan->custom_field === 'Luas Tanah' &&
isset($details->{'Luas Tanah'}) &&
is_numeric($details->{'Luas Tanah'}))
@php
$luas_tanah = $details->{'Luas Tanah'};
@endphp
@endif
@if (isset($details->luas_bangunan) && is_numeric($details->luas_bangunan))
@php $luas_bangunan = $details->luas_bangunan; @endphp
@if (
$detail->jenisLegalitasJaminan->custom_field === 'Luas Bangunan' &&
isset($details->{'Luas Bangunan'}) &&
is_numeric($details->{'Luas Bangunan'}))
@php
$luas_bangunan = $details->{'Luas Bangunan'};
@endphp
@endif
@endif
@endforeach
@@ -142,7 +152,7 @@
<p>Best Regards,
<div class="font-bold">
<img src="{{ asset('storage/signatures/' . $permohonan->user->id . '/' . $permohonan->user->sign) }}"
alt="{{ $permohonan->user->name }}" width="200">
alt="{{ $permohonan->user->name }}" width="200" class="signature">
<p>
{{ $permohonan->user->name }}
</p>
@@ -157,3 +167,16 @@
</div>
</div>
@endsection
@push('styles')
<style>
.dark img.signature {
filter: invert(1) brightness(2);
}
.dark img.pdf {
filter: invert(1) brightness(1);
mix-blend-mode: screen;
}
</style>
@endpush

View File

@@ -133,12 +133,22 @@
@endphp
@if (is_object($details))
@if (isset($details->luas_tanah) && is_numeric($details->luas_tanah))
@php $luas_tanah = $details->luas_tanah; @endphp
@if (
$detail->jenisLegalitasJaminan->custom_field === 'Luas Tanah' &&
isset($details->{'Luas Tanah'}) &&
is_numeric($details->{'Luas Tanah'}))
@php
$luas_tanah = $details->{'Luas Tanah'};
@endphp
@endif
@if (isset($details->luas_bangunan) && is_numeric($details->luas_bangunan))
@php $luas_bangunan = $details->luas_bangunan; @endphp
@if (
$detail->jenisLegalitasJaminan->custom_field === 'Luas Bangunan' &&
isset($details->{'Luas Bangunan'}) &&
is_numeric($details->{'Luas Bangunan'}))
@php
$luas_bangunan = $details->{'Luas Bangunan'};
@endphp
@endif
@endif
@endforeach

File diff suppressed because it is too large Load Diff