TimestampBehavior::className(), 'value' => function(){ return date('Y-m-d H:i:s' ); } ], // [ // 'class' => AccountAwareBehavior::className(), // ], // [ // 'class' => UserAwareBehavior::className(), // ], ], parent::behaviors()); } /** * @inheritdoc */ public static function tableName() { return 'transfer'; } /** * @inheritdoc */ public function rules() { return [ [['id_discount', 'id_currency', 'id_object', 'status', 'type', 'item_price', 'count', 'money', 'money_currency', 'rate', 'id_user'], 'integer'], [['created_at', 'updated_at'], 'safe'], [['comment'], 'string', 'max' => 255] ]; } /** * @inheritdoc */ public function attributeLabels() { return [ 'id_transfer' => Yii::t('common/transfer', 'Id Transfer'), 'id_account' => Yii::t('common/transfer', 'Account'), 'id_discount' => Yii::t('common/transfer', 'Id Discount'), 'id_currency' => Yii::t('common/transfer', 'Id Currency'), 'id_object' => Yii::t('common/transfer', 'Id Object'), 'objectName' => Yii::t('common/transfer', 'Id Object'), 'status' => Yii::t('common/transfer', 'Status'), 'type' => Yii::t('common/transfer', 'Type'), 'item_price' => Yii::t('common/transfer', 'Item Price'), 'count' => Yii::t('common/transfer', 'Count'), 'money' => Yii::t('common/transfer', 'Money'), 'money_currency' => Yii::t('common/transfer', 'Money Currency'), 'rate' => Yii::t('common/transfer', 'Rate'), 'id_user' => Yii::t('common/transfer', 'Id User'), 'comment' => Yii::t('common/transfer', 'Comment'), 'created_at' => Yii::t('common/transfer', 'Created At'), 'updated_at' => Yii::t('common/transfer', 'Updated At'), ]; } public function getUser(){ return $this->hasOne( User::className(), ["id" =>"id_user" ] ); } public function getProduct(){ return $this->hasOne( Product::className(), ["id_product" =>"id_product" ] )->via('sale'); } public function getMoneyMovement(){ return $this->hasOne( MoneyMovement::className(), ["id_money_movement" =>"id_object" ] ); } public function getTicket(){ return $this->hasOne( Ticket::className(), ["id_ticket" =>"id_object", ] ) ; } public function getTicketType(){ return $this->hasOne( TicketType::className(), ["id_ticket_type" =>"id_ticket_type" ] )->via('ticket') ; } public function getAccount(){ return $this->hasOne( Account::className(), ["id_account" =>"id_account" ] ) ; } public function getCurrency(){ return $this->hasOne( Currency::className(), ["id_currency" =>"id_currency" ] ); } public function getDiscount(){ return $this->hasOne( Discount::className(), ["id_discount" =>"id_discount" ] ); } public function getUserSoldItem(){ return $this->hasOne( UserSoldItem::className(), ["id_transfer" =>"id_transfer" ] ); } public function getSale(){ return $this->hasOne( Sale::className(), ["id_sale" =>"id_object" ] ) ; } public function getObjectName(){ $result = ""; if ( $this->type == Transfer::TYPE_TICKET ){ $result = $this->ticketName; }else if ( $this->type == Transfer::TYPE_PRODUCT ){ $result = $this->productName; }else if ( $this->type == Transfer::TYPE_MONEY_MOVEMENT_OUT ){ $result = "Pénz kivétel - " . $this->moneyMovement->name; } return $result; } public function getUserName(){ $result = ""; $user = $this->user; if (isset($this->user)){ $result = $user->username; } return $result; } public function getProductName(){ $result = ""; $product = $this->product; if (isset($product)){ $result = $product->name; } return $result; } public function getTicketName(){ $result = ""; $ticket = $this->ticket; if (isset($ticket)){ $result = $this->ticket->ticketTypeName; } return $result; } public function getAccountName(){ $result = ""; $account = $this->account; if (isset($account)){ $result = $account->name; } return $result; } public function getTransferTypeName(){ $result = ""; if ( $this->type == Transfer::TYPE_TICKET ){ $result = Yii::t('common/transfer','Ticket'); }else if ( $this->type == Transfer::TYPE_PRODUCT ){ $result = Yii::t('common/transfer','Product'); }else if ( $this->type == Transfer::TYPE_MONEY_MOVEMENT_OUT ){ $result = Yii::t('common/transfer','Money movement'); } return $result; } public function getSaleName(){ $result = ""; $sale = $this->sale; if (isset($sale)){ $result = $sale->name; } return $result; } public function getSignedMoney(){ $m = 1; $result = $this->money; if ( $this->direction == self::DIRECTION_OUT ){ $m = -1; } $result = $result * $m; return $result; } public function toProductSoldString(){ $s = ""; $s .= $this->count; $s .= " " . Yii::t('frontend/transfer', 'pieces') . " "; $s .= $this->product->name; $s .= " - "; $s .= $this->account->name; return $s; } /** * @param $account common\models\Account * @param $discount common\models\Discount * @param $currency common\models\Currency * @param $product common\models\Product * */ public static function createProductTransfer($sale,$account, $discount, $currency, $count,$product , $status = Transfer::STATUS_PAID){ $transfer = new Transfer(); $transfer->type = Transfer::TYPE_PRODUCT; $transfer->id_object = $sale->id_sale; $transfer->item_price = $product->sale_price; $totalPrice = $transfer->item_price; $transfer->count = $count; $totalPrice = $totalPrice * $count; if ( isset( $discount ) ){ $transfer->id_discount = $discount->id_discount; $totalPrice = Discount::applyDiscount( $totalPrice, $discount); } $transfer->money = $totalPrice; if ( isset( $currency ) ){ $transfer->rate = $currency->rate; $transfer->money_currency = Currency::applyCurrency($totalPrice, $currency); } $transfer->direction = Transfer::DIRECTION_IN; $transfer->status = $status; $transfer->id_account = $account->id_account; return $transfer; } /** * @param $account common\models\Account * @param $discount common\models\Discount * @param $currency common\models\Currency * @param $moneyMovement common\models\MoneyMovement * */ public static function createMoneyMovementOutTransfer($account , $moneyMovement ){ $transfer = new Transfer(); $transfer->type = Transfer::TYPE_MONEY_MOVEMENT_OUT; $transfer->status = Transfer::STATUS_PAID; $transfer->direction = Transfer::DIRECTION_OUT; $transfer->count = null; $transfer->id_object = $moneyMovement->id_money_movement; $transfer->money = $moneyMovement->money; $transfer->id_account = $account->id_account; return $transfer; } /** * @param $account common\models\Account * @param $discount common\models\Discount * @param $currency common\models\Currency * @param $ticket common\models\Ticket * */ public static function createTicketTransfer($account, $discount, $currency, $count,$ticket ){ $transfer = new Transfer(); $transfer->type = Transfer::TYPE_TICKET; $transfer->id_object = $ticket->id_ticket; $transfer->item_price = $ticket->price_brutto; $totalPrice = $transfer->item_price; $transfer->count = $count; $totalPrice = $totalPrice * $count; if ( isset( $discount ) ){ $transfer->id_discount = $discount->id_discount; $totalPrice = Discount::applyDiscount( $totalPrice, $discount); } $transfer->money = $totalPrice; if ( isset( $currency ) ){ $transfer->rate = $currency->rate; $transfer->money_currency = Currency::applyCurrency($totalPrice, $currency); } $transfer->id_account = $account->id_account; return $transfer; } public static function modelsToArray($transfers,$default = []){ if ( $transfers == null ){ return $default; } return ArrayHelper::toArray($transfers, [ 'common\models\Transfer' => [ 'id_transfer', 'item_price', 'count', 'money', 'money_currency', 'time' => function ($transfer){ return Yii::$app->formatter->asTime($transfer->created_at); }, 'account_name' => function ($transfer) { return $transfer->account->name; }, 'product_name' => function ($transfer) { $result = ""; if ( $transfer->type == Transfer::TYPE_TICKET ){ $result = $transfer->ticket->ticketTypeName; }else if ( $transfer->type == Transfer::TYPE_PRODUCT ){ $result = $transfer->product->name; }else if ( $transfer->type == Transfer::TYPE_MONEY_MOVEMENT_OUT ){ $result = "Pénzmozgás"; } return $result; }, 'category' => function ($transfer) { if ( $transfer->type == Transfer::TYPE_TICKET ){ return Yii::t('frontend/transfer','Ticket'); }else if ( $transfer->type == Transfer::TYPE_PRODUCT ){ return $transfer->product->productCategoryName; }else if ( $transfer->type == Transfer::TYPE_MONEY_MOVEMENT_OUT ){ return "Pénzmozgás"; } }, ], ]); } public static function readUserSoldTransfers($user){ $transfers = []; $query = Transfer::find(); $query->innerJoinWith('userSoldItem'); $query->andWhere(['user_sold_item.id_user' => $user->id ]); $transfers = $query->all(); return $transfers; } public static function types( ) { return [ self::TYPE_MONEY_MOVEMENT_OUT => Yii::t('common/transfer','Pénzmozgás'), self::TYPE_PRODUCT => Yii::t('common/transfer','Product'), self::TYPE_TICKET => Yii::t('common/transfer','Ticket'), ]; } }