diff --git a/app/Http/Controllers/TenderController.php b/app/Http/Controllers/TenderController.php index 10ba932..68e3675 100644 --- a/app/Http/Controllers/TenderController.php +++ b/app/Http/Controllers/TenderController.php @@ -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,18 +725,142 @@ class TenderController extends Controller $cities = City::where('code', $city_permohonan)->get(); $provinces = Province::where('code', $province_permohonan)->get(); + $subject = 'Send Penawaran Email'; - SendPenawaranTenderJob::dispatch( - $kjpps, - $penawaran, - $permohonan, - $villages, - $districts, - $cities, - $provinces - ); + $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(); - return redirect()->route('tender.penawaran.ulang.index')->with('success', 'Email Penawaran Berhasil Terkirim!'); + try { + // Dispatch job untuk mengirim email + SendPenawaranTenderJob::dispatch( + $kjpps->pluck('emails')->flatten()->toArray(), + $penawaran, + $permohonan, + $villages, + $districts, + $cities, + $provinces + ); + + // 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) @@ -831,6 +961,11 @@ 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(), @@ -838,6 +973,11 @@ class TenderController extends Controller } 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 { @@ -873,6 +1013,11 @@ class TenderController extends Controller 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(), @@ -880,6 +1025,11 @@ class TenderController extends Controller } 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(), ]);