neuer workflow mahnlauf

This commit is contained in:
Ralph Soika 2022-10-05 14:07:33 +02:00
parent 95c3298ac9
commit dae4560a69
11 changed files with 17341 additions and 437 deletions

69
OP_MODULE.md Normal file
View file

@ -0,0 +1,69 @@
Frau Mahner
sollen wir üfung auf Übereinstimmung Zahlugnsbetrag und saldo machen?
Sonder Fall
FM Systemmöbel GmbH & Co. KG
Hallo Frau Beste,
anbei senden wir Ihnen eine OP Beispiel-Datei aus Imixs, welche die offenen Rechnungen enhält. Diese Datei ist analog zu der Datei "OPD28.txt" die Sie täglich von Frau Mahner erhalten.
Diese Datei unterscheidet sich zu der DATEV Datei, welche Frau Mahner bisher schickt, wie folgt:
- Die Datei enthält nur Rechnungen und keine Zahlungseingänge.
- Wir exportieren nur die ersten 12 Spalten (A - L), d.h:
- kein Gegenkonto
- keine Fälligkeit/Zahlungsbedinung
- keine Rechnungsposition
- keine Umsatzsteuer
Wir haben in das Beispiel bewusst einen Sonderfall für den Debitor 180124 eingebaut.
Dieser hat 2 Offenen Rechnungen:
RG-Nr Betrag
180124 2.900,00 EUR
180127 1.600,00 USD (Kurs 1.018102)
Es wurden 2 Teilzahlungen a 500 EUR bzw. USD bezahlt.
Dies stellt sich dann wie folgt dar:
10968 Papierfabrik Wattens GmbH & Co. KG 180124 24082022 23102022 2900 0,00 2400 S 0,000000 0,00
10968 Papierfabrik Wattens GmbH & Co. KG 180127 24082022 23102022 1600 0,00 1100 S USD 1.018102 1571.55
Bitte bestätigen Sie uns das diese Format von Ihnen so verarbeitet werden kann.
Wir improtieren pro Monat und Tag die Rechungen
wir exporiterne aber immer alle offneen Rechnungen egeal von wlecher Period
# Demo
einfach:
-----------
Dieffenbacher GmbH
Drewsen Spezialpapiere GmbH & Co. KG
besonders
-------------
Maersk Deutschland A/S & Co. KG
Papierfabrik Wattens GmbH & Co. KG

View file

@ -258,4 +258,19 @@ public class OPListController implements Serializable {
}
/**
* Berechnet den gesammten OP Saldo
*
* @return
*/
public double calculateInvoiceSaldo() {
double result = 0;
for (ItemCollection invoice : invoiceList) {
result = result + invoice.getItemValueDouble("invoice.saldo");
}
// rond with 2 digits
return Math.round(result * 100.0) / 100.0;
}
}

View file

@ -36,341 +36,354 @@ import com.alexanderlogistics.KreditorDebitorService;
* werden.
* <p>
* In der Spalte Belegart-4 steht das Fäligkeitsdatum.
*
* <p>
* Beim Import wird auch der Kreditor geprüft und aus diesem das
* Länderkennzeichen übernommen.
*
* @version 1.0
* @author rsoika
*/
public class DatevCargosoftImportAdapter implements SignalAdapter {
private static Logger logger = Logger.getLogger(DatevCargosoftImportAdapter.class.getName());
private static Logger logger = Logger.getLogger(DatevCargosoftImportAdapter.class.getName());
public static final String ENCODING = "ISO-8859-1";
public static final String CHILD_ITEM_PROPERTY = "_ChildItems";
public static final String ENCODING = "ISO-8859-1";
public static final String CHILD_ITEM_PROPERTY = "_ChildItems";
@Inject
WorkflowService workflowService;
@Inject
WorkflowService workflowService;
@Inject
DocumentService documentService;
@Inject
DocumentService documentService;
@Inject
KreditorDebitorService kreditorDebitorService;
@Inject
KreditorDebitorService kreditorDebitorService;
/**
* This method finds or create the Datev Export and adds a reference
* ($workitemref) to the current invoice.
*
* @throws PluginException
*/
@Override
public ItemCollection execute(ItemCollection workitem, ItemCollection event)
throws AdapterException, PluginException {
/**
* This method finds or create the Datev Export and adds a reference
* ($workitemref) to the current invoice.
*
* @throws PluginException
*/
@Override
public ItemCollection execute(ItemCollection workitem, ItemCollection event)
throws AdapterException, PluginException {
logger.info("...parse datev file import...");
try {
List<String> log = readData(workitem);
workitem.setItemValue("import.log", log);
} catch (ModelException e) {
throw new AdapterException(PluginException.class.getSimpleName(), DatevImportAdapter.DATEV_IMPORT_ERROR,
"Failed to import datev data!", e);
logger.info("...parse datev file import...");
try {
List<String> log = readData(workitem);
workitem.setItemValue("import.log", log);
} catch (ModelException e) {
throw new AdapterException(PluginException.class.getSimpleName(), DatevImportAdapter.DATEV_IMPORT_ERROR,
"Failed to import datev data!", e);
}
return workitem;
}
}
return workitem;
}
/**
* Liest die datenzeilen ab Zeile 3 aus und bildet worktiems gruppiert nach
* belegnummer
*
* <p>
* Belegfeld-1 ist hier ein eindeutiger Schlüssel für die Erzeugung von
* Splitbuchungen
*
* @param document
* @throws PluginException
* @throws ModelException
* @throws ProcessingErrorException
* @throws AccessDeniedException
*/
private List<String> readData(ItemCollection workitem)
throws PluginException, AccessDeniedException, ProcessingErrorException, ModelException {
List<String> logBuffer = new ArrayList<String>();
int line = 0;
int positions = 0;
int invoices = 0;
int dupplicates = 0;
/**
* Liest die datenzeilen ab Zeile 3 aus und bildet worktiems gruppiert nach
* belegnummer
*
* <p>
* Belegfeld-1 ist hier ein eindeutiger Schlüssel für die Erzeugung von
* Splitbuchungen
*
* @param document
* @throws PluginException
* @throws ModelException
* @throws ProcessingErrorException
* @throws AccessDeniedException
*/
private List<String> readData(ItemCollection workitem)
throws PluginException, AccessDeniedException, ProcessingErrorException, ModelException {
List<String> logBuffer = new ArrayList<String>();
int line = 0;
int positions = 0;
int invoices = 0;
int dupplicates = 0;
String dataLine;
// Start Datum Wirtschaftsjahr berechnen (JJJJMMTT)
String wjBeginn = workitem.getItemValueString("datev.WJ-Beginn");
String wjBeginnMonat = wjBeginn.substring(4, 6);
SimpleDateFormat dateFormatter = new SimpleDateFormat("yyyyMMdd");
String dataLine;
// Start Datum Wirtschaftsjahr berechnen (JJJJMMTT)
String wjBeginn = workitem.getItemValueString("datev.WJ-Beginn");
String wjBeginnMonat = wjBeginn.substring(4, 6);
SimpleDateFormat dateFormatter = new SimpleDateFormat("yyyyMMdd");
ItemCollection invoiceWorkitem = null;
List<ItemCollection> splitBuchungen = new ArrayList<ItemCollection>();
ItemCollection invoiceWorkitem = null;
List<ItemCollection> splitBuchungen = new ArrayList<ItemCollection>();
FileData fileData = workitem.getFileData().get(0);
ByteArrayInputStream imputStream = new ByteArrayInputStream(fileData.getContent());
FileData fileData = workitem.getFileData().get(0);
ByteArrayInputStream imputStream = new ByteArrayInputStream(fileData.getContent());
log(logBuffer, "Importdatei: " + fileData.getName());
try {
BufferedReader in = new BufferedReader(new InputStreamReader(imputStream, ENCODING));
log(logBuffer, "Importdatei: " + fileData.getName());
try {
BufferedReader in = new BufferedReader(new InputStreamReader(imputStream, ENCODING));
// skip header
in.readLine();
in.readLine();
// skip header
in.readLine();
in.readLine();
// read content....
line = 0;
int blockSize = 0;
while ((dataLine = in.readLine()) != null) {
line++;
if (blockSize >= 100) {
blockSize = 0;
logger.info(line + " entries read....");
}
// read content....
line = 0;
int blockSize = 0;
while ((dataLine = in.readLine()) != null) {
line++;
if (blockSize >= 100) {
blockSize = 0;
logger.info(line + " entries read....");
}
// alle werte parsen
String[] header1List = dataLine.split(";(?=([^\"]*\"[^\"]*\")*[^\"]*$)", 99);
if (header1List.length < 6) {
throw new PluginException(DatevCargosoftImportAdapter.class.getName(),
DatevImportAdapter.DATEV_IMPORT_ERROR, "Invalid data in line " + line);
}
// alle werte parsen
String[] header1List = dataLine.split(";(?=([^\"]*\"[^\"]*\")*[^\"]*$)", 99);
if (header1List.length < 6) {
throw new PluginException(DatevCargosoftImportAdapter.class.getName(),
DatevImportAdapter.DATEV_IMPORT_ERROR, "Invalid data in line " + line);
}
String belegNummer = DatevImportAdapter.csvVal(header1List[10]);
String gegenKonto = DatevImportAdapter.csvVal(header1List[7]);
String text = DatevImportAdapter.csvVal(header1List[13]);
String buchungsTag = DatevImportAdapter.csvVal(header1List[9]);
// cargosoft laesst gerne die führende 0 weg....
if (buchungsTag.length() == 3) {
buchungsTag = "0" + buchungsTag;
}
// berechne Buchungsdatum DDMM
String tag = buchungsTag.substring(0, 2);
String monat = buchungsTag.substring(2, 4);
String jahr = wjBeginn.substring(0, 4);
// compute next year if start of WJ is not January
if (Integer.parseInt(wjBeginnMonat) > Integer.parseInt(monat)) {
jahr = Integer.parseInt(jahr + 1) + "";
}
Date dateBuchung = dateFormatter.parse(jahr + monat + tag);
// Fälligkeit
Date dueDate = dateFormatter.parse(DatevImportAdapter.csvVal(header1List[23]));
String paymentTerm = DatevImportAdapter.csvVal(header1List[31]);
String waehrung = DatevImportAdapter.csvVal(header1List[2]);
String belegNummer = DatevImportAdapter.csvVal(header1List[10]);
String gegenKonto = DatevImportAdapter.csvVal(header1List[7]);
String text = DatevImportAdapter.csvVal(header1List[13]);
String buchungsTag = DatevImportAdapter.csvVal(header1List[9]);
// cargosoft laesst gerne die führende 0 weg....
if (buchungsTag.length() == 3) {
buchungsTag = "0" + buchungsTag;
}
// berechne Buchungsdatum DDMM
String tag = buchungsTag.substring(0, 2);
String monat = buchungsTag.substring(2, 4);
String jahr = wjBeginn.substring(0, 4);
// compute next year if start of WJ is not January
if (Integer.parseInt(wjBeginnMonat) > Integer.parseInt(monat)) {
jahr = Integer.parseInt(jahr + 1) + "";
}
Date dateBuchung = dateFormatter.parse(jahr + monat + tag);
// Fälligkeit
Date dueDate = dateFormatter.parse(DatevImportAdapter.csvVal(header1List[23]));
String paymentTerm = DatevImportAdapter.csvVal(header1List[31]);
String waehrung = DatevImportAdapter.csvVal(header1List[2]);
// kurse
double kurs = parseBetrag(DatevImportAdapter.csvVal(header1List[3]));
double basisumsatz = parseBetrag(DatevImportAdapter.csvVal(header1List[4]));
// kurse
double kurs = parseBetrag(DatevImportAdapter.csvVal(header1List[3]));
double basisumsatz = parseBetrag(DatevImportAdapter.csvVal(header1List[4]));
// Skip Eingangsrechnungen
if (!gegenKonto.startsWith("1")) {
// skip
continue;
}
// Skip Eingangsrechnungen
if (!gegenKonto.startsWith("1")) {
// skip
continue;
}
positions++;
logger.info("...read dbtr: " + gegenKonto + " beleg-nr: " + belegNummer);
positions++;
logger.info("...read dbtr: " + gegenKonto + " beleg-nr: " + belegNummer);
// Erzeuge einen Buchungssatz
ItemCollection dataItemCol = new ItemCollection();
dataItemCol.setItemValue("datev.text", text);
dataItemCol.setItemValue("datev.umsatz", parseBetrag(DatevImportAdapter.csvVal(header1List[0])));
dataItemCol.setItemValue("datev.shzeichen", DatevImportAdapter.csvVal(header1List[1]));
dataItemCol.setItemValue("datev.wkz", waehrung);
dataItemCol.setItemValue("datev.kurs", parseBetrag(DatevImportAdapter.csvVal(header1List[3])));
dataItemCol.setItemValue("datev.basisumsatz", parseBetrag(DatevImportAdapter.csvVal(header1List[4])));
dataItemCol.setItemValue("datev.konto", DatevImportAdapter.csvVal(header1List[6]));
// Erzeuge einen Buchungssatz
ItemCollection dataItemCol = new ItemCollection();
dataItemCol.setItemValue("datev.text", text);
dataItemCol.setItemValue("datev.umsatz", parseBetrag(DatevImportAdapter.csvVal(header1List[0])));
dataItemCol.setItemValue("datev.shzeichen", DatevImportAdapter.csvVal(header1List[1]));
dataItemCol.setItemValue("datev.wkz", waehrung);
dataItemCol.setItemValue("datev.kurs", parseBetrag(DatevImportAdapter.csvVal(header1List[3])));
dataItemCol.setItemValue("datev.basisumsatz", parseBetrag(DatevImportAdapter.csvVal(header1List[4])));
dataItemCol.setItemValue("datev.konto", DatevImportAdapter.csvVal(header1List[6]));
// Haben wir schon eine Invoice Workitem angelegt?
if (invoiceWorkitem == null) {
logger.info("...create new workitem....");
// erzeuge ein neues
try {
invoiceWorkitem = createEmptyInvoice(belegNummer, text, gegenKonto, dateBuchung, dueDate,
paymentTerm, waehrung, kurs, basisumsatz);
invoices++;
} catch (AdapterException e) {
dupplicates++;
continue;
}
}
// Haben wir schon eine Invoice Workitem angelegt?
if (invoiceWorkitem == null) {
logger.info("...create new workitem....");
// erzeuge ein neues
try {
invoiceWorkitem = createEmptyInvoice(belegNummer, text, gegenKonto, dateBuchung, dueDate,
paymentTerm, waehrung, kurs, basisumsatz);
invoices++;
} catch (AdapterException e) {
dupplicates++;
continue;
}
}
// ist es noch die selbe Belegnummer?
if (belegNummer.equals(invoiceWorkitem.getItemValueString("invoice.number"))) {
// adde die Splitbuchung
splitBuchungen.add(dataItemCol);
logger.info("...add splitbuchung....");
} else {
logger.info("...close workitem....");
// ist es noch die selbe Belegnummer?
if (belegNummer.equals(invoiceWorkitem.getItemValueString("invoice.number"))) {
// adde die Splitbuchung
splitBuchungen.add(dataItemCol);
logger.info("...add splitbuchung....");
} else {
logger.info("...close workitem....");
// nein - also invoice schließen
closeInvoiceWorkitem(invoiceWorkitem, splitBuchungen);
invoiceWorkitem=null;
// neue Splitbuchungstabelle anlegen
splitBuchungen = new ArrayList<ItemCollection>();
// invoice zurücksetzten
// erzeuge ein neues
try {
invoiceWorkitem = createEmptyInvoice(belegNummer, text, gegenKonto, dateBuchung, dueDate,
paymentTerm, waehrung, kurs, basisumsatz);
invoices++;
} catch (AdapterException e) {
dupplicates++;
continue;
}
splitBuchungen.add(dataItemCol);
}
// nein - also invoice schließen
closeInvoiceWorkitem(invoiceWorkitem, splitBuchungen);
invoiceWorkitem = null;
// neue Splitbuchungstabelle anlegen
splitBuchungen = new ArrayList<ItemCollection>();
// invoice zurücksetzten
// erzeuge ein neues
try {
invoiceWorkitem = createEmptyInvoice(belegNummer, text, gegenKonto, dateBuchung, dueDate,
paymentTerm, waehrung, kurs, basisumsatz);
invoices++;
} catch (AdapterException e) {
dupplicates++;
continue;
}
splitBuchungen.add(dataItemCol);
}
} // wile end
closeInvoiceWorkitem(invoiceWorkitem, splitBuchungen);
} // wile end
closeInvoiceWorkitem(invoiceWorkitem, splitBuchungen);
} catch (IOException | ParseException e) {
throw new PluginException(DatevCargosoftImportAdapter.class.getName(),
DatevImportAdapter.DATEV_IMPORT_ERROR, "Unable to read file", e);
}
} catch (IOException | ParseException e) {
throw new PluginException(DatevCargosoftImportAdapter.class.getName(),
DatevImportAdapter.DATEV_IMPORT_ERROR, "Unable to read file", e);
}
log(logBuffer, line + " Zeilen eingelesen ");
log(logBuffer, positions + " Rechnungspositionen eingelesen ");
log(logBuffer, invoices + " Rechnungen importiert ");
if (dupplicates > 0) {
log(logBuffer, dupplicates + " Rechnungen wurden übersprungen da diese bereits importiert wurden!");
}
log(logBuffer, line + " Zeilen eingelesen ");
log(logBuffer, positions + " Rechnungspositionen eingelesen ");
log(logBuffer, invoices + " Rechnungen importiert ");
if (dupplicates > 0) {
log(logBuffer, dupplicates + " Rechnungen wurden übersprungen da diese bereits importiert wurden!");
}
// return log
return logBuffer;
// return log
return logBuffer;
}
}
/**
* This method returns a new empty invoice ItemCollection.
* <p>
* The method tests if an invoice with this number already exits. If so, the
* method throws a AdapterException
*
* @param belegNummer
* @param text
* @param gegenKonto
* @param dateBuchung
* @param dueDate
* @param paymentTerm
* @param currency
* @param kurs
* @param basisUmsatz
* @return
* @throws AdapterException
*/
private ItemCollection createEmptyInvoice(String belegNummer, String text, String gegenKonto, Date dateBuchung,
Date dueDate, String paymentTerm, String currency, double kurs, double basisUmsatz)
throws AdapterException {
/**
* This method returns a new empty invoice ItemCollection.
* <p>
* The method tests if an invoice with this number already exits. If so, the
* method throws a AdapterException
*
* @param belegNummer
* @param text
* @param gegenKonto
* @param dateBuchung
* @param dueDate
* @param paymentTerm
* @param currency
* @param kurs
* @param basisUmsatz
* @return
* @throws AdapterException
*/
private ItemCollection createEmptyInvoice(String belegNummer, String text, String gegenKonto, Date dateBuchung,
Date dueDate, String paymentTerm, String currency, double kurs, double basisUmsatz)
throws AdapterException {
// test if invoice was already imported before
String sQuery = "((type:workitem OR type:workitemarchive) AND $modelversion:rechnungsausgang* AND invoice.number:\""+belegNummer+"\")";
try {
// find the textblock...
List<ItemCollection> result = documentService.find(sQuery, 1, 0);
if (result.size() > 0) {
throw new AdapterException(DatevCargosoftImportAdapter.class.getName(), "DUPPLICATE",
"Invoice already imported");
}
} catch (QueryException e) {
logger.warning("failed to search invoices by query: " + e.getMessage());
}
// test if invoice was already imported before
String sQuery = "((type:workitem OR type:workitemarchive) AND $modelversion:rechnungsausgang* AND invoice.number:\""
+ belegNummer + "\")";
try {
// find the textblock...
List<ItemCollection> result = documentService.find(sQuery, 1, 0);
if (result.size() > 0) {
throw new AdapterException(DatevCargosoftImportAdapter.class.getName(), "DUPPLICATE",
"Invoice already imported");
}
} catch (QueryException e) {
logger.warning("failed to search invoices by query: " + e.getMessage());
}
ItemCollection invoiceWorkitem = new ItemCollection();
invoiceWorkitem.setItemValue("invoice.number", belegNummer);
invoiceWorkitem.setItemValue("invoice.currency", currency);
invoiceWorkitem.setItemValue("invoice.text", text);
invoiceWorkitem.setItemValue("invoice.date", dateBuchung);
invoiceWorkitem.setItemValue("dbtr.number", gegenKonto);
invoiceWorkitem.setItemValue("invoice.duedate", dueDate);
invoiceWorkitem.setItemValue("invoice.reminder", dueDate);
invoiceWorkitem.setItemValue("payment.term", paymentTerm);
ItemCollection invoiceWorkitem = new ItemCollection();
invoiceWorkitem.setItemValue("invoice.number", belegNummer);
invoiceWorkitem.setItemValue("invoice.currency", currency);
invoiceWorkitem.setItemValue("invoice.text", text);
invoiceWorkitem.setItemValue("invoice.date", dateBuchung);
invoiceWorkitem.setItemValue("dbtr.number", gegenKonto);
invoiceWorkitem.setItemValue("invoice.duedate", dueDate);
invoiceWorkitem.setItemValue("invoice.reminder", dueDate);
invoiceWorkitem.setItemValue("payment.term", paymentTerm);
invoiceWorkitem.setItemValue("invoice.rate", kurs);
invoiceWorkitem.setItemValue("invoice.base.amount", basisUmsatz);
invoiceWorkitem.setItemValue("invoice.rate", kurs);
invoiceWorkitem.setItemValue("invoice.base.amount", basisUmsatz);
return invoiceWorkitem;
}
return invoiceWorkitem;
}
private void log(List<String> log, String message) {
log.add(new Date() + ": " + message+"\n");
}
private void log(List<String> log, String message) {
log.add(new Date() + ": " + message + "\n");
}
/**
* . entfernen , mit punkt ersetzten
*
* @param value
* @return
*/
public Double parseBetrag(String value) {
/**
* . entfernen , mit punkt ersetzten
*
* @param value
* @return
*/
public Double parseBetrag(String value) {
value = value.replace(".", "");
value = value.replace(",", ".");
value = value.replace(".", "");
value = value.replace(",", ".");
return new Double(value);
}
return new Double(value);
}
/**
* Diese Hilfsmethod schließt das Invoice Workitem ab
*
* @throws ModelException
* @throws PluginException
* @throws ProcessingErrorException
* @throws AccessDeniedException
*/
private void closeInvoiceWorkitem(ItemCollection invoiceWorkitem, List<ItemCollection> splitBuchungen)
throws AccessDeniedException, ProcessingErrorException, PluginException, ModelException {
if (invoiceWorkitem == null) {
return; // no op
}
/**
* Diese Hilfsmethod schließt das Invoice Workitem ab
*
* @throws ModelException
* @throws PluginException
* @throws ProcessingErrorException
* @throws AccessDeniedException
*/
private void closeInvoiceWorkitem(ItemCollection invoiceWorkitem, List<ItemCollection> splitBuchungen)
throws AccessDeniedException, ProcessingErrorException, PluginException, ModelException {
if (invoiceWorkitem == null) {
return; // no op
}
// berechne Total:
double total = 0;
for (ItemCollection zeile : splitBuchungen) {
if ("H".equals(zeile.getItemValueString("datev.shzeichen"))) {
total = total + zeile.getItemValueDouble("datev.umsatz");
} else {
total = total - zeile.getItemValueDouble("datev.umsatz");
}
}
// berechne Total:
double total = 0;
for (ItemCollection zeile : splitBuchungen) {
if ("H".equals(zeile.getItemValueString("datev.shzeichen"))) {
total = total + zeile.getItemValueDouble("datev.umsatz");
} else {
total = total - zeile.getItemValueDouble("datev.umsatz");
}
}
invoiceWorkitem.setItemValue("invoice.total", total);
invoiceWorkitem.setItemValue("invoice.saldo", total);
// implode die Splitbuchungen
implodeChildList(invoiceWorkitem, splitBuchungen);
invoiceWorkitem.setItemValue("invoice.total", total);
invoiceWorkitem.setItemValue("invoice.saldo", total);
// implode die Splitbuchungen
implodeChildList(invoiceWorkitem, splitBuchungen);
// set dbtr.name
ItemCollection dbtrItemCol = kreditorDebitorService
.findDebitor(invoiceWorkitem.getItemValueString("dbtr.number"));
if (dbtrItemCol != null) {
invoiceWorkitem.setItemValue("dbtr.name", dbtrItemCol.getItemValueString("_VENDOR_Name"));
}
// set dbtr.name
ItemCollection dbtrItemCol = kreditorDebitorService
.findDebitor(invoiceWorkitem.getItemValueString("dbtr.number"));
if (dbtrItemCol != null) {
invoiceWorkitem.setItemValue("dbtr.name", dbtrItemCol.getItemValueString("_VENDOR_Name"));
// Anhand der Creditoren Stammdaten errrechnen wir die Sprache für diese
// Rechnung
String country = dbtrItemCol.getItemValueString("_VENDOR_COUNTRY");
invoiceWorkitem.setItemValue("dbtr.country", country);
if (country.isEmpty() || country.equalsIgnoreCase("de") || country.equalsIgnoreCase("ch")
|| country.equalsIgnoreCase("at")) {
invoiceWorkitem.setItemValue("invoice.language", "DE");
} else {
invoiceWorkitem.setItemValue("invoice.language", "EN");
}
}
// Processe die Invoice
invoiceWorkitem.model("rechnungsausgang-de-1.0").task(5001).event(980);
workflowService.processWorkItem(invoiceWorkitem);
// Processe die Invoice
invoiceWorkitem.model("rechnungsausgang-de-1.0").task(5001).event(980);
workflowService.processWorkItem(invoiceWorkitem);
}
}
/**
* Convert the List of ItemCollections back into a List of Map elements
*
* @param workitem
*/
@SuppressWarnings({ "rawtypes" })
private void implodeChildList(ItemCollection workitem, List<ItemCollection> childItems) {
List<Map> mapOrderItems = new ArrayList<Map>();
// convert the child ItemCollection elements into a List of Map
if (childItems != null) {
logger.fine("Convert child items into Map...");
// iterate over all order items..
for (ItemCollection orderItem : childItems) {
mapOrderItems.add(orderItem.getAllItems());
}
workitem.replaceItemValue(CHILD_ITEM_PROPERTY, mapOrderItems);
}
}
/**
* Convert the List of ItemCollections back into a List of Map elements
*
* @param workitem
*/
@SuppressWarnings({ "rawtypes" })
private void implodeChildList(ItemCollection workitem, List<ItemCollection> childItems) {
List<Map> mapOrderItems = new ArrayList<Map>();
// convert the child ItemCollection elements into a List of Map
if (childItems != null) {
logger.fine("Convert child items into Map...");
// iterate over all order items..
for (ItemCollection orderItem : childItems) {
mapOrderItems.add(orderItem.getAllItems());
}
workitem.replaceItemValue(CHILD_ITEM_PROPERTY, mapOrderItems);
}
}
}

View file

@ -25,6 +25,10 @@
<th style="text-align: left;">Status</th>
<th style="text-align: right;">S/H</th>
<th style="width: 40px;"></th>
<th style="width: 70px; text-align: right;">Kurs</th>
<th style="width: 100px; text-align: right;">Basisumsatz</th>
<th style="width: 100px;">Saldo</th>
<th style="width: 100px;">Zahlbetrag</th>
<th style=""></th>
@ -62,6 +66,14 @@
<td style="text-align:right;"><h:outputText value="#{invoice.item['invoice.rate']}" /></td>
<td style="text-align: right;"><h:outputText
value="#{invoice.item['invoice.base.amount']}" >
<f:convertNumber minFractionDigits="2" locale="de" />
</h:outputText></td>
<!-- Saldo / offene Betrag -->
<td style="text-align: right; color: red;"><h:outputText
@ -117,7 +129,7 @@
</strong></td>
<td />
<td />
<td /><td /><td />
<!-- Payment total -->
<td style="text-align: right;"><strong> <h:panelGroup

View file

@ -0,0 +1,213 @@
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:c="http://java.sun.com/jsp/jstl/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:i="http://java.sun.com/jsf/composite/imixs"
xmlns:marty="http://java.sun.com/jsf/composite/marty">
<!-- Shows the op liste fo rthe current dbtr.number -->
<h:commandScript name="calculateOpSummary"
execute="invoiceRefHolder_ID" render="opcalculater_id" />
<h:panelGroup layout="block" styleClass="imixs-form-section"
id="oplist-table" binding="#{opListContainer}">
<table style="width: 100%; margin: 5px;">
<tr>
<th style="text-align: left;">#{message['form.invoicenumber']}</th>
<th style="text-align: left;">#{message['form.date']}</th>
<th style="text-align: left;">#{message['form.deadline']}</th>
<th style="text-align: left;">Status</th>
<th style="text-align: right;">S/H</th>
<th style="width: 40px;"></th>
<th style="width: 100px;">Offener Saldo</th>
<th style="">Mahnen</th>
</tr>
<ui:param name="invoices"
value="#{opListController.getInvoices(workitem.item['dbtr.number'])}"></ui:param>
<ui:repeat value="#{invoices}" var="invoice">
<tr>
<td><h:link outcome="/pages/workitems/workitem">
#{invoice.item['invoice.number']}
<f:param name="id" value="#{invoice.item['$uniqueid']}" />
</h:link></td>
<td><h:outputText value="#{invoice.item['invoice.date']}">
<f:convertDateTime pattern="#{message.datePatternShort}"
timeZone="#{message.timeZone}" />
</h:outputText></td>
<td><h:outputText value="#{invoice.item['invoice.duedate']}">
<f:convertDateTime pattern="#{message.datePatternShort}"
timeZone="#{message.timeZone}" />
</h:outputText></td>
<td><h:outputText value="#{invoice.item['$workflowstatus']}" /></td>
<!-- Rechnngsbetrag -->
<td style="text-align: right;"><h:outputText
value="#{invoice.item['invoice.total']}">
<f:convertNumber minFractionDigits="2" locale="de" />
</h:outputText></td>
<td><h:outputText value="#{invoice.item['invoice.currency']}" /></td>
<!-- Saldo / offene Betrag -->
<td style="text-align: right; color: red;"><h:outputText
value="#{invoice.item['invoice.saldo']}">
<f:convertNumber minFractionDigits="2" locale="de" />
</h:outputText></td>
<!-- CheckBox -->
<td style="text-align: center;"><h:selectBooleanCheckbox class="invoice_selector" rendered="#{!readonly}"
value="#{invoice.item['selected']}"
onclick="initInvoicePayment(this)">
<f:ajax event="change" execute="#{opListContainer.clientId}"
listener="#{opListController.updateChildList(workitem)}"
render="#{opListContainer.clientId}"></f:ajax>
</h:selectBooleanCheckbox></td>
</tr>
</ui:repeat>
<tr style="border-top: 1px solid #ccc;">
<td />
<td /><td />
<td><strong>Summary</strong></td>
<!-- Invoice total -->
<td style="text-align: right;"><strong> <h:panelGroup
id="invoice_total">
<h:outputText value="#{opListController.calculateInvoiceTotal()}">
<f:convertNumber minFractionDigits="2" locale="de" />
</h:outputText>
</h:panelGroup>
</strong></td>
<td />
<td style="text-align: right;"><strong> <h:panelGroup
id="invoice_total">
<h:outputText value="#{opListController.calculateInvoiceSaldo()}">
<f:convertNumber minFractionDigits="2" locale="de" />
</h:outputText>
</h:panelGroup>
</strong></td>
<td />
</tr>
</table>
<!-- dieses feld speichert die selection der rechnungen -->
<h:inputTextarea id="invoiceRefHolder_ID"
converter="org.imixs.VectorConverter" class="invoice_selection_list"
style="display:none;" value="#{workitem.itemList['$workitemref']}" />
</h:panelGroup>
<script type="text/javascript">
/*<![CDATA[*/
$(document).ready(
function() {
// update the checkboxes of the stored invoice uniqueIDs
// updateInvoiceSelection();
});
// set the payment amount to the invoice total if the field is still empty
function initInvoicePayment(element) {
console.log('...initInovicePayment...'+element.checked);
var currentTD=$(element).closest('td');
var prevTD=$(currentTD).prev().prev();
var amountValue=$(prevTD).text();
var amountTD=$(currentTD).prev();
//var amountInput=$("input",amountTD);
// wenn wir noch keinen wert dann betrag übernehmen
/* if (element.checked) {
if ($(amountInput).val()=='' || $(amountInput).val()=='0,00') {
$(amountInput).val(amountValue);
}
} else {
// clear value
$(amountInput).val("");
} */
}
// This method refreshs the layout of the invoice checkboxes
function updateInvoiceSelection() {
selection = $('.invoice_selection_list').val();
const selectionArr = selection.split("\n");
for (const invoiceID of selectionArr) {
if (invoiceID && invoiceID!="") {
$("#"+invoiceID).prop('checked', true);//=true;
}
}
// on change handler....
$('input[type="checkbox"].selection_checkbox').change(
function() {
var id = $(this).attr('id');
var check = $(this).prop('checked');
//console.log("Change: " + id + " to " + check);
// get selection
var selection = $('.invoice_selection_list')
.val();
const selectionArr = selection.split("\n");
// selected
if (check) {
selectionArr.push(id);
}
// unselected
if (!check) {
var i = selectionArr.indexOf(id);
selectionArr.splice(i, i);
}
//console.log("new selection=" + selectionArr.join(','));
selection = $('.invoice_selection_list').val(
selectionArr.join('\n'));
// refresh the opcalculator...
calculateOpSummary();
});
}
/*
* Hilfsmethode die nur fur Ajax Events in JSF render verwendet wird
*/
function ajaxUpdateInvoiceSelection(data) {
if (data.status === 'success') {
updateInvoiceSelection();
}
}
/*]]>*/
</script>
</ui:composition>

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -14,12 +14,8 @@
<properties>
<!-- <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
because of resource filtering is enabled we can not use UTF-8 for some strange
reasons. When setting sourceEncoding to ISO-8859-1 the special german charcters
works fine
<project.build.sourceEncoding>ISO-8859-1</project.build.sourceEncoding>
-->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<!-- Build Time -->
<org.imixs.build.timestamp>${maven.build.timestamp}</org.imixs.build.timestamp>
<maven.build.timestamp.format>yyyyMMddHHmmss</maven.build.timestamp.format>

View file

@ -0,0 +1,672 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- origin at X=0.0 Y=0.0 -->
<bpmn2:definitions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 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:tl="http://www.w3.org/2001/XMLSchema" id="Definitions_1" exporter="org.eclipse.bpmn2.modeler.core" exporterVersion="1.5.4.RC1-v20220528-0836-B1" name="Definitions 1" targetNamespace="http://www.imixs.org/bpmn2">
<bpmn2:extensionElements>
<imixs:item name="txtworkflowmodelversion" type="xs:string">
<imixs:value><![CDATA[mahnlauf-de-1.0]]></imixs:value>
</imixs:item>
<imixs:item name="txtfieldmapping" type="xs:string">
<imixs:value><![CDATA[Prozess-Verantwortliche| namprocessmanager]]></imixs:value>
<imixs:value><![CDATA[Prozess-Assistenz | namprocessassist]]></imixs:value>
<imixs:value><![CDATA[Buchhaltung | namprocessteam]]></imixs:value>
</imixs:item>
<imixs:item name="txttimefieldmapping" type="xs:string">
<imixs:value><![CDATA[Wiedervorlage | datDate]]></imixs:value>
<imixs:value><![CDATA[Start | datFrom]]></imixs:value>
<imixs:value><![CDATA[Ende | datTo]]></imixs:value>
</imixs:item>
<imixs:item name="txtplugins" type="xs:string">
<imixs:value><![CDATA[org.imixs.workflow.engine.plugins.ResultPlugin]]></imixs:value>
<imixs:value><![CDATA[org.imixs.workflow.engine.plugins.RulePlugin]]></imixs:value>
<imixs:value><![CDATA[org.imixs.marty.profile.ProfilePlugin]]></imixs:value>
<imixs:value><![CDATA[org.imixs.marty.plugins.SequenceNumberPlugin]]></imixs:value>
<imixs:value><![CDATA[org.imixs.marty.team.TeamPlugin]]></imixs:value>
<imixs:value><![CDATA[org.imixs.marty.profile.DeputyPlugin]]></imixs:value>
<imixs:value><![CDATA[org.imixs.workflow.engine.plugins.OwnerPlugin]]></imixs:value>
<imixs:value><![CDATA[org.imixs.workflow.engine.plugins.HistoryPlugin]]></imixs:value>
<imixs:value><![CDATA[org.imixs.workflow.engine.plugins.LogPlugin]]></imixs:value>
<imixs:value><![CDATA[org.imixs.workflow.engine.plugins.ApplicationPlugin]]></imixs:value>
<imixs:value><![CDATA[org.imixs.marty.plugins.CommentPlugin]]></imixs:value>
<imixs:value><![CDATA[org.imixs.marty.profile.MailPlugin]]></imixs:value>
</imixs:item>
</bpmn2:extensionElements>
<bpmn2:signal id="Signal_1" name="com.alexanderlogistics.ZahlungsavisExportAdapter"/>
<bpmn2:signal id="Signal_2" name="com.alexanderlogistics.ZahlungseingangSaldoAdapter"/>
<bpmn2:message id="Message_2" name="HTML-Header">
<bpmn2:documentation id="Documentation_22"><![CDATA[<html>
<head>
<style type="text/css">
html, body, div, p, h1, h2, h3, ul, ol, span, a, table, td, form, img,
li {
font-family: Arial;
font-style: normal;
font-variant: normal;
font-weight: normal;
font-size: 11pt;
}
body {
margin: 0;
padding: 1em;
min-width: 41em;
}
h2 {
font-size: 12pt;
font-weight: bold;
}
th {
border-bottom: 1px solid #ccc;
}
td { border:none;min-width:120px; }
th { font-weight: bold;}
</style>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title><itemvalue>$workflowstatus</itemvalue></title>
</head>
<body>]]></bpmn2:documentation>
</bpmn2:message>
<bpmn2:message id="Message_4" name="HTML-Footer-EN">
<bpmn2:documentation id="Documentation_23"><![CDATA[<p>In case you have already made the payment, please disregard this notice. If you require any information regarding your account, please do not hesitate to contact us.</p>
<p>Thank you for your cooperation.</p>
<p>&nbsp;</p>
<p>Kind regards<br />Alexander Global Logistics GmbH</p>
</body>
</html>]]></bpmn2:documentation>
</bpmn2:message>
<bpmn2:message id="Message_7" name="Html-Footer-DE"/>
<bpmn2:collaboration id="Collaboration_1" name="Zahlungseingang">
<bpmn2:participant id="Participant_1" name="Mahnlauf" processRef="Process_1"/>
<bpmn2:participant id="Participant_2" name="SEPA-Export Pool" processRef="eingangsrechnung-de"/>
</bpmn2:collaboration>
<bpmn2:process id="eingangsrechnung-de" name="SEPA-Export" isExecutable="false"/>
<bpmn2:process id="Process_1" name="Mahnlauf" definitionalCollaborationRef="Collaboration_1" isExecutable="false">
<bpmn2:laneSet id="LaneSet_1" name="Lane Set 1">
<bpmn2:lane id="Lane_1" name="Buchhaltung">
<bpmn2:flowNodeRef>StartEvent_1</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>Task_1</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>IntermediateCatchEvent_3</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>Task_2</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>EndEvent_3</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>IntermediateCatchEvent_6</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>IntermediateCatchEvent_1</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>ExclusiveGateway_1</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>IntermediateCatchEvent_4</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>ExclusiveGateway_2</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>IntermediateCatchEvent_2</bpmn2:flowNodeRef>
</bpmn2:lane>
</bpmn2:laneSet>
<bpmn2:startEvent id="StartEvent_1" name="Start">
<bpmn2:outgoing>SequenceFlow_4</bpmn2:outgoing>
</bpmn2:startEvent>
<bpmn2:task id="Task_2" imixs:processid="1900" name="Versendet">
<bpmn2:extensionElements>
<imixs:item name="txtworkflowsummary" type="xs:string">
<imixs:value><![CDATA[<itemvalue format="dd. MM.yyyy">$lasteventdate</itemvalue> - <itemvalue>payment.total</itemvalue> <itemvalue>payment.currency</itemvalue> (<itemvalue>dbtr.number</itemvalue> - <itemvalue>dbtr.name</itemvalue>)]]></imixs:value>
</imixs:item>
<imixs:item name="keyupdateacl" type="xs:boolean">
<imixs:value>true</imixs:value>
</imixs:item>
<imixs:item name="keyownershipfields" type="xs:string"/>
<imixs:item name="keyaddwritefields" type="xs:string"/>
<imixs:item name="keyaddreadfields" type="xs:string"/>
<imixs:item name="txtimageurl" type="xs:string">
<imixs:value><![CDATA[typcn-mail||||typcn-tick,imixs-success]]></imixs:value>
</imixs:item>
<imixs:item name="txteditorid" type="xs:string">
<imixs:value><![CDATA[form_basic_read]]></imixs:value>
</imixs:item>
<imixs:item name="txttype" type="xs:string">
<imixs:value><![CDATA[workitemarchive]]></imixs:value>
</imixs:item>
<imixs:item name="txtworkflowabstract" type="CDATA">
<imixs:value><![CDATA[]]></imixs:value>
</imixs:item>
<imixs:item name="namaddreadaccess" type="xs:string">
<imixs:value><![CDATA[{process:?:member}]]></imixs:value>
</imixs:item>
</bpmn2:extensionElements>
<bpmn2:documentation id="Documentation_4"><![CDATA[<textblock><itemvalue>$workflowgroup</itemvalue> - <itemvalue>$workflowstatus</itemvalue></textblock>]]></bpmn2:documentation>
<bpmn2:incoming>SequenceFlow_6</bpmn2:incoming>
<bpmn2:incoming>SequenceFlow_15</bpmn2:incoming>
<bpmn2:outgoing>SequenceFlow_10</bpmn2:outgoing>
</bpmn2:task>
<bpmn2:sequenceFlow id="SequenceFlow_10" sourceRef="Task_2" targetRef="EndEvent_3"/>
<bpmn2:endEvent id="EndEvent_3" name="End">
<bpmn2:incoming>SequenceFlow_10</bpmn2:incoming>
</bpmn2:endEvent>
<bpmn2:task id="Task_1" imixs:processid="1000" name="Erfassung">
<bpmn2:extensionElements>
<imixs:item name="txtworkflowsummary" type="xs:string">
<imixs:value><![CDATA[<itemvalue format="dd. MM.yyyy">$lasteventdate</itemvalue> - <itemvalue>payment.total</itemvalue> <itemvalue>payment.currency</itemvalue> (<itemvalue>dbtr.number</itemvalue> - <itemvalue>dbtr.name</itemvalue>)]]></imixs:value>
</imixs:item>
<imixs:item name="txteditorid" type="xs:string">
<imixs:value><![CDATA[alexander/form_basic]]></imixs:value>
</imixs:item>
<imixs:item name="txtimageurl" type="xs:string">
<imixs:value><![CDATA[typcn-mail||]]></imixs:value>
</imixs:item>
<imixs:item name="txttype" type="xs:string">
<imixs:value><![CDATA[workitem]]></imixs:value>
</imixs:item>
<imixs:item name="keyupdateacl" type="xs:boolean">
<imixs:value>true</imixs:value>
</imixs:item>
<imixs:item name="keyownershipfields" type="xs:string">
<imixs:value><![CDATA[namprocessteam]]></imixs:value>
</imixs:item>
<imixs:item name="keyaddreadfields" type="xs:string"/>
<imixs:item name="keyaddwritefields" type="xs:string"/>
<imixs:item name="txtworkflowabstract" type="CDATA">
<imixs:value><![CDATA[]]></imixs:value>
</imixs:item>
<imixs:item name="namaddreadaccess" type="xs:string">
<imixs:value><![CDATA[{process:?:member}]]></imixs:value>
</imixs:item>
<imixs:item name="namaddwriteaccess" type="xs:string">
<imixs:value><![CDATA[{process:?:member}]]></imixs:value>
</imixs:item>
</bpmn2:extensionElements>
<bpmn2:documentation id="Documentation_3"><![CDATA[<textblock><itemvalue>$workflowgroup</itemvalue> - <itemvalue>$workflowstatus</itemvalue></textblock>]]></bpmn2:documentation>
<bpmn2:incoming>SequenceFlow_14</bpmn2:incoming>
<bpmn2:incoming>SequenceFlow_4</bpmn2:incoming>
<bpmn2:outgoing>SequenceFlow_2</bpmn2:outgoing>
</bpmn2:task>
<bpmn2:intermediateCatchEvent id="IntermediateCatchEvent_6" imixs:activityid="10" name="Speichern">
<bpmn2:extensionElements>
<imixs:item name="keylogtimeformat" type="xs:string">
<imixs:value><![CDATA[2]]></imixs:value>
</imixs:item>
<imixs:item name="keyarchive" type="xs:string">
<imixs:value><![CDATA[0]]></imixs:value>
</imixs:item>
<imixs:item name="txtmailsubject" type="xs:string">
<imixs:value><![CDATA[]]></imixs:value>
</imixs:item>
<imixs:item name="keyaccessmode" type="xs:string">
<imixs:value><![CDATA[0]]></imixs:value>
</imixs:item>
<imixs:item name="keyscheduledactivity" type="xs:string">
<imixs:value><![CDATA[0]]></imixs:value>
</imixs:item>
<imixs:item name="rtfmailbody" type="xs:string">
<imixs:value><![CDATA[]]></imixs:value>
</imixs:item>
<imixs:item name="keyversion" type="xs:string">
<imixs:value><![CDATA[0]]></imixs:value>
</imixs:item>
<imixs:item name="keyaddwritefields" type="xs:string"/>
<imixs:item name="numnextactivityid" type="xs:int">
<imixs:value><![CDATA[0]]></imixs:value>
</imixs:item>
<imixs:item name="keyfollowup" type="xs:string">
<imixs:value><![CDATA[2]]></imixs:value>
</imixs:item>
<imixs:item name="keypublicresult" type="xs:string">
<imixs:value><![CDATA[1]]></imixs:value>
</imixs:item>
<imixs:item name="keylogdateformat" type="xs:string">
<imixs:value><![CDATA[2]]></imixs:value>
</imixs:item>
<imixs:item name="keyownershipfields" type="xs:string"/>
<imixs:item name="numnextid" type="xs:int">
<imixs:value><![CDATA[5000]]></imixs:value>
</imixs:item>
<imixs:item name="txtnextprocesstree" type="xs:string">
<imixs:value><![CDATA[]]></imixs:value>
</imixs:item>
<imixs:item name="txtactivityresult" type="xs:string">
<imixs:value><![CDATA[]]></imixs:value>
</imixs:item>
<imixs:item name="txtname" type="xs:string">
<imixs:value><![CDATA[Speichern]]></imixs:value>
</imixs:item>
<imixs:item name="keyownershipmode" type="xs:string">
<imixs:value><![CDATA[0]]></imixs:value>
</imixs:item>
<imixs:item name="rtfresultlog" type="xs:string">
<imixs:value><![CDATA[]]></imixs:value>
</imixs:item>
<imixs:item name="keyupdateacl" type="xs:boolean">
<imixs:value>false</imixs:value>
</imixs:item>
</bpmn2:extensionElements>
<bpmn2:documentation id="Documentation_10"><![CDATA[Zwischenspeichern]]></bpmn2:documentation>
<bpmn2:outgoing>SequenceFlow_6</bpmn2:outgoing>
</bpmn2:intermediateCatchEvent>
<bpmn2:sequenceFlow id="SequenceFlow_6" sourceRef="IntermediateCatchEvent_6" targetRef="Task_2"/>
<bpmn2:intermediateCatchEvent id="IntermediateCatchEvent_3" imixs:activityid="10" name="Speichern">
<bpmn2:extensionElements>
<imixs:item name="keylogtimeformat" type="xs:string">
<imixs:value><![CDATA[2]]></imixs:value>
</imixs:item>
<imixs:item name="keyarchive" type="xs:string">
<imixs:value><![CDATA[0]]></imixs:value>
</imixs:item>
<imixs:item name="txtmailsubject" type="xs:string">
<imixs:value><![CDATA[]]></imixs:value>
</imixs:item>
<imixs:item name="keyaccessmode" type="xs:string">
<imixs:value><![CDATA[0]]></imixs:value>
</imixs:item>
<imixs:item name="keyscheduledactivity" type="xs:string">
<imixs:value><![CDATA[0]]></imixs:value>
</imixs:item>
<imixs:item name="rtfmailbody" type="xs:string">
<imixs:value><![CDATA[]]></imixs:value>
</imixs:item>
<imixs:item name="keyversion" type="xs:string">
<imixs:value><![CDATA[0]]></imixs:value>
</imixs:item>
<imixs:item name="keyaddwritefields" type="xs:string"/>
<imixs:item name="numnextactivityid" type="xs:int">
<imixs:value><![CDATA[0]]></imixs:value>
</imixs:item>
<imixs:item name="keyfollowup" type="xs:string">
<imixs:value><![CDATA[2]]></imixs:value>
</imixs:item>
<imixs:item name="keypublicresult" type="xs:string">
<imixs:value><![CDATA[1]]></imixs:value>
</imixs:item>
<imixs:item name="keylogdateformat" type="xs:string">
<imixs:value><![CDATA[2]]></imixs:value>
</imixs:item>
<imixs:item name="keyownershipfields" type="xs:string"/>
<imixs:item name="numnextid" type="xs:int">
<imixs:value><![CDATA[5000]]></imixs:value>
</imixs:item>
<imixs:item name="txtnextprocesstree" type="xs:string">
<imixs:value><![CDATA[]]></imixs:value>
</imixs:item>
<imixs:item name="txtactivityresult" type="xs:string">
<imixs:value><![CDATA[<item name="comment" ignore="true"/>]]></imixs:value>
</imixs:item>
<imixs:item name="txtname" type="xs:string">
<imixs:value><![CDATA[Speichern]]></imixs:value>
</imixs:item>
<imixs:item name="keyownershipmode" type="xs:string">
<imixs:value><![CDATA[0]]></imixs:value>
</imixs:item>
<imixs:item name="rtfresultlog" type="xs:string">
<imixs:value><![CDATA[]]></imixs:value>
</imixs:item>
<imixs:item name="keyupdateacl" type="xs:boolean">
<imixs:value>false</imixs:value>
</imixs:item>
</bpmn2:extensionElements>
<bpmn2:documentation id="Documentation_12"><![CDATA[Zwischenspeichern]]></bpmn2:documentation>
<bpmn2:outgoing>SequenceFlow_14</bpmn2:outgoing>
</bpmn2:intermediateCatchEvent>
<bpmn2:sequenceFlow id="SequenceFlow_14" sourceRef="IntermediateCatchEvent_3" targetRef="Task_1"/>
<bpmn2:sequenceFlow id="SequenceFlow_4" sourceRef="StartEvent_1" targetRef="Task_1"/>
<bpmn2:dataObject id="DataObject_1" name="Form">
<bpmn2:documentation id="Documentation_17"><![CDATA[<?xml version="1.0"?>
<imixs-form>
<imixs-form-section columns="2">
<item name="dbtr.number" type="text" required="true" label="Debitor:" />
<item name="name" type="textarea" label="Bemerkung:" />
</imixs-form-section>
<imixs-form-section label="Offene Posten" path="alexander/section_opliste_mahnlauf" readonly="false" />
</imixs-form>]]></bpmn2:documentation>
<bpmn2:dataState id="DataState_1"/>
</bpmn2:dataObject>
<bpmn2:intermediateCatchEvent id="IntermediateCatchEvent_1" imixs:activityid="20" name="Senden">
<bpmn2:extensionElements>
<imixs:item name="keylogtimeformat" type="xs:string">
<imixs:value><![CDATA[2]]></imixs:value>
</imixs:item>
<imixs:item name="keyarchive" type="xs:string">
<imixs:value><![CDATA[0]]></imixs:value>
</imixs:item>
<imixs:item name="txtmailsubject" type="xs:string">
<imixs:value><![CDATA[]]></imixs:value>
</imixs:item>
<imixs:item name="keyaccessmode" type="xs:string">
<imixs:value><![CDATA[0]]></imixs:value>
</imixs:item>
<imixs:item name="keyscheduledactivity" type="xs:string">
<imixs:value><![CDATA[0]]></imixs:value>
</imixs:item>
<imixs:item name="rtfmailbody" type="xs:string">
<imixs:value><![CDATA[]]></imixs:value>
</imixs:item>
<imixs:item name="keyversion" type="xs:string">
<imixs:value><![CDATA[0]]></imixs:value>
</imixs:item>
<imixs:item name="keyaddwritefields" type="xs:string"/>
<imixs:item name="numnextactivityid" type="xs:int">
<imixs:value><![CDATA[0]]></imixs:value>
</imixs:item>
<imixs:item name="keyfollowup" type="xs:string">
<imixs:value><![CDATA[2]]></imixs:value>
</imixs:item>
<imixs:item name="keypublicresult" type="xs:string">
<imixs:value><![CDATA[1]]></imixs:value>
</imixs:item>
<imixs:item name="keylogdateformat" type="xs:string">
<imixs:value><![CDATA[2]]></imixs:value>
</imixs:item>
<imixs:item name="keyownershipfields" type="xs:string"/>
<imixs:item name="numnextid" type="xs:int">
<imixs:value><![CDATA[5000]]></imixs:value>
</imixs:item>
<imixs:item name="txtnextprocesstree" type="xs:string">
<imixs:value><![CDATA[]]></imixs:value>
</imixs:item>
<imixs:item name="txtactivityresult" type="xs:string">
<imixs:value><![CDATA[<item name="action">home</item>]]></imixs:value>
</imixs:item>
<imixs:item name="txtname" type="xs:string">
<imixs:value><![CDATA[Speichern]]></imixs:value>
</imixs:item>
<imixs:item name="keyownershipmode" type="xs:string">
<imixs:value><![CDATA[0]]></imixs:value>
</imixs:item>
<imixs:item name="rtfresultlog" type="xs:string">
<imixs:value><![CDATA[Zahlungseingang abgeschlossen und Rechnungen abgeglichen.]]></imixs:value>
</imixs:item>
<imixs:item name="keyupdateacl" type="xs:boolean">
<imixs:value>false</imixs:value>
</imixs:item>
</bpmn2:extensionElements>
<bpmn2:documentation id="Documentation_1"><![CDATA[Zahlungseingang abschließen und Rechnungen abgleichen]]></bpmn2:documentation>
<bpmn2:incoming>SequenceFlow_2</bpmn2:incoming>
<bpmn2:outgoing>SequenceFlow_7</bpmn2:outgoing>
<bpmn2:outputSet id="OutputSet_2" name="Output Set 2"/>
</bpmn2:intermediateCatchEvent>
<bpmn2:sequenceFlow id="SequenceFlow_2" sourceRef="Task_1" targetRef="IntermediateCatchEvent_1"/>
<bpmn2:exclusiveGateway id="ExclusiveGateway_1" gatewayDirection="Diverging">
<bpmn2:incoming>SequenceFlow_7</bpmn2:incoming>
<bpmn2:outgoing>SequenceFlow_8</bpmn2:outgoing>
<bpmn2:outgoing>SequenceFlow_9</bpmn2:outgoing>
</bpmn2:exclusiveGateway>
<bpmn2:intermediateCatchEvent id="IntermediateCatchEvent_2" imixs:activityid="151" name="[Mail DE]">
<bpmn2:extensionElements>
<imixs:item name="rtfmailbody" type="CDATA">
<imixs:value><![CDATA[<bpmn2:message>Html-Header</bpmn2:message>
<textblock>E-Mail - Erinnerung (DE)</textblock>
<p>
<table>
<theader>
<tr>
<th>Rechnungsnummer</th>
<th>Datum</th>
<th>Fälligkeit</th>
<th>Rechnungsbetrag</th>
<th>Saldo</th>
</tr>
</theader>
<tbody>
<td><itemvalue>invoice.number</itemvalue></td>
<td style="text-align:center;"><itemvalue format="dd.MM.yyyy">invoice.date</itemvalue></td>
<td style="text-align:center;"><itemvalue format="dd.MM.yyyy">invoice.duedate</itemvalue></td>
<td style="text-align:right;"><itemvalue format="#,###,##0.00" locale="de_DE">invoice.total</itemvalue> <itemvalue>invoice.currency</itemvalue></td>
<td style="text-align:right;"><itemvalue format="#,###,##0.00" locale="de_DE">invoice.saldo</itemvalue> <itemvalue>invoice.currency</itemvalue></td>
</tr>
</tbody>
</table>
</p>
<bpmn2:message>Html-Footer-DE</bpmn2:message>
]]></imixs:value>
</imixs:item>
<imixs:item name="txtmailsubject" type="xs:string">
<imixs:value><![CDATA[Mahnung]]></imixs:value>
</imixs:item>
<imixs:item name="nammailreceiver" type="xs:string">
<imixs:value><![CDATA[ralph.soika@imixs.com]]></imixs:value>
<imixs:value><![CDATA[gaby.heinle@imixs.com]]></imixs:value>
</imixs:item>
<imixs:item name="keypublicresult" type="xs:string">
<imixs:value><![CDATA[0]]></imixs:value>
</imixs:item>
</bpmn2:extensionElements>
<bpmn2:incoming>SequenceFlow_8</bpmn2:incoming>
<bpmn2:outgoing>SequenceFlow_11</bpmn2:outgoing>
<bpmn2:messageEventDefinition id="MessageEventDefinition_1"/>
</bpmn2:intermediateCatchEvent>
<bpmn2:intermediateCatchEvent id="IntermediateCatchEvent_4" imixs:activityid="152" name="[Mail EN]">
<bpmn2:extensionElements>
<imixs:item name="rtfmailbody" type="CDATA">
<imixs:value><![CDATA[<bpmn2:message>Html-Header</bpmn2:message>
<textblock>E-Mail - Erinnerung (EN)</textblock>
<p>
<table>
<theader>
<tr>
<th>Invoice Number</th>
<th>Date</th>
<th>Due Date</th>
<th>Invoice Amount</th>
<th>Balance</th>
</tr>
</theader>
<tbody>
<td><itemvalue>invoice.number</itemvalue></td>
<td style="text-align:center;"><itemvalue format="dd.MM.yyyy">invoice.date</itemvalue></td>
<td style="text-align:center;"><itemvalue format="dd.MM.yyyy">invoice.duedate</itemvalue></td>
<td style="text-align:right;"><itemvalue format="#,###,##0.00" locale="de_DE">invoice.total</itemvalue> <itemvalue>invoice.currency</itemvalue></td>
<td style="text-align:right;"><itemvalue format="#,###,##0.00" locale="de_DE">invoice.saldo</itemvalue> <itemvalue>invoice.currency</itemvalue></td>
</tr>
</tbody>
</table>
</p>
<bpmn2:message>Html-Footer-EN</bpmn2:message>
]]></imixs:value>
</imixs:item>
<imixs:item name="txtmailsubject" type="xs:string">
<imixs:value><![CDATA[Mahnung]]></imixs:value>
</imixs:item>
<imixs:item name="nammailreceiver" type="xs:string">
<imixs:value><![CDATA[ralph.soika@imixs.com]]></imixs:value>
<imixs:value><![CDATA[gaby.heinle@imixs.com]]></imixs:value>
</imixs:item>
<imixs:item name="keypublicresult" type="xs:string">
<imixs:value><![CDATA[0]]></imixs:value>
</imixs:item>
</bpmn2:extensionElements>
<bpmn2:incoming>SequenceFlow_9</bpmn2:incoming>
<bpmn2:outgoing>SequenceFlow_12</bpmn2:outgoing>
<bpmn2:messageEventDefinition id="MessageEventDefinition_2"/>
</bpmn2:intermediateCatchEvent>
<bpmn2:sequenceFlow id="SequenceFlow_7" sourceRef="IntermediateCatchEvent_1" targetRef="ExclusiveGateway_1"/>
<bpmn2:sequenceFlow id="SequenceFlow_8" sourceRef="ExclusiveGateway_1" targetRef="IntermediateCatchEvent_2">
<bpmn2:conditionExpression xsi:type="bpmn2:tFormalExpression" id="FormalExpression_1">workitem['invoice.language'] &amp;&amp; workitem['invoice.language'][0]==&quot;DE&quot; </bpmn2:conditionExpression>
</bpmn2:sequenceFlow>
<bpmn2:sequenceFlow id="SequenceFlow_9" sourceRef="ExclusiveGateway_1" targetRef="IntermediateCatchEvent_4"/>
<bpmn2:exclusiveGateway id="ExclusiveGateway_2" gatewayDirection="Converging">
<bpmn2:incoming>SequenceFlow_11</bpmn2:incoming>
<bpmn2:incoming>SequenceFlow_12</bpmn2:incoming>
<bpmn2:outgoing>SequenceFlow_15</bpmn2:outgoing>
</bpmn2:exclusiveGateway>
<bpmn2:sequenceFlow id="SequenceFlow_11" sourceRef="IntermediateCatchEvent_2" targetRef="ExclusiveGateway_2"/>
<bpmn2:sequenceFlow id="SequenceFlow_12" sourceRef="IntermediateCatchEvent_4" targetRef="ExclusiveGateway_2"/>
<bpmn2:sequenceFlow id="SequenceFlow_15" sourceRef="ExclusiveGateway_2" targetRef="Task_2"/>
<bpmn2:association id="Association_2" sourceRef="DataObject_1" targetRef="Task_1"/>
</bpmn2:process>
<bpmndi:BPMNDiagram id="BPMNDiagram_1" name="Default Process Diagram">
<bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="Collaboration_1">
<bpmndi:BPMNShape id="BPMNShape_Participant_1" bpmnElement="Participant_1" isHorizontal="true">
<dc:Bounds height="361.0" width="1181.0" x="100.0" y="150.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_29" labelStyle="BPMNLabelStyle_1">
<dc:Bounds height="51.0" width="14.0" x="106.0" y="305.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_Lane_1" bpmnElement="Lane_1" isHorizontal="true">
<dc:Bounds height="361.0" width="1151.0" x="130.0" y="150.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_37" labelStyle="BPMNLabelStyle_1">
<dc:Bounds height="69.0" width="14.0" x="136.0" y="296.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_1" bpmnElement="StartEvent_1">
<dc:Bounds height="36.0" width="36.0" x="180.0" y="301.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_1" labelStyle="BPMNLabelStyle_1">
<dc:Bounds height="14.0" width="25.0" x="185.0" y="337.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_Task_1" bpmnElement="Task_1">
<dc:Bounds height="50.0" width="110.0" x="290.0" y="294.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_4" labelStyle="BPMNLabelStyle_1">
<dc:Bounds height="14.0" width="55.0" x="317.0" y="312.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_EndEvent_2" bpmnElement="EndEvent_3">
<dc:Bounds height="36.0" width="36.0" x="920.0" y="301.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_85" labelStyle="BPMNLabelStyle_1">
<dc:Bounds height="14.0" width="22.0" x="927.0" y="337.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_Task_2" bpmnElement="Task_2">
<dc:Bounds height="50.0" width="110.0" x="680.0" y="294.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_5" labelStyle="BPMNLabelStyle_1">
<dc:Bounds height="14.0" width="55.0" x="707.0" y="312.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_IntermediateCatchEvent_6" bpmnElement="IntermediateCatchEvent_6">
<dc:Bounds height="36.0" width="36.0" x="717.0" y="392.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_10" labelStyle="BPMNLabelStyle_1">
<dc:Bounds height="14.0" width="56.0" x="707.0" y="428.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_IntermediateCatchEvent_3" bpmnElement="IntermediateCatchEvent_3">
<dc:Bounds height="36.0" width="36.0" x="327.0" y="392.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_21" labelStyle="BPMNLabelStyle_1">
<dc:Bounds height="14.0" width="56.0" x="317.0" y="428.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_DataObject_1" bpmnElement="DataObject_1">
<dc:Bounds height="50.0" width="36.0" x="290.0" y="188.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_13">
<dc:Bounds height="14.0" width="28.0" x="294.0" y="238.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_IntermediateCatchEvent_1" bpmnElement="IntermediateCatchEvent_1">
<dc:Bounds height="36.0" width="36.0" x="430.0" y="301.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_2" labelStyle="BPMNLabelStyle_1">
<dc:Bounds height="14.0" width="43.0" x="427.0" y="337.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_ExclusiveGateway_1" bpmnElement="ExclusiveGateway_1" isMarkerVisible="true">
<dc:Bounds height="50.0" width="50.0" x="480.0" y="294.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_18" labelStyle="BPMNLabelStyle_1"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_IntermediateCatchEvent_2" bpmnElement="IntermediateCatchEvent_2">
<dc:Bounds height="36.0" width="36.0" x="550.0" y="237.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_19" labelStyle="BPMNLabelStyle_1">
<dc:Bounds height="14.0" width="49.0" x="544.0" y="273.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_IntermediateCatchEvent_4" bpmnElement="IntermediateCatchEvent_4">
<dc:Bounds height="36.0" width="36.0" x="550.0" y="350.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_20" labelStyle="BPMNLabelStyle_1">
<dc:Bounds height="14.0" width="49.0" x="544.0" y="386.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_ExclusiveGateway_2" bpmnElement="ExclusiveGateway_2" isMarkerVisible="true">
<dc:Bounds height="50.0" width="50.0" x="605.0" y="294.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_30" labelStyle="BPMNLabelStyle_1"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_Message_1" bpmnElement="Message_2">
<dc:Bounds height="20.0" width="30.0" x="119.0" y="59.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_35">
<dc:Bounds height="14.0" width="78.0" x="95.0" y="79.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_Message_2" bpmnElement="Message_4">
<dc:Bounds height="20.0" width="30.0" x="230.0" y="59.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_39">
<dc:Bounds height="28.0" width="80.0" x="205.0" y="79.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_Message_4" bpmnElement="Message_7">
<dc:Bounds height="20.0" width="30.0" x="344.0" y="59.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_40">
<dc:Bounds height="28.0" width="69.0" x="325.0" y="79.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_10" bpmnElement="SequenceFlow_10" sourceElement="BPMNShape_Task_2" targetElement="BPMNShape_EndEvent_2">
<di:waypoint xsi:type="dc:Point" x="790.0" y="319.0"/>
<di:waypoint xsi:type="dc:Point" x="855.0" y="319.0"/>
<di:waypoint xsi:type="dc:Point" x="920.0" y="319.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_26"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_6" bpmnElement="SequenceFlow_6" sourceElement="BPMNShape_IntermediateCatchEvent_6" targetElement="BPMNShape_Task_2">
<di:waypoint xsi:type="dc:Point" x="735.0" y="392.0"/>
<di:waypoint xsi:type="dc:Point" x="735.0" y="368.0"/>
<di:waypoint xsi:type="dc:Point" x="735.0" y="344.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_14"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_14" bpmnElement="SequenceFlow_14" sourceElement="BPMNShape_IntermediateCatchEvent_3" targetElement="BPMNShape_Task_1">
<di:waypoint xsi:type="dc:Point" x="345.0" y="392.0"/>
<di:waypoint xsi:type="dc:Point" x="345.0" y="368.0"/>
<di:waypoint xsi:type="dc:Point" x="345.0" y="344.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_22"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_4" bpmnElement="SequenceFlow_4" sourceElement="BPMNShape_1" targetElement="BPMNShape_Task_1">
<di:waypoint xsi:type="dc:Point" x="216.0" y="319.0"/>
<di:waypoint xsi:type="dc:Point" x="253.0" y="319.0"/>
<di:waypoint xsi:type="dc:Point" x="290.0" y="319.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_11"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="BPMNEdge_Association_2" bpmnElement="Association_2" sourceElement="BPMNShape_DataObject_1" targetElement="BPMNShape_Task_1">
<di:waypoint xsi:type="dc:Point" x="326.0" y="213.0"/>
<di:waypoint xsi:type="dc:Point" x="345.0" y="213.0"/>
<di:waypoint xsi:type="dc:Point" x="345.0" y="294.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_17"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_2" bpmnElement="SequenceFlow_2" sourceElement="BPMNShape_Task_1" targetElement="BPMNShape_IntermediateCatchEvent_1">
<di:waypoint xsi:type="dc:Point" x="400.0" y="319.0"/>
<di:waypoint xsi:type="dc:Point" x="415.0" y="319.0"/>
<di:waypoint xsi:type="dc:Point" x="430.0" y="319.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_16"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_7" bpmnElement="SequenceFlow_7" sourceElement="BPMNShape_IntermediateCatchEvent_1" targetElement="BPMNShape_ExclusiveGateway_1">
<di:waypoint xsi:type="dc:Point" x="466.0" y="319.0"/>
<di:waypoint xsi:type="dc:Point" x="473.0" y="319.0"/>
<di:waypoint xsi:type="dc:Point" x="480.0" y="319.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_23"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_8" bpmnElement="SequenceFlow_8" sourceElement="BPMNShape_ExclusiveGateway_1" targetElement="BPMNShape_IntermediateCatchEvent_2">
<di:waypoint xsi:type="dc:Point" x="505.0" y="294.0"/>
<di:waypoint xsi:type="dc:Point" x="505.0" y="255.0"/>
<di:waypoint xsi:type="dc:Point" x="550.0" y="255.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_25"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_9" bpmnElement="SequenceFlow_9" sourceElement="BPMNShape_ExclusiveGateway_1" targetElement="BPMNShape_IntermediateCatchEvent_4">
<di:waypoint xsi:type="dc:Point" x="505.0" y="344.0"/>
<di:waypoint xsi:type="dc:Point" x="505.0" y="368.0"/>
<di:waypoint xsi:type="dc:Point" x="550.0" y="368.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_28"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_11" bpmnElement="SequenceFlow_11" sourceElement="BPMNShape_IntermediateCatchEvent_2" targetElement="BPMNShape_ExclusiveGateway_2">
<di:waypoint xsi:type="dc:Point" x="586.0" y="255.0"/>
<di:waypoint xsi:type="dc:Point" x="630.0" y="255.0"/>
<di:waypoint xsi:type="dc:Point" x="630.0" y="294.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_32"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_12" bpmnElement="SequenceFlow_12" sourceElement="BPMNShape_IntermediateCatchEvent_4" targetElement="BPMNShape_ExclusiveGateway_2">
<di:waypoint xsi:type="dc:Point" x="586.0" y="368.0"/>
<di:waypoint xsi:type="dc:Point" x="630.0" y="368.0"/>
<di:waypoint xsi:type="dc:Point" x="630.0" y="344.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_33"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_15" bpmnElement="SequenceFlow_15" sourceElement="BPMNShape_ExclusiveGateway_2" targetElement="BPMNShape_Task_2">
<di:waypoint xsi:type="dc:Point" x="655.0" y="319.0"/>
<di:waypoint xsi:type="dc:Point" x="667.0" y="319.0"/>
<di:waypoint xsi:type="dc:Point" x="680.0" y="319.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_34"/>
</bpmndi:BPMNEdge>
</bpmndi:BPMNPlane>
<bpmndi:BPMNLabelStyle id="BPMNLabelStyle_1">
<dc:Font name="arial" size="9.0"/>
</bpmndi:BPMNLabelStyle>
</bpmndi:BPMNDiagram>
</bpmn2:definitions>

View file

@ -121,22 +121,10 @@ th { font-weight: bold;}
<bpmn2:flowNodeRef>IntermediateThrowEvent_9</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>Task_1</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>IntermediateCatchEvent_8</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>Task_4</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>IntermediateCatchEvent_14</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>IntermediateThrowEvent_7</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>EndEvent_1</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>IntermediateCatchEvent_15</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>IntermediateThrowEvent_11</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>IntermediateThrowEvent_1</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>IntermediateCatchEvent_4</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>IntermediateThrowEvent_2</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>Task_3</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>IntermediateCatchEvent_5005-10</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>IntermediateThrowEvent_4</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>IntermediateCatchEvent_5</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>Task_5005</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>IntermediateThrowEvent_10</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>IntermediateCatchEvent_25</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>IntermediateCatchEvent_11</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>IntermediateCatchEvent_7</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>ExclusiveGateway_4</bpmn2:flowNodeRef>
@ -144,6 +132,17 @@ th { font-weight: bold;}
<bpmn2:flowNodeRef>IntermediateCatchEvent_9</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>ExclusiveGateway_6</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>IntermediateThrowEvent_5</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>IntermediateCatchEvent_25</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>Task_3</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>IntermediateThrowEvent_7</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>IntermediateCatchEvent_4</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>EndEvent_1</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>IntermediateCatchEvent_15</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>IntermediateThrowEvent_11</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>IntermediateThrowEvent_10</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>Task_4</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>IntermediateThrowEvent_4</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>IntermediateCatchEvent_14</bpmn2:flowNodeRef>
</bpmn2:lane>
</bpmn2:laneSet>
<bpmn2:intermediateCatchEvent id="IntermediateCatchEvent_5000-20" imixs:activityid="50" name="[Fälligkeit]">
@ -271,7 +270,6 @@ Bei Fragen wenden Sie sich bitte an info@imixs.com
</bpmn2:extensionElements>
<bpmn2:documentation id="Documentation_6"><![CDATA[<textblock><itemvalue>$workflowgroup</itemvalue> - <itemvalue>$workflowstatus</itemvalue></textblock>]]></bpmn2:documentation>
<bpmn2:incoming>SequenceFlow_38</bpmn2:incoming>
<bpmn2:incoming>SequenceFlow_22</bpmn2:incoming>
<bpmn2:incoming>SequenceFlow_43</bpmn2:incoming>
<bpmn2:outgoing>SequenceFlow_24</bpmn2:outgoing>
<bpmn2:outgoing>SequenceFlow_50</bpmn2:outgoing>
@ -1279,7 +1277,7 @@ result.isValid=true;
<imixs:value><![CDATA[]]></imixs:value>
</imixs:item>
<imixs:item name="txtactivityresult" type="xs:string">
<imixs:value><![CDATA[<item name="comment" ignore="true"/>]]></imixs:value>
<imixs:value><![CDATA[<item name="action">home</item>]]></imixs:value>
</imixs:item>
<imixs:item name="txtname" type="xs:string">
<imixs:value><![CDATA[Freigabe einholen]]></imixs:value>
@ -1329,7 +1327,7 @@ result.isValid=true;
</bpmn2:exclusiveGateway>
<bpmn2:sequenceFlow id="SequenceFlow_13" sourceRef="ExclusiveGateway_2" targetRef="Task_5"/>
<bpmn2:sequenceFlow id="SequenceFlow_18" sourceRef="Task_1" targetRef="ExclusiveGateway_3"/>
<bpmn2:intermediateCatchEvent id="IntermediateCatchEvent_14" imixs:activityid="15" name="Mahnen">
<bpmn2:intermediateCatchEvent id="IntermediateCatchEvent_14" imixs:activityid="15" name="[Mahnlauf]">
<bpmn2:extensionElements>
<imixs:item name="keyarchive" type="xs:string">
<imixs:value><![CDATA[0]]></imixs:value>
@ -1403,7 +1401,7 @@ Betrag: <itemvalue>invoice.total</itemvalue> <itemvalue>invoice.currency</itemva
<bpmn2:incoming>SequenceFlow_24</bpmn2:incoming>
<bpmn2:outgoing>SequenceFlow_29</bpmn2:outgoing>
<bpmn2:outputSet id="OutputSet_5" name="Output Set 3"/>
<bpmn2:messageEventDefinition id="MessageEventDefinition_1"/>
<bpmn2:signalEventDefinition id="SignalEventDefinition_1"/>
</bpmn2:intermediateCatchEvent>
<bpmn2:sequenceFlow id="SequenceFlow_24" sourceRef="Task_5005" targetRef="IntermediateCatchEvent_14"/>
<bpmn2:sequenceFlow id="SequenceFlow_29" sourceRef="IntermediateCatchEvent_14" targetRef="Task_3"/>
@ -1718,52 +1716,6 @@ Betrag: <itemvalue>invoice.total</itemvalue> <itemvalue>invoice.currency</itemva
<bpmn2:linkEventDefinition id="LinkEventDefinition_14" name="Link Event Definition 5"/>
</bpmn2:intermediateThrowEvent>
<bpmn2:sequenceFlow id="SequenceFlow_28" sourceRef="Task_3" targetRef="IntermediateThrowEvent_11"/>
<bpmn2:intermediateCatchEvent id="IntermediateCatchEvent_5" imixs:activityid="25" name="Mail Test">
<bpmn2:extensionElements>
<imixs:item name="rtfmailbody" type="CDATA">
<imixs:value><![CDATA[<bpmn2:message>Html-Header</bpmn2:message>
<textblock>E-Mail - Erinnerung (EN)</textblock>
<p>
<table>
<theader>
<tr>
<th>Rechnungsnummer</th>
<th>Datum</th>
<th>Fälligkeit</th>
<th>Rechnungsbetrag</th>
<th>Saldo</th>
</tr>
</theader>
<tbody>
<td><itemvalue>invoice.number</itemvalue></td>
<td style="text-align:center;"><itemvalue format="dd.MM.yyyy">invoice.date</itemvalue></td>
<td style="text-align:center;"><itemvalue format="dd.MM.yyyy">invoice.duedate</itemvalue></td>
<td style="text-align:right;"><itemvalue format="#,###,##0.00" locale="de_DE">invoice.total</itemvalue> <itemvalue>invoice.currency</itemvalue></td>
<td style="text-align:right;"><itemvalue format="#,###,##0.00" locale="de_DE">invoice.saldo</itemvalue> <itemvalue>invoice.currency</itemvalue></td>
</tr>
</tbody>
</table>
</p>
<bpmn2:message>Html-Footer-EN</bpmn2:message>
]]></imixs:value>
</imixs:item>
<imixs:item name="txtmailsubject" type="xs:string">
<imixs:value><![CDATA[Mahnung]]></imixs:value>
</imixs:item>
<imixs:item name="nammailreceiver" type="xs:string">
<imixs:value><![CDATA[ralph.soika@imixs.com]]></imixs:value>
<imixs:value><![CDATA[gaby.heinle@imixs.com]]></imixs:value>
</imixs:item>
<imixs:item name="keypublicresult" type="xs:string">
<imixs:value><![CDATA[0]]></imixs:value>
</imixs:item>
</bpmn2:extensionElements>
<bpmn2:outgoing>SequenceFlow_22</bpmn2:outgoing>
</bpmn2:intermediateCatchEvent>
<bpmn2:sequenceFlow id="SequenceFlow_22" sourceRef="IntermediateCatchEvent_5" targetRef="Task_5005"/>
<bpmn2:eventBasedGateway id="EventBasedGateway_2" gatewayDirection="Diverging">
<bpmn2:incoming>SequenceFlow_46</bpmn2:incoming>
<bpmn2:outgoing>SequenceFlow_2</bpmn2:outgoing>
@ -1771,7 +1723,7 @@ Betrag: <itemvalue>invoice.total</itemvalue> <itemvalue>invoice.currency</itemva
</bpmn2:eventBasedGateway>
<bpmn2:sequenceFlow id="SequenceFlow_32" sourceRef="EventBasedGateway_2" targetRef="IntermediateCatchEvent_5000-20"/>
<bpmn2:sequenceFlow id="SequenceFlow_34" sourceRef="Task_1" targetRef="IntermediateCatchEvent_1"/>
<bpmn2:exclusiveGateway id="ExclusiveGateway_4" gatewayDirection="Diverging">
<bpmn2:exclusiveGateway id="ExclusiveGateway_4" gatewayDirection="Diverging" default="SequenceFlow_36">
<bpmn2:incoming>SequenceFlow_4</bpmn2:incoming>
<bpmn2:outgoing>SequenceFlow_35</bpmn2:outgoing>
<bpmn2:outgoing>SequenceFlow_36</bpmn2:outgoing>
@ -1870,7 +1822,9 @@ Betrag: <itemvalue>invoice.total</itemvalue> <itemvalue>invoice.currency</itemva
<bpmn2:outgoing>SequenceFlow_41</bpmn2:outgoing>
<bpmn2:messageEventDefinition id="MessageEventDefinition_4"/>
</bpmn2:intermediateCatchEvent>
<bpmn2:sequenceFlow id="SequenceFlow_35" sourceRef="ExclusiveGateway_4" targetRef="IntermediateCatchEvent_9"/>
<bpmn2:sequenceFlow id="SequenceFlow_35" sourceRef="ExclusiveGateway_4" targetRef="IntermediateCatchEvent_9">
<bpmn2:conditionExpression xsi:type="bpmn2:tFormalExpression" id="FormalExpression_2">workitem['invoice.language'] &amp;&amp; workitem['invoice.language'][0]==&quot;DE&quot; </bpmn2:conditionExpression>
</bpmn2:sequenceFlow>
<bpmn2:sequenceFlow id="SequenceFlow_36" sourceRef="ExclusiveGateway_4" targetRef="IntermediateCatchEvent_10"/>
<bpmn2:exclusiveGateway id="ExclusiveGateway_6" gatewayDirection="Converging">
<bpmn2:incoming>SequenceFlow_37</bpmn2:incoming>
@ -1996,15 +1950,15 @@ Betrag: <itemvalue>invoice.total</itemvalue> <itemvalue>invoice.currency</itemva
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_Task_4" bpmnElement="Task_4">
<dc:Bounds height="50.0" width="110.0" x="809.0" y="904.0"/>
<dc:Bounds height="50.0" width="110.0" x="1204.0" y="903.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_88" labelStyle="BPMNLabelStyle_1">
<dc:Bounds height="14.0" width="65.0" x="831.0" y="922.0"/>
<dc:Bounds height="14.0" width="65.0" x="1226.0" y="921.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_EndEvent_1" bpmnElement="EndEvent_1">
<dc:Bounds height="36.0" width="36.0" x="1005.0" y="911.0"/>
<dc:Bounds height="36.0" width="36.0" x="1400.0" y="910.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_92" labelStyle="BPMNLabelStyle_1">
<dc:Bounds height="14.0" width="29.0" x="1008.0" y="947.0"/>
<dc:Bounds height="14.0" width="29.0" x="1403.0" y="946.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_Task_8" bpmnElement="Task_8">
@ -2048,21 +2002,21 @@ Betrag: <itemvalue>invoice.total</itemvalue> <itemvalue>invoice.currency</itemva
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_IntermediateCatchEvent_30" bpmnElement="IntermediateCatchEvent_25">
<dc:Bounds height="36.0" width="36.0" x="846.0" y="988.0"/>
<dc:Bounds height="36.0" width="36.0" x="1241.0" y="987.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_132" labelStyle="BPMNLabelStyle_1">
<dc:Bounds height="14.0" width="56.0" x="836.0" y="1024.0"/>
<dc:Bounds height="14.0" width="56.0" x="1231.0" y="1023.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_Task_6" bpmnElement="Task_3">
<dc:Bounds height="50.0" width="110.0" x="525.0" y="903.0"/>
<dc:Bounds height="50.0" width="110.0" x="920.0" y="902.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_5" labelStyle="BPMNLabelStyle_1">
<dc:Bounds height="14.0" width="65.0" x="547.0" y="921.0"/>
<dc:Bounds height="14.0" width="65.0" x="942.0" y="920.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_IntermediateCatchEvent_9" bpmnElement="IntermediateCatchEvent_4">
<dc:Bounds height="36.0" width="36.0" x="562.0" y="988.0"/>
<dc:Bounds height="36.0" width="36.0" x="957.0" y="987.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_6" labelStyle="BPMNLabelStyle_1">
<dc:Bounds height="14.0" width="56.0" x="552.0" y="1024.0"/>
<dc:Bounds height="14.0" width="56.0" x="947.0" y="1023.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_IntermediateCatchEvent_17" bpmnElement="IntermediateCatchEvent_12">
@ -2086,15 +2040,15 @@ Betrag: <itemvalue>invoice.total</itemvalue> <itemvalue>invoice.currency</itemva
<bpmndi:BPMNLabel id="BPMNLabel_43" labelStyle="BPMNLabelStyle_1"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_IntermediateCatchEvent_14" bpmnElement="IntermediateCatchEvent_14">
<dc:Bounds height="36.0" width="36.0" x="439.0" y="911.0"/>
<dc:Bounds height="36.0" width="36.0" x="608.0" y="911.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_48" labelStyle="BPMNLabelStyle_1">
<dc:Bounds height="14.0" width="45.0" x="435.0" y="947.0"/>
<dc:Bounds height="14.0" width="57.0" x="598.0" y="947.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_IntermediateCatchEvent_19" bpmnElement="IntermediateCatchEvent_15">
<dc:Bounds height="36.0" width="36.0" x="704.0" y="910.0"/>
<dc:Bounds height="36.0" width="36.0" x="1099.0" y="909.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_51" labelStyle="BPMNLabelStyle_1">
<dc:Bounds height="14.0" width="45.0" x="700.0" y="946.0"/>
<dc:Bounds height="14.0" width="45.0" x="1095.0" y="945.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_IntermediateCatchEvent_21" bpmnElement="IntermediateCatchEvent_17">
@ -2122,9 +2076,9 @@ Betrag: <itemvalue>invoice.total</itemvalue> <itemvalue>invoice.currency</itemva
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_IntermediateThrowEvent_4" bpmnElement="IntermediateThrowEvent_4">
<dc:Bounds height="36.0" width="36.0" x="501.0" y="1031.0"/>
<dc:Bounds height="36.0" width="36.0" x="860.0" y="1020.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_8" labelStyle="BPMNLabelStyle_1">
<dc:Bounds height="28.0" width="121.0" x="459.0" y="1067.0"/>
<dc:Bounds height="28.0" width="121.0" x="818.0" y="1056.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_ExclusiveGateway_5" bpmnElement="ExclusiveGateway_5" isMarkerVisible="true">
@ -2150,9 +2104,9 @@ Betrag: <itemvalue>invoice.total</itemvalue> <itemvalue>invoice.currency</itemva
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_IntermediateThrowEvent_7" bpmnElement="IntermediateThrowEvent_7">
<dc:Bounds height="36.0" width="36.0" x="880.0" y="838.0"/>
<dc:Bounds height="36.0" width="36.0" x="1275.0" y="837.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_38" labelStyle="BPMNLabelStyle_1">
<dc:Bounds height="28.0" width="121.0" x="838.0" y="874.0"/>
<dc:Bounds height="28.0" width="121.0" x="1233.0" y="873.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_IntermediateThrowEvent_8" bpmnElement="IntermediateThrowEvent_8">
@ -2174,15 +2128,15 @@ Betrag: <itemvalue>invoice.total</itemvalue> <itemvalue>invoice.currency</itemva
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_IntermediateThrowEvent_10" bpmnElement="IntermediateThrowEvent_10">
<dc:Bounds height="36.0" width="36.0" x="1005.0" y="989.0"/>
<dc:Bounds height="36.0" width="36.0" x="1400.0" y="988.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_56" labelStyle="BPMNLabelStyle_1">
<dc:Bounds height="14.0" width="51.0" x="998.0" y="1025.0"/>
<dc:Bounds height="14.0" width="51.0" x="1393.0" y="1024.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_IntermediateThrowEvent_11" bpmnElement="IntermediateThrowEvent_11">
<dc:Bounds height="36.0" width="36.0" x="651.0" y="1030.0"/>
<dc:Bounds height="36.0" width="36.0" x="1046.0" y="1029.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_66" labelStyle="BPMNLabelStyle_1">
<dc:Bounds height="14.0" width="51.0" x="644.0" y="1066.0"/>
<dc:Bounds height="14.0" width="51.0" x="1039.0" y="1065.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_Message_1" bpmnElement="Message_2">
@ -2197,12 +2151,6 @@ Betrag: <itemvalue>invoice.total</itemvalue> <itemvalue>invoice.currency</itemva
<dc:Bounds height="28.0" width="69.0" x="211.0" y="80.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_IntermediateCatchEvent_7" bpmnElement="IntermediateCatchEvent_5">
<dc:Bounds height="36.0" width="36.0" x="151.0" y="810.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_74" labelStyle="BPMNLabelStyle_1">
<dc:Bounds height="14.0" width="48.0" x="145.0" y="846.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_Message_3" bpmnElement="Message_6">
<dc:Bounds height="20.0" width="30.0" x="345.0" y="60.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_76">
@ -2277,9 +2225,9 @@ Betrag: <itemvalue>invoice.total</itemvalue> <itemvalue>invoice.currency</itemva
<bpmndi:BPMNLabel id="BPMNLabel_59"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_41" bpmnElement="SequenceFlow_40" sourceElement="BPMNShape_Task_4" targetElement="BPMNShape_EndEvent_1">
<di:waypoint xsi:type="dc:Point" x="919.0" y="929.0"/>
<di:waypoint xsi:type="dc:Point" x="962.0" y="929.0"/>
<di:waypoint xsi:type="dc:Point" x="1005.0" y="929.0"/>
<di:waypoint xsi:type="dc:Point" x="1314.0" y="928.0"/>
<di:waypoint xsi:type="dc:Point" x="1357.0" y="928.0"/>
<di:waypoint xsi:type="dc:Point" x="1400.0" y="928.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_95"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_11" bpmnElement="SequenceFlow_9" sourceElement="BPMNShape_Task_8" targetElement="BPMNShape_EndEvent_3">
@ -2301,10 +2249,10 @@ Betrag: <itemvalue>invoice.total</itemvalue> <itemvalue>invoice.currency</itemva
<bpmndi:BPMNLabel id="BPMNLabel_130"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_60" bpmnElement="SequenceFlow_59" sourceElement="BPMNShape_IntermediateCatchEvent_30" targetElement="BPMNShape_Task_4">
<di:waypoint xsi:type="dc:Point" x="864.0" y="988.0"/>
<di:waypoint xsi:type="dc:Point" x="864.0" y="971.0"/>
<di:waypoint xsi:type="dc:Point" x="845.0" y="971.0"/>
<di:waypoint xsi:type="dc:Point" x="845.0" y="954.0"/>
<di:waypoint xsi:type="dc:Point" x="1241.0" y="1005.0"/>
<di:waypoint xsi:type="dc:Point" x="1194.0" y="1005.0"/>
<di:waypoint xsi:type="dc:Point" x="1194.0" y="936.0"/>
<di:waypoint xsi:type="dc:Point" x="1204.0" y="936.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_133"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_61" bpmnElement="SequenceFlow_60" sourceElement="BPMNShape_IntermediateCatchEvent_29" targetElement="BPMNShape_Task_8">
@ -2314,9 +2262,9 @@ Betrag: <itemvalue>invoice.total</itemvalue> <itemvalue>invoice.currency</itemva
<bpmndi:BPMNLabel id="BPMNLabel_134"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_4" bpmnElement="SequenceFlow_3" sourceElement="BPMNShape_IntermediateCatchEvent_9" targetElement="BPMNShape_Task_6">
<di:waypoint xsi:type="dc:Point" x="580.0" y="988.0"/>
<di:waypoint xsi:type="dc:Point" x="580.0" y="971.0"/>
<di:waypoint xsi:type="dc:Point" x="580.0" y="953.0"/>
<di:waypoint xsi:type="dc:Point" x="975.0" y="987.0"/>
<di:waypoint xsi:type="dc:Point" x="975.0" y="970.0"/>
<di:waypoint xsi:type="dc:Point" x="975.0" y="952.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_11"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_20" bpmnElement="SequenceFlow_19" sourceElement="BPMNShape_EventBasedGateway_1" targetElement="BPMNShape_IntermediateCatchEvent_17">
@ -2371,28 +2319,29 @@ Betrag: <itemvalue>invoice.total</itemvalue> <itemvalue>invoice.currency</itemva
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_25" bpmnElement="SequenceFlow_24" sourceElement="BPMNShape_Task_2" targetElement="BPMNShape_IntermediateCatchEvent_14">
<di:waypoint xsi:type="dc:Point" x="414.0" y="929.0"/>
<di:waypoint xsi:type="dc:Point" x="426.0" y="929.0"/>
<di:waypoint xsi:type="dc:Point" x="439.0" y="929.0"/>
<di:waypoint xsi:type="dc:Point" x="511.0" y="929.0"/>
<di:waypoint xsi:type="dc:Point" x="608.0" y="929.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_49"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_30" bpmnElement="SequenceFlow_29" sourceElement="BPMNShape_IntermediateCatchEvent_14" targetElement="BPMNShape_Task_6">
<di:waypoint xsi:type="dc:Point" x="475.0" y="929.0"/>
<di:waypoint xsi:type="dc:Point" x="500.0" y="929.0"/>
<di:waypoint xsi:type="dc:Point" x="500.0" y="919.0"/>
<di:waypoint xsi:type="dc:Point" x="525.0" y="919.0"/>
<di:waypoint xsi:type="dc:Point" x="644.0" y="929.0"/>
<di:waypoint xsi:type="dc:Point" x="782.0" y="929.0"/>
<di:waypoint xsi:type="dc:Point" x="782.0" y="918.0"/>
<di:waypoint xsi:type="dc:Point" x="920.0" y="918.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_50"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_31" bpmnElement="SequenceFlow_30" sourceElement="BPMNShape_Task_6" targetElement="BPMNShape_IntermediateCatchEvent_19">
<di:waypoint xsi:type="dc:Point" x="635.0" y="919.0"/>
<di:waypoint xsi:type="dc:Point" x="669.0" y="919.0"/>
<di:waypoint xsi:type="dc:Point" x="669.0" y="928.0"/>
<di:waypoint xsi:type="dc:Point" x="704.0" y="928.0"/>
<di:waypoint xsi:type="dc:Point" x="1030.0" y="918.0"/>
<di:waypoint xsi:type="dc:Point" x="1064.0" y="918.0"/>
<di:waypoint xsi:type="dc:Point" x="1064.0" y="927.0"/>
<di:waypoint xsi:type="dc:Point" x="1099.0" y="927.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_53"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_32" bpmnElement="SequenceFlow_31" sourceElement="BPMNShape_IntermediateCatchEvent_19" targetElement="BPMNShape_Task_4">
<di:waypoint xsi:type="dc:Point" x="740.0" y="928.0"/>
<di:waypoint xsi:type="dc:Point" x="774.0" y="928.0"/>
<di:waypoint xsi:type="dc:Point" x="809.0" y="929.0"/>
<di:waypoint xsi:type="dc:Point" x="1135.0" y="927.0"/>
<di:waypoint xsi:type="dc:Point" x="1169.0" y="927.0"/>
<di:waypoint xsi:type="dc:Point" x="1169.0" y="919.0"/>
<di:waypoint xsi:type="dc:Point" x="1204.0" y="919.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_54"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_40" bpmnElement="SequenceFlow_39" sourceElement="BPMNShape_Task_5" targetElement="BPMNShape_EventBasedGateway_1">
@ -2453,9 +2402,9 @@ Betrag: <itemvalue>invoice.total</itemvalue> <itemvalue>invoice.currency</itemva
<bpmndi:BPMNLabel id="BPMNLabel_2"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_8" bpmnElement="SequenceFlow_7" sourceElement="BPMNShape_Task_6" targetElement="BPMNShape_IntermediateThrowEvent_4">
<di:waypoint xsi:type="dc:Point" x="525.0" y="936.0"/>
<di:waypoint xsi:type="dc:Point" x="519.0" y="936.0"/>
<di:waypoint xsi:type="dc:Point" x="519.0" y="1031.0"/>
<di:waypoint xsi:type="dc:Point" x="920.0" y="935.0"/>
<di:waypoint xsi:type="dc:Point" x="878.0" y="935.0"/>
<di:waypoint xsi:type="dc:Point" x="878.0" y="1020.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_12"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_9" bpmnElement="SequenceFlow_8" sourceElement="BPMNShape_IntermediateCatchEvent_21" targetElement="BPMNShape_ExclusiveGateway_5">
@ -2497,9 +2446,9 @@ Betrag: <itemvalue>invoice.total</itemvalue> <itemvalue>invoice.currency</itemva
<bpmndi:BPMNLabel id="BPMNLabel_37"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_17" bpmnElement="SequenceFlow_16" sourceElement="BPMNShape_Task_4" targetElement="BPMNShape_IntermediateThrowEvent_7">
<di:waypoint xsi:type="dc:Point" x="864.0" y="904.0"/>
<di:waypoint xsi:type="dc:Point" x="864.0" y="856.0"/>
<di:waypoint xsi:type="dc:Point" x="880.0" y="856.0"/>
<di:waypoint xsi:type="dc:Point" x="1240.0" y="903.0"/>
<di:waypoint xsi:type="dc:Point" x="1240.0" y="855.0"/>
<di:waypoint xsi:type="dc:Point" x="1275.0" y="855.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_40"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_18" bpmnElement="SequenceFlow_17" sourceElement="BPMNShape_EventBasedGateway_1" targetElement="BPMNShape_IntermediateThrowEvent_8">
@ -2521,24 +2470,18 @@ Betrag: <itemvalue>invoice.total</itemvalue> <itemvalue>invoice.currency</itemva
<bpmndi:BPMNLabel id="BPMNLabel_52"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_27" bpmnElement="SequenceFlow_26" sourceElement="BPMNShape_Task_4" targetElement="BPMNShape_IntermediateThrowEvent_10">
<di:waypoint xsi:type="dc:Point" x="882.0" y="954.0"/>
<di:waypoint xsi:type="dc:Point" x="882.0" y="1007.0"/>
<di:waypoint xsi:type="dc:Point" x="1005.0" y="1007.0"/>
<di:waypoint xsi:type="dc:Point" x="1314.0" y="936.0"/>
<di:waypoint xsi:type="dc:Point" x="1357.0" y="936.0"/>
<di:waypoint xsi:type="dc:Point" x="1357.0" y="1006.0"/>
<di:waypoint xsi:type="dc:Point" x="1400.0" y="1006.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_65"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_29" bpmnElement="SequenceFlow_28" sourceElement="BPMNShape_Task_6" targetElement="BPMNShape_IntermediateThrowEvent_11">
<di:waypoint xsi:type="dc:Point" x="635.0" y="936.0"/>
<di:waypoint xsi:type="dc:Point" x="669.0" y="936.0"/>
<di:waypoint xsi:type="dc:Point" x="669.0" y="1030.0"/>
<di:waypoint xsi:type="dc:Point" x="1030.0" y="935.0"/>
<di:waypoint xsi:type="dc:Point" x="1064.0" y="935.0"/>
<di:waypoint xsi:type="dc:Point" x="1064.0" y="1029.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_68"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_22" bpmnElement="SequenceFlow_22" sourceElement="BPMNShape_IntermediateCatchEvent_7" targetElement="BPMNShape_Task_2">
<di:waypoint xsi:type="dc:Point" x="187.0" y="828.0"/>
<di:waypoint xsi:type="dc:Point" x="245.0" y="828.0"/>
<di:waypoint xsi:type="dc:Point" x="245.0" y="916.0"/>
<di:waypoint xsi:type="dc:Point" x="304.0" y="916.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_75"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_33" bpmnElement="SequenceFlow_32" sourceElement="BPMNShape_EventBasedGateway_2" targetElement="BPMNShape_IntermediateCatchEvent_2">
<di:waypoint xsi:type="dc:Point" x="363.0" y="410.0"/>
<di:waypoint xsi:type="dc:Point" x="363.0" y="446.0"/>

View file

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- origin at X=0.0 Y=0.0 -->
<bpmn2:definitions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 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:tl="http://www.w3.org/2001/XMLSchema" id="Definitions_1" exporter="org.eclipse.bpmn2.modeler.core" exporterVersion="1.5.3.Final-v20210519-2007-B1" name="Definitions 1" targetNamespace="http://www.imixs.org/bpmn2">
<bpmn2:definitions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 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:tl="http://www.w3.org/2001/XMLSchema" id="Definitions_1" exporter="org.eclipse.bpmn2.modeler.core" exporterVersion="1.5.4.RC1-v20220528-0836-B1" name="Definitions 1" targetNamespace="http://www.imixs.org/bpmn2">
<bpmn2:extensionElements>
<imixs:item name="txtworkflowmodelversion" type="xs:string">
<imixs:value><![CDATA[zahlungseingang-de-1.0]]></imixs:value>
@ -144,7 +144,7 @@ result.isValid=true;
<bpmn2:task id="Task_2" imixs:processid="1900" name="Gebucht">
<bpmn2:extensionElements>
<imixs:item name="txtworkflowsummary" type="xs:string">
<imixs:value><![CDATA[<itemvalue format="dd. MM.yyyy">$lasteventdate</itemvalue> - <itemvalue>payment.total</itemvalue> <itemvalue>payment.currency</itemvalue> (<itemvalue>dbtr.number</itemvalue> - <itemvalue>dbtr.name</itemvalue>)]]></imixs:value>
<imixs:value><![CDATA[<itemvalue format="dd.MM.yyyy">payment.date</itemvalue> - <itemvalue>payment.amount</itemvalue> <itemvalue>payment.currency</itemvalue> (<itemvalue>dbtr.number</itemvalue> - <itemvalue>dbtr.name</itemvalue>)]]></imixs:value>
</imixs:item>
<imixs:item name="keyupdateacl" type="xs:boolean">
<imixs:value>true</imixs:value>
@ -186,7 +186,7 @@ result.isValid=true;
<bpmn2:task id="Task_1" imixs:processid="1000" name="Erfassung">
<bpmn2:extensionElements>
<imixs:item name="txtworkflowsummary" type="xs:string">
<imixs:value><![CDATA[<itemvalue format="dd. MM.yyyy">$lasteventdate</itemvalue> - <itemvalue>payment.total</itemvalue> <itemvalue>payment.currency</itemvalue> (<itemvalue>dbtr.number</itemvalue> - <itemvalue>dbtr.name</itemvalue>)]]></imixs:value>
<imixs:value><![CDATA[<itemvalue format="dd.MM.yyyy">payment.date</itemvalue> - <itemvalue>payment.amount</itemvalue> <itemvalue>payment.currency</itemvalue> (<itemvalue>dbtr.number</itemvalue> - <itemvalue>dbtr.name</itemvalue>)]]></imixs:value>
</imixs:item>
<imixs:item name="txteditorid" type="xs:string">
<imixs:value><![CDATA[alexander/form_basic]]></imixs:value>
@ -224,7 +224,7 @@ result.isValid=true;
<bpmn2:task id="Task_6" imixs:processid="1800" name="Storniert">
<bpmn2:extensionElements>
<imixs:item name="txtworkflowsummary" type="xs:string">
<imixs:value><![CDATA[<itemvalue format="dd. MM.yyyy">$lasteventdate</itemvalue> - <itemvalue>payment.total</itemvalue> <itemvalue>payment.currency</itemvalue> (<itemvalue>dbtr.number</itemvalue> - <itemvalue>dbtr.name</itemvalue>)]]></imixs:value>
<imixs:value><![CDATA[<itemvalue format="dd.MM.yyyy">payment.date</itemvalue> - <itemvalue>payment.amount</itemvalue> <itemvalue>payment.currency</itemvalue> (<itemvalue>dbtr.number</itemvalue> - <itemvalue>dbtr.name</itemvalue>)]]></imixs:value>
</imixs:item>
<imixs:item name="keyupdateacl" type="xs:boolean">
<imixs:value>true</imixs:value>
@ -385,9 +385,15 @@ result.isValid=true;
<bpmn2:dataObject id="DataObject_1" name="Form">
<bpmn2:documentation id="Documentation_17"><![CDATA[<?xml version="1.0"?>
<imixs-form>
<imixs-form-section columns="2" label="Zahlungsdaten">
<item name="name" type="text" required="true" label="Referenz:" />
<imixs-form-section columns="2" >
<item name="dbtr.number" type="text" required="true" label="Debitor:" />
<item name="payment.date" type="date" required="true" label="Datum:" />
</imixs-form-section>
<imixs-form-section>
<item name="name" type="text" required="true" label="Referenz:" />
</imixs-form-section>
<imixs-form-section columns="2" >
<item name="payment.amount" type="currency" required="true" label="Zahlbetrag:" />
<item name="payment.currency" type="selectOneMenu" required="true" options="EUR;CHF;SEK;RUB;NOK;GBP;USD;CAD" label="Währung:" />
</imixs-form-section>
@ -574,7 +580,7 @@ result.isValid=true;
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_IntermediateCatchEvent_1" bpmnElement="IntermediateCatchEvent_1">
<dc:Bounds height="36.0" width="36.0" x="760.0" y="237.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_2">
<bpmndi:BPMNLabel id="BPMNLabel_2" labelStyle="BPMNLabelStyle_1">
<dc:Bounds height="14.0" width="68.0" x="744.0" y="273.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>