ecom_core 1.2.30 → 1.2.35

Sign up to get free protection for your applications and to get access to all the features.
Files changed (104) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/ecom/core/{project_crews_controller.rb → site_crews_controller.rb} +5 -4
  3. data/app/models/ecom/core/attendance_sheet.rb +19 -19
  4. data/app/models/ecom/core/available_unit_of_measurement.rb +10 -0
  5. data/app/models/ecom/core/crew.rb +14 -3
  6. data/app/models/ecom/core/crew_contract.rb +41 -1
  7. data/app/models/ecom/core/crew_contract_transaction.rb +29 -0
  8. data/app/models/ecom/core/crew_id_card.rb +36 -0
  9. data/app/models/ecom/core/crew_time.rb +11 -3
  10. data/app/models/ecom/core/dimension_element.rb +22 -0
  11. data/app/models/ecom/core/inspection_checklist.rb +6 -0
  12. data/app/models/ecom/core/job_card.rb +1 -1
  13. data/app/models/ecom/core/material.rb +6 -0
  14. data/app/models/ecom/core/material_identity.rb +21 -0
  15. data/app/models/ecom/core/material_item.rb +18 -0
  16. data/app/models/ecom/core/material_sub_type.rb +20 -0
  17. data/app/models/ecom/core/measurement_unit.rb +55 -0
  18. data/app/models/ecom/core/overtime_sheet.rb +26 -16
  19. data/app/models/ecom/core/payroll.rb +3 -3
  20. data/app/models/ecom/core/plan.rb +18 -0
  21. data/app/models/ecom/core/project.rb +0 -3
  22. data/app/models/ecom/core/project_template.rb +11 -0
  23. data/app/models/ecom/core/project_work_item_template.rb +9 -0
  24. data/app/models/ecom/core/schedule_setting.rb +8 -6
  25. data/app/models/ecom/core/{project_crew.rb → site.rb} +8 -4
  26. data/app/models/ecom/core/site_crew.rb +27 -0
  27. data/app/models/ecom/core/takeoff.rb +10 -0
  28. data/app/models/ecom/core/task.rb +32 -4
  29. data/app/models/ecom/core/task_inspection_checklist.rb +18 -0
  30. data/app/models/ecom/core/task_resource.rb +2 -0
  31. data/app/models/ecom/core/task_template.rb +22 -2
  32. data/app/models/ecom/core/task_template_inspection_checklist.rb +8 -0
  33. data/app/models/ecom/core/work_order.rb +26 -0
  34. data/app/models/ecom/core/work_package.rb +3 -0
  35. data/app/models/ecom/core/work_product.rb +3 -18
  36. data/app/models/ecom/core/work_product_template.rb +2 -2
  37. data/app/services/ecom/core/crew_contract_transaction_service.rb +89 -0
  38. data/app/services/ecom/core/site_crew_service.rb +44 -0
  39. data/app/uploaders/ecom/core/photo_uploader.rb +8 -1
  40. data/config/routes.rb +2 -2
  41. data/db/migrate/20191119012030_create_ecom_core_task_templates.rb +6 -1
  42. data/db/migrate/20191119013236_create_ecom_core_work_product_templates.rb +0 -15
  43. data/db/migrate/20191119021405_create_ecom_core_project_templates.rb +15 -0
  44. data/db/migrate/20191119034319_create_ecom_core_project_work_item_templates.rb +20 -0
  45. data/db/migrate/20191201145849_create_ecom_core_sites.rb +16 -0
  46. data/db/migrate/20191202222210_create_ecom_core_work_packages.rb +12 -0
  47. data/db/migrate/20191202235434_create_ecom_core_work_products.rb +2 -18
  48. data/db/migrate/{20191225100054_create_ecom_core_crews.rb → 20191207103729_create_ecom_core_crews.rb} +3 -3
  49. data/db/migrate/20191207103730_create_ecom_core_plans.rb +12 -0
  50. data/db/migrate/20191207103731_create_ecom_core_work_orders.rb +23 -0
  51. data/db/migrate/20191207103735_create_ecom_core_tasks.rb +23 -7
  52. data/db/migrate/20191225140433_create_ecom_core_attendance_sheets.rb +4 -4
  53. data/db/migrate/20200126081005_create_ecom_core_payrolls.rb +3 -3
  54. data/db/migrate/20200410090701_create_ecom_core_overtime_sheets.rb +4 -4
  55. data/db/migrate/20200616044231_create_ecom_core_material_sub_types.rb +14 -0
  56. data/db/migrate/20200616051902_create_ecom_core_material_identities.rb +17 -0
  57. data/db/migrate/20200618105233_create_ecom_core_material_items.rb +16 -0
  58. data/db/migrate/20200813165553_create_ecom_core_measurement_units.rb +14 -0
  59. data/db/migrate/20200813165555_create_ecom_core_available_unit_of_measurements.rb +16 -0
  60. data/db/migrate/20200814043632_create_ecom_core_takeoffs.rb +14 -0
  61. data/db/migrate/20200901085227_create_ecom_core_crew_contracts.rb +7 -1
  62. data/db/migrate/20200901134912_create_ecom_core_dimension_elements.rb +23 -0
  63. data/db/migrate/20200919085613_create_ecom_core_job_cards.rb +1 -0
  64. data/db/migrate/20201013072924_create_ecom_core_crew_contract_transactions.rb +16 -0
  65. data/db/migrate/20201013090609_create_ecom_core_site_crews.rb.rb +22 -0
  66. data/db/migrate/20201013094100_create_ecom_core_crew_id_cards.rb +16 -0
  67. data/db/migrate/20201113050953_create_ecom_core_task_inspection_checklists.rb +22 -0
  68. data/db/migrate/20201113094302_create_ecom_core_task_template_inspection_checklists.rb +17 -0
  69. data/lib/ecom/core/version.rb +1 -1
  70. data/spec/factories/ecom/core/attendance_sheet_entries.rb +1 -1
  71. data/spec/factories/ecom/core/attendance_sheets.rb +1 -1
  72. data/spec/factories/ecom/core/available_unit_of_measurements.rb +6 -0
  73. data/spec/factories/ecom/core/crew_contract_transactions.rb +8 -0
  74. data/spec/factories/ecom/core/crew_contracts.rb +12 -0
  75. data/spec/factories/ecom/core/crew_id_cards.rb +8 -0
  76. data/spec/factories/ecom/core/dimension_elements.rb +8 -0
  77. data/spec/factories/ecom/core/inspection_checklists.rb +5 -0
  78. data/spec/factories/ecom/core/maintenance_statuses.rb +1 -1
  79. data/spec/factories/ecom/core/material_identities.rb +6 -0
  80. data/spec/factories/ecom/core/material_items.rb +6 -0
  81. data/spec/factories/ecom/core/material_sub_types.rb +6 -0
  82. data/spec/factories/ecom/core/materials.rb +5 -0
  83. data/spec/factories/ecom/core/measurement_units.rb +16 -0
  84. data/spec/factories/ecom/core/overtime_sheets.rb +1 -1
  85. data/spec/factories/ecom/core/payrolls.rb +1 -1
  86. data/spec/factories/ecom/core/plans.rb +8 -0
  87. data/spec/factories/ecom/core/project_templates.rb +8 -0
  88. data/spec/factories/ecom/core/project_work_item_templates.rb +7 -0
  89. data/spec/factories/ecom/core/site_crews.rb +10 -0
  90. data/spec/factories/ecom/core/sites.rb +8 -0
  91. data/spec/factories/ecom/core/takeoffs.rb +6 -0
  92. data/spec/factories/ecom/core/task_inspection_checklists.rb +11 -0
  93. data/spec/factories/ecom/core/task_template_inspection_checklists.rb +7 -0
  94. data/spec/factories/ecom/core/task_templates.rb +11 -1
  95. data/spec/factories/ecom/core/tasks.rb +8 -3
  96. data/spec/factories/ecom/core/work_orders.rb +10 -0
  97. data/spec/factories/ecom/core/work_packages.rb +6 -0
  98. data/spec/factories/ecom/core/work_product_templates.rb +0 -1
  99. data/spec/factories/ecom/core/work_products.rb +1 -8
  100. metadata +75 -9
  101. data/app/services/ecom/core/project_crew_service.rb +0 -39
  102. data/db/migrate/20191225121850_create_ecom_core_project_crews.rb +0 -19
  103. data/db/migrate/20200922044959_add_costs_approved_to_job_card.rb +0 -5
  104. data/spec/factories/ecom/core/project_crews.rb +0 -9
@@ -1,31 +1,39 @@
1
1
  module Ecom
2
2
  module Core
3
3
  class OvertimeSheet < ApplicationRecord
4
- validates :date, :opened_at, presence: true, uniqueness: { scope: :project_id }
4
+ validates :date, :opened_at, presence: true, uniqueness: { scope: :site_id }
5
5
  validates :status, inclusion: StatusConstants::STATUSES
6
6
 
7
- belongs_to :project
7
+ belongs_to :site
8
8
 
9
9
  has_many :overtime_sheet_entries
10
10
  has_many :crew_overtimes, through: :overtime_sheet_entries
11
11
 
12
- scope :by_project, ->(id) { where(project_id: id) }
12
+ scope :by_site, ->(id) { where(site_id: id) }
13
13
  scope :by_date, ->(date) { where(date: date) }
14
14
  scope :by_status, ->(status) { where(status: status) }
15
15
  scope :by_date_between, ->(from, to) { where('date BETWEEN ? AND ?', from, to) }
16
- scope :open, ->(id) { where(status: StatusConstants::OPEN, project_id: id) }
17
- scope :submitted, ->(id) { where(status: StatusConstants::SUBMITTED, project_id: id) }
18
16
 
19
- def self.open_exists?(project_id)
20
- OvertimeSheet.open(project_id).exists?
17
+ def self.open_exists?(site_id)
18
+ OvertimeSheet
19
+ .by_site(site_id)
20
+ .by_status(StatusConstants::OPEN)
21
+ .exists?
21
22
  end
22
23
 
23
- def self.open_for_date_exists?(date, project_id)
24
- OvertimeSheet.open(project_id).where(date: date).exists?
24
+ def self.open_for_date_exists?(date, site_id)
25
+ OvertimeSheet
26
+ .by_site(site_id)
27
+ .by_status(StatusConstants::OPEN)
28
+ .by_date(date)
29
+ .exists?
25
30
  end
26
31
 
27
- def self.exists_for_date?(date, project_id)
28
- OvertimeSheet.by_project(project_id).by_date(date).exists?
32
+ def self.exists_for_date?(date, site_id)
33
+ OvertimeSheet
34
+ .by_site(site_id)
35
+ .by_date(date)
36
+ .exists?
29
37
  end
30
38
 
31
39
  # Overtime sheet should be created using the
@@ -33,16 +41,18 @@ module Ecom
33
41
  # check if there is an open overtime already,
34
42
  # and also that we have only one open overtime
35
43
  # sheet at a time.
36
- def self.create_new(date, project_id)
37
- if OvertimeSheet.exists_for_date?(date, project_id)
44
+ def self.create_new(date, site_id)
45
+ if OvertimeSheet.exists_for_date?(date, site_id)
38
46
  raise 'There is already an overtime sheet for the selected date.'
39
47
  end
40
48
 
41
- if OvertimeSheet.open_exists?(project_id)
42
- raise 'There is already an open overtime sheet. It has to be submitted before creating a new one.'
49
+ if OvertimeSheet.open_exists?(site_id)
50
+ open_overtime_sheet = OvertimeSheet.find_by(status: 'Open')
51
+ raise "There is already an open overtime sheet for #{open_overtime_sheet.date}.
52
+ It has to be submitted before creating a new one."
43
53
  end
44
54
 
45
- OvertimeSheet.create(date: date, opened_at: Time.now, status: StatusConstants::OPEN, project_id: project_id)
55
+ OvertimeSheet.create(date: date, opened_at: Time.now, status: StatusConstants::OPEN, site_id: site_id)
46
56
  end
47
57
 
48
58
  def submit
@@ -4,9 +4,9 @@ module Ecom
4
4
  validates :month, :year, presence: true
5
5
 
6
6
  has_many :payments, class_name: 'Ecom::Core::Payment'
7
- belongs_to :project
7
+ belongs_to :site
8
8
 
9
- scope :by_project, ->(id) { where(project_id: id) }
9
+ scope :by_site, ->(id) { where(site_id: id) }
10
10
  scope :by_month, ->(month) { where(month: month) }
11
11
  scope :by_year, ->(year) { where(year: year) }
12
12
 
@@ -17,7 +17,7 @@ module Ecom
17
17
  m = 1
18
18
  y += 1
19
19
  end
20
- Payroll.create(month: m, year: y, project_id: project_id)
20
+ Payroll.create(month: m, year: y, site_id: site_id)
21
21
  end
22
22
  end
23
23
  end
@@ -0,0 +1,18 @@
1
+ module Ecom
2
+ module Core
3
+ class Plan < ApplicationRecord
4
+ NEW = 'New'.freeze
5
+ READY_TO_START = 'Ready to start'.freeze
6
+ IN_PROGRESS = 'In Progress'.freeze
7
+ COMPLETED = 'Completed'.freeze
8
+
9
+ STATUSES = [NEW, READY_TO_START, IN_PROGRESS, COMPLETED].freeze
10
+
11
+ validates :name, :start_date, :end_date, :status, presence: true
12
+
13
+ validates :status, presence: true, inclusion: STATUSES
14
+
15
+ has_many :tasks
16
+ end
17
+ end
18
+ end
@@ -9,9 +9,6 @@ module Ecom
9
9
  belongs_to :currency
10
10
  belongs_to :company
11
11
 
12
- has_many :project_crews
13
- has_many :crews, through: :project_crews
14
-
15
12
  validates :name, :location, :contract_number, :date_contract_signed, :commencement_date, :completion_date,
16
13
  :contract_amount, :advance_payment, :retention, presence: true
17
14
  end
@@ -0,0 +1,11 @@
1
+ module Ecom
2
+ module Core
3
+ class ProjectTemplate < ApplicationRecord
4
+ belongs_to :task_template_type
5
+ has_many :project_work_item_templates
6
+
7
+ validates :code, :name, presence: true
8
+ validates_uniqueness_of :code
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,9 @@
1
+ module Ecom
2
+ module Core
3
+ class ProjectWorkItemTemplate < ApplicationRecord
4
+ belongs_to :task_template
5
+ belongs_to :work_product_template
6
+ belongs_to :project_template
7
+ end
8
+ end
9
+ end
@@ -1,9 +1,11 @@
1
- module Ecom::Core
2
- class ScheduleSetting < ApplicationRecord
3
- belongs_to :equipment
4
- belongs_to :maintenance_type
5
- belongs_to :schedule_unit
1
+ module Ecom
2
+ module Core
3
+ class ScheduleSetting < ApplicationRecord
4
+ belongs_to :equipment
5
+ belongs_to :maintenance_type
6
+ belongs_to :schedule_unit
6
7
 
7
- validates :value, presence: true
8
+ validates :value, presence: true
9
+ end
8
10
  end
9
11
  end
@@ -1,15 +1,19 @@
1
1
  module Ecom
2
2
  module Core
3
- class ProjectCrew < ApplicationRecord
3
+ class Site < ApplicationRecord
4
4
  ACTIVE = 'Active'.freeze
5
5
  INACTIVE = 'Inactive'.freeze
6
+
6
7
  STATUSES = [ACTIVE, INACTIVE].freeze
7
8
 
8
- belongs_to :project
9
- belongs_to :crew
9
+ validates :name, :project_id, :project, :address, :status, presence: true
10
10
 
11
- validates :start_date, :status, presence: true
12
11
  validates :status, inclusion: STATUSES
12
+
13
+ belongs_to :project
14
+
15
+ has_many :site_crews
16
+ has_many :crews, through: :site_crews
13
17
  end
14
18
  end
15
19
  end
@@ -0,0 +1,27 @@
1
+ module Ecom
2
+ module Core
3
+ class SiteCrew < ApplicationRecord
4
+ TEMPORARY_SITE_CREW = 'Temporary site crew'.freeze
5
+ PERMANENT_SITE_CREW = 'Permanent site crew'.freeze
6
+
7
+ SITE_CREW_TYPES = [TEMPORARY_SITE_CREW, PERMANENT_SITE_CREW].freeze
8
+
9
+ ACTIVE = 'Active'.freeze
10
+ INACTIVE = 'Inactive'.freeze
11
+ STATUSES = [ACTIVE, INACTIVE].freeze
12
+
13
+ validates :crew_id, :crew, :site_id, :site, :start_date, :site_crew_type, :status, presence: true
14
+
15
+ validates_uniqueness_of :site_id,
16
+ scope: :crew_id,
17
+ conditions: -> { where(status: 'Active') },
18
+ message: 'There can only be one record with status `Active` for a given site and crew'
19
+
20
+ validates :site_crew_type, inclusion: SITE_CREW_TYPES
21
+ validates :status, inclusion: STATUSES
22
+
23
+ belongs_to :crew
24
+ belongs_to :site
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,10 @@
1
+ module Ecom
2
+ module Core
3
+ class Takeoff < ApplicationRecord
4
+ validates :task_id, :takeoff_quantity, :task, presence: true
5
+ validates :takeoff_quantity, numericality: { greater_than: 0 }
6
+
7
+ belongs_to :task
8
+ end
9
+ end
10
+ end
@@ -5,24 +5,52 @@ module Ecom
5
5
 
6
6
  has_ancestry
7
7
 
8
+ NOT_INSPECTED = 'Not Inspected'.freeze
9
+ IN_PROGRESS = 'In Progress'.freeze
10
+ PASS = 'Pass'.freeze
11
+ FAIL = 'Fail'.freeze
12
+
13
+ INSPECTION_STATUSES = [NOT_INSPECTED, IN_PROGRESS, PASS, FAIL].freeze
14
+
8
15
  belongs_to :work_product
9
16
  belongs_to :task_template
10
17
  belongs_to :work_package, optional: true
18
+ belongs_to :work_order, optional: true
19
+ belongs_to :plan, optional: true
11
20
  belongs_to :performer, class_name: 'Ecom::Core::User', optional: true
12
- belongs_to :approver, class_name: 'Ecom::Core::User', optional: true
13
- belongs_to :supervisor, class_name: 'Ecom::Core::User', optional: true
14
- belongs_to :quality_controller, class_name: 'Ecom::Core::User', optional: true
21
+ belongs_to :client_consultant, class_name: 'Ecom::Core::User', optional: true
22
+ belongs_to :foreman, class_name: 'Ecom::Core::User', optional: true
23
+ belongs_to :inspector, class_name: 'Ecom::Core::User', optional: true
24
+ belongs_to :change_order_for, class_name: 'Ecom::Core::User', optional: true
15
25
 
16
- validates :code, :name, :status, :percent_completed, presence: true
26
+ has_many :task_resources
27
+ has_one :takeoff
28
+ has_one :change_order, foreign_key: :change_order_for_id, class_name: 'Ecom::Core::Task'
29
+
30
+ validates_with DateRangeValidator
31
+ validates :code, :name, :status, :inspection_status, :percent_completed, presence: true
17
32
  validates_numericality_of :percent_completed,
18
33
  only_integer: true,
19
34
  greater_than_or_equal_to: 0,
20
35
  less_than_or_equal_to: 100
36
+ validates :percentage_contribution,
37
+ numericality: {
38
+ greater_than_or_equal_to: 0,
39
+ less_than_or_equal_to: 100,
40
+ only_integer: true
41
+ },
42
+ allow_nil: true
43
+
44
+ validates_inclusion_of :inspection_status, in: INSPECTION_STATUSES
21
45
 
22
46
  scope :by_status, ->(status) { where(status: status) }
23
47
 
48
+ # State: planned -> The task has be planned for execution
49
+ # State: ready_to_start -> All resources for the task has been set and is ready to start
24
50
  aasm column: 'status' do
25
51
  state :new, initial: true
52
+ state :planned
53
+ state :ready_to_start
26
54
  state :in_progress
27
55
  state :submitted
28
56
  state :under_review
@@ -0,0 +1,18 @@
1
+ module Ecom
2
+ module Core
3
+ class TaskInspectionChecklist < ApplicationRecord
4
+ NOT_INSPECTED = 'Not Inspected'.freeze
5
+ IN_PROGRESS = 'In Progress'.freeze
6
+ PASS = 'Pass'.freeze
7
+ FAIL = 'Fail'.freeze
8
+
9
+ INSPECTION_STATUSES = [NOT_INSPECTED, IN_PROGRESS, PASS, FAIL].freeze
10
+
11
+ belongs_to :inspected_by, class_name: 'Ecom::Core::User'
12
+ belongs_to :task
13
+
14
+ validates :name, :status, presence: true
15
+ validates :status, inclusion: INSPECTION_STATUSES
16
+ end
17
+ end
18
+ end
@@ -1,6 +1,8 @@
1
1
  module Ecom
2
2
  module Core
3
3
  class TaskResource < ApplicationRecord
4
+ validates :task_id, :task, :resource_type_id, :resource_type, presence: true
5
+
4
6
  belongs_to :task
5
7
  belongs_to :resource_type
6
8
 
@@ -4,13 +4,26 @@ module Ecom
4
4
  has_ancestry
5
5
 
6
6
  belongs_to :task_template_type
7
- has_and_belongs_to_many :work_product_templates, join_table: 'ecom_core_task_templates_work_product_templates'
7
+ has_many :task_template_inspection_checklists
8
+ has_many :inspection_checklists, through: :task_template_inspection_checklists
9
+ has_many :project_work_item_templates
10
+ has_many :work_product_templates, through: :project_work_item_templates
8
11
  has_and_belongs_to_many :resource_types, join_table: 'ecom_core_task_templates_resource_types'
9
12
 
10
- validates :name, :code, presence: true
13
+ validates :name, :code, :takeoff_fields, :task_completion_detail, presence: true
11
14
  validates :code, uniqueness: true
15
+ validates :percentage_contribution,
16
+ numericality: {
17
+ greater_than_or_equal_to: 0,
18
+ less_than_or_equal_to: 100,
19
+ only_integer: true
20
+ },
21
+ allow_nil: true
22
+
12
23
  delegate(:name, to: :task_template_type, prefix: true)
13
24
 
25
+ validate :percentage_contribution_sum_validator
26
+
14
27
  def full_name
15
28
  parent_name = parent&.name
16
29
  return name unless parent_name
@@ -29,6 +42,13 @@ module Ecom
29
42
  def equipment_types
30
43
  resource_types.where(type: 'Ecom::Core::EquipmentType')
31
44
  end
45
+
46
+ def percentage_contribution_sum_validator
47
+ return if percentage_contribution.nil?
48
+
49
+ sum = siblings.sum(:percentage_contribution)
50
+ errors.add(:task, 'Sum of percentage contributions has to be 100') if sum > 100
51
+ end
32
52
  end
33
53
  end
34
54
  end
@@ -0,0 +1,8 @@
1
+ module Ecom
2
+ module Core
3
+ class TaskTemplateInspectionChecklist < ApplicationRecord
4
+ belongs_to :task_template
5
+ belongs_to :inspection_checklist
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,26 @@
1
+ module Ecom
2
+ module Core
3
+ class WorkOrder < ApplicationRecord
4
+ before_save :add_reference_number
5
+
6
+ NEW = 'New'.freeze
7
+ IN_PROGRESS = 'In Progress'.freeze
8
+ COMPLETED = 'Completed'.freeze
9
+
10
+ STATUSES = [NEW, IN_PROGRESS, COMPLETED].freeze
11
+
12
+ validates :name, :assigned_to_id, :generated_by_id, :status,
13
+ :start_date, :end_date, presence: true
14
+
15
+ validates :status, presence: true, inclusion: STATUSES
16
+
17
+ belongs_to :assigned_to, class_name: 'Ecom::Core::Crew'
18
+ belongs_to :generated_by, class_name: 'Ecom::Core::User'
19
+ has_many :tasks
20
+
21
+ def add_reference_number
22
+ self.reference_number = "WO-#{(Time.now.to_f * 1000).to_i}"
23
+ end
24
+ end
25
+ end
26
+ end
@@ -2,9 +2,12 @@ module Ecom
2
2
  module Core
3
3
  class WorkPackage < ApplicationRecord
4
4
  belongs_to :project
5
+ belongs_to :site_engineer, class_name: 'Ecom::Core::User', optional: true
6
+ belongs_to :project_manager, class_name: 'Ecom::Core::User', optional: true
5
7
 
6
8
  validates :code, :name, presence: true
7
9
  validates :code, uniqueness: true
10
+ validates :budget, numericality: true, unless: proc { budget.nil? }
8
11
 
9
12
  has_many :tasks
10
13
  end
@@ -15,29 +15,14 @@
15
15
  module Ecom
16
16
  module Core
17
17
  class WorkProduct < ApplicationRecord
18
- include AASM
19
-
20
- NEW = 'New'.freeze
21
- UNDER_CONSTRUCTION = 'Under Construction'.freeze
22
- COMPLETED = 'Completed'.freeze
23
-
24
- STATUSES = [NEW, UNDER_CONSTRUCTION, COMPLETED].freeze
25
-
26
18
  belongs_to :work_product_template
27
19
  belongs_to :project
28
20
  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
21
  has_many :tasks
22
+ has_many :dimension_elements
33
23
 
34
- validates :name, :design_reference_no, :status, :percent_completed, presence: true
35
- validates :design_reference_no, uniqueness: { scope: :project_id }
36
- validates :status, inclusion: STATUSES
37
- validates_numericality_of :percent_completed,
38
- only_integer: true,
39
- greater_than_or_equal_to: 0,
40
- less_than_or_equal_to: 100
24
+ validates :name, :design_reference, presence: true
25
+ validates :design_reference, uniqueness: { scope: :project_id }
41
26
  end
42
27
  end
43
28
  end