/****************************************************************************** * 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.grid.ed; import java.awt.BorderLayout; import java.awt.Component; import java.awt.Cursor; import java.awt.Dimension; import java.awt.Font; import java.awt.Frame; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseEvent; import java.math.BigDecimal; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.Timestamp; import java.util.ArrayList; import java.util.logging.Level; import javax.swing.JPopupMenu; import javax.swing.SwingConstants; import javax.swing.SwingUtilities; import org.compiere.apps.ADialog; import org.compiere.apps.AEnv; import org.compiere.apps.ALayout; import org.compiere.apps.ALayoutConstraint; import org.compiere.apps.AWindow; import org.compiere.apps.ConfirmPanel; import org.compiere.apps.search.PAttributeInstance; import org.compiere.model.MAttribute; import org.compiere.model.MAttributeInstance; import org.compiere.model.MAttributeSet; import org.compiere.model.MAttributeSetInstance; import org.compiere.model.MAttributeValue; import org.compiere.model.MDocType; import org.compiere.model.MLot; import org.compiere.model.MLotCtl; import org.compiere.model.MQuery; import org.compiere.model.MRole; import org.compiere.model.MSerNoCtl; import org.compiere.model.SystemIDs; import org.compiere.model.X_M_MovementLine; import org.compiere.swing.CButton; import org.compiere.swing.CCheckBox; import org.compiere.swing.CComboBox; import org.compiere.swing.CDialog; import org.compiere.swing.CEditor; import org.compiere.swing.CLabel; import org.compiere.swing.CMenuItem; import org.compiere.swing.CPanel; import org.compiere.swing.CTextField; import org.compiere.util.CLogger; import org.compiere.util.DB; import org.compiere.util.DisplayType; import org.compiere.util.Env; import org.compiere.util.KeyNamePair; import org.compiere.util.Msg; /** * Product Attribute Set Product/Instance Dialog Editor. * Called from VPAttribute.actionPerformed * * @author Jorg Janke * @version $Id: VPAttributeDialog.java,v 1.4 2006/07/30 00:51:27 jjanke Exp $ */ public class VPAttributeDialog extends CDialog implements ActionListener, SystemIDs { /** * */ private static final long serialVersionUID = -1062346984681892620L; /***************************************************************************** * Mouse Listener for Popup Menu */ final class VPAttributeDialog_mouseAdapter extends java.awt.event.MouseAdapter { /** * Constructor * @param adaptee adaptee */ VPAttributeDialog_mouseAdapter(VPAttributeDialog adaptee) { m_adaptee = adaptee; } // VPAttributeDialog_mouseAdapter private VPAttributeDialog m_adaptee; /** * Mouse Listener * @param e MouseEvent */ public void mouseClicked(MouseEvent e) { // System.out.println("mouseClicked " + e.getID() + " " + e.getSource().getClass().toString()); // popup menu if (SwingUtilities.isRightMouseButton(e)) m_adaptee.popupMenu.show((Component)e.getSource(), e.getX(), e.getY()); } // mouse Clicked } // VPAttributeDialog_mouseAdapter /** * Product Attribute Instance Dialog * @param frame parent frame * @param M_AttributeSetInstance_ID Product Attribute Set Instance id * @param M_Product_ID Product id * @param C_BPartner_ID b partner * @param productWindow this is the product window (define Product Instance) * @param AD_Column_ID column * @param WindowNo window */ 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; //get columnName from ad_column m_columnName = DB.getSQLValueString(null, "SELECT ColumnName FROM AD_Column WHERE AD_Column_ID = ?", m_AD_Column_ID); if (m_columnName == null || m_columnName.trim().length() == 0) { //fallback m_columnName = "M_AttributeSetInstance_ID"; } 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 int m_M_Locator_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); private String m_columnName = null; /** * 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 && !m_productWindow) return false; MAttributeSet as = null; if (m_M_Product_ID != 0) { // 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 as = m_masi.getMAttributeSet(); } else { int M_AttributeSet_ID = Env.getContextAsInt(Env.getCtx(), m_WindowNoParent, "M_AttributeSet_ID"); m_masi = new MAttributeSetInstance (Env.getCtx(), 0, M_AttributeSet_ID, null); 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); label.setLabelFor(editor); centerPanel.add(editor, null); if (readOnly) editor.setEnabled(false); else m_editors.add (editor); } else // Text Field { VString editor = new VString (attribute.getName(), attribute.isMandatory(), false, true, 20, INSTANCE_VALUE_LENGTH, null, null); if (instance != null) editor.setText(instance.getValue()); label.setLabelFor(editor); centerPanel.add(editor, null); if (readOnly) editor.setEnabled(false); else m_editors.add (editor); } } // addAttributeLine /** * dispose */ public void dispose() { removeAll(); Env.clearWinContext(m_WindowNo); // Env.setContext(Env.getCtx(), m_WindowNo, Env.TAB_INFO, m_columnName, String.valueOf(m_M_AttributeSetInstance_ID)); Env.setContext(Env.getCtx(), m_WindowNo, Env.TAB_INFO, "M_Locator_ID", String.valueOf(m_M_Locator_ID)); // super.dispose(); } // dispose /** * ActionListener * @param e event */ public void actionPerformed(ActionEvent e) { // Select Instance if (e.getSource() == bSelect) { if (cmd_select()) { reloadWindow(); } } // New/Edit else if (e.getSource() == cbNewEdit) { cmd_newEdit(); } // Select Lot from existing else if (e.getSource() == fieldLot) { KeyNamePair pp = (KeyNamePair)fieldLot.getSelectedItem(); if (pp != null && pp.getKey() != -1) { fieldLotString.setText(pp.getName()); fieldLotString.setEditable(false); m_masi.setM_Lot_ID(pp.getKey()); } else { fieldLotString.setEditable(true); m_masi.setM_Lot_ID(0); } } // Create New Lot else if (e.getSource() == bLot) { KeyNamePair pp = m_masi.createLot(m_M_Product_ID); if (pp != null) { fieldLot.addItem(pp); fieldLot.setSelectedItem(pp); } } // Create New SerNo else if (e.getSource() == bSerNo) { fieldSerNo.setText(m_masi.getSerNo(true)); } // OK else if (e.getActionCommand().equals(ConfirmPanel.A_OK)) { if (saveSelection()) dispose(); } // Cancel else if (e.getActionCommand().equals(ConfirmPanel.A_CANCEL)) { m_changed = false; m_M_AttributeSetInstance_ID = 0; m_M_Locator_ID = 0; dispose(); } // Zoom M_Lot else if (e.getSource() == mZoom) { cmd_zoom(); } else log.log(Level.SEVERE, "not found - " + e); } // actionPerformed /** * Allow show/edit the attribute set instance recently selected * @author Emiliano Pereyra */ private void reloadWindow() { this.getContentPane().remove(centerPanel); centerLayout = new ALayout(5,5, true); centerPanel = new CPanel(); m_editors = new ArrayList<CEditor>(); m_row = 0; try { jbInit(); } catch (Exception ex) { log.log(Level.SEVERE, "VPAttributeDialog", ex); } initAttributes(); cbNewEdit.setSelected(true); cmd_newEdit(); pack(); } // reloadWindow /** * Instance Selection Button * @return true if selected */ private boolean cmd_select() { log.config(""); int M_Warehouse_ID = Env.getContextAsInt(Env.getCtx(), m_WindowNoParent, "M_Warehouse_ID"); int C_DocType_ID = Env.getContextAsInt(Env.getCtx(), m_WindowNoParent, "C_DocType_ID"); if (C_DocType_ID > 0) { MDocType doctype = new MDocType (Env.getCtx(), C_DocType_ID, null); String docbase = doctype.getDocBaseType(); if (docbase.equals(MDocType.DOCBASETYPE_MaterialReceipt)) M_Warehouse_ID = 0; } // teo_sarca [ 1564520 ] Inventory Move: can't select existing attributes int M_Locator_ID = 0; if (m_AD_Column_ID == COLUMN_M_MOVEMENTLINE_M_ATTRIBUTESETINSTANCE_ID) { // TODO: hardcoded: M_MovementLine[324].M_AttributeSetInstance_ID[8551] M_Locator_ID = Env.getContextAsInt(Env.getCtx(), m_WindowNoParent, X_M_MovementLine.COLUMNNAME_M_Locator_ID, true); // only window } String title = ""; // Get Text String sql = "SELECT p.Name, w.Name, w.M_Warehouse_ID FROM M_Product p, M_Warehouse w " + "WHERE p.M_Product_ID=? AND w.M_Warehouse_ID" + (M_Locator_ID <= 0 ? "=?" : " IN (SELECT M_Warehouse_ID FROM M_Locator where M_Locator_ID=?)"); // teo_sarca [ 1564520 ] PreparedStatement pstmt = null; ResultSet rs = null; try { pstmt = DB.prepareStatement(sql, null); pstmt.setInt(1, m_M_Product_ID); pstmt.setInt(2, M_Locator_ID <= 0 ? M_Warehouse_ID : M_Locator_ID); rs = pstmt.executeQuery(); if (rs.next()) { title = rs.getString(1) + " - " + rs.getString(2); M_Warehouse_ID = rs.getInt(3); // fetch the actual warehouse - teo_sarca [ 1564520 ] } } catch (Exception e) { log.log(Level.SEVERE, sql, e); } finally { DB.close(rs, pstmt); rs = null; pstmt = null; } // PAttributeInstance pai = new PAttributeInstance(this, title, M_Warehouse_ID, M_Locator_ID, m_M_Product_ID, m_C_BPartner_ID); if (pai.getM_AttributeSetInstance_ID() != -1) { m_M_AttributeSetInstance_ID = pai.getM_AttributeSetInstance_ID(); m_M_AttributeSetInstanceName = pai.getM_AttributeSetInstanceName(); m_M_Locator_ID = pai.getM_Locator_ID(); m_changed = true; return true; } return false; } // cmd_select /** * Instance New/Edit */ private void cmd_newEdit() { boolean rw = cbNewEdit.isSelected(); log.config("R/W=" + rw + " " + m_masi); // fieldLotString.setEditable(rw && m_masi.getM_Lot_ID()==0); if (fieldLot != null) fieldLot.setReadWrite(rw); bLot.setReadWrite(rw); fieldSerNo.setReadWrite(rw); bSerNo.setReadWrite(rw); fieldGuaranteeDate.setReadWrite(rw); // for (int i = 0; i < m_editors.size(); i++) { CEditor editor = (CEditor)m_editors.get(i); editor.setReadWrite(rw); } } // cmd_newEdit /** * Zoom M_Lot */ private void cmd_zoom() { int M_Lot_ID = 0; KeyNamePair pp = (KeyNamePair)fieldLot.getSelectedItem(); if (pp != null) M_Lot_ID = pp.getKey(); MQuery zoomQuery = new MQuery("M_Lot"); zoomQuery.addRestriction("M_Lot_ID", MQuery.EQUAL, M_Lot_ID); log.info(zoomQuery.toString()); // setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); // int AD_Window_ID = WINDOW_LOT; // Lot AWindow frame = new AWindow(); if (frame.initWindow(AD_Window_ID, zoomQuery)) { this.setVisible(false); this.setModal (false); // otherwise blocked this.setVisible(true); AEnv.addToWindowManager(frame); AEnv.showScreen(frame, SwingConstants.EAST); } // async window - not able to get feedback frame = null; // setCursor(Cursor.getDefaultCursor()); } // cmd_zoom /** * Save Selection * @return true if saved */ private boolean saveSelection() { log.info(""); MAttributeSet as = m_masi.getMAttributeSet(); if (as == null) return true; // m_changed = false; String mandatory = ""; if (!m_productWindow && as.isLot()) { log.fine("Lot=" + fieldLotString.getText ()); String text = fieldLotString.getText(); m_masi.setLot (text); if (as.isLotMandatory() && (text == null || text.length() == 0)) mandatory += " - " + Msg.translate(Env.getCtx(), "Lot"); m_changed = true; } // Lot if (!m_productWindow && as.isSerNo()) { log.fine("SerNo=" + fieldSerNo.getText()); String text = fieldSerNo.getText(); m_masi.setSerNo(text); if (as.isSerNoMandatory() && (text == null || text.length() == 0)) mandatory += " - " + Msg.translate(Env.getCtx(), "SerNo"); m_changed = true; } // SerNo if (!m_productWindow && as.isGuaranteeDate()) { log.fine("GuaranteeDate=" + fieldGuaranteeDate.getValue()); Timestamp ts = (Timestamp)fieldGuaranteeDate.getValue(); m_masi.setGuaranteeDate(ts); if (as.isGuaranteeDateMandatory() && ts == null) mandatory += " - " + Msg.translate(Env.getCtx(), "GuaranteeDate"); m_changed = true; } // GuaranteeDate // *** Save Attributes *** // New Instance if (m_changed || m_masi.getM_AttributeSetInstance_ID() == 0) { m_masi.save (); m_M_AttributeSetInstance_ID = m_masi.getM_AttributeSetInstance_ID (); m_M_AttributeSetInstanceName = m_masi.getDescription(); } // Save Instance Attributes MAttribute[] attributes = as.getMAttributes(!m_productWindow); for (int i = 0; i < attributes.length; i++) { if (MAttribute.ATTRIBUTEVALUETYPE_List.equals(attributes[i].getAttributeValueType())) { CComboBox editor = (CComboBox)m_editors.get(i); MAttributeValue value = (MAttributeValue)editor.getSelectedItem(); log.fine(attributes[i].getName() + "=" + value); if (attributes[i].isMandatory() && value == null) mandatory += " - " + attributes[i].getName(); attributes[i].setMAttributeInstance(m_M_AttributeSetInstance_ID, value); } else if (MAttribute.ATTRIBUTEVALUETYPE_Number.equals(attributes[i].getAttributeValueType())) { VNumber editor = (VNumber)m_editors.get(i); BigDecimal value = (BigDecimal)editor.getValue(); log.fine(attributes[i].getName() + "=" + value); if (attributes[i].isMandatory() && value == null) mandatory += " - " + attributes[i].getName(); attributes[i].setMAttributeInstance(m_M_AttributeSetInstance_ID, value); } else { VString editor = (VString)m_editors.get(i); String value = editor.getText(); log.fine(attributes[i].getName() + "=" + value); if (attributes[i].isMandatory() && (value == null || value.length() == 0)) mandatory += " - " + attributes[i].getName(); attributes[i].setMAttributeInstance(m_M_AttributeSetInstance_ID, value); } m_changed = true; } // for all attributes // Save Model if (m_changed) { m_masi.setDescription (); m_masi.save (); } m_M_AttributeSetInstance_ID = m_masi.getM_AttributeSetInstance_ID (); m_M_AttributeSetInstanceName = m_masi.getDescription(); // if (mandatory.length() > 0) { ADialog.error(m_WindowNo, this, "FillMandatory", mandatory); return false; } return true; } // saveSelection /************************************************************************** * Get Instance ID * @return Instance ID */ public int getM_AttributeSetInstance_ID() { return m_M_AttributeSetInstance_ID; } // getM_AttributeSetInstance_ID /** * Get Instance Name * @return Instance Name */ public String getM_AttributeSetInstanceName() { return m_M_AttributeSetInstanceName; } // getM_AttributeSetInstanceName /** * Get Locator ID * @return M_Locator_ID */ public int getM_Locator_ID() { return m_M_Locator_ID; } /** * Value Changed * @return true if changed */ public boolean isChanged() { return m_changed; } // isChanged } // VPAttributeDialog