Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion api/lib/spree/api_configuration.rb
Original file line number Diff line number Diff line change
Expand Up @@ -127,7 +127,7 @@ def promotion_attributes=(value)
preference :store_attributes, :array, default: [
:id, :name, :url, :meta_description, :meta_keywords, :seo_title,
:mail_from_address, :default_currency, :code, :default, :available_locales,
:bcc_email
:bcc_email, :reverse_charge_status
]

preference :store_credit_history_attributes, :array, default: [
Expand Down
33 changes: 33 additions & 0 deletions api/spec/requests/spree/api/stores_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ module Spree::Api
"meta_description" => nil,
"meta_keywords" => nil,
"seo_title" => nil,
"reverse_charge_status" => 'disabled',
"mail_from_address" => "[email protected]",
"bcc_email" => nil,
"default_currency" => nil,
Expand All @@ -46,6 +47,7 @@ module Spree::Api
"meta_description" => nil,
"meta_keywords" => nil,
"seo_title" => nil,
"reverse_charge_status" => 'disabled',
"mail_from_address" => "[email protected]",
"bcc_email" => nil,
"default_currency" => nil,
Expand All @@ -65,6 +67,7 @@ module Spree::Api
"meta_description" => nil,
"meta_keywords" => nil,
"seo_title" => nil,
"reverse_charge_status" => 'disabled',
"mail_from_address" => "[email protected]",
"bcc_email" => nil,
"default_currency" => nil,
Expand Down Expand Up @@ -112,6 +115,36 @@ module Spree::Api
expect(response.status).to eq(204)
end
end

context "reverse_charge_status attribute" do
it "can create a new store with reverse_charge_status" do
store_hash = {
code: "spree123",
name: "Hack0rz",
url: "spree123.example.com",
mail_from_address: "[email protected]",
reverse_charge_status: "enabled"
}
post spree.api_stores_path, params: { store: store_hash }
expect(response.status).to eq(201)
expect(json_response["reverse_charge_status"]).to eq('enabled')
end

it "can update an existing store with reverse_charge_status" do
store_hash = {
url: "spree123.example.com",
mail_from_address: "[email protected]",
bcc_email: "[email protected]",
reverse_charge_status: "disabled"
}
put spree.api_store_path(store), params: { store: store_hash }
expect(response.status).to eq(200)
expect(store.reload.url).to eql "spree123.example.com"
expect(store.reload.mail_from_address).to eql "[email protected]"
expect(store.reload.bcc_email).to eql "[email protected]"
expect(store.reload.reverse_charge_status).to eql "disabled"
end
end
end

context "as an user" do
Expand Down
11 changes: 11 additions & 0 deletions backend/app/views/spree/admin/stores/_form.html.erb
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,17 @@
<%= f.text_area :meta_description, class: 'fullwidth' %>
<%= f.error_message_on :meta_description %>
<% end %>

<% if Spree::Backend::Config.show_reverse_charge_fields %>
<%= f.field_container :reverse_charge_status do %>
<%= f.label :reverse_charge_status %>
<%= f.select :reverse_charge_status,
Spree::Store.reverse_charge_statuses.keys.map { |key| [I18n.t("spree.reverse_charge_statuses.#{key}"), key] },
{ include_blank: false },
{ class: 'custom-select fullwidth' } %>
<%= f.error_message_on :reverse_charge_status %>
<% end %>
<% end %>
</div>
<div class="col-12 col-md-6">
<%= f.field_container :url do %>
Expand Down
4 changes: 4 additions & 0 deletions backend/lib/spree/backend_configuration.rb
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,10 @@ class BackendConfiguration < Preferences::Configuration
solidus_admin: 'spree/backend/themes/solidus_admin'
}

# @!attribute [rw] show_reverse_charge_fields
# @return [Boolean] Request reverse charge fields. (default: +false+)
preference :show_reverse_charge_fields, :boolean, default: false

preference :search_fields, :hash, default: {
"spree/admin/orders" => [
{
Expand Down
6 changes: 6 additions & 0 deletions core/app/models/spree/store.rb
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,12 @@ class Store < Spree::Base
before_save :ensure_default_exists_and_is_unique
before_destroy :validate_not_default

enum :reverse_charge_status, {
disabled: 0,
enabled: 1,
not_validated: 2
}, prefix: true

def available_locales
locales = super()
if locales
Expand Down
4 changes: 4 additions & 0 deletions core/config/locales/en.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2081,6 +2081,10 @@ en:
return_quantity: Return Quantity
return_reasons: Return Reasons
returned: Returned
reverse_charge_statuses:
disabled: Disabled
enabled: Enabled
not_validated: Not Validated
review: Review
risk: Risk
risk_analysis: Risk Analysis
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
# frozen_string_literal: true

class AddReverseChargeStatusToStore < ActiveRecord::Migration[7.2]
def change
add_column :spree_stores, :reverse_charge_status, :integer, default: 0, null: false,
comment: "Enum values: 0 = disabled, 1 = enabled, 2 = not_validated"
end
end
2 changes: 1 addition & 1 deletion core/lib/spree/permitted_attributes.rb
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,7 @@ module PermittedAttributes
@@store_attributes = [:name, :url, :seo_title, :meta_keywords,
:meta_description, :default_currency,
:mail_from_address, :cart_tax_country_iso,
:bcc_email]
:bcc_email, :reverse_charge_status]

@@taxonomy_attributes = [:name]

Expand Down
30 changes: 30 additions & 0 deletions core/spec/models/spree/store_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -106,4 +106,34 @@
end
end
end

describe 'enum reverse_charge_status' do
it 'defines the expected enum values' do
expect(Spree::Store.reverse_charge_statuses).to eq({
'disabled' => 0,
'enabled' => 1,
'not_validated' => 2
})
end

it 'allows valid values' do
store = build(:store)
# Updates the reverse_charge_status to "not_validated"
expect(store).to be_valid
store.reverse_charge_status_not_validated!

# Updates the reverse_charge_status to "disabled"
expect(store).to be_valid
store.reverse_charge_status_disabled!
expect(store).to be_valid

# Updates the reverse_charge_status to "enabled"
store.reverse_charge_status_enabled!
expect(store).to be_valid
end

it 'raises an error for invalid values' do
expect { Spree::Store.new(reverse_charge_status: :invalid_status) }.to raise_error(ArgumentError)
end
end
end