cats_core 1.4.2 → 1.4.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/controllers/cats/core/dispatch_plan_items_controller.rb +1 -1
- data/app/controllers/cats/core/dispatch_plans_controller.rb +1 -1
- data/app/controllers/cats/core/dispatch_transactions_controller.rb +1 -1
- data/app/controllers/cats/core/dispatches_controller.rb +1 -1
- data/app/controllers/cats/core/stacks_controller.rb +2 -2
- data/app/controllers/cats/core/unit_conversions_controller.rb +13 -0
- data/app/models/cats/core/commodity.rb +1 -1
- data/app/models/cats/core/dispatch_plan.rb +2 -4
- data/app/models/cats/core/dispatch_plan_item.rb +3 -1
- data/app/models/cats/core/location.rb +3 -1
- data/app/models/cats/core/transport_bid.rb +4 -0
- data/app/models/cats/core/transport_bid_item.rb +2 -0
- data/app/models/cats/core/transport_requisition.rb +28 -0
- data/app/models/cats/core/transport_requisition_detail.rb +12 -0
- data/app/models/cats/core/transport_requisition_item.rb +14 -0
- data/app/models/cats/core/unit_conversion.rb +25 -0
- data/app/notifications/cats/core/allocation_notification.rb +2 -2
- data/app/notifications/cats/core/dispatch_notification.rb +1 -1
- data/app/serializers/cats/core/commodity_serializer.rb +1 -1
- data/app/serializers/cats/core/dispatch_plan_item_serializer.rb +1 -1
- data/app/serializers/cats/core/dispatch_plan_serializer.rb +1 -2
- data/app/serializers/cats/core/unit_conversion_serializer.rb +7 -0
- data/app/services/cats/core/stack_service.rb +8 -8
- data/config/routes.rb +2 -1
- data/db/migrate/20210718043328_create_cats_core_dispatch_plans.rb +0 -5
- data/db/migrate/20210718043401_create_cats_core_dispatch_plan_items.rb +4 -0
- data/db/migrate/20211215124452_create_cats_core_transport_bid_items.rb +4 -0
- data/db/migrate/20220416143416_create_cats_core_unit_conversions.rb +19 -0
- data/db/migrate/20220417105839_create_cats_core_transport_requisitions.rb +26 -0
- data/db/migrate/20220417123835_create_cats_core_transport_requisition_items.rb +21 -0
- data/db/migrate/20220417151821_create_cats_core_transport_requisition_details.rb +17 -0
- data/lib/cats/core/version.rb +1 -1
- data/spec/factories/cats/core/dispatch_plan_items.rb +1 -0
- data/spec/factories/cats/core/dispatch_plans.rb +11 -3
- data/spec/factories/cats/core/locations.rb +13 -8
- data/spec/factories/cats/core/transport_bid_items.rb +1 -0
- data/spec/factories/cats/core/transport_requisition_details.rb +7 -0
- data/spec/factories/cats/core/transport_requisition_items.rb +8 -0
- data/spec/factories/cats/core/transport_requisitions.rb +10 -0
- data/spec/factories/cats/core/unit_conversions.rb +7 -0
- metadata +17 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1f6f8e286a7968b1159a3b0a7c9cb6e99f1637179ceb1d283d6b00f8c7e04d0b
|
4
|
+
data.tar.gz: a98a62f4250435c8611f1034e27e5dc0668ab1833ed8bdf42aa0b6ecdb47b4cd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5e8cfe8cacbf89d43b8a3552e2414d35081e2c4a92925f6c0a8678bc40822d34274961dd5bcb96c192e0b35ef6956cf709bea806676ff5dad7e84f73cae29888
|
7
|
+
data.tar.gz: 8d4e6d29a50e7ebc4fb2fa78dca753ca9d11ba90453c421ba77f7cf57819649e5027a40e76a298b14cdf20959f74b8fae2d57a265360a24d91ffe2e44df9134b
|
@@ -14,7 +14,7 @@ module Cats
|
|
14
14
|
# user to give us a source.
|
15
15
|
def create_allocation
|
16
16
|
dispatch = Dispatch.find(model_params[:dispatch_id])
|
17
|
-
commodity = dispatch.dispatch_plan_item.
|
17
|
+
commodity = dispatch.dispatch_plan_item.commodity
|
18
18
|
transaction = DispatchTransaction.new(model_params)
|
19
19
|
|
20
20
|
# Fetch supplier stack by commodity
|
@@ -13,9 +13,9 @@ module Cats
|
|
13
13
|
render json: { success: true, data: serialize(query.result) }
|
14
14
|
end
|
15
15
|
|
16
|
-
def
|
16
|
+
def items_for_location
|
17
17
|
service = StackService.new
|
18
|
-
commodities = service.
|
18
|
+
commodities = service.items_for_location(current_user)
|
19
19
|
render json: { success: true, data: serialize(commodities) }
|
20
20
|
end
|
21
21
|
|
@@ -38,7 +38,7 @@ module Cats
|
|
38
38
|
validates :arrival_status, presence: true, inclusion: { in: ARRIVAL_STATUSES }
|
39
39
|
validates :status, presence: true, inclusion: { in: STATUSES }
|
40
40
|
|
41
|
-
delegate(:abbreviation, to: :unit_of_measure, prefix:
|
41
|
+
delegate(:abbreviation, to: :unit_of_measure, prefix: 'unit')
|
42
42
|
delegate(:reference_no, to: :source, prefix: true)
|
43
43
|
|
44
44
|
def name
|
@@ -8,7 +8,6 @@ module Cats
|
|
8
8
|
belongs_to :dispatchable, polymorphic: true, optional: true
|
9
9
|
belongs_to :prepared_by, class_name: 'Cats::Core::User'
|
10
10
|
belongs_to :approved_by, class_name: 'Cats::Core::User', optional: true
|
11
|
-
belongs_to :commodity
|
12
11
|
|
13
12
|
has_many :dispatch_plan_items
|
14
13
|
|
@@ -16,7 +15,6 @@ module Cats
|
|
16
15
|
validates :status, inclusion: { in: STATUSES }
|
17
16
|
validate :validate_dispatchable, on: :create
|
18
17
|
|
19
|
-
delegate(:batch_no, :name, :quantity, to: :commodity, prefix: true)
|
20
18
|
delegate(:request_reference, to: :dispatchable, allow_nil: true)
|
21
19
|
delegate(:request_quantity, to: :dispatchable, allow_nil: true)
|
22
20
|
|
@@ -44,12 +42,12 @@ module Cats
|
|
44
42
|
|
45
43
|
# Raise error if the total dispatch plan quantity is not equal to the
|
46
44
|
# dispatchable quantity
|
47
|
-
if dispatchable && dispatchable.quantity != quantity
|
45
|
+
if dispatchable.instance_of?(RhnRequest) && dispatchable.quantity != quantity
|
48
46
|
raise(StandardError, 'Requested quantity and plan quantity do not match.')
|
49
47
|
end
|
50
48
|
|
51
49
|
self.status = APPROVED
|
52
|
-
dispatchable&.allocate
|
50
|
+
dispatchable&.allocate if dispatchable.instance_of?(RhnRequest)
|
53
51
|
save!
|
54
52
|
end
|
55
53
|
|
@@ -10,6 +10,8 @@ module Cats
|
|
10
10
|
belongs_to :source, class_name: 'Cats::Core::Location'
|
11
11
|
belongs_to :destination, class_name: 'Cats::Core::Location'
|
12
12
|
belongs_to :dispatch_plan
|
13
|
+
belongs_to :commodity
|
14
|
+
|
13
15
|
has_many :dispatches
|
14
16
|
has_many :hub_authorizations
|
15
17
|
|
@@ -18,7 +20,7 @@ module Cats
|
|
18
20
|
validates :status, presence: true, inclusion: { in: STATUSES }
|
19
21
|
|
20
22
|
delegate(:reference_no, to: :dispatch_plan, prefix: :plan, allow_nil: true)
|
21
|
-
delegate(:
|
23
|
+
delegate(:batch_no, :name, to: :commodity, prefix: true)
|
22
24
|
delegate(:name, to: :source, prefix: true)
|
23
25
|
delegate(:name, to: :destination, prefix: true)
|
24
26
|
delegate(:location_type, to: :source, prefix: true)
|
@@ -4,11 +4,12 @@ module Cats
|
|
4
4
|
REGION = 'Region'.freeze
|
5
5
|
ZONE = 'Zone'.freeze
|
6
6
|
WOREDA = 'Woreda'.freeze
|
7
|
+
FDP = 'Fdp'.freeze
|
7
8
|
KEBELE = 'Kebele'.freeze
|
8
9
|
HUB = 'Hub'.freeze
|
9
10
|
WAREHOUSE = 'Warehouse'.freeze
|
10
11
|
|
11
|
-
LOCATION_TYPES = [REGION, ZONE, WOREDA, KEBELE, HUB, WAREHOUSE].freeze
|
12
|
+
LOCATION_TYPES = [REGION, ZONE, WOREDA, KEBELE, HUB, WAREHOUSE, FDP].freeze
|
12
13
|
|
13
14
|
has_ancestry
|
14
15
|
|
@@ -23,6 +24,7 @@ module Cats
|
|
23
24
|
ZONE => [REGION],
|
24
25
|
WOREDA => [REGION, ZONE],
|
25
26
|
KEBELE => [REGION, ZONE, WOREDA],
|
27
|
+
FDP => [REGION, ZONE, WOREDA],
|
26
28
|
HUB => [REGION, ZONE, WOREDA, KEBELE],
|
27
29
|
WAREHOUSE => [REGION, ZONE, WOREDA, KEBELE, HUB]
|
28
30
|
}
|
@@ -3,6 +3,7 @@ module Cats
|
|
3
3
|
class TransportBidItem < ApplicationRecord
|
4
4
|
belongs_to :transport_bid
|
5
5
|
belongs_to :transport_plan_item
|
6
|
+
belongs_to :unit, class_name: 'Cats::Core::UnitOfMeasure'
|
6
7
|
|
7
8
|
has_many :offer_items
|
8
9
|
|
@@ -10,6 +11,7 @@ module Cats
|
|
10
11
|
validates :transport_plan_item_id, uniqueness: true
|
11
12
|
|
12
13
|
delegate(:reference_no, to: :transport_bid, prefix: true)
|
14
|
+
delegate(:abbreviation, to: :unit, prefix: true)
|
13
15
|
|
14
16
|
def route
|
15
17
|
transport_plan_item.route.name
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module Cats
|
2
|
+
module Core
|
3
|
+
class TransportRequisition < ApplicationRecord
|
4
|
+
DRAFT = 'Draft'.freeze
|
5
|
+
APPROVED = 'Approved'.freeze
|
6
|
+
STATUSES = [DRAFT, APPROVED].freeze
|
7
|
+
|
8
|
+
belongs_to :dispatch_plan
|
9
|
+
belongs_to :requested_by, class_name: 'Cats::Core::User'
|
10
|
+
belongs_to :approved_by, class_name: 'Cats::Core::User', optional: true
|
11
|
+
belongs_to :unit, class_name: 'Cats::Core::UnitOfMeasure'
|
12
|
+
|
13
|
+
has_many :transport_requisition_items
|
14
|
+
|
15
|
+
validates :reference_no, presence: true, uniqueness: true
|
16
|
+
validates :status, presence: true, inclusion: { in: STATUSES }
|
17
|
+
|
18
|
+
delegate(:full_name, to: :requested_by, prefix: 'requestor')
|
19
|
+
delegate(:full_name, to: :approved_by, prefix: 'approver')
|
20
|
+
delegate(:abbreviation, to: :unit, prefix: true)
|
21
|
+
|
22
|
+
def quantity
|
23
|
+
quantities = transport_requisition_items.map { |item| UnitConversion.convert(item.unit, unit, item.quantity) }
|
24
|
+
quantities.sum
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
module Cats
|
2
|
+
module Core
|
3
|
+
class TransportRequisitionDetail < ApplicationRecord
|
4
|
+
belongs_to :transport_requisition_item
|
5
|
+
belongs_to :fdp, class_name: 'Cats::Core::Location'
|
6
|
+
|
7
|
+
validates :quantity, presence: true, numericality: { greater_than: 0 }
|
8
|
+
|
9
|
+
delegate(:name, to: :fdp, prefix: true)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module Cats
|
2
|
+
module Core
|
3
|
+
class TransportRequisitionItem < ApplicationRecord
|
4
|
+
belongs_to :transport_requisition
|
5
|
+
belongs_to :dispatch_plan_item
|
6
|
+
belongs_to :unit, class_name: 'Cats::Core::UnitOfMeasure'
|
7
|
+
|
8
|
+
validates :quantity, presence: true, numericality: { greater_than: 0 }
|
9
|
+
|
10
|
+
delegate(:reference_no, to: :transport_requisition, prefix: 'requisition')
|
11
|
+
delegate(:abbreviation, to: :unit, prefix: true)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module Cats
|
2
|
+
module Core
|
3
|
+
class UnitConversion < ApplicationRecord
|
4
|
+
belongs_to :from, class_name: 'Cats::Core::UnitOfMeasure'
|
5
|
+
belongs_to :to, class_name: 'Cats::Core::UnitOfMeasure'
|
6
|
+
|
7
|
+
validates :factor, presence: true
|
8
|
+
validates :from_id, uniqueness: { scope: :to_id }
|
9
|
+
validates :factor, numericality: { greater_than: 0 }
|
10
|
+
|
11
|
+
delegate(:abbreviation, to: :from, prefix: true)
|
12
|
+
delegate(:abbreviation, to: :to, prefix: true)
|
13
|
+
|
14
|
+
def self.convert(from, to, value)
|
15
|
+
return value if from == to
|
16
|
+
|
17
|
+
conversion = find_by(from: from, to: to)
|
18
|
+
error = "Conversion factor from #{from.abbreviation} to #{to.abbreviation} not found."
|
19
|
+
raise(StandardError, error) unless conversion
|
20
|
+
|
21
|
+
value * conversion.factor
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -12,14 +12,14 @@ module Cats
|
|
12
12
|
|
13
13
|
def message
|
14
14
|
allocation_item = params[:allocation_item]
|
15
|
-
commodity = allocation_item.
|
15
|
+
commodity = allocation_item.commodity.name
|
16
16
|
source = allocation_item.source.name
|
17
17
|
destination = allocation_item.destination.name
|
18
18
|
title = "Allocation Notification - #{commodity}"
|
19
19
|
date = Date.today
|
20
20
|
body = <<~BODY
|
21
21
|
Commodity with the following specification has been allocated to you:
|
22
|
-
Batch No. = #{allocation_item.
|
22
|
+
Batch No. = #{allocation_item.commodity.batch_no}
|
23
23
|
Commodity = #{commodity}
|
24
24
|
Quantity = #{allocation_item.quantity}
|
25
25
|
The commodity is expected to be delivered from #{source} to #{destination}
|
@@ -7,7 +7,7 @@ module Cats
|
|
7
7
|
|
8
8
|
def message
|
9
9
|
dispatch = params[:dispatch]
|
10
|
-
commodity = dispatch.dispatch_plan_item.
|
10
|
+
commodity = dispatch.dispatch_plan_item.commodity
|
11
11
|
title = "Dispatch Notification - #{commodity.name}"
|
12
12
|
date = Date.today
|
13
13
|
body = <<~BODY
|
@@ -1,7 +1,7 @@
|
|
1
1
|
module Cats
|
2
2
|
module Core
|
3
3
|
class CommoditySerializer < ActiveModel::Serializer
|
4
|
-
attributes :id, :name, :batch_no, :description, :unit_of_measure_id, :
|
4
|
+
attributes :id, :name, :batch_no, :description, :unit_of_measure_id, :unit_abbreviation, :source_id,
|
5
5
|
:source_type, :source_reference_no, :quantity, :best_use_before, :volume_per_metric_ton,
|
6
6
|
:arrival_status, :status, :shipping_reference
|
7
7
|
end
|
@@ -3,7 +3,7 @@ module Cats
|
|
3
3
|
class DispatchPlanItemSerializer < ActiveModel::Serializer
|
4
4
|
attributes :id, :dispatch_plan_id, :plan_reference_no, :source_id, :source_name, :destination_id,
|
5
5
|
:destination_name, :quantity, :source_location_type, :destination_location_type, :commodity_status,
|
6
|
-
:status
|
6
|
+
:status, :commodity_id, :commodity_name, :commodity_batch_no
|
7
7
|
end
|
8
8
|
end
|
9
9
|
end
|
@@ -2,8 +2,7 @@ module Cats
|
|
2
2
|
module Core
|
3
3
|
class DispatchPlanSerializer < ActiveModel::Serializer
|
4
4
|
attributes :id, :reference_no, :status, :dispatchable_id, :dispatchable_type, :request_reference,
|
5
|
-
:request_quantity, :
|
6
|
-
:upstream
|
5
|
+
:request_quantity, :upstream
|
7
6
|
end
|
8
7
|
end
|
9
8
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
module Cats
|
2
2
|
module Core
|
3
3
|
class StackService
|
4
|
-
def
|
4
|
+
def items_for_location(user)
|
5
5
|
details = user.details
|
6
6
|
|
7
7
|
key_available = details.keys.any? { |key| %w[stores warehouse hub].include?(key) }
|
@@ -17,7 +17,7 @@ module Cats
|
|
17
17
|
|
18
18
|
allocation_items =
|
19
19
|
DispatchPlanItem
|
20
|
-
.joins(dispatch_plan
|
20
|
+
.joins(:dispatch_plan)
|
21
21
|
.where(destination: hub, dispatch_plan: { status: DispatchPlan::APPROVED })
|
22
22
|
|
23
23
|
allocation_items.map do |item|
|
@@ -26,10 +26,10 @@ module Cats
|
|
26
26
|
source: item.source.name,
|
27
27
|
destination: item.destination.name,
|
28
28
|
quantity: item.quantity,
|
29
|
-
batch_no: item.
|
30
|
-
commodity_id: item.
|
31
|
-
commodity_name: item.
|
32
|
-
unit: item.
|
29
|
+
batch_no: item.commodity.batch_no,
|
30
|
+
commodity_id: item.commodity_id,
|
31
|
+
commodity_name: item.commodity.name,
|
32
|
+
unit: item.commodity.unit_abbreviation
|
33
33
|
}
|
34
34
|
end
|
35
35
|
end
|
@@ -39,7 +39,7 @@ module Cats
|
|
39
39
|
warehouses = location.children
|
40
40
|
stores = Store.where(warehouse: warehouses)
|
41
41
|
|
42
|
-
commodity = receipt.dispatch.dispatch_plan_item.
|
42
|
+
commodity = receipt.dispatch.dispatch_plan_item.commodity
|
43
43
|
Stack.where(commodity: commodity, store: stores)
|
44
44
|
end
|
45
45
|
|
@@ -48,7 +48,7 @@ module Cats
|
|
48
48
|
warehouses = location.children
|
49
49
|
stores = Store.where(warehouse: warehouses)
|
50
50
|
|
51
|
-
commodity = dispatch.dispatch_plan_item.
|
51
|
+
commodity = dispatch.dispatch_plan_item.commodity
|
52
52
|
Stack.where(commodity: commodity, store: stores)
|
53
53
|
end
|
54
54
|
end
|
data/config/routes.rb
CHANGED
@@ -74,6 +74,7 @@ Cats::Core::Engine.routes.draw do
|
|
74
74
|
end
|
75
75
|
resources :currencies, except: %i[destroy]
|
76
76
|
resources :unit_of_measures, except: %i[destroy]
|
77
|
+
resources :unit_conversions, except: %i[destroy]
|
77
78
|
|
78
79
|
post '/transporters/filter', controller: :transporters, action: :filter
|
79
80
|
resources :transporters, except: %i[destroy]
|
@@ -136,7 +137,7 @@ Cats::Core::Engine.routes.draw do
|
|
136
137
|
|
137
138
|
get '/stores/:id/stacks', controller: :stacks, action: :index, as: :stacks_store
|
138
139
|
post '/stores/:id/stacks', controller: :stacks, action: :filter
|
139
|
-
get '/stacks/
|
140
|
+
get '/stacks/items_for_location', controller: :stacks, action: :items_for_location, as: :items_for_location
|
140
141
|
get '/receipts/:id/stacks', controller: :stacks, action: :receipt_stacks, as: :receipt_stacks
|
141
142
|
get '/dispatches/:id/stacks', controller: :stacks, action: :dispatch_stacks, as: :dispatch_stacks
|
142
143
|
resources :stacks, only: %i[show index create update]
|
@@ -6,11 +6,6 @@ class CreateCatsCoreDispatchPlans < ActiveRecord::Migration[6.1]
|
|
6
6
|
t.string :status, null: false, default: 'Draft'
|
7
7
|
t.references :dispatchable, polymorphic: true
|
8
8
|
t.boolean :upstream, null: false, default: false
|
9
|
-
t.references :commodity,
|
10
|
-
null: false,
|
11
|
-
index: { name: 'commodity_on_dp_indx' },
|
12
|
-
foreign_key: { to_table: :cats_core_commodities }
|
13
|
-
|
14
9
|
t.references :prepared_by,
|
15
10
|
null: false,
|
16
11
|
index: { name: 'pb_on_dp_indx' },
|
@@ -13,6 +13,10 @@ class CreateCatsCoreDispatchPlanItems < ActiveRecord::Migration[6.1]
|
|
13
13
|
null: false,
|
14
14
|
index: { name: 'dpi_on_destination_indx'},
|
15
15
|
foreign_key: { to_table: :cats_core_locations }
|
16
|
+
t.references :commodity,
|
17
|
+
null: false,
|
18
|
+
index: { name: 'commodity_on_dpi_indx' },
|
19
|
+
foreign_key: { to_table: :cats_core_commodities }
|
16
20
|
t.float :quantity, null: false
|
17
21
|
t.string :commodity_status, null: false, default: 'Good'
|
18
22
|
t.string :status, null: false, default: 'Unauthorized'
|
@@ -10,6 +10,10 @@ class CreateCatsCoreTransportBidItems < ActiveRecord::Migration[6.1]
|
|
10
10
|
index: { name: 'tpi_on_tbi_indx' },
|
11
11
|
foreign_key: { to_table: :cats_core_transport_plan_items }
|
12
12
|
t.float :quantity, null: false
|
13
|
+
t.references :unit,
|
14
|
+
null: false,
|
15
|
+
index: { name: 'unit_on_tbi_indx' },
|
16
|
+
foreign_key: { to_table: :cats_core_unit_of_measures }
|
13
17
|
|
14
18
|
t.timestamps
|
15
19
|
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
class CreateCatsCoreUnitConversions < ActiveRecord::Migration[7.0]
|
2
|
+
def change
|
3
|
+
create_table :cats_core_unit_conversions do |t|
|
4
|
+
t.references :from,
|
5
|
+
null: false,
|
6
|
+
index: { name: 'from_on_uc_indx' },
|
7
|
+
foreign_key: { to_table: :cats_core_unit_of_measures }
|
8
|
+
t.references :to,
|
9
|
+
null: false,
|
10
|
+
index: { name: 'to_on_uc_indx' },
|
11
|
+
foreign_key: { to_table: :cats_core_unit_of_measures }
|
12
|
+
t.float :factor, null: false
|
13
|
+
|
14
|
+
t.timestamps
|
15
|
+
end
|
16
|
+
|
17
|
+
add_index(:cats_core_unit_conversions, [:from_id, :to_id], unique: true)
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
class CreateCatsCoreTransportRequisitions < ActiveRecord::Migration[7.0]
|
2
|
+
def change
|
3
|
+
create_table :cats_core_transport_requisitions do |t|
|
4
|
+
t.references :dispatch_plan,
|
5
|
+
null: false,
|
6
|
+
index: { name: 'dp_on_tr_indx' },
|
7
|
+
foreign_key: { to_table: :cats_core_dispatch_plans }
|
8
|
+
t.string :reference_no, null: false, unique: true
|
9
|
+
t.references :requested_by,
|
10
|
+
null: false,
|
11
|
+
index: { name: 'rb_on_tr_indx' },
|
12
|
+
foreign_key: { to_table: :cats_core_users }
|
13
|
+
t.references :approved_by,
|
14
|
+
null: true,
|
15
|
+
index: { name: 'ab_on_tr_indx' },
|
16
|
+
foreign_key: { to_table: :cats_core_users }
|
17
|
+
t.string :status, null: false
|
18
|
+
t.references :unit,
|
19
|
+
null: false,
|
20
|
+
index: { name: 'unit_on_tr_indx' },
|
21
|
+
foreign_key: { to_table: :cats_core_unit_of_measures }
|
22
|
+
|
23
|
+
t.timestamps
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
class CreateCatsCoreTransportRequisitionItems < ActiveRecord::Migration[7.0]
|
2
|
+
def change
|
3
|
+
create_table :cats_core_transport_requisition_items do |t|
|
4
|
+
t.references :transport_requisition,
|
5
|
+
null: false,
|
6
|
+
index: { name: 'tr_on_tri_indx' },
|
7
|
+
foreign_key: { to_table: :cats_core_transport_requisitions }
|
8
|
+
t.references :dispatch_plan_item,
|
9
|
+
null: false,
|
10
|
+
index: { name: 'dpi_on_tri_indx' },
|
11
|
+
foreign_key: { to_table: :cats_core_dispatch_plan_items }
|
12
|
+
t.float :quantity, null: false
|
13
|
+
t.references :unit,
|
14
|
+
null: false,
|
15
|
+
index: { name: 'unit_on_tri_indx' },
|
16
|
+
foreign_key: { to_table: :cats_core_unit_of_measures }
|
17
|
+
|
18
|
+
t.timestamps
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
class CreateCatsCoreTransportRequisitionDetails < ActiveRecord::Migration[7.0]
|
2
|
+
def change
|
3
|
+
create_table :cats_core_transport_requisition_details do |t|
|
4
|
+
t.references :transport_requisition_item,
|
5
|
+
null: false,
|
6
|
+
index: { name: 'tri_on_trd_indx'},
|
7
|
+
foreign_key: { to_table: :cats_core_transport_requisition_items }
|
8
|
+
t.float :quantity, null: false
|
9
|
+
t.references :fdp,
|
10
|
+
null: false,
|
11
|
+
index: { name: 'fdp_on_tri_indx'},
|
12
|
+
foreign_key: { to_table: :cats_core_locations }
|
13
|
+
|
14
|
+
t.timestamps
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
data/lib/cats/core/version.rb
CHANGED
@@ -4,16 +4,24 @@ FactoryBot.define do
|
|
4
4
|
status { Cats::Core::DispatchPlan::DRAFT }
|
5
5
|
dispatchable { nil }
|
6
6
|
upstream { false }
|
7
|
-
commodity
|
8
7
|
prepared_by factory: :user
|
9
8
|
approved_by { nil }
|
10
9
|
|
11
10
|
trait :with_rhn do
|
12
|
-
dispatchable
|
11
|
+
dispatchable do
|
12
|
+
disp = create(:rhn_request)
|
13
|
+
disp.approve
|
14
|
+
disp
|
15
|
+
end
|
13
16
|
end
|
14
17
|
|
15
18
|
trait :with_monthly_plan do
|
16
|
-
dispatchable
|
19
|
+
dispatchable do
|
20
|
+
disp = create(:monthly_plan)
|
21
|
+
3.times { create(:monthly_plan_item, monthly_plan: disp) }
|
22
|
+
disp.approve
|
23
|
+
disp
|
24
|
+
end
|
17
25
|
end
|
18
26
|
end
|
19
27
|
end
|
@@ -6,23 +6,28 @@ FactoryBot.define do
|
|
6
6
|
ancestry { nil }
|
7
7
|
end
|
8
8
|
|
9
|
-
factory :
|
10
|
-
location_type { Cats::Core::Location::
|
9
|
+
factory :zone, parent: :location, class: 'Cats::Core::Location' do
|
10
|
+
location_type { Cats::Core::Location::ZONE }
|
11
11
|
parent
|
12
12
|
end
|
13
13
|
|
14
|
-
factory :
|
15
|
-
location_type { Cats::Core::Location::
|
14
|
+
factory :woreda, parent: :location, class: 'Cats::Core::Location' do
|
15
|
+
location_type { Cats::Core::Location::WOREDA }
|
16
16
|
parent
|
17
17
|
end
|
18
18
|
|
19
|
-
factory :
|
20
|
-
location_type { Cats::Core::Location::
|
19
|
+
factory :fdp, parent: :woreda, class: 'Cats::Core::Location' do
|
20
|
+
location_type { Cats::Core::Location::FDP }
|
21
21
|
parent
|
22
22
|
end
|
23
23
|
|
24
|
-
factory :
|
25
|
-
location_type { Cats::Core::Location::
|
24
|
+
factory :hub, parent: :location, class: 'Cats::Core::Location' do
|
25
|
+
location_type { Cats::Core::Location::HUB }
|
26
|
+
parent
|
27
|
+
end
|
28
|
+
|
29
|
+
factory :warehouse, parent: :location, class: 'Cats::Core::Location' do
|
30
|
+
location_type { Cats::Core::Location::WAREHOUSE }
|
26
31
|
parent
|
27
32
|
end
|
28
33
|
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
FactoryBot.define do
|
2
|
+
factory :transport_requisition, class: 'Cats::Core::TransportRequisition' do
|
3
|
+
dispatch_plan
|
4
|
+
reference_no { FFaker::Name.name }
|
5
|
+
requested_by factory: :user
|
6
|
+
approved_by factory: :user
|
7
|
+
status { Cats::Core::TransportRequisition::DRAFT }
|
8
|
+
unit factory: :unit_of_measure
|
9
|
+
end
|
10
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cats_core
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.4.
|
4
|
+
version: 1.4.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Henock L.
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-04-
|
11
|
+
date: 2022-04-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: active_model_serializers
|
@@ -251,6 +251,7 @@ files:
|
|
251
251
|
- app/controllers/cats/core/spaces_controller.rb
|
252
252
|
- app/controllers/cats/core/stacks_controller.rb
|
253
253
|
- app/controllers/cats/core/transporters_controller.rb
|
254
|
+
- app/controllers/cats/core/unit_conversions_controller.rb
|
254
255
|
- app/controllers/cats/core/unit_of_measures_controller.rb
|
255
256
|
- app/controllers/cats/core/users_controller.rb
|
256
257
|
- app/controllers/concerns/cats/core/common.rb
|
@@ -308,7 +309,11 @@ files:
|
|
308
309
|
- app/models/cats/core/transport_offer.rb
|
309
310
|
- app/models/cats/core/transport_plan.rb
|
310
311
|
- app/models/cats/core/transport_plan_item.rb
|
312
|
+
- app/models/cats/core/transport_requisition.rb
|
313
|
+
- app/models/cats/core/transport_requisition_detail.rb
|
314
|
+
- app/models/cats/core/transport_requisition_item.rb
|
311
315
|
- app/models/cats/core/transporter.rb
|
316
|
+
- app/models/cats/core/unit_conversion.rb
|
312
317
|
- app/models/cats/core/unit_of_measure.rb
|
313
318
|
- app/models/cats/core/user.rb
|
314
319
|
- app/models/concerns/cats/core/dispatchable.rb
|
@@ -332,6 +337,7 @@ files:
|
|
332
337
|
- app/serializers/cats/core/route_serializer.rb
|
333
338
|
- app/serializers/cats/core/stack_serializer.rb
|
334
339
|
- app/serializers/cats/core/transporter_serializer.rb
|
340
|
+
- app/serializers/cats/core/unit_conversion_serializer.rb
|
335
341
|
- app/serializers/cats/core/unit_of_measure_serializer.rb
|
336
342
|
- app/serializers/cats/core/user_serializer.rb
|
337
343
|
- app/services/cats/core/dispatch_plan_service.rb
|
@@ -400,6 +406,10 @@ files:
|
|
400
406
|
- db/migrate/20220107125025_create_cats_core_monthly_plan_items.rb
|
401
407
|
- db/migrate/20220107132433_create_cats_core_monthly_plan_item_details.rb
|
402
408
|
- db/migrate/20220209083928_create_cats_core_hub_authorizations.rb
|
409
|
+
- db/migrate/20220416143416_create_cats_core_unit_conversions.rb
|
410
|
+
- db/migrate/20220417105839_create_cats_core_transport_requisitions.rb
|
411
|
+
- db/migrate/20220417123835_create_cats_core_transport_requisition_items.rb
|
412
|
+
- db/migrate/20220417151821_create_cats_core_transport_requisition_details.rb
|
403
413
|
- lib/cats/core.rb
|
404
414
|
- lib/cats/core/engine.rb
|
405
415
|
- lib/cats/core/version.rb
|
@@ -456,7 +466,11 @@ files:
|
|
456
466
|
- spec/factories/cats/core/transport_offers.rb
|
457
467
|
- spec/factories/cats/core/transport_plan_items.rb
|
458
468
|
- spec/factories/cats/core/transport_plans.rb
|
469
|
+
- spec/factories/cats/core/transport_requisition_details.rb
|
470
|
+
- spec/factories/cats/core/transport_requisition_items.rb
|
471
|
+
- spec/factories/cats/core/transport_requisitions.rb
|
459
472
|
- spec/factories/cats/core/transporters.rb
|
473
|
+
- spec/factories/cats/core/unit_conversions.rb
|
460
474
|
- spec/factories/cats/core/unit_of_measures.rb
|
461
475
|
- spec/factories/cats/core/users.rb
|
462
476
|
homepage: http://cats.ndrmcapps.org
|
@@ -482,7 +496,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
482
496
|
- !ruby/object:Gem::Version
|
483
497
|
version: '0'
|
484
498
|
requirements: []
|
485
|
-
rubygems_version: 3.3.
|
499
|
+
rubygems_version: 3.3.7
|
486
500
|
signing_key:
|
487
501
|
specification_version: 4
|
488
502
|
summary: Core module for CATS applications
|