import { MoneyValue, Percentage, Quantity } from "@shared/contexts"; import { IMoney, IPercentage, IQuantity } from "./types"; export const calculateItemTotals = (item: { quantity?: IQuantity; unit_price?: IMoney; discount?: IPercentage; }): { quantity: Quantity; unitPrice: MoneyValue; subtotalPrice: MoneyValue; discount: Percentage; totalPrice: MoneyValue; } | null => { console.log(item); const { quantity: quantity_dto, unit_price: unit_price_dto, discount: discount_dto } = item; if (quantity_dto === "" || unit_price_dto === "") { return null; } const quantityOrError = Quantity.create(quantity_dto); if (quantityOrError.isFailure) { throw quantityOrError.error; } const quantity = quantityOrError.object; const unitPriceOrError = MoneyValue.create(unit_price_dto); if (unitPriceOrError.isFailure) { throw unitPriceOrError.error; } const unitPrice = unitPriceOrError.object; const discountOrError = Percentage.create(discount_dto); if (discountOrError.isFailure) { throw discountOrError.error; } const discount = discountOrError.object; const subtotalPrice = unitPrice.multiply(quantity.toNumber()); const totalPrice = subtotalPrice.subtract(subtotalPrice.percentage(discount.toNumber())); return { quantity, unitPrice, subtotalPrice, discount, totalPrice, }; };