mirror of
https://github.com/scinote-eln/scinote-web.git
synced 2024-09-20 23:16:15 +08:00
Fix time zone issues in advanced repository filters [SCI-6467] (#3819)
This commit is contained in:
parent
ec6886735c
commit
cc063a46b7
|
@ -16,22 +16,22 @@ class RepositoryDateRangeValue < RepositoryDateTimeRangeValueBase
|
|||
parameters = filter_element.parameters
|
||||
case filter_element.operator
|
||||
when 'equal_to'
|
||||
repository_rows.where("#{join_alias}.start_time = ? AND #{join_alias}.end_time = ?",
|
||||
parameters['start_date'], parameters['end_date'])
|
||||
repository_rows.where("#{join_alias}.start_time::date = ? AND #{join_alias}.end_time::date = ?",
|
||||
Time.zone.parse(parameters['start_date']), Time.zone.parse(parameters['end_date']))
|
||||
when 'unequal_to'
|
||||
repository_rows.where.not("#{join_alias}.start_time = ? AND #{join_alias}.end_time = ?",
|
||||
parameters['start_date'], parameters['end_date'])
|
||||
repository_rows.where.not("#{join_alias}.start_time::date = ? AND #{join_alias}.end_time::date = ?",
|
||||
Time.zone.parse(parameters['start_date']), Time.zone.parse(parameters['end_date']))
|
||||
when 'greater_than'
|
||||
repository_rows.where("#{join_alias}.start_time > ?", parameters['end_date'])
|
||||
repository_rows.where("#{join_alias}.start_time::date > ?", Time.zone.parse(parameters['end_date']))
|
||||
when 'greater_than_or_equal_to'
|
||||
repository_rows.where("#{join_alias}.start_time >= ?", parameters['end_date'])
|
||||
repository_rows.where("#{join_alias}.start_time::date >= ?", Time.zone.parse(parameters['end_date']))
|
||||
when 'less_than'
|
||||
repository_rows.where("#{join_alias}.end_time < ?", parameters['start_date'])
|
||||
repository_rows.where("#{join_alias}.end_time::date < ?", Time.zone.parse(parameters['start_date']))
|
||||
when 'less_than_or_equal_to'
|
||||
repository_rows.where("#{join_alias}.end_time <= ?", parameters['start_date'])
|
||||
repository_rows.where("#{join_alias}.end_time::date <= ?", Time.zone.parse(parameters['start_date']))
|
||||
when 'between'
|
||||
repository_rows.where("#{join_alias}.start_time > ? AND #{join_alias}.end_time < ?",
|
||||
parameters['start_date'], parameters['end_date'])
|
||||
repository_rows.where("#{join_alias}.start_time::date > ? AND #{join_alias}.end_time::date < ?",
|
||||
Time.zone.parse(parameters['start_date']), Time.zone.parse(parameters['end_date']))
|
||||
else
|
||||
raise ArgumentError, 'Wrong operator for RepositoryDateRangeValue!'
|
||||
end
|
||||
|
|
|
@ -17,21 +17,22 @@ class RepositoryDateTimeRangeValue < RepositoryDateTimeRangeValueBase
|
|||
case filter_element.operator
|
||||
when 'equal_to'
|
||||
repository_rows.where("#{join_alias}.start_time = ? AND #{join_alias}.end_time = ?",
|
||||
parameters['start_datetime'], parameters['end_datetime'])
|
||||
Time.zone.parse(parameters['start_datetime']), Time.zone.parse(parameters['end_datetime']))
|
||||
when 'unequal_to'
|
||||
repository_rows.where.not("#{join_alias}.start_time = ? AND #{join_alias}.end_time = ?",
|
||||
parameters['start_datetime'], parameters['end_datetime'])
|
||||
Time.zone.parse(parameters['start_datetime']),
|
||||
Time.zone.parse(parameters['end_datetime']))
|
||||
when 'greater_than'
|
||||
repository_rows.where("#{join_alias}.start_time > ?", parameters['end_datetime'])
|
||||
repository_rows.where("#{join_alias}.start_time > ?", Time.zone.parse(parameters['end_datetime']))
|
||||
when 'greater_than_or_equal_to'
|
||||
repository_rows.where("#{join_alias}.start_time >= ?", parameters['end_datetime'])
|
||||
repository_rows.where("#{join_alias}.start_time >= ?", Time.zone.parse(parameters['end_datetime']))
|
||||
when 'less_than'
|
||||
repository_rows.where("#{join_alias}.end_time < ?", parameters['start_datetime'])
|
||||
repository_rows.where("#{join_alias}.end_time < ?", Time.zone.parse(parameters['start_datetime']))
|
||||
when 'less_than_or_equal_to'
|
||||
repository_rows.where("#{join_alias}.end_time <= ?", parameters['start_datetime'])
|
||||
repository_rows.where("#{join_alias}.end_time <= ?", Time.zone.parse(parameters['start_datetime']))
|
||||
when 'between'
|
||||
repository_rows.where("#{join_alias}.start_time > ? AND #{join_alias}.end_time < ?",
|
||||
parameters['start_datetime'], parameters['end_datetime'])
|
||||
Time.zone.parse(parameters['start_datetime']), Time.zone.parse(parameters['end_datetime']))
|
||||
else
|
||||
raise ArgumentError, 'Wrong operator for RepositoryDateTimeRangeValue!'
|
||||
end
|
||||
|
|
|
@ -29,20 +29,20 @@ class RepositoryDateTimeValue < RepositoryDateTimeValueBase
|
|||
when 'this_year'
|
||||
repository_rows.where("#{join_alias}.data >= ?", Time.zone.now.beginning_of_year)
|
||||
when 'equal_to'
|
||||
repository_rows.where("#{join_alias}.data = ?", parameters['datetime'])
|
||||
repository_rows.where("#{join_alias}.data = ?", Time.zone.parse(parameters['datetime']))
|
||||
when 'unequal_to'
|
||||
repository_rows.where.not("#{join_alias}.data = ?", parameters['datetime'])
|
||||
repository_rows.where.not("#{join_alias}.data = ?", Time.zone.parse(parameters['datetime']))
|
||||
when 'greater_than'
|
||||
repository_rows.where("#{join_alias}.data > ?", parameters['datetime'])
|
||||
repository_rows.where("#{join_alias}.data > ?", Time.zone.parse(parameters['datetime']))
|
||||
when 'greater_than_or_equal_to'
|
||||
repository_rows.where("#{join_alias}.data >= ?", parameters['datetime'])
|
||||
repository_rows.where("#{join_alias}.data >= ?", Time.zone.parse(parameters['datetime']))
|
||||
when 'less_than'
|
||||
repository_rows.where("#{join_alias}.data < ?", parameters['datetime'])
|
||||
repository_rows.where("#{join_alias}.data < ?", Time.zone.parse(parameters['datetime']))
|
||||
when 'less_than_or_equal_to'
|
||||
repository_rows.where("#{join_alias}.data <= ?", parameters['datetime'])
|
||||
repository_rows.where("#{join_alias}.data <= ?", Time.zone.parse(parameters['datetime']))
|
||||
when 'between'
|
||||
repository_rows.where("#{join_alias}.data > ? AND #{join_alias}.data < ?",
|
||||
parameters['start_datetime'], parameters['end_datetime'])
|
||||
Time.zone.parse(parameters['start_datetime']), Time.zone.parse(parameters['end_datetime']))
|
||||
else
|
||||
raise ArgumentError, 'Wrong operator for RepositoryDateTimeValue!'
|
||||
end
|
||||
|
|
|
@ -14,35 +14,35 @@ class RepositoryDateValue < RepositoryDateTimeValueBase
|
|||
parameters = filter_element.parameters
|
||||
case filter_element.operator
|
||||
when 'today'
|
||||
repository_rows.where("#{join_alias}.data >= ?", Time.zone.now.beginning_of_day)
|
||||
repository_rows.where("#{join_alias}.data::date >= ?", Time.zone.now.beginning_of_day)
|
||||
when 'yesterday'
|
||||
repository_rows.where("#{join_alias}.data >= ? AND #{join_alias}.data < ?",
|
||||
repository_rows.where("#{join_alias}.data::date >= ? AND #{join_alias}.data::date < ?",
|
||||
Time.zone.now.beginning_of_day - 1.day, Time.zone.now.beginning_of_day)
|
||||
when 'last_week'
|
||||
repository_rows.where("#{join_alias}.data >= ? AND #{join_alias}.data < ?",
|
||||
repository_rows.where("#{join_alias}.data::date >= ? AND #{join_alias}.data::date < ?",
|
||||
Time.zone.now.beginning_of_week - 1.week, Time.zone.now.beginning_of_week)
|
||||
when 'this_month'
|
||||
repository_rows.where("#{join_alias}.data >= ?", Time.zone.now.beginning_of_month)
|
||||
repository_rows.where("#{join_alias}.data::date >= ?", Time.zone.now.beginning_of_month)
|
||||
when 'last_year'
|
||||
repository_rows.where("#{join_alias}.data >= ? AND #{join_alias}.data < ?",
|
||||
repository_rows.where("#{join_alias}.data::date >= ? AND #{join_alias}.data::date < ?",
|
||||
Time.zone.now.beginning_of_year - 1.year, Time.zone.now.beginning_of_year)
|
||||
when 'this_year'
|
||||
repository_rows.where("#{join_alias}.data >= ?", Time.zone.now.beginning_of_year)
|
||||
repository_rows.where("#{join_alias}.data::date >= ?", Time.zone.now.beginning_of_year)
|
||||
when 'equal_to'
|
||||
repository_rows.where("#{join_alias}.data = ?", parameters['date'])
|
||||
repository_rows.where("#{join_alias}.data::date = ?", Time.zone.parse(parameters['date']))
|
||||
when 'unequal_to'
|
||||
repository_rows.where.not("#{join_alias}.data = ?", parameters['date'])
|
||||
repository_rows.where.not("#{join_alias}.data::date = ?", Time.zone.parse(parameters['date']))
|
||||
when 'greater_than'
|
||||
repository_rows.where("#{join_alias}.data > ?", parameters['date'])
|
||||
repository_rows.where("#{join_alias}.data::date > ?", Time.zone.parse(parameters['date']))
|
||||
when 'greater_than_or_equal_to'
|
||||
repository_rows.where("#{join_alias}.data >= ?", parameters['date'])
|
||||
repository_rows.where("#{join_alias}.data::date >= ?", Time.zone.parse(parameters['date']))
|
||||
when 'less_than'
|
||||
repository_rows.where("#{join_alias}.data < ?", parameters['date'])
|
||||
repository_rows.where("#{join_alias}.data::date < ?", Time.zone.parse(parameters['date']))
|
||||
when 'less_than_or_equal_to'
|
||||
repository_rows.where("#{join_alias}.data <= ?", parameters['date'])
|
||||
repository_rows.where("#{join_alias}.data::date <= ?", Time.zone.parse(parameters['date']))
|
||||
when 'between'
|
||||
repository_rows.where("#{join_alias}.data > ? AND #{join_alias}.data < ?",
|
||||
parameters['start_date'], parameters['end_date'])
|
||||
repository_rows.where("#{join_alias}.data::date > ? AND #{join_alias}.data::date < ?",
|
||||
Time.zone.parse(parameters['start_date']), Time.zone.parse(parameters['end_date']))
|
||||
else
|
||||
raise ArgumentError, 'Wrong operator for RepositoryDateValue!'
|
||||
end
|
||||
|
|
|
@ -18,21 +18,21 @@ class RepositoryTimeRangeValue < RepositoryDateTimeRangeValueBase
|
|||
case filter_element.operator
|
||||
when 'equal_to'
|
||||
repository_rows.where("#{join_alias}.start_time::time = ? AND #{join_alias}.end_time::time = ?",
|
||||
parameters['start_time'], parameters['end_time'])
|
||||
Time.zone.parse(parameters['start_time']), Time.zone.parse(parameters['end_time']))
|
||||
when 'unequal_to'
|
||||
repository_rows.where.not("#{join_alias}.start_time::time = ? AND #{join_alias}.end_time::time = ?",
|
||||
parameters['start_time'], parameters['end_time'])
|
||||
Time.zone.parse(parameters['start_time']), Time.zone.parse(parameters['end_time']))
|
||||
when 'greater_than'
|
||||
repository_rows.where("#{join_alias}.start_time::time > ?", parameters['end_datetime'])
|
||||
repository_rows.where("#{join_alias}.start_time::time > ?", Time.zone.parse(parameters['end_datetime']))
|
||||
when 'greater_than_or_equal_to'
|
||||
repository_rows.where("#{join_alias}.start_time::time >= ?", parameters['end_datetime'])
|
||||
repository_rows.where("#{join_alias}.start_time::time >= ?", Time.zone.parse(parameters['end_datetime']))
|
||||
when 'less_than'
|
||||
repository_rows.where("#{join_alias}.end_time::time < ?", parameters['start_datetime'])
|
||||
repository_rows.where("#{join_alias}.end_time::time < ?", Time.zone.parse(parameters['start_datetime']))
|
||||
when 'less_than_or_equal_to'
|
||||
repository_rows.where("#{join_alias}.end_time::time <= ?", parameters['start_datetime'])
|
||||
repository_rows.where("#{join_alias}.end_time::time <= ?", Time.zone.parse(parameters['start_datetime']))
|
||||
when 'between'
|
||||
repository_rows.where("#{join_alias}.start_time::time > ? AND #{join_alias}.end_time::time < ?",
|
||||
parameters['start_datetime'], parameters['end_datetime'])
|
||||
Time.zone.parse(parameters['start_datetime']), Time.zone.parse(parameters['end_datetime']))
|
||||
else
|
||||
raise ArgumentError, 'Wrong operator for RepositoryTimeRangeValue!'
|
||||
end
|
||||
|
|
|
@ -14,20 +14,20 @@ class RepositoryTimeValue < RepositoryDateTimeValueBase
|
|||
parameters = filter_element.parameters
|
||||
case filter_element.operator
|
||||
when 'equal_to'
|
||||
repository_rows.where("#{join_alias}.data::time = ?", parameters['time'])
|
||||
repository_rows.where("#{join_alias}.data::time = ?", Time.zone.parse(parameters['time']))
|
||||
when 'unequal_to'
|
||||
repository_rows.where.not("#{join_alias}.data::time = ?", parameters['time'])
|
||||
repository_rows.where.not("#{join_alias}.data::time = ?", Time.zone.parse(parameters['time']))
|
||||
when 'greater_than'
|
||||
repository_rows.where("#{join_alias}.data::time > ?", parameters['time'])
|
||||
repository_rows.where("#{join_alias}.data::time > ?", Time.zone.parse(parameters['time']))
|
||||
when 'greater_than_or_equal_to'
|
||||
repository_rows.where("#{join_alias}.data::time >= ?", parameters['time'])
|
||||
repository_rows.where("#{join_alias}.data::time >= ?", Time.zone.parse(parameters['time']))
|
||||
when 'less_than'
|
||||
repository_rows.where("#{join_alias}.data::time < ?", parameters['time'])
|
||||
repository_rows.where("#{join_alias}.data::time < ?", Time.zone.parse(parameters['time']))
|
||||
when 'less_than_or_equal_to'
|
||||
repository_rows.where("#{join_alias}.data::time <= ?", parameters['time'])
|
||||
repository_rows.where("#{join_alias}.data::time <= ?", Time.zone.parse(parameters['time']))
|
||||
when 'between'
|
||||
repository_rows.where("#{join_alias}.data::time > ? AND #{join_alias}.data::time < ?",
|
||||
parameters['start_time'], parameters['end_time'])
|
||||
Time.zone.parse(parameters['start_time']), Time.zone.parse(parameters['end_time']))
|
||||
else
|
||||
raise ArgumentError, 'Wrong operator for RepositoryTimeValue!'
|
||||
end
|
||||
|
|
|
@ -195,22 +195,22 @@ class RepositoryDatatableService
|
|||
when 'this_year'
|
||||
repository_rows.where('created_at >= ?', Time.zone.now.beginning_of_year)
|
||||
when 'equal_to'
|
||||
repository_rows.where(created_at: filter_element_params.dig(:parameters, :datetime))
|
||||
repository_rows.where(created_at: Time.zone.parse(filter_element_params.dig(:parameters, :datetime)))
|
||||
when 'unequal_to'
|
||||
repository_rows
|
||||
.where.not(created_at: filter_element_params.dig(:parameters, :datetime))
|
||||
.where.not(created_at: Time.zone.parse(filter_element_params.dig(:parameters, :datetime)))
|
||||
when 'greater_than'
|
||||
repository_rows.where('created_at > ?', filter_element_params.dig(:parameters, :datetime))
|
||||
repository_rows.where('created_at > ?', Time.zone.parse(filter_element_params.dig(:parameters, :datetime)))
|
||||
when 'greater_than_or_equal_to'
|
||||
repository_rows.where('created_at >= ?', filter_element_params.dig(:parameters, :datetime))
|
||||
repository_rows.where('created_at >= ?', Time.zone.parse(filter_element_params.dig(:parameters, :datetime)))
|
||||
when 'less_than'
|
||||
repository_rows.where('created_at < ?', filter_element_params.dig(:parameters, :datetime))
|
||||
repository_rows.where('created_at < ?', Time.zone.parse(filter_element_params.dig(:parameters, :datetime)))
|
||||
when 'less_than_or_equal_to'
|
||||
repository_rows.where('created_at <= ?', filter_element_params.dig(:parameters, :datetime))
|
||||
repository_rows.where('created_at <= ?', Time.zone.parse(filter_element_params.dig(:parameters, :datetime)))
|
||||
when 'between'
|
||||
repository_rows.where('created_at > ? AND created_at < ?',
|
||||
filter_element_params.dig(:parameters, :start_datetime),
|
||||
filter_element_params.dig(:parameters, :end_datetime))
|
||||
Time.zone.parse(filter_element_params.dig(:parameters, :start_datetime)),
|
||||
Time.zone.parse(filter_element_params.dig(:parameters, :end_datetime)))
|
||||
else
|
||||
raise ArgumentError, 'Wrong operator for RepositoryRow Added On!'
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue