From 6a976b51ddac1c17167b4391c222ae14af517885 Mon Sep 17 00:00:00 2001 From: Heng Sin Low Date: Fri, 16 Feb 2007 09:24:37 +0000 Subject: [PATCH] * [ 1639249 ] Complete the POS implementation Integration of openXpertya code, not fully functional yet. --- .../org/compiere/pos/CashSubFunctions.java | 550 ++++++++++++++++++ .../compiere/pos/PosKeyboardFocusManager.java | 135 +++-- client/src/org/compiere/pos/PosPanel.java | 99 +++- client/src/org/compiere/pos/PosSubPanel.java | 16 +- .../src/org/compiere/pos/QueryBPartner.java | 21 +- client/src/org/compiere/pos/QueryProduct.java | 16 +- client/src/org/compiere/pos/QueryTicket.java | 356 ++++++++++++ client/src/org/compiere/pos/SubBPartner.java | 24 +- client/src/org/compiere/pos/SubBasicKeys.java | 14 +- client/src/org/compiere/pos/SubCheckout.java | 272 ++++++++- .../src/org/compiere/pos/SubCurrentLine.java | 431 +++++++++----- .../src/org/compiere/pos/SubFunctionKeys.java | 22 +- client/src/org/compiere/pos/SubLines.java | 39 +- client/src/org/compiere/pos/SubProduct.java | 24 +- client/src/org/compiere/pos/SubSalesRep.java | 16 +- 15 files changed, 1706 insertions(+), 329 deletions(-) create mode 100644 client/src/org/compiere/pos/CashSubFunctions.java create mode 100644 client/src/org/compiere/pos/QueryTicket.java diff --git a/client/src/org/compiere/pos/CashSubFunctions.java b/client/src/org/compiere/pos/CashSubFunctions.java new file mode 100644 index 0000000000..c1eaed355e --- /dev/null +++ b/client/src/org/compiere/pos/CashSubFunctions.java @@ -0,0 +1,550 @@ +/****************************************************************************** + * 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.math.*; +import java.awt.*; +import java.awt.event.*; +import java.sql.*; + +import javax.swing.border.*; + +import org.compiere.swing.*; +import org.compiere.apps.*; +import org.compiere.grid.ed.*; +import org.compiere.model.*; +import org.compiere.util.*; + +/** + * @author Comunidad de Desarrollo OpenXpertya + * *Basado en Codigo Original Modificado, Revisado y Optimizado de: + * *Jose A.Gonzalez, Conserti. + * + * @version $Id: CashSubFunctions.java,v 0.9 $ + * + * @Colaborador $Id: Consultoria y Soporte en Redes y Tecnologias de la Informacion S.L. + * + */ + +public class CashSubFunctions extends PosSubPanel implements ActionListener, InputMethodListener +{ + /** + * Constructor + */ + public CashSubFunctions (PosPanel posPanel) + { + super(posPanel); + } // PosQueryProduct + + private CButton f_displayInitialChange = null; + private CButton f_inputsOutputs = null; + private CButton f_tickets = null; + private CButton f_closingCash = null; + private CButton f_displayCashScrutiny = null; + private CButton f_pos = null; + private CPanel c; + + // for initial change + private CPanel cInitial; + private CLabel l_PreviousChange = null; + private VNumber v_PreviousChange; + private CLabel l_change = null; + private VNumber v_change; + private CButton f_change = null; + + // for cash scrutiny + private CPanel cScrutiny; + private CLabel l_previousBalance = null; + private VNumber v_previousBalance; + private CLabel l_ActualBalance = null; + private VNumber v_ActualBalance; + private CLabel l_difference = null; + private VNumber v_difference; + private CButton f_calculateDifference = null; + + private CPanel panel; + private CScrollPane centerScroll; + private ConfirmPanel confirm; + + /** Logger */ + private static CLogger log = CLogger.getCLogger(SubCheckout.class); + + /** + * Set up Panel + */ + protected void init() + { + setLayout(new BorderLayout(2,6)); + setVisible(false); + // North + panel = new CPanel(new GridBagLayout()); + add (panel, BorderLayout.CENTER); + panel.setBorder(new TitledBorder(Msg.getMsg(p_ctx, "Cash Functions"))); + GridBagConstraints gbc = new GridBagConstraints(); + gbc.insets = PosSubPanel.INSETS2; + // + gbc.gridx = 0; + gbc.gridy = 0; + gbc.anchor = GridBagConstraints.CENTER; + gbc.weightx = .3; + gbc.weighty = 0.05; + + + //******************** Main buttons ********************************** + + f_displayInitialChange = createButtonAction("InitialChange", null); + f_displayInitialChange.setText("Initial Change"); + f_displayInitialChange.setActionCommand("displayInitialChange"); + f_displayInitialChange.setMaximumSize(new Dimension(160,35)); + f_displayInitialChange.setMinimumSize(new Dimension(160,35)); + f_displayInitialChange.setPreferredSize(new Dimension(160,35)); + panel.add (f_displayInitialChange, gbc); + // + f_closingCash = createButtonAction("InitialChange", null); + f_closingCash.setText("Cash Closing"); + f_closingCash.setActionCommand("CashClosing"); + f_closingCash.setPreferredSize(new Dimension(160,35)); + f_closingCash.setMaximumSize(new Dimension(160,35)); + f_closingCash.setMinimumSize(new Dimension(160,35)); + gbc.gridy = 1; + panel.add (f_closingCash, gbc); + // + f_displayCashScrutiny = createButtonAction("Scrutiny", null); + f_displayCashScrutiny.setText("Cash Scrutiny"); + f_displayCashScrutiny.setActionCommand("displayCashScrutiny"); + f_displayCashScrutiny.setPreferredSize(new Dimension(160,35)); + f_displayCashScrutiny.setMaximumSize(new Dimension(160,35)); + f_displayCashScrutiny.setMinimumSize(new Dimension(160,35)); + gbc.gridy = 2; + panel.add (f_displayCashScrutiny, gbc); + // + f_inputsOutputs = createButtonAction("Inputs", null); + f_inputsOutputs.setText("Inputs and Outputs"); + f_inputsOutputs.setActionCommand("InputsOutputs"); + f_inputsOutputs.setPreferredSize(new Dimension(160,35)); + f_inputsOutputs.setMaximumSize(new Dimension(160,35)); + f_inputsOutputs.setMinimumSize(new Dimension(160,35)); + gbc.gridy = 3; + panel.add (f_inputsOutputs, gbc); + // + f_tickets = createButtonAction("Tickets", null); + f_tickets.setText("Tickets"); + f_tickets.setPreferredSize(new Dimension(160,35)); + f_tickets.setMaximumSize(new Dimension(160,35)); + f_tickets.setMinimumSize(new Dimension(160,35)); + gbc.gridy = 4; + panel.add (f_tickets, gbc); + // + f_pos = createButtonAction("End", null); + f_pos.setText("POS"); + f_pos.setPreferredSize(new Dimension(160,35)); + f_pos.setMaximumSize(new Dimension(160,35)); + f_pos.setMinimumSize(new Dimension(160,35)); + gbc.gridy = 5; + panel.add (f_pos, gbc); + + //*************************** Panel to put buttons ************************* + gbc.gridx = 1; + gbc.anchor = GridBagConstraints.WEST; + gbc.gridy = 0; + gbc.gridheight = 5; + + c = new CPanel(new GridBagLayout()); + c.setBorder(new TitledBorder("")); + c.setMaximumSize(new Dimension(400,400)); + c.setMinimumSize(new Dimension(400,400)); + c.setPreferredSize(new Dimension(400,400)); + panel.add (c, gbc); + + + + //*************************** Panel for initial change ************************* + gbc.gridx = 1; + gbc.anchor = GridBagConstraints.WEST; + gbc.gridy = 0; + gbc.gridheight = 5; + cInitial = new CPanel(new GridBagLayout()); + cInitial.setBorder(new TitledBorder("Initial Change")); + cInitial.setVisible(false); + panel.add (cInitial, gbc); + GridBagConstraints gbc0 = new GridBagConstraints(); + gbc0.insets = INSETS2; + gbc0.anchor = GridBagConstraints.CENTER; + // + gbc0.gridx = 0; + gbc0.gridy = 0; + l_PreviousChange = new CLabel("Previous Change"); + cInitial.add (l_PreviousChange, gbc0); + + gbc0.gridx = 1; + v_PreviousChange = new VNumber("PreviousChange", false, true, false, DisplayType.Amount, "PreviousChange"); + v_PreviousChange.setColumns(10, 25); + cInitial.add(v_PreviousChange, gbc0); + v_PreviousChange.setValue(Env.ZERO); + // + gbc0.gridx = 0; + gbc0.gridy = 1; + l_change = new CLabel("Initial Change"); + cInitial.add (l_change, gbc0); + + gbc0.gridx = 1; + v_change = new VNumber("Change", false, false, true, DisplayType.Amount, "Change"); + v_change.setColumns(10, 25); + cInitial.add(v_change, gbc0); + v_change.setValue(Env.ZERO); + + gbc0.gridy = 2; + gbc0.gridx = 0; + gbc0.gridwidth = 2; + //gbc0.fill = GridBagConstraints.HORIZONTAL; + f_change = createButtonAction("InitialChange", null); + f_change.setText("Save Change"); + f_change.setActionCommand("saveChange"); + cInitial.add (f_change, gbc0); + f_change.setPreferredSize(new Dimension(160,35)); + f_change.setMaximumSize(new Dimension(160,35)); + f_change.setMinimumSize(new Dimension(160,35)); + + cInitial.setMaximumSize(new Dimension(400,400)); + cInitial.setMinimumSize(new Dimension(400,400)); + cInitial.setPreferredSize(new Dimension(400,400)); + + + //****************************** Panel for cash scrutiniy ************************ + gbc.gridx = 1; + gbc.anchor = GridBagConstraints.WEST; + gbc.gridy = 0; + gbc.gridheight = 5; + + // gbc.weightx = .7; + + cScrutiny = new CPanel(new GridBagLayout()); + cScrutiny.setBorder(new TitledBorder("Cash Scrutiny")); + cScrutiny.setVisible(false); + panel.add (cScrutiny, gbc); + GridBagConstraints gbc1 = new GridBagConstraints(); + gbc1.insets = INSETS2; + gbc1.anchor = GridBagConstraints.CENTER; + + // + gbc1.gridx = 0; + gbc1.gridy = 0; + l_previousBalance = new CLabel("Previous Balance"); + cScrutiny.add (l_previousBalance, gbc1); + + gbc1.gridx = 1; + v_previousBalance = new VNumber("PreviousBalance", false, true, false, DisplayType.Amount, "PreviousBalance"); + v_previousBalance.setColumns(10, 25); + cScrutiny.add(v_previousBalance, gbc1); + v_previousBalance.setValue(Env.ZERO); + + // + gbc1.gridx = 0; + gbc1.gridy = 1; + l_ActualBalance = new CLabel("Actual Balance"); + cScrutiny.add (l_ActualBalance, gbc1); + + gbc1.gridx = 1; + v_ActualBalance = new VNumber("ActualBalance", false, false, true, DisplayType.Amount, "ActualBalance"); + v_ActualBalance.setColumns(10, 25); + v_ActualBalance.addActionListener(this); + v_ActualBalance.addInputMethodListener(this); + cScrutiny.add(v_ActualBalance, gbc1); + v_ActualBalance.setValue(Env.ZERO); + + // + gbc1.gridx = 0; + gbc1.gridy = 2; + l_difference = new CLabel("Difference"); + cScrutiny.add (l_difference, gbc1); + + gbc1.gridx = 1; + v_difference = new VNumber("Difference", false, true, false, DisplayType.Amount, "Difference"); + v_difference.setColumns(10, 25); + cScrutiny.add(v_difference, gbc1); + v_difference.setValue(Env.ZERO); + + // + gbc1.gridx = 0; + gbc1.gridy = 4; + gbc1.gridwidth = 2; + gbc1.fill = GridBagConstraints.HORIZONTAL; + f_calculateDifference = createButtonAction("InitialChange", null); + f_calculateDifference.setText("Annotate Difference"); + f_calculateDifference.setActionCommand("AnnotateDiference"); + cScrutiny.add (f_calculateDifference, gbc1); + + cScrutiny.setMaximumSize(new Dimension(400,400)); + cScrutiny.setMinimumSize(new Dimension(400,400)); + cScrutiny.setPreferredSize(new Dimension(400,400)); + } // init + + + /** + * Get GridBagConstraints + * @return constraints + */ + protected GridBagConstraints getGridBagConstraints () + { + GridBagConstraints gbc = super.getGridBagConstraints(); + gbc.gridx = 0; + gbc.gridy = GridBagConstraints.RELATIVE; + gbc.gridwidth = 2; // GridBagConstraints.REMAINDER; + gbc.fill = GridBagConstraints.BOTH; + gbc.weightx = 0.5; + gbc.weighty = 0.5; + return gbc; + } // getGridBagConstraints + + /** + * Dispose + */ + public void dispose() + { + removeAll(); + panel = null; + centerScroll = null; + confirm = null; + } // dispose + + /** + * Set Visible + * @param aFlag visible + */ + public void setVisible (boolean aFlag) + { + super.setVisible (aFlag); + } // setVisible + + /** + * Action Listener + * @param e event + */ + public void actionPerformed (ActionEvent e) + { + String action = e.getActionCommand(); + if (action == null || action.length() == 0) + return; + log.info("PosCashSubFunctions - actionPerformed: " + action); + + // to display panel with initial changenicial + if (action.equals("displayInitialChange")) + { + cmd_displayInitialChange(); + } + // to display panel with cash closing + else if (action.equals("CashClosing")) + { + Timestamp today = TimeUtil.getDay(System.currentTimeMillis()); + + MCash cash = MCash.get(p_pos.getCtx(), /*p_pos.getAD_Org_ID(),*/ p_pos.getC_CashBook_ID(), today, null); + + MQuery query = new MQuery(MCash.Table_Name); + query.addRestriction("C_Cash_ID", MQuery.EQUAL, cash.getC_Cash_ID()); + //TODO + //AEnv.openWindow(MCash.Table_ID, query, false); + } + // to open window with inputs and outputs of cash + else if (action.equals("InputsOutputs")) + { + Timestamp today = TimeUtil.getDay(System.currentTimeMillis()); + + MCash cash = MCash.get(p_pos.getCtx(), /*p_pos.getAD_Org_ID(),*/ p_pos.getC_CashBook_ID(), today, null); + + //TODO: new method added by openxpertya + //AEnv.detailedZoom(MCash.Table_ID, cash.getC_Cash_ID(), false); + } + else if (action.equals("Tickets")) + { + MQuery query = new MQuery(MOrder.Table_Name); + query.addRestriction("C_DocTypeTarget_ID", MQuery.EQUAL, p_pos.getC_DocType_ID()); + //TODO: openxpertya added ad_window_id to c_pos + //AEnv.openWindow(p_pos.getAD_Window_ID(), query, true); + } + // Cash (Payment) + else if (action.equals("displayCashScrutiny")) + { + cmd_displayCashScrutiny(); + } + else if (action.equals("End")) + { + p_posPanel.closeQuery(p_posPanel.f_cashfunctions); + } + else if (action.equals("saveChange")) + { + cmd_saveChange(); + } + else if (action.equals("AnnotateDifference")) + { + cmd_calculateDifference(); + cmd_annotateDifference(); + } + else if (e.getSource() == v_ActualBalance) + cmd_calculateDifference(); + + + } // actionPerformed + + /** + * Desplegar panel de Cambio Inicial + * + * @author Comunidad de Desarrollo OpenXpertya + * *Basado en Codigo Original Modificado, Revisado y Optimizado de: + * *Copyright © ConSerTi + */ + private void cmd_displayInitialChange() + { + cScrutiny.setVisible(false); + c.setVisible(false); + cInitial.setVisible(true); + + Timestamp today = TimeUtil.getDay(System.currentTimeMillis()); + + MCash cash = MCash.get(p_pos.getCtx(), /*p_pos.getAD_Org_ID(),*/ p_pos.getC_CashBook_ID(), today, null); + + if (cash != null) + { + v_PreviousChange.setValue(cash.getEndingBalance()); + v_change.setValue(cash.getEndingBalance()); + } + else + log.severe("No Cash"); + } + + /** + * Desplegar panel de Scrutiny de caja + * + * @author Comunidad de Desarrollo OpenXpertya + * *Basado en Codigo Original Modificado, Revisado y Optimizado de: + * *Copyright © ConSerTi + */ + private void cmd_displayCashScrutiny() + { + cInitial.setVisible(false); + c.setVisible(false); + cScrutiny.setVisible(true); + + // calculate total until the moment and shows it in scrutiny panel + Timestamp today = TimeUtil.getDay(System.currentTimeMillis()); + + MCash cash = MCash.get(p_pos.getCtx(), /*p_pos.getAD_Org_ID(),*/ p_pos.getC_CashBook_ID(), today, null); + + v_previousBalance.setValue(cash.getEndingBalance()); + } + + /** + * Save the initial change of the cash + * + * @author Comunidad de Desarrollo OpenXpertya + * *Basado en Codigo Original Modificado, Revisado y Optimizado de: + * *Copyright © ConSerTi + */ + private void cmd_saveChange() + { + MCashBook cashBook = new MCashBook(p_ctx, p_pos.getC_CashBook_ID(), null); + Timestamp today = TimeUtil.getDay(System.currentTimeMillis()); + + MCash cash = MCash.get(p_ctx, /*p_pos.getAD_Org_ID(),*/ p_pos.getC_CashBook_ID(), today, null); + + BigDecimal initialChange = (BigDecimal)v_change.getValue(); + + if (cash != null && cash.get_ID() != 0 && initialChange.compareTo(cash.getEndingBalance()) != 0) + { + MCashLine cl = new MCashLine (cash); + cl.setCashType(MCashLine.CASHTYPE_Difference); + cl.setAmount(initialChange.subtract(cash.getEndingBalance())); + cl.setDescription("Initial Change Before: " + cash.getEndingBalance() + " Now: " + initialChange); + cl.save(); + } + v_PreviousChange.setValue(initialChange); + } + + /** + * Calculate difference between previous balance and actual + * for cash scrutiny + * + * @author Comunidad de Desarrollo OpenXpertya + * *Basado en Codigo Original Modificado, Revisado y Optimizado de: + * *Copyright © ConSerTi + */ + private void cmd_calculateDifference() + { + // calculate difference between scrutiny of previous and actual balance + BigDecimal previousValue, actualValue; + + Timestamp today = TimeUtil.getDay(System.currentTimeMillis()); + MCash cash = MCash.get(p_pos.getCtx(), /*p_pos.getAD_Org_ID(),*/ p_pos.getC_CashBook_ID(), today, null); + v_previousBalance.setValue(cash.getEndingBalance()); + previousValue = cash.getEndingBalance(); + + actualValue = (BigDecimal)v_ActualBalance.getValue(); + + v_difference.setValue(actualValue.subtract(previousValue)); + } + + /** + * Annotate the difference between previous balance and actual + * from cash scrutiny in the cash book + * + * @author Comunidad de Desarrollo OpenXpertya + * *Basado en Codigo Original Modificado, Revisado y Optimizado de: + * *Copyright © ConSerTi + */ + private void cmd_annotateDifference() + { + // calculate difference from scrutiny between previous and actual balance + BigDecimal previousValue, actualValue, difference; + previousValue = (BigDecimal)v_previousBalance.getValue(); + actualValue = (BigDecimal)v_ActualBalance.getValue(); + + difference = actualValue.subtract(previousValue); + + MCashBook cashBook = new MCashBook(p_ctx, p_pos.getC_CashBook_ID(), null); + Timestamp today = TimeUtil.getDay(System.currentTimeMillis()); + + MCash cash = MCash.get(p_ctx, /*cashBook.getAD_Org_ID(),*/ cashBook.getC_CashBook_ID(), today, null); + + if (cash != null && cash.get_ID() != 0 && difference.compareTo(cash.getStatementDifference()) != 0) + { + MCashLine cl = new MCashLine (cash); + cl.setCashType(MCashLine.CASHTYPE_Difference); + cl.setAmount(difference); + cl.setDescription(Msg.translate(p_pos.getCtx(), "Cash Scrutiny -> Before: ") + previousValue + " Now: " + actualValue); + cl.save(); + } + cash = MCash.get(p_pos.getCtx(), /*p_pos.getAD_Org_ID(),*/ p_pos.getC_CashBook_ID(), today, null); + v_previousBalance.setValue(cash.getEndingBalance()); + v_ActualBalance.setValue(Env.ZERO); + v_difference.setValue(Env.ZERO); + } + + + /** + * calculate difference in cash scrutiny every time the cursor moves + */ + public void caretPositionChanged(InputMethodEvent event) + { + cmd_calculateDifference(); + } + + + /** + * calculate difference between cash scrutiniy each time the actual balance text changes + */ + public void inputMethodTextChanged(InputMethodEvent event) + { + cmd_calculateDifference(); + } +} // CashSubFunctions diff --git a/client/src/org/compiere/pos/PosKeyboardFocusManager.java b/client/src/org/compiere/pos/PosKeyboardFocusManager.java index 55a7cf8e7e..99705ca6c6 100644 --- a/client/src/org/compiere/pos/PosKeyboardFocusManager.java +++ b/client/src/org/compiere/pos/PosKeyboardFocusManager.java @@ -1,6 +1,6 @@ /****************************************************************************** * Product: Adempiere ERP & CRM Smart Business Solution * - * Copyright (C) 1999-2006 ComPiere, Inc. All Rights Reserved. * + * 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 * @@ -10,120 +10,117 @@ * 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.compiere.pos; +import java.awt.*; import java.awt.event.*; import java.util.*; -import org.compiere.apps.*; import org.compiere.util.*; - /** - * POS Keyboard Focus Manager - * - * @author Jorg Janke - * @version $Id: PosKeyboardFocusManager.java,v 1.2 2006/07/30 00:51:26 jjanke Exp $ + * POS Keyboard Focus Manager + * + * @author Comunidad de Desarrollo OpenXpertya + * *Basado en Codigo Original Modificado, Revisado y Optimizado de: + * *Copyright © Jorg Janke + * @version $Id: PosKeyboardFocusManager.java,v 1.2 2004/07/11 19:50:12 jjanke + * Exp $ */ -public class PosKeyboardFocusManager extends AKeyboardFocusManager - implements ActionListener -{ - /** - * PosKeyboardFocusManager - */ - public PosKeyboardFocusManager () - { - super (); - } // PosKeyboardFocusManager +public class PosKeyboardFocusManager extends DefaultKeyboardFocusManager + implements ActionListener { - /** FirstIn First Out List */ + /** + * PosKeyboardFocusManager + */ + public PosKeyboardFocusManager() { + super(); + } // PosKeyboardFocusManager + + /** FirstIn First Out List */ private LinkedList m_fifo = new LinkedList(); - /** Last Key Type */ - private long m_lastWhen = 0; - /** Timer */ - private javax.swing.Timer m_timer = null; + + /** Last Key Type */ + private long m_lastWhen = 0; + + /** Timer */ + private javax.swing.Timer m_timer = null; /** Logger */ private static CLogger log = CLogger.getCLogger(PosKeyboardFocusManager.class); - + /** - * Dispose + * Dispose */ - public void dispose() - { + public void dispose() { if (m_timer != null) m_timer.stop(); m_timer = null; if (m_fifo != null) m_fifo.clear(); m_fifo = null; - } // dispose + } // dispose - /** - * Start Timer + * Start Timer */ - public void start() - { + public void start() { // Unqueue time - 200 ms int delay = 200; - log.fine("" + delay); + log.fine("PosKeyboardFocusManager.start - " + delay); if (m_timer == null) - m_timer = new javax.swing.Timer (delay, this); + m_timer = new javax.swing.Timer(delay, this); if (!m_timer.isRunning()) m_timer.start(); - } // start - + } // start + /** - * Stop Timer + * Stop Timer */ - public void stop() - { - log.fine("" + m_timer); + public void stop() { + log.fine("PosKeyboardFocusManager.stop - " + m_timer); + if (m_timer != null) m_timer.stop(); - } // stop - - - /************************************************************************** - * Dispatch Key Event - queue - * @param event event - * @return true + } // stop + + /*************************************************************************** + * Dispatch Key Event - queue + * + * @param eevent + * event + * @return true */ - public boolean dispatchKeyEvent (KeyEvent event) - { - if (event.getID()==KeyEvent.KEY_PRESSED) - { + public boolean dispatchKeyEvent(KeyEvent event) { + if (event.getID() == KeyEvent.KEY_PRESSED) { // Keyboard Repeat: 485 - then 31 // log.fine( "PosKeyboardFocusManager.dispatchKeyEvent - " - // + event.getWhen() + " - " + (event.getWhen() - m_lastWhen)); + // - " + // + event.getWhen() + " - " + (event.getWhen() - m_lastWhen)); m_lastWhen = event.getWhen(); } if (m_timer == null) - super.dispatchKeyEvent (event); + super.dispatchKeyEvent(event); else m_fifo.add(event); return true; - } // displatchEvent - - + } // displatchEvent + /** - * Action Performed - unqueue - * @param e event + * Action Performed - unqueue + * + * @param e + * event */ - public void actionPerformed (ActionEvent e) - { + public void actionPerformed(ActionEvent e) { if (m_timer == null) return; // log.fine( "actionPerformed - " + m_fifo.size()); - while (m_fifo.size() > 0) - { - KeyEvent event = (KeyEvent)m_fifo.removeFirst(); - super.dispatchKeyEvent (event); + while (m_fifo.size() > 0) { + KeyEvent event = (KeyEvent) m_fifo.removeFirst(); + super.dispatchKeyEvent(event); } - } // actionPerformed - -} // PosKeyboardFocusManager + } // actionPerformed + +} // PosKeyboardFocusManager diff --git a/client/src/org/compiere/pos/PosPanel.java b/client/src/org/compiere/pos/PosPanel.java index 01e872bbac..ce0b0ef0ab 100644 --- a/client/src/org/compiere/pos/PosPanel.java +++ b/client/src/org/compiere/pos/PosPanel.java @@ -1,6 +1,6 @@ /****************************************************************************** * Product: Adempiere ERP & CRM Smart Business Solution * - * Copyright (C) 1999-2006 ComPiere, Inc. All Rights Reserved. * + * 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 * @@ -10,10 +10,8 @@ * 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.compiere.pos; import java.awt.*; @@ -22,18 +20,20 @@ import java.util.*; import javax.swing.*; +import org.compiere.swing.*; import org.compiere.apps.*; import org.compiere.apps.form.*; import org.compiere.model.*; -import org.compiere.swing.*; import java.util.logging.*; import org.compiere.util.*; /** * Point of Sales Main Window. * - * @author Jorg Janke - * @version $Id: PosPanel.java,v 1.2 2006/07/30 00:51:27 jjanke Exp $ + * @author Comunidad de Desarrollo OpenXpertya + * *Basado en Codigo Original Modificado, Revisado y Optimizado de: + * *Copyright © Jorg Janke + * @version $Id: PosPanel.java,v 1.10 2004/07/12 04:10:04 jjanke Exp $ */ public class PosPanel extends CPanel implements FormPanel @@ -44,6 +44,7 @@ public class PosPanel extends CPanel public PosPanel() { super (new GridBagLayout()); + originalKeyboardFocusManager = KeyboardFocusManager.getCurrentKeyboardFocusManager(); m_focusMgr = new PosKeyboardFocusManager(); KeyboardFocusManager.setCurrentKeyboardFocusManager(m_focusMgr); } // PosPanel @@ -80,17 +81,22 @@ public class PosPanel extends CPanel /** Checkout */ protected SubCheckout f_checkout = null; /** Basic Keys */ - protected SubBasicKeys f_basicKeys = null; +// protected SubBasicKeys f_basicKeys = null; /** Product Query Window */ protected QueryProduct f_queryProduct = null; /** BPartner Query Window */ protected QueryBPartner f_queryBPartner = null; + /** Ticket Query Window */ + protected QueryTicket f_queryTicket = null; + protected CashSubFunctions f_cashfunctions; // Today's (login) date */ private Timestamp m_today = Env.getContextAsDate(m_ctx, "#Date"); + private KeyboardFocusManager originalKeyboardFocusManager; + /** * Initialize Panel * @param WindowNo window @@ -98,6 +104,7 @@ public class PosPanel extends CPanel */ public void init (int WindowNo, FormFrame frame) { + frame.setMaximize(true); m_SalesRep_ID = Env.getAD_User_ID(m_ctx); log.info("init - SalesRep_ID=" + m_SalesRep_ID); m_WindowNo = WindowNo; @@ -131,6 +138,7 @@ public class PosPanel extends CPanel if (m_focusMgr != null) m_focusMgr.stop(); m_focusMgr = null; + KeyboardFocusManager.setCurrentKeyboardFocusManager(originalKeyboardFocusManager); // if (f_bpartner != null) f_bpartner.dispose(); @@ -139,7 +147,10 @@ public class PosPanel extends CPanel f_salesRep.dispose(); f_salesRep = null; if (f_curLine != null) + { + f_curLine.deleteOrder(); f_curLine.dispose(); + } f_curLine = null; if (f_product != null) f_product.dispose(); @@ -153,17 +164,23 @@ public class PosPanel extends CPanel if (f_checkout != null) f_checkout.dispose(); f_checkout = null; - if (f_basicKeys != null) - f_basicKeys.dispose(); +/* if (f_basicKeys != null) + f_basicKeys.dispose(); removed by ConSerTi upon not appreciating its functionality f_basicKeys = null; - // +*/ // if (f_queryProduct != null) f_queryProduct.dispose(); f_queryProduct = null; if (f_queryBPartner != null) f_queryBPartner.dispose(); f_queryBPartner = null; + if (f_queryTicket != null) + f_queryTicket.dispose(); + f_queryTicket = null; // + if (f_cashfunctions != null) + f_cashfunctions.dispose(); + f_cashfunctions = null; if (m_frame != null) m_frame.dispose(); m_frame = null; @@ -203,9 +220,9 @@ public class PosPanel extends CPanel f_checkout = new SubCheckout (this); add (f_checkout, f_checkout.getGridBagConstraints()); // - f_basicKeys = new SubBasicKeys (this); - add (f_basicKeys, f_basicKeys.getGridBagConstraints()); - +/* f_basicKeys = new SubBasicKeys (this); + add (f_basicKeys, f_basicKeys.getGridBagConstraints()); removed by ConSerTi upon not appreciating its functionality +*/ // -- Query f_queryProduct = new QueryProduct (this); add (f_queryProduct, f_queryProduct.getGridBagConstraints()); @@ -213,6 +230,12 @@ public class PosPanel extends CPanel f_queryBPartner = new QueryBPartner (this); add (f_queryBPartner, f_queryBPartner.getGridBagConstraints()); // + f_queryTicket = new QueryTicket(this); + add (f_queryTicket, f_queryTicket.getGridBagConstraints()); + // + f_cashfunctions = new CashSubFunctions(this); + add (f_cashfunctions, f_cashfunctions.getGridBagConstraints()); + newOrder(); return true; } // dynInit @@ -316,11 +339,19 @@ public class PosPanel extends CPanel */ public void openQuery (CPanel panel) { + if (panel.equals(f_cashfunctions)) + { + f_bpartner.setVisible(false); + f_salesRep.setVisible(false); + f_curLine.setVisible(false); + f_product.setVisible(false); + } f_checkout.setVisible(false); - f_basicKeys.setVisible(false); +// f_basicKeys.setVisible(false); removed by ConSerTi upon not appreciating its functionality f_lines.setVisible(false); f_functionKeys.setVisible(false); panel.setVisible(true); + } // closeQuery /** @@ -330,10 +361,14 @@ public class PosPanel extends CPanel public void closeQuery (CPanel panel) { panel.setVisible(false); - f_checkout.setVisible(true); - f_basicKeys.setVisible(true); + f_bpartner.setVisible(true); + f_salesRep.setVisible(true); + f_curLine.setVisible(true); + f_product.setVisible(true); +// f_basicKeys.setVisible(true); removed by ConSerTi upon not appreciating its functionality f_lines.setVisible(true); f_functionKeys.setVisible(true); + f_checkout.setVisible(true); } // closeQuery /************************************************************************** @@ -347,14 +382,44 @@ public class PosPanel extends CPanel /** * New Order + * */ public void newOrder() { log.info( "PosPabel.newOrder"); f_bpartner.setC_BPartner_ID(0); + f_curLine.newOrder(); f_curLine.newLine(); f_product.f_name.requestFocus(); + updateInfo(); } // newOrder + /** + * Get the number of the window for the function calls that it needs + * + * @return the window number + */ + public int getWindowNo() + { + return m_WindowNo; + } + + /** + * Get the properties for the process calls that it needs + * + * @return las Propiedades m_ctx + */ + public Properties getPropiedades() + { + return m_ctx; + } + + public void updateInfo() + { + if (f_lines != null) + f_lines.updateTable(f_curLine.getOrder()); + if (f_checkout != null) + f_checkout.displayReturn(); + } } // PosPanel diff --git a/client/src/org/compiere/pos/PosSubPanel.java b/client/src/org/compiere/pos/PosSubPanel.java index e6ff442389..6090ea39c3 100644 --- a/client/src/org/compiere/pos/PosSubPanel.java +++ b/client/src/org/compiere/pos/PosSubPanel.java @@ -1,6 +1,6 @@ /****************************************************************************** * Product: Adempiere ERP & CRM Smart Business Solution * - * Copyright (C) 1999-2006 ComPiere, Inc. All Rights Reserved. * + * 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 * @@ -10,27 +10,29 @@ * 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.compiere.pos; import java.awt.*; import java.awt.event.*; import java.util.*; + import javax.swing.*; + +import org.compiere.swing.*; import org.compiere.apps.*; import org.compiere.model.*; -import org.compiere.swing.*; import org.compiere.util.*; /** * POS Sub Panel Base Class. * The Panel knows where to position itself in the POS Panel * - * @author Jorg Janke - * @version $Id: PosSubPanel.java,v 1.2 2006/07/30 00:51:27 jjanke Exp $ + * @author Comunidad de Desarrollo OpenXpertya + * *Basado en Codigo Original Modificado, Revisado y Optimizado de: + * *Copyright © Jorg Janke + * @version $Id: PosSubPanel.java,v 1.3 2004/07/12 04:10:04 jjanke Exp $ */ public abstract class PosSubPanel extends CPanel implements ActionListener diff --git a/client/src/org/compiere/pos/QueryBPartner.java b/client/src/org/compiere/pos/QueryBPartner.java index c426b43cd6..d4e047db55 100644 --- a/client/src/org/compiere/pos/QueryBPartner.java +++ b/client/src/org/compiere/pos/QueryBPartner.java @@ -1,6 +1,6 @@ /****************************************************************************** * Product: Adempiere ERP & CRM Smart Business Solution * - * Copyright (C) 1999-2006 ComPiere, Inc. All Rights Reserved. * + * 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 * @@ -10,28 +10,30 @@ * 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.compiere.pos; import java.awt.*; import java.awt.event.*; + import javax.swing.*; import javax.swing.border.*; import javax.swing.event.*; + +import org.compiere.swing.*; import org.compiere.apps.*; import org.compiere.minigrid.*; import org.compiere.model.*; -import org.compiere.swing.*; import org.compiere.util.*; /** * POS Query BPartner * - * @author Jorg Janke - * @version $Id: QueryBPartner.java,v 1.2 2006/07/30 00:51:26 jjanke Exp $ + * @author Comunidad de Desarrollo OpenXpertya + * *Basado en Codigo Original Modificado, Revisado y Optimizado de: + * *Copyright © Jorg Janke + * @version $Id: QueryBPartner.java,v 1.1 2004/07/12 04:10:04 jjanke Exp $ */ public class QueryBPartner extends PosSubPanel implements ActionListener, MouseListener, ListSelectionListener @@ -72,7 +74,8 @@ public class QueryBPartner extends PosSubPanel 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(), "Contact"), "Contact", String.class), + //TODO: contact column have been remove from rv_bpartner + //new ColumnInfo(Msg.translate(Env.getCtx(), "Contact"), "Contact", 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), @@ -238,7 +241,7 @@ public class QueryBPartner extends PosSubPanel { setResults(MBPartnerInfo.find (p_ctx, f_value.getText(), f_name.getText(), - f_contact.getText(), f_email.getText(), + null, f_email.getText(), f_phone.getText(), f_city.getText())); return; } diff --git a/client/src/org/compiere/pos/QueryProduct.java b/client/src/org/compiere/pos/QueryProduct.java index 874b16e8a3..edae3d962c 100644 --- a/client/src/org/compiere/pos/QueryProduct.java +++ b/client/src/org/compiere/pos/QueryProduct.java @@ -1,6 +1,6 @@ /****************************************************************************** * Product: Adempiere ERP & CRM Smart Business Solution * - * Copyright (C) 1999-2006 ComPiere, Inc. All Rights Reserved. * + * 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 * @@ -10,29 +10,31 @@ * 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.compiere.pos; import java.awt.*; import java.awt.event.*; import java.math.*; + import javax.swing.*; import javax.swing.border.*; import javax.swing.event.*; + +import org.compiere.swing.*; import org.compiere.apps.*; import org.compiere.minigrid.*; import org.compiere.model.*; -import org.compiere.swing.*; import org.compiere.util.*; /** * POS Query Product * - * @author Jorg Janke - * @version $Id: QueryProduct.java,v 1.2 2006/07/30 00:51:27 jjanke Exp $ + * @author Comunidad de Desarrollo OpenXpertya + * *Basado en Codigo Original Modificado, Revisado y Optimizado de: + * *Copyright © Jorg Janke + * @version $Id: QueryProduct.java,v 1.1 2004/07/12 04:10:04 jjanke Exp $ */ public class QueryProduct extends PosSubPanel implements ActionListener, MouseListener, ListSelectionListener diff --git a/client/src/org/compiere/pos/QueryTicket.java b/client/src/org/compiere/pos/QueryTicket.java new file mode 100644 index 0000000000..00b41a9e02 --- /dev/null +++ b/client/src/org/compiere/pos/QueryTicket.java @@ -0,0 +1,356 @@ +/****************************************************************************** + * 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.*; +import java.awt.event.*; +import java.math.*; +import java.sql.*; +import java.util.*; + +import javax.swing.*; +import javax.swing.border.*; +import javax.swing.event.*; + +import org.compiere.swing.*; +import org.compiere.apps.*; +import org.compiere.grid.ed.*; +import org.compiere.minigrid.*; +import org.compiere.util.*; + +/** + * 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 PosSubPanel + implements ActionListener, MouseListener, ListSelectionListener +{ + /** + * Constructor + */ + public QueryTicket (PosPanel posPanel) + { + super(posPanel); + } // PosQueryProduct + + /** The Table */ + private MiniTable m_table; + + private CPanel northPanel; + private CScrollPane centerScroll; + private ConfirmPanel confirm; + + private CTextField f_c_order_id; + private CTextField f_documentno; + private VDate f_date; + + private CButton f_up; + private CButton f_down; + + private int m_c_order_id; + + /** Logger */ + private static CLogger log = CLogger.getCLogger(QueryProduct.class); + + /** 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) + }; + + /** + * Set up Panel + */ + protected void init() + { + setLayout(new BorderLayout(5,5)); + setVisible(false); + // North + northPanel = new CPanel(new GridBagLayout()); + add (northPanel, BorderLayout.NORTH); + northPanel.setBorder(new TitledBorder(Msg.getMsg(p_ctx, "Query"))); + GridBagConstraints gbc = new GridBagConstraints(); + gbc.insets = PosSubPanel.INSETS2; + // + gbc.gridy = 0; + gbc.gridx = GridBagConstraints.RELATIVE; + CLabel lorder_id = new CLabel(Msg.translate(p_ctx, "C_Order_ID")); + gbc.anchor = GridBagConstraints.EAST; + northPanel.add (lorder_id, gbc); + f_c_order_id = new CTextField(20); + lorder_id.setLabelFor(f_c_order_id); + gbc.anchor = GridBagConstraints.WEST; + northPanel.add(f_c_order_id, gbc); + f_c_order_id.addActionListener(this); + // + CLabel ldoc = new CLabel(Msg.translate(p_ctx, "DocumentNo")); + gbc.anchor = GridBagConstraints.EAST; + northPanel.add (ldoc, gbc); + f_documentno = new CTextField(15); + ldoc.setLabelFor(f_documentno); + gbc.anchor = GridBagConstraints.WEST; + northPanel.add(f_documentno, gbc); + f_documentno.addActionListener(this); + // + gbc.gridy = 1; + CLabel ldate = new CLabel(Msg.translate(p_ctx, "DateOrdered")); + gbc.anchor = GridBagConstraints.EAST; + northPanel.add (ldate, gbc); + f_date = new VDate(); + f_date.setValue(Env.getContextAsDate(Env.getCtx(), "#Date")); + ldate.setLabelFor(f_date); + gbc.anchor = GridBagConstraints.WEST; + northPanel.add(f_date, gbc); + f_date.addActionListener(this); + // + gbc.gridy = 0; + gbc.gridheight = 2; + gbc.anchor = GridBagConstraints.EAST; + gbc.weightx = .1; + f_up = createButtonAction("Previous", KeyStroke.getKeyStroke(KeyEvent.VK_UP, 0)); + northPanel.add(f_up, gbc); + gbc.weightx = 0; + f_down = createButtonAction("Next", KeyStroke.getKeyStroke(KeyEvent.VK_DOWN, 0)); + northPanel.add(f_down, gbc); + + // Confirm + confirm = new ConfirmPanel (true, true, true, false, false, false, false); + add (confirm, BorderLayout.SOUTH); + confirm.addActionListener(this); + + // Center + m_table = new MiniTable(); + + String sql = m_table.prepareTable (s_layout, "C_Order", + "C_DocTypeTarget_ID" + p_pos.getC_DocType_ID() + , false, "C_Order") + + " ORDER BY Margin, QtyAvailable"; + m_table.setRowSelectionAllowed(true); + m_table.setColumnSelectionAllowed(false); + m_table.setMultiSelection(false); + m_table.addMouseListener(this); + m_table.getSelectionModel().addListSelectionListener(this); + enableButtons(); + centerScroll = new CScrollPane(m_table); + add (centerScroll, BorderLayout.CENTER); + } // init + + + /** + * Get GridBagConstraints + * @return constraints + */ + protected GridBagConstraints getGridBagConstraints () + { + GridBagConstraints gbc = super.getGridBagConstraints(); + gbc.gridx = 0; + gbc.gridy = GridBagConstraints.RELATIVE; + gbc.gridwidth = 2; // GridBagConstraints.REMAINDER; + gbc.fill = GridBagConstraints.BOTH; + gbc.weightx = 0.1; + gbc.weighty = 0.5; + return gbc; + } // getGridBagConstraints + + /** + * Dispose + */ + public void dispose() + { + removeAll(); + northPanel = null; + centerScroll = null; + confirm = null; + m_table = null; + } // dispose + + /** + * Set Visible + * @param aFlag visible + */ + public void setVisible (boolean aFlag) + { + super.setVisible (aFlag); + if (aFlag) + f_c_order_id.requestFocus(); + } // setVisible + + + /** + * Action Listener + * @param e event + */ + public void actionPerformed (ActionEvent e) + { + log.info("PosQueryProduct.actionPerformed - " + e.getActionCommand()); + if ("Refresh".equals(e.getActionCommand()) + || e.getSource() == f_c_order_id || e.getSource() == f_documentno + || e.getSource() == f_date) + { + setResults(p_ctx, f_c_order_id.getText(), 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; + } + // Exit + close(); + } // actionPerformed + + + /** + * + */ + public void reset() + { + f_c_order_id.setText(null); + f_documentno.setText(null); + f_date.setValue(Env.getContextAsDate(Env.getCtx(), "#Date")); + setResults(p_ctx, f_c_order_id.getText(), f_documentno.getText(), f_date.getTimestamp()); + } + + + /** + * Set/display Results + * @param results results + */ + public void setResults (Properties ctx, String id, String doc, Timestamp date) + { + String sql = ""; + try + { + sql = "SELECT o.C_Order_ID, o.DocumentNo, o.TotalLines, o.GrandTotal FROM C_Order o WHERE o.C_DocTypeTarget_ID = " + p_pos.getC_DocType_ID(); + if (id != null && !id.equalsIgnoreCase("")) + sql += " AND o.C_Order_ID = " + id; + if (doc != null && !doc.equalsIgnoreCase("")) + sql += " AND o.DocumentNo = '" + doc + "'"; + sql += " AND o.DateOrdered = ?"; + + PreparedStatement pstm = DB.prepareStatement(sql, null); + pstm.setTimestamp(1, date); + ResultSet rs = pstm.executeQuery(); + m_table.loadTable(rs); + enableButtons(); + } + catch(Exception e) + { + log.severe("QueryTicket.setResults: " + e + " -> " + sql); + } + } // setResults + + /** + * Table selection changed + * @param e event + */ + public void valueChanged (ListSelectionEvent e) + { + if (e.getValueIsAdjusting()) + return; + enableButtons(); + } // valueChanged + + /** + * Enable/Set Buttons and set ID + */ + private 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(); + } + } + confirm.getOKButton().setEnabled(enabled); + log.info("ID=" + m_c_order_id); + } // enableButtons + + /** + * Mouse Clicked + * @param e event + */ + public void mouseClicked(MouseEvent e) + { + // Double click with selected row => exit + if (e.getClickCount() > 1 && m_table.getSelectedRow() != -1) + { + enableButtons(); + close(); + } + } // mouseClicked + + public void mouseEntered (MouseEvent e) {} + public void mouseExited (MouseEvent e) {} + public void mousePressed (MouseEvent e) {} + public void mouseReleased (MouseEvent e) {} + + /** + * Close. + * Set Values on other panels and close + */ + private void close() + { + log.info("C_Order_ID=" + m_c_order_id); + + if (m_c_order_id > 0) + { + p_posPanel.f_curLine.setOldOrder(m_c_order_id); + } + p_posPanel.closeQuery(this); + } // close + +} // PosQueryProduct diff --git a/client/src/org/compiere/pos/SubBPartner.java b/client/src/org/compiere/pos/SubBPartner.java index 167ee2345b..c6760a53f8 100644 --- a/client/src/org/compiere/pos/SubBPartner.java +++ b/client/src/org/compiere/pos/SubBPartner.java @@ -1,6 +1,6 @@ /****************************************************************************** * Product: Adempiere ERP & CRM Smart Business Solution * - * Copyright (C) 1999-2006 ComPiere, Inc. All Rights Reserved. * + * 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 * @@ -10,27 +10,29 @@ * 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.compiere.pos; import java.awt.*; import java.awt.event.*; import java.util.*; + import javax.swing.*; import javax.swing.border.*; -import org.compiere.model.*; + import org.compiere.swing.*; +import org.compiere.model.*; import org.compiere.util.*; /** - * POS Customer Sub Panel + * Customer Sub Panel * - * @author Jorg Janke - * @version $Id: SubBPartner.java,v 1.2 2006/07/30 00:51:26 jjanke Exp $ + * @author Comunidad de Desarrollo OpenXpertya + * *Basado en Codigo Original Modificado, Revisado y Optimizado de: + * *Copyright © Jorg Janke + * @version $Id: SubBPartner.java,v 1.1 2004/07/12 04:10:04 jjanke Exp $ */ public class SubBPartner extends PosSubPanel implements ActionListener, FocusListener @@ -165,6 +167,8 @@ public class SubBPartner extends PosSubPanel // Name else if (e.getSource() == f_name) findBPartner(); + + p_posPanel.updateInfo(); } // actionPerformed /** @@ -224,8 +228,9 @@ public class SubBPartner extends PosSubPanel String Phone = (noNumber ? null : query); String City = null; // + //TODO: contact have been remove from rv_bpartner MBPartnerInfo[] results = MBPartnerInfo.find(p_ctx, Value, Name, - Contact, EMail, Phone, City); + /*Contact, */null, EMail, Phone, City); // Set Result if (results.length == 0) @@ -276,6 +281,7 @@ public class SubBPartner extends PosSubPanel m_M_PriceList_Version_ID = 0; getM_PriceList_Version_ID(); fillCombos(); + p_posPanel.f_curLine.setBPartner(); //added by ConSerTi to update the client in the request } // setC_BPartner_ID /** diff --git a/client/src/org/compiere/pos/SubBasicKeys.java b/client/src/org/compiere/pos/SubBasicKeys.java index 0c5c283f07..dad58bc9fc 100644 --- a/client/src/org/compiere/pos/SubBasicKeys.java +++ b/client/src/org/compiere/pos/SubBasicKeys.java @@ -1,6 +1,6 @@ /****************************************************************************** * Product: Adempiere ERP & CRM Smart Business Solution * - * Copyright (C) 1999-2006 ComPiere, Inc. All Rights Reserved. * + * 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 * @@ -10,15 +10,15 @@ * 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.compiere.pos; import java.awt.*; import java.awt.event.*; + import javax.swing.border.*; + import org.compiere.swing.*; import org.compiere.util.*; @@ -26,8 +26,10 @@ import org.compiere.util.*; /** * Basic Key Sub Panel * - * @author Jorg Janke - * @version $Id: SubBasicKeys.java,v 1.2 2006/07/30 00:51:27 jjanke Exp $ + * @author Comunidad de Desarrollo OpenXpertya + * *Basado en Codigo Original Modificado, Revisado y Optimizado de: + * *Copyright © Jorg Janke + * @version $Id: SubBasicKeys.java,v 1.1 2004/07/12 04:10:04 jjanke Exp $ */ public class SubBasicKeys extends PosSubPanel implements ActionListener { diff --git a/client/src/org/compiere/pos/SubCheckout.java b/client/src/org/compiere/pos/SubCheckout.java index 590d84fbd9..6dc4f2390b 100644 --- a/client/src/org/compiere/pos/SubCheckout.java +++ b/client/src/org/compiere/pos/SubCheckout.java @@ -1,6 +1,6 @@ /****************************************************************************** * Product: Adempiere ERP & CRM Smart Business Solution * - * Copyright (C) 1999-2006 ComPiere, Inc. All Rights Reserved. * + * 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 * @@ -10,25 +10,31 @@ * 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.compiere.pos; import java.awt.*; import java.awt.event.*; -import javax.swing.border.*; -import org.compiere.grid.ed.*; +import java.io.*; +import java.math.*; +import java.util.Properties; + +import javax.swing.border.TitledBorder; + import org.compiere.swing.*; +import org.compiere.grid.ed.VNumber; +import org.compiere.model.MOrder; +import org.compiere.process.*; import org.compiere.util.*; - /** - * POS Checkout Sub Panel + * Checkout Sub Panel * - * @author Jorg Janke - * @version $Id: SubCheckout.java,v 1.2 2006/07/30 00:51:27 jjanke Exp $ + * @author Comunidad de Desarrollo OpenXpertya + * *Basado en Codigo Original Modificado, Revisado y Optimizado de: + * *Copyright © Jorg Janke + * @version $Id: SubCheckout.java,v 1.1 2004/07/12 04:10:04 jjanke Exp $ */ public class SubCheckout extends PosSubPanel implements ActionListener { @@ -46,19 +52,22 @@ public class SubCheckout extends PosSubPanel implements ActionListener private CButton f_process = null; private CButton f_print = null; - private CLabel f_lcreditCardNumber = null; + //TODO: credit card +/* private CLabel f_lcreditCardNumber = null; private CTextField f_creditCardNumber = null; private CLabel f_lcreditCardExp = null; private CTextField f_creditCardExp = null; private CLabel f_lcreditCardVV = null; private CTextField f_creditCardVV = null; - private CButton f_cashPayment = null; - - private CLabel f_lcashGiven = null; - private VNumber f_cashGiven = null; - private CLabel f_lcashReturn = null; - private VNumber f_cashReturn = null; private CButton f_creditPayment = null; +*/ + private CLabel f_lcashGiven = null; + private VNumber f_cashGiven; + private CLabel f_lcashReturn = null; + private VNumber f_cashReturn; + private CButton f_cashPayment = null; + + private CButton f_cashRegisterFunctions; /** Logger */ private static CLogger log = CLogger.getCLogger(SubCheckout.class); @@ -84,14 +93,17 @@ public class SubCheckout extends PosSubPanel implements ActionListener // f_summary = createButtonAction("Summary", null); gbc.gridy = 1; + gbc.gridheight = 1; add (f_summary, gbc); // f_process = createButtonAction("Process", null); gbc.gridy = 2; + gbc.gridheight = 1; add (f_process, gbc); // f_print = createButtonAction("Print", null); gbc.gridy = 3; + gbc.gridheight =1; add (f_print, gbc); // -- 1 -- Cash @@ -101,7 +113,7 @@ public class SubCheckout extends PosSubPanel implements ActionListener gbc.weightx = .1; CPanel cash = new CPanel(new GridBagLayout()); cash.setBorder(new TitledBorder(Msg.getMsg(Env.getCtx(), "Cash"))); - gbc.gridy = 0; + gbc.gridy = 1; add (cash, gbc); GridBagConstraints gbc0 = new GridBagConstraints(); gbc0.insets = INSETS2; @@ -114,6 +126,7 @@ public class SubCheckout extends PosSubPanel implements ActionListener f_cashGiven.setColumns(10, 25); cash.add (f_cashGiven, gbc0); f_cashGiven.setValue(Env.ZERO); + f_cashGiven.addActionListener(this); //para que actualice el cambio con el dinero entregado // f_lcashReturn = new CLabel(Msg.getMsg(Env.getCtx(),"CashReturn")); cash.add (f_lcashReturn, gbc0); @@ -122,14 +135,31 @@ public class SubCheckout extends PosSubPanel implements ActionListener f_cashReturn.setColumns(10, 25); cash.add (f_cashReturn, gbc0); f_cashReturn.setValue(Env.ZERO); - // f_cashPayment = createButtonAction("Payment", null); f_cashPayment.setActionCommand("Cash"); gbc0.anchor = GridBagConstraints.EAST; - gbc0.weightx = 0.1; - cash.add (f_cashPayment, gbc0); - + gbc0.weightx = 0.1; + cash.add (f_cashPayment, gbc0); + + gbc.gridx=1; + gbc.gridy=3; + gbc.gridheight=1; + CPanel caja = new CPanel(); + add(caja,gbc); + caja.setPreferredSize(new Dimension(30,30)); + f_cashRegisterFunctions = createButtonAction("CashRegisterFunction", null); + f_cashRegisterFunctions.setText("Cash Register\n Movements"); + f_cashRegisterFunctions.setPreferredSize(new Dimension(160,30)); + f_cashRegisterFunctions.setMaximumSize(new Dimension(160,30)); + f_cashRegisterFunctions.setMinimumSize(new Dimension(160,30)); + caja.add(f_cashRegisterFunctions); + + +//TODO: Credit card +/* Panel para la introducción de los datos de CreditCard para el pago quitada por ConSerTi al no considerar + * que sea útil de momento + // -- 1 -- Creditcard CPanel creditcard = new CPanel(new GridBagLayout()); creditcard.setBorder(new TitledBorder(Msg.translate(Env.getCtx(), "CreditCardType"))); @@ -170,6 +200,7 @@ public class SubCheckout extends PosSubPanel implements ActionListener gbc1.weightx = 0.1; creditcard.add (f_creditPayment, gbc1); + **/ //fin del comentario para quitar la parte del CreditCard } // init /** @@ -198,15 +229,208 @@ public class SubCheckout extends PosSubPanel implements ActionListener */ public void actionPerformed (ActionEvent e) { - String action = e.getActionCommand(); + String action = e.getActionCommand(); if (action == null || action.length() == 0) return; log.info( "PosSubCheckout - actionPerformed: " + action); + // Register + if (action.equals("Register")) + { + p_posPanel.f_queryTicket.reset(); + p_posPanel.openQuery(p_posPanel.f_queryTicket); + } // Summary + else + if (action.equals("Summary")) + { + //TODO: new field added by openxpertya to c_order + //p_posPanel.f_status.setStatusLine(p_posPanel.f_curLine.getOrder().getResumen()); + displayReturn(); + } + else if (action.equals("Process")) + { + if (isOrderFullyPay()) + { + printTicket(); + processOrder(); + openCashDrawer(); + } + } // Print + else if (action.equals("Print")) + { + if (isOrderFullyPay()) + { + printTicket(); + openCashDrawer(); + } + } // Cash (Payment) - // CreditCard (Payment) + else if (action.equals("Cash")) + { + displayReturn(); + openCashDrawer(); + } + else if (action.equals("CashRegisterFunction")) + { + p_posPanel.openQuery(p_posPanel.f_cashfunctions); + } + else if (e.getSource() == f_cashGiven) + displayReturn(); + +/* // CreditCard (Payment) + else if (action.equals("CreditCard")) + { + Log.print("CreditCard"); + } fin del comentario para la Credit Card*/ + + f_cashGiven.setValue(Env.ZERO); + p_posPanel.updateInfo(); } // actionPerformed + /** + * Process Order + * @author Comunidad de Desarrollo OpenXpertya + * *Basado en Codigo Original Modificado, Revisado y Optimizado de: + * *Copyright © ConSerTi + */ + public void processOrder() + { + + MOrder order = p_posPanel.f_curLine.getOrder(); + if (order != null) + if (order.getDocStatus().equals("DR")) + { + order.setDocAction(DocAction.ACTION_Complete); + order.processIt(DocAction.ACTION_Complete); + order.save(); + + order = null; + p_posPanel.newOrder(); + } + } + + /** + * Print Ticket + * @author Comunidad de Desarrollo OpenXpertya + * *Basado en Codigo Original Modificado, Revisado y Optimizado de: + * *Copyright © ConSerTi + */ + public void printTicket() + { + MOrder order = p_posPanel.f_curLine.getOrder(); + int ventana = p_posPanel.getWindowNo(); + Properties m_ctx = p_posPanel.getPropiedades(); + + if (order != null) + { + try + { + //TODO: to incorporate jpos work from Posterita + /* + if (p_pos.getAD_PrintLabel_ID() != 0) + PrintLabel.printLabelTicket(order.getC_Order_ID(), p_pos.getAD_PrintLabel_ID()); + */ + } + catch (Exception e) + { + log.severe("PrintTicket - Error Printing Ticket"); + } + } + } + + /** + * Display cash return + * Display the difference between tender amount and bill amount + * @author Comunidad de Desarrollo OpenXpertya + * *Basado en Codigo Original Modificado, Revisado y Optimizado de: + * *Copyright © ConSerTi + */ + public void displayReturn() + { + BigDecimal given = new BigDecimal(f_cashGiven.getValue().toString()); + if (p_posPanel != null && p_posPanel.f_curLine != null) + { + MOrder order = p_posPanel.f_curLine.getOrder(); + BigDecimal total = new BigDecimal(0); + if (order != null) + total = order.getGrandTotal(); + double vuelta = given.doubleValue() - total.doubleValue(); + f_cashReturn.setValue(new BigDecimal(vuelta)); + } + } + + /** + * Is order fully pay ? + * Calculates if the given money is sufficient to pay the order + * + * @author Comunidad de Desarrollo OpenXpertya + * *Basado en Codigo Original Modificado, Revisado y Optimizado de: + * *Copyright © ConSerTi + */ + public boolean isOrderFullyPay() + { + BigDecimal given = new BigDecimal(f_cashGiven.getValue().toString()); + boolean paid = false; + if (p_posPanel != null && p_posPanel.f_curLine != null) + { + MOrder order = p_posPanel.f_curLine.getOrder(); + BigDecimal total = new BigDecimal(0); + if (order != null) + total = order.getGrandTotal(); + paid = given.doubleValue() >= total.doubleValue(); + } + return paid; + } + + + /** + * Abrir caja + * Abre la caja registradora + * @author Comunidad de Desarrollo OpenXpertya + * *Basado en Codigo Original Modificado, Revisado y Optimizado de: + * *Copyright © ConSerTi + */ + public void openCashDrawer() + { + String puerto = null; + //TODO - to incorporate jpos work from Posterita + /* + try + { + String sql = "SELECT p.Port" + + " FROM AD_PrintLabel l" + + " INNER JOIN AD_LabelPrinter p ON (l.AD_LabelPrinter_ID=p.AD_LabelPrinter_ID)" + + " WHERE l.AD_PrintLabel_ID=?"; + puerto = DB.getSQLValueString(null, sql, p_pos.getAD_PrintLabel_ID()); + } + catch(Exception e) + { + log.severe("AbrirCaja - Puerto no encontrado"); + }*/ + + /* + if (puerto == null) + log.severe("Port is mandatory for cash drawner"); + + try + { + byte data[] = new byte[5]; + data[0] = 27; + data[1] = 112; + data[2] = 0; + data[3] = 50; + data[4] = 50; + FileOutputStream fos = new FileOutputStream(puerto); + BufferedOutputStream bos = new BufferedOutputStream(fos); + bos.write(data, 0, data.length); + bos.close(); + fos.close(); + } + catch(Exception e) + { + e.printStackTrace(); + }*/ + } } // PosSubCheckout diff --git a/client/src/org/compiere/pos/SubCurrentLine.java b/client/src/org/compiere/pos/SubCurrentLine.java index e36a1a43ea..a6bce897eb 100644 --- a/client/src/org/compiere/pos/SubCurrentLine.java +++ b/client/src/org/compiere/pos/SubCurrentLine.java @@ -1,6 +1,6 @@ /****************************************************************************** * Product: Adempiere ERP & CRM Smart Business Solution * - * Copyright (C) 1999-2006 ComPiere, Inc. All Rights Reserved. * + * 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 * @@ -10,143 +10,148 @@ * 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.compiere.pos; import java.awt.*; import java.awt.event.*; import java.math.*; +import java.util.logging.Level; + import javax.swing.*; import javax.swing.border.*; + +import org.compiere.swing.*; import org.compiere.grid.ed.*; import org.compiere.model.*; -import org.compiere.swing.*; -import java.util.logging.*; import org.compiere.util.*; - /** - * POS Current Line Sub Panel - * - * @author Jorg Janke - * @version $Id: SubCurrentLine.java,v 1.2 2006/07/30 00:51:27 jjanke Exp $ + * Current Line Sub Panel + * + * @author Comunidad de Desarrollo OpenXpertya + * *Basado en Codigo Original Modificado, Revisado y Optimizado de: + * *Copyright © Jorg Janke + * @version $Id: SubCurrentLine.java,v 1.3 2004/07/24 04:31:52 jjanke Exp $ */ -public class SubCurrentLine extends PosSubPanel implements ActionListener -{ +public class SubCurrentLine extends PosSubPanel implements ActionListener { /** - * Constructor - * @param posPanel POS Panel + * Constructor + * + * @param posPanel + * POS Panel */ - public SubCurrentLine (PosPanel posPanel) - { - super (posPanel); - } // PosSubCurrentLine - + public SubCurrentLine(PosPanel posPanel) { + super(posPanel); + } // PosSubCurrentLine + private CButton f_new; + private CButton f_reset; + private CButton f_plus; + private CButton f_minus; - - private CLabel f_currency; - private VNumber f_price; - private CLabel f_uom; - private VNumber f_quantity; - - private MOrder m_order = null; + + private CLabel f_currency; + + private VNumber f_price; + + private CLabel f_uom; + + private VNumber f_quantity; + + private MOrder m_order = null; /** Logger */ private static CLogger log = CLogger.getCLogger(SubCurrentLine.class); /** - * Initialize - */ - public void init() - { + * Initialize + */ + public void init() { // Title - TitledBorder border = new TitledBorder(Msg.getMsg(Env.getCtx(), "CurrentLine")); + TitledBorder border = new TitledBorder(Msg.getMsg(Env.getCtx(), + "CurrentLine")); setBorder(border); - + // Content setLayout(new GridBagLayout()); GridBagConstraints gbc = new GridBagConstraints(); gbc.insets = INSETS2; gbc.gridy = 0; // -- - f_new = createButtonAction("New", KeyStroke.getKeyStroke(KeyEvent.VK_INSERT, Event.SHIFT_MASK)); + f_new = createButtonAction("New", KeyStroke.getKeyStroke( + KeyEvent.VK_INSERT, Event.SHIFT_MASK)); gbc.gridx = 0; - add (f_new, gbc); + add(f_new, gbc); // f_reset = createButtonAction("Reset", null); gbc.gridx = GridBagConstraints.RELATIVE; - add (f_reset, gbc); + add(f_reset, gbc); // f_currency = new CLabel("---"); gbc.anchor = GridBagConstraints.EAST; gbc.weightx = .1; gbc.fill = GridBagConstraints.HORIZONTAL; - add (f_currency, gbc); + add(f_currency, gbc); // - f_price = new VNumber("PriceActual", false, false, true, DisplayType.Amount, - Msg.translate(Env.getCtx(), "PriceActual")); + f_price = new VNumber("PriceActual", false, false, true, + DisplayType.Amount, Msg.translate(Env.getCtx(), "PriceActual")); f_price.addActionListener(this); f_price.setColumns(10, 25); gbc.anchor = GridBagConstraints.WEST; gbc.weightx = 0; gbc.fill = GridBagConstraints.NONE; - add (f_price, gbc); + add(f_price, gbc); setPrice(Env.ZERO); // -- f_uom = new CLabel("--"); gbc.anchor = GridBagConstraints.EAST; gbc.weightx = .1; gbc.fill = GridBagConstraints.HORIZONTAL; - add (f_uom, gbc); + add(f_uom, gbc); // f_minus = createButtonAction("Minus", null); gbc.anchor = GridBagConstraints.WEST; gbc.weightx = 0; gbc.fill = GridBagConstraints.NONE; - add (f_minus, gbc); + add(f_minus, gbc); // - f_quantity = new VNumber("QtyOrdered", false, false, true, DisplayType.Quantity, - Msg.translate(Env.getCtx(), "QtyOrdered")); + f_quantity = new VNumber("QtyOrdered", false, false, true, + DisplayType.Quantity, Msg.translate(Env.getCtx(), "QtyOrdered")); f_quantity.addActionListener(this); f_quantity.setColumns(5, 25); - add (f_quantity, gbc); - setQty (Env.ONE); + add(f_quantity, gbc); + setQty(Env.ONE); // f_plus = createButtonAction("Plus", null); - add (f_plus, gbc); - } // init + add(f_plus, gbc); + } // init /** - * Get Panel Position + * Get Panel Position */ - public GridBagConstraints getGridBagConstraints() - { + public GridBagConstraints getGridBagConstraints() { GridBagConstraints gbc = super.getGridBagConstraints(); gbc.gridx = 0; gbc.gridy = 1; return gbc; - } // getGridBagConstraints - - /** - * Dispose - Free Resources - */ - public void dispose() - { - super.dispose(); - } // dispose + } // getGridBagConstraints - /** - * Action Listener - * @param e event + * Dispose - Free Resources */ - public void actionPerformed (ActionEvent e) - { + public void dispose() { + super.dispose(); + } // dispose + + /** + * Action Listener + * + * @param e event + */ + public void actionPerformed(ActionEvent e) { String action = e.getActionCommand(); if (action == null || action.length() == 0) return; @@ -167,97 +172,94 @@ public class SubCurrentLine extends PosSubPanel implements ActionListener f_price.setValue(f_price.getValue()); else if (e.getSource() == f_quantity) f_quantity.setValue(f_quantity.getValue()); - } // actionPerformed - - - /************************************************************************** - * Set Currency - * @param currency currency + p_posPanel.updateInfo(); + } // actionPerformed + + /*************************************************************************** + * Set Currency + * + * @param currency + * currency */ - public void setCurrency (String currency) - { + public void setCurrency(String currency) { if (currency == null) f_currency.setText("---"); else f_currency.setText(currency); - } // setCurrency + } // setCurrency /** - * Set UOM - * @param UOM UOM + * Set UOM + * + * @param UOM */ - public void setUOM (String UOM) - { + public void setUOM(String UOM) { if (UOM == null) f_uom.setText("--"); else f_uom.setText(UOM); - } // setUOM - + } // setUOM + /** - * Set Price - * @param price price + * Set Price + * + * @param price */ - public void setPrice (BigDecimal price) - { + public void setPrice(BigDecimal price) { if (price == null) price = Env.ZERO; f_price.setValue(price); - boolean rw = Env.ZERO.compareTo(price) == 0 - || p_pos.isModifyPrice(); + boolean rw = Env.ZERO.compareTo(price) == 0 || p_pos.isModifyPrice(); f_price.setReadWrite(rw); - } // setPrice + } // setPrice /** - * Get Price - * @return price + * Get Price + * + * @return price */ - public BigDecimal getPrice () - { - return (BigDecimal)f_price.getValue(); - } // getPrice + public BigDecimal getPrice() { + return (BigDecimal) f_price.getValue(); + } // getPrice /** - * Set Qty - * @param qty qty + * Set Qty + * + * @param qty */ - public void setQty (BigDecimal qty) - { - f_quantity.setValue(qty); - } // setPrice + public void setQty(BigDecimal price) { + f_quantity.setValue(price); + } // setPrice /** - * Get Qty - * @return qty + * Get Qty + * + * @return qty */ - public BigDecimal getQty () - { - return (BigDecimal)f_quantity.getValue(); - } // getPrice + public BigDecimal getQty() { + return (BigDecimal) f_quantity.getValue(); + } // getPrice - - /************************************************************************** - * New Line + /*************************************************************************** + * New Line */ - public void newLine() - { + public void newLine() { p_posPanel.f_product.setM_Product_ID(0); setQty(Env.ONE); setPrice(Env.ZERO); - p_posPanel.f_lines.updateTable(m_order); - } // newLine - + } // newLine + /** - * Save Line - * @return true if saved + * Save Line + * + * @return true if saved */ - public boolean saveLine() - { - MProduct product = p_posPanel.f_product.getProduct(); + public boolean saveLine() { + MProduct product = p_posPanel.f_product.getProduct(); if (product == null) return false; - BigDecimal QtyOrdered = (BigDecimal)f_quantity.getValue(); - BigDecimal PriceActual = (BigDecimal)f_price.getValue(); + BigDecimal QtyOrdered = (BigDecimal) f_quantity.getValue(); + BigDecimal PriceActual = (BigDecimal) f_price.getValue(); MOrderLine line = createLine(product, QtyOrdered, PriceActual); if (line == null) return false; @@ -266,16 +268,98 @@ public class SubCurrentLine extends PosSubPanel implements ActionListener // newLine(); return true; - } // saveLine + } // saveLine + + /** + * to erase the lines from order + * @return true if deleted + */ + public void deleteLine (int row) { + if (m_order != null & row != -1 ) + { + MOrderLine[] lineas = m_order.getLines(); + int numLineas = lineas.length; + if (numLineas > row) + { + //to unreserve + lineas[row].setQty(Env.ZERO); + lineas[row].setLineNetAmt(Env.ZERO); + lineas[row].save(); + //TODO: openxpertya using private method from MOrder + //m_order.reserveStock(null, lineas); + + //delete line from order + lineas[row].delete(true); + for (int i = row; i < (numLineas - 1); i++) + lineas[i] = lineas[i + 1]; + lineas[numLineas - 1] = null; + } + } + } // deleteLine /** - * Get/create Header - * @return header or null - */ - public MOrder getOrder() - { - if (m_order == null) + * Delete order from database + * + * @author Comunidad de Desarrollo OpenXpertya + * *Basado en Codigo Original Modificado, Revisado y Optimizado de: + * *Copyright © ConSerTi + */ + public void deleteOrder () { + if (m_order != null) { + if (m_order.getDocStatus().equals("DR")) + { + MOrderLine[] lineas = m_order.getLines(); + if (lineas != null) + { + int numLineas = lineas.length; + if (numLineas > 0) + for (int i = numLineas - 1; i >= 0; i--) + { + if (lineas[i] != null) + deleteLine(i); + } + } + + MOrderTax[] taxs = m_order.getTaxes(true); + if (taxs != null) + { + int numTax = taxs.length; + if (numTax > 0) + for (int i = taxs.length - 1; i >= 0; i--) + { + if (taxs[i] != null) + taxs[i].delete(true); + taxs[i] = null; + } + } + + m_order.delete(true); + m_order = null; + } + } + } // deleteOrder + + /** + * Create new order + * + * @author Comunidad de Desarrollo OpenXpertya + * *Basado en Codigo Original Modificado, Revisado y Optimizado de: + * *Copyright © ConSerTi + */ + public void newOrder() + { + m_order = null; + m_order = getOrder(); + } + + /** + * Get/create Header + * + * @return header or null + */ + public MOrder getOrder() { + if (m_order == null) { m_order = new MOrder(Env.getCtx(), 0, null); m_order.setAD_Org_ID(p_pos.getAD_Org_ID()); m_order.setIsSOTrx(true); @@ -283,16 +367,17 @@ public class SubCurrentLine extends PosSubPanel implements ActionListener m_order.setC_DocTypeTarget_ID(p_pos.getC_DocType_ID()); else m_order.setC_DocTypeTarget_ID(MOrder.DocSubTypeSO_POS); - MBPartner partner = p_posPanel.f_bpartner.getBPartner(); + MBPartner partner = p_posPanel.f_bpartner.getBPartner(); if (partner == null || partner.get_ID() == 0) partner = p_pos.getBPartner(); - if (partner == null || partner.get_ID() == 0) - { + if (partner == null || partner.get_ID() == 0) { log.log(Level.SEVERE, "SubCurrentLine.getOrder - no BPartner"); + return null; } log.info( "SubCurrentLine.getOrder -" + partner); m_order.setBPartner(partner); + p_posPanel.f_bpartner.setC_BPartner_ID(partner.getC_BPartner_ID()); int id = p_posPanel.f_bpartner.getC_BPartner_Location_ID(); if (id != 0) m_order.setC_BPartner_Location_ID(id); @@ -304,28 +389,94 @@ public class SubCurrentLine extends PosSubPanel implements ActionListener m_order.setM_Warehouse_ID(p_pos.getM_Warehouse_ID()); m_order.setSalesRep_ID(p_pos.getSalesRep_ID()); if (!m_order.save()) + { m_order = null; + log.severe("Unable create Order."); + } } return m_order; - } // getHeader - + } // getHeader + /** - * Create new Line - * @return line or null + * @author Comunidad de Desarrollo OpenXpertya + * *Basado en Codigo Original Modificado, Revisado y Optimizado de: + * *Copyright © ConSerTi */ - public MOrderLine createLine(MProduct product, - BigDecimal QtyOrdered, BigDecimal PriceActual) + public void setBPartner() { + if (m_order != null) + if (m_order.getDocStatus().equals("DR")) + { + MBPartner partner = p_posPanel.f_bpartner.getBPartner(); + //get default from mpos if no selection make + if (partner == null || partner.get_ID() == 0) + partner = p_pos.getBPartner(); + if (partner == null || partner.get_ID() == 0) { + log.warning("SubCurrentLine.getOrder - no BPartner"); + } + else + { + log.info("SubCurrentLine.getOrder -" + partner); + m_order.setBPartner(partner); + MOrderLine[] lineas = m_order.getLines(); + for (int i = 0; i < lineas.length; i++) + { + lineas[i].setC_BPartner_ID(partner.getC_BPartner_ID()); + lineas[i].setTax(); + lineas[i].save(); + } + m_order.save(); + } + } + } + + /** + * Create new Line + * + * @return line or null + */ + public MOrderLine createLine(MProduct product, BigDecimal QtyOrdered, + BigDecimal PriceActual) { MOrder order = getOrder(); if (order == null) return null; - MOrderLine line = new MOrderLine (order); + if (!order.getDocStatus().equals("DR")) + return null; + //add new line or increase qty + MOrderLine[] lineas = order.getLines(); + int numLineas = lineas.length; + for (int i = 0; i < numLineas; i++) + { + if (lineas[i].getM_Product_ID() == product.getM_Product_ID()) + { + //increase qty + double current = lineas[i].getQtyEntered().doubleValue(); + double toadd = QtyOrdered.doubleValue(); + double total = current + toadd; + lineas[i].setQty(new BigDecimal(total)); + lineas[i].setPrice(); // sets List/limit + lineas[i].save(); + return lineas[i]; + } + } + //create new line + MOrderLine line = new MOrderLine(order); line.setProduct(product); line.setQty(QtyOrdered); - line.setPrice(); // sets List/limit + line.setPrice(); // sets List/limit line.setPrice(PriceActual); line.save(); return line; - } // getLine + } // getLine -} // PosSubCurrentLine + /** + * @param m_c_order_id + */ + public void setOldOrder(int m_c_order_id) + { + deleteOrder(); + m_order = new MOrder(p_ctx , m_c_order_id, null); + p_posPanel.updateInfo(); + } + +} // PosSubCurrentLine diff --git a/client/src/org/compiere/pos/SubFunctionKeys.java b/client/src/org/compiere/pos/SubFunctionKeys.java index 9ad586334e..f46182e386 100644 --- a/client/src/org/compiere/pos/SubFunctionKeys.java +++ b/client/src/org/compiere/pos/SubFunctionKeys.java @@ -1,6 +1,6 @@ /****************************************************************************** * Product: Adempiere ERP & CRM Smart Business Solution * - * Copyright (C) 1999-2006 ComPiere, Inc. All Rights Reserved. * + * 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 * @@ -10,26 +10,28 @@ * 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.compiere.pos; import java.awt.*; import java.awt.event.*; + import javax.swing.border.*; + +import org.compiere.swing.*; import org.compiere.model.*; import org.compiere.print.*; -import org.compiere.swing.*; import org.compiere.util.*; /** - * POS Function Key Sub Panel + * Function Key Sub Panel * - * @author Jorg Janke - * @version $Id: SubFunctionKeys.java,v 1.2 2006/07/30 00:51:27 jjanke Exp $ + * @author Comunidad de Desarrollo OpenXpertya + * *Basado en Codigo Original Modificado, Revisado y Optimizado de: + * *Copyright © Jorg Janke + * @version $Id: SubFunctionKeys.java,v 1.1 2004/07/12 04:10:04 jjanke Exp $ */ public class SubFunctionKeys extends PosSubPanel implements ActionListener { @@ -64,7 +66,7 @@ public class SubFunctionKeys extends PosSubPanel implements ActionListener return; int COLUMNS = 3; // Min Columns - int ROWS = 3; // Min Rows + int ROWS = 6; // Min Rows m_keys = fKeys.getKeys(false); int noKeys = m_keys.length; int rows = Math.max (((noKeys-1) / COLUMNS) + 1, ROWS); @@ -116,6 +118,7 @@ public class SubFunctionKeys extends PosSubPanel implements ActionListener GridBagConstraints gbc = super.getGridBagConstraints(); gbc.gridx = 1; gbc.gridy = 2; + gbc.gridheight = 2; //added by ConSerTi so that the panel takes up more space return gbc; } // getGridBagConstraints @@ -149,6 +152,7 @@ public class SubFunctionKeys extends PosSubPanel implements ActionListener p_posPanel.f_product.setPrice(); p_posPanel.f_curLine.setQty(key.getQty()); p_posPanel.f_curLine.saveLine(); + p_posPanel.updateInfo(); return; } } diff --git a/client/src/org/compiere/pos/SubLines.java b/client/src/org/compiere/pos/SubLines.java index 2de5f9d583..6642f2b118 100644 --- a/client/src/org/compiere/pos/SubLines.java +++ b/client/src/org/compiere/pos/SubLines.java @@ -1,6 +1,6 @@ /****************************************************************************** * Product: Adempiere ERP & CRM Smart Business Solution * - * Copyright (C) 1999-2006 ComPiere, Inc. All Rights Reserved. * + * 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 * @@ -10,31 +10,33 @@ * 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.compiere.pos; import java.awt.*; import java.awt.event.*; import java.math.*; import java.sql.*; +import java.util.logging.Level; + import javax.swing.*; import javax.swing.border.*; + +import org.compiere.swing.*; import org.compiere.grid.ed.*; import org.compiere.minigrid.*; import org.compiere.model.*; -import org.compiere.swing.*; -import java.util.logging.*; import org.compiere.util.*; /** - * POS All Lines Sub Panel + * All Lines Sub Panel * - * @author Jorg Janke - * @version $Id: SubLines.java,v 1.2 2006/07/30 00:51:27 jjanke Exp $ + * @author Comunidad de Desarrollo OpenXpertya + * *Basado en Codigo Original Modificado, Revisado y Optimizado de: + * *Copyright © Jorg Janke + * @version $Id: SubLines.java,v 1.2 2004/07/21 05:37:51 jjanke Exp $ */ public class SubLines extends PosSubPanel implements ActionListener { @@ -149,7 +151,7 @@ public class SubLines extends PosSubPanel implements ActionListener summary.add(f_total); f_total.setValue (Env.ZERO); // - f_delete.setReadWrite(false); + f_delete.setReadWrite(true); } // init /** @@ -193,7 +195,6 @@ public class SubLines extends PosSubPanel implements ActionListener if (row < 0) row = 0; m_table.getSelectionModel().setSelectionInterval(row, row); - f_delete.setReadWrite(true); } else if ("Next".equalsIgnoreCase(e.getActionCommand())) { @@ -205,13 +206,21 @@ public class SubLines extends PosSubPanel implements ActionListener if (row >= rows) row = rows - 1; m_table.getSelectionModel().setSelectionInterval(row, row); - f_delete.setReadWrite(true); } // Delete else if (action.equals("Delete")) { - + int rows = m_table.getRowCount(); + if (rows != 0) + { + int row = m_table.getSelectedRow(); + if (row != -1) + { + p_posPanel.f_curLine.deleteLine(row); + } + } } + p_posPanel.updateInfo(); } // actionPerformed /** @@ -226,7 +235,7 @@ public class SubLines extends PosSubPanel implements ActionListener if (C_Order_ID == 0) { m_table.loadTable(new PO[0]); - setSums(order); + setSums(null); } PreparedStatement pstmt = null; @@ -278,6 +287,4 @@ public class SubLines extends PosSubPanel implements ActionListener f_tax.setValue(order.getGrandTotal().subtract(order.getTotalLines())); } } // setSums - - } // PosSubAllLines diff --git a/client/src/org/compiere/pos/SubProduct.java b/client/src/org/compiere/pos/SubProduct.java index bae8a71b38..5332ee938f 100644 --- a/client/src/org/compiere/pos/SubProduct.java +++ b/client/src/org/compiere/pos/SubProduct.java @@ -1,6 +1,6 @@ /****************************************************************************** * Product: Adempiere ERP & CRM Smart Business Solution * - * Copyright (C) 1999-2006 ComPiere, Inc. All Rights Reserved. * + * 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 * @@ -10,29 +10,31 @@ * 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.compiere.pos; import java.awt.*; import java.awt.event.*; + import javax.swing.*; import javax.swing.border.*; -import org.compiere.model.*; + import org.compiere.swing.*; +import org.compiere.model.*; import org.compiere.util.*; /** - * POS Product Sub Panel. + * Product Sub Panel. * Responsible for Product Selection and maintaining * M_Product_ID, Name, UOM * and setting Price * - * @author Jorg Janke - * @version $Id: SubProduct.java,v 1.2 2006/07/30 00:51:27 jjanke Exp $ + * @author Comunidad de Desarrollo OpenXpertya + * *Basado en Codigo Original Modificado, Revisado y Optimizado de: + * *Copyright © Jorg Janke + * @version $Id: SubProduct.java,v 1.2 2004/07/24 04:31:52 jjanke Exp $ */ public class SubProduct extends PosSubPanel implements ActionListener, FocusListener @@ -134,6 +136,8 @@ public class SubProduct extends PosSubPanel // Name else if (e.getSource() == f_name) findProduct(); + + p_posPanel.updateInfo(); } // actionPerformed /** @@ -154,6 +158,8 @@ public class SubProduct extends PosSubPanel return; log.info( "PosSubProduct - focusLost"); findProduct(); + + p_posPanel.updateInfo(); } // focusLost /** @@ -181,7 +187,7 @@ public class SubProduct extends PosSubPanel boolean allNumber = true; try { - Integer.parseInt(query); + Integer.getInteger(query); } catch (Exception e) { diff --git a/client/src/org/compiere/pos/SubSalesRep.java b/client/src/org/compiere/pos/SubSalesRep.java index 6a1f2cf5d9..9244c5cc72 100644 --- a/client/src/org/compiere/pos/SubSalesRep.java +++ b/client/src/org/compiere/pos/SubSalesRep.java @@ -1,6 +1,6 @@ /****************************************************************************** * Product: Adempiere ERP & CRM Smart Business Solution * - * Copyright (C) 1999-2006 ComPiere, Inc. All Rights Reserved. * + * 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 * @@ -10,24 +10,26 @@ * 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.compiere.pos; import java.awt.*; import java.awt.event.*; + import javax.swing.border.*; + import org.compiere.swing.*; import org.compiere.util.*; /** - * POS Sales Rep Sub Panel + * Sales Rep Sub Panel * - * @author Jorg Janke - * @version $Id: SubSalesRep.java,v 1.2 2006/07/30 00:51:26 jjanke Exp $ + * @author Comunidad de Desarrollo OpenXpertya + * *Basado en Codigo Original Modificado, Revisado y Optimizado de: + * *Copyright © Jorg Janke + * @version $Id: SubSalesRep.java,v 1.1 2004/07/12 04:10:04 jjanke Exp $ */ public class SubSalesRep extends PosSubPanel implements ActionListener {