Income and expense forms now use the same receivable-minus-payable figure beside the party. Co-authored-by: Cursor <cursoragent@cursor.com>
14 lines
696 B
TypeScript
14 lines
696 B
TypeScript
export function toman(value: string | number | null | undefined) {
|
||
const n = Number(value ?? 0);
|
||
if (!Number.isFinite(n)) return '۰';
|
||
return `${new Intl.NumberFormat('fa-IR').format(Math.round(n))} تومان`;
|
||
}
|
||
|
||
/** ماندهٔ دریافتنی منهای ماندهٔ پرداختنی: بد قرمز، بس سبز، صفر خاکستری. */
|
||
export function partyNetPosition(receivable: number, payable: number) {
|
||
const net = receivable - payable;
|
||
if (net > 0) return { text: `بد ${toman(net)}`, type: 'danger' as const };
|
||
if (net < 0) return { text: `بس ${toman(-net)}`, type: 'success' as const };
|
||
return { text: `مانده ${toman(0)}`, type: 'secondary' as const };
|
||
}
|