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) { if (order.type === OrderType.bookingSeat) {
price += BOOKING_SEAT_PRICE * quantity; price += BOOKING_SEAT_PRICE * quantity;
} else if (order.type === OrderType.downPayment) { } else if (order.type === OrderType.downPayment) {
price += if (order.quadDownPaymentPercentage > 0) {
Math.ceil( price +=
((order.quadDownPaymentPercentage / 100) * Math.ceil(
(order.package.quadPrice - order.package.quadDiscount)) / ((order.quadDownPaymentPercentage / 100) *
100_000, (order.package.quadPrice - order.package.quadDiscount)) /
) * 100_000,
100_000 + ) * 100_000;
Math.ceil( }
((order.tripleDownPaymentPercentage / 100) * if (order.tripleDownPaymentPercentage > 0) {
(order.package.triplePrice - order.package.tripleDiscount)) / price +=
100_000, Math.ceil(
) * ((order.tripleDownPaymentPercentage / 100) *
100_000 + (order.package.triplePrice - order.package.tripleDiscount)) /
Math.ceil( 100_000,
((order.doubleDownPaymentPercentage / 100) * ) * 100_000;
(order.package.doublePrice - order.package.doubleDiscount)) / }
100_000, if (order.doubleDownPaymentPercentage > 0) {
) * price +=
100_000 + Math.ceil(
Math.ceil( ((order.doubleDownPaymentPercentage / 100) *
((order.infantDownPaymentPercentage / 100) * (order.package.doublePrice - order.package.doubleDiscount)) /
((order.package.infantPrice ?? 0) - 100_000,
(order.package.infantDiscount ?? 0))) / ) * 100_000;
100_000, }
) * if (
100_000; 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) { if (order.kit === Kit.minimal) {
price += MINIMAL_KIT_PRICE; price += MINIMAL_KIT_PRICE;

View File

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