IDEMPIERE-5062:Min/Max Validation for Process Parameters is not implemented (#2176)
* IDEMPIERE-5062:Min/Max Validation for Process Parameters is not implemented https://idempiere.atlassian.net/browse/IDEMPIERE-5062?focusedCommentId=50418 * IDEMPIERE-5062:Min/Max Validation for Process Parameters is not implemented (report all error at one) https://idempiere.atlassian.net/browse/IDEMPIERE-5062?focusedCommentId=50331 * Update ProcessParameterPanel.java - tests --------- Co-authored-by: Carlos Ruiz <carg67@gmail.com>
This commit is contained in:
parent
bd18f2bd5d
commit
3d6ac16d00
|
@ -79,6 +79,7 @@ import org.compiere.util.Util;
|
||||||
import org.zkoss.zk.ui.Component;
|
import org.zkoss.zk.ui.Component;
|
||||||
import org.zkoss.zk.ui.HtmlBasedComponent;
|
import org.zkoss.zk.ui.HtmlBasedComponent;
|
||||||
import org.zkoss.zk.ui.WrongValueException;
|
import org.zkoss.zk.ui.WrongValueException;
|
||||||
|
import org.zkoss.zk.ui.WrongValuesException;
|
||||||
import org.zkoss.zk.ui.event.Event;
|
import org.zkoss.zk.ui.event.Event;
|
||||||
import org.zkoss.zk.ui.event.EventListener;
|
import org.zkoss.zk.ui.event.EventListener;
|
||||||
import org.zkoss.zk.ui.event.Events;
|
import org.zkoss.zk.ui.event.Events;
|
||||||
|
@ -579,18 +580,23 @@ public class ProcessParameterPanel extends Panel implements
|
||||||
if (log.isLoggable(Level.CONFIG)) log.config("");
|
if (log.isLoggable(Level.CONFIG)) log.config("");
|
||||||
|
|
||||||
//mandatory fields validation
|
//mandatory fields validation
|
||||||
|
Map<Component, String> wrongValidateComponents = new HashMap<>();
|
||||||
int size = m_mFields.size();
|
int size = m_mFields.size();
|
||||||
for (int i = 0; i < size; i++) {
|
for (int i = 0; i < size; i++) {
|
||||||
GridField field = (GridField) m_mFields.get(i);
|
GridField field = (GridField) m_mFields.get(i);
|
||||||
GridField field2 = (GridField) m_mFields2.get(i);
|
GridField field2 = (GridField) m_mFields2.get(i);
|
||||||
WEditor wEditor = (WEditor) m_wEditors.get(i);
|
WEditor wEditor = (WEditor) m_wEditors.get(i);
|
||||||
|
if (wEditor.getComponent() instanceof InputElement)
|
||||||
|
((InputElement)wEditor.getComponent()).clearErrorMessage();
|
||||||
WEditor wEditor2 = (WEditor) m_wEditors2.get(i);
|
WEditor wEditor2 = (WEditor) m_wEditors2.get(i);
|
||||||
|
if (wEditor2 != null && wEditor2.getComponent() instanceof InputElement)
|
||||||
|
((InputElement)wEditor2.getComponent()).clearErrorMessage();
|
||||||
Object data = wEditor.getValue();
|
Object data = wEditor.getValue();
|
||||||
String msg = validate(data, field.getValueMin(), field.getValueMax(), field.isMandatory(true), field.getDisplayType());
|
String msg = validate(data, field.getValueMin(), field.getValueMax(), field.isMandatory(true), field.getDisplayType());
|
||||||
if (msg != null) {
|
if (msg != null) {
|
||||||
field.setInserting(true); // set editable (i.e. updateable) otherwise deadlock
|
field.setInserting(true); // set editable (i.e. updateable) otherwise deadlock
|
||||||
field.setError(true);
|
field.setError(true);
|
||||||
throw new WrongValueException(wEditor.getComponent(), msg);
|
wrongValidateComponents.put(wEditor.getComponent(), msg);
|
||||||
}
|
}
|
||||||
if (m_wEditors2.get(i) != null) { // is a range
|
if (m_wEditors2.get(i) != null) { // is a range
|
||||||
data = wEditor2.getValue();
|
data = wEditor2.getValue();
|
||||||
|
@ -598,12 +604,22 @@ public class ProcessParameterPanel extends Panel implements
|
||||||
if (msg != null) {
|
if (msg != null) {
|
||||||
field2.setInserting(true); // set editable (i.e. updateable) otherwise deadlock
|
field2.setInserting(true); // set editable (i.e. updateable) otherwise deadlock
|
||||||
field2.setError(true);
|
field2.setError(true);
|
||||||
throw new WrongValueException(wEditor2.getComponent(), msg);
|
wrongValidateComponents.put(wEditor2.getComponent(), msg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
} // field loop
|
} // field loop
|
||||||
|
|
||||||
|
List<WrongValueException> wrongValues = new ArrayList<WrongValueException>();
|
||||||
|
|
||||||
|
wrongValidateComponents.forEach((component, msg) -> {
|
||||||
|
WrongValueException wrongValueException = new WrongValueException(component, msg);
|
||||||
|
wrongValues.add(wrongValueException);
|
||||||
|
});
|
||||||
|
|
||||||
|
if (wrongValues.size() > 0)
|
||||||
|
throw new WrongValuesException(wrongValues.toArray(new WrongValueException[0]));
|
||||||
|
|
||||||
/** call {@link IProcessParameterListener} validate(ProcessParameterPanel) **/
|
/** call {@link IProcessParameterListener} validate(ProcessParameterPanel) **/
|
||||||
if (m_processInfo.getAD_Process_ID() > 0) {
|
if (m_processInfo.getAD_Process_ID() > 0) {
|
||||||
String className = MProcess.get(Env.getCtx(), m_processInfo.getAD_Process_ID()).getClassname();
|
String className = MProcess.get(Env.getCtx(), m_processInfo.getAD_Process_ID()).getClassname();
|
||||||
|
@ -645,7 +661,7 @@ public class ProcessParameterPanel extends Panel implements
|
||||||
Timestamp valueMax_TS = null;
|
Timestamp valueMax_TS = null;
|
||||||
|
|
||||||
if (fieldType == DisplayType.Date) {
|
if (fieldType == DisplayType.Date) {
|
||||||
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-mm-dd");
|
SimpleDateFormat dateFormat = new SimpleDateFormat(DisplayType.DEFAULT_DATE_FORMAT);
|
||||||
if (value != null) {
|
if (value != null) {
|
||||||
try { value_TS = new Timestamp(dateFormat.parse(value.toString()).getTime()); } catch (Exception ex){}
|
try { value_TS = new Timestamp(dateFormat.parse(value.toString()).getTime()); } catch (Exception ex){}
|
||||||
}
|
}
|
||||||
|
@ -655,6 +671,13 @@ public class ProcessParameterPanel extends Panel implements
|
||||||
if (valueMax != null) {
|
if (valueMax != null) {
|
||||||
try { valueMax_TS = new Timestamp(dateFormat.parse(valueMax).getTime()); } catch (Exception ex){}
|
try { valueMax_TS = new Timestamp(dateFormat.parse(valueMax).getTime()); } catch (Exception ex){}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (value_TS != null && valueMin_TS != null && value_TS.before(valueMin_TS))
|
||||||
|
return Msg.getMsg(Env.getCtx(), "LessThanMinValue", new Object[] {valueMin});
|
||||||
|
|
||||||
|
if (value_TS != null && valueMax_TS != null && value_TS.after(valueMax_TS))
|
||||||
|
return Msg.getMsg(Env.getCtx(), "MoreThanMaxValue", new Object[] {valueMax});
|
||||||
|
|
||||||
} else if (DisplayType.isNumeric(fieldType)) {
|
} else if (DisplayType.isNumeric(fieldType)) {
|
||||||
if (value != null) {
|
if (value != null) {
|
||||||
try { value_BD = new BigDecimal(value.toString()); } catch (Exception ex){}
|
try { value_BD = new BigDecimal(value.toString()); } catch (Exception ex){}
|
||||||
|
@ -665,20 +688,20 @@ public class ProcessParameterPanel extends Panel implements
|
||||||
if (valueMax != null) {
|
if (valueMax != null) {
|
||||||
try { valueMax_BD = new BigDecimal(valueMax); } catch (Exception ex){}
|
try { valueMax_BD = new BigDecimal(valueMax); } catch (Exception ex){}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (value_BD != null && valueMin_BD != null && valueMin_BD.compareTo(value_BD) > 0)
|
||||||
|
return Msg.getMsg(Env.getCtx(), "LessThanMinValue", new Object[] {valueMin});
|
||||||
|
|
||||||
|
if (value_BD != null && valueMax_BD != null && valueMax_BD.compareTo(value_BD) < 0)
|
||||||
|
return Msg.getMsg(Env.getCtx(), "MoreThanMaxValue", new Object[] {valueMax});
|
||||||
|
} else {
|
||||||
|
if (value != null && valueMin != null && valueMin.compareTo(value.toString()) > 0)
|
||||||
|
return Msg.getMsg(Env.getCtx(), "LessThanMinValue", new Object[] {valueMin});
|
||||||
|
|
||||||
|
if (value != null && valueMax != null && valueMax.compareTo(value.toString()) < 0)
|
||||||
|
return Msg.getMsg(Env.getCtx(), "MoreThanMaxValue", new Object[] {valueMax});
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( (value_TS != null && valueMin_TS != null && value_TS.before(valueMin_TS))
|
|
||||||
|| (value_BD != null && valueMin_BD != null && valueMin_BD.compareTo(value_BD) > 0)
|
|
||||||
|| (value != null && valueMin != null && valueMin.compareTo(value.toString()) > 0)
|
|
||||||
)
|
|
||||||
return Msg.getMsg(Env.getCtx(), "LessThanMinValue", new Object[] {valueMin});
|
|
||||||
|
|
||||||
if ( (value_TS != null && valueMax_TS != null && value_TS.after(valueMax_TS))
|
|
||||||
|| (value_BD != null && valueMax_BD != null && valueMax_BD.compareTo(value_BD) < 0)
|
|
||||||
|| (value != null && valueMax != null && valueMax.compareTo(value.toString()) < 0)
|
|
||||||
)
|
|
||||||
return Msg.getMsg(Env.getCtx(), "MoreThanMaxValue", new Object[] {valueMax});
|
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue