fitness-web/frontend/models/KeyToggleForm.php

162 lines
5.5 KiB
PHP

<?php
namespace frontend\models;
use common\models\DoorLog;
use common\models\Log;
use common\models\VirtualKey;
use /** @noinspection PhpUndefinedClassInspection */
yii\base\Model;
use common\models\CardKeyAssignment;
use common\models\Key;
use common\components\Helper;
use common\models\Card;
/** @noinspection PhpUndefinedClassInspection */
/**
* ContactForm is the model behind the contact form.
*
* @property \common\models\Card $card
* @property \common\models\Key $key
* @property \common\models\Key $keyModel
* @property \common\models\Card $keyCard
*
*/
class KeyToggleForm extends Model
{
public $key;
public $card;
public $customer;
public $keyModel;
public $action;
public $keyCard;
/**
* @inheritdoc
*/
public function rules()
{
return [
[['key'], 'safe' ]
];
}
/**
* @inheritdoc
*/
public function attributeLabels()
{
return [
];
}
public function readKey($keyNumber){
$query= Key::find();
$fixedKeyNumber = Helper::fixAsciiChars($keyNumber);
// add condition rfid key or number
$query->andWhere(['or',
['and',[ 'in','key.number' , [$fixedKeyNumber]],"trim(coalesce(key.number, '')) <>'' " ],
['and', ['in','key.rfid_key' ,[ $fixedKeyNumber ] ],"trim(coalesce(key.rfid_key, '')) <>'' "],
]);
return $query->one();
}
/**
*
*/
public function toggleKey(){
$query= Key::find();
$this->keyModel = $this->readKey($this->key);
//ha van ilyen kulcs
if ( isset($this->keyModel) ){
//find card - key assignments
/** @var /common/models/Card keyCard */
$this->keyCard = Card::find()->innerJoin('card_key_assignment','card.id_card = card_key_assignment.id_card')->andWhere('card_key_assignment.id_key = ' .$this->keyModel->id_key)->one();
$assignments = CardKeyAssignment::find()->andWhere(['id_key' => $this->keyModel->id_key])->all();
//if assignment found - we will unassign it
if ( count($assignments) > 0){
$this->revoke();
}else{
// if there is no assignment - assign it to the customer
$this->assign();
}
}else{
/** @noinspection PhpUndefinedClassInspection */
\Yii::$app->session->setFlash ( 'danger', 'Kulcs nem található!' );
}
}
public function revoke(){
if ( isset( $this->keyCard ) ){
CardKeyAssignment::deleteAll(['id_key' => $this->keyModel->id_key]);
$this->keyCard->setFlagsHasKey(false);
$this->keyCard->save(false);
\Yii::$app->session->setFlash ( 'success', 'Kulcs visszaadva!' );
$this->action = 'unassign';
Log::log([
'type' =>Log::$TYPE_KEY_ASSIGN,
'message' => 'Kulcs visszaadás - Kártya/Kulcs/Vendég:' .$this->keyCard->number ."/" .$this->keyModel->number . "/".$this->keyCard->customer->name,
'id_key' => $this->keyModel->id_key,
'id_customer' => $this->keyCard->customer->id_customer
]);
DoorLog::mkDoorLog(-1,$this->keyCard,$this->keyCard->customer,$this->keyModel );
}else{
\Yii::error("Key for assignment not found");
\Yii::$app->session->setFlash ( 'danger', 'Kulcs visszaadás hiba: kulcs nem található!' );
}
}
public function assign(){
if ( isset($this->card) && isset($this->customer) ){
$assignments = CardKeyAssignment::find()->andWhere(['id_card' => $this->card->id_card])->all();
if ( count($assignments) > 0 ){
/** @noinspection PhpUndefinedClassInspection */
\Yii::$app->session->setFlash ( 'danger', 'A vendégnél egyszerre csak egy kulcs lehet' );
}else{
$assignment = new CardKeyAssignment();
$assignment->id_card = $this->card->id_card;
$assignment->id_key = $this->keyModel->id_key;
/** @noinspection PhpUndefinedClassInspection */
$assignment->id_user = \Yii::$app->user->id;
$assignment->virtual_key = uniqid(null,true);
$assignment->save(false);
/** @noinspection PhpUndefinedClassInspection */
\Yii::$app->session->setFlash ( 'success', 'Kulcs kiadva!' );
$this->card->setFlagsHasKey(true);
$this->card->save(false);
Log::log([
'type' =>Log::$TYPE_KEY_ASSIGN,
'message' => 'Kulcs kiadás - Kártya/Kulcs/Vendég:' .$this->card->number ."/" .$this->keyModel->number . "/".$this->customer->name,
'id_key' => $this->card->id_card,
'id_customer' => $this->customer->id_customer
]);
DoorLog::mkDoorLog(-2,$this->card,$this->customer,$this->keyModel );
// delete all virtual key for this card
VirtualKey::deleteAll(['id_card' => $this->card->id_card]);
// create a new virtual key
$virtualKey = new VirtualKey();
$virtualKey->id_card = $this->card->id_card;
$virtualKey->id_key = $this->keyModel->id_key;
$virtualKey->number = uniqid(null,true);
$virtualKey->save(false);
}
}else{
/** @noinspection PhpUndefinedClassInspection */
\Yii::$app->session->setFlash ( 'danger', 'Nincs vendég kiválasztva vagy érvénytelen kártya!' );
}
}
}