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 e75bbb7..6816cd6 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 @@ -31,6 +31,10 @@ public class OPListController implements Serializable { private static final long serialVersionUID = 1L; private static Logger logger = Logger.getLogger(OPListController.class.getName()); + + private String lastDbtrNumber=null; + + private List invoiceCache=null; @Inject protected WorkflowController workflowController; @@ -38,29 +42,50 @@ public class OPListController implements Serializable { @Inject protected DocumentService documentService; - public List getInvoices(String dbtrNumber) { - List result = new ArrayList(); - logger.info("....getInvoices for " + dbtrNumber); - if (dbtrNumber == null || dbtrNumber.isEmpty()) { - return result; + + /** + * Diese Methode liefert die Rechnungen zur gegebenen dbtrNumber. + * Die Methode nutzt einen lokalen cache um die Zugriffe zu beschleunigen. + * + * @param _dbtrNumber + * @return + */ + public List getInvoices(String _dbtrNumber) { + + + // return empty cache if data is not + if ( _dbtrNumber==null || _dbtrNumber.isEmpty()) { + invoiceCache= new ArrayList(); + return invoiceCache; } + + // if last dbtr number is equal then return the current cache.... + if (invoiceCache!=null && lastDbtrNumber!=null && lastDbtrNumber.equals(_dbtrNumber)) { + return invoiceCache; + } + + // refresh cache.... + lastDbtrNumber=_dbtrNumber; + invoiceCache= new ArrayList(); + logger.info("....caching Invoices for " + _dbtrNumber); + // Aus der dbtrNummer muss das führendde D entfernt werden // wir speichern dieses zwar im Zahlungseingangs Workflow, aber eine // Ausganksrechnung kennt das nicht // Das ganze ist ein übles Relikt aus Cargosoft und kann nicht vermieden werden - if (dbtrNumber.startsWith("D")) { - dbtrNumber = dbtrNumber.substring(1); + if (_dbtrNumber.startsWith("D")) { + _dbtrNumber = _dbtrNumber.substring(1); } String query = "(type:workitem OR type:workitemarchive) AND ($modelversion:rechnungsausgang-*) AND (dbtr.number:" - + dbtrNumber + ")"; + + _dbtrNumber + ")"; try { - result = documentService.find(query, 999, 0, "$created", false); + invoiceCache = documentService.find(query, 999, 0, "$created", false); } catch (QueryException e) { logger.severe("Failed to get op liste:" + e.getMessage()); } - return result; + return invoiceCache; } /** @@ -95,7 +120,10 @@ public class OPListController implements Serializable { List refids=workflowController.getWorkitem().getItemValueList("$workitemref",String.class); for (String id : refids) { - ItemCollection doc = documentService.load(id); + if (id.isEmpty()) { + continue; + } + ItemCollection doc = getInvoiceFromCache(id); if (doc!=null) { result = result + doc.getItemValueDouble("invoice.total"); } @@ -105,6 +133,23 @@ public class OPListController implements Serializable { } + /** + * Hilfsmethode holt eine Rechnung aus dem Cache. + * @param id + * @return + */ + private ItemCollection getInvoiceFromCache(String id) { + if (invoiceCache==null) { + return null; + } + for (ItemCollection invoice: invoiceCache) { + if (invoice.getUniqueID().equals(id)) { + return invoice; + } + } + return null; + } + /** * Berechnet den gesammten OP Saldo * @return 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 1ed0c27..27ce2b0 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 @@ -247,7 +247,7 @@ public class DatevCargosoftImportAdapter implements SignalAdapter { // berechne Total: double total=0; for (ItemCollection zeile: splitBuchungen) { - if ("S".equals(zeile.getItemValueString("datev.shzeichen")) ) { + if ("H".equals(zeile.getItemValueString("datev.shzeichen")) ) { total=total+zeile.getItemValueDouble("datev.umsatz"); } else { total=total-zeile.getItemValueDouble("datev.umsatz"); diff --git a/office-alexander-logistics-app/src/main/webapp/pages/workitems/forms/alexander/section_opliste.xhtml b/office-alexander-logistics-app/src/main/webapp/pages/workitems/forms/alexander/section_opliste.xhtml index 50bed72..0cc17c7 100644 --- a/office-alexander-logistics-app/src/main/webapp/pages/workitems/forms/alexander/section_opliste.xhtml +++ b/office-alexander-logistics-app/src/main/webapp/pages/workitems/forms/alexander/section_opliste.xhtml @@ -9,6 +9,9 @@ + + + @@ -46,6 +49,7 @@ - @@ -80,7 +85,7 @@
+ @@ -68,7 +72,8 @@ #{invoice.item['invoice.currency']} +
-