This commit is contained in:
Ralph Soika 2020-11-20 13:54:23 +01:00
parent 5c6f48d44c
commit c62ba0ebc1
13 changed files with 4168 additions and 1 deletions

View file

@ -273,6 +273,12 @@
<scope>compile</scope> <scope>compile</scope>
</dependency> </dependency>
<!-- SEPA Adapter -->
<dependency>
<groupId>org.imixs.workflow</groupId>
<artifactId>imixs-adapters-sepa</artifactId>
<scope>compile</scope>
</dependency>
<!-- Imixs-ML --> <!-- Imixs-ML -->
<dependency> <dependency>

View file

@ -0,0 +1,14 @@
<f:subview xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets">
<ul>
<li><h:link outcome="/pages/admin/document_import">Dokument Import</h:link></li>
<!--
<li><h:link outcome="/pages/admin/sepa_config">SEPA</h:link></li>
-->
</ul>
</f:subview>

View file

@ -0,0 +1,342 @@
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:i="http://java.sun.com/jsf/composite/imixs"
xmlns:c="http://java.sun.com/jsp/jstl/core"
xmlns:pt="http://xmlns.jcp.org/jsf/passthrough"
xmlns:fn="http://xmlns.jcp.org/jsp/jstl/functions"
xmlns:marty="http://java.sun.com/jsf/composite/marty"
template="/layout/template.xhtml">
<ui:define name="content">
<f:view>
<script type="text/javascript">
/*<![CDATA[*/
$(document).ready(function() {
//$('.imixsdatatable').layoutImixsTable();
});
// This method refreshs the layout
function updateOptions(data) {
if (data.status === 'success') {
$('[id$=Optionlist]').imixsLayout();
/* var id='#'+data.source.id;
if (id.indexOf("input")>-1) {
$(id).focus();
} */
}
}
/*]]>*/
</script>
<h:form id="import_form_id">
<!-- ########## Error ########## -->
<ui:include src="/pages/error_message.xhtml" />
<div class="imixs-form">
<div class="imixs-header">
<h1>Dokument Import</h1>
</div>
<div class="imixs-body">
<div class="imixs-tabs">
<ul>
<li><a href="#tab-1">Timer Setting</a></li>
<li><a href="#tab-2">Data Sources</a></li>
</ul>
<!-- ### Timer ### -->
<div id="tab-1">
<div class="ui-state-highlight ui-corner-all"
style="margin-bottom: 10px; padding: .5em;">
<p><span class="typcn typcn-lightbulb"></span> Define a crontab to schedule the import processor.</p>
</div>
<ui:include src="sub_scheduler_control.xhtml">
<ui:param name="schedulerController"
value="#{documentImportController}" />
</ui:include>
</div>
<!-- ### SMTP ### -->
<div id="tab-2">
<div class="ui-state-highlight ui-corner-all"
style="margin-bottom: 10px; padding: .5em;">
<p><span class="typcn typcn-lightbulb"></span> Define a destination IMAP server and assign mail addresses to specific workflow groups.</p>
</div>
<div class="imixs-form-panel">
<!-- ### Sources ### -->
<h:panelGroup layout="block"
id="imapOptionlist" binding="#{imapOptionlistContainer}">
<f:ajax onevent="updateOptions">
<table class="imixsdatatable"
style="width: 100%;">
<thead>
<tr>
<th style="width: 10px;text-align: center;">Pos</th>
<th style="width: 100px;text-align: center;">Type</th>
<th style="">Workflowgroup</th>
<th style="">Modelversion</th>
<th style="">Task</th>
<th style="">Event</th>
<th style="width: 110px;">
<!-- delete -->
</th>
</tr>
</thead>
<tbody>
<ui:repeat var="source" value="#{documentImportController.sources}">
<tr>
<!-- pos -->
<td style=" text-align: center;">
<h:commandLink
actionListener="#{documentImportController.selectSource(source.item['index'])}">#<h:outputText
value="#{source.item['index']}" />
<f:ajax render="#{imapOptionlistContainer.clientId}"
onevent="updateOptions" />
</h:commandLink>
</td>
<!-- type -->
<td style="text-align: center;">
<h:outputText value="#{source.item['type']}" />
</td>
<!-- Workflowgroup -->
<td><h:outputText
value="#{source.item['workflowgroup']}" />
</td>
<td><h:outputText
value="#{source.item['modelversion']}" />
</td>
<td><h:outputText
value="#{source.item['task']}" />
</td>
<td><h:outputText
value="#{source.item['event']}" />
</td>
<td>
<h:commandLink
actionListener="#{documentImportController.moveSourceDown(source.item['index'])}">
<span class="typcn typcn-arrow-down-thick imixs-state-info"></span>
<f:ajax render="#{imapOptionlistContainer.clientId}"
onevent="updateOptions" />
</h:commandLink>
<h:commandLink
actionListener="#{documentImportController.moveSourceUp(source.item['index'])}">
<span class="typcn typcn-arrow-up-thick imixs-state-info"></span>
<f:ajax render="#{imapOptionlistContainer.clientId}"
onevent="updateOptions" />
</h:commandLink>
<h:commandLink
actionListener="#{documentImportController.removeSource(source.item['index'])}">
<span class="typcn typcn-trash imixs-state-info"></span>
<f:ajax render="#{imapOptionlistContainer.clientId}"
onevent="updateOptions" />
</h:commandLink></td>
</tr>
</ui:repeat>
</tbody>
</table>
<!-- add button -->
<h:commandButton
value="#{message.add}"
actionListener="#{documentImportController.addSource()}">
<f:ajax render="#{imapOptionlistContainer.clientId}"
onevent="updateOptions" />
</h:commandButton>
<!-- ### Subform for selected source ### -->
<h:panelGroup layout="block" rendered="#{! empty documentImportController.source}" styleClass="imixs-form-panel">
<h3>Order ID #<h:outputText value="#{documentImportController.source.item['index']}"/></h3>
<div class="imixs-form-section-3">
<dl>
<dt>Type</dt>
<dd>
<h:selectOneRadio value="#{documentImportController.source.item['type']}">
<f:selectItem itemLabel="IMAP" itemValue="IMAP"/>
<f:selectItem itemLabel="FTP" itemValue="FTP"/>
</h:selectOneRadio>
</dd>
</dl>
<dl>
<dt>Workflowgroup</dt>
<dd>
<h:selectOneMenu
value="#{documentImportController.source.item['workflowgroup']}">
<c:forEach items="#{modelController.workflowGroups}" var="group">
<f:selectItem itemLabel="#{group}" itemValue="#{group}" />
</c:forEach>
</h:selectOneMenu>
</dd>
</dl>
</div>
<div class="imixs-form-section-3">
<dl>
<dt>Workflowmodel</dt>
<dd>
<h:inputText
value="#{documentImportController.source.item['workflowmodel']}"/>
</dd>
</dl>
<dl>
<dt>Task ID</dt>
<dd>
<h:inputText
value="#{documentImportController.source.item['task']}"/>
</dd>
</dl>
<dl>
<dt>Event ID</dt>
<dd>
<h:inputText
value="#{documentImportController.source.item['event']}"/>
</dd>
</dl>
</div>
<hr />
<!-- IMAP -->
<div class="imixs-form-section-3">
<dl>
<dt>Server : Port</dt>
<dd>
<h:inputText style="width:80%;"
value="#{documentImportController.source.item['server']}">
</h:inputText> : <h:inputText style="width:15%;"
value="#{documentImportController.source.item['port']}">
</h:inputText>
</dd>
</dl>
<dl>
<dt>User</dt>
<dd>
<h:inputText required="false"
value="#{documentImportController.source.item['user']}">
</h:inputText>
</dd>
</dl>
<dl>
<dt>Password</dt>
<dd>
<h:inputSecret required="false" redisplay="true"
value="#{documentImportController.source.item['password']}">
</h:inputSecret>
</dd>
</dl>
</div>
<div class="imixs-form-section">
<dl>
<dt>Selector</dt>
<dd>
<h:inputText required="false"
value="#{documentImportController.source.item['selector']}">
</h:inputText>
<p class="small">A selector can be an optional regular expression to be used to select a subset of data</p>
</dd>
</dl>
<dl>
<dt>Options</dt>
<dd>
<h:inputTextarea required="false"
style="height: 5em; width: 100%;"
value="#{documentImportController.source.item['options']}">
</h:inputTextarea>
<p class="small">You can apply custom properties here.
</p>
</dd>
</dl>
</div>
</h:panelGroup> <!-- end of source subform -->
</f:ajax>
</h:panelGroup>
</div>
</div>
</div>
</div>
<div class="imixs-footer">
<h:outputLabel value="#{message.modified}: " />
<h:outputText
value="#{documentImportController.configuration.item['$modified']}">
<f:convertDateTime timeZone="#{message.timeZone}" type="both"
pattern="#{message.dateTimePattern}" />
</h:outputText>
<br />
<h:commandButton
actionListener="#{documentImportController.saveConfiguration()}"
action="/pages/admin/document_import"
value="#{message.save}">
</h:commandButton>
<h:commandButton value="#{message.close}" action="notes" />
</div>
</div>
</h:form>
</f:view>
</ui:define>
</ui:composition>

View file

@ -0,0 +1,180 @@
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:i="http://java.sun.com/jsf/composite/imixs"
xmlns:c="http://java.sun.com/jsp/jstl/core"
xmlns:marty="http://java.sun.com/jsf/composite/marty"
template="/layout/template.xhtml">
<ui:define name="content">
<f:view>
<script type="text/javascript">
/*<![CDATA[*/
function updateStatustPanel(data) {
//initUserInput($('#userselector_id'));
if (data.status === 'success') {
// select with wildcard operator
$('[id$=status_panel]').imixsLayout();
}
}
/*]]>*/
</script>
<h:form id="import_form_id">
<!-- ########## Error ########## -->
<ui:include src="/pages/error_message.xhtml" />
<div class="imixs-form">
<div class="imixs-header">
<h1>SEPA</h1>
</div>
<div class="imixs-body">
<!-- **** General info ***** -->
<div class="imixs-form-panel">
<h1>Configuration</h1>
<div class="imixs-form-section-2">
<dl>
<dt>
Company: <span class="imixs-required">* </span>
</dt>
<dd>
<h:inputText required="true"
value="#{sepaController.configuration.item['_dbtr_name']}">
</h:inputText>
</dd>
</dl>
<dl>
</dl>
<dl>
<dt>
IBAN <span class="imixs-required">* <h:message
for="iban" /></span>
</dt>
<dd>
<h:inputText value="#{sepaController.dbtrIban}"
id="iban" required="false"
validatorMessage="#{app.IBAN_INVALID}" />
</dd>
</dl>
<dl>
<dt>
BIC <span class="imixs-required">* <h:message for="bic" /></span>
</dt>
<dd>
<h:inputText value="#{sepaController.dbtrBic}" id="bic"
required="false" validatorMessage="#{app.BIC_INVALID}" />
</dd>
</dl>
</div>
<div class="imixs-form-section-2">
<dl>
<dt>SEPA Model Version</dt>
<dd>
<h:inputText required="false"
value="#{sepaController.configuration.item['_model_version']}">
</h:inputText>
</dd>
</dl>
<dl>
<dt>SEPA Initial Task</dt>
<dd>
<h:inputText required="false"
value="#{sepaController.configuration.item['_initial_task']}">
</h:inputText>
</dd>
</dl>
</div>
<div class="imixs-form-section">
<p>
<span class="typcn typcn-lightbulb"></span> The initial task
must define a report containing the query and style sheet
information. Invoices will be automatically grouped by the
attribute "_sepa_iban". If this attribute is not set, the
default sepa_iban will be assigned to the invoice before
processed. The SEPA workflow may optional include a
"invoice_update" item definition.
</p>
</div>
</div>
<!-- include timer control -->
<ui:include src="sub_scheduler_control.xhtml">
<ui:param name="schedulerController" value="#{sepaController}" />
</ui:include>
</div>
<div class="imixs-footer">
<h:outputLabel value="#{message.modified}: " />
<h:outputText
value="#{sepaController.configuration.item['$modified']}">
<f:convertDateTime timeZone="#{message.timeZone}" type="both"
pattern="#{message.dateTimePattern}" />
</h:outputText>
<br />
<h:commandButton
actionListener="#{sepaController.saveConfiguration()}"
value="#{message.save}">
</h:commandButton>
<h:commandButton value="#{message.close}" action="notes" />
</div>
</div>
</h:form>
</f:view>
</ui:define>
</ui:composition>

View file

@ -0,0 +1,27 @@
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:c="http://java.sun.com/jsp/jstl/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:i="http://java.sun.com/jsf/composite/imixs"
xmlns:marty="http://java.sun.com/jsf/composite/marty">
<div class="imixs-form-section">
<h1>Log</h1>
<div class="ui-state-highlight ui-corner-all imixs-instruction">
<pre>
<ui:repeat var="logentry"
value="#{workitem.itemList['_scheduler_logmessage']}">
<h:outputText escape="false" value="#{logentry}" /><br />
</ui:repeat>
</pre>
</div>
</div>
</ui:composition>

View file

@ -0,0 +1,130 @@
<f:subview xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://xmlns.jcp.org/jsf/core"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
xmlns:c="http://xmlns.jcp.org/jsp/jstl/core"
xmlns:pt="http://xmlns.jcp.org/jsf/passthrough"
xmlns:fn="http://xmlns.jcp.org/jsp/jstl/functions">
<script type="text/javascript">
/*<![CDATA[*/
function updateStatustPanel(data) {
//initUserInput($('#userselector_id'));
if (data.status === 'success') {
$('[id$=status_panel]').imixsLayout();
}
}
/*]]>*/
</script>
<!-- **** General info ***** -->
<div class="imixs-form-panel">
<h:inputTextarea required="false"
converter="org.imixs.VectorConverter"
style="height: 8em; width: 100%;"
value="#{schedulerController.configuration.itemList['_scheduler_definition']}">
</h:inputTextarea>
</div>
<!-- **** Timer Status ***** -->
<h:panelGroup layout="block" class="imixs-form-panel" id="status_panel">
<h:panelGroup layout="block" id="timer_details"
class="imixs-form-section">
<h2>
<h:outputText id="timer_status"
value="Status ⇢ #{schedulerController.configuration.item['_scheduler_status']}" />
<h:panelGroup
rendered="#{! empty schedulerController.configuration.item['_scheduler_errormessage']}"
class="small" style="color:red">
<br />Error: #{schedulerController.configuration.item['_scheduler_errormessage']}
</h:panelGroup>
</h2>
<h:panelGrid columns="2">
<h:panelGroup layout="block" style="width:100px;">
<h:outputLabel value="ID: " />
</h:panelGroup>
<h:panelGroup>
<h:outputText
value="#{schedulerController.configuration.item['$UniqueID']}" />
</h:panelGroup>
<h:outputLabel value="Schedule: " />
<h:outputText
value="#{schedulerController.configuration.item['Schedule']}" />
<h:outputLabel value="Next Timeout: " />
<h:panelGroup>
<h:outputText
value="#{schedulerController.configuration.item['nextTimeout']}"
rendered="#{! empty schedulerController.configuration.item['nextTimeout']}">
<f:convertDateTime timeZone="#{message.timeZone}" type="both"
pattern="#{message.dateTimePattern}" />
</h:outputText>
<h:outputText value=" " />
</h:panelGroup>
<h:outputLabel value="TimeRemaining: " />
<h:outputText
value="#{schedulerController.millisToShortDHMS(schedulerController.configuration.item['timeRemaining'])}" />
</h:panelGrid>
<h:outputLabel value="Last Run: " />
<h:panelGroup layout="block" class="ui-state-highlight ui-corner-all"
style="padding: .5em;">
<ui:fragment
rendered="#{! empty schedulerController.configuration.item['_scheduler_logmessage']}">
<ui:repeat var="logentry"
value="#{schedulerController.configuration.itemList['_scheduler_logmessage']}">
<h:outputText escape="false" value="#{logentry}" />
<br />
</ui:repeat>
</ui:fragment>
<ui:fragment
rendered="#{empty schedulerController.configuration.item['_scheduler_logmessage']}">
No Data.
</ui:fragment>
</h:panelGroup>
</h:panelGroup>
<!-- Timer Actions -->
<h:commandButton value="#{message.refresh}"
actionListener="#{schedulerController.refresh}">
<f:ajax render="status_panel" onevent="updateStatustPanel" />
</h:commandButton>
<h:commandButton
actionListener="#{schedulerController.startScheduler}" value="start">
</h:commandButton>
<h:commandButton actionListener="#{schedulerController.stopScheduler}"
value="stop">
</h:commandButton>
<h:commandButton
actionListener="#{schedulerController.restartScheduler}"
value="restart">
</h:commandButton>
</h:panelGroup>
</f:subview>

View file

@ -0,0 +1,63 @@
<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">
<!-- the following code computes the txtworkflow abstract from the current modelversion and processid -->
<ui:param name="instruction"
value="#{modelController.getProcessDescription(workflowController.workitem.item['$taskid'],workflowController.workitem.item['$ModelVersion'],workflowController.workitem)}"></ui:param>
<h:panelGroup layout="block" styleClass="imixs-instruction"
rendered="#{! empty instruction}">
<h:outputText escape="false" value="#{instruction}"/>
</h:panelGroup>
<!-- Custom Form -->
<f:subview>
<ui:include src="/pages/workitems/forms/custom_read.xhtml">
<ui:param name="workitem" value="#{workflowController.workitem}" />
</ui:include>
</f:subview>
<!-- Dispatch Form -->
<ui:param name="spaces" value="#{teamController.spaces}" />
<h:panelGroup layout="block" styleClass="imixs-form-section"
rendered="#{!empty spaces}">
<h3>#{app.sub_dispatch}</h3>
<dl>
<dt>#{message['form.space']}</dt>
<dd>
<h:selectOneMenu style="width:20em;" required="false"
value="#{workflowController.workitem.item['space.ref']}">
<f:selectItem itemLabel=""></f:selectItem>
<c:forEach items="#{teamController.spaces}" var="space">
<f:selectItem itemLabel="#{space.item['name']}"
itemValue="#{space.item['$UniqueID']}">
</f:selectItem>
</c:forEach>
</h:selectOneMenu>
</dd>
</dl>
</h:panelGroup>
<!-- sub forms (optional) -->
<c:forEach items="#{formController.formDefinition.sections}"
var="section">
<div class="imixs-form-panel">
<h3>
<h:outputText value="#{section.name}" />
</h3>
<f:subview>
<ui:include src="/pages/workitems/forms/#{section.path}.xhtml">
<ui:param name="workitem" value="#{workflowController.workitem}" />
</ui:include>
</f:subview>
</div>
</c:forEach>
</ui:composition>

View file

@ -0,0 +1,80 @@
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:c="http://java.sun.com/jsp/jstl/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:i="http://java.sun.com/jsf/composite/imixs"
xmlns:marty="http://java.sun.com/jsf/composite/marty">
<div class="imixs-form-section-2">
<dl>
<dt>IBAN</dt>
<dd>
<h:outputText value="#{workitem.item['_dbtr_iban']}" />
</dd>
</dl>
<dl>
<dt>BIC</dt>
<dd>
<h:outputText value="#{workitem.item['_dbtr_bic']}" />
</dd>
</dl>
</div>
<div class="imixs-form-section">
<h3>Invoices</h3>
<table class="">
<tr>
<th style="">#{custom.creditor_name}</th>
<th style="">#{custom.invoicenumber}</th>
<th style="">#{custom.invoicedate}</th>
<th style="">#{custom.amount}</th>
<th style=""></th>
<th style="">IBAN</th>
<th style="">BIC</th>
</tr>
<c:forEach items="#{workitem.itemList['txtworkitemref']}" var="id">
<!-- load inovice data by documentController: #{documentController.load(id)} -->
<ui:param name="invoice" value="#{documentController.getDocument()}"></ui:param>
<tr>
<td>#{invoice.item['_kreditor']}</td>
<td>#{invoice.item['_invoicenumber']}</td>
<td><h:outputText value="#{invoice.item['_invoicedate']}">
<f:convertDateTime pattern="#{message.datePatternShort}"
timeZone="#{message.timeZone}" />
</h:outputText></td>
<td style="text-align: right;"><h:outputText
value="#{invoice.item['_amount_brutto']}">
<f:convertNumber minFractionDigits="2" locale="de" />
</h:outputText></td>
<td>#{invoice.item['_currency']}</td>
<td>#{invoice.item ['_cdtr_iban']}</td>
<td>#{invoice.item['_cdtr_bic']}</td>
</tr>
</c:forEach>
<tr style="border-top: 1px solid #ccc;">
<td />
<td />
<td><strong>Summary</strong></td>
<td style="text-align: right;"><strong><h:outputText
value="#{sepaController.calculateSum(workitem.itemList['txtworkitemref'], '_amount_brutto')}">
<f:convertNumber minFractionDigits="2" locale="de" />
</h:outputText></strong></td>
<td><strong>#{invoice.item['_currency']}</strong></td>
<td />
<td />
</tr>
</table>
</div>
</ui:composition>

View file

@ -176,6 +176,13 @@
</dependency> </dependency>
<!-- SEPA Adapter -->
<dependency>
<groupId>org.imixs.workflow</groupId>
<artifactId>imixs-adapters-sepa</artifactId>
<version>${org.imixs.adapters.version}</version>
<scope>provided</scope>
</dependency>
<!-- Imixs-Archive --> <!-- Imixs-Archive -->
<dependency> <dependency>

File diff suppressed because one or more lines are too long

174
reports/sepa/sepa.xsl Normal file
View file

@ -0,0 +1,174 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
version="2.0">
<xsl:strip-space elements="*" />
<xsl:output method="xml" indent="yes" encoding="UTF-8" standalone="yes" />
<xsl:template match="/">
<xsl:variable name="now" select="current-dateTime()" />
<Document
xmlns="urn:iso:std:iso:20022:tech:xsd:pain.001.003.03"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="urn:iso:std:iso:20022:tech:xsd:pain.001.003.03 pain.001.003.03.xsd">
<CstmrCdtTrfInitn>
<!-- generate header info -->
<!-- compute count of invoices -->
<xsl:variable name="count"
select="count(/data/document[normalize-space(item[@name = '$workflowgroup']/value) = 'Rechnungseingang']/item[@name='$uniqueid']/value)" />
<!-- compute total amount -->
<xsl:variable name="totalsum"
select="xs:decimal(sum(/data/document[normalize-space(item[@name = '$workflowgroup']/value) = 'Rechnungseingang']/item[@name='_amount_brutto']/value))" />
<!-- round to 2 digits -->
<xsl:variable name="total"
select="xs:decimal(round-half-to-even($totalsum, 2))" />
<!-- shortcut for the sepa export document -->
<xsl:variable name="exportWorkitem"
select="/data/document[normalize-space(item[@name = '$workflowgroup']/value) = 'SEPA-Export']" />
<GrpHdr>
<MsgId>
<xsl:value-of
select="replace($exportWorkitem/item[@name='$uniqueid']/value, '-', '')" />
</MsgId>
<CreDtTm><xsl:value-of
select="format-dateTime($now, '[Y0001]-[M01]-[D01]T[H01]:[m01]:[s01]')" /></CreDtTm>
<NbOfTxs>
<xsl:value-of select="$count" />
</NbOfTxs>
<CtrlSum>
<xsl:value-of select="$total" />
</CtrlSum>
<InitgPty>
<Nm>
<xsl:value-of
select="$exportWorkitem/item[@name='_dbtr_name']/value" />
</Nm>
</InitgPty>
</GrpHdr>
<PmtInf>
<PmtInfId>
<xsl:value-of
select="replace($exportWorkitem/item[@name='$uniqueid']/value, '-', '')" /><xsl:text>-1</xsl:text>
</PmtInfId>
<PmtMtd>TRF</PmtMtd>
<NbOfTxs>
<xsl:value-of select="$count" />
</NbOfTxs>
<CtrlSum>
<xsl:value-of select="$total" />
</CtrlSum>
<PmtTpInf>
<SvcLvl>
<Cd>SEPA</Cd>
</SvcLvl>
</PmtTpInf>
<ReqdExctnDt><xsl:value-of
select="format-dateTime($now, '[Y0001]-[M01]-[D01]')" /></ReqdExctnDt>
<Dbtr>
<Nm>
<xsl:value-of
select="$exportWorkitem/item[@name='_dbtr_name']/value" />
</Nm>
</Dbtr>
<DbtrAcct>
<Id>
<IBAN>
<xsl:value-of
select="replace($exportWorkitem/item[@name='_dbtr_iban']/value, ' ', '')" />
</IBAN>
</Id>
</DbtrAcct>
<DbtrAgt>
<FinInstnId>
<BIC>
<xsl:value-of
select="$exportWorkitem/item[@name='_dbtr_bic']/value" />
</BIC>
</FinInstnId>
</DbtrAgt>
<ChrgBr>SLEV</ChrgBr>
<!-- generate CdtTrfTxInf for each invoice -->
<xsl:apply-templates
select="/data/document[normalize-space(item[@name = '$workflowgroup']/value) = 'Rechnungseingang']" />
</PmtInf>
</CstmrCdtTrfInitn>
</Document>
</xsl:template>
<!-- This template builds sepa header info -->
<xsl:template
match="/data/document[normalize-space(item[@name = '$workflowgroup']/value) = 'SEPA-Export']">
<!-- not in use -->
</xsl:template>
<!-- This template builds sepa payment info for each invoice -->
<xsl:template
match="/data/document[normalize-space(item[@name = '$workflowgroup']/value) = 'Rechnungseingang']">
<CdtTrfTxInf xmlns="urn:iso:std:iso:20022:tech:xsd:pain.001.003.03">
<PmtId>
<EndToEndId>NOTPROVIDED</EndToEndId>
</PmtId>
<Amt>
<InstdAmt>
<xsl:attribute name="Ccy"><xsl:value-of
select="item[@name='_currency']/value" /></xsl:attribute>
<xsl:value-of
select="item[@name='_amount_brutto']/value" />
</InstdAmt>
</Amt>
<CdtrAgt>
<FinInstnId>
<BIC>
<xsl:value-of select="item[@name='_cdtr_bic']/value" />
</BIC>
</FinInstnId>
</CdtrAgt>
<Cdtr>
<Nm>
<xsl:value-of select="item[@name='_cdtr_name']/value" />
</Nm>
</Cdtr>
<CdtrAcct>
<Id>
<IBAN>
<xsl:value-of select="replace(item[@name='_cdtr_iban']/value, ' ', '')" />
</IBAN>
</Id>
</CdtrAcct>
<RmtInf>
<Ustrd>
<xsl:value-of select="item[@name='_subject']/value" />
</Ustrd>
</RmtInf>
</CdtTrfTxInf>
</xsl:template>
</xsl:stylesheet>

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff