kono_utils 0.15.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (112) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.rdoc +442 -0
  4. data/Rakefile +23 -0
  5. data/app/assets/javascripts/kono_utils/utilities.coffee +456 -0
  6. data/app/assets/stylesheets/kono_utils/utils.css.scss +43 -0
  7. data/app/controllers/kono_utils/change_log_controller.rb +6 -0
  8. data/app/input/bs_aceeditor_input.rb +53 -0
  9. data/app/input/bs_autocomplete_input.rb +60 -0
  10. data/app/input/bs_datepicker_input.rb +16 -0
  11. data/app/input/bs_datetimepicker_input.rb +80 -0
  12. data/app/input/bs_file_download_input.rb +35 -0
  13. data/app/input/bs_image_input.rb +35 -0
  14. data/app/input/bs_label_with_container_input.rb +22 -0
  15. data/app/input/bs_location_picker_input.rb +95 -0
  16. data/app/input/bs_readonly_input.rb +52 -0
  17. data/app/input/bs_timepicker_input.rb +14 -0
  18. data/app/policies/kono_utils/base_editing_policy_concern.rb +27 -0
  19. data/app/views/kono_utils/base_editing/_edit.html.erb +3 -0
  20. data/app/views/kono_utils/base_editing/_edit_page_side_title_header.html.erb +3 -0
  21. data/app/views/kono_utils/base_editing/_edit_page_title_header.html.erb +3 -0
  22. data/app/views/kono_utils/base_editing/_form.html.erb +15 -0
  23. data/app/views/kono_utils/base_editing/_index_buttons.html.erb +2 -0
  24. data/app/views/kono_utils/base_editing/_index_page_side_title_header.html.erb +3 -0
  25. data/app/views/kono_utils/base_editing/_index_page_title_header.html.erb +3 -0
  26. data/app/views/kono_utils/base_editing/_index_tfoot.html.erb +0 -0
  27. data/app/views/kono_utils/base_editing/_new.html.erb +3 -0
  28. data/app/views/kono_utils/base_editing/_new_page_side_title_header.html.erb +3 -0
  29. data/app/views/kono_utils/base_editing/_new_page_title_header.html.erb +3 -0
  30. data/app/views/kono_utils/base_editing/_search_form.html.erb +1 -0
  31. data/app/views/kono_utils/base_editing/application/_edit_page_side_title_header.html.erb +1 -0
  32. data/app/views/kono_utils/base_editing/application/_edit_page_title_header.html.erb +1 -0
  33. data/app/views/kono_utils/base_editing/application/_index_page_side_title_header.html.erb +1 -0
  34. data/app/views/kono_utils/base_editing/application/_index_page_title_header.html.erb +1 -0
  35. data/app/views/kono_utils/base_editing/application/_new_page_side_title_header.html.erb +1 -0
  36. data/app/views/kono_utils/base_editing/application/_new_page_title_header.html.erb +1 -0
  37. data/app/views/kono_utils/base_editing/application/edit.html.erb +1 -0
  38. data/app/views/kono_utils/base_editing/application/new.html.erb +1 -0
  39. data/app/views/kono_utils/base_editing/edit.html.erb +1 -0
  40. data/app/views/kono_utils/base_editing/index.html.erb +36 -0
  41. data/app/views/kono_utils/base_editing/new.html.erb +1 -0
  42. data/app/views/kono_utils/change_log/index.html.erb +3 -0
  43. data/config/initializers/mysql.rb +12 -0
  44. data/config/initializers/time.rb +12 -0
  45. data/config/locales/it.yml +18 -0
  46. data/lib/generators/kono_utils/install/install_generator.rb +24 -0
  47. data/lib/generators/templates/initializer.rb +3 -0
  48. data/lib/kono_utils.rb +41 -0
  49. data/lib/kono_utils/application_helper.rb +625 -0
  50. data/lib/kono_utils/base_editing_helper.rb +194 -0
  51. data/lib/kono_utils/base_search.rb +173 -0
  52. data/lib/kono_utils/concerns.rb +10 -0
  53. data/lib/kono_utils/concerns/active_record_translation.rb +47 -0
  54. data/lib/kono_utils/concerns/base_editing.rb +195 -0
  55. data/lib/kono_utils/concerns/base_modals.rb +97 -0
  56. data/lib/kono_utils/concerns/success_message.rb +25 -0
  57. data/lib/kono_utils/encoder.rb +55 -0
  58. data/lib/kono_utils/engine.rb +13 -0
  59. data/lib/kono_utils/fiscal_code.rb +47 -0
  60. data/lib/kono_utils/params_hash_array.rb +37 -0
  61. data/lib/kono_utils/percentage.rb +60 -0
  62. data/lib/kono_utils/search_attribute.rb +57 -0
  63. data/lib/kono_utils/tmp_file.rb +81 -0
  64. data/lib/kono_utils/version.rb +3 -0
  65. data/lib/kono_utils/virtual_model.rb +22 -0
  66. data/lib/tasks/kono_utils_tasks.rake +4 -0
  67. data/spec/dummy/README.rdoc +28 -0
  68. data/spec/dummy/Rakefile +6 -0
  69. data/spec/dummy/app/assets/images/.keep +0 -0
  70. data/spec/dummy/app/assets/javascripts/application.js +13 -0
  71. data/spec/dummy/app/assets/stylesheets/application.css +15 -0
  72. data/spec/dummy/app/controllers/application_controller.rb +5 -0
  73. data/spec/dummy/app/controllers/concerns/.keep +0 -0
  74. data/spec/dummy/app/helpers/application_helper.rb +2 -0
  75. data/spec/dummy/app/mailers/.keep +0 -0
  76. data/spec/dummy/app/models/.keep +0 -0
  77. data/spec/dummy/app/models/concerns/.keep +0 -0
  78. data/spec/dummy/app/views/layouts/application.html.erb +14 -0
  79. data/spec/dummy/bin/bundle +3 -0
  80. data/spec/dummy/bin/rails +4 -0
  81. data/spec/dummy/bin/rake +4 -0
  82. data/spec/dummy/bin/setup +29 -0
  83. data/spec/dummy/config.ru +4 -0
  84. data/spec/dummy/config/application.rb +32 -0
  85. data/spec/dummy/config/boot.rb +5 -0
  86. data/spec/dummy/config/database.yml +25 -0
  87. data/spec/dummy/config/environment.rb +5 -0
  88. data/spec/dummy/config/environments/development.rb +41 -0
  89. data/spec/dummy/config/environments/production.rb +79 -0
  90. data/spec/dummy/config/environments/test.rb +42 -0
  91. data/spec/dummy/config/initializers/assets.rb +11 -0
  92. data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
  93. data/spec/dummy/config/initializers/cookies_serializer.rb +3 -0
  94. data/spec/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  95. data/spec/dummy/config/initializers/inflections.rb +16 -0
  96. data/spec/dummy/config/initializers/mime_types.rb +4 -0
  97. data/spec/dummy/config/initializers/session_store.rb +3 -0
  98. data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
  99. data/spec/dummy/config/locales/en.yml +23 -0
  100. data/spec/dummy/config/routes.rb +56 -0
  101. data/spec/dummy/config/secrets.yml +22 -0
  102. data/spec/dummy/lib/assets/.keep +0 -0
  103. data/spec/dummy/log/.keep +0 -0
  104. data/spec/dummy/public/404.html +67 -0
  105. data/spec/dummy/public/422.html +67 -0
  106. data/spec/dummy/public/500.html +66 -0
  107. data/spec/dummy/public/favicon.ico +0 -0
  108. data/spec/lib/kono_utils/fiscal_code_spec.rb +56 -0
  109. data/spec/rails_helper.rb +53 -0
  110. data/spec/spec_helper.rb +92 -0
  111. data/vendor/assets/javascripts/EventEmitter.js +473 -0
  112. metadata +425 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 047e731a944ae05843b8ec285d37c1eb3adfcf67
4
+ data.tar.gz: 6b4e99d1e398c46037b07a1718aa571241973762
5
+ SHA512:
6
+ metadata.gz: 645734d84212743b6bf0d58e6cd6ed7a061bd9b07544a083cbfd17908d356dbdea876d12688dd44d0adf51c53625ef132a406738d87bb55d04bdd599a3cb450c
7
+ data.tar.gz: 0411a05091d447ec7a5d56db081b7e77fb4f79a48e08362a7af0f3e511ebf0039cf2e0521025a620d5ab443cc86b806d7e310d1ed63cea14e301ae93ae426f90
data/MIT-LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright 2015 Marino
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.rdoc ADDED
@@ -0,0 +1,442 @@
1
+ = KonoUtils
2
+
3
+ Progetto contenente una serie di classi, debitamente documentata che debbono servire da
4
+ libreria di utilità per i vari progetti utilizzati da Archimedia.
5
+
6
+ == Installazione
7
+ aggiungere nel proprio gemfile
8
+ source 'https://rails-assets.org'
9
+
10
+ gem 'kono_utils'
11
+
12
+ per avere anche le utilities in javascript:
13
+ require kono_utils/utilities
14
+
15
+ == Controllers/Views
16
+
17
+ === ChangeLog
18
+ Aggungere una rotta all'applicativo
19
+ get '/changelog', to: 'kono_utils/change_log#index', as: :changelog
20
+
21
+ Aggiungere un file nella root del progetto:
22
+ CHANGELOG.md
23
+
24
+ contenuto esempio:
25
+ <code>
26
+ ##Legenda:
27
+ - Feature -> Novità
28
+ - Bug -> Risoluzione problema
29
+ - Improvement -> Migliorira
30
+
31
+ ##Versioni
32
+ ### XX.XX.XX
33
+ - **Bug** lorem
34
+ - **Improvement** lorem
35
+ - **Feature** lorem
36
+ </code>
37
+
38
+ == TmpFile
39
+ Classe Funzionante prettamente con RAILS
40
+
41
+ La classe si occupa dei files temporanei creando una cartella dentro a tmp del progetto,
42
+ per ovviare al problema di duplicazioni dei nomi, viene generata una nuova cartella con
43
+ timestamp univoco per ogni file.
44
+
45
+ Estende Tempfile,
46
+ la root della struttura è quella di Rails.root
47
+ e di default la classe scrive dentro a tmp della root di rails.
48
+
49
+ Non c'è bisogno di preoccuparsi di svuotare la cartella tmp contenente i file temporanei dato che la classe
50
+ avrà l'onere di controllare e ripulire eventuali files dopo 1.day di default.
51
+
52
+ === Utilizzo:
53
+ tmp = KonoUtils::TmpFile.new('nomefile.ext')
54
+ tmp.path -> path completa
55
+ tmp.write(valore_da_scrivere_dentro_a_file)
56
+ tmp.original_filename -> restituisce il nome inizialmente passato alla classe
57
+ tmp.unique_filename -> restoituisce il nome univoco del file
58
+ tmp.path -> restituisce la path del file
59
+
60
+
61
+
62
+ == Encoder
63
+ Classe che si occupa di decodificare una qualsiasi stringa in formato utf8,
64
+ cercando di trovare l'encoding iniziale a tentativi.
65
+ Ha anche a disposizione una funzione per la rimozione dei caratteri BOM dalla stringa(http://en.wikipedia.org/wiki/Byte_order_mark)
66
+
67
+ === Utilizzo
68
+ str="stringa di un encoding sconosciuto"
69
+ en = KonoUtils::Encoder.new(str)
70
+ en.string_encoder -> normale tentativo di encoding restituendo stringa in utf8
71
+ en.remove_bom -> rimozione del carattere BOM e encoding con la funzione precedente
72
+
73
+ == Percentage
74
+ Classe che si occupa di rappresentare un numero in percentuale.
75
+ Per maggiori info sulle funzionalità controllare la documentazione sulla classe
76
+
77
+ === Utilizzo
78
+ p = KonoUtils::Percentage.new(100,20)
79
+ p.percentage -> ritorna il valore percentuale float
80
+ p.to_i -> ritorna percentuale intera con relativi arrotondamenti
81
+ p.to_percentage -> si comporta come l'helper number_to_percentage
82
+
83
+ == Params Hash Array
84
+
85
+ Si occupa di trasformare un hash con elementi che sono chiramente array in un hash con elementi array:
86
+
87
+ {"DatiOrdineAcquisto"=>{"0"=>{"RiferimentoNumeroLinea"=>{"0"=>""}, "IdDocumento"=>"", "Data"=>"", "NumItem"=>"", "CodiceCommessaConvenzione"=>"", "CodiceCUP"=>"", "CodiceCIG"=>""}}}
88
+ {"DatiOrdineAcquisto"=>[{"RiferimentoNumeroLinea"=>[""], "IdDocumento"=>"", "Data"=>"", "NumItem"=>"", "CodiceCommessaConvenzione"=>"", "CodiceCUP"=>"", "CodiceCIG"=>""}]}
89
+
90
+ === Utilizzo
91
+ includere nel controller o dove si vuole utilizzare il concern
92
+ include KonoUtils::ParamsHashArray
93
+
94
+ e richiamare la funzione:
95
+ elaborate_params_to_hash_array(params)
96
+
97
+ == Virtual Model
98
+ Server per avere un modello virtuale in Rails
99
+
100
+ === Utilizzo
101
+ Praticamente è come avere un active record ma senza avere una tabella
102
+
103
+ class Session < KonoUtils::VirtualModel
104
+
105
+ attr_accessor :username, :password, :token
106
+
107
+
108
+ validates :token,:presence=>true
109
+
110
+ end
111
+
112
+ Session.new(:username=>'ciao',:password=>'pippo').valid? => false
113
+
114
+ == BaseSearch
115
+ Classe per semplificare il sistema di organizzazione dei modelli di ricerca, unendo anche la
116
+ configurazione della form di ricerca utilizzando l'helper search_form
117
+
118
+ === Utilizzo
119
+
120
+ TODO completare spiegazione utilizzo(vedi commenti classe)
121
+
122
+ Creare una classe modello per gestire la ricerca partendo da BaseSearch
123
+
124
+ module Admin::PariteticEntities
125
+ class Search < KonoUtils::BaseSearch
126
+
127
+ set_search_model Admin::PariteticEntity -> settare il modello a cui si vuole eseguire effettivamente la ricerca
128
+ dovrà contenete uno scope: search che può ricevere un hash di campi da ricercare,
129
+ questo hash conterrà tutti i campi sotto definiti, volendo anche con casting passato
130
+ attraverso il set_search_attributes
131
+
132
+ set_search_attributes :name -> in questo modo settiamo i campi da ricercare, per maggiori
133
+ informazioni guardare i commenti di questo metodo
134
+
135
+ end
136
+ end
137
+
138
+ è possibile poi, una volta creata l'istanza della ricerca definirle uno scope preciso:
139
+ @search = PariteticEntities::Search.new
140
+
141
+ @search.scope = policy_scope(PariteticEntity)
142
+ o
143
+ @search.scope = PariteticEntity.where(:name=>10)
144
+
145
+ quando si devono settare i parametri provenienti dalla form li carichiamo in questo modo:
146
+ @search.update_attributes(params.require(:campo_della_ricerca).permit(:name))
147
+
148
+ Esempio di scope nel modello Admin::PariteticEntity
149
+ ##
150
+ # Ricerca
151
+ #
152
+ # * *Args* :
153
+ # - search_query -> Hash of:
154
+ # name: ricerca libera sul nome %nome%
155
+ scope :search, ->(search_query) {
156
+
157
+ unless search_query[:name].blank?
158
+ where(self.arel_table[:name].matches("%#{search_query[:name]}%"))
159
+ end
160
+
161
+ }
162
+
163
+ == Concerns
164
+
165
+ === ActiveRecordTranslation
166
+ Serve per aggiungere ad Active Record funzioni corte per la traduzione, includere in un'inizializzatore
167
+
168
+ ActiveRecord::Base.include KonoUtils::Concerns::ActiveRecordTranslation
169
+
170
+ === SuccessMessage
171
+ Include 3 funzioni da poter utilizzare per stampare il messaggio di default di conferma
172
+ salvataggio,cancellazione,aggiornamento di un modello come notice in un controller:
173
+
174
+ .., :notice=>success_create_message(model)
175
+ .., :notice=>success_update_message(model)
176
+ .., :notice=>success_destroy_message(model)
177
+
178
+ === Base Modals
179
+ Un Concern per poter semplificare la vita al controller di salvataggio dati da modals
180
+
181
+ ==== Utilizzo
182
+ class Buildings::FloorsController < ApplicationController
183
+ include KonoUtils::Concerns::BaseModals
184
+
185
+ def create
186
+ @obj = @parent_model.floors.build(update_params)
187
+ super
188
+ end
189
+
190
+ private
191
+
192
+ def load_obj
193
+ @obj = @parent_model.floors.find(params[:id])
194
+ end
195
+
196
+ def update_params
197
+ params.require(:floor).permit(:name)
198
+ end
199
+
200
+ def save_response
201
+ respond_to do |f|
202
+ if @obj.valid?
203
+ @obj.save
204
+ f.json do
205
+ render_part_to_json('buildings/floors/panel.html', {:piano => @obj})
206
+ end
207
+ else
208
+ f.json do
209
+ render_part_to_json('buildings/floors/modal_form.html', {:piano => @obj, :id => ''}, 400)
210
+ end
211
+ end
212
+ end
213
+ end
214
+
215
+ def load_parent_assoc
216
+ @parent_model = Building.find(params[:building_id])
217
+ end
218
+
219
+ end
220
+
221
+ #TODO inserire documentazione o generatori per creare codice velocemente, con javascript (Kn.utilities.BasePannel)
222
+ # e viste con row modal ecc
223
+
224
+ === Base Editing
225
+ Un Concern che racchiude tutte le funzionalità base generalizzate per la gestione di un modello
226
+
227
+ ==== Utilizzo
228
+ Includere in un controller da cui derivare tutti i controller dei modelli da editare questo concern chiamandolo BaseEditingController
229
+ include KonoUtils::Concerns::BaseEditing
230
+ creare un helper per questo controller e inserirci il modulo degli helper
231
+ include KonoUtils::BaseEditingHelper
232
+ nelle policies poi creare una policy che includa KonoUtils::BaseEditingPolicyConcern
233
+ da cui poi derivare tutte le altre
234
+
235
+ == Application Helper
236
+ Modulo che include varie utilities da poter utilizzare:
237
+ === Utilizzo
238
+
239
+ ==== will_paginate_bst
240
+ esegue will_paginate con il renderer per bootstrap
241
+ <%=will_paginate_bst(collection)%>
242
+
243
+ ==== namespace_content
244
+ genera un div contenitore con la classi derivate da controller e azione
245
+ <%= namespace_content do %>
246
+ <%= yield %>
247
+ <% end %>
248
+ ==== true_false_label
249
+ stampa un label per bootstrap con true o false rispetto al valore passato
250
+ <%= true_false_label(true) %> =>
251
+
252
+ ==== bootstrap_please_wait
253
+ Genera una modal da riutilizzare per far aspettare determinate operazioni al client
254
+ <%= bootstrap_please_wait %>
255
+ Ricordarsi di aggiungere nel JS:
256
+ $('#processing_wait').modal() -> per visualizzarlo
257
+ $('#processing_wait').modal('hide') -> per nasconderlo
258
+
259
+ ==== search_form
260
+ Genera una form di ricerca con bootstrap, utilizzando la classe BaseSearch.
261
+
262
+ TODO completare spiegazione utilizzo(vedi commenti classe)
263
+
264
+ ==== print_rescue_date
265
+ Stampa la data standard se questa non è nil
266
+
267
+ ==== title_mod(model)
268
+ Scrive il titolo per modifica del modello
269
+ ==== title_new(model)
270
+ Scrive il titolo per new del modello
271
+ ==== title_newa(model)
272
+ Scrive il titolo per il modello al femminile
273
+ ==== enum_collection
274
+ Genera l'hash da passare come collection alle selectbox, esegue anche la traduzione con locale
275
+ ==== enum_translation
276
+ Si occupa di tradurre un determinato valore di un enum
277
+ Le traduzioni dentro al locale devono essere fatte in questo modo:
278
+
279
+ it:
280
+ activerecord:
281
+ attributes:
282
+ estimate_before/value:
283
+ na: NA
284
+ very_insufficient: 1
285
+ insufficient: 2
286
+ sufficient: 3
287
+ excellent: 4
288
+
289
+ dove in questo caso estimate_before è il modello e value è il nome del campo enum
290
+
291
+ ==== modal_form_generator
292
+ Si occupa di gnerare una modal di bootstrap con all'interno una form
293
+
294
+ ES:
295
+ <%= modal_form_generator(id: id, title: student.mn, form_cfgs: [[school_turn, student]]) do |f| %>
296
+ <%= f.input :person, as: :select, collection: school_turn.possible_students.collect { |p| [p.nominativo, p.id] } %>
297
+ <%= f.input :year, as: :bs_readonly, :display_field => :nome %>
298
+
299
+ <%= render 'tikal_dish_core/school_turns/turns_row.html', f: f %>
300
+ <% end %>
301
+
302
+ possibile anche passare una proc per generare i bottoni della modal in modo differente dallo standard, vedere documentazione
303
+
304
+ ==== modal_edit_button
305
+ Genera il bottone per editazione con una modal del contenuto,
306
+ gli viene passato un block contenente la modal da lanciare per l'editazione,
307
+ solitamente generata con modal_form_generator.
308
+ come parametri viene passato l'id del target che si aspetta di richiamare
309
+ <code>
310
+ ES:
311
+ modal_edit_button do |id|
312
+ render 'tikal_core/people/person_contacts/modal_form', :contact => contact, :id => id %>
313
+ end
314
+
315
+ Options:
316
+
317
+ - align: left|rigth
318
+ - updatable_content: elemento da rimpiazzare con il partial restituito
319
+ - class: classi aggiuntive per selezionare meglio il bottone
320
+ - bnt_icon: Symbol che identifica che icona utilizzare per il bottone
321
+ </code>
322
+
323
+ ==== modal_delete_button
324
+ Genera il bottone per la cancellazione di un record, viene creata una relativa modal
325
+ per la conferma
326
+ <code>
327
+ ES:
328
+ <%= modal_delete_button(cliente_referente_path(referente.cliente, referente, :json),
329
+ callback_remove: "##{id}",
330
+ :bnt_icon => 'times fw') %>
331
+
332
+
333
+ modal_delete_button(path, [options])
334
+ path -> resource to delete
335
+ options:
336
+ * confirm : Text to display in modal
337
+ * align : left|right
338
+ * callback_remove : id dell'elemento da rimuove una volta avuto successo il javascript di cancellazione
339
+ * bnt_icon : Symbol che identifica che icona utilizzare per il bottone [:times]
340
+ </code>
341
+
342
+ ==== multiple_elements_table
343
+ Genera la struttura di una tabella per la gestione dei campi nested multipli.
344
+ multiple_elements_table( "form di formtastic","relazione nel modello nested","elenco campi da visualizzare")
345
+ possibile blocco: vedi docs
346
+ <code>
347
+ <%= f.inputs :name => PriceRange.mnp, class: 'form-inline CLASSE_CONTAINER' do %>
348
+ <%= multiple_elements_table(f, :price_ranges, [:from_val, :to_val, :price]) %>
349
+ <% end %>
350
+ </code>
351
+ Ricordarsi poi di aggiungere negli assets anche la funzione per duplicare le righe e per cancellarle
352
+ <code>
353
+ $('.CLASSE_CONTAINER').multiple_table()
354
+ </code>
355
+ Nel modello dobbiamo inserire i comandi per il nested:
356
+ <code>
357
+ has_many :price_ranges, :dependent => :destroy
358
+ accepts_nested_attributes_for :price_ranges, allow_destroy: true
359
+ validates_associated :price_ranges
360
+ </code>
361
+ Nella policy/controller dobbiamo preoccuparci di avere anche i permitted attributes corretti
362
+ <code>
363
+ :price_ranges_attributes => [:from_val, :to_val, :price, :id, :_destroy]
364
+ </code>
365
+
366
+ === bs_tree
367
+ Genera un'albero con bootstrap-tree
368
+ deve ricevere un array di dati da trasformare in json.
369
+ per come scrivere il parametro data vedi
370
+ https://github.com/jonmiles/bootstrap-treeview
371
+ <code>
372
+ bs_tree(
373
+ [
374
+ {
375
+ :text => 'ciao',
376
+ state:
377
+ {
378
+ expanded: false
379
+ },
380
+ nodes:
381
+ [
382
+ {
383
+ text: 'pipo'
384
+ }
385
+ ]
386
+ },
387
+ {
388
+ :text => 'marino'
389
+ }
390
+ ]
391
+ )
392
+ </code>
393
+
394
+ == Inputs Formtastic per bootstrap
395
+ Una serie di inputs per formtastic con bootstrap
396
+ ===Utilizzo
397
+ Ricordiamo di mettere kono_utils come gemma sucessivamente a formtastic.
398
+ se si vogliono anche gli input :
399
+ bs_aceeditor
400
+ bs_datetimepicker inject_js => True|False|Hash per ozioni js
401
+ - server_format: 'YYYY-MM-DD',
402
+ - server_match: '/^[0-9]{4}-[0-9]{2}-[0-9]{2}$/',
403
+ - format: 'DD/MM/YYYY HH:mm'
404
+ bs_datepicker Come il bs_datetimepicker_input ma con già presenti i settaggi corretti
405
+ bs_readonly
406
+ bs_file_download visualizza un campo per il caricamento dei files e il relativo bottone di download
407
+ bs_image visualizza campo caricamento e in parte l'immagine caricata se caricata
408
+ bs_label_with_container Rende possibile inserire dentro al contenitore della input un qualsiasi
409
+ contenuto tramite una proc passata come opzione :content
410
+ <code>
411
+ content: Proc.new {
412
+ bf = ActiveSupport::SafeBuffer.new
413
+
414
+ bf<< f.file_field(:convenz_document)
415
+
416
+ bf
417
+ }
418
+ </code>
419
+ bs_timepicker
420
+ serve includere anche la gemma:
421
+ gem 'font-awesome-rails', '~> 4.3.0' #https://github.com/bokmann/font-awesome-rails
422
+
423
+ = Utilities Style CSS
424
+
425
+ == Spacer
426
+ classi per una spaziatura verticale , utilizzare
427
+ passando la classe generale v-space e poi il valore scelto: space-x1
428
+ ogni valore dello spacer rappresente 0.2em
429
+ da 1 a 20 come valore di moltiplicatore
430
+
431
+ === Utilizzo
432
+ <div class="kono-v-spacer space-x2"></div> => 0.4em
433
+
434
+ == Fiscal code
435
+ Classe KonoUtils::FiscalCode per verificare validità codice fiscale e partita iva dai rispettivi caratteri fi controllo
436
+
437
+ === Utilizzo
438
+ KonoUtils::FiscalCode::ControllaCF(codice_fiscale, strict = false) Controllo dell'esattezza del codice fiscale
439
+ verificando il carattere di controllo
440
+ KonoUtils::FiscalCode::ControllaPI(partita_iva) Controllo dell'esattezza della partita iva dal carattere di controllo
441
+ Inoltre rispetto a questo argomento è stata aggiunta anche la gemma codice-fiscale https://github.com/topac/codice_fiscale
442
+ Che permette di calcolare il codice fiscale partendo dai dati anagrafici di una persona.