ecom_core 1.2.35 → 1.2.36

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