refactoring business data - neue Logik

This commit is contained in:
Ralph Soika 2025-04-27 16:27:51 +02:00
parent ac4127e353
commit aa5f000715
31 changed files with 1436 additions and 227 deletions

View file

@ -6,7 +6,7 @@
|- Neue Plugin Logik (Aktualisierung der BP Nummer und Aktivierung von BP Objekten falls diese archiviert waren) |- Neue Plugin Logik (Aktualisierung der BP Nummer und Aktivierung von BP Objekten falls diese archiviert waren)
- Zoho Schnittstelle - Zoho Schnittstelle
**Migration** #### Migration
- Encoding für CSV Impoort aus cargosoft muss auf `encoding=UTF-8` stehen! - Encoding für CSV Impoort aus cargosoft muss auf `encoding=UTF-8` stehen!
- Neues Businesspartner BPMN Modell einspielen - Neues Businesspartner BPMN Modell einspielen
@ -22,9 +22,16 @@
- Modelle Anpassen - Modelle Anpassen
in allen Rechnungsmodellen müssen die alten form parts `alexander/cdtreingabe` und `alexander/dbtreingabe` mit dem neuen `alexander/businesspartner_search` ausgetauscht werden. in verschiedenen müssen die alten form parts `alexander/cdtreingabe` und `alexander/dbtreingabe` mit dem neuen `alexander/businesspartner_search` ausgetauscht werden.
Der `BusinessPartnerController` bzw. das `InvoicePlugin` bzw. `InvoiceOutgoingPlugin` kümmert sich automatisch um die Migration Der `BusinessPartnerController` bzw. das `InvoicePlugin` bzw. `InvoiceOutgoingPlugin` kümmert sich automatisch um die Migration
Betroffen sind:
- reingsungseingang
- rechnungsausgang
- zahlungseingang
- Analyse-debitor
### 1.3.3 ### 1.3.3
- Imixs-Archive 3.1.1. Compactor Sevrvice - Imixs-Archive 3.1.1. Compactor Sevrvice

View file

@ -27,7 +27,6 @@ import org.imixs.workflow.exceptions.ProcessingErrorException;
import org.imixs.workflow.exceptions.QueryException; import org.imixs.workflow.exceptions.QueryException;
import com.alexanderlogistics.InvoiceUtil; import com.alexanderlogistics.InvoiceUtil;
import com.alexanderlogistics.KreditorDebitorService;
import com.alexanderlogistics.mahnlauf.MahnlaufService; import com.alexanderlogistics.mahnlauf.MahnlaufService;
import jakarta.inject.Inject; import jakarta.inject.Inject;

View file

@ -0,0 +1,84 @@
<ui:composition xmlns="http://www.w3.org/1999/xhtml" xmlns:f="http://xmlns.jcp.org/jsf/core"
xmlns:h="http://xmlns.jcp.org/jsf/html" xmlns:c="http://xmlns.jcp.org/jsp/jstl/core"
xmlns:ui="http://xmlns.jcp.org/jsf/facelets" xmlns:pt="http://xmlns.jcp.org/jsf/passthrough"
xmlns:marty="http://xmlns.jcp.org/jsf/composite/marty" xmlns:i="http://xmlns.jcp.org/jsf/composite/imixs">
<!-- Cargosoft Search integration
This subform is loaded by the form_basic.xhtml page.
The subform provides a jsf commandScript which calls the cargosoftController.searchCreditor method in the backend.
The script below inits a autocompletion feature for the input field.
See imixs-office.autocompletion.js
See also:
https://stackoverflow.com/questions/16588327/how-to-invoke-a-jsf-managed-bean-on-a-html-dom-event-using-native-javascript
https://dzone.com/articles/execute-a-jsf-ajax-request-by-just-a-function-call
https://www.w3schools.com/howto/howto_js_autocomplete.asp
-->
<h:commandScript name="cargosoftDbtrSearch" action="#{cargosoftController.searchDebitor()}"
render="autocomplete-resultlist-cargosoft" onevent="autocompleteShowResult" />
<h:commandScript name="updateDbtrNumber" action="#{opListController.updateDbtrNumber()}"
render="#{opListContainer.clientId}" onevent="ajaxUpdateInvoiceSelection" />
<script type="text/javascript">
/*<![CDATA[*/
// init ml input fields...
$(document).ready(function () {
// add autocomplete feature to dbtr.number...
var creditorField = $("input[data-item='dbtr.number']");
$(creditorField).each(function () {
$(this).addClass("imixs-ml");
// set callback function...
autocompleteInitInput(this, cargosoftDbtrSearch, 'autocomplete-resultlist-cargosoft', selectDbtrCallback);
});
// add cargsoft label if available
var dbtrName = "#{workflowController.workitem.item['dbtr.name']}";
// append span with dbtr.name....
creditorField.after("<span id='dbtr-name-id' class='small'>" + dbtrName + "</p>");
});
// Hier bekommen wir die JSON Struktur mit allen daten.
// diese Daten werden auf die einzelnen Felder verteilt.
function selectDbtrCallback(selection) {
const dbtrData = JSON.parse(selection);
// fill data into the fields....
var inputElement = $("input[data-item='dbtr.number']");
inputElement.val(dbtrData.no);
// remove old dbtr.name
$('#dbtr-name-id').remove();
// append span with dbtr.name....
inputElement.after("<span id='dbtr-name-id' class='small'>" + dbtrData.name + "</p>");
var inputElementDbtrName = $("input[id$='dbtr_name']");
if (inputElementDbtrName) {
inputElementDbtrName.val(dbtrData.name);
}
// check if we have a mail...
if (dbtrData.mail) {
var inputElementMail = $("input[data-item='dbtr.mail'],textarea[data-item='dbtr.mail']");
if (inputElementMail) {
inputElementMail.val(dbtrData.mail);
}
}
// finally we do a trick and trigger the commandScript updateDbtrNumber which
// refreshes the op section
updateDbtrNumber({ dbtrNumber: dbtrData.no });
}
/*]]>*/
</script>
<!-- Hier speichern das von Kreditor vorgeschlagene zahlungsziel -->
<h:inputHidden id="dbtr_creditperiod" value="#{workflowController.workitem.item['dbtr.creditperiod']}" />
<h:inputHidden id="dbtr_name" value="#{workflowController.workitem.item['dbtr.name']}" />
</ui:composition>

View file

@ -92,6 +92,7 @@ public class AGLAnalyticControllerDebitor implements Serializable {
} }
String dbtrNumber = event.getWorkitem().getItemValueString("dbtr.number"); String dbtrNumber = event.getWorkitem().getItemValueString("dbtr.number");
logger.info("Analytic Event : " + dbtrNumber);
String dbtrNumberLast = event.getWorkitem().getItemValueString("dbtr.number.last"); String dbtrNumberLast = event.getWorkitem().getItemValueString("dbtr.number.last");
// Recompute only if last dbtr.number has changed or no values yet computed // Recompute only if last dbtr.number has changed or no values yet computed

View file

@ -37,6 +37,7 @@ import org.imixs.workflow.ItemCollection;
import org.imixs.workflow.engine.DocumentService; import org.imixs.workflow.engine.DocumentService;
import org.imixs.workflow.exceptions.AccessDeniedException; import org.imixs.workflow.exceptions.AccessDeniedException;
import org.imixs.workflow.exceptions.QueryException; import org.imixs.workflow.exceptions.QueryException;
import org.imixs.workflow.faces.data.WorkflowController;
import org.imixs.workflow.faces.data.WorkflowEvent; import org.imixs.workflow.faces.data.WorkflowEvent;
import jakarta.enterprise.context.ConversationScoped; import jakarta.enterprise.context.ConversationScoped;
@ -67,6 +68,9 @@ public class BusinessPartnerController implements Serializable {
protected List<ItemCollection> invoicesIn = null; protected List<ItemCollection> invoicesIn = null;
protected List<ItemCollection> dunnings = null; protected List<ItemCollection> dunnings = null;
@Inject
protected WorkflowController workflowController;
@Inject @Inject
DocumentService documentService; DocumentService documentService;
@ -299,6 +303,65 @@ public class BusinessPartnerController implements Serializable {
} }
} }
/**
* This JSF backing method is called by businesspartner_serach.xhtml after the
* user has selected a new businesspartner.
* <p>
* The method lookups the given BusinessPartner and updates the metadata for
* dbtr/cdtr depending on the workflow type.
* A form will than rerender the opList section.
*/
public void updateMetaData() {
FacesContext fc = FacesContext.getCurrentInstance();
String bpid = fc.getExternalContext().getRequestParameterMap().get("partnerID");
logger.fine(".........bpid = " + bpid);
ItemCollection businessPartner = businessPartnerService.getBusinessPartnerByID(bpid);
if (businessPartner != null) {
// Eingangsrechnung
if (InvoiceUtil.isCreditorInvoice(workflowController.getWorkitem())) {
workflowController.getWorkitem().setItemValue("cdtr.number",
businessPartner.getItemValueString("cdtr.number"));
workflowController.getWorkitem().setItemValue("cdtr.name",
businessPartner.getItemValueString("partner.name"));
workflowController.getWorkitem().setItemValue("cdtr.email",
businessPartner.getItemValue("cdtr.email"));
}
// Ausgangsrechnung
if (InvoiceUtil.isDebitorInvoice(workflowController.getWorkitem())) {
workflowController.getWorkitem().setItemValue("dbtr.number",
businessPartner.getItemValueString("dbtr.number"));
workflowController.getWorkitem().setItemValue("dbtr.name",
businessPartner.getItemValueString("partner.name"));
workflowController.getWorkitem().setItemValue("dbtr.email",
businessPartner.getItemValue("dbtr.email"));
}
// Zahlungseingang
if (workflowController.getWorkitem().getModelVersion().startsWith("zahlungseingang")) {
workflowController.getWorkitem().setItemValue("dbtr.number",
businessPartner.getItemValueString("dbtr.number"));
workflowController.getWorkitem().setItemValue("dbtr.name",
businessPartner.getItemValueString("partner.name"));
workflowController.getWorkitem().setItemValue("dbtr.email",
businessPartner.getItemValue("dbtr.email"));
}
// Analyse Debitor
if (workflowController.getWorkitem().getModelVersion().startsWith("analyse-debitor")) {
workflowController.getWorkitem().setItemValue("dbtr.number",
businessPartner.getItemValueString("dbtr.number"));
workflowController.getWorkitem().setItemValue("dbtr.name",
businessPartner.getItemValueString("partner.name"));
workflowController.getWorkitem().setItemValue("dbtr.email",
businessPartner.getItemValue("dbtr.email"));
}
}
}
/** /**
* Hilfsmethode die eine JSON Struktur mit allen relevanten Daten für einen * Hilfsmethode die eine JSON Struktur mit allen relevanten Daten für einen
* BusinessPartner erzeugt. * BusinessPartner erzeugt.

View file

@ -313,4 +313,58 @@ public class BusinessPartnerService {
return result; return result;
} }
/**
* Diese Methode übertragt neue IBAN/BIC Pare in den Kreditor Banken Bereich
*
* @param cdtrNumber
* @param iban
* @param bic
* @throws PluginException
*/
public void addNewIBANBIC(ItemCollection businessPartner, String iban, String bic) throws PluginException {
if (businessPartner != null) {
List<ItemCollection> bankenListe = explodeBanks(businessPartner);
ItemCollection newbank = new ItemCollection();
// {iban=[IBAN], name=[Test Bank], id=[test ], bic=[BIC]}
newbank.setItemValue("iban", iban);
newbank.setItemValue("bic", bic);
newbank.setItemValue("id", bankenListe.size() + 1);
newbank.setItemValue("name", "Banke-" + bankenListe.size() + 1);
bankenListe.add(newbank);
implodeBanks(businessPartner, bankenListe);
documentService.save(businessPartner);
}
}
/**
* Diese Methode gibt true zurück wenn die angegebene IBAN/BIC Kombination als
* bank bereits bekannt ist
*
* @param cdtrNumber
* @param iban
* @param bic
* @throws PluginException
*/
public boolean isIBANBICKnown(ItemCollection businessPartner, String iban, String bic) throws PluginException {
if (businessPartner != null) {
List<ItemCollection> bankenListe = explodeBanks(businessPartner);
for (ItemCollection bank : bankenListe) {
if (iban.equals(bank.getItemValueString("iban"))
&& bic.equals(bank.getItemValueString("bic"))) {
// known!
return true;
}
}
}
return false;
}
} }

View file

@ -20,7 +20,6 @@ import java.util.stream.Collectors;
import org.imixs.workflow.ItemCollection; import org.imixs.workflow.ItemCollection;
import org.imixs.workflow.engine.DocumentService; import org.imixs.workflow.engine.DocumentService;
import org.imixs.workflow.exceptions.PluginException;
import org.imixs.workflow.exceptions.QueryException; import org.imixs.workflow.exceptions.QueryException;
import org.imixs.workflow.faces.data.WorkflowController; import org.imixs.workflow.faces.data.WorkflowController;
import org.imixs.workflow.office.views.SearchController; import org.imixs.workflow.office.views.SearchController;
@ -58,7 +57,7 @@ public class DebitorStatistikController implements Serializable {
protected SearchController searchController; protected SearchController searchController;
@Inject @Inject
protected KreditorDebitorService kreditorDebitorService; protected BusinessPartnerService businessPartnerService;
/** /**
* Initialize default behavior initialize an opitonal id from the query string * Initialize default behavior initialize an opitonal id from the query string
@ -73,14 +72,13 @@ public class DebitorStatistikController implements Serializable {
String id = paramMap.get("dbtr.number"); String id = paramMap.get("dbtr.number");
if (id != null && !id.isEmpty()) { if (id != null && !id.isEmpty()) {
workflowController.getWorkitem().setItemValue("dbtr.number", id); workflowController.getWorkitem().setItemValue("dbtr.number", id);
try {
ItemCollection dbtr = kreditorDebitorService.findDebitor(id); ItemCollection dbtr = businessPartnerService.getBusinessPartnerByID(InvoiceUtil.buildBPID(id));
if (dbtr != null) { // ItemCollection dbtr = kreditorDebitorService.findDebitor(id);
workflowController.getWorkitem().setItemValue("dbtr.name", dbtr.getItemValueString("_vendor_name")); if (dbtr != null) {
} workflowController.getWorkitem().setItemValue("dbtr.name", dbtr.getItemValueString("partner.name"));
} catch (PluginException e) {
// e.printStackTrace();
} }
} }
} }

View file

@ -17,9 +17,6 @@ import jakarta.inject.Inject;
*/ */
public class InvoiceOutgoingPlugin extends AbstractPlugin { public class InvoiceOutgoingPlugin extends AbstractPlugin {
@Inject
KreditorDebitorService kreditorService;
@Inject @Inject
BusinessPartnerService businessPartnerService; BusinessPartnerService businessPartnerService;

View file

@ -13,7 +13,6 @@ import org.imixs.workflow.exceptions.PluginException;
import org.imixs.workflow.exceptions.QueryException; import org.imixs.workflow.exceptions.QueryException;
import org.imixs.workflow.faces.util.ResourceBundleHandler; import org.imixs.workflow.faces.util.ResourceBundleHandler;
import jakarta.ejb.EJB;
import jakarta.inject.Inject; import jakarta.inject.Inject;
/** /**
@ -68,10 +67,6 @@ public class InvoicePlugin extends AbstractPlugin {
@ConfigProperty(name = "invoice.position.pattern", defaultValue = INVOICE_POSITIONS_PATTERN_DEFAULT) @ConfigProperty(name = "invoice.position.pattern", defaultValue = INVOICE_POSITIONS_PATTERN_DEFAULT)
String invoicePositionsPattern; String invoicePositionsPattern;
// @Inject
@EJB
KreditorDebitorService kreditorService;
@Inject @Inject
BusinessPartnerService businessPartnerService; BusinessPartnerService businessPartnerService;
@ -359,38 +354,28 @@ public class InvoicePlugin extends AbstractPlugin {
return; return;
} }
// wenn bereits eine Überneahme angedroht wurde dann übernehemen! ItemCollection businessPartner = businessPartnerService
if (!overtakeIBAN.isEmpty()) { .getBusinessPartnerByID(InvoiceUtil.buildBPID(cdtrNumber));
kreditorService.addNewIBANBIC(cdtrNumber, iban, bic); if (businessPartner != null) {
workitem.setItemValue("ibanbic.overtake", "");
return;
}
// search the kreditor
ItemCollection cdtr = kreditorService.findCreditorDebitor(cdtrNumber);
if (cdtr != null) {
// update country // update country
workitem.setItemValue("invoice.country", cdtr.getItemValueString("_vendor_country")); workitem.setItemValue("invoice.country", businessPartner.getItemValueString("partner.country"));
// wenn bereits eine Übernahme angedroht wurde, dann übernehmen wir die neue
// IBAN/BIC!
if (!overtakeIBAN.isEmpty()) {
businessPartnerService.addNewIBANBIC(businessPartner, iban, bic);
workitem.setItemValue("ibanbic.overtake", "");
return;
}
// Prüfen ob wir die IBAN schon kennen // Prüfen ob wir die IBAN schon kennen
if (iban.equals(cdtr.getItemValueString("cdtr.iban")) && bic.equals(cdtr.getItemValueString("cdtr.bic"))) { if (!businessPartnerService.isIBANBICKnown(businessPartner, iban, bic)) {
return; // OK - scheinbar ist diese IBAN/BIC nicht bekannt. Also fragen wir mal nach....
workitem.setItemValue("ibanbic.overtake", iban + bic);
String message = resourceBundleHandler.findMessage("ERROR_IBAN_UNKNOWN");
throw new PluginException(InvoicePlugin.class.getName(), ERROR_NEW_IBANBIC, message);
} }
if (iban.equals(cdtr.getItemValueString("cdtr.iban2"))
&& bic.equals(cdtr.getItemValueString("cdtr.bic2"))) {
return;
}
if (iban.equals(cdtr.getItemValueString("cdtr.iban3"))
&& bic.equals(cdtr.getItemValueString("cdtr.bic3"))) {
return;
}
if (iban.equals(cdtr.getItemValueString("cdtr.iban4"))
&& bic.equals(cdtr.getItemValueString("cdtr.bic4"))) {
return;
}
// OK - scheinbar ist diese IBAN/BIC nicht bekannt. Also fragen wir mal nach....
workitem.setItemValue("ibanbic.overtake", iban + bic);
String message = resourceBundleHandler.findMessage("ERROR_IBAN_UNKNOWN");
throw new PluginException(InvoicePlugin.class.getName(), ERROR_NEW_IBANBIC, message);
} }
} }

View file

@ -18,7 +18,6 @@ import org.imixs.workflow.faces.data.WorkflowEvent;
import jakarta.enterprise.context.ConversationScoped; import jakarta.enterprise.context.ConversationScoped;
import jakarta.enterprise.event.Observes; import jakarta.enterprise.event.Observes;
import jakarta.faces.context.FacesContext;
import jakarta.inject.Inject; import jakarta.inject.Inject;
import jakarta.inject.Named; import jakarta.inject.Named;
@ -69,6 +68,9 @@ public class OPListController implements Serializable {
@Inject @Inject
protected InvoiceService invoiceService; protected InvoiceService invoiceService;
@Inject
protected BusinessPartnerService businessPartnerService;
/** /**
* Diese Methode wird für Zahlungseingänge und Mahnläufe verwendet. * Diese Methode wird für Zahlungseingänge und Mahnläufe verwendet.
* <p> * <p>
@ -311,22 +313,6 @@ public class OPListController implements Serializable {
workitem.setItemValue("$workitemref", selectionList); workitem.setItemValue("$workitemref", selectionList);
} }
/**
* This JSF backing method is called by cargosft-debitor-serach.xhtml after the
* user has selected a new debitor.
* <p>
* The new dbtrNumber is slected form the curren ajax request param 'dbtrNumber'
* <p>
* The method just updates the dbtr.number of the current workitem. The form
* will than rerender the opList section.
*/
public void updateDbtrNumber() {
FacesContext fc = FacesContext.getCurrentInstance();
String dbtrNumber = fc.getExternalContext().getRequestParameterMap().get("dbtrNumber");
logger.fine(".........dbtrNumber = " + dbtrNumber);
workflowController.getWorkitem().setItemValue("dbtr.number", dbtrNumber);
}
/** /**
* Hilfsmethode delegates to ZahlungseingangServcie * Hilfsmethode delegates to ZahlungseingangServcie
* *

View file

@ -35,9 +35,6 @@ public class SteuerbescheidPlugin extends AbstractPlugin {
@Inject @Inject
protected DocumentService documentService; protected DocumentService documentService;
@Inject
KreditorDebitorService kreditorService;
/** /**
* Prüft ob der Steuerbetrag abgerechnet ist. * Prüft ob der Steuerbetrag abgerechnet ist.
* *

View file

@ -16,7 +16,8 @@ import org.imixs.workflow.exceptions.PluginException;
import org.imixs.workflow.exceptions.QueryException; import org.imixs.workflow.exceptions.QueryException;
import org.imixs.workflow.sepa.services.SepaWorkflowService; import org.imixs.workflow.sepa.services.SepaWorkflowService;
import com.alexanderlogistics.KreditorDebitorService; import com.alexanderlogistics.BusinessPartnerService;
import com.alexanderlogistics.InvoiceUtil;
import jakarta.ejb.EJB; import jakarta.ejb.EJB;
import jakarta.inject.Inject; import jakarta.inject.Inject;
@ -40,15 +41,15 @@ public class MahnlaufRefAddAdapter implements SignalAdapter {
@EJB @EJB
ModelService modelService; ModelService modelService;
@EJB
KreditorDebitorService kreditorDebitorService;
@EJB @EJB
WorkflowService workflowService = null; WorkflowService workflowService = null;
@Inject @Inject
SepaWorkflowService sepaWorkflowService; SepaWorkflowService sepaWorkflowService;
@Inject
BusinessPartnerService businessPartnerService;
/** /**
* This method finds or create the Mahnlauf and adds a reference ($workitemref) * This method finds or create the Mahnlauf and adds a reference ($workitemref)
* to the current invoice. * to the current invoice.
@ -156,9 +157,10 @@ public class MahnlaufRefAddAdapter implements SignalAdapter {
// lookup email.... // lookup email....
String dbtrNumber = invoice.getItemValueString("dbtr.number"); String dbtrNumber = invoice.getItemValueString("dbtr.number");
ItemCollection dbtrItemCol = kreditorDebitorService.findDebitor("D" + dbtrNumber); ItemCollection businessPartner = businessPartnerService
if (dbtrItemCol != null) { .getBusinessPartnerByID(InvoiceUtil.buildBPID(dbtrNumber));
mahnlaufWorkitem.setItemValue(MahnlaufService.ITEM_DBTR_EMAIL, dbtrItemCol.getItemValue("cdtr.mail"));// dbtr.mail if (businessPartner != null) {
mahnlaufWorkitem.setItemValue(MahnlaufService.ITEM_DBTR_EMAIL, businessPartner.getItemValue("dbtr.mail"));// dbtr.mail
} }
mahnlaufWorkitem.setItemValue(MahnlaufService.ITEM_DBTR_NUMBER, mahnlaufWorkitem.setItemValue(MahnlaufService.ITEM_DBTR_NUMBER,

View file

@ -49,7 +49,6 @@ import org.imixs.workflow.exceptions.QueryException;
import com.alexanderlogistics.BusinessPartnerService; import com.alexanderlogistics.BusinessPartnerService;
import com.alexanderlogistics.InvoiceUtil; import com.alexanderlogistics.InvoiceUtil;
import com.alexanderlogistics.KreditorDebitorService;
import jakarta.annotation.security.DeclareRoles; import jakarta.annotation.security.DeclareRoles;
import jakarta.annotation.security.RolesAllowed; import jakarta.annotation.security.RolesAllowed;
@ -89,6 +88,9 @@ import jakarta.enterprise.event.Observes;
public class BusinessPartnerImportService { public class BusinessPartnerImportService {
private static Logger logger = Logger.getLogger(BusinessPartnerImportService.class.getName()); private static Logger logger = Logger.getLogger(BusinessPartnerImportService.class.getName());
public static final String TYPE_CARGOSOFTKREDITOR = "cargosoftkreditor";
public static final String OPTION_MANDANT_ID = "mandant.id"; public static final String OPTION_MANDANT_ID = "mandant.id";
public static final String DATE_FORMAT = "yyyy-MM-dd'T'HH:mm:ss"; public static final String DATE_FORMAT = "yyyy-MM-dd'T'HH:mm:ss";
public static final String REGEX_IMPORTTEXTPATTERN = "^R[1-8] .*$"; public static final String REGEX_IMPORTTEXTPATTERN = "^R[1-8] .*$";
@ -228,7 +230,7 @@ public class BusinessPartnerImportService {
// Hier migrieren wir jetzt auch die alten IBAN/BIC Daten // Hier migrieren wir jetzt auch die alten IBAN/BIC Daten
try { try {
String cargoShortID = partnerID.substring(2); String cargoShortID = partnerID.substring(2);
String query = "(type:" + KreditorDebitorService.TYPE_CARGOSOFTKREDITOR + ")"; String query = "(type:" + TYPE_CARGOSOFTKREDITOR + ")";
query = query + " AND ( name:K7" + cargoShortID + " OR name:D1" + cargoShortID + " )"; query = query + " AND ( name:K7" + cargoShortID + " OR name:D1" + cargoShortID + " )";
List<ItemCollection> oldList = documentService.find(query, 2, 0); List<ItemCollection> oldList = documentService.find(query, 2, 0);

View file

@ -79,8 +79,8 @@ import org.w3c.dom.NodeList;
import org.xml.sax.InputSource; import org.xml.sax.InputSource;
import org.xml.sax.SAXException; import org.xml.sax.SAXException;
import com.alexanderlogistics.BusinessPartnerService;
import com.alexanderlogistics.InvoiceUtil; import com.alexanderlogistics.InvoiceUtil;
import com.alexanderlogistics.KreditorDebitorService;
import com.alexanderlogistics.mahnlauf.MahnlaufService; import com.alexanderlogistics.mahnlauf.MahnlaufService;
import jakarta.ejb.EJB; import jakarta.ejb.EJB;
@ -123,15 +123,15 @@ public class CargosoftXMLEAkteImportService {
@EJB @EJB
ModelService modelService; ModelService modelService;
@EJB
KreditorDebitorService kreditorDebitorService;
@EJB @EJB
DocumentImportService documentImportService; DocumentImportService documentImportService;
@Inject @Inject
MahnlaufService mahnlaufService; MahnlaufService mahnlaufService;
@Inject
BusinessPartnerService businessPartnerService;
/** /**
* This method reacts on a CDI ImportEvent and reads documents form a ftp * This method reacts on a CDI ImportEvent and reads documents form a ftp
* server. * server.
@ -413,41 +413,32 @@ public class CargosoftXMLEAkteImportService {
return null; return null;
} }
String cdtrNumber = workitem.getItemValueString("cdtr.number"); String bid = InvoiceUtil.buildBPID(workitem.getItemValueString("cdtr.number"));
if (cdtrNumber.startsWith("K") || cdtrNumber.startsWith("D")) { ItemCollection businessPartner = businessPartnerService.getBusinessPartnerByID(bid);
workitem.setItemValue("cdtr.number", cdtrNumber.substring(1)); // ersten BUchstaben hier wegnehmen (warum auch immer)
} workitem.setItemValue("cdtr.number", businessPartner.getItemValueString("cdtr.number").substring(1));
// lookup debitor and set name // lookup debitor and set name
if (cdtrNumber != null && !cdtrNumber.isEmpty()) if (businessPartner != null) {
try { workitem.setItemValue("cdtr.name", businessPartner.getItemValueString("partner.name"));
ItemCollection cdtr = kreditorDebitorService.findCreditor(cdtrNumber); // Anhand der Creditoren Stammdaten errechnen wir die Sprache für diese
if (cdtr != null) { // Rechnung
workitem.setItemValue("cdtr.name", cdtr.getItemValueString("_vendor_name")); String country = businessPartner.getItemValueString("partner.country");
// Anhand der Creditoren Stammdaten errrechnen wir die Sprache für diese workitem.setItemValue("invoice.country", country);
// Rechnung if (country.equalsIgnoreCase("de") || country.equalsIgnoreCase("ch")
String country = cdtr.getItemValueString("_VENDOR_COUNTRY"); || country.equalsIgnoreCase("at")) {
workitem.setItemValue("invoice.country", country); workitem.setItemValue("invoice.language", "DE");
if (country.equalsIgnoreCase("de") || country.equalsIgnoreCase("ch") } else {
|| country.equalsIgnoreCase("at")) { workitem.setItemValue("invoice.language", "EN");
workitem.setItemValue("invoice.language", "DE");
} else {
workitem.setItemValue("invoice.language", "EN");
}
}
} catch (PluginException e) {
// e.printStackTrace();
} }
// Row Positions lesen
readXMLRows(doc, workitem);
// Jetzt noch das Space mapping
workitem.setItemValue("invoice.text", workitem.getItemValueString("invoice.positions"));
mahnlaufService.mapInvoiceTextToSpace(workitem, spacePosMappings);
// Row Positions lesen // Finally we attache the pdf file and the XML content to the workitem.
readXMLRows(doc, workitem); attacheFiles(doc, workitem);
}
// Jetzt noch das Space mapping
workitem.setItemValue("invoice.text", workitem.getItemValueString("invoice.positions"));
mahnlaufService.mapInvoiceTextToSpace(workitem, spacePosMappings);
// Finally we attache the pdf file and the XML content to the workitem.
attacheFiles(doc, workitem);
} catch (ParserConfigurationException | SAXException | IOException e) { } catch (ParserConfigurationException | SAXException | IOException e) {
throw new PluginException(CargosoftXMLEAkteImportService.class.getName(), throw new PluginException(CargosoftXMLEAkteImportService.class.getName(),
"XML_ERROR", e.getMessage()); "XML_ERROR", e.getMessage());

View file

@ -80,7 +80,6 @@ import org.xml.sax.InputSource;
import org.xml.sax.SAXException; import org.xml.sax.SAXException;
import com.alexanderlogistics.InvoiceUtil; import com.alexanderlogistics.InvoiceUtil;
import com.alexanderlogistics.KreditorDebitorService;
import com.alexanderlogistics.mahnlauf.MahnlaufService; import com.alexanderlogistics.mahnlauf.MahnlaufService;
import jakarta.ejb.EJB; import jakarta.ejb.EJB;
@ -114,6 +113,9 @@ public class CargosoftXMLInvoiceImportService {
private static Logger logger = Logger.getLogger(CargosoftXMLInvoiceImportService.class.getName()); private static Logger logger = Logger.getLogger(CargosoftXMLInvoiceImportService.class.getName());
public static final String OPTION_MANDANT_ID = "mandant.id"; public static final String OPTION_MANDANT_ID = "mandant.id";
public static final String TYPE_CARGOSOFTKREDITOR = "cargosoftkreditor";
public static final String DATE_FORMAT = "yyyy-MM-dd'T'HH:mm:ss"; public static final String DATE_FORMAT = "yyyy-MM-dd'T'HH:mm:ss";
public static final String REGEX_IMPORTTEXTPATTERN = "^R[1-8] .*$"; public static final String REGEX_IMPORTTEXTPATTERN = "^R[1-8] .*$";
@ -126,9 +128,6 @@ public class CargosoftXMLInvoiceImportService {
@EJB @EJB
ModelService modelService; ModelService modelService;
@EJB
KreditorDebitorService kreditorDebitorService;
@EJB @EJB
DocumentImportService documentImportService; DocumentImportService documentImportService;
@ -451,7 +450,7 @@ public class CargosoftXMLInvoiceImportService {
} }
// lookup debitor and set name // lookup debitor and set name
try { try {
ItemCollection dbtr = kreditorDebitorService.findDebitor(dbtrNumber); ItemCollection dbtr = findDebitor(dbtrNumber);
if (dbtr != null) { if (dbtr != null) {
workitem.setItemValue("dbtr.name", dbtr.getItemValueString("_vendor_name")); workitem.setItemValue("dbtr.name", dbtr.getItemValueString("_vendor_name"));
// Anhand der Creditoren Stammdaten errrechnen wir die Sprache für diese // Anhand der Creditoren Stammdaten errrechnen wir die Sprache für diese
@ -824,4 +823,30 @@ public class CargosoftXMLInvoiceImportService {
} }
return false; return false;
} }
/**
* Diese Method sucht einen Debitor.
* <p>
* Diese Methode erwartet das führende D
*
* @throws PluginException
*/
public ItemCollection findDebitor(String dbtrNumber) throws PluginException {
if ((!dbtrNumber.startsWith("D"))) {
dbtrNumber = "D" + dbtrNumber;
}
try {
String query = "(type:" + TYPE_CARGOSOFTKREDITOR + ") AND (name:" + dbtrNumber + ")";
List<ItemCollection> result = documentService.find(query, 1, 0, "$modified", true);
if (result.size() > 0) {
return result.get(0);
}
} catch (QueryException e) {
throw new PluginException(PluginException.class.getName(), "QUERY ERROR", e.getMessage(), e);
}
return null;
}
} }

View file

@ -1,90 +0,0 @@
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://xmlns.jcp.org/jsf/core"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:c="http://xmlns.jcp.org/jsp/jstl/core"
xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
xmlns:pt="http://xmlns.jcp.org/jsf/passthrough"
xmlns:marty="http://xmlns.jcp.org/jsf/composite/marty"
xmlns:i="http://xmlns.jcp.org/jsf/composite/imixs">
<!-- Cargosoft Search integration
This subform is loaded by the form_basic.xhtml page.
The subform provides a jsf commandScript which calls the cargosoftController.searchCreditor method in the backend.
The script below inits a autocompletion feature for the input field.
See imixs-office.autocompletion.js
See also:
https://stackoverflow.com/questions/16588327/how-to-invoke-a-jsf-managed-bean-on-a-html-dom-event-using-native-javascript
https://dzone.com/articles/execute-a-jsf-ajax-request-by-just-a-function-call
https://www.w3schools.com/howto/howto_js_autocomplete.asp
-->
<h:commandScript name="cargosoftDbtrSearch" action="#{cargosoftController.searchDebitor()}"
render="autocomplete-resultlist-cargosoft" onevent="autocompleteShowResult" />
<h:commandScript name="updateDbtrNumber" action="#{opListController.updateDbtrNumber()}"
render="#{opListContainer.clientId}" onevent="ajaxUpdateInvoiceSelection" />
<script type="text/javascript">
/*<![CDATA[*/
// init ml input fields...
$(document).ready(function() {
// add autocomplete feature to dbtr.number...
var creditorField= $("input[data-item='dbtr.number']");
$(creditorField).each(function() {
$(this).addClass("imixs-ml");
// set callback function...
autocompleteInitInput(this,cargosoftDbtrSearch,'autocomplete-resultlist-cargosoft',selectDbtrCallback);
});
// add cargsoft label if available
var dbtrName="#{workflowController.workitem.item['dbtr.name']}";
// append span with dbtr.name....
creditorField.after( "<span id='dbtr-name-id' class='small'>" + dbtrName + "</p>" );
});
// Hier bekommen wir die JSON Struktur mit allen daten.
// diese Daten werden auf die einzelnen Felder verteilt.
function selectDbtrCallback(selection) {
const dbtrData = JSON.parse(selection);
// fill data into the fields....
var inputElement=$("input[data-item='dbtr.number']");
inputElement.val(dbtrData.no);
// remove old dbtr.name
$('#dbtr-name-id').remove();
// append span with dbtr.name....
inputElement.after( "<span id='dbtr-name-id' class='small'>" + dbtrData.name + "</p>" );
var inputElementDbtrName=$("input[id$='dbtr_name']");
if (inputElementDbtrName) {
inputElementDbtrName.val(dbtrData.name);
}
// check if we have a mail...
if (dbtrData.mail) {
var inputElementMail=$("input[data-item='dbtr.mail'],textarea[data-item='dbtr.mail']");
if (inputElementMail) {
inputElementMail.val(dbtrData.mail);
}
}
// finally we do a trick and trigger the commandScript updateDbtrNumber which
// refreshes the op section
updateDbtrNumber({ dbtrNumber: dbtrData.no });
}
/*]]>*/
</script>
<!-- Hier speichern das von Kreditor vorgeschlagene zahlungsziel -->
<h:inputHidden id="dbtr_creditperiod" value="#{workflowController.workitem.item['dbtr.creditperiod']}" />
<h:inputHidden id="dbtr_name" value="#{workflowController.workitem.item['dbtr.name']}" />
</ui:composition>

View file

@ -27,6 +27,9 @@
<h:commandScript name="businsspartnerSearch" action="#{businessPartnerController.search(options)}" <h:commandScript name="businsspartnerSearch" action="#{businessPartnerController.search(options)}"
render="autocomplete-resultlist-businsspartner" onevent="autocompleteShowResult" /> render="autocomplete-resultlist-businsspartner" onevent="autocompleteShowResult" />
<h:commandScript name="updateBPForm" action="#{businessPartnerController.updateMetaData()}"
render="#{opListContainer.clientId}" onevent="handleUpdateEvent" />
<script type="text/javascript"> <script type="text/javascript">
/*<![CDATA[*/ /*<![CDATA[*/
@ -54,6 +57,18 @@
$('#businsspartner-konto-id').remove(); $('#businsspartner-konto-id').remove();
// append span with konto name.... // append span with konto name....
inputElementKonto.after("<span id='businsspartner-konto-id' class='small'>" + kontoData['partner.name'] + "</span>"); inputElementKonto.after("<span id='businsspartner-konto-id' class='small'>" + kontoData['partner.name'] + "</span>");
// finally we do a trick and trigger the commandScript updateBPForm which
// refreshes the op section
updateBPForm({ partnerID: kontoData.name });
}
function handleUpdateEvent(data) {
console.log('bin in handleUpdaetEvent');
if (typeof ajaxUpdateInvoiceSelection === 'function') {
console.log('und wir haben die fuktion');
ajaxUpdateInvoiceSelection(data);
}
} }
/*]]>*/ /*]]>*/

View file

@ -5,8 +5,6 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import com.alexanderlogistics.datev.DatevCargosoftImportAdapter;
/** /**
* This test generates random test data * This test generates random test data
* *
@ -29,12 +27,4 @@ public class TestPostionsnummernRegex {
} }
@Test
public void testCargoImportText() {
assertTrue("R3 EX-PRO-2208-054".matches(DatevCargosoftImportAdapter.REGEX_IMPORTTEXTPATTERN));
assertTrue("R3 VP".matches(DatevCargosoftImportAdapter.REGEX_IMPORTTEXTPATTERN));
assertFalse("R LA-HOL-2208-013".matches(DatevCargosoftImportAdapter.REGEX_IMPORTTEXTPATTERN));
}
} }

View file

@ -28,8 +28,8 @@ import org.mockito.junit.jupiter.MockitoExtension;
import org.mockito.junit.jupiter.MockitoSettings; import org.mockito.junit.jupiter.MockitoSettings;
import org.mockito.quality.Strictness; import org.mockito.quality.Strictness;
import com.alexanderlogistics.BusinessPartnerService;
import com.alexanderlogistics.InvoiceUtil; import com.alexanderlogistics.InvoiceUtil;
import com.alexanderlogistics.KreditorDebitorService;
import com.alexanderlogistics.mahnlauf.MahnlaufService; import com.alexanderlogistics.mahnlauf.MahnlaufService;
/** /**
@ -51,7 +51,7 @@ public class EAkteImportTester {
private DocumentService documentService; private DocumentService documentService;
@Mock @Mock
private KreditorDebitorService kreditorDebitorService; private BusinessPartnerService businessPartnerService;
@Mock @Mock
private MahnlaufService mahnlaufService; private MahnlaufService mahnlaufService;

View file

@ -28,8 +28,8 @@ import org.mockito.junit.jupiter.MockitoExtension;
import org.mockito.junit.jupiter.MockitoSettings; import org.mockito.junit.jupiter.MockitoSettings;
import org.mockito.quality.Strictness; import org.mockito.quality.Strictness;
import com.alexanderlogistics.BusinessPartnerService;
import com.alexanderlogistics.InvoiceUtil; import com.alexanderlogistics.InvoiceUtil;
import com.alexanderlogistics.KreditorDebitorService;
import com.alexanderlogistics.mahnlauf.MahnlaufService; import com.alexanderlogistics.mahnlauf.MahnlaufService;
/** /**
@ -51,10 +51,10 @@ public class InvoiceImportTester {
private DocumentService documentService; private DocumentService documentService;
@Mock @Mock
private KreditorDebitorService kreditorDebitorService; private MahnlaufService mahnlaufService;
@Mock @Mock
private MahnlaufService mahnlaufService; private BusinessPartnerService businessPartnerService;
@BeforeEach @BeforeEach
public void setUp() { public void setUp() {

View file

@ -0,0 +1,480 @@
<?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" name="Definitions 1" targetNamespace="http://www.imixs.org/bpmn2">
<bpmn2:extensionElements>
<imixs:item name="txtworkflowmodelversion" type="xs:string">
<imixs:value><![CDATA[analyse-debitor-en-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:value><![CDATA[Debitor-Mail|dbtr.mail]]></imixs:value>
</imixs:item>
<imixs:item name="txttimefieldmapping" type="xs:string">
<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>
<open-bpmn:auto-align>true</open-bpmn:auto-align>
</bpmn2:extensionElements>
<bpmn2:signal id="Signal_1" name="com.alexanderlogistics.AGLAnalyticExcelAdapterDebitor"/>
<bpmn2:message id="Message_2" name="Html-Header">
<bpmn2:documentation id="Documentation_22"><![CDATA[<html>
<head>
<style type="text/css">
html, body, div, p, pre, 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_7" name="Html-Footer">
<bpmn2:documentation id="Documentation_15"><![CDATA[</body>
</html>]]></bpmn2:documentation>
</bpmn2:message>
<bpmn2:collaboration id="Collaboration_1" name="Mahnlauf">
<bpmn2:participant id="Participant_1" name="Analysis Debitor " processRef="Process_1">
<bpmn2:documentation id="documentation_sqQYFQ"/>
</bpmn2:participant>
<bpmn2:participant id="Participant_2" name="SEPA-Export Pool" processRef="eingangsrechnung-de"/>
</bpmn2:collaboration>
<bpmn2:process id="eingangsrechnung-de" isExecutable="false" name="Default Process" processType="Public">
<bpmn2:documentation id="documentation_sxNNHw"/>
</bpmn2:process>
<bpmn2:process definitionalCollaborationRef="Collaboration_1" id="Process_1" isExecutable="false" name="Analysis Debitor " processType="Private">
<bpmn2:laneSet id="LaneSet_1" name="Lane Set 1">
<bpmn2:lane id="Lane_1" name="Team">
<bpmn2:flowNodeRef>StartEvent_1</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>Task_1</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>EndEvent_3</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>Task_2</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>IntermediateCatchEvent_8</bpmn2:flowNodeRef>
<bpmn2:documentation id="documentation_WBGJTA"/>
<bpmn2:flowNodeRef>DataObject_1</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>event_HrHS9A</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>dataObject_00mX6w</bpmn2:flowNodeRef>
</bpmn2:lane>
</bpmn2:laneSet>
<bpmn2:startEvent id="StartEvent_1" name="Start">
<bpmn2:outgoing>SequenceFlow_4</bpmn2:outgoing>
<bpmn2:documentation id="documentation_5CHRCQ"/>
</bpmn2:startEvent>
<bpmn2:task id="Task_2" imixs:processid="1900" name="Archived">
<bpmn2:extensionElements>
<imixs:item name="txtworkflowsummary" type="xs:string">
<imixs:value><![CDATA[SOA <itemvalue>dbtr.name</itemvalue> - <itemvalue format="EEE. dd. MMM. yyyy">$lasteventdate</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-chart-pie||||typcn-tick,imixs-success]]></imixs:value>
</imixs:item>
<imixs:item name="txttype" type="xs:string">
<imixs:value><![CDATA[workitemarchive]]></imixs:value>
</imixs:item>
<imixs:item name="namaddreadaccess" type="xs:string">
<imixs:value><![CDATA[{process:?:member}]]></imixs:value>
</imixs:item>
<imixs:item name="txteditorid" type="xs:string">
<imixs:value><![CDATA[form_basic_read]]></imixs:value>
</imixs:item>
</bpmn2:extensionElements>
<bpmn2:documentation id="Documentation_4"><![CDATA[<textblock><itemvalue>$workflowgroup</itemvalue> - <itemvalue>$workflowstatus</itemvalue></textblock>]]></bpmn2:documentation>
<bpmn2:outgoing>SequenceFlow_10</bpmn2:outgoing>
<bpmn2:incoming>sequenceFlow_OL83kQ</bpmn2:incoming>
<bpmn2:incoming>sequenceFlow_1K0l0g</bpmn2:incoming>
</bpmn2:task>
<bpmn2:sequenceFlow id="SequenceFlow_10" sourceRef="Task_2" targetRef="EndEvent_3">
<bpmn2:documentation id="documentation_WzPj2A"/>
</bpmn2:sequenceFlow>
<bpmn2:endEvent id="EndEvent_3" name="End">
<bpmn2:incoming>SequenceFlow_10</bpmn2:incoming>
<bpmn2:documentation id="documentation_sMnhoQ"/>
</bpmn2:endEvent>
<bpmn2:task id="Task_1" imixs:processid="1000" name="Creation">
<bpmn2:extensionElements>
<imixs:item name="txtworkflowsummary" type="xs:string">
<imixs:value><![CDATA[<itemvalue format="dd.MM.yyyy">$lasteventdate</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-chart-pie||]]></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="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_4</bpmn2:incoming>
<bpmn2:outgoing>sequenceFlow_17AQjg</bpmn2:outgoing>
<bpmn2:outgoing>sequenceFlow_LhcuMQ</bpmn2:outgoing>
</bpmn2:task>
<bpmn2:sequenceFlow id="SequenceFlow_4" sourceRef="StartEvent_1" targetRef="Task_1">
<bpmn2:documentation id="documentation_p6trwA"/>
</bpmn2:sequenceFlow>
<bpmn2:dataObject id="DataObject_1" name="Form">
<bpmn2:documentation id="Documentation_17"><![CDATA[<imixs-form>
<imixs-form-section columns="2">
<item name="dbtr.number" type="custom" path="alexander/businesspartner_search" required="true" label="Debtor:" />
</imixs-form-section>
<imixs-form-section columns="4" label="Invoices">
<item name="analytic.invoices.count.all" type="custom" path="alexander/analyze_plain" label="All:" />
<item name="analytic.invoices.count.open" type="custom" path="alexander/analyze_plain" label="Unpaid:" />
<item name="analytic.invoices.count.due" type="custom" path="alexander/analyze_plain" label="Due:" />
<item name="analytic.invoices.count.dunning" type="custom" path="alexander/analyze_plain" label="Dunning:" />
<item name="analytic.payment.avg.due" type="custom" path="alexander/analyze_plain" label="Average term of credit:" />
<item name="analytic.payment.avg.days" type="custom" path="alexander/analyze_plain" label="Average payment duration:" />
</imixs-form-section>
<imixs-form-section columns="1" label="Trend Payment ">
<item name="analytic.invoices.trend" type="custom" path="alexander/analyze_chart" label="Payments in the last 6 months:" />
</imixs-form-section>
</imixs-form>]]></bpmn2:documentation>
<bpmn2:dataState id="DataState_1"/>
</bpmn2:dataObject>
<bpmn2:intermediateCatchEvent id="IntermediateCatchEvent_8" imixs:activityid="40" name="Archive">
<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/>
</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/>
</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/>
</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[Analysis data archived]]></imixs:value>
</imixs:item>
<imixs:item name="keyupdateacl" type="xs:boolean">
<imixs:value>false</imixs:value>
</imixs:item>
</bpmn2:extensionElements>
<bpmn2:documentation id="Documentation_2"><![CDATA[Archive analysis data]]></bpmn2:documentation>
<bpmn2:incoming>sequenceFlow_17AQjg</bpmn2:incoming>
<bpmn2:outgoing>sequenceFlow_OL83kQ</bpmn2:outgoing>
</bpmn2:intermediateCatchEvent>
<bpmn2:association id="Association_2" sourceRef="DataObject_1" targetRef="Task_1">
<bpmn2:documentation id="documentation_pDK6DQ"/>
</bpmn2:association>
<bpmn2:sequenceFlow id="sequenceFlow_17AQjg" sourceRef="Task_1" targetRef="IntermediateCatchEvent_8">
<bpmn2:documentation id="documentation_c8gvZg"/>
</bpmn2:sequenceFlow>
<bpmn2:sequenceFlow id="sequenceFlow_OL83kQ" sourceRef="IntermediateCatchEvent_8" targetRef="Task_2">
<bpmn2:documentation id="documentation_j2zUkw"/>
</bpmn2:sequenceFlow>
<bpmn2:intermediateCatchEvent id="event_HrHS9A" imixs:activityid="20" name="Excel 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="txtmailsubject" type="xs:string">
<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/>
</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/>
</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[Analysis data archived and Excel report generated]]></imixs:value>
</imixs:item>
<imixs:item name="keyupdateacl" type="xs:boolean">
<imixs:value>false</imixs:value>
</imixs:item>
<imixs:item name="txtactivityresult" type="xs:string">
<imixs:value><![CDATA[<soa name="excel-export">
<textblock>SOA Template</textblock>
<template>soa_template.xlsx</template>
<target-name>soa_<itemvalue>dbtr.number</itemvalue>_<itemvalue format="yyyy-MM-dd">$lasteventdate</itemvalue>.xlsx</target-name>
</soa>
<poi-update name="findreplace">
<find>F6</find>
<replace><itemvalue format="dd.MM.yyyy">$lasteventdate</itemvalue></replace>
<type>date</type>
</poi-update>
<poi-update name="findreplace">
<find>A7</find>
<replace><itemvalue>dbtr.name</itemvalue></replace>
</poi-update>
]]></imixs:value>
</imixs:item>
</bpmn2:extensionElements>
<bpmn2:documentation id="documentation_pCTOtQ"><![CDATA[Create Excel File]]></bpmn2:documentation>
<bpmn2:signalEventDefinition id="signalEventDefinition_007muw" signalRef="Signal_1"/>
<bpmn2:outgoing>sequenceFlow_1K0l0g</bpmn2:outgoing>
<bpmn2:incoming>sequenceFlow_LhcuMQ</bpmn2:incoming>
</bpmn2:intermediateCatchEvent>
<bpmn2:dataObject id="dataObject_00mX6w" name="Form">
<bpmn2:documentation id="documentation_lUG0qw"><![CDATA[<imixs-form>
<imixs-form-section columns="2">
<item name="dbtr.number" type="custom" path="alexander/businesspartner_search" readonly="true" label="Debtor:" />
</imixs-form-section>
<imixs-form-section columns="4" label="Invoices">
<item name="analytic.invoices.count.all" type="custom" path="alexander/analyze_plain" label="All:" />
<item name="analytic.invoices.count.open" type="custom" path="alexander/analyze_plain" label="Unpaid:" />
<item name="analytic.invoices.count.due" type="custom" path="alexander/analyze_plain" label="Due:" />
<item name="analytic.invoices.count.dunning" type="custom" path="alexander/analyze_plain" label="Dunning:" />
<item name="analytic.payment.avg.due" type="custom" path="alexander/analyze_plain" label="Average term of credit:" />
<item name="analytic.payment.avg.days" type="custom" path="alexander/analyze_plain" label="Average payment duration:" />
</imixs-form-section>
<imixs-form-section columns="1" label="Trend Payment ">
<item name="analytic.invoices.trend" type="custom" path="alexander/analyze_chart" label="Payments in the last 6 months:" />
</imixs-form-section>
</imixs-form>]]></bpmn2:documentation>
<bpmn2:dataState id="dataState_n87Eag"/>
</bpmn2:dataObject>
<bpmn2:association id="association_hwRAUQ" sourceRef="dataObject_00mX6w" targetRef="Task_2">
<bpmn2:documentation id="documentation_rNw1ng"/>
</bpmn2:association>
<bpmn2:sequenceFlow id="sequenceFlow_1K0l0g" sourceRef="event_HrHS9A" targetRef="Task_2">
<bpmn2:documentation id="documentation_CVv7XQ"/>
</bpmn2:sequenceFlow>
<bpmn2:sequenceFlow id="sequenceFlow_LhcuMQ" sourceRef="Task_1" targetRef="event_HrHS9A">
<bpmn2:documentation id="documentation_Ll2kVg"/>
</bpmn2:sequenceFlow>
</bpmn2:process>
<bpmndi:BPMNDiagram id="BPMNDiagram_1" name="Default Process Diagram">
<bpmndi:BPMNPlane bpmnElement="Collaboration_1" id="BPMNPlane_1">
<bpmndi:BPMNShape bpmnElement="Participant_1" id="BPMNShape_Participant_1" isHorizontal="true">
<dc:Bounds height="330.0" width="960.0" x="100.0" y="150.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="Lane_1" id="BPMNShape_Lane_1" isHorizontal="true">
<dc:Bounds height="330.0" width="930.0" x="130.0" y="150.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="StartEvent_1" id="BPMNShape_1">
<dc:Bounds height="36.0" width="36.0" x="197.0" y="297.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_1" labelStyle="BPMNLabelStyle_1">
<dc:Bounds height="20.0" width="100.0" x="169.5" y="337.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="Task_1" id="BPMNShape_Task_1">
<dc:Bounds height="50.0" width="110.0" x="290.0" y="290.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="EndEvent_3" id="BPMNShape_EndEvent_2">
<dc:Bounds height="36.0" width="36.0" x="757.0" y="297.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_85" labelStyle="BPMNLabelStyle_1">
<dc:Bounds height="20.0" width="100.0" x="728.0" y="337.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="Task_2" id="BPMNShape_Task_2">
<dc:Bounds height="50.0" width="110.0" x="570.0" y="290.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="DataObject_1" id="BPMNShape_DataObject_1">
<dc:Bounds height="50.0" width="35.0" x="290.0" y="190.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_13">
<dc:Bounds height="20.0" width="100.0" x="258.0" y="240.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="Message_2" id="BPMNShape_Message_1">
<dc:Bounds height="20.0" width="30.0" x="119.0" y="59.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_35">
<dc:Bounds height="20.0" width="100.0" x="84.0" y="79.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="Message_7" id="BPMNShape_Message_4">
<dc:Bounds height="20.0" width="30.0" x="213.0" y="59.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_40">
<dc:Bounds height="20.0" width="100.0" x="178.0" y="79.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="IntermediateCatchEvent_8" id="BPMNShape_IntermediateCatchEvent_8">
<dc:Bounds height="36.0" width="36.0" x="467.0" y="297.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_24">
<dc:Bounds height="20.0" width="100.0" x="434.5" y="337.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge bpmnElement="SequenceFlow_10" id="BPMNEdge_SequenceFlow_10" sourceElement="BPMNShape_Task_2" targetElement="BPMNShape_EndEvent_2">
<bpmndi:BPMNLabel id="BPMNLabel_26"/>
<di:waypoint x="680.0" y="315.0"/>
<di:waypoint x="757.0" y="315.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="SequenceFlow_4" id="BPMNEdge_SequenceFlow_4" sourceElement="BPMNShape_1" targetElement="BPMNShape_Task_1">
<bpmndi:BPMNLabel id="BPMNLabel_11"/>
<di:waypoint x="233.0" y="315.0"/>
<di:waypoint x="290.0" y="315.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="Association_2" id="BPMNEdge_Association_2" sourceElement="BPMNShape_DataObject_1" targetElement="BPMNShape_Task_1">
<bpmndi:BPMNLabel id="BPMNLabel_17"/>
<di:waypoint x="325.0" y="213.0"/>
<di:waypoint x="345.0" y="213.0"/>
<di:waypoint x="345.0" y="290.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_17AQjg" id="BPMNEdge_oSvh0w" sourceElement="BPMNShape_Task_1" targetElement="BPMNShape_IntermediateCatchEvent_8">
<di:waypoint x="400.0" y="315.0"/>
<di:waypoint x="467.0" y="315.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_OL83kQ" id="BPMNEdge_lwO0vA" sourceElement="BPMNShape_IntermediateCatchEvent_8" targetElement="BPMNShape_Task_2">
<di:waypoint x="503.0" y="315.0"/>
<di:waypoint x="570.0" y="315.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNShape bpmnElement="event_HrHS9A" id="BPMNShape_hrK7fA">
<dc:Bounds height="36.0" width="36.0" x="467.0" y="377.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_CJ3Faw">
<dc:Bounds height="20.0" width="100.0" x="435.0" y="416.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="dataObject_00mX6w" id="BPMNShape_UEsYmw">
<dc:Bounds height="50.0" width="35.0" x="560.0" y="190.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_ekwD3A">
<dc:Bounds height="20.0" width="100.0" x="526.0" y="239.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge bpmnElement="association_hwRAUQ" id="BPMNEdge_9JCm5A" sourceElement="BPMNShape_UEsYmw" targetElement="BPMNShape_Task_2">
<di:waypoint x="578.0" y="240.0"/>
<di:waypoint x="578.0" y="265.0"/>
<di:waypoint x="625.0" y="265.0"/>
<di:waypoint x="625.0" y="290.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_1K0l0g" id="BPMNEdge_1KePCQ" sourceElement="BPMNShape_hrK7fA" targetElement="BPMNShape_Task_2">
<di:waypoint x="503.0" y="395.0"/>
<di:waypoint x="630.0" y="395.0"/>
<di:waypoint x="630.0" y="340.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_LhcuMQ" id="BPMNEdge_p8xjxQ" sourceElement="BPMNShape_Task_1" targetElement="BPMNShape_hrK7fA">
<di:waypoint x="349.0" y="340.0"/>
<di:waypoint x="349.0" y="395.0"/>
<di:waypoint x="467.0" y="395.0"/>
</bpmndi:BPMNEdge>
</bpmndi:BPMNPlane>
<bpmndi:BPMNLabelStyle id="BPMNLabelStyle_1">
<dc:Font name="arial" size="9.0"/>
</bpmndi:BPMNLabelStyle>
</bpmndi:BPMNDiagram>
</bpmn2:definitions>

View file

@ -0,0 +1,481 @@
<?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" name="Definitions 1" targetNamespace="http://www.imixs.org/bpmn2">
<bpmn2:extensionElements>
<imixs:item name="txtworkflowmodelversion" type="xs:string">
<imixs:value><![CDATA[analyse-debitor-en-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:value><![CDATA[Debitor-Mail|dbtr.mail]]></imixs:value>
</imixs:item>
<imixs:item name="txttimefieldmapping" type="xs:string">
<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>
<open-bpmn:auto-align>true</open-bpmn:auto-align>
</bpmn2:extensionElements>
<bpmn2:signal id="Signal_1" name="com.alexanderlogistics.AGLAnalyticExcelAdapterDebitor"/>
<bpmn2:message id="Message_2" name="Html-Header">
<bpmn2:documentation id="Documentation_22"><![CDATA[<html>
<head>
<style type="text/css">
html, body, div, p, pre, 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_7" name="Html-Footer">
<bpmn2:documentation id="Documentation_15"><![CDATA[</body>
</html>]]></bpmn2:documentation>
</bpmn2:message>
<bpmn2:collaboration id="Collaboration_1" name="Mahnlauf">
<bpmn2:participant id="Participant_1" name="Debitor - Analysis" processRef="Process_1">
<bpmn2:documentation id="documentation_sqQYFQ"/>
</bpmn2:participant>
<bpmn2:participant id="Participant_2" name="SEPA-Export Pool" processRef="eingangsrechnung-de"/>
</bpmn2:collaboration>
<bpmn2:process id="eingangsrechnung-de" isExecutable="false" name="Default Process" processType="Public">
<bpmn2:documentation id="documentation_sxNNHw"/>
</bpmn2:process>
<bpmn2:process definitionalCollaborationRef="Collaboration_1" id="Process_1" isExecutable="false" name="Debitor - Analysis" processType="Private">
<bpmn2:laneSet id="LaneSet_1" name="Lane Set 1">
<bpmn2:lane id="Lane_1" name="Team">
<bpmn2:flowNodeRef>StartEvent_1</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>Task_1</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>EndEvent_3</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>Task_2</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>IntermediateCatchEvent_8</bpmn2:flowNodeRef>
<bpmn2:documentation id="documentation_WBGJTA"/>
<bpmn2:flowNodeRef>DataObject_1</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>event_HrHS9A</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>dataObject_00mX6w</bpmn2:flowNodeRef>
</bpmn2:lane>
</bpmn2:laneSet>
<bpmn2:startEvent id="StartEvent_1" name="Start">
<bpmn2:outgoing>SequenceFlow_4</bpmn2:outgoing>
<bpmn2:documentation id="documentation_5CHRCQ"/>
</bpmn2:startEvent>
<bpmn2:task id="Task_2" imixs:processid="1900" name="Archived">
<bpmn2:extensionElements>
<imixs:item name="txtworkflowsummary" type="xs:string">
<imixs:value><![CDATA[<textblock><itemvalue>$workflowgroup</itemvalue> - <itemvalue format="EEE. dd. MMM. yyyy">$lasteventdate</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-chart-pie||||typcn-tick,imixs-success]]></imixs:value>
</imixs:item>
<imixs:item name="txttype" type="xs:string">
<imixs:value><![CDATA[workitemarchive]]></imixs:value>
</imixs:item>
<imixs:item name="namaddreadaccess" type="xs:string">
<imixs:value><![CDATA[{process:?:member}]]></imixs:value>
</imixs:item>
<imixs:item name="txteditorid" type="xs:string">
<imixs:value><![CDATA[form_basic_read]]></imixs:value>
</imixs:item>
</bpmn2:extensionElements>
<bpmn2:documentation id="Documentation_4"><![CDATA[<textblock><itemvalue>$workflowgroup</itemvalue> - <itemvalue>$workflowstatus</itemvalue></textblock>]]></bpmn2:documentation>
<bpmn2:outgoing>SequenceFlow_10</bpmn2:outgoing>
<bpmn2:incoming>sequenceFlow_OL83kQ</bpmn2:incoming>
<bpmn2:incoming>sequenceFlow_1K0l0g</bpmn2:incoming>
</bpmn2:task>
<bpmn2:sequenceFlow id="SequenceFlow_10" sourceRef="Task_2" targetRef="EndEvent_3">
<bpmn2:documentation id="documentation_WzPj2A"/>
</bpmn2:sequenceFlow>
<bpmn2:endEvent id="EndEvent_3" name="End">
<bpmn2:incoming>SequenceFlow_10</bpmn2:incoming>
<bpmn2:documentation id="documentation_sMnhoQ"/>
</bpmn2:endEvent>
<bpmn2:task id="Task_1" imixs:processid="1000" name="Creation">
<bpmn2:extensionElements>
<imixs:item name="txtworkflowsummary" type="xs:string">
<imixs:value><![CDATA[<itemvalue format="dd.MM.yyyy">$lasteventdate</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-chart-pie||]]></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="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_4</bpmn2:incoming>
<bpmn2:outgoing>sequenceFlow_17AQjg</bpmn2:outgoing>
<bpmn2:outgoing>sequenceFlow_LhcuMQ</bpmn2:outgoing>
</bpmn2:task>
<bpmn2:sequenceFlow id="SequenceFlow_4" sourceRef="StartEvent_1" targetRef="Task_1">
<bpmn2:documentation id="documentation_p6trwA"/>
</bpmn2:sequenceFlow>
<bpmn2:dataObject id="DataObject_1" name="Form">
<bpmn2:documentation id="Documentation_17"><![CDATA[<imixs-form>
<imixs-form-section columns="2">
<item name="dbtr.number" type="custom" path="alexander/businesspartner_search" required="true" label="Debitor:" />
</imixs-form-section>
<imixs-form-section columns="4" label="Invoices">
<item name="analytic.invoices.count.all" type="custom" path="alexander/analyze_plain" label="All Invoices:" />
<item name="analytic.invoices.count.open" type="custom" path="alexander/analyze_plain" label="Open Invoices open:" />
<item name="analytic.invoices.count.due" type="custom" path="alexander/analyze_plain" label="Invoices in due:" />
<item name="analytic.invoices.count.dunning" type="custom" path="alexander/analyze_plain" label="Invoices in dunning:" />
<item name="analytic.payment.avg.due" type="custom" path="alexander/analyze_plain" label="Average term of credit:" />
<item name="analytic.payment.avg.days" type="custom" path="alexander/analyze_plain" label="Average payment duration:" />
</imixs-form-section>
<imixs-form-section columns="1" label="Trend Payment Practices">
<item name="analytic.invoices.trend" type="custom" path="alexander/analyze_chart" label="Payments within the last 6 months:" />
</imixs-form-section>
</imixs-form>]]></bpmn2:documentation>
<bpmn2:dataState id="DataState_1"/>
</bpmn2:dataObject>
<bpmn2:intermediateCatchEvent id="IntermediateCatchEvent_8" imixs:activityid="40" name="Archive">
<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/>
</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/>
</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/>
</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[Analysis data archived]]></imixs:value>
</imixs:item>
<imixs:item name="keyupdateacl" type="xs:boolean">
<imixs:value>false</imixs:value>
</imixs:item>
</bpmn2:extensionElements>
<bpmn2:documentation id="Documentation_2"><![CDATA[Archive analysis data]]></bpmn2:documentation>
<bpmn2:incoming>sequenceFlow_17AQjg</bpmn2:incoming>
<bpmn2:outgoing>sequenceFlow_OL83kQ</bpmn2:outgoing>
</bpmn2:intermediateCatchEvent>
<bpmn2:association id="Association_2" sourceRef="DataObject_1" targetRef="Task_1">
<bpmn2:documentation id="documentation_pDK6DQ"/>
</bpmn2:association>
<bpmn2:sequenceFlow id="sequenceFlow_17AQjg" sourceRef="Task_1" targetRef="IntermediateCatchEvent_8">
<bpmn2:documentation id="documentation_c8gvZg"/>
</bpmn2:sequenceFlow>
<bpmn2:sequenceFlow id="sequenceFlow_OL83kQ" sourceRef="IntermediateCatchEvent_8" targetRef="Task_2">
<bpmn2:documentation id="documentation_j2zUkw"/>
</bpmn2:sequenceFlow>
<bpmn2:intermediateCatchEvent id="event_HrHS9A" imixs:activityid="20" name="Excel 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="txtmailsubject" type="xs:string">
<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/>
</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/>
</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[Analysedaten Debitor archiviert]]></imixs:value>
</imixs:item>
<imixs:item name="keyupdateacl" type="xs:boolean">
<imixs:value>false</imixs:value>
</imixs:item>
<imixs:item name="txtactivityresult" type="xs:string">
<imixs:value><![CDATA[<soa name="excel-export">
<textblock>SOA Template</textblock>
<template>soa_template.xlsx</template>
<target-name>soa_<itemvalue>dbtr.number</itemvalue>_<itemvalue format="yyyy-MM-dd">$lasteventdate</itemvalue>.xlsx</target-name>
</soa>
<poi-update name="findreplace">
<find>F6</find>
<replace><itemvalue format="dd.MM.yyyy">$lasteventdate</itemvalue></replace>
<type>date</type>
</poi-update>
<poi-update name="findreplace">
<find>A7</find>
<replace><itemvalue>dbtr.name</itemvalue></replace>
</poi-update>
]]></imixs:value>
</imixs:item>
</bpmn2:extensionElements>
<bpmn2:documentation id="documentation_pCTOtQ"><![CDATA[Excel Datei erzeugen]]></bpmn2:documentation>
<bpmn2:signalEventDefinition id="signalEventDefinition_007muw" signalRef="Signal_1"/>
<bpmn2:outgoing>sequenceFlow_1K0l0g</bpmn2:outgoing>
<bpmn2:incoming>sequenceFlow_LhcuMQ</bpmn2:incoming>
</bpmn2:intermediateCatchEvent>
<bpmn2:dataObject id="dataObject_00mX6w" name="Form">
<bpmn2:documentation id="documentation_lUG0qw"><![CDATA[<imixs-form>
<imixs-form-section columns="2">
<item name="dbtr.number" type="custom" path="alexander/businesspartner_search" readonly="true" label="Debitor:" />
</imixs-form-section>
<imixs-form-section columns="4" label="Invoices">
<item name="analytic.invoices.count.all" type="custom" path="alexander/analyze_plain" label="All Invoices:" />
<item name="analytic.invoices.count.open" type="custom" path="alexander/analyze_plain" label="Open Invoices open:" />
<item name="analytic.invoices.count.due" type="custom" path="alexander/analyze_plain" label="Invoices in due:" />
<item name="analytic.invoices.count.dunning" type="custom" path="alexander/analyze_plain" label="Invoices in dunning:" />
<item name="analytic.payment.avg.due" type="custom" path="alexander/analyze_plain" label="Average term of credit:" />
<item name="analytic.payment.avg.days" type="custom" path="alexander/analyze_plain" label="Average payment duration:" />
</imixs-form-section>
<imixs-form-section columns="1" label="Trend Payment Practices">
<item name="analytic.invoices.trend" type="custom" path="alexander/analyze_chart" label="Payments within the last 6 months:" />
</imixs-form-section>
</imixs-form>]]></bpmn2:documentation>
<bpmn2:dataState id="dataState_n87Eag"/>
</bpmn2:dataObject>
<bpmn2:association id="association_hwRAUQ" sourceRef="dataObject_00mX6w" targetRef="Task_2">
<bpmn2:documentation id="documentation_rNw1ng"/>
</bpmn2:association>
<bpmn2:sequenceFlow id="sequenceFlow_1K0l0g" sourceRef="event_HrHS9A" targetRef="Task_2">
<bpmn2:documentation id="documentation_CVv7XQ"/>
</bpmn2:sequenceFlow>
<bpmn2:sequenceFlow id="sequenceFlow_LhcuMQ" sourceRef="Task_1" targetRef="event_HrHS9A">
<bpmn2:documentation id="documentation_Ll2kVg"/>
</bpmn2:sequenceFlow>
</bpmn2:process>
<bpmndi:BPMNDiagram id="BPMNDiagram_1" name="Default Process Diagram">
<bpmndi:BPMNPlane bpmnElement="Collaboration_1" id="BPMNPlane_1">
<bpmndi:BPMNShape bpmnElement="Participant_1" id="BPMNShape_Participant_1" isHorizontal="true">
<dc:Bounds height="330.0" width="960.0" x="100.0" y="150.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="Lane_1" id="BPMNShape_Lane_1" isHorizontal="true">
<dc:Bounds height="330.0" width="930.0" x="130.0" y="150.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="StartEvent_1" id="BPMNShape_1">
<dc:Bounds height="36.0" width="36.0" x="197.0" y="297.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_1" labelStyle="BPMNLabelStyle_1">
<dc:Bounds height="20.0" width="100.0" x="169.5" y="337.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="Task_1" id="BPMNShape_Task_1">
<dc:Bounds height="50.0" width="110.0" x="290.0" y="290.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="EndEvent_3" id="BPMNShape_EndEvent_2">
<dc:Bounds height="36.0" width="36.0" x="757.0" y="297.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_85" labelStyle="BPMNLabelStyle_1">
<dc:Bounds height="20.0" width="100.0" x="728.0" y="337.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="Task_2" id="BPMNShape_Task_2">
<dc:Bounds height="50.0" width="110.0" x="570.0" y="290.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="DataObject_1" id="BPMNShape_DataObject_1">
<dc:Bounds height="50.0" width="35.0" x="290.0" y="190.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_13">
<dc:Bounds height="20.0" width="100.0" x="258.0" y="240.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="Message_2" id="BPMNShape_Message_1">
<dc:Bounds height="20.0" width="30.0" x="119.0" y="59.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_35">
<dc:Bounds height="20.0" width="100.0" x="84.0" y="79.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="Message_7" id="BPMNShape_Message_4">
<dc:Bounds height="20.0" width="30.0" x="213.0" y="59.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_40">
<dc:Bounds height="20.0" width="100.0" x="178.0" y="79.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="IntermediateCatchEvent_8" id="BPMNShape_IntermediateCatchEvent_8">
<dc:Bounds height="36.0" width="36.0" x="467.0" y="297.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_24">
<dc:Bounds height="20.0" width="100.0" x="434.5" y="337.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge bpmnElement="SequenceFlow_10" id="BPMNEdge_SequenceFlow_10" sourceElement="BPMNShape_Task_2" targetElement="BPMNShape_EndEvent_2">
<bpmndi:BPMNLabel id="BPMNLabel_26"/>
<di:waypoint x="680.0" y="315.0"/>
<di:waypoint x="757.0" y="315.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="SequenceFlow_4" id="BPMNEdge_SequenceFlow_4" sourceElement="BPMNShape_1" targetElement="BPMNShape_Task_1">
<bpmndi:BPMNLabel id="BPMNLabel_11"/>
<di:waypoint x="233.0" y="315.0"/>
<di:waypoint x="290.0" y="315.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="Association_2" id="BPMNEdge_Association_2" sourceElement="BPMNShape_DataObject_1" targetElement="BPMNShape_Task_1">
<bpmndi:BPMNLabel id="BPMNLabel_17"/>
<di:waypoint x="325.0" y="213.0"/>
<di:waypoint x="345.0" y="213.0"/>
<di:waypoint x="345.0" y="290.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_17AQjg" id="BPMNEdge_oSvh0w" sourceElement="BPMNShape_Task_1" targetElement="BPMNShape_IntermediateCatchEvent_8">
<di:waypoint x="400.0" y="315.0"/>
<di:waypoint x="467.0" y="315.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_OL83kQ" id="BPMNEdge_lwO0vA" sourceElement="BPMNShape_IntermediateCatchEvent_8" targetElement="BPMNShape_Task_2">
<di:waypoint x="503.0" y="315.0"/>
<di:waypoint x="570.0" y="315.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNShape bpmnElement="event_HrHS9A" id="BPMNShape_hrK7fA">
<dc:Bounds height="36.0" width="36.0" x="467.0" y="377.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_CJ3Faw">
<dc:Bounds height="20.0" width="100.0" x="435.0" y="416.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="dataObject_00mX6w" id="BPMNShape_UEsYmw">
<dc:Bounds height="50.0" width="35.0" x="560.0" y="190.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_ekwD3A">
<dc:Bounds height="20.0" width="100.0" x="528.0" y="229.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge bpmnElement="association_hwRAUQ" id="BPMNEdge_9JCm5A" sourceElement="BPMNShape_UEsYmw" targetElement="BPMNShape_Task_2">
<di:waypoint x="577.0" y="240.0"/>
<di:waypoint x="577.0" y="265.0"/>
<di:waypoint x="625.0" y="265.0"/>
<di:waypoint x="625.0" y="290.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_1K0l0g" id="BPMNEdge_1KePCQ" sourceElement="BPMNShape_hrK7fA" targetElement="BPMNShape_Task_2">
<di:waypoint x="503.0" y="395.0"/>
<di:waypoint x="630.0" y="395.0"/>
<di:waypoint x="630.0" y="340.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_LhcuMQ" id="BPMNEdge_p8xjxQ" sourceElement="BPMNShape_Task_1" targetElement="BPMNShape_hrK7fA">
<di:waypoint x="349.0" y="340.0"/>
<di:waypoint x="349.0" y="395.0"/>
<di:waypoint x="467.0" y="395.0"/>
</bpmndi:BPMNEdge>
</bpmndi:BPMNPlane>
<bpmndi:BPMNLabelStyle id="BPMNLabelStyle_1">
<dc:Font name="arial" size="9.0"/>
</bpmndi:BPMNLabelStyle>
</bpmndi:BPMNDiagram>
</bpmn2:definitions>

View file

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <?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" name="Definitions 1" targetNamespace="http://www.imixs.org/bpmn2"> <!-- origin at X=0.0 Y=0.0 --><bpmn2:definitions xmlns:bpmn2="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:BPMN2="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:imixs="http://www.imixs.org/bpmn2" xmlns:open-bpmn="http://open-bpmn.org/XMLSchema" xmlns: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" name="Definitions 1" targetNamespace="http://www.imixs.org/bpmn2">
<bpmn2:extensionElements> <bpmn2:extensionElements>
<imixs:item name="txtworkflowmodelversion" type="xs:string"> <imixs:item name="txtworkflowmodelversion" type="xs:string">
<imixs:value><![CDATA[zahlungseingang-dwc-1.0]]></imixs:value> <imixs:value><![CDATA[zahlungseingang-dwc-1.0]]></imixs:value>
@ -54,6 +54,107 @@
</bpmn2:collaboration> </bpmn2:collaboration>
<bpmn2:process id="eingangsrechnung-de" isExecutable="false" name="Payment Receipt" processType="Public"> <bpmn2:process id="eingangsrechnung-de" isExecutable="false" name="Payment Receipt" processType="Public">
<bpmn2:documentation id="documentation_jDBJJg"/> <bpmn2:documentation id="documentation_jDBJJg"/>
<bpmn2:startEvent id="event_LmQVtw" name="Event-10">
<bpmn2:documentation id="documentation_9vma0g"/>
<bpmn2:outgoing>sequenceFlow_CYsovQ</bpmn2:outgoing>
</bpmn2:startEvent>
<bpmn2:serviceTask id="task_gBLi9g" imixs:processid="100" name="Task-5">
<bpmn2:documentation id="documentation_R1ctSQ"/>
<bpmn2:incoming>sequenceFlow_CYsovQ</bpmn2:incoming>
<bpmn2:outgoing>sequenceFlow_ceiZVA</bpmn2:outgoing>
</bpmn2:serviceTask>
<bpmn2:endEvent id="event_d0LERw" name="Event-11">
<bpmn2:documentation id="documentation_8D8N5g"/>
<bpmn2:incoming>sequenceFlow_92Rz3A</bpmn2:incoming>
</bpmn2:endEvent>
<bpmn2:sequenceFlow id="sequenceFlow_CYsovQ" sourceRef="event_LmQVtw" targetRef="task_gBLi9g">
<bpmn2:documentation id="documentation_3VUtQQ"/>
</bpmn2:sequenceFlow>
<bpmn2:sequenceFlow id="sequenceFlow_ceiZVA" sourceRef="task_gBLi9g" targetRef="event_eD33Og">
<bpmn2:documentation id="documentation_oVUTZA"/>
</bpmn2:sequenceFlow>
<bpmn2:serviceTask id="task_ftEmsg" imixs:processid="100" name="Task-6">
<bpmn2:documentation id="documentation_5tYCGQ"/>
<bpmn2:outgoing>sequenceFlow_92Rz3A</bpmn2:outgoing>
<bpmn2:incoming>sequenceFlow_G011rg</bpmn2:incoming>
</bpmn2:serviceTask>
<bpmn2:intermediateCatchEvent id="event_eD33Og" imixs:activityid="20" name="Accounting">
<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/>
</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/>
</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/>
</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[Invoiced were reconciled and receipt of payment is booked and completed.]]></imixs:value>
</imixs:item>
<imixs:item name="keyupdateacl" type="xs:boolean">
<imixs:value>false</imixs:value>
</imixs:item>
</bpmn2:extensionElements>
<bpmn2:documentation id="documentation_XP07ew"><![CDATA[Forward the payment capture to accounting]]></bpmn2:documentation>
<bpmn2:dataOutput id="dataOutput_nhT7zw" name="Signal_1_Output"/>
<bpmn2:dataOutputAssociation id="dataOutputAssociation_bXi80A">
<bpmn2:sourceRef>DataOutput_1</bpmn2:sourceRef>
</bpmn2:dataOutputAssociation>
<bpmn2:outputSet id="outputSet_qi2HmQ" name="Output Set 2">
<bpmn2:dataOutputRefs>DataOutput_1</bpmn2:dataOutputRefs>
</bpmn2:outputSet>
<bpmn2:signalEventDefinition id="signalEventDefinition_i1zJYA" signalRef="Signal_1"/>
<bpmn2:incoming>sequenceFlow_ceiZVA</bpmn2:incoming>
<bpmn2:outgoing>sequenceFlow_G011rg</bpmn2:outgoing>
</bpmn2:intermediateCatchEvent>
<bpmn2:sequenceFlow id="sequenceFlow_92Rz3A" sourceRef="task_ftEmsg" targetRef="event_d0LERw">
<bpmn2:documentation id="documentation_sqekDQ"/>
</bpmn2:sequenceFlow>
<bpmn2:sequenceFlow id="sequenceFlow_G011rg" sourceRef="event_eD33Og" targetRef="task_ftEmsg">
<bpmn2:documentation id="documentation_piM82g"/>
</bpmn2:sequenceFlow>
</bpmn2:process> </bpmn2:process>
<bpmn2:process definitionalCollaborationRef="Collaboration_1" id="Process_1" isExecutable="false" name="Payment Receipt" processType="Private"> <bpmn2:process definitionalCollaborationRef="Collaboration_1" id="Process_1" isExecutable="false" name="Payment Receipt" processType="Private">
<bpmn2:laneSet id="LaneSet_1" name="Lane Set 1"> <bpmn2:laneSet id="LaneSet_1" name="Lane Set 1">
@ -424,7 +525,7 @@ result.isValid=true;
<bpmn2:documentation id="Documentation_17"><![CDATA[<?xml version="1.0"?> <bpmn2:documentation id="Documentation_17"><![CDATA[<?xml version="1.0"?>
<imixs-form> <imixs-form>
<imixs-form-section columns="2" > <imixs-form-section columns="2" >
<item name="dbtr.number" type="text" required="true" label="Debtor:" /> <item name="partner.id" type="custom" path="alexander/businesspartner_search" requred="true" label="Debitor:"/>
<item name="payment.date" type="date" required="true" label="Payment Date:" /> <item name="payment.date" type="date" required="true" label="Payment Date:" />
</imixs-form-section> </imixs-form-section>
<imixs-form-section> <imixs-form-section>
@ -810,6 +911,7 @@ th { font-weight: bold;}
<bpmn2:documentation id="documentation_Ikyn9A"><![CDATA[</body> <bpmn2:documentation id="documentation_Ikyn9A"><![CDATA[</body>
</html>]]></bpmn2:documentation> </html>]]></bpmn2:documentation>
</bpmn2:message> </bpmn2:message>
<bpmn2:signal id="signal_3" name="Signal 3"/>
<bpmndi:BPMNDiagram id="BPMNDiagram_1" name="Default Process Diagram"> <bpmndi:BPMNDiagram id="BPMNDiagram_1" name="Default Process Diagram">
<bpmndi:BPMNPlane bpmnElement="Collaboration_1" id="BPMNPlane_1"> <bpmndi:BPMNPlane bpmnElement="Collaboration_1" id="BPMNPlane_1">
<bpmndi:BPMNShape bpmnElement="Participant_1" id="BPMNShape_Participant_1" isHorizontal="true"> <bpmndi:BPMNShape bpmnElement="Participant_1" id="BPMNShape_Participant_1" isHorizontal="true">
@ -1021,6 +1123,46 @@ th { font-weight: bold;}
<dc:Bounds height="20.0" width="100.0" x="495.0" y="105.0"/> <dc:Bounds height="20.0" width="100.0" x="495.0" y="105.0"/>
</bpmndi:BPMNLabel> </bpmndi:BPMNLabel>
</bpmndi:BPMNShape> </bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="event_LmQVtw" id="BPMNShape_yPIbDA">
<dc:Bounds height="36.0" width="36.0" x="397.0" y="-113.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_ZG3NoQ">
<dc:Bounds height="20.0" width="100.0" x="359.0" y="-77.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="task_gBLi9g" id="BPMNShape_NRK0yg">
<dc:Bounds height="50.0" width="110.0" x="500.0" y="-120.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="event_d0LERw" id="BPMNShape_m2nFdA">
<dc:Bounds height="36.0" width="36.0" x="937.0" y="-113.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_7xbjwQ">
<dc:Bounds height="20.0" width="100.0" x="905.0" y="-74.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_CYsovQ" id="BPMNEdge_4ObFBw" sourceElement="BPMNShape_yPIbDA" targetElement="BPMNShape_NRK0yg">
<di:waypoint x="433.0" y="-95.0"/>
<di:waypoint x="500.0" y="-95.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_ceiZVA" id="BPMNEdge_iB3xOA" sourceElement="BPMNShape_NRK0yg" targetElement="BPMNShape_t9Br7g">
<di:waypoint x="610.0" y="-95.0"/>
<di:waypoint x="667.0" y="-95.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNShape bpmnElement="task_ftEmsg" id="BPMNShape_yuVyVQ">
<dc:Bounds height="50.0" width="110.0" x="760.0" y="-120.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="event_eD33Og" id="BPMNShape_t9Br7g">
<dc:Bounds height="36.0" width="36.0" x="667.0" y="-113.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_o9l7fw">
<dc:Bounds height="20.0" width="100.0" x="635.0" y="-74.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_92Rz3A" id="BPMNEdge_7OEmsw" sourceElement="BPMNShape_yuVyVQ" targetElement="BPMNShape_m2nFdA">
<di:waypoint x="870.0" y="-95.0"/>
<di:waypoint x="937.0" y="-95.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_G011rg" id="BPMNEdge_iwbPWQ" sourceElement="BPMNShape_t9Br7g" targetElement="BPMNShape_yuVyVQ">
<di:waypoint x="703.0" y="-95.0"/>
<di:waypoint x="760.0" y="-95.0"/>
</bpmndi:BPMNEdge>
</bpmndi:BPMNPlane> </bpmndi:BPMNPlane>
<bpmndi:BPMNLabelStyle id="BPMNLabelStyle_1"> <bpmndi:BPMNLabelStyle id="BPMNLabelStyle_1">
<dc:Font name="arial" size="9.0"/> <dc:Font name="arial" size="9.0"/>