47 lines
1.6 KiB
TypeScript
47 lines
1.6 KiB
TypeScript
import type { LocalDelivery } from './db';
|
|
|
|
export function toDateKey(date: Date): string {
|
|
const year = date.getFullYear();
|
|
const month = String(date.getMonth() + 1).padStart(2, '0');
|
|
const day = String(date.getDate()).padStart(2, '0');
|
|
return `${year}-${month}-${day}`;
|
|
}
|
|
|
|
export function dateFromKey(key: string): Date {
|
|
const [year, month, day] = key.split('-').map(Number);
|
|
return new Date(year!, month! - 1, day!, 12);
|
|
}
|
|
|
|
export function deliveryDateKey(delivery: Pick<LocalDelivery, 'scheduledDate' | 'createdAt'>): string {
|
|
return delivery.scheduledDate ?? delivery.createdAt.slice(0, 10);
|
|
}
|
|
|
|
export function addDays(date: Date, days: number): Date {
|
|
const next = new Date(date);
|
|
next.setDate(next.getDate() + days);
|
|
return next;
|
|
}
|
|
|
|
export function weekStart(date: Date): Date {
|
|
const start = new Date(date.getFullYear(), date.getMonth(), date.getDate(), 12);
|
|
start.setDate(start.getDate() - start.getDay());
|
|
return start;
|
|
}
|
|
|
|
export function weekDates(anchor: Date): Date[] {
|
|
const start = weekStart(anchor);
|
|
return Array.from({ length: 7 }, (_, index) => addDays(start, index));
|
|
}
|
|
|
|
export function activeDeliveries(deliveries: LocalDelivery[]): LocalDelivery[] {
|
|
return deliveries.filter(delivery => !delivery.deletedAt && delivery.status !== 'cancelled');
|
|
}
|
|
|
|
export function deliveriesForDate(deliveries: LocalDelivery[], key: string): LocalDelivery[] {
|
|
return deliveries.filter(delivery => !delivery.deletedAt && deliveryDateKey(delivery) === key);
|
|
}
|
|
|
|
export function valueOf(deliveries: LocalDelivery[]): number {
|
|
return activeDeliveries(deliveries).reduce((sum, delivery) => sum + delivery.totalPriceAgorot, 0);
|
|
}
|