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.
- checksums.yaml +4 -4
- data/app/controllers/ecom/core/unit_costs_controller.rb +29 -0
- data/app/models/ecom/core/crew.rb +1 -0
- data/app/models/ecom/core/crew_contract.rb +1 -1
- data/app/models/ecom/core/lookahead_plan.rb +41 -0
- data/app/models/ecom/core/lookahead_plan_history.rb +16 -0
- data/app/models/ecom/core/lookahead_plan_review_time.rb +29 -0
- data/app/models/ecom/core/lookahead_plan_task_progress.rb +22 -0
- data/app/models/ecom/core/measurement_unit.rb +4 -14
- data/app/models/ecom/core/resource_requisition.rb +21 -0
- data/app/models/ecom/core/resource_requisition_item.rb +45 -0
- data/app/models/ecom/core/site_crew.rb +1 -1
- data/app/models/ecom/core/task.rb +0 -4
- data/app/models/ecom/core/task_attachment.rb +11 -0
- data/app/models/ecom/core/task_template.rb +2 -0
- data/app/models/ecom/core/unit_cost.rb +27 -0
- data/app/models/ecom/core/unit_of_measure.rb +8 -0
- data/app/models/ecom/core/work_item_resource_requirement_template.rb +18 -0
- data/app/serializers/ecom/core/unit_cost_serializer.rb +21 -0
- data/app/uploaders/ecom/core/photo_uploader.rb +5 -1
- data/app/uploaders/ecom/core/task_attachment_uploader.rb +11 -0
- data/config/initializers/carrierwave.rb +9 -0
- data/config/routes.rb +2 -0
- data/db/migrate/20191118052213_create_ecom_core_unit_of_measures.rb +11 -0
- data/db/migrate/20191119012030_create_ecom_core_task_templates.rb +4 -0
- data/db/migrate/20191207103730_create_ecom_core_lookahead_plans.rb +19 -0
- data/db/migrate/20191207103735_create_ecom_core_tasks.rb +1 -4
- data/db/migrate/20201121064916_create_ecom_core_unit_costs.rb +30 -0
- data/db/migrate/20201122123227_create_ecom_core_lookahead_plan_backlogs.rb +18 -0
- data/db/migrate/20201122170645_create_ecom_core_lookahead_plan_histories.rb +21 -0
- data/db/migrate/20201122170724_create_ecom_core_lookahead_plan_task_progresses.rb +21 -0
- data/db/migrate/20201123134917_create_ecom_core_task_attachments.rb +15 -0
- data/db/migrate/20201124171642_create_ecom_core_lookahead_plan_review_times.rb +17 -0
- data/db/migrate/20201125191158_create_ecom_core_work_item_resource_requirement_templates.rb +31 -0
- data/db/migrate/20201126191334_create_ecom_core_resource_requisitions.rb +23 -0
- data/db/migrate/20201126191349_create_ecom_core_resource_requisition_items.rb +33 -0
- data/lib/ecom/core/version.rb +1 -1
- data/spec/factories/ecom/core/lookahead_plan_histories.rb +9 -0
- data/spec/factories/ecom/core/lookahead_plan_review_times.rb +8 -0
- data/spec/factories/ecom/core/lookahead_plan_task_progresses.rb +9 -0
- data/spec/factories/ecom/core/lookahead_plans.rb +10 -0
- data/spec/factories/ecom/core/resource_requisition_items.rb +12 -0
- data/spec/factories/ecom/core/resource_requisitions.rb +9 -0
- data/spec/factories/ecom/core/task_attachments.rb +8 -0
- data/spec/factories/ecom/core/task_templates.rb +1 -0
- data/spec/factories/ecom/core/tasks.rb +1 -0
- data/spec/factories/ecom/core/unit_costs.rb +13 -0
- data/spec/factories/ecom/core/unit_of_measures.rb +7 -0
- data/spec/factories/ecom/core/work_item_resource_requirement_templates.rb +10 -0
- metadata +85 -5
- data/app/models/ecom/core/plan.rb +0 -18
- data/db/migrate/20191207103730_create_ecom_core_plans.rb +0 -12
- data/spec/factories/ecom/core/plans.rb +0 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2f37ff631e9f8965a0935b6ccd8ca9d28ee8e18c5a81eb9898941bb571a853e2
|
4
|
+
data.tar.gz: 3d7b428a2722a3b2fc1207ea648d6b8032d63b5402af7d8a9ce2297a3acf4230
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
-
|
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
|
-
|
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
|
-
|
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,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,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
|
@@ -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
|
data/config/routes.rb
CHANGED
@@ -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
|
@@ -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
|
data/lib/ecom/core/version.rb
CHANGED
@@ -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
|
@@ -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 }
|
@@ -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,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.
|
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-
|
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/
|
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
|