import steuerbescheide
This commit is contained in:
parent
8558aecdaf
commit
4e0b1b0b5f
14 changed files with 4890 additions and 514 deletions
|
|
@ -0,0 +1,48 @@
|
|||
package com.alexanderlogistics;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.List;
|
||||
|
||||
import org.imixs.workflow.ItemCollection;
|
||||
import org.imixs.workflow.engine.DocumentService;
|
||||
import org.imixs.workflow.faces.data.WorkflowController;
|
||||
|
||||
import jakarta.enterprise.context.ConversationScoped;
|
||||
import jakarta.inject.Inject;
|
||||
import jakarta.inject.Named;
|
||||
|
||||
/**
|
||||
* Der SteuerListController dient dazu in einem Stuerbescheid
|
||||
* die einzelnen Zeilen auszugeben.
|
||||
*
|
||||
* @author rsoika
|
||||
*
|
||||
*/
|
||||
@Named("steuerListController")
|
||||
@ConversationScoped
|
||||
public class SteuerListController implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@Inject
|
||||
DocumentService documentService;
|
||||
|
||||
@Inject
|
||||
protected WorkflowController workflowController;
|
||||
|
||||
/**
|
||||
* Gibt die Zeilen aus einem importierten Steuerbeleg (eAkte) zurück
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public List<ItemCollection> getRows() {
|
||||
|
||||
List<ItemCollection> rows = InvoiceUtil.explodeChildList(workflowController.getWorkitem());
|
||||
|
||||
return rows;
|
||||
}
|
||||
|
||||
public ItemCollection loadInvoice(String id) {
|
||||
return documentService.load(id);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,100 @@
|
|||
package com.alexanderlogistics;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import org.imixs.workflow.ItemCollection;
|
||||
import org.imixs.workflow.engine.DocumentService;
|
||||
import org.imixs.workflow.engine.plugins.AbstractPlugin;
|
||||
import org.imixs.workflow.exceptions.PluginException;
|
||||
import org.imixs.workflow.exceptions.QueryException;
|
||||
|
||||
import jakarta.inject.Inject;
|
||||
|
||||
/**
|
||||
* Das SteuerbescheidPlugin prüft ob
|
||||
*
|
||||
* - die ATC Nummer aus dem Steuerbescheid in einer Ausgangsrechnung gefunden
|
||||
* wird ($taskID<5990)
|
||||
* - invoice.atc.number
|
||||
* - der Betrag "invoice.total.net"
|
||||
* - die Währung???
|
||||
* - die Positionsnummer ???
|
||||
*
|
||||
*
|
||||
* @author rsoika
|
||||
* @version 1.0
|
||||
*
|
||||
*/
|
||||
public class SteuerbescheidPlugin extends AbstractPlugin {
|
||||
|
||||
private static Logger logger = Logger.getLogger(SteuerbescheidPlugin.class.getName());
|
||||
|
||||
@Inject
|
||||
protected DocumentService documentService;
|
||||
|
||||
@Inject
|
||||
KreditorDebitorService kreditorService;
|
||||
|
||||
/**
|
||||
* Prüft ob der Steuerbetrag abgerechnet ist.
|
||||
*
|
||||
*
|
||||
**/
|
||||
@Override
|
||||
public ItemCollection run(ItemCollection workitem, ItemCollection event) throws PluginException {
|
||||
|
||||
String atcNummer = workitem.getItemValueString("invoice.atc.number");
|
||||
logger.info("Verify ATC-Nr.: " + atcNummer);
|
||||
double amount = workitem.getItemValueDouble("invoice.total.net");
|
||||
List<ItemCollection> invoices = findInvoices(atcNummer);
|
||||
|
||||
// Beträge subtrahieren....
|
||||
double saldo = amount;
|
||||
logger.info("Found " + invoices.size() + " matching invoices...");
|
||||
for (ItemCollection invoice : invoices) {
|
||||
workitem.setItemValueUnique("$workitemRef", invoice.getUniqueID());
|
||||
|
||||
// suche die Zeile in der die ATC Nummer vorkommt.
|
||||
List<ItemCollection> positionen = InvoiceUtil.explodeChildList(invoice);
|
||||
for (ItemCollection pos : positionen) {
|
||||
if (atcNummer.equals(pos.getItemValueString("atc.number"))) {
|
||||
double umsatz = pos.getItemValueDouble("datev.umsatz");
|
||||
logger.info("...Umsatz=" + umsatz);
|
||||
saldo = InvoiceUtil.round(saldo - umsatz);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// Stimmt der Betrag?
|
||||
workitem.setItemValue("invoice.saldo", InvoiceUtil.round(saldo));
|
||||
if (amount == saldo) {
|
||||
// match!
|
||||
} else {
|
||||
// no match
|
||||
}
|
||||
|
||||
return workitem;
|
||||
}
|
||||
|
||||
/*
|
||||
* Sucht alle Ausgansrechnungen zu einer ATC Nummer
|
||||
*/
|
||||
protected List<ItemCollection> findInvoices(String atcNumber) {
|
||||
List<ItemCollection> result = new ArrayList<ItemCollection>();
|
||||
String query = "(type:workitem OR type:workitemarchive) AND ($taskid:[5000 TO 5990])"
|
||||
+ " AND invoice.atc.number:\"" + atcNumber + "\" "
|
||||
+ " AND $workflowgroup:\"Rechnungsausgang\" ";
|
||||
try {
|
||||
result = documentService.find(query, 999, 0, "$created", false);
|
||||
return result;
|
||||
} catch (QueryException e) {
|
||||
logger.severe("Failed to get invoices: " + e.getMessage());
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -1,97 +0,0 @@
|
|||
package com.alexanderlogistics;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import org.imixs.workflow.ItemCollection;
|
||||
import org.imixs.workflow.engine.DocumentService;
|
||||
import org.imixs.workflow.engine.WorkflowService;
|
||||
import org.imixs.workflow.faces.data.WorkflowController;
|
||||
|
||||
import jakarta.enterprise.context.ConversationScoped;
|
||||
import jakarta.inject.Inject;
|
||||
import jakarta.inject.Named;
|
||||
|
||||
/**
|
||||
* Der ZollListController dient dazu in einer Zoll Liste die Rechnungen
|
||||
* anzuzeigen,
|
||||
* für die noch Zollabrechnungen erforderlich sind.
|
||||
*
|
||||
* Diese List wird aus einem Abgleich einer Cargosoft Datei erstellt.
|
||||
*
|
||||
* @author rsoika
|
||||
*
|
||||
*/
|
||||
@Named("zollListController")
|
||||
@ConversationScoped
|
||||
public class ZollListController implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
public static final int TASK_ERSTELLUNG = 1000;
|
||||
|
||||
private static Logger logger = Logger.getLogger(ZollListController.class.getName());
|
||||
|
||||
private String lastDbtrNumber = null;
|
||||
|
||||
private String currencyFilter = "-";
|
||||
private String lastCurrencyFilter = null;
|
||||
|
||||
private List<ItemCollection> invoiceList = null;
|
||||
|
||||
@Inject
|
||||
protected WorkflowController workflowController;
|
||||
|
||||
@Inject
|
||||
protected WorkflowService workflowService;
|
||||
|
||||
@Inject
|
||||
ZahlungseingangService zahlungseingangService;
|
||||
|
||||
@Inject
|
||||
protected DocumentService documentService;
|
||||
|
||||
/**
|
||||
* Diese Methode ist eine Dummy Methode die nur mal 3 Rechnungen simmuliert.
|
||||
*
|
||||
* Später wird diese Methode irgend was anderes machen.
|
||||
*
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
public List<ItemCollection> getInvoices() {
|
||||
invoiceList = new ArrayList<ItemCollection>();
|
||||
|
||||
// dummy1
|
||||
|
||||
invoiceList.add(new ItemCollection()
|
||||
.setItemValue("invoice.text", "LA-HOL-2401-002")
|
||||
.setItemValue("invoice.atc", "ATC400058750120242452")
|
||||
.setItemValue("dbtr.name", "D18317 Big Belly Solar GmbH")
|
||||
.setItemValue("invoice.ZOLL", 18.45)
|
||||
.setItemValue("invoice.EUST", 0)
|
||||
.setItemValue("invoice.number", ""));
|
||||
|
||||
invoiceList.add(new ItemCollection()
|
||||
.setItemValue("invoice.text", "LA-HOL-2401-003")
|
||||
.setItemValue("invoice.atc", "ATC400058750120242450")
|
||||
.setItemValue("dbtr.name", "D18317 Big Belly Solar GmbH")
|
||||
.setItemValue("invoice.ZOLL", 100.45)
|
||||
.setItemValue("invoice.EUST", 0)
|
||||
.setItemValue("invoice.number", ""));
|
||||
|
||||
invoiceList.add(new ItemCollection()
|
||||
.setItemValue("invoice.text", "LA-PAP-2401-003")
|
||||
.setItemValue("invoice.atc", "345345")
|
||||
.setItemValue("dbtr.name", "D18006 GPI BERLIN GMBH")
|
||||
.setItemValue("invoice.ZOLL", 253.4)
|
||||
.setItemValue("invoice.EUST", 0)
|
||||
.setItemValue("invoice.number", ""));
|
||||
|
||||
return invoiceList;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -380,12 +380,23 @@ public class CargosoftXMLEAkteImportService {
|
|||
|
||||
readXMLValue(doc, "/CargoSoftEFile/EFile/References/Reference[@type='cs_voucher_number']",
|
||||
workitem, "invoice.number", String.class);
|
||||
|
||||
readXMLValue(doc, "/CargoSoftEFile/EFile/References/Reference[@type='cs_address_number']",
|
||||
workitem, "cdtr.number", String.class);
|
||||
|
||||
readXMLValue(doc, "/CargoSoftEFile/EFile/References/Reference[@type='voucherdate']",
|
||||
workitem, "invoice.date", Date.class);
|
||||
|
||||
readXMLValue(doc, "/CargoSoftEFile/EFile/References/Reference[@type='currency']",
|
||||
workitem, "invoice.currency", String.class);
|
||||
|
||||
readXMLValue(doc, "/CargoSoftEFile/EFile/References/Reference[@type='currency_rate']",
|
||||
workitem, "invoice.rate", Double.class);
|
||||
|
||||
readXMLValue(doc, "/CargoSoftEFile/EFile/References/Reference[@type='total_net_amount']",
|
||||
workitem, "invoice.total.net", String.class);
|
||||
workitem, "invoice.total.net", Double.class);
|
||||
readXMLValue(doc, "/CargoSoftEFile/EFile/References/Reference[@type='total_tax_amount']",
|
||||
workitem, "invoice.total.tax", String.class);
|
||||
workitem, "invoice.total.tax", Double.class);
|
||||
readXMLValue(doc, "/CargoSoftEFile/EFile/References/Reference[@type='reference']",
|
||||
workitem, "invoice.atc.number", String.class);
|
||||
readXMLValue(doc, "/CargoSoftEFile/EFile/References/Reference[@type='booking_period']",
|
||||
|
|
@ -396,41 +407,12 @@ public class CargosoftXMLEAkteImportService {
|
|||
readXMLValue(doc, "/CargoSoftEFile/EFile/References/Reference[@type='booking_text']",
|
||||
workitem, "invoice.booking_text", String.class);
|
||||
|
||||
// Read rows
|
||||
readXMLValue(doc, "/CargoSoftEFile/EFile/References/Reference[@type='row_1_cs_filenumber']",
|
||||
workitem, "invoice.text", String.class);
|
||||
|
||||
// verify if invoice is already imported.
|
||||
if (alreadyImported(workitem.getItemValueString("invoice.number"))) {
|
||||
logger.warning("Invoice " + workitem.getItemValueString("invoice.number") + " already imported");
|
||||
// return null;
|
||||
return null;
|
||||
}
|
||||
|
||||
// Rechnungssumme errechnen.....
|
||||
// readXMLValue(doc,
|
||||
// "/Invoices/Invoice/InvoiceHeader/InvoiceAmount/NetAmount/Amount/Value",
|
||||
// workitem, "invoice.total.net", Double.class);
|
||||
// readXMLValue(doc,
|
||||
// "/Invoices/Invoice/InvoiceHeader/InvoiceAmount/VATInformation/VATAmount/Amount/Value",
|
||||
// workitem, "invoice.total.tax", Double.class);
|
||||
// if (!workitem.hasItem("invoice.total.tax")) {
|
||||
// workitem.setItemValue("invoice.total.tax", 0.0);
|
||||
// }
|
||||
// // Total = net + tax
|
||||
// double _total = workitem.getItemValueDouble("invoice.total.net");
|
||||
// _total = _total + workitem.getItemValueDouble("invoice.total.tax");
|
||||
// _total = Math.round(_total * 100) / 100.0;
|
||||
// workitem.setItemValue("invoice.total", _total);
|
||||
// workitem.setItemValue("invoice.saldo", _total);
|
||||
|
||||
// Bei Gutschrift und Stornorechnung Wert negieren...
|
||||
// if (isGutschrift(workitem)) {
|
||||
// workitem.setItemValue("invoice.saldo",
|
||||
// -workitem.getItemValueDouble("invoice.total"));
|
||||
// workitem.setItemValue("invoice.total",
|
||||
// -workitem.getItemValueDouble("invoice.total"));
|
||||
// }
|
||||
|
||||
String cdtrNumber = workitem.getItemValueString("cdtr.number");
|
||||
if (cdtrNumber.startsWith("K") || cdtrNumber.startsWith("D")) {
|
||||
workitem.setItemValue("cdtr.number", cdtrNumber.substring(1));
|
||||
|
|
@ -457,17 +439,12 @@ public class CargosoftXMLEAkteImportService {
|
|||
}
|
||||
|
||||
// Row Positions lesen
|
||||
// readXMLRows(doc, workitem);
|
||||
readXMLRows(doc, workitem);
|
||||
|
||||
// Jetzt noch das Space mapping
|
||||
workitem.setItemValue("invoice.text", workitem.getItemValueString("invoice.positions"));
|
||||
mahnlaufService.mapInvoiceTextToSpace(workitem, spacePosMappings);
|
||||
|
||||
// Rückstellungen ignorieren
|
||||
// if (isRueckStellung(workitem)) {
|
||||
// // Ignore invoice!
|
||||
// return null;
|
||||
// }
|
||||
|
||||
// Finally we attache the pdf file and the XML content to the workitem.
|
||||
attacheFiles(doc, workitem);
|
||||
|
||||
|
|
@ -478,19 +455,6 @@ public class CargosoftXMLEAkteImportService {
|
|||
return workitem;
|
||||
}
|
||||
|
||||
/**
|
||||
* Prüft ob die Rechnung eine Rückstellung ist also mit R1 bis R8 beginnt
|
||||
*
|
||||
* ^R[1-8] .
|
||||
*
|
||||
* @param workitem
|
||||
* @return
|
||||
*/
|
||||
private boolean isRueckStellung(ItemCollection workitem) {
|
||||
String text = workitem.getItemValueString("invoice.text");
|
||||
return text.matches(REGEX_IMPORTTEXTPATTERN);
|
||||
}
|
||||
|
||||
/**
|
||||
* Reads a tag value from the xml tree and set the value into the given
|
||||
* workitem.
|
||||
|
|
@ -532,11 +496,19 @@ public class CargosoftXMLEAkteImportService {
|
|||
return;
|
||||
}
|
||||
if (itemType == Double.class && value != null && !value.isEmpty()) {
|
||||
try {
|
||||
workitem.setItemValue(itemName, Double.parseDouble(value));
|
||||
} catch (NumberFormatException e) {
|
||||
// no op
|
||||
}
|
||||
return;
|
||||
}
|
||||
if (itemType == Integer.class && value != null && !value.isEmpty()) {
|
||||
try {
|
||||
workitem.setItemValue(itemName, Integer.parseInt(value));
|
||||
} catch (NumberFormatException e) {
|
||||
// no op
|
||||
}
|
||||
return;
|
||||
}
|
||||
// Default String format
|
||||
|
|
@ -549,106 +521,6 @@ public class CargosoftXMLEAkteImportService {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Reads the positions rows
|
||||
*
|
||||
* InvoiceRows/InvoiceRow
|
||||
*
|
||||
* Each row has the following items:
|
||||
* _childitems {
|
||||
* datev.shzeichen=[H],
|
||||
* datev.kurs=[0.0],
|
||||
* datev.basisumsatz=[0.0],
|
||||
* datev.text=[R LA-PAP-2405-051],
|
||||
* datev.konto=[3851],
|
||||
* datev.umsatz=[3307.81],
|
||||
* datev.wkz=[EUR]}}
|
||||
*
|
||||
* @param doc - xml doc
|
||||
* @param workitem
|
||||
*/
|
||||
private void readXMLRows(Document doc, ItemCollection workitem) {
|
||||
// create XPath...
|
||||
List<ItemCollection> childItems = new ArrayList<>();
|
||||
|
||||
XPathFactory xpathFactory = XPathFactory.newInstance();
|
||||
XPath xPath = xpathFactory.newXPath();
|
||||
try {
|
||||
// Compile the XPath expressions
|
||||
XPathExpression fileNumberExpr = xPath.compile("FileNumber/text()");
|
||||
XPathExpression netAmountCurrencyExpr = xPath
|
||||
.compile("InvoiceAmount/NetAmount/Amount/Currency/Codes/Code[@Type='cs']/text()");
|
||||
XPathExpression netAmountValueExpr = xPath.compile("InvoiceAmount/NetAmount/Amount/Value/text()");
|
||||
XPathExpression netAmountExchangeRateExpr = xPath
|
||||
.compile("InvoiceAmount/NetAmount/Amount/ExchangeRate/text()");
|
||||
|
||||
XPathExpression netActivityTypeExpr = xPath
|
||||
.compile("InvoiceAmount/ActivityType/Codes/Code[@Type='cs']/text()");
|
||||
|
||||
NodeList rowList = doc.getElementsByTagName("InvoiceRow");
|
||||
double _kurs = 0.0;
|
||||
double _baseAmount = 0.0;
|
||||
for (int i = 0; i < rowList.getLength(); i++) {
|
||||
ItemCollection childItemCol = new ItemCollection();
|
||||
Node rowNode = rowList.item(i);
|
||||
if (rowNode.getNodeType() == Node.ELEMENT_NODE) {
|
||||
|
||||
// Get the FileNumber value
|
||||
String fileNumber = (String) fileNumberExpr.evaluate(rowNode, XPathConstants.STRING);
|
||||
childItemCol.setItemValue("datev.text", fileNumber);
|
||||
|
||||
// speichere die Position in invoice.positions zur suche nach dem
|
||||
// Positionskennzeichen
|
||||
workitem.appendItemValue("invoice.positions", fileNumber);
|
||||
|
||||
String currency = (String) netAmountCurrencyExpr.evaluate(rowNode, XPathConstants.STRING);
|
||||
childItemCol.setItemValue("datev.wkz", currency);
|
||||
// Umsatz
|
||||
String umsatz = (String) netAmountValueExpr.evaluate(rowNode, XPathConstants.STRING);
|
||||
double dUmsatz = Double.parseDouble(umsatz);
|
||||
childItemCol.setItemValue("datev.umsatz", dUmsatz);
|
||||
// Kurs
|
||||
String _kursByRow = (String) netAmountExchangeRateExpr.evaluate(rowNode, XPathConstants.STRING);
|
||||
if (_kursByRow != null && !_kursByRow.isEmpty()) {
|
||||
Double dKurs = Double.parseDouble(_kursByRow);
|
||||
_kurs = dKurs;
|
||||
childItemCol.setItemValue("datev.kurs", dKurs);
|
||||
// Basisumsatz
|
||||
if (dKurs != 0) {
|
||||
double basisUmsatz = dUmsatz / dKurs;
|
||||
double gerundeterBasisUmsatz = Math.round(basisUmsatz * 100) / 100.0;
|
||||
|
||||
_baseAmount = _baseAmount + gerundeterBasisUmsatz;
|
||||
|
||||
childItemCol.setItemValue("datev.basisumsatz", gerundeterBasisUmsatz);
|
||||
}
|
||||
}
|
||||
|
||||
String activityType = (String) netActivityTypeExpr.evaluate(rowNode, XPathConstants.STRING);
|
||||
childItemCol.setItemValue("category", activityType);
|
||||
|
||||
childItemCol.setItemValue("datev.shzeichen", "H");
|
||||
|
||||
childItems.add(childItemCol);
|
||||
}
|
||||
}
|
||||
// Update invoice.rate und invoice.base.amount
|
||||
workitem.setItemValue("invoice.rate", _kurs);
|
||||
_baseAmount = Math.round(_baseAmount * 100) / 100.0;
|
||||
workitem.setItemValue("invoice.base.amount", _baseAmount);
|
||||
|
||||
} catch (XPathExpressionException e) {
|
||||
logger.warning("Unable to read row : " + e.getMessage());
|
||||
|
||||
}
|
||||
|
||||
// Set child items
|
||||
InvoiceUtil.implodeChildList(workitem, childItems);
|
||||
// invoice.text ist erste position
|
||||
workitem.setItemValue("invoice.text", workitem.getItemValueString("invoice.positions"));
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* This method attache the pdf file and the XML file to the workitem.
|
||||
* The method removes the file content first form the xml tree and attache the
|
||||
|
|
@ -710,7 +582,7 @@ public class CargosoftXMLEAkteImportService {
|
|||
* @param belegNummer
|
||||
* @return
|
||||
*/
|
||||
private boolean alreadyImported(String belegNummer) {
|
||||
protected boolean alreadyImported(String belegNummer) {
|
||||
|
||||
String sQuery = "((type:workitem OR type:workitemarchive) AND $modelversion:steuerbescheid* AND invoice.number:\""
|
||||
+ belegNummer + "\")";
|
||||
|
|
@ -725,4 +597,84 @@ public class CargosoftXMLEAkteImportService {
|
|||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* This helper method reads the references starting with 'Row_' and creates a
|
||||
* child Workitem for each row.
|
||||
*
|
||||
* The method assumes that the rows are starting with the type 'row_n_' where
|
||||
* 'n' is the row number.
|
||||
* We start with row 1 and read until we found more rows.
|
||||
*
|
||||
* Example:
|
||||
*
|
||||
* <pre>{@code
|
||||
* ...
|
||||
<Reference type="row_1_activity_type" />
|
||||
<Reference type="row_1_amount">3591.340</Reference>
|
||||
<Reference type="row_1_tax_code">0</Reference>
|
||||
<Reference type="row_1_cs_filenumber">IM-GCA-2408-116</Reference>
|
||||
* }</pre>
|
||||
*
|
||||
* <p>
|
||||
* The last filenumber text will be transferred into the item 'invoice.text'
|
||||
*
|
||||
* @param xml
|
||||
* @return
|
||||
* @throws Exception
|
||||
*/
|
||||
private void readXMLRows(Document doc, ItemCollection workitem) {
|
||||
|
||||
int row = 1;
|
||||
// Prepare XPath
|
||||
XPathFactory xPathFactory = XPathFactory.newInstance();
|
||||
XPath xpath = xPathFactory.newXPath();
|
||||
try {
|
||||
List<ItemCollection> childItems = new ArrayList<>();
|
||||
while (true) {
|
||||
// XPath expression to find all Reference nodes starting with "row_"
|
||||
logger.info("...read row " + row + "...");
|
||||
XPathExpression expr = xpath
|
||||
.compile("/CargoSoftEFile/EFile/References/Reference[starts-with(@type, 'row_" + row + "_')]");
|
||||
NodeList nodeList = (NodeList) expr.evaluate(doc, XPathConstants.NODESET);
|
||||
if (nodeList != null && nodeList.getLength() > 0) {
|
||||
logger.info("...debug1 found " + nodeList.getLength() + " matches");
|
||||
ItemCollection childItemCol = new ItemCollection();
|
||||
for (int i = 0; i < nodeList.getLength(); i++) {
|
||||
Node node = nodeList.item(i);
|
||||
String type = node.getAttributes().getNamedItem("type").getNodeValue();
|
||||
String value = node.getTextContent();
|
||||
|
||||
// Identify which field to set
|
||||
if (type.contains("activity_type")) {
|
||||
childItemCol.setItemValue("activity.type", value);
|
||||
} else if (type.contains("amount")) {
|
||||
try {
|
||||
childItemCol.setItemValue("amount", Double.parseDouble(value));
|
||||
} catch (NumberFormatException e) {
|
||||
logger.warning("Unable to parse amount: " + e.getMessage());
|
||||
}
|
||||
} else if (type.contains("tax_code")) {
|
||||
childItemCol.setItemValue("tax.code", value);
|
||||
} else if (type.contains("cs_filenumber")) {
|
||||
childItemCol.setItemValue("filenumber", value);
|
||||
workitem.appendItemValue("invoice.positions", value);
|
||||
}
|
||||
}
|
||||
childItems.add(childItemCol);
|
||||
// continue with next row
|
||||
row++;
|
||||
} else {
|
||||
// no more rows found
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Set child items
|
||||
InvoiceUtil.implodeChildList(workitem, childItems);
|
||||
} catch (XPathExpressionException e) {
|
||||
logger.warning("Unable to read row : " + e.getMessage());
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,9 +2,9 @@
|
|||
# Imixs Lucene Plugin
|
||||
##############################
|
||||
lucence.indexDir=${imixs-office.IndexDir}
|
||||
index.fields=txtsearchstring,txtSubject,txtname,txtEmail,txtUserName,namCreator,txtworkflowgroup,txtworkflowstatus,txtWorkflowAbstract,txtWorkflowSummary,txtworkflowhistory,txtspacename,txtprocessname,_subject,_description,_name,_projectnumber,_projectname,_ordernumber,_contractnumber,datDueDate,txtcommentlog,htmldescription,htmldocumentation,dms,dms_names,invoice.number.stripped,_childitems,$file.names,_VENDOR_NAME,dbtr.number,cdtr.number,invoice.positions
|
||||
index.fields=txtsearchstring,txtSubject,txtname,txtEmail,txtUserName,namCreator,txtworkflowgroup,txtworkflowstatus,txtWorkflowAbstract,txtWorkflowSummary,txtworkflowhistory,txtspacename,txtprocessname,_subject,_description,_name,_projectnumber,_projectname,_ordernumber,_contractnumber,datDueDate,txtcommentlog,htmldescription,htmldocumentation,dms,dms_names,invoice.number.stripped,_childitems,$file.names,_VENDOR_NAME,dbtr.number,cdtr.number,invoice.positions,invoice.atc.number
|
||||
index.fields.analyze=txtUsername
|
||||
index.fields.noanalyze=type,$UniqueIDRef,$created,$modified,$ModelVersion,$participants,namCreator,$ProcessID,datDate,txtWorkflowGroup,txtemail, datdate, datfrom, datto, numsequencenumber,sequencenumber,dms_count,invoice.number,invoice.number.stripped,invoice.date,invoice.duedate,taxonomy.verteilung.stop,taxonomy.sachpruefung.stop,taxonomy.verteilung.start,taxonomy.sachpruefung.start,taxonomy.buchhaltung.start,taxonomy.buchhaltung.stop,dbtr.number,cdtr.number,payment.date,invoice.total,invoice.currency,invoice.positions,$lasteventdate,payment.type,cdtr.name,document.company
|
||||
index.fields.noanalyze=type,$UniqueIDRef,$created,$modified,$ModelVersion,$participants,namCreator,$ProcessID,datDate,txtWorkflowGroup,txtemail, datdate, datfrom, datto, numsequencenumber,sequencenumber,dms_count,invoice.number,invoice.number.stripped,invoice.date,invoice.duedate,taxonomy.verteilung.stop,taxonomy.sachpruefung.stop,taxonomy.verteilung.start,taxonomy.sachpruefung.start,taxonomy.buchhaltung.start,taxonomy.buchhaltung.stop,dbtr.number,cdtr.number,payment.date,invoice.total,invoice.currency,invoice.positions,$lasteventdate,payment.type,cdtr.name,document.company,invoice.atc.number
|
||||
index.fields.store=process.name,txtProcessName,txtWorkflowImageURL,payment.date,invoice.number,invoice.date,invoice.duedate
|
||||
index.fields.category=space.name,space.ref,taxonomy.verteilung.stop.by,taxonomy.sachpruefung.stop.by,taxonomy.buchhaltung.stop.by
|
||||
office.search.noanalyze=invoice.number,invoice.number.stripped,invoice.positions
|
||||
|
|
|
|||
|
|
@ -0,0 +1,51 @@
|
|||
<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">
|
||||
|
||||
<h:panelGroup layout="block" styleClass="imixs-form-section" id="steuerlist-table" binding="#{steuerListContainer}">
|
||||
|
||||
<table style="width: 100%; margin: 5px;" class="imixsdatatable ">
|
||||
<tr>
|
||||
<th style="">Positionsnummer</th>
|
||||
<th style="">Art</th>
|
||||
<th style="">Steuer</th>
|
||||
<th style="">Betrag</th>
|
||||
</tr>
|
||||
|
||||
<ui:param name="rows" value="#{steuerListController.getRows()}"></ui:param>
|
||||
<ui:repeat value="#{rows}" var="row">
|
||||
<tr>
|
||||
<td>
|
||||
#{row.item['filenumber']}
|
||||
</td>
|
||||
<td style="text-align: center;">
|
||||
#{row.item['activity.type']}
|
||||
</td>
|
||||
<td>
|
||||
#{row.item['tax.code']}
|
||||
</td>
|
||||
|
||||
|
||||
<td style="text-align: right;">
|
||||
<h:outputText value="#{row.item['amount']}">
|
||||
<f:convertNumber minFractionDigits="2" locale="de" />
|
||||
</h:outputText>
|
||||
<h:outputText value=" #{workflowController.workitem.item['invoice.currency']}" />
|
||||
</td>
|
||||
|
||||
|
||||
</tr>
|
||||
</ui:repeat>
|
||||
|
||||
|
||||
</table>
|
||||
|
||||
|
||||
</h:panelGroup>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</ui:composition>
|
||||
|
|
@ -0,0 +1,50 @@
|
|||
<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">
|
||||
|
||||
<!-- Zeigt alle verknüpften Rechnungen an -->
|
||||
|
||||
|
||||
<h:panelGroup layout="block" styleClass="imixs-form-section" id="paymentlist">
|
||||
|
||||
<table class="imixsdatatable ">
|
||||
|
||||
|
||||
<tr>
|
||||
<th style="">Rechnung</th>
|
||||
<th style="width: 100px;">Status</th>
|
||||
<th style="">#{message.modified}</th>
|
||||
</tr>
|
||||
|
||||
<ui:param name="invoices"
|
||||
value="#{workitemLinkController.getReferences('$modelversion:rechnungsausgang*')}"></ui:param>
|
||||
<ui:repeat var="invoice_stub" value="#{invoices}">
|
||||
<ui:param name="invoice" value="#{steuerListController.loadInvoice(invoice_stub.getUniqueID())}">
|
||||
</ui:param>
|
||||
|
||||
<tr>
|
||||
<td>
|
||||
<h:link outcome="/pages/workitems/workitem">
|
||||
#{invoice.item['$workflowsummary']}
|
||||
<f:param name="id" value="#{invoice.item['$uniqueid']}" />
|
||||
</h:link>
|
||||
</td>
|
||||
<td>#{invoice.item['$workflowstatus']}</td>
|
||||
|
||||
<td>
|
||||
<h:outputText value="#{invoice.item['$lastEventDate']}">
|
||||
<f:convertDateTime pattern="#{message.datePatternShort}" timeZone="#{message.timeZone}" />
|
||||
</h:outputText> #{message.by} #{userController.getUserName(invoice.item['$editor'])}
|
||||
</td>
|
||||
</tr>
|
||||
</ui:repeat>
|
||||
|
||||
|
||||
</table>
|
||||
</h:panelGroup>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</ui:composition>
|
||||
|
|
@ -1,97 +0,0 @@
|
|||
<ui:composition xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets"
|
||||
xmlns:f="http://java.sun.com/jsf/core" xmlns:c="http://java.sun.com/jsp/jstl/core"
|
||||
xmlns:h="http://java.sun.com/jsf/html" xmlns:i="http://java.sun.com/jsf/composite/imixs"
|
||||
xmlns:marty="http://java.sun.com/jsf/composite/marty">
|
||||
|
||||
|
||||
<!-- Shows the op liste fo rthe current dbtr.number -->
|
||||
|
||||
|
||||
<h:commandScript name="calculateOpSummary" execute="invoiceRefHolder_ID" render="opcalculater_id" />
|
||||
|
||||
<h:panelGroup layout="block" styleClass="imixs-form-section" id="oplist-table" binding="#{opListContainer}">
|
||||
|
||||
|
||||
<h:selectOneRadio value="#{opListController.currencyFilter}" style="float:right;">
|
||||
<f:selectItem itemLabel="Alle" itemValue="-" />
|
||||
<f:selectItem itemLabel="EUR" itemValue="EUR" />
|
||||
<f:selectItem itemLabel="USD" itemValue="USD" />
|
||||
<f:ajax render="oplist-table" />
|
||||
</h:selectOneRadio>
|
||||
|
||||
|
||||
<table style="width: 100%; margin: 5px;">
|
||||
<tr>
|
||||
<th style="text-align: left;">Positionsnummer</th>
|
||||
<th style="text-align: left;">ATC-Nummer</th>
|
||||
|
||||
<th style="text-align: left;">Anmelder</th>
|
||||
<th style="text-align: left;">ZOLL (ER)</th>
|
||||
<th style="text-align: left;">EUST (ER)</th>
|
||||
<th style="text-align: right;">Fällig wann</th>
|
||||
<th style="width: 40px;">Eingangsrechnung</th>
|
||||
<th style="width: 100px;">Status</th>
|
||||
|
||||
</tr>
|
||||
<!--
|
||||
|
||||
.setItemValue("invoice.text", "LA-HOL-2401-002")
|
||||
.setItemValue("invoice.atc", "ATC400058750120242452")
|
||||
.setItemValue("dbtr.name", "D18317 Big Belly Solar GmbH")
|
||||
.setItemValue("invoice.ZOLL", 18.45)
|
||||
.setItemValue("invoice.EUST", 0)
|
||||
.setItemValue("invoice.number", ""));
|
||||
-->
|
||||
<ui:param name="invoices" value="#{zollListController.getInvoices()}"></ui:param>
|
||||
<ui:repeat value="#{invoices}" var="invoice">
|
||||
<tr>
|
||||
<td>
|
||||
#{invoice.item['invoice.text']}
|
||||
</td>
|
||||
|
||||
<td>
|
||||
#{invoice.item['invoice.atc']}
|
||||
</td>
|
||||
|
||||
<td>
|
||||
#{invoice.item['dbtr.name']}
|
||||
</td>
|
||||
|
||||
<td>
|
||||
#{invoice.item['invoice.zoll']}
|
||||
</td>
|
||||
|
||||
<td>
|
||||
#{invoice.item['invoice.eust']}
|
||||
</td>
|
||||
|
||||
<td>
|
||||
#{invoice.item['invoice.number']}
|
||||
</td>
|
||||
|
||||
|
||||
|
||||
|
||||
</tr>
|
||||
</ui:repeat>
|
||||
|
||||
<tr style="border-top: 1px solid #ccc;">
|
||||
<td />
|
||||
<td />
|
||||
<td />
|
||||
<td />
|
||||
<td><strong>Summary</strong></td>
|
||||
|
||||
<!-- Invoice total -->
|
||||
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
|
||||
</h:panelGroup>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</ui:composition>
|
||||
|
|
@ -0,0 +1,116 @@
|
|||
package com.alexanderlogistics.xml;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertNotNull;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
|
||||
import javax.xml.transform.TransformerException;
|
||||
import javax.xml.xpath.XPathExpressionException;
|
||||
|
||||
import org.imixs.workflow.ItemCollection;
|
||||
import org.imixs.workflow.engine.DocumentService;
|
||||
import org.imixs.workflow.exceptions.AccessDeniedException;
|
||||
import org.imixs.workflow.exceptions.ModelException;
|
||||
import org.imixs.workflow.exceptions.PluginException;
|
||||
import org.imixs.workflow.exceptions.ProcessingErrorException;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.mockito.InjectMocks;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.Mockito;
|
||||
import org.mockito.Spy;
|
||||
import org.mockito.junit.MockitoJUnitRunner;
|
||||
|
||||
import com.alexanderlogistics.InvoiceUtil;
|
||||
import com.alexanderlogistics.KreditorDebitorService;
|
||||
import com.alexanderlogistics.mahnlauf.MahnlaufService;
|
||||
|
||||
/**
|
||||
* Testet den Import Vorgang anhand einer Cargosoft XML Datei
|
||||
*
|
||||
*
|
||||
*
|
||||
* @author rsoika
|
||||
*/
|
||||
@RunWith(MockitoJUnitRunner.class)
|
||||
public class EAkteImportTester {
|
||||
|
||||
@Spy
|
||||
@InjectMocks
|
||||
private CargosoftXMLEAkteImportService service;
|
||||
|
||||
@Mock
|
||||
private DocumentService documentService;
|
||||
|
||||
@Mock
|
||||
private KreditorDebitorService kreditorDebitorService;
|
||||
|
||||
@Mock
|
||||
private MahnlaufService mahnlaufService;
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
// Mock protected Methode 'alreadyImported' -> always false
|
||||
Mockito.when(service.alreadyImported(Mockito.anyString())).thenReturn(false);
|
||||
}
|
||||
|
||||
/**
|
||||
* Ein Einfacher test
|
||||
*
|
||||
* @throws TransformerException
|
||||
* @throws XPathExpressionException
|
||||
* @throws ModelException
|
||||
* @throws PluginException
|
||||
* @throws ProcessingErrorException
|
||||
* @throws AccessDeniedException
|
||||
*
|
||||
* @throws Exception
|
||||
*/
|
||||
@Test
|
||||
public void testEAkteBasic() throws Exception {
|
||||
|
||||
ItemCollection source = new ItemCollection();
|
||||
String fileName = "Abgabenbescheid-IM-GCA-2408-116N-001-ATC400012650820242452-_20240806164256864_DEBUG.xml";
|
||||
byte[] xmlContent = readTestFile("cargosoft/" + fileName);
|
||||
assertNotNull(xmlContent);
|
||||
|
||||
// Act
|
||||
ItemCollection result = service.createWorkitem(source, fileName, xmlContent, new HashMap<>());
|
||||
|
||||
// Assert
|
||||
assertNotNull(result);
|
||||
assertEquals("001", result.getItemValueString("mandant.id"));
|
||||
|
||||
// test Rows
|
||||
List<ItemCollection> rows = InvoiceUtil.explodeChildList(result);
|
||||
assertNotNull(rows);
|
||||
assertEquals(2, rows.size());
|
||||
ItemCollection row1 = rows.get(0);
|
||||
ItemCollection row2 = rows.get(1);
|
||||
assertEquals("LA-ZEL-2403-004", row1.getItemValueString("filenumber"));
|
||||
assertEquals("LA-ZEL-2403-00", row2.getItemValueString("filenumber"));
|
||||
assertEquals("ZOLL", row1.getItemValueString("activity.type"));
|
||||
assertEquals("EUST", row2.getItemValueString("activity.type"));
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Hilfsmethode zum einlesen einer xml test datei
|
||||
*
|
||||
* @return
|
||||
* @throws IOException
|
||||
*/
|
||||
private byte[] readTestFile(String filename) throws IOException {
|
||||
// Load the file from the resources folder
|
||||
ClassLoader classLoader = getClass().getClassLoader();
|
||||
InputStream inputStream = classLoader.getResourceAsStream(filename);
|
||||
byte[] data = inputStream.readAllBytes();
|
||||
inputStream.close();
|
||||
return data;
|
||||
}
|
||||
}
|
||||
|
|
@ -119,6 +119,7 @@ public class InvoiceImportTester {
|
|||
assertNotNull(result);
|
||||
assertEquals("001", result.getItemValueString("mandant.id"));
|
||||
assertEquals("ATC400012650820242452", result.getItemValueString("invoice.atc.number"));
|
||||
assertEquals(3752.95, result.getItemValueDouble("invoice.total"), 0.0);
|
||||
|
||||
// test Rows
|
||||
List<ItemCollection> rows = InvoiceUtil.explodeChildList(result);
|
||||
|
|
@ -129,16 +130,18 @@ public class InvoiceImportTester {
|
|||
assertEquals("EUST", row1.getItemValueString("category"));
|
||||
assertEquals("EUST", row1.getItemValueString("BillingCode"));
|
||||
// test BillingText
|
||||
|
||||
List<String> billingTextList = row1.getItemValue("BillingText");
|
||||
assertEquals(2, billingTextList.size());
|
||||
// test ATC Number
|
||||
assertEquals("ATC400012650820242452", row1.getItemValueString("atc.number"));
|
||||
// Umsatz
|
||||
assertEquals(3591.34, row1.getItemValueDouble("datev.umsatz"), 0.0);
|
||||
|
||||
ItemCollection row2 = rows.get(1);
|
||||
assertEquals("IM-GCA-2408-116", row2.getItemValueString("datev.text"));
|
||||
assertEquals("SONST", row2.getItemValueString("category"));
|
||||
|
||||
// Umsatz
|
||||
assertEquals(161.61, row2.getItemValueDouble("datev.umsatz"), 0.0);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -151,13 +154,7 @@ public class InvoiceImportTester {
|
|||
// Load the file from the resources folder
|
||||
ClassLoader classLoader = getClass().getClassLoader();
|
||||
InputStream inputStream = classLoader.getResourceAsStream(filename);
|
||||
|
||||
// Convert the InputStream to a String
|
||||
// String xmlContent = new String(inputStream.readAllBytes(),
|
||||
// StandardCharsets.UTF_8);
|
||||
|
||||
byte[] data = inputStream.readAllBytes();
|
||||
// Optional: Close the InputStream
|
||||
inputStream.close();
|
||||
return data;
|
||||
}
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
|
|
@ -0,0 +1,61 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<CargoSoftEFile xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:noNamespaceSchemaLocation="https://xsd.cargosoft.de/CargoSoftEFile/CargoSoftEFile-2023.2.xsd">
|
||||
<Message>
|
||||
<SenderID>CARGOSOFT</SenderID>
|
||||
<ReceiverID>ATLSTB</ReceiverID>
|
||||
<MessageID>20240806164256864</MessageID>
|
||||
<MessageDate>
|
||||
<DateTime>2024-08-06T16:42:56</DateTime>
|
||||
</MessageDate>
|
||||
<Provider>
|
||||
<CargoSoftDatabaseVersion>2023.2g</CargoSoftDatabaseVersion>
|
||||
<CargoServiceVersion>${build.version.number}</CargoServiceVersion>
|
||||
</Provider>
|
||||
</Message>
|
||||
<EFile id="2212599">
|
||||
<Description>
|
||||
<DocDate>
|
||||
<DateTime>2024-08-06T09:55:54</DateTime>
|
||||
</DocDate>
|
||||
<DocType>ATLAS</DocType>
|
||||
<Title>STEUERBESCHEID NEU</Title>
|
||||
</Description>
|
||||
<Attachments>
|
||||
<Attachment id="2274901">
|
||||
<Version>1</Version>
|
||||
<Filename>Abgabenbescheid-IM-GCA-2408-116N-001-ATC400012650820242452.pdf</Filename>
|
||||
<MimeType>application/pdf</MimeType>
|
||||
<FileDate>
|
||||
<DateTime>2024-08-07T02:13:27</DateTime>
|
||||
</FileDate>
|
||||
<Md5>11FC8B85115554F79215A3138FDBF7C</Md5>
|
||||
<FileSize>78362</FileSize>
|
||||
|
||||
</Attachment>
|
||||
</Attachments>
|
||||
<References>
|
||||
<Reference type="client">001</Reference>
|
||||
<Reference type="cs_voucher_number">254038</Reference>
|
||||
<Reference type="cs_voucher_type">LR</Reference>
|
||||
<Reference type="cs_address_number" />
|
||||
<Reference type="currency">EUR</Reference>
|
||||
<Reference type="voucherdate" />
|
||||
<Reference type="total_net_amount">3591.34</Reference>
|
||||
<Reference type="total_tax_amount">161.34</Reference>
|
||||
<Reference type="currency_rate" />
|
||||
<Reference type="reference">ATC400012650820242452</Reference>
|
||||
<Reference type="booking_period">202408</Reference>
|
||||
<Reference type="booking_date">20240806000000</Reference>
|
||||
<Reference type="booking_text">ATLAS Steuerbescheid</Reference>
|
||||
<Reference type="row_1_activity_type">ZOLL</Reference>
|
||||
<Reference type="row_1_amount">3591.340</Reference>
|
||||
<Reference type="row_1_tax_code">0</Reference>
|
||||
<Reference type="row_1_cs_filenumber">LA-ZEL-2403-004</Reference>
|
||||
<Reference type="row_2_activity_type">EUST</Reference>
|
||||
<Reference type="row_2_amount">91.340</Reference>
|
||||
<Reference type="row_2_tax_code">0</Reference>
|
||||
<Reference type="row_2_cs_filenumber">LA-ZEL-2403-00</Reference>
|
||||
</References>
|
||||
</EFile>
|
||||
</CargoSoftEFile>
|
||||
4101
workflow/rechnungsausgang-de-1.0.10.bpmn
Normal file
4101
workflow/rechnungsausgang-de-1.0.10.bpmn
Normal file
File diff suppressed because it is too large
Load diff
|
|
@ -28,6 +28,7 @@
|
|||
<imixs:value><![CDATA[org.imixs.workflow.engine.plugins.ApplicationPlugin]]></imixs:value>
|
||||
<imixs:value><![CDATA[org.imixs.marty.plugins.CommentPlugin]]></imixs:value>
|
||||
<imixs:value><![CDATA[org.imixs.marty.profile.MailPlugin]]></imixs:value>
|
||||
<imixs:value><![CDATA[com.alexanderlogistics.SteuerbescheidPlugin]]></imixs:value>
|
||||
</imixs:item>
|
||||
<open-bpmn:auto-align>true</open-bpmn:auto-align>
|
||||
</bpmn2:extensionElements>
|
||||
|
|
@ -88,54 +89,21 @@ th { font-weight: bold;}
|
|||
<bpmn2:flowNodeRef>IntermediateCatchEvent_3</bpmn2:flowNodeRef>
|
||||
<bpmn2:flowNodeRef>Task_4</bpmn2:flowNodeRef>
|
||||
<bpmn2:flowNodeRef>EndEvent_3</bpmn2:flowNodeRef>
|
||||
<bpmn2:flowNodeRef>Task_2</bpmn2:flowNodeRef>
|
||||
<bpmn2:flowNodeRef>IntermediateCatchEvent_2</bpmn2:flowNodeRef>
|
||||
<bpmn2:flowNodeRef>IntermediateCatchEvent_8</bpmn2:flowNodeRef>
|
||||
<bpmn2:documentation id="documentation_CzcdHw"/>
|
||||
<bpmn2:flowNodeRef>DataObject_2</bpmn2:flowNodeRef>
|
||||
<bpmn2:flowNodeRef>event_XJbC5A</bpmn2:flowNodeRef>
|
||||
<bpmn2:flowNodeRef>textAnnotation_HwSKqQ</bpmn2:flowNodeRef>
|
||||
<bpmn2:flowNodeRef>event_9fS4uw</bpmn2:flowNodeRef>
|
||||
<bpmn2:flowNodeRef>event_mPDOzA</bpmn2:flowNodeRef>
|
||||
<bpmn2:flowNodeRef>gateway_u86UTw</bpmn2:flowNodeRef>
|
||||
<bpmn2:flowNodeRef>gateway_5riVig</bpmn2:flowNodeRef>
|
||||
<bpmn2:flowNodeRef>gateway_mga6sg</bpmn2:flowNodeRef>
|
||||
</bpmn2:lane>
|
||||
</bpmn2:laneSet>
|
||||
<bpmn2:startEvent id="StartEvent_1" name="Start">
|
||||
<bpmn2:documentation id="documentation_VE46fA"/>
|
||||
<bpmn2:outgoing>sequenceFlow_M5IK7w</bpmn2:outgoing>
|
||||
</bpmn2:startEvent>
|
||||
<bpmn2:task id="Task_2" imixs:processid="1100" name="Erledigt">
|
||||
<bpmn2:extensionElements>
|
||||
<imixs:item name="txtworkflowsummary" type="xs:string">
|
||||
<imixs:value><![CDATA[<itemvalue>invoice.number</itemvalue> <itemvalue>dbtr.number</itemvalue> <itemvalue>dbtr.name</itemvalue> (<itemvalue>invoice.currency</itemvalue> <itemvalue format="#,###,##0.00" locale="de_DE">invoice.total</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:value><![CDATA[process.manager]]></imixs:value>
|
||||
</imixs:item>
|
||||
<imixs:item name="keyaddwritefields" type="xs:string"/>
|
||||
<imixs:item name="keyaddreadfields" type="xs:string"/>
|
||||
<imixs:item name="txteditorid" type="xs:string">
|
||||
<imixs:value><![CDATA[form_basic_read]]></imixs:value>
|
||||
</imixs:item>
|
||||
<imixs:item name="txttype" type="xs:string">
|
||||
<imixs:value><![CDATA[workitem]]></imixs:value>
|
||||
</imixs:item>
|
||||
<imixs:item name="namaddreadaccess" type="xs:string">
|
||||
<imixs:value><![CDATA[{process:?:member}]]></imixs:value>
|
||||
</imixs:item>
|
||||
<imixs:item name="namaddwriteaccess" type="xs:string">
|
||||
<imixs:value><![CDATA[{process:?:member}]]></imixs:value>
|
||||
</imixs:item>
|
||||
<imixs:item name="txtimageurl" type="xs:string">
|
||||
<imixs:value><![CDATA[typcn-briefcase||||typcn-tick,imixs-success]]></imixs:value>
|
||||
</imixs:item>
|
||||
</bpmn2:extensionElements>
|
||||
<bpmn2:documentation id="Documentation_4"><![CDATA[<textblock><itemvalue>$workflowgroup</itemvalue> - <itemvalue>$workflowstatus</itemvalue></textblock>]]></bpmn2:documentation>
|
||||
<bpmn2:incoming>SequenceFlow_1</bpmn2:incoming>
|
||||
<bpmn2:outgoing>SequenceFlow_17</bpmn2:outgoing>
|
||||
<bpmn2:incoming>sequenceFlow_l0egag</bpmn2:incoming>
|
||||
</bpmn2:task>
|
||||
<bpmn2:endEvent id="EndEvent_3" name="End">
|
||||
<bpmn2:incoming>SequenceFlow_19</bpmn2:incoming>
|
||||
<bpmn2:documentation id="documentation_1dAjDA"/>
|
||||
|
|
@ -143,7 +111,7 @@ th { font-weight: bold;}
|
|||
<bpmn2:task id="Task_1" imixs:processid="1000" name="Offen">
|
||||
<bpmn2:extensionElements>
|
||||
<imixs:item name="txtworkflowsummary" type="xs:string">
|
||||
<imixs:value><![CDATA[<itemvalue>invoice.number</itemvalue> <itemvalue>dbtr.number</itemvalue> <itemvalue>dbtr.name</itemvalue> (<itemvalue>invoice.currency</itemvalue> <itemvalue format="#,###,##0.00" locale="de_DE">invoice.total</itemvalue>) ]]></imixs:value>
|
||||
<imixs:value><![CDATA[<itemvalue>invoice.number</itemvalue> <itemvalue>invoice.booking_text</itemvalue> <itemvalue>invoice.atc.number</itemvalue>]]></imixs:value>
|
||||
</imixs:item>
|
||||
<imixs:item name="txteditorid" type="xs:string">
|
||||
<imixs:value><![CDATA[alexander/form_basic]]></imixs:value>
|
||||
|
|
@ -176,13 +144,10 @@ th { font-weight: bold;}
|
|||
<bpmn2:documentation id="Documentation_3"><![CDATA[<textblock><itemvalue>$workflowgroup</itemvalue> - <itemvalue>$workflowstatus</itemvalue></textblock>]]></bpmn2:documentation>
|
||||
<bpmn2:outgoing>sequenceFlow_EzmiPA</bpmn2:outgoing>
|
||||
<bpmn2:incoming>sequenceFlow_rbVgQA</bpmn2:incoming>
|
||||
<bpmn2:incoming>sequenceFlow_GN53Kg</bpmn2:incoming>
|
||||
<bpmn2:incoming>sequenceFlow_J0GjVg</bpmn2:incoming>
|
||||
</bpmn2:task>
|
||||
<bpmn2:task id="Task_4" imixs:processid="1900" name="Abgeschlossen">
|
||||
<bpmn2:extensionElements>
|
||||
<imixs:item name="txtworkflowsummary" type="xs:string">
|
||||
<imixs:value><![CDATA[<itemvalue>invoice.number</itemvalue> <itemvalue>dbtr.number</itemvalue> <itemvalue>dbtr.name</itemvalue> (<itemvalue>invoice.currency</itemvalue> <itemvalue format="#,###,##0.00" locale="de_DE">invoice.total</itemvalue>) ]]></imixs:value>
|
||||
</imixs:item>
|
||||
<imixs:item name="keyupdateacl" type="xs:boolean">
|
||||
<imixs:value>true</imixs:value>
|
||||
</imixs:item>
|
||||
|
|
@ -201,45 +166,17 @@ th { font-weight: bold;}
|
|||
<imixs:item name="namaddreadaccess" type="xs:string">
|
||||
<imixs:value><![CDATA[{process:?:member}]]></imixs:value>
|
||||
</imixs:item>
|
||||
<imixs:item name="txtworkflowsummary" type="xs:string">
|
||||
<imixs:value><![CDATA[<itemvalue>invoice.number</itemvalue> <itemvalue>invoice.booking_text</itemvalue> <itemvalue>invoice.atc.number</itemvalue>]]></imixs:value>
|
||||
</imixs:item>
|
||||
</bpmn2:extensionElements>
|
||||
<bpmn2:documentation id="Documentation_16"><![CDATA[<textblock><itemvalue>$workflowgroup</itemvalue> - <itemvalue>$workflowstatus</itemvalue></textblock>]]></bpmn2:documentation>
|
||||
<bpmn2:incoming>SequenceFlow_18</bpmn2:incoming>
|
||||
<bpmn2:outgoing>SequenceFlow_19</bpmn2:outgoing>
|
||||
<bpmn2:incoming>sequenceFlow_oRy3qw</bpmn2:incoming>
|
||||
</bpmn2:task>
|
||||
<bpmn2:intermediateCatchEvent id="IntermediateCatchEvent_8" imixs:activityid="50" name="Abschließen">
|
||||
<bpmn2:extensionElements>
|
||||
<imixs:item name="rtfresultlog" type="xs:string">
|
||||
<imixs:value><![CDATA[Zoll-Liste abgeschlossen]]></imixs:value>
|
||||
</imixs:item>
|
||||
<imixs:item name="txtactivityresult" type="CDATA">
|
||||
<imixs:value><![CDATA[<item name="action">home</item>]]></imixs:value>
|
||||
</imixs:item>
|
||||
</bpmn2:extensionElements>
|
||||
<bpmn2:incoming>SequenceFlow_17</bpmn2:incoming>
|
||||
<bpmn2:outgoing>SequenceFlow_18</bpmn2:outgoing>
|
||||
<bpmn2:documentation id="documentation_yZdzqg"/>
|
||||
</bpmn2:intermediateCatchEvent>
|
||||
<bpmn2:sequenceFlow id="SequenceFlow_17" sourceRef="Task_2" targetRef="IntermediateCatchEvent_8">
|
||||
<bpmn2:documentation id="documentation_Slk2fA"/>
|
||||
</bpmn2:sequenceFlow>
|
||||
<bpmn2:sequenceFlow id="SequenceFlow_18" sourceRef="IntermediateCatchEvent_8" targetRef="Task_4">
|
||||
<bpmn2:documentation id="documentation_lonRSg"/>
|
||||
</bpmn2:sequenceFlow>
|
||||
<bpmn2:sequenceFlow id="SequenceFlow_19" sourceRef="Task_4" targetRef="EndEvent_3">
|
||||
<bpmn2:documentation id="documentation_nsa2IQ"/>
|
||||
</bpmn2:sequenceFlow>
|
||||
<bpmn2:intermediateCatchEvent id="IntermediateCatchEvent_2" imixs:activityid="10" name="Speichern">
|
||||
<bpmn2:extensionElements>
|
||||
<imixs:item name="rtfresultlog" type="CDATA">
|
||||
<imixs:value><![CDATA[Aktualisiert]]></imixs:value>
|
||||
</imixs:item>
|
||||
</bpmn2:extensionElements>
|
||||
<bpmn2:outgoing>SequenceFlow_1</bpmn2:outgoing>
|
||||
<bpmn2:documentation id="documentation_2oZTGQ"/>
|
||||
</bpmn2:intermediateCatchEvent>
|
||||
<bpmn2:sequenceFlow id="SequenceFlow_1" sourceRef="IntermediateCatchEvent_2" targetRef="Task_2">
|
||||
<bpmn2:documentation id="documentation_ZiY0pQ"/>
|
||||
</bpmn2:sequenceFlow>
|
||||
<bpmn2:intermediateCatchEvent id="IntermediateCatchEvent_3" imixs:activityid="900" name="[create]">
|
||||
<bpmn2:extensionElements>
|
||||
<imixs:item name="txtmailsubject" type="xs:string">
|
||||
|
|
@ -268,22 +205,33 @@ th { font-weight: bold;}
|
|||
<bpmn2:documentation id="Documentation_5"><![CDATA[<?xml version="1.0"?>
|
||||
<imixs-form>
|
||||
<imixs-form-section columns="3" label="Rechnungsdaten">
|
||||
<item name="invoice.text" type="text" label="Text:" readonly="true"/>
|
||||
<item name="dbtr.name" type="text" label="Debitor:" readonly="true"/>
|
||||
<item name="dbtr.number" type="text" required="true" label="Debitor-Nummer:" readonly="true"/>
|
||||
<item name="invoice.booking_text" type="text" label="Text:" readonly="true"/>
|
||||
<item name="cdtr.name" type="text" label="Kreditor:" readonly="true"/>
|
||||
<item name="cdtr.number" type="text" label="Kreditor-Nummer:" readonly="true"/>
|
||||
</imixs-form-section>
|
||||
|
||||
<imixs-form-section columns="3" label="">
|
||||
<item name="invoice.number" type="text" label="Rechnungsnummer:" readonly="true" />
|
||||
<item name="invoice.date" type="date" label="Rechnungsdatum:" readonly="true" />
|
||||
<item name="invoice.duedate" type="date" label="Fälligkeit:" readonly="true"/>
|
||||
<item name="invoice.atc.number" type="date" label="ATC Nr.:" readonly="true" />
|
||||
<item name="invoice.date" type="date" label="Beleg Datum:" readonly="true"/>
|
||||
<item name="invoice.booking_date" type="date" label="Buchungs Datum:" readonly="true"/>
|
||||
</imixs-form-section>
|
||||
|
||||
|
||||
<imixs-form-section columns="3" label="">
|
||||
<item name="invoice.currency" type="text" label="Währung:" readonly="true" />
|
||||
<item name="invoice.total.net" type="currency" label="Total Net Amount:" readonly="true" />
|
||||
<item name="invoice.total.tax" type="currency" label="Total Tax Amount:" readonly="true"/>
|
||||
<item name="invoice.rate" type="text" label="Kurs:" readonly="true"/>
|
||||
</imixs-form-section>
|
||||
|
||||
<imixs-form-section>
|
||||
<item name="" type="custom" path="alexander/spaceref" label="Bereich:" />
|
||||
</imixs-form-section>
|
||||
|
||||
<imixs-form-section label="Positionen" path="alexander/section_datevbuchung" />
|
||||
<imixs-form-section label="Positionen" path="alexander/section_steuerbescheid_details" />
|
||||
|
||||
<imixs-form-section label="Ausgangsrechnungen" path="alexander/section_steuerbescheid_invoices" />
|
||||
</imixs-form>]]></bpmn2:documentation>
|
||||
<bpmn2:dataState id="DataState_2"/>
|
||||
</bpmn2:dataObject>
|
||||
|
|
@ -300,15 +248,13 @@ th { font-weight: bold;}
|
|||
</imixs:item>
|
||||
</bpmn2:extensionElements>
|
||||
<bpmn2:documentation id="documentation_vQEymA"/>
|
||||
<bpmn2:incoming>sequenceFlow_EzmiPA</bpmn2:incoming>
|
||||
<bpmn2:outgoing>sequenceFlow_l0egag</bpmn2:outgoing>
|
||||
<bpmn2:incoming>sequenceFlow_DzOb8A</bpmn2:incoming>
|
||||
<bpmn2:incoming>sequenceFlow_hLkSLA</bpmn2:incoming>
|
||||
<bpmn2:outgoing>sequenceFlow_oRy3qw</bpmn2:outgoing>
|
||||
</bpmn2:intermediateCatchEvent>
|
||||
<bpmn2:sequenceFlow id="sequenceFlow_EzmiPA" sourceRef="Task_1" targetRef="event_XJbC5A">
|
||||
<bpmn2:sequenceFlow id="sequenceFlow_EzmiPA" sourceRef="Task_1" targetRef="gateway_5riVig">
|
||||
<bpmn2:documentation id="documentation_HhV7dA"/>
|
||||
</bpmn2:sequenceFlow>
|
||||
<bpmn2:sequenceFlow id="sequenceFlow_l0egag" sourceRef="event_XJbC5A" targetRef="Task_2">
|
||||
<bpmn2:documentation id="documentation_Cv5oCQ"/>
|
||||
</bpmn2:sequenceFlow>
|
||||
<bpmn2:textAnnotation id="textAnnotation_HwSKqQ" textFormat="">
|
||||
<bpmn2:text id="text_wYoZbw"><![CDATA[Zollanmeldung / Steuerbescheid vom Zollamt
|
||||
Wird täglich über die DATEV OP-Liste importiert]]></bpmn2:text>
|
||||
|
|
@ -332,9 +278,75 @@ Wird täglich über die DATEV OP-Liste importiert]]></bpmn2:text>
|
|||
<bpmn2:association id="association_2r0omw" sourceRef="DataObject_2" targetRef="Task_4">
|
||||
<bpmn2:documentation id="documentation_6aRYjQ"/>
|
||||
</bpmn2:association>
|
||||
<bpmn2:sequenceFlow id="sequenceFlow_GN53Kg" sourceRef="IntermediateCatchEvent_3" targetRef="Task_1">
|
||||
<bpmn2:sequenceFlow id="sequenceFlow_GN53Kg" sourceRef="IntermediateCatchEvent_3" targetRef="gateway_mga6sg">
|
||||
<bpmn2:documentation id="documentation_G2kAIg"/>
|
||||
</bpmn2:sequenceFlow>
|
||||
<bpmn2:intermediateCatchEvent id="event_mPDOzA" imixs:activityid="90" name="[update]">
|
||||
<bpmn2:extensionElements>
|
||||
<imixs:item name="rtfresultlog" type="CDATA">
|
||||
<imixs:value><![CDATA[Aktualisiert]]></imixs:value>
|
||||
</imixs:item>
|
||||
<imixs:item name="keypublicresult" type="xs:string">
|
||||
<imixs:value><![CDATA[1]]></imixs:value>
|
||||
</imixs:item>
|
||||
<imixs:item name="keyscheduledactivity" type="xs:string">
|
||||
<imixs:value><![CDATA[1]]></imixs:value>
|
||||
</imixs:item>
|
||||
<imixs:item name="numactivitydelay" type="xs:string">
|
||||
<imixs:value><![CDATA[1]]></imixs:value>
|
||||
</imixs:item>
|
||||
<imixs:item name="keyscheduledbaseobject" type="xs:string">
|
||||
<imixs:value><![CDATA[1]]></imixs:value>
|
||||
</imixs:item>
|
||||
<imixs:item name="keyactivitydelayunit" type="xs:string">
|
||||
<imixs:value><![CDATA[2]]></imixs:value>
|
||||
</imixs:item>
|
||||
</bpmn2:extensionElements>
|
||||
<bpmn2:documentation id="documentation_gM58xw"/>
|
||||
<bpmn2:timerEventDefinition id="timerEventDefinition_eAHUHQ"/>
|
||||
<bpmn2:incoming>sequenceFlow_tpBldQ</bpmn2:incoming>
|
||||
<bpmn2:outgoing>sequenceFlow_lrR0DQ</bpmn2:outgoing>
|
||||
</bpmn2:intermediateCatchEvent>
|
||||
<bpmn2:exclusiveGateway default="sequenceFlow_KOaBSw" gatewayDirection="Diverging" id="gateway_u86UTw" name="vollständig abgerechnet?">
|
||||
<bpmn2:documentation id="documentation_vbNvdg"/>
|
||||
<bpmn2:incoming>sequenceFlow_lrR0DQ</bpmn2:incoming>
|
||||
<bpmn2:outgoing>sequenceFlow_KOaBSw</bpmn2:outgoing>
|
||||
<bpmn2:outgoing>sequenceFlow_hLkSLA</bpmn2:outgoing>
|
||||
</bpmn2:exclusiveGateway>
|
||||
<bpmn2:eventBasedGateway gatewayDirection="Diverging" id="gateway_5riVig" name="">
|
||||
<bpmn2:documentation id="documentation_JdIxzw"/>
|
||||
<bpmn2:incoming>sequenceFlow_EzmiPA</bpmn2:incoming>
|
||||
<bpmn2:outgoing>sequenceFlow_tpBldQ</bpmn2:outgoing>
|
||||
<bpmn2:outgoing>sequenceFlow_DzOb8A</bpmn2:outgoing>
|
||||
</bpmn2:eventBasedGateway>
|
||||
<bpmn2:sequenceFlow id="sequenceFlow_tpBldQ" sourceRef="gateway_5riVig" targetRef="event_mPDOzA">
|
||||
<bpmn2:documentation id="documentation_k1OXzw"/>
|
||||
</bpmn2:sequenceFlow>
|
||||
<bpmn2:sequenceFlow id="sequenceFlow_DzOb8A" sourceRef="gateway_5riVig" targetRef="event_XJbC5A">
|
||||
<bpmn2:documentation id="documentation_PIzh7A"/>
|
||||
</bpmn2:sequenceFlow>
|
||||
<bpmn2:sequenceFlow id="sequenceFlow_lrR0DQ" sourceRef="event_mPDOzA" targetRef="gateway_u86UTw">
|
||||
<bpmn2:documentation id="documentation_aEF9IQ"/>
|
||||
</bpmn2:sequenceFlow>
|
||||
<bpmn2:exclusiveGateway gatewayDirection="Diverging" id="gateway_mga6sg" name="">
|
||||
<bpmn2:documentation id="documentation_VaP40g"/>
|
||||
<bpmn2:incoming>sequenceFlow_GN53Kg</bpmn2:incoming>
|
||||
<bpmn2:outgoing>sequenceFlow_J0GjVg</bpmn2:outgoing>
|
||||
<bpmn2:incoming>sequenceFlow_KOaBSw</bpmn2:incoming>
|
||||
</bpmn2:exclusiveGateway>
|
||||
<bpmn2:sequenceFlow id="sequenceFlow_J0GjVg" sourceRef="gateway_mga6sg" targetRef="Task_1">
|
||||
<bpmn2:documentation id="documentation_hBvCbw"/>
|
||||
</bpmn2:sequenceFlow>
|
||||
<bpmn2:sequenceFlow id="sequenceFlow_KOaBSw" sourceRef="gateway_u86UTw" targetRef="gateway_mga6sg">
|
||||
<bpmn2:documentation id="documentation_grVRmA"/>
|
||||
</bpmn2:sequenceFlow>
|
||||
<bpmn2:sequenceFlow id="sequenceFlow_hLkSLA" name="saldo <= 0" sourceRef="gateway_u86UTw" targetRef="event_XJbC5A">
|
||||
<bpmn2:documentation id="documentation_5PQFXg"/>
|
||||
<bpmn2:conditionExpression id="formalExpression_0iO8Rw" xsi:type="bpmn2:tFormalExpression"><![CDATA[workitem.getItemValueDouble('invoice.saldo')<=0]]></bpmn2:conditionExpression>
|
||||
</bpmn2:sequenceFlow>
|
||||
<bpmn2:sequenceFlow id="sequenceFlow_oRy3qw" sourceRef="event_XJbC5A" targetRef="Task_4">
|
||||
<bpmn2:documentation id="documentation_mjwqGA"/>
|
||||
</bpmn2:sequenceFlow>
|
||||
</bpmn2:process>
|
||||
<bpmndi:BPMNDiagram id="BPMNDiagram_1" name="Default Process Diagram">
|
||||
<bpmndi:BPMNPlane bpmnElement="Collaboration_1" id="BPMNPlane_1">
|
||||
|
|
@ -345,23 +357,20 @@ Wird täglich über die DATEV OP-Liste importiert]]></bpmn2:text>
|
|||
<dc:Bounds height="520.0" width="1340.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="227.0" y="297.0"/>
|
||||
<dc:Bounds height="36.0" width="36.0" x="187.0" y="297.0"/>
|
||||
<bpmndi:BPMNLabel id="BPMNLabel_1" labelStyle="BPMNLabelStyle_1">
|
||||
<dc:Bounds height="20.0" width="100.0" x="197.5" y="337.0"/>
|
||||
<dc:Bounds height="20.0" width="100.0" x="157.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="410.0" y="290.0"/>
|
||||
<dc:Bounds height="50.0" width="110.0" x="510.0" y="290.0"/>
|
||||
</bpmndi:BPMNShape>
|
||||
<bpmndi:BPMNShape bpmnElement="EndEvent_3" id="BPMNShape_EndEvent_2">
|
||||
<dc:Bounds height="36.0" width="36.0" x="1297.0" y="297.0"/>
|
||||
<dc:Bounds height="36.0" width="36.0" x="1397.0" y="297.0"/>
|
||||
<bpmndi:BPMNLabel id="BPMNLabel_85" labelStyle="BPMNLabelStyle_1">
|
||||
<dc:Bounds height="20.0" width="100.0" x="1268.0" y="337.0"/>
|
||||
<dc:Bounds height="20.0" width="100.0" x="1368.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="800.0" y="290.0"/>
|
||||
</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">
|
||||
|
|
@ -375,99 +384,120 @@ Wird täglich über die DATEV OP-Liste importiert]]></bpmn2:text>
|
|||
</bpmndi:BPMNLabel>
|
||||
</bpmndi:BPMNShape>
|
||||
<bpmndi:BPMNShape bpmnElement="Task_4" id="BPMNShape_Task_4">
|
||||
<dc:Bounds height="50.0" width="110.0" x="1120.0" y="290.0"/>
|
||||
</bpmndi:BPMNShape>
|
||||
<bpmndi:BPMNShape bpmnElement="IntermediateCatchEvent_8" id="BPMNShape_IntermediateCatchEvent_8">
|
||||
<dc:Bounds height="36.0" width="36.0" x="987.0" y="297.0"/>
|
||||
<bpmndi:BPMNLabel id="BPMNLabel_31" labelStyle="BPMNLabelStyle_1">
|
||||
<dc:Bounds height="20.0" width="100.0" x="954.0" y="337.0"/>
|
||||
</bpmndi:BPMNLabel>
|
||||
</bpmndi:BPMNShape>
|
||||
<bpmndi:BPMNShape bpmnElement="IntermediateCatchEvent_2" id="BPMNShape_IntermediateCatchEvent_2">
|
||||
<dc:Bounds height="36.0" width="36.0" x="837.0" y="377.0"/>
|
||||
<bpmndi:BPMNLabel id="BPMNLabel_6" labelStyle="BPMNLabelStyle_1">
|
||||
<dc:Bounds height="20.0" width="100.0" x="805.0" y="416.0"/>
|
||||
</bpmndi:BPMNLabel>
|
||||
<dc:Bounds height="50.0" width="110.0" x="1220.0" y="290.0"/>
|
||||
</bpmndi:BPMNShape>
|
||||
<bpmndi:BPMNShape bpmnElement="IntermediateCatchEvent_3" id="BPMNShape_IntermediateCatchEvent_3">
|
||||
<dc:Bounds height="36.0" width="36.0" x="297.0" y="297.0"/>
|
||||
<dc:Bounds height="36.0" width="36.0" x="277.0" y="297.0"/>
|
||||
<bpmndi:BPMNLabel id="BPMNLabel_8" labelStyle="BPMNLabelStyle_1">
|
||||
<dc:Bounds height="20.0" width="100.0" x="271.5" y="340.0"/>
|
||||
<dc:Bounds height="20.0" width="100.0" x="240.5" y="339.0"/>
|
||||
</bpmndi:BPMNLabel>
|
||||
</bpmndi:BPMNShape>
|
||||
<bpmndi:BPMNShape bpmnElement="DataObject_2" id="BPMNShape_DataObject_2">
|
||||
<dc:Bounds height="50.0" width="35.0" x="740.0" y="500.0"/>
|
||||
<dc:Bounds height="50.0" width="35.0" x="860.0" y="170.0"/>
|
||||
<bpmndi:BPMNLabel id="BPMNLabel_12">
|
||||
<dc:Bounds height="20.0" width="100.0" x="708.0" y="550.0"/>
|
||||
<dc:Bounds height="20.0" width="100.0" x="828.0" y="220.0"/>
|
||||
</bpmndi:BPMNLabel>
|
||||
</bpmndi:BPMNShape>
|
||||
<bpmndi:BPMNEdge bpmnElement="SequenceFlow_17" id="BPMNEdge_SequenceFlow_17" sourceElement="BPMNShape_Task_2" targetElement="BPMNShape_IntermediateCatchEvent_8">
|
||||
<bpmndi:BPMNLabel id="BPMNLabel_36"/>
|
||||
<di:waypoint x="910.0" y="315.0"/>
|
||||
<di:waypoint x="987.0" y="315.0"/>
|
||||
</bpmndi:BPMNEdge>
|
||||
<bpmndi:BPMNEdge bpmnElement="SequenceFlow_18" id="BPMNEdge_SequenceFlow_18" sourceElement="BPMNShape_IntermediateCatchEvent_8" targetElement="BPMNShape_Task_4">
|
||||
<bpmndi:BPMNLabel id="BPMNLabel_38"/>
|
||||
<di:waypoint x="1023.0" y="315.0"/>
|
||||
<di:waypoint x="1120.0" y="315.0"/>
|
||||
</bpmndi:BPMNEdge>
|
||||
<bpmndi:BPMNEdge bpmnElement="SequenceFlow_19" id="BPMNEdge_SequenceFlow_19" sourceElement="BPMNShape_Task_4" targetElement="BPMNShape_EndEvent_2">
|
||||
<bpmndi:BPMNLabel id="BPMNLabel_39"/>
|
||||
<di:waypoint x="1230.0" y="315.0"/>
|
||||
<di:waypoint x="1297.0" y="315.0"/>
|
||||
</bpmndi:BPMNEdge>
|
||||
<bpmndi:BPMNEdge bpmnElement="SequenceFlow_1" id="BPMNEdge_SequenceFlow_1" sourceElement="BPMNShape_IntermediateCatchEvent_2" targetElement="BPMNShape_Task_2">
|
||||
<bpmndi:BPMNLabel id="BPMNLabel_7"/>
|
||||
<di:waypoint x="855.0" y="377.0"/>
|
||||
<di:waypoint x="855.0" y="340.0"/>
|
||||
<di:waypoint x="1330.0" y="315.0"/>
|
||||
<di:waypoint x="1397.0" y="315.0"/>
|
||||
</bpmndi:BPMNEdge>
|
||||
<bpmndi:BPMNEdge bpmnElement="Association_3" id="BPMNEdge_Association_3" sourceElement="BPMNShape_DataObject_2" targetElement="BPMNShape_Task_1">
|
||||
<bpmndi:BPMNLabel id="BPMNLabel_14"/>
|
||||
<di:waypoint x="740.0" y="525.0"/>
|
||||
<di:waypoint x="630.0" y="525.0"/>
|
||||
<di:waypoint x="630.0" y="315.0"/>
|
||||
<di:waypoint x="520.0" y="315.0"/>
|
||||
<di:waypoint x="860.0" y="197.0"/>
|
||||
<di:waypoint x="575.0" y="197.0"/>
|
||||
<di:waypoint x="575.0" y="290.0"/>
|
||||
</bpmndi:BPMNEdge>
|
||||
<bpmndi:BPMNShape bpmnElement="event_XJbC5A" id="BPMNShape_3fLqIw">
|
||||
<dc:Bounds height="36.0" width="36.0" x="687.0" y="297.0"/>
|
||||
<dc:Bounds height="36.0" width="36.0" x="787.0" y="297.0"/>
|
||||
<bpmndi:BPMNLabel id="BPMNLabel_fzXPOA">
|
||||
<dc:Bounds height="20.0" width="100.0" x="655.0" y="336.0"/>
|
||||
<dc:Bounds height="20.0" width="100.0" x="755.0" y="336.0"/>
|
||||
</bpmndi:BPMNLabel>
|
||||
</bpmndi:BPMNShape>
|
||||
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_EzmiPA" id="BPMNEdge_2O039Q" sourceElement="BPMNShape_Task_1" targetElement="BPMNShape_3fLqIw">
|
||||
<di:waypoint x="520.0" y="315.0"/>
|
||||
<di:waypoint x="687.0" y="315.0"/>
|
||||
</bpmndi:BPMNEdge>
|
||||
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_l0egag" id="BPMNEdge_WIvxbQ" sourceElement="BPMNShape_3fLqIw" targetElement="BPMNShape_Task_2">
|
||||
<di:waypoint x="723.0" y="315.0"/>
|
||||
<di:waypoint x="800.0" y="315.0"/>
|
||||
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_EzmiPA" id="BPMNEdge_2O039Q" sourceElement="BPMNShape_Task_1" targetElement="BPMNShape_0nZTrw">
|
||||
<di:waypoint x="620.0" y="315.0"/>
|
||||
<di:waypoint x="680.0" y="315.0"/>
|
||||
</bpmndi:BPMNEdge>
|
||||
<bpmndi:BPMNShape bpmnElement="textAnnotation_HwSKqQ" id="BPMNShape_6f4UmA">
|
||||
<dc:Bounds height="80.0" width="193.0" x="180.0" y="490.0"/>
|
||||
</bpmndi:BPMNShape>
|
||||
<bpmndi:BPMNShape bpmnElement="event_9fS4uw" id="BPMNShape_JSwhvQ">
|
||||
<dc:Bounds height="36.0" width="36.0" x="447.0" y="377.0"/>
|
||||
<dc:Bounds height="36.0" width="36.0" x="547.0" y="377.0"/>
|
||||
<bpmndi:BPMNLabel id="BPMNLabel_jZmJsw">
|
||||
<dc:Bounds height="20.0" width="100.0" x="415.0" y="416.0"/>
|
||||
<dc:Bounds height="20.0" width="100.0" x="515.0" y="416.0"/>
|
||||
</bpmndi:BPMNLabel>
|
||||
</bpmndi:BPMNShape>
|
||||
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_rbVgQA" id="BPMNEdge_6PdUYA" sourceElement="BPMNShape_JSwhvQ" targetElement="BPMNShape_Task_1">
|
||||
<di:waypoint x="465.0" y="377.0"/>
|
||||
<di:waypoint x="465.0" y="357.0"/>
|
||||
<di:waypoint x="465.0" y="340.0"/>
|
||||
<di:waypoint x="565.0" y="377.0"/>
|
||||
<di:waypoint x="565.0" y="340.0"/>
|
||||
</bpmndi:BPMNEdge>
|
||||
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_M5IK7w" id="BPMNEdge_gTIgKQ" sourceElement="BPMNShape_1" targetElement="BPMNShape_IntermediateCatchEvent_3">
|
||||
<di:waypoint x="263.0" y="315.0"/>
|
||||
<di:waypoint x="297.0" y="315.0"/>
|
||||
<di:waypoint x="223.0" y="315.0"/>
|
||||
<di:waypoint x="277.0" y="315.0"/>
|
||||
</bpmndi:BPMNEdge>
|
||||
<bpmndi:BPMNEdge bpmnElement="association_2r0omw" id="BPMNEdge_pgk0IA" sourceElement="BPMNShape_DataObject_2" targetElement="BPMNShape_Task_4">
|
||||
<di:waypoint x="775.0" y="525.0"/>
|
||||
<di:waypoint x="1162.0" y="525.0"/>
|
||||
<di:waypoint x="1162.0" y="340.0"/>
|
||||
<di:waypoint x="895.0" y="197.0"/>
|
||||
<di:waypoint x="1271.0" y="197.0"/>
|
||||
<di:waypoint x="1271.0" y="290.0"/>
|
||||
</bpmndi:BPMNEdge>
|
||||
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_GN53Kg" id="BPMNEdge_RtC0kg" sourceElement="BPMNShape_IntermediateCatchEvent_3" targetElement="BPMNShape_Task_1">
|
||||
<di:waypoint x="333.0" y="315.0"/>
|
||||
<di:waypoint x="410.0" y="315.0"/>
|
||||
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_GN53Kg" id="BPMNEdge_RtC0kg" sourceElement="BPMNShape_IntermediateCatchEvent_3" targetElement="BPMNShape_08Wt6Q">
|
||||
<di:waypoint x="313.0" y="315.0"/>
|
||||
<di:waypoint x="380.0" y="315.0"/>
|
||||
</bpmndi:BPMNEdge>
|
||||
<bpmndi:BPMNShape bpmnElement="event_mPDOzA" id="BPMNShape_U8jhww">
|
||||
<dc:Bounds height="36.0" width="36.0" x="687.0" y="377.0"/>
|
||||
<bpmndi:BPMNLabel id="BPMNLabel_yIL0YQ">
|
||||
<dc:Bounds height="20.0" width="100.0" x="655.0" y="416.0"/>
|
||||
</bpmndi:BPMNLabel>
|
||||
</bpmndi:BPMNShape>
|
||||
<bpmndi:BPMNShape bpmnElement="gateway_u86UTw" id="BPMNShape_wjKX5g">
|
||||
<dc:Bounds height="50.0" width="50.0" x="680.0" y="480.0"/>
|
||||
<bpmndi:BPMNLabel id="BPMNLabel_b9l1Rg">
|
||||
<dc:Bounds height="20.0" width="100.0" x="655.0" y="533.0"/>
|
||||
</bpmndi:BPMNLabel>
|
||||
</bpmndi:BPMNShape>
|
||||
<bpmndi:BPMNShape bpmnElement="gateway_5riVig" id="BPMNShape_0nZTrw">
|
||||
<dc:Bounds height="50.0" width="50.0" x="680.0" y="290.0"/>
|
||||
<bpmndi:BPMNLabel id="BPMNLabel_MWTutw">
|
||||
<dc:Bounds height="20.0" width="100.0" x="655.0" y="343.0"/>
|
||||
</bpmndi:BPMNLabel>
|
||||
</bpmndi:BPMNShape>
|
||||
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_tpBldQ" id="BPMNEdge_jBRFmA" sourceElement="BPMNShape_0nZTrw" targetElement="BPMNShape_U8jhww">
|
||||
<di:waypoint x="705.0" y="340.0"/>
|
||||
<di:waypoint x="705.0" y="377.0"/>
|
||||
</bpmndi:BPMNEdge>
|
||||
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_DzOb8A" id="BPMNEdge_AZTV0g" sourceElement="BPMNShape_0nZTrw" targetElement="BPMNShape_3fLqIw">
|
||||
<di:waypoint x="730.0" y="315.0"/>
|
||||
<di:waypoint x="787.0" y="315.0"/>
|
||||
</bpmndi:BPMNEdge>
|
||||
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_lrR0DQ" id="BPMNEdge_Idg6TA" sourceElement="BPMNShape_U8jhww" targetElement="BPMNShape_wjKX5g">
|
||||
<di:waypoint x="705.0" y="413.0"/>
|
||||
<di:waypoint x="705.0" y="480.0"/>
|
||||
</bpmndi:BPMNEdge>
|
||||
<bpmndi:BPMNShape bpmnElement="gateway_mga6sg" id="BPMNShape_08Wt6Q">
|
||||
<dc:Bounds height="50.0" width="50.0" x="380.0" y="290.0"/>
|
||||
<bpmndi:BPMNLabel id="BPMNLabel_WhuHsQ">
|
||||
<dc:Bounds height="20.0" width="100.0" x="357.0" y="342.0"/>
|
||||
</bpmndi:BPMNLabel>
|
||||
</bpmndi:BPMNShape>
|
||||
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_J0GjVg" id="BPMNEdge_UbMu5Q" sourceElement="BPMNShape_08Wt6Q" targetElement="BPMNShape_Task_1">
|
||||
<di:waypoint x="430.0" y="315.0"/>
|
||||
<di:waypoint x="510.0" y="315.0"/>
|
||||
</bpmndi:BPMNEdge>
|
||||
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_KOaBSw" id="BPMNEdge_CxmUrw" sourceElement="BPMNShape_wjKX5g" targetElement="BPMNShape_08Wt6Q">
|
||||
<di:waypoint x="680.0" y="505.0"/>
|
||||
<di:waypoint x="405.0" y="505.0"/>
|
||||
<di:waypoint x="405.0" y="340.0"/>
|
||||
</bpmndi:BPMNEdge>
|
||||
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_hLkSLA" id="BPMNEdge_0mnAaw" sourceElement="BPMNShape_wjKX5g" targetElement="BPMNShape_3fLqIw">
|
||||
<di:waypoint x="730.0" y="505.0"/>
|
||||
<di:waypoint x="806.0" y="505.0"/>
|
||||
<di:waypoint x="806.0" y="332.9722007556114"/>
|
||||
</bpmndi:BPMNEdge>
|
||||
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_oRy3qw" id="BPMNEdge_5EEWMw" sourceElement="BPMNShape_3fLqIw" targetElement="BPMNShape_Task_4">
|
||||
<di:waypoint x="823.0" y="315.0"/>
|
||||
<di:waypoint x="1220.0" y="315.0"/>
|
||||
</bpmndi:BPMNEdge>
|
||||
</bpmndi:BPMNPlane>
|
||||
<bpmndi:BPMNLabelStyle id="BPMNLabelStyle_1">
|
||||
|
|
|
|||
Loading…
Reference in a new issue