From 52ac50f204f0e681e1e79e0e2cd86c462d127680 Mon Sep 17 00:00:00 2001 From: Ralph Soika Date: Sun, 24 Aug 2025 10:34:51 +0200 Subject: [PATCH] support von 5-stelligen BP Nummern --- .../BusinessPartnerController.java | 19 +++---- .../com/alexanderlogistics/InvoiceUtil.java | 23 +++++++++ .../xml/BusinessPartnerImportService.java | 49 ++++++++++++------- .../alexander/businesspartner_search.xhtml | 12 ++++- .../xml/InvoiceImportTester.java | 38 ++++++++++++++ 5 files changed, 112 insertions(+), 29 deletions(-) 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 f7aa25d..bfed114 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 @@ -345,7 +345,7 @@ public class BusinessPartnerController implements Serializable { ItemCollection businessPartner = businessPartnerService.getBusinessPartnerByID(bpid); searchResult = null; if (businessPartner != null) { - + workitem.setItemValue("partner.ref", businessPartner.getUniqueID()); // Eingangsrechnung if (InvoiceUtil.isCreditorInvoice(workitem)) { workitem.setItemValue("cdtr.number", @@ -369,33 +369,30 @@ public class BusinessPartnerController implements Serializable { } } - } else - // Ausgangsrechnung - if (InvoiceUtil.isDebitorInvoice(workitem)) { + } else if (InvoiceUtil.isDebitorInvoice(workitem)) { + // Ausgangsrechnung workitem.setItemValue("dbtr.number", businessPartner.getItemValueString("dbtr.number")); workitem.setItemValue("dbtr.name", businessPartner.getItemValueString("partner.name")); workitem.setItemValue("dbtr.mail", businessPartner.getItemValue("dbtr.mail")); - } else - // Zahlungseingang - if (workitem.getModelVersion().startsWith("zahlungseingang")) { + } else if (workitem.getModelVersion().startsWith("zahlungseingang")) { + // Zahlungseingang workitem.setItemValue("dbtr.number", businessPartner.getItemValueString("dbtr.number")); workitem.setItemValue("dbtr.name", businessPartner.getItemValueString("partner.name")); workitem.setItemValue("dbtr.mail", businessPartner.getItemValue("dbtr.mail")); - } else - // Analyse Debitor - if (workitem.getModelVersion().startsWith("analyse-debitor")) { + } else if (workitem.getModelVersion().startsWith("analyse-debitor")) { + // Analyse Debitor workitem.setItemValue("dbtr.number", businessPartner.getItemValueString("dbtr.number")); workitem.setItemValue("dbtr.name", businessPartner.getItemValueString("partner.name")); workitem.setItemValue("dbtr.mail", businessPartner.getItemValue("dbtr.mail")); } else { - // default behavior if (workitem.getItemValueString("dbtr.number").isEmpty()) { + // default behavior String number = businessPartner.getItemValueString("dbtr.number"); workitem.setItemValue("dbtr.number", number); if (number.length() > 1) { diff --git a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/InvoiceUtil.java b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/InvoiceUtil.java index c358d67..cd1a0fc 100644 --- a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/InvoiceUtil.java +++ b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/InvoiceUtil.java @@ -160,6 +160,10 @@ public class InvoiceUtil { * * Aus Kreditor K70153 und Debitor D10153 wird die einheitliche ID: BP0153 * + * Wir untersützen heir auch K8 und D2 Nummern + * D.h. K70725 => BP0725 bzw. D10725 => BP0725 + * D.h. K80725 => BP10725 bzw. D20725 => BP10725 + * * @param key * @return */ @@ -168,10 +172,29 @@ public class InvoiceUtil { // no data return key; } + if (key.startsWith("BP")) { + return key; + } + key = key.toUpperCase(); if (key.startsWith("D") || key.startsWith("K")) { key = key.substring(1); } + + // 5 Stellig und Starts 8 (K80153 ) + if (key.length() == 5 && key.startsWith("2")) { + key = "x1" + key.substring(1); + } + if (key.length() == 5 && key.startsWith("3")) { + key = "x2" + key.substring(1); + } + if (key.length() == 5 && key.startsWith("8")) { + key = "x1" + key.substring(1); + } + if (key.length() == 5 && key.startsWith("9")) { + key = "x2" + key.substring(1); + } + if (!key.startsWith("BP")) { // cut first digit (debitor/creditor) key = "BP" + key.substring(1); 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 2da25e6..65bd65d 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 @@ -68,11 +68,19 @@ import jakarta.enterprise.event.Observes; * Business partner erstmals neu angelegt wird. *

* Falls bei der ersten Migration erkannt wird, dass die IBAN Nummern nicht - * eindeutig sind wir der BusinessParter mit dem Event 300 angelegt. + * eindeutig sind wir der BusinessPartner mit dem Event 300 angelegt. *

* Im Cargosoft Entity wird zusätzlich das flag NOSNAPSHOT=true gesetzt. Dies * ist nur eine Performance Optimierung. - * + *

+ * Die Umsetzung erfolgt nach folgendem Prinzip: + * Die K- bzw. D-Nummer (K70725 , D10725 ) werden die ersten beiden Stellen + * abgeschnitten und mit BP ersetzt. + * D.h. K70725 => BP0725 bzw. D10725 => BP0725 + * Change: 24.8.2025: Da nun auch K8 und D2 Nummern auftauchen können wird in + * diesen Fällen die Nummer hinter BP um 1 erweitert. Also nun auch + * D.h. K80725 => BP10725 bzw. D20725 => BP10725 + * * @author rsoika * */ @@ -90,9 +98,9 @@ public class BusinessPartnerImportService { 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] .*$"; + // 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] .*$"; @EJB WorkflowService workflowService; @@ -135,17 +143,25 @@ public class BusinessPartnerImportService { } /** - * Syncnrhonisert ein drecks Cargosoft Objekt mit dem neuen Busienss partner - * objekt + * Synchronisiert ein Cargosoft Objekt mit dem neuen Business partner + * Objekt + * + * Die K- bzw. D-Nummer (K70725 , D10725 ) werden die ersten beiden Stellen + * abgeschnitten und mit BP ersetzt. + * D.h. K70725 => BP0725 bzw. D10725 => BP0725 + * D.h. K80725 => BP10725 bzw. D20725 => BP10725 * - * Gibt true urück wenn sich was verädnert hat + * Die Methode gibt true zurück wenn sich das BusinessPartner Objekt geändert + * oder neu erstellt wurde. * * @param creditor */ public boolean syncCargosoftCreditorBusinessPartner(ItemCollection importDoc) { - String name = importDoc.getItemValueString("name"); - boolean isCreditor = name.toUpperCase().startsWith("K"); - String partnerID = InvoiceUtil.buildBPID(name); + String cargosoftID = importDoc.getItemValueString("name"); + // K bedeutet Kreditor D bedeutet Debitor - beides kann vorkommen + boolean isCreditor = cargosoftID.toUpperCase().startsWith("K"); + // Konvertiere die KNummer in eine BP Nummer + String partnerID = InvoiceUtil.buildBPID(cargosoftID); // Prüfen ob es diesen partner schon gibt? ItemCollection businesspartner = lookupBusinessPartner(partnerID); @@ -158,12 +174,12 @@ public class BusinessPartnerImportService { businesspartner.setItemValue("name", partnerID); businesspartner.setItemValue("partner.id", partnerID); if (isCreditor) { - businesspartner.setItemValue("cdtr.number", name); + businesspartner.setItemValue("cdtr.number", cargosoftID); if (businesspartner.isItemEmpty("cdtr.mail")) { businesspartner.setItemValue("cdtr.mail", importDoc.getItemValueString("_vendor_email")); } } else { - businesspartner.setItemValue("dbtr.number", name); + businesspartner.setItemValue("dbtr.number", cargosoftID); if (businesspartner.isItemEmpty("dbtr.mail")) { businesspartner.setItemValue("dbtr.mail", importDoc.getItemValueString("_vendor_email")); } @@ -207,7 +223,7 @@ public class BusinessPartnerImportService { try { workflowService.processWorkItemByNewTransaction(businesspartner); } catch (AccessDeniedException | ProcessingErrorException | PluginException | ModelException e) { - logger.warning("Failed to update Business Partner Object " + name + " - " + e.getMessage()); + logger.warning("Failed to update Business Partner Object " + cargosoftID + " - " + e.getMessage()); } return true; } else { @@ -220,7 +236,7 @@ public class BusinessPartnerImportService { * * @return */ - private ItemCollection createBusinessPartner(String partnerID) { + private ItemCollection createBusinessPartner(String cargosoftID) { ItemCollection businessPartner = new ItemCollection(); businessPartner.setType("workitem"); businessPartner.setWorkflowGroup("Business Partner"); @@ -228,9 +244,8 @@ public class BusinessPartnerImportService { // Hier migrieren wir jetzt auch die alten IBAN/BIC Daten try { - String cargoShortID = partnerID.substring(2); String query = "(type:" + TYPE_CARGOSOFTKREDITOR + ")"; - query = query + " AND ( name:K7" + cargoShortID + " OR name:D1" + cargoShortID + " )"; + query = query + " AND ( name:" + cargosoftID + " )"; List oldList = documentService.find(query, 2, 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 74aceda..6bddacb 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 @@ -28,7 +28,17 @@
- #{workitem.item['partner.name']} + + #{workitem.item['partner.name']} + + + + + #{workitem.item['partner.name']} + + +