feat: Refactor transaction handling by removing is_pay field and adding documentno in relevant models
Deploy Application / deploy (push) Successful in 30s Details

This commit is contained in:
faisolavolut 2025-10-28 12:43:42 +07:00
parent d6effb7fd8
commit 1bcc5528b7
4 changed files with 42 additions and 11 deletions

View File

@ -269,7 +269,6 @@ model transactions {
user_id String? @db.Uuid user_id String? @db.Uuid
status String @db.VarChar(50) status String @db.VarChar(50)
amount Decimal @db.Decimal(20, 2) amount Decimal @db.Decimal(20, 2)
is_pay Boolean @default(false)
c_bpartner_id Decimal? @db.Decimal(10, 0) c_bpartner_id Decimal? @db.Decimal(10, 0)
created_at DateTime? @default(now()) @db.Timestamptz(6) created_at DateTime? @default(now()) @db.Timestamptz(6)
updated_at DateTime? @default(now()) @db.Timestamptz(6) updated_at DateTime? @default(now()) @db.Timestamptz(6)
@ -291,13 +290,14 @@ model transactions {
virtualAccountNo String? @db.VarChar(50) virtualAccountNo String? @db.VarChar(50)
partnerReferenceNo String? @db.VarChar(50) partnerReferenceNo String? @db.VarChar(50)
bankto_id String? @db.Uuid bankto_id String? @db.Uuid
external_id String? @db.VarChar(50)
beneficiaryAccountName String? @db.VarChar(255) beneficiaryAccountName String? @db.VarChar(255)
beneficiaryAccountNo String? @db.VarChar(255) beneficiaryAccountNo String? @db.VarChar(255)
method String? @db.VarChar(50) method String? @db.VarChar(50)
originatorCustomerName String? @db.VarChar(255) originatorCustomerName String? @db.VarChar(255)
originatorCustomerNo String? @db.VarChar(50) originatorCustomerNo String? @db.VarChar(50)
sourceAccountNo String? @db.VarChar(255) sourceAccountNo String? @db.VarChar(255)
external_id String? @db.VarChar(50)
documentno String? @db.VarChar(255)
banks banks @relation(fields: [bank_id], references: [bank_id], onDelete: NoAction, onUpdate: NoAction) banks banks @relation(fields: [bank_id], references: [bank_id], onDelete: NoAction, onUpdate: NoAction)
banks_to banks? @relation("transactions_bankto_idTobanks", fields: [bankto_id], references: [bank_id], onDelete: NoAction, onUpdate: NoAction) banks_to banks? @relation("transactions_bankto_idTobanks", fields: [bankto_id], references: [bank_id], onDelete: NoAction, onUpdate: NoAction)
database database? @relation(fields: [db_id], references: [db_id], onDelete: NoAction, onUpdate: NoAction) database database? @relation(fields: [db_id], references: [db_id], onDelete: NoAction, onUpdate: NoAction)
@ -315,10 +315,11 @@ model transactions_lines {
c_invoice_id Decimal? @db.Decimal(10, 0) c_invoice_id Decimal? @db.Decimal(10, 0)
created_at DateTime? @default(now()) @db.Timestamptz(6) created_at DateTime? @default(now()) @db.Timestamptz(6)
updated_at DateTime? @default(now()) @db.Timestamptz(6) updated_at DateTime? @default(now()) @db.Timestamptz(6)
bank_id String @db.Uuid
tenant_id String @db.Uuid tenant_id String @db.Uuid
line_no Int @default(1) line_no Int @default(1)
id String @id @default(dbgenerated("gen_random_uuid()")) @db.Uuid id String @id @default(dbgenerated("gen_random_uuid()")) @db.Uuid
c_payment_id Decimal? @db.Decimal(10, 0)
documentno String? @db.VarChar(255)
database database? @relation(fields: [db_id], references: [db_id], onDelete: NoAction, onUpdate: NoAction) database database? @relation(fields: [db_id], references: [db_id], onDelete: NoAction, onUpdate: NoAction)
transactions transactions @relation(fields: [transaction_id], references: [id], onDelete: NoAction, onUpdate: NoAction) transactions transactions @relation(fields: [transaction_id], references: [id], onDelete: NoAction, onUpdate: NoAction)
} }

View File

@ -104,17 +104,18 @@ export async function MidsuitPayment(req: Request, res: Response) {
) { ) {
return res.status(400).json({ error: "invalid bank code" }); return res.status(400).json({ error: "invalid bank code" });
} }
const bankFrom = await db.bank_code.findFirst({ const bankFrom = await db.banks.findFirst({
where: { code: String(get(data, "originatorBankCode")) }, where: { code: String(get(data, "originatorBankCode")) },
}); });
const bankTo = await db.bank_code.findFirst({
where: { code: String(get(data, "beneficiaryBankCode")) },
});
if (!bankFrom) { if (!bankFrom) {
return res return res
.status(400) .status(400)
.json({ error: "unsupported originator bank code midsuit" }); .json({ error: "unsupported originator bank code midsuit" });
} }
const bankTo = await db.banks.findFirst({
where: { code: String(get(data, "beneficiaryBankCode")) },
});
console.log(bankTo);
if (!bankTo) { if (!bankTo) {
return res return res
.status(400) .status(400)
@ -160,8 +161,31 @@ export async function MidsuitPayment(req: Request, res: Response) {
senderCustomerType: get(data, "beneficiaryCustomerType", "2"), senderCustomerType: get(data, "beneficiaryCustomerType", "2"),
}; };
} }
console.log({
tenant_id: user.tenant_id,
bank_id: get(bankTo, "bank_id") as any,
bankto_id: get(bankFrom, "bank_id") as any,
external_id: external_id,
partnerReferenceNo: partnerReferenceNo,
amount: get(data, "amount"),
description: `Payment for ${get(data, "documentno")}`,
status: "DRAFT",
beneficiaryAccountName: get(data, "beneficiaryAccountName"),
beneficiaryAccountNo: get(data, "beneficiaryAccountNo"),
sourceAccountNo: get(data, "sourceAccountNo"),
originatorCustomerName: get(data, "originatorCustomerName"),
originatorCustomerNo: get(data, "originatorCustomerNo"),
method: isRTKGS
? "RTGS"
: get(data, "beneficiaryBankCode") !== bankCodeUser
? "SKN"
: "Inhouse",
});
const transaction = await db.transactions.create({ const transaction = await db.transactions.create({
data: { data: {
db_id: user.db_id,
user_id: user.user_id,
documentno: get(data, "documentno"),
tenant_id: user.tenant_id, tenant_id: user.tenant_id,
bank_id: get(bankTo, "bank_id") as any, bank_id: get(bankTo, "bank_id") as any,
bankto_id: get(bankFrom, "bank_id") as any, bankto_id: get(bankFrom, "bank_id") as any,
@ -169,7 +193,6 @@ export async function MidsuitPayment(req: Request, res: Response) {
partnerReferenceNo: partnerReferenceNo, partnerReferenceNo: partnerReferenceNo,
amount: get(data, "amount"), amount: get(data, "amount"),
description: `Payment for ${get(data, "documentno")}`, description: `Payment for ${get(data, "documentno")}`,
is_pay: false,
status: "DRAFT", status: "DRAFT",
beneficiaryAccountName: get(data, "beneficiaryAccountName"), beneficiaryAccountName: get(data, "beneficiaryAccountName"),
beneficiaryAccountNo: get(data, "beneficiaryAccountNo"), beneficiaryAccountNo: get(data, "beneficiaryAccountNo"),
@ -183,6 +206,16 @@ export async function MidsuitPayment(req: Request, res: Response) {
: "Inhouse", : "Inhouse",
}, },
}); });
await db.transactions_lines.create({
data: {
transaction_id: transaction.id,
documentno: get(data, "documentno"),
amount: get(data, "amount"),
description: `Payment for ${get(data, "documentno")}`,
tenant_id: user.tenant_id,
line_no: 1,
},
});
if (isRTKGS) { if (isRTKGS) {
// method RTGS // method RTGS
const result = await callGate({ const result = await callGate({

View File

@ -71,7 +71,6 @@ export default async function ({
bank_id: user.bank_id, bank_id: user.bank_id,
amount: formatMoney(grandtotal._sum.grandtotal, true) || 0, amount: formatMoney(grandtotal._sum.grandtotal, true) || 0,
description: `Payment for Virtual Account ${invoiceId}`, description: `Payment for Virtual Account ${invoiceId}`,
is_pay: false,
status: "DRAFT", status: "DRAFT",
c_bpartner_id: get(c_bpartner, "c_bpartner_id"), c_bpartner_id: get(c_bpartner, "c_bpartner_id"),
inquiryRequestId: get(data, "inquiryRequestId"), inquiryRequestId: get(data, "inquiryRequestId"),

View File

@ -44,7 +44,6 @@ export default async function ({
bank_id: user.bank_id, bank_id: user.bank_id,
amount: invoice.amount as any, amount: invoice.amount as any,
description: `Payment for Virtual Account ${invoice.inquiryRequestId}`, description: `Payment for Virtual Account ${invoice.inquiryRequestId}`,
is_pay: false,
status: "DRAFT", status: "DRAFT",
c_bpartner_id: get(invoice, "c_bpartner_id"), c_bpartner_id: get(invoice, "c_bpartner_id"),
paymentRequestId: get(data, "paymentRequestId"), paymentRequestId: get(data, "paymentRequestId"),
@ -74,7 +73,6 @@ export default async function ({
amount: lo.get(item, "grandtotal", 0), amount: lo.get(item, "grandtotal", 0),
c_invoice_id: get(item, "c_invoice_id"), c_invoice_id: get(item, "c_invoice_id"),
db_id: lo.get(user, "database.db_id"), db_id: lo.get(user, "database.db_id"),
bank_id: get(user, "bank_id"),
tenant_id: get(user, "tenant_id"), tenant_id: get(user, "tenant_id"),
}, },
}) })