perbaiki looping pada kirim surat tender kjpp pada saat gagal kirim

This commit is contained in:
2024-11-22 09:17:52 +07:00
committed by Daeng Deni Mardaeni
parent 0ba9b8f6e7
commit 81a9fac7c8

View File

@@ -1,32 +1,32 @@
<?php
namespace Modules\Lpj\Http\Controllers;
namespace Modules\Lpj\Http\Controllers;
use App\Http\Controllers\Controller;
use Exception;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;
use Maatwebsite\Excel\Facades\Excel;
use Modules\Location\Models\City;
use Modules\Location\Models\District;
use Modules\Location\Models\Province;
use Modules\Location\Models\Village;
use Modules\Lpj\Exports\PenawaranTenderExport;
use Modules\Lpj\Http\Requests\TenderPenawaranRequest;
use Modules\Lpj\Jobs\SendPenawaranKJPPTenderJob;
use Modules\Lpj\Jobs\SendPenawaranTenderJob;
use Modules\Lpj\Models\JenisLaporan;
use Modules\Lpj\Models\KJPP;
use Modules\Lpj\Models\PenawaranDetailTender;
use Modules\Lpj\Models\PenawaranEmailTenderLog;
use Modules\Lpj\Models\PenawaranTender;
use Modules\Lpj\Models\Permohonan;
use Modules\Lpj\Models\StatusPermohonan;
use Modules\Lpj\Models\TujuanPenilaianKJPP;
use Exception;
use Illuminate\Http\Request;
use Modules\Lpj\Models\KJPP;
use Modules\Location\Models\City;
use Illuminate\Support\Facades\DB;
use Modules\Lpj\Models\Permohonan;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Auth;
use Maatwebsite\Excel\Facades\Excel;
use Modules\Location\Models\Village;
use Modules\Lpj\Models\JenisLaporan;
use Modules\Location\Models\District;
use Modules\Location\Models\Province;
use Modules\Lpj\Models\PenawaranTender;
use Modules\Lpj\Models\StatusPermohonan;
use Modules\Lpj\Models\TujuanPenilaianKJPP;
use Modules\Lpj\Models\PenawaranDetailTender;
use Modules\Lpj\Exports\PenawaranTenderExport;
use Modules\Lpj\Http\Requests\TenderPenawaranRequest;
use Modules\Lpj\Jobs\SendPenawaranKJPPTenderJob;
use Modules\Lpj\Jobs\SendPenawaranTenderJob;
use Modules\Lpj\Models\PenawaranEmailTenderLog;
class TenderController extends Controller
{
class TenderController extends Controller
{
public $user;
/**
@@ -46,11 +46,8 @@
// Jika nomor_registrasi sudah ada, kembalikan respon 403 Forbidden
if ($penawaranExists) {
return redirect()
->route('tender.penawaran.editPenawaran', ['noreg' => $noreg])->with(
'error',
'Penawaran dengan nomor registrasi ini sudah ada, Anda akan diarahkan ke halaman edit.',
);
return redirect()->route('tender.penawaran.editPenawaran', ['noreg' => $noreg])
->with('error', 'Penawaran dengan nomor registrasi ini sudah ada, Anda akan diarahkan ke halaman edit.');
}
$permohonan = Permohonan::where('nomor_registrasi', '=', $noreg)->first();
@@ -61,10 +58,7 @@
$kjpp = KJPP::all();
return view(
'lpj::penawaran/create',
compact('status', 'tujuan_penilaian_kjpp', 'jenis_laporan', 'kjpp', 'noreg', 'permohonan'),
);
return view('lpj::penawaran/create', compact('status', 'tujuan_penilaian_kjpp', 'jenis_laporan', 'kjpp', 'noreg', 'permohonan'));
}
/**
@@ -101,7 +95,7 @@
'penawaran_id' => $penawaranId->id,
'kjpp_rekanan_id' => $kjpp,
'created_by' => $userId, // Set created_by for details
'updated_by' => $userId,
'updated_by' => $userId
]);
}
@@ -109,12 +103,14 @@
DB::commit();
return redirect()
->route('tender.penawaran.index')->with('success', 'Data Penawaran created successfully');
->route('tender.penawaran.index')
->with('success', 'Data Penawaran created successfully');
} catch (Exception $e) {
DB::rollBack();
return redirect()
->route('tender.penawaran.createPenawaran', $noreg)->with('error', 'Validation failed: ' . $e);
->route('tender.penawaran.createPenawaran', $noreg)
->with('error', 'Validation failed: ' . $e);
}
}
@@ -133,27 +129,17 @@
$penawaran1 = PenawaranTender::where('nomor_registrasi', '=', $noreg)->first();
if (!$penawaran1) {
return redirect()->route('tender.penawaran.createPenawaran', ['noreg' => $noreg])->with(
'error',
'Penawaran dengan nomor registrasi ini belum dibuat. Silahkan isi terlebih dahulu!',
);
return redirect()->route('tender.penawaran.createPenawaran', ['noreg' => $noreg])->with('error', 'Penawaran dengan nomor registrasi ini belum dibuat. Silahkan isi terlebih dahulu!');
}
if ($penawaran1->status != 'tender') {
return redirect()->route('spk.index')->with(
'error',
'Penawaran dengan nomor registrasi ini sudah masuk SPK tidak bisa masuk penawaran lagi!',
);
return redirect()->route('spk.index')->with('error', 'Penawaran dengan nomor registrasi ini sudah masuk SPK tidak bisa masuk penawaran lagi!');
}
// dd($penawaran1->id);
if ($penawaran1) {
$penawaran = $penawaran1;
$detail_penawaran = PenawaranDetailTender::where('penawaran_id', '=', $penawaran1->id)->where(
'status',
'=',
1,
)->pluck('kjpp_rekanan_id')->toArray();
$detail_penawaran = PenawaranDetailTender::where('penawaran_id', '=', $penawaran1->id)->where('status', '=', 1)->pluck('kjpp_rekanan_id')->toArray();
$kjpps = KJPP::whereIn('id', $detail_penawaran)->get();
$tujuan_penilaian_kjpp = TujuanPenilaianKJPP::where('id', $penawaran->tujuan_penilaian_kjpp_id)->get();
$jenis_laporan = JenisLaporan::where('id', $penawaran->jenis_laporan_id)->get();
@@ -164,10 +150,7 @@
// dd($kjpps);
return view(
'lpj::penawaran.show',
compact('noreg', 'penawaran', 'kjpps', 'tujuan_penilaian_kjpp', 'jenis_laporan', 'penawaranExists'),
);
return view('lpj::penawaran.show', compact('noreg', 'penawaran', 'kjpps', 'tujuan_penilaian_kjpp', 'jenis_laporan', 'penawaranExists'));
}
/**
@@ -179,50 +162,28 @@
$penawaran = PenawaranTender::where('nomor_registrasi', '=', $noreg)->first();
if (!$penawaran) {
return redirect()->route('tender.penawaran.createPenawaran', ['noreg' => $noreg])->with(
'error',
'Penawaran dengan nomor registrasi ini belum dibuat. Silahkan isi terlebih dahulu!',
);
return redirect()->route('tender.penawaran.createPenawaran', ['noreg' => $noreg])->with('error', 'Penawaran dengan nomor registrasi ini belum dibuat. Silahkan isi terlebih dahulu!');
}
$permohonan = Permohonan::where('nomor_registrasi', '=', $noreg)->first();
if ($penawaran->status != 'tender') {
return redirect()->route('spk.index')->with(
'error',
'Penawaran dengan nomor registrasi ini sudah masuk SPK tidak bisa masuk penawaran lagi!',
);
return redirect()->route('spk.index')->with('error', 'Penawaran dengan nomor registrasi ini sudah masuk SPK tidak bisa masuk penawaran lagi!');
}
$status = StatusPermohonan::all();
$tujuan_penilaian_kjpp = TujuanPenilaianKJPP::all();
$jenis_laporan = JenisLaporan::all();
$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)->pluck('id')->toArray();
$kjpp = KJPP::all();
// dd($penawaran);
return view(
'lpj::penawaran.edit',
compact(
'status',
'tujuan_penilaian_kjpp',
'jenis_laporan',
'kjpp',
'penawaran',
'noreg',
'kjpps',
'permohonan',
),
);
return view('lpj::penawaran.edit', compact('status', 'tujuan_penilaian_kjpp', 'jenis_laporan', 'kjpp', 'penawaran', 'noreg', 'kjpps', 'permohonan'));
}
@@ -270,10 +231,9 @@
// Tangani penambahan atau perubahan KJPP baru
foreach ($kjpps as $kjpp) {
$existingDetail = PenawaranDetailTender::where('penawaran_id', $penawaran->id)->where(
'kjpp_rekanan_id',
$kjpp,
)->first();
$existingDetail = PenawaranDetailTender::where('penawaran_id', $penawaran->id)
->where('kjpp_rekanan_id', $kjpp)
->first();
// dd($existingDetail);
@@ -301,16 +261,15 @@
DB::commit();
return redirect()
->route('tender.penawaran.ulang.index')->with('success', 'Data Penawaran updated successfully');
->route('tender.penawaran.ulang.index')
->with('success', 'Data Penawaran updated successfully');
} catch (Exception $e) {
// Rollback jika ada kesalahan
DB::rollBack();
return redirect()
->route('tender.penawaran.createPenawaran', $noreg)->with(
'error',
'Validation failed: ' . $e->getMessage(),
);
->route('tender.penawaran.createPenawaran', $noreg)
->with('error', 'Validation failed: ' . $e->getMessage());
}
}
@@ -325,27 +284,18 @@
// Kalau tidak ketemu nomor registrasi dengan tabel penawaran
if (!$penawaran) {
return redirect()
->route('tender.penawaran.createPenawaran', ['noreg' => $noreg])->with(
'error',
'Anda Belum Membuat Penawaran. Silahkan isi terlebih dahulu!',
);
return redirect()->route('tender.penawaran.createPenawaran', ['noreg' => $noreg])
->with('error', 'Anda Belum Membuat Penawaran. Silahkan isi terlebih dahulu!');
}
if ($penawaran->status != 'tender') {
return redirect()->route('spk.index')->with(
'error',
'Penawaran dengan nomor registrasi ini sudah masuk SPK tidak bisa masuk penawaran lagi!',
);
return redirect()->route('spk.index')->with('error', 'Penawaran dengan nomor registrasi ini sudah masuk SPK tidak bisa masuk penawaran lagi!');
}
// Kalau tidak ada dokumen jaminan maka di arahkan ke halaman dokumen jaminan
if ($permohonan->debiture->documents->isEmpty()) {
return redirect()
->route('debitur.jaminan.create', ['id' => $permohonan->debiture->id])->with(
'error',
'Anda Belum Membuat Dokumen Jaminan. Silahkan isi terlebih dahulu!',
);
return redirect()->route('debitur.jaminan.create', ['id' => $permohonan->debiture->id])
->with('error', 'Anda Belum Membuat Dokumen Jaminan. Silahkan isi terlebih dahulu!');
}
foreach ($permohonan->debiture->documents as $document) {
@@ -365,17 +315,11 @@
$now = date('Y-m-d H:i:s');
// Jika batas tanggal penawaran sudah lewat
if ($penawaran->end_date < $now) {
return redirect()
->route('tender.penawaran.editPenawaran', ['noreg' => $noreg])->with(
'error',
'Sudah Kadaluarsa. Silahkan perpanjang tanggal penawaran terlebih dahulu!',
);
return redirect()->route('tender.penawaran.editPenawaran', ['noreg' => $noreg])
->with('error', 'Sudah Kadaluarsa. Silahkan perpanjang tanggal penawaran terlebih dahulu!');
}
return view(
'lpj::penawaran.surat_tender',
compact('penawaran', 'noreg', 'permohonan', 'villages', 'districts', 'cities', 'provinces'),
);
return view('lpj::penawaran.surat_tender', compact('penawaran', 'noreg', 'permohonan', 'villages', 'districts', 'cities', 'provinces'));
}
public function suratTenderKJPP($noreg, $id)
@@ -385,27 +329,18 @@
$penawaran = PenawaranTender::where('nomor_registrasi', '=', $noreg)->first();
if (!$penawaran) {
return redirect()
->route('tender.penawaran.createPenawaran', ['noreg' => $penawaran->nomor_registrasi])->with(
'error',
'Anda Belum Membuat Penawaran. Silahkan isi terlebih dahulu!',
);
return redirect()->route('tender.penawaran.createPenawaran', ['noreg' => $penawaran->nomor_registrasi])
->with('error', 'Anda Belum Membuat Penawaran. Silahkan isi terlebih dahulu!');
}
if ($penawaran->status != 'tender') {
return redirect()->route('spk.index')->with(
'error',
'Penawaran dengan nomor registrasi ini sudah masuk SPK tidak bisa masuk penawaran lagi!',
);
return redirect()->route('spk.index')->with('error', 'Penawaran dengan nomor registrasi ini sudah masuk SPK tidak bisa masuk penawaran lagi!');
}
// Kalau tidak ada dokumen jaminan maka di arahkan ke halaman dokumen jaminan
if ($permohonan->debiture->documents->isEmpty()) {
return redirect()
->route('debitur.jaminan.create', ['id' => $permohonan->debiture->id])->with(
'error',
'Anda Belum Membuat Dokumen Jaminan. Silahkan isi terlebih dahulu!',
);
return redirect()->route('debitur.jaminan.create', ['id' => $permohonan->debiture->id])
->with('error', 'Anda Belum Membuat Dokumen Jaminan. Silahkan isi terlebih dahulu!');
}
foreach ($permohonan->debiture->documents as $document) {
@@ -425,11 +360,8 @@
$now = date('Y-m-d H:i:s');
// Jika batas tanggal penawaran sudah lewat
if ($penawaran->end_date < $now) {
return redirect()
->route('tender.penawaran.editPenawaran', ['noreg' => $noreg])->with(
'error',
'Sudah Kadaluarsa. Silahkan perpanjang tanggal penawaran terlebih dahulu!',
);
return redirect()->route('tender.penawaran.editPenawaran', ['noreg' => $noreg])
->with('error', 'Sudah Kadaluarsa. Silahkan perpanjang tanggal penawaran terlebih dahulu!');
}
$detail_penawaran = PenawaranDetailTender::with('kjpp')->where('kjpp_rekanan_id', '=', $kjpp->id)->get();
@@ -438,20 +370,7 @@
$detail_penawaran_1 = $detail->kjpp;
}
return view(
'lpj::penawaran.surat_tender_kjpp',
compact(
'penawaran',
'noreg',
'permohonan',
'villages',
'districts',
'cities',
'provinces',
'detail_penawaran_1',
'id',
),
);
return view('lpj::penawaran.surat_tender_kjpp', compact('penawaran', 'noreg', 'permohonan', 'villages', 'districts', 'cities', 'provinces', 'detail_penawaran_1', 'id'));
}
public function datatablesPenawaran(Request $request)
@@ -613,10 +532,7 @@
$permohonan = Permohonan::where('nomor_registrasi', '=', $noreg)->first();
if ($penawaran->status != 'tender') {
return redirect()->route('spk.index')->with(
'error',
'Penawaran dengan nomor registrasi ini sudah masuk SPK tidak bisa masuk penawaran lagi!',
);
return redirect()->route('spk.index')->with('error', 'Penawaran dengan nomor registrasi ini sudah masuk SPK tidak bisa masuk penawaran lagi!');
}
foreach ($permohonan->debiture->documents as $document) {
@@ -632,10 +548,7 @@
$provinces = Province::where('code', $province_permohonan)->get();
$pdf = app('dompdf.wrapper'); // create an instance of the PDF class
$pdf->loadView(
'lpj::penawaran.surat_tender_download',
compact('penawaran', 'permohonan', 'villages', 'districts', 'cities', 'provinces'),
);
$pdf->loadView('lpj::penawaran.surat_tender_download', compact('penawaran', 'permohonan', 'villages', 'districts', 'cities', 'provinces'));
return $pdf->download('surat_tender' . time() . '.pdf');
}
@@ -647,10 +560,7 @@
$permohonan = Permohonan::where('nomor_registrasi', '=', $noreg)->first();
if ($penawaran->status != 'tender') {
return redirect()->route('spk.index')->with(
'error',
'Penawaran dengan nomor registrasi ini sudah masuk SPK tidak bisa masuk penawaran lagi!',
);
return redirect()->route('spk.index')->with('error', 'Penawaran dengan nomor registrasi ini sudah masuk SPK tidak bisa masuk penawaran lagi!');
}
foreach ($permohonan->debiture->documents as $document) {
@@ -672,10 +582,7 @@
}
$pdf = app('dompdf.wrapper'); // create an instance of the PDF class
$pdf->loadView(
'lpj::penawaran.surat_tender_kjpp_download',
compact('penawaran', 'permohonan', 'villages', 'districts', 'cities', 'provinces', 'detail_penawaran_1'),
);
$pdf->loadView('lpj::penawaran.surat_tender_kjpp_download', compact('penawaran', 'permohonan', 'villages', 'districts', 'cities', 'provinces', 'detail_penawaran_1'));
return $pdf->download('surat_tender_kjpp' . time() . '.pdf');
}
@@ -687,26 +594,17 @@
$permohonan = Permohonan::where('nomor_registrasi', '=', $noreg)->first();
if (!$penawaran) {
return redirect()
->route('tender.penawaran.createPenawaran', ['noreg' => $noreg])->with(
'error',
'Anda Belum Membuat Penawaran. Silahkan isi terlebih dahulu!',
);
return redirect()->route('tender.penawaran.createPenawaran', ['noreg' => $noreg])
->with('error', 'Anda Belum Membuat Penawaran. Silahkan isi terlebih dahulu!');
}
if ($penawaran->status != 'tender') {
return redirect()->route('spk.index')->with(
'error',
'Penawaran dengan nomor registrasi ini sudah masuk SPK tidak bisa masuk penawaran lagi!',
);
return redirect()->route('spk.index')->with('error', 'Penawaran dengan nomor registrasi ini sudah masuk SPK tidak bisa masuk penawaran lagi!');
}
if ($permohonan->debiture->documents->isEmpty()) {
return redirect()
->route('debitur.jaminan.create', ['id' => $permohonan->debiture->id])->with(
'error',
'Anda Belum Membuat Dokumen Jaminan. Silahkan isi terlebih dahulu!',
);
return redirect()->route('debitur.jaminan.create', ['id' => $permohonan->debiture->id])
->with('error', 'Anda Belum Membuat Dokumen Jaminan. Silahkan isi terlebih dahulu!');
}
return view('lpj::penawaran.showKirimEmail', compact('penawaran', 'permohonan', 'noreg'));
@@ -721,9 +619,7 @@
$penawaran = PenawaranTender::where('nomor_registrasi', '=', $noreg)->first();
// Retrieve data from the database
$query = PenawaranDetailTender::query()->where('penawaran_id', '=', $penawaran->id)->with(
['kjpp', 'penawaran', 'penawaran.emailTenderLog'],
);
$query = PenawaranDetailTender::query()->where('penawaran_id', '=', $penawaran->id)->with(['kjpp', 'penawaran', 'penawaran.emailTenderLog']);
// dd($query);
@@ -735,23 +631,18 @@
// Handle sorting for related table columns
if ($column === 'nama_kjpp') {
// Join with the KJPP table and sort by the name column
$query
->join('kjpp', 'detail_penawaran.kjpp_rekanan_id', '=', 'kjpp.id')
$query->join('kjpp', 'detail_penawaran.kjpp_rekanan_id', '=', 'kjpp.id')
->orderBy('kjpp.name', $order)
->select('detail_penawaran.*'); // Select only the main table columns to avoid conflicts
} else {
if ($column === 'nomor_kjpp') {
$query
->join('kjpp', 'detail_penawaran.kjpp_rekanan_id', '=', 'kjpp.id')->orderBy(
'kjpp.code',
$order,
)->select('detail_penawaran.*');
} else if ($column === 'nomor_kjpp') {
$query->join('kjpp', 'detail_penawaran.kjpp_rekanan_id', '=', 'kjpp.id')
->orderBy('kjpp.code', $order)
->select('detail_penawaran.*');
} else {
// Sort by columns in the main table
$query->orderBy($column, $order);
}
}
}
// Get the data for the current page
$data = $query->get();
@@ -760,6 +651,7 @@
$i = 0;
$j = 1;
foreach ($data as $obj) {
// tanggal_permohonan
$data[$i]->numbernya = $j;
$i++;
@@ -779,245 +671,23 @@
$permohonan = Permohonan::where('nomor_registrasi', '=', $noreg)->first();
if (!$penawaran) {
return redirect()
->route('tender.penawaran.createPenawaran', ['noreg' => $noreg])->with(
'error',
'Anda Belum Membuat Penawaran. Silahkan isi terlebih dahulu!',
);
return redirect()->route('tender.penawaran.createPenawaran', ['noreg' => $noreg])
->with('error', 'Anda Belum Membuat Penawaran. Silahkan isi terlebih dahulu!');
}
if ($penawaran->status != 'tender') {
return redirect()->route('spk.index')->with(
'error',
'Penawaran dengan nomor registrasi ini sudah masuk SPK tidak bisa masuk penawaran lagi!',
);
return redirect()->route('spk.index')->with('error', 'Penawaran dengan nomor registrasi ini sudah masuk SPK tidak bisa masuk penawaran lagi!');
}
if ($permohonan->debiture->documents->isEmpty()) {
return redirect()
->route('debitur.jaminan.create', ['id' => $permohonan->debiture->id])->with(
'error',
'Anda Belum Membuat Dokumen Jaminan. Silahkan isi terlebih dahulu!',
);
return redirect()->route('debitur.jaminan.create', ['id' => $permohonan->debiture->id])
->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();
$kjpps = KJPP::whereIn('id', $detail_penawaran)->get()->map(function ($item) {
$emails = [$item->email_kantor];
// Parse JSON string jika ada dan tidak kosong
if (!empty($item->detail_email_kantor) && $item->detail_email_kantor !== '[]') {
$detail_emails = json_decode($item->detail_email_kantor, true);
if (is_array($detail_emails)) {
foreach ($detail_emails as $detail) {
if (isset($detail['email_kantor'])) {
$emails[] = $detail['email_kantor'];
}
}
}
}
return [
'kjpp' => $item,
'emails' => array_filter($emails),
];
});
foreach ($permohonan->debiture->documents as $document) {
$village_permohonan = $document->village_code;
$district_permohonan = $document->district_code;
$city_permohonan = $document->city_code;
$province_permohonan = $document->province_code;
}
$villages = Village::where('code', $village_permohonan)->get();
$districts = District::where('code', $district_permohonan)->get();
$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->pluck('emails')->flatten()->toArray(),
$penawaran,
$permohonan,
$villages,
$districts,
$cities,
$provinces,
);
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)
{
$penawaran = PenawaranTender::where('nomor_registrasi', '=', $noreg)->first();
$permohonan = Permohonan::where('nomor_registrasi', '=', $noreg)->first();
if (!$penawaran) {
return redirect()
->route('tender.penawaran.createPenawaran', ['noreg' => $noreg])->with(
'error',
'Anda Belum Membuat Penawaran. Silahkan isi terlebih dahulu!',
);
}
if ($penawaran->status != 'tender') {
return redirect()->route('spk.index')->with(
'error',
'Penawaran dengan nomor registrasi ini sudah masuk SPK tidak bisa masuk penawaran lagi!',
);
}
if ($permohonan->debiture->documents->isEmpty()) {
return redirect()
->route('debitur.jaminan.create', ['id' => $permohonan->debiture->id])->with(
'error',
'Anda Belum Membuat Dokumen Jaminan. Silahkan isi terlebih dahulu!',
);
}
$detail_penawaran = PenawaranDetailTender::with('kjpp')->where('kjpp_rekanan_id', '=', $id)->pluck(
'kjpp_rekanan_id',
)->toArray();
$kjpps = KJPP::whereIn('id', $detail_penawaran)->get()->map(function ($item) {
$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) {
$emails = [$item->email_kantor];
// Parse JSON string jika ada dan tidak kosong
@@ -1033,7 +703,77 @@
}
return array_filter($emails);
})->flatten()->toArray();
})
->flatten()
->toArray();
foreach ($permohonan->debiture->documents as $document) {
$village_permohonan = $document->village_code;
$district_permohonan = $document->district_code;
$city_permohonan = $document->city_code;
$province_permohonan = $document->province_code;
}
$villages = Village::where('code', $village_permohonan)->get();
$districts = District::where('code', $district_permohonan)->get();
$cities = City::where('code', $city_permohonan)->get();
$provinces = Province::where('code', $province_permohonan)->get();
SendPenawaranTenderJob::dispatch(
$kjpps,
$penawaran,
$permohonan,
$villages,
$districts,
$cities,
$provinces
);
return redirect()->route('tender.penawaran.ulang.index')->with('success', 'Email Penawaran Berhasil Terkirim!');
}
public function kirimEmailKJPP($noreg, $id)
{
$penawaran = PenawaranTender::where('nomor_registrasi', '=', $noreg)->first();
$permohonan = Permohonan::where('nomor_registrasi', '=', $noreg)->first();
if (!$penawaran) {
return redirect()->route('tender.penawaran.createPenawaran', ['noreg' => $noreg])
->with('error', 'Anda Belum Membuat Penawaran. Silahkan isi terlebih dahulu!');
}
if ($penawaran->status != 'tender') {
return redirect()->route('spk.index')->with('error', 'Penawaran dengan nomor registrasi ini sudah masuk SPK tidak bisa masuk penawaran lagi!');
}
if ($permohonan->debiture->documents->isEmpty()) {
return redirect()->route('debitur.jaminan.create', ['id' => $permohonan->debiture->id])
->with('error', 'Anda Belum Membuat Dokumen Jaminan. Silahkan isi terlebih dahulu!');
}
$detail_penawaran = PenawaranDetailTender::with('kjpp')->where('kjpp_rekanan_id', '=', $id)->pluck('kjpp_rekanan_id')->toArray();
$kjpps = KJPP::whereIn('id', $detail_penawaran)
->get()
->map(function ($item) {
$emails = [$item->email_kantor];
// Parse JSON string jika ada dan tidak kosong
if (!empty($item->detail_email_kantor) && $item->detail_email_kantor !== '[]') {
$detail_emails = json_decode($item->detail_email_kantor, true);
if (is_array($detail_emails)) {
foreach ($detail_emails as $detail) {
if (isset($detail['email_kantor'])) {
$emails[] = $detail['email_kantor'];
}
}
}
}
return array_filter($emails);
})
->flatten()
->toArray();
$dp1 = PenawaranDetailTender::with('kjpp')->where('kjpp_rekanan_id', '=', $id)->first();
@@ -1059,7 +799,7 @@
'villages' => $villages,
'districts' => $districts,
'cities' => $cities,
'provinces' => $provinces,
'provinces' => $provinces
])->render();
SendPenawaranKJPPTenderJob::dispatch(
@@ -1070,7 +810,7 @@
$villages,
$districts,
$cities,
$provinces,
$provinces
);
try {
@@ -1090,24 +830,13 @@
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) {
} else if ($log1) {
// Jika log ditemukan dan statusnya 'success' biarkan saja
$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 {
@@ -1125,13 +854,9 @@
]);
}
}
}
return redirect()->route('tender.penawaran.ulang.index')->with(
'success',
'Email Penawaran Berhasil Terkirim!',
);
} catch (Exception $e) {
return redirect()->route('tender.penawaran.ulang.index')->with('success', 'Email Penawaran Berhasil Terkirim!');
} catch (\Exception $e) {
// Log email gagal
foreach ($kjpps as $email) {
$log = PenawaranEmailTenderLog::where('penawaran_id', $penawaran->id)
@@ -1147,24 +872,13 @@
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) {
} 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(),
]);
@@ -1182,11 +896,8 @@
]);
}
}
}
return redirect()->route('tender.penawaran.showKirimEmail', ['noreg' => $noreg])->with(
'error',
'Email Penawaran Gagal Terkirim!',
);
}
return redirect()->route('tender.penawaran.showKirimEmail', ['noreg' => $noreg])->with('error', 'Email Penawaran Gagal Terkirim!');
}
}
}