From 6fef683247ebec7579b1f08f16888c85d2201b1d Mon Sep 17 00:00:00 2001
From: aboeckle <alexander.boeckle@frentix.com>
Date: Fri, 13 Mar 2020 18:17:51 +0100
Subject: [PATCH] OO-4575: Fixed existing errors in booking methods

---
 .../ui/FreeAccessConfigurationController.java | 13 ++++++++++++
 .../PaypalAccessConfigurationController.java  | 20 +++++++++++++++++--
 ...CheckoutAccessConfigurationController.java | 18 +++++++++++++++--
 .../ui/_i18n/LocalStrings_de.properties       |  2 ++
 .../ui/_i18n/LocalStrings_en.properties       |  2 ++
 .../ui/_i18n/LocalStrings_fr.properties       |  1 +
 .../ui/_i18n/LocalStrings_pt_BR.properties    |  1 +
 .../TokenAccessConfigurationController.java   |  6 ++++++
 .../token/ui/_i18n/LocalStrings_de.properties |  2 +-
 .../token/ui/_i18n/LocalStrings_en.properties |  2 +-
 .../token/ui/_i18n/LocalStrings_fr.properties |  2 +-
 .../token/ui/_i18n/LocalStrings_it.properties |  2 +-
 .../token/ui/_i18n/LocalStrings_pl.properties |  2 +-
 .../ui/_i18n/LocalStrings_pt_BR.properties    |  2 +-
 .../ui/_i18n/LocalStrings_de.properties       |  1 +
 .../ui/_i18n/LocalStrings_en.properties       |  1 +
 16 files changed, 67 insertions(+), 10 deletions(-)

diff --git a/src/main/java/org/olat/resource/accesscontrol/provider/free/ui/FreeAccessConfigurationController.java b/src/main/java/org/olat/resource/accesscontrol/provider/free/ui/FreeAccessConfigurationController.java
index 03010686383..c7223c6cdac 100644
--- a/src/main/java/org/olat/resource/accesscontrol/provider/free/ui/FreeAccessConfigurationController.java
+++ b/src/main/java/org/olat/resource/accesscontrol/provider/free/ui/FreeAccessConfigurationController.java
@@ -103,4 +103,17 @@ public class FreeAccessConfigurationController extends AbstractConfigurationMeth
 		link.setValidTo(dateTo.getDate());
 		return link;
 	}
+	
+	@Override
+	protected boolean validateFormLogic(UserRequest ureq) {
+		boolean allOk = super.validateFormLogic(ureq);
+		
+		if (dateFrom.getValue() != null && dateTo.getValue() != null && dateFrom.getValue().compareTo(dateTo.getValue()) > 0) {
+			dateTo.setErrorKey("date.error", null);
+			dateFrom.setErrorKey(null, null);
+			allOk = false;
+		}
+		
+		return allOk;
+	}
 }
diff --git a/src/main/java/org/olat/resource/accesscontrol/provider/paypal/ui/PaypalAccessConfigurationController.java b/src/main/java/org/olat/resource/accesscontrol/provider/paypal/ui/PaypalAccessConfigurationController.java
index e99f55ec3b7..5466336c4c8 100644
--- a/src/main/java/org/olat/resource/accesscontrol/provider/paypal/ui/PaypalAccessConfigurationController.java
+++ b/src/main/java/org/olat/resource/accesscontrol/provider/paypal/ui/PaypalAccessConfigurationController.java
@@ -41,6 +41,7 @@ import org.olat.resource.accesscontrol.model.PriceImpl;
 import org.olat.resource.accesscontrol.provider.paypal.PaypalModule;
 import org.olat.resource.accesscontrol.ui.AbstractConfigurationMethodController;
 import org.olat.resource.accesscontrol.ui.AccessConfigurationController;
+import org.olat.resource.accesscontrol.ui.PriceFormat;
 import org.springframework.beans.factory.annotation.Autowired;
 
 /**
@@ -185,17 +186,26 @@ public class PaypalAccessConfigurationController extends AbstractConfigurationMe
 		boolean allOk = super.validateFormLogic(ureq);
 		
 		String priceStr = priceEl.getValue();
+		Double priceDbl = 0d;
+		
 		priceEl.clearError();
 		try {
-			double priceDbl = Double.parseDouble(priceStr);
+			priceDbl = Double.parseDouble(priceStr);
 			if(priceDbl <= 0.0d) {
 				priceEl.setErrorKey("price.error", null);
 				allOk = false;
-			}
+			} 			
 		} catch(Exception e) {
 			priceEl.setErrorKey("price.error", null);
 			allOk = false;
 		}
+		
+		try {
+			PriceFormat.format(BigDecimal.valueOf(priceDbl));
+		} catch (Exception e) {
+			priceEl.setErrorKey("price.error", null);
+			allOk = false;
+		}
 
 		currencyEl.clearError();
 		if(!currencyEl.isOneSelected()) {
@@ -203,6 +213,12 @@ public class PaypalAccessConfigurationController extends AbstractConfigurationMe
 			allOk = false;
 		}
 
+		if (dateFrom.getValue() != null && dateTo.getValue() != null && dateFrom.getValue().compareTo(dateTo.getValue()) > 0) {
+			dateTo.setErrorKey("date.error", null);
+			dateFrom.setErrorKey(null, null);
+			allOk = false;
+		}
+
 		return allOk;
 	}
 }
diff --git a/src/main/java/org/olat/resource/accesscontrol/provider/paypalcheckout/ui/PaypalCheckoutAccessConfigurationController.java b/src/main/java/org/olat/resource/accesscontrol/provider/paypalcheckout/ui/PaypalCheckoutAccessConfigurationController.java
index 0bfd75e1bd7..11bbeed9e27 100644
--- a/src/main/java/org/olat/resource/accesscontrol/provider/paypalcheckout/ui/PaypalCheckoutAccessConfigurationController.java
+++ b/src/main/java/org/olat/resource/accesscontrol/provider/paypalcheckout/ui/PaypalCheckoutAccessConfigurationController.java
@@ -162,17 +162,26 @@ public class PaypalCheckoutAccessConfigurationController extends AbstractConfigu
 		boolean allOk = super.validateFormLogic(ureq);
 		
 		String priceStr = priceEl.getValue();
+		Double priceDbl = 0d;
+		
 		priceEl.clearError();
 		try {
-			double priceDbl = Double.parseDouble(priceStr);
+			priceDbl = Double.parseDouble(priceStr);
 			if(priceDbl <= 0.0d) {
 				priceEl.setErrorKey("price.error", null);
 				allOk = false;
-			}
+			} 			
 		} catch(Exception e) {
 			priceEl.setErrorKey("price.error", null);
 			allOk = false;
 		}
+		
+		try {
+			PriceFormat.format(BigDecimal.valueOf(priceDbl));
+		} catch (Exception e) {
+			priceEl.setErrorKey("price.error", null);
+			allOk = false;
+		}
 
 		currencyEl.clearError();
 		if(!currencyEl.isOneSelected()) {
@@ -180,6 +189,11 @@ public class PaypalCheckoutAccessConfigurationController extends AbstractConfigu
 			allOk = false;
 		}
 
+		if (datesEl.getDate() != null && datesEl.getSecondDate() != null && datesEl.getDate().compareTo(datesEl.getSecondDate()) > 0) {
+			datesEl.setErrorKey("date.error", null);
+			allOk = false;
+		}
+
 		return allOk;
 	}
 
diff --git a/src/main/java/org/olat/resource/accesscontrol/provider/paypalcheckout/ui/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/resource/accesscontrol/provider/paypalcheckout/ui/_i18n/LocalStrings_de.properties
index e14c5392e09..c6818d2064b 100644
--- a/src/main/java/org/olat/resource/accesscontrol/provider/paypalcheckout/ui/_i18n/LocalStrings_de.properties
+++ b/src/main/java/org/olat/resource/accesscontrol/provider/paypalcheckout/ui/_i18n/LocalStrings_de.properties
@@ -9,6 +9,7 @@ checkout.config.title=Paypal Checkout konfigurieren
 config.disabled.warning=Das PayPal Bezahlungsmodul ist f\u00FCr dieses System nicht freigeschaltet. Um Buchungen \u00FCber PayPal abwickeln zu k\u00F6nnen, nehmen Sie bitte Kontakt auf mit <a href="mailto:{0}">{0}</a>.
 currency=W\u00E4hrung
 currency.error=Fehler in der W\u00E4hrungsauswahl
+date.error=Anfangsdatum kann nicht nach dem Enddatum sein
 delivery=Einka\u00FCfer
 filter.canceled=Abgebrochen
 filter.completed=Erfolgreich abgeschlossen
@@ -36,6 +37,7 @@ paypal.transaction.amount=Preis (in Paypal)
 paypal.transaction.title=Paypal Transaction "{0}"
 paypal.transactions.empty=Keine Transaktion gefunden
 price=Preis
+price.error=Fehler in der Preisangabe
 show.all=Show all
 status.canceled=Abgebrochenn
 status.error=Unerwartete Fehler
diff --git a/src/main/java/org/olat/resource/accesscontrol/provider/paypalcheckout/ui/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/resource/accesscontrol/provider/paypalcheckout/ui/_i18n/LocalStrings_en.properties
index de4ee5d67c9..df3ff08f467 100644
--- a/src/main/java/org/olat/resource/accesscontrol/provider/paypalcheckout/ui/_i18n/LocalStrings_en.properties
+++ b/src/main/java/org/olat/resource/accesscontrol/provider/paypalcheckout/ui/_i18n/LocalStrings_en.properties
@@ -9,6 +9,7 @@ checkout.config.title=Configure Paypal Checkout
 config.disabled.warning=The PayPal payment module is not activated for this system. To handle bookings via PayPal can you please contact <a href="mailto:{0}">{0}</a>.
 currency=Currency
 currency.error=Currency error
+date.error=Start date cannot be set after the end date
 delivery=Buyer
 filter.canceled=Cancelled
 filter.completed=Closed successfully
@@ -36,6 +37,7 @@ paypal.transaction.amount=Price (Paypal)
 paypal.transaction.title=Paypal Transaction "{0}"
 paypal.transactions.empty=No transaction found
 price=Price
+price.error=Price error
 show.all=Alle anzeigen
 status.canceled=Cancelled
 status.error=Unexpected error
diff --git a/src/main/java/org/olat/resource/accesscontrol/provider/paypalcheckout/ui/_i18n/LocalStrings_fr.properties b/src/main/java/org/olat/resource/accesscontrol/provider/paypalcheckout/ui/_i18n/LocalStrings_fr.properties
index e308d5fea81..dd129528ad5 100644
--- a/src/main/java/org/olat/resource/accesscontrol/provider/paypalcheckout/ui/_i18n/LocalStrings_fr.properties
+++ b/src/main/java/org/olat/resource/accesscontrol/provider/paypalcheckout/ui/_i18n/LocalStrings_fr.properties
@@ -37,6 +37,7 @@ paypal.transaction.amount=Prix (Paypal)
 paypal.transaction.title=Transaction Paypal "{0}"
 paypal.transactions.empty=Pas de transactions trouv\u00E9es
 price=Prix
+price.error=Erreur dans l'indication du prix
 show.all=Tout afficher
 status.canceled=Annul\u00E9
 status.error=Erreur inattendue
diff --git a/src/main/java/org/olat/resource/accesscontrol/provider/paypalcheckout/ui/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/resource/accesscontrol/provider/paypalcheckout/ui/_i18n/LocalStrings_pt_BR.properties
index 8e491e759e7..0449c52adf6 100644
--- a/src/main/java/org/olat/resource/accesscontrol/provider/paypalcheckout/ui/_i18n/LocalStrings_pt_BR.properties
+++ b/src/main/java/org/olat/resource/accesscontrol/provider/paypalcheckout/ui/_i18n/LocalStrings_pt_BR.properties
@@ -36,6 +36,7 @@ paypal.transaction.amount=Pre\u00E7o (Paypal)
 paypal.transaction.title=Transa\u00E7\u00E3o Paypal \u201C{0}\u201D
 paypal.transactions.empty=Nenhuma transa\u00E7\u00E3o encontrada
 price=Pre\u00E7o
+price.error=Price error
 show.all=Mostrar tudo
 status.canceled=Cancelado
 status.error=Erro inesperado
diff --git a/src/main/java/org/olat/resource/accesscontrol/provider/token/ui/TokenAccessConfigurationController.java b/src/main/java/org/olat/resource/accesscontrol/provider/token/ui/TokenAccessConfigurationController.java
index 7db2cfbeb36..d55fb2570f3 100644
--- a/src/main/java/org/olat/resource/accesscontrol/provider/token/ui/TokenAccessConfigurationController.java
+++ b/src/main/java/org/olat/resource/accesscontrol/provider/token/ui/TokenAccessConfigurationController.java
@@ -113,6 +113,12 @@ public class TokenAccessConfigurationController extends AbstractConfigurationMet
 			allOk = false;
 		}
 		
+		if (dateFrom.getValue() != null && dateTo.getValue() != null && dateFrom.getValue().compareTo(dateTo.getValue()) > 0) {
+			dateTo.setErrorKey("date.error", null);
+			dateFrom.setErrorKey(null, null);
+			allOk = false;
+		}
+		
 		return allOk && super.validateFormLogic(ureq);
 	}
 }
diff --git a/src/main/java/org/olat/resource/accesscontrol/provider/token/ui/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/resource/accesscontrol/provider/token/ui/_i18n/LocalStrings_de.properties
index 8ed7996db0a..0726d72811c 100644
--- a/src/main/java/org/olat/resource/accesscontrol/provider/token/ui/_i18n/LocalStrings_de.properties
+++ b/src/main/java/org/olat/resource/accesscontrol/provider/token/ui/_i18n/LocalStrings_de.properties
@@ -5,6 +5,6 @@ access.token.desc=Diese Ressource ist mit einem Zugangscode gesch\u00fctzt. Gebe
 access.button=Buchen
 offer.description=$org.olat.resource.accesscontrol.ui\:offer.description
 token.method=Zugangscode
-invalid.token.format=Der Zugangscode muss aus mindestens einem Zeichen bestehen
+invalid.token.format=Der Zugangscode muss aus mindestens zwei Zeichen bestehen
 invalid.token=Falscher Zugangscode
 create=$org.olat.resource.accesscontrol.ui\:create
diff --git a/src/main/java/org/olat/resource/accesscontrol/provider/token/ui/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/resource/accesscontrol/provider/token/ui/_i18n/LocalStrings_en.properties
index e087da449b0..b108b9042ed 100644
--- a/src/main/java/org/olat/resource/accesscontrol/provider/token/ui/_i18n/LocalStrings_en.properties
+++ b/src/main/java/org/olat/resource/accesscontrol/provider/token/ui/_i18n/LocalStrings_en.properties
@@ -6,5 +6,5 @@ accesscontrol.token=Access code
 offer.description=$org.olat.resource.accesscontrol.ui\:offer.description
 token.method=Access code
 invalid.token=Wrong access code
-invalid.token.format=The access code must consist of at least one symbol
+invalid.token.format=The access code must consist of at least two characters
 create=$org.olat.resource.accesscontrol.ui\:create
\ No newline at end of file
diff --git a/src/main/java/org/olat/resource/accesscontrol/provider/token/ui/_i18n/LocalStrings_fr.properties b/src/main/java/org/olat/resource/accesscontrol/provider/token/ui/_i18n/LocalStrings_fr.properties
index c6ec298aced..7b5c63dc7e4 100644
--- a/src/main/java/org/olat/resource/accesscontrol/provider/token/ui/_i18n/LocalStrings_fr.properties
+++ b/src/main/java/org/olat/resource/accesscontrol/provider/token/ui/_i18n/LocalStrings_fr.properties
@@ -5,6 +5,6 @@ access.token.title=Ressource prot\u00E9g\u00E9e
 accesscontrol.token=Code d'acc\u00E8s
 create=$org.olat.resource.accesscontrol.ui\:create
 invalid.token=Code d'acc\u00E8s incorrecte
-invalid.token.format=Le code d'acc\u00E8s doit contenir au moins un caract\u00E8re.
+invalid.token.format=Le code d'acc\u00E8s doit contenir au moins deux caract\u00E8res.
 offer.description=$org.olat.resource.accesscontrol.ui\:offer.description
 token.method=Code d'acc\u00E8s
diff --git a/src/main/java/org/olat/resource/accesscontrol/provider/token/ui/_i18n/LocalStrings_it.properties b/src/main/java/org/olat/resource/accesscontrol/provider/token/ui/_i18n/LocalStrings_it.properties
index 48bc4dfb6f9..a64af2f9a48 100644
--- a/src/main/java/org/olat/resource/accesscontrol/provider/token/ui/_i18n/LocalStrings_it.properties
+++ b/src/main/java/org/olat/resource/accesscontrol/provider/token/ui/_i18n/LocalStrings_it.properties
@@ -5,6 +5,6 @@ access.token.title=Risorsa protetta
 accesscontrol.token=Codice di accesso
 create=$org.olat.resource.accesscontrol.ui\:create
 invalid.token=Codice di accesso errato
-invalid.token.format=Il codice di accesso deve contenere almeno un carattere.
+invalid.token.format=Il codice di accesso deve contenere almeno due caratteri.
 offer.description=$org.olat.resource.accesscontrol.ui\:offer.description
 token.method=Codice di accesso
diff --git a/src/main/java/org/olat/resource/accesscontrol/provider/token/ui/_i18n/LocalStrings_pl.properties b/src/main/java/org/olat/resource/accesscontrol/provider/token/ui/_i18n/LocalStrings_pl.properties
index 7d9150798f9..9dadb2a51f4 100644
--- a/src/main/java/org/olat/resource/accesscontrol/provider/token/ui/_i18n/LocalStrings_pl.properties
+++ b/src/main/java/org/olat/resource/accesscontrol/provider/token/ui/_i18n/LocalStrings_pl.properties
@@ -2,6 +2,6 @@
 accesscontrol.token=Kod dost\u0119pu
 create=Utw\u00F3rz
 invalid.token=B\u0142\u0119dny kod dost\u0119pu
-invalid.token.format=Kod dost\u0119pu musi zawiera\u0107 co najmniej jeden znak
+invalid.token.format=Kod dost\u0119pu musi zawiera\u0107 co najmniej dwa znaki.
 offer.description=Opis
 token.method=Kod dost\u0119pu
diff --git a/src/main/java/org/olat/resource/accesscontrol/provider/token/ui/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/resource/accesscontrol/provider/token/ui/_i18n/LocalStrings_pt_BR.properties
index da27773b7c9..d5c51c505fc 100644
--- a/src/main/java/org/olat/resource/accesscontrol/provider/token/ui/_i18n/LocalStrings_pt_BR.properties
+++ b/src/main/java/org/olat/resource/accesscontrol/provider/token/ui/_i18n/LocalStrings_pt_BR.properties
@@ -5,6 +5,6 @@ access.token.title=Conte\u00FAdo protegido
 accesscontrol.token=C\u00F3digo de acesso
 create=$org.olat.resource.accesscontrol.ui\:create
 invalid.token=C\u00F3digo de acesso errado
-invalid.token.format=O c\u00F3digo de acesso deve ter pelo menos um s\u00EDmbolo
+invalid.token.format=O c\u00F3digo de acesso deve ter pelo menos dois caracteres.
 offer.description=$org.olat.resource.accesscontrol.ui\:offer.description
 token.method=C\u00F3digo de acesso
diff --git a/src/main/java/org/olat/resource/accesscontrol/ui/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/resource/accesscontrol/ui/_i18n/LocalStrings_de.properties
index a9fdeaf9c92..45ff7203382 100644
--- a/src/main/java/org/olat/resource/accesscontrol/ui/_i18n/LocalStrings_de.properties
+++ b/src/main/java/org/olat/resource/accesscontrol/ui/_i18n/LocalStrings_de.properties
@@ -42,6 +42,7 @@ cmd.title=Zugangskontrolle
 confirmation.email=Best\u00E4tigungsemail f\u00FCr selbst eingetragene Benutzer
 course.closed=$org.olat.course.run\:course.closed
 create=Erstellen
+date.error=Anfangsdatum kann nicht nach dem Enddatum sein
 from=Von\:
 from.hint=Bis zum eingetragenen Datum bedeutet, bis zum Ende des gew\u00E4hlten Tages um 23:59:59 Uhr.
 info.membership.deleted=Der Benutzer wurde erfolgreich aus der Liste entfernt.
diff --git a/src/main/java/org/olat/resource/accesscontrol/ui/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/resource/accesscontrol/ui/_i18n/LocalStrings_en.properties
index f0be1239b7f..d00aff49e98 100644
--- a/src/main/java/org/olat/resource/accesscontrol/ui/_i18n/LocalStrings_en.properties
+++ b/src/main/java/org/olat/resource/accesscontrol/ui/_i18n/LocalStrings_en.properties
@@ -37,6 +37,7 @@ admin.desc=Here you can define if the access control mechanism for learning reso
 admin.menu.title=Access control
 admin.menu.title.alt=$\:admin.title
 admin.title=Access control and booking methods administration
+date.error=Start date cannot be set after the end date
 
 
 
-- 
GitLab