From a877c08d9fa2eb597ab22fc58082ecf6d1eb7de5 Mon Sep 17 00:00:00 2001 From: Ralph Soika Date: Mon, 27 Feb 2023 16:41:39 +0100 Subject: [PATCH] neue Inkasso funktion --- .../mahnlauf/InkassoAppendAdapter.java | 124 + .../mahnlauf/InkassoController.java | 77 + .../mahnlauf/InkassoExportAdapter.java | 247 ++ .../pages/workitems/forms/inkasso.xhtml | 128 + templates/inkasso_template.xlsx | Bin 0 -> 41572 bytes workflow/inkasso-1.0.0.bpmn | 840 +++++ workflow/rechnungsausgang-de-1.0.2.bpmn | 3104 +++++++++++++++++ 7 files changed, 4520 insertions(+) create mode 100644 office-alexander-logistics-app/src/main/java/com/alexanderlogistics/mahnlauf/InkassoAppendAdapter.java create mode 100644 office-alexander-logistics-app/src/main/java/com/alexanderlogistics/mahnlauf/InkassoController.java create mode 100644 office-alexander-logistics-app/src/main/java/com/alexanderlogistics/mahnlauf/InkassoExportAdapter.java create mode 100644 office-alexander-logistics-app/src/main/webapp/pages/workitems/forms/inkasso.xhtml create mode 100644 templates/inkasso_template.xlsx create mode 100644 workflow/inkasso-1.0.0.bpmn create mode 100644 workflow/rechnungsausgang-de-1.0.2.bpmn diff --git a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/mahnlauf/InkassoAppendAdapter.java b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/mahnlauf/InkassoAppendAdapter.java new file mode 100644 index 0000000..4d7b463 --- /dev/null +++ b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/mahnlauf/InkassoAppendAdapter.java @@ -0,0 +1,124 @@ +package com.alexanderlogistics.mahnlauf; + +import java.util.List; +import java.util.logging.Logger; + +import javax.inject.Inject; + +import org.imixs.workflow.ItemCollection; +import org.imixs.workflow.SignalAdapter; +import org.imixs.workflow.engine.WorkflowService; +import org.imixs.workflow.exceptions.AccessDeniedException; +import org.imixs.workflow.exceptions.AdapterException; +import org.imixs.workflow.exceptions.ModelException; +import org.imixs.workflow.exceptions.PluginException; +import org.imixs.workflow.exceptions.ProcessingErrorException; +import org.imixs.workflow.exceptions.QueryException; + +/** + * Der InkassoAppendAdapter verknüpft eine Rechnung mit einem Inkasso Workflow zum + * aktuellen Debitor. Existiert aktuell kein Inkasso für diesen + * Debitor erzeugt der Adapter automatisch eine neue Prozessinstanz. + *

+ * Wurde die Rechnugn bereits einem Inkasso zugeordnet passiert nichts. + * + * + * + * @version 1.0 + * @author rsoika + */ +public class InkassoAppendAdapter implements SignalAdapter { + + private static Logger logger = Logger.getLogger(InkassoAppendAdapter.class.getName()); + + public static final String ERROR_MISSING_DATA = "MISSING_DATA"; + public static final String ERROR_CONFIG = "CONFIG_ERROR"; + + public static final String ITEM_DBTR_NUMBER = "dbtr.number"; + public static final String ITEM_DBTR_NAME = "dbtr.name"; + + @Inject + WorkflowService workflowService; + + /** + * This method finds or create the Inkasso and adds a reference + * ($workitemref) to the current invoice. + * + * @throws PluginException + */ + @Override + public ItemCollection execute(ItemCollection document, ItemCollection event) + throws AdapterException, PluginException { + + appendInvoice(document); + + return document; + } + + /** + * Diese method hängt eine referenz der aktuellen Rechnung an den Inkasso + * + * @param document + * @throws PluginException + */ + private void appendInvoice(ItemCollection document) throws PluginException { + String dbtrNumber = document.getItemValueString(ITEM_DBTR_NUMBER); + String currency = document.getItemValueString("invoice.currency"); + + if (dbtrNumber == null || dbtrNumber.isEmpty()) { + throw new PluginException(PluginException.class.getName(), ERROR_MISSING_DATA, + "Inkasso kann nicht erzeugt werden. Bitte wählen Sie zuerst einen Debitor aus."); + } + + + logger.info("......Search Inkasso '" + dbtrNumber + "'..."); + ItemCollection inkasso; + try { + inkasso = findInkasso(dbtrNumber,currency); + if (inkasso == null) { + // create a new one + inkasso = new ItemCollection().workflowGroup("Inkasso").task(1000).event(100); + // add cdtr.name + inkasso.setItemValue(ITEM_DBTR_NAME, document.getItemValue(ITEM_DBTR_NAME)); + inkasso.setItemValue(ITEM_DBTR_NUMBER, document.getItemValue(ITEM_DBTR_NUMBER)); + inkasso.setItemValue("invoice.currency", currency); + } else { + // Inkasso speichern + inkasso.event(100); + } + // Invoice mit Inkasso verknüpften (falls noch nicht verknüpft) + inkasso.appendItemValueUnique("$workitemref", document.getUniqueID()); + workflowService.processWorkItem(inkasso); + + } catch (QueryException | AccessDeniedException | ProcessingErrorException | ModelException e1) { + throw new PluginException(PluginException.class.getName(), ERROR_MISSING_DATA, + "Es konnte kein Inkasso zugewiesen werden: " + e1.getMessage()); + + } + } + + /** + * Prüft alle offenen Inkasso Workflows und gibt den neuesten zur angegebenen + * dbtrNumber zurück, oder null falls es keinen Offenen gibt. + * + * @param dbtrNumber + * @return + * @throws QueryException + */ + private ItemCollection findInkasso(String dbtrNumber,String currency) throws QueryException { + String query = "(type:workitem) AND ($modelversion:inkasso*) "; + List resultList = workflowService.getDocumentService().find(query, 999, 0, "$modified", true); + + for (ItemCollection inkasso : resultList) { + if (dbtrNumber.equals(inkasso.getItemValueString(ITEM_DBTR_NUMBER)) + && currency.equals(inkasso.getItemValueString("invoice.currency")) + ) { + return inkasso; + } + } + + // no Inkasso found + return null; + } + +} \ No newline at end of file diff --git a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/mahnlauf/InkassoController.java b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/mahnlauf/InkassoController.java new file mode 100644 index 0000000..d40766f --- /dev/null +++ b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/mahnlauf/InkassoController.java @@ -0,0 +1,77 @@ +package com.alexanderlogistics.mahnlauf; + +import java.io.Serializable; +import java.util.List; +import java.util.logging.Logger; + +import javax.enterprise.context.ConversationScoped; +import javax.inject.Inject; +import javax.inject.Named; + +import org.imixs.workflow.ItemCollection; +import org.imixs.workflow.engine.DocumentService; +import org.imixs.workflow.faces.data.WorkflowController; + +/** + * Der InkassoController dient dazu eine bereits zugewiesene Rechnung + * wieder aus dem Inkasso zu entfernen. + *

+ * Zusätzlich bietet er die Summenberechnung an, bei der die Gutschriften + * abgezogen werden. + * + * @author rsoika + * + */ +@Named +@ConversationScoped +public class InkassoController implements Serializable { + + private static final long serialVersionUID = 1L; + + private static Logger logger = Logger.getLogger(InkassoController.class.getName()); + + @Inject + protected WorkflowController workflowController; + + @Inject + protected DocumentService documentService; + + /** + * This method computes the sum for a given item in a list of workitems. The + * result is rounded to 2 digits. + *

+ * Gutschriften werden abgezogen + * + * @param refids - list of workitem uniqueIds + * @param item - name of the item to summarize + * @return sum rounded to 2 digits + */ + public double calculateSum(List refids, String item) { + double result = 0; + for (String id : refids) { + ItemCollection doc = documentService.load(id); + if (doc != null) { + result = result + doc.getItemValueDouble(item); + + } else { + logger.warning("invalid read access to calculate sum"); + } + } + // rond with 2 digits + return Math.round(result * 100.0) / 100.0; + + } + + /** + * This method removes an uniqueid form the item $workitemref + */ + @SuppressWarnings("unchecked") + public void removeInvoice(String id) { + + List refList = workflowController.getWorkitem().getItemValue("$workitemref"); + + refList.remove(id); + workflowController.getWorkitem().setItemValue("$workitemref", refList); + } + +} diff --git a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/mahnlauf/InkassoExportAdapter.java b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/mahnlauf/InkassoExportAdapter.java new file mode 100644 index 0000000..8f7d867 --- /dev/null +++ b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/mahnlauf/InkassoExportAdapter.java @@ -0,0 +1,247 @@ +package com.alexanderlogistics.mahnlauf; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.util.Collection; +import java.util.List; +import java.util.logging.Logger; + +import javax.inject.Inject; + +import org.apache.poi.ss.usermodel.CellCopyPolicy; +import org.apache.poi.ss.util.CellReference; +import org.apache.poi.xssf.usermodel.XSSFRow; +import org.apache.poi.xssf.usermodel.XSSFSheet; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; +import org.imixs.archive.core.SnapshotService; +import org.imixs.workflow.FileData; +import org.imixs.workflow.ItemCollection; +import org.imixs.workflow.engine.DocumentService; +import org.imixs.workflow.engine.WorkflowService; +import org.imixs.workflow.exceptions.AdapterException; +import org.imixs.workflow.exceptions.PluginException; +import org.imixs.workflow.exceptions.QueryException; + +import org.imixs.workflow.poi.POIFindReplaceAdapter; + +/** + * Der ZahlungsavisAdapter importiert eine Excel Datei aus einem Textblock + * + *

+ * {@code
+        textblock-ref
+        filename
+        filename
+   }
+ * 
+ *

+ * Der Adapter erweitert den POIAdapter somit können felder aktualisiert werden + * (siehe POIFineReplaceAdapter). + * + *

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

+ * Dabei werden Gutschriften in spalte E und Rechnungen in Spalte F eingetrgen. + *

+ * Abschliessend wird die Zelle 'TOTAL' noch aktualisiert. + * + * @version 1.0 + * @author rsoika + */ +public class InkassoExportAdapter extends POIFindReplaceAdapter { + + private static Logger logger = Logger.getLogger(InkassoExportAdapter.class.getName()); + + public static final String ERROR_CONFIG = "CONFIG_ERROR"; + final String TYPE_TEXTBLOCK = "textblock"; + + @Inject + WorkflowService workflowService; + + @Inject + DocumentService documentService; + + @Inject + SnapshotService snapshotService; + + /** + * This method finds or create the Zahlungsavis and adds a reference + * ($workitemref) to the current invoice. + * + * @throws PluginException + */ + @SuppressWarnings("unchecked") + @Override + public ItemCollection execute(ItemCollection document, ItemCollection event) + throws AdapterException, PluginException { + + // read the zahlungsavis options + ItemCollection evalItemCollection = workflowService.evalWorkflowResult(event, "inkasso", document, false); + if (evalItemCollection == null) { + throw new PluginException(InkassoExportAdapter.class.getSimpleName(), ERROR_CONFIG, + "missing inkasso configuration in model event - please check model configuration"); + } + String textblock = evalItemCollection.getItemValueString("textblock"); + String template = evalItemCollection.getItemValueString("template"); + String targetName = evalItemCollection.getItemValueString("target-name"); + // adapt text.... + targetName = workflowService.adaptText(targetName, document); + + appendExcelTemplate(document, textblock, template, targetName); + + // 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 { + this.updateFileData(document.getFileData(targetName), document, replaceDevList, eval); + } catch (PluginException | IOException e) { + throw new PluginException(InkassoExportAdapter.class.getSimpleName(), ERROR_CONFIG, + "failed to update zahlungsavis - wrong POI configuraiton: " + e.getMessage()); + } + + // now we add separate lines for each invoice.... + insertInvoiceRows(document, targetName); + + return document; + } + + /** + * This helper method inserts a row for each invoice of the current Zahlunsavis + * at row 16 into the excel template file + *

+ * The method copies the Row A16 as a reference row + *

+ * The named cell 'TOTAL' should contain the summary formula. It will be + * evaluated at the end. + * + * @throws PluginException + */ + @SuppressWarnings("unchecked") + private void insertInvoiceRows(ItemCollection document, String fileName) throws PluginException { + List invoiceIDs = document.getItemValue("$workitemref"); + FileData fileData = document.getFileData(fileName); + + // load XSSFWorkbook + try (InputStream imputStream = new ByteArrayInputStream(fileData.getContent())) { + XSSFWorkbook doc = new XSSFWorkbook(imputStream); + // NOTE: we only take the first sheet ! + XSSFSheet sheet = doc.getSheetAt(0); + CellReference cr = new CellReference("A16"); + XSSFRow referenceRow = sheet.getRow(cr.getRow()); + int referenceRowPos = 16; + int rowPos = 16; + //int lastRow = sheet.getLastRowNum(); + int lastRow = 999; + logger.finest("Last rownum="+lastRow); + sheet.shiftRows(rowPos, lastRow, invoiceIDs.size(), true, true); + + for (String invoiceID : invoiceIDs) { + logger.finest("......copy row..."); + ItemCollection invoice = documentService.load(invoiceID); + // now create a new line.. + XSSFRow row = sheet.createRow(rowPos); + row.copyRowFrom(referenceRow, new CellCopyPolicy()); + // insert values + row.getCell(0).setCellValue(invoice.getItemValueString("invoice.number")); + row.getCell(1).setCellValue(invoice.getItemValueDate("invoice.date")); + row.getCell(2).setCellValue(invoice.getItemValueDate("invoice.duedate")); + // Rechnung + row.getCell(4).setCellValue(invoice.getItemValueDouble("invoice.total")); + + rowPos++; + } + // delete reference row 16 + sheet.shiftRows(referenceRowPos, lastRow + invoiceIDs.size(), -1, true, true); + + // finally update the total formula... + evalXSSFSheet(doc, sheet, "TOTAL"); + + ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); + // write back the file + + doc.write(byteArrayOutputStream); + doc.close(); + 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(InkassoExportAdapter.class.getSimpleName(), ERROR_CONFIG, + "failed to update inkasso: " + e.getMessage()); + } + } + + /** + * This method loads a text-block for a specified ref and appends the named + * fileData object of this document. + * + * @param document + * @throws PluginException + */ + 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(InkassoExportAdapter.class.getSimpleName(), ERROR_CONFIG, + "invalid inkasso configuration in model event - textblock/template reference not defined!"); + } + + // load the text block + FileData fileData = loadTextBlockFileData(textblockRef, template); + + // do we found the document? + if (fileData == null) { + throw new PluginException(InkassoExportAdapter.class.getSimpleName(), ERROR_CONFIG, + "invalid inkasso configuration in model event - template=" + template + " not found!"); + } + fileData.setName(targetName); + // append document + logger.info("...append new inkasso Template: " + targetName); + + document.addFileData(fileData); + + } + + /** + * This method returns a text-block ItemCollection for a specified name. + * + * @param name in attribute txtname + * + * + */ + public FileData loadTextBlockFileData(String name, String fileName) { + ItemCollection textBlockItemCollection = null; + + // load text-block by name.... + String sQuery = "(type:\"" + TYPE_TEXTBLOCK + "\" AND txtname:\"" + name + "\")"; + Collection col; + try { + // find the textblock... + col = documentService.find(sQuery, 1, 0); + if (col.size() > 0) { + textBlockItemCollection = col.iterator().next(); + // fetch the fileData... + return snapshotService.getWorkItemFile(textBlockItemCollection.getUniqueID(), fileName); + + } else { + logger.warning("Missing text-block : '" + name + "'"); + } + } catch (QueryException e) { + logger.warning("getTextBlock - invalid query: " + e.getMessage()); + } + + return null; + } + +} \ No newline at end of file diff --git a/office-alexander-logistics-app/src/main/webapp/pages/workitems/forms/inkasso.xhtml b/office-alexander-logistics-app/src/main/webapp/pages/workitems/forms/inkasso.xhtml new file mode 100644 index 0000000..4907a8e --- /dev/null +++ b/office-alexander-logistics-app/src/main/webapp/pages/workitems/forms/inkasso.xhtml @@ -0,0 +1,128 @@ + + + +

+
+
Debitor
+
+ +
+
+ + +
+
Debitor Nummer
+
+ +
+ +
+
+ + + +

Invoices

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#{message['form.invoicenumber']}#{message['form.date']}#{message['form.deadline']}#{message['form.amount']}
+ #{invoice.item['$workflowsummary']} + + + + + + + + + + + + + + + + + + + +
+ + + + Summary + + #{invoice.item['invoice.currency']} + +
+ + + + + + + +
+ + + + + + + diff --git a/templates/inkasso_template.xlsx b/templates/inkasso_template.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..3e41a73d05d6031b4498e6656d7b175577785148 GIT binary patch literal 41572 zcma%hV~lW3oAh|*9^0OKY}>YN+qP}nwr$(CZF}Z>-rddaCSP{5o&M3?Iq9UXu2fZ@ zbL1p}L689;ARqw#cx$Qv{I`br&)Ch1R@cGU%8}O9*1^)i*4C27&Dx6QUn|w|(w2jC z&>^?qC?c=J;^2l+Y~4}(wcl@mBk~7xLo5j^&A&c0SelT=S96JTtB*Zm&lgP57hyw! z&|nn>Ai@2^E)d=R-#6F$7%I~RJ9}otv2}Qem0d_{erV#f8jX)^>NExeah%#k;}SCE ztK%Jk*YdQJ58{hifYT_7)tbOfHk5Lmjsw4ShO02Jx`m#(bYn1orX6tO8Rr#Z4fZH$ z8Ni>c-;cSEc?ogWh$dDBqs?D zA$#}kvG5OWVjutjx&N^;F#lc|M<;hHW5<70Q)FE!x)eTly>ob(A}JkCnG0FF zs0A=tIz?^*H2Q=JazavR5E1^0XoCwT?bgGgFgiBOI&-cVV@NL^V+V-Nc8IjePd@$2 zCVaY^827xqu0d!hq5MYqc5M|NH+Q=|7Ohr+PQ?`-c6%Aw>{?yQrq0Y}%4bjGZwmNt z=hj`U($Zb5<(ST!5Z-d-Y|#8d{;~B4)!9H12FxPXJ+uOer1Q@#2S6bw=Ags+%Q^KTQ8PvgrfW!GpF`(fj9~ABfW~2%aYTH!SPG*Pfz4H6sQs==mfw}|By{^fN z>TaD@^;P+&mcickmR!`BWa4LDQ_YE2e=z$urHcP@6#O-y*HPp`(lXFBQRYI51v4v$ zAkm7$I@aLrGm~d_o=+W`We6dK7voAi)gn9;0PH{|YgZb`;vWd0s<@CO4XDda^^$t9 z8J15l1W5YiwXYLmBk*USHsfftizaauPH3eThswI7LKzm$NMXNo>tnK{L(yx&Rbx)W zl!7S%Qw&@Ole(NMkywAI5?E}2lwKrZ`UVF(L|(lyA=XtJ!n5fP%MEVLM+5vOeGzRg z*hMl$@yrvIP~X&;XrONJ4nlFLa%LU)aZUX;?Rbg|CY@QKX`Gbl*l1ZW{?)Tu4YaSd z;;!sBL(@)y9hr%!jgbzVSLo>IEV{%fQq_OC&=^k5Zd{c)_mC;BH&u4np49{S(1O;V zCk0;HG_Su}1>tc5TRCi|0YfQVtT<}$E!S6dS)WaH9c>MJl}c;A)%HxWNx91Eb?H#` zc(8i5Y-y>Ce&+Go_2PbS4q~U*EnQ^^p06mb$WBykHL>g*P-|@7l|EF=YR?*`&lwp1 z`Vx}`M=j#>eWnY-drnns;#*%%k`qreXK#gxamOw!?pdY5z*fQZv%QJkDpO>*uwu%9 z^iSuVweBF!T* zaI*bx5&`$`67k<@pvW)xb86e&5{od)aCe8HQ9V-a^LA;Hg+z-Q)* zLB`dDLGU_)csZS4w8_OC_OIWNfv6J10lftQHfT4=F_?h*)DXj26?QE)>)}0!@A@>RTTx``LJQg|_d1_z9@Ro*-h6L-}qyWPVdRM0N`Shd7i%^$$ z6qcA@@<&6T`Siu%_5%&J%opX^d33O`{mGvQKg~HYj~a<^M~HveF4jvHlE!Ftj@?Vg zwh0BFa!|Cv53kbQKhJ}4In$UGJn*TTfXcNZ7rAzx?pAz)@cwK*hcOizC{xJ@)mcra z^`e>E+3jQ5tW|C2`8e#=^bx(`QfBxyZTT@`@g=8=ubnHWJF0QYC^|k`^|4F;h@~#` z`;P&ELkPylSkV7tMvwn6?teBUqW@x>qnWX>ljDE5_PB)!VvQJe9m*|2LU5cX+h+{A zv(>oHHCLVlHI5Z0kRTzFv(nh7Ily|3BxKD+2zm3VCd`XcI$#u<@Q+2#jj<><8{cOF zUI&PK3=_OmfH80Z{|vqyn*GJ?>e6s}AB8F@XhVw)K$bT=;XC(y{bQ+7*B3#k$<{*q zFW>{q^r>b4z`_Ll-+-h4f586>^02zL;|3eD_pa{#{o>7_fn-a+ksoaET&#G;OoEN+ zi*!Gsn*~)ZRo-~5t~aJWe`#Z48`s~HGmX<7$6DfjPLD@#O*c=e%d8|ryeEO(!Q%)c z_jk6J-Ywc6Deqd7vMD)!39gr1yX)TcFBT5?kLn%0DJ~v<_1JG1!)0aorAnBcf(}s% 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 literal 0 HcmV?d00001 diff --git a/workflow/inkasso-1.0.0.bpmn b/workflow/inkasso-1.0.0.bpmn new file mode 100644 index 0000000..2dce343 --- /dev/null +++ b/workflow/inkasso-1.0.0.bpmn @@ -0,0 +1,840 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + application.urlindex.jsf?workitem=$uniqueid + +]]> + + + application.urlindex.jsf?workitem=$uniqueid + +]]> + + + + + + + + The linked invoice workitem will be processed by a configurable event. + + + + + + + StartEvent_1 + EventBasedGateway_1 + Task_1 + IntermediateCatchEvent_1 + IntermediateCatchEvent_18 + IntermediateCatchEvent_3 + IntermediateCatchEvent_5 + Task_6 + Task_2 + IntermediateCatchEvent_6 + EndEvent_3 + IntermediateCatchEvent_2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + home]]> + + + + + + $editor.]]> + + + false + + + + + + $editor]]> + SequenceFlow_13 + SequenceFlow_18 + + + SequenceFlow_5 + + + + + + + cdtr.name.cargosoft $modified (cdtr.number)]]> + + + true + + + + + + + + + + + + + + + + + + + + + $workflowgroup - $workflowstatus]]> + SequenceFlow_2 + SequenceFlow_6 + SequenceFlow_3 + SequenceFlow_10 + + + + SequenceFlow_1 + SequenceFlow_13 + SequenceFlow_8 + + + SequenceFlow_10 + SequenceFlow_17 + + + + + dbtr.name $modified (dbtr.number)]]> + + + + + + + + + + + + true + + + + + + + + + + + + + + + + + $workflowgroup - $workflowstatus]]> + SequenceFlow_7 + SequenceFlow_14 + SequenceFlow_1 + + + + + + cdtr.name.cargosoft $modified (cdtr.number)]]> + + + true + + + + + + + + + + + + + + + + + + + + + $workflowgroup - $workflowstatus]]> + SequenceFlow_18 + SequenceFlow_17 + + + + + + + + + + + + + Mahnwesen +]]> + + + + + + SequenceFlow_5 + SequenceFlow_7 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Inkasso Template + inkasso_template.xlsx +inkasso_numsequencenumber.xlsx + + + D2 + Person in Charge: $editor + text + + + D5 + $editor + text + + + C10 + numsequencenumber + text + + + A12 + dbtr.number + text + + + B12 + dbtr.name + text + + + E14 + invoice.currency + text + + + E10 + $modified + date + ]]> + + + + + + $editor.]]> + + + false + + + + SequenceFlow_8 + SequenceFlow_2 + + + DataOutput_3 + + + DataOutput_3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ]]> + + + + + + + + + + + + false + + + + SequenceFlow_6 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ]]> + + + + + + + + + + + + false + + + + SequenceFlow_14 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Inkasso Template + inkasso_template.xlsx +inkasso_numsequencenumber.xlsx + + + D2 + Person in Charge: $editor + text + + + D5 + $editor + text + + + C10 + numsequencenumber + text + + + A12 + dbtr.number + text + + + B12 + dbtr.name + text + + + E14 + invoice.currency + text + + + E10 + $modified + date + ]]> + + + + + + + + + false + + + + SequenceFlow_3 + + + DataOutput_2 + + + DataOutput_2 + + + + + + Der Inkasso Workflow enthält eine Liste von zugeordneten Rechnungen (item '$workitemref') + +Eine Rechnung wird über die Adapter Klasse 'InkassoAdapter' eingefügt. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/workflow/rechnungsausgang-de-1.0.2.bpmn b/workflow/rechnungsausgang-de-1.0.2.bpmn new file mode 100644 index 0000000..040c25f --- /dev/null +++ b/workflow/rechnungsausgang-de-1.0.2.bpmn @@ -0,0 +1,3104 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +<itemvalue>$workflowstatus</itemvalue> + +]]> + + + In case you have already made the payment, please disregard this notice. If you require any information regarding your account, please do not hesitate to contact us.

+

Thank you for your cooperation.

+

 

+

Kind regards
Alexander Global Logistics GmbH

+ +]]>
+
+ + + + + + + + Task_2 + ExclusiveGateway_1 + StartEvent_1 + IntermediateCatchEvent_6 + Task_5 + IntermediateCatchEvent_12 + IntermediateCatchEvent_23 + ExclusiveGateway_2 + IntermediateCatchEvent_17 + IntermediateCatchEvent_2 + IntermediateCatchEvent_3 + ExclusiveGateway_5 + EventBasedGateway_1 + IntermediateThrowEvent_8 + IntermediateCatchEvent_13 + EventBasedGateway_2 + IntermediateCatchEvent_5000-20 + IntermediateCatchEvent_1 + IntermediateCatchEvent_18 + IntermediateThrowEvent_2 + IntermediateCatchEvent_7 + IntermediateCatchEvent_5 + Task_6 + EndEvent_3 + EndEvent_2 + + + ExclusiveGateway_3 + IntermediateThrowEvent_9 + Task_1 + IntermediateThrowEvent_1 + IntermediateCatchEvent_5005-10 + Task_5005 + Task_3 + IntermediateThrowEvent_7 + IntermediateCatchEvent_4 + IntermediateCatchEvent_15 + Task_4 + IntermediateThrowEvent_4 + IntermediateCatchEvent_14 + IntermediateCatchEvent_8 + IntermediateCatchEvent_9 + IntermediateCatchEvent_16 + IntermediateCatchEvent_25 + IntermediateCatchEvent_19 + IntermediateCatchEvent_20 + IntermediateCatchEvent_21 + IntermediateCatchEvent_22 + IntermediateThrowEvent_3 + Task_7 + EndEvent_1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + home]]> + + + + + + + + + + + + false + + + + + + + + + + + + + + + + + + + SequenceFlow_32 + SequenceFlow_27 + + + + SequenceFlow_0 + SequenceFlow_21 + SequenceFlow_20 + SequenceFlow_33 + + + + SequenceFlow_0 + + + + + + + + + txtlastcomment]]> + + + + + + + + + invoice.number dbtr.number dbtr.name (invoice.currency invoice.total) ]]> + + + true + + + + + + + + + + + + + $workflowgroup - $workflowstatus]]> + SequenceFlow_38 + SequenceFlow_36 + SequenceFlow_41 + SequenceFlow_2 + SequenceFlow_24 + SequenceFlow_50 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ]]> + + + + + + + + + + + + false + + + + SequenceFlow_38 + + + + + + + + + txtlastcomment]]> + + + + + + + + + invoice.number dbtr.number dbtr.name (invoice.currency invoice.total) ]]> + + + true + + + + + + + + + + + + + + + $workflowgroup - $workflowstatus]]> + SequenceFlow_33 + SequenceFlow_14 + SequenceFlow_15 + SequenceFlow_39 + SequenceFlow_46 + SequenceFlow_37 + + + + + + + + + + + + + + + + + + + + + + + + + + + +]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ]]> + + + + + + + + + + + + false + + + + + SequenceFlow_20 + + + + + + + + + txtlastcomment]]> + + + + + + + + + invoice.number dbtr.number dbtr.name (invoice.currency invoice.total) ]]> + + + true + + + + + + + + + + + + + + + $workflowgroup - $workflowstatus]]> + SequenceFlow_52 + SequenceFlow_13 + SequenceFlow_11 + SequenceFlow_47 + + + SequenceFlow_47 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Mahnwesen]]> + + + + + + + + + + + + false + + + + SequenceFlow_21 + + + + + + + + + + + txtlastcomment]]> + + + + + + + + + invoice.number dbtr.number dbtr.name (invoice.currency invoice.total) ]]> + + + true + + + + + + + + + + + + + + $workflowgroup - $workflowstatus]]> + SequenceFlow_27 + SequenceFlow_4 + SequenceFlow_18 + SequenceFlow_34 + SequenceFlow_35 + + + + + + + + txtlastcomment]]> + + + + + + + + + invoice.number dbtr.number dbtr.name (invoice.currency invoice.total) ]]> + + + true + + + + + + + + + + + + + + + $workflowgroup - $workflowstatus]]> + SequenceFlow_59 + SequenceFlow_31 + SequenceFlow_1 + SequenceFlow_44 + SequenceFlow_16 + SequenceFlow_48 + + + SequenceFlow_51 + + + SequenceFlow_39 + SequenceFlow_19 + SequenceFlow_17 + SequenceFlow_9 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ]]> + + + + + + + + + + + + false + + + + SequenceFlow_52 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ]]> + + + + + + + + + + + + false + + + + SequenceFlow_59 + + + + + + + + + txtlastcomment]]> + + + + + + + + + invoice.number dbtr.number dbtr.name (invoice.currency invoice.total) ]]> + + + true + + + + + + + + + + + + + $workflowgroup - $workflowstatus]]> + SequenceFlow_3 + SequenceFlow_29 + SequenceFlow_43 + SequenceFlow_6 + SequenceFlow_30 + SequenceFlow_7 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ]]> + + + + + + + + + + + + false + + + + SequenceFlow_3 + + + + + + + + + + + + _subject]]> + + + + + + + + + _amount (Brutto € _amount_brutto) +_description]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + home]]> + + + + + + + + + + + + false + + + + + + + SequenceFlow_19 + SequenceFlow_5 + SequenceFlow_23 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + mahnlauf-de-1.0 +1000 +100 +/pages/workitems/workitem.jsf?id=dunning.ref +]]> + + + + + + + + + + + + false + + + + + + + + + + + + SequenceFlow_4 + + + DataOutput_1 + + + DataOutput_1 + + + + + + SequenceFlow_23 + SequenceFlow_13 + + + SequenceFlow_18 + SequenceFlow_5 + SequenceFlow_25 + SequenceFlow_45 + + + + + + + + + + cdtr.name invoice.number]]> + + + + + + + + + cdtr.name +Rechnungsnummer: invoice.number +Betrag: invoice.total invoice.currency + + +]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 +2. Dunning +]]> + + + + + + + + + + + + false + + + + + + + + SequenceFlow_24 + SequenceFlow_29 + + + + + + + + + + + + cdtr.name invoice.number]]> + + + + + + + + + cdtr.name +Rechnungsnummer: invoice.number +Betrag: invoice.total invoice.currency + + +]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 +Last Dunning]]> + + + + + + + + + + + + false + + + + + + + + SequenceFlow_30 + SequenceFlow_31 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ]]> + + + + + + + + + + + + false + + + + + + + SequenceFlow_42 + SequenceFlow_8 + + + + + SequenceFlow_42 + + + + SequenceFlow_50 + + + + + SequenceFlow_7 + + + + + SequenceFlow_8 + SequenceFlow_10 + SequenceFlow_12 + + + + + + invoice.saldo]]> + + + + + + SequenceFlow_10 + SequenceFlow_11 + + + (parseFloat(workitem['invoice.saldo'][0]) == parseFloat('0.0')) + + + + + + invoice.saldo]]> + + + + + + SequenceFlow_12 + SequenceFlow_14 + + + + + SequenceFlow_16 + + + + + SequenceFlow_17 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + home]]> + + + + + + + + + + + + false + + + + + SequenceFlow_34 + SequenceFlow_15 + + + + SequenceFlow_25 + + + + + SequenceFlow_46 + SequenceFlow_32 + + + + + + + + + + + cdtr.name invoice.number]]> + + + + + + + + + cdtr.name +Rechnungsnummer: invoice.number +Betrag: invoice.total invoice.currency + + +]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + 7 +1. Dunning + +]]> + + + + + + + + + + + + false + + + + + + + + SequenceFlow_35 + SequenceFlow_37 + SequenceFlow_36 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + mahnlauf-de-1.0 +1000 +100 +/pages/workitems/workitem.jsf?id=dunning.ref +]]> + + + + + + + + + + + + false + + + + + + + + + + + + SequenceFlow_41 + + + DataOutput_3 + + + DataOutput_3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + mahnlauf-de-1.0 +1000 +100 +/pages/workitems/workitem.jsf?id=dunning.ref +]]> + + + + + + + + + + + + false + + + + + + + + + + + + SequenceFlow_43 + + + DataOutput_4 + + + DataOutput_4 + + + + + + + + + + + cdtr.name invoice.number]]> + + + + + + + + + cdtr.name +Rechnungsnummer: invoice.number +Betrag: invoice.total invoice.currency + + +]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5]]> + + + + + + + + + + + + false + + + + + + + + SequenceFlow_1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + home + + invoice.reminder + @daily +]]> + + + + + + + + + + + + true + + + + + + + + + + + + + + + + + + + SequenceFlow_2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + home + + invoice.reminder + @daily +]]> + + + + + + + + + + + + true + + + + + + + + + + + + + + + + + + + SequenceFlow_6 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + home + + invoice.reminder + @daily +]]> + + + + + + + + + + + + true + + + + + + + + + + + + + + + + + + + SequenceFlow_44 + + + + + + + + + + txtlastcomment]]> + + + + + + + + + invoice.number dbtr.number dbtr.name (invoice.currency invoice.total) ]]> + + + true + + + + + + + + + + + + + + + $workflowgroup - $workflowstatus]]> + SequenceFlow_26 + SequenceFlow_28 + + + SequenceFlow_9 + + + + + SequenceFlow_22 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ]]> + + + + + + + + + + + + false + + + + + + + SequenceFlow_22 + SequenceFlow_26 + + + + + SequenceFlow_28 + + + + SequenceFlow_45 + + + + + + + + + + txtlastcomment]]> + + + + + + + + + invoice.number dbtr.number dbtr.name (invoice.currency invoice.total) ]]> + + + true + + + + + + + + + + + + + + + $workflowgroup - $workflowstatus]]> + SequenceFlow_49 + SequenceFlow_51 + + + + + + + + + + + SequenceFlow_48 + SequenceFlow_49 + + + DataOutput_5 + + + DataOutput_5 + + + + + + + + + Trigger über ZahlungseingangsSaldoAdapter + + + + + Triggered by MahnlaufExecuteAdapter + +Wiedervorlage wird um 7 bzw. 5 Tage erhöht + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
\ No newline at end of file