Commit 41068668f9feea6ffb045860f9441949cd4deb45

Authored by Administrator
1 parent 96f5a822

29.06.16

common/modules/product/controllers/ManageController.php
... ... @@ -133,7 +133,7 @@ class ManageController extends Controller
133 133 return $this->redirect(['view', 'id' => $model->product_id]);
134 134 }
135 135 } else {
136   - $groups = $model->category->getTaxGroups();
  136 + $groups = $model->category-> getTaxGroupsByLevel(0);
137 137  
138 138 return $this->render('update', [
139 139 'model' => $model,
... ...
common/modules/product/controllers/VariantController.php 100644 → 100755
... ... @@ -4,8 +4,10 @@ namespace common\modules\product\controllers;
4 4  
5 5 use common\modules\product\models\Product;
6 6 use common\modules\product\models\ProductImage;
  7 +use common\modules\product\models\ProductStock;
7 8 use common\modules\product\models\ProductVariant;
8 9 use common\modules\product\models\ProductVariantListSearch;
  10 +use common\modules\product\models\Stock;
9 11 use Yii;
10 12 use yii\web\Controller;
11 13 use yii\web\NotFoundHttpException;
... ... @@ -94,8 +96,12 @@ class VariantController extends Controller
94 96 return $this->redirect(['index', 'product_id' => $product_id]);
95 97 }
96 98 } else {
  99 + $groups = $model->category->getTaxGroupsByLevel(1);
  100 +
97 101 return $this->render('create', [
98 102 'model' => $model,
  103 + 'groups' => $groups,
  104 + 'stocks' => [new ProductStock()],
99 105 ]);
100 106 }
101 107 }
... ... @@ -112,14 +118,9 @@ class VariantController extends Controller
112 118 $model = $this->findModel($id);
113 119 if ($model->load(Yii::$app->request->post())) {
114 120  
115   -
116   -
117   -
118   -
119   -
120   -
121 121 if ($model->save()) {
122 122  
  123 +
123 124 if ( ($image = UploadedFile::getInstance($model, 'image')) ) {
124 125 $imageModel = ProductImage::find()->where(['product_variant_id' => $model->product_variant_id])->one();
125 126  
... ... @@ -146,6 +147,31 @@ class VariantController extends Controller
146 147 $image->saveAs(Yii::getAlias('@storage/products/' . $image->name));
147 148 }
148 149  
  150 +
  151 + $ProductStocks = Yii::$app->request->post('ProductStock');
  152 + $Stocks = Yii::$app->request->post('Stock');
  153 +
  154 + foreach($ProductStocks as $index => $ProductStock){
  155 + $stock = Stock::find()->where(['name'=>$Stocks[$index]['name']])->one();
  156 + if(!$stock instanceof Stock){
  157 + $stock = new Stock();
  158 + $stock->name = $Stocks[$index]['name'];
  159 + $stock->save();
  160 + }
  161 + $psModel = ProductStock::find()->where(['product_variant_id'=>$model->product_variant_id, 'stock_id' =>$stock->stock_id ]);
  162 + if(!$psModel instanceof ProductStock){
  163 + $psModel = new ProductStock;
  164 + $psModel->load(['ProductStock'=>$ProductStock]);
  165 + $psModel->stock_id = $stock->stock_id;
  166 + $psModel->save();
  167 + } else {
  168 + $psModel->load(['ProductStock'=>$ProductStock]);
  169 + $psModel->save();
  170 + }
  171 +
  172 + }
  173 +
  174 +
149 175 }
150 176 return $this->redirect(['index', 'product_id'=>$product_id]);
151 177  
... ... @@ -172,6 +198,7 @@ class VariantController extends Controller
172 198 return $this->render('update', [
173 199 'model' => $model,
174 200 'groups' => $groups,
  201 + 'stocks' => (!empty($model->variantStocks)) ? $model->variantStocks : [new ProductStock],
175 202 ]);
176 203 }
177 204 }
... ...
common/modules/product/models/ProductStock.php
... ... @@ -47,7 +47,7 @@ class ProductStock extends \yii\db\ActiveRecord
47 47 return [
48 48 'product_id' => 'Product ID',
49 49 'stock_id' => 'Stock ID',
50   - 'quantity' => 'Quantity',
  50 + 'quantity' => 'Количество',
51 51 'product_variant_id' => 'Product Variant ID',
52 52 ];
53 53 }
... ...
common/modules/product/models/ProductVariant.php
... ... @@ -37,7 +37,7 @@ class ProductVariant extends \yii\db\ActiveRecord
37 37 public $translit;
38 38 public $translit_rubric;
39 39 private $data;
40   - public $stocks;
  40 +
41 41  
42 42 /** @var array $_images */
43 43 public $imagesUpload = [];
... ... @@ -142,6 +142,18 @@ class ProductVariant extends \yii\db\ActiveRecord
142 142 return is_null($this->stock) ? '∞' : ($this->stock > 0 ? Yii::t('product', 'Enable') : Yii::t('product', 'Disable')); // intval($this->stock);
143 143 }
144 144  
  145 + public function getVariantStocks(){
  146 +
  147 + return $this->hasMany(ProductStock::className(),['product_variant_id'=> 'product_variant_id'])->joinWith('stock');
  148 + }
  149 +
  150 + public function getStocks(){
  151 +
  152 + return $this->hasMany(Stock::className(),['stock_id'=>'stock_id'])
  153 + ->viaTable(ProductStock::tableName(),['product_variant_id'=> 'product_variant_id']);
  154 + }
  155 +
  156 +
145 157 public function getFilters(){
146 158  
147 159 return $this->hasMany(TaxOption::className(), ['tax_option_id' => 'option_id'])
... ...
common/modules/product/models/ProductVariantListSearch.php 100644 → 100755
common/modules/product/models/ProductVariantOption.php 100644 → 100755
common/modules/product/models/Stock.php
... ... @@ -29,6 +29,7 @@ class Stock extends \yii\db\ActiveRecord
29 29 {
30 30 return [
31 31 [['name'], 'string', 'max' => 150],
  32 + [['name'], 'required'],
32 33 ];
33 34 }
34 35  
... ...
common/modules/product/views/variant/_form.php 100644 → 100755
1 1 <?php
2 2  
  3 +use common\modules\product\models\Stock;
3 4 use yii\helpers\Html;
  5 +use yii\web\View;
4 6 use yii\widgets\ActiveForm;
5 7 use yii\helpers\ArrayHelper;
6   -use common\components\artboxtree\ArtboxTreeHelper;
7   -use common\modules\product\helpers\ProductHelper;
8   -use kartik\file\FileInput;
9   -use unclead\widgets\MultipleInput;
10   -use unclead\widgets\MultipleInputColumn;
11   -use kartik\select2\Select2;
12   -
  8 +use wbraganca\dynamicform\DynamicFormWidget;
13 9 /* @var $this yii\web\View */
14 10 /* @var $model common\modules\product\models\Product */
15 11 /* @var $form yii\widgets\ActiveForm */
16   -?>
  12 +/* @var $stocks common\modules\product\models\Stock */
  13 +
  14 +
  15 +$js = '
  16 +$(".dynamicform_wrapper").on("beforeInsert", function(e, item) {
  17 + console.log("beforeInsert");
  18 +});
  19 +
  20 +$(".dynamicform_wrapper").on("afterInsert", function(e, item) {
  21 + console.log("afterInsert");
  22 +});
  23 +
  24 +$(".dynamicform_wrapper").on("beforeDelete", function(e, item) {
  25 + if (! confirm("Are you sure you want to delete this item?")) {
  26 + return false;
  27 + }
  28 + return true;
  29 +});
17 30  
  31 +$(".dynamicform_wrapper").on("afterDelete", function(e) {
  32 + console.log("Deleted item!");
  33 +});
  34 +
  35 +$(".dynamicform_wrapper").on("limitReached", function(e, item) {
  36 + alert("Limit reached");
  37 +});
  38 +';
  39 +
  40 +$this->registerJs($js, View::POS_END);
  41 +?>
18 42 <div class="product-form">
19 43  
20 44 <?php $form = ActiveForm::begin([
  45 + 'id' => 'dynamic-form',
21 46 'options' => ['enctype' => 'multipart/form-data']
22 47 ]); ?>
23 48  
... ... @@ -44,38 +69,58 @@ use kartik\select2\Select2;
44 69 ],
45 70 ]); ?>
46 71  
47   - <?= $form->field($model, 'variants')->widget(MultipleInput::className(), [
48   - 'columns' => [
49   - [
50   - 'name' => '',
51   - 'type' => MultipleInputColumn::TYPE_TEXT_INPUT,
52   - 'title' => Yii::t('product', 'Name'),
53   - ],
54   - [
55   - 'name' => 'sku',
56   - 'type' => MultipleInputColumn::TYPE_TEXT_INPUT,
57   - 'title' => Yii::t('product', 'SKU'),
58   - ],
59   - [
60   - 'name' => 'price',
61   - 'type' => MultipleInputColumn::TYPE_TEXT_INPUT,
62   - 'title' => Yii::t('product', 'Price'),
63   - ],
64   - [
65   - 'name' => 'price_old',
66   - 'type' => MultipleInputColumn::TYPE_TEXT_INPUT,
67   - 'title' => Yii::t('product', 'Old Price'),
68   - ],
69   - [
70   - 'name' => 'product_unit_id',
71   - 'type' => MultipleInputColumn::TYPE_DROPDOWN,
72   - 'title' => Yii::t('product', 'Unit'),
73   - 'items' => ArrayHelper::map(\common\modules\product\models\ProductUnit::find()->all(), 'product_unit_id', 'name'),
74   - ],
75   -
  72 + <?php DynamicFormWidget::begin([
  73 + 'widgetContainer' => 'dynamicform_wrapper', // required: only alphanumeric characters plus "_" [A-Za-z0-9_]
  74 + 'widgetBody' => '.container-items', // required: css class selector
  75 + 'widgetItem' => '.item', // required: css class
  76 + 'limit' => 10, // the maximum times, an element can be added (default 999)
  77 + 'min' => 0, // 0 or 1 (default 1)
  78 + 'insertButton' => '.add-item', // css class
  79 + 'deleteButton' => '.remove-item', // css class
  80 + 'model' => $stocks[0],
  81 + 'formId' => 'dynamic-form',
  82 + 'formFields' => [
  83 + 'quantity',
  84 + 'name',
76 85 ],
77   - ]);
78   - ?>
  86 + ]); ?>
  87 +
  88 + <div class="panel panel-default">
  89 + <div class="panel-heading">
  90 + <h4>
  91 + <i class="glyphicon glyphicon-envelope"></i> Склады
  92 + <button type="button" class="add-item btn btn-success btn-sm pull-right"><i class="glyphicon glyphicon-plus"></i> Add</button>
  93 + </h4>
  94 + </div>
  95 + <div class="panel-body">
  96 + <div class="container-items"><!-- widgetBody -->
  97 + <?php foreach ($stocks as $i => $stock): ?>
  98 + <div class="item panel panel-default"><!-- widgetItem -->
  99 + <div class="panel-body">
  100 + <?php
  101 + // necessary for update action.
  102 + if (! $stock->isNewRecord) {
  103 + echo Html::activeHiddenInput($stock, "[{$i}]stock_id");
  104 + }
  105 + ?>
  106 + <div class="row">
  107 + <div class="col-sm-5">
  108 + <?= $form->field($stock, "[{$i}]quantity")->textInput(['maxlength' => true]) ?>
  109 + </div>
  110 + <div class="col-sm-5">
  111 + <?= $form->field($stock->stock, "[{$i}]name")->textInput(['maxlength' => true]) ?>
  112 + </div>
  113 + <div class="col-sm-2" style="margin-top: 30px">
  114 + <button type="button" class="remove-item btn btn-danger btn-xs"><i class="glyphicon glyphicon-minus"></i></button>
  115 + </div>
  116 + </div><!-- .row -->
  117 + </div>
  118 + </div>
  119 + <?php endforeach; ?>
  120 + </div>
  121 + </div>
  122 + </div><!-- .panel -->
  123 + <?php DynamicFormWidget::end(); ?>
79 124  
80 125 <?= $form->field($model, 'product_unit_id')->dropDownList(
81 126 ArrayHelper::map(\common\modules\product\models\ProductUnit::find()->all(), 'product_unit_id', 'name'),
... ...
common/modules/product/views/variant/_search.php 100644 → 100755
common/modules/product/views/variant/create.php 100644 → 100755
... ... @@ -16,6 +16,8 @@ $this-&gt;params[&#39;breadcrumbs&#39;][] = $this-&gt;title;
16 16  
17 17 <?= $this->render('_form', [
18 18 'model' => $model,
  19 + 'groups' => $groups,
  20 + 'stocks' => $stocks,
19 21 ]) ?>
20 22  
21 23 </div>
... ...
common/modules/product/views/variant/index.php 100644 → 100755
common/modules/product/views/variant/update.php 100644 → 100755
... ... @@ -21,6 +21,7 @@ $this-&gt;params[&#39;breadcrumbs&#39;][] = Yii::t(&#39;product&#39;, &#39;Update&#39;);
21 21 <?= $this->render('_form', [
22 22 'model' => $model,
23 23 'groups' => $groups,
  24 + 'stocks' => $stocks,
24 25 ]) ?>
25 26  
26 27 </div>
... ...
common/modules/product/views/variant/view.php 100644 → 100755
composer.json
... ... @@ -13,6 +13,7 @@
13 13 "source": "https://github.com/yiisoft/yii2"
14 14 },
15 15 "minimum-stability": "dev",
  16 +
16 17 "require": {
17 18 "php": ">=5.4.0",
18 19 "yiisoft/yii2": ">=2.0.6",
... ... @@ -42,7 +43,8 @@
42 43 "iutbay/yii2-imagecache": "*",
43 44 "yurkinx/yii2-image": "dev-master",
44 45 "cics/yii2-video-embed-widget": "dev-master",
45   - "sersid/yii2-owl-carousel-asset": "*"
  46 + "sersid/yii2-owl-carousel-asset": "*",
  47 + "wbraganca/yii2-dynamicform": "dev-master"
46 48 },
47 49 "require-dev": {
48 50 "yiisoft/yii2-codeception": "*",
... ...
frontend/components/SeoComponent.php 100644 → 100755
frontend/controllers/SiteController.php
... ... @@ -167,7 +167,7 @@ class SiteController extends Controller
167 167 print "<categoryId>" . htmlspecialchars($product->category->category_id) . "</categoryId>";
168 168 print "<vendor>" . $product->brand->name . "</vendor>";
169 169 print "<code>" . htmlspecialchars($variant->sku) . "</code>";
170   - print "<name>" . htmlspecialchars($product->name) . " </name>";
  170 + print "<name>" . htmlspecialchars($product->name)." " .htmlspecialchars($variant->name). " </name>";
171 171 print "<description>" . htmlspecialchars($product->description) . "</description>";
172 172 print "<url>http://rukzachok.com.ua{$product->url}#{$variant->product_variant_id}</url>";
173 173 print "<image>http://rukzachok.com.ua{$variant->imageUrl}</image>";
... ...
frontend/web/img/404.png 100644 → 100755

16.2 KB | W: | H:

16.2 KB | W: | H:

  • 2-up
  • Swipe
  • Onion skin
frontend/web/sitemap.xml 100644 → 100755