diff --git a/src/Bundle/ChillCalendarBundle/Controller/CalendarRangeAPIController.php b/src/Bundle/ChillCalendarBundle/Controller/CalendarRangeAPIController.php new file mode 100644 index 000000000..be279ed36 --- /dev/null +++ b/src/Bundle/ChillCalendarBundle/Controller/CalendarRangeAPIController.php @@ -0,0 +1,38 @@ +query->has('user')) { + $user = $request->query->get('user'); + } + + $em = $this->getDoctrine()->getManager(); + + $query = $em->createQuery( + 'SELECT c FROM ChillCalendarBundle:CalendarRange c + WHERE NOT EXISTS (SELECT cal.id FROM ChillCalendarBundle:Calendar cal WHERE cal.calendarRange = c.id)') + ; + + $results = $query->getResult(); + + return $this->json(['count' => count($results), 'results' => $results], Response::HTTP_OK, [], [ 'groups' => [ 'read' ]]); + //TODO use also the paginator, eg return $this->serializeCollection('get', $request, $_format, $paginator, $results); + } + +} \ No newline at end of file diff --git a/src/Bundle/ChillCalendarBundle/DependencyInjection/ChillCalendarExtension.php b/src/Bundle/ChillCalendarBundle/DependencyInjection/ChillCalendarExtension.php index 4b6a0cadf..2927d4910 100644 --- a/src/Bundle/ChillCalendarBundle/DependencyInjection/ChillCalendarExtension.php +++ b/src/Bundle/ChillCalendarBundle/DependencyInjection/ChillCalendarExtension.php @@ -57,6 +57,7 @@ class ChillCalendarExtension extends Extension implements PrependExtensionInterf $container->prependExtensionConfig('chill_main', [ 'apis' => [ [ + 'controller' => \Chill\CalendarBundle\Controller\CalendarRangeAPIController::class, 'class' => \Chill\CalendarBundle\Entity\CalendarRange::class, 'name' => 'calendar_range', 'base_path' => '/api/1.0/calendar/calendar-range', diff --git a/src/Bundle/ChillCalendarBundle/Entity/Calendar.php b/src/Bundle/ChillCalendarBundle/Entity/Calendar.php index 06a97fd7f..2c1029441 100644 --- a/src/Bundle/ChillCalendarBundle/Entity/Calendar.php +++ b/src/Bundle/ChillCalendarBundle/Entity/Calendar.php @@ -116,7 +116,7 @@ class Calendar private ?CancelReason $cancelReason = null; /** - * @ORM\ManyToOne(targetEntity="CalendarRange") + * @ORM\ManyToOne(targetEntity="CalendarRange", inversedBy="calendars") */ private ?CalendarRange $calendarRange = null; diff --git a/src/Bundle/ChillCalendarBundle/Entity/CalendarRange.php b/src/Bundle/ChillCalendarBundle/Entity/CalendarRange.php index 3d1131fec..f9582c8c2 100644 --- a/src/Bundle/ChillCalendarBundle/Entity/CalendarRange.php +++ b/src/Bundle/ChillCalendarBundle/Entity/CalendarRange.php @@ -4,6 +4,8 @@ namespace Chill\CalendarBundle\Entity; use Chill\CalendarBundle\Repository\CalendarRangeRepository; use Chill\MainBundle\Entity\User; +use Doctrine\Common\Collections\ArrayCollection; +use Doctrine\Common\Collections\Collection; use Doctrine\ORM\Mapping as ORM; use Symfony\Component\Serializer\Annotation\Groups; @@ -23,7 +25,7 @@ class CalendarRange /** * @ORM\ManyToOne(targetEntity="Chill\MainBundle\Entity\User") - * @groups({"read"}) + * @Groups({"read"}) */ private User $user; @@ -39,8 +41,19 @@ class CalendarRange */ private \DateTimeImmutable $endDate; + /** + * @ORM\OneToMany(targetEntity=Calendar::class, + * mappedBy="calendarRange") + */ + private Collection $calendars; + //TODO Lieu + public function __construct() + { + $this->calendars = new ArrayCollection(); + } + public function getId(): ?int { return $this->id; diff --git a/src/Bundle/ChillCalendarBundle/Resources/public/vuejs/_components/CalendarUserSelector/CalendarUserSelector.vue b/src/Bundle/ChillCalendarBundle/Resources/public/vuejs/_components/CalendarUserSelector/CalendarUserSelector.vue index 883e2a844..c0db531ac 100644 --- a/src/Bundle/ChillCalendarBundle/Resources/public/vuejs/_components/CalendarUserSelector/CalendarUserSelector.vue +++ b/src/Bundle/ChillCalendarBundle/Resources/public/vuejs/_components/CalendarUserSelector/CalendarUserSelector.vue @@ -19,9 +19,9 @@ :options="options"> -