IDEMPIERE-377 : Correcting operators based on reference type [1001193]
This commit is contained in:
parent
98d4cd4a89
commit
9548383df1
|
@ -420,6 +420,10 @@ public class MQuery implements Serializable
|
||||||
public static final String BETWEEN = " BETWEEN ";
|
public static final String BETWEEN = " BETWEEN ";
|
||||||
/** Between - 8 */
|
/** Between - 8 */
|
||||||
public static final int BETWEEN_INDEX = 8;
|
public static final int BETWEEN_INDEX = 8;
|
||||||
|
/** For ticket 1001193 */
|
||||||
|
public static final String NOT_NULL = "IS NOT NNULL";
|
||||||
|
/** For ticket 1001193 */
|
||||||
|
public static final String NULL = "IS NULL";
|
||||||
|
|
||||||
/** Operators for Strings */
|
/** Operators for Strings */
|
||||||
public static final ValueNamePair[] OPERATORS = new ValueNamePair[] {
|
public static final ValueNamePair[] OPERATORS = new ValueNamePair[] {
|
||||||
|
@ -442,6 +446,52 @@ public class MQuery implements Serializable
|
||||||
public static final ValueNamePair[] OPERATORS_YN = new ValueNamePair[] {
|
public static final ValueNamePair[] OPERATORS_YN = new ValueNamePair[] {
|
||||||
new ValueNamePair (EQUAL, " = ")
|
new ValueNamePair (EQUAL, " = ")
|
||||||
};
|
};
|
||||||
|
// =====================================================================
|
||||||
|
// Added/modified for ticket 1001193 - START
|
||||||
|
// =====================================================================
|
||||||
|
|
||||||
|
/** Operators for Number, Amount, Date, Costs+Prices, Quantity, Integer, ID */
|
||||||
|
public static final ValueNamePair[] OPERATORS_NUMBERS = new ValueNamePair[] {
|
||||||
|
new ValueNamePair (EQUAL, " = "), // 0
|
||||||
|
new ValueNamePair (NOT_EQUAL, " != "),
|
||||||
|
new ValueNamePair (GREATER, " > "),
|
||||||
|
new ValueNamePair (GREATER_EQUAL, " >= "), // 5
|
||||||
|
new ValueNamePair (LESS, " < "),
|
||||||
|
new ValueNamePair (LESS_EQUAL, " <= "),
|
||||||
|
new ValueNamePair (BETWEEN, " >-< "), // 8
|
||||||
|
new ValueNamePair (NULL, " NULL "),
|
||||||
|
new ValueNamePair (NOT_NULL, " !NULL ")
|
||||||
|
|
||||||
|
};
|
||||||
|
/** Operators for URL */
|
||||||
|
public static final ValueNamePair[] OPERATORS_EQUAL_LIKE = new ValueNamePair[] {
|
||||||
|
new ValueNamePair (EQUAL, " = "), // 0
|
||||||
|
new ValueNamePair (NOT_EQUAL, " != "),
|
||||||
|
new ValueNamePair (NOT_EQUAL, " ~ "),
|
||||||
|
new ValueNamePair (LIKE, " !~ "),
|
||||||
|
new ValueNamePair (NULL, " NULL "),
|
||||||
|
new ValueNamePair (NOT_NULL, " !NULL ")
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
/** Operators for all */
|
||||||
|
public static final ValueNamePair[] OPERATORS_ALL = new ValueNamePair[] {
|
||||||
|
new ValueNamePair (EQUAL, " = "), // 0
|
||||||
|
new ValueNamePair (NOT_EQUAL, " != "),
|
||||||
|
new ValueNamePair (LIKE, " ~ "),
|
||||||
|
new ValueNamePair (NOT_LIKE, " !~ "),
|
||||||
|
new ValueNamePair (GREATER, " > "),
|
||||||
|
new ValueNamePair (GREATER_EQUAL, " >= "), // 5
|
||||||
|
new ValueNamePair (LESS, " < "),
|
||||||
|
new ValueNamePair (LESS_EQUAL, " <= "),
|
||||||
|
new ValueNamePair (BETWEEN, " >-< "), // 8
|
||||||
|
new ValueNamePair (NULL, " NULL "),
|
||||||
|
new ValueNamePair (NOT_NULL, " !NULL ")
|
||||||
|
};
|
||||||
|
// =====================================================================
|
||||||
|
// Added/modified for ticket 1001193 - END
|
||||||
|
// =====================================================================
|
||||||
|
|
||||||
|
|
||||||
/*************************************************************************
|
/*************************************************************************
|
||||||
* Add Restriction
|
* Add Restriction
|
||||||
|
@ -1116,7 +1166,24 @@ class Restriction implements Serializable
|
||||||
sb.append(" IS NULL ");
|
sb.append(" IS NULL ");
|
||||||
else
|
else
|
||||||
sb.append(" IS NOT NULL ");
|
sb.append(" IS NOT NULL ");
|
||||||
}
|
}
|
||||||
|
// =====================================================================
|
||||||
|
// Added/modified for ticket 1001193 - START
|
||||||
|
// =====================================================================
|
||||||
|
|
||||||
|
else if ((Operator.equals(MQuery.NULL) || Operator.equals(MQuery.NOT_NULL))
|
||||||
|
&& (Code == null
|
||||||
|
|| "NULL".equals (Code.toString().toUpperCase())))
|
||||||
|
{
|
||||||
|
if (Operator.equals(MQuery.NULL))
|
||||||
|
sb.append(" IS NULL ");
|
||||||
|
else
|
||||||
|
sb.append(" IS NOT NULL ");
|
||||||
|
}
|
||||||
|
// =====================================================================
|
||||||
|
// Added/modified for ticket 1001193 - END
|
||||||
|
// =====================================================================
|
||||||
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
sb.append(Operator);
|
sb.append(Operator);
|
||||||
|
|
|
@ -602,8 +602,14 @@ public class FindWindow extends Window implements EventListener<Event>, ValueCha
|
||||||
ValueNamePair[] cols = new ValueNamePair[items.size()];
|
ValueNamePair[] cols = new ValueNamePair[items.size()];
|
||||||
items.toArray(cols);
|
items.toArray(cols);
|
||||||
Arrays.sort(cols); // sort alpha
|
Arrays.sort(cols); // sort alpha
|
||||||
|
// =====================================================================
|
||||||
|
// For ticket 1001193 - START
|
||||||
|
// =====================================================================
|
||||||
|
ValueNamePair[] op = MQuery.OPERATORS_ALL;
|
||||||
|
// =====================================================================
|
||||||
|
// For ticket 1001193 - START
|
||||||
|
// =====================================================================
|
||||||
|
|
||||||
ValueNamePair[] op = MQuery.OPERATORS;
|
|
||||||
|
|
||||||
if(fields == null)
|
if(fields == null)
|
||||||
{
|
{
|
||||||
|
@ -714,9 +720,26 @@ public class FindWindow extends Window implements EventListener<Event>, ValueCha
|
||||||
Component componentTo = getEditorCompQueryTo(row);
|
Component componentTo = getEditorCompQueryTo(row);
|
||||||
componentTo.setId("searchFieldTo"+row.getId());
|
componentTo.setId("searchFieldTo"+row.getId());
|
||||||
componentTo.setAttribute(AdempiereIdGenerator.ZK_COMPONENT_PREFIX_ATTRIBUTE, componentTo.getId());
|
componentTo.setAttribute(AdempiereIdGenerator.ZK_COMPONENT_PREFIX_ATTRIBUTE, componentTo.getId());
|
||||||
|
// =====================================================================
|
||||||
addRowEditor(componentFrom, (ListCell)row.getFellow("cellQueryFrom"+row.getId()));
|
// Added/modified for ticket 1001193 - START
|
||||||
addRowEditor(componentTo,(ListCell)row.getFellow("cellQueryTo"+row.getId()));
|
// =====================================================================
|
||||||
|
Listbox listOp = (Listbox) row.getFellow("listOperator"+row.getId());
|
||||||
|
String betweenValue = listOp.getSelectedItem().getValue().toString();
|
||||||
|
|
||||||
|
if(betweenValue.equals(MQuery.NULL) || betweenValue.equals(MQuery.NOT_NULL))
|
||||||
|
{
|
||||||
|
// to not display any editor
|
||||||
|
row.getFellow("cellQueryFrom"+row.getId()).getChildren().clear();
|
||||||
|
row.getFellow("cellQueryTo"+row.getId()).getChildren().clear();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
addRowEditor(componentFrom, (ListCell)row.getFellow("cellQueryFrom"+row.getId()));
|
||||||
|
addRowEditor(componentTo,(ListCell)row.getFellow("cellQueryTo"+row.getId()));
|
||||||
|
}
|
||||||
|
// =====================================================================
|
||||||
|
// Added/modified for ticket 1001193 - END
|
||||||
|
// =====================================================================
|
||||||
}
|
}
|
||||||
else if (event.getTarget() == fQueryName)
|
else if (event.getTarget() == fQueryName)
|
||||||
{
|
{
|
||||||
|
@ -997,7 +1020,29 @@ public class FindWindow extends Window implements EventListener<Event>, ValueCha
|
||||||
ListCell cellQueryFrom = (ListCell)row.getFellow("cellQueryFrom"+row.getId());
|
ListCell cellQueryFrom = (ListCell)row.getFellow("cellQueryFrom"+row.getId());
|
||||||
Object value = cellQueryFrom.getAttribute("value");
|
Object value = cellQueryFrom.getAttribute("value");
|
||||||
if (value == null)
|
if (value == null)
|
||||||
continue;
|
{
|
||||||
|
// =====================================================================
|
||||||
|
// For ticket 1001193 - START
|
||||||
|
// =====================================================================
|
||||||
|
if(Operator.equals(MQuery.NULL) || Operator.equals(MQuery.NOT_NULL))
|
||||||
|
{
|
||||||
|
m_query.addRestriction(ColumnSQL, Operator, null,
|
||||||
|
infoName, null);
|
||||||
|
if (code.length() > 0)
|
||||||
|
code.append(SEGMENT_SEPARATOR);
|
||||||
|
code.append(ColumnName)
|
||||||
|
.append(FIELD_SEPARATOR)
|
||||||
|
.append(Operator)
|
||||||
|
.append(FIELD_SEPARATOR)
|
||||||
|
.append("")
|
||||||
|
.append(FIELD_SEPARATOR)
|
||||||
|
.append("");
|
||||||
|
}
|
||||||
|
// =====================================================================
|
||||||
|
// For ticket 1001193 - END
|
||||||
|
// =====================================================================
|
||||||
|
continue;
|
||||||
|
}
|
||||||
Object parsedValue = parseValue(field, value);
|
Object parsedValue = parseValue(field, value);
|
||||||
if (parsedValue == null)
|
if (parsedValue == null)
|
||||||
continue;
|
continue;
|
||||||
|
@ -1154,20 +1199,82 @@ public class FindWindow extends Window implements EventListener<Event>, ValueCha
|
||||||
private void addOperators(ListItem column, Listbox listOperator)
|
private void addOperators(ListItem column, Listbox listOperator)
|
||||||
{
|
{
|
||||||
String columnName = column.getValue().toString();
|
String columnName = column.getValue().toString();
|
||||||
|
// =====================================================================
|
||||||
|
// For ticket 1001193 - START
|
||||||
|
// =====================================================================
|
||||||
|
int columnID = MColumn.getColumn_ID(this.m_tableName, columnName);
|
||||||
|
String SQL = "SELECT name FROM ad_reference WHERE ad_reference_id=(SELECT ad_reference_id FROM ad_column WHERE ad_column_id = ?)";
|
||||||
|
PreparedStatement pstmt = null;
|
||||||
|
ResultSet rs = null;
|
||||||
|
String referenceType = null;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
pstmt = DB.prepareStatement(SQL, null);
|
||||||
|
pstmt.setInt(1, columnID);
|
||||||
|
rs = pstmt.executeQuery();
|
||||||
|
if( rs.next() )
|
||||||
|
{
|
||||||
|
referenceType = rs.getString(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (SQLException e2)
|
||||||
|
{
|
||||||
|
log.log(Level.SEVERE, SQL, e2);
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
DB.close(rs, pstmt);
|
||||||
|
rs = null; pstmt = null;
|
||||||
|
}
|
||||||
|
|
||||||
log.config("Column: " + columnName);
|
log.config("Column: " + columnName);
|
||||||
|
log.log(Level.INFO, "referenceType : " + referenceType);
|
||||||
if (columnName.endsWith("_ID") || columnName.endsWith("_Acct"))
|
|
||||||
|
List<String> numbersList = new ArrayList<String>();
|
||||||
|
numbersList.add("Number");
|
||||||
|
numbersList.add("Date");
|
||||||
|
numbersList.add("Amount");
|
||||||
|
numbersList.add("Costs+Prices");
|
||||||
|
numbersList.add("Quantity");
|
||||||
|
numbersList.add("ID");
|
||||||
|
numbersList.add("Integer");
|
||||||
|
|
||||||
|
List<String> equalNotEqualList = new ArrayList<String>();
|
||||||
|
equalNotEqualList.add("Table Direct");
|
||||||
|
equalNotEqualList.add("Table");
|
||||||
|
equalNotEqualList.add("Search");
|
||||||
|
equalNotEqualList.add("List");
|
||||||
|
|
||||||
|
List<String> equalAndLikeList = new ArrayList<String>();
|
||||||
|
equalAndLikeList.add("URL");
|
||||||
|
equalAndLikeList.add("Memo");
|
||||||
|
equalAndLikeList.add("Text Long");
|
||||||
|
|
||||||
|
if(numbersList.contains(referenceType))
|
||||||
{
|
{
|
||||||
addOperators(MQuery.OPERATORS_ID, listOperator);
|
addOperators(MQuery.OPERATORS_NUMBERS, listOperator);
|
||||||
}
|
}
|
||||||
else if (columnName.startsWith("Is"))
|
else if (equalNotEqualList.contains(referenceType))
|
||||||
{
|
{
|
||||||
addOperators(MQuery.OPERATORS_YN, listOperator);
|
addOperators(MQuery.OPERATORS_ID, listOperator);
|
||||||
|
}
|
||||||
|
else if ("Yes-No".equals(referenceType))
|
||||||
|
{
|
||||||
|
addOperators(MQuery.OPERATORS_YN, listOperator);
|
||||||
|
}
|
||||||
|
else if (equalAndLikeList.contains(referenceType))
|
||||||
|
{
|
||||||
|
addOperators(MQuery.OPERATORS_EQUAL_LIKE, listOperator);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
addOperators(MQuery.OPERATORS, listOperator);
|
addOperators(MQuery.OPERATORS_ALL, listOperator);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// =====================================================================
|
||||||
|
// For ticket 1001193 - END
|
||||||
|
// =====================================================================
|
||||||
|
|
||||||
} // addOperators
|
} // addOperators
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1371,8 +1478,22 @@ public class FindWindow extends Window implements EventListener<Event>, ValueCha
|
||||||
// Value ******
|
// Value ******
|
||||||
ListCell cellQueryFrom = (ListCell)row.getFellow("cellQueryFrom"+row.getId());
|
ListCell cellQueryFrom = (ListCell)row.getFellow("cellQueryFrom"+row.getId());
|
||||||
Object value = cellQueryFrom.getAttribute("value");
|
Object value = cellQueryFrom.getAttribute("value");
|
||||||
if (value == null)
|
|
||||||
continue;
|
// =====================================================================
|
||||||
|
// Added/modified for ticket 1001193 - START
|
||||||
|
// =====================================================================
|
||||||
|
if (value == null)
|
||||||
|
{
|
||||||
|
if(Operator.equals(MQuery.NULL) || Operator.equals(MQuery.NOT_NULL))
|
||||||
|
{
|
||||||
|
m_query.addRestriction(ColumnSQL, Operator, null,
|
||||||
|
infoName, null);
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
// =====================================================================
|
||||||
|
// Added/modified for ticket 1001193 - End
|
||||||
|
// =====================================================================
|
||||||
Object parsedValue = parseValue(field, value);
|
Object parsedValue = parseValue(field, value);
|
||||||
if (parsedValue == null)
|
if (parsedValue == null)
|
||||||
continue;
|
continue;
|
||||||
|
|
Loading…
Reference in New Issue