improve customer api & gui

This commit is contained in:
Roland Schneider
2021-10-02 22:21:14 +02:00
parent 1d065cc729
commit f98dcb656f
44 changed files with 893 additions and 298 deletions

View File

@@ -9,12 +9,18 @@
namespace customerapi\controllers;
use common\helpers\AppArrayHelper;
use common\models\Event;
use common\models\EventRegistration;
use common\models\EventType;
use common\models\Trainer;
use common\modules\event\manager\EventManager;
use customerapi\manager\EventRegistrationManager;
use customerapi\models\available\EventInterval;
use customerapi\models\available\EventAvailable;
use customerapi\models\available\EventTypeAvailable;
use customerapi\models\available\RoomAvailable;
use customerapi\models\available\TrainerAvailable;
use customerapi\models\DayToDisplay;
use customerapi\models\details\EventDetailsView;
use customerapi\models\details\EventRegistrationView;
@@ -23,6 +29,7 @@ use customerapi\models\details\RoomDetailsView;
use customerapi\models\details\TrainerDetailsView;
use DateTime;
use Exception;
use yii\db\ActiveQuery;
use yii\db\Query;
use yii\web\Response;
@@ -58,37 +65,42 @@ class EventController extends \customerapi\controllers\CustomerApiController
$dates[] = $dayToDisplay;
}
// get events between active dates
$query = EventAvailable::find();
$query = $query->select(
[
'{{event}}.*',
// 'COUNT({{event_registration}}.id) AS reservationCount'
]);
$eventManager = new EventManager();
$events = $eventManager->findActiveEvents($interval);
$trainers = AppArrayHelper::objectArrayToMapById( TrainerAvailable::find()->all() );
$rooms = AppArrayHelper::objectArrayToMapById( RoomAvailable::find()->all() );
$eventTypes = AppArrayHelper::objectArrayToMapById( EventTypeAvailable::find()->all() );
$paramEventStartMax = clone $interval->lastActiveDate;
$paramEventStartMax = $paramEventStartMax->modify('+1 day');
$paramEventStartMax = $paramEventStartMax->getTimestamp();
$events = $query
->innerJoinWith('trainer')
->innerJoinWith('eventType')
->innerJoinWith('room')
->andWhere(['>=', 'event.start', $interval->firstActiveDate->getTimestamp()])
->andWhere(['<', 'event.start', $paramEventStartMax])
->andWhere(['event.active' => '1'])
->all();
$availableEvents = [];
/** @var $event /common/models/Event $event */
foreach ($events as $event ){
$availableEvent = EventAvailable::fromEvent($event);
$availableEvent->trainer = $trainers[$event->id_trainer];
$availableEvent->room = $rooms[$event->id_room];
$availableEvent->eventType = $eventTypes[$event->id_event_type];
$totalRegistrations = $eventManager->findActiveRegistrations($event->id);
$customerRegistration = EventRegistration::filterForCustomer($totalRegistrations,\Yii::$app->user->id);
$availableEvent->registrationCount = count($totalRegistrations);
$availableEvent->eventRegistrations = $customerRegistration;
$availableEvent->hasFreeSeats = $availableEvent->registrationCount < $availableEvent->seat_count;
$availableEvents[] = $availableEvent;
}
// set events per day
/** @var EventAvailable $event */
foreach ($events as $event) {
foreach ($availableEvents as $event) {
$eventDay = new DateTime();
$eventDay->setTimestamp($event->start);
$eventDay->setTime(0, 0);
$event->reservationCount = $event->getEventRegistrationCount();
$event->hasFreeSeats = $event->reservationCount < $event->seat_count;
/** @var DayToDisplay $date */
foreach ($dates as $date) {
if ($date->date === $eventDay->getTimestamp()) {
@@ -122,11 +134,13 @@ class EventController extends \customerapi\controllers\CustomerApiController
$paramEventStartMax = $paramEventStartMax->modify('+1 day');
$paramEventStartMax = $paramEventStartMax->getTimestamp();
/** @var ActiveQuery $query */
return $query
->innerJoinWith('trainer')
->innerJoinWith('eventType')
->innerJoinWith('room')
->joinWith('activeEventRegistrations','event.id = activeEventRegistrations.id_event')
->joinWith('activeEventRegistrations')
->andWhere(['>=', 'event.start', $interval->firstActiveDate->getTimestamp()])
->andWhere(['<', 'event.start', $paramEventStartMax])
->andWhere(['event.active' => '1']);
@@ -141,14 +155,10 @@ class EventController extends \customerapi\controllers\CustomerApiController
public function actionEvent($id_event)
{
$interval = EventInterval::createInterval();
$manger = new EventManager();
try {
$query = Event::find();
$query = $this->buildEventQuery($query, $interval);
$query = $query->andWhere(['event.id' => $id_event]);
/** @var Event $event */
$event = $query->one();
$event = $manger->findActiveEvent($id_event,$interval);
$result = new EventDetailsView();
$result->id = $event->id;
$result->start = $event->start;