Skip to content

Commit 0f0fca2

Browse files
authored
Merge pull request #6168 from gms-electronics/add-compliance-fields-to-address
Add reverse charge fields to address
2 parents ed645d4 + f5eb41f commit 0f0fca2

13 files changed

Lines changed: 148 additions & 4 deletions

File tree

admin/app/components/solidus_admin/ui/forms/address/component.html.erb

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,5 +50,15 @@
5050
<% end %>
5151

5252
<%= render component("ui/forms/field").text_field(@form_field_name, :phone, object: @addressable) %>
53+
<%= render component("ui/forms/field").text_field(@form_field_name, :email, object: @addressable) %>
54+
<% if Spree::Backend::Config.show_reverse_charge_fields %>
55+
<%= render component("ui/forms/field").text_field(@form_field_name, :vat_id, object: @addressable) %>
56+
<%= render component("ui/forms/field").select(
57+
@form_field_name,
58+
:reverse_charge_status,
59+
Spree::Address.reverse_charge_statuses.keys.map { |key| [I18n.t("spree.reverse_charge_statuses.#{key}"), key] },
60+
object: @addressable
61+
) %>
62+
<% end %>
5363
</div>
5464
</fieldset>

api/lib/spree/api_configuration.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ class ApiConfiguration < Preferences::Configuration
8585
preference :address_attributes, :array, default: [
8686
:id, :name, :address1, :address2, :city, :zipcode, :phone, :company,
8787
:alternative_phone, :country_id, :country_iso, :state_id, :state_name,
88-
:state_text
88+
:state_text, :email, :vat_id, :reverse_charge_status
8989
]
9090

9191
preference :country_attributes, :array, default: [:id, :iso_name, :iso, :iso3, :name, :numcode]

api/spec/requests/spree/api/address_books_spec.rb

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,31 @@ module Spree::Api
9090
end
9191
end
9292

93+
context "when updating a default address with email, VAT-ID and reverse charge status" do
94+
let(:user) { create(:user, spree_api_key: 'galleon') }
95+
let(:changes) {
96+
{ name: "Hermione Granger", email: "hermoine@rowlingmags.com", vat_id: "AB1234567",
97+
reverse_charge_status: "enabled", id: user.ship_address.id}
98+
}
99+
before do
100+
# Create "Harry Potter" default shipping address
101+
user.save_in_address_book(harry_address_attributes, true)
102+
end
103+
104+
it "changes the address and marks the changed address as default" do
105+
expect {
106+
put "/api/users/#{user.id}/address_book",
107+
params: { address_book: harry_address_attributes.merge(changes) },
108+
headers: { Authorization: 'Bearer galleon' }
109+
}.to change { user.reload.ship_address.name }.from("Harry Potter").to("Hermione Granger")
110+
111+
expect(json_response.first["reverse_charge_status"]).to eq("enabled")
112+
expect(json_response.first["email"]).to eq("hermoine@rowlingmags.com")
113+
expect(json_response.first["vat_id"]).to eq("AB1234567")
114+
expect(response.status).to eq(200)
115+
end
116+
end
117+
93118
context 'when creating an address' do
94119
it 'marks the update_target' do
95120
user = create(:user, spree_api_key: 'galleon')

api/spec/requests/spree/api/checkouts_spec.rb

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,10 @@ module Spree::Api
7777
phone: '3014445002',
7878
zipcode: '20814',
7979
state_id: @state.id,
80-
country_id: @country.id
80+
country_id: @country.id,
81+
email: 'john@doe.com',
82+
vat_id: 'ab1235',
83+
reverse_charge_status: 'disabled'
8184
}
8285
end
8386

@@ -95,7 +98,14 @@ module Spree::Api
9598
} }
9699
expect(json_response['state']).to eq('delivery')
97100
expect(json_response['bill_address']['name']).to eq('John Doe')
101+
expect(json_response['bill_address']['email']).to eq('john@doe.com')
102+
expect(json_response['bill_address']['vat_id']).to eq('ab1235')
103+
expect(json_response['bill_address']['reverse_charge_status']).to eq('disabled')
98104
expect(json_response['ship_address']['name']).to eq('John Doe')
105+
expect(json_response['ship_address']['email']).to eq('john@doe.com')
106+
expect(json_response['ship_address']['vat_id']).to eq('ab1235')
107+
expect(json_response['ship_address']['reverse_charge_status']).to eq('disabled')
108+
99109
expect(response.status).to eq(200)
100110
end
101111

backend/app/assets/javascripts/spree/backend/views/order/address.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ Spree.Views.Order.Address = Backbone.View.extend({
2424
eachField: function(callback){
2525
var view = this;
2626
var fields = ["name", "company", "address1", "address2",
27-
"city", "zipcode", "phone", "country_id", "state_name"];
27+
"city", "zipcode", "phone", "country_id", "state_name", "vat_id", "email", "reverse_charge_status"];
2828
_.each(fields, function(field) {
2929
var el = view.$('[name$="[' + field + ']"]');
3030
if (el.length) callback(field, el);

backend/app/views/spree/admin/search/users.json.jbuilder

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,10 @@ json.array!(@users) do |user|
1414
:state_name,
1515
:state_id,
1616
:country_id,
17-
:company
17+
:company,
18+
:email,
19+
:vat_id,
20+
:reverse_charge_status
1821
]
1922
json.ship_address do
2023
if user.ship_address

backend/app/views/spree/admin/shared/_address.html.erb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
<div data-hook="address">
22
<%= address.name %> <%= address.company unless address.company.blank? %><br>
33
<%= address.phone %><%= address.alternative_phone unless address.alternative_phone.blank? %><br>
4+
<%= address.email unless address.email.blank? %><br>
5+
<%= address.vat_id unless address.vat_id.blank? %><br>
46
<%= address.address1 %><br>
57
<% if address.address2.present? %><%= address.address2 %><br><% end %>
68
<%= "#{address.city}, #{address.state_text}, #{address.zipcode}" %><br>

backend/app/views/spree/admin/shared/_address_form.html.erb

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,4 +63,24 @@
6363
<%= f.label :phone %>
6464
<%= f.phone_field :phone, class: 'fullwidth' %>
6565
</div>
66+
67+
<div class="field <%= "#{type}-row" %>">
68+
<%= f.label :email %>
69+
<%= f.email_field :email, class: 'fullwidth' %>
70+
</div>
71+
72+
<% if Spree::Backend::Config.show_reverse_charge_fields %>
73+
<div class="field <%= "#{type}-row" %>">
74+
<%= f.label :vat_id %>
75+
<%= f.text_field :vat_id, class: 'fullwidth' %>
76+
</div>
77+
78+
<div class="field <%= "#{type}-row" %>">
79+
<%= f.label :reverse_charge_status %>
80+
<%= f.select :reverse_charge_status,
81+
Spree::Address.reverse_charge_statuses.keys.map { |key| [I18n.t("spree.reverse_charge_statuses.#{key}"), key] },
82+
{ include_blank: false },
83+
{ class: 'custom-select fullwidth' } %>
84+
</div>
85+
<% end %>
6686
</div>

core/app/models/spree/address.rb

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,12 @@ class Address < Spree::Base
2828

2929
self.allowed_ransackable_attributes = %w[name]
3030

31+
enum :reverse_charge_status, {
32+
disabled: 0,
33+
enabled: 1,
34+
not_validated: 2
35+
}, prefix: true
36+
3137
unless ActiveRecord::Relation.method_defined? :with_values # Rails 7.1+
3238
scope :with_values, ->(attributes) do
3339
where(value_attributes(attributes))

core/config/locales/en.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,10 @@ en:
2424
address2: Street Address (cont'd)
2525
city: City
2626
company: Company
27+
email: Email
2728
name: Name
2829
phone: Phone
30+
vat_id: VAT-ID
2931
zipcode: Zip Code
3032
spree/adjustment:
3133
adjustable: Adjustable
@@ -2359,6 +2361,7 @@ en:
23592361
variant_to_add: Variant to add
23602362
variant_to_be_received: Variant to be received
23612363
variants: Variants
2364+
vat_id: VAT-ID
23622365
version: Version
23632366
view_product: View Product On Store
23642367
void: Void

0 commit comments

Comments
 (0)