Make scheduling and dates timezone-safe
This commit is contained in:
@@ -1,3 +1,5 @@
|
||||
import { formatCalendarDate } from "@beenvoice/domain/time-zone";
|
||||
|
||||
export function formatCurrency(amount: number, currency = "USD") {
|
||||
return new Intl.NumberFormat("en-US", {
|
||||
style: "currency",
|
||||
@@ -7,7 +9,7 @@ export function formatCurrency(amount: number, currency = "USD") {
|
||||
}
|
||||
|
||||
export function formatDate(date: Date | string) {
|
||||
return new Date(date).toLocaleDateString("en-US", {
|
||||
return formatCalendarDate(date, {
|
||||
month: "short",
|
||||
day: "numeric",
|
||||
year: "numeric",
|
||||
@@ -15,7 +17,7 @@ export function formatDate(date: Date | string) {
|
||||
}
|
||||
|
||||
export function formatShortDate(date: Date | string) {
|
||||
return new Date(date).toLocaleDateString("en-US", {
|
||||
return formatCalendarDate(date, {
|
||||
month: "short",
|
||||
day: "numeric",
|
||||
});
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
import { addCalendarDays } from "@beenvoice/domain/time-zone";
|
||||
|
||||
/** Matches web invoice-form default numbering. */
|
||||
export function generateInvoiceNumber(now = new Date()): string {
|
||||
const date = [
|
||||
@@ -10,7 +12,5 @@ export function generateInvoiceNumber(now = new Date()): string {
|
||||
}
|
||||
|
||||
export function defaultDueDate(issueDate: Date): Date {
|
||||
const due = new Date(issueDate);
|
||||
due.setDate(due.getDate() + 30);
|
||||
return due;
|
||||
return addCalendarDays(issueDate, 30);
|
||||
}
|
||||
|
||||
@@ -6,11 +6,16 @@ export type InvoiceStatus = EffectiveInvoiceStatus;
|
||||
export function getInvoiceStatus(invoice: {
|
||||
status: string;
|
||||
dueDate: Date | string;
|
||||
createdBy?: { timeZone: string } | null;
|
||||
}): InvoiceStatus {
|
||||
if (invoice.status === "paid" || invoice.status === "draft") {
|
||||
return invoice.status;
|
||||
}
|
||||
return getEffectiveInvoiceStatus("sent", invoice.dueDate);
|
||||
return getEffectiveInvoiceStatus(
|
||||
"sent",
|
||||
invoice.dueDate,
|
||||
invoice.createdBy?.timeZone ?? "America/New_York",
|
||||
);
|
||||
}
|
||||
|
||||
export const statusLabels: Record<InvoiceStatus, string> = {
|
||||
|
||||
Reference in New Issue
Block a user