app/services/carnival/query_service.rb in carnival-0.1.5 vs app/services/carnival/query_service.rb in carnival-0.1.6

- old
+ new

@@ -1,8 +1,8 @@ module Carnival class QueryService - + attr_accessor :total_records def initialize(model, presenter, query_form) @model = model @presenter = presenter @query_form = query_form @@ -10,87 +10,89 @@ @should_include_relation = !@model.is_a?(ActiveRecord::Relation) end def get_query records = records_without_pagination - records = page_query(records) + page_query(records) 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) - records = includes_relations(records) + includes_relations(records) end def records_without_pagination - records = records_without_pagination_and_scope - records = scope_query(records) + scope_query records_without_pagination_and_scope end def total_records - records_without_pagination.size + records_without_pagination.size end def scopes_number - records = records_without_pagination_and_scope + records = records_without_pagination_and_scope scopes = {} @presenter.scopes.each do |key, index| - rec = records - scopes[key] = scope_query(rec, key).size + scopes[key] = scope_query(records, key).size end scopes end def scope_query(records, scope = @query_form.scope) if(scope.present? && scope.to_sym != :all) records = records.send(scope) + else + records end - records 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 = 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") + 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") + else + records end - records end def search_query(records) - filtros = [] if @query_form.search_term.present? and @presenter.searchable_fields.size > 0 - @presenter.searchable_fields.each do |key, field| - filtros << "#{key.to_s} like :search" + filters = @presenter.searchable_fields.map do |key, field| + " #{key.to_s} like :search" end records = includes_relations(records) if @should_include_relation - records = records.where(filtros.join(" or "), search: "%#{@query_form.search_term}%") + records.where(filters.join(" or "), search: "%#{@query_form.search_term}%") + else + records end - records end def advanced_search_query(records) - return records if !@query_form.advanced_search.present? - @presenter.parse_advanced_search(records, @query_form.advanced_search) + if @query_form.advanced_search.present? + @presenter.parse_advanced_search(records, @query_form.advanced_search) + else + records + end end def page_query(records) - records = records.paginate(page: @query_form.page, per_page: @presenter.items_per_page) + records.paginate(page: @query_form.page, per_page: @presenter.items_per_page) end def order_query(records) records.order("#{sort_column} #{sort_direction}") end def includes_relations(records) - if @should_include_relation - @presenter.join_tables.each do |relation_name| - records = records.includes(relation_name) - end + if @should_include_relation and @presenter.join_tables.size > 0 + records.includes(*@presenter.join_tables) + else + records end - records end def sort_column column = @query_form.sort_column sorter = Carnival::GenericDatatable::ColumnSorterCreator.create_sorter(@presenter, column)