Presupuestador_web/client/src/lib/calc.ts
2024-07-16 20:18:17 +02:00

52 lines
1.3 KiB
TypeScript

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,
};
};