cats_core 1.2.28 → 1.2.32

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3fb2a7abf04c5411df9257ef309f1a6af300e3a2bc1788d0967077b6e09f27ec
4
- data.tar.gz: 1a4bc874a3ea71f92ac6de37f5f826c3095f326ca808527705850d5f2d3a3f08
3
+ metadata.gz: 28dccafb9f531a0e9c13331b7a3c0cb807ddfeb42504bb1b484e58837c852219
4
+ data.tar.gz: 92f65296583c53ef16ac6e07fc849b6541fa5d69ba0f8d5f1b2920b16bdd2924
5
5
  SHA512:
6
- metadata.gz: d9e67913462314e8969df71f63e25ad5866e4274755c8c0bf88c24654d9be70ede9c99b5ae4e8363e87089eb792a54c6506ae622ff217ad97eff6b292b8fb8ef
7
- data.tar.gz: d8c7d1ffae92d0297b0b23ea2a3032fc08e4859ba0ea172a46ac8de2ca3ebc1644cc9172c2b7fc8a8cabeb4cafb161947ef5f667fd09b2764c44f94f4208cc22
6
+ metadata.gz: aa1f417bf917a6d670ac4e787343b520650f46d05d43ec77cd0b747484b3114abee8f03136b9aa71f247b188dfc4a062c6710c8dda44f29b4ba47f20dc271ed5
7
+ data.tar.gz: 8583a0ba4f7354469161c43e95fe150a3156b4ec3c1c08b0f0ed1f44924e7b7a620a763dd02c134b6a0c8c0ce34b6f2075e21d0209e43e3f5b392365b341f834
@@ -6,7 +6,7 @@ module Cats
6
6
  private
7
7
 
8
8
  def model_params
9
- params.require(:payload).permit(:source_id, :destination_id)
9
+ params.require(:payload).permit(:region_id, :source_id, :destination_id)
10
10
  end
11
11
  end
12
12
  end
@@ -8,6 +8,8 @@ module Cats
8
8
  validates :price, presence: true, numericality: { greater_than: 0 }
9
9
 
10
10
  delegate(:name, to: :route, prefix: true)
11
+ delegate(:contract_no, to: :transport_contract, prefix: false)
12
+ delegate(:name, to: :unit, prefix: true)
11
13
  end
12
14
  end
13
15
  end
@@ -0,0 +1,26 @@
1
+ module Cats
2
+ module Core
3
+ class OfferItem < ApplicationRecord
4
+ belongs_to :transport_offer
5
+ belongs_to :transport_bid_item
6
+
7
+ validates :price, presence: true, numericality: { greater_than: 0 }
8
+ validates :rank, numericality: { greater_than: 0 }, allow_nil: true
9
+ validate :validate_rank_is_set_for_winner
10
+
11
+ def mark_as_winner(rank)
12
+ raise(StandardError, 'Offer item already marked as winner.') if winner
13
+
14
+ self.rank = rank
15
+ self.winner = true
16
+ save!
17
+ end
18
+
19
+ def validate_rank_is_set_for_winner
20
+ return if rank
21
+
22
+ errors.add(:winner, 'cannot be set for a non-ranked offer item.') if winner
23
+ end
24
+ end
25
+ end
26
+ end
@@ -3,16 +3,36 @@ module Cats
3
3
  class Route < ApplicationRecord
4
4
  before_validation :set_name, on: %i[create update]
5
5
 
6
+ belongs_to :region, class_name: 'Cats::Core::Location'
6
7
  belongs_to :source, class_name: 'Cats::Core::Location'
7
8
  belongs_to :destination, class_name: 'Cats::Core::Location'
8
9
 
9
10
  validates :source_id, uniqueness: { scope: :destination_id }
11
+ validate :validate_region, :validate_source, :validate_destination
10
12
 
11
13
  def set_name
12
14
  return unless source && destination
13
15
 
14
16
  self.name = "#{source.name} - #{destination.name}"
15
17
  end
18
+
19
+ def validate_region
20
+ return unless region
21
+
22
+ errors.add(:region, 'should be a valid region.') unless region.location_type == Location::REGION
23
+ end
24
+
25
+ def validate_source
26
+ return unless source
27
+
28
+ errors.add(:source, 'cannot be a region.') if source.location_type == Location::REGION
29
+ end
30
+
31
+ def validate_destination
32
+ return unless destination
33
+
34
+ errors.add(:destination, 'cannot be a region.') if destination.location_type == Location::REGION
35
+ end
16
36
  end
17
37
  end
18
38
  end
@@ -8,13 +8,22 @@ module Cats
8
8
  WINNERS_DECLARED = 'Winner Declared'.freeze
9
9
  STATUSES = [NEW, OPEN, CLOSED, RANKED, WINNERS_DECLARED].freeze
10
10
 
11
+ # Bid types
12
+ REGIONAL = 'Regional'.freeze
13
+ NON_REGIONAL = 'Non Regional'.freeze
14
+ BID_TYPES = [REGIONAL, NON_REGIONAL].freeze
15
+
11
16
  has_many :transport_bid_items
12
- has_many :transport_offers, through: :transport_bid_items
17
+ has_many :transport_offers
18
+ belongs_to :region, class_name: 'Cats::Core::Location', optional: true
13
19
 
14
20
  validates :reference_no, presence: true, uniqueness: true
15
- validates :start_date, :end_date, :status, presence: true
21
+ validates :start_date, :end_date, :status, :bid_type, :bid_bond_amount, presence: true
22
+ validates :bid_bond_amount, numericality: { greater_than_or_equal_to: 0 }
16
23
  validates :status, inclusion: { in: STATUSES }
24
+ validates :bid_type, inclusion: { in: BID_TYPES }
17
25
  validate :validate_start_date_against_end_date
26
+ validate :validate_region
18
27
 
19
28
  def validate_start_date_against_end_date
20
29
  return unless start_date && end_date
@@ -22,6 +31,16 @@ module Cats
22
31
  errors.add(:start_date, 'should be before end date.') if start_date >= end_date
23
32
  end
24
33
 
34
+ def validate_region
35
+ return unless bid_type
36
+
37
+ errors.add(:region, 'should be null.') if bid_type == NON_REGIONAL && region
38
+
39
+ errors.add(:region, 'should not be null.') if bid_type == REGIONAL && !region
40
+
41
+ errors.add(:region, 'is not valid.') if region && region.location_type != Location::REGION
42
+ end
43
+
25
44
  def open
26
45
  raise(StandardError, 'Bid is already open.') if status == OPEN
27
46
 
@@ -5,7 +5,7 @@ module Cats
5
5
  belongs_to :route
6
6
  belongs_to :unit, class_name: 'Cats::Core::UnitOfMeasure', optional: true
7
7
 
8
- has_many :transport_offers
8
+ has_many :offer_items
9
9
 
10
10
  validates :quantity, presence: true, numericality: { greater_than: 0 }
11
11
 
@@ -4,6 +4,7 @@ module Cats
4
4
  belongs_to :region, class_name: 'Cats::Core::Location'
5
5
  belongs_to :transporter
6
6
  belongs_to :transport_bid
7
+ has_many :contract_items
7
8
 
8
9
  validates :contract_no, presence: true, uniqueness: true
9
10
  validates :contract_date, :expires_on, presence: true
@@ -1,28 +1,15 @@
1
1
  module Cats
2
2
  module Core
3
3
  class TransportOffer < ApplicationRecord
4
- belongs_to :transport_bid_item
4
+ belongs_to :transport_bid
5
5
  belongs_to :transporter
6
+ has_many :offer_items
6
7
 
7
- validates :price, presence: true, numericality: { greater_than: 0 }
8
- validates :rank, numericality: { greater_than: 0 }, allow_nil: true
9
- validate :validate_rank_is_set_for_winner
8
+ validates :offer_date, :bid_bond_amount, presence: true
9
+ validates :bid_bond_amount, numericality: { greater_than_or_equal_to: 0 }
10
10
 
11
11
  delegate(:name, to: :transporter, prefix: true)
12
-
13
- def mark_as_winner(rank)
14
- raise(StandardError, 'Offer already marked as winner.') if winner
15
-
16
- self.rank = rank
17
- self.winner = true
18
- save!
19
- end
20
-
21
- def validate_rank_is_set_for_winner
22
- return if rank
23
-
24
- errors.add(:winner, 'cannot be set for a non-ranked offer.') if winner
25
- end
12
+ delegate(:reference_no, to: :transport_bid, prefix: 'bid')
26
13
  end
27
14
  end
28
15
  end
@@ -2,6 +2,10 @@ class CreateCatsCoreRoutes < ActiveRecord::Migration[6.1]
2
2
  def change
3
3
  create_table :cats_core_routes do |t|
4
4
  t.string :name, null: false
5
+ t.references :region,
6
+ null: false,
7
+ index: { name: 'region_on_routes_indx' },
8
+ foreign_key: { to_table: :cats_core_locations }
5
9
  t.references :source,
6
10
  null: false,
7
11
  index: { name: 'source_on_routes_indx' },
@@ -13,7 +17,7 @@ class CreateCatsCoreRoutes < ActiveRecord::Migration[6.1]
13
17
 
14
18
  t.timestamps
15
19
 
16
- t.index [:source_id, :destination_id], unique: true
20
+ t.index %i[source_id destination_id], unique: true
17
21
  end
18
22
  end
19
23
  end
@@ -6,6 +6,12 @@ class CreateCatsCoreTransportBids < ActiveRecord::Migration[6.1]
6
6
  t.date :start_date, null: false
7
7
  t.date :end_date, null: false
8
8
  t.string :status, null: false, default: 'New'
9
+ t.string :bid_type, null: false, default: 'Regional'
10
+ t.references :region,
11
+ null: true,
12
+ index: { name: 'region_on_tb_indx' },
13
+ foreign_key: { to_table: :cats_core_locations }
14
+ t.float :bid_bond_amount, null: false, default: 0
9
15
 
10
16
  t.timestamps
11
17
  end
@@ -1,17 +1,16 @@
1
1
  class CreateCatsCoreTransportOffers < ActiveRecord::Migration[6.1]
2
2
  def change
3
3
  create_table :cats_core_transport_offers do |t|
4
- t.references :transport_bid_item,
4
+ t.references :transport_bid,
5
5
  null: false,
6
- index: { name: 'to_on_tbi_indx' },
7
- foreign_key: { to_table: :cats_core_transport_bid_items }
6
+ index: { name: 'to_on_tb_indx' },
7
+ foreign_key: { to_table: :cats_core_transport_bids }
8
8
  t.references :transporter,
9
9
  null: false,
10
10
  index: { name: 'to_on_transporter_indx' },
11
11
  foreign_key: { to_table: :cats_core_transporters }
12
- t.float :price, null: false
13
- t.boolean :winner, null: false, default: false
14
- t.integer :rank
12
+ t.date :offer_date, null: false
13
+ t.float :bid_bond_amount, null: false, default: 0
15
14
 
16
15
  t.timestamps
17
16
  end
@@ -0,0 +1,19 @@
1
+ class CreateCatsCoreOfferItems < ActiveRecord::Migration[6.1]
2
+ def change
3
+ create_table :cats_core_offer_items do |t|
4
+ t.references :transport_offer,
5
+ null: false,
6
+ index: { name: 'to_on_oi_indx' },
7
+ foreign_key: { to_table: :cats_core_transport_offers }
8
+ t.references :transport_bid_item,
9
+ null: false,
10
+ index: { name: 'tbi_on_to_indx' },
11
+ foreign_key: { to_table: :cats_core_transport_bid_items }
12
+ t.float :price, null: false
13
+ t.boolean :winner, null: false, default: false
14
+ t.integer :rank
15
+
16
+ t.timestamps
17
+ end
18
+ end
19
+ end
@@ -1,5 +1,5 @@
1
1
  module Cats
2
2
  module Core
3
- VERSION = '1.2.28'.freeze
3
+ VERSION = '1.2.32'.freeze
4
4
  end
5
5
  end
@@ -0,0 +1,9 @@
1
+ FactoryBot.define do
2
+ factory :offer_item, class: 'Cats::Core::OfferItem' do
3
+ transport_offer
4
+ transport_bid_item
5
+ price { 150 }
6
+ rank { 2 }
7
+ winner { false }
8
+ end
9
+ end
@@ -1,6 +1,7 @@
1
1
  FactoryBot.define do
2
2
  factory :route, class: 'Cats::Core::Route' do
3
- source factory: :location
4
- destination factory: :location
3
+ region factory: :location
4
+ source factory: :woreda
5
+ destination factory: :woreda
5
6
  end
6
7
  end
@@ -4,5 +4,8 @@ FactoryBot.define do
4
4
  description { FFaker::Name.name }
5
5
  start_date { Date.today - 1.week }
6
6
  end_date { Date.today }
7
+ bid_type { Cats::Core::TransportBid::REGIONAL }
8
+ region factory: :location
9
+ bid_bond_amount { 100 }
7
10
  end
8
11
  end
@@ -1,9 +1,8 @@
1
1
  FactoryBot.define do
2
2
  factory :transport_offer, class: 'Cats::Core::TransportOffer' do
3
- transport_bid_item
3
+ transport_bid
4
4
  transporter
5
- price { 100 }
6
- winner { false }
7
- rank { nil }
5
+ bid_bond_amount { 100 }
6
+ offer_date { Date.today }
8
7
  end
9
8
  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.2.28
4
+ version: 1.2.32
5
5
  platform: ruby
6
6
  authors:
7
7
  - Henock L.
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-12-22 00:00:00.000000000 Z
11
+ date: 2021-12-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: active_model_serializers
@@ -271,6 +271,7 @@ files:
271
271
  - app/models/cats/core/menu_item.rb
272
272
  - app/models/cats/core/notification.rb
273
273
  - app/models/cats/core/notification_rule.rb
274
+ - app/models/cats/core/offer_item.rb
274
275
  - app/models/cats/core/operator.rb
275
276
  - app/models/cats/core/plan.rb
276
277
  - app/models/cats/core/plan_item.rb
@@ -368,7 +369,8 @@ files:
368
369
  - db/migrate/20211030133752_add_status_to_cats_core_commodities.rb
369
370
  - db/migrate/20211215121151_create_cats_core_transport_bids.rb
370
371
  - db/migrate/20211215124452_create_cats_core_transport_bid_items.rb
371
- - db/migrate/20211229160126_create_cats_core_transport_offers.rb
372
+ - db/migrate/20211229160125_create_cats_core_transport_offers.rb
373
+ - db/migrate/20211229160126_create_cats_core_offer_items.rb
372
374
  - db/migrate/20211229160127_create_cats_core_transport_contracts.rb
373
375
  - db/migrate/20211229160128_create_cats_core_contract_items.rb
374
376
  - db/migrate/20211229160129_create_cats_core_commodity_substitutions.rb
@@ -397,6 +399,7 @@ files:
397
399
  - spec/factories/cats/core/menus.rb
398
400
  - spec/factories/cats/core/notification_rules.rb
399
401
  - spec/factories/cats/core/notifications.rb
402
+ - spec/factories/cats/core/offer_items.rb
400
403
  - spec/factories/cats/core/operators.rb
401
404
  - spec/factories/cats/core/plan_item_details.rb
402
405
  - spec/factories/cats/core/plan_items.rb