diff --git a/migration/i5.1/oracle/201703051030_IDEMPIERE-3648.sql b/migration/i5.1/oracle/201703051030_IDEMPIERE-3648.sql new file mode 100644 index 0000000000..c8807dcef2 --- /dev/null +++ b/migration/i5.1/oracle/201703051030_IDEMPIERE-3648.sql @@ -0,0 +1,10 @@ +SET SQLBLANKLINES ON +SET DEFINE OFF + +-- IDEMPIERE-3648 Bank statement : Error on BeginningBalance when creating a bank statement with empty BankAccount field +-- Mar 5, 2018 10:21:44 AM CET +UPDATE AD_Column SET DefaultValue='@SQL=SELECT COALESCE(MIN(CurrentBalance),0) FROM C_BankAccount WHERE C_BankAccount_ID=@C_BankAccount_ID:0@',Updated=TO_DATE('2018-03-05 10:21:44','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=0 WHERE AD_Column_ID=4919 +; + +SELECT register_migration_script('201703051030_IDEMPIERE-3648.sql') FROM dual +; \ No newline at end of file diff --git a/migration/i5.1/oracle/201803011003_IDEMPIERE-1800.sql b/migration/i5.1/oracle/201803011003_IDEMPIERE-1800.sql new file mode 100644 index 0000000000..8bf10a7066 --- /dev/null +++ b/migration/i5.1/oracle/201803011003_IDEMPIERE-1800.sql @@ -0,0 +1,11 @@ +SET SQLBLANKLINES ON +SET DEFINE OFF + +-- Mar 1, 2018 10:02:34 AM CET +-- IDEMPIERE-1298 2Pack: Support copying of data from one client to another +UPDATE AD_Val_Rule SET Code='AD_User.AD_Client_ID=@#AD_Client_ID@ AND AD_User.IsLocked=''Y''',Updated=TO_DATE('2018-03-01 10:02:34','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Val_Rule_ID=200067 +; + +SELECT register_migration_script('201803011003_IDEMPIERE-1800.sql') FROM dual +; + diff --git a/migration/i5.1/postgresql/201703051030_IDEMPIERE-3648.sql b/migration/i5.1/postgresql/201703051030_IDEMPIERE-3648.sql new file mode 100644 index 0000000000..83cc81f0f5 --- /dev/null +++ b/migration/i5.1/postgresql/201703051030_IDEMPIERE-3648.sql @@ -0,0 +1,7 @@ +-- IDEMPIERE-3648 Bank statement : Error on BeginningBalance when creating a bank statement with empty BankAccount field +-- Mar 5, 2018 10:21:44 AM CET +UPDATE AD_Column SET DefaultValue='@SQL=SELECT COALESCE(MIN(CurrentBalance),0) FROM C_BankAccount WHERE C_BankAccount_ID=@C_BankAccount_ID:0@',Updated=TO_TIMESTAMP('2018-03-05 10:21:44','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=0 WHERE AD_Column_ID=4919 +; + +SELECT register_migration_script('201703051030_IDEMPIERE-3648.sql') FROM dual +; \ No newline at end of file diff --git a/migration/i5.1/postgresql/201803011003_IDEMPIERE-1800.sql b/migration/i5.1/postgresql/201803011003_IDEMPIERE-1800.sql new file mode 100644 index 0000000000..8562930640 --- /dev/null +++ b/migration/i5.1/postgresql/201803011003_IDEMPIERE-1800.sql @@ -0,0 +1,8 @@ +-- Mar 1, 2018 10:02:34 AM CET +-- IDEMPIERE-1298 2Pack: Support copying of data from one client to another +UPDATE AD_Val_Rule SET Code='AD_User.AD_Client_ID=@#AD_Client_ID@ AND AD_User.IsLocked=''Y''',Updated=TO_TIMESTAMP('2018-03-01 10:02:34','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Val_Rule_ID=200067 +; + +SELECT register_migration_script('201803011003_IDEMPIERE-1800.sql') FROM dual +; + diff --git a/org.adempiere.base/src/org/adempiere/process/ResetLockedAccount.java b/org.adempiere.base/src/org/adempiere/process/ResetLockedAccount.java index 2a4f5282d2..a50fd3aa0f 100644 --- a/org.adempiere.base/src/org/adempiere/process/ResetLockedAccount.java +++ b/org.adempiere.base/src/org/adempiere/process/ResetLockedAccount.java @@ -50,7 +50,6 @@ public class ResetLockedAccount extends SvrProcess { StringBuilder sql = new StringBuilder ("UPDATE AD_User SET IsLocked = 'N', DateAccountLocked=NULL, FailedLoginCount=0, DateLastLogin=NULL, Updated=SysDate ") .append(" WHERE IsLocked='Y' AND AD_Client_ID = ? ") - .append(" AND DateAccountLocked IS NOT NULL ") .append(" AND AD_User_ID = " + user.getAD_User_ID()); int no = DB.executeUpdate(sql.toString(), new Object[] { p_AD_Client_ID }, false, get_TrxName()); if (no <= 0) @@ -65,8 +64,7 @@ public class ResetLockedAccount extends SvrProcess { int MAX_INACTIVE_PERIOD = MSysConfig.getIntValue(MSysConfig.USER_LOCKING_MAX_INACTIVE_PERIOD_DAY, 0); StringBuilder sql = new StringBuilder("UPDATE AD_User SET IsLocked = 'N', DateAccountLocked=NULL, FailedLoginCount=0, DateLastLogin=NULL, Updated=SysDate ") - .append(" WHERE IsLocked='Y' AND AD_Client_ID = ? ") - .append(" AND DateAccountLocked IS NOT NULL"); + .append(" WHERE IsLocked='Y' AND AD_Client_ID = ? "); if (DB.isPostgreSQL()) { diff --git a/org.adempiere.base/src/org/compiere/model/MLocation.java b/org.adempiere.base/src/org/compiere/model/MLocation.java index cdffcd292a..b29ad68f6f 100644 --- a/org.adempiere.base/src/org/compiere/model/MLocation.java +++ b/org.adempiere.base/src/org/compiere/model/MLocation.java @@ -646,8 +646,8 @@ public class MLocation extends X_C_Location implements Comparator if (getC_City_ID() <= 0 && getCity() != null && getCity().length() > 0) { int city_id = DB.getSQLValue( get_TrxName(), - "SELECT C_City_ID FROM C_City WHERE C_Country_ID=? AND COALESCE(C_Region_ID,0)=? AND Name=?", - new Object[] {getC_Country_ID(), getC_Region_ID(), getCity()}); + "SELECT C_City_ID FROM C_City WHERE C_Country_ID=? AND COALESCE(C_Region_ID,0)=? AND Name=? AND AD_Client_ID IN (0,?)", + new Object[] {getC_Country_ID(), getC_Region_ID(), getCity(), getAD_Client_ID()}); if (city_id > 0) setC_City_ID(city_id); } diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/ADTabpanel.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/ADTabpanel.java index 4599b7c664..0a7e1079eb 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/ADTabpanel.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/ADTabpanel.java @@ -135,7 +135,7 @@ DataStatusListener, IADTabpanel, IdSpace, IFieldEditorContainer /** * */ - private static final long serialVersionUID = -3728896318124756192L; + private static final long serialVersionUID = -1639104320722589666L; private static final String ON_SAVE_OPEN_PREFERENCE_EVENT = "onSaveOpenPreference"; @@ -1343,7 +1343,7 @@ DataStatusListener, IADTabpanel, IdSpace, IFieldEditorContainer throw new AdempiereException(Msg.getMsg(Env.getCtx(),"RecordIsNotInCurrentSearch")); } - windowPanel.onTreeNavigate(row); + windowPanel.onTreeNavigate(gridTab, row); } /** diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/AbstractADWindowContent.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/AbstractADWindowContent.java index 97eb3ba4f0..66c5887ae0 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/AbstractADWindowContent.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/AbstractADWindowContent.java @@ -868,13 +868,13 @@ public abstract class AbstractADWindowContent extends AbstractUIPart implements /** * @see ToolbarListener#onPrevious() */ - public void onTreeNavigate(final int rowIndex) + public void onTreeNavigate(final GridTab gt, final int rowIndex) { Callback callback = new Callback() { @Override public void onCallback(Boolean result) { if (result) { - adTabbox.getSelectedGridTab().navigate(rowIndex); + gt.navigate(rowIndex); //focusToActivePanel(); } } diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/ProcessParameterPanel.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/ProcessParameterPanel.java index 425ec180d6..d8b88d624a 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/ProcessParameterPanel.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/ProcessParameterPanel.java @@ -476,6 +476,9 @@ public class ProcessParameterPanel extends Panel implements { GridField mField = (GridField)m_mFields.get(j); + if (!mField.isEditablePara(true)) + continue; // Saved parameters must not change read-only parameters + // Get Values WEditor editor = (WEditor)m_wEditors.get(j); WEditor editor2 = (WEditor)m_wEditors2.get(j); @@ -489,7 +492,6 @@ public class ProcessParameterPanel extends Panel implements MPInstancePara para = params[i]; if ( mField.getColumnName().equals(para.getParameterName()) ) { - if (para.getP_Date() != null || para.getP_Date_To() != null ) { editor.setValue(para.getP_Date()); diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/dashboard/DPDocumentStatus.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/dashboard/DPDocumentStatus.java index c33840957a..f6e95c27c7 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/dashboard/DPDocumentStatus.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/dashboard/DPDocumentStatus.java @@ -30,14 +30,22 @@ package org.adempiere.webui.dashboard; import org.adempiere.webui.apps.graph.WDocumentStatusPanel; +import org.adempiere.webui.theme.ThemeManager; import org.adempiere.webui.util.ServerPushTemplate; +import org.compiere.util.Env; +import org.compiere.util.Msg; +import org.compiere.util.Util; +import org.zkoss.zk.ui.event.Event; +import org.zkoss.zk.ui.event.EventListener; +import org.zkoss.zk.ui.event.Events; +import org.zkoss.zul.Image; +import org.zkoss.zul.Toolbar; -public class DPDocumentStatus extends DashboardPanel { +public class DPDocumentStatus extends DashboardPanel implements EventListener { /** * */ - private static final long serialVersionUID = 2089844018551832142L; - + private static final long serialVersionUID = 8569879231642492255L; private WDocumentStatusPanel statusPanel; @Override @@ -54,8 +62,27 @@ public class DPDocumentStatus extends DashboardPanel { public DPDocumentStatus() { super(); - - statusPanel = WDocumentStatusPanel.get(); - if (statusPanel != null) this.appendChild(statusPanel); + + statusPanel = WDocumentStatusPanel.get(); + if (statusPanel != null) + this.appendChild(statusPanel); + + Toolbar recentItemsToolbar = new Toolbar(); + this.appendChild(recentItemsToolbar); + + Image imgr = new Image(ThemeManager.getThemeResource("images/Refresh24.png")); + recentItemsToolbar.appendChild(imgr); + imgr.setStyle("text-align: right; cursor: pointer; width:24px; height:24px;"); + imgr.setTooltiptext(Util.cleanAmp(Msg.getMsg(Env.getCtx(), "Refresh"))); + imgr.addEventListener(Events.ON_CLICK, this); + } + + public void onEvent(Event event) throws Exception { + String eventName = event.getName(); + + if (eventName.equals(Events.ON_CLICK)) { + statusPanel.refresh(); + statusPanel.updateUI(); + } } } diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/info/InfoWindow.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/info/InfoWindow.java index 1d8546f14d..7984de97fe 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/info/InfoWindow.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/info/InfoWindow.java @@ -110,7 +110,7 @@ public class InfoWindow extends InfoPanel implements ValueChangeListener, EventL /** * */ - private static final long serialVersionUID = -8676586407450465012L; + private static final long serialVersionUID = 5041961608373943362L; protected Grid parameterGrid; private Borderlayout layout; @@ -2179,4 +2179,19 @@ public class InfoWindow extends InfoPanel implements ValueChangeListener, EventL } + /** Allow to show or hide the sub panel (detail) programmatically */ + protected void setSouthVisible(boolean visible) { + Component comp = layout.getCenter(); + for (Component c : comp.getChildren()) { + if (c instanceof Borderlayout) { + for (Component c1 : c.getChildren()) { + if (c1 instanceof South) { + c1.setVisible(visible); + break; + } + } + } + } + } + }