Skipped missing expense cases

X-Lovable-Edit-ID: edt-ad2fb631-7101-45e2-b87d-4ecdd5040dbe
Co-authored-by: renee-png <262607627+renee-png@users.noreply.github.com>
This commit is contained in:
gpt-engineer-app[bot]
2026-04-19 01:04:35 +00:00
co-authored by renee-png
+13 -2
View File
@@ -427,6 +427,7 @@ const IMPORTERS: ImporterConfig[] = [
aliases: {
id: "external_id", expenseid: "external_id", externalid: "external_id",
caseid: "_caseext", matterid: "_caseext", casenumber: "_casenum",
casename: "_casename", casetitle: "_casename", matter: "_casename", mattername: "_casename",
description: "description", notes: "description",
amount: "amount", cost: "amount",
billable: "billable",
@@ -436,8 +437,12 @@ const IMPORTERS: ImporterConfig[] = [
boolCols: ["billable"],
dateCols: ["expense_date"],
transform: (r, ctx) => {
r.case_id = (r._caseext && ctx.caseByExt.get(String(r._caseext))) || (r._casenum && ctx.caseByNumber.get(String(r._casenum))) || null;
delete r._caseext; delete r._casenum;
r.case_id =
(r._caseext && ctx.caseByExt.get(String(r._caseext))) ||
(r._casenum && ctx.caseByNumber.get(String(r._casenum))) ||
(r._casename && ctx.caseByTitle.get(String(r._casename).toLowerCase().trim())) ||
null;
delete r._caseext; delete r._casenum; delete r._casename;
if (!r.case_id || r.amount == null) return null;
r.user_id = ctx.userId;
return r;
@@ -705,6 +710,12 @@ function ImportPage() {
bumpSkip("missing or invalid hours");
} else if (cfg.table === "time_entries" && !row.description && !row._activity) {
bumpSkip("missing description/activity");
} else if (cfg.table === "expenses" && !row.case_id && !row._caseext && !row._casenum && !row._casename) {
bumpSkip("missing case reference");
} else if (cfg.table === "expenses" && (row._caseext || row._casenum || row._casename) && !row.case_id) {
bumpSkip("case not found (import cases first or match case title/number)");
} else if (cfg.table === "expenses" && row.amount == null) {
bumpSkip("missing or invalid amount");
} else {
bumpSkip("rejected by transform");
}