diff --git a/Dockerfile b/Dockerfile index 19e5ddf..9b354f4 100644 --- a/Dockerfile +++ b/Dockerfile @@ -12,5 +12,6 @@ COPY env/$env_target /app/.env COPY --from=builder /app/env/$env_target .env COPY --from=builder /app/node_modules ./node_modules COPY --from=builder /app/dist ./dist +COPY --from=builder /app/assets ./assets COPY --from=builder /app/package.json ./package.json CMD ["node", "--max-old-space-size=8192","--max-http-header-size", "512000", "-r", "dotenv/config", "dist/main"] \ No newline at end of file diff --git a/src/modules/configuration/mail/domain/email-template/change-date-information.html b/assets/email-template/change-date-information.html similarity index 100% rename from src/modules/configuration/mail/domain/email-template/change-date-information.html rename to assets/email-template/change-date-information.html diff --git a/src/modules/configuration/mail/domain/email-template/invoice-bank.html b/assets/email-template/invoice-bank.html similarity index 100% rename from src/modules/configuration/mail/domain/email-template/invoice-bank.html rename to assets/email-template/invoice-bank.html diff --git a/src/modules/configuration/mail/domain/email-template/invoice-expired.html b/assets/email-template/invoice-expired.html similarity index 100% rename from src/modules/configuration/mail/domain/email-template/invoice-expired.html rename to assets/email-template/invoice-expired.html diff --git a/src/modules/configuration/mail/domain/email-template/invoice-midtrans.html b/assets/email-template/invoice-midtrans.html similarity index 100% rename from src/modules/configuration/mail/domain/email-template/invoice-midtrans.html rename to assets/email-template/invoice-midtrans.html diff --git a/src/modules/configuration/mail/domain/email-template/payment-confirmation.html b/assets/email-template/payment-confirmation.html similarity index 96% rename from src/modules/configuration/mail/domain/email-template/payment-confirmation.html rename to assets/email-template/payment-confirmation.html index 4fcd182..e9bb48a 100644 --- a/src/modules/configuration/mail/domain/email-template/payment-confirmation.html +++ b/assets/email-template/payment-confirmation.html @@ -1,412 +1,412 @@ - - - - - - - Email Confirmation - - - - - - - - - - -
  -
- - - - - - -
- - - - -
-

Dear,

-

{{customer_name}}

-

{{customer_phone}}

- -

We are excited to inform you that your payment has been successfully received!

-

Attached to this email, you will find your confirmatin receipt

-

Please keep this safe as you will need to show it at the entrance upon your arrival

-

It's your golden ticket to all the fun and excitement awaiting you!

- -
-

Here's a quick recap:

- -

Booking Date: {{booking_date}}

-

Invoice Code: {{invoice_code}}

-

Payment Date: {{payment_date}}

-

Payment Code: {{payment_code}}

-

Payment Via: {{payment_via}}

-

Account No: {{account_no}}

-

On Behalf Of: {{account_name}}

-
- -

If you have any questions or need assistance, feel free to reach out to our support team at

- {{phone_cs}} -
- -

Font forget to bring a smile and your confirmation receipt (attached) for a smooth entry

-

We can't wait to see you and ensure you have an amazing time with us!

- -

- Best Regrads,
- WEplayground -
-
-
-
 
- - + + + + + + + Email Confirmation + + + + + + + + + + +
  +
+ + + + + + +
+ + + + +
+

Dear,

+

{{customer_name}}

+

{{customer_phone}}

+ +

We are excited to inform you that your payment has been successfully received!

+

Attached to this email, you will find your confirmatin receipt

+

Please keep this safe as you will need to show it at the entrance upon your arrival

+

It's your golden ticket to all the fun and excitement awaiting you!

+ +
+

Here's a quick recap:

+ +

Booking Date: {{booking_date}}

+

Invoice Code: {{invoice_code}}

+

Payment Date: {{payment_date}}

+

Payment Code: {{payment_code}}

+

Payment Via: {{payment_via}}

+

Account No: {{account_no}}

+

On Behalf Of: {{account_name}}

+
+ +

If you have any questions or need assistance, feel free to reach out to our support team at

+ {{phone_cs}} +
+ +

Font forget to bring a smile and your confirmation receipt (attached) for a smooth entry

+

We can't wait to see you and ensure you have an amazing time with us!

+ +

+ Best Regrads,
+ WEplayground +
+
+
+
 
+ + \ No newline at end of file diff --git a/src/modules/configuration/mail/domain/email-template/refund-confirmation.html b/assets/email-template/refund-confirmation.html similarity index 100% rename from src/modules/configuration/mail/domain/email-template/refund-confirmation.html rename to assets/email-template/refund-confirmation.html diff --git a/src/modules/configuration/mail/domain/email-template/refund-request.html b/assets/email-template/refund-request.html similarity index 100% rename from src/modules/configuration/mail/domain/email-template/refund-request.html rename to assets/email-template/refund-request.html diff --git a/fonts/Roboto-Black.ttf b/assets/fonts/Roboto-Black.ttf similarity index 100% rename from fonts/Roboto-Black.ttf rename to assets/fonts/Roboto-Black.ttf diff --git a/fonts/Roboto-BlackItalic.ttf b/assets/fonts/Roboto-BlackItalic.ttf similarity index 100% rename from fonts/Roboto-BlackItalic.ttf rename to assets/fonts/Roboto-BlackItalic.ttf diff --git a/fonts/Roboto-Bold.ttf b/assets/fonts/Roboto-Bold.ttf similarity index 100% rename from fonts/Roboto-Bold.ttf rename to assets/fonts/Roboto-Bold.ttf diff --git a/fonts/Roboto-BoldItalic.ttf b/assets/fonts/Roboto-BoldItalic.ttf similarity index 100% rename from fonts/Roboto-BoldItalic.ttf rename to assets/fonts/Roboto-BoldItalic.ttf diff --git a/fonts/Roboto-Italic.ttf b/assets/fonts/Roboto-Italic.ttf similarity index 100% rename from fonts/Roboto-Italic.ttf rename to assets/fonts/Roboto-Italic.ttf diff --git a/fonts/Roboto-Light.ttf b/assets/fonts/Roboto-Light.ttf similarity index 100% rename from fonts/Roboto-Light.ttf rename to assets/fonts/Roboto-Light.ttf diff --git a/fonts/Roboto-LightItalic.ttf b/assets/fonts/Roboto-LightItalic.ttf similarity index 100% rename from fonts/Roboto-LightItalic.ttf rename to assets/fonts/Roboto-LightItalic.ttf diff --git a/fonts/Roboto-Medium.ttf b/assets/fonts/Roboto-Medium.ttf similarity index 100% rename from fonts/Roboto-Medium.ttf rename to assets/fonts/Roboto-Medium.ttf diff --git a/fonts/Roboto-MediumItalic.ttf b/assets/fonts/Roboto-MediumItalic.ttf similarity index 100% rename from fonts/Roboto-MediumItalic.ttf rename to assets/fonts/Roboto-MediumItalic.ttf diff --git a/fonts/Roboto-Regular.ttf b/assets/fonts/Roboto-Regular.ttf similarity index 100% rename from fonts/Roboto-Regular.ttf rename to assets/fonts/Roboto-Regular.ttf diff --git a/fonts/Roboto-Thin.ttf b/assets/fonts/Roboto-Thin.ttf similarity index 100% rename from fonts/Roboto-Thin.ttf rename to assets/fonts/Roboto-Thin.ttf diff --git a/fonts/Roboto-ThinItalic.ttf b/assets/fonts/Roboto-ThinItalic.ttf similarity index 100% rename from fonts/Roboto-ThinItalic.ttf rename to assets/fonts/Roboto-ThinItalic.ttf diff --git a/image/logo.jpeg b/assets/image/logo.jpeg similarity index 100% rename from image/logo.jpeg rename to assets/image/logo.jpeg diff --git a/src/modules/configuration/export/domain/templates/helpers/generate-pdf.helper.ts b/src/modules/configuration/export/domain/templates/helpers/generate-pdf.helper.ts index aab5da3..0ea3b6e 100644 --- a/src/modules/configuration/export/domain/templates/helpers/generate-pdf.helper.ts +++ b/src/modules/configuration/export/domain/templates/helpers/generate-pdf.helper.ts @@ -1,20 +1,20 @@ -import { InvoiceTempalte } from '../invoice.template'; -const PdfPrinter = require('pdfmake'); -const { PassThrough } = require('stream'); +import { InvoiceTemplate } from '../invoice.template'; +import * as PdfPrinter from 'pdfmake'; +import { PassThrough } from 'stream'; export async function GeneratePdf(transaction, invoiceType, banks) { - var fonts = { + const fonts = { Roboto: { - normal: './fonts/Roboto-Regular.ttf', - bold: './fonts/Roboto-Medium.ttf', - italics: './fonts/Roboto-Italic.ttf', - bolditalics: './fonts/Roboto-MediumItalic.ttf', + normal: './assets/fonts/Roboto-Regular.ttf', + bold: './assets/fonts/Roboto-Medium.ttf', + italics: './assets/fonts/Roboto-Italic.ttf', + bolditalics: './assets/fonts/Roboto-MediumItalic.ttf', }, }; const printer = new PdfPrinter(fonts); - const docDefinition = InvoiceTempalte(transaction, invoiceType, banks); + const docDefinition = InvoiceTemplate(transaction, invoiceType, banks); const createPdfBuffer = (docDefinition) => { return new Promise((resolve, reject) => { diff --git a/src/modules/configuration/export/domain/templates/invoice.template.ts b/src/modules/configuration/export/domain/templates/invoice.template.ts index ba639dc..48da0c7 100644 --- a/src/modules/configuration/export/domain/templates/invoice.template.ts +++ b/src/modules/configuration/export/domain/templates/invoice.template.ts @@ -11,12 +11,12 @@ import { InvoiceType } from '../../constants'; import { PaymentMethodEntity } from 'src/modules/transaction/payment-method/domain/entities/payment-method.entity'; import * as fs from 'fs'; -export function InvoiceTempalte( +export function InvoiceTemplate( transaction: TransactionEntity, invoiceType: InvoiceType, banks: PaymentMethodEntity[], ) { - const filePath = './image/logo.jpeg'; + const filePath = './assets/image/logo.jpeg'; const imageBase64 = fs.readFileSync(filePath).toString('base64'); const imageUrl = `data:image/png;base64,${imageBase64}`; @@ -52,37 +52,37 @@ export function InvoiceTempalte( { layout: { defaultBorder: false, - hLineWidth: function (i, node) { + hLineWidth: function () { return 1; }, - vLineWidth: function (i, node) { + vLineWidth: function () { return 1; }, - hLineColor: function (i, node) { + hLineColor: function (i) { return i === 0 ? '#000000' : '#eaeaea'; }, - vLineColor: function (i, node) { + vLineColor: function () { return '#eaeaea'; }, - hLineStyle: function (i, node) { + hLineStyle: function () { // if (i === 0 || i === node.table.body.length) { return null; //} }, // vLineStyle: function (i, node) { return {dash: { length: 10, space: 4 }}; }, - paddingLeft: function (i, node) { + paddingLeft: function () { return 10; }, - paddingRight: function (i, node) { + paddingRight: function () { return 10; }, - paddingTop: function (i, node) { + paddingTop: function () { return 3; }, - paddingBottom: function (i, node) { + paddingBottom: function () { return 3; }, - fillColor: function (rowIndex, node, columnIndex) { + fillColor: function () { return '#fff'; }, }, @@ -95,37 +95,37 @@ export function InvoiceTempalte( { layout: { defaultBorder: false, - hLineWidth: function (i, node) { + hLineWidth: function () { return 1; }, - vLineWidth: function (i, node) { + vLineWidth: function () { return 1; }, - hLineColor: function (i, node) { + hLineColor: function (i) { return i === 3 ? '#000000' : '#eaeaea'; }, - vLineColor: function (i, node) { + vLineColor: function () { return '#eaeaea'; }, - hLineStyle: function (i, node) { + hLineStyle: function () { // if (i === 0 || i === node.table.body.length) { return null; //} }, - // vLineStyle: function (i, node) { return {dash: { length: 10, space: 4 }}; }, - paddingLeft: function (i, node) { + // vLineStyle: function () { return {dash: { length: 10, space: 4 }}; }, + paddingLeft: function () { return 10; }, - paddingRight: function (i, node) { + paddingRight: function () { return 10; }, - paddingTop: function (i, node) { + paddingTop: function () { return 3; }, - paddingBottom: function (i, node) { + paddingBottom: function (i) { return i === 2 ? 20 : 3; }, - fillColor: function (rowIndex, node, columnIndex) { + fillColor: function () { return '#fff'; }, }, @@ -145,37 +145,37 @@ export function InvoiceTempalte( { layout: { defaultBorder: false, - hLineWidth: function (i, node) { + hLineWidth: function () { return 1; }, - vLineWidth: function (i, node) { + vLineWidth: function () { return 1; }, - hLineColor: function (i, node) { + hLineColor: function (i) { return i === 0 ? '#000000' : '#eaeaea'; }, - vLineColor: function (i, node) { + vLineColor: function () { return '#eaeaea'; }, - hLineStyle: function (i, node) { + hLineStyle: function () { // if (i === 0 || i === node.table.body.length) { return null; //} }, - // vLineStyle: function (i, node) { return {dash: { length: 10, space: 4 }}; }, - paddingLeft: function (i, node) { + // vLineStyle: function () { return {dash: { length: 10, space: 4 }}; }, + paddingLeft: function () { return 10; }, - paddingRight: function (i, node) { + paddingRight: function () { return 10; }, - paddingTop: function (i, node) { + paddingTop: function () { return 20; }, - paddingBottom: function (i, node) { + paddingBottom: function () { return 3; }, - fillColor: function (rowIndex, node, columnIndex) { + fillColor: function () { return '#fff'; }, }, diff --git a/src/modules/configuration/mail/domain/helpers/send-email.helper.ts b/src/modules/configuration/mail/domain/helpers/send-email.helper.ts index 0166d3a..ad0532a 100644 --- a/src/modules/configuration/mail/domain/helpers/send-email.helper.ts +++ b/src/modules/configuration/mail/domain/helpers/send-email.helper.ts @@ -1,6 +1,5 @@ import * as nodemailer from 'nodemailer'; import * as handlebars from 'handlebars'; -import * as path from 'path'; import * as fs from 'fs'; import { TransactionPaymentType } from 'src/modules/transaction/transaction/constants'; import { InvoiceType } from 'src/modules/configuration/export/constants'; @@ -18,11 +17,7 @@ export async function sendEmail(receivers, invoiceType, attachment?) { for (const receiver of receivers) { try { const templateName = getTemplate(receiver.payment_type, invoiceType); - let templatePath = path.join( - __dirname, - `../email-template/${templateName}.html`, - ); - templatePath = templatePath.replace(/dist/g, 'src'); + const templatePath = `./assets/email-template/${templateName}.html`; const templateSource = fs.readFileSync(templatePath, 'utf8'); const template = handlebars.compile(templateSource); @@ -44,7 +39,7 @@ export async function sendEmail(receivers, invoiceType, attachment?) { await new Promise((f) => setTimeout(f, 2000)); - smtpTransport.sendMail(emailContext, function (err, data) { + smtpTransport.sendMail(emailContext, function (err) { if (err) { console.log(err, `Error occurs on send to ${receiver.email}`); } else { diff --git a/src/modules/configuration/mail/infrastructure/mail.controller.ts b/src/modules/configuration/mail/infrastructure/mail.controller.ts index 75e6d82..c2afa9d 100644 --- a/src/modules/configuration/mail/infrastructure/mail.controller.ts +++ b/src/modules/configuration/mail/infrastructure/mail.controller.ts @@ -9,8 +9,6 @@ import * as fs from 'fs'; @Public() @Injectable() export class MailTemplateController { - constructor() {} - getTemplate(templateName) { const templatePath = path.join( __dirname, @@ -52,6 +50,6 @@ export class MailTemplateController { @Get('refund-request') async getRefundRequest() { - return this.getTemplate('refunr-request'); + return this.getTemplate('refund-request'); } } diff --git a/src/modules/transaction/reconciliation/domain/usecases/managers/recap-reconciliation.manager.ts b/src/modules/transaction/reconciliation/domain/usecases/managers/recap-reconciliation.manager.ts index 9b9418e..8c584c7 100644 --- a/src/modules/transaction/reconciliation/domain/usecases/managers/recap-reconciliation.manager.ts +++ b/src/modules/transaction/reconciliation/domain/usecases/managers/recap-reconciliation.manager.ts @@ -4,7 +4,7 @@ import { EventTopics } from 'src/core/strings/constants/interface.constants'; import { TransactionType } from 'src/modules/transaction/transaction/constants'; import { TransactionModel } from 'src/modules/transaction/transaction/data/models/transaction.model'; import { TransactionEntity } from 'src/modules/transaction/transaction/domain/entities/transaction.entity'; -import { Between, ILike } from 'typeorm'; +import { Between } from 'typeorm'; import * as _ from 'lodash'; import * as moment from 'moment'; import { EMPTY_UUID, STATUS } from 'src/core/strings/constants/base.constants'; @@ -35,7 +35,7 @@ export class RecapReconciliationManager extends BaseCustomManager { @@ -77,6 +78,7 @@ export class PosTransactionHandler implements IEventHandler { await this.dataService.create(queryRunner, TransactionModel, data); } } catch (error) { + apm.captureError(error); console.log('error handling pos transaction couch'); } } diff --git a/src/modules/transaction/transaction/domain/usecases/managers/cancel-transaction.manager.ts b/src/modules/transaction/transaction/domain/usecases/managers/cancel-transaction.manager.ts index 5499d86..5c3c013 100644 --- a/src/modules/transaction/transaction/domain/usecases/managers/cancel-transaction.manager.ts +++ b/src/modules/transaction/transaction/domain/usecases/managers/cancel-transaction.manager.ts @@ -31,9 +31,8 @@ export class CancelTransactionManager extends BaseUpdateStatusManager { - const freeTransaction = this.data.payment_total < 1; Object.assign(this.data, { - status: freeTransaction ? STATUS.ACTIVE : STATUS.PENDING, + status: STATUS.CANCEL, }); return; } diff --git a/src/modules/transaction/transaction/domain/usecases/transaction-data.orchestrator.ts b/src/modules/transaction/transaction/domain/usecases/transaction-data.orchestrator.ts index f8c002c..8496379 100644 --- a/src/modules/transaction/transaction/domain/usecases/transaction-data.orchestrator.ts +++ b/src/modules/transaction/transaction/domain/usecases/transaction-data.orchestrator.ts @@ -17,7 +17,6 @@ import { BatchConfirmDataTransactionManager } from './managers/batch-confirm-dat import { MidtransService } from 'src/modules/configuration/midtrans/data/services/midtrans.service'; import { PdfMakeManager } from 'src/modules/configuration/export/domain/managers/pdf-make.manager'; import { PaymentMethodDataService } from 'src/modules/transaction/payment-method/data/services/payment-method-data.service'; -import { InvoiceType } from 'src/modules/configuration/export/constants'; @Injectable() export class TransactionDataOrchestrator {