ecom_core 1.2.35 → 1.3.3
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/project_template.rb +2 -0
- 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/stakeholder.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 +1 -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/services/ecom/core/menu_service.rb +2 -2
- 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 +8 -0
- data/config/routes.rb +2 -0
- data/db/migrate/20191118052213_create_ecom_core_unit_of_measures.rb +11 -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/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 +51 -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: f471cd5b5bddb2156f3edbd091a53fff200ac09e374d465201dd4fa930bbc384
|
4
|
+
data.tar.gz: 5b8bb54ba78c861e284f85bcd9c183e5213559005669245483aea63b4ddf64c3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ed6a04e00cf9c858ee3a9366c297f5e989bdf3bb9e0d18e6ca0c905945995a03c6312f2549b4ab7f2f5cbaefd6994933d7c05d27462e2efece7a5a922ed66c74
|
7
|
+
data.tar.gz: c6e0dc807e852c9ee55ab645422c2f51bf17340c7196e1665dbc24cc3081771ad2791d14cc08de64fe226561da70d934b1177fc2ea38c30ccb523264f3e1d325
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module Ecom
|
2
|
+
module Core
|
3
|
+
class UnitCostsController < ApplicationController
|
4
|
+
before_action :set_service, only: %i[update]
|
5
|
+
|
6
|
+
def index
|
7
|
+
unit_costs = UnitCost.where(active: true)
|
8
|
+
serialized = ActiveModelSerializers::SerializableResource.new(unit_costs)
|
9
|
+
render json: { success: true, data: serialized }
|
10
|
+
end
|
11
|
+
|
12
|
+
def create
|
13
|
+
unit_cost = UnitCost.new(unit_cost_params)
|
14
|
+
if unit_cost.save
|
15
|
+
render json: unit_cost, status: :created
|
16
|
+
else
|
17
|
+
render json: { success: false, errors: unit_cost.errors }, status: :unprocessable_entity
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
def unit_cost_params
|
24
|
+
params.require(:unit_cost).permit(:resource_type_id, :quantity, :measurement_unit_id,
|
25
|
+
:price, :currency_id, :utilization_factor, :effective_date, :set_by_id)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -20,6 +20,7 @@ module Ecom
|
|
20
20
|
has_many :site_crews
|
21
21
|
has_many :sites, through: :site_crews
|
22
22
|
has_many :crew_id_cards
|
23
|
+
has_many :crew_contracts
|
23
24
|
|
24
25
|
scope :by_active, ->(active) { where(active: active) }
|
25
26
|
scope :by_qualification, ->(qualification) { where(qualification: qualification) }
|
@@ -14,7 +14,7 @@ module Ecom
|
|
14
14
|
validates :wage, presence: true, numericality: { greater_than: 0 }
|
15
15
|
|
16
16
|
validates_uniqueness_of :crew_id,
|
17
|
-
|
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
|
@@ -9,12 +9,12 @@ module Ecom
|
|
9
9
|
SQL
|
10
10
|
menu = Menu.joins(join_sql).where('UR.id IN (?)', role_ids).order(:id).distinct
|
11
11
|
menu_list = menu.select { |m| m.parent.nil? }.each_with_object([]) do |item, list|
|
12
|
-
list << { id: item.id,
|
12
|
+
list << { id: item.id, label: item.label, icon: item.icon, items: [] }
|
13
13
|
end
|
14
14
|
|
15
15
|
menu_list.each do |ml|
|
16
16
|
ml[:items] = menu.reject { |m| m.parent.nil? }.each_with_object([]) do |item, list|
|
17
|
-
list << { id: item.id,
|
17
|
+
list << { id: item.id, label: item.label, icon: item.icon, url: item.route } if item.parent_id == ml[:id]
|
18
18
|
end
|
19
19
|
end
|
20
20
|
{ success: true, data: menu_list }
|
@@ -0,0 +1,8 @@
|
|
1
|
+
CarrierWave.configure do |config|
|
2
|
+
config.fog_credentials = {
|
3
|
+
provider: 'Google',
|
4
|
+
google_storage_access_key_id: ENV["GOOGLE_STORAGE_ACCESS_KEY"],
|
5
|
+
google_storage_secret_access_key: ENV["GOOGLE_STORAGE_SECRETE_KEY"]
|
6
|
+
}
|
7
|
+
config.fog_directory = ENV["GOOGLE_STORAGE_BUCKET_NAME"]
|
8
|
+
end
|
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
|
@@ -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
|
@@ -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.
|
4
|
+
version: 1.3.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Henock L.
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-12-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: aasm
|
@@ -156,6 +156,20 @@ dependencies:
|
|
156
156
|
- - ">="
|
157
157
|
- !ruby/object:Gem::Version
|
158
158
|
version: '0'
|
159
|
+
- !ruby/object:Gem::Dependency
|
160
|
+
name: fog-google
|
161
|
+
requirement: !ruby/object:Gem::Requirement
|
162
|
+
requirements:
|
163
|
+
- - "~>"
|
164
|
+
- !ruby/object:Gem::Version
|
165
|
+
version: 1.12.0
|
166
|
+
type: :runtime
|
167
|
+
prerelease: false
|
168
|
+
version_requirements: !ruby/object:Gem::Requirement
|
169
|
+
requirements:
|
170
|
+
- - "~>"
|
171
|
+
- !ruby/object:Gem::Version
|
172
|
+
version: 1.12.0
|
159
173
|
- !ruby/object:Gem::Dependency
|
160
174
|
name: factory_bot_rails
|
161
175
|
requirement: !ruby/object:Gem::Requirement
|
@@ -264,6 +278,7 @@ files:
|
|
264
278
|
- app/controllers/ecom/core/menus_controller.rb
|
265
279
|
- app/controllers/ecom/core/projects_controller.rb
|
266
280
|
- app/controllers/ecom/core/site_crews_controller.rb
|
281
|
+
- app/controllers/ecom/core/unit_costs_controller.rb
|
267
282
|
- app/controllers/ecom/core/user_roles_controller.rb
|
268
283
|
- app/controllers/ecom/core/users_controller.rb
|
269
284
|
- app/models/ecom/core/application_module.rb
|
@@ -298,6 +313,10 @@ files:
|
|
298
313
|
- app/models/ecom/core/inspection_checklist.rb
|
299
314
|
- app/models/ecom/core/job_card.rb
|
300
315
|
- app/models/ecom/core/location_type.rb
|
316
|
+
- app/models/ecom/core/lookahead_plan.rb
|
317
|
+
- app/models/ecom/core/lookahead_plan_history.rb
|
318
|
+
- app/models/ecom/core/lookahead_plan_review_time.rb
|
319
|
+
- app/models/ecom/core/lookahead_plan_task_progress.rb
|
301
320
|
- app/models/ecom/core/lookup.rb
|
302
321
|
- app/models/ecom/core/maintenance_category.rb
|
303
322
|
- app/models/ecom/core/maintenance_cost.rb
|
@@ -317,13 +336,14 @@ files:
|
|
317
336
|
- app/models/ecom/core/payment.rb
|
318
337
|
- app/models/ecom/core/payment_detail.rb
|
319
338
|
- app/models/ecom/core/payroll.rb
|
320
|
-
- app/models/ecom/core/plan.rb
|
321
339
|
- app/models/ecom/core/product_group.rb
|
322
340
|
- app/models/ecom/core/product_type.rb
|
323
341
|
- app/models/ecom/core/project.rb
|
324
342
|
- app/models/ecom/core/project_template.rb
|
325
343
|
- app/models/ecom/core/project_work_item_template.rb
|
326
344
|
- app/models/ecom/core/requested_item.rb
|
345
|
+
- app/models/ecom/core/resource_requisition.rb
|
346
|
+
- app/models/ecom/core/resource_requisition_item.rb
|
327
347
|
- app/models/ecom/core/resource_type.rb
|
328
348
|
- app/models/ecom/core/schedule_setting.rb
|
329
349
|
- app/models/ecom/core/schedule_unit.rb
|
@@ -333,13 +353,17 @@ files:
|
|
333
353
|
- app/models/ecom/core/stakeholder_type.rb
|
334
354
|
- app/models/ecom/core/takeoff.rb
|
335
355
|
- app/models/ecom/core/task.rb
|
356
|
+
- app/models/ecom/core/task_attachment.rb
|
336
357
|
- app/models/ecom/core/task_inspection_checklist.rb
|
337
358
|
- app/models/ecom/core/task_resource.rb
|
338
359
|
- app/models/ecom/core/task_template.rb
|
339
360
|
- app/models/ecom/core/task_template_inspection_checklist.rb
|
340
361
|
- app/models/ecom/core/task_template_type.rb
|
362
|
+
- app/models/ecom/core/unit_cost.rb
|
363
|
+
- app/models/ecom/core/unit_of_measure.rb
|
341
364
|
- app/models/ecom/core/user.rb
|
342
365
|
- app/models/ecom/core/user_role.rb
|
366
|
+
- app/models/ecom/core/work_item_resource_requirement_template.rb
|
343
367
|
- app/models/ecom/core/work_order.rb
|
344
368
|
- app/models/ecom/core/work_package.rb
|
345
369
|
- app/models/ecom/core/work_product.rb
|
@@ -347,6 +371,7 @@ files:
|
|
347
371
|
- app/serializers/ecom/core/application_module_serializer.rb
|
348
372
|
- app/serializers/ecom/core/lookup_serializer.rb
|
349
373
|
- app/serializers/ecom/core/resource_type_serializer.rb
|
374
|
+
- app/serializers/ecom/core/unit_cost_serializer.rb
|
350
375
|
- app/serializers/ecom/core/user_role_serializer.rb
|
351
376
|
- app/serializers/ecom/core/user_serializer.rb
|
352
377
|
- app/services/ecom/core/crew_contract_transaction_service.rb
|
@@ -354,12 +379,15 @@ files:
|
|
354
379
|
- app/services/ecom/core/site_crew_service.rb
|
355
380
|
- app/services/ecom/core/token_auth_service.rb
|
356
381
|
- app/uploaders/ecom/core/photo_uploader.rb
|
382
|
+
- app/uploaders/ecom/core/task_attachment_uploader.rb
|
357
383
|
- app/validators/ecom/core/date_range_validator.rb
|
358
384
|
- config/database.ci.yml
|
385
|
+
- config/initializers/carrierwave.rb
|
359
386
|
- config/routes.rb
|
360
387
|
- db/migrate/20190101085530_create_ecom_core_companies.rb
|
361
388
|
- db/migrate/20190101112620_create_ecom_core_lookups.rb
|
362
389
|
- db/migrate/20190101112625_create_ecom_core_overtime_types.rb
|
390
|
+
- db/migrate/20191118052213_create_ecom_core_unit_of_measures.rb
|
363
391
|
- db/migrate/20191119010518_create_ecom_core_task_template_types.rb
|
364
392
|
- db/migrate/20191119012030_create_ecom_core_task_templates.rb
|
365
393
|
- db/migrate/20191119013236_create_ecom_core_work_product_templates.rb
|
@@ -381,7 +409,7 @@ files:
|
|
381
409
|
- db/migrate/20191202222210_create_ecom_core_work_packages.rb
|
382
410
|
- db/migrate/20191202235434_create_ecom_core_work_products.rb
|
383
411
|
- db/migrate/20191207103729_create_ecom_core_crews.rb
|
384
|
-
- db/migrate/
|
412
|
+
- db/migrate/20191207103730_create_ecom_core_lookahead_plans.rb
|
385
413
|
- db/migrate/20191207103731_create_ecom_core_work_orders.rb
|
386
414
|
- db/migrate/20191207103735_create_ecom_core_tasks.rb
|
387
415
|
- db/migrate/20191210724614_create_ecom_core_task_resources.rb
|
@@ -424,6 +452,15 @@ files:
|
|
424
452
|
- db/migrate/20201013094100_create_ecom_core_crew_id_cards.rb
|
425
453
|
- db/migrate/20201113050953_create_ecom_core_task_inspection_checklists.rb
|
426
454
|
- db/migrate/20201113094302_create_ecom_core_task_template_inspection_checklists.rb
|
455
|
+
- db/migrate/20201121064916_create_ecom_core_unit_costs.rb
|
456
|
+
- db/migrate/20201122123227_create_ecom_core_lookahead_plan_backlogs.rb
|
457
|
+
- db/migrate/20201122170645_create_ecom_core_lookahead_plan_histories.rb
|
458
|
+
- db/migrate/20201122170724_create_ecom_core_lookahead_plan_task_progresses.rb
|
459
|
+
- db/migrate/20201123134917_create_ecom_core_task_attachments.rb
|
460
|
+
- db/migrate/20201124171642_create_ecom_core_lookahead_plan_review_times.rb
|
461
|
+
- db/migrate/20201125191158_create_ecom_core_work_item_resource_requirement_templates.rb
|
462
|
+
- db/migrate/20201126191334_create_ecom_core_resource_requisitions.rb
|
463
|
+
- db/migrate/20201126191349_create_ecom_core_resource_requisition_items.rb
|
427
464
|
- lib/ecom/core.rb
|
428
465
|
- lib/ecom/core/engine.rb
|
429
466
|
- lib/ecom/core/version.rb
|
@@ -460,6 +497,10 @@ files:
|
|
460
497
|
- spec/factories/ecom/core/inspection_checklists.rb
|
461
498
|
- spec/factories/ecom/core/job_cards.rb
|
462
499
|
- spec/factories/ecom/core/location_types.rb
|
500
|
+
- spec/factories/ecom/core/lookahead_plan_histories.rb
|
501
|
+
- spec/factories/ecom/core/lookahead_plan_review_times.rb
|
502
|
+
- spec/factories/ecom/core/lookahead_plan_task_progresses.rb
|
503
|
+
- spec/factories/ecom/core/lookahead_plans.rb
|
463
504
|
- spec/factories/ecom/core/lookups.rb
|
464
505
|
- spec/factories/ecom/core/maintenance_categories.rb
|
465
506
|
- spec/factories/ecom/core/maintenance_costs.rb
|
@@ -479,13 +520,14 @@ files:
|
|
479
520
|
- spec/factories/ecom/core/payment_details.rb
|
480
521
|
- spec/factories/ecom/core/payments.rb
|
481
522
|
- spec/factories/ecom/core/payrolls.rb
|
482
|
-
- spec/factories/ecom/core/plans.rb
|
483
523
|
- spec/factories/ecom/core/product_groups.rb
|
484
524
|
- spec/factories/ecom/core/product_types.rb
|
485
525
|
- spec/factories/ecom/core/project_templates.rb
|
486
526
|
- spec/factories/ecom/core/project_work_item_templates.rb
|
487
527
|
- spec/factories/ecom/core/projects.rb
|
488
528
|
- spec/factories/ecom/core/requested_items.rb
|
529
|
+
- spec/factories/ecom/core/resource_requisition_items.rb
|
530
|
+
- spec/factories/ecom/core/resource_requisitions.rb
|
489
531
|
- spec/factories/ecom/core/resource_types.rb
|
490
532
|
- spec/factories/ecom/core/schedule_settings.rb
|
491
533
|
- spec/factories/ecom/core/schedule_units.rb
|
@@ -494,14 +536,18 @@ files:
|
|
494
536
|
- spec/factories/ecom/core/stakeholder_types.rb
|
495
537
|
- spec/factories/ecom/core/stakeholders.rb
|
496
538
|
- spec/factories/ecom/core/takeoffs.rb
|
539
|
+
- spec/factories/ecom/core/task_attachments.rb
|
497
540
|
- spec/factories/ecom/core/task_inspection_checklists.rb
|
498
541
|
- spec/factories/ecom/core/task_resources.rb
|
499
542
|
- spec/factories/ecom/core/task_template_inspection_checklists.rb
|
500
543
|
- spec/factories/ecom/core/task_template_types.rb
|
501
544
|
- spec/factories/ecom/core/task_templates.rb
|
502
545
|
- spec/factories/ecom/core/tasks.rb
|
546
|
+
- spec/factories/ecom/core/unit_costs.rb
|
547
|
+
- spec/factories/ecom/core/unit_of_measures.rb
|
503
548
|
- spec/factories/ecom/core/user_roles.rb
|
504
549
|
- spec/factories/ecom/core/users.rb
|
550
|
+
- spec/factories/ecom/core/work_item_resource_requirement_templates.rb
|
505
551
|
- spec/factories/ecom/core/work_orders.rb
|
506
552
|
- spec/factories/ecom/core/work_packages.rb
|
507
553
|
- spec/factories/ecom/core/work_product_templates.rb
|
@@ -1,18 +0,0 @@
|
|
1
|
-
module Ecom
|
2
|
-
module Core
|
3
|
-
class Plan < ApplicationRecord
|
4
|
-
NEW = 'New'.freeze
|
5
|
-
READY_TO_START = 'Ready to start'.freeze
|
6
|
-
IN_PROGRESS = 'In Progress'.freeze
|
7
|
-
COMPLETED = 'Completed'.freeze
|
8
|
-
|
9
|
-
STATUSES = [NEW, READY_TO_START, IN_PROGRESS, COMPLETED].freeze
|
10
|
-
|
11
|
-
validates :name, :start_date, :end_date, :status, presence: true
|
12
|
-
|
13
|
-
validates :status, presence: true, inclusion: STATUSES
|
14
|
-
|
15
|
-
has_many :tasks
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
@@ -1,12 +0,0 @@
|
|
1
|
-
class CreateEcomCorePlans < ActiveRecord::Migration[6.0]
|
2
|
-
def change
|
3
|
-
create_table :ecom_core_plans do |t|
|
4
|
-
t.string :name, null: false
|
5
|
-
t.date :start_date, null: false
|
6
|
-
t.date :end_date, null: false
|
7
|
-
t.string :status, null: false, default: 'New'
|
8
|
-
|
9
|
-
t.timestamps
|
10
|
-
end
|
11
|
-
end
|
12
|
-
end
|