diff --git a/common/modules/product/behaviors/DefaultVariantBehavior.php b/common/modules/product/behaviors/DefaultVariantBehavior.php new file mode 100755 index 0000000..54c2a82 --- /dev/null +++ b/common/modules/product/behaviors/DefaultVariantBehavior.php @@ -0,0 +1,89 @@ + 'addDefaultVariant', + ]; + } + + /** + * Creates new default product's variant and sets it's to stock + * marked as default and sets to it unit also marked as default + */ + public function addDefaultVariant() + { + /** + * @var Stock $stock + * @var ProductUnit $defaultUnit + */ + $defaultVariant = new ProductVariant(); + $defaultVariant->product_id = $this->owner->product_id; + + /** + * Gets default unit for variant + */ + $defaultUnit = ProductUnit::find() + ->where( + [ + 'is_default' => true, + ] + ) + ->one(); + $defaultVariant->product_unit_id = $defaultUnit->product_unit_id; + $defaultVariant->stock = 1; + + $defaultVariant->sku = 'default'; + $defaultVariant->remote_id = time(); + $defaultVariant->save(); + + /** + * Saving languages + */ + $activeLanguageIds = Language::find() + ->select('language_id') + ->where( + [ + 'status' => true, + ] + ) + ->asArray() + ->column(); + foreach ($activeLanguageIds as $languageId) { + $variantLanguage = new ProductVariantLang(); + $variantLanguage->language_id = $languageId; + $variantLanguage->product_variant_id = $defaultVariant->product_variant_id; + $variantLanguage->name = 'default_' . $languageId; + $variantLanguage->save(); + } + } + + } + \ No newline at end of file diff --git a/common/modules/product/models/Product.php b/common/modules/product/models/Product.php index d7a8881..f53db26 100755 --- a/common/modules/product/models/Product.php +++ b/common/modules/product/models/Product.php @@ -10,6 +10,7 @@ use common\models\ProductToRating; use common\modules\comment\models\CommentModel; use common\modules\language\behaviors\LanguageBehavior; + use common\modules\product\behaviors\DefaultVariantBehavior; use common\modules\product\behaviors\FilterBehavior; use common\modules\rubrication\models\TaxGroup; use common\modules\rubrication\models\TaxOption; @@ -128,6 +129,9 @@ 'techSpec' => [ 'class' => TechBehavior::className(), ], + 'defaultVariant' => [ + 'class' => DefaultVariantBehavior::className(), + ], ]; } diff --git a/common/modules/product/models/ProductStock.php b/common/modules/product/models/ProductStock.php index f6db347..a4c1867 100755 --- a/common/modules/product/models/ProductStock.php +++ b/common/modules/product/models/ProductStock.php @@ -70,7 +70,7 @@ class ProductStock extends \yii\db\ActiveRecord public function getName(){ - return (!empty($this->stock))? $this->stock->name : ''; + return (!empty($this->stock))? $this->stock->lang->name : ''; } public function setName($value){ -- libgit2 0.21.4