error handling payment

This commit is contained in:
Ralph Soika 2024-11-24 19:45:36 +01:00
parent ca2e72bc37
commit 8e6f97ffa4
4 changed files with 55 additions and 8 deletions

View file

@ -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<String> 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
*

View file

@ -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!");
}
}

View file

@ -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!"

View file

@ -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}!"