diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/WPAttributeDialog.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/WPAttributeDialog.java index 15cb12f5d6..4598853ce0 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/WPAttributeDialog.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/WPAttributeDialog.java @@ -27,6 +27,7 @@ import java.util.ArrayList; import java.util.Date; import java.util.logging.Level; +import org.adempiere.exceptions.AdempiereException; import org.adempiere.webui.ClientInfo; import org.adempiere.webui.LayoutUtils; import org.adempiere.webui.apps.AEnv; @@ -67,6 +68,7 @@ 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.MSysConfig; import org.compiere.model.X_M_MovementLine; import org.compiere.util.CLogger; @@ -127,7 +129,9 @@ public class WPAttributeDialog extends Window implements EventListener this.setShadow(true); this.setSizable(true); this.setMaximizable(true); - + + validadeRoleAccess(); + if (log.isLoggable(Level.CONFIG)) log.config("M_AttributeSetInstance_ID=" + M_AttributeSetInstance_ID + ", M_Product_ID=" + M_Product_ID + ", C_BPartner_ID=" + C_BPartner_ID @@ -215,6 +219,8 @@ public class WPAttributeDialog extends Window implements EventListener /* SysConfig USE_ESC_FOR_TAB_CLOSING */ private boolean isUseEscForTabClosing = MSysConfig.getBooleanValue(MSysConfig.USE_ESC_FOR_TAB_CLOSING, false, Env.getAD_Client_ID(Env.getCtx())); + protected boolean isAllowedToCreateAndUpdate = false; + /** * Layout * @throws Exception @@ -521,22 +527,24 @@ public class WPAttributeDialog extends Window implements EventListener return false; } + cbNewEdit.setEnabled(isAllowedToCreateAndUpdate); + // New/Edit Window if (!m_productWindow) { - cbNewEdit.setChecked(m_M_AttributeSetInstance_ID == 0); + cbNewEdit.setChecked(m_M_AttributeSetInstance_ID == 0 && isAllowedToCreateAndUpdate); cmd_newEdit(); } else { cbNewEdit.setSelected(false); - cbNewEdit.setEnabled(m_M_AttributeSetInstance_ID > 0); - bNewRecord.setEnabled(m_M_AttributeSetInstance_ID > 0); + cbNewEdit.setEnabled(m_M_AttributeSetInstance_ID > 0 && isAllowedToCreateAndUpdate); + bNewRecord.setEnabled(m_M_AttributeSetInstance_ID > 0 && isAllowedToCreateAndUpdate); boolean rw = m_M_AttributeSetInstance_ID == 0; for (int i = 0; i < m_editors.size(); i++) { WEditor editor = m_editors.get(i); - editor.setReadWrite(rw); + editor.setReadWrite(rw && isAllowedToCreateAndUpdate); } } @@ -824,7 +832,7 @@ public class WPAttributeDialog extends Window implements EventListener // OK else if (e.getTarget().getId().equals("Ok")) { - if (saveSelection()) + if (isAllowedToCreateAndUpdate && saveSelection()) dispose(); } // Cancel @@ -865,9 +873,9 @@ public class WPAttributeDialog extends Window implements EventListener for (int i = 0; i < attributes.length; i++) updateAttributeEditor(attributes[i], i); - cbNewEdit.setEnabled(true); + cbNewEdit.setEnabled(true && isAllowedToCreateAndUpdate); cbNewEdit.setSelected(false); - bNewRecord.setEnabled(true); + bNewRecord.setEnabled(true && isAllowedToCreateAndUpdate); cmd_edit(); } } @@ -974,7 +982,7 @@ public class WPAttributeDialog extends Window implements EventListener */ protected void cmd_newEdit() { - boolean rw = cbNewEdit.isChecked(); + boolean rw = cbNewEdit.isChecked() && isAllowedToCreateAndUpdate; if (log.isLoggable(Level.CONFIG)) log.config("R/W=" + rw + " " + m_masi); // fieldLotString.setReadonly(!(rw && m_masi.getM_Lot_ID()==0)); @@ -1253,4 +1261,18 @@ public class WPAttributeDialog extends Window implements EventListener return m_changed; } // isChanged + /** + * This method searches for User's Window Access to determinate if it is + * possible to create new ASI records (when IsReadWrite = true), only read + * existing ASI records (when IsReadWrite = false) or open the ASI dialog (when + * there is no Window Access for Attribute Set Instance window). + */ + private void validadeRoleAccess() { + Boolean hasAccess = MRole.getDefault().getWindowAccess(SystemIDs.WINDOW_ATTRIBUTESETINSTANCE); + if (hasAccess == null) + throw new AdempiereException(Msg.translate(Env.getCtx(), "AccessTableNoView")); + + isAllowedToCreateAndUpdate = hasAccess; + } + } // WPAttributeDialog