update order price calculation

This commit is contained in:
ItsMalma
2026-01-08 21:15:47 +07:00
parent d95811ad83
commit d5a153702d
2 changed files with 40 additions and 30 deletions

View File

@@ -35,32 +35,42 @@ export class MidtransPaymentService extends AbstractPaymentService {
if (order.type === OrderType.bookingSeat) {
price += BOOKING_SEAT_PRICE * quantity;
} else if (order.type === OrderType.downPayment) {
price +=
Math.ceil(
((order.quadDownPaymentPercentage / 100) *
(order.package.quadPrice - order.package.quadDiscount)) /
100_000,
) *
100_000 +
Math.ceil(
((order.tripleDownPaymentPercentage / 100) *
(order.package.triplePrice - order.package.tripleDiscount)) /
100_000,
) *
100_000 +
Math.ceil(
((order.doubleDownPaymentPercentage / 100) *
(order.package.doublePrice - order.package.doubleDiscount)) /
100_000,
) *
100_000 +
Math.ceil(
((order.infantDownPaymentPercentage / 100) *
((order.package.infantPrice ?? 0) -
(order.package.infantDiscount ?? 0))) /
100_000,
) *
100_000;
if (order.quadDownPaymentPercentage > 0) {
price +=
Math.ceil(
((order.quadDownPaymentPercentage / 100) *
(order.package.quadPrice - order.package.quadDiscount)) /
100_000,
) * 100_000;
}
if (order.tripleDownPaymentPercentage > 0) {
price +=
Math.ceil(
((order.tripleDownPaymentPercentage / 100) *
(order.package.triplePrice - order.package.tripleDiscount)) /
100_000,
) * 100_000;
}
if (order.doubleDownPaymentPercentage > 0) {
price +=
Math.ceil(
((order.doubleDownPaymentPercentage / 100) *
(order.package.doublePrice - order.package.doubleDiscount)) /
100_000,
) * 100_000;
}
if (
order.infantDownPaymentPercentage > 0 &&
order.package.infantPrice !== null &&
order.package.infantDiscount !== null
) {
price +=
Math.ceil(
((order.infantDownPaymentPercentage / 100) *
(order.package.infantPrice - order.package.infantDiscount)) /
100_000,
) * 100_000;
}
}
if (order.kit === Kit.minimal) {
price += MINIMAL_KIT_PRICE;

View File

@@ -16,22 +16,22 @@ export const orderRequestSchema = z.object({
quad_down_payment_percentage: z
.number("Must be number.")
.int("Must be integer")
.min(25, "Min 25.")
.min(0, "Min 0.")
.max(100, "Max 100."),
triple_down_payment_percentage: z
.number("Must be number.")
.int("Must be integer")
.min(25, "Min 25.")
.min(0, "Min 0.")
.max(100, "Max 100."),
double_down_payment_percentage: z
.number("Must be number.")
.int("Must be integer")
.min(25, "Min 25.")
.min(0, "Min 0.")
.max(100, "Max 100."),
infant_down_payment_percentage: z
.number("Must be number.")
.int("Must be integer")
.min(25, "Min 25.")
.min(0, "Min 0.")
.max(100, "Max 100."),
kit: z.enum(Kit, "Must be either 'minimal', 'without_suitcase', or 'full'."),
vaccine: z.number("Must be number.").int("Must be integer.").min(0, "Min 0."),