added support to allow edit of existing asi records.

This commit is contained in:
Heng Sin Low 2010-07-27 12:21:11 +08:00
parent 1c3e73c240
commit 1c8fc5649e
1 changed files with 205 additions and 34 deletions

View File

@ -66,6 +66,7 @@ import org.zkoss.zkex.zul.Center;
import org.zkoss.zkex.zul.South;
import org.zkoss.zul.Menuitem;
import org.zkoss.zul.Menupopup;
import org.zkoss.zul.Space;
import org.zkoss.zul.impl.InputElement;
/**
@ -165,6 +166,8 @@ public class WPAttributeDialog extends Window implements EventListener
private static final int INSTANCE_VALUE_LENGTH = 40;
private Checkbox cbNewEdit = new Checkbox();
private Button bNewRecord = new Button(Msg.getMsg(Env.getCtx(), "NewRecord"));
private Listbox existingCombo = new Listbox();
private Button bSelect = new Button();
// Lot
// private VString fieldLotString = new VString ("Lot", false, false, true, 20, 20, null, null);
@ -245,7 +248,7 @@ public class WPAttributeDialog extends Window implements EventListener
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);
m_masi = new MAttributeSetInstance (Env.getCtx(), m_M_AttributeSetInstance_ID, M_AttributeSet_ID, null);
as = m_masi.getMAttributeSet();
}
@ -265,10 +268,49 @@ public class WPAttributeDialog extends Window implements EventListener
// Show Product Attributes
if (m_productWindow)
{
Row row = new Row();
row.setParent(rows);
cbNewEdit.setLabel(Msg.getMsg(Env.getCtx(), "EditRecord"));
cbNewEdit.addEventListener(Events.ON_CHECK, this);
row.appendChild(cbNewEdit);
String sql = "SELECT M_AttributeSetInstance_ID, Description"
+ " FROM M_AttributeSetInstance"
+ " WHERE M_AttributeSet_ID = " + as.getM_AttributeSet_ID()
+ " AND EXISTS ("
+ " SELECT 1 FROM M_AttributeInstance INNER JOIN M_Attribute"
+ " ON (M_AttributeInstance.M_Attribute_ID = M_Attribute.M_Attribute_ID)"
+ " WHERE M_AttributeInstance.M_AttributeSetInstance_ID = M_AttributeSetInstance.M_AttributeSetInstance_ID"
+ " AND M_Attribute.IsInstanceAttribute = 'N')";
existingCombo.setMold("select");
KeyNamePair[] keyNamePairs = DB.getKeyNamePairs(sql, true);
for (KeyNamePair pair : keyNamePairs) {
existingCombo.appendItem(pair.getName(), pair.getKey());
}
existingCombo.addActionListener(this);
row.appendChild(existingCombo);
row = new Row();
row.setParent(rows);
bNewRecord.addActionListener(this);
row.appendChild(bNewRecord);
row.appendChild(new Space());
MAttribute[] attributes = as.getMAttributes (false);
log.fine ("Product Attributes=" + attributes.length);
for (int i = 0; i < attributes.length; i++)
addAttributeLine (rows, attributes[i], true, !m_productWindow);
addAttributeLine (rows, attributes[i], true, false);
if (m_M_AttributeSetInstance_ID > 0)
{
for(int i = 0; i < existingCombo.getItemCount(); i++)
{
ListItem pp = existingCombo.getItemAtIndex(i);
if (pp.getValue() != null && (Integer)pp.getValue() == m_M_AttributeSetInstance_ID)
{
existingCombo.setSelectedIndex(i);
break;
}
}
}
}
else // Set Instance Attributes
{
@ -415,6 +457,23 @@ public class WPAttributeDialog extends Window implements EventListener
cbNewEdit.setChecked(m_M_AttributeSetInstance_ID == 0);
cmd_newEdit();
}
else
{
cbNewEdit.setSelected(false);
cbNewEdit.setEnabled(m_M_AttributeSetInstance_ID > 0);
bNewRecord.setEnabled(m_M_AttributeSetInstance_ID > 0);
boolean rw = m_M_AttributeSetInstance_ID == 0;
for (int i = 0; i < m_editors.size(); i++)
{
HtmlBasedComponent editor = m_editors.get(i);
if (editor instanceof InputElement)
((InputElement)editor).setReadonly(!rw);
else if (editor instanceof Listbox)
((Listbox)editor).setEnabled(rw);
else if (editor instanceof NumberBox)
((NumberBox)editor).setEnabled(rw);
}
}
// Attrribute Set Instance Description
Label label = new Label (Msg.translate(Env.getCtx(), "Description"));
@ -450,7 +509,7 @@ public class WPAttributeDialog extends Window implements EventListener
Row row = rows.newRow();
row.appendChild(label.rightAlign());
//
MAttributeInstance instance = attribute.getMAttributeInstance (m_M_AttributeSetInstance_ID);
if (MAttribute.ATTRIBUTEVALUETYPE_List.equals(attribute.getAttributeValueType()))
{
MAttributeValue[] values = attribute.getMAttributeValues(); // optional = null
@ -461,7 +520,72 @@ public class WPAttributeDialog extends Window implements EventListener
ListItem item = new ListItem(value != null ? value.getName() : "", value);
editor.appendChild(item);
}
if (readOnly)
editor.setEnabled(false);
else
m_editors.add (editor);
row.appendChild(editor);
setListAttribute(attribute, editor);
}
else if (MAttribute.ATTRIBUTEVALUETYPE_Number.equals(attribute.getAttributeValueType()))
{
NumberBox editor = new NumberBox(false);
setNumberAttribute(attribute, editor);
row.appendChild(editor);
if (readOnly)
editor.setEnabled(false);
else
m_editors.add (editor);
}
else // Text Field
{
Textbox editor = new Textbox();
setStringAttribute(attribute, editor);
row.appendChild(editor);
if (readOnly)
editor.setEnabled(false);
else
m_editors.add (editor);
}
} // addAttributeLine
private void updateAttributeEditor(MAttribute attribute, int index) {
if (MAttribute.ATTRIBUTEVALUETYPE_List.equals(attribute.getAttributeValueType()))
{
Listbox editor = (Listbox) m_editors.get(index);
setListAttribute(attribute, editor);
}
else if (MAttribute.ATTRIBUTEVALUETYPE_Number.equals(attribute.getAttributeValueType()))
{
NumberBox editor = (NumberBox) m_editors.get(index);
setNumberAttribute(attribute, editor);
}
else // Text Field
{
Textbox editor = (Textbox) m_editors.get(index);
setStringAttribute(attribute, editor);
}
}
private void setStringAttribute(MAttribute attribute, Textbox editor) {
MAttributeInstance instance = attribute.getMAttributeInstance (m_M_AttributeSetInstance_ID);
if (instance != null)
editor.setText(instance.getValue());
}
private void setNumberAttribute(MAttribute attribute, NumberBox editor) {
MAttributeInstance instance = attribute.getMAttributeInstance (m_M_AttributeSetInstance_ID);
if (instance != null)
editor.setValue(instance.getValueNumber());
else
editor.setValue(Env.ZERO);
}
private void setListAttribute(MAttribute attribute, Listbox editor) {
boolean found = false;
MAttributeInstance instance = attribute.getMAttributeInstance (m_M_AttributeSetInstance_ID);
MAttributeValue[] values = attribute.getMAttributeValues(); // optional = null
if (instance != null)
{
for (int i = 0; i < values.length; i++)
@ -480,41 +604,7 @@ public class WPAttributeDialog extends Window implements EventListener
} // setComboBox
else
log.fine("Attribute=" + attribute.getName() + " #" + values.length + " no instance");
row.appendChild(editor);
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());
NumberBox editor = new NumberBox(false);
if (instance != null)
editor.setValue(instance.getValueNumber());
else
editor.setValue(Env.ZERO);
row.appendChild(editor);
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);
Textbox editor = new Textbox();
if (instance != null)
editor.setText(instance.getValue());
row.appendChild(editor);
if (readOnly)
editor.setEnabled(false);
else
m_editors.add (editor);
}
} // addAttributeLine
/**
* dispose
@ -541,9 +631,24 @@ public class WPAttributeDialog extends Window implements EventListener
}
// New/Edit
else if (e.getTarget() == cbNewEdit)
{
if (m_productWindow)
{
cmd_edit();
}
else
{
cmd_newEdit();
}
}
else if (e.getTarget() == bNewRecord)
{
cmd_newRecord();
}
else if (e.getTarget() == existingCombo)
{
cmd_existingCombo();
}
// Select Lot from existing
else if (e.getTarget() == fieldLot)
{
@ -600,6 +705,72 @@ public class WPAttributeDialog extends Window implements EventListener
log.log(Level.SEVERE, "not found - " + e);
} // actionPerformed
private void cmd_existingCombo() {
ListItem pp = existingCombo.getSelectedItem();
if (pp != null && (Integer)pp.getValue() != -1)
{
m_M_AttributeSetInstance_ID = (Integer) pp.getValue();
m_masi = MAttributeSetInstance.get(Env.getCtx(), m_M_AttributeSetInstance_ID, m_M_Product_ID);
// Get Attribute Set
MAttributeSet as = m_masi.getMAttributeSet();
MAttribute[] attributes = as.getMAttributes (false);
log.fine ("Product Attributes=" + attributes.length);
for (int i = 0; i < attributes.length; i++)
updateAttributeEditor(attributes[i], i);
cbNewEdit.setEnabled(true);
cbNewEdit.setSelected(false);
bNewRecord.setEnabled(true);
cmd_edit();
}
}
private void cmd_newRecord() {
cbNewEdit.setSelected(false);
cbNewEdit.setEnabled(false);
bNewRecord.setEnabled(false);
existingCombo.setSelectedItem(null);
m_M_AttributeSetInstance_ID = 0;
int M_AttributeSet_ID = m_masi.getM_AttributeSet_ID();
m_masi = new MAttributeSetInstance (Env.getCtx(), m_M_AttributeSetInstance_ID, M_AttributeSet_ID, null);
for (int i = 0; i < m_editors.size(); i++)
{
HtmlBasedComponent editor = m_editors.get(i);
if (editor instanceof InputElement)
{
((InputElement)editor).setReadonly(false);
((InputElement)editor).setText(null);
}
else if (editor instanceof Listbox)
{
((Listbox)editor).setEnabled(true);
((Listbox)editor).setSelectedItem(null);
}
else if (editor instanceof NumberBox)
{
((NumberBox)editor).setEnabled(true);
((NumberBox)editor).setValue(null);
}
}
fieldDescription.setText("");
}
private void cmd_edit() {
boolean check = cbNewEdit.isSelected();
for (int i = 0; i < m_editors.size(); i++)
{
HtmlBasedComponent editor = m_editors.get(i);
if (editor instanceof InputElement)
((InputElement)editor).setReadonly(!check);
else if (editor instanceof Listbox)
((Listbox)editor).setEnabled(check);
else if (editor instanceof NumberBox)
((NumberBox)editor).setEnabled(check);
}
}
/**
* Instance Selection Button
* @return true if selected