diff --git a/app/Controllers/LeadsController.php b/app/Controllers/LeadsController.php index bd343eee..231ce0e1 100644 --- a/app/Controllers/LeadsController.php +++ b/app/Controllers/LeadsController.php @@ -2147,6 +2147,59 @@ class LeadsController extends BaseController return $result; } + private function saveLeadInstallmentDetails(int $lead_id, $installments): array + { + if (is_string($installments)) { + $installments = json_decode($installments, true) ?? []; + } + + if (! is_array($installments) || empty($installments)) { + return []; + } + + $existingInstallments = $this->leadInstallmentPaymentDetails + ->where('lead_id', $lead_id) + ->where('is_active', 1) + ->orderBy('id', 'ASC') + ->findAll(); + + $savedInstallments = []; + + foreach ($installments as $index => $installment) { + if (! is_array($installment)) { + continue; + } + + $data = [ + 'lead_id' => $lead_id, + 'installment_amount' => $installment['installment_amount'] ?? null, + 'payment_date' => ! empty($installment['payment_date']) + ? change_date_format($installment['payment_date']) + : null, + 'utr_no' => $installment['utr_no'] ?? null, + ]; + + $installmentId = ! empty($installment['id']) ? (int) $installment['id'] : null; + + if (! $installmentId && isset($existingInstallments[$index]['id'])) { + $installmentId = (int) $existingInstallments[$index]['id']; + } + + if ($installmentId) { + $this->leadInstallmentPaymentDetails->update($installmentId, $data); + $data['id'] = $installmentId; + } else { + $data['is_active'] = 1; + $newId = $this->leadInstallmentPaymentDetails->insert($data); + $data['id'] = $newId; + } + + $savedInstallments[] = $data; + } + + return $savedInstallments; + } + public function removeInstallments() { $id = $this->request->getGet('id'); @@ -3811,21 +3864,7 @@ class LeadsController extends BaseController $this->leadsModel->where('id', $lead_id)->set($data)->update(); if (isset($params['installments']) && ! empty($params['installments'])) { - - $installment_data = json_decode($params['installments'], true); - if (! empty($installment_data)) { - foreach ($installment_data as $key => $value) { - // print_r($value);die - $value['payment_date'] = ! empty($value['payment_date']) - ? change_date_format($value['payment_date']) - : null; - if (isset($value['id']) && ! empty($value['id'])) { - $this->leadInstallmentPaymentDetails->where('id', $value['id'])->set($value)->update(); - } else { - $this->leadInstallmentPaymentDetails->insert($value); - } - } - } + $this->saveLeadInstallmentDetails((int) $lead_id, $params['installments']); } } @@ -8491,29 +8530,12 @@ class LeadsController extends BaseController $this->myLogger->logme('error', "Lead updated successfully for ID: $lead_id"); // Save installment details + $savedInstallments = []; if (! empty($params['installments'])) { - $installments = json_decode($params['installments'], true); - $this->myLogger->logme('error', "Installments data received: " . json_encode($installments)); - - if (is_array($installments) && ! empty($installments)) { - foreach ($installments as $installment) { - $installment['payment_date'] = ! empty($installment['payment_date']) - ? change_date_format($installment['payment_date']) - : null; - - $installment['lead_id'] = $lead_id; - - if (! empty($installment['id'])) { - $this->leadInstallmentPaymentDetails->update($installment['id'], $installment); - $this->myLogger->logme('error', "Installment updated: " . json_encode($installment)); - } else { - $this->leadInstallmentPaymentDetails->insert($installment); - $this->myLogger->logme('error', "Installment inserted: " . json_encode($installment)); - } - } - } + $savedInstallments = $this->saveLeadInstallmentDetails((int) $lead_id, $params['installments']); + $this->myLogger->logme('error', 'Installments saved: ' . json_encode($savedInstallments)); } else { - $this->myLogger->logme('error', "No installments provided"); + $this->myLogger->logme('error', 'No installments provided'); } // Update lead file status to pending @@ -8526,12 +8548,13 @@ class LeadsController extends BaseController $this->myLogger->logme('error', "--- savePlacementDataAndValidateMemberDataFile END (SUCCESS) ---"); return $this->respond([ - 'status' => true, - 'code' => 200, - 'message' => 'Placement data saved successfully. File being validated', - 'lead_id' => $lead_id, - 'data' => $data, - 'params' => $params, + 'status' => true, + 'code' => 200, + 'message' => 'Placement data saved successfully. File being validated', + 'lead_id' => $lead_id, + 'installments' => $savedInstallments, + 'data' => $data, + 'params' => $params, ], 200); } catch (\Exception $e) { @@ -8614,31 +8637,17 @@ class LeadsController extends BaseController $this->leadsModel->update($lead_id, $data); + $savedInstallments = []; if (! empty($params['installments'])) { - $installments = json_decode($params['installments'], true); - - if (is_array($installments) && ! empty($installments)) { - foreach ($installments as $installment) { - $installment['payment_date'] = ! empty($installment['payment_date']) - ? change_date_format($installment['payment_date']) - : null; - - $installment['lead_id'] = $lead_id; - - if (! empty($installment['id'])) { - $this->leadInstallmentPaymentDetails->update($installment['id'], $installment); - } else { - $this->leadInstallmentPaymentDetails->insert($installment); - } - } - } + $savedInstallments = $this->saveLeadInstallmentDetails((int) $lead_id, $params['installments']); } return $this->respond([ - 'status' => true, - 'code' => 200, - 'message' => 'Placement data saved successfully', - 'lead_id' => $lead_id, + 'status' => true, + 'code' => 200, + 'message' => 'Placement data saved successfully', + 'lead_id' => $lead_id, + 'installments' => $savedInstallments, ], 200); } catch (\Exception $e) { return $this->respond([ diff --git a/app/Controllers/PolicyTransactionController.php b/app/Controllers/PolicyTransactionController.php index 7d144862..f793af2a 100644 --- a/app/Controllers/PolicyTransactionController.php +++ b/app/Controllers/PolicyTransactionController.php @@ -5439,31 +5439,91 @@ class PolicyTransactionController extends BaseController return ['status' => false, 'message' => 'No data found', 'response' => []]; } + $results = []; + $successCount = 0; + $failedCount = 0; + $skippedCount = 0; + foreach ($bdsInstallmentData as $installmentData) { + $installmentId = $installmentData['id'] ?? 'unknown'; + $leadId = $installmentData['lead_id'] ?? 'unknown'; - $mailData = $this->PrepareBDSMailData($installmentData); - $to_mail = $mailData['to_mail']; - $message = $mailData['message']; - $subject = $mailData['subject']; + try { + $mailData = $this->PrepareBDSMailData($installmentData); - $this->myLogger->logme("error", "Installment Pending for" . $subject); + if (empty($mailData) || empty($mailData['to_mail'])) { + $this->myLogger->logme( + 'error', + "Installment {$installmentId} (lead {$leadId}): skipped — no valid recipient emails" + ); + $skippedCount++; + $results[] = [ + 'installment_id' => $installmentId, + 'lead_id' => $leadId, + 'status' => 'skipped', + 'message' => 'No valid recipient emails', + ]; + continue; + } - $common = ['mail_type' => 'installment_amount_due_remainder_mail']; + $to_mail = $mailData['to_mail']; + $message = $mailData['message']; + $subject = $mailData['subject']; - $res = MailHelper::send_email(['mail' => $to_mail, 'subject' => $subject, 'message' => $message, 'common' => $common]); + $this->myLogger->logme("error", "Installment Pending for " . $subject); - $res = json_decode($res); - $this->myLogger->logme('error', 'res: ' . json_encode($res)); + $common = ['mail_type' => 'installment_amount_due_remainder_mail']; - if ($res->status == 'success') { - CLI::write("Mail sent successfully to " . count($to_mail) . " recipients"); - return ['status' => true, 'message' => 'Mail sent successfully', 'response' => $res]; - } else { - CLI::write("Mail sent failed to " . count($to_mail) . " recipients"); - return ['status' => false, 'message' => 'Mail sent failed', 'response' => $res]; + $res = MailHelper::send_email(['mail' => $to_mail, 'subject' => $subject, 'message' => $message, 'common' => $common]); + + $res = json_decode($res); + $this->myLogger->logme( + 'error', + "Installment {$installmentId} (lead {$leadId}) mail result: " . json_encode($res) + ); + + if ($res->status == 'success') { + $successCount++; + CLI::write("Mail sent successfully for installment {$installmentId} to " . count($to_mail) . " recipients"); + $results[] = [ + 'installment_id' => $installmentId, + 'lead_id' => $leadId, + 'status' => 'success', + ]; + } else { + $failedCount++; + CLI::write("Mail failed for installment {$installmentId}"); + $results[] = [ + 'installment_id' => $installmentId, + 'lead_id' => $leadId, + 'status' => 'failed', + 'response' => $res, + ]; + } + } catch (Exception $e) { + $failedCount++; + $this->myLogger->logme( + 'error', + "Installment {$installmentId} (lead {$leadId}) exception: " . $e->getMessage() + ); + $results[] = [ + 'installment_id' => $installmentId, + 'lead_id' => $leadId, + 'status' => 'failed', + 'message' => $e->getMessage(), + ]; } } + $totalProcessed = count($bdsInstallmentData); + $summaryMessage = "Processed {$totalProcessed} installment(s): {$successCount} sent, {$failedCount} failed, {$skippedCount} skipped"; + + return [ + 'status' => $successCount > 0, + 'message' => $summaryMessage, + 'response' => $results, + ]; + } catch (Exception $e) { $this->myLogger->logme('error', 'Exception: ' . $e->getMessage() . 'Page: ' . $e->getFile() . ' Line: ' . $e->getLine()); } diff --git a/app/Views/view_rfq.php b/app/Views/view_rfq.php index 32fe85e3..5a7c564c 100644 --- a/app/Views/view_rfq.php +++ b/app/Views/view_rfq.php @@ -7160,6 +7160,8 @@ function appendMultiFileData(data) { function addInstallmentHTML() { let html = `