diff --git a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/InvoiceService.java b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/InvoiceService.java index b8a9108..873b42c 100644 --- a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/InvoiceService.java +++ b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/InvoiceService.java @@ -96,6 +96,25 @@ public class InvoiceService { return currencyList; } + /** + * Gibt die Hauptwährung zurück (1. in der liste) + * + * @return + * @throws PluginException + */ + public String getCurrenciesOutMain() throws PluginException { + + // ermittle die Hauptwährungen + ItemCollection configItemCollection = configService.loadConfiguration("AGL_CONFIGURATION"); + List currencyList = configItemCollection.getItemValue("currency.out"); + if (currencyList == null || currencyList.size() < 1) { + throw new PluginException(AGLAnalyticExcelAdapter.class.getSimpleName(), + InvoiceService.ERROR_CONFIG, + "missing Currency configuration - please check parameters"); + } + return currencyList.get(0); + } + /** * Liefert die Liste der Eingehenden Währungen * diff --git a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/ZahlungseingangSaldoAdapter.java b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/ZahlungseingangSaldoAdapter.java index d354b37..7e60d1d 100644 --- a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/ZahlungseingangSaldoAdapter.java +++ b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/ZahlungseingangSaldoAdapter.java @@ -7,6 +7,7 @@ import org.imixs.workflow.ItemCollection; import org.imixs.workflow.SignalAdapter; import org.imixs.workflow.exceptions.AdapterException; import org.imixs.workflow.exceptions.PluginException; +import org.imixs.workflow.faces.util.ResourceBundleHandler; import jakarta.inject.Inject; @@ -34,6 +35,12 @@ public class ZahlungseingangSaldoAdapter implements SignalAdapter { @Inject ZahlungseingangService zahlungseingangService; + @Inject + InvoiceService invoiceService; + + @Inject + ResourceBundleHandler resourceBundleHandler; + /** * This method finds the outgoing invoices and updates the saldo * (payment.total). @@ -85,9 +92,10 @@ public class ZahlungseingangSaldoAdapter implements SignalAdapter { // dann soll eine Warnung ausgegen werden. if (InvoiceUtil.round(masterPaymentAmount + masterPaymentDifference) != InvoiceUtil.round(einzelPayments)) { workitem.setItemValue("payment.warning", "invalid saldo"); + + String message = resourceBundleHandler.findMessage("ERROR_PAYMENT2"); throw new PluginException(PluginException.class.getName(), - ZahlungseingangService.ERROR_PAYMENT_BOOKING_FAILED, - "Der Zahlungseingang ist nicht identisch mit den ausgebuchten Rechnungssalden. Sollte die Eingabe korrekt sein, wiederholen Sie die Aktion."); + ZahlungseingangService.ERROR_PAYMENT_BOOKING_FAILED, message); } } @@ -102,12 +110,23 @@ public class ZahlungseingangSaldoAdapter implements SignalAdapter { float invoicePaymentAmount = payment.getItemValueFloat("payment.amount"); float invoiceRate = invoice.getItemValueFloat("invoice.rate"); + String mainCurrency = invoiceService.getCurrenciesOutMain(); + if (!invoiceCurrency.equals(mainCurrency) && !paymentCurrency.equals(mainCurrency)) { + String message = resourceBundleHandler.findMessage("ERROR_PAYMENT4"); + message = message.replace("{1}", mainCurrency); + throw new PluginException(PluginException.class.getName(), + ZahlungseingangService.ERROR_PAYMENT_BOOKING_FAILED, + message); + } + if (!invoiceCurrency.equals(paymentCurrency)) { if (invoiceRate == 0) { + String message = resourceBundleHandler.findMessage("ERROR_PAYMENT1"); + message = message.replace("{1}", paymentCurrency); + message = message.replace("{2}", invoiceNumber); throw new PluginException(PluginException.class.getName(), ZahlungseingangService.ERROR_PAYMENT_BOOKING_FAILED, - "Der Zahlungseingang kann nicht verbucht werden, da die Währung " + paymentCurrency - + " nicht mit der Währung der Rechnung " + invoiceNumber + " übereinstimmt!"); + message); } } @@ -125,10 +144,10 @@ public class ZahlungseingangSaldoAdapter implements SignalAdapter { // vergeiche Restsaldo mit payment für diese Rechnung if (!isPaymentBooked(workitem) && Math.abs(InvoiceUtil.round(invoicePaymentAmount)) > Math .abs(InvoiceUtil.round(invoiceSaldo))) { + String message = resourceBundleHandler.findMessage("ERROR_PAYMENT3"); + message = message.replace("{1}", invoiceNumber); throw new PluginException(PluginException.class.getName(), - ZahlungseingangService.ERROR_PAYMENT_BOOKING_FAILED, - "Der Zahlungseingang kann nicht verbucht werden, da der Restsaldo der Rechnung " - + invoiceNumber + " kleiner als der Zahlbetrag ist!"); + ZahlungseingangService.ERROR_PAYMENT_BOOKING_FAILED, message); } // jetzt den Rechnungsbetrag verkleinern @@ -147,7 +166,7 @@ public class ZahlungseingangSaldoAdapter implements SignalAdapter { } else { throw new PluginException(PluginException.class.getName(), - ZahlungseingangService.ERROR_PAYMENT_BOOKING_FAILED, "Rechnung konnte nicht gefunden werden!"); + ZahlungseingangService.ERROR_PAYMENT_BOOKING_FAILED, "Invoice not found!"); } } diff --git a/office-alexander-logistics-app/src/main/resources/bundle/custom_de.properties b/office-alexander-logistics-app/src/main/resources/bundle/custom_de.properties index d7a1287..56b483e 100644 --- a/office-alexander-logistics-app/src/main/resources/bundle/custom_de.properties +++ b/office-alexander-logistics-app/src/main/resources/bundle/custom_de.properties @@ -65,3 +65,7 @@ ERROR_MISSING_TAX=Eingabefehler - Die Steuer in Zeile {1} muss ausgefüllt sein! ERROR_MISSING_NET=Eingabefehler - Der Nettobetrag in Zeile {1} darf nicht 0 sein! ERROR_MISSING_PAYMENT=Eingabefehler - Bitte wählen Sie eine Zahlungsart aus! +ERROR_PAYMENT1="Der Zahlungseingang kann nicht verbucht werden, da die Währung {1} nicht mit der Währung der Rechnung {2} übereinstimmt!" +ERROR_PAYMENT2="Der Zahlungseingang ist nicht identisch mit den ausgebuchten Rechnungssalden. Sollte die Eingabe korrekt sein, wiederholen Sie die Aktion." +ERROR_PAYMENT3="Der Zahlungseingang kann nicht verbucht werden, da der Restsaldo der Rechnung {1} kleiner als der Zahlbetrag ist!" +ERROR_PAYMENT4="Wenigstens eine ausgewählte Währung muss der Hauptwährung {1} entsprechen!" \ No newline at end of file diff --git a/office-alexander-logistics-app/src/main/resources/bundle/custom_en.properties b/office-alexander-logistics-app/src/main/resources/bundle/custom_en.properties index 060b177..284e784 100644 --- a/office-alexander-logistics-app/src/main/resources/bundle/custom_en.properties +++ b/office-alexander-logistics-app/src/main/resources/bundle/custom_en.properties @@ -63,3 +63,8 @@ ERROR_MISSING_TAX=Input error - The tax in line {1} must be filled in! ERROR_MISSING_NET=Input error - The net amount in line {1} must not be 0! ERROR_MISSING_PAYMENT=Input error - Please select a payment method! + +ERROR_PAYMENT1="The payment cannot be posted because the currency {1} does not match the invoice currency {2}!" +ERROR_PAYMENT2="The incoming payment does not match the posted invoice balances. If the input is correct, please repeat the action." +ERROR_PAYMENT3="The payment cannot be posted because the remaining balance of invoice {1} is less than the payment amount!" +ERROR_PAYMENT4="At least one selected currency must match the main currency {1}!" \ No newline at end of file