cats_core 1.2.30 → 1.2.34

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7d71e458593e0bfa2d57ddcba1e5ea4f1392df4223cff0c2b7ef5d1150859463
4
- data.tar.gz: 4d2798fd1957265c3493ee8dca89b759d674d2e029489dc7382e7a6d5f62b0c4
3
+ metadata.gz: 28997d39a875dc6d5747f18de4f4803264aa98e8a49ee6fd09d79da78bf6a959
4
+ data.tar.gz: 2ce0c99ef80307ad76a4a070174898edda15ecc7a26b088f279109b9af065a8c
5
5
  SHA512:
6
- metadata.gz: 739d0d54055f96059cfb2818f86026ac46518e3c64eaa81762e984ea803e95650c56f28f11ee738fe29254deeb9b5e76a668b037c0454c40c3e4a308db6001d0
7
- data.tar.gz: e64a2e770bd662c26218e6d67a1c76d32ddf881deae9e77faecf3aa52628b1f19ac84f71fad4b202dcb200f8cc23aed3c2274f03aa8ff4513fba24b36ee7b254
6
+ metadata.gz: 6ce37b77dd8690b49307d4748a45ac60294e978d8ebb825e5f81324141ad464d0e021ba005dfa149553449f82e5e8fac68dbea2d679e13741d67b87cde1b75c0
7
+ data.tar.gz: 03fe91c921eb78c722bf959b5ac6f6c6368a86da82100f4238e8b854d4ad4b87b30d9ce5a24c2289a864eeba0588e4b5fb7f8bb76c500540ccdce5a51f16a69e
@@ -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
@@ -8,13 +8,23 @@ 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
+ has_many :offer_items, through: :transport_offers
19
+ belongs_to :region, class_name: 'Cats::Core::Location', optional: true
13
20
 
14
21
  validates :reference_no, presence: true, uniqueness: true
15
- validates :start_date, :end_date, :status, presence: true
22
+ validates :start_date, :end_date, :status, :bid_type, :bid_bond_amount, presence: true
23
+ validates :bid_bond_amount, numericality: { greater_than_or_equal_to: 0 }
16
24
  validates :status, inclusion: { in: STATUSES }
25
+ validates :bid_type, inclusion: { in: BID_TYPES }
17
26
  validate :validate_start_date_against_end_date
27
+ validate :validate_region
18
28
 
19
29
  def validate_start_date_against_end_date
20
30
  return unless start_date && end_date
@@ -22,6 +32,16 @@ module Cats
22
32
  errors.add(:start_date, 'should be before end date.') if start_date >= end_date
23
33
  end
24
34
 
35
+ def validate_region
36
+ return unless bid_type
37
+
38
+ errors.add(:region, 'should be null.') if bid_type == NON_REGIONAL && region
39
+
40
+ errors.add(:region, 'should not be null.') if bid_type == REGIONAL && !region
41
+
42
+ errors.add(:region, 'is not valid.') if region && region.location_type != Location::REGION
43
+ end
44
+
25
45
  def open
26
46
  raise(StandardError, 'Bid is already open.') if status == OPEN
27
47
 
@@ -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
 
@@ -1,14 +1,13 @@
1
1
  module Cats
2
2
  module Core
3
3
  class TransportContract < ApplicationRecord
4
- belongs_to :region, class_name: 'Cats::Core::Location'
5
4
  belongs_to :transporter
6
5
  belongs_to :transport_bid
6
+ has_many :contract_items
7
7
 
8
8
  validates :contract_no, presence: true, uniqueness: true
9
9
  validates :contract_date, :expires_on, presence: true
10
10
 
11
- delegate(:name, to: :region, prefix: true)
12
11
  delegate(:name, to: :transporter, prefix: true)
13
12
  delegate(:reference_no, to: :transport_bid, prefix: :bid)
14
13
  end
@@ -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
@@ -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
@@ -2,10 +2,6 @@ class CreateCatsCoreTransportContracts < ActiveRecord::Migration[6.1]
2
2
  def change
3
3
  create_table :cats_core_transport_contracts do |t|
4
4
  t.string :contract_no, unique: true
5
- t.references :region,
6
- null: false,
7
- index: { name: 'region_on_tc_indx' },
8
- foreign_key: { to_table: :cats_core_locations }
9
5
  t.references :transporter,
10
6
  null: false,
11
7
  index: { name: 'transporter_on_tc_indx' },
@@ -1,5 +1,5 @@
1
1
  module Cats
2
2
  module Core
3
- VERSION = '1.2.30'.freeze
3
+ VERSION = '1.2.34'.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
@@ -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,7 +1,6 @@
1
1
  FactoryBot.define do
2
2
  factory :transport_contract, class: 'Cats::Core::TransportContract' do
3
3
  contract_no { FFaker::Name.name }
4
- region factory: :location
5
4
  transporter
6
5
  transport_bid
7
6
  contract_date { Date.today }
@@ -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.30
4
+ version: 1.2.34
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: 2022-01-02 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