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 The translation key used for total is ‘query_report.total’

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.

This is how you can control the width of the column in the pdf

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'

Pdf options

column :invoice_date, pdf: {width: 20}

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

  • :pdf (:width)

    pass width of the column in the pdf



62
63
64
# File 'lib/query_report/column.rb', line 62

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

#column_total_with_colspanArray<Hash>

Sample output

[{content: "Total", colspan: '2'}, 200, 300]

Returns:

  • (Array<Hash>)

    the footer for the table with total with appropriate colspan and content



69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
# File 'lib/query_report/column.rb', line 69

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