dscf-marketplace 0.2.4 → 0.2.5

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: 9c6753e6a99d5fcd1f3a5f3c81e9ea36bef71439a4eb3840ed3f7d8f4deb1f5f
4
- data.tar.gz: edbf169441292502b45e8d67ab61bee187816d574a17e27c6b8a0a4bfb4b4bf5
3
+ metadata.gz: 2f8934e507e46d96767591f68f26790969449c058d6eb4a21dd5af54448d383e
4
+ data.tar.gz: 24b96ff375ebc4893b38e57e7afc84f4f28a7e7e4120b58d992c03481802bbc8
5
5
  SHA512:
6
- metadata.gz: 367c4df2d4a125126c527c123668eafd975fb52a7082a2f792e69bfbacf6978ecaac8742a745470a2eca82c9db13ee6da6dfa847c434a999e9343c6dbdaed7f5
7
- data.tar.gz: 5199ecec95982d83a2fb842c95921ff2037cd479f3f0127dc0d930a3c471dea767e743898ff9dc1a1df0c18b3dcff75a15fbe8eab91b04e21665f3f46e7149d7
6
+ metadata.gz: 444ee5aa9c80f4db2a8f86c2873466a97fc51f9bdc91923e5e6bf7ea5652427986769878fc0834f0acd43cfae58af3bac62bb3ab1e44d3f341da4dcd96c284ae
7
+ data.tar.gz: 8f0e2a29a64b6fa9e770564ecbd9f6217955e3b7a37b7e7af4965728f52b21c30e01b0e7c47e09d102a3ea8610eed7d8fc1d027958030354cf205d68221fdddd
@@ -48,21 +48,21 @@ module Dscf
48
48
 
49
49
  def model_params
50
50
  params.require(:order).permit(
51
- :quotation_id, :listing_id, :user_id, :delivery_order_id,
51
+ :quotation_id, :listing_id, :user_id, :ordered_by_id, :ordered_to_id, :delivery_order_id,
52
52
  :order_type, :status, :fulfillment_type
53
53
  )
54
54
  end
55
55
 
56
56
  def eager_loaded_associations
57
- [ :quotation, :listing, :user, :delivery_order, :order_items ]
57
+ [ :quotation, :listing, :user, :ordered_by, :ordered_to, :delivery_order, :order_items ]
58
58
  end
59
59
 
60
60
  def default_serializer_includes
61
61
  {
62
- index: [ :user, :quotation, :listing ],
63
- show: [ :user, :quotation, :listing, :delivery_order, :order_items ],
64
- create: [ :user, :quotation, :listing ],
65
- update: [ :user, :quotation, :listing ]
62
+ index: [ :user, :ordered_by, :ordered_to, :quotation, :listing ],
63
+ show: [ :user, :ordered_by, :ordered_to, :quotation, :listing, :delivery_order, :order_items ],
64
+ create: [ :user, :ordered_by, :ordered_to, :quotation, :listing ],
65
+ update: [ :user, :ordered_by, :ordered_to, :quotation, :listing ]
66
66
  }
67
67
  end
68
68
  end
@@ -6,25 +6,29 @@ module Dscf::Marketplace
6
6
 
7
7
  belongs_to :quotation, optional: true
8
8
  belongs_to :listing, optional: true
9
- belongs_to :user, class_name: "Dscf::Core::User"
9
+ belongs_to :user, class_name: "Dscf::Core::User" # Keep for backward compatibility
10
+ belongs_to :ordered_by, class_name: "Dscf::Core::User"
11
+ belongs_to :ordered_to, class_name: "Dscf::Core::Business"
10
12
  belongs_to :delivery_order, optional: true
11
13
  has_many :order_items, dependent: :destroy
12
14
 
13
15
  validates :order_type, presence: true
14
16
  validates :status, presence: true
15
17
  validates :fulfillment_type, presence: true
16
- validates :user, presence: true
18
+ validates :user, presence: true # Keep for backward compatibility
19
+ validates :ordered_by, presence: true
20
+ validates :ordered_to, presence: true
17
21
  validate :quotation_or_listing_present
18
22
 
19
23
  before_save :calculate_total_amount
20
24
 
21
25
  # Ransack configuration for secure filtering
22
26
  def self.ransackable_attributes(_auth_object = nil)
23
- %w[id quotation_id listing_id user_id delivery_order_id order_type status fulfillment_type total_amount created_at updated_at]
27
+ %w[id quotation_id listing_id user_id ordered_by_id ordered_to_id delivery_order_id order_type status fulfillment_type total_amount created_at updated_at]
24
28
  end
25
29
 
26
30
  def self.ransackable_associations(_auth_object = nil)
27
- %w[quotation listing user delivery_order order_items]
31
+ %w[quotation listing user ordered_by ordered_to delivery_order order_items]
28
32
  end
29
33
 
30
34
  def self.create_from_quotation(quotation)
@@ -34,7 +38,9 @@ module Dscf::Marketplace
34
38
  order_type: :rfq_based,
35
39
  status: :pending,
36
40
  quotation: quotation,
37
- user: quotation.request_for_quotation.user,
41
+ user: quotation.request_for_quotation.user, # Keep for backward compatibility
42
+ ordered_by: quotation.request_for_quotation.user,
43
+ ordered_to: quotation.business,
38
44
  total_amount: quotation.total_price
39
45
  )
40
46
 
@@ -59,7 +65,9 @@ module Dscf::Marketplace
59
65
  order_type: :direct_listing,
60
66
  status: :pending,
61
67
  listing: listing,
62
- user: user,
68
+ user: user, # Keep for backward compatibility
69
+ ordered_by: user,
70
+ ordered_to: listing.business,
63
71
  total_amount: listing.price * quantity
64
72
  )
65
73
 
@@ -57,13 +57,13 @@ module Dscf
57
57
 
58
58
  def thumbnail_url
59
59
  return nil unless thumbnail.attached?
60
- Rails.application.routes.url_helpers.rails_blob_url(thumbnail, only_path: true)
60
+ Rails.application.routes.url_helpers.rails_blob_url(thumbnail, host: Rails.application.config.action_mailer.default_url_options[:host])
61
61
  end
62
62
 
63
63
  def images_urls
64
64
  return [] unless images.attached?
65
65
  images.map do |image|
66
- Rails.application.routes.url_helpers.rails_blob_url(image, only_path: true)
66
+ Rails.application.routes.url_helpers.rails_blob_url(image, host: Rails.application.config.action_mailer.default_url_options[:host])
67
67
  end
68
68
  end
69
69
  end
@@ -140,7 +140,9 @@ module Dscf
140
140
  order_type: :rfq_based,
141
141
  status: :pending,
142
142
  quotation: self,
143
- user: request_for_quotation.user,
143
+ user: request_for_quotation.user, # Keep for backward compatibility
144
+ ordered_by: request_for_quotation.user,
145
+ ordered_to: business,
144
146
  total_amount: total_price
145
147
  )
146
148
 
@@ -1,13 +1,15 @@
1
1
  module Dscf
2
2
  module Marketplace
3
3
  class OrderSerializer < ActiveModel::Serializer
4
- attributes :id, :quotation_id, :listing_id, :user_id, :delivery_order_id,
4
+ attributes :id, :quotation_id, :listing_id, :user_id, :ordered_by_id, :ordered_to_id, :delivery_order_id,
5
5
  :order_type, :status, :fulfillment_type, :total_amount,
6
6
  :created_at, :updated_at
7
7
 
8
8
  belongs_to :quotation
9
9
  belongs_to :listing
10
10
  belongs_to :user
11
+ belongs_to :ordered_by
12
+ belongs_to :ordered_to
11
13
  belongs_to :delivery_order
12
14
  has_many :order_items
13
15
  end
@@ -6,8 +6,8 @@ module Dscf
6
6
  end
7
7
 
8
8
  def my_orders(params = {})
9
- orders = Dscf::Marketplace::Order.where(user: @current_user)
10
- .includes(:quotation, :listing, :user, :delivery_order, :order_items)
9
+ orders = Dscf::Marketplace::Order.where(ordered_by: @current_user)
10
+ .includes(:quotation, :listing, :user, :ordered_by, :ordered_to, :delivery_order, :order_items)
11
11
 
12
12
  apply_filters(orders, params)
13
13
  end
@@ -0,0 +1,6 @@
1
+ # Set the host for URL generation
2
+ config.action_mailer.default_url_options = { host: 'dscf.bitscollege.edu.et' }
3
+ config.action_controller.default_url_options = { host: 'dscf.bitscollege.edu.et' }
4
+
5
+ # Optional: Force HTTPS if needed
6
+ config.force_ssl = true
@@ -75,6 +75,20 @@ en:
75
75
  update: "Failed to update supplier product"
76
76
  destroy: "Failed to delete supplier product"
77
77
 
78
+ supplier_products:
79
+ success:
80
+ index: "Supplier products retrieved successfully"
81
+ show: "Supplier product details retrieved successfully"
82
+ create: "Supplier product created successfully"
83
+ update: "Supplier product updated successfully"
84
+ destroy: "Supplier product deleted successfully"
85
+ errors:
86
+ index: "Failed to retrieve supplier products"
87
+ show: "Failed to retrieve supplier product details"
88
+ create: "Failed to create supplier product"
89
+ update: "Failed to update supplier product"
90
+ destroy: "Failed to delete supplier product"
91
+
78
92
  listing:
79
93
  success:
80
94
  index: "Listings retrieved successfully"
@@ -82,6 +96,9 @@ en:
82
96
  create: "Listing created successfully"
83
97
  update: "Listing updated successfully"
84
98
  destroy: "Listing deleted successfully"
99
+ activated: "Listing activated successfully"
100
+ paused: "Listing paused successfully"
101
+ sold_out: "Listing marked as sold out successfully"
85
102
  errors:
86
103
  index: "Failed to retrieve listings"
87
104
  show: "Failed to retrieve listing details"
@@ -96,12 +113,16 @@ en:
96
113
  create: "RFQ created successfully"
97
114
  update: "RFQ updated successfully"
98
115
  destroy: "RFQ deleted successfully"
116
+ sent: "RFQ sent successfully"
117
+ closed: "RFQ closed successfully"
99
118
  errors:
100
119
  index: "Failed to retrieve RFQs"
101
120
  show: "Failed to retrieve RFQ details"
102
121
  create: "Failed to create RFQ"
103
122
  update: "Failed to update RFQ"
104
123
  destroy: "Failed to delete RFQ"
124
+ sent: "Failed to send RFQ"
125
+ closed: "Failed to close RFQ"
105
126
 
106
127
  rfq_item:
107
128
  success:
@@ -127,6 +148,7 @@ en:
127
148
  accept: "Quotation accepted successfully"
128
149
  reject: "Quotation rejected successfully"
129
150
  send_quotation: "Quotation sent successfully"
151
+ sent: "Quotation sent successfully"
130
152
  errors:
131
153
  index: "Failed to retrieve quotations"
132
154
  show: "Failed to retrieve quotation details"
@@ -136,6 +158,7 @@ en:
136
158
  accept: "Failed to accept quotation"
137
159
  reject: "Failed to reject quotation"
138
160
  send_quotation: "Failed to send quotation"
161
+ sent: "Failed to send quotation"
139
162
 
140
163
  quotation_item:
141
164
  success:
@@ -161,6 +184,7 @@ en:
161
184
  destroy: "Order deleted successfully"
162
185
  confirm: "Order confirmed successfully"
163
186
  cancel: "Order cancelled successfully"
187
+ complete: "Order completed successfully"
164
188
  errors:
165
189
  index: "Failed to retrieve orders"
166
190
  show: "Failed to retrieve order details"
@@ -169,6 +193,7 @@ en:
169
193
  destroy: "Failed to delete order"
170
194
  confirm: "Failed to confirm order"
171
195
  cancel: "Failed to cancel order"
196
+ complete: "Failed to complete order"
172
197
 
173
198
  order_item:
174
199
  success:
@@ -207,6 +232,29 @@ en:
207
232
  complete_delivery: "Failed to complete delivery"
208
233
  mark_failed: "Failed to mark delivery as failed"
209
234
 
235
+ delivery_orders:
236
+ success:
237
+ index: "Delivery orders retrieved successfully"
238
+ show: "Delivery order details retrieved successfully"
239
+ create: "Delivery order created successfully"
240
+ update: "Delivery order updated successfully"
241
+ destroy: "Delivery order deleted successfully"
242
+ picked_up: "Delivery order picked up successfully"
243
+ delivery_started: "Delivery started successfully"
244
+ delivery_completed: "Delivery completed successfully"
245
+ marked_failed: "Delivery marked as failed"
246
+ index.success: "Delivery orders retrieved successfully"
247
+ errors:
248
+ index: "Failed to retrieve delivery orders"
249
+ show: "Failed to retrieve delivery order details"
250
+ create: "Failed to create delivery order"
251
+ update: "Failed to update delivery order"
252
+ destroy: "Failed to delete delivery order"
253
+ picked_up: "Failed to pickup delivery order"
254
+ delivery_started: "Failed to start delivery"
255
+ delivery_completed: "Failed to complete delivery"
256
+ marked_failed: "Failed to mark delivery as failed"
257
+
210
258
  delivery_order_item:
211
259
  success:
212
260
  index: "Delivery order items retrieved successfully"
@@ -227,6 +275,26 @@ en:
227
275
  report_issue: "Failed to report issue"
228
276
  dispute_delivery: "Failed to dispute delivery"
229
277
 
278
+ delivery_order_items:
279
+ success:
280
+ index: "Delivery order items retrieved successfully"
281
+ show: "Delivery order item details retrieved successfully"
282
+ create: "Delivery order item created successfully"
283
+ update: "Delivery order item updated successfully"
284
+ destroy: "Delivery order item deleted successfully"
285
+ receiver_confirmed: "Item confirmed by receiver successfully"
286
+ issue_reported: "Issue reported successfully"
287
+ delivery_disputed: "Delivery disputed successfully"
288
+ errors:
289
+ index: "Failed to retrieve delivery order items"
290
+ show: "Failed to retrieve delivery order item details"
291
+ create: "Failed to create delivery order item"
292
+ update: "Failed to update delivery order item"
293
+ destroy: "Failed to delete delivery order item"
294
+ receiver_confirmed: "Failed to confirm item"
295
+ issue_reported: "Failed to report issue"
296
+ delivery_disputed: "Failed to dispute delivery"
297
+
230
298
  delivery_vehicle:
231
299
  success:
232
300
  index: "Delivery vehicles retrieved successfully"
@@ -241,17 +309,35 @@ en:
241
309
  update: "Failed to update delivery vehicle"
242
310
  destroy: "Failed to delete delivery vehicle"
243
311
 
244
- # Authentication
245
- auth:
246
- success:
247
- otp_sent: "OTP sent successfully"
248
- errors:
249
- invalid_fin: "Invalid FIN number"
250
-
251
312
  # Business
252
313
  business:
253
314
  success:
254
315
  has_business_check: "Business check completed successfully"
316
+ index: "Businesses retrieved successfully"
317
+ show: "Business details retrieved successfully"
318
+ create: "Business created successfully"
319
+ update: "Business updated successfully"
320
+ destroy: "Business deleted successfully"
321
+ errors:
322
+ index: "Failed to retrieve businesses"
323
+ show: "Failed to retrieve business details"
324
+ create: "Failed to create business"
325
+ update: "Failed to update business"
326
+ destroy: "Failed to delete business"
327
+
328
+ businesses:
329
+ success:
330
+ index: "Businesses retrieved successfully"
331
+ show: "Business details retrieved successfully"
332
+ create: "Business created successfully"
333
+ update: "Business updated successfully"
334
+ destroy: "Business deleted successfully"
335
+ errors:
336
+ index: "Failed to retrieve businesses"
337
+ show: "Failed to retrieve business details"
338
+ create: "Failed to create business"
339
+ update: "Failed to update business"
340
+ destroy: "Failed to delete business"
255
341
 
256
342
  # Global fallback messages
257
343
  operations:
@@ -263,4 +349,5 @@ en:
263
349
  errors:
264
350
  validation_failed: "Validation failed"
265
351
  operation_failed: "Operation failed"
266
- record_not_found: "Record not found"
352
+ record_not_found: "Record not found"
353
+ supplier_not_found: "Supplier not found"
@@ -0,0 +1,12 @@
1
+ class AddOrderedFieldsToOrders < ActiveRecord::Migration[8.0]
2
+ def change
3
+ add_column :dscf_marketplace_orders, :ordered_by_id, :bigint
4
+ add_column :dscf_marketplace_orders, :ordered_to_id, :bigint
5
+
6
+ add_foreign_key :dscf_marketplace_orders, :dscf_core_users, column: :ordered_by_id
7
+ add_foreign_key :dscf_marketplace_orders, :dscf_core_businesses, column: :ordered_to_id
8
+
9
+ add_index :dscf_marketplace_orders, :ordered_by_id, name: "ordered_by_id_on_dm_orders_idx"
10
+ add_index :dscf_marketplace_orders, :ordered_to_id, name: "ordered_to_id_on_dm_orders_idx"
11
+ end
12
+ end
@@ -0,0 +1,34 @@
1
+ class PopulateOrderedFieldsForExistingOrders < ActiveRecord::Migration[8.0]
2
+ def up
3
+ # Populate ordered_by_id from user_id for existing orders
4
+ execute <<-SQL
5
+ UPDATE dscf_marketplace_orders
6
+ SET ordered_by_id = user_id
7
+ WHERE ordered_by_id IS NULL AND user_id IS NOT NULL
8
+ SQL
9
+
10
+ # Populate ordered_to_id for RFQ-based orders
11
+ execute <<-SQL
12
+ UPDATE dscf_marketplace_orders
13
+ SET ordered_to_id = dscf_marketplace_quotations.business_id
14
+ FROM dscf_marketplace_quotations
15
+ WHERE dscf_marketplace_orders.quotation_id = dscf_marketplace_quotations.id
16
+ AND dscf_marketplace_orders.ordered_to_id IS NULL
17
+ AND dscf_marketplace_orders.order_type = 0
18
+ SQL
19
+
20
+ # Populate ordered_to_id for direct listing orders
21
+ execute <<-SQL
22
+ UPDATE dscf_marketplace_orders
23
+ SET ordered_to_id = dscf_marketplace_listings.business_id
24
+ FROM dscf_marketplace_listings
25
+ WHERE dscf_marketplace_orders.listing_id = dscf_marketplace_listings.id
26
+ AND dscf_marketplace_orders.ordered_to_id IS NULL
27
+ AND dscf_marketplace_orders.order_type = 1
28
+ SQL
29
+ end
30
+
31
+ def down
32
+ # No need to rollback data population
33
+ end
34
+ end
@@ -1,5 +1,5 @@
1
1
  module Dscf
2
2
  module Marketplace
3
- VERSION = "0.2.4".freeze
3
+ VERSION = "0.2.5".freeze
4
4
  end
5
5
  end
@@ -3,19 +3,27 @@ FactoryBot.define do
3
3
  order_type { :rfq_based }
4
4
  status { :pending }
5
5
  fulfillment_type { :self_pickup }
6
- association :user, factory: :dscf_core_user
6
+ association :user, factory: :dscf_core_user # Keep for backward compatibility
7
+ association :ordered_to, factory: :dscf_core_business
7
8
  association :quotation, factory: :dscf_marketplace_quotation
8
9
  listing { nil }
9
10
 
11
+ # Ensure ordered_by is set to the same as user for backward compatibility
12
+ after(:build) do |order|
13
+ order.ordered_by = order.user
14
+ end
15
+
10
16
  trait :rfq_based do
11
17
  order_type { :rfq_based }
12
18
  association :quotation, factory: :dscf_marketplace_quotation
19
+ # ordered_to will be set from quotation.business in the model
13
20
  end
14
21
 
15
22
  trait :direct_listing do
16
23
  order_type { :direct_listing }
17
24
  association :listing, factory: :dscf_marketplace_listing
18
25
  quotation { nil }
26
+ # ordered_to will be set from listing.business in the model
19
27
  end
20
28
 
21
29
  trait :self_pickup do
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dscf-marketplace
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.4
4
+ version: 0.2.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Asrat
8
8
  bindir: bin
9
9
  cert_chain: []
10
- date: 2025-09-02 00:00:00.000000000 Z
10
+ date: 2025-09-03 00:00:00.000000000 Z
11
11
  dependencies:
12
12
  - !ruby/object:Gem::Dependency
13
13
  name: rails
@@ -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/services/dscf/marketplace/my_resource_service.rb
472
+ - config/environments/production.rb
472
473
  - config/locales/en.yml
473
474
  - config/routes.rb
474
475
  - db/migrate/20250827172043_create_dscf_marketplace_categories.rb
@@ -493,6 +494,8 @@ files:
493
494
  - db/migrate/20250901074746_add_delivery_order_to_orders.rb
494
495
  - db/migrate/20250901075511_add_delivery_vehicle_to_delivery_orders.rb
495
496
  - db/migrate/20250901080134_add_fulfillment_type_to_orders.rb
497
+ - db/migrate/20250903061154_add_ordered_fields_to_orders.rb
498
+ - db/migrate/20250903061306_populate_ordered_fields_for_existing_orders.rb
496
499
  - lib/dscf/marketplace.rb
497
500
  - lib/dscf/marketplace/engine.rb
498
501
  - lib/dscf/marketplace/version.rb