Files
cfw-autumn/shared/utils/cusEntUtils/balanceUtils/grantedBalanceUtils/cusEntsToAllowance.ts
amianthus b0920f5eda feat: 🎸 boom
2026-01-06 12:38:36 +00:00

57 lines
1.3 KiB
TypeScript

import { Decimal } from "decimal.js";
import type { FullCusEntWithFullCusProduct } from "../../../../models/cusProductModels/cusEntModels/cusEntWithProduct";
import { sumValues } from "../../../utils";
import { getCusEntBalance } from "../../balanceUtils";
import { getRolloverFields } from "../../getRolloverFields";
// NEW CUS ENT UTILS
export const cusEntsToAllowance = ({
cusEnts,
entityId,
withRollovers = false,
}: {
cusEnts: FullCusEntWithFullCusProduct[];
entityId?: string;
withRollovers?: boolean;
}) => {
const getAllowance = ({
cusEnt,
entityId,
withRollovers = false,
}: {
cusEnt: FullCusEntWithFullCusProduct;
entityId?: string;
withRollovers?: boolean;
}) => {
const rollover = getRolloverFields({
cusEnt,
entityId,
});
const { count: entityCount } = getCusEntBalance({
cusEnt,
entityId,
});
const grantedBalance = cusEnt.entitlement.allowance || 0;
const total = new Decimal(grantedBalance)
.mul(cusEnt.customer_product?.quantity ?? 1)
.mul(entityCount)
.toNumber();
if (withRollovers && rollover) {
return new Decimal(total)
.add(rollover.balance)
.add(rollover.usage)
.toNumber();
}
return total;
};
return sumValues(
cusEnts.map((cusEnt) => getAllowance({ cusEnt, entityId, withRollovers })),
);
};