/******************************************************************************
* 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.math.BigDecimal;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Timestamp;
import java.util.Properties;
import javax.swing.KeyStroke;
import javax.swing.border.TitledBorder;
import net.miginfocom.swing.MigLayout;
import org.compiere.grid.ed.VDate;
import org.compiere.minigrid.ColumnInfo;
import org.compiere.minigrid.IDColumn;
import org.compiere.swing.CButton;
import org.compiere.swing.CCheckBox;
import org.compiere.swing.CLabel;
import org.compiere.swing.CPanel;
import org.compiere.swing.CScrollPane;
import org.compiere.util.DB;
import org.compiere.util.Env;
import org.compiere.util.Msg;
/**
* POS Query Product
*
* @author Comunidad de Desarrollo OpenXpertya
* *Basado en Codigo Original Modificado, Revisado y Optimizado de:
* *Jose A.Gonzalez, Conserti.
*
* @version $Id: QueryTicket.java,v 0.9 $
*
* @Colaborador $Id: Consultoria y Soporte en Redes y Tecnologias de la Informacion S.L.
*
*/
public class QueryTicket extends PosQuery
{
/**
*
*/
private static final long serialVersionUID = 7713957495649128816L;
/**
* Constructor
*/
public QueryTicket (PosBasePanel posPanel)
{
super(posPanel);
} // PosQueryProduct
private PosTextField f_documentno;
private VDate f_date;
private int m_c_order_id;
private CCheckBox f_processed;
private CButton f_refresh;
private CButton f_ok;
private CButton f_cancel;
/** Table Column Layout Info */
private static ColumnInfo[] s_layout = new ColumnInfo[]
{
new ColumnInfo(" ", "C_Order_ID", IDColumn.class),
new ColumnInfo(Msg.translate(Env.getCtx(), "DocumentNo"), "DocumentNo", String.class),
new ColumnInfo(Msg.translate(Env.getCtx(), "TotalLines"), "TotalLines", BigDecimal.class),
new ColumnInfo(Msg.translate(Env.getCtx(), "GrandTotal"), "GrandTotal", BigDecimal.class),
new ColumnInfo(Msg.translate(Env.getCtx(), "C_BPartner_ID"), "Name", String.class),
new ColumnInfo(Msg.translate(Env.getCtx(), "Processed"), "Processed", Boolean.class)
};
/**
* Set up Panel
*/
@Override
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 ldoc = new CLabel(Msg.translate(p_ctx, "DocumentNo"));
northPanel.add (ldoc, " growy");
f_documentno = new PosTextField("", p_posPanel, p_pos.getOSK_KeyLayout_ID());
ldoc.setLabelFor(f_documentno);
northPanel.add(f_documentno, "h 30, w 200");
f_documentno.addActionListener(this);
//
CLabel ldate = new CLabel(Msg.translate(p_ctx, "DateOrdered"));
northPanel.add (ldate, "growy");
f_date = new VDate();
f_date.setValue(Env.getContextAsDate(Env.getCtx(), "#Date"));
ldate.setLabelFor(f_date);
northPanel.add(f_date, "h 30, w 200");
f_date.addActionListener(this);
f_processed = new CCheckBox(Msg.translate(p_ctx, "Processed"));
f_processed.setSelected(false);
northPanel.add(f_processed, "");
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();
String sql = m_table.prepareTable (s_layout, "C_Order",
"C_POS_ID = " + p_pos.getC_POS_ID()
, false, "C_Order")
+ " ORDER BY Margin, QtyAvailable";
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_documentno.requestFocus();
pack();
setResults(p_ctx, f_processed.isSelected(), f_documentno.getText(), f_date.getTimestamp());
} // init
/**
* Action Listener
* @param e event
*/
@Override
public void actionPerformed (ActionEvent e)
{
log.info("PosQueryProduct.actionPerformed - " + e.getActionCommand());
if ("Refresh".equals(e.getActionCommand())
|| e.getSource() == f_processed || e.getSource() == f_documentno
|| e.getSource() == f_date)
{
setResults(p_ctx, f_processed.isSelected(), f_documentno.getText(), f_date.getTimestamp());
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".equalsIgnoreCase(e.getActionCommand()))
{
dispose();
return;
}
// Exit
close();
} // actionPerformed
/**
*
*/
@Override
public void reset()
{
f_processed.setSelected(false);
f_documentno.setText(null);
f_date.setValue(Env.getContextAsDate(Env.getCtx(), "#Date"));
setResults(p_ctx, f_processed.isSelected(), f_documentno.getText(), f_date.getTimestamp());
}
/**
* Set/display Results
* @param results results
*/
public void setResults (Properties ctx, boolean processed, String doc, Timestamp date)
{
String sql = "";
try
{
sql = "SELECT o.C_Order_ID, o.DocumentNo, o.TotalLines, o.GrandTotal, b.Name, o.Processed" +
" FROM C_Order o INNER JOIN C_BPartner b ON o.C_BPartner_ID=b.C_BPartner_ID" +
" WHERE o.C_POS_ID = " + p_pos.getC_POS_ID();
sql += " AND o.Processed = " + ( processed ? "'Y' " : "'N' ");
if (doc != null && !doc.equalsIgnoreCase(""))
sql += " AND o.DocumentNo = '" + doc + "'";
if ( date != null )
sql += " AND o.DateOrdered = ? Order By o.DocumentNo DESC";
PreparedStatement pstm = DB.prepareStatement(sql, null);
if ( date != null )
pstm.setTimestamp(1, date);
ResultSet rs = pstm.executeQuery();
m_table.loadTable(rs);
if ( m_table.getRowCount() > 0 )
m_table.setRowSelectionInterval(0, 0);
enableButtons();
}
catch(Exception e)
{
log.severe("QueryTicket.setResults: " + e + " -> " + sql);
}
} // setResults
/**
* Enable/Set Buttons and set ID
*/
protected void enableButtons()
{
m_c_order_id = -1;
int row = m_table.getSelectedRow();
boolean enabled = row != -1;
if (enabled)
{
Integer ID = m_table.getSelectedRowKey();
if (ID != null)
{
m_c_order_id = ID.intValue();
}
}
f_ok.setEnabled(enabled);
log.info("ID=" + m_c_order_id);
} // enableButtons
/**
* Close.
* Set Values on other panels and close
*/
@Override
protected void close()
{
log.info("C_Order_ID=" + m_c_order_id);
if (m_c_order_id > 0)
{
p_posPanel.setOrder(m_c_order_id);
p_posPanel.updateInfo();
}
dispose();
} // close
} // PosQueryProduct