Revert FR [2979756] - Touchscreen friendly POS

Although I like the new presentation of the touchscreen POS it removed some basic functionality.
* In previous POS you could select the business partner, here it assign the "Standard" partner and it cannot be changed (not sure if there is a "hidden" button to do it).
* The button "Preferences" do nothing.
* Credit Card Expiration cannot be set to 0911 - it's changed to 911 and then complaining about the format.
* The order was completed with an incomplete payment - an order of 200 - I entered a cash payment of 50 and it was completed with a change of -190
This commit is contained in:
Carlos Ruiz 2011-02-26 19:27:57 -05:00
parent fb7eb25653
commit 403ccaf162
47 changed files with 3027 additions and 10357 deletions

View File

@ -1,4 +0,0 @@
-- Apr 7, 2010 11:08:21 AM CEST
UPDATE C_POS SET C_BankAccount_ID=100,Updated=TO_DATE('2010-04-07 11:08:21','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE C_POS_ID=100
;

View File

@ -1,14 +0,0 @@
ALTER TABLE C_POSKey ADD CONSTRAINT ADImage_CPOSKey FOREIGN KEY(AD_Image_ID) REFERENCES AD_Image(AD_Image_ID);
ALTER TABLE C_POS ADD (CONSTRAINT OSKKeyLayout_CPOS FOREIGN KEY (OSK_KeyLayout_ID) REFERENCES C_POSKeyLayout);
ALTER TABLE C_POS ADD (CONSTRAINT OSNPKeyLayout_CPOS FOREIGN KEY (OSNP_KeyLayout_ID) REFERENCES C_POSKeyLayout);
ALTER TABLE C_POSKey ADD (CONSTRAINT ADPrintFont_CPOSKey FOREIGN KEY (AD_PrintFont_ID) REFERENCES AD_PrintFont);
ALTER TABLE C_POSKey ADD (CONSTRAINT SubKeyLayout_CPOSKey FOREIGN KEY (SubKeyLayout_ID) REFERENCES C_POSKeyLayout);
ALTER TABLE C_POSKeyLayout ADD (CONSTRAINT ADPrintColor_CPOSKeyLayout FOREIGN KEY (AD_PrintColor_ID) REFERENCES AD_PrintColor);
ALTER TABLE C_POSKeyLayout ADD (CONSTRAINT ADPrintFont_CPOSKeyLayout FOREIGN KEY (AD_PrintFont_ID) REFERENCES AD_PrintFont);

View File

@ -1,4 +0,0 @@
-- Apr 7, 2010 11:08:21 AM CEST
UPDATE C_POS SET C_BankAccount_ID=100,Updated=TO_TIMESTAMP('2010-04-07 11:08:21','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE C_POS_ID=100
;

View File

@ -1,14 +0,0 @@
ALTER TABLE C_POSKey ADD CONSTRAINT ADImage_CPOSKey FOREIGN KEY(AD_Image_ID) REFERENCES AD_Image(AD_Image_ID) DEFERRABLE INITIALLY DEFERRED;
ALTER TABLE C_POS ADD CONSTRAINT OSKKeyLayout_CPOS FOREIGN KEY (OSK_KeyLayout_ID) REFERENCES C_POSKeyLayout DEFERRABLE INITIALLY DEFERRED;
ALTER TABLE C_POS ADD CONSTRAINT OSNPKeyLayout_CPOS FOREIGN KEY (OSNP_KeyLayout_ID) REFERENCES C_POSKeyLayout DEFERRABLE INITIALLY DEFERRED;
ALTER TABLE C_POSKey ADD CONSTRAINT ADPrintFont_CPOSKey FOREIGN KEY (AD_PrintFont_ID) REFERENCES AD_PrintFont DEFERRABLE INITIALLY DEFERRED;
ALTER TABLE C_POSKey ADD CONSTRAINT SubKeyLayout_CPOSKey FOREIGN KEY (SubKeyLayout_ID) REFERENCES C_POSKeyLayout DEFERRABLE INITIALLY DEFERRED;
ALTER TABLE C_POSKeyLayout ADD CONSTRAINT ADPrintColor_CPOSKeyLayout FOREIGN KEY (AD_PrintColor_ID) REFERENCES AD_PrintColor DEFERRABLE INITIALLY DEFERRED;
ALTER TABLE C_POSKeyLayout ADD CONSTRAINT ADPrintFont_CPOSKeyLayout FOREIGN KEY (AD_PrintFont_ID) REFERENCES AD_PrintFont DEFERRABLE INITIALLY DEFERRED;

View File

@ -1,96 +0,0 @@
/******************************************************************************
* Product: Adempiere ERP & CRM Smart Business Solution *
* Copyright (C) 1999-2006 ComPiere, Inc. All Rights Reserved. *
* This program is free software; you can redistribute it and/or modify it *
* under the terms version 2 of the GNU General Public License as published *
* by the Free Software Foundation. This program is distributed in the hope *
* that it will be useful, but WITHOUT ANY WARRANTY; without even the implied *
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. *
* See the GNU General Public License for more details. *
* You should have received a copy of the GNU General Public License along *
* with this program; if not, write to the Free Software Foundation, Inc., *
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. *
* For the text or an alternative of this public license, you may reach us *
* ComPiere, Inc., 2620 Augustine Dr. #245, Santa Clara, CA 95054, USA *
* or via info@compiere.org or http://www.compiere.org/license.html *
*****************************************************************************/
package org.compiere.process;
import java.util.List;
import org.adempiere.exceptions.FillMandatoryException;
import org.compiere.model.MPOSKey;
import org.compiere.model.MProduct;
import org.compiere.model.Query;
import org.compiere.process.ProcessInfoParameter;
import org.compiere.process.SvrProcess;
import org.compiere.util.Env;
public class PosKeyGenerate extends SvrProcess {
private int posKeyLayoutId = 0;
private int productCategoryId = 0;
@Override
protected void prepare() {
for ( ProcessInfoParameter para : getParameter())
{
if ( para.getParameterName().equals("C_POSKeyLayout_ID") )
posKeyLayoutId = para.getParameterAsInt();
if ( para.getParameterName().equals("M_Product_Category_ID") )
productCategoryId = para.getParameterAsInt();
else
log.info("Parameter not found " + para.getParameterName());
}
if ( posKeyLayoutId == 0 )
{
posKeyLayoutId = getRecord_ID();
}
}
/**
* Generate keys for each product
*/
@Override
protected String doIt() throws Exception {
if ( posKeyLayoutId == 0 )
throw new FillMandatoryException("C_POSKeyLayout_ID");
int count = 0;
String where = "";
Object [] params = new Object[] {};
if ( productCategoryId > 0 )
{
where = "M_Product_Category_ID = ? ";
params = new Object[] {productCategoryId};
}
Query query = new Query(getCtx(), MProduct.Table_Name, where, get_TrxName())
.setParameters(params)
.setOnlyActiveRecords(true)
.setOrderBy("Value");
List<MProduct> products = query.list();
for (MProduct product : products )
{
MPOSKey key = new MPOSKey(getCtx(), 0, get_TrxName());
key.setName(product.getName());
key.setM_Product_ID(product.getM_Product_ID());
key.setC_POSKeyLayout_ID(posKeyLayoutId);
key.setSeqNo(count*10);
key.setQty(Env.ONE);
key.saveEx();
count++;
}
return "@Created@ " + count;
}
}

View File

@ -62,19 +62,6 @@ public interface I_C_POS
*/ */
public int getAD_Org_ID(); public int getAD_Org_ID();
/** Column name AutoLogoutDelay */
public static final String COLUMNNAME_AutoLogoutDelay = "AutoLogoutDelay";
/** Set Auto Logout Delay.
* Automatically logout if terminal inactive for this period
*/
public void setAutoLogoutDelay (int AutoLogoutDelay);
/** Get Auto Logout Delay.
* Automatically logout if terminal inactive for this period
*/
public int getAutoLogoutDelay();
/** Column name CashDrawer */ /** Column name CashDrawer */
public static final String COLUMNNAME_CashDrawer = "CashDrawer"; public static final String COLUMNNAME_CashDrawer = "CashDrawer";
@ -283,36 +270,6 @@ public interface I_C_POS
*/ */
public String getName(); public String getName();
/** Column name OSK_KeyLayout_ID */
public static final String COLUMNNAME_OSK_KeyLayout_ID = "OSK_KeyLayout_ID";
/** Set On Screen Keyboard layout.
* The key layout to use for on screen keyboard for text fields.
*/
public void setOSK_KeyLayout_ID (int OSK_KeyLayout_ID);
/** Get On Screen Keyboard layout.
* The key layout to use for on screen keyboard for text fields.
*/
public int getOSK_KeyLayout_ID();
public I_C_POSKeyLayout getOSK_KeyLayout() throws RuntimeException;
/** Column name OSNP_KeyLayout_ID */
public static final String COLUMNNAME_OSNP_KeyLayout_ID = "OSNP_KeyLayout_ID";
/** Set On Screen Number Pad layout.
* The key layout to use for on screen number pad for numeric fields.
*/
public void setOSNP_KeyLayout_ID (int OSNP_KeyLayout_ID);
/** Get On Screen Number Pad layout.
* The key layout to use for on screen number pad for numeric fields.
*/
public int getOSNP_KeyLayout_ID();
public I_C_POSKeyLayout getOSNP_KeyLayout() throws RuntimeException;
/** Column name PrinterName */ /** Column name PrinterName */
public static final String COLUMNNAME_PrinterName = "PrinterName"; public static final String COLUMNNAME_PrinterName = "PrinterName";

View File

@ -49,21 +49,6 @@ public interface I_C_POSKey
*/ */
public int getAD_Client_ID(); public int getAD_Client_ID();
/** Column name AD_Image_ID */
public static final String COLUMNNAME_AD_Image_ID = "AD_Image_ID";
/** Set Image.
* Image or Icon
*/
public void setAD_Image_ID (int AD_Image_ID);
/** Get Image.
* Image or Icon
*/
public int getAD_Image_ID();
public I_AD_Image getAD_Image() throws RuntimeException;
/** Column name AD_Org_ID */ /** Column name AD_Org_ID */
public static final String COLUMNNAME_AD_Org_ID = "AD_Org_ID"; public static final String COLUMNNAME_AD_Org_ID = "AD_Org_ID";
@ -92,21 +77,6 @@ public interface I_C_POSKey
public I_AD_PrintColor getAD_PrintColor() throws RuntimeException; public I_AD_PrintColor getAD_PrintColor() throws RuntimeException;
/** Column name AD_PrintFont_ID */
public static final String COLUMNNAME_AD_PrintFont_ID = "AD_PrintFont_ID";
/** Set Print Font.
* Maintain Print Font
*/
public void setAD_PrintFont_ID (int AD_PrintFont_ID);
/** Get Print Font.
* Maintain Print Font
*/
public int getAD_PrintFont_ID();
public I_AD_PrintFont getAD_PrintFont() throws RuntimeException;
/** Column name C_POSKey_ID */ /** Column name C_POSKey_ID */
public static final String COLUMNNAME_C_POSKey_ID = "C_POSKey_ID"; public static final String COLUMNNAME_C_POSKey_ID = "C_POSKey_ID";
@ -233,56 +203,6 @@ public interface I_C_POSKey
*/ */
public int getSeqNo(); public int getSeqNo();
/** Column name SpanX */
public static final String COLUMNNAME_SpanX = "SpanX";
/** Set Column span.
* Number of columns spanned
*/
public void setSpanX (int SpanX);
/** Get Column span.
* Number of columns spanned
*/
public int getSpanX();
/** Column name SpanY */
public static final String COLUMNNAME_SpanY = "SpanY";
/** Set Row Span.
* Number of rows spanned
*/
public void setSpanY (int SpanY);
/** Get Row Span.
* Number of rows spanned
*/
public int getSpanY();
/** Column name SubKeyLayout_ID */
public static final String COLUMNNAME_SubKeyLayout_ID = "SubKeyLayout_ID";
/** Set Key Layout.
* Key Layout to be displayed when this key is pressed
*/
public void setSubKeyLayout_ID (int SubKeyLayout_ID);
/** Get Key Layout.
* Key Layout to be displayed when this key is pressed
*/
public int getSubKeyLayout_ID();
public I_C_POSKeyLayout getSubKeyLayout() throws RuntimeException;
/** Column name Text */
public static final String COLUMNNAME_Text = "Text";
/** Set Text */
public void setText (String Text);
/** Get Text */
public String getText();
/** Column name Updated */ /** Column name Updated */
public static final String COLUMNNAME_Updated = "Updated"; public static final String COLUMNNAME_Updated = "Updated";

View File

@ -62,49 +62,6 @@ public interface I_C_POSKeyLayout
*/ */
public int getAD_Org_ID(); public int getAD_Org_ID();
/** Column name AD_PrintColor_ID */
public static final String COLUMNNAME_AD_PrintColor_ID = "AD_PrintColor_ID";
/** Set Print Color.
* Color used for printing and display
*/
public void setAD_PrintColor_ID (int AD_PrintColor_ID);
/** Get Print Color.
* Color used for printing and display
*/
public int getAD_PrintColor_ID();
public I_AD_PrintColor getAD_PrintColor() throws RuntimeException;
/** Column name AD_PrintFont_ID */
public static final String COLUMNNAME_AD_PrintFont_ID = "AD_PrintFont_ID";
/** Set Print Font.
* Maintain Print Font
*/
public void setAD_PrintFont_ID (int AD_PrintFont_ID);
/** Get Print Font.
* Maintain Print Font
*/
public int getAD_PrintFont_ID();
public I_AD_PrintFont getAD_PrintFont() throws RuntimeException;
/** Column name Columns */
public static final String COLUMNNAME_Columns = "Columns";
/** Set Columns.
* Number of columns
*/
public void setColumns (int Columns);
/** Get Columns.
* Number of columns
*/
public int getColumns();
/** Column name C_POSKeyLayout_ID */ /** Column name C_POSKeyLayout_ID */
public static final String COLUMNNAME_C_POSKeyLayout_ID = "C_POSKeyLayout_ID"; public static final String COLUMNNAME_C_POSKeyLayout_ID = "C_POSKeyLayout_ID";
@ -186,19 +143,6 @@ public interface I_C_POSKeyLayout
*/ */
public String getName(); public String getName();
/** Column name POSKeyLayoutType */
public static final String COLUMNNAME_POSKeyLayoutType = "POSKeyLayoutType";
/** Set POS Key Layout Type.
* The type of Key Layout
*/
public void setPOSKeyLayoutType (String POSKeyLayoutType);
/** Get POS Key Layout Type.
* The type of Key Layout
*/
public String getPOSKeyLayoutType();
/** Column name Updated */ /** Column name Updated */
public static final String COLUMNNAME_Updated = "Updated"; public static final String COLUMNNAME_Updated = "Updated";

View File

@ -1599,16 +1599,9 @@ public class MInvoice extends X_C_Invoice implements DocAction
approveIt(); approveIt();
log.info(toString()); log.info(toString());
StringBuffer info = new StringBuffer(); StringBuffer info = new StringBuffer();
// POS supports multiple payments
boolean fromPOS = false;
if ( getC_Order_ID() > 0 )
{
fromPOS = getC_Order().getC_POS_ID() > 0;
}
// Create Cash // Create Cash
if (PAYMENTRULE_Cash.equals(getPaymentRule()) && !fromPOS ) if (PAYMENTRULE_Cash.equals(getPaymentRule()))
{ {
// Modifications for POSterita // Modifications for POSterita
// //

View File

@ -95,7 +95,7 @@ public class MPOSKeyLayout extends X_C_POSKeyLayout
return m_keys; return m_keys;
ArrayList<MPOSKey> list = new ArrayList<MPOSKey>(); ArrayList<MPOSKey> list = new ArrayList<MPOSKey>();
String sql = "SELECT * FROM C_POSKey WHERE C_POSKeyLayout_ID=? AND IsActive = 'Y' ORDER BY SeqNo"; String sql = "SELECT * FROM C_POSKey WHERE C_POSKeyLayout_ID=? ORDER BY SeqNo";
PreparedStatement pstmt = null; PreparedStatement pstmt = null;
try try
{ {

View File

@ -42,13 +42,7 @@ public class MPaymentProcessor extends X_C_PaymentProcessor
*/ */
private static final long serialVersionUID = 1825454310856682804L; private static final long serialVersionUID = 1825454310856682804L;
public static MPaymentProcessor[] find (Properties ctx,
String tender, String CCType,
int AD_Client_ID, int AD_Org_ID, int C_Currency_ID, BigDecimal Amt, String trxName)
{
return find(ctx, tender, CCType, AD_Client_ID, C_Currency_ID, Amt, trxName);
}
/** /**
* Get BankAccount & PaymentProcessor * Get BankAccount & PaymentProcessor
* @param ctx context * @param ctx context

View File

@ -77,26 +77,6 @@ public class X_C_POS extends PO implements I_C_POS, I_Persistent
return sb.toString(); return sb.toString();
} }
/** Set Auto Logout Delay.
@param AutoLogoutDelay
Automatically logout if terminal inactive for this period
*/
public void setAutoLogoutDelay (int AutoLogoutDelay)
{
set_Value (COLUMNNAME_AutoLogoutDelay, Integer.valueOf(AutoLogoutDelay));
}
/** Get Auto Logout Delay.
@return Automatically logout if terminal inactive for this period
*/
public int getAutoLogoutDelay ()
{
Integer ii = (Integer)get_Value(COLUMNNAME_AutoLogoutDelay);
if (ii == null)
return 0;
return ii.intValue();
}
/** Set CashDrawer. /** Set CashDrawer.
@param CashDrawer CashDrawer */ @param CashDrawer CashDrawer */
public void setCashDrawer (String CashDrawer) public void setCashDrawer (String CashDrawer)
@ -413,62 +393,6 @@ public class X_C_POS extends PO implements I_C_POS, I_Persistent
return new KeyNamePair(get_ID(), getName()); return new KeyNamePair(get_ID(), getName());
} }
public I_C_POSKeyLayout getOSK_KeyLayout() throws RuntimeException
{
return (I_C_POSKeyLayout)MTable.get(getCtx(), I_C_POSKeyLayout.Table_Name)
.getPO(getOSK_KeyLayout_ID(), get_TrxName()); }
/** Set On Screen Keyboard layout.
@param OSK_KeyLayout_ID
The key layout to use for on screen keyboard for text fields.
*/
public void setOSK_KeyLayout_ID (int OSK_KeyLayout_ID)
{
if (OSK_KeyLayout_ID < 1)
set_Value (COLUMNNAME_OSK_KeyLayout_ID, null);
else
set_Value (COLUMNNAME_OSK_KeyLayout_ID, Integer.valueOf(OSK_KeyLayout_ID));
}
/** Get On Screen Keyboard layout.
@return The key layout to use for on screen keyboard for text fields.
*/
public int getOSK_KeyLayout_ID ()
{
Integer ii = (Integer)get_Value(COLUMNNAME_OSK_KeyLayout_ID);
if (ii == null)
return 0;
return ii.intValue();
}
public I_C_POSKeyLayout getOSNP_KeyLayout() throws RuntimeException
{
return (I_C_POSKeyLayout)MTable.get(getCtx(), I_C_POSKeyLayout.Table_Name)
.getPO(getOSNP_KeyLayout_ID(), get_TrxName()); }
/** Set On Screen Number Pad layout.
@param OSNP_KeyLayout_ID
The key layout to use for on screen number pad for numeric fields.
*/
public void setOSNP_KeyLayout_ID (int OSNP_KeyLayout_ID)
{
if (OSNP_KeyLayout_ID < 1)
set_Value (COLUMNNAME_OSNP_KeyLayout_ID, null);
else
set_Value (COLUMNNAME_OSNP_KeyLayout_ID, Integer.valueOf(OSNP_KeyLayout_ID));
}
/** Get On Screen Number Pad layout.
@return The key layout to use for on screen number pad for numeric fields.
*/
public int getOSNP_KeyLayout_ID ()
{
Integer ii = (Integer)get_Value(COLUMNNAME_OSNP_KeyLayout_ID);
if (ii == null)
return 0;
return ii.intValue();
}
/** Set Printer Name. /** Set Printer Name.
@param PrinterName @param PrinterName
Name of the Printer Name of the Printer

View File

@ -42,9 +42,10 @@ public class X_C_POSKey extends PO implements I_C_POSKey, I_Persistent
{ {
setC_POSKey_ID (0); setC_POSKey_ID (0);
setC_POSKeyLayout_ID (0); setC_POSKeyLayout_ID (0);
setM_Product_ID (0);
setName (null); setName (null);
setQty (Env.ZERO);
setSeqNo (0); setSeqNo (0);
// @SQL=SELECT NVL(MAX(SeqNo),0)+10 AS DefaultValue FROM C_POSKey WHERE C_POSKeyLayout_ID=@C_POSKeyLayout_ID@
} */ } */
} }
@ -76,34 +77,6 @@ public class X_C_POSKey extends PO implements I_C_POSKey, I_Persistent
return sb.toString(); return sb.toString();
} }
public I_AD_Image getAD_Image() throws RuntimeException
{
return (I_AD_Image)MTable.get(getCtx(), I_AD_Image.Table_Name)
.getPO(getAD_Image_ID(), get_TrxName()); }
/** Set Image.
@param AD_Image_ID
Image or Icon
*/
public void setAD_Image_ID (int AD_Image_ID)
{
if (AD_Image_ID < 1)
set_Value (COLUMNNAME_AD_Image_ID, null);
else
set_Value (COLUMNNAME_AD_Image_ID, Integer.valueOf(AD_Image_ID));
}
/** Get Image.
@return Image or Icon
*/
public int getAD_Image_ID ()
{
Integer ii = (Integer)get_Value(COLUMNNAME_AD_Image_ID);
if (ii == null)
return 0;
return ii.intValue();
}
public I_AD_PrintColor getAD_PrintColor() throws RuntimeException public I_AD_PrintColor getAD_PrintColor() throws RuntimeException
{ {
return (I_AD_PrintColor)MTable.get(getCtx(), I_AD_PrintColor.Table_Name) return (I_AD_PrintColor)MTable.get(getCtx(), I_AD_PrintColor.Table_Name)
@ -132,34 +105,6 @@ public class X_C_POSKey extends PO implements I_C_POSKey, I_Persistent
return ii.intValue(); return ii.intValue();
} }
public I_AD_PrintFont getAD_PrintFont() throws RuntimeException
{
return (I_AD_PrintFont)MTable.get(getCtx(), I_AD_PrintFont.Table_Name)
.getPO(getAD_PrintFont_ID(), get_TrxName()); }
/** Set Print Font.
@param AD_PrintFont_ID
Maintain Print Font
*/
public void setAD_PrintFont_ID (int AD_PrintFont_ID)
{
if (AD_PrintFont_ID < 1)
set_Value (COLUMNNAME_AD_PrintFont_ID, null);
else
set_Value (COLUMNNAME_AD_PrintFont_ID, Integer.valueOf(AD_PrintFont_ID));
}
/** Get Print Font.
@return Maintain Print Font
*/
public int getAD_PrintFont_ID ()
{
Integer ii = (Integer)get_Value(COLUMNNAME_AD_PrintFont_ID);
if (ii == null)
return 0;
return ii.intValue();
}
/** Set POS Key. /** Set POS Key.
@param C_POSKey_ID @param C_POSKey_ID
POS Function Key POS Function Key
@ -320,86 +265,4 @@ public class X_C_POSKey extends PO implements I_C_POSKey, I_Persistent
return 0; return 0;
return ii.intValue(); return ii.intValue();
} }
/** Set Column span.
@param SpanX
Number of columns spanned
*/
public void setSpanX (int SpanX)
{
set_Value (COLUMNNAME_SpanX, Integer.valueOf(SpanX));
}
/** Get Column span.
@return Number of columns spanned
*/
public int getSpanX ()
{
Integer ii = (Integer)get_Value(COLUMNNAME_SpanX);
if (ii == null)
return 0;
return ii.intValue();
}
/** Set Row Span.
@param SpanY
Number of rows spanned
*/
public void setSpanY (int SpanY)
{
set_Value (COLUMNNAME_SpanY, Integer.valueOf(SpanY));
}
/** Get Row Span.
@return Number of rows spanned
*/
public int getSpanY ()
{
Integer ii = (Integer)get_Value(COLUMNNAME_SpanY);
if (ii == null)
return 0;
return ii.intValue();
}
public I_C_POSKeyLayout getSubKeyLayout() throws RuntimeException
{
return (I_C_POSKeyLayout)MTable.get(getCtx(), I_C_POSKeyLayout.Table_Name)
.getPO(getSubKeyLayout_ID(), get_TrxName()); }
/** Set Key Layout.
@param SubKeyLayout_ID
Key Layout to be displayed when this key is pressed
*/
public void setSubKeyLayout_ID (int SubKeyLayout_ID)
{
if (SubKeyLayout_ID < 1)
set_Value (COLUMNNAME_SubKeyLayout_ID, null);
else
set_Value (COLUMNNAME_SubKeyLayout_ID, Integer.valueOf(SubKeyLayout_ID));
}
/** Get Key Layout.
@return Key Layout to be displayed when this key is pressed
*/
public int getSubKeyLayout_ID ()
{
Integer ii = (Integer)get_Value(COLUMNNAME_SubKeyLayout_ID);
if (ii == null)
return 0;
return ii.intValue();
}
/** Set Text.
@param Text Text */
public void setText (String Text)
{
set_Value (COLUMNNAME_Text, Text);
}
/** Get Text.
@return Text */
public String getText ()
{
return (String)get_Value(COLUMNNAME_Text);
}
} }

View File

@ -71,82 +71,6 @@ public class X_C_POSKeyLayout extends PO implements I_C_POSKeyLayout, I_Persiste
return sb.toString(); return sb.toString();
} }
public I_AD_PrintColor getAD_PrintColor() throws RuntimeException
{
return (I_AD_PrintColor)MTable.get(getCtx(), I_AD_PrintColor.Table_Name)
.getPO(getAD_PrintColor_ID(), get_TrxName()); }
/** Set Print Color.
@param AD_PrintColor_ID
Color used for printing and display
*/
public void setAD_PrintColor_ID (int AD_PrintColor_ID)
{
if (AD_PrintColor_ID < 1)
set_Value (COLUMNNAME_AD_PrintColor_ID, null);
else
set_Value (COLUMNNAME_AD_PrintColor_ID, Integer.valueOf(AD_PrintColor_ID));
}
/** Get Print Color.
@return Color used for printing and display
*/
public int getAD_PrintColor_ID ()
{
Integer ii = (Integer)get_Value(COLUMNNAME_AD_PrintColor_ID);
if (ii == null)
return 0;
return ii.intValue();
}
public I_AD_PrintFont getAD_PrintFont() throws RuntimeException
{
return (I_AD_PrintFont)MTable.get(getCtx(), I_AD_PrintFont.Table_Name)
.getPO(getAD_PrintFont_ID(), get_TrxName()); }
/** Set Print Font.
@param AD_PrintFont_ID
Maintain Print Font
*/
public void setAD_PrintFont_ID (int AD_PrintFont_ID)
{
if (AD_PrintFont_ID < 1)
set_Value (COLUMNNAME_AD_PrintFont_ID, null);
else
set_Value (COLUMNNAME_AD_PrintFont_ID, Integer.valueOf(AD_PrintFont_ID));
}
/** Get Print Font.
@return Maintain Print Font
*/
public int getAD_PrintFont_ID ()
{
Integer ii = (Integer)get_Value(COLUMNNAME_AD_PrintFont_ID);
if (ii == null)
return 0;
return ii.intValue();
}
/** Set Columns.
@param Columns
Number of columns
*/
public void setColumns (int Columns)
{
set_Value (COLUMNNAME_Columns, Integer.valueOf(Columns));
}
/** Get Columns.
@return Number of columns
*/
public int getColumns ()
{
Integer ii = (Integer)get_Value(COLUMNNAME_Columns);
if (ii == null)
return 0;
return ii.intValue();
}
/** Set POS Key Layout. /** Set POS Key Layout.
@param C_POSKeyLayout_ID @param C_POSKeyLayout_ID
POS Function Key Layout POS Function Key Layout
@ -228,30 +152,4 @@ public class X_C_POSKeyLayout extends PO implements I_C_POSKeyLayout, I_Persiste
{ {
return new KeyNamePair(get_ID(), getName()); return new KeyNamePair(get_ID(), getName());
} }
/** POSKeyLayoutType AD_Reference_ID=53351 */
public static final int POSKEYLAYOUTTYPE_AD_Reference_ID=53351;
/** Keyboard = K */
public static final String POSKEYLAYOUTTYPE_Keyboard = "K";
/** Numberpad = N */
public static final String POSKEYLAYOUTTYPE_Numberpad = "N";
/** Product = P */
public static final String POSKEYLAYOUTTYPE_Product = "P";
/** Set POS Key Layout Type.
@param POSKeyLayoutType
The type of Key Layout
*/
public void setPOSKeyLayoutType (String POSKeyLayoutType)
{
set_Value (COLUMNNAME_POSKeyLayoutType, POSKeyLayoutType);
}
/** Get POS Key Layout Type.
@return The type of Key Layout
*/
public String getPOSKeyLayoutType ()
{
return (String)get_Value(COLUMNNAME_POSKeyLayoutType);
}
} }

View File

@ -78,7 +78,7 @@ public class MiniTable extends CTable implements IMiniTable
/** /**
* *
*/ */
private static final long serialVersionUID = 2853772547464132497L; private static final long serialVersionUID = 2853772547464132496L;
/** /**
* Default Constructor * Default Constructor
@ -111,16 +111,7 @@ public class MiniTable extends CTable implements IMiniTable
/** Logger */ /** Logger */
private static CLogger log = CLogger.getCLogger(MiniTable.class); private static CLogger log = CLogger.getCLogger(MiniTable.class);
/** Is Total Show */ /** Is Total Show */
private boolean showTotals = false; private boolean showTotals = false;
private boolean autoResize = true;
public boolean isAutoResize() {
return autoResize;
}
public void setAutoResize(boolean autoResize) {
this.autoResize = autoResize;
}
/** /**
* Gets the swing column of given index. No index checking * Gets the swing column of given index. No index checking
@ -145,10 +136,7 @@ public class MiniTable extends CTable implements IMiniTable
* Uses Mimimum Column Size * Uses Mimimum Column Size
*/ */
public void autoSize() public void autoSize()
{ {
if ( !autoResize )
return;
long start = System.currentTimeMillis(); long start = System.currentTimeMillis();
// //
final int SLACK = 8; // making sure it fits in a column final int SLACK = 8; // making sure it fits in a column

View File

@ -1,17 +0,0 @@
package org.compiere.pos;
import org.adempiere.exceptions.AdempiereException;
public class AdempierePOSException extends AdempiereException {
public AdempierePOSException(String message) {
super(message);
}
/**
*
*/
private static final long serialVersionUID = -9117127988717827183L;
}

View File

@ -24,7 +24,6 @@ import java.awt.event.InputMethodEvent;
import java.awt.event.InputMethodListener; import java.awt.event.InputMethodListener;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.sql.Timestamp; import java.sql.Timestamp;
import java.util.Properties;
import javax.swing.border.TitledBorder; import javax.swing.border.TitledBorder;
@ -57,7 +56,7 @@ import org.compiere.util.TimeUtil;
* *
*/ */
public class CashSubFunctions extends PosQuery implements ActionListener, InputMethodListener public class CashSubFunctions extends PosSubPanel implements ActionListener, InputMethodListener
{ {
/** /**
* *
@ -67,7 +66,7 @@ public class CashSubFunctions extends PosQuery implements ActionListener, InputM
/** /**
* Constructor * Constructor
*/ */
public CashSubFunctions (PosBasePanel posPanel) public CashSubFunctions (PosPanel posPanel)
{ {
super(posPanel); super(posPanel);
} // PosQueryProduct } // PosQueryProduct
@ -101,7 +100,6 @@ public class CashSubFunctions extends PosQuery implements ActionListener, InputM
private CPanel panel; private CPanel panel;
private CScrollPane centerScroll; private CScrollPane centerScroll;
private ConfirmPanel confirm; private ConfirmPanel confirm;
private Properties p_ctx;
/** Logger */ /** Logger */
private static CLogger log = CLogger.getCLogger(SubCheckout.class); private static CLogger log = CLogger.getCLogger(SubCheckout.class);
@ -111,15 +109,14 @@ public class CashSubFunctions extends PosQuery implements ActionListener, InputM
*/ */
protected void init() protected void init()
{ {
CPanel main = new CPanel(); setLayout(new BorderLayout(2,6));
main.setLayout(new BorderLayout(2,6)); setVisible(false);
main.setPreferredSize(new Dimension(400,600));
getContentPane().add(main);
// North // North
panel = new CPanel(new GridBagLayout()); panel = new CPanel(new GridBagLayout());
main.add (panel, BorderLayout.CENTER); add (panel, BorderLayout.CENTER);
panel.setBorder(new TitledBorder(Msg.getMsg(p_ctx, "Cash Functions"))); panel.setBorder(new TitledBorder(Msg.getMsg(p_ctx, "Cash Functions")));
GridBagConstraints gbc = new GridBagConstraints(); GridBagConstraints gbc = new GridBagConstraints();
gbc.insets = PosSubPanel.INSETS2;
// //
gbc.gridx = 0; gbc.gridx = 0;
gbc.gridy = 0; gbc.gridy = 0;
@ -206,6 +203,7 @@ public class CashSubFunctions extends PosQuery implements ActionListener, InputM
cInitial.setVisible(false); cInitial.setVisible(false);
panel.add (cInitial, gbc); panel.add (cInitial, gbc);
GridBagConstraints gbc0 = new GridBagConstraints(); GridBagConstraints gbc0 = new GridBagConstraints();
gbc0.insets = INSETS2;
gbc0.anchor = GridBagConstraints.CENTER; gbc0.anchor = GridBagConstraints.CENTER;
// //
gbc0.gridx = 0; gbc0.gridx = 0;
@ -260,6 +258,7 @@ public class CashSubFunctions extends PosQuery implements ActionListener, InputM
cScrutiny.setVisible(false); cScrutiny.setVisible(false);
panel.add (cScrutiny, gbc); panel.add (cScrutiny, gbc);
GridBagConstraints gbc1 = new GridBagConstraints(); GridBagConstraints gbc1 = new GridBagConstraints();
gbc1.insets = INSETS2;
gbc1.anchor = GridBagConstraints.CENTER; gbc1.anchor = GridBagConstraints.CENTER;
// //
@ -316,6 +315,22 @@ public class CashSubFunctions extends PosQuery implements ActionListener, InputM
} // init } // 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 * Dispose
*/ */
@ -327,6 +342,15 @@ public class CashSubFunctions extends PosQuery implements ActionListener, InputM
confirm = null; confirm = null;
} // dispose } // dispose
/**
* Set Visible
* @param aFlag visible
*/
public void setVisible (boolean aFlag)
{
super.setVisible (aFlag);
} // setVisible
/** /**
* Action Listener * Action Listener
* @param e event * @param e event
@ -338,7 +362,7 @@ public class CashSubFunctions extends PosQuery implements ActionListener, InputM
return; return;
log.info("PosCashSubFunctions - actionPerformed: " + action); log.info("PosCashSubFunctions - actionPerformed: " + action);
// to display panel with initial change // to display panel with initial changenicial
if (action.equals("displayInitialChange")) if (action.equals("displayInitialChange"))
{ {
cmd_displayInitialChange(); cmd_displayInitialChange();
@ -376,7 +400,7 @@ public class CashSubFunctions extends PosQuery implements ActionListener, InputM
} }
else if (action.equals("End")) else if (action.equals("End"))
{ {
super.dispose(); p_posPanel.closeQuery(p_posPanel.f_cashfunctions);
} }
else if (action.equals("saveChange")) else if (action.equals("saveChange"))
{ {
@ -543,20 +567,5 @@ public class CashSubFunctions extends PosQuery implements ActionListener, InputM
{ {
cmd_calculateDifference(); cmd_calculateDifference();
} }
@Override
protected void close() {
}
@Override
protected void enableButtons() {
}
@Override
public void reset() {
}
} // CashSubFunctions } // CashSubFunctions

View File

@ -1,275 +0,0 @@
/******************************************************************************
* 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.Color;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.math.BigDecimal;
import java.text.ParseException;
import java.util.HashMap;
import java.util.logging.Level;
import javax.swing.JComponent;
import javax.swing.JFormattedTextField;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import javax.swing.JFormattedTextField.AbstractFormatter;
import javax.swing.border.TitledBorder;
import javax.swing.text.NumberFormatter;
import javax.swing.text.Position;
import net.miginfocom.swing.MigLayout;
import org.compiere.apps.AEnv;
import org.compiere.apps.ConfirmPanel;
import org.compiere.model.MPOSKey;
import org.compiere.model.MPOSKeyLayout;
import org.compiere.print.MPrintColor;
import org.compiere.swing.CButton;
import org.compiere.swing.CDialog;
import org.compiere.swing.CPanel;
import org.compiere.swing.CTextField;
import org.compiere.util.CLogger;
import org.compiere.util.Env;
/**
* On Screen Keyboard
* @author Paul Bowden
* Adaxa Pty Ltd
*/
public class POSKeyboard extends CDialog implements ActionListener, PosKeyListener
{
/**
*
*/
private static final long serialVersionUID = 3296839634889851637L;
private PosTextField field;
private MPOSKeyLayout keylayout;
/**
* Constructor
* @param posPanel POS Panel
*/
public POSKeyboard (PosBasePanel posPanel, int C_POSKeyLayout_ID, PosTextField field, String title)
{
this(posPanel, C_POSKeyLayout_ID);
setTitle(title);
setPosTextField(field);
}
public POSKeyboard(PosBasePanel posPanel, int keyLayoutId) {
super(AEnv.getFrame(posPanel), true);
keylayout = MPOSKeyLayout.get(posPanel.getCtx(), keyLayoutId);
init( keyLayoutId );
}
private JFormattedTextField text = new JFormattedTextField();
private HashMap<Integer, MPOSKey> keys;
/** Logger */
private static CLogger log = CLogger.getCLogger(POSKeyboard.class);
/**
* Initialize
* @param startText
* @param POSKeyLayout_ID
*/
public void init(int POSKeyLayout_ID )
{
CPanel panel = new CPanel();
getContentPane().add(panel);
// Content
panel.setLayout(new MigLayout("fill"));
if ( keylayout.getPOSKeyLayoutType().equals(MPOSKeyLayout.POSKEYLAYOUTTYPE_Numberpad))
text.setHorizontalAlignment(JTextField.TRAILING);
panel.add(text, "north, growx, h 30!, wrap, gap 10 10 10 10");
PosKeyPanel keys = new PosKeyPanel(POSKeyLayout_ID, this);
panel.add(keys, "center, growx, growy");
ConfirmPanel confirm = new ConfirmPanel(true, false, true, false, false, false, false);
confirm.addActionListener(this);
Dimension buttonDim = new Dimension(50,50);
confirm.getResetButton().setPreferredSize(buttonDim);
confirm.getOKButton().setPreferredSize(buttonDim);
confirm.getCancelButton().setPreferredSize(buttonDim);
panel.add(confirm, "south");
pack();
setLocationByPlatform(true);
text.requestFocusInWindow();
} // init
/**
* Dispose - Free Resources
*/
public void dispose()
{
if (keys != null)
{
keys.clear();
keys = null;
}
super.dispose();
} // dispose
/**
* Action Listener
* @param e event
*/
public void actionPerformed (ActionEvent e)
{
String action = e.getActionCommand();
if (action == null || action.length() == 0)
return;
else if ( action.equals(ConfirmPanel.A_RESET))
{
if ( keylayout.getPOSKeyLayoutType().equals(MPOSKeyLayout.POSKEYLAYOUTTYPE_Numberpad))
text.setText("0");
else
text.setText("");
try {
text.commitEdit();
} catch (ParseException e1) {
log.log(Level.FINE, "JFormattedTextField commit failed");
}
}
else if ( action.equals(ConfirmPanel.A_CANCEL))
{
dispose();
}
else if (action.equals(ConfirmPanel.A_OK))
{
field.setText(text.getText());
try {
field.commitEdit();
} catch (ParseException e1) {
log.log(Level.FINE, "JFormattedTextField commit failed");
}
dispose();
}
log.info( "PosSubBasicKeys - actionPerformed: " + action);
} // actionPerformed
public void keyReturned(MPOSKey key) {
String entry = key.getText();
String old = text.getText();
int caretPos = text.getCaretPosition();
if ( text.getSelectedText() != null )
caretPos = text.getSelectionStart();
String head = old.substring(0, caretPos);
if ( text.getSelectedText() != null )
caretPos = text.getSelectionEnd();
String tail = old.substring(caretPos, old.length());
if ( entry != null && !entry.isEmpty() )
{
if ( keylayout.getPOSKeyLayoutType().equals(MPOSKeyLayout.POSKEYLAYOUTTYPE_Keyboard))
{
if ( key.getText() != null )
text.setText( head + entry + tail);
}
else if ( keylayout.getPOSKeyLayoutType().equals(MPOSKeyLayout.POSKEYLAYOUTTYPE_Numberpad))
{
if ( entry.equals(".") )
{
text.setText(head + entry + tail);
}
if ( entry.equals(",") )
{
text.setText(head + entry + tail);
}
else if ( entry.equals("C") )
{
text.setText("0");
}
else {
try
{
int number = Integer.parseInt(entry); // test if number
if ( number >= 0 && number <= 9 )
{
text.setText(head + number + tail);
}
// greater than 9, add to existing
else
{
Object current = text.getValue();
if ( current == null )
{
text.setText(Integer.toString(number));
}
else if ( current instanceof BigDecimal )
{
text.setText(((BigDecimal) current).add(
new BigDecimal(Integer.toString(number))).toPlainString());
}
else if ( current instanceof Integer )
{
text.setText(Integer.toString(((Integer) current) + number));
}
else if ( current instanceof Long )
{
text.setText(Long.toString(((Long) current) + number));
}
else if ( current instanceof Double )
{
text.setText(Double.toString(((Double) current) + number));
}
}
}
catch (NumberFormatException e)
{
// ignore non-numbers
}
}
try {
text.commitEdit();
} catch (ParseException e) {
log.log(Level.FINE, "JFormattedTextField commit failed");
}
}
}
}
public void setPosTextField(PosTextField posTextField) {
field = posTextField;
text.setFormatterFactory(field.getFormatterFactory());
text.setText(field.getText());
text.setValue(field.getValue());
getContentPane().invalidate();
}
} // PosSubBasicKeys

View File

@ -1,105 +0,0 @@
package org.compiere.pos;
import java.awt.KeyboardFocusManager;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.util.Properties;
import javax.swing.JFrame;
import org.compiere.Adempiere;
import org.compiere.apps.ADialog;
import org.compiere.apps.AEnv;
import org.compiere.apps.AKeyboardFocusManager;
import org.compiere.apps.ALogin;
import org.compiere.model.MSession;
import org.compiere.swing.CFrame;
import org.compiere.util.DB;
import org.compiere.util.Env;
import org.compiere.util.Msg;
import org.compiere.util.Splash;
public class PosApplication {
private Properties m_ctx;
PosApplication() {
Adempiere.startup(true); // needs to be here for UI
Splash splash = Splash.getSplash();
final CFrame frame = new CFrame();
// Focus Traversal
KeyboardFocusManager.setCurrentKeyboardFocusManager(AKeyboardFocusManager.get());
// FocusManager.getCurrentManager().setDefaultFocusTraversalPolicy(AFocusTraversalPolicy.get());
// this.setFocusTraversalPolicy(AFocusTraversalPolicy.get());
ALogin login = new ALogin(splash);
if (!login.initLogin()) // no automatic login
{
// Center the window
try
{
AEnv.showCenterScreen(login); // HTML load errors
}
catch (Exception ex)
{
}
if (!login.isConnected() || !login.isOKpressed())
AEnv.exit(1);
}
// Check Build
if (!DB.isBuildOK(m_ctx))
AEnv.exit(1);
// Check DB (AppsServer Version checked in Login)
DB.isDatabaseOK(m_ctx);
splash.setText(Msg.getMsg(m_ctx, "Loading"));
splash.toFront();
splash.paint(splash.getGraphics());
//
if (!Adempiere.startupEnvironment(true)) // Load Environment
System.exit(1);
MSession.get (Env.getCtx(), true); // Start Session
int m_WindowNo = AEnv.createWindowNo(frame);
// Default Image
frame.setIconImage(Adempiere.getImage16());
// Setting close operation/listener - teo_sarca [ 1684168 ]
frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
frame.addWindowListener(new WindowListener() {
public void windowClosing(WindowEvent e) {
if (!ADialog.ask(0, null, "ExitApplication?"))
return;
frame.dispose();
}
public void windowActivated(WindowEvent e) {}
public void windowClosed(WindowEvent e) {}
public void windowDeactivated(WindowEvent e) {}
public void windowDeiconified(WindowEvent e) {}
public void windowIconified(WindowEvent e) {}
public void windowOpened(WindowEvent e) {}
});
PosBasePanel pos = new PosBasePanel();
pos.init(0,frame);
frame.pack();
splash.dispose();
splash = null;
frame.setVisible(true);
}
/**
* @param args
*/
public static void main(String[] args) {
new PosApplication();
}
}

View File

@ -1,423 +0,0 @@
/******************************************************************************
* 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.BorderLayout;
import java.awt.Component;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.FocusTraversalPolicy;
import java.awt.Frame;
import java.awt.GridBagLayout;
import java.awt.KeyboardFocusManager;
import java.awt.MouseInfo;
import java.awt.Point;
import java.awt.PointerInfo;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.sql.Timestamp;
import java.util.HashMap;
import java.util.Properties;
import java.util.Timer;
import java.util.logging.Level;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.UIManager;
import net.miginfocom.swing.MigLayout;
import org.compiere.Adempiere;
import org.compiere.apps.ADialog;
import org.compiere.apps.AEnv;
import org.compiere.apps.AKeyboardFocusManager;
import org.compiere.apps.ALogin;
import org.compiere.apps.AMenu;
import org.compiere.apps.StatusBar;
import org.compiere.apps.form.FormFrame;
import org.compiere.apps.form.FormPanel;
import org.compiere.apps.wf.WFActivity;
import org.compiere.apps.wf.WFPanel;
import org.compiere.grid.ed.VLocationDialog;
import org.compiere.grid.tree.VTreePanel;
import org.compiere.model.MBPartner;
import org.compiere.model.MOrder;
import org.compiere.model.MOrderLine;
import org.compiere.model.MOrderTax;
import org.compiere.model.MPOS;
import org.compiere.model.MSession;
import org.compiere.swing.CDialog;
import org.compiere.swing.CFrame;
import org.compiere.swing.CPanel;
import org.compiere.util.CLogger;
import org.compiere.util.DB;
import org.compiere.util.Env;
import org.compiere.util.Ini;
import org.compiere.util.Msg;
import org.compiere.util.Splash;
/**
* Point of Sales Main Window.
*
* @author Comunidad de Desarrollo OpenXpertya
* *Basado en Codigo Original Modificado, Revisado y Optimizado de:
* *Copyright (c) Jorg Janke
* @version $Id: PosPanel.java,v 1.10 2004/07/12 04:10:04 jjanke Exp $
*/
public class PosBasePanel extends CPanel
//implements FormPanel
{
/**
*
*/
private static final long serialVersionUID = -3010214392188209281L;
/**
* Constructor - see init
*/
public PosBasePanel()
{
super (new MigLayout(" fill","[500!]10[300:350:, fill]",""));
originalKeyboardFocusManager = KeyboardFocusManager.getCurrentKeyboardFocusManager();
m_focusMgr = new PosKeyboardFocusManager();
KeyboardFocusManager.setCurrentKeyboardFocusManager(m_focusMgr);
} // PosPanel
/** Window No */
private int m_WindowNo = 0;
/** FormFrame */
private CFrame m_frame;
/** Logger */
private CLogger log = CLogger.getCLogger(getClass());
/** Context */
private Properties m_ctx = Env.getCtx();
/** Sales Rep */
private int m_SalesRep_ID = 0;
/** POS Model */
protected MPOS p_pos = null;
/** Keyoard Focus Manager */
private PosKeyboardFocusManager m_focusMgr = null;
/** Order Panel */
protected SubOrder f_order;
/** Current Line */
protected SubCurrentLine f_curLine;
/** Function Keys */
protected SubFunctionKeys f_functionKeys;
protected CashSubFunctions f_cashfunctions;
private javax.swing.Timer logoutTimer;
PosOrderModel m_order = null;
// Today's (login) date */
private Timestamp m_today = Env.getContextAsDate(m_ctx, "#Date");
private KeyboardFocusManager originalKeyboardFocusManager;
private boolean debug = true;
private CFrame frame;
private HashMap<Integer, POSKeyboard> keyboards = new HashMap<Integer, POSKeyboard>();
/**
* Initialize Panel
* @param WindowNo window
* @param frame parent frame
*/
public void init (int WindowNo, CFrame frame)
{
this.frame = frame;
if ( debug )
frame.setPreferredSize(new Dimension(1024,768));
else
{
frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
frame.setResizable(false);
}
m_SalesRep_ID = Env.getAD_User_ID(m_ctx);
log.info("init - SalesRep_ID=" + m_SalesRep_ID);
m_WindowNo = WindowNo;
m_frame = frame;
frame.setJMenuBar(null);
//
try
{
if (!dynInit())
{
dispose();
frame.dispose();
return;
}
frame.getContentPane().add(this, BorderLayout.CENTER);
}
catch(Exception e)
{
log.log(Level.SEVERE, "init", e);
}
log.config( "PosPanel.init - " + getPreferredSize());
if ( p_pos.getAutoLogoutDelay() > 0 && logoutTimer == null )
{
logoutTimer = new javax.swing.Timer(1000,
new ActionListener() {
PointerInfo pi = null;
long lastMouseMove = System.currentTimeMillis();
long lastKeyboardEvent = System.currentTimeMillis();
public void actionPerformed(ActionEvent e) {
long now = e.getWhen();
PointerInfo newPi = MouseInfo.getPointerInfo();
// mouse moved
if ( newPi != null && pi != null
&& !pi.getLocation().equals(newPi.getLocation()) )
{
lastMouseMove = now;
}
pi = newPi;
lastKeyboardEvent = m_focusMgr.getLastWhen();
if ( p_pos.getAutoLogoutDelay()*1000 < now - Math.max(lastKeyboardEvent, lastMouseMove) )
{
// new PosLogin(this);
}
}
});
logoutTimer.start();
}
m_focusMgr.start();
} // init
/**
* Dispose - Free Resources
*/
public void dispose()
{
keyboards.clear();
keyboards = null;
if ( logoutTimer != null )
logoutTimer.stop();
logoutTimer = null;
if (m_focusMgr != null)
m_focusMgr.stop();
m_focusMgr = null;
KeyboardFocusManager.setCurrentKeyboardFocusManager(originalKeyboardFocusManager);
//
if (f_order != null)
f_order.dispose();
f_order = null;
if (f_curLine != null)
{
// if ( m_order != null )
// m_order.deleteOrder();
f_curLine.dispose();
}
f_curLine = null;
if (f_functionKeys != null)
f_functionKeys.dispose();
f_functionKeys = null;
if (f_cashfunctions != null)
f_cashfunctions.dispose();
f_cashfunctions = null;
if (m_frame != null)
m_frame.dispose();
m_frame = null;
m_ctx = null;
} // dispose
/**************************************************************************
* Dynamic Init.
* PosPanel has a GridBagLayout.
* The Sub Panels return their position
*/
private boolean dynInit()
{
if (!setMPOS())
return false;
frame.setTitle("Adempiere POS: " + p_pos.getName());
// Create Sub Panels
f_order = new SubOrder (this);
add (f_order, "split 2, flowy, growx, spany");
//
f_curLine = new SubCurrentLine (this);
add (f_curLine, "h 300, growx, growy, gaptop 30");
f_functionKeys = new SubFunctionKeys (this);
add (f_functionKeys, "aligny top, h 500, growx, growy, flowy, split 2");
return true;
} // dynInit
/**
* Set MPOS
* @return true if found/set
*/
private boolean setMPOS()
{
MPOS[] poss = null;
if (m_SalesRep_ID == 100) // superUser
poss = getPOSs (0);
else
poss = getPOSs (m_SalesRep_ID);
//
if (poss.length == 0)
{
ADialog.error(m_WindowNo, m_frame, "NoPOSForUser");
return false;
}
else if (poss.length == 1)
{
p_pos = poss[0];
return true;
}
// Select POS
String msg = Msg.getMsg(m_ctx, "SelectPOS");
String title = Env.getHeader(m_ctx, m_WindowNo);
Object selection = JOptionPane.showInputDialog(m_frame, msg, title,
JOptionPane.QUESTION_MESSAGE, null, poss, poss[0]);
if (selection != null)
{
p_pos = (MPOS)selection;
return true;
}
return false;
} // setMPOS
/**
* Get POSs for specific Sales Rep or all
* @param SalesRep_ID
* @return array of POS
*/
private MPOS[] getPOSs (int SalesRep_ID)
{
String pass_field = "SalesRep_ID";
int pass_ID = SalesRep_ID;
if (SalesRep_ID==0)
{
pass_field = "AD_Client_ID";
pass_ID = Env.getAD_Client_ID(m_ctx);
}
return MPOS.getAll(m_ctx, pass_field, pass_ID);
} // getPOSs
/**************************************************************************
* Get Today's date
* @return date
*/
public Timestamp getToday()
{
return m_today;
} // getToday
/**
* New Order
*
*/
public void newOrder()
{
log.info( "PosPanel.newOrder");
f_order.setC_BPartner_ID(0);
m_order = null;
m_order = PosOrderModel.createOrder(p_pos, f_order.getBPartner());
f_curLine.newLine();
f_curLine.f_name.requestFocusInWindow();
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 getProperties m_ctx
*/
public Properties getCtx()
{
return m_ctx;
}
public void updateInfo()
{
// reload order
if ( m_order != null )
{
m_order.reload();
}
if ( f_curLine != null )
f_curLine.updateTable(m_order);
if (f_order != null)
{
f_order.updateOrder();
}
}
/**
* @param m_c_order_id
*/
public void setOldOrder(int m_c_order_id)
{
if ( m_order != null )
m_order.deleteOrder();
if ( m_c_order_id == 0 )
m_order = null;
else
m_order = new PosOrderModel(m_ctx , m_c_order_id, null, p_pos);
updateInfo();
}
/**
* @param m_c_order_id
*/
public void setOrder(int m_c_order_id)
{
if ( m_c_order_id == 0 )
m_order = null;
else
m_order = new PosOrderModel(m_ctx , m_c_order_id, null, p_pos);
}
public POSKeyboard getKeyboard(int keyLayoutId) {
if ( keyboards.containsKey(keyLayoutId) )
return keyboards.get(keyLayoutId);
else
{
POSKeyboard keyboard = new POSKeyboard(this, keyLayoutId);
keyboards.put(keyLayoutId, keyboard);
return keyboard;
}
}
} // PosPanel

View File

@ -1,30 +0,0 @@
/******************************************************************************
* 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 org.compiere.model.MPOSKey;
/**
* Interface for listening to on screen key events
* @author Paul Bowden
* Adaxa Pty Ltd
*
*/
public interface PosKeyListener {
void keyReturned( MPOSKey key );
}

View File

@ -1,250 +0,0 @@
/******************************************************************************
* 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.CardLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.HashMap;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JScrollBar;
import javax.swing.SwingConstants;
import net.miginfocom.swing.MigLayout;
import org.adempiere.plaf.AdempierePLAF;
import org.compiere.model.MImage;
import org.compiere.model.MPOSKey;
import org.compiere.model.MPOSKeyLayout;
import org.compiere.print.MPrintColor;
import org.compiere.print.MPrintFont;
import org.compiere.swing.CButton;
import org.compiere.swing.CPanel;
import org.compiere.swing.CScrollPane;
import org.compiere.util.CLogger;
import org.compiere.util.Env;
/**
* Button panel supporting multiple linked layouts
* @author Paul Bowden
* Adaxa Pty Ltd
*
*/
public class PosKeyPanel extends CPanel implements ActionListener {
/**
*
*/
private static final long serialVersionUID = -1773720355288801510L;
/**
* Constructor
*/
public PosKeyPanel (int C_POSKeyLayout_ID, PosKeyListener caller)
{
if (C_POSKeyLayout_ID == 0)
return;
setLayout(cardLayout);
add(createCard(C_POSKeyLayout_ID), Integer.toString(C_POSKeyLayout_ID));
currentLayout = C_POSKeyLayout_ID;
cardLayout.show(this, Integer.toString(C_POSKeyLayout_ID));
this.caller = caller;
} // PosSubFunctionKeys
/** layout */
private CardLayout cardLayout = new CardLayout();
/** Map of map of keys */
private HashMap<Integer, HashMap<Integer, MPOSKey>> keymap = new HashMap<Integer, HashMap<Integer,MPOSKey>>();
/** Currently displayed layout */
int currentLayout;
/** Logger */
private static CLogger log = CLogger.getCLogger(PosKeyPanel.class);
/** Caller */
private PosKeyListener caller;
/**
* @return
*/
private CPanel createCard(int C_POSKeyLayout_ID) {
// already added
if ( keymap.containsKey(C_POSKeyLayout_ID) )
{
return null;
}
CPanel card = new CPanel();
card.setLayout(new MigLayout("fill, ins 0"));
MPOSKeyLayout keyLayout = MPOSKeyLayout.get(Env.getCtx(), C_POSKeyLayout_ID);
Color stdColor = Color.lightGray;
if (keyLayout.getAD_PrintColor_ID() != 0)
{
MPrintColor color = MPrintColor.get(Env.getCtx(), keyLayout.getAD_PrintColor_ID());
stdColor = color.getColor();
}
Font stdFont = AdempierePLAF.getFont_Field();
if (keyLayout.getAD_PrintFont_ID() != 0)
{
MPrintFont font = MPrintFont.get(keyLayout.getAD_PrintFont_ID());
stdFont = font.getFont();
}
if (keyLayout.get_ID() == 0)
return null;
MPOSKey[] keys = keyLayout.getKeys(false);
HashMap<Integer, MPOSKey> map = new HashMap<Integer, MPOSKey>(keys.length);
keymap.put(C_POSKeyLayout_ID, map);
int COLUMNS = 3; // Min Columns
int ROWS = 3; // Min Rows
int noKeys = keys.length;
int cols = keyLayout.getColumns();
if ( cols == 0 )
cols = COLUMNS;
int buttons = 0;
log.fine( "PosSubFunctionKeys.init - NoKeys=" + noKeys
+ ", Cols=" + cols);
// Content
CPanel content = new CPanel (new MigLayout("fill, wrap " + Math.max(cols, 3)));
String buttonSize = "h 50, w 50, growx, growy, sg button,";
for (MPOSKey key : keys)
{
if ( key.getSubKeyLayout_ID() > 0 )
{
CPanel subCard = createCard(key.getSubKeyLayout_ID());
if ( subCard != null )
add(subCard, Integer.toString(key.getSubKeyLayout_ID()));
}
map.put(key.getC_POSKey_ID(), key);
Color keyColor = stdColor;
Font keyFont = stdFont;
StringBuffer buttonHTML = new StringBuffer("<html><p>");
if (key.getAD_PrintColor_ID() != 0)
{
MPrintColor color = MPrintColor.get(Env.getCtx(), key.getAD_PrintColor_ID());
keyColor = color.getColor();
}
if ( key.getAD_PrintFont_ID() != 0)
{
MPrintFont font = MPrintFont.get(key.getAD_PrintFont_ID());
keyFont = font.getFont();
}
buttonHTML.append(key.getName());
buttonHTML.append("</p></html>");
log.fine( "#" + map.size() + " - " + keyColor);
CButton button = new CButton(buttonHTML.toString());
button.setBackground(keyColor);
button.setFont(keyFont);
if ( key.getAD_Image_ID() != 0 )
{
MImage image = MImage.get(Env.getCtx(), key.getAD_Image_ID());
Icon icon = image.getIcon();
button.setIcon(icon);
button.setVerticalTextPosition(SwingConstants.BOTTOM);
button.setHorizontalTextPosition(SwingConstants.CENTER);
}
button.setFocusable(false);
if ( !key.isActive() )
button.setEnabled(false);
button.setActionCommand(String.valueOf(key.getC_POSKey_ID()));
button.addActionListener(this);
String constraints = buttonSize;
int size = 1;
if ( key.getSpanX() > 1 )
{
constraints += "spanx " + key.getSpanX() + ",";
size = key.getSpanX();
}
if ( key.getSpanY() > 1 )
{
constraints += "spany " + key.getSpanY() + ",";
size = size*key.getSpanY();
}
buttons = buttons + size;
content.add (button, constraints);
}
int rows = Math.max ((buttons / cols), ROWS);
if ( buttons % cols > 0 )
rows = rows + 1;
for (int i = buttons; i < rows*cols; i++)
{
CButton button = new CButton("");
button.setFocusable(false);
button.setReadWrite(false);
content.add (button, buttonSize);
}
CScrollPane scroll = new CScrollPane(content);
// scroll.setPreferredSize(new Dimension( 600 - 20, 400-20));
card.add (scroll, "growx, growy");
// increase scrollbar width for touchscreen
scroll.getVerticalScrollBar().setPreferredSize(new Dimension(30, 0));
scroll.getHorizontalScrollBar().setPreferredSize(new Dimension(0,30));
return card;
}
/**
* Action Listener
* @param e event
*/
public void actionPerformed (ActionEvent e)
{
String action = e.getActionCommand();
if (action == null || action.length() == 0 || keymap == null)
return;
log.info( "PosSubFunctionKeys - actionPerformed: " + action);
HashMap<Integer, MPOSKey> currentKeymap = keymap.get(currentLayout);
try
{
int C_POSKey_ID = Integer.parseInt(action);
MPOSKey key = currentKeymap.get(C_POSKey_ID);
// switch layout
if ( key.getSubKeyLayout_ID() > 0 )
{
currentLayout = key.getSubKeyLayout_ID();
cardLayout.show(this, Integer.toString(key.getSubKeyLayout_ID()));
}
else
{
caller.keyReturned(key);
}
}
catch (Exception ex)
{
}
} // actionPerformed
}

View File

@ -47,10 +47,6 @@ public class PosKeyboardFocusManager extends DefaultKeyboardFocusManager
/** Last Key Type */ /** Last Key Type */
private long m_lastWhen = 0; private long m_lastWhen = 0;
public long getLastWhen() {
return m_lastWhen;
}
/** Timer */ /** Timer */
private javax.swing.Timer m_timer = null; private javax.swing.Timer m_timer = null;
/** Logger */ /** Logger */

View File

@ -1,81 +0,0 @@
package org.compiere.pos;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import javax.swing.KeyStroke;
import net.miginfocom.swing.MigLayout;
import org.compiere.apps.AEnv;
import org.compiere.apps.AppsAction;
import org.compiere.model.MUser;
import org.compiere.swing.CButton;
import org.compiere.swing.CDialog;
import org.compiere.swing.CLabel;
import org.compiere.swing.CPanel;
import org.compiere.util.Env;
import org.compiere.util.Msg;
public class PosLogin extends CDialog implements ActionListener {
/**
*
*/
private static final long serialVersionUID = 8490567722808711399L;
private PosBasePanel posPanel;
private PosTextField username;
private PosTextField pin;
private CButton bProcess;
/**
* Constructor
* @param posPanel POS Panel
*/
public PosLogin (PosBasePanel posPanel)
{
super (AEnv.getFrame(posPanel),Msg.translate(posPanel.getCtx(), "Login"), true);
init();
this.posPanel = posPanel;
}
private void init() {
CPanel panel = new CPanel();
panel.setLayout(new MigLayout());
getContentPane().add(panel);
panel.add(new CLabel(Msg.translate(posPanel.getCtx(),"SalesRep_ID")));
username = new PosTextField(Msg.translate(posPanel.getCtx(),"SalesRep_ID"),
posPanel, posPanel.p_pos.getOSK_KeyLayout_ID());
panel.add( username, "wrap");
panel.add(new CLabel(Msg.translate(posPanel.getCtx(), "UserPIN")));
pin = new PosTextField(Msg.translate(posPanel.getCtx(), "UserPIN"), posPanel, posPanel.p_pos.getOSNP_KeyLayout_ID());
panel.add(pin, "");
AppsAction act = new AppsAction("Ok", KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0), false);
act.setDelegate(this);
bProcess = (CButton)act.getButton();
bProcess.setFocusable(false);
panel.add (bProcess, "h 50!, w 50!");
pack();
}
@Override
public void actionPerformed(ActionEvent e) {
if ( e.getSource().equals(bProcess) )
{
MUser.get(posPanel.getCtx(), username.getText(), pin.getText());
}
dispose();
}
}

View File

@ -1,459 +0,0 @@
/******************************************************************************
* 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.BigDecimal;
import java.util.HashMap;
import java.util.Properties;
import org.compiere.model.MBPartner;
import org.compiere.model.MOrder;
import org.compiere.model.MOrderLine;
import org.compiere.model.MOrderTax;
import org.compiere.model.MPOS;
import org.compiere.model.MPayment;
import org.compiere.model.MPaymentProcessor;
import org.compiere.model.MProduct;
import org.compiere.process.DocAction;
import org.compiere.util.DB;
import org.compiere.util.Env;
import org.compiere.util.ValueNamePair;
/**
* Wrapper for standard order
* @author Paul Bowden
* Adaxa Pty Ltd
*
*/
public class PosOrderModel extends MOrder {
private MPOS m_pos;
public PosOrderModel(Properties ctx, int C_Order_ID, String trxName, MPOS pos) {
super(ctx, C_Order_ID, trxName);
m_pos = pos;
}
/**
* Get/create Order
*
* @return order or null
*/
public static PosOrderModel createOrder(MPOS pos, MBPartner partner) {
PosOrderModel order = new PosOrderModel(Env.getCtx(), 0, null, pos);
order.setAD_Org_ID(pos.getAD_Org_ID());
order.setIsSOTrx(true);
order.setC_POS_ID(pos.getC_POS_ID());
if (pos.getC_DocType_ID() != 0)
order.setC_DocTypeTarget_ID(pos.getC_DocType_ID());
else
order.setC_DocTypeTarget_ID(MOrder.DocSubTypeSO_POS);
if (partner == null || partner.get_ID() == 0)
partner = pos.getBPartner();
if (partner == null || partner.get_ID() == 0) {
throw new AdempierePOSException("No BPartner for order");
}
order.setBPartner(partner);
//
order.setM_PriceList_ID(pos.getM_PriceList_ID());
order.setM_Warehouse_ID(pos.getM_Warehouse_ID());
order.setSalesRep_ID(pos.getSalesRep_ID());
order.setPaymentRule(MOrder.PAYMENTRULE_Cash);
if (!order.save())
{
order = null;
throw new AdempierePOSException("Save order failed");
}
return order;
} // createOrder
/**
* @author Comunidad de Desarrollo OpenXpertya
* *Basado en Codigo Original Modificado, Revisado y Optimizado de:
* *Copyright ConSerTi
*/
public void setBPartner(MBPartner partner)
{
if (getDocStatus().equals("DR"))
{
if (partner == null || partner.get_ID() == 0) {
throw new AdempierePOSException("no BPartner");
}
else
{
log.info("SubCurrentLine.getOrder -" + partner);
super.setBPartner(partner);
MOrderLine[] lineas = getLines();
for (int i = 0; i < lineas.length; i++)
{
lineas[i].setC_BPartner_ID(partner.getC_BPartner_ID());
lineas[i].setTax();
lineas[i].save();
}
saveEx();
}
}
}
/**
* Create new Line
*
* @return line or null
*/
public MOrderLine createLine(MProduct product, BigDecimal QtyOrdered,
BigDecimal PriceActual) {
if (!getDocStatus().equals("DR") )
return null;
//add new line or increase qty
// catch Exceptions at order.getLines()
int numLines = 0;
MOrderLine[] lines = null;
try
{
lines = getLines(null,"Line");
numLines = lines.length;
for (int i = 0; i < numLines; i++)
{
if (lines[i].getM_Product_ID() == product.getM_Product_ID())
{
//increase qty
BigDecimal current = lines[i].getQtyEntered();
BigDecimal toadd = QtyOrdered;
BigDecimal total = current.add(toadd);
lines[i].setQty(total);
lines[i].setPrice(); // sets List/limit
if ( PriceActual.compareTo(Env.ZERO) > 0 )
lines[i].setPrice(PriceActual);
lines[i].save();
return lines[i];
}
}
}
catch (Exception e)
{
log.severe("Order lines cannot be created - " + e.getMessage());
}
//create new line
MOrderLine line = new MOrderLine(this);
line.setProduct(product);
line.setQty(QtyOrdered);
line.setPrice(); // sets List/limit
if ( PriceActual.compareTo(Env.ZERO) > 0 )
line.setPrice(PriceActual);
line.save();
return line;
} // createLine
/**
* Delete order from database
*
* @author Comunidad de Desarrollo OpenXpertya
* *Basado en Codigo Original Modificado, Revisado y Optimizado de:
* *Copyright <EFBFBD> ConSerTi
*/
public boolean deleteOrder () {
if (getDocStatus().equals("DR"))
{
MOrderLine[] lines = getLines();
if (lines != null)
{
int numLines = lines.length;
if (numLines > 0)
for (int i = numLines - 1; i >= 0; i--)
{
if (lines[i] != null)
deleteLine(lines[i].getC_Order_ID());
}
}
MOrderTax[] taxs = 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;
}
}
getLines(true, null); // requery order
return delete(true);
}
return false;
} // deleteOrder
/**
* to erase the lines from order
* @return true if deleted
*/
public void deleteLine (int C_OrderLine_ID) {
if ( C_OrderLine_ID != -1 )
{
for ( MOrderLine line : getLines(true, "M_Product_ID") )
{
if ( line.getC_OrderLine_ID() == C_OrderLine_ID )
{
line.delete(true);
}
}
}
} // deleteLine
/**
* Process Order
* @author Comunidad de Desarrollo OpenXpertya
* *Basado en Codigo Original Modificado, Revisado y Optimizado de:
* *Copyright <EFBFBD> ConSerTi
*/
public boolean processOrder()
{
//Returning orderCompleted to check for order completeness
boolean orderCompleted = false;
// check if order completed OK
if (getDocStatus().equals("DR") || getDocStatus().equals("IP") )
{
setDocAction(DocAction.ACTION_Complete);
try
{
if (processIt(DocAction.ACTION_Complete) )
{
save();
}
else
{
log.info( "Process Order FAILED");
}
}
catch (Exception e)
{
log.severe("Order can not be completed - " + e.getMessage());
}
finally
{ // When order failed convert it back to draft so it can be processed
if( getDocStatus().equals("IN") )
{
setDocStatus("DR");
}
else if( getDocStatus().equals("CO") )
{
orderCompleted = true;
log.info( "SubCheckout - processOrder OK");
}
else
{
log.info( "SubCheckout - processOrder - unrecognized DocStatus");
}
} // try-finally
}
return orderCompleted;
} // processOrder
public BigDecimal getTaxAmt() {
BigDecimal taxAmt = Env.ZERO;
for (MOrderTax tax : getTaxes(true))
{
taxAmt = taxAmt.add(tax.getTaxAmt());
}
return taxAmt;
}
public BigDecimal getSubtotal() {
return getGrandTotal().subtract(getTaxAmt());
}
public BigDecimal getPaidAmt()
{
String sql = "SELECT sum(PayAmt) FROM C_Payment WHERE C_Order_ID = ? AND DocStatus IN ('CO','CL')";
BigDecimal received = DB.getSQLValueBD(null, sql, getC_Order_ID());
if ( received == null )
received = Env.ZERO;
sql = "SELECT sum(Amount) FROM C_CashLine WHERE C_Invoice_ID = ? ";
BigDecimal cashline = DB.getSQLValueBD(null, sql, getC_Invoice_ID());
if ( cashline != null )
received = received.add(cashline);
return received;
}
public boolean payCash(BigDecimal amt) {
MPayment payment = createPayment(MPayment.TENDERTYPE_Cash);
payment.setC_CashBook_ID(m_pos.getC_CashBook_ID());
payment.setAmount(getC_Currency_ID(), amt);
payment.setC_BankAccount_ID(m_pos.getC_BankAccount_ID());
payment.save();
payment.setDocAction(MPayment.DOCACTION_Complete);
payment.setDocStatus(MPayment.DOCSTATUS_Drafted);
if ( payment.processIt(MPayment.DOCACTION_Complete) )
{
payment.save();
return true;
}
else return false;
} // payCash
public boolean payCheck(BigDecimal amt, String accountNo, String routingNo, String checkNo)
{
MPayment payment = createPayment(MPayment.TENDERTYPE_Check);
payment.setAmount(getC_Currency_ID(), amt);
payment.setC_BankAccount_ID(m_pos.getC_BankAccount_ID());
payment.setAccountNo(accountNo);
payment.setRoutingNo(routingNo);
payment.setCheckNo(checkNo);
payment.saveEx();
payment.setDocAction(MPayment.DOCACTION_Complete);
payment.setDocStatus(MPayment.DOCSTATUS_Drafted);
if ( payment.processIt(MPayment.DOCACTION_Complete) )
{
payment.saveEx();
return true;
}
else return false;
} // payCheck
public boolean payCreditCard(BigDecimal amt, String accountName, int month, int year,
String cardNo, String cvc, String cardtype)
{
MPayment payment = createPayment(MPayment.TENDERTYPE_Check);
payment.setAmount(getC_Currency_ID(), amt);
payment.setC_BankAccount_ID(m_pos.getC_BankAccount_ID());
payment.setCreditCard(MPayment.TRXTYPE_Sales, cardtype,
cardNo, cvc, month, year);
payment.saveEx();
payment.setDocAction(MPayment.DOCACTION_Complete);
payment.setDocStatus(MPayment.DOCSTATUS_Drafted);
if ( payment.processIt(MPayment.DOCACTION_Complete) )
{
payment.saveEx();
return true;
}
else return false;
} // payCheck
private MPayment createPayment(String tenderType)
{
MPayment payment = new MPayment(getCtx(), 0, null);
payment.setAD_Org_ID(m_pos.getAD_Org_ID());
payment.setTenderType(tenderType);
payment.setC_Order_ID(getC_Order_ID());
payment.setIsReceipt(true);
payment.setC_BPartner_ID(getC_BPartner_ID());
return payment;
}
public void reload() {
load( get_TrxName());
getLines(true, "");
}
/**
* Duplicated from MPayment
* Get Accepted Credit Cards for amount
* @param amt trx amount
* @return credit cards
*/
public ValueNamePair[] getCreditCards (BigDecimal amt)
{
try
{
MPaymentProcessor[] m_mPaymentProcessors = MPaymentProcessor.find (getCtx (), null, null,
getAD_Client_ID (), getAD_Org_ID(), getC_Currency_ID (), amt, get_TrxName());
//
HashMap<String,ValueNamePair> map = new HashMap<String,ValueNamePair>(); // to eliminate duplicates
for (int i = 0; i < m_mPaymentProcessors.length; i++)
{
if (m_mPaymentProcessors[i].isAcceptAMEX ())
map.put (MPayment.CREDITCARDTYPE_Amex, getCreditCardPair (MPayment.CREDITCARDTYPE_Amex));
if (m_mPaymentProcessors[i].isAcceptDiners ())
map.put (MPayment.CREDITCARDTYPE_Diners, getCreditCardPair (MPayment.CREDITCARDTYPE_Diners));
if (m_mPaymentProcessors[i].isAcceptDiscover ())
map.put (MPayment.CREDITCARDTYPE_Discover, getCreditCardPair (MPayment.CREDITCARDTYPE_Discover));
if (m_mPaymentProcessors[i].isAcceptMC ())
map.put (MPayment.CREDITCARDTYPE_MasterCard, getCreditCardPair (MPayment.CREDITCARDTYPE_MasterCard));
if (m_mPaymentProcessors[i].isAcceptCorporate ())
map.put (MPayment.CREDITCARDTYPE_PurchaseCard, getCreditCardPair (MPayment.CREDITCARDTYPE_PurchaseCard));
if (m_mPaymentProcessors[i].isAcceptVisa ())
map.put (MPayment.CREDITCARDTYPE_Visa, getCreditCardPair (MPayment.CREDITCARDTYPE_Visa));
} // for all payment processors
//
ValueNamePair[] retValue = new ValueNamePair[map.size ()];
map.values ().toArray (retValue);
log.fine("getCreditCards - #" + retValue.length + " - Processors=" + m_mPaymentProcessors.length);
return retValue;
}
catch (Exception ex)
{
ex.printStackTrace();
return null;
}
} // getCreditCards
/**
*
* Duplicated from MPayment
* Get Type and name pair
* @param CreditCardType credit card Type
* @return pair
*/
private ValueNamePair getCreditCardPair (String CreditCardType)
{
return new ValueNamePair (CreditCardType, getCreditCardName(CreditCardType));
} // getCreditCardPair
/**
*
* Duplicated from MPayment
* Get Name of Credit Card
* @param CreditCardType credit card type
* @return Name
*/
public String getCreditCardName(String CreditCardType)
{
if (CreditCardType == null)
return "--";
else if (MPayment.CREDITCARDTYPE_MasterCard.equals(CreditCardType))
return "MasterCard";
else if (MPayment.CREDITCARDTYPE_Visa.equals(CreditCardType))
return "Visa";
else if (MPayment.CREDITCARDTYPE_Amex.equals(CreditCardType))
return "Amex";
else if (MPayment.CREDITCARDTYPE_ATM.equals(CreditCardType))
return "ATM";
else if (MPayment.CREDITCARDTYPE_Diners.equals(CreditCardType))
return "Diners";
else if (MPayment.CREDITCARDTYPE_Discover.equals(CreditCardType))
return "Discover";
else if (MPayment.CREDITCARDTYPE_PurchaseCard.equals(CreditCardType))
return "PurchaseCard";
return "?" + CreditCardType + "?";
} // getCreditCardName
} // PosOrderModel.class

View File

@ -1,18 +1,406 @@
/******************************************************************************
* 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; package org.compiere.pos;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.GridBagLayout;
import java.awt.KeyboardFocusManager;
import java.sql.Timestamp;
import java.util.Properties;
import java.util.logging.Level;
import javax.swing.JOptionPane;
import org.compiere.apps.ADialog;
import org.compiere.apps.StatusBar;
import org.compiere.apps.form.FormFrame; import org.compiere.apps.form.FormFrame;
import org.compiere.apps.form.FormPanel; import org.compiere.apps.form.FormPanel;
import org.compiere.model.MPOS;
import org.compiere.swing.CPanel;
import org.compiere.util.CLogger;
import org.compiere.util.Env;
import org.compiere.util.Msg;
public class PosPanel implements FormPanel { /**
private PosBasePanel panel; * Point of Sales Main Window.
*
* @author Comunidad de Desarrollo OpenXpertya
* *Basado en Codigo Original Modificado, Revisado y Optimizado de:
* *Copyright (c) Jorg Janke
* @version $Id: PosPanel.java,v 1.10 2004/07/12 04:10:04 jjanke Exp $
*/
public class PosPanel extends CPanel
implements FormPanel
{
/**
*
*/
private static final long serialVersionUID = -3010214392188209281L;
public void dispose() { /**
panel.dispose(); * Constructor - see init
*/
public PosPanel()
{
super (new GridBagLayout());
originalKeyboardFocusManager = KeyboardFocusManager.getCurrentKeyboardFocusManager();
m_focusMgr = new PosKeyboardFocusManager();
KeyboardFocusManager.setCurrentKeyboardFocusManager(m_focusMgr);
} // PosPanel
/** Window No */
private int m_WindowNo = 0;
/** FormFrame */
private FormFrame m_frame;
/** Logger */
private CLogger log = CLogger.getCLogger(getClass());
/** Context */
private Properties m_ctx = Env.getCtx();
/** Sales Rep */
private int m_SalesRep_ID = 0;
/** POS Model */
protected MPOS p_pos = null;
/** Keyoard Focus Manager */
private PosKeyboardFocusManager m_focusMgr = null;
/** Status Bar */
protected StatusBar f_status = new StatusBar();
/** Customer Panel */
protected SubBPartner f_bpartner = null;
/** Sales Rep Panel */
protected SubSalesRep f_salesRep = null;
/** Current Line */
protected SubCurrentLine f_curLine = null;
/** Product Selection */
protected SubProduct f_product = null;
/** All Lines */
protected SubLines f_lines = null;
/** Function Keys */
protected SubFunctionKeys f_functionKeys = null;
/** Checkout */
protected SubCheckout f_checkout = null;
/** Basic Keys */
// 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
* @param frame parent frame
*/
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;
m_frame = frame;
//
try
{
if (!dynInit())
{
dispose();
frame.dispose();
return;
}
frame.getContentPane().add(this, BorderLayout.CENTER);
frame.getContentPane().add(f_status, BorderLayout.SOUTH);
this.setPreferredSize(new Dimension (850-20,500-20));
}
catch(Exception e)
{
log.log(Level.SEVERE, "init", e);
}
log.config( "PosPanel.init - " + getPreferredSize());
m_focusMgr.start();
} // init
/**
* Dispose - Free Resources
*/
public void dispose()
{
if (m_focusMgr != null)
m_focusMgr.stop();
m_focusMgr = null;
KeyboardFocusManager.setCurrentKeyboardFocusManager(originalKeyboardFocusManager);
//
if (f_bpartner != null)
f_bpartner.dispose();
f_bpartner = null;
if (f_salesRep != null)
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();
f_product = null;
if (f_lines != null)
f_lines.dispose();
f_lines = null;
if (f_functionKeys != null)
f_functionKeys.dispose();
f_functionKeys = null;
if (f_checkout != null)
f_checkout.dispose();
f_checkout = null;
/* 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;
m_ctx = null;
} // dispose
/**************************************************************************
* Dynamic Init.
* PosPanel has a GridBagLayout.
* The Sub Panels return their position
*/
private boolean dynInit()
{
if (!setMPOS())
return false;
// Create Sub Panels
f_bpartner = new SubBPartner (this);
add (f_bpartner, f_bpartner.getGridBagConstraints());
//
f_salesRep = new SubSalesRep (this);
add (f_salesRep, f_salesRep.getGridBagConstraints());
//
f_curLine = new SubCurrentLine (this);
add (f_curLine, f_curLine.getGridBagConstraints());
//
f_product = new SubProduct (this);
add (f_product, f_product.getGridBagConstraints());
//
f_lines = new SubLines (this);
add (f_lines, f_lines.getGridBagConstraints());
//
f_functionKeys = new SubFunctionKeys (this);
add (f_functionKeys, f_functionKeys.getGridBagConstraints());
//
f_checkout = new SubCheckout (this);
add (f_checkout, f_checkout.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());
//
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
/**
* Set MPOS
* @return true if found/set
*/
private boolean setMPOS()
{
MPOS[] poss = null;
if (m_SalesRep_ID == 100) // superUser
poss = getPOSs (0);
else
poss = getPOSs (m_SalesRep_ID);
//
if (poss.length == 0)
{
ADialog.error(m_WindowNo, m_frame, "NoPOSForUser");
return false;
}
else if (poss.length == 1)
{
p_pos = poss[0];
return true;
}
// Select POS
String msg = Msg.getMsg(m_ctx, "SelectPOS");
String title = Env.getHeader(m_ctx, m_WindowNo);
Object selection = JOptionPane.showInputDialog(m_frame, msg, title,
JOptionPane.QUESTION_MESSAGE, null, poss, poss[0]);
if (selection != null)
{
p_pos = (MPOS)selection;
return true;
}
return false;
} // setMPOS
/**
* Get POSs for specific Sales Rep or all
* @param SalesRep_ID
* @return array of POS
*/
private MPOS[] getPOSs (int SalesRep_ID)
{
String pass_field = "SalesRep_ID";
int pass_ID = SalesRep_ID;
if (SalesRep_ID==0)
{
pass_field = "AD_Client_ID";
pass_ID = Env.getAD_Client_ID(m_ctx);
}
return MPOS.getAll(m_ctx, pass_field, pass_ID);
} // getPOSs
/**
* Set Visible
* @param aFlag visible
*/
public void setVisible (boolean aFlag)
{
super.setVisible (aFlag);
f_product.f_name.requestFocus();
} // setVisible
/**
* Open Query Window
* @param panel
*/
public void openQuery (CPanel panel)
{
f_bpartner.setVisible(false);
f_salesRep.setVisible(false);
f_curLine.setVisible(false);
f_product.setVisible(false);
f_checkout.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
/**
* Close Query Window
* @param panel
*/
public void closeQuery (CPanel panel)
{
panel.setVisible(false);
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
/**************************************************************************
* Get Today's date
* @return date
*/
public Timestamp getToday()
{
return m_today;
} // getToday
/**
* New Order
*
*/
public void newOrder()
{
log.info( "PosPanel.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;
} }
public void init(int WindowNo, FormFrame frame) { /**
panel = new PosBasePanel(); * Get the properties for the process calls that it needs
panel.init(0, frame); *
* @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
}

View File

@ -1,509 +0,0 @@
/******************************************************************************
* 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.Component;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyVetoException;
import java.beans.VetoableChangeListener;
import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.Properties;
import javax.swing.DefaultComboBoxModel;
import javax.swing.DefaultListCellRenderer;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JTextField;
import javax.swing.KeyStroke;
import javax.swing.ListCellRenderer;
import javax.swing.SwingUtilities;
import javax.swing.border.TitledBorder;
import javax.swing.text.MaskFormatter;
import net.miginfocom.swing.MigLayout;
import org.adempiere.plaf.AdempierePLAF;
import org.compiere.apps.ADialog;
import org.compiere.apps.AEnv;
import org.compiere.apps.AppsAction;
import org.compiere.model.MCurrency;
import org.compiere.model.MLookup;
import org.compiere.model.MLookupFactory;
import org.compiere.model.MPOS;
import org.compiere.model.MPOSKey;
import org.compiere.model.MPayment;
import org.compiere.model.MPaymentValidate;
import org.compiere.swing.CButton;
import org.compiere.swing.CComboBox;
import org.compiere.swing.CDialog;
import org.compiere.swing.CLabel;
import org.compiere.swing.CPanel;
import org.compiere.swing.CTextField;
import org.compiere.util.DB;
import org.compiere.util.DisplayType;
import org.compiere.util.Env;
import org.compiere.util.Msg;
import org.compiere.util.ValueNamePair;
public class PosPayment extends CDialog implements PosKeyListener, VetoableChangeListener, ActionListener {
/**
*
*/
private static final long serialVersionUID = 1961106531807910948L;
@Override
public void actionPerformed(ActionEvent e) {
if ( e.getSource().equals(fTenderAmt) || e.getSource().equals(fPayAmt) )
{
BigDecimal tender = new BigDecimal( fTenderAmt.getText() );
BigDecimal pay = new BigDecimal( fPayAmt.getText() );
if ( tender.compareTo(Env.ZERO) != 0 )
{
fReturnAmt.setValue(tender.subtract(pay));
}
return;
}
if ( e.getSource().equals(f_bProcess))
{
processPayment();
}
if ( e.getSource().equals(f_bCancel))
{
dispose();
return;
}
setTotals();
super.actionPerformed(e);
}
private void processPayment() {
try {
String tenderType = ((ValueNamePair) tenderTypePick.getValue()).getID();
BigDecimal amt = new BigDecimal(fPayAmt.getText());
if ( tenderType.equals(MPayment.TENDERTYPE_Cash) )
{
p_posPanel.m_order.payCash(amt);
}
else if ( tenderType.equals(MPayment.TENDERTYPE_Check) )
{
p_posPanel.m_order.payCheck(amt,fCheckAccountNo.getText(), fCheckRouteNo.getText(), fCheckNo.getText());
p_posPanel.f_order.openCashDrawer();
}
else if ( tenderType.equals(MPayment.TENDERTYPE_CreditCard) )
{
String error = null;
error = MPaymentValidate.validateCreditCardExp(fCCardMonth.getText());
if ( error != null && !error.isEmpty() )
{
ADialog.warn(0, p_posPanel, error);
return;
}
int month = MPaymentValidate.getCreditCardExpMM(fCCardMonth.getText());
int year = MPaymentValidate.getCreditCardExpYY(fCCardMonth.getText());
String type = ((ValueNamePair) fCCardType.getSelectedItem()).getValue();
error = MPaymentValidate.validateCreditCardNumber(fCCardNo.getText(), type);
if ( error != null && !error.isEmpty() )
{
ADialog.warn(0, p_posPanel, error);
return;
}
p_posPanel.m_order.payCreditCard(amt, fCCardName.getText(),
month, year, fCCardNo.getText(), fCCardVC.getText(), type);
p_posPanel.f_order.openCashDrawer();
}
else if ( tenderType.equals(MPayment.TENDERTYPE_Account) )
{
p_posPanel.m_order.payCash(amt);
p_posPanel.f_order.openCashDrawer();
}
else
{
ADialog.warn(0, this, "Unsupported payment type");
}
p_posPanel.f_order.openCashDrawer();
setTotals();
}
catch (Exception e )
{
ADialog.warn(0, this, "Payment processing failed: " + e.getMessage());
}
}
private PosBasePanel p_posPanel;
private MPOS p_pos;
private Properties p_ctx;
private PosOrderModel p_order;
private CTextField fTotal = new CTextField(10);
private CTextField fBalance = new CTextField(10);
private CComboBox tenderTypePick = new CComboBox();
private PosTextField fPayAmt;
private CButton f_bProcess;
private boolean paid = false;
private BigDecimal balance = Env.ZERO;
private PosTextField fCheckAccountNo;
private PosTextField fCheckNo;
private PosTextField fCheckRouteNo;
private PosTextField fCCardNo;
private PosTextField fCCardName;
private CComboBox fCCardType;
private PosTextField fCCardMonth;
private PosTextField fCCardVC;
private CLabel lCheckNo;
private CLabel lCheckAccountNo;
private CLabel lCheckRouteNo;
private CLabel lCCardNo;
private CLabel lCCardName;
private CLabel lCCardType;
private CLabel lCCardMonth;
private CLabel lCCardVC;
private PosTextField fTenderAmt;
private CLabel lTenderAmt;
private PosTextField fReturnAmt;
private CLabel lReturnAmt;
private CButton f_bCancel;
public PosPayment(PosBasePanel posPanel) {
super(AEnv.getFrame(posPanel),true);
p_posPanel = posPanel;
p_pos = posPanel.p_pos;
p_ctx = p_pos.getCtx();
p_order = p_posPanel.m_order;
if ( p_order == null )
dispose();
init();
pack();
setLocationByPlatform(true);
}
private void init() {
Font font = AdempierePLAF.getFont_Field().deriveFont(18f);
// North
CPanel mainPanel = new CPanel(new MigLayout("hidemode 3",
"[100:100:300, trailing]20[200:200:300,grow, trailing]"));
getContentPane().add(mainPanel);
mainPanel.setBorder(new TitledBorder(Msg.translate(p_ctx, "Payment")));
CLabel gtLabel = new CLabel(Msg.translate(p_ctx, "GrandTotal"));
mainPanel.add(gtLabel, "growx");
mainPanel.add(fTotal, "wrap, growx");
fTotal.setEditable(false);
fTotal.setFont(font);
fTotal.setHorizontalAlignment(JTextField.TRAILING);
mainPanel.add(new CLabel(Msg.translate(p_ctx, "Balance")), "growx");
mainPanel.add(fBalance, "wrap, growx");
fBalance.setEditable(false);
fBalance.setFont(font);
fBalance.setHorizontalAlignment(JTextField.TRAILING);
mainPanel.add(new CLabel(Msg.translate(p_ctx, "TenderType"), "growx"));
// Payment type selection
int AD_Column_ID = 8416; //C_Payment_v.TenderType
MLookup lookup = MLookupFactory.get(Env.getCtx(), 0, 0, AD_Column_ID, DisplayType.List);
ArrayList<Object> types = lookup.getData(true, false, true, true);
DefaultComboBoxModel typeModel = new DefaultComboBoxModel(types.toArray());
tenderTypePick.setModel(typeModel);
// default to cash payment
for (Object obj : types)
{
if ( obj instanceof ValueNamePair )
{
ValueNamePair key = (ValueNamePair) obj;
if ( key.getID().equals("X")) // Cash
tenderTypePick.setSelectedItem(key);
if ( ! "CKX".contains(key.getID() ) )
tenderTypePick.removeItem(key);
}
}
tenderTypePick.setFont(font);
tenderTypePick.addActionListener(this);
tenderTypePick.setRenderer(new ListCellRenderer() {
protected DefaultListCellRenderer defaultRenderer = new DefaultListCellRenderer();
public Component getListCellRendererComponent(JList list, Object value,
int index, boolean isSelected, boolean cellHasFocus) {
JLabel renderer = (JLabel) defaultRenderer
.getListCellRendererComponent(list, value, index, isSelected,
cellHasFocus);
renderer.setPreferredSize(new Dimension(50, 50));
renderer.setHorizontalAlignment(JLabel.CENTER);
return renderer;
}
});
mainPanel.add(tenderTypePick, "wrap, h 50!, growx");
fPayAmt = new PosTextField(Msg.translate(p_ctx, "PayAmt"), p_posPanel, p_pos.getOSNP_KeyLayout_ID(), DisplayType.getNumberFormat(DisplayType.Amount));
mainPanel.add(new CLabel(Msg.translate(p_ctx, "PayAmt")), "growx");
fPayAmt.setFont(font);
fPayAmt.setHorizontalAlignment(JTextField.TRAILING);
fPayAmt.addActionListener(this);
mainPanel.add(fPayAmt, "wrap, growx");
fTenderAmt = new PosTextField(Msg.translate(p_ctx, "AmountTendered"), p_posPanel, p_pos.getOSNP_KeyLayout_ID(), DisplayType.getNumberFormat(DisplayType.Amount));
lTenderAmt = new CLabel(Msg.translate(p_ctx, "AmountTendered"));
mainPanel.add(lTenderAmt, "growx");
fTenderAmt.addActionListener(this);
fTenderAmt.setFont(font);
fTenderAmt.setHorizontalAlignment(JTextField.TRAILING);
mainPanel.add(fTenderAmt, "wrap, growx");
fReturnAmt = new PosTextField(Msg.translate(p_ctx, "AmountReturned"), p_posPanel, p_pos.getOSNP_KeyLayout_ID(), DisplayType.getNumberFormat(DisplayType.Amount));
lReturnAmt = new CLabel(Msg.translate(p_ctx, "AmountReturned"));
mainPanel.add(lReturnAmt, "growx");
fReturnAmt.setFont(font);
fReturnAmt.setHorizontalAlignment(JTextField.TRAILING);
mainPanel.add(fReturnAmt, "wrap, growx");
fReturnAmt.setEditable(false);
fCheckRouteNo = new PosTextField(Msg.translate(p_ctx, "RoutingNo"), p_posPanel, p_pos.getOSNP_KeyLayout_ID(), new DecimalFormat("#"));
lCheckRouteNo = new CLabel(Msg.translate(p_ctx, "RoutingNo"));
mainPanel.add(lCheckRouteNo, "growx");
mainPanel.add(fCheckRouteNo, "wrap, growx");
fCheckRouteNo.setFont(font);
fCheckRouteNo.setHorizontalAlignment(JTextField.TRAILING);
fCheckAccountNo = new PosTextField(Msg.translate(p_ctx, "AccountNo"), p_posPanel, p_pos.getOSNP_KeyLayout_ID(), new DecimalFormat("#"));
lCheckAccountNo = new CLabel(Msg.translate(p_ctx, "AccountNo"));
mainPanel.add(lCheckAccountNo, "growx");
mainPanel.add(fCheckAccountNo, "wrap, growx");
fCheckAccountNo.setFont(font);
fCheckAccountNo.setHorizontalAlignment(JTextField.TRAILING);
fCheckNo = new PosTextField(Msg.translate(p_ctx, "CheckNo"), p_posPanel, p_pos.getOSNP_KeyLayout_ID(), new DecimalFormat("#"));
lCheckNo = new CLabel(Msg.translate(p_ctx, "CheckNo"));
mainPanel.add(lCheckNo, "growx");
mainPanel.add(fCheckNo, "wrap, growx");
fCheckNo.setFont(font);
fCheckNo.setHorizontalAlignment(JTextField.TRAILING);
/**
* Load Credit Cards
*/
ValueNamePair[] ccs = p_order.getCreditCards((BigDecimal) fPayAmt.getValue());
// Set Selection
fCCardType = new CComboBox(ccs);
fCCardType.setRenderer(new ListCellRenderer() {
protected DefaultListCellRenderer defaultRenderer = new DefaultListCellRenderer();
public Component getListCellRendererComponent(JList list, Object value,
int index, boolean isSelected, boolean cellHasFocus) {
JLabel renderer = (JLabel) defaultRenderer
.getListCellRendererComponent(list, value, index, isSelected,
cellHasFocus);
renderer.setPreferredSize(new Dimension(50, 50));
renderer.setHorizontalAlignment(JLabel.CENTER);
return renderer;
}
});
lCCardType = new CLabel(Msg.translate(p_ctx, "CreditCardType"));
mainPanel.add(lCCardType, "growx");
mainPanel.add(fCCardType, "h 50, wrap, growx");
fCCardType.setFont(font);
fCCardNo = new PosTextField(Msg.translate(p_ctx, "CreditCardNumber"), p_posPanel, p_pos.getOSNP_KeyLayout_ID(), new DecimalFormat("#"));
lCCardNo = new CLabel(Msg.translate(p_ctx, "CreditCardNumber"));
mainPanel.add(lCCardNo, "growx");
mainPanel.add(fCCardNo, "wrap, growx");
fCCardNo.setFont(font);
fCCardNo.setHorizontalAlignment(JTextField.TRAILING);
fCCardName = new PosTextField(Msg.translate(p_ctx, "Name"), p_posPanel, p_pos.getOSK_KeyLayout_ID());
lCCardName = new CLabel(Msg.translate(p_ctx, "Name"));
mainPanel.add(lCCardName, "growx");
mainPanel.add(fCCardName, "wrap, growx");
fCCardName.setFont(font);
fCCardName.setHorizontalAlignment(JTextField.TRAILING);
fCCardMonth = new PosTextField(Msg.translate(p_ctx, "Expires"), p_posPanel, p_pos.getOSNP_KeyLayout_ID(), new DecimalFormat("#"));
lCCardMonth = new CLabel(Msg.translate(p_ctx, "Expires"));
mainPanel.add(lCCardMonth, "growx");
mainPanel.add(fCCardMonth, "wrap, w 75!");
fCCardMonth.setFont(font);
fCCardMonth.setHorizontalAlignment(JTextField.TRAILING);
fCCardVC = new PosTextField(Msg.translate(p_ctx, "CVC"), p_posPanel, p_pos.getOSNP_KeyLayout_ID(), new DecimalFormat("#"));
lCCardVC = new CLabel(Msg.translate(p_ctx, "CVC"));
mainPanel.add(lCCardVC, "growx");
mainPanel.add(fCCardVC, "wrap, w 75!");
fCCardVC.setFont(font);
fCCardVC.setHorizontalAlignment(JTextField.TRAILING);
AppsAction actCancel = new AppsAction("Cancel", KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0), false);
actCancel.setDelegate(this);
f_bCancel = (CButton)actCancel.getButton();
f_bCancel.setFocusable(false);
mainPanel.add (f_bCancel, "h 50!, w 50!, skip, split 2, trailing");
AppsAction act = new AppsAction("Ok", KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0), false);
act.setDelegate(this);
f_bProcess = (CButton)act.getButton();
f_bProcess.setFocusable(false);
mainPanel.add (f_bProcess, "h 50!, w 50!");
pack();
setTotals();
}
private void setTotals() {
String tenderType = ((ValueNamePair) tenderTypePick.getValue()).getID();
boolean cash = MPayment.TENDERTYPE_Cash.equals(tenderType);
boolean check = MPayment.TENDERTYPE_Check.equals(tenderType);
boolean creditcard = MPayment.TENDERTYPE_CreditCard.equals(tenderType);
boolean account = MPayment.TENDERTYPE_Account.equals(tenderType);
fTenderAmt.setVisible(cash);
fReturnAmt.setVisible(cash);
lTenderAmt.setVisible(cash);
lReturnAmt.setVisible(cash);
fCheckAccountNo.setVisible(check);
fCheckNo.setVisible(check);
fCheckRouteNo.setVisible(check);
lCheckAccountNo.setVisible(check);
lCheckNo.setVisible(check);
lCheckRouteNo.setVisible(check);
fCCardMonth.setVisible(creditcard);
fCCardName.setVisible(creditcard);
fCCardNo.setVisible(creditcard);
fCCardType.setVisible(creditcard);
fCCardVC.setVisible(creditcard);
lCCardMonth.setVisible(creditcard);
lCCardName.setVisible(creditcard);
lCCardNo.setVisible(creditcard);
lCCardType.setVisible(creditcard);
lCCardVC.setVisible(creditcard);
fTotal.setValue(p_order.getGrandTotal());
BigDecimal received = p_order.getPaidAmt();
balance = p_order.getGrandTotal().subtract(received);
balance = balance.setScale(MCurrency.getStdPrecision(p_ctx, p_order.getC_Currency_ID()));
if ( balance.compareTo(Env.ZERO) <= 0 )
{
paid = true;
if ( balance.compareTo(Env.ZERO) < 0 )
ADialog.warn(0, this, Msg.getMsg(p_ctx, "Change") + ": " + balance);
dispose();
}
fBalance.setValue(balance);
fPayAmt.setValue(balance);
if ( !MPayment.TENDERTYPE_Cash.equals(tenderType) )
{
fPayAmt.requestFocusInWindow();
SwingUtilities.invokeLater(new Runnable() {
public void run() {
fPayAmt.selectAll();
}
});
}
else
{
fTenderAmt.requestFocusInWindow();
}
pack();
}
public void keyReturned(MPOSKey key) {
String text = key.getText();
String payAmt = fPayAmt.getText();
String selected = fPayAmt.getSelectedText();
if ( selected != null && !selected.isEmpty() )
{
payAmt = payAmt.replaceAll(selected, "");
}
if ( text != null && !text.isEmpty() )
{
if ( text.equals(".") && payAmt.indexOf(".") == -1 )
{
fPayAmt.setText(payAmt + text);
return;
}
try
{
Integer.parseInt(text); // test if number
fPayAmt.setText(payAmt + text);
}
catch (NumberFormatException e)
{
// ignore non-numbers
}
}
}
public static boolean pay(PosBasePanel posPanel) {
PosPayment pay = new PosPayment(posPanel);
pay.setVisible(true);
return pay.isPaid();
}
private boolean isPaid() {
return paid ;
}
public void vetoableChange(PropertyChangeEvent arg0)
throws PropertyVetoException {
// TODO Auto-generated method stub
}
}

View File

@ -1,139 +0,0 @@
/******************************************************************************
* 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.HeadlessException;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.Properties;
import javax.swing.KeyStroke;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import org.compiere.apps.AEnv;
import org.compiere.apps.AppsAction;
import org.compiere.apps.ConfirmPanel;
import org.compiere.minigrid.MiniTable;
import org.compiere.model.MPOS;
import org.compiere.swing.CButton;
import org.compiere.swing.CDialog;
import org.compiere.swing.CPanel;
import org.compiere.swing.CScrollPane;
import org.compiere.util.CLogger;
import org.compiere.util.Env;
public abstract class PosQuery extends CDialog implements MouseListener, ListSelectionListener, ActionListener {
protected Properties p_ctx;
/** POS Panel */
protected PosBasePanel p_posPanel = null;
/** Underlying POS Model */
protected MPOS p_pos = null;
/** The Table */
protected PosTable m_table;
protected CPanel northPanel;
protected CScrollPane centerScroll;
protected ConfirmPanel confirm;
protected CButton f_up;
protected CButton f_down;
/** Logger */
protected static CLogger log = CLogger.getCLogger(QueryProduct.class);
public PosQuery() throws HeadlessException {
super();
}
protected abstract void close();
public abstract void reset();
public abstract void actionPerformed(ActionEvent e);
public void dispose() {
removeAll();
northPanel = null;
centerScroll = null;
confirm = null;
m_table = null;
super.dispose();
}
protected abstract void init();
protected abstract void enableButtons();
/**
* Constructor
*/
public PosQuery (PosBasePanel posPanel)
{
super(AEnv.getFrame(posPanel), true);
p_posPanel = posPanel;
p_pos = posPanel.p_pos;
p_ctx = p_pos.getCtx();
init();
pack();
setLocationByPlatform(true);
} // PosQueryBPartner
/**
* Mouse Clicked
* @param e event
*/
public void mouseClicked(MouseEvent e)
{
// Single click with selected row => exit
if (e.getClickCount() > 0 && 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) {}
/**
* Table selection changed
* @param e event
*/
public void valueChanged (ListSelectionEvent e)
{
if (e.getValueIsAdjusting())
return;
enableButtons();
} // valueChanged
/**
* Create Action Button
* @param action action
* @return button
*/
protected CButton createButtonAction(String action, KeyStroke accelerator) {
AppsAction act = new AppsAction(action, accelerator, false);
act.setDelegate(this);
CButton button = (CButton)act.getButton();
button.setPreferredSize(new Dimension(WIDTH, HEIGHT));
button.setMinimumSize(getPreferredSize());
button.setMaximumSize(getPreferredSize());
button.setFocusable(false);
return button;
} // getButtonAction
}

View File

@ -31,10 +31,12 @@ import org.compiere.util.Env;
/** /**
* POS Sub Panel Base Class. * POS Sub Panel Base Class.
* The Panel knows where to position itself in the POS Panel
*
* @author Comunidad de Desarrollo OpenXpertya * @author Comunidad de Desarrollo OpenXpertya
* *Basado en Codigo Original Modificado, Revisado y Optimizado de: * *Basado en Codigo Original Modificado, Revisado y Optimizado de:
* *Copyright (c) Jorg Janke * *Copyright (c) Jorg Janke
* * @version $Id: PosSubPanel.java,v 1.3 2004/07/12 04:10:04 jjanke Exp $
*/ */
public abstract class PosSubPanel extends CPanel public abstract class PosSubPanel extends CPanel
implements ActionListener implements ActionListener
@ -48,7 +50,7 @@ public abstract class PosSubPanel extends CPanel
* Constructor * Constructor
* @param posPanel POS Panel * @param posPanel POS Panel
*/ */
public PosSubPanel (PosBasePanel posPanel) public PosSubPanel (PosPanel posPanel)
{ {
super(); super();
p_posPanel = posPanel; p_posPanel = posPanel;
@ -57,23 +59,46 @@ public abstract class PosSubPanel extends CPanel
} // PosSubPanel } // PosSubPanel
/** POS Panel */ /** POS Panel */
protected PosBasePanel p_posPanel; protected PosPanel p_posPanel = null;
/** Underlying POS Model */ /** Underlying POS Model */
protected MPOS p_pos; protected MPOS p_pos = null;
/** Position of SubPanel in Main */
protected GridBagConstraints p_position = null;
/** Context */ /** Context */
protected Properties p_ctx = Env.getCtx(); protected Properties p_ctx = Env.getCtx();
/** Button Width = 50 */ /** Button Width = 40 */
private static final int WIDTH = 50; private static final int WIDTH = 45;
/** Button Height = 50 */ /** Button Height = 40 */
private static final int HEIGHT = 50; private static final int HEIGHT = 35;
/** Inset 1all */
public static Insets INSETS1 = new Insets(1,1,1,1);
/** Inset 2all */
public static Insets INSETS2 = new Insets(2,2,2,2);
/** /**
* Initialize * Initialize
*/ */
protected abstract void init(); protected abstract void init();
/**
* Get Panel Position
*/
protected GridBagConstraints getGridBagConstraints()
{
if (p_position == null)
{
p_position = new GridBagConstraints();
p_position.anchor = GridBagConstraints.NORTHWEST;
p_position.fill = GridBagConstraints.BOTH;
p_position.weightx = 0.1;
p_position.weighty = 0.1;
}
return p_position;
} // getGridBagConstraints
/** /**
* Dispose - Free Resources * Dispose - Free Resources
*/ */
@ -124,6 +149,6 @@ public abstract class PosSubPanel extends CPanel
*/ */
public void actionPerformed (ActionEvent e) public void actionPerformed (ActionEvent e)
{ {
} // actionPerformed } // actinPerformed
} // PosSubPanel } // PosSubPanel

View File

@ -1,43 +0,0 @@
package org.compiere.pos;
import java.awt.Container;
import java.awt.Dimension;
import javax.swing.JScrollPane;
import javax.swing.JViewport;
import javax.swing.ListSelectionModel;
import org.compiere.minigrid.MiniTable;
public class PosTable extends MiniTable {
/**
*
*/
private static final long serialVersionUID = 7884238751207398699L;
public PosTable() {
super();
setRowSelectionAllowed(true);
setColumnSelectionAllowed(false);
setMultiSelection(false);
setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
setRowHeight(30);
setAutoResize(false);
}
public void growScrollbars() {
// fatter scroll bars
Container p = getParent();
if (p instanceof JViewport) {
Container gp = p.getParent();
if (gp instanceof JScrollPane) {
JScrollPane scrollPane = (JScrollPane) gp;
scrollPane.getVerticalScrollBar().setPreferredSize(new Dimension(30,0));
scrollPane.getHorizontalScrollBar().setPreferredSize(new Dimension(0,30));
}
}
}
}

View File

@ -1,92 +0,0 @@
/******************************************************************************
* 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.event.MouseEvent;
import java.awt.event.MouseListener;
import java.text.Format;
import javax.swing.JFormattedTextField;
import javax.swing.text.DefaultFormatterFactory;
/**
* Formatted Text field with on-screen keyboard support
* @author Paul Bowden
* Adaxa Pty Ltd
*
*/
public class PosTextField extends JFormattedTextField implements MouseListener {
/**
*
*/
private static final long serialVersionUID = -2453719110038264481L;
private DefaultFormatterFactory formatFactory = new DefaultFormatterFactory();
PosBasePanel pos = null;
int keyLayoutId = 0;
private String title;
public PosTextField(String title, PosBasePanel pos, final int posKeyLayout_ID, Format format ) {
super(format);
if ( posKeyLayout_ID > 0 )
addMouseListener(this);
keyLayoutId = posKeyLayout_ID;
this.pos = pos;
this.title = title;
}
public PosTextField(String title, PosBasePanel pos, final int posKeyLayout_ID, AbstractFormatter formatter ) {
super(formatter);
if ( posKeyLayout_ID > 0 )
addMouseListener(this);
keyLayoutId = posKeyLayout_ID;
this.pos = pos;
this.title = title;
}
public PosTextField(String title, PosBasePanel pos, final int posKeyLayout_ID) {
super();
if ( posKeyLayout_ID > 0 )
addMouseListener(this);
keyLayoutId = posKeyLayout_ID;
this.pos = pos;
this.title = title;
}
public void mouseReleased(MouseEvent arg0) {}
public void mousePressed(MouseEvent arg0) {}
public void mouseExited(MouseEvent arg0) {}
public void mouseEntered(MouseEvent arg0) {}
public void mouseClicked(MouseEvent arg0) {
if ( isEnabled() && isEditable() )
{
POSKeyboard keyboard = pos.getKeyboard(keyLayoutId);
keyboard.setTitle(title);
keyboard.setPosTextField(this);
keyboard.setVisible(true);
fireActionPerformed();
}
}
}

View File

@ -14,16 +14,21 @@
package org.compiere.pos; package org.compiere.pos;
import java.awt.Dimension; import java.awt.BorderLayout;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent; import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent; import java.awt.event.KeyEvent;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.KeyStroke; import javax.swing.KeyStroke;
import javax.swing.ListSelectionModel;
import javax.swing.border.TitledBorder; import javax.swing.border.TitledBorder;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import net.miginfocom.swing.MigLayout; import org.compiere.apps.ConfirmPanel;
import org.compiere.minigrid.ColumnInfo; import org.compiere.minigrid.ColumnInfo;
import org.compiere.minigrid.IDColumn; import org.compiere.minigrid.IDColumn;
import org.compiere.minigrid.MiniTable; import org.compiere.minigrid.MiniTable;
@ -45,7 +50,8 @@ import org.compiere.util.Msg;
* *Copyright (c) Jorg Janke * *Copyright (c) Jorg Janke
* @version $Id: QueryBPartner.java,v 1.1 2004/07/12 04:10:04 jjanke Exp $ * @version $Id: QueryBPartner.java,v 1.1 2004/07/12 04:10:04 jjanke Exp $
*/ */
public class QueryBPartner extends PosQuery public class QueryBPartner extends PosSubPanel
implements ActionListener, MouseListener, ListSelectionListener
{ {
/** /**
* *
@ -55,22 +61,29 @@ public class QueryBPartner extends PosQuery
/** /**
* Constructor * Constructor
*/ */
public QueryBPartner (PosBasePanel posPanel) public QueryBPartner (PosPanel posPanel)
{ {
super(posPanel); super(posPanel);
} // PosQueryBPartner } // PosQueryBPartner
/** The Table */
private MiniTable m_table;
private PosTextField f_value; private CPanel northPanel;
private PosTextField f_name; private CScrollPane centerScroll;
private PosTextField f_contact; private ConfirmPanel confirm;
private PosTextField f_email;
private PosTextField f_phone; private CTextField f_value;
private CTextField f_name;
private CTextField f_contact;
private CTextField f_email;
private CTextField f_phone;
private CTextField f_city; private CTextField f_city;
private CButton f_up;
private CButton f_down;
private int m_C_BPartner_ID; private int m_C_BPartner_ID;
private CButton f_refresh;
private CButton f_ok;
private CButton f_cancel;
/** Logger */ /** Logger */
private static CLogger log = CLogger.getCLogger(QueryBPartner.class); private static CLogger log = CLogger.getCLogger(QueryBPartner.class);
@ -81,6 +94,8 @@ public class QueryBPartner extends PosQuery
new ColumnInfo(" ", "C_BPartner_ID", IDColumn.class), new ColumnInfo(" ", "C_BPartner_ID", IDColumn.class),
new ColumnInfo(Msg.translate(Env.getCtx(), "Value"), "Value", String.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(), "Name"), "Name", 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(), "Email"), "Email", String.class),
new ColumnInfo(Msg.translate(Env.getCtx(), "Phone"), "Phone", String.class), new ColumnInfo(Msg.translate(Env.getCtx(), "Phone"), "Phone", String.class),
new ColumnInfo(Msg.translate(Env.getCtx(), "Postal"), "Postal", String.class), new ColumnInfo(Msg.translate(Env.getCtx(), "Postal"), "Postal", String.class),
@ -96,89 +111,141 @@ public class QueryBPartner extends PosQuery
*/ */
protected void init() protected void init()
{ {
CPanel panel = new CPanel(); setLayout(new BorderLayout(5,5));
setVisible(false);
panel.setLayout(new MigLayout("fill"));
getContentPane().add(panel);
// North // North
northPanel = new CPanel(new MigLayout("fill","", "[50][50][]")); northPanel = new CPanel(new GridBagLayout());
panel.add (northPanel, "north"); add (northPanel, BorderLayout.NORTH);
northPanel.setBorder(new TitledBorder(Msg.getMsg(p_ctx, "Query"))); 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 lvalue = new CLabel(Msg.translate(p_ctx, "Value")); CLabel lvalue = new CLabel(Msg.translate(p_ctx, "Value"));
northPanel.add (lvalue, " growy"); gbc.anchor = GridBagConstraints.EAST;
f_value = new PosTextField("", p_posPanel, p_pos.getOSK_KeyLayout_ID()); northPanel.add (lvalue, gbc);
f_value = new CTextField(10);
lvalue.setLabelFor(f_value); lvalue.setLabelFor(f_value);
northPanel.add(f_value, "h 30, w 200"); gbc.anchor = GridBagConstraints.WEST;
northPanel.add(f_value, gbc);
f_value.addActionListener(this); f_value.addActionListener(this);
// //
CLabel lcontact = new CLabel(Msg.translate(p_ctx, "Contact")); CLabel lcontact = new CLabel(Msg.translate(p_ctx, "Contact"));
northPanel.add (lcontact, " growy"); gbc.anchor = GridBagConstraints.EAST;
f_contact = new PosTextField("", p_posPanel, p_pos.getOSK_KeyLayout_ID()); northPanel.add (lcontact, gbc);
f_contact = new CTextField(10);
lcontact.setLabelFor(f_contact); lcontact.setLabelFor(f_contact);
northPanel.add(f_contact, "h 30, w 200"); gbc.anchor = GridBagConstraints.WEST;
northPanel.add(f_contact, gbc);
f_contact.addActionListener(this); f_contact.addActionListener(this);
// //
CLabel lphone = new CLabel(Msg.translate(p_ctx, "Phone")); CLabel lphone = new CLabel(Msg.translate(p_ctx, "Phone"));
northPanel.add (lphone, " growy"); gbc.anchor = GridBagConstraints.EAST;
f_phone = new PosTextField("", p_posPanel, p_pos.getOSK_KeyLayout_ID()); northPanel.add (lphone, gbc);
f_phone = new CTextField(10);
lphone.setLabelFor(f_phone); lphone.setLabelFor(f_phone);
northPanel.add(f_phone, "h 30, w 200, wrap"); gbc.anchor = GridBagConstraints.WEST;
northPanel.add(f_phone, gbc);
f_phone.addActionListener(this); f_phone.addActionListener(this);
// //
gbc.gridy = 1;
CLabel lname = new CLabel(Msg.translate(p_ctx, "Name")); CLabel lname = new CLabel(Msg.translate(p_ctx, "Name"));
northPanel.add (lname, " growy"); gbc.anchor = GridBagConstraints.EAST;
f_name = new PosTextField("", p_posPanel, p_pos.getOSK_KeyLayout_ID()); northPanel.add (lname, gbc);
f_name = new CTextField(10);
lname.setLabelFor(f_name); lname.setLabelFor(f_name);
northPanel.add(f_name, "h 30, w 200"); gbc.anchor = GridBagConstraints.WEST;
northPanel.add(f_name, gbc);
f_name.addActionListener(this); f_name.addActionListener(this);
// //
CLabel lemail = new CLabel(Msg.translate(p_ctx, "Email")); CLabel lemail = new CLabel(Msg.translate(p_ctx, "Email"));
northPanel.add (lemail, " growy"); gbc.anchor = GridBagConstraints.EAST;
f_email = new PosTextField("", p_posPanel, p_pos.getOSK_KeyLayout_ID()); northPanel.add (lemail, gbc);
f_email = new CTextField(10);
lemail.setLabelFor(f_email); lemail.setLabelFor(f_email);
northPanel.add(f_email, "h 30, w 200"); gbc.anchor = GridBagConstraints.WEST;
northPanel.add(f_email, gbc);
f_email.addActionListener(this); f_email.addActionListener(this);
// //
CLabel lcity = new CLabel(Msg.translate(p_ctx, "City")); CLabel lcity = new CLabel(Msg.translate(p_ctx, "City"));
northPanel.add (lcity, " growy"); gbc.anchor = GridBagConstraints.EAST;
northPanel.add (lcity, gbc);
f_city = new CTextField(10); f_city = new CTextField(10);
lcity.setLabelFor(f_city); lcity.setLabelFor(f_city);
northPanel.add(f_city, "h 30, w 200"); gbc.anchor = GridBagConstraints.WEST;
northPanel.add(f_city, gbc);
f_city.addActionListener(this); f_city.addActionListener(this);
// //
gbc.gridy = 0;
f_refresh = createButtonAction("Refresh", KeyStroke.getKeyStroke(KeyEvent.VK_F5, 0)); gbc.gridheight = 2;
northPanel.add(f_refresh, "w 50!, h 50!, wrap, alignx trailing"); gbc.anchor = GridBagConstraints.EAST;
gbc.weightx = .1;
f_up = createButtonAction("Previous", KeyStroke.getKeyStroke(KeyEvent.VK_UP, 0)); f_up = createButtonAction("Previous", KeyStroke.getKeyStroke(KeyEvent.VK_UP, 0));
northPanel.add(f_up, "w 50!, h 50!, span, split 4"); northPanel.add(f_up, gbc);
gbc.weightx = 0;
f_down = createButtonAction("Next", KeyStroke.getKeyStroke(KeyEvent.VK_DOWN, 0)); f_down = createButtonAction("Next", KeyStroke.getKeyStroke(KeyEvent.VK_DOWN, 0));
northPanel.add(f_down, "w 50!, h 50!"); northPanel.add(f_down, gbc);
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!");
// Confirm
confirm = new ConfirmPanel (true, true, true, false, false, false, false);
add (confirm, BorderLayout.SOUTH);
confirm.addActionListener(this);
// Center // Center
m_table = new PosTable(); m_table = new MiniTable();
String sql = m_table.prepareTable (s_layout, s_sqlFrom, String sql = m_table.prepareTable (s_layout, s_sqlFrom,
s_sqlWhere, false, "RV_BPartner") s_sqlWhere, false, "RV_BPartner")
+ " ORDER BY Value"; + " ORDER BY Value";
m_table.setRowSelectionAllowed(true);
m_table.setColumnSelectionAllowed(false);
m_table.setMultiSelection(false);
m_table.addMouseListener(this); m_table.addMouseListener(this);
m_table.getSelectionModel().addListSelectionListener(this); m_table.getSelectionModel().addListSelectionListener(this);
enableButtons(); enableButtons();
centerScroll = new CScrollPane(m_table); centerScroll = new CScrollPane(m_table);
panel.add (centerScroll, "growx, growy"); add (centerScroll, BorderLayout.CENTER);
m_table.growScrollbars();
panel.setPreferredSize(new Dimension(800,600));
f_value.requestFocus();
} // init } // 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_value.requestFocus();
} // setVisible
/** /**
* Action Listener * Action Listener
@ -200,7 +267,13 @@ public class QueryBPartner extends PosQuery
} }
else if ("Reset".equals(e.getActionCommand())) else if ("Reset".equals(e.getActionCommand()))
{ {
reset(); f_value.setText(null);
f_name.setText(null);
f_contact.setText(null);
f_email.setText(null);
f_phone.setText(null);
f_city.setText(null);
setResults(new MBPartnerInfo[0]);
return; return;
} }
else if ("Previous".equalsIgnoreCase(e.getActionCommand())) else if ("Previous".equalsIgnoreCase(e.getActionCommand()))
@ -241,11 +314,22 @@ public class QueryBPartner extends PosQuery
m_table.loadTable(results); m_table.loadTable(results);
enableButtons(); enableButtons();
} // setResults } // setResults
/**
* Table selection changed
* @param e event
*/
public void valueChanged (ListSelectionEvent e)
{
if (e.getValueIsAdjusting())
return;
enableButtons();
} // valueChanged
/** /**
* Enable/Set Buttons and set ID * Enable/Set Buttons and set ID
*/ */
protected void enableButtons() private void enableButtons()
{ {
m_C_BPartner_ID = -1; m_C_BPartner_ID = -1;
int row = m_table.getSelectedRow(); int row = m_table.getSelectedRow();
@ -260,41 +344,48 @@ public class QueryBPartner extends PosQuery
// m_Price = (BigDecimal)m_table.getValueAt(row, 7); // m_Price = (BigDecimal)m_table.getValueAt(row, 7);
} }
} }
f_ok.setEnabled(enabled); confirm.getOKButton().setEnabled(enabled);
log.fine("C_BPartner_ID=" + m_C_BPartner_ID); log.fine("C_BPartner_ID=" + m_C_BPartner_ID);
} // enableButtons } // 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. * Close.
* Set Values on other panels and close * Set Values on other panels and close
*/ */
protected void close() private void close()
{ {
log.fine("C_BPartner_ID=" + m_C_BPartner_ID); log.fine("C_BPartner_ID=" + m_C_BPartner_ID);
if (m_C_BPartner_ID > 0) if (m_C_BPartner_ID > 0)
{ {
p_posPanel.f_order.setC_BPartner_ID(m_C_BPartner_ID); p_posPanel.f_bpartner.setC_BPartner_ID(m_C_BPartner_ID);
// p_posPanel.f_curLine.setCurrency(m_Price); // p_posPanel.f_curLine.setCurrency(m_Price);
} }
else else
{ {
p_posPanel.f_order.setC_BPartner_ID(0); p_posPanel.f_bpartner.setC_BPartner_ID(0);
// p_posPanel.f_curLine.setPrice(Env.ZERO); // p_posPanel.f_curLine.setPrice(Env.ZERO);
} }
dispose(); p_posPanel.closeQuery(this);
} // close } // close
@Override
public void reset() {
f_value.setText(null);
f_name.setText(null);
f_contact.setText(null);
f_email.setText(null);
f_phone.setText(null);
f_city.setText(null);
setResults(new MBPartnerInfo[0]);
}
} // PosQueryBPartner } // PosQueryBPartner

View File

@ -14,17 +14,22 @@
package org.compiere.pos; package org.compiere.pos;
import java.awt.Dimension; import java.awt.BorderLayout;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent; import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent; import java.awt.event.KeyEvent;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.math.BigDecimal; import java.math.BigDecimal;
import javax.swing.KeyStroke; import javax.swing.KeyStroke;
import javax.swing.ListSelectionModel;
import javax.swing.border.TitledBorder; import javax.swing.border.TitledBorder;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import net.miginfocom.swing.MigLayout; import org.compiere.apps.ConfirmPanel;
import org.compiere.minigrid.ColumnInfo; import org.compiere.minigrid.ColumnInfo;
import org.compiere.minigrid.IDColumn; import org.compiere.minigrid.IDColumn;
import org.compiere.minigrid.MiniTable; import org.compiere.minigrid.MiniTable;
@ -46,7 +51,8 @@ import org.compiere.util.Msg;
* *Copyright (c) Jorg Janke * *Copyright (c) Jorg Janke
* @version $Id: QueryProduct.java,v 1.1 2004/07/12 04:10:04 jjanke Exp $ * @version $Id: QueryProduct.java,v 1.1 2004/07/12 04:10:04 jjanke Exp $
*/ */
public class QueryProduct extends PosQuery public class QueryProduct extends PosSubPanel
implements ActionListener, MouseListener, ListSelectionListener
{ {
/** /**
* *
@ -56,15 +62,25 @@ public class QueryProduct extends PosQuery
/** /**
* Constructor * Constructor
*/ */
public QueryProduct (PosBasePanel posPanel) public QueryProduct (PosPanel posPanel)
{ {
super(posPanel); super(posPanel);
} // PosQueryProduct } // PosQueryProduct
/** The Table */
private MiniTable m_table;
private PosTextField f_value; private CPanel northPanel;
private PosTextField f_name; private CScrollPane centerScroll;
private PosTextField f_upc; private ConfirmPanel confirm;
private PosTextField f_sku;
private CTextField f_value;
private CTextField f_name;
private CTextField f_upc;
private CTextField f_sku;
private CButton f_up;
private CButton f_down;
private int m_M_Product_ID; private int m_M_Product_ID;
private String m_ProductName; private String m_ProductName;
@ -72,9 +88,6 @@ public class QueryProduct extends PosQuery
// //
private int m_M_PriceList_Version_ID; private int m_M_PriceList_Version_ID;
private int m_M_Warehouse_ID; private int m_M_Warehouse_ID;
private CButton f_refresh;
private CButton f_ok;
private CButton f_cancel;
/** Logger */ /** Logger */
private static CLogger log = CLogger.getCLogger(QueryProduct.class); private static CLogger log = CLogger.getCLogger(QueryProduct.class);
@ -101,74 +114,124 @@ public class QueryProduct extends PosQuery
*/ */
protected void init() protected void init()
{ {
CPanel panel = new CPanel(); setLayout(new BorderLayout(5,5));
setVisible(false);
panel.setLayout(new MigLayout("fill"));
getContentPane().add(panel);
// North // North
northPanel = new CPanel(new MigLayout("fill", "", "[50][50][]")); northPanel = new CPanel(new GridBagLayout());
panel.add (northPanel, "north"); add (northPanel, BorderLayout.NORTH);
northPanel.setBorder(new TitledBorder(Msg.getMsg(p_ctx, "Query"))); 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 lvalue = new CLabel(Msg.translate(p_ctx, "Value")); CLabel lvalue = new CLabel(Msg.translate(p_ctx, "Value"));
northPanel.add (lvalue, "growy"); gbc.anchor = GridBagConstraints.EAST;
f_value = new PosTextField("", p_posPanel, p_pos.getOSK_KeyLayout_ID()); northPanel.add (lvalue, gbc);
f_value = new CTextField(20);
lvalue.setLabelFor(f_value); lvalue.setLabelFor(f_value);
northPanel.add(f_value, "h 30, w 200"); gbc.anchor = GridBagConstraints.WEST;
northPanel.add(f_value, gbc);
f_value.addActionListener(this); f_value.addActionListener(this);
// //
CLabel lupc = new CLabel(Msg.translate(p_ctx, "UPC")); CLabel lupc = new CLabel(Msg.translate(p_ctx, "UPC"));
northPanel.add (lupc, "growy"); gbc.anchor = GridBagConstraints.EAST;
f_upc = new PosTextField("", p_posPanel, p_pos.getOSK_KeyLayout_ID()); northPanel.add (lupc, gbc);
f_upc = new CTextField(15);
lupc.setLabelFor(f_upc); lupc.setLabelFor(f_upc);
northPanel.add(f_upc, "h 30, w 200, wrap"); gbc.anchor = GridBagConstraints.WEST;
northPanel.add(f_upc, gbc);
f_upc.addActionListener(this); f_upc.addActionListener(this);
// //
gbc.gridy = 1;
CLabel lname = new CLabel(Msg.translate(p_ctx, "Name")); CLabel lname = new CLabel(Msg.translate(p_ctx, "Name"));
northPanel.add (lname, "growy"); gbc.anchor = GridBagConstraints.EAST;
f_name = new PosTextField("", p_posPanel, p_pos.getOSK_KeyLayout_ID()); northPanel.add (lname, gbc);
f_name = new CTextField(20);
lname.setLabelFor(f_name); lname.setLabelFor(f_name);
northPanel.add(f_name, "h 30, w 200"); gbc.anchor = GridBagConstraints.WEST;
northPanel.add(f_name, gbc);
f_name.addActionListener(this); f_name.addActionListener(this);
// //
CLabel lsku = new CLabel(Msg.translate(p_ctx, "SKU")); CLabel lsku = new CLabel(Msg.translate(p_ctx, "SKU"));
northPanel.add (lsku, "growy"); gbc.anchor = GridBagConstraints.EAST;
f_sku = new PosTextField("", p_posPanel, p_pos.getOSK_KeyLayout_ID()); northPanel.add (lsku, gbc);
f_sku = new CTextField(15);
lsku.setLabelFor(f_sku); lsku.setLabelFor(f_sku);
northPanel.add(f_sku, "h 30, w 200"); gbc.anchor = GridBagConstraints.WEST;
northPanel.add(f_sku, gbc);
f_sku.addActionListener(this); f_sku.addActionListener(this);
// //
gbc.gridy = 0;
gbc.gridheight = 2;
f_refresh = createButtonAction("Refresh", KeyStroke.getKeyStroke(KeyEvent.VK_F5, 0)); gbc.anchor = GridBagConstraints.EAST;
northPanel.add(f_refresh, "w 50!, h 50!, wrap, alignx trailing"); gbc.weightx = .1;
f_up = createButtonAction("Previous", KeyStroke.getKeyStroke(KeyEvent.VK_UP, 0)); f_up = createButtonAction("Previous", KeyStroke.getKeyStroke(KeyEvent.VK_UP, 0));
northPanel.add(f_up, "w 50!, h 50!, span, split 4"); northPanel.add(f_up, gbc);
gbc.weightx = 0;
f_down = createButtonAction("Next", KeyStroke.getKeyStroke(KeyEvent.VK_DOWN, 0)); f_down = createButtonAction("Next", KeyStroke.getKeyStroke(KeyEvent.VK_DOWN, 0));
northPanel.add(f_down, "w 50!, h 50!"); northPanel.add(f_down, gbc);
f_ok = createButtonAction("Ok", KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0)); // Confirm
northPanel.add(f_ok, "w 50!, h 50!"); confirm = new ConfirmPanel (true, true, true, false, false, false, false);
add (confirm, BorderLayout.SOUTH);
f_cancel = createButtonAction("Cancel", KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0)); confirm.addActionListener(this);
northPanel.add(f_cancel, "w 50!, h 50!");
// Center // Center
m_table = new PosTable(); m_table = new MiniTable();
String sql = m_table.prepareTable (s_layout, s_sqlFrom, String sql = m_table.prepareTable (s_layout, s_sqlFrom,
s_sqlWhere, false, "RV_WarehousePrice") s_sqlWhere, false, "RV_WarehousePrice")
+ " ORDER BY Margin, QtyAvailable"; + " ORDER BY Margin, QtyAvailable";
m_table.setRowSelectionAllowed(true);
m_table.setColumnSelectionAllowed(false);
m_table.setMultiSelection(false);
m_table.addMouseListener(this); m_table.addMouseListener(this);
m_table.getSelectionModel().addListSelectionListener(this); m_table.getSelectionModel().addListSelectionListener(this);
enableButtons(); enableButtons();
centerScroll = new CScrollPane(m_table); centerScroll = new CScrollPane(m_table);
panel.add (centerScroll, "growx, growy,south"); add (centerScroll, BorderLayout.CENTER);
m_table.growScrollbars();
panel.setPreferredSize(new Dimension(800,600));
f_value.requestFocus();
} // init } // 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_value.requestFocus();
} // setVisible
/** /**
* Set Query Data * Set Query Data
@ -199,7 +262,11 @@ public class QueryProduct extends PosQuery
} }
else if ("Reset".equals(e.getActionCommand())) else if ("Reset".equals(e.getActionCommand()))
{ {
reset(); f_value.setText(null);
f_name.setText(null);
f_sku.setText(null);
f_upc.setText(null);
setResults(new MWarehousePrice[0]);
return; return;
} }
else if ("Previous".equalsIgnoreCase(e.getActionCommand())) else if ("Previous".equalsIgnoreCase(e.getActionCommand()))
@ -238,15 +305,24 @@ public class QueryProduct extends PosQuery
public void setResults (MWarehousePrice[] results) public void setResults (MWarehousePrice[] results)
{ {
m_table.loadTable(results); m_table.loadTable(results);
if (m_table.getRowCount() >0 )
m_table.setRowSelectionInterval(0, 0);
enableButtons(); enableButtons();
} // setResults } // setResults
/**
* Table selection changed
* @param e event
*/
public void valueChanged (ListSelectionEvent e)
{
if (e.getValueIsAdjusting())
return;
enableButtons();
} // valueChanged
/** /**
* Enable/Set Buttons and set ID * Enable/Set Buttons and set ID
*/ */
protected void enableButtons() private void enableButtons()
{ {
m_M_Product_ID = -1; m_M_Product_ID = -1;
m_ProductName = null; m_ProductName = null;
@ -263,42 +339,48 @@ public class QueryProduct extends PosQuery
m_Price = (BigDecimal)m_table.getValueAt(row, 7); m_Price = (BigDecimal)m_table.getValueAt(row, 7);
} }
} }
f_ok.setEnabled(enabled); confirm.getOKButton().setEnabled(enabled);
log.fine("M_Product_ID=" + m_M_Product_ID + " - " + m_ProductName + " - " + m_Price); log.fine("M_Product_ID=" + m_M_Product_ID + " - " + m_ProductName + " - " + m_Price);
} // enableButtons } // 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. * Close.
* Set Values on other panels and close * Set Values on other panels and close
*/ */
protected void close() private void close()
{ {
log.fine("M_Product_ID=" + m_M_Product_ID); log.fine("M_Product_ID=" + m_M_Product_ID);
if (m_M_Product_ID > 0) if (m_M_Product_ID > 0)
{ {
p_posPanel.f_curLine.setM_Product_ID(m_M_Product_ID); p_posPanel.f_product.setM_Product_ID(m_M_Product_ID);
p_posPanel.f_curLine.setPrice(m_Price); p_posPanel.f_curLine.setPrice(m_Price);
} }
else else
{ {
p_posPanel.f_curLine.setM_Product_ID(0); p_posPanel.f_product.setM_Product_ID(0);
p_posPanel.f_curLine.setPrice(Env.ZERO); p_posPanel.f_curLine.setPrice(Env.ZERO);
} }
dispose(); p_posPanel.closeQuery(this);
} // close } // close
@Override
public void reset() {
f_value.setText(null);
f_name.setText(null);
f_sku.setText(null);
f_upc.setText(null);
setResults(new MWarehousePrice[0]);
}
} // PosQueryProduct } // PosQueryProduct

View File

@ -14,35 +14,36 @@
package org.compiere.pos; package org.compiere.pos;
import java.awt.Container; import java.awt.BorderLayout;
import java.awt.Dimension; import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent; import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent; import java.awt.event.KeyEvent;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.sql.PreparedStatement; import java.sql.PreparedStatement;
import java.sql.ResultSet; import java.sql.ResultSet;
import java.sql.Timestamp; import java.sql.Timestamp;
import java.util.Properties; import java.util.Properties;
import javax.swing.JScrollPane;
import javax.swing.JViewport;
import javax.swing.KeyStroke; import javax.swing.KeyStroke;
import javax.swing.ListSelectionModel;
import javax.swing.ScrollPaneConstants;
import javax.swing.border.TitledBorder; import javax.swing.border.TitledBorder;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import net.miginfocom.swing.MigLayout; import org.compiere.apps.ConfirmPanel;
import org.compiere.grid.ed.VDate; import org.compiere.grid.ed.VDate;
import org.compiere.minigrid.ColumnInfo; import org.compiere.minigrid.ColumnInfo;
import org.compiere.minigrid.IDColumn; import org.compiere.minigrid.IDColumn;
import org.compiere.minigrid.MiniTable; import org.compiere.minigrid.MiniTable;
import org.compiere.swing.CButton; import org.compiere.swing.CButton;
import org.compiere.swing.CCheckBox;
import org.compiere.swing.CLabel; import org.compiere.swing.CLabel;
import org.compiere.swing.CPanel; import org.compiere.swing.CPanel;
import org.compiere.swing.CScrollPane; import org.compiere.swing.CScrollPane;
import org.compiere.swing.CTextField; import org.compiere.swing.CTextField;
import org.compiere.util.CLogger;
import org.compiere.util.DB; import org.compiere.util.DB;
import org.compiere.util.Env; import org.compiere.util.Env;
import org.compiere.util.Msg; import org.compiere.util.Msg;
@ -60,30 +61,41 @@ import org.compiere.util.Msg;
* *
*/ */
public class QueryTicket extends PosQuery public class QueryTicket extends PosSubPanel
implements ActionListener, MouseListener, ListSelectionListener
{ {
/** /**
* *
*/ */
private static final long serialVersionUID = 7713957495649128816L; private static final long serialVersionUID = 7713957495649128816L;
/** /**
* Constructor * Constructor
*/ */
public QueryTicket (PosBasePanel posPanel) public QueryTicket (PosPanel posPanel)
{ {
super(posPanel); super(posPanel);
} // PosQueryProduct } // PosQueryProduct
/** The Table */
private MiniTable m_table;
private PosTextField f_documentno; private CPanel northPanel;
private CScrollPane centerScroll;
private ConfirmPanel confirm;
private CTextField f_c_order_id;
private CTextField f_documentno;
private VDate f_date; private VDate f_date;
private int m_c_order_id; private CButton f_up;
private CCheckBox f_processed; private CButton f_down;
private CButton f_refresh;
private CButton f_ok;
private CButton f_cancel;
private int m_c_order_id;
/** Logger */
private static CLogger log = CLogger.getCLogger(QueryProduct.class);
/** Table Column Layout Info */ /** Table Column Layout Info */
private static ColumnInfo[] s_layout = new ColumnInfo[] private static ColumnInfo[] s_layout = new ColumnInfo[]
{ {
@ -91,94 +103,139 @@ public class QueryTicket extends PosQuery
new ColumnInfo(Msg.translate(Env.getCtx(), "DocumentNo"), "DocumentNo", String.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(), "TotalLines"), "TotalLines", BigDecimal.class),
new ColumnInfo(Msg.translate(Env.getCtx(), "GrandTotal"), "GrandTotal", 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(), "C_BPartner_ID"), "Name", String.class)
new ColumnInfo(Msg.translate(Env.getCtx(), "Processed"), "Processed", Boolean.class)
}; };
/** /**
* Set up Panel * Set up Panel
*/ */
@Override
protected void init() protected void init()
{ {
CPanel panel = new CPanel(); setLayout(new BorderLayout(5,5));
setVisible(false);
panel.setLayout(new MigLayout("fill"));
getContentPane().add(panel);
// North // North
northPanel = new CPanel(new MigLayout("fill","", "[50][50][]")); northPanel = new CPanel(new GridBagLayout());
panel.add (northPanel, "north"); add (northPanel, BorderLayout.NORTH);
northPanel.setBorder(new TitledBorder(Msg.getMsg(p_ctx, "Query"))); 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")); CLabel ldoc = new CLabel(Msg.translate(p_ctx, "DocumentNo"));
northPanel.add (ldoc, " growy"); gbc.anchor = GridBagConstraints.EAST;
f_documentno = new PosTextField("", p_posPanel, p_pos.getOSK_KeyLayout_ID()); northPanel.add (ldoc, gbc);
f_documentno = new CTextField(15);
ldoc.setLabelFor(f_documentno); ldoc.setLabelFor(f_documentno);
northPanel.add(f_documentno, "h 30, w 200"); gbc.anchor = GridBagConstraints.WEST;
northPanel.add(f_documentno, gbc);
f_documentno.addActionListener(this); f_documentno.addActionListener(this);
// //
gbc.gridy = 1;
CLabel ldate = new CLabel(Msg.translate(p_ctx, "DateOrdered")); CLabel ldate = new CLabel(Msg.translate(p_ctx, "DateOrdered"));
northPanel.add (ldate, "growy"); gbc.anchor = GridBagConstraints.EAST;
northPanel.add (ldate, gbc);
f_date = new VDate(); f_date = new VDate();
f_date.setValue(Env.getContextAsDate(Env.getCtx(), "#Date")); f_date.setValue(Env.getContextAsDate(Env.getCtx(), "#Date"));
ldate.setLabelFor(f_date); ldate.setLabelFor(f_date);
northPanel.add(f_date, "h 30, w 200"); gbc.anchor = GridBagConstraints.WEST;
northPanel.add(f_date, gbc);
f_date.addActionListener(this); f_date.addActionListener(this);
//
f_processed = new CCheckBox(Msg.translate(p_ctx, "Processed")); gbc.gridy = 0;
f_processed.setSelected(false); gbc.gridheight = 2;
northPanel.add(f_processed, ""); gbc.anchor = GridBagConstraints.EAST;
gbc.weightx = .1;
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)); f_up = createButtonAction("Previous", KeyStroke.getKeyStroke(KeyEvent.VK_UP, 0));
northPanel.add(f_up, "w 50!, h 50!, span, split 4"); northPanel.add(f_up, gbc);
gbc.weightx = 0;
f_down = createButtonAction("Next", KeyStroke.getKeyStroke(KeyEvent.VK_DOWN, 0)); f_down = createButtonAction("Next", KeyStroke.getKeyStroke(KeyEvent.VK_DOWN, 0));
northPanel.add(f_down, "w 50!, h 50!"); northPanel.add(f_down, gbc);
f_ok = createButtonAction("Ok", KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0)); // Confirm
northPanel.add(f_ok, "w 50!, h 50!"); confirm = new ConfirmPanel (true, true, true, false, false, false, false);
add (confirm, BorderLayout.SOUTH);
f_cancel = createButtonAction("Cancel", KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0)); confirm.addActionListener(this);
northPanel.add(f_cancel, "w 50!, h 50!");
// Center // Center
m_table = new PosTable(); m_table = new MiniTable();
String sql = m_table.prepareTable (s_layout, "C_Order", String sql = m_table.prepareTable (s_layout, "C_Order",
"C_POS_ID = " + p_pos.getC_POS_ID() "C_DocTypeTarget_ID" + p_pos.getC_DocType_ID()
, false, "C_Order") , false, "C_Order")
+ " ORDER BY Margin, QtyAvailable"; + " ORDER BY Margin, QtyAvailable";
m_table.setRowSelectionAllowed(true);
m_table.setColumnSelectionAllowed(false);
m_table.setMultiSelection(false);
m_table.addMouseListener(this); m_table.addMouseListener(this);
m_table.getSelectionModel().addListSelectionListener(this); m_table.getSelectionModel().addListSelectionListener(this);
enableButtons(); enableButtons();
centerScroll = new CScrollPane(m_table); centerScroll = new CScrollPane(m_table);
panel.add (centerScroll, "growx, growy"); add (centerScroll, BorderLayout.CENTER);
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 } // 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 * Action Listener
* @param e event * @param e event
*/ */
@Override
public void actionPerformed (ActionEvent e) public void actionPerformed (ActionEvent e)
{ {
log.info("PosQueryProduct.actionPerformed - " + e.getActionCommand()); log.info("PosQueryProduct.actionPerformed - " + e.getActionCommand());
if ("Refresh".equals(e.getActionCommand()) if ("Refresh".equals(e.getActionCommand())
|| e.getSource() == f_processed || e.getSource() == f_documentno || e.getSource() == f_c_order_id || e.getSource() == f_documentno
|| e.getSource() == f_date) || e.getSource() == f_date)
{ {
setResults(p_ctx, f_processed.isSelected(), f_documentno.getText(), f_date.getTimestamp()); setResults(p_ctx, f_c_order_id.getText(), f_documentno.getText(), f_date.getTimestamp());
return; return;
} }
else if ("Reset".equals(e.getActionCommand())) else if ("Reset".equals(e.getActionCommand()))
@ -210,11 +267,6 @@ public class QueryTicket extends PosQuery
m_table.getSelectionModel().setSelectionInterval(row, row); m_table.getSelectionModel().setSelectionInterval(row, row);
return; return;
} }
else if ("Cancel".equalsIgnoreCase(e.getActionCommand()))
{
dispose();
return;
}
// Exit // Exit
close(); close();
} // actionPerformed } // actionPerformed
@ -223,13 +275,12 @@ public class QueryTicket extends PosQuery
/** /**
* *
*/ */
@Override
public void reset() public void reset()
{ {
f_processed.setSelected(false); f_c_order_id.setText(null);
f_documentno.setText(null); f_documentno.setText(null);
f_date.setValue(Env.getContextAsDate(Env.getCtx(), "#Date")); f_date.setValue(Env.getContextAsDate(Env.getCtx(), "#Date"));
setResults(p_ctx, f_processed.isSelected(), f_documentno.getText(), f_date.getTimestamp()); setResults(p_ctx, f_c_order_id.getText(), f_documentno.getText(), f_date.getTimestamp());
} }
@ -237,40 +288,45 @@ public class QueryTicket extends PosQuery
* Set/display Results * Set/display Results
* @param results results * @param results results
*/ */
public void setResults (Properties ctx, boolean processed, String doc, Timestamp date) public void setResults (Properties ctx, String id, String doc, Timestamp date)
{ {
String sql = ""; String sql = "";
try try
{ {
sql = "SELECT o.C_Order_ID, o.DocumentNo, o.TotalLines, o.GrandTotal, b.Name, o.Processed" + sql = "SELECT o.C_Order_ID, o.DocumentNo, o.TotalLines, o.GrandTotal, b.Name FROM C_Order o INNER JOIN C_BPartner b ON o.C_BPartner_ID=b.C_BPartner_ID WHERE o.C_DocTypeTarget_ID = " + p_pos.getC_DocType_ID();
" FROM C_Order o INNER JOIN C_BPartner b ON o.C_BPartner_ID=b.C_BPartner_ID" + if (id != null && !id.equalsIgnoreCase(""))
" WHERE o.C_POS_ID = " + p_pos.getC_POS_ID(); sql += " AND o.C_Order_ID = " + id;
sql += " AND o.Processed = " + ( processed ? "'Y' " : "'N' ");
if (doc != null && !doc.equalsIgnoreCase("")) if (doc != null && !doc.equalsIgnoreCase(""))
sql += " AND o.DocumentNo = '" + doc + "'"; sql += " AND o.DocumentNo = '" + doc + "'";
if ( date != null ) sql += " AND o.DateOrdered = ? Order By o.DocumentNo";
sql += " AND o.DateOrdered = ? Order By o.DocumentNo DESC";
PreparedStatement pstm = DB.prepareStatement(sql, null); PreparedStatement pstm = DB.prepareStatement(sql, null);
if ( date != null ) pstm.setTimestamp(1, date);
pstm.setTimestamp(1, date);
ResultSet rs = pstm.executeQuery(); ResultSet rs = pstm.executeQuery();
m_table.loadTable(rs); m_table.loadTable(rs);
if ( m_table.getRowCount() > 0 )
m_table.setRowSelectionInterval(0, 0);
enableButtons(); enableButtons();
} }
catch(Exception e) catch(Exception e)
{ {
log.severe("QueryTicket.setResults: " + e + " -> " + sql); log.severe("QueryTicket.setResults: " + e + " -> " + sql);
} }
} // setResults } // setResults
/**
* Table selection changed
* @param e event
*/
public void valueChanged (ListSelectionEvent e)
{
if (e.getValueIsAdjusting())
return;
enableButtons();
} // valueChanged
/** /**
* Enable/Set Buttons and set ID * Enable/Set Buttons and set ID
*/ */
protected void enableButtons() private void enableButtons()
{ {
m_c_order_id = -1; m_c_order_id = -1;
int row = m_table.getSelectedRow(); int row = m_table.getSelectedRow();
@ -283,28 +339,44 @@ public class QueryTicket extends PosQuery
m_c_order_id = ID.intValue(); m_c_order_id = ID.intValue();
} }
} }
confirm.getOKButton().setEnabled(enabled);
f_ok.setEnabled(enabled);
log.info("ID=" + m_c_order_id); log.info("ID=" + m_c_order_id);
} // enableButtons } // 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. * Close.
* Set Values on other panels and close * Set Values on other panels and close
*/ */
@Override private void close()
protected void close()
{ {
log.info("C_Order_ID=" + m_c_order_id); log.info("C_Order_ID=" + m_c_order_id);
if (m_c_order_id > 0) if (m_c_order_id > 0)
{ {
p_posPanel.setOrder(m_c_order_id); p_posPanel.f_curLine.setOrder(m_c_order_id);
p_posPanel.updateInfo(); p_posPanel.updateInfo();
} }
dispose(); p_posPanel.closeQuery(this);
} // close } // close
} // PosQueryProduct } // PosQueryProduct

View File

@ -0,0 +1,409 @@
/******************************************************************************
* 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.Event;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.awt.event.KeyEvent;
import java.util.Vector;
import javax.swing.DefaultComboBoxModel;
import javax.swing.KeyStroke;
import javax.swing.border.TitledBorder;
import org.compiere.model.MBPartner;
import org.compiere.model.MBPartnerInfo;
import org.compiere.model.MBPartnerLocation;
import org.compiere.model.MCurrency;
import org.compiere.model.MPriceList;
import org.compiere.model.MPriceListVersion;
import org.compiere.model.MUser;
import org.compiere.swing.CButton;
import org.compiere.swing.CComboBox;
import org.compiere.swing.CTextField;
import org.compiere.util.CLogger;
import org.compiere.util.KeyNamePair;
import org.compiere.util.Msg;
/**
* Customer Sub Panel
*
* @author Comunidad de Desarrollo OpenXpertya
* *Basado en Codigo Original Modificado, Revisado y Optimizado de:
* *Copyright <EFBFBD> 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
{
/**
*
*/
private static final long serialVersionUID = 5895558315889871887L;
/**
* Constructor
* @param posPanel POS Panel
*/
public SubBPartner (PosPanel posPanel)
{
super (posPanel);
} // PosSubCustomer
private CTextField f_name;
private CButton f_bNew;
private CButton f_bEdit;
private CButton f_bSearch;
private CComboBox f_location;
private CComboBox f_user;
/** The Business Partner */
private MBPartner m_bpartner;
/** Price List Version to use */
private int m_M_PriceList_Version_ID = 0;
/** Logger */
private static CLogger log = CLogger.getCLogger(SubBPartner.class);
/**
* Initialize
*/
public void init()
{
// Title
TitledBorder border = new TitledBorder(Msg.translate(p_ctx, "C_BPartner_ID"));
setBorder(border);
// Content
setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.insets = INSETS2;
// --
f_bNew = createButtonAction("New", null);
gbc.gridx = 0;
gbc.gridheight = 2;
gbc.anchor = GridBagConstraints.WEST;
add (f_bNew, gbc);
//
f_bEdit = createButtonAction ("Edit", null);
gbc.gridx = 1;
add (f_bEdit, gbc);
//
f_name = new CTextField("");
f_name.setName("Name");
f_name.addActionListener(this);
f_name.addFocusListener(this);
gbc.gridx = 2;
gbc.gridy = 0;
gbc.gridheight = 1;
gbc.gridwidth = 2;
gbc.weightx = 0.5;
gbc.fill = GridBagConstraints.HORIZONTAL;
add (f_name, gbc);
//
f_location = new CComboBox();
gbc.gridx = 2;
gbc.gridy = 1;
gbc.weightx = 0;
gbc.fill = GridBagConstraints.NONE;
add (f_location, gbc);
//
f_user = new CComboBox();
gbc.gridx = 3;
gbc.gridy = 1;
gbc.anchor = GridBagConstraints.EAST;
add (f_user, gbc);
//
f_bSearch = createButtonAction ("BPartner", KeyStroke.getKeyStroke(KeyEvent.VK_I, Event.SHIFT_MASK+Event.CTRL_MASK));
gbc.gridx = 4;
gbc.gridy = 0;
gbc.gridheight = 2;
gbc.fill = GridBagConstraints.NONE;
add (f_bSearch, gbc);
} // init
/**
* Get Panel Position
*/
public GridBagConstraints getGridBagConstraints()
{
GridBagConstraints gbc = super.getGridBagConstraints();
gbc.gridx = 0;
gbc.gridy = 0;
return gbc;
} // getGridBagConstraints
/**
* Dispose - Free Resources
*/
public void dispose()
{
if (f_name != null)
f_name.removeFocusListener(this);
f_name = null;
removeAll();
super.dispose();
} // dispose
/**************************************************************************
* Action Listener
* @param e event
*/
public void actionPerformed (ActionEvent e)
{
String action = e.getActionCommand();
if (action == null || action.length() == 0)
return;
log.info( "PosSubCustomer - actionPerformed: " + action);
// New
if (action.equals("New"))
p_posPanel.newOrder(); //red1 New POS Order instead - B_Partner already has direct field
// Edit
else if (action.equals("Edit"))
{
f_bEdit.setReadWrite(false);
}
// BPartner
else if (action.equals("BPartner"))
{
p_posPanel.openQuery(p_posPanel.f_queryBPartner);
}
// Name
else if (e.getSource() == f_name)
findBPartner();
p_posPanel.updateInfo();
} // actionPerformed
/**
* Focus Gained
* @param e
*/
public void focusGained (FocusEvent e)
{
} // focusGained
/**
* Focus Lost
* @param e
*/
public void focusLost (FocusEvent e)
{
if (e.isTemporary())
return;
log.info(e.toString());
findBPartner();
} // focusLost
/**
* Find/Set BPartner
*/
private void findBPartner()
{
String query = f_name.getText();
if (query == null || query.length() == 0)
return;
query = query.toUpperCase();
// Test Number
boolean allNumber = true;
boolean noNumber = true;
char[] qq = query.toCharArray();
for (int i = 0; i < qq.length; i++)
{
if (Character.isDigit(qq[i]))
{
noNumber = false;
break;
}
}
try
{
Integer.parseInt(query);
}
catch (Exception e)
{
allNumber = false;
}
String Value = query;
String Name = (allNumber ? null : query);
String EMail = (query.indexOf('@') != -1 ? query : null);
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, */null, EMail, Phone, City);
// Set Result
if (results.length == 0)
{
setC_BPartner_ID(0);
}
else if (results.length == 1)
{
setC_BPartner_ID(results[0].getC_BPartner_ID());
f_name.setText(results[0].getName());
}
else // more than one
{
p_posPanel.f_queryBPartner.setResults (results);
p_posPanel.openQuery(p_posPanel.f_queryBPartner);
}
} // findBPartner
/**************************************************************************
* Set BPartner
* @param C_BPartner_ID id
*/
public void setC_BPartner_ID (int C_BPartner_ID)
{
log.fine( "PosSubCustomer.setC_BPartner_ID=" + C_BPartner_ID);
if (C_BPartner_ID == 0)
m_bpartner = null;
else
{
m_bpartner = new MBPartner(p_ctx, C_BPartner_ID, null);
if (m_bpartner.get_ID() == 0)
m_bpartner = null;
}
// Set Info
if (m_bpartner != null)
{
f_name.setText(m_bpartner.getName());
f_bEdit.setReadWrite(false);
}
else
{
f_name.setText(null);
f_bEdit.setReadWrite(false);
}
// Sets Currency
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
/**
* Fill Combos (Location, User)
*/
private void fillCombos()
{
Vector<KeyNamePair> locationVector = new Vector<KeyNamePair>();
if (m_bpartner != null)
{
MBPartnerLocation[] locations = m_bpartner.getLocations(false);
for (int i = 0; i < locations.length; i++)
locationVector.add(locations[i].getKeyNamePair());
}
DefaultComboBoxModel locationModel = new DefaultComboBoxModel(locationVector);
f_location.setModel(locationModel);
//
Vector<KeyNamePair> userVector = new Vector<KeyNamePair>();
if (m_bpartner != null)
{
MUser[] users = m_bpartner.getContacts(false);
for (int i = 0; i < users.length; i++)
userVector.add(users[i].getKeyNamePair());
}
DefaultComboBoxModel userModel = new DefaultComboBoxModel(userVector);
f_user.setModel(userModel);
} // fillCombos
/**
* Get BPartner
* @return C_BPartner_ID
*/
public int getC_BPartner_ID ()
{
if (m_bpartner != null)
return m_bpartner.getC_BPartner_ID();
return 0;
} // getC_BPartner_ID
/**
* Get BPartner
* @return BPartner
*/
public MBPartner getBPartner ()
{
return m_bpartner;
} // getBPartner
/**
* Get BPartner Location
* @return C_BPartner_Location_ID
*/
public int getC_BPartner_Location_ID ()
{
if (m_bpartner != null)
{
KeyNamePair pp = (KeyNamePair)f_location.getSelectedItem();
if (pp != null)
return pp.getKey();
}
return 0;
} // getC_BPartner_Location_ID
/**
* Get BPartner Contact
* @return AD_User_ID
*/
public int getAD_User_ID ()
{
if (m_bpartner != null)
{
KeyNamePair pp = (KeyNamePair)f_user.getSelectedItem();
if (pp != null)
return pp.getKey();
}
return 0;
} // getC_BPartner_Location_ID
/**
* Get M_PriceList_Version_ID.
* Set Currency
* @return plv
*/
public int getM_PriceList_Version_ID()
{
if (m_M_PriceList_Version_ID == 0)
{
int M_PriceList_ID = p_pos.getM_PriceList_ID();
if (m_bpartner != null && m_bpartner.getM_PriceList_ID() != 0)
M_PriceList_ID = m_bpartner.getM_PriceList_ID();
//
MPriceList pl = MPriceList.get(p_ctx, M_PriceList_ID, null);
p_posPanel.f_curLine.setCurrency(MCurrency.getISO_Code(p_ctx, pl.getC_Currency_ID()));
f_name.setToolTipText(pl.getName());
//
MPriceListVersion plv = pl.getPriceListVersion (p_posPanel.getToday());
if (plv != null && plv.getM_PriceList_Version_ID() != 0)
m_M_PriceList_Version_ID = plv.getM_PriceList_Version_ID();
}
return m_M_PriceList_Version_ID;
} // getM_PriceList_Version_ID
} // PosSubCustomer

View File

@ -0,0 +1,197 @@
/******************************************************************************
* 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.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.border.TitledBorder;
import org.compiere.swing.CButton;
import org.compiere.util.CLogger;
/**
* Basic Key Sub Panel
*
* @author Comunidad de Desarrollo OpenXpertya
* *Basado en Codigo Original Modificado, Revisado y Optimizado de:
* *Copyright (c) Jorg Janke
* @version $Id: SubBasicKeys.java,v 1.1 2004/07/12 04:10:04 jjanke Exp $
*/
public class SubBasicKeys extends PosSubPanel implements ActionListener
{
/**
*
*/
private static final long serialVersionUID = 3296839634889851637L;
/**
* Constructor
* @param posPanel POS Panel
*/
public SubBasicKeys (PosPanel posPanel)
{
super (posPanel);
} // PosSubBasicKeys
private CButton f_b1 = null;
private CButton f_b2 = null;
private CButton f_b3 = null;
private CButton f_b4 = null;
private CButton f_b5 = null;
private CButton f_b6 = null;
private CButton f_b7 = null;
private CButton f_b8 = null;
private CButton f_b9 = null;
private CButton f_b0 = null;
private CButton f_bDot = null;
private CButton f_reset = null;
private CButton f_new = null;
/** Logger */
private static CLogger log = CLogger.getCLogger(SubBasicKeys.class);
/**
* Initialize
*/
public void init()
{
// Title
TitledBorder border = new TitledBorder("#");
setBorder(border);
// Content
setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.insets = INSETS1;
//
f_b7 = createButton ("7");
gbc.gridx = 0;
gbc.gridy = 0;
add (f_b7, gbc);
//
f_b8 = createButton ("8");
gbc.gridx = 1;
gbc.gridy = 0;
add (f_b8, gbc);
//
f_b9 = createButton ("9");
gbc.gridx = 2;
gbc.gridy = 0;
add (f_b9, gbc);
// --
f_b4 = createButton ("4");
gbc.gridx = 0;
gbc.gridy = 1;
add (f_b4, gbc);
//
f_b5 = createButton ("5");
gbc.gridx = 1;
gbc.gridy = 1;
add (f_b5, gbc);
//
f_b6 = createButton ("6");
gbc.gridx = 2;
gbc.gridy = 1;
add (f_b6, gbc);
// --
f_b1 = createButton ("1");
gbc.gridx = 0;
gbc.gridy = 2;
add (f_b1, gbc);
//
f_b2 = createButton ("2");
gbc.gridx = 1;
gbc.gridy = 2;
add (f_b2, gbc);
//
f_b3 = createButton ("3");
gbc.gridx = 2;
gbc.gridy = 2;
add (f_b3, gbc);
// --
f_b0 = createButton ("0");
Dimension size = f_b0.getPreferredSize();
size.width = (size.width*2) + 2;
gbc.gridx = 0;
gbc.gridy = 3;
gbc.gridwidth = 2;
gbc.fill = GridBagConstraints.VERTICAL;
add (f_b0, gbc);
//
f_bDot = createButton (".");
gbc.gridx = 2;
gbc.gridy = 3;
gbc.gridwidth = 1;
gbc.fill = GridBagConstraints.NONE;
add (f_bDot, gbc);
// --
gbc.gridx = 4;
gbc.insets = new Insets(1,15,1,1);
gbc.gridy = 0;
f_reset = createButtonAction("Reset", null);
add (f_reset, gbc);
//
f_new = createButtonAction("New", null);
gbc.gridy = 3;
add (f_new, gbc);
} // init
/**
* Get Panel Position
*/
public GridBagConstraints getGridBagConstraints()
{
GridBagConstraints gbc = super.getGridBagConstraints();
gbc.gridx = 1;
gbc.gridy = 3;
return gbc;
} // getGridBagConstraints
/**
* Dispose - Free Resources
*/
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;
log.info( "PosSubBasicKeys - actionPerformed: " + action);
// Reset
if (action.equals("Reset"))
;
// New
else if (action.equals("New"))
p_posPanel.newOrder();
} // actionPerformed
} // PosSubBasicKeys

View File

@ -24,6 +24,7 @@ import java.math.BigDecimal;
import javax.swing.border.TitledBorder; import javax.swing.border.TitledBorder;
import org.compiere.apps.AEnv;
import org.compiere.grid.ed.VNumber; import org.compiere.grid.ed.VNumber;
import org.compiere.model.MOrder; import org.compiere.model.MOrder;
import org.compiere.print.ReportCtl; import org.compiere.print.ReportCtl;
@ -57,12 +58,15 @@ public class SubCheckout extends PosSubPanel implements ActionListener
* Constructor * Constructor
* @param posPanel POS Panel * @param posPanel POS Panel
*/ */
public SubCheckout (PosBasePanel posPanel) public SubCheckout (PosPanel posPanel)
{ {
super (posPanel); super (posPanel);
} // PosSubCheckout } // PosSubCheckout
private CButton f_register = null;
private CButton f_summary = null; private CButton f_summary = null;
private CButton f_process = null;
private CButton f_print = null;
//TODO: credit card //TODO: credit card
/* private CLabel f_lcreditCardNumber = null; /* private CLabel f_lcreditCardNumber = null;
@ -73,10 +77,13 @@ public class SubCheckout extends PosSubPanel implements ActionListener
private CTextField f_creditCardVV = null; private CTextField f_creditCardVV = null;
private CButton f_creditPayment = null; private CButton f_creditPayment = null;
*/ */
private CLabel f_lDocumentNo = null;
private CTextField f_DocumentNo;
private CLabel f_lcashGiven = null; private CLabel f_lcashGiven = null;
private VNumber f_cashGiven; private VNumber f_cashGiven;
private CLabel f_lcashReturn = null; private CLabel f_lcashReturn = null;
private VNumber f_cashReturn; private VNumber f_cashReturn;
private CButton f_cashPayment = null;
private CButton f_cashRegisterFunctions; private CButton f_cashRegisterFunctions;
/** Logger */ /** Logger */
@ -90,6 +97,7 @@ public class SubCheckout extends PosSubPanel implements ActionListener
// Content // Content
setLayout(new GridBagLayout()); setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints(); GridBagConstraints gbc = new GridBagConstraints();
gbc.insets = INSETS2;
// BOX 1 - CASH // BOX 1 - CASH
gbc.gridx = 0; gbc.gridx = 0;
@ -102,8 +110,14 @@ public class SubCheckout extends PosSubPanel implements ActionListener
gbc.gridy = 0; gbc.gridy = 0;
add (cash, gbc); add (cash, gbc);
GridBagConstraints gbc0 = new GridBagConstraints(); GridBagConstraints gbc0 = new GridBagConstraints();
gbc0.insets = INSETS2;
// gbc0.anchor = GridBagConstraints.EAST; // gbc0.anchor = GridBagConstraints.EAST;
// //
f_lDocumentNo = new CLabel(Msg.getMsg(Env.getCtx(),"DocumentNo"));
cash.add (f_lDocumentNo, gbc0);
f_DocumentNo = new CTextField("");
f_DocumentNo.setName("DocumentNo");
cash.add (f_DocumentNo, gbc0);
f_lcashGiven = new CLabel(Msg.getMsg(Env.getCtx(),"CashGiven")); f_lcashGiven = new CLabel(Msg.getMsg(Env.getCtx(),"CashGiven"));
cash.add (f_lcashGiven, gbc0); cash.add (f_lcashGiven, gbc0);
f_cashGiven = new VNumber("CashGiven", false, false, true, DisplayType.Amount, Msg.translate(Env.getCtx(), "CashGiven")); f_cashGiven = new VNumber("CashGiven", false, false, true, DisplayType.Amount, Msg.translate(Env.getCtx(), "CashGiven"));
@ -118,6 +132,10 @@ public class SubCheckout extends PosSubPanel implements ActionListener
f_cashReturn.setColumns(8, 25); f_cashReturn.setColumns(8, 25);
cash.add (f_cashReturn, gbc0); cash.add (f_cashReturn, gbc0);
f_cashReturn.setValue(Env.ZERO); f_cashReturn.setValue(Env.ZERO);
f_cashPayment = createButtonAction("Payment", null);
f_cashPayment.setActionCommand("Cash");
gbc0.weightx = 0.1;
cash.add (f_cashPayment, gbc0);
// BOX 2 - UTILS // BOX 2 - UTILS
CPanel utils = new CPanel(new GridBagLayout()); CPanel utils = new CPanel(new GridBagLayout());
@ -127,6 +145,7 @@ public class SubCheckout extends PosSubPanel implements ActionListener
gbc.weightx = .1; gbc.weightx = .1;
add (utils, gbc); add (utils, gbc);
GridBagConstraints gbcU = new GridBagConstraints(); GridBagConstraints gbcU = new GridBagConstraints();
gbcU.insets = INSETS2;
gbcU.anchor = GridBagConstraints.EAST; gbcU.anchor = GridBagConstraints.EAST;
//CASH FUNCTIONS //CASH FUNCTIONS
f_cashRegisterFunctions = createButtonAction("CashRegisterFunction", null); f_cashRegisterFunctions = createButtonAction("CashRegisterFunction", null);
@ -135,9 +154,19 @@ public class SubCheckout extends PosSubPanel implements ActionListener
f_cashRegisterFunctions.setMaximumSize(new Dimension(130,37)); f_cashRegisterFunctions.setMaximumSize(new Dimension(130,37));
f_cashRegisterFunctions.setMinimumSize(new Dimension(130,37)); f_cashRegisterFunctions.setMinimumSize(new Dimension(130,37));
utils.add(f_cashRegisterFunctions, gbcU); utils.add(f_cashRegisterFunctions, gbcU);
//SUMMARY //REGISTER
f_register = createButtonAction("Register", null);
utils.add (f_register, gbcU);
//SUMMARY
f_summary = createButtonAction("Summary", null); f_summary = createButtonAction("Summary", null);
utils.add (f_summary, gbcU); utils.add (f_summary, gbcU);
//PROCESS
f_process = createButtonAction("Process", null);
utils.add (f_process, gbcU);
//PRINT
f_print = createButtonAction("Print", null);
utils.add (f_print, gbcU);
@ -188,6 +217,17 @@ public class SubCheckout extends PosSubPanel implements ActionListener
**/ //fin del comentario para quitar la parte del CreditCard **/ //fin del comentario para quitar la parte del CreditCard
} // init } // init
/**
* Get Panel Position
*/
public GridBagConstraints getGridBagConstraints()
{
GridBagConstraints gbc = super.getGridBagConstraints();
gbc.gridx = 0;
gbc.gridy = 3;
return gbc;
} // getGridBagConstraints
/** /**
* Dispose - Free Resources * Dispose - Free Resources
*/ */
@ -208,19 +248,63 @@ public class SubCheckout extends PosSubPanel implements ActionListener
return; return;
log.info( "PosSubCheckout - actionPerformed: " + action); 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")) if (action.equals("Summary"))
{ {
//displaySummary(); displaySummary();
}
else if (action.equals("Process"))
{
if (isOrderFullyPay())
{
displaySummary();
//Check if order is completed, if so, print and open drawer, create an empty order and set cashGiven to zero
if(processOrder())
{
printTicket();
openCashDrawer();
p_posPanel.newOrder();
f_cashGiven.setValue(Env.ZERO);
}
}
else
{
p_posPanel.f_status.setStatusLine("PAYMENT NOT FULL.");
}
}
// Print
else if (action.equals("Print"))
{
if (isOrderFullyPay())
{
displaySummary();
printTicket();
openCashDrawer();
}
else
{
p_posPanel.f_status.setStatusLine("Order not fully paid.");
}
}
// Cash (Payment)
else if (action.equals("Cash"))
{
displayReturn();
openCashDrawer();
} }
else if (action.equals("CashRegisterFunction")) else if (action.equals("CashRegisterFunction"))
{ {
CashSubFunctions csf = new CashSubFunctions(p_posPanel); p_posPanel.openQuery(p_posPanel.f_cashfunctions);
csf.setVisible(true);
} }
else if (e.getSource() == f_cashGiven) else if (e.getSource() == f_cashGiven)
//displayReturn(); displayReturn();
/* // CreditCard (Payment) /* // CreditCard (Payment)
else if (action.equals("CreditCard")) else if (action.equals("CreditCard"))
@ -231,11 +315,197 @@ public class SubCheckout extends PosSubPanel implements ActionListener
p_posPanel.updateInfo(); p_posPanel.updateInfo();
} // actionPerformed } // actionPerformed
private void displaySummary() {
p_posPanel.f_status.setStatusLine(p_posPanel.f_curLine.getOrder().getSummary());
displayReturn();
}
/**
* Process Order
* @author Comunidad de Desarrollo OpenXpertya
* *Basado en Codigo Original Modificado, Revisado y Optimizado de:
* *Copyright <EFBFBD> ConSerTi
*/
public boolean processOrder()
{
//Returning orderCompleted to check for order completness
boolean orderCompleted = false;
p_posPanel.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
MOrder order = p_posPanel.f_curLine.getOrder();
if (order != null)
// check if order completed OK
if (order.getDocStatus().equals("DR") )
{
order.setDocAction(DocAction.ACTION_Complete);
try
{
if (order.processIt(DocAction.ACTION_Complete) )
{
order.save();
}
else
{
log.info( "SubCheckout - processOrder FAILED");
p_posPanel.f_status.setStatusLine("Order can not be completed.");
}
}
catch (Exception e)
{
log.severe("Order can not be completed - " + e.getMessage());
p_posPanel.f_status.setStatusLine("Error when processing order.");
}
finally
{ // When order failed convert it back to draft so it can be processed
if( order.getDocStatus().equals("IN") )
{
order.setDocStatus("DR");
}
else if( order.getDocStatus().equals("CO") )
{
order = null;
orderCompleted = true;
//p_posPanel.newOrder();
//f_cashGiven.setValue(Env.ZERO);
log.info( "SubCheckout - processOrder OK");
p_posPanel.f_status.setStatusLine("Order completed.");
}
else
{
log.info( "SubCheckout - processOrder - unrecognized DocStatus");
p_posPanel.f_status.setStatusLine("Orden was not completed correctly.");
}
} // try-finally
}
p_posPanel.setCursor(Cursor.getDefaultCursor());
return orderCompleted;
} // processOrder
/**
* Print Ticket
* @author Comunidad de Desarrollo OpenXpertya
* *Basado en Codigo Original Modificado, Revisado y Optimizado de:
* *Copyright <EFBFBD> ConSerTi
*/
public void printTicket()
{
MOrder order = p_posPanel.f_curLine.getOrder();
//int windowNo = p_posPanel.getWindowNo();
//Properties m_ctx = p_posPanel.getPropiedades();
if (order != null)
{
try
{
//TODO: to incorporate work from Posterita
/*
if (p_pos.getAD_PrintLabel_ID() != 0)
PrintLabel.printLabelTicket(order.getC_Order_ID(), p_pos.getAD_PrintLabel_ID());
*/
//print standard document
ReportCtl.startDocumentPrint(ReportEngine.ORDER, order.getC_Order_ID(), null, AEnv.getWindowNo(this), true);
}
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 <EFBFBD> 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)
{
f_DocumentNo.setText(order.getDocumentNo());
total = order.getGrandTotal();
}
double cashReturn = given.doubleValue() - total.doubleValue();
f_cashReturn.setValue(new BigDecimal(cashReturn));
}
}
/**
* 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 <EFBFBD> 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 <EFBFBD> ConSerTi
*/
public void openCashDrawer()
{
String puerto = null;
//TODO - to incorporate 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 } // PosSubCheckout

View File

@ -14,48 +14,27 @@
package org.compiere.pos; package org.compiere.pos;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Event; import java.awt.Event;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent; import java.awt.event.ActionEvent;
import java.awt.event.ActionListener; import java.awt.event.ActionListener;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.awt.event.KeyEvent; import java.awt.event.KeyEvent;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.logging.Level; import java.util.logging.Level;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.JViewport;
import javax.swing.KeyStroke; import javax.swing.KeyStroke;
import javax.swing.ListSelectionModel;
import javax.swing.border.TitledBorder; import javax.swing.border.TitledBorder;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import net.miginfocom.swing.MigLayout;
import org.compiere.apps.ADialog;
import org.compiere.grid.ed.VNumber; import org.compiere.grid.ed.VNumber;
import org.compiere.minigrid.ColumnInfo; import org.compiere.model.MBPartner;
import org.compiere.minigrid.IDColumn;
import org.compiere.minigrid.MiniTable;
import org.compiere.model.MOrder; import org.compiere.model.MOrder;
import org.compiere.model.MOrderLine; import org.compiere.model.MOrderLine;
import org.compiere.model.MOrderTax;
import org.compiere.model.MProduct; import org.compiere.model.MProduct;
import org.compiere.model.MUOM;
import org.compiere.model.MWarehousePrice;
import org.compiere.model.PO;
import org.compiere.swing.CButton; import org.compiere.swing.CButton;
import org.compiere.swing.CLabel; import org.compiere.swing.CLabel;
import org.compiere.swing.CScrollPane;
import org.compiere.swing.CTextField;
import org.compiere.util.CLogger; import org.compiere.util.CLogger;
import org.compiere.util.DB;
import org.compiere.util.DisplayType; import org.compiere.util.DisplayType;
import org.compiere.util.Env; import org.compiere.util.Env;
import org.compiere.util.Msg; import org.compiere.util.Msg;
@ -69,7 +48,7 @@ import org.compiere.util.Msg;
* @version $Id: SubCurrentLine.java,v 1.3 2004/07/24 04:31:52 jjanke Exp $ * @version $Id: SubCurrentLine.java,v 1.3 2004/07/24 04:31:52 jjanke Exp $
* red1 - [2093355 ] Small bugs in OpenXpertya POS * red1 - [2093355 ] Small bugs in OpenXpertya POS
*/ */
public class SubCurrentLine extends PosSubPanel implements ActionListener, FocusListener, ListSelectionListener { public class SubCurrentLine extends PosSubPanel implements ActionListener {
/** /**
* *
*/ */
@ -81,146 +60,102 @@ public class SubCurrentLine extends PosSubPanel implements ActionListener, Focus
* @param posPanel * @param posPanel
* POS Panel * POS Panel
*/ */
public SubCurrentLine(PosBasePanel posPanel) { public SubCurrentLine(PosPanel posPanel) {
super(posPanel); super(posPanel);
} // PosSubCurrentLine } // PosSubCurrentLine
private CButton f_up; private CButton f_new;
private CButton f_delete;
private CButton f_down; private CButton f_reset;
//
private CButton f_plus; private CButton f_plus;
private CButton f_minus; private CButton f_minus;
private PosTextField f_price;
private PosTextField f_quantity;
protected PosTextField f_name;
private CButton f_bSearch;
private int orderLineId = 0;
/** The Product */ private CLabel f_currency;
private MProduct m_product = null;
/** Warehouse */ private VNumber f_price;
private int m_M_Warehouse_ID;
/** PLV */ private CLabel f_uom;
private int m_M_PriceList_Version_ID;
private VNumber f_quantity;
private MOrder m_order = null;
/** Logger */ /** Logger */
private static CLogger log = CLogger.getCLogger(SubCurrentLine.class); private static CLogger log = CLogger.getCLogger(SubCurrentLine.class);
/** The Table */
PosTable m_table;
/** The Query SQL */
private String m_sql;
/** Logger */
/** Table Column Layout Info */
private static ColumnInfo[] s_layout = new ColumnInfo[]
{
new ColumnInfo(" ", "C_OrderLine_ID", IDColumn.class),
new ColumnInfo(Msg.translate(Env.getCtx(), "Name"), "Name", String.class),
new ColumnInfo(Msg.translate(Env.getCtx(), "Qty"), "QtyOrdered", Double.class),
new ColumnInfo(Msg.translate(Env.getCtx(), "C_UOM_ID"), "UOMSymbol", String.class),
new ColumnInfo(Msg.translate(Env.getCtx(), "PriceActual"), "PriceActual", BigDecimal.class),
new ColumnInfo(Msg.translate(Env.getCtx(), "LineNetAmt"), "LineNetAmt", BigDecimal.class),
new ColumnInfo(Msg.translate(Env.getCtx(), "C_Tax_ID"), "TaxIndicator", String.class),
};
/** From Clause */
private static String s_sqlFrom = "C_Order_LineTax_v";
/** Where Clause */
private static String s_sqlWhere = "C_Order_ID=? AND LineNetAmt <> 0";
/** /**
* Initialize * Initialize
*/ */
public void init() { public void init() {
// Title
TitledBorder border = new TitledBorder(Msg.getMsg(Env.getCtx(),
"CurrentLine"));
setBorder(border);
// Content // Content
setLayout(new MigLayout("fill, ins 0 0")); setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
String buttonSize = "w 50!, h 50!,"; gbc.insets = INSETS2;
gbc.gridy = 0;
// --
f_new = createButtonAction("Save", KeyStroke.getKeyStroke(
KeyEvent.VK_INSERT, Event.SHIFT_MASK));
gbc.gridx = 0;
add(f_new, gbc);
// //
f_bSearch = createButtonAction ("Product", KeyStroke.getKeyStroke(KeyEvent.VK_I, Event.CTRL_MASK)); f_reset = createButtonAction("Reset", null);
add (f_bSearch, buttonSize ); gbc.gridx = GridBagConstraints.RELATIVE;
add(f_reset, gbc);
CLabel productLabel = new CLabel(Msg.translate(Env.getCtx(), "M_Product_ID")); //
add(productLabel, "split 2, spanx 4, flowy, h 15"); f_currency = new CLabel("---");
gbc.anchor = GridBagConstraints.EAST;
f_name = new PosTextField(Msg.translate(Env.getCtx(), "M_Product_ID"), p_posPanel, p_pos.getOSK_KeyLayout_ID()); gbc.weightx = .1;
f_name.setName("Name"); gbc.fill = GridBagConstraints.HORIZONTAL;
f_name.addActionListener(this); add(f_currency, gbc);
f_name.addFocusListener(this); //
f_name.requestFocusInWindow(); f_price = new VNumber("PriceActual", false, false, true,
DisplayType.Amount, Msg.translate(Env.getCtx(), "PriceActual"));
add (f_name, " growx, h 30:30:, wrap"); f_price.addActionListener(this);
f_price.setColumns(10, 25);
m_table = new PosTable(); gbc.anchor = GridBagConstraints.WEST;
CScrollPane scroll = new CScrollPane(m_table); gbc.weightx = 0;
m_sql = m_table.prepareTable (s_layout, s_sqlFrom, gbc.fill = GridBagConstraints.NONE;
s_sqlWhere, false, "C_Order_LineTax_v") add(f_price, gbc);
+ " ORDER BY Line"; setPrice(Env.ZERO);
// m_table.addMouseListener(this); // --
m_table.getSelectionModel().addListSelectionListener(this); f_uom = new CLabel("--");
m_table.setColumnVisibility(m_table.getColumn(0), false); gbc.anchor = GridBagConstraints.EAST;
m_table.getColumn(1).setPreferredWidth(175); gbc.weightx = .1;
m_table.getColumn(2).setPreferredWidth(75); gbc.fill = GridBagConstraints.HORIZONTAL;
m_table.getColumn(3).setPreferredWidth(30); add(f_uom, gbc);
m_table.getColumn(4).setPreferredWidth(75);
m_table.getColumn(5).setPreferredWidth(75);
m_table.getColumn(6).setPreferredWidth(30);
m_table.setFocusable(false);
m_table.growScrollbars();
add (scroll, "growx, spanx, growy, pushy, h 200:300:");
f_up = createButtonAction("Previous", KeyStroke.getKeyStroke(KeyEvent.VK_UP, 0));
add (f_up, buttonSize);
f_down = createButtonAction("Next", KeyStroke.getKeyStroke(KeyEvent.VK_DOWN, 0));
add (f_down, buttonSize);
f_delete = createButtonAction("Cancel", KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, Event.SHIFT_MASK));
add (f_delete, buttonSize);
// //
f_minus = createButtonAction("Minus", null); f_minus = createButtonAction("Minus", null);
add(f_minus, buttonSize); gbc.anchor = GridBagConstraints.WEST;
gbc.weightx = 0;
gbc.fill = GridBagConstraints.NONE;
add(f_minus, gbc);
CLabel qtyLabel = new CLabel(Msg.translate(Env.getCtx(), "QtyOrdered"));
add(qtyLabel, "split 2, flowy, h 15");
// //
f_quantity = new PosTextField(Msg.translate(Env.getCtx(), "QtyOrdered"), f_quantity = new VNumber("QtyOrdered", false, false, true,
p_posPanel,p_pos.getOSNP_KeyLayout_ID(), DisplayType.getNumberFormat(DisplayType.Quantity)); DisplayType.Quantity, Msg.translate(Env.getCtx(), "QtyOrdered"));
f_quantity.setHorizontalAlignment(JTextField.TRAILING);
f_quantity.addActionListener(this); f_quantity.addActionListener(this);
add(f_quantity, "h 30:30:, w 100"); f_quantity.setColumns(5, 25);
add(f_quantity, gbc);
setQty(Env.ONE); setQty(Env.ONE);
// //
f_plus = createButtonAction("Plus", null); f_plus = createButtonAction("Plus", null);
add(f_plus, buttonSize); add(f_plus, gbc);
CLabel priceLabel = new CLabel(Msg.translate(Env.getCtx(), "PriceActual"));
add(priceLabel, "split 2, flowy, h 15");
//
f_price = new PosTextField(Msg.translate(Env.getCtx(), "PriceActual"),
p_posPanel,p_pos.getOSNP_KeyLayout_ID(), DisplayType.getNumberFormat(DisplayType.Amount));
f_price.addActionListener(this);
f_price.setHorizontalAlignment(JTextField.TRAILING);
add(f_price, "h 30, w 100, wrap");
setPrice(Env.ZERO);
enableButtons();
} // init } // init
/**
* Get Panel Position
*/
public GridBagConstraints getGridBagConstraints() {
GridBagConstraints gbc = super.getGridBagConstraints();
gbc.gridx = 0;
gbc.gridy = 1;
return gbc;
} // getGridBagConstraints
/** /**
* Dispose - Free Resources * Dispose - Free Resources
@ -239,189 +174,49 @@ public class SubCurrentLine extends PosSubPanel implements ActionListener, Focus
if (action == null || action.length() == 0) if (action == null || action.length() == 0)
return; return;
log.info( "SubCurrentLine - actionPerformed: " + action); log.info( "SubCurrentLine - actionPerformed: " + action);
// New / Reset
if (action.equals("Save"))
saveLine();
else if (action.equals("Reset"))
newLine();
// Plus // Plus
if (action.equals("Plus")) else if (action.equals("Plus"))
{ f_quantity.plus();
if ( orderLineId > 0 )
{
MOrderLine line = new MOrderLine(p_ctx, orderLineId, null);
if ( line != null )
{
line.setQty(line.getQtyOrdered().add(Env.ONE));
line.saveEx();
p_posPanel.updateInfo();
}
}
}
// Minus // Minus
else if (action.equals("Minus")) else if (action.equals("Minus"))
{ f_quantity.minus(1);
if ( orderLineId > 0 )
{
MOrderLine line = new MOrderLine(p_ctx, orderLineId, null);
if ( line != null )
{
line.setQty(line.getQtyOrdered().subtract(Env.ONE));
line.saveEx();
p_posPanel.updateInfo();
}
}
}
// VNumber // VNumber
else if (e.getSource() == f_price) { else if (e.getSource() == f_price)
MOrderLine line = new MOrderLine(p_ctx, orderLineId, null); f_price.setValue(f_price.getValue());
if ( line != null ) else if (e.getSource() == f_quantity)
{ f_quantity.setValue(f_quantity.getValue());
line.setQty(new BigDecimal(f_price.getValue().toString()));
line.saveEx();
p_posPanel.updateInfo();
}
}
else if (e.getSource() == f_quantity && orderLineId > 0 )
{
MOrderLine line = new MOrderLine(p_ctx, orderLineId, null);
if ( line != null )
{
line.setQty(new BigDecimal(f_quantity.getValue().toString()));
line.saveEx();
p_posPanel.updateInfo();
}
}
// Product
if (action.equals("Product"))
{
setParameter();
QueryProduct qt = new QueryProduct(p_posPanel);
qt.setQueryData(m_M_PriceList_Version_ID, m_M_Warehouse_ID);
qt.setVisible(true);
findProduct();
}
// Name
else if (e.getSource() == f_name)
findProduct();
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;
}
// Delete
else if (action.equals("Cancel"))
{
int rows = m_table.getRowCount();
if (rows != 0)
{
int row = m_table.getSelectedRow();
if (row != -1)
{
if ( p_posPanel.m_order != null )
p_posPanel.m_order.deleteLine(m_table.getSelectedRowKey());
setQty(null);
setPrice(null);
orderLineId = 0;
}
}
}
p_posPanel.updateInfo(); p_posPanel.updateInfo();
} // actionPerformed } // actionPerformed
/**
* Update Table
* @param order order
*/
public void updateTable (PosOrderModel order)
{
int C_Order_ID = 0;
if (order != null)
C_Order_ID = order.getC_Order_ID();
if (C_Order_ID == 0)
{
p_posPanel.f_curLine.m_table.loadTable(new PO[0]);
p_posPanel.f_order.setSums(null);
}
PreparedStatement pstmt = null;
ResultSet rs = null;
try
{
pstmt = DB.prepareStatement (m_sql, null);
pstmt.setInt (1, C_Order_ID);
rs = pstmt.executeQuery ();
m_table.loadTable(rs);
}
catch (Exception e)
{
log.log(Level.SEVERE, m_sql, e);
}
finally
{
DB.close(rs, pstmt);
rs = null; pstmt = null;
}
for ( int i = 0; i < m_table.getRowCount(); i ++ )
{
IDColumn key = (IDColumn) m_table.getModel().getValueAt(i, 0);
if ( key != null && orderLineId > 0 && key.getRecord_ID() == orderLineId )
{
m_table.getSelectionModel().setSelectionInterval(i, i);
break;
}
}
enableButtons();
p_posPanel.f_order.setSums(order); /***************************************************************************
* Set Currency
} // updateTable *
* @param currency
private void enableButtons() * currency
{
boolean enabled = true;
if ( m_table == null || m_table.getRowCount() == 0 || m_table.getSelectedRowKey() == null )
{
enabled = false;
}
f_down.setEnabled(enabled);
f_up.setEnabled(enabled);
f_delete.setEnabled(enabled);
f_minus.setEnabled(enabled);
f_plus.setEnabled(enabled);
f_quantity.setEnabled(enabled);
f_price.setEnabled(enabled);
}
/**
* Set Query Parameter
*/ */
private void setParameter() public void setCurrency(String currency) {
{ if (currency == null)
// What PriceList ? f_currency.setText("---");
m_M_Warehouse_ID = p_pos.getM_Warehouse_ID(); else
m_M_PriceList_Version_ID = p_posPanel.f_order.getM_PriceList_Version_ID(); f_currency.setText(currency);
} // setParameter } // setCurrency
/**
* Set UOM
*
* @param UOM
*/
public void setUOM(String UOM) {
if (UOM == null)
f_uom.setText("--");
else
f_uom.setText(UOM);
} // setUOM
/** /**
* Set Price * Set Price
@ -433,7 +228,7 @@ public class SubCurrentLine extends PosSubPanel implements ActionListener, Focus
price = Env.ZERO; price = Env.ZERO;
f_price.setValue(price); 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.setEditable(rw); f_price.setReadWrite(rw);
} // setPrice } // setPrice
/** /**
@ -467,11 +262,9 @@ public class SubCurrentLine extends PosSubPanel implements ActionListener, Focus
* New Line * New Line
*/ */
public void newLine() { public void newLine() {
setM_Product_ID(0); p_posPanel.f_product.setM_Product_ID(0);
setQty(Env.ONE); setQty(Env.ONE);
setPrice(Env.ZERO); setPrice(Env.ZERO);
orderLineId = 0;
f_name.requestFocusInWindow();
} // newLine } // newLine
/** /**
@ -480,208 +273,243 @@ public class SubCurrentLine extends PosSubPanel implements ActionListener, Focus
* @return true if saved * @return true if saved
*/ */
public boolean saveLine() { public boolean saveLine() {
MProduct product = getProduct(); MProduct product = p_posPanel.f_product.getProduct();
if (product == null) if (product == null)
return false; return false;
BigDecimal QtyOrdered = (BigDecimal) f_quantity.getValue(); BigDecimal QtyOrdered = (BigDecimal) f_quantity.getValue();
BigDecimal PriceActual = (BigDecimal) f_price.getValue(); BigDecimal PriceActual = (BigDecimal) f_price.getValue();
MOrderLine line = createLine(product, QtyOrdered, PriceActual);
if ( p_posPanel.m_order == null ) if (line == null)
{ return false;
p_posPanel.m_order = PosOrderModel.createOrder(p_posPanel.p_pos, p_posPanel.f_order.getBPartner()); if (!line.save())
} return false;
MOrderLine line = null;
if ( p_posPanel.m_order != null )
{
line = p_posPanel.m_order.createLine(product, QtyOrdered, PriceActual);
if (line == null)
return false;
if (!line.save())
return false;
}
orderLineId = line.getC_OrderLine_ID();
setM_Product_ID(0);
// //
newLine();
return true; return true;
} // saveLine } // saveLine
/**
/** * to erase the lines from order
* Get Product * @return true if deleted
* @return product
*/ */
public MProduct getProduct() public void deleteLine (int row) {
{ if (m_order != null && row != -1 )
return m_product; {
} // getProduct MOrderLine[] lineas = m_order.getLines(true, null);
int numLineas = lineas.length;
if (numLineas > row)
{
//delete line from order - true only when DRAFT is not PREPARE-IT()
lineas[row].delete(true);
for (int i = row; i < (numLineas - 1); i++)
lineas[i] = lineas[i + 1];
lineas[numLineas - 1] = null;
}
}
} // deleteLine
/** /**
* Set Price for defined product * Delete order from database
*/ *
public void setPrice() * @author Comunidad de Desarrollo OpenXpertya
{ * *Basado en Codigo Original Modificado, Revisado y Optimizado de:
if (m_product == null) * *Copyright <EFBFBD> ConSerTi
return; */
// public void deleteOrder () {
setParameter(); if (m_order != null)
MWarehousePrice result = MWarehousePrice.get (m_product, {
m_M_PriceList_Version_ID, m_M_Warehouse_ID, null); if (m_order.getDocStatus().equals("DR"))
if (result != null) {
p_posPanel.f_curLine.setPrice(result.getPriceStd()); MOrderLine[] lineas = m_order.getLines();
else if (lineas != null)
p_posPanel.f_curLine.setPrice(Env.ZERO); {
} // setPrice 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
/************************************************************************** *
* Find/Set Product & Price * @author Comunidad de Desarrollo OpenXpertya
* *Basado en Codigo Original Modificado, Revisado y Optimizado de:
* *Copyright <EFBFBD> ConSerTi
*/ */
private void findProduct() public void newOrder()
{ {
String query = f_name.getText(); m_order = null;
if (query == null || query.length() == 0) m_order = getOrder();
return; }
query = query.toUpperCase();
// Test Number /**
boolean allNumber = true; * 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);
if (p_pos.getC_DocType_ID() != 0)
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();
if (partner == null || partner.get_ID() == 0)
partner = p_pos.getBPartner();
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);
id = p_posPanel.f_bpartner.getAD_User_ID();
if (id != 0)
m_order.setAD_User_ID(id);
//
m_order.setM_PriceList_ID(p_pos.getM_PriceList_ID());
m_order.setM_Warehouse_ID(p_pos.getM_Warehouse_ID());
m_order.setSalesRep_ID(p_pos.getSalesRep_ID());
m_order.setPaymentRule(MOrder.PAYMENTRULE_Cash);
if (!m_order.save())
{
m_order = null;
log.severe("Unable create Order.");
}
}
return m_order;
} // getHeader
/**
* @author Comunidad de Desarrollo OpenXpertya
* *Basado en Codigo Original Modificado, Revisado y Optimizado de:
* *Copyright <EFBFBD> ConSerTi
*/
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;
if (!order.getDocStatus().equals("DR"))
return null;
//add new line or increase qty
// catch Exceptions at order.getLines()
int numLineas = 0;
MOrderLine[] lineas = null;
try try
{ {
Integer.getInteger(query); lineas = order.getLines("","");
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];
}
}
} }
catch (Exception e) catch (Exception e)
{ {
allNumber = false; log.severe("Order lines cannot be created - " + e.getMessage());
} }
String Value = query;
String Name = query;
String UPC = (allNumber ? query : null);
String SKU = (allNumber ? query : null);
MWarehousePrice[] results = null;
setParameter();
//
results = MWarehousePrice.find (p_ctx,
m_M_PriceList_Version_ID, m_M_Warehouse_ID,
Value, Name, UPC, SKU, null);
// Set Result
if (results.length == 0)
{
String message = Msg.translate(p_ctx, "search.product.notfound");
ADialog.warn(0, p_posPanel, message + query);
setM_Product_ID(0);
p_posPanel.f_curLine.setPrice(Env.ZERO);
}
else if (results.length == 1)
{
setM_Product_ID(results[0].getM_Product_ID());
setQty(Env.ONE);
f_name.setText(results[0].getName());
p_posPanel.f_curLine.setPrice(results[0].getPriceStd());
saveLine();
}
else // more than one
{
QueryProduct qt = new QueryProduct(p_posPanel);
qt.setResults(results);
qt.setQueryData(m_M_PriceList_Version_ID, m_M_Warehouse_ID);
qt.setVisible(true);
}
} // findProduct
//create new line
/************************************************************************** MOrderLine line = new MOrderLine(order);
* Set Product line.setProduct(product);
* @param M_Product_ID id line.setQty(QtyOrdered);
*/
public void setM_Product_ID (int M_Product_ID) line.setPrice(); // sets List/limit
{ line.setPrice(PriceActual);
log.fine( "PosSubProduct.setM_Product_ID=" + M_Product_ID); line.save();
if (M_Product_ID <= 0) return line;
m_product = null;
else } // createLine
{
m_product = MProduct.get(p_ctx, M_Product_ID);
if (m_product.get_ID() == 0)
m_product = null;
}
// Set String Info
if (m_product != null)
{
f_name.setText(m_product.getName());
f_name.setToolTipText(m_product.getDescription());
}
else
{
f_name.setText(null);
f_name.setToolTipText(null);
}
} // setM_Product_ID
/**
* Focus Gained
* @param e
*/
public void focusGained (FocusEvent e)
{
} // focusGained
/** /**
* Focus Lost * @param m_c_order_id
* @param e
*/ */
public void focusLost (FocusEvent e) public void setOldOrder(int m_c_order_id)
{ {
if (e.isTemporary()) deleteOrder();
return; m_order = new MOrder(p_ctx , m_c_order_id, null);
log.info( "PosSubProduct - focusLost");
findProduct();
p_posPanel.updateInfo(); p_posPanel.updateInfo();
} // focusLost
public void valueChanged(ListSelectionEvent e) {
if ( e.getValueIsAdjusting() )
return;
int row = m_table.getSelectedRow();
if (row != -1 )
{
Object data = m_table.getModel().getValueAt(row, 0);
if ( data != null )
{
Integer id = (Integer) ((IDColumn)data).getRecord_ID();
orderLineId = id;
loadLine(id);
}
}
enableButtons();
} }
private void loadLine(int lineId) {
if ( lineId <= 0 )
return;
log.fine("SubCurrentLine - loading line " + lineId); /**
MOrderLine ol = new MOrderLine(p_ctx, lineId, null); * @param m_c_order_id
if ( ol != null ) */
{ public void setOrder(int m_c_order_id)
setPrice(ol.getPriceActual()); {
setQty(ol.getQtyOrdered()); m_order = new MOrder(p_ctx , m_c_order_id, null);
}
} }
} // PosSubCurrentLine } // PosSubCurrentLine

View File

@ -14,7 +14,6 @@
package org.compiere.pos; package org.compiere.pos;
import java.awt.BorderLayout;
import java.awt.Color; import java.awt.Color;
import java.awt.Dimension; import java.awt.Dimension;
import java.awt.GridBagConstraints; import java.awt.GridBagConstraints;
@ -24,15 +23,11 @@ import java.awt.event.ActionListener;
import javax.swing.border.TitledBorder; import javax.swing.border.TitledBorder;
import net.miginfocom.swing.MigLayout;
import org.compiere.apps.ADialog;
import org.compiere.model.MPOSKey; import org.compiere.model.MPOSKey;
import org.compiere.model.MPOSKeyLayout; import org.compiere.model.MPOSKeyLayout;
import org.compiere.print.MPrintColor; import org.compiere.print.MPrintColor;
import org.compiere.swing.CButton; import org.compiere.swing.CButton;
import org.compiere.swing.CPanel; import org.compiere.swing.CPanel;
import org.compiere.swing.CScrollPane;
import org.compiere.util.CLogger; import org.compiere.util.CLogger;
import org.compiere.util.Env; import org.compiere.util.Env;
import org.compiere.util.Msg; import org.compiere.util.Msg;
@ -46,7 +41,7 @@ import org.compiere.util.Msg;
* *Copyright (c) Jorg Janke * *Copyright (c) Jorg Janke
* @version $Id: SubFunctionKeys.java,v 1.1 2004/07/12 04:10:04 jjanke Exp $ * @version $Id: SubFunctionKeys.java,v 1.1 2004/07/12 04:10:04 jjanke Exp $
*/ */
public class SubFunctionKeys extends PosSubPanel implements PosKeyListener public class SubFunctionKeys extends PosSubPanel implements ActionListener
{ {
/** /**
* *
@ -57,7 +52,7 @@ public class SubFunctionKeys extends PosSubPanel implements PosKeyListener
* Constructor * Constructor
* @param posPanel POS Panel * @param posPanel POS Panel
*/ */
public SubFunctionKeys (PosBasePanel posPanel) public SubFunctionKeys (PosPanel posPanel)
{ {
super (posPanel); super (posPanel);
} // PosSubFunctionKeys } // PosSubFunctionKeys
@ -72,15 +67,77 @@ public class SubFunctionKeys extends PosSubPanel implements PosKeyListener
*/ */
public void init() public void init()
{ {
// Title
TitledBorder border = new TitledBorder(Msg.translate(Env.getCtx(), "C_POSKeyLayout_ID"));
setBorder(border);
int C_POSKeyLayout_ID = p_pos.getC_POSKeyLayout_ID(); int C_POSKeyLayout_ID = p_pos.getC_POSKeyLayout_ID();
if (C_POSKeyLayout_ID == 0) if (C_POSKeyLayout_ID == 0)
return; return;
MPOSKeyLayout fKeys = MPOSKeyLayout.get(Env.getCtx(), C_POSKeyLayout_ID);
if (fKeys.get_ID() == 0)
return;
PosKeyPanel panel = new PosKeyPanel(C_POSKeyLayout_ID, this); int COLUMNS = 3; // Min Columns
this.setLayout(new MigLayout("fill, ins 0")); int ROWS = 6; // Min Rows
add(panel, "growx, growy"); m_keys = fKeys.getKeys(false);
int noKeys = m_keys.length;
int rows = Math.max (((noKeys-1) / COLUMNS) + 1, ROWS);
int cols = ((noKeys-1) % COLUMNS) + 1;
log.fine( "PosSubFunctionKeys.init - NoKeys=" + noKeys
+ " - Rows=" + rows + ", Cols=" + cols);
// Content
CPanel content = new CPanel (new GridLayout(Math.max(rows, 3), Math.max(cols, 3)));
for (int i = 0; i < m_keys.length; i++)
{
Color keyColor = Color.lightGray;
MPOSKey key = m_keys[i];
StringBuffer buttonHTML = new StringBuffer("<html><p>");
if (key.getAD_PrintColor_ID() != 0)
{
MPrintColor color = MPrintColor.get(Env.getCtx(), key.getAD_PrintColor_ID());
keyColor = color.getColor();
buttonHTML
.append("<table")
.append(">")
.append(key.getName())
.append("</table>");
}
else
buttonHTML.append(key.getName());
buttonHTML.append("</p></html>");
log.fine( "#" + i + " - " + keyColor);
CButton button = new CButton(buttonHTML.toString());
button.setMargin(INSETS1);
button.setBackground(keyColor);
button.setFocusable(false);
button.setActionCommand(String.valueOf(key.getC_POSKey_ID()));
button.addActionListener(this);
content.add (button);
}
for (int i = m_keys.length; i < rows*COLUMNS; i++)
{
CButton button = new CButton("");
button.setFocusable(false);
button.setBackground(Color.cyan);
content.add (button);
}
content.setPreferredSize(new Dimension(cols*80, rows*50));
add (content);
} // init } // init
/**
* Get Panel Position
*/
public GridBagConstraints getGridBagConstraints()
{
GridBagConstraints gbc = super.getGridBagConstraints();
gbc.gridx = 1;
gbc.gridy = 2;
gbc.gridheight = 3; //added by ConSerTi so that the panel takes up more space
// gbc.fill = GridBagConstraints.HORIZONTAL;
return gbc;
} // getGridBagConstraints
/** /**
* Dispose - Free Resources * Dispose - Free Resources
@ -91,23 +148,35 @@ public class SubFunctionKeys extends PosSubPanel implements PosKeyListener
} // dispose } // dispose
/** /**
* Call back from key panel * Action Listener
* @param e event
*/ */
public void keyReturned(MPOSKey key) { public void actionPerformed (ActionEvent e)
// processed order {
if ( p_posPanel.m_order != null && p_posPanel.m_order.isProcessed() ) String action = e.getActionCommand();
if (action == null || action.length() == 0 || m_keys == null)
return; return;
log.info( "PosSubFunctionKeys - actionPerformed: " + action);
// new line try
p_posPanel.f_curLine.setM_Product_ID(key.getM_Product_ID());
p_posPanel.f_curLine.setPrice();
p_posPanel.f_curLine.setQty(key.getQty());
if ( !p_posPanel.f_curLine.saveLine() )
{ {
ADialog.error(0, this, "Could not save order line"); int C_POSKey_ID = Integer.parseInt(action);
for (int i = 0; i < m_keys.length; i++)
{
MPOSKey key = m_keys[i];
if (key.getC_POSKey_ID() == C_POSKey_ID)
{
p_posPanel.f_product.setM_Product_ID(key.getM_Product_ID());
p_posPanel.f_product.setPrice();
p_posPanel.f_curLine.setQty(key.getQty());
p_posPanel.f_curLine.saveLine();
p_posPanel.updateInfo();
return;
}
}
} }
p_posPanel.updateInfo(); catch (Exception ex)
return; {
} }
} // actinPerformed
} // PosSubFunctionKeys } // PosSubFunctionKeys

View File

@ -0,0 +1,314 @@
/******************************************************************************
* 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.BorderLayout;
import java.awt.Dimension;
import java.awt.Event;
import java.awt.FlowLayout;
import java.awt.GridBagConstraints;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.math.BigDecimal;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.logging.Level;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.KeyStroke;
import javax.swing.border.TitledBorder;
import org.compiere.grid.ed.VNumber;
import org.compiere.minigrid.ColumnInfo;
import org.compiere.minigrid.IDColumn;
import org.compiere.minigrid.MiniTable;
import org.compiere.model.MOrder;
import org.compiere.model.PO;
import org.compiere.swing.CButton;
import org.compiere.swing.CLabel;
import org.compiere.swing.CPanel;
import org.compiere.swing.CScrollPane;
import org.compiere.util.CLogger;
import org.compiere.util.DB;
import org.compiere.util.DisplayType;
import org.compiere.util.Env;
import org.compiere.util.Msg;
/**
* All Lines Sub Panel
*
* @author Comunidad de Desarrollo OpenXpertya
* *Basado en Codigo Original Modificado, Revisado y Optimizado de:
* *Copyright (c) Jorg Janke
* @version $Id: SubLines.java,v 1.2 2004/07/21 05:37:51 jjanke Exp $
*/
public class SubLines extends PosSubPanel implements ActionListener
{
/**
*
*/
private static final long serialVersionUID = -1536223059244074580L;
/**
* Constructor
* @param posPanel POS Panel
*/
public SubLines (PosPanel posPanel)
{
super (posPanel);
} // PosSubAllLines
/** The Table */
private MiniTable m_table;
/** The Query SQL */
private String m_sql;
/** Logger */
private static CLogger log = CLogger.getCLogger(SubLines.class);
private CButton f_up;
private CButton f_delete;
private CButton f_down;
//
private VNumber f_net;
private VNumber f_tax;
private VNumber f_total;
/** Table Column Layout Info */
private static ColumnInfo[] s_layout = new ColumnInfo[]
{
new ColumnInfo(" ", "C_OrderLine_ID", IDColumn.class),
new ColumnInfo(Msg.translate(Env.getCtx(), "Line"), "Line", Integer.class),
new ColumnInfo(Msg.translate(Env.getCtx(), "Qty"), "QtyOrdered", Double.class),
new ColumnInfo(Msg.translate(Env.getCtx(), "C_UOM_ID"), "UOMSymbol", String.class),
new ColumnInfo(Msg.translate(Env.getCtx(), "Name"), "Name", String.class),
new ColumnInfo(Msg.translate(Env.getCtx(), "PriceActual"), "PriceActual", BigDecimal.class),
new ColumnInfo(Msg.translate(Env.getCtx(), "LineNetAmt"), "LineNetAmt", BigDecimal.class),
new ColumnInfo(Msg.translate(Env.getCtx(), "C_Tax_ID"), "TaxIndicator", String.class),
new ColumnInfo(Msg.translate(Env.getCtx(), "Description"), "Description", String.class)
};
/** From Clause */
private static String s_sqlFrom = "C_Order_LineTax_v";
/** Where Clause */
private static String s_sqlWhere = "C_Order_ID=? AND LineNetAmt<>0";
/**
* Initialize
*/
public void init()
{
// Title
TitledBorder border = new TitledBorder(Msg.translate(Env.getCtx(), "C_OrderLine_ID"));
setBorder(border);
// Content
setLayout(new BorderLayout(5, 5));
m_table = new MiniTable();
CScrollPane scroll = new CScrollPane(m_table);
m_sql = m_table.prepareTable (s_layout, s_sqlFrom,
s_sqlWhere, false, "C_Order_LineTax_v")
+ " ORDER BY Line";
m_table.setRowSelectionAllowed(true);
m_table.setColumnSelectionAllowed(false);
m_table.setMultiSelection(false);
// m_table.addMouseListener(this);
// m_table.getSelectionModel().addListSelectionListener(this);
scroll.setPreferredSize(new Dimension(100,120));
add (scroll, BorderLayout.CENTER);
// Right side
CPanel right = new CPanel();
add (right, BorderLayout.EAST);
right.setLayout(new BoxLayout(right, BoxLayout.Y_AXIS));
//
right.add(Box.createGlue());
f_up = createButtonAction("Previous", KeyStroke.getKeyStroke(KeyEvent.VK_UP, 0));
right.add (f_up);
right.add(Box.createGlue());
f_delete = createButtonAction("Delete", KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, Event.SHIFT_MASK));
right.add (f_delete);
right.add(Box.createGlue());
f_down = createButtonAction("Next", KeyStroke.getKeyStroke(KeyEvent.VK_DOWN, 0));
right.add (f_down);
right.add(Box.createGlue());
// Summary
FlowLayout summaryLayout = new FlowLayout(FlowLayout.LEADING, 2,0);
CPanel summary = new CPanel(summaryLayout);
add (summary, BorderLayout.SOUTH);
//
CLabel lNet = new CLabel (Msg.translate(Env.getCtx(), "TotalLines"));
summary.add(lNet);
f_net = new VNumber("TotalLines", false, true, false, DisplayType.Amount, "TotalLines");
f_net.setColumns(11, 22);
lNet.setLabelFor(f_net);
summary.add(f_net);
f_net.setValue (Env.ZERO);
//
CLabel lTax = new CLabel (Msg.translate(Env.getCtx(), "TaxAmt"));
summary.add(lTax);
f_tax = new VNumber("TaxAmt", false, true, false, DisplayType.Amount, "TaxAmt");
f_tax.setColumns(6, 22);
lTax.setLabelFor(f_tax);
summary.add(f_tax);
f_tax.setValue (Env.ZERO);
//
CLabel lTotal = new CLabel (Msg.translate(Env.getCtx(), "GrandTotal"));
summary.add(lTotal);
f_total = new VNumber("GrandTotal", false, true, false, DisplayType.Amount, "GrandTotal");
f_total.setColumns(11, 22);
lTotal.setLabelFor(f_total);
summary.add(f_total);
f_total.setValue (Env.ZERO);
//
f_delete.setReadWrite(true);
} // init
/**
* Get Panel Position
*/
public GridBagConstraints getGridBagConstraints()
{
GridBagConstraints gbc = super.getGridBagConstraints();
gbc.gridx = 0;
gbc.gridy = 2;
gbc.weightx = 0.7;
gbc.weighty = 0.7;
return gbc;
} // getGridBagConstraints
/**
* Dispose - Free Resources
*/
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;
log.info( "PosSubAllLines - actionPerformed: " + action);
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;
}
// 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
/**
* Update Table
* @param order order
*/
public void updateTable (MOrder order)
{
int C_Order_ID = 0;
if (order != null)
C_Order_ID = order.getC_Order_ID();
if (C_Order_ID == 0)
{
m_table.loadTable(new PO[0]);
setSums(null);
}
PreparedStatement pstmt = null;
ResultSet rs = null;
try
{
pstmt = DB.prepareStatement (m_sql, null);
pstmt.setInt (1, C_Order_ID);
rs = pstmt.executeQuery ();
m_table.loadTable(rs);
}
catch (Exception e)
{
log.log(Level.SEVERE, m_sql, e);
}
finally
{
DB.close(rs, pstmt);
rs = null; pstmt = null;
}
setSums(order);
} // updateTable
/**
* Set Sums from Table
*/
private void setSums(MOrder order)
{
int noLines = m_table.getRowCount();
p_posPanel.f_status.setStatusDB(noLines);
if (order == null || noLines == 0) //red1 WORKAROUND (noLines == 0) means total and tax in order head is false.
{
f_net.setValue(Env.ZERO);
f_total.setValue(Env.ZERO);
f_tax.setValue(Env.ZERO);
}
else
{
// order.prepareIt(); //red1 Avoid Reserving Inventory until final process and update context directly from DB.
p_posPanel.f_curLine.setOrder(order.getC_Order_ID());
MOrder retValue = p_posPanel.f_curLine.getOrder();
//red1 - end -
f_net.setValue(retValue.getTotalLines());
f_total.setValue(retValue.getGrandTotal());
f_tax.setValue(retValue.getGrandTotal().subtract(retValue.getTotalLines()));
}
} // setSums
} // PosSubAllLines

View File

@ -1,729 +0,0 @@
/******************************************************************************
* 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.Cursor;
import java.awt.Event;
import java.awt.Font;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.awt.event.KeyEvent;
import java.io.FileOutputStream;
import java.io.IOException;
import java.math.BigDecimal;
import java.util.Vector;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JFormattedTextField;
import javax.swing.JTextField;
import javax.swing.KeyStroke;
import javax.swing.border.TitledBorder;
import net.miginfocom.swing.MigLayout;
import org.adempiere.plaf.AdempierePLAF;
import org.compiere.apps.ADialog;
import org.compiere.apps.AEnv;
import org.compiere.grid.ed.VNumber;
import org.compiere.model.MBPartner;
import org.compiere.model.MBPartnerInfo;
import org.compiere.model.MBPartnerLocation;
import org.compiere.model.MCurrency;
import org.compiere.model.MOrder;
import org.compiere.model.MPriceList;
import org.compiere.model.MPriceListVersion;
import org.compiere.model.MUser;
import org.compiere.print.ReportCtl;
import org.compiere.print.ReportEngine;
import org.compiere.process.DocAction;
import org.compiere.swing.CButton;
import org.compiere.swing.CComboBox;
import org.compiere.swing.CLabel;
import org.compiere.swing.CTextField;
import org.compiere.util.CLogger;
import org.compiere.util.DisplayType;
import org.compiere.util.Env;
import org.compiere.util.KeyNamePair;
import org.compiere.util.Msg;
/**
* Customer Sub Panel
*
* @author Comunidad de Desarrollo OpenXpertya
* *Basado en Codigo Original Modificado, Revisado y Optimizado de:
* *Copyright <EFBFBD> Jorg Janke
* @version $Id: SubBPartner.java,v 1.1 2004/07/12 04:10:04 jjanke Exp $
*/
public class SubOrder extends PosSubPanel
implements ActionListener, FocusListener
{
/**
*
*/
private static final long serialVersionUID = 5895558315889871887L;
/**
* Constructor
* @param posPanel POS Panel
*/
public SubOrder (PosBasePanel posPanel)
{
super (posPanel);
} // PosSubCustomer
private CButton f_history;
private CTextField f_name;
private CButton f_bNew;
private CButton f_bSearch;
private CComboBox f_location;
private CComboBox f_user;
private CButton f_cashPayment;
private CButton f_process;
private CButton f_print;
private CTextField f_DocumentNo;
private CButton f_logout;
private JFormattedTextField f_net;
private JFormattedTextField f_tax;
private JFormattedTextField f_total;
private CTextField f_RepName;
/** The Business Partner */
private MBPartner m_bpartner;
/** Price List Version to use */
private int m_M_PriceList_Version_ID = 0;
private CTextField f_currency = new CTextField();
private CButton f_bEdit;
private CButton f_bSettings;
/** Logger */
private static CLogger log = CLogger.getCLogger(SubOrder.class);
/**
* Initialize
*/
public void init()
{
// Content
MigLayout layout = new MigLayout("ins 0 0","[fill|fill|fill|fill]","[nogrid]unrel[||]");
setLayout(layout);
Font bigFont = AdempierePLAF.getFont_Field().deriveFont(16f);
String buttonSize = "w 50!, h 50!,";
// NEW
f_bNew = createButtonAction("New", KeyStroke.getKeyStroke(KeyEvent.VK_F2, Event.F2));
add (f_bNew, buttonSize);
// EDIT
f_bEdit = createButtonAction("Edit", null);
add(f_bEdit, buttonSize);
f_bEdit.setEnabled(false);
// HISTORY
f_history = createButtonAction("History", null);
add (f_history, buttonSize);
// CANCEL
f_process = createButtonAction("Cancel", null);
add (f_process, buttonSize);
f_process.setEnabled(false);
// PAYMENT
f_cashPayment = createButtonAction("Payment", null);
f_cashPayment.setActionCommand("Cash");
add (f_cashPayment, buttonSize);
f_cashPayment.setEnabled(false);
//PRINT
f_print = createButtonAction("Print", null);
add (f_print, buttonSize);
f_print.setEnabled(false);
// Settings
f_bSettings = createButtonAction("Preference", null);
add (f_bSettings, buttonSize);
//
f_logout = createButtonAction ("Logout", null);
add (f_logout, buttonSize + ", gapx 25, wrap");
// DOC NO
add (new CLabel(Msg.getMsg(Env.getCtx(),"DocumentNo")), "");
f_DocumentNo = new CTextField("");
f_DocumentNo.setName("DocumentNo");
f_DocumentNo.setEditable(false);
add (f_DocumentNo, "growx, pushx");
CLabel lNet = new CLabel (Msg.translate(Env.getCtx(), "SubTotal"));
add(lNet, "");
f_net = new JFormattedTextField(DisplayType.getNumberFormat(DisplayType.Amount));
f_net.setHorizontalAlignment(JTextField.TRAILING);
f_net.setEditable(false);
f_net.setFocusable(false);
lNet.setLabelFor(f_net);
add(f_net, "wrap, growx, pushx");
f_net.setValue (Env.ZERO);
//
/*
// BPARTNER
f_bSearch = createButtonAction ("BPartner", KeyStroke.getKeyStroke(KeyEvent.VK_I, Event.SHIFT_MASK+Event.CTRL_MASK));
add (f_bSearch,buttonSize + ", spany 2");
*/
/*
* f_name.setName("Name");
f_name.addActionListener(this);
f_name.addFocusListener(this);
add (f_name, "wrap");
*/
// SALES REP
add(new CLabel(Msg.translate(Env.getCtx(), "SalesRep_ID")), "");
f_RepName = new CTextField("");
f_RepName.setName("SalesRep");
f_RepName.setEditable(false);
add (f_RepName, "growx, pushx");
CLabel lTax = new CLabel (Msg.translate(Env.getCtx(), "TaxAmt"));
add(lTax);
f_tax = new JFormattedTextField(DisplayType.getNumberFormat(DisplayType.Amount));
f_tax.setHorizontalAlignment(JTextField.TRAILING);
f_tax.setEditable(false);
f_tax.setFocusable(false);
lTax.setLabelFor(f_tax);
add(f_tax, "wrap, growx, pushx");
f_tax.setValue (Env.ZERO);
//
/*
f_location = new CComboBox();
add (f_location, " wrap");
*/
// BP
add(new CLabel(Msg.translate(Env.getCtx(), "C_BPartner_ID")), "");
f_name = new CTextField();
f_name.setEditable(false);
f_name.setName("Name");
add (f_name, "growx, pushx");
//
CLabel lTotal = new CLabel (Msg.translate(Env.getCtx(), "GrandTotal"));
lTotal.setFont(bigFont);
add(lTotal, "");
f_total = new JFormattedTextField(DisplayType.getNumberFormat(DisplayType.Amount));
f_total.setHorizontalAlignment(JTextField.TRAILING);f_total.setFont(bigFont);
f_total.setEditable(false);
f_total.setFocusable(false);
lTotal.setLabelFor(f_total);
add(f_total, "growx, pushx");
f_total.setValue (Env.ZERO);
/*
//
f_user = new CComboBox();
add (f_user, "skip 1");
*/
} // init
/**
* Dispose - Free Resources
*/
public void dispose()
{
if (f_name != null)
f_name.removeFocusListener(this);
f_name = null;
removeAll();
super.dispose();
} // dispose
/**************************************************************************
* Action Listener
* @param e event
*/
public void actionPerformed (ActionEvent e)
{
String action = e.getActionCommand();
if (action == null || action.length() == 0)
return;
log.info( "PosSubCustomer - actionPerformed: " + action);
// New
if (action.equals("New"))
{
p_posPanel.newOrder(); //red1 New POS Order instead - B_Partner already has direct field
return;
}
// Register
if (action.equals("History"))
{
PosQuery qt = new QueryTicket(p_posPanel);
qt.setVisible(true);
return;
}
else if (action.equals("Cancel"))
deleteOrder();
else if (action.equals("Cash"))
payOrder();
else if (action.equals("Print"))
printOrder();
else if (action.equals("BPartner"))
{
PosQuery qt = new QueryBPartner(p_posPanel);
qt.setVisible(true);
}
// Logout
else if (action.equals("Logout"))
{
p_posPanel.dispose();
return;
}
// Name
else if (e.getSource() == f_name)
findBPartner();
p_posPanel.updateInfo();
} // actionPerformed
/**
*
*/
private void printOrder() {
{
if (isOrderFullyPaid())
{
updateOrder();
printTicket();
openCashDrawer();
}
}
}
/**
*
*/
private void payOrder() {
//Check if order is completed, if so, print and open drawer, create an empty order and set cashGiven to zero
if( p_posPanel.m_order != null )
{
if ( !p_posPanel.m_order.isProcessed() && !p_posPanel.m_order.processOrder() )
{
ADialog.warn(0, p_posPanel, "PosOrderProcessFailed");
return;
}
if ( PosPayment.pay(p_posPanel) )
{
printTicket();
p_posPanel.setOrder(0);
}
}
}
/**
*
*/
private void deleteOrder() {
if ( p_posPanel != null && ADialog.ask(0, this, "Delete order?") )
p_posPanel.m_order.deleteOrder();
// p_posPanel.newOrder();
}
/**
* Focus Gained
* @param e
*/
public void focusGained (FocusEvent e)
{
} // focusGained
/**
* Focus Lost
* @param e
*/
public void focusLost (FocusEvent e)
{
if (e.isTemporary())
return;
log.info(e.toString());
findBPartner();
} // focusLost
/**
* Find/Set BPartner
*/
private void findBPartner()
{
String query = f_name.getText();
if (query == null || query.length() == 0)
return;
// unchanged
if ( m_bpartner != null && m_bpartner.getName().equals(query))
return;
query = query.toUpperCase();
// Test Number
boolean allNumber = true;
boolean noNumber = true;
char[] qq = query.toCharArray();
for (int i = 0; i < qq.length; i++)
{
if (Character.isDigit(qq[i]))
{
noNumber = false;
break;
}
}
try
{
Integer.parseInt(query);
}
catch (Exception e)
{
allNumber = false;
}
String Value = query;
String Name = (allNumber ? null : query);
String EMail = (query.indexOf('@') != -1 ? query : null);
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, */null, EMail, Phone, City);
// Set Result
if (results.length == 0)
{
setC_BPartner_ID(0);
}
else if (results.length == 1)
{
setC_BPartner_ID(results[0].getC_BPartner_ID());
f_name.setText(results[0].getName());
}
else // more than one
{
QueryBPartner qt = new QueryBPartner(p_posPanel);
qt.setResults (results);
qt.setVisible(true);
}
} // findBPartner
/**************************************************************************
* Set BPartner
* @param C_BPartner_ID id
*/
public void setC_BPartner_ID (int C_BPartner_ID)
{
log.fine( "PosSubCustomer.setC_BPartner_ID=" + C_BPartner_ID);
if (C_BPartner_ID == 0)
m_bpartner = null;
else
{
m_bpartner = new MBPartner(p_ctx, C_BPartner_ID, null);
if (m_bpartner.get_ID() == 0)
m_bpartner = null;
}
// Set Info
if (m_bpartner != null)
{
f_name.setText(m_bpartner.getName());
}
else
{
f_name.setText(null);
}
// Sets Currency
m_M_PriceList_Version_ID = 0;
getM_PriceList_Version_ID();
//fillCombos();
if ( p_posPanel.m_order != null && m_bpartner != null )
p_posPanel.m_order.setBPartner(m_bpartner); //added by ConSerTi to update the client in the request
} // setC_BPartner_ID
/**
* Fill Combos (Location, User)
*/
private void fillCombos()
{
Vector<KeyNamePair> locationVector = new Vector<KeyNamePair>();
if (m_bpartner != null)
{
MBPartnerLocation[] locations = m_bpartner.getLocations(false);
for (int i = 0; i < locations.length; i++)
locationVector.add(locations[i].getKeyNamePair());
}
DefaultComboBoxModel locationModel = new DefaultComboBoxModel(locationVector);
f_location.setModel(locationModel);
//
Vector<KeyNamePair> userVector = new Vector<KeyNamePair>();
if (m_bpartner != null)
{
MUser[] users = m_bpartner.getContacts(false);
for (int i = 0; i < users.length; i++)
userVector.add(users[i].getKeyNamePair());
}
DefaultComboBoxModel userModel = new DefaultComboBoxModel(userVector);
f_user.setModel(userModel);
} // fillCombos
/**
* Get BPartner
* @return C_BPartner_ID
*/
public int getC_BPartner_ID ()
{
if (m_bpartner != null)
return m_bpartner.getC_BPartner_ID();
return 0;
} // getC_BPartner_ID
/**
* Get BPartner
* @return BPartner
*/
public MBPartner getBPartner ()
{
return m_bpartner;
} // getBPartner
/**
* Get BPartner Location
* @return C_BPartner_Location_ID
*/
public int getC_BPartner_Location_ID ()
{
if (m_bpartner != null)
{
KeyNamePair pp = (KeyNamePair)f_location.getSelectedItem();
if (pp != null)
return pp.getKey();
}
return 0;
} // getC_BPartner_Location_ID
/**
* Get BPartner Contact
* @return AD_User_ID
*/
public int getAD_User_ID ()
{
if (m_bpartner != null)
{
KeyNamePair pp = (KeyNamePair)f_user.getSelectedItem();
if (pp != null)
return pp.getKey();
}
return 0;
} // getC_BPartner_Location_ID
/**
* Get M_PriceList_Version_ID.
* Set Currency
* @return plv
*/
public int getM_PriceList_Version_ID()
{
if (m_M_PriceList_Version_ID == 0)
{
int M_PriceList_ID = p_pos.getM_PriceList_ID();
if (m_bpartner != null && m_bpartner.getM_PriceList_ID() != 0)
M_PriceList_ID = m_bpartner.getM_PriceList_ID();
//
MPriceList pl = MPriceList.get(p_ctx, M_PriceList_ID, null);
setCurrency(MCurrency.getISO_Code(p_ctx, pl.getC_Currency_ID()));
f_name.setToolTipText(pl.getName());
//
MPriceListVersion plv = pl.getPriceListVersion (p_posPanel.getToday());
if (plv != null && plv.getM_PriceList_Version_ID() != 0)
m_M_PriceList_Version_ID = plv.getM_PriceList_Version_ID();
}
return m_M_PriceList_Version_ID;
} // getM_PriceList_Version_ID
/***************************************************************************
* Set Currency
*
* @param currency
* currency
*/
public void setCurrency(String currency) {
if (currency == null)
f_currency.setText("---");
else
f_currency.setText(currency);
} // setCurrency
/**
* Print Ticket
* @author Comunidad de Desarrollo OpenXpertya
* *Basado en Codigo Original Modificado, Revisado y Optimizado de:
* *Copyright <EFBFBD> ConSerTi
*/
public void printTicket()
{
if ( p_posPanel.m_order == null )
return;
MOrder order = p_posPanel.m_order;
//int windowNo = p_posPanel.getWindowNo();
//Properties m_ctx = p_posPanel.getPropiedades();
if (order != null)
{
try
{
//TODO: to incorporate work from Posterita
/*
if (p_pos.getAD_PrintLabel_ID() != 0)
PrintLabel.printLabelTicket(order.getC_Order_ID(), p_pos.getAD_PrintLabel_ID());
*/
//print standard document
ReportCtl.startDocumentPrint(ReportEngine.ORDER, order.getC_Order_ID(), null, AEnv.getWindowNo(this), true);
}
catch (Exception e)
{
log.severe("PrintTicket - Error Printing Ticket");
}
}
}
/**
* 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 <EFBFBD> ConSerTi
*/
public boolean isOrderFullyPaid()
{
/*TODO
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;
*/
return true;
}
/**
* 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 <EFBFBD> ConSerTi
*/
public void updateOrder()
{
if (p_posPanel != null )
{
MOrder order = p_posPanel.m_order;
if (order != null)
{
f_DocumentNo.setText(order.getDocumentNo());
setC_BPartner_ID(order.getC_BPartner_ID());
f_bNew.setEnabled(order.getLines().length != 0);
f_bEdit.setEnabled(true);
f_history.setEnabled(order.getLines().length != 0);
f_process.setEnabled(true);
f_print.setEnabled(order.isProcessed());
f_cashPayment.setEnabled(order.getLines().length != 0);
}
else
{
f_DocumentNo.setText(null);
setC_BPartner_ID(0);
f_bNew.setEnabled(true);
f_bEdit.setEnabled(false);
f_history.setEnabled(true);
f_process.setEnabled(false);
f_print.setEnabled(false);
f_cashPayment.setEnabled(false);
}
}
}
/**
* Abrir caja
* Abre la caja registradora
* @author Comunidad de Desarrollo OpenXpertya
* *Basado en Codigo Original Modificado, Revisado y Optimizado de:
* *Copyright <EFBFBD> ConSerTi
*/
public void openCashDrawer()
{
String port = "/dev/lp";
byte data[] = new byte[] {0x1B, 0x40, 0x1C};
try {
FileOutputStream m_out = null;
if (m_out == null) {
m_out = new FileOutputStream(port); // No poner append = true.
}
m_out.write(data);
} catch (IOException e) {
}
}
/**
* Set Sums from Table
*/
void setSums(PosOrderModel order)
{
int noLines = p_posPanel.f_curLine.m_table.getRowCount();
if (order == null || noLines == 0)
{
f_net.setValue(Env.ZERO);
f_total.setValue(Env.ZERO);
f_tax.setValue(Env.ZERO);
}
else
{
// order.getMOrder().prepareIt();
f_net.setValue(order.getSubtotal());
f_total.setValue(order.getGrandTotal());
f_tax.setValue(order.getTaxAmt());
}
} // setSums
} // PosSubCustomer

View File

@ -0,0 +1,329 @@
/******************************************************************************
* 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.Event;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.awt.event.KeyEvent;
import javax.swing.KeyStroke;
import javax.swing.border.TitledBorder;
import org.compiere.model.MProduct;
import org.compiere.model.MWarehousePrice;
import org.compiere.swing.CButton;
import org.compiere.swing.CTextField;
import org.compiere.util.CLogger;
import org.compiere.util.Env;
import org.compiere.util.Msg;
/**
* Product Sub Panel.
* Responsible for Product Selection and maintaining
* M_Product_ID, Name, UOM
* and setting Price
*
* @author Comunidad de Desarrollo OpenXpertya
* *Basado en Codigo Original Modificado, Revisado y Optimizado de:
* *Copyright (c) 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
{
/**
*
*/
private static final long serialVersionUID = -6626441083848884910L;
/**
* Constructor
* @param posPanel POS Panel
*/
public SubProduct (PosPanel posPanel)
{
super (posPanel);
} // PosSubProduct
protected CTextField f_name;
private CButton f_bSearch;
/** The Product */
private MProduct m_product = null;
/** Warehouse */
private int m_M_Warehouse_ID;
/** PLV */
private int m_M_PriceList_Version_ID;
/** Logger */
private static CLogger log = CLogger.getCLogger(SubProduct.class);
/**
* Initialize
*/
public void init()
{
// Title
TitledBorder border = new TitledBorder(Msg.translate(p_ctx, "M_Product_ID"));
setBorder(border);
// Content
setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.insets = INSETS2;
// --
f_name = new CTextField("");
f_name.setName("Name");
f_name.addActionListener(this);
f_name.addFocusListener(this);
gbc.gridx = 0;
gbc.gridy = 0;
gbc.anchor = GridBagConstraints.EAST;
gbc.fill = GridBagConstraints.BOTH;
gbc.weightx = 0.1;
add (f_name, gbc);
//
f_bSearch = createButtonAction ("Product", KeyStroke.getKeyStroke(KeyEvent.VK_I, Event.CTRL_MASK));
gbc.gridx = 1;
gbc.gridy = 0;
gbc.anchor = GridBagConstraints.WEST;
gbc.fill = GridBagConstraints.NONE;
gbc.weightx = 0;
add (f_bSearch, gbc);
} // init
/**
* Get Panel Position
*/
public GridBagConstraints getGridBagConstraints()
{
GridBagConstraints gbc = super.getGridBagConstraints();
gbc.gridx = 1;
gbc.gridy = 1;
return gbc;
} // getGridBagConstraints
/**
* Dispose - Free Resources
*/
public void dispose()
{
if (f_name != null)
f_name.removeFocusListener(this);
removeAll();
super.dispose();
} // dispose
/**************************************************************************
* Action Listener
* @param e event
*/
public void actionPerformed (ActionEvent e)
{
String action = e.getActionCommand();
if (action == null || action.length() == 0)
return;
log.info( "PosSubProduct - actionPerformed: " + action);
// Product
if (action.equals("Product"))
{
setParameter();
p_posPanel.openQuery(p_posPanel.f_queryProduct);
}
// Name
else if (e.getSource() == f_name)
findProduct();
p_posPanel.updateInfo();
} // actionPerformed
/**
* Focus Gained
* @param e
*/
public void focusGained (FocusEvent e)
{
} // focusGained
/**
* Focus Lost
* @param e
*/
public void focusLost (FocusEvent e)
{
if (e.isTemporary())
return;
log.info( "PosSubProduct - focusLost");
findProduct();
p_posPanel.updateInfo();
} // focusLost
/**
* Set Query Paramter
*/
private void setParameter()
{
// What PriceList ?
m_M_Warehouse_ID = p_pos.getM_Warehouse_ID();
m_M_PriceList_Version_ID = p_posPanel.f_bpartner.getM_PriceList_Version_ID();
p_posPanel.f_queryProduct.setQueryData(m_M_PriceList_Version_ID, m_M_Warehouse_ID);
} // setParameter
/**************************************************************************
* Find/Set Product & Price
*/
private void findProduct()
{
String query = f_name.getText();
if (query == null || query.length() == 0)
return;
query = query.toUpperCase();
// Test Number
boolean allNumber = true;
try
{
Integer.getInteger(query);
}
catch (Exception e)
{
allNumber = false;
}
String Value = query;
String Name = query;
String UPC = (allNumber ? query : null);
String SKU = (allNumber ? query : null);
MWarehousePrice[] results = null;
setParameter();
//
results = MWarehousePrice.find (p_ctx,
m_M_PriceList_Version_ID, m_M_Warehouse_ID,
Value, Name, UPC, SKU, null);
// Set Result
if (results.length == 0)
{
setM_Product_ID(0);
p_posPanel.f_curLine.setPrice(Env.ZERO);
}
else if (results.length == 1)
{
setM_Product_ID(results[0].getM_Product_ID());
f_name.setText(results[0].getName());
p_posPanel.f_curLine.setPrice(results[0].getPriceStd());
}
else // more than one
{
p_posPanel.f_queryProduct.setResults (results);
p_posPanel.openQuery(p_posPanel.f_queryProduct);
}
} // findProduct
/**
* Set Price for defined product
*/
public void setPrice()
{
if (m_product == null)
return;
//
setParameter();
MWarehousePrice result = MWarehousePrice.get (m_product,
m_M_PriceList_Version_ID, m_M_Warehouse_ID, null);
if (result != null)
p_posPanel.f_curLine.setPrice(result.getPriceStd());
} // setPrice
/**************************************************************************
* Set Product
* @param M_Product_ID id
*/
public void setM_Product_ID (int M_Product_ID)
{
log.fine( "PosSubProduct.setM_Product_ID=" + M_Product_ID);
if (M_Product_ID <= 0)
m_product = null;
else
{
m_product = MProduct.get(p_ctx, M_Product_ID);
if (m_product.get_ID() == 0)
m_product = null;
}
// Set String Info
if (m_product != null)
{
f_name.setText(m_product.getName());
f_name.setToolTipText(m_product.getDescription());
p_posPanel.f_curLine.setUOM(m_product.getUOMSymbol());
}
else
{
f_name.setText(null);
f_name.setToolTipText(null);
p_posPanel.f_curLine.setUOM(null);
}
} // setM_Product_ID
/**
* Get Product
* @return M_Product_ID
*/
public int getM_Product_ID ()
{
if (m_product != null)
return m_product.getM_Product_ID();
return 0;
} // getM_Product_ID
/**
* Get UOM
* @return C_UOM_ID
*/
public int getC_UOM_ID ()
{
if (m_product != null)
return m_product.getC_UOM_ID();
return 0;
} // getC_UOM_ID
/**
* Get Product Name
* @return name of product
*/
public String getProductName()
{
if (m_product != null)
return m_product.getName();
return "";
} // getProductName
/**
* Get Product
* @return product
*/
public MProduct getProduct()
{
return m_product;
} // getProduct
} // PosSubProduct

View File

@ -0,0 +1,127 @@
/******************************************************************************
* 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.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.border.TitledBorder;
import org.compiere.swing.CButton;
import org.compiere.swing.CLabel;
import org.compiere.util.CLogger;
import org.compiere.util.Env;
import org.compiere.util.Msg;
/**
* Sales Rep Sub Panel
*
* @author Comunidad de Desarrollo OpenXpertya
* *Basado en Codigo Original Modificado, Revisado y Optimizado de:
* *Copyright (c) Jorg Janke
* @version $Id: SubSalesRep.java,v 1.1 2004/07/12 04:10:04 jjanke Exp $
*/
public class SubSalesRep extends PosSubPanel implements ActionListener
{
/**
*
*/
private static final long serialVersionUID = 840666209988831145L;
/**
* Constructor
* @param posPanel POS Panel
*/
public SubSalesRep (PosPanel posPanel)
{
super (posPanel);
} // PosSubSalesRep
private CLabel f_label = null;
private CButton f_button = null;
/** Logger */
private static CLogger log = CLogger.getCLogger(SubSalesRep.class);
/**
* Initialize
*/
public void init()
{
// Title
TitledBorder border = new TitledBorder(Msg.translate(Env.getCtx(), "C_POS_ID"));
setBorder(border);
// Content
setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.insets = INSETS2;
// --
f_label = new CLabel(p_pos.getName(), CLabel.LEADING);
gbc.gridx = 0;
gbc.gridy = 0;
gbc.weightx = 0.5;
gbc.anchor = GridBagConstraints.WEST;
gbc.fill = GridBagConstraints.BOTH;
add (f_label, gbc);
//
f_button = new CButton (Msg.getMsg(Env.getCtx(), "Logout"));
f_button.setActionCommand("LogOut");
f_button.setFocusable(false);
f_button.addActionListener(this);
gbc.gridx = 1;
gbc.gridy = 0;
gbc.weightx = 0;
gbc.anchor = GridBagConstraints.EAST;
gbc.fill = GridBagConstraints.NONE;
add (f_button, gbc);
} // init
/**
* Get Panel Position
*/
public GridBagConstraints getGridBagConstraints()
{
GridBagConstraints gbc = super.getGridBagConstraints();
gbc.gridx = 1;
gbc.gridy = 0;
return gbc;
} // getGridBagConstraints
/**
* Dispose - Free Resources
*/
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;
log.info( "PosSubSalesRep - actionPerformed: " + action);
// Logout
p_posPanel.dispose();
} // actinPerformed
} // PosSubSalesRep