diff --git a/db/ddlutils/oracle/views/AD_FIELD_VT.sql b/db/ddlutils/oracle/views/AD_FIELD_VT.sql index 757811fa83..1f50419a79 100644 --- a/db/ddlutils/oracle/views/AD_FIELD_VT.sql +++ b/db/ddlutils/oracle/views/AD_FIELD_VT.sql @@ -6,7 +6,7 @@ CREATE OR REPLACE VIEW ad_field_vt AS LEFT JOIN ad_fieldgroup fg ON f.ad_fieldgroup_id = fg.ad_fieldgroup_id LEFT JOIN ad_fieldgroup_trl fgt ON f.ad_fieldgroup_id = fgt.ad_fieldgroup_id AND trl.ad_language = fgt.ad_language LEFT JOIN ad_column c ON f.ad_column_id = c.ad_column_id - LEFT JOIN ad_column_trl ct ON f.ad_column_id = ct.ad_column_id + LEFT JOIN ad_column_trl ct ON f.ad_column_id = ct.ad_column_id AND trl.ad_language = ct.ad_language JOIN ad_table tbl ON c.ad_table_id = tbl.ad_table_id LEFT JOIN ad_val_rule vr ON vr.ad_val_rule_id = COALESCE(f.ad_val_rule_id, c.ad_val_rule_id) WHERE f.isactive = 'Y' AND c.isactive = 'Y' diff --git a/db/ddlutils/postgresql/views/AD_FIELD_VT.sql b/db/ddlutils/postgresql/views/AD_FIELD_VT.sql index 3e362cffff..3f8b8ec1a7 100644 --- a/db/ddlutils/postgresql/views/AD_FIELD_VT.sql +++ b/db/ddlutils/postgresql/views/AD_FIELD_VT.sql @@ -13,7 +13,7 @@ CREATE OR REPLACE VIEW ad_field_vt AS LEFT JOIN ad_fieldgroup fg ON f.ad_fieldgroup_id = fg.ad_fieldgroup_id LEFT JOIN ad_fieldgroup_trl fgt ON f.ad_fieldgroup_id = fgt.ad_fieldgroup_id AND trl.ad_language::text = fgt.ad_language::text LEFT JOIN ad_column c ON f.ad_column_id = c.ad_column_id - LEFT JOIN ad_column_trl ct ON f.ad_column_id = ct.ad_column_id + LEFT JOIN ad_column_trl ct ON f.ad_column_id = ct.ad_column_id AND trl.ad_language::text = ct.ad_language::text JOIN ad_table tbl ON c.ad_table_id = tbl.ad_table_id LEFT JOIN ad_val_rule vr ON vr.ad_val_rule_id = COALESCE(f.ad_val_rule_id, c.ad_val_rule_id) WHERE f.isactive = 'Y' AND c.isactive = 'Y' 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/migration/i5.1z/oracle/201803081558_IDEMPIERE-3639.sql b/migration/i5.1z/oracle/201803081558_IDEMPIERE-3639.sql new file mode 100644 index 0000000000..0aaff526c3 --- /dev/null +++ b/migration/i5.1z/oracle/201803081558_IDEMPIERE-3639.sql @@ -0,0 +1,17 @@ +CREATE OR REPLACE VIEW ad_field_vt AS + SELECT trl.ad_language, t.ad_window_id, f.ad_tab_id, f.ad_field_id, tbl.ad_table_id, f.ad_column_id, trl.name, trl.description, trl.help, f.isdisplayed, f.displaylogic, f.displaylength, f.seqno, f.sortno, f.issameline, f.isheading, f.isfieldonly, f.isreadonly, f.isencrypted AS isencryptedfield, f.obscuretype, c.columnname, c.columnsql, c.fieldlength, COALESCE(f.VFormat, c.VFormat) AS VFormat, COALESCE(f.defaultvalue, c.defaultvalue) AS defaultvalue, c.iskey, c.isparent, COALESCE(f.ismandatory, c.ismandatory) AS ismandatory, c.isidentifier, c.istranslated, COALESCE(f.ad_reference_value_id, c.ad_reference_value_id) AS ad_reference_value_id, c.callout, COALESCE(f.ad_reference_id, c.ad_reference_id) AS ad_reference_id, COALESCE(f.ad_val_rule_id, c.ad_val_rule_id) AS ad_val_rule_id, c.ad_process_id, COALESCE(f.isalwaysupdateable, c.isalwaysupdateable) AS isalwaysupdateable, COALESCE(f.readonlylogic, c.readonlylogic) AS readonlylogic, COALESCE(f.mandatorylogic, c.mandatorylogic) AS mandatorylogic, COALESCE(f.isupdateable, c.isupdateable) AS isupdateable, c.isencrypted AS isencryptedcolumn, c.isselectioncolumn, tbl.tablename, c.valuemin, c.valuemax, fgt.name AS fieldgroup, vr.code AS validationcode, f.included_tab_id, fg.fieldgrouptype, fg.iscollapsedbydefault, COALESCE(f.infofactoryclass, c.infofactoryclass) AS infofactoryclass, c.isautocomplete, COALESCE(f.isallowcopy, c.isallowcopy) AS isallowcopy, f.isdisplayedgrid, f.seqnogrid, c.seqnoselection, f.xposition, f.columnspan, f.numlines, COALESCE(f.istoolbarbutton, c.istoolbarbutton) AS istoolbarbutton, c.formatpattern, f.isadvancedfield, f.isdefaultfocus, c.ad_chart_id, f.ad_labelstyle_id, f.ad_fieldstyle_id, c.pa_dashboardcontent_id, COALESCE(trl.placeholder, ct.placeholder) AS placeholder + FROM ad_field f + JOIN ad_field_trl trl ON f.ad_field_id = trl.ad_field_id + JOIN ad_tab t ON f.ad_tab_id = t.ad_tab_id + LEFT JOIN ad_fieldgroup fg ON f.ad_fieldgroup_id = fg.ad_fieldgroup_id + LEFT JOIN ad_fieldgroup_trl fgt ON f.ad_fieldgroup_id = fgt.ad_fieldgroup_id AND trl.ad_language = fgt.ad_language + LEFT JOIN ad_column c ON f.ad_column_id = c.ad_column_id + LEFT JOIN ad_column_trl ct ON f.ad_column_id = ct.ad_column_id AND trl.ad_language = ct.ad_language + JOIN ad_table tbl ON c.ad_table_id = tbl.ad_table_id + LEFT JOIN ad_val_rule vr ON vr.ad_val_rule_id = COALESCE(f.ad_val_rule_id, c.ad_val_rule_id) + WHERE f.isactive = 'Y' AND c.isactive = 'Y' +; + +SELECT register_migration_script('201803081558_IDEMPIERE-3639.sql') FROM dual +; + diff --git a/migration/i5.1z/postgresql/201803081558_IDEMPIERE-3639.sql b/migration/i5.1z/postgresql/201803081558_IDEMPIERE-3639.sql new file mode 100644 index 0000000000..93fac122a0 --- /dev/null +++ b/migration/i5.1z/postgresql/201803081558_IDEMPIERE-3639.sql @@ -0,0 +1,24 @@ +CREATE OR REPLACE VIEW ad_field_vt AS + SELECT trl.ad_language, t.ad_window_id, f.ad_tab_id, f.ad_field_id, tbl.ad_table_id, f.ad_column_id, trl.name, trl.description, trl.help, f.isdisplayed, f.displaylogic, f.displaylength, f.seqno, + f.sortno, f.issameline, f.isheading, f.isfieldonly, f.isreadonly, f.isencrypted AS isencryptedfield, f.obscuretype, c.columnname, c.columnsql, c.fieldlength, COALESCE(f.VFormat, c.VFormat) AS VFormat, COALESCE(f.defaultvalue, c.defaultvalue) AS defaultvalue, + c.iskey, c.isparent, COALESCE(f.ismandatory, c.ismandatory) AS ismandatory, c.isidentifier, c.istranslated, COALESCE(f.ad_reference_value_id, c.ad_reference_value_id) AS ad_reference_value_id, + c.callout, COALESCE(f.ad_reference_id, c.ad_reference_id) AS ad_reference_id, COALESCE(f.ad_val_rule_id, c.ad_val_rule_id) AS ad_val_rule_id, c.ad_process_id, COALESCE(f.isalwaysupdateable, + c.isalwaysupdateable) AS isalwaysupdateable, COALESCE(f.readonlylogic, c.readonlylogic) AS readonlylogic, COALESCE(f.mandatorylogic, c.mandatorylogic) AS mandatorylogic, COALESCE(f.isupdateable, c.isupdateable) AS isupdateable, + c.isencrypted AS isencryptedcolumn, c.isselectioncolumn, tbl.tablename, c.valuemin, c.valuemax, fgt.name AS fieldgroup, vr.code AS validationcode, f.included_tab_id, fg.fieldgrouptype, + fg.iscollapsedbydefault, COALESCE(f.infofactoryclass, c.infofactoryclass) AS infofactoryclass, c.isautocomplete, COALESCE(f.isallowcopy, c.isallowcopy) AS isallowcopy, f.isdisplayedgrid, + f.seqnogrid, c.seqnoselection, f.xposition, f.columnspan, f.numlines, COALESCE(f.istoolbarbutton, c.istoolbarbutton) AS istoolbarbutton, c.formatpattern, f.isadvancedfield, f.isdefaultfocus, c.ad_chart_id, f.ad_labelstyle_id, f.ad_fieldstyle_id, c.pa_dashboardcontent_id, COALESCE(trl.placeholder, ct.placeholder) AS placeholder + FROM ad_field f + JOIN ad_field_trl trl ON f.ad_field_id = trl.ad_field_id + JOIN ad_tab t ON f.ad_tab_id = t.ad_tab_id + LEFT JOIN ad_fieldgroup fg ON f.ad_fieldgroup_id = fg.ad_fieldgroup_id + LEFT JOIN ad_fieldgroup_trl fgt ON f.ad_fieldgroup_id = fgt.ad_fieldgroup_id AND trl.ad_language::text = fgt.ad_language::text + LEFT JOIN ad_column c ON f.ad_column_id = c.ad_column_id + LEFT JOIN ad_column_trl ct ON f.ad_column_id = ct.ad_column_id AND trl.ad_language::text = ct.ad_language::text + JOIN ad_table tbl ON c.ad_table_id = tbl.ad_table_id + LEFT JOIN ad_val_rule vr ON vr.ad_val_rule_id = COALESCE(f.ad_val_rule_id, c.ad_val_rule_id) + WHERE f.isactive = 'Y' AND c.isactive = 'Y' +; + +SELECT register_migration_script('201803081558_IDEMPIERE-3639.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.swing-feature/swingclient.product.launch b/org.adempiere.ui.swing-feature/swingclient.product.launch index d240a37e92..cbe72f64bc 100644 --- a/org.adempiere.ui.swing-feature/swingclient.product.launch +++ b/org.adempiere.ui.swing-feature/swingclient.product.launch @@ -22,8 +22,8 @@ - - + + diff --git a/org.adempiere.ui.swing/src/org/compiere/apps/ProcessParameterPanel.java b/org.adempiere.ui.swing/src/org/compiere/apps/ProcessParameterPanel.java index 19b440fe3b..f23308b744 100644 --- a/org.adempiere.ui.swing/src/org/compiere/apps/ProcessParameterPanel.java +++ b/org.adempiere.ui.swing/src/org/compiere/apps/ProcessParameterPanel.java @@ -207,7 +207,7 @@ public class ProcessParameterPanel extends CPanel implements VetoableChangeListe + "p.AD_Reference_ID, p.AD_Process_Para_ID, " + "p.FieldLength, p.IsMandatory, p.IsRange, p.ColumnName, " + "p.DefaultValue, p.DefaultValue2, p.VFormat, p.ValueMin, p.ValueMax, " - + "p.SeqNo, p.AD_Reference_Value_ID, vr.Code AS ValidationCode, p.ReadOnlyLogic, p.DisplayLogic, p.IsEncrypted, NULL AS FormatPattern, p.MandatoryLogic " + + "p.SeqNo, p.AD_Reference_Value_ID, vr.Code AS ValidationCode, p.ReadOnlyLogic, p.DisplayLogic, p.IsEncrypted, NULL AS FormatPattern, p.MandatoryLogic, p.Placeholder, p.Placeholder2 " + "FROM AD_Process_Para p" + " LEFT OUTER JOIN AD_Val_Rule vr ON (p.AD_Val_Rule_ID=vr.AD_Val_Rule_ID) " + "WHERE p.AD_Process_ID=?" // 1 @@ -218,7 +218,7 @@ public class ProcessParameterPanel extends CPanel implements VetoableChangeListe + "p.AD_Reference_ID, p.AD_Process_Para_ID, " + "p.FieldLength, p.IsMandatory, p.IsRange, p.ColumnName, " + "p.DefaultValue, p.DefaultValue2, p.VFormat, p.ValueMin, p.ValueMax, " - + "p.SeqNo, p.AD_Reference_Value_ID, vr.Code AS ValidationCode, p.ReadOnlyLogic, p.DisplayLogic, p.IsEncrypted, NULL AS FormatPattern, p.MandatoryLogic " + + "p.SeqNo, p.AD_Reference_Value_ID, vr.Code AS ValidationCode, p.ReadOnlyLogic, p.DisplayLogic, p.IsEncrypted, NULL AS FormatPattern, p.MandatoryLogic, t.Placeholder, p.Placeholder2 " + "FROM AD_Process_Para p" + " INNER JOIN AD_Process_Para_Trl t ON (p.AD_Process_Para_ID=t.AD_Process_Para_ID)" + " LEFT OUTER JOIN AD_Val_Rule vr ON (p.AD_Val_Rule_ID=vr.AD_Val_Rule_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/editor/WAccountEditor.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/editor/WAccountEditor.java index 02c832e111..561581364d 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/editor/WAccountEditor.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/editor/WAccountEditor.java @@ -65,6 +65,8 @@ public class WAccountEditor extends WEditor implements ContextMenuListener popupMenu = new WEditorPopupMenu(false, false, true); popupMenu.addMenuListener(this); addChangeLogMenu(popupMenu); + if (gridField != null) + getComponent().getTextbox().setPlaceholder(gridField.getPlaceholder()); } @Override diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/editor/WAssignmentEditor.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/editor/WAssignmentEditor.java index 6aa65ab5b2..05d1485a7d 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/editor/WAssignmentEditor.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/editor/WAssignmentEditor.java @@ -64,6 +64,8 @@ public class WAssignmentEditor extends WEditor implements ContextMenuListener { popupMenu = new WEditorPopupMenu(true, false, false); popupMenu.addMenuListener(this); addChangeLogMenu(popupMenu); + if (gridField != null) + getComponent().getTextbox().setPlaceholder(gridField.getPlaceholder()); } diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/editor/WDatetimeEditor.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/editor/WDatetimeEditor.java index a1ee54eb56..7876aeba27 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/editor/WDatetimeEditor.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/editor/WDatetimeEditor.java @@ -102,6 +102,8 @@ public class WDatetimeEditor extends WEditor implements ContextMenuListener popupMenu = new WEditorPopupMenu(false, false, isShowPreference()); popupMenu.addMenuListener(this); addChangeLogMenu(popupMenu); + if (gridField != null) + getComponent().getDatebox().setPlaceholder(gridField.getPlaceholder()); } public void onEvent(Event event) diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/editor/WFileDirectoryEditor.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/editor/WFileDirectoryEditor.java index d602244011..7184b3b355 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/editor/WFileDirectoryEditor.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/editor/WFileDirectoryEditor.java @@ -47,6 +47,8 @@ public class WFileDirectoryEditor extends WEditor else getComponent().setButtonImage(ThemeManager.getThemeResource("images/Open16.png")); getComponent().getButton().setUpload("false"); + if (gridField != null) + getComponent().getTextbox().setPlaceholder(gridField.getPlaceholder()); } @Override diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/editor/WFilenameEditor.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/editor/WFilenameEditor.java index 187fe11da7..bf3325964b 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/editor/WFilenameEditor.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/editor/WFilenameEditor.java @@ -55,6 +55,8 @@ public class WFilenameEditor extends WEditor getComponent().addEventListener(Events.ON_UPLOAD, this); getComponent().getButton().setUpload(AdempiereWebUI.getUploadSetting()); getComponent().getButton().setAttribute("org.zkoss.zul.image.preload", Boolean.TRUE); + if (gridField != null) + getComponent().getTextbox().setPlaceholder(gridField.getPlaceholder()); } @Override diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/editor/WLocatorEditor.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/editor/WLocatorEditor.java index 82e633b3fd..35f4531da9 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/editor/WLocatorEditor.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/editor/WLocatorEditor.java @@ -127,6 +127,7 @@ public class WLocatorEditor extends WEditor implements EventListener, Pro { popupMenu = new WEditorPopupMenu(true, true, isShowPreference()); addChangeLogMenu(popupMenu); + getComponent().getTextbox().setPlaceholder(gridField.getPlaceholder()); } } diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/editor/WPAttributeEditor.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/editor/WPAttributeEditor.java index 90c30831d6..0ae327287e 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/editor/WPAttributeEditor.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/editor/WPAttributeEditor.java @@ -84,6 +84,9 @@ public class WPAttributeEditor extends WEditor implements ContextMenuListener addChangeLogMenu(popupMenu); getComponent().getTextbox().setReadonly(true); + + if (gridField != null) + getComponent().getTextbox().setPlaceholder(gridField.getPlaceholder()); } @Override diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/editor/WPaymentEditor.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/editor/WPaymentEditor.java index b7d30d9fc0..46eea1504e 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/editor/WPaymentEditor.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/editor/WPaymentEditor.java @@ -88,6 +88,8 @@ public class WPaymentEditor extends WEditor implements ListDataListener, Context } popupMenu = new WEditorPopupMenu(false, true, isShowPreference()); addChangeLogMenu(popupMenu); + if (gridField != null) + getComponent().getCombobox().setPlaceholder(gridField.getPlaceholder()); } @Override diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/editor/WTimeEditor.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/editor/WTimeEditor.java index 245c8815da..6f7780e760 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/editor/WTimeEditor.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/editor/WTimeEditor.java @@ -102,6 +102,8 @@ public class WTimeEditor extends WEditor implements ContextMenuListener popupMenu = new WEditorPopupMenu(false, false, isShowPreference()); popupMenu.addMenuListener(this); addChangeLogMenu(popupMenu); + if (gridField != null) + getComponent().setPlaceholder(gridField.getPlaceholder()); } public void onEvent(Event event) diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/editor/WUrlEditor.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/editor/WUrlEditor.java index 90f48a07e8..1079bf99e1 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/editor/WUrlEditor.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/editor/WUrlEditor.java @@ -46,6 +46,8 @@ public class WUrlEditor extends WEditor implements ContextMenuListener addChangeLogMenu(popupMenu); getComponent().getTextbox().setClientAttribute("type", "url"); + if (gridField != null) + getComponent().getTextbox().setPlaceholder(gridField.getPlaceholder()); } 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; + } + } + } + } + } + }