cats_core 1.5.2 → 1.5.4
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/commodities_controller.rb +2 -2
- data/app/controllers/cats/core/dispatch_authorizations_controller.rb +3 -3
- data/app/controllers/cats/core/dispatch_transactions_controller.rb +2 -2
- data/app/controllers/cats/core/lost_commodities_controller.rb +2 -2
- data/app/controllers/cats/core/receipt_authorizations_controller.rb +4 -3
- data/app/controllers/cats/core/receipt_transactions_controller.rb +3 -2
- data/app/controllers/cats/core/receipts_controller.rb +2 -2
- data/app/controllers/cats/core/stacks_controller.rb +3 -3
- data/app/models/cats/core/application_setting.rb +10 -0
- data/app/models/cats/core/authorization.rb +14 -8
- data/app/models/cats/core/commodity.rb +10 -0
- data/app/models/cats/core/dispatch.rb +3 -19
- data/app/models/cats/core/dispatch_authorization.rb +13 -0
- data/app/models/cats/core/dispatch_plan.rb +3 -1
- data/app/models/cats/core/dispatch_plan_item.rb +4 -3
- data/app/models/cats/core/dispatch_transaction.rb +23 -10
- data/app/models/cats/core/hub_authorization.rb +15 -9
- data/app/models/cats/core/lost_commodity.rb +29 -0
- data/app/models/cats/core/receipt.rb +22 -0
- data/app/models/cats/core/receipt_authorization.rb +5 -8
- data/app/models/cats/core/receipt_transaction.rb +13 -5
- data/app/models/cats/core/rhn_request.rb +25 -8
- data/app/models/cats/core/stack.rb +3 -0
- data/app/models/cats/core/stack_transaction.rb +1 -0
- data/app/models/cats/core/transaction.rb +4 -0
- data/app/models/cats/core/unit_conversion.rb +21 -3
- data/app/notifications/cats/core/dispatch_notification.rb +2 -0
- data/app/serializers/cats/core/commodity_serializer.rb +1 -1
- data/app/serializers/cats/core/dispatch_authorization_serializer.rb +2 -1
- data/app/serializers/cats/core/dispatch_plan_item_serializer.rb +1 -1
- data/app/serializers/cats/core/dispatch_transaction_serializer.rb +2 -1
- data/app/serializers/cats/core/lost_commodity_serializer.rb +1 -1
- data/app/serializers/cats/core/receipt_authorization_serializer.rb +1 -1
- data/app/serializers/cats/core/receipt_serializer.rb +2 -1
- data/app/serializers/cats/core/receipt_transaction_serializer.rb +1 -1
- data/app/serializers/cats/core/stack_serializer.rb +1 -1
- data/app/services/cats/core/authorization_service.rb +2 -0
- data/app/services/cats/core/dispatch_plan_service.rb +1 -0
- data/app/utils/cats/core/util.rb +15 -0
- data/app/utils/cats/core/validation_util.rb +20 -0
- data/db/migrate/20210717033223_create_cats_core_commodities.rb +5 -0
- data/db/migrate/20210717171101_create_cats_core_stacks.rb +4 -0
- data/db/migrate/20210718042755_create_cats_core_rhn_requests.rb +4 -0
- data/db/migrate/20210718045516_create_cats_core_dispatches.rb +1 -1
- data/db/migrate/20210718055414_create_cats_core_dispatch_authorizations.rb +4 -0
- data/db/migrate/20210718202957_create_cats_core_dispatch_transactions.rb +4 -0
- data/db/migrate/20210727074646_create_cats_core_receipt_authorizations.rb +4 -0
- data/db/migrate/20210727105834_create_cats_core_receipts.rb +4 -0
- data/db/migrate/20210728041505_create_cats_core_lost_commodities.rb +4 -0
- data/db/migrate/20210814160628_create_cats_core_receipt_transactions.rb +4 -0
- data/db/migrate/20210814175406_create_cats_core_stack_transactions.rb +4 -0
- data/db/migrate/20220209083928_create_cats_core_hub_authorizations.rb +4 -0
- data/db/migrate/20220923190857_create_cats_core_application_settings.rb +14 -0
- data/lib/cats/core/version.rb +1 -1
- data/spec/factories/cats/core/application_settings.rb +7 -0
- data/spec/factories/cats/core/commodities.rb +1 -0
- data/spec/factories/cats/core/dispatch_authorizations.rb +1 -0
- data/spec/factories/cats/core/dispatch_transactions.rb +5 -4
- data/spec/factories/cats/core/dispatches.rb +7 -1
- data/spec/factories/cats/core/hub_authorizations.rb +1 -0
- data/spec/factories/cats/core/lost_commodities.rb +1 -0
- data/spec/factories/cats/core/receipt_authorizations.rb +1 -0
- data/spec/factories/cats/core/receipt_transactions.rb +5 -1
- data/spec/factories/cats/core/receipts.rb +1 -0
- data/spec/factories/cats/core/rhn_requests.rb +1 -0
- data/spec/factories/cats/core/stack_transactions.rb +1 -0
- data/spec/factories/cats/core/stacks.rb +1 -0
- metadata +7 -2
@@ -3,13 +3,13 @@ module Cats
|
|
3
3
|
class RhnRequest < ApplicationRecord
|
4
4
|
include Dispatchable
|
5
5
|
|
6
|
-
|
7
|
-
|
8
|
-
# RESERVED = 'Reserved'.freeze
|
6
|
+
before_validation :set_unit
|
7
|
+
|
9
8
|
ALLOCATED = 'Allocated'.freeze
|
10
9
|
STATUSES << ALLOCATED
|
11
10
|
|
12
11
|
belongs_to :commodity
|
12
|
+
belongs_to :unit, class_name: 'Cats::Core::UnitOfMeasure'
|
13
13
|
|
14
14
|
validates :reference_no, :request_date, :quantity, presence: true
|
15
15
|
validates :reference_no, uniqueness: true
|
@@ -18,6 +18,15 @@ module Cats
|
|
18
18
|
validate :validate_commodity_status, :validate_quantity
|
19
19
|
|
20
20
|
delegate(:batch_no, to: :commodity, prefix: true)
|
21
|
+
delegate(:abbreviation, to: :unit, prefix: true)
|
22
|
+
|
23
|
+
def set_unit
|
24
|
+
return if unit
|
25
|
+
|
26
|
+
return unless commodity
|
27
|
+
|
28
|
+
self.unit = commodity.unit
|
29
|
+
end
|
21
30
|
|
22
31
|
def request_reference
|
23
32
|
reference_no
|
@@ -34,13 +43,21 @@ module Cats
|
|
34
43
|
end
|
35
44
|
|
36
45
|
def validate_quantity
|
37
|
-
return unless commodity && quantity
|
46
|
+
return unless commodity && quantity && unit
|
38
47
|
|
39
|
-
requested =
|
40
|
-
remaining = commodity.quantity - requested
|
48
|
+
requested = commodity.requested_quantity
|
41
49
|
|
42
|
-
remaining
|
43
|
-
|
50
|
+
remaining = commodity.quantity - requested
|
51
|
+
if quantity_was
|
52
|
+
additional = UnitConversion.convert(unit, commodity.unit_of_measure, quantity_was)
|
53
|
+
remaining += additional
|
54
|
+
end
|
55
|
+
new_quantity = UnitConversion.convert(unit, commodity.unit_of_measure, quantity)
|
56
|
+
return unless new_quantity > remaining
|
57
|
+
|
58
|
+
remaining = UnitConversion.convert(commodity.unit_of_measure, unit, remaining)
|
59
|
+
message = "exceeds commodity quantity. Maximum allowed is #{remaining} #{unit.abbreviation}"
|
60
|
+
errors.add(:quantity, message)
|
44
61
|
end
|
45
62
|
|
46
63
|
def approve
|
@@ -9,6 +9,8 @@ module Cats
|
|
9
9
|
|
10
10
|
belongs_to :commodity
|
11
11
|
belongs_to :store
|
12
|
+
belongs_to :unit, class_name: 'Cats::Core::UnitOfMeasure'
|
13
|
+
|
12
14
|
has_many :dispatch_transactions, foreign_key: :source_id
|
13
15
|
has_many :receipt_transactions, foreign_key: :destination_id
|
14
16
|
|
@@ -25,6 +27,7 @@ module Cats
|
|
25
27
|
unless: -> { store && (store.code == 'SUP-STORE' || store.code.start_with?('FDP-ST')) }
|
26
28
|
|
27
29
|
delegate :batch_no, to: :commodity, prefix: true
|
30
|
+
delegate :abbreviation, to: :unit, prefix: true
|
28
31
|
|
29
32
|
after_save :update_store_space
|
30
33
|
|
@@ -3,6 +3,7 @@ module Cats
|
|
3
3
|
class StackTransaction < Transaction
|
4
4
|
belongs_to :source, class_name: 'Cats::Core::Stack'
|
5
5
|
belongs_to :destination, class_name: 'Cats::Core::Stack'
|
6
|
+
belongs_to :unit, class_name: 'Cats::Core::UnitOfMeasure'
|
6
7
|
|
7
8
|
def validate_quantity
|
8
9
|
return unless quantity.present? && source.present?
|
@@ -9,10 +9,14 @@ module Cats
|
|
9
9
|
COMMITTED = 'Committed'.freeze
|
10
10
|
STATUSES = [DRAFT, COMMITTED].freeze
|
11
11
|
|
12
|
+
belongs_to :unit, class_name: 'Cats::Core::UnitOfMeasure'
|
13
|
+
|
12
14
|
validates :transaction_date, :quantity, :status, presence: true
|
13
15
|
validates :quantity, numericality: { greater_than: 0 }
|
14
16
|
validates :status, inclusion: { in: STATUSES }
|
15
17
|
|
18
|
+
delegate(:abbreviation, to: :unit, prefix: true)
|
19
|
+
|
16
20
|
def commit
|
17
21
|
raise(NotImplementedError, 'Method should be implemented in child classes.')
|
18
22
|
end
|
@@ -15,10 +15,28 @@ module Cats
|
|
15
15
|
return value if from == to
|
16
16
|
|
17
17
|
conversion = find_by(from: from, to: to)
|
18
|
-
|
19
|
-
raise(StandardError, error) unless conversion
|
18
|
+
return value * conversion.factor if conversion
|
20
19
|
|
21
|
-
|
20
|
+
# Check if there is reverse conversion entry defined
|
21
|
+
conversion = find_by(from: to, to: from)
|
22
|
+
unless conversion
|
23
|
+
raise(StandardError, "Conversion factor between #{from.abbreviation} and #{to.abbreviation} not found.")
|
24
|
+
end
|
25
|
+
|
26
|
+
value / conversion.factor
|
27
|
+
end
|
28
|
+
|
29
|
+
##
|
30
|
+
# This function calculates the sum of quantities of a list of objects with quantities and different
|
31
|
+
# units into one. The list can be a list of hub authorizations, RHN requests, dispatch plan items,
|
32
|
+
# etc ... This method assumes that quantity is represented by the attribute <tt>quantity</tt> and unit of
|
33
|
+
# measure is represented by the attribute <tt>unit</tt> for each object in the object list. If that is not
|
34
|
+
# true then one should create those two attributes as aliases in the respective models.
|
35
|
+
#
|
36
|
+
def self.harmonized_total(list, unit)
|
37
|
+
list.inject(0) do |res, obj|
|
38
|
+
res + UnitConversion.convert(obj.unit, unit, obj.quantity)
|
39
|
+
end
|
22
40
|
end
|
23
41
|
end
|
24
42
|
end
|
@@ -12,11 +12,13 @@ module Cats
|
|
12
12
|
date = Date.today
|
13
13
|
body = <<~BODY
|
14
14
|
Commodity with the following details has been dispatched to you:
|
15
|
+
Authorization no. = #{dispatch.dispatch_plan_item.reference_no}
|
15
16
|
Dispatch Ref. = #{dispatch.reference_no}
|
16
17
|
Batch No. = #{commodity.batch_no}
|
17
18
|
Commodity = #{commodity.name}
|
18
19
|
Allocated Quantity = #{dispatch.dispatch_plan_item.quantity}
|
19
20
|
Quantity = #{dispatch.quantity}
|
21
|
+
Unit = #{dispatch.unit.abbreviation}
|
20
22
|
Truck Plate No. = #{dispatch.plate_no}
|
21
23
|
Driver Name = #{dispatch.driver_name}
|
22
24
|
Driver Phone = #{dispatch.driver_phone}
|
@@ -3,7 +3,7 @@ module Cats
|
|
3
3
|
class CommoditySerializer < ActiveModel::Serializer
|
4
4
|
attributes :id, :name, :batch_no, :description, :unit_of_measure_id, :unit_abbreviation, :project_id,
|
5
5
|
:project_code, :quantity, :best_use_before, :volume_per_metric_ton, :arrival_status, :status,
|
6
|
-
:shipping_reference, :commodity_grade
|
6
|
+
:shipping_reference, :commodity_grade, :package_unit_id, :package_unit_abbreviation
|
7
7
|
end
|
8
8
|
end
|
9
9
|
end
|
@@ -2,7 +2,8 @@ module Cats
|
|
2
2
|
module Core
|
3
3
|
class DispatchAuthorizationSerializer < ActiveModel::Serializer
|
4
4
|
attributes :id, :dispatch_id, :dispatch_reference_no, :store_id, :store_name, :quantity, :authorized_by_id,
|
5
|
-
:authorizer_full_name, :dispatch_status, :plate_no, :driver_name, :status
|
5
|
+
:authorizer_full_name, :dispatch_status, :plate_no, :driver_name, :status, :unit_id,
|
6
|
+
:unit_abbreviation
|
6
7
|
end
|
7
8
|
end
|
8
9
|
end
|
@@ -4,7 +4,7 @@ module Cats
|
|
4
4
|
attributes :id, :reference_no, :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
6
|
:status, :commodity_id, :commodity_name, :commodity_batch_no, :unit_abbreviation,
|
7
|
-
:commodity_shipping_reference
|
7
|
+
:commodity_shipping_reference, :unit_id
|
8
8
|
end
|
9
9
|
end
|
10
10
|
end
|
@@ -1,7 +1,8 @@
|
|
1
1
|
module Cats
|
2
2
|
module Core
|
3
3
|
class DispatchTransactionSerializer < ActiveModel::Serializer
|
4
|
-
attributes :id, :source_id, :source_code, :dispatch_authorization_id, :quantity, :transaction_date, :status
|
4
|
+
attributes :id, :source_id, :source_code, :dispatch_authorization_id, :quantity, :transaction_date, :status,
|
5
|
+
:unit_id, :unit_abbreviation
|
5
6
|
end
|
6
7
|
end
|
7
8
|
end
|
@@ -3,7 +3,7 @@ module Cats
|
|
3
3
|
class ReceiptAuthorizationSerializer < ActiveModel::Serializer
|
4
4
|
attributes :id, :dispatch_id, :dispatch_reference_no, :store_id, :store_name, :quantity, :received_quantity,
|
5
5
|
:remark, :status, :authorized_by_id, :authorizer_full_name, :auth_details, :plate_no, :driver_name,
|
6
|
-
:dispatch_status
|
6
|
+
:dispatch_status, :unit_id, :unit_abbreviation
|
7
7
|
end
|
8
8
|
end
|
9
9
|
end
|
@@ -1,7 +1,8 @@
|
|
1
1
|
module Cats
|
2
2
|
module Core
|
3
3
|
class ReceiptSerializer < ActiveModel::Serializer
|
4
|
-
attributes :id, :receipt_authorization_id, :commodity_status, :commodity_grade, :quantity, :remark
|
4
|
+
attributes :id, :receipt_authorization_id, :commodity_status, :commodity_grade, :quantity, :remark,
|
5
|
+
:unit_id, :unit_abbreviation
|
5
6
|
end
|
6
7
|
end
|
7
8
|
end
|
@@ -2,7 +2,7 @@ module Cats
|
|
2
2
|
module Core
|
3
3
|
class ReceiptTransactionSerializer < ActiveModel::Serializer
|
4
4
|
attributes :id, :receipt_authorization_id, :dispatch_reference_no, :destination_id, :destination_code, :quantity,
|
5
|
-
:transaction_date, :status
|
5
|
+
:transaction_date, :status, :unit_id, :unit_abbreviation
|
6
6
|
end
|
7
7
|
end
|
8
8
|
end
|
@@ -2,7 +2,7 @@ module Cats
|
|
2
2
|
module Core
|
3
3
|
class StackSerializer < ActiveModel::Serializer
|
4
4
|
attributes :id, :code, :length, :width, :height, :start_x, :start_y, :commodity_id, :store_id, :commodity_status,
|
5
|
-
:stack_status, :quantity, :commodity_batch_no
|
5
|
+
:stack_status, :quantity, :commodity_batch_no, :unit_id, :unit_abbreviation
|
6
6
|
end
|
7
7
|
end
|
8
8
|
end
|
@@ -46,6 +46,7 @@ module Cats
|
|
46
46
|
start_x: 2,
|
47
47
|
start_y: 2,
|
48
48
|
commodity: commodity,
|
49
|
+
unit: commodity.package_unit,
|
49
50
|
store: authorization.store,
|
50
51
|
commodity_status: Commodity::GOOD,
|
51
52
|
stack_status: Stack::ALLOCATED
|
@@ -54,6 +55,7 @@ module Cats
|
|
54
55
|
receipt_authorization: authorization,
|
55
56
|
destination: stack,
|
56
57
|
quantity: authorization.received_quantity,
|
58
|
+
unit: authorization.unit,
|
57
59
|
status: Transaction::DRAFT,
|
58
60
|
transaction_date: Date.today
|
59
61
|
)
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module Cats
|
2
|
+
module Core
|
3
|
+
class Util
|
4
|
+
def self.send_chain(obj, arr)
|
5
|
+
arr.inject(obj) { |o, a| o.send(a) }
|
6
|
+
end
|
7
|
+
|
8
|
+
def self.generate_pin(obj)
|
9
|
+
pin = SecureRandom.hex(10)
|
10
|
+
obj.auth_details = { pin: pin, active: true, expires_at: DateTime.now + 24.hour }
|
11
|
+
obj.save!
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module Cats
|
2
|
+
module Core
|
3
|
+
class ValidationUtil
|
4
|
+
def self.validate_quantity(obj, parent_attr, relation, error_key, quantity_attribs = nil, unit_attribs = nil)
|
5
|
+
parent = obj.send(parent_attr)
|
6
|
+
quantity = quantity_attribs ? Util.send_chain(parent, quantity_attribs) : parent.quantity
|
7
|
+
unit = unit_attribs ? Util.send_chain(parent, unit_attribs) : parent.unit
|
8
|
+
total = UnitConversion.convert(unit, obj.unit, quantity)
|
9
|
+
used = UnitConversion.harmonized_total(relation, obj.unit)
|
10
|
+
used -= obj.quantity_was if obj.quantity_was
|
11
|
+
|
12
|
+
remaining = total - used
|
13
|
+
return unless obj.quantity > remaining
|
14
|
+
|
15
|
+
error = "exceeds #{error_key} quantity. Maximum allowed is #{remaining} #{obj.unit.abbreviation}"
|
16
|
+
obj.errors.add(:quantity, error)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -10,6 +10,11 @@ class CreateCatsCoreCommodities < ActiveRecord::Migration[6.1]
|
|
10
10
|
null: false,
|
11
11
|
index: { name: 'project_on_commodity_indx' },
|
12
12
|
foreign_key: { to_table: :cats_core_projects }
|
13
|
+
t.references :package_unit,
|
14
|
+
null: true,
|
15
|
+
index: { name: 'pu_on_commodity_indx' },
|
16
|
+
foreign_key: { to_table: :cats_core_unit_of_measures }
|
17
|
+
|
13
18
|
t.float :quantity, null: false
|
14
19
|
t.string :description
|
15
20
|
t.date :best_use_before, null: false
|
@@ -18,6 +18,10 @@ class CreateCatsCoreStacks < ActiveRecord::Migration[6.1]
|
|
18
18
|
t.string :commodity_status, null: false, default: 'Good'
|
19
19
|
t.string :stack_status, null: false, default: 'Reserved'
|
20
20
|
t.float :quantity, null: false, default: 0
|
21
|
+
t.references :unit,
|
22
|
+
null: false,
|
23
|
+
index: { name: 'unit_on_stack_indx' },
|
24
|
+
foreign_key: { to_table: :cats_core_unit_of_measures }
|
21
25
|
|
22
26
|
t.timestamps
|
23
27
|
end
|
@@ -7,6 +7,10 @@ class CreateCatsCoreRhnRequests < ActiveRecord::Migration[6.1]
|
|
7
7
|
index: { name: 'commodity_on_rhn_indx' },
|
8
8
|
foreign_key: { to_table: :cats_core_commodities }
|
9
9
|
t.float :quantity, null: false
|
10
|
+
t.references :unit,
|
11
|
+
null: false,
|
12
|
+
index: { name: 'unit_on_rhn_indx' },
|
13
|
+
foreign_key: { to_table: :cats_core_unit_of_measures }
|
10
14
|
t.date :request_date, null: false
|
11
15
|
t.string :requested_by
|
12
16
|
|
@@ -17,7 +17,7 @@ class CreateCatsCoreDispatches < ActiveRecord::Migration[6.1]
|
|
17
17
|
t.references :unit,
|
18
18
|
null: false,
|
19
19
|
index: { name: 'unit_on_dispatches_indx' },
|
20
|
-
foreign_key: { to_table: :cats_core_unit_of_measures }
|
20
|
+
foreign_key: { to_table: :cats_core_unit_of_measures }
|
21
21
|
t.string :commodity_status, null: false, default: 'Good'
|
22
22
|
t.string :remark
|
23
23
|
t.references :prepared_by,
|
@@ -10,6 +10,10 @@ class CreateCatsCoreDispatchAuthorizations < ActiveRecord::Migration[7.0]
|
|
10
10
|
index: { name: 'store_on_da_indx' },
|
11
11
|
foreign_key: { to_table: :cats_core_stores }
|
12
12
|
t.float :quantity, null: false
|
13
|
+
t.references :unit,
|
14
|
+
null: false,
|
15
|
+
index: { name: 'unit_on_da_indx' },
|
16
|
+
foreign_key: { to_table: :cats_core_unit_of_measures }
|
13
17
|
t.string :status, null: false, default: 'Authorized'
|
14
18
|
t.references :authorized_by,
|
15
19
|
null: false,
|
@@ -11,6 +11,10 @@ class CreateCatsCoreDispatchTransactions < ActiveRecord::Migration[6.1]
|
|
11
11
|
foreign_key: { to_table: :cats_core_dispatch_authorizations }
|
12
12
|
t.date :transaction_date, null: false
|
13
13
|
t.float :quantity, null: false
|
14
|
+
t.references :unit,
|
15
|
+
null: false,
|
16
|
+
index: { name: 'unit_on_dt_indx' },
|
17
|
+
foreign_key: { to_table: :cats_core_unit_of_measures }
|
14
18
|
t.string :status, null: false, default: 'Draft'
|
15
19
|
|
16
20
|
t.timestamps
|
@@ -10,6 +10,10 @@ class CreateCatsCoreReceiptAuthorizations < ActiveRecord::Migration[6.1]
|
|
10
10
|
index: { name: 'store_on_ra_indx' },
|
11
11
|
foreign_key: { to_table: :cats_core_stores }
|
12
12
|
t.float :quantity, null: false
|
13
|
+
t.references :unit,
|
14
|
+
null: false,
|
15
|
+
index: { name: 'r_unit_on_da_indx' },
|
16
|
+
foreign_key: { to_table: :cats_core_unit_of_measures }
|
13
17
|
t.float :received_quantity, null: false, default: 0
|
14
18
|
t.string :status, null: false, default: 'Authorized'
|
15
19
|
t.string :remark
|
@@ -8,6 +8,10 @@ class CreateCatsCoreReceipts < ActiveRecord::Migration[7.0]
|
|
8
8
|
t.string :commodity_status, null: false
|
9
9
|
t.string :commodity_grade
|
10
10
|
t.float :quantity, null: false
|
11
|
+
t.references :unit,
|
12
|
+
null: false,
|
13
|
+
index: { name: 'unit_on_receipts_indx' },
|
14
|
+
foreign_key: { to_table: :cats_core_unit_of_measures }
|
11
15
|
t.string :remark
|
12
16
|
|
13
17
|
t.timestamps
|
@@ -6,6 +6,10 @@ class CreateCatsCoreLostCommodities < ActiveRecord::Migration[7.0]
|
|
6
6
|
index: { name: 'ra_on_lc_indx' },
|
7
7
|
foreign_key: { to_table: :cats_core_receipt_authorizations }
|
8
8
|
t.float :quantity, null: false
|
9
|
+
t.references :unit,
|
10
|
+
null: false,
|
11
|
+
index: { name: 'unit_on_lc_indx' },
|
12
|
+
foreign_key: { to_table: :cats_core_unit_of_measures }
|
9
13
|
t.string :remark
|
10
14
|
|
11
15
|
t.timestamps
|
@@ -11,6 +11,10 @@ class CreateCatsCoreReceiptTransactions < ActiveRecord::Migration[6.1]
|
|
11
11
|
foreign_key: { to_table: :cats_core_stacks }
|
12
12
|
t.date :transaction_date, null: false
|
13
13
|
t.float :quantity, null: false
|
14
|
+
t.references :unit,
|
15
|
+
null: false,
|
16
|
+
index: { name: 'r_unit_on_dt_indx' },
|
17
|
+
foreign_key: { to_table: :cats_core_unit_of_measures }
|
14
18
|
t.string :status, null: false, default: 'Draft'
|
15
19
|
|
16
20
|
t.timestamps
|
@@ -11,6 +11,10 @@ class CreateCatsCoreStackTransactions < ActiveRecord::Migration[6.1]
|
|
11
11
|
foreign_key: { to_table: :cats_core_stacks }
|
12
12
|
t.date :transaction_date, null: false
|
13
13
|
t.float :quantity, null: false
|
14
|
+
t.references :unit,
|
15
|
+
null: false,
|
16
|
+
index: { name: 'unit_on_st_indx' },
|
17
|
+
foreign_key: { to_table: :cats_core_unit_of_measures }
|
14
18
|
t.string :status, null: false, default: 'Draft'
|
15
19
|
|
16
20
|
t.timestamps
|
@@ -10,6 +10,10 @@ class CreateCatsCoreHubAuthorizations < ActiveRecord::Migration[7.0]
|
|
10
10
|
index: { name: 'store_on_ha_indx' },
|
11
11
|
foreign_key: { to_table: :cats_core_stores }
|
12
12
|
t.float :quantity, null: false
|
13
|
+
t.references :unit,
|
14
|
+
null: false,
|
15
|
+
index: { name: 'unit_on_ha_indx' },
|
16
|
+
foreign_key: { to_table: :cats_core_unit_of_measures }
|
13
17
|
t.string :authorization_type, null: false
|
14
18
|
t.references :authorized_by,
|
15
19
|
null: false,
|
@@ -0,0 +1,14 @@
|
|
1
|
+
class CreateCatsCoreApplicationSettings < ActiveRecord::Migration[7.0]
|
2
|
+
def change
|
3
|
+
create_table :cats_core_application_settings do |t|
|
4
|
+
t.string :key, unique: true
|
5
|
+
t.string :value, null: false
|
6
|
+
t.references :application_module,
|
7
|
+
null: false,
|
8
|
+
index: { name: 'am_on_as_indx' },
|
9
|
+
foreign_key: { to_table: :cats_core_application_modules }
|
10
|
+
|
11
|
+
t.timestamps
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
data/lib/cats/core/version.rb
CHANGED
@@ -1,12 +1,13 @@
|
|
1
1
|
FactoryBot.define do
|
2
2
|
factory :dispatch_transaction, class: 'Cats::Core::DispatchTransaction' do
|
3
|
-
transient do
|
4
|
-
stack { create(:stack) }
|
5
|
-
end
|
6
|
-
source { stack }
|
7
3
|
association :dispatch_authorization, :approved
|
4
|
+
source do
|
5
|
+
create(:stack, unit: dispatch_authorization.unit)
|
6
|
+
end
|
7
|
+
|
8
8
|
transaction_date { Date.today }
|
9
9
|
quantity { 100 }
|
10
|
+
unit { dispatch_authorization.unit }
|
10
11
|
status { Cats::Core::Transaction::DRAFT }
|
11
12
|
end
|
12
13
|
end
|
@@ -10,7 +10,7 @@ FactoryBot.define do
|
|
10
10
|
create(:hub_authorization, dispatch_plan_item: plan_item, quantity: 100, store: stack.store)
|
11
11
|
plan_item
|
12
12
|
end
|
13
|
-
unit
|
13
|
+
unit { dispatch_plan_item.unit }
|
14
14
|
transporter
|
15
15
|
plate_no { FFaker::Name.name }
|
16
16
|
driver_name { FFaker::Name.name }
|
@@ -29,6 +29,8 @@ FactoryBot.define do
|
|
29
29
|
after(:create) do |dispatch, options|
|
30
30
|
authorization = create(:dispatch_authorization, dispatch: dispatch, store: options.stack.store)
|
31
31
|
dispatch.approve
|
32
|
+
options.stack.unit = dispatch.unit
|
33
|
+
options.stack.save!
|
32
34
|
create(:dispatch_transaction, dispatch_authorization: authorization, source: options.stack, quantity: 100)
|
33
35
|
end
|
34
36
|
end
|
@@ -37,6 +39,8 @@ FactoryBot.define do
|
|
37
39
|
after(:create) do |dispatch, options|
|
38
40
|
authorization = create(:dispatch_authorization, dispatch: dispatch, store: options.stack.store)
|
39
41
|
dispatch.approve
|
42
|
+
options.stack.unit = dispatch.unit
|
43
|
+
options.stack.save!
|
40
44
|
create(:dispatch_transaction, dispatch_authorization: authorization, source: options.stack, quantity: 100)
|
41
45
|
authorization.confirm
|
42
46
|
dispatch.quantity = 100
|
@@ -49,6 +53,8 @@ FactoryBot.define do
|
|
49
53
|
after(:create) do |dispatch, options|
|
50
54
|
authorization = create(:dispatch_authorization, dispatch: dispatch, store: options.stack.store)
|
51
55
|
dispatch.approve
|
56
|
+
options.stack.unit = dispatch.unit
|
57
|
+
options.stack.save!
|
52
58
|
create(:dispatch_transaction, dispatch_authorization: authorization, source: options.stack, quantity: 100)
|
53
59
|
authorization.confirm
|
54
60
|
dispatch.quantity = 100
|
@@ -1,9 +1,13 @@
|
|
1
1
|
FactoryBot.define do
|
2
2
|
factory :receipt_transaction, class: 'Cats::Core::ReceiptTransaction' do
|
3
3
|
association :receipt_authorization, :confirmed
|
4
|
-
destination
|
4
|
+
destination do
|
5
|
+
create(:stack, unit: receipt_authorization.unit)
|
6
|
+
end
|
7
|
+
|
5
8
|
transaction_date { Date.today }
|
6
9
|
quantity { 100 }
|
10
|
+
unit { receipt_authorization.unit }
|
7
11
|
status { Cats::Core::Transaction::DRAFT }
|
8
12
|
end
|
9
13
|
end
|