diff --git a/src/Bundle/ChillActivityBundle/DependencyInjection/ChillActivityExtension.php b/src/Bundle/ChillActivityBundle/DependencyInjection/ChillActivityExtension.php index 61354c7c8..a6f1d6a8a 100644 --- a/src/Bundle/ChillActivityBundle/DependencyInjection/ChillActivityExtension.php +++ b/src/Bundle/ChillActivityBundle/DependencyInjection/ChillActivityExtension.php @@ -55,6 +55,7 @@ class ChillActivityExtension extends Extension implements PrependExtensionInterf $loader->load('services/controller.yaml'); $loader->load('services/form.yaml'); $loader->load('services/templating.yaml'); + $loader->load('services/accompanyingPeriodConsistency.yaml'); } public function prepend(ContainerBuilder $container) diff --git a/src/Bundle/ChillActivityBundle/Entity/Activity.php b/src/Bundle/ChillActivityBundle/Entity/Activity.php index 549f800a2..e37dcbc73 100644 --- a/src/Bundle/ChillActivityBundle/Entity/Activity.php +++ b/src/Bundle/ChillActivityBundle/Entity/Activity.php @@ -23,6 +23,7 @@ namespace Chill\ActivityBundle\Entity; use Chill\DocStoreBundle\Entity\Document; use Chill\DocStoreBundle\Entity\StoredObject; use Chill\MainBundle\Entity\Embeddable\CommentEmbeddable; +use Chill\PersonBundle\AccompanyingPeriod\SocialIssueConsistency\AccompanyingPeriodLinkedWithSocialIssuesEntityInterface; use Chill\PersonBundle\Entity\AccompanyingPeriod; use Chill\PersonBundle\Entity\SocialWork\SocialAction; use Chill\PersonBundle\Entity\SocialWork\SocialIssue; @@ -60,7 +61,7 @@ use Symfony\Component\Serializer\Annotation\DiscriminatorMap; * path="scope") */ -class Activity implements HasCenterInterface, HasScopeInterface +class Activity implements HasCenterInterface, HasScopeInterface, AccompanyingPeriodLinkedWithSocialIssuesEntityInterface { const SENTRECEIVED_SENT = 'sent'; const SENTRECEIVED_RECEIVED = 'received'; @@ -417,7 +418,7 @@ class Activity implements HasCenterInterface, HasScopeInterface return $this->persons; } - public function getPersonsAssociated(): array + public function getPersonsAssociated(): array { if (null !== $this->accompanyingPeriod) { $personsAssociated = []; @@ -426,11 +427,11 @@ class Activity implements HasCenterInterface, HasScopeInterface $personsAssociated[] = $participation->getPerson(); } } - return $personsAssociated; + return $personsAssociated; } return []; } - + public function getPersonsNotAssociated(): array { if (null !== $this->accompanyingPeriod) { @@ -443,7 +444,7 @@ class Activity implements HasCenterInterface, HasScopeInterface return $personsNotAssociated; } return []; - } + } public function setPersons(?Collection $persons): self { diff --git a/src/Bundle/ChillActivityBundle/config/services/accompanyingPeriodConsistency.yaml b/src/Bundle/ChillActivityBundle/config/services/accompanyingPeriodConsistency.yaml new file mode 100644 index 000000000..580c64b1c --- /dev/null +++ b/src/Bundle/ChillActivityBundle/config/services/accompanyingPeriodConsistency.yaml @@ -0,0 +1,14 @@ +services: + accompanying_period_social_issue_consistency_for_activity: + class: 'Chill\PersonBundle\AccompanyingPeriod\SocialIssueConsistency\AccompanyingPeriodSocialIssueConsistencyEntityListener' + tags: + - + name: 'doctrine.orm.entity_listener' + event: 'prePersist' + entity: 'Chill\ActivityBundle\Entity\Activity' + lazy: true + - + name: 'doctrine.orm.entity_listener' + event: 'preUpdate' + entity: 'Chill\ActivityBundle\Entity\Activity' + lazy: true diff --git a/src/Bundle/ChillPersonBundle/AccompanyingPeriod/SocialIssueConsistency/AccompanyingPeriodLinkedWithSocialIssuesEntityInterface.php b/src/Bundle/ChillPersonBundle/AccompanyingPeriod/SocialIssueConsistency/AccompanyingPeriodLinkedWithSocialIssuesEntityInterface.php index 58f1dc32a..0f1922435 100644 --- a/src/Bundle/ChillPersonBundle/AccompanyingPeriod/SocialIssueConsistency/AccompanyingPeriodLinkedWithSocialIssuesEntityInterface.php +++ b/src/Bundle/ChillPersonBundle/AccompanyingPeriod/SocialIssueConsistency/AccompanyingPeriodLinkedWithSocialIssuesEntityInterface.php @@ -17,7 +17,7 @@ use Chill\PersonBundle\Entity\SocialWork\SocialIssue; */ interface AccompanyingPeriodLinkedWithSocialIssuesEntityInterface { - public function getAccompanyingPeriod(): AccompanyingPeriod; + public function getAccompanyingPeriod(): ?AccompanyingPeriod; /** * @return Collection|SocialIssue[] diff --git a/src/Bundle/ChillPersonBundle/AccompanyingPeriod/SocialIssueConsistency/AccompanyingPeriodSocialIssueConsistencyEntityListener.php b/src/Bundle/ChillPersonBundle/AccompanyingPeriod/SocialIssueConsistency/AccompanyingPeriodSocialIssueConsistencyEntityListener.php index cb4f594ca..847331180 100644 --- a/src/Bundle/ChillPersonBundle/AccompanyingPeriod/SocialIssueConsistency/AccompanyingPeriodSocialIssueConsistencyEntityListener.php +++ b/src/Bundle/ChillPersonBundle/AccompanyingPeriod/SocialIssueConsistency/AccompanyingPeriodSocialIssueConsistencyEntityListener.php @@ -39,14 +39,15 @@ final class AccompanyingPeriodSocialIssueConsistencyEntityListener private function ensureConsistencyEntity(AccompanyingPeriodLinkedWithSocialIssuesEntityInterface $entity): void { + if (NULL === $period = $entity->getAccompanyingPeriod()) { + return; + } // remove issues parents on the entity itself $ancestors = SocialIssue::findAncestorSocialIssues($entity->getSocialIssues()); foreach ($ancestors as $ancestor) { $entity->removeSocialIssue($ancestor); } - $period = $entity->getAccompanyingPeriod(); - foreach ($entity->getSocialIssues() as $issue) { // the entity itself test if the social issue is already associated, or not $period->addSocialIssue($issue); diff --git a/src/Bundle/ChillPersonBundle/DependencyInjection/ChillPersonExtension.php b/src/Bundle/ChillPersonBundle/DependencyInjection/ChillPersonExtension.php index 9cc026909..07d5dc88f 100644 --- a/src/Bundle/ChillPersonBundle/DependencyInjection/ChillPersonExtension.php +++ b/src/Bundle/ChillPersonBundle/DependencyInjection/ChillPersonExtension.php @@ -74,6 +74,7 @@ class ChillPersonExtension extends Extension implements PrependExtensionInterfac $loader->load('services/alt_names.yaml'); $loader->load('services/household.yaml'); $loader->load('services/notification.yaml'); + $loader->load('services/accompanyingPeriod.yaml'); // We can get rid of this file when the service 'chill.person.repository.person' is no more used. // We should use the PersonRepository service instead of a custom service name. $loader->load('services/repository.yaml'); diff --git a/src/Bundle/ChillPersonBundle/Resources/public/vuejs/AccompanyingCourse/js/i18n.js b/src/Bundle/ChillPersonBundle/Resources/public/vuejs/AccompanyingCourse/js/i18n.js index 3322dd732..d6954c3d4 100644 --- a/src/Bundle/ChillPersonBundle/Resources/public/vuejs/AccompanyingCourse/js/i18n.js +++ b/src/Bundle/ChillPersonBundle/Resources/public/vuejs/AccompanyingCourse/js/i18n.js @@ -71,7 +71,7 @@ const appMessages = { edit_temporary_address: "Modifier l'adresse temporaire", assign_course_address: "Désigner comme l'adresse du parcours", remove_button: "Enlever l'adresse", - temporary_address_must_be_changed: "Cette addresse est temporaire et devrait être remplacée par celle d'un usager de référence.", + temporary_address_must_be_changed: "Cette adresse est temporaire et devrait être remplacée par celle d'un usager de référence.", sure: "Êtes-vous sûr ?", sure_description: "Voulez-vous faire de cette adresse l'adresse du parcours ?", ok: "Désigner comme adresse du parcours", diff --git a/src/Bundle/ChillPersonBundle/Resources/public/vuejs/AccompanyingCourse/store/index.js b/src/Bundle/ChillPersonBundle/Resources/public/vuejs/AccompanyingCourse/store/index.js index b5d1658ca..34a6786fc 100644 --- a/src/Bundle/ChillPersonBundle/Resources/public/vuejs/AccompanyingCourse/store/index.js +++ b/src/Bundle/ChillPersonBundle/Resources/public/vuejs/AccompanyingCourse/store/index.js @@ -105,8 +105,13 @@ let initPromise = getAccompanyingCourse(id) state.accompanyingCourse.initialComment = comment; }, updateSocialIssues(state, value) { + console.log('updateSocialIssues', value); state.accompanyingCourse.socialIssues = value; }, + refreshSocialIssues(state, issues) { + console.log('refreshSocialIssues', issues); + state.accompanyingCourse.socialIssues = issues; + }, updateOrigin(state, value) { //console.log('value', value); state.accompanyingCourse.origin = value; @@ -226,14 +231,19 @@ let initPromise = getAccompanyingCourse(id) resolve(); })).catch((error) => { commit('catchError', error) }); }, - updateSocialIssues({ commit }, { payload, body, method }) { + updateSocialIssues({ state, commit }, { payload, body, method }) { //console.log('## action: payload', { payload, body, method }); postSocialIssue(id, body, method) .then(response => new Promise((resolve, reject) => { //console.log('response', response); commit('updateSocialIssues', payload); resolve(); - })).catch((error) => { commit('catchError', error) }); + })).then(() => { + return getAccompanyingCourse(state.accompanyingCourse.id); + }).then(accompanying_course => { + commit('refreshSocialIssues', accompanying_course.socialIssues); + }) + .catch((error) => { commit('catchError', error) }); }, updateOrigin({ commit }, payload) { patchAccompanyingCourse(id, { type: "accompanying_period", origin: { id: payload.id, type: payload.type } }) diff --git a/src/Bundle/ChillPersonBundle/config/services/accompanyingPeriod.yaml b/src/Bundle/ChillPersonBundle/config/services/accompanyingPeriod.yaml new file mode 100644 index 000000000..88e70c9a8 --- /dev/null +++ b/src/Bundle/ChillPersonBundle/config/services/accompanyingPeriod.yaml @@ -0,0 +1,15 @@ +services: + Chill\PersonBundle\AccompanyingPeriod\SocialIssueConsistency\AccompanyingPeriodSocialIssueConsistencyEntityListener: + tags: + - + name: 'doctrine.orm.entity_listener' + event: 'prePersist' + entity: 'Chill\PersonBundle\Entity\AccompanyingPeriod' + lazy: true + method: prePersistAccompanyingPeriod + - + name: 'doctrine.orm.entity_listener' + event: 'preUpdate' + entity: 'Chill\PersonBundle\Entity\AccompanyingPeriod' + lazy: true + method: preUpdateAccompanyingPeriod