debitoren Analyse

This commit is contained in:
Ralph Soika 2024-10-09 00:12:09 +02:00
parent ac2bc4bfe8
commit a5a17927ee
8 changed files with 799 additions and 5 deletions

View file

@ -78,7 +78,7 @@ services:
environment: environment:
EXIM_SMARTHOST: "www149.your-server.de:25" EXIM_SMARTHOST: "www149.your-server.de:25"
EXIM_PASSWORD: "www149.your-server.de:webmaster@imixs.com:$MAILPASSWORD" EXIM_PASSWORD: "www149.your-server.de:webmaster@imixs.com:$MAILPASSWORD"
EXIM_ALLOWED_SENDERS: "10.0.0.0/8:172.16.0.0/12:192.168.0.0/16" EXIM_ALLOWED_SENDERS: "10.0.0.0/8:172.18.0.0/12:192.168.0.0/16"

View file

@ -0,0 +1,154 @@
package com.alexanderlogistics;
import java.io.Serializable;
import java.util.List;
import java.util.logging.Logger;
import org.imixs.marty.team.TeamService;
import org.imixs.workflow.ItemCollection;
import org.imixs.workflow.engine.DocumentService;
import org.imixs.workflow.exceptions.QueryException;
import org.imixs.workflow.faces.data.WorkflowController;
import org.imixs.workflow.office.forms.AnalyticController;
import org.imixs.workflow.office.forms.AnalyticEvent;
import jakarta.enterprise.context.RequestScoped;
import jakarta.enterprise.event.Observes;
import jakarta.inject.Inject;
import jakarta.inject.Named;
/**
* Der AGLAnalyticControllerDebitor berechnet verschiedene Analyse Daten von
* Ausgangsrechnungen
*
* @author rsoika
*
*/
@Named
@RequestScoped
public class AGLAnalyticControllerDebitor implements Serializable {
private static final long serialVersionUID = 1L;
private static Logger logger = Logger.getLogger(AnalyticController.class.getName());
@Inject
protected DocumentService documentService;
@Inject
protected WorkflowController workflowController;
@Inject
TeamService teamService;
// @Inject
// protected DebitorStatistikController debitorStatistikController;
List<ItemCollection> steuerbescheide = null;
public void onEvent(@Observes AnalyticEvent event) {
logger.info("...debitor analysis....");
ItemCollection process = teamService.getProcessByName("Mahnwesen");
String link = "/pages/workitems/worklist.xhtml?processref=" + process.getUniqueID()
+ "&workflowgroup=Steuerbescheid";
if ("analytic.invoices.count.all".equals(event.getKey())) {
event.setValue("" + getRechnungen());
event.setLabel("");
event.setDescription("Total invoices");
event.getWorkitem().setItemValue("invoices.total", event.getValue());
event.setLink(link);
}
if ("analytic.invoices.count.open".equals(event.getKey())) {
event.setValue("" + getRechnungenOffen());
event.setLabel("");
event.setDescription("Total invoices not yet in due");
event.getWorkitem().setItemValue("invoices.total.open", event.getValue());
event.setLink(link);
}
if ("analytic.invoices.count.due".equals(event.getKey())) {
event.setValue("" + getRechnungenFaellig());
event.setLabel("");
event.setDescription("Total invoices in due");
event.getWorkitem().setItemValue("invoices.total.due", event.getValue());
event.setLink(link);
}
}
/**
* Berechnet die Anzahl aller Rechnungen
*
* @return
*/
public int getRechnungen() {
int result = 0;
if (getDbtNr().isEmpty()) {
return 0;
}
try {
result = documentService
.count("(type:workitem OR type:workitemarchive) AND dbtr.number:" + getDbtNr()
+ " AND $workflowgroup:\"Rechnungsausgang\"");
} catch (QueryException e) {
logger.severe("Failed to get statistic: " + e.getMessage());
}
return result;
}
/**
* Berechnet die Anzahl aller noch nicht fälligen rechnungen
*
* @return
*/
public int getRechnungenOffen() {
int result = 0;
if (getDbtNr().isEmpty()) {
return 0;
}
try {
result = documentService
.count("(type:workitem) AND dbtr.number:" + getDbtNr()
+ " AND $workflowgroup:\"Rechnungsausgang\" AND ($taskid:[5000 TO 5099])");
} catch (QueryException e) {
logger.severe("Failed to get statistic: " + e.getMessage());
}
return result;
}
/**
* Berechnet die Anzahl aller fälligen rechnungen
*
* @return
*/
public int getRechnungenFaellig() {
int result = 0;
if (getDbtNr().isEmpty()) {
return 0;
}
try {
result = documentService
.count("(type:workitem) AND dbtr.number:" + getDbtNr()
+ " AND $workflowgroup:\"Rechnungsausgang\" AND ($taskid:[5100 TO 5199])");
} catch (QueryException e) {
logger.severe("Failed to get statistic: " + e.getMessage());
}
return result;
}
/**
* Hilfsmethode die das fuehrende K/D aus der Debitorennummer entfernt
*
* @return
*/
private String getDbtNr() {
String dbtNr = workflowController.getWorkitem().getItemValueString("dbtr.number");
if (dbtNr.startsWith("D") || dbtNr.startsWith("K")) {
dbtNr = dbtNr.substring(1);
}
return dbtNr;
}
}

View file

@ -33,7 +33,7 @@ import jakarta.json.JsonObjectBuilder;
*/ */
@Named @Named
@RequestScoped @RequestScoped
public class AGLAnalyticController implements Serializable { public class AGLAnalyticControllerSteuer implements Serializable {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
private static Logger logger = Logger.getLogger(AnalyticController.class.getName()); private static Logger logger = Logger.getLogger(AnalyticController.class.getName());

View file

@ -38,6 +38,14 @@
} }
}; };
/*
* Hilfsmethode die nur fur Ajax Events in JSF render verwendet wird
*/
function ajaxUpdateInvoiceSelection(data) {
if (data.status === 'success') {
// no op
}
}
/*]]>*/ /*]]>*/
</script> </script>
</ui:define> </ui:define>
@ -115,7 +123,8 @@
pt:data-resultlist="autocomplete-resultlist-cargosoft" pt:data-resultlist="autocomplete-resultlist-cargosoft"
pt:autocomplete="off" /> pt:autocomplete="off" />
</dd> </dd>
<h:commandButton value="Statistik neu berechnen" action="#{debitorStatistikController.getBookmark()}" /> <h:commandButton value="Statistik neu berechnen"
action="#{debitorStatistikController.getBookmark()}" />
</dl> </dl>
</div> </div>

View file

@ -0,0 +1,67 @@
<ui:composition xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
xmlns:f="http://xmlns.jcp.org/jsf/core" xmlns:c="http://xmlns.jcp.org/jsp/jstl/core"
xmlns:h="http://xmlns.jcp.org/jsf/html">
<style>
.analytic-card {
display: flex;
flex-flow: column;
min-height: 200px;
padding: 20px;
background-color: #f3f3f3;
border-radius: 5px;
-webkit-box-shadow: 0 0 5px 0 rgba(43, 43, 43, .1), 0 11px 6px -7px rgba(43, 43, 43, .1);
box-shadow: 0 0 5px 0 rgba(43, 43, 43, .1), 0 11px 6px -7px rgba(43, 43, 43, .1);
border: none;
-webkit-transition: all .3s ease-in-out;
transition: all .3s ease-in-out;
font-size: 40px;
font-weight: bold;
color: #4398f3;
}
.analytic-card-header {}
.analytic-card-footer {
font-size: 12px;
font-weight: normal;
color: #333;
}
.analytic-card-content {
flex: 1;
font-size: 20px;
}
.analytic-card-link {
float: right;
font-size: 18px;
margin-left: 20px;
}
</style>
<div class="analytic-card">
<div class="analytic-card-header">
<h:outputText value="#{analyticController.getAsDouble(item.name)}">
<f:convertNumber minFractionDigits="2" locale="de" />
</h:outputText>
</div>
<div class="analytic-card-content">#{analyticController.getLabel(item.name)}</div>
<div class="analytic-card-footer">
<span>#{analyticController.getDescription(item.name)}</span>
<h:panelGroup styleClass="analytic-card-link" rendered="#{!empty analyticController.getLink(item.name)}">
<a href="#{analyticController.getLink(item.name)}"><span class="typcn typcn-zoom-outline" /></a>
</h:panelGroup>
</div>
</div>
</ui:composition>

View file

@ -43,8 +43,7 @@
</style> </style>
<div class="analytic-card"> <div class="analytic-card">
<div class="analytic-card-header"> <div class="analytic-card-header">
<h:outputText value="#{analyticController.getAsDouble(item.name)}"> <h:outputText value="#{analyticController.getAsString(item.name)}">
<f:convertNumber minFractionDigits="2" locale="de" />
</h:outputText> </h:outputText>
</div> </div>

View file

@ -0,0 +1,100 @@
<ui:composition xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
xmlns:f="http://xmlns.jcp.org/jsf/core" xmlns:c="http://xmlns.jcp.org/jsp/jstl/core"
xmlns:h="http://xmlns.jcp.org/jsf/html" xmlns:pt="http://xmlns.jcp.org/jsf/passthrough"
xmlns:marty="http://xmlns.jcp.org/jsf/composite/marty">
<!-- Custom From Part - Cargosoft Debitor Search
This part 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="cargosoftDbtrSearchPart" action="#{cargosoftController.searchDebitor()}"
render="autocomplete-resultlist-cargosoft_part" onevent="autocompleteShowResult" />
<h:commandScript name="updateDbtrNumberPart" execute="#{customFormComponents.clientId}"
render="#{customFormComponents.clientId}" onevent="ajaxUpdateDbtrSearchPart" />
<script type="text/javascript">
/*<![CDATA[*/
// init ml input fields...
$(document).ready(function () {
// add autocomplete feature to dbtr_number_part...
var creditorField = $("input[data-item='dbtr_number_part']");
$(creditorField).each(function () {
$(this).addClass("imixs-ml");
// set callback function...
autocompleteInitInput(this, cargosoftDbtrSearchPart, 'autocomplete-resultlist-cargosoft_part', selectDbtrCallback);
});
// add cargsoft label if available
var dbtrName = "#{workflowController.workitem.item['dbtr.name']}";
// remove old cdtr.name
$('#dbtr-name-id').remove();
// append span with dbtr.name....
creditorField.after("<span id='dbtr-name-id' class='small'>" + dbtrName + "</p>");
});
/*
* Hilfsmethode die nur fur Ajax Events in JSF render verwendet wird
*/
function ajaxUpdateDbtrSearchPart(data) {
if (data.status === 'success') {
// add autocomplete feature to dbtr_number_part...
var creditorField = $("input[data-item='dbtr_number_part']");
// 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>");
//$("[id$=autocomplete-resultlist-cargosoft_part]").hide();
}
}
// 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_part']");
inputElement.val(dbtrData.no);
// remove old dbtr.name
$('#dbtr-name-id').remove();
// append span with dbtr.name....
inputElement.after("<span id='dbtr-name-id_part' class='small'>" + dbtrData.name + "</p>");
var inputElementDbtrName = $("input[id$='dbtr_name_part']");
if (inputElementDbtrName) {
inputElementDbtrName.val(dbtrData.name);
}
// finally we do a trick and trigger the commandScript updateDbtrNumber which
// refreshes the op section
updateDbtrNumberPart({ dbtrNumber: dbtrData.no });
}
/*]]>*/
</script>
<h:inputText value="#{workitem.item[item.name]}" pt:data-item="dbtr_number_part"
required="#{required?validationController.required:false}" rendered="#{!readonly}">
</h:inputText>
<!-- hidden input to store name -->
<h:inputHidden id="dbtr_name_part" value="#{workflowController.workitem.item['dbtr.name']}" />
<!-- cargosoft creditor suggest list -->
<h:panelGroup id="autocomplete-resultlist-cargosoft_part" layout="block" class="autocomplete-resultlist">
<ui:repeat var="suggest" value="#{cargosoftController.searchResult}">
<div class="autocomplete-resultlist-element" onclick="autocompleteSelectElement('#{suggest.data}')">
<a href="#">
<h:outputText value="#{suggest.display}" escape="false" />
</a>
</div>
</ui:repeat>
</h:panelGroup>
</ui:composition>

View file

@ -0,0 +1,465 @@
<?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.AGLAnalyticExcelAdapter"/>
<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">
<bpmn2:documentation id="documentation_sxNNHw"/>
</bpmn2:process>
<bpmn2:process definitionalCollaborationRef="Collaboration_1" id="Process_1" isExecutable="false" name="Debitor - Analysis ">
<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[<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_P5vJKg</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_nZPhew</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/debitor_search" required="true" label="Debitor:" />
</imixs-form-section>
<imixs-form-section columns="3" 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:" />
</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 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[<item name="process">Mahnwesen</item>
<steuerbescheide name="excel-export">
<textblock>Steuerbescheide Template</textblock>
<template>steuerbescheid-liste_template.xlsx</template>
<target-name>steuerbescheide_<itemvalue format="yyyy-MM-dd">$lasteventdate</itemvalue>.xlsx</target-name>
</steuerbescheide>
<poi-update name="findreplace">
<find>K6</find>
<replace><itemvalue format="dd.MM.yyyy">$lasteventdate</itemvalue></replace>
<type>date</type>
</poi-update>
<poi-update name="eval">TOTAL1;TOTAL2;TOTAL3;TOTAL4</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:incoming>sequenceFlow_nZPhew</bpmn2:incoming>
<bpmn2:outgoing>sequenceFlow_P5vJKg</bpmn2:outgoing>
</bpmn2:intermediateCatchEvent>
<bpmn2:sequenceFlow id="sequenceFlow_nZPhew" sourceRef="Task_1" targetRef="event_HrHS9A">
<bpmn2:documentation id="documentation_IN9m7w"/>
</bpmn2:sequenceFlow>
<bpmn2:sequenceFlow id="sequenceFlow_P5vJKg" sourceRef="event_HrHS9A" targetRef="Task_2">
<bpmn2:documentation id="documentation_gV4coQ"/>
</bpmn2:sequenceFlow>
<bpmn2:dataObject id="dataObject_00mX6w" name="Form">
<bpmn2:documentation id="documentation_lUG0qw"><![CDATA[<imixs-form>
<imixs-form-section columns="2">
<item name="dbtr.name" type="text" required="false" label="Debitor:" />
</imixs-form-section>
<imixs-form-section columns="3" 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:" />
</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: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="327.0" y="387.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_CJ3Faw">
<dc:Bounds height="20.0" width="100.0" x="295.0" y="426.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_nZPhew" id="BPMNEdge_5PzaQQ" sourceElement="BPMNShape_Task_1" targetElement="BPMNShape_hrK7fA">
<di:waypoint x="345.0" y="340.0"/>
<di:waypoint x="345.0" y="387.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_P5vJKg" id="BPMNEdge_aN5clQ" sourceElement="BPMNShape_hrK7fA" targetElement="BPMNShape_Task_2">
<di:waypoint x="363.0" y="405.0"/>
<di:waypoint x="623.0" y="405.0"/>
<di:waypoint x="623.0" y="340.0"/>
</bpmndi:BPMNEdge>
<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.5" y="240.0"/>
<di:waypoint x="577.5" y="265.0"/>
<di:waypoint x="625.0" y="265.0"/>
<di:waypoint x="625.0" y="290.0"/>
</bpmndi:BPMNEdge>
</bpmndi:BPMNPlane>
<bpmndi:BPMNLabelStyle id="BPMNLabelStyle_1">
<dc:Font name="arial" size="9.0"/>
</bpmndi:BPMNLabelStyle>
</bpmndi:BPMNDiagram>
</bpmn2:definitions>