FIX_INSTALLMENT_REMINDER_MAIL
This commit is contained in:
parent
4d7312e32e
commit
38bc61860f
@ -2147,6 +2147,59 @@ class LeadsController extends BaseController
|
|||||||
return $result;
|
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()
|
public function removeInstallments()
|
||||||
{
|
{
|
||||||
$id = $this->request->getGet('id');
|
$id = $this->request->getGet('id');
|
||||||
@ -3811,21 +3864,7 @@ class LeadsController extends BaseController
|
|||||||
$this->leadsModel->where('id', $lead_id)->set($data)->update();
|
$this->leadsModel->where('id', $lead_id)->set($data)->update();
|
||||||
|
|
||||||
if (isset($params['installments']) && ! empty($params['installments'])) {
|
if (isset($params['installments']) && ! empty($params['installments'])) {
|
||||||
|
$this->saveLeadInstallmentDetails((int) $lead_id, $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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -8491,29 +8530,12 @@ class LeadsController extends BaseController
|
|||||||
$this->myLogger->logme('error', "Lead updated successfully for ID: $lead_id");
|
$this->myLogger->logme('error', "Lead updated successfully for ID: $lead_id");
|
||||||
|
|
||||||
// Save installment details
|
// Save installment details
|
||||||
|
$savedInstallments = [];
|
||||||
if (! empty($params['installments'])) {
|
if (! empty($params['installments'])) {
|
||||||
$installments = json_decode($params['installments'], true);
|
$savedInstallments = $this->saveLeadInstallmentDetails((int) $lead_id, $params['installments']);
|
||||||
$this->myLogger->logme('error', "Installments data received: " . json_encode($installments));
|
$this->myLogger->logme('error', 'Installments saved: ' . json_encode($savedInstallments));
|
||||||
|
|
||||||
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));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
$this->myLogger->logme('error', "No installments provided");
|
$this->myLogger->logme('error', 'No installments provided');
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update lead file status to pending
|
// Update lead file status to pending
|
||||||
@ -8526,12 +8548,13 @@ class LeadsController extends BaseController
|
|||||||
$this->myLogger->logme('error', "--- savePlacementDataAndValidateMemberDataFile END (SUCCESS) ---");
|
$this->myLogger->logme('error', "--- savePlacementDataAndValidateMemberDataFile END (SUCCESS) ---");
|
||||||
|
|
||||||
return $this->respond([
|
return $this->respond([
|
||||||
'status' => true,
|
'status' => true,
|
||||||
'code' => 200,
|
'code' => 200,
|
||||||
'message' => 'Placement data saved successfully. File being validated',
|
'message' => 'Placement data saved successfully. File being validated',
|
||||||
'lead_id' => $lead_id,
|
'lead_id' => $lead_id,
|
||||||
'data' => $data,
|
'installments' => $savedInstallments,
|
||||||
'params' => $params,
|
'data' => $data,
|
||||||
|
'params' => $params,
|
||||||
], 200);
|
], 200);
|
||||||
|
|
||||||
} catch (\Exception $e) {
|
} catch (\Exception $e) {
|
||||||
@ -8614,31 +8637,17 @@ class LeadsController extends BaseController
|
|||||||
|
|
||||||
$this->leadsModel->update($lead_id, $data);
|
$this->leadsModel->update($lead_id, $data);
|
||||||
|
|
||||||
|
$savedInstallments = [];
|
||||||
if (! empty($params['installments'])) {
|
if (! empty($params['installments'])) {
|
||||||
$installments = json_decode($params['installments'], true);
|
$savedInstallments = $this->saveLeadInstallmentDetails((int) $lead_id, $params['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);
|
|
||||||
} else {
|
|
||||||
$this->leadInstallmentPaymentDetails->insert($installment);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return $this->respond([
|
return $this->respond([
|
||||||
'status' => true,
|
'status' => true,
|
||||||
'code' => 200,
|
'code' => 200,
|
||||||
'message' => 'Placement data saved successfully',
|
'message' => 'Placement data saved successfully',
|
||||||
'lead_id' => $lead_id,
|
'lead_id' => $lead_id,
|
||||||
|
'installments' => $savedInstallments,
|
||||||
], 200);
|
], 200);
|
||||||
} catch (\Exception $e) {
|
} catch (\Exception $e) {
|
||||||
return $this->respond([
|
return $this->respond([
|
||||||
|
|||||||
@ -5439,31 +5439,91 @@ class PolicyTransactionController extends BaseController
|
|||||||
return ['status' => false, 'message' => 'No data found', 'response' => []];
|
return ['status' => false, 'message' => 'No data found', 'response' => []];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$results = [];
|
||||||
|
$successCount = 0;
|
||||||
|
$failedCount = 0;
|
||||||
|
$skippedCount = 0;
|
||||||
|
|
||||||
foreach ($bdsInstallmentData as $installmentData) {
|
foreach ($bdsInstallmentData as $installmentData) {
|
||||||
|
$installmentId = $installmentData['id'] ?? 'unknown';
|
||||||
|
$leadId = $installmentData['lead_id'] ?? 'unknown';
|
||||||
|
|
||||||
$mailData = $this->PrepareBDSMailData($installmentData);
|
try {
|
||||||
$to_mail = $mailData['to_mail'];
|
$mailData = $this->PrepareBDSMailData($installmentData);
|
||||||
$message = $mailData['message'];
|
|
||||||
$subject = $mailData['subject'];
|
|
||||||
|
|
||||||
$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);
|
$common = ['mail_type' => 'installment_amount_due_remainder_mail'];
|
||||||
$this->myLogger->logme('error', 'res: ' . json_encode($res));
|
|
||||||
|
|
||||||
if ($res->status == 'success') {
|
$res = MailHelper::send_email(['mail' => $to_mail, 'subject' => $subject, 'message' => $message, 'common' => $common]);
|
||||||
CLI::write("Mail sent successfully to " . count($to_mail) . " recipients");
|
|
||||||
return ['status' => true, 'message' => 'Mail sent successfully', 'response' => $res];
|
$res = json_decode($res);
|
||||||
} else {
|
$this->myLogger->logme(
|
||||||
CLI::write("Mail sent failed to " . count($to_mail) . " recipients");
|
'error',
|
||||||
return ['status' => false, 'message' => 'Mail sent failed', 'response' => $res];
|
"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) {
|
} catch (Exception $e) {
|
||||||
$this->myLogger->logme('error', 'Exception: ' . $e->getMessage() . 'Page: ' . $e->getFile() . ' Line: ' . $e->getLine());
|
$this->myLogger->logme('error', 'Exception: ' . $e->getMessage() . 'Page: ' . $e->getFile() . ' Line: ' . $e->getLine());
|
||||||
}
|
}
|
||||||
|
|||||||
@ -7160,6 +7160,8 @@ function appendMultiFileData(data) {
|
|||||||
function addInstallmentHTML() {
|
function addInstallmentHTML() {
|
||||||
let html = `
|
let html = `
|
||||||
<div class="form-row align-items-end">
|
<div class="form-row align-items-end">
|
||||||
|
<input type="hidden" name="installment_primary_key[]" value="">
|
||||||
|
|
||||||
<div class="form-group col-md-3">
|
<div class="form-group col-md-3">
|
||||||
<label for="installment_amount">Installment Amount</label>
|
<label for="installment_amount">Installment Amount</label>
|
||||||
<input type="text" class="form-control" name="installment_amount[]" placeholder="Enter Amount">
|
<input type="text" class="form-control" name="installment_amount[]" placeholder="Enter Amount">
|
||||||
@ -7259,9 +7261,8 @@ function appendMultiFileData(data) {
|
|||||||
|
|
||||||
console.log("Form row count:", row_count);
|
console.log("Form row count:", row_count);
|
||||||
|
|
||||||
if (row_count === 1) {
|
if (row_count === 1 && no_of_installments > row_count) {
|
||||||
// $installmentContainer.empty();
|
for (let index = 0; index < no_of_installments - row_count; index++) {
|
||||||
for (let index = 0; index < no_of_installments - 1; index++) {
|
|
||||||
addInstallmentHTML();
|
addInstallmentHTML();
|
||||||
}
|
}
|
||||||
} else if (no_of_installments === row_count) {
|
} else if (no_of_installments === row_count) {
|
||||||
@ -7589,6 +7590,25 @@ function appendMultiFileData(data) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function updateInstallmentPrimaryKeys(installments) {
|
||||||
|
if (!installments || !installments.length) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$('#installment_form_row .form-row').each(function(index) {
|
||||||
|
if (!installments[index] || !installments[index].id) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
let $hidden = $(this).find('input[name="installment_primary_key[]"]');
|
||||||
|
if ($hidden.length === 0) {
|
||||||
|
$(this).prepend('<input type="hidden" name="installment_primary_key[]" value="' + installments[index].id + '">');
|
||||||
|
} else {
|
||||||
|
$hidden.val(installments[index].id);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
function constructPlacementDataPayload() {
|
function constructPlacementDataPayload() {
|
||||||
var lead_id = $('#lead_id').val();
|
var lead_id = $('#lead_id').val();
|
||||||
let placement_date = $('#placement_date').val();
|
let placement_date = $('#placement_date').val();
|
||||||
@ -7677,6 +7697,7 @@ function appendMultiFileData(data) {
|
|||||||
|
|
||||||
if (res.status == true) {
|
if (res.status == true) {
|
||||||
toastr.success(res.message, 'Success');
|
toastr.success(res.message, 'Success');
|
||||||
|
updateInstallmentPrimaryKeys(res.installments);
|
||||||
$('.close').click();
|
$('.close').click();
|
||||||
} else {
|
} else {
|
||||||
toastr.warning(res.message || 'Failed to save placement data', 'Warning');
|
toastr.warning(res.message || 'Failed to save placement data', 'Warning');
|
||||||
@ -7711,6 +7732,7 @@ function appendMultiFileData(data) {
|
|||||||
|
|
||||||
if (res.status == true) {
|
if (res.status == true) {
|
||||||
toastr.success(res.message, 'Success');
|
toastr.success(res.message, 'Success');
|
||||||
|
updateInstallmentPrimaryKeys(res.installments);
|
||||||
checkMemberDataValidationStatus(res.lead_id)
|
checkMemberDataValidationStatus(res.lead_id)
|
||||||
} else {
|
} else {
|
||||||
toastr.warning(res.message, 'Warning');
|
toastr.warning(res.message, 'Warning');
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user