mobilart_models 1.2.14

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.
Files changed (98) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.rdoc +3 -0
  4. data/Rakefile +37 -0
  5. data/app/models/bundle.rb +39 -0
  6. data/app/models/chosen_deck.rb +76 -0
  7. data/app/models/chosen_furniture.rb +114 -0
  8. data/app/models/chosen_item.rb +187 -0
  9. data/app/models/chosen_room.rb +114 -0
  10. data/app/models/commission.rb +58 -0
  11. data/app/models/deck.rb +25 -0
  12. data/app/models/furniture.rb +45 -0
  13. data/app/models/furniture_item.rb +20 -0
  14. data/app/models/item.rb +25 -0
  15. data/app/models/room.rb +22 -0
  16. data/app/models/timetable.rb +171 -0
  17. data/app/models/workflow.rb +173 -0
  18. data/config/initializers/mobilart_models_after_initialize.rb +7 -0
  19. data/config/locales/en.activerecord.yml +36 -0
  20. data/config/locales/en.yml +38 -0
  21. data/config/locales/it.activerecord.yml +157 -0
  22. data/config/locales/it.yml +33 -0
  23. data/config/routes.rb +2 -0
  24. data/db/migrate/20150825174853_create_items.rb +13 -0
  25. data/db/migrate/20150825175219_create_commissions.rb +14 -0
  26. data/db/migrate/20150825175836_create_decks.rb +13 -0
  27. data/db/migrate/20150825175853_create_rooms.rb +13 -0
  28. data/db/migrate/20150825175952_create_furnitures.rb +13 -0
  29. data/db/migrate/20150825180027_create_furniture_items.rb +10 -0
  30. data/db/migrate/20150825180510_create_bundles.rb +14 -0
  31. data/db/migrate/20150827084511_create_chosen_decks.rb +12 -0
  32. data/db/migrate/20150827084626_create_chosen_rooms.rb +12 -0
  33. data/db/migrate/20150827084745_create_chosen_furnitures.rb +12 -0
  34. data/db/migrate/20150827184845_create_chosen_items.rb +12 -0
  35. data/db/migrate/20150828180910_create_workflows.rb +13 -0
  36. data/db/migrate/20150903152839_create_timetables.rb +17 -0
  37. data/db/migrate/20151201145832_add_external_to_user.rb +5 -0
  38. data/db/migrate/20151202155259_add_external_to_workflow.rb +6 -0
  39. data/db/migrate/20151218145139_add_closed_to_commission.rb +5 -0
  40. data/db/migrate/20151221083612_add_checked_to_chosen_item.rb +5 -0
  41. data/db/migrate/20151221100829_add_bundle_to_chosen_item.rb +5 -0
  42. data/db/migrate/20151221100914_add_checked_in_bundle_to_chosen_item.rb +5 -0
  43. data/db/migrate/20160212155936_remove_chosen_furniture_from_timetable.rb +5 -0
  44. data/db/migrate/20160212160511_add_chosen_item_to_timetable.rb +5 -0
  45. data/db/migrate/20160331101901_add_code_to_user.rb +6 -0
  46. data/db/migrate/20160519144818_save_items_to_make_name_code_the_same.rb +7 -0
  47. data/db/migrate/20160622132452_add_barcode_to_chosen_item.rb +154 -0
  48. data/db/migrate/20160629135548_edit_index_for_furniture.rb +6 -0
  49. data/db/migrate/20170723195528_remove_barcode_from_chosen_items.rb +5 -0
  50. data/lib/mobilart_models.rb +14 -0
  51. data/lib/mobilart_models/engine.rb +12 -0
  52. data/lib/mobilart_models/version.rb +3 -0
  53. data/lib/mobilart_models_abilities.rb +53 -0
  54. data/lib/mobilart_roles.rb +6 -0
  55. data/lib/rails_admin_print_jobs_concern.rb +13 -0
  56. data/lib/rails_admin_printers_concern.rb +13 -0
  57. data/lib/rails_admin_user_main_concern.rb +11 -0
  58. data/lib/tasks/mobilart_models_tasks.rake +4 -0
  59. data/lib/user_model_concerns.rb +13 -0
  60. data/test/dummy/README.rdoc +28 -0
  61. data/test/dummy/Rakefile +6 -0
  62. data/test/dummy/app/assets/javascripts/application.js +13 -0
  63. data/test/dummy/app/assets/stylesheets/application.css +15 -0
  64. data/test/dummy/app/controllers/application_controller.rb +5 -0
  65. data/test/dummy/app/helpers/application_helper.rb +2 -0
  66. data/test/dummy/app/views/layouts/application.html.erb +14 -0
  67. data/test/dummy/bin/bundle +3 -0
  68. data/test/dummy/bin/rails +4 -0
  69. data/test/dummy/bin/rake +4 -0
  70. data/test/dummy/bin/setup +29 -0
  71. data/test/dummy/config.ru +4 -0
  72. data/test/dummy/config/application.rb +25 -0
  73. data/test/dummy/config/boot.rb +5 -0
  74. data/test/dummy/config/database.yml +25 -0
  75. data/test/dummy/config/environment.rb +5 -0
  76. data/test/dummy/config/environments/development.rb +41 -0
  77. data/test/dummy/config/environments/production.rb +79 -0
  78. data/test/dummy/config/environments/test.rb +42 -0
  79. data/test/dummy/config/initializers/assets.rb +11 -0
  80. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  81. data/test/dummy/config/initializers/cookies_serializer.rb +3 -0
  82. data/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  83. data/test/dummy/config/initializers/inflections.rb +16 -0
  84. data/test/dummy/config/initializers/mime_types.rb +4 -0
  85. data/test/dummy/config/initializers/session_store.rb +3 -0
  86. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  87. data/test/dummy/config/locales/en.yml +23 -0
  88. data/test/dummy/config/routes.rb +56 -0
  89. data/test/dummy/config/secrets.yml +22 -0
  90. data/test/dummy/log/development.log +1 -0
  91. data/test/dummy/public/404.html +67 -0
  92. data/test/dummy/public/422.html +67 -0
  93. data/test/dummy/public/500.html +66 -0
  94. data/test/dummy/public/favicon.ico +0 -0
  95. data/test/integration/navigation_test.rb +8 -0
  96. data/test/mobilart_models_test.rb +7 -0
  97. data/test/test_helper.rb +20 -0
  98. metadata +206 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: afddb939c222cffb43c0e95ee15e83a0cb052ae5
4
+ data.tar.gz: 846942720f0c6581e5ec71d6321ebb6bdfa2d0a1
5
+ SHA512:
6
+ metadata.gz: 16f48274905c68059f6a1328dbe886588d174136e9807e66dcd1c135360cd54befbe7b9c5543491ff09d632137544e488713c8b8eb8d9a6f6d56870677562994
7
+ data.tar.gz: 81586ab334e3bca35870fd53344bd3bd327610940063c857c58cad1392e33eb22cbff3bc6a538a198f5abfb70d210a4718fadc91a4aa2a5de7399ba0d07d377b
@@ -0,0 +1,20 @@
1
+ Copyright 2016 Gabriele Tassoni
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.
@@ -0,0 +1,3 @@
1
+ = MobilartModels
2
+
3
+ This project rocks and uses MIT-LICENSE.
@@ -0,0 +1,37 @@
1
+ begin
2
+ require 'bundler/setup'
3
+ rescue LoadError
4
+ puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
5
+ end
6
+
7
+ require 'rdoc/task'
8
+
9
+ RDoc::Task.new(:rdoc) do |rdoc|
10
+ rdoc.rdoc_dir = 'rdoc'
11
+ rdoc.title = 'MobilartModels'
12
+ rdoc.options << '--line-numbers'
13
+ rdoc.rdoc_files.include('README.rdoc')
14
+ rdoc.rdoc_files.include('lib/**/*.rb')
15
+ end
16
+
17
+ APP_RAKEFILE = File.expand_path("../test/dummy/Rakefile", __FILE__)
18
+ load 'rails/tasks/engine.rake'
19
+
20
+
21
+ load 'rails/tasks/statistics.rake'
22
+
23
+
24
+
25
+ Bundler::GemHelper.install_tasks
26
+
27
+ require 'rake/testtask'
28
+
29
+ Rake::TestTask.new(:test) do |t|
30
+ t.libs << 'lib'
31
+ t.libs << 'test'
32
+ t.pattern = 'test/**/*_test.rb'
33
+ t.verbose = false
34
+ end
35
+
36
+
37
+ task default: :test
@@ -0,0 +1,39 @@
1
+ class Bundle < ApplicationRecord
2
+ belongs_to :commission, inverse_of: :bundles
3
+ has_many :chosen_items, inverse_of: :bundle, dependent: :nullify
4
+
5
+ validates :commission, presence: true
6
+ validates :code, presence: true, uniqueness: { case_sensitive: false, scope: :commission_id }
7
+
8
+ # Items: I need a method to obtain all the items in the
9
+ # current selected Commission
10
+ def records_for_print
11
+ # TODO: move away from this pseudo code as soon as Bancolini tells me
12
+ # what Mobilart wants
13
+ # chosen_item.name
14
+ # chosen_item.barcode
15
+ # chosen_item.timetables.last.status
16
+ # chosen_item.timetables.last.job_type
17
+ ChosenItem.joins(:bundle).where(bundles: {id: id}).distinct
18
+ end
19
+
20
+ def display_name
21
+ [commission.code, code].compact.join(" - ")
22
+ end
23
+
24
+ rails_admin do
25
+ navigation_label I18n.t("admin.tools.label")
26
+ navigation_icon 'fa fa-dropbox'
27
+ weight 9
28
+
29
+ configure :id do
30
+ visible false
31
+ end
32
+ configure :created_at do
33
+ visible false
34
+ end
35
+ configure :updated_at do
36
+ visible false
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,76 @@
1
+ class ChosenDeck < ApplicationRecord
2
+ belongs_to :deck, inverse_of: :chosen_decks
3
+ belongs_to :commission, inverse_of: :chosen_decks
4
+
5
+ has_many :chosen_rooms, inverse_of: :chosen_deck, dependent: :destroy
6
+ has_many :rooms, through: :chosen_rooms, inverse_of: :chosen_decks
7
+ accepts_nested_attributes_for :chosen_rooms, allow_destroy: true
8
+
9
+ validates :deck, presence: true
10
+ validates :commission, presence: true
11
+
12
+ before_create :increment_code
13
+ # Items: I need a method to obtain all the items in the
14
+ # current selected Commission
15
+ def records_for_print id
16
+ # TODO: move away from this pseudo code as soon as Bancolini tells me
17
+ # what Mobilart wants
18
+ # chosen_item.name
19
+ # chosen_item.barcode
20
+ # chosen_item.timetables.last.status
21
+ # chosen_item.timetables.last.job_type
22
+ ChosenItem.joins(chosen_furniture: {chosen_room: :chosen_deck}).where(chosen_decks: {id: id}).distinct
23
+ end
24
+
25
+ def list_associated_items
26
+ true
27
+ end
28
+
29
+ default_scope {joins(:commission)}
30
+
31
+ amoeba do
32
+ enable
33
+ include_association :chosen_rooms
34
+ end
35
+
36
+ def display_name
37
+ "Ponte #{deck.name} della commessa #{commission.name} contenente #{chosen_rooms.count} stanze"
38
+ end
39
+
40
+ rails_admin do
41
+ navigation_label I18n.t(:operative_section)
42
+ navigation_icon 'fa fa-tasks'
43
+ parent Commission
44
+ weight 5
45
+
46
+ # list do
47
+ field :commission do
48
+ read_only true
49
+ end
50
+ field :deck do
51
+ read_only true
52
+ end
53
+ field :chosen_rooms
54
+ end
55
+
56
+ def readable_barcode
57
+ "#{commission.code}|#{deck.code}|#{code}"
58
+ end
59
+
60
+ def barcode
61
+ "#{commission.code}#{deck.code}#{code}"
62
+ end
63
+
64
+ def name
65
+ # "#{deck.name rescue nil} (#{readable_barcode rescue nil})"
66
+ deck.name rescue "Undefined"
67
+ end
68
+
69
+ private
70
+
71
+ def increment_code
72
+ max_code = ChosenDeck.order("chosen_decks.code DESC").pluck(:code).compact.map(&:to_i).max.to_i
73
+ # Rails.logger.debug "MAX CODE IS:#{max_code} Adding 1: #{(max_code + 1)}"
74
+ self.code = (max_code + 1)
75
+ end
76
+ end
@@ -0,0 +1,114 @@
1
+ class ChosenFurniture < ApplicationRecord
2
+ belongs_to :chosen_room, inverse_of: :chosen_furnitures
3
+ belongs_to :furniture, inverse_of: :chosen_furnitures
4
+
5
+ has_many :chosen_items, inverse_of: :chosen_furniture, dependent: :destroy
6
+ has_many :furniture_items, through: :chosen_items, inverse_of: :chosen_furnitures
7
+
8
+ #has_many :timetables, dependent: :destroy, inverse_of: :chosen_furniture
9
+
10
+ validates :furniture, presence: true
11
+ validates :chosen_room, presence: true
12
+ # Whenever I choose a furniture for a room,
13
+ # I must track even the chosen items to add a code to them
14
+ before_save :link_to_items
15
+ before_create :increment_code
16
+ # Items: I need a method to obtain all the items in the
17
+ # current selected Commission
18
+ def records_for_print id
19
+ # TODO: move away from this pseudo code as soon as Bancolini tells me
20
+ # what Mobilart wants
21
+ # chosen_item.name
22
+ # chosen_item.barcode
23
+ # chosen_item.timetables.last.status
24
+ # chosen_item.timetables.last.job_type
25
+ ChosenItem.joins(:chosen_furniture).where(chosen_furnitures: {id: id}).distinct
26
+ end
27
+
28
+ def list_associated_items
29
+ true
30
+ end
31
+
32
+ amoeba do
33
+ enable
34
+ exclude_association :chosen_items
35
+ exclude_association :furniture_items
36
+ end
37
+
38
+ def deck
39
+ chosen_room.chosen_deck.name rescue "-"
40
+ end
41
+
42
+ def commission
43
+ chosen_room.chosen_deck.commission.code rescue "-"
44
+ end
45
+
46
+ def display_name
47
+ "#{name} presente in #{[commission, deck, chosen_room.name].compact.join(" - ")} contenente #{furniture_items.count} particolari"
48
+ end
49
+
50
+ # Necessario per poter cercare nei filed associati
51
+ default_scope {joins(chosen_room: [:room, {chosen_deck: [:deck, :commission ]}])}
52
+
53
+ rails_admin do
54
+ navigation_label I18n.t(:operative_section)
55
+ navigation_icon 'fa fa-cubes'
56
+ parent Commission
57
+ weight 7
58
+
59
+ edit do
60
+ field :furniture
61
+ end
62
+ list do
63
+ field :commission do
64
+ searchable "commissions.code"
65
+ sortable "commissions.code"
66
+ read_only true
67
+ filterable true
68
+ end
69
+ field :deck do
70
+ searchable "decks.name"
71
+ sortable "decks.name"
72
+ read_only true
73
+ filterable true
74
+ end
75
+ field :chosen_room do
76
+ searchable "rooms.name"
77
+ sortable "rooms.name"
78
+ read_only true
79
+ filterable true
80
+ end
81
+ field :furniture do
82
+ searchable "furnitures.name"
83
+ sortable "furnitures.name"
84
+ filterable true
85
+ end
86
+ field :furniture_items
87
+ end
88
+ end
89
+
90
+ def readable_barcode
91
+ "#{chosen_room.readable_barcode}|#{furniture.code}|#{code}"
92
+ end
93
+
94
+ def barcode
95
+ "#{chosen_room.barcode}#{furniture.code}#{code}"
96
+ end
97
+
98
+ def name
99
+ furniture.name rescue "-"
100
+ end
101
+
102
+ private
103
+
104
+ def link_to_items
105
+ self.furniture_items = self.furniture.furniture_items
106
+ end
107
+
108
+ def increment_code
109
+ # Cerco il numero più alto e incremento
110
+ max_code = ChosenFurniture.order("chosen_furnitures.code DESC").pluck(:code).compact.map(&:to_i).max.to_i
111
+ # Rails.logger.debug "MAX CODE IS:#{max_code} Adding 1: #{(max_code + 1)}"
112
+ self.code = (max_code + 1)
113
+ end
114
+ end
@@ -0,0 +1,187 @@
1
+ class ChosenItem < ApplicationRecord
2
+ belongs_to :chosen_furniture, inverse_of: :chosen_items #, dependent: :destroy
3
+ belongs_to :furniture_item, inverse_of: :chosen_items
4
+ belongs_to :bundle, inverse_of: :chosen_items
5
+
6
+ has_many :timetables, dependent: :destroy, inverse_of: :chosen_item
7
+ has_many :workflows, inverse_of: :chosen_item, dependent: :destroy
8
+
9
+ before_create :increment_code
10
+
11
+ def self.barcode_concat
12
+ "concat(commissions.code,decks.code,chosen_decks.code,rooms.code,chosen_rooms.code,furnitures.code,chosen_furnitures.code,items.code,LPAD(chosen_items.code::text, 5, '0'))"
13
+ end
14
+
15
+ def self.select_with_barcode
16
+ select "chosen_items.*, #{ChosenItem.barcode_concat} as barcode"
17
+ end
18
+
19
+ def self.barcode_concat_where barcode
20
+ where ["#{ChosenItem.barcode_concat} = ?", barcode]
21
+ end
22
+ # All the chosen_items must have the full chain of relations up to commission,
23
+ # Otherwise is invalid (and mustn't exist anyway)
24
+ # this gives me the ability to simply query for fields on related tables
25
+ default_scope {
26
+ joins({chosen_furniture: [:furniture, { chosen_room: [:room, {chosen_deck: [:deck, :commission]}]}], furniture_item: :item}).select_with_barcode
27
+ }
28
+
29
+ def records_for_print id
30
+ # TODO: move away from this pseudo code as soon as Bancolini tells me
31
+ # what Mobilart wants
32
+ # chosen_item.name
33
+ # chosen_item.barcode
34
+ # chosen_item.timetables.last.status
35
+ # chosen_item.timetables.last.job_type
36
+ ChosenItem.where(chosen_items: {id: id}).distinct
37
+ end
38
+
39
+ def room
40
+ chosen_furniture.chosen_room.name rescue "-"
41
+ end
42
+
43
+ def deck
44
+ chosen_furniture.chosen_room.chosen_deck.name rescue "-"
45
+ end
46
+
47
+ def commission
48
+ chosen_furniture.chosen_room.chosen_deck.commission.code rescue "-"
49
+ end
50
+
51
+ def status
52
+ " -overridden by pretty_value- "
53
+ end
54
+
55
+ def user
56
+ workflows.last.user.email rescue "-"
57
+ end
58
+
59
+ def furniture
60
+ chosen_furniture.furniture.name rescue "-"
61
+ end
62
+
63
+ def item
64
+ furniture_item.item.name
65
+ end
66
+
67
+ def tiered_times
68
+ tt = self.timetables
69
+ t = (tt.sum(:hours)*60 + tt.sum(:minutes))*60
70
+ t.to_tiered_times true
71
+ end
72
+
73
+ def self.filter_by_id
74
+ #Rails.logger.debug "QQQQQQQQQQQQQ: #{params.inspect}"
75
+ end
76
+
77
+ rails_admin do
78
+ navigation_label I18n.t(:operative_section)
79
+ parent Commission
80
+ weight 8
81
+ # TODO: mettere a true per i test, mettere a false in production
82
+ visible false
83
+
84
+ export do
85
+ field :barcode
86
+ field :commission
87
+ field :deck
88
+ field :room
89
+ field :furniture
90
+ field :item
91
+ field :status
92
+ field :user
93
+ end
94
+
95
+ list do
96
+ field :barcode do
97
+ sortable false
98
+ searchable false
99
+ read_only true
100
+ filterable false
101
+ end
102
+
103
+ field :commission do
104
+ #column_width 12
105
+ searchable "commissions.code"
106
+ read_only true
107
+ sortable "commissions.code"
108
+ filterable true
109
+ end
110
+ field :deck do
111
+ #column_width 12
112
+ searchable "decks.name"
113
+ sortable "decks.name"
114
+ read_only true
115
+ filterable true
116
+ end
117
+ field :room do
118
+ searchable "rooms.name"
119
+ sortable "rooms.name"
120
+ read_only true
121
+ filterable true
122
+ end
123
+ field :chosen_furniture do
124
+ searchable "furnitures.name"
125
+ sortable "furnitures.name"
126
+ read_only true
127
+ filterable true
128
+ end
129
+ field :furniture_item do
130
+ searchable "items.name"
131
+ sortable "items.name"
132
+ read_only true
133
+ filterable true
134
+ end
135
+ field :status do
136
+ pretty_value do
137
+ obj = bindings[:object]
138
+ wf = obj.workflows.last
139
+ status = []
140
+ status << (wf.stat rescue nil)
141
+ status << (wf.third_party.username rescue nil)
142
+ user = (wf.user.username rescue nil)
143
+
144
+ html = []
145
+ html << "<small><strong>#{obj.tiered_times}</strong></small>" unless obj.tiered_times.blank?
146
+ html << "<small>#{status.compact.join("/")}</small>" unless status.compact.blank?
147
+ html << "<small>#{user}</small>" unless user.blank?
148
+
149
+ html.join("<br/>").html_safe
150
+ end
151
+ end
152
+ # field :user do
153
+ # column_width 8
154
+ # end
155
+ # field :times
156
+ end
157
+ end
158
+
159
+ def readable_barcode
160
+ "#{chosen_furniture.readable_barcode}|#{furniture_item.item.code}|#{code.rjust(5, '0')}"
161
+ end
162
+
163
+ # def barcode
164
+ # "#{chosen_furniture.barcode}#{furniture_item.item.code}#{code.rjust(5, '0')}"
165
+ # end
166
+ #
167
+ # def barcode=(value)
168
+ # end
169
+
170
+ def title
171
+ # "#{furniture_item.item.name rescue nil} (#{readable_barcode rescue nil})"
172
+ furniture_item.item.name rescue "Undefined"
173
+ end
174
+
175
+ def name
176
+ "#{chosen_furniture.chosen_room.chosen_deck.commission.name rescue nil}: #{chosen_furniture.name rescue nil} -> #{title}"
177
+ end
178
+
179
+ private
180
+
181
+ def increment_code
182
+ next_code = (ChosenItem.order("chosen_items.code DESC").pluck(:code).compact.map(&:to_i).max.to_i + 1).to_s
183
+ # Rails.logger.debug "MAX CODE IS:#{max_code} Adding 1: #{(max_code + 1)}"
184
+ # self.barcode = "#{chosen_furniture.barcode}#{furniture_item.item.code}#{next_code.rjust(5, '0')}"
185
+ self.code = next_code
186
+ end
187
+ end