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 +4 -4
- data/app/controllers/dscf/marketplace/delivery_orders_controller.rb +15 -0
- data/app/models/dscf/marketplace/delivery_order.rb +2 -2
- data/app/services/dscf/marketplace/delivery_order_service.rb +25 -0
- data/config/locales/en.yml +13 -9
- data/config/routes.rb +1 -0
- data/db/migrate/20250916083536_make_driver_id_nullable_in_delivery_orders.rb +5 -0
- data/lib/dscf/marketplace/version.rb +1 -1
- metadata +3 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1453b148008e135853ee34ec3c11a3e4ae92d1a63d692c46de443a2c65789f2a
|
4
|
+
data.tar.gz: 102476ba6b33b913f846a3ea25fe52728d3b1a5875fe18b98bcb20dadc39faa5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
data/config/locales/en.yml
CHANGED
@@ -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
|
-
|
274
|
-
|
275
|
-
|
276
|
-
|
277
|
-
|
278
|
-
|
279
|
-
|
280
|
-
|
281
|
-
|
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
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.
|
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
|