ecom_core 1.2.35 → 1.3.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|