From 462ddf88285b66de6698c26f850532a84c6ea49d Mon Sep 17 00:00:00 2001 From: "F. Daniel Nicolalde" Date: Tue, 17 Jun 2025 14:51:35 -0500 Subject: [PATCH 1/9] Changing labels to the columns to match WorkDay new names --- .../queries/ehr_billing/aliases.query.xml | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/wnprc_billing/resources/queries/ehr_billing/aliases.query.xml b/wnprc_billing/resources/queries/ehr_billing/aliases.query.xml index d3d47a4f0..d3d455f0a 100644 --- a/wnprc_billing/resources/queries/ehr_billing/aliases.query.xml +++ b/wnprc_billing/resources/queries/ehr_billing/aliases.query.xml @@ -7,7 +7,7 @@ DETAILED - Account Number + Grant false @@ -18,7 +18,7 @@ Y;N; - Project Number + Grant Grant Number @@ -83,9 +83,15 @@ $###,##0.00 - - - + + Fund + + + Ledger Account + + + Cost Center + From eafe92bbf11339c518b874d36e3ccf42a03e8ddc Mon Sep 17 00:00:00 2001 From: "F. Daniel Nicolalde" Date: Tue, 17 Jun 2025 14:52:01 -0500 Subject: [PATCH 2/9] Adding new column to the aliases table --- wnprc_billing/resources/queries/ehr_billing/aliases/.qview.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/wnprc_billing/resources/queries/ehr_billing/aliases/.qview.xml b/wnprc_billing/resources/queries/ehr_billing/aliases/.qview.xml index 9d28efb12..1c59bb4bd 100644 --- a/wnprc_billing/resources/queries/ehr_billing/aliases/.qview.xml +++ b/wnprc_billing/resources/queries/ehr_billing/aliases/.qview.xml @@ -27,6 +27,7 @@ + From fa33bab39f0b9444c56a0fb753bbcaf9f710fc88 Mon Sep 17 00:00:00 2001 From: "F. Daniel Nicolalde" Date: Fri, 11 Jul 2025 16:05:47 -0500 Subject: [PATCH 3/9] Adding new template for creating new accounts --- .../queries/ehr_billing/aliases.query.xml | 15 +++++++ .../queries/ehr_billing/aliasesTemplate.sql | 40 +++++++++++++++++++ 2 files changed, 55 insertions(+) create mode 100644 wnprc_billing/resources/queries/ehr_billing/aliasesTemplate.sql diff --git a/wnprc_billing/resources/queries/ehr_billing/aliases.query.xml b/wnprc_billing/resources/queries/ehr_billing/aliases.query.xml index d3d455f0a..cab48c802 100644 --- a/wnprc_billing/resources/queries/ehr_billing/aliases.query.xml +++ b/wnprc_billing/resources/queries/ehr_billing/aliases.query.xml @@ -3,10 +3,16 @@ + + diff --git a/wnprc_billing/resources/queries/ehr_billing/aliases/.qview.xml b/wnprc_billing/resources/queries/ehr_billing/aliases/.qview.xml index 1c59bb4bd..cdda8dff2 100644 --- a/wnprc_billing/resources/queries/ehr_billing/aliases/.qview.xml +++ b/wnprc_billing/resources/queries/ehr_billing/aliases/.qview.xml @@ -27,6 +27,7 @@ + From e0d6129d82ff430c3614b5bbe157b3420b0b3192 Mon Sep 17 00:00:00 2001 From: "F. Daniel Nicolalde" Date: Wed, 16 Jul 2025 09:18:02 -0400 Subject: [PATCH 5/9] expand workday export to include new columns for EIB --- .../ehr_billing/invoiceRuns/.qview.xml | 10 ++ .../workdayInvoiceItems.query.xml | 31 +++++ .../wnprc_billing/workdayInvoiceItems.sql | 47 ++++++++ .../workdayInvoiceItems/.qview.xml | 36 ++++++ .../WNPRC_BillingController.java | 114 ++++++++++++++++++ .../wnprc_billing/WNPRC_BillingSchema.java | 1 + .../WNPRC_InvoiceRunCustomizer.java | 44 +++++++ 7 files changed, 283 insertions(+) create mode 100644 wnprc_billing/resources/queries/wnprc_billing/workdayInvoiceItems.query.xml create mode 100644 wnprc_billing/resources/queries/wnprc_billing/workdayInvoiceItems.sql create mode 100644 wnprc_billing/resources/queries/wnprc_billing/workdayInvoiceItems/.qview.xml diff --git a/wnprc_billing/resources/queries/ehr_billing/invoiceRuns/.qview.xml b/wnprc_billing/resources/queries/ehr_billing/invoiceRuns/.qview.xml index 49fe8ffb6..dccdccd51 100644 --- a/wnprc_billing/resources/queries/ehr_billing/invoiceRuns/.qview.xml +++ b/wnprc_billing/resources/queries/ehr_billing/invoiceRuns/.qview.xml @@ -16,6 +16,16 @@ + + + + + + + + + + diff --git a/wnprc_billing/resources/queries/wnprc_billing/workdayInvoiceItems.query.xml b/wnprc_billing/resources/queries/wnprc_billing/workdayInvoiceItems.query.xml new file mode 100644 index 000000000..4d53c1ab9 --- /dev/null +++ b/wnprc_billing/resources/queries/wnprc_billing/workdayInvoiceItems.query.xml @@ -0,0 +1,31 @@ + + + +
+ CSV to Workday Preview + + + Cost Center + + + + Function + + + Grant + + + Ledge Account + + + Extended Amount + 0.00 + + + Catalog Item + + +
+
+ + \ No newline at end of file diff --git a/wnprc_billing/resources/queries/wnprc_billing/workdayInvoiceItems.sql b/wnprc_billing/resources/queries/wnprc_billing/workdayInvoiceItems.sql new file mode 100644 index 000000000..432c6fd82 --- /dev/null +++ b/wnprc_billing/resources/queries/wnprc_billing/workdayInvoiceItems.sql @@ -0,0 +1,47 @@ +SELECT + max(ii.rowid) AS spreadsheet_key, + 'UWMSN' as company, + 'ARMSN_AC2'as Internal_Service_Provider, + ii.invoiceId.runDate AS document_date, + ii.invoiceId.comment AS memo, + 'PG00011660' AS program, + 'GR000039734' AS project, + 'CC005442' AS costCenter, + 'FD0144' AS fund, + 'FN0400' AS function, + ii.invoiceId.rowId as runId, + '1' as row_id, + '1' as internal_service_delivery, + 'UWMSN' as Intercompany_Affiliate, + replace(a.uw_udds, '-', '') as Department, + a.uw_fund as Fund, + '???' as Workday_Program, + a.uw_account as Project, + '???' AS Workday_Project, + a.charge_grant_accounts_Id as Account, + sum(ii.totalcost) as Amount, + 'Primate Center ' || to_char(ii.invoiceId.billingPeriodStart,'MON') as Description, + '????' AS Workday_function, + to_char(ii.invoiceId.billingPeriodEnd, 'MMyy') || a.uw_account as Jnl_Ln_Ref, + to_char(ii.invoiceId.billingPeriodEnd, 'MMyy') as billingPeriodMMyy, + NULL as Class, + NULL as PurchRefNo, + NULL as VoucherNo, + NULL as InvoiceNo, + NULL as ActivityID +FROM + ehr_billing.invoicedItems ii + left join ehr_billing.aliases a + on ii.debitedAccount = a.alias + WHERE + lcase(a.type) like '%internal%' AND a.gencredits IS FALSE +GROUP BY + ii.invoiceId.rowId, + a.uw_udds, + a.uw_fund, + a.uw_account, + a.charge_grant_accounts_Id, + ii.invoiceId.runDate, + ii.invoiceId.comment, + ii.invoiceId.billingPeriodStart, + ii.invoiceId.billingPeriodEnd \ No newline at end of file diff --git a/wnprc_billing/resources/queries/wnprc_billing/workdayInvoiceItems/.qview.xml b/wnprc_billing/resources/queries/wnprc_billing/workdayInvoiceItems/.qview.xml new file mode 100644 index 000000000..1d875f451 --- /dev/null +++ b/wnprc_billing/resources/queries/wnprc_billing/workdayInvoiceItems/.qview.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/wnprc_billing/src/org/labkey/wnprc_billing/WNPRC_BillingController.java b/wnprc_billing/src/org/labkey/wnprc_billing/WNPRC_BillingController.java index c79a9c662..66a6e83e1 100644 --- a/wnprc_billing/src/org/labkey/wnprc_billing/WNPRC_BillingController.java +++ b/wnprc_billing/src/org/labkey/wnprc_billing/WNPRC_BillingController.java @@ -221,6 +221,7 @@ public void export(InvoiceRunForm invoiceRunForm, HttpServletResponse response, { String contentType = "text/plain"; JetCSV csv = getJetCsv(invoiceRunForm.getRunId()); + JetCSV csvWD = getWorkdayCsv(invoiceRunForm.getRunId()); response.setContentType(contentType); response.setHeader("Content-Disposition", "attachment; filename=\"" + csv.getFileName() + ".csv" + "\""); response.setContentLength(csv.getCsvData().getBytes(StringUtilsLabKey.DEFAULT_CHARSET).length); @@ -228,6 +229,21 @@ public void export(InvoiceRunForm invoiceRunForm, HttpServletResponse response, } } + @RequiresPermission(ReadPermission.class) + public class GetWorkdayInvoiceCSVAction extends ExportAction + { + @Override + public void export(InvoiceRunForm invoiceRunForm, HttpServletResponse response, BindException errors) throws Exception + { + String contentType = "text/plain"; + JetCSV csvWD = getWorkdayCsv(invoiceRunForm.getRunId()); + response.setContentType(contentType); + response.setHeader("Content-Disposition", "attachment; filename=\"" + csvWD.getFileName() + ".csv" + "\""); + response.setContentLength(csvWD.getCsvData().getBytes(StringUtilsLabKey.DEFAULT_CHARSET).length); + response.getOutputStream().write(csvWD.getCsvData().getBytes(StringUtilsLabKey.DEFAULT_CHARSET)); + } + } + private JetCSV getJetCsv(int runId) throws IOException { List invoiceItems = getJetItems(runId); @@ -299,6 +315,95 @@ private JetCSV getJetCsv(int runId) throws IOException return new JetCSV(fileName,writer.toString()); } + private JetCSV getWorkdayCsv(int runId) throws IOException + { + List invoiceItems = getWorkItems(runId); + if (invoiceItems.isEmpty()) + { + throw new NotFoundException("Unable to generate JET CSV. Invoiced Items not found for the selected invoice."); + } + + InvoiceRun invoiceRun = getInvoiceRunById(runId); + StringWriter writer = new StringWriter(); + + Map moduleProperties = ModuleLoader.getInstance().getModule(WNPRC_BillingModule.class).getModuleProperties(); + String jetSettingFromModuleProperty = moduleProperties.get(WNPRC_BillingModule.JetCsvSetting).getEffectiveValue(getContainer()); + String[] jetSettings = jetSettingFromModuleProperty.split(","); + + + CSVWriter csvWriter = new CSVWriter(writer,CSVWriter.DEFAULT_SEPARATOR,CSVWriter.NO_QUOTE_CHARACTER); + //csvWriter.writeNext(new String[]{"NSCT"}); + csvWriter.writeNext(new String[]{"Submit Internal Service Delivery - v42.1"}); + csvWriter.writeNext(new String[]{"Area", "All", "Internal Service Delivery Data", "Internal Service Delivery Line Data+"}); + csvWriter.writeNext(new String[]{"Restrictions", "Required", "Optional", "Required","Required","Required", + "Optional", "Optional", "Optional. May have multiples", "Optional. May have multiples", "Optional. May have multiples", "Optional. May have multiples", + "Optional. May have multiples", "Optional. May have multiples", "Optional. May have multiples", "Optional. May have multiples", "Required", "Required", + "Optional", "Optional", "Optional", "Optional", "Optional", "Optional", "Required", "Optional", "Optional", "Optional. May have multiples", + "Optional. May have multiples", "Optional. May have multiples", "Optional. May have multiples", "Optional. May have multiples", "Optional. May have multiples", + "Optional. May have multiples", "Optional. May have multiples", "Optional. May have multiples"}); + csvWriter.writeNext(new String[]{"Format", "Text", "Y/N", "Company_Reference_ID", "Internal_Service_Provider_ID", "YYYY-MM-DD", "YYYY-MM-DD", "Text", "Program_ID", + "Project_ID", "Gift_Reference_ID", "Cost_Center_Reference_ID", "Fund_ID", "Custom_Organization_Reference_ID", "Custom_Organization_Reference_ID", "Custom_Worktag_1_ID", + "Text", "Number", "Company_Reference_ID", "Catalog_Item_ID", "Revenue_Category_ID", "Number (22,2)", "UN_CEFACT_Common_Code_ID", "Number (26,6)", "Number (18,3)", + "YYYY-MM-DD", "Text", "Program_ID", "Project_ID", "Grant_ID", "Gift_Reference_ID", "Cost_Center_Reference_ID", "Fund_ID", "Custom_Organization_Reference_ID", + "Custom_Organization_Reference_ID", "Custom_Worktag_1_ID"}); + + String[] emptyLine = {""}; + csvWriter.writeNext(emptyLine); + //csvWriter.writeNext(new String[]{"Department","Fund","Program","Project","Activity ID","Account","Class", + // "Amount","Description","Jnl_Ln_Ref","Purch Ref No","Voucher No","Invoice No"}); + csvWriter.writeNext(new String[]{"Fields", "Spreadsheet Key*", "Submit*", "Company*", "Internal Service Provider*", "Document Date*", "Delivery Date", "Memo", + "Program", "Project", "Gift", "Cost Center", "Fund", "Function", "Activity", "Additional Worktags", "Row ID**", "Internal Service Delivery Line Number*", + "Intercompany Affiliate", "Catalog Item", "Revenue Category", "Quantity*", "Unit of Measure*", "Unit Cost*", "Extended Amount*", "Delivery Date", "Memo", + "Program", "Project", "Grant", "Gift", "Cost Center*", "Fund*", "Function*", "Activity", "Additional Worktags"}); + + double sum = 0.0; + for (JetInvoiceItem invoiceItem : invoiceItems) + { + csvWriter.writeNext(emptyLine); + csvWriter.writeNext(new String[]{ + invoiceItem.Department, //column 32 + invoiceItem.Fund, + invoiceItem.Program, + invoiceItem.Project, + invoiceItem.ActivityID, + String.valueOf(invoiceItem.Account != null ? invoiceItem.Account.intValue() : 0), + invoiceItem.Class, + String.valueOf(invoiceItem.Amount != null ? decimalFormat.format(invoiceItem.Amount.doubleValue()) : 0.00), + invoiceItem.Description, + (invoiceItem.billingPeriodMMyy + invoiceItem.Project), //Jnl_Ln_Ref + invoiceItem.PurchRefNo, + invoiceItem.VoucherNo, + invoiceItem.InvoiceNo + }); + sum += invoiceItem.Amount != null ? invoiceItem.Amount.doubleValue() : 0; + } + + csvWriter.writeNext(emptyLine); + //last row in JET CSV with a negative total + csvWriter.writeNext(new String[]{ + jetSettings[0], //Department + jetSettings[1], //Fund + jetSettings[2], //Program + jetSettings[3], //Project + null, //ActivityID + jetSettings[4], //Account, + null, //Class + String.valueOf(decimalFormat.format(sum * -1.0)), //Amount + invoiceItems.get(0).Description, //Description, which is same for all the rows + (invoiceItems.get(0).billingPeriodMMyy + jetSettings[3]), //Jnl_Ln_Ref. billingPeriodMMyy is same for all the rows + null, //PurchRefNo + null, //VoucherNo + null //InvoiceNo + }); + csvWriter.writeNext(emptyLine); + csvWriter.close(); + + SimpleDateFormat dateFormat = new SimpleDateFormat("MM-dd-yy"); + String fileName = "JET_" + dateFormat.format(invoiceRun.getBillingPeriodStart()) + "_" + + dateFormat.format(invoiceRun.getBillingPeriodEnd()); + return new JetCSV(fileName,writer.toString()); + } + private class JetCSV{ private final String _fileName; private final String _csvData; @@ -329,6 +434,15 @@ private List getJetItems(int runId) TableSelector tableSelector = new TableSelector(tableInfo, filter, null); return tableSelector.getArrayList(JetInvoiceItem.class); } + private List getWorkItems(int runId) + { + UserSchema wnprc_billing = QueryService.get().getUserSchema(getUser(), getContainer(), WNPRC_BillingSchema.NAME); + TableInfo tableInfo = wnprc_billing.getTable(WNPRC_BillingSchema.TABLE_WORKDAY_INVOICE_ITEMS); + + SimpleFilter filter = new SimpleFilter(FieldKey.fromParts("runId"), runId); + TableSelector tableSelector = new TableSelector(tableInfo, filter, null); + return tableSelector.getArrayList(JetInvoiceItem.class); } + public static class InvoiceRunForm { int _runId; diff --git a/wnprc_billing/src/org/labkey/wnprc_billing/WNPRC_BillingSchema.java b/wnprc_billing/src/org/labkey/wnprc_billing/WNPRC_BillingSchema.java index 47f55b3c2..78a54a224 100644 --- a/wnprc_billing/src/org/labkey/wnprc_billing/WNPRC_BillingSchema.java +++ b/wnprc_billing/src/org/labkey/wnprc_billing/WNPRC_BillingSchema.java @@ -33,6 +33,7 @@ public class WNPRC_BillingSchema public static final String TABLE_TIER_RATES = "tierrates"; public static final String TABLE_GROUP_CATEGORY_ASSOCIATIONS = "groupCategoryAssociations"; public static final String TABLE_JET_INVOICE_ITEMS = "JetInvoiceItems"; + public static final String TABLE_WORKDAY_INVOICE_ITEMS = "WorkdayInvoiceItems"; public static final String TABLE_ALIASES = "Aliases"; public static final String TABLE_SUMMARIZED_ITEMS = "summarizedInvoicedItemsByCategory"; diff --git a/wnprc_billing/src/org/labkey/wnprc_billing/WNPRC_InvoiceRunCustomizer.java b/wnprc_billing/src/org/labkey/wnprc_billing/WNPRC_InvoiceRunCustomizer.java index ccc464f0a..bce86a9e1 100644 --- a/wnprc_billing/src/org/labkey/wnprc_billing/WNPRC_InvoiceRunCustomizer.java +++ b/wnprc_billing/src/org/labkey/wnprc_billing/WNPRC_InvoiceRunCustomizer.java @@ -15,6 +15,8 @@ public void customize(TableInfo tableInfo) { addViewJetInvoiceItems(tableInfo); addDownloadCSV(tableInfo); + addViewWorkdayInvoiceItems(tableInfo); + addDownloadWorkdayCSV(tableInfo); } private void addViewJetInvoiceItems(TableInfo ti) @@ -59,4 +61,46 @@ private void addDownloadCSV(TableInfo ti) ((AbstractTableInfo) ti).addColumn(wrappedColumnPDF); } } + + private void addViewWorkdayInvoiceItems(TableInfo ti) + { + String colName = "viewWorkdayInvoice"; + + if (ti.getColumn(colName) == null) + { + WrappedColumn wrappedColumnPDF = new WrappedColumn(ti.getColumn("rowId"),colName); + wrappedColumnPDF.setHidden(false); + wrappedColumnPDF.setLabel("View Workday Invoice"); + + wrappedColumnPDF.setDisplayColumnFactory(colInfo -> { + String url = "/query/executeQuery.view?schemaName=wnprc_billing&" + + "query.queryName=workdayInvoiceItems&query.runId~eq=${rowId}"; + UrlColumn urlColumn = new UrlColumn(DetailsURL.fromString(url, ti.getUserSchema().getContainer()), "View Workday"); + urlColumn.setName(colName); + return urlColumn; + }); + ((AbstractTableInfo) ti).addColumn(wrappedColumnPDF); + } + } + private void addDownloadWorkdayCSV(TableInfo ti) + { + String colName = "downloadWorkdayCsv"; + + if (ti.getColumn(colName) == null) + { + WrappedColumn wrappedColumnPDF = new WrappedColumn(ti.getColumn("rowId"),colName); + wrappedColumnPDF.setHidden(false); + wrappedColumnPDF.setLabel("Download Workday CSV"); + + wrappedColumnPDF.setDisplayColumnFactory(colInfo -> { + ActionURL url = new ActionURL(WNPRC_BillingController.GetWorkdayInvoiceCSVAction.class, ti.getUserSchema().getContainer()); + url.addParameter("runId", "${rowId}"); + UrlColumn urlColumn = new UrlColumn(url, "Download Workday CSV"); + urlColumn.setName(colName); + return urlColumn; + }); + + ((AbstractTableInfo) ti).addColumn(wrappedColumnPDF); + } + } } From 65f577ebc35e750a3b052ae920ebc9dfb6245578 Mon Sep 17 00:00:00 2001 From: "F. Daniel Nicolalde" Date: Fri, 17 Oct 2025 13:31:45 -0500 Subject: [PATCH 6/9] simplifying work day display for CSV export --- .../wnprc_billing/workdayInvoiceItems.sql | 38 +++++-------------- .../workdayInvoiceItems/.qview.xml | 29 ++++---------- 2 files changed, 16 insertions(+), 51 deletions(-) diff --git a/wnprc_billing/resources/queries/wnprc_billing/workdayInvoiceItems.sql b/wnprc_billing/resources/queries/wnprc_billing/workdayInvoiceItems.sql index 432c6fd82..ff9f6b65c 100644 --- a/wnprc_billing/resources/queries/wnprc_billing/workdayInvoiceItems.sql +++ b/wnprc_billing/resources/queries/wnprc_billing/workdayInvoiceItems.sql @@ -1,34 +1,14 @@ SELECT - max(ii.rowid) AS spreadsheet_key, - 'UWMSN' as company, - 'ARMSN_AC2'as Internal_Service_Provider, - ii.invoiceId.runDate AS document_date, - ii.invoiceId.comment AS memo, - 'PG00011660' AS program, - 'GR000039734' AS project, - 'CC005442' AS costCenter, - 'FD0144' AS fund, - 'FN0400' AS function, ii.invoiceId.rowId as runId, - '1' as row_id, - '1' as internal_service_delivery, - 'UWMSN' as Intercompany_Affiliate, - replace(a.uw_udds, '-', '') as Department, - a.uw_fund as Fund, - '???' as Workday_Program, - a.uw_account as Project, - '???' AS Workday_Project, - a.charge_grant_accounts_Id as Account, - sum(ii.totalcost) as Amount, - 'Primate Center ' || to_char(ii.invoiceId.billingPeriodStart,'MON') as Description, - '????' AS Workday_function, - to_char(ii.invoiceId.billingPeriodEnd, 'MMyy') || a.uw_account as Jnl_Ln_Ref, - to_char(ii.invoiceId.billingPeriodEnd, 'MMyy') as billingPeriodMMyy, - NULL as Class, - NULL as PurchRefNo, - NULL as VoucherNo, - NULL as InvoiceNo, - NULL as ActivityID + a.uw_account as Project, + sum(ii.totalcost) as Amount, + replace(a.uw_udds, '-', '') as Department, + a.uw_fund as Fund, + ii.invoiceId.runDate AS document_date, + ii.invoiceId.comment AS memo, + a.charge_grant_accounts_Id as Account, + 'Primate Center ' || to_char(ii.invoiceId.billingPeriodStart,'MON') as Description, + to_char(ii.invoiceId.billingPeriodEnd, 'MMyy') as billingPeriodMMyy FROM ehr_billing.invoicedItems ii left join ehr_billing.aliases a diff --git a/wnprc_billing/resources/queries/wnprc_billing/workdayInvoiceItems/.qview.xml b/wnprc_billing/resources/queries/wnprc_billing/workdayInvoiceItems/.qview.xml index 1d875f451..c655b64ee 100644 --- a/wnprc_billing/resources/queries/wnprc_billing/workdayInvoiceItems/.qview.xml +++ b/wnprc_billing/resources/queries/wnprc_billing/workdayInvoiceItems/.qview.xml @@ -1,36 +1,21 @@ - - - + + + + - + - + - + - - - - - - - - - - - - - - - - From a411b47d3b1ffb321ceae2b92e9cd07aee43df3a Mon Sep 17 00:00:00 2001 From: "F. Daniel Nicolalde" Date: Fri, 17 Oct 2025 13:32:28 -0500 Subject: [PATCH 7/9] removing program from aliases table since it is not needed --- .../resources/domain-templates/ehr_billing.template.xml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/wnprc_billing/resources/domain-templates/ehr_billing.template.xml b/wnprc_billing/resources/domain-templates/ehr_billing.template.xml index 4c018dc40..a8bc76b86 100644 --- a/wnprc_billing/resources/domain-templates/ehr_billing.template.xml +++ b/wnprc_billing/resources/domain-templates/ehr_billing.template.xml @@ -118,10 +118,6 @@ string 500 - - string - 500 - From 01828232dad71f2375ac6798afdcbcd17c9c8f0e Mon Sep 17 00:00:00 2001 From: "F. Daniel Nicolalde" Date: Tue, 18 Nov 2025 16:07:58 -0600 Subject: [PATCH 8/9] Changing Fund-account to Grant removing UW Fund --- .../src/org/labkey/wnprc_billing/invoice/InvoicePDF.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/wnprc_billing/src/org/labkey/wnprc_billing/invoice/InvoicePDF.java b/wnprc_billing/src/org/labkey/wnprc_billing/invoice/InvoicePDF.java index c7612c4e7..aa553752f 100644 --- a/wnprc_billing/src/org/labkey/wnprc_billing/invoice/InvoicePDF.java +++ b/wnprc_billing/src/org/labkey/wnprc_billing/invoice/InvoicePDF.java @@ -584,10 +584,10 @@ private void addGrant() throws IOException Line(new Coordinate(r1, mid), new Coordinate(r2, mid)); setXY(r1 + (r2 - r1) / 2 - 5, y1 + 3); setFont("Helvetica", Collections.singleton(FontStyle.BOLD), 10); - Cell(10, 2, "FUND-ACCOUNT", Alignment.CENTER); + Cell(10, 2, "GRANT", Alignment.CENTER); setXY(r1 + (r2 - r1) / 2 - 5, y1 + 11); setFont("Helvetica", Collections.emptySet(), 10); - Cell(10, 2, addItem(alias.getUw_fund()) + alias.getGrantNumber(), Alignment.CENTER); + Cell(10, 2, alias.getGrantNumber(), Alignment.CENTER); } private void addPageNumber(int page) throws IOException From d8e40117727c87fed684c495f9692314efd16e9b Mon Sep 17 00:00:00 2001 From: "F. Daniel Nicolalde" Date: Fri, 28 Nov 2025 16:51:20 -0500 Subject: [PATCH 9/9] Adding class for new csv export and removing institution --- .../queries/ehr_billing/aliasesTemplate.sql | 2 +- .../WNPRC_BillingController.java | 144 +++++++++++++----- 2 files changed, 105 insertions(+), 41 deletions(-) diff --git a/wnprc_billing/resources/queries/ehr_billing/aliasesTemplate.sql b/wnprc_billing/resources/queries/ehr_billing/aliasesTemplate.sql index a4aab5363..bd2add501 100644 --- a/wnprc_billing/resources/queries/ehr_billing/aliasesTemplate.sql +++ b/wnprc_billing/resources/queries/ehr_billing/aliasesTemplate.sql @@ -16,7 +16,7 @@ SELECT al.contact_name AS contact_name, al.contact_phone AS contact_phone, al.contact_email AS contact_email, - al.institution AS institution, + --al.institution AS institution, al.address AS address, al.city AS city, al.state AS state, diff --git a/wnprc_billing/src/org/labkey/wnprc_billing/WNPRC_BillingController.java b/wnprc_billing/src/org/labkey/wnprc_billing/WNPRC_BillingController.java index 66a6e83e1..c1a2de6e4 100644 --- a/wnprc_billing/src/org/labkey/wnprc_billing/WNPRC_BillingController.java +++ b/wnprc_billing/src/org/labkey/wnprc_billing/WNPRC_BillingController.java @@ -43,6 +43,7 @@ import org.labkey.api.util.StringUtilsLabKey; import org.labkey.api.view.HttpView; import org.labkey.api.view.NotFoundException; +import org.labkey.pipeline.xml.impl.StringsImpl; import org.labkey.wnprc_billing.domain.Alias; import org.labkey.wnprc_billing.domain.Invoice; import org.labkey.wnprc_billing.domain.InvoiceRun; @@ -317,7 +318,7 @@ private JetCSV getJetCsv(int runId) throws IOException private JetCSV getWorkdayCsv(int runId) throws IOException { - List invoiceItems = getWorkItems(runId); + List invoiceItems = getWorkItems(runId); if (invoiceItems.isEmpty()) { throw new NotFoundException("Unable to generate JET CSV. Invoiced Items not found for the selected invoice."); @@ -332,50 +333,28 @@ private JetCSV getWorkdayCsv(int runId) throws IOException CSVWriter csvWriter = new CSVWriter(writer,CSVWriter.DEFAULT_SEPARATOR,CSVWriter.NO_QUOTE_CHARACTER); - //csvWriter.writeNext(new String[]{"NSCT"}); - csvWriter.writeNext(new String[]{"Submit Internal Service Delivery - v42.1"}); - csvWriter.writeNext(new String[]{"Area", "All", "Internal Service Delivery Data", "Internal Service Delivery Line Data+"}); - csvWriter.writeNext(new String[]{"Restrictions", "Required", "Optional", "Required","Required","Required", - "Optional", "Optional", "Optional. May have multiples", "Optional. May have multiples", "Optional. May have multiples", "Optional. May have multiples", - "Optional. May have multiples", "Optional. May have multiples", "Optional. May have multiples", "Optional. May have multiples", "Required", "Required", - "Optional", "Optional", "Optional", "Optional", "Optional", "Optional", "Required", "Optional", "Optional", "Optional. May have multiples", - "Optional. May have multiples", "Optional. May have multiples", "Optional. May have multiples", "Optional. May have multiples", "Optional. May have multiples", - "Optional. May have multiples", "Optional. May have multiples", "Optional. May have multiples"}); - csvWriter.writeNext(new String[]{"Format", "Text", "Y/N", "Company_Reference_ID", "Internal_Service_Provider_ID", "YYYY-MM-DD", "YYYY-MM-DD", "Text", "Program_ID", - "Project_ID", "Gift_Reference_ID", "Cost_Center_Reference_ID", "Fund_ID", "Custom_Organization_Reference_ID", "Custom_Organization_Reference_ID", "Custom_Worktag_1_ID", - "Text", "Number", "Company_Reference_ID", "Catalog_Item_ID", "Revenue_Category_ID", "Number (22,2)", "UN_CEFACT_Common_Code_ID", "Number (26,6)", "Number (18,3)", - "YYYY-MM-DD", "Text", "Program_ID", "Project_ID", "Grant_ID", "Gift_Reference_ID", "Cost_Center_Reference_ID", "Fund_ID", "Custom_Organization_Reference_ID", - "Custom_Organization_Reference_ID", "Custom_Worktag_1_ID"}); + csvWriter.writeNext(new String[]{"WorkDay Billing Export"}); + + String[] emptyLine = {""}; csvWriter.writeNext(emptyLine); - //csvWriter.writeNext(new String[]{"Department","Fund","Program","Project","Activity ID","Account","Class", - // "Amount","Description","Jnl_Ln_Ref","Purch Ref No","Voucher No","Invoice No"}); - csvWriter.writeNext(new String[]{"Fields", "Spreadsheet Key*", "Submit*", "Company*", "Internal Service Provider*", "Document Date*", "Delivery Date", "Memo", - "Program", "Project", "Gift", "Cost Center", "Fund", "Function", "Activity", "Additional Worktags", "Row ID**", "Internal Service Delivery Line Number*", - "Intercompany Affiliate", "Catalog Item", "Revenue Category", "Quantity*", "Unit of Measure*", "Unit Cost*", "Extended Amount*", "Delivery Date", "Memo", - "Program", "Project", "Grant", "Gift", "Cost Center*", "Fund*", "Function*", "Activity", "Additional Worktags"}); + csvWriter.writeNext(new String[]{"Grant", "Extended Amount", "Cost Center", "Document Date", "Memo", "Fund"}); double sum = 0.0; - for (JetInvoiceItem invoiceItem : invoiceItems) + for (WorkDayInvoiceItem invoiceItem : invoiceItems) { csvWriter.writeNext(emptyLine); csvWriter.writeNext(new String[]{ - invoiceItem.Department, //column 32 + invoiceItem.project, //column 32 + String.valueOf(invoiceItem.amount != null ? decimalFormat.format(invoiceItem.amount.doubleValue()) : 0.00), + invoiceItem.department, + invoiceItem.document_date, + invoiceItem.memo, invoiceItem.Fund, - invoiceItem.Program, - invoiceItem.Project, - invoiceItem.ActivityID, - String.valueOf(invoiceItem.Account != null ? invoiceItem.Account.intValue() : 0), - invoiceItem.Class, - String.valueOf(invoiceItem.Amount != null ? decimalFormat.format(invoiceItem.Amount.doubleValue()) : 0.00), - invoiceItem.Description, - (invoiceItem.billingPeriodMMyy + invoiceItem.Project), //Jnl_Ln_Ref - invoiceItem.PurchRefNo, - invoiceItem.VoucherNo, - invoiceItem.InvoiceNo + invoiceItem.description }); - sum += invoiceItem.Amount != null ? invoiceItem.Amount.doubleValue() : 0; + sum += invoiceItem.amount != null ? invoiceItem.amount.doubleValue() : 0; } csvWriter.writeNext(emptyLine); @@ -389,8 +368,8 @@ private JetCSV getWorkdayCsv(int runId) throws IOException jetSettings[4], //Account, null, //Class String.valueOf(decimalFormat.format(sum * -1.0)), //Amount - invoiceItems.get(0).Description, //Description, which is same for all the rows - (invoiceItems.get(0).billingPeriodMMyy + jetSettings[3]), //Jnl_Ln_Ref. billingPeriodMMyy is same for all the rows + invoiceItems.get(0).description, //Description, which is same for all the rows + (invoiceItems.get(0).document_date + jetSettings[3]), //Jnl_Ln_Ref. billingPeriodMMyy is same for all the rows null, //PurchRefNo null, //VoucherNo null //InvoiceNo @@ -399,7 +378,7 @@ private JetCSV getWorkdayCsv(int runId) throws IOException csvWriter.close(); SimpleDateFormat dateFormat = new SimpleDateFormat("MM-dd-yy"); - String fileName = "JET_" + dateFormat.format(invoiceRun.getBillingPeriodStart()) + "_" + + String fileName = "WorkDay_" + dateFormat.format(invoiceRun.getBillingPeriodStart()) + "_" + dateFormat.format(invoiceRun.getBillingPeriodEnd()); return new JetCSV(fileName,writer.toString()); } @@ -434,14 +413,14 @@ private List getJetItems(int runId) TableSelector tableSelector = new TableSelector(tableInfo, filter, null); return tableSelector.getArrayList(JetInvoiceItem.class); } - private List getWorkItems(int runId) + private List getWorkItems(int runId) { UserSchema wnprc_billing = QueryService.get().getUserSchema(getUser(), getContainer(), WNPRC_BillingSchema.NAME); TableInfo tableInfo = wnprc_billing.getTable(WNPRC_BillingSchema.TABLE_WORKDAY_INVOICE_ITEMS); SimpleFilter filter = new SimpleFilter(FieldKey.fromParts("runId"), runId); TableSelector tableSelector = new TableSelector(tableInfo, filter, null); - return tableSelector.getArrayList(JetInvoiceItem.class); } + return tableSelector.getArrayList(WorkDayInvoiceItem.class); } public static class InvoiceRunForm { @@ -616,6 +595,91 @@ public void setActivityID(String activityID) } } + public static class WorkDayInvoiceItem + { + int _runId; + String project; + Double amount; + String department; + String document_date; + String memo; + String Fund; + String description; + + public String getDepartment() + { + return department; + } + + public void setDepartment(String department) + { + this.department = department; + } + + public String getDocument_date() + { + return document_date; + } + + public void setDocument_date(String document_date) + { + this.document_date = document_date; + } + + public String getMemo() + { + return memo; + } + + public void setMemo(String memo) + { + this.memo = memo; + } + + public String getFund() + { + return Fund; + } + + public void setFund(String fund) + { + Fund = fund; + } + + public String getDescription() + { + return description; + } + + public void setDescription(String description) + { + this.description = description; + } + + public Double getAmount() + { + return amount; + } + + public void setAmount(Double amount) + { + this.amount = amount; + } + + public String getProject() + { + return project; + } + + public void setProject(String project) + { + this.project = project; + } + + + + } + @RequiresPermission(ReadPermission.class) public class DownloadInvoicesAction extends ExportAction {