From 85ff580ba1f0cc74e2a5c068408a0a06eb2b21b6 Mon Sep 17 00:00:00 2001 From: Elaine Tan Date: Wed, 16 Jul 2014 12:40:01 +0800 Subject: [PATCH 1/7] IDEMPIERE-2061 Ticket #1004119: HTML error on Dashboard Report detail --- .../WEB-INF/src/org/adempiere/webui/apps/graph/WGraph.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/graph/WGraph.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/graph/WGraph.java index 2938b784ea..686f49e51f 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/graph/WGraph.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/graph/WGraph.java @@ -483,7 +483,7 @@ public class WGraph extends Div implements IdSpace { Br br = new Br(); td.appendChild(br); text = new Text(stripHtml(m_goal.getColorSchema() - .getDescription(), true)); + .getDescription(), false)); td.appendChild(text); } From 300ae850ace7fbaef18b31d9d2782b3c69831a66 Mon Sep 17 00:00:00 2001 From: Elaine Tan Date: Wed, 16 Jul 2014 17:49:03 +0800 Subject: [PATCH 2/7] IDEMPIERE-2063 Ticket #1004146: cannot remove reserve quantity off order --- .../src/org/compiere/model/MOrder.java | 20 +++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/org.adempiere.base/src/org/compiere/model/MOrder.java b/org.adempiere.base/src/org/compiere/model/MOrder.java index d72e3eb1f7..07640eb37d 100644 --- a/org.adempiere.base/src/org/compiere/model/MOrder.java +++ b/org.adempiere.base/src/org/compiere/model/MOrder.java @@ -1722,15 +1722,23 @@ public class MOrder extends X_C_Order implements DocAction BigDecimal difference = target .subtract(line.getQtyReserved()) .subtract(line.getQtyDelivered()); - if (difference.signum() <= 0) + + if (difference.signum() == 0 || line.getQtyOrdered().signum() < 0) { - MProduct product = line.getProduct(); - if (product != null) + if (difference.signum() == 0 || line.getQtyReserved().signum() == 0) { - Volume = Volume.add(product.getVolume().multiply(line.getQtyOrdered())); - Weight = Weight.add(product.getWeight().multiply(line.getQtyOrdered())); + MProduct product = line.getProduct(); + if (product != null) + { + Volume = Volume.add(product.getVolume().multiply(line.getQtyOrdered())); + Weight = Weight.add(product.getWeight().multiply(line.getQtyOrdered())); + } + continue; + } + else if (line.getQtyOrdered().signum() < 0 && line.getQtyReserved().signum() > 0) + { + difference = line.getQtyReserved().negate(); } - continue; } if (log.isLoggable(Level.FINE)) log.fine("Line=" + line.getLine() From 5e9593740cc70623b391105981edf0b7b4cb20aa Mon Sep 17 00:00:00 2001 From: hieplq Date: Thu, 6 Feb 2014 14:12:06 +0700 Subject: [PATCH 3/7] IDEMPIERE-1552:When double click into non line area (include header) of infoPanel. panel close. --- .../WEB-INF/src/org/adempiere/webui/panel/InfoPanel.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/InfoPanel.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/InfoPanel.java index 90d7325851..e82958148d 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/InfoPanel.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/InfoPanel.java @@ -75,6 +75,7 @@ import org.zkoss.zk.ui.Page; import org.zkoss.zk.ui.event.Event; import org.zkoss.zk.ui.event.EventListener; import org.zkoss.zk.ui.event.Events; +import org.zkoss.zk.ui.event.MouseEvent; import org.zkoss.zk.ui.event.SelectEvent; import org.zkoss.zk.ui.util.Clients; import org.zkoss.zul.Listhead; @@ -1136,6 +1137,9 @@ public abstract class InfoPanel extends Window implements EventListener, } else if (event.getTarget() == contentPanel && event.getName().equals(Events.ON_DOUBLE_CLICK)) { + if (event.getClass().equals(MouseEvent.class)){ + return; + } if (contentPanel.isMultiple()) { if (m_lastOnSelectItem != null) contentPanel.setSelectedItem(m_lastOnSelectItem); From 520d4802e50473e45ba3cfdc6731d3da1f3a011f Mon Sep 17 00:00:00 2001 From: hieplq Date: Sun, 29 Jun 2014 13:10:58 +0700 Subject: [PATCH 4/7] IDEMPIERE-2026:when role have limit access to a user, can't select any bpartner have no contact --- org.adempiere.base/src/org/compiere/model/MRole.java | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/org.adempiere.base/src/org/compiere/model/MRole.java b/org.adempiere.base/src/org/compiere/model/MRole.java index 9a19c7c78c..cada59c317 100644 --- a/org.adempiere.base/src/org/compiere/model/MRole.java +++ b/org.adempiere.base/src/org/compiere/model/MRole.java @@ -2368,9 +2368,10 @@ public final class MRole extends X_AD_Role // NOT IN (x) if (m_recordAccess[i].isExclude()) { - if (sbExclude.length() == 0) - sbExclude.append(keyColumnName) - .append(" NOT IN ("); + if (sbExclude.length() == 0){ + sbExclude.append("(").append(keyColumnName).append(" IS NULL OR "); + sbExclude.append(keyColumnName).append(" NOT IN ("); + } else sbExclude.append(","); sbExclude.append(m_recordAccess[i].getRecord_ID()); @@ -2390,7 +2391,7 @@ public final class MRole extends X_AD_Role StringBuilder sb = new StringBuilder(); if (sbExclude.length() > 0) - sb.append(sbExclude).append(")"); + sb.append(sbExclude).append("))"); if (sbInclude.length() > 0) { if (sb.length() > 0) From 9d959afca754f426520d48c5868cf28acf91cd12 Mon Sep 17 00:00:00 2001 From: Nicolas Micoud Date: Wed, 16 Jul 2014 15:07:01 -0500 Subject: [PATCH 5/7] IDEMPIERE-775 Documents without C_DocType_ID cannot be distributed directly --- org.adempiere.base/src/org/compiere/acct/Doc.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/org.adempiere.base/src/org/compiere/acct/Doc.java b/org.adempiere.base/src/org/compiere/acct/Doc.java index 17937087a3..d03ac4aab2 100644 --- a/org.adempiere.base/src/org/compiere/acct/Doc.java +++ b/org.adempiere.base/src/org/compiere/acct/Doc.java @@ -129,7 +129,7 @@ public abstract class Doc * M_Requisition POR **************************************************************************/ - private static final String DOC_TYPE_BY_DOC_BASE_TYPE_SQL = "SELECT C_DocType_ID FROM C_DocType WHERE AD_Client_ID=? AND DocBaseType=? AND IsActive='Y'"; + private static final String DOC_TYPE_BY_DOC_BASE_TYPE_SQL = "SELECT C_DocType_ID FROM C_DocType WHERE AD_Client_ID=? AND DocBaseType=? AND IsActive='Y' ORDER BY IsDefault DESC, C_DocType_ID"; /** AR Invoices - ARI */ public static final String DOCTYPE_ARInvoice = MDocType.DOCBASETYPE_ARInvoice; From dc9f9ef96390df01a3f5259af0a5a78566d2dcf0 Mon Sep 17 00:00:00 2001 From: hieplq Date: Sun, 29 Jun 2014 14:59:23 +0700 Subject: [PATCH 6/7] IDEMPIERE-2027:Accounting Fact Reconcilation - Refresh Button Doesn't make sense --- .../adempiere/webui/apps/form/WFactReconcile.java | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/form/WFactReconcile.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/form/WFactReconcile.java index a86e3e05d6..be06bff1ef 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/form/WFactReconcile.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/form/WFactReconcile.java @@ -292,27 +292,40 @@ implements IFormController, EventListener, WTableModelListener, ValueChan if (Account_ID != 0) m_Account_ID = Account_ID; + else + m_Account_ID = 0; if(fieldOrg.getValue()!=null) m_AD_Org_ID = (Integer)fieldOrg.getValue(); + else + m_AD_Org_ID = 0; if(fieldAcctSchema.getValue()!=null) m_C_AcctSchema_ID = (Integer)fieldAcctSchema.getValue(); + else + m_C_AcctSchema_ID = 0; m_isReconciled = isReconciled.isChecked(); if(fieldBPartner.getValue()!=null) m_C_BPartner_ID = (Integer)fieldBPartner.getValue(); + else + m_C_BPartner_ID = 0; if((Integer)fieldProduct.getValue()!=null) m_M_Product_ID = (Integer)fieldProduct.getValue(); + else + m_M_Product_ID = 0; if(fieldDateAcct.getValue()!=null) m_DateAcct = (Timestamp)fieldDateAcct.getValue(); + else + m_DateAcct = null; if(fieldDateAcct2.getValue()!=null) m_DateAcct2 = (Timestamp)fieldDateAcct2.getValue(); - + else + m_DateAcct2 = null; // Set Model Vector> data = getData(); Vector columnNames = getColumnNames(); From 4dad04489110ed114314e94f8261c1be3c3b9872 Mon Sep 17 00:00:00 2001 From: Carlos Ruiz Date: Wed, 16 Jul 2014 18:24:22 -0500 Subject: [PATCH 7/7] IDEMPIERE-1866 Via web services is not possible to send DateTime for Process --- .../adinterface/CompiereService.java | 66 ++++++------------ .../org/idempiere/adinterface/Process.java | 68 ++++++++++++------- 2 files changed, 63 insertions(+), 71 deletions(-) diff --git a/org.idempiere.webservices/WEB-INF/src/org/idempiere/adinterface/CompiereService.java b/org.idempiere.webservices/WEB-INF/src/org/idempiere/adinterface/CompiereService.java index f49600d4ac..30ad3ddd95 100644 --- a/org.idempiere.webservices/WEB-INF/src/org/idempiere/adinterface/CompiereService.java +++ b/org.idempiere.webservices/WEB-INF/src/org/idempiere/adinterface/CompiereService.java @@ -15,7 +15,6 @@ import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Timestamp; -import java.text.DecimalFormat; import java.text.SimpleDateFormat; import java.util.Properties; import java.util.logging.Level; @@ -38,8 +37,6 @@ import org.compiere.util.Login; public class CompiereService { private static CLogger log = CLogger.getCLogger(CompiereService.class); - - public final static String datePattern = "dd-MM-yyyy"; private Properties m_ctx; @@ -56,32 +53,17 @@ public class CompiereService { /** Localized Date format */ public SimpleDateFormat dateFormat = null; + /** JDBC Date format */ + public SimpleDateFormat dateFormatJDBC = null; /** Localized Timestamp format */ public SimpleDateFormat dateTimeFormat = null; + /** JDBC Timestamp format */ + public SimpleDateFormat dateTimeFormatJDBC = null; + /** Localized Time format */ + public SimpleDateFormat timeFormat = null; + /** JDBC Time format */ + public SimpleDateFormat timeFormatJDBC = null; - /** Localized Amount format */ - public DecimalFormat amountFormat = null; - /** Localized Integer format */ - public DecimalFormat integerFormat = null; - /** Localized Number format */ - public DecimalFormat numberFormat = null; - /** Localized Quantity format */ - public DecimalFormat quantityFormat = null; - - /** Localized Date format */ - public SimpleDateFormat modelDateFormat = null; - /** Localized Timestamp format */ - public SimpleDateFormat modelDateTimeFormat = null; - - /** Localized Amount format */ - public DecimalFormat modelAmountFormat = null; - /** Localized Integer format */ - public DecimalFormat modelIntegerFormat = null; - /** Localized Number format */ - public DecimalFormat modelNumberFormat = null; - /** Localized Quantity format */ - public DecimalFormat modelQuantityFormat = null; - private Language m_language; public final String dateFormatOnlyForCtx = "yyyy-MM-dd"; @@ -137,17 +119,12 @@ public class CompiereService { Env.setContext( m_ctx, "#AD_Language", "en_US" ); m_language = Language.getLanguage("en_US"); - // These variables are needed for ADClient.exe - Language m_lang2 = Language.getLanguage("pl_PL"); - - - dateFormat = new SimpleDateFormat( datePattern ); - dateTimeFormat = new SimpleDateFormat( datePattern ); - - amountFormat = DisplayType.getNumberFormat(DisplayType.Amount, m_lang2); - integerFormat = DisplayType.getNumberFormat(DisplayType.Integer, m_lang2); - numberFormat = DisplayType.getNumberFormat(DisplayType.Number, m_lang2); - quantityFormat = DisplayType.getNumberFormat(DisplayType.Quantity, m_lang2); + dateFormat = DisplayType.getDateFormat(DisplayType.Date, m_language); + dateTimeFormat = DisplayType.getDateFormat(DisplayType.DateTime, m_language); + timeFormat = DisplayType.getDateFormat(DisplayType.Time, m_language); + dateFormatJDBC = DisplayType.getDateFormat_JDBC(); + dateTimeFormatJDBC = DisplayType.getTimestampFormat_Default(); + timeFormatJDBC = DisplayType.getTimeFormat_Default(); } } @@ -279,14 +256,13 @@ public class CompiereService { Env.setContext( m_ctx, "#AD_Language", Lang); m_language = Language.getLanguage(Lang); Env.verifyLanguage( getCtx(), m_language ); - - modelDateFormat = new SimpleDateFormat( datePattern ); - modelDateTimeFormat = new SimpleDateFormat( datePattern ); - - modelAmountFormat = DisplayType.getNumberFormat(DisplayType.Amount, m_language); - modelIntegerFormat = DisplayType.getNumberFormat(DisplayType.Integer, m_language); - modelNumberFormat = DisplayType.getNumberFormat(DisplayType.Number, m_language); - modelQuantityFormat = DisplayType.getNumberFormat(DisplayType.Quantity, m_language); + + dateFormat = DisplayType.getDateFormat(DisplayType.Date, m_language); + dateTimeFormat = DisplayType.getDateFormat(DisplayType.DateTime, m_language); + timeFormat = DisplayType.getDateFormat(DisplayType.Time, m_language); + dateFormatJDBC = DisplayType.getDateFormat_JDBC(); + dateTimeFormatJDBC = DisplayType.getTimestampFormat_Default(); + timeFormatJDBC = DisplayType.getTimeFormat_Default(); // Set Date Timestamp ts = new Timestamp(System.currentTimeMillis()); diff --git a/org.idempiere.webservices/WEB-INF/src/org/idempiere/adinterface/Process.java b/org.idempiere.webservices/WEB-INF/src/org/idempiere/adinterface/Process.java index 619ee054ad..492fb8e4b1 100644 --- a/org.idempiere.webservices/WEB-INF/src/org/idempiere/adinterface/Process.java +++ b/org.idempiere.webservices/WEB-INF/src/org/idempiere/adinterface/Process.java @@ -4,6 +4,7 @@ import java.io.ByteArrayOutputStream; import java.io.CharArrayWriter; import java.math.BigDecimal; import java.sql.Timestamp; +import java.text.ParseException; import java.util.HashMap; import java.util.Map; import java.util.Properties; @@ -545,35 +546,50 @@ public class Process { else if (DisplayType.isDate(displayType)) { java.util.Date d; - if (displayType == DisplayType.DateTime) - d = m_cs.dateTimeFormat.parse(value.toString()); - - else - d = m_cs.dateFormat.parse(value.toString()); - - Timestamp ts = null; - ts = new Timestamp(d.getTime()); - iPara.setP_Date(ts); - - if (pPara.isRange()) - { - if (displayType == DisplayType.DateTime) - d = m_cs.dateTimeFormat.parse(valueString2); - else - { - if (valueString2 == null || valueString2.length() == 0) - d = new java.util.Date(); - else - d = m_cs.dateFormat.parse(valueString2); + if (value.toString().length() > 0) { + if (displayType == DisplayType.DateTime) { + try { + d = m_cs.dateTimeFormatJDBC.parse(value.toString()); + } catch (ParseException e) { + d = m_cs.dateTimeFormat.parse(value.toString()); + } + } else if (displayType == DisplayType.Time) { + try { + d = m_cs.timeFormatJDBC.parse(value.toString()); + } catch (ParseException e) { + d = m_cs.timeFormat.parse(value.toString()); + } + } else { + try { + d = m_cs.dateFormatJDBC.parse(value.toString()); + } catch (ParseException e) { + d = m_cs.dateFormat.parse(value.toString()); + } + } + + Timestamp ts = new Timestamp(d.getTime()); + iPara.setP_Date(ts); + if (log.isLoggable(Level.FINE)) log.fine("fillParameter - " + key + + " = " + valueString + " (=" + ts + "=)"); + } + + if (pPara.isRange()) + { + if (valueString2 != null && valueString2.length() > 0) { + if (displayType == DisplayType.DateTime) + d = m_cs.dateTimeFormat.parse(valueString2.toString()); + else if (displayType == DisplayType.Time) + d = m_cs.timeFormat.parse(valueString2.toString()); + else + d = m_cs.dateFormat.parse(valueString2.toString()); + + Timestamp ts = new Timestamp(d.getTime()); + iPara.setP_Date_To(ts); + if (log.isLoggable(Level.FINE)) log.fine("fillParameterTo - " + key + + " = " + valueString + " (=" + ts + "=)"); } - - ts = new Timestamp(d.getTime()); - iPara.setP_Date_To(ts ); } - - if (log.isLoggable(Level.FINE)) log.fine("fillParameter - " + key - + " = " + valueString + " (=" + ts + "=)"); } else if (DisplayType.YesNo == pPara.getAD_Reference_ID()) {