mobilart_models 1.2.14

Sign up to get free protection for your applications and to get access to all the features.
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