TimestampBehavior::className (), 'value' => function () { return date ( 'Y-m-d H:i:s', \Yii::$app->formatter->asTimestamp ( date ( 'Y-d-m h:i:s' ) ) ); } ], [ 'class' => DiscountAwareBehavior::className () ], [ 'class' => CustomerAwareBehavior::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' ), 'id_customer' => Yii::t ( 'common/transfer', 'Customer' ), 'comment' => Yii::t ( 'common/transfer', 'Comment' ), 'created_at' => Yii::t ( 'common/transfer', 'Created At' ), 'updated_at' => Yii::t ( 'common/transfer', 'Updated At' ), 'paid_at' => Yii::t ( 'common/transfer', 'Paid At' ), 'types' => Yii::t ( 'common/transfer', 'Types' ), 'start' => Yii::t ( 'common/transfer', 'Start' ), 'end' => Yii::t ( 'common/transfer', 'End' ), 'payment_method' => Yii::t ( 'common/transfer', 'Fizetési mód' ) ]; } 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 getUserSoldItem() { return $this->hasOne ( UserSoldItem::className (), [ "id_transfer" => "id_transfer" ] ); } public function getCustomerCart() { return $this->hasOne ( ShoppingCart::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 = $this->moneyMovement->humanType; } 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 static function toSignedMoney($dir, $money) { $m = 1; $result = $money; if ($dir == Transfer::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 * @param $customer common\models\Customer * */ public static function createProductTransfer($sale, $account, $discount, $currency, $count, $product, $status = Transfer::STATUS_PAID, $customer = null) { $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; if (isset ( $customer )) { $transfer->id_customer = $customer->id_customer; } 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->payment_method = Transfer::PAYMENT_METHOD_CASH; $transfer->type = Transfer::TYPE_MONEY_MOVEMENT_OUT; $transfer->status = Transfer::STATUS_PAID; if ($moneyMovement->type == MoneyMovement::TYPE_OUT) { $transfer->direction = Transfer::DIRECTION_OUT; } else if ($moneyMovement->type == MoneyMovement::TYPE_IN) { $transfer->direction = Transfer::DIRECTION_IN; } $transfer->count = null; $transfer->id_object = $moneyMovement->id_money_movement; $transfer->money = $moneyMovement->money; $transfer->id_account = $account->id_account; $transfer->paid_at = date ( 'Y-m-d H:i:s' ); $transfer->paid_by = \Yii::$app->user->id; 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, $status = Transfer::STATUS_NOT_PAID) { $transfer = new Transfer (); $transfer->status = $status; $transfer->type = Transfer::TYPE_TICKET; $transfer->direction = Transfer::DIRECTION_IN; $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->asDatetime ( $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 toPaymentMethodName($id) { $result = ""; $arr = static::paymentMethods (); if (array_key_exists ( $id, $arr )) { $result = $arr [$id]; } return $result; } 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 readCustomerCart($customer) { $transfers = [ ]; if (isset ( $customer )) { $query = Transfer::find (); $query->innerJoinWith ( 'customerCart' ); $query->andWhere ( [ 'shopping_cart.id_customer' => $customer->id_customer ] ); $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' ) ]; } public static function paymentMethods() { return [ self::PAYMENT_METHOD_CASH => Yii::t ( 'common/transfer', 'Készpénz' ), self::PAYMENT_METHOD_BANCCARD => Yii::t ( 'common/transfer', 'Bankkártyás fizetés' ), self::PAYMENT_METHOD_TRANSFER => Yii::t ( 'common/transfer', 'Átutalás' ), self::PAYMENT_METHOD_CAFETERY => Yii::t ( 'common/transfer', 'Széchenyi kártya' ) ] // self::PAYMENT_METHOD_DEBIT_MANDATE => Yii::t('common/transfer','Csoportos beszedési megbízás'), ; } public static function statuses() { return [ self::STATUS_NOT_PAID => Yii::t ( 'common/transfer', 'Nincs fizetve' ), self::STATUS_PAID => Yii::t ( 'common/transfer', 'Fizetve' ), self::STATUS_STORNO => Yii::t ( 'common/transfer', 'Törölve' ) ]; } public function getStatusName() { $status = null; $statuses = self::statuses (); if (array_key_exists ( $this->status, $statuses )) { $status = $statuses [$this->status]; } return $status; } public function getPaymentMethodName() { $status = null; $statuses = self::paymentMethods (); if (array_key_exists ( $this->payment_method, $statuses )) { $status = $statuses [$this->payment_method]; } return $status; } public function beforeDelete() { parent::beforeDelete (); if ($this->type == Transfer::TYPE_TICKET) { $ticket = $this->ticket; if ($ticket != null) { $ticket->delete (); } } else if ($this->type == Transfer::TYPE_MONEY_MOVEMENT_OUT) { $mm = $this->moneyMovement; $mm->delete (); } else if ($this->type == Transfer::TYPE_PRODUCT) { $sale = $this->sale; $product = $this->product; $product->stock = $product->stock + $this->count; $product->save (); $sale->delete (); } ShoppingCart::deleteAll ( [ 'id_transfer' => $this->id_transfer ] ); UserSoldItem::deleteAll ( [ 'id_transfer' => $this->id_transfer ] ); return true; } /** * * @param string $mode * The mode to load * Available modes *
Load all transfer which were created
*Load all transfer which were paid
*Load all transfer which were created and paid
*Load all transfer which were created but not paid
*Load all transfer which were not created but paid . Works correctly only, * when start and end date given *
*