bscf-core 0.3.5 → 0.3.6

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: 5cadf9d1359435358250b1c677aa87661da069c1dbbc6e834e1ad0d6ce06932d
4
- data.tar.gz: 6df9c4dd0160c81a63a6d37420f71ab9ab488d2d280b93b680995f95a50afd04
3
+ metadata.gz: 0f663a88fd05be1fcf61a27b261cf3705cf813492cf81cb5ca4b995a475335b0
4
+ data.tar.gz: 3027a949d685908b5fa68253b93adf3ab34d36645d643aecd7d73037a04c0bf7
5
5
  SHA512:
6
- metadata.gz: a94920a7ea7dc559e2b1cc8e285c7fc82773a3f3aaf277c7d73c13f2efdd401b27c4bf5af163fdcc1c808b7a45c9d676834d61c95b3f8d5edbfdcb1b61a3ead4
7
- data.tar.gz: bce2278d8ce1e265fe240500d0f3d4a0b2edbc06b58d52b9200e6050bb65bdbeca78920ed4e281ebf92bafc2aa369f2373994620c248c8a056fcf06c3c825b2e
6
+ metadata.gz: 1f0e784375d6ceb2d2bb801a9b89788d9c281a68e965dc3b15ba651a2a6f72dbdfc045be1bd4cc4f65450d0cb7d4e7b11e13d6dd4933b11fd750f8a0af3e7388
7
+ data.tar.gz: 40af2d0ffd652e1f8405533d1f8701676c372c907265f9ce6a4e6d9df43e034d27fd8538cfaeca52e5e8ebeb366605ca3aa9743ef14aec3cb0ec004b27278eab
@@ -1,30 +1,29 @@
1
1
  module Bscf::Core
2
2
  class DeliveryOrder < ApplicationRecord
3
3
  belongs_to :order
4
- belongs_to :delivery_address, class_name: "Bscf::Core::Address"
4
+ belongs_to :pickup_address, class_name: "Bscf::Core::Address"
5
+ belongs_to :dropoff_address, class_name: "Bscf::Core::Address"
6
+ belongs_to :driver, class_name: "Bscf::Core::User", optional: true
5
7
 
6
8
  has_many :delivery_order_items, dependent: :destroy
7
9
  has_many :order_items, through: :delivery_order_items
8
10
  has_many :products, through: :delivery_order_items
9
11
 
10
- attribute :delivery_start_time, :datetime
11
- attribute :delivery_end_time, :datetime
12
- attribute :actual_delivery_time, :datetime
13
-
14
- validates :contact_phone, :status, :estimated_delivery_time, presence: true
12
+ validates :buyer_phone, :seller_phone, :driver_phone,
13
+ :status, :estimated_delivery_time, presence: true
15
14
  validate :end_time_after_start_time, if: -> { delivery_start_time.present? && delivery_end_time.present? }
16
15
 
17
16
  before_save :update_delivery_times
18
17
  before_save :calculate_actual_delivery_time
19
-
20
18
  after_save :sync_items_status, if: :saved_change_to_status?
21
19
 
22
20
  enum :status, {
23
21
  pending: 0,
24
22
  in_transit: 1,
25
- delivered: 2,
26
- failed: 3,
27
- cancelled: 4
23
+ picked_up: 2,
24
+ delivered: 3,
25
+ failed: 4,
26
+ cancelled: 5
28
27
  }
29
28
 
30
29
  def delivery_duration
@@ -0,0 +1,12 @@
1
+ module Bscf::Core
2
+ class Vehicle < ApplicationRecord
3
+ belongs_to :driver, class_name: "Bscf::Core::User", optional: true
4
+
5
+ validates :plate_number, presence: true, uniqueness: { case_sensitive: false }
6
+ validates :vehicle_type, presence: true
7
+ validates :brand, presence: true
8
+ validates :model, presence: true
9
+ validates :year, presence: true, numericality: { only_integer: true, greater_than: 1900, less_than_or_equal_to: Time.current.year }
10
+ validates :color, presence: true
11
+ end
12
+ end
@@ -0,0 +1,17 @@
1
+ class CreateBscfCoreVehicles < ActiveRecord::Migration[8.0]
2
+ def change
3
+ create_table :bscf_core_vehicles do |t|
4
+ t.references :driver, foreign_key: { to_table: :bscf_core_users }, null: true
5
+ t.string :plate_number, null: false
6
+ t.string :vehicle_type, null: false
7
+ t.string :brand, null: false
8
+ t.string :model, null: false
9
+ t.integer :year, null: false
10
+ t.string :color, null: false
11
+
12
+ t.timestamps
13
+ end
14
+
15
+ add_index :bscf_core_vehicles, :plate_number, unique: true
16
+ end
17
+ end
@@ -0,0 +1,10 @@
1
+ class AddDeliveryDetailsToDeliveryOrders < ActiveRecord::Migration[8.0]
2
+ def change
3
+ add_reference :bscf_core_delivery_orders, :driver, foreign_key: { to_table: :bscf_core_users }
4
+ add_reference :bscf_core_delivery_orders, :pickup_address, null: false, foreign_key: { to_table: :bscf_core_addresses }
5
+ add_column :bscf_core_delivery_orders, :buyer_phone, :string, null: false
6
+ add_column :bscf_core_delivery_orders, :seller_phone, :string, null: false
7
+ rename_column :bscf_core_delivery_orders, :delivery_address_id, :dropoff_address_id
8
+ rename_column :bscf_core_delivery_orders, :contact_phone, :driver_phone
9
+ end
10
+ end
@@ -0,0 +1,5 @@
1
+ class AddActualDeliveryTimeToDeliveryOrders < ActiveRecord::Migration[8.0]
2
+ def change
3
+ add_column :bscf_core_delivery_orders, :actual_delivery_time, :datetime
4
+ end
5
+ end
@@ -1,5 +1,5 @@
1
1
  module Bscf
2
2
  module Core
3
- VERSION = "0.3.5"
3
+ VERSION = "0.3.6"
4
4
  end
5
5
  end
@@ -1,11 +1,34 @@
1
1
  FactoryBot.define do
2
2
  factory :delivery_order, class: 'Bscf::Core::DeliveryOrder' do
3
3
  association :order
4
- association :delivery_address, factory: :address
5
- contact_phone { Faker::PhoneNumber.phone_number }
4
+ association :pickup_address, factory: :address
5
+ association :dropoff_address, factory: :address
6
+ driver { nil }
7
+
8
+ buyer_phone { Faker::PhoneNumber.phone_number }
9
+ seller_phone { Faker::PhoneNumber.phone_number }
10
+ driver_phone { Faker::PhoneNumber.phone_number }
6
11
  delivery_notes { Faker::Lorem.paragraph }
7
12
  estimated_delivery_time { 2.days.from_now }
8
- actual_delivery_time { nil }
13
+ delivery_start_time { nil }
14
+ delivery_end_time { nil }
9
15
  status { :pending }
16
+
17
+ trait :with_driver do
18
+ association :driver, factory: :user
19
+ end
20
+
21
+ trait :in_transit do
22
+ with_driver
23
+ status { :in_transit }
24
+ delivery_start_time { Time.current }
25
+ end
26
+
27
+ trait :delivered do
28
+ with_driver
29
+ status { :delivered }
30
+ delivery_start_time { 2.hours.ago }
31
+ delivery_end_time { Time.current }
32
+ end
10
33
  end
11
34
  end
@@ -0,0 +1,11 @@
1
+ FactoryBot.define do
2
+ factory :vehicle, class: 'Bscf::Core::Vehicle' do
3
+ association :driver, factory: :user
4
+ sequence(:plate_number) { |n| "ABC#{n}123" }
5
+ vehicle_type { [ 'Truck', 'Van', 'Pickup' ].sample }
6
+ brand { [ 'Toyota', 'Ford', 'Mercedes', 'Volvo' ].sample }
7
+ model { [ 'Hilux', 'Transit', 'Actros', 'FH16' ].sample }
8
+ year { rand(2015..Time.current.year) }
9
+ color { [ 'White', 'Black', 'Silver', 'Blue' ].sample }
10
+ end
11
+ end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bscf-core
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.5
4
+ version: 0.3.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Asrat
8
8
  bindir: bin
9
9
  cert_chain: []
10
- date: 2025-04-07 00:00:00.000000000 Z
10
+ date: 2025-04-10 00:00:00.000000000 Z
11
11
  dependencies:
12
12
  - !ruby/object:Gem::Dependency
13
13
  name: active_model_serializers
@@ -305,6 +305,7 @@ files:
305
305
  - app/models/bscf/core/user.rb
306
306
  - app/models/bscf/core/user_profile.rb
307
307
  - app/models/bscf/core/user_role.rb
308
+ - app/models/bscf/core/vehicle.rb
308
309
  - app/models/bscf/core/virtual_account.rb
309
310
  - app/models/bscf/core/virtual_account_transaction.rb
310
311
  - app/models/bscf/core/wholesaler_product.rb
@@ -333,6 +334,9 @@ files:
333
334
  - db/migrate/20250402120554_create_bscf_core_wholesaler_products.rb
334
335
  - db/migrate/20250403190620_create_bscf_core_business_documents.rb
335
336
  - db/migrate/20250403194629_create_active_storage_tables.active_storage.rb
337
+ - db/migrate/20250410115524_create_bscf_core_vehicles.rb
338
+ - db/migrate/20250410181144_add_delivery_details_to_delivery_orders.rb
339
+ - db/migrate/20250410181145_add_actual_delivery_time_to_delivery_orders.rb
336
340
  - lib/bscf/core.rb
337
341
  - lib/bscf/core/engine.rb
338
342
  - lib/bscf/core/version.rb
@@ -357,6 +361,7 @@ files:
357
361
  - spec/factories/bscf/core/user_profiles.rb
358
362
  - spec/factories/bscf/core/user_roles.rb
359
363
  - spec/factories/bscf/core/users.rb
364
+ - spec/factories/bscf/core/vehicles.rb
360
365
  - spec/factories/bscf/core/virtual_account_transactions.rb
361
366
  - spec/factories/bscf/core/virtual_accounts.rb
362
367
  - spec/factories/bscf/core/wholesaler_products.rb
@@ -381,7 +386,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
381
386
  - !ruby/object:Gem::Version
382
387
  version: '0'
383
388
  requirements: []
384
- rubygems_version: 3.6.5
389
+ rubygems_version: 3.6.2
385
390
  specification_version: 4
386
391
  summary: An Engine for Supply Chain Financing
387
392
  test_files: []