Presupuestador_web/client/src/lib/calc.ts

52 lines
1.3 KiB
TypeScript
Raw Normal View History

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