cats_core 1.4.9 → 1.4.12
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/models/cats/core/transport_order.rb +25 -0
- data/app/models/cats/core/transport_order_item.rb +25 -0
- data/app/models/cats/core/transport_requisition.rb +21 -5
- data/db/migrate/20220506082329_create_cats_core_transport_orders.rb +22 -0
- data/db/migrate/20220506083042_create_cats_core_transport_order_items.rb +32 -0
- data/lib/cats/core/version.rb +1 -1
- data/spec/factories/cats/core/transport_order_items.rb +9 -0
- data/spec/factories/cats/core/transport_orders.rb +9 -0
- data/spec/factories/cats/core/transport_requisitions.rb +7 -0
- metadata +8 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3724badb244476dc73d7c35fac9971114160be9781ba3a386f2d35ef70226324
|
4
|
+
data.tar.gz: 9f29cd5757d75472e03f8baa3bd4421fc78109d50612955ebdd666a354c17ca6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e5a859815e6420692ab833b54372ae47c0fbf835b8384c8d18421eadb79125deb3a2c91ae740dfb9abe1817bf7e01e45cc14312e94d95aaadaade3e767a64dfe
|
7
|
+
data.tar.gz: a85113ab315551f8684accc9d21345b684d9762c73bfc44538bf6d8ac30a4d8e1f2aea24620fc0ebdee000f97de0ae18745b72a28a68cb6f44f6e3b9b184b209
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module Cats
|
2
|
+
module Core
|
3
|
+
class TransportOrder < ApplicationRecord
|
4
|
+
DRAFT = 'Draft'.freeze
|
5
|
+
APPROVED = 'Approved'.freeze
|
6
|
+
STATUSES = [DRAFT, APPROVED].freeze
|
7
|
+
|
8
|
+
belongs_to :transport_requisition
|
9
|
+
belongs_to :prepared_by, class_name: 'Cats::Core::User'
|
10
|
+
belongs_to :approved_by, class_name: 'Cats::Core::User', optional: true
|
11
|
+
|
12
|
+
validates :status, presence: true, inclusion: { in: STATUSES }
|
13
|
+
validates :order_date, presence: true
|
14
|
+
validate :validate_against_requisition
|
15
|
+
|
16
|
+
def validate_against_requisition
|
17
|
+
return unless transport_requisition
|
18
|
+
|
19
|
+
return if transport_requisition.approved?
|
20
|
+
|
21
|
+
errors.add(:transport_requisition, 'is not approved.')
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module Cats
|
2
|
+
module Core
|
3
|
+
class TransportOrderItem < ApplicationRecord
|
4
|
+
belongs_to :transport_order
|
5
|
+
belongs_to :transporter
|
6
|
+
belongs_to :transport_requisition_item
|
7
|
+
belongs_to :transport_contract, optional: true
|
8
|
+
|
9
|
+
validates :valid_for, presence: true
|
10
|
+
validates :valid_for, numericality: { greater_than: 0 }
|
11
|
+
validates :transport_requisition_item_id, uniqueness: true
|
12
|
+
validate :validate_requisition
|
13
|
+
|
14
|
+
def validate_requisition
|
15
|
+
return unless transport_requisition_item
|
16
|
+
|
17
|
+
return unless transport_order
|
18
|
+
|
19
|
+
return if transport_order.transport_requisition_id == transport_requisition_item.transport_requisition_id
|
20
|
+
|
21
|
+
errors.add(:transport_requisition_item, 'does not belong to the requisition of the order.')
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -14,6 +14,7 @@ module Cats
|
|
14
14
|
|
15
15
|
validates :reference_no, presence: true, uniqueness: true
|
16
16
|
validates :status, presence: true, inclusion: { in: STATUSES }
|
17
|
+
validate :validate_status
|
17
18
|
|
18
19
|
delegate(:full_name, to: :requested_by, prefix: 'requestor')
|
19
20
|
delegate(:full_name, to: :approved_by, prefix: 'approver', allow_nil: true)
|
@@ -28,13 +29,28 @@ module Cats
|
|
28
29
|
def approve
|
29
30
|
raise(StandardError, 'Transport requisition is already approved.') if status == APPROVED
|
30
31
|
|
31
|
-
|
32
|
-
|
32
|
+
begin
|
33
|
+
self.status = APPROVED
|
34
|
+
save!
|
35
|
+
self
|
36
|
+
rescue ActiveRecord::RecordInvalid => e
|
37
|
+
error = e.record.errors.full_messages_for(:status)[0]
|
38
|
+
raise(StandardError, error)
|
33
39
|
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def approved?
|
43
|
+
status == APPROVED
|
44
|
+
end
|
45
|
+
|
46
|
+
def validate_status
|
47
|
+
return unless status
|
48
|
+
|
49
|
+
return if status == DRAFT
|
50
|
+
|
51
|
+
return if transport_requisition_items.count.positive?
|
34
52
|
|
35
|
-
|
36
|
-
save!
|
37
|
-
self
|
53
|
+
errors.add(:status, 'cannot be set to "APPROVED" because the requisition has no items.') if status == APPROVED
|
38
54
|
end
|
39
55
|
end
|
40
56
|
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
class CreateCatsCoreTransportOrders < ActiveRecord::Migration[7.0]
|
2
|
+
def change
|
3
|
+
create_table :cats_core_transport_orders do |t|
|
4
|
+
t.references :transport_requisition,
|
5
|
+
null: false,
|
6
|
+
index: { name: 'tr_on_to_indx' },
|
7
|
+
foreign_key: { to_table: :cats_core_transport_requisitions }
|
8
|
+
t.references :prepared_by,
|
9
|
+
null: false,
|
10
|
+
index: { name: 'pb_on_to_indx' },
|
11
|
+
foreign_key: { to_table: :cats_core_users }
|
12
|
+
t.references :approved_by,
|
13
|
+
null: true,
|
14
|
+
index: { name: 'ab_on_to_indx' },
|
15
|
+
foreign_key: { to_table: :cats_core_users }
|
16
|
+
t.date :order_date, null: false
|
17
|
+
t.string :status, null: false, default: 'Draft'
|
18
|
+
|
19
|
+
t.timestamps
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
class CreateCatsCoreTransportOrderItems < ActiveRecord::Migration[7.0]
|
2
|
+
def change
|
3
|
+
create_table :cats_core_transport_order_items do |t|
|
4
|
+
t.references :transport_order,
|
5
|
+
null: false,
|
6
|
+
index: { name: 'to_on_toi_indx' },
|
7
|
+
foreign_key: { to_table: :cats_core_transport_orders }
|
8
|
+
t.references :transporter,
|
9
|
+
null: false,
|
10
|
+
index: { name: 'transporter_on_toi_indx' },
|
11
|
+
foreign_key: { to_table: :cats_core_transporters }
|
12
|
+
t.references :transport_contract,
|
13
|
+
null: true,
|
14
|
+
index: { name: 'tc_on_toi_indx' },
|
15
|
+
foreign_key: { to_table: :cats_core_transport_contracts }
|
16
|
+
t.references :transport_requisition_item,
|
17
|
+
null: false,
|
18
|
+
index: { name: 'tri_on_toi_indx' },
|
19
|
+
foreign_key: { to_table: :cats_core_transport_requisition_items }
|
20
|
+
t.integer :valid_for, null: false, default: 10
|
21
|
+
|
22
|
+
t.timestamps
|
23
|
+
end
|
24
|
+
|
25
|
+
add_index(
|
26
|
+
:cats_core_transport_order_items,
|
27
|
+
:transport_requisition_item_id,
|
28
|
+
unique: true,
|
29
|
+
name: 'tri_on_toi_uniq_indx'
|
30
|
+
)
|
31
|
+
end
|
32
|
+
end
|
data/lib/cats/core/version.rb
CHANGED
@@ -0,0 +1,9 @@
|
|
1
|
+
FactoryBot.define do
|
2
|
+
factory :transport_order_item, class: 'Cats::Core::TransportOrderItem' do
|
3
|
+
transport_order
|
4
|
+
transporter
|
5
|
+
transport_contract
|
6
|
+
transport_requisition_item { transport_order.transport_requisition.transport_requisition_items.first }
|
7
|
+
valid_for { 10 }
|
8
|
+
end
|
9
|
+
end
|
@@ -0,0 +1,9 @@
|
|
1
|
+
FactoryBot.define do
|
2
|
+
factory :transport_order, class: 'Cats::Core::TransportOrder' do
|
3
|
+
association :transport_requisition, :approved
|
4
|
+
prepared_by factory: :user
|
5
|
+
approved_by factory: :user
|
6
|
+
order_date { Date.today }
|
7
|
+
status { Cats::Core::TransportOrder::DRAFT }
|
8
|
+
end
|
9
|
+
end
|
@@ -6,5 +6,12 @@ FactoryBot.define do
|
|
6
6
|
approved_by factory: :user
|
7
7
|
status { Cats::Core::TransportRequisition::DRAFT }
|
8
8
|
unit factory: :unit_of_measure
|
9
|
+
|
10
|
+
trait :approved do
|
11
|
+
after(:create) do |requisition|
|
12
|
+
create(:transport_requisition_item, transport_requisition: requisition)
|
13
|
+
requisition.approve
|
14
|
+
end
|
15
|
+
end
|
9
16
|
end
|
10
17
|
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.12
|
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-
|
11
|
+
date: 2022-05-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: active_model_serializers
|
@@ -307,6 +307,8 @@ files:
|
|
307
307
|
- app/models/cats/core/transport_bid_item.rb
|
308
308
|
- app/models/cats/core/transport_contract.rb
|
309
309
|
- app/models/cats/core/transport_offer.rb
|
310
|
+
- app/models/cats/core/transport_order.rb
|
311
|
+
- app/models/cats/core/transport_order_item.rb
|
310
312
|
- app/models/cats/core/transport_plan.rb
|
311
313
|
- app/models/cats/core/transport_plan_item.rb
|
312
314
|
- app/models/cats/core/transport_requisition.rb
|
@@ -410,6 +412,8 @@ files:
|
|
410
412
|
- db/migrate/20220417105839_create_cats_core_transport_requisitions.rb
|
411
413
|
- db/migrate/20220417123835_create_cats_core_transport_requisition_items.rb
|
412
414
|
- db/migrate/20220417151821_create_cats_core_transport_requisition_details.rb
|
415
|
+
- db/migrate/20220506082329_create_cats_core_transport_orders.rb
|
416
|
+
- db/migrate/20220506083042_create_cats_core_transport_order_items.rb
|
413
417
|
- lib/cats/core.rb
|
414
418
|
- lib/cats/core/engine.rb
|
415
419
|
- lib/cats/core/version.rb
|
@@ -464,6 +468,8 @@ files:
|
|
464
468
|
- spec/factories/cats/core/transport_bids.rb
|
465
469
|
- spec/factories/cats/core/transport_contracts.rb
|
466
470
|
- spec/factories/cats/core/transport_offers.rb
|
471
|
+
- spec/factories/cats/core/transport_order_items.rb
|
472
|
+
- spec/factories/cats/core/transport_orders.rb
|
467
473
|
- spec/factories/cats/core/transport_plan_items.rb
|
468
474
|
- spec/factories/cats/core/transport_plans.rb
|
469
475
|
- spec/factories/cats/core/transport_requisition_details.rb
|