255], [['remote_id'], 'string', 'max' => 20], // [['imagesUpload'], 'safe'], // [['imagesUpload'], 'file', 'skipOnEmpty' => false, 'extensions' => 'png, jpg, gif', 'maxFiles' => 50], [['product_unit_id'], 'exist', 'skipOnError' => true, 'targetClass' => ProductUnit::className(), 'targetAttribute' => ['product_unit_id' => 'product_unit_id']], ]; } /** * @inheritdoc */ public function attributeLabels() { return [ 'product_variant_id' => Yii::t('product', 'Product Variant ID'), 'product_id' => Yii::t('product', 'Product ID'), 'name' => Yii::t('product', 'Name'), 'sku' => Yii::t('product', 'Sku'), 'price' => Yii::t('product', 'Price'), 'price_old' => Yii::t('product', 'Price Old'), 'stock' => Yii::t('product', 'Stock'), 'product_unit_id' => Yii::t('product', 'Product Unit ID'), 'product_variant_type_id' => Yii::t('product', 'Product Variant Type ID'), 'stock_caption' => Yii::t('product', 'Stock'), 'image' => Yii::t('product', 'Image'), 'images' => Yii::t('product', 'Images'), ]; } /** * @return \yii\db\ActiveQuery */ public function getProductUnit() { return $this->hasOne(ProductUnit::className(), ['product_unit_id' => 'product_unit_id']); } /** * @return \yii\db\ActiveQuery */ public function getProductVariantType() { return $this->hasOne(ProductVariantType::className(), ['product_variant_type_id' => 'product_variant_type_id']); } /** * @return \yii\db\ActiveQuery */ public function getProduct() { return $this->hasOne(Product::className(), ['product_id' => 'product_id']); } public function getQuantity() { return ProductStock::find() ->where(['product_variant_id' => $this->product_variant_id]) ->sum('quantity'); // return $this->hasMany(Stock::className(), ['stock_id' => 'stock_id'])->viaTable(ProductStock::tableName(), ['product_id' => 'product_id'])->sum(ProductStock::tableName() .'.quantity') > 0; // return $this->stock !== 0; } public function getStock_caption() { return is_null($this->stock) ? '∞' : ($this->stock > 0 ? Yii::t('product', 'Enable') : Yii::t('product', 'Disable')); // intval($this->stock); } /** * @return \yii\db\ActiveQuery */ public function getImage() { return $this->hasOne(ProductImage::className(), ['product_variant_id' => 'product_variant_id']); } /** * fetch stored image url * @return string */ public function getImageUrl() { // return a default image placeholder if your source image is not found return !empty($this->image) ? $this->image->imageUrl : '/images/no_photo.png'; } public function getFullname() { return empty($this->product) ? null : ($this->product->name . (empty($this->name) ? '' : ' '. $this->name)); } /** * @return \yii\db\ActiveQuery */ public function getImages() { return $this->hasMany(ProductImage::className(), ['product_variant_id' => 'product_variant_id']); } /** * @inheritdoc * @return ProductVariantQuery the active query used by this AR class. */ public static function find() { return new ProductVariantQuery(get_called_class()); } public function getId(){ return $this->product_variant_id; } public function setStocks($stocks) { $this->stocks = (array) $stocks; } /*public function getStocks() { return $this->hasMany(Stock::className(), ['stock_id' => 'stock_id'])->viaTable(ProductStock::tableName(), ['product_variant_id' => 'product_variant_id']); } public function getStocksIds() { return ArrayHelper::getColumn($this->hasMany(Stock::className(), ['stock_id' => 'stock_id'])->viaTable(ProductStock::tableName(), ['product_variant_id' => 'product_variant_id'])->all(), 'stock_id'); }*/ public function afterSave($insert, $changedAttributes) { if (!empty($this->stocks)) { ProductStock::deleteAll(['product_variant_id' => $this->product_variant_id]); $values = []; foreach ($this->stocks as $id => $quantity) { $values[] = [$this->product_id, $this->product_variant_id, $id, $quantity]; } if ($values) { self::getDb()->createCommand() ->batchInsert(ProductStock::tableName(), ['product_id', 'product_variant_id', 'stock_id', 'quantity'], $values)->execute(); } } parent::afterSave($insert, $changedAttributes); } public function beforeDelete() { ProductImage::deleteAll(['product_variant_id' => $this->product_variant_id]); ProductStock::deleteAll(['product_variant_id' => $this->product_variant_id]); } }