ecom_core 1.2.10 → 1.2.15

Sign up to get free protection for your applications and to get access to all the features.
Files changed (74) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/concerns/ecom/core/lookupable.rb +1 -2
  3. data/app/controllers/concerns/ecom/core/resource_typeable.rb +1 -1
  4. data/app/controllers/ecom/core/access_controller.rb +1 -2
  5. data/app/controllers/ecom/core/application_controller.rb +0 -1
  6. data/app/controllers/ecom/core/application_modules_controller.rb +1 -1
  7. data/app/controllers/ecom/core/menus_controller.rb +1 -1
  8. data/app/controllers/ecom/core/user_roles_controller.rb +1 -2
  9. data/app/controllers/ecom/core/users_controller.rb +1 -2
  10. data/app/models/ecom/core/attendance_sheet.rb +2 -1
  11. data/app/models/ecom/core/booked_item.rb +12 -0
  12. data/app/models/ecom/core/booking.rb +16 -0
  13. data/app/models/ecom/core/component_type.rb +6 -0
  14. data/app/models/ecom/core/country.rb +6 -0
  15. data/app/models/ecom/core/crew.rb +4 -0
  16. data/app/models/ecom/core/crew_time.rb +1 -1
  17. data/app/models/ecom/core/equipment_component.rb +1 -0
  18. data/app/models/ecom/core/equipment_item.rb +15 -2
  19. data/app/models/ecom/core/equipment_location.rb +2 -1
  20. data/app/models/ecom/core/equipment_request.rb +19 -0
  21. data/app/models/ecom/core/payment.rb +1 -1
  22. data/app/models/ecom/core/product_group.rb +7 -0
  23. data/app/models/ecom/core/requested_item.rb +13 -0
  24. data/app/models/ecom/core/task.rb +41 -2
  25. data/app/models/ecom/core/task_resource.rb +10 -0
  26. data/app/models/ecom/core/task_template.rb +1 -1
  27. data/app/models/ecom/core/work_package.rb +10 -0
  28. data/app/models/ecom/core/work_product.rb +18 -46
  29. data/app/models/ecom/core/work_product_template.rb +1 -1
  30. data/app/serializers/ecom/core/lookup_serializer.rb +1 -1
  31. data/app/serializers/ecom/core/resource_type_serializer.rb +1 -1
  32. data/app/serializers/ecom/core/user_role_serializer.rb +1 -1
  33. data/app/services/ecom/core/menu_service.rb +1 -3
  34. data/app/services/ecom/core/token_auth_service.rb +2 -1
  35. data/app/validators/ecom/core/date_range_validator.rb +11 -0
  36. data/db/migrate/20191119013236_create_ecom_core_work_product_templates.rb +10 -3
  37. data/db/migrate/20191201251015_create_ecom_core_product_groups.rb +13 -0
  38. data/db/migrate/20191202222210_create_ecom_core_work_packages.rb +13 -0
  39. data/db/migrate/20191202235434_create_ecom_core_work_products.rb +7 -13
  40. data/db/migrate/20191207103735_create_ecom_core_tasks.rb +45 -0
  41. data/db/migrate/20191210724614_create_ecom_core_task_resources.rb +18 -0
  42. data/db/migrate/20200315152143_create_ecom_core_equipment.rb +1 -0
  43. data/db/migrate/20200315153640_create_ecom_core_equipment_items.rb +6 -1
  44. data/db/migrate/20200316125323_create_ecom_core_equipment_components.rb +5 -0
  45. data/db/migrate/20200601104719_create_ecom_core_equipment_requests.rb +18 -0
  46. data/db/migrate/20200602130247_create_ecom_core_requested_items.rb +26 -0
  47. data/db/migrate/20200602830603_create_ecom_core_bookings.rb +18 -0
  48. data/db/migrate/20200603115317_create_ecom_core_booked_items.rb +23 -0
  49. data/lib/ecom/core/engine.rb +0 -1
  50. data/lib/ecom/core/version.rb +1 -1
  51. data/spec/factories/ecom/core/application_modules.rb +1 -1
  52. data/spec/factories/ecom/core/booked_items.rb +10 -0
  53. data/spec/factories/ecom/core/bookings.rb +8 -0
  54. data/spec/factories/ecom/core/companies.rb +1 -1
  55. data/spec/factories/ecom/core/component_types.rb +5 -0
  56. data/spec/factories/ecom/core/countries.rb +5 -0
  57. data/spec/factories/ecom/core/equipment.rb +1 -0
  58. data/spec/factories/ecom/core/equipment_components.rb +2 -0
  59. data/spec/factories/ecom/core/equipment_items.rb +3 -1
  60. data/spec/factories/ecom/core/equipment_requests.rb +8 -0
  61. data/spec/factories/ecom/core/product_groups.rb +6 -0
  62. data/spec/factories/ecom/core/requested_items.rb +13 -0
  63. data/spec/factories/ecom/core/resource_types.rb +1 -1
  64. data/spec/factories/ecom/core/task_resources.rb +8 -0
  65. data/spec/factories/ecom/core/task_template_types.rb +1 -1
  66. data/spec/factories/ecom/core/task_templates.rb +1 -8
  67. data/spec/factories/ecom/core/tasks.rb +12 -3
  68. data/spec/factories/ecom/core/users.rb +1 -1
  69. data/spec/factories/ecom/core/work_component_templates.rb +1 -1
  70. data/spec/factories/ecom/core/work_packages.rb +9 -0
  71. data/spec/factories/ecom/core/work_product_templates.rb +1 -2
  72. data/spec/factories/ecom/core/work_products.rb +3 -6
  73. metadata +29 -3
  74. data/db/migrate/20191202103735_create_ecom_core_tasks.rb +0 -20
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2de520c3c443ad4a66801803d93805335bc40375187899958bbb448c7e15d38e
4
- data.tar.gz: b9f4f9977b97175fc0cb2ee3bc46e50a8b136ad9ace5410eb35d134a3da2f813
3
+ metadata.gz: 6e47a28bd7b3ce16d86c8ae18b5ff906bfba496c0a862dc97c41babd5760ea9e
4
+ data.tar.gz: '09dd7a50a6ac74286a82557aa1561c308a2ac295b75a3472fbe6d4af583bce22'
5
5
  SHA512:
6
- metadata.gz: c331269793e3eb5ff70c2d0e7061ca5d8aa9c8260e26dbe28e854e518b3a6448845e587b9b5d85ea3f2c94cb5afe7a92e59feaa37fb1a7d87be882d6682b8f6d
7
- data.tar.gz: 38912a987b162fa8739458f37d2161e33f0064cc3bf953028dae39bd478edd4df6d8fd5d332a9e078deaa87122d66b0a755a26b50e82d006a5a8024543220297
6
+ metadata.gz: a1d13e668d8382fe3a87d8386df80300488c09785b7357e7e33a061a058765abbab8ff84d798e49a065ac44c8708adebe68a5423b5387b702f8919da565871e4
7
+ data.tar.gz: e377ee5714e4e21c3e73bef63bb1aeec0e7621215eba0bfd81c8fd804974cb1e6b72ee1fbfd53cc746e465cf988c254dc89d2413a5ae47a8fa6e755851bc0d28
@@ -29,7 +29,6 @@ module Ecom
29
29
  end
30
30
  end
31
31
 
32
-
33
32
  private
34
33
 
35
34
  def set_clazz
@@ -41,4 +40,4 @@ module Ecom
41
40
  end
42
41
  end
43
42
  end
44
- end
43
+ end
@@ -40,4 +40,4 @@ module Ecom
40
40
  end
41
41
  end
42
42
  end
43
- end
43
+ end
@@ -34,7 +34,6 @@ module Ecom
34
34
  def auth_params
35
35
  params.require(:auth).permit(:email, :password)
36
36
  end
37
-
38
37
  end
39
38
  end
40
- end
39
+ end
@@ -14,7 +14,6 @@ module Ecom
14
14
  @current_user ||= user if user
15
15
  end
16
16
 
17
-
18
17
  private
19
18
 
20
19
  def authenticate
@@ -30,4 +30,4 @@ module Ecom
30
30
  end
31
31
  end
32
32
  end
33
- end
33
+ end
@@ -7,4 +7,4 @@ module Ecom
7
7
  end
8
8
  end
9
9
  end
10
- end
10
+ end
@@ -25,7 +25,6 @@ module Ecom
25
25
  end
26
26
  end
27
27
 
28
-
29
28
  private
30
29
 
31
30
  def set_user_role
@@ -37,4 +36,4 @@ module Ecom
37
36
  end
38
37
  end
39
38
  end
40
- end
39
+ end
@@ -28,7 +28,6 @@ module Ecom
28
28
  end
29
29
  end
30
30
 
31
-
32
31
  private
33
32
 
34
33
  def set_user
@@ -40,4 +39,4 @@ module Ecom
40
39
  end
41
40
  end
42
41
  end
43
- end
42
+ end
@@ -52,7 +52,8 @@ module Ecom
52
52
  raise 'There is an open attendance sheet which needs to be submitted before creating a new one.'
53
53
  end
54
54
 
55
- AttendanceSheet.create(date: Date.today, opened_at: Time.now, status: StatusConstants::OPEN, project_id: project_id)
55
+ AttendanceSheet.create(date: Date.today, opened_at: Time.now, status: StatusConstants::OPEN,
56
+ project_id: project_id)
56
57
  end
57
58
 
58
59
  def self.submit_current(project_id)
@@ -0,0 +1,12 @@
1
+ module Ecom
2
+ module Core
3
+ class BookedItem < ApplicationRecord
4
+ belongs_to :booking
5
+ belongs_to :requested_item
6
+ belongs_to :equipment_item
7
+
8
+ validates :start_date, :end_date, presence: true
9
+ validates_with DateRangeValidator
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,16 @@
1
+ module Ecom
2
+ module Core
3
+ class Booking < ApplicationRecord
4
+ APPROVED = 'Approved'.freeze
5
+ UNAPPROVED = 'Unapproved'.freeze
6
+
7
+ STATUSES = [APPROVED, UNAPPROVED].freeze
8
+
9
+ belongs_to :equipment_request
10
+ belongs_to :booked_by, class_name: 'Ecom::Core::User'
11
+ has_many :booked_items
12
+
13
+ validates :status, presence: true, inclusion: STATUSES
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,6 @@
1
+ module Ecom
2
+ module Core
3
+ class ComponentType < Lookup
4
+ end
5
+ end
6
+ end
@@ -0,0 +1,6 @@
1
+ module Ecom
2
+ module Core
3
+ class Country < Lookup
4
+ end
5
+ end
6
+ end
@@ -14,6 +14,10 @@ module Ecom
14
14
  validates :name, :address, :qualification, :employment, :wage, :wage_in_words, presence: true
15
15
  validates :employment, inclusion: EMPLOYMENT_TYPES
16
16
 
17
+ scope :by_active, ->(active) { where(active: active) }
18
+ scope :by_qualification, ->(qualification) { where(qualification: qualification) }
19
+ scope :by_sub_contracted, ->(sub_contracted) { where(sub_contracted: sub_contracted) }
20
+
17
21
  def set_employment_date
18
22
  self.employment_date = Date.today
19
23
  end
@@ -9,7 +9,7 @@ module Ecom
9
9
  TIME_RANGE = {
10
10
  MORNING => { start: Time.zone.parse('5:00 AM'), end: Time.zone.parse('9:00 AM') },
11
11
  AFTERNOON => { start: Time.zone.parse('10:00 AM'), end: Time.zone.parse('2:00 PM') },
12
- BOTH => {start: Time.zone.parse('5:00 AM'), end: Time.zone.parse('2:00 PM')}
12
+ BOTH => { start: Time.zone.parse('5:00 AM'), end: Time.zone.parse('2:00 PM') }
13
13
  }.freeze
14
14
 
15
15
  belongs_to :attendance_sheet_entry
@@ -2,6 +2,7 @@ module Ecom
2
2
  module Core
3
3
  class EquipmentComponent < ApplicationRecord
4
4
  belongs_to :equipment_item
5
+ belongs_to :component_type
5
6
 
6
7
  validates :name, presence: true
7
8
  end
@@ -1,13 +1,26 @@
1
1
  module Ecom
2
2
  module Core
3
3
  class EquipmentItem < ApplicationRecord
4
- READY = 'Ready'
5
- UNDER_MAINTENANCE = 'Under Maintenance'
4
+ # Equipment Statuses
5
+ READY = 'Ready'.freeze
6
+ UNDER_MAINTENANCE = 'Under Maintenance'.freeze
7
+ EQUIPMENT_STATUSES = [READY, UNDER_MAINTENANCE].freeze
8
+
9
+ # Duty Statuses
10
+ AVAILABLE = 'Available'.freeze
11
+ BOOKED = 'Booked'.freeze
12
+ ON_DUTY = 'On Duty'.freeze
13
+ DUTY_STATUSES = [AVAILABLE, BOOKED, ON_DUTY].freeze
6
14
 
7
15
  belongs_to :equipment
16
+ belongs_to :country
8
17
  belongs_to :current_location, class_name: 'Ecom::Core::EquipmentLocation'
18
+ has_many :equipment_components
9
19
 
10
20
  validates :name, :status, :serial_number, :purchase_date, :purchase_price, presence: true
21
+ validates :status, inclusion: EQUIPMENT_STATUSES
22
+ validates :duty_status, inclusion: DUTY_STATUSES
23
+
11
24
  validates :serial_number, uniqueness: true
12
25
 
13
26
  def self.search(param)
@@ -18,7 +18,8 @@ module Ecom
18
18
  joins(:location_type).where(
19
19
  'ecom_core_lookups.name = ? AND ecom_core_lookups.type = ?',
20
20
  LocationType::STORE,
21
- Ecom::Core::LocationType)
21
+ Ecom::Core::LocationType
22
+ )
22
23
  }
23
24
  end
24
25
  end
@@ -0,0 +1,19 @@
1
+ module Ecom
2
+ module Core
3
+ class EquipmentRequest < ApplicationRecord
4
+ DRAFT = 'Draft'.freeze
5
+ UNDER_REVIEW = 'Under Review'.freeze
6
+ APPROVED = 'Approved'.freeze
7
+ REJECTED = 'Rejected'.freeze
8
+
9
+ STATUSES = [DRAFT, UNDER_REVIEW, APPROVED, REJECTED].freeze
10
+ belongs_to :project
11
+ belongs_to :requested_by, class_name: 'Ecom::Core::User'
12
+ has_one :booking
13
+
14
+ validates :status, presence: true, inclusion: STATUSES
15
+
16
+ scope :by_status, ->(status) { where(status: status) }
17
+ end
18
+ end
19
+ end
@@ -17,4 +17,4 @@ module Ecom
17
17
  end
18
18
  end
19
19
  end
20
- end
20
+ end
@@ -0,0 +1,7 @@
1
+ module Ecom::Core
2
+ class ProductGroup < ApplicationRecord
3
+ belongs_to :project
4
+
5
+ validates :name, presence: true, uniqueness: true
6
+ end
7
+ end
@@ -0,0 +1,13 @@
1
+ module Ecom
2
+ module Core
3
+ class RequestedItem < ApplicationRecord
4
+ belongs_to :equipment_request
5
+ belongs_to :equipment
6
+ belongs_to :country, optional: true
7
+
8
+ validates :start_date, :end_date, :quantity, presence: true
9
+ validates :quantity, numericality: { only_integer: true, greater_than: 0 }
10
+ validates_with DateRangeValidator
11
+ end
12
+ end
13
+ end
@@ -1,10 +1,49 @@
1
1
  module Ecom
2
2
  module Core
3
3
  class Task < ApplicationRecord
4
- belongs_to :project
4
+ include AASM
5
+
6
+ belongs_to :work_product
5
7
  belongs_to :task_template
8
+ belongs_to :work_package, optional: true
9
+ belongs_to :performer, class_name: 'Ecom::Core::User', optional: true
10
+ belongs_to :approver, class_name: 'Ecom::Core::User', optional: true
11
+ belongs_to :supervisor, class_name: 'Ecom::Core::User', optional: true
12
+ belongs_to :quality_controller, class_name: 'Ecom::Core::User', optional: true
13
+
14
+ validates :code, :name, :status, :percent_completed, presence: true
15
+ validates_numericality_of :percent_completed,
16
+ only_integer: true,
17
+ greater_than_or_equal_to: 0,
18
+ less_than_or_equal_to: 100
19
+
20
+ aasm column: 'status' do
21
+ state :new, initial: true
22
+ state :in_progress
23
+ state :submitted
24
+ state :under_review
25
+ state :completed
26
+
27
+ event :start do
28
+ transitions from: :new, to: :in_progress
29
+ end
30
+
31
+ event :submit do
32
+ transitions from: :in_progress, to: :submitted
33
+ end
34
+
35
+ event :review do
36
+ transitions from: :submitted, to: :under_review
37
+ end
38
+
39
+ event :complete do
40
+ transitions from: %i[submitted under_review], to: :completed
41
+ end
6
42
 
7
- validates :code, :name, presence: true
43
+ event :rework do
44
+ transitions from: :under_review, to: :in_progress
45
+ end
46
+ end
8
47
  end
9
48
  end
10
49
  end
@@ -0,0 +1,10 @@
1
+ module Ecom
2
+ module Core
3
+ class TaskResource < ApplicationRecord
4
+ belongs_to :task
5
+ belongs_to :resource_type
6
+
7
+ validates :amount, presence: true, numericality: { greater_than: 0 }
8
+ end
9
+ end
10
+ end
@@ -4,7 +4,7 @@ module Ecom
4
4
  has_ancestry
5
5
 
6
6
  belongs_to :task_template_type
7
- has_one :work_product_template
7
+ has_and_belongs_to_many :work_product_templates, join_table: 'ecom_core_task_templates_work_product_templates'
8
8
  has_and_belongs_to_many :resource_types, join_table: 'ecom_core_task_templates_resource_types'
9
9
 
10
10
  validates :name, :code, presence: true
@@ -0,0 +1,10 @@
1
+ module Ecom
2
+ module Core
3
+ class WorkPackage < ApplicationRecord
4
+ validates :code, :name, presence: true
5
+ validates :code, uniqueness: true
6
+
7
+ has_many :tasks
8
+ end
9
+ end
10
+ end
@@ -12,59 +12,31 @@
12
12
  # way as chart of accounts to identify parent and child relationships. Even then,
13
13
  # there needs to be a well defined coding scheme developed before using the column
14
14
  # field.
15
- #
16
15
  module Ecom
17
16
  module Core
18
17
  class WorkProduct < ApplicationRecord
19
18
  include AASM
20
19
 
21
- belongs_to :work_product_template
22
- belongs_to :task
23
- belongs_to :project
24
- belongs_to :performer, class_name: 'Ecom::Core::User'
25
- belongs_to :approver, class_name: 'Ecom::Core::User'
26
- belongs_to :supervisor, class_name: 'Ecom::Core::User'
27
- belongs_to :quality_controller, class_name: 'Ecom::Core::User'
28
-
29
- validates :name, presence: true
30
- validates :design_reference_no, uniqueness: true
31
-
32
- aasm column: 'task_status' do
33
- state :new, initial: true
34
- state :in_progress
35
- state :submitted
36
- state :under_review
37
- state :completed
38
-
39
- event :start do
40
- transitions from: :new, to: :in_progress
41
- end
42
-
43
- event :submit do
44
- transitions from: :in_progress, to: :submitted
45
- end
20
+ NEW = 'New'.freeze
21
+ UNDER_CONSTRUCTION = 'Under Construction'.freeze
22
+ COMPLETED = 'Completed'.freeze
46
23
 
47
- event :review do
48
- transitions from: :submitted, to: :under_review
49
- end
24
+ STATUSES = [NEW, UNDER_CONSTRUCTION, COMPLETED].freeze
50
25
 
51
- event :complete do
52
- transitions from: %i[submitted under_review], to: :completed
53
- end
54
-
55
- event :rework do
56
- transitions from: :under_review, to: :in_progress
57
- end
58
- end
59
-
60
- aasm column: 'assignment_status' do
61
- state :unassigned, initial: true
62
- state :assigned
63
-
64
- event :assign do
65
- transitions from: :unassigned, to: :assigned
66
- end
67
- end
26
+ belongs_to :work_product_template
27
+ belongs_to :project
28
+ belongs_to :product_group, optional: true
29
+ belongs_to :approver, class_name: 'Ecom::Core::User', optional: true
30
+ belongs_to :supervisor, class_name: 'Ecom::Core::User', optional: true
31
+ belongs_to :quality_controller, class_name: 'Ecom::Core::User', optional: true
32
+
33
+ validates :name, :design_reference_no, :status, :percent_completed, presence: true
34
+ validates :design_reference_no, uniqueness: { scope: :project_id }
35
+ validates :status, inclusion: STATUSES
36
+ validates_numericality_of :percent_completed,
37
+ only_integer: true,
38
+ greater_than_or_equal_to: 0,
39
+ less_than_or_equal_to: 100
68
40
  end
69
41
  end
70
42
  end
@@ -2,7 +2,7 @@ module Ecom
2
2
  module Core
3
3
  class WorkProductTemplate < ApplicationRecord
4
4
  validates :code, :name, presence: true, uniqueness: true
5
- belongs_to :task_template
5
+ has_and_belongs_to_many :task_templates
6
6
  has_many :product_types
7
7
 
8
8
  scope :filtered_by_template_type, lambda { |id|