diff --git a/OP_MODULE.md b/OP_MODULE.md
new file mode 100644
index 0000000..87ab6f8
--- /dev/null
+++ b/OP_MODULE.md
@@ -0,0 +1,69 @@
+
+Frau Mahner
+
+sollen wir üfung auf Übereinstimmung Zahlugnsbetrag und saldo machen?
+
+
+Sonder Fall
+
+
+
+
+FM Systemmöbel GmbH & Co. KG
+
+
+Hallo Frau Beste,
+
+anbei senden wir Ihnen eine OP Beispiel-Datei aus Imixs, welche die offenen Rechnungen enhält. Diese Datei ist analog zu der Datei "OPD28.txt" die Sie täglich von Frau Mahner erhalten.
+
+Diese Datei unterscheidet sich zu der DATEV Datei, welche Frau Mahner bisher schickt, wie folgt:
+
+ - Die Datei enthält nur Rechnungen und keine Zahlungseingänge.
+ - Wir exportieren nur die ersten 12 Spalten (A - L), d.h:
+ - kein Gegenkonto
+ - keine Fälligkeit/Zahlungsbedinung
+ - keine Rechnungsposition
+ - keine Umsatzsteuer
+
+
+Wir haben in das Beispiel bewusst einen Sonderfall für den Debitor 180124 eingebaut.
+Dieser hat 2 Offenen Rechnungen:
+
+ RG-Nr Betrag
+ 180124 2.900,00 EUR
+ 180127 1.600,00 USD (Kurs 1.018102)
+
+Es wurden 2 Teilzahlungen a 500 EUR bzw. USD bezahlt.
+
+Dies stellt sich dann wie folgt dar:
+
+10968 Papierfabrik Wattens GmbH & Co. KG 180124 24082022 23102022 2900 0,00 2400 S 0,000000 0,00
+10968 Papierfabrik Wattens GmbH & Co. KG 180127 24082022 23102022 1600 0,00 1100 S USD 1.018102 1571.55
+
+
+Bitte bestätigen Sie uns das diese Format von Ihnen so verarbeitet werden kann.
+
+
+
+
+
+
+Wir improtieren pro Monat und Tag die Rechungen
+
+wir exporiterne aber immer alle offneen Rechnungen egeal von wlecher Period
+
+
+
+
+# Demo
+
+einfach:
+-----------
+Dieffenbacher GmbH
+Drewsen Spezialpapiere GmbH & Co. KG
+
+besonders
+-------------
+Maersk Deutschland A/S & Co. KG
+Papierfabrik Wattens GmbH & Co. KG
+
diff --git a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/OPListController.java b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/OPListController.java
index 7339520..72b853e 100644
--- a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/OPListController.java
+++ b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/OPListController.java
@@ -257,5 +257,20 @@ public class OPListController implements Serializable {
return Math.round(result * 100.0) / 100.0;
}
+
+ /**
+ * Berechnet den gesammten OP Saldo
+ *
+ * @return
+ */
+ public double calculateInvoiceSaldo() {
+ double result = 0;
+ for (ItemCollection invoice : invoiceList) {
+ result = result + invoice.getItemValueDouble("invoice.saldo");
+ }
+ // rond with 2 digits
+ return Math.round(result * 100.0) / 100.0;
+
+ }
}
diff --git a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/datev/DatevCargosoftImportAdapter.java b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/datev/DatevCargosoftImportAdapter.java
index 7bb06ea..4931ff2 100644
--- a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/datev/DatevCargosoftImportAdapter.java
+++ b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/datev/DatevCargosoftImportAdapter.java
@@ -36,341 +36,354 @@ import com.alexanderlogistics.KreditorDebitorService;
* werden.
*
* In der Spalte Belegart-4 steht das Fäligkeitsdatum.
- *
+ *
+ * Beim Import wird auch der Kreditor geprüft und aus diesem das
+ * Länderkennzeichen übernommen.
*
* @version 1.0
* @author rsoika
*/
public class DatevCargosoftImportAdapter implements SignalAdapter {
- private static Logger logger = Logger.getLogger(DatevCargosoftImportAdapter.class.getName());
+ private static Logger logger = Logger.getLogger(DatevCargosoftImportAdapter.class.getName());
- public static final String ENCODING = "ISO-8859-1";
- public static final String CHILD_ITEM_PROPERTY = "_ChildItems";
+ public static final String ENCODING = "ISO-8859-1";
+ public static final String CHILD_ITEM_PROPERTY = "_ChildItems";
- @Inject
- WorkflowService workflowService;
+ @Inject
+ WorkflowService workflowService;
- @Inject
- DocumentService documentService;
+ @Inject
+ DocumentService documentService;
- @Inject
- KreditorDebitorService kreditorDebitorService;
+ @Inject
+ KreditorDebitorService kreditorDebitorService;
- /**
- * This method finds or create the Datev Export and adds a reference
- * ($workitemref) to the current invoice.
- *
- * @throws PluginException
- */
- @Override
- public ItemCollection execute(ItemCollection workitem, ItemCollection event)
- throws AdapterException, PluginException {
+ /**
+ * This method finds or create the Datev Export and adds a reference
+ * ($workitemref) to the current invoice.
+ *
+ * @throws PluginException
+ */
+ @Override
+ public ItemCollection execute(ItemCollection workitem, ItemCollection event)
+ throws AdapterException, PluginException {
- logger.info("...parse datev file import...");
- try {
- List log = readData(workitem);
- workitem.setItemValue("import.log", log);
- } catch (ModelException e) {
- throw new AdapterException(PluginException.class.getSimpleName(), DatevImportAdapter.DATEV_IMPORT_ERROR,
- "Failed to import datev data!", e);
+ logger.info("...parse datev file import...");
+ try {
+ List log = readData(workitem);
+ workitem.setItemValue("import.log", log);
+ } catch (ModelException e) {
+ throw new AdapterException(PluginException.class.getSimpleName(), DatevImportAdapter.DATEV_IMPORT_ERROR,
+ "Failed to import datev data!", e);
- }
- return workitem;
- }
+ }
+ return workitem;
+ }
- /**
- * Liest die datenzeilen ab Zeile 3 aus und bildet worktiems gruppiert nach
- * belegnummer
- *
- *
- * Belegfeld-1 ist hier ein eindeutiger Schlüssel für die Erzeugung von
- * Splitbuchungen
- *
- * @param document
- * @throws PluginException
- * @throws ModelException
- * @throws ProcessingErrorException
- * @throws AccessDeniedException
- */
- private List readData(ItemCollection workitem)
- throws PluginException, AccessDeniedException, ProcessingErrorException, ModelException {
- List logBuffer = new ArrayList();
- int line = 0;
- int positions = 0;
- int invoices = 0;
- int dupplicates = 0;
-
- String dataLine;
- // Start Datum Wirtschaftsjahr berechnen (JJJJMMTT)
- String wjBeginn = workitem.getItemValueString("datev.WJ-Beginn");
- String wjBeginnMonat = wjBeginn.substring(4, 6);
- SimpleDateFormat dateFormatter = new SimpleDateFormat("yyyyMMdd");
+ /**
+ * Liest die datenzeilen ab Zeile 3 aus und bildet worktiems gruppiert nach
+ * belegnummer
+ *
+ *
+ * Belegfeld-1 ist hier ein eindeutiger Schlüssel für die Erzeugung von
+ * Splitbuchungen
+ *
+ * @param document
+ * @throws PluginException
+ * @throws ModelException
+ * @throws ProcessingErrorException
+ * @throws AccessDeniedException
+ */
+ private List readData(ItemCollection workitem)
+ throws PluginException, AccessDeniedException, ProcessingErrorException, ModelException {
+ List logBuffer = new ArrayList();
+ int line = 0;
+ int positions = 0;
+ int invoices = 0;
+ int dupplicates = 0;
- ItemCollection invoiceWorkitem = null;
- List splitBuchungen = new ArrayList();
+ String dataLine;
+ // Start Datum Wirtschaftsjahr berechnen (JJJJMMTT)
+ String wjBeginn = workitem.getItemValueString("datev.WJ-Beginn");
+ String wjBeginnMonat = wjBeginn.substring(4, 6);
+ SimpleDateFormat dateFormatter = new SimpleDateFormat("yyyyMMdd");
- FileData fileData = workitem.getFileData().get(0);
- ByteArrayInputStream imputStream = new ByteArrayInputStream(fileData.getContent());
+ ItemCollection invoiceWorkitem = null;
+ List splitBuchungen = new ArrayList();
- log(logBuffer, "Importdatei: " + fileData.getName());
- try {
- BufferedReader in = new BufferedReader(new InputStreamReader(imputStream, ENCODING));
+ FileData fileData = workitem.getFileData().get(0);
+ ByteArrayInputStream imputStream = new ByteArrayInputStream(fileData.getContent());
- // skip header
- in.readLine();
- in.readLine();
+ log(logBuffer, "Importdatei: " + fileData.getName());
+ try {
+ BufferedReader in = new BufferedReader(new InputStreamReader(imputStream, ENCODING));
- // read content....
- line = 0;
- int blockSize = 0;
- while ((dataLine = in.readLine()) != null) {
- line++;
- if (blockSize >= 100) {
- blockSize = 0;
- logger.info(line + " entries read....");
- }
+ // skip header
+ in.readLine();
+ in.readLine();
- // alle werte parsen
- String[] header1List = dataLine.split(";(?=([^\"]*\"[^\"]*\")*[^\"]*$)", 99);
- if (header1List.length < 6) {
- throw new PluginException(DatevCargosoftImportAdapter.class.getName(),
- DatevImportAdapter.DATEV_IMPORT_ERROR, "Invalid data in line " + line);
- }
+ // read content....
+ line = 0;
+ int blockSize = 0;
+ while ((dataLine = in.readLine()) != null) {
+ line++;
+ if (blockSize >= 100) {
+ blockSize = 0;
+ logger.info(line + " entries read....");
+ }
- String belegNummer = DatevImportAdapter.csvVal(header1List[10]);
- String gegenKonto = DatevImportAdapter.csvVal(header1List[7]);
- String text = DatevImportAdapter.csvVal(header1List[13]);
- String buchungsTag = DatevImportAdapter.csvVal(header1List[9]);
- // cargosoft laesst gerne die führende 0 weg....
- if (buchungsTag.length() == 3) {
- buchungsTag = "0" + buchungsTag;
- }
- // berechne Buchungsdatum DDMM
- String tag = buchungsTag.substring(0, 2);
- String monat = buchungsTag.substring(2, 4);
- String jahr = wjBeginn.substring(0, 4);
- // compute next year if start of WJ is not January
- if (Integer.parseInt(wjBeginnMonat) > Integer.parseInt(monat)) {
- jahr = Integer.parseInt(jahr + 1) + "";
- }
- Date dateBuchung = dateFormatter.parse(jahr + monat + tag);
- // Fälligkeit
- Date dueDate = dateFormatter.parse(DatevImportAdapter.csvVal(header1List[23]));
- String paymentTerm = DatevImportAdapter.csvVal(header1List[31]);
- String waehrung = DatevImportAdapter.csvVal(header1List[2]);
+ // alle werte parsen
+ String[] header1List = dataLine.split(";(?=([^\"]*\"[^\"]*\")*[^\"]*$)", 99);
+ if (header1List.length < 6) {
+ throw new PluginException(DatevCargosoftImportAdapter.class.getName(),
+ DatevImportAdapter.DATEV_IMPORT_ERROR, "Invalid data in line " + line);
+ }
- // kurse
- double kurs = parseBetrag(DatevImportAdapter.csvVal(header1List[3]));
- double basisumsatz = parseBetrag(DatevImportAdapter.csvVal(header1List[4]));
+ String belegNummer = DatevImportAdapter.csvVal(header1List[10]);
+ String gegenKonto = DatevImportAdapter.csvVal(header1List[7]);
+ String text = DatevImportAdapter.csvVal(header1List[13]);
+ String buchungsTag = DatevImportAdapter.csvVal(header1List[9]);
+ // cargosoft laesst gerne die führende 0 weg....
+ if (buchungsTag.length() == 3) {
+ buchungsTag = "0" + buchungsTag;
+ }
+ // berechne Buchungsdatum DDMM
+ String tag = buchungsTag.substring(0, 2);
+ String monat = buchungsTag.substring(2, 4);
+ String jahr = wjBeginn.substring(0, 4);
+ // compute next year if start of WJ is not January
+ if (Integer.parseInt(wjBeginnMonat) > Integer.parseInt(monat)) {
+ jahr = Integer.parseInt(jahr + 1) + "";
+ }
+ Date dateBuchung = dateFormatter.parse(jahr + monat + tag);
+ // Fälligkeit
+ Date dueDate = dateFormatter.parse(DatevImportAdapter.csvVal(header1List[23]));
+ String paymentTerm = DatevImportAdapter.csvVal(header1List[31]);
+ String waehrung = DatevImportAdapter.csvVal(header1List[2]);
- // Skip Eingangsrechnungen
- if (!gegenKonto.startsWith("1")) {
- // skip
- continue;
- }
+ // kurse
+ double kurs = parseBetrag(DatevImportAdapter.csvVal(header1List[3]));
+ double basisumsatz = parseBetrag(DatevImportAdapter.csvVal(header1List[4]));
- positions++;
- logger.info("...read dbtr: " + gegenKonto + " beleg-nr: " + belegNummer);
+ // Skip Eingangsrechnungen
+ if (!gegenKonto.startsWith("1")) {
+ // skip
+ continue;
+ }
- // Erzeuge einen Buchungssatz
- ItemCollection dataItemCol = new ItemCollection();
- dataItemCol.setItemValue("datev.text", text);
- dataItemCol.setItemValue("datev.umsatz", parseBetrag(DatevImportAdapter.csvVal(header1List[0])));
- dataItemCol.setItemValue("datev.shzeichen", DatevImportAdapter.csvVal(header1List[1]));
- dataItemCol.setItemValue("datev.wkz", waehrung);
- dataItemCol.setItemValue("datev.kurs", parseBetrag(DatevImportAdapter.csvVal(header1List[3])));
- dataItemCol.setItemValue("datev.basisumsatz", parseBetrag(DatevImportAdapter.csvVal(header1List[4])));
- dataItemCol.setItemValue("datev.konto", DatevImportAdapter.csvVal(header1List[6]));
+ positions++;
+ logger.info("...read dbtr: " + gegenKonto + " beleg-nr: " + belegNummer);
- // Haben wir schon eine Invoice Workitem angelegt?
- if (invoiceWorkitem == null) {
- logger.info("...create new workitem....");
- // erzeuge ein neues
- try {
- invoiceWorkitem = createEmptyInvoice(belegNummer, text, gegenKonto, dateBuchung, dueDate,
- paymentTerm, waehrung, kurs, basisumsatz);
- invoices++;
- } catch (AdapterException e) {
- dupplicates++;
- continue;
- }
- }
+ // Erzeuge einen Buchungssatz
+ ItemCollection dataItemCol = new ItemCollection();
+ dataItemCol.setItemValue("datev.text", text);
+ dataItemCol.setItemValue("datev.umsatz", parseBetrag(DatevImportAdapter.csvVal(header1List[0])));
+ dataItemCol.setItemValue("datev.shzeichen", DatevImportAdapter.csvVal(header1List[1]));
+ dataItemCol.setItemValue("datev.wkz", waehrung);
+ dataItemCol.setItemValue("datev.kurs", parseBetrag(DatevImportAdapter.csvVal(header1List[3])));
+ dataItemCol.setItemValue("datev.basisumsatz", parseBetrag(DatevImportAdapter.csvVal(header1List[4])));
+ dataItemCol.setItemValue("datev.konto", DatevImportAdapter.csvVal(header1List[6]));
- // ist es noch die selbe Belegnummer?
- if (belegNummer.equals(invoiceWorkitem.getItemValueString("invoice.number"))) {
- // adde die Splitbuchung
- splitBuchungen.add(dataItemCol);
- logger.info("...add splitbuchung....");
- } else {
- logger.info("...close workitem....");
+ // Haben wir schon eine Invoice Workitem angelegt?
+ if (invoiceWorkitem == null) {
+ logger.info("...create new workitem....");
+ // erzeuge ein neues
+ try {
+ invoiceWorkitem = createEmptyInvoice(belegNummer, text, gegenKonto, dateBuchung, dueDate,
+ paymentTerm, waehrung, kurs, basisumsatz);
+ invoices++;
+ } catch (AdapterException e) {
+ dupplicates++;
+ continue;
+ }
+ }
- // nein - also invoice schließen
- closeInvoiceWorkitem(invoiceWorkitem, splitBuchungen);
- invoiceWorkitem=null;
- // neue Splitbuchungstabelle anlegen
- splitBuchungen = new ArrayList();
- // invoice zurücksetzten
- // erzeuge ein neues
- try {
- invoiceWorkitem = createEmptyInvoice(belegNummer, text, gegenKonto, dateBuchung, dueDate,
- paymentTerm, waehrung, kurs, basisumsatz);
- invoices++;
- } catch (AdapterException e) {
- dupplicates++;
- continue;
- }
- splitBuchungen.add(dataItemCol);
- }
+ // ist es noch die selbe Belegnummer?
+ if (belegNummer.equals(invoiceWorkitem.getItemValueString("invoice.number"))) {
+ // adde die Splitbuchung
+ splitBuchungen.add(dataItemCol);
+ logger.info("...add splitbuchung....");
+ } else {
+ logger.info("...close workitem....");
- } // wile end
- closeInvoiceWorkitem(invoiceWorkitem, splitBuchungen);
+ // nein - also invoice schließen
+ closeInvoiceWorkitem(invoiceWorkitem, splitBuchungen);
+ invoiceWorkitem = null;
+ // neue Splitbuchungstabelle anlegen
+ splitBuchungen = new ArrayList();
+ // invoice zurücksetzten
+ // erzeuge ein neues
+ try {
+ invoiceWorkitem = createEmptyInvoice(belegNummer, text, gegenKonto, dateBuchung, dueDate,
+ paymentTerm, waehrung, kurs, basisumsatz);
+ invoices++;
+ } catch (AdapterException e) {
+ dupplicates++;
+ continue;
+ }
+ splitBuchungen.add(dataItemCol);
+ }
- } catch (IOException | ParseException e) {
- throw new PluginException(DatevCargosoftImportAdapter.class.getName(),
- DatevImportAdapter.DATEV_IMPORT_ERROR, "Unable to read file", e);
- }
+ } // wile end
+ closeInvoiceWorkitem(invoiceWorkitem, splitBuchungen);
- log(logBuffer, line + " Zeilen eingelesen ");
- log(logBuffer, positions + " Rechnungspositionen eingelesen ");
- log(logBuffer, invoices + " Rechnungen importiert ");
- if (dupplicates > 0) {
- log(logBuffer, dupplicates + " Rechnungen wurden übersprungen da diese bereits importiert wurden!");
- }
+ } catch (IOException | ParseException e) {
+ throw new PluginException(DatevCargosoftImportAdapter.class.getName(),
+ DatevImportAdapter.DATEV_IMPORT_ERROR, "Unable to read file", e);
+ }
- // return log
- return logBuffer;
+ log(logBuffer, line + " Zeilen eingelesen ");
+ log(logBuffer, positions + " Rechnungspositionen eingelesen ");
+ log(logBuffer, invoices + " Rechnungen importiert ");
+ if (dupplicates > 0) {
+ log(logBuffer, dupplicates + " Rechnungen wurden übersprungen da diese bereits importiert wurden!");
+ }
- }
+ // return log
+ return logBuffer;
- /**
- * This method returns a new empty invoice ItemCollection.
- *
- * The method tests if an invoice with this number already exits. If so, the
- * method throws a AdapterException
- *
- * @param belegNummer
- * @param text
- * @param gegenKonto
- * @param dateBuchung
- * @param dueDate
- * @param paymentTerm
- * @param currency
- * @param kurs
- * @param basisUmsatz
- * @return
- * @throws AdapterException
- */
- private ItemCollection createEmptyInvoice(String belegNummer, String text, String gegenKonto, Date dateBuchung,
- Date dueDate, String paymentTerm, String currency, double kurs, double basisUmsatz)
- throws AdapterException {
+ }
- // test if invoice was already imported before
- String sQuery = "((type:workitem OR type:workitemarchive) AND $modelversion:rechnungsausgang* AND invoice.number:\""+belegNummer+"\")";
- try {
- // find the textblock...
- List result = documentService.find(sQuery, 1, 0);
- if (result.size() > 0) {
- throw new AdapterException(DatevCargosoftImportAdapter.class.getName(), "DUPPLICATE",
- "Invoice already imported");
- }
- } catch (QueryException e) {
- logger.warning("failed to search invoices by query: " + e.getMessage());
- }
+ /**
+ * This method returns a new empty invoice ItemCollection.
+ *
+ * The method tests if an invoice with this number already exits. If so, the
+ * method throws a AdapterException
+ *
+ * @param belegNummer
+ * @param text
+ * @param gegenKonto
+ * @param dateBuchung
+ * @param dueDate
+ * @param paymentTerm
+ * @param currency
+ * @param kurs
+ * @param basisUmsatz
+ * @return
+ * @throws AdapterException
+ */
+ private ItemCollection createEmptyInvoice(String belegNummer, String text, String gegenKonto, Date dateBuchung,
+ Date dueDate, String paymentTerm, String currency, double kurs, double basisUmsatz)
+ throws AdapterException {
- ItemCollection invoiceWorkitem = new ItemCollection();
- invoiceWorkitem.setItemValue("invoice.number", belegNummer);
- invoiceWorkitem.setItemValue("invoice.currency", currency);
- invoiceWorkitem.setItemValue("invoice.text", text);
- invoiceWorkitem.setItemValue("invoice.date", dateBuchung);
- invoiceWorkitem.setItemValue("dbtr.number", gegenKonto);
- invoiceWorkitem.setItemValue("invoice.duedate", dueDate);
- invoiceWorkitem.setItemValue("invoice.reminder", dueDate);
- invoiceWorkitem.setItemValue("payment.term", paymentTerm);
+ // test if invoice was already imported before
+ String sQuery = "((type:workitem OR type:workitemarchive) AND $modelversion:rechnungsausgang* AND invoice.number:\""
+ + belegNummer + "\")";
+ try {
+ // find the textblock...
+ List result = documentService.find(sQuery, 1, 0);
+ if (result.size() > 0) {
+ throw new AdapterException(DatevCargosoftImportAdapter.class.getName(), "DUPPLICATE",
+ "Invoice already imported");
+ }
+ } catch (QueryException e) {
+ logger.warning("failed to search invoices by query: " + e.getMessage());
+ }
- invoiceWorkitem.setItemValue("invoice.rate", kurs);
- invoiceWorkitem.setItemValue("invoice.base.amount", basisUmsatz);
+ ItemCollection invoiceWorkitem = new ItemCollection();
+ invoiceWorkitem.setItemValue("invoice.number", belegNummer);
+ invoiceWorkitem.setItemValue("invoice.currency", currency);
+ invoiceWorkitem.setItemValue("invoice.text", text);
+ invoiceWorkitem.setItemValue("invoice.date", dateBuchung);
+ invoiceWorkitem.setItemValue("dbtr.number", gegenKonto);
+ invoiceWorkitem.setItemValue("invoice.duedate", dueDate);
+ invoiceWorkitem.setItemValue("invoice.reminder", dueDate);
+ invoiceWorkitem.setItemValue("payment.term", paymentTerm);
- return invoiceWorkitem;
- }
+ invoiceWorkitem.setItemValue("invoice.rate", kurs);
+ invoiceWorkitem.setItemValue("invoice.base.amount", basisUmsatz);
- private void log(List log, String message) {
- log.add(new Date() + ": " + message+"\n");
- }
+ return invoiceWorkitem;
+ }
- /**
- * . entfernen , mit punkt ersetzten
- *
- * @param value
- * @return
- */
- public Double parseBetrag(String value) {
+ private void log(List log, String message) {
+ log.add(new Date() + ": " + message + "\n");
+ }
- value = value.replace(".", "");
- value = value.replace(",", ".");
+ /**
+ * . entfernen , mit punkt ersetzten
+ *
+ * @param value
+ * @return
+ */
+ public Double parseBetrag(String value) {
- return new Double(value);
- }
+ value = value.replace(".", "");
+ value = value.replace(",", ".");
- /**
- * Diese Hilfsmethod schließt das Invoice Workitem ab
- *
- * @throws ModelException
- * @throws PluginException
- * @throws ProcessingErrorException
- * @throws AccessDeniedException
- */
- private void closeInvoiceWorkitem(ItemCollection invoiceWorkitem, List splitBuchungen)
- throws AccessDeniedException, ProcessingErrorException, PluginException, ModelException {
- if (invoiceWorkitem == null) {
- return; // no op
- }
+ return new Double(value);
+ }
- // berechne Total:
- double total = 0;
- for (ItemCollection zeile : splitBuchungen) {
- if ("H".equals(zeile.getItemValueString("datev.shzeichen"))) {
- total = total + zeile.getItemValueDouble("datev.umsatz");
- } else {
- total = total - zeile.getItemValueDouble("datev.umsatz");
- }
- }
+ /**
+ * Diese Hilfsmethod schließt das Invoice Workitem ab
+ *
+ * @throws ModelException
+ * @throws PluginException
+ * @throws ProcessingErrorException
+ * @throws AccessDeniedException
+ */
+ private void closeInvoiceWorkitem(ItemCollection invoiceWorkitem, List splitBuchungen)
+ throws AccessDeniedException, ProcessingErrorException, PluginException, ModelException {
+ if (invoiceWorkitem == null) {
+ return; // no op
+ }
- invoiceWorkitem.setItemValue("invoice.total", total);
- invoiceWorkitem.setItemValue("invoice.saldo", total);
- // implode die Splitbuchungen
- implodeChildList(invoiceWorkitem, splitBuchungen);
+ // berechne Total:
+ double total = 0;
+ for (ItemCollection zeile : splitBuchungen) {
+ if ("H".equals(zeile.getItemValueString("datev.shzeichen"))) {
+ total = total + zeile.getItemValueDouble("datev.umsatz");
+ } else {
+ total = total - zeile.getItemValueDouble("datev.umsatz");
+ }
+ }
- // set dbtr.name
- ItemCollection dbtrItemCol = kreditorDebitorService
- .findDebitor(invoiceWorkitem.getItemValueString("dbtr.number"));
- if (dbtrItemCol != null) {
- invoiceWorkitem.setItemValue("dbtr.name", dbtrItemCol.getItemValueString("_VENDOR_Name"));
- }
+ invoiceWorkitem.setItemValue("invoice.total", total);
+ invoiceWorkitem.setItemValue("invoice.saldo", total);
+ // implode die Splitbuchungen
+ implodeChildList(invoiceWorkitem, splitBuchungen);
- // Processe die Invoice
- invoiceWorkitem.model("rechnungsausgang-de-1.0").task(5001).event(980);
- workflowService.processWorkItem(invoiceWorkitem);
+ // set dbtr.name
+ ItemCollection dbtrItemCol = kreditorDebitorService
+ .findDebitor(invoiceWorkitem.getItemValueString("dbtr.number"));
+ if (dbtrItemCol != null) {
+ invoiceWorkitem.setItemValue("dbtr.name", dbtrItemCol.getItemValueString("_VENDOR_Name"));
+ // Anhand der Creditoren Stammdaten errrechnen wir die Sprache für diese
+ // Rechnung
+ String country = dbtrItemCol.getItemValueString("_VENDOR_COUNTRY");
+ invoiceWorkitem.setItemValue("dbtr.country", country);
+ if (country.isEmpty() || country.equalsIgnoreCase("de") || country.equalsIgnoreCase("ch")
+ || country.equalsIgnoreCase("at")) {
+ invoiceWorkitem.setItemValue("invoice.language", "DE");
+ } else {
+ invoiceWorkitem.setItemValue("invoice.language", "EN");
+ }
+ }
- }
+ // Processe die Invoice
+ invoiceWorkitem.model("rechnungsausgang-de-1.0").task(5001).event(980);
+ workflowService.processWorkItem(invoiceWorkitem);
- /**
- * Convert the List of ItemCollections back into a List of Map elements
- *
- * @param workitem
- */
- @SuppressWarnings({ "rawtypes" })
- private void implodeChildList(ItemCollection workitem, List childItems) {
- List