relationBehavior::className(), 'relations' => [ 'product_variant_option' => 'entity1' // Product variant options ] ] ]; } /** * @inheritdoc */ public static function tableName() { return 'product_variant'; } /** * @inheritdoc */ public function rules() { return [ [['product_id', 'product_unit_id'], 'required'], [['product_id', 'product_unit_id', 'product_variant_type_id'], 'integer'], [['price', 'price_old', 'stock'], 'number'], [['name', 'sku'], 'string', 'max' => 255], [['remote_id'], 'string', 'max' => 20], [['options', 'imagesUpload'], 'safe'], // [['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 getProductStock() { return $this->hasMany(ProductStock::className(), ['product_variant_id' => 'product_variant_id']); } public function getQuantity() { return ProductStock::find() ->where(['product_variant_id' => $this->product_variant_id]) ->sum('quantity'); } 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)); } public function getImagesHTML() { $op = []; if ($this->images) { foreach ($this->images as $image) { $op[] = \common\components\artboximage\ArtboxImageHelper::getImage($image->imageUrl, 'admin_thumb'); } } return $op; } public function getImagesConfig() { $op = []; if ($this->images) { foreach ($this->images as $image) { $op[] = [ 'caption' => $image->image, 'width' => '120px', 'url' => \yii\helpers\Url::to(['/product/manage/delimg', 'id' => $image->product_image_id]), 'key' => $image->product_image_id, 'extra' => [ 'id' => $image->product_image_id, ], ]; } } return $op; } /** * @return \yii\db\ActiveQuery */ public function getImages() { return $this->hasMany(ProductImage::className(), ['product_variant_id' => 'product_variant_id']); } public function getOptions() { return $this->hasMany(TaxOption::className(), ['tax_option_id' => 'option_id'])->viaTable('product_variant_option', ['product_variant_id' => 'product_variant_id']); } public function getProperties() { $groups = $options = []; foreach ($this->options as $option) { $options[$option->tax_group_id][] = $option; } foreach (TaxGroup::find()->where(['tax_group_id' => array_keys($options)])->all() as $group) { if (!empty($options[$group->tax_group_id])) { $group->_options = $options[$group->tax_group_id]; $groups[] = $group; } } return $groups; } /** * @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 getCategory() { return $this->hasOne(Category::className(), ['category_id' => 'category_id'])->viaTable('product_category', ['product_id' => 'product_id']); } public function afterSave($insert, $changedAttributes) { if (!is_null($this->stocks)) { //ProductStock::deleteAll(['product_variant_id' => $this->product_variant_id]); $values = []; foreach ($this->stocks as $id => $quantity) { $productStock = ProductStock::find()->where(['product_variant_id' => $this->product_variant_id, 'stock_id' => $id])->one(); $productStock->quantity = $quantity; $productStock->save(); } } 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]); } public function imagesUpload() { if ($this->validate()) { $images = []; foreach ($this->imagesUpload as $image) { $imageName = $image->baseName .'.'. $image->extension; $i = 0; while(file_exists(Yii::getAlias('@imagesDir/products/' . $imageName))) { $i++; $imageName = $image->baseName .'_'. $i .'.'. $image->extension; } $image->saveAs(Yii::getAlias('@imagesDir/products/' .$imageName)); $images[] = $imageName; } return $images; } else { return false; } } }