support von 5-stelligen BP Nummern
This commit is contained in:
parent
6620f7ce7c
commit
52ac50f204
5 changed files with 112 additions and 29 deletions
|
|
@ -345,7 +345,7 @@ public class BusinessPartnerController implements Serializable {
|
||||||
ItemCollection businessPartner = businessPartnerService.getBusinessPartnerByID(bpid);
|
ItemCollection businessPartner = businessPartnerService.getBusinessPartnerByID(bpid);
|
||||||
searchResult = null;
|
searchResult = null;
|
||||||
if (businessPartner != null) {
|
if (businessPartner != null) {
|
||||||
|
workitem.setItemValue("partner.ref", businessPartner.getUniqueID());
|
||||||
// Eingangsrechnung
|
// Eingangsrechnung
|
||||||
if (InvoiceUtil.isCreditorInvoice(workitem)) {
|
if (InvoiceUtil.isCreditorInvoice(workitem)) {
|
||||||
workitem.setItemValue("cdtr.number",
|
workitem.setItemValue("cdtr.number",
|
||||||
|
|
@ -369,33 +369,30 @@ public class BusinessPartnerController implements Serializable {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
} else
|
} else if (InvoiceUtil.isDebitorInvoice(workitem)) {
|
||||||
// Ausgangsrechnung
|
// Ausgangsrechnung
|
||||||
if (InvoiceUtil.isDebitorInvoice(workitem)) {
|
|
||||||
workitem.setItemValue("dbtr.number",
|
workitem.setItemValue("dbtr.number",
|
||||||
businessPartner.getItemValueString("dbtr.number"));
|
businessPartner.getItemValueString("dbtr.number"));
|
||||||
workitem.setItemValue("dbtr.name",
|
workitem.setItemValue("dbtr.name",
|
||||||
businessPartner.getItemValueString("partner.name"));
|
businessPartner.getItemValueString("partner.name"));
|
||||||
workitem.setItemValue("dbtr.mail", businessPartner.getItemValue("dbtr.mail"));
|
workitem.setItemValue("dbtr.mail", businessPartner.getItemValue("dbtr.mail"));
|
||||||
} else
|
} else if (workitem.getModelVersion().startsWith("zahlungseingang")) {
|
||||||
// Zahlungseingang
|
// Zahlungseingang
|
||||||
if (workitem.getModelVersion().startsWith("zahlungseingang")) {
|
|
||||||
workitem.setItemValue("dbtr.number",
|
workitem.setItemValue("dbtr.number",
|
||||||
businessPartner.getItemValueString("dbtr.number"));
|
businessPartner.getItemValueString("dbtr.number"));
|
||||||
workitem.setItemValue("dbtr.name",
|
workitem.setItemValue("dbtr.name",
|
||||||
businessPartner.getItemValueString("partner.name"));
|
businessPartner.getItemValueString("partner.name"));
|
||||||
workitem.setItemValue("dbtr.mail", businessPartner.getItemValue("dbtr.mail"));
|
workitem.setItemValue("dbtr.mail", businessPartner.getItemValue("dbtr.mail"));
|
||||||
} else
|
} else if (workitem.getModelVersion().startsWith("analyse-debitor")) {
|
||||||
// Analyse Debitor
|
// Analyse Debitor
|
||||||
if (workitem.getModelVersion().startsWith("analyse-debitor")) {
|
|
||||||
workitem.setItemValue("dbtr.number",
|
workitem.setItemValue("dbtr.number",
|
||||||
businessPartner.getItemValueString("dbtr.number"));
|
businessPartner.getItemValueString("dbtr.number"));
|
||||||
workitem.setItemValue("dbtr.name",
|
workitem.setItemValue("dbtr.name",
|
||||||
businessPartner.getItemValueString("partner.name"));
|
businessPartner.getItemValueString("partner.name"));
|
||||||
workitem.setItemValue("dbtr.mail", businessPartner.getItemValue("dbtr.mail"));
|
workitem.setItemValue("dbtr.mail", businessPartner.getItemValue("dbtr.mail"));
|
||||||
} else {
|
} else {
|
||||||
// default behavior
|
|
||||||
if (workitem.getItemValueString("dbtr.number").isEmpty()) {
|
if (workitem.getItemValueString("dbtr.number").isEmpty()) {
|
||||||
|
// default behavior
|
||||||
String number = businessPartner.getItemValueString("dbtr.number");
|
String number = businessPartner.getItemValueString("dbtr.number");
|
||||||
workitem.setItemValue("dbtr.number", number);
|
workitem.setItemValue("dbtr.number", number);
|
||||||
if (number.length() > 1) {
|
if (number.length() > 1) {
|
||||||
|
|
|
||||||
|
|
@ -160,6 +160,10 @@ public class InvoiceUtil {
|
||||||
*
|
*
|
||||||
* Aus Kreditor K70153 und Debitor D10153 wird die einheitliche ID: BP0153
|
* 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
|
* @param key
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
|
|
@ -168,10 +172,29 @@ public class InvoiceUtil {
|
||||||
// no data
|
// no data
|
||||||
return key;
|
return key;
|
||||||
}
|
}
|
||||||
|
if (key.startsWith("BP")) {
|
||||||
|
return key;
|
||||||
|
}
|
||||||
|
|
||||||
key = key.toUpperCase();
|
key = key.toUpperCase();
|
||||||
if (key.startsWith("D") || key.startsWith("K")) {
|
if (key.startsWith("D") || key.startsWith("K")) {
|
||||||
key = key.substring(1);
|
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")) {
|
if (!key.startsWith("BP")) {
|
||||||
// cut first digit (debitor/creditor)
|
// cut first digit (debitor/creditor)
|
||||||
key = "BP" + key.substring(1);
|
key = "BP" + key.substring(1);
|
||||||
|
|
|
||||||
|
|
@ -68,10 +68,18 @@ import jakarta.enterprise.event.Observes;
|
||||||
* Business partner erstmals neu angelegt wird.
|
* Business partner erstmals neu angelegt wird.
|
||||||
* <p>
|
* <p>
|
||||||
* Falls bei der ersten Migration erkannt wird, dass die IBAN Nummern nicht
|
* 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.
|
||||||
* <p>
|
* <p>
|
||||||
* Im Cargosoft Entity wird zusätzlich das flag NOSNAPSHOT=true gesetzt. Dies
|
* Im Cargosoft Entity wird zusätzlich das flag NOSNAPSHOT=true gesetzt. Dies
|
||||||
* ist nur eine Performance Optimierung.
|
* ist nur eine Performance Optimierung.
|
||||||
|
* <p>
|
||||||
|
* 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
|
* @author rsoika
|
||||||
*
|
*
|
||||||
|
|
@ -90,9 +98,9 @@ public class BusinessPartnerImportService {
|
||||||
|
|
||||||
public static final String TYPE_CARGOSOFTKREDITOR = "cargosoftkreditor";
|
public static final String TYPE_CARGOSOFTKREDITOR = "cargosoftkreditor";
|
||||||
|
|
||||||
public static final String OPTION_MANDANT_ID = "mandant.id";
|
// 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 DATE_FORMAT = "yyyy-MM-dd'T'HH:mm:ss";
|
||||||
public static final String REGEX_IMPORTTEXTPATTERN = "^R[1-8] .*$";
|
// public static final String REGEX_IMPORTTEXTPATTERN = "^R[1-8] .*$";
|
||||||
|
|
||||||
@EJB
|
@EJB
|
||||||
WorkflowService workflowService;
|
WorkflowService workflowService;
|
||||||
|
|
@ -135,17 +143,25 @@ public class BusinessPartnerImportService {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Syncnrhonisert ein drecks Cargosoft Objekt mit dem neuen Busienss partner
|
* Synchronisiert ein Cargosoft Objekt mit dem neuen Business partner
|
||||||
* objekt
|
* Objekt
|
||||||
*
|
*
|
||||||
* Gibt true urück wenn sich was verädnert hat
|
* 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
|
||||||
|
*
|
||||||
|
* Die Methode gibt true zurück wenn sich das BusinessPartner Objekt geändert
|
||||||
|
* oder neu erstellt wurde.
|
||||||
*
|
*
|
||||||
* @param creditor
|
* @param creditor
|
||||||
*/
|
*/
|
||||||
public boolean syncCargosoftCreditorBusinessPartner(ItemCollection importDoc) {
|
public boolean syncCargosoftCreditorBusinessPartner(ItemCollection importDoc) {
|
||||||
String name = importDoc.getItemValueString("name");
|
String cargosoftID = importDoc.getItemValueString("name");
|
||||||
boolean isCreditor = name.toUpperCase().startsWith("K");
|
// K bedeutet Kreditor D bedeutet Debitor - beides kann vorkommen
|
||||||
String partnerID = InvoiceUtil.buildBPID(name);
|
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?
|
// Prüfen ob es diesen partner schon gibt?
|
||||||
ItemCollection businesspartner = lookupBusinessPartner(partnerID);
|
ItemCollection businesspartner = lookupBusinessPartner(partnerID);
|
||||||
|
|
@ -158,12 +174,12 @@ public class BusinessPartnerImportService {
|
||||||
businesspartner.setItemValue("name", partnerID);
|
businesspartner.setItemValue("name", partnerID);
|
||||||
businesspartner.setItemValue("partner.id", partnerID);
|
businesspartner.setItemValue("partner.id", partnerID);
|
||||||
if (isCreditor) {
|
if (isCreditor) {
|
||||||
businesspartner.setItemValue("cdtr.number", name);
|
businesspartner.setItemValue("cdtr.number", cargosoftID);
|
||||||
if (businesspartner.isItemEmpty("cdtr.mail")) {
|
if (businesspartner.isItemEmpty("cdtr.mail")) {
|
||||||
businesspartner.setItemValue("cdtr.mail", importDoc.getItemValueString("_vendor_email"));
|
businesspartner.setItemValue("cdtr.mail", importDoc.getItemValueString("_vendor_email"));
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
businesspartner.setItemValue("dbtr.number", name);
|
businesspartner.setItemValue("dbtr.number", cargosoftID);
|
||||||
if (businesspartner.isItemEmpty("dbtr.mail")) {
|
if (businesspartner.isItemEmpty("dbtr.mail")) {
|
||||||
businesspartner.setItemValue("dbtr.mail", importDoc.getItemValueString("_vendor_email"));
|
businesspartner.setItemValue("dbtr.mail", importDoc.getItemValueString("_vendor_email"));
|
||||||
}
|
}
|
||||||
|
|
@ -207,7 +223,7 @@ public class BusinessPartnerImportService {
|
||||||
try {
|
try {
|
||||||
workflowService.processWorkItemByNewTransaction(businesspartner);
|
workflowService.processWorkItemByNewTransaction(businesspartner);
|
||||||
} catch (AccessDeniedException | ProcessingErrorException | PluginException | ModelException e) {
|
} 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;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -220,7 +236,7 @@ public class BusinessPartnerImportService {
|
||||||
*
|
*
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
private ItemCollection createBusinessPartner(String partnerID) {
|
private ItemCollection createBusinessPartner(String cargosoftID) {
|
||||||
ItemCollection businessPartner = new ItemCollection();
|
ItemCollection businessPartner = new ItemCollection();
|
||||||
businessPartner.setType("workitem");
|
businessPartner.setType("workitem");
|
||||||
businessPartner.setWorkflowGroup("Business Partner");
|
businessPartner.setWorkflowGroup("Business Partner");
|
||||||
|
|
@ -228,9 +244,8 @@ public class BusinessPartnerImportService {
|
||||||
|
|
||||||
// Hier migrieren wir jetzt auch die alten IBAN/BIC Daten
|
// Hier migrieren wir jetzt auch die alten IBAN/BIC Daten
|
||||||
try {
|
try {
|
||||||
String cargoShortID = partnerID.substring(2);
|
|
||||||
String query = "(type:" + TYPE_CARGOSOFTKREDITOR + ")";
|
String query = "(type:" + TYPE_CARGOSOFTKREDITOR + ")";
|
||||||
query = query + " AND ( name:K7" + cargoShortID + " OR name:D1" + cargoShortID + " )";
|
query = query + " AND ( name:" + cargosoftID + " )";
|
||||||
|
|
||||||
List<ItemCollection> oldList = documentService.find(query, 2, 0);
|
List<ItemCollection> oldList = documentService.find(query, 2, 0);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -28,7 +28,17 @@
|
||||||
<h:inputText value="#{workitem.item['partner.id']}" pt:data-item="partner.id" />
|
<h:inputText value="#{workitem.item['partner.id']}" pt:data-item="partner.id" />
|
||||||
<h:inputHidden value="#{workitem.item['partner.name']}" pt:data-item="partner.name" />
|
<h:inputHidden value="#{workitem.item['partner.name']}" pt:data-item="partner.name" />
|
||||||
<br />
|
<br />
|
||||||
<span id='businsspartner-konto-id' class='small'>#{workitem.item['partner.name']}</span>
|
<ui:fragment rendered="#{empty workitem.item['partner.ref']}">
|
||||||
|
<span id='businsspartner-konto-id' class='small'>#{workitem.item['partner.name']}</span>
|
||||||
|
</ui:fragment>
|
||||||
|
<ui:fragment rendered="#{!empty workitem.item['partner.ref']}">
|
||||||
|
<span id='businsspartner-konto-id' class='small'>
|
||||||
|
<h:outputLink style="margin-left:5px;" target="_blank"
|
||||||
|
value="#{facesContext.externalContext.requestContextPath}/pages/workitems/workitem.xhtml?id=#{workitem.item['partner.ref']}">
|
||||||
|
#{workitem.item['partner.name']}</h:outputLink>
|
||||||
|
</span>
|
||||||
|
</ui:fragment>
|
||||||
|
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
/*<![CDATA[*/
|
/*<![CDATA[*/
|
||||||
// init input fields...
|
// init input fields...
|
||||||
|
|
|
||||||
|
|
@ -147,6 +147,44 @@ public class InvoiceImportTester {
|
||||||
assertEquals(161.61, row2.getItemValueDouble("datev.umsatz"), 0.0);
|
assertEquals(161.61, row2.getItemValueDouble("datev.umsatz"), 0.0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Testet die Umwandlung von Cargosoft nummern in BP Nummern
|
||||||
|
*
|
||||||
|
* 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
|
||||||
|
*
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
public void testBPConverter() throws Exception {
|
||||||
|
|
||||||
|
assertEquals("BP0725", InvoiceUtil.buildBPID("K70725"));
|
||||||
|
assertEquals("BP0725", InvoiceUtil.buildBPID("D10725"));
|
||||||
|
|
||||||
|
// test getBPid
|
||||||
|
ItemCollection invoice = new ItemCollection();
|
||||||
|
invoice.model("rechnungseingang-123");
|
||||||
|
invoice.setItemValue("dbtr.number", "D10999");
|
||||||
|
invoice.setItemValue("cdtr.number", "K70725");
|
||||||
|
assertEquals("BP0725", InvoiceUtil.getBPID(invoice));
|
||||||
|
|
||||||
|
invoice = new ItemCollection();
|
||||||
|
invoice.model("rechnungsausgang-123");
|
||||||
|
invoice.setItemValue("cdtr.number", "K70999");
|
||||||
|
invoice.setItemValue("dbtr.number", "D10725");
|
||||||
|
assertEquals("BP0725", InvoiceUtil.getBPID(invoice));
|
||||||
|
|
||||||
|
// Teste 5 Stellige BP Nummern
|
||||||
|
// K80725 => BP10725 bzw. D20725 => BP10725
|
||||||
|
assertEquals("BP10725", InvoiceUtil.buildBPID("K80725"));
|
||||||
|
assertEquals("BP10725", InvoiceUtil.buildBPID("D20725"));
|
||||||
|
assertEquals("BP20725", InvoiceUtil.buildBPID("K90725"));
|
||||||
|
assertEquals("BP20725", InvoiceUtil.buildBPID("D30725"));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Hilfsmethode zum einlesen einer xml test datei
|
* Hilfsmethode zum einlesen einer xml test datei
|
||||||
*
|
*
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue