20], [['rfid_key'], 'string', 'max' => 25], [['number'], 'unique' ], [['rfid_key','number'] , 'validateAscii'] ]; } /** * @inheritdoc */ public function attributeLabels() { return [ 'id_card' => Yii::t('common/card', 'Id Card'), 'number' => Yii::t('common/card', 'Number'), 'rfid_key' => Yii::t('common/card', 'RFID key'), 'status' => Yii::t('common/card', 'Status'), 'type' => Yii::t('common/card', 'Type'), 'created_at' => Yii::t('common/card', 'Created At'), 'updated_at' => Yii::t('common/card', 'Updated At'), ]; } public function validateAscii($attribute,$params){ if ( !$this->hasErrors($this->$attribute)){ $this->$attribute = Helper::fixAsciiChars($this->$attribute); Yii::info(" $attribute converted to: " . $this->$attribute); } } static function statuses() { return [ self::STATUS_ACTIVE => Yii::t('common/card', 'Active'), self::STATUS_DELETED => Yii::t('common/card', 'Inactive'), ]; } public function getStatusHuman(){ $result = null; $s = self::statuses($this->status); if ( array_key_exists($this->status, $s)){ $result = $s[$this->status]; } return $result; } static function types() { return [ self::TYPE_RFID => Yii::t('common/card', 'RFID'), self::TYPE_QRCODE => Yii::t('common/card', 'QRCODE'), self::TYPE_BARCODE => Yii::t('common/card', 'BARCODE'), self::TYPE_OLD => Yii::t('common/card', 'OLD'), self::TYPE_EMPLOYEE => Yii::t('common/card', 'Munkatárs'), ]; } public function getTypeHuman(){ $result = null; $s = self::types($this->type); if ( array_key_exists($this->type, $s)){ $result = $s[$this->type]; } return $result; } public function isInactive(){ return $this->status == self::STATUS_DELETED; } 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'); }else{ $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; $customer = $this->customer; if ( $this->customer != null){ $name = $this->customer->name; } return $name; } public static function addCardNumberCondition($query,$number, $field_number = "card.number",$field_rfid_key = "card.rfid_key"){ $query->andWhere(['or', ['and',[ 'in',$field_number , [$number]],"trim(coalesce(card.number, '')) <>'' " ], ['and', ['in',$field_rfid_key ,[ $number ] ],"trim(coalesce(card.rfid_key, '')) <>'' "], ]); } }