IDEMPIERE-5052 Date Min/Max Validation wrong with 5 digit years (#1016)

* IDEMPIERE-5052 Date Min/Max Validation wrong with 5 digit years

* IDEMPIERE-5052 Date Min/Max Validation wrong with 5 digit years / enable for Cost+Price and String
This commit is contained in:
Carlos Ruiz 2021-12-01 02:46:53 +01:00 committed by GitHub
parent 0e58458114
commit feebea8691
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 80 additions and 17 deletions

View File

@ -0,0 +1,15 @@
SET SQLBLANKLINES ON
SET DEFINE OFF
-- IDEMPIERE-5052 Date Min/Max Validation wrong with 5 digit years
-- Nov 30, 2021, 5:14:36 PM CET
UPDATE AD_Field SET DisplayLogic='@AD_Reference_ID@=11 | @AD_Reference_ID@=12 | @AD_Reference_ID@=15 | @AD_Reference_ID@=22 | @AD_Reference_ID@=29 | @AD_Reference_ID@=37 | @AD_Reference_ID@=10', AD_Reference_Value_ID=NULL, AD_Val_Rule_ID=NULL, IsToolbarButton=NULL,Updated=TO_DATE('2021-11-30 17:14:36','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=2574
;
-- Nov 30, 2021, 5:14:41 PM CET
UPDATE AD_Field SET DisplayLogic='@AD_Reference_ID@=11 | @AD_Reference_ID@=12 | @AD_Reference_ID@=15 | @AD_Reference_ID@=22 | @AD_Reference_ID@=29 | @AD_Reference_ID@=37 | @AD_Reference_ID@=10', AD_Reference_Value_ID=NULL, AD_Val_Rule_ID=NULL, IsToolbarButton=NULL,Updated=TO_DATE('2021-11-30 17:14:41','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=2573
;
SELECT register_migration_script('202111301716_IDEMPIERE-5052.sql') FROM dual
;

View File

@ -0,0 +1,12 @@
-- IDEMPIERE-5052 Date Min/Max Validation wrong with 5 digit years
-- Nov 30, 2021, 5:14:36 PM CET
UPDATE AD_Field SET DisplayLogic='@AD_Reference_ID@=11 | @AD_Reference_ID@=12 | @AD_Reference_ID@=15 | @AD_Reference_ID@=22 | @AD_Reference_ID@=29 | @AD_Reference_ID@=37 | @AD_Reference_ID@=10', AD_Reference_Value_ID=NULL, AD_Val_Rule_ID=NULL, IsToolbarButton=NULL,Updated=TO_TIMESTAMP('2021-11-30 17:14:36','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=2574
;
-- Nov 30, 2021, 5:14:41 PM CET
UPDATE AD_Field SET DisplayLogic='@AD_Reference_ID@=11 | @AD_Reference_ID@=12 | @AD_Reference_ID@=15 | @AD_Reference_ID@=22 | @AD_Reference_ID@=29 | @AD_Reference_ID@=37 | @AD_Reference_ID@=10', AD_Reference_Value_ID=NULL, AD_Val_Rule_ID=NULL, IsToolbarButton=NULL,Updated=TO_TIMESTAMP('2021-11-30 17:14:41','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=2573
;
SELECT register_migration_script('202111301716_IDEMPIERE-5052.sql') FROM dual
;

View File

@ -23,6 +23,7 @@ import java.math.BigDecimal;
import java.sql.PreparedStatement; import java.sql.PreparedStatement;
import java.sql.ResultSet; import java.sql.ResultSet;
import java.sql.SQLException; import java.sql.SQLException;
import java.sql.Timestamp;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
@ -747,6 +748,13 @@ public class POInfo implements Serializable
return "LessThanMinValue"+";"+m_columns[index].ValueMin_BD.toPlainString(); return "LessThanMinValue"+";"+m_columns[index].ValueMin_BD.toPlainString();
} }
} }
else if (value instanceof Timestamp && m_columns[index].ValueMin_TS != null) // Date
{
if (((Timestamp) value).before(m_columns[index].ValueMin_TS))
{
return "LessThanMinValue"+";"+m_columns[index].ValueMin;
}
}
else // String else // String
{ {
int comp = m_columns[index].ValueMin.compareTo(value.toString()); int comp = m_columns[index].ValueMin.compareTo(value.toString());
@ -774,6 +782,13 @@ public class POInfo implements Serializable
return "MoreThanMaxValue"+";"+m_columns[index].ValueMax_BD.toPlainString(); return "MoreThanMaxValue"+";"+m_columns[index].ValueMax_BD.toPlainString();
} }
} }
else if (value instanceof Timestamp && m_columns[index].ValueMax_TS != null) // Date
{
if (((Timestamp) value).after(m_columns[index].ValueMax_TS))
{
return "MoreThanMaxValue"+";"+m_columns[index].ValueMax;
}
}
else // String else // String
{ {
int comp = m_columns[index].ValueMax.compareTo(value.toString()); int comp = m_columns[index].ValueMax.compareTo(value.toString());

View File

@ -18,9 +18,12 @@ package org.compiere.model;
import java.io.Serializable; import java.io.Serializable;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.logging.Level; import java.util.logging.Level;
import org.compiere.util.CLogger; import org.compiere.util.CLogger;
import org.compiere.util.Util;
/** /**
* PO Info Column Info Value Object * PO Info Column Info Value Object
@ -33,7 +36,7 @@ public class POInfoColumn implements Serializable
/** /**
* *
*/ */
private static final long serialVersionUID = 3882249785085847367L; private static final long serialVersionUID = -6550300505836470875L;
/** Used by Remote FinReport */ /** Used by Remote FinReport */
/** /**
@ -106,24 +109,38 @@ public class POInfoColumn implements Serializable
// //
FieldLength = fieldLength; FieldLength = fieldLength;
ValueMin = valueMin; ValueMin = valueMin;
try if (!Util.isEmpty(ValueMin)) {
{ try {
if (valueMin != null && valueMin.length() > 0) ValueMin_BD = new BigDecimal(ValueMin);
ValueMin_BD = new BigDecimal(valueMin); } catch (Exception ex) {
ValueMin_BD = null;
}
try {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
ValueMin_TS = new java.sql.Timestamp(dateFormat.parse(ValueMin).getTime());
} catch (Exception ex) {
ValueMin_TS = null;
}
if (ValueMin_BD == null && ValueMin_TS == null) {
CLogger.get().log(Level.SEVERE, "ValueMin cannot be parsed to a number or date = " + ValueMin);
} }
catch (Exception ex)
{
CLogger.get().log(Level.SEVERE, "ValueMin=" + valueMin, ex);
} }
ValueMax = valueMax; ValueMax = valueMax;
try if (!Util.isEmpty(ValueMax)) {
{ try {
if (valueMax != null && valueMax.length() > 0) ValueMax_BD = new BigDecimal(ValueMax);
ValueMax_BD = new BigDecimal(valueMax); } catch (Exception ex) {
ValueMax_BD = null;
}
try {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
ValueMax_TS = new java.sql.Timestamp(dateFormat.parse(ValueMax).getTime());
} catch (Exception ex) {
ValueMax_TS = null;
}
if (ValueMax_BD == null && ValueMax_TS == null) {
CLogger.get().log(Level.SEVERE, "ValueMax cannot be parsed to a number or date = " + ValueMax);
} }
catch (Exception ex)
{
CLogger.get().log(Level.SEVERE, "ValueMax=" + valueMax, ex);
} }
IsTranslated = isTranslated; IsTranslated = isTranslated;
IsEncrypted = isEncrypted; IsEncrypted = isEncrypted;
@ -179,6 +196,10 @@ public class POInfoColumn implements Serializable
public BigDecimal ValueMin_BD = null; public BigDecimal ValueMin_BD = null;
/** Max Value */ /** Max Value */
public BigDecimal ValueMax_BD = null; public BigDecimal ValueMax_BD = null;
/** Min Value */
public Timestamp ValueMin_TS = null;
/** Max Value */
public Timestamp ValueMax_TS = null;
/** /**
* String representation * String representation