diff --git a/src/Bundle/ChillMainBundle/CRUD/Controller/ApiController.php b/src/Bundle/ChillMainBundle/CRUD/Controller/ApiController.php
index 9686a7b98..cab0bcdcb 100644
--- a/src/Bundle/ChillMainBundle/CRUD/Controller/ApiController.php
+++ b/src/Bundle/ChillMainBundle/CRUD/Controller/ApiController.php
@@ -359,9 +359,10 @@ class ApiController extends AbstractCRUDController
* 6. validate the base entity (not the deserialized one). Groups are fetched from getValidationGroups, validation is perform by `validate`
* 7. run onAfterValidation
* 8. if errors, return a 422 response with errors
- * 9. flush the data
- * 10. run onAfterFlush
- * 11. return a 202 response for DELETE with empty body, or HTTP 200 for post with serialized posted entity
+ * 9. if $forcePersist === true, persist the entity
+ * 10. flush the data
+ * 11. run onAfterFlush
+ * 12. return a 202 response for DELETE with empty body, or HTTP 200 for post with serialized posted entity
*
* @param string action
* @param mixed id
@@ -370,11 +371,12 @@ class ApiController extends AbstractCRUDController
* @param string $property the name of the property. This will be used to make a `add+$property` and `remove+$property` method
* @param string $postedDataType the type of the posted data (the content)
* @param string $postedDataContext a context to deserialize posted data (the content)
+ * @param bool $forcePersist force to persist the created element (only for POST request)
* @throw BadRequestException if unable to deserialize the posted data
* @throw BadRequestException if the method is not POST or DELETE
*
*/
- protected function addRemoveSomething(string $action, $id, Request $request, string $_format, string $property, string $postedDataType, $postedDataContext = []): Response
+ protected function addRemoveSomething(string $action, $id, Request $request, string $_format, string $property, string $postedDataType, array $postedDataContext = [], bool $forcePersist = false): Response
{
$entity = $this->getEntity($action, $id, $request);
@@ -429,6 +431,10 @@ class ApiController extends AbstractCRUDController
return $this->json($errors, 422);
}
+ if ($forcePersist && $request->getMethod() === Request::METHOD_POST) {
+ $this->getDoctrine()->getManager()->persist($postedData);
+ }
+
$this->getDoctrine()->getManager()->flush();
diff --git a/src/Bundle/ChillMainBundle/CRUD/Routing/CRUDRoutesLoader.php b/src/Bundle/ChillMainBundle/CRUD/Routing/CRUDRoutesLoader.php
index 9d61d6233..d7e19ea9c 100644
--- a/src/Bundle/ChillMainBundle/CRUD/Routing/CRUDRoutesLoader.php
+++ b/src/Bundle/ChillMainBundle/CRUD/Routing/CRUDRoutesLoader.php
@@ -146,7 +146,7 @@ class CRUDRoutesLoader extends Loader
foreach ($crudConfig['actions'] as $name => $action) {
// filter only on single actions
- $singleCollection = $action['single-collection'] ?? $name === '_entity' ? 'single' : NULL;
+ $singleCollection = $action['single_collection'] ?? $name === '_entity' ? 'single' : NULL;
if ('collection' === $singleCollection) {
// continue;
}
@@ -171,7 +171,7 @@ class CRUDRoutesLoader extends Loader
// path are rewritten
// if name === 'default', we rewrite it to nothing :-)
$localName = \in_array($name, [ '_entity', '_index' ]) ? '' : '/'.$name;
- if ('collection' === $action['single-collection'] || '_index' === $name) {
+ if ('collection' === $action['single_collection'] || '_index' === $name) {
$localPath = $action['path'] ?? $localName.'.{_format}';
} else {
$localPath = $action['path'] ?? '/{id}'.$localName.'.{_format}';
diff --git a/src/Bundle/ChillMainBundle/DependencyInjection/Configuration.php b/src/Bundle/ChillMainBundle/DependencyInjection/Configuration.php
index 4c90aaabb..c711f911f 100644
--- a/src/Bundle/ChillMainBundle/DependencyInjection/Configuration.php
+++ b/src/Bundle/ChillMainBundle/DependencyInjection/Configuration.php
@@ -205,7 +205,7 @@ class Configuration implements ConfigurationInterface
->ignoreExtraKeys(false)
->info('the requirements for the route. Will be set to `[ \'id\' => \'\d+\' ]` if left empty.')
->end()
- ->enumNode('single-collection')
+ ->enumNode('single_collection')
->values(['single', 'collection'])
->defaultValue('single')
->info('indicates if the returned object is a single element or a collection. '.
diff --git a/src/Bundle/ChillMainBundle/Resources/public/js/date.js b/src/Bundle/ChillMainBundle/Resources/public/js/date.js
index 7b9bf88a2..e49a05972 100644
--- a/src/Bundle/ChillMainBundle/Resources/public/js/date.js
+++ b/src/Bundle/ChillMainBundle/Resources/public/js/date.js
@@ -11,13 +11,16 @@
*
* Do not take time into account
*
- * **Experimental**
*/
const dateToISO = (date) => {
+ if (null === date) {
+ return null;
+ }
+
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')
+ date.getFullYear(),
+ (date.getMonth() + 1).toString().padStart(2, '0'),
+ date.getDate().toString().padStart(2, '0')
].join('-');
};
@@ -36,10 +39,12 @@ const ISOToDate = (str) => {
/**
* Return a date object from iso string formatted as YYYY-mm-dd:HH:MM:ss+01:00
*
- * **Experimental**
*/
const ISOToDatetime = (str) => {
- console.log(str);
+ if (null === str) {
+ return null;
+ }
+
let
[cal, times] = str.split('T'),
[year, month, date] = cal.split('-'),
diff --git a/src/Bundle/ChillMainBundle/Serializer/Normalizer/CollectionNormalizer.php b/src/Bundle/ChillMainBundle/Serializer/Normalizer/CollectionNormalizer.php
index 1ba95d924..d3f513c54 100644
--- a/src/Bundle/ChillMainBundle/Serializer/Normalizer/CollectionNormalizer.php
+++ b/src/Bundle/ChillMainBundle/Serializer/Normalizer/CollectionNormalizer.php
@@ -19,7 +19,6 @@ class CollectionNormalizer implements NormalizerInterface, NormalizerAwareInterf
public function normalize($collection, string $format = null, array $context = [])
{
/** @var $collection Collection */
- /** @var $collection Chill\MainBundle\Pagination\PaginatorInterface */
$paginator = $collection->getPaginator();
$data['count'] = $paginator->getTotalItems();
diff --git a/src/Bundle/ChillPersonBundle/Controller/AccompanyingCourseApiController.php b/src/Bundle/ChillPersonBundle/Controller/AccompanyingCourseApiController.php
index 860cdfad7..8201752af 100644
--- a/src/Bundle/ChillPersonBundle/Controller/AccompanyingCourseApiController.php
+++ b/src/Bundle/ChillPersonBundle/Controller/AccompanyingCourseApiController.php
@@ -6,6 +6,7 @@ use Chill\MainBundle\CRUD\Controller\ApiController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Chill\PersonBundle\Entity\AccompanyingPeriod;
+use Chill\PersonBundle\Entity\AccompanyingPeriod\AccompanyingPeriodWork;
use Symfony\Component\HttpFoundation\Exception\BadRequestException;
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
use Symfony\Component\Validator\Validator\ValidatorInterface;
@@ -116,6 +117,20 @@ $workflow = $this->registry->get($accompanyingPeriod);
return $this->addRemoveSomething('socialissue', $id, $request, $_format, 'socialIssue', SocialIssue::class, [ 'groups' => [ 'read' ] ]);
}
+ public function workApi($id, Request $request, string $_format): Response
+ {
+ return $this->addRemoveSomething(
+ 'work',
+ $id,
+ $request,
+ $_format,
+ 'work',
+ AccompanyingPeriodWork::class,
+ [ 'groups' => [ 'accompanying_period_work:create' ] ],
+ true // force persist
+ );
+ }
+
public function requestorApi($id, Request $request, string $_format): Response
{
/** @var AccompanyingPeriod $accompanyingPeriod */
diff --git a/src/Bundle/ChillPersonBundle/Controller/AccompanyingCourseWorkController.php b/src/Bundle/ChillPersonBundle/Controller/AccompanyingCourseWorkController.php
new file mode 100644
index 000000000..1a5ab3925
--- /dev/null
+++ b/src/Bundle/ChillPersonBundle/Controller/AccompanyingCourseWorkController.php
@@ -0,0 +1,52 @@
+trans = $trans;
+ $this->serializer = $serializer;
+ }
+
+ /**
+ * @Route(
+ * "{_locale}/person/accompanying-period/{id}/work/new",
+ * methods={"GET", "POST"}
+ * )
+ */
+ public function createWork(AccompanyingPeriod $period)
+ {
+ // TODO ACL
+
+ if ($period->getSocialIssues()->count() === 0) {
+ $this->addFlash('error', $this->trans->trans(
+ "accompanying_work.You must add at least ".
+ "one social issue on accompanying period")
+ );
+
+ return $this->redirectToRoute('chill_person_accompanying_course_index', [
+ 'accompanying_period_id' => $period->getId()
+ ]);
+ }
+
+ $json = $this->serializer->normalize($period, 'json', [ "groups" => [ "read" ]]);
+
+ return $this->render('@ChillPerson/AccompanyingCourseWork/create.html.twig', [
+ 'accompanyingCourse' => $period,
+ 'json' => $json
+ ]);
+ }
+}
diff --git a/src/Bundle/ChillPersonBundle/Controller/SocialWorkSocialActionApiController.php b/src/Bundle/ChillPersonBundle/Controller/SocialWorkSocialActionApiController.php
new file mode 100644
index 000000000..de87b380a
--- /dev/null
+++ b/src/Bundle/ChillPersonBundle/Controller/SocialWorkSocialActionApiController.php
@@ -0,0 +1,47 @@
+socialIssueRepository = $socialIssueRepository;
+ $this->paginator = $paginator;
+ }
+
+ public function listBySocialIssueApi($id, Request $request)
+ {
+ $socialIssue = $this->socialIssueRepository
+ ->find($id);
+
+ if (NULL === $socialIssue) {
+ throw $this->createNotFoundException("socialIssue not found");
+ }
+
+ $socialActions = $socialIssue->getRecursiveSocialActions();
+ $pagination = $this->paginator->create(count($socialActions));
+ // max one page
+ $pagination->setItemsPerPage(count($socialActions));
+
+ $collection = new Collection($socialActions, $pagination);
+
+
+ return $this->json($collection, JsonResponse::HTTP_OK, [], [ "groups" => [ "read" ]]);
+ }
+
+}
diff --git a/src/Bundle/ChillPersonBundle/DependencyInjection/ChillPersonExtension.php b/src/Bundle/ChillPersonBundle/DependencyInjection/ChillPersonExtension.php
index 1c62f361f..79dae3255 100644
--- a/src/Bundle/ChillPersonBundle/DependencyInjection/ChillPersonExtension.php
+++ b/src/Bundle/ChillPersonBundle/DependencyInjection/ChillPersonExtension.php
@@ -438,6 +438,19 @@ class ChillPersonExtension extends Extension implements PrependExtensionInterfac
Request::METHOD_DELETE=> \Chill\PersonBundle\Security\Authorization\AccompanyingPeriodVoter::SEE
]
],
+ 'work' => [
+ 'methods' => [
+ Request::METHOD_POST => true,
+ Request::METHOD_DELETE => false,
+ Request::METHOD_GET => false,
+ Request::METHOD_HEAD => false,
+ ],
+ 'controller_action' => 'workApi',
+ 'roles' => [
+ Request::METHOD_POST => \Chill\PersonBundle\Security\Authorization\AccompanyingPeriodVoter::SEE,
+ Request::METHOD_DELETE => 'ALWAYS_FAILS',
+ ]
+ ],
'confirm' => [
'methods' => [
@@ -573,6 +586,49 @@ class ChillPersonExtension extends Extension implements PrependExtensionInterfac
],
]
],
+ [
+ 'class' => \Chill\PersonBundle\Entity\SocialWork\SocialAction::class,
+ 'name' => 'social_action',
+ 'base_path' => '/api/1.0/person/social/social-action',
+ 'controller' => \Chill\PersonBundle\Controller\SocialWorkSocialActionApiController::class,
+ // TODO: acl
+ 'base_role' => 'ROLE_USER',
+ 'actions' => [
+ '_entity' => [
+ 'methods' => [
+ Request::METHOD_GET => true,
+ Request::METHOD_HEAD => true,
+ ],
+ 'roles' => [
+ Request::METHOD_GET => 'ROLE_USER',
+ Request::METHOD_HEAD => 'ROLE_USER',
+ ]
+ ],
+ '_index' => [
+ 'methods' => [
+ Request::METHOD_GET => true,
+ Request::METHOD_HEAD => true,
+ ],
+ 'roles' => [
+ Request::METHOD_GET => 'ROLE_USER',
+ Request::METHOD_HEAD => 'ROLE_USER',
+ ]
+ ],
+ 'listBySocialIssue' => [
+ 'single-collection' => 'collection',
+ 'path' => '/by-social-issue/{id}.{_format}',
+ 'methods' => [
+ Request::METHOD_GET => true,
+ Request::METHOD_HEAD => true,
+ ],
+ 'roles' => [
+ Request::METHOD_GET => 'ROLE_USER',
+ Request::METHOD_HEAD => 'ROLE_USER',
+ ]
+
+ ]
+ ]
+ ],
]
]);
}
diff --git a/src/Bundle/ChillPersonBundle/Entity/AccompanyingPeriod.php b/src/Bundle/ChillPersonBundle/Entity/AccompanyingPeriod.php
index 84f0c264b..47bb3c953 100644
--- a/src/Bundle/ChillPersonBundle/Entity/AccompanyingPeriod.php
+++ b/src/Bundle/ChillPersonBundle/Entity/AccompanyingPeriod.php
@@ -25,6 +25,7 @@ namespace Chill\PersonBundle\Entity;
use Chill\MainBundle\Doctrine\Model\TrackUpdateInterface;
use Chill\MainBundle\Doctrine\Model\TrackCreationInterface;
use Chill\MainBundle\Entity\Scope;
+use Chill\PersonBundle\Entity\AccompanyingPeriod\AccompanyingPeriodWork;
use Chill\PersonBundle\Entity\AccompanyingPeriod\ClosingMotive;
use Chill\PersonBundle\Entity\AccompanyingPeriod\Comment;
use Chill\PersonBundle\Entity\AccompanyingPeriod\Origin;
@@ -39,6 +40,7 @@ use Symfony\Component\Validator\Context\ExecutionContextInterface;
use Chill\MainBundle\Entity\User;
use Symfony\Component\Serializer\Annotation\Groups;
use Symfony\Component\Serializer\Annotation\DiscriminatorMap;
+use Symfony\Component\Validator\Constraints as Assert;
/**
* AccompanyingPeriod Class
@@ -280,6 +282,15 @@ class AccompanyingPeriod implements TrackCreationInterface, TrackUpdateInterface
*/
private \DateTimeInterface $updatedAt;
+ /**
+ * @ORM\OneToMany(
+ * targetEntity=AccompanyingPeriodWork::class,
+ * mappedBy="accompanyingPeriod"
+ * )
+ * @Assert\Valid(traverse=true)
+ */
+ private Collection $works;
+
/**
* AccompanyingPeriod constructor.
*
@@ -292,6 +303,7 @@ class AccompanyingPeriod implements TrackCreationInterface, TrackUpdateInterface
$this->scopes = new ArrayCollection();
$this->socialIssues = new ArrayCollection();
$this->comments = new ArrayCollection();
+ $this->works = new ArrayCollection();
}
/**
@@ -896,4 +908,28 @@ class AccompanyingPeriod implements TrackCreationInterface, TrackUpdateInterface
return $this;
}
+
+ /**
+ * @return AccompanyingPeriodWork[]
+ */
+ public function getWorks(): Collection
+ {
+ return $this->works;
+ }
+
+ public function addWork(AccompanyingPeriodWork $work): self
+ {
+ $this->works[] = $work;
+ $work->setAccompanyingPeriod($this);
+
+ return $this;
+ }
+
+ public function removeWork(AccompanyingPeriodWork $work): self
+ {
+ $this->work->removeElement($work);
+ $work->setAccompanyingPeriod(null);
+
+ return $this;
+ }
}
diff --git a/src/Bundle/ChillPersonBundle/Entity/AccompanyingPeriod/AccompanyingPeriodWork.php b/src/Bundle/ChillPersonBundle/Entity/AccompanyingPeriod/AccompanyingPeriodWork.php
index 25fbcc342..11570945e 100644
--- a/src/Bundle/ChillPersonBundle/Entity/AccompanyingPeriod/AccompanyingPeriodWork.php
+++ b/src/Bundle/ChillPersonBundle/Entity/AccompanyingPeriod/AccompanyingPeriodWork.php
@@ -7,86 +7,123 @@ use Chill\PersonBundle\Entity\SocialWork\SocialAction;
use Chill\MainBundle\Entity\User;
use Chill\PersonBundle\Entity\AccompanyingPeriod;
use Chill\ThirdPartyBundle\Entity\ThirdParty;
+use DateTimeInterface;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
+use Symfony\Component\Serializer\Annotation as Serializer;
+use Chill\MainBundle\Doctrine\Model\TrackCreationInterface;
+use Chill\MainBundle\Doctrine\Model\TrackUpdateInterface;
+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
+ class AccompanyingPeriodWork implements TrackCreationInterface, TrackUpdateInterface
{
/**
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(type="integer")
+ * @Serializer\Groups({"read"})
*/
- private $id;
+ private ?int $id;
/**
* @ORM\Column(type="text")
+ * @Serializer\Groups({"read"})
*/
- private $note;
+ private string $note = "";
/**
* @ORM\ManyToOne(targetEntity=AccompanyingPeriod::class)
+ * @Serializer\Groups({"read"})
*/
- private $accompanyingPeriod;
+ private ?AccompanyingPeriod $accompanyingPeriod = null;
/**
* @ORM\ManyToOne(targetEntity=SocialAction::class)
+ * @Serializer\Groups({"accompanying_period_work:create", "read"})
*/
- private $socialAction;
+ private ?SocialAction $socialAction = null;
/**
- * @ORM\Column(type="datetime")
+ * @ORM\Column(type="datetime_immutable")
+ * @Serializer\Groups({"read"})
*/
- private $createdAt;
+ private ?\DateTimeImmutable $createdAt = null;
/**
* @ORM\ManyToOne(targetEntity=User::class)
* @ORM\JoinColumn(nullable=false)
+ * @Serializer\Groups({"read"})
*/
- private $createdBy;
+ private ?User $createdBy = null;
/**
- * @ORM\Column(type="datetime")
+ * @ORM\Column(type="datetime_immutable")
+ * @Serializer\Groups({"read"})
*/
- private $startDate;
+ private ?\DateTimeImmutable $updatedAt = null;
/**
- * @ORM\Column(type="datetime")
+ * @ORM\ManyToOne(targetEntity=User::class)
+ * @ORM\JoinColumn(nullable=false)
+ * @Serializer\Groups({"read"})
*/
- private $endDate;
+ private ?User $updatedBy = null;
+
+ /**
+ * @ORM\Column(type="date_immutable")
+ * @Serializer\Groups({"accompanying_period_work:create"})
+ * @Serializer\Groups({"read"})
+ */
+ private \DateTimeImmutable $startDate;
+
+ /**
+ * @ORM\Column(type="date_immutable", nullable=true, options={"default":null})
+ * @Serializer\Groups({"accompanying_period_work:create", "read"})
+ * @Assert\GreaterThan(propertyPath="startDate",
+ * message="accompanying_course_work.The endDate should be greater than the start date"
+ * )
+ */
+ private ?\DateTimeImmutable $endDate = null;
/**
* @ORM\ManyToOne(targetEntity=ThirdParty::class)
+ * @Serializer\Groups({"read"})
*
* In schema : traitant
*/
- private $handlingThierParty;
+ private ?ThirdParty $handlingThierParty = null;
/**
* @ORM\Column(type="boolean")
*/
- private $createdAutomatically;
+ private bool $createdAutomatically = false;
/**
* @ORM\Column(type="text")
*/
- private $createdAutomaticallyReason;
+ private string $createdAutomaticallyReason = "";
/**
* @ORM\OneToMany(targetEntity=AccompanyingPeriodWorkGoal::class, mappedBy="accompanyingPeriodWork")
*/
- private $goals;
+ private Collection $goals;
/**
* @ORM\ManyToMany(targetEntity=Result::class, inversedBy="accompanyingPeriodWorks")
* @ORM\JoinTable(name="chill_person_accompanying_period_work_result")
*/
- private $results;
+ private Collection $results;
/**
* @ORM\ManyToMany(targetEntity=ThirdParty::class)
@@ -94,7 +131,7 @@ use Doctrine\ORM\Mapping as ORM;
*
* In schema : intervenants
*/
- private $thirdParties;
+ private Collection $thirdParties;
public function __construct()
{
@@ -125,8 +162,17 @@ use Doctrine\ORM\Mapping as ORM;
return $this->accompanyingPeriod;
}
+ /**
+ * 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;
@@ -144,7 +190,7 @@ use Doctrine\ORM\Mapping as ORM;
return $this;
}
- public function getCreatedAt(): ?\DateTimeInterface
+ public function getCreatedAt(): ?\DateTimeImmutable
{
return $this->createdAt;
}
@@ -168,6 +214,30 @@ use Doctrine\ORM\Mapping as ORM;
return $this;
}
+ public function setUpdatedBy(User $user): TrackUpdateInterface
+ {
+ $this->updatedBy = $user;
+
+ return $this;
+ }
+
+ public function setUpdatedAt(DateTimeInterface $datetime): TrackUpdateInterface
+ {
+ $this->updatedAt = $datetime;
+
+ return $this;
+ }
+
+ public function getUpdatedAt(): ?\DateTimeImmutable
+ {
+ return $this->updatedAt;
+ }
+
+ public function getUpdatedBy(): ?User
+ {
+ return $this->updatedBy;
+ }
+
public function getStartDate(): ?\DateTimeInterface
{
return $this->startDate;
diff --git a/src/Bundle/ChillPersonBundle/Entity/SocialWork/SocialAction.php b/src/Bundle/ChillPersonBundle/Entity/SocialWork/SocialAction.php
index 3f5eb14ed..35abe392f 100644
--- a/src/Bundle/ChillPersonBundle/Entity/SocialWork/SocialAction.php
+++ b/src/Bundle/ChillPersonBundle/Entity/SocialWork/SocialAction.php
@@ -5,10 +5,17 @@ namespace Chill\PersonBundle\Entity\SocialWork;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
+use Symfony\Component\Serializer\Annotation as Serializer;
/**
* @ORM\Entity
* @ORM\Table(name="chill_person_social_action")
+ * @Serializer\DiscriminatorMap(
+ * typeProperty="type",
+ * mapping={
+ * "social_work_social_action":SocialAction::class
+ * }
+ * )
*/
class SocialAction
{
diff --git a/src/Bundle/ChillPersonBundle/Repository/SocialWork/SocialIssueRepository.php b/src/Bundle/ChillPersonBundle/Repository/SocialWork/SocialIssueRepository.php
index 1100d8136..4dc5ecc67 100644
--- a/src/Bundle/ChillPersonBundle/Repository/SocialWork/SocialIssueRepository.php
+++ b/src/Bundle/ChillPersonBundle/Repository/SocialWork/SocialIssueRepository.php
@@ -6,8 +6,9 @@ use Chill\PersonBundle\Entity\SocialWork\SocialIssue;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\ORM\EntityManagerInterface;
use Doctrine\ORM\EntityRepository;
+use Doctrine\Persistence\ObjectRepository;
-final class SocialIssueRepository
+final class SocialIssueRepository implements ObjectRepository
{
private EntityRepository $repository;
@@ -15,4 +16,44 @@ final class SocialIssueRepository
{
$this->repository = $entityManager->getRepository(SocialIssue::class);
}
+
+ /**
+ * {@inheritDoc}
+ */
+ public function find($id)
+ {
+ return $this->repository->find($id);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public function findAll()
+ {
+ return $this->repository->findAll();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public function findBy(array $criteria, ?array $orderBy = null, $limit = null, $offset = null)
+ {
+ return $this->repository->findBy($criteria, $orderBy, $limit, $offset);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public function findOneBy(array $criteria)
+ {
+ return $this->findOneBy($criteria);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public function getClassName()
+ {
+ return SocialIssue::class;
+ }
}
diff --git a/src/Bundle/ChillPersonBundle/Resources/public/vuejs/AccompanyingCourseWorkCreate/App.vue b/src/Bundle/ChillPersonBundle/Resources/public/vuejs/AccompanyingCourseWorkCreate/App.vue
new file mode 100644
index 000000000..3c1f4b07a
--- /dev/null
+++ b/src/Bundle/ChillPersonBundle/Resources/public/vuejs/AccompanyingCourseWorkCreate/App.vue
@@ -0,0 +1,190 @@
+
+
+ {{ $t('pick_social_issue_linked_with_action') }} spinner {{ $t('form_has_errors') }}{{ $t('pick_social_issue') }}
+
+
+ {{ $t('pick_an_action') }}
+
+
+
+
+
+