From 6fa8aae161247060535bd1f5e9e3f740f2e2bb22 Mon Sep 17 00:00:00 2001 From: joan Date: Wed, 14 Oct 2020 11:33:42 +0200 Subject: [PATCH 1/3] 2509 - Added forms to create new locations --- db/changes/10240-allSaints/00-ACL.sql | 3 ++ .../client/front/address/create/index.html | 4 +- modules/client/front/address/edit/index.html | 4 +- modules/client/front/create/index.html | 4 +- modules/client/front/fiscal-data/index.html | 4 +- modules/client/front/fiscal-data/index.js | 3 ++ modules/client/front/index.js | 2 + modules/client/front/postcode/city/index.html | 27 +++++++++++++ modules/client/front/postcode/city/index.js | 37 +++++++++++++++++ .../client/front/postcode/city/index.spec.js | 34 ++++++++++++++++ modules/client/front/postcode/index.html | 40 +++++++++++++++---- modules/client/front/postcode/index.js | 33 +++++++++++---- modules/client/front/postcode/index.spec.js | 8 ++-- modules/client/front/postcode/locale/es.yml | 8 +++- .../client/front/postcode/province/index.html | 27 +++++++++++++ .../client/front/postcode/province/index.js | 37 +++++++++++++++++ .../front/postcode/province/index.spec.js | 34 ++++++++++++++++ modules/client/front/postcode/style.scss | 2 +- 18 files changed, 282 insertions(+), 29 deletions(-) create mode 100644 db/changes/10240-allSaints/00-ACL.sql create mode 100644 modules/client/front/postcode/city/index.html create mode 100644 modules/client/front/postcode/city/index.js create mode 100644 modules/client/front/postcode/city/index.spec.js create mode 100644 modules/client/front/postcode/province/index.html create mode 100644 modules/client/front/postcode/province/index.js create mode 100644 modules/client/front/postcode/province/index.spec.js diff --git a/db/changes/10240-allSaints/00-ACL.sql b/db/changes/10240-allSaints/00-ACL.sql new file mode 100644 index 000000000..60882e308 --- /dev/null +++ b/db/changes/10240-allSaints/00-ACL.sql @@ -0,0 +1,3 @@ +UPDATE `salix`.`ACL` SET `principalId` = 'deliveryBoss' WHERE (`id` = '194'); +INSERT INTO `salix`.`ACL` (`model`, `property`, `accessType`, `permission`, `principalType`, `principalId`) VALUES ('Town', '*', 'WRITE', 'ALLOW', 'ROLE', 'deliveryBoss'); +INSERT INTO `salix`.`ACL` (`model`, `property`, `accessType`, `permission`, `principalType`, `principalId`) VALUES ('Province', '*', 'WRITE', 'ALLOW', 'ROLE', 'deliveryBoss'); diff --git a/modules/client/front/address/create/index.html b/modules/client/front/address/create/index.html index d6b5bcf8e..233afa04b 100644 --- a/modules/client/front/address/create/index.html +++ b/modules/client/front/address/create/index.html @@ -153,9 +153,9 @@ - - + - - + - - \ No newline at end of file + \ No newline at end of file diff --git a/modules/client/front/fiscal-data/index.html b/modules/client/front/fiscal-data/index.html index b3789b34a..70221dbd0 100644 --- a/modules/client/front/fiscal-data/index.html +++ b/modules/client/front/fiscal-data/index.html @@ -173,7 +173,7 @@ on-accept="$ctrl.onAcceptDuplication()"> - - \ No newline at end of file + \ No newline at end of file diff --git a/modules/client/front/fiscal-data/index.js b/modules/client/front/fiscal-data/index.js index 30c7d7656..58b22537c 100644 --- a/modules/client/front/fiscal-data/index.js +++ b/modules/client/front/fiscal-data/index.js @@ -159,6 +159,9 @@ export default class Controller extends Section { onResponse(response) { this.client.postcode = response.code; + this.client.city = response.city; + this.client.provinceFk = response.provinceFk; + this.client.countryFk = response.countryFk; } } diff --git a/modules/client/front/index.js b/modules/client/front/index.js index 7df6f7b10..758b94e3f 100644 --- a/modules/client/front/index.js +++ b/modules/client/front/index.js @@ -37,6 +37,8 @@ import './web-payment'; import './log'; import './sms'; import './postcode'; +import './postcode/province'; +import './postcode/city'; import './dms/index'; import './dms/create'; import './dms/edit'; diff --git a/modules/client/front/postcode/city/index.html b/modules/client/front/postcode/city/index.html new file mode 100644 index 000000000..f84632792 --- /dev/null +++ b/modules/client/front/postcode/city/index.html @@ -0,0 +1,27 @@ + + +

Please, ensure you put the correct data!

+ + + + + + +
+ + + + +
\ No newline at end of file diff --git a/modules/client/front/postcode/city/index.js b/modules/client/front/postcode/city/index.js new file mode 100644 index 000000000..c4c110745 --- /dev/null +++ b/modules/client/front/postcode/city/index.js @@ -0,0 +1,37 @@ +import ngModule from '../../module'; +import Component from 'core/lib/component'; + +class Controller extends Component { // Comprobar funcionamiento añadir ciudad + open($event) { + if ($event.defaultPrevented) return; + + this.$.cityDialog.show(); + $event.preventDefault(); + } + + onAccept() { + try { + if (!this.city.name) + throw new Error(`The city name can't be empty`); + if (!this.city.provinceFk) + throw new Error(`The province can't be empty`); + + this.$http.patch(`towns`, this.city).then(res => { + this.vnApp.showMessage(this.$t('The city has been created')); + this.emit('response', {$response: res.data}); + }); + } catch (e) { + this.vnApp.showError(this.$t(e.message)); + return false; + } + return true; + } +} + +ngModule.vnComponent('vnGeoCity', { + template: require('./index.html'), + controller: Controller, + bindings: { + data: '<', + } +}); diff --git a/modules/client/front/postcode/city/index.spec.js b/modules/client/front/postcode/city/index.spec.js new file mode 100644 index 000000000..c6cd8732f --- /dev/null +++ b/modules/client/front/postcode/city/index.spec.js @@ -0,0 +1,34 @@ +import './index'; + +describe('Client', () => { + describe('Component vnGeoCity', () => { + let controller; + let $httpBackend; + let $scope; + + beforeEach(ngModule('client')); + + beforeEach(inject(($componentController, _$httpBackend_, $rootScope) => { + $httpBackend = _$httpBackend_; + $scope = $rootScope.$new(); + const $element = angular.element(''); + controller = $componentController('vnGeoCity', {$element, $scope}); + controller.client = {id: 101}; + })); + + describe('onAccept()', () => { + it('should perform a POST query and show a success snackbar', () => { + let params = {name: 'Gotham City', provinceFk: 1}; + controller.city = {name: 'Gotham City', provinceFk: 1}; + + jest.spyOn(controller.vnApp, 'showMessage'); + $httpBackend.expect('PATCH', `towns`, params).respond(200, params); + + controller.onAccept(); + $httpBackend.flush(); + + expect(controller.vnApp.showMessage).toHaveBeenCalledWith('The city has been created'); + }); + }); + }); +}); diff --git a/modules/client/front/postcode/index.html b/modules/client/front/postcode/index.html index ade256459..ca4e10a03 100644 --- a/modules/client/front/postcode/index.html +++ b/modules/client/front/postcode/index.html @@ -11,7 +11,7 @@ vn-focus vn-id="postcode" label="Postcode" - ng-model="$ctrl.data.code" + ng-model="$ctrl.location.code" required="true"> + + + + + + + + -
\ No newline at end of file +
+ + + + + + \ No newline at end of file diff --git a/modules/client/front/postcode/index.js b/modules/client/front/postcode/index.js index aca7a44d3..2c44ae13f 100644 --- a/modules/client/front/postcode/index.js +++ b/modules/client/front/postcode/index.js @@ -15,8 +15,9 @@ class Controller extends Component { const province = selection.province; const country = province.country; - this.data.provinceFk = province.id; - this.data.countryFk = country.id; + this.location.city = selection.name; + this.location.provinceFk = province.id; + this.location.countryFk = country.id; } open() { @@ -24,19 +25,35 @@ class Controller extends Component { } onOpen() { + this.location = {}; this.$.postcode.focus(); } + onProvinceResponse(response) { + this.location.provinceFk = response.id; + this.location.countryFk = response.countryFk; + } + + onCityResponse(response) { + this.location.townFk = response.id; + this.location.provinceFk = response.provinceFk; + this.location.countryFk = response.countryFk; + } + onAccept() { try { - if (!this.data.code) + if (!this.location.code) throw new Error(`The postcode can't be empty`); - if (!this.data.townFk) + if (!this.location.townFk) throw new Error(`The town can't be empty`); + if (!this.location.provinceFk) + throw new Error(`The province can't be empty`); + if (!this.location.provinceFk) + throw new Error(`The country can't be empty`); - this.$http.patch(`postcodes`, this.data).then(res => { - this.vnApp.showMessage(this.$t('The postcode has been saved')); - this.emit('response', {$response: res.data}); + this.$http.patch(`postcodes`, this.location).then(() => { + this.vnApp.showMessage(this.$t('The postcode has been created. You can save the data now')); + this.emit('response', {$response: this.location}); }); } catch (e) { this.vnApp.showError(this.$t(e.message)); @@ -46,7 +63,7 @@ class Controller extends Component { } } -ngModule.vnComponent('vnClientPostcode', { +ngModule.vnComponent('vnGeoPostcode', { template: require('./index.html'), controller: Controller, bindings: { diff --git a/modules/client/front/postcode/index.spec.js b/modules/client/front/postcode/index.spec.js index 8778fd9b0..607866f44 100644 --- a/modules/client/front/postcode/index.spec.js +++ b/modules/client/front/postcode/index.spec.js @@ -1,7 +1,7 @@ import './index'; describe('Client', () => { - describe('Component vnClientPostcode', () => { + describe('Component vnGeoPostcode', () => { let controller; let $httpBackend; let $scope; @@ -12,14 +12,14 @@ describe('Client', () => { $httpBackend = _$httpBackend_; $scope = $rootScope.$new(); const $element = angular.element(''); - controller = $componentController('vnClientPostcode', {$element, $scope}); + controller = $componentController('vnGeoPostcode', {$element, $scope}); controller.client = {id: 101}; })); describe('onAccept()', () => { it('should perform a POST query and show a success snackbar', () => { let params = {townFk: 1, provinceFk: 1, countryFk: 1, code: '46460'}; - controller.data = {townFk: 1, provinceFk: 1, countryFk: 1, code: '46460'}; + controller.location = {townFk: 1, provinceFk: 1, countryFk: 1, code: '46460'}; jest.spyOn(controller.vnApp, 'showMessage'); $httpBackend.expect('PATCH', `postcodes`, params).respond(200, params); @@ -27,7 +27,7 @@ describe('Client', () => { controller.onAccept(); $httpBackend.flush(); - expect(controller.vnApp.showMessage).toHaveBeenCalledWith('The postcode has been saved'); + expect(controller.vnApp.showMessage).toHaveBeenCalledWith('The postcode has been created. You can save the data now'); }); }); }); diff --git a/modules/client/front/postcode/locale/es.yml b/modules/client/front/postcode/locale/es.yml index ab8b0fc21..782690e88 100644 --- a/modules/client/front/postcode/locale/es.yml +++ b/modules/client/front/postcode/locale/es.yml @@ -1,5 +1,11 @@ New postcode: Nuevo código postal +New city: Nueva ciudad +New province: Nueva provincia Please, ensure you put the correct data!: ¡Por favor, asegúrate de poner los datos correctos! The postcode can't be empty: El código postal no puede quedar vacío The town can't be empty: La población no puede quedar vacía -The postcode has been saved: El código postal ha sido guardado \ No newline at end of file +The province can't be empty: La provincia no puede quedar vacía +The country can't be empty: El país no puede quedar vacío +The postcode has been created. You can save the data now: Se ha creado el código postal. Ahora puedes guardar los datos +The city has been created: Se ha creado la ciudad +The province has been created: Se ha creado la provincia \ No newline at end of file diff --git a/modules/client/front/postcode/province/index.html b/modules/client/front/postcode/province/index.html new file mode 100644 index 000000000..e7338575c --- /dev/null +++ b/modules/client/front/postcode/province/index.html @@ -0,0 +1,27 @@ + + +

Please, ensure you put the correct data!

+ + + + + + +
+ + + + +
\ No newline at end of file diff --git a/modules/client/front/postcode/province/index.js b/modules/client/front/postcode/province/index.js new file mode 100644 index 000000000..6a0193d94 --- /dev/null +++ b/modules/client/front/postcode/province/index.js @@ -0,0 +1,37 @@ +import ngModule from '../../module'; +import Component from 'core/lib/component'; + +class Controller extends Component { + open($event) { + if ($event.defaultPrevented) return; + + this.$.provinceDialog.show(); + $event.preventDefault(); + } + + onAccept() { + try { + if (!this.province.name) + throw new Error(`The province name can't be empty`); + if (!this.province.countryFk) + throw new Error(`The country can't be empty`); + + this.$http.patch(`provinces`, this.province).then(res => { + this.vnApp.showMessage(this.$t('The province has been created')); + this.emit('response', {$response: res.data}); + }); + } catch (e) { + this.vnApp.showError(this.$t(e.message)); + return false; + } + return true; + } +} + +ngModule.vnComponent('vnGeoProvince', { + template: require('./index.html'), + controller: Controller, + bindings: { + data: '<', + } +}); diff --git a/modules/client/front/postcode/province/index.spec.js b/modules/client/front/postcode/province/index.spec.js new file mode 100644 index 000000000..c28ecb489 --- /dev/null +++ b/modules/client/front/postcode/province/index.spec.js @@ -0,0 +1,34 @@ +import './index'; + +describe('Client', () => { + describe('Component vnGeoProvince', () => { + let controller; + let $httpBackend; + let $scope; + + beforeEach(ngModule('client')); + + beforeEach(inject(($componentController, _$httpBackend_, $rootScope) => { + $httpBackend = _$httpBackend_; + $scope = $rootScope.$new(); + const $element = angular.element(''); + controller = $componentController('vnGeoProvince', {$element, $scope}); + controller.client = {id: 101}; + })); + + describe('onAccept()', () => { + it('should perform a POST query and show a success snackbar', () => { + let params = {name: 'New Jersey', countryFk: 1}; + controller.province = {name: 'New Jersey', countryFk: 1}; + + jest.spyOn(controller.vnApp, 'showMessage'); + $httpBackend.expect('PATCH', `provinces`, params).respond(200, params); + + controller.onAccept(); + $httpBackend.flush(); + + expect(controller.vnApp.showMessage).toHaveBeenCalledWith('The province has been created'); + }); + }); + }); +}); diff --git a/modules/client/front/postcode/style.scss b/modules/client/front/postcode/style.scss index b9ef984b7..51e181357 100644 --- a/modules/client/front/postcode/style.scss +++ b/modules/client/front/postcode/style.scss @@ -1,6 +1,6 @@ @import "variables"; -vn-client-postcode { +vn-geo-postcode { vn-dialog { p { color: $color-alert From 39ea51764b8a75c574bcd163e56c40e58e7a6b54 Mon Sep 17 00:00:00 2001 From: joan Date: Thu, 15 Oct 2020 13:59:28 +0200 Subject: [PATCH 2/3] Some fixes made --- modules/client/front/address/create/index.js | 2 ++ modules/client/front/address/edit/index.js | 2 ++ modules/client/front/create/index.html | 8 +------- modules/client/front/create/index.js | 3 +++ 4 files changed, 8 insertions(+), 7 deletions(-) diff --git a/modules/client/front/address/create/index.js b/modules/client/front/address/create/index.js index 02c98ab3b..27ea5538c 100644 --- a/modules/client/front/address/create/index.js +++ b/modules/client/front/address/create/index.js @@ -74,6 +74,8 @@ export default class Controller extends Section { onResponse(response) { this.address.postalCode = response.code; + this.address.city = response.city; + this.address.provinceFk = response.provinceFk; } } diff --git a/modules/client/front/address/edit/index.js b/modules/client/front/address/edit/index.js index 363621327..d588812fa 100644 --- a/modules/client/front/address/edit/index.js +++ b/modules/client/front/address/edit/index.js @@ -78,6 +78,8 @@ export default class Controller extends Section { onResponse(response) { this.address.postalCode = response.code; + this.address.city = response.city; + this.address.provinceFk = response.provinceFk; } } diff --git a/modules/client/front/create/index.html b/modules/client/front/create/index.html index ec06a8147..ce2ddc38b 100644 --- a/modules/client/front/create/index.html +++ b/modules/client/front/create/index.html @@ -5,12 +5,6 @@ insert-mode="true" form="form"> - -
@@ -82,7 +76,7 @@ label="City" ng-model="$ctrl.client.city" selection="$ctrl.town" - data="townsLocation" + url="Towns/location" fields="['id', 'name', 'provinceFk']" value-field="name"> diff --git a/modules/client/front/create/index.js b/modules/client/front/create/index.js index d8ded6560..1aa21c91e 100644 --- a/modules/client/front/create/index.js +++ b/modules/client/front/create/index.js @@ -81,6 +81,9 @@ export default class Controller extends Section { onResponse(response) { this.client.postcode = response.code; + this.client.city = response.city; + this.client.provinceFk = response.provinceFk; + this.client.countryFk = response.countryFk; } } From a61a6e7c6ab4c9e85a8ad508cd5bce0628d3feae Mon Sep 17 00:00:00 2001 From: Carlos Jimenez Ruiz Date: Mon, 19 Oct 2020 20:49:38 +0200 Subject: [PATCH 3/3] e2e path updated + test fix --- e2e/helpers/selectors.js | 13 +++++- e2e/paths/02-client/01_create_client.spec.js | 42 +++++++++++++++---- e2e/paths/12-entry/04_create.spec.js | 4 +- modules/client/front/postcode/city/index.html | 2 +- modules/client/front/postcode/index.html | 2 +- .../client/front/postcode/province/index.html | 2 +- 6 files changed, 52 insertions(+), 13 deletions(-) diff --git a/e2e/helpers/selectors.js b/e2e/helpers/selectors.js index e586f38ed..3bcce51a2 100644 --- a/e2e/helpers/selectors.js +++ b/e2e/helpers/selectors.js @@ -42,13 +42,24 @@ export default { taxNumber: 'vn-client-create vn-textfield[ng-model="$ctrl.client.fi"]', socialName: 'vn-client-create vn-textfield[ng-model="$ctrl.client.socialName"]', street: 'vn-client-create vn-textfield[ng-model="$ctrl.client.street"]', + addPostCode: 'vn-client-create vn-datalist[ng-model="$ctrl.client.postcode"] vn-icon-button[icon="add_circle"]', + addProvince: 'vn-autocomplete[ng-model="$ctrl.location.provinceFk"] vn-icon-button[icon="add_circle"]', + addCity: 'vn-autocomplete[ng-model="$ctrl.location.townFk"] vn-icon-button[icon="add_circle"]', + newProvinceName: 'vn-textfield[ng-model="$ctrl.province.name"]', + newCityName: 'vn-textfield[ng-model="$ctrl.city.name"]', + newCityProvince: 'vn-autocomplete[ng-model="$ctrl.city.provinceFk"]', + newPostcode: 'vn-textfield[ng-model="$ctrl.location.code"]', postcode: 'vn-client-create vn-datalist[ng-model="$ctrl.client.postcode"]', city: 'vn-client-create vn-datalist[ng-model="$ctrl.client.city"]', - province: 'vn-client-create vn-autocomplete[ng-model="$ctrl.client.provinceFk"]', + province: 'vn-autocomplete[ng-model="$ctrl.client.provinceFk"]', country: 'vn-client-create vn-autocomplete[ng-model="$ctrl.client.countryFk"]', + dialogCountry: 'vn-autocomplete[ng-model="$ctrl.province.countryFk"]', userName: 'vn-client-create vn-textfield[ng-model="$ctrl.client.userName"]', email: 'vn-client-create vn-textfield[ng-model="$ctrl.client.email"]', salesPerson: 'vn-client-create vn-autocomplete[ng-model="$ctrl.client.salesPersonFk"]', + saveNewProvicenButton: '#saveProvince', + saveNewCityButton: '#saveCity', + saveNewPoscode: '#savePostcode', createButton: 'vn-client-create button[type=submit]' }, clientDescriptor: { diff --git a/e2e/paths/02-client/01_create_client.spec.js b/e2e/paths/02-client/01_create_client.spec.js index f7a996f48..202f27064 100644 --- a/e2e/paths/02-client/01_create_client.spec.js +++ b/e2e/paths/02-client/01_create_client.spec.js @@ -8,7 +8,7 @@ describe('Client create path', () => { beforeAll(async() => { browser = await getBrowser(); page = browser.page; - await page.loginAndModule('employee', 'client'); + await page.loginAndModule(' deliveryBoss', 'client'); }); afterAll(async() => { @@ -45,14 +45,40 @@ describe('Client create path', () => { expect(message.text).toBe('Some fields are invalid'); }); + it(`should create a new province`, async() => { + await page.waitToClick(selectors.createClientView.addPostCode); + await page.waitToClick(selectors.createClientView.addProvince); + await page.write(selectors.createClientView.newProvinceName, 'Massachusetts'); + await page.autocompleteSearch(selectors.createClientView.dialogCountry, 'España'); + await page.waitToClick(selectors.createClientView.saveNewProvicenButton); + const message = await page.waitForSnackbar(); + + expect(message.text).toBe('The province has been created'); + }); + + it(`should create a new city`, async() => { + await page.waitToClick(selectors.createClientView.addCity); + await page.write(selectors.createClientView.newCityName, 'Boston'); + await page.autocompleteSearch(selectors.createClientView.newCityProvince, 'Massachusetts'); + await page.waitToClick(selectors.createClientView.saveNewCityButton); + const message = await page.waitForSnackbar(); + + expect(message.text).toBe('The city has been created'); + }); + + it(`should create a new post code`, async() => { + await page.write(selectors.createClientView.newPostcode, '61616'); + await page.waitToClick(selectors.createClientView.saveNewPoscode); + + const message = await page.waitForSnackbar(); + + expect(message.text).toBe('The postcode has been created. You can save the data now'); + }); + it(`should attempt to create a new user with all it's data but wrong email`, async() => { await page.write(selectors.createClientView.name, 'Carol Danvers'); await page.write(selectors.createClientView.socialName, 'AVG tax'); await page.write(selectors.createClientView.street, 'Many places'); - await page.autocompleteSearch(selectors.createClientView.country, 'España'); - await page.autocompleteSearch(selectors.createClientView.province, 'Province one'); - await page.write(selectors.createClientView.city, 'Valencia'); - await page.write(selectors.createClientView.postcode, '46000'); await page.clearInput(selectors.createClientView.email); await page.write(selectors.createClientView.email, 'incorrect email format'); await page.waitToClick(selectors.createClientView.createButton); @@ -82,14 +108,14 @@ describe('Client create path', () => { const clientCountry = await page .waitToGetProperty(selectors.createClientView.country, 'value'); - expect(clientCity).toEqual('Valencia'); - expect(clientProvince).toContain('Province one'); + expect(clientCity).toEqual('Boston'); + expect(clientProvince).toContain('Massachusetts'); expect(clientCountry).toEqual('España'); }); it(`should create a new user with all correct data`, async() => { await page.clearInput(selectors.createClientView.postcode); - await page.write(selectors.createClientView.postcode, '46000'); + await page.write(selectors.createClientView.postcode, '61616'); await page.waitToClick(selectors.createClientView.createButton); const message = await page.waitForSnackbar(); diff --git a/e2e/paths/12-entry/04_create.spec.js b/e2e/paths/12-entry/04_create.spec.js index 8cf23813b..20fa6b23d 100644 --- a/e2e/paths/12-entry/04_create.spec.js +++ b/e2e/paths/12-entry/04_create.spec.js @@ -26,7 +26,9 @@ describe('Entry create path', () => { await page.autocompleteSearch(selectors.entryIndex.newEntryCompany, 'ORN'); await page.waitToClick(selectors.entryIndex.saveNewEntry); - await page.waitFor(500); + await page.waitForNavigation({ + waitUntil: 'load', + }); await page.waitForState('entry.card.basicData'); }); }); diff --git a/modules/client/front/postcode/city/index.html b/modules/client/front/postcode/city/index.html index f84632792..a83505222 100644 --- a/modules/client/front/postcode/city/index.html +++ b/modules/client/front/postcode/city/index.html @@ -22,6 +22,6 @@ - + \ No newline at end of file diff --git a/modules/client/front/postcode/index.html b/modules/client/front/postcode/index.html index ca4e10a03..8f9f35eb8 100644 --- a/modules/client/front/postcode/index.html +++ b/modules/client/front/postcode/index.html @@ -61,7 +61,7 @@ - + diff --git a/modules/client/front/postcode/province/index.html b/modules/client/front/postcode/province/index.html index e7338575c..03836901c 100644 --- a/modules/client/front/postcode/province/index.html +++ b/modules/client/front/postcode/province/index.html @@ -22,6 +22,6 @@ - + \ No newline at end of file