implement registration
This commit is contained in:
97
common/manager/EventRegistrationManager.php
Normal file
97
common/manager/EventRegistrationManager.php
Normal file
@@ -0,0 +1,97 @@
|
||||
<?php
|
||||
namespace common\manager;
|
||||
use common\models\Card;
|
||||
use common\models\Event;
|
||||
use common\models\EventRegistration;
|
||||
use yii\web\BadRequestHttpException;
|
||||
use yii\web\NotFoundHttpException;
|
||||
use yii\web\ServerErrorHttpException;
|
||||
|
||||
/**
|
||||
* Created by IntelliJ IDEA.
|
||||
* User: rocho
|
||||
* Date: 2018.12.17.
|
||||
* Time: 6:12
|
||||
*/
|
||||
|
||||
class EventRegistrationManager extends \yii\base\Object
|
||||
{
|
||||
const CARD_NOT_FOUND = 1;
|
||||
const CUSTOMER_NOT_FOUND = 2;
|
||||
const TICKET_NOT_FOUND = 3;
|
||||
const NO_FREE_SEATS = 4;
|
||||
const EVENT_TYPE_NOT_FOUND = 5;
|
||||
const TICKET_INSUFFICIENT = 6;
|
||||
|
||||
public static $STATES = [
|
||||
self::CARD_NOT_FOUND => "CARD_NOT_FOUND",
|
||||
self::CUSTOMER_NOT_FOUND => "CUSTOMER_NOT_FOUND",
|
||||
self::TICKET_NOT_FOUND => "TICKET_NOT_FOUND",
|
||||
self::NO_FREE_SEATS => "NO_FREE_SEATS",
|
||||
self::EVENT_TYPE_NOT_FOUND => "EVENT_TYPE_NOT_FOUND",
|
||||
self::TICKET_INSUFFICIENT => "TICKET_INSUFFICIENT",
|
||||
|
||||
|
||||
];
|
||||
|
||||
/**
|
||||
* @param \common\models\CardEventRegistrationForm $cardEventForm
|
||||
* @throws NotFoundHttpException
|
||||
* @throws BadRequestHttpException
|
||||
* @throws ServerErrorHttpException
|
||||
*/
|
||||
public function registerCard($cardEventForm){
|
||||
|
||||
if ( $cardEventForm->validate() ){
|
||||
|
||||
/** @var \common\models\Card $card */
|
||||
$card = Card::readCard($cardEventForm->card_number,false);
|
||||
if ( !isset($card )){
|
||||
throw new NotFoundHttpException("Card not found: " . $cardEventForm->card_number,self::CARD_NOT_FOUND);
|
||||
}
|
||||
|
||||
if ( $card->isFree() ){
|
||||
throw new NotFoundHttpException("Customer not found", self::CUSTOMER_NOT_FOUND);
|
||||
}
|
||||
|
||||
$activeTickets = $card->getActiveTickets();
|
||||
if ( sizeof($activeTickets) == 0 ){
|
||||
throw new NotFoundHttpException("Ticket not found", self::TICKET_NOT_FOUND);
|
||||
}
|
||||
|
||||
/** @var \common\models\Event $event */
|
||||
$event = Event::find()->andWhere(['id' => $cardEventForm->event_id])->one();
|
||||
if ( !isset($event)){
|
||||
throw new NotFoundHttpException("Event not found: " . $cardEventForm->event_id);
|
||||
}
|
||||
|
||||
if ( !$event->hasFreeSeats() ){
|
||||
throw new BadRequestHttpException("No free seats", self::NO_FREE_SEATS);
|
||||
}
|
||||
|
||||
$eventType = $event->eventType;
|
||||
|
||||
if ( !isset($eventType) ){
|
||||
throw new ServerErrorHttpException("Event type not found", self::EVENT_TYPE_NOT_FOUND);
|
||||
}
|
||||
|
||||
$selectedTicket = $eventType->findTicketAllowingEventType($activeTickets);
|
||||
|
||||
if ( !isset($selectedTicket) ){
|
||||
throw new NotFoundHttpException("Ticket not found", self::TICKET_INSUFFICIENT);
|
||||
}
|
||||
|
||||
$registration = new EventRegistration();
|
||||
$registration->id_event = $event->id;
|
||||
$registration->id_card = $card->id_card;
|
||||
$registration->id_ticket = $selectedTicket->id_ticket;
|
||||
$registration->save(false);
|
||||
|
||||
$cardEventForm->registration = $registration;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
32
common/messages/hu/event-registration.php
Normal file
32
common/messages/hu/event-registration.php
Normal file
@@ -0,0 +1,32 @@
|
||||
<?php
|
||||
/**
|
||||
* Created by IntelliJ IDEA.
|
||||
* User: rocho
|
||||
* Date: 2018.12.06.
|
||||
* Time: 7:55
|
||||
*/
|
||||
|
||||
|
||||
return [
|
||||
'ID' => 'ID',
|
||||
'Name' => 'Név',
|
||||
'Seat Count' => 'Férőhelyek száma',
|
||||
'Create Event Registration' => 'Új regisztráció',
|
||||
'Update Event Registration:' => 'Regisztráció módosítása:',
|
||||
|
||||
'Event Registrations' => 'Regisztrációk',
|
||||
'Created At' => 'Létrehozási dátum, idő',
|
||||
'Updated At' => 'Módosítási dátum, idő',
|
||||
'Search' => 'Keres',
|
||||
'Create' => 'Mentés',
|
||||
'Update' => 'Módosít',
|
||||
'Delete' => 'Törlés',
|
||||
'All' => 'Mind',
|
||||
'Unknown Error' => "Ismeretlen Hiba",
|
||||
'CARD_NOT_FOUND' => 'Kártya nem található',
|
||||
'CUSTOMER_NOT_FOUND' => 'Vendég nem található',
|
||||
'TICKET_NOT_FOUND' => 'Nincs aktív bérlet',
|
||||
'NO_FREE_SEATS' => 'Nincs szabad hely',
|
||||
'EVENT_TYPE_NOT_FOUND' => 'Az esemény típusa ismereten',
|
||||
'TICKET_INSUFFICIENT' => 'Nem található az eseményre jogosító aktív bérlet',
|
||||
];
|
||||
@@ -24,7 +24,7 @@ use common\components\Helper;
|
||||
*/
|
||||
class Card extends \common\models\BaseFitnessActiveRecord
|
||||
{
|
||||
|
||||
|
||||
const STATUS_DELETED = 0;
|
||||
const STATUS_ACTIVE = 10;
|
||||
const STATUS_INACTIVE = 20;
|
||||
@@ -34,8 +34,8 @@ class Card extends \common\models\BaseFitnessActiveRecord
|
||||
const TYPE_BARCODE = 30;
|
||||
const TYPE_OLD = 40;
|
||||
const TYPE_EMPLOYEE = 50;
|
||||
|
||||
|
||||
|
||||
|
||||
public static $FLAG_TICKET = 0; //has valid ticket
|
||||
public static $FLAG_DOOR = 1; //door in/out order
|
||||
public static $FLAG_KEY = 2; //key status
|
||||
@@ -121,8 +121,8 @@ class Card extends \common\models\BaseFitnessActiveRecord
|
||||
'updated_at' => Yii::t('common/card', 'Updated At'),
|
||||
];
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
public function validateAscii($attribute, /** @noinspection PhpUnusedParameterInspection */
|
||||
$params){
|
||||
if ( !$this->hasErrors($this->$attribute)){
|
||||
@@ -131,7 +131,7 @@ class Card extends \common\models\BaseFitnessActiveRecord
|
||||
Yii::info(" $attribute converted to: " . $this->$attribute);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static function statuses() {
|
||||
/** @noinspection PhpUndefinedClassInspection */
|
||||
return [
|
||||
@@ -140,7 +140,7 @@ class Card extends \common\models\BaseFitnessActiveRecord
|
||||
self::STATUS_INACTIVE => 'Inaktív',
|
||||
];
|
||||
}
|
||||
|
||||
|
||||
public function getStatusHuman(){
|
||||
$result = null;
|
||||
$s = self::statuses();
|
||||
@@ -155,7 +155,7 @@ class Card extends \common\models\BaseFitnessActiveRecord
|
||||
public static function toTypeName($type , $def = ""){
|
||||
return Helper::getArrayValue(self::types(), $type, $def);
|
||||
}
|
||||
|
||||
|
||||
static function types() {
|
||||
/** @noinspection PhpUndefinedClassInspection */
|
||||
return [
|
||||
@@ -166,7 +166,7 @@ class Card extends \common\models\BaseFitnessActiveRecord
|
||||
self::TYPE_EMPLOYEE => Yii::t('common/card', 'Munkatárs'),
|
||||
];
|
||||
}
|
||||
|
||||
|
||||
public function getTypeHuman(){
|
||||
$result = null;
|
||||
$s = self::types();
|
||||
@@ -175,20 +175,24 @@ class Card extends \common\models\BaseFitnessActiveRecord
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
|
||||
|
||||
public function isInactive(){
|
||||
return $this->status == self::STATUS_DELETED;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Load card from the DB , where the number equals with card number or RFID number
|
||||
* @param number|string $number the card number or the RFID number
|
||||
* @param null|boolean $free optional. if set, append free or not free condition.
|
||||
* @return \common\models\Card|null the card or null, if not found with given conditions
|
||||
*/
|
||||
public static function readCard($number,$free = null){
|
||||
$card = null;
|
||||
$query = Card::find()
|
||||
->leftJoin(Customer::tableName(), 'card.id_card = customer.id_customer_card ' );
|
||||
// ->andWhere(['number'=>$number ]);
|
||||
|
||||
|
||||
Card::addCardNumberCondition($query, $number);
|
||||
|
||||
|
||||
|
||||
if ( isset($free) ){
|
||||
if ( $free == true){
|
||||
$query->andWhere('customer.id_customer is null');
|
||||
@@ -196,20 +200,20 @@ class Card extends \common\models\BaseFitnessActiveRecord
|
||||
$query->andWhere('customer.id_customer is not null');
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
$cards = $query->all();
|
||||
|
||||
|
||||
if ( count($cards) == 1){
|
||||
$card = $cards[0];
|
||||
}
|
||||
return $card;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
public function getCustomer(){
|
||||
return $this->hasOne(Customer::className(), ['id_customer_card' => 'id_card']);
|
||||
}
|
||||
|
||||
|
||||
public function getCustomerName(){
|
||||
$name = null;
|
||||
if ( $this->customer != null){
|
||||
@@ -232,7 +236,7 @@ class Card extends \common\models\BaseFitnessActiveRecord
|
||||
['and', ['in',$field_rfid_key ,[ $number ] ],"trim(coalesce(card.rfid_key, '')) <>'' "],
|
||||
]);
|
||||
}
|
||||
|
||||
|
||||
public static function updateCardFlagTicket($id){
|
||||
if ( !isset($id)){
|
||||
return ;
|
||||
@@ -255,7 +259,7 @@ class Card extends \common\models\BaseFitnessActiveRecord
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
public function beforeSave($insert) {
|
||||
if (parent::beforeSave($insert)){
|
||||
$this->flag = Helper::setBit( $this->flag , Card::$FLAG_STATUS, ( $this->status != Card::STATUS_ACTIVE ) );
|
||||
@@ -263,8 +267,8 @@ class Card extends \common\models\BaseFitnessActiveRecord
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
public function getFlagText(){
|
||||
return Helper::getArrayValue(DoorLog::getCardFlagTexts(), $this->validity, "Ismeretlen");
|
||||
}
|
||||
@@ -317,4 +321,12 @@ class Card extends \common\models\BaseFitnessActiveRecord
|
||||
\Yii::$app->db->createCommand(self::$SQL_UPDATE_FLAG_STATUS_ACTIVE)->execute();
|
||||
}
|
||||
|
||||
public function isFree(){
|
||||
return !isset($this->customer);
|
||||
}
|
||||
|
||||
public function getActiveTickets(){
|
||||
return Ticket::readActive($this);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
33
common/models/CardEventRegistrationForm.php
Normal file
33
common/models/CardEventRegistrationForm.php
Normal file
@@ -0,0 +1,33 @@
|
||||
<?php
|
||||
namespace common\models;
|
||||
use common\components\Helper;
|
||||
|
||||
/**
|
||||
* Created by IntelliJ IDEA.
|
||||
* User: rocho
|
||||
* Date: 2018.12.17.
|
||||
* Time: 6:14
|
||||
*/
|
||||
|
||||
class CardEventRegistrationForm extends \yii\base\Model
|
||||
{
|
||||
public $card_number;
|
||||
public $event_id;
|
||||
public $registration;
|
||||
|
||||
public function rules()
|
||||
{
|
||||
return [
|
||||
[['card_number'], 'validateFormat' ]
|
||||
];
|
||||
}
|
||||
|
||||
public function validateFormat(){
|
||||
$this->card_number = Helper::fixAsciiChars( $this->card_number );
|
||||
}
|
||||
|
||||
public function getIsNewRecord(){
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -9,14 +9,16 @@ use yii\helpers\ArrayHelper;
|
||||
/**
|
||||
* This is the model class for table "event".
|
||||
*
|
||||
// * @property integer $id
|
||||
* @property integer $id
|
||||
* @property integer $start
|
||||
* @property integer $end
|
||||
* @property integer $id_room
|
||||
* @property integer $id_trainer
|
||||
* @property integer $id_event_type
|
||||
* @property integer $seat_count
|
||||
* @property string $created_at
|
||||
* @property string $updated_at
|
||||
* @property \common\models\EventType eventType
|
||||
*/
|
||||
class Event extends \yii\db\ActiveRecord
|
||||
{
|
||||
@@ -73,6 +75,9 @@ class Event extends \yii\db\ActiveRecord
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @throws \Exception
|
||||
*/
|
||||
public function afterFind()
|
||||
{
|
||||
parent::afterFind(); // TODO: Change the autogenerated stub
|
||||
@@ -104,8 +109,31 @@ class Event extends \yii\db\ActiveRecord
|
||||
return $this->hasOne(Trainer::className(),['id' => 'id_trainer']);
|
||||
}
|
||||
|
||||
public function getRoom(){
|
||||
/**
|
||||
* @return Room|\yii\db\ActiveQuery
|
||||
*/
|
||||
public function getRoom() {
|
||||
return $this->hasOne(Room::className(),['id' => 'id_room']);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return \common\models\EventRegistration[]|\yii\db\ActiveQuery
|
||||
*/
|
||||
public function getEventRegistrations(){
|
||||
return $this->hasMany(EventRegistration::className(),['id_event' => 'id']);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return \common\models\EventRegistration[]|\yii\db\ActiveQuery
|
||||
*/
|
||||
public function getEventRegistrationCount(){
|
||||
return sizeof($this->getEventRegistrations());
|
||||
}
|
||||
|
||||
public function hasFreeSeats(){
|
||||
$registrationCount = $this->getEventRegistrations() ;
|
||||
|
||||
return $registrationCount < $this->seat_count ;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -10,6 +10,8 @@ use Yii;
|
||||
* @property integer $id
|
||||
* @property integer $id_event
|
||||
* @property integer $id_customer
|
||||
* @property integer $id_card
|
||||
* @property integer $id_ticket
|
||||
* @property string $created_at
|
||||
* @property string $updated_at
|
||||
* @property string $canceled_at
|
||||
@@ -25,14 +27,12 @@ class EventRegistration extends \yii\db\ActiveRecord
|
||||
}
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
* @inheritdocd
|
||||
*/
|
||||
public function rules()
|
||||
{
|
||||
return [
|
||||
[['id_event', 'id_customer'], 'integer'],
|
||||
[['created_at', 'updated_at', 'canceled_at'], 'required'],
|
||||
[['created_at', 'updated_at', 'canceled_at'], 'safe']
|
||||
];
|
||||
}
|
||||
|
||||
|
||||
@@ -76,4 +76,20 @@ class EventType extends \yii\db\ActiveRecord
|
||||
}
|
||||
return ArrayHelper::merge($extra,$items);
|
||||
}
|
||||
|
||||
/**
|
||||
* Find the first ticket, which allows this event type
|
||||
* @param \common\models\Ticket[] $tickets the list of active tickets
|
||||
* @return Ticket|null
|
||||
*/
|
||||
public function findTicketAllowingEventType($tickets){
|
||||
if (!isset($tickets)){
|
||||
return null;
|
||||
}
|
||||
if ( sizeof($tickets) == 0 ){
|
||||
return null;
|
||||
}
|
||||
// TODO: implement bossiness logic to select ticket
|
||||
return $tickets[0];
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user