Skip to content

Commit 92431a9

Browse files
authored
Merge pull request #6136 from gms-electronics/store-reverse-charge-status
Add reverse charge status to stores
2 parents 1a37634 + 3351a85 commit 92431a9

File tree

9 files changed

+98
-2
lines changed

9 files changed

+98
-2
lines changed

api/lib/spree/api_configuration.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@ def promotion_attributes=(value)
149149
preference :store_attributes, :array, default: [
150150
:id, :name, :url, :meta_description, :meta_keywords, :seo_title,
151151
:mail_from_address, :default_currency, :code, :default, :available_locales,
152-
:bcc_email
152+
:bcc_email, :reverse_charge_status
153153
]
154154

155155
preference :store_credit_history_attributes, :array, default: [

api/spec/requests/spree/api/stores_spec.rb

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ module Spree::Api
3232
"meta_description" => nil,
3333
"meta_keywords" => nil,
3434
"seo_title" => nil,
35+
"reverse_charge_status" => 'disabled',
3536
"mail_from_address" => "solidus@example.org",
3637
"bcc_email" => nil,
3738
"default_currency" => nil,
@@ -46,6 +47,7 @@ module Spree::Api
4647
"meta_description" => nil,
4748
"meta_keywords" => nil,
4849
"seo_title" => nil,
50+
"reverse_charge_status" => 'disabled',
4951
"mail_from_address" => "solidus@example.org",
5052
"bcc_email" => nil,
5153
"default_currency" => nil,
@@ -65,6 +67,7 @@ module Spree::Api
6567
"meta_description" => nil,
6668
"meta_keywords" => nil,
6769
"seo_title" => nil,
70+
"reverse_charge_status" => 'disabled',
6871
"mail_from_address" => "solidus@example.org",
6972
"bcc_email" => nil,
7073
"default_currency" => nil,
@@ -112,6 +115,36 @@ module Spree::Api
112115
expect(response.status).to eq(204)
113116
end
114117
end
118+
119+
context "reverse_charge_status attribute" do
120+
it "can create a new store with reverse_charge_status" do
121+
store_hash = {
122+
code: "spree123",
123+
name: "Hack0rz",
124+
url: "spree123.example.com",
125+
mail_from_address: "me@example.com",
126+
reverse_charge_status: "enabled"
127+
}
128+
post spree.api_stores_path, params: { store: store_hash }
129+
expect(response.status).to eq(201)
130+
expect(json_response["reverse_charge_status"]).to eq('enabled')
131+
end
132+
133+
it "can update an existing store with reverse_charge_status" do
134+
store_hash = {
135+
url: "spree123.example.com",
136+
mail_from_address: "me@example.com",
137+
bcc_email: "bcc@example.net",
138+
reverse_charge_status: "disabled"
139+
}
140+
put spree.api_store_path(store), params: { store: store_hash }
141+
expect(response.status).to eq(200)
142+
expect(store.reload.url).to eql "spree123.example.com"
143+
expect(store.reload.mail_from_address).to eql "me@example.com"
144+
expect(store.reload.bcc_email).to eql "bcc@example.net"
145+
expect(store.reload.reverse_charge_status).to eql "disabled"
146+
end
147+
end
115148
end
116149

117150
context "as an user" do

backend/app/views/spree/admin/stores/_form.html.erb

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,17 @@
3030
<%= f.text_area :meta_description, class: 'fullwidth' %>
3131
<%= f.error_message_on :meta_description %>
3232
<% end %>
33+
34+
<% if Spree::Backend::Config.show_reverse_charge_fields %>
35+
<%= f.field_container :reverse_charge_status do %>
36+
<%= f.label :reverse_charge_status %>
37+
<%= f.select :reverse_charge_status,
38+
Spree::Store.reverse_charge_statuses.keys.map { |key| [I18n.t("spree.reverse_charge_statuses.#{key}"), key] },
39+
{ include_blank: false },
40+
{ class: 'custom-select fullwidth' } %>
41+
<%= f.error_message_on :reverse_charge_status %>
42+
<% end %>
43+
<% end %>
3344
</div>
3445
<div class="col-12 col-md-6">
3546
<%= f.field_container :url do %>

backend/lib/spree/backend_configuration.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,10 @@ class BackendConfiguration < Preferences::Configuration
1919
solidus_admin: 'spree/backend/themes/solidus_admin'
2020
}
2121

22+
# @!attribute [rw] show_reverse_charge_fields
23+
# @return [Boolean] Request reverse charge fields. (default: +false+)
24+
preference :show_reverse_charge_fields, :boolean, default: false
25+
2226
preference :search_fields, :hash, default: {
2327
"spree/admin/orders" => [
2428
{

core/app/models/spree/store.rb

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,12 @@ class Store < Spree::Base
2727
before_save :ensure_default_exists_and_is_unique
2828
before_destroy :validate_not_default
2929

30+
enum :reverse_charge_status, {
31+
disabled: 0,
32+
enabled: 1,
33+
not_validated: 2
34+
}, prefix: true
35+
3036
def available_locales
3137
locales = super()
3238
if locales

core/config/locales/en.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2092,6 +2092,10 @@ en:
20922092
return_quantity: Return Quantity
20932093
return_reasons: Return Reasons
20942094
returned: Returned
2095+
reverse_charge_statuses:
2096+
disabled: Disabled
2097+
enabled: Enabled
2098+
not_validated: Not Validated
20952099
review: Review
20962100
risk: Risk
20972101
risk_analysis: Risk Analysis
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
# frozen_string_literal: true
2+
3+
class AddReverseChargeStatusToStore < ActiveRecord::Migration[7.2]
4+
def change
5+
add_column :spree_stores, :reverse_charge_status, :integer, default: 0, null: false,
6+
comment: "Enum values: 0 = disabled, 1 = enabled, 2 = not_validated"
7+
end
8+
end

core/lib/spree/permitted_attributes.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ module PermittedAttributes
124124
@@store_attributes = [:name, :url, :seo_title, :meta_keywords,
125125
:meta_description, :default_currency,
126126
:mail_from_address, :cart_tax_country_iso,
127-
:bcc_email]
127+
:bcc_email, :reverse_charge_status]
128128

129129
@@taxonomy_attributes = [:name]
130130

core/spec/models/spree/store_spec.rb

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,4 +106,34 @@
106106
end
107107
end
108108
end
109+
110+
describe 'enum reverse_charge_status' do
111+
it 'defines the expected enum values' do
112+
expect(Spree::Store.reverse_charge_statuses).to eq({
113+
'disabled' => 0,
114+
'enabled' => 1,
115+
'not_validated' => 2
116+
})
117+
end
118+
119+
it 'allows valid values' do
120+
store = build(:store)
121+
# Updates the reverse_charge_status to "not_validated"
122+
expect(store).to be_valid
123+
store.reverse_charge_status_not_validated!
124+
125+
# Updates the reverse_charge_status to "disabled"
126+
expect(store).to be_valid
127+
store.reverse_charge_status_disabled!
128+
expect(store).to be_valid
129+
130+
# Updates the reverse_charge_status to "enabled"
131+
store.reverse_charge_status_enabled!
132+
expect(store).to be_valid
133+
end
134+
135+
it 'raises an error for invalid values' do
136+
expect { Spree::Store.new(reverse_charge_status: :invalid_status) }.to raise_error(ArgumentError)
137+
end
138+
end
109139
end

0 commit comments

Comments
 (0)