ecom_core 1.2.35 → 1.3.3

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 (54) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/ecom/core/unit_costs_controller.rb +29 -0
  3. data/app/models/ecom/core/crew.rb +1 -0
  4. data/app/models/ecom/core/crew_contract.rb +1 -1
  5. data/app/models/ecom/core/lookahead_plan.rb +41 -0
  6. data/app/models/ecom/core/lookahead_plan_history.rb +16 -0
  7. data/app/models/ecom/core/lookahead_plan_review_time.rb +29 -0
  8. data/app/models/ecom/core/lookahead_plan_task_progress.rb +22 -0
  9. data/app/models/ecom/core/measurement_unit.rb +4 -14
  10. data/app/models/ecom/core/project_template.rb +2 -0
  11. data/app/models/ecom/core/resource_requisition.rb +21 -0
  12. data/app/models/ecom/core/resource_requisition_item.rb +45 -0
  13. data/app/models/ecom/core/site_crew.rb +1 -1
  14. data/app/models/ecom/core/stakeholder.rb +1 -1
  15. data/app/models/ecom/core/task.rb +0 -4
  16. data/app/models/ecom/core/task_attachment.rb +11 -0
  17. data/app/models/ecom/core/task_template.rb +1 -0
  18. data/app/models/ecom/core/unit_cost.rb +27 -0
  19. data/app/models/ecom/core/unit_of_measure.rb +8 -0
  20. data/app/models/ecom/core/work_item_resource_requirement_template.rb +18 -0
  21. data/app/serializers/ecom/core/unit_cost_serializer.rb +21 -0
  22. data/app/services/ecom/core/menu_service.rb +2 -2
  23. data/app/uploaders/ecom/core/photo_uploader.rb +5 -1
  24. data/app/uploaders/ecom/core/task_attachment_uploader.rb +11 -0
  25. data/config/initializers/carrierwave.rb +8 -0
  26. data/config/routes.rb +2 -0
  27. data/db/migrate/20191118052213_create_ecom_core_unit_of_measures.rb +11 -0
  28. data/db/migrate/20191207103730_create_ecom_core_lookahead_plans.rb +19 -0
  29. data/db/migrate/20191207103735_create_ecom_core_tasks.rb +1 -4
  30. data/db/migrate/20201121064916_create_ecom_core_unit_costs.rb +30 -0
  31. data/db/migrate/20201122123227_create_ecom_core_lookahead_plan_backlogs.rb +18 -0
  32. data/db/migrate/20201122170645_create_ecom_core_lookahead_plan_histories.rb +21 -0
  33. data/db/migrate/20201122170724_create_ecom_core_lookahead_plan_task_progresses.rb +21 -0
  34. data/db/migrate/20201123134917_create_ecom_core_task_attachments.rb +15 -0
  35. data/db/migrate/20201124171642_create_ecom_core_lookahead_plan_review_times.rb +17 -0
  36. data/db/migrate/20201125191158_create_ecom_core_work_item_resource_requirement_templates.rb +31 -0
  37. data/db/migrate/20201126191334_create_ecom_core_resource_requisitions.rb +23 -0
  38. data/db/migrate/20201126191349_create_ecom_core_resource_requisition_items.rb +33 -0
  39. data/lib/ecom/core/version.rb +1 -1
  40. data/spec/factories/ecom/core/lookahead_plan_histories.rb +9 -0
  41. data/spec/factories/ecom/core/lookahead_plan_review_times.rb +8 -0
  42. data/spec/factories/ecom/core/lookahead_plan_task_progresses.rb +9 -0
  43. data/spec/factories/ecom/core/lookahead_plans.rb +10 -0
  44. data/spec/factories/ecom/core/resource_requisition_items.rb +12 -0
  45. data/spec/factories/ecom/core/resource_requisitions.rb +9 -0
  46. data/spec/factories/ecom/core/task_attachments.rb +8 -0
  47. data/spec/factories/ecom/core/tasks.rb +1 -0
  48. data/spec/factories/ecom/core/unit_costs.rb +13 -0
  49. data/spec/factories/ecom/core/unit_of_measures.rb +7 -0
  50. data/spec/factories/ecom/core/work_item_resource_requirement_templates.rb +10 -0
  51. metadata +51 -5
  52. data/app/models/ecom/core/plan.rb +0 -18
  53. data/db/migrate/20191207103730_create_ecom_core_plans.rb +0 -12
  54. data/spec/factories/ecom/core/plans.rb +0 -8
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b43b8dd7f97b9f42d8291e7de02613863b54d79062ab12079792eaabfcdcc78a
4
- data.tar.gz: 35e01c0eecc8d2ee6d11599f834cd2cb5dbfcdb18a90884bf88401fe18359b8e
3
+ metadata.gz: f471cd5b5bddb2156f3edbd091a53fff200ac09e374d465201dd4fa930bbc384
4
+ data.tar.gz: 5b8bb54ba78c861e284f85bcd9c183e5213559005669245483aea63b4ddf64c3
5
5
  SHA512:
6
- metadata.gz: '0428fe3fac34831c9ab94b28f4a7819dee36fd608f0d2534249b06278918e8e87313b417279a25328061500833dcf2e281fb43ef8add4b463e824bdac61c3958'
7
- data.tar.gz: 673cf08cc11e5f3ddc8d8ddef5f3da3adb17292032b8e306deacf4bc326080a5da3ea8c666d71b8014a4b91e690a1267c4f18d920cf45133f864910ccac2d7aa
6
+ metadata.gz: ed6a04e00cf9c858ee3a9366c297f5e989bdf3bb9e0d18e6ca0c905945995a03c6312f2549b4ab7f2f5cbaefd6994933d7c05d27462e2efece7a5a922ed66c74
7
+ data.tar.gz: c6e0dc807e852c9ee55ab645422c2f51bf17340c7196e1665dbc24cc3081771ad2791d14cc08de64fe226561da70d934b1177fc2ea38c30ccb523264f3e1d325
@@ -0,0 +1,29 @@
1
+ module Ecom
2
+ module Core
3
+ class UnitCostsController < ApplicationController
4
+ before_action :set_service, only: %i[update]
5
+
6
+ def index
7
+ unit_costs = UnitCost.where(active: true)
8
+ serialized = ActiveModelSerializers::SerializableResource.new(unit_costs)
9
+ render json: { success: true, data: serialized }
10
+ end
11
+
12
+ def create
13
+ unit_cost = UnitCost.new(unit_cost_params)
14
+ if unit_cost.save
15
+ render json: unit_cost, status: :created
16
+ else
17
+ render json: { success: false, errors: unit_cost.errors }, status: :unprocessable_entity
18
+ end
19
+ end
20
+
21
+ private
22
+
23
+ def unit_cost_params
24
+ params.require(:unit_cost).permit(:resource_type_id, :quantity, :measurement_unit_id,
25
+ :price, :currency_id, :utilization_factor, :effective_date, :set_by_id)
26
+ end
27
+ end
28
+ end
29
+ end
@@ -20,6 +20,7 @@ module Ecom
20
20
  has_many :site_crews
21
21
  has_many :sites, through: :site_crews
22
22
  has_many :crew_id_cards
23
+ has_many :crew_contracts
23
24
 
24
25
  scope :by_active, ->(active) { where(active: active) }
25
26
  scope :by_qualification, ->(qualification) { where(qualification: qualification) }
@@ -14,7 +14,7 @@ module Ecom
14
14
  validates :wage, presence: true, numericality: { greater_than: 0 }
15
15
 
16
16
  validates_uniqueness_of :crew_id,
17
- conditions: -> { where(status: :in_effect) },
17
+ if: -> { status == 'in_effect' },
18
18
  message: 'There can only be one contract' \
19
19
  ' with status `In effect` for a given crew at a time'
20
20
 
@@ -0,0 +1,41 @@
1
+ module Ecom
2
+ module Core
3
+ class LookaheadPlan < ApplicationRecord
4
+ include AASM
5
+
6
+ belongs_to :prepared_by, class_name: 'Ecom::Core::User'
7
+ has_many :lookahead_plan_review_times
8
+ has_many :lookahead_plan_histories
9
+ has_and_belongs_to_many :tasks, join_table: 'ecom_core_lookahead_plan_backlogs'
10
+
11
+ validates :name, :start_date, :end_date, :status,
12
+ :prepared_by_id, :prepared_by, presence: true
13
+
14
+ validates :revision_number, numericality: { greater_than_or_equal_to: 0 }
15
+ validates :lead_time, presence: true, numericality: { greater_than_or_equal_to: 1 }
16
+
17
+ aasm column: 'status' do
18
+ state :new, initial: true
19
+ state :in_progress
20
+ state :in_review
21
+ state :completed
22
+
23
+ event :start do
24
+ transitions from: :new, to: :in_progress, guard: -> { status == 'new' }
25
+ end
26
+
27
+ event :review do
28
+ transitions from: :in_progress, to: :in_review, guard: -> { status == 'in_progress' }
29
+ end
30
+
31
+ event :continue do
32
+ transitions from: :in_review, to: :in_progress, guard: -> { status == 'in_review' }
33
+ end
34
+
35
+ event :complete do
36
+ transitions from: :in_review, to: :completed, guard: -> { status == 'in_review' }
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,16 @@
1
+ module Ecom
2
+ module Core
3
+ class LookaheadPlanHistory < ApplicationRecord
4
+ belongs_to :lookahead_plan
5
+ belongs_to :task
6
+
7
+ validates_with DateRangeValidator
8
+
9
+ validates :lookahead_plan_id, :lookahead_plan, :task_id, :task, :start_date, :end_date,
10
+ :lookahead_plan_revision_number, presence: true
11
+
12
+ validates_numericality_of :lookahead_plan_revision_number,
13
+ greater_than_or_equal_to: 0
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,29 @@
1
+ module Ecom
2
+ module Core
3
+ class LookaheadPlanReviewTime < ApplicationRecord
4
+ include AASM
5
+
6
+ belongs_to :lookahead_plan
7
+
8
+ validates :lookahead_plan_id, :lookahead_plan,
9
+ :lookahead_plan_revision_number, :review_time, :status, presence: true
10
+
11
+ validates_numericality_of :lookahead_plan_revision_number,
12
+ greater_than_or_equal_to: 0
13
+
14
+ aasm column: 'status' do
15
+ state :awaiting, initial: true
16
+ state :attended
17
+ state :cancelled
18
+
19
+ event :attend do
20
+ transitions from: :awaiting, to: :attended, guard: -> { status == 'awaiting' }
21
+ end
22
+
23
+ event :cancel do
24
+ transitions from: :awaiting, to: :cancelled, guard: -> { status == 'awaiting' }
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,22 @@
1
+ module Ecom
2
+ module Core
3
+ class LookaheadPlanTaskProgress < ApplicationRecord
4
+ belongs_to :lookahead_plan
5
+ belongs_to :task
6
+
7
+ validates :lookahead_plan_id, :lookahead_plan, :task_id, :task, :started_on, :ended_on,
8
+ :lookahead_plan_revision_number, presence: true
9
+
10
+ validates_numericality_of :lookahead_plan_revision_number,
11
+ greater_than_or_equal_to: 0
12
+
13
+ validate :date_range_validator
14
+
15
+ def date_range_validator
16
+ return unless started_on && ended_on && started_on > ended_on
17
+
18
+ errors.add(:base, 'Ended on cannot be before started on')
19
+ end
20
+ end
21
+ end
22
+ end
@@ -28,7 +28,10 @@ module Ecom
28
28
  validates :physical_quantity, inclusion: PHYSICAL_QUANTITIES
29
29
 
30
30
  validate :si_unit_with_conversion_factor
31
- validate :si_unit_system_of_measurement_and_physical_quantity
31
+ validates_uniqueness_of :is_si_unit, scope: %i[physical_quantity system_of_measurement],
32
+ if: -> { is_si_unit == true },
33
+ message: 'There exist an si unit of measurement for the '\
34
+ 'given physical quantity and system of measurement'
32
35
 
33
36
  def si_unit_with_conversion_factor
34
37
  if is_si_unit && conversion_factor != 1
@@ -37,19 +40,6 @@ module Ecom
37
40
  errors.add(:base, 'Only SI units can have a conversion factor 1')
38
41
  end
39
42
  end
40
-
41
- # scope si unit with system of measurement and physical quantity
42
- def si_unit_system_of_measurement_and_physical_quantity
43
- return if system_of_measurement.nil? || physical_quantity.nil?
44
-
45
- existing_record = MeasurementUnit
46
- .where(system_of_measurement: system_of_measurement,
47
- physical_quantity: physical_quantity, is_si_unit: true).first
48
- return unless (new_record? && existing_record.present?) || (persisted? && existing_record != self)
49
-
50
- errors.add(:is_si_unit,
51
- 'There exist an si unit of measurement for the given physical quantity and system of measurement')
52
- end
53
43
  end
54
44
  end
55
45
  end
@@ -6,6 +6,8 @@ module Ecom
6
6
 
7
7
  validates :code, :name, presence: true
8
8
  validates_uniqueness_of :code
9
+
10
+ delegate(:name, to: :task_template_type, prefix: true)
9
11
  end
10
12
  end
11
13
  end
@@ -0,0 +1,21 @@
1
+ module Ecom
2
+ module Core
3
+ class ResourceRequisition < ApplicationRecord
4
+ DRAFT = 'Draft'.freeze
5
+ SUBMITTED = 'Submitted'.freeze
6
+ APPROVED = 'Approved'.freeze
7
+ REJECTED = 'Rejected'.freeze
8
+
9
+ STATUSES = [DRAFT, SUBMITTED, APPROVED, REJECTED].freeze
10
+
11
+ belongs_to :lookahead_plan
12
+ belongs_to :reviewed_by, class_name: 'Ecom::Core::User', optional: true
13
+ belongs_to :approved_by, class_name: 'Ecom::Core::User', optional: true
14
+ has_many :resource_requisition_items
15
+
16
+ validates :delivery_point, presence: true
17
+
18
+ validates :status, presence: true, inclusion: STATUSES
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,45 @@
1
+ module Ecom
2
+ module Core
3
+ class ResourceRequisitionItem < ApplicationRecord
4
+ PENDING = 'Pending'.freeze
5
+ APPROVED = 'Approved'.freeze
6
+ REJECTED = 'Rejected'.freeze
7
+
8
+ STATUSES = [PENDING, APPROVED, REJECTED].freeze
9
+
10
+ belongs_to :resource_requisition
11
+ belongs_to :resource_type
12
+ belongs_to :requested_quantity_measurement_unit, class_name: 'Ecom::Core::MeasurementUnit'
13
+ belongs_to :awaiting_quantity_measurement_unit, class_name: 'Ecom::Core::MeasurementUnit'
14
+
15
+ validates :due_date, presence: true
16
+
17
+ validates :requested_quantity, presence: true, numericality: { greater_than: 0 }
18
+ validates :awaiting_quantity, presence: true, numericality: { greater_than: 0 }
19
+
20
+ validates :status, presence: true, inclusion: STATUSES
21
+
22
+ validate :quantity_validator
23
+
24
+ def quantity_validator
25
+ if requested_quantity.nil? || awaiting_quantity.nil? ||
26
+ requested_quantity_measurement_unit_id.nil? ||
27
+ awaiting_quantity_measurement_unit_id.nil?
28
+ return
29
+ end
30
+
31
+ requested_quantity_measurement_unit =
32
+ Ecom::Core::MeasurementUnit.find_by(id: requested_quantity_measurement_unit_id)
33
+ awaiting_quantity_measurement_unit =
34
+ Ecom::Core::MeasurementUnit.find_by(id: awaiting_quantity_measurement_unit_id)
35
+
36
+ requested_quantity_in_si_unit = requested_quantity / requested_quantity_measurement_unit.conversion_factor
37
+ awaiting_quantity_in_si_unit = awaiting_quantity / awaiting_quantity_measurement_unit.conversion_factor
38
+
39
+ return unless awaiting_quantity_in_si_unit > requested_quantity_in_si_unit
40
+
41
+ errors.add(:awaiting_quantity, 'awaiting quantity can not be greater than requested quantity')
42
+ end
43
+ end
44
+ end
45
+ end
@@ -14,7 +14,7 @@ module Ecom
14
14
 
15
15
  validates_uniqueness_of :site_id,
16
16
  scope: :crew_id,
17
- conditions: -> { where(status: 'Active') },
17
+ if: -> { status == 'Active' },
18
18
  message: 'There can only be one record with status `Active` for a given site and crew'
19
19
 
20
20
  validates :site_crew_type, inclusion: SITE_CREW_TYPES
@@ -5,7 +5,7 @@ module Ecom
5
5
 
6
6
  validates :name, presence: true, uniqueness: true
7
7
 
8
- delegate :name, to: :stakeholder_type, prefix: true
8
+ delegate(:name, to: :stakeholder_type, prefix: true)
9
9
  end
10
10
  end
11
11
  end
@@ -16,7 +16,6 @@ module Ecom
16
16
  belongs_to :task_template
17
17
  belongs_to :work_package, optional: true
18
18
  belongs_to :work_order, optional: true
19
- belongs_to :plan, optional: true
20
19
  belongs_to :performer, class_name: 'Ecom::Core::User', optional: true
21
20
  belongs_to :client_consultant, class_name: 'Ecom::Core::User', optional: true
22
21
  belongs_to :foreman, class_name: 'Ecom::Core::User', optional: true
@@ -45,11 +44,8 @@ module Ecom
45
44
 
46
45
  scope :by_status, ->(status) { where(status: status) }
47
46
 
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
50
47
  aasm column: 'status' do
51
48
  state :new, initial: true
52
- state :planned
53
49
  state :ready_to_start
54
50
  state :in_progress
55
51
  state :submitted
@@ -0,0 +1,11 @@
1
+ module Ecom
2
+ module Core
3
+ class TaskAttachment < ApplicationRecord
4
+ mount_base64_uploader :file, TaskAttachmentUploader
5
+
6
+ belongs_to :task
7
+
8
+ validates :title, presence: true
9
+ end
10
+ end
11
+ end
@@ -4,6 +4,7 @@ module Ecom
4
4
  has_ancestry
5
5
 
6
6
  belongs_to :task_template_type
7
+
7
8
  has_many :task_template_inspection_checklists
8
9
  has_many :inspection_checklists, through: :task_template_inspection_checklists
9
10
  has_many :project_work_item_templates
@@ -0,0 +1,27 @@
1
+ module Ecom
2
+ module Core
3
+ class UnitCost < ApplicationRecord
4
+ before_save :update_previous_unit_cost
5
+
6
+ belongs_to :resource_type
7
+ belongs_to :measurement_unit
8
+ belongs_to :currency
9
+ belongs_to :set_by, class_name: 'Ecom::Core::User'
10
+
11
+ validates :quantity, :effective_date, :utilization_factor, :set_by_id, :set_by, presence: true
12
+
13
+ validates :price, presence: true, numericality: { greater_than: 0 }
14
+ validates :utilization_factor, presence: true, numericality: { greater_than: 0, less_than_or_equal_to: 1 }
15
+
16
+ def update_previous_unit_cost
17
+ return if resource_type_id.nil?
18
+
19
+ return if active_changed?(from: true, to: false)
20
+
21
+ Ecom::Core::UnitCost
22
+ .where(resource_type_id: resource_type_id, active: true)
23
+ .update(active: false)
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,8 @@
1
+ module Ecom
2
+ module Core
3
+ class UnitOfMeasure < ApplicationRecord
4
+ validates :code, :name, presence: true
5
+ validates :code, uniqueness: true
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,18 @@
1
+ module Ecom
2
+ module Core
3
+ class WorkItemResourceRequirementTemplate < ApplicationRecord
4
+ belongs_to :project_work_item_template
5
+ belongs_to :resource_type
6
+ belongs_to :work_item_quantity_measurement_unit, class_name: 'Ecom::Core::MeasurementUnit'
7
+ belongs_to :resource_quantity_measurement_unit, class_name: 'Ecom::Core::MeasurementUnit'
8
+
9
+ validates :project_work_item_template_id, :project_work_item_template,
10
+ :resource_type_id, :resource_type, :work_item_quantity_measurement_unit_id,
11
+ :work_item_quantity_measurement_unit, :resource_quantity_measurement_unit_id,
12
+ :resource_quantity_measurement_unit, presence: true
13
+
14
+ validates :work_item_quantity, presence: true, numericality: { greater_than: 0 }
15
+ validates :resource_quantity, presence: true, numericality: { greater_than: 0 }
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,21 @@
1
+ module Ecom
2
+ module Core
3
+ class UnitCostSerializer < ActiveModel::Serializer
4
+ attributes :id, :resource_type_id, :quantity, :measurement_unit_id,
5
+ :price, :currency_id, :utilization_factor, :effective_date, :set_by_id,
6
+ :resource_type, :measurement_unit, :currency
7
+
8
+ def resource_type
9
+ object.resource_type
10
+ end
11
+
12
+ def measurement_unit
13
+ object.measurement_unit
14
+ end
15
+
16
+ def currency
17
+ object.currency.name
18
+ end
19
+ end
20
+ end
21
+ end
@@ -9,12 +9,12 @@ module Ecom
9
9
  SQL
10
10
  menu = Menu.joins(join_sql).where('UR.id IN (?)', role_ids).order(:id).distinct
11
11
  menu_list = menu.select { |m| m.parent.nil? }.each_with_object([]) do |item, list|
12
- list << { id: item.id, text: item.label, iconCss: item.icon, items: [] }
12
+ list << { id: item.id, label: item.label, icon: item.icon, items: [] }
13
13
  end
14
14
 
15
15
  menu_list.each do |ml|
16
16
  ml[:items] = menu.reject { |m| m.parent.nil? }.each_with_object([]) do |item, list|
17
- list << { id: item.id, text: item.label, iconCss: item.icon, url: item.route } if item.parent_id == ml[:id]
17
+ list << { id: item.id, label: item.label, icon: item.icon, url: item.route } if item.parent_id == ml[:id]
18
18
  end
19
19
  end
20
20
  { success: true, data: menu_list }
@@ -1,7 +1,11 @@
1
1
  module Ecom
2
2
  module Core
3
3
  class PhotoUploader < CarrierWave::Uploader::Base
4
- storage :file
4
+ if Rails.env.production?
5
+ storage :fog
6
+ else
7
+ storage :file
8
+ end
5
9
 
6
10
  def store_dir
7
11
  "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
@@ -0,0 +1,11 @@
1
+ module Ecom
2
+ module Core
3
+ class TaskAttachmentUploader < CarrierWave::Uploader::Base
4
+ storage :file
5
+
6
+ def store_dir
7
+ "#{ENV.fetch('UPLOAD_PREFIX')}uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,8 @@
1
+ CarrierWave.configure do |config|
2
+ config.fog_credentials = {
3
+ provider: 'Google',
4
+ google_storage_access_key_id: ENV["GOOGLE_STORAGE_ACCESS_KEY"],
5
+ google_storage_secret_access_key: ENV["GOOGLE_STORAGE_SECRETE_KEY"]
6
+ }
7
+ config.fog_directory = ENV["GOOGLE_STORAGE_BUCKET_NAME"]
8
+ end
@@ -17,4 +17,6 @@ Ecom::Core::Engine.routes.draw do
17
17
  get '/default_company', controller: :companies, action: :default_company
18
18
  get '/sites/:id/crew', controller: :site_crews, action: :index
19
19
  post '/site_crews', controller: :site_crews, action: :update
20
+
21
+ resources :unit_costs, only: %i[index create]
20
22
  end
@@ -0,0 +1,11 @@
1
+ class CreateEcomCoreUnitOfMeasures < ActiveRecord::Migration[6.0]
2
+ def change
3
+ create_table :ecom_core_unit_of_measures do |t|
4
+ t.string :code, unique: true
5
+ t.string :name, null: false
6
+ t.string :description
7
+
8
+ t.timestamps
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,19 @@
1
+ class CreateEcomCoreLookaheadPlans < ActiveRecord::Migration[6.0]
2
+ def change
3
+ create_table :ecom_core_lookahead_plans do |t|
4
+ t.string :name, null: false
5
+ t.date :start_date, null: false
6
+ t.date :end_date, null: false
7
+ t.string :status, null: false, default: :new
8
+ t.integer :revision_number, default: 0
9
+ t.integer :lead_time, default: 336 # default lead time 2 weeks( 336 hours )
10
+
11
+ t.references :prepared_by,
12
+ null: false,
13
+ index: { name: 'lprt_on_pb_indx' },
14
+ foreign_key: { to_table: :ecom_core_users }
15
+
16
+ t.timestamps
17
+ end
18
+ end
19
+ end
@@ -9,6 +9,7 @@ class CreateEcomCoreTasks < ActiveRecord::Migration[6.0]
9
9
  t.date :end_date
10
10
  t.string :status, null: false, default: :new
11
11
  t.integer :percent_completed, null: false, default: 0
12
+ t.float :quantity
12
13
  t.string :remark
13
14
  t.date :inspection_submission_date
14
15
  t.string :inspection_status, null: false, default: 'Not Inspected'
@@ -26,10 +27,6 @@ class CreateEcomCoreTasks < ActiveRecord::Migration[6.0]
26
27
  null: true,
27
28
  index: { name: 'tasks_on_wo_indx' },
28
29
  foreign_key: { to_table: :ecom_core_work_orders }
29
- t.references :plan,
30
- null: true,
31
- index: { name: 'tasks_on_plan_indx' },
32
- foreign_key: { to_table: :ecom_core_plans }
33
30
  t.references :performer,
34
31
  null: true,
35
32
  index: { name: 'tasks_on_performer_indx' },
@@ -0,0 +1,30 @@
1
+ class CreateEcomCoreUnitCosts < ActiveRecord::Migration[6.0]
2
+ def change
3
+ create_table :ecom_core_unit_costs do |t|
4
+ t.references :resource_type,
5
+ null: false,
6
+ index: { name: 'uc_on_rt_indx' },
7
+ foreign_key: { to_table: :ecom_core_resource_types }
8
+ t.float :quantity
9
+ t.references :measurement_unit,
10
+ null: false,
11
+ index: { name: 'uc_on_mu_indx' },
12
+ foreign_key: { to_table: :ecom_core_measurement_units }
13
+ t.float :price
14
+ t.references :currency,
15
+ null: false,
16
+ index: { name: 'uc_on_currency_indx' },
17
+ foreign_key: { to_table: :ecom_core_currencies }
18
+ t.float :utilization_factor, default: 1
19
+ t.date :effective_date
20
+ t.boolean :active, default: true
21
+ t.references :set_by,
22
+ null: false,
23
+ index: { name: 'uc_on_user_indx' },
24
+ foreign_key: { to_table: :ecom_core_users }
25
+
26
+
27
+ t.timestamps
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,18 @@
1
+ class CreateEcomCoreLookaheadPlanBacklogs < ActiveRecord::Migration[6.0]
2
+ def change
3
+ create_table :ecom_core_lookahead_plan_backlogs, id: false do |t|
4
+ t.references :lookahead_plan,
5
+ null: false,
6
+ index: { name: 'lpb_on_lp_indx' },
7
+ foreign_key: { to_table: :ecom_core_lookahead_plans }
8
+
9
+ t.references :task,
10
+ null: false,
11
+ index: { name: 'lpb_on_tas_indx' },
12
+ foreign_key: { to_table: :ecom_core_tasks }
13
+
14
+ t.timestamps
15
+ end
16
+ add_index :ecom_core_lookahead_plan_backlogs, [:lookahead_plan_id, :task_id], unique: true, name: 'lpb_on_lp_and_task'
17
+ end
18
+ end
@@ -0,0 +1,21 @@
1
+ class CreateEcomCoreLookaheadPlanHistories < ActiveRecord::Migration[6.0]
2
+ def change
3
+ create_table :ecom_core_lookahead_plan_histories do |t|
4
+
5
+ t.references :lookahead_plan,
6
+ null: false,
7
+ index: { name: 'lph_on_lp_indx' },
8
+ foreign_key: { to_table: :ecom_core_lookahead_plans }
9
+
10
+ t.references :task,
11
+ null: false,
12
+ index: { name: 'lph_on_tas_indx' },
13
+ foreign_key: { to_table: :ecom_core_tasks }
14
+ t.date :start_date, null: false
15
+ t.date :end_date, null: false
16
+ t.integer :lookahead_plan_revision_number, null: false
17
+
18
+ t.timestamps
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,21 @@
1
+ class CreateEcomCoreLookaheadPlanTaskProgresses < ActiveRecord::Migration[6.0]
2
+ def change
3
+ create_table :ecom_core_lookahead_plan_task_progresses do |t|
4
+
5
+ t.references :lookahead_plan,
6
+ null: false,
7
+ index: { name: 'lptp_on_lp_indx' },
8
+ foreign_key: { to_table: :ecom_core_lookahead_plans }
9
+
10
+ t.references :task,
11
+ null: false,
12
+ index: { name: 'lptp_on_tas_indx' },
13
+ foreign_key: { to_table: :ecom_core_tasks }
14
+ t.date :started_on, null: false
15
+ t.date :ended_on, null: false
16
+ t.integer :lookahead_plan_revision_number, null: false
17
+
18
+ t.timestamps
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,15 @@
1
+ class CreateEcomCoreTaskAttachments < ActiveRecord::Migration[6.0]
2
+ def change
3
+ create_table :ecom_core_task_attachments do |t|
4
+ t.string :title, null: false
5
+ t.string :description
6
+ t.string :file
7
+ t.references :task,
8
+ null: false,
9
+ index: { name: 'ta_on_task_indx' },
10
+ foreign_key: { to_table: :ecom_core_tasks }
11
+
12
+ t.timestamps
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,17 @@
1
+ class CreateEcomCoreLookaheadPlanReviewTimes < ActiveRecord::Migration[6.0]
2
+ def change
3
+ create_table :ecom_core_lookahead_plan_review_times do |t|
4
+
5
+ t.references :lookahead_plan,
6
+ null: false,
7
+ index: { name: 'lprt_on_lp_indx' },
8
+ foreign_key: { to_table: :ecom_core_lookahead_plans }
9
+
10
+ t.datetime :review_time, null: false
11
+ t.string :status
12
+ t.integer :lookahead_plan_revision_number
13
+
14
+ t.timestamps
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,31 @@
1
+ class CreateEcomCoreWorkItemResourceRequirementTemplates < ActiveRecord::Migration[6.0]
2
+ def change
3
+ create_table :ecom_core_work_item_resource_requirement_templates do |t|
4
+ t.references :project_work_item_template,
5
+ null: true,
6
+ index: { name: 'wirrl_on_pwit_indx' },
7
+ foreign_key: { to_table: :ecom_core_project_work_item_templates }
8
+
9
+ t.references :resource_type,
10
+ null: true,
11
+ index: { name: 'wirrl_on_rt_indx' },
12
+ foreign_key: { to_table: :ecom_core_resource_types }
13
+
14
+ t.float :work_item_quantity, null: false
15
+
16
+ t.references :work_item_quantity_measurement_unit,
17
+ null: true,
18
+ index: { name: 'wirrl_on_wiqmu_indx' },
19
+ foreign_key: { to_table: :ecom_core_measurement_units }
20
+
21
+ t.float :resource_quantity, null: false
22
+
23
+ t.references :resource_quantity_measurement_unit,
24
+ null: true,
25
+ index: { name: 'wirrl_on_rqmu_indx' },
26
+ foreign_key: { to_table: :ecom_core_measurement_units }
27
+
28
+ t.timestamps
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,23 @@
1
+ class CreateEcomCoreResourceRequisitions < ActiveRecord::Migration[6.0]
2
+ def change
3
+ create_table :ecom_core_resource_requisitions do |t|
4
+ t.references :lookahead_plan,
5
+ null: false,
6
+ index: { name: 'rr_on_lp_indx' },
7
+ foreign_key: { to_table: :ecom_core_lookahead_plans }
8
+
9
+ t.references :reviewed_by,
10
+ null: true,
11
+ index: { name: 'rr_on_rb_indx' },
12
+ foreign_key: { to_table: :ecom_core_users }
13
+ t.references :approved_by,
14
+ null: true,
15
+ index: { name: 'rr_on_ab_indx' },
16
+ foreign_key: { to_table: :ecom_core_users }
17
+ t.string :delivery_point, null:false
18
+ t.string :status, null: false, default: 'Draft'
19
+
20
+ t.timestamps
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,33 @@
1
+ class CreateEcomCoreResourceRequisitionItems < ActiveRecord::Migration[6.0]
2
+ def change
3
+ create_table :ecom_core_resource_requisition_items do |t|
4
+ t.references :resource_requisition,
5
+ null: false,
6
+ index: { name: 'rri_on_rr_indx' },
7
+ foreign_key: { to_table: :ecom_core_resource_requisitions }
8
+
9
+ t.references :resource_type,
10
+ null: false,
11
+ index: { name: 'rri_on_rt_indx' },
12
+ foreign_key: { to_table: :ecom_core_resource_types }
13
+
14
+ t.float :requested_quantity, null: false
15
+
16
+ t.references :requested_quantity_measurement_unit,
17
+ null: false,
18
+ index: { name: 'rri_on_rqmu_indx' },
19
+ foreign_key: { to_table: :ecom_core_measurement_units }
20
+
21
+ t.float :awaiting_quantity, null: false
22
+
23
+ t.references :awaiting_quantity_measurement_unit,
24
+ null: false,
25
+ index: { name: 'rri_on_aqmu_indx' },
26
+ foreign_key: { to_table: :ecom_core_measurement_units }
27
+ t.string :status, null: false, default: 'Pending'
28
+ t.datetime :due_date, null: false
29
+
30
+ t.timestamps
31
+ end
32
+ end
33
+ end
@@ -1,5 +1,5 @@
1
1
  module Ecom
2
2
  module Core
3
- VERSION = '1.2.35'.freeze
3
+ VERSION = '1.3.3'.freeze
4
4
  end
5
5
  end
@@ -0,0 +1,9 @@
1
+ FactoryBot.define do
2
+ factory :lookahead_plan_history, class: Ecom::Core::LookaheadPlanHistory do
3
+ association :lookahead_plan
4
+ association :task
5
+ start_date { Time.now }
6
+ end_date { Time.now + 2.day }
7
+ lookahead_plan_revision_number { 1 }
8
+ end
9
+ end
@@ -0,0 +1,8 @@
1
+ FactoryBot.define do
2
+ factory :lookahead_plan_review_time, class: Ecom::Core::LookaheadPlanReviewTime do
3
+ association :lookahead_plan
4
+ review_time { Time.now + 10.day }
5
+ status { :awaiting }
6
+ lookahead_plan_revision_number { 0 }
7
+ end
8
+ end
@@ -0,0 +1,9 @@
1
+ FactoryBot.define do
2
+ factory :lookahead_plan_task_progress, class: Ecom::Core::LookaheadPlanTaskProgress do
3
+ association :lookahead_plan
4
+ association :task
5
+ started_on { Time.now }
6
+ ended_on { Time.now + 2.day }
7
+ lookahead_plan_revision_number { 1 }
8
+ end
9
+ end
@@ -0,0 +1,10 @@
1
+ FactoryBot.define do
2
+ factory :lookahead_plan, class: Ecom::Core::LookaheadPlan do
3
+ name { FFaker::Name.name }
4
+ start_date { Time.now }
5
+ end_date { (Time.now + 1.day).to_s }
6
+ status { :new }
7
+ revision_number { 1 }
8
+ association :prepared_by, factory: :user
9
+ end
10
+ end
@@ -0,0 +1,12 @@
1
+ FactoryBot.define do
2
+ factory :resource_requisition_item, class: Ecom::Core::ResourceRequisitionItem do
3
+ association :resource_requisition
4
+ association :resource_type
5
+ requested_quantity { 2000 }
6
+ association :requested_quantity_measurement_unit, factory: :measurement_unit
7
+ association :awaiting_quantity_measurement_unit, factory: :non_si_measurement_unit
8
+ awaiting_quantity { 1 }
9
+ due_date { Time.now + 1.week }
10
+ status { 'Pending' }
11
+ end
12
+ end
@@ -0,0 +1,9 @@
1
+ FactoryBot.define do
2
+ factory :resource_requisition, class: Ecom::Core::ResourceRequisition do
3
+ association :lookahead_plan
4
+ association :reviewed_by, factory: :user
5
+ association :approved_by, factory: :user
6
+ status { 'Draft' }
7
+ delivery_point { FFaker::Name.name }
8
+ end
9
+ end
@@ -0,0 +1,8 @@
1
+ FactoryBot.define do
2
+ factory :task_attachment, class: Ecom::Core::TaskAttachment do
3
+ title { FFaker::Name.name }
4
+ description { FFaker::Name.name }
5
+ file { FFaker::Name.name }
6
+ association :task
7
+ end
8
+ end
@@ -15,6 +15,7 @@ FactoryBot.define do
15
15
  change_order { false }
16
16
  change_order_for { nil }
17
17
  percentage_contribution { nil }
18
+ quantity { nil }
18
19
  association :performer, factory: :user
19
20
  association :client_consultant, factory: :user
20
21
  association :foreman, factory: :user
@@ -0,0 +1,13 @@
1
+ FactoryBot.define do
2
+ factory :unit_cost, class: Ecom::Core::UnitCost do
3
+ association :resource_type
4
+ quantity { 55 }
5
+ association :measurement_unit
6
+ price { 100 }
7
+ association :currency
8
+ effective_date { Time.now }
9
+ active { true }
10
+ utilization_factor { 1 }
11
+ association :set_by, factory: :user
12
+ end
13
+ end
@@ -0,0 +1,7 @@
1
+ FactoryBot.define do
2
+ factory :unit_of_measure, class: Ecom::Core::UnitOfMeasure do
3
+ code { FFaker::Name.name }
4
+ name { FFaker::Name.name }
5
+ description { FFaker::Name.name }
6
+ end
7
+ end
@@ -0,0 +1,10 @@
1
+ FactoryBot.define do
2
+ factory :work_item_resource_requirement_template, class: Ecom::Core::WorkItemResourceRequirementTemplate do
3
+ association :project_work_item_template
4
+ association :resource_type
5
+ work_item_quantity { 120 }
6
+ association :work_item_quantity_measurement_unit, factory: :non_si_measurement_unit
7
+ resource_quantity { 100 }
8
+ association :resource_quantity_measurement_unit, factory: :non_si_measurement_unit
9
+ end
10
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ecom_core
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.35
4
+ version: 1.3.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Henock L.
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-11-23 00:00:00.000000000 Z
11
+ date: 2020-12-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: aasm
@@ -156,6 +156,20 @@ dependencies:
156
156
  - - ">="
157
157
  - !ruby/object:Gem::Version
158
158
  version: '0'
159
+ - !ruby/object:Gem::Dependency
160
+ name: fog-google
161
+ requirement: !ruby/object:Gem::Requirement
162
+ requirements:
163
+ - - "~>"
164
+ - !ruby/object:Gem::Version
165
+ version: 1.12.0
166
+ type: :runtime
167
+ prerelease: false
168
+ version_requirements: !ruby/object:Gem::Requirement
169
+ requirements:
170
+ - - "~>"
171
+ - !ruby/object:Gem::Version
172
+ version: 1.12.0
159
173
  - !ruby/object:Gem::Dependency
160
174
  name: factory_bot_rails
161
175
  requirement: !ruby/object:Gem::Requirement
@@ -264,6 +278,7 @@ files:
264
278
  - app/controllers/ecom/core/menus_controller.rb
265
279
  - app/controllers/ecom/core/projects_controller.rb
266
280
  - app/controllers/ecom/core/site_crews_controller.rb
281
+ - app/controllers/ecom/core/unit_costs_controller.rb
267
282
  - app/controllers/ecom/core/user_roles_controller.rb
268
283
  - app/controllers/ecom/core/users_controller.rb
269
284
  - app/models/ecom/core/application_module.rb
@@ -298,6 +313,10 @@ files:
298
313
  - app/models/ecom/core/inspection_checklist.rb
299
314
  - app/models/ecom/core/job_card.rb
300
315
  - app/models/ecom/core/location_type.rb
316
+ - app/models/ecom/core/lookahead_plan.rb
317
+ - app/models/ecom/core/lookahead_plan_history.rb
318
+ - app/models/ecom/core/lookahead_plan_review_time.rb
319
+ - app/models/ecom/core/lookahead_plan_task_progress.rb
301
320
  - app/models/ecom/core/lookup.rb
302
321
  - app/models/ecom/core/maintenance_category.rb
303
322
  - app/models/ecom/core/maintenance_cost.rb
@@ -317,13 +336,14 @@ files:
317
336
  - app/models/ecom/core/payment.rb
318
337
  - app/models/ecom/core/payment_detail.rb
319
338
  - app/models/ecom/core/payroll.rb
320
- - app/models/ecom/core/plan.rb
321
339
  - app/models/ecom/core/product_group.rb
322
340
  - app/models/ecom/core/product_type.rb
323
341
  - app/models/ecom/core/project.rb
324
342
  - app/models/ecom/core/project_template.rb
325
343
  - app/models/ecom/core/project_work_item_template.rb
326
344
  - app/models/ecom/core/requested_item.rb
345
+ - app/models/ecom/core/resource_requisition.rb
346
+ - app/models/ecom/core/resource_requisition_item.rb
327
347
  - app/models/ecom/core/resource_type.rb
328
348
  - app/models/ecom/core/schedule_setting.rb
329
349
  - app/models/ecom/core/schedule_unit.rb
@@ -333,13 +353,17 @@ files:
333
353
  - app/models/ecom/core/stakeholder_type.rb
334
354
  - app/models/ecom/core/takeoff.rb
335
355
  - app/models/ecom/core/task.rb
356
+ - app/models/ecom/core/task_attachment.rb
336
357
  - app/models/ecom/core/task_inspection_checklist.rb
337
358
  - app/models/ecom/core/task_resource.rb
338
359
  - app/models/ecom/core/task_template.rb
339
360
  - app/models/ecom/core/task_template_inspection_checklist.rb
340
361
  - app/models/ecom/core/task_template_type.rb
362
+ - app/models/ecom/core/unit_cost.rb
363
+ - app/models/ecom/core/unit_of_measure.rb
341
364
  - app/models/ecom/core/user.rb
342
365
  - app/models/ecom/core/user_role.rb
366
+ - app/models/ecom/core/work_item_resource_requirement_template.rb
343
367
  - app/models/ecom/core/work_order.rb
344
368
  - app/models/ecom/core/work_package.rb
345
369
  - app/models/ecom/core/work_product.rb
@@ -347,6 +371,7 @@ files:
347
371
  - app/serializers/ecom/core/application_module_serializer.rb
348
372
  - app/serializers/ecom/core/lookup_serializer.rb
349
373
  - app/serializers/ecom/core/resource_type_serializer.rb
374
+ - app/serializers/ecom/core/unit_cost_serializer.rb
350
375
  - app/serializers/ecom/core/user_role_serializer.rb
351
376
  - app/serializers/ecom/core/user_serializer.rb
352
377
  - app/services/ecom/core/crew_contract_transaction_service.rb
@@ -354,12 +379,15 @@ files:
354
379
  - app/services/ecom/core/site_crew_service.rb
355
380
  - app/services/ecom/core/token_auth_service.rb
356
381
  - app/uploaders/ecom/core/photo_uploader.rb
382
+ - app/uploaders/ecom/core/task_attachment_uploader.rb
357
383
  - app/validators/ecom/core/date_range_validator.rb
358
384
  - config/database.ci.yml
385
+ - config/initializers/carrierwave.rb
359
386
  - config/routes.rb
360
387
  - db/migrate/20190101085530_create_ecom_core_companies.rb
361
388
  - db/migrate/20190101112620_create_ecom_core_lookups.rb
362
389
  - db/migrate/20190101112625_create_ecom_core_overtime_types.rb
390
+ - db/migrate/20191118052213_create_ecom_core_unit_of_measures.rb
363
391
  - db/migrate/20191119010518_create_ecom_core_task_template_types.rb
364
392
  - db/migrate/20191119012030_create_ecom_core_task_templates.rb
365
393
  - db/migrate/20191119013236_create_ecom_core_work_product_templates.rb
@@ -381,7 +409,7 @@ files:
381
409
  - db/migrate/20191202222210_create_ecom_core_work_packages.rb
382
410
  - db/migrate/20191202235434_create_ecom_core_work_products.rb
383
411
  - db/migrate/20191207103729_create_ecom_core_crews.rb
384
- - db/migrate/20191207103730_create_ecom_core_plans.rb
412
+ - db/migrate/20191207103730_create_ecom_core_lookahead_plans.rb
385
413
  - db/migrate/20191207103731_create_ecom_core_work_orders.rb
386
414
  - db/migrate/20191207103735_create_ecom_core_tasks.rb
387
415
  - db/migrate/20191210724614_create_ecom_core_task_resources.rb
@@ -424,6 +452,15 @@ files:
424
452
  - db/migrate/20201013094100_create_ecom_core_crew_id_cards.rb
425
453
  - db/migrate/20201113050953_create_ecom_core_task_inspection_checklists.rb
426
454
  - db/migrate/20201113094302_create_ecom_core_task_template_inspection_checklists.rb
455
+ - db/migrate/20201121064916_create_ecom_core_unit_costs.rb
456
+ - db/migrate/20201122123227_create_ecom_core_lookahead_plan_backlogs.rb
457
+ - db/migrate/20201122170645_create_ecom_core_lookahead_plan_histories.rb
458
+ - db/migrate/20201122170724_create_ecom_core_lookahead_plan_task_progresses.rb
459
+ - db/migrate/20201123134917_create_ecom_core_task_attachments.rb
460
+ - db/migrate/20201124171642_create_ecom_core_lookahead_plan_review_times.rb
461
+ - db/migrate/20201125191158_create_ecom_core_work_item_resource_requirement_templates.rb
462
+ - db/migrate/20201126191334_create_ecom_core_resource_requisitions.rb
463
+ - db/migrate/20201126191349_create_ecom_core_resource_requisition_items.rb
427
464
  - lib/ecom/core.rb
428
465
  - lib/ecom/core/engine.rb
429
466
  - lib/ecom/core/version.rb
@@ -460,6 +497,10 @@ files:
460
497
  - spec/factories/ecom/core/inspection_checklists.rb
461
498
  - spec/factories/ecom/core/job_cards.rb
462
499
  - spec/factories/ecom/core/location_types.rb
500
+ - spec/factories/ecom/core/lookahead_plan_histories.rb
501
+ - spec/factories/ecom/core/lookahead_plan_review_times.rb
502
+ - spec/factories/ecom/core/lookahead_plan_task_progresses.rb
503
+ - spec/factories/ecom/core/lookahead_plans.rb
463
504
  - spec/factories/ecom/core/lookups.rb
464
505
  - spec/factories/ecom/core/maintenance_categories.rb
465
506
  - spec/factories/ecom/core/maintenance_costs.rb
@@ -479,13 +520,14 @@ files:
479
520
  - spec/factories/ecom/core/payment_details.rb
480
521
  - spec/factories/ecom/core/payments.rb
481
522
  - spec/factories/ecom/core/payrolls.rb
482
- - spec/factories/ecom/core/plans.rb
483
523
  - spec/factories/ecom/core/product_groups.rb
484
524
  - spec/factories/ecom/core/product_types.rb
485
525
  - spec/factories/ecom/core/project_templates.rb
486
526
  - spec/factories/ecom/core/project_work_item_templates.rb
487
527
  - spec/factories/ecom/core/projects.rb
488
528
  - spec/factories/ecom/core/requested_items.rb
529
+ - spec/factories/ecom/core/resource_requisition_items.rb
530
+ - spec/factories/ecom/core/resource_requisitions.rb
489
531
  - spec/factories/ecom/core/resource_types.rb
490
532
  - spec/factories/ecom/core/schedule_settings.rb
491
533
  - spec/factories/ecom/core/schedule_units.rb
@@ -494,14 +536,18 @@ files:
494
536
  - spec/factories/ecom/core/stakeholder_types.rb
495
537
  - spec/factories/ecom/core/stakeholders.rb
496
538
  - spec/factories/ecom/core/takeoffs.rb
539
+ - spec/factories/ecom/core/task_attachments.rb
497
540
  - spec/factories/ecom/core/task_inspection_checklists.rb
498
541
  - spec/factories/ecom/core/task_resources.rb
499
542
  - spec/factories/ecom/core/task_template_inspection_checklists.rb
500
543
  - spec/factories/ecom/core/task_template_types.rb
501
544
  - spec/factories/ecom/core/task_templates.rb
502
545
  - spec/factories/ecom/core/tasks.rb
546
+ - spec/factories/ecom/core/unit_costs.rb
547
+ - spec/factories/ecom/core/unit_of_measures.rb
503
548
  - spec/factories/ecom/core/user_roles.rb
504
549
  - spec/factories/ecom/core/users.rb
550
+ - spec/factories/ecom/core/work_item_resource_requirement_templates.rb
505
551
  - spec/factories/ecom/core/work_orders.rb
506
552
  - spec/factories/ecom/core/work_packages.rb
507
553
  - spec/factories/ecom/core/work_product_templates.rb
@@ -1,18 +0,0 @@
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
@@ -1,12 +0,0 @@
1
- class CreateEcomCorePlans < ActiveRecord::Migration[6.0]
2
- def change
3
- create_table :ecom_core_plans do |t|
4
- t.string :name, null: false
5
- t.date :start_date, null: false
6
- t.date :end_date, null: false
7
- t.string :status, null: false, default: 'New'
8
-
9
- t.timestamps
10
- end
11
- end
12
- end
@@ -1,8 +0,0 @@
1
- FactoryBot.define do
2
- factory :plan, class: Ecom::Core::Plan do
3
- name { FFaker::Name.name }
4
- start_date { Time.now }
5
- end_date { (Time.now + 1.day).to_s }
6
- status { Ecom::Core::Plan::STATUSES.sample }
7
- end
8
- end