dscf-marketplace 0.7.5 → 0.7.6
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/orders_controller.rb +27 -3
- data/app/controllers/dscf/marketplace/quotations_controller.rb +20 -1
- data/app/models/dscf/marketplace/order.rb +27 -3
- data/app/models/dscf/marketplace/quotation.rb +2 -0
- data/app/serializers/dscf/marketplace/order_serializer.rb +1 -1
- data/config/locales/en.yml +1 -1
- data/db/migrate/20260506100000_add_payment_references_to_dscf_marketplace_orders.rb +6 -0
- data/lib/dscf/marketplace/version.rb +1 -1
- data/spec/factories/dscf/marketplace/orders.rb +4 -0
- metadata +3 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 4beaf427e69fdbc843de062d0083c55ece3d751cca2adab8cf989c20de633886
|
|
4
|
+
data.tar.gz: 8479a97308423b04afa67d95c2cc3fde8096b01a6b24ec1c9f3519e0dfe0d35f
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 98399d8626f0fdd09979f7be48bc34f36126d3c07ad268d57338b1de4a9575ece83a8eabf13e279dcb0ea1824dd68317c211025ff6c3eb57ebf07121d3ec261a
|
|
7
|
+
data.tar.gz: b9e8eec981a2c12e01a06dac62e7d22d98c170d4c08760486321e6acbd61601e2380a9bf33cd1cf5fd5806f545543fdeb527795521e4c908c5eb6f394930a670
|
|
@@ -5,6 +5,7 @@ module Dscf
|
|
|
5
5
|
|
|
6
6
|
def create
|
|
7
7
|
authorize @clazz.new, :create?
|
|
8
|
+
return render_unsupported_payment_method if unsupported_payment_method_for_new_order?(model_params[:payment_method])
|
|
8
9
|
|
|
9
10
|
return create_direct_listing_order if direct_listing_request?
|
|
10
11
|
|
|
@@ -134,7 +135,7 @@ module Dscf
|
|
|
134
135
|
options = {include: includes} if includes.present?
|
|
135
136
|
render_success(data: order, serializer_options: options, status: :created)
|
|
136
137
|
rescue ActiveRecord::RecordInvalid => e
|
|
137
|
-
errors = e.record&.errors&.full_messages&.presence || [e.message]
|
|
138
|
+
errors = e.record&.errors&.full_messages&.presence || [ e.message ]
|
|
138
139
|
render_error(errors: errors.join(", "), status: :unprocessable_entity)
|
|
139
140
|
rescue => e
|
|
140
141
|
render_error(error: e.message)
|
|
@@ -150,11 +151,13 @@ module Dscf
|
|
|
150
151
|
end
|
|
151
152
|
|
|
152
153
|
def model_params
|
|
153
|
-
params.require(:order).permit(
|
|
154
|
+
@model_params ||= params.require(:order).permit(
|
|
154
155
|
:quotation_id, :listing_id, :user_id, :ordered_by_id, :ordered_to_id, :delivery_order_id, :dropoff_address_id,
|
|
155
|
-
:order_type, :status, :fulfillment_type, :payment_method,
|
|
156
|
+
:order_type, :status, :fulfillment_type, :payment_method, :received_bank_name, :transaction_reference,
|
|
156
157
|
order_items_attributes: [ :id, :quotation_item_id, :listing_id, :product_id, :unit_id, :quantity, :unit_price, :status, :_destroy ]
|
|
157
158
|
)
|
|
159
|
+
@model_params[:payment_method] = normalize_payment_method(@model_params[:payment_method]) if @model_params.key?(:payment_method)
|
|
160
|
+
@model_params
|
|
158
161
|
end
|
|
159
162
|
|
|
160
163
|
def eager_loaded_associations
|
|
@@ -173,6 +176,27 @@ module Dscf
|
|
|
173
176
|
def find_record
|
|
174
177
|
Dscf::Marketplace::Order.find(params[:id])
|
|
175
178
|
end
|
|
179
|
+
|
|
180
|
+
def normalize_payment_method(value)
|
|
181
|
+
case value.to_s
|
|
182
|
+
when "", "0", "cash"
|
|
183
|
+
"cash"
|
|
184
|
+
when "1", "credit"
|
|
185
|
+
"credit"
|
|
186
|
+
when "2", "transfer", "bank transfer", "bank_transfer"
|
|
187
|
+
"bank_transfer"
|
|
188
|
+
else
|
|
189
|
+
value
|
|
190
|
+
end
|
|
191
|
+
end
|
|
192
|
+
|
|
193
|
+
def unsupported_payment_method_for_new_order?(payment_method)
|
|
194
|
+
payment_method.present? && payment_method == "credit"
|
|
195
|
+
end
|
|
196
|
+
|
|
197
|
+
def render_unsupported_payment_method
|
|
198
|
+
render_error(errors: "Credit is no longer supported for new marketplace orders", status: :unprocessable_entity)
|
|
199
|
+
end
|
|
176
200
|
end
|
|
177
201
|
end
|
|
178
202
|
end
|
|
@@ -29,6 +29,7 @@ module Dscf
|
|
|
29
29
|
|
|
30
30
|
fulfillment_type = params[:fulfillment_type]
|
|
31
31
|
dropoff_address_id = params[:dropoff_address_id]
|
|
32
|
+
payment_method = normalize_payment_method(params[:payment_method]).presence || "cash"
|
|
32
33
|
|
|
33
34
|
# Validate fulfillment_type
|
|
34
35
|
unless fulfillment_type.present? && Dscf::Marketplace::Order.fulfillment_types.keys.include?(fulfillment_type)
|
|
@@ -50,7 +51,12 @@ module Dscf
|
|
|
50
51
|
return
|
|
51
52
|
end
|
|
52
53
|
|
|
53
|
-
|
|
54
|
+
unless %w[cash bank_transfer].include?(payment_method)
|
|
55
|
+
render_error(errors: "Credit is no longer supported for new marketplace orders", status: :unprocessable_entity)
|
|
56
|
+
return
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
if @obj.accept!(fulfillment_type: fulfillment_type, dropoff_address: dropoff_address, payment_method: payment_method)
|
|
54
60
|
render_success("quotations.success.accepted", data: @obj)
|
|
55
61
|
else
|
|
56
62
|
render_error("quotations.errors.accept_failed")
|
|
@@ -116,6 +122,19 @@ module Dscf
|
|
|
116
122
|
update: [ :request_for_quotation, :business ]
|
|
117
123
|
}
|
|
118
124
|
end
|
|
125
|
+
|
|
126
|
+
def normalize_payment_method(value)
|
|
127
|
+
case value.to_s
|
|
128
|
+
when "", "0", "cash"
|
|
129
|
+
"cash"
|
|
130
|
+
when "1", "credit"
|
|
131
|
+
"credit"
|
|
132
|
+
when "2", "transfer", "bank transfer", "bank_transfer"
|
|
133
|
+
"bank_transfer"
|
|
134
|
+
else
|
|
135
|
+
value
|
|
136
|
+
end
|
|
137
|
+
end
|
|
119
138
|
end
|
|
120
139
|
end
|
|
121
140
|
end
|
|
@@ -3,7 +3,7 @@ module Dscf::Marketplace
|
|
|
3
3
|
enum :order_type, {rfq_based: 0, direct_listing: 1}
|
|
4
4
|
enum :status, {pending: 0, confirmed: 1, processing: 2, completed: 3, cancelled: 4}
|
|
5
5
|
enum :fulfillment_type, {self_pickup: 0, delivery: 1}
|
|
6
|
-
enum :payment_method, {cash: 0, credit: 1,
|
|
6
|
+
enum :payment_method, {cash: 0, credit: 1, bank_transfer: 2}, default: :cash
|
|
7
7
|
|
|
8
8
|
belongs_to :quotation, optional: true
|
|
9
9
|
belongs_to :listing, optional: true
|
|
@@ -23,13 +23,17 @@ module Dscf::Marketplace
|
|
|
23
23
|
validates :ordered_by, presence: true
|
|
24
24
|
validates :ordered_to, presence: true
|
|
25
25
|
validates :dropoff_address, presence: true, if: :delivery?
|
|
26
|
+
validates :received_bank_name, :transaction_reference, absence: true, if: :cash?
|
|
26
27
|
validate :quotation_or_listing_present
|
|
28
|
+
validate :credit_payment_method_disabled, if: :will_save_change_to_payment_method?
|
|
29
|
+
validate :bank_transfer_reference_required_for_completed_orders
|
|
27
30
|
|
|
31
|
+
before_validation :clear_payment_references_for_cash
|
|
28
32
|
before_save :calculate_total_amount
|
|
29
33
|
|
|
30
34
|
# Ransack configuration for secure filtering
|
|
31
35
|
def self.ransackable_attributes(_auth_object = nil)
|
|
32
|
-
%w[id quotation_id listing_id user_id ordered_by_id ordered_to_id delivery_order_id dropoff_address_id order_type status fulfillment_type payment_method total_amount created_at updated_at]
|
|
36
|
+
%w[id quotation_id listing_id user_id ordered_by_id ordered_to_id delivery_order_id dropoff_address_id order_type status fulfillment_type payment_method received_bank_name transaction_reference total_amount created_at updated_at]
|
|
33
37
|
end
|
|
34
38
|
|
|
35
39
|
def self.ransackable_associations(_auth_object = nil)
|
|
@@ -152,12 +156,32 @@ module Dscf::Marketplace
|
|
|
152
156
|
self.total_amount = order_items.sum { |item| item.quantity * item.unit_price }
|
|
153
157
|
end
|
|
154
158
|
|
|
155
|
-
|
|
159
|
+
private
|
|
156
160
|
|
|
157
161
|
def quotation_or_listing_present
|
|
158
162
|
unless quotation.present? || listing.present?
|
|
159
163
|
errors.add(:base, "Either quotation or listing must be present")
|
|
160
164
|
end
|
|
161
165
|
end
|
|
166
|
+
|
|
167
|
+
def credit_payment_method_disabled
|
|
168
|
+
return unless credit?
|
|
169
|
+
|
|
170
|
+
errors.add(:payment_method, "is no longer supported for new marketplace orders")
|
|
171
|
+
end
|
|
172
|
+
|
|
173
|
+
def bank_transfer_reference_required_for_completed_orders
|
|
174
|
+
return unless completed? && bank_transfer?
|
|
175
|
+
|
|
176
|
+
errors.add(:received_bank_name, "can't be blank") if received_bank_name.blank?
|
|
177
|
+
errors.add(:transaction_reference, "can't be blank") if transaction_reference.blank?
|
|
178
|
+
end
|
|
179
|
+
|
|
180
|
+
def clear_payment_references_for_cash
|
|
181
|
+
return unless cash?
|
|
182
|
+
|
|
183
|
+
self.received_bank_name = nil
|
|
184
|
+
self.transaction_reference = nil
|
|
185
|
+
end
|
|
162
186
|
end
|
|
163
187
|
end
|
|
@@ -122,11 +122,13 @@ module Dscf
|
|
|
122
122
|
|
|
123
123
|
fulfillment_type = options[:fulfillment_type] || "self_pickup"
|
|
124
124
|
dropoff_address = options[:dropoff_address]
|
|
125
|
+
payment_method = options[:payment_method].presence || :cash
|
|
125
126
|
|
|
126
127
|
order = Dscf::Marketplace::Order.create!(
|
|
127
128
|
order_type: :rfq_based,
|
|
128
129
|
status: :processing,
|
|
129
130
|
fulfillment_type: fulfillment_type,
|
|
131
|
+
payment_method: payment_method,
|
|
130
132
|
quotation: self,
|
|
131
133
|
user: request_for_quotation.user, # Keep for backward compatibility
|
|
132
134
|
ordered_by: request_for_quotation.user,
|
|
@@ -2,7 +2,7 @@ module Dscf
|
|
|
2
2
|
module Marketplace
|
|
3
3
|
class OrderSerializer < ActiveModel::Serializer
|
|
4
4
|
attributes :id, :quotation_id, :listing_id, :user_id, :ordered_by_id, :ordered_to_id, :delivery_order_id, :dropoff_address_id,
|
|
5
|
-
:order_type, :status, :fulfillment_type, :payment_method, :total_amount,
|
|
5
|
+
:order_type, :status, :fulfillment_type, :payment_method, :received_bank_name, :transaction_reference, :total_amount,
|
|
6
6
|
:buyer_phone, :buyer_email, :seller_name, :seller_phone, :seller_email,
|
|
7
7
|
:created_at, :updated_at
|
|
8
8
|
|
data/config/locales/en.yml
CHANGED
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.7.
|
|
4
|
+
version: 0.7.6
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Asrat
|
|
8
8
|
bindir: bin
|
|
9
9
|
cert_chain: []
|
|
10
|
-
date: 2026-05-
|
|
10
|
+
date: 2026-05-06 00:00:00.000000000 Z
|
|
11
11
|
dependencies:
|
|
12
12
|
- !ruby/object:Gem::Dependency
|
|
13
13
|
name: rails
|
|
@@ -533,6 +533,7 @@ files:
|
|
|
533
533
|
- db/migrate/20260310120000_add_active_and_description_to_dscf_core_roles.rb
|
|
534
534
|
- db/migrate/20260310122000_add_missing_fields_to_dscf_core_user_roles.rb
|
|
535
535
|
- db/migrate/20260501000002_add_supplier_contact_fields_to_supplier_products.rb
|
|
536
|
+
- db/migrate/20260506100000_add_payment_references_to_dscf_marketplace_orders.rb
|
|
536
537
|
- db/seeds.rb
|
|
537
538
|
- lib/dscf/marketplace.rb
|
|
538
539
|
- lib/dscf/marketplace/engine.rb
|