From 89865fcde14a3ba4c13292b2a379e4d734f3c53d Mon Sep 17 00:00:00 2001 From: Ralph Soika Date: Mon, 18 Nov 2024 08:16:13 +0100 Subject: [PATCH] update multi currency --- .../AGLAnalyticExcelAdapterDebitor.java | 158 +++++++++--------- templates/soa_template.xlsx | Bin 40087 -> 40128 bytes 2 files changed, 77 insertions(+), 81 deletions(-) diff --git a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/AGLAnalyticExcelAdapterDebitor.java b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/AGLAnalyticExcelAdapterDebitor.java index 7a24e5b..04b50ed 100644 --- a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/AGLAnalyticExcelAdapterDebitor.java +++ b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/AGLAnalyticExcelAdapterDebitor.java @@ -11,6 +11,7 @@ import java.util.logging.Logger; import org.apache.poi.ss.usermodel.CellCopyPolicy; import org.apache.poi.ss.usermodel.Row.MissingCellPolicy; import org.apache.poi.ss.util.CellReference; +import org.apache.poi.xssf.usermodel.XSSFCell; import org.apache.poi.xssf.usermodel.XSSFRow; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; @@ -124,9 +125,9 @@ public class AGLAnalyticExcelAdapterDebitor extends POIFindReplaceAdapter { XSSFSheet sheet = doc.getSheetAt(0); // first add the columns for the currency list - addCurrencyColumns(sheet, currencyList); + addCurrencyColumns(doc, sheet, currencyList); - // insertInvoiceRows(document, targetName); + insertInvoiceRows(sheet, document, currencyList); // write back the updated excel file ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); @@ -138,7 +139,7 @@ public class AGLAnalyticExcelAdapterDebitor extends POIFindReplaceAdapter { document.addFileData(fileDataNew); logger.finest("......new document added"); - } catch (IOException e) { + } catch (IOException | QueryException e) { throw new PluginException(AGLAnalyticExcelAdapter.class.getSimpleName(), OPListExportService.ERROR_CONFIG, "failed to update opliste: " + e.getMessage()); @@ -189,19 +190,33 @@ public class AGLAnalyticExcelAdapterDebitor extends POIFindReplaceAdapter { * @param sheet * @param currencyList */ - private void addCurrencyColumns(XSSFSheet sheet, List currencyList) { + private void addCurrencyColumns(XSSFWorkbook doc, XSSFSheet sheet, List currencyList) { if (currencyList == null || currencyList.size() <= 1) { // no extra currencies defined! return; } - int newColumns = (currencyList.size() - 1) * 2; + // zusaetzliche Zellen einfuegen... + int newColumns = (currencyList.size() - 1) * 2; for (int i = 0; i < newColumns; i++) { logger.info(".. add currency column..."); POIUtil.insertColumn(sheet, 6, 8 + i); - // POIUtil.insertColumn(sheet, 6, 8 + i+1); } + // Beschriftungen eintragen + int col = 6; + XSSFCell cell = null; + XSSFRow labelRow = sheet.getRow(9); + for (String currency : currencyList) { + + cell = labelRow.getCell(col); + cell.setCellValue("Total " + currency); + col++; + + cell = labelRow.getCell(col); + cell.setCellValue("Saldo " + currency); + col++; + } } /** @@ -229,97 +244,78 @@ public class AGLAnalyticExcelAdapterDebitor extends POIFindReplaceAdapter { * @throws PluginException * @throws QueryException */ - private void insertInvoiceRows(ItemCollection document, String fileName) + private void insertInvoiceRows(XSSFSheet sheet, ItemCollection document, List currencyList) throws PluginException, QueryException { // load dummy rechnungen List invoices = loadInvoices(getDbtNr(document)); - FileData fileData = document.getFileData(fileName); - // load XSSFWorkbook - XSSFWorkbook doc = null; - try (InputStream imputStream = new ByteArrayInputStream(fileData.getContent())) { - doc = new XSSFWorkbook(imputStream); - // NOTE: we only take the first sheet ! - XSSFSheet sheet = doc.getSheetAt(0); - CellReference invoiceRefCell = new CellReference("A11"); - XSSFRow referenceRowInvoice = sheet.getRow(invoiceRefCell.getRow()); - int referenceRowPos = 10; - int rowPos = referenceRowPos; - int lastRow = 2999; - logger.finest("Last rownum=" + lastRow); - // jetzt füge alle Rechnungen an. - int totalRowCount = invoices.size(); - sheet.shiftRows(referenceRowPos, lastRow, totalRowCount, true, true); - for (ItemCollection invoice : invoices) { - logger.fine("......add invoice " + invoice.getUniqueID()); - // now create a new line.. - XSSFRow row = sheet.createRow(rowPos); - row.copyRowFrom(referenceRowInvoice, new CellCopyPolicy()); - // insert values - row.getCell(0) - .setCellValue(invoice.getItemValueDate("$created")); - row.getCell(1, MissingCellPolicy.CREATE_NULL_AS_BLANK) - .setCellValue(invoice.getItemValueString("invoice.number")); - row.getCell(2, MissingCellPolicy.CREATE_NULL_AS_BLANK) - .setCellValue(invoice.getItemValueDate("invoice.date")); - row.getCell(3, MissingCellPolicy.CREATE_NULL_AS_BLANK) - .setCellValue(invoice.getItemValueDate("invoice.duedate")); - row.getCell(4, MissingCellPolicy.CREATE_NULL_AS_BLANK) - .setCellValue(invoice.getItemValueString("space.name")); - row.getCell(5, MissingCellPolicy.CREATE_NULL_AS_BLANK) - .setCellValue(invoice.getItemValueString("invoice.text")); + CellReference invoiceRefCell = new CellReference("A11"); + XSSFRow referenceRowInvoice = sheet.getRow(invoiceRefCell.getRow()); + int referenceRowPos = 10; + int rowPos = referenceRowPos; + int lastRow = 2999; + logger.finest("Last rownum=" + lastRow); - // Waehrung? - if (invoice.getItemValueDouble("invoice.rate") == 0) { - row.getCell(6, MissingCellPolicy.CREATE_NULL_AS_BLANK) - .setCellValue(invoice.getItemValueDouble("invoice.total")); - row.getCell(7, MissingCellPolicy.CREATE_NULL_AS_BLANK) - .setCellValue(invoice.getItemValueDouble("invoice.saldo")); - } else { - row.getCell(8, MissingCellPolicy.CREATE_NULL_AS_BLANK) - .setCellValue(invoice.getItemValueDouble("invoice.total")); - row.getCell(9, MissingCellPolicy.CREATE_NULL_AS_BLANK) - .setCellValue(invoice.getItemValueDouble("invoice.saldo")); - } - row.getCell(10, MissingCellPolicy.CREATE_NULL_AS_BLANK) - .setCellValue(invoice.getItemValueString("$workflowstatus")); + // jetzt füge alle Rechnungen an. + int totalRowCount = invoices.size(); + POIUtil.insertRows(sheet, "A11", totalRowCount); - rowPos++; - } + for (ItemCollection invoice : invoices) { + logger.fine("......add invoice " + invoice.getUniqueID()); + // now create a new line.. + XSSFRow row = sheet.createRow(rowPos); + row.copyRowFrom(referenceRowInvoice, new CellCopyPolicy()); + // insert values + row.getCell(0) + .setCellValue(invoice.getItemValueDate("$created")); + row.getCell(1, MissingCellPolicy.CREATE_NULL_AS_BLANK) + .setCellValue(invoice.getItemValueString("invoice.number")); + row.getCell(2, MissingCellPolicy.CREATE_NULL_AS_BLANK) + .setCellValue(invoice.getItemValueDate("invoice.date")); + row.getCell(3, MissingCellPolicy.CREATE_NULL_AS_BLANK) + .setCellValue(invoice.getItemValueDate("invoice.duedate")); + row.getCell(4, MissingCellPolicy.CREATE_NULL_AS_BLANK) + .setCellValue(invoice.getItemValueString("space.name")); + row.getCell(5, MissingCellPolicy.CREATE_NULL_AS_BLANK) + .setCellValue(invoice.getItemValueString("invoice.text")); + + // Waehrung? + String currency = invoice.getItemValueString("invoice.currency"); + int totalCol = findTotalPos(currency, currencyList); + + row.getCell(totalCol, MissingCellPolicy.CREATE_NULL_AS_BLANK) + .setCellValue(invoice.getItemValueDouble("invoice.total")); + row.getCell(totalCol + 1, MissingCellPolicy.CREATE_NULL_AS_BLANK) + .setCellValue(invoice.getItemValueDouble("invoice.saldo")); + // Status + row.getCell(6 + (currencyList.size() * 2), MissingCellPolicy.CREATE_NULL_AS_BLANK) + .setCellValue(invoice.getItemValueString("$workflowstatus")); - // Leerzeile - // categoryRow = sheet.createRow(rowPos); rowPos++; + } - // write back the file - ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); - doc.write(byteArrayOutputStream); + } - byte[] newContent = byteArrayOutputStream.toByteArray(); - FileData fileDataNew = new FileData(fileData.getName(), newContent, fileData.getContentType(), - null); - // update the fileData - document.addFileData(fileDataNew); - - logger.finest("......new document added"); - - } catch (IOException e) { - throw new PluginException(AGLAnalyticExcelAdapter.class.getSimpleName(), - OPListExportService.ERROR_CONFIG, - "failed to update opliste: " + e.getMessage()); - } finally { - if (doc != null) { - try { - doc.close(); - } catch (IOException e) { - logger.severe("Failed to close workbook: " + e.getMessage()); - e.printStackTrace(); + /** + * Findet die Total Spalte für eine Währung + * + * @param currency + * @return + */ + private int findTotalPos(String currency, List currencyList) { + int result = 6; + if (currency != null) { + for (String cur : currencyList) { + if (currency.equals(cur)) { + return result; } + result = result + 2; } } + return result; } /** diff --git a/templates/soa_template.xlsx b/templates/soa_template.xlsx index ff0c71d4c54ccce638ef5c772a18e763e9532516..403f305a7f6a6da5b4ccf5f5e9aed6d68663da52 100644 GIT binary patch delta 4013 zcmZ8kcRbbK|G)OUu1y)&2wB;bo$M7d5}6m-*|Of5WxL+Ub%o3nA|r%rWUG`FLg5lJ zy7vCz`+Ge4d_L!&^E&4|&+By_=kwr@7>G~%5Uo_XtjLiV-)t^RV3v|$OsLy9$gWG`3IfTe zkMv2%$5+1Obx^S)cS*Zcfo;e{`m?HSw3}MzhaCa1NPnHH_appU2DywqvJeL=&g8a} zo9OFs#9sA&J22kUVKC!4iaFR^?rZj+!nA~h94@Q?BK{7_au$t4UIV{!{A>g}d@YYE zTe!IjGDi4;zDfbiLg_3^fe;Ui!|zB=OD-!-VTLl@e3j=kgU!@?3FU!t4cqK9Y{Y+( z1`#hr8oy>3H=nhOXZeHEd(;jQBoTs z0pUoKie7I6VQkjH){=2dM`R;v`E!&JW&e=RAfcF<_wJ5Ge zI8PqnL*Izxz$O^QVEP51L$0a3k{u)rN)LG-UhR{!an4ElQjuSakU!?U)q&8g3t+9c zjguqoVcXdKP36o z>XcMUlEpvkc^PWP+5fGhOz_8p&lToZp_u`x&pFKZ{I+w+4xYv zj8X4|oJg`kSwM|l^6ult<_I=1!NboS-=aN5b8fxeNfN`*{eH)6Tb`BnX=h1&^|`}# zVaGdHQ;O-z+rM`=Xvj)S>+Tk*78<8#A3na+FJAL{hD92ZLt_)_g)!y8;NfcX7#1^Q z(BwWtt(5HTlHQ4z>si>=2o@^GOF3>50Qu9u*E`b!1LZ_M5Bj;Xeymf=5xTs-I)#I5 zy>L2xbvjsJAe+3>o;yvT7%EAp-YJ3o60F{}Q@_^p3olnOi%de?uC-!!z;X|T`z01G zza3z}t4zcYcK6VQ~b z9WIj!+-hv2Av~Ct#u_SyvJZVTRD4d-mBv2zXz(?!NAV@M9m4Ql0((Ox_0XBTB$!g@ zX{KZBB2oA>0kZs$Y&5;TM_dRE2sY5XsuD-)m7>6=ZS);*(_SEWfU9j1N40!#+ zE4sxAs+!|%xw=gvEy0@QW|6Bm*gvCgNL-)WUtCPP7d${@JKnxST;cvx2tm{9PjT2i zw=gtZ7o}<*b+vz^J*=($r0K{t%;rez3bPIcE5go}&uD=uiMyS!M3eF^kR)+8_R?)+ zlv#_9>L;
QG6nm^QMT4xlzrTlC=uG!_`XRW-we#t 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 Jqth;<{|^wYHgy01