/****************************************************************************** * Product: Posterita Ajax UI * * Copyright (C) 2007 Posterita Ltd. All Rights Reserved. * * This program is free software; you can redistribute it and/or modify it * * under the terms version 2 of the GNU General Public License as published * * by the Free Software Foundation. This program is distributed in the hope * * that it will be useful, but WITHOUT ANY WARRANTY; without even the implied * * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * * with this program; if not, write to the Free Software Foundation, Inc., * * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * * For the text or an alternative of this public license, you may reach us * * Posterita Ltd., 3, Draper Avenue, Quatre Bornes, Mauritius * * or via info@posterita.org or http://www.posterita.org/ * *****************************************************************************/ package org.adempiere.webui.panel; import java.sql.PreparedStatement; import java.sql.SQLException; import java.sql.Timestamp; import org.adempiere.webui.apps.AEnv; import org.adempiere.webui.component.Grid; import org.adempiere.webui.component.GridFactory; import org.adempiere.webui.component.Label; import org.adempiere.webui.component.Row; import org.adempiere.webui.component.Rows; import org.adempiere.webui.component.Textbox; import org.adempiere.webui.editor.WEditor; import org.adempiere.webui.editor.WSearchEditor; import org.adempiere.webui.event.ValueChangeEvent; import org.adempiere.webui.event.ValueChangeListener; import org.adempiere.webui.event.WTableModelEvent; import org.compiere.minigrid.ColumnInfo; import org.compiere.minigrid.IDColumn; import org.compiere.model.MLookupFactory; import org.compiere.model.MQuery; import org.compiere.util.DisplayType; import org.compiere.util.Env; import org.compiere.util.Msg; import org.zkoss.zk.ui.event.EventListener; import org.zkoss.zk.ui.event.Events; import org.zkoss.zkex.zul.Borderlayout; import org.zkoss.zkex.zul.Center; import org.zkoss.zkex.zul.North; import org.zkoss.zkex.zul.South; import org.zkoss.zul.Div; import org.zkoss.zul.Separator; import org.zkoss.zul.Vbox; /** * Based on InfoPayment written by Jorg Janke * * @author Niraj Sohun * Aug, 02, 2007 * * Zk Port * @author Elaine * @version InfoAsset.java Adempiere Swing UI 3.4.1 */ public class InfoAssetPanel extends InfoPanel implements ValueChangeListener, EventListener { /** * */ private static final long serialVersionUID = -3324796198694097770L; /** From Clause */ private static String s_assetFROM = "A_ASSET a" + " LEFT OUTER JOIN M_Product p ON (a.M_Product_ID=p.M_Product_ID)" + " LEFT OUTER JOIN C_BPartner bp ON (a.C_BPartner_ID=bp.C_BPartner_ID)" + " LEFT OUTER JOIN AD_User u ON (a.AD_User_ID=u.AD_User_ID)"; /** Array of Column Info */ private static final ColumnInfo[] s_assetLayout = { new ColumnInfo(" ", "a.A_Asset_ID", IDColumn.class), new ColumnInfo(Msg.translate(Env.getCtx(), "Value"), "a.Value", String.class), new ColumnInfo(Msg.translate(Env.getCtx(), "Name"), "a.Name", String.class), new ColumnInfo(Msg.translate(Env.getCtx(), "M_Product_ID"), "p.Name", String.class), new ColumnInfo(Msg.translate(Env.getCtx(), "C_BPartner_ID"), "bp.Name", String.class), new ColumnInfo(Msg.translate(Env.getCtx(), "AD_User_ID"), "u.Name", String.class), new ColumnInfo(Msg.translate(Env.getCtx(), "AssetServiceDate"), "a.AssetServiceDate", Timestamp.class), new ColumnInfo(Msg.translate(Env.getCtx(), "GuaranteeDate"), "a.GuaranteeDate", Timestamp.class), new ColumnInfo(Msg.translate(Env.getCtx(), "VersionNo"), "a.VersionNo", String.class) }; private Textbox fieldValue = new Textbox(); private Textbox fieldName = new Textbox(); private WEditor fBPartner_ID; private WEditor fProduct_ID; private Label labelValue = new Label(); private Label labelName = new Label(); private Borderlayout layout; private Vbox southBody; /** * Standard Constructor * @param WindowNo window no * @param A_Asset_ID asset * @param value Query Value or Name if enclosed in @ * @param multiSelection multiple selections * @param whereClause where clause */ public InfoAssetPanel( int WindowNo, int A_Asset_ID, String value, boolean multiSelection, String whereClause) { this(WindowNo, A_Asset_ID, value, multiSelection, whereClause, true); } /** * Standard Constructor * @param WindowNo window no * @param A_Asset_ID asset * @param value Query Value or Name if enclosed in @ * @param multiSelection multiple selections * @param whereClause where clause */ public InfoAssetPanel( int WindowNo, int A_Asset_ID, String value, boolean multiSelection, String whereClause, boolean lookup) { super (WindowNo, "a", "A_Asset_ID", multiSelection, whereClause, lookup); log.info(value + ", ID=" + A_Asset_ID + ", WHERE=" + whereClause); setTitle(Msg.getMsg(Env.getCtx(), "InfoAsset")); statInit(); initInfo(value, A_Asset_ID, whereClause); int no = contentPanel.getRowCount(); setStatusLine(Integer.toString(no) + " " + Msg.getMsg(Env.getCtx(), "SearchRows_EnterQuery"), false); setStatusDB(Integer.toString(no)); // AutoQuery if (value != null && value.length() > 0) executeQuery(); p_loadedOK = true; } // InfoProduct /** * Static Setup - add fields to parameterPanel */ private void statInit() { fieldValue.setWidth("100%"); fieldName.setWidth("100%"); labelValue.setValue(Msg.getMsg(Env.getCtx(), "Value")); fieldValue.addEventListener(Events.ON_CHANGE, this); labelName.setValue(Msg.getMsg(Env.getCtx(), "Name")); fieldName.addEventListener(Events.ON_CANCEL, this); // From A_Asset. fBPartner_ID = new WSearchEditor( MLookupFactory.get (Env.getCtx(), p_WindowNo, 0, 8065, DisplayType.Search), Msg.translate(Env.getCtx(), "C_BPartner_ID"), "", false, false, true); fBPartner_ID.addValueChangeListener(this); fProduct_ID = new WSearchEditor( MLookupFactory.get (Env.getCtx(), p_WindowNo, 0, 8047, DisplayType.Search), Msg.translate(Env.getCtx(), "M_Product_ID"), "", false, false, true); fProduct_ID.addValueChangeListener(this); Grid grid = GridFactory.newGridLayout(); Rows rows = new Rows(); grid.appendChild(rows); Row row = new Row(); rows.appendChild(row); row.appendChild(labelValue.rightAlign()); row.appendChild(fieldValue); row.appendChild(fBPartner_ID.getLabel().rightAlign()); row.appendChild(fBPartner_ID.getComponent()); row = new Row(); rows.appendChild(row); row.appendChild(labelName.rightAlign()); row.appendChild(fieldName); row.appendChild(fProduct_ID.getLabel().rightAlign()); row.appendChild(fProduct_ID.getComponent()); layout = new Borderlayout(); layout.setWidth("100%"); layout.setHeight("100%"); if (!isLookup()) { layout.setStyle("position: absolute"); } this.appendChild(layout); North north = new North(); layout.appendChild(north); north.appendChild(grid); Center center = new Center(); layout.appendChild(center); center.setFlex(true); Div div = new Div(); div.appendChild(contentPanel); if (isLookup()) contentPanel.setWidth("99%"); else contentPanel.setStyle("width: 99%; margin: 0px auto;"); contentPanel.setVflex(true); div.setStyle("width :100%; height: 100%"); center.appendChild(div); South south = new South(); layout.appendChild(south); southBody = new Vbox(); southBody.setWidth("100%"); south.appendChild(southBody); southBody.appendChild(confirmPanel); southBody.appendChild(new Separator()); southBody.appendChild(statusBar); } /** * Dynamic Init * @param value value * @param whereClause where clause */ private void initInfo (String value, int A_Asset_ID, String whereClause) { // Create Grid StringBuffer where = new StringBuffer(); where.append("a.IsActive='Y'"); if (whereClause != null && whereClause.length() > 0) where.append(" AND ").append(whereClause); prepareTable(s_assetLayout, s_assetFROM, where.toString(), "a.Value"); // Set Value if (value == null) value = "%"; if (!value.endsWith("%")) value += "%"; } // initInfo /*************************************************************************/ /** * Construct SQL Where Clause and define parameters. * (setParameters needs to set parameters) * Includes first AND * @return WHERE clause */ protected String getSQLWhere() { StringBuffer sql = new StringBuffer(); // => Value String value = fieldValue.getText().toUpperCase(); if (!(value.equals("") || value.equals("%"))) sql.append(" AND UPPER(a.Value) LIKE ?"); // => Name String name = fieldName.getText().toUpperCase(); if (!(name.equals("") || name.equals("%"))) sql.append (" AND UPPER(a.Name) LIKE ?"); // C_BPartner_ID Integer C_BPartner_ID = null; if (fBPartner_ID.getDisplay() != "") C_BPartner_ID = (Integer)fBPartner_ID.getValue(); if (C_BPartner_ID != null) sql.append (" AND a.C_BPartner_ID=").append(C_BPartner_ID); // M_Product_ID Integer M_Product_ID = null; if (fProduct_ID.getDisplay() != "") M_Product_ID = (Integer)fProduct_ID.getValue(); if (M_Product_ID != null) sql.append (" AND a.M_Product_ID=").append(M_Product_ID); return sql.toString(); } // getSQLWhere /** * Set Parameters for Query * (as defined in getSQLWhere) * * @param pstmt pstmt * @param forCount for counting records * @throws SQLException */ protected void setParameters(PreparedStatement pstmt, boolean forCount) throws SQLException { int index = 1; // => Value String value = fieldValue.getText().toUpperCase(); if (!(value.equals("") || value.equals("%"))) { if (!value.endsWith("%")) value += "%"; pstmt.setString(index++, value); log.fine("Value: " + value); } // => Name String name = fieldName.getText().toUpperCase(); if (!(name.equals("") || name.equals("%"))) { if (!name.endsWith("%")) name += "%"; pstmt.setString(index++, name); log.fine("Name: " + name); } } // setParameters /** * Save Selection Details * Get Location/Partner Info */ public void saveSelectionDetail() { int row = contentPanel.getSelectedRow(); if (row == -1) return; // publish for Callout to read Integer ID = getSelectedRowKey(); Env.setContext(Env.getCtx(), p_WindowNo, Env.TAB_INFO, "A_Asset_ID", ID == null ? "0" : ID.toString()); } // saveSelectionDetail /*************************************************************************/ /** * Show History */ protected void showHistory() { log.info( "InfoAsset.showHistory"); } // showHistory /** * Has History * @return true */ protected boolean hasHistory() { return false; } // hasHistory // Elaine 2008/12/16 /** * Zoom */ public void zoom() { log.info( "InfoAsset.zoom"); Integer A_Asset_ID = getSelectedRowKey(); if (A_Asset_ID == null) return; MQuery query = new MQuery("A_Asset"); query.addRestriction("A_Asset_ID", MQuery.EQUAL, A_Asset_ID); query.setRecordCount(1); int AD_WindowNo = getAD_Window_ID("A_Asset", true); AEnv.zoom(AD_WindowNo, query); } // zoom // /** * Has Zoom * @return true */ protected boolean hasZoom() { return true; } // hasZoom /** * Customize */ protected void customize() { log.info( "InfoAsset.customize"); } // customize /** * Has Customize * @return false */ protected boolean hasCustomize() { return false; // for now } // hasCustomize public void tableChanged(WTableModelEvent event) { } public void valueChange(ValueChangeEvent evt) { if (fBPartner_ID.equals(evt.getSource())) { fBPartner_ID.setValue(evt.getNewValue()); } if (fProduct_ID.equals(evt.getSource())) { fProduct_ID.setValue(evt.getNewValue()); } } @Override protected void insertPagingComponent() { southBody.insertBefore(paging, southBody.getFirstChild()); layout.invalidate(); } }