wip
This commit is contained in:
@@ -2,7 +2,7 @@ import { Decimal } from "decimal.js";
|
||||
import type { FullCusEntWithFullCusProduct } from "../../../models/cusProductModels/cusEntModels/cusEntWithProduct";
|
||||
import { isEntityScopedCusEnt } from "../classifyCusEntUtils";
|
||||
|
||||
export const cusEntToTotalOverage = ({
|
||||
export const cusEntToInvoiceOverage = ({
|
||||
cusEnt,
|
||||
}: {
|
||||
cusEnt: FullCusEntWithFullCusProduct;
|
||||
@@ -0,0 +1,35 @@
|
||||
import { Decimal } from "decimal.js";
|
||||
import type { FullCusEntWithFullCusProduct } from "../../../models/cusProductModels/cusEntModels/cusEntWithProduct";
|
||||
import { cusEntToStartingBalance } from "../balanceUtils/cusEntToStartingBalance";
|
||||
import { isEntityScopedCusEnt } from "../classifyCusEntUtils";
|
||||
import { cusEntToInvoiceOverage } from "./cusEntToInvoiceOverage";
|
||||
|
||||
export const cusEntToInvoiceUsage = ({
|
||||
cusEnt,
|
||||
}: {
|
||||
cusEnt: FullCusEntWithFullCusProduct;
|
||||
}) => {
|
||||
const startingBalance = cusEntToStartingBalance({ cusEnt });
|
||||
const invoiceOverage = cusEntToInvoiceOverage({ cusEnt });
|
||||
|
||||
// 1. If invoice overage > 0:
|
||||
if (invoiceOverage > 0) {
|
||||
return new Decimal(startingBalance).add(invoiceOverage).toNumber();
|
||||
}
|
||||
|
||||
// 1. If entity scoped
|
||||
if (isEntityScopedCusEnt({ cusEnt })) {
|
||||
let maxUsage = new Decimal(0);
|
||||
for (const [_, entity] of Object.entries(cusEnt.entities || {})) {
|
||||
const usage = new Decimal(startingBalance).sub(entity.balance);
|
||||
|
||||
maxUsage = Decimal.max(maxUsage, usage);
|
||||
}
|
||||
|
||||
return maxUsage.toNumber();
|
||||
}
|
||||
|
||||
// 2. If not entity scoped
|
||||
const usage = new Decimal(startingBalance).sub(cusEnt.balance || 0);
|
||||
return usage.toNumber();
|
||||
};
|
||||
14
shared/utils/cusEntUtils/overageUtils/cusEntToOptions.ts
Normal file
14
shared/utils/cusEntUtils/overageUtils/cusEntToOptions.ts
Normal file
@@ -0,0 +1,14 @@
|
||||
import type { FullCusEntWithFullCusProduct } from "../../../models/cusProductModels/cusEntModels/cusEntWithProduct";
|
||||
import { entToOptions } from "../../productUtils/convertUtils";
|
||||
|
||||
export const cusEntToOptions = ({
|
||||
cusEnt,
|
||||
}: {
|
||||
cusEnt: FullCusEntWithFullCusProduct;
|
||||
}) => {
|
||||
const ent = cusEnt.entitlement;
|
||||
return entToOptions({
|
||||
ent,
|
||||
options: cusEnt.customer_product.options,
|
||||
});
|
||||
};
|
||||
Reference in New Issue
Block a user