diff --git a/org.adempiere.base.callout/src/org/compiere/model/CalloutPayment.java b/org.adempiere.base.callout/src/org/compiere/model/CalloutPayment.java index 1ca3a98309..1e46f97b1c 100644 --- a/org.adempiere.base.callout/src/org/compiere/model/CalloutPayment.java +++ b/org.adempiere.base.callout/src/org/compiere/model/CalloutPayment.java @@ -433,7 +433,7 @@ public class CalloutPayment extends CalloutEngine currency.getStdPrecision (), RoundingMode.HALF_UP); mTab.setValue ("OverUnderAmt", OverUnderAmt); } - // No Invoice - Set Discount, Witeoff, Under/Over to 0 + // No Invoice - Set Discount, Writeoff, Under/Over to 0 else if (C_Invoice_ID == 0) { if (Env.ZERO.compareTo (DiscountAmt) != 0) @@ -448,8 +448,12 @@ public class CalloutPayment extends CalloutEngine && (!processed) && "Y".equals (Env.getContext (ctx, WindowNo, "IsOverUnderPayment"))) { - OverUnderAmt = InvoiceOpenAmt.subtract (PayAmt).subtract ( - DiscountAmt).subtract (WriteOffAmt); + OverUnderAmt = InvoiceOpenAmt.subtract (PayAmt).subtract(DiscountAmt).subtract (WriteOffAmt); + if (OverUnderAmt.signum() > 0) { // no discount because is not paid in full + DiscountAmt = Env.ZERO; + mTab.setValue ("DiscountAmt", DiscountAmt); + OverUnderAmt = InvoiceOpenAmt.subtract (PayAmt).subtract(DiscountAmt).subtract (WriteOffAmt); + } mTab.setValue ("OverUnderAmt", OverUnderAmt); } else if (colName.equals ("PayAmt") diff --git a/org.adempiere.base/src/org/compiere/model/MToolBarButton.java b/org.adempiere.base/src/org/compiere/model/MToolBarButton.java index 3bc3019e48..dee868459b 100644 --- a/org.adempiere.base/src/org/compiere/model/MToolBarButton.java +++ b/org.adempiere.base/src/org/compiere/model/MToolBarButton.java @@ -50,10 +50,12 @@ public class MToolBarButton extends X_AD_ToolBarButton { public static MToolBarButton[] getProcessButtonOfTab(int AD_Tab_ID, String trxName) { MToolBarButton[] buttons = new MToolBarButton[0]; - - Query query = new Query(Env.getCtx(), MTable.get(Env.getCtx(), Table_ID), "AD_Tab_ID=? AND Action=? AND AD_Process_ID IS NOT NULL", trxName); + + Query query = new Query(Env.getCtx(), MTable.get(Env.getCtx(), Table_ID), "AD_ToolBarButton.AD_Tab_ID=? AND AD_ToolBarButton.Action=? AND AD_ToolBarButton.AD_Process_ID IS NOT NULL", trxName) + .addJoinClause("INNER JOIN AD_Process p ON (p.AD_Process_ID = AD_ToolBarButton.AD_Process_ID AND p.IsActive = 'Y')"); + List list = query.setParameters(AD_Tab_ID, "W").setOnlyActiveRecords(true) - .setOrderBy("CASE WHEN COALESCE(SeqNo,0)=0 THEN AD_ToolBarButton_ID ELSE SeqNo END").list(); + .setOrderBy("CASE WHEN COALESCE(AD_ToolBarButton.SeqNo,0)=0 THEN AD_ToolBarButton.AD_ToolBarButton_ID ELSE AD_ToolBarButton.SeqNo END").list(); if (list != null && !list.isEmpty()) { buttons = list.toArray(buttons); } diff --git a/org.adempiere.base/src/org/compiere/model/vtpassword_messages_fr.properties b/org.adempiere.base/src/org/compiere/model/vtpassword_messages_fr.properties new file mode 100644 index 0000000000..99e2052d73 --- /dev/null +++ b/org.adempiere.base/src/org/compiere/model/vtpassword_messages_fr.properties @@ -0,0 +1,15 @@ +HISTORY_VIOLATION=Le mot de passe correspond a un des %1%s mots de passe pr\u00E9c\u00E9dent. +ILLEGAL_WORD=Le mot de passe inclus le mot du dictionnaire : '%1%s'. +ILLEGAL_WORD_REVERSED=Le mot de passe inclus le mot invers\u00E9 du dictionnaire : '%1%s'. +ILLEGAL_MATCH=Le mot de passe correspond \u00e0 la s\u00E9quence interdite : '%1%s'. +ILLEGAL_CHAR=Le mot de passe inclus ce(s) caract\u00e8re(s) interdit(s) '%1%s'. +ALLOWED_CHAR=Le mot de passe contient le caract\u00e8re interdit '%1$s'. +ILLEGAL_SEQUENCE=Le mot de passe inclus la s\u00E9quence interdite : '%1$s'. +ILLEGAL_USERNAME=Le mot de passe est compos\u00E9 du nom d'utilisateur '%1$s'. +ILLEGAL_USERNAME_REVERSED=Le mot de passe est compos\u00E9 du nom d'utilisateur '%1$s' invers\u00E9. +ILLEGAL_WHITESPACE=Le mot de passe ne peut contenir d'espaces. +INSUFFICIENT_CHARACTERS=Le mot de passe doit \u00eatre compos\u00E9 d'au minimum '%1$s' caract\u00e8re(s) '%2$s'. +INSUFFICIENT_CHARACTERISTICS=Le mot de passe remplit %1$s des %2$s des pr\u00E9requis, mais '%3$s' sont requis. +SOURCE_VIOLATION=Le mot de passe ne peut \u00eatre identique a votre %1$s mot de passe. +TOO_LONG=Le mot de passe ne peut \u00eatre compos\u00E9 de plus de %2$s caract\u00e8res. +TOO_SHORT=Le mot de passe doit \u00eatre compos\u00E9 d'au moins %1$s caract\u00e8res. diff --git a/org.adempiere.base/src/org/compiere/model/vtpassword_messages_it.properties b/org.adempiere.base/src/org/compiere/model/vtpassword_messages_it.properties new file mode 100644 index 0000000000..ec4ba48568 --- /dev/null +++ b/org.adempiere.base/src/org/compiere/model/vtpassword_messages_it.properties @@ -0,0 +1,15 @@ +HISTORY_VIOLATION=La password corrisponde a una delle %1%s precedenti +ILLEGAL_WORD=La password ha la parola del dizionario: '%1%s'. +ILLEGAL_WORD_REVERSED=La password ha la parola al contrario del dizionario: '%1%s'. +ILLEGAL_MATCH=La password corrisponde alla sequenza vietata: '%1%s'. +ILLEGAL_CHAR=La password contiene caratteri vietati '%1%s'. +ALLOWED_CHAR=La password contiene il carattere vietato '%1$s'. +ILLEGAL_SEQUENCE=La password contiene la sequenza vietata: '%1$s'. +ILLEGAL_USERNAME=La password \u00e8 composta dal nome utente '%1$s'. +ILLEGAL_USERNAME_REVERSED=La password contiene il nome utente '%1$s' al contrario. +ILLEGAL_WHITESPACE=La pasword non pu\u00F2 contenere spazie. +INSUFFICIENT_CHARACTERS=La password deve contenere un minimo di '%1$s' caratteri '%2$s'. +INSUFFICIENT_CHARACTERISTICS==La password digitata %1$s su %2$s dei pre requisiti ma '%3$s' sono richiesti. +SOURCE_VIOLATION=La password non puo esssere identica a tua %1$s password. +TOO_LONG=La password deve avere pi\u00f9 di %2$s caratteri. +TOO_SHORT=La password deve avere almeno %1$s caratteri. diff --git a/org.adempiere.base/src/org/compiere/util/DisplayType.java b/org.adempiere.base/src/org/compiere/util/DisplayType.java index e7c5fb5c96..2a4fe4be99 100644 --- a/org.adempiere.base/src/org/compiere/util/DisplayType.java +++ b/org.adempiere.base/src/org/compiere/util/DisplayType.java @@ -355,7 +355,7 @@ public final class DisplayType { Language myLanguage = language; if (myLanguage == null) - myLanguage = Language.getLoginLanguage(); + myLanguage = Env.getLocaleLanguage(Env.getCtx()); Locale locale = myLanguage.getLocale(); DecimalFormat format = null; if (locale != null) diff --git a/org.adempiere.base/src/org/compiere/util/Env.java b/org.adempiere.base/src/org/compiere/util/Env.java index 09d1ba5a66..6146e8618a 100644 --- a/org.adempiere.base/src/org/compiere/util/Env.java +++ b/org.adempiere.base/src/org/compiere/util/Env.java @@ -37,6 +37,7 @@ import java.util.Date; import java.util.Enumeration; import java.util.Iterator; import java.util.List; +import java.util.Locale; import java.util.Properties; import java.util.Set; import java.util.logging.Level; @@ -1144,6 +1145,45 @@ public final class Env return Language.getLoginLanguage(); } // getLanguage + /** + * @param ctx + * @return Language + */ + public static Language getLocaleLanguage(Properties ctx) { + Locale locale = getLocale(ctx); + Language language = Env.getLanguage(ctx); + if (!language.getLocale().equals(locale)) { + Language tmp = Language.getLanguage(locale.toString()); + String adLanguage = language.getAD_Language(); + language = new Language(tmp.getName(), adLanguage, tmp.getLocale(), tmp.isDecimalPoint(), + tmp.getDateFormat().toPattern(), tmp.getMediaSize()); + } + return language; + } + + public static final String LOCALE = "#Locale"; + /** + * @param ctx + * @return Locale + */ + public static Locale getLocale(Properties ctx) { + String value = Env.getContext(ctx, Env.LOCALE); + Locale locale = null; + if (value != null && value.length() > 0) + { + String[] components = value.split("\\_"); + String language = components.length > 0 ? components[0] : ""; + String country = components.length > 1 ? components[1] : ""; + locale = new Locale(language, country); + } + else + { + locale = Env.getLanguage(ctx).getLocale(); + } + + return locale; + } + public static ArrayList getSupportedLanguages() { ArrayList AD_Languages = new ArrayList(); diff --git a/org.adempiere.server-feature/server.product.launch b/org.adempiere.server-feature/server.product.launch index 3af62b5b67..6e92ce0d3c 100644 --- a/org.adempiere.server-feature/server.product.launch +++ b/org.adempiere.server-feature/server.product.launch @@ -27,8 +27,8 @@ - - + + diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/AEnv.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/AEnv.java index 034b53b650..ad6e205bac 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/AEnv.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/AEnv.java @@ -90,7 +90,7 @@ import com.itextpdf.text.pdf.PdfWriter; */ public final class AEnv { - public static final String LOCALE = "#Locale"; + public static final String LOCALE = Env.LOCALE; /** * Show in the center of the screen. @@ -663,15 +663,7 @@ public final class AEnv * @return Language */ public static Language getLanguage(Properties ctx) { - Locale locale = getLocale(ctx); - Language language = Env.getLanguage(ctx); - if (!language.getLocale().equals(locale)) { - Language tmp = Language.getLanguage(locale.toString()); - String adLanguage = language.getAD_Language(); - language = new Language(tmp.getName(), adLanguage, tmp.getLocale(), tmp.isDecimalPoint(), - tmp.getDateFormat().toPattern(), tmp.getMediaSize()); - } - return language; + return Env.getLocaleLanguage(ctx); } /** @@ -679,21 +671,7 @@ public final class AEnv * @return Locale */ public static Locale getLocale(Properties ctx) { - String value = Env.getContext(ctx, AEnv.LOCALE); - Locale locale = null; - if (value != null && value.length() > 0) - { - String[] components = value.split("\\_"); - String language = components.length > 0 ? components[0] : ""; - String country = components.length > 1 ? components[1] : ""; - locale = new Locale(language, country); - } - else - { - locale = Env.getLanguage(ctx).getLocale(); - } - - return locale; + return Env.getLocale(ctx); } /** diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/component/NumberBox.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/component/NumberBox.java index 97f11373e6..8018159e93 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/component/NumberBox.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/component/NumberBox.java @@ -91,7 +91,7 @@ public class NumberBox extends Div decimalBox.setSclass("editor-input"); decimalBox.setId(decimalBox.getUuid()); - char separatorChar = DisplayType.getNumberFormat(DisplayType.Number, Env.getLanguage(Env.getCtx())).getDecimalFormatSymbols().getDecimalSeparator(); + char separatorChar = DisplayType.getNumberFormat(DisplayType.Number, null).getDecimalFormatSymbols().getDecimalSeparator(); String separator = Character.toString(separatorChar); boolean processDotKeypad = MSysConfig.getBooleanValue(MSysConfig.ZK_DECIMALBOX_PROCESS_DOTKEYPAD, true, Env.getAD_Client_ID(Env.getCtx())); if (processDotKeypad) { @@ -253,7 +253,7 @@ public class NumberBox extends Div Vbox vbox = new Vbox(); - char separatorChar = DisplayType.getNumberFormat(DisplayType.Number, Env.getLanguage(Env.getCtx())).getDecimalFormatSymbols().getDecimalSeparator(); + char separatorChar = DisplayType.getNumberFormat(DisplayType.Number, null).getDecimalFormatSymbols().getDecimalSeparator(); String separator = Character.toString(separatorChar); txtCalc = new Textbox(); diff --git a/org.idempiere.maven.to.p2/org.idempiere.maven.to.p2/pom.xml b/org.idempiere.maven.to.p2/org.idempiere.maven.to.p2/pom.xml index 4c6ac19f7e..caeba240f8 100644 --- a/org.idempiere.maven.to.p2/org.idempiere.maven.to.p2/pom.xml +++ b/org.idempiere.maven.to.p2/org.idempiere.maven.to.p2/pom.xml @@ -10,7 +10,7 @@ org.idempiere.maven.to.p2 pom - https://sourceforge.net/projects/zk1/files/ZK/zk-8.6.0.1/zk-bin-osgi-8.6.0.1.zip + https://sourceforge.net/project/zk1/ZK/zk-8.6.0.1/zk-bin-osgi-8.6.0.1.zip 9.4.14.v20181114 1.1.3.v20160715 @@ -115,12 +115,6 @@ true false - - - org.eclipse.jdt:org.eclipse.jdt.core:jar:${jdtVersion} - true - false - javax.websocket:javax.websocket-api:jar:1.1 true @@ -1762,6 +1756,39 @@ it also resolve issue confilic between eclipse runtime and tycho build 5 + + + download-zk-patch-source-for-IDEMPIERE-2003 + package + + wget + + + ${url.file.srv}/extra.jar/zul.sources_8.6.0.1-patched.jar + false + zul.sources_8.6.0.1-patched.jar + ${project.build.directory}/repository/plugins + 5 + true + true + + + + download-zk-patch-binary-for-IDEMPIERE-2003 + package + + wget + + + ${url.file.srv}/extra.jar/zul_8.6.0.1-patched.jar + false + zul_8.6.0.1-patched.jar + ${project.build.directory}/repository/plugins + 5 + true + true + + diff --git a/org.idempiere.p2.targetplatform/org.idempiere.p2.targetplatform.target b/org.idempiere.p2.targetplatform/org.idempiere.p2.targetplatform.target index 2e35ee5b6c..43edbc0866 100644 --- a/org.idempiere.p2.targetplatform/org.idempiere.p2.targetplatform.target +++ b/org.idempiere.p2.targetplatform/org.idempiere.p2.targetplatform.target @@ -1,4 +1,4 @@ - + @@ -888,30 +888,30 @@ - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + @@ -1152,8 +1152,6 @@ - - @@ -1244,8 +1242,8 @@ - - + + @@ -1298,10 +1296,12 @@ + + - +