bscf-core 0.3.5 → 0.3.7

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: ed028b7e42ca653b4e5784c312ce047afc265df7097326a41cfdbfca49c9a03d
4
+ data.tar.gz: be61e538a2fcbcd0fc510d931487f12d7cadabcad68a9ac4b917b70408df9bf6
5
5
  SHA512:
6
- metadata.gz: a94920a7ea7dc559e2b1cc8e285c7fc82773a3f3aaf277c7d73c13f2efdd401b27c4bf5af163fdcc1c808b7a45c9d676834d61c95b3f8d5edbfdcb1b61a3ead4
7
- data.tar.gz: bce2278d8ce1e265fe240500d0f3d4a0b2edbc06b58d52b9200e6050bb65bdbeca78920ed4e281ebf92bafc2aa369f2373994620c248c8a056fcf06c3c825b2e
6
+ metadata.gz: bc73de41b00992923c5bfdb670568f3d511e40d80e8e2ad3f1ea1ba396275acbadd3a511d6eeb47a3a26216ee2ea7ffef9beaa9685feac4c43c66060ee84ec6d
7
+ data.tar.gz: 837d1989f861fb81ac36324e14a5d102c764a9cd5bac87f1d25006bf86e355e233f1ba90673f869e768169f1b4c4e2b28b97d6fa9aa15452e21be67f63f2cfb3
@@ -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.7"
4
4
  end
5
5
  end
@@ -0,0 +1,26 @@
1
+ module Bscf
2
+ module Core
3
+ class InstallGenerator < Rails::Generators::Base
4
+ source_root File.expand_path("templates", __dir__)
5
+ desc "Install BSCF Core"
6
+
7
+ def copy_migrations
8
+ say_status :copying, "migrations"
9
+ rake "bscf_core:install:migrations"
10
+ end
11
+
12
+ def mount_engine
13
+ route "mount Bscf::Core::Engine => '/bscf'"
14
+ end
15
+
16
+ def run_migrations
17
+ say_status :running, "migrations"
18
+ rake "db:migrate"
19
+ end
20
+
21
+ def finished
22
+ say "BSCF Core has been installed successfully!"
23
+ end
24
+ end
25
+ end
26
+ 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.7
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,10 +334,14 @@ 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
339
343
  - lib/bscf_core.rb
344
+ - lib/generators/bscf/core/install_generator.rb
340
345
  - lib/tasks/bscf/core_tasks.rake
341
346
  - lib/tasks/release.rake
342
347
  - spec/factories/bscf/core/addresses.rb
@@ -357,6 +362,7 @@ files:
357
362
  - spec/factories/bscf/core/user_profiles.rb
358
363
  - spec/factories/bscf/core/user_roles.rb
359
364
  - spec/factories/bscf/core/users.rb
365
+ - spec/factories/bscf/core/vehicles.rb
360
366
  - spec/factories/bscf/core/virtual_account_transactions.rb
361
367
  - spec/factories/bscf/core/virtual_accounts.rb
362
368
  - spec/factories/bscf/core/wholesaler_products.rb
@@ -381,7 +387,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
381
387
  - !ruby/object:Gem::Version
382
388
  version: '0'
383
389
  requirements: []
384
- rubygems_version: 3.6.5
390
+ rubygems_version: 3.6.2
385
391
  specification_version: 4
386
392
  summary: An Engine for Supply Chain Financing
387
393
  test_files: []