mirror of
https://gitlab.com/Chill-Projet/chill-bundles.git
synced 2025-06-07 18:44:08 +00:00
See https://gitlab.com/Chill-Projet/chill-bundles/-/merge_requests/221 Squashed commit of the following: commit 4f68f83aba74a88898779037aeb24d45c622759e Author: Julien Fastré <julien.fastre@champs-libres.coop> Date: Thu Nov 25 12:07:37 2021 +0100 scope in course editor: show toast when error, instead of restoring the previous state commit fdca8c1c87a4972bb6107bb16ab76844a28cae72 Merge: 53d6e68f8 b97f49782 Author: Julien Fastré <julien.fastre@champs-libres.coop> Date: Wed Nov 24 17:39:27 2021 +0100 Merge remote-tracking branch 'origin/add_toasters' into add_toasters commit 53d6e68f8c5e158ac1848403d18146690ffeacf2 Author: Julien Fastré <julien.fastre@champs-libres.coop> Date: Wed Nov 24 17:38:52 2021 +0100 better validation messages commit b97f497822fa6f6057e3b1cf3697044192ea9052 Author: Julie Lenaerts <julielenaerts@gmail.com> Date: Wed Nov 24 17:36:59 2021 +0100 methods added to api.js again so they can be imported in other bundles still. To be refactored later with general makeFetch method? commit e6089f75b4f66669cbd84f496c3b867901de9c8c Author: Julien Fastré <julien.fastre@champs-libres.coop> Date: Wed Nov 24 17:20:05 2021 +0100 fix validator for participation overlaps commit e47e6741b9f179dae63f39a596b7ba7410b3ac88 Merge: 25a80fcb2 05385509e Author: Julien Fastré <julien.fastre@champs-libres.coop> Date: Wed Nov 24 16:31:50 2021 +0100 Merge remote-tracking branch 'origin/master' into add_toasters commit 25a80fcb26cfb3ab7afab0abc1fcb6c0d0af7a6d Author: Julie Lenaerts <julielenaerts@gmail.com> Date: Tue Nov 23 18:22:35 2021 +0100 error object/message changed if not 422 or 403 commit 0c602cee8c127ab7f0723819a691a98c4e0615e2 Author: Julie Lenaerts <julielenaerts@gmail.com> Date: Tue Nov 23 17:13:47 2021 +0100 Toasts displayed with differentiation between different errors error objects created accordingly commit 252e57a06da1101e4ebc025974b247c472b8c2ed Author: Julie Lenaerts <julielenaerts@gmail.com> Date: Tue Nov 23 17:12:55 2021 +0100 generic makeFetch implemented almost everywhere api.js file no longer needs to contain a separate function to make an api call. commit 8532eeee7656f6f9761168fb5e2102778ee932b7 Author: Julie Lenaerts <julielenaerts@gmail.com> Date: Tue Nov 23 17:10:48 2021 +0100 Moved generic api methods into one file apiMethods.js imports adapted throughout bundles commit c44bd5e75b32d5fbc8951247324ebf5fb85f3b37 Author: Julie Lenaerts <julielenaerts@gmail.com> Date: Tue Nov 23 11:27:24 2021 +0100 migration deleted commit dbeee090f46b3653c306a1825dcb05637e1f9b31 Author: Julie Lenaerts <julielenaerts@gmail.com> Date: Tue Nov 23 11:27:13 2021 +0100 toast plugin initialized with options in the root commit ec3919e357ee26f6c5016360d2083d19688217f4 Merge: 1ab401b5d b8889ed58 Author: Julie Lenaerts <julielenaerts@gmail.com> Date: Tue Nov 23 10:52:24 2021 +0100 merge conflicts fixed commit 1ab401b5d55a28f9c027ee539da58ef1da3d797c Author: Julie Lenaerts <julielenaerts@gmail.com> Date: Tue Nov 23 10:40:02 2021 +0100 add options when vue toast plugin is loaded commit ad4e630bdd87c8ec16455bab0c2b053c1d838050 Author: Julie Lenaerts <julielenaerts@gmail.com> Date: Mon Nov 22 18:58:44 2021 +0100 fixes to throw and catch error commit 1c19748866d738bcb9e336f1035d9d78c6941d34 Author: Julie Lenaerts <julielenaerts@gmail.com> Date: Wed Nov 17 20:22:06 2021 +0100 toast added to banner commit 35949b90532b60161e14e815a78b3b69b053b62d Author: Julie Lenaerts <julielenaerts@gmail.com> Date: Wed Nov 17 20:16:35 2021 +0100 few more actions using makeFetch commit e94c13e396f496565955294aec360db37f92374b Author: Julie Lenaerts <julielenaerts@gmail.com> Date: Wed Nov 17 19:48:58 2021 +0100 For accompanyingcourse app general makeFetch + displayToast implemented commit 35eac75edf2c8d39ee2a04f119bb99a946fe3ea9 Author: Julie Lenaerts <julielenaerts@gmail.com> Date: Wed Nov 17 17:12:31 2021 +0100 general makeFetch method implemented + toasts displayed in progress commit 541bb10547bd7b96815a22a755ecf7f809d8cc87 Author: Julie Lenaerts <julielenaerts@gmail.com> Date: Wed Nov 17 12:36:20 2021 +0100 general fetch method adjusted and tested on addParticipation: works commit b7f27e8079bc815d88ffc925ec7a4fae3fba5f02 Author: Julie Lenaerts <julielenaerts@gmail.com> Date: Wed Nov 17 11:50:09 2021 +0100 changelog updated commit 028519ee3e93991aeb3131656e5f17e728ebdb1c Author: Julie Lenaerts <julielenaerts@gmail.com> Date: Wed Nov 17 11:42:55 2021 +0100 adjustment of error message using templating render commit 508139b4476a46028a40b0b5300a8c65f79414a9 Author: Julie Lenaerts <julielenaerts@gmail.com> Date: Wed Nov 17 11:41:52 2021 +0100 toast display for 422 errors on participations, requestor, resources + bugfix in requestor component (display of 'remove' btn if non-anonymous commit 3e5d4862fcbbf5708f52c0038bf030dc0cbae5bb Author: Julie Lenaerts <julielenaerts@gmail.com> Date: Tue Nov 16 15:38:03 2021 +0100 debugging fetch method commit 8b971a2357aac952ea6cd9487da20f4064c26a8d Author: Julie Lenaerts <julielenaerts@gmail.com> Date: Tue Nov 16 14:31:45 2021 +0100 general fetch method in _abstratAPI and testcase implementation; still needs to take care of commit into store commit 05488740ab138ed279a4626310c5427d9f732793 Author: Julie Lenaerts <julielenaerts@gmail.com> Date: Tue Nov 16 11:13:28 2021 +0100 testcase: toaster working when adding a resource to an accompanying course. Needs to be generalized commit 5050e8a516107710216fa11aafcf852c52e1eb03 Author: Julie Lenaerts <julielenaerts@gmail.com> Date: Tue Nov 16 09:22:36 2021 +0100 start of toaster popup commit b8889ed58d3abb68d1c2859b31bf7428addda36e Author: Julie Lenaerts <julielenaerts@gmail.com> Date: Mon Nov 22 18:58:44 2021 +0100 fixes to throw and catch error commit 0c017eb908e65919876d3bed69d3daa27699f2cc Author: Julie Lenaerts <julielenaerts@gmail.com> Date: Wed Nov 17 20:22:06 2021 +0100 toast added to banner commit 80d8c5f12be4b0cfcded2948f385b4e3627e9afb Author: Julie Lenaerts <julielenaerts@gmail.com> Date: Wed Nov 17 20:16:35 2021 +0100 few more actions using makeFetch commit 9cfcc61d995f75651902af97fe640f00f994ce9b Author: Julie Lenaerts <julielenaerts@gmail.com> Date: Wed Nov 17 19:48:58 2021 +0100 For accompanyingcourse app general makeFetch + displayToast implemented commit 2855b0293a4a3fef2baf22fa035316bac13abf3f Author: Julie Lenaerts <julielenaerts@gmail.com> Date: Wed Nov 17 17:12:31 2021 +0100 general makeFetch method implemented + toasts displayed in progress commit febbc8b9cdd9ec811546ce2948e2e1bded7c2116 Author: Julie Lenaerts <julielenaerts@gmail.com> Date: Wed Nov 17 12:36:20 2021 +0100 general fetch method adjusted and tested on addParticipation: works commit 16b59681b97cf995689aa464ae2a310c3efbb603 Author: Julie Lenaerts <julielenaerts@gmail.com> Date: Wed Nov 17 11:50:09 2021 +0100 changelog updated commit 41df29bdef84af010892708bfd0e37ff826f7aee Author: Julie Lenaerts <julielenaerts@gmail.com> Date: Wed Nov 17 11:42:55 2021 +0100 adjustment of error message using templating render commit 8c98fe602c26e61285f12f5f7d58d646655f4caa Author: Julie Lenaerts <julielenaerts@gmail.com> Date: Wed Nov 17 11:41:52 2021 +0100 toast display for 422 errors on participations, requestor, resources + bugfix in requestor component (display of 'remove' btn if non-anonymous commit 689ca8aa0ac249d577fe2ead5b3fcc0298dbad90 Author: Julie Lenaerts <julielenaerts@gmail.com> Date: Tue Nov 16 15:38:03 2021 +0100 debugging fetch method commit 07234c5fa996fb9f0352719ee366b34b093807eb Author: Julie Lenaerts <julielenaerts@gmail.com> Date: Tue Nov 16 14:31:45 2021 +0100 general fetch method in _abstratAPI and testcase implementation; still needs to take care of commit into store commit 2a482516e952aa720b5aa8b4cb68ab33f93ce47b Author: Julie Lenaerts <julielenaerts@gmail.com> Date: Tue Nov 16 11:13:28 2021 +0100 testcase: toaster working when adding a resource to an accompanying course. Needs to be generalized commit b7dcc5e7d4b1489a8edc175a0c2c1b0d649c6c0f Author: Julie Lenaerts <julielenaerts@gmail.com> Date: Tue Nov 16 09:22:36 2021 +0100 start of toaster popup
261 lines
8.2 KiB
Vue
261 lines
8.2 KiB
Vue
<template>
|
|
<div class="vue-component">
|
|
<h2><a id="section-20"></a>
|
|
{{ $t('courselocation.title') }}
|
|
</h2>
|
|
|
|
<div v-for="error in displayErrors" class="alert alert-danger my-2">
|
|
{{ error }}
|
|
</div>
|
|
|
|
<div v-if="hasNoLocation">
|
|
<label class="chill-no-data-statement">
|
|
{{ $t('courselocation.no_address') }}
|
|
</label>
|
|
</div>
|
|
|
|
<div class="flex-table" v-if="accompanyingCourse.location">
|
|
<div class="item-bloc">
|
|
<address-render-box
|
|
:address="accompanyingCourse.location">
|
|
</address-render-box>
|
|
|
|
<div v-if="isPersonLocation" class="alert alert-secondary separator">
|
|
<label class="col-form-label">
|
|
{{ $t('courselocation.person_locator', [ accompanyingCourse.personLocation.text ]) }}
|
|
</label>
|
|
</div>
|
|
|
|
<div v-if="isTemporaryAddress" class="alert alert-warning separator">
|
|
<p>
|
|
{{ $t('courselocation.temporary_address_must_be_changed') }}
|
|
<i class="fa fa-fw fa-map-marker"></i>
|
|
</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div v-if="hasNoPersonLocation" class="alert alert-danger no-person-location">
|
|
<i class="fa fa-warning fa-2x"></i>
|
|
<div>
|
|
<p>
|
|
{{ $t('courselocation.associate_at_least_one_person_with_one_household_with_address') }}
|
|
<a href="#section-10">
|
|
<i class="fa fa-level-up fa-fw"></i>
|
|
</a>
|
|
</p>
|
|
</div>
|
|
</div>
|
|
|
|
<div>
|
|
<ul class="record_actions">
|
|
<li>
|
|
<add-address
|
|
v-if="!isPersonLocation"
|
|
:key="key"
|
|
:context="context"
|
|
:options="options"
|
|
:addressChangedCallback="submitTemporaryAddress"
|
|
ref="addAddress">
|
|
</add-address>
|
|
</li>
|
|
<li v-if="isPersonLocation">
|
|
<button
|
|
class="btn btn-remove"
|
|
@click="removeAddress"
|
|
:title="$t('courselocation.remove_button')">
|
|
{{ $t('action.remove') }}
|
|
</button>
|
|
</li>
|
|
</ul>
|
|
</div>
|
|
|
|
<div v-if="!isLocationValid" class="alert alert-warning to-confirm">
|
|
{{ $t('courselocation.not_valid') }}
|
|
</div>
|
|
|
|
</div>
|
|
</template>
|
|
|
|
<script>
|
|
import {mapGetters, mapState} from "vuex";
|
|
import AddAddress from 'ChillMainAssets/vuejs/Address/components/AddAddress.vue';
|
|
import AddressRenderBox from 'ChillMainAssets/vuejs/_components/Entity/AddressRenderBox.vue';
|
|
|
|
export default {
|
|
name: "CourseLocation",
|
|
components: {
|
|
AddAddress,
|
|
AddressRenderBox
|
|
},
|
|
data() {
|
|
return {
|
|
addAddress: {
|
|
options: {
|
|
button: {
|
|
text: {
|
|
create: 'courselocation.add_temporary_address',
|
|
edit: 'courselocation.edit_temporary_address'
|
|
}
|
|
},
|
|
title: {
|
|
create: 'courselocation.add_temporary_address',
|
|
edit: 'courselocation.edit_temporary_address'
|
|
},
|
|
onlyButton: true
|
|
}
|
|
}
|
|
}
|
|
},
|
|
computed: {
|
|
...mapState({
|
|
accompanyingCourse: state => state.accompanyingCourse,
|
|
context: state => state.addressContext
|
|
}),
|
|
...mapGetters([
|
|
'isLocationValid'
|
|
]),
|
|
options() {
|
|
return this.addAddress.options;
|
|
},
|
|
key() {
|
|
return (this.context.edit) ? 'address_' + this.context.addressId
|
|
: this.accompanyingCourse.type + '_' + this.accompanyingCourse.id ;
|
|
},
|
|
isTemporaryAddress() {
|
|
return this.accompanyingCourse.locationStatus === 'address';
|
|
},
|
|
isPersonLocation() {
|
|
return this.accompanyingCourse.locationStatus === 'person';
|
|
},
|
|
hasNoLocation() {
|
|
return this.accompanyingCourse.locationStatus === 'none';
|
|
},
|
|
currentParticipations() {
|
|
return this.accompanyingCourse.participations.filter(p => p.enddate !== null);
|
|
},
|
|
hasNoPersonLocation() {
|
|
|
|
let addressInParticipations_ = []
|
|
this.currentParticipations.forEach(p => {
|
|
addressInParticipations_.push(this.checkHouseholdAddressForParticipation(p));
|
|
});
|
|
|
|
const booleanReducer = (previousValue, currentValue) => previousValue || currentValue;
|
|
|
|
let addressInParticipations = (addressInParticipations_.length > 0) ?
|
|
addressInParticipations_.reduce(booleanReducer) : false;
|
|
|
|
//console.log(addressInParticipations_, addressInParticipations);
|
|
return (
|
|
this.accompanyingCourse.step !== 'DRAFT'
|
|
&& this.isTemporaryAddress
|
|
&& !addressInParticipations
|
|
)
|
|
;
|
|
},
|
|
isContextEdit() {
|
|
return this.context.edit;
|
|
}
|
|
},
|
|
methods: {
|
|
checkHouseholdAddressForParticipation(participation) {
|
|
if (participation.person.current_household_id === null) {
|
|
return false;
|
|
}
|
|
return participation.person.current_household_address !== null;
|
|
},
|
|
initAddressContext() {
|
|
let context = {
|
|
target: {
|
|
name: this.accompanyingCourse.type,
|
|
id: this.accompanyingCourse.id
|
|
},
|
|
edit: false,
|
|
addressId: null
|
|
}
|
|
if (this.accompanyingCourse.location) {
|
|
context['edit'] = true;
|
|
context['addressId'] = this.accompanyingCourse.location.address_id
|
|
}
|
|
this.$store.commit('setAddressContext', context);
|
|
},
|
|
removeAddress() {
|
|
let payload = {
|
|
target: this.context.target.name,
|
|
targetId: this.context.target.id,
|
|
locationStatusTo: 'none'
|
|
};
|
|
//console.log('remove address');
|
|
this.$store.dispatch('updateLocation', payload)
|
|
.catch(({name, violations}) => {
|
|
if (name === 'ValidationException' || name === 'AccessException') {
|
|
violations.forEach((violation) => this.$toast.open({message: violation}));
|
|
} else {
|
|
this.$toast.open({message: 'An error occurred'})
|
|
}
|
|
});
|
|
},
|
|
displayErrors() {
|
|
return this.$refs.addAddress.errorMsg;
|
|
},
|
|
submitTemporaryAddress(payload) {
|
|
//console.log('@@@ click on Submit Temporary Address Button', payload);
|
|
payload['locationStatusTo'] = 'address'; // <== temporary, not none, not person
|
|
this.$store.dispatch('updateLocation', payload)
|
|
.catch(({name, violations}) => {
|
|
if (name === 'ValidationException' || name === 'AccessException') {
|
|
violations.forEach((violation) => this.$toast.open({message: violation}));
|
|
} else {
|
|
this.$toast.open({message: 'An error occurred'})
|
|
}
|
|
});
|
|
|
|
this.$store.commit('setEditContextTrue', payload);
|
|
}
|
|
},
|
|
created() {
|
|
this.initAddressContext();
|
|
|
|
//console.log('ac.locationStatus', this.accompanyingCourse.locationStatus);
|
|
//console.log('ac.location (temporary location)', this.accompanyingCourse.location);
|
|
//console.log('ac.personLocation', this.accompanyingCourse.personLocation);
|
|
}
|
|
}
|
|
</script>
|
|
<style lang="scss" scoped>
|
|
|
|
div#accompanying-course {
|
|
div.vue-component {
|
|
& > div.alert.no-person-location {
|
|
margin: 1px 0 0;
|
|
}
|
|
div.no-person-location {
|
|
padding-top: 1.5em;
|
|
display: flex;
|
|
flex-direction: row;
|
|
& > i {
|
|
flex-basis: 1.5em; flex-grow: 0; flex-shrink: 0;
|
|
padding-top: 0.2em;
|
|
opacity: 0.75;
|
|
}
|
|
& > div {
|
|
flex-basis: auto;
|
|
div.action {
|
|
button.btn-update {
|
|
margin-right: 2em;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
div.flex-table {
|
|
div.item-bloc {
|
|
div.alert {
|
|
margin: 0 -0.9em -1em;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
</style>
|