ecom_core 1.2.35 → 1.2.36

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 (53) 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/resource_requisition.rb +21 -0
  11. data/app/models/ecom/core/resource_requisition_item.rb +45 -0
  12. data/app/models/ecom/core/site_crew.rb +1 -1
  13. data/app/models/ecom/core/task.rb +0 -4
  14. data/app/models/ecom/core/task_attachment.rb +11 -0
  15. data/app/models/ecom/core/task_template.rb +2 -0
  16. data/app/models/ecom/core/unit_cost.rb +27 -0
  17. data/app/models/ecom/core/unit_of_measure.rb +8 -0
  18. data/app/models/ecom/core/work_item_resource_requirement_template.rb +18 -0
  19. data/app/serializers/ecom/core/unit_cost_serializer.rb +21 -0
  20. data/app/uploaders/ecom/core/photo_uploader.rb +5 -1
  21. data/app/uploaders/ecom/core/task_attachment_uploader.rb +11 -0
  22. data/config/initializers/carrierwave.rb +9 -0
  23. data/config/routes.rb +2 -0
  24. data/db/migrate/20191118052213_create_ecom_core_unit_of_measures.rb +11 -0
  25. data/db/migrate/20191119012030_create_ecom_core_task_templates.rb +4 -0
  26. data/db/migrate/20191207103730_create_ecom_core_lookahead_plans.rb +19 -0
  27. data/db/migrate/20191207103735_create_ecom_core_tasks.rb +1 -4
  28. data/db/migrate/20201121064916_create_ecom_core_unit_costs.rb +30 -0
  29. data/db/migrate/20201122123227_create_ecom_core_lookahead_plan_backlogs.rb +18 -0
  30. data/db/migrate/20201122170645_create_ecom_core_lookahead_plan_histories.rb +21 -0
  31. data/db/migrate/20201122170724_create_ecom_core_lookahead_plan_task_progresses.rb +21 -0
  32. data/db/migrate/20201123134917_create_ecom_core_task_attachments.rb +15 -0
  33. data/db/migrate/20201124171642_create_ecom_core_lookahead_plan_review_times.rb +17 -0
  34. data/db/migrate/20201125191158_create_ecom_core_work_item_resource_requirement_templates.rb +31 -0
  35. data/db/migrate/20201126191334_create_ecom_core_resource_requisitions.rb +23 -0
  36. data/db/migrate/20201126191349_create_ecom_core_resource_requisition_items.rb +33 -0
  37. data/lib/ecom/core/version.rb +1 -1
  38. data/spec/factories/ecom/core/lookahead_plan_histories.rb +9 -0
  39. data/spec/factories/ecom/core/lookahead_plan_review_times.rb +8 -0
  40. data/spec/factories/ecom/core/lookahead_plan_task_progresses.rb +9 -0
  41. data/spec/factories/ecom/core/lookahead_plans.rb +10 -0
  42. data/spec/factories/ecom/core/resource_requisition_items.rb +12 -0
  43. data/spec/factories/ecom/core/resource_requisitions.rb +9 -0
  44. data/spec/factories/ecom/core/task_attachments.rb +8 -0
  45. data/spec/factories/ecom/core/task_templates.rb +1 -0
  46. data/spec/factories/ecom/core/tasks.rb +1 -0
  47. data/spec/factories/ecom/core/unit_costs.rb +13 -0
  48. data/spec/factories/ecom/core/unit_of_measures.rb +7 -0
  49. data/spec/factories/ecom/core/work_item_resource_requirement_templates.rb +10 -0
  50. metadata +85 -5
  51. data/app/models/ecom/core/plan.rb +0 -18
  52. data/db/migrate/20191207103730_create_ecom_core_plans.rb +0 -12
  53. 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: 2f37ff631e9f8965a0935b6ccd8ca9d28ee8e18c5a81eb9898941bb571a853e2
4
+ data.tar.gz: 3d7b428a2722a3b2fc1207ea648d6b8032d63b5402af7d8a9ce2297a3acf4230
5
5
  SHA512:
6
- metadata.gz: '0428fe3fac34831c9ab94b28f4a7819dee36fd608f0d2534249b06278918e8e87313b417279a25328061500833dcf2e281fb43ef8add4b463e824bdac61c3958'
7
- data.tar.gz: 673cf08cc11e5f3ddc8d8ddef5f3da3adb17292032b8e306deacf4bc326080a5da3ea8c666d71b8014a4b91e690a1267c4f18d920cf45133f864910ccac2d7aa
6
+ metadata.gz: 06030361db29cd37a37f43f8f16fb51c9b460c5c6be78e94e2ef21a75f2d23e0bacc3561c52dd732d4d1b8b16ddcac8d39baa83c3ef37fc5ca25a08e347d9557
7
+ data.tar.gz: 5f4f94583ae5519a0bdc78a4a5183595aa0df0901f0f4e339d5e797756c8b3b40254d89aeb6a30f36d52f7bf197b8961d085d08b97b6515e4de41ddc1bbd5c97
@@ -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
@@ -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
@@ -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,8 @@ module Ecom
4
4
  has_ancestry
5
5
 
6
6
  belongs_to :task_template_type
7
+ belongs_to :unit_of_measure
8
+
7
9
  has_many :task_template_inspection_checklists
8
10
  has_many :inspection_checklists, through: :task_template_inspection_checklists
9
11
  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
@@ -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,9 @@
1
+ CarrierWave.configure do |config|
2
+ config.fog_provider = 'fog/google'
3
+ config.fog_credentials = {
4
+ provider: 'Google',
5
+ google_storage_access_key_id: ENV["GOOGLE_STORAGE_ACCESS_KEY"],
6
+ google_storage_secret_access_key: ENV["GOOGLE_STORAGE_SECRETE_KEY"]
7
+ }
8
+ config.fog_directory = ENV["GOOGLE_STORAGE_BUCKET_NAME"]
9
+ 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
@@ -8,6 +8,10 @@ class CreateEcomCoreTaskTemplates < ActiveRecord::Migration[6.0]
8
8
  null: false,
9
9
  index: { name: 'tt_on_ttt_indx' },
10
10
  foreign_key: { to_table: :ecom_core_task_template_types }
11
+ t.references :unit_of_measure,
12
+ null: false,
13
+ index: { name: 'tt_on_uof_indx' },
14
+ foreign_key: { to_table: :ecom_core_unit_of_measures }
11
15
  t.string :ancestry, index: true
12
16
  t.boolean :has_takeoff_fields, null:false, default: false
13
17
  t.jsonb :takeoff_fields, null: false, default: {}
@@ -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.2.36'.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
@@ -6,6 +6,7 @@ FactoryBot.define do
6
6
  name { FFaker::Name.name }
7
7
  description { FFaker::Name.name }
8
8
  association :task_template_type
9
+ association :unit_of_measure
9
10
  has_takeoff_fields { false }
10
11
  takeoff_fields { [{ name: 'length', label: 'Length' }] }
11
12
  percentage_contribution { nil }
@@ -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.2.36
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-11-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: aasm
@@ -156,6 +156,54 @@ 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: '0'
166
+ type: :runtime
167
+ prerelease: false
168
+ version_requirements: !ruby/object:Gem::Requirement
169
+ requirements:
170
+ - - ">="
171
+ - !ruby/object:Gem::Version
172
+ version: '0'
173
+ - !ruby/object:Gem::Dependency
174
+ name: google-api-client
175
+ requirement: !ruby/object:Gem::Requirement
176
+ requirements:
177
+ - - ">"
178
+ - !ruby/object:Gem::Version
179
+ version: 0.8.5
180
+ - - "<"
181
+ - !ruby/object:Gem::Version
182
+ version: '0.9'
183
+ type: :runtime
184
+ prerelease: false
185
+ version_requirements: !ruby/object:Gem::Requirement
186
+ requirements:
187
+ - - ">"
188
+ - !ruby/object:Gem::Version
189
+ version: 0.8.5
190
+ - - "<"
191
+ - !ruby/object:Gem::Version
192
+ version: '0.9'
193
+ - !ruby/object:Gem::Dependency
194
+ name: mime-types
195
+ requirement: !ruby/object:Gem::Requirement
196
+ requirements:
197
+ - - ">="
198
+ - !ruby/object:Gem::Version
199
+ version: '0'
200
+ type: :runtime
201
+ prerelease: false
202
+ version_requirements: !ruby/object:Gem::Requirement
203
+ requirements:
204
+ - - ">="
205
+ - !ruby/object:Gem::Version
206
+ version: '0'
159
207
  - !ruby/object:Gem::Dependency
160
208
  name: factory_bot_rails
161
209
  requirement: !ruby/object:Gem::Requirement
@@ -264,6 +312,7 @@ files:
264
312
  - app/controllers/ecom/core/menus_controller.rb
265
313
  - app/controllers/ecom/core/projects_controller.rb
266
314
  - app/controllers/ecom/core/site_crews_controller.rb
315
+ - app/controllers/ecom/core/unit_costs_controller.rb
267
316
  - app/controllers/ecom/core/user_roles_controller.rb
268
317
  - app/controllers/ecom/core/users_controller.rb
269
318
  - app/models/ecom/core/application_module.rb
@@ -298,6 +347,10 @@ files:
298
347
  - app/models/ecom/core/inspection_checklist.rb
299
348
  - app/models/ecom/core/job_card.rb
300
349
  - app/models/ecom/core/location_type.rb
350
+ - app/models/ecom/core/lookahead_plan.rb
351
+ - app/models/ecom/core/lookahead_plan_history.rb
352
+ - app/models/ecom/core/lookahead_plan_review_time.rb
353
+ - app/models/ecom/core/lookahead_plan_task_progress.rb
301
354
  - app/models/ecom/core/lookup.rb
302
355
  - app/models/ecom/core/maintenance_category.rb
303
356
  - app/models/ecom/core/maintenance_cost.rb
@@ -317,13 +370,14 @@ files:
317
370
  - app/models/ecom/core/payment.rb
318
371
  - app/models/ecom/core/payment_detail.rb
319
372
  - app/models/ecom/core/payroll.rb
320
- - app/models/ecom/core/plan.rb
321
373
  - app/models/ecom/core/product_group.rb
322
374
  - app/models/ecom/core/product_type.rb
323
375
  - app/models/ecom/core/project.rb
324
376
  - app/models/ecom/core/project_template.rb
325
377
  - app/models/ecom/core/project_work_item_template.rb
326
378
  - app/models/ecom/core/requested_item.rb
379
+ - app/models/ecom/core/resource_requisition.rb
380
+ - app/models/ecom/core/resource_requisition_item.rb
327
381
  - app/models/ecom/core/resource_type.rb
328
382
  - app/models/ecom/core/schedule_setting.rb
329
383
  - app/models/ecom/core/schedule_unit.rb
@@ -333,13 +387,17 @@ files:
333
387
  - app/models/ecom/core/stakeholder_type.rb
334
388
  - app/models/ecom/core/takeoff.rb
335
389
  - app/models/ecom/core/task.rb
390
+ - app/models/ecom/core/task_attachment.rb
336
391
  - app/models/ecom/core/task_inspection_checklist.rb
337
392
  - app/models/ecom/core/task_resource.rb
338
393
  - app/models/ecom/core/task_template.rb
339
394
  - app/models/ecom/core/task_template_inspection_checklist.rb
340
395
  - app/models/ecom/core/task_template_type.rb
396
+ - app/models/ecom/core/unit_cost.rb
397
+ - app/models/ecom/core/unit_of_measure.rb
341
398
  - app/models/ecom/core/user.rb
342
399
  - app/models/ecom/core/user_role.rb
400
+ - app/models/ecom/core/work_item_resource_requirement_template.rb
343
401
  - app/models/ecom/core/work_order.rb
344
402
  - app/models/ecom/core/work_package.rb
345
403
  - app/models/ecom/core/work_product.rb
@@ -347,6 +405,7 @@ files:
347
405
  - app/serializers/ecom/core/application_module_serializer.rb
348
406
  - app/serializers/ecom/core/lookup_serializer.rb
349
407
  - app/serializers/ecom/core/resource_type_serializer.rb
408
+ - app/serializers/ecom/core/unit_cost_serializer.rb
350
409
  - app/serializers/ecom/core/user_role_serializer.rb
351
410
  - app/serializers/ecom/core/user_serializer.rb
352
411
  - app/services/ecom/core/crew_contract_transaction_service.rb
@@ -354,12 +413,15 @@ files:
354
413
  - app/services/ecom/core/site_crew_service.rb
355
414
  - app/services/ecom/core/token_auth_service.rb
356
415
  - app/uploaders/ecom/core/photo_uploader.rb
416
+ - app/uploaders/ecom/core/task_attachment_uploader.rb
357
417
  - app/validators/ecom/core/date_range_validator.rb
358
418
  - config/database.ci.yml
419
+ - config/initializers/carrierwave.rb
359
420
  - config/routes.rb
360
421
  - db/migrate/20190101085530_create_ecom_core_companies.rb
361
422
  - db/migrate/20190101112620_create_ecom_core_lookups.rb
362
423
  - db/migrate/20190101112625_create_ecom_core_overtime_types.rb
424
+ - db/migrate/20191118052213_create_ecom_core_unit_of_measures.rb
363
425
  - db/migrate/20191119010518_create_ecom_core_task_template_types.rb
364
426
  - db/migrate/20191119012030_create_ecom_core_task_templates.rb
365
427
  - db/migrate/20191119013236_create_ecom_core_work_product_templates.rb
@@ -381,7 +443,7 @@ files:
381
443
  - db/migrate/20191202222210_create_ecom_core_work_packages.rb
382
444
  - db/migrate/20191202235434_create_ecom_core_work_products.rb
383
445
  - db/migrate/20191207103729_create_ecom_core_crews.rb
384
- - db/migrate/20191207103730_create_ecom_core_plans.rb
446
+ - db/migrate/20191207103730_create_ecom_core_lookahead_plans.rb
385
447
  - db/migrate/20191207103731_create_ecom_core_work_orders.rb
386
448
  - db/migrate/20191207103735_create_ecom_core_tasks.rb
387
449
  - db/migrate/20191210724614_create_ecom_core_task_resources.rb
@@ -424,6 +486,15 @@ files:
424
486
  - db/migrate/20201013094100_create_ecom_core_crew_id_cards.rb
425
487
  - db/migrate/20201113050953_create_ecom_core_task_inspection_checklists.rb
426
488
  - db/migrate/20201113094302_create_ecom_core_task_template_inspection_checklists.rb
489
+ - db/migrate/20201121064916_create_ecom_core_unit_costs.rb
490
+ - db/migrate/20201122123227_create_ecom_core_lookahead_plan_backlogs.rb
491
+ - db/migrate/20201122170645_create_ecom_core_lookahead_plan_histories.rb
492
+ - db/migrate/20201122170724_create_ecom_core_lookahead_plan_task_progresses.rb
493
+ - db/migrate/20201123134917_create_ecom_core_task_attachments.rb
494
+ - db/migrate/20201124171642_create_ecom_core_lookahead_plan_review_times.rb
495
+ - db/migrate/20201125191158_create_ecom_core_work_item_resource_requirement_templates.rb
496
+ - db/migrate/20201126191334_create_ecom_core_resource_requisitions.rb
497
+ - db/migrate/20201126191349_create_ecom_core_resource_requisition_items.rb
427
498
  - lib/ecom/core.rb
428
499
  - lib/ecom/core/engine.rb
429
500
  - lib/ecom/core/version.rb
@@ -460,6 +531,10 @@ files:
460
531
  - spec/factories/ecom/core/inspection_checklists.rb
461
532
  - spec/factories/ecom/core/job_cards.rb
462
533
  - spec/factories/ecom/core/location_types.rb
534
+ - spec/factories/ecom/core/lookahead_plan_histories.rb
535
+ - spec/factories/ecom/core/lookahead_plan_review_times.rb
536
+ - spec/factories/ecom/core/lookahead_plan_task_progresses.rb
537
+ - spec/factories/ecom/core/lookahead_plans.rb
463
538
  - spec/factories/ecom/core/lookups.rb
464
539
  - spec/factories/ecom/core/maintenance_categories.rb
465
540
  - spec/factories/ecom/core/maintenance_costs.rb
@@ -479,13 +554,14 @@ files:
479
554
  - spec/factories/ecom/core/payment_details.rb
480
555
  - spec/factories/ecom/core/payments.rb
481
556
  - spec/factories/ecom/core/payrolls.rb
482
- - spec/factories/ecom/core/plans.rb
483
557
  - spec/factories/ecom/core/product_groups.rb
484
558
  - spec/factories/ecom/core/product_types.rb
485
559
  - spec/factories/ecom/core/project_templates.rb
486
560
  - spec/factories/ecom/core/project_work_item_templates.rb
487
561
  - spec/factories/ecom/core/projects.rb
488
562
  - spec/factories/ecom/core/requested_items.rb
563
+ - spec/factories/ecom/core/resource_requisition_items.rb
564
+ - spec/factories/ecom/core/resource_requisitions.rb
489
565
  - spec/factories/ecom/core/resource_types.rb
490
566
  - spec/factories/ecom/core/schedule_settings.rb
491
567
  - spec/factories/ecom/core/schedule_units.rb
@@ -494,14 +570,18 @@ files:
494
570
  - spec/factories/ecom/core/stakeholder_types.rb
495
571
  - spec/factories/ecom/core/stakeholders.rb
496
572
  - spec/factories/ecom/core/takeoffs.rb
573
+ - spec/factories/ecom/core/task_attachments.rb
497
574
  - spec/factories/ecom/core/task_inspection_checklists.rb
498
575
  - spec/factories/ecom/core/task_resources.rb
499
576
  - spec/factories/ecom/core/task_template_inspection_checklists.rb
500
577
  - spec/factories/ecom/core/task_template_types.rb
501
578
  - spec/factories/ecom/core/task_templates.rb
502
579
  - spec/factories/ecom/core/tasks.rb
580
+ - spec/factories/ecom/core/unit_costs.rb
581
+ - spec/factories/ecom/core/unit_of_measures.rb
503
582
  - spec/factories/ecom/core/user_roles.rb
504
583
  - spec/factories/ecom/core/users.rb
584
+ - spec/factories/ecom/core/work_item_resource_requirement_templates.rb
505
585
  - spec/factories/ecom/core/work_orders.rb
506
586
  - spec/factories/ecom/core/work_packages.rb
507
587
  - 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