chore: implenet the external invoice 2

This commit is contained in:
mahyargdz
2025-07-14 12:28:40 +03:30
parent 11b8164c28
commit b7dcc994f6
2 changed files with 17 additions and 16 deletions
@@ -562,7 +562,7 @@ export class InvoicesService {
await queryRunner.manager.save(Wallet, userWallet); await queryRunner.manager.save(Wallet, userWallet);
if (invoice.items[0]?.subscriptionPlan) { if (invoice.items[0]?.subscriptionPlan && !invoice.isExternal) {
const userSubscription = invoice.items[0].subscriptionPlan; const userSubscription = invoice.items[0].subscriptionPlan;
userSubscription.status = SubscriptionStatus.ACTIVE; userSubscription.status = SubscriptionStatus.ACTIVE;
@@ -573,7 +573,7 @@ export class InvoicesService {
await this.addNotifyAdminForSubscriptionPaymentToQueue(invoice); await this.addNotifyAdminForSubscriptionPaymentToQueue(invoice);
// //
} else if (invoice.items[0]?.supportPlan) { } else if (invoice.items[0]?.supportPlan && !invoice.isExternal) {
const oldUserSupportPlan = await queryRunner.manager.findOne(UserSupportPlan, { const oldUserSupportPlan = await queryRunner.manager.findOne(UserSupportPlan, {
where: { user: { id: user.id }, status: UserSupportPlanStatus.ACTIVE }, where: { user: { id: user.id }, status: UserSupportPlanStatus.ACTIVE },
}); });
@@ -594,6 +594,11 @@ export class InvoicesService {
await this.addNotifyForWalletDeduction(invoice, user, userWallet, WalletMessage.INVOICE_WALLET_TRANSFER); await this.addNotifyForWalletDeduction(invoice, user, userWallet, WalletMessage.INVOICE_WALLET_TRANSFER);
} }
invoice.status = InvoiceStatus.PAID;
invoice.paidAt = dayjs().toDate();
await queryRunner.manager.save(Invoice, invoice);
if (invoice.isExternal && invoice.items?.[0]?.subscriptionPlan) { if (invoice.isExternal && invoice.items?.[0]?.subscriptionPlan) {
const externalInvoiceJobData: IExternalInvoiceJob = { const externalInvoiceJobData: IExternalInvoiceJob = {
invoice, invoice,
@@ -604,18 +609,14 @@ export class InvoicesService {
}; };
await this.externalInvoiceQueue.add(INVOICE.EXTERNAL_CALLBACK_JOB_NAME, externalInvoiceJobData, { await this.externalInvoiceQueue.add(INVOICE.EXTERNAL_CALLBACK_JOB_NAME, externalInvoiceJobData, {
delay: dayjs().add(5000, "millisecond").diff(dayjs()), // delay: dayjs().add(10000, "millisecond").diff(dayjs()),
delay: 5000,
attempts: INVOICE.EXTERNAL_JOB_ATTEMPTS, attempts: INVOICE.EXTERNAL_JOB_ATTEMPTS,
backoff: { type: "exponential", delay: INVOICE.EXTERNAL_JOB_BACKOFF }, backoff: { type: "exponential", delay: INVOICE.EXTERNAL_JOB_BACKOFF },
priority: INVOICE.EXTERNAL_JOB_PRIORITY, priority: INVOICE.EXTERNAL_JOB_PRIORITY,
}); });
} }
invoice.status = InvoiceStatus.PAID;
invoice.paidAt = dayjs().toDate();
await queryRunner.manager.save(Invoice, invoice);
await this.notificationQueue.addBillInvoiceNotification(userId, { await this.notificationQueue.addBillInvoiceNotification(userId, {
invoiceId: invoice.numericId.toString(), invoiceId: invoice.numericId.toString(),
dueDate: invoice.dueDate, dueDate: invoice.dueDate,
@@ -816,7 +817,7 @@ export class InvoicesService {
items: invoiceItems, items: invoiceItems,
tax: tax.toNumber(), tax: tax.toNumber(),
dueDate, dueDate,
status: InvoiceStatus.PENDING, status: InvoiceStatus.WAIT_PAYMENT,
isRecurring: createDto.isRecurring, isRecurring: createDto.isRecurring,
recurringPeriod: createDto.recurringPeriod, recurringPeriod: createDto.recurringPeriod,
maxRecurringCycles: createDto.maxRecurringCycles, maxRecurringCycles: createDto.maxRecurringCycles,
+7 -7
View File
@@ -6,7 +6,7 @@ import { catchError, firstValueFrom } from "rxjs";
import { SmsMessage } from "../../../common/enums/message.enum"; import { SmsMessage } from "../../../common/enums/message.enum";
import { ISmsConfigs } from "../../../configs/sms.config"; import { ISmsConfigs } from "../../../configs/sms.config";
import { SMS_CONFIG } from "../constants"; import { SMS_CONFIG } from "../constants";
import { numberFormat } from "./international.utils"; import { dateFormat, numberFormat } from "./international.utils";
import { truncateIfLong } from "./string.utils"; import { truncateIfLong } from "./string.utils";
import { ISmsGetLineResponse, ISmsVerifyBody, ISmsVerifyResponse } from "../interfaces/ISms"; import { ISmsGetLineResponse, ISmsVerifyBody, ISmsVerifyResponse } from "../interfaces/ISms";
@@ -341,7 +341,7 @@ export class SmsService {
const smsData: ISmsVerifyBody = { const smsData: ISmsVerifyBody = {
Parameters: [ Parameters: [
{ name: "invoiceId", value: invoiceId }, { name: "invoiceId", value: invoiceId },
{ name: "price", value: Intl.NumberFormat("fa-IR").format(price) }, { name: "price", value: numberFormat(price) },
{ name: "dueDate", value: dueDate }, { name: "dueDate", value: dueDate },
], ],
Mobile: mobile, Mobile: mobile,
@@ -368,12 +368,12 @@ export class SmsService {
} }
} }
//************************************************* */ //************************************************* */
async sendInvoicePaidSms(mobile: string, invoiceId: string, amount: number, paidDate: string) { async sendInvoicePaidSms(mobile: string, invoiceId: string, price: number, paidDate: string) {
const smsData: ISmsVerifyBody = { const smsData: ISmsVerifyBody = {
Parameters: [ Parameters: [
{ name: "invoiceId", value: invoiceId }, { name: "invoiceId", value: invoiceId },
{ name: "amount", value: numberFormat(amount) }, { name: "price", value: numberFormat(price) },
{ name: "paidDate", value: paidDate }, { name: "date", value: dateFormat(paidDate) },
], ],
Mobile: mobile, Mobile: mobile,
TemplateId: this.smsConfigs.SMS_PATTERN_INVOICE_PAID, TemplateId: this.smsConfigs.SMS_PATTERN_INVOICE_PAID,
@@ -401,11 +401,11 @@ export class SmsService {
//************************************************* */ //************************************************* */
async sendInvoicePaymentReminderSms(mobile: string, invoiceId: string, amount: number, dueDate: string) { async sendInvoicePaymentReminderSms(mobile: string, invoiceId: string, price: number, dueDate: string) {
const smsData: ISmsVerifyBody = { const smsData: ISmsVerifyBody = {
Parameters: [ Parameters: [
{ name: "invoiceId", value: invoiceId }, { name: "invoiceId", value: invoiceId },
{ name: "amount", value: numberFormat(amount) }, { name: "price", value: numberFormat(price) },
{ name: "dueDate", value: dueDate }, { name: "dueDate", value: dueDate },
], ],
Mobile: mobile, Mobile: mobile,