update Businesspartners

This commit is contained in:
Ralph Soika 2025-03-25 11:33:45 +01:00
parent 0b20c10c0a
commit 0d5aa41e4d
12 changed files with 2369 additions and 16740 deletions

View file

@ -90,20 +90,20 @@ services:
###############################################
# Imixs-Admin
###############################################
# imixsadmin:
# image: imixs/imixs-admin
# ports:
# - "8888:8080"
imixsadmin:
image: imixs/imixs-admin
ports:
- "8888:8080"
###############################################
# Mailgateway
###############################################
# mailgateway:
# image: imixs/exim4
# environment:
# EXIM_SMARTHOST: "www149.your-server.de:25"
# EXIM_PASSWORD: "www149.your-server.de:webmaster@imixs.com:$MAILPASSWORD"
# EXIM_ALLOWED_SENDERS: "10.0.0.0/8:172.18.0.0/12:192.168.0.0/16"
mailgateway:
image: imixs/exim4
environment:
EXIM_SMARTHOST: "www149.your-server.de:25"
EXIM_PASSWORD: "www149.your-server.de:webmaster@imixs.com:$MAILPASSWORD"
EXIM_ALLOWED_SENDERS: "10.0.0.0/8:172.18.0.0/12:192.168.0.0/16"
# prometheus:
# image: prom/prometheus:latest

View file

@ -1,6 +1,8 @@
package com.alexanderlogistics;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.logging.Logger;
import org.imixs.workflow.ItemCollection;
@ -9,6 +11,8 @@ import org.imixs.workflow.exceptions.AdapterException;
import org.imixs.workflow.exceptions.PluginException;
import org.imixs.workflow.faces.util.ResourceBundleHandler;
import com.alexanderlogistics.mahnlauf.MahnlaufService;
import jakarta.inject.Inject;
/**
@ -35,6 +39,9 @@ public class ZahlungseingangSaldoAdapter implements SignalAdapter {
@Inject
ZahlungseingangService zahlungseingangService;
@Inject
BusinessPartnerService businessPartnerService;
@Inject
InvoiceService invoiceService;
@ -53,6 +60,13 @@ public class ZahlungseingangSaldoAdapter implements SignalAdapter {
updateSaldo(document);
// Update Debitor E-Mail
String bpid = InvoiceUtil.buildBPID(document.getItemValueString("dbtr.number"));
ItemCollection dbtrItemCol = businessPartnerService.getBusinessPartnerByID(bpid);
if (dbtrItemCol != null) {
document.setItemValue(MahnlaufService.ITEM_DBTR_EMAIL, dbtrItemCol.getItemValue("dbtr.email"));
}
return document;
}
@ -71,7 +85,8 @@ public class ZahlungseingangSaldoAdapter implements SignalAdapter {
String paymentWarning = workitem.getItemValueString("payment.warning");
List<ItemCollection> paymentDetails = zahlungseingangService.loadPaymentDetails(workitem);
// get all Invoices of this Mahnlauf
List<Map<String, List<Object>>> invoiceList = new ArrayList<Map<String, List<Object>>>();
if (paymentDetails.size() == 0) {
throw new PluginException(PluginException.class.getName(),
ZahlungseingangService.ERROR_PAYMENT_BOOKING_FAILED,
@ -166,12 +181,33 @@ public class ZahlungseingangSaldoAdapter implements SignalAdapter {
invoice.event(ZahlungseingangService.EVENT_UPDATE_INVOICE);
zahlungseingangService.processInvoice(invoice);
// create a workitem stub for the mail message
ItemCollection invoiceStub = new ItemCollection();
invoiceStub.setItemValue("invoice.number", invoice.getItemValue("invoice.number"));
invoiceStub.setItemValue("invoice.total", invoice.getItemValue("invoice.total"));
invoiceStub.setItemValue("invoice.saldo", invoice.getItemValue("invoice.saldo"));
invoiceStub.setItemValue("payment.amount", invoicePaymentAmount);
invoiceStub.setItemValue("invoice.currency", invoice.getItemValue("invoice.currency"));
invoiceStub.setItemValue("invoice.date", invoice.getItemValue("invoice.date"));
invoiceStub.setItemValue("invoice.duedate", invoice.getItemValue("invoice.duedate"));
invoiceStub.setItemValue("$workflowstatus", invoice.getItemValue("$workflowstatus"));
invoiceStub.setItemValue("$workflowsummary", invoice.getItemValue("$workflowsummary"));
// test if we have a international status translation..
if (!invoice.getItemValueString("workflowstatus_en").isEmpty()) {
invoiceStub.setItemValue("workflowstatus_en", invoice.getItemValue("workflowstatus_en"));
} else {
// default
invoiceStub.setItemValue("workflowstatus_en", invoice.getItemValue("$workflowstatus"));
}
invoiceList.add(invoiceStub.getAllItems());
} else {
throw new PluginException(PluginException.class.getName(),
ZahlungseingangService.ERROR_PAYMENT_BOOKING_FAILED, "Invoice not found!");
}
}
workitem.replaceItemValue("payment.details.mail", invoiceList);
}

View file

@ -65,7 +65,6 @@ import org.xml.sax.SAXException;
import com.alexanderlogistics.BusinessPartnerService;
import com.alexanderlogistics.InvoiceUtil;
import com.alexanderlogistics.KreditorDebitorService;
import com.alexanderlogistics.mahnlauf.MahnlaufService;
import com.alexanderlogistics.xml.CargosoftXMLInvoiceImportService;
@ -77,6 +76,7 @@ import jakarta.ws.rs.GET;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.PathParam;
import jakarta.ws.rs.Produces;
import jakarta.ws.rs.QueryParam;
import jakarta.ws.rs.core.MediaType;
/**
@ -662,22 +662,22 @@ public class CargosoftMigrationRestService implements Serializable {
* @throws ModelException
*/
@GET
@Path("/bp-import")
@Path("/bp-sync")
@Produces({ MediaType.TEXT_PLAIN })
public String importBusinessPartner()
public String syncBusinessPartner(@QueryParam("maxcount") int maxcount)
throws QueryException, AccessDeniedException, ProcessingErrorException, PluginException, ModelException {
StringBuffer messageBuffer = new StringBuffer();
int MAX_COUNT = 1000;
String query = "(type:" + KreditorDebitorService.TYPE_CARGOSOFTKREDITOR + ")";
int updates = 0;
if (maxcount <= 0) {
maxcount = 100;
}
String query = "(type:cargosoftkreditor) AND ($modified:[20100130000000 TO 20250324200000])";
int syncs = 0;
long l = System.currentTimeMillis();
int batchSize = 500;
int batchSize = 100;
int totalObjects = 0;
log("├── Migrate " + KreditorDebitorService.TYPE_CARGOSOFTKREDITOR, messageBuffer);
// Gesamtanzahl ermitteln
log("├── sync business partner objects....", messageBuffer);
int totalCount = documentService.count(query);
log("│   ├── found " + totalCount + " " + KreditorDebitorService.TYPE_CARGOSOFTKREDITOR + " entities ",
log("│   ├── found " + totalCount + " entities ",
messageBuffer);
// Berechne Anzahl der benötigten Pages
@ -690,16 +690,16 @@ public class CargosoftMigrationRestService implements Serializable {
for (ItemCollection cargosoftItemCol : cargosoftDataList) {
totalObjects++;
if (verifyBusinessPartner(cargosoftItemCol, messageBuffer)) {
updates++;
if (syncBusinessPartner(cargosoftItemCol)) {
syncs++;
}
if (updates >= MAX_COUNT)
if (syncs >= maxcount)
break;
}
// Fortschritt loggen
log("│ ├── Processed page " + (pageIndex + 1) + " of " + totalPages +
" (" + updates + " total updates)", messageBuffer);
" (" + syncs + " total syncs)", messageBuffer);
// Optional: Kurze Pause nach jedem 5. Batch
try {
Thread.sleep(100);
@ -708,13 +708,13 @@ public class CargosoftMigrationRestService implements Serializable {
e.printStackTrace();
}
if (updates >= MAX_COUNT)
if (syncs >= maxcount)
break;
}
long duration = System.currentTimeMillis() - l;
double objectsPerSecond = totalObjects / (duration / 1000.0);
log("├── Successfully imported " + updates + " business partner objects in " +
log("├── Successfully " + syncs + " business partner objects synced in " +
duration + "ms (" + String.format("%.1f", objectsPerSecond) + " objects/sec)", messageBuffer);
return messageBuffer.toString();
@ -728,18 +728,98 @@ public class CargosoftMigrationRestService implements Serializable {
* @return
*/
@TransactionAttribute(value = TransactionAttributeType.REQUIRES_NEW)
public boolean verifyBusinessPartner(ItemCollection cargosoftItemCol, StringBuffer messageBuffer) {
String vendorNummer = cargosoftItemCol.getItemValueString("_vendor_num");
String bpID = InvoiceUtil.buildBPID(vendorNummer);
ItemCollection businessPartner = businessPartnerService.getBusinessPartnerByID(bpID);
if (businessPartner == null) {
public boolean syncBusinessPartner(ItemCollection cargosoftItemCol) {
String bpip = InvoiceUtil.buildBPID(cargosoftItemCol.getItemValueString("name"));
if (businessPartnerService.getBusinessPartnerByID(bpip) == null) {
// not available so we save just the cargosoft entry once...
documentService.save(cargosoftItemCol);
logger.finest("│   │   ├── import " + bpID);
return true;
}
return false;
}
/**
* Dieser agent löscht einfach alle Businesspartner objekte. Wird eigentlich
* nicht mehr benötigt.
*
* @return
* @throws QueryException
* @throws AccessDeniedException
* @throws ProcessingErrorException
* @throws PluginException
* @throws ModelException
*/
@GET
@Path("/bp-delete")
@Produces({ MediaType.TEXT_PLAIN })
public String deleteBusinessPartner(@QueryParam("maxcount") int maxcount)
throws QueryException, AccessDeniedException, ProcessingErrorException, PluginException, ModelException {
StringBuffer messageBuffer = new StringBuffer();
String query = "(type:workitem) AND ($modelversion: businesspartner*) AND ($modified:[20210130000000 TO 20250324200000])";
int deletions = 0;
long l = System.currentTimeMillis();
int batchSize = 100;
int totalObjects = 0;
log("├── delete old business partner objects....", messageBuffer);
int totalCount = documentService.count(query);
log("│   ├── found " + totalCount + " entities ",
messageBuffer);
// Berechne Anzahl der benötigten Pages
int totalPages = (int) Math.ceil((double) totalCount / batchSize);
// Verarbeite Page für Page
for (int pageIndex = 0; pageIndex < totalPages; pageIndex++) {
List<ItemCollection> cargosoftDataList = documentService.find(query, batchSize, pageIndex);
for (ItemCollection cargosoftItemCol : cargosoftDataList) {
totalObjects++;
if (deleteBusinessPartner(cargosoftItemCol, messageBuffer)) {
deletions++;
}
if (deletions >= maxcount)
break;
}
// Fortschritt loggen
log("│ ├── Processed page " + (pageIndex + 1) + " of " + totalPages +
" (" + deletions + " total deletions)", messageBuffer);
// Optional: Kurze Pause nach jedem 5. Batch
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if (deletions >= maxcount)
break;
}
long duration = System.currentTimeMillis() - l;
double objectsPerSecond = totalObjects / (duration / 1000.0);
log("├── Successfully " + deletions + " business partner objects deleted in " +
duration + "ms (" + String.format("%.1f", objectsPerSecond) + " objects/sec)", messageBuffer);
return messageBuffer.toString();
}
/**
* Hilfsmethode speichert eine cargoosft kreditor object...
*
* @param bpID
* @param messageBuffer
* @return
*/
@TransactionAttribute(value = TransactionAttributeType.REQUIRES_NEW)
public boolean deleteBusinessPartner(ItemCollection cargosoftItemCol, StringBuffer messageBuffer) {
documentService.remove(cargosoftItemCol);
return true;
}
/**
* Erzeugt einen XML Baum aus dem XML Raw Daten
*

View file

@ -142,13 +142,13 @@ public class BusinessPartnerImportService {
businesspartner.setItemValue("partner.id", partnerID);
if (isCreditor) {
businesspartner.setItemValue("cdtr.number", name);
if (businesspartner.isItemEmpty("cdtr.email")) {
businesspartner.setItemValue("cdtr.email", importDoc.getItemValueString("_vendor_email"));
if (businesspartner.isItemEmpty("cdtr.mail")) {
businesspartner.setItemValue("cdtr.mail", importDoc.getItemValueString("_vendor_email"));
}
} else {
businesspartner.setItemValue("dbtr.number", name);
if (businesspartner.isItemEmpty("dbtr.email")) {
businesspartner.setItemValue("dbtr.email", importDoc.getItemValueString("_vendor_email"));
if (businesspartner.isItemEmpty("dbtr.mail")) {
businesspartner.setItemValue("dbtr.mail", importDoc.getItemValueString("_vendor_email"));
}
}
businesspartner.setItemValue("partner.country", importDoc.getItemValueString("_vendor_country"));
@ -229,6 +229,7 @@ public class BusinessPartnerImportService {
for (ItemCollection oldData : oldList) {
if (!oldData.getItemValueString("cdtr.mail").isEmpty()) {
businessPartner.setItemValue("cdtr.mail", oldData.getItemValue("cdtr.mail"));
businessPartner.setItemValue("dbtr.mail", oldData.getItemValue("cdtr.mail"));
}
if (!oldData.getItemValueString("cdtr.creditperiod").isEmpty()) {
businessPartner.setItemValue("cdtr.creditperiod", oldData.getItemValue("cdtr.creditperiod"));

View file

@ -0,0 +1,129 @@
package org.imixs.workflow.office.journal;
import java.math.BigDecimal;
import java.util.Date;
import java.util.HashSet;
import java.util.Set;
import jakarta.persistence.CascadeType;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.OneToMany;
import jakarta.persistence.Table;
import jakarta.persistence.Temporal;
import jakarta.persistence.TemporalType;
@Entity
@Table(name = "journal_accounting")
public class JournalAccounting {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(precision = 19, scale = 4, nullable = false)
private BigDecimal amount;
@Column()
private String reference;
@Temporal(TemporalType.DATE)
@Column(nullable = false)
private Date date;
@Column(nullable = false)
private String type;
@OneToMany(mappedBy = "journalAccounting", cascade = CascadeType.ALL, orphanRemoval = true)
private Set<JournalAccountingAttribute> attributes = new HashSet<>();
// Constructors
public JournalAccounting() {
}
public JournalAccounting(BigDecimal amount, String type, Date entryDate) {
this.amount = amount;
this.type = type;
this.date = entryDate;
}
// Helper methods for attribute management
public void addAttribute(String key, String value) {
JournalAccountingAttribute attr = new JournalAccountingAttribute(this, key, value);
attributes.add(attr);
}
public String getAttribute(String key) {
return attributes.stream()
.filter(a -> a.getKey().equals(key))
.map(JournalAccountingAttribute::getValue)
.findFirst()
.orElse(null);
}
public void removeAttribute(String key) {
attributes.removeIf(attr -> attr.getKey().equals(key));
}
public Set<JournalAccountingAttribute> getAttributesByKey(String key) {
Set<JournalAccountingAttribute> result = new HashSet<>();
for (JournalAccountingAttribute attr : attributes) {
if (attr.getKey().equals(key)) {
result.add(attr);
}
}
return result;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public BigDecimal getAmount() {
return amount;
}
public void setAmount(BigDecimal amount) {
this.amount = amount;
}
public String getReference() {
return reference;
}
public void setReference(String businessProcessReference) {
this.reference = businessProcessReference;
}
public Date getDate() {
return date;
}
public void setDate(Date entryDate) {
this.date = entryDate;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public Set<JournalAccountingAttribute> getAttributes() {
return attributes;
}
public void setAttributes(Set<JournalAccountingAttribute> attributes) {
this.attributes = attributes;
}
}

View file

@ -0,0 +1,95 @@
package org.imixs.workflow.office.journal;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.ManyToOne;
import jakarta.persistence.Table;
@Entity
@Table(name = "journal_accounting_attribute")
public class JournalAccountingAttribute {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToOne(optional = false)
private JournalAccounting journalAccounting;
@Column(nullable = false)
private String key;
@Column(nullable = false)
private String value;
// Constructors
public JournalAccountingAttribute() {
}
public JournalAccountingAttribute(JournalAccounting journalAccounting, String key, String value) {
this.journalAccounting = journalAccounting;
this.key = key;
this.value = value;
}
// Standard getters and setters
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public JournalAccounting getJournalAccounting() {
return journalAccounting;
}
public void setJournalAccounting(JournalAccounting journalAccounting) {
this.journalAccounting = journalAccounting;
}
public String getKey() {
return key;
}
public void setKey(String key) {
this.key = key;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
// Equals and hashCode for proper collection behavior
@Override
public boolean equals(Object o) {
if (this == o)
return true;
if (o == null || getClass() != o.getClass())
return false;
JournalAccountingAttribute that = (JournalAccountingAttribute) o;
if (id != null ? !id.equals(that.id) : that.id != null)
return false;
if (!key.equals(that.key))
return false;
return value.equals(that.value);
}
@Override
public int hashCode() {
int result = id != null ? id.hashCode() : 0;
result = 31 * result + key.hashCode();
result = 31 * result + value.hashCode();
return result;
}
}

View file

@ -0,0 +1,204 @@
/*******************************************************************************
* Imixs Workflow
* Copyright (C) 2001, 2011 Imixs Software Solutions GmbH,
* http://www.imixs.com
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You can receive a copy of the GNU General Public
* License at http://www.gnu.org/licenses/gpl.html
*
* Project:
* http://www.imixs.org
* http://java.net/projects/imixs-workflow
*
* Contributors:
* Imixs Software Solutions GmbH - initial API and implementation
* Ralph Soika - Software Developer
*******************************************************************************/
package org.imixs.workflow.office.journal;
import java.math.BigDecimal;
import java.util.List;
import org.imixs.workflow.ItemCollection;
import org.imixs.workflow.exceptions.AccessDeniedException;
import org.imixs.workflow.faces.data.WorkflowEvent;
import com.alexanderlogistics.InvoiceUtil;
import jakarta.annotation.security.DeclareRoles;
import jakarta.annotation.security.RolesAllowed;
import jakarta.annotation.security.RunAs;
import jakarta.ejb.Stateless;
import jakarta.enterprise.event.Observes;
import jakarta.persistence.EntityManager;
import jakarta.persistence.PersistenceContext;
/**
* Der BusinessPartnerService stellt Methoden für den Zugriff auf Business
* Partner bereit.
*
* @author rsoika
*
*/
@DeclareRoles({ "org.imixs.ACCESSLEVEL.NOACCESS", "org.imixs.ACCESSLEVEL.READERACCESS",
"org.imixs.ACCESSLEVEL.AUTHORACCESS", "org.imixs.ACCESSLEVEL.EDITORACCESS",
"org.imixs.ACCESSLEVEL.MANAGERACCESS" })
@RolesAllowed({ "org.imixs.ACCESSLEVEL.NOACCESS", "org.imixs.ACCESSLEVEL.READERACCESS",
"org.imixs.ACCESSLEVEL.AUTHORACCESS", "org.imixs.ACCESSLEVEL.EDITORACCESS",
"org.imixs.ACCESSLEVEL.MANAGERACCESS" })
@Stateless
@RunAs("org.imixs.ACCESSLEVEL.MANAGERACCESS")
public class JournalAccountingService {
@PersistenceContext(unitName = "org.imixs.workflow.jpa")
private EntityManager entityManager;
/**
* WorkflowEvent listener to store an accounting entry
*
* Demo:
* invoice:
* http://localhost:8080/pages/workitems/workitem.xhtml?id=a6524e28-eb06-4a0d-ae2f-f0cac29b126f
* payment:
* http://localhost:8080/pages/workitems/workitem.xhtml?id=e2aa082f-7e61-4cbe-abc8-be06d1aacc3f
*
* @param workflowEvent
* @throws AccessDeniedException
*/
public void onWorkflowEvent(@Observes WorkflowEvent workflowEvent) throws AccessDeniedException {
ItemCollection workitem = workflowEvent.getWorkitem();
if (workitem == null) {
return;
}
if (WorkflowEvent.WORKITEM_AFTER_PROCESS == workflowEvent.getEventType()) {
// create / update?
if (workitem.getModelVersion().startsWith("rechnungsausgang-")
|| workitem.getModelVersion().startsWith("rechnungsausgang-")) {
processInvoice(workitem);
}
// Payment?
if (workitem.getModelVersion().startsWith("zahlungseingang-")) {
processPayment(workitem);
}
}
}
/**
* Process an invoice workitem - creates or updates accounting entry
*/
private void processInvoice(ItemCollection workitem) {
String businessProcessRef = workitem.getUniqueID();
// Try to find existing entry
JournalAccounting accounting = findAccountingEntryByBusinessRef(businessProcessRef,
workitem.getWorkflowGroup());
// Create new or update existing
if (accounting == null) {
accounting = new JournalAccounting();
accounting.setReference(businessProcessRef);
accounting.setType(workitem.getWorkflowGroup());
}
// Update/set values
accounting.setAmount(new BigDecimal(workitem.getItemValueDouble("invoice.total")));
accounting.setDate(workitem.getItemValueDate("invoice.date"));
// Update attributes
// Clear and add attributes (or use selective update if needed)
accounting.getAttributes().clear();
accounting.addAttribute("dbtr.name", workitem.getItemValueString("dbtr.name"));
accounting.addAttribute("dbtr.number", workitem.getItemValueString("dbtr.number"));
accounting.addAttribute("space.name", workitem.getItemValueString("space.name"));
// Add more attributes as needed
// Persist or merge
if (accounting.getId() == null) {
entityManager.persist(accounting);
} else {
entityManager.merge(accounting);
}
}
/**
* Process a payment workitem - creates entries and links to invoices
*/
private void processPayment(ItemCollection workitem) {
List<ItemCollection> paymentDetails = InvoiceUtil.explodeChildList(workitem, "payment.details");
for (ItemCollection payment : paymentDetails) {
String workitemRef = payment.getItemValueString("$uniqueid");
Double amount = payment.getItemValueDouble("payment.amount");
// Find existing payment entry or create new one
String paymentBusinessRef = workitem.getUniqueID() + "-" + workitemRef;
JournalAccounting accounting = findAccountingEntryByBusinessRef(paymentBusinessRef,
workitem.getWorkflowGroup());
if (accounting == null) {
accounting = new JournalAccounting();
accounting.setReference(paymentBusinessRef);
accounting.setType(workitem.getWorkflowGroup());
}
// Update payment values
accounting.setAmount(new BigDecimal(amount));
accounting.setDate(workitem.getItemValueDate("payment.date"));
// Update attributes
// Clear and add attributes (or use selective update if needed)
accounting.getAttributes().clear();
accounting.addAttribute("dbtr.name", workitem.getItemValueString("dbtr.name"));
accounting.addAttribute("dbtr.number", workitem.getItemValueString("dbtr.number"));
accounting.addAttribute("space.name", workitem.getItemValueString("space.name"));
// Add more attributes as needed
// Find the related invoice entry
JournalAccounting invoiceEntry = findAccountingEntryByBusinessRef(workitemRef, "Rechnungsausgang");
if (invoiceEntry != null) {
accounting.addAttribute("Invoice-Ref", invoiceEntry.getReference());
}
// Persist or merge
if (accounting.getId() == null) {
entityManager.persist(accounting);
} else {
entityManager.merge(accounting);
}
}
}
/**
* Find an accounting entry by its business process reference
*/
private JournalAccounting findAccountingEntryByBusinessRef(String businessProcessRef, String type) {
try {
return entityManager.createQuery(
"SELECT a FROM JournalAccounting a " +
"WHERE a.reference = :ref " +
"AND a.type = :type",
JournalAccounting.class)
.setParameter("ref", businessProcessRef)
.setParameter("type", type)
.getSingleResult();
} catch (Exception e) {
// No result found
return null;
}
}
}

View file

@ -273,12 +273,12 @@
<imixs-form-section columns="1" label="Rechnungseingang ">
<item name="cdtr.number" type="text" span="2" readonly="true" label="Kreditoren Nr.:" />
<item name="cdtr.creditperiod" type="text" span="4" readonly="false" label="Zahlungsziel (Tage):" />
<item name="cdtr.email" type="textlist" span="6" readonly="false" label="E-Mail:" />
<item name="cdtr.mail" type="textlist" span="6" readonly="false" label="E-Mail:" />
</imixs-form-section>
<imixs-form-section columns="1" label="Rechnungsausgang ">
<item name="dbtr.number" type="text" span="2" readonly="true" label="Debitoren Nr.:" />
<item name="dbtr.creditperiod" type="text" span="4" readonly="false" label="Zahlungsziel (Tage):" />
<item name="dbtr.email" type="textlist" span="6" readonly="false" label="E-Mail SOA/Mahnungen:" />
<item name="dbtr.mail" type="textlist" span="6" readonly="false" label="E-Mail SOA/Mahnungen:" />
</imixs-form-section>
<imixs-form-section label="Banken" path="alexander/section_businesspartner_banklist" />
</imixs-subform>

View file

@ -273,12 +273,12 @@
<imixs-form-section columns="1" label="Rechnungseingang ">
<item name="cdtr.number" type="text" span="2" readonly="true" label="Kreditoren Nr.:" />
<item name="cdtr.creditperiod" type="text" span="4" readonly="false" label="Zahlungsziel (Tage):" />
<item name="cdtr.email" type="textlist" span="6" readonly="false" label="E-Mail:" />
<item name="cdtr.mail" type="textlist" span="6" readonly="false" label="E-Mail:" />
</imixs-form-section>
<imixs-form-section columns="1" label="Rechnungsausgang ">
<item name="dbtr.number" type="text" span="2" readonly="true" label="Debitoren Nr.:" />
<item name="dbtr.creditperiod" type="text" span="4" readonly="false" label="Zahlungsziel (Tage):" />
<item name="dbtr.email" type="textlist" span="6" readonly="false" label="E-Mail SOA/Mahnungen:" />
<item name="dbtr.mail" type="textlist" span="6" readonly="false" label="E-Mail SOA/Mahnungen:" />
</imixs-form-section>
<imixs-form-section label="Banken" path="alexander/section_businesspartner_banklist" />
</imixs-subform>

View file

@ -0,0 +1,744 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- origin at X=0.0 Y=0.0 --><bpmn2:definitions xmlns:bpmn2="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:imixs="http://www.imixs.org/bpmn2" xmlns:open-bpmn="http://open-bpmn.org/XMLSchema" xmlns:tl="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" exporter="org.eclipse.bpmn2.modeler.core" exporterVersion="1.5.4.RC1-v20220528-0836-B1" id="Definitions_1" targetNamespace="http://www.imixs.org/bpmn2">
<bpmn2:extensionElements>
<imixs:item name="txtworkflowmodelversion" type="xs:string">
<imixs:value><![CDATA[cargosoft-export-1.0]]></imixs:value>
</imixs:item>
<imixs:item name="txtfieldmapping" type="xs:string">
<imixs:value><![CDATA[Prozess Team | process.team]]></imixs:value>
</imixs:item>
<imixs:item name="txttimefieldmapping" type="xs:string">
<imixs:value><![CDATA[Rechnungsdatum | invoice.date]]></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:value><![CDATA[org.imixs.workflow.engine.plugins.IntervalPlugin]]></imixs:value>
<imixs:value><![CDATA[org.imixs.workflow.engine.plugins.SplitAndJoinPlugin]]></imixs:value>
</imixs:item>
<open-bpmn:auto-align/>
</bpmn2:extensionElements>
<bpmn2:signal id="Signal_3" name="com.alexanderlogistics.CargosoftExportAdapter"/>
<bpmn2:message id="Message_2" name="Eskalation-Subject">
<bpmn2:documentation id="Documentation_20"><![CDATA[Erinnerung - Rechnungseingang: <itemvalue>_subject</itemvalue> (<itemvalue>txtspacename</itemvalue>)]]></bpmn2:documentation>
</bpmn2:message>
<bpmn2:message id="Message_4" name="Eskalation-Body">
<bpmn2:documentation id="Documentation_21"><![CDATA[
<propertyvalue>application.url</propertyvalue>index.jsf?workitem=<itemvalue>$uniqueid</itemvalue>
Das ist eine automatische generierte E-Mail. Bitte nicht auf diese E-Mail antworten. ]]></bpmn2:documentation>
</bpmn2:message>
<bpmn2:message id="Message_3" name="Html-Header">
<bpmn2:documentation id="Documentation_16"><![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, td {
border: 1px solid #ccc;
}
th {
font-weight: bold;
}
</style>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Krieger Email</title>
</head>
<body>]]></bpmn2:documentation>
</bpmn2:message>
<bpmn2:message id="Message_6" name="Html-Footer">
<bpmn2:documentation id="Documentation_18"><![CDATA[<p>
<a href="<propertyvalue>application.url</propertyvalue>index.jsf?workitem=<itemvalue>$uniqueid</itemvalue>"><propertyvalue>application.url</propertyvalue>index.jsf?workitem=<itemvalue>$uniqueid</itemvalue></a>
</p><p>
Das ist eine automatische generierte E-Mail. Bitte nicht auf diese E-Mail antworten.
</p>
</body>
</html>]]></bpmn2:documentation>
</bpmn2:message>
<bpmn2:collaboration id="Collaboration_1" name="Default Collaboration">
<bpmn2:participant id="Participant_1" name="Cargosoft-Export" processRef="Process_1"/>
</bpmn2:collaboration>
<bpmn2:process definitionalCollaborationRef="Collaboration_1" id="Process_1" isExecutable="false" name="Cargosoft-Export" processType="Public">
<bpmn2:laneSet id="LaneSet_3" name="Lane Set 3">
<bpmn2:lane id="Lane_1" name="Buchhaltung">
<bpmn2:flowNodeRef>StartEvent_1</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>IntermediateCatchEvent_29</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>Task_6</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>BoundaryEvent_1</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>IntermediateCatchEvent_26</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>EventBasedGateway_3</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>IntermediateCatchEvent_1</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>EndEvent_2</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>IntermediateCatchEvent_27</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>Task_1</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>EndEvent_1</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>Task_2</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>IntermediateCatchEvent_2</bpmn2:flowNodeRef>
</bpmn2:lane>
</bpmn2:laneSet>
<bpmn2:endEvent id="EndEvent_2" name="Ende">
<bpmn2:incoming>SequenceFlow_9</bpmn2:incoming>
<bpmn2:documentation id="documentation_oQ5pDQ"/>
</bpmn2:endEvent>
<bpmn2:task id="Task_6" imixs:processid="1000" name="Verarbeitung">
<bpmn2:extensionElements>
<imixs:item name="txteditorid" type="xs:string">
<imixs:value><![CDATA[form_basic]]></imixs:value>
</imixs:item>
<imixs:item name="txtworkflowabstract" type="xs:string">
<imixs:value/>
</imixs:item>
<imixs:item name="txtname" type="xs:string">
<imixs:value><![CDATA[Warten auf Zahlungsziel]]></imixs:value>
</imixs:item>
<imixs:item name="txtimageurl" type="xs:string">
<imixs:value><![CDATA[typcn-archive||]]></imixs:value>
</imixs:item>
<imixs:item name="txtworkflowsummary" type="xs:string">
<imixs:value><![CDATA[Buchung <itemvalue>numsequencenumber</itemvalue>: <itemvalue>cdtr.name</itemvalue> <itemvalue>invoice.number</itemvalue>]]></imixs:value>
</imixs:item>
<imixs:item name="keyupdateacl" type="xs:boolean">
<imixs:value>true</imixs:value>
</imixs:item>
<imixs:item name="keyaddwritefields" type="xs:string">
<imixs:value><![CDATA[process.team]]></imixs:value>
</imixs:item>
<imixs:item name="keyownershipfields" type="xs:string"/>
<imixs:item name="namaddreadaccess" type="xs:string">
<imixs:value><![CDATA[{process:?:member}]]></imixs:value>
<imixs:value><![CDATA[{space:?:member}]]></imixs:value>
</imixs:item>
<imixs:item name="keyaddreadfields" type="xs:string"/>
<imixs:item name="txttype" type="xs:string">
<imixs:value><![CDATA[cargosoft]]></imixs:value>
</imixs:item>
</bpmn2:extensionElements>
<bpmn2:documentation id="Documentation_14"><![CDATA[<textblock><itemvalue>$workflowgroup</itemvalue> - <itemvalue>$workflowstatus</itemvalue></textblock>]]></bpmn2:documentation>
<bpmn2:incoming>SequenceFlow_4</bpmn2:incoming>
<bpmn2:incoming>SequenceFlow_28</bpmn2:incoming>
<bpmn2:outgoing>SequenceFlow_63</bpmn2:outgoing>
</bpmn2:task>
<bpmn2:task id="Task_2" imixs:processid="1900" name="Abgeschlossen">
<bpmn2:extensionElements>
<imixs:item name="txttype" type="xs:string">
<imixs:value><![CDATA[cargosoftarchive]]></imixs:value>
</imixs:item>
<imixs:item name="txteditorid" type="xs:string">
<imixs:value><![CDATA[form_basic]]></imixs:value>
</imixs:item>
<imixs:item name="txtworkflowabstract" type="xs:string">
<imixs:value/>
</imixs:item>
<imixs:item name="txtname" type="xs:string">
<imixs:value><![CDATA[Rechnung bezahlt]]></imixs:value>
</imixs:item>
<imixs:item name="txtimageurl" type="xs:string">
<imixs:value><![CDATA[typcn-archive||typcn-tick,imixs-success,icon-sub-se]]></imixs:value>
</imixs:item>
<imixs:item name="txtworkflowsummary" type="xs:string">
<imixs:value><![CDATA[Buchung <itemvalue>numsequencenumber</itemvalue>: <itemvalue>cdtr.name</itemvalue> <itemvalue>invoice.number</itemvalue>]]></imixs:value>
</imixs:item>
<imixs:item name="keyupdateacl" type="xs:boolean">
<imixs:value>true</imixs:value>
</imixs:item>
<imixs:item name="keyaddwritefields" type="xs:string">
<imixs:value><![CDATA[process.team]]></imixs:value>
</imixs:item>
<imixs:item name="keyownershipfields" type="xs:string"/>
<imixs:item name="namaddreadaccess" type="xs:string">
<imixs:value><![CDATA[{process:?:member}]]></imixs:value>
<imixs:value><![CDATA[{space:?:member}]]></imixs:value>
</imixs:item>
<imixs:item name="keyaddreadfields" type="xs:string"/>
</bpmn2:extensionElements>
<bpmn2:documentation id="Documentation_4"><![CDATA[<textblock><itemvalue>$workflowgroup</itemvalue> - <itemvalue>$workflowstatus</itemvalue></textblock>]]></bpmn2:documentation>
<bpmn2:incoming>SequenceFlow_16</bpmn2:incoming>
<bpmn2:outgoing>SequenceFlow_9</bpmn2:outgoing>
<bpmn2:outgoing>SequenceFlow_27</bpmn2:outgoing>
</bpmn2:task>
<bpmn2:sequenceFlow id="SequenceFlow_9" sourceRef="Task_2" targetRef="EndEvent_2">
<bpmn2:documentation id="documentation_EpkvLA"/>
</bpmn2:sequenceFlow>
<bpmn2:intermediateCatchEvent id="IntermediateCatchEvent_26" imixs:activityid="110" name="[Export]">
<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="keyaccessmode" type="xs:string">
<imixs:value><![CDATA[0]]></imixs:value>
</imixs:item>
<imixs:item name="keyscheduledactivity" type="xs:string">
<imixs:value><![CDATA[1]]></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[7000]]></imixs:value>
</imixs:item>
<imixs:item name="txtnextprocesstree" type="xs:string">
<imixs:value/>
</imixs:item>
<imixs:item name="txtactivityresult" type="xs:string">
<imixs:value><![CDATA[<cargosoft name="report">cargosoft</cargosoft>]]></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[1]]></imixs:value>
</imixs:item>
<imixs:item name="numversionactivityid" type="xs:string">
<imixs:value/>
</imixs:item>
<imixs:item name="rtfresultlog" type="xs:string">
<imixs:value><![CDATA[Export processing]]></imixs:value>
</imixs:item>
<imixs:item name="keyupdateacl" type="xs:boolean">
<imixs:value>false</imixs:value>
</imixs:item>
<imixs:item name="numactivitydelay" type="xs:string">
<imixs:value><![CDATA[5]]></imixs:value>
</imixs:item>
<imixs:item name="keyactivitydelayunit" type="xs:string">
<imixs:value><![CDATA[1]]></imixs:value>
</imixs:item>
<imixs:item name="keyscheduledbaseobject" type="xs:string">
<imixs:value><![CDATA[1]]></imixs:value>
</imixs:item>
</bpmn2:extensionElements>
<bpmn2:documentation id="Documentation_63"><![CDATA[Zwischenspeichern]]></bpmn2:documentation>
<bpmn2:incoming>SequenceFlow_63</bpmn2:incoming>
<bpmn2:incoming>SequenceFlow_23</bpmn2:incoming>
<bpmn2:outgoing>SequenceFlow_15</bpmn2:outgoing>
<bpmn2:dataOutput id="DataOutput_1" name="Signal_2_Output"/>
<bpmn2:dataOutputAssociation id="DataOutputAssociation_1">
<bpmn2:sourceRef>DataOutput_1</bpmn2:sourceRef>
</bpmn2:dataOutputAssociation>
<bpmn2:outputSet id="OutputSet_2" name="Output Set 2">
<bpmn2:dataOutputRefs>DataOutput_1</bpmn2:dataOutputRefs>
</bpmn2:outputSet>
<bpmn2:signalEventDefinition id="SignalEventDefinition_2" signalRef="Signal_3"/>
</bpmn2:intermediateCatchEvent>
<bpmn2:sequenceFlow id="SequenceFlow_63" sourceRef="Task_6" targetRef="IntermediateCatchEvent_26">
<bpmn2:documentation id="documentation_ILwCBQ"/>
</bpmn2:sequenceFlow>
<bpmn2:intermediateCatchEvent id="IntermediateCatchEvent_29" imixs:activityid="100" name="[init]">
<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="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="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[0]]></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[7000]]></imixs:value>
</imixs:item>
<imixs:item name="txtnextprocesstree" type="xs:string">
<imixs:value/>
</imixs:item>
<imixs:item name="txtactivityresult" type="xs:string">
<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[1]]></imixs:value>
</imixs:item>
<imixs:item name="numversionactivityid" type="xs:string">
<imixs:value/>
</imixs:item>
<imixs:item name="rtfresultlog" type="xs:string">
<imixs:value><![CDATA[Export started]]></imixs:value>
</imixs:item>
<imixs:item name="keyupdateacl" type="xs:boolean">
<imixs:value>false</imixs:value>
</imixs:item>
</bpmn2:extensionElements>
<bpmn2:incoming>SequenceFlow_1</bpmn2:incoming>
<bpmn2:outgoing>SequenceFlow_4</bpmn2:outgoing>
<bpmn2:signalEventDefinition id="SignalEventDefinition_4"/>
<bpmn2:documentation id="documentation_MrKi0w"/>
</bpmn2:intermediateCatchEvent>
<bpmn2:eventBasedGateway gatewayDirection="Diverging" id="EventBasedGateway_3">
<bpmn2:incoming>SequenceFlow_15</bpmn2:incoming>
<bpmn2:outgoing>SequenceFlow_38</bpmn2:outgoing>
<bpmn2:outgoing>SequenceFlow_3</bpmn2:outgoing>
<bpmn2:documentation id="documentation_ijXxNA"/>
</bpmn2:eventBasedGateway>
<bpmn2:intermediateCatchEvent id="IntermediateCatchEvent_27" imixs:activityid="300" name="[FAILED]">
<bpmn2:extensionElements>
<imixs:item name="rtfresultlog" type="CDATA">
<imixs:value><![CDATA[Export failed]]></imixs:value>
</imixs:item>
<imixs:item name="txtactivityresult" type="CDATA">
<imixs:value/>
</imixs:item>
<imixs:item name="keypublicresult" type="xs:string">
<imixs:value><![CDATA[0]]></imixs:value>
</imixs:item>
</bpmn2:extensionElements>
<bpmn2:incoming>SequenceFlow_38</bpmn2:incoming>
<bpmn2:outgoing>SequenceFlow_24</bpmn2:outgoing>
<bpmn2:signalEventDefinition id="SignalEventDefinition_6"/>
<bpmn2:documentation id="documentation_H3wD5Q"/>
</bpmn2:intermediateCatchEvent>
<bpmn2:sequenceFlow id="SequenceFlow_38" sourceRef="EventBasedGateway_3" targetRef="IntermediateCatchEvent_27">
<bpmn2:documentation id="documentation_A90Dng"/>
</bpmn2:sequenceFlow>
<bpmn2:startEvent id="StartEvent_1" name="Start">
<bpmn2:outgoing>SequenceFlow_1</bpmn2:outgoing>
<bpmn2:documentation id="documentation_04vNoA"/>
</bpmn2:startEvent>
<bpmn2:sequenceFlow id="SequenceFlow_1" sourceRef="StartEvent_1" targetRef="IntermediateCatchEvent_29">
<bpmn2:documentation id="documentation_25qdpQ"/>
</bpmn2:sequenceFlow>
<bpmn2:task id="Task_1" imixs:processid="1800" name="Abgebrochen">
<bpmn2:extensionElements>
<imixs:item name="txttype" type="xs:string">
<imixs:value><![CDATA[cargosoftarchive]]></imixs:value>
</imixs:item>
<imixs:item name="txteditorid" type="xs:string">
<imixs:value><![CDATA[form_basic]]></imixs:value>
</imixs:item>
<imixs:item name="txtworkflowabstract" type="xs:string">
<imixs:value/>
</imixs:item>
<imixs:item name="txtname" type="xs:string">
<imixs:value><![CDATA[Rechnung bezahlt]]></imixs:value>
</imixs:item>
<imixs:item name="txtimageurl" type="xs:string">
<imixs:value><![CDATA[typcn-archive||typcn-warning,imixs-error,icon-sub-se]]></imixs:value>
</imixs:item>
<imixs:item name="txtworkflowsummary" type="xs:string">
<imixs:value><![CDATA[Buchung <itemvalue>numsequencenumber</itemvalue>: <itemvalue>cdtr.name</itemvalue> <itemvalue>invoice.number</itemvalue>]]></imixs:value>
</imixs:item>
<imixs:item name="keyupdateacl" type="xs:boolean">
<imixs:value>true</imixs:value>
</imixs:item>
<imixs:item name="keyaddwritefields" type="xs:string">
<imixs:value><![CDATA[process.team]]></imixs:value>
</imixs:item>
<imixs:item name="keyownershipfields" type="xs:string"/>
<imixs:item name="namaddreadaccess" type="xs:string">
<imixs:value><![CDATA[{process:?:member}]]></imixs:value>
<imixs:value><![CDATA[{space:?:member}]]></imixs:value>
</imixs:item>
<imixs:item name="keyaddreadfields" type="xs:string"/>
</bpmn2:extensionElements>
<bpmn2:documentation id="Documentation_3"><![CDATA[<textblock><itemvalue>$workflowgroup</itemvalue> - <itemvalue>$workflowstatus</itemvalue></textblock>]]></bpmn2:documentation>
<bpmn2:incoming>SequenceFlow_24</bpmn2:incoming>
<bpmn2:outgoing>SequenceFlow_5</bpmn2:outgoing>
<bpmn2:outgoing>SequenceFlow_29</bpmn2:outgoing>
</bpmn2:task>
<bpmn2:endEvent id="EndEvent_1" name="Ende">
<bpmn2:incoming>SequenceFlow_5</bpmn2:incoming>
<bpmn2:documentation id="documentation_vfGsOQ"/>
</bpmn2:endEvent>
<bpmn2:sequenceFlow id="SequenceFlow_5" sourceRef="Task_1" targetRef="EndEvent_1">
<bpmn2:documentation id="documentation_Wu3TVA"/>
</bpmn2:sequenceFlow>
<bpmn2:intermediateCatchEvent id="IntermediateCatchEvent_1" imixs:activityid="200" name="[SUCCESS]">
<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="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="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[0]]></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[7000]]></imixs:value>
</imixs:item>
<imixs:item name="txtnextprocesstree" type="xs:string">
<imixs:value/>
</imixs:item>
<imixs:item name="txtactivityresult" type="xs:string">
<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[1]]></imixs:value>
</imixs:item>
<imixs:item name="numversionactivityid" type="xs:string">
<imixs:value/>
</imixs:item>
<imixs:item name="rtfresultlog" type="xs:string">
<imixs:value><![CDATA[Export successful]]></imixs:value>
</imixs:item>
<imixs:item name="keyupdateacl" type="xs:boolean">
<imixs:value>false</imixs:value>
</imixs:item>
</bpmn2:extensionElements>
<bpmn2:documentation id="Documentation_6"><![CDATA[IW24 Export manuell abschließen]]></bpmn2:documentation>
<bpmn2:incoming>SequenceFlow_3</bpmn2:incoming>
<bpmn2:outgoing>SequenceFlow_16</bpmn2:outgoing>
<bpmn2:outputSet id="OutputSet_1" name="Output Set 1"/>
</bpmn2:intermediateCatchEvent>
<bpmn2:sequenceFlow id="SequenceFlow_3" sourceRef="EventBasedGateway_3" targetRef="IntermediateCatchEvent_1">
<bpmn2:documentation id="documentation_BC4ufw"/>
</bpmn2:sequenceFlow>
<bpmn2:sequenceFlow id="SequenceFlow_4" sourceRef="IntermediateCatchEvent_29" targetRef="Task_6">
<bpmn2:documentation id="documentation_xCP0Gw"/>
</bpmn2:sequenceFlow>
<bpmn2:sequenceFlow id="SequenceFlow_15" sourceRef="IntermediateCatchEvent_26" targetRef="EventBasedGateway_3">
<bpmn2:documentation id="documentation_tKll0A"/>
</bpmn2:sequenceFlow>
<bpmn2:sequenceFlow id="SequenceFlow_16" sourceRef="IntermediateCatchEvent_1" targetRef="Task_2">
<bpmn2:documentation id="documentation_rdyTuQ"/>
</bpmn2:sequenceFlow>
<bpmn2:boundaryEvent attachedToRef="Task_6" id="BoundaryEvent_1" name="">
<bpmn2:outgoing>SequenceFlow_23</bpmn2:outgoing>
<bpmn2:timerEventDefinition id="TimerEventDefinition_1"/>
<bpmn2:documentation id="documentation_8eb0Iw"/>
</bpmn2:boundaryEvent>
<bpmn2:sequenceFlow id="SequenceFlow_23" sourceRef="BoundaryEvent_1" targetRef="IntermediateCatchEvent_26">
<bpmn2:documentation id="documentation_PYEHrQ"/>
</bpmn2:sequenceFlow>
<bpmn2:sequenceFlow id="SequenceFlow_24" sourceRef="IntermediateCatchEvent_27" targetRef="Task_1">
<bpmn2:documentation id="documentation_YlGA1w"/>
</bpmn2:sequenceFlow>
<bpmn2:intermediateCatchEvent id="IntermediateCatchEvent_2" imixs:activityid="10" name="Cargosoft Export wiederholen">
<bpmn2:extensionElements>
<imixs:item name="rtfresultlog" type="CDATA">
<imixs:value><![CDATA[Export neu gestartet]]></imixs:value>
</imixs:item>
</bpmn2:extensionElements>
<bpmn2:incoming>SequenceFlow_27</bpmn2:incoming>
<bpmn2:incoming>SequenceFlow_29</bpmn2:incoming>
<bpmn2:outgoing>SequenceFlow_28</bpmn2:outgoing>
<bpmn2:documentation id="documentation_n0bnzA"/>
</bpmn2:intermediateCatchEvent>
<bpmn2:sequenceFlow id="SequenceFlow_27" sourceRef="Task_2" targetRef="IntermediateCatchEvent_2">
<bpmn2:documentation id="documentation_yiSWug"/>
</bpmn2:sequenceFlow>
<bpmn2:sequenceFlow id="SequenceFlow_28" sourceRef="IntermediateCatchEvent_2" targetRef="Task_6">
<bpmn2:documentation id="documentation_vJ0NDw"/>
</bpmn2:sequenceFlow>
<bpmn2:sequenceFlow id="SequenceFlow_29" sourceRef="Task_1" targetRef="IntermediateCatchEvent_2">
<bpmn2:documentation id="documentation_xtxbpA"/>
</bpmn2:sequenceFlow>
<bpmn2:textAnnotation id="TextAnnotation_1" textFormat="">
<bpmn2:text><![CDATA[Scheduler lattest after 5 min]]></bpmn2:text>
<bpmn2:documentation id="documentation_jCfSzw"/>
</bpmn2:textAnnotation>
<bpmn2:association id="Association_1" sourceRef="TextAnnotation_1" targetRef="IntermediateCatchEvent_26">
<bpmn2:documentation id="documentation_vfeq0g"/>
</bpmn2:association>
<bpmn2:documentation id="documentation_pcdUww"/>
</bpmn2:process>
<bpmndi:BPMNDiagram id="BPMNDiagram_1" name="Default Collaboration Diagram">
<bpmndi:BPMNPlane bpmnElement="Collaboration_1" id="BPMNPlane_1">
<bpmndi:BPMNShape bpmnElement="Participant_1" id="BPMNShape_1" isHorizontal="true">
<dc:Bounds height="301.0" width="1001.0" x="100.0" y="100.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_1" labelStyle="BPMNLabelStyle_1">
<dc:Bounds height="92.0" width="14.0" x="106.0" y="204.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="Lane_1" id="BPMNShape_Lane_1" isHorizontal="true">
<dc:Bounds height="301.0" width="971.0" x="130.0" y="100.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_26" labelStyle="BPMNLabelStyle_1">
<dc:Bounds height="69.0" width="14.0" x="136.0" y="216.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="EndEvent_2" id="BPMNShape_EndEvent_2">
<dc:Bounds height="36.0" width="36.0" x="977.0" y="211.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_3" labelStyle="BPMNLabelStyle_1">
<dc:Bounds height="14.0" width="29.0" x="980.0" y="247.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="Task_6" id="BPMNShape_Task_6">
<dc:Bounds height="50.0" width="110.0" x="330.0" y="204.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_13" labelStyle="BPMNLabelStyle_1">
<dc:Bounds height="14.0" width="70.0" x="350.0" y="222.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="Task_2" id="BPMNShape_Task_2">
<dc:Bounds height="50.0" width="110.0" x="780.0" y="204.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_5" labelStyle="BPMNLabelStyle_1">
<dc:Bounds height="14.0" width="84.0" x="793.0" y="222.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="IntermediateCatchEvent_26" id="BPMNShape_IntermediateCatchEvent_26">
<dc:Bounds height="36.0" width="36.0" x="480.0" y="211.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_141" labelStyle="BPMNLabelStyle_1">
<dc:Bounds height="14.0" width="41.0" x="478.0" y="247.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="IntermediateCatchEvent_29" id="BPMNShape_IntermediateCatchEvent_29">
<dc:Bounds height="36.0" width="36.0" x="260.0" y="211.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_145" labelStyle="BPMNLabelStyle_1">
<dc:Bounds height="14.0" width="22.0" x="267.0" y="247.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="Message_2" id="BPMNShape_Message_1">
<dc:Bounds height="20.0" width="30.0" x="140.0" y="0.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_174">
<dc:Bounds height="28.0" width="63.0" x="124.0" y="20.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="Message_4" id="BPMNShape_Message_2">
<dc:Bounds height="20.0" width="30.0" x="209.0" y="0.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_175">
<dc:Bounds height="28.0" width="63.0" x="193.0" y="20.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="EventBasedGateway_3" id="BPMNShape_EventBasedGateway_3" isMarkerVisible="true">
<dc:Bounds height="50.0" width="50.0" x="570.0" y="204.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_17" labelStyle="BPMNLabelStyle_1">
<dc:Bounds height="20.0" width="100.0" x="545.0" y="257.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="IntermediateCatchEvent_27" id="BPMNShape_IntermediateCatchEvent_27">
<dc:Bounds height="36.0" width="36.0" x="670.0" y="127.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_77" labelStyle="BPMNLabelStyle_1">
<dc:Bounds height="14.0" width="47.0" x="665.0" y="163.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="Message_3" id="BPMNShape_Message_3">
<dc:Bounds height="20.0" width="30.0" x="287.0" y="0.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_163">
<dc:Bounds height="14.0" width="70.0" x="267.0" y="20.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="Message_6" id="BPMNShape_Message_4">
<dc:Bounds height="20.0" width="30.0" x="360.0" y="0.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_164">
<dc:Bounds height="14.0" width="64.0" x="343.0" y="20.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="StartEvent_1" id="BPMNShape_StartEvent_1">
<dc:Bounds height="36.0" width="36.0" x="190.0" y="211.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_2" labelStyle="BPMNLabelStyle_1">
<dc:Bounds height="14.0" width="25.0" x="195.0" y="247.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="Task_1" id="BPMNShape_Task_1">
<dc:Bounds height="50.0" width="110.0" x="780.0" y="120.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_9">
<dc:Bounds height="14.0" width="74.0" x="798.0" y="138.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="EndEvent_1" id="BPMNShape_EndEvent_1">
<dc:Bounds height="36.0" width="36.0" x="977.0" y="127.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_10" labelStyle="BPMNLabelStyle_1">
<dc:Bounds height="14.0" width="29.0" x="980.0" y="163.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="IntermediateCatchEvent_1" id="BPMNShape_IntermediateCatchEvent_1">
<dc:Bounds height="36.0" width="36.0" x="671.0" y="211.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_16" labelStyle="BPMNLabelStyle_1">
<dc:Bounds height="14.0" width="65.0" x="657.0" y="247.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="BoundaryEvent_1" id="BPMNShape_BoundaryEvent_1">
<dc:Bounds height="36.0" width="36.0" x="382.0" y="186.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_36">
<dc:Bounds height="20.0" width="100.0" x="350.0" y="225.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="IntermediateCatchEvent_2" id="BPMNShape_IntermediateCatchEvent_2">
<dc:Bounds height="36.0" width="36.0" x="817.0" y="300.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_39" labelStyle="BPMNLabelStyle_1">
<dc:Bounds height="42.0" width="70.0" x="800.0" y="336.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="TextAnnotation_1" id="BPMNShape_TextAnnotation_1">
<dc:Bounds height="50.0" width="131.0" x="460.0" y="117.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_6">
<dc:Bounds height="44.0" width="119.0" x="466.0" y="117.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge bpmnElement="SequenceFlow_9" id="BPMNEdge_SequenceFlow_11" sourceElement="BPMNShape_Task_2" targetElement="BPMNShape_EndEvent_2">
<bpmndi:BPMNLabel id="BPMNLabel_11"/>
<di:waypoint x="890.0" y="229.0"/>
<di:waypoint x="933.0" y="229.0"/>
<di:waypoint x="977.0" y="229.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="SequenceFlow_63" id="BPMNEdge_SequenceFlow_63" sourceElement="BPMNShape_Task_6" targetElement="BPMNShape_IntermediateCatchEvent_26">
<bpmndi:BPMNLabel id="BPMNLabel_142"/>
<di:waypoint x="440.0" y="229.0"/>
<di:waypoint x="460.0" y="229.0"/>
<di:waypoint x="480.0" y="229.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="SequenceFlow_38" id="BPMNEdge_SequenceFlow_37" sourceElement="BPMNShape_EventBasedGateway_3" targetElement="BPMNShape_IntermediateCatchEvent_27">
<bpmndi:BPMNLabel id="BPMNLabel_137"/>
<di:waypoint x="595.0" y="204.0"/>
<di:waypoint x="595.0" y="145.0"/>
<di:waypoint x="670.0" y="145.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="SequenceFlow_1" id="BPMNEdge_SequenceFlow_1" sourceElement="BPMNShape_StartEvent_1" targetElement="BPMNShape_IntermediateCatchEvent_29">
<bpmndi:BPMNLabel id="BPMNLabel_4"/>
<di:waypoint x="226.0" y="229.0"/>
<di:waypoint x="243.0" y="229.0"/>
<di:waypoint x="260.0" y="229.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="SequenceFlow_5" id="BPMNEdge_SequenceFlow_5" sourceElement="BPMNShape_Task_1" targetElement="BPMNShape_EndEvent_1">
<bpmndi:BPMNLabel id="BPMNLabel_12"/>
<di:waypoint x="890.0" y="145.0"/>
<di:waypoint x="933.0" y="145.0"/>
<di:waypoint x="977.0" y="145.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="SequenceFlow_3" id="BPMNEdge_SequenceFlow_3" sourceElement="BPMNShape_EventBasedGateway_3" targetElement="BPMNShape_IntermediateCatchEvent_1">
<bpmndi:BPMNLabel id="BPMNLabel_18"/>
<di:waypoint x="620.0" y="229.0"/>
<di:waypoint x="645.0" y="229.0"/>
<di:waypoint x="671.0" y="229.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="SequenceFlow_4" id="BPMNEdge_SequenceFlow_4" sourceElement="BPMNShape_IntermediateCatchEvent_29" targetElement="BPMNShape_Task_6">
<bpmndi:BPMNLabel id="BPMNLabel_7"/>
<di:waypoint x="296.0" y="229.0"/>
<di:waypoint x="313.0" y="229.0"/>
<di:waypoint x="330.0" y="229.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="SequenceFlow_15" id="BPMNEdge_SequenceFlow_15" sourceElement="BPMNShape_IntermediateCatchEvent_26" targetElement="BPMNShape_EventBasedGateway_3">
<bpmndi:BPMNLabel id="BPMNLabel_8"/>
<di:waypoint x="516.0" y="229.0"/>
<di:waypoint x="543.0" y="229.0"/>
<di:waypoint x="570.0" y="229.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="SequenceFlow_16" id="BPMNEdge_SequenceFlow_16" sourceElement="BPMNShape_IntermediateCatchEvent_1" targetElement="BPMNShape_Task_2">
<bpmndi:BPMNLabel id="BPMNLabel_22"/>
<di:waypoint x="707.0" y="229.0"/>
<di:waypoint x="743.0" y="229.0"/>
<di:waypoint x="780.0" y="229.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="SequenceFlow_23" id="BPMNEdge_SequenceFlow_24" sourceElement="BPMNShape_BoundaryEvent_1" targetElement="BPMNShape_IntermediateCatchEvent_26">
<bpmndi:BPMNLabel id="BPMNLabel_37"/>
<di:waypoint x="400.0" y="186.0"/>
<di:waypoint x="400.0" y="176.0"/>
<di:waypoint x="498.0" y="176.0"/>
<di:waypoint x="498.0" y="211.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="SequenceFlow_24" id="BPMNEdge_SequenceFlow_25" sourceElement="BPMNShape_IntermediateCatchEvent_27" targetElement="BPMNShape_Task_1">
<bpmndi:BPMNLabel id="BPMNLabel_38"/>
<di:waypoint x="706.0" y="145.0"/>
<di:waypoint x="743.0" y="145.0"/>
<di:waypoint x="780.0" y="145.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="SequenceFlow_27" id="BPMNEdge_SequenceFlow_27" sourceElement="BPMNShape_Task_2" targetElement="BPMNShape_IntermediateCatchEvent_2">
<bpmndi:BPMNLabel id="BPMNLabel_40"/>
<di:waypoint x="835.0" y="254.0"/>
<di:waypoint x="835.0" y="277.0"/>
<di:waypoint x="835.0" y="300.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="SequenceFlow_28" id="BPMNEdge_SequenceFlow_28" sourceElement="BPMNShape_IntermediateCatchEvent_2" targetElement="BPMNShape_Task_6">
<bpmndi:BPMNLabel id="BPMNLabel_41"/>
<di:waypoint x="817.0" y="318.0"/>
<di:waypoint x="385.0" y="318.0"/>
<di:waypoint x="385.0" y="254.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="SequenceFlow_29" id="BPMNEdge_SequenceFlow_29" sourceElement="BPMNShape_Task_1" targetElement="BPMNShape_IntermediateCatchEvent_2">
<bpmndi:BPMNLabel id="BPMNLabel_42"/>
<di:waypoint x="890.0" y="153.0"/>
<di:waypoint x="900.0" y="153.0"/>
<di:waypoint x="900.0" y="318.0"/>
<di:waypoint x="853.0" y="318.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="Association_1" id="BPMNEdge_Association_1" sourceElement="BPMNShape_TextAnnotation_1" targetElement="BPMNShape_IntermediateCatchEvent_26">
<bpmndi:BPMNLabel id="BPMNLabel_14"/>
<di:waypoint x="525.0" y="167.0"/>
<di:waypoint x="525.0" y="189.0"/>
<di:waypoint x="498.0" y="189.0"/>
<di:waypoint x="498.0" y="211.0"/>
</bpmndi:BPMNEdge>
</bpmndi:BPMNPlane>
<bpmndi:BPMNLabelStyle id="BPMNLabelStyle_1">
<dc:Font name="arial" size="9.0"/>
</bpmndi:BPMNLabelStyle>
</bpmndi:BPMNDiagram>
</bpmn2:definitions>

File diff suppressed because it is too large Load diff