/****************************************************************************** * Product: Adempiere ERP & CRM Smart Business Solution * * Copyright (C) 1999-2006 Adempiere, 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. * *****************************************************************************/ package org.compiere.pos; import java.awt.Dimension; import java.awt.event.ActionEvent; import java.awt.event.KeyEvent; import java.awt.event.WindowEvent; import java.awt.event.WindowListener; import javax.swing.KeyStroke; import javax.swing.border.TitledBorder; import net.miginfocom.swing.MigLayout; import org.compiere.minigrid.ColumnInfo; import org.compiere.minigrid.IDColumn; import org.compiere.model.MBPartnerInfo; import org.compiere.swing.CButton; import org.compiere.swing.CLabel; import org.compiere.swing.CPanel; import org.compiere.swing.CScrollPane; import org.compiere.swing.CTextField; import org.compiere.util.CLogger; import org.compiere.util.Env; import org.compiere.util.Msg; /** * POS Query BPartner * * @author Comunidad de Desarrollo OpenXpertya * *Basado en Codigo Original Modificado, Revisado y Optimizado de: * *Copyright (c) Jorg Janke * @version $Id: QueryBPartner.java,v 1.1 2004/07/12 04:10:04 jjanke Exp $ */ public class QueryBPartner extends PosQuery { /** * */ private static final long serialVersionUID = -7109518709654253628L; /** * Constructor */ public QueryBPartner (PosBasePanel posPanel) { super(posPanel); } // PosQueryBPartner private PosTextField f_value; private PosTextField f_name; private PosTextField f_contact; private PosTextField f_email; private PosTextField f_phone; private CTextField f_city; private int m_C_BPartner_ID; private int m_C_BPartner_Location_ID; private MBPartnerInfo[] m_Result = new MBPartnerInfo[0]; private CButton f_refresh; private CButton f_ok; private CButton f_cancel; /** Logger */ private static CLogger log = CLogger.getCLogger(QueryBPartner.class); /** Table Column Layout Info */ private static ColumnInfo[] s_layout = new ColumnInfo[] { new ColumnInfo(" ", "C_BPartner_ID", IDColumn.class), new ColumnInfo(Msg.translate(Env.getCtx(), "Value"), "Value", String.class), new ColumnInfo(Msg.translate(Env.getCtx(), "Name"), "Name", String.class), new ColumnInfo(Msg.translate(Env.getCtx(), "Email"), "Email", String.class), new ColumnInfo(Msg.translate(Env.getCtx(), "Phone"), "Phone", String.class), new ColumnInfo(Msg.translate(Env.getCtx(), "Postal"), "Postal", String.class), new ColumnInfo(Msg.translate(Env.getCtx(), "City"), "City", String.class) }; /** From Clause */ private static String s_sqlFrom = "RV_BPartner"; /** Where Clause */ private static String s_sqlWhere = "IsActive='Y'"; /** * Set up Panel */ protected void init() { CPanel panel = new CPanel(); panel.setLayout(new MigLayout("fill")); getContentPane().add(panel); // North northPanel = new CPanel(new MigLayout("fill","", "[50][50][]")); panel.add (northPanel, "north"); northPanel.setBorder(new TitledBorder(Msg.getMsg(p_ctx, "Query"))); CLabel lvalue = new CLabel(Msg.translate(p_ctx, "Value")); northPanel.add (lvalue, " growy"); f_value = new PosTextField("", p_posPanel, p_pos.getOSK_KeyLayout_ID()); lvalue.setLabelFor(f_value); northPanel.add(f_value, "h 30, w 200"); f_value.addActionListener(this); // CLabel lcontact = new CLabel(Msg.translate(p_ctx, "Contact")); northPanel.add (lcontact, " growy"); f_contact = new PosTextField("", p_posPanel, p_pos.getOSK_KeyLayout_ID()); lcontact.setLabelFor(f_contact); northPanel.add(f_contact, "h 30, w 200"); f_contact.addActionListener(this); // CLabel lphone = new CLabel(Msg.translate(p_ctx, "Phone")); northPanel.add (lphone, " growy"); f_phone = new PosTextField("", p_posPanel, p_pos.getOSK_KeyLayout_ID()); lphone.setLabelFor(f_phone); northPanel.add(f_phone, "h 30, w 200, wrap"); f_phone.addActionListener(this); // CLabel lname = new CLabel(Msg.translate(p_ctx, "Name")); northPanel.add (lname, " growy"); f_name = new PosTextField("", p_posPanel, p_pos.getOSK_KeyLayout_ID()); lname.setLabelFor(f_name); northPanel.add(f_name, "h 30, w 200"); f_name.addActionListener(this); // CLabel lemail = new CLabel(Msg.translate(p_ctx, "Email")); northPanel.add (lemail, " growy"); f_email = new PosTextField("", p_posPanel, p_pos.getOSK_KeyLayout_ID()); lemail.setLabelFor(f_email); northPanel.add(f_email, "h 30, w 200"); f_email.addActionListener(this); // CLabel lcity = new CLabel(Msg.translate(p_ctx, "City")); northPanel.add (lcity, " growy"); f_city = new CTextField(10); lcity.setLabelFor(f_city); northPanel.add(f_city, "h 30, w 200"); f_city.addActionListener(this); // f_refresh = createButtonAction("Refresh", KeyStroke.getKeyStroke(KeyEvent.VK_F5, 0)); northPanel.add(f_refresh, "w 50!, h 50!, wrap, alignx trailing"); f_up = createButtonAction("Previous", KeyStroke.getKeyStroke(KeyEvent.VK_UP, 0)); northPanel.add(f_up, "w 50!, h 50!, span, split 4"); f_down = createButtonAction("Next", KeyStroke.getKeyStroke(KeyEvent.VK_DOWN, 0)); northPanel.add(f_down, "w 50!, h 50!"); f_ok = createButtonAction("Ok", KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0)); northPanel.add(f_ok, "w 50!, h 50!"); f_cancel = createButtonAction("Cancel", KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0)); northPanel.add(f_cancel, "w 50!, h 50!"); // Center m_table = new PosTable(); m_table.prepareTable (s_layout, s_sqlFrom, s_sqlWhere, false, "RV_BPartner"); m_table.addMouseListener(this); m_table.getSelectionModel().addListSelectionListener(this); enableButtons(); centerScroll = new CScrollPane(m_table); panel.add (centerScroll, "growx, growy"); m_table.growScrollbars(); panel.setPreferredSize(new Dimension(800,600)); f_name.requestFocusInWindow(); // @emmie addWindowListener(new WindowsCloseAdapter()); // @emmie } // init /** * Action Listener * @param e event */ public void actionPerformed (ActionEvent e) { log.info(e.getActionCommand()); if ("Refresh".equals(e.getActionCommand()) || e.getSource() == f_value // || e.getSource() == f_upc || e.getSource() == f_name // || e.getSource() == f_sku ) { setResults(MBPartnerInfo.find (p_ctx, f_value.getText(), f_name.getText(), null, f_email.getText(), f_phone.getText(), f_city.getText())); return; } else if ("Reset".equals(e.getActionCommand())) { reset(); return; } else if ("Previous".equalsIgnoreCase(e.getActionCommand())) { int rows = m_table.getRowCount(); if (rows == 0) return; int row = m_table.getSelectedRow(); row--; if (row < 0) row = 0; m_table.getSelectionModel().setSelectionInterval(row, row); return; } else if ("Next".equalsIgnoreCase(e.getActionCommand())) { int rows = m_table.getRowCount(); if (rows == 0) return; int row = m_table.getSelectedRow(); row++; if (row >= rows) row = rows - 1; m_table.getSelectionModel().setSelectionInterval(row, row); return; } else if ("Cancel".equals(e.getActionCommand())) { m_C_BPartner_ID = -1; // @emmie - force non-selection } // Exit close(); } // actionPerformed /** * Set/display Results * @param results results */ public void setResults (MBPartnerInfo[] results) { m_table.loadTable(results); m_Result = results; enableButtons(); } // setResults /** * Enable/Set Buttons and set ID */ protected void enableButtons() { m_C_BPartner_ID = -1; m_C_BPartner_Location_ID = -1; int row = m_table.getSelectedRow(); boolean enabled = row != -1; if (enabled) { Integer ID = m_table.getSelectedRowKey(); if (ID != null) { m_C_BPartner_ID = ID.intValue(); m_C_BPartner_Location_ID = m_Result[row].getC_BPartner_Location_ID(); } } f_ok.setEnabled(enabled); log.fine("C_BPartner_ID=" + m_C_BPartner_ID); } // enableButtons /** * Close. * Set Values on other panels and close */ protected void close() { log.fine("C_BPartner_ID=" + m_C_BPartner_ID); if (m_C_BPartner_ID > 0) { p_posPanel.f_order.setC_BPartner_ID(m_C_BPartner_ID); p_posPanel.f_order.setC_BPartner_Location_ID(m_C_BPartner_Location_ID); } else { p_posPanel.f_order.setC_BPartner_ID(0); } dispose(); } // close @Override public void reset() { f_value.setText(null); f_name.setText(null); f_contact.setText(null); f_email.setText(null); f_phone.setText(null); f_city.setText(null); setResults(new MBPartnerInfo[0]); } /* * @emmie * * WindowsListener adapter for manage close window event * (this avoid reopen bp dialog when is closed from windows manager) */ private class WindowsCloseAdapter implements WindowListener { @Override public void windowClosed(WindowEvent e){} @Override public void windowIconified(WindowEvent e){} @Override public void windowDeiconified(WindowEvent e){} @Override public void windowActivated(WindowEvent e){} @Override public void windowDeactivated(WindowEvent e){} @Override public void windowOpened(WindowEvent e){} @Override public void windowClosing(WindowEvent e) { m_C_BPartner_ID = -1; // force non-selection close(); } } } // PosQueryBPartner