diff --git a/CHANGELOG.md b/CHANGELOG.md index c8e0d0f5f..fd60f7cfb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,8 +13,8 @@ and this project adheres to * [person] add validator for accompanying period with a test on social issues (https://gitlab.com/champs-libres/departement-de-la-vendee/accent-suivi-developpement/-/issues/76) * [activity] fix visibility for location +* [action] add an unrelated issue within action creation. * [origin] fix origin: use correctly the translatable strings - * /!\ everyone must update the origin table. As there is only one row, execute `update chill_person_accompanying_period_origin set label = jsonb_build_object('fr', 'appel téléphonique');` ## Test releases diff --git a/src/Bundle/ChillActivityBundle/Resources/public/vuejs/Activity/store.js b/src/Bundle/ChillActivityBundle/Resources/public/vuejs/Activity/store.js index 5b6297553..1ca9f9cc2 100644 --- a/src/Bundle/ChillActivityBundle/Resources/public/vuejs/Activity/store.js +++ b/src/Bundle/ChillActivityBundle/Resources/public/vuejs/Activity/store.js @@ -6,17 +6,17 @@ const debug = process.env.NODE_ENV !== 'production'; //console.log('window.activity', window.activity); const addIdToValue = (string, id) => { - let array = string ? string.split(',') : []; - array.push(id.toString()); - let str = array.join(); - return str; + let array = string ? string.split(',') : []; + array.push(id.toString()); + let str = array.join(); + return str; }; const removeIdFromValue = (string, id) => { - let array = string.split(','); - array = array.filter(el => el !== id.toString()); - let str = array.join(); - return str; + let array = string.split(','); + array = array.filter(el => el !== id.toString()); + let str = array.join(); + return str; }; const store = createStore({ @@ -50,9 +50,9 @@ const store = createStore({ return state.activity.activityType.personsVisible === 0 ? [] : state.activity.accompanyingPeriod.participations - .filter((p) => p.endDate === null) - .map((p) => p.person) - .filter((p) => !existingPersonIds.includes(p.id)); + .filter((p) => p.endDate === null) + .map((p) => p.person) + .filter((p) => !existingPersonIds.includes(p.id)); }, suggestedRequestor(state) { if (state.activity.accompanyingPeriod.requestor === null) { @@ -78,8 +78,8 @@ const store = createStore({ return state.activity.activityType.usersVisible === 0 ? [] : [state.activity.accompanyingPeriod.user].filter( - (u) => u !== null && !existingUserIds.includes(u.id) - ); + (u) => u !== null && !existingUserIds.includes(u.id) + ); }, suggestedResources(state) { const resources = state.activity.accompanyingPeriod.resources; diff --git a/src/Bundle/ChillPersonBundle/Controller/AccompanyingCourseApiController.php b/src/Bundle/ChillPersonBundle/Controller/AccompanyingCourseApiController.php index 43276c949..9445dc302 100644 --- a/src/Bundle/ChillPersonBundle/Controller/AccompanyingCourseApiController.php +++ b/src/Bundle/ChillPersonBundle/Controller/AccompanyingCourseApiController.php @@ -34,6 +34,8 @@ use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Annotation\Route; use Symfony\Component\Serializer\Exception\RuntimeException; use Symfony\Component\Serializer\Normalizer\AbstractNormalizer; +use Symfony\Component\Validator\ConstraintViolationList; +use Symfony\Component\Validator\ConstraintViolationListInterface; use Symfony\Component\Validator\Validator\ValidatorInterface; use Symfony\Component\Workflow\Registry; use function array_values; @@ -294,4 +296,17 @@ final class AccompanyingCourseApiController extends ApiController return null; } + + protected function validate(string $action, Request $request, string $_format, $entity, array $more = []): ConstraintViolationListInterface + { + if ('work' !== $action) { + return parent::validate($action, $request, $_format, $entity, $more); + } + + if (Request::METHOD_POST === $request->getMethod()) { + return $this->getValidator()->validate($more[0], null); + } + + return new ConstraintViolationList([]); + } } diff --git a/src/Bundle/ChillPersonBundle/DependencyInjection/ChillPersonExtension.php b/src/Bundle/ChillPersonBundle/DependencyInjection/ChillPersonExtension.php index 1e4d5022f..65a45c2e6 100644 --- a/src/Bundle/ChillPersonBundle/DependencyInjection/ChillPersonExtension.php +++ b/src/Bundle/ChillPersonBundle/DependencyInjection/ChillPersonExtension.php @@ -79,6 +79,7 @@ class ChillPersonExtension extends Extension implements PrependExtensionInterfac $loader->load('services/serializer.yaml'); $loader->load('services/security.yaml'); $loader->load('services/doctrineEventListener.yaml'); + $loader->load('services/accompanyingPeriodConsistency.yaml'); if ($container->getParameter('chill_person.accompanying_period') !== 'hidden') { $loader->load('services/exports_accompanying_period.yaml'); diff --git a/src/Bundle/ChillPersonBundle/Entity/AccompanyingPeriod/AccompanyingPeriodWork.php b/src/Bundle/ChillPersonBundle/Entity/AccompanyingPeriod/AccompanyingPeriodWork.php index 0e7b27cef..df4a5f5de 100644 --- a/src/Bundle/ChillPersonBundle/Entity/AccompanyingPeriod/AccompanyingPeriodWork.php +++ b/src/Bundle/ChillPersonBundle/Entity/AccompanyingPeriod/AccompanyingPeriodWork.php @@ -14,10 +14,12 @@ namespace Chill\PersonBundle\Entity\AccompanyingPeriod; use Chill\MainBundle\Doctrine\Model\TrackCreationInterface; use Chill\MainBundle\Doctrine\Model\TrackUpdateInterface; use Chill\MainBundle\Entity\User; +use Chill\PersonBundle\AccompanyingPeriod\SocialIssueConsistency\AccompanyingPeriodLinkedWithSocialIssuesEntityInterface; use Chill\PersonBundle\Entity\AccompanyingPeriod; use Chill\PersonBundle\Entity\Person; use Chill\PersonBundle\Entity\SocialWork\Result; use Chill\PersonBundle\Entity\SocialWork\SocialAction; +use Chill\PersonBundle\Entity\SocialWork\SocialIssue; use Chill\ThirdPartyBundle\Entity\ThirdParty; use DateTimeImmutable; use DateTimeInterface; @@ -28,458 +30,470 @@ use LogicException; use Symfony\Component\Serializer\Annotation as Serializer; use Symfony\Component\Validator\Constraints as Assert; - /** - * @ORM\Entity - * @ORM\Table(name="chill_person_accompanying_period_work") - * @Serializer\DiscriminatorMap( - * typeProperty="type", - * mapping={ - * "accompanying_period_work": AccompanyingPeriodWork::class - * } - * ) - */ - class AccompanyingPeriodWork implements TrackCreationInterface, TrackUpdateInterface - { - /** - * @ORM\ManyToOne(targetEntity=AccompanyingPeriod::class) - * @Serializer\Groups({"read"}) - */ - private ?AccompanyingPeriod $accompanyingPeriod = null; - - /** - * @ORM\OneToMany( - * targetEntity=AccompanyingPeriodWorkEvaluation::class, - * mappedBy="accompanyingPeriodWork", - * cascade={"remove", "persist"}, - * orphanRemoval=true - * ) - * @Serializer\Groups({"read", "docgen:read"}) - * - * @internal /!\ the serialization for write evaluations is handled in `AccompanyingPeriodWorkDenormalizer` - */ - private Collection $accompanyingPeriodWorkEvaluations; - - /** - * @ORM\Column(type="datetime_immutable") - * @Serializer\Groups({"read", "docgen:read"}) - */ - private ?DateTimeImmutable $createdAt = null; - - /** - * @ORM\Column(type="boolean") - * @Serializer\Groups({"read", "docgen:read"}) - */ - private bool $createdAutomatically = false; - - /** - * @ORM\Column(type="text") - * @Serializer\Groups({"read", "docgen:read"}) - */ - private string $createdAutomaticallyReason = ''; - - /** - * @ORM\ManyToOne(targetEntity=User::class) - * @ORM\JoinColumn(nullable=false) - * @Serializer\Groups({"read", "docgen:read"}) - */ - private ?User $createdBy = null; - - /** - * @ORM\Column(type="date_immutable", nullable=true, options={"default": null}) - * @Serializer\Groups({"accompanying_period_work:create"}) - * @Serializer\Groups({"accompanying_period_work:edit"}) - * @Serializer\Groups({"read", "docgen:read"}) - * @Assert\GreaterThan(propertyPath="startDate", - * message="accompanying_course_work.The endDate should be greater than the start date" - * ) - */ - private ?DateTimeImmutable $endDate = null; - - /** - * @ORM\OneToMany( - * targetEntity=AccompanyingPeriodWorkGoal::class, - * mappedBy="accompanyingPeriodWork", - * cascade={"persist"}, - * orphanRemoval=true - * ) - * @Serializer\Groups({"read", "docgen:read"}) - * @Serializer\Groups({"accompanying_period_work:edit"}) - */ - private Collection $goals; - - /** - * @ORM\ManyToOne(targetEntity=ThirdParty::class) - * @Serializer\Groups({"read", "docgen:read"}) - * @Serializer\Groups({"accompanying_period_work:edit"}) - * - * In schema : traitant - */ - private ?ThirdParty $handlingThierParty = null; - - /** - * @ORM\Id - * @ORM\GeneratedValue - * @ORM\Column(type="integer") - * @Serializer\Groups({"read", "docgen:read"}) - */ - private ?int $id = null; - - /** - * @ORM\Column(type="text") - * @Serializer\Groups({"read", "accompanying_period_work:edit", "docgen:read"}) - */ - private string $note = ''; - - /** - * @ORM\ManyToMany(targetEntity=Person::class) - * @ORM\JoinTable(name="chill_person_accompanying_period_work_person") - * @Serializer\Groups({"read", "docgen:read"}) - * @Serializer\Groups({"accompanying_period_work:edit"}) - * @Serializer\Groups({"accompanying_period_work:create"}) - */ - private Collection $persons; - - /** - * @ORM\ManyToMany(targetEntity=Result::class, inversedBy="accompanyingPeriodWorks") - * @ORM\JoinTable(name="chill_person_accompanying_period_work_result") - * @Serializer\Groups({"read", "docgen:read"}) - * @Serializer\Groups({"accompanying_period_work:edit"}) - */ - private Collection $results; - - /** - * @ORM\ManyToOne(targetEntity=SocialAction::class) - * @Serializer\Groups({"read", "docgen:read"}) - * @Serializer\Groups({"accompanying_period_work:create"}) - */ - private ?SocialAction $socialAction = null; - - /** - * @ORM\Column(type="date_immutable") - * @Serializer\Groups({"accompanying_period_work:create"}) - * @Serializer\Groups({"accompanying_period_work:edit"}) - * @Serializer\Groups({"read", "docgen:read"}) - */ - private ?DateTimeImmutable $startDate = null; - - /** - * @ORM\ManyToMany(targetEntity=ThirdParty::class) - * @ORM\JoinTable(name="chill_person_accompanying_period_work_third_party") - * - * In schema : intervenants - * @Serializer\Groups({"read", "docgen:read"}) - * @Serializer\Groups({"accompanying_period_work:edit"}) - */ - private Collection $thirdParties; - - /** - * @ORM\Column(type="datetime_immutable") - * @Serializer\Groups({"read", "docgen:read"}) - */ - private ?DateTimeImmutable $updatedAt = null; - - /** - * @ORM\ManyToOne(targetEntity=User::class) - * @ORM\JoinColumn(nullable=false) - * @Serializer\Groups({"read", "docgen:read"}) - */ - private ?User $updatedBy = null; - - public function __construct() - { - $this->goals = new ArrayCollection(); - $this->results = new ArrayCollection(); - $this->thirdParties = new ArrayCollection(); - $this->persons = new ArrayCollection(); - $this->accompanyingPeriodWorkEvaluations = new ArrayCollection(); - } - - public function addAccompanyingPeriodWorkEvaluation(AccompanyingPeriodWorkEvaluation $evaluation): self - { - if (!$this->accompanyingPeriodWorkEvaluations->contains($evaluation)) { - $this->accompanyingPeriodWorkEvaluations[] = $evaluation; - $evaluation->setAccompanyingPeriodWork($this); - } - - return $this; - } - - public function addGoal(AccompanyingPeriodWorkGoal $goal): self - { - if (!$this->goals->contains($goal)) { - $this->goals[] = $goal; - $goal->setAccompanyingPeriodWork($this); - } - - return $this; - } - - public function addPerson(Person $person): self - { - if (!$this->persons->contains($person)) { - $this->persons[] = $person; - } - - return $this; - } - - public function addResult(Result $result): self - { - if (!$this->results->contains($result)) { - $this->results[] = $result; - } - - return $this; - } - - public function addThirdParty(ThirdParty $thirdParty): self - { - if (!$this->thirdParties->contains($thirdParty)) { - $this->thirdParties[] = $thirdParty; - } - - return $this; - } - - public function getAccompanyingPeriod(): ?AccompanyingPeriod - { - return $this->accompanyingPeriod; - } - - /** - * @return Collection - */ - public function getAccompanyingPeriodWorkEvaluations() - { - return $this->accompanyingPeriodWorkEvaluations; - } - - public function getCreatedAt(): ?DateTimeImmutable - { - return $this->createdAt; - } - - public function getCreatedAutomatically(): ?bool - { - return $this->createdAutomatically; - } - - public function getCreatedAutomaticallyReason(): ?string - { - return $this->createdAutomaticallyReason; - } - - public function getCreatedBy(): ?User - { - return $this->createdBy; - } - - public function getEndDate(): ?DateTimeInterface - { - return $this->endDate; - } - - /** - * @return AccompanyingPeriodWorkGoal[]|Collection - */ - public function getGoals(): Collection - { - return $this->goals; - } - - public function getHandlingThierParty(): ?ThirdParty - { - return $this->handlingThierParty; - } - - public function getId(): ?int - { - return $this->id; - } - - public function getNote(): ?string - { - return $this->note; - } - - public function getPersons(): Collection - { - return $this->persons; - } - - /** - * @return Collection|Result[] - */ - public function getResults(): Collection - { - return $this->results; - } - - public function getSocialAction(): ?SocialAction - { - return $this->socialAction; - } - - public function getStartDate(): ?DateTimeInterface - { - return $this->startDate; - } - - /** - * @return Collection|ThirdParty[] - */ - public function getThirdParties(): Collection - { - return $this->thirdParties; - } - - public function getThirdPartys(): Collection - { - return $this->getThirdParties(); - } - - public function getUpdatedAt(): ?DateTimeImmutable - { - return $this->updatedAt; - } - - public function getUpdatedBy(): ?User - { - return $this->updatedBy; - } - - public function removeAccompanyingPeriodWorkEvaluation(AccompanyingPeriodWorkEvaluation $evaluation): self - { - $this->accompanyingPeriodWorkEvaluations - ->removeElement($evaluation); - $evaluation->setAccompanyingPeriodWork(null); - - return $this; - } - - public function removeGoal(AccompanyingPeriodWorkGoal $goal): self - { - if ($this->goals->removeElement($goal)) { - // set the owning side to null (unless already changed) - if ($goal->getAccompanyingPeriodWork() === $this) { - $goal->setAccompanyingPeriodWork(null); - } - } - - return $this; - } - - public function removePerson(Person $person): self - { - $this->persons->removeElement($person); - - return $this; - } - - public function removeResult(Result $result): self - { - $this->results->removeElement($result); - - return $this; - } - - public function removeThirdParty(ThirdParty $thirdParty): self - { - $this->thirdParties->removeElement($thirdParty); - - return $this; - } - - /** - * Internal: you should use `$accompanyingPeriod->removeWork($work);` or - * `$accompanyingPeriod->addWork($work);`. - */ - public function setAccompanyingPeriod(?AccompanyingPeriod $accompanyingPeriod): self - { - if ($this->accompanyingPeriod instanceof AccompanyingPeriod - && $accompanyingPeriod !== $this->accompanyingPeriod) { - throw new LogicException('A work cannot change accompanyingPeriod'); - } - - $this->accompanyingPeriod = $accompanyingPeriod; - - return $this; - } - - public function setCreatedAt(DateTimeInterface $createdAt): self - { - $this->createdAt = $createdAt; - - return $this; - } - - public function setCreatedAutomatically(bool $createdAutomatically): self - { - $this->createdAutomatically = $createdAutomatically; - - return $this; - } - - public function setCreatedAutomaticallyReason(string $createdAutomaticallyReason): self - { - $this->createdAutomaticallyReason = $createdAutomaticallyReason; - - return $this; - } - - public function setCreatedBy(?User $createdBy): self - { - $this->createdBy = $createdBy; +/** + * @ORM\Entity + * @ORM\Table(name="chill_person_accompanying_period_work") + * @Serializer\DiscriminatorMap( + * typeProperty="type", + * mapping={ + * "accompanying_period_work": AccompanyingPeriodWork::class + * } + * ) + */ +class AccompanyingPeriodWork implements AccompanyingPeriodLinkedWithSocialIssuesEntityInterface, TrackCreationInterface, TrackUpdateInterface +{ + /** + * @ORM\ManyToOne(targetEntity=AccompanyingPeriod::class) + * @Serializer\Groups({"read"}) + */ + private ?AccompanyingPeriod $accompanyingPeriod = null; + + /** + * @ORM\OneToMany( + * targetEntity=AccompanyingPeriodWorkEvaluation::class, + * mappedBy="accompanyingPeriodWork", + * cascade={"remove", "persist"}, + * orphanRemoval=true + * ) + * @Serializer\Groups({"read", "docgen:read"}) + * + * @internal /!\ the serialization for write evaluations is handled in `AccompanyingPeriodWorkDenormalizer` + */ + private Collection $accompanyingPeriodWorkEvaluations; + + /** + * @ORM\Column(type="datetime_immutable") + * @Serializer\Groups({"read", "docgen:read"}) + */ + private ?DateTimeImmutable $createdAt = null; + + /** + * @ORM\Column(type="boolean") + * @Serializer\Groups({"read", "docgen:read"}) + */ + private bool $createdAutomatically = false; + + /** + * @ORM\Column(type="text") + * @Serializer\Groups({"read", "docgen:read"}) + */ + private string $createdAutomaticallyReason = ''; + + /** + * @ORM\ManyToOne(targetEntity=User::class) + * @ORM\JoinColumn(nullable=false) + * @Serializer\Groups({"read", "docgen:read"}) + */ + private ?User $createdBy = null; + + /** + * @ORM\Column(type="date_immutable", nullable=true, options={"default": null}) + * @Serializer\Groups({"accompanying_period_work:create"}) + * @Serializer\Groups({"accompanying_period_work:edit"}) + * @Serializer\Groups({"read", "docgen:read"}) + * @Assert\GreaterThan(propertyPath="startDate", + * message="accompanying_course_work.The endDate should be greater than the start date" + * ) + */ + private ?DateTimeImmutable $endDate = null; + + /** + * @ORM\OneToMany( + * targetEntity=AccompanyingPeriodWorkGoal::class, + * mappedBy="accompanyingPeriodWork", + * cascade={"persist"}, + * orphanRemoval=true + * ) + * @Serializer\Groups({"read", "docgen:read"}) + * @Serializer\Groups({"accompanying_period_work:edit"}) + */ + private Collection $goals; + + /** + * @ORM\ManyToOne(targetEntity=ThirdParty::class) + * @Serializer\Groups({"read", "docgen:read"}) + * @Serializer\Groups({"accompanying_period_work:edit"}) + * + * In schema : traitant + */ + private ?ThirdParty $handlingThierParty = null; + + /** + * @ORM\Id + * @ORM\GeneratedValue + * @ORM\Column(type="integer") + * @Serializer\Groups({"read", "docgen:read"}) + */ + private ?int $id = null; + + /** + * @ORM\Column(type="text") + * @Serializer\Groups({"read", "accompanying_period_work:edit", "docgen:read"}) + */ + private string $note = ''; + + /** + * @ORM\ManyToMany(targetEntity=Person::class) + * @ORM\JoinTable(name="chill_person_accompanying_period_work_person") + * @Serializer\Groups({"read", "docgen:read"}) + * @Serializer\Groups({"accompanying_period_work:edit"}) + * @Serializer\Groups({"accompanying_period_work:create"}) + */ + private Collection $persons; + + /** + * @ORM\ManyToMany(targetEntity=Result::class, inversedBy="accompanyingPeriodWorks") + * @ORM\JoinTable(name="chill_person_accompanying_period_work_result") + * @Serializer\Groups({"read", "docgen:read"}) + * @Serializer\Groups({"accompanying_period_work:edit"}) + */ + private Collection $results; + + /** + * @ORM\ManyToOne(targetEntity=SocialAction::class) + * @Serializer\Groups({"read", "docgen:read"}) + * @Serializer\Groups({"accompanying_period_work:create"}) + */ + private ?SocialAction $socialAction = null; + + /** + * @ORM\Column(type="date_immutable") + * @Serializer\Groups({"accompanying_period_work:create"}) + * @Serializer\Groups({"accompanying_period_work:edit"}) + * @Serializer\Groups({"read", "docgen:read"}) + */ + private ?DateTimeImmutable $startDate = null; + + /** + * @ORM\ManyToMany(targetEntity=ThirdParty::class) + * @ORM\JoinTable(name="chill_person_accompanying_period_work_third_party") + * + * In schema : intervenants + * @Serializer\Groups({"read", "docgen:read"}) + * @Serializer\Groups({"accompanying_period_work:edit"}) + */ + private Collection $thirdParties; + + /** + * @ORM\Column(type="datetime_immutable") + * @Serializer\Groups({"read", "docgen:read"}) + */ + private ?DateTimeImmutable $updatedAt = null; + + /** + * @ORM\ManyToOne(targetEntity=User::class) + * @ORM\JoinColumn(nullable=false) + * @Serializer\Groups({"read", "docgen:read"}) + */ + private ?User $updatedBy = null; + + public function __construct() + { + $this->goals = new ArrayCollection(); + $this->results = new ArrayCollection(); + $this->thirdParties = new ArrayCollection(); + $this->persons = new ArrayCollection(); + $this->accompanyingPeriodWorkEvaluations = new ArrayCollection(); + } + + public function addAccompanyingPeriodWorkEvaluation(AccompanyingPeriodWorkEvaluation $evaluation): self + { + if (!$this->accompanyingPeriodWorkEvaluations->contains($evaluation)) { + $this->accompanyingPeriodWorkEvaluations[] = $evaluation; + $evaluation->setAccompanyingPeriodWork($this); + } + + return $this; + } + + public function addGoal(AccompanyingPeriodWorkGoal $goal): self + { + if (!$this->goals->contains($goal)) { + $this->goals[] = $goal; + $goal->setAccompanyingPeriodWork($this); + } + + return $this; + } + + public function addPerson(Person $person): self + { + if (!$this->persons->contains($person)) { + $this->persons[] = $person; + } + + return $this; + } + + public function addResult(Result $result): self + { + if (!$this->results->contains($result)) { + $this->results[] = $result; + } + + return $this; + } + + public function addThirdParty(ThirdParty $thirdParty): self + { + if (!$this->thirdParties->contains($thirdParty)) { + $this->thirdParties[] = $thirdParty; + } + + return $this; + } + + public function getAccompanyingPeriod(): ?AccompanyingPeriod + { + return $this->accompanyingPeriod; + } + + /** + * @return Collection + */ + public function getAccompanyingPeriodWorkEvaluations() + { + return $this->accompanyingPeriodWorkEvaluations; + } + + public function getCreatedAt(): ?DateTimeImmutable + { + return $this->createdAt; + } + + public function getCreatedAutomatically(): ?bool + { + return $this->createdAutomatically; + } + + public function getCreatedAutomaticallyReason(): ?string + { + return $this->createdAutomaticallyReason; + } + + public function getCreatedBy(): ?User + { + return $this->createdBy; + } + + public function getEndDate(): ?DateTimeInterface + { + return $this->endDate; + } + + /** + * @return AccompanyingPeriodWorkGoal[]|Collection + */ + public function getGoals(): Collection + { + return $this->goals; + } + + public function getHandlingThierParty(): ?ThirdParty + { + return $this->handlingThierParty; + } + + public function getId(): ?int + { + return $this->id; + } + + public function getNote(): ?string + { + return $this->note; + } + + public function getPersons(): Collection + { + return $this->persons; + } + + /** + * @return Collection|Result[] + */ + public function getResults(): Collection + { + return $this->results; + } + + public function getSocialAction(): ?SocialAction + { + return $this->socialAction; + } + + public function getSocialIssues(): Collection + { + return new ArrayCollection([$this->getSocialAction()->getIssue()]); + } + + public function getStartDate(): ?DateTimeInterface + { + return $this->startDate; + } + + /** + * @return Collection|ThirdParty[] + */ + public function getThirdParties(): Collection + { + return $this->thirdParties; + } + + public function getThirdPartys(): Collection + { + return $this->getThirdParties(); + } + + public function getUpdatedAt(): ?DateTimeImmutable + { + return $this->updatedAt; + } + + public function getUpdatedBy(): ?User + { + return $this->updatedBy; + } + + public function removeAccompanyingPeriodWorkEvaluation(AccompanyingPeriodWorkEvaluation $evaluation): self + { + $this->accompanyingPeriodWorkEvaluations + ->removeElement($evaluation); + $evaluation->setAccompanyingPeriodWork(null); + + return $this; + } + + public function removeGoal(AccompanyingPeriodWorkGoal $goal): self + { + if ($this->goals->removeElement($goal)) { + // set the owning side to null (unless already changed) + if ($goal->getAccompanyingPeriodWork() === $this) { + $goal->setAccompanyingPeriodWork(null); + } + } + + return $this; + } + + public function removePerson(Person $person): self + { + $this->persons->removeElement($person); + + return $this; + } + + public function removeResult(Result $result): self + { + $this->results->removeElement($result); + + return $this; + } + + public function removeSocialIssue(SocialIssue $issue): AccompanyingPeriodLinkedWithSocialIssuesEntityInterface + { + $this->getSocialIssues()->removeElement($issue); + + return $this; + } + + public function removeThirdParty(ThirdParty $thirdParty): self + { + $this->thirdParties->removeElement($thirdParty); + + return $this; + } + + /** + * Internal: you should use `$accompanyingPeriod->removeWork($work);` or + * `$accompanyingPeriod->addWork($work);`. + */ + public function setAccompanyingPeriod(?AccompanyingPeriod $accompanyingPeriod): self + { + if ($this->accompanyingPeriod instanceof AccompanyingPeriod + && $accompanyingPeriod !== $this->accompanyingPeriod) { + throw new LogicException('A work cannot change accompanyingPeriod'); + } + + $this->accompanyingPeriod = $accompanyingPeriod; + + return $this; + } + + public function setCreatedAt(DateTimeInterface $createdAt): self + { + $this->createdAt = $createdAt; + + return $this; + } - return $this; - } + public function setCreatedAutomatically(bool $createdAutomatically): self + { + $this->createdAutomatically = $createdAutomatically; - public function setEndDate(?DateTimeInterface $endDate = null): self - { - $this->endDate = $endDate; + return $this; + } + + public function setCreatedAutomaticallyReason(string $createdAutomaticallyReason): self + { + $this->createdAutomaticallyReason = $createdAutomaticallyReason; - return $this; - } + return $this; + } - public function setHandlingThierParty(?ThirdParty $handlingThierParty): self - { - $this->handlingThierParty = $handlingThierParty; + public function setCreatedBy(?User $createdBy): self + { + $this->createdBy = $createdBy; - return $this; - } + return $this; + } - public function setNote(string $note): self - { - $this->note = $note; + public function setEndDate(?DateTimeInterface $endDate = null): self + { + $this->endDate = $endDate; - return $this; - } + return $this; + } - public function setSocialAction(?SocialAction $socialAction): self - { - $this->socialAction = $socialAction; + public function setHandlingThierParty(?ThirdParty $handlingThierParty): self + { + $this->handlingThierParty = $handlingThierParty; - return $this; - } + return $this; + } - public function setStartDate(DateTimeInterface $startDate): self - { - $this->startDate = $startDate; + public function setNote(string $note): self + { + $this->note = $note; - return $this; - } + return $this; + } - public function setUpdatedAt(DateTimeInterface $datetime): TrackUpdateInterface - { - $this->updatedAt = $datetime; + public function setSocialAction(?SocialAction $socialAction): self + { + $this->socialAction = $socialAction; - return $this; - } + return $this; + } - public function setUpdatedBy(User $user): TrackUpdateInterface - { - $this->updatedBy = $user; + public function setStartDate(DateTimeInterface $startDate): self + { + $this->startDate = $startDate; - return $this; - } - } + return $this; + } + + public function setUpdatedAt(DateTimeInterface $datetime): TrackUpdateInterface + { + $this->updatedAt = $datetime; + + return $this; + } + + public function setUpdatedBy(User $user): TrackUpdateInterface + { + $this->updatedBy = $user; + + return $this; + } +} diff --git a/src/Bundle/ChillPersonBundle/Resources/public/vuejs/AccompanyingCourse/api.js b/src/Bundle/ChillPersonBundle/Resources/public/vuejs/AccompanyingCourse/api.js index 4eb6f2a33..8e4134205 100644 --- a/src/Bundle/ChillPersonBundle/Resources/public/vuejs/AccompanyingCourse/api.js +++ b/src/Bundle/ChillPersonBundle/Resources/public/vuejs/AccompanyingCourse/api.js @@ -22,9 +22,9 @@ const getUsers = () => { }; const getReferrersSuggested = (course) => { - const url = `/api/1.0/person/accompanying-course/${course.id}/referrers-suggested.json`; + const url = `/api/1.0/person/accompanying-course/${course.id}/referrers-suggested.json`; - return fetchResults(url); + return fetchResults(url); } /* 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 7e58ebba8..d4bb6a678 100644 --- a/src/Bundle/ChillPersonBundle/Resources/public/vuejs/AccompanyingCourse/js/i18n.js +++ b/src/Bundle/ChillPersonBundle/Resources/public/vuejs/AccompanyingCourse/js/i18n.js @@ -132,6 +132,10 @@ const appMessages = { sure_description: "Une fois le changement confirmé, il ne sera plus possible de le remettre à l'état de brouillon !", ok: "Confirmer le parcours" }, + action: { + choose_other_social_issue: "Veuillez choisir un autre problématique", + cancel: "Annuler", + }, // catch errors 'Error while updating AccompanyingPeriod Course.': "Erreur du serveur lors de la mise à jour du parcours d'accompagnement.", 'Error while retriving AccompanyingPeriod Course.': "Erreur du serveur lors du chargement du parcours d'accompagnement.", diff --git a/src/Bundle/ChillPersonBundle/Resources/public/vuejs/AccompanyingCourseWorkCreate/App.vue b/src/Bundle/ChillPersonBundle/Resources/public/vuejs/AccompanyingCourseWorkCreate/App.vue index 7931a2a0d..e30c90d08 100644 --- a/src/Bundle/ChillPersonBundle/Resources/public/vuejs/AccompanyingCourseWorkCreate/App.vue +++ b/src/Bundle/ChillPersonBundle/Resources/public/vuejs/AccompanyingCourseWorkCreate/App.vue @@ -5,24 +5,47 @@
{{ $t('pick_social_issue_linked_with_action') }}
- -{{ $t('pick_social_issue_linked_with_action') }}
+