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:
parent
fb7eb25653
commit
403ccaf162
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -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
|
|
||||||
;
|
|
||||||
|
|
|
@ -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);
|
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -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
|
|
||||||
;
|
|
||||||
|
|
|
@ -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;
|
|
||||||
|
|
|
@ -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;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -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";
|
||||||
|
|
||||||
|
|
|
@ -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";
|
||||||
|
|
||||||
|
|
|
@ -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";
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
//
|
//
|
||||||
|
|
|
@ -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
|
||||||
{
|
{
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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);
|
|
||||||
}
|
|
||||||
}
|
}
|
|
@ -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);
|
|
||||||
}
|
|
||||||
}
|
}
|
|
@ -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
|
||||||
|
|
|
@ -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;
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
|
|
@ -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();
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -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
|
|
||||||
|
|
|
@ -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 );
|
|
||||||
|
|
||||||
}
|
|
|
@ -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
|
|
||||||
|
|
||||||
}
|
|
|
@ -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 */
|
||||||
|
|
|
@ -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();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -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
|
|
|
@ -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
|
||||||
|
|
||||||
}
|
|
||||||
|
|
|
@ -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
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
|
@ -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
|
|
||||||
|
|
||||||
}
|
|
|
@ -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
|
||||||
|
|
|
@ -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));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -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();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
|
@ -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
|
|
|
@ -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
|
|
@ -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
|
Loading…
Reference in New Issue