otf: patch person and thirdparty from the store, emit parent method saveFormOnTheFly()

This commit is contained in:
Mathieu Jaumotte 2021-09-29 17:35:37 +02:00
parent 9420c34f58
commit 008a10dab8
7 changed files with 103 additions and 47 deletions

View File

@ -19,20 +19,8 @@
v-if="hasCurrentHouseholdAddress" v-if="hasCurrentHouseholdAddress"
v-bind:person="participation.person"> v-bind:person="participation.person">
</button-location> </button-location>
<li> <li><on-the-fly :type="participation.person.type" :id="participation.person.id" action="show"></on-the-fly></li>
<on-the-fly <li><on-the-fly :type="participation.person.type" :id="participation.person.id" action="edit" @saveFormOnTheFly="saveFormOnTheFly"></on-the-fly></li>
v-bind:type="participation.person.type"
v-bind:id="participation.person.id"
action="show">
</on-the-fly>
</li>
<li>
<on-the-fly
v-bind:type="participation.person.type"
v-bind:id="participation.person.id"
action="edit">
</on-the-fly>
</li>
<!-- <li> <!-- <li>
<button class="btn btn-delete" <button class="btn btn-delete"
:title="$t('action.delete')" :title="$t('action.delete')"
@ -112,6 +100,13 @@ export default {
getAccompanyingCourseReturnPath() { getAccompanyingCourseReturnPath() {
return `fr/parcours/${this.$store.state.accompanyingCourse.id}/edit#section-10`; return `fr/parcours/${this.$store.state.accompanyingCourse.id}/edit#section-10`;
} }
},
methods: {
saveFormOnTheFly(payload) {
console.log('saveFormOnTheFly: type', payload.type, ', data', payload.data);
payload.target = 'participation';
this.$store.dispatch('patchOnTheFly', payload);
}
} }
} }

View File

@ -10,7 +10,7 @@
{{ $t('requestor.is_anonymous') }} {{ $t('requestor.is_anonymous') }}
</label> </label>
<third-party-render-box v-if="accompanyingCourse.requestor.type == 'thirdparty'" <third-party-render-box v-if="accompanyingCourse.requestor.type === 'thirdparty'"
:thirdparty="accompanyingCourse.requestor" :thirdparty="accompanyingCourse.requestor"
:options="{ :options="{
addLink: false, addLink: false,
@ -25,12 +25,12 @@
<ul class="record_actions"> <ul class="record_actions">
<button-location v-if="hasCurrentHouseholdAddress" :thirdparty="accompanyingCourse.requestor"></button-location> <button-location v-if="hasCurrentHouseholdAddress" :thirdparty="accompanyingCourse.requestor"></button-location>
<li><on-the-fly :type="accompanyingCourse.requestor.type" :id="accompanyingCourse.requestor.id" action="show"></on-the-fly></li> <li><on-the-fly :type="accompanyingCourse.requestor.type" :id="accompanyingCourse.requestor.id" action="show"></on-the-fly></li>
<li><on-the-fly :type="accompanyingCourse.requestor.type" :id="accompanyingCourse.requestor.id" action="edit"></on-the-fly></li> <li><on-the-fly :type="accompanyingCourse.requestor.type" :id="accompanyingCourse.requestor.id" action="edit" @saveFormOnTheFly="saveFormOnTheFly"></on-the-fly></li>
</ul> </ul>
</template> </template>
</third-party-render-box> </third-party-render-box>
<person-render-box render="bloc" v-else-if="accompanyingCourse.requestor.type == 'person'" <person-render-box render="bloc" v-else-if="accompanyingCourse.requestor.type === 'person'"
:person="accompanyingCourse.requestor" :person="accompanyingCourse.requestor"
:options="{ :options="{
addLink: false, addLink: false,
@ -46,7 +46,7 @@
<ul class="record_actions"> <ul class="record_actions">
<button-location v-if="hasCurrentHouseholdAddress" :person="accompanyingCourse.requestor"></button-location> <button-location v-if="hasCurrentHouseholdAddress" :person="accompanyingCourse.requestor"></button-location>
<li><on-the-fly :type="accompanyingCourse.requestor.type" :id="accompanyingCourse.requestor.id" action="show"></on-the-fly></li> <li><on-the-fly :type="accompanyingCourse.requestor.type" :id="accompanyingCourse.requestor.id" action="show"></on-the-fly></li>
<li><on-the-fly :type="accompanyingCourse.requestor.type" :id="accompanyingCourse.requestor.id" action="edit"></on-the-fly></li> <li><on-the-fly :type="accompanyingCourse.requestor.type" :id="accompanyingCourse.requestor.id" action="edit" @saveFormOnTheFly="saveFormOnTheFly"></on-the-fly></li>
</ul> </ul>
</template> </template>
</person-render-box> </person-render-box>
@ -129,6 +129,11 @@ export default {
this.$store.dispatch('addRequestor', selected.shift()); this.$store.dispatch('addRequestor', selected.shift());
this.$refs.addPersons.resetSearch(); // to cast child method this.$refs.addPersons.resetSearch(); // to cast child method
modal.showModal = false; modal.showModal = false;
},
saveFormOnTheFly(payload) {
console.log('saveFormOnTheFly: type', payload.type, ', data', payload.data);
payload.target = 'requestor';
this.$store.dispatch('patchOnTheFly', payload);
} }
} }
} }

View File

@ -8,7 +8,7 @@
<ul class="record_actions"> <ul class="record_actions">
<button-location v-if="hasCurrentHouseholdAddress" :person="resource.resource"></button-location> <button-location v-if="hasCurrentHouseholdAddress" :person="resource.resource"></button-location>
<li><on-the-fly :type="resource.resource.type" :id="resource.resource.id" action="show"></on-the-fly></li> <li><on-the-fly :type="resource.resource.type" :id="resource.resource.id" action="show"></on-the-fly></li>
<li><on-the-fly :type="resource.resource.type" :id="resource.resource.id" action="edit"></on-the-fly></li> <li><on-the-fly :type="resource.resource.type" :id="resource.resource.id" action="edit" @saveFormOnTheFly="saveFormOnTheFly"></on-the-fly></li>
<li><button class="btn btn-sm btn-remove" :title="$t('action.remove')" @click.prevent="$emit('remove', resource)"></button></li> <li><button class="btn btn-sm btn-remove" :title="$t('action.remove')" @click.prevent="$emit('remove', resource)"></button></li>
</ul> </ul>
</template> </template>
@ -22,7 +22,7 @@
<template v-slot:record-actions> <template v-slot:record-actions>
<ul class="record_actions"> <ul class="record_actions">
<li><on-the-fly :type="resource.resource.type" :id="resource.resource.id" action="show"></on-the-fly></li> <li><on-the-fly :type="resource.resource.type" :id="resource.resource.id" action="show"></on-the-fly></li>
<li><on-the-fly :type="resource.resource.type" :id="resource.resource.id" action="edit"></on-the-fly></li> <li><on-the-fly :type="resource.resource.type" :id="resource.resource.id" action="edit" @saveFormOnTheFly="saveFormOnTheFly"></on-the-fly></li>
<li><button class="btn btn-sm btn-remove" :title="$t('action.remove')" @click.prevent="$emit('remove', resource)"></button></li> <li><button class="btn btn-sm btn-remove" :title="$t('action.remove')" @click.prevent="$emit('remove', resource)"></button></li>
</ul> </ul>
</template> </template>
@ -53,6 +53,13 @@ export default {
} }
return false; return false;
} }
},
methods: {
saveFormOnTheFly(payload) {
console.log('saveFormOnTheFly: type', payload.type, ', data', payload.data);
payload.target = 'resource';
this.$store.dispatch('patchOnTheFly', payload);
}
} }
} }
</script> </script>

View File

@ -11,6 +11,8 @@ import { getAccompanyingCourse,
addScope, addScope,
removeScope, removeScope,
} from '../api'; } from '../api';
import { patchPerson } from "ChillPersonAssets/vuejs/_api/OnTheFly";
import { patchThirdparty } from "ChillThirdPartyAssets/vuejs/_api/OnTheFly";
const debug = process.env.NODE_ENV !== 'production'; const debug = process.env.NODE_ENV !== 'production';
@ -107,6 +109,36 @@ let initPromise = Promise.all([scopesPromise, accompanyingCoursePromise])
//console.log('### mutation: addResource', resource); //console.log('### mutation: addResource', resource);
state.accompanyingCourse.resources.push(resource); state.accompanyingCourse.resources.push(resource);
}, },
updatePerson(state, payload) {
console.log('### mutation: updatePerson', payload);
let i = null;
switch (payload.target) {
case 'participation':
i = state.accompanyingCourse.participations.findIndex(e => e.person.id === payload.person.id );
state.accompanyingCourse.participations[i].person = payload.person;
break;
case 'requestor':
state.accompanyingCourse.requestor = payload.person;
break;
case 'resource':
i = state.accompanyingCourse.resources.findIndex(e => e.resource.id === payload.person.id );
state.accompanyingCourse.resources[i].resource = payload.person;
break;
}
},
updateThirdparty(state, payload) {
console.log('### mutation: updateThirdparty', payload);
let i = null;
switch (payload.target) {
case 'requestor':
state.accompanyingCourse.requestor = payload.thirdparty;
break;
case 'resource':
i = state.accompanyingCourse.resources.findIndex(e => e.resource.id === payload.thirdparty.id );
state.accompanyingCourse.resources[i].resource = payload.thirdparty;
break;
}
},
toggleIntensity(state, value) { toggleIntensity(state, value) {
state.accompanyingCourse.intensity = value; state.accompanyingCourse.intensity = value;
}, },
@ -239,6 +271,38 @@ let initPromise = Promise.all([scopesPromise, accompanyingCoursePromise])
resolve(); resolve();
})).catch((error) => { commit('catchError', error) }); })).catch((error) => { commit('catchError', error) });
}, },
patchOnTheFly({ commit }, payload) {
console.log('## action: patch OnTheFly', payload);
let body = { type: payload.type };
if (payload.type === 'person') {
body.firstName = payload.data.firstName;
body.lastName = payload.data.lastName;
if (payload.data.birthdate !== null) { body.birthdate = payload.data.birthdate; }
body.phonenumber = payload.data.phonenumber;
body.mobilenumber = payload.data.mobilenumber;
body.gender = payload.data.gender;
console.log('id', payload.data.id, 'and body', body);
patchPerson(payload.data.id, body)
.then(person => new Promise((resolve, reject) => {
console.log('patch person', person);
commit('updatePerson', { target: payload.target, person: person });
resolve();
}));
}
else if (payload.type === 'thirdparty') {
body.name = payload.data.name;
body.email = payload.data.email;
body.phonenumber = payload.data.phonenumber;
body.address = { address_id: payload.data.address.address_id };
console.log('id', payload.data.id, 'and body', body);
patchThirdparty(payload.data.id, body)
.then(thirdparty => new Promise((resolve, reject) => {
console.log('patch thirdparty', thirdparty);
commit('updateThirdparty', { target: payload.target, thirdparty: thirdparty });
resolve();
}));
}
},
toggleIntensity({ commit }, payload) { toggleIntensity({ commit }, payload) {
//console.log(payload); //console.log(payload);
patchAccompanyingCourse(id, { type: "accompanying_period", intensity: payload }) patchAccompanyingCourse(id, { type: "accompanying_period", intensity: payload })

View File

@ -92,6 +92,7 @@ import OnTheFly from 'ChillMainAssets/vuejs/_components/OnTheFly.vue';
import PersonSuggestion from './AddPersons/PersonSuggestion'; import PersonSuggestion from './AddPersons/PersonSuggestion';
import { searchPersons, searchPersons_2 } from 'ChillPersonAssets/vuejs/_api/AddPersons'; import { searchPersons, searchPersons_2 } from 'ChillPersonAssets/vuejs/_api/AddPersons';
import { postPerson } from "ChillPersonAssets/vuejs/_api/OnTheFly"; import { postPerson } from "ChillPersonAssets/vuejs/_api/OnTheFly";
import { postThirdparty } from "ChillThirdPartyAssets/vuejs/_api/OnTheFly";
export default { export default {
name: 'AddPersons', name: 'AddPersons',
@ -254,25 +255,25 @@ export default {
} }
}, },
saveFormOnTheFly({ type, data }) { saveFormOnTheFly({ type, data }) {
console.log('saveFormOnTheFly from addPersons', { type, data }); console.log('saveFormOnTheFly from addPersons, type', type, ', data', data);
// create/edit person
if (type === 'person') { if (type === 'person') {
console.log('type person with', data); console.log('type person with', data);
postPerson(data) postPerson(data)
.then(person => new Promise((resolve, reject) => { .then(person => new Promise((resolve, reject) => {
//this.person = person; console.log('onthefly create: post person', person);
this.newPriorSuggestion(person); this.newPriorSuggestion(person);
resolve(); resolve();
})); }));
} }
// create/edit thirdparty
else if (type === 'thirdparty') { else if (type === 'thirdparty') {
console.log('not yet implemented: type thirdparty with', type, data); console.log('type thirdparty with', data);
postThirdparty(data)
.then(thirdparty => new Promise((resolve, reject) => {
console.log('onthefly create: post thirdparty', thirdparty);
this.newPriorSuggestion(thirdparty);
resolve();
}));
} }
} }
}, },
} }

View File

@ -75,7 +75,7 @@
</template> </template>
<script> <script>
import { getPerson, postPerson } from '../../_api/OnTheFly'; import { getPerson } from '../../_api/OnTheFly';
import PersonRenderBox from '../Entity/PersonRenderBox.vue'; import PersonRenderBox from '../Entity/PersonRenderBox.vue';
export default { export default {
@ -162,15 +162,6 @@ export default {
console.log('get person', this.person); console.log('get person', this.person);
resolve(); resolve();
})); }));
},
patchData() {
console.log('id', this.id, 'and body', this.person);
patchPerson(this.id, this.person)
.then(person => new Promise((resolve, reject) => {
this.person = person;
console.log('patch person', this.person);
resolve();
}))
} }
} }
} }

View File

@ -55,7 +55,7 @@
<script> <script>
import ThirdPartyRenderBox from '../Entity/ThirdPartyRenderBox.vue'; import ThirdPartyRenderBox from '../Entity/ThirdPartyRenderBox.vue';
import AddAddress from 'ChillMainAssets/vuejs/Address/components/AddAddress'; import AddAddress from 'ChillMainAssets/vuejs/Address/components/AddAddress';
import { getThirdparty, patchThirdparty } from '../../_api/OnTheFly'; import { getThirdparty } from '../../_api/OnTheFly';
export default { export default {
name: "OnTheFlyThirdParty", name: "OnTheFlyThirdParty",
@ -98,13 +98,6 @@ export default {
resolve(); resolve();
})); }));
}, },
patchData() {
patchThirdparty(this.thirdparty).then(thirdparty => new Promise((resolve, reject) => {
this.thirdparty = thirdparty;
console.log('patch thirdparty', thirdparty);
resolve();
}))
},
submitAddress(payload) { submitAddress(payload) {
console.log('submitAddress', payload); console.log('submitAddress', payload);
} }