IDEMPIERE-5594 : On detail panel grid, button not respect context par… (#1701)

* IDEMPIERE-5594 : On detail panel grid, button not respect context parsing for DispalyLogic, DefaultValue, MandatoryLogic. take context of previous row.

* IDEMPIERE-5594: Refactored code by Hengsin
Co-authored-by: hengsin@gmail.com
This commit is contained in:
Deepak Pansheriya 2023-03-08 17:31:10 +05:30 committed by GitHub
parent ff4516c86c
commit 09f524910c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 67 additions and 15 deletions

View File

@ -371,12 +371,12 @@ public class GridField
// Mandatory if displayed
return isDisplayed (checkContext);
} // isMandatory
/**
* Is parameter Editable - checks if parameter is Read Only
* @param checkContext if true checks Context
* @return true, if editable
} // isMandatory
/**
* Is parameter Editable - checks if parameter is Read Only
* @param checkContext if true checks Context
* @return true, if editable
*/
public boolean isEditablePara(boolean checkContext) {
if (checkContext && m_vo.ReadOnlyLogic.length() > 0)
@ -454,10 +454,15 @@ public class GridField
{
boolean isAlwaysUpdatable = false;
if (m_vo.AlwaysUpdatableLogic.startsWith("@SQL=")) {
isAlwaysUpdatable = Evaluator.parseSQLLogic(m_vo.AlwaysUpdatableLogic, m_vo.ctx, m_vo.WindowNo,
isAlwaysUpdatable = Evaluator.parseSQLLogic(m_vo.AlwaysUpdatableLogic, ctx, m_vo.WindowNo,
m_vo.TabNo, m_vo.ColumnName);
} else {
isAlwaysUpdatable = Evaluator.evaluateLogic(this, m_vo.AlwaysUpdatableLogic);
Evaluatee evaluatee = new Evaluatee() {
public String get_ValueAsString(String variableName) {
return GridField.this.get_ValueAsString(ctx, variableName);
}
};
isAlwaysUpdatable = Evaluator.evaluateLogic(evaluatee, m_vo.AlwaysUpdatableLogic);
if (log.isLoggable(Level.FINEST))
log.finest(m_vo.ColumnName + " R/O(" + m_vo.AlwaysUpdatableLogic + ") => R/W-" + isAlwaysUpdatable);
@ -466,9 +471,6 @@ public class GridField
return true;
}
//check tab context
if (checkContext && getGridTab() != null &&
! "Y".equals(Env.getContext(Env.getCtx(), getWindowNo(), "_QUICK_ENTRY_MODE_")))
@ -534,13 +536,18 @@ public class GridField
{
if (m_vo.ReadOnlyLogic.startsWith("@SQL="))
{
boolean retValue = !Evaluator.parseSQLLogic(m_vo.ReadOnlyLogic, m_vo.ctx, m_vo.WindowNo, m_vo.TabNo, m_vo.ColumnName);
boolean retValue = !Evaluator.parseSQLLogic(m_vo.ReadOnlyLogic, ctx, m_vo.WindowNo, m_vo.TabNo, m_vo.ColumnName);
if (!retValue)
return false;
}
else
{
boolean retValue = !Evaluator.evaluateLogic(this, m_vo.ReadOnlyLogic);
Evaluatee evaluatee = new Evaluatee() {
public String get_ValueAsString(String variableName) {
return GridField.this.get_ValueAsString(ctx, variableName);
}
};
boolean retValue = !Evaluator.evaluateLogic(evaluatee, m_vo.ReadOnlyLogic);
if (log.isLoggable(Level.FINEST)) log.finest(m_vo.ColumnName + " R/O(" + m_vo.ReadOnlyLogic + ") => R/W-" + retValue);
if (!retValue)
return false;
@ -1261,6 +1268,50 @@ public class GridField
return true;
} // isDisplayed
/**************************************************************************
* Is the Displayed Grid Column Visible ?
* @param checkContext - check environment (requires correct row position)
* @return true, if visible
*/
public boolean isDisplayedGrid (boolean checkContext)
{
return isDisplayedGrid(m_vo.ctx, checkContext);
}
/**************************************************************************
* Is the Displayed Grid Column Visible ?
* @param checkContext - check environment (requires correct row position)
* @return true, if visible
*/
public boolean isDisplayedGrid (final Properties ctx, boolean checkContext)
{
// ** static content **
// not displayed
if (!m_vo.IsDisplayedGrid)
return false;
// no restrictions
if (m_vo.DisplayLogic.equals(""))
return true;
// ** dynamic content **
if (checkContext)
{
if (m_vo.DisplayLogic.startsWith("@SQL=")) {
return Evaluator.parseSQLLogic(m_vo.DisplayLogic, ctx, m_vo.WindowNo, m_vo.TabNo, m_vo.ColumnName);
}
Evaluatee evaluatee = new Evaluatee() {
public String get_ValueAsString(String variableName) {
return GridField.this.get_ValueAsString(ctx, variableName);
}
};
boolean retValue = Evaluator.evaluateLogic(evaluatee, m_vo.DisplayLogic);
if (log.isLoggable(Level.FINEST)) log.finest(m_vo.ColumnName
+ " (" + m_vo.DisplayLogic + ") => " + retValue);
return retValue;
}
return true;
} // isDisplayedGrid
/**
* Get Variable Value (Evaluatee)
* @param variableName name

View File

@ -327,6 +327,7 @@ public class GridTabRowRenderer implements RowRenderer<Object[]>, RowRendererExt
} else if (gridField.isHeading()) {
component = createInvisibleComponent();
} else if (gridField.getDisplayType() == DisplayType.Button) {
// Each row renderer --- ctx per row wise
GridRowCtx gridRowCtx = new GridRowCtx(Env.getCtx(), gridTab, rowIndex);
WButtonEditor editor = new WButtonEditor(gridField, rowIndex);
editor.setValue(gridTab.getValue(rowIndex, gridField.getColumnName()));
@ -650,7 +651,7 @@ public class GridTabRowRenderer implements RowRenderer<Object[]>, RowRendererExt
}
GridRowCtx ctx = new GridRowCtx(Env.getCtx(), gridTab, rowIndex);
if (! (gridPanelFields[i].isDisplayed(ctx, true) || gridPanelFields[i].isDisplayedGrid())){
if (!gridPanelFields[i].isDisplayedGrid(ctx, true)){
// IDEMPIERE-2253
component.setVisible(false);
}
@ -813,7 +814,7 @@ public class GridTabRowRenderer implements RowRenderer<Object[]>, RowRendererExt
Properties ctx = isDetailPane() ? new GridRowCtx(Env.getCtx(), gridTab)
: gridPanelFields[i].getVO().ctx;
//check context
if (!gridPanelFields[i].isDisplayed(ctx, true)){
if (!gridPanelFields[i].isDisplayedGrid(ctx, true)){
// IDEMPIERE-2253
editor.getComponent().setVisible(false);
}