Merge branch 'inmemory-metric'
This commit is contained in:
commit
f8df34586c
33 changed files with 13188 additions and 2003 deletions
|
|
@ -1,4 +1,5 @@
|
||||||
FROM imixs/imixs-office-workflow:5.0.3-SNAPSHOT
|
FROM imixs/imixs-office-workflow:5.1.1-SNAPSHOT
|
||||||
|
#FROM imixs/imixs-office-workflow:5.0.3-SNAPSHOT
|
||||||
|
|
||||||
|
|
||||||
# Setup debug configuration
|
# Setup debug configuration
|
||||||
|
|
|
||||||
49
doc/BUSINESSPARTNER.md
Normal file
49
doc/BUSINESSPARTNER.md
Normal file
|
|
@ -0,0 +1,49 @@
|
||||||
|
# BusinessPartner
|
||||||
|
|
||||||
|
Wir haben einen Workflow für die Verwaltung von BusinessPartner.
|
||||||
|
Ein BusinessPartner wird über die bestehende Cargosoft Schnittstelle aus den Debitoren/Kreditoren automatisch importiert und synchronisiert.
|
||||||
|
|
||||||
|
In Imixs ist es dann aber möglich zusätzliche Attribute zu einem Businesspartner zu speichern. Beispielsweise:
|
||||||
|
|
||||||
|
- Zahlungsziel
|
||||||
|
- Bankverbindungen
|
||||||
|
- Emailadressen für Mahnwesen
|
||||||
|
|
||||||
|
Die Businessparnter werden zentral nur in dem Hauptsystem in Bremen importiert und verwaltet. Damit ein AGL System auf die BusinessPartner zugreifen kann wird eine Rest API Schnittstelle verwendet. Diese kann über Environmentvariablen aktiviert werden:
|
||||||
|
|
||||||
|
# Rest Service BusinessPartner API
|
||||||
|
WORKFLOW_SERVICE_ENDPOINT: "http://app:8080/api"
|
||||||
|
WORKFLOW_SERVICE_USER: "admin"
|
||||||
|
WORKFLOW_SERVICE_PASSWORD: "xxxxxxxx"
|
||||||
|
|
||||||
|
## BusinessPartner Suche
|
||||||
|
|
||||||
|
Es gibt einen Controller und ein widget um nach Business Partnern zu suchen.
|
||||||
|
|
||||||
|
<img src="images/businesspartner-widget.png" />
|
||||||
|
|
||||||
|
Z.b. kann das als Custom Part in eine Form eingebunden werden:
|
||||||
|
|
||||||
|
```xml
|
||||||
|
<item name="bpid" type="custom" path="alexander/businesspartner_search" required="true" label="Businesspartner:" />
|
||||||
|
```
|
||||||
|
|
||||||
|
Das widget legt dann automatisch die felder `bpid` und `bpidname` an.
|
||||||
|
|
||||||
|
Alternativ kann im Backend über die EJB BusinessPartnerService nach bpid gesucht werden:
|
||||||
|
|
||||||
|
```java
|
||||||
|
List<ItemCollection> resultList = businessPartnerService.search(phrase);
|
||||||
|
// oder
|
||||||
|
ItemCollection bp= businessPartnerService.getBusinessPartnerByID("BP0001");
|
||||||
|
```
|
||||||
|
|
||||||
|
# Daten Migration
|
||||||
|
|
||||||
|
\_vendor_zip_code
|
||||||
|
|
||||||
|
\_vendor_fax
|
||||||
|
|
||||||
|
(type:cargosoftkreditor) AND ($modified:[20010101 TO 20250215])
|
||||||
|
|
||||||
|
Wir müssen gundsätzlich erstmal über all $nosnapshot = true eintragen!
|
||||||
47
doc/METRICS.md
Normal file
47
doc/METRICS.md
Normal file
|
|
@ -0,0 +1,47 @@
|
||||||
|
# Metrics
|
||||||
|
|
||||||
|
**Konzept Verworfen!**
|
||||||
|
|
||||||
|
## Background:
|
||||||
|
|
||||||
|
https://blog.imixs.org/2025/02/02/business-intelligence-built-on-metrics-part-ii/
|
||||||
|
|
||||||
|
**Die Implementierung war Teil von Version 1.3.1!**
|
||||||
|
|
||||||
|
## Testing
|
||||||
|
|
||||||
|
Curl
|
||||||
|
|
||||||
|
$ curl -s http://localhost:9990/metrics
|
||||||
|
|
||||||
|
|
||||||
|
$ curl -s http://localhost:9990/metrics | grep BP4218
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
application_dbtr_balance{country="", currency="EUR",department="Import Zellulose/Holz",id="BP4218",name="Rayonier Advanced Materials",type="dbtr"} 60911.28
|
||||||
|
application_dbtr_balance{country="US",currency="EUR",department="Import Zellulose/Holz",id="BP4218",name="Rayonier Advanced Materials",type="dbtr"} 257955.41
|
||||||
|
|
||||||
|
|
||||||
|
application_dbtr_sales{country="", currency="EUR",department="Import Zellulose/Holz",id="BP4218",name="Rayonier Advanced Materials",type="dbtr"} 60911.28
|
||||||
|
application_dbtr_sales{country="US", currency="EUR",department="Import Zellulose/Holz",id="BP4218",name="Rayonier Advanced Materials",type="dbtr"} 279028.91
|
||||||
|
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
Rayonier Advanced Materials
|
||||||
|
|
||||||
|
Debitor 74218
|
||||||
|
|
||||||
|
293.535,19 EUR
|
||||||
|
|
||||||
|
Metric saldo: 318866.69
|
||||||
|
|
||||||
|
# Jetzt berechnen wir neu...
|
||||||
|
|
||||||
|
https://alexander-logistics.office-workflow.de/api/metrics/dbtr/rebuild
|
||||||
|
|
||||||
|
application_dbtr_balance{country="", currency="EUR",department="Import Zellulose/Holz",id="BP4218",name="Rayonier Advanced Materials",type="dbtr"} 60911.28
|
||||||
|
application_dbtr_balance{country="US",currency="EUR",department="Import Zellulose/Holz",id="BP4218",name="Rayonier Advanced Materials",type="dbtr"} 364457.85
|
||||||
|
application_dbtr_sales{country="", currency="EUR",department="Import Zellulose/Holz",id="BP4218",name="Rayonier Advanced Materials",type="dbtr"} 60911.28
|
||||||
|
application_dbtr_sales{country="US", currency="EUR",department="Import Zellulose/Holz",id="BP4218",name="Rayonier Advanced Materials",type="dbtr"} 364457.85
|
||||||
BIN
doc/images/businesspartner-widget.png
Normal file
BIN
doc/images/businesspartner-widget.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 7.5 KiB |
|
|
@ -36,10 +36,15 @@ services:
|
||||||
#OCR_PDF_MODE: "OCR_ONLY | TEXT_ONLY | TEXT_AND_OCR (default)"
|
#OCR_PDF_MODE: "OCR_ONLY | TEXT_ONLY | TEXT_AND_OCR (default)"
|
||||||
OCR_PDF_MODE: "OCR_ONLY"
|
OCR_PDF_MODE: "OCR_ONLY"
|
||||||
|
|
||||||
|
# Rest Service BusinessPartner API
|
||||||
|
WORKFLOW_SERVICE_ENDPOINT: "http://app:8080/api"
|
||||||
|
WORKFLOW_SERVICE_USER: "admin"
|
||||||
|
WORKFLOW_SERVICE_PASSWORD: "adminadmin"
|
||||||
|
|
||||||
LLM_SERVICE_ENDPOINT_USER: "admin"
|
LLM_SERVICE_ENDPOINT_USER: "admin"
|
||||||
LLM_SERVICE_ENDPOINT_PASSWORD: "imixs4.null"
|
LLM_SERVICE_ENDPOINT_PASSWORD: "imixs4.null"
|
||||||
|
|
||||||
METRICS_ENABLED: "true"
|
METRICS_ENABLED: "false"
|
||||||
|
|
||||||
ports:
|
ports:
|
||||||
- "8080:8080"
|
- "8080:8080"
|
||||||
|
|
@ -100,18 +105,18 @@ services:
|
||||||
EXIM_PASSWORD: "www149.your-server.de:webmaster@imixs.com:$MAILPASSWORD"
|
EXIM_PASSWORD: "www149.your-server.de:webmaster@imixs.com:$MAILPASSWORD"
|
||||||
EXIM_ALLOWED_SENDERS: "10.0.0.0/8:172.18.0.0/12:192.168.0.0/16"
|
EXIM_ALLOWED_SENDERS: "10.0.0.0/8:172.18.0.0/12:192.168.0.0/16"
|
||||||
|
|
||||||
prometheus:
|
# prometheus:
|
||||||
image: prom/prometheus:latest
|
# image: prom/prometheus:latest
|
||||||
ports:
|
# ports:
|
||||||
- "9090:9090"
|
# - "9090:9090"
|
||||||
volumes:
|
# volumes:
|
||||||
- ./docker/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
|
# - ./docker/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
|
||||||
- prometheusdata:/prometheus/
|
# - prometheusdata:/prometheus/
|
||||||
|
|
||||||
grafana:
|
# grafana:
|
||||||
image: grafana/grafana:latest
|
# image: grafana/grafana:latest
|
||||||
ports:
|
# ports:
|
||||||
- "3000:3000"
|
# - "3000:3000"
|
||||||
|
|
||||||
volumes:
|
volumes:
|
||||||
dbdata:
|
dbdata:
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
<parent>
|
<parent>
|
||||||
<artifactId>office-alexander-logistics</artifactId>
|
<artifactId>office-alexander-logistics</artifactId>
|
||||||
<groupId>com.alexander-logistics</groupId>
|
<groupId>com.alexander-logistics</groupId>
|
||||||
<version>1.3.1</version>
|
<version>1.3.2</version>
|
||||||
</parent>
|
</parent>
|
||||||
<artifactId>office-alexander-logistics-app</artifactId>
|
<artifactId>office-alexander-logistics-app</artifactId>
|
||||||
<packaging>war</packaging>
|
<packaging>war</packaging>
|
||||||
|
|
|
||||||
|
|
@ -84,11 +84,17 @@ public class AGLAnalyticControllerDebitor implements Serializable {
|
||||||
String chartData = "";
|
String chartData = "";
|
||||||
|
|
||||||
public void onEvent(@Observes AnalyticEvent event) {
|
public void onEvent(@Observes AnalyticEvent event) {
|
||||||
if (!"workitem".equals(event.getWorkitem().getType())
|
if (!"workitem".equals(event.getWorkitem().getType())) {
|
||||||
|| !event.getWorkitem().getModelVersion().startsWith("analyse-debitor")) {
|
|
||||||
// no op
|
// no op
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!event.getWorkitem().getModelVersion().startsWith("businesspartner")
|
||||||
|
&& !event.getWorkitem().getModelVersion().startsWith("analyse-debitor")) {
|
||||||
|
// no op
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
String dbtrNumber = event.getWorkitem().getItemValueString("dbtr.number");
|
String dbtrNumber = event.getWorkitem().getItemValueString("dbtr.number");
|
||||||
String dbtrNumberLast = event.getWorkitem().getItemValueString("dbtr.number.last");
|
String dbtrNumberLast = event.getWorkitem().getItemValueString("dbtr.number.last");
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -23,49 +23,149 @@
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
package com.alexanderlogistics;
|
package com.alexanderlogistics;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
|
import java.io.StringWriter;
|
||||||
|
import java.io.Writer;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Iterator;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
|
import java.util.regex.Matcher;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
import org.imixs.workflow.ItemCollection;
|
import org.imixs.workflow.ItemCollection;
|
||||||
import org.imixs.workflow.engine.DocumentService;
|
import org.imixs.workflow.engine.DocumentService;
|
||||||
import org.imixs.workflow.exceptions.AccessDeniedException;
|
import org.imixs.workflow.exceptions.AccessDeniedException;
|
||||||
|
import org.imixs.workflow.exceptions.QueryException;
|
||||||
import org.imixs.workflow.faces.data.WorkflowEvent;
|
import org.imixs.workflow.faces.data.WorkflowEvent;
|
||||||
|
|
||||||
import jakarta.ejb.EJB;
|
import jakarta.enterprise.context.ConversationScoped;
|
||||||
import jakarta.enterprise.event.Observes;
|
import jakarta.enterprise.event.Observes;
|
||||||
import jakarta.faces.view.ViewScoped;
|
import jakarta.faces.context.FacesContext;
|
||||||
|
import jakarta.inject.Inject;
|
||||||
import jakarta.inject.Named;
|
import jakarta.inject.Named;
|
||||||
|
import jakarta.json.Json;
|
||||||
|
import jakarta.json.JsonObject;
|
||||||
|
import jakarta.json.JsonObjectBuilder;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Der BusinessPartnerController stellt methoden für die BusinessPartner Forms
|
* Der BusinessPartnerController stellt Methoden für die BusinessPartner Forms
|
||||||
* bereit.
|
* sowie für die das Suche-Widget 'businesspartner_search' bereit.
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
* @author rsoika
|
* @author rsoika
|
||||||
* @version 1.0
|
* @version 1.0
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@Named
|
@Named
|
||||||
@ViewScoped
|
@ConversationScoped
|
||||||
public class BusinessPartnerController implements Serializable {
|
public class BusinessPartnerController implements Serializable {
|
||||||
|
|
||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
protected List<ItemCollection> ibanList = null;
|
protected List<ItemCollection> ibanList = null;
|
||||||
|
protected List<ItemCollection> invoicesOut = null;
|
||||||
|
protected List<ItemCollection> invoicesIn = null;
|
||||||
|
protected List<ItemCollection> dunnings = null;
|
||||||
|
|
||||||
@EJB
|
@Inject
|
||||||
DocumentService documentService;
|
DocumentService documentService;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
BusinessPartnerService businessPartnerService;
|
||||||
|
|
||||||
|
private List<BusinessPartnerSearchEntry> searchResult = null;
|
||||||
|
|
||||||
private static Logger logger = Logger.getLogger(BusinessPartnerController.class.getName());
|
private static Logger logger = Logger.getLogger(BusinessPartnerController.class.getName());
|
||||||
|
|
||||||
|
public List<ItemCollection> getInvoicesOut() {
|
||||||
|
if (invoicesOut == null) {
|
||||||
|
invoicesOut = new ArrayList<>();
|
||||||
|
}
|
||||||
|
return invoicesOut;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<ItemCollection> getInvoicesIn() {
|
||||||
|
if (invoicesIn == null) {
|
||||||
|
invoicesIn = new ArrayList<>();
|
||||||
|
}
|
||||||
|
return invoicesIn;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<ItemCollection> getDunnings() {
|
||||||
|
if (dunnings == null) {
|
||||||
|
dunnings = new ArrayList<>();
|
||||||
|
}
|
||||||
|
return dunnings;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method searches a text phrase within the list of DATEV kreditoren
|
||||||
|
* <p>
|
||||||
|
* JSF Integration:
|
||||||
|
*
|
||||||
|
* {@code
|
||||||
|
<h:commandScript name="datevSearch" action=
|
||||||
|
* "#{datevSearchController.searchCdtr()}"
|
||||||
|
* render="autocomplete-resultlist-datev" onevent="autocompleteShowResult" />
|
||||||
|
* }
|
||||||
|
*/
|
||||||
|
public void search(String regexPattern) {
|
||||||
|
List<ItemCollection> resultList = null;
|
||||||
|
searchResult = new ArrayList<BusinessPartnerSearchEntry>();
|
||||||
|
// get the param from faces context....
|
||||||
|
FacesContext fc = FacesContext.getCurrentInstance();
|
||||||
|
String phrase = fc.getExternalContext().getRequestParameterMap().get("phrase");
|
||||||
|
if (phrase == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
logger.fine("search prase '" + phrase + "'");
|
||||||
|
if (phrase == null || phrase.length() < 2) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
logger.fine("search for=" + phrase);
|
||||||
|
resultList = businessPartnerService.search(phrase);
|
||||||
|
// Compile the regex pattern
|
||||||
|
logger.fine("regex=" + regexPattern);
|
||||||
|
Pattern pattern = null;
|
||||||
|
if (regexPattern != null && !regexPattern.isEmpty()) {
|
||||||
|
pattern = Pattern.compile(regexPattern);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Filter by Regex and convert ItemCollection into a BusinessPartnerSearchEntry
|
||||||
|
for (ItemCollection businessPartner : resultList) {
|
||||||
|
String name = businessPartner.getItemValueString("name");
|
||||||
|
// Prüfen, ob der name der Regex entspricht
|
||||||
|
if (pattern != null) {
|
||||||
|
Matcher matcher = pattern.matcher(name);
|
||||||
|
if (!matcher.matches()) {
|
||||||
|
// Kein passendes Konto
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
String display = businessPartner.getItemValueString("$workflowsummary");
|
||||||
|
|
||||||
|
display = display.replace("\"", "");
|
||||||
|
display = display.replace("'", "");
|
||||||
|
|
||||||
|
searchResult.add(new BusinessPartnerSearchEntry(name, display, buildJsonData(businessPartner)));
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Die Resultliste wird als eine Liste einen Arrays zurückgegeben. Der Erste
|
||||||
|
* Eintrag
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public List<BusinessPartnerSearchEntry> getSearchResult() {
|
||||||
|
return searchResult;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* WorkflowEvent listener to convert the IBAN child list embeded HashMaps into
|
* WorkflowEvent listener to convert the IBAN child list embeded HashMaps into
|
||||||
* ItemCollections and
|
* ItemCollections and reconvert them before processing
|
||||||
* reconvert them before processing
|
|
||||||
*
|
*
|
||||||
* @param workflowEvent
|
* @param workflowEvent
|
||||||
* @throws AccessDeniedException
|
* @throws AccessDeniedException
|
||||||
|
|
@ -74,24 +174,64 @@ public class BusinessPartnerController implements Serializable {
|
||||||
|
|
||||||
int eventType = workflowEvent.getEventType();
|
int eventType = workflowEvent.getEventType();
|
||||||
ItemCollection workitem = workflowEvent.getWorkitem();
|
ItemCollection workitem = workflowEvent.getWorkitem();
|
||||||
if (workitem == null) {
|
if (workitem == null || !workitem.getModelVersion().startsWith("businesspartner-")) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// reset orderItems if workItem has changed
|
// reset orderItems if workItem has changed
|
||||||
if (WorkflowEvent.WORKITEM_CHANGED == eventType || WorkflowEvent.WORKITEM_CREATED == eventType) {
|
if (WorkflowEvent.WORKITEM_CHANGED == eventType || WorkflowEvent.WORKITEM_CREATED == eventType) {
|
||||||
// reset state
|
// reset state
|
||||||
explodeIBANList(workitem);
|
ibanList = BusinessPartnerService.explodeBanks(workitem);
|
||||||
|
loadStats(workitem);
|
||||||
}
|
}
|
||||||
|
|
||||||
// before the workitem is saved we update the field txtOrderItems
|
// before the workitem is saved we update the field txtOrderItems
|
||||||
if (WorkflowEvent.WORKITEM_BEFORE_PROCESS == eventType) {
|
if (WorkflowEvent.WORKITEM_BEFORE_PROCESS == eventType) {
|
||||||
implodeIBANList(workitem);
|
BusinessPartnerService.implodeBanks(workitem, ibanList);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (WorkflowEvent.WORKITEM_AFTER_PROCESS == eventType) {
|
if (WorkflowEvent.WORKITEM_AFTER_PROCESS == eventType) {
|
||||||
// reset state
|
// reset state
|
||||||
explodeIBANList(workitem);
|
ibanList = BusinessPartnerService.explodeBanks(workitem);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Hilfsmethode die die offenen Rechnungen läd. Wird von WorktiemChanged Event
|
||||||
|
* aufgerufen.
|
||||||
|
*
|
||||||
|
* @param workitem
|
||||||
|
*/
|
||||||
|
private void loadStats(ItemCollection workitem) {
|
||||||
|
|
||||||
|
try {
|
||||||
|
// Ausgangsrechnungen
|
||||||
|
String dbtrNumber = workitem.getItemValueString("dbtr.number");
|
||||||
|
if (!dbtrNumber.isEmpty()) {
|
||||||
|
if (dbtrNumber.startsWith("D")) {
|
||||||
|
dbtrNumber = dbtrNumber.substring(1);
|
||||||
|
}
|
||||||
|
String query = "(type:workitem) AND ($modelversion:rechnungsausgang-*) "
|
||||||
|
+ " AND (dbtr.number:" + dbtrNumber + ")";
|
||||||
|
invoicesOut = documentService.findStubs(query, 999, 0, "invoice.number", false);
|
||||||
|
|
||||||
|
// Mahnungen
|
||||||
|
query = "(type:workitem) AND ($modelversion:mahnlauf-*) "
|
||||||
|
+ " AND (dbtr.number:" + dbtrNumber + ")";
|
||||||
|
dunnings = documentService.findStubs(query, 999, 0, "invoice.number", false);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Eingangsrechnungen
|
||||||
|
String cdtrNumber = workitem.getItemValueString("cdtr.number");
|
||||||
|
if (!cdtrNumber.isEmpty()) {
|
||||||
|
String query = "(type:workitem) AND ($modelversion:rechnungseingang-*) "
|
||||||
|
+ " AND (cdtr.number:" + cdtrNumber + ")";
|
||||||
|
invoicesIn = documentService.findStubs(query, 999, 0, "invoice.number", false);
|
||||||
|
}
|
||||||
|
|
||||||
|
} catch (QueryException e) {
|
||||||
|
logger.severe("failed to load stats: " + e.getMessage());
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
@ -113,10 +253,10 @@ public class BusinessPartnerController implements Serializable {
|
||||||
*
|
*
|
||||||
* @param name - name of dbtr
|
* @param name - name of dbtr
|
||||||
*/
|
*/
|
||||||
public void removeIBAN(String name) {
|
public void removeIBAN(String id) {
|
||||||
if (name != null && ibanList != null) {
|
if (id != null && ibanList != null) {
|
||||||
for (ItemCollection cdtr : ibanList) {
|
for (ItemCollection cdtr : ibanList) {
|
||||||
if (name.equals(cdtr.getItemValueString("name"))) {
|
if (id.equals(cdtr.getItemValueString("id"))) {
|
||||||
ibanList.remove(cdtr);
|
ibanList.remove(cdtr);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
@ -124,36 +264,50 @@ public class BusinessPartnerController implements Serializable {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void implodeIBANList(ItemCollection workitem) {
|
/**
|
||||||
List<Map> mapOrderItems = new ArrayList();
|
* Hilfsmethode die eine JSON Struktur mit allen relevanten Daten für einen
|
||||||
if (this.ibanList != null) {
|
* BusinessPartner erzeugt.
|
||||||
logger.fine("Convert child items into Map...");
|
*
|
||||||
Iterator<?> var3 = this.ibanList.iterator();
|
* @return
|
||||||
|
*/
|
||||||
|
private String buildJsonData(ItemCollection businessPartner) {
|
||||||
|
JsonObjectBuilder objectBuilder = Json.createObjectBuilder(). //
|
||||||
|
add("name", jsonVal(businessPartner.getItemValueString("name"))). //
|
||||||
|
add("cdtr.number", jsonVal(businessPartner.getItemValueString("cdtr.number"))). //
|
||||||
|
add("dbtr.number", jsonVal(businessPartner.getItemValueString("dbtr.number"))). //
|
||||||
|
add("partner.name", jsonVal(businessPartner.getItemValueString("partner.name")));
|
||||||
|
|
||||||
while (var3.hasNext()) {
|
// get iban list
|
||||||
ItemCollection orderItem = (ItemCollection) var3.next();
|
// {iban=[Dxxxxxx1], name=[Bank 1], id=[bank1], bic=[CITIDEFF]}
|
||||||
mapOrderItems.add(orderItem.getAllItems());
|
ibanList = BusinessPartnerService.getBanks(businessPartner);
|
||||||
}
|
int i = 1;
|
||||||
|
for (ItemCollection iban : ibanList) {
|
||||||
workitem.replaceItemValue("partner.iban.list", mapOrderItems);
|
objectBuilder.add("iban" + 1, jsonVal(iban.getItemValueString("iban"))). //
|
||||||
|
add("bic" + 1, jsonVal(iban.getItemValueString("bic")));//
|
||||||
}
|
}
|
||||||
|
|
||||||
|
JsonObject jsonObject = objectBuilder.build();
|
||||||
|
|
||||||
|
String jsonString = "{}";
|
||||||
|
try (Writer writer = new StringWriter()) {
|
||||||
|
Json.createWriter(writer).write(jsonObject);
|
||||||
|
jsonString = writer.toString();
|
||||||
|
} catch (IOException e) {
|
||||||
|
logger.warning("Unable to build json structure");
|
||||||
|
}
|
||||||
|
return jsonString;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void explodeIBANList(ItemCollection workitem) {
|
/**
|
||||||
this.ibanList = new ArrayList();
|
* Helper method to remove " and ' characters - causing problems
|
||||||
List<Object> mapOrderItems = workitem.getItemValue("partner.iban.list");
|
*
|
||||||
Iterator<?> var4 = mapOrderItems.iterator();
|
* @param val
|
||||||
while (var4.hasNext()) {
|
* @return
|
||||||
Object mapOderItem = var4.next();
|
*/
|
||||||
if (mapOderItem instanceof Map) {
|
public static String jsonVal(String val) {
|
||||||
ItemCollection itemCol = new ItemCollection((Map) mapOderItem);
|
val = val.replace("\"", "");
|
||||||
|
val = val.replace("'", "");
|
||||||
this.ibanList.add(itemCol);
|
return val;
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,48 @@
|
||||||
|
package com.alexanderlogistics;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Diese Kleine Hilfsklasse dient als DTO für die Übertragugn eines
|
||||||
|
* Sucheregenisses nach kreditoren an das Frontend. Die Klasse besteht aus einem
|
||||||
|
* Key, einer DisplayZeile für die Darstellung und einen JSON String der
|
||||||
|
* beliebige Daten enthalten kann.
|
||||||
|
*
|
||||||
|
* @author rsoika
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class BusinessPartnerSearchEntry {
|
||||||
|
|
||||||
|
private String key;
|
||||||
|
private String display;
|
||||||
|
private String data;
|
||||||
|
|
||||||
|
public BusinessPartnerSearchEntry(String key, String display, String data) {
|
||||||
|
super();
|
||||||
|
this.key = key;
|
||||||
|
this.display = display;
|
||||||
|
this.data = data;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getKey() {
|
||||||
|
return key;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setKey(String key) {
|
||||||
|
this.key = key;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDisplay() {
|
||||||
|
return display;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDisplay(String display) {
|
||||||
|
this.display = display;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getData() {
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setData(String data) {
|
||||||
|
this.data = data;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,224 @@
|
||||||
|
/*******************************************************************************
|
||||||
|
* 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.Collections;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Optional;
|
||||||
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
|
import org.eclipse.microprofile.config.inject.ConfigProperty;
|
||||||
|
import org.imixs.workflow.ItemCollection;
|
||||||
|
import org.imixs.workflow.ItemCollectionComparator;
|
||||||
|
import org.imixs.workflow.engine.DocumentService;
|
||||||
|
import org.imixs.workflow.engine.index.SchemaService;
|
||||||
|
|
||||||
|
import jakarta.annotation.PostConstruct;
|
||||||
|
import jakarta.annotation.security.DeclareRoles;
|
||||||
|
import jakarta.annotation.security.RolesAllowed;
|
||||||
|
import jakarta.annotation.security.RunAs;
|
||||||
|
import jakarta.ejb.Singleton;
|
||||||
|
import jakarta.inject.Inject;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Der BusinessPartnerService stellt Methoden für den Zugriff auf Business
|
||||||
|
* Partner bereit.
|
||||||
|
*
|
||||||
|
* @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 BusinessPartnerService {
|
||||||
|
|
||||||
|
public static final int MAX_SEARCH_RESULT = 100;
|
||||||
|
public static final String ITEM_IBAN_LIST = "partner.bank.list";
|
||||||
|
public static final String WORKFLOW_SERVICE_ENDPOINT = "workflow.service.endpoint";
|
||||||
|
public static final String WORKFLOW_SERVICE_USER = "workflow.service.user";
|
||||||
|
public static final String WORKFLOW_SERVICE_PASSWORD = "workflow.service.password";
|
||||||
|
|
||||||
|
private static Logger logger = Logger.getLogger(BusinessPartnerService.class.getName());
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
@ConfigProperty(name = WORKFLOW_SERVICE_ENDPOINT)
|
||||||
|
Optional<String> workflowServiceEndpoint;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
@ConfigProperty(name = WORKFLOW_SERVICE_USER)
|
||||||
|
Optional<String> workflowServiceUser;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
@ConfigProperty(name = WORKFLOW_SERVICE_PASSWORD)
|
||||||
|
Optional<String> workflowServicePassword;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
DocumentService documentService;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
SchemaService schemaService;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initialize the rest clients
|
||||||
|
*/
|
||||||
|
@PostConstruct
|
||||||
|
public void init() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Diese Methode sucht einen Business Partner anhand seiner BPID
|
||||||
|
*
|
||||||
|
* @param bpid
|
||||||
|
* - business partner id phrase
|
||||||
|
* @return - matching business partner
|
||||||
|
*/
|
||||||
|
public ItemCollection getBusinessPartnerByID(String bpid) {
|
||||||
|
if (bpid == null || bpid.isEmpty()) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
List<ItemCollection> result;
|
||||||
|
try {
|
||||||
|
String sQuery = "(type:\"workitem\" OR type:\"workitemarchive\" ) AND ($modelversion:businesspartner-*)";
|
||||||
|
sQuery += " AND (name:" + bpid.trim() + ")";
|
||||||
|
logger.finest("SearchQuery= " + sQuery);
|
||||||
|
result = documentService.find(sQuery, 1, 0);
|
||||||
|
if (result.size() > 0) {
|
||||||
|
return result.get(0);
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
logger.warning(" lucene error - " + e.getMessage());
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Diese Methode sucht Business Partner anhand einer Suchphrase
|
||||||
|
*
|
||||||
|
* @param phrase
|
||||||
|
* - search phrase
|
||||||
|
* @return - list of matching business partners
|
||||||
|
*/
|
||||||
|
public List<ItemCollection> search(String phrase) {
|
||||||
|
|
||||||
|
List<ItemCollection> searchResult = new ArrayList<ItemCollection>();
|
||||||
|
if (phrase == null || phrase.isEmpty()) {
|
||||||
|
return searchResult;
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
phrase = phrase.trim();
|
||||||
|
// phrase = LuceneSearchService.escapeSearchTerm(phrase);
|
||||||
|
phrase = schemaService.normalizeSearchTerm(phrase);
|
||||||
|
String sQuery = "(type:\"workitem\" OR type:\"workitemarchive\") AND ($modelversion:businesspartner-*)";
|
||||||
|
sQuery += " AND (" + phrase + "*)";
|
||||||
|
|
||||||
|
logger.finest("SearchQuery= " + sQuery);
|
||||||
|
|
||||||
|
searchResult = documentService.find(sQuery, MAX_SEARCH_RESULT, 0);
|
||||||
|
} catch (Exception e) {
|
||||||
|
logger.warning(" lucene error - " + e.getMessage());
|
||||||
|
}
|
||||||
|
|
||||||
|
// sort by txtname..
|
||||||
|
Collections.sort(searchResult, new ItemCollectionComparator("$workflowsummary", true));
|
||||||
|
return searchResult;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Packt die Liste der Bank Details (ItemCollections) in ein Workitem
|
||||||
|
*
|
||||||
|
* @param workitem
|
||||||
|
*/
|
||||||
|
public static void implodeBanks(ItemCollection workitem, List<ItemCollection> ibanList) {
|
||||||
|
List<Map> mapOrderItems = new ArrayList();
|
||||||
|
if (ibanList != null) {
|
||||||
|
logger.fine("Convert child items into Map...");
|
||||||
|
Iterator<?> var3 = ibanList.iterator();
|
||||||
|
|
||||||
|
while (var3.hasNext()) {
|
||||||
|
ItemCollection orderItem = (ItemCollection) var3.next();
|
||||||
|
mapOrderItems.add(orderItem.getAllItems());
|
||||||
|
}
|
||||||
|
|
||||||
|
workitem.replaceItemValue(BusinessPartnerService.ITEM_IBAN_LIST, mapOrderItems);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Enpackt die iban Map Liste von eiem Worktiem in eine Liste von ItemCollection
|
||||||
|
*
|
||||||
|
* @param workitem
|
||||||
|
*/
|
||||||
|
public static List<ItemCollection> explodeBanks(ItemCollection workitem) {
|
||||||
|
List<ItemCollection> ibanList = new ArrayList();
|
||||||
|
List<Object> mapOrderItems = workitem.getItemValue(BusinessPartnerService.ITEM_IBAN_LIST);
|
||||||
|
Iterator<?> var4 = mapOrderItems.iterator();
|
||||||
|
while (var4.hasNext()) {
|
||||||
|
Object mapOderItem = var4.next();
|
||||||
|
if (mapOderItem instanceof Map) {
|
||||||
|
ItemCollection itemCol = new ItemCollection((Map) mapOderItem);
|
||||||
|
|
||||||
|
ibanList.add(itemCol);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return ibanList;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Liefert die ChildItems mit den IBAN daten
|
||||||
|
*
|
||||||
|
* @param workitem
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static List<ItemCollection> getBanks(ItemCollection workitem) {
|
||||||
|
List<ItemCollection> result = new ArrayList<>();
|
||||||
|
List<Object> mapOrderItems = workitem.getItemValue(BusinessPartnerService.ITEM_IBAN_LIST);
|
||||||
|
Iterator<?> var4 = mapOrderItems.iterator();
|
||||||
|
while (var4.hasNext()) {
|
||||||
|
Object mapOderItem = var4.next();
|
||||||
|
if (mapOderItem instanceof Map) {
|
||||||
|
ItemCollection itemCol = new ItemCollection((Map) mapOderItem);
|
||||||
|
result.add(itemCol);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -8,9 +8,6 @@ import java.util.Map;
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
import org.imixs.workflow.ItemCollection;
|
import org.imixs.workflow.ItemCollection;
|
||||||
import org.imixs.workflow.exceptions.PluginException;
|
|
||||||
|
|
||||||
import com.alexanderlogistics.metrics.MetricDataService;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Hilfsmethoden für die Berechnung und Validierung von Ein und
|
* Hilfsmethoden für die Berechnung und Validierung von Ein und
|
||||||
|
|
@ -185,30 +182,6 @@ public class InvoiceUtil {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Diese Hilfsmethode berechnet die BusinessPartnerID aus einer Invoice
|
|
||||||
*
|
|
||||||
* @param Invoice
|
|
||||||
* @return
|
|
||||||
* @throws PluginException
|
|
||||||
*/
|
|
||||||
public static String getBPId(ItemCollection invoice) throws PluginException {
|
|
||||||
String key = "";
|
|
||||||
if (isCreditorInvoice(invoice)) {
|
|
||||||
// key ist cdtr.number
|
|
||||||
key = invoice.getItemValueString("cdtr.number");
|
|
||||||
} else {
|
|
||||||
// key ist dbtr.number
|
|
||||||
key = invoice.getItemValueString("dbtr.number");
|
|
||||||
}
|
|
||||||
if (key.isEmpty()) {
|
|
||||||
throw new PluginException(MetricDataService.class.getName(), ERROR_INVALID_INVOICEDATA,
|
|
||||||
"Failed to create metrics - missing dbtr/cdtr number!");
|
|
||||||
}
|
|
||||||
|
|
||||||
return InvoiceUtil.buildBPID(key);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Diese Hilfmethode berechnet die BusinessPartner Namen aus einer Invoice
|
* Diese Hilfmethode berechnet die BusinessPartner Namen aus einer Invoice
|
||||||
*
|
*
|
||||||
|
|
|
||||||
|
|
@ -63,11 +63,15 @@ import org.w3c.dom.Node;
|
||||||
import org.xml.sax.InputSource;
|
import org.xml.sax.InputSource;
|
||||||
import org.xml.sax.SAXException;
|
import org.xml.sax.SAXException;
|
||||||
|
|
||||||
|
import com.alexanderlogistics.BusinessPartnerService;
|
||||||
import com.alexanderlogistics.InvoiceUtil;
|
import com.alexanderlogistics.InvoiceUtil;
|
||||||
|
import com.alexanderlogistics.KreditorDebitorService;
|
||||||
import com.alexanderlogistics.mahnlauf.MahnlaufService;
|
import com.alexanderlogistics.mahnlauf.MahnlaufService;
|
||||||
import com.alexanderlogistics.xml.CargosoftXMLInvoiceImportService;
|
import com.alexanderlogistics.xml.CargosoftXMLInvoiceImportService;
|
||||||
|
|
||||||
import jakarta.ejb.Stateless;
|
import jakarta.ejb.Stateless;
|
||||||
|
import jakarta.ejb.TransactionAttribute;
|
||||||
|
import jakarta.ejb.TransactionAttributeType;
|
||||||
import jakarta.inject.Inject;
|
import jakarta.inject.Inject;
|
||||||
import jakarta.ws.rs.GET;
|
import jakarta.ws.rs.GET;
|
||||||
import jakarta.ws.rs.Path;
|
import jakarta.ws.rs.Path;
|
||||||
|
|
@ -112,6 +116,9 @@ public class CargosoftMigrationRestService implements Serializable {
|
||||||
@Inject
|
@Inject
|
||||||
TeamService teamService;
|
TeamService teamService;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
BusinessPartnerService businessPartnerService;
|
||||||
|
|
||||||
private static Logger logger = Logger.getLogger(CargosoftMigrationRestService.class.getName());
|
private static Logger logger = Logger.getLogger(CargosoftMigrationRestService.class.getName());
|
||||||
|
|
||||||
public CargosoftMigrationRestService() {
|
public CargosoftMigrationRestService() {
|
||||||
|
|
@ -641,6 +648,98 @@ public class CargosoftMigrationRestService implements Serializable {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Dieser agent prüft ob es für Cargosoft Krediotren/Debitoren Daten schon ein
|
||||||
|
* passendes Businesspartner Workitem gibt.
|
||||||
|
* Wenn nicht speichert der Service einmal das cargosft entity was dann zur
|
||||||
|
* automatischen Neuanlage des businesspartner workflows führt.
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
* @throws QueryException
|
||||||
|
* @throws AccessDeniedException
|
||||||
|
* @throws ProcessingErrorException
|
||||||
|
* @throws PluginException
|
||||||
|
* @throws ModelException
|
||||||
|
*/
|
||||||
|
@GET
|
||||||
|
@Path("/bp-import")
|
||||||
|
@Produces({ MediaType.TEXT_PLAIN })
|
||||||
|
public String importBusinessPartner()
|
||||||
|
throws QueryException, AccessDeniedException, ProcessingErrorException, PluginException, ModelException {
|
||||||
|
StringBuffer messageBuffer = new StringBuffer();
|
||||||
|
int MAX_COUNT = 1000;
|
||||||
|
String query = "(type:" + KreditorDebitorService.TYPE_CARGOSOFTKREDITOR + ")";
|
||||||
|
int updates = 0;
|
||||||
|
long l = System.currentTimeMillis();
|
||||||
|
int batchSize = 500;
|
||||||
|
int totalObjects = 0;
|
||||||
|
log("├── Migrate " + KreditorDebitorService.TYPE_CARGOSOFTKREDITOR, messageBuffer);
|
||||||
|
|
||||||
|
// Gesamtanzahl ermitteln
|
||||||
|
int totalCount = documentService.count(query);
|
||||||
|
log("│ ├── found " + totalCount + " " + KreditorDebitorService.TYPE_CARGOSOFTKREDITOR + " entities ",
|
||||||
|
messageBuffer);
|
||||||
|
|
||||||
|
// Berechne Anzahl der benötigten Pages
|
||||||
|
int totalPages = (int) Math.ceil((double) totalCount / batchSize);
|
||||||
|
|
||||||
|
// Verarbeite Page für Page
|
||||||
|
for (int pageIndex = 0; pageIndex < totalPages; pageIndex++) {
|
||||||
|
|
||||||
|
List<ItemCollection> cargosoftDataList = documentService.find(query, batchSize, pageIndex);
|
||||||
|
|
||||||
|
for (ItemCollection cargosoftItemCol : cargosoftDataList) {
|
||||||
|
totalObjects++;
|
||||||
|
if (verifyBusinessPartner(cargosoftItemCol, messageBuffer)) {
|
||||||
|
updates++;
|
||||||
|
}
|
||||||
|
if (updates >= MAX_COUNT)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Fortschritt loggen
|
||||||
|
log("│ ├── Processed page " + (pageIndex + 1) + " of " + totalPages +
|
||||||
|
" (" + updates + " total updates)", messageBuffer);
|
||||||
|
// Optional: Kurze Pause nach jedem 5. Batch
|
||||||
|
try {
|
||||||
|
Thread.sleep(100);
|
||||||
|
} catch (InterruptedException e) {
|
||||||
|
// TODO Auto-generated catch block
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (updates >= MAX_COUNT)
|
||||||
|
break;
|
||||||
|
|
||||||
|
}
|
||||||
|
long duration = System.currentTimeMillis() - l;
|
||||||
|
double objectsPerSecond = totalObjects / (duration / 1000.0);
|
||||||
|
log("├── Successfully imported " + updates + " business partner objects in " +
|
||||||
|
duration + "ms (" + String.format("%.1f", objectsPerSecond) + " objects/sec)", messageBuffer);
|
||||||
|
|
||||||
|
return messageBuffer.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Hilfsmethode speichert eine cargoosft kreditor object...
|
||||||
|
*
|
||||||
|
* @param bpID
|
||||||
|
* @param messageBuffer
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@TransactionAttribute(value = TransactionAttributeType.REQUIRES_NEW)
|
||||||
|
public boolean verifyBusinessPartner(ItemCollection cargosoftItemCol, StringBuffer messageBuffer) {
|
||||||
|
String vendorNummer = cargosoftItemCol.getItemValueString("_vendor_num");
|
||||||
|
String bpID = InvoiceUtil.buildBPID(vendorNummer);
|
||||||
|
ItemCollection businessPartner = businessPartnerService.getBusinessPartnerByID(bpID);
|
||||||
|
if (businessPartner == null) {
|
||||||
|
documentService.save(cargosoftItemCol);
|
||||||
|
logger.finest("│ │ ├── import " + bpID);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Erzeugt einen XML Baum aus dem XML Raw Daten
|
* Erzeugt einen XML Baum aus dem XML Raw Daten
|
||||||
*
|
*
|
||||||
|
|
@ -721,4 +820,10 @@ public class CargosoftMigrationRestService implements Serializable {
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void log(String message, StringBuffer messageLog) {
|
||||||
|
logger.info(message);
|
||||||
|
messageLog.append(message + "\n");
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,206 +0,0 @@
|
||||||
package com.alexanderlogistics.metrics;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.logging.Logger;
|
|
||||||
|
|
||||||
import org.imixs.workflow.ItemCollection;
|
|
||||||
import org.imixs.workflow.engine.DocumentService;
|
|
||||||
import org.imixs.workflow.exceptions.PluginException;
|
|
||||||
import org.imixs.workflow.exceptions.QueryException;
|
|
||||||
|
|
||||||
import com.alexanderlogistics.InvoiceUtil;
|
|
||||||
|
|
||||||
import jakarta.ejb.Stateless;
|
|
||||||
import jakarta.inject.Inject;
|
|
||||||
import jakarta.ws.rs.GET;
|
|
||||||
import jakarta.ws.rs.Path;
|
|
||||||
import jakarta.ws.rs.PathParam;
|
|
||||||
import jakarta.ws.rs.Produces;
|
|
||||||
import jakarta.ws.rs.core.MediaType;
|
|
||||||
import jakarta.ws.rs.core.Response;
|
|
||||||
|
|
||||||
@Path("metrics/cdtr")
|
|
||||||
@Stateless
|
|
||||||
public class MetricCreditorRestService {
|
|
||||||
|
|
||||||
private static Logger logger = Logger.getLogger(MetricCreditorRestService.class.getName());
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
DocumentService documentService;
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
MetricCreditorService metricCreditorService;
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
MetricDataService metricDataService;
|
|
||||||
|
|
||||||
@GET
|
|
||||||
@Path("/ping")
|
|
||||||
@Produces({ MediaType.TEXT_PLAIN })
|
|
||||||
public String ping() {
|
|
||||||
logger.info("GET ping");
|
|
||||||
return "ping: " + System.currentTimeMillis();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This method initializes the metrics for all creditors with open invoices.
|
|
||||||
*
|
|
||||||
* The method deletes all existing metrics and creates new metric entires for
|
|
||||||
* each creditor.
|
|
||||||
*
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
@GET
|
|
||||||
@Path("/rebuild")
|
|
||||||
@Produces({ MediaType.TEXT_PLAIN })
|
|
||||||
public Response rebuildMetrics() {
|
|
||||||
StringBuffer messageBuffer = new StringBuffer();
|
|
||||||
long l = System.currentTimeMillis();
|
|
||||||
log("├── init cdtr metrics...", messageBuffer);
|
|
||||||
try {
|
|
||||||
// first clear the metric cache
|
|
||||||
metricCreditorService.reset();
|
|
||||||
log("│ ├── reset metric cache", messageBuffer);
|
|
||||||
// run in new transaction!
|
|
||||||
metricDataService.deleteAllMetrics(MetricCreditorService.TYPE_METRIC_CREDITOR);
|
|
||||||
log("│ ├── delete metrics", messageBuffer);
|
|
||||||
|
|
||||||
computeMetrics();
|
|
||||||
log("│ ├── computing metrics finished in " + (System.currentTimeMillis() - l) + "ms", messageBuffer);
|
|
||||||
|
|
||||||
logger.info("│ ├── save and init metrics...");
|
|
||||||
// run in new transaction!
|
|
||||||
metricCreditorService.refreshGauges();
|
|
||||||
|
|
||||||
String message = "├── rebuild cdtr metrics completed in "
|
|
||||||
+ (System.currentTimeMillis() - l)
|
|
||||||
+ "ms";
|
|
||||||
log(message, messageBuffer);
|
|
||||||
return Response.ok().entity(messageBuffer.toString()).build();
|
|
||||||
|
|
||||||
} catch (Exception e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
return Response.serverError()
|
|
||||||
.entity("Failed to initialize metrics: " + e.getMessage())
|
|
||||||
.build();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This method initializes the metrics for all creditors with open invoices.
|
|
||||||
*
|
|
||||||
* The method deletes all existing metrics and creates new metric entires for
|
|
||||||
* each creditor.
|
|
||||||
*
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
@GET
|
|
||||||
@Path("/rebuild/{cdtrnumber}")
|
|
||||||
@Produces({ MediaType.TEXT_PLAIN })
|
|
||||||
public Response rebuildMetricsForCreditor(@PathParam("cdtrnumber") String cdtrnumber) {
|
|
||||||
StringBuffer messageBuffer = new StringBuffer();
|
|
||||||
long l = System.currentTimeMillis();
|
|
||||||
log("├── init cdtr metrics for " + cdtrnumber + "...", messageBuffer);
|
|
||||||
try {
|
|
||||||
|
|
||||||
logger.info("│ │ ├── group invoices by creditor " + cdtrnumber + "...");
|
|
||||||
|
|
||||||
int count = 0;
|
|
||||||
|
|
||||||
// First we need to remove all metrics for this creditor
|
|
||||||
String bpID = InvoiceUtil.buildBPID(cdtrnumber);
|
|
||||||
logger.info("│ │ ├── delete metrics for " + bpID + "...");
|
|
||||||
List<String> oldMetricKeys = metricDataService
|
|
||||||
.deleteAllMetricsByBPID(MetricCreditorService.TYPE_METRIC_CREDITOR, bpID);
|
|
||||||
logger.info("│ │ ├── found " + oldMetricKeys.size() + " metrics for " + bpID + "...");
|
|
||||||
metricCreditorService.reset(oldMetricKeys);
|
|
||||||
// next rebuild gauges and metrics for this creditor
|
|
||||||
List<ItemCollection> invoices = documentService.find(
|
|
||||||
"($modelversion:rechnungseingang-* OR $modelversion:gutschriftabgleich-*) " +
|
|
||||||
" AND type:workitem AND cdtr.number:" + cdtrnumber,
|
|
||||||
9999, 0, "invoice.number", false);
|
|
||||||
logger.info("│ │ ├──found " + invoices.size() + " open invoices");
|
|
||||||
|
|
||||||
List<String> newMetricKeys = new ArrayList<>();
|
|
||||||
for (ItemCollection invoice : invoices) {
|
|
||||||
try {
|
|
||||||
ItemCollection metricData = metricCreditorService.getMetricByInvoice(invoice);
|
|
||||||
newMetricKeys.add(metricData.getItemValueString("name"));
|
|
||||||
// Jetzt Rechnung addieren
|
|
||||||
metricCreditorService.addInvoice(metricData, invoice);
|
|
||||||
logger.info("│ │ │ ├──update metric " + InvoiceUtil.getBPId(invoice) + " Invoice: "
|
|
||||||
+ invoice.getItemValueString("invoice.number") + " Saldo: "
|
|
||||||
+ invoice.getItemValueDouble(MetricCreditorService.ITEM_TOTAL));
|
|
||||||
|
|
||||||
metricCreditorService.putMetric(metricData);
|
|
||||||
count++;
|
|
||||||
} catch (PluginException e) {
|
|
||||||
// invalid invoice - e.g. no cdtr. number
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
logger.info("│ │ ├── updated metric for " + count + " invoices.");
|
|
||||||
|
|
||||||
log("│ ├── computing metrics finished in " + (System.currentTimeMillis() - l) + "ms", messageBuffer);
|
|
||||||
|
|
||||||
logger.info("│ ├── save and init metrics...");
|
|
||||||
// run in new transaction!
|
|
||||||
metricCreditorService.refreshGauges(newMetricKeys);
|
|
||||||
|
|
||||||
String message = "├── rebuild cdtr metrics completed in "
|
|
||||||
+ (System.currentTimeMillis() - l)
|
|
||||||
+ "ms";
|
|
||||||
log(message, messageBuffer);
|
|
||||||
return Response.ok().entity(messageBuffer.toString()).build();
|
|
||||||
|
|
||||||
} catch (Exception e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
return Response.serverError()
|
|
||||||
.entity("Failed to initialize metrics: " + e.getMessage())
|
|
||||||
.build();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Diese Methode berechnet alle Metriken auf basis der existierenden Rechnungen
|
|
||||||
* neu
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
public void computeMetrics() {
|
|
||||||
|
|
||||||
logger.info("│ │ ├── group invoices by creditor...");
|
|
||||||
try {
|
|
||||||
int count = 0;
|
|
||||||
List<ItemCollection> invoices = documentService.find(
|
|
||||||
"($modelversion:rechnungseingang-* OR $modelversion:gutschriftabgleich-*) " +
|
|
||||||
" AND type:workitem",
|
|
||||||
9999, 0,
|
|
||||||
"invoice.number", false);
|
|
||||||
logger.info("│ │ ├──found " + invoices.size() + " open invoices");
|
|
||||||
for (ItemCollection invoice : invoices) {
|
|
||||||
try {
|
|
||||||
ItemCollection metricData = metricCreditorService.getMetricByInvoice(invoice);
|
|
||||||
// Jetzt Rechnung addieren
|
|
||||||
metricCreditorService.addInvoice(metricData, invoice);
|
|
||||||
logger.info("│ │ │ ├──update metric " + InvoiceUtil.getBPId(invoice));
|
|
||||||
metricCreditorService.putMetric(metricData);
|
|
||||||
count++;
|
|
||||||
} catch (PluginException e) {
|
|
||||||
// invalid invoice - e.g. no cdtr. number
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
logger.info("│ │ ├── updated metric for " + count + " invoices.");
|
|
||||||
} catch (QueryException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void log(String message, StringBuffer messageLog) {
|
|
||||||
logger.info(message);
|
|
||||||
messageLog.append(message + "\n");
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
@ -1,369 +0,0 @@
|
||||||
package com.alexanderlogistics.metrics;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Set;
|
|
||||||
import java.util.concurrent.ConcurrentHashMap;
|
|
||||||
import java.util.logging.Logger;
|
|
||||||
|
|
||||||
import org.eclipse.microprofile.config.inject.ConfigProperty;
|
|
||||||
import org.eclipse.microprofile.metrics.Metadata;
|
|
||||||
import org.eclipse.microprofile.metrics.MetricRegistry;
|
|
||||||
import org.eclipse.microprofile.metrics.Tag;
|
|
||||||
import org.eclipse.microprofile.metrics.annotation.RegistryScope;
|
|
||||||
import org.imixs.workflow.ItemCollection;
|
|
||||||
import org.imixs.workflow.engine.DocumentService;
|
|
||||||
import org.imixs.workflow.engine.ProcessingEvent;
|
|
||||||
import org.imixs.workflow.exceptions.PluginException;
|
|
||||||
import org.imixs.workflow.exceptions.QueryException;
|
|
||||||
|
|
||||||
import com.alexanderlogistics.InvoiceUtil;
|
|
||||||
import com.alexanderlogistics.KreditorDebitorService;
|
|
||||||
|
|
||||||
import jakarta.annotation.security.DeclareRoles;
|
|
||||||
import jakarta.annotation.security.RolesAllowed;
|
|
||||||
import jakarta.annotation.security.RunAs;
|
|
||||||
import jakarta.ejb.TransactionAttribute;
|
|
||||||
import jakarta.ejb.TransactionAttributeType;
|
|
||||||
import jakarta.enterprise.context.ApplicationScoped;
|
|
||||||
import jakarta.enterprise.event.Observes;
|
|
||||||
import jakarta.inject.Inject;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Dieser Service reagiert auch ProcessingEvents und speichert/aktualisiert die
|
|
||||||
* zugehörige Creditor Metric Entity (type=metric.creditor).
|
|
||||||
* <p>
|
|
||||||
* Beim Rechnungseingang gilt eine Rechnung als Bezahlt wenn diese einen finalen
|
|
||||||
* Status erreicht hat (>=5800)
|
|
||||||
* <p>
|
|
||||||
* Der Service liest in einem AFTER_PROCESS Event den alten invoice.saldo aus.
|
|
||||||
* Hierzu wird die Rechnung in einer neuen Transaktion geladen was einem
|
|
||||||
* 'Dirty-Read' entspricht. Dadurch kennt die Methode den letzten saldo der
|
|
||||||
* Rechnung. Hat sich nun der aktuelle Saldo geändert, aktualisiert der Serivce
|
|
||||||
* die entsprechende Metric.
|
|
||||||
*
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
@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" })
|
|
||||||
@RunAs("org.imixs.ACCESSLEVEL.MANAGERACCESS")
|
|
||||||
@ApplicationScoped
|
|
||||||
public class MetricCreditorService {
|
|
||||||
|
|
||||||
private static Logger logger = Logger.getLogger(MetricCreditorService.class.getName());
|
|
||||||
private final ConcurrentHashMap<String, ItemCollection> metricCache = new ConcurrentHashMap<>();
|
|
||||||
private final Set<String> registeredGauges = ConcurrentHashMap.newKeySet();
|
|
||||||
|
|
||||||
public static final String TYPE_METRIC_CREDITOR = "metric.creditor";
|
|
||||||
public static final String ITEM_TOTAL = "invoice.total";
|
|
||||||
public static final String ITEM_SALDO = "invoice.saldo";
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
@RegistryScope(scope = MetricRegistry.APPLICATION_SCOPE)
|
|
||||||
MetricRegistry metricRegistry;
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
DocumentService documentService;
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
KreditorDebitorService kreditorDebitorService;
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
MetricDataService metricDataService;
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
@ConfigProperty(name = "metrics.enabled", defaultValue = "false")
|
|
||||||
private boolean metricsEnabled;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Reset the internal metricCache and clears all registered Gauges.
|
|
||||||
*/
|
|
||||||
public void reset() {
|
|
||||||
metricCache.clear();
|
|
||||||
registeredGauges.clear();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Reset the internal metricCache and clears all registered Gauges for a list of
|
|
||||||
* metric keys.
|
|
||||||
*/
|
|
||||||
public void reset(List<String> metricKeys) {
|
|
||||||
for (String metricKey : metricKeys) {
|
|
||||||
metricCache.remove(metricKey);
|
|
||||||
metricRegistry.remove(metricKey);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Process Metric only if some data has changed....
|
|
||||||
*
|
|
||||||
* @param processingEvent
|
|
||||||
* @throws PluginException
|
|
||||||
*/
|
|
||||||
public void onProcessingEvent(@Observes ProcessingEvent processingEvent) {
|
|
||||||
long l = System.currentTimeMillis();
|
|
||||||
if (!metricsEnabled) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
ItemCollection invoice = processingEvent.getDocument();
|
|
||||||
if (!InvoiceUtil.isCreditorInvoice(invoice)) {
|
|
||||||
// skip event
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// update metric and the metric cache
|
|
||||||
if (processingEvent.getEventType() == ProcessingEvent.AFTER_PROCESS) {
|
|
||||||
// load the last invoice metric and reduce the saldo...
|
|
||||||
ItemCollection lastInvoice = metricDataService.readDirtyWorkitem(invoice.getUniqueID());
|
|
||||||
if (lastInvoice != null) {
|
|
||||||
try {
|
|
||||||
ItemCollection lastMetricData = getMetricByInvoice(lastInvoice);
|
|
||||||
subtractInvoice(lastMetricData, lastInvoice);
|
|
||||||
putMetric(lastMetricData);
|
|
||||||
metricDataService.saveMetric(lastMetricData);
|
|
||||||
} catch (PluginException e) {
|
|
||||||
// invalid invoice - e.g. no cdtr. number
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
// load the invoice metric and add the saldo...
|
|
||||||
ItemCollection metricData = getMetricByInvoice(invoice);
|
|
||||||
// Saldo-Berechnung
|
|
||||||
addInvoice(metricData, invoice);
|
|
||||||
putMetric(metricData);
|
|
||||||
metricDataService.saveMetric(metricData);
|
|
||||||
|
|
||||||
// Update the Gauge
|
|
||||||
updateGauge(metricData);
|
|
||||||
logger.info("Metric cdtr update took " + (System.currentTimeMillis() - l) + "ms");
|
|
||||||
} catch (PluginException e) {
|
|
||||||
// invalid invoice - e.g. no cdtr. number
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the corresponding metric data object for an invoice. The method uses
|
|
||||||
* an internal cache. If the metric was not yet cached the method loads the
|
|
||||||
* metric from the database. If not metric exists in the database the method
|
|
||||||
* automatically creates a new metric data object.
|
|
||||||
*
|
|
||||||
* The method throws a PluginException if no metric can be build from this
|
|
||||||
* invoice (e.g. missing cdtr.number).
|
|
||||||
*
|
|
||||||
* @param invoice
|
|
||||||
* @return
|
|
||||||
* @throws PluginException
|
|
||||||
*/
|
|
||||||
public ItemCollection getMetricByInvoice(ItemCollection invoice) throws PluginException {
|
|
||||||
if (invoice == null) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
String metricKey = MetricDataService.buildKeyByInvoice(invoice);
|
|
||||||
ItemCollection metricData = metricCache.get(metricKey);
|
|
||||||
if (metricData == null) {
|
|
||||||
metricData = loadMetric(invoice);
|
|
||||||
}
|
|
||||||
// if metric still null we create a new metric data object.
|
|
||||||
if (metricData == null) {
|
|
||||||
metricData = createMetaData(invoice);
|
|
||||||
}
|
|
||||||
return metricData;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns a metric data object by key
|
|
||||||
*
|
|
||||||
* @param key
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
public ItemCollection getMetric(String key) {
|
|
||||||
return metricCache.get(key);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Puts a metric data object into the cache.
|
|
||||||
*
|
|
||||||
* @param metricData
|
|
||||||
*/
|
|
||||||
public void putMetric(ItemCollection metricData) {
|
|
||||||
metricCache.put(metricData.getItemValueString("name"), metricData);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns a list with all cached metric keys.
|
|
||||||
* The method returns an unmodifiable list to prevent modifications.
|
|
||||||
*
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
public List<String> getMetricKeys() {
|
|
||||||
return Collections.unmodifiableList(new ArrayList<>(metricCache.keySet()));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This method loads a metric entity for a given invoice workitem. If no metric
|
|
||||||
* entity exits, the method
|
|
||||||
* creates a new metric entity.
|
|
||||||
*
|
|
||||||
* @param invoice
|
|
||||||
* @return
|
|
||||||
* @throws PluginException
|
|
||||||
*/
|
|
||||||
private ItemCollection loadMetric(ItemCollection invoice) throws PluginException {
|
|
||||||
ItemCollection creditorMetric = null;
|
|
||||||
if (invoice == null) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
try {
|
|
||||||
String metricKey = MetricDataService.buildKeyByInvoice(invoice);
|
|
||||||
String query = "(type:" + TYPE_METRIC_CREDITOR + ") AND (name:" + metricKey + ")";
|
|
||||||
List<ItemCollection> result = documentService.find(query, 1, 0, "$modified", true);
|
|
||||||
if (result.size() > 0) {
|
|
||||||
creditorMetric = result.get(0);
|
|
||||||
}
|
|
||||||
} catch (IllegalArgumentException | QueryException e) {
|
|
||||||
throw new PluginException(PluginException.class.getName(),
|
|
||||||
"Failed to load metric object for invoice " + invoice.getUniqueID() + ": ", e.getMessage(), e);
|
|
||||||
}
|
|
||||||
return creditorMetric;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates an empty Creditor Meta Data Object (ItemCollection)
|
|
||||||
* <p>
|
|
||||||
* The ItemCollection stores the name and number and also all saldos for all
|
|
||||||
* currencies
|
|
||||||
*
|
|
||||||
* @param invoice - invoice ItemCollection
|
|
||||||
* @return
|
|
||||||
* @throws PluginException
|
|
||||||
*/
|
|
||||||
private ItemCollection createMetaData(ItemCollection invoice) throws PluginException {
|
|
||||||
if (invoice == null) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
String key = MetricDataService.buildKeyByInvoice(invoice);
|
|
||||||
ItemCollection metricData = new ItemCollection();
|
|
||||||
metricData.setType(TYPE_METRIC_CREDITOR);
|
|
||||||
metricData.setItemValue("name", key);
|
|
||||||
metricData.setItemValue("bp.id", InvoiceUtil.getBPId(invoice));
|
|
||||||
metricData.setItemValue("bp.name", InvoiceUtil.getBPName(invoice));
|
|
||||||
metricData.setItemValue("country", invoice.getItemValueString("invoice.country"));
|
|
||||||
metricData.setItemValue("currency", invoice.getItemValueString("invoice.currency"));
|
|
||||||
metricData.setItemValue("department", invoice.getItemValueString("space.name"));
|
|
||||||
|
|
||||||
return metricData;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Helper method to register a gauge for a creditor
|
|
||||||
*
|
|
||||||
* @param cdtrNumber - the creditor number
|
|
||||||
* @param cdtrName - the creditor name
|
|
||||||
*/
|
|
||||||
public void updateGauge(ItemCollection metricData) {
|
|
||||||
|
|
||||||
String metricKey = metricData.getItemValueString("name");
|
|
||||||
String bpName = metricData.getItemValueString("bp.name");
|
|
||||||
String bpId = metricData.getItemValueString("bp.id");
|
|
||||||
String country = metricData.getItemValueString("country");
|
|
||||||
String department = metricData.getItemValueString("department");
|
|
||||||
String currency = metricData.getItemValueString("currency");
|
|
||||||
|
|
||||||
// Prüfen ob Gauge bereits registriert ist
|
|
||||||
if (registeredGauges.add(metricKey)) { // returns true newly added
|
|
||||||
List<Tag> tags = new ArrayList<>();
|
|
||||||
tags.add(new Tag("type", "cdtr"));
|
|
||||||
tags.add(new Tag("id", bpId));
|
|
||||||
tags.add(new Tag("name", bpName));
|
|
||||||
tags.add(new Tag("country", country));
|
|
||||||
tags.add(new Tag("currency", currency));
|
|
||||||
tags.add(new Tag("department", department));
|
|
||||||
logger.fine("register new metric for department: " + department +
|
|
||||||
", " + metricData.getItemValueString(ITEM_SALDO) +
|
|
||||||
" " + currency);
|
|
||||||
Metadata metadata = Metadata.builder()
|
|
||||||
.withName("cdtr.balance")
|
|
||||||
.withDescription("Creditor Balance")
|
|
||||||
.build();
|
|
||||||
|
|
||||||
metricCache.get(metricKey);
|
|
||||||
metricRegistry.gauge(metadata,
|
|
||||||
() -> metricCache.get(metricKey).getItemValueDouble(ITEM_SALDO),
|
|
||||||
tags.toArray(new Tag[0]));
|
|
||||||
} else {
|
|
||||||
logger.fine("Cdtr Gauge already registered for department: " + department);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Addiert den saldo einer Invoice zu einem metricData object
|
|
||||||
*
|
|
||||||
* @param metricData
|
|
||||||
* @param invoice
|
|
||||||
*/
|
|
||||||
public void addInvoice(ItemCollection metricData, ItemCollection invoice) {
|
|
||||||
double invoiceTotal = invoice.getItemValueDouble(ITEM_TOTAL);
|
|
||||||
if (!"workitem".equals(invoice.getType()) || invoice.getTaskID() >= 5800) {
|
|
||||||
// vorgang ist archiviert oder gelöscht worden => saldo = 0!
|
|
||||||
invoiceTotal = 0.0;
|
|
||||||
}
|
|
||||||
// is the metric new?
|
|
||||||
if (!metricData.hasItem(ITEM_SALDO)) {
|
|
||||||
// init metric with the total value!
|
|
||||||
metricData.setItemValue(ITEM_SALDO, InvoiceUtil.round(invoiceTotal));
|
|
||||||
} else {
|
|
||||||
double lastSaldo = metricData.getItemValueDouble(ITEM_SALDO);
|
|
||||||
metricData.setItemValue(ITEM_SALDO, InvoiceUtil.round(lastSaldo + invoiceTotal));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void subtractInvoice(ItemCollection metricData, ItemCollection invoice) {
|
|
||||||
if (metricData == null || invoice == null) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
double invoiceTotal = invoice.getItemValueDouble(ITEM_TOTAL);
|
|
||||||
if (!"workitem".equals(invoice.getType()) || invoice.getTaskID() >= 5800) {
|
|
||||||
// vorgang ist archiviert oder gelöscht worden => saldo = 0!
|
|
||||||
invoiceTotal = 0.0;
|
|
||||||
}
|
|
||||||
// subtract only if metric saldo exists
|
|
||||||
if (metricData.hasItem(ITEM_SALDO)) {
|
|
||||||
double lastSaldo = metricData.getItemValueDouble(ITEM_SALDO);
|
|
||||||
metricData.setItemValue(ITEM_SALDO, InvoiceUtil.round(lastSaldo - invoiceTotal));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Helper Method that refreshes all gauges. The method is called by the
|
|
||||||
* RestService during a rebuild.
|
|
||||||
*/
|
|
||||||
@TransactionAttribute(value = TransactionAttributeType.REQUIRES_NEW)
|
|
||||||
public void refreshGauges() {
|
|
||||||
List<String> keys = getMetricKeys();
|
|
||||||
refreshGauges(keys);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Helper Method that refreshes all gauges. The method is called by the
|
|
||||||
* RestService during a rebuild.
|
|
||||||
*/
|
|
||||||
@TransactionAttribute(value = TransactionAttributeType.REQUIRES_NEW)
|
|
||||||
public void refreshGauges(List<String> keys) {
|
|
||||||
for (String hashKey : keys) {
|
|
||||||
ItemCollection metricData = getMetric(hashKey);
|
|
||||||
documentService.save(metricData);
|
|
||||||
updateGauge(metricData);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
@ -1,140 +0,0 @@
|
||||||
package com.alexanderlogistics.metrics;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Objects;
|
|
||||||
|
|
||||||
import org.imixs.workflow.ItemCollection;
|
|
||||||
import org.imixs.workflow.engine.DocumentService;
|
|
||||||
import org.imixs.workflow.engine.index.SearchService;
|
|
||||||
import org.imixs.workflow.exceptions.PluginException;
|
|
||||||
import org.imixs.workflow.exceptions.QueryException;
|
|
||||||
|
|
||||||
import com.alexanderlogistics.InvoiceUtil;
|
|
||||||
|
|
||||||
import jakarta.annotation.security.DeclareRoles;
|
|
||||||
import jakarta.annotation.security.RunAs;
|
|
||||||
import jakarta.ejb.Stateless;
|
|
||||||
import jakarta.ejb.TransactionAttribute;
|
|
||||||
import jakarta.ejb.TransactionAttributeType;
|
|
||||||
import jakarta.inject.Inject;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The MetricDataService provides methods to lookup and update metric data
|
|
||||||
* objects.
|
|
||||||
* The service runs with manager access.
|
|
||||||
*
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
@DeclareRoles({ "org.imixs.ACCESSLEVEL.MANAGERACCESS" })
|
|
||||||
@RunAs("org.imixs.ACCESSLEVEL.MANAGERACCESS")
|
|
||||||
@Stateless
|
|
||||||
public class MetricDataService {
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
DocumentService documentService;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Runs with Manager access
|
|
||||||
*
|
|
||||||
* @param metricData
|
|
||||||
*/
|
|
||||||
public void saveMetric(ItemCollection metricData) {
|
|
||||||
documentService.save(metricData);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This helper method reads a 'dirty' workitem in a new transaction. This is
|
|
||||||
* used for calculating the new metric values
|
|
||||||
*
|
|
||||||
* @param uniqueId
|
|
||||||
*/
|
|
||||||
@TransactionAttribute(value = TransactionAttributeType.REQUIRES_NEW)
|
|
||||||
public ItemCollection readDirtyWorkitem(String uniqueId) {
|
|
||||||
ItemCollection dirtyInvoice = documentService.load(uniqueId);
|
|
||||||
return dirtyInvoice;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This method deletes all metrics
|
|
||||||
*
|
|
||||||
* @throws PluginException
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
@TransactionAttribute(value = TransactionAttributeType.REQUIRES_NEW)
|
|
||||||
public void deleteAllMetrics(String metricType) throws PluginException {
|
|
||||||
try {
|
|
||||||
String query = "(type:" + metricType + ")";
|
|
||||||
List<ItemCollection> result = documentService.find(query, SearchService.DEFAULT_MAX_SEARCH_RESULT, 0);
|
|
||||||
for (ItemCollection metric : result) {
|
|
||||||
documentService.remove(metric);
|
|
||||||
}
|
|
||||||
|
|
||||||
} catch (IllegalArgumentException | QueryException e) {
|
|
||||||
throw new PluginException(MetricDataService.class.getName(),
|
|
||||||
"Failed to delete metrics", e.getMessage(), e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This method deletes all metrics for a given BP ID
|
|
||||||
*
|
|
||||||
* @throws PluginException
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
@TransactionAttribute(value = TransactionAttributeType.REQUIRES_NEW)
|
|
||||||
public List<String> deleteAllMetricsByBPID(String metricType, String bpID) throws PluginException {
|
|
||||||
List<String> result = new ArrayList<>();
|
|
||||||
try {
|
|
||||||
String query = "(type:" + metricType + ")";
|
|
||||||
List<ItemCollection> metricList = documentService.find(query, SearchService.DEFAULT_MAX_SEARCH_RESULT, 0);
|
|
||||||
for (ItemCollection metric : metricList) {
|
|
||||||
if (metric.getItemValueString("bp.id").equals(bpID)) {
|
|
||||||
result.add(metric.getItemValueString("name"));
|
|
||||||
documentService.remove(metric);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
} catch (IllegalArgumentException | QueryException e) {
|
|
||||||
throw new PluginException(MetricDataService.class.getName(),
|
|
||||||
"Failed to delete metrics", e.getMessage(), e);
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Builds the metric hash key by the invoice attributes. The returned key can be
|
|
||||||
* used for caching the metric.
|
|
||||||
*
|
|
||||||
* The metric key does not include the dbtr/cdtr name as this name is not
|
|
||||||
* relevant for building a hashkey.
|
|
||||||
*
|
|
||||||
* @param invoice - The invoice ItemCollection containing the necessary
|
|
||||||
* attributes
|
|
||||||
* @return A unique hash string based on the invoice attributes
|
|
||||||
* @throws PluginException
|
|
||||||
* @throws IllegalArgumentException if the invoice is null
|
|
||||||
*/
|
|
||||||
public static String buildKeyByInvoice(ItemCollection invoice) throws PluginException {
|
|
||||||
// Validate input
|
|
||||||
Objects.requireNonNull(invoice, "Invoice must not be null");
|
|
||||||
|
|
||||||
String bpNumber = InvoiceUtil.getBPId(invoice);
|
|
||||||
String country = invoice.getItemValueString("invoice.country");
|
|
||||||
String currency = invoice.getItemValueString("invoice.currency");
|
|
||||||
String department = invoice.getItemValueString("space.name");
|
|
||||||
|
|
||||||
// Concatenate the values and create a hash
|
|
||||||
String combinedValue = String.format("%s::%s::%s::%s",
|
|
||||||
bpNumber,
|
|
||||||
country,
|
|
||||||
currency,
|
|
||||||
department);
|
|
||||||
|
|
||||||
String hash = String.valueOf(combinedValue.hashCode());
|
|
||||||
// a hash can start with '-' which we need to avoid and create a alphanumeric
|
|
||||||
// key instead!
|
|
||||||
return "HASH" + hash;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
@ -1,221 +0,0 @@
|
||||||
package com.alexanderlogistics.metrics;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.logging.Logger;
|
|
||||||
|
|
||||||
import org.imixs.workflow.ItemCollection;
|
|
||||||
import org.imixs.workflow.engine.DocumentService;
|
|
||||||
import org.imixs.workflow.exceptions.PluginException;
|
|
||||||
import org.imixs.workflow.exceptions.QueryException;
|
|
||||||
|
|
||||||
import com.alexanderlogistics.InvoiceUtil;
|
|
||||||
|
|
||||||
import jakarta.ejb.Stateless;
|
|
||||||
import jakarta.inject.Inject;
|
|
||||||
import jakarta.ws.rs.GET;
|
|
||||||
import jakarta.ws.rs.Path;
|
|
||||||
import jakarta.ws.rs.PathParam;
|
|
||||||
import jakarta.ws.rs.Produces;
|
|
||||||
import jakarta.ws.rs.core.MediaType;
|
|
||||||
import jakarta.ws.rs.core.Response;
|
|
||||||
|
|
||||||
@Path("metrics/dbtr")
|
|
||||||
@Stateless
|
|
||||||
public class MetricDebitorRestService {
|
|
||||||
|
|
||||||
private static Logger logger = Logger.getLogger(MetricDebitorRestService.class.getName());
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
DocumentService documentService;
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
MetricDebitorService metricDebitorService;
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
MetricDataService metricDataService;
|
|
||||||
|
|
||||||
@GET
|
|
||||||
@Path("/ping")
|
|
||||||
@Produces({ MediaType.TEXT_PLAIN })
|
|
||||||
public String ping() {
|
|
||||||
logger.info("GET ping");
|
|
||||||
return "ping: " + System.currentTimeMillis();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This method initializes the metrics for all debitors with open invoices.
|
|
||||||
*
|
|
||||||
* The method first deletes all existing metrics and than creates or updates the
|
|
||||||
* metric entires for each debitor.
|
|
||||||
*
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
@GET
|
|
||||||
@Path("/rebuild")
|
|
||||||
@Produces({ MediaType.TEXT_PLAIN })
|
|
||||||
public Response rebuildMetrics() {
|
|
||||||
// Map<String, ItemCollection> metricCache = new HashMap<String,
|
|
||||||
// ItemCollection>();
|
|
||||||
long l = System.currentTimeMillis();
|
|
||||||
logger.info("├── init dbtr metrics...");
|
|
||||||
|
|
||||||
try {
|
|
||||||
// first clear the metric cache
|
|
||||||
metricDebitorService.reset();
|
|
||||||
logger.info("│ ├── reset metric cache");
|
|
||||||
// run in new transaction!
|
|
||||||
metricDataService.deleteAllMetrics(MetricDebitorService.TYPE_METRIC_DEBITOR);
|
|
||||||
logger.info("│ ├── delete metrics");
|
|
||||||
|
|
||||||
computeMetrics();
|
|
||||||
logger.info("│ ├── computing metrics finished in " + (System.currentTimeMillis() - l) + "ms");
|
|
||||||
|
|
||||||
logger.info("│ ├── save and init metrics ...");
|
|
||||||
// run in new transaction!
|
|
||||||
metricDebitorService.refreshGauges();
|
|
||||||
|
|
||||||
String message = "├── rebuild dbtr metrics completed in "
|
|
||||||
+ (System.currentTimeMillis() - l)
|
|
||||||
+ "ms";
|
|
||||||
logger.info(message);
|
|
||||||
return Response.ok().entity(message).build();
|
|
||||||
|
|
||||||
} catch (Exception e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
return Response.serverError()
|
|
||||||
.entity("Failed to initialize metrics: " + e.getMessage())
|
|
||||||
.build();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This method initializes the metrics for all creditors with open invoices.
|
|
||||||
*
|
|
||||||
* The method deletes all existing metrics and creates new metric entires for
|
|
||||||
* each creditor.
|
|
||||||
*
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
@GET
|
|
||||||
@Path("/rebuild/{dbtrnumber}")
|
|
||||||
@Produces({ MediaType.TEXT_PLAIN })
|
|
||||||
public Response rebuildMetricsForDebitor(@PathParam("dbtrnumber") String dbtrnumber) {
|
|
||||||
StringBuffer messageBuffer = new StringBuffer();
|
|
||||||
long l = System.currentTimeMillis();
|
|
||||||
log("├── init dbtr metrics for " + dbtrnumber + "...", messageBuffer);
|
|
||||||
try {
|
|
||||||
|
|
||||||
logger.info("│ │ ├── group invoices by creditor " + dbtrnumber + "...");
|
|
||||||
|
|
||||||
int count = 0;
|
|
||||||
|
|
||||||
// First we need to remove all metrics for this creditor
|
|
||||||
String bpID = InvoiceUtil.buildBPID(dbtrnumber);
|
|
||||||
logger.info("│ │ ├── delete metrics for " + bpID + "...");
|
|
||||||
List<String> oldMetricKeys = metricDataService
|
|
||||||
.deleteAllMetricsByBPID(MetricDebitorService.TYPE_METRIC_DEBITOR, bpID);
|
|
||||||
logger.info("│ │ ├── found " + oldMetricKeys.size() + " metrics for " + bpID + "...");
|
|
||||||
metricDebitorService.reset(oldMetricKeys);
|
|
||||||
// next rebuild gauges and metrics for this creditor
|
|
||||||
String queryDbtrNumber = dbtrnumber;
|
|
||||||
if (queryDbtrNumber.startsWith("D")) {
|
|
||||||
queryDbtrNumber = queryDbtrNumber.substring(1); // DAS IST DER CARGOSOFT IRRSINN
|
|
||||||
}
|
|
||||||
String query = "$modelversion:rechnungsausgang-* AND type:workitem " +
|
|
||||||
" AND type:workitem AND dbtr.number:" + queryDbtrNumber;
|
|
||||||
logger.fine("Query = " + query);
|
|
||||||
List<ItemCollection> invoices = documentService.find(
|
|
||||||
query,
|
|
||||||
9999, 0, "invoice.number", false);
|
|
||||||
logger.info("│ │ ├──found " + invoices.size() + " open invoices");
|
|
||||||
|
|
||||||
List<String> newMetricKeys = new ArrayList<>();
|
|
||||||
for (ItemCollection invoice : invoices) {
|
|
||||||
try {
|
|
||||||
ItemCollection metricData = metricDebitorService.getMetricByInvoice(invoice);
|
|
||||||
String metricKey = metricData.getItemValueString("name");
|
|
||||||
newMetricKeys.add(metricKey);
|
|
||||||
// Jetzt Rechnung addieren
|
|
||||||
logger.info("│ │ │ ├──update metric (" + metricKey + ")" + InvoiceUtil.getBPId(invoice)
|
|
||||||
+ " Invoice: "
|
|
||||||
+ invoice.getItemValueString("invoice.number") + " Saldo: "
|
|
||||||
+ invoice.getItemValueDouble(MetricDebitorService.ITEM_SALDO));
|
|
||||||
logger.info("│ │ │ │ ├── last metric saldo: "
|
|
||||||
+ metricData.getItemValueDouble(MetricDebitorService.ITEM_SALDO));
|
|
||||||
metricDebitorService.addInvoice(metricData, invoice);
|
|
||||||
logger.info("│ │ │ │ ├── new metric saldo: "
|
|
||||||
+ metricData.getItemValueDouble(MetricDebitorService.ITEM_SALDO));
|
|
||||||
metricDebitorService.putMetric(metricData);
|
|
||||||
count++;
|
|
||||||
} catch (PluginException e) {
|
|
||||||
// invalid invoice - e.g. no dbtr. number
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
logger.info("│ │ ├── updated metric for " + count + " invoices.");
|
|
||||||
|
|
||||||
log("│ ├── computing metrics finished in " + (System.currentTimeMillis() - l) + "ms", messageBuffer);
|
|
||||||
|
|
||||||
logger.info("│ ├── save and init metrics...");
|
|
||||||
// run in new transaction!
|
|
||||||
metricDebitorService.refreshGauges(newMetricKeys);
|
|
||||||
|
|
||||||
String message = "├── rebuild dbtr metrics completed in "
|
|
||||||
+ (System.currentTimeMillis() - l)
|
|
||||||
+ "ms";
|
|
||||||
log(message, messageBuffer);
|
|
||||||
return Response.ok().entity(messageBuffer.toString()).build();
|
|
||||||
|
|
||||||
} catch (Exception e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
return Response.serverError()
|
|
||||||
.entity("Failed to initialize metrics: " + e.getMessage())
|
|
||||||
.build();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Diese Methode berechnet alle Metriken auf basis der existierenden Rechnungen
|
|
||||||
* neu
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
public void computeMetrics() {
|
|
||||||
|
|
||||||
logger.info("│ │ ├── group invoices by debitor...");
|
|
||||||
try {
|
|
||||||
int count = 0;
|
|
||||||
List<ItemCollection> invoices = documentService.find(
|
|
||||||
"$modelversion:rechnungsausgang-* AND type:workitem",
|
|
||||||
9999, 0,
|
|
||||||
"invoice.number", false);
|
|
||||||
|
|
||||||
logger.info("│ │ ├── found " + invoices.size() + " open invoices");
|
|
||||||
for (ItemCollection invoice : invoices) {
|
|
||||||
try {
|
|
||||||
|
|
||||||
ItemCollection metricData = metricDebitorService.getMetricByInvoice(invoice);
|
|
||||||
|
|
||||||
// Jetzt Rechnung addieren
|
|
||||||
metricDebitorService.addInvoice(metricData, invoice);
|
|
||||||
logger.info("│ │ │ ├──update metric " + InvoiceUtil.getBPId(invoice));
|
|
||||||
metricDebitorService.putMetric(metricData);
|
|
||||||
count++;
|
|
||||||
} catch (PluginException e) {
|
|
||||||
// invalid invoice - e.g. no dbtr. number
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
logger.info("│ │ ├── updated metric for " + count + " invoices.");
|
|
||||||
} catch (QueryException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
private void log(String message, StringBuffer messageLog) {
|
|
||||||
logger.info(message);
|
|
||||||
messageLog.append(message + "\n");
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,367 +0,0 @@
|
||||||
package com.alexanderlogistics.metrics;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Set;
|
|
||||||
import java.util.concurrent.ConcurrentHashMap;
|
|
||||||
import java.util.logging.Logger;
|
|
||||||
|
|
||||||
import org.eclipse.microprofile.config.inject.ConfigProperty;
|
|
||||||
import org.eclipse.microprofile.metrics.Metadata;
|
|
||||||
import org.eclipse.microprofile.metrics.MetricRegistry;
|
|
||||||
import org.eclipse.microprofile.metrics.Tag;
|
|
||||||
import org.eclipse.microprofile.metrics.annotation.RegistryScope;
|
|
||||||
import org.imixs.workflow.ItemCollection;
|
|
||||||
import org.imixs.workflow.engine.DocumentService;
|
|
||||||
import org.imixs.workflow.engine.ProcessingEvent;
|
|
||||||
import org.imixs.workflow.exceptions.PluginException;
|
|
||||||
import org.imixs.workflow.exceptions.QueryException;
|
|
||||||
|
|
||||||
import com.alexanderlogistics.InvoiceUtil;
|
|
||||||
|
|
||||||
import jakarta.annotation.security.DeclareRoles;
|
|
||||||
import jakarta.annotation.security.RolesAllowed;
|
|
||||||
import jakarta.annotation.security.RunAs;
|
|
||||||
import jakarta.ejb.TransactionAttribute;
|
|
||||||
import jakarta.ejb.TransactionAttributeType;
|
|
||||||
import jakarta.enterprise.context.ApplicationScoped;
|
|
||||||
import jakarta.enterprise.event.Observes;
|
|
||||||
import jakarta.inject.Inject;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Dieser Service reagiert auch ProcessingEvents und speichert/aktualisiert die
|
|
||||||
* zugehörige Debitoren Metric Entity (type=metric.debitor).
|
|
||||||
* <p>
|
|
||||||
* Der Service liest in einem AFTER_PROCESS Event den alten invoice.saldo aus.
|
|
||||||
* Hierzu wird die Rechnung in einer neuen Transaktion geladen was einem
|
|
||||||
* 'Dirty-Read' entspricht. Dadurch kennt die Methode den letzten saldo der
|
|
||||||
* Rechnung. Hat sich nun der aktuelle Saldo geändert, aktualisiert der Serivce
|
|
||||||
* die entsprechende Metric.
|
|
||||||
*
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
@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" })
|
|
||||||
@RunAs("org.imixs.ACCESSLEVEL.MANAGERACCESS")
|
|
||||||
@ApplicationScoped
|
|
||||||
public class MetricDebitorService {
|
|
||||||
|
|
||||||
private static Logger logger = Logger.getLogger(MetricDebitorService.class.getName());
|
|
||||||
private final ConcurrentHashMap<String, ItemCollection> metricCache = new ConcurrentHashMap<>();
|
|
||||||
private final Set<String> registeredGauges = ConcurrentHashMap.newKeySet();
|
|
||||||
|
|
||||||
public static final String TYPE_METRIC_DEBITOR = "metric.debitor";
|
|
||||||
public static final String ITEM_SALDO = "invoice.saldo";
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
@RegistryScope(scope = MetricRegistry.APPLICATION_SCOPE)
|
|
||||||
MetricRegistry metricRegistry;
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
DocumentService documentService;
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
MetricDataService metricDataService;
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
@ConfigProperty(name = "metrics.enabled", defaultValue = "false")
|
|
||||||
private boolean metricsEnabled;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Reset internal metricCache and clear registered Gauges.
|
|
||||||
*/
|
|
||||||
public void reset() {
|
|
||||||
metricCache.clear();
|
|
||||||
registeredGauges.clear();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Reset the internal metricCache and clears all registered Gauges for a list of
|
|
||||||
* metric keys.
|
|
||||||
*/
|
|
||||||
public void reset(List<String> metricKeys) {
|
|
||||||
for (String metricKey : metricKeys) {
|
|
||||||
metricCache.remove(metricKey);
|
|
||||||
metricRegistry.remove(metricKey);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Process Metric only if some data has changed....
|
|
||||||
*
|
|
||||||
* @param processingEvent
|
|
||||||
* @throws PluginException
|
|
||||||
*/
|
|
||||||
public void onProcessingEvent(@Observes ProcessingEvent processingEvent) {
|
|
||||||
long l = System.currentTimeMillis();
|
|
||||||
if (!metricsEnabled) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
ItemCollection invoice = processingEvent.getDocument();
|
|
||||||
if (!invoice.getModelVersion().startsWith("rechnungsausgang-")) {
|
|
||||||
// skip event
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// update metric and the metric cache
|
|
||||||
if (processingEvent.getEventType() == ProcessingEvent.AFTER_PROCESS) {
|
|
||||||
// load the last invoice metric and reduce the saldo...
|
|
||||||
ItemCollection lastInvoice = metricDataService.readDirtyWorkitem(invoice.getUniqueID());
|
|
||||||
if (lastInvoice != null) {
|
|
||||||
try {
|
|
||||||
ItemCollection lastMetricData = getMetricByInvoice(lastInvoice);
|
|
||||||
subtractInvoice(lastMetricData, lastInvoice);
|
|
||||||
putMetric(lastMetricData);
|
|
||||||
metricDataService.saveMetric(lastMetricData);
|
|
||||||
} catch (PluginException e) {
|
|
||||||
// invalid invoice - e.g. no cdtr. number
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
// load the invoice metric and add the saldo...
|
|
||||||
ItemCollection metricData = getMetricByInvoice(invoice);
|
|
||||||
// Saldo-Berechnung
|
|
||||||
addInvoice(metricData, invoice);
|
|
||||||
putMetric(metricData);
|
|
||||||
metricDataService.saveMetric(metricData);
|
|
||||||
|
|
||||||
// Update the Gauge
|
|
||||||
updateGauge(metricData);
|
|
||||||
logger.info("Metric dbtr update took " + (System.currentTimeMillis() - l) + "ms");
|
|
||||||
} catch (PluginException e) {
|
|
||||||
// invalid invoice - e.g. no dbtr. number
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the corresponding metric data object for an invoice. The method uses
|
|
||||||
* an internal cache. If the metric was not yet cached the method loads the
|
|
||||||
* metric from the database. If not metric exists in the database the method
|
|
||||||
* automatically creates a new metric data object.
|
|
||||||
*
|
|
||||||
* The method throws a PluginException if no metric can be build from this
|
|
||||||
* invoice (e.g. missing dbtr.number).
|
|
||||||
*
|
|
||||||
* @param invoice
|
|
||||||
* @return
|
|
||||||
* @throws PluginException
|
|
||||||
*/
|
|
||||||
public ItemCollection getMetricByInvoice(ItemCollection invoice) throws PluginException {
|
|
||||||
if (invoice == null) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
String metricKey = MetricDataService.buildKeyByInvoice(invoice);
|
|
||||||
ItemCollection metricData = metricCache.get(metricKey);
|
|
||||||
if (metricData == null) {
|
|
||||||
metricData = loadMetric(invoice);
|
|
||||||
}
|
|
||||||
// if metric still null we create a new metric data object.
|
|
||||||
if (metricData == null) {
|
|
||||||
metricData = createMetaData(invoice);
|
|
||||||
}
|
|
||||||
return metricData;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns a metric data object by key
|
|
||||||
*
|
|
||||||
* @param key
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
public ItemCollection getMetric(String key) {
|
|
||||||
return metricCache.get(key);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Puts a metric data object into the cache.
|
|
||||||
*
|
|
||||||
* @param metricData
|
|
||||||
*/
|
|
||||||
public void putMetric(ItemCollection metricData) {
|
|
||||||
metricCache.put(metricData.getItemValueString("name"), metricData);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns a list with all cached metric keys.
|
|
||||||
* The method returns an unmodifiable list to prevent modifications.
|
|
||||||
*
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
public List<String> getMetricKeys() {
|
|
||||||
return Collections.unmodifiableList(new ArrayList<>(metricCache.keySet()));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This method loads a metric entity for a given invoice workitem. If no metric
|
|
||||||
* entity exits, the method
|
|
||||||
* creates a new metric entity.
|
|
||||||
*
|
|
||||||
* @param invoice
|
|
||||||
* @return
|
|
||||||
* @throws PluginException
|
|
||||||
*/
|
|
||||||
private ItemCollection loadMetric(ItemCollection invoice) throws PluginException {
|
|
||||||
ItemCollection debitorMetric = null;
|
|
||||||
if (invoice == null) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
try {
|
|
||||||
String metricKey = MetricDataService.buildKeyByInvoice(invoice);
|
|
||||||
String query = "(type:" + TYPE_METRIC_DEBITOR + ") AND (name:" + metricKey + ")";
|
|
||||||
List<ItemCollection> result = documentService.find(query, 1, 0, "$modified", true);
|
|
||||||
if (result.size() > 0) {
|
|
||||||
debitorMetric = result.get(0);
|
|
||||||
}
|
|
||||||
} catch (IllegalArgumentException | QueryException e) {
|
|
||||||
throw new PluginException(PluginException.class.getName(),
|
|
||||||
"Failed to load metric object for invoice " + invoice.getUniqueID() + ": ", e.getMessage(), e);
|
|
||||||
}
|
|
||||||
return debitorMetric;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates an empty Debitor Meta Data Object (ItemCollection)
|
|
||||||
* <p>
|
|
||||||
* The ItemCollection stores the name and number and also all saldos for all
|
|
||||||
* currencies
|
|
||||||
*
|
|
||||||
* @param invoice - invoice ItemCollection
|
|
||||||
* @return
|
|
||||||
* @throws PluginException
|
|
||||||
*/
|
|
||||||
private ItemCollection createMetaData(ItemCollection invoice) throws PluginException {
|
|
||||||
if (invoice == null) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
String key = MetricDataService.buildKeyByInvoice(invoice);
|
|
||||||
ItemCollection metricData = new ItemCollection();
|
|
||||||
metricData.setType(TYPE_METRIC_DEBITOR);
|
|
||||||
metricData.setItemValue("name", key);
|
|
||||||
metricData.setItemValue("bp.id", InvoiceUtil.getBPId(invoice));
|
|
||||||
metricData.setItemValue("bp.name", InvoiceUtil.getBPName(invoice));
|
|
||||||
metricData.setItemValue("country", invoice.getItemValueString("invoice.country"));
|
|
||||||
metricData.setItemValue("currency", invoice.getItemValueString("invoice.currency"));
|
|
||||||
metricData.setItemValue("department", invoice.getItemValueString("space.name"));
|
|
||||||
|
|
||||||
return metricData;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Helper method to register a gauge for a debitor
|
|
||||||
*
|
|
||||||
* @param metricData - the metricData ItemCollection
|
|
||||||
*/
|
|
||||||
public void updateGauge(ItemCollection metricData) {
|
|
||||||
|
|
||||||
String metricKey = metricData.getItemValueString("name");
|
|
||||||
String bpName = metricData.getItemValueString("bp.name");
|
|
||||||
String bpId = metricData.getItemValueString("bp.id");
|
|
||||||
String country = metricData.getItemValueString("country");
|
|
||||||
String department = metricData.getItemValueString("department");
|
|
||||||
String currency = metricData.getItemValueString("currency");
|
|
||||||
|
|
||||||
// Prüfen ob Gauge bereits registriert ist
|
|
||||||
if (registeredGauges.add(metricKey)) { // returns true newly added
|
|
||||||
List<Tag> tags = new ArrayList<>();
|
|
||||||
tags.add(new Tag("type", "dbtr"));
|
|
||||||
tags.add(new Tag("id", bpId));
|
|
||||||
tags.add(new Tag("name", bpName));
|
|
||||||
tags.add(new Tag("country", country));
|
|
||||||
tags.add(new Tag("currency", currency));
|
|
||||||
tags.add(new Tag("department", department));
|
|
||||||
logger.fine("register new metric for department: " + department +
|
|
||||||
", " + metricData.getItemValueString(ITEM_SALDO) +
|
|
||||||
" " + currency);
|
|
||||||
Metadata metadata = Metadata.builder()
|
|
||||||
.withName("dbtr.balance")
|
|
||||||
.withDescription("Debitor Balance")
|
|
||||||
.build();
|
|
||||||
|
|
||||||
metricCache.get(metricKey);
|
|
||||||
metricRegistry.gauge(metadata,
|
|
||||||
() -> metricCache.get(metricKey).getItemValueDouble(ITEM_SALDO),
|
|
||||||
tags.toArray(new Tag[0]));
|
|
||||||
} else {
|
|
||||||
logger.fine("Gauge already registered for department: " + department);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Addiert den saldo einer Invoice zu einem metricData object
|
|
||||||
*
|
|
||||||
* @param metricData
|
|
||||||
* @param invoice
|
|
||||||
*/
|
|
||||||
public void addInvoice(ItemCollection metricData, ItemCollection invoice) {
|
|
||||||
double invoiceTotal = invoice.getItemValueDouble(ITEM_SALDO);
|
|
||||||
if (!"workitem".equals(invoice.getType()) || invoice.getTaskID() >= 5800) {
|
|
||||||
// vorgang ist archiviert oder gelöscht worden => saldo = 0!
|
|
||||||
invoiceTotal = 0.0;
|
|
||||||
}
|
|
||||||
|
|
||||||
logger.fine("│ │ │ │ ├── Invoice: " + invoice.getItemValueString("invoice.number") + " Saldo="
|
|
||||||
+ invoiceTotal);
|
|
||||||
// is the metric new?
|
|
||||||
if (!metricData.hasItem(ITEM_SALDO)) {
|
|
||||||
// init metric with the total value!
|
|
||||||
metricData.setItemValue(ITEM_SALDO, InvoiceUtil.round(invoiceTotal));
|
|
||||||
} else {
|
|
||||||
double lastSaldo = metricData.getItemValueDouble(ITEM_SALDO);
|
|
||||||
logger.fine("│ │ │ │ ├──letzter Metric Saldo=" + lastSaldo);
|
|
||||||
metricData.setItemValue(ITEM_SALDO, InvoiceUtil.round(lastSaldo + invoiceTotal));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void subtractInvoice(ItemCollection metricData, ItemCollection invoice) {
|
|
||||||
if (metricData == null || invoice == null) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
double invoiceTotal = invoice.getItemValueDouble(ITEM_SALDO);
|
|
||||||
logger.fine("│ │ │ │ ├──Invoice: " + invoice.getItemValueString("invoice.number") + " Saldo="
|
|
||||||
+ invoiceTotal);
|
|
||||||
if (!"workitem".equals(invoice.getType()) || invoice.getTaskID() >= 5800) {
|
|
||||||
// vorgang ist archiviert oder gelöscht worden => saldo = 0!
|
|
||||||
invoiceTotal = 0.0;
|
|
||||||
}
|
|
||||||
// subtract only if metric saldo exists
|
|
||||||
if (metricData.hasItem(ITEM_SALDO)) {
|
|
||||||
double lastSaldo = metricData.getItemValueDouble(ITEM_SALDO);
|
|
||||||
logger.fine("│ │ │ │ ├──letzter Metric Saldo=" + lastSaldo);
|
|
||||||
metricData.setItemValue(ITEM_SALDO, InvoiceUtil.round(lastSaldo - invoiceTotal));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Helper Method that refreshes all gauges. The method is called by the
|
|
||||||
* RestService during a rebuild.
|
|
||||||
*/
|
|
||||||
@TransactionAttribute(value = TransactionAttributeType.REQUIRES_NEW)
|
|
||||||
public void refreshGauges() {
|
|
||||||
List<String> keys = getMetricKeys();
|
|
||||||
refreshGauges(keys);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Helper Method that refreshes all gauges. The method is called by the
|
|
||||||
* RestService during a rebuild.
|
|
||||||
*/
|
|
||||||
@TransactionAttribute(value = TransactionAttributeType.REQUIRES_NEW)
|
|
||||||
public void refreshGauges(List<String> keys) {
|
|
||||||
for (String hashKey : keys) {
|
|
||||||
ItemCollection metricData = getMetric(hashKey);
|
|
||||||
documentService.save(metricData);
|
|
||||||
updateGauge(metricData);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
@ -28,10 +28,15 @@
|
||||||
|
|
||||||
package com.alexanderlogistics.xml;
|
package com.alexanderlogistics.xml;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
|
import org.imixs.archive.core.SnapshotService;
|
||||||
import org.imixs.workflow.ItemCollection;
|
import org.imixs.workflow.ItemCollection;
|
||||||
|
import org.imixs.workflow.WorkflowKernel;
|
||||||
import org.imixs.workflow.engine.DocumentEvent;
|
import org.imixs.workflow.engine.DocumentEvent;
|
||||||
import org.imixs.workflow.engine.DocumentService;
|
import org.imixs.workflow.engine.DocumentService;
|
||||||
import org.imixs.workflow.engine.ModelService;
|
import org.imixs.workflow.engine.ModelService;
|
||||||
|
|
@ -42,8 +47,13 @@ import org.imixs.workflow.exceptions.PluginException;
|
||||||
import org.imixs.workflow.exceptions.ProcessingErrorException;
|
import org.imixs.workflow.exceptions.ProcessingErrorException;
|
||||||
import org.imixs.workflow.exceptions.QueryException;
|
import org.imixs.workflow.exceptions.QueryException;
|
||||||
|
|
||||||
|
import com.alexanderlogistics.BusinessPartnerService;
|
||||||
import com.alexanderlogistics.InvoiceUtil;
|
import com.alexanderlogistics.InvoiceUtil;
|
||||||
|
import com.alexanderlogistics.KreditorDebitorService;
|
||||||
|
|
||||||
|
import jakarta.annotation.security.DeclareRoles;
|
||||||
|
import jakarta.annotation.security.RolesAllowed;
|
||||||
|
import jakarta.annotation.security.RunAs;
|
||||||
import jakarta.ejb.EJB;
|
import jakarta.ejb.EJB;
|
||||||
import jakarta.ejb.Stateless;
|
import jakarta.ejb.Stateless;
|
||||||
import jakarta.enterprise.event.Observes;
|
import jakarta.enterprise.event.Observes;
|
||||||
|
|
@ -56,10 +66,22 @@ import jakarta.enterprise.event.Observes;
|
||||||
* ein und prüft ob der Workflow schon existiert oder ggf. aktualisiert werden
|
* ein und prüft ob der Workflow schon existiert oder ggf. aktualisiert werden
|
||||||
* muss.
|
* muss.
|
||||||
*
|
*
|
||||||
|
* Der Service migriert auch die alten zusätzlichen IBAN/BIC felder wenn der
|
||||||
|
* Business partner erstmals neu angelegt wird.
|
||||||
|
*
|
||||||
|
* The service set also the flag NOSNAPSHOT=true for the crgosoftcreditor
|
||||||
|
* document type.
|
||||||
*
|
*
|
||||||
* @author rsoika
|
* @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" })
|
||||||
|
@RunAs("org.imixs.ACCESSLEVEL.MANAGERACCESS")
|
||||||
@Stateless
|
@Stateless
|
||||||
public class BusinessPartnerImportService {
|
public class BusinessPartnerImportService {
|
||||||
|
|
||||||
|
|
@ -92,8 +114,16 @@ public class BusinessPartnerImportService {
|
||||||
if (event.getEventType() == DocumentEvent.ON_DOCUMENT_SAVE) {
|
if (event.getEventType() == DocumentEvent.ON_DOCUMENT_SAVE) {
|
||||||
// check type!
|
// check type!
|
||||||
if ("cargosoftkreditor".equals(event.getDocument().getType())) {
|
if ("cargosoftkreditor".equals(event.getDocument().getType())) {
|
||||||
logger.info("Verify business partner object....");
|
// set NOSNAPSHOT=true
|
||||||
|
event.getDocument().setItemValue(SnapshotService.NOSNAPSHOT, true);
|
||||||
|
|
||||||
|
// run only if we have the model 'businesspartner-*';
|
||||||
|
if (modelService.findVersionsByRegEx("(businesspartner*)").size() == 0) {
|
||||||
|
// no business partner workflow found
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
logger.fine("Verify business partner object....");
|
||||||
ItemCollection importDoc = event.getDocument();
|
ItemCollection importDoc = event.getDocument();
|
||||||
|
|
||||||
String name = event.getDocument().getItemValueString("name");
|
String name = event.getDocument().getItemValueString("name");
|
||||||
|
|
@ -103,7 +133,7 @@ public class BusinessPartnerImportService {
|
||||||
// Prüfen ob es diesen partner schon gibt?
|
// Prüfen ob es diesen partner schon gibt?
|
||||||
ItemCollection businesspartner = lookupBusinessPartner(partnerID);
|
ItemCollection businesspartner = lookupBusinessPartner(partnerID);
|
||||||
if (businesspartner == null) {
|
if (businesspartner == null) {
|
||||||
businesspartner = createBusinessPartner();
|
businesspartner = createBusinessPartner(partnerID);
|
||||||
}
|
}
|
||||||
ItemCollection oldBussinessPartnerItemColl = (ItemCollection) businesspartner.clone();
|
ItemCollection oldBussinessPartnerItemColl = (ItemCollection) businesspartner.clone();
|
||||||
|
|
||||||
|
|
@ -130,7 +160,33 @@ public class BusinessPartnerImportService {
|
||||||
|
|
||||||
// hat sich das Objekt verändert?
|
// hat sich das Objekt verändert?
|
||||||
if (!businesspartner.equals(oldBussinessPartnerItemColl)) {
|
if (!businesspartner.equals(oldBussinessPartnerItemColl)) {
|
||||||
businesspartner.event(201); // update/create
|
|
||||||
|
// Prüfe IBAN auf plausibilität
|
||||||
|
List<ItemCollection> bankList = BusinessPartnerService.getBanks(businesspartner);
|
||||||
|
boolean ibanDublette = false;
|
||||||
|
List<String> dublettenIban = new ArrayList<>();
|
||||||
|
for (ItemCollection bank : bankList) {
|
||||||
|
String iban = bank.getItemValueString("iban");
|
||||||
|
// erkenne fehlerhaften kontonummern
|
||||||
|
if (dublettenIban.contains(iban)) {
|
||||||
|
// ACHTUNG - uneindeutige Bankverbindung
|
||||||
|
ibanDublette = true;
|
||||||
|
} else {
|
||||||
|
dublettenIban.add(iban);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int eventID = 200; // default
|
||||||
|
// event errechnen
|
||||||
|
if (!businesspartner.hasItem(WorkflowKernel.LASTEVENT)) {
|
||||||
|
// create new!
|
||||||
|
if (ibanDublette) {
|
||||||
|
eventID = 300; // Exception
|
||||||
|
} else {
|
||||||
|
eventID = 100; // update/create
|
||||||
|
}
|
||||||
|
}
|
||||||
|
businesspartner.setEventID(eventID);
|
||||||
try {
|
try {
|
||||||
workflowService.processWorkItemByNewTransaction(businesspartner);
|
workflowService.processWorkItemByNewTransaction(businesspartner);
|
||||||
} catch (AccessDeniedException | ProcessingErrorException | PluginException | ModelException e) {
|
} catch (AccessDeniedException | ProcessingErrorException | PluginException | ModelException e) {
|
||||||
|
|
@ -147,15 +203,122 @@ public class BusinessPartnerImportService {
|
||||||
*
|
*
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
private ItemCollection createBusinessPartner() {
|
private ItemCollection createBusinessPartner(String partnerID) {
|
||||||
ItemCollection businessPartner = new ItemCollection();
|
ItemCollection businessPartner = new ItemCollection();
|
||||||
businessPartner.setType("workitem");
|
businessPartner.setType("workitem");
|
||||||
businessPartner.setWorkflowGroup("Business Partner");
|
businessPartner.setWorkflowGroup("Business Partner");
|
||||||
businessPartner.task(1000);
|
businessPartner.task(1000);
|
||||||
|
|
||||||
|
// Hier migrieren wir jetzt auch die alten IBAN/BIC Daten
|
||||||
|
try {
|
||||||
|
String cargoShortID = partnerID.substring(2);
|
||||||
|
String query = "(type:" + KreditorDebitorService.TYPE_CARGOSOFTKREDITOR + ")";
|
||||||
|
query = query + " AND ( name:K7" + cargoShortID + " OR name:D1" + cargoShortID + " )";
|
||||||
|
|
||||||
|
List<ItemCollection> oldList = documentService.find(query, 2, 0);
|
||||||
|
|
||||||
|
// es können 2 Datensätze ankommen
|
||||||
|
|
||||||
|
// Items:
|
||||||
|
// cdtr.mail (Liste)
|
||||||
|
// cdtr.creditperiod
|
||||||
|
// cdtr.iban , cdtr.iban2 - 4
|
||||||
|
// cdtr.bic , cdtr.bic2 - 4
|
||||||
|
List<String> ibanList = new ArrayList<>();
|
||||||
|
List<String> bicList = new ArrayList<>();
|
||||||
|
for (ItemCollection oldData : oldList) {
|
||||||
|
if (!oldData.getItemValueString("cdtr.mail").isEmpty()) {
|
||||||
|
businessPartner.setItemValue("cdtr.mail", oldData.getItemValue("cdtr.mail"));
|
||||||
|
}
|
||||||
|
if (!oldData.getItemValueString("cdtr.creditperiod").isEmpty()) {
|
||||||
|
businessPartner.setItemValue("cdtr.creditperiod", oldData.getItemValue("cdtr.creditperiod"));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!oldData.getItemValueString("cdtr.iban").isEmpty()) {
|
||||||
|
ibanList.add(oldData.getItemValueString("cdtr.iban"));
|
||||||
|
}
|
||||||
|
if (!oldData.getItemValueString("cdtr.bic").isEmpty()) {
|
||||||
|
bicList.add(oldData.getItemValueString("cdtr.bic"));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!oldData.getItemValueString("cdtr.iban2").isEmpty()) {
|
||||||
|
ibanList.add(oldData.getItemValueString("cdtr.iban2"));
|
||||||
|
}
|
||||||
|
if (!oldData.getItemValueString("cdtr.bic2").isEmpty()) {
|
||||||
|
bicList.add(oldData.getItemValueString("cdtr.bic2"));
|
||||||
|
}
|
||||||
|
if (!oldData.getItemValueString("cdtr.iban3").isEmpty()) {
|
||||||
|
ibanList.add(oldData.getItemValueString("cdtr.iban3"));
|
||||||
|
}
|
||||||
|
if (!oldData.getItemValueString("cdtr.bic3").isEmpty()) {
|
||||||
|
bicList.add(oldData.getItemValueString("cdtr.bic3"));
|
||||||
|
}
|
||||||
|
if (!oldData.getItemValueString("cdtr.iban4").isEmpty()) {
|
||||||
|
ibanList.add(oldData.getItemValueString("cdtr.iban4"));
|
||||||
|
}
|
||||||
|
if (!oldData.getItemValueString("cdtr.bic4").isEmpty()) {
|
||||||
|
bicList.add(oldData.getItemValueString("cdtr.bic4"));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// build partner.iban.list - dublettenprüfung und Trim
|
||||||
|
List<String> dubletten = new ArrayList<>();
|
||||||
|
List<String> dublettenIban = new ArrayList<>();
|
||||||
|
|
||||||
|
if (ibanList.size() > 0) {
|
||||||
|
List<ItemCollection> bankList = new ArrayList<>();
|
||||||
|
for (int i = 0; i < ibanList.size(); i++) {
|
||||||
|
String iban = ibanList.get(i);
|
||||||
|
String bic = "";
|
||||||
|
if (bicList.size() > i) {
|
||||||
|
bic = bicList.get(i);
|
||||||
|
}
|
||||||
|
|
||||||
|
iban = superTrim(iban);
|
||||||
|
bic = superTrim(bic);
|
||||||
|
if (dubletten.contains(iban + "/" + bic)) {
|
||||||
|
// voll dublette
|
||||||
|
continue;
|
||||||
|
} else {
|
||||||
|
dubletten.add(iban + "/" + bic);
|
||||||
|
}
|
||||||
|
|
||||||
|
ItemCollection bank = new ItemCollection();
|
||||||
|
// {cdtr.iban=[A], name=[cdtr1], cdtr.name=[a], cdtr.bic=[a]}
|
||||||
|
bank.setItemValue("id", "bank" + (i + 1));
|
||||||
|
bank.setItemValue("name", "Bank " + (i + 1));
|
||||||
|
bank.setItemValue("iban", iban);
|
||||||
|
bank.setItemValue("bic", bic);
|
||||||
|
|
||||||
|
bankList.add(bank);
|
||||||
|
}
|
||||||
|
Iterator<?> var3 = bankList.iterator();
|
||||||
|
List<Map> mapOrderItems = new ArrayList();
|
||||||
|
while (var3.hasNext()) {
|
||||||
|
ItemCollection orderItem = (ItemCollection) var3.next();
|
||||||
|
mapOrderItems.add(orderItem.getAllItems());
|
||||||
|
}
|
||||||
|
businessPartner.setItemValue(BusinessPartnerService.ITEM_IBAN_LIST, mapOrderItems);
|
||||||
|
}
|
||||||
|
|
||||||
|
} catch (QueryException e) {
|
||||||
|
// TODO Auto-generated catch block
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
return businessPartner;
|
return businessPartner;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* entfernt alle leerzeichen
|
||||||
|
*/
|
||||||
|
public String superTrim(String data) {
|
||||||
|
String result = data.trim();
|
||||||
|
result = result.replace(" ", "");
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sucht nach einem Business partner
|
* Sucht nach einem Business partner
|
||||||
*
|
*
|
||||||
|
|
|
||||||
|
|
@ -7,4 +7,30 @@
|
||||||
!important;
|
!important;
|
||||||
background-position: 4px 6px, center !important;
|
background-position: 4px 6px, center !important;
|
||||||
padding-left: 22px !important;
|
padding-left: 22px !important;
|
||||||
|
}
|
||||||
|
.tooltip-link {
|
||||||
|
position: relative;
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tooltip-text {
|
||||||
|
visibility: hidden;
|
||||||
|
width: 300px;
|
||||||
|
background-color: black;
|
||||||
|
color: #fff;
|
||||||
|
text-align: center;
|
||||||
|
border-radius: 5px;
|
||||||
|
padding: 5px;
|
||||||
|
position: absolute;
|
||||||
|
z-index: 1;
|
||||||
|
bottom: 125%; /* Position above the link */
|
||||||
|
left: 50%;
|
||||||
|
margin-left: -150px; /* Center the tooltip */
|
||||||
|
opacity: 0;
|
||||||
|
transition: opacity 0.3s;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tooltip-link:hover .tooltip-text {
|
||||||
|
visibility: visible;
|
||||||
|
opacity: 1;
|
||||||
}
|
}
|
||||||
|
|
@ -0,0 +1,49 @@
|
||||||
|
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
|
||||||
|
xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
|
||||||
|
xmlns:f="http://xmlns.jcp.org/jsf/core"
|
||||||
|
xmlns:c="http://xmlns.jcp.org/jsp/jstl/core"
|
||||||
|
xmlns:h="http://xmlns.jcp.org/jsf/html">
|
||||||
|
|
||||||
|
<!-- Zeit alle verknüften Zahlungen an -->
|
||||||
|
|
||||||
|
|
||||||
|
<h:panelGroup layout="block" styleClass="imixs-form-section"
|
||||||
|
id="dunnings">
|
||||||
|
|
||||||
|
<table class="imixsdatatable ">
|
||||||
|
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<th style="width: 600px;">Mahnung</th>
|
||||||
|
<th style="width: 200px;">Status</th>
|
||||||
|
<th style="">#{message.modified}</th>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<ui:param name="dunnings"
|
||||||
|
value="#{businessPartnerController.getDunnings()}"></ui:param>
|
||||||
|
<ui:repeat var="dunning" value="#{dunnings}">
|
||||||
|
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td><h:link outcome="/pages/workitems/workitem">
|
||||||
|
#{dunning.item['$workflowsummary']}
|
||||||
|
<f:param name="id" value="#{dunning.item['$uniqueid']}" />
|
||||||
|
</h:link></td>
|
||||||
|
<td>#{dunning.item['$workflowstatus']}</td>
|
||||||
|
|
||||||
|
<td><h:outputText value="#{dunning.item['$lastEventDate']}">
|
||||||
|
<f:convertDateTime pattern="#{message.datePatternShort}"
|
||||||
|
timeZone="#{message.timeZone}" />
|
||||||
|
</h:outputText> #{message.by} #{userController.getUserName(dunning.item['$editor'])}</td>
|
||||||
|
</tr>
|
||||||
|
</ui:repeat>
|
||||||
|
|
||||||
|
|
||||||
|
</table>
|
||||||
|
</h:panelGroup>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</ui:composition>
|
||||||
|
|
@ -0,0 +1,49 @@
|
||||||
|
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
|
||||||
|
xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
|
||||||
|
xmlns:f="http://xmlns.jcp.org/jsf/core"
|
||||||
|
xmlns:c="http://xmlns.jcp.org/jsp/jstl/core"
|
||||||
|
xmlns:h="http://xmlns.jcp.org/jsf/html">
|
||||||
|
|
||||||
|
<!-- Zeit alle verknüften Zahlungen an -->
|
||||||
|
|
||||||
|
|
||||||
|
<h:panelGroup layout="block" styleClass="imixs-form-section"
|
||||||
|
id="invoices">
|
||||||
|
|
||||||
|
<table class="imixsdatatable ">
|
||||||
|
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<th style="width: 600px;">Rechnung</th>
|
||||||
|
<th style="width: 200px;">Status</th>
|
||||||
|
<th style="">#{message.modified}</th>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<ui:param name="invoices"
|
||||||
|
value="#{businessPartnerController.getInvoicesIn()}"></ui:param>
|
||||||
|
<ui:repeat var="invoice" value="#{invoices}">
|
||||||
|
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td><h:link outcome="/pages/workitems/workitem">
|
||||||
|
#{invoice.item['$workflowsummary']}
|
||||||
|
<f:param name="id" value="#{invoice.item['$uniqueid']}" />
|
||||||
|
</h:link></td>
|
||||||
|
<td>#{invoice.item['$workflowstatus']}</td>
|
||||||
|
|
||||||
|
<td><h:outputText value="#{invoice.item['$lastEventDate']}">
|
||||||
|
<f:convertDateTime pattern="#{message.datePatternShort}"
|
||||||
|
timeZone="#{message.timeZone}" />
|
||||||
|
</h:outputText> #{message.by} #{userController.getUserName(invoice.item['$editor'])}</td>
|
||||||
|
</tr>
|
||||||
|
</ui:repeat>
|
||||||
|
|
||||||
|
|
||||||
|
</table>
|
||||||
|
</h:panelGroup>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</ui:composition>
|
||||||
|
|
@ -0,0 +1,51 @@
|
||||||
|
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
|
||||||
|
xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
|
||||||
|
xmlns:f="http://xmlns.jcp.org/jsf/core"
|
||||||
|
xmlns:c="http://xmlns.jcp.org/jsp/jstl/core"
|
||||||
|
xmlns:h="http://xmlns.jcp.org/jsf/html">
|
||||||
|
|
||||||
|
<!-- Zeit alle verknüften Zahlungen an -->
|
||||||
|
|
||||||
|
|
||||||
|
<h:panelGroup layout="block" styleClass="imixs-form-section"
|
||||||
|
id="invoices">
|
||||||
|
|
||||||
|
<table class="imixsdatatable ">
|
||||||
|
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<th style="width: 600px;">Rechnung</th>
|
||||||
|
<th style="width: 200px;">Status</th>
|
||||||
|
<th style="">#{message.modified}</th>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<ui:param name="invoices"
|
||||||
|
value="#{businessPartnerController.getInvoicesOut()}"></ui:param>
|
||||||
|
<ui:repeat var="invoice" value="#{invoices}">
|
||||||
|
<tr>
|
||||||
|
<td><h:link outcome="/pages/workitems/workitem" styleClass="tooltip-link">
|
||||||
|
#{invoice.item['$workflowsummary']}
|
||||||
|
<f:param name="id" value="#{invoice.item['$uniqueid']}" />
|
||||||
|
<span class="tooltip-text">
|
||||||
|
<h:outputText value="#{invoice.item['$workflowabstract']}" escape="false" />
|
||||||
|
</span>
|
||||||
|
</h:link>
|
||||||
|
</td>
|
||||||
|
<td>#{invoice.item['$workflowstatus']}</td>
|
||||||
|
|
||||||
|
<td><h:outputText value="#{invoice.item['$lastEventDate']}">
|
||||||
|
<f:convertDateTime pattern="#{message.datePatternShort}"
|
||||||
|
timeZone="#{message.timeZone}" />
|
||||||
|
</h:outputText> #{message.by} #{userController.getUserName(invoice.item['$editor'])}</td>
|
||||||
|
</tr>
|
||||||
|
</ui:repeat>
|
||||||
|
|
||||||
|
|
||||||
|
</table>
|
||||||
|
</h:panelGroup>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</ui:composition>
|
||||||
|
|
@ -10,35 +10,35 @@
|
||||||
<f:ajax render="#{ibanListContainer.clientId}" onevent="updateSepaList">
|
<f:ajax render="#{ibanListContainer.clientId}" onevent="updateSepaList">
|
||||||
<table class="imixsdatatable imixs-orderitems">
|
<table class="imixsdatatable imixs-orderitems">
|
||||||
<tr>
|
<tr>
|
||||||
<th style="width: 140px">Name</th>
|
<th style="width: 140px">ID<span class="imixs-required">
|
||||||
<th style="">Bank<span class="imixs-required">
|
*</span></th>
|
||||||
*</span></th>
|
<th style="">Bank</th>
|
||||||
<th style="width: 250px;">IBAN</th>
|
<th style="width: 250px;">IBAN</th>
|
||||||
<th style="width: 150px;">BIC</th>
|
<th style="width: 150px;">BIC</th>
|
||||||
<th style="width: 50px">
|
<th style="width: 50px">
|
||||||
</th>
|
</th>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
<ui:repeat var="cdtr" value="#{businessPartnerController.ibanList}">
|
<ui:repeat var="bank" value="#{businessPartnerController.ibanList}">
|
||||||
<tr>
|
<tr>
|
||||||
<td>
|
<td>
|
||||||
<h:inputText value="#{cdtr.item['name']}" style="width:100%;" />
|
<h:inputText value="#{bank.item['id']}" required="true" style="width:100%;" />
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<h:inputText value="#{cdtr.item['cdtr.name']}"
|
<h:inputText value="#{bank.item['name']}"
|
||||||
style="width:100%;" />
|
style="width:100%;" />
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<h:inputText value="#{cdtr.item['cdtr.iban']}"
|
<h:inputText value="#{bank.item['iban']}"
|
||||||
onkeyup="imixsOfficeWorkitem.formatIBAN(this);"
|
onkeyup="imixsOfficeWorkitem.formatIBAN(this);"
|
||||||
style="width:100%;" />
|
style="width:100%;" />
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<h:inputText value="#{cdtr.item['cdtr.bic']}" style="width:100%;text-transform:uppercase;" />
|
<h:inputText value="#{bank.item['bic']}" style="width:100%;text-transform:uppercase;" />
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<h:commandLink
|
<h:commandLink
|
||||||
actionListener="#{businessPartnerController.removeIBAN(cdtr.item['name'])}">
|
actionListener="#{businessPartnerController.removeIBAN(bank.item['id'])}">
|
||||||
<span class="typcn typcn-trash imixs-state-info"></span>
|
<span class="typcn typcn-trash imixs-state-info"></span>
|
||||||
<f:ajax render="#{ibanListContainer.clientId}"
|
<f:ajax render="#{ibanListContainer.clientId}"
|
||||||
onevent="updateSepaList" />
|
onevent="updateSepaList" />
|
||||||
|
|
@ -0,0 +1,79 @@
|
||||||
|
<ui:composition xmlns="http://www.w3.org/1999/xhtml" xmlns:f="http://xmlns.jcp.org/jsf/core"
|
||||||
|
xmlns:h="http://xmlns.jcp.org/jsf/html" xmlns:c="http://xmlns.jcp.org/jsp/jstl/core"
|
||||||
|
xmlns:ui="http://xmlns.jcp.org/jsf/facelets" xmlns:pt="http://xmlns.jcp.org/jsf/passthrough"
|
||||||
|
xmlns:marty="http://xmlns.jcp.org/jsf/composite/marty" xmlns:i="http://xmlns.jcp.org/jsf/composite/imixs">
|
||||||
|
|
||||||
|
<!-- businsspartner Search integration
|
||||||
|
|
||||||
|
This subform is a custom form part.
|
||||||
|
|
||||||
|
The subform provides a jsf commandScript which calls the businessPartnerController.search method in the backend.
|
||||||
|
|
||||||
|
The script below inits a autocompletion feature for the input field.
|
||||||
|
See imixs-office.autocompletion.js
|
||||||
|
|
||||||
|
See also:
|
||||||
|
https://stackoverflow.com/questions/16588327/how-to-invoke-a-jsf-managed-bean-on-a-html-dom-event-using-native-javascript
|
||||||
|
https://dzone.com/articles/execute-a-jsf-ajax-request-by-just-a-function-call
|
||||||
|
https://www.w3schools.com/howto/howto_js_autocomplete.asp
|
||||||
|
-->
|
||||||
|
|
||||||
|
<ui:param name="item_konto_name" value="#{item.name}.name"></ui:param>
|
||||||
|
<ui:fragment rendered="#{!readonly}">
|
||||||
|
<h:inputText value="#{workitem.item[item.name]}" pt:data-item="#{item.name}" />
|
||||||
|
<h:inputHidden value="#{workitem.item[item_konto_name]}" pt:data-item="#{item_konto_name}" />
|
||||||
|
<br />
|
||||||
|
<span id='businsspartner-konto-id' class='small'>#{workitem.item[item_konto_name]}</span>
|
||||||
|
<h:commandScript name="businsspartnerSearch" action="#{businessPartnerController.search(options)}"
|
||||||
|
render="autocomplete-resultlist-businsspartner" onevent="autocompleteShowResult" />
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
/*<![CDATA[*/
|
||||||
|
|
||||||
|
// init input fields...
|
||||||
|
$(document).ready(function () {
|
||||||
|
// add autocomplete feature ..
|
||||||
|
var creditorField = $("input[data-item='#{item.name}']");
|
||||||
|
$(creditorField).each(function () {
|
||||||
|
$(this).addClass("imixs-ml");
|
||||||
|
autocompleteInitInput(this, businsspartnerSearch, 'autocomplete-resultlist-businsspartner', selectDebitorCreditorCallback);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
// Hier bekommen wir die JSON Struktur mit allen daten.
|
||||||
|
// diese Daten werden auf die einzelnen Felder verteilt.
|
||||||
|
function selectDebitorCreditorCallback(selection) {
|
||||||
|
const kontoData = JSON.parse(selection);
|
||||||
|
// fill data into the fields....
|
||||||
|
var inputElementKonto = $("input[data-item='#{item.name}']");
|
||||||
|
var inputElementKreditor = $("input[data-item='#{item_konto_name}']");
|
||||||
|
inputElementKonto.val(kontoData.name);
|
||||||
|
inputElementKreditor.val(kontoData['partner.name']);
|
||||||
|
// remove old konto name
|
||||||
|
$('#businsspartner-konto-id').remove();
|
||||||
|
// append span with konto name....
|
||||||
|
inputElementKonto.after("<span id='businsspartner-konto-id' class='small'>" + kontoData['partner.name'] + "</span>");
|
||||||
|
}
|
||||||
|
|
||||||
|
/*]]>*/
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<!-- businsspartner suggest list -->
|
||||||
|
<h:panelGroup id="autocomplete-resultlist-businsspartner" layout="block" class="autocomplete-resultlist">
|
||||||
|
<ui:repeat var="suggest" value="#{businessPartnerController.searchResult}">
|
||||||
|
<div class="autocomplete-resultlist-element" onclick="autocompleteSelectElement('#{suggest.data}')">
|
||||||
|
<a href="#">
|
||||||
|
<h:outputText value="#{suggest.display}" escape="false" />
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</ui:repeat>
|
||||||
|
</h:panelGroup>
|
||||||
|
|
||||||
|
</ui:fragment>
|
||||||
|
|
||||||
|
<!-- Read only -->
|
||||||
|
<ui:fragment rendered="#{readonly}">
|
||||||
|
<h:outputText value="#{workitem.item[item.name]} #{workitem.item[item_konto_name]}"/>
|
||||||
|
</ui:fragment>
|
||||||
|
|
||||||
|
</ui:composition>
|
||||||
14
pom.xml
14
pom.xml
|
|
@ -5,7 +5,7 @@
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<groupId>com.alexander-logistics</groupId>
|
<groupId>com.alexander-logistics</groupId>
|
||||||
<artifactId>office-alexander-logistics</artifactId>
|
<artifactId>office-alexander-logistics</artifactId>
|
||||||
<version>1.3.1</version>
|
<version>1.3.2</version>
|
||||||
<packaging>pom</packaging>
|
<packaging>pom</packaging>
|
||||||
<name>Imixs Office Workflow - Custom Build</name>
|
<name>Imixs Office Workflow - Custom Build</name>
|
||||||
|
|
||||||
|
|
@ -25,17 +25,19 @@
|
||||||
|
|
||||||
<!-- Dependency Versions -->
|
<!-- Dependency Versions -->
|
||||||
<jakarta.version>10.0.0</jakarta.version>
|
<jakarta.version>10.0.0</jakarta.version>
|
||||||
<org.imixs.office.version>5.0.4-SNAPSHOT</org.imixs.office.version>
|
<org.imixs.office.version>5.0.4</org.imixs.office.version>
|
||||||
<org.imixs.workflow.version>6.0.9-SNAPSHOT</org.imixs.workflow.version>
|
<org.imixs.workflow.version>6.0.9</org.imixs.workflow.version>
|
||||||
<org.imixs.marty.version>5.0.0</org.imixs.marty.version>
|
<org.imixs.marty.version>5.0.0</org.imixs.marty.version>
|
||||||
<org.imixs.archive.version>3.0.2</org.imixs.archive.version>
|
|
||||||
<org.imixs.adapters.version>3.0.3-SNAPSHOT</org.imixs.adapters.version>
|
<!-- 3.0.2 -->
|
||||||
|
<org.imixs.archive.version>3.1.1-SNAPSHOT</org.imixs.archive.version>
|
||||||
|
<org.imixs.adapters.version>3.0.3</org.imixs.adapters.version>
|
||||||
<org.imixs.melman.version>2.0.2</org.imixs.melman.version>
|
<org.imixs.melman.version>2.0.2</org.imixs.melman.version>
|
||||||
<microprofile.version>6.0</microprofile.version>
|
<microprofile.version>6.0</microprofile.version>
|
||||||
<net.sf.saxon.version>9.9.1-4</net.sf.saxon.version>
|
<net.sf.saxon.version>9.9.1-4</net.sf.saxon.version>
|
||||||
<apache.pdfbox.version>2.0.26</apache.pdfbox.version>
|
<apache.pdfbox.version>2.0.26</apache.pdfbox.version>
|
||||||
<!-- -->
|
<!-- -->
|
||||||
<org.imixs.ai.version>1.1.1-SNAPSHOT</org.imixs.ai.version>
|
<org.imixs.ai.version>1.1.1</org.imixs.ai.version>
|
||||||
<custom.webResources>src/main/webapp</custom.webResources>
|
<custom.webResources>src/main/webapp</custom.webResources>
|
||||||
|
|
||||||
<!-- Environment Settings -->
|
<!-- Environment Settings -->
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,7 @@
|
||||||
<bpmn2:participant id="participant_d6UFsQ" name="Default Process" processRef="process_1"/>
|
<bpmn2:participant id="participant_d6UFsQ" name="Default Process" processRef="process_1"/>
|
||||||
<bpmn2:participant id="participant_oxb3dg" name="Business Partner" processRef="process_Hw9Ryg">
|
<bpmn2:participant id="participant_oxb3dg" name="Business Partner" processRef="process_Hw9Ryg">
|
||||||
<bpmn2:documentation id="documentation_Jerngw"/>
|
<bpmn2:documentation id="documentation_Jerngw"/>
|
||||||
|
<bpmn2:outgoing>association_83sZPw</bpmn2:outgoing>
|
||||||
</bpmn2:participant>
|
</bpmn2:participant>
|
||||||
</bpmn2:collaboration>
|
</bpmn2:collaboration>
|
||||||
<bpmn2:extensionElements>
|
<bpmn2:extensionElements>
|
||||||
|
|
@ -25,9 +26,12 @@
|
||||||
<imixs:value><![CDATA[org.imixs.marty.plugins.SequenceNumberPlugin]]></imixs:value>
|
<imixs:value><![CDATA[org.imixs.marty.plugins.SequenceNumberPlugin]]></imixs:value>
|
||||||
</imixs:item>
|
</imixs:item>
|
||||||
<imixs:item name="txtfieldmapping" type="xs:string">
|
<imixs:item name="txtfieldmapping" type="xs:string">
|
||||||
<imixs:value><![CDATA[Creator|$creator]]></imixs:value>
|
<imixs:value><![CDATA[Ersteller | $creator]]></imixs:value>
|
||||||
<imixs:value><![CDATA[Owner|$owner]]></imixs:value>
|
<imixs:value><![CDATA[Aktueller Bearbeiter | $editor]]></imixs:value>
|
||||||
<imixs:value><![CDATA[Editor|$editor]]></imixs:value>
|
<imixs:value><![CDATA[Eigentümer | $owner]]></imixs:value>
|
||||||
|
<imixs:value><![CDATA[Prozess-Verantwortliche| process.manager]]></imixs:value>
|
||||||
|
<imixs:value><![CDATA[Prozess-Team | process.team]]></imixs:value>
|
||||||
|
<imixs:value><![CDATA[Prozess-Assistenz | process.assist]]></imixs:value>
|
||||||
</imixs:item>
|
</imixs:item>
|
||||||
</bpmn2:extensionElements>
|
</bpmn2:extensionElements>
|
||||||
<bpmn2:process definitionalCollaborationRef="collaboration_1" id="process_1" name="Default Process" processType="Public">
|
<bpmn2:process definitionalCollaborationRef="collaboration_1" id="process_1" name="Default Process" processType="Public">
|
||||||
|
|
@ -49,10 +53,37 @@
|
||||||
<bpmn2:flowNodeRef>textAnnotation_LyGTCw</bpmn2:flowNodeRef>
|
<bpmn2:flowNodeRef>textAnnotation_LyGTCw</bpmn2:flowNodeRef>
|
||||||
<bpmn2:flowNodeRef>event_TuyuwQ</bpmn2:flowNodeRef>
|
<bpmn2:flowNodeRef>event_TuyuwQ</bpmn2:flowNodeRef>
|
||||||
<bpmn2:flowNodeRef>event_h0Kk5g</bpmn2:flowNodeRef>
|
<bpmn2:flowNodeRef>event_h0Kk5g</bpmn2:flowNodeRef>
|
||||||
|
<bpmn2:flowNodeRef>task_delO7Q</bpmn2:flowNodeRef>
|
||||||
|
<bpmn2:flowNodeRef>event_1OVorA</bpmn2:flowNodeRef>
|
||||||
|
<bpmn2:flowNodeRef>event_baWU4w</bpmn2:flowNodeRef>
|
||||||
|
<bpmn2:flowNodeRef>event_ofjVfg</bpmn2:flowNodeRef>
|
||||||
|
<bpmn2:flowNodeRef>event_i7yQVw</bpmn2:flowNodeRef>
|
||||||
|
<bpmn2:flowNodeRef>gateway_uK0c6g</bpmn2:flowNodeRef>
|
||||||
|
<bpmn2:flowNodeRef>event_6250fg</bpmn2:flowNodeRef>
|
||||||
|
<bpmn2:flowNodeRef>event_VM0fEQ</bpmn2:flowNodeRef>
|
||||||
|
<bpmn2:flowNodeRef>gateway_s0J53g</bpmn2:flowNodeRef>
|
||||||
|
<bpmn2:flowNodeRef>task_NohgrQ</bpmn2:flowNodeRef>
|
||||||
|
<bpmn2:flowNodeRef>event_AMs05g</bpmn2:flowNodeRef>
|
||||||
|
<bpmn2:flowNodeRef>event_feLZFQ</bpmn2:flowNodeRef>
|
||||||
|
<bpmn2:flowNodeRef>event_GTXFMw</bpmn2:flowNodeRef>
|
||||||
|
<bpmn2:flowNodeRef>event_u8OBFg</bpmn2:flowNodeRef>
|
||||||
</bpmn2:lane>
|
</bpmn2:lane>
|
||||||
</bpmn2:laneSet>
|
</bpmn2:laneSet>
|
||||||
<bpmn2:task id="task_ToMZaQ" imixs:processid="1000" name="Neuanlage">
|
<bpmn2:task id="task_ToMZaQ" imixs:processid="1000" name="Neuanlage">
|
||||||
<bpmn2:extensionElements/>
|
<bpmn2:extensionElements>
|
||||||
|
<imixs:item name="keyupdateacl" type="xs:string">
|
||||||
|
<imixs:value><![CDATA[true]]></imixs:value>
|
||||||
|
</imixs:item>
|
||||||
|
<imixs:item name="namownershipnames" type="xs:string">
|
||||||
|
<imixs:value/>
|
||||||
|
</imixs:item>
|
||||||
|
<imixs:item name="namaddreadaccess" type="xs:string">
|
||||||
|
<imixs:value/>
|
||||||
|
</imixs:item>
|
||||||
|
<imixs:item name="namaddwriteaccess" type="xs:string">
|
||||||
|
<imixs:value/>
|
||||||
|
</imixs:item>
|
||||||
|
</bpmn2:extensionElements>
|
||||||
<bpmn2:documentation id="documentation_a83GTA"/>
|
<bpmn2:documentation id="documentation_a83GTA"/>
|
||||||
<bpmn2:incoming>sequenceFlow_25otUg</bpmn2:incoming>
|
<bpmn2:incoming>sequenceFlow_25otUg</bpmn2:incoming>
|
||||||
<bpmn2:outgoing>sequenceFlow_S9LVXg</bpmn2:outgoing>
|
<bpmn2:outgoing>sequenceFlow_S9LVXg</bpmn2:outgoing>
|
||||||
|
|
@ -63,7 +94,6 @@
|
||||||
</bpmn2:startEvent>
|
</bpmn2:startEvent>
|
||||||
<bpmn2:endEvent id="event_1clvlg" name="Ende">
|
<bpmn2:endEvent id="event_1clvlg" name="Ende">
|
||||||
<bpmn2:documentation id="documentation_obvnAg"/>
|
<bpmn2:documentation id="documentation_obvnAg"/>
|
||||||
<bpmn2:incoming>sequenceFlow_NNbMhg</bpmn2:incoming>
|
|
||||||
<bpmn2:incoming>sequenceFlow_rwdWxw</bpmn2:incoming>
|
<bpmn2:incoming>sequenceFlow_rwdWxw</bpmn2:incoming>
|
||||||
</bpmn2:endEvent>
|
</bpmn2:endEvent>
|
||||||
<bpmn2:sequenceFlow id="sequenceFlow_25otUg" sourceRef="event_WmkBvw" targetRef="task_ToMZaQ">
|
<bpmn2:sequenceFlow id="sequenceFlow_25otUg" sourceRef="event_WmkBvw" targetRef="task_ToMZaQ">
|
||||||
|
|
@ -77,13 +107,42 @@
|
||||||
<imixs:item name="txtworkflowsummary" type="xs:string">
|
<imixs:item name="txtworkflowsummary" type="xs:string">
|
||||||
<imixs:value><![CDATA[<itemvalue>partner.name</itemvalue> (<itemvalue>partner.id</itemvalue>)]]></imixs:value>
|
<imixs:value><![CDATA[<itemvalue>partner.name</itemvalue> (<itemvalue>partner.id</itemvalue>)]]></imixs:value>
|
||||||
</imixs:item>
|
</imixs:item>
|
||||||
|
<imixs:item name="txtworkflowabstract" type="xs:string">
|
||||||
|
<imixs:value><![CDATA[<strong>Adresse:</strong><br />
|
||||||
|
<itemvalue>partner.name</itemvalue><br />
|
||||||
|
<itemvalue>partner.address</itemvalue><br />
|
||||||
|
<itemvalue>partner.zip</itemvalue> <itemvalue>partner.city</itemvalue><br />
|
||||||
|
<br />
|
||||||
|
|
||||||
|
<strong>BPID:</strong> <itemvalue>partner.id</itemvalue><br />
|
||||||
|
<strong>Kreditoren-Nr.:</strong> <itemvalue>cdtr.number</itemvalue><br />
|
||||||
|
<strong>Debitoren-Nr.:</strong> <itemvalue>dbtr.number</itemvalue><br />
|
||||||
|
]]></imixs:value>
|
||||||
|
</imixs:item>
|
||||||
|
<imixs:item name="keyupdateacl" type="xs:string">
|
||||||
|
<imixs:value><![CDATA[true]]></imixs:value>
|
||||||
|
</imixs:item>
|
||||||
|
<imixs:item name="namownershipnames" type="xs:string">
|
||||||
|
<imixs:value/>
|
||||||
|
</imixs:item>
|
||||||
|
<imixs:item name="namaddreadaccess" type="xs:string">
|
||||||
|
<imixs:value/>
|
||||||
|
</imixs:item>
|
||||||
|
<imixs:item name="namaddwriteaccess" type="xs:string">
|
||||||
|
<imixs:value/>
|
||||||
|
</imixs:item>
|
||||||
|
<imixs:item name="keyaddwritefields" type="xs:string">
|
||||||
|
<imixs:value><![CDATA[process.team]]></imixs:value>
|
||||||
|
</imixs:item>
|
||||||
</bpmn2:extensionElements>
|
</bpmn2:extensionElements>
|
||||||
<bpmn2:documentation id="documentation_M7b42w"/>
|
<bpmn2:documentation id="documentation_M7b42w"/>
|
||||||
<bpmn2:incoming>sequenceFlow_knUYpQ</bpmn2:incoming>
|
|
||||||
<bpmn2:outgoing>sequenceFlow_2uNvPw</bpmn2:outgoing>
|
|
||||||
<bpmn2:outgoing>sequenceFlow_NNbMhg</bpmn2:outgoing>
|
|
||||||
<bpmn2:incoming>sequenceFlow_avahXg</bpmn2:incoming>
|
<bpmn2:incoming>sequenceFlow_avahXg</bpmn2:incoming>
|
||||||
<bpmn2:incoming>sequenceFlow_9atLFA</bpmn2:incoming>
|
<bpmn2:incoming>sequenceFlow_9atLFA</bpmn2:incoming>
|
||||||
|
<bpmn2:outgoing>sequenceFlow_T5L9aQ</bpmn2:outgoing>
|
||||||
|
<bpmn2:incoming>sequenceFlow_b4BcVA</bpmn2:incoming>
|
||||||
|
<bpmn2:incoming>sequenceFlow_8O1EtQ</bpmn2:incoming>
|
||||||
|
<bpmn2:incoming>sequenceFlow_ShuXXA</bpmn2:incoming>
|
||||||
|
<bpmn2:outgoing>sequenceFlow_03b60w</bpmn2:outgoing>
|
||||||
</bpmn2:task>
|
</bpmn2:task>
|
||||||
<bpmn2:task id="task_B8Pi7A" imixs:processid="1800" name="Gesperrt">
|
<bpmn2:task id="task_B8Pi7A" imixs:processid="1800" name="Gesperrt">
|
||||||
<bpmn2:extensionElements>
|
<bpmn2:extensionElements>
|
||||||
|
|
@ -93,94 +152,139 @@
|
||||||
<imixs:item name="txtimageurl" type="xs:string">
|
<imixs:item name="txtimageurl" type="xs:string">
|
||||||
<imixs:value><![CDATA[typcn-user|typcn-times,imixs-error]]></imixs:value>
|
<imixs:value><![CDATA[typcn-user|typcn-times,imixs-error]]></imixs:value>
|
||||||
</imixs:item>
|
</imixs:item>
|
||||||
|
<imixs:item name="txtworkflowabstract" type="xs:string">
|
||||||
|
<imixs:value><![CDATA[<strong>Adresse:</strong><br />
|
||||||
|
<itemvalue>partner.name</itemvalue><br />
|
||||||
|
<itemvalue>partner.address</itemvalue><br />
|
||||||
|
<itemvalue>partner.zip</itemvalue> <itemvalue>partner.city</itemvalue><br />
|
||||||
|
<br />
|
||||||
|
|
||||||
|
<strong>BPID:</strong> <itemvalue>partner.id</itemvalue><br />
|
||||||
|
<strong>Kreditoren-Nr.:</strong> <itemvalue>cdtr.number</itemvalue><br />
|
||||||
|
<strong>Debitoren-Nr.:</strong> <itemvalue>dbtr.number</itemvalue><br />
|
||||||
|
]]></imixs:value>
|
||||||
|
</imixs:item>
|
||||||
|
<imixs:item name="keyupdateacl" type="xs:string">
|
||||||
|
<imixs:value><![CDATA[true]]></imixs:value>
|
||||||
|
</imixs:item>
|
||||||
|
<imixs:item name="namownershipnames" type="xs:string">
|
||||||
|
<imixs:value/>
|
||||||
|
</imixs:item>
|
||||||
|
<imixs:item name="namaddreadaccess" type="xs:string">
|
||||||
|
<imixs:value/>
|
||||||
|
</imixs:item>
|
||||||
|
<imixs:item name="namaddwriteaccess" type="xs:string">
|
||||||
|
<imixs:value/>
|
||||||
|
</imixs:item>
|
||||||
|
<imixs:item name="keyaddwritefields" type="xs:string">
|
||||||
|
<imixs:value><![CDATA[process.team]]></imixs:value>
|
||||||
|
</imixs:item>
|
||||||
|
<imixs:item name="txttype" type="xs:string">
|
||||||
|
<imixs:value><![CDATA[workitemarchive]]></imixs:value>
|
||||||
|
</imixs:item>
|
||||||
</bpmn2:extensionElements>
|
</bpmn2:extensionElements>
|
||||||
<bpmn2:documentation id="documentation_0B9wKQ"/>
|
<bpmn2:documentation id="documentation_0B9wKQ"/>
|
||||||
<bpmn2:incoming>sequenceFlow_1mXO8A</bpmn2:incoming>
|
<bpmn2:incoming>sequenceFlow_1mXO8A</bpmn2:incoming>
|
||||||
<bpmn2:outgoing>sequenceFlow_rwdWxw</bpmn2:outgoing>
|
<bpmn2:outgoing>sequenceFlow_rwdWxw</bpmn2:outgoing>
|
||||||
<bpmn2:incoming>sequenceFlow_gC0I9w</bpmn2:incoming>
|
<bpmn2:incoming>sequenceFlow_gC0I9w</bpmn2:incoming>
|
||||||
|
<bpmn2:incoming>sequenceFlow_kS2fMA</bpmn2:incoming>
|
||||||
</bpmn2:task>
|
</bpmn2:task>
|
||||||
<bpmn2:intermediateCatchEvent id="event_aSdkwg" imixs:activityid="201" name="[import]">
|
<bpmn2:intermediateCatchEvent id="event_aSdkwg" imixs:activityid="100" name="[import]">
|
||||||
<bpmn2:extensionElements>
|
<bpmn2:extensionElements>
|
||||||
<imixs:item name="keypublicresult" type="xs:string">
|
<imixs:item name="keypublicresult" type="xs:string">
|
||||||
<imixs:value><![CDATA[0]]></imixs:value>
|
<imixs:value><![CDATA[0]]></imixs:value>
|
||||||
</imixs:item>
|
</imixs:item>
|
||||||
<imixs:item name="rtfresultlog" type="xs:string">
|
<imixs:item name="rtfresultlog" type="xs:string">
|
||||||
<imixs:value><![CDATA[Business Partner aus Cargosoft Importiert]]></imixs:value>
|
<imixs:value><![CDATA[Business Partner aus Cargosoft importiert]]></imixs:value>
|
||||||
</imixs:item>
|
</imixs:item>
|
||||||
<imixs:item name="txtactivityresult" type="xs:string">
|
<imixs:item name="txtactivityresult" type="xs:string">
|
||||||
<imixs:value><![CDATA[<item name="process">Partnermanagement</item>]]></imixs:value>
|
<imixs:value><![CDATA[<item name="process">Partnermanagement</item>]]></imixs:value>
|
||||||
</imixs:item>
|
</imixs:item>
|
||||||
</bpmn2:extensionElements>
|
</bpmn2:extensionElements>
|
||||||
<bpmn2:documentation id="documentation_5409Kg"/>
|
<bpmn2:documentation id="documentation_5409Kg"/>
|
||||||
<bpmn2:incoming>sequenceFlow_S9LVXg</bpmn2:incoming>
|
<bpmn2:incoming>sequenceFlow_jAU3VA</bpmn2:incoming>
|
||||||
<bpmn2:outgoing>sequenceFlow_knUYpQ</bpmn2:outgoing>
|
<bpmn2:outgoing>sequenceFlow_8O1EtQ</bpmn2:outgoing>
|
||||||
</bpmn2:intermediateCatchEvent>
|
</bpmn2:intermediateCatchEvent>
|
||||||
<bpmn2:sequenceFlow id="sequenceFlow_S9LVXg" sourceRef="task_ToMZaQ" targetRef="event_aSdkwg">
|
<bpmn2:sequenceFlow id="sequenceFlow_S9LVXg" sourceRef="task_ToMZaQ" targetRef="gateway_uK0c6g">
|
||||||
<bpmn2:documentation id="documentation_Idvd0Q"/>
|
<bpmn2:documentation id="documentation_Idvd0Q"/>
|
||||||
</bpmn2:sequenceFlow>
|
</bpmn2:sequenceFlow>
|
||||||
<bpmn2:sequenceFlow id="sequenceFlow_knUYpQ" sourceRef="event_aSdkwg" targetRef="task_Q80A1Q">
|
|
||||||
<bpmn2:documentation id="documentation_DSg1Eg"/>
|
|
||||||
</bpmn2:sequenceFlow>
|
|
||||||
<bpmn2:intermediateCatchEvent id="event_Tr0aug" imixs:activityid="30" name="Sperren">
|
<bpmn2:intermediateCatchEvent id="event_Tr0aug" imixs:activityid="30" name="Sperren">
|
||||||
<bpmn2:extensionElements>
|
<bpmn2:extensionElements>
|
||||||
<imixs:item name="keypublicresult" type="xs:string">
|
<imixs:item name="keypublicresult" type="xs:string">
|
||||||
<imixs:value><![CDATA[1]]></imixs:value>
|
<imixs:value><![CDATA[1]]></imixs:value>
|
||||||
</imixs:item>
|
</imixs:item>
|
||||||
|
<imixs:item name="txtactivityresult" type="xs:string">
|
||||||
|
<imixs:value><![CDATA[<item name="action">home</item>]]></imixs:value>
|
||||||
|
</imixs:item>
|
||||||
</bpmn2:extensionElements>
|
</bpmn2:extensionElements>
|
||||||
<bpmn2:documentation id="documentation_2XhDKQ"/>
|
<bpmn2:documentation id="documentation_2XhDKQ"/>
|
||||||
<bpmn2:incoming>sequenceFlow_2uNvPw</bpmn2:incoming>
|
|
||||||
<bpmn2:outgoing>sequenceFlow_1mXO8A</bpmn2:outgoing>
|
<bpmn2:outgoing>sequenceFlow_1mXO8A</bpmn2:outgoing>
|
||||||
|
<bpmn2:incoming>sequenceFlow_b0Bj3Q</bpmn2:incoming>
|
||||||
|
<bpmn2:incoming>sequenceFlow_neSsFQ</bpmn2:incoming>
|
||||||
</bpmn2:intermediateCatchEvent>
|
</bpmn2:intermediateCatchEvent>
|
||||||
<bpmn2:sequenceFlow id="sequenceFlow_2uNvPw" sourceRef="task_Q80A1Q" targetRef="event_Tr0aug">
|
|
||||||
<bpmn2:documentation id="documentation_G0afxQ"/>
|
|
||||||
</bpmn2:sequenceFlow>
|
|
||||||
<bpmn2:sequenceFlow id="sequenceFlow_1mXO8A" sourceRef="event_Tr0aug" targetRef="task_B8Pi7A">
|
<bpmn2:sequenceFlow id="sequenceFlow_1mXO8A" sourceRef="event_Tr0aug" targetRef="task_B8Pi7A">
|
||||||
<bpmn2:documentation id="documentation_JL48mA"/>
|
<bpmn2:documentation id="documentation_JL48mA"/>
|
||||||
</bpmn2:sequenceFlow>
|
</bpmn2:sequenceFlow>
|
||||||
<bpmn2:sequenceFlow id="sequenceFlow_NNbMhg" sourceRef="task_Q80A1Q" targetRef="event_1clvlg">
|
|
||||||
<bpmn2:documentation id="documentation_I0Y0pQ"/>
|
|
||||||
</bpmn2:sequenceFlow>
|
|
||||||
<bpmn2:sequenceFlow id="sequenceFlow_rwdWxw" sourceRef="task_B8Pi7A" targetRef="event_1clvlg">
|
<bpmn2:sequenceFlow id="sequenceFlow_rwdWxw" sourceRef="task_B8Pi7A" targetRef="event_1clvlg">
|
||||||
<bpmn2:documentation id="documentation_8xdVSA"/>
|
<bpmn2:documentation id="documentation_8xdVSA"/>
|
||||||
</bpmn2:sequenceFlow>
|
</bpmn2:sequenceFlow>
|
||||||
<bpmn2:dataObject id="dataObject_UQIXAQ" name="Form">
|
<bpmn2:dataObject id="dataObject_UQIXAQ" name="Form">
|
||||||
<bpmn2:documentation id="documentation_e1in1w"><![CDATA[<?xml version="1.0"?>
|
<bpmn2:documentation id="documentation_e1in1w"><![CDATA[<imixs-form>
|
||||||
<imixs-form>
|
|
||||||
<imixs-form-section columns="1" label="">
|
|
||||||
<item name="partner.name" type="text" span="8" readonly="false" label="Name:"/>
|
|
||||||
<item name="partner.id" type="text" span="4" readonly="true" label="Partner ID:"/>
|
|
||||||
</imixs-form-section>
|
|
||||||
|
|
||||||
<imixs-form-section columns="1" label="Adresse" readonly="true">
|
<imixs-subform label="Überblick">
|
||||||
<item name="partner.address" type="text" span="8" required="false" label="Adresse:" />
|
<imixs-form-section columns="4" label="Ausgangsrechnungen">
|
||||||
<item name="partner.address.sub1" type="text" span="4" required="false" label="Zusatz" />
|
<item name="analytic.invoices.count.all" type="custom" path="alexander/analyze_plain" label="Alle Rechnungen:" />
|
||||||
<item name="partner.country" type="custom" path="country" span="4" readonly="false" label="Land:" />
|
<item name="analytic.invoices.count.open" type="custom" path="alexander/analyze_plain" label="Offene Rechnungen:" />
|
||||||
<item name="partner.zip" type="text" span="1" required="false" label="PLZ:" />
|
<item name="analytic.invoices.count.due" type="custom" path="alexander/analyze_plain" label="Fällige Rechnungen:" />
|
||||||
<item name="partner.city" type="text" span="7" required="false" label="Stadt:" />
|
<item name="analytic.invoices.count.dunning" type="custom" path="alexander/analyze_plain" label="Rechnungen in Mahnung:" />
|
||||||
<item name="partner.language" type="text" readonly="false" span="4" label="Sprache:" />
|
</imixs-form-section>
|
||||||
<item name="partner.phone" type="text" readonly="false" span="4" label="Tel.:" />
|
|
||||||
</imixs-form-section>
|
<imixs-form-section label="" path="alexander/section_bp_invoices_out" readonly="true" />
|
||||||
|
<imixs-form-section columns="2" label="Zahlungsmoral">
|
||||||
|
<item name="analytic.payment.avg.due" type="custom" path="alexander/analyze_plain" label="Average term of credit:" />
|
||||||
|
<item name="analytic.payment.avg.days" type="custom" path="alexander/analyze_plain" label="Average payment duration:" />
|
||||||
|
</imixs-form-section>
|
||||||
|
<imixs-form-section columns="1" label="">
|
||||||
|
<item name="analytic.invoices.trend" type="custom" path="alexander/analyze_chart"
|
||||||
|
label="Trend der letzten 6 Monate:" />
|
||||||
|
</imixs-form-section>
|
||||||
|
<imixs-form-section label="Eingangsrechnungen" path="alexander/section_bp_invoices_in" readonly="true" />
|
||||||
|
|
||||||
|
|
||||||
<imixs-form-section columns="1" label="Rechnungseingang ">
|
</imixs-subform>
|
||||||
<item name="cdtr.number" type="text" span="2" readonly="true" label="Kreditoren Nr.:" />
|
|
||||||
<item name="cdtr.email" type="text" span="4" readonly="false" label="E-Mail:" />
|
|
||||||
<item name="cdtr.creditperiod" type="text" span="2" readonly="false" label="Zahlungsziel (Tage):" />
|
|
||||||
</imixs-form-section>
|
|
||||||
|
|
||||||
<imixs-form-section columns="1" label="Rechnungsausgang ">
|
<imixs-subform label="Stammdaten">
|
||||||
<item name="dbtr.number" type="text" span="2" readonly="true" label="Debitoren Nr.:" />
|
<imixs-form-section columns="1" label="">
|
||||||
<item name="dbtr.email" type="text" span="4" readonly="false" label="E-Mail SOA/Mahnungen:" />
|
<item name="partner.name" type="text" span="6" readonly="true" label="Name:"/>
|
||||||
<item name="dbtr.creditperiod" type="text" span="2" readonly="false" label="Zahlungsziel (Tage):" />
|
<item name="partner.id" type="text" span="6" readonly="true" label="Partner ID:"/>
|
||||||
</imixs-form-section>
|
</imixs-form-section>
|
||||||
|
|
||||||
<imixs-form-section label="Banken" path="alexander/sub_businesspartner_ibanlist" />
|
<imixs-form-section columns="1" label="" readonly="true">
|
||||||
|
<item name="partner.address" type="text" span="6" required="false" label="Adresse:" />
|
||||||
|
<item name="partner.address.sub1" type="text" span="6" required="false" label="Zusatz" />
|
||||||
|
<item name="partner.zip" type="text" span="1" required="false" label="PLZ:" />
|
||||||
|
<item name="partner.city" type="text" span="5" required="false" label="Stadt:" />
|
||||||
|
<item name="partner.phone" type="text" readonly="false" span="6" label="Tel.:" />
|
||||||
|
|
||||||
|
<item name="partner.country" type="custom" path="country" span="6" readonly="false" label="Land:" />
|
||||||
|
<item name="partner.language" type="text" readonly="false" span="6" label="Sprache:" />
|
||||||
|
</imixs-form-section>
|
||||||
|
|
||||||
|
<imixs-form-section columns="1" label="Rechnungseingang ">
|
||||||
|
<item name="cdtr.number" type="text" span="2" readonly="true" label="Kreditoren Nr.:" />
|
||||||
|
<item name="cdtr.creditperiod" type="text" span="4" readonly="false" label="Zahlungsziel (Tage):" />
|
||||||
|
<item name="cdtr.email" type="textlist" span="6" readonly="false" label="E-Mail:" />
|
||||||
|
</imixs-form-section>
|
||||||
|
<imixs-form-section columns="1" label="Rechnungsausgang ">
|
||||||
|
<item name="dbtr.number" type="text" span="2" readonly="true" label="Debitoren Nr.:" />
|
||||||
|
<item name="dbtr.creditperiod" type="text" span="4" readonly="false" label="Zahlungsziel (Tage):" />
|
||||||
|
<item name="dbtr.email" type="textlist" span="6" readonly="false" label="E-Mail SOA/Mahnungen:" />
|
||||||
|
</imixs-form-section>
|
||||||
|
<imixs-form-section label="Banken" path="alexander/section_businesspartner_banklist" />
|
||||||
|
</imixs-subform>
|
||||||
|
|
||||||
</imixs-form>]]></bpmn2:documentation>
|
</imixs-form>]]></bpmn2:documentation>
|
||||||
</bpmn2:dataObject>
|
</bpmn2:dataObject>
|
||||||
<bpmn2:association id="association_pG70zw" sourceRef="task_ToMZaQ" targetRef="dataObject_UQIXAQ">
|
|
||||||
<bpmn2:documentation id="documentation_ukKpew"/>
|
|
||||||
</bpmn2:association>
|
|
||||||
<bpmn2:intermediateCatchEvent id="event_vwH0cA" imixs:activityid="10" name="Speichern">
|
<bpmn2:intermediateCatchEvent id="event_vwH0cA" imixs:activityid="10" name="Speichern">
|
||||||
<bpmn2:documentation id="documentation_WOUVTQ"/>
|
<bpmn2:documentation id="documentation_WOUVTQ"/>
|
||||||
<bpmn2:outgoing>sequenceFlow_avahXg</bpmn2:outgoing>
|
<bpmn2:outgoing>sequenceFlow_avahXg</bpmn2:outgoing>
|
||||||
|
|
@ -196,10 +300,10 @@
|
||||||
<bpmn2:text id="text_M05BXg"><![CDATA[Neuanalge erfolgt über den Cargosoft CSV Import im BusinessPartnerImportService]]></bpmn2:text>
|
<bpmn2:text id="text_M05BXg"><![CDATA[Neuanalge erfolgt über den Cargosoft CSV Import im BusinessPartnerImportService]]></bpmn2:text>
|
||||||
<bpmn2:documentation id="documentation_wdTBKA"/>
|
<bpmn2:documentation id="documentation_wdTBKA"/>
|
||||||
</bpmn2:textAnnotation>
|
</bpmn2:textAnnotation>
|
||||||
<bpmn2:association id="association_83sZPw" sourceRef="event_aSdkwg" targetRef="textAnnotation_LyGTCw">
|
<bpmn2:association id="association_83sZPw" sourceRef="participant_oxb3dg" targetRef="textAnnotation_LyGTCw">
|
||||||
<bpmn2:documentation id="documentation_FKcIcg"/>
|
<bpmn2:documentation id="documentation_FKcIcg"/>
|
||||||
</bpmn2:association>
|
</bpmn2:association>
|
||||||
<bpmn2:intermediateCatchEvent id="event_TuyuwQ" imixs:activityid="201" name="[update]">
|
<bpmn2:intermediateCatchEvent id="event_TuyuwQ" imixs:activityid="200" name="[update]">
|
||||||
<bpmn2:extensionElements>
|
<bpmn2:extensionElements>
|
||||||
<imixs:item name="keypublicresult" type="xs:string">
|
<imixs:item name="keypublicresult" type="xs:string">
|
||||||
<imixs:value><![CDATA[0]]></imixs:value>
|
<imixs:value><![CDATA[0]]></imixs:value>
|
||||||
|
|
@ -207,6 +311,9 @@
|
||||||
<imixs:item name="txtactivityresult" type="xs:string">
|
<imixs:item name="txtactivityresult" type="xs:string">
|
||||||
<imixs:value><![CDATA[Business Partner aktualisiert aus Cargosoft ]]></imixs:value>
|
<imixs:value><![CDATA[Business Partner aktualisiert aus Cargosoft ]]></imixs:value>
|
||||||
</imixs:item>
|
</imixs:item>
|
||||||
|
<imixs:item name="rtfresultlog" type="xs:string">
|
||||||
|
<imixs:value><![CDATA[Business Partner aus Cargosoft aktualisiert]]></imixs:value>
|
||||||
|
</imixs:item>
|
||||||
</bpmn2:extensionElements>
|
</bpmn2:extensionElements>
|
||||||
<bpmn2:documentation id="documentation_wy3OSA"/>
|
<bpmn2:documentation id="documentation_wy3OSA"/>
|
||||||
<bpmn2:outgoing>sequenceFlow_9atLFA</bpmn2:outgoing>
|
<bpmn2:outgoing>sequenceFlow_9atLFA</bpmn2:outgoing>
|
||||||
|
|
@ -229,139 +336,547 @@
|
||||||
<bpmn2:sequenceFlow id="sequenceFlow_gC0I9w" sourceRef="event_h0Kk5g" targetRef="task_B8Pi7A">
|
<bpmn2:sequenceFlow id="sequenceFlow_gC0I9w" sourceRef="event_h0Kk5g" targetRef="task_B8Pi7A">
|
||||||
<bpmn2:documentation id="documentation_gfdNnQ"/>
|
<bpmn2:documentation id="documentation_gfdNnQ"/>
|
||||||
</bpmn2:sequenceFlow>
|
</bpmn2:sequenceFlow>
|
||||||
|
<bpmn2:task id="task_delO7Q" imixs:processid="1300" name="Plausibilitätsprüfung">
|
||||||
|
<bpmn2:extensionElements>
|
||||||
|
<imixs:item name="txtimageurl" type="xs:string">
|
||||||
|
<imixs:value><![CDATA[typcn-user|typcn-tick,imixs-success]]></imixs:value>
|
||||||
|
</imixs:item>
|
||||||
|
<imixs:item name="txtworkflowsummary" type="xs:string">
|
||||||
|
<imixs:value><![CDATA[<itemvalue>partner.name</itemvalue> (<itemvalue>partner.id</itemvalue>)]]></imixs:value>
|
||||||
|
</imixs:item>
|
||||||
|
<imixs:item name="txtworkflowabstract" type="xs:string">
|
||||||
|
<imixs:value><![CDATA[<strong>Adresse:</strong><br />
|
||||||
|
<itemvalue>partner.name</itemvalue><br />
|
||||||
|
<itemvalue>partner.address</itemvalue><br />
|
||||||
|
<itemvalue>partner.zip</itemvalue> <itemvalue>partner.city</itemvalue><br />
|
||||||
|
<br />
|
||||||
|
|
||||||
|
<strong>BPID:</strong> <itemvalue>partner.id</itemvalue><br />
|
||||||
|
<strong>Kreditoren-Nr.:</strong> <itemvalue>cdtr.number</itemvalue><br />
|
||||||
|
<strong>Debitoren-Nr.:</strong> <itemvalue>dbtr.number</itemvalue><br />
|
||||||
|
]]></imixs:value>
|
||||||
|
</imixs:item>
|
||||||
|
<imixs:item name="keyupdateacl" type="xs:string">
|
||||||
|
<imixs:value><![CDATA[true]]></imixs:value>
|
||||||
|
</imixs:item>
|
||||||
|
<imixs:item name="keyownershipfields" type="xs:string">
|
||||||
|
<imixs:value><![CDATA[process.team]]></imixs:value>
|
||||||
|
</imixs:item>
|
||||||
|
<imixs:item name="namownershipnames" type="xs:string">
|
||||||
|
<imixs:value/>
|
||||||
|
</imixs:item>
|
||||||
|
<imixs:item name="namaddreadaccess" type="xs:string">
|
||||||
|
<imixs:value/>
|
||||||
|
</imixs:item>
|
||||||
|
<imixs:item name="namaddwriteaccess" type="xs:string">
|
||||||
|
<imixs:value/>
|
||||||
|
</imixs:item>
|
||||||
|
<imixs:item name="keyaddwritefields" type="xs:string">
|
||||||
|
<imixs:value><![CDATA[process.team]]></imixs:value>
|
||||||
|
</imixs:item>
|
||||||
|
</bpmn2:extensionElements>
|
||||||
|
<bpmn2:documentation id="documentation_1TuLXg"/>
|
||||||
|
<bpmn2:outgoing>sequenceFlow_NNbMhg</bpmn2:outgoing>
|
||||||
|
<bpmn2:incoming>sequenceFlow_avahXg</bpmn2:incoming>
|
||||||
|
<bpmn2:outgoing>sequenceFlow_pvIENQ</bpmn2:outgoing>
|
||||||
|
<bpmn2:incoming>sequenceFlow_BWOtzA</bpmn2:incoming>
|
||||||
|
<bpmn2:incoming>sequenceFlow_ofWWuw</bpmn2:incoming>
|
||||||
|
<bpmn2:outgoing>sequenceFlow_b0Bj3Q</bpmn2:outgoing>
|
||||||
|
<bpmn2:incoming>sequenceFlow_BHsRkQ</bpmn2:incoming>
|
||||||
|
</bpmn2:task>
|
||||||
|
<bpmn2:intermediateCatchEvent id="event_1OVorA" imixs:activityid="300" name="[iban/bic error]">
|
||||||
|
<bpmn2:extensionElements>
|
||||||
|
<imixs:item name="keypublicresult" type="xs:string">
|
||||||
|
<imixs:value><![CDATA[0]]></imixs:value>
|
||||||
|
</imixs:item>
|
||||||
|
<imixs:item name="rtfresultlog" type="xs:string">
|
||||||
|
<imixs:value><![CDATA[IBAN/BIC Plausibilität prüfen]]></imixs:value>
|
||||||
|
</imixs:item>
|
||||||
|
<imixs:item name="txtactivityresult" type="xs:string">
|
||||||
|
<imixs:value><![CDATA[<item name="process">Partnermanagement</item>]]></imixs:value>
|
||||||
|
</imixs:item>
|
||||||
|
</bpmn2:extensionElements>
|
||||||
|
<bpmn2:documentation id="documentation_J8iRLQ"/>
|
||||||
|
<bpmn2:outgoing>sequenceFlow_BHsRkQ</bpmn2:outgoing>
|
||||||
|
<bpmn2:incoming>sequenceFlow_5pT4Tw</bpmn2:incoming>
|
||||||
|
</bpmn2:intermediateCatchEvent>
|
||||||
|
<bpmn2:intermediateCatchEvent id="event_baWU4w" imixs:activityid="20" name="Korrigiert">
|
||||||
|
<bpmn2:extensionElements>
|
||||||
|
<imixs:item name="rtfresultlog" type="xs:string">
|
||||||
|
<imixs:value><![CDATA[Daten korrigiert]]></imixs:value>
|
||||||
|
</imixs:item>
|
||||||
|
<imixs:item name="keypublicresult" type="xs:string">
|
||||||
|
<imixs:value><![CDATA[1]]></imixs:value>
|
||||||
|
</imixs:item>
|
||||||
|
<imixs:item name="txtactivityresult" type="xs:string">
|
||||||
|
<imixs:value><![CDATA[<item name="action">home</item>]]></imixs:value>
|
||||||
|
</imixs:item>
|
||||||
|
</bpmn2:extensionElements>
|
||||||
|
<bpmn2:documentation id="documentation_q730KA"/>
|
||||||
|
<bpmn2:incoming>sequenceFlow_pvIENQ</bpmn2:incoming>
|
||||||
|
<bpmn2:outgoing>sequenceFlow_b4BcVA</bpmn2:outgoing>
|
||||||
|
</bpmn2:intermediateCatchEvent>
|
||||||
|
<bpmn2:sequenceFlow id="sequenceFlow_pvIENQ" sourceRef="task_delO7Q" targetRef="event_baWU4w">
|
||||||
|
<bpmn2:documentation id="documentation_BYJ08A"/>
|
||||||
|
</bpmn2:sequenceFlow>
|
||||||
|
<bpmn2:sequenceFlow id="sequenceFlow_b4BcVA" sourceRef="event_baWU4w" targetRef="task_Q80A1Q">
|
||||||
|
<bpmn2:documentation id="documentation_5wWdHA"/>
|
||||||
|
</bpmn2:sequenceFlow>
|
||||||
|
<bpmn2:intermediateCatchEvent id="event_ofjVfg" imixs:activityid="200" name="[update]">
|
||||||
|
<bpmn2:extensionElements>
|
||||||
|
<imixs:item name="keypublicresult" type="xs:string">
|
||||||
|
<imixs:value><![CDATA[0]]></imixs:value>
|
||||||
|
</imixs:item>
|
||||||
|
<imixs:item name="rtfresultlog" type="xs:string">
|
||||||
|
<imixs:value><![CDATA[Business Partner aus Cargosoft aktualisiert]]></imixs:value>
|
||||||
|
</imixs:item>
|
||||||
|
</bpmn2:extensionElements>
|
||||||
|
<bpmn2:documentation id="documentation_A42bcQ"/>
|
||||||
|
<bpmn2:outgoing>sequenceFlow_BWOtzA</bpmn2:outgoing>
|
||||||
|
</bpmn2:intermediateCatchEvent>
|
||||||
|
<bpmn2:sequenceFlow id="sequenceFlow_BWOtzA" sourceRef="event_ofjVfg" targetRef="task_delO7Q">
|
||||||
|
<bpmn2:documentation id="documentation_QW3slw"/>
|
||||||
|
</bpmn2:sequenceFlow>
|
||||||
|
<bpmn2:intermediateCatchEvent id="event_i7yQVw" imixs:activityid="10" name="Speichern">
|
||||||
|
<bpmn2:extensionElements>
|
||||||
|
<imixs:item name="txtactivityresult" type="xs:string">
|
||||||
|
<imixs:value><![CDATA[<item name="process">Partnermanagement</item>]]></imixs:value>
|
||||||
|
</imixs:item>
|
||||||
|
<imixs:item name="keypublicresult" type="xs:string">
|
||||||
|
<imixs:value><![CDATA[1]]></imixs:value>
|
||||||
|
</imixs:item>
|
||||||
|
</bpmn2:extensionElements>
|
||||||
|
<bpmn2:documentation id="documentation_Il4Shw"/>
|
||||||
|
<bpmn2:outgoing>sequenceFlow_ofWWuw</bpmn2:outgoing>
|
||||||
|
</bpmn2:intermediateCatchEvent>
|
||||||
|
<bpmn2:sequenceFlow id="sequenceFlow_ofWWuw" sourceRef="event_i7yQVw" targetRef="task_delO7Q">
|
||||||
|
<bpmn2:documentation id="documentation_fXWIBw"/>
|
||||||
|
</bpmn2:sequenceFlow>
|
||||||
|
<bpmn2:sequenceFlow id="sequenceFlow_b0Bj3Q" sourceRef="task_delO7Q" targetRef="event_Tr0aug">
|
||||||
|
<bpmn2:documentation id="documentation_pVJeTQ"/>
|
||||||
|
</bpmn2:sequenceFlow>
|
||||||
|
<bpmn2:sequenceFlow id="sequenceFlow_T5L9aQ" sourceRef="task_Q80A1Q" targetRef="event_VM0fEQ">
|
||||||
|
<bpmn2:documentation id="documentation_0GJKgQ"/>
|
||||||
|
</bpmn2:sequenceFlow>
|
||||||
|
<bpmn2:exclusiveGateway gatewayDirection="Diverging" id="gateway_uK0c6g" name="">
|
||||||
|
<bpmn2:documentation id="documentation_V9jDYA"/>
|
||||||
|
<bpmn2:incoming>sequenceFlow_S9LVXg</bpmn2:incoming>
|
||||||
|
<bpmn2:outgoing>sequenceFlow_jAU3VA</bpmn2:outgoing>
|
||||||
|
<bpmn2:outgoing>sequenceFlow_8BTEtw</bpmn2:outgoing>
|
||||||
|
</bpmn2:exclusiveGateway>
|
||||||
|
<bpmn2:sequenceFlow id="sequenceFlow_jAU3VA" sourceRef="gateway_uK0c6g" targetRef="event_aSdkwg">
|
||||||
|
<bpmn2:documentation id="documentation_ZNk0Bw"/>
|
||||||
|
</bpmn2:sequenceFlow>
|
||||||
|
<bpmn2:sequenceFlow id="sequenceFlow_BHsRkQ" sourceRef="event_1OVorA" targetRef="task_delO7Q">
|
||||||
|
<bpmn2:documentation id="documentation_SvoFWw"/>
|
||||||
|
</bpmn2:sequenceFlow>
|
||||||
|
<bpmn2:association id="association_WgLbbg" sourceRef="dataObject_UQIXAQ" targetRef="task_delO7Q">
|
||||||
|
<bpmn2:documentation id="documentation_YhKaqg"/>
|
||||||
|
</bpmn2:association>
|
||||||
|
<bpmn2:sequenceFlow id="sequenceFlow_8O1EtQ" sourceRef="event_aSdkwg" targetRef="task_Q80A1Q">
|
||||||
|
<bpmn2:documentation id="documentation_VTvROw"/>
|
||||||
|
</bpmn2:sequenceFlow>
|
||||||
|
<bpmn2:intermediateCatchEvent id="event_6250fg" imixs:activityid="10" name="Speichern">
|
||||||
|
<bpmn2:documentation id="documentation_fcuXRg"/>
|
||||||
|
<bpmn2:outgoing>sequenceFlow_kS2fMA</bpmn2:outgoing>
|
||||||
|
</bpmn2:intermediateCatchEvent>
|
||||||
|
<bpmn2:sequenceFlow id="sequenceFlow_kS2fMA" sourceRef="event_6250fg" targetRef="task_B8Pi7A">
|
||||||
|
<bpmn2:documentation id="documentation_t0kr1g"/>
|
||||||
|
</bpmn2:sequenceFlow>
|
||||||
|
<bpmn2:intermediateCatchEvent id="event_VM0fEQ" imixs:activityid="900" name="[Stats]">
|
||||||
|
<bpmn2:extensionElements>
|
||||||
|
<imixs:item name="txtactivityresult" type="xs:string">
|
||||||
|
<imixs:value><![CDATA[<item name="process">Partnermanagement</item>]]></imixs:value>
|
||||||
|
</imixs:item>
|
||||||
|
<imixs:item name="keypublicresult" type="xs:string">
|
||||||
|
<imixs:value><![CDATA[0]]></imixs:value>
|
||||||
|
</imixs:item>
|
||||||
|
</bpmn2:extensionElements>
|
||||||
|
<bpmn2:documentation id="documentation_ZmJD9A"/>
|
||||||
|
<bpmn2:incoming>sequenceFlow_T5L9aQ</bpmn2:incoming>
|
||||||
|
<bpmn2:outgoing>sequenceFlow_MPlPww</bpmn2:outgoing>
|
||||||
|
<bpmn2:timerEventDefinition id="timerEventDefinition_faqzJg"/>
|
||||||
|
<bpmn2:incoming>sequenceFlow_rNZ3tw</bpmn2:incoming>
|
||||||
|
</bpmn2:intermediateCatchEvent>
|
||||||
|
<bpmn2:exclusiveGateway default="sequenceFlow_aH0vCQ" gatewayDirection="Diverging" id="gateway_s0J53g" name="">
|
||||||
|
<bpmn2:documentation id="documentation_2Qn8Ng"/>
|
||||||
|
<bpmn2:incoming>sequenceFlow_MPlPww</bpmn2:incoming>
|
||||||
|
<bpmn2:outgoing>sequenceFlow_aH0vCQ</bpmn2:outgoing>
|
||||||
|
<bpmn2:outgoing>sequenceFlow_ShuXXA</bpmn2:outgoing>
|
||||||
|
</bpmn2:exclusiveGateway>
|
||||||
|
<bpmn2:task id="task_NohgrQ" imixs:processid="1700" name="Inaktiv">
|
||||||
|
<bpmn2:extensionElements>
|
||||||
|
<imixs:item name="txtimageurl" type="xs:string">
|
||||||
|
<imixs:value><![CDATA[typcn-user|typcn-tick,imixs-success]]></imixs:value>
|
||||||
|
</imixs:item>
|
||||||
|
<imixs:item name="txtworkflowsummary" type="xs:string">
|
||||||
|
<imixs:value><![CDATA[<itemvalue>partner.name</itemvalue> (<itemvalue>partner.id</itemvalue>)]]></imixs:value>
|
||||||
|
</imixs:item>
|
||||||
|
<imixs:item name="txtworkflowabstract" type="xs:string">
|
||||||
|
<imixs:value><![CDATA[<strong>Adresse:</strong><br />
|
||||||
|
<itemvalue>partner.name</itemvalue><br />
|
||||||
|
<itemvalue>partner.address</itemvalue><br />
|
||||||
|
<itemvalue>partner.zip</itemvalue> <itemvalue>partner.city</itemvalue><br />
|
||||||
|
<br />
|
||||||
|
|
||||||
|
<strong>BPID:</strong> <itemvalue>partner.id</itemvalue><br />
|
||||||
|
<strong>Kreditoren-Nr.:</strong> <itemvalue>cdtr.number</itemvalue><br />
|
||||||
|
<strong>Debitoren-Nr.:</strong> <itemvalue>dbtr.number</itemvalue><br />
|
||||||
|
]]></imixs:value>
|
||||||
|
</imixs:item>
|
||||||
|
<imixs:item name="keyupdateacl" type="xs:string">
|
||||||
|
<imixs:value><![CDATA[true]]></imixs:value>
|
||||||
|
</imixs:item>
|
||||||
|
<imixs:item name="namownershipnames" type="xs:string">
|
||||||
|
<imixs:value/>
|
||||||
|
</imixs:item>
|
||||||
|
<imixs:item name="namaddreadaccess" type="xs:string">
|
||||||
|
<imixs:value/>
|
||||||
|
</imixs:item>
|
||||||
|
<imixs:item name="namaddwriteaccess" type="xs:string">
|
||||||
|
<imixs:value/>
|
||||||
|
</imixs:item>
|
||||||
|
<imixs:item name="keyaddwritefields" type="xs:string">
|
||||||
|
<imixs:value><![CDATA[process.team]]></imixs:value>
|
||||||
|
</imixs:item>
|
||||||
|
<imixs:item name="txttype" type="xs:string">
|
||||||
|
<imixs:value><![CDATA[workitemarchive]]></imixs:value>
|
||||||
|
</imixs:item>
|
||||||
|
</bpmn2:extensionElements>
|
||||||
|
<bpmn2:documentation id="documentation_RI2Ing"/>
|
||||||
|
<bpmn2:incoming>sequenceFlow_9atLFA</bpmn2:incoming>
|
||||||
|
<bpmn2:incoming>sequenceFlow_8O1EtQ</bpmn2:incoming>
|
||||||
|
<bpmn2:incoming>sequenceFlow_aH0vCQ</bpmn2:incoming>
|
||||||
|
<bpmn2:outgoing>sequenceFlow_neSsFQ</bpmn2:outgoing>
|
||||||
|
<bpmn2:outgoing>sequenceFlow_zd6RWA</bpmn2:outgoing>
|
||||||
|
<bpmn2:outgoing>sequenceFlow_rNZ3tw</bpmn2:outgoing>
|
||||||
|
</bpmn2:task>
|
||||||
|
<bpmn2:sequenceFlow id="sequenceFlow_MPlPww" sourceRef="event_VM0fEQ" targetRef="gateway_s0J53g">
|
||||||
|
<bpmn2:documentation id="documentation_saZUSw"/>
|
||||||
|
</bpmn2:sequenceFlow>
|
||||||
|
<bpmn2:sequenceFlow id="sequenceFlow_aH0vCQ" sourceRef="gateway_s0J53g" targetRef="task_NohgrQ">
|
||||||
|
<bpmn2:documentation id="documentation_0fUXrw"/>
|
||||||
|
</bpmn2:sequenceFlow>
|
||||||
|
<bpmn2:sequenceFlow id="sequenceFlow_ShuXXA" sourceRef="gateway_s0J53g" targetRef="task_Q80A1Q">
|
||||||
|
<bpmn2:documentation id="documentation_mhSkeg"/>
|
||||||
|
<bpmn2:conditionExpression id="formalExpression_oEZj1g" xsi:type="bpmn2:tFormalExpression"><![CDATA[true;]]></bpmn2:conditionExpression>
|
||||||
|
</bpmn2:sequenceFlow>
|
||||||
|
<bpmn2:sequenceFlow id="sequenceFlow_neSsFQ" sourceRef="task_NohgrQ" targetRef="event_Tr0aug">
|
||||||
|
<bpmn2:documentation id="documentation_X3IiUg"/>
|
||||||
|
</bpmn2:sequenceFlow>
|
||||||
|
<bpmn2:intermediateCatchEvent id="event_AMs05g" name="[IBAN-ERROR]">
|
||||||
|
<bpmn2:documentation id="documentation_CKfjew"/>
|
||||||
|
<bpmn2:linkEventDefinition id="linkEventDefinition_QoDe7w"/>
|
||||||
|
<bpmn2:outgoing>sequenceFlow_5pT4Tw</bpmn2:outgoing>
|
||||||
|
</bpmn2:intermediateCatchEvent>
|
||||||
|
<bpmn2:intermediateThrowEvent id="event_feLZFQ" name="[IBAN-ERROR]">
|
||||||
|
<bpmn2:documentation id="documentation_ns8CKQ"/>
|
||||||
|
<bpmn2:linkEventDefinition id="linkEventDefinition_ici5wA"/>
|
||||||
|
<bpmn2:incoming>sequenceFlow_8BTEtw</bpmn2:incoming>
|
||||||
|
</bpmn2:intermediateThrowEvent>
|
||||||
|
<bpmn2:sequenceFlow id="sequenceFlow_5pT4Tw" sourceRef="event_AMs05g" targetRef="event_1OVorA">
|
||||||
|
<bpmn2:documentation id="documentation_mQfndA"/>
|
||||||
|
</bpmn2:sequenceFlow>
|
||||||
|
<bpmn2:sequenceFlow id="sequenceFlow_8BTEtw" sourceRef="gateway_uK0c6g" targetRef="event_feLZFQ">
|
||||||
|
<bpmn2:documentation id="documentation_aB5qHw"/>
|
||||||
|
</bpmn2:sequenceFlow>
|
||||||
|
<bpmn2:intermediateThrowEvent id="event_GTXFMw" name="[IBAN-ERROR]">
|
||||||
|
<bpmn2:documentation id="documentation_a8NiKA"/>
|
||||||
|
<bpmn2:linkEventDefinition id="linkEventDefinition_YUfA0A"/>
|
||||||
|
<bpmn2:incoming>sequenceFlow_03b60w</bpmn2:incoming>
|
||||||
|
</bpmn2:intermediateThrowEvent>
|
||||||
|
<bpmn2:sequenceFlow id="sequenceFlow_03b60w" sourceRef="task_Q80A1Q" targetRef="event_GTXFMw">
|
||||||
|
<bpmn2:documentation id="documentation_i02Wsw"/>
|
||||||
|
</bpmn2:sequenceFlow>
|
||||||
|
<bpmn2:intermediateThrowEvent id="event_u8OBFg" name="[IBAN-ERROR]">
|
||||||
|
<bpmn2:documentation id="documentation_0rGDzg"/>
|
||||||
|
<bpmn2:linkEventDefinition id="linkEventDefinition_8g6AoA"/>
|
||||||
|
<bpmn2:incoming>sequenceFlow_zd6RWA</bpmn2:incoming>
|
||||||
|
</bpmn2:intermediateThrowEvent>
|
||||||
|
<bpmn2:sequenceFlow id="sequenceFlow_zd6RWA" sourceRef="task_NohgrQ" targetRef="event_u8OBFg">
|
||||||
|
<bpmn2:documentation id="documentation_ez15rg"/>
|
||||||
|
</bpmn2:sequenceFlow>
|
||||||
|
<bpmn2:sequenceFlow id="sequenceFlow_rNZ3tw" sourceRef="task_NohgrQ" targetRef="event_VM0fEQ">
|
||||||
|
<bpmn2:documentation id="documentation_AHyEzA"/>
|
||||||
|
</bpmn2:sequenceFlow>
|
||||||
</bpmn2:process>
|
</bpmn2:process>
|
||||||
<bpmndi:BPMNDiagram id="BPMNDiagram_1" name="OpenBPMN Diagram">
|
<bpmndi:BPMNDiagram id="BPMNDiagram_1" name="OpenBPMN Diagram">
|
||||||
<bpmndi:BPMNPlane bpmnElement="collaboration_1" id="BPMNPlane_1">
|
<bpmndi:BPMNPlane bpmnElement="collaboration_1" id="BPMNPlane_1">
|
||||||
<bpmndi:BPMNShape bpmnElement="event_WmkBvw" id="BPMNShape_heefeQ">
|
<bpmndi:BPMNShape bpmnElement="event_WmkBvw" id="BPMNShape_heefeQ">
|
||||||
<dc:Bounds height="36.0" width="36.0" x="77.0" y="167.0"/>
|
<dc:Bounds height="36.0" width="36.0" x="57.0" y="277.0"/>
|
||||||
<bpmndi:BPMNLabel id="BPMNLabel_6qfN6w">
|
<bpmndi:BPMNLabel id="BPMNLabel_6qfN6w">
|
||||||
<dc:Bounds height="20.0" width="100.0" x="45.0" y="206.0"/>
|
<dc:Bounds height="20.0" width="100.0" x="25.0" y="316.0"/>
|
||||||
</bpmndi:BPMNLabel>
|
</bpmndi:BPMNLabel>
|
||||||
</bpmndi:BPMNShape>
|
</bpmndi:BPMNShape>
|
||||||
<bpmndi:BPMNShape bpmnElement="event_1clvlg" id="BPMNShape_85k4rg">
|
<bpmndi:BPMNShape bpmnElement="event_1clvlg" id="BPMNShape_85k4rg">
|
||||||
<dc:Bounds height="36.0" width="36.0" x="787.0" y="167.0"/>
|
<dc:Bounds height="36.0" width="36.0" x="1657.0" y="277.0"/>
|
||||||
<bpmndi:BPMNLabel id="BPMNLabel_F7t2Ng">
|
<bpmndi:BPMNLabel id="BPMNLabel_F7t2Ng">
|
||||||
<dc:Bounds height="20.0" width="100.0" x="755.0" y="149.0"/>
|
<dc:Bounds height="20.0" width="100.0" x="1625.0" y="259.0"/>
|
||||||
</bpmndi:BPMNLabel>
|
</bpmndi:BPMNLabel>
|
||||||
</bpmndi:BPMNShape>
|
</bpmndi:BPMNShape>
|
||||||
<bpmndi:BPMNShape bpmnElement="task_ToMZaQ" id="BPMNShape_CUpR6w">
|
<bpmndi:BPMNShape bpmnElement="task_ToMZaQ" id="BPMNShape_CUpR6w">
|
||||||
<dc:Bounds height="50.0" width="110.0" x="200.0" y="160.0"/>
|
<dc:Bounds height="50.0" width="110.0" x="170.0" y="270.0"/>
|
||||||
</bpmndi:BPMNShape>
|
</bpmndi:BPMNShape>
|
||||||
<bpmndi:BPMNShape bpmnElement="participant_oxb3dg" id="BPMNShape_mqlDUA">
|
<bpmndi:BPMNShape bpmnElement="participant_oxb3dg" id="BPMNShape_mqlDUA">
|
||||||
<dc:Bounds height="550.0" width="1420.0" x="-30.0" y="40.0"/>
|
<dc:Bounds height="820.0" width="1820.0" x="-30.0" y="40.0"/>
|
||||||
</bpmndi:BPMNShape>
|
</bpmndi:BPMNShape>
|
||||||
<bpmndi:BPMNShape bpmnElement="lane_Zxa2TA" id="BPMNShape_Lane_1cDN5A">
|
<bpmndi:BPMNShape bpmnElement="lane_Zxa2TA" id="BPMNShape_Lane_1cDN5A">
|
||||||
<dc:Bounds height="550.0" width="1390.0" x="0.0" y="40.0"/>
|
<dc:Bounds height="820.0" width="1790.0" x="0.0" y="40.0"/>
|
||||||
</bpmndi:BPMNShape>
|
</bpmndi:BPMNShape>
|
||||||
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_25otUg" id="BPMNEdge_NHnc3g" sourceElement="BPMNShape_heefeQ" targetElement="BPMNShape_CUpR6w">
|
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_25otUg" id="BPMNEdge_NHnc3g" sourceElement="BPMNShape_heefeQ" targetElement="BPMNShape_CUpR6w">
|
||||||
<di:waypoint x="113.0" y="185.0"/>
|
<di:waypoint x="93.0" y="295.0"/>
|
||||||
<di:waypoint x="200.0" y="185.0"/>
|
<di:waypoint x="170.0" y="295.0"/>
|
||||||
</bpmndi:BPMNEdge>
|
</bpmndi:BPMNEdge>
|
||||||
<bpmndi:BPMNShape bpmnElement="task_Q80A1Q" id="BPMNShape_7JA0nw">
|
<bpmndi:BPMNShape bpmnElement="task_Q80A1Q" id="BPMNShape_7JA0nw">
|
||||||
<dc:Bounds height="50.0" width="110.0" x="490.0" y="160.0"/>
|
<dc:Bounds height="50.0" width="110.0" x="660.0" y="270.0"/>
|
||||||
</bpmndi:BPMNShape>
|
</bpmndi:BPMNShape>
|
||||||
<bpmndi:BPMNShape bpmnElement="task_B8Pi7A" id="BPMNShape_ghujeA">
|
<bpmndi:BPMNShape bpmnElement="task_B8Pi7A" id="BPMNShape_ghujeA">
|
||||||
<dc:Bounds height="50.0" width="110.0" x="490.0" y="320.0"/>
|
<dc:Bounds height="50.0" width="110.0" x="1360.0" y="270.0"/>
|
||||||
</bpmndi:BPMNShape>
|
</bpmndi:BPMNShape>
|
||||||
<bpmndi:BPMNShape bpmnElement="event_aSdkwg" id="BPMNShape_uesqgg">
|
<bpmndi:BPMNShape bpmnElement="event_aSdkwg" id="BPMNShape_uesqgg">
|
||||||
<dc:Bounds height="36.0" width="36.0" x="377.0" y="167.0"/>
|
<dc:Bounds height="36.0" width="36.0" x="437.0" y="277.0"/>
|
||||||
<bpmndi:BPMNLabel id="BPMNLabel_AxKRKQ">
|
<bpmndi:BPMNLabel id="BPMNLabel_AxKRKQ">
|
||||||
<dc:Bounds height="20.0" width="100.0" x="345.0" y="206.0"/>
|
<dc:Bounds height="20.0" width="100.0" x="405.0" y="316.0"/>
|
||||||
</bpmndi:BPMNLabel>
|
</bpmndi:BPMNLabel>
|
||||||
</bpmndi:BPMNShape>
|
</bpmndi:BPMNShape>
|
||||||
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_S9LVXg" id="BPMNEdge_xoCSiA" sourceElement="BPMNShape_CUpR6w" targetElement="BPMNShape_uesqgg">
|
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_S9LVXg" id="BPMNEdge_xoCSiA" sourceElement="BPMNShape_CUpR6w" targetElement="BPMNShape_6IZk7Q">
|
||||||
<di:waypoint x="310.0" y="185.0"/>
|
<di:waypoint x="280.0" y="295.0"/>
|
||||||
<di:waypoint x="377.0" y="185.0"/>
|
<di:waypoint x="340.0" y="295.0"/>
|
||||||
</bpmndi:BPMNEdge>
|
|
||||||
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_knUYpQ" id="BPMNEdge_0yPtdQ" sourceElement="BPMNShape_uesqgg" targetElement="BPMNShape_7JA0nw">
|
|
||||||
<di:waypoint x="413.0" y="185.0"/>
|
|
||||||
<di:waypoint x="490.0" y="185.0"/>
|
|
||||||
</bpmndi:BPMNEdge>
|
</bpmndi:BPMNEdge>
|
||||||
<bpmndi:BPMNShape bpmnElement="event_Tr0aug" id="BPMNShape_NEaJjA">
|
<bpmndi:BPMNShape bpmnElement="event_Tr0aug" id="BPMNShape_NEaJjA">
|
||||||
<dc:Bounds height="36.0" width="36.0" x="527.0" y="237.0"/>
|
<dc:Bounds height="36.0" width="36.0" x="1227.0" y="277.0"/>
|
||||||
<bpmndi:BPMNLabel id="BPMNLabel_GkrCTA">
|
<bpmndi:BPMNLabel id="BPMNLabel_GkrCTA">
|
||||||
<dc:Bounds height="20.0" width="100.0" x="495.0" y="276.0"/>
|
<dc:Bounds height="20.0" width="100.0" x="1195.0" y="316.0"/>
|
||||||
</bpmndi:BPMNLabel>
|
</bpmndi:BPMNLabel>
|
||||||
</bpmndi:BPMNShape>
|
</bpmndi:BPMNShape>
|
||||||
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_2uNvPw" id="BPMNEdge_Q4F2dQ" sourceElement="BPMNShape_7JA0nw" targetElement="BPMNShape_NEaJjA">
|
|
||||||
<di:waypoint x="545.0" y="210.0"/>
|
|
||||||
<di:waypoint x="545.0" y="237.0"/>
|
|
||||||
</bpmndi:BPMNEdge>
|
|
||||||
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_1mXO8A" id="BPMNEdge_7CorJA" sourceElement="BPMNShape_NEaJjA" targetElement="BPMNShape_ghujeA">
|
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_1mXO8A" id="BPMNEdge_7CorJA" sourceElement="BPMNShape_NEaJjA" targetElement="BPMNShape_ghujeA">
|
||||||
<di:waypoint x="545.0" y="273.0"/>
|
<di:waypoint x="1263.0" y="295.0"/>
|
||||||
<di:waypoint x="545.0" y="320.0"/>
|
<di:waypoint x="1360.0" y="295.0"/>
|
||||||
</bpmndi:BPMNEdge>
|
|
||||||
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_NNbMhg" id="BPMNEdge_HdVWPQ" sourceElement="BPMNShape_7JA0nw" targetElement="BPMNShape_85k4rg">
|
|
||||||
<di:waypoint x="600.0" y="185.0"/>
|
|
||||||
<di:waypoint x="787.0" y="185.0"/>
|
|
||||||
</bpmndi:BPMNEdge>
|
</bpmndi:BPMNEdge>
|
||||||
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_rwdWxw" id="BPMNEdge_t88dUw" sourceElement="BPMNShape_ghujeA" targetElement="BPMNShape_85k4rg">
|
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_rwdWxw" id="BPMNEdge_t88dUw" sourceElement="BPMNShape_ghujeA" targetElement="BPMNShape_85k4rg">
|
||||||
<di:waypoint x="600.0" y="345.0"/>
|
<di:waypoint x="1470.0" y="295.0"/>
|
||||||
<di:waypoint x="810.0" y="345.0"/>
|
<di:waypoint x="1657.0" y="295.0"/>
|
||||||
<di:waypoint x="810.0" y="202.0"/>
|
|
||||||
</bpmndi:BPMNEdge>
|
</bpmndi:BPMNEdge>
|
||||||
<bpmndi:BPMNShape bpmnElement="dataObject_UQIXAQ" id="BPMNShape_Mnop9Q">
|
<bpmndi:BPMNShape bpmnElement="dataObject_UQIXAQ" id="BPMNShape_Mnop9Q">
|
||||||
<dc:Bounds height="50.0" width="35.0" x="380.0" y="60.0"/>
|
<dc:Bounds height="50.0" width="35.0" x="560.0" y="380.0"/>
|
||||||
<bpmndi:BPMNLabel id="BPMNLabel_h0UuFw">
|
<bpmndi:BPMNLabel id="BPMNLabel_h0UuFw">
|
||||||
<dc:Bounds height="20.0" width="100.0" x="347.5" y="115.0"/>
|
<dc:Bounds height="20.0" width="100.0" x="527.5" y="435.0"/>
|
||||||
</bpmndi:BPMNLabel>
|
</bpmndi:BPMNLabel>
|
||||||
</bpmndi:BPMNShape>
|
</bpmndi:BPMNShape>
|
||||||
<bpmndi:BPMNEdge bpmnElement="association_pG70zw" id="BPMNEdge_YKSHpA" sourceElement="BPMNShape_CUpR6w" targetElement="BPMNShape_Mnop9Q">
|
|
||||||
<di:waypoint x="260.0" y="160.0"/>
|
|
||||||
<di:waypoint x="260.0" y="80.0"/>
|
|
||||||
<di:waypoint x="380.0" y="80.0"/>
|
|
||||||
</bpmndi:BPMNEdge>
|
|
||||||
<bpmndi:BPMNShape bpmnElement="event_vwH0cA" id="BPMNShape_OXGg8Q">
|
<bpmndi:BPMNShape bpmnElement="event_vwH0cA" id="BPMNShape_OXGg8Q">
|
||||||
<dc:Bounds height="36.0" width="36.0" x="657.0" y="67.0"/>
|
<dc:Bounds height="36.0" width="36.0" x="747.0" y="177.0"/>
|
||||||
<bpmndi:BPMNLabel id="BPMNLabel_KaHfJQ">
|
<bpmndi:BPMNLabel id="BPMNLabel_KaHfJQ">
|
||||||
<dc:Bounds height="20.0" width="100.0" x="625.0" y="106.0"/>
|
<dc:Bounds height="20.0" width="100.0" x="715.0" y="216.0"/>
|
||||||
</bpmndi:BPMNLabel>
|
</bpmndi:BPMNLabel>
|
||||||
</bpmndi:BPMNShape>
|
</bpmndi:BPMNShape>
|
||||||
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_avahXg" id="BPMNEdge_odMtvQ" sourceElement="BPMNShape_OXGg8Q" targetElement="BPMNShape_7JA0nw">
|
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_avahXg" id="BPMNEdge_odMtvQ" sourceElement="BPMNShape_OXGg8Q" targetElement="BPMNShape_7JA0nw">
|
||||||
<di:waypoint x="665.0" y="100.0"/>
|
<di:waypoint x="747.0" y="196.0"/>
|
||||||
<di:waypoint x="575.0" y="100.0"/>
|
<di:waypoint x="725.0" y="196.0"/>
|
||||||
<di:waypoint x="575.0" y="160.0"/>
|
<di:waypoint x="725.0" y="270.0"/>
|
||||||
</bpmndi:BPMNEdge>
|
|
||||||
<bpmndi:BPMNEdge bpmnElement="association_uvV8uA" id="BPMNEdge_3Mtxfw" sourceElement="BPMNShape_mqlDUA" targetElement="BPMNShape_7JA0nw">
|
|
||||||
<di:waypoint x="525.0" y="220.0"/>
|
|
||||||
<di:waypoint x="545.0" y="135.0"/>
|
|
||||||
</bpmndi:BPMNEdge>
|
</bpmndi:BPMNEdge>
|
||||||
|
<bpmndi:BPMNEdge bpmnElement="association_uvV8uA" id="BPMNEdge_3Mtxfw" sourceElement="BPMNShape_mqlDUA" targetElement="BPMNShape_7JA0nw"/>
|
||||||
<bpmndi:BPMNEdge bpmnElement="association_mpLQEQ" id="BPMNEdge_qkEiPA" sourceElement="BPMNShape_Mnop9Q" targetElement="BPMNShape_7JA0nw">
|
<bpmndi:BPMNEdge bpmnElement="association_mpLQEQ" id="BPMNEdge_qkEiPA" sourceElement="BPMNShape_Mnop9Q" targetElement="BPMNShape_7JA0nw">
|
||||||
<di:waypoint x="415.0" y="80.0"/>
|
<di:waypoint x="588.0" y="380.0"/>
|
||||||
<di:waypoint x="550.0" y="80.0"/>
|
<di:waypoint x="588.0" y="357.0"/>
|
||||||
<di:waypoint x="550.0" y="160.0"/>
|
<di:waypoint x="680.0" y="357.0"/>
|
||||||
|
<di:waypoint x="680.0" y="320.0"/>
|
||||||
</bpmndi:BPMNEdge>
|
</bpmndi:BPMNEdge>
|
||||||
<bpmndi:BPMNShape bpmnElement="textAnnotation_LyGTCw" id="BPMNShape_SbxnGw">
|
<bpmndi:BPMNShape bpmnElement="textAnnotation_LyGTCw" id="BPMNShape_SbxnGw">
|
||||||
<dc:Bounds height="85.0" width="228.0" x="60.0" y="300.0"/>
|
<dc:Bounds height="85.0" width="228.0" x="80.0" y="80.0"/>
|
||||||
</bpmndi:BPMNShape>
|
</bpmndi:BPMNShape>
|
||||||
<bpmndi:BPMNEdge bpmnElement="association_83sZPw" id="BPMNEdge_p0XWxg" sourceElement="BPMNShape_uesqgg" targetElement="BPMNShape_SbxnGw">
|
<bpmndi:BPMNEdge bpmnElement="association_83sZPw" id="BPMNEdge_p0XWxg" sourceElement="BPMNShape_mqlDUA" targetElement="BPMNShape_SbxnGw"/>
|
||||||
<di:waypoint x="395.0" y="203.0"/>
|
|
||||||
<di:waypoint x="395.0" y="345.0"/>
|
|
||||||
<di:waypoint x="288.0" y="345.0"/>
|
|
||||||
</bpmndi:BPMNEdge>
|
|
||||||
<bpmndi:BPMNShape bpmnElement="event_TuyuwQ" id="BPMNShape_fTy7mg">
|
<bpmndi:BPMNShape bpmnElement="event_TuyuwQ" id="BPMNShape_fTy7mg">
|
||||||
<dc:Bounds height="36.0" width="36.0" x="447.0" y="237.0"/>
|
<dc:Bounds height="36.0" width="36.0" x="617.0" y="177.0"/>
|
||||||
<bpmndi:BPMNLabel id="BPMNLabel_033n1A">
|
<bpmndi:BPMNLabel id="BPMNLabel_033n1A">
|
||||||
<dc:Bounds height="20.0" width="100.0" x="415.0" y="276.0"/>
|
<dc:Bounds height="20.0" width="100.0" x="585.0" y="216.0"/>
|
||||||
</bpmndi:BPMNLabel>
|
</bpmndi:BPMNLabel>
|
||||||
</bpmndi:BPMNShape>
|
</bpmndi:BPMNShape>
|
||||||
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_9atLFA" id="BPMNEdge_BC4pwQ" sourceElement="BPMNShape_fTy7mg" targetElement="BPMNShape_7JA0nw">
|
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_9atLFA" id="BPMNEdge_BC4pwQ" sourceElement="BPMNShape_fTy7mg" targetElement="BPMNShape_7JA0nw">
|
||||||
<di:waypoint x="465.0" y="237.0"/>
|
<di:waypoint x="653.0" y="196.0"/>
|
||||||
<di:waypoint x="465.0" y="225.0"/>
|
<di:waypoint x="700.0" y="196.0"/>
|
||||||
<di:waypoint x="520.0" y="225.0"/>
|
<di:waypoint x="700.0" y="270.0"/>
|
||||||
<di:waypoint x="520.0" y="210.0"/>
|
|
||||||
</bpmndi:BPMNEdge>
|
</bpmndi:BPMNEdge>
|
||||||
<bpmndi:BPMNShape bpmnElement="event_h0Kk5g" id="BPMNShape_T4k09g">
|
<bpmndi:BPMNShape bpmnElement="event_h0Kk5g" id="BPMNShape_T4k09g">
|
||||||
<dc:Bounds height="36.0" width="36.0" x="497.0" y="427.0"/>
|
<dc:Bounds height="36.0" width="36.0" x="1327.0" y="177.0"/>
|
||||||
<bpmndi:BPMNLabel id="BPMNLabel_lX0KlA">
|
<bpmndi:BPMNLabel id="BPMNLabel_lX0KlA">
|
||||||
<dc:Bounds height="20.0" width="100.0" x="465.0" y="466.0"/>
|
<dc:Bounds height="20.0" width="100.0" x="1295.0" y="216.0"/>
|
||||||
</bpmndi:BPMNLabel>
|
</bpmndi:BPMNLabel>
|
||||||
</bpmndi:BPMNShape>
|
</bpmndi:BPMNShape>
|
||||||
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_gC0I9w" id="BPMNEdge_0nCVvg" sourceElement="BPMNShape_T4k09g" targetElement="BPMNShape_ghujeA">
|
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_gC0I9w" id="BPMNEdge_0nCVvg" sourceElement="BPMNShape_T4k09g" targetElement="BPMNShape_ghujeA">
|
||||||
<di:waypoint x="515.0" y="427.0"/>
|
<di:waypoint x="1360.0" y="185.0"/>
|
||||||
<di:waypoint x="515.0" y="400.0"/>
|
<di:waypoint x="1390.0" y="185.0"/>
|
||||||
<di:waypoint x="545.0" y="400.0"/>
|
<di:waypoint x="1390.0" y="270.0"/>
|
||||||
<di:waypoint x="545.0" y="370.0"/>
|
</bpmndi:BPMNEdge>
|
||||||
|
<bpmndi:BPMNShape bpmnElement="task_delO7Q" id="BPMNShape_rEOMWA">
|
||||||
|
<dc:Bounds height="50.0" width="110.0" x="660.0" y="510.0"/>
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNShape bpmnElement="event_1OVorA" id="BPMNShape_mG4csA">
|
||||||
|
<dc:Bounds height="36.0" width="36.0" x="557.0" y="517.0"/>
|
||||||
|
<bpmndi:BPMNLabel id="BPMNLabel_djIb8w">
|
||||||
|
<dc:Bounds height="20.0" width="100.0" x="528.0" y="559.0"/>
|
||||||
|
</bpmndi:BPMNLabel>
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNShape bpmnElement="event_baWU4w" id="BPMNShape_755HGg">
|
||||||
|
<dc:Bounds height="36.0" width="36.0" x="697.0" y="407.0"/>
|
||||||
|
<bpmndi:BPMNLabel id="BPMNLabel_oN6XKQ">
|
||||||
|
<dc:Bounds height="20.0" width="100.0" x="665.0" y="446.0"/>
|
||||||
|
</bpmndi:BPMNLabel>
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_pvIENQ" id="BPMNEdge_wXz5yA" sourceElement="BPMNShape_rEOMWA" targetElement="BPMNShape_755HGg">
|
||||||
|
<di:waypoint x="715.0" y="510.0"/>
|
||||||
|
<di:waypoint x="715.0" y="443.0"/>
|
||||||
|
</bpmndi:BPMNEdge>
|
||||||
|
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_b4BcVA" id="BPMNEdge_1gQ5Nw" sourceElement="BPMNShape_755HGg" targetElement="BPMNShape_7JA0nw">
|
||||||
|
<di:waypoint x="715.0" y="407.0"/>
|
||||||
|
<di:waypoint x="715.0" y="320.0"/>
|
||||||
|
</bpmndi:BPMNEdge>
|
||||||
|
<bpmndi:BPMNShape bpmnElement="event_ofjVfg" id="BPMNShape_hDVKtg">
|
||||||
|
<dc:Bounds height="36.0" width="36.0" x="617.0" y="607.0"/>
|
||||||
|
<bpmndi:BPMNLabel id="BPMNLabel_HpXNFQ">
|
||||||
|
<dc:Bounds height="20.0" width="100.0" x="585.0" y="646.0"/>
|
||||||
|
</bpmndi:BPMNLabel>
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_BWOtzA" id="BPMNEdge_KW5PhQ" sourceElement="BPMNShape_hDVKtg" targetElement="BPMNShape_rEOMWA">
|
||||||
|
<di:waypoint x="651.0" y="616.0"/>
|
||||||
|
<di:waypoint x="685.0" y="616.0"/>
|
||||||
|
<di:waypoint x="685.0" y="560.0"/>
|
||||||
|
</bpmndi:BPMNEdge>
|
||||||
|
<bpmndi:BPMNShape bpmnElement="event_i7yQVw" id="BPMNShape_KxnRjA">
|
||||||
|
<dc:Bounds height="36.0" width="36.0" x="747.0" y="607.0"/>
|
||||||
|
<bpmndi:BPMNLabel id="BPMNLabel_sJqwmA">
|
||||||
|
<dc:Bounds height="20.0" width="100.0" x="715.0" y="646.0"/>
|
||||||
|
</bpmndi:BPMNLabel>
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_ofWWuw" id="BPMNEdge_zlNOzQ" sourceElement="BPMNShape_KxnRjA" targetElement="BPMNShape_rEOMWA">
|
||||||
|
<di:waypoint x="749.0" y="616.0"/>
|
||||||
|
<di:waypoint x="735.0" y="616.0"/>
|
||||||
|
<di:waypoint x="735.0" y="560.0"/>
|
||||||
|
</bpmndi:BPMNEdge>
|
||||||
|
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_b0Bj3Q" id="BPMNEdge_CDn41A" sourceElement="BPMNShape_rEOMWA" targetElement="BPMNShape_NEaJjA">
|
||||||
|
<di:waypoint x="770.0" y="540.0"/>
|
||||||
|
<di:waypoint x="1240.0" y="540.0"/>
|
||||||
|
<di:waypoint x="1240.0" y="312.0"/>
|
||||||
|
</bpmndi:BPMNEdge>
|
||||||
|
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_T5L9aQ" id="BPMNEdge_dAQH1Q" sourceElement="BPMNShape_7JA0nw" targetElement="BPMNShape_FKXJtw">
|
||||||
|
<di:waypoint x="770.0" y="295.0"/>
|
||||||
|
<di:waypoint x="837.0" y="295.0"/>
|
||||||
|
</bpmndi:BPMNEdge>
|
||||||
|
<bpmndi:BPMNShape bpmnElement="gateway_uK0c6g" id="BPMNShape_6IZk7Q">
|
||||||
|
<dc:Bounds height="50.0" width="50.0" x="340.0" y="270.0"/>
|
||||||
|
<bpmndi:BPMNLabel id="BPMNLabel_JvBA0w">
|
||||||
|
<dc:Bounds height="20.0" width="100.0" x="315.0" y="323.0"/>
|
||||||
|
</bpmndi:BPMNLabel>
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_jAU3VA" id="BPMNEdge_2qLI2g" sourceElement="BPMNShape_6IZk7Q" targetElement="BPMNShape_uesqgg">
|
||||||
|
<di:waypoint x="390.0" y="295.0"/>
|
||||||
|
<di:waypoint x="437.0" y="295.0"/>
|
||||||
|
</bpmndi:BPMNEdge>
|
||||||
|
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_BHsRkQ" id="BPMNEdge_1LX47g" sourceElement="BPMNShape_mG4csA" targetElement="BPMNShape_rEOMWA">
|
||||||
|
<di:waypoint x="593.0" y="535.0"/>
|
||||||
|
<di:waypoint x="660.0" y="535.0"/>
|
||||||
|
</bpmndi:BPMNEdge>
|
||||||
|
<bpmndi:BPMNEdge bpmnElement="association_WgLbbg" id="BPMNEdge_Btz9CA" sourceElement="BPMNShape_Mnop9Q" targetElement="BPMNShape_rEOMWA">
|
||||||
|
<di:waypoint x="575.0" y="430.0"/>
|
||||||
|
<di:waypoint x="575.0" y="471.0"/>
|
||||||
|
<di:waypoint x="675.0" y="471.0"/>
|
||||||
|
<di:waypoint x="675.0" y="510.0"/>
|
||||||
|
</bpmndi:BPMNEdge>
|
||||||
|
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_8O1EtQ" id="BPMNEdge_JxSLfA" sourceElement="BPMNShape_uesqgg" targetElement="BPMNShape_7JA0nw">
|
||||||
|
<di:waypoint x="473.0" y="295.0"/>
|
||||||
|
<di:waypoint x="660.0" y="295.0"/>
|
||||||
|
</bpmndi:BPMNEdge>
|
||||||
|
<bpmndi:BPMNShape bpmnElement="event_6250fg" id="BPMNShape_v5Xzvg">
|
||||||
|
<dc:Bounds height="36.0" width="36.0" x="1457.0" y="177.0"/>
|
||||||
|
<bpmndi:BPMNLabel id="BPMNLabel_IBnUDA">
|
||||||
|
<dc:Bounds height="20.0" width="100.0" x="1425.0" y="216.0"/>
|
||||||
|
</bpmndi:BPMNLabel>
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_kS2fMA" id="BPMNEdge_i80XvQ" sourceElement="BPMNShape_v5Xzvg" targetElement="BPMNShape_ghujeA">
|
||||||
|
<di:waypoint x="1458.0" y="190.0"/>
|
||||||
|
<di:waypoint x="1435.0" y="190.0"/>
|
||||||
|
<di:waypoint x="1435.0" y="270.0"/>
|
||||||
|
</bpmndi:BPMNEdge>
|
||||||
|
<bpmndi:BPMNShape bpmnElement="event_VM0fEQ" id="BPMNShape_FKXJtw">
|
||||||
|
<dc:Bounds height="36.0" width="36.0" x="837.0" y="277.0"/>
|
||||||
|
<bpmndi:BPMNLabel id="BPMNLabel_CAiT2Q">
|
||||||
|
<dc:Bounds height="20.0" width="100.0" x="805.0" y="316.0"/>
|
||||||
|
</bpmndi:BPMNLabel>
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNShape bpmnElement="gateway_s0J53g" id="BPMNShape_gklxXQ">
|
||||||
|
<dc:Bounds height="50.0" width="50.0" x="930.0" y="270.0"/>
|
||||||
|
<bpmndi:BPMNLabel id="BPMNLabel_I4jC0g">
|
||||||
|
<dc:Bounds height="20.0" width="100.0" x="905.0" y="323.0"/>
|
||||||
|
</bpmndi:BPMNLabel>
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNShape bpmnElement="task_NohgrQ" id="BPMNShape_VljsIw">
|
||||||
|
<dc:Bounds height="50.0" width="110.0" x="1060.0" y="270.0"/>
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_MPlPww" id="BPMNEdge_rt2H3g" sourceElement="BPMNShape_FKXJtw" targetElement="BPMNShape_gklxXQ">
|
||||||
|
<di:waypoint x="873.0" y="295.0"/>
|
||||||
|
<di:waypoint x="930.0" y="295.0"/>
|
||||||
|
</bpmndi:BPMNEdge>
|
||||||
|
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_aH0vCQ" id="BPMNEdge_YMnxQQ" sourceElement="BPMNShape_gklxXQ" targetElement="BPMNShape_VljsIw">
|
||||||
|
<di:waypoint x="980.0" y="295.0"/>
|
||||||
|
<di:waypoint x="1060.0" y="295.0"/>
|
||||||
|
</bpmndi:BPMNEdge>
|
||||||
|
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_ShuXXA" id="BPMNEdge_DY4O8Q" sourceElement="BPMNShape_gklxXQ" targetElement="BPMNShape_7JA0nw">
|
||||||
|
<di:waypoint x="956.0" y="319.0"/>
|
||||||
|
<di:waypoint x="956.0" y="364.0"/>
|
||||||
|
<di:waypoint x="746.0" y="364.0"/>
|
||||||
|
<di:waypoint x="746.0" y="320.0"/>
|
||||||
|
</bpmndi:BPMNEdge>
|
||||||
|
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_neSsFQ" id="BPMNEdge_b7C0wQ" sourceElement="BPMNShape_VljsIw" targetElement="BPMNShape_NEaJjA">
|
||||||
|
<di:waypoint x="1170.0" y="295.0"/>
|
||||||
|
<di:waypoint x="1227.0" y="295.0"/>
|
||||||
|
</bpmndi:BPMNEdge>
|
||||||
|
<bpmndi:BPMNShape bpmnElement="event_AMs05g" id="BPMNShape_rS0hsw">
|
||||||
|
<dc:Bounds height="36.0" width="36.0" x="477.0" y="517.0"/>
|
||||||
|
<bpmndi:BPMNLabel id="BPMNLabel_XcN2Og">
|
||||||
|
<dc:Bounds height="20.0" width="100.0" x="445.0" y="556.0"/>
|
||||||
|
</bpmndi:BPMNLabel>
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNShape bpmnElement="event_feLZFQ" id="BPMNShape_uklBfA">
|
||||||
|
<dc:Bounds height="36.0" width="36.0" x="347.0" y="367.0"/>
|
||||||
|
<bpmndi:BPMNLabel id="BPMNLabel_OengAQ">
|
||||||
|
<dc:Bounds height="20.0" width="100.0" x="315.0" y="406.0"/>
|
||||||
|
</bpmndi:BPMNLabel>
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_5pT4Tw" id="BPMNEdge_LZMXxg" sourceElement="BPMNShape_rS0hsw" targetElement="BPMNShape_mG4csA">
|
||||||
|
<di:waypoint x="513.0" y="535.0"/>
|
||||||
|
<di:waypoint x="557.0" y="535.0"/>
|
||||||
|
</bpmndi:BPMNEdge>
|
||||||
|
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_8BTEtw" id="BPMNEdge_Os7FVw" sourceElement="BPMNShape_6IZk7Q" targetElement="BPMNShape_uklBfA">
|
||||||
|
<di:waypoint x="365.0" y="320.0"/>
|
||||||
|
<di:waypoint x="365.0" y="367.0"/>
|
||||||
|
</bpmndi:BPMNEdge>
|
||||||
|
<bpmndi:BPMNShape bpmnElement="event_GTXFMw" id="BPMNShape_5I6iNA">
|
||||||
|
<dc:Bounds height="36.0" width="36.0" x="847.0" y="177.0"/>
|
||||||
|
<bpmndi:BPMNLabel id="BPMNLabel_80daBg">
|
||||||
|
<dc:Bounds height="20.0" width="100.0" x="815.0" y="216.0"/>
|
||||||
|
</bpmndi:BPMNLabel>
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_03b60w" id="BPMNEdge_ehQBOQ" sourceElement="BPMNShape_7JA0nw" targetElement="BPMNShape_5I6iNA">
|
||||||
|
<di:waypoint x="770.0" y="294.0"/>
|
||||||
|
<di:waypoint x="809.0" y="294.0"/>
|
||||||
|
<di:waypoint x="809.0" y="195.0"/>
|
||||||
|
<di:waypoint x="847.0" y="195.0"/>
|
||||||
|
</bpmndi:BPMNEdge>
|
||||||
|
<bpmndi:BPMNShape bpmnElement="event_u8OBFg" id="BPMNShape_Kp730Q">
|
||||||
|
<dc:Bounds height="36.0" width="36.0" x="1137.0" y="177.0"/>
|
||||||
|
<bpmndi:BPMNLabel id="BPMNLabel_iUQ02A">
|
||||||
|
<dc:Bounds height="20.0" width="100.0" x="1105.0" y="216.0"/>
|
||||||
|
</bpmndi:BPMNLabel>
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_zd6RWA" id="BPMNEdge_6qKC4A" sourceElement="BPMNShape_VljsIw" targetElement="BPMNShape_Kp730Q">
|
||||||
|
<di:waypoint x="1114.0" y="270.0"/>
|
||||||
|
<di:waypoint x="1114.0" y="195.0"/>
|
||||||
|
<di:waypoint x="1137.0" y="195.0"/>
|
||||||
|
</bpmndi:BPMNEdge>
|
||||||
|
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_rNZ3tw" id="BPMNEdge_zrajzA" sourceElement="BPMNShape_VljsIw" targetElement="BPMNShape_FKXJtw">
|
||||||
|
<di:waypoint x="1080.0" y="270.0"/>
|
||||||
|
<di:waypoint x="1080.0" y="237.0"/>
|
||||||
|
<di:waypoint x="855.0" y="237.0"/>
|
||||||
|
<di:waypoint x="855.0" y="277.0"/>
|
||||||
</bpmndi:BPMNEdge>
|
</bpmndi:BPMNEdge>
|
||||||
</bpmndi:BPMNPlane>
|
</bpmndi:BPMNPlane>
|
||||||
</bpmndi:BPMNDiagram>
|
</bpmndi:BPMNDiagram>
|
||||||
|
|
|
||||||
883
workflow/businesspartner-en-1.0.0.bpmn
Normal file
883
workflow/businesspartner-en-1.0.0.bpmn
Normal file
|
|
@ -0,0 +1,883 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<bpmn2:definitions xmlns:bpmn2="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:BPMN2="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:imixs="http://www.imixs.org/bpmn2" xmlns:open-bpmn="http://open-bpmn.org/XMLSchema" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" exporter="org.openbpmn" exporterVersion="1.0.0" targetNamespace="http://open-bpmn.org">
|
||||||
|
<bpmn2:collaboration id="collaboration_1" name="Default Collaboration">
|
||||||
|
<bpmn2:participant id="participant_d6UFsQ" name="Default Process" processRef="process_1"/>
|
||||||
|
<bpmn2:participant id="participant_oxb3dg" name="Business Partner" processRef="process_Hw9Ryg">
|
||||||
|
<bpmn2:documentation id="documentation_Jerngw"/>
|
||||||
|
<bpmn2:outgoing>association_83sZPw</bpmn2:outgoing>
|
||||||
|
</bpmn2:participant>
|
||||||
|
</bpmn2:collaboration>
|
||||||
|
<bpmn2:extensionElements>
|
||||||
|
<open-bpmn:auto-align>true</open-bpmn:auto-align>
|
||||||
|
<imixs:item name="txtworkflowmodelversion" type="xs:string">
|
||||||
|
<imixs:value><![CDATA[businesspartner-en-1.0]]></imixs:value>
|
||||||
|
</imixs:item>
|
||||||
|
<imixs:item name="txtplugins" type="xs:string">
|
||||||
|
<imixs:value><![CDATA[org.imixs.workflow.engine.plugins.RulePlugin]]></imixs:value>
|
||||||
|
<imixs:value><![CDATA[org.imixs.workflow.engine.plugins.SplitAndJoinPlugin]]></imixs:value>
|
||||||
|
<imixs:value><![CDATA[org.imixs.workflow.engine.plugins.OwnerPlugin]]></imixs:value>
|
||||||
|
<imixs:value><![CDATA[org.imixs.workflow.engine.plugins.ApproverPlugin]]></imixs:value>
|
||||||
|
<imixs:value><![CDATA[org.imixs.workflow.engine.plugins.HistoryPlugin]]></imixs:value>
|
||||||
|
<imixs:value><![CDATA[org.imixs.workflow.engine.plugins.ApplicationPlugin]]></imixs:value>
|
||||||
|
<imixs:value><![CDATA[org.imixs.workflow.engine.plugins.IntervalPlugin]]></imixs:value>
|
||||||
|
<imixs:value><![CDATA[org.imixs.workflow.engine.plugins.MailPlugin]]></imixs:value>
|
||||||
|
<imixs:value><![CDATA[org.imixs.workflow.engine.plugins.ResultPlugin]]></imixs:value>
|
||||||
|
<imixs:value><![CDATA[org.imixs.marty.team.TeamPlugin]]></imixs:value>
|
||||||
|
<imixs:value><![CDATA[org.imixs.marty.plugins.SequenceNumberPlugin]]></imixs:value>
|
||||||
|
</imixs:item>
|
||||||
|
<imixs:item name="txtfieldmapping" type="xs:string">
|
||||||
|
<imixs:value><![CDATA[Ersteller|$creator]]></imixs:value>
|
||||||
|
<imixs:value><![CDATA[Aktueller Bearbeiter|$editor]]></imixs:value>
|
||||||
|
<imixs:value><![CDATA[Eigentümer|$owner]]></imixs:value>
|
||||||
|
<imixs:value><![CDATA[Prozess-Verantwortliche|process.manager]]></imixs:value>
|
||||||
|
<imixs:value><![CDATA[Prozess-Team|process.team]]></imixs:value>
|
||||||
|
<imixs:value><![CDATA[Prozess-Assistenz|process.assist]]></imixs:value>
|
||||||
|
</imixs:item>
|
||||||
|
</bpmn2:extensionElements>
|
||||||
|
<bpmn2:process definitionalCollaborationRef="collaboration_1" id="process_1" name="Default Process" processType="Public">
|
||||||
|
<bpmn2:documentation id="documentation_bowXyw"/>
|
||||||
|
</bpmn2:process>
|
||||||
|
<bpmn2:process definitionalCollaborationRef="collaboration_1" id="process_Hw9Ryg" isExecutable="true" name="Business Partner" processType="Private">
|
||||||
|
<bpmn2:laneSet id="laneset_nKajSg" name="Lane Set">
|
||||||
|
<bpmn2:lane id="lane_Zxa2TA" name="Buchhaltung">
|
||||||
|
<bpmn2:documentation id="documentation_jEAKkQ"/>
|
||||||
|
<bpmn2:flowNodeRef>task_ToMZaQ</bpmn2:flowNodeRef>
|
||||||
|
<bpmn2:flowNodeRef>event_WmkBvw</bpmn2:flowNodeRef>
|
||||||
|
<bpmn2:flowNodeRef>event_1clvlg</bpmn2:flowNodeRef>
|
||||||
|
<bpmn2:flowNodeRef>task_Q80A1Q</bpmn2:flowNodeRef>
|
||||||
|
<bpmn2:flowNodeRef>task_B8Pi7A</bpmn2:flowNodeRef>
|
||||||
|
<bpmn2:flowNodeRef>event_aSdkwg</bpmn2:flowNodeRef>
|
||||||
|
<bpmn2:flowNodeRef>event_Tr0aug</bpmn2:flowNodeRef>
|
||||||
|
<bpmn2:flowNodeRef>dataObject_UQIXAQ</bpmn2:flowNodeRef>
|
||||||
|
<bpmn2:flowNodeRef>event_vwH0cA</bpmn2:flowNodeRef>
|
||||||
|
<bpmn2:flowNodeRef>textAnnotation_LyGTCw</bpmn2:flowNodeRef>
|
||||||
|
<bpmn2:flowNodeRef>event_TuyuwQ</bpmn2:flowNodeRef>
|
||||||
|
<bpmn2:flowNodeRef>event_h0Kk5g</bpmn2:flowNodeRef>
|
||||||
|
<bpmn2:flowNodeRef>task_delO7Q</bpmn2:flowNodeRef>
|
||||||
|
<bpmn2:flowNodeRef>event_1OVorA</bpmn2:flowNodeRef>
|
||||||
|
<bpmn2:flowNodeRef>event_baWU4w</bpmn2:flowNodeRef>
|
||||||
|
<bpmn2:flowNodeRef>event_ofjVfg</bpmn2:flowNodeRef>
|
||||||
|
<bpmn2:flowNodeRef>event_i7yQVw</bpmn2:flowNodeRef>
|
||||||
|
<bpmn2:flowNodeRef>gateway_uK0c6g</bpmn2:flowNodeRef>
|
||||||
|
<bpmn2:flowNodeRef>event_6250fg</bpmn2:flowNodeRef>
|
||||||
|
<bpmn2:flowNodeRef>event_VM0fEQ</bpmn2:flowNodeRef>
|
||||||
|
<bpmn2:flowNodeRef>gateway_s0J53g</bpmn2:flowNodeRef>
|
||||||
|
<bpmn2:flowNodeRef>task_NohgrQ</bpmn2:flowNodeRef>
|
||||||
|
<bpmn2:flowNodeRef>event_AMs05g</bpmn2:flowNodeRef>
|
||||||
|
<bpmn2:flowNodeRef>event_feLZFQ</bpmn2:flowNodeRef>
|
||||||
|
<bpmn2:flowNodeRef>event_GTXFMw</bpmn2:flowNodeRef>
|
||||||
|
<bpmn2:flowNodeRef>event_u8OBFg</bpmn2:flowNodeRef>
|
||||||
|
</bpmn2:lane>
|
||||||
|
</bpmn2:laneSet>
|
||||||
|
<bpmn2:task id="task_ToMZaQ" imixs:processid="1000" name="Neuanlage">
|
||||||
|
<bpmn2:extensionElements>
|
||||||
|
<imixs:item name="keyupdateacl" type="xs:string">
|
||||||
|
<imixs:value><![CDATA[true]]></imixs:value>
|
||||||
|
</imixs:item>
|
||||||
|
<imixs:item name="namownershipnames" type="xs:string">
|
||||||
|
<imixs:value/>
|
||||||
|
</imixs:item>
|
||||||
|
<imixs:item name="namaddreadaccess" type="xs:string">
|
||||||
|
<imixs:value/>
|
||||||
|
</imixs:item>
|
||||||
|
<imixs:item name="namaddwriteaccess" type="xs:string">
|
||||||
|
<imixs:value/>
|
||||||
|
</imixs:item>
|
||||||
|
</bpmn2:extensionElements>
|
||||||
|
<bpmn2:documentation id="documentation_a83GTA"/>
|
||||||
|
<bpmn2:incoming>sequenceFlow_25otUg</bpmn2:incoming>
|
||||||
|
<bpmn2:outgoing>sequenceFlow_S9LVXg</bpmn2:outgoing>
|
||||||
|
</bpmn2:task>
|
||||||
|
<bpmn2:startEvent id="event_WmkBvw" name="Start">
|
||||||
|
<bpmn2:documentation id="documentation_QXQddg"/>
|
||||||
|
<bpmn2:outgoing>sequenceFlow_25otUg</bpmn2:outgoing>
|
||||||
|
</bpmn2:startEvent>
|
||||||
|
<bpmn2:endEvent id="event_1clvlg" name="Ende">
|
||||||
|
<bpmn2:documentation id="documentation_obvnAg"/>
|
||||||
|
<bpmn2:incoming>sequenceFlow_rwdWxw</bpmn2:incoming>
|
||||||
|
</bpmn2:endEvent>
|
||||||
|
<bpmn2:sequenceFlow id="sequenceFlow_25otUg" sourceRef="event_WmkBvw" targetRef="task_ToMZaQ">
|
||||||
|
<bpmn2:documentation id="documentation_Tzm1bw"/>
|
||||||
|
</bpmn2:sequenceFlow>
|
||||||
|
<bpmn2:task id="task_Q80A1Q" imixs:processid="1100" name="Activ">
|
||||||
|
<bpmn2:extensionElements>
|
||||||
|
<imixs:item name="txtimageurl" type="xs:string">
|
||||||
|
<imixs:value><![CDATA[typcn-user|typcn-tick,imixs-success]]></imixs:value>
|
||||||
|
</imixs:item>
|
||||||
|
<imixs:item name="txtworkflowsummary" type="xs:string">
|
||||||
|
<imixs:value><![CDATA[<itemvalue>partner.name</itemvalue> (<itemvalue>partner.id</itemvalue>)]]></imixs:value>
|
||||||
|
</imixs:item>
|
||||||
|
<imixs:item name="txtworkflowabstract" type="xs:string">
|
||||||
|
<imixs:value><![CDATA[<strong>Adresse:</strong><br />
|
||||||
|
<itemvalue>partner.name</itemvalue><br />
|
||||||
|
<itemvalue>partner.address</itemvalue><br />
|
||||||
|
<itemvalue>partner.zip</itemvalue> <itemvalue>partner.city</itemvalue><br />
|
||||||
|
<br />
|
||||||
|
|
||||||
|
<strong>BPID:</strong> <itemvalue>partner.id</itemvalue><br />
|
||||||
|
<strong>Kreditoren-Nr.:</strong> <itemvalue>cdtr.number</itemvalue><br />
|
||||||
|
<strong>Debitoren-Nr.:</strong> <itemvalue>dbtr.number</itemvalue><br />
|
||||||
|
]]></imixs:value>
|
||||||
|
</imixs:item>
|
||||||
|
<imixs:item name="keyupdateacl" type="xs:string">
|
||||||
|
<imixs:value><![CDATA[true]]></imixs:value>
|
||||||
|
</imixs:item>
|
||||||
|
<imixs:item name="namownershipnames" type="xs:string">
|
||||||
|
<imixs:value/>
|
||||||
|
</imixs:item>
|
||||||
|
<imixs:item name="namaddreadaccess" type="xs:string">
|
||||||
|
<imixs:value/>
|
||||||
|
</imixs:item>
|
||||||
|
<imixs:item name="namaddwriteaccess" type="xs:string">
|
||||||
|
<imixs:value/>
|
||||||
|
</imixs:item>
|
||||||
|
<imixs:item name="keyaddwritefields" type="xs:string">
|
||||||
|
<imixs:value><![CDATA[process.team]]></imixs:value>
|
||||||
|
</imixs:item>
|
||||||
|
</bpmn2:extensionElements>
|
||||||
|
<bpmn2:documentation id="documentation_M7b42w"/>
|
||||||
|
<bpmn2:incoming>sequenceFlow_avahXg</bpmn2:incoming>
|
||||||
|
<bpmn2:incoming>sequenceFlow_9atLFA</bpmn2:incoming>
|
||||||
|
<bpmn2:outgoing>sequenceFlow_T5L9aQ</bpmn2:outgoing>
|
||||||
|
<bpmn2:incoming>sequenceFlow_b4BcVA</bpmn2:incoming>
|
||||||
|
<bpmn2:incoming>sequenceFlow_8O1EtQ</bpmn2:incoming>
|
||||||
|
<bpmn2:incoming>sequenceFlow_ShuXXA</bpmn2:incoming>
|
||||||
|
<bpmn2:outgoing>sequenceFlow_03b60w</bpmn2:outgoing>
|
||||||
|
</bpmn2:task>
|
||||||
|
<bpmn2:task id="task_B8Pi7A" imixs:processid="1800" name="Locked">
|
||||||
|
<bpmn2:extensionElements>
|
||||||
|
<imixs:item name="txtworkflowsummary" type="xs:string">
|
||||||
|
<imixs:value><![CDATA[<itemvalue>partner.name</itemvalue> (<itemvalue>partner.id</itemvalue>)]]></imixs:value>
|
||||||
|
</imixs:item>
|
||||||
|
<imixs:item name="txtimageurl" type="xs:string">
|
||||||
|
<imixs:value><![CDATA[typcn-user|typcn-times,imixs-error]]></imixs:value>
|
||||||
|
</imixs:item>
|
||||||
|
<imixs:item name="txtworkflowabstract" type="xs:string">
|
||||||
|
<imixs:value><![CDATA[<strong>Adresse:</strong><br />
|
||||||
|
<itemvalue>partner.name</itemvalue><br />
|
||||||
|
<itemvalue>partner.address</itemvalue><br />
|
||||||
|
<itemvalue>partner.zip</itemvalue> <itemvalue>partner.city</itemvalue><br />
|
||||||
|
<br />
|
||||||
|
|
||||||
|
<strong>BPID:</strong> <itemvalue>partner.id</itemvalue><br />
|
||||||
|
<strong>Kreditoren-Nr.:</strong> <itemvalue>cdtr.number</itemvalue><br />
|
||||||
|
<strong>Debitoren-Nr.:</strong> <itemvalue>dbtr.number</itemvalue><br />
|
||||||
|
]]></imixs:value>
|
||||||
|
</imixs:item>
|
||||||
|
<imixs:item name="keyupdateacl" type="xs:string">
|
||||||
|
<imixs:value><![CDATA[true]]></imixs:value>
|
||||||
|
</imixs:item>
|
||||||
|
<imixs:item name="namownershipnames" type="xs:string">
|
||||||
|
<imixs:value/>
|
||||||
|
</imixs:item>
|
||||||
|
<imixs:item name="namaddreadaccess" type="xs:string">
|
||||||
|
<imixs:value/>
|
||||||
|
</imixs:item>
|
||||||
|
<imixs:item name="namaddwriteaccess" type="xs:string">
|
||||||
|
<imixs:value/>
|
||||||
|
</imixs:item>
|
||||||
|
<imixs:item name="keyaddwritefields" type="xs:string">
|
||||||
|
<imixs:value><![CDATA[process.team]]></imixs:value>
|
||||||
|
</imixs:item>
|
||||||
|
<imixs:item name="txttype" type="xs:string">
|
||||||
|
<imixs:value><![CDATA[workitemarchive]]></imixs:value>
|
||||||
|
</imixs:item>
|
||||||
|
</bpmn2:extensionElements>
|
||||||
|
<bpmn2:documentation id="documentation_0B9wKQ"/>
|
||||||
|
<bpmn2:incoming>sequenceFlow_1mXO8A</bpmn2:incoming>
|
||||||
|
<bpmn2:outgoing>sequenceFlow_rwdWxw</bpmn2:outgoing>
|
||||||
|
<bpmn2:incoming>sequenceFlow_gC0I9w</bpmn2:incoming>
|
||||||
|
<bpmn2:incoming>sequenceFlow_kS2fMA</bpmn2:incoming>
|
||||||
|
</bpmn2:task>
|
||||||
|
<bpmn2:intermediateCatchEvent id="event_aSdkwg" imixs:activityid="100" name="[import]">
|
||||||
|
<bpmn2:extensionElements>
|
||||||
|
<imixs:item name="keypublicresult" type="xs:string">
|
||||||
|
<imixs:value><![CDATA[0]]></imixs:value>
|
||||||
|
</imixs:item>
|
||||||
|
<imixs:item name="rtfresultlog" type="xs:string">
|
||||||
|
<imixs:value><![CDATA[Business Partner aus Cargosoft importiert]]></imixs:value>
|
||||||
|
</imixs:item>
|
||||||
|
<imixs:item name="txtactivityresult" type="xs:string">
|
||||||
|
<imixs:value><![CDATA[<item name="process">Partnermanagement</item>]]></imixs:value>
|
||||||
|
</imixs:item>
|
||||||
|
</bpmn2:extensionElements>
|
||||||
|
<bpmn2:documentation id="documentation_5409Kg"/>
|
||||||
|
<bpmn2:incoming>sequenceFlow_jAU3VA</bpmn2:incoming>
|
||||||
|
<bpmn2:outgoing>sequenceFlow_8O1EtQ</bpmn2:outgoing>
|
||||||
|
</bpmn2:intermediateCatchEvent>
|
||||||
|
<bpmn2:sequenceFlow id="sequenceFlow_S9LVXg" sourceRef="task_ToMZaQ" targetRef="gateway_uK0c6g">
|
||||||
|
<bpmn2:documentation id="documentation_Idvd0Q"/>
|
||||||
|
</bpmn2:sequenceFlow>
|
||||||
|
<bpmn2:intermediateCatchEvent id="event_Tr0aug" imixs:activityid="30" name="Lock">
|
||||||
|
<bpmn2:extensionElements>
|
||||||
|
<imixs:item name="keypublicresult" type="xs:string">
|
||||||
|
<imixs:value><![CDATA[1]]></imixs:value>
|
||||||
|
</imixs:item>
|
||||||
|
<imixs:item name="txtactivityresult" type="xs:string">
|
||||||
|
<imixs:value><![CDATA[<item name="action">home</item>]]></imixs:value>
|
||||||
|
</imixs:item>
|
||||||
|
</bpmn2:extensionElements>
|
||||||
|
<bpmn2:documentation id="documentation_2XhDKQ"/>
|
||||||
|
<bpmn2:outgoing>sequenceFlow_1mXO8A</bpmn2:outgoing>
|
||||||
|
<bpmn2:incoming>sequenceFlow_b0Bj3Q</bpmn2:incoming>
|
||||||
|
<bpmn2:incoming>sequenceFlow_neSsFQ</bpmn2:incoming>
|
||||||
|
</bpmn2:intermediateCatchEvent>
|
||||||
|
<bpmn2:sequenceFlow id="sequenceFlow_1mXO8A" sourceRef="event_Tr0aug" targetRef="task_B8Pi7A">
|
||||||
|
<bpmn2:documentation id="documentation_JL48mA"/>
|
||||||
|
</bpmn2:sequenceFlow>
|
||||||
|
<bpmn2:sequenceFlow id="sequenceFlow_rwdWxw" sourceRef="task_B8Pi7A" targetRef="event_1clvlg">
|
||||||
|
<bpmn2:documentation id="documentation_8xdVSA"/>
|
||||||
|
</bpmn2:sequenceFlow>
|
||||||
|
<bpmn2:dataObject id="dataObject_UQIXAQ" name="Form">
|
||||||
|
<bpmn2:documentation id="documentation_e1in1w"><![CDATA[<imixs-form>
|
||||||
|
|
||||||
|
<imixs-subform label="Überblick">
|
||||||
|
<imixs-form-section columns="4" label="Ausgangsrechnungen">
|
||||||
|
<item name="analytic.invoices.count.all" type="custom" path="alexander/analyze_plain" label="Alle Rechnungen:" />
|
||||||
|
<item name="analytic.invoices.count.open" type="custom" path="alexander/analyze_plain" label="Offene Rechnungen:" />
|
||||||
|
<item name="analytic.invoices.count.due" type="custom" path="alexander/analyze_plain" label="Fällige Rechnungen:" />
|
||||||
|
<item name="analytic.invoices.count.dunning" type="custom" path="alexander/analyze_plain" label="Rechnungen in Mahnung:" />
|
||||||
|
</imixs-form-section>
|
||||||
|
|
||||||
|
<imixs-form-section label="" path="alexander/section_bp_invoices_out" readonly="true" />
|
||||||
|
<imixs-form-section columns="2" label="Zahlungsmoral">
|
||||||
|
<item name="analytic.payment.avg.due" type="custom" path="alexander/analyze_plain" label="Average term of credit:" />
|
||||||
|
<item name="analytic.payment.avg.days" type="custom" path="alexander/analyze_plain" label="Average payment duration:" />
|
||||||
|
</imixs-form-section>
|
||||||
|
<imixs-form-section columns="1" label="">
|
||||||
|
<item name="analytic.invoices.trend" type="custom" path="alexander/analyze_chart"
|
||||||
|
label="Trend der letzten 6 Monate:" />
|
||||||
|
</imixs-form-section>
|
||||||
|
<imixs-form-section label="Eingangsrechnungen" path="alexander/section_bp_invoices_in" readonly="true" />
|
||||||
|
|
||||||
|
|
||||||
|
</imixs-subform>
|
||||||
|
|
||||||
|
<imixs-subform label="Stammdaten">
|
||||||
|
<imixs-form-section columns="1" label="">
|
||||||
|
<item name="partner.name" type="text" span="6" readonly="true" label="Name:"/>
|
||||||
|
<item name="partner.id" type="text" span="6" readonly="true" label="Partner ID:"/>
|
||||||
|
</imixs-form-section>
|
||||||
|
|
||||||
|
<imixs-form-section columns="1" label="" readonly="true">
|
||||||
|
<item name="partner.address" type="text" span="6" required="false" label="Adresse:" />
|
||||||
|
<item name="partner.address.sub1" type="text" span="6" required="false" label="Zusatz" />
|
||||||
|
<item name="partner.zip" type="text" span="1" required="false" label="PLZ:" />
|
||||||
|
<item name="partner.city" type="text" span="5" required="false" label="Stadt:" />
|
||||||
|
<item name="partner.phone" type="text" readonly="false" span="6" label="Tel.:" />
|
||||||
|
|
||||||
|
<item name="partner.country" type="custom" path="country" span="6" readonly="false" label="Land:" />
|
||||||
|
<item name="partner.language" type="text" readonly="false" span="6" label="Sprache:" />
|
||||||
|
</imixs-form-section>
|
||||||
|
|
||||||
|
<imixs-form-section columns="1" label="Rechnungseingang ">
|
||||||
|
<item name="cdtr.number" type="text" span="2" readonly="true" label="Kreditoren Nr.:" />
|
||||||
|
<item name="cdtr.creditperiod" type="text" span="4" readonly="false" label="Zahlungsziel (Tage):" />
|
||||||
|
<item name="cdtr.email" type="textlist" span="6" readonly="false" label="E-Mail:" />
|
||||||
|
</imixs-form-section>
|
||||||
|
<imixs-form-section columns="1" label="Rechnungsausgang ">
|
||||||
|
<item name="dbtr.number" type="text" span="2" readonly="true" label="Debitoren Nr.:" />
|
||||||
|
<item name="dbtr.creditperiod" type="text" span="4" readonly="false" label="Zahlungsziel (Tage):" />
|
||||||
|
<item name="dbtr.email" type="textlist" span="6" readonly="false" label="E-Mail SOA/Mahnungen:" />
|
||||||
|
</imixs-form-section>
|
||||||
|
<imixs-form-section label="Banken" path="alexander/section_businesspartner_banklist" />
|
||||||
|
</imixs-subform>
|
||||||
|
|
||||||
|
</imixs-form>]]></bpmn2:documentation>
|
||||||
|
</bpmn2:dataObject>
|
||||||
|
<bpmn2:intermediateCatchEvent id="event_vwH0cA" imixs:activityid="10" name="Save">
|
||||||
|
<bpmn2:documentation id="documentation_WOUVTQ"/>
|
||||||
|
<bpmn2:outgoing>sequenceFlow_avahXg</bpmn2:outgoing>
|
||||||
|
</bpmn2:intermediateCatchEvent>
|
||||||
|
<bpmn2:sequenceFlow id="sequenceFlow_avahXg" sourceRef="event_vwH0cA" targetRef="task_Q80A1Q">
|
||||||
|
<bpmn2:documentation id="documentation_lhR6Lw"/>
|
||||||
|
</bpmn2:sequenceFlow>
|
||||||
|
<bpmn2:association id="association_uvV8uA" sourceRef="participant_oxb3dg" targetRef="task_Q80A1Q"/>
|
||||||
|
<bpmn2:association id="association_mpLQEQ" sourceRef="dataObject_UQIXAQ" targetRef="task_Q80A1Q">
|
||||||
|
<bpmn2:documentation id="documentation_oVnaJw"/>
|
||||||
|
</bpmn2:association>
|
||||||
|
<bpmn2:textAnnotation id="textAnnotation_LyGTCw" textFormat="">
|
||||||
|
<bpmn2:text id="text_M05BXg"><![CDATA[Neuanalge erfolgt über den Cargosoft CSV Import im BusinessPartnerImportService]]></bpmn2:text>
|
||||||
|
<bpmn2:documentation id="documentation_wdTBKA"/>
|
||||||
|
</bpmn2:textAnnotation>
|
||||||
|
<bpmn2:association id="association_83sZPw" sourceRef="participant_oxb3dg" targetRef="textAnnotation_LyGTCw">
|
||||||
|
<bpmn2:documentation id="documentation_FKcIcg"/>
|
||||||
|
</bpmn2:association>
|
||||||
|
<bpmn2:intermediateCatchEvent id="event_TuyuwQ" imixs:activityid="200" name="[update]">
|
||||||
|
<bpmn2:extensionElements>
|
||||||
|
<imixs:item name="keypublicresult" type="xs:string">
|
||||||
|
<imixs:value><![CDATA[0]]></imixs:value>
|
||||||
|
</imixs:item>
|
||||||
|
<imixs:item name="txtactivityresult" type="xs:string">
|
||||||
|
<imixs:value><![CDATA[Business Partner aktualisiert aus Cargosoft ]]></imixs:value>
|
||||||
|
</imixs:item>
|
||||||
|
<imixs:item name="rtfresultlog" type="xs:string">
|
||||||
|
<imixs:value><![CDATA[Business Partner aus Cargosoft aktualisiert]]></imixs:value>
|
||||||
|
</imixs:item>
|
||||||
|
</bpmn2:extensionElements>
|
||||||
|
<bpmn2:documentation id="documentation_wy3OSA"/>
|
||||||
|
<bpmn2:outgoing>sequenceFlow_9atLFA</bpmn2:outgoing>
|
||||||
|
</bpmn2:intermediateCatchEvent>
|
||||||
|
<bpmn2:sequenceFlow id="sequenceFlow_9atLFA" sourceRef="event_TuyuwQ" targetRef="task_Q80A1Q">
|
||||||
|
<bpmn2:documentation id="documentation_LHM8vg"/>
|
||||||
|
</bpmn2:sequenceFlow>
|
||||||
|
<bpmn2:intermediateCatchEvent id="event_h0Kk5g" imixs:activityid="201" name="[update]">
|
||||||
|
<bpmn2:extensionElements>
|
||||||
|
<imixs:item name="keypublicresult" type="xs:string">
|
||||||
|
<imixs:value><![CDATA[0]]></imixs:value>
|
||||||
|
</imixs:item>
|
||||||
|
<imixs:item name="txtactivityresult" type="xs:string">
|
||||||
|
<imixs:value><![CDATA[Business Partner aktualisiert aus Cargosoft ]]></imixs:value>
|
||||||
|
</imixs:item>
|
||||||
|
</bpmn2:extensionElements>
|
||||||
|
<bpmn2:documentation id="documentation_AnqGdA"/>
|
||||||
|
<bpmn2:outgoing>sequenceFlow_gC0I9w</bpmn2:outgoing>
|
||||||
|
</bpmn2:intermediateCatchEvent>
|
||||||
|
<bpmn2:sequenceFlow id="sequenceFlow_gC0I9w" sourceRef="event_h0Kk5g" targetRef="task_B8Pi7A">
|
||||||
|
<bpmn2:documentation id="documentation_gfdNnQ"/>
|
||||||
|
</bpmn2:sequenceFlow>
|
||||||
|
<bpmn2:task id="task_delO7Q" imixs:processid="1300" name="Fraud Detection">
|
||||||
|
<bpmn2:extensionElements>
|
||||||
|
<imixs:item name="txtimageurl" type="xs:string">
|
||||||
|
<imixs:value><![CDATA[typcn-user|typcn-tick,imixs-success]]></imixs:value>
|
||||||
|
</imixs:item>
|
||||||
|
<imixs:item name="txtworkflowsummary" type="xs:string">
|
||||||
|
<imixs:value><![CDATA[<itemvalue>partner.name</itemvalue> (<itemvalue>partner.id</itemvalue>)]]></imixs:value>
|
||||||
|
</imixs:item>
|
||||||
|
<imixs:item name="txtworkflowabstract" type="xs:string">
|
||||||
|
<imixs:value><![CDATA[<strong>Adresse:</strong><br />
|
||||||
|
<itemvalue>partner.name</itemvalue><br />
|
||||||
|
<itemvalue>partner.address</itemvalue><br />
|
||||||
|
<itemvalue>partner.zip</itemvalue> <itemvalue>partner.city</itemvalue><br />
|
||||||
|
<br />
|
||||||
|
|
||||||
|
<strong>BPID:</strong> <itemvalue>partner.id</itemvalue><br />
|
||||||
|
<strong>Kreditoren-Nr.:</strong> <itemvalue>cdtr.number</itemvalue><br />
|
||||||
|
<strong>Debitoren-Nr.:</strong> <itemvalue>dbtr.number</itemvalue><br />
|
||||||
|
]]></imixs:value>
|
||||||
|
</imixs:item>
|
||||||
|
<imixs:item name="keyupdateacl" type="xs:string">
|
||||||
|
<imixs:value><![CDATA[true]]></imixs:value>
|
||||||
|
</imixs:item>
|
||||||
|
<imixs:item name="keyownershipfields" type="xs:string">
|
||||||
|
<imixs:value><![CDATA[process.team]]></imixs:value>
|
||||||
|
</imixs:item>
|
||||||
|
<imixs:item name="namownershipnames" type="xs:string">
|
||||||
|
<imixs:value/>
|
||||||
|
</imixs:item>
|
||||||
|
<imixs:item name="namaddreadaccess" type="xs:string">
|
||||||
|
<imixs:value/>
|
||||||
|
</imixs:item>
|
||||||
|
<imixs:item name="namaddwriteaccess" type="xs:string">
|
||||||
|
<imixs:value/>
|
||||||
|
</imixs:item>
|
||||||
|
<imixs:item name="keyaddwritefields" type="xs:string">
|
||||||
|
<imixs:value><![CDATA[process.team]]></imixs:value>
|
||||||
|
</imixs:item>
|
||||||
|
</bpmn2:extensionElements>
|
||||||
|
<bpmn2:documentation id="documentation_1TuLXg"/>
|
||||||
|
<bpmn2:outgoing>sequenceFlow_NNbMhg</bpmn2:outgoing>
|
||||||
|
<bpmn2:incoming>sequenceFlow_avahXg</bpmn2:incoming>
|
||||||
|
<bpmn2:outgoing>sequenceFlow_pvIENQ</bpmn2:outgoing>
|
||||||
|
<bpmn2:incoming>sequenceFlow_BWOtzA</bpmn2:incoming>
|
||||||
|
<bpmn2:incoming>sequenceFlow_ofWWuw</bpmn2:incoming>
|
||||||
|
<bpmn2:outgoing>sequenceFlow_b0Bj3Q</bpmn2:outgoing>
|
||||||
|
<bpmn2:incoming>sequenceFlow_BHsRkQ</bpmn2:incoming>
|
||||||
|
</bpmn2:task>
|
||||||
|
<bpmn2:intermediateCatchEvent id="event_1OVorA" imixs:activityid="300" name="[iban/bic error]">
|
||||||
|
<bpmn2:extensionElements>
|
||||||
|
<imixs:item name="keypublicresult" type="xs:string">
|
||||||
|
<imixs:value><![CDATA[0]]></imixs:value>
|
||||||
|
</imixs:item>
|
||||||
|
<imixs:item name="rtfresultlog" type="xs:string">
|
||||||
|
<imixs:value><![CDATA[IBAN/BIC fraud detection]]></imixs:value>
|
||||||
|
</imixs:item>
|
||||||
|
<imixs:item name="txtactivityresult" type="xs:string">
|
||||||
|
<imixs:value><![CDATA[<item name="process">Partnermanagement</item>]]></imixs:value>
|
||||||
|
</imixs:item>
|
||||||
|
</bpmn2:extensionElements>
|
||||||
|
<bpmn2:documentation id="documentation_J8iRLQ"/>
|
||||||
|
<bpmn2:outgoing>sequenceFlow_BHsRkQ</bpmn2:outgoing>
|
||||||
|
<bpmn2:incoming>sequenceFlow_5pT4Tw</bpmn2:incoming>
|
||||||
|
</bpmn2:intermediateCatchEvent>
|
||||||
|
<bpmn2:intermediateCatchEvent id="event_baWU4w" imixs:activityid="20" name="Update">
|
||||||
|
<bpmn2:extensionElements>
|
||||||
|
<imixs:item name="rtfresultlog" type="xs:string">
|
||||||
|
<imixs:value><![CDATA[Data updated]]></imixs:value>
|
||||||
|
</imixs:item>
|
||||||
|
<imixs:item name="keypublicresult" type="xs:string">
|
||||||
|
<imixs:value><![CDATA[1]]></imixs:value>
|
||||||
|
</imixs:item>
|
||||||
|
<imixs:item name="txtactivityresult" type="xs:string">
|
||||||
|
<imixs:value><![CDATA[<item name="action">home</item>]]></imixs:value>
|
||||||
|
</imixs:item>
|
||||||
|
</bpmn2:extensionElements>
|
||||||
|
<bpmn2:documentation id="documentation_q730KA"/>
|
||||||
|
<bpmn2:incoming>sequenceFlow_pvIENQ</bpmn2:incoming>
|
||||||
|
<bpmn2:outgoing>sequenceFlow_b4BcVA</bpmn2:outgoing>
|
||||||
|
</bpmn2:intermediateCatchEvent>
|
||||||
|
<bpmn2:sequenceFlow id="sequenceFlow_pvIENQ" sourceRef="task_delO7Q" targetRef="event_baWU4w">
|
||||||
|
<bpmn2:documentation id="documentation_BYJ08A"/>
|
||||||
|
</bpmn2:sequenceFlow>
|
||||||
|
<bpmn2:sequenceFlow id="sequenceFlow_b4BcVA" sourceRef="event_baWU4w" targetRef="task_Q80A1Q">
|
||||||
|
<bpmn2:documentation id="documentation_5wWdHA"/>
|
||||||
|
</bpmn2:sequenceFlow>
|
||||||
|
<bpmn2:intermediateCatchEvent id="event_ofjVfg" imixs:activityid="200" name="[update]">
|
||||||
|
<bpmn2:extensionElements>
|
||||||
|
<imixs:item name="keypublicresult" type="xs:string">
|
||||||
|
<imixs:value><![CDATA[0]]></imixs:value>
|
||||||
|
</imixs:item>
|
||||||
|
<imixs:item name="rtfresultlog" type="xs:string">
|
||||||
|
<imixs:value><![CDATA[Business Partner aus Cargosoft aktualisiert]]></imixs:value>
|
||||||
|
</imixs:item>
|
||||||
|
</bpmn2:extensionElements>
|
||||||
|
<bpmn2:documentation id="documentation_A42bcQ"/>
|
||||||
|
<bpmn2:outgoing>sequenceFlow_BWOtzA</bpmn2:outgoing>
|
||||||
|
</bpmn2:intermediateCatchEvent>
|
||||||
|
<bpmn2:sequenceFlow id="sequenceFlow_BWOtzA" sourceRef="event_ofjVfg" targetRef="task_delO7Q">
|
||||||
|
<bpmn2:documentation id="documentation_QW3slw"/>
|
||||||
|
</bpmn2:sequenceFlow>
|
||||||
|
<bpmn2:intermediateCatchEvent id="event_i7yQVw" imixs:activityid="10" name="Save">
|
||||||
|
<bpmn2:extensionElements>
|
||||||
|
<imixs:item name="txtactivityresult" type="xs:string">
|
||||||
|
<imixs:value><![CDATA[<item name="process">Partnermanagement</item>]]></imixs:value>
|
||||||
|
</imixs:item>
|
||||||
|
<imixs:item name="keypublicresult" type="xs:string">
|
||||||
|
<imixs:value><![CDATA[1]]></imixs:value>
|
||||||
|
</imixs:item>
|
||||||
|
</bpmn2:extensionElements>
|
||||||
|
<bpmn2:documentation id="documentation_Il4Shw"/>
|
||||||
|
<bpmn2:outgoing>sequenceFlow_ofWWuw</bpmn2:outgoing>
|
||||||
|
</bpmn2:intermediateCatchEvent>
|
||||||
|
<bpmn2:sequenceFlow id="sequenceFlow_ofWWuw" sourceRef="event_i7yQVw" targetRef="task_delO7Q">
|
||||||
|
<bpmn2:documentation id="documentation_fXWIBw"/>
|
||||||
|
</bpmn2:sequenceFlow>
|
||||||
|
<bpmn2:sequenceFlow id="sequenceFlow_b0Bj3Q" sourceRef="task_delO7Q" targetRef="event_Tr0aug">
|
||||||
|
<bpmn2:documentation id="documentation_pVJeTQ"/>
|
||||||
|
</bpmn2:sequenceFlow>
|
||||||
|
<bpmn2:sequenceFlow id="sequenceFlow_T5L9aQ" sourceRef="task_Q80A1Q" targetRef="event_VM0fEQ">
|
||||||
|
<bpmn2:documentation id="documentation_0GJKgQ"/>
|
||||||
|
</bpmn2:sequenceFlow>
|
||||||
|
<bpmn2:exclusiveGateway gatewayDirection="Diverging" id="gateway_uK0c6g" name="">
|
||||||
|
<bpmn2:documentation id="documentation_V9jDYA"/>
|
||||||
|
<bpmn2:incoming>sequenceFlow_S9LVXg</bpmn2:incoming>
|
||||||
|
<bpmn2:outgoing>sequenceFlow_jAU3VA</bpmn2:outgoing>
|
||||||
|
<bpmn2:outgoing>sequenceFlow_8BTEtw</bpmn2:outgoing>
|
||||||
|
</bpmn2:exclusiveGateway>
|
||||||
|
<bpmn2:sequenceFlow id="sequenceFlow_jAU3VA" sourceRef="gateway_uK0c6g" targetRef="event_aSdkwg">
|
||||||
|
<bpmn2:documentation id="documentation_ZNk0Bw"/>
|
||||||
|
</bpmn2:sequenceFlow>
|
||||||
|
<bpmn2:sequenceFlow id="sequenceFlow_BHsRkQ" sourceRef="event_1OVorA" targetRef="task_delO7Q">
|
||||||
|
<bpmn2:documentation id="documentation_SvoFWw"/>
|
||||||
|
</bpmn2:sequenceFlow>
|
||||||
|
<bpmn2:association id="association_WgLbbg" sourceRef="dataObject_UQIXAQ" targetRef="task_delO7Q">
|
||||||
|
<bpmn2:documentation id="documentation_YhKaqg"/>
|
||||||
|
</bpmn2:association>
|
||||||
|
<bpmn2:sequenceFlow id="sequenceFlow_8O1EtQ" sourceRef="event_aSdkwg" targetRef="task_Q80A1Q">
|
||||||
|
<bpmn2:documentation id="documentation_VTvROw"/>
|
||||||
|
</bpmn2:sequenceFlow>
|
||||||
|
<bpmn2:intermediateCatchEvent id="event_6250fg" imixs:activityid="10" name="Save">
|
||||||
|
<bpmn2:documentation id="documentation_fcuXRg"/>
|
||||||
|
<bpmn2:outgoing>sequenceFlow_kS2fMA</bpmn2:outgoing>
|
||||||
|
</bpmn2:intermediateCatchEvent>
|
||||||
|
<bpmn2:sequenceFlow id="sequenceFlow_kS2fMA" sourceRef="event_6250fg" targetRef="task_B8Pi7A">
|
||||||
|
<bpmn2:documentation id="documentation_t0kr1g"/>
|
||||||
|
</bpmn2:sequenceFlow>
|
||||||
|
<bpmn2:intermediateCatchEvent id="event_VM0fEQ" imixs:activityid="900" name="[Stats]">
|
||||||
|
<bpmn2:extensionElements>
|
||||||
|
<imixs:item name="txtactivityresult" type="xs:string">
|
||||||
|
<imixs:value><![CDATA[<item name="process">Partnermanagement</item>]]></imixs:value>
|
||||||
|
</imixs:item>
|
||||||
|
<imixs:item name="keypublicresult" type="xs:string">
|
||||||
|
<imixs:value><![CDATA[0]]></imixs:value>
|
||||||
|
</imixs:item>
|
||||||
|
</bpmn2:extensionElements>
|
||||||
|
<bpmn2:documentation id="documentation_ZmJD9A"/>
|
||||||
|
<bpmn2:incoming>sequenceFlow_T5L9aQ</bpmn2:incoming>
|
||||||
|
<bpmn2:outgoing>sequenceFlow_MPlPww</bpmn2:outgoing>
|
||||||
|
<bpmn2:timerEventDefinition id="timerEventDefinition_faqzJg"/>
|
||||||
|
<bpmn2:incoming>sequenceFlow_rNZ3tw</bpmn2:incoming>
|
||||||
|
</bpmn2:intermediateCatchEvent>
|
||||||
|
<bpmn2:exclusiveGateway default="sequenceFlow_aH0vCQ" gatewayDirection="Diverging" id="gateway_s0J53g" name="">
|
||||||
|
<bpmn2:documentation id="documentation_2Qn8Ng"/>
|
||||||
|
<bpmn2:incoming>sequenceFlow_MPlPww</bpmn2:incoming>
|
||||||
|
<bpmn2:outgoing>sequenceFlow_aH0vCQ</bpmn2:outgoing>
|
||||||
|
<bpmn2:outgoing>sequenceFlow_ShuXXA</bpmn2:outgoing>
|
||||||
|
</bpmn2:exclusiveGateway>
|
||||||
|
<bpmn2:task id="task_NohgrQ" imixs:processid="1700" name="Inactiv">
|
||||||
|
<bpmn2:extensionElements>
|
||||||
|
<imixs:item name="txtimageurl" type="xs:string">
|
||||||
|
<imixs:value><![CDATA[typcn-user|typcn-tick,imixs-success]]></imixs:value>
|
||||||
|
</imixs:item>
|
||||||
|
<imixs:item name="txtworkflowsummary" type="xs:string">
|
||||||
|
<imixs:value><![CDATA[<itemvalue>partner.name</itemvalue> (<itemvalue>partner.id</itemvalue>)]]></imixs:value>
|
||||||
|
</imixs:item>
|
||||||
|
<imixs:item name="txtworkflowabstract" type="xs:string">
|
||||||
|
<imixs:value><![CDATA[<strong>Adresse:</strong><br />
|
||||||
|
<itemvalue>partner.name</itemvalue><br />
|
||||||
|
<itemvalue>partner.address</itemvalue><br />
|
||||||
|
<itemvalue>partner.zip</itemvalue> <itemvalue>partner.city</itemvalue><br />
|
||||||
|
<br />
|
||||||
|
|
||||||
|
<strong>BPID:</strong> <itemvalue>partner.id</itemvalue><br />
|
||||||
|
<strong>Kreditoren-Nr.:</strong> <itemvalue>cdtr.number</itemvalue><br />
|
||||||
|
<strong>Debitoren-Nr.:</strong> <itemvalue>dbtr.number</itemvalue><br />
|
||||||
|
]]></imixs:value>
|
||||||
|
</imixs:item>
|
||||||
|
<imixs:item name="keyupdateacl" type="xs:string">
|
||||||
|
<imixs:value><![CDATA[true]]></imixs:value>
|
||||||
|
</imixs:item>
|
||||||
|
<imixs:item name="namownershipnames" type="xs:string">
|
||||||
|
<imixs:value/>
|
||||||
|
</imixs:item>
|
||||||
|
<imixs:item name="namaddreadaccess" type="xs:string">
|
||||||
|
<imixs:value/>
|
||||||
|
</imixs:item>
|
||||||
|
<imixs:item name="namaddwriteaccess" type="xs:string">
|
||||||
|
<imixs:value/>
|
||||||
|
</imixs:item>
|
||||||
|
<imixs:item name="keyaddwritefields" type="xs:string">
|
||||||
|
<imixs:value><![CDATA[process.team]]></imixs:value>
|
||||||
|
</imixs:item>
|
||||||
|
<imixs:item name="txttype" type="xs:string">
|
||||||
|
<imixs:value><![CDATA[workitemarchive]]></imixs:value>
|
||||||
|
</imixs:item>
|
||||||
|
</bpmn2:extensionElements>
|
||||||
|
<bpmn2:documentation id="documentation_RI2Ing"/>
|
||||||
|
<bpmn2:incoming>sequenceFlow_9atLFA</bpmn2:incoming>
|
||||||
|
<bpmn2:incoming>sequenceFlow_8O1EtQ</bpmn2:incoming>
|
||||||
|
<bpmn2:incoming>sequenceFlow_aH0vCQ</bpmn2:incoming>
|
||||||
|
<bpmn2:outgoing>sequenceFlow_neSsFQ</bpmn2:outgoing>
|
||||||
|
<bpmn2:outgoing>sequenceFlow_zd6RWA</bpmn2:outgoing>
|
||||||
|
<bpmn2:outgoing>sequenceFlow_rNZ3tw</bpmn2:outgoing>
|
||||||
|
</bpmn2:task>
|
||||||
|
<bpmn2:sequenceFlow id="sequenceFlow_MPlPww" sourceRef="event_VM0fEQ" targetRef="gateway_s0J53g">
|
||||||
|
<bpmn2:documentation id="documentation_saZUSw"/>
|
||||||
|
</bpmn2:sequenceFlow>
|
||||||
|
<bpmn2:sequenceFlow id="sequenceFlow_aH0vCQ" sourceRef="gateway_s0J53g" targetRef="task_NohgrQ">
|
||||||
|
<bpmn2:documentation id="documentation_0fUXrw"/>
|
||||||
|
</bpmn2:sequenceFlow>
|
||||||
|
<bpmn2:sequenceFlow id="sequenceFlow_ShuXXA" sourceRef="gateway_s0J53g" targetRef="task_Q80A1Q">
|
||||||
|
<bpmn2:documentation id="documentation_mhSkeg"/>
|
||||||
|
<bpmn2:conditionExpression id="formalExpression_oEZj1g" xsi:type="bpmn2:tFormalExpression"><![CDATA[true;]]></bpmn2:conditionExpression>
|
||||||
|
</bpmn2:sequenceFlow>
|
||||||
|
<bpmn2:sequenceFlow id="sequenceFlow_neSsFQ" sourceRef="task_NohgrQ" targetRef="event_Tr0aug">
|
||||||
|
<bpmn2:documentation id="documentation_X3IiUg"/>
|
||||||
|
</bpmn2:sequenceFlow>
|
||||||
|
<bpmn2:intermediateCatchEvent id="event_AMs05g" name="[IBAN-ERROR]">
|
||||||
|
<bpmn2:documentation id="documentation_CKfjew"/>
|
||||||
|
<bpmn2:linkEventDefinition id="linkEventDefinition_QoDe7w"/>
|
||||||
|
<bpmn2:outgoing>sequenceFlow_5pT4Tw</bpmn2:outgoing>
|
||||||
|
</bpmn2:intermediateCatchEvent>
|
||||||
|
<bpmn2:intermediateThrowEvent id="event_feLZFQ" name="[IBAN-ERROR]">
|
||||||
|
<bpmn2:documentation id="documentation_ns8CKQ"/>
|
||||||
|
<bpmn2:linkEventDefinition id="linkEventDefinition_ici5wA"/>
|
||||||
|
<bpmn2:incoming>sequenceFlow_8BTEtw</bpmn2:incoming>
|
||||||
|
</bpmn2:intermediateThrowEvent>
|
||||||
|
<bpmn2:sequenceFlow id="sequenceFlow_5pT4Tw" sourceRef="event_AMs05g" targetRef="event_1OVorA">
|
||||||
|
<bpmn2:documentation id="documentation_mQfndA"/>
|
||||||
|
</bpmn2:sequenceFlow>
|
||||||
|
<bpmn2:sequenceFlow id="sequenceFlow_8BTEtw" sourceRef="gateway_uK0c6g" targetRef="event_feLZFQ">
|
||||||
|
<bpmn2:documentation id="documentation_aB5qHw"/>
|
||||||
|
</bpmn2:sequenceFlow>
|
||||||
|
<bpmn2:intermediateThrowEvent id="event_GTXFMw" name="[IBAN-ERROR]">
|
||||||
|
<bpmn2:documentation id="documentation_a8NiKA"/>
|
||||||
|
<bpmn2:linkEventDefinition id="linkEventDefinition_YUfA0A"/>
|
||||||
|
<bpmn2:incoming>sequenceFlow_03b60w</bpmn2:incoming>
|
||||||
|
</bpmn2:intermediateThrowEvent>
|
||||||
|
<bpmn2:sequenceFlow id="sequenceFlow_03b60w" sourceRef="task_Q80A1Q" targetRef="event_GTXFMw">
|
||||||
|
<bpmn2:documentation id="documentation_i02Wsw"/>
|
||||||
|
</bpmn2:sequenceFlow>
|
||||||
|
<bpmn2:intermediateThrowEvent id="event_u8OBFg" name="[IBAN-ERROR]">
|
||||||
|
<bpmn2:documentation id="documentation_0rGDzg"/>
|
||||||
|
<bpmn2:linkEventDefinition id="linkEventDefinition_8g6AoA"/>
|
||||||
|
<bpmn2:incoming>sequenceFlow_zd6RWA</bpmn2:incoming>
|
||||||
|
</bpmn2:intermediateThrowEvent>
|
||||||
|
<bpmn2:sequenceFlow id="sequenceFlow_zd6RWA" sourceRef="task_NohgrQ" targetRef="event_u8OBFg">
|
||||||
|
<bpmn2:documentation id="documentation_ez15rg"/>
|
||||||
|
</bpmn2:sequenceFlow>
|
||||||
|
<bpmn2:sequenceFlow id="sequenceFlow_rNZ3tw" sourceRef="task_NohgrQ" targetRef="event_VM0fEQ">
|
||||||
|
<bpmn2:documentation id="documentation_AHyEzA"/>
|
||||||
|
</bpmn2:sequenceFlow>
|
||||||
|
</bpmn2:process>
|
||||||
|
<bpmndi:BPMNDiagram id="BPMNDiagram_1" name="OpenBPMN Diagram">
|
||||||
|
<bpmndi:BPMNPlane bpmnElement="collaboration_1" id="BPMNPlane_1">
|
||||||
|
<bpmndi:BPMNShape bpmnElement="event_WmkBvw" id="BPMNShape_heefeQ">
|
||||||
|
<dc:Bounds height="36.0" width="36.0" x="57.0" y="277.0"/>
|
||||||
|
<bpmndi:BPMNLabel id="BPMNLabel_6qfN6w">
|
||||||
|
<dc:Bounds height="20.0" width="100.0" x="25.0" y="316.0"/>
|
||||||
|
</bpmndi:BPMNLabel>
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNShape bpmnElement="event_1clvlg" id="BPMNShape_85k4rg">
|
||||||
|
<dc:Bounds height="36.0" width="36.0" x="1657.0" y="277.0"/>
|
||||||
|
<bpmndi:BPMNLabel id="BPMNLabel_F7t2Ng">
|
||||||
|
<dc:Bounds height="20.0" width="100.0" x="1625.0" y="259.0"/>
|
||||||
|
</bpmndi:BPMNLabel>
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNShape bpmnElement="task_ToMZaQ" id="BPMNShape_CUpR6w">
|
||||||
|
<dc:Bounds height="50.0" width="110.0" x="170.0" y="270.0"/>
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNShape bpmnElement="participant_oxb3dg" id="BPMNShape_mqlDUA">
|
||||||
|
<dc:Bounds height="820.0" width="1820.0" x="-30.0" y="40.0"/>
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNShape bpmnElement="lane_Zxa2TA" id="BPMNShape_Lane_1cDN5A">
|
||||||
|
<dc:Bounds height="820.0" width="1790.0" x="0.0" y="40.0"/>
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_25otUg" id="BPMNEdge_NHnc3g" sourceElement="BPMNShape_heefeQ" targetElement="BPMNShape_CUpR6w">
|
||||||
|
<di:waypoint x="93.0" y="295.0"/>
|
||||||
|
<di:waypoint x="170.0" y="295.0"/>
|
||||||
|
</bpmndi:BPMNEdge>
|
||||||
|
<bpmndi:BPMNShape bpmnElement="task_Q80A1Q" id="BPMNShape_7JA0nw">
|
||||||
|
<dc:Bounds height="50.0" width="110.0" x="660.0" y="270.0"/>
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNShape bpmnElement="task_B8Pi7A" id="BPMNShape_ghujeA">
|
||||||
|
<dc:Bounds height="50.0" width="110.0" x="1360.0" y="270.0"/>
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNShape bpmnElement="event_aSdkwg" id="BPMNShape_uesqgg">
|
||||||
|
<dc:Bounds height="36.0" width="36.0" x="437.0" y="277.0"/>
|
||||||
|
<bpmndi:BPMNLabel id="BPMNLabel_AxKRKQ">
|
||||||
|
<dc:Bounds height="20.0" width="100.0" x="405.0" y="316.0"/>
|
||||||
|
</bpmndi:BPMNLabel>
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_S9LVXg" id="BPMNEdge_xoCSiA" sourceElement="BPMNShape_CUpR6w" targetElement="BPMNShape_6IZk7Q">
|
||||||
|
<di:waypoint x="280.0" y="295.0"/>
|
||||||
|
<di:waypoint x="340.0" y="295.0"/>
|
||||||
|
</bpmndi:BPMNEdge>
|
||||||
|
<bpmndi:BPMNShape bpmnElement="event_Tr0aug" id="BPMNShape_NEaJjA">
|
||||||
|
<dc:Bounds height="36.0" width="36.0" x="1227.0" y="277.0"/>
|
||||||
|
<bpmndi:BPMNLabel id="BPMNLabel_GkrCTA">
|
||||||
|
<dc:Bounds height="20.0" width="100.0" x="1195.0" y="316.0"/>
|
||||||
|
</bpmndi:BPMNLabel>
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_1mXO8A" id="BPMNEdge_7CorJA" sourceElement="BPMNShape_NEaJjA" targetElement="BPMNShape_ghujeA">
|
||||||
|
<di:waypoint x="1263.0" y="295.0"/>
|
||||||
|
<di:waypoint x="1360.0" y="295.0"/>
|
||||||
|
</bpmndi:BPMNEdge>
|
||||||
|
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_rwdWxw" id="BPMNEdge_t88dUw" sourceElement="BPMNShape_ghujeA" targetElement="BPMNShape_85k4rg">
|
||||||
|
<di:waypoint x="1470.0" y="295.0"/>
|
||||||
|
<di:waypoint x="1657.0" y="295.0"/>
|
||||||
|
</bpmndi:BPMNEdge>
|
||||||
|
<bpmndi:BPMNShape bpmnElement="dataObject_UQIXAQ" id="BPMNShape_Mnop9Q">
|
||||||
|
<dc:Bounds height="50.0" width="35.0" x="560.0" y="380.0"/>
|
||||||
|
<bpmndi:BPMNLabel id="BPMNLabel_h0UuFw">
|
||||||
|
<dc:Bounds height="20.0" width="100.0" x="527.5" y="435.0"/>
|
||||||
|
</bpmndi:BPMNLabel>
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNShape bpmnElement="event_vwH0cA" id="BPMNShape_OXGg8Q">
|
||||||
|
<dc:Bounds height="36.0" width="36.0" x="747.0" y="177.0"/>
|
||||||
|
<bpmndi:BPMNLabel id="BPMNLabel_KaHfJQ">
|
||||||
|
<dc:Bounds height="20.0" width="100.0" x="715.0" y="216.0"/>
|
||||||
|
</bpmndi:BPMNLabel>
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_avahXg" id="BPMNEdge_odMtvQ" sourceElement="BPMNShape_OXGg8Q" targetElement="BPMNShape_7JA0nw">
|
||||||
|
<di:waypoint x="747.0" y="196.0"/>
|
||||||
|
<di:waypoint x="725.0" y="196.0"/>
|
||||||
|
<di:waypoint x="725.0" y="270.0"/>
|
||||||
|
</bpmndi:BPMNEdge>
|
||||||
|
<bpmndi:BPMNEdge bpmnElement="association_uvV8uA" id="BPMNEdge_3Mtxfw" sourceElement="BPMNShape_mqlDUA" targetElement="BPMNShape_7JA0nw"/>
|
||||||
|
<bpmndi:BPMNEdge bpmnElement="association_mpLQEQ" id="BPMNEdge_qkEiPA" sourceElement="BPMNShape_Mnop9Q" targetElement="BPMNShape_7JA0nw">
|
||||||
|
<di:waypoint x="588.0" y="380.0"/>
|
||||||
|
<di:waypoint x="588.0" y="357.0"/>
|
||||||
|
<di:waypoint x="680.0" y="357.0"/>
|
||||||
|
<di:waypoint x="680.0" y="320.0"/>
|
||||||
|
</bpmndi:BPMNEdge>
|
||||||
|
<bpmndi:BPMNShape bpmnElement="textAnnotation_LyGTCw" id="BPMNShape_SbxnGw">
|
||||||
|
<dc:Bounds height="85.0" width="228.0" x="80.0" y="80.0"/>
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNEdge bpmnElement="association_83sZPw" id="BPMNEdge_p0XWxg" sourceElement="BPMNShape_mqlDUA" targetElement="BPMNShape_SbxnGw"/>
|
||||||
|
<bpmndi:BPMNShape bpmnElement="event_TuyuwQ" id="BPMNShape_fTy7mg">
|
||||||
|
<dc:Bounds height="36.0" width="36.0" x="617.0" y="177.0"/>
|
||||||
|
<bpmndi:BPMNLabel id="BPMNLabel_033n1A">
|
||||||
|
<dc:Bounds height="20.0" width="100.0" x="585.0" y="216.0"/>
|
||||||
|
</bpmndi:BPMNLabel>
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_9atLFA" id="BPMNEdge_BC4pwQ" sourceElement="BPMNShape_fTy7mg" targetElement="BPMNShape_7JA0nw">
|
||||||
|
<di:waypoint x="653.0" y="196.0"/>
|
||||||
|
<di:waypoint x="700.0" y="196.0"/>
|
||||||
|
<di:waypoint x="700.0" y="270.0"/>
|
||||||
|
</bpmndi:BPMNEdge>
|
||||||
|
<bpmndi:BPMNShape bpmnElement="event_h0Kk5g" id="BPMNShape_T4k09g">
|
||||||
|
<dc:Bounds height="36.0" width="36.0" x="1327.0" y="177.0"/>
|
||||||
|
<bpmndi:BPMNLabel id="BPMNLabel_lX0KlA">
|
||||||
|
<dc:Bounds height="20.0" width="100.0" x="1295.0" y="216.0"/>
|
||||||
|
</bpmndi:BPMNLabel>
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_gC0I9w" id="BPMNEdge_0nCVvg" sourceElement="BPMNShape_T4k09g" targetElement="BPMNShape_ghujeA">
|
||||||
|
<di:waypoint x="1360.0" y="185.0"/>
|
||||||
|
<di:waypoint x="1390.0" y="185.0"/>
|
||||||
|
<di:waypoint x="1390.0" y="270.0"/>
|
||||||
|
</bpmndi:BPMNEdge>
|
||||||
|
<bpmndi:BPMNShape bpmnElement="task_delO7Q" id="BPMNShape_rEOMWA">
|
||||||
|
<dc:Bounds height="50.0" width="110.0" x="660.0" y="510.0"/>
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNShape bpmnElement="event_1OVorA" id="BPMNShape_mG4csA">
|
||||||
|
<dc:Bounds height="36.0" width="36.0" x="557.0" y="517.0"/>
|
||||||
|
<bpmndi:BPMNLabel id="BPMNLabel_djIb8w">
|
||||||
|
<dc:Bounds height="20.0" width="100.0" x="528.0" y="559.0"/>
|
||||||
|
</bpmndi:BPMNLabel>
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNShape bpmnElement="event_baWU4w" id="BPMNShape_755HGg">
|
||||||
|
<dc:Bounds height="36.0" width="36.0" x="697.0" y="407.0"/>
|
||||||
|
<bpmndi:BPMNLabel id="BPMNLabel_oN6XKQ">
|
||||||
|
<dc:Bounds height="20.0" width="100.0" x="665.0" y="446.0"/>
|
||||||
|
</bpmndi:BPMNLabel>
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_pvIENQ" id="BPMNEdge_wXz5yA" sourceElement="BPMNShape_rEOMWA" targetElement="BPMNShape_755HGg">
|
||||||
|
<di:waypoint x="715.0" y="510.0"/>
|
||||||
|
<di:waypoint x="715.0" y="443.0"/>
|
||||||
|
</bpmndi:BPMNEdge>
|
||||||
|
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_b4BcVA" id="BPMNEdge_1gQ5Nw" sourceElement="BPMNShape_755HGg" targetElement="BPMNShape_7JA0nw">
|
||||||
|
<di:waypoint x="715.0" y="407.0"/>
|
||||||
|
<di:waypoint x="715.0" y="320.0"/>
|
||||||
|
</bpmndi:BPMNEdge>
|
||||||
|
<bpmndi:BPMNShape bpmnElement="event_ofjVfg" id="BPMNShape_hDVKtg">
|
||||||
|
<dc:Bounds height="36.0" width="36.0" x="617.0" y="607.0"/>
|
||||||
|
<bpmndi:BPMNLabel id="BPMNLabel_HpXNFQ">
|
||||||
|
<dc:Bounds height="20.0" width="100.0" x="585.0" y="646.0"/>
|
||||||
|
</bpmndi:BPMNLabel>
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_BWOtzA" id="BPMNEdge_KW5PhQ" sourceElement="BPMNShape_hDVKtg" targetElement="BPMNShape_rEOMWA">
|
||||||
|
<di:waypoint x="651.0" y="616.0"/>
|
||||||
|
<di:waypoint x="685.0" y="616.0"/>
|
||||||
|
<di:waypoint x="685.0" y="560.0"/>
|
||||||
|
</bpmndi:BPMNEdge>
|
||||||
|
<bpmndi:BPMNShape bpmnElement="event_i7yQVw" id="BPMNShape_KxnRjA">
|
||||||
|
<dc:Bounds height="36.0" width="36.0" x="747.0" y="607.0"/>
|
||||||
|
<bpmndi:BPMNLabel id="BPMNLabel_sJqwmA">
|
||||||
|
<dc:Bounds height="20.0" width="100.0" x="715.0" y="646.0"/>
|
||||||
|
</bpmndi:BPMNLabel>
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_ofWWuw" id="BPMNEdge_zlNOzQ" sourceElement="BPMNShape_KxnRjA" targetElement="BPMNShape_rEOMWA">
|
||||||
|
<di:waypoint x="749.0" y="616.0"/>
|
||||||
|
<di:waypoint x="735.0" y="616.0"/>
|
||||||
|
<di:waypoint x="735.0" y="560.0"/>
|
||||||
|
</bpmndi:BPMNEdge>
|
||||||
|
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_b0Bj3Q" id="BPMNEdge_CDn41A" sourceElement="BPMNShape_rEOMWA" targetElement="BPMNShape_NEaJjA">
|
||||||
|
<di:waypoint x="770.0" y="540.0"/>
|
||||||
|
<di:waypoint x="1240.0" y="540.0"/>
|
||||||
|
<di:waypoint x="1240.0" y="312.0"/>
|
||||||
|
</bpmndi:BPMNEdge>
|
||||||
|
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_T5L9aQ" id="BPMNEdge_dAQH1Q" sourceElement="BPMNShape_7JA0nw" targetElement="BPMNShape_FKXJtw">
|
||||||
|
<di:waypoint x="770.0" y="295.0"/>
|
||||||
|
<di:waypoint x="837.0" y="295.0"/>
|
||||||
|
</bpmndi:BPMNEdge>
|
||||||
|
<bpmndi:BPMNShape bpmnElement="gateway_uK0c6g" id="BPMNShape_6IZk7Q">
|
||||||
|
<dc:Bounds height="50.0" width="50.0" x="340.0" y="270.0"/>
|
||||||
|
<bpmndi:BPMNLabel id="BPMNLabel_JvBA0w">
|
||||||
|
<dc:Bounds height="20.0" width="100.0" x="315.0" y="323.0"/>
|
||||||
|
</bpmndi:BPMNLabel>
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_jAU3VA" id="BPMNEdge_2qLI2g" sourceElement="BPMNShape_6IZk7Q" targetElement="BPMNShape_uesqgg">
|
||||||
|
<di:waypoint x="390.0" y="295.0"/>
|
||||||
|
<di:waypoint x="437.0" y="295.0"/>
|
||||||
|
</bpmndi:BPMNEdge>
|
||||||
|
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_BHsRkQ" id="BPMNEdge_1LX47g" sourceElement="BPMNShape_mG4csA" targetElement="BPMNShape_rEOMWA">
|
||||||
|
<di:waypoint x="593.0" y="535.0"/>
|
||||||
|
<di:waypoint x="660.0" y="535.0"/>
|
||||||
|
</bpmndi:BPMNEdge>
|
||||||
|
<bpmndi:BPMNEdge bpmnElement="association_WgLbbg" id="BPMNEdge_Btz9CA" sourceElement="BPMNShape_Mnop9Q" targetElement="BPMNShape_rEOMWA">
|
||||||
|
<di:waypoint x="575.0" y="430.0"/>
|
||||||
|
<di:waypoint x="575.0" y="471.0"/>
|
||||||
|
<di:waypoint x="675.0" y="471.0"/>
|
||||||
|
<di:waypoint x="675.0" y="510.0"/>
|
||||||
|
</bpmndi:BPMNEdge>
|
||||||
|
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_8O1EtQ" id="BPMNEdge_JxSLfA" sourceElement="BPMNShape_uesqgg" targetElement="BPMNShape_7JA0nw">
|
||||||
|
<di:waypoint x="473.0" y="295.0"/>
|
||||||
|
<di:waypoint x="660.0" y="295.0"/>
|
||||||
|
</bpmndi:BPMNEdge>
|
||||||
|
<bpmndi:BPMNShape bpmnElement="event_6250fg" id="BPMNShape_v5Xzvg">
|
||||||
|
<dc:Bounds height="36.0" width="36.0" x="1457.0" y="177.0"/>
|
||||||
|
<bpmndi:BPMNLabel id="BPMNLabel_IBnUDA">
|
||||||
|
<dc:Bounds height="20.0" width="100.0" x="1425.0" y="216.0"/>
|
||||||
|
</bpmndi:BPMNLabel>
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_kS2fMA" id="BPMNEdge_i80XvQ" sourceElement="BPMNShape_v5Xzvg" targetElement="BPMNShape_ghujeA">
|
||||||
|
<di:waypoint x="1458.0" y="190.0"/>
|
||||||
|
<di:waypoint x="1435.0" y="190.0"/>
|
||||||
|
<di:waypoint x="1435.0" y="270.0"/>
|
||||||
|
</bpmndi:BPMNEdge>
|
||||||
|
<bpmndi:BPMNShape bpmnElement="event_VM0fEQ" id="BPMNShape_FKXJtw">
|
||||||
|
<dc:Bounds height="36.0" width="36.0" x="837.0" y="277.0"/>
|
||||||
|
<bpmndi:BPMNLabel id="BPMNLabel_CAiT2Q">
|
||||||
|
<dc:Bounds height="20.0" width="100.0" x="805.0" y="316.0"/>
|
||||||
|
</bpmndi:BPMNLabel>
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNShape bpmnElement="gateway_s0J53g" id="BPMNShape_gklxXQ">
|
||||||
|
<dc:Bounds height="50.0" width="50.0" x="930.0" y="270.0"/>
|
||||||
|
<bpmndi:BPMNLabel id="BPMNLabel_I4jC0g">
|
||||||
|
<dc:Bounds height="20.0" width="100.0" x="905.0" y="323.0"/>
|
||||||
|
</bpmndi:BPMNLabel>
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNShape bpmnElement="task_NohgrQ" id="BPMNShape_VljsIw">
|
||||||
|
<dc:Bounds height="50.0" width="110.0" x="1060.0" y="270.0"/>
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_MPlPww" id="BPMNEdge_rt2H3g" sourceElement="BPMNShape_FKXJtw" targetElement="BPMNShape_gklxXQ">
|
||||||
|
<di:waypoint x="873.0" y="295.0"/>
|
||||||
|
<di:waypoint x="930.0" y="295.0"/>
|
||||||
|
</bpmndi:BPMNEdge>
|
||||||
|
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_aH0vCQ" id="BPMNEdge_YMnxQQ" sourceElement="BPMNShape_gklxXQ" targetElement="BPMNShape_VljsIw">
|
||||||
|
<di:waypoint x="980.0" y="295.0"/>
|
||||||
|
<di:waypoint x="1060.0" y="295.0"/>
|
||||||
|
</bpmndi:BPMNEdge>
|
||||||
|
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_ShuXXA" id="BPMNEdge_DY4O8Q" sourceElement="BPMNShape_gklxXQ" targetElement="BPMNShape_7JA0nw">
|
||||||
|
<di:waypoint x="956.0" y="319.0"/>
|
||||||
|
<di:waypoint x="956.0" y="364.0"/>
|
||||||
|
<di:waypoint x="746.0" y="364.0"/>
|
||||||
|
<di:waypoint x="746.0" y="320.0"/>
|
||||||
|
</bpmndi:BPMNEdge>
|
||||||
|
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_neSsFQ" id="BPMNEdge_b7C0wQ" sourceElement="BPMNShape_VljsIw" targetElement="BPMNShape_NEaJjA">
|
||||||
|
<di:waypoint x="1170.0" y="295.0"/>
|
||||||
|
<di:waypoint x="1227.0" y="295.0"/>
|
||||||
|
</bpmndi:BPMNEdge>
|
||||||
|
<bpmndi:BPMNShape bpmnElement="event_AMs05g" id="BPMNShape_rS0hsw">
|
||||||
|
<dc:Bounds height="36.0" width="36.0" x="477.0" y="517.0"/>
|
||||||
|
<bpmndi:BPMNLabel id="BPMNLabel_XcN2Og">
|
||||||
|
<dc:Bounds height="20.0" width="100.0" x="445.0" y="556.0"/>
|
||||||
|
</bpmndi:BPMNLabel>
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNShape bpmnElement="event_feLZFQ" id="BPMNShape_uklBfA">
|
||||||
|
<dc:Bounds height="36.0" width="36.0" x="347.0" y="367.0"/>
|
||||||
|
<bpmndi:BPMNLabel id="BPMNLabel_OengAQ">
|
||||||
|
<dc:Bounds height="20.0" width="100.0" x="315.0" y="406.0"/>
|
||||||
|
</bpmndi:BPMNLabel>
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_5pT4Tw" id="BPMNEdge_LZMXxg" sourceElement="BPMNShape_rS0hsw" targetElement="BPMNShape_mG4csA">
|
||||||
|
<di:waypoint x="513.0" y="535.0"/>
|
||||||
|
<di:waypoint x="557.0" y="535.0"/>
|
||||||
|
</bpmndi:BPMNEdge>
|
||||||
|
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_8BTEtw" id="BPMNEdge_Os7FVw" sourceElement="BPMNShape_6IZk7Q" targetElement="BPMNShape_uklBfA">
|
||||||
|
<di:waypoint x="365.0" y="320.0"/>
|
||||||
|
<di:waypoint x="365.0" y="367.0"/>
|
||||||
|
</bpmndi:BPMNEdge>
|
||||||
|
<bpmndi:BPMNShape bpmnElement="event_GTXFMw" id="BPMNShape_5I6iNA">
|
||||||
|
<dc:Bounds height="36.0" width="36.0" x="847.0" y="177.0"/>
|
||||||
|
<bpmndi:BPMNLabel id="BPMNLabel_80daBg">
|
||||||
|
<dc:Bounds height="20.0" width="100.0" x="815.0" y="216.0"/>
|
||||||
|
</bpmndi:BPMNLabel>
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_03b60w" id="BPMNEdge_ehQBOQ" sourceElement="BPMNShape_7JA0nw" targetElement="BPMNShape_5I6iNA">
|
||||||
|
<di:waypoint x="770.0" y="294.0"/>
|
||||||
|
<di:waypoint x="809.0" y="294.0"/>
|
||||||
|
<di:waypoint x="809.0" y="195.0"/>
|
||||||
|
<di:waypoint x="847.0" y="195.0"/>
|
||||||
|
</bpmndi:BPMNEdge>
|
||||||
|
<bpmndi:BPMNShape bpmnElement="event_u8OBFg" id="BPMNShape_Kp730Q">
|
||||||
|
<dc:Bounds height="36.0" width="36.0" x="1137.0" y="177.0"/>
|
||||||
|
<bpmndi:BPMNLabel id="BPMNLabel_iUQ02A">
|
||||||
|
<dc:Bounds height="20.0" width="100.0" x="1105.0" y="216.0"/>
|
||||||
|
</bpmndi:BPMNLabel>
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_zd6RWA" id="BPMNEdge_6qKC4A" sourceElement="BPMNShape_VljsIw" targetElement="BPMNShape_Kp730Q">
|
||||||
|
<di:waypoint x="1114.0" y="270.0"/>
|
||||||
|
<di:waypoint x="1114.0" y="195.0"/>
|
||||||
|
<di:waypoint x="1137.0" y="195.0"/>
|
||||||
|
</bpmndi:BPMNEdge>
|
||||||
|
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_rNZ3tw" id="BPMNEdge_zrajzA" sourceElement="BPMNShape_VljsIw" targetElement="BPMNShape_FKXJtw">
|
||||||
|
<di:waypoint x="1080.0" y="270.0"/>
|
||||||
|
<di:waypoint x="1080.0" y="237.0"/>
|
||||||
|
<di:waypoint x="855.0" y="237.0"/>
|
||||||
|
<di:waypoint x="855.0" y="277.0"/>
|
||||||
|
</bpmndi:BPMNEdge>
|
||||||
|
</bpmndi:BPMNPlane>
|
||||||
|
</bpmndi:BPMNDiagram>
|
||||||
|
</bpmn2:definitions>
|
||||||
|
|
@ -1291,7 +1291,7 @@ Wiedervorlage wird um 7 bzw. 5 Tage erhöht</bpmn2:text>
|
||||||
<imixs:value><![CDATA[2]]></imixs:value>
|
<imixs:value><![CDATA[2]]></imixs:value>
|
||||||
</imixs:item>
|
</imixs:item>
|
||||||
<imixs:item name="keypublicresult" type="xs:string">
|
<imixs:item name="keypublicresult" type="xs:string">
|
||||||
<imixs:value><![CDATA[1]]></imixs:value>
|
<imixs:value><![CDATA[0]]></imixs:value>
|
||||||
</imixs:item>
|
</imixs:item>
|
||||||
<imixs:item name="keylogdateformat" type="xs:string">
|
<imixs:item name="keylogdateformat" type="xs:string">
|
||||||
<imixs:value><![CDATA[2]]></imixs:value>
|
<imixs:value><![CDATA[2]]></imixs:value>
|
||||||
|
|
@ -1404,7 +1404,7 @@ Wiedervorlage wird um 7 bzw. 5 Tage erhöht</bpmn2:text>
|
||||||
<imixs:value><![CDATA[2]]></imixs:value>
|
<imixs:value><![CDATA[2]]></imixs:value>
|
||||||
</imixs:item>
|
</imixs:item>
|
||||||
<imixs:item name="keypublicresult" type="xs:string">
|
<imixs:item name="keypublicresult" type="xs:string">
|
||||||
<imixs:value><![CDATA[1]]></imixs:value>
|
<imixs:value><![CDATA[0]]></imixs:value>
|
||||||
</imixs:item>
|
</imixs:item>
|
||||||
<imixs:item name="keylogdateformat" type="xs:string">
|
<imixs:item name="keylogdateformat" type="xs:string">
|
||||||
<imixs:value><![CDATA[2]]></imixs:value>
|
<imixs:value><![CDATA[2]]></imixs:value>
|
||||||
|
|
|
||||||
1625
workflow/posteingang-de-2.0.1.bpmn
Normal file
1625
workflow/posteingang-de-2.0.1.bpmn
Normal file
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
|
|
@ -96,7 +96,7 @@ th { font-weight: bold;}
|
||||||
</bpmn2:participant>
|
</bpmn2:participant>
|
||||||
<bpmn2:participant id="participant_LQyVcg" name="Default Process" processRef="process_2"/>
|
<bpmn2:participant id="participant_LQyVcg" name="Default Process" processRef="process_2"/>
|
||||||
</bpmn2:collaboration>
|
</bpmn2:collaboration>
|
||||||
<bpmn2:process definitionalCollaborationRef="Collaboration_1" id="Process_1" isExecutable="false" name="Rechnungsausgang">
|
<bpmn2:process definitionalCollaborationRef="Collaboration_1" id="Process_1" isExecutable="false" name="Rechnungsausgang" processType="Private">
|
||||||
<bpmn2:laneSet id="LaneSet_1" name="Lane Set 1">
|
<bpmn2:laneSet id="LaneSet_1" name="Lane Set 1">
|
||||||
<bpmn2:lane id="Lane_1" name="Buchhaltung">
|
<bpmn2:lane id="Lane_1" name="Buchhaltung">
|
||||||
<bpmn2:flowNodeRef>Task_2</bpmn2:flowNodeRef>
|
<bpmn2:flowNodeRef>Task_2</bpmn2:flowNodeRef>
|
||||||
|
|
@ -3638,8 +3638,8 @@ if (workitem.getItemValueString('txtcomment') == '' ) {
|
||||||
<bpmndi:BPMNEdge bpmnElement="SequenceFlow_59" id="BPMNEdge_SequenceFlow_60" sourceElement="BPMNShape_IntermediateCatchEvent_30" targetElement="BPMNShape_Task_4">
|
<bpmndi:BPMNEdge bpmnElement="SequenceFlow_59" id="BPMNEdge_SequenceFlow_60" sourceElement="BPMNShape_IntermediateCatchEvent_30" targetElement="BPMNShape_Task_4">
|
||||||
<bpmndi:BPMNLabel id="BPMNLabel_133"/>
|
<bpmndi:BPMNLabel id="BPMNLabel_133"/>
|
||||||
<di:waypoint x="1295.0" y="1117.0"/>
|
<di:waypoint x="1295.0" y="1117.0"/>
|
||||||
<di:waypoint x="1295.0" y="1093.5"/>
|
<di:waypoint x="1295.0" y="1094.0"/>
|
||||||
<di:waypoint x="1265.0" y="1093.5"/>
|
<di:waypoint x="1265.0" y="1094.0"/>
|
||||||
<di:waypoint x="1265.0" y="1070.0"/>
|
<di:waypoint x="1265.0" y="1070.0"/>
|
||||||
</bpmndi:BPMNEdge>
|
</bpmndi:BPMNEdge>
|
||||||
<bpmndi:BPMNEdge bpmnElement="SequenceFlow_3" id="BPMNEdge_SequenceFlow_4" sourceElement="BPMNShape_IntermediateCatchEvent_9" targetElement="BPMNShape_Task_6">
|
<bpmndi:BPMNEdge bpmnElement="SequenceFlow_3" id="BPMNEdge_SequenceFlow_4" sourceElement="BPMNShape_IntermediateCatchEvent_9" targetElement="BPMNShape_Task_6">
|
||||||
|
|
@ -3652,8 +3652,8 @@ if (workitem.getItemValueString('txtcomment') == '' ) {
|
||||||
<bpmndi:BPMNEdge bpmnElement="SequenceFlow_27" id="BPMNEdge_SequenceFlow_28" sourceElement="BPMNShape_IntermediateCatchEvent_2" targetElement="BPMNShape_Task_3">
|
<bpmndi:BPMNEdge bpmnElement="SequenceFlow_27" id="BPMNEdge_SequenceFlow_28" sourceElement="BPMNShape_IntermediateCatchEvent_2" targetElement="BPMNShape_Task_3">
|
||||||
<bpmndi:BPMNLabel id="BPMNLabel_42"/>
|
<bpmndi:BPMNLabel id="BPMNLabel_42"/>
|
||||||
<di:waypoint x="325.0" y="513.0"/>
|
<di:waypoint x="325.0" y="513.0"/>
|
||||||
<di:waypoint x="325.0" y="616.5"/>
|
<di:waypoint x="325.0" y="617.0"/>
|
||||||
<di:waypoint x="355.0" y="616.5"/>
|
<di:waypoint x="355.0" y="617.0"/>
|
||||||
<di:waypoint x="355.0" y="720.0"/>
|
<di:waypoint x="355.0" y="720.0"/>
|
||||||
</bpmndi:BPMNEdge>
|
</bpmndi:BPMNEdge>
|
||||||
<bpmndi:BPMNEdge bpmnElement="SequenceFlow_18" id="BPMNEdge_SequenceFlow_19" sourceElement="BPMNShape_Task_3" targetElement="BPMNShape_ExclusiveGateway_3">
|
<bpmndi:BPMNEdge bpmnElement="SequenceFlow_18" id="BPMNEdge_SequenceFlow_19" sourceElement="BPMNShape_Task_3" targetElement="BPMNShape_ExclusiveGateway_3">
|
||||||
|
|
@ -3691,13 +3691,13 @@ if (workitem.getItemValueString('txtcomment') == '' ) {
|
||||||
<bpmndi:BPMNLabel id="BPMNLabel_89"/>
|
<bpmndi:BPMNLabel id="BPMNLabel_89"/>
|
||||||
<di:waypoint x="493.0" y="1068.0"/>
|
<di:waypoint x="493.0" y="1068.0"/>
|
||||||
<di:waypoint x="493.0" y="1124.0"/>
|
<di:waypoint x="493.0" y="1124.0"/>
|
||||||
<di:waypoint x="557.0277992443886" y="1124.0"/>
|
<di:waypoint x="557.0" y="1124.0"/>
|
||||||
</bpmndi:BPMNEdge>
|
</bpmndi:BPMNEdge>
|
||||||
<bpmndi:BPMNEdge bpmnElement="SequenceFlow_7" id="BPMNEdge_SequenceFlow_8" sourceElement="BPMNShape_EventBasedGateway_4" targetElement="BPMNShape_IntermediateThrowEvent_4">
|
<bpmndi:BPMNEdge bpmnElement="SequenceFlow_7" id="BPMNEdge_SequenceFlow_8" sourceElement="BPMNShape_EventBasedGateway_4" targetElement="BPMNShape_IntermediateThrowEvent_4">
|
||||||
<bpmndi:BPMNLabel id="BPMNLabel_12"/>
|
<bpmndi:BPMNLabel id="BPMNLabel_12"/>
|
||||||
<di:waypoint x="913.0" y="1022.0"/>
|
<di:waypoint x="913.0" y="1022.0"/>
|
||||||
<di:waypoint x="913.0" y="956.0"/>
|
<di:waypoint x="913.0" y="956.0"/>
|
||||||
<di:waypoint x="987.0277992443886" y="956.0"/>
|
<di:waypoint x="987.0" y="956.0"/>
|
||||||
</bpmndi:BPMNEdge>
|
</bpmndi:BPMNEdge>
|
||||||
<bpmndi:BPMNEdge bpmnElement="SequenceFlow_8" id="BPMNEdge_SequenceFlow_9" sourceElement="BPMNShape_IntermediateCatchEvent_21" targetElement="BPMNShape_ExclusiveGateway_5">
|
<bpmndi:BPMNEdge bpmnElement="SequenceFlow_8" id="BPMNEdge_SequenceFlow_9" sourceElement="BPMNShape_IntermediateCatchEvent_21" targetElement="BPMNShape_ExclusiveGateway_5">
|
||||||
<bpmndi:BPMNLabel id="BPMNLabel_15"/>
|
<bpmndi:BPMNLabel id="BPMNLabel_15"/>
|
||||||
|
|
@ -3727,7 +3727,7 @@ if (workitem.getItemValueString('txtcomment') == '' ) {
|
||||||
</bpmndi:BPMNEdge>
|
</bpmndi:BPMNEdge>
|
||||||
<bpmndi:BPMNEdge bpmnElement="SequenceFlow_14" id="BPMNEdge_SequenceFlow_15" sourceElement="BPMNShape_IntermediateCatchEvent_5" targetElement="BPMNShape_Task_5">
|
<bpmndi:BPMNEdge bpmnElement="SequenceFlow_14" id="BPMNEdge_SequenceFlow_15" sourceElement="BPMNShape_IntermediateCatchEvent_5" targetElement="BPMNShape_Task_5">
|
||||||
<bpmndi:BPMNLabel id="BPMNLabel_29"/>
|
<bpmndi:BPMNLabel id="BPMNLabel_29"/>
|
||||||
<di:waypoint x="1449.0" y="197.45007122521577"/>
|
<di:waypoint x="1449.0" y="197.0"/>
|
||||||
<di:waypoint x="1449.0" y="167.0"/>
|
<di:waypoint x="1449.0" y="167.0"/>
|
||||||
<di:waypoint x="361.0" y="167.0"/>
|
<di:waypoint x="361.0" y="167.0"/>
|
||||||
<di:waypoint x="361.0" y="280.0"/>
|
<di:waypoint x="361.0" y="280.0"/>
|
||||||
|
|
@ -3736,13 +3736,13 @@ if (workitem.getItemValueString('txtcomment') == '' ) {
|
||||||
<bpmndi:BPMNLabel id="BPMNLabel_37"/>
|
<bpmndi:BPMNLabel id="BPMNLabel_37"/>
|
||||||
<di:waypoint x="1199.0" y="295.0"/>
|
<di:waypoint x="1199.0" y="295.0"/>
|
||||||
<di:waypoint x="1269.0" y="295.0"/>
|
<di:waypoint x="1269.0" y="295.0"/>
|
||||||
<di:waypoint x="1269.0" y="232.54992877478423"/>
|
<di:waypoint x="1269.0" y="233.0"/>
|
||||||
</bpmndi:BPMNEdge>
|
</bpmndi:BPMNEdge>
|
||||||
<bpmndi:BPMNEdge bpmnElement="SequenceFlow_16" id="BPMNEdge_SequenceFlow_17" sourceElement="BPMNShape_EventBasedGateway_5" targetElement="BPMNShape_IntermediateThrowEvent_7">
|
<bpmndi:BPMNEdge bpmnElement="SequenceFlow_16" id="BPMNEdge_SequenceFlow_17" sourceElement="BPMNShape_EventBasedGateway_5" targetElement="BPMNShape_IntermediateThrowEvent_7">
|
||||||
<bpmndi:BPMNLabel id="BPMNLabel_40"/>
|
<bpmndi:BPMNLabel id="BPMNLabel_40"/>
|
||||||
<di:waypoint x="1403.0" y="1068.0"/>
|
<di:waypoint x="1403.0" y="1068.0"/>
|
||||||
<di:waypoint x="1403.0" y="1124.0"/>
|
<di:waypoint x="1403.0" y="1124.0"/>
|
||||||
<di:waypoint x="1477.0277992443885" y="1124.0"/>
|
<di:waypoint x="1477.0" y="1124.0"/>
|
||||||
</bpmndi:BPMNEdge>
|
</bpmndi:BPMNEdge>
|
||||||
<bpmndi:BPMNEdge bpmnElement="SequenceFlow_17" id="BPMNEdge_SequenceFlow_18" sourceElement="BPMNShape_EventBasedGateway_1" targetElement="BPMNShape_IntermediateThrowEvent_8">
|
<bpmndi:BPMNEdge bpmnElement="SequenceFlow_17" id="BPMNEdge_SequenceFlow_18" sourceElement="BPMNShape_EventBasedGateway_1" targetElement="BPMNShape_IntermediateThrowEvent_8">
|
||||||
<bpmndi:BPMNLabel id="BPMNLabel_45"/>
|
<bpmndi:BPMNLabel id="BPMNLabel_45"/>
|
||||||
|
|
@ -3761,14 +3761,14 @@ if (workitem.getItemValueString('txtcomment') == '' ) {
|
||||||
<bpmndi:BPMNLabel id="BPMNLabel_52"/>
|
<bpmndi:BPMNLabel id="BPMNLabel_52"/>
|
||||||
<di:waypoint x="496.0" y="769.0"/>
|
<di:waypoint x="496.0" y="769.0"/>
|
||||||
<di:waypoint x="496.0" y="813.0"/>
|
<di:waypoint x="496.0" y="813.0"/>
|
||||||
<di:waypoint x="557.1114561800017" y="813.0"/>
|
<di:waypoint x="557.0" y="813.0"/>
|
||||||
</bpmndi:BPMNEdge>
|
</bpmndi:BPMNEdge>
|
||||||
<bpmndi:BPMNEdge bpmnElement="SequenceFlow_34" id="BPMNEdge_SequenceFlow_35" sourceElement="BPMNShape_Task_3" targetElement="BPMNShape_IntermediateCatchEvent_3">
|
<bpmndi:BPMNEdge bpmnElement="SequenceFlow_34" id="BPMNEdge_SequenceFlow_35" sourceElement="BPMNShape_Task_3" targetElement="BPMNShape_IntermediateCatchEvent_3">
|
||||||
<bpmndi:BPMNLabel id="BPMNLabel_79"/>
|
<bpmndi:BPMNLabel id="BPMNLabel_79"/>
|
||||||
<di:waypoint x="380.0" y="720.0"/>
|
<di:waypoint x="380.0" y="720.0"/>
|
||||||
<di:waypoint x="380.0" y="561.0"/>
|
<di:waypoint x="380.0" y="561.0"/>
|
||||||
<di:waypoint x="411.0" y="561.0"/>
|
<di:waypoint x="411.0" y="561.0"/>
|
||||||
<di:waypoint x="411.0" y="512.5499287747842"/>
|
<di:waypoint x="411.0" y="513.0"/>
|
||||||
</bpmndi:BPMNEdge>
|
</bpmndi:BPMNEdge>
|
||||||
<bpmndi:BPMNEdge bpmnElement="SequenceFlow_4" id="BPMNEdge_SequenceFlow_5" sourceElement="BPMNShape_IntermediateCatchEvent_1" targetElement="BPMNShape_Task_3">
|
<bpmndi:BPMNEdge bpmnElement="SequenceFlow_4" id="BPMNEdge_SequenceFlow_5" sourceElement="BPMNShape_IntermediateCatchEvent_1" targetElement="BPMNShape_Task_3">
|
||||||
<bpmndi:BPMNLabel id="BPMNLabel_19"/>
|
<bpmndi:BPMNLabel id="BPMNLabel_19"/>
|
||||||
|
|
@ -3782,7 +3782,7 @@ if (workitem.getItemValueString('txtcomment') == '' ) {
|
||||||
</bpmndi:BPMNEdge>
|
</bpmndi:BPMNEdge>
|
||||||
<bpmndi:BPMNEdge bpmnElement="SequenceFlow_36" id="BPMNEdge_SequenceFlow_37" sourceElement="BPMNShape_IntermediateCatchEvent_8" targetElement="BPMNShape_Task_2">
|
<bpmndi:BPMNEdge bpmnElement="SequenceFlow_36" id="BPMNEdge_SequenceFlow_37" sourceElement="BPMNShape_IntermediateCatchEvent_8" targetElement="BPMNShape_Task_2">
|
||||||
<bpmndi:BPMNLabel id="BPMNLabel_99"/>
|
<bpmndi:BPMNLabel id="BPMNLabel_99"/>
|
||||||
<di:waypoint x="357.0" y="922.8885438199983"/>
|
<di:waypoint x="357.0" y="923.0"/>
|
||||||
<di:waypoint x="357.0" y="973.0"/>
|
<di:waypoint x="357.0" y="973.0"/>
|
||||||
<di:waypoint x="338.0" y="973.0"/>
|
<di:waypoint x="338.0" y="973.0"/>
|
||||||
<di:waypoint x="338.0" y="1020.0"/>
|
<di:waypoint x="338.0" y="1020.0"/>
|
||||||
|
|
@ -3792,7 +3792,7 @@ if (workitem.getItemValueString('txtcomment') == '' ) {
|
||||||
<di:waypoint x="310.0" y="316.0"/>
|
<di:waypoint x="310.0" y="316.0"/>
|
||||||
<di:waypoint x="290.0" y="316.0"/>
|
<di:waypoint x="290.0" y="316.0"/>
|
||||||
<di:waypoint x="290.0" y="906.0"/>
|
<di:waypoint x="290.0" y="906.0"/>
|
||||||
<di:waypoint x="337.0277992443886" y="906.0"/>
|
<di:waypoint x="337.0" y="906.0"/>
|
||||||
</bpmndi:BPMNEdge>
|
</bpmndi:BPMNEdge>
|
||||||
<bpmndi:BPMNEdge bpmnElement="SequenceFlow_41" id="BPMNEdge_SequenceFlow_42" sourceElement="BPMNShape_IntermediateCatchEvent_10" targetElement="BPMNShape_jIp3FQ">
|
<bpmndi:BPMNEdge bpmnElement="SequenceFlow_41" id="BPMNEdge_SequenceFlow_42" sourceElement="BPMNShape_IntermediateCatchEvent_10" targetElement="BPMNShape_jIp3FQ">
|
||||||
<bpmndi:BPMNLabel id="BPMNLabel_102"/>
|
<bpmndi:BPMNLabel id="BPMNLabel_102"/>
|
||||||
|
|
@ -3807,8 +3807,8 @@ if (workitem.getItemValueString('txtcomment') == '' ) {
|
||||||
<bpmndi:BPMNEdge bpmnElement="SequenceFlow_44" id="BPMNEdge_SequenceFlow_45" sourceElement="BPMNShape_IntermediateCatchEvent_24" targetElement="BPMNShape_Task_4">
|
<bpmndi:BPMNEdge bpmnElement="SequenceFlow_44" id="BPMNEdge_SequenceFlow_45" sourceElement="BPMNShape_IntermediateCatchEvent_24" targetElement="BPMNShape_Task_4">
|
||||||
<bpmndi:BPMNLabel id="BPMNLabel_119"/>
|
<bpmndi:BPMNLabel id="BPMNLabel_119"/>
|
||||||
<di:waypoint x="1235.0" y="1117.0"/>
|
<di:waypoint x="1235.0" y="1117.0"/>
|
||||||
<di:waypoint x="1235.0" y="1093.5"/>
|
<di:waypoint x="1235.0" y="1094.0"/>
|
||||||
<di:waypoint x="1265.0" y="1093.5"/>
|
<di:waypoint x="1265.0" y="1094.0"/>
|
||||||
<di:waypoint x="1265.0" y="1070.0"/>
|
<di:waypoint x="1265.0" y="1070.0"/>
|
||||||
</bpmndi:BPMNEdge>
|
</bpmndi:BPMNEdge>
|
||||||
<bpmndi:BPMNEdge bpmnElement="SequenceFlow_49" id="BPMNEdge_SequenceFlow_50" sourceElement="BPMNShape_IntermediateCatchEvent_25" targetElement="BPMNShape_Task_7">
|
<bpmndi:BPMNEdge bpmnElement="SequenceFlow_49" id="BPMNEdge_SequenceFlow_50" sourceElement="BPMNShape_IntermediateCatchEvent_25" targetElement="BPMNShape_Task_7">
|
||||||
|
|
@ -3865,13 +3865,13 @@ if (workitem.getItemValueString('txtcomment') == '' ) {
|
||||||
<bpmndi:BPMNLabel id="BPMNLabel_144"/>
|
<bpmndi:BPMNLabel id="BPMNLabel_144"/>
|
||||||
<di:waypoint x="913.0" y="1068.0"/>
|
<di:waypoint x="913.0" y="1068.0"/>
|
||||||
<di:waypoint x="913.0" y="1143.0"/>
|
<di:waypoint x="913.0" y="1143.0"/>
|
||||||
<di:waypoint x="987.1114561800017" y="1143.0"/>
|
<di:waypoint x="987.0" y="1143.0"/>
|
||||||
</bpmndi:BPMNEdge>
|
</bpmndi:BPMNEdge>
|
||||||
<bpmndi:BPMNEdge bpmnElement="SequenceFlow_63" id="BPMNEdge_SequenceFlow_64" sourceElement="BPMNShape_EventBasedGateway_3" targetElement="BPMNShape_IntermediateThrowEvent_6">
|
<bpmndi:BPMNEdge bpmnElement="SequenceFlow_63" id="BPMNEdge_SequenceFlow_64" sourceElement="BPMNShape_EventBasedGateway_3" targetElement="BPMNShape_IntermediateThrowEvent_6">
|
||||||
<bpmndi:BPMNLabel id="BPMNLabel_146"/>
|
<bpmndi:BPMNLabel id="BPMNLabel_146"/>
|
||||||
<di:waypoint x="493.0" y="1022.0"/>
|
<di:waypoint x="493.0" y="1022.0"/>
|
||||||
<di:waypoint x="493.0" y="956.0"/>
|
<di:waypoint x="493.0" y="956.0"/>
|
||||||
<di:waypoint x="557.0277992443886" y="956.0"/>
|
<di:waypoint x="557.0" y="956.0"/>
|
||||||
</bpmndi:BPMNEdge>
|
</bpmndi:BPMNEdge>
|
||||||
<bpmndi:BPMNEdge bpmnElement="SequenceFlow_64" id="BPMNEdge_SequenceFlow_65" sourceElement="BPMNShape_ExclusiveGateway_3" targetElement="BPMNShape_IntermediateThrowEvent_10">
|
<bpmndi:BPMNEdge bpmnElement="SequenceFlow_64" id="BPMNEdge_SequenceFlow_65" sourceElement="BPMNShape_ExclusiveGateway_3" targetElement="BPMNShape_IntermediateThrowEvent_10">
|
||||||
<bpmndi:BPMNLabel id="BPMNLabel_148"/>
|
<bpmndi:BPMNLabel id="BPMNLabel_148"/>
|
||||||
|
|
@ -3942,7 +3942,7 @@ if (workitem.getItemValueString('txtcomment') == '' ) {
|
||||||
<di:waypoint x="315.0" y="1107.0"/>
|
<di:waypoint x="315.0" y="1107.0"/>
|
||||||
</bpmndi:BPMNEdge>
|
</bpmndi:BPMNEdge>
|
||||||
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_U0JMVg" id="BPMNEdge_oElXIg" sourceElement="BPMNShape_IntermediateCatchEvent_20" targetElement="BPMNShape_jIp3FQ">
|
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_U0JMVg" id="BPMNEdge_oElXIg" sourceElement="BPMNShape_IntermediateCatchEvent_20" targetElement="BPMNShape_jIp3FQ">
|
||||||
<di:waypoint x="320.0" y="1142.2916164657906"/>
|
<di:waypoint x="320.0" y="1142.0"/>
|
||||||
<di:waypoint x="320.0" y="1162.0"/>
|
<di:waypoint x="320.0" y="1162.0"/>
|
||||||
<di:waypoint x="357.0" y="1162.0"/>
|
<di:waypoint x="357.0" y="1162.0"/>
|
||||||
<di:waypoint x="357.0" y="1180.0"/>
|
<di:waypoint x="357.0" y="1180.0"/>
|
||||||
|
|
@ -3968,20 +3968,20 @@ if (workitem.getItemValueString('txtcomment') == '' ) {
|
||||||
</bpmndi:BPMNShape>
|
</bpmndi:BPMNShape>
|
||||||
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_1KoKlw" id="BPMNEdge_JCvINA" sourceElement="BPMNShape_Task_6" targetElement="BPMNShape_IntermediateCatchEvent_22">
|
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_1KoKlw" id="BPMNEdge_JCvINA" sourceElement="BPMNShape_Task_6" targetElement="BPMNShape_IntermediateCatchEvent_22">
|
||||||
<di:waypoint x="755.0" y="1070.0"/>
|
<di:waypoint x="755.0" y="1070.0"/>
|
||||||
<di:waypoint x="755.0" y="1088.5"/>
|
<di:waypoint x="755.0" y="1089.0"/>
|
||||||
<di:waypoint x="725.0" y="1088.5"/>
|
<di:waypoint x="725.0" y="1089.0"/>
|
||||||
<di:waypoint x="725.0" y="1107.0"/>
|
<di:waypoint x="725.0" y="1107.0"/>
|
||||||
</bpmndi:BPMNEdge>
|
</bpmndi:BPMNEdge>
|
||||||
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_KaO3rw" id="BPMNEdge_A0N2qQ" sourceElement="BPMNShape_IntermediateCatchEvent_22" targetElement="BPMNShape_6vBldQ">
|
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_KaO3rw" id="BPMNEdge_A0N2qQ" sourceElement="BPMNShape_IntermediateCatchEvent_22" targetElement="BPMNShape_6vBldQ">
|
||||||
<di:waypoint x="725.0" y="1143.0"/>
|
<di:waypoint x="725.0" y="1143.0"/>
|
||||||
<di:waypoint x="725.0" y="1161.5"/>
|
<di:waypoint x="725.0" y="1162.0"/>
|
||||||
<di:waypoint x="775.0" y="1161.5"/>
|
<di:waypoint x="775.0" y="1162.0"/>
|
||||||
<di:waypoint x="775.0" y="1180.0"/>
|
<di:waypoint x="775.0" y="1180.0"/>
|
||||||
</bpmndi:BPMNEdge>
|
</bpmndi:BPMNEdge>
|
||||||
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_i1zqtw" id="BPMNEdge_L0wc5A" sourceElement="BPMNShape_6vBldQ" targetElement="BPMNShape_EventBasedGateway_4">
|
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_i1zqtw" id="BPMNEdge_L0wc5A" sourceElement="BPMNShape_6vBldQ" targetElement="BPMNShape_EventBasedGateway_4">
|
||||||
<di:waypoint x="830.0" y="1208.0"/>
|
<di:waypoint x="830.0" y="1208.0"/>
|
||||||
<di:waypoint x="858.5" y="1208.0"/>
|
<di:waypoint x="859.0" y="1208.0"/>
|
||||||
<di:waypoint x="858.5" y="1056.0"/>
|
<di:waypoint x="859.0" y="1056.0"/>
|
||||||
<di:waypoint x="901.0" y="1056.0"/>
|
<di:waypoint x="901.0" y="1056.0"/>
|
||||||
</bpmndi:BPMNEdge>
|
</bpmndi:BPMNEdge>
|
||||||
<bpmndi:BPMNShape bpmnElement="event_OzrjzA" id="BPMNShape_61TxRg">
|
<bpmndi:BPMNShape bpmnElement="event_OzrjzA" id="BPMNShape_61TxRg">
|
||||||
|
|
@ -4105,8 +4105,8 @@ if (workitem.getItemValueString('txtcomment') == '' ) {
|
||||||
</bpmndi:BPMNShape>
|
</bpmndi:BPMNShape>
|
||||||
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_KEAm0Q" id="BPMNEdge_vzAhLw" sourceElement="BPMNShape_DuKxMA" targetElement="BPMNShape_Task_3">
|
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_KEAm0Q" id="BPMNEdge_vzAhLw" sourceElement="BPMNShape_DuKxMA" targetElement="BPMNShape_Task_3">
|
||||||
<di:waypoint x="405.0" y="807.0"/>
|
<di:waypoint x="405.0" y="807.0"/>
|
||||||
<di:waypoint x="405.0" y="788.5"/>
|
<di:waypoint x="405.0" y="789.0"/>
|
||||||
<di:waypoint x="355.0" y="788.5"/>
|
<di:waypoint x="355.0" y="789.0"/>
|
||||||
<di:waypoint x="355.0" y="770.0"/>
|
<di:waypoint x="355.0" y="770.0"/>
|
||||||
</bpmndi:BPMNEdge>
|
</bpmndi:BPMNEdge>
|
||||||
</bpmndi:BPMNPlane>
|
</bpmndi:BPMNPlane>
|
||||||
|
|
|
||||||
8495
workflow/rechnungseingang-de-1.2.40-debug_BP.bpmn
Normal file
8495
workflow/rechnungseingang-de-1.2.40-debug_BP.bpmn
Normal file
File diff suppressed because it is too large
Load diff
|
|
@ -54,10 +54,10 @@
|
||||||
</bpmn2:participant>
|
</bpmn2:participant>
|
||||||
<bpmn2:participant id="Participant_2" name="SEPA-Export Pool" processRef="eingangsrechnung-de"/>
|
<bpmn2:participant id="Participant_2" name="SEPA-Export Pool" processRef="eingangsrechnung-de"/>
|
||||||
</bpmn2:collaboration>
|
</bpmn2:collaboration>
|
||||||
<bpmn2:process id="eingangsrechnung-de" isExecutable="false" name="SEPA-Export">
|
<bpmn2:process id="eingangsrechnung-de" isExecutable="false" name="SEPA-Export" processType="Public">
|
||||||
<bpmn2:documentation id="documentation_FFzgqw"/>
|
<bpmn2:documentation id="documentation_FFzgqw"/>
|
||||||
</bpmn2:process>
|
</bpmn2:process>
|
||||||
<bpmn2:process definitionalCollaborationRef="Collaboration_1" id="Process_1" isExecutable="false" name="SEPA-Export">
|
<bpmn2:process definitionalCollaborationRef="Collaboration_1" id="Process_1" isExecutable="false" name="SEPA-Export" processType="Private">
|
||||||
<bpmn2:laneSet id="LaneSet_1" name="Lane Set 1">
|
<bpmn2:laneSet id="LaneSet_1" name="Lane Set 1">
|
||||||
<bpmn2:lane id="Lane_1" name="Buchhaltung">
|
<bpmn2:lane id="Lane_1" name="Buchhaltung">
|
||||||
<bpmn2:flowNodeRef>IntermediateCatchEvent_6</bpmn2:flowNodeRef>
|
<bpmn2:flowNodeRef>IntermediateCatchEvent_6</bpmn2:flowNodeRef>
|
||||||
|
|
@ -800,7 +800,7 @@ result.isValid=true;
|
||||||
<bpmn2:sequenceFlow id="sequenceFlow_nyv4vw" sourceRef="gateway_WuKeqQ" targetRef="IntermediateCatchEvent_7">
|
<bpmn2:sequenceFlow id="sequenceFlow_nyv4vw" sourceRef="gateway_WuKeqQ" targetRef="IntermediateCatchEvent_7">
|
||||||
<bpmn2:documentation id="documentation_RRr33A"/>
|
<bpmn2:documentation id="documentation_RRr33A"/>
|
||||||
</bpmn2:sequenceFlow>
|
</bpmn2:sequenceFlow>
|
||||||
<bpmn2:intermediateCatchEvent id="event_y4hmYg" imixs:activityid="90" name="[automatic 15min]">
|
<bpmn2:intermediateCatchEvent id="event_y4hmYg" imixs:activityid="90" name="[automatic 1min]">
|
||||||
<bpmn2:extensionElements>
|
<bpmn2:extensionElements>
|
||||||
<imixs:item name="keylogtimeformat" type="xs:string">
|
<imixs:item name="keylogtimeformat" type="xs:string">
|
||||||
<imixs:value><![CDATA[2]]></imixs:value>
|
<imixs:value><![CDATA[2]]></imixs:value>
|
||||||
|
|
@ -859,7 +859,7 @@ result.isValid=true;
|
||||||
<imixs:value><![CDATA[3]]></imixs:value>
|
<imixs:value><![CDATA[3]]></imixs:value>
|
||||||
</imixs:item>
|
</imixs:item>
|
||||||
<imixs:item name="numactivitydelay" type="xs:string">
|
<imixs:item name="numactivitydelay" type="xs:string">
|
||||||
<imixs:value><![CDATA[15]]></imixs:value>
|
<imixs:value><![CDATA[1]]></imixs:value>
|
||||||
</imixs:item>
|
</imixs:item>
|
||||||
<imixs:item name="keyactivitydelayunit" type="xs:string">
|
<imixs:item name="keyactivitydelayunit" type="xs:string">
|
||||||
<imixs:value><![CDATA[1]]></imixs:value>
|
<imixs:value><![CDATA[1]]></imixs:value>
|
||||||
|
|
@ -1012,7 +1012,7 @@ result.isValid=true;
|
||||||
<bpmndi:BPMNShape bpmnElement="ExclusiveGateway_1" id="BPMNShape_ExclusiveGateway_1" isMarkerVisible="true">
|
<bpmndi:BPMNShape bpmnElement="ExclusiveGateway_1" id="BPMNShape_ExclusiveGateway_1" isMarkerVisible="true">
|
||||||
<dc:Bounds height="50.0" width="50.0" x="720.0" y="410.0"/>
|
<dc:Bounds height="50.0" width="50.0" x="720.0" y="410.0"/>
|
||||||
<bpmndi:BPMNLabel id="BPMNLabel_34" labelStyle="BPMNLabelStyle_1">
|
<bpmndi:BPMNLabel id="BPMNLabel_34" labelStyle="BPMNLabelStyle_1">
|
||||||
<dc:Bounds height="20.0" width="100.0" x="690.0" y="450.0"/>
|
<dc:Bounds height="20.0" width="100.0" x="695.0" y="463.0"/>
|
||||||
</bpmndi:BPMNLabel>
|
</bpmndi:BPMNLabel>
|
||||||
</bpmndi:BPMNShape>
|
</bpmndi:BPMNShape>
|
||||||
<bpmndi:BPMNShape bpmnElement="TextAnnotation_2" id="BPMNShape_TextAnnotation_2">
|
<bpmndi:BPMNShape bpmnElement="TextAnnotation_2" id="BPMNShape_TextAnnotation_2">
|
||||||
|
|
@ -1073,7 +1073,7 @@ result.isValid=true;
|
||||||
</bpmndi:BPMNEdge>
|
</bpmndi:BPMNEdge>
|
||||||
<bpmndi:BPMNEdge bpmnElement="SequenceFlow_7" id="BPMNEdge_SequenceFlow_7" sourceElement="BPMNShape_IntermediateCatchEvent_1" targetElement="BPMNShape_Task_7">
|
<bpmndi:BPMNEdge bpmnElement="SequenceFlow_7" id="BPMNEdge_SequenceFlow_7" sourceElement="BPMNShape_IntermediateCatchEvent_1" targetElement="BPMNShape_Task_7">
|
||||||
<bpmndi:BPMNLabel id="BPMNLabel_18"/>
|
<bpmndi:BPMNLabel id="BPMNLabel_18"/>
|
||||||
<di:waypoint x="572.0" y="498.416876048223"/>
|
<di:waypoint x="572.0" y="498.0"/>
|
||||||
<di:waypoint x="572.0" y="479.0"/>
|
<di:waypoint x="572.0" y="479.0"/>
|
||||||
<di:waypoint x="617.0" y="479.0"/>
|
<di:waypoint x="617.0" y="479.0"/>
|
||||||
<di:waypoint x="617.0" y="460.0"/>
|
<di:waypoint x="617.0" y="460.0"/>
|
||||||
|
|
@ -1106,7 +1106,7 @@ result.isValid=true;
|
||||||
</bpmndi:BPMNEdge>
|
</bpmndi:BPMNEdge>
|
||||||
<bpmndi:BPMNEdge bpmnElement="SequenceFlow_8" id="BPMNEdge_SequenceFlow_8" sourceElement="BPMNShape_IntermediateCatchEvent_3" targetElement="BPMNShape_Task_7">
|
<bpmndi:BPMNEdge bpmnElement="SequenceFlow_8" id="BPMNEdge_SequenceFlow_8" sourceElement="BPMNShape_IntermediateCatchEvent_3" targetElement="BPMNShape_Task_7">
|
||||||
<bpmndi:BPMNLabel id="BPMNLabel_22"/>
|
<bpmndi:BPMNLabel id="BPMNLabel_22"/>
|
||||||
<di:waypoint x="670.0" y="497.7083835342094"/>
|
<di:waypoint x="670.0" y="498.0"/>
|
||||||
<di:waypoint x="670.0" y="479.0"/>
|
<di:waypoint x="670.0" y="479.0"/>
|
||||||
<di:waypoint x="617.0" y="479.0"/>
|
<di:waypoint x="617.0" y="479.0"/>
|
||||||
<di:waypoint x="617.0" y="460.0"/>
|
<di:waypoint x="617.0" y="460.0"/>
|
||||||
|
|
@ -1140,9 +1140,9 @@ result.isValid=true;
|
||||||
<bpmndi:BPMNEdge bpmnElement="Association_2" id="BPMNEdge_Association_2" sourceElement="BPMNShape_TextAnnotation_3" targetElement="BPMNShape_IntermediateCatchEvent_2">
|
<bpmndi:BPMNEdge bpmnElement="Association_2" id="BPMNEdge_Association_2" sourceElement="BPMNShape_TextAnnotation_3" targetElement="BPMNShape_IntermediateCatchEvent_2">
|
||||||
<bpmndi:BPMNLabel id="BPMNLabel_11"/>
|
<bpmndi:BPMNLabel id="BPMNLabel_11"/>
|
||||||
<di:waypoint x="932.0" y="304.0"/>
|
<di:waypoint x="932.0" y="304.0"/>
|
||||||
<di:waypoint x="932.0" y="363.5"/>
|
<di:waypoint x="932.0" y="364.0"/>
|
||||||
<di:waypoint x="845.0" y="363.5"/>
|
<di:waypoint x="845.0" y="364.0"/>
|
||||||
<di:waypoint x="845.0" y="417.25176065070116"/>
|
<di:waypoint x="845.0" y="417.0"/>
|
||||||
</bpmndi:BPMNEdge>
|
</bpmndi:BPMNEdge>
|
||||||
<bpmndi:BPMNEdge bpmnElement="SequenceFlow_11" id="BPMNEdge_SequenceFlow_11" sourceElement="BPMNShape_IntermediateCatchEvent_4" targetElement="BPMNShape_Task_1">
|
<bpmndi:BPMNEdge bpmnElement="SequenceFlow_11" id="BPMNEdge_SequenceFlow_11" sourceElement="BPMNShape_IntermediateCatchEvent_4" targetElement="BPMNShape_Task_1">
|
||||||
<bpmndi:BPMNLabel id="BPMNLabel_17"/>
|
<bpmndi:BPMNLabel id="BPMNLabel_17"/>
|
||||||
|
|
@ -1158,21 +1158,21 @@ result.isValid=true;
|
||||||
<dc:Bounds height="50.0" width="175.0" x="1200.0" y="250.0"/>
|
<dc:Bounds height="50.0" width="175.0" x="1200.0" y="250.0"/>
|
||||||
</bpmndi:BPMNShape>
|
</bpmndi:BPMNShape>
|
||||||
<bpmndi:BPMNEdge bpmnElement="association_bYlYaQ" id="BPMNEdge_yt4O0Q" sourceElement="BPMNShape_60CxWw" targetElement="BPMNShape_IntermediateCatchEvent_18">
|
<bpmndi:BPMNEdge bpmnElement="association_bYlYaQ" id="BPMNEdge_yt4O0Q" sourceElement="BPMNShape_60CxWw" targetElement="BPMNShape_IntermediateCatchEvent_18">
|
||||||
<di:waypoint x="1287.5" y="300.0"/>
|
<di:waypoint x="1288.0" y="300.0"/>
|
||||||
<di:waypoint x="1287.5" y="358.5"/>
|
<di:waypoint x="1288.0" y="359.0"/>
|
||||||
<di:waypoint x="1235.0" y="358.5"/>
|
<di:waypoint x="1235.0" y="359.0"/>
|
||||||
<di:waypoint x="1235.0" y="417.0"/>
|
<di:waypoint x="1235.0" y="417.0"/>
|
||||||
</bpmndi:BPMNEdge>
|
</bpmndi:BPMNEdge>
|
||||||
<bpmndi:BPMNShape bpmnElement="gateway_WuKeqQ" id="BPMNShape_AIK9sA">
|
<bpmndi:BPMNShape bpmnElement="gateway_WuKeqQ" id="BPMNShape_AIK9sA">
|
||||||
<dc:Bounds height="50.0" width="50.0" x="1080.0" y="540.0"/>
|
<dc:Bounds height="50.0" width="50.0" x="1080.0" y="540.0"/>
|
||||||
<bpmndi:BPMNLabel id="BPMNLabel_sirngw">
|
<bpmndi:BPMNLabel id="BPMNLabel_sirngw">
|
||||||
<dc:Bounds height="20.0" width="100.0" x="1052.0" y="590.0"/>
|
<dc:Bounds height="20.0" width="100.0" x="1055.0" y="593.0"/>
|
||||||
</bpmndi:BPMNLabel>
|
</bpmndi:BPMNLabel>
|
||||||
</bpmndi:BPMNShape>
|
</bpmndi:BPMNShape>
|
||||||
<bpmndi:BPMNShape bpmnElement="gateway_6FAj9g" id="BPMNShape_Lgiawg">
|
<bpmndi:BPMNShape bpmnElement="gateway_6FAj9g" id="BPMNShape_Lgiawg">
|
||||||
<dc:Bounds height="50.0" width="50.0" x="1080.0" y="410.0"/>
|
<dc:Bounds height="50.0" width="50.0" x="1080.0" y="410.0"/>
|
||||||
<bpmndi:BPMNLabel id="BPMNLabel_he95hQ">
|
<bpmndi:BPMNLabel id="BPMNLabel_he95hQ">
|
||||||
<dc:Bounds height="20.0" width="100.0" x="1050.0" y="464.0"/>
|
<dc:Bounds height="20.0" width="100.0" x="1055.0" y="463.0"/>
|
||||||
</bpmndi:BPMNLabel>
|
</bpmndi:BPMNLabel>
|
||||||
</bpmndi:BPMNShape>
|
</bpmndi:BPMNShape>
|
||||||
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_rhKXDQ" id="BPMNEdge_14t8lw" sourceElement="BPMNShape_Lgiawg" targetElement="BPMNShape_IntermediateCatchEvent_18">
|
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_rhKXDQ" id="BPMNEdge_14t8lw" sourceElement="BPMNShape_Lgiawg" targetElement="BPMNShape_IntermediateCatchEvent_18">
|
||||||
|
|
@ -1188,19 +1188,19 @@ result.isValid=true;
|
||||||
<di:waypoint x="1217.0" y="565.0"/>
|
<di:waypoint x="1217.0" y="565.0"/>
|
||||||
</bpmndi:BPMNEdge>
|
</bpmndi:BPMNEdge>
|
||||||
<bpmndi:BPMNShape bpmnElement="event_y4hmYg" id="BPMNShape_BtOh7A">
|
<bpmndi:BPMNShape bpmnElement="event_y4hmYg" id="BPMNShape_BtOh7A">
|
||||||
<dc:Bounds height="36.0" width="36.0" x="727.0" y="327.0"/>
|
<dc:Bounds height="36.0" width="36.0" x="727.0" y="317.0"/>
|
||||||
<bpmndi:BPMNLabel id="BPMNLabel_a0n0xA">
|
<bpmndi:BPMNLabel id="BPMNLabel_a0n0xA">
|
||||||
<dc:Bounds height="20.0" width="100.0" x="697.0" y="364.0"/>
|
<dc:Bounds height="20.0" width="100.0" x="698.0" y="287.0"/>
|
||||||
</bpmndi:BPMNLabel>
|
</bpmndi:BPMNLabel>
|
||||||
</bpmndi:BPMNShape>
|
</bpmndi:BPMNShape>
|
||||||
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_0QFTlw" id="BPMNEdge_iWGl5g" sourceElement="BPMNShape_ExclusiveGateway_1" targetElement="BPMNShape_BtOh7A">
|
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_0QFTlw" id="BPMNEdge_iWGl5g" sourceElement="BPMNShape_ExclusiveGateway_1" targetElement="BPMNShape_BtOh7A">
|
||||||
<di:waypoint x="745.0" y="410.0"/>
|
<di:waypoint x="745.0" y="410.0"/>
|
||||||
<di:waypoint x="745.0" y="363.0"/>
|
<di:waypoint x="745.0" y="353.0"/>
|
||||||
</bpmndi:BPMNEdge>
|
</bpmndi:BPMNEdge>
|
||||||
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_ePZrvQ" id="BPMNEdge_hQ0KPA" sourceElement="BPMNShape_BtOh7A" targetElement="BPMNShape_IntermediateCatchEvent_2">
|
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_ePZrvQ" id="BPMNEdge_hQ0KPA" sourceElement="BPMNShape_BtOh7A" targetElement="BPMNShape_IntermediateCatchEvent_2">
|
||||||
<di:waypoint x="763.0" y="345.0"/>
|
<di:waypoint x="760.0" y="345.0"/>
|
||||||
<di:waypoint x="836.0" y="345.0"/>
|
<di:waypoint x="835.0" y="345.0"/>
|
||||||
<di:waypoint x="836.0" y="421.58359213500125"/>
|
<di:waypoint x="835.0" y="423.0"/>
|
||||||
</bpmndi:BPMNEdge>
|
</bpmndi:BPMNEdge>
|
||||||
<bpmndi:BPMNEdge bpmnElement="association_MJWNtQ" id="BPMNEdge_0VTopA" sourceElement="BPMNShape_TextAnnotation_1" targetElement="BPMNShape_IntermediateCatchEvent_1">
|
<bpmndi:BPMNEdge bpmnElement="association_MJWNtQ" id="BPMNEdge_0VTopA" sourceElement="BPMNShape_TextAnnotation_1" targetElement="BPMNShape_IntermediateCatchEvent_1">
|
||||||
<di:waypoint x="505.0" y="525.0"/>
|
<di:waypoint x="505.0" y="525.0"/>
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue