zahlungseingang

This commit is contained in:
Ralph Soika 2022-09-05 16:30:39 +02:00
parent c124d06d74
commit eb40432b74
7 changed files with 548 additions and 99 deletions

View file

@ -1,6 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<parent> <parent>
<artifactId>office-alexander-logistics</artifactId> <artifactId>office-alexander-logistics</artifactId>
@ -94,21 +93,17 @@
<exec executable="docker"> <exec executable="docker">
<arg value="build" /> <arg value="build" />
<arg value="-t" /> <arg value="-t" />
<arg <arg value="imixs/${imixs-office.applicationname}:${project.version}" />
value="imixs/${imixs-office.applicationname}:${project.version}" />
<arg value="../." /> <arg value="../." />
</exec> </exec>
<exec executable="docker"> <exec executable="docker">
<arg value="tag" /> <arg value="tag" />
<arg <arg value="imixs/${imixs-office.applicationname}:${project.version}" />
value="imixs/${imixs-office.applicationname}:${project.version}" /> <arg value="${org.imixs.kubernetes.registry}/imixs/${imixs-office.applicationname}:${project.version}" />
<arg
value="${org.imixs.kubernetes.registry}/imixs/${imixs-office.applicationname}:${project.version}" />
</exec> </exec>
<exec executable="docker"> <exec executable="docker">
<arg value="push" /> <arg value="push" />
<arg <arg value="${org.imixs.kubernetes.registry}/imixs/${imixs-office.applicationname}:${project.version}" />
value="${org.imixs.kubernetes.registry}/imixs/${imixs-office.applicationname}:${project.version}" />
</exec> </exec>
</target> </target>
</configuration> </configuration>
@ -137,9 +132,9 @@
<!-- this is relative to the pom.xml directory --> <!-- this is relative to the pom.xml directory -->
<directory>${custom.webResources}</directory> <directory>${custom.webResources}</directory>
<includes> <includes>
<include>**/WEB-INF/*</include> <include>**/WEB-INF/*</include>
<!-- include any other file types you want to filter --> <!-- include any other file types you want to filter -->
</includes> </includes>
</resource> </resource>
</webResources> </webResources>
<workDirectory>target/overlay-war-folder</workDirectory> <workDirectory>target/overlay-war-folder</workDirectory>
@ -155,6 +150,41 @@
</overlays> </overlays>
</configuration> </configuration>
</plugin> </plugin>
<plugin>
<groupId>org.imixs.maven</groupId>
<artifactId>manik-hotdeploy-maven-plugin</artifactId>
<version>2.0.0</version>
<executions>
<execution>
<phase>install</phase>
<goals>
<goal>deploy</goal>
</goals>
</execution>
</executions>
<configuration>
<!-- List Source and Target folders for Autodeploy and Hotdeploy -->
<autodeployments>
<deployment>
<!-- wildcard deployment -->
<source>target/*.{war,ear,jar}</source>
<target>../docker/deployments/</target>
<unpack>true</unpack>
</deployment>
</autodeployments>
<hotdeployments>
<deployment>
<source>src/main/webapp</source>
<target>../docker/deployments/office-alexander-logistics.war</target>
</deployment>
</hotdeployments>
</configuration>
</plugin>
</plugins> </plugins>
</build> </build>
@ -235,27 +265,27 @@
<!-- SEPA Adapter --> <!-- SEPA Adapter -->
<dependency> <dependency>
<groupId>org.imixs.workflow</groupId> <groupId>org.imixs.workflow</groupId>
<artifactId>imixs-adapters-sepa</artifactId> <artifactId>imixs-adapters-sepa</artifactId>
<scope>compile</scope> <scope>compile</scope>
</dependency> </dependency>
<!-- DATEV Adapter --> <!-- DATEV Adapter -->
<dependency> <dependency>
<groupId>org.imixs.workflow</groupId> <groupId>org.imixs.workflow</groupId>
<artifactId>imixs-adapters-datev</artifactId> <artifactId>imixs-adapters-datev</artifactId>
<scope>compile</scope> <scope>compile</scope>
</dependency> </dependency>
<!-- QR Code --> <!-- QR Code -->
<dependency> <dependency>
<groupId>org.imixs.workflow</groupId> <groupId>org.imixs.workflow</groupId>
<artifactId>imixs-adapters-qrcode</artifactId> <artifactId>imixs-adapters-qrcode</artifactId>
<scope>compile</scope> <scope>compile</scope>
</dependency> </dependency>
<!-- POI Adapter --> <!-- POI Adapter -->
<dependency> <dependency>
<groupId>org.imixs.workflow</groupId> <groupId>org.imixs.workflow</groupId>
<artifactId>imixs-adapters-poi</artifactId> <artifactId>imixs-adapters-poi</artifactId>
<scope>compile</scope> <scope>compile</scope>
</dependency> </dependency>
<!-- Imixs-ML --> <!-- Imixs-ML -->

View file

@ -19,9 +19,6 @@ import org.imixs.workflow.engine.WorkflowService;
import org.imixs.workflow.exceptions.QueryException; import org.imixs.workflow.exceptions.QueryException;
import org.imixs.workflow.faces.data.WorkflowController; import org.imixs.workflow.faces.data.WorkflowController;
import org.imixs.workflow.faces.data.WorkflowEvent; import org.imixs.workflow.faces.data.WorkflowEvent;
import org.imixs.workflow.office.forms.ChildItemController;
import org.imixs.workflow.office.forms.WorkitemLinkController;
/** /**
* Der OPListeController dient dazu eine liste aller offenen Ausgangsrechnungen * Der OPListeController dient dazu eine liste aller offenen Ausgangsrechnungen
@ -45,8 +42,6 @@ public class OPListController implements Serializable {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
public static final int TASK_ERSTELLUNG = 1000; public static final int TASK_ERSTELLUNG = 1000;
public static final String ITEM_PAYMENT_DETAILS="payment.details";
private static Logger logger = Logger.getLogger(OPListController.class.getName()); private static Logger logger = Logger.getLogger(OPListController.class.getName());
private String lastDbtrNumber = null; private String lastDbtrNumber = null;
@ -60,7 +55,8 @@ public class OPListController implements Serializable {
protected WorkflowService workflowService; protected WorkflowService workflowService;
@Inject @Inject
protected WorkitemLinkController workitemLinkController; ZahlungseingangService zahlungseingangService;
@Inject @Inject
protected DocumentService documentService; protected DocumentService documentService;
@ -129,14 +125,14 @@ public class OPListController implements Serializable {
// finally we set the 'selection' item depending on the $workitemList // finally we set the 'selection' item depending on the $workitemList
// and the payment amount form the 'payment.details' // and the payment amount form the 'payment.details'
List<String> selection = workflowController.getWorkitem().getItemValue("$workitemref"); List<String> selection = workflowController.getWorkitem().getItemValue("$workitemref");
List<ItemCollection> paymentList=explodePaymentDetails(workflowController.getWorkitem()); List<ItemCollection> paymentList = zahlungseingangService.loadPaymentDetails(workflowController.getWorkitem());
for (ItemCollection invoice : invoiceList) { for (ItemCollection invoice : invoiceList) {
if (selection.contains(invoice.getUniqueID())) { if (selection.contains(invoice.getUniqueID())) {
invoice.setItemValue("selected", true); invoice.setItemValue("selected", true);
// set amount // set amount
for (ItemCollection payment: paymentList) { for (ItemCollection payment : paymentList) {
if (invoice.getUniqueID().equals(payment.getUniqueID())) { if (invoice.getUniqueID().equals(payment.getUniqueID())) {
invoice.setItemValue("payment.amount",payment.getItemValue("payment.amount")); invoice.setItemValue("payment.amount", payment.getItemValue("payment.amount"));
break; break;
} }
} }
@ -146,7 +142,6 @@ public class OPListController implements Serializable {
return invoiceList; return invoiceList;
} }
// /** // /**
// * Liefert die Payments die mit diesem workitem verbunden sind... // * Liefert die Payments die mit diesem workitem verbunden sind...
// * @return // * @return
@ -169,30 +164,6 @@ public class OPListController implements Serializable {
// return result; // return result;
// } // }
/**
* Convert the List of ItemCollections back into a List of Map elements
*
* @param workitem
*/
@SuppressWarnings({ "rawtypes" })
protected List<ItemCollection> explodePaymentDetails(ItemCollection workitem) {
// convert current list of childItems into ItemCollection elements
ArrayList<ItemCollection> childItems = new ArrayList<ItemCollection>();
List<Object> mapOrderItems = workitem.getItemValue(ITEM_PAYMENT_DETAILS);
int pos = 1;
for (Object mapOderItem : mapOrderItems) {
if (mapOderItem instanceof Map) {
ItemCollection itemCol = new ItemCollection((Map) mapOderItem);
itemCol.replaceItemValue("numPos", pos);
childItems.add(itemCol);
pos++;
}
}
return childItems;
}
/** /**
* On Before Process we store the selected invoices in $worktiemRef * On Before Process we store the selected invoices in $worktiemRef
* *
@ -201,12 +172,11 @@ public class OPListController implements Serializable {
public void onWorkflowEvent(@Observes WorkflowEvent workflowEvent) { public void onWorkflowEvent(@Observes WorkflowEvent workflowEvent) {
if (workflowEvent == null || workflowEvent.getWorkitem() == null) { if (workflowEvent == null || workflowEvent.getWorkitem() == null) {
return; return;
} }
// store a collection of child items // store a collection of child items if you are in a Zahlungseingang
if (workflowEvent.getEventType() == WorkflowEvent.WORKITEM_BEFORE_PROCESS) { if (workflowEvent.getWorkitem().getModelVersion().startsWith("zahlungseingang")
&& workflowEvent.getEventType() == WorkflowEvent.WORKITEM_BEFORE_PROCESS) {
updateChildList(workflowEvent.getWorkitem()); updateChildList(workflowEvent.getWorkitem());
} }
} }
@ -242,7 +212,7 @@ public class OPListController implements Serializable {
// rond with 2 digits // rond with 2 digits
workitem.replaceItemValue("payment.total", Math.round(paymentTotal * 100.0) / 100.0); workitem.replaceItemValue("payment.total", Math.round(paymentTotal * 100.0) / 100.0);
// update childitems // update childitems
workitem.replaceItemValue(ITEM_PAYMENT_DETAILS, mapInvoiceItems); workitem.replaceItemValue(ZahlungseingangService.ITEM_PAYMENT_DETAILS, mapInvoiceItems);
// Update $workitemref // Update $workitemref
workitem.setItemValue("$workitemref", selectionList); workitem.setItemValue("$workitemref", selectionList);
} }
@ -263,6 +233,15 @@ public class OPListController implements Serializable {
workflowController.getWorkitem().setItemValue("dbtr.number", dbtrNumber); workflowController.getWorkitem().setItemValue("dbtr.number", dbtrNumber);
} }
/**
* Hilfsmethode delegates to ZahlungseingangServcie
* @param payment
* @return
*/
public List<ItemCollection> loadPaymentDetails(ItemCollection payment) {
return zahlungseingangService.loadPaymentDetails(payment);
}
/** /**
* Berechnet den gesammten OP Saldo * Berechnet den gesammten OP Saldo
* *
@ -278,5 +257,4 @@ public class OPListController implements Serializable {
} }
} }

View file

@ -0,0 +1,105 @@
package com.alexanderlogistics;
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.exceptions.AdapterException;
import org.imixs.workflow.exceptions.PluginException;
/**
* Der ZahlungseingangSaldoAdapter korrigiert den Saldo einer Ausgangsrechnung
* anhand der Zahlungsdaten in einem Zahlungseingangsworkflow.
* <p>
* Die verknüpften Rechnungen in einem Zahlungseingang können am Item
* $workitemref ermittelt werden.
* <p>
* Relevant für den Abgleich sin die felder:
* <ul>
* <li>invoice.currency
* <li>payment.amount
* <p>
* <code>com.alexanderlogistics.ZahlungseingangSaldoAdapter</code>
*
* @version 1.0
* @author rsoika
*/
public class ZahlungseingangSaldoAdapter implements SignalAdapter {
private static Logger logger = Logger.getLogger(ZahlungseingangSaldoAdapter.class.getName());
@Inject
ZahlungseingangService zahlungseingangService;
/**
* This method finds the outgoing invoicdes and updates the saldo
* (payment.total).
*
* @throws PluginException
*/
@Override
public ItemCollection execute(ItemCollection document, ItemCollection event)
throws AdapterException, PluginException {
updateSaldo(document);
return document;
}
/**
* Diese method hängt eine referenz der aktuellen Rechnung an den Zahlungsavis
*
* @param document
* @throws PluginException
*/
private void updateSaldo(ItemCollection document) throws PluginException {
// payment currency
String paymentCurrency = document.getItemValueString("payment.currency");
List<ItemCollection> paymentDetails = zahlungseingangService.loadPaymentDetails(document);
logger.info("......Updating " + paymentDetails.size() + " outgoing invoices....");
for (ItemCollection payment : paymentDetails) {
ItemCollection invoice = zahlungseingangService.findInvoice(payment.getUniqueID());
if (invoice != null) {
String invoiceNumber = invoice.getItemValueString("invoice.number");
String invoiceCurrency = invoice.getItemValueString("invoice.currency");
if (!invoiceCurrency.equals(paymentCurrency)) {
throw new PluginException(PluginException.class.getName(),ZahlungseingangService.ERROR_PAYMENT_BOOKING_FAILED,
"Der Zahlungseingang kann nicht verbucht werden, da die Währung " + paymentCurrency
+ " nicht mit der Währung der Rechnung " + invoiceNumber + " übereinstimmt!");
}
float invoiceSaldo = invoice.getItemValueFloat("invoice.saldo");
float paymentAmount = payment.getItemValueFloat("payment.amount");
if (Math.abs(paymentAmount) > Math.abs(invoiceSaldo)) {
throw new PluginException(PluginException.class.getName(), ZahlungseingangService.ERROR_PAYMENT_BOOKING_FAILED,
"Der Zahlungseingang kann nicht verbucht werden, da der Restsaldo der Rechnung "
+ invoiceNumber + " kleiner als der Zahlbetrag ist!");
}
invoiceSaldo=invoiceSaldo-paymentAmount;
invoice.setItemValue("invoice.saldo", invoiceSaldo);
invoice.event(ZahlungseingangService.EVENT_UPDATE_INVOICE);
zahlungseingangService.processInvoice(invoice);
} else {
throw new PluginException(PluginException.class.getName(), ZahlungseingangService.ERROR_PAYMENT_BOOKING_FAILED,
"Rechnung konnte nicht gefunden werden!");
}
}
}
}

View file

@ -0,0 +1,134 @@
/*******************************************************************************
* Imixs Workflow
* Copyright (C) 2001, 2011 Imixs Software Solutions GmbH,
* http://www.imixs.com
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You can receive a copy of the GNU General Public
* License at http://www.gnu.org/licenses/gpl.html
*
* Project:
* http://www.imixs.org
* http://java.net/projects/imixs-workflow
*
* Contributors:
* Imixs Software Solutions GmbH - initial API and implementation
* Ralph Soika - Software Developer
*******************************************************************************/
package com.alexanderlogistics;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.logging.Logger;
import javax.annotation.security.DeclareRoles;
import javax.annotation.security.RolesAllowed;
import javax.annotation.security.RunAs;
import javax.ejb.Singleton;
import javax.inject.Inject;
import org.imixs.workflow.ItemCollection;
import org.imixs.workflow.engine.DocumentService;
import org.imixs.workflow.engine.WorkflowService;
import org.imixs.workflow.exceptions.AccessDeniedException;
import org.imixs.workflow.exceptions.ModelException;
import org.imixs.workflow.exceptions.PluginException;
import org.imixs.workflow.exceptions.ProcessingErrorException;
/**
* Der ZahlungseingangService wird vom ZahlungseingangSaldoAdapter verwendet um
* Ausgangsrechnungen zu akutalisieren.
*
* @author rsoika
*
*/
@DeclareRoles({ "org.imixs.ACCESSLEVEL.NOACCESS", "org.imixs.ACCESSLEVEL.READERACCESS",
"org.imixs.ACCESSLEVEL.AUTHORACCESS", "org.imixs.ACCESSLEVEL.EDITORACCESS",
"org.imixs.ACCESSLEVEL.MANAGERACCESS" })
@RolesAllowed({ "org.imixs.ACCESSLEVEL.NOACCESS", "org.imixs.ACCESSLEVEL.READERACCESS",
"org.imixs.ACCESSLEVEL.AUTHORACCESS", "org.imixs.ACCESSLEVEL.EDITORACCESS",
"org.imixs.ACCESSLEVEL.MANAGERACCESS" })
@Singleton
@RunAs("org.imixs.ACCESSLEVEL.MANAGERACCESS")
public class ZahlungseingangService {
public static final int EVENT_UPDATE_INVOICE = 200;
public static final String ERROR_PAYMENT_BOOKING_FAILED = "PAYMENT_BOOKING_FAILED";
public static final String ITEM_PAYMENT_DETAILS = "payment.details";
@SuppressWarnings("unused")
private static Logger logger = Logger.getLogger(ZahlungseingangService.class.getName());
@Inject
DocumentService documentService;
@Inject
WorkflowService workflowService;
/**
* Diese Method sucht eine Invoice mit Manager Rechnten
*
* @throws PluginException
*/
public ItemCollection findInvoice(String id) throws PluginException {
return documentService.load(id);
}
/**
* * Diese Method processed eine Invoice mit Manager Rechnten
*
* @throws PluginException
* @throws ModelException
* @throws ProcessingErrorException
* @throws AccessDeniedException
*/
public ItemCollection processInvoice(ItemCollection invoice) throws PluginException {
try {
return workflowService.processWorkItem(invoice);
} catch (AccessDeniedException | ProcessingErrorException | PluginException | ModelException e) {
throw new PluginException(PluginException.class.getName(), ERROR_PAYMENT_BOOKING_FAILED,
"Der Rechnungs Saldo konnte nicht korrekt verbucht werden - " + e.getMessage(), e);
}
}
/**
* The method returns a List of ItemCollection holding the payment details
*
*
* Convert the List of ItemCollections back into a List of Map elements
*
* @param invoice
*/
@SuppressWarnings({ "rawtypes", "unchecked" })
public List<ItemCollection> loadPaymentDetails(ItemCollection payment) {
ArrayList<ItemCollection> childItems = new ArrayList<ItemCollection>();
List<Map> mapOrderItems = payment.getItemValue(ITEM_PAYMENT_DETAILS);
int pos = 1;
for (Object mapOderItem : mapOrderItems) {
if (mapOderItem instanceof Map) {
ItemCollection itemCol = new ItemCollection((Map) mapOderItem);
itemCol.replaceItemValue("numPos", pos);
childItems.add(itemCol);
pos++;
}
}
return childItems;
}
}

View file

@ -15,14 +15,15 @@
<table class="imixsdatatable imixs-orderitems"> <table class="imixsdatatable ">
<tr> <tr>
<th style="width: 20px;">#</th>
<th style="">Datum<span class="imixs-required"> *</span></th>
<th style="width: 100px;">Betrag</th>
<th style="">Zahlungseingang</th>
<th>Referenz</th>
<th style="width: 100px;">Betrag</th>
<th style="width: 100px;">Zahlung</th>
<th style="width: 40px;">Währung</th> <th style="width: 40px;">Währung</th>
</tr> </tr>
@ -32,23 +33,52 @@
<ui:repeat var="payment_stub" value="#{payments}"> <ui:repeat var="payment_stub" value="#{payments}">
<ui:param name="payment" <ui:param name="payment"
value="#{opListController.loadInvoice(payment_stub.getUniqueID())}"></ui:param> value="#{opListController.loadInvoice(payment_stub.getUniqueID())}"></ui:param>
<ui:param name="paymentDetails"
value="#{opListController.loadPaymentDetails(payment)}"></ui:param>
<tr> <tr>
<td><h:link outcome="/pages/workitems/workitem"> <td><h:link outcome="/pages/workitems/workitem">
#{payment.item['name']} #{payment.item['$workflowsummary']}
<f:param name="id" value="#{payment.item['$uniqueid']}" /> <f:param name="id" value="#{payment.item['$uniqueid']}" />
</h:link></td> </h:link></td>
<td>#{payment.item['payment.total']}
</td> <td><h:outputText
value="#{payment.item['name']}" /></td>
<td style="text-align: right;"><h:outputText
value="#{payment.item['payment.total']}">
<f:convertNumber minFractionDigits="2" locale="de" />
</h:outputText></td>
<!-- show payment amount of corresponding invoice entry -->
<ui:repeat var="paymentDetail" value="#{paymentDetails}">
<ui:fragment
rendered="#{paymentDetail.item['$uniqueid'] eq workitem.item['$uniqueid']}">
<td style="text-align: right;"><h:outputText
value="#{paymentDetail.item['payment.amount']}">
<f:convertNumber minFractionDigits="2" locale="de" />
</h:outputText></td>
</ui:fragment>
</ui:repeat>
<td style="text-align: right;"><h:outputText
value="#{payment.item['payment.currency']}" /></td>
</tr> </tr>
</ui:repeat> </ui:repeat>
<!-- summary --> <!-- summary -->
<tr> <tr>
<td /> <td />
<td style="text-align: right;">Summe:</td> <td />
<td style="text-align: right;font-weight:bold;">Saldo:</td>
<td class="orderlist_summary" style="text-align: right;"><h:outputText <td class="" style="text-align: right;"><h:outputText
value="#{workitem.item['invoice.total']}"> value="#{workitem.item['invoice.saldo']}">
<f:convertNumber minFractionDigits="2" locale="de" /> <f:convertNumber minFractionDigits="2" locale="de" />
</h:outputText></td> </h:outputText></td>
<td /> <td />

View file

@ -62,6 +62,7 @@
<bpmn2:flowNodeRef>ExclusiveGateway_4</bpmn2:flowNodeRef> <bpmn2:flowNodeRef>ExclusiveGateway_4</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>IntermediateThrowEvent_3</bpmn2:flowNodeRef> <bpmn2:flowNodeRef>IntermediateThrowEvent_3</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>IntermediateCatchEvent_18</bpmn2:flowNodeRef> <bpmn2:flowNodeRef>IntermediateCatchEvent_18</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>IntermediateCatchEvent_1</bpmn2:flowNodeRef>
</bpmn2:lane> </bpmn2:lane>
<bpmn2:lane id="Lane_6" name="Bereich Manager"> <bpmn2:lane id="Lane_6" name="Bereich Manager">
<bpmn2:flowNodeRef>Task_3</bpmn2:flowNodeRef> <bpmn2:flowNodeRef>Task_3</bpmn2:flowNodeRef>
@ -314,6 +315,7 @@ Bei Fragen wenden Sie sich bitte an info@imixs.com
<bpmn2:incoming>SequenceFlow_33</bpmn2:incoming> <bpmn2:incoming>SequenceFlow_33</bpmn2:incoming>
<bpmn2:incoming>SequenceFlow_20</bpmn2:incoming> <bpmn2:incoming>SequenceFlow_20</bpmn2:incoming>
<bpmn2:incoming>SequenceFlow_44</bpmn2:incoming> <bpmn2:incoming>SequenceFlow_44</bpmn2:incoming>
<bpmn2:incoming>SequenceFlow_6</bpmn2:incoming>
<bpmn2:outgoing>SequenceFlow_39</bpmn2:outgoing> <bpmn2:outgoing>SequenceFlow_39</bpmn2:outgoing>
<bpmn2:outgoing>SequenceFlow_46</bpmn2:outgoing> <bpmn2:outgoing>SequenceFlow_46</bpmn2:outgoing>
<bpmn2:outgoing>SequenceFlow_2</bpmn2:outgoing> <bpmn2:outgoing>SequenceFlow_2</bpmn2:outgoing>
@ -1513,6 +1515,78 @@ Betrag: <itemvalue>invoice.total</itemvalue> <itemvalue>invoice.currency</itemva
</bpmn2:intermediateThrowEvent> </bpmn2:intermediateThrowEvent>
<bpmn2:sequenceFlow id="SequenceFlow_58" sourceRef="Task_5005" targetRef="IntermediateThrowEvent_2"/> <bpmn2:sequenceFlow id="SequenceFlow_58" sourceRef="Task_5005" targetRef="IntermediateThrowEvent_2"/>
<bpmn2:sequenceFlow id="SequenceFlow_2" sourceRef="Task_2" targetRef="IntermediateCatchEvent_8"/> <bpmn2:sequenceFlow id="SequenceFlow_2" sourceRef="Task_2" targetRef="IntermediateCatchEvent_8"/>
<bpmn2:intermediateCatchEvent id="IntermediateCatchEvent_1" imixs:activityid="200" name="[UpdatePayment]">
<bpmn2:extensionElements>
<imixs:item name="keylogtimeformat" type="xs:string">
<imixs:value><![CDATA[2]]></imixs:value>
</imixs:item>
<imixs:item name="keyarchive" type="xs:string">
<imixs:value><![CDATA[0]]></imixs:value>
</imixs:item>
<imixs:item name="txtmailsubject" type="xs:string">
<imixs:value><![CDATA[]]></imixs:value>
</imixs:item>
<imixs:item name="keyaccessmode" type="xs:string">
<imixs:value><![CDATA[0]]></imixs:value>
</imixs:item>
<imixs:item name="keyscheduledactivity" type="xs:string">
<imixs:value><![CDATA[0]]></imixs:value>
</imixs:item>
<imixs:item name="rtfmailbody" type="xs:string">
<imixs:value><![CDATA[]]></imixs:value>
</imixs:item>
<imixs:item name="keyversion" type="xs:string">
<imixs:value><![CDATA[0]]></imixs:value>
</imixs:item>
<imixs:item name="keyaddwritefields" type="xs:string">
<imixs:value><![CDATA[$creator]]></imixs:value>
<imixs:value><![CDATA[$editor]]></imixs:value>
<imixs:value><![CDATA[process.manager]]></imixs:value>
<imixs:value><![CDATA[process.team]]></imixs:value>
</imixs:item>
<imixs:item name="numnextactivityid" type="xs:int">
<imixs:value><![CDATA[0]]></imixs:value>
</imixs:item>
<imixs:item name="keyfollowup" type="xs:string">
<imixs:value><![CDATA[2]]></imixs:value>
</imixs:item>
<imixs:item name="keypublicresult" type="xs:string">
<imixs:value><![CDATA[1]]></imixs:value>
</imixs:item>
<imixs:item name="keylogdateformat" type="xs:string">
<imixs:value><![CDATA[2]]></imixs:value>
</imixs:item>
<imixs:item name="keyownershipfields" type="xs:string">
<imixs:value><![CDATA[$editor]]></imixs:value>
<imixs:value><![CDATA[$creator]]></imixs:value>
</imixs:item>
<imixs:item name="numnextid" type="xs:int">
<imixs:value><![CDATA[5000]]></imixs:value>
</imixs:item>
<imixs:item name="txtnextprocesstree" type="xs:string">
<imixs:value><![CDATA[]]></imixs:value>
</imixs:item>
<imixs:item name="txtactivityresult" type="xs:string">
<imixs:value><![CDATA[<item name="comment" ignore="true"/>]]></imixs:value>
</imixs:item>
<imixs:item name="txtname" type="xs:string">
<imixs:value><![CDATA[Speichern]]></imixs:value>
</imixs:item>
<imixs:item name="keyownershipmode" type="xs:string">
<imixs:value><![CDATA[0]]></imixs:value>
</imixs:item>
<imixs:item name="rtfresultlog" type="xs:string">
<imixs:value><![CDATA[Zahlungseingang verbucht]]></imixs:value>
</imixs:item>
<imixs:item name="keyupdateacl" type="xs:boolean">
<imixs:value>false</imixs:value>
</imixs:item>
<imixs:item name="keymailreceiverfields" type="xs:string"/>
</bpmn2:extensionElements>
<bpmn2:documentation id="Documentation_12"><![CDATA[Zwischenspeichern]]></bpmn2:documentation>
<bpmn2:outgoing>SequenceFlow_6</bpmn2:outgoing>
</bpmn2:intermediateCatchEvent>
<bpmn2:sequenceFlow id="SequenceFlow_6" sourceRef="IntermediateCatchEvent_1" targetRef="Task_2"/>
<bpmn2:association id="Association_2" sourceRef="DataObject_2" targetRef="Task_2"/> <bpmn2:association id="Association_2" sourceRef="DataObject_2" targetRef="Task_2"/>
</bpmn2:process> </bpmn2:process>
<bpmndi:BPMNDiagram id="BPMNDiagram_1"> <bpmndi:BPMNDiagram id="BPMNDiagram_1">
@ -1753,6 +1827,12 @@ Betrag: <itemvalue>invoice.total</itemvalue> <itemvalue>invoice.currency</itemva
<dc:Bounds height="14.0" width="51.0" x="353.0" y="836.0"/> <dc:Bounds height="14.0" width="51.0" x="353.0" y="836.0"/>
</bpmndi:BPMNLabel> </bpmndi:BPMNLabel>
</bpmndi:BPMNShape> </bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_IntermediateCatchEvent_3" bpmnElement="IntermediateCatchEvent_1">
<dc:Bounds height="36.0" width="36.0" x="423.0" y="276.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_4">
<dc:Bounds height="28.0" width="51.0" x="416.0" y="312.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_1" bpmnElement="SequenceFlow_0" sourceElement="BPMNShape_StartEvent_1" targetElement="BPMNShape_ExclusiveGateway_1"> <bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_1" bpmnElement="SequenceFlow_0" sourceElement="BPMNShape_StartEvent_1" targetElement="BPMNShape_ExclusiveGateway_1">
<di:waypoint xsi:type="dc:Point" x="155.0" y="205.0"/> <di:waypoint xsi:type="dc:Point" x="155.0" y="205.0"/>
<di:waypoint xsi:type="dc:Point" x="187.0" y="205.0"/> <di:waypoint xsi:type="dc:Point" x="187.0" y="205.0"/>
@ -1986,6 +2066,12 @@ Betrag: <itemvalue>invoice.total</itemvalue> <itemvalue>invoice.currency</itemva
<di:waypoint xsi:type="dc:Point" x="342.0" y="649.0"/> <di:waypoint xsi:type="dc:Point" x="342.0" y="649.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_2"/> <bpmndi:BPMNLabel id="BPMNLabel_2"/>
</bpmndi:BPMNEdge> </bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_7" bpmnElement="SequenceFlow_6" sourceElement="BPMNShape_IntermediateCatchEvent_3" targetElement="BPMNShape_Task_5">
<di:waypoint xsi:type="dc:Point" x="441.0" y="276.0"/>
<di:waypoint xsi:type="dc:Point" x="441.0" y="213.0"/>
<di:waypoint xsi:type="dc:Point" x="418.0" y="213.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_7"/>
</bpmndi:BPMNEdge>
</bpmndi:BPMNPlane> </bpmndi:BPMNPlane>
<bpmndi:BPMNLabelStyle id="BPMNLabelStyle_1"> <bpmndi:BPMNLabelStyle id="BPMNLabelStyle_1">
<dc:Font name="arial" size="9.0"/> <dc:Font name="arial" size="9.0"/>

View file

@ -31,6 +31,7 @@
</imixs:item> </imixs:item>
</bpmn2:extensionElements> </bpmn2:extensionElements>
<bpmn2:signal id="Signal_1" name="com.alexanderlogistics.ZahlungsavisExportAdapter"/> <bpmn2:signal id="Signal_1" name="com.alexanderlogistics.ZahlungsavisExportAdapter"/>
<bpmn2:signal id="Signal_2" name="com.alexanderlogistics.ZahlungseingangSaldoAdapter"/>
<bpmn2:message id="Message_6" name="SEPA-Body"> <bpmn2:message id="Message_6" name="SEPA-Body">
<bpmn2:documentation id="Documentation_15"><![CDATA[Der folgende SEPA Lauf wurde für die Verarbeitung fertiggestellt: <bpmn2:documentation id="Documentation_15"><![CDATA[Der folgende SEPA Lauf wurde für die Verarbeitung fertiggestellt:
@ -63,6 +64,7 @@
<bpmn2:flowNodeRef>Task_1</bpmn2:flowNodeRef> <bpmn2:flowNodeRef>Task_1</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>IntermediateCatchEvent_3</bpmn2:flowNodeRef> <bpmn2:flowNodeRef>IntermediateCatchEvent_3</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>EventBasedGateway_1</bpmn2:flowNodeRef> <bpmn2:flowNodeRef>EventBasedGateway_1</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>IntermediateCatchEvent_1</bpmn2:flowNodeRef>
</bpmn2:lane> </bpmn2:lane>
</bpmn2:laneSet> </bpmn2:laneSet>
<bpmn2:intermediateCatchEvent id="IntermediateCatchEvent_5" imixs:activityid="30" name="Stornieren"> <bpmn2:intermediateCatchEvent id="IntermediateCatchEvent_5" imixs:activityid="30" name="Stornieren">
@ -217,6 +219,7 @@ result.isValid=true;
<bpmn2:documentation id="Documentation_3"><![CDATA[<textblock><itemvalue>$workflowgroup</itemvalue> - <itemvalue>$workflowstatus</itemvalue></textblock>]]></bpmn2:documentation> <bpmn2:documentation id="Documentation_3"><![CDATA[<textblock><itemvalue>$workflowgroup</itemvalue> - <itemvalue>$workflowstatus</itemvalue></textblock>]]></bpmn2:documentation>
<bpmn2:incoming>SequenceFlow_14</bpmn2:incoming> <bpmn2:incoming>SequenceFlow_14</bpmn2:incoming>
<bpmn2:incoming>SequenceFlow_4</bpmn2:incoming> <bpmn2:incoming>SequenceFlow_4</bpmn2:incoming>
<bpmn2:incoming>SequenceFlow_3</bpmn2:incoming>
<bpmn2:outgoing>SequenceFlow_1</bpmn2:outgoing> <bpmn2:outgoing>SequenceFlow_1</bpmn2:outgoing>
</bpmn2:task> </bpmn2:task>
<bpmn2:sequenceFlow id="SequenceFlow_1" sourceRef="Task_1" targetRef="EventBasedGateway_1"/> <bpmn2:sequenceFlow id="SequenceFlow_1" sourceRef="Task_1" targetRef="EventBasedGateway_1"/>
@ -494,6 +497,77 @@ result.isValid=true;
</imixs-form>]]></bpmn2:documentation> </imixs-form>]]></bpmn2:documentation>
<bpmn2:dataState id="DataState_1"/> <bpmn2:dataState id="DataState_1"/>
</bpmn2:dataObject> </bpmn2:dataObject>
<bpmn2:intermediateCatchEvent id="IntermediateCatchEvent_1" imixs:activityid="40" name="Test Adapter">
<bpmn2:extensionElements>
<imixs:item name="keylogtimeformat" type="xs:string">
<imixs:value><![CDATA[2]]></imixs:value>
</imixs:item>
<imixs:item name="keyarchive" type="xs:string">
<imixs:value><![CDATA[0]]></imixs:value>
</imixs:item>
<imixs:item name="txtmailsubject" type="xs:string">
<imixs:value><![CDATA[]]></imixs:value>
</imixs:item>
<imixs:item name="keyaccessmode" type="xs:string">
<imixs:value><![CDATA[0]]></imixs:value>
</imixs:item>
<imixs:item name="keyscheduledactivity" type="xs:string">
<imixs:value><![CDATA[0]]></imixs:value>
</imixs:item>
<imixs:item name="rtfmailbody" type="xs:string">
<imixs:value><![CDATA[]]></imixs:value>
</imixs:item>
<imixs:item name="keyversion" type="xs:string">
<imixs:value><![CDATA[0]]></imixs:value>
</imixs:item>
<imixs:item name="keyaddwritefields" type="xs:string"/>
<imixs:item name="numnextactivityid" type="xs:int">
<imixs:value><![CDATA[0]]></imixs:value>
</imixs:item>
<imixs:item name="keyfollowup" type="xs:string">
<imixs:value><![CDATA[2]]></imixs:value>
</imixs:item>
<imixs:item name="keypublicresult" type="xs:string">
<imixs:value><![CDATA[1]]></imixs:value>
</imixs:item>
<imixs:item name="keylogdateformat" type="xs:string">
<imixs:value><![CDATA[2]]></imixs:value>
</imixs:item>
<imixs:item name="keyownershipfields" type="xs:string"/>
<imixs:item name="numnextid" type="xs:int">
<imixs:value><![CDATA[5000]]></imixs:value>
</imixs:item>
<imixs:item name="txtnextprocesstree" type="xs:string">
<imixs:value><![CDATA[]]></imixs:value>
</imixs:item>
<imixs:item name="txtactivityresult" type="xs:string">
<imixs:value><![CDATA[<item name="comment" ignore="true"/>]]></imixs:value>
</imixs:item>
<imixs:item name="txtname" type="xs:string">
<imixs:value><![CDATA[Speichern]]></imixs:value>
</imixs:item>
<imixs:item name="keyownershipmode" type="xs:string">
<imixs:value><![CDATA[0]]></imixs:value>
</imixs:item>
<imixs:item name="rtfresultlog" type="xs:string">
<imixs:value><![CDATA[]]></imixs:value>
</imixs:item>
<imixs:item name="keyupdateacl" type="xs:boolean">
<imixs:value>false</imixs:value>
</imixs:item>
</bpmn2:extensionElements>
<bpmn2:documentation id="Documentation_1"><![CDATA[Zwischenspeichern]]></bpmn2:documentation>
<bpmn2:outgoing>SequenceFlow_3</bpmn2:outgoing>
<bpmn2:dataOutput id="DataOutput_1" name="Signal_1_Output"/>
<bpmn2:dataOutputAssociation id="DataOutputAssociation_1">
<bpmn2:sourceRef>DataOutput_1</bpmn2:sourceRef>
</bpmn2:dataOutputAssociation>
<bpmn2:outputSet id="OutputSet_2" name="Output Set 2">
<bpmn2:dataOutputRefs>DataOutput_1</bpmn2:dataOutputRefs>
</bpmn2:outputSet>
<bpmn2:signalEventDefinition id="SignalEventDefinition_1" signalRef="Signal_2"/>
</bpmn2:intermediateCatchEvent>
<bpmn2:sequenceFlow id="SequenceFlow_3" sourceRef="IntermediateCatchEvent_1" targetRef="Task_1"/>
<bpmn2:association id="Association_2" sourceRef="DataObject_1" targetRef="Task_1"/> <bpmn2:association id="Association_2" sourceRef="DataObject_1" targetRef="Task_1"/>
</bpmn2:process> </bpmn2:process>
<bpmndi:BPMNDiagram id="BPMNDiagram_1" name="Default Process Diagram"> <bpmndi:BPMNDiagram id="BPMNDiagram_1" name="Default Process Diagram">
@ -586,6 +660,12 @@ result.isValid=true;
<dc:Bounds height="14.0" width="28.0" x="294.0" y="238.0"/> <dc:Bounds height="14.0" width="28.0" x="294.0" y="238.0"/>
</bpmndi:BPMNLabel> </bpmndi:BPMNLabel>
</bpmndi:BPMNShape> </bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_IntermediateCatchEvent_1" bpmnElement="IntermediateCatchEvent_1">
<dc:Bounds height="36.0" width="36.0" x="440.0" y="392.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_2">
<dc:Bounds height="14.0" width="67.0" x="425.0" y="428.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_1" bpmnElement="SequenceFlow_1" sourceElement="BPMNShape_Task_1" targetElement="BPMNShape_EventBasedGateway_1"> <bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_1" bpmnElement="SequenceFlow_1" sourceElement="BPMNShape_Task_1" targetElement="BPMNShape_EventBasedGateway_1">
<di:waypoint xsi:type="dc:Point" x="400.0" y="319.0"/> <di:waypoint xsi:type="dc:Point" x="400.0" y="319.0"/>
<di:waypoint xsi:type="dc:Point" x="470.0" y="319.0"/> <di:waypoint xsi:type="dc:Point" x="470.0" y="319.0"/>
@ -652,6 +732,12 @@ result.isValid=true;
<di:waypoint xsi:type="dc:Point" x="345.0" y="294.0"/> <di:waypoint xsi:type="dc:Point" x="345.0" y="294.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_17"/> <bpmndi:BPMNLabel id="BPMNLabel_17"/>
</bpmndi:BPMNEdge> </bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_3" bpmnElement="SequenceFlow_3" sourceElement="BPMNShape_IntermediateCatchEvent_1" targetElement="BPMNShape_Task_1">
<di:waypoint xsi:type="dc:Point" x="458.0" y="392.0"/>
<di:waypoint xsi:type="dc:Point" x="458.0" y="327.0"/>
<di:waypoint xsi:type="dc:Point" x="400.0" y="327.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_7"/>
</bpmndi:BPMNEdge>
</bpmndi:BPMNPlane> </bpmndi:BPMNPlane>
<bpmndi:BPMNLabelStyle id="BPMNLabelStyle_1"> <bpmndi:BPMNLabelStyle id="BPMNLabelStyle_1">
<dc:Font name="arial" size="9.0"/> <dc:Font name="arial" size="9.0"/>