Merge branch 'improve_address' into household_integration

This commit is contained in:
Mathieu Jaumotte 2021-09-06 12:52:25 +02:00
commit 1262d8cc16
13 changed files with 165 additions and 186 deletions

View File

@ -1,9 +1,4 @@
<template>
<div v-for="error in displayErrors" class="alert alert-danger my-2">
{{ error }}
</div>
<add-address
v-bind:key="context.entity.type"
v-bind:context="context"
@ -23,6 +18,8 @@
*
* */
import AddAddress from './components/AddAddress.vue';
import { patchAddress } from "./api";
import { postAddressToHousehold, postAddressToPerson } from "ChillPersonAssets/vuejs/_api/AddAddress";
export default {
name: "App",
@ -39,6 +36,9 @@ export default {
},
addressId: window.addressId | null,
backUrl: window.backUrl,
valid: {
from: new Date()
},
},
addAddress: {
options: {
@ -75,12 +75,75 @@ export default {
},
submitAddress() {
console.log('@@@ click on Submit Address Button');
let payload = this.$refs.addAddress.submitNewAddress(); // Cast child method
this.addDateToAddressAndPostAddressTo(payload);
},
addDateToAddressAndPostAddressTo(payload)
{
payload.body = {
validFrom: {
datetime: `${this.context.valid.from.toISOString().split('T')[0]}T00:00:00+0100`
}
};
console.log('addDateToAddress', payload);
// Cast child method
this.$refs.addAddress.submitNewAddress();
// it fetch post request only for person and household
// else get returned payload then dispatch from here (parent)
}
this.$refs.addAddress.flag.loading = true;
return patchAddress(payload.addressId, payload.body)
.then(address => new Promise((resolve, reject) => {
this.context.valid.from = address.validFrom;
resolve();
})
.then(this.postAddressTo(payload))
)
.catch((error) => {
this.$refs.addAddress.errorMsg.push(error);
this.$refs.addAddress.flag.loading = false;
});
},
postAddressTo(payload)
{
console.log('postAddressTo', payload.entity);
if (!this.context.edit) {
switch (payload.entity) {
case 'household':
postAddressToHousehold(payload.entityId, payload.addressId)
.then(household => new Promise((resolve, reject) => {
console.log('..toHousehold', household);
this.$refs.addAddress.flag.loading = false;
this.$refs.addAddress.flag.success = true;
window.location.assign(this.context.backUrl);
resolve();
}))
.catch((error) => {
this.$refs.addAddress.errorMsg.push(error);
this.$refs.addAddress.flag.loading = false;
})
;
break;
case 'person':
postAddressToPerson(payload.entityId, payload.addressId)
.then(person => new Promise((resolve, reject) => {
console.log('..toPerson', person);
this.$refs.addAddress.flag.loading = false;
this.$refs.addAddress.flag.success = true;
window.location.assign(this.context.backUrl);
resolve();
}))
.catch((error) => {
this.$refs.addAddress.errorMsg.push(error);
this.$refs.addAddress.flag.loading = false;
})
;
break;
default:
this.$refs.addAddress.errorMsg.push('That entity is not managed by address !');
}
} else {
// address is already linked, just finish !
window.location.assign(this.context.backUrl);
}
},
}
}
</script>

View File

@ -29,7 +29,7 @@
v-bind:options="this.options"
v-bind:default="this.default"
v-bind:entity="this.entity"
v-bind:valid="this.valid"
v-bind:valid="this.context.valid"
v-bind:flag="this.flag"
ref="showAddress">
</show-address-pane>
@ -55,7 +55,7 @@
v-bind:options="this.options"
v-bind:default="this.default"
v-bind:entity="this.entity"
v-bind:valid="this.valid"
v-bind:valid="this.context.valid"
v-bind:flag="this.flag"
ref="showAddress"
v-bind:insideModal="false" @openEditPane="openEditPane"
@ -182,10 +182,6 @@ export default {
zoom: 12
},
},
valid: {
from: new Date(),
to: null
},
errorMsg: []
}
},
@ -248,7 +244,6 @@ export default {
* Opening and closing Panes when interacting with buttons
*/
openShowPane() {
console.log('open the Show Panel');
if (this.context.edit) {
this.getInitialAddress(this.context.addressId);
@ -263,17 +258,18 @@ export default {
} else {
this.flag.showPane = true;
console.log('step1: open the Show Panel');
}
},
openEditPane() {
console.log('open the Edit panel');
console.log('step2: open the Edit panel');
this.initForm();
this.getCountries();
},
closeEditPane() {
console.log('close the Edit Panel');
console.log('step2: close the Edit Panel');
this.applyChanges();
this.flag.showPane = true;
this.flag.editPane = false;
@ -413,7 +409,7 @@ export default {
newAddress: newAddress
});
} else {
this.addAddress(newAddress);
this.addNewAddress(newAddress);
}
},
@ -421,56 +417,52 @@ export default {
* Async POST transactions,
* creating new address, and receive backend datas when promise is resolved
*/
addAddress(payload)
addNewAddress(payload)
{
//console.log('addNewAddress', payload);
this.flag.loading = true;
if ('newPostcode' in payload) {
let postcodeBody = payload.newPostcode;
if (this.context.entity.type === 'person') {
postcodeBody = Object.assign(postcodeBody, {'origin': 3});
}
postPostalCode(postcodeBody)
.then(postalCode => {
let body = payload;
body.postcode = {'id': postalCode.id },
postAddress(body)
.then(address => new Promise((resolve, reject) => {
this.entity.address = address;
this.flag.loading = false;
this.flag.success = true;
resolve();
}))
.catch((error) => {
this.errorMsg.push(error);
this.flag.loading = false;
});
})
.then(postalCode => {
payload.postcode = {'id': postalCode.id };
this.postNewAddress(payload);
});
} else {
postAddress(payload)
.then(address => new Promise((resolve, reject) => {
this.entity.address = address;
this.flag.loading = false;
this.flag.success = true;
resolve();
}))
.catch((error) => {
this.errorMsg.push(error);
this.flag.loading = false;
});
this.postNewAddress(payload);
}
},
postNewAddress(payload) {
//console.log('postNewAddress', payload);
postAddress(payload)
.then(address => new Promise((resolve, reject) => {
this.entity.address = address;
this.flag.loading = false;
this.flag.success = true;
resolve();
}))
.catch((error) => {
this.errorMsg.push(error);
this.flag.loading = false;
});
},
/*
* Async PATCH transactions,
* then update existing address with backend datas when promise is resolved
*/
updateAddress(payload)
{
// TODO change the condition because it writes new postal code in edit mode now: !writeNewPostalCode
this.flag.loading = true;
// TODO change the condition because it writes new postal code in edit mode now: !writeNewPostalCode
if ('newPostcode' in payload.newAddress) {
let postcodeBody = payload.newAddress.newPostcode;
@ -478,38 +470,32 @@ export default {
postPostalCode(postcodeBody)
.then(postalCode => {
let body = payload.newAddress;
body.postcode = {'id': postalCode.id },
patchAddress(payload.addressId, body)
.then(address => new Promise((resolve, reject) => {
this.entity.address = address;
this.flag.loading = false;
this.flag.success = true;
resolve();
}))
.catch((error) => {
this.errorMsg.push(error);
this.flag.loading = false;
});
})
payload.newAddress.postcode = {'id': postalCode.id };
this.patchExistingAddress(payload);
});
} else {
patchAddress(payload.addressId, payload.newAddress)
.then(address => new Promise((resolve, reject) => {
this.entity.address = address;
this.flag.loading = false;
this.flag.success = true;
resolve();
}))
.catch((error) => {
this.errorMsg.push(error);
this.flag.loading = false;
});
this.patchExistingAddress(payload);
}
},
patchExistingAddress(payload) {
console.log('patchExistingAddress', payload);
patchAddress(payload.addressId, payload.newAddress)
.then(address => new Promise((resolve, reject) => {
this.entity.address = address;
this.flag.loading = false;
this.flag.success = true;
resolve();
}))
.catch((error) => {
this.errorMsg.push(error);
this.flag.loading = false;
});
},
/*
* When submit address
* Method called by parent when submitting address
* (get out step1 show pane, submit button)
*/
submitNewAddress()
@ -517,92 +503,16 @@ export default {
let payload = {
entity: this.context.entity.type,
entityId: this.context.entity.id,
addressId: this.entity.address.address_id,
body: {
validFrom: {
datetime: `${this.valid.from.toISOString().split('T')[0]}T00:00:00+0100`
}
},
backUrl: this.context.backUrl
}
addressId: this.entity.address.address_id
};
if ( payload.entity !== 'person' && payload.entity !== 'household' ) {
// just return payload to parent
// (changes will be patched in parent store)
this.initForm();
this.flag.showPane = false;
return payload;
}
console.log('submitNewAddress with', payload);
this.addDateToAddressAndAddressTo(payload);
console.log('submitNewAddress return', payload);
this.initForm();
this.flag.showPane = false;
},
addDateToAddressAndAddressTo(payload)
{
console.log('addDateToAddressAndAddressTo', payload.entity)
this.flag.loading = true;
return patchAddress(payload.addressId, payload.body)
.then(address => new Promise((resolve, reject) => {
this.valid.from = address.validFrom;
resolve();
})
.then(this.postAddressTo(payload))
)
.catch((error) => {
this.errorMsg.push(error);
this.flag.loading = false;
});
},
postAddressTo(payload)
{
console.log('postAddressTo', payload.entity);
if (!this.context.edit) {
switch (payload.entity) {
case 'household':
postAddressToHousehold(payload.entityId, payload.addressId)
.then(household => new Promise((resolve, reject) => {
console.log('postAddressToHousehold', household);
this.flag.loading = false;
this.flag.success = true;
window.location.assign(payload.backUrl);
resolve();
}))
.catch((error) => {
this.errorMsg.push(error);
this.flag.loading = false;
})
;
break;
case 'person':
postAddressToPerson(payload.entityId, payload.addressId)
.then(person => new Promise((resolve, reject) => {
console.log('postAddressToPerson', person);
this.flag.loading = false;
this.flag.success = true;
window.location.assign(payload.backUrl);
resolve();
}))
.catch((error) => {
this.errorMsg.push(error);
this.flag.loading = false;
})
;
break;
default:
this.errorMsg.push('That entity is not managed by address !');
}
} else {
// address is already linked, just finish !
window.location.assign(payload.backUrl);
}
},
return payload;
}
}
}
</script>

View File

@ -97,6 +97,7 @@ export default {
this.entity.selected.address = value;
this.entity.selected.address.street = value.street;
this.entity.selected.address.streetNumber = value.streetNumber;
this.entity.selected.writeNew.address = false;
this.updateMapCenter(value.point);
},
listenInputSearch(query) {
@ -107,6 +108,7 @@ export default {
let addr = this.splitAddress(this.$data.value.text);
this.entity.selected.address.street = addr.street;
this.entity.selected.address.streetNumber = addr.number;
this.entity.selected.writeNew.address = true;
}
},
splitAddress(address) {
@ -136,6 +138,7 @@ export default {
}
},
addAddress() {
console.log('addAddress: pass here ?? never, it seems');
this.entity.selected.writeNew.address = true;
}
}

View File

@ -95,11 +95,12 @@ export default {
this.entity.selected.city = value;
this.entity.selected.postcode.name = value.name;
this.entity.selected.postcode.code = value.code;
this.entity.selected.writeNew.postcode = false;
this.$emit('getReferenceAddresses', value);
this.focusOnAddress();
},
listenInputSearch(query) {
console.log('listenInputSearch', query, this.isCitySelectorOpen);
//console.log('listenInputSearch', query, this.isCitySelectorOpen);
if (this.isCitySelectorOpen) {
this.$data.value = { text: query };
} else if (this.isEnteredCustomCity) {
@ -108,6 +109,7 @@ export default {
this.entity.selected.city = city;
this.entity.selected.postcode.name = city.name;
this.entity.selected.postcode.code = city.code;
this.entity.selected.writeNew.postcode = true;
}
},
splitCity(city) {
@ -117,7 +119,7 @@ export default {
if (substr.length === 1) {
substr = city.split(' ');
}
console.log('substr', substr);
//console.log('substr', substr);
let decimal = [];
substr.forEach((s, i) => { decimal[i] = /^\d+$/.test(s) });
if (decimal[0] === true) {
@ -138,6 +140,7 @@ export default {
}
},
addPostcode() {
console.log('addPostcode: pass here ?? never, it seems');
this.entity.selected.writeNew.postcode = true;
}
}

View File

@ -11,7 +11,7 @@
{{ $t(getSuccessText) }}
</div>
<show-address :address="address"></show-address>
<address-render-box :address="address"></address-render-box>
<div v-if="showDateFrom" class='address-valid date-since'>
<h3>{{ $t(getValidFromDateText) }}</h3>
@ -48,12 +48,12 @@
<script>
import { dateToISO, ISOToDate, ISOToDatetime } from 'ChillMainAssets/chill/js/date.js';
import ShowAddress from 'ChillMainAssets/vuejs/_components/Entity/AddressRenderBox.vue';
import AddressRenderBox from 'ChillMainAssets/vuejs/_components/Entity/AddressRenderBox.vue';
export default {
name: 'ShowAddressPane',
components: {
ShowAddress
AddressRenderBox
},
props: [
'context',

View File

@ -28,8 +28,8 @@ const addressMessages = {
create_postal_code: 'Localité inconnue. Cliquez ici pour créer une nouvelle localité',
postalCode_name: 'Nom',
postalCode_code: 'Code postal',
date: 'Date de la nouvelle adresse',
validFrom: 'Date de la nouvelle adresse',
date: "Date de la nouvelle adresse",
validFrom: "L'adresse est valable à partir du",
back_to_the_list: 'Retour à la liste',
loading: 'chargement en cours...',
address_new_success: 'La nouvelle adresse est enregistrée',

View File

@ -13,7 +13,7 @@
<h2 class="modal-title">{{ $t('courselocation.sure') }}</h2>
</template>
<template v-slot:body>
<show-address :address="person.current_household_address"></show-address>
<address-render-box :address="person.current_household_address"></address-render-box>
<p>{{ $t('courselocation.sure_description') }}</p>
</template>
<template v-slot:footer>
@ -28,12 +28,12 @@
<script>
import {mapState} from "vuex";
import Modal from 'ChillMainAssets/vuejs/_components/Modal';
import ShowAddress from "ChillMainAssets/vuejs/_components/Entity/AddressRenderBox.vue";
import AddressRenderBox from "ChillMainAssets/vuejs/_components/Entity/AddressRenderBox.vue";
export default {
name: "ButtonLocation",
components: {
ShowAddress,
import AddressRenderBox from,
Modal,
},
props: ['person'],

View File

@ -17,9 +17,9 @@
<div class="flex-table" v-if="accompanyingCourse.location">
<div class="item-bloc">
<show-address
<address-render-box
:address="accompanyingCourse.location">
</show-address>
</address-render-box>
<div v-if="isPersonLocation" class="alert alert-secondary separator">
<label class="col-form-label">
@ -63,13 +63,13 @@
<script>
import { mapState } from "vuex";
import AddAddress from 'ChillMainAssets/vuejs/Address/components/AddAddress.vue';
import ShowAddress from 'ChillMainAssets/vuejs/_components/Entity/AddressRenderBox.vue';
import AddressRenderBox from 'ChillMainAssets/vuejs/_components/Entity/AddressRenderBox.vue';
export default {
name: "CourseLocation",
components: {
AddAddress,
ShowAddress
AddressRenderBox
},
data() {
return {

View File

@ -150,7 +150,7 @@
</div>
<div v-else>
<p>{{ handlingThirdParty.text }}</p>
<show-address :address="handlingThirdParty.address"></show-address>
<address-render-box :address="handlingThirdParty.address"></address-render-box>
<ul class="record_actions">
<li>
@ -173,7 +173,7 @@
<ul>
<li v-for="t in thirdParties">
<p>{{ t.text }}</p>
<show-address :address="t.address"></show-address>
<address-render-box :address="t.address"></address-render-box>
<ul class="record_actions">
<button :title="$t('remove_thirdparty')" class="btn btn-remove"
@ -231,7 +231,7 @@ import AddResult from './components/AddResult.vue';
import AddEvaluation from './components/AddEvaluation.vue';
import PersonRenderBox from 'ChillPersonAssets/vuejs/_components/Entity/PersonRenderBox.vue';
import AddPersons from 'ChillPersonAssets/vuejs/_components/AddPersons.vue';
import ShowAddress from 'ChillMainAssets/vuejs/_components/Entity/AddressRenderBox.vue';
import AddressRenderBox from 'ChillMainAssets/vuejs/_components/Entity/AddressRenderBox.vue';
const i18n = {
messages: {
@ -275,7 +275,7 @@ export default {
AddEvaluation,
AddPersons,
PersonRenderBox,
ShowAddress,
AddressRenderBox,
},
i18n,
data() {

View File

@ -13,7 +13,7 @@
<div v-if="filterAddressesSuggestion.length > 0" class="flex-table householdAddressSuggestionList">
<div v-for="a in filterAddressesSuggestion" class="item-bloc">
<show-address :address="a"></show-address>
<address-render-box :address="a"></address-render-box>
<ul class="record_actions">
<li>
<button class="btn btn-action" @click="setHouseholdAddress(a)">
@ -125,14 +125,14 @@
<script>
import { mapGetters, mapState } from 'vuex';
import HouseholdRenderBox from 'ChillPersonAssets/vuejs/_components/Entity/HouseholdRenderBox.vue';
import ShowAddress from 'ChillMainAssets/vuejs/_components/Entity/AddressRenderBox.vue';
import AddressRenderBox from 'ChillMainAssets/vuejs/_components/Entity/AddressRenderBox.vue';
import AddAddress from 'ChillMainAssets/vuejs/Address/components/AddAddress.vue';
export default {
name: 'Household',
components: {
HouseholdRenderBox,
ShowAddress,
AddressRenderBox,
AddAddress,
},
data() {

View File

@ -35,7 +35,7 @@
<!-- address part -->
<li v-if="hasAddress()">
<show-address :address="household.current_address" :isMultiline="isMultiline"></show-address>
<address-render-box :address="household.current_address" :isMultiline="isMultiline"></address-render-box>
</li>
<li v-else>
<span class="chill-no-data-statement">{{ $t('no_current_address') }}</span>
@ -49,7 +49,7 @@
<script>
import PersonRenderBox from 'ChillPersonAssets/vuejs/_components/Entity/PersonRenderBox.vue';
import ShowAddress from 'ChillMainAssets/vuejs/_components/Entity/AddressRenderBox.vue';
import AddressRenderBox from 'ChillMainAssets/vuejs/_components/Entity/AddressRenderBox.vue';
const i18n = {
"messages": {
@ -69,7 +69,7 @@ export default {
props: ['household', 'isAddressMultiline'],
components: {
PersonRenderBox,
ShowAddress,
AddressRenderBox,
},
i18n,
computed: {

View File

@ -45,7 +45,7 @@
<li v-if="person.current_household_address">
<i class="fa fa-li fa-map-marker"></i>
<show-address :address="person.current_household_address" :isMultiline="isMultiline"></show-address>
<address-render-box :address="person.current_household_address" :isMultiline="isMultiline"></address-render-box>
</li>
<li v-else-if="options.addNoData">
<i class="fa fa-li fa-map-marker"></i>
@ -109,12 +109,12 @@
<script>
import {dateToISO} from 'ChillMainAssets/chill/js/date.js';
import ShowAddress from 'ChillMainAssets/vuejs/_components/Entity/AddressRenderBox.vue';
import AddressRenderBox from 'ChillMainAssets/vuejs/_components/Entity/AddressRenderBox.vue';
export default {
name: "PersonRenderBox",
components: {
ShowAddress
AddressRenderBox
},
props: ['person', 'options', 'render'],
computed: {

View File

@ -35,7 +35,7 @@
<ul class="list-content fa-ul">
<li v-if="thirdparty.address">
<i class="fa fa-li fa-map-marker"></i>
<show-address :address="thirdparty.address" :isMultiline="isMultiline"></show-address>
<address-render-box :address="thirdparty.address" :isMultiline="isMultiline"></address-render-box>
</li>
<li v-if="thirdparty.telephone">
<i class="fa fa-li fa-mobile"></i>
@ -57,13 +57,13 @@
</template>
<script>
import ShowAddress from 'ChillMainAssets/vuejs/_components/Entity/AddressRenderBox.vue';
import AddressRenderBox from 'ChillMainAssets/vuejs/_components/Entity/AddressRenderBox.vue';
import {dateToISO} from 'ChillMainAssets/chill/js/date.js';
export default {
name: "ThirdPartyRenderBox",
components: {
ShowAddress
AddressRenderBox
},
props: ['thirdparty', 'options'],
computed: {