dscf-marketplace 0.3.3 → 0.3.4

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: 860d3ddc901bb2ca30262a59e16a674179bfa0dc7e349d23bc59e07488a0ccd3
4
- data.tar.gz: 6e8e95bd3ab0eff86e29a61f62fbbd031c22b17aaff6267f51b215d2171fc2f4
3
+ metadata.gz: 1453b148008e135853ee34ec3c11a3e4ae92d1a63d692c46de443a2c65789f2a
4
+ data.tar.gz: 102476ba6b33b913f846a3ea25fe52728d3b1a5875fe18b98bcb20dadc39faa5
5
5
  SHA512:
6
- metadata.gz: 8581bfb7f3cb8cc254dc446f3577c33564b25f26ae88a0346249c51f4a38fa49c477c13c443d9e577c05a2cf3d4c4dd583c2fc387170b918a51d89a63cbab4e6
7
- data.tar.gz: f77483ec6c62d315d34e691bbd4903aefca0cbf7ca34978ee2c42348a3c2e4f84473051e6e60687bf2ccbe95dbcafef92544c8781bd1b5c927d5a72ca6fb5bca
6
+ metadata.gz: a554fc5405b2a480cfc488ba0d5266b8219343549c6c873892d0b122f425e8643adeb27aaa4a056faa864cdb7af1d6562dcd125923cd1530812998242b8a7886
7
+ data.tar.gz: fe584405ecbfa49efd3a7c3de767d9c795c3dab1bc17342d5e422d8b986a56eaced5771729e7412636104ab9b793803106aa97437e95d74f0008d0bea1445c63
@@ -105,6 +105,21 @@ module Dscf
105
105
  end
106
106
  end
107
107
 
108
+ def accept
109
+ @obj = find_record
110
+ service = Dscf::Marketplace::DeliveryOrderService.new
111
+ begin
112
+ service.assign_driver(@obj, current_user)
113
+ render_success("delivery_orders.success.accepted", data: @obj)
114
+ rescue Dscf::Marketplace::DeliveryOrderService::InvalidStatusTransitionError => e
115
+ render_error("delivery_orders.errors.invalid_status_transition", message: e.message)
116
+ rescue Dscf::Marketplace::DeliveryOrderService::AssignmentError => e
117
+ render_error("delivery_orders.errors.assignment_failed", message: e.message)
118
+ rescue => e
119
+ render_error("delivery_orders.errors.accept_failed", message: e.message)
120
+ end
121
+ end
122
+
108
123
  private
109
124
 
110
125
  def model_params
@@ -3,13 +3,13 @@ module Dscf::Marketplace
3
3
  enum :status, {draft: 0, assigned: 1, picked_up: 2, in_transit: 3, delivered: 4, failed: 5}, default: :draft
4
4
  enum :vehicle_type, {motorcycle: 0, car: 1, van: 2, truck: 3}
5
5
 
6
- belongs_to :driver, class_name: "Dscf::Core::User"
6
+ belongs_to :driver, class_name: "Dscf::Core::User", optional: true
7
7
  belongs_to :pickup_address, class_name: "Dscf::Core::Address"
8
8
  belongs_to :delivery_vehicle, optional: true
9
9
  has_many :delivery_order_items, dependent: :destroy
10
10
  has_many :marketplace_orders, class_name: "Dscf::Marketplace::Order", dependent: :nullify
11
11
 
12
- validates :driver_id, presence: true
12
+ validates :driver_id, presence: true, unless: :draft?
13
13
  validates :pickup_address_id, presence: true
14
14
  validates :status, presence: true
15
15
  validates :vehicle_type, presence: true
@@ -0,0 +1,25 @@
1
+ module Dscf::Marketplace
2
+ class DeliveryOrderService
3
+ class InvalidStatusTransitionError < StandardError; end
4
+
5
+ class AssignmentError < StandardError; end
6
+
7
+ def assign_driver(delivery_order, driver)
8
+ raise ArgumentError, "Delivery order is required" unless delivery_order
9
+ raise ArgumentError, "Driver is required" unless driver
10
+
11
+ unless delivery_order.draft?
12
+ raise InvalidStatusTransitionError, "Can only assign driver to draft delivery orders"
13
+ end
14
+
15
+ delivery_order.driver_id = driver.id
16
+ delivery_order.status = :assigned
17
+
18
+ unless delivery_order.save
19
+ raise AssignmentError, "Failed to assign driver: #{delivery_order.errors.full_messages.join(", ")}"
20
+ end
21
+
22
+ delivery_order
23
+ end
24
+ end
25
+ end
@@ -270,15 +270,19 @@ en:
270
270
  marked_failed: "Delivery marked as failed"
271
271
  index.success: "Delivery orders retrieved successfully"
272
272
  errors:
273
- index: "Failed to retrieve delivery orders"
274
- show: "Failed to retrieve delivery order details"
275
- create: "Failed to create delivery order"
276
- update: "Failed to update delivery order"
277
- destroy: "Failed to delete delivery order"
278
- picked_up: "Failed to pickup delivery order"
279
- delivery_started: "Failed to start delivery"
280
- delivery_completed: "Failed to complete delivery"
281
- marked_failed: "Failed to mark delivery as failed"
273
+ index: "Failed to retrieve delivery orders"
274
+ show: "Failed to retrieve delivery order details"
275
+ create: "Failed to create delivery order"
276
+ update: "Failed to update delivery order"
277
+ destroy: "Failed to delete delivery order"
278
+ picked_up: "Failed to pickup delivery order"
279
+ delivery_started: "Failed to start delivery"
280
+ delivery_completed: "Failed to complete delivery"
281
+ marked_failed: "Failed to mark delivery as failed"
282
+ pickup_failed: "Failed to pickup delivery order"
283
+ start_delivery_failed: "Failed to start delivery"
284
+ complete_delivery_failed: "Failed to complete delivery"
285
+ mark_failed_failed: "Failed to mark delivery as failed"
282
286
 
283
287
  delivery_order_item:
284
288
  success:
data/config/routes.rb CHANGED
@@ -102,6 +102,7 @@ Dscf::Marketplace::Engine.routes.draw do
102
102
  post "start_delivery"
103
103
  post "complete_delivery"
104
104
  post "mark_failed"
105
+ post "accept"
105
106
  end
106
107
  collection do
107
108
  get "filter"
@@ -0,0 +1,5 @@
1
+ class MakeDriverIdNullableInDeliveryOrders < ActiveRecord::Migration[8.0]
2
+ def change
3
+ change_column_null :dscf_marketplace_delivery_orders, :driver_id, true
4
+ end
5
+ end
@@ -1,5 +1,5 @@
1
1
  module Dscf
2
2
  module Marketplace
3
- VERSION = "0.3.3".freeze
3
+ VERSION = "0.3.4".freeze
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dscf-marketplace
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.3
4
+ version: 0.3.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Asrat
@@ -469,6 +469,7 @@ files:
469
469
  - app/serializers/dscf/marketplace/unit_conversion_serializer.rb
470
470
  - app/serializers/dscf/marketplace/unit_serializer.rb
471
471
  - app/serializers/dscf/marketplace/user_serializer.rb
472
+ - app/services/dscf/marketplace/delivery_order_service.rb
472
473
  - app/services/dscf/marketplace/my_resource_service.rb
473
474
  - app/services/dscf/marketplace/rfq_response_service.rb
474
475
  - config/environments/production.rb
@@ -499,6 +500,7 @@ files:
499
500
  - db/migrate/20250903061154_add_ordered_fields_to_orders.rb
500
501
  - db/migrate/20250903061306_populate_ordered_fields_for_existing_orders.rb
501
502
  - db/migrate/20250909092700_add_notes_to_dscf_marketplace_quotation_items.rb
503
+ - db/migrate/20250916083536_make_driver_id_nullable_in_delivery_orders.rb
502
504
  - lib/dscf/marketplace.rb
503
505
  - lib/dscf/marketplace/engine.rb
504
506
  - lib/dscf/marketplace/version.rb