improve customer timetable

This commit is contained in:
Roland Schneider
2021-09-19 21:01:07 +02:00
parent fe2f0766e3
commit 678b005c1c
24 changed files with 314 additions and 246 deletions

View File

@@ -9,13 +9,19 @@
namespace customerapi\controllers;
use common\models\Event;
use common\models\EventRegistration;
use customerapi\manager\EventRegistrationManager;
use customerapi\models\available\EventInterval;
use customerapi\models\available\EventAvailable;
use customerapi\models\DayToDisplay;
use customerapi\models\details\EventDetailsView;
use customerapi\models\details\EventRegistrationView;
use customerapi\models\details\EventTypeDetailsView;
use customerapi\models\details\RoomDetailsView;
use customerapi\models\details\TrainerDetailsView;
use DateTime;
use Exception;
use yii\db\ActiveRecord;
use yii\db\Query;
use yii\web\Response;
@@ -63,7 +69,7 @@ class EventController extends CustomerApiController
->innerJoinWith('trainer')
->innerJoinWith('eventType')
->innerJoinWith('room')
->joinWith('activeEventRegistrationsForCustomer')
// ->leftJoin('activeEventRegistrationsForCustomer')
->andWhere(['>=', 'event.start', $interval->firstActiveDate->getTimestamp()])
->andWhere(['<', 'event.start', (clone $interval->lastActiveDate)->modify('+1 day')->getTimestamp()])
->andWhere(['event.active' => '1'])
@@ -77,6 +83,7 @@ class EventController extends CustomerApiController
$eventDay->setTime(0, 0);
$event->reservationCount = $event->getEventRegistrationCount();
$event->hasFreeSeats = $event->reservationCount < $event->seat_count;
/** @var DayToDisplay $date */
foreach ($dates as $date) {
@@ -105,7 +112,7 @@ class EventController extends CustomerApiController
->innerJoinWith('trainer')
->innerJoinWith('eventType')
->innerJoinWith('room')
->joinWith('activeEventRegistrations')
->joinWith('activeEventRegistrations','event.id = activeEventRegistrations.id_event')
->andWhere(['>=', 'event.start', $interval->firstActiveDate->getTimestamp()])
->andWhere(['<', 'event.start', (clone $interval->lastActiveDate)->modify('+1 day')->getTimestamp()])
->andWhere(['event.active' => '1']);
@@ -121,11 +128,32 @@ class EventController extends CustomerApiController
{
$interval = EventInterval::createInterval();
try {
$query = EventDetailsView::find();
$query = Event::find();
$query = $this->buildEventQuery($query, $interval);
$query = $query->andWhere(['event.id' => $id_event]);
/** @var Event $event */
$event = $query->one();
return $this->asJson($event);
$result = new EventDetailsView();
$result->id = $event->id;
$result->start = $event->start;
$result->end = $event->end;
$result->seatCount = $event->seat_count;
$result->trainer = TrainerDetailsView::findOne($event->id_trainer);
$result->room = RoomDetailsView::findOne($event->id_room);
$result->eventType = EventTypeDetailsView::findOne($event->id_event_type);
$registrations = EventRegistrationView::find()->all();
$allActiveRegistrations = EventRegistration::filterActive($registrations);
$customerActiveRegistrations = EventRegistration::filterForCustomer($allActiveRegistrations,\Yii::$app->user->id);
$result->reservationCount = count($allActiveRegistrations);
$result->registrations = $customerActiveRegistrations;
$result->hasFreeSeats = $event->seat_count > count($allActiveRegistrations);
return $this->asJson($result);
} catch (Exception $e) {
throw new \yii\base\Exception($e->getMessage());
}