metriken und DWC File Export

This commit is contained in:
Ralph Soika 2025-01-29 23:43:58 +01:00
parent 9a932d0f54
commit 73cd9a28f7
20 changed files with 4340 additions and 927 deletions

View file

@ -92,7 +92,7 @@
}, },
"id": 14, "id": 14,
"panels": [], "panels": [],
"title": "Umsätze Gesamt", "title": "Salden Übersicht",
"type": "row" "type": "row"
}, },
{ {
@ -446,7 +446,7 @@
} }
} }
], ],
"title": "Umsatz $currency nach Abteilung", "title": "Saldo in $currency nach Abteilung",
"type": "bargauge" "type": "bargauge"
}, },
{ {
@ -620,22 +620,9 @@
"refId": "A" "refId": "A"
} }
], ],
"title": "Umsatz in $currency / $department", "title": "$department - Saldo in $currency",
"type": "timeseries" "type": "timeseries"
}, },
{
"collapsed": false,
"gridPos": {
"h": 1,
"w": 24,
"x": 0,
"y": 23
},
"id": 13,
"panels": [],
"title": "Row title",
"type": "row"
},
{ {
"datasource": { "datasource": {
"type": "prometheus", "type": "prometheus",
@ -689,7 +676,7 @@
"properties": [ "properties": [
{ {
"id": "custom.width", "id": "custom.width",
"value": 87 "value": 81
} }
] ]
}, },
@ -716,14 +703,38 @@
"value": 93 "value": 93
} }
] ]
},
{
"matcher": {
"id": "byName",
"options": "country"
},
"properties": [
{
"id": "custom.width",
"value": 81
}
]
},
{
"matcher": {
"id": "byName",
"options": "Kunde"
},
"properties": [
{
"id": "custom.width",
"value": 308
}
]
} }
] ]
}, },
"gridPos": { "gridPos": {
"h": 8, "h": 8,
"w": 12, "w": 12,
"x": 0, "x": 12,
"y": 24 "y": 15
}, },
"id": 6, "id": 6,
"options": { "options": {
@ -748,7 +759,7 @@
}, },
"editorMode": "code", "editorMode": "code",
"exemplar": false, "exemplar": false,
"expr": "topk(5, application_dbtr_balance) ", "expr": "topk(5,application_dbtr_balance{currency=~\"$currency\", department=~\"$department\"}) ",
"format": "table", "format": "table",
"hide": false, "hide": false,
"instant": false, "instant": false,
@ -757,7 +768,7 @@
"refId": "A" "refId": "A"
} }
], ],
"title": "Panel Title", "title": "Top 5",
"transformations": [ "transformations": [
{ {
"id": "groupBy", "id": "groupBy",
@ -778,8 +789,7 @@
"operation": "groupby" "operation": "groupby"
}, },
"department": { "department": {
"aggregations": [], "aggregations": []
"operation": "groupby"
}, },
"id": { "id": {
"aggregations": [], "aggregations": [],
@ -803,6 +813,27 @@
} }
] ]
} }
},
{
"id": "organize",
"options": {
"excludeByName": {},
"includeByName": {},
"indexByName": {
"Value (sum)": 3,
"country": 2,
"currency": 4,
"id": 1,
"name": 0
},
"renameByName": {
"Value (sum)": "Saldo Aktuell",
"country": "Land",
"currency": " ",
"id": "Nummer",
"name": "Kunde"
}
}
} }
], ],
"type": "table" "type": "table"
@ -853,13 +884,13 @@
] ]
}, },
"time": { "time": {
"from": "now-6h", "from": "now-12h",
"to": "now" "to": "now"
}, },
"timepicker": {}, "timepicker": {},
"timezone": "browser", "timezone": "browser",
"title": "Übersicht Debitoren", "title": "Übersicht Debitoren",
"uid": "deb9z4knfuxhcc", "uid": "deb9z4knfuxhcc",
"version": 18, "version": 20,
"weekStart": "" "weekStart": ""
} }

View file

@ -0,0 +1,888 @@
{
"__inputs": [
{
"name": "DS_PROMETHEUS",
"label": "prometheus",
"description": "",
"type": "datasource",
"pluginId": "prometheus",
"pluginName": "Prometheus"
}
],
"__elements": {},
"__requires": [
{
"type": "panel",
"id": "bargauge",
"name": "Bar gauge",
"version": ""
},
{
"type": "panel",
"id": "geomap",
"name": "Geomap",
"version": ""
},
{
"type": "grafana",
"id": "grafana",
"name": "Grafana",
"version": "11.4.0"
},
{
"type": "panel",
"id": "piechart",
"name": "Pie chart",
"version": ""
},
{
"type": "datasource",
"id": "prometheus",
"name": "Prometheus",
"version": "1.0.0"
},
{
"type": "panel",
"id": "stat",
"name": "Stat",
"version": ""
},
{
"type": "panel",
"id": "table",
"name": "Table",
"version": ""
},
{
"type": "panel",
"id": "timeseries",
"name": "Time series",
"version": ""
}
],
"annotations": {
"list": [
{
"builtIn": 1,
"datasource": {
"type": "grafana",
"uid": "-- Grafana --"
},
"enable": true,
"hide": true,
"iconColor": "rgba(0, 211, 255, 1)",
"name": "Annotations & Alerts",
"type": "dashboard"
}
]
},
"editable": true,
"fiscalYearStartMonth": 0,
"graphTooltip": 0,
"id": null,
"links": [],
"panels": [
{
"collapsed": false,
"gridPos": {
"h": 1,
"w": 24,
"x": 0,
"y": 0
},
"id": 14,
"panels": [],
"title": "Salden Übersicht Debitoren",
"type": "row"
},
{
"datasource": {
"type": "prometheus",
"uid": "${DS_PROMETHEUS}"
},
"fieldConfig": {
"defaults": {
"color": {
"mode": "fixed"
},
"custom": {
"hideFrom": {
"legend": false,
"tooltip": false,
"viz": false
}
},
"mappings": [],
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green",
"value": null
},
{
"color": "red",
"value": 80
}
]
},
"unit": "locale"
},
"overrides": []
},
"gridPos": {
"h": 9,
"w": 15,
"x": 0,
"y": 1
},
"id": 8,
"options": {
"basemap": {
"config": {
"server": "streets",
"showLabels": true,
"theme": "auto"
},
"name": "Layer 0",
"opacity": 1,
"tooltip": false,
"type": "esri-xyz"
},
"controls": {
"mouseWheelZoom": true,
"showAttribution": true,
"showDebug": false,
"showMeasure": false,
"showScale": false,
"showZoom": true
},
"layers": [
{
"config": {
"showLegend": false,
"style": {
"color": {
"fixed": "blue"
},
"opacity": 0.4,
"rotation": {
"fixed": 0,
"max": 360,
"min": -360,
"mode": "mod"
},
"size": {
"field": "Value",
"fixed": 5,
"max": 60,
"min": 10
},
"symbol": {
"fixed": "img/icons/marker/circle.svg",
"mode": "fixed"
},
"symbolAlign": {
"horizontal": "center",
"vertical": "center"
},
"textConfig": {
"fontSize": 12,
"offsetX": 0,
"offsetY": 0,
"textAlign": "center",
"textBaseline": "middle"
}
}
},
"filterData": {
"id": "byRefId",
"options": "A"
},
"location": {
"lookup": "country",
"mode": "lookup"
},
"name": "Saldo",
"tooltip": true,
"type": "markers"
}
],
"tooltip": {
"mode": "details"
},
"view": {
"allLayers": true,
"id": "europe",
"lat": 46,
"lon": 14,
"zoom": 4
}
},
"pluginVersion": "11.4.0",
"targets": [
{
"datasource": {
"type": "prometheus",
"uid": "${DS_PROMETHEUS}"
},
"editorMode": "code",
"exemplar": false,
"expr": "sum(last_over_time(application_dbtr_balance{currency=~\"$currency\"}[24h])) by (country, currency)",
"format": "table",
"instant": true,
"legendFormat": "__auto",
"range": false,
"refId": "A"
}
],
"type": "geomap"
},
{
"datasource": {
"type": "prometheus",
"uid": "${DS_PROMETHEUS}"
},
"fieldConfig": {
"defaults": {
"color": {
"fixedColor": "yellow",
"mode": "palette-classic"
},
"custom": {
"hideFrom": {
"legend": false,
"tooltip": false,
"viz": false
}
},
"mappings": [],
"unit": "locale"
},
"overrides": []
},
"gridPos": {
"h": 9,
"w": 5,
"x": 15,
"y": 1
},
"id": 9,
"options": {
"displayLabels": [],
"legend": {
"displayMode": "list",
"placement": "bottom",
"showLegend": true
},
"pieType": "pie",
"reduceOptions": {
"calcs": [
"lastNotNull"
],
"fields": "",
"values": false
},
"tooltip": {
"mode": "single",
"sort": "none"
}
},
"pluginVersion": "11.4.0",
"targets": [
{
"datasource": {
"type": "prometheus",
"uid": "${DS_PROMETHEUS}"
},
"editorMode": "code",
"exemplar": false,
"expr": "sum(application_dbtr_balance{currency=~\"$currency\"}) by (department)",
"format": "time_series",
"instant": true,
"legendFormat": "__auto",
"range": true,
"refId": "A"
}
],
"title": "$currency nach Abteilung",
"type": "piechart"
},
{
"datasource": {
"type": "prometheus",
"uid": "${DS_PROMETHEUS}"
},
"fieldConfig": {
"defaults": {
"color": {
"mode": "palette-classic"
},
"custom": {
"hideFrom": {
"legend": false,
"tooltip": false,
"viz": false
}
},
"mappings": []
},
"overrides": []
},
"gridPos": {
"h": 9,
"w": 4,
"x": 20,
"y": 1
},
"id": 2,
"options": {
"legend": {
"displayMode": "list",
"placement": "bottom",
"showLegend": true
},
"pieType": "pie",
"reduceOptions": {
"calcs": [
"lastNotNull"
],
"fields": "",
"values": false
},
"tooltip": {
"mode": "single",
"sort": "none"
}
},
"pluginVersion": "11.4.0",
"targets": [
{
"datasource": {
"type": "prometheus",
"uid": "${DS_PROMETHEUS}"
},
"editorMode": "code",
"expr": "sum(application_dbtr_balance) by (currency)",
"instant": false,
"legendFormat": "__auto",
"range": true,
"refId": "A"
}
],
"title": "Verteilung nach Währung",
"type": "piechart"
},
{
"datasource": {
"type": "prometheus",
"uid": "${DS_PROMETHEUS}"
},
"fieldConfig": {
"defaults": {
"color": {
"mode": "palette-classic-by-name"
},
"mappings": [],
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green",
"value": null
},
{
"color": "red",
"value": 80
}
]
},
"unit": "locale"
},
"overrides": []
},
"gridPos": {
"h": 6,
"w": 20,
"x": 0,
"y": 10
},
"id": 11,
"options": {
"displayMode": "basic",
"legend": {
"calcs": [],
"displayMode": "list",
"placement": "bottom",
"showLegend": false
},
"maxVizHeight": 300,
"minVizHeight": 16,
"minVizWidth": 8,
"namePlacement": "auto",
"orientation": "auto",
"reduceOptions": {
"calcs": [
"lastNotNull"
],
"fields": "",
"values": false
},
"showUnfilled": true,
"sizing": "auto",
"text": {
"titleSize": 10,
"valueSize": 10
},
"valueMode": "color"
},
"pluginVersion": "11.4.0",
"targets": [
{
"editorMode": "code",
"expr": "sum by (department) (application_dbtr_balance{currency=~\"$currency\"})",
"legendFormat": "__auto",
"range": true,
"refId": "A",
"datasource": {
"type": "prometheus",
"uid": "${DS_PROMETHEUS}"
}
}
],
"title": "Saldo in $currency nach Abteilung",
"type": "bargauge"
},
{
"datasource": {
"type": "prometheus",
"uid": "${DS_PROMETHEUS}"
},
"fieldConfig": {
"defaults": {
"color": {
"mode": "thresholds"
},
"mappings": [],
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green",
"value": null
},
{
"color": "red",
"value": 80
}
]
}
},
"overrides": []
},
"gridPos": {
"h": 6,
"w": 4,
"x": 20,
"y": 10
},
"id": 4,
"options": {
"colorMode": "value",
"graphMode": "area",
"justifyMode": "auto",
"orientation": "auto",
"percentChangeColorMode": "standard",
"reduceOptions": {
"calcs": [
"lastNotNull"
],
"fields": "",
"values": false
},
"showPercentChange": false,
"textMode": "auto",
"wideLayout": true
},
"pluginVersion": "11.4.0",
"targets": [
{
"datasource": {
"type": "prometheus",
"uid": "${DS_PROMETHEUS}"
},
"editorMode": "code",
"expr": "count(last_over_time(application_dbtr_balance[2h]))",
"hide": false,
"instant": false,
"legendFormat": "__auto",
"range": true,
"refId": "A"
}
],
"title": "Anzahl der Debitoren",
"type": "stat"
},
{
"collapsed": false,
"gridPos": {
"h": 1,
"w": 24,
"x": 0,
"y": 16
},
"id": 16,
"panels": [],
"title": "Salden Übersicht Debitoren - nach Abteilung",
"type": "row"
},
{
"datasource": {
"type": "prometheus",
"uid": "${DS_PROMETHEUS}"
},
"fieldConfig": {
"defaults": {
"color": {
"mode": "palette-classic"
},
"custom": {
"axisBorderShow": true,
"axisCenteredZero": false,
"axisColorMode": "text",
"axisLabel": "",
"axisPlacement": "auto",
"barAlignment": 0,
"barWidthFactor": 0.6,
"drawStyle": "line",
"fillOpacity": 30,
"gradientMode": "opacity",
"hideFrom": {
"legend": false,
"tooltip": false,
"viz": false
},
"insertNulls": false,
"lineInterpolation": "smooth",
"lineStyle": {
"fill": "solid"
},
"lineWidth": 3,
"pointSize": 9,
"scaleDistribution": {
"type": "linear"
},
"showPoints": "auto",
"spanNulls": true,
"stacking": {
"group": "A",
"mode": "none"
},
"thresholdsStyle": {
"mode": "off"
}
},
"mappings": [],
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green",
"value": null
},
{
"color": "red",
"value": 80
}
]
},
"unit": "locale"
},
"overrides": []
},
"gridPos": {
"h": 9,
"w": 12,
"x": 0,
"y": 17
},
"id": 1,
"options": {
"legend": {
"calcs": [],
"displayMode": "list",
"placement": "right",
"showLegend": false
},
"tooltip": {
"mode": "single",
"sort": "none"
}
},
"pluginVersion": "11.4.0",
"targets": [
{
"datasource": {
"type": "prometheus",
"uid": "${DS_PROMETHEUS}"
},
"editorMode": "code",
"exemplar": false,
"expr": "sum(application_dbtr_balance{currency=~\"$currency\", department=~\"$department\"}) ",
"format": "time_series",
"hide": false,
"instant": false,
"interval": "",
"legendFormat": "__auto",
"range": true,
"refId": "A"
}
],
"title": "$department - Saldo in $currency",
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "${DS_PROMETHEUS}"
},
"fieldConfig": {
"defaults": {
"color": {
"mode": "thresholds"
},
"custom": {
"align": "auto",
"cellOptions": {
"type": "auto"
},
"inspect": false
},
"decimals": 2,
"fieldMinMax": false,
"mappings": [],
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green",
"value": null
},
{
"color": "red",
"value": 80
}
]
},
"unit": "locale"
},
"overrides": [
{
"matcher": {
"id": "byName",
"options": "name"
},
"properties": [
{
"id": "custom.width",
"value": 558
}
]
},
{
"matcher": {
"id": "byName",
"options": "currency"
},
"properties": [
{
"id": "custom.width",
"value": 97
}
]
},
{
"matcher": {
"id": "byName",
"options": "id"
},
"properties": [
{
"id": "custom.width",
"value": 81
}
]
},
{
"matcher": {
"id": "byName",
"options": "Lieferant"
},
"properties": [
{
"id": "custom.width",
"value": 515
}
]
},
{
"matcher": {
"id": "byName",
"options": "Saldo"
},
"properties": [
{
"id": "decimals",
"value": 2
},
{
"id": "unit",
"value": "none"
}
]
}
]
},
"gridPos": {
"h": 9,
"w": 12,
"x": 12,
"y": 17
},
"id": 15,
"options": {
"cellHeight": "sm",
"footer": {
"countRows": false,
"fields": "",
"reducer": [
"sum"
],
"show": false
},
"showHeader": true,
"sortBy": []
},
"pluginVersion": "11.4.0",
"targets": [
{
"datasource": {
"type": "prometheus",
"uid": "${DS_PROMETHEUS}"
},
"editorMode": "code",
"exemplar": false,
"expr": "sum(last_over_time(application_dbtr_balance{currency=~\"$currency\", department=~\"$department\"}[2h]))\n by (name, id,department, currency)",
"format": "table",
"instant": true,
"legendFormat": "__auto",
"range": false,
"refId": "A"
}
],
"title": "Saldo By Debitor",
"transformations": [
{
"id": "organize",
"options": {
"excludeByName": {
"Time": true,
"department": true
},
"includeByName": {},
"indexByName": {
"Time": 0,
"Value": 5,
"currency": 3,
"department": 4,
"id": 2,
"name": 1
},
"renameByName": {
"Value": "Saldo",
"currency": " ",
"department": "",
"name": "Lieferant"
}
}
},
{
"id": "sortBy",
"options": {
"fields": {},
"sort": [
{
"desc": true,
"field": "Saldo"
}
]
}
}
],
"type": "table"
}
],
"schemaVersion": 40,
"tags": [],
"templating": {
"list": [
{
"current": {},
"datasource": {
"type": "prometheus",
"uid": "${DS_PROMETHEUS}"
},
"definition": "label_values(currency)",
"label": "Währung",
"name": "currency",
"options": [],
"query": {
"qryType": 1,
"query": "label_values(currency)",
"refId": "PrometheusVariableQueryEditor-VariableQuery"
},
"refresh": 1,
"regex": "",
"type": "query"
},
{
"current": {},
"datasource": {
"type": "prometheus",
"uid": "${DS_PROMETHEUS}"
},
"definition": "label_values(department)",
"label": "Abteilung",
"name": "department",
"options": [],
"query": {
"qryType": 1,
"query": "label_values(department)",
"refId": "PrometheusVariableQueryEditor-VariableQuery"
},
"refresh": 1,
"regex": "",
"type": "query"
},
{
"datasource": {
"type": "prometheus",
"uid": "P1809F7CD0C75ACF3"
},
"filters": [],
"name": "Filters",
"type": "adhoc"
}
]
},
"time": {
"from": "now-24h",
"to": "now"
},
"timepicker": {},
"timezone": "browser",
"title": "Übersicht Debitoren",
"uid": "deb9z4knfuxhcc",
"version": 31,
"weekStart": ""
}

View file

@ -98,7 +98,7 @@ public class RenameFilenamesAdapter implements SignalAdapter {
} else { } else {
targetPath = "invoice-out/"; targetPath = "invoice-out/";
String bookingPath = workitem.getItemValueString("invoice.bookingperiod"); String bookingPath = workitem.getItemValueString("invoice.bookingperiod");
targetPath = targetPath + bookingPath.substring(0, 4) + "/" + bookingPath.substring(5); targetPath = targetPath + bookingPath.substring(0, 4) + "/" + bookingPath.substring(4);
} }
workitem.setItemValue("ftp.target.path", targetPath + "/"); workitem.setItemValue("ftp.target.path", targetPath + "/");
@ -122,6 +122,11 @@ public class RenameFilenamesAdapter implements SignalAdapter {
if (InvoiceUtil.isSachrechnung(workitem)) { if (InvoiceUtil.isSachrechnung(workitem)) {
result = result + workitem.getItemValueString("invoice.number.stripped"); result = result + workitem.getItemValueString("invoice.number.stripped");
} else { } else {
// für ausgangsrechnungen skippen wir die Cargosoft XML Datei
if (fileName.toLowerCase().endsWith(".xml")) {
return fileName;
}
// für die PDF Datei bauen wir einen neuen Namen
result = result + workitem.getItemValueString("invoice.positions"); result = result + workitem.getItemValueString("invoice.positions");
} }
if (counter > 0) { if (counter > 0) {

View file

@ -1,5 +1,6 @@
package com.alexanderlogistics.metrics; package com.alexanderlogistics.metrics;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.logging.Logger; import java.util.logging.Logger;
@ -14,6 +15,7 @@ import jakarta.ejb.Stateless;
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;
import jakarta.ws.rs.PathParam;
import jakarta.ws.rs.Produces; import jakarta.ws.rs.Produces;
import jakarta.ws.rs.core.MediaType; import jakarta.ws.rs.core.MediaType;
import jakarta.ws.rs.core.Response; import jakarta.ws.rs.core.Response;
@ -85,6 +87,81 @@ public class MetricCreditorRestService {
} }
} }
/**
* 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 * Diese Methode berechnet alle Metriken auf basis der existierenden Rechnungen
* neu * neu

View file

@ -81,13 +81,24 @@ public class MetricCreditorService {
private boolean metricsEnabled; private boolean metricsEnabled;
/** /**
* Reset internal metricCache and clear registered Gauges. * Reset the internal metricCache and clears all registered Gauges.
*/ */
public void reset() { public void reset() {
metricCache.clear(); metricCache.clear();
registeredGauges.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.... * Process Metric only if some data has changed....
* *
@ -243,11 +254,11 @@ public class MetricCreditorService {
ItemCollection metricData = new ItemCollection(); ItemCollection metricData = new ItemCollection();
metricData.setType(TYPE_METRIC_CREDITOR); metricData.setType(TYPE_METRIC_CREDITOR);
metricData.setItemValue("name", key); metricData.setItemValue("name", key);
metricData.setItemValue("bp_id", InvoiceUtil.getBPId(invoice)); metricData.setItemValue("bp.id", InvoiceUtil.getBPId(invoice));
metricData.setItemValue("bp_name", InvoiceUtil.getBPName(invoice)); metricData.setItemValue("bp.name", InvoiceUtil.getBPName(invoice));
metricData.setItemValue("invoice_country", invoice.getItemValueString("invoice.country")); metricData.setItemValue("country", invoice.getItemValueString("invoice.country"));
metricData.setItemValue("invoice_currency", invoice.getItemValueString("invoice.currency")); metricData.setItemValue("currency", invoice.getItemValueString("invoice.currency"));
metricData.setItemValue("invoice_department", invoice.getItemValueString("space.name")); metricData.setItemValue("department", invoice.getItemValueString("space.name"));
return metricData; return metricData;
} }
@ -261,11 +272,11 @@ public class MetricCreditorService {
public void updateGauge(ItemCollection metricData) { public void updateGauge(ItemCollection metricData) {
String metricKey = metricData.getItemValueString("name"); String metricKey = metricData.getItemValueString("name");
String bpName = metricData.getItemValueString("bp_name"); String bpName = metricData.getItemValueString("bp.name");
String bpId = metricData.getItemValueString("bp_id"); String bpId = metricData.getItemValueString("bp.id");
String country = metricData.getItemValueString("invoice_country"); String country = metricData.getItemValueString("country");
String department = metricData.getItemValueString("invoice_department"); String department = metricData.getItemValueString("department");
String currency = metricData.getItemValueString("invoice_currency"); String currency = metricData.getItemValueString("currency");
// Prüfen ob Gauge bereits registriert ist // Prüfen ob Gauge bereits registriert ist
if (registeredGauges.add(metricKey)) { // returns true newly added if (registeredGauges.add(metricKey)) { // returns true newly added
@ -339,10 +350,20 @@ public class MetricCreditorService {
@TransactionAttribute(value = TransactionAttributeType.REQUIRES_NEW) @TransactionAttribute(value = TransactionAttributeType.REQUIRES_NEW)
public void refreshGauges() { public void refreshGauges() {
List<String> keys = getMetricKeys(); 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) { for (String hashKey : keys) {
ItemCollection metricData = getMetric(hashKey); ItemCollection metricData = getMetric(hashKey);
documentService.save(metricData); documentService.save(metricData);
updateGauge(metricData); updateGauge(metricData);
} }
} }
} }

View file

@ -1,5 +1,6 @@
package com.alexanderlogistics.metrics; package com.alexanderlogistics.metrics;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
@ -75,6 +76,32 @@ public class MetricDataService {
} }
} }
/**
* 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 * Builds the metric hash key by the invoice attributes. The returned key can be
* used for caching the metric. * used for caching the metric.

View file

@ -1,5 +1,6 @@
package com.alexanderlogistics.metrics; package com.alexanderlogistics.metrics;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.logging.Logger; import java.util.logging.Logger;
@ -14,6 +15,7 @@ import jakarta.ejb.Stateless;
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;
import jakarta.ws.rs.PathParam;
import jakarta.ws.rs.Produces; import jakarta.ws.rs.Produces;
import jakarta.ws.rs.core.MediaType; import jakarta.ws.rs.core.MediaType;
import jakarta.ws.rs.core.Response; import jakarta.ws.rs.core.Response;
@ -87,6 +89,92 @@ public class MetricDebitorRestService {
} }
} }
/**
* 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 * Diese Methode berechnet alle Metriken auf basis der existierenden Rechnungen
* neu * neu
@ -125,4 +213,9 @@ public class MetricDebitorRestService {
} }
private void log(String message, StringBuffer messageLog) {
logger.info(message);
messageLog.append(message + "\n");
}
} }

View file

@ -80,6 +80,17 @@ public class MetricDebitorService {
registeredGauges.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.... * Process Metric only if some data has changed....
* *
@ -235,11 +246,11 @@ public class MetricDebitorService {
ItemCollection metricData = new ItemCollection(); ItemCollection metricData = new ItemCollection();
metricData.setType(TYPE_METRIC_DEBITOR); metricData.setType(TYPE_METRIC_DEBITOR);
metricData.setItemValue("name", key); metricData.setItemValue("name", key);
metricData.setItemValue("bp_id", InvoiceUtil.getBPId(invoice)); metricData.setItemValue("bp.id", InvoiceUtil.getBPId(invoice));
metricData.setItemValue("bp_name", InvoiceUtil.getBPName(invoice)); metricData.setItemValue("bp.name", InvoiceUtil.getBPName(invoice));
metricData.setItemValue("invoice_country", invoice.getItemValueString("invoice.country")); metricData.setItemValue("country", invoice.getItemValueString("invoice.country"));
metricData.setItemValue("invoice_currency", invoice.getItemValueString("invoice.currency")); metricData.setItemValue("currency", invoice.getItemValueString("invoice.currency"));
metricData.setItemValue("invoice_department", invoice.getItemValueString("space.name")); metricData.setItemValue("department", invoice.getItemValueString("space.name"));
return metricData; return metricData;
} }
@ -252,11 +263,11 @@ public class MetricDebitorService {
public void updateGauge(ItemCollection metricData) { public void updateGauge(ItemCollection metricData) {
String metricKey = metricData.getItemValueString("name"); String metricKey = metricData.getItemValueString("name");
String bpName = metricData.getItemValueString("bp_name"); String bpName = metricData.getItemValueString("bp.name");
String bpId = metricData.getItemValueString("bp_id"); String bpId = metricData.getItemValueString("bp.id");
String country = metricData.getItemValueString("invoice_country"); String country = metricData.getItemValueString("country");
String department = metricData.getItemValueString("invoice_department"); String department = metricData.getItemValueString("department");
String currency = metricData.getItemValueString("invoice_currency"); String currency = metricData.getItemValueString("currency");
// Prüfen ob Gauge bereits registriert ist // Prüfen ob Gauge bereits registriert ist
if (registeredGauges.add(metricKey)) { // returns true newly added if (registeredGauges.add(metricKey)) { // returns true newly added
@ -297,12 +308,16 @@ public class MetricDebitorService {
// vorgang ist archiviert oder gelöscht worden => saldo = 0! // vorgang ist archiviert oder gelöscht worden => saldo = 0!
invoiceTotal = 0.0; invoiceTotal = 0.0;
} }
logger.fine("│   │   │   │   ├── Invoice: " + invoice.getItemValueString("invoice.number") + " Saldo="
+ invoiceTotal);
// is the metric new? // is the metric new?
if (!metricData.hasItem(ITEM_SALDO)) { if (!metricData.hasItem(ITEM_SALDO)) {
// init metric with the total value! // init metric with the total value!
metricData.setItemValue(ITEM_SALDO, InvoiceUtil.round(invoiceTotal)); metricData.setItemValue(ITEM_SALDO, InvoiceUtil.round(invoiceTotal));
} else { } else {
double lastSaldo = metricData.getItemValueDouble(ITEM_SALDO); double lastSaldo = metricData.getItemValueDouble(ITEM_SALDO);
logger.fine("│   │   │   │   ├──letzter Metric Saldo=" + lastSaldo);
metricData.setItemValue(ITEM_SALDO, InvoiceUtil.round(lastSaldo + invoiceTotal)); metricData.setItemValue(ITEM_SALDO, InvoiceUtil.round(lastSaldo + invoiceTotal));
} }
} }
@ -312,6 +327,8 @@ public class MetricDebitorService {
return; return;
} }
double invoiceTotal = invoice.getItemValueDouble(ITEM_SALDO); double invoiceTotal = invoice.getItemValueDouble(ITEM_SALDO);
logger.fine("│   │   │   │   ├──Invoice: " + invoice.getItemValueString("invoice.number") + " Saldo="
+ invoiceTotal);
if (!"workitem".equals(invoice.getType()) || invoice.getTaskID() >= 5800) { if (!"workitem".equals(invoice.getType()) || invoice.getTaskID() >= 5800) {
// vorgang ist archiviert oder gelöscht worden => saldo = 0! // vorgang ist archiviert oder gelöscht worden => saldo = 0!
invoiceTotal = 0.0; invoiceTotal = 0.0;
@ -319,6 +336,7 @@ public class MetricDebitorService {
// subtract only if metric saldo exists // subtract only if metric saldo exists
if (metricData.hasItem(ITEM_SALDO)) { if (metricData.hasItem(ITEM_SALDO)) {
double lastSaldo = metricData.getItemValueDouble(ITEM_SALDO); double lastSaldo = metricData.getItemValueDouble(ITEM_SALDO);
logger.fine("│   │   │   │   ├──letzter Metric Saldo=" + lastSaldo);
metricData.setItemValue(ITEM_SALDO, InvoiceUtil.round(lastSaldo - invoiceTotal)); metricData.setItemValue(ITEM_SALDO, InvoiceUtil.round(lastSaldo - invoiceTotal));
} }
} }
@ -330,10 +348,20 @@ public class MetricDebitorService {
@TransactionAttribute(value = TransactionAttributeType.REQUIRES_NEW) @TransactionAttribute(value = TransactionAttributeType.REQUIRES_NEW)
public void refreshGauges() { public void refreshGauges() {
List<String> keys = getMetricKeys(); 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) { for (String hashKey : keys) {
ItemCollection metricData = getMetric(hashKey); ItemCollection metricData = getMetric(hashKey);
documentService.save(metricData); documentService.save(metricData);
updateGauge(metricData); updateGauge(metricData);
} }
} }
} }

File diff suppressed because one or more lines are too long

View file

@ -53,7 +53,7 @@
</bpmn2:participant> </bpmn2:participant>
<bpmn2:participant id="participant_9PUChg" name="Default Process" processRef="process_2"/> <bpmn2:participant id="participant_9PUChg" name="Default Process" processRef="process_2"/>
</bpmn2:collaboration> </bpmn2:collaboration>
<bpmn2:process definitionalCollaborationRef="Collaboration_1" id="Process_1" isExecutable="false" name="Invoice receipt"> <bpmn2:process definitionalCollaborationRef="Collaboration_1" id="Process_1" isExecutable="false" name="Invoice receipt" 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="Creator"> <bpmn2:lane id="Lane_1" name="Creator">
<bpmn2:flowNodeRef>Task_2</bpmn2:flowNodeRef> <bpmn2:flowNodeRef>Task_2</bpmn2:flowNodeRef>
@ -5491,8 +5491,8 @@ Export erfolgt über eine asynchrone Verarbeitung im Modell 'cargosoft-export']]
</bpmndi:BPMNEdge> </bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="Association_2" id="BPMNEdge_Association_2" sourceElement="BPMNShape_DataObject_1" targetElement="BPMNShape_Task_5"> <bpmndi:BPMNEdge bpmnElement="Association_2" id="BPMNEdge_Association_2" sourceElement="BPMNShape_DataObject_1" targetElement="BPMNShape_Task_5">
<bpmndi:BPMNLabel id="BPMNLabel_86"/> <bpmndi:BPMNLabel id="BPMNLabel_86"/>
<di:waypoint x="297.5" y="110.0"/> <di:waypoint x="298.0" y="110.0"/>
<di:waypoint x="297.5" y="145.0"/> <di:waypoint x="298.0" y="145.0"/>
<di:waypoint x="365.0" y="145.0"/> <di:waypoint x="365.0" y="145.0"/>
<di:waypoint x="365.0" y="180.0"/> <di:waypoint x="365.0" y="180.0"/>
</bpmndi:BPMNEdge> </bpmndi:BPMNEdge>
@ -5500,7 +5500,7 @@ Export erfolgt über eine asynchrone Verarbeitung im Modell 'cargosoft-export']]
<bpmndi:BPMNLabel id="BPMNLabel_90"/> <bpmndi:BPMNLabel id="BPMNLabel_90"/>
<di:waypoint x="856.0" y="1639.0"/> <di:waypoint x="856.0" y="1639.0"/>
<di:waypoint x="856.0" y="1701.0"/> <di:waypoint x="856.0" y="1701.0"/>
<di:waypoint x="917.4500712252158" y="1701.0"/> <di:waypoint x="917.0" y="1701.0"/>
</bpmndi:BPMNEdge> </bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="SequenceFlow_30" id="BPMNEdge_SequenceFlow_31" sourceElement="BPMNShape_EventBasedGateway_4" targetElement="BPMNShape_IntermediateCatchEvent_26"> <bpmndi:BPMNEdge bpmnElement="SequenceFlow_30" id="BPMNEdge_SequenceFlow_31" sourceElement="BPMNShape_EventBasedGateway_4" targetElement="BPMNShape_IntermediateCatchEvent_26">
<bpmndi:BPMNLabel id="BPMNLabel_91"/> <bpmndi:BPMNLabel id="BPMNLabel_91"/>
@ -5552,11 +5552,11 @@ Export erfolgt über eine asynchrone Verarbeitung im Modell 'cargosoft-export']]
<bpmndi:BPMNLabel id="BPMNLabel_46"/> <bpmndi:BPMNLabel id="BPMNLabel_46"/>
<di:waypoint x="1605.0" y="1640.0"/> <di:waypoint x="1605.0" y="1640.0"/>
<di:waypoint x="1605.0" y="1759.0"/> <di:waypoint x="1605.0" y="1759.0"/>
<di:waypoint x="1697.4500712252157" y="1759.0"/> <di:waypoint x="1697.0" y="1759.0"/>
</bpmndi:BPMNEdge> </bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="SequenceFlow_23" id="BPMNEdge_SequenceFlow_23" sourceElement="BPMNShape_IntermediateCatchEvent_9" targetElement="BPMNShape_Task_6"> <bpmndi:BPMNEdge bpmnElement="SequenceFlow_23" id="BPMNEdge_SequenceFlow_23" sourceElement="BPMNShape_IntermediateCatchEvent_9" targetElement="BPMNShape_Task_6">
<bpmndi:BPMNLabel id="BPMNLabel_48"/> <bpmndi:BPMNLabel id="BPMNLabel_48"/>
<di:waypoint x="1732.2916164657906" y="1760.0"/> <di:waypoint x="1732.0" y="1760.0"/>
<di:waypoint x="1865.0" y="1760.0"/> <di:waypoint x="1865.0" y="1760.0"/>
<di:waypoint x="1865.0" y="1820.0"/> <di:waypoint x="1865.0" y="1820.0"/>
</bpmndi:BPMNEdge> </bpmndi:BPMNEdge>
@ -5609,19 +5609,19 @@ Export erfolgt über eine asynchrone Verarbeitung im Modell 'cargosoft-export']]
<bpmndi:BPMNEdge bpmnElement="Association_1" id="BPMNEdge_Association_1" sourceElement="BPMNShape_TextAnnotation_4" targetElement="BPMNShape_IntermediateCatchEvent_7"> <bpmndi:BPMNEdge bpmnElement="Association_1" id="BPMNEdge_Association_1" sourceElement="BPMNShape_TextAnnotation_4" targetElement="BPMNShape_IntermediateCatchEvent_7">
<bpmndi:BPMNLabel id="BPMNLabel_108"/> <bpmndi:BPMNLabel id="BPMNLabel_108"/>
<di:waypoint x="639.0" y="960.0"/> <di:waypoint x="639.0" y="960.0"/>
<di:waypoint x="639.0" y="926.5"/> <di:waypoint x="639.0" y="927.0"/>
<di:waypoint x="635.0" y="926.5"/> <di:waypoint x="635.0" y="927.0"/>
<di:waypoint x="635.0" y="893.0"/> <di:waypoint x="635.0" y="893.0"/>
</bpmndi:BPMNEdge> </bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="SequenceFlow_50" id="BPMNEdge_SequenceFlow_51" sourceElement="BPMNShape_Task_9" targetElement="BPMNShape_IntermediateCatchEvent_23"> <bpmndi:BPMNEdge bpmnElement="SequenceFlow_50" id="BPMNEdge_SequenceFlow_51" sourceElement="BPMNShape_Task_9" targetElement="BPMNShape_IntermediateCatchEvent_23">
<bpmndi:BPMNLabel id="BPMNLabel_118"/> <bpmndi:BPMNLabel id="BPMNLabel_118"/>
<di:waypoint x="1353.0" y="1590.0"/> <di:waypoint x="1353.0" y="1590.0"/>
<di:waypoint x="1353.0" y="1509.0"/> <di:waypoint x="1353.0" y="1509.0"/>
<di:waypoint x="1457.4500712252157" y="1509.0"/> <di:waypoint x="1457.0" y="1509.0"/>
</bpmndi:BPMNEdge> </bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="SequenceFlow_53" id="BPMNEdge_SequenceFlow_54" sourceElement="BPMNShape_IntermediateCatchEvent_23" targetElement="BPMNShape_ExclusiveGateway_2"> <bpmndi:BPMNEdge bpmnElement="SequenceFlow_53" id="BPMNEdge_SequenceFlow_54" sourceElement="BPMNShape_IntermediateCatchEvent_23" targetElement="BPMNShape_ExclusiveGateway_2">
<bpmndi:BPMNLabel id="BPMNLabel_119"/> <bpmndi:BPMNLabel id="BPMNLabel_119"/>
<di:waypoint x="1492.2916164657906" y="1510.0"/> <di:waypoint x="1492.0" y="1510.0"/>
<di:waypoint x="1606.0" y="1510.0"/> <di:waypoint x="1606.0" y="1510.0"/>
<di:waypoint x="1606.0" y="1591.0"/> <di:waypoint x="1606.0" y="1591.0"/>
</bpmndi:BPMNEdge> </bpmndi:BPMNEdge>
@ -5632,8 +5632,8 @@ Export erfolgt über eine asynchrone Verarbeitung im Modell 'cargosoft-export']]
</bpmndi:BPMNEdge> </bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="Association_5" id="BPMNEdge_Association_5" sourceElement="BPMNShape_DataObject_2" targetElement="BPMNShape_Task_2"> <bpmndi:BPMNEdge bpmnElement="Association_5" id="BPMNEdge_Association_5" sourceElement="BPMNShape_DataObject_2" targetElement="BPMNShape_Task_2">
<bpmndi:BPMNLabel id="BPMNLabel_70"/> <bpmndi:BPMNLabel id="BPMNLabel_70"/>
<di:waypoint x="325.5" y="810.0"/> <di:waypoint x="326.0" y="810.0"/>
<di:waypoint x="325.5" y="829.0"/> <di:waypoint x="326.0" y="829.0"/>
<di:waypoint x="371.0" y="829.0"/> <di:waypoint x="371.0" y="829.0"/>
<di:waypoint x="371.0" y="850.0"/> <di:waypoint x="371.0" y="850.0"/>
</bpmndi:BPMNEdge> </bpmndi:BPMNEdge>
@ -5649,10 +5649,10 @@ Export erfolgt über eine asynchrone Verarbeitung im Modell 'cargosoft-export']]
</bpmndi:BPMNEdge> </bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="SequenceFlow_46" id="BPMNEdge_SequenceFlow_47" sourceElement="BPMNShape_Task_16" targetElement="BPMNShape_IntermediateCatchEvent_2"> <bpmndi:BPMNEdge bpmnElement="SequenceFlow_46" id="BPMNEdge_SequenceFlow_47" sourceElement="BPMNShape_Task_16" targetElement="BPMNShape_IntermediateCatchEvent_2">
<bpmndi:BPMNLabel id="BPMNLabel_124"/> <bpmndi:BPMNLabel id="BPMNLabel_124"/>
<di:waypoint x="704.0" y="320.0"/> <di:waypoint x="705.0" y="320.0"/>
<di:waypoint x="704.0" y="358.5"/> <di:waypoint x="705.0" y="360.0"/>
<di:waypoint x="720.0" y="358.5"/> <di:waypoint x="720.0" y="360.0"/>
<di:waypoint x="720.0" y="397.7083835342094"/> <di:waypoint x="720.0" y="398.0"/>
</bpmndi:BPMNEdge> </bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="SequenceFlow_48" id="BPMNEdge_SequenceFlow_49" sourceElement="BPMNShape_IntermediateCatchEvent_22" targetElement="BPMNShape_IntermediateThrowEvent_3"> <bpmndi:BPMNEdge bpmnElement="SequenceFlow_48" id="BPMNEdge_SequenceFlow_49" sourceElement="BPMNShape_IntermediateCatchEvent_22" targetElement="BPMNShape_IntermediateThrowEvent_3">
<bpmndi:BPMNLabel id="BPMNLabel_127"/> <bpmndi:BPMNLabel id="BPMNLabel_127"/>
@ -5679,8 +5679,8 @@ Export erfolgt über eine asynchrone Verarbeitung im Modell 'cargosoft-export']]
<bpmndi:BPMNEdge bpmnElement="SequenceFlow_52" id="BPMNEdge_SequenceFlow_53" sourceElement="BPMNShape_IntermediateCatchEvent_28" targetElement="BPMNShape_Task_11"> <bpmndi:BPMNEdge bpmnElement="SequenceFlow_52" id="BPMNEdge_SequenceFlow_53" sourceElement="BPMNShape_IntermediateCatchEvent_28" targetElement="BPMNShape_Task_11">
<bpmndi:BPMNLabel id="BPMNLabel_130"/> <bpmndi:BPMNLabel id="BPMNLabel_130"/>
<di:waypoint x="2425.0" y="1533.0"/> <di:waypoint x="2425.0" y="1533.0"/>
<di:waypoint x="2425.0" y="1561.5"/> <di:waypoint x="2425.0" y="1562.0"/>
<di:waypoint x="2449.0" y="1561.5"/> <di:waypoint x="2449.0" y="1562.0"/>
<di:waypoint x="2449.0" y="1590.0"/> <di:waypoint x="2449.0" y="1590.0"/>
</bpmndi:BPMNEdge> </bpmndi:BPMNEdge>
<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">
@ -5739,7 +5739,7 @@ Export erfolgt über eine asynchrone Verarbeitung im Modell 'cargosoft-export']]
</bpmndi:BPMNEdge> </bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="SequenceFlow_62" id="BPMNEdge_SequenceFlow_63" sourceElement="BPMNShape_IntermediateCatchEvent_33" targetElement="BPMNShape_Task_14"> <bpmndi:BPMNEdge bpmnElement="SequenceFlow_62" id="BPMNEdge_SequenceFlow_63" sourceElement="BPMNShape_IntermediateCatchEvent_33" targetElement="BPMNShape_Task_14">
<bpmndi:BPMNLabel id="BPMNLabel_141"/> <bpmndi:BPMNLabel id="BPMNLabel_141"/>
<di:waypoint x="997.1114561800017" y="687.0"/> <di:waypoint x="997.0" y="687.0"/>
<di:waypoint x="993.0" y="687.0"/> <di:waypoint x="993.0" y="687.0"/>
<di:waypoint x="993.0" y="740.0"/> <di:waypoint x="993.0" y="740.0"/>
</bpmndi:BPMNEdge> </bpmndi:BPMNEdge>
@ -5774,14 +5774,14 @@ Export erfolgt über eine asynchrone Verarbeitung im Modell 'cargosoft-export']]
<bpmndi:BPMNEdge bpmnElement="SequenceFlow_74" id="BPMNEdge_SequenceFlow_75" sourceElement="BPMNShape_IntermediateCatchEvent_36" targetElement="BPMNShape_Task_16"> <bpmndi:BPMNEdge bpmnElement="SequenceFlow_74" id="BPMNEdge_SequenceFlow_75" sourceElement="BPMNShape_IntermediateCatchEvent_36" targetElement="BPMNShape_Task_16">
<bpmndi:BPMNLabel id="BPMNLabel_164"/> <bpmndi:BPMNLabel id="BPMNLabel_164"/>
<di:waypoint x="583.0" y="375.0"/> <di:waypoint x="583.0" y="375.0"/>
<di:waypoint x="688.0" y="375.0"/> <di:waypoint x="690.0" y="375.0"/>
<di:waypoint x="688.0" y="320.0"/> <di:waypoint x="690.0" y="320.0"/>
</bpmndi:BPMNEdge> </bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="SequenceFlow_76" id="BPMNEdge_SequenceFlow_77" sourceElement="BPMNShape_EventBasedGateway_3" targetElement="BPMNShape_IntermediateCatchEvent_22"> <bpmndi:BPMNEdge bpmnElement="SequenceFlow_76" id="BPMNEdge_SequenceFlow_77" sourceElement="BPMNShape_EventBasedGateway_3" targetElement="BPMNShape_IntermediateCatchEvent_22">
<bpmndi:BPMNLabel id="BPMNLabel_166"/> <bpmndi:BPMNLabel id="BPMNLabel_166"/>
<di:waypoint x="815.0" y="270.0"/> <di:waypoint x="815.0" y="270.0"/>
<di:waypoint x="815.0" y="235.0"/> <di:waypoint x="815.0" y="235.0"/>
<di:waypoint x="910.0333704529043" y="235.0"/> <di:waypoint x="910.0" y="235.0"/>
</bpmndi:BPMNEdge> </bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="SequenceFlow_20" id="BPMNEdge_SequenceFlow_22" sourceElement="BPMNShape_Task_5" targetElement="BPMNShape_EventBasedGateway_1"> <bpmndi:BPMNEdge bpmnElement="SequenceFlow_20" id="BPMNEdge_SequenceFlow_22" sourceElement="BPMNShape_Task_5" targetElement="BPMNShape_EventBasedGateway_1">
<bpmndi:BPMNLabel id="BPMNLabel_47"/> <bpmndi:BPMNLabel id="BPMNLabel_47"/>
@ -5793,7 +5793,7 @@ Export erfolgt über eine asynchrone Verarbeitung im Modell 'cargosoft-export']]
<bpmndi:BPMNLabel id="BPMNLabel_113"/> <bpmndi:BPMNLabel id="BPMNLabel_113"/>
<di:waypoint x="487.0" y="228.0"/> <di:waypoint x="487.0" y="228.0"/>
<di:waypoint x="487.0" y="292.0"/> <di:waypoint x="487.0" y="292.0"/>
<di:waypoint x="547.2517606507012" y="292.0"/> <di:waypoint x="547.0" y="292.0"/>
</bpmndi:BPMNEdge> </bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="SequenceFlow_77" id="BPMNEdge_SequenceFlow_78" sourceElement="BPMNShape_IntermediateCatchEvent_13" targetElement="BPMNShape_Task_16"> <bpmndi:BPMNEdge bpmnElement="SequenceFlow_77" id="BPMNEdge_SequenceFlow_78" sourceElement="BPMNShape_IntermediateCatchEvent_13" targetElement="BPMNShape_Task_16">
<bpmndi:BPMNLabel id="BPMNLabel_143"/> <bpmndi:BPMNLabel id="BPMNLabel_143"/>
@ -5804,7 +5804,7 @@ Export erfolgt über eine asynchrone Verarbeitung im Modell 'cargosoft-export']]
<bpmndi:BPMNLabel id="BPMNLabel_165"/> <bpmndi:BPMNLabel id="BPMNLabel_165"/>
<di:waypoint x="953.0" y="740.0"/> <di:waypoint x="953.0" y="740.0"/>
<di:waypoint x="953.0" y="699.0"/> <di:waypoint x="953.0" y="699.0"/>
<di:waypoint x="732.5499287747842" y="699.0"/> <di:waypoint x="733.0" y="699.0"/>
</bpmndi:BPMNEdge> </bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="SequenceFlow_75" id="BPMNEdge_SequenceFlow_76" sourceElement="BPMNShape_IntermediateCatchEvent_37" targetElement="BPMNShape_ExclusiveGateway_10"> <bpmndi:BPMNEdge bpmnElement="SequenceFlow_75" id="BPMNEdge_SequenceFlow_76" sourceElement="BPMNShape_IntermediateCatchEvent_37" targetElement="BPMNShape_ExclusiveGateway_10">
<bpmndi:BPMNLabel id="BPMNLabel_167"/> <bpmndi:BPMNLabel id="BPMNLabel_167"/>
@ -5846,9 +5846,9 @@ Export erfolgt über eine asynchrone Verarbeitung im Modell 'cargosoft-export']]
<bpmndi:BPMNEdge bpmnElement="SequenceFlow_81" id="BPMNEdge_SequenceFlow_82" sourceElement="BPMNShape_Task_9" targetElement="BPMNShape_IntermediateCatchEvent_40"> <bpmndi:BPMNEdge bpmnElement="SequenceFlow_81" id="BPMNEdge_SequenceFlow_82" sourceElement="BPMNShape_Task_9" targetElement="BPMNShape_IntermediateCatchEvent_40">
<bpmndi:BPMNLabel id="BPMNLabel_176"/> <bpmndi:BPMNLabel id="BPMNLabel_176"/>
<di:waypoint x="1360.0" y="1640.0"/> <di:waypoint x="1360.0" y="1640.0"/>
<di:waypoint x="1360.0" y="1658.5"/> <di:waypoint x="1360.0" y="1659.0"/>
<di:waypoint x="1380.0" y="1658.5"/> <di:waypoint x="1380.0" y="1659.0"/>
<di:waypoint x="1380.0" y="1677.7083835342094"/> <di:waypoint x="1380.0" y="1678.0"/>
</bpmndi:BPMNEdge> </bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="SequenceFlow_82" id="BPMNEdge_SequenceFlow_83" sourceElement="BPMNShape_Task_18" targetElement="BPMNShape_EndEvent_6"> <bpmndi:BPMNEdge bpmnElement="SequenceFlow_82" id="BPMNEdge_SequenceFlow_83" sourceElement="BPMNShape_Task_18" targetElement="BPMNShape_EndEvent_6">
<bpmndi:BPMNLabel id="BPMNLabel_180"/> <bpmndi:BPMNLabel id="BPMNLabel_180"/>
@ -5873,8 +5873,8 @@ Export erfolgt über eine asynchrone Verarbeitung im Modell 'cargosoft-export']]
<bpmndi:BPMNEdge bpmnElement="SequenceFlow_88" id="BPMNEdge_SequenceFlow_89" sourceElement="BPMNShape_Task_9" targetElement="BPMNShape_IntermediateCatchEvent_44"> <bpmndi:BPMNEdge bpmnElement="SequenceFlow_88" id="BPMNEdge_SequenceFlow_89" sourceElement="BPMNShape_Task_9" targetElement="BPMNShape_IntermediateCatchEvent_44">
<bpmndi:BPMNLabel id="BPMNLabel_187"/> <bpmndi:BPMNLabel id="BPMNLabel_187"/>
<di:waypoint x="1305.0" y="1640.0"/> <di:waypoint x="1305.0" y="1640.0"/>
<di:waypoint x="1305.0" y="1663.5"/> <di:waypoint x="1305.0" y="1664.0"/>
<di:waypoint x="1245.0" y="1663.5"/> <di:waypoint x="1245.0" y="1664.0"/>
<di:waypoint x="1245.0" y="1687.0"/> <di:waypoint x="1245.0" y="1687.0"/>
</bpmndi:BPMNEdge> </bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="SequenceFlow_89" id="BPMNEdge_SequenceFlow_90" sourceElement="BPMNShape_IntermediateCatchEvent_44" targetElement="BPMNShape_Task_10"> <bpmndi:BPMNEdge bpmnElement="SequenceFlow_89" id="BPMNEdge_SequenceFlow_90" sourceElement="BPMNShape_IntermediateCatchEvent_44" targetElement="BPMNShape_Task_10">
@ -5896,7 +5896,7 @@ Export erfolgt über eine asynchrone Verarbeitung im Modell 'cargosoft-export']]
<bpmndi:BPMNLabel id="BPMNLabel_183"/> <bpmndi:BPMNLabel id="BPMNLabel_183"/>
<di:waypoint x="813.0" y="318.0"/> <di:waypoint x="813.0" y="318.0"/>
<di:waypoint x="813.0" y="349.0"/> <di:waypoint x="813.0" y="349.0"/>
<di:waypoint x="908.0294372515228" y="349.0"/> <di:waypoint x="908.0" y="349.0"/>
</bpmndi:BPMNEdge> </bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="SequenceFlow_85" id="BPMNEdge_SequenceFlow_86" sourceElement="BPMNShape_Task_16" targetElement="BPMNShape_EventBasedGateway_3"> <bpmndi:BPMNEdge bpmnElement="SequenceFlow_85" id="BPMNEdge_SequenceFlow_86" sourceElement="BPMNShape_Task_16" targetElement="BPMNShape_EventBasedGateway_3">
<bpmndi:BPMNLabel id="BPMNLabel_190"/> <bpmndi:BPMNLabel id="BPMNLabel_190"/>
@ -5906,13 +5906,13 @@ Export erfolgt über eine asynchrone Verarbeitung im Modell 'cargosoft-export']]
<bpmndi:BPMNEdge bpmnElement="SequenceFlow_90" id="BPMNEdge_SequenceFlow_91" sourceElement="BPMNShape_IntermediateCatchEvent_46" targetElement="BPMNShape_Task_11"> <bpmndi:BPMNEdge bpmnElement="SequenceFlow_90" id="BPMNEdge_SequenceFlow_91" sourceElement="BPMNShape_IntermediateCatchEvent_46" targetElement="BPMNShape_Task_11">
<bpmndi:BPMNLabel id="BPMNLabel_192"/> <bpmndi:BPMNLabel id="BPMNLabel_192"/>
<di:waypoint x="2535.0" y="1533.0"/> <di:waypoint x="2535.0" y="1533.0"/>
<di:waypoint x="2535.0" y="1561.5"/> <di:waypoint x="2535.0" y="1562.0"/>
<di:waypoint x="2495.0" y="1561.5"/> <di:waypoint x="2495.0" y="1562.0"/>
<di:waypoint x="2495.0" y="1590.0"/> <di:waypoint x="2495.0" y="1590.0"/>
</bpmndi:BPMNEdge> </bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="SequenceFlow_34" id="BPMNEdge_SequenceFlow_35" sourceElement="BPMNShape_IntermediateCatchEvent_51" targetElement="BPMNShape_Task_13"> <bpmndi:BPMNEdge bpmnElement="SequenceFlow_34" id="BPMNEdge_SequenceFlow_35" sourceElement="BPMNShape_IntermediateCatchEvent_51" targetElement="BPMNShape_Task_13">
<bpmndi:BPMNLabel id="BPMNLabel_96"/> <bpmndi:BPMNLabel id="BPMNLabel_96"/>
<di:waypoint x="1880.0333704529041" y="2065.0"/> <di:waypoint x="1880.0" y="2065.0"/>
<di:waypoint x="1866.0" y="2065.0"/> <di:waypoint x="1866.0" y="2065.0"/>
<di:waypoint x="1866.0" y="2030.0"/> <di:waypoint x="1866.0" y="2030.0"/>
</bpmndi:BPMNEdge> </bpmndi:BPMNEdge>
@ -5929,12 +5929,12 @@ Export erfolgt über eine asynchrone Verarbeitung im Modell 'cargosoft-export']]
<bpmndi:BPMNEdge bpmnElement="Association_8" id="BPMNEdge_Association_8" sourceElement="BPMNShape_DataObject_4" targetElement="BPMNShape_Task_16"> <bpmndi:BPMNEdge bpmnElement="Association_8" id="BPMNEdge_Association_8" sourceElement="BPMNShape_DataObject_4" targetElement="BPMNShape_Task_16">
<bpmndi:BPMNLabel id="BPMNLabel_243"/> <bpmndi:BPMNLabel id="BPMNLabel_243"/>
<di:waypoint x="780.0" y="385.0"/> <di:waypoint x="780.0" y="385.0"/>
<di:waypoint x="749.0" y="385.0"/> <di:waypoint x="750.0" y="385.0"/>
<di:waypoint x="749.0" y="320.0"/> <di:waypoint x="750.0" y="320.0"/>
</bpmndi:BPMNEdge> </bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="SequenceFlow_104" id="BPMNEdge_SequenceFlow_105" sourceElement="BPMNShape_IntermediateCatchEvent_60" targetElement="BPMNShape_Task_2"> <bpmndi:BPMNEdge bpmnElement="SequenceFlow_104" id="BPMNEdge_SequenceFlow_105" sourceElement="BPMNShape_IntermediateCatchEvent_60" targetElement="BPMNShape_Task_2">
<bpmndi:BPMNLabel id="BPMNLabel_251"/> <bpmndi:BPMNLabel id="BPMNLabel_251"/>
<di:waypoint x="332.54992877478423" y="959.0"/> <di:waypoint x="333.0" y="959.0"/>
<di:waypoint x="363.0" y="959.0"/> <di:waypoint x="363.0" y="959.0"/>
<di:waypoint x="363.0" y="900.0"/> <di:waypoint x="363.0" y="900.0"/>
</bpmndi:BPMNEdge> </bpmndi:BPMNEdge>
@ -5950,15 +5950,15 @@ Export erfolgt über eine asynchrone Verarbeitung im Modell 'cargosoft-export']]
</bpmndi:BPMNEdge> </bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="SequenceFlow_119" id="BPMNEdge_SequenceFlow_120" sourceElement="BPMNShape_IntermediateCatchEvent_62" targetElement="BPMNShape_Task_13"> <bpmndi:BPMNEdge bpmnElement="SequenceFlow_119" id="BPMNEdge_SequenceFlow_120" sourceElement="BPMNShape_IntermediateCatchEvent_62" targetElement="BPMNShape_Task_13">
<bpmndi:BPMNLabel id="BPMNLabel_257"/> <bpmndi:BPMNLabel id="BPMNLabel_257"/>
<di:waypoint x="1809.9666295470959" y="2065.0"/> <di:waypoint x="1810.0" y="2065.0"/>
<di:waypoint x="1836.0" y="2065.0"/> <di:waypoint x="1836.0" y="2065.0"/>
<di:waypoint x="1836.0" y="2030.0"/> <di:waypoint x="1836.0" y="2030.0"/>
</bpmndi:BPMNEdge> </bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="SequenceFlow_126" id="BPMNEdge_SequenceFlow_127" sourceElement="BPMNShape_IntermediateCatchEvent_5" targetElement="BPMNShape_Task_16"> <bpmndi:BPMNEdge bpmnElement="SequenceFlow_126" id="BPMNEdge_SequenceFlow_127" sourceElement="BPMNShape_IntermediateCatchEvent_5" targetElement="BPMNShape_Task_16">
<bpmndi:BPMNLabel id="BPMNLabel_261"/> <bpmndi:BPMNLabel id="BPMNLabel_261"/>
<di:waypoint x="487.0" y="357.1114561800017"/> <di:waypoint x="485.0" y="357.0"/>
<di:waypoint x="487.0" y="337.0"/> <di:waypoint x="485.0" y="335.0"/>
<di:waypoint x="660.0" y="337.0"/> <di:waypoint x="660.0" y="335.0"/>
<di:waypoint x="660.0" y="320.0"/> <di:waypoint x="660.0" y="320.0"/>
</bpmndi:BPMNEdge> </bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="SequenceFlow_15" id="BPMNEdge_SequenceFlow_16" sourceElement="BPMNShape_ExclusiveGateway_5" targetElement="BPMNShape_Task_9"> <bpmndi:BPMNEdge bpmnElement="SequenceFlow_15" id="BPMNEdge_SequenceFlow_16" sourceElement="BPMNShape_ExclusiveGateway_5" targetElement="BPMNShape_Task_9">
@ -5969,8 +5969,8 @@ Export erfolgt über eine asynchrone Verarbeitung im Modell 'cargosoft-export']]
<bpmndi:BPMNEdge bpmnElement="Association_10" id="BPMNEdge_Association_10" sourceElement="BPMNShape_TextAnnotation_6" targetElement="BPMNShape_ExclusiveGateway_5"> <bpmndi:BPMNEdge bpmnElement="Association_10" id="BPMNEdge_Association_10" sourceElement="BPMNShape_TextAnnotation_6" targetElement="BPMNShape_ExclusiveGateway_5">
<bpmndi:BPMNLabel id="BPMNLabel_264"/> <bpmndi:BPMNLabel id="BPMNLabel_264"/>
<di:waypoint x="1056.0" y="1440.0"/> <di:waypoint x="1056.0" y="1440.0"/>
<di:waypoint x="1056.0" y="1560.5"/> <di:waypoint x="1056.0" y="1561.0"/>
<di:waypoint x="1181.0" y="1560.5"/> <di:waypoint x="1181.0" y="1561.0"/>
<di:waypoint x="1181.0" y="1594.0"/> <di:waypoint x="1181.0" y="1594.0"/>
</bpmndi:BPMNEdge> </bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="SequenceFlow_123" id="BPMNEdge_SequenceFlow_124" sourceElement="BPMNShape_IntermediateCatchEvent_63" targetElement="BPMNShape_Task_1"> <bpmndi:BPMNEdge bpmnElement="SequenceFlow_123" id="BPMNEdge_SequenceFlow_124" sourceElement="BPMNShape_IntermediateCatchEvent_63" targetElement="BPMNShape_Task_1">
@ -6002,7 +6002,7 @@ Export erfolgt über eine asynchrone Verarbeitung im Modell 'cargosoft-export']]
</bpmndi:BPMNEdge> </bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="SequenceFlow_24" id="BPMNEdge_SequenceFlow_25" sourceElement="BPMNShape_IntermediateCatchEvent_70" targetElement="BPMNShape_Task_9"> <bpmndi:BPMNEdge bpmnElement="SequenceFlow_24" id="BPMNEdge_SequenceFlow_25" sourceElement="BPMNShape_IntermediateCatchEvent_70" targetElement="BPMNShape_Task_9">
<bpmndi:BPMNLabel id="BPMNLabel_283"/> <bpmndi:BPMNLabel id="BPMNLabel_283"/>
<di:waypoint x="1236.0" y="1510.5884572681198"/> <di:waypoint x="1236.0" y="1511.0"/>
<di:waypoint x="1236.0" y="1526.0"/> <di:waypoint x="1236.0" y="1526.0"/>
<di:waypoint x="1239.0" y="1526.0"/> <di:waypoint x="1239.0" y="1526.0"/>
<di:waypoint x="1239.0" y="1604.0"/> <di:waypoint x="1239.0" y="1604.0"/>
@ -6035,16 +6035,16 @@ Export erfolgt über eine asynchrone Verarbeitung im Modell 'cargosoft-export']]
</bpmndi:BPMNShape> </bpmndi:BPMNShape>
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_ZFDfeA" id="BPMNEdge_s3vscQ" sourceElement="BPMNShape_Task_2" targetElement="BPMNShape_pqLMdw"> <bpmndi:BPMNEdge bpmnElement="sequenceFlow_ZFDfeA" id="BPMNEdge_s3vscQ" sourceElement="BPMNShape_Task_2" targetElement="BPMNShape_pqLMdw">
<di:waypoint x="350.0" y="859.0"/> <di:waypoint x="350.0" y="859.0"/>
<di:waypoint x="284.5" y="859.0"/> <di:waypoint x="285.0" y="859.0"/>
<di:waypoint x="284.5" y="789.0"/> <di:waypoint x="285.0" y="789.0"/>
<di:waypoint x="222.54992877478423" y="789.0"/> <di:waypoint x="223.0" y="789.0"/>
</bpmndi:BPMNEdge> </bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_l7lJjQ" id="BPMNEdge_G9LJIQ" sourceElement="BPMNShape_pqLMdw" targetElement="BPMNShape_jZi2gA"> <bpmndi:BPMNEdge bpmnElement="sequenceFlow_l7lJjQ" id="BPMNEdge_G9LJIQ" sourceElement="BPMNShape_pqLMdw" targetElement="BPMNShape_jZi2gA">
<di:waypoint x="205.0" y="767.0"/> <di:waypoint x="205.0" y="767.0"/>
<di:waypoint x="205.0" y="713.0"/> <di:waypoint x="205.0" y="713.0"/>
</bpmndi:BPMNEdge> </bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_acNhxg" id="BPMNEdge_kpAm0w" sourceElement="BPMNShape_IntermediateCatchEvent_2" targetElement="BPMNShape_ExclusiveGateway_10"> <bpmndi:BPMNEdge bpmnElement="sequenceFlow_acNhxg" id="BPMNEdge_kpAm0w" sourceElement="BPMNShape_IntermediateCatchEvent_2" targetElement="BPMNShape_ExclusiveGateway_10">
<di:waypoint x="697.7083835342094" y="420.0"/> <di:waypoint x="698.0" y="420.0"/>
<di:waypoint x="405.0" y="420.0"/> <di:waypoint x="405.0" y="420.0"/>
<di:waypoint x="405.0" y="670.0"/> <di:waypoint x="405.0" y="670.0"/>
</bpmndi:BPMNEdge> </bpmndi:BPMNEdge>
@ -6053,7 +6053,7 @@ Export erfolgt über eine asynchrone Verarbeitung im Modell 'cargosoft-export']]
<di:waypoint x="1733.0" y="1845.0"/> <di:waypoint x="1733.0" y="1845.0"/>
</bpmndi:BPMNEdge> </bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_W0RBHg" id="BPMNEdge_zNWORg" sourceElement="BPMNShape_IntermediateCatchEvent_14" targetElement="BPMNShape_Task_9"> <bpmndi:BPMNEdge bpmnElement="sequenceFlow_W0RBHg" id="BPMNEdge_zNWORg" sourceElement="BPMNShape_IntermediateCatchEvent_14" targetElement="BPMNShape_Task_9">
<di:waypoint x="1699.4115427318802" y="1854.0"/> <di:waypoint x="1699.0" y="1854.0"/>
<di:waypoint x="1330.0" y="1854.0"/> <di:waypoint x="1330.0" y="1854.0"/>
<di:waypoint x="1330.0" y="1640.0"/> <di:waypoint x="1330.0" y="1640.0"/>
</bpmndi:BPMNEdge> </bpmndi:BPMNEdge>

View file

Before

Width:  |  Height:  |  Size: 352 KiB

After

Width:  |  Height:  |  Size: 352 KiB

View file

Before

Width:  |  Height:  |  Size: 198 KiB

After

Width:  |  Height:  |  Size: 198 KiB

File diff suppressed because it is too large Load diff

View file

@ -113,7 +113,6 @@
<bpmn2:flowNodeRef>EndEvent_3</bpmn2:flowNodeRef> <bpmn2:flowNodeRef>EndEvent_3</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>IntermediateCatchEvent_7</bpmn2:flowNodeRef> <bpmn2:flowNodeRef>IntermediateCatchEvent_7</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>IntermediateCatchEvent_24</bpmn2:flowNodeRef> <bpmn2:flowNodeRef>IntermediateCatchEvent_24</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>event_882U4Q</bpmn2:flowNodeRef>
</bpmn2:lane> </bpmn2:lane>
<bpmn2:lane id="Lane_5" name="Buchhaltung"> <bpmn2:lane id="Lane_5" name="Buchhaltung">
<bpmn2:flowNodeRef>Task_5000</bpmn2:flowNodeRef> <bpmn2:flowNodeRef>Task_5000</bpmn2:flowNodeRef>
@ -166,6 +165,7 @@
<bpmn2:flowNodeRef>TextAnnotation_2</bpmn2:flowNodeRef> <bpmn2:flowNodeRef>TextAnnotation_2</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>IntermediateCatchEvent_62</bpmn2:flowNodeRef> <bpmn2:flowNodeRef>IntermediateCatchEvent_62</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>gateway_Al0gGg</bpmn2:flowNodeRef> <bpmn2:flowNodeRef>gateway_Al0gGg</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>event_882U4Q</bpmn2:flowNodeRef>
</bpmn2:lane> </bpmn2:lane>
</bpmn2:laneSet> </bpmn2:laneSet>
<bpmn2:task id="Task_5000" imixs:processid="5300" name="Approval"> <bpmn2:task id="Task_5000" imixs:processid="5300" name="Approval">
@ -215,6 +215,7 @@
<bpmn2:incoming>SequenceFlow_1</bpmn2:incoming> <bpmn2:incoming>SequenceFlow_1</bpmn2:incoming>
<bpmn2:incoming>SequenceFlow_123</bpmn2:incoming> <bpmn2:incoming>SequenceFlow_123</bpmn2:incoming>
<bpmn2:outgoing>SequenceFlow_32</bpmn2:outgoing> <bpmn2:outgoing>SequenceFlow_32</bpmn2:outgoing>
<bpmn2:incoming>sequenceFlow_55EZBw</bpmn2:incoming>
</bpmn2:task> </bpmn2:task>
<bpmn2:intermediateCatchEvent id="IntermediateCatchEvent_5000-10" imixs:activityid="10" name="Save"> <bpmn2:intermediateCatchEvent id="IntermediateCatchEvent_5000-10" imixs:activityid="10" name="Save">
<bpmn2:extensionElements> <bpmn2:extensionElements>
@ -454,7 +455,6 @@ function oeffnefenster (url) {
<bpmn2:incoming>SequenceFlow_134</bpmn2:incoming> <bpmn2:incoming>SequenceFlow_134</bpmn2:incoming>
<bpmn2:outgoing>SequenceFlow_37</bpmn2:outgoing> <bpmn2:outgoing>SequenceFlow_37</bpmn2:outgoing>
<bpmn2:outgoing>sequenceFlow_ZFDfeA</bpmn2:outgoing> <bpmn2:outgoing>sequenceFlow_ZFDfeA</bpmn2:outgoing>
<bpmn2:incoming>sequenceFlow_55EZBw</bpmn2:incoming>
</bpmn2:task> </bpmn2:task>
<bpmn2:sequenceFlow id="SequenceFlow_37" sourceRef="Task_5005" targetRef="EventBasedGateway_2"> <bpmn2:sequenceFlow id="SequenceFlow_37" sourceRef="Task_5005" targetRef="EventBasedGateway_2">
<bpmn2:documentation id="documentation_jEZaiQ"/> <bpmn2:documentation id="documentation_jEZaiQ"/>
@ -4983,7 +4983,7 @@ Export erfolgt über eine asynchrone Verarbeitung im Modell 'cargosoft-export']]
<bpmn2:outgoing>sequenceFlow_55EZBw</bpmn2:outgoing> <bpmn2:outgoing>sequenceFlow_55EZBw</bpmn2:outgoing>
<bpmn2:signalEventDefinition id="signalEventDefinition_rExnUg" signalRef="signal_8"/> <bpmn2:signalEventDefinition id="signalEventDefinition_rExnUg" signalRef="signal_8"/>
</bpmn2:intermediateCatchEvent> </bpmn2:intermediateCatchEvent>
<bpmn2:sequenceFlow id="sequenceFlow_55EZBw" sourceRef="event_882U4Q" targetRef="Task_5005"> <bpmn2:sequenceFlow id="sequenceFlow_55EZBw" sourceRef="event_882U4Q" targetRef="Task_5000">
<bpmn2:documentation id="documentation_Kxcrkw"/> <bpmn2:documentation id="documentation_Kxcrkw"/>
</bpmn2:sequenceFlow> </bpmn2:sequenceFlow>
</bpmn2:process> </bpmn2:process>
@ -5000,10 +5000,10 @@ Export erfolgt über eine asynchrone Verarbeitung im Modell 'cargosoft-export']]
<dc:Bounds height="522.6666870117188" width="2630.0" x="80.0" y="50.0"/> <dc:Bounds height="522.6666870117188" width="2630.0" x="80.0" y="50.0"/>
</bpmndi:BPMNShape> </bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="Lane_2" id="BPMNShape_Lane_2" isHorizontal="true"> <bpmndi:BPMNShape bpmnElement="Lane_2" id="BPMNShape_Lane_2" isHorizontal="true">
<dc:Bounds height="586.6666870117188" width="2630.0" x="80.0" y="572.0"/> <dc:Bounds height="549.6666870117188" width="2630.0" x="80.0" y="572.0"/>
</bpmndi:BPMNShape> </bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="Lane_5" id="BPMNShape_Lane_5" isHorizontal="true"> <bpmndi:BPMNShape bpmnElement="Lane_5" id="BPMNShape_Lane_5" isHorizontal="true">
<dc:Bounds height="1020.6666259765625" width="2630.0" x="80.0" y="1158.0"/> <dc:Bounds height="1057.6666259765625" width="2630.0" x="80.0" y="1121.0"/>
</bpmndi:BPMNShape> </bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="StartEvent_1" id="BPMNShape_StartEvent_1"> <bpmndi:BPMNShape bpmnElement="StartEvent_1" id="BPMNShape_StartEvent_1">
<dc:Bounds height="36.0" width="36.0" x="117.0" y="187.0"/> <dc:Bounds height="36.0" width="36.0" x="117.0" y="187.0"/>
@ -6154,16 +6154,15 @@ Export erfolgt über eine asynchrone Verarbeitung im Modell 'cargosoft-export']]
<di:waypoint x="2410.0" y="1615.0"/> <di:waypoint x="2410.0" y="1615.0"/>
</bpmndi:BPMNEdge> </bpmndi:BPMNEdge>
<bpmndi:BPMNShape bpmnElement="event_882U4Q" id="BPMNShape_aouI6Q"> <bpmndi:BPMNShape bpmnElement="event_882U4Q" id="BPMNShape_aouI6Q">
<dc:Bounds height="36.0" width="36.0" x="427.0" y="1057.0"/> <dc:Bounds height="36.0" width="36.0" x="817.0" y="1447.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_CVy0sA"> <bpmndi:BPMNLabel id="BPMNLabel_CVy0sA">
<dc:Bounds height="20.0" width="100.0" x="395.0" y="1096.0"/> <dc:Bounds height="20.0" width="100.0" x="785.0" y="1486.0"/>
</bpmndi:BPMNLabel> </bpmndi:BPMNLabel>
</bpmndi:BPMNShape> </bpmndi:BPMNShape>
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_55EZBw" id="BPMNEdge_WdplwQ" sourceElement="BPMNShape_aouI6Q" targetElement="BPMNShape_Task_2"> <bpmndi:BPMNEdge bpmnElement="sequenceFlow_55EZBw" id="BPMNEdge_WdplwQ" sourceElement="BPMNShape_aouI6Q" targetElement="BPMNShape_Task_1">
<di:waypoint x="445.0" y="1057.0"/> <di:waypoint x="817.0" y="1465.0"/>
<di:waypoint x="445.0" y="980.0"/> <di:waypoint x="770.0" y="1465.0"/>
<di:waypoint x="435.0" y="980.0"/> <di:waypoint x="770.0" y="1590.0"/>
<di:waypoint x="435.0" y="900.0"/>
</bpmndi:BPMNEdge> </bpmndi:BPMNEdge>
</bpmndi:BPMNPlane> </bpmndi:BPMNPlane>
<bpmndi:BPMNLabelStyle id="BPMNLabelStyle_1"> <bpmndi:BPMNLabelStyle id="BPMNLabelStyle_1">