dscf-marketplace 0.2.94 → 0.2.96

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: b3d9e2b9c6d302c05aba856c7add2d572e6c48c763b29022c165c32fb0ae6d39
4
- data.tar.gz: c1a4ed98de21d1ae80ce116f9db768e24e43baa4785896c9bcbb62bfcfb604e3
3
+ metadata.gz: 337301146588e5fb9301adbb623f086e2cbc44ab193247ef22095868e2bcfc6e
4
+ data.tar.gz: 07f2f4c37075de27e77f71f09043aae1ef6e67ac0d8b9cb3ec6c13a87aad6b43
5
5
  SHA512:
6
- metadata.gz: f88c9ecdd32d85066805cb205d3eb7e28df0f540d27ab6c9ecdfada565b3b068f3bb9ded7bdaae8c3d7f73581c4684633579da25b606c8460cf068c0075a26b3
7
- data.tar.gz: ae10f6ddcdb722a28ecf61d00152984cbf20523bbf23fc33c385ea5378e1e22935304c636ff18e86e7f6fec2f33704def9a92087b43b33a71c809d5728660a57
6
+ metadata.gz: 6953d8e4c94403e5856d6f6095ad6891886d186c5f69a12c86c002974fb90c07f4f21b12051aaac77443b1830334b509da64b97f712e2bd21f97c395358a2c46
7
+ data.tar.gz: 3e3e8c5b5d5f627a186ba00c07559c73716410bafc426f18ec140d427b5171ee39d49dc28d0914b164bd4df2dae3a173ca13e184933bc30c2a0122cd2c319232
@@ -3,24 +3,102 @@ module Dscf
3
3
  class DeliveryVehiclesController < ApplicationController
4
4
  include Dscf::Core::Common
5
5
 
6
+ def create
7
+ vehicle = @clazz.new(model_params.except(:vehicle_license, :driver_license))
8
+ if vehicle.save
9
+ # Handle vehicle license upload
10
+ if params[:delivery_vehicle][:vehicle_license].present?
11
+ document = Dscf::Core::Document.new(
12
+ documentable: vehicle,
13
+ document_type: :business_license
14
+ )
15
+ document.file.attach(params[:delivery_vehicle][:vehicle_license])
16
+ document.save!
17
+ end
18
+
19
+ # Handle driver license upload
20
+ if params[:delivery_vehicle][:driver_license].present?
21
+ driver_document = Dscf::Core::Document.new(
22
+ documentable: vehicle.driver,
23
+ document_type: :drivers_license
24
+ )
25
+ driver_document.file.attach(params[:delivery_vehicle][:driver_license])
26
+ driver_document.save!
27
+ end
28
+
29
+ vehicle = @clazz.includes(eager_loaded_associations).find(vehicle.id) if eager_loaded_associations.present?
30
+ includes = serializer_includes_for_action(:create)
31
+ options = {include: includes} if includes.present?
32
+ render_success(data: vehicle, serializer_options: options, status: :created)
33
+ else
34
+ render_error(errors: vehicle.errors.full_messages[0], status: :unprocessable_entity)
35
+ end
36
+ rescue => e
37
+ render_error(error: e.message)
38
+ end
39
+
40
+ def update
41
+ vehicle = @clazz.find(params[:id])
42
+ if vehicle.update(model_params.except(:vehicle_license, :driver_license))
43
+ # Handle vehicle license update/replacement
44
+ if params[:delivery_vehicle][:vehicle_license].present?
45
+ # Remove existing vehicle license if any
46
+ vehicle.documents.where(document_type: :business_license).destroy_all
47
+
48
+ # Add new vehicle license
49
+ document = Dscf::Core::Document.new(
50
+ documentable: vehicle,
51
+ document_type: :business_license
52
+ )
53
+ document.file.attach(params[:delivery_vehicle][:vehicle_license])
54
+ document.save!
55
+ end
56
+
57
+ # Handle driver license update/replacement
58
+ if params[:delivery_vehicle][:driver_license].present?
59
+ # Remove existing driver license if any
60
+ vehicle.driver.documents.where(document_type: :drivers_license).destroy_all
61
+
62
+ # Add new driver license
63
+ driver_document = Dscf::Core::Document.new(
64
+ documentable: vehicle.driver,
65
+ document_type: :drivers_license
66
+ )
67
+ driver_document.file.attach(params[:delivery_vehicle][:driver_license])
68
+ driver_document.save!
69
+ end
70
+
71
+ vehicle = @clazz.includes(eager_loaded_associations).find(vehicle.id) if eager_loaded_associations.present?
72
+ includes = serializer_includes_for_action(:update)
73
+ options = {include: includes} if includes.present?
74
+ render_success(data: vehicle, serializer_options: options)
75
+ else
76
+ render_error(errors: vehicle.errors.full_messages[0], status: :unprocessable_entity)
77
+ end
78
+ rescue => e
79
+ render_error(error: e.message)
80
+ end
81
+
6
82
  private
7
83
 
8
84
  def model_params
9
85
  params.require(:delivery_vehicle).permit(
10
- :driver_id, :plate_number, :vehicle_type, :year, :brand, :model, :color
86
+ :driver_id, :plate_number, :vehicle_type, :year, :brand, :model, :color,
87
+ vehicle_license: :file,
88
+ driver_license: :file
11
89
  )
12
90
  end
13
91
 
14
92
  def eager_loaded_associations
15
- [ :driver, :delivery_orders ]
93
+ [ :driver, :delivery_orders, :documents ]
16
94
  end
17
95
 
18
96
  def default_serializer_includes
19
97
  {
20
- index: [ :driver ],
21
- show: [ :driver, :delivery_orders ],
22
- create: [ :driver ],
23
- update: [ :driver ]
98
+ index: [ :driver, :documents ],
99
+ show: [ :driver, :delivery_orders, :documents ],
100
+ create: [ :driver, :documents ],
101
+ update: [ :driver, :documents ]
24
102
  }
25
103
  end
26
104
  end
@@ -5,6 +5,7 @@ module Dscf
5
5
 
6
6
  belongs_to :driver, class_name: "Dscf::Core::User"
7
7
  has_many :delivery_orders, dependent: :nullify
8
+ has_many :documents, as: :documentable, class_name: "Dscf::Core::Document"
8
9
 
9
10
  validates :driver_id, presence: true
10
11
  validates :plate_number, presence: true, uniqueness: true
@@ -20,7 +21,7 @@ module Dscf
20
21
  end
21
22
 
22
23
  def self.ransackable_associations(_auth_object = nil)
23
- %w[driver delivery_orders]
24
+ %w[driver delivery_orders documents]
24
25
  end
25
26
 
26
27
  def motorcycle?
@@ -65,6 +66,14 @@ module Dscf
65
66
  return 0 if total_deliveries.zero?
66
67
  (completed_deliveries.count.to_f / total_deliveries * 100).round(2)
67
68
  end
69
+
70
+ def vehicle_license
71
+ documents.find_by(document_type: :business_license)
72
+ end
73
+
74
+ def driver_license
75
+ driver.documents.find_by(document_type: :drivers_license)
76
+ end
68
77
  end
69
78
  end
70
79
  end
@@ -5,8 +5,9 @@ module Dscf
5
5
  :model, :color, :created_at, :updated_at, :display_name,
6
6
  :total_deliveries, :success_rate
7
7
 
8
- belongs_to :driver
8
+ belongs_to :driver, serializer: Dscf::Marketplace::UserSerializer
9
9
  has_many :delivery_orders
10
+ has_many :documents, each_serializer: Dscf::Marketplace::DocumentSerializer
10
11
  end
11
12
  end
12
13
  end
@@ -2,6 +2,10 @@ module Dscf
2
2
  module Marketplace
3
3
  class DocumentSerializer < ActiveModel::Serializer
4
4
  attributes :id, :document_type, :file_url, :is_verified, :verified_at, :created_at, :updated_at
5
+
6
+ def file_url
7
+ object.file_url
8
+ end
5
9
  end
6
10
  end
7
11
  end
@@ -0,0 +1,9 @@
1
+ module Dscf
2
+ module Marketplace
3
+ class UserSerializer < ActiveModel::Serializer
4
+ attributes :id, :email, :phone, :verified_at, :temp_password, :created_at, :updated_at
5
+
6
+ has_many :documents, each_serializer: Dscf::Marketplace::DocumentSerializer
7
+ end
8
+ end
9
+ end
@@ -1,5 +1,5 @@
1
1
  module Dscf
2
2
  module Marketplace
3
- VERSION = "0.2.94".freeze
3
+ VERSION = "0.2.96".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.2.94
4
+ version: 0.2.96
5
5
  platform: ruby
6
6
  authors:
7
7
  - Asrat
@@ -468,6 +468,7 @@ files:
468
468
  - app/serializers/dscf/marketplace/supplier_product_serializer.rb
469
469
  - app/serializers/dscf/marketplace/unit_conversion_serializer.rb
470
470
  - app/serializers/dscf/marketplace/unit_serializer.rb
471
+ - app/serializers/dscf/marketplace/user_serializer.rb
471
472
  - app/services/dscf/marketplace/my_resource_service.rb
472
473
  - app/services/dscf/marketplace/rfq_response_service.rb
473
474
  - config/environments/production.rb