/****************************************************************************** * Product: Adempiere ERP & CRM Smart Business Solution * * Copyright (C) 1999-2006 ComPiere, Inc. 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 * * ComPiere, Inc., 2620 Augustine Dr. #245, Santa Clara, CA 95054, USA * * or via info@compiere.org or http://www.compiere.org/license.html * *****************************************************************************/ package org.adempiere.webui.window; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.logging.Level; import org.adempiere.webui.apps.AEnv; import org.adempiere.webui.component.ConfirmPanel; import org.adempiere.webui.component.Grid; import org.adempiere.webui.component.Label; import org.adempiere.webui.component.Row; import org.adempiere.webui.component.Rows; import org.adempiere.webui.component.ToolBar; import org.adempiere.webui.component.ToolBarButton; import org.adempiere.webui.component.Window; import org.adempiere.webui.editor.WEditor; import org.adempiere.webui.editor.WebEditorFactory; import org.adempiere.webui.event.ValueChangeEvent; import org.adempiere.webui.event.ValueChangeListener; import org.adempiere.webui.panel.ADTabpanel; import org.adempiere.webui.panel.StatusBarPanel; import org.adempiere.webui.session.SessionManager; import org.compiere.model.DataStatusEvent; import org.compiere.model.DataStatusListener; import org.compiere.model.GridField; import org.compiere.model.GridTab; import org.compiere.model.GridWindow; import org.compiere.model.GridWindowVO; import org.compiere.model.MAccount; import org.compiere.model.MAccountLookup; import org.compiere.model.MAcctSchema; import org.compiere.model.MAcctSchemaElement; import org.compiere.model.MQuery; import org.compiere.util.CLogger; import org.compiere.util.DB; import org.compiere.util.Env; import org.compiere.util.Msg; import org.zkoss.zk.ui.Executions; import org.zkoss.zk.ui.event.Event; 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.Caption; import org.zkoss.zul.Div; import org.zkoss.zul.Groupbox; import org.zkoss.zul.Hbox; import org.zkoss.zul.Vbox; /** * Dialog to enter Account Info * * @author Low Heng Sin */ public final class WAccountDialog extends Window implements EventListener, DataStatusListener, ValueChangeListener { private static final long serialVersionUID = 7999516267209766287L; /** * Constructor * @param title title * @param mAccount account info * @param C_AcctSchema_ID as */ public WAccountDialog (String title, MAccountLookup mAccount, int C_AcctSchema_ID) { super (); this.setTitle(title); this.setHeight("500px"); this.setWidth("700px"); log.config("C_AcctSchema_ID=" + C_AcctSchema_ID + ", C_ValidCombination_ID=" + mAccount.C_ValidCombination_ID); m_mAccount = mAccount; m_C_AcctSchema_ID = C_AcctSchema_ID; m_WindowNo = SessionManager.getAppDesktop().registerWindow(this); try { init(); } catch(Exception ex) { log.log(Level.SEVERE, ex.toString()); } if (initAccount()) AEnv.showCenterScreen(this); else dispose(); } // WAccountDialog /** Window No */ private int m_WindowNo; /** Journal Entry * private boolean m_onlyNonDocControlled = false; /** Selection changed */ protected boolean m_changed = false; /** Accounting Schema */ private static MAcctSchema s_AcctSchema = null; /** MWindow for AccountCombination */ private GridWindow m_mWindow = null; /** MTab for AccountCombination */ private GridTab m_mTab = null; /** GridController */ private ADTabpanel m_adTabPanel = null; /** Account used */ private MAccountLookup m_mAccount = null; /** Result */ private int m_C_ValidCombination_ID; /** Acct Schema */ private int m_C_AcctSchema_ID = 0; /** Client */ private int m_AD_Client_ID; /** Where clause for combination search */ private MQuery m_query; /** Logger */ private static CLogger log = CLogger.getCLogger(WAccountDialog.class); // Editors for Query private WEditor f_Alias, f_Combination, f_AD_Org_ID, f_Account_ID, f_SubAcct_ID, f_M_Product_ID, f_C_BPartner_ID, f_C_Campaign_ID, f_C_LocFrom_ID, f_C_LocTo_ID, f_C_Project_ID, f_C_SalesRegion_ID, f_AD_OrgTrx_ID, f_C_Activity_ID, f_User1_ID, f_User2_ID; // private Label f_Description = new Label (""); private int m_line = 0; private boolean m_newRow = true; // private Vbox panel = new Vbox(); private ConfirmPanel confirmPanel = new ConfirmPanel(true); private StatusBarPanel statusBar = new StatusBarPanel(); private Hbox northPanel = new Hbox(); private Groupbox parameterPanel = new Groupbox(); private Grid parameterLayout = new Grid(); private ToolBar toolBar = new ToolBar(); private ToolBarButton bRefresh = new ToolBarButton(); private ToolBarButton bSave = new ToolBarButton(); private ToolBarButton bIgnore = new ToolBarButton(); private Row m_row; private Rows m_rows; /** * Static component init. * <pre> * - north * - parameterPanel * - toolBar * - center * - adtabpanel * - south * - confirmPanel * - statusBar * </pre> * @throws Exception */ void init() throws Exception { // Caption caption = new Caption(Msg.getMsg(Env.getCtx(),"Parameter")); parameterPanel.appendChild(caption); parameterPanel.setStyle("background-color: transparent;"); toolBar.setOrient("vertical"); toolBar.setStyle("border: none; margin: 5px"); bSave.setImage("images/Save24.png"); bSave.setTooltiptext(Msg.getMsg(Env.getCtx(),"AccountNewUpdate")); bSave.addEventListener(Events.ON_CLICK, this); bRefresh.setImage("images/Refresh24.png"); bRefresh.setTooltiptext(Msg.getMsg(Env.getCtx(),"Refresh")); bRefresh.addEventListener(Events.ON_CLICK, this); bIgnore.setImage("images/Ignore24.png"); bIgnore.setTooltiptext(Msg.getMsg(Env.getCtx(),"Ignore")); bIgnore.addEventListener(Events.ON_CLICK, this); // toolBar.appendChild(bRefresh); toolBar.appendChild(bIgnore); toolBar.appendChild(bSave); // northPanel.appendChild(parameterPanel); parameterPanel.setWidth("95%"); northPanel.appendChild(toolBar); northPanel.setWidth("100%"); m_adTabPanel = new ADTabpanel(); Borderlayout layout = new Borderlayout(); layout.setParent(this); if (AEnv.isFirefox2()) { layout.setHeight("93%"); layout.setWidth("98%"); layout.setStyle("background-color: transparent; position: absolute;"); this.setStyle("position: relative;"); } else { layout.setHeight("100%"); layout.setWidth("100%"); layout.setStyle("background-color: transparent;"); } North nRegion = new North(); nRegion.setParent(layout); nRegion.setFlex(false); nRegion.appendChild(northPanel); nRegion.setStyle("background-color: transparent; border: none"); northPanel.setStyle("background-color: transparent;"); Center cRegion = new Center(); cRegion.setParent(layout); cRegion.appendChild(m_adTabPanel); cRegion.setFlex(true); South sRegion = new South(); sRegion.setParent(layout); Div div = new Div(); div.appendChild(confirmPanel); confirmPanel.setStyle("margin-top: 5px; margin-bottom: 5px"); div.appendChild(statusBar); sRegion.appendChild(div); sRegion.setStyle("background-color: transparent; border: none"); confirmPanel.addActionListener(Events.ON_CLICK, this); this.setBorder("normal"); this.setClosable(false); this.setAttribute("modal", Boolean.TRUE); this.setSizable(true); } // jbInit /** * Dyanmic Init. * When a row is selected, the editor values are set * (editors do not change grid) * @return true if initialized */ private boolean initAccount() { m_AD_Client_ID = Env.getContextAsInt(Env.getCtx(), m_WindowNo, "AD_Client_ID"); // Get AcctSchema Info if (s_AcctSchema == null || s_AcctSchema.getC_AcctSchema_ID() != m_C_AcctSchema_ID) s_AcctSchema = new MAcctSchema (Env.getCtx(), m_C_AcctSchema_ID, null); log.config(s_AcctSchema.toString() + ", #" + s_AcctSchema.getAcctSchemaElements().length); Env.setContext(Env.getCtx(), m_WindowNo, "C_AcctSchema_ID", m_C_AcctSchema_ID); // Model int AD_Window_ID = 153; // Maintain Account Combinations GridWindowVO wVO = AEnv.getMWindowVO (m_WindowNo, AD_Window_ID, 0); if (wVO == null) return false; m_mWindow = new GridWindow (wVO); m_mTab = m_mWindow.getTab(0); // Make sure is the tab is loaded - teo_sarca [ 1659124 ] if (!m_mTab.isLoadComplete()) m_mWindow.initTab(0); // ParameterPanel restrictions m_mTab.getField("Alias").setDisplayLength(15); m_mTab.getField("Combination").setDisplayLength(15); // Grid restrictions m_mTab.getField("AD_Client_ID").setDisplayed(false); m_mTab.getField("C_AcctSchema_ID").setDisplayed(false); m_mTab.getField("IsActive").setDisplayed(false); m_mTab.getField("IsFullyQualified").setDisplayed(false); // don't show fields not being displayed in this environment for (int i = 0; i < m_mTab.getFieldCount(); i++) { GridField field = m_mTab.getField(i); if (!field.isDisplayed (true)) // check context field.setDisplayed (false); } // GridController m_adTabPanel.init(null, m_WindowNo, m_mTab, null); // Prepare Parameter parameterLayout.makeNoStrip(); parameterLayout.setOddRowSclass("even"); parameterLayout.setParent(parameterPanel); parameterLayout.setStyle("background-color: transparent;"); m_rows = new Rows(); m_rows.setParent(parameterLayout); int TabNo = 0; // Alias if (s_AcctSchema.isHasAlias()) { GridField alias = m_mTab.getField("Alias"); f_Alias = WebEditorFactory.getEditor(alias, false); addLine(alias, f_Alias, false); } // Alias // Combination GridField combination = m_mTab.getField("Combination"); f_Combination = WebEditorFactory.getEditor(combination, false); addLine(combination, f_Combination, false); m_newRow = true; /** * Create Fields in Element Order */ MAcctSchemaElement[] elements = s_AcctSchema.getAcctSchemaElements(); for (int i = 0; i < elements.length; i++) { MAcctSchemaElement ase = elements[i]; String type = ase.getElementType(); boolean isMandatory = ase.isMandatory(); // if (type.equals(MAcctSchemaElement.ELEMENTTYPE_Organization)) { GridField field = m_mTab.getField("AD_Org_ID"); f_AD_Org_ID = WebEditorFactory.getEditor(field, false); addLine(field, f_AD_Org_ID, isMandatory); } else if (type.equals(MAcctSchemaElement.ELEMENTTYPE_Account)) { GridField field = m_mTab.getField("Account_ID"); f_Account_ID = WebEditorFactory.getEditor(field, false); // ((VLookup)f_Account_ID).setWidth(400); addLine(field, f_Account_ID, isMandatory); f_Account_ID.addValueChangeListener(this); } else if (type.equals(MAcctSchemaElement.ELEMENTTYPE_SubAccount)) { GridField field = m_mTab.getField("C_SubAcct_ID"); f_SubAcct_ID = WebEditorFactory.getEditor(field, false); // ((VLookup)f_SubAcct_ID).setWidth(400); addLine(field, f_SubAcct_ID, isMandatory); } else if (type.equals(MAcctSchemaElement.ELEMENTTYPE_Product)) { GridField field = m_mTab.getField("M_Product_ID"); f_M_Product_ID = WebEditorFactory.getEditor(field, false); addLine(field, f_M_Product_ID, isMandatory); } else if (type.equals(MAcctSchemaElement.ELEMENTTYPE_BPartner)) { GridField field = m_mTab.getField("C_BPartner_ID"); f_C_BPartner_ID = WebEditorFactory.getEditor(field, false); addLine(field, f_C_BPartner_ID, isMandatory); } else if (type.equals(MAcctSchemaElement.ELEMENTTYPE_Campaign)) { GridField field = m_mTab.getField("C_Campaign_ID"); f_C_Campaign_ID = WebEditorFactory.getEditor(field, false); addLine(field, f_C_Campaign_ID, isMandatory); } else if (type.equals(MAcctSchemaElement.ELEMENTTYPE_LocationFrom)) { GridField field = m_mTab.getField("C_LocFrom_ID"); f_C_LocFrom_ID = WebEditorFactory.getEditor(field, false); addLine(field, f_C_LocFrom_ID, isMandatory); } else if (type.equals(MAcctSchemaElement.ELEMENTTYPE_LocationTo)) { GridField field = m_mTab.getField("C_LocTo_ID"); f_C_LocTo_ID = WebEditorFactory.getEditor(field, false); addLine(field, f_C_LocTo_ID, isMandatory); } else if (type.equals(MAcctSchemaElement.ELEMENTTYPE_Project)) { GridField field = m_mTab.getField("C_Project_ID"); f_C_Project_ID = WebEditorFactory.getEditor(field, false); addLine(field, f_C_Project_ID, isMandatory); } else if (type.equals(MAcctSchemaElement.ELEMENTTYPE_SalesRegion)) { GridField field = m_mTab.getField("C_SalesRegion_ID"); f_C_SalesRegion_ID = WebEditorFactory.getEditor(field, false); addLine(field, f_C_SalesRegion_ID, isMandatory); } else if (type.equals(MAcctSchemaElement.ELEMENTTYPE_OrgTrx)) { GridField field = m_mTab.getField("AD_OrgTrx_ID"); f_AD_OrgTrx_ID = WebEditorFactory.getEditor(field, false); addLine(field, f_AD_OrgTrx_ID, isMandatory); } else if (type.equals(MAcctSchemaElement.ELEMENTTYPE_Activity)) { GridField field = m_mTab.getField("C_Activity_ID"); f_C_Activity_ID = WebEditorFactory.getEditor(field, false); addLine(field, f_C_Activity_ID, isMandatory); } // User1 else if (type.equals(MAcctSchemaElement.ELEMENTTYPE_UserList1)) { GridField field = m_mTab.getField("User1_ID"); f_User1_ID = WebEditorFactory.getEditor(field, false); addLine(field, f_User1_ID, isMandatory); } else if (type.equals(MAcctSchemaElement.ELEMENTTYPE_UserList2)) { GridField field = m_mTab.getField("User2_ID"); f_User2_ID = WebEditorFactory.getEditor(field, false); addLine(field, f_User2_ID, isMandatory); } } // Create Fields in Element Order // Add description m_newRow = true; Row row = new Row(); f_Description.setStyle("font-decoration: italic;"); row.appendChild(f_Description); row.setSpans("4"); row.setStyle("background-color: transparent;"); m_rows.appendChild(row); // Finish m_query = new MQuery(); m_query.addRestriction("C_AcctSchema_ID", MQuery.EQUAL, m_C_AcctSchema_ID); m_query.addRestriction("IsFullyQualified", MQuery.EQUAL, "Y"); if (m_mAccount.C_ValidCombination_ID == 0) m_mTab.setQuery(MQuery.getEqualQuery("1", "2")); else { MQuery query = new MQuery(); query.addRestriction("C_AcctSchema_ID", MQuery.EQUAL, m_C_AcctSchema_ID); query.addRestriction("C_ValidCombination_ID", MQuery.EQUAL, m_mAccount.C_ValidCombination_ID); m_mTab.setQuery(query); } m_mTab.query(false); m_adTabPanel.getGridTab().addDataStatusListener(this); m_adTabPanel.activate(true); if (!m_adTabPanel.isGridView()) m_adTabPanel.switchRowPresentation(); statusBar.setStatusLine(s_AcctSchema.toString()); statusBar.setStatusDB("?"); // Initial value if (m_mAccount.C_ValidCombination_ID != 0) m_mTab.navigate(0); log.config("fini"); return true; } // initAccount /** * Add Editor to parameterPanel alernative right/left depending on m_newRow. * Field Value changes update Editors * @param field field * @param editor editor * @param mandatory mandatory */ private void addLine (GridField field, WEditor editor, boolean mandatory) { log.fine("Field=" + field); Label label = editor.getLabel(); editor.setReadWrite(true); editor.setMandatory(mandatory); // MField => VEditor field.addPropertyChangeListener(editor); // label if (m_newRow) { m_row = new Row(); m_row.setStyle("background-color: transparent"); m_rows.appendChild(m_row); } // else // m_gbc.gridx = 2; Div div = new Div(); div.setStyle("text-align: right"); div.appendChild(label); m_row.appendChild(div); m_row.appendChild(editor.getComponent()); editor.dynamicDisplay(); // m_newRow = !m_newRow; } // addLine /** * Load Information * @param C_ValidCombination_ID valid combination * @param C_AcctSchema_ID acct schema */ private void loadInfo (int C_ValidCombination_ID, int C_AcctSchema_ID) { log.fine("C_ValidCombination_ID=" + C_ValidCombination_ID); String sql = "SELECT * FROM C_ValidCombination WHERE C_ValidCombination_ID=? AND C_AcctSchema_ID=?"; try { PreparedStatement pstmt = DB.prepareStatement(sql, null); pstmt.setInt(1, C_ValidCombination_ID); pstmt.setInt(2, C_AcctSchema_ID); ResultSet rs = pstmt.executeQuery(); if (rs.next()) { if (f_Alias != null) f_Alias.setValue(rs.getString("Alias")); f_Combination.setValue(rs.getString("Combination")); // loadInfoOf (rs, f_AD_Org_ID, "AD_Org_ID"); loadInfoOf (rs, f_Account_ID, "Account_ID"); loadInfoOf (rs, f_SubAcct_ID, "C_SubAcct_ID"); // loadInfoOf (rs, f_M_Product_ID, "M_Product_ID"); loadInfoOf (rs, f_C_BPartner_ID, "C_BPartner_ID"); loadInfoOf (rs, f_C_Campaign_ID, "C_Campaign_ID"); loadInfoOf (rs, f_C_LocFrom_ID, "C_LocFrom_ID"); loadInfoOf (rs, f_C_LocTo_ID, "C_LocTo_ID"); loadInfoOf (rs, f_C_Project_ID, "C_Project_ID"); loadInfoOf (rs, f_C_SalesRegion_ID, "C_SalesRegion_ID"); loadInfoOf (rs, f_AD_OrgTrx_ID, "AD_OrgTrx_ID"); loadInfoOf (rs, f_C_Activity_ID, "C_Activity_ID"); loadInfoOf (rs, f_User1_ID, "User1_ID"); loadInfoOf (rs, f_User2_ID, "User2_ID"); // f_Description.setValue (rs.getString("Description")); } rs.close(); pstmt.close(); } catch (SQLException e) { log.log(Level.SEVERE, sql, e); } } // loadInfo /** * Set Value of Editor * @param rs result set * @param editor editor * @param name name * @throws SQLException */ private void loadInfoOf (ResultSet rs, WEditor editor, String name) throws SQLException { if (editor == null) return; int intValue = rs.getInt(name); if (rs.wasNull()) editor.setValue(null); else editor.setValue(new Integer (intValue)); } // loadInfoOf /** * dispose */ public void dispose() { saveSelection(); // GridController if (m_adTabPanel != null) m_adTabPanel.detach(); m_adTabPanel = null; // Model m_mTab = null; if (m_mWindow != null) m_mWindow.dispose(); m_mWindow = null; Env.clearWinContext(m_WindowNo); this.onClose(); } // dispose /** * Save Selection */ private void saveSelection() { if (m_changed && m_adTabPanel != null) { int row = m_adTabPanel.getGridTab().getCurrentRow(); if (row >= 0) m_C_ValidCombination_ID = ((Integer)m_mTab.getValue(row, "C_ValidCombination_ID")).intValue(); log.config("(" + row + ") - " + m_C_ValidCombination_ID); } } // saveSelection public void onEvent(Event event) throws Exception { if (event.getTarget().getId().equals("Ok")) { m_changed = true; dispose(); } else if (event.getTarget().getId().equals("Cancel")) { m_changed = false; dispose(); } // else if (event.getTarget() == bSave) action_Save(); else if (event.getTarget() == bIgnore) action_Ignore(); // all other else action_Find (true); } /** * Status Change Listener * @param e event */ public void dataStatusChanged (DataStatusEvent e) { log.config(e.toString()); String info = (String)m_mTab.getValue("Description"); if (Executions.getCurrent() != null) f_Description.setValue (info); } // statusChanged /** * Action Find. * - create where clause * - query database * @param includeAliasCombination include alias combination */ private void action_Find (boolean includeAliasCombination) { log.info(""); // Create where Clause MQuery query = null; if (m_query != null) query = m_query.deepCopy(); else query = new MQuery(); // Alias if (includeAliasCombination && f_Alias != null && f_Alias.getValue().toString().length() > 0) { String value = f_Alias.getValue().toString().toUpperCase(); if (!value.endsWith("%")) value += "%"; query.addRestriction("UPPER(Alias)", MQuery.LIKE, value); } // Combination (mandatory) if (includeAliasCombination && f_Combination.getValue().toString().length() > 0) { String value = f_Combination.getValue().toString().toUpperCase(); if (!value.endsWith("%")) value += "%"; query.addRestriction("UPPER(Combination)", MQuery.LIKE, value); } // Org (mandatory) if (f_AD_Org_ID != null && f_AD_Org_ID.getValue() != null) query.addRestriction("AD_Org_ID", MQuery.EQUAL, f_AD_Org_ID.getValue()); // Account (mandatory) if (f_Account_ID != null && f_Account_ID.getValue() != null) query.addRestriction("Account_ID", MQuery.EQUAL, f_Account_ID.getValue()); if (f_SubAcct_ID != null && f_SubAcct_ID.getValue() != null) query.addRestriction("C_SubAcct_ID", MQuery.EQUAL, f_SubAcct_ID.getValue()); // Product if (f_M_Product_ID != null && f_M_Product_ID.getValue() != null) query.addRestriction("M_Product_ID", MQuery.EQUAL, f_M_Product_ID.getValue()); // BPartner if (f_C_BPartner_ID != null && f_C_BPartner_ID.getValue() != null) query.addRestriction("C_BPartner_ID", MQuery.EQUAL, f_C_BPartner_ID.getValue()); // Campaign if (f_C_Campaign_ID != null && f_C_Campaign_ID.getValue() != null) query.addRestriction("C_Campaign_ID", MQuery.EQUAL, f_C_Campaign_ID.getValue()); // Loc From if (f_C_LocFrom_ID != null && f_C_LocFrom_ID.getValue() != null) query.addRestriction("C_LocFrom_ID", MQuery.EQUAL, f_C_LocFrom_ID.getValue()); // Loc To if (f_C_LocTo_ID != null && f_C_LocTo_ID.getValue() != null) query.addRestriction("C_LocTo_ID", MQuery.EQUAL, f_C_LocTo_ID.getValue()); // Project if (f_C_Project_ID != null && f_C_Project_ID.getValue() != null) query.addRestriction("C_Project_ID", MQuery.EQUAL, f_C_Project_ID.getValue()); // SRegion if (f_C_SalesRegion_ID != null && f_C_SalesRegion_ID.getValue() != null) query.addRestriction("C_SalesRegion_ID", MQuery.EQUAL, f_C_SalesRegion_ID.getValue()); // Org Trx if (f_AD_OrgTrx_ID != null && f_AD_OrgTrx_ID.getValue() != null) query.addRestriction("AD_OrgTrx_ID", MQuery.EQUAL, f_AD_OrgTrx_ID.getValue()); // Activity if (f_C_Activity_ID != null && f_C_Activity_ID.getValue() != null) query.addRestriction("C_Activity_ID", MQuery.EQUAL, f_C_Activity_ID.getValue()); // User 1 if (f_User1_ID != null && f_User1_ID.getValue() != null) query.addRestriction("User1_ID", MQuery.EQUAL, f_User1_ID.getValue()); // User 2 if (f_User2_ID != null && f_User2_ID.getValue() != null) query.addRestriction("User2_ID", MQuery.EQUAL, f_User2_ID.getValue()); // Query m_mTab.setQuery(query); m_mTab.query(false); statusBar.setStatusDB(String.valueOf(m_mTab.getRowCount())); } // action_Find /** * Create/Save Account */ private void action_Save() { log.info(""); /** * Check completeness (mandatory fields) ... and for duplicates */ StringBuffer sb = new StringBuffer(); StringBuffer sql = new StringBuffer ("SELECT C_ValidCombination_ID, Alias FROM C_ValidCombination WHERE "); Object value = null; if (s_AcctSchema.isHasAlias()) { value = f_Alias.getValue().toString(); if (isEmpty(value) && f_Alias.isMandatory()) sb.append(Msg.translate(Env.getCtx(), "Alias")).append(", "); } MAcctSchemaElement[] elements = s_AcctSchema.getAcctSchemaElements(); for (int i = 0; i < elements.length; i++) { MAcctSchemaElement ase = elements[i]; String type = ase.getElementType(); // if (type.equals(MAcctSchemaElement.ELEMENTTYPE_Organization)) { value = f_AD_Org_ID.getValue(); sql.append("AD_Org_ID"); if (isEmpty(value)) sql.append(" IS NULL AND "); else sql.append("=").append(value).append(" AND "); } else if (type.equals(MAcctSchemaElement.ELEMENTTYPE_Account)) { value = f_Account_ID.getValue(); sql.append("Account_ID"); if (isEmpty(value)) sql.append(" IS NULL AND "); else sql.append("=").append(value).append(" AND "); } else if (type.equals(MAcctSchemaElement.ELEMENTTYPE_SubAccount)) { value = f_SubAcct_ID.getValue(); sql.append("C_SubAcct_ID"); if (isEmpty(value)) sql.append(" IS NULL AND "); else sql.append("=").append(value).append(" AND "); } else if (type.equals(MAcctSchemaElement.ELEMENTTYPE_Product)) { value = f_M_Product_ID.getValue(); sql.append("M_Product_ID"); if (isEmpty(value)) sql.append(" IS NULL AND "); else sql.append("=").append(value).append(" AND "); } else if (type.equals(MAcctSchemaElement.ELEMENTTYPE_BPartner)) { value = f_C_BPartner_ID.getValue(); sql.append("C_BPartner_ID"); if (isEmpty(value)) sql.append(" IS NULL AND "); else sql.append("=").append(value).append(" AND "); } else if (type.equals(MAcctSchemaElement.ELEMENTTYPE_Campaign)) { value = f_C_Campaign_ID.getValue(); sql.append("C_Campaign_ID"); if (isEmpty(value)) sql.append(" IS NULL AND "); else sql.append("=").append(value).append(" AND "); } else if (type.equals(MAcctSchemaElement.ELEMENTTYPE_LocationFrom)) { value = f_C_LocFrom_ID.getValue(); sql.append("C_LocFrom_ID"); if (isEmpty(value)) sql.append(" IS NULL AND "); else sql.append("=").append(value).append(" AND "); } else if (type.equals(MAcctSchemaElement.ELEMENTTYPE_LocationTo)) { value = f_C_LocTo_ID.getValue(); sql.append("C_LocTo_ID"); if (isEmpty(value)) sql.append(" IS NULL AND "); else sql.append("=").append(value).append(" AND "); } else if (type.equals(MAcctSchemaElement.ELEMENTTYPE_Project)) { value = f_C_Project_ID.getValue(); sql.append("C_Project_ID"); if (isEmpty(value)) sql.append(" IS NULL AND "); else sql.append("=").append(value).append(" AND "); } else if (type.equals(MAcctSchemaElement.ELEMENTTYPE_SalesRegion)) { value = f_C_SalesRegion_ID.getValue(); sql.append("C_SalesRegion_ID"); if (isEmpty(value)) sql.append(" IS NULL AND "); else sql.append("=").append(value).append(" AND "); } else if (type.equals(MAcctSchemaElement.ELEMENTTYPE_OrgTrx)) { value = f_AD_OrgTrx_ID.getValue(); sql.append("AD_OrgTrx_ID"); if (isEmpty(value)) sql.append(" IS NULL AND "); else sql.append("=").append(value).append(" AND "); } else if (type.equals(MAcctSchemaElement.ELEMENTTYPE_Activity)) { value = f_C_Activity_ID.getValue(); sql.append("C_Activity_ID"); if (isEmpty(value)) sql.append(" IS NULL AND "); else sql.append("=").append(value).append(" AND "); } else if (type.equals(MAcctSchemaElement.ELEMENTTYPE_UserList1)) { value = f_User1_ID.getValue(); sql.append("User1_ID"); if (isEmpty(value)) sql.append(" IS NULL AND "); else sql.append("=").append(value).append(" AND "); } else if (type.equals(MAcctSchemaElement.ELEMENTTYPE_UserList2)) { value = f_User2_ID.getValue(); sql.append("User2_ID"); if (isEmpty(value)) sql.append(" IS NULL AND "); else sql.append("=").append(value).append(" AND "); } // if (ase.isMandatory() && isEmpty(value)) sb.append(ase.getName()).append(", "); } // Fields in Element Order if (sb.length() != 0) { FDialog.error(m_WindowNo, this, "FillMandatory", sb.substring(0, sb.length()-2)); return; } if (f_AD_Org_ID == null || f_AD_Org_ID.getValue() == null) { FDialog.error(m_WindowNo, this, "FillMandatory", Msg.getElement(Env.getCtx(), "AD_Org_ID")); return; } if (f_Account_ID == null || f_Account_ID.getValue() == null) { FDialog.error(m_WindowNo, this, "FillMandatory", Msg.getElement(Env.getCtx(), "Account_ID")); return; } /** * Check if already exists */ sql.append("AD_Client_ID=? AND C_AcctSchema_ID=?"); log.fine("Check = " + sql.toString()); int IDvalue = 0; String Alias = null; try { PreparedStatement pstmt = DB.prepareStatement(sql.toString(), null); pstmt.setInt(1, m_AD_Client_ID); pstmt.setInt(2, s_AcctSchema.getC_AcctSchema_ID()); ResultSet rs = pstmt.executeQuery(); if (rs.next()) { IDvalue = rs.getInt(1); Alias = rs.getString(2); } rs.close(); pstmt.close(); } catch (SQLException e) { log.log(Level.SEVERE, sql.toString(), e); IDvalue = 0; } log.fine("ID=" + IDvalue + ", Alias=" + Alias); if (Alias == null) Alias = ""; // We have an account like this already - check alias if (IDvalue != 0 && s_AcctSchema.isHasAlias() && !f_Alias.getValue().toString().equals(Alias)) { sql = new StringBuffer("UPDATE C_ValidCombination SET Alias="); if (f_Alias.getValue().toString().length() == 0) sql.append("NULL"); else sql.append("'").append(f_Alias.getValue()).append("'"); sql.append(" WHERE C_ValidCombination_ID=").append(IDvalue); int i = 0; try { java.sql.PreparedStatement stmt = DB.prepareStatement(sql.toString(), ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_UPDATABLE, null); i = stmt.executeUpdate(); stmt.close(); } catch (SQLException e) { log.log(Level.SEVERE, sql.toString(), e); } if (i == 0) FDialog.error(m_WindowNo, this, "AccountNotUpdated"); } // load and display if (IDvalue != 0) { loadInfo (IDvalue, s_AcctSchema.getC_AcctSchema_ID()); action_Find (false); return; } log.config("New"); Alias = null; if (f_Alias != null) Alias = f_Alias.getValue().toString(); int C_SubAcct_ID = 0; if (f_SubAcct_ID != null && !isEmpty(f_SubAcct_ID.getValue())) C_SubAcct_ID = ((Integer)f_SubAcct_ID.getValue()).intValue(); int M_Product_ID = 0; if (f_M_Product_ID != null && !isEmpty(f_M_Product_ID.getValue())) M_Product_ID = ((Integer)f_M_Product_ID.getValue()).intValue(); int C_BPartner_ID = 0; if (f_C_BPartner_ID != null && !isEmpty(f_C_BPartner_ID.getValue())) C_BPartner_ID = ((Integer)f_C_BPartner_ID.getValue()).intValue(); int AD_OrgTrx_ID = 0; if (f_AD_OrgTrx_ID != null && !isEmpty(f_AD_OrgTrx_ID.getValue())) AD_OrgTrx_ID = ((Integer)f_AD_OrgTrx_ID.getValue()).intValue(); int C_LocFrom_ID = 0; if (f_C_LocFrom_ID != null && !isEmpty(f_C_LocFrom_ID.getValue())) C_LocFrom_ID = ((Integer)f_C_LocFrom_ID.getValue()).intValue(); int C_LocTo_ID = 0; if (f_C_LocTo_ID != null && !isEmpty(f_C_LocTo_ID.getValue())) C_LocTo_ID = ((Integer)f_C_LocTo_ID.getValue()).intValue(); int C_SRegion_ID = 0; if (f_C_SalesRegion_ID != null && !isEmpty(f_C_SalesRegion_ID.getValue())) C_SRegion_ID = ((Integer)f_C_SalesRegion_ID.getValue()).intValue(); int C_Project_ID = 0; if (f_C_Project_ID != null && !isEmpty(f_C_Project_ID.getValue())) C_Project_ID= ((Integer)f_C_Project_ID.getValue()).intValue(); int C_Campaign_ID = 0; if (f_C_Campaign_ID != null && !isEmpty(f_C_Campaign_ID.getValue())) C_Campaign_ID = ((Integer)f_C_Campaign_ID.getValue()).intValue(); int C_Activity_ID = 0; if (f_C_Activity_ID != null && !isEmpty(f_C_Activity_ID.getValue())) C_Activity_ID = ((Integer)f_C_Activity_ID.getValue()).intValue(); int User1_ID = 0; if (f_User1_ID != null && !isEmpty(f_User1_ID.getValue())) User1_ID = ((Integer)f_User1_ID.getValue()).intValue(); int User2_ID = 0; if (f_User2_ID != null && !isEmpty(f_User2_ID.getValue())) User2_ID = ((Integer)f_User2_ID.getValue()).intValue(); MAccount acct = MAccount.get (Env.getCtx(), m_AD_Client_ID, ((Integer)f_AD_Org_ID.getValue()).intValue(), s_AcctSchema.getC_AcctSchema_ID(), ((Integer)f_Account_ID.getValue()).intValue(), C_SubAcct_ID, M_Product_ID, C_BPartner_ID, AD_OrgTrx_ID, C_LocFrom_ID, C_LocTo_ID, C_SRegion_ID, C_Project_ID, C_Campaign_ID, C_Activity_ID, User1_ID, User2_ID, 0, 0); if (acct != null && acct.get_ID() == 0) acct.save(); // Show Info if (acct == null || acct.get_ID() == 0) loadInfo (0, 0); else { // Update Account with optional Alias if (Alias != null && Alias.length() > 0) { acct.setAlias(Alias); acct.save(); } loadInfo (acct.get_ID(), s_AcctSchema.getC_AcctSchema_ID()); } action_Find (false); } // action_Save private boolean isEmpty(Object value) { if (value == null) return true; if (value instanceof String) return ((String)value).trim().length() == 0; return false; } /** * Ignore */ private void action_Ignore() { if (f_Alias != null) f_Alias.setValue(""); f_Combination.setValue(""); f_Description.setValue(""); // // Org (mandatory) f_AD_Org_ID.setValue(null); // Account (mandatory) f_Account_ID.setValue(null); if (f_SubAcct_ID != null) f_SubAcct_ID.setValue(null); // Product if (f_M_Product_ID != null) f_M_Product_ID.setValue(null); // BPartner if (f_C_BPartner_ID != null) f_C_BPartner_ID.setValue(null); // Campaign if (f_C_Campaign_ID != null) f_C_Campaign_ID.setValue(null); // Loc From if (f_C_LocFrom_ID != null) f_C_LocFrom_ID.setValue(null); // Loc To if (f_C_LocTo_ID != null) f_C_LocTo_ID.setValue(null); // Project if (f_C_Project_ID != null) f_C_Project_ID.setValue(null); // SRegion if (f_C_SalesRegion_ID != null) f_C_SalesRegion_ID.setValue(null); // Org Trx if (f_AD_OrgTrx_ID != null) f_AD_OrgTrx_ID.setValue(null); // Activity if (f_C_Activity_ID != null) f_C_Activity_ID.setValue(null); // User 1 if (f_User1_ID != null) f_User1_ID.setValue(null); // User 2 if (f_User2_ID != null) f_User2_ID.setValue(null); } // action_Ignore /** * Get selected account * @return account */ public Integer getValue() { log.config("C_ValidCombination_ID=" + m_C_ValidCombination_ID + ", Changed=" + m_changed); if (!m_changed || m_C_ValidCombination_ID == 0) return null; return new Integer(m_C_ValidCombination_ID); } /** * valueChange - Account Changed * @param evt event */ public void valueChange(ValueChangeEvent evt) { Object newValue = evt.getNewValue(); if (newValue instanceof Integer) Env.setContext(Env.getCtx(), m_WindowNo, "Account_ID", ((Integer)newValue).intValue()); } } // WAccountDialog