import { formatISO, parseISO, startOfWeek } from "date-fns"; function toDate(val: any) { if (val instanceof Date) return val; if (typeof val === "string") return parseISO(val.replace(" ", "T")); return new Date(val); } export const materialPurchases = async (data: any) => { /** @type {Record>} */ const grouped: any = {}; for (const r of data) { const mat = String(r.MaterialHumanReadableId); const d = toDate(r.CalDate); const week = formatISO(startOfWeek(d, { weekStartsOn: 1 }), { representation: "date", }); grouped[mat] ??= {}; grouped[mat][week] ??= 0; grouped[mat][week] += Number(r.DailyMaterialDemand) || 0; } const result = []; for (const [mat, weeks] of Object.entries(grouped)) { // @ts-ignore for (const [week, total] of Object.entries(weeks)) { result.push({ MaterialHumanReadableId: mat, WeekStart: week, WeeklyDemand: Number(total).toFixed(2), }); } } return result; };