255], ///////////////////// //cart ///////////////////// [['cart'], 'string', 'max' => 10] ]; } public function validateTicketType($attribute,$params){ $type = TicketType::findOne($this->id_ticket_type); $this->_ticketType = $type; if ( !isset($type)) { $this->addError($attribute,Yii::t('frontend/ticket' , 'Invalid ticket type' )); }else{ if ( $type->isInstallment()){ $bankAccount = trim($this->customer->bank_account); if ( !isset($bankAccount) || empty($bankAccount)){ $this->addError($attribute,"Nincs bankszámlaszám vagy érvénytelen"); return; } if ( !( strlen($bankAccount) == 16 || strlen($bankAccount) == 24 ) ){ $this->addError($attribute,"Vendég bankszámlaszáma nem 16 vagy 24 hosszú"); return; } //find $query = Contract::find(); $query->andWhere( [ 'id_customer' => $this->customer->id_customer ]); $query->andWhere( [ '>', 'expired_at' , Helper::getDateTimeString() ]); $query->andWhere( [ 'not in', 'flag', [Contract::$FLAG_DELETED ] ]); $contracts = $query->all(); if ( count($contracts) > 0 ){ $this->addError($attribute,"A vendégnek már van érvényes vagy felbontott szerződése!"); } } } } public function validateAccount($attribute,$params){ $this->_account = Account::findOne($this->id_account); if ( !isset($this->_account )) { $this->addError($attribute,Yii::t('frontend/ticket' , 'Invalid transfer' )); } } public function validateDiscount($attribute,$params){ $this->_discount = Discount::findOne($this->id_discount); if ( !isset($this->_discount)) { $this->addError($attribute,Yii::t('frontend/ticket' , 'Invalid discount' )); } } public function beforeSave($insert){ $result = parent::beforeSave($insert); if ( $result ){ if ($insert){ $ticketType = TicketType::findOne($this->id_ticket_type); if ( isset($ticketType) && $ticketType->isInstallment() ){ $this->part = 0; $this->part_paid = 0; $this->part_count = $ticketType->installment_count; }else{ $this->part_count = 0; } } } return $result; } public function afterSave($insert, $changedAttributes){ $this->addTransfer(); $this->appendToUserCart(); $this->appendToCustomerCart(); $this->addContract($insert); $this->updateCardFlag(); } protected function updateCardFlag(){ Card::updateCardFlagTicket($this->id_card); } public function addContract($insert){ if ($insert){ $ticketType = TicketType::findOne($this->id_ticket_type); if ( isset($ticketType) && $ticketType->isInstallment() ){ $contract = new Contract(); $contract->id_customer = $this->customer->id_customer; $contract->id_user = \Yii::$app->user->id; $contract->status = Contract::$STATUS_PAID; $contract->flag = Contract::$FLAG_ACTIVE; $contract->part_count = $ticketType->installment_count; $contract->part_paid = 0; $contract->part_required = 0; $contract->expired_at = date('Y-m-d', strtotime("today +12 month -1 day")); $contract->id_ticket_type = $this->id_ticket_type; $contract->id_discount = $this->id_discount; $contract->save(); $requests = TicketInstallmentRequest::createInstallments($this, $ticketType, $this->customer,$contract); foreach ($requests as $request){ $request->save(false); } } } } protected function addTransfer(){ //$transfer = Transfer::createTicketTransfer($this->_account, $this->_discount, null, 1, $this); $transfer = new Transfer(); $transfer->type = Transfer::TYPE_TICKET; $transfer->direction = Transfer::DIRECTION_IN; $transfer->id_object = $this->id_ticket; $transfer->item_price = $this->_ticketType->price_brutto; $transfer->count = 1; if (isset ( $this->_discount )) { $transfer->id_discount = $this->_discount->id_discount; } $transfer->money = $this->price_brutto; $transfer->id_account = $this->_account->id_account; $status = Transfer::STATUS_PAID; if ( $this->isAppendToUserCart() ){ $status = Transfer::STATUS_NOT_PAID; }else if ( $this->isAppendToCustomerCart() ){ $status = Transfer::STATUS_NOT_PAID; $customer = $this->customer; }else { $status = Transfer::STATUS_PAID; $transfer->paid_at = date('Y-m-d H:i:s' ) ; $transfer->paid_by = \Yii::$app->user->id; } $transfer->status = $status; $transfer->payment_method = $this->payment_method; if ( isset($this->comment)){ $transfer->comment = $this->comment; } $transfer->id_user = \Yii::$app->user->id; $transfer->id_customer = $this->customer->id_customer; if ( !$transfer->save(false) ){ \Yii::error("Nem sikerült mentenei a bérlet tranzakció objektumot!"); throw new \Exception("Nem sikerült menteni a bérlet tranzakciót"); } $this->_transfer = $transfer; } protected function addToCart(){ if ( $this->isAddToCart()){ $item = new UserSoldItem(); $item->id_transfer = $this->_transfer->id_transfer; $item->id_user = \Yii::$app->user->id; $item->save(false); } } public function isAppendToUserCart(){ $result = false; if ( isset( $this->cart ) && $this->cart == 'user' ){ $result = true; } return $result; } public function isAppendToCustomerCart(){ $result = false; if ( isset( $this->cart ) && $this->cart == 'customer' ){ $result = true; } return $result; } public function appendToUserCart(){ if ( $this->isAppendToUserCart() ){ $item = new UserSoldItem(); $item->id_transfer = $this->_transfer->id_transfer; $item->id_user = \Yii::$app->user->id; if ( !$item->save(false) ){ \Yii::error("Nem sikerült menteni a bérletet! Recepció kosár hozzárendelés sikertelen!"); throw new \Exception("Nem sikerült menteni a bérletet! Recepció kosár hozzárendelés sikertelen!"); } } } public function appendToCustomerCart(){ if ( $this->isAppendToCustomerCart() && isset($this->customer) ){ $item = new ShoppingCart(); $item->id_customer = $this->customer->id_customer; $item->id_transfer = $this->_transfer->id_transfer; if ( !$item->save(false) ){ \Yii::error("Nem sikerült menteni a bérletet! Vendég kosár hozzárendelés sikertelen!"); throw new \Exception("Nem sikerült menteni a bérletet! Vendég kosár hozzárendelés sikertelen!"); } } } }