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