refactor: query into relation instead
All checks were successful
Spell Check / Spell Check with Typos (push) Successful in 6s

This commit is contained in:
Methapon2001 2025-03-11 10:47:06 +07:00
parent ae4488b76a
commit 422183b1c1

View file

@ -18,6 +18,7 @@ import { precisionRound } from "../utils/arithmetic";
import dayjs from "dayjs"; import dayjs from "dayjs";
import { json2csv } from "json-2-csv"; import { json2csv } from "json-2-csv";
import { isSystem } from "../utils/keycloak"; import { isSystem } from "../utils/keycloak";
import { jsonObjectFrom } from "kysely/helpers/postgres";
const permissionCondCompany = createPermCondition((_) => true); const permissionCondCompany = createPermCondition((_) => true);
const permissionQueryCondCompany = createQueryPermissionCondition((_) => true); const permissionQueryCondCompany = createQueryPermissionCondition((_) => true);
@ -651,19 +652,21 @@ export class StatsController extends Controller {
.leftJoin("Payment", "Invoice.id", "Payment.invoiceId") .leftJoin("Payment", "Invoice.id", "Payment.invoiceId")
.leftJoin("CustomerBranch", "CustomerBranch.id", "Quotation.customerBranchId") .leftJoin("CustomerBranch", "CustomerBranch.id", "Quotation.customerBranchId")
.leftJoin("Customer", "Customer.id", "CustomerBranch.customerId") .leftJoin("Customer", "Customer.id", "CustomerBranch.customerId")
.select([ .select((eb) => [
"CustomerBranch.id as customerBranchId", jsonObjectFrom(
"CustomerBranch.code as customerBranchCode", eb
"CustomerBranch.registerName as customerBranchRegisterName", .selectFrom("CustomerBranch")
"CustomerBranch.registerNameEN as customerBranchRegisterNameEN", .select((eb) => [
"CustomerBranch.firstName as customerBranchFirstName", jsonObjectFrom(
"CustomerBranch.firstNameEN as customerBranchFirstNameEN", eb
"CustomerBranch.lastName as customerBranchLastName", .selectFrom("Customer")
"CustomerBranch.lastNameEN as customerBranchLastNameEN", .selectAll("Customer")
"Customer.customerType", .whereRef("Customer.id", "=", "CustomerBranch.customerId"),
"Quotation.id as quotationId", ).as("customer"),
"Quotation.code as quotationCode", ])
"Quotation.finalPrice as quotationValue", .selectAll("CustomerBranch")
.whereRef("CustomerBranch.id", "=", "Quotation.customerBranchId"),
).as("customerBranch"),
]) ])
.select(["Payment.paymentStatus"]) .select(["Payment.paymentStatus"])
.selectAll(["Invoice"]) .selectAll(["Invoice"])
@ -674,54 +677,31 @@ export class StatsController extends Controller {
} }
const ret = await query.execute(); const ret = await query.execute();
const arr = ret.map((item) => {
const data: Record<string, any> = {};
for (const [key, val] of Object.entries(item)) {
if (key.startsWith("customerBranch")) {
if (!data["customerBranch"]) data["customerBranch"] = {};
data["customerBranch"][key.slice(14).slice(0, 1).toLowerCase() + key.slice(14).slice(1)] =
val;
} else if (key.startsWith("customerType")) {
data["customerBranch"]["customer"] = { customerType: val };
} else {
data[key as keyof typeof data] = val;
}
}
return data as Invoice & {
quotationId: string;
quotationCode: string;
quotationValue: number;
paymentStatus: PaymentStatus;
customerBranch: CustomerBranch & { customer: { customerType: CustomerType } };
};
});
return arr return ret
.reduce< .reduce<
{ {
paid: number; paid: number;
unpaid: number; unpaid: number;
customerBranch: CustomerBranch & { customer: { customerType: CustomerType } }; customerBranch: CustomerBranch & { customer: Customer };
}[] }[]
>((acc, item) => { >((acc, item) => {
const exists = acc.find((v) => v.customerBranch.id === item.customerBranch.id); const exists = acc.find((v) => v.customerBranch.id === item.customerBranch!.id);
if (!item.amount) return acc; if (!item.amount) return acc;
if (!exists) { if (!exists) {
return acc.concat({ return acc.concat({
customerBranch: item.customerBranch, customerBranch: item.customerBranch as CustomerBranch & { customer: Customer },
paid: item.paymentStatus === "PaymentSuccess" ? item.amount : 0, paid: item.paymentStatus === "PaymentSuccess" ? item.amount : 0,
unpaid: item.paymentStatus !== "PaymentSuccess" ? item.amount : 0, unpaid: item.paymentStatus !== "PaymentSuccess" ? item.amount : 0,
}); });
} else {
exists[item.paymentStatus === "PaymentSuccess" ? "paid" : "unpaid"] += item.amount;
} }
exists[item.paymentStatus === "PaymentSuccess" ? "paid" : "unpaid"] += item.amount;
return acc; return acc;
}, []) }, [])
.map((v) => { .map((v) => ({ ...v, _quotation: undefined }));
return { ...v, _quotation: undefined };
});
} }
} }