aboutsummaryrefslogtreecommitdiffstats
path: root/app/helpers/newapplication_helper.rb
blob: 2e5a716a6e5b2a444cfc5c7f1d4c6bcc96f10f6d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
module NewapplicationHelper

  # Table Builder
  def table_builder collection, columns, actions, cls = nil
    return unless collection.present?

    head = content_tag :thead do
      content_tag :tr do
        hcont = []
        columns.map do |k, v|
          # hcont << content_tag(:th, k.to_s.titleize)
          hcont << content_tag(:th, sortable_columns(collection, k))
        end
        hcont << content_tag(:th, 'Actions', class: 'text-center') if actions.any?

        hcont.join.html_safe
      end
    end

    body = content_tag :tbody do
      collection.collect do |item|
        content_tag :tr do
          bcont = []
          columns.map do |k, attribute|
            value =
              if Proc === attribute
                attribute.call(item)
              else
                item.try(attribute)
              end
            bcont << content_tag(:td, value)
          end
          bcont << content_tag(:td, links_builder(item, actions), class: 'text-center') if actions.any?

          bcont.join.html_safe
        end
      end.join.html_safe
    end

    content_tag :table, head + body, class: cls
  end

  def links_builder(item, actions)
    trigger = content_tag :div, class: 'btn btn-primary dropdown-toggle', data: { toggle: 'dropdown' } do
      a = content_tag :span, '', class: 'fa fa-bars'
      b = content_tag :span, '', class: 'caret'
      a + b
    end

    menu = content_tag :ul, class: 'dropdown-menu' do
      actions.collect do |action|
        polymorph_url = []

        unless [:show, :delete].include? action
          polymorph_url << action
        end

        unless item.class.to_s == 'Calendar'
          if current_referential
            polymorph_url << current_referential
            polymorph_url << item.line if item.respond_to? :line
          elsif item.respond_to? :referential
            polymorph_url << item.referential
          elsif item.respond_to? :line_referential
            polymorph_url << item.line_referential
          end
        end

        polymorph_url << item

        if action == :delete
          if policy(item).present?
            if policy(item).destroy?
              content_tag :li, link_to(t("table.#{action}"), polymorph_url, method: :delete, data: { confirm: 'Etes-vous sûr(e) de vouloir effectuer cette action ?' })
            end
          else
            content_tag :li, link_to(t("table.#{action}"), polymorph_url, method: :delete, data: { confirm: 'Etes-vous sûr(e) de vouloir effectuer cette action ?' })
          end

        elsif action == :edit
          if policy(item).present?
            if policy(item).update?
              content_tag :li, link_to(t("table.#{action}"), polymorph_url)
            end
          else
            content_tag :li, link_to(t("table.#{action}"), polymorph_url)
          end
        else
          content_tag :li, link_to(t("table.#{action}"), polymorph_url)
        end
      end.join.html_safe
    end

    content_tag :div, trigger + menu, class: 'btn-group btn-group-xs'

  end

  def sortable_columns collection, key
    direction = (key == params[:sort] && params[:direction] == 'desc') ? 'asc' : 'desc'

    icon = 'sort-desc' if direction == 'asc'
    icon = 'sort-asc' if direction == 'desc'

    link_to({sort: key, direction: direction}) do
      pic = content_tag :span, '', class: "fa fa-#{icon}", style: 'margin-left:5px'
      (key.to_s.titleize + pic).html_safe
    end
  end

  # Replacement message
  def replacement_msg text
    content_tag :div, '', class: 'alert alert-warning' do
      icon = content_tag :span, '', class: 'fa fa-lg fa-info-circle', style: 'margin-right:7px;'
      icon + text
    end
  end

  # PageHeader builder
  def pageheader pageicon, pagetitle, desc, meta, mainaction = nil, &block

    firstRow = content_tag :div, '', class: 'row' do
      # Left part with pageicon & pagetitle & desc
      left = content_tag :div, '', class: 'col-lg-9 col-md-8 col-sm-8 col-xs-7' do
        picon = content_tag :div, '', class: 'page-icon' do
          content_tag :span, '', class: "fa fa-lg fa-#{pageicon}"
        end
        ptitle = content_tag :div, '', class: 'page-title' do
          info = content_tag :span, '', class: 'small fa fa-info-circle', title: desc

          content_tag :h1, pagetitle.concat(info).html_safe
        end

        picon + ptitle
      end
      # Right part with meta & mainaction
      right = content_tag :div, '', class: 'col-lg-3 col-md-4 col-sm-4 col-xs-5 text-right' do
        content_tag :div, '', class: 'page-action' do
          a = content_tag :div, meta.html_safe, class: 'small'
          b = mainaction.try(:html_safe)

          a + b
        end
      end

      left + right
    end

    content_tag :div, '', class: 'page_header' do
      content_tag :div, '', class: 'container-fluid' do
        firstRow + capture(&block)
      end
    end
  end

end