templus_models 1.6.4 → 1.6.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/app/controllers/crud_controller.rb +25 -0
- data/app/helpers/crud_helper.rb +6 -0
- data/app/helpers/search_helper.rb +23 -8
- data/app/raro_crud/raro_crud.rb +62 -39
- data/app/views/crud/_crud_template.html.erb +4 -2
- data/app/views/crud/_scopes.html.erb +2 -1
- data/app/views/crud/_shared.html.erb +19 -0
- data/app/views/crud/listing.pdf.erb +74 -0
- data/app/views/crud/listing.xls.erb +52 -0
- data/config/initializers/mime_types.rb +6 -0
- data/config/initializers/wicked_pdf.rb +3 -0
- data/config/routes.rb +3 -1
- data/lib/templus_models/version.rb +1 -1
- metadata +46 -26
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: be235e07c0065d4c5a85c2f1aaec34e7e99c4474
|
4
|
+
data.tar.gz: 28d9d080353e73cdc00c3f12750c6c64e4edc90f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b5f3146b2773659878fb772d6138791840f45114fba3b9fb3007ada4edb1e6d87ca766ec73ccec0f5f109b783b62ad3824179738e56ed0b055f1ce98752af871
|
7
|
+
data.tar.gz: b46be38880c155a8853ff77e6d11d9f1dee39544bc4bddf394934987ffed35f0a8050c20fc91025698080870d87f02c821e7677b040fe245e6d937048bc45199
|
@@ -170,6 +170,31 @@ class CrudController < ApplicationController
|
|
170
170
|
render json: results.map {|result| {id: result.id, label: result.send(method_label), value: result.send(method_label)} }
|
171
171
|
end
|
172
172
|
|
173
|
+
def listing
|
174
|
+
authorize! :read, @model_permission if respond_to?(:current_usuario)
|
175
|
+
@q = @model.search(params[:q])
|
176
|
+
if respond_to?(:current_usuario)
|
177
|
+
@records = @q.result.accessible_by(current_ability)
|
178
|
+
else
|
179
|
+
@records = @q.result
|
180
|
+
end
|
181
|
+
report_name = "Listagem de #{@crud_helper.title} #{DateTime.now.strftime('%Y%m%d')}"
|
182
|
+
respond_to do |format|
|
183
|
+
format.xls {headers["Content-Disposition"] = "attachment; filename=#{report_name}.xls"}
|
184
|
+
format.pdf do
|
185
|
+
pdf = WickedPdf.new.pdf_from_string(
|
186
|
+
render_to_string('crud/listing.pdf.erb'),
|
187
|
+
encoding: 'UTF-8',
|
188
|
+
page_size: 'A4',
|
189
|
+
show_as_html: params[:debug],
|
190
|
+
margin: { top: 20, bottom: 20 }
|
191
|
+
)
|
192
|
+
send_data(pdf, filename: "#{report_name}.pdf", type: "application/pdf", disposition: "inline")
|
193
|
+
end
|
194
|
+
format.html
|
195
|
+
end
|
196
|
+
end
|
197
|
+
|
173
198
|
private
|
174
199
|
def params_permitt
|
175
200
|
params.require(@model.name.underscore.to_sym).permit(fields_model)
|
data/app/helpers/crud_helper.rb
CHANGED
@@ -205,4 +205,10 @@ module CrudHelper
|
|
205
205
|
return true if crud_helper.condition_destroy_action.nil?
|
206
206
|
crud_helper.condition_destroy_action.call(record)
|
207
207
|
end
|
208
|
+
|
209
|
+
def should_listing?(crud_helper,model)
|
210
|
+
return false unless can?(:read, model)
|
211
|
+
return true if crud_helper.condition_listing_action.nil?
|
212
|
+
crud_helper.condition_listing_action.call(model)
|
213
|
+
end
|
208
214
|
end
|
@@ -68,6 +68,8 @@ module SearchHelper
|
|
68
68
|
return raro_date_range(name)
|
69
69
|
when :boolean
|
70
70
|
return raro_radio(name, opts)
|
71
|
+
when :monthyear
|
72
|
+
return raro_monthyear(name, opts)
|
71
73
|
else
|
72
74
|
return raro_text_field(name, opts)
|
73
75
|
end
|
@@ -76,13 +78,16 @@ module SearchHelper
|
|
76
78
|
def raro_input_as(name,type,opts)
|
77
79
|
case opts[:as]
|
78
80
|
when :select
|
81
|
+
if opts[:collection_if] and opts[:collection_if].class == Proc
|
82
|
+
opts[:collection] = ActionView::Helpers::FormBuilder.instance_eval &opts[:collection_if]
|
83
|
+
end
|
79
84
|
raro_select(name,opts,opts[:collection])
|
80
85
|
when :hidden
|
81
86
|
return raro_hidden_field(name,opts[:value],opts)
|
82
87
|
when :string
|
83
88
|
raro_text_field(name, opts)
|
84
|
-
when :
|
85
|
-
|
89
|
+
when :range
|
90
|
+
raro_range(name)
|
86
91
|
end
|
87
92
|
end
|
88
93
|
|
@@ -136,8 +141,8 @@ module SearchHelper
|
|
136
141
|
|
137
142
|
def raro_monthyear(name, opts)
|
138
143
|
buffer = ""
|
139
|
-
buffer += "<div class='col-sm-
|
140
|
-
buffer += "<input id='q_#{name}' type='text' name='q[#{name}
|
144
|
+
buffer += "<div class='col-sm-8'>"
|
145
|
+
buffer += "<input id='q_#{name}' type='text' name='q[#{name}_cont]' class='form-control #{opts[:class]}'/>"
|
141
146
|
buffer += "</div>"
|
142
147
|
buffer
|
143
148
|
end
|
@@ -166,9 +171,9 @@ module SearchHelper
|
|
166
171
|
if opts[:collection].present?
|
167
172
|
opts[:collection].each do |opt|
|
168
173
|
buff<<"<label>"
|
169
|
-
|
170
|
-
|
171
|
-
|
174
|
+
buff<<"<div class='checkbox'>"
|
175
|
+
buff<<"<input id='q_#{name}' type='radio' name='q[#{name}_eq]' value='#{opt[0]}' class='i-checks'/>"
|
176
|
+
buff<<"</div>"
|
172
177
|
buff<<"<span class='lbl'> #{opt[1]}</span>"
|
173
178
|
buff<<"</label>"
|
174
179
|
end
|
@@ -201,6 +206,16 @@ module SearchHelper
|
|
201
206
|
</div></div>"
|
202
207
|
end
|
203
208
|
|
209
|
+
def raro_range(name)
|
210
|
+
buffer = "<div class='col-sm-4'>"
|
211
|
+
buffer += "<input type='text' name='q[#{name}_gteq]' class='form-control'/>"
|
212
|
+
buffer += "</div>"
|
213
|
+
buffer += "<div class='col-sm-4 range-separator'>"
|
214
|
+
buffer += "<input type='text' name='q[#{name}_lteq]' class='form-control'/>"
|
215
|
+
buffer += "</div>"
|
216
|
+
buffer
|
217
|
+
end
|
218
|
+
|
204
219
|
def raro_before_form(model,partial,var,url,sort)
|
205
220
|
buffer = "<div id='search_box'>"+
|
206
221
|
"<form method='get' class=form-horizontal action='#{url}' data-push='partial' data-target='#form'>" +
|
@@ -245,6 +260,6 @@ module SearchHelper
|
|
245
260
|
end
|
246
261
|
|
247
262
|
def raro_group(text)
|
248
|
-
@buffer << "<div class=\"col-sm-12 label label-primary\" style=\"margin-bottom:10px; font-size:14px;\"><b>#{text}</b></div>"
|
263
|
+
@buffer << "<div class=\"col-sm-12 label label-primary\" style=\"margin-bottom:10px; font-size:14px;display: inline-block;\"><b>#{text}</b></div>"
|
249
264
|
end
|
250
265
|
end
|
data/app/raro_crud/raro_crud.rb
CHANGED
@@ -6,9 +6,10 @@ class RaroCrud
|
|
6
6
|
@@form_group = {}
|
7
7
|
@@form_scripts = {}
|
8
8
|
@@view_fields = {}
|
9
|
+
@@listing_fields = {}
|
9
10
|
@@search_fields = {}
|
10
11
|
@@test_fields = {}
|
11
|
-
@@top_links = {}
|
12
|
+
@@top_links = {}
|
12
13
|
@@title = {}
|
13
14
|
@@subtitle_index = {}
|
14
15
|
@@description_index = {}
|
@@ -20,6 +21,7 @@ class RaroCrud
|
|
20
21
|
@@condition_destroy_action = {}
|
21
22
|
@@view_action = {}
|
22
23
|
@@condition_view_action = {}
|
24
|
+
@@condition_listing_action = {}
|
23
25
|
@@options_link = {}
|
24
26
|
@@scopes = {}
|
25
27
|
@@menus = []
|
@@ -33,20 +35,20 @@ class RaroCrud
|
|
33
35
|
return true
|
34
36
|
end
|
35
37
|
end
|
36
|
-
|
38
|
+
|
37
39
|
def self.layout
|
38
40
|
(@@layout[self.to_s.to_sym]) ? @@layout[self.to_s.to_sym] : []
|
39
41
|
end
|
40
|
-
|
42
|
+
|
41
43
|
def self.set_layout(desc,proc = nil)
|
42
44
|
@@layout[self.to_s.to_sym] = [] unless @@layout[self.to_s.to_sym]
|
43
45
|
@@layout[self.to_s.to_sym] = [desc,proc]
|
44
46
|
end
|
45
|
-
|
47
|
+
|
46
48
|
def self.condition_edit_action
|
47
49
|
(@@condition_edit_action[self.to_s.to_sym]) ? @@condition_edit_action[self.to_s.to_sym] : nil
|
48
50
|
end
|
49
|
-
|
51
|
+
|
50
52
|
def self.destroy_action
|
51
53
|
if @@destroy_action[self.to_s.to_sym] == false
|
52
54
|
return false
|
@@ -54,7 +56,7 @@ class RaroCrud
|
|
54
56
|
return true
|
55
57
|
end
|
56
58
|
end
|
57
|
-
|
59
|
+
|
58
60
|
def self.condition_destroy_action
|
59
61
|
(@@condition_destroy_action[self.to_s.to_sym]) ? @@condition_destroy_action[self.to_s.to_sym] : nil
|
60
62
|
end
|
@@ -66,11 +68,15 @@ class RaroCrud
|
|
66
68
|
return true
|
67
69
|
end
|
68
70
|
end
|
69
|
-
|
71
|
+
|
70
72
|
def self.condition_view_action
|
71
73
|
(@@condition_view_action[self.to_s.to_sym]) ? @@condition_view_action[self.to_s.to_sym] : nil
|
72
74
|
end
|
73
75
|
|
76
|
+
def self.condition_listing_action
|
77
|
+
(@@condition_listing_action[self.to_s.to_sym]) ? @@condition_listing_action[self.to_s.to_sym] : nil
|
78
|
+
end
|
79
|
+
|
74
80
|
def self.root_path
|
75
81
|
self.to_s.gsub('Crud', '').underscore
|
76
82
|
end
|
@@ -78,7 +84,7 @@ class RaroCrud
|
|
78
84
|
def self.index_path str
|
79
85
|
@@index_path = str
|
80
86
|
end
|
81
|
-
|
87
|
+
|
82
88
|
def self.get_index_path
|
83
89
|
@@index_path
|
84
90
|
end
|
@@ -101,7 +107,7 @@ class RaroCrud
|
|
101
107
|
end
|
102
108
|
end
|
103
109
|
|
104
|
-
def self.top_links
|
110
|
+
def self.top_links
|
105
111
|
(@@top_links[self.to_s.to_sym]) ? @@top_links[self.to_s.to_sym] : []
|
106
112
|
end
|
107
113
|
|
@@ -112,7 +118,7 @@ class RaroCrud
|
|
112
118
|
def self.order_field
|
113
119
|
(@@order_field[self.to_s.to_sym]).present? ? @@order_field[self.to_s.to_sym] : "id"
|
114
120
|
end
|
115
|
-
|
121
|
+
|
116
122
|
def self.per_page
|
117
123
|
@@per_page[self.to_s.to_sym]
|
118
124
|
end
|
@@ -145,6 +151,10 @@ class RaroCrud
|
|
145
151
|
(@@view_fields[self.to_s.to_sym]) ? @@view_fields[self.to_s.to_sym] : []
|
146
152
|
end
|
147
153
|
|
154
|
+
def self.listing_fields
|
155
|
+
(@@listing_fields[self.to_s.to_sym]) ? @@listing_fields[self.to_s.to_sym] : []
|
156
|
+
end
|
157
|
+
|
148
158
|
def self.search_fields
|
149
159
|
(@@search_fields[self.to_s.to_sym]) ? @@search_fields[self.to_s.to_sym] : []
|
150
160
|
end
|
@@ -152,7 +162,7 @@ class RaroCrud
|
|
152
162
|
def self.test_fields
|
153
163
|
(@@test_fields[self.to_s.to_sym]) ? @@test_fields[self.to_s.to_sym] : []
|
154
164
|
end
|
155
|
-
|
165
|
+
|
156
166
|
def self.scopes
|
157
167
|
(@@scopes[self.to_s.to_sym]) ? @@scopes[self.to_s.to_sym] : []
|
158
168
|
end
|
@@ -164,14 +174,14 @@ class RaroCrud
|
|
164
174
|
def self.menus
|
165
175
|
@@menus
|
166
176
|
end
|
167
|
-
|
168
|
-
|
177
|
+
|
178
|
+
|
169
179
|
private
|
170
|
-
|
180
|
+
|
171
181
|
def self.modelo
|
172
182
|
self.to_s.underscore.gsub("_crud", "")
|
173
183
|
end
|
174
|
-
|
184
|
+
|
175
185
|
def self.titulo str
|
176
186
|
@@title[self.to_s.to_sym] = str
|
177
187
|
end
|
@@ -205,8 +215,8 @@ class RaroCrud
|
|
205
215
|
partial: opts[:partial]
|
206
216
|
}
|
207
217
|
)
|
208
|
-
end
|
209
|
-
|
218
|
+
end
|
219
|
+
|
210
220
|
def self.campo_tabela nome, opts
|
211
221
|
@@index_fields[self.to_s.to_sym] = [] unless @@index_fields[self.to_s.to_sym]
|
212
222
|
@@index_fields[self.to_s.to_sym].push(
|
@@ -215,15 +225,15 @@ class RaroCrud
|
|
215
225
|
}.merge(opts)
|
216
226
|
)
|
217
227
|
end
|
218
|
-
|
228
|
+
|
219
229
|
def self.ordenar_por nome
|
220
230
|
@@order_field[self.to_s.to_sym] = nome
|
221
231
|
end
|
222
|
-
|
232
|
+
|
223
233
|
def self.itens_por_pagina qtd
|
224
234
|
@@per_page[self.to_s.to_sym] = qtd
|
225
235
|
end
|
226
|
-
|
236
|
+
|
227
237
|
def self.campo_teste nome, opts
|
228
238
|
@@test_fields[self.to_s.to_sym] = [] unless @@test_fields[self.to_s.to_sym]
|
229
239
|
@@test_fields[self.to_s.to_sym].push(
|
@@ -231,14 +241,14 @@ class RaroCrud
|
|
231
241
|
attribute: nome
|
232
242
|
}.merge({sf: opts})
|
233
243
|
)
|
234
|
-
end
|
235
|
-
|
244
|
+
end
|
245
|
+
|
236
246
|
def self.campo_formulario nome, opts
|
237
247
|
@@form_fields[self.to_s.to_sym] = [] unless @@form_fields[self.to_s.to_sym]
|
238
248
|
if opts.present? && opts[:autocomplete].present?
|
239
249
|
opts[:as] = :autocomplete
|
240
250
|
label_method = opts[:autocomplete][:label_method] || opts[:autocomplete][:campo]
|
241
|
-
opts[:url] = autocomplete_crud_path(model: opts[:autocomplete][:classe], campo: opts[:autocomplete][:campo], tipo: "start", label: label_method)
|
251
|
+
opts[:url] = Rails.application.routes.url_helpers.autocomplete_crud_path(model: opts[:autocomplete][:classe], campo: opts[:autocomplete][:campo], tipo: "start", label: label_method)
|
242
252
|
name = "#{opts[:autocomplete][:campo]}_#{opts[:autocomplete][:classe]}"
|
243
253
|
opts[:input_html] = {name: name, id: name}
|
244
254
|
opts[:id_element] = "##{self.modelo}_#{nome}_id"
|
@@ -262,8 +272,8 @@ class RaroCrud
|
|
262
272
|
campo_formulario(nome, {as: :hidden})
|
263
273
|
end
|
264
274
|
end
|
265
|
-
|
266
|
-
private
|
275
|
+
|
276
|
+
private
|
267
277
|
def self.add_group_formulario(field)
|
268
278
|
field[:fields] = []
|
269
279
|
field[:grupo].each do |f|
|
@@ -283,7 +293,7 @@ class RaroCrud
|
|
283
293
|
attribute: nome
|
284
294
|
}.merge({sf: opts})
|
285
295
|
)
|
286
|
-
end
|
296
|
+
end
|
287
297
|
|
288
298
|
def self.campo_busca nome, opts = nil
|
289
299
|
@@search_fields[self.to_s.to_sym] = [] unless @@search_fields[self.to_s.to_sym]
|
@@ -292,12 +302,21 @@ class RaroCrud
|
|
292
302
|
attribute: nome
|
293
303
|
}.merge({sf: opts})
|
294
304
|
)
|
295
|
-
end
|
296
|
-
|
305
|
+
end
|
306
|
+
|
307
|
+
def self.campo_listagem nome, opts = nil
|
308
|
+
@@listing_fields[self.to_s.to_sym] = [] unless @@listing_fields[self.to_s.to_sym]
|
309
|
+
@@listing_fields[self.to_s.to_sym].push(
|
310
|
+
{
|
311
|
+
attribute: nome
|
312
|
+
}.merge({sf: opts})
|
313
|
+
)
|
314
|
+
end
|
315
|
+
|
297
316
|
def self.sem_visualizacao
|
298
317
|
@@view_action[self.to_s.to_sym] = false
|
299
318
|
end
|
300
|
-
|
319
|
+
|
301
320
|
def self.visualizacao(condicao)
|
302
321
|
@@condition_view_action[self.to_s.to_sym] = condicao
|
303
322
|
end
|
@@ -305,7 +324,7 @@ class RaroCrud
|
|
305
324
|
def self.sem_edicao
|
306
325
|
@@edit_action[self.to_s.to_sym] = false
|
307
326
|
end
|
308
|
-
|
327
|
+
|
309
328
|
def self.edicao(condicao)
|
310
329
|
@@condition_edit_action[self.to_s.to_sym] = condicao
|
311
330
|
end
|
@@ -313,30 +332,34 @@ class RaroCrud
|
|
313
332
|
def self.sem_exclusao
|
314
333
|
@@destroy_action[self.to_s.to_sym] = false
|
315
334
|
end
|
316
|
-
|
335
|
+
|
317
336
|
def self.exclusao(condicao)
|
318
337
|
@@condition_destroy_action[self.to_s.to_sym] = condicao
|
319
338
|
end
|
320
|
-
|
339
|
+
|
340
|
+
def self.listagem(condicao)
|
341
|
+
@@condition_listing_action[self.to_s.to_sym] = condicao
|
342
|
+
end
|
343
|
+
|
321
344
|
def self.acoes(method,desc,proc = nil)
|
322
345
|
@@actions[self.to_s.to_sym] = [] unless @@actions[self.to_s.to_sym]
|
323
346
|
@@actions[self.to_s.to_sym].push([method,desc,proc])
|
324
347
|
end
|
325
|
-
|
348
|
+
|
326
349
|
def self.links(name,options)
|
327
350
|
@@links[self.to_s.to_sym] = [] unless @@links[self.to_s.to_sym]
|
328
351
|
@@links[self.to_s.to_sym].push([name,options])
|
329
352
|
end
|
330
|
-
|
353
|
+
|
331
354
|
def self.opcoes(link,desc,proc = nil)
|
332
355
|
@@options_link[self.to_s.to_sym] = [] unless @@options_link[self.to_s.to_sym]
|
333
356
|
@@options_link[self.to_s.to_sym].push([link,desc,proc])
|
334
357
|
end
|
335
|
-
|
358
|
+
|
336
359
|
def self.escopos(scopes)
|
337
360
|
@@scopes[self.to_s.to_sym] = scopes
|
338
361
|
end
|
339
|
-
|
362
|
+
|
340
363
|
def self.grupo_formulario(attribute,name,fields=nil)
|
341
364
|
if fields.nil?
|
342
365
|
fields = name
|
@@ -357,7 +380,7 @@ class RaroCrud
|
|
357
380
|
@@form_group[self.to_s.to_sym][attribute][:fields].push({attribute: value[:attribute],sf: value[:sf]})
|
358
381
|
end
|
359
382
|
end
|
360
|
-
|
383
|
+
|
361
384
|
def self.adicionar_endereco
|
362
385
|
@@form_fields[self.to_s.to_sym] = [] unless @@form_fields[self.to_s.to_sym]
|
363
386
|
opts = {}
|
@@ -384,10 +407,10 @@ class RaroCrud
|
|
384
407
|
@@form_scripts[self.to_s.to_sym] ||= []
|
385
408
|
@@form_scripts[self.to_s.to_sym] << "cidade_estado"
|
386
409
|
end
|
387
|
-
|
410
|
+
|
388
411
|
def self.script_formulario(script)
|
389
412
|
@@form_scripts[self.to_s.to_sym] ||= []
|
390
413
|
@@form_scripts[self.to_s.to_sym] << script.to_s
|
391
414
|
end
|
392
415
|
|
393
|
-
end
|
416
|
+
end
|
@@ -1,9 +1,11 @@
|
|
1
1
|
<%unless params[:render] == 'modal'%>
|
2
2
|
<% content_for :breadcumb do %>
|
3
3
|
<% if @crud_associacao.present? %>
|
4
|
-
|
4
|
+
<li class=""><%= link_to @crud_associacao.title, crud_models_path(model: @crud_associacao.root_path) %></li>
|
5
|
+
<li class=""><%= link_to @crud_helper.title, @clean_url %></li>
|
6
|
+
<% else %>
|
7
|
+
<li class=""><%= link_to @crud_helper.title, crud_models_path(model: @crud_helper.root_path) %></li>
|
5
8
|
<% end %>
|
6
|
-
<li class=""><%= link_to @crud_helper.title, crud_models_path(model: @crud_helper.root_path) %></li>
|
7
9
|
<% end %>
|
8
10
|
|
9
11
|
|
@@ -1,7 +1,8 @@
|
|
1
1
|
<% if @crud_helper.scopes.present? %>
|
2
2
|
<% if @crud_helper.scopes.class == Array %>
|
3
3
|
<% @crud_helper.scopes.each do |escopo| %>
|
4
|
-
|
4
|
+
<% url = params[:associacao].present? ? crud_associacao_models_path(model: params[:model], id: params[:id], associacao: params[:associacao], scope: escopo[0]) : crud_models_path(model: @model.name.underscore, scope: escopo[0])%>
|
5
|
+
<%= link_to url, id: "#{escopo[0]}", data: {push: true, crumb: 'wielka'} do%>
|
5
6
|
<div style="float: left; margin-left: 10px; min-width: 100px; position:relative;">
|
6
7
|
<div class="widget style1 gray-bg" style="padding:15px 0px!important;">
|
7
8
|
<div class="row vertical-align text-center" style="margin:0!important;">
|
@@ -31,6 +31,25 @@
|
|
31
31
|
<%=render_link(link,@clean_url)%>
|
32
32
|
<% end %>
|
33
33
|
<%end%>
|
34
|
+
<% if params[:associacao] %>
|
35
|
+
<% if @crud_helper.listing_fields.present? && should_listing?(@crud_helper, @model_permission) %>
|
36
|
+
<%= link_to listing_crud_associacao_path(model: params[:model], id: params[:id], associacao: params[:associacao], q: params[:q], format: :xls), class: "btn btn-success btn-rounded" do %>
|
37
|
+
<i class="fa fa-file-excel-o"></i>
|
38
|
+
<% end %>
|
39
|
+
<%= link_to listing_crud_associacao_path(model: params[:model], id: params[:id], associacao: params[:associacao], q: params[:q], format: :pdf), class: "btn btn-success btn-rounded" do %>
|
40
|
+
<i class="fa fa-file-pdf-o"></i>
|
41
|
+
<% end %>
|
42
|
+
<% end %>
|
43
|
+
<% else %>
|
44
|
+
<% if @crud_helper.listing_fields.present? && should_listing?(@crud_helper, @model) %>
|
45
|
+
<%= link_to listing_crud_path(model: @model.name.underscore, q: params[:q], format: :xls), class: "btn btn-success btn-rounded" do %>
|
46
|
+
<i class="fa fa-file-excel-o"></i>
|
47
|
+
<% end %>
|
48
|
+
<%= link_to listing_crud_path(model: @model.name.underscore, q: params[:q], format: :pdf), class: "btn btn-success btn-rounded" do %>
|
49
|
+
<i class="fa fa-file-pdf-o"></i>
|
50
|
+
<% end %>
|
51
|
+
<% end %>
|
52
|
+
<% end %>
|
34
53
|
<% if @crud_helper.search_fields.present? %>
|
35
54
|
<button id="button_search_<%=@model.name.underscore%>" class="btn btn-warning btn-rounded" data-toggle="modal" data-target="#modal_search">
|
36
55
|
<i class="fa fa-search"></i>
|
@@ -0,0 +1,74 @@
|
|
1
|
+
<div class="profile-element">
|
2
|
+
<div class="header">
|
3
|
+
<h1>Listagem de <%= @crud_helper.title %></h1>
|
4
|
+
</div>
|
5
|
+
</div>
|
6
|
+
<div class="widget-box" id="relatorio">
|
7
|
+
<div class="widget-body">
|
8
|
+
<div class="widget-main">
|
9
|
+
<table class="table table-bordered table-striped" style="border: 1px solid black;">
|
10
|
+
<thead>
|
11
|
+
<tr>
|
12
|
+
<% @crud_helper.listing_fields.each do |att|%>
|
13
|
+
<% if !att[:visible_if].nil?%>
|
14
|
+
<% if ((att[:visible_if].class == Proc && !att[:visible_if].call(att)) || (att[:visible_if].class != Proc && !att[:visible_if])) %>
|
15
|
+
<% next %>
|
16
|
+
<% end %>
|
17
|
+
<% end %>
|
18
|
+
<% if att[:sf].present? && att[:sf][:label].present? %>
|
19
|
+
<th><%= att[:sf][:label].to_s.mb_chars.upcase.to_s %></th>
|
20
|
+
<% else %>
|
21
|
+
<th><%= att[:attribute].to_s.mb_chars.upcase.to_s %></th>
|
22
|
+
<% end %>
|
23
|
+
<% end %>
|
24
|
+
</tr>
|
25
|
+
</thead>
|
26
|
+
<tbody>
|
27
|
+
<% @records.each do |record| %>
|
28
|
+
<tr>
|
29
|
+
<%@crud_helper.listing_fields.each do |att| %>
|
30
|
+
<% if record.send(att[:attribute]).present? or record.send(att[:attribute]).to_s == "false"%>
|
31
|
+
<% if @model.columns_hash[att[:attribute].to_s].present? && [:date, :datetime].include?(@model.columns_hash[att[:attribute].to_s].type)%>
|
32
|
+
<% if att[:date_format].present?%>
|
33
|
+
<td><%= record.send(att[:attribute]).strftime(att[:date_format]) %></td>
|
34
|
+
<% else %>
|
35
|
+
<td><%= l record.send(att[:attribute]) %></td>
|
36
|
+
<% end %>
|
37
|
+
<% elsif ((@model.reflect_on_association(att[:attribute]) && @model.reflect_on_association(att[:attribute]).macro != :belongs_to && @model.reflect_on_association(att[:attribute]).macro != :has_one) || record.send(att[:attribute]).class == Array)%>
|
38
|
+
<td><%= record.send(att[:attribute]).map{|rec| rec.to_s}.join(",") %></td>
|
39
|
+
<% else %>
|
40
|
+
<% if record.send(att[:attribute]).to_s == "false" or record.send(att[:attribute]).to_s == "true" %>
|
41
|
+
<td><%= record.send(att[:attribute]) ? "Sim" : "Não" %></td>
|
42
|
+
<% elsif att[:sf][:label_method].present? %>
|
43
|
+
<td><%= record.send(att[:attribute]).send(att[:sf][:label_method]).to_s %></td>
|
44
|
+
<% else %>
|
45
|
+
<td><%= record.send(att[:attribute]).to_s %></td>
|
46
|
+
<% end %>
|
47
|
+
<% end %>
|
48
|
+
<% else %>
|
49
|
+
<td></td>
|
50
|
+
<% end %>
|
51
|
+
<% end %>
|
52
|
+
</tr>
|
53
|
+
<% end %>
|
54
|
+
</tbody>
|
55
|
+
</table>
|
56
|
+
</div>
|
57
|
+
</div>
|
58
|
+
</div>
|
59
|
+
<style>
|
60
|
+
table, tr, td, th, tbody, thead, tfoot {
|
61
|
+
page-break-inside: avoid !important;
|
62
|
+
}
|
63
|
+
table, th, td {
|
64
|
+
border-collapse: collapse;
|
65
|
+
border: 1px solid black;
|
66
|
+
}
|
67
|
+
#relatorio {
|
68
|
+
padding-top: 40px;
|
69
|
+
clear: both;
|
70
|
+
}
|
71
|
+
.header {
|
72
|
+
float: left;
|
73
|
+
}
|
74
|
+
</style>
|
@@ -0,0 +1,52 @@
|
|
1
|
+
<?xml version="1.0"?>
|
2
|
+
<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"
|
3
|
+
xmlns:o="urn:schemas-microsoft-com:office:office"
|
4
|
+
xmlns:x="urn:schemas-microsoft-com:office:excel"
|
5
|
+
xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
|
6
|
+
xmlns:html="http://www.w3.org/TR/REC-html40">
|
7
|
+
<Worksheet ss:Name="Listagem de <%= @crud_helper.title %>">
|
8
|
+
<Table>
|
9
|
+
<Row>
|
10
|
+
<% @crud_helper.listing_fields.each do |att|%>
|
11
|
+
<% if !att[:visible_if].nil?%>
|
12
|
+
<% if ((att[:visible_if].class == Proc && !att[:visible_if].call(att)) || (att[:visible_if].class != Proc && !att[:visible_if])) %>
|
13
|
+
<% next %>
|
14
|
+
<% end %>
|
15
|
+
<% end %>
|
16
|
+
<% if att[:sf].present? && att[:sf][:label].present? %>
|
17
|
+
<Cell><Data ss:Type="String"><%= att[:sf][:label].to_s.mb_chars.upcase.to_s %></Data></Cell>
|
18
|
+
<% else %>
|
19
|
+
<Cell><Data ss:Type="String"><%= att[:attribute].to_s.mb_chars.upcase.to_s %></Data></Cell>
|
20
|
+
<% end %>
|
21
|
+
<% end %>
|
22
|
+
</Row>
|
23
|
+
<% @records.each do |record| %>
|
24
|
+
<Row>
|
25
|
+
<%@crud_helper.listing_fields.each do |att| %>
|
26
|
+
<% if record.send(att[:attribute]).present? or record.send(att[:attribute]).to_s == "false"%>
|
27
|
+
<% if @model.columns_hash[att[:attribute].to_s].present? && [:date, :datetime].include?(@model.columns_hash[att[:attribute].to_s].type)%>
|
28
|
+
<% if att[:date_format].present?%>
|
29
|
+
<Cell><Data ss:Type="String"><%= record.send(att[:attribute]).strftime(att[:date_format]) %></Data></Cell>
|
30
|
+
<% else %>
|
31
|
+
<Cell><Data ss:Type="String"><%= l record.send(att[:attribute]) %></Data></Cell>
|
32
|
+
<% end %>
|
33
|
+
<% elsif ((@model.reflect_on_association(att[:attribute]) && @model.reflect_on_association(att[:attribute]).macro != :belongs_to && @model.reflect_on_association(att[:attribute]).macro != :has_one) || record.send(att[:attribute]).class == Array)%>
|
34
|
+
<Cell><Data ss:Type="String"><%= record.send(att[:attribute]).map{|rec| rec.to_s}.join(",") %></Data></Cell>
|
35
|
+
<% else %>
|
36
|
+
<% if record.send(att[:attribute]).to_s == "false" or record.send(att[:attribute]).to_s == "true" %>
|
37
|
+
<Cell><Data ss:Type="String"><%= record.send(att[:attribute]) ? "Sim" : "Não" %></Data></Cell>
|
38
|
+
<% elsif att[:sf][:label_method].present? %>
|
39
|
+
<Cell><Data ss:Type="String"><%= record.send(att[:attribute]).send(att[:sf][:label_method]).to_s %></Data></Cell>
|
40
|
+
<% else %>
|
41
|
+
<Cell><Data ss:Type="String"><%= record.send(att[:attribute]).to_s %></Data></Cell>
|
42
|
+
<% end %>
|
43
|
+
<% end %>
|
44
|
+
<% else %>
|
45
|
+
<Cell><Data ss:Type="String"></Data></Cell>
|
46
|
+
<% end %>
|
47
|
+
<% end %>
|
48
|
+
</Row>
|
49
|
+
<% end %>
|
50
|
+
</Table>
|
51
|
+
</Worksheet>
|
52
|
+
</Workbook>
|
data/config/routes.rb
CHANGED
@@ -7,6 +7,7 @@ Rails.application.routes.draw do
|
|
7
7
|
get '/crud/:model/query' => "crud#query", as: :query_crud
|
8
8
|
get '/crud/:model/autocomplete' => "crud#autocomplete", as: :autocomplete_crud
|
9
9
|
post '/crud/:model/create' => "crud#create", as: :create_crud
|
10
|
+
get '/crud/:model/listing' => "crud#listing", as: :listing_crud
|
10
11
|
patch '/crud/:model/:id/create' => "crud#create", as: :update_crud
|
11
12
|
get '/crud/:model/:id/acao/:acao' => "crud#action", as: :action_crud
|
12
13
|
get '/crud/:model/:id' => "crud#show", as: :crud_model
|
@@ -19,7 +20,8 @@ Rails.application.routes.draw do
|
|
19
20
|
get '/crud/:model/:id/:associacao/query' => "crud#query", as: :query_crud_associacao
|
20
21
|
get '/crud/:model/:id/:associacao/autocomplete' => "crud#autocomplete", as: :autocomplete_crud_associacao
|
21
22
|
post '/crud/:model/:id/:associacao/create' => "crud#create", as: :create_crud_associacao
|
23
|
+
get '/crud/:model/:id/:associacao/listing' => "crud#listing", as: :listing_crud_associacao
|
22
24
|
patch '/crud/:model/:id/:associacao/:associacao_id/create' => "crud#create", as: :update_crud_associacao
|
23
25
|
get '/crud/:model/:id/:associacao/:associacao_id/acao/:acao' => "crud#action", as: :action_crud_associacao
|
24
26
|
get '/crud/:model/:id/:associacao/:associacao_id' => "crud#show", as: :crud_associacao_model
|
25
|
-
end
|
27
|
+
end
|
metadata
CHANGED
@@ -1,132 +1,148 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: templus_models
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.6.
|
4
|
+
version: 1.6.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Rodrigo Sol
|
8
8
|
- Leonardo Herbert
|
9
|
+
- Diego Lima
|
9
10
|
autorequire:
|
10
11
|
bindir: bin
|
11
12
|
cert_chain: []
|
12
|
-
date:
|
13
|
+
date: 2017-02-13 00:00:00.000000000 Z
|
13
14
|
dependencies:
|
14
15
|
- !ruby/object:Gem::Dependency
|
15
16
|
name: rails
|
16
17
|
requirement: !ruby/object:Gem::Requirement
|
17
18
|
requirements:
|
18
|
-
- - "
|
19
|
+
- - "~>"
|
19
20
|
- !ruby/object:Gem::Version
|
20
|
-
version: 4.1
|
21
|
+
version: '4.1'
|
21
22
|
type: :runtime
|
22
23
|
prerelease: false
|
23
24
|
version_requirements: !ruby/object:Gem::Requirement
|
24
25
|
requirements:
|
25
|
-
- - "
|
26
|
+
- - "~>"
|
26
27
|
- !ruby/object:Gem::Version
|
27
|
-
version: 4.1
|
28
|
+
version: '4.1'
|
28
29
|
- !ruby/object:Gem::Dependency
|
29
30
|
name: cancancan
|
30
31
|
requirement: !ruby/object:Gem::Requirement
|
31
32
|
requirements:
|
32
|
-
- - "
|
33
|
+
- - "~>"
|
33
34
|
- !ruby/object:Gem::Version
|
34
35
|
version: '1.10'
|
35
36
|
type: :runtime
|
36
37
|
prerelease: false
|
37
38
|
version_requirements: !ruby/object:Gem::Requirement
|
38
39
|
requirements:
|
39
|
-
- - "
|
40
|
+
- - "~>"
|
40
41
|
- !ruby/object:Gem::Version
|
41
42
|
version: '1.10'
|
42
43
|
- !ruby/object:Gem::Dependency
|
43
44
|
name: ransack
|
44
45
|
requirement: !ruby/object:Gem::Requirement
|
45
46
|
requirements:
|
46
|
-
- - "
|
47
|
+
- - "~>"
|
47
48
|
- !ruby/object:Gem::Version
|
48
|
-
version: 1.6
|
49
|
+
version: '1.6'
|
49
50
|
type: :runtime
|
50
51
|
prerelease: false
|
51
52
|
version_requirements: !ruby/object:Gem::Requirement
|
52
53
|
requirements:
|
53
|
-
- - "
|
54
|
+
- - "~>"
|
54
55
|
- !ruby/object:Gem::Version
|
55
|
-
version: 1.6
|
56
|
+
version: '1.6'
|
56
57
|
- !ruby/object:Gem::Dependency
|
57
58
|
name: kaminari
|
58
59
|
requirement: !ruby/object:Gem::Requirement
|
59
60
|
requirements:
|
60
|
-
- - "
|
61
|
+
- - "~>"
|
61
62
|
- !ruby/object:Gem::Version
|
62
|
-
version: 0.16
|
63
|
+
version: '0.16'
|
63
64
|
type: :runtime
|
64
65
|
prerelease: false
|
65
66
|
version_requirements: !ruby/object:Gem::Requirement
|
66
67
|
requirements:
|
67
|
-
- - "
|
68
|
+
- - "~>"
|
68
69
|
- !ruby/object:Gem::Version
|
69
|
-
version: 0.16
|
70
|
+
version: '0.16'
|
70
71
|
- !ruby/object:Gem::Dependency
|
71
72
|
name: simple_form
|
72
73
|
requirement: !ruby/object:Gem::Requirement
|
73
74
|
requirements:
|
74
|
-
- - "
|
75
|
+
- - "~>"
|
75
76
|
- !ruby/object:Gem::Version
|
76
|
-
version: 3.1
|
77
|
+
version: '3.1'
|
77
78
|
type: :runtime
|
78
79
|
prerelease: false
|
79
80
|
version_requirements: !ruby/object:Gem::Requirement
|
80
81
|
requirements:
|
81
|
-
- - "
|
82
|
+
- - "~>"
|
82
83
|
- !ruby/object:Gem::Version
|
83
|
-
version: 3.1
|
84
|
+
version: '3.1'
|
84
85
|
- !ruby/object:Gem::Dependency
|
85
86
|
name: nested_form
|
86
87
|
requirement: !ruby/object:Gem::Requirement
|
87
88
|
requirements:
|
88
|
-
- - "
|
89
|
+
- - "~>"
|
89
90
|
- !ruby/object:Gem::Version
|
90
91
|
version: '0'
|
91
92
|
type: :runtime
|
92
93
|
prerelease: false
|
93
94
|
version_requirements: !ruby/object:Gem::Requirement
|
94
95
|
requirements:
|
95
|
-
- - "
|
96
|
+
- - "~>"
|
96
97
|
- !ruby/object:Gem::Version
|
97
98
|
version: '0'
|
98
99
|
- !ruby/object:Gem::Dependency
|
99
100
|
name: rails-jquery-autocomplete
|
100
101
|
requirement: !ruby/object:Gem::Requirement
|
101
102
|
requirements:
|
102
|
-
- - "
|
103
|
+
- - "~>"
|
104
|
+
- !ruby/object:Gem::Version
|
105
|
+
version: '1.0'
|
106
|
+
type: :runtime
|
107
|
+
prerelease: false
|
108
|
+
version_requirements: !ruby/object:Gem::Requirement
|
109
|
+
requirements:
|
110
|
+
- - "~>"
|
111
|
+
- !ruby/object:Gem::Version
|
112
|
+
version: '1.0'
|
113
|
+
- !ruby/object:Gem::Dependency
|
114
|
+
name: wicked_pdf
|
115
|
+
requirement: !ruby/object:Gem::Requirement
|
116
|
+
requirements:
|
117
|
+
- - "~>"
|
103
118
|
- !ruby/object:Gem::Version
|
104
119
|
version: '0'
|
105
120
|
type: :runtime
|
106
121
|
prerelease: false
|
107
122
|
version_requirements: !ruby/object:Gem::Requirement
|
108
123
|
requirements:
|
109
|
-
- - "
|
124
|
+
- - "~>"
|
110
125
|
- !ruby/object:Gem::Version
|
111
126
|
version: '0'
|
112
127
|
- !ruby/object:Gem::Dependency
|
113
128
|
name: sqlite3
|
114
129
|
requirement: !ruby/object:Gem::Requirement
|
115
130
|
requirements:
|
116
|
-
- - "
|
131
|
+
- - "~>"
|
117
132
|
- !ruby/object:Gem::Version
|
118
133
|
version: '0'
|
119
134
|
type: :development
|
120
135
|
prerelease: false
|
121
136
|
version_requirements: !ruby/object:Gem::Requirement
|
122
137
|
requirements:
|
123
|
-
- - "
|
138
|
+
- - "~>"
|
124
139
|
- !ruby/object:Gem::Version
|
125
140
|
version: '0'
|
126
141
|
description: Easy CRUD generator for Rails Projects
|
127
142
|
email:
|
128
143
|
- rodrigo@rarolabs.com.br
|
129
144
|
- leonardo@rarolabs.com.br
|
145
|
+
- lima@rarolabs.com.br
|
130
146
|
executables: []
|
131
147
|
extensions: []
|
132
148
|
extra_rdoc_files: []
|
@@ -158,6 +174,8 @@ files:
|
|
158
174
|
- app/views/crud/create.js.erb
|
159
175
|
- app/views/crud/edit.html.erb
|
160
176
|
- app/views/crud/index.html.erb
|
177
|
+
- app/views/crud/listing.pdf.erb
|
178
|
+
- app/views/crud/listing.xls.erb
|
161
179
|
- app/views/crud/mensagens/_avisos.html.erb
|
162
180
|
- app/views/crud/mensagens/_erros_formulario.html.erb
|
163
181
|
- app/views/crud/new.html.erb
|
@@ -171,8 +189,10 @@ files:
|
|
171
189
|
- app/views/kaminari/templus/_prev_page.html.erb
|
172
190
|
- app/views/layouts/_menu_crud.html.erb
|
173
191
|
- app/views/layouts/_template_raro_crud.html.erb
|
192
|
+
- config/initializers/mime_types.rb
|
174
193
|
- config/initializers/raro_search.rb
|
175
194
|
- config/initializers/simple_form.rb
|
195
|
+
- config/initializers/wicked_pdf.rb
|
176
196
|
- config/routes.rb
|
177
197
|
- lib/tasks/templus_models_tasks.rake
|
178
198
|
- lib/templus_models.rb
|