From aa5f0007156cbbe5537acc7bee0507f8d39f37ab Mon Sep 17 00:00:00 2001 From: Ralph Soika Date: Sun, 27 Apr 2025 16:27:51 +0200 Subject: [PATCH] refactoring business data - neue Logik --- RELEASENOTES.md | 11 +- .../CargosoftController.java | 0 .../DatevCargosoftImportAdapter.java | 1 - .../KreditorDebitorService.java | 0 .../KreditorSearchEntry.java | 0 .../SEPAExportAdapterNBD.java | 0 .../cargsoft-creditor-search.xhtml | 0 .../deprecated/cargsoft-debitor-search.xhtml | 84 +++ .../cdtreingabe.xhtml | 0 .../debitor_search.xhtml | 0 .../AGLAnalyticControllerDebitor.java | 1 + .../BusinessPartnerController.java | 63 +++ .../BusinessPartnerService.java | 54 ++ .../DebitorStatistikController.java | 16 +- .../InvoiceOutgoingPlugin.java | 3 - .../com/alexanderlogistics/InvoicePlugin.java | 53 +- .../alexanderlogistics/OPListController.java | 20 +- .../SteuerbescheidPlugin.java | 3 - .../mahnlauf/MahnlaufRefAddAdapter.java | 16 +- .../xml/BusinessPartnerImportService.java | 6 +- .../xml/CargosoftXMLEAkteImportService.java | 63 +-- .../xml/CargosoftXMLInvoiceImportService.java | 35 +- .../alexander/cargsoft-debitor-search.xhtml | 90 ---- .../alexander/businesspartner_search.xhtml | 17 +- .../TestPostionsnummernRegex.java | 10 - .../xml/EAkteImportTester.java | 4 +- .../xml/InvoiceImportTester.java | 6 +- workflow/analyse-debitor-en-1.0.1-draft.bpmn | 480 +++++++++++++++++ .../analyse-debitor-en-1.0.0.bpmn | 0 .../analyse-debitor-en-1.0.1-draft.bpmn | 481 ++++++++++++++++++ .../dwc/zahlungseingang-dwc-1.0.3-draft.bpmn | 146 +++++- 31 files changed, 1436 insertions(+), 227 deletions(-) rename office-alexander-logistics-app/src/main/{java/com/alexanderlogistics => deprecated}/CargosoftController.java (100%) rename office-alexander-logistics-app/src/main/{java/com/alexanderlogistics/datev => deprecated}/DatevCargosoftImportAdapter.java (99%) rename office-alexander-logistics-app/src/main/{java/com/alexanderlogistics => deprecated}/KreditorDebitorService.java (100%) rename office-alexander-logistics-app/src/main/{java/com/alexanderlogistics => deprecated}/KreditorSearchEntry.java (100%) rename office-alexander-logistics-app/src/main/{java/com/alexanderlogistics/dwc => deprecated}/SEPAExportAdapterNBD.java (100%) rename office-alexander-logistics-app/src/main/{webapp/pages/workitems/forms/alexander => deprecated}/cargsoft-creditor-search.xhtml (100%) create mode 100644 office-alexander-logistics-app/src/main/deprecated/cargsoft-debitor-search.xhtml rename office-alexander-logistics-app/src/main/{webapp/pages/workitems/parts/alexander => deprecated}/cdtreingabe.xhtml (100%) rename office-alexander-logistics-app/src/main/{webapp/pages/workitems/parts/alexander => deprecated}/debitor_search.xhtml (100%) delete mode 100644 office-alexander-logistics-app/src/main/webapp/pages/workitems/forms/alexander/cargsoft-debitor-search.xhtml create mode 100644 workflow/analyse-debitor-en-1.0.1-draft.bpmn rename workflow/dwc/{ => deprecated}/analyse-debitor-en-1.0.0.bpmn (100%) create mode 100644 workflow/dwc/deprecated/analyse-debitor-en-1.0.1-draft.bpmn diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 7a3ad91..aaa5304 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -6,7 +6,7 @@ |- Neue Plugin Logik (Aktualisierung der BP Nummer und Aktivierung von BP Objekten falls diese archiviert waren) - Zoho Schnittstelle -**Migration** +#### Migration - Encoding für CSV Impoort aus cargosoft muss auf `encoding=UTF-8` stehen! - Neues Businesspartner BPMN Modell einspielen @@ -22,9 +22,16 @@ - Modelle Anpassen -in allen Rechnungsmodellen müssen die alten form parts `alexander/cdtreingabe` und `alexander/dbtreingabe` mit dem neuen `alexander/businesspartner_search` ausgetauscht werden. +in verschiedenen müssen die alten form parts `alexander/cdtreingabe` und `alexander/dbtreingabe` mit dem neuen `alexander/businesspartner_search` ausgetauscht werden. Der `BusinessPartnerController` bzw. das `InvoicePlugin` bzw. `InvoiceOutgoingPlugin` kümmert sich automatisch um die Migration +Betroffen sind: + +- reingsungseingang +- rechnungsausgang +- zahlungseingang +- Analyse-debitor + ### 1.3.3 - Imixs-Archive 3.1.1. Compactor Sevrvice diff --git a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/CargosoftController.java b/office-alexander-logistics-app/src/main/deprecated/CargosoftController.java similarity index 100% rename from office-alexander-logistics-app/src/main/java/com/alexanderlogistics/CargosoftController.java rename to office-alexander-logistics-app/src/main/deprecated/CargosoftController.java diff --git a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/datev/DatevCargosoftImportAdapter.java b/office-alexander-logistics-app/src/main/deprecated/DatevCargosoftImportAdapter.java similarity index 99% rename from office-alexander-logistics-app/src/main/java/com/alexanderlogistics/datev/DatevCargosoftImportAdapter.java rename to office-alexander-logistics-app/src/main/deprecated/DatevCargosoftImportAdapter.java index 6a9a173..ea43f6a 100644 --- a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/datev/DatevCargosoftImportAdapter.java +++ b/office-alexander-logistics-app/src/main/deprecated/DatevCargosoftImportAdapter.java @@ -27,7 +27,6 @@ import org.imixs.workflow.exceptions.ProcessingErrorException; import org.imixs.workflow.exceptions.QueryException; import com.alexanderlogistics.InvoiceUtil; -import com.alexanderlogistics.KreditorDebitorService; import com.alexanderlogistics.mahnlauf.MahnlaufService; import jakarta.inject.Inject; diff --git a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/KreditorDebitorService.java b/office-alexander-logistics-app/src/main/deprecated/KreditorDebitorService.java similarity index 100% rename from office-alexander-logistics-app/src/main/java/com/alexanderlogistics/KreditorDebitorService.java rename to office-alexander-logistics-app/src/main/deprecated/KreditorDebitorService.java diff --git a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/KreditorSearchEntry.java b/office-alexander-logistics-app/src/main/deprecated/KreditorSearchEntry.java similarity index 100% rename from office-alexander-logistics-app/src/main/java/com/alexanderlogistics/KreditorSearchEntry.java rename to office-alexander-logistics-app/src/main/deprecated/KreditorSearchEntry.java diff --git a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/dwc/SEPAExportAdapterNBD.java b/office-alexander-logistics-app/src/main/deprecated/SEPAExportAdapterNBD.java similarity index 100% rename from office-alexander-logistics-app/src/main/java/com/alexanderlogistics/dwc/SEPAExportAdapterNBD.java rename to office-alexander-logistics-app/src/main/deprecated/SEPAExportAdapterNBD.java diff --git a/office-alexander-logistics-app/src/main/webapp/pages/workitems/forms/alexander/cargsoft-creditor-search.xhtml b/office-alexander-logistics-app/src/main/deprecated/cargsoft-creditor-search.xhtml similarity index 100% rename from office-alexander-logistics-app/src/main/webapp/pages/workitems/forms/alexander/cargsoft-creditor-search.xhtml rename to office-alexander-logistics-app/src/main/deprecated/cargsoft-creditor-search.xhtml diff --git a/office-alexander-logistics-app/src/main/deprecated/cargsoft-debitor-search.xhtml b/office-alexander-logistics-app/src/main/deprecated/cargsoft-debitor-search.xhtml new file mode 100644 index 0000000..d2e6c8b --- /dev/null +++ b/office-alexander-logistics-app/src/main/deprecated/cargsoft-debitor-search.xhtml @@ -0,0 +1,84 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/office-alexander-logistics-app/src/main/webapp/pages/workitems/parts/alexander/cdtreingabe.xhtml b/office-alexander-logistics-app/src/main/deprecated/cdtreingabe.xhtml similarity index 100% rename from office-alexander-logistics-app/src/main/webapp/pages/workitems/parts/alexander/cdtreingabe.xhtml rename to office-alexander-logistics-app/src/main/deprecated/cdtreingabe.xhtml diff --git a/office-alexander-logistics-app/src/main/webapp/pages/workitems/parts/alexander/debitor_search.xhtml b/office-alexander-logistics-app/src/main/deprecated/debitor_search.xhtml similarity index 100% rename from office-alexander-logistics-app/src/main/webapp/pages/workitems/parts/alexander/debitor_search.xhtml rename to office-alexander-logistics-app/src/main/deprecated/debitor_search.xhtml diff --git a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/AGLAnalyticControllerDebitor.java b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/AGLAnalyticControllerDebitor.java index fef6f14..49fb864 100644 --- a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/AGLAnalyticControllerDebitor.java +++ b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/AGLAnalyticControllerDebitor.java @@ -92,6 +92,7 @@ public class AGLAnalyticControllerDebitor implements Serializable { } String dbtrNumber = event.getWorkitem().getItemValueString("dbtr.number"); + logger.info("Analytic Event : " + dbtrNumber); String dbtrNumberLast = event.getWorkitem().getItemValueString("dbtr.number.last"); // Recompute only if last dbtr.number has changed or no values yet computed diff --git a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/BusinessPartnerController.java b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/BusinessPartnerController.java index 74db841..81b0d7d 100644 --- a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/BusinessPartnerController.java +++ b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/BusinessPartnerController.java @@ -37,6 +37,7 @@ import org.imixs.workflow.ItemCollection; import org.imixs.workflow.engine.DocumentService; import org.imixs.workflow.exceptions.AccessDeniedException; import org.imixs.workflow.exceptions.QueryException; +import org.imixs.workflow.faces.data.WorkflowController; import org.imixs.workflow.faces.data.WorkflowEvent; import jakarta.enterprise.context.ConversationScoped; @@ -67,6 +68,9 @@ public class BusinessPartnerController implements Serializable { protected List invoicesIn = null; protected List dunnings = null; + @Inject + protected WorkflowController workflowController; + @Inject DocumentService documentService; @@ -299,6 +303,65 @@ public class BusinessPartnerController implements Serializable { } } + /** + * This JSF backing method is called by businesspartner_serach.xhtml after the + * user has selected a new businesspartner. + *

+ * The method lookups the given BusinessPartner and updates the metadata for + * dbtr/cdtr depending on the workflow type. + * A form will than rerender the opList section. + */ + public void updateMetaData() { + FacesContext fc = FacesContext.getCurrentInstance(); + String bpid = fc.getExternalContext().getRequestParameterMap().get("partnerID"); + logger.fine(".........bpid = " + bpid); + ItemCollection businessPartner = businessPartnerService.getBusinessPartnerByID(bpid); + if (businessPartner != null) { + + // Eingangsrechnung + if (InvoiceUtil.isCreditorInvoice(workflowController.getWorkitem())) { + workflowController.getWorkitem().setItemValue("cdtr.number", + businessPartner.getItemValueString("cdtr.number")); + workflowController.getWorkitem().setItemValue("cdtr.name", + businessPartner.getItemValueString("partner.name")); + workflowController.getWorkitem().setItemValue("cdtr.email", + businessPartner.getItemValue("cdtr.email")); + } + + // Ausgangsrechnung + if (InvoiceUtil.isDebitorInvoice(workflowController.getWorkitem())) { + workflowController.getWorkitem().setItemValue("dbtr.number", + businessPartner.getItemValueString("dbtr.number")); + workflowController.getWorkitem().setItemValue("dbtr.name", + businessPartner.getItemValueString("partner.name")); + workflowController.getWorkitem().setItemValue("dbtr.email", + businessPartner.getItemValue("dbtr.email")); + } + + // Zahlungseingang + if (workflowController.getWorkitem().getModelVersion().startsWith("zahlungseingang")) { + workflowController.getWorkitem().setItemValue("dbtr.number", + businessPartner.getItemValueString("dbtr.number")); + workflowController.getWorkitem().setItemValue("dbtr.name", + businessPartner.getItemValueString("partner.name")); + workflowController.getWorkitem().setItemValue("dbtr.email", + businessPartner.getItemValue("dbtr.email")); + } + + // Analyse Debitor + if (workflowController.getWorkitem().getModelVersion().startsWith("analyse-debitor")) { + workflowController.getWorkitem().setItemValue("dbtr.number", + businessPartner.getItemValueString("dbtr.number")); + workflowController.getWorkitem().setItemValue("dbtr.name", + businessPartner.getItemValueString("partner.name")); + workflowController.getWorkitem().setItemValue("dbtr.email", + businessPartner.getItemValue("dbtr.email")); + } + + } + + } + /** * Hilfsmethode die eine JSON Struktur mit allen relevanten Daten für einen * BusinessPartner erzeugt. diff --git a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/BusinessPartnerService.java b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/BusinessPartnerService.java index f720cd9..f2c0e61 100644 --- a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/BusinessPartnerService.java +++ b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/BusinessPartnerService.java @@ -313,4 +313,58 @@ public class BusinessPartnerService { return result; } + /** + * Diese Methode übertragt neue IBAN/BIC Pare in den Kreditor Banken Bereich + * + * @param cdtrNumber + * @param iban + * @param bic + * @throws PluginException + */ + public void addNewIBANBIC(ItemCollection businessPartner, String iban, String bic) throws PluginException { + if (businessPartner != null) { + + List bankenListe = explodeBanks(businessPartner); + ItemCollection newbank = new ItemCollection(); + // {iban=[IBAN], name=[Test Bank], id=[test ], bic=[BIC]} + newbank.setItemValue("iban", iban); + newbank.setItemValue("bic", bic); + newbank.setItemValue("id", bankenListe.size() + 1); + newbank.setItemValue("name", "Banke-" + bankenListe.size() + 1); + + bankenListe.add(newbank); + implodeBanks(businessPartner, bankenListe); + + documentService.save(businessPartner); + + } + + } + + /** + * Diese Methode gibt true zurück wenn die angegebene IBAN/BIC Kombination als + * bank bereits bekannt ist + * + * @param cdtrNumber + * @param iban + * @param bic + * @throws PluginException + */ + public boolean isIBANBICKnown(ItemCollection businessPartner, String iban, String bic) throws PluginException { + + if (businessPartner != null) { + + List bankenListe = explodeBanks(businessPartner); + for (ItemCollection bank : bankenListe) { + if (iban.equals(bank.getItemValueString("iban")) + && bic.equals(bank.getItemValueString("bic"))) { + // known! + return true; + } + } + } + return false; + + } + } diff --git a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/DebitorStatistikController.java b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/DebitorStatistikController.java index 049c467..1275762 100644 --- a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/DebitorStatistikController.java +++ b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/DebitorStatistikController.java @@ -20,7 +20,6 @@ import java.util.stream.Collectors; import org.imixs.workflow.ItemCollection; import org.imixs.workflow.engine.DocumentService; -import org.imixs.workflow.exceptions.PluginException; import org.imixs.workflow.exceptions.QueryException; import org.imixs.workflow.faces.data.WorkflowController; import org.imixs.workflow.office.views.SearchController; @@ -58,7 +57,7 @@ public class DebitorStatistikController implements Serializable { protected SearchController searchController; @Inject - protected KreditorDebitorService kreditorDebitorService; + protected BusinessPartnerService businessPartnerService; /** * Initialize default behavior initialize an opitonal id from the query string @@ -73,14 +72,13 @@ public class DebitorStatistikController implements Serializable { String id = paramMap.get("dbtr.number"); if (id != null && !id.isEmpty()) { workflowController.getWorkitem().setItemValue("dbtr.number", id); - try { - ItemCollection dbtr = kreditorDebitorService.findDebitor(id); - if (dbtr != null) { - workflowController.getWorkitem().setItemValue("dbtr.name", dbtr.getItemValueString("_vendor_name")); - } - } catch (PluginException e) { - // e.printStackTrace(); + + ItemCollection dbtr = businessPartnerService.getBusinessPartnerByID(InvoiceUtil.buildBPID(id)); + // ItemCollection dbtr = kreditorDebitorService.findDebitor(id); + if (dbtr != null) { + workflowController.getWorkitem().setItemValue("dbtr.name", dbtr.getItemValueString("partner.name")); } + } } diff --git a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/InvoiceOutgoingPlugin.java b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/InvoiceOutgoingPlugin.java index 210aa97..4c2b576 100644 --- a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/InvoiceOutgoingPlugin.java +++ b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/InvoiceOutgoingPlugin.java @@ -17,9 +17,6 @@ import jakarta.inject.Inject; */ public class InvoiceOutgoingPlugin extends AbstractPlugin { - @Inject - KreditorDebitorService kreditorService; - @Inject BusinessPartnerService businessPartnerService; 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 0c5fa94..2704e0e 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 @@ -13,7 +13,6 @@ import org.imixs.workflow.exceptions.PluginException; import org.imixs.workflow.exceptions.QueryException; import org.imixs.workflow.faces.util.ResourceBundleHandler; -import jakarta.ejb.EJB; import jakarta.inject.Inject; /** @@ -68,10 +67,6 @@ public class InvoicePlugin extends AbstractPlugin { @ConfigProperty(name = "invoice.position.pattern", defaultValue = INVOICE_POSITIONS_PATTERN_DEFAULT) String invoicePositionsPattern; - // @Inject - @EJB - KreditorDebitorService kreditorService; - @Inject BusinessPartnerService businessPartnerService; @@ -359,38 +354,28 @@ public class InvoicePlugin extends AbstractPlugin { return; } - // wenn bereits eine Überneahme angedroht wurde dann übernehemen! - if (!overtakeIBAN.isEmpty()) { - kreditorService.addNewIBANBIC(cdtrNumber, iban, bic); - workitem.setItemValue("ibanbic.overtake", ""); - return; - } - - // search the kreditor - ItemCollection cdtr = kreditorService.findCreditorDebitor(cdtrNumber); - if (cdtr != null) { + ItemCollection businessPartner = businessPartnerService + .getBusinessPartnerByID(InvoiceUtil.buildBPID(cdtrNumber)); + if (businessPartner != null) { // update country - workitem.setItemValue("invoice.country", cdtr.getItemValueString("_vendor_country")); + workitem.setItemValue("invoice.country", businessPartner.getItemValueString("partner.country")); + + // wenn bereits eine Übernahme angedroht wurde, dann übernehmen wir die neue + // IBAN/BIC! + if (!overtakeIBAN.isEmpty()) { + businessPartnerService.addNewIBANBIC(businessPartner, iban, bic); + workitem.setItemValue("ibanbic.overtake", ""); + return; + } + // Prüfen ob wir die IBAN schon kennen - if (iban.equals(cdtr.getItemValueString("cdtr.iban")) && bic.equals(cdtr.getItemValueString("cdtr.bic"))) { - return; + if (!businessPartnerService.isIBANBICKnown(businessPartner, iban, bic)) { + // OK - scheinbar ist diese IBAN/BIC nicht bekannt. Also fragen wir mal nach.... + workitem.setItemValue("ibanbic.overtake", iban + bic); + String message = resourceBundleHandler.findMessage("ERROR_IBAN_UNKNOWN"); + throw new PluginException(InvoicePlugin.class.getName(), ERROR_NEW_IBANBIC, message); } - if (iban.equals(cdtr.getItemValueString("cdtr.iban2")) - && bic.equals(cdtr.getItemValueString("cdtr.bic2"))) { - return; - } - if (iban.equals(cdtr.getItemValueString("cdtr.iban3")) - && bic.equals(cdtr.getItemValueString("cdtr.bic3"))) { - return; - } - if (iban.equals(cdtr.getItemValueString("cdtr.iban4")) - && bic.equals(cdtr.getItemValueString("cdtr.bic4"))) { - return; - } - // OK - scheinbar ist diese IBAN/BIC nicht bekannt. Also fragen wir mal nach.... - workitem.setItemValue("ibanbic.overtake", iban + bic); - String message = resourceBundleHandler.findMessage("ERROR_IBAN_UNKNOWN"); - throw new PluginException(InvoicePlugin.class.getName(), ERROR_NEW_IBANBIC, message); + } } 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 e71d395..1ef70fd 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 @@ -18,7 +18,6 @@ import org.imixs.workflow.faces.data.WorkflowEvent; import jakarta.enterprise.context.ConversationScoped; import jakarta.enterprise.event.Observes; -import jakarta.faces.context.FacesContext; import jakarta.inject.Inject; import jakarta.inject.Named; @@ -69,6 +68,9 @@ public class OPListController implements Serializable { @Inject protected InvoiceService invoiceService; + @Inject + protected BusinessPartnerService businessPartnerService; + /** * Diese Methode wird für Zahlungseingänge und Mahnläufe verwendet. *

@@ -311,22 +313,6 @@ public class OPListController implements Serializable { workitem.setItemValue("$workitemref", selectionList); } - /** - * This JSF backing method is called by cargosft-debitor-serach.xhtml after the - * user has selected a new debitor. - *

- * The new dbtrNumber is slected form the curren ajax request param 'dbtrNumber' - *

- * The method just updates the dbtr.number of the current workitem. The form - * will than rerender the opList section. - */ - public void updateDbtrNumber() { - FacesContext fc = FacesContext.getCurrentInstance(); - String dbtrNumber = fc.getExternalContext().getRequestParameterMap().get("dbtrNumber"); - logger.fine(".........dbtrNumber = " + dbtrNumber); - workflowController.getWorkitem().setItemValue("dbtr.number", dbtrNumber); - } - /** * Hilfsmethode delegates to ZahlungseingangServcie * diff --git a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/SteuerbescheidPlugin.java b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/SteuerbescheidPlugin.java index 2ec75ab..dc0aa00 100644 --- a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/SteuerbescheidPlugin.java +++ b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/SteuerbescheidPlugin.java @@ -35,9 +35,6 @@ public class SteuerbescheidPlugin extends AbstractPlugin { @Inject protected DocumentService documentService; - @Inject - KreditorDebitorService kreditorService; - /** * Prüft ob der Steuerbetrag abgerechnet ist. * diff --git a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/mahnlauf/MahnlaufRefAddAdapter.java b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/mahnlauf/MahnlaufRefAddAdapter.java index a2cb6d7..e26bba8 100644 --- a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/mahnlauf/MahnlaufRefAddAdapter.java +++ b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/mahnlauf/MahnlaufRefAddAdapter.java @@ -16,7 +16,8 @@ import org.imixs.workflow.exceptions.PluginException; import org.imixs.workflow.exceptions.QueryException; import org.imixs.workflow.sepa.services.SepaWorkflowService; -import com.alexanderlogistics.KreditorDebitorService; +import com.alexanderlogistics.BusinessPartnerService; +import com.alexanderlogistics.InvoiceUtil; import jakarta.ejb.EJB; import jakarta.inject.Inject; @@ -40,15 +41,15 @@ public class MahnlaufRefAddAdapter implements SignalAdapter { @EJB ModelService modelService; - @EJB - KreditorDebitorService kreditorDebitorService; - @EJB WorkflowService workflowService = null; @Inject SepaWorkflowService sepaWorkflowService; + @Inject + BusinessPartnerService businessPartnerService; + /** * This method finds or create the Mahnlauf and adds a reference ($workitemref) * to the current invoice. @@ -156,9 +157,10 @@ public class MahnlaufRefAddAdapter implements SignalAdapter { // lookup email.... String dbtrNumber = invoice.getItemValueString("dbtr.number"); - ItemCollection dbtrItemCol = kreditorDebitorService.findDebitor("D" + dbtrNumber); - if (dbtrItemCol != null) { - mahnlaufWorkitem.setItemValue(MahnlaufService.ITEM_DBTR_EMAIL, dbtrItemCol.getItemValue("cdtr.mail"));// dbtr.mail + ItemCollection businessPartner = businessPartnerService + .getBusinessPartnerByID(InvoiceUtil.buildBPID(dbtrNumber)); + if (businessPartner != null) { + mahnlaufWorkitem.setItemValue(MahnlaufService.ITEM_DBTR_EMAIL, businessPartner.getItemValue("dbtr.mail"));// dbtr.mail } mahnlaufWorkitem.setItemValue(MahnlaufService.ITEM_DBTR_NUMBER, diff --git a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/xml/BusinessPartnerImportService.java b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/xml/BusinessPartnerImportService.java index b349244..8dbcced 100644 --- a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/xml/BusinessPartnerImportService.java +++ b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/xml/BusinessPartnerImportService.java @@ -49,7 +49,6 @@ import org.imixs.workflow.exceptions.QueryException; import com.alexanderlogistics.BusinessPartnerService; import com.alexanderlogistics.InvoiceUtil; -import com.alexanderlogistics.KreditorDebitorService; import jakarta.annotation.security.DeclareRoles; import jakarta.annotation.security.RolesAllowed; @@ -89,6 +88,9 @@ import jakarta.enterprise.event.Observes; public class BusinessPartnerImportService { private static Logger logger = Logger.getLogger(BusinessPartnerImportService.class.getName()); + + public static final String TYPE_CARGOSOFTKREDITOR = "cargosoftkreditor"; + public static final String OPTION_MANDANT_ID = "mandant.id"; public static final String DATE_FORMAT = "yyyy-MM-dd'T'HH:mm:ss"; public static final String REGEX_IMPORTTEXTPATTERN = "^R[1-8] .*$"; @@ -228,7 +230,7 @@ public class BusinessPartnerImportService { // Hier migrieren wir jetzt auch die alten IBAN/BIC Daten try { String cargoShortID = partnerID.substring(2); - String query = "(type:" + KreditorDebitorService.TYPE_CARGOSOFTKREDITOR + ")"; + String query = "(type:" + TYPE_CARGOSOFTKREDITOR + ")"; query = query + " AND ( name:K7" + cargoShortID + " OR name:D1" + cargoShortID + " )"; List oldList = documentService.find(query, 2, 0); diff --git a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/xml/CargosoftXMLEAkteImportService.java b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/xml/CargosoftXMLEAkteImportService.java index dbaa430..47b8194 100644 --- a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/xml/CargosoftXMLEAkteImportService.java +++ b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/xml/CargosoftXMLEAkteImportService.java @@ -79,8 +79,8 @@ import org.w3c.dom.NodeList; import org.xml.sax.InputSource; import org.xml.sax.SAXException; +import com.alexanderlogistics.BusinessPartnerService; import com.alexanderlogistics.InvoiceUtil; -import com.alexanderlogistics.KreditorDebitorService; import com.alexanderlogistics.mahnlauf.MahnlaufService; import jakarta.ejb.EJB; @@ -123,15 +123,15 @@ public class CargosoftXMLEAkteImportService { @EJB ModelService modelService; - @EJB - KreditorDebitorService kreditorDebitorService; - @EJB DocumentImportService documentImportService; @Inject MahnlaufService mahnlaufService; + @Inject + BusinessPartnerService businessPartnerService; + /** * This method reacts on a CDI ImportEvent and reads documents form a ftp * server. @@ -413,41 +413,32 @@ public class CargosoftXMLEAkteImportService { return null; } - String cdtrNumber = workitem.getItemValueString("cdtr.number"); - if (cdtrNumber.startsWith("K") || cdtrNumber.startsWith("D")) { - workitem.setItemValue("cdtr.number", cdtrNumber.substring(1)); - } + String bid = InvoiceUtil.buildBPID(workitem.getItemValueString("cdtr.number")); + ItemCollection businessPartner = businessPartnerService.getBusinessPartnerByID(bid); + // ersten BUchstaben hier wegnehmen (warum auch immer) + workitem.setItemValue("cdtr.number", businessPartner.getItemValueString("cdtr.number").substring(1)); // lookup debitor and set name - if (cdtrNumber != null && !cdtrNumber.isEmpty()) - try { - ItemCollection cdtr = kreditorDebitorService.findCreditor(cdtrNumber); - if (cdtr != null) { - workitem.setItemValue("cdtr.name", cdtr.getItemValueString("_vendor_name")); - // Anhand der Creditoren Stammdaten errrechnen wir die Sprache für diese - // Rechnung - String country = cdtr.getItemValueString("_VENDOR_COUNTRY"); - workitem.setItemValue("invoice.country", country); - if (country.equalsIgnoreCase("de") || country.equalsIgnoreCase("ch") - || country.equalsIgnoreCase("at")) { - workitem.setItemValue("invoice.language", "DE"); - } else { - workitem.setItemValue("invoice.language", "EN"); - } - } - } catch (PluginException e) { - // e.printStackTrace(); + if (businessPartner != null) { + workitem.setItemValue("cdtr.name", businessPartner.getItemValueString("partner.name")); + // Anhand der Creditoren Stammdaten errechnen wir die Sprache für diese + // Rechnung + String country = businessPartner.getItemValueString("partner.country"); + workitem.setItemValue("invoice.country", country); + if (country.equalsIgnoreCase("de") || country.equalsIgnoreCase("ch") + || country.equalsIgnoreCase("at")) { + workitem.setItemValue("invoice.language", "DE"); + } else { + workitem.setItemValue("invoice.language", "EN"); } + // Row Positions lesen + readXMLRows(doc, workitem); + // Jetzt noch das Space mapping + workitem.setItemValue("invoice.text", workitem.getItemValueString("invoice.positions")); + mahnlaufService.mapInvoiceTextToSpace(workitem, spacePosMappings); - // Row Positions lesen - readXMLRows(doc, workitem); - - // Jetzt noch das Space mapping - workitem.setItemValue("invoice.text", workitem.getItemValueString("invoice.positions")); - mahnlaufService.mapInvoiceTextToSpace(workitem, spacePosMappings); - - // Finally we attache the pdf file and the XML content to the workitem. - attacheFiles(doc, workitem); - + // Finally we attache the pdf file and the XML content to the workitem. + attacheFiles(doc, workitem); + } } catch (ParserConfigurationException | SAXException | IOException e) { throw new PluginException(CargosoftXMLEAkteImportService.class.getName(), "XML_ERROR", e.getMessage()); diff --git a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/xml/CargosoftXMLInvoiceImportService.java b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/xml/CargosoftXMLInvoiceImportService.java index 5d01dab..10ac3aa 100644 --- a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/xml/CargosoftXMLInvoiceImportService.java +++ b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/xml/CargosoftXMLInvoiceImportService.java @@ -80,7 +80,6 @@ import org.xml.sax.InputSource; import org.xml.sax.SAXException; import com.alexanderlogistics.InvoiceUtil; -import com.alexanderlogistics.KreditorDebitorService; import com.alexanderlogistics.mahnlauf.MahnlaufService; import jakarta.ejb.EJB; @@ -114,6 +113,9 @@ public class CargosoftXMLInvoiceImportService { private static Logger logger = Logger.getLogger(CargosoftXMLInvoiceImportService.class.getName()); public static final String OPTION_MANDANT_ID = "mandant.id"; + + public static final String TYPE_CARGOSOFTKREDITOR = "cargosoftkreditor"; + public static final String DATE_FORMAT = "yyyy-MM-dd'T'HH:mm:ss"; public static final String REGEX_IMPORTTEXTPATTERN = "^R[1-8] .*$"; @@ -126,9 +128,6 @@ public class CargosoftXMLInvoiceImportService { @EJB ModelService modelService; - @EJB - KreditorDebitorService kreditorDebitorService; - @EJB DocumentImportService documentImportService; @@ -451,7 +450,7 @@ public class CargosoftXMLInvoiceImportService { } // lookup debitor and set name try { - ItemCollection dbtr = kreditorDebitorService.findDebitor(dbtrNumber); + ItemCollection dbtr = findDebitor(dbtrNumber); if (dbtr != null) { workitem.setItemValue("dbtr.name", dbtr.getItemValueString("_vendor_name")); // Anhand der Creditoren Stammdaten errrechnen wir die Sprache für diese @@ -824,4 +823,30 @@ public class CargosoftXMLInvoiceImportService { } return false; } + + /** + * 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; + } } 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 deleted file mode 100644 index bd03ede..0000000 --- a/office-alexander-logistics-app/src/main/webapp/pages/workitems/forms/alexander/cargsoft-debitor-search.xhtml +++ /dev/null @@ -1,90 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/office-alexander-logistics-app/src/main/webapp/pages/workitems/parts/alexander/businesspartner_search.xhtml b/office-alexander-logistics-app/src/main/webapp/pages/workitems/parts/alexander/businesspartner_search.xhtml index af0632e..1fab748 100644 --- a/office-alexander-logistics-app/src/main/webapp/pages/workitems/parts/alexander/businesspartner_search.xhtml +++ b/office-alexander-logistics-app/src/main/webapp/pages/workitems/parts/alexander/businesspartner_search.xhtml @@ -27,10 +27,13 @@ + +