mirror of
https://github.com/spliit-app/spliit.git
synced 2026-03-02 11:26:11 +01:00
Use decimal.js to validate uneven amounts
All checks were successful
CI / checks (push) Successful in 56s
All checks were successful
CI / checks (push) Successful in 56s
This commit is contained in:
@@ -1,4 +1,6 @@
|
|||||||
import { RecurrenceRule, SplitMode } from '@prisma/client'
|
import { RecurrenceRule, SplitMode } from '@prisma/client'
|
||||||
|
import Decimal from 'decimal.js'
|
||||||
|
|
||||||
import * as z from 'zod'
|
import * as z from 'zod'
|
||||||
|
|
||||||
export const groupFormSchema = z
|
export const groupFormSchema = z
|
||||||
@@ -148,14 +150,14 @@ export const expenseFormSchema = z
|
|||||||
break // noop
|
break // noop
|
||||||
case 'BY_AMOUNT': {
|
case 'BY_AMOUNT': {
|
||||||
const sum = expense.paidFor.reduce(
|
const sum = expense.paidFor.reduce(
|
||||||
(sum, { shares }) => sum + Number(shares),
|
(sum, { shares }) => new Decimal(shares).add(sum),
|
||||||
0,
|
new Decimal(0),
|
||||||
)
|
)
|
||||||
if (sum !== expense.amount) {
|
if (!sum.equals(new Decimal(expense.amount))) {
|
||||||
const detail =
|
// const detail =
|
||||||
sum < expense.amount
|
// sum < expense.amount
|
||||||
? `${((expense.amount - sum) / 100).toFixed(2)} missing`
|
// ? `${((expense.amount - sum) / 100).toFixed(2)} missing`
|
||||||
: `${((sum - expense.amount) / 100).toFixed(2)} surplus`
|
// : `${((sum - expense.amount) / 100).toFixed(2)} surplus`
|
||||||
ctx.addIssue({
|
ctx.addIssue({
|
||||||
code: z.ZodIssueCode.custom,
|
code: z.ZodIssueCode.custom,
|
||||||
message: 'amountSum',
|
message: 'amountSum',
|
||||||
|
|||||||
Reference in New Issue
Block a user