lomavuokraus/lib/billing.ts
Tero Halla-aho 0bb709d9c5
Some checks failed
CI / checks (push) Has been cancelled
chore: fix audit alerts and formatting
2026-02-04 12:43:03 +02:00

56 lines
1.6 KiB
TypeScript

import type { Listing, User } from "@prisma/client";
export type BillingConfig = {
accountName: string | null;
iban: string | null;
includeVatLine: boolean;
};
type BillingUser = Pick<
User,
"billingAccountName" | "billingIban" | "billingIncludeVatLine"
>;
type BillingListing = Pick<
Listing,
"billingAccountName" | "billingIban" | "billingIncludeVatLine"
>;
export function normalizeOptionalString(
input: unknown,
): string | null | undefined {
if (input === undefined) return undefined;
if (input === null) return null;
const value = String(input).trim();
return value ? value : null;
}
export function normalizeIban(input: unknown): string | null | undefined {
if (input === undefined) return undefined;
if (input === null) return null;
const value = String(input).replace(/\s+/g, "").toUpperCase();
return value ? value : null;
}
export function normalizeNullableBoolean(
input: unknown,
): boolean | null | undefined {
if (input === undefined) return undefined;
if (input === null) return null;
return Boolean(input);
}
export function resolveBillingDetails(
user: BillingUser,
listing?: BillingListing | null,
): BillingConfig {
const accountName =
listing?.billingAccountName ?? user.billingAccountName ?? null;
const iban = listing?.billingIban ?? user.billingIban ?? null;
const includeVatLine =
listing?.billingIncludeVatLine !== null &&
listing?.billingIncludeVatLine !== undefined
? Boolean(listing.billingIncludeVatLine)
: Boolean(user.billingIncludeVatLine);
return { accountName, iban, includeVatLine };
}