mirror of
https://gitlab.com/Chill-Projet/chill-bundles.git
synced 2025-07-04 16:06:13 +00:00
133 lines
4.0 KiB
JavaScript
133 lines
4.0 KiB
JavaScript
import {
|
|
getLocations,
|
|
getLocationTypeByDefaultFor,
|
|
getUserCurrentLocation,
|
|
} from "./api";
|
|
|
|
const makeConcernedPersonsLocation = (locationType, store) => {
|
|
let locations = [];
|
|
store.getters.suggestedEntities.forEach((e) => {
|
|
if (e.type === "person" && e.current_household_address !== null) {
|
|
locations.push({
|
|
type: "location",
|
|
id: -store.getters.suggestedEntities.indexOf(e) * 10,
|
|
onthefly: true,
|
|
name: e.text,
|
|
address: {
|
|
id: e.current_household_address.address_id,
|
|
},
|
|
locationType: locationType,
|
|
});
|
|
}
|
|
});
|
|
return locations;
|
|
};
|
|
const makeConcernedThirdPartiesLocation = (locationType, store) => {
|
|
let locations = [];
|
|
store.getters.suggestedEntities.forEach((e) => {
|
|
if (e.type === "thirdparty" && e.address !== null) {
|
|
locations.push({
|
|
type: "location",
|
|
id: -store.getters.suggestedEntities.indexOf(e) * 10,
|
|
onthefly: true,
|
|
name: e.text,
|
|
address: { id: e.address.address_id },
|
|
locationType: locationType,
|
|
});
|
|
}
|
|
});
|
|
return locations;
|
|
};
|
|
const makeAccompanyingPeriodLocation = (locationType, store) => {
|
|
if (store.state.activity.accompanyingPeriod === null) {
|
|
return {};
|
|
}
|
|
const accPeriodLocation = store.state.activity.accompanyingPeriod.location;
|
|
return {
|
|
type: "location",
|
|
id: -1,
|
|
onthefly: true,
|
|
name: "__AccompanyingCourseLocation__",
|
|
address: {
|
|
id: accPeriodLocation.address_id,
|
|
text: `${accPeriodLocation.text} - ${accPeriodLocation.postcode.code} ${accPeriodLocation.postcode.name}`,
|
|
},
|
|
locationType: locationType,
|
|
};
|
|
};
|
|
|
|
export default function prepareLocations(store) {
|
|
// find the locations
|
|
let allLocations = getLocations().then((results) => {
|
|
store.commit("addAvailableLocationGroup", {
|
|
locationGroup: "Autres localisations",
|
|
locations: results,
|
|
});
|
|
});
|
|
|
|
let currentLocation = getUserCurrentLocation().then((userCurrentLocation) => {
|
|
if (null !== userCurrentLocation) {
|
|
store.commit("addAvailableLocationGroup", {
|
|
locationGroup: "Ma localisation",
|
|
locations: [userCurrentLocation],
|
|
});
|
|
}
|
|
});
|
|
|
|
let partiesLocations = [],
|
|
partyPromise;
|
|
["person", "thirdparty"].forEach((kind) => {
|
|
partyPromise = getLocationTypeByDefaultFor(kind).then(
|
|
(kindLocationType) => {
|
|
if (kindLocationType) {
|
|
let concernedKindLocations;
|
|
if (kind === "person") {
|
|
concernedKindLocations = makeConcernedPersonsLocation(
|
|
kindLocationType,
|
|
store,
|
|
);
|
|
// add location for the parcours into suggestions
|
|
const personLocation = makeAccompanyingPeriodLocation(
|
|
kindLocationType,
|
|
store,
|
|
);
|
|
store.commit("addAvailableLocationGroup", {
|
|
locationGroup: "Localisation du parcours",
|
|
locations: [personLocation],
|
|
});
|
|
} else {
|
|
concernedKindLocations = makeConcernedThirdPartiesLocation(
|
|
kindLocationType,
|
|
store,
|
|
);
|
|
}
|
|
|
|
store.commit("addAvailableLocationGroup", {
|
|
locationGroup:
|
|
kind === "person" ? "Usagers concernés" : "Tiers concernés",
|
|
locations: concernedKindLocations,
|
|
});
|
|
}
|
|
},
|
|
);
|
|
partiesLocations.push(partyPromise);
|
|
});
|
|
|
|
// when all location are loaded
|
|
Promise.all([allLocations, currentLocation, ...partiesLocations]).then(() => {
|
|
console.log("current location in activity", store.state.activity.location);
|
|
console.log("default loation id", window.default_location_id);
|
|
if (window.default_location_id) {
|
|
for (let group of store.state.availableLocations) {
|
|
let location = group.locations.find(
|
|
(l) => l.id === window.default_location_id,
|
|
);
|
|
if (location !== undefined && store.state.activity.location === null) {
|
|
store.dispatch("updateLocation", location);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
});
|
|
}
|