household editor: allow to move without any household

This commit is contained in:
Julien Fastré 2021-06-10 16:17:59 +02:00
parent 38c06977ca
commit b2ce5fca38
3 changed files with 49 additions and 20 deletions

View File

@ -1,7 +1,12 @@
<template> <template>
<h2>{{ $t('household_members_editor.concerned.title') }}</h2> <h2>{{ $t('household_members_editor.concerned.title') }}</h2>
<h3>{{ $t('household_members_editor.concerned.persons_to_positionnate') }}</h3> <h3 v-if="needsPositionning">
{{ $t('household_members_editor.concerned.persons_to_positionnate') }}
</h3>
<h3 v-else>
{{ $t('household_members_editor.concerned.persons_leaving') }}
</h3>
<div v-if="noPerson"> <div v-if="noPerson">
<div class="alert alert-info"> <div class="alert alert-info">
@ -40,7 +45,7 @@
</ul> </ul>
</div> </div>
</div> </div>
<div class="item-row move_to"> <div v-if="needsPositionning" class="item-row move_to">
<div class="item-col"> <div class="item-col">
<p class="move_hint">{{ $t('household_members_editor.concerned.move_to') }}:</p> <p class="move_hint">{{ $t('household_members_editor.concerned.move_to') }}:</p>
@ -79,7 +84,7 @@
</div> </div>
<div class="positions"> <div v-if="needsPositionning" class="positions">
<div <div
v-for="position in positions" v-for="position in positions"
> >
@ -159,6 +164,7 @@ export default {
'concUnpositionned', 'concUnpositionned',
'positions', 'positions',
'concByPosition', 'concByPosition',
'needsPositionning'
]), ]),
noPerson () { noPerson () {
return this.$store.getters.persons.length === 0; return this.$store.getters.persons.length === 0;

View File

@ -10,6 +10,7 @@ const appMessages = {
create_household: "Créer un ménage", create_household: "Créer un ménage",
search_household: "Chercher un ménage", search_household: "Chercher un ménage",
will_leave_any_household: "Ne rejoignent pas de ménage", will_leave_any_household: "Ne rejoignent pas de ménage",
leave_without_household: "Sans nouveau ménage"
}, },
concerned: { concerned: {
title: "Usagers concernés", title: "Usagers concernés",
@ -17,6 +18,7 @@ const appMessages = {
search: "Rechercher des usagers", search: "Rechercher des usagers",
move_to: "Déplacer vers", move_to: "Déplacer vers",
persons_to_positionnate: 'Usagers à positionner', persons_to_positionnate: 'Usagers à positionner',
persons_leaving: "Usagers quittant leurs ménages",
}, },
drop_persons_here: "Glissez-déposez ici les usagers pour la position \"{position}\"", drop_persons_here: "Glissez-déposez ici les usagers pour la position \"{position}\"",
all_positionnated: "Tous les usagers sont positionnés", all_positionnated: "Tous les usagers sont positionnés",

View File

@ -65,35 +65,48 @@ const store = createStore({
.find(conc => conc.person.id === person_id) .find(conc => conc.person.id === person_id)
; ;
}, },
needsPositionning(state) {
return state.forceLeaveWithoutHousehold === false;
},
buildPayload: (state) => { buildPayload: (state) => {
let let
conc, conc,
payload_conc,
payload = { payload = {
concerned: [], concerned: [],
destination: { destination: null
id: state.household.id,
type: state.household.type
}
} }
; ;
if (state.forceLeaveWithoutHousehold === false) {
payload.destination = {
id: state.household.id,
type: state.household.type
};
}
for (let i in state.concerned) { for (let i in state.concerned) {
conc = state.concerned[i]; conc = state.concerned[i];
payload.concerned.push({ payload_conc = {
person: { person: {
id: conc.person.id, id: conc.person.id,
type: conc.person.type type: conc.person.type
}, },
position: {
id: conc.position.id,
type: conc.position.type
},
holder: conc.holder,
comment: conc.comment,
start_date: { start_date: {
datetime: datetimeToISO(state.startDate) datetime: datetimeToISO(state.startDate)
} }
}); };
if (state.forceLeaveWithoutHousehold === false) {
payload_conc.position = {
id: conc.position.id,
type: conc.position.type
};
payload_conc.holder = conc.holder;
payload_conc.comment = conc.comment;
}
payload.concerned.push(payload_conc);
} }
return payload; return payload;
@ -137,6 +150,7 @@ const store = createStore({
}, },
createHousehold(state) { createHousehold(state) {
state.household = { type: 'household', members: [], address: null } state.household = { type: 'household', members: [], address: null }
state.forceLeaveWithoutHousehold = false;
}, },
forceLeaveWithoutHousehold(state) { forceLeaveWithoutHousehold(state) {
state.household = null; state.household = null;
@ -202,12 +216,19 @@ const store = createStore({
commit('setWarnings', warnings); commit('setWarnings', warnings);
}, },
confirm({ getters }) { confirm({ getters, state }) {
let payload = getters.buildPayload; let payload = getters.buildPayload,
person_id,
household_id;
householdMove(payload).then(household => { householdMove(payload).then(household => {
let id = household.id; if (household === null) {
// nothing to do anymore here, bye-bye ! person_id = getters.persons[0].id;
window.location.replace(`/fr/person/household/{id}/members`); window.location.replace(`/fr/person/${person_id}/general`);
} else {
household_id = household.id;
// nothing to do anymore here, bye-bye !
window.location.replace(`/fr/person/household/${household_id}/members`);
}
}); });
}, },
} }