From f898f071dfae6fe77eab5adbe6c3987ce7389acb Mon Sep 17 00:00:00 2001 From: Pavlo Tsimura Date: Wed, 28 Feb 2024 22:49:49 +0100 Subject: [PATCH] Add more formulas --- src/CONST.ts | 1 + src/libs/ReportUtils.ts | 16 ++++++++++++++-- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/src/CONST.ts b/src/CONST.ts index 8abd4c087b16..cf0b54bceb42 100755 --- a/src/CONST.ts +++ b/src/CONST.ts @@ -178,6 +178,7 @@ const CONST = { DATE: { SQL_DATE_TIME: 'YYYY-MM-DD HH:mm:ss', FNS_FORMAT_STRING: 'yyyy-MM-dd', + FNS_DATE_TIME_FORMAT_STRING: 'yyyy-MM-dd HH:mm:ss', LOCAL_TIME_FORMAT: 'h:mm a', YEAR_MONTH_FORMAT: 'yyyyMM', MONTH_FORMAT: 'MMMM', diff --git a/src/libs/ReportUtils.ts b/src/libs/ReportUtils.ts index 91b5ceaf872a..dc83d3ee876f 100644 --- a/src/libs/ReportUtils.ts +++ b/src/libs/ReportUtils.ts @@ -2892,21 +2892,33 @@ function buildOptimisticIOUReport(payeeAccountID: number, payerAccountID: number }; } +function getHumanReadableStatus(statusNum: number): string { + const status = Object.keys(CONST.REPORT.STATUS_NUM).find((key) => CONST.REPORT.STATUS_NUM[key as keyof typeof CONST.REPORT.STATUS_NUM] === statusNum); + return status ? `${status.charAt(0)}${status.slice(1).toLowerCase()}` : ''; +} + /** * Populates the report field formula with the values from the report and policy. - * Currently, is supports only optimistic expense reports. + * Currently, this only supports optimistic expense reports. * Each formula field is either replaced with a value, or removed. * If after all replacements the formula is empty, the original formula is returned. + * See {@link https://help.expensify.com/articles/expensify-classic/insights-and-custom-reporting/Custom-Templates} */ function populateOptimisticReportFormula(formula: string, report: OptimisticExpenseReport, policy: Policy | EmptyObject): string { + const createdDate = report.lastVisibleActionCreated ? new Date(report.lastVisibleActionCreated) : undefined; const result = formula .replaceAll('{report:id}', report.reportID) // We don't translate because the server response is always in English .replaceAll('{report:type}', 'Expense Report') - .replaceAll('{report:startdate}', report.lastVisibleActionCreated ? format(new Date(report.lastVisibleActionCreated), CONST.DATE.FNS_FORMAT_STRING) : '') + .replaceAll('{report:startdate}', createdDate ? format(createdDate, CONST.DATE.FNS_FORMAT_STRING) : '') .replaceAll('{report:total}', report.total?.toString() ?? '') .replaceAll('{report:currency}', report.currency ?? '') .replaceAll('{report:policyname}', policy.name ?? '') + .replaceAll('{report:created}', createdDate ? format(createdDate, CONST.DATE.FNS_DATE_TIME_FORMAT_STRING) : '') + .replaceAll('{report:created:yyyy-MM-dd}', createdDate ? format(createdDate, CONST.DATE.FNS_FORMAT_STRING) : '') + .replaceAll('{report:status}', report.statusNum !== undefined ? getHumanReadableStatus(report.statusNum) : '') + .replaceAll('{user:email}', currentUserEmail ?? '') + .replaceAll('{user:email|frontPart}', currentUserEmail ? currentUserEmail.split('@')[0] : '') .replaceAll(/\{report:(.+)}/g, ''); return result.trim().length ? result : formula;