diff --git a/src/Bundle/ChillMainBundle/Resources/public/vuejs/HomepageWidget/js/i18n.js b/src/Bundle/ChillMainBundle/Resources/public/vuejs/HomepageWidget/js/i18n.js
index b5ae78e34..edc781087 100644
--- a/src/Bundle/ChillMainBundle/Resources/public/vuejs/HomepageWidget/js/i18n.js
+++ b/src/Bundle/ChillMainBundle/Resources/public/vuejs/HomepageWidget/js/i18n.js
@@ -15,11 +15,11 @@ const appMessages = {
description_warning: "Liste des tâches auxquelles je suis assigné et dont la date d'échéance est dépassée.",
},
my_accompanying_courses: {
- tab: "Mes parcours",
- description: "Liste des parcours d'accompagnement que l'on vient de m'attribuer.",
+ tab: "Mes nouveaux parcours",
+ description: "Liste des parcours d'accompagnement que l'on vient de m'attribuer depuis moins de 15 jours.",
},
my_notifications: {
- tab: "Mes notifications",
+ tab: "Mes nouvelles notifications",
description: "Liste des notifications reçues et non lues.",
},
my_workflows: {
diff --git a/src/Bundle/ChillMainBundle/Resources/public/vuejs/HomepageWidget/js/store.js b/src/Bundle/ChillMainBundle/Resources/public/vuejs/HomepageWidget/js/store.js
index c33ec2123..44127da1c 100644
--- a/src/Bundle/ChillMainBundle/Resources/public/vuejs/HomepageWidget/js/store.js
+++ b/src/Bundle/ChillMainBundle/Resources/public/vuejs/HomepageWidget/js/store.js
@@ -13,7 +13,7 @@ const isEmpty = (obj) => {
const store = createStore({
strict: debug,
state: {
- works: {},
+ // works: {},
evaluations: {},
tasks: {
warning: {},
@@ -26,9 +26,9 @@ const store = createStore({
loading: false
},
getters: {
- isWorksLoaded(state) {
- return !isEmpty(state.works);
- },
+ // isWorksLoaded(state) {
+ // return !isEmpty(state.works);
+ // },
isEvaluationsLoaded(state) {
return !isEmpty(state.evaluations);
},
@@ -49,7 +49,7 @@ const store = createStore({
},
counter(state) {
return {
- works: state.works.count,
+ // works: state.works.count,
evaluations: state.evaluations.count,
tasksWarning: state.tasks.warning.count,
tasksAlert: state.tasks.alert.count,
@@ -60,10 +60,10 @@ const store = createStore({
}
},
mutations: {
- addWorks(state, works) {
- //console.log('addWorks', works);
- state.works = works;
- },
+ // addWorks(state, works) {
+ // //console.log('addWorks', works);
+ // state.works = works;
+ // },
addEvaluations(state, evaluations) {
//console.log('addEvaluations', evaluations);
state.evaluations = evaluations;
@@ -99,22 +99,22 @@ const store = createStore({
switch (tab) {
case 'MyCustoms':
break;
- case 'MyWorks':
- if (!getters.isWorksLoaded) {
- commit('setLoading', true);
- const url = `/api/1.0/person/accompanying-period/work/my-near-end${'?'+ param}`;
- makeFetch('GET', url)
- .then((response) => {
- commit('addWorks', response);
- commit('setLoading', false);
- })
- .catch((error) => {
- commit('catchError', error);
- throw error;
- })
- ;
- }
- break;
+ // case 'MyWorks':
+ // if (!getters.isWorksLoaded) {
+ // commit('setLoading', true);
+ // const url = `/api/1.0/person/accompanying-period/work/my-near-end${'?'+ param}`;
+ // makeFetch('GET', url)
+ // .then((response) => {
+ // commit('addWorks', response);
+ // commit('setLoading', false);
+ // })
+ // .catch((error) => {
+ // commit('catchError', error);
+ // throw error;
+ // })
+ // ;
+ // }
+ // break;
case 'MyEvaluations':
if (!getters.isEvaluationsLoaded) {
commit('setLoading', true);
diff --git a/src/Bundle/ChillMainBundle/Tests/Notification/EventListener/PersistNotificationOnTerminateEventSubscriberTest.php b/src/Bundle/ChillMainBundle/Tests/Notification/EventListener/PersistNotificationOnTerminateEventSubscriberTest.php
new file mode 100644
index 000000000..4c1b5c304
--- /dev/null
+++ b/src/Bundle/ChillMainBundle/Tests/Notification/EventListener/PersistNotificationOnTerminateEventSubscriberTest.php
@@ -0,0 +1,47 @@
+prophesize(EntityManagerInterface::class);
+ $em->persist(Argument::type(Notification::class))->shouldBeCalledTimes(1);
+ $em->flush()->shouldBeCalledTimes(1);
+ $event = $this->prophesize(TerminateEvent::class);
+ $event->isMasterRequest()->willReturn(true);
+
+ $eventSubscriber = new PersistNotificationOnTerminateEventSubscriber($em->reveal(), $persister);
+
+ $notification = new Notification();
+ $persister->persist($notification);
+
+ $eventSubscriber->onKernelTerminate($event->reveal());
+ }
+}
diff --git a/src/Bundle/ChillMainBundle/config/services/notification.yaml b/src/Bundle/ChillMainBundle/config/services/notification.yaml
index 544f5544c..bb0b6bb8c 100644
--- a/src/Bundle/ChillMainBundle/config/services/notification.yaml
+++ b/src/Bundle/ChillMainBundle/config/services/notification.yaml
@@ -3,6 +3,11 @@ services:
autowire: true
autoconfigure: true
+ Chill\MainBundle\Notification\:
+ resource: ../../Notification/
+ autoconfigure: true
+ autowire: true
+
Chill\MainBundle\Notification\Mailer:
arguments:
$logger: '@Psr\Log\LoggerInterface'
@@ -17,12 +22,6 @@ services:
arguments:
$handlers: !tagged_iterator chill_main.notification_handler
- Chill\MainBundle\Notification\NotificationPresence: ~
-
- Chill\MainBundle\Notification\Templating\NotificationTwigExtension: ~
-
- Chill\MainBundle\Notification\Templating\NotificationTwigExtensionRuntime: ~
-
Chill\MainBundle\Notification\Counter\NotificationByUserCounter:
autoconfigure: true
autowire: true
diff --git a/src/Bundle/ChillPersonBundle/AccompanyingPeriod/Events/PersonAddressMoveEventSubscriber.php b/src/Bundle/ChillPersonBundle/AccompanyingPeriod/Events/PersonAddressMoveEventSubscriber.php
index 3eff58dc7..04dfb25cc 100644
--- a/src/Bundle/ChillPersonBundle/AccompanyingPeriod/Events/PersonAddressMoveEventSubscriber.php
+++ b/src/Bundle/ChillPersonBundle/AccompanyingPeriod/Events/PersonAddressMoveEventSubscriber.php
@@ -13,10 +13,10 @@ namespace Chill\PersonBundle\AccompanyingPeriod\Events;
use Chill\MainBundle\Entity\Address;
use Chill\MainBundle\Entity\Notification;
+use Chill\MainBundle\Notification\NotificationPersisterInterface;
use Chill\PersonBundle\Entity\AccompanyingPeriod;
use Chill\PersonBundle\Event\Person\PersonAddressMoveEvent;
use DateTimeImmutable;
-use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\Security\Core\Security;
use Symfony\Component\Templating\EngineInterface;
@@ -26,7 +26,7 @@ class PersonAddressMoveEventSubscriber implements EventSubscriberInterface
{
private EngineInterface $engine;
- private EntityManagerInterface $entityManager;
+ private NotificationPersisterInterface $notificationPersister;
private Security $security;
@@ -34,12 +34,12 @@ class PersonAddressMoveEventSubscriber implements EventSubscriberInterface
public function __construct(
EngineInterface $engine,
- EntityManagerInterface $entityManager,
+ NotificationPersisterInterface $notificationPersister,
Security $security,
TranslatorInterface $translator
) {
$this->engine = $engine;
- $this->entityManager = $entityManager;
+ $this->notificationPersister = $notificationPersister;
$this->security = $security;
$this->translator = $translator;
}
@@ -87,7 +87,7 @@ class PersonAddressMoveEventSubscriber implements EventSubscriberInterface
'period' => $period,
]));
- $this->entityManager->persist($notification);
+ $this->notificationPersister->persist($notification);
}
}
}
diff --git a/src/Bundle/ChillPersonBundle/AccompanyingPeriod/Events/UserRefEventSubscriber.php b/src/Bundle/ChillPersonBundle/AccompanyingPeriod/Events/UserRefEventSubscriber.php
index ce52fe5e0..aacb283c3 100644
--- a/src/Bundle/ChillPersonBundle/AccompanyingPeriod/Events/UserRefEventSubscriber.php
+++ b/src/Bundle/ChillPersonBundle/AccompanyingPeriod/Events/UserRefEventSubscriber.php
@@ -13,8 +13,8 @@ namespace Chill\PersonBundle\AccompanyingPeriod\Events;
use Chill\MainBundle\Entity\Notification;
use Chill\MainBundle\Entity\User;
+use Chill\MainBundle\Notification\NotificationPersisterInterface;
use Chill\PersonBundle\Entity\AccompanyingPeriod;
-use Doctrine\ORM\EntityManagerInterface;
use Doctrine\Persistence\Event\LifecycleEventArgs;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\Security\Core\Security;
@@ -24,20 +24,20 @@ use Symfony\Contracts\Translation\TranslatorInterface;
class UserRefEventSubscriber implements EventSubscriberInterface
{
- private EntityManagerInterface $em;
-
private EngineInterface $engine;
+ private NotificationPersisterInterface $notificationPersister;
+
private Security $security;
private TranslatorInterface $translator;
- public function __construct(Security $security, TranslatorInterface $translator, EngineInterface $engine, EntityManagerInterface $em)
+ public function __construct(Security $security, TranslatorInterface $translator, EngineInterface $engine, NotificationPersisterInterface $notificationPersister)
{
$this->security = $security;
$this->translator = $translator;
$this->engine = $engine;
- $this->em = $em;
+ $this->notificationPersister = $notificationPersister;
}
public static function getSubscribedEvents()
@@ -58,16 +58,13 @@ class UserRefEventSubscriber implements EventSubscriberInterface
public function postUpdate(AccompanyingPeriod $period, LifecycleEventArgs $args): void
{
- if ($period->hasPreviousUser()
+ if ($period->isChangedUser()
&& $period->getUser() !== $this->security->getUser()
&& null !== $period->getUser()
&& $period->getStep() !== AccompanyingPeriod::STEP_DRAFT
) {
$this->generateNotificationToUser($period);
}
-
- // we are just out of a flush operation. Launch a new one
- $this->em->flush();
}
private function generateNotificationToUser(AccompanyingPeriod $period)
@@ -89,7 +86,7 @@ class UserRefEventSubscriber implements EventSubscriberInterface
))
->addAddressee($period->getUser());
- $this->em->persist($notification);
+ $this->notificationPersister->persist($notification);
}
private function onPeriodConfirmed(AccompanyingPeriod $period)
diff --git a/src/Bundle/ChillPersonBundle/Controller/HouseholdApiController.php b/src/Bundle/ChillPersonBundle/Controller/HouseholdApiController.php
index 470094507..f10c1229f 100644
--- a/src/Bundle/ChillPersonBundle/Controller/HouseholdApiController.php
+++ b/src/Bundle/ChillPersonBundle/Controller/HouseholdApiController.php
@@ -102,7 +102,6 @@ class HouseholdApiController extends ApiController
$event
->setPreviousAddress($household->getPreviousAddressOf($address))
->setNextAddress($address);
- dump($event);
$this->eventDispatcher->dispatch($event);
}
diff --git a/src/Bundle/ChillPersonBundle/Entity/AccompanyingPeriod.php b/src/Bundle/ChillPersonBundle/Entity/AccompanyingPeriod.php
index bd3211c5d..7615e59fe 100644
--- a/src/Bundle/ChillPersonBundle/Entity/AccompanyingPeriod.php
+++ b/src/Bundle/ChillPersonBundle/Entity/AccompanyingPeriod.php
@@ -361,6 +361,8 @@ class AccompanyingPeriod implements
*/
private Collection $userHistories;
+ private bool $userIsChanged = false;
+
/**
* Temporary field, which is filled when the user is changed.
*
@@ -978,6 +980,11 @@ class AccompanyingPeriod implements
return null !== $this->userPrevious;
}
+ public function isChangedUser(): bool
+ {
+ return $this->userIsChanged && $this->user !== $this->userPrevious;
+ }
+
/**
* Returns true if the closing date is after the opening date.
*/
@@ -1103,6 +1110,14 @@ class AccompanyingPeriod implements
$this->setStep(AccompanyingPeriod::STEP_CONFIRMED);
}
+ public function resetPreviousUser(): self
+ {
+ $this->userPrevious = null;
+ $this->userIsChanged = false;
+
+ return $this;
+ }
+
/**
* @Groups({"write"})
*/
@@ -1329,6 +1344,7 @@ class AccompanyingPeriod implements
{
if ($this->user !== $user) {
$this->userPrevious = $this->user;
+ $this->userIsChanged = true;
foreach ($this->userHistories as $history) {
if (null === $history->getEndDate()) {
diff --git a/src/Bundle/ChillPersonBundle/Entity/AccompanyingPeriod/AccompanyingPeriodWorkEvaluation.php b/src/Bundle/ChillPersonBundle/Entity/AccompanyingPeriod/AccompanyingPeriodWorkEvaluation.php
index ed3200370..615c33825 100644
--- a/src/Bundle/ChillPersonBundle/Entity/AccompanyingPeriod/AccompanyingPeriodWorkEvaluation.php
+++ b/src/Bundle/ChillPersonBundle/Entity/AccompanyingPeriod/AccompanyingPeriodWorkEvaluation.php
@@ -77,6 +77,7 @@ class AccompanyingPeriodWorkEvaluation implements TrackCreationInterface, TrackU
* cascade={"remove", "persist"},
* orphanRemoval=true
* )
+ * @ORM\OrderBy({"createdAt": "DESC", "id": "DESC"})
* @Serializer\Groups({"read"})
*/
private Collection $documents;
diff --git a/src/Bundle/ChillPersonBundle/Entity/AccompanyingPeriod/Comment.php b/src/Bundle/ChillPersonBundle/Entity/AccompanyingPeriod/Comment.php
index 105633e43..1fe398290 100644
--- a/src/Bundle/ChillPersonBundle/Entity/AccompanyingPeriod/Comment.php
+++ b/src/Bundle/ChillPersonBundle/Entity/AccompanyingPeriod/Comment.php
@@ -19,6 +19,7 @@ use DateTimeInterface;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Serializer\Annotation\DiscriminatorMap;
use Symfony\Component\Serializer\Annotation\Groups;
+use Symfony\Component\Validator\Constraints as Assert;
/**
* @ORM\Entity
@@ -40,6 +41,8 @@ class Comment implements TrackCreationInterface, TrackUpdateInterface
/**
* @ORM\Column(type="text")
* @Groups({"read", "write"})
+ * @Assert\NotBlank
+ * @Assert\NotNull
*/
private $content;
diff --git a/src/Bundle/ChillPersonBundle/Resources/public/vuejs/AccompanyingCourse/components/StartDate.vue b/src/Bundle/ChillPersonBundle/Resources/public/vuejs/AccompanyingCourse/components/StartDate.vue
index 349581452..b6a55ef39 100644
--- a/src/Bundle/ChillPersonBundle/Resources/public/vuejs/AccompanyingCourse/components/StartDate.vue
+++ b/src/Bundle/ChillPersonBundle/Resources/public/vuejs/AccompanyingCourse/components/StartDate.vue
@@ -5,9 +5,8 @@
-
{{ $t('startdate.date') }}
-
@@ -17,30 +16,54 @@
\ No newline at end of file
+
+
+
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 f1e2de958..44238b0c7 100644
--- a/src/Bundle/ChillPersonBundle/Resources/public/vuejs/AccompanyingCourse/js/i18n.js
+++ b/src/Bundle/ChillPersonBundle/Resources/public/vuejs/AccompanyingCourse/js/i18n.js
@@ -59,8 +59,8 @@ const appMessages = {
ok: "Oui, l'usager quitte le parcours",
show_household_number: "Voir le ménage (n° {id})",
show_household: "Voir le ménage",
- person_without_household_warning: "Certaines usagers n'appartiennent actuellement à aucun ménage. Renseignez leur appartenance dès que possible.",
- update_household: "Renseigner l'appartenance",
+ person_without_household_warning: "Certaines usagers n'appartiennent actuellement à aucun ménage. Veuillez les associer à un ménage dès que possible.",
+ update_household: "Associer à un ménage",
participation_not_valid: "Sélectionnez ou créez au minimum 1 usager",
},
requestor: {
@@ -153,7 +153,7 @@ const appMessages = {
},
startdate: {
change: "Date d'ouverture",
- date: "Date d'ouverture",
+ // update: "La nouvelle date d'ouverture a été enregistrée"
},
// catch errors
'Error while updating AccompanyingPeriod Course.': "Erreur du serveur lors de la mise à jour du parcours d'accompagnement.",
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 06a3606ab..57415565b 100644
--- a/src/Bundle/ChillPersonBundle/Resources/public/vuejs/AccompanyingCourse/store/index.js
+++ b/src/Bundle/ChillPersonBundle/Resources/public/vuejs/AccompanyingCourse/store/index.js
@@ -322,7 +322,6 @@ let initPromise = (root) => Promise.all([getScopesPromise(root), accompanyingCou
}
},
updateStartDate(state, date) {
- console.log('new state date', date)
state.accompanyingCourse.openingDate = date;
}
},
@@ -814,11 +813,9 @@ let initPromise = (root) => Promise.all([getScopesPromise(root), accompanyingCou
})
},
updateStartDate({commit}, payload) {
- console.log('payload', payload)
- const date = ISOToDate(payload);
const url = `/api/1.0/person/accompanying-course/${id}.json`;
- const body = { type: "accompanying_period", openingDate: { datetime: datetimeToISO(date) }};
- console.log('body', body)
+ const date = payload === null || payload === '' ? null : { datetime: datetimeToISO(ISOToDate(payload)) }
+ const body = { type: "accompanying_period", openingDate: date};
return makeFetch('PATCH', url, body)
.then((response) => {
commit('updateStartDate', response.openingDate);
diff --git a/src/Bundle/ChillPersonBundle/Resources/public/vuejs/AccompanyingCourseWorkCreate/App.vue b/src/Bundle/ChillPersonBundle/Resources/public/vuejs/AccompanyingCourseWorkCreate/App.vue
index 503a00c59..758cd7e5e 100644
--- a/src/Bundle/ChillPersonBundle/Resources/public/vuejs/AccompanyingCourseWorkCreate/App.vue
+++ b/src/Bundle/ChillPersonBundle/Resources/public/vuejs/AccompanyingCourseWorkCreate/App.vue
@@ -227,19 +227,18 @@ export default {
},
startDate: {
get() {
- let d = this.$store.state.startDate;
- return dateToISO(d);
+ return this.$store.state.startDate;
},
set(value) {
- this.$store.commit('setStartDate', ISOToDate(value));
+ this.$store.commit('setStartDate', value);
}
},
endDate: {
get() {
- return dateToISO(this.$store.state.endDate);
+ return this.$store.state.endDate;
},
set(value) {
- this.$store.commit('setEndDate', ISOToDate(value));
+ this.$store.commit('setEndDate', value);
}
},
setSocialIssue: {
diff --git a/src/Bundle/ChillPersonBundle/Resources/public/vuejs/AccompanyingCourseWorkCreate/store.js b/src/Bundle/ChillPersonBundle/Resources/public/vuejs/AccompanyingCourseWorkCreate/store.js
index 408115257..3c2e034d7 100644
--- a/src/Bundle/ChillPersonBundle/Resources/public/vuejs/AccompanyingCourseWorkCreate/store.js
+++ b/src/Bundle/ChillPersonBundle/Resources/public/vuejs/AccompanyingCourseWorkCreate/store.js
@@ -1,6 +1,6 @@
import { createStore } from 'vuex';
-import { datetimeToISO } from 'ChillMainAssets/chill/js/date.js';
+import { datetimeToISO, dateToISO, ISOToDate, ISOToDatetime } from 'ChillMainAssets/chill/js/date.js';
import { findSocialActionsBySocialIssue } from 'ChillPersonAssets/vuejs/_api/SocialWorkSocialAction.js';
// import { create } from 'ChillPersonAssets/vuejs/_api/AccompanyingCourseWork.js';
import { makeFetch } from 'ChillMainAssets/lib/api/apiMethods';
@@ -20,7 +20,7 @@ const store = createStore({
.map(p => p.person),
personsReachables: window.accompanyingCourse.participations.filter(p => p.endDate == null)
.map(p => p.person),
- startDate: new Date(),
+ startDate: dateToISO(new Date()),
endDate: null,
isLoadingSocialActions: false,
isPostingWork: false,
@@ -47,7 +47,7 @@ const store = createStore({
id: state.socialActionPicked.id
},
startDate: {
- datetime: datetimeToISO(state.startDate)
+ datetime: datetimeToISO(ISOToDate(state.startDate))
},
persons: []
};
@@ -61,7 +61,7 @@ const store = createStore({
if (null !== state.endDate) {
payload.endDate = {
- datetime: datetimeToISO(state.endDate)
+ datetime: datetimeToISO(ISOToDate(state.endDate))
};
}
@@ -111,6 +111,7 @@ const store = createStore({
state.startDate = date;
},
setEndDate(state, date) {
+ console.log(date)
state.endDate = date;
},
setPersonsPickedIds(state, ids) {
diff --git a/src/Bundle/ChillPersonBundle/Resources/public/vuejs/AccompanyingCourseWorkEdit/App.vue b/src/Bundle/ChillPersonBundle/Resources/public/vuejs/AccompanyingCourseWorkEdit/App.vue
index bcfa53e45..bab64018a 100644
--- a/src/Bundle/ChillPersonBundle/Resources/public/vuejs/AccompanyingCourseWorkEdit/App.vue
+++ b/src/Bundle/ChillPersonBundle/Resources/public/vuejs/AccompanyingCourseWorkEdit/App.vue
@@ -439,18 +439,18 @@ export default {
]),
startDate: {
get() {
- return dateToISO(this.$store.state.startDate);
+ return this.$store.state.startDate;
},
set(v) {
- this.$store.commit('setStartDate', ISOToDate(v));
+ this.$store.commit('setStartDate', v);
}
},
endDate: {
get() {
- return dateToISO(this.$store.state.endDate);
+ return this.$store.state.endDate;
},
set(v) {
- this.$store.commit('setEndDate', ISOToDate(v));
+ this.$store.commit('setEndDate', v);
}
},
note: {
@@ -521,12 +521,12 @@ export default {
this.$store.commit('removeReferrer', u);
},
goToGenerateWorkflow({link}) {
- console.log('save before leave to generate workflow')
- const callback = (data) => {
- window.location.assign(link);
- };
+ // console.log('save before leave to generate workflow')
+ const callback = (data) => {
+ window.location.assign(link);
+ };
- return this.$store.dispatch('submit', callback)
+ return this.$store.dispatch('submit', callback)
.catch(e => { console.log(e); throw e; });
},
submit() {
diff --git a/src/Bundle/ChillPersonBundle/Resources/public/vuejs/AccompanyingCourseWorkEdit/components/FormEvaluation.vue b/src/Bundle/ChillPersonBundle/Resources/public/vuejs/AccompanyingCourseWorkEdit/components/FormEvaluation.vue
index 53e2b72f3..ca0d16eec 100644
--- a/src/Bundle/ChillPersonBundle/Resources/public/vuejs/AccompanyingCourseWorkEdit/components/FormEvaluation.vue
+++ b/src/Bundle/ChillPersonBundle/Resources/public/vuejs/AccompanyingCourseWorkEdit/components/FormEvaluation.vue
@@ -298,38 +298,39 @@ export default {
}
},
computed: {
- ...mapState([
- 'isPosting'
- ]),
+ ...mapState([
+ 'isPosting'
+ ]),
getTemplatesAvailables() {
- return this.$store.getters.getTemplatesAvailablesForEvaluation(this.evaluation.evaluation);
+ return this.$store.getters.getTemplatesAvailablesForEvaluation(this.evaluation.evaluation);
},
canGenerate() {
- return !this.$store.state.isPosting && this.template !== null;
+ return !this.$store.state.isPosting && this.template !== null;
},
startDate: {
- get() {
- return dateToISO(this.evaluation.startDate);
- },
- set(v) {
- this.$store.commit('setEvaluationStartDate', { key: this.evaluation.key, date: ISOToDate(v) });
- }
+ get() {
+ console.log('evaluation', this.evaluation);
+ return this.evaluation.startDate;
+ },
+ set(v) {
+ this.$store.commit('setEvaluationStartDate', { key: this.evaluation.key, date: v });
+ }
},
endDate: {
- get() {
- return dateToISO(this.evaluation.endDate);
- },
- set(v) {
- this.$store.commit('setEvaluationEndDate', { key: this.evaluation.key, date: ISOToDate(v) });
- }
+ get() {
+ return this.evaluation.endDate;
+ },
+ set(v) {
+ this.$store.commit('setEvaluationEndDate', { key: this.evaluation.key, date: v });
+ }
},
maxDate: {
- get() {
- return dateToISO(this.evaluation.maxDate);
- },
- set(v) {
- this.$store.commit('setEvaluationMaxDate', { key: this.evaluation.key, date: ISOToDate(v) });
- }
+ get() {
+ return this.evaluation.maxDate;
+ },
+ set(v) {
+ this.$store.commit('setEvaluationMaxDate', { key: this.evaluation.key, date: v });
+ }
},
warningInterval: {
get() { return this.evaluation.warningInterval; },
@@ -344,7 +345,7 @@ export default {
ISOToDatetime,
canEditDocument(document) {
return 'storedObject' in document ?
- this.mime.includes(document.storedObject.type) && document.storedObject.keyInfos.length === 0 : false;
+ this.mime.includes(document.storedObject.type) && document.storedObject.keyInfos.length === 0 : false;
},
listAllStatus() {
console.log('load all status');
@@ -360,16 +361,16 @@ export default {
},
buildEditLink(storedObject) {
return `/wopi/edit/${storedObject.uuid}?returnPath=` + encodeURIComponent(
- window.location.pathname + window.location.search + window.location.hash);
+ window.location.pathname + window.location.search + window.location.hash);
},
submitBeforeGenerate({template}) {
- const callback = (data) => {
- let evaluationId = data.accompanyingPeriodWorkEvaluations.find(e => e.key === this.evaluation.key).id;
+ const callback = (data) => {
+ let evaluationId = data.accompanyingPeriodWorkEvaluations.find(e => e.key === this.evaluation.key).id;
- window.location.assign(buildLink(template, evaluationId, 'Chill\\PersonBundle\\Entity\\AccompanyingPeriod\\AccompanyingPeriodWorkEvaluation'));
- };
+ window.location.assign(buildLink(template, evaluationId, 'Chill\\PersonBundle\\Entity\\AccompanyingPeriod\\AccompanyingPeriodWorkEvaluation'));
+ };
- return this.$store.dispatch('submit', callback).catch(e => { console.log(e); throw e; });
+ return this.$store.dispatch('submit', callback).catch(e => { console.log(e); throw e; });
},
onInputDocumentTitle(event) {
const id = Number(event.target.id);
@@ -395,20 +396,20 @@ export default {
},
removeDocument(document) {
if (window.confirm("Êtes-vous sûr·e de vouloir supprimer le document qui a pour titre \"" + document.title +"\" ?")) {
- this.$store.commit('removeDocument', {key: this.evaluation.key, document: document});
+ this.$store.commit('removeDocument', {key: this.evaluation.key, document: document});
}
},
goToGenerateWorkflowEvaluationDocument({event, link, workflowName, payload}) {
- const callback = (data) => {
- let evaluation = data.accompanyingPeriodWorkEvaluations.find(e => e.key === this.evaluation.key);
- let updatedDocument = evaluation.documents.find(d => d.key === payload.doc.key);
- window.location.assign(buildLinkCreate(workflowName,
- 'Chill\\PersonBundle\\Entity\\AccompanyingPeriod\\AccompanyingPeriodWorkEvaluationDocument', updatedDocument.id));
- };
+ const callback = (data) => {
+ let evaluation = data.accompanyingPeriodWorkEvaluations.find(e => e.key === this.evaluation.key);
+ let updatedDocument = evaluation.documents.find(d => d.key === payload.doc.key);
+ window.location.assign(buildLinkCreate(workflowName,
+ 'Chill\\PersonBundle\\Entity\\AccompanyingPeriod\\AccompanyingPeriodWorkEvaluationDocument', updatedDocument.id));
+ };
- return this.$store.dispatch('submit', callback)
- .catch(e => { console.log(e); throw e; });
- },
+ return this.$store.dispatch('submit', callback)
+ .catch(e => { console.log(e); throw e; });
+ },
},
}
diff --git a/src/Bundle/ChillPersonBundle/Resources/public/vuejs/AccompanyingCourseWorkEdit/store.js b/src/Bundle/ChillPersonBundle/Resources/public/vuejs/AccompanyingCourseWorkEdit/store.js
index 4ce0b8ebe..502704716 100644
--- a/src/Bundle/ChillPersonBundle/Resources/public/vuejs/AccompanyingCourseWorkEdit/store.js
+++ b/src/Bundle/ChillPersonBundle/Resources/public/vuejs/AccompanyingCourseWorkEdit/store.js
@@ -1,5 +1,5 @@
import { createStore } from 'vuex';
-import { datetimeToISO, ISOToDatetime, intervalDaysToISO, intervalISOToDays } from 'ChillMainAssets/chill/js/date.js';
+import { dateToISO, ISOToDate, datetimeToISO, ISOToDatetime, intervalDaysToISO, intervalISOToDays } from 'ChillMainAssets/chill/js/date.js';
import { findSocialActionsBySocialIssue } from 'ChillPersonAssets/vuejs/_api/SocialWorkSocialAction.js';
import { create } from 'ChillPersonAssets/vuejs/_api/AccompanyingCourseWork.js';
import { fetchResults, makeFetch } from 'ChillMainAssets/lib/api/apiMethods.js';
@@ -13,9 +13,9 @@ const store = createStore({
state: {
work: window.accompanyingCourseWork,
startDate: window.accompanyingCourseWork.startDate !== null ?
- ISOToDatetime(window.accompanyingCourseWork.startDate.datetime) : null,
+ dateToISO(new Date(window.accompanyingCourseWork.startDate.datetime)) : null,
endDate: window.accompanyingCourseWork.endDate !== null ?
- ISOToDatetime(window.accompanyingCourseWork.endDate.datetime) : null,
+ dateToISO(new Date(window.accompanyingCourseWork.endDate.datetime)) : null,
note: window.accompanyingCourseWork.note,
goalsPicked: window.accompanyingCourseWork.goals,
goalsForAction: [],
@@ -69,14 +69,15 @@ const store = createStore({
return [];
},
buildPayload(state) {
+ console.log('end date', state.endDate);
return {
type: 'accompanying_period_work',
id: state.work.id,
- startDate: state.startDate === null ? null : {
- datetime: datetimeToISO(state.startDate)
+ startDate: state.startDate === null || state.startDate === '' ? null : {
+ datetime: datetimeToISO(ISOToDate(state.startDate))
},
- endDate: state.endDate === null ? null : {
- datetime: datetimeToISO(state.endDate)
+ endDate: state.endDate === null || state.endDate === '' ? null : {
+ datetime: datetimeToISO(ISOToDate(state.endDate))
},
note: state.note,
persons: state.personsPicked.map(p => ({id: p.id, type: p.type})),
@@ -110,9 +111,9 @@ const store = createStore({
id: e.evaluation.id,
type: e.evaluation.type
},
- startDate: e.startDate !== null ? { datetime: datetimeToISO(e.startDate) } : null,
- endDate: e.endDate !== null ? { datetime: datetimeToISO(e.endDate) } : null,
- maxDate: e.maxDate !== null ? { datetime: datetimeToISO(e.maxDate) } : null,
+ startDate: e.startDate === null || e.startDate === '' ? null : { datetime: datetimeToISO(ISOToDate(e.startDate)) },
+ endDate: e.endDate === null || e.endDate === '' ? null : { datetime: datetimeToISO(ISOToDate(e.endDate)) },
+ maxDate: e.maxDate === null || e.maxDate === '' ? null : { datetime: datetimeToISO(ISOToDate(e.maxDate)) },
warningInterval: intervalDaysToISO(e.warningInterval),
comment: e.comment,
documents: e.documents
@@ -132,9 +133,9 @@ const store = createStore({
var k = Object.assign(e, {
key: index,
editEvaluation: false,
- startDate: e.startDate !== null ? ISOToDatetime(e.startDate.datetime) : null,
- endDate: e.endDate !== null ? ISOToDatetime(e.endDate.datetime) : null,
- maxDate: e.maxDate !== null ? ISOToDatetime(e.maxDate.datetime) : null,
+ startDate: e.startDate !== null ? dateToISO(new Date(e.startDate.datetime)) : null,
+ endDate: e.endDate !== null ? dateToISO(new Date(e.endDate.datetime)) : null,
+ maxDate: e.maxDate !== null ? dateToISO(new Date(e.maxDate.datetime)) : null,
warningInterval: e.warningInterval !== null ? intervalISOToDays(e.warningInterval) : null,
documents: e.documents.map((d, docIndex) => {
return Object.assign(d, {
@@ -264,6 +265,7 @@ const store = createStore({
.startDate = date;
},
setEvaluationEndDate(state, {key, date}) {
+ console.log('commit date', date)
state.evaluationsPicked.find(e => e.key === key)
.endDate = date;
},
diff --git a/src/Bundle/ChillPersonBundle/Resources/public/vuejs/HouseholdMembersEditor/components/Dates.vue b/src/Bundle/ChillPersonBundle/Resources/public/vuejs/HouseholdMembersEditor/components/Dates.vue
index 040d316bb..03feb0329 100644
--- a/src/Bundle/ChillPersonBundle/Resources/public/vuejs/HouseholdMembersEditor/components/Dates.vue
+++ b/src/Bundle/ChillPersonBundle/Resources/public/vuejs/HouseholdMembersEditor/components/Dates.vue
@@ -66,18 +66,19 @@ export default {
},
startDate: {
get() {
- return [
- this.$store.state.startDate.getFullYear(),
- (this.$store.state.startDate.getMonth() + 1).toString().padStart(2, '0'),
- this.$store.state.startDate.getDate().toString().padStart(2, '0')
- ].join('-');
+ return this.$store.state.startDate;
+ // return [
+ // this.$store.state.startDate.getFullYear(),
+ // (this.$store.state.startDate.getMonth() + 1).toString().padStart(2, '0'),
+ // this.$store.state.startDate.getDate().toString().padStart(2, '0')
+ // ].join('-');
},
set(value) {
- let
- [year, month, day] = value.split('-'),
- dValue = new Date(year, month-1, day);
+ // let
+ // [year, month, day] = value.split('-'),
+ // dValue = new Date(year, month-1, day);
- this.$store.dispatch('setStartDate', dValue);
+ this.$store.dispatch('setStartDate', value);
}
}
}
diff --git a/src/Bundle/ChillPersonBundle/Resources/public/vuejs/HouseholdMembersEditor/store/index.js b/src/Bundle/ChillPersonBundle/Resources/public/vuejs/HouseholdMembersEditor/store/index.js
index f09b19787..f3801576d 100644
--- a/src/Bundle/ChillPersonBundle/Resources/public/vuejs/HouseholdMembersEditor/store/index.js
+++ b/src/Bundle/ChillPersonBundle/Resources/public/vuejs/HouseholdMembersEditor/store/index.js
@@ -2,7 +2,7 @@ import { createStore } from 'vuex';
import { householdMove, fetchHouseholdSuggestionByAccompanyingPeriod, fetchAddressSuggestionByPerson} from './../api.js';
import { fetchResults } from 'ChillMainAssets/lib/api/apiMethods.js'
import { fetchHouseholdByAddressReference } from 'ChillPersonAssets/lib/household.js';
-import { datetimeToISO } from 'ChillMainAssets/chill/js/date.js';
+import { datetimeToISO, dateToISO, ISOToDate } from 'ChillMainAssets/chill/js/date.js';
const debug = process.env.NODE_ENV !== 'production';
@@ -30,7 +30,7 @@ const store = createStore({
}
return 0;
}),
- startDate: new Date(),
+ startDate: dateToISO(new Date()),
/**
* Indicates if the destination is:
*
@@ -278,7 +278,7 @@ const store = createStore({
type: conc.person.type
},
start_date: {
- datetime: datetimeToISO(state.startDate)
+ datetime: state.startDate === null || state.startDate === '' ? null : datetimeToISO(ISOToDate(state.startDate))
}
};
@@ -302,7 +302,7 @@ const store = createStore({
},
number_of_children: state.numberOfChildren,
start_date: {
- datetime: datetimeToISO(state.startDate),
+ datetime: datetimeToISO(ISOToDate(state.startDate)),
},
};
}
diff --git a/src/Bundle/ChillPersonBundle/Resources/views/AccompanyingCourse/Comment/index.html.twig b/src/Bundle/ChillPersonBundle/Resources/views/AccompanyingCourse/Comment/index.html.twig
index a8a5d78b8..d5ece68a9 100644
--- a/src/Bundle/ChillPersonBundle/Resources/views/AccompanyingCourse/Comment/index.html.twig
+++ b/src/Bundle/ChillPersonBundle/Resources/views/AccompanyingCourse/Comment/index.html.twig
@@ -40,6 +40,7 @@
{% endif %}
{{ form_start(form) }}
{{ form_errors(form) }}
+ {{ form_errors(form.content) }}
{{ form_widget(form.content) }}
diff --git a/src/Bundle/ChillPersonBundle/Resources/views/AccompanyingPeriod/user_periods_list.html.twig b/src/Bundle/ChillPersonBundle/Resources/views/AccompanyingPeriod/user_periods_list.html.twig
index 7395fceda..031e0728c 100644
--- a/src/Bundle/ChillPersonBundle/Resources/views/AccompanyingPeriod/user_periods_list.html.twig
+++ b/src/Bundle/ChillPersonBundle/Resources/views/AccompanyingPeriod/user_periods_list.html.twig
@@ -17,6 +17,8 @@
{{ 'My accompanying periods'|trans }}
+
{{ 'Number of periods'|trans }}: {{ pagination.totalItems }}
+
{% for period in accompanyingPeriods %}
{% include '@ChillPerson/AccompanyingPeriod/_list_item.html.twig' with {'period': period, 'recordAction': _self.recordAction(period)} %}
diff --git a/src/Bundle/ChillPersonBundle/Tests/AccompanyingPeriod/Events/PersonMoveEventSubscriberTest.php b/src/Bundle/ChillPersonBundle/Tests/AccompanyingPeriod/Events/PersonMoveEventSubscriberTest.php
index 321d69aac..892bd29f5 100644
--- a/src/Bundle/ChillPersonBundle/Tests/AccompanyingPeriod/Events/PersonMoveEventSubscriberTest.php
+++ b/src/Bundle/ChillPersonBundle/Tests/AccompanyingPeriod/Events/PersonMoveEventSubscriberTest.php
@@ -14,6 +14,8 @@ namespace AccompanyingPeriod\Events;
use Chill\MainBundle\Entity\Address;
use Chill\MainBundle\Entity\Notification;
use Chill\MainBundle\Entity\User;
+use Chill\MainBundle\Notification\NotificationPersister;
+use Chill\MainBundle\Notification\NotificationPersisterInterface;
use Chill\PersonBundle\AccompanyingPeriod\Events\PersonAddressMoveEventSubscriber;
use Chill\PersonBundle\Entity\AccompanyingPeriod;
use Chill\PersonBundle\Entity\Household\Household;
@@ -22,7 +24,6 @@ use Chill\PersonBundle\Entity\Person;
use Chill\PersonBundle\Event\Person\PersonAddressMoveEvent;
use DateTime;
use DateTimeImmutable;
-use Doctrine\ORM\EntityManagerInterface;
use Prophecy\Argument;
use Prophecy\PhpUnit\ProphecyTrait;
use ReflectionClass;
@@ -73,9 +74,9 @@ final class PersonMoveEventSubscriberTest extends KernelTestCase
->setPreviousMembership($previousMembership)
->setNextMembership($nextMembership);
- $em = $this->prophesize(EntityManagerInterface::class);
- $em->persist(Argument::type(Notification::class))->shouldNotBeCalled();
- $eventSubscriber = $this->buildSubscriber(null, $em->reveal(), null, null);
+ $notificationPersister = $this->prophesize(NotificationPersisterInterface::class);
+ $notificationPersister->persist(Argument::type(Notification::class))->shouldNotBeCalled();
+ $eventSubscriber = $this->buildSubscriber(null, $notificationPersister->reveal(), null, null);
$eventSubscriber->resetPeriodLocation($event);
}
@@ -115,9 +116,9 @@ final class PersonMoveEventSubscriberTest extends KernelTestCase
->setPreviousMembership($previousMembership)
->setNextMembership($nextMembership);
- $em = $this->prophesize(EntityManagerInterface::class);
- $em->persist(Argument::type(Notification::class))->shouldBeCalledTimes(1);
- $eventSubscriber = $this->buildSubscriber(null, $em->reveal(), null, null);
+ $notificationPersister = $this->prophesize(NotificationPersisterInterface::class);
+ $notificationPersister->persist(Argument::type(Notification::class))->shouldBeCalledTimes(1);
+ $eventSubscriber = $this->buildSubscriber(null, $notificationPersister->reveal(), null, null);
$eventSubscriber->resetPeriodLocation($event);
@@ -160,9 +161,9 @@ final class PersonMoveEventSubscriberTest extends KernelTestCase
->setPreviousMembership($previousMembership)
->setNextMembership($nextMembership);
- $em = $this->prophesize(EntityManagerInterface::class);
- $em->persist(Argument::type(Notification::class))->shouldBeCalled(1);
- $eventSubscriber = $this->buildSubscriber(null, $em->reveal(), null, null);
+ $notificationPersister = $this->prophesize(NotificationPersisterInterface::class);
+ $notificationPersister->persist(Argument::type(Notification::class))->shouldBeCalled(1);
+ $eventSubscriber = $this->buildSubscriber(null, $notificationPersister->reveal(), null, null);
$eventSubscriber->resetPeriodLocation($event);
@@ -195,9 +196,9 @@ final class PersonMoveEventSubscriberTest extends KernelTestCase
$event
->setPreviousMembership($previousMembership);
- $em = $this->prophesize(EntityManagerInterface::class);
- $em->persist(Argument::type(Notification::class))->shouldBeCalledTimes(1);
- $eventSubscriber = $this->buildSubscriber(null, $em->reveal(), null, null);
+ $notificationPersister = $this->prophesize(NotificationPersisterInterface::class);
+ $notificationPersister->persist(Argument::type(Notification::class))->shouldBeCalledTimes(1);
+ $eventSubscriber = $this->buildSubscriber(null, $notificationPersister->reveal(), null, null);
$eventSubscriber->resetPeriodLocation($event);
@@ -235,9 +236,9 @@ final class PersonMoveEventSubscriberTest extends KernelTestCase
->setPreviousAddress($household->getPreviousAddressOf($newAddress))
->setNextAddress($newAddress);
- $em = $this->prophesize(EntityManagerInterface::class);
- $em->persist(Argument::type(Notification::class))->shouldBeCalledTimes(1);
- $eventSubscriber = $this->buildSubscriber(null, $em->reveal(), null, null);
+ $notificationPersister = $this->prophesize(NotificationPersisterInterface::class);
+ $notificationPersister->persist(Argument::type(Notification::class))->shouldBeCalledTimes(1);
+ $eventSubscriber = $this->buildSubscriber(null, $notificationPersister->reveal(), null, null);
$eventSubscriber->resetPeriodLocation($event);
@@ -247,7 +248,7 @@ final class PersonMoveEventSubscriberTest extends KernelTestCase
private function buildSubscriber(
?EngineInterface $engine = null,
- ?EntityManagerInterface $entityManager = null,
+ ?NotificationPersisterInterface $notificationPersister = null,
?Security $security = null,
?TranslatorInterface $translator = null
): PersonAddressMoveEventSubscriber {
@@ -267,14 +268,13 @@ final class PersonMoveEventSubscriberTest extends KernelTestCase
$engine = $double->reveal();
}
- if (null === $entityManager) {
- $double = $this->prophesize(EntityManagerInterface::class);
- $entityManager = $double->reveal();
+ if (null === $notificationPersister) {
+ $notificationPersister = new NotificationPersister();
}
return new PersonAddressMoveEventSubscriber(
$engine,
- $entityManager,
+ $notificationPersister,
$security,
$translator
);
diff --git a/src/Bundle/ChillPersonBundle/Tests/Entity/AccompanyingPeriodTest.php b/src/Bundle/ChillPersonBundle/Tests/Entity/AccompanyingPeriodTest.php
index 0b66d8648..542144bc2 100644
--- a/src/Bundle/ChillPersonBundle/Tests/Entity/AccompanyingPeriodTest.php
+++ b/src/Bundle/ChillPersonBundle/Tests/Entity/AccompanyingPeriodTest.php
@@ -13,6 +13,7 @@ namespace Chill\PersonBundle\Tests\Entity;
use ArrayIterator;
use Chill\MainBundle\Entity\Address;
+use Chill\MainBundle\Entity\User;
use Chill\PersonBundle\Entity\AccompanyingPeriod;
use Chill\PersonBundle\Entity\AccompanyingPeriod\Comment;
use Chill\PersonBundle\Entity\AccompanyingPeriodParticipation;
@@ -62,6 +63,29 @@ final class AccompanyingPeriodTest extends \PHPUnit\Framework\TestCase
$this->assertFalse($period->isClosingAfterOpening());
}
+ public function testHasChangedUser()
+ {
+ $period = new AccompanyingPeriod();
+
+ $this->assertFalse($period->isChangedUser());
+ $this->assertFalse($period->hasPreviousUser());
+
+ $period->setUser($user1 = new User());
+
+ $this->assertTrue($period->isChangedUser());
+ $this->assertFalse($period->hasPreviousUser());
+
+ $period->resetPreviousUser();
+ $this->assertFalse($period->isChangedUser());
+ $this->assertFalse($period->hasPreviousUser());
+
+ $period->setUser($user2 = new User());
+
+ $this->assertTrue($period->isChangedUser());
+ $this->assertTrue($period->hasPreviousUser());
+ $this->assertSame($user1, $period->getPreviousUser());
+ }
+
public function testHistoryLocation()
{
$period = new AccompanyingPeriod();
diff --git a/src/Bundle/ChillPersonBundle/translations/messages.fr.yml b/src/Bundle/ChillPersonBundle/translations/messages.fr.yml
index 535985d23..8679f6e95 100644
--- a/src/Bundle/ChillPersonBundle/translations/messages.fr.yml
+++ b/src/Bundle/ChillPersonBundle/translations/messages.fr.yml
@@ -581,6 +581,7 @@ Linked evaluations: Évaluations associées
# Accompanying period per user
My accompanying periods: Mes parcours
My accompanying periods in draft: Mes parcours brouillons
+Number of periods: Nombre de parcours
workflow:
Doc for evaluation (n°%eval%): Document de l'évaluation n°%eval%