diff --git a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/CargosoftController.java b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/CargosoftController.java index d221b76..0e2d8a9 100644 --- a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/CargosoftController.java +++ b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/CargosoftController.java @@ -45,8 +45,7 @@ public class CargosoftController implements Serializable { private static final long serialVersionUID = 1L; private static Logger logger = Logger.getLogger(CargosoftController.class.getName()); - public static final String TYPE_CARGOSOFTKREDITOR = "cargosoftkreditor"; - + @Inject protected DocumentService documentService; @@ -97,7 +96,7 @@ public class CargosoftController implements Serializable { // die cargosoft Kreditornummer beginnt seltsamerweise mit einem K // und die Debitoren mit einem D..... - String query = "(type:" + TYPE_CARGOSOFTKREDITOR + ") AND ( (name:K" + phrase + "*) OR (name:D" + phrase + String query = "(type:" + KreditorDebitorService.TYPE_CARGOSOFTKREDITOR + ") AND ( (name:K" + phrase + "*) OR (name:D" + phrase + "*) OR (" + phrase.toLowerCase() + "*) )"; try { @@ -189,7 +188,7 @@ public class CargosoftController implements Serializable { // die cargosoft Kreditornummer beginnt seltsamerweise mit einem K // und die Debitoren mit einem D..... - String query = "(type:" + TYPE_CARGOSOFTKREDITOR + ") AND (name:D*) AND ((name:D" + phrase + String query = "(type:" + KreditorDebitorService.TYPE_CARGOSOFTKREDITOR + ") AND (name:D*) AND ((name:D" + phrase + "*) OR (" + phrase.toLowerCase() + "*) )"; try { @@ -197,13 +196,12 @@ public class CargosoftController implements Serializable { logger.info("found " + result.size() + " debitors..."); if (result != null) { for (ItemCollection dbtr : result) { - // Aenderugn 22. Jun wir geben das K/D direkt witer String dbtrNo = dbtr.getItemValueString("_VENDOR_NUM"); String display = dbtrNo + " - " + dbtr.getItemValueString("_VENDOR_Name"); - searchResult.add(new KreditorSearchEntry(dbtrNo, display, buildJsonData(dbtr))); - - + display=display.replace("\"",""); + display=display.replace("'",""); + searchResult.add(new KreditorSearchEntry(dbtrNo, display, buildJsonData(dbtr))); } } } catch (QueryException e) { @@ -217,13 +215,12 @@ public class CargosoftController implements Serializable { * @return */ private String buildJsonData(ItemCollection cdtr, String iban, String bic) { - JsonObjectBuilder objectBuilder = Json.createObjectBuilder(). // - add("no", cdtr.getItemValueString("_VENDOR_NUM")). // + add("no", jsonVal(cdtr.getItemValueString("_VENDOR_NUM"))). // add("name", cdtr.getItemValueString("_VENDOR_Name")). // - add("creditperiod", cdtr.getItemValueString("cdtr.creditperiod")). // - add("iban", iban). // - add("bic", bic); + add("creditperiod", jsonVal(cdtr.getItemValueString("cdtr.creditperiod"))). // + add("iban", jsonVal(iban)). // + add("bic", jsonVal(bic)); JsonObject jsonObject = objectBuilder.build(); String jsonString = "{}"; @@ -245,18 +242,18 @@ public class CargosoftController implements Serializable { private String buildJsonData(ItemCollection cdtr) { JsonObjectBuilder objectBuilder = Json.createObjectBuilder(). // - add("no", cdtr.getItemValueString("_VENDOR_NUM")). // - add("name", cdtr.getItemValueString("_VENDOR_Name")). // - add("creditperiod", cdtr.getItemValueString("cdtr.creditperiod")). // - add("iban", cdtr.getItemValueString("cdtr.iban")). // - add("bic", cdtr.getItemValueString("cdtr.bic")). // + add("no", jsonVal(cdtr.getItemValueString("_VENDOR_NUM"))). // + add("name", jsonVal(cdtr.getItemValueString("_VENDOR_Name"))). // + add("creditperiod", jsonVal(cdtr.getItemValueString("cdtr.creditperiod"))). // + add("iban", jsonVal(cdtr.getItemValueString("cdtr.iban"))). // + add("bic", jsonVal(cdtr.getItemValueString("cdtr.bic"))). // // add ibans für kreditoren verwaltung - add("iban2", cdtr.getItemValueString("cdtr.iban2")). // - add("iban3", cdtr.getItemValueString("cdtr.iban3")). // - add("iban4", cdtr.getItemValueString("cdtr.iban4")). // - add("bic2", cdtr.getItemValueString("cdtr.bic2")). // - add("bic3", cdtr.getItemValueString("cdtr.bic3")). // - add("bic4", cdtr.getItemValueString("cdtr.bic4")); // + add("iban2", jsonVal(cdtr.getItemValueString("cdtr.iban2"))). // + add("iban3", jsonVal(cdtr.getItemValueString("cdtr.iban3"))). // + add("iban4", jsonVal(cdtr.getItemValueString("cdtr.iban4"))). // + add("bic2", jsonVal(cdtr.getItemValueString("cdtr.bic2"))). // + add("bic3", jsonVal(cdtr.getItemValueString("cdtr.bic3"))). // + add("bic4", jsonVal(cdtr.getItemValueString("cdtr.bic4"))); // JsonObject jsonObject = objectBuilder.build(); @@ -269,6 +266,17 @@ public class CargosoftController implements Serializable { } return jsonString; } + + /** + * Helper method to remove " and ' characters - causing problems + * @param val + * @return + */ + public static String jsonVal(String val) { + val=val.replace("\"", ""); + val=val.replace("'", ""); + return val; + } /** * Die Resultliste wird als eine Liste einen Arrays zurückgegeben. Der Erste @@ -309,7 +317,7 @@ public class CargosoftController implements Serializable { logger.fine("Zahlungsziel = " + cdtrNumber); // search workitem - String query = "(type:" + TYPE_CARGOSOFTKREDITOR + ") AND (name:" + cdtrNumber + ")"; + String query = "(type:" + KreditorDebitorService.TYPE_CARGOSOFTKREDITOR + ") AND (name:" + cdtrNumber + ")"; List result; try { diff --git a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/InvoicePlugin.java b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/InvoicePlugin.java index 1ff6449..6394b0a 100644 --- a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/InvoicePlugin.java +++ b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/InvoicePlugin.java @@ -54,7 +54,7 @@ public class InvoicePlugin extends AbstractPlugin { private static Logger logger = Logger.getLogger(InvoicePlugin.class.getName()); @Inject - KreditorService kreditorService; + KreditorDebitorService kreditorService; /** * Test childworkitems for empty lines @@ -350,7 +350,7 @@ public class InvoicePlugin extends AbstractPlugin { } // search the kreditor - ItemCollection cdtr = kreditorService.findCreditor(cdtrNumber); + ItemCollection cdtr = kreditorService.findCreditorDebitor(cdtrNumber); if (cdtr != null) { // Prüfen ob wir die IBAN schon kennen if (iban.equals(cdtr.getItemValueString("cdtr.iban")) && bic.equals(cdtr.getItemValueString("cdtr.bic"))) { diff --git a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/KreditorDebitorService.java b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/KreditorDebitorService.java new file mode 100644 index 0000000..d771bd5 --- /dev/null +++ b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/KreditorDebitorService.java @@ -0,0 +1,205 @@ +/******************************************************************************* + * Imixs Workflow + * Copyright (C) 2001, 2011 Imixs Software Solutions GmbH, + * http://www.imixs.com + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You can receive a copy of the GNU General Public + * License at http://www.gnu.org/licenses/gpl.html + * + * Project: + * http://www.imixs.org + * http://java.net/projects/imixs-workflow + * + * Contributors: + * Imixs Software Solutions GmbH - initial API and implementation + * Ralph Soika - Software Developer + *******************************************************************************/ + +package com.alexanderlogistics; + +import java.util.List; +import java.util.logging.Logger; + +import javax.annotation.security.DeclareRoles; +import javax.annotation.security.RolesAllowed; +import javax.annotation.security.RunAs; +import javax.ejb.EJB; +import javax.ejb.Singleton; + +import org.imixs.workflow.ItemCollection; +import org.imixs.workflow.engine.DocumentService; +import org.imixs.workflow.exceptions.PluginException; +import org.imixs.workflow.exceptions.QueryException; + +/** + * Der KreditorService wird verwendet um einen Kreditor zu finden oder neue + * IBAN/BIC kombinationen aufzunehmen. + * + * @author rsoika + * + */ + +@DeclareRoles({ "org.imixs.ACCESSLEVEL.NOACCESS", "org.imixs.ACCESSLEVEL.READERACCESS", + "org.imixs.ACCESSLEVEL.AUTHORACCESS", "org.imixs.ACCESSLEVEL.EDITORACCESS", + "org.imixs.ACCESSLEVEL.MANAGERACCESS" }) +@RolesAllowed({ "org.imixs.ACCESSLEVEL.NOACCESS", "org.imixs.ACCESSLEVEL.READERACCESS", + "org.imixs.ACCESSLEVEL.AUTHORACCESS", "org.imixs.ACCESSLEVEL.EDITORACCESS", + "org.imixs.ACCESSLEVEL.MANAGERACCESS" }) +@Singleton +@RunAs("org.imixs.ACCESSLEVEL.MANAGERACCESS") +public class KreditorDebitorService { + public static final String TYPE_CARGOSOFTKREDITOR = "cargosoftkreditor"; + + @SuppressWarnings("unused") + private static Logger logger = Logger.getLogger(KreditorDebitorService.class.getName()); + + @EJB + DocumentService documentService; + + /** + * Diese Method sucht einen Kreditor/Debitor. Bei Cargosoft haben kreditoren und debitoren + * die selbe nummer und haben nur ein führendes D/K (Absolutler Irrsinn) + *

+ * Diese Methode erwartet das führende K oder D + * + * @throws PluginException + */ + public ItemCollection findCreditorDebitor(String cdtrNumber) throws PluginException { + + if (cdtrNumber==null || !(cdtrNumber.startsWith("K") || cdtrNumber.startsWith("D"))) { + throw new PluginException(PluginException.class.getName(), "QUERY ERROR", "Invalid debitor/creditor number - prafix K/D expected!"); + } + try { + String query = "(type:" + TYPE_CARGOSOFTKREDITOR + ") AND (name:" + cdtrNumber + ")"; + List result = documentService.find(query, 1, 0, "$modified", true); + if (result.size() > 0) { + return result.get(0); + + } + } catch (QueryException e) { + throw new PluginException(PluginException.class.getName(), "QUERY ERROR", e.getMessage(), e); + } + + return null; + } + + + /** + * Diese Method sucht einen Kreditor. + *

+ * Diese Methode erwartet das führende K + * + * @throws PluginException + */ + public ItemCollection findCreditor(String cdtrNumber) throws PluginException { + + if ((!cdtrNumber.startsWith("K"))) { + cdtrNumber="K"+cdtrNumber; + } + try { + String query = "(type:" + TYPE_CARGOSOFTKREDITOR + ") AND (name:" + cdtrNumber + ")"; + List result = documentService.find(query, 1, 0, "$modified", true); + if (result.size() > 0) { + return result.get(0); + + } + } catch (QueryException e) { + throw new PluginException(PluginException.class.getName(), "QUERY ERROR", e.getMessage(), e); + } + + return null; + } + + /** + * Diese Method sucht einen Debitor. + *

+ * Diese Methode erwartet das führende D + * + * @throws PluginException + */ + public ItemCollection findDebitor(String dbtrNumber) throws PluginException { + + if ((!dbtrNumber.startsWith("D"))) { + dbtrNumber="D"+dbtrNumber; + } + try { + String query = "(type:" + TYPE_CARGOSOFTKREDITOR + ") AND (name:" + dbtrNumber + ")"; + List result = documentService.find(query, 1, 0, "$modified", true); + if (result.size() > 0) { + return result.get(0); + + } + } catch (QueryException e) { + throw new PluginException(PluginException.class.getName(), "QUERY ERROR", e.getMessage(), e); + } + + return null; + } + + + + /** + * Diese Methode übertragt neue IBAN/BIC kombis in den kreditor + * + * @param cdtrNumber + * @param iban + * @param bic + * @throws PluginException + */ + public void addNewIBANBIC(String cdtrNumber, String iban, String bic) throws PluginException { + ItemCollection cdtr = findCreditorDebitor(cdtrNumber); + + if (cdtr != null) { + + // Wir rotieren die nummern nach unten + cdtr.setItemValue("cdtr.iban4", cdtr.getItemValue("cdtr.iban3")); + cdtr.setItemValue("cdtr.bic4", cdtr.getItemValue("cdtr.bic3")); + cdtr.setItemValue("cdtr.iban3", cdtr.getItemValue("cdtr.iban2")); + cdtr.setItemValue("cdtr.bic3", cdtr.getItemValue("cdtr.bic2")); + cdtr.setItemValue("cdtr.iban2", cdtr.getItemValue("cdtr.iban")); + cdtr.setItemValue("cdtr.bic2", cdtr.getItemValue("cdtr.bic")); + // clear slot 0 + cdtr.setItemValue("cdtr.iban", ""); + cdtr.setItemValue("cdtr.bic", ""); + + // nun können wir die neue IBAN/BIC in die erste frei park position legen + if (cdtr.getItemValueString("cdtr.iban").isEmpty()) { + cdtr.setItemValue("cdtr.iban", iban); + cdtr.setItemValue("cdtr.bic", bic); + documentService.save(cdtr); + return; + } + if (cdtr.getItemValueString("cdtr.iban2").isEmpty()) { + cdtr.setItemValue("cdtr.iban2", iban); + cdtr.setItemValue("cdtr.bic2", bic); + documentService.save(cdtr); + return; + } + if (cdtr.getItemValueString("cdtr.iban3").isEmpty()) { + cdtr.setItemValue("cdtr.iban3", iban); + cdtr.setItemValue("cdtr.bic3", bic); + documentService.save(cdtr); + return; + } + if (cdtr.getItemValueString("cdtr.iban4").isEmpty()) { + cdtr.setItemValue("cdtr.iban4", iban); + cdtr.setItemValue("cdtr.bic4", bic); + documentService.save(cdtr); + return; + } + + } + + } + +} diff --git a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/KreditorService.java b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/KreditorService.java deleted file mode 100644 index 1bc98a6..0000000 --- a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/KreditorService.java +++ /dev/null @@ -1,144 +0,0 @@ -/******************************************************************************* - * Imixs Workflow - * Copyright (C) 2001, 2011 Imixs Software Solutions GmbH, - * http://www.imixs.com - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You can receive a copy of the GNU General Public - * License at http://www.gnu.org/licenses/gpl.html - * - * Project: - * http://www.imixs.org - * http://java.net/projects/imixs-workflow - * - * Contributors: - * Imixs Software Solutions GmbH - initial API and implementation - * Ralph Soika - Software Developer - *******************************************************************************/ - -package com.alexanderlogistics; - -import java.util.List; -import java.util.logging.Logger; - -import javax.annotation.security.DeclareRoles; -import javax.annotation.security.RolesAllowed; -import javax.annotation.security.RunAs; -import javax.ejb.EJB; -import javax.ejb.Singleton; - -import org.imixs.workflow.ItemCollection; -import org.imixs.workflow.engine.DocumentService; -import org.imixs.workflow.exceptions.PluginException; -import org.imixs.workflow.exceptions.QueryException; - -/** - * Der KreditorService wird verwendet um einen Kreditor zu finden oder neue - * IBAN/BIC kombinationen aufzunehmen. - * - * @author rsoika - * - */ - -@DeclareRoles({ "org.imixs.ACCESSLEVEL.NOACCESS", "org.imixs.ACCESSLEVEL.READERACCESS", - "org.imixs.ACCESSLEVEL.AUTHORACCESS", "org.imixs.ACCESSLEVEL.EDITORACCESS", - "org.imixs.ACCESSLEVEL.MANAGERACCESS" }) -@RolesAllowed({ "org.imixs.ACCESSLEVEL.NOACCESS", "org.imixs.ACCESSLEVEL.READERACCESS", - "org.imixs.ACCESSLEVEL.AUTHORACCESS", "org.imixs.ACCESSLEVEL.EDITORACCESS", - "org.imixs.ACCESSLEVEL.MANAGERACCESS" }) -@Singleton -@RunAs("org.imixs.ACCESSLEVEL.MANAGERACCESS") -public class KreditorService { - - @SuppressWarnings("unused") - private static Logger logger = Logger.getLogger(KreditorService.class.getName()); - - @EJB - DocumentService documentService; - - /** - * sucht einen Kreditor - * - * - * @throws PluginException - */ - public ItemCollection findCreditor(String cdtrNumber) throws PluginException { - - try { - String query = "(type:" + CargosoftController.TYPE_CARGOSOFTKREDITOR + ") AND (name:" + cdtrNumber + ")"; - List result = documentService.find(query, 1, 0, "$modified", true); - if (result.size() > 0) { - return result.get(0); - - } - } catch (QueryException e) { - throw new PluginException(PluginException.class.getName(), "QUERY ERROR", e.getMessage(), e); - } - - return null; - } - - /** - * Diese Methode übertragt neue IBAN/BIC kombis in den kreditor - * - * @param cdtrNumber - * @param iban - * @param bic - * @throws PluginException - */ - public void addNewIBANBIC(String cdtrNumber, String iban, String bic) throws PluginException { - ItemCollection cdtr = findCreditor(cdtrNumber); - - if (cdtr != null) { - - // Wir rotieren die nummern nach unten - cdtr.setItemValue("cdtr.iban4", cdtr.getItemValue("cdtr.iban3")); - cdtr.setItemValue("cdtr.bic4", cdtr.getItemValue("cdtr.bic3")); - cdtr.setItemValue("cdtr.iban3", cdtr.getItemValue("cdtr.iban2")); - cdtr.setItemValue("cdtr.bic3", cdtr.getItemValue("cdtr.bic2")); - cdtr.setItemValue("cdtr.iban2", cdtr.getItemValue("cdtr.iban")); - cdtr.setItemValue("cdtr.bic2", cdtr.getItemValue("cdtr.bic")); - // clear slot 0 - cdtr.setItemValue("cdtr.iban", ""); - cdtr.setItemValue("cdtr.bic", ""); - - // nun können wir die neue IBAN/BIC in die erste frei park position legen - if (cdtr.getItemValueString("cdtr.iban").isEmpty()) { - cdtr.setItemValue("cdtr.iban", iban); - cdtr.setItemValue("cdtr.bic", bic); - documentService.save(cdtr); - return; - } - if (cdtr.getItemValueString("cdtr.iban2").isEmpty()) { - cdtr.setItemValue("cdtr.iban2", iban); - cdtr.setItemValue("cdtr.bic2", bic); - documentService.save(cdtr); - return; - } - if (cdtr.getItemValueString("cdtr.iban3").isEmpty()) { - cdtr.setItemValue("cdtr.iban3", iban); - cdtr.setItemValue("cdtr.bic3", bic); - documentService.save(cdtr); - return; - } - if (cdtr.getItemValueString("cdtr.iban4").isEmpty()) { - cdtr.setItemValue("cdtr.iban4", iban); - cdtr.setItemValue("cdtr.bic4", bic); - documentService.save(cdtr); - return; - } - - } - - } - -} 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 new file mode 100644 index 0000000..73bd7ad --- /dev/null +++ b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/OPListController.java @@ -0,0 +1,103 @@ +package com.alexanderlogistics; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; +import java.util.logging.Logger; + +import javax.enterprise.context.ConversationScoped; +import javax.inject.Inject; +import javax.inject.Named; + +import org.imixs.workflow.ItemCollection; +import org.imixs.workflow.engine.DocumentService; +import org.imixs.workflow.exceptions.QueryException; +import org.imixs.workflow.faces.data.WorkflowController; + +/** + * Der OPListeController dient dazu eine liste aller offenen Ausgangsrechnungen + * zu bilden + *

+ * Zusätzlich bietet er die funktionen zum auszifferne..(??) + * + * @author rsoika + * + */ +@Named("opListController") +@ConversationScoped +public class OPListController implements Serializable { + + private static final long serialVersionUID = 1L; + + private static Logger logger = Logger.getLogger(OPListController.class.getName()); + + @Inject + protected WorkflowController workflowController; + + @Inject + protected DocumentService documentService; + + + public List getInvoices(String dbtrNumber) { + List result=new ArrayList(); + + // 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); + } + String query = "(type:workitem OR type:workitemarchive) AND ($modelversion:rechnungsausgang-*) AND (dbtr.number:" + dbtrNumber+")"; + + try { + result= documentService.find(query, 999, 0, "$created", false); + } catch (QueryException e) { + logger.severe("Failed to get op liste:" + e.getMessage()); + } + + + + return result; + } + /** + * This method computes the sum for a given item in a list of workitems. The + * result is rounded to 2 digits. + *

+ * Gutschriften werden abgezogen + * + * @param refids - list of workitem uniqueIds + * @param item - name of the item to summarize + * @return sum rounded to 2 digits + */ + public double calculateSum(List refids, String item) { + double result = 0; + for (String id : refids) { + ItemCollection doc = documentService.load(id); + if (doc != null) { + if ("credit".equals(doc.getItemValueString("payment.type"))) { + result = result + doc.getItemValueDouble(item); + } else { + result = result - doc.getItemValueDouble(item); + } + } else { + logger.warning("invalid read access to calculate sum"); + } + } + // rond with 2 digits + return Math.round(result * 100.0) / 100.0; + + } + + /** + * This method removes an uniqueid form the item $workitemref + */ + @SuppressWarnings("unchecked") + public void removeInvoice(String id) { + + List refList = workflowController.getWorkitem().getItemValue("$workitemref"); + + refList.remove(id); + workflowController.getWorkitem().setItemValue("$workitemref", refList); + } + +} 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 7354fff..1ed0c27 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 @@ -25,9 +25,8 @@ import org.imixs.workflow.exceptions.AdapterException; import org.imixs.workflow.exceptions.ModelException; import org.imixs.workflow.exceptions.PluginException; import org.imixs.workflow.exceptions.ProcessingErrorException; -import org.imixs.workflow.exceptions.QueryException; -import com.alexanderlogistics.CargosoftController; +import com.alexanderlogistics.KreditorDebitorService; /** * Der DatevCargosoftImportAdapter liest eine von Cargosoft bereitgestellte @@ -54,6 +53,9 @@ public class DatevCargosoftImportAdapter implements SignalAdapter { @Inject DocumentService documentService; + + @Inject + KreditorDebitorService kreditorDebitorService; /** * This method finds or create the Datev Export and adds a reference @@ -208,6 +210,7 @@ public class DatevCargosoftImportAdapter implements SignalAdapter { invoiceWorkitem.setItemValue("invoice.text", text); invoiceWorkitem.setItemValue("invoice.date", dateBuchung); invoiceWorkitem.setItemValue("dbtr.number", gegenKonto); + return invoiceWorkitem; } @@ -257,7 +260,7 @@ public class DatevCargosoftImportAdapter implements SignalAdapter { implodeChildList(invoiceWorkitem, splitBuchungen); // set dbtr.name - ItemCollection dbtrItemCol=findDbtr(invoiceWorkitem.getItemValueString("dbtr.number")); + ItemCollection dbtrItemCol=kreditorDebitorService.findDebitor(invoiceWorkitem.getItemValueString("dbtr.number")); if (dbtrItemCol!=null) { invoiceWorkitem.setItemValue("dbtr.name", dbtrItemCol.getItemValueString("_VENDOR_Name")); } @@ -291,25 +294,6 @@ public class DatevCargosoftImportAdapter implements SignalAdapter { } - /** - * This method searches a dbtr by number - */ - private ItemCollection findDbtr(String number) { - // die cargosoft Kreditornummer beginnt seltsamerweise mit einem K - // und die Debitoren mit einem D..... - String query = "(type:" + CargosoftController.TYPE_CARGOSOFTKREDITOR + ") AND (name:D" + number+")"; - - try { - List result = documentService.find(query, 1, 0, "$modified", true); - logger.info("found " + result.size() + " debitors..."); - if (result != null && result.size()>0) { - return result.get(0); - - } - } catch (QueryException e) { - e.printStackTrace(); - } - return null; - } + } \ No newline at end of file diff --git a/office-alexander-logistics-app/src/main/resources/imixs.properties b/office-alexander-logistics-app/src/main/resources/imixs.properties index 2bfb109..0548dc4 100644 --- a/office-alexander-logistics-app/src/main/resources/imixs.properties +++ b/office-alexander-logistics-app/src/main/resources/imixs.properties @@ -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 +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 index.fields.analyze=txtUsername -index.fields.noanalyze=type,$UniqueIDRef,$created,$modified,$ModelVersion,$participants,namCreator,$ProcessID,datDate,txtWorkflowGroup,txtemail, datdate, datfrom, datto, numsequencenumber,dms_count,invoice.number,invoice.number.stripped,invoice.duedate,taxonomy.verteilung.stop,taxonomy.sachpruefung.stop,taxonomy.verteilung.start,taxonomy.sachpruefung.start,taxonomy.buchhaltung.start,taxonomy.buchhaltung.stop +index.fields.noanalyze=type,$UniqueIDRef,$created,$modified,$ModelVersion,$participants,namCreator,$ProcessID,datDate,txtWorkflowGroup,txtemail, datdate, datfrom, datto, numsequencenumber,dms_count,invoice.number,invoice.number.stripped,invoice.duedate,taxonomy.verteilung.stop,taxonomy.sachpruefung.stop,taxonomy.verteilung.start,taxonomy.sachpruefung.start,taxonomy.buchhaltung.start,taxonomy.buchhaltung.stop,dbtr.number,cdtr.number index.fields.store=process.name,txtProcessName,txtWorkflowImageURL 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 diff --git a/office-alexander-logistics-app/src/main/webapp/pages/workitems/forms/alexander/cargsoft-debitor-search.xhtml b/office-alexander-logistics-app/src/main/webapp/pages/workitems/forms/alexander/cargsoft-debitor-search.xhtml index 406113e..0bfdfed 100644 --- a/office-alexander-logistics-app/src/main/webapp/pages/workitems/forms/alexander/cargsoft-debitor-search.xhtml +++ b/office-alexander-logistics-app/src/main/webapp/pages/workitems/forms/alexander/cargsoft-debitor-search.xhtml @@ -38,9 +38,10 @@ autocompleteInitInput(this,cargosoftSearch,'autocomplete-resultlist-cargosoft',selectDbtrCallback); }); // add cargsoft label if available - var cdtrName="#{workflowController.workitem.item['dbtr.name.cargosoft']}"; - var inputElement=$("input[data-item='dbtr.number']"); - //inputElement.after( "" + cdtrName + "

" ); + var dbtrName="#{workflowController.workitem.item['dbtr.name']}"; + // append span with dbtr.name.... + creditorField.after( "" + dbtrName + "

" ); + //var inputElement=$("input[data-item='dbtr.number']"); }); // Hier bekommen wir die JSON Struktur mit allen daten. @@ -57,7 +58,12 @@ // append span with dbtr.name.... inputElement.after( "" + dbtrData.name + "

" ); + var inputElementDbtrName=$("input[id$='dbtr_name']"); + if (inputElementDbtrName) { + inputElementDbtrName.val(dbtrData.name); + } var inputElementZahlungsziel=$("input[data-item='dbtr.creditperiod']"); + var inputElementZahlungszielDbtr=$("input[id$='dbtr_creditperiod']"); var inputElementInvoiceDate=$("input[id$='date_invoice']"); var inputElementIban=$("input[data-item='dbtr.iban']"); @@ -74,9 +80,6 @@ } - - - } /*]]>*/ @@ -84,11 +87,8 @@ + - - - - diff --git a/office-alexander-logistics-app/src/main/webapp/pages/workitems/forms/opliste.xhtml b/office-alexander-logistics-app/src/main/webapp/pages/workitems/forms/opliste.xhtml new file mode 100644 index 0000000..d22307b --- /dev/null +++ b/office-alexander-logistics-app/src/main/webapp/pages/workitems/forms/opliste.xhtml @@ -0,0 +1,124 @@ + + + + + + + +

Invoices

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#{message['form.invoicenumber']}#{message['form.date']}#{message['form.deadline']}DebitCredit
+ #{invoice.item['invoice.number']} + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Summary + + #{invoice.item['invoice.currency']} + +
+ + + + + + + +
+ + + + + +
+ diff --git a/workflow/zahlungseingang-de-1.0.0.bpmn b/workflow/zahlungseingang-de-1.0.0.bpmn index f81edb8..b7ebeec 100644 --- a/workflow/zahlungseingang-de-1.0.0.bpmn +++ b/workflow/zahlungseingang-de-1.0.0.bpmn @@ -188,7 +188,7 @@ result.isValid=true; cdtr.name.cargosoft $modified (cdtr.number)]]> - +