app/services/carnival/query_service.rb in carnival-0.2.7 vs app/services/carnival/query_service.rb in carnival-0.2.8
- old
+ new
@@ -1,9 +1,9 @@
module Carnival
class QueryService
-
attr_accessor :total_records
+
def initialize(model, presenter, query_form)
@model = model
@presenter = presenter
@query_form = query_form
@total_records = 0
@@ -16,62 +16,54 @@
end
def records_without_pagination_and_scope
records = @model
records = date_period_query(records)
- records = search_query(records)
records = advanced_search_query(records)
records = order_query(records)
includes_relations(records)
end
+ def page_count
+ (total_records / @presenter.items_per_page.to_f).ceil
+ end
+
def records_without_pagination
scope_query records_without_pagination_and_scope
end
def total_records
records_without_pagination.size
end
def scopes_number
records = records_without_pagination_and_scope
- scopes = {}
- @presenter.scopes.each do |key, index|
- scopes[key] = scope_query(records, key).size
- end
- scopes
+
+ Hash[@presenter.scopes.keys.map do |key|
+ [key, scope_query(records, key).size]
+ end]
end
def scope_query(records, scope = @query_form.scope)
- if(scope.present? && scope.to_sym != :all)
- records = records.send(scope)
+ if scope.present? && scope.to_sym != :all
+ records.send(scope)
else
records
end
end
def date_period_query(records)
date_filter_field = @presenter.date_filter_field
- if(date_filter_field.present? && @query_form.date_period_from.present? && @query_form.date_period_from != "" && @query_form.date_period_to.present? && @query_form.date_period_to != "")
- records.where("#{@presenter.table_name}.#{date_filter_field.name} between ? and ?", "#{@query_form.date_period_from} 00:00:00", "#{@query_form.date_period_to} 23:59:59")
+ if date_filter_field.present? && @query_form.date_period_from.present? && @query_form.date_period_from != "" && @query_form.date_period_to.present? && @query_form.date_period_to != ""
+ from = DateTime.parse(@query_form.date_period_from).beginning_of_day
+ to = DateTime.parse(@query_form.date_period_to).end_of_day
+ records.where(@presenter.date_filter_field.name.to_sym => [from..to])
else
records
end
end
- def search_query(records)
- if @query_form.search_term.present? and @presenter.searchable_fields.size > 0
- filters = @presenter.searchable_fields.map do |key, field|
- " #{key.to_s} like :search"
- end
- records = includes_relations(records) if @should_include_relation
- records.where(filters.join(" or "), search: "%#{@query_form.search_term}%")
- else
- records
- end
- end
-
def advanced_search_query(records)
if @query_form.advanced_search.present?
@presenter.parse_advanced_search(records, @query_form.advanced_search)
else
records
@@ -101,8 +93,7 @@
end
def sort_direction
@query_form.sort_direction
end
-
end
end