diff --git a/src/Bundle/ChillPersonBundle/Entity/AccompanyingPeriod/AccompanyingPeriodWork.php b/src/Bundle/ChillPersonBundle/Entity/AccompanyingPeriod/AccompanyingPeriodWork.php
index b42242a5b..5fd01acf3 100644
--- a/src/Bundle/ChillPersonBundle/Entity/AccompanyingPeriod/AccompanyingPeriodWork.php
+++ b/src/Bundle/ChillPersonBundle/Entity/AccompanyingPeriod/AccompanyingPeriodWork.php
@@ -4,6 +4,7 @@ namespace Chill\PersonBundle\Entity\AccompanyingPeriod;
use Chill\PersonBundle\Entity\SocialWork\Result;
use Chill\PersonBundle\Entity\SocialWork\SocialAction;
+use Chill\PersonBundle\Entity\Person;
use Chill\MainBundle\Entity\User;
use Chill\PersonBundle\Entity\AccompanyingPeriod;
use Chill\ThirdPartyBundle\Entity\ThirdParty;
@@ -148,11 +149,22 @@ use Symfony\Component\Validator\Constraints as Assert;
*/
private Collection $thirdParties;
+ /**
+ *
+ * @ORM\ManyToMany(targetEntity=Person::class)
+ * @ORM\JoinTable(name="chill_person_accompanying_period_work_person")
+ * @Serializer\Groups({"read"})
+ * @Serializer\Groups({"accompanying_period_work:edit"})
+ * @Serializer\Groups({"accompanying_period_work:create"})
+ */
+ private Collection $persons;
+
public function __construct()
{
$this->goals = new ArrayCollection();
$this->results = new ArrayCollection();
$this->thirdParties = new ArrayCollection();
+ $this->persons = new ArrayCollection();
}
public function getId(): ?int
@@ -390,4 +402,25 @@ use Symfony\Component\Validator\Constraints as Assert;
return $this;
}
+
+ public function getPersons(): Collection
+ {
+ return $this->persons;
+ }
+
+ public function addPerson(Person $person): self
+ {
+ if (!$this->persons->contains($person)) {
+ $this->persons[] = $person;
+ }
+
+ return $this;
+ }
+
+ public function removePerson(Person $person): self
+ {
+ $this->persons->removeElement($person);
+
+ return $this;
+ }
}
diff --git a/src/Bundle/ChillPersonBundle/Resources/public/vuejs/AccompanyingCourseWorkCreate/App.vue b/src/Bundle/ChillPersonBundle/Resources/public/vuejs/AccompanyingCourseWorkCreate/App.vue
index 7e8f2d5f0..96edce825 100644
--- a/src/Bundle/ChillPersonBundle/Resources/public/vuejs/AccompanyingCourseWorkCreate/App.vue
+++ b/src/Bundle/ChillPersonBundle/Resources/public/vuejs/AccompanyingCourseWorkCreate/App.vue
@@ -28,8 +28,19 @@
-
+
+
{{ $t('persons_involved') }}
+
+
+
+
+
@@ -85,6 +96,14 @@
#picking {
grid-area: picking;
+
+ #persons {
+ ul {
+ padding: 0;
+
+ list-style-type: none;
+ }
+ }
}
#start_date {
@@ -105,6 +124,7 @@
import { mapState, mapActions, mapGetters } from 'vuex';
import VueMultiselect from 'vue-multiselect';
import { dateToISO, ISOToDate } from 'ChillMainAssets/js/date.js';
+import Person from 'ChillPersonAssets/vuejs/_components/Person/Person.vue';
const i18n = {
messages: {
@@ -115,6 +135,7 @@ const i18n = {
pick_social_issue: "Choisir une problématique sociale",
pick_an_action: "Choisir une action d'accompagnement",
pick_social_issue_linked_with_action: "Indiquez la problématique sociale liée à l'action d'accompagnement",
+ persons_involved: "Usagers concernés",
}
}
@@ -124,6 +145,7 @@ export default {
name: 'App',
components: {
VueMultiselect,
+ Person,
},
methods: {
submit() {
@@ -136,6 +158,7 @@ export default {
'socialIssues',
'socialActionsReachables',
'errors',
+ 'personsReachables',
]),
...mapGetters([
'hasSocialIssuePicked',
@@ -144,6 +167,18 @@ export default {
'isPostingWork',
'hasErrors',
]),
+ personsPicked: {
+ get() {
+ let s = this.$store.state.personsPicked.map(p => p.id);
+ console.log('persons picked', s);
+
+ return s;
+ },
+ set(v) {
+ console.log('persons picked', v);
+ this.$store.commit('setPersonsPickedIds', v);
+ }
+ },
socialIssuePicked: {
get() {
let s = this.$store.state.socialIssuePicked;
diff --git a/src/Bundle/ChillPersonBundle/Resources/public/vuejs/AccompanyingCourseWorkCreate/store.js b/src/Bundle/ChillPersonBundle/Resources/public/vuejs/AccompanyingCourseWorkCreate/store.js
index 8f0aed245..5efe3a6e9 100644
--- a/src/Bundle/ChillPersonBundle/Resources/public/vuejs/AccompanyingCourseWorkCreate/store.js
+++ b/src/Bundle/ChillPersonBundle/Resources/public/vuejs/AccompanyingCourseWorkCreate/store.js
@@ -14,6 +14,10 @@ const store = createStore({
socialIssuePicked: null,
socialActionsReachables: [],
socialActionPicked: null,
+ personsPicked: window.accompanyingCourse.participations.filter(p => p.endDate == null)
+ .map(p => p.person),
+ personsReachables: window.accompanyingCourse.participations.filter(p => p.endDate == null)
+ .map(p => p.person),
startDate: new Date(),
endDate: null,
isLoadingSocialActions: false,
@@ -44,9 +48,17 @@ const store = createStore({
},
startDate: {
datetime: datetimeToISO(state.startDate)
- }
+ },
+ persons: []
};
+ for (let i in state.personsPicked) {
+ payload.persons.push({
+ id: state.personsPicked[i].id,
+ type: 'person'
+ });
+ }
+
if (null !== state.endDate) {
payload.endDate = {
datetime: datetimeToISO(state.endDate)
@@ -71,12 +83,16 @@ const store = createStore({
state.socialActionPicked = socialAction;
},
setSocialIssue(state, socialIssueId) {
+ console.log('set social issue', socialIssueId);
if (socialIssueId === null) {
state.socialIssuePicked = null;
- return;
+ } else {
+ let mapped = state.socialIssues
+ .find(e => e.id === socialIssueId);
+ console.log('mapped', mapped);
+ state.socialIssuePicked = mapped;
+ console.log('social issue setted', state.socialIssuePicked);
}
- state.socialIssuePicked = state.socialIssues
- .find(e => e.id === socialIssueId);
},
setIsLoadingSocialActions(state, s) {
state.isLoadingSocialActions = s;
@@ -90,6 +106,11 @@ const store = createStore({
setEndDate(state, date) {
state.endDate = date;
},
+ setPersonsPickedIds(state, ids) {
+ console.log('persons ids', ids);
+ state.personsPicked = state.personsReachables
+ .filter(p => ids.includes(p.id))
+ },
addErrors(state, { errors, cancel_posting }) {
console.log('add errors', errors);
state.errors = errors;
@@ -103,8 +124,10 @@ const store = createStore({
console.log('pick social issue');
commit('setIsLoadingSocialActions', true);
- commit('setSocialIssue', null);
+ commit('setSocialAction', null);
commit('setSocialActionsReachables', []);
+ commit('setSocialIssue', null);
+
findSocialActionsBySocialIssue(socialIssueId).then(
(response) => {
diff --git a/src/Bundle/ChillPersonBundle/migrations/Version20210623135043.php b/src/Bundle/ChillPersonBundle/migrations/Version20210623135043.php
new file mode 100644
index 000000000..d7f2f4ccc
--- /dev/null
+++ b/src/Bundle/ChillPersonBundle/migrations/Version20210623135043.php
@@ -0,0 +1,34 @@
+addSql("CREATE TABLE chill_person_accompanying_period_work_person (accompanyingperiodwork_id INT NOT NULL, person_id INT NOT NULL, PRIMARY KEY(accompanyingperiodwork_id, person_id))");
+ $this->addSql("CREATE INDEX IDX_615F494CB99F6060 ON chill_person_accompanying_period_work_person (accompanyingperiodwork_id)");
+ $this->addSql("CREATE INDEX IDX_615F494C217BBB47 ON chill_person_accompanying_period_work_person (person_id)");
+ $this->addSql("ALTER TABLE chill_person_accompanying_period_work_person ADD CONSTRAINT FK_615F494CB99F6060 FOREIGN KEY (accompanyingperiodwork_id) REFERENCES chill_person_accompanying_period_work (id) ON DELETE CASCADE NOT DEFERRABLE INITIALLY IMMEDIATE");
+ $this->addSql("ALTER TABLE chill_person_accompanying_period_work_person ADD CONSTRAINT FK_615F494C217BBB47 FOREIGN KEY (person_id) REFERENCES chill_person_person (id) ON DELETE CASCADE NOT DEFERRABLE INITIALLY IMMEDIATE");
+
+ }
+
+ public function down(Schema $schema): void
+ {
+ $this->addSql("DROP TABLE chill_person_accompanying_period_work_person");
+ }
+}