Module: QueryReport::ColumnModule

Included in:
Report
Defined in:
lib/query_report/column.rb

Defined Under Namespace

Classes: Column

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#columnsObject

Returns the value of attribute columns.



8
9
10
# File 'lib/query_report/column.rb', line 8

def columns
  @columns
end

Instance Method Details

#column(name, options = {}, &block) ⇒ Object

Creates a filter and adds to the filters If you want to sort a column which is a column of the active record model that the query returns, then just set true to make the column sortable. If the column is from another table then you have to specify the column name.

Examples:

Row span

column :invoiced_to_name, rowspan: true
column :invoice_title
column :invoice_date, rowspan: :invoiced_to_name
┌───────────┬────────────┬─────────────────┐
│ Name      │  Invoice   │   Invoiced on   │
├───────────┼────────────┼─────────────────┤
│           │  Invoice1  │                 │
│ Jitu      ├────────────┤    2-2-2014     │
│           │  Invoice2  │                 │
├───────────┼────────────┼─────────────────┤
│ Setu      │  Invoice3  │    2-2-2014     │
└───────────┴────────────┴─────────────────┘

Show total

column :invoiced_to_name, rowspan: true
column :invoice_title
column :total_charged, show_total: true
┌───────────┬────────────┬─────────────────┐
│ Name      │  Invoice   │   Total charge  │
├───────────┼────────────┼─────────────────┤
│           │  Invoice1  │      100        │
│ Jitu      ├────────────┼─────────────────┤
│           │  Invoice2  │      120        │
├───────────┼────────────┼─────────────────┤
│ Setu      │  Invoice3  │       80        │
├───────────┴────────────┼─────────────────┤
│                  Total │      300        │
└────────────────────────┴─────────────────┘

Sorting

column :invoice_date, sortable: true
column :invoice_to, sortable: 'users.name'

Parameters:

  • name

    the column on which the filter is done on

  • options (Hash) (defaults to: {})

    a customizable set of options

Options Hash (options):

  • :type (Symbol)

    date | text | whatever

  • :as (String)

    The title of the column, by default it fetches from the I18n column translation, Model.human_attribute_name(column_name)

  • :show_total (Boolean)

    set true to calculate total for that column. It will render the total in the footer.

  • :only_on_web (Boolean)

    the column will appear on the web and not appear in PDF, CSV or JSON if set to true

  • :sortable (Boolean)

    if set to true then sorts on that column, but if the sorting has to be on a joint table then you have to specify the column on which the sorting will happen

  • :rowspan (Object)

    the rows with same values in the same column will span if set to true



57
58
59
# File 'lib/query_report/column.rb', line 57

def column(name, options={}, &block)
  @columns << Column.new(self, name, options, block)
end

#column_total_with_colspanObject



61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
# File 'lib/query_report/column.rb', line 61

def column_total_with_colspan
  total_with_colspan = []
  colspan = 0
  total_text_printed = false
  columns.each do |column|
    if column.has_total?
      if colspan > 0
        title = total_text_printed ? '' : I18n.t('query_report.total')
        total_with_colspan << (colspan == 1 ? {content: title} : {content: title, colspan: colspan})
      end
      total_with_colspan << {content: column.total, align: column.align}
      total_text_printed = true
      colspan = 0
    else
      colspan += 1
    end
  end
  if colspan > 0
    total_with_colspan << {content: '', colspan: colspan}
  end
  total_with_colspan
end