From a1c3330cd31945c569602ddcb439bb1bab54241d Mon Sep 17 00:00:00 2001 From: Ralph Soika Date: Wed, 20 Nov 2024 19:46:47 +0100 Subject: [PATCH] draft op liste --- .../OPListExportAdapter.java | 233 +++- templates/op-liste_template.xlsx | Bin 42260 -> 40175 bytes ...(Kopie).xlsx => op-liste_template_01.xlsx} | Bin 50416 -> 42260 bytes templates/soa_template.xlsx | Bin 40161 -> 40165 bytes workflow/opliste-de-1.0.3.bpmn | 1122 +++++++++++++++++ 5 files changed, 1311 insertions(+), 44 deletions(-) rename templates/{soa_template (Kopie).xlsx => op-liste_template_01.xlsx} (68%) create mode 100644 workflow/opliste-de-1.0.3.bpmn diff --git a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/OPListExportAdapter.java b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/OPListExportAdapter.java index b56c6dd..17a9eed 100644 --- a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/OPListExportAdapter.java +++ b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/OPListExportAdapter.java @@ -26,11 +26,15 @@ import org.imixs.workflow.exceptions.PluginException; import org.imixs.workflow.exceptions.QueryException; import org.imixs.workflow.office.config.ConfigService; import org.imixs.workflow.poi.POIFindReplaceAdapter; +import org.imixs.workflow.poi.POIUtil; +import org.imixs.workflow.util.XMLParser; import jakarta.inject.Inject; /** - * Der OPListExportAdapter importiert eine Excel Datei aus einem Textblock + * Der OPListExportAdapter exportiert eine Excel Datei mit allen offenen + * Rechnungen gruppiert nach Debitor. Es werden alle Ausgehenden Währungen + * berücksichtigt und ab Spalte H eingefügt. * *
  * {@code
@@ -45,10 +49,10 @@ import jakarta.inject.Inject;
  * 
  * 

* Der Adapter kopiert die Rechnungsdaten in neue Zeilen, welche ab Zeilennummer - * 16 eingefügt werden. + * 12 eingefügt werden. *

* - * Abschliessend wird die Zelle 'TOTAL' noch aktualisiert. + * Abschliessend werden Summen Formeln in Zeile 14 für jede Währung eingefügt. * * Der Fälligkeitszeitrum von 21 Tagen kann über den Parameter * @@ -85,56 +89,157 @@ public class OPListExportAdapter extends POIFindReplaceAdapter { // ermittle die Hauptwährungen ItemCollection configItemCollection = configService.loadConfiguration("AGL_CONFIGURATION"); List currencyList = configItemCollection.getItemValue("currency.out"); - if (currencyList == null || currencyList.size() < 2) { + if (currencyList == null || currencyList.size() < 1) { throw new PluginException(OPListExportAdapter.class.getSimpleName(), InvoiceService.ERROR_CONFIG, "missing Currency configuration - please check parameters"); } - String currency1 = currencyList.get(0); - String currency2 = currencyList.get(1); // read the zahlungsavis options - ItemCollection evalItemCollection = workflowService.evalWorkflowResult(event, "opliste", document, false); - if (evalItemCollection == null) { - throw new PluginException(OPListExportAdapter.class.getSimpleName(), InvoiceService.ERROR_CONFIG, - "missing op-list configuration in model event - please check model configuration"); + ItemCollection evalItemCollection = workflowService.evalWorkflowResult(event, "opliste", + document, + false); + if (evalItemCollection == null || !evalItemCollection.hasItem("excel-export")) { + throw new PluginException(OPListExportAdapter.class.getSimpleName(), CONFIG_ERROR, + "missing opliste configuration in model event - please check model configuration"); } - String textblock = evalItemCollection.getItemValueString("textblock"); - String template = evalItemCollection.getItemValueString("template"); - String targetName = evalItemCollection.getItemValueString("target-name"); - boolean filter = evalItemCollection.getItemValueBoolean("filter"); + List excelDefList = evalItemCollection.getItemValue("excel-export"); + ItemCollection excelDefCollection = XMLParser.parseItemStructure(excelDefList.get(0)); + + // // read the zahlungsavis options + // ItemCollection evalItemCollection = workflowService.evalWorkflowResult(event, + // "opliste", document, false); + // if (evalItemCollection == null || + // !evalItemCollection.hasItem("excel-export")) { + // throw new + // PluginException(AGLAnalyticExcelAdapterDebitor.class.getSimpleName(), + // CONFIG_ERROR, + // "missing opliste configuration in model event - please check model + // configuration"); + // } + + // List excelDefList = evalItemCollection.getItemValue("excel-export"); + // ItemCollection excelDefCollection = + // XMLParser.parseItemStructure(excelDefList.get(0)); + + String textblock = excelDefCollection.getItemValueString("textblock"); + String template = excelDefCollection.getItemValueString("template"); + String targetName = excelDefCollection.getItemValueString("target-name"); + // adapt text.... targetName = workflowService.adaptText(targetName, document); - - appendExcelTemplate(document, textblock, template, targetName); - - logger.info("... loading poi configuration.."); - // Process POI instructions - // read the config - ItemCollection poiConfig = workflowService.evalWorkflowResult(event, "poi-update", document, false); - if (poiConfig == null || !poiConfig.hasItem("findreplace")) { - throw new PluginException(POIFindReplaceAdapter.class.getSimpleName(), CONFIG_ERROR, - "missing poi configuration"); - } - List replaceDevList = poiConfig.getItemValue("findreplace"); - String eval = poiConfig.getItemValueString("eval"); try { - logger.info("... update template with normal poi information.."); - this.updateFileData(document.getFileData(targetName), document, replaceDevList, eval); + FileData fileData = appendExcelTemplate(document, textblock, template, targetName); - // now we add separate lines for each invoice.... - logger.info("... insert invoices - filter=" + filter); - document.setItemValue("space.currency1", currency1); - document.setItemValue("space.currency2", currency2); + // get workbook + 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); - insertInvoiceRows(document, targetName, filter, currency1, currency2); - } catch (PluginException | IOException | QueryException e) { - throw new PluginException(OPListExportAdapter.class.getSimpleName(), InvoiceService.ERROR_CONFIG, + // first add the columns for the currency list + addCurrencyColumns(doc, sheet, currencyList); + + // write back the updated excel file + ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); + doc.write(byteArrayOutputStream); + + byte[] newContent = byteArrayOutputStream.toByteArray(); + FileData fileDataNew = new FileData(fileData.getName(), newContent, fileData.getContentType(), + null); + document.addFileData(fileDataNew); + logger.finest("......new document added"); + } catch (IOException e) { + throw new PluginException(OPListExportAdapter.class.getSimpleName(), + InvoiceService.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(); + } + } + } + + // Finally process POI instructions + processPOIUpdate(document, event, targetName); + + } catch (PluginException e) { + throw new PluginException(OPListExportAdapter.class.getSimpleName(), + InvoiceService.ERROR_CONFIG, "failed to update op-liste: " + e.getMessage()); } logger.info("... completed!"); + + // appendExcelTemplate(document, textblock, template, targetName); + + // logger.info("... loading poi configuration.."); + // // Process POI instructions + // // read the config + // ItemCollection poiConfig = workflowService.evalWorkflowResult(event, + // "poi-update", document, false); + // if (poiConfig == null || !poiConfig.hasItem("findreplace")) { + // throw new PluginException(POIFindReplaceAdapter.class.getSimpleName(), + // CONFIG_ERROR, + // "missing poi configuration"); + // } + // List replaceDevList = poiConfig.getItemValue("findreplace"); + // String eval = poiConfig.getItemValueString("eval"); + // try { + // logger.info("... update template with normal poi information.."); + // this.updateFileData(document.getFileData(targetName), document, + // replaceDevList, eval); + + // // now we add separate lines for each invoice.... + // logger.info("... insert invoices - filter=" + filter); + // document.setItemValue("space.currency1", currency1); + // document.setItemValue("space.currency2", currency2); + + // insertInvoiceRows(document, targetName, filter, currency1, currency2); + // } catch (PluginException | IOException | QueryException e) { + // throw new PluginException(OPListExportAdapter.class.getSimpleName(), + // InvoiceService.ERROR_CONFIG, + // "failed to update op-liste: " + e.getMessage()); + // } + // logger.info("... completed!"); return document; } + /** + * EIne OP Liste kann für eine oder mehrere Währungen erstellt werden. Diese + * Hilfsmethode fügt die Spalten anhand der Währungen ein. + * + * + * @param sheet + * @param currencyList + */ + private void addCurrencyColumns(XSSFWorkbook doc, XSSFSheet sheet, List currencyList) { + if (currencyList == null || currencyList.size() <= 1) { + // no extra currencies defined! + return; + } + + // zusaetzliche Zellen einfuegen... + int newColumns = (currencyList.size() - 1) * 1; + for (int i = 0; i < newColumns; i++) { + logger.info(".. add currency column..."); + POIUtil.insertColumn(sheet, 5, 6 + i); + } + + // Beschriftungen eintragen + int col = 5; + XSSFCell cell = null; + XSSFRow labelRow = sheet.getRow(9); + for (String currency : currencyList) { + cell = labelRow.getCell(col); + cell.setCellValue("Saldo " + currency); + col++; + } + } + /** * This helper method inserts a row for each invoice of the OPListe at row 16 * into the excel template file @@ -303,12 +408,51 @@ public class OPListExportAdapter extends POIFindReplaceAdapter { * @param document * @throws PluginException */ - private void appendExcelTemplate(ItemCollection document, String textblockRef, String template, String targetName) + // private void appendExcelTemplate(ItemCollection document, String + // textblockRef, String template, String targetName) + // throws PluginException { + + // if ((template == null || template.isEmpty()) || (textblockRef == null || + // textblockRef.isEmpty())) { + // throw new PluginException(OPListExportAdapter.class.getSimpleName(), + // InvoiceService.ERROR_CONFIG, + // "invalid op-list configuration in model event - textblock/template reference + // not defined!"); + // } + + // // load the text block + // FileData fileData = invoiceService.loadTextBlockFileData(textblockRef, + // template); + + // // do we found the document? + // if (fileData == null) { + // throw new PluginException(OPListExportAdapter.class.getSimpleName(), + // InvoiceService.ERROR_CONFIG, + // "invalid op-list configuration in model event - template=" + template + " not + // found!"); + // } + // fileData.setName(targetName); + // // append document + // logger.info("...append new op-list Template: " + targetName); + + // document.addFileData(fileData); + + // } + /** + * This method loads a text-block for a specified ref and appends the named + * fileData object of this document. + * + * @param document + * @throws PluginException + */ + private FileData appendExcelTemplate(ItemCollection document, String textblockRef, String template, + String targetName) throws PluginException { if ((template == null || template.isEmpty()) || (textblockRef == null || textblockRef.isEmpty())) { - throw new PluginException(OPListExportAdapter.class.getSimpleName(), InvoiceService.ERROR_CONFIG, - "invalid op-list configuration in model event - textblock/template reference not defined!"); + throw new PluginException(OPListExportAdapter.class.getSimpleName(), + InvoiceService.ERROR_CONFIG, + "invalid POI configuration in model event - textblock/template reference not defined!"); } // load the text block @@ -316,15 +460,16 @@ public class OPListExportAdapter extends POIFindReplaceAdapter { // do we found the document? if (fileData == null) { - throw new PluginException(OPListExportAdapter.class.getSimpleName(), InvoiceService.ERROR_CONFIG, - "invalid op-list configuration in model event - template=" + template + " not found!"); + throw new PluginException(OPListExportAdapter.class.getSimpleName(), + InvoiceService.ERROR_CONFIG, + "invalid POI configuration in model event - template=" + template + + " not found!"); } fileData.setName(targetName); // append document - logger.info("...append new op-list Template: " + targetName); - + logger.info("...append new POI Template: " + targetName); document.addFileData(fileData); - + return fileData; } /** diff --git a/templates/op-liste_template.xlsx b/templates/op-liste_template.xlsx index f17aa949a253ca50c0a349b245d82e15007c78a8..20eafdfbc9cbcefecc0731a10eaea3219bd7e2c7 100644 GIT binary patch delta 5182 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 ULnZf6jWb}|C2W}dS-(*K0b1%m`v3p{ delta 7297 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 diff --git a/templates/soa_template (Kopie).xlsx b/templates/op-liste_template_01.xlsx similarity index 68% rename from templates/soa_template (Kopie).xlsx rename to templates/op-liste_template_01.xlsx index 099c4a01ad4b8c7ff9e05508f25b67c776020b90..f17aa949a253ca50c0a349b245d82e15007c78a8 100644 GIT binary patch delta 5976 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 YW?M-&vH9OXSQh+KFBi^}oZIF92iL3spa1{> delta 14202 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 T%kNJ#5I>XQKkaV(TJ`?`ktye% diff --git a/templates/soa_template.xlsx b/templates/soa_template.xlsx index ddf2a383d842ba9f4bcd48752e5b74816706221d..a888b42064befcc162f38ba5ba1cf7a0bdbf1dec 100644 GIT binary patch delta 3276 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 L44ZWNZrpzWHWj>} delta 3269 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + + + + + + + +<itemvalue>$workflowstatus</itemvalue> + +]]> + + + +]]> + + + + + + + + + + + + + + + + + StartEvent_1 + Task_1 + IntermediateCatchEvent_3 + IntermediateCatchEvent_1 + Task_4 + EndEvent_3 + Task_2 + IntermediateCatchEvent_2 + IntermediateCatchEvent_8 + Task_3 + IntermediateCatchEvent_4 + IntermediateCatchEvent_5 + + TextAnnotation_1 + DataObject_1 + event_1vVoBA + + + + SequenceFlow_4 + + + + + + sequencenumber space.name - $lasteventdate]]> + + + true + + + + + + + + + + + + + + + + + + + + + + + $workflowgroup - $workflowstatus]]> + SequenceFlow_1 + SequenceFlow_9 + SequenceFlow_17 + + + SequenceFlow_19 + + + + + + sequencenumber space.name - $lasteventdate]]> + + + + + + + + + + + + true + + + + + + + + + + + + + + + + + + $workflowgroup - $workflowstatus]]> + SequenceFlow_4 + SequenceFlow_3 + SequenceFlow_2 + + + + + + + + + + + + + + + + + + + +]]> + + + + + + + + + + + + sequencenumber space.name - $created]]> + + + + + + + + + Html-Header +

Hallo,

+

+Bitte prüfen Sie die angefügte OP-Liste. Diese enthält sämtlich noch offenen Rechnungen zum Zeitpunkt des Exports für diesen Fachbereich. +

+

+Nach Prüfung schließen Sie bitte den Vorgang über die Schaltfläche "Erledigt" ab. +

+application.urlpages/workitems/workitem.jsf?id=$uniqueid + +Html-Footer]]> + + + + + + + + + + + + + + + + + + + + + + + + + + home +Mahnwesen +OP-Liste Template +op-liste_template.xlsx +op-liste_space.name_$lasteventdate.xlsx +true + + C6 + sequencenumber + text + + + D6 + Überfällig / 2. Mahnstufe + text + + + C8 + space.name + text + + + + I6 + $lasteventdate + date + +]]> + + + + + + + + + + + + false + + + + + + + + SequenceFlow_5 + SequenceFlow_9 + + DataOutput_2 + + + + + + + sequencenumber space.name - $lasteventdate]]> + + + true + + + + + + + + + + + + + + + + + + $workflowgroup - $workflowstatus]]> + SequenceFlow_18 + SequenceFlow_19 + + + + + + + + home]]> + + + SequenceFlow_17 + SequenceFlow_8 + SequenceFlow_18 + + + + + + + + + + + + + + + + + + SequenceFlow_1 + + + + + + + + + + + + + + + + + + + SequenceFlow_3 + SequenceFlow_5 + + + + + + + + + + + + + + + + +]]> + + + + + + + + + + + + + + + + + + + + OP-Liste Template + + op-liste_dbtr.number_$lasteventdate.xlsx + + + + C6 + sequencenumber + text + + + B7 + space.name + text + + + + F6 + $lasteventdate + date + ]]> + + + SequenceFlow_6 + + + sequenceFlow_m5OB0Q + + + + + + + + + + + sequencenumber space.name - $lasteventdate]]> + + + true + + + + + + + + + + + + + + + + + + + + + + + $workflowgroup - $workflowstatus]]> + SequenceFlow_6 + SequenceFlow_10 + SequenceFlow_8 + + + + + + + + + + + + + + SequenceFlow_10 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + SequenceFlow_2 + sequenceFlow_m5OB0Q + + + + + + + + + + event_yvRYxA + task_A5VcTw + event_a0OyNw + task_xZ1VEg + event_XWmcVw + task_R0QI0w + event_rkG39w + textAnnotation_5ZBmxg + event_0DGK7A + event_VMNwVw + + + + + sequenceFlow_71XoqA + + + + + $lasteventdate ]]> + + + + + + + + + + + + true + + + + + + + + + + + + + + + + + + $workflowgroup - $workflowstatus]]> + SequenceFlow_2 + sequenceFlow_71XoqA + sequenceFlow_QzU0Xg + + + + + + + + + + + + + + + + + + Mahnwesen +OP-Liste KW Template +op-liste_kw_template.xlsx +op-liste_space.name_$lasteventdate.xlsx + + + + I6 + $lasteventdate + date + + +I7 +]]> + + + + + sequenceFlow_64kfIA + sequenceFlow_JKOgiA + + + + + $lasteventdate ]]> + + + true + + + + + + + + + + + + + + + + + + + + + + + $workflowgroup - $workflowstatus]]> + SequenceFlow_10 + sequenceFlow_64kfIA + sequenceFlow_W9rmgA + sequenceFlow_hH7RWQ + + + + + + + + + + + + + + + + + home]]> + + + SequenceFlow_8 + + sequenceFlow_W9rmgA + sequenceFlow_5c0Y8A + + + + + $lasteventdate ]]> + + + true + + + + + + + + + + + + + + + + + + $workflowgroup - $workflowstatus]]> + sequenceFlow_5c0Y8A + sequenceFlow_00R0Qw + + + + sequenceFlow_00R0Qw + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Mahnwesen +OP-Liste KW Template +op-liste_kw_template.xlsx +op-liste_space.name_$lasteventdate.xlsx + + + + I6 + $lasteventdate + date + + +I7 +]]> + + + + + + + + sequenceFlow_hH7RWQ + + + + + + + + sequenceFlow_QzU0Xg + sequenceFlow_JKOgiA + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +