📄 vpattributedialog.java
字号:
/******************************************************************************
* The contents of this file are subject to the Compiere License Version 1.1
* ("License"); You may not use this file except in compliance with the License
* You may obtain a copy of the License at http://www.compiere.org/license.html
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for
* the specific language governing rights and limitations under the License.
* The Original Code is Compiere ERP & CRM Smart Business Solution. The Initial
* Developer of the Original Code is Jorg Janke. Portions created by Jorg Janke
* are Copyright (C) 1999-2005 Jorg Janke.
* All parts are Copyright (C) 1999-2005 ComPiere, Inc. All Rights Reserved.
* Contributor(s): ______________________________________.
*****************************************************************************/
package org.compiere.grid.ed;
import java.awt.*;
import java.awt.event.*;
import java.math.*;
import java.sql.*;
import java.util.*;
import java.util.logging.*;
import javax.swing.*;
import org.compiere.apps.*;
import org.compiere.apps.search.*;
import org.compiere.model.*;
import org.compiere.swing.*;
import org.compiere.util.*;
/**
* Product Attribute Set Product/Instance Dialog Editor.
* Called from VPAttribute.actionPerformed
*
* @author Jorg Janke
* @version $Id: VPAttributeDialog.java,v 1.30 2005/12/09 05:17:55 jjanke Exp $
*/
public class VPAttributeDialog extends CDialog
implements ActionListener
{
/**
* Product Attribute Instance Dialog
* @param frame parent frame
* @param M_AttributeSetInstance_ID Product Attribute Set Instance id
* @param M_Product_ID Product id
* @param productWindow this is the product window (define Product Instance)
* @param AD_Column_ID column
*/
public VPAttributeDialog (Frame frame, int M_AttributeSetInstance_ID,
int M_Product_ID, int C_BPartner_ID,
boolean productWindow, int AD_Column_ID, int WindowNo)
{
super (frame, Msg.translate(Env.getCtx(), "M_AttributeSetInstance_ID") , true);
log.config("M_AttributeSetInstance_ID=" + M_AttributeSetInstance_ID
+ ", M_Product_ID=" + M_Product_ID
+ ", C_BPartner_ID=" + C_BPartner_ID
+ ", ProductW=" + productWindow + ", Column=" + AD_Column_ID);
m_WindowNo = Env.createWindowNo (this);
m_M_AttributeSetInstance_ID = M_AttributeSetInstance_ID;
m_M_Product_ID = M_Product_ID;
m_C_BPartner_ID = C_BPartner_ID;
m_productWindow = productWindow;
m_AD_Column_ID = AD_Column_ID;
m_WindowNoParent = WindowNo;
try
{
jbInit();
}
catch(Exception ex)
{
log.log(Level.SEVERE, "VPAttributeDialog" + ex);
}
// Dynamic Init
if (!initAttributes ())
{
dispose();
return;
}
AEnv.showCenterWindow(frame, this);
} // VPAttributeDialog
private int m_WindowNo;
private MAttributeSetInstance m_masi;
private int m_M_AttributeSetInstance_ID;
private String m_M_AttributeSetInstanceName;
private int m_M_Product_ID;
private int m_C_BPartner_ID;
private int m_AD_Column_ID;
private int m_WindowNoParent;
/** Enter Product Attributes */
private boolean m_productWindow = false;
/** Change */
private boolean m_changed = false;
private CLogger log = CLogger.getCLogger(getClass());
/** Row Counter */
private int m_row = 0;
/** List of Editors */
private ArrayList<CEditor> m_editors = new ArrayList<CEditor>();
/** Length of Instance value (40) */
private static final int INSTANCE_VALUE_LENGTH = 40;
private CCheckBox cbNewEdit = new CCheckBox();
private CButton bSelect = new CButton(Env.getImageIcon("PAttribute16.gif"));
// Lot
private VString fieldLotString = new VString ("Lot", false, false, true, 20, 20, null, null);
private CComboBox fieldLot = null;
private CButton bLot = new CButton(Msg.getMsg (Env.getCtx(), "New"));
// Lot Popup
JPopupMenu popupMenu = new JPopupMenu();
private CMenuItem mZoom;
// Ser No
private VString fieldSerNo = new VString ("SerNo", false, false, true, 20, 20, null, null);
private CButton bSerNo = new CButton(Msg.getMsg (Env.getCtx(), "New"));
// Date
private VDate fieldGuaranteeDate = new VDate ("GuaranteeDate", false, false, true, DisplayType.Date, Msg.translate(Env.getCtx(), "GuaranteeDate"));
//
private CTextField fieldDescription = new CTextField (20);
//
private BorderLayout mainLayout = new BorderLayout();
private CPanel centerPanel = new CPanel();
private ALayout centerLayout = new ALayout(5,5, true);
private ConfirmPanel confirmPanel = new ConfirmPanel (true);
/**
* Layout
* @throws Exception
*/
private void jbInit () throws Exception
{
this.getContentPane().setLayout(mainLayout);
this.getContentPane().add(centerPanel, BorderLayout.CENTER);
this.getContentPane().add(confirmPanel, BorderLayout.SOUTH);
centerPanel.setLayout(centerLayout);
//
confirmPanel.addActionListener(this);
} // jbInit
/**
* Dyanmic Init.
* @return true if initialized
*/
private boolean initAttributes ()
{
if (m_M_Product_ID == 0)
return false;
// Get Model
m_masi = MAttributeSetInstance.get(Env.getCtx(), m_M_AttributeSetInstance_ID, m_M_Product_ID);
if (m_masi == null)
{
log.severe ("No Model for M_AttributeSetInstance_ID=" + m_M_AttributeSetInstance_ID + ", M_Product_ID=" + m_M_Product_ID);
return false;
}
Env.setContext(Env.getCtx(), m_WindowNo, "M_AttributeSet_ID", m_masi.getM_AttributeSet_ID());
// Get Attribute Set
MAttributeSet as = m_masi.getMAttributeSet();
// Product has no Attribute Set
if (as == null)
{
ADialog.error(m_WindowNo, this, "PAttributeNoAttributeSet");
return false;
}
// Product has no Instance Attributes
if (!m_productWindow && !as.isInstanceAttribute())
{
ADialog.error(m_WindowNo, this, "PAttributeNoInstanceAttribute");
return false;
}
// Show Product Attributes
if (m_productWindow)
{
MAttribute[] attributes = as.getMAttributes (false);
log.fine ("Product Attributes=" + attributes.length);
for (int i = 0; i < attributes.length; i++)
addAttributeLine (attributes[i], true, !m_productWindow);
}
else // Set Instance Attributes
{
// New/Edit - Selection
if (m_M_AttributeSetInstance_ID == 0) // new
cbNewEdit.setText(Msg.getMsg(Env.getCtx(), "NewRecord"));
else
cbNewEdit.setText(Msg.getMsg(Env.getCtx(), "EditRecord"));
cbNewEdit.addActionListener(this);
centerPanel.add(cbNewEdit, new ALayoutConstraint(m_row++,0));
bSelect.setText(Msg.getMsg(Env.getCtx(), "SelectExisting"));
bSelect.addActionListener(this);
centerPanel.add(bSelect, null);
// All Attributes
MAttribute[] attributes = as.getMAttributes (true);
log.fine ("Instance Attributes=" + attributes.length);
for (int i = 0; i < attributes.length; i++)
addAttributeLine (attributes[i], false, false);
}
// Lot
if (!m_productWindow && as.isLot())
{
CLabel label = new CLabel (Msg.translate(Env.getCtx(), "Lot"));
label.setLabelFor (fieldLotString);
centerPanel.add(label, new ALayoutConstraint(m_row++,0));
centerPanel.add(fieldLotString, null);
fieldLotString.setText (m_masi.getLot());
// M_Lot_ID
// int AD_Column_ID = 9771; // M_AttributeSetInstance.M_Lot_ID
// fieldLot = new VLookup ("M_Lot_ID", false,false, true,
// MLookupFactory.get(Env.getCtx(), m_WindowNo, 0, AD_Column_ID, DisplayType.TableDir));
String sql = "SELECT M_Lot_ID, Name "
+ "FROM M_Lot l "
+ "WHERE EXISTS (SELECT M_Product_ID FROM M_Product p "
+ "WHERE p.M_AttributeSet_ID=" + m_masi.getM_AttributeSet_ID()
+ " AND p.M_Product_ID=l.M_Product_ID)";
fieldLot = new CComboBox(DB.getKeyNamePairs(sql, true));
label = new CLabel (Msg.translate(Env.getCtx(), "M_Lot_ID"));
label.setLabelFor (fieldLot);
centerPanel.add(label, new ALayoutConstraint(m_row++,0));
centerPanel.add(fieldLot, null);
if (m_masi.getM_Lot_ID() != 0)
{
for (int i = 1; i < fieldLot.getItemCount(); i++)
{
KeyNamePair pp = (KeyNamePair)fieldLot.getItemAt(i);
if (pp.getKey() == m_masi.getM_Lot_ID())
{
fieldLot.setSelectedIndex(i);
fieldLotString.setEditable(false);
break;
}
}
}
fieldLot.addActionListener(this);
// New Lot Button
if (m_masi.getMAttributeSet().getM_LotCtl_ID() != 0)
{
if (MRole.getDefault().isTableAccess(MLot.Table_ID, false)
&& MRole.getDefault().isTableAccess(MLotCtl.Table_ID, false)
&& !m_masi.isExcludeLot(m_AD_Column_ID, Env.isSOTrx(Env.getCtx(), m_WindowNoParent)))
{
centerPanel.add(bLot, null);
bLot.addActionListener(this);
}
}
// Popup
fieldLot.addMouseListener(new VPAttributeDialog_mouseAdapter(this)); // popup
mZoom = new CMenuItem(Msg.getMsg(Env.getCtx(), "Zoom"), Env.getImageIcon("Zoom16.gif"));
mZoom.addActionListener(this);
popupMenu.add(mZoom);
} // Lot
// SerNo
if (!m_productWindow && as.isSerNo())
{
CLabel label = new CLabel (Msg.translate(Env.getCtx(), "SerNo"));
label.setLabelFor(fieldSerNo);
fieldSerNo.setText(m_masi.getSerNo());
centerPanel.add(label, new ALayoutConstraint(m_row++,0));
centerPanel.add(fieldSerNo, null);
// New SerNo Button
if (m_masi.getMAttributeSet().getM_SerNoCtl_ID() != 0)
{
if (MRole.getDefault().isTableAccess(MSerNoCtl.Table_ID, false)
&& !m_masi.isExcludeSerNo(m_AD_Column_ID, Env.isSOTrx(Env.getCtx(), m_WindowNoParent)))
{
centerPanel.add(bSerNo, null);
bSerNo.addActionListener(this);
}
}
} // SerNo
// GuaranteeDate
if (!m_productWindow && as.isGuaranteeDate())
{
CLabel label = new CLabel (Msg.translate(Env.getCtx(), "GuaranteeDate"));
label.setLabelFor(fieldGuaranteeDate);
if (m_M_AttributeSetInstance_ID == 0)
fieldGuaranteeDate.setValue(m_masi.getGuaranteeDate(true));
else
fieldGuaranteeDate.setValue(m_masi.getGuaranteeDate());
centerPanel.add(label, new ALayoutConstraint(m_row++,0));
centerPanel.add(fieldGuaranteeDate, null);
} // GuaranteeDate
if (m_row == 0)
{
ADialog.error(m_WindowNo, this, "PAttributeNoInfo");
return false;
}
// New/Edit Window
if (!m_productWindow)
{
cbNewEdit.setSelected(m_M_AttributeSetInstance_ID == 0);
cmd_newEdit();
}
// Attrribute Set Instance Description
CLabel label = new CLabel (Msg.translate(Env.getCtx(), "Description"));
label.setLabelFor(fieldDescription);
fieldDescription.setText(m_masi.getDescription());
fieldDescription.setEditable(false);
centerPanel.add(label, new ALayoutConstraint(m_row++,0));
centerPanel.add(fieldDescription, null);
// Window usually to wide (??)
Dimension dd = centerPanel.getPreferredSize();
dd.width = Math.min(500, dd.width);
centerPanel.setPreferredSize(dd);
return true;
} // initAttribute
/**
* Add Attribute Line
* @param attribute attribute
* @param product product level attribute
* @param readOnly value is read only
*/
private void addAttributeLine (MAttribute attribute, boolean product, boolean readOnly)
{
log.fine(attribute + ", Product=" + product + ", R/O=" + readOnly);
CLabel label = new CLabel (attribute.getName());
if (product)
label.setFont(new Font(label.getFont().getFontName(), Font.BOLD, label.getFont().getSize()));
if (attribute.getDescription() != null)
label.setToolTipText(attribute.getDescription());
centerPanel.add(label, new ALayoutConstraint(m_row++,0));
//
MAttributeInstance instance = attribute.getMAttributeInstance (m_M_AttributeSetInstance_ID);
if (MAttribute.ATTRIBUTEVALUETYPE_List.equals(attribute.getAttributeValueType()))
{
MAttributeValue[] values = attribute.getMAttributeValues(); // optional = null
CComboBox editor = new CComboBox(values);
boolean found = false;
if (instance != null)
{
for (int i = 0; i < values.length; i++)
{
if (values[i] != null && values[i].getM_AttributeValue_ID () == instance.getM_AttributeValue_ID ())
{
editor.setSelectedIndex (i);
found = true;
break;
}
}
if (found)
log.fine("Attribute=" + attribute.getName() + " #" + values.length + " - found: " + instance);
else
log.warning("Attribute=" + attribute.getName() + " #" + values.length + " - NOT found: " + instance);
} // setComboBox
else
log.fine("Attribute=" + attribute.getName() + " #" + values.length + " no instance");
label.setLabelFor(editor);
centerPanel.add(editor, null);
if (readOnly)
editor.setEnabled(false);
else
m_editors.add (editor);
}
else if (MAttribute.ATTRIBUTEVALUETYPE_Number.equals(attribute.getAttributeValueType()))
{
VNumber editor = new VNumber(attribute.getName(), attribute.isMandatory(),
false, true, DisplayType.Number, attribute.getName());
if (instance != null)
editor.setValue(instance.getValueNumber());
else
editor.setValue(Env.ZERO);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -