diff options
| author | Jeremy Kersten <jke@odoo.com> | 2020-07-14 10:40:01 +0000 |
|---|---|---|
| committer | Jeremy Kersten <jke@odoo.com> | 2020-07-22 09:56:03 +0000 |
| commit | 79807d69073593b863e9ee7f9da91a4bdd4dfb16 (patch) | |
| tree | 5d5b903d84cd6fff101e2cc0e8b24d352759d1c6 | |
| parent | a2a8a91b9f8e6c7c91e59811f6ebfecfb5caa66f (diff) | |
[IMP] base, website_sale: handle required zip/state on eCommerce
task-2172788
closes odoo/odoo#54746
Related: odoo/upgrade#1509
Signed-off-by: Jérémy Kersten (jke) <jke@openerp.com>
| -rw-r--r-- | addons/website_sale/controllers/main.py | 8 | ||||
| -rw-r--r-- | addons/website_sale/static/src/js/website_sale.js | 9 | ||||
| -rw-r--r-- | addons/website_sale/static/tests/tours/website_sale_complete_flow.js | 3 | ||||
| -rw-r--r-- | addons/website_sale/tests/test_sale_process.py | 4 | ||||
| -rw-r--r-- | addons/website_sale/views/templates.xml | 6 | ||||
| -rw-r--r-- | odoo/addons/base/data/res_country_data.xml | 15 | ||||
| -rw-r--r-- | odoo/addons/base/models/res_country.py | 3 | ||||
| -rw-r--r-- | odoo/addons/base/views/res_country_views.xml | 2 |
8 files changed, 41 insertions, 9 deletions
diff --git a/addons/website_sale/controllers/main.py b/addons/website_sale/controllers/main.py index 123acb65293..29caf458371 100644 --- a/addons/website_sale/controllers/main.py +++ b/addons/website_sale/controllers/main.py @@ -555,8 +555,10 @@ class WebsiteSale(http.Controller): country = request.env['res.country'] if data.get('country_id'): country = country.browse(int(data.get('country_id'))) - if 'state_code' in country.get_address_fields() and country.state_ids: + if country.state_required: required_fields += ['state_id'] + if country.zip_required: + required_fields += ['zip'] # error message for empty required fields for field_name in required_fields: @@ -1118,7 +1120,9 @@ class WebsiteSale(http.Controller): return dict( fields=country.get_address_fields(), states=[(st.id, st.name, st.code) for st in country.get_website_sale_states(mode=mode)], - phone_code=country.phone_code + phone_code=country.phone_code, + zip_required=country.zip_required, + state_required=country.state_required, ) # -------------------------------------------------------------------------- diff --git a/addons/website_sale/static/src/js/website_sale.js b/addons/website_sale/static/src/js/website_sale.js index bae366ac69a..65fa4537a1c 100644 --- a/addons/website_sale/static/src/js/website_sale.js +++ b/addons/website_sale/static/src/js/website_sale.js @@ -347,13 +347,13 @@ publicWidget.registry.WebsiteSale = publicWidget.Widget.extend(VariantMixin, { }, }).then(function (data) { // placeholder phone_code - //$("input[name='phone']").attr('placeholder', data.phone_code !== 0 ? '+'+ data.phone_code : ''); + $("input[name='phone']").attr('placeholder', data.phone_code !== 0 ? '+'+ data.phone_code : ''); // populate states and display var selectStates = $("select[name='state_id']"); // dont reload state at first loading (done in qweb) if (selectStates.data('init')===0 || selectStates.find('option').length===1) { - if (data.states.length) { + if (data.states.length || data.state_required) { selectStates.html(''); _.each(data.states, function (x) { var opt = $('<option>').text(x[1]) @@ -382,6 +382,11 @@ publicWidget.registry.WebsiteSale = publicWidget.Widget.extend(VariantMixin, { $(".checkout_autoformat .div_" + field.split('_')[0]).toggle($.inArray(field, data.fields)>=0); }); } + + $("label[for='zip']").toggleClass('label-optional', !data.zip_required); + $("label[for='state_id']").toggleClass('label-optional', !data.state_required); + $("label[for='zip']").get(0).toggleAttribute('required', !!data.zip_required); + $("label[for='state_id']").get(0).toggleAttribute('required', !!data.state_required); }); }, /** diff --git a/addons/website_sale/static/tests/tours/website_sale_complete_flow.js b/addons/website_sale/static/tests/tours/website_sale_complete_flow.js index d093e821d85..b5426f99a58 100644 --- a/addons/website_sale/static/tests/tours/website_sale_complete_flow.js +++ b/addons/website_sale/static/tests/tours/website_sale_complete_flow.js @@ -55,6 +55,7 @@ odoo.define('website_sale_tour.tour', function (require) { $('input[name="email"]').val('abc@odoo.com'); $('input[name="street"]').val('SO1 Billing Street, 33'); $('input[name="city"]').val('SO1BillingCity'); + $('input[name="zip"]').val('10000'); $('#country_id option:eq(1)').attr('selected', true); }, }, @@ -75,6 +76,7 @@ odoo.define('website_sale_tour.tour', function (require) { $('input[name="phone"]').val('8888888888'); $('input[name="street"]').val('17, SO1 Shipping Road'); $('input[name="city"]').val('SO1ShippingCity'); + $('input[name="zip"]').val('10000'); $('#country_id option:eq(1)').attr('selected', true); }, }, @@ -263,6 +265,7 @@ odoo.define('website_sale_tour.tour', function (require) { $('input[name="phone"]').val('7777777777'); $('input[name="street"]').val('SO2New Shipping Street, 5'); $('input[name="city"]').val('SO2NewShipping'); + $('input[name="zip"]').val('1200'); $('#country_id option:eq(1)').attr('selected', true); }, }, diff --git a/addons/website_sale/tests/test_sale_process.py b/addons/website_sale/tests/test_sale_process.py index 6a94bb88bdc..259a26e2c4d 100644 --- a/addons/website_sale/tests/test_sale_process.py +++ b/addons/website_sale/tests/test_sale_process.py @@ -111,11 +111,11 @@ class TestWebsiteSaleCheckoutAddress(TransactionCaseWithUserDemo): def setUp(self): super(TestWebsiteSaleCheckoutAddress, self).setUp() self.website = self.env.ref('website.default_website') - self.country_id = self.env['res.country'].search([], limit=1).id + self.country_id = self.env.ref('base.be').id self.WebsiteSaleController = WebsiteSale() self.default_address_values = { 'name': 'a res.partner address', 'email': 'email@email.email', 'street': 'ooo', - 'city': 'ooo', 'country_id': self.country_id, 'submitted': 1, + 'city': 'ooo', 'zip': '1200', 'country_id': self.country_id, 'submitted': 1, } def _create_so(self, partner_id=None): diff --git a/addons/website_sale/views/templates.xml b/addons/website_sale/views/templates.xml index 917ce2bac27..afc70444d1f 100644 --- a/addons/website_sale/views/templates.xml +++ b/addons/website_sale/views/templates.xml @@ -1209,16 +1209,16 @@ <h2 class="o_page_header mt8">Shipping Address </h2> </t> <t t-if="partner_id == website_sale_order.partner_shipping_id.id == website_sale_order.partner_invoice_id.id"> - <div class="alert alert-warning" role="alert"> + <div class="alert alert-warning" role="alert" t-if="not only_services"> <h4 class="alert-heading">Be aware!</h4> - <p t-if="not only_services" groups="sale.group_delivery_invoice_address"> + <p groups="sale.group_delivery_invoice_address"> You are editing your <b>billing and shipping</b> addresses at the same time!<br/> If you want to modify your shipping address, create a <a href='/shop/address'>new address</a>. </p> </div> </t> <t t-if="error" t-foreach="error.get('error_message', [])" t-as="err"> - <h4 class="text-danger" t-esc="err" /> + <h5 class="text-danger" t-esc="err" /> </t> <form action="/shop/address" method="post" class="checkout_autoformat"> <div class="form-row"> diff --git a/odoo/addons/base/data/res_country_data.xml b/odoo/addons/base/data/res_country_data.xml index c0e3670df1f..0a60c26cce9 100644 --- a/odoo/addons/base/data/res_country_data.xml +++ b/odoo/addons/base/data/res_country_data.xml @@ -54,6 +54,7 @@ <record id="ao" model="res.country"> <field name="name">Angola</field> <field name="code">ao</field> + <field name='zip_required'>0</field> <field file="base/static/img/country_flags/ao.png" name="image" type="base64" /> <field name="currency_id" ref="AOA" /> <field eval="244" name="phone_code" /> @@ -67,6 +68,7 @@ <record id="ar" model="res.country"> <field name="name">Argentina</field> <field name="code">ar</field> + <field name='state_required'>1</field> <field file="base/static/img/country_flags/ar.png" name="image" type="base64" /> <field name="currency_id" ref="ARS" /> <field eval="54" name="phone_code" /> @@ -92,6 +94,7 @@ <record id="au" model="res.country"> <field name="name">Australia</field> <field name="code">au</field> + <field name='state_required'>1</field> <field file="base/static/img/country_flags/au.png" name="image" type="base64" /> <field eval="'%(street)s\n%(street2)s\n%(city)s %(state_code)s %(zip)s\n%(country_name)s'" name="address_format" /> <field name="currency_id" ref="AUD" /> @@ -180,6 +183,7 @@ <record id="bj" model="res.country"> <field name="name">Benin</field> <field name="code">bj</field> + <field name='zip_required'>0</field> <field file="base/static/img/country_flags/bj.png" name="image" type="base64" /> <field name="currency_id" ref="XOF" /> <field eval="229" name="phone_code" /> @@ -263,6 +267,7 @@ <record id="bz" model="res.country"> <field name="name">Belize</field> <field name="code">bz</field> + <field name='zip_required'>0</field> <field file="base/static/img/country_flags/bz.png" name="image" type="base64" /> <field name="currency_id" ref="BZD" /> <field eval="501" name="phone_code" /> @@ -270,6 +275,7 @@ <record id="ca" model="res.country"> <field name="name">Canada</field> <field name="code">ca</field> + <field name='state_required'>1</field> <field file="base/static/img/country_flags/ca.png" name="image" type="base64" /> <field eval="'%(street)s\n%(street2)s\n%(city)s %(state_code)s %(zip)s\n%(country_name)s'" name="address_format" /> <field name="currency_id" ref="CAD" /> @@ -682,6 +688,7 @@ <record id="hk" model="res.country"> <field name="name">Hong Kong</field> <field name="code">hk</field> + <field name='zip_required'>0</field> <field file="base/static/img/country_flags/hk.png" name="image" type="base64" /> <field name="currency_id" ref="HKD" /> <field eval="852" name="phone_code" /> @@ -726,6 +733,7 @@ <record id="id" model="res.country"> <field name="name">Indonesia</field> <field name="code">id</field> + <field name='state_required'>1</field> <field file="base/static/img/country_flags/id.png" name="image" type="base64" /> <field name="currency_id" ref="IDR" /> <field eval="62" name="phone_code" /> @@ -734,6 +742,7 @@ <record id="ie" model="res.country"> <field name="name">Ireland</field> <field name="code">ie</field> + <field name='zip_required'>0</field> <field file="base/static/img/country_flags/ie.png" name="image" type="base64" /> <field name="currency_id" ref="EUR" /> <field eval="353" name="phone_code" /> @@ -756,6 +765,7 @@ <record id="in" model="res.country"> <field name="name">India</field> <field name="code">in</field> + <field name='state_required'>1</field> <field file="base/static/img/country_flags/in.png" name="image" type="base64" /> <field eval="'%(street)s\n%(street2)s\n%(city)s %(zip)s\n%(state_name)s %(state_code)s\n%(country_name)s'" name="address_format" /> <field name="currency_id" ref="INR" /> @@ -793,6 +803,7 @@ <record id="it" model="res.country"> <field name="name">Italy</field> <field name="code">it</field> + <field name='state_required'>1</field> <field file="base/static/img/country_flags/it.png" name="image" type="base64" /> <field name="currency_id" ref="EUR" /> <field eval="39" name="phone_code" /> @@ -822,6 +833,7 @@ <record id="jp" model="res.country"> <field name="name">Japan</field> <field name="code">jp</field> + <field name='state_required'>1</field> <field file="base/static/img/country_flags/jp.png" name="image" type="base64" /> <field name="currency_id" ref="JPY" /> <field name="address_format" eval="'%(zip)s\n%(state_name)s %(city)s\n%(street)s\n%(street2)s\n%(country_name)s'"/> @@ -1065,6 +1077,7 @@ <record id="mo" model="res.country"> <field name="name">Macau</field> <field name="code">mo</field> + <field name='zip_required'>0</field> <field file="base/static/img/country_flags/mo.png" name="image" type="base64" /> <field name="currency_id" ref="MOP" /> <field eval="853" name="phone_code" /> @@ -1130,6 +1143,7 @@ <record id="mx" model="res.country"> <field name="name">Mexico</field> <field name="code">mx</field> + <field name='state_required'>1</field> <field file="base/static/img/country_flags/mx.png" name="image" type="base64" /> <field name="currency_id" ref="MXN" /> <field eval="52" name="phone_code" /> @@ -1681,6 +1695,7 @@ <record id="us" model="res.country"> <field name="name">United States</field> <field name="code">us</field> + <field name='state_required'>1</field> <field file="base/static/img/country_flags/us.png" name="image" type="base64" /> <field eval="'%(street)s\n%(street2)s\n%(city)s %(state_code)s %(zip)s\n%(country_name)s'" name="address_format" /> <field name="currency_id" ref="USD" /> diff --git a/odoo/addons/base/models/res_country.py b/odoo/addons/base/models/res_country.py index e8f9a7f53a0..112791229fe 100644 --- a/odoo/addons/base/models/res_country.py +++ b/odoo/addons/base/models/res_country.py @@ -67,6 +67,9 @@ class Country(models.Model): help="Determines where the customer/company name should be placed, i.e. after or before the address.") vat_label = fields.Char(string='Vat Label', translate=True, help="Use this field if you want to change vat label.") + state_required = fields.Boolean(default=False) + zip_required = fields.Boolean(default=True) + _sql_constraints = [ ('name_uniq', 'unique (name)', 'The name of the country must be unique !'), diff --git a/odoo/addons/base/views/res_country_views.xml b/odoo/addons/base/views/res_country_views.xml index a16cbe9b80e..02bd9c78d5e 100644 --- a/odoo/addons/base/views/res_country_views.xml +++ b/odoo/addons/base/views/res_country_views.xml @@ -33,6 +33,8 @@ <group name="phone_vat_settings"> <field name="phone_code" options="{'format': false}"/> <field name="vat_label"/> + <field name="zip_required"/> + <field name="state_required"/> </group> <group name="advanced_address_formatting" string="Advanced Address Formatting" groups="base.group_no_one" col="4" colspan="4"> <field name="address_view_id"/> |
