Commit 3bd3d96c17fff80262ada9d206cb523dcdb5dc34
1 parent
767d5673
commit before grand update
Showing
4 changed files
with
386 additions
and
221 deletions
Show diff stats
controllers/EventController.php
@@ -4,6 +4,7 @@ namespace artweb\artbox\event\controllers; | @@ -4,6 +4,7 @@ namespace artweb\artbox\event\controllers; | ||
4 | 4 | ||
5 | 5 | ||
6 | use artweb\artbox\ecommerce\models\Product; | 6 | use artweb\artbox\ecommerce\models\Product; |
7 | +use artweb\artbox\ecommerce\models\ProductVariant; | ||
7 | use Yii; | 8 | use Yii; |
8 | use artweb\artbox\event\models\Event; | 9 | use artweb\artbox\event\models\Event; |
9 | use artweb\artbox\event\models\EventSearch; | 10 | use artweb\artbox\event\models\EventSearch; |
@@ -82,7 +83,7 @@ class EventController extends Controller | @@ -82,7 +83,7 @@ class EventController extends Controller | ||
82 | { | 83 | { |
83 | $model = new Event(); | 84 | $model = new Event(); |
84 | $model->generateLangs(); | 85 | $model->generateLangs(); |
85 | - $model->productsIds = []; | 86 | + $model->variantsIds = []; |
86 | if ($model->load(Yii::$app->request->post())) { | 87 | if ($model->load(Yii::$app->request->post())) { |
87 | $model->loadLangs(\Yii::$app->request); | 88 | $model->loadLangs(\Yii::$app->request); |
88 | if ($model->save() && $model->transactionStatus) { | 89 | if ($model->save() && $model->transactionStatus) { |
@@ -94,10 +95,10 @@ class EventController extends Controller | @@ -94,10 +95,10 @@ class EventController extends Controller | ||
94 | } | 95 | } |
95 | 96 | ||
96 | }else{ | 97 | }else{ |
97 | - $products = Product::find() | ||
98 | - ->where([ 'id' => \Yii::$app->request->post('productIds') ]) | ||
99 | - ->all(); | ||
100 | - $model->linkMany('products', $products); | 98 | + $variants = ProductVariant::find() |
99 | + ->where([ 'id' => \Yii::$app->request->post('variantsIds') ]) | ||
100 | + ->all(); | ||
101 | + $model->linkMany('variants', $variants); | ||
101 | } | 102 | } |
102 | 103 | ||
103 | return $this->redirect([ | 104 | return $this->redirect([ |
@@ -124,9 +125,10 @@ class EventController extends Controller | @@ -124,9 +125,10 @@ class EventController extends Controller | ||
124 | { | 125 | { |
125 | $model = $this->findModel($id); | 126 | $model = $this->findModel($id); |
126 | $model->generateLangs(); | 127 | $model->generateLangs(); |
127 | - $model->productsIds = ArrayHelper::map($model->products, | ||
128 | - 'id', | ||
129 | - 'lang.title'); | 128 | +// $model->productsIds = ArrayHelper::map($model->products, |
129 | +// 'id', | ||
130 | +// 'lang.title'); | ||
131 | + $model->variantsIds = ArrayHelper::map($model->variants,'id', 'sku'); | ||
130 | if ($model->load(Yii::$app->request->post())) { | 132 | if ($model->load(Yii::$app->request->post())) { |
131 | $model->loadLangs(\Yii::$app->request); | 133 | $model->loadLangs(\Yii::$app->request); |
132 | if ($model->save() && $model->transactionStatus) { | 134 | if ($model->save() && $model->transactionStatus) { |
@@ -139,10 +141,10 @@ class EventController extends Controller | @@ -139,10 +141,10 @@ class EventController extends Controller | ||
139 | } | 141 | } |
140 | 142 | ||
141 | }else{ | 143 | }else{ |
142 | - $products = Product::find() | ||
143 | - ->where([ 'id' => \Yii::$app->request->post('productIds') ]) | 144 | + $variants = ProductVariant::find() |
145 | + ->where([ 'id' => \Yii::$app->request->post('variantsIds') ]) | ||
144 | ->all(); | 146 | ->all(); |
145 | - $model->linkMany('products', $products); | 147 | + $model->linkMany('variants', $variants); |
146 | } | 148 | } |
147 | 149 | ||
148 | return $this->redirect([ | 150 | return $this->redirect([ |
models/Event.php
1 | <?php | 1 | <?php |
2 | - | ||
3 | -namespace artweb\artbox\event\models; | ||
4 | - | ||
5 | -use artweb\artbox\behaviors\ManyToManyBehavior; | ||
6 | -use artweb\artbox\behaviors\SaveImgBehavior; | ||
7 | -use artweb\artbox\ecommerce\models\Product; | ||
8 | -use artweb\artbox\ecommerce\models\ProductVariant; | ||
9 | -use artweb\artbox\language\behaviors\LanguageBehavior; | ||
10 | -use Yii; | ||
11 | -use yii\behaviors\TimestampBehavior; | ||
12 | -use yii\helpers\ArrayHelper; | ||
13 | -use yii\db\ActiveQuery; | ||
14 | -use yii\web\Request; | ||
15 | - | ||
16 | -/** | ||
17 | - * This is the model class for table "event". | ||
18 | - * | ||
19 | - * @property integer $id | ||
20 | - * @property string $image | ||
21 | - * @property integer $created_at | ||
22 | - * @property integer $updated_at | ||
23 | - * @property integer $end_at | ||
24 | - * @property integer $status | ||
25 | - * @property integer $is_sale | ||
26 | - * @property integer $is_event | ||
27 | - * @property integer $percent | ||
28 | - * @property integer $banner | ||
29 | - * @property integer $type | ||
30 | - * @property Product[] $products | ||
31 | - * * From language behavior * | ||
32 | - * @property EventLang $lang | ||
33 | - * @property EventLang[] $langs | ||
34 | - * @property EventLang $objectLang | ||
35 | - * @property string $ownerKey | ||
36 | - * @property string $langKey | ||
37 | - * @property EventLang[] $modelLangs | ||
38 | - * @property bool $transactionStatus | ||
39 | - * @method string getOwnerKey() | ||
40 | - * @method void setOwnerKey( string $value ) | ||
41 | - * @method string getLangKey() | ||
42 | - * @method void setLangKey( string $value ) | ||
43 | - * @method ActiveQuery getLangs() | ||
44 | - * @method ActiveQuery getLang( integer $language_id ) | ||
45 | - * @method EventLang[] generateLangs() | ||
46 | - * @method void loadLangs( Request $request ) | ||
47 | - * @method bool linkLangs() | ||
48 | - * @method bool saveLangs() | ||
49 | - * @method bool getTransactionStatus() | ||
50 | - * * End language behavior * | ||
51 | - * * From SaveImgBehavior | ||
52 | - * @property string|null $imageFile | ||
53 | - * @property string|null $imageUrl | ||
54 | - * @method string|null getImageFile( int $field ) | ||
55 | - * @method string|null getImageUrl( int $field ) | ||
56 | - * * End SaveImgBehavior | ||
57 | - * | ||
58 | - */ | ||
59 | -class Event extends \yii\db\ActiveRecord | ||
60 | -{ | ||
61 | - public $imageUpload; | ||
62 | - public $products_file; | ||
63 | - const ACTIVE = 1; | ||
64 | - const INACTIVE = 2; | ||
65 | - public $productsIds = array(); | 2 | + |
3 | + namespace artweb\artbox\event\models; | ||
4 | + | ||
5 | + use artweb\artbox\behaviors\ManyToManyBehavior; | ||
6 | + use artweb\artbox\behaviors\SaveImgBehavior; | ||
7 | + use artweb\artbox\ecommerce\models\Product; | ||
8 | + use artweb\artbox\ecommerce\models\ProductVariant; | ||
9 | + use artweb\artbox\language\behaviors\LanguageBehavior; | ||
10 | + use Yii; | ||
11 | + use yii\behaviors\TimestampBehavior; | ||
12 | + use yii\helpers\ArrayHelper; | ||
13 | + use yii\db\ActiveQuery; | ||
14 | + use yii\web\Request; | ||
15 | + | ||
66 | /** | 16 | /** |
67 | - * @inheritdoc | 17 | + * This is the model class for table "event". |
18 | + * | ||
19 | + * @property integer $id | ||
20 | + * @property string $image | ||
21 | + * @property integer $created_at | ||
22 | + * @property integer $updated_at | ||
23 | + * @property integer $end_at | ||
24 | + * @property integer $status | ||
25 | + * @property integer $is_sale | ||
26 | + * @property integer $is_event | ||
27 | + * @property integer $percent | ||
28 | + * @property integer $banner | ||
29 | + * @property integer $type | ||
30 | + * @property Product[] $products | ||
31 | + * @property ProductVariant[] $variants; | ||
32 | + * * From language behavior * | ||
33 | + * @property EventLang $lang | ||
34 | + * @property EventLang[] $langs | ||
35 | + * @property EventLang $objectLang | ||
36 | + * @property string $ownerKey | ||
37 | + * @property string $langKey | ||
38 | + * @property EventLang[] $modelLangs | ||
39 | + * @property bool $transactionStatus | ||
40 | + * @method string getOwnerKey() | ||
41 | + * @method void setOwnerKey( string $value ) | ||
42 | + * @method string getLangKey() | ||
43 | + * @method void setLangKey( string $value ) | ||
44 | + * @method ActiveQuery getLangs() | ||
45 | + * @method ActiveQuery getLang( integer $language_id ) | ||
46 | + * @method EventLang[] generateLangs() | ||
47 | + * @method void loadLangs( Request $request ) | ||
48 | + * @method bool linkLangs() | ||
49 | + * @method bool saveLangs() | ||
50 | + * @method bool getTransactionStatus() | ||
51 | + * * End language behavior * | ||
52 | + * * From SaveImgBehavior | ||
53 | + * @property string|null $imageFile | ||
54 | + * @property string|null $imageUrl | ||
55 | + * @method string|null getImageFile( int $field ) | ||
56 | + * @method string|null getImageUrl( int $field ) | ||
57 | + * * End SaveImgBehavior | ||
68 | */ | 58 | */ |
69 | - public static function tableName() | 59 | + class Event extends \yii\db\ActiveRecord |
70 | { | 60 | { |
71 | - return 'event'; | ||
72 | - } | ||
73 | - | ||
74 | - | ||
75 | - | ||
76 | - | ||
77 | - /** | ||
78 | - * @inheritdoc | ||
79 | - */ | ||
80 | - public function behaviors() | ||
81 | - { | ||
82 | - return [ | ||
83 | - 'img'=>[ | ||
84 | - 'class' => SaveImgBehavior::className(), | ||
85 | - 'fields' => [ | ||
86 | - ['name'=>'image','directory' => 'event' ], | ||
87 | - ['name'=>'banner','directory' => 'event' ], | ||
88 | - ] | ||
89 | - ], | ||
90 | - TimestampBehavior::className(), | ||
91 | - 'language' => [ | ||
92 | - 'class' => LanguageBehavior::className(), | ||
93 | - 'objectLang' => EventLang::className() | ||
94 | - ], | ||
95 | - [ | ||
96 | - 'class' => ManyToManyBehavior::className(), | ||
97 | - ], | ||
98 | - ]; | ||
99 | - } | ||
100 | - | ||
101 | - | ||
102 | - public function beforeSave($insert) | ||
103 | - { | ||
104 | - if (parent::beforeSave($insert)) { | ||
105 | - | ||
106 | - $this->end_at = !empty($this->end_at) ? (string)strtotime($this->end_at) : ''; | ||
107 | - return true; | 61 | + public $imageUpload; |
62 | + public $products_file; | ||
63 | + const ACTIVE = 1; | ||
64 | + const INACTIVE = 2; | ||
65 | + public $productsIds = []; | ||
66 | + public $variantsIds = []; | ||
67 | + /** | ||
68 | + * @inheritdoc | ||
69 | + */ | ||
70 | + public static function tableName() | ||
71 | + { | ||
72 | + return 'event'; | ||
108 | } | 73 | } |
109 | - return false; | ||
110 | - | ||
111 | - } | ||
112 | - | ||
113 | - public function afterFind(){ | ||
114 | - $this->end_at = !empty($this->end_at) ? date("Y-m-d", $this->end_at) : ''; | ||
115 | - } | ||
116 | - | ||
117 | - | ||
118 | - /** | ||
119 | - * @inheritdoc | ||
120 | - */ | ||
121 | - public function rules() | ||
122 | - { | ||
123 | - return [ | ||
124 | - [['created_at', 'updated_at','percent','status','is_sale','is_event','percent' ], 'integer'], | ||
125 | - [['image', 'end_at','banner'], 'string', 'max' => 255], | ||
126 | - [['imageUpload','is_sale','is_event'], 'safe'], | ||
127 | - [['imageUpload'], 'file', 'extensions' => 'jpg, gif, png'], | ||
128 | - [['products_file'], 'file'], | ||
129 | - ]; | ||
130 | - } | ||
131 | - | ||
132 | - /** | ||
133 | - * @inheritdoc | ||
134 | - */ | ||
135 | - public function attributeLabels() | ||
136 | - { | ||
137 | - return [ | ||
138 | - 'id' => Yii::t('app', 'ID ะฐะบัะธะธ'), | ||
139 | - 'name' => Yii::t('app', 'name'), | ||
140 | - 'alias' => Yii::t('app', 'alias'), | ||
141 | - 'body' => Yii::t('app', 'body'), | ||
142 | - 'image' => Yii::t('app', 'image'), | ||
143 | - 'meta_title' => Yii::t('app', 'meta_title'), | ||
144 | - 'description' => Yii::t('app', 'description'), | ||
145 | - 'h1' => Yii::t('app', 'h1'), | ||
146 | - 'seo_text' => Yii::t('app', 'seo_text'), | ||
147 | - 'created_at' => Yii::t('app', 'created_at'), | ||
148 | - 'updated_at' => Yii::t('app', 'updated_at'), | ||
149 | - 'end_at' => Yii::t('app', 'end_at'), | ||
150 | - 'status' => Yii::t('app', 'ะกัะฐััั ะฐะบัะธะธ'), | ||
151 | - 'products_file' => Yii::t('app', 'ะะฐะณััะทะบะฐ ัะฐะนะปะฐ'), | ||
152 | - 'is_sale' => Yii::t('app', 'ะ ะฐัะฟัะพะดะฐะถะฐ'), | ||
153 | - 'percent' => Yii::t('app', 'ะัะพัะตะฝั'), | ||
154 | - 'is_event' => Yii::t('app', 'ะะบัะธั'), | ||
155 | - ]; | ||
156 | - } | ||
157 | - | ||
158 | - | ||
159 | - public function isActive(){ | ||
160 | - if($this->status){ | ||
161 | - | ||
162 | - if(!empty($this->end_at) && (strtotime($this->end_at) <= strtotime(date("Y-m-d")))){ | ||
163 | - return false; | 74 | + |
75 | + /** | ||
76 | + * @inheritdoc | ||
77 | + */ | ||
78 | + public function behaviors() | ||
79 | + { | ||
80 | + return [ | ||
81 | + 'img' => [ | ||
82 | + 'class' => SaveImgBehavior::className(), | ||
83 | + 'fields' => [ | ||
84 | + [ | ||
85 | + 'name' => 'image', | ||
86 | + 'directory' => 'event', | ||
87 | + ], | ||
88 | + [ | ||
89 | + 'name' => 'banner', | ||
90 | + 'directory' => 'event', | ||
91 | + ], | ||
92 | + ], | ||
93 | + ], | ||
94 | + TimestampBehavior::className(), | ||
95 | + 'language' => [ | ||
96 | + 'class' => LanguageBehavior::className(), | ||
97 | + 'objectLang' => EventLang::className(), | ||
98 | + ], | ||
99 | + [ | ||
100 | + 'class' => ManyToManyBehavior::className(), | ||
101 | + ], | ||
102 | + ]; | ||
103 | + } | ||
104 | + | ||
105 | + public function beforeSave($insert) | ||
106 | + { | ||
107 | + if (parent::beforeSave($insert)) { | ||
108 | + | ||
109 | + $this->end_at = !empty($this->end_at) ? (string) strtotime($this->end_at) : ''; | ||
110 | + return true; | ||
164 | } | 111 | } |
165 | - return true; | 112 | + return false; |
113 | + | ||
166 | } | 114 | } |
167 | - return false; | ||
168 | - } | ||
169 | - | ||
170 | - | ||
171 | - public function getType(){ | ||
172 | - if($this->is_event){ | ||
173 | - return "promo"; | ||
174 | - } else if($this->is_sale){ | ||
175 | - return "sale"; | ||
176 | - } else { | ||
177 | - return "promo"; | 115 | + |
116 | + public function afterFind() | ||
117 | + { | ||
118 | + $this->end_at = !empty($this->end_at) ? date("Y-m-d", $this->end_at) : ''; | ||
178 | } | 119 | } |
179 | - } | ||
180 | - | ||
181 | - | ||
182 | - public function goEvent($file) { | ||
183 | - | ||
184 | - set_time_limit(0); | ||
185 | - | ||
186 | - | ||
187 | - $handle = fopen($file, 'r'); | ||
188 | - | ||
189 | - | ||
190 | - while (($data = fgetcsv($handle, 1000, ";")) !== FALSE) { | ||
191 | - if(isset($data[0])){ | ||
192 | - $product = ProductVariant::find()->where(['sku' => $data[0]])->joinWith('product')->one(); | ||
193 | - if($product instanceof ProductVariant){ | ||
194 | - $model= EventsToProducts::find()->where(['event_id' =>$this->id, 'product_id' => $product->product->id ])->one(); | ||
195 | - if(!$model instanceof EventsToProducts){ | ||
196 | - $model = new EventsToProducts; | ||
197 | - $model->event_id = $this->id; | ||
198 | - $model->product_id = $product->product->id; | ||
199 | - $model->save(); | 120 | + |
121 | + /** | ||
122 | + * @inheritdoc | ||
123 | + */ | ||
124 | + public function rules() | ||
125 | + { | ||
126 | + return [ | ||
127 | + [ | ||
128 | + [ | ||
129 | + 'created_at', | ||
130 | + 'updated_at', | ||
131 | + 'percent', | ||
132 | + 'status', | ||
133 | + 'is_sale', | ||
134 | + 'is_event', | ||
135 | + 'percent', | ||
136 | + ], | ||
137 | + 'integer', | ||
138 | + ], | ||
139 | + [ | ||
140 | + [ | ||
141 | + 'image', | ||
142 | + 'end_at', | ||
143 | + 'banner', | ||
144 | + ], | ||
145 | + 'string', | ||
146 | + 'max' => 255, | ||
147 | + ], | ||
148 | + [ | ||
149 | + [ | ||
150 | + 'imageUpload', | ||
151 | + 'is_sale', | ||
152 | + 'is_event', | ||
153 | + ], | ||
154 | + 'safe', | ||
155 | + ], | ||
156 | + [ | ||
157 | + [ 'imageUpload' ], | ||
158 | + 'file', | ||
159 | + 'extensions' => 'jpg, gif, png', | ||
160 | + ], | ||
161 | + [ | ||
162 | + [ 'products_file' ], | ||
163 | + 'file', | ||
164 | + ], | ||
165 | + ]; | ||
166 | + } | ||
167 | + | ||
168 | + /** | ||
169 | + * @inheritdoc | ||
170 | + */ | ||
171 | + public function attributeLabels() | ||
172 | + { | ||
173 | + return [ | ||
174 | + 'id' => Yii::t('app', 'ID ะฐะบัะธะธ'), | ||
175 | + 'name' => Yii::t('app', 'name'), | ||
176 | + 'alias' => Yii::t('app', 'alias'), | ||
177 | + 'body' => Yii::t('app', 'body'), | ||
178 | + 'image' => Yii::t('app', 'image'), | ||
179 | + 'meta_title' => Yii::t('app', 'meta_title'), | ||
180 | + 'description' => Yii::t('app', 'description'), | ||
181 | + 'h1' => Yii::t('app', 'h1'), | ||
182 | + 'seo_text' => Yii::t('app', 'seo_text'), | ||
183 | + 'created_at' => Yii::t('app', 'created_at'), | ||
184 | + 'updated_at' => Yii::t('app', 'updated_at'), | ||
185 | + 'end_at' => Yii::t('app', 'end_at'), | ||
186 | + 'status' => Yii::t('app', 'ะกัะฐััั ะฐะบัะธะธ'), | ||
187 | + 'products_file' => Yii::t('app', 'ะะฐะณััะทะบะฐ ัะฐะนะปะฐ'), | ||
188 | + 'is_sale' => Yii::t('app', 'ะ ะฐัะฟัะพะดะฐะถะฐ'), | ||
189 | + 'percent' => Yii::t('app', 'ะัะพัะตะฝั'), | ||
190 | + 'is_event' => Yii::t('app', 'ะะบัะธั'), | ||
191 | + ]; | ||
192 | + } | ||
193 | + | ||
194 | + public function isActive() | ||
195 | + { | ||
196 | + if ($this->status) { | ||
197 | + | ||
198 | + if (!empty($this->end_at) && ( strtotime($this->end_at) <= strtotime(date("Y-m-d")) )) { | ||
199 | + return false; | ||
200 | + } | ||
201 | + return true; | ||
202 | + } | ||
203 | + return false; | ||
204 | + } | ||
205 | + | ||
206 | + public function getType() | ||
207 | + { | ||
208 | + if ($this->is_event) { | ||
209 | + return "promo"; | ||
210 | + } else if ($this->is_sale) { | ||
211 | + return "sale"; | ||
212 | + } else { | ||
213 | + return "promo"; | ||
214 | + } | ||
215 | + } | ||
216 | + | ||
217 | +// public function goEvent($file) | ||
218 | +// { | ||
219 | +// | ||
220 | +// set_time_limit(0); | ||
221 | +// | ||
222 | +// $handle = fopen($file, 'r'); | ||
223 | +// | ||
224 | +// while (( $data = fgetcsv($handle, 1000, ";") ) !== false) { | ||
225 | +// if (isset($data[ 0 ])) { | ||
226 | +// $product = ProductVariant::find() | ||
227 | +// ->where([ 'sku' => $data[ 0 ] ]) | ||
228 | +// ->joinWith('product') | ||
229 | +// ->one(); | ||
230 | +// if ($product instanceof ProductVariant) { | ||
231 | +// $model = EventsToProducts::find() | ||
232 | +// ->where( | ||
233 | +// [ | ||
234 | +// 'event_id' => $this->id, | ||
235 | +// 'product_id' => $product->product->id, | ||
236 | +// ] | ||
237 | +// ) | ||
238 | +// ->one(); | ||
239 | +// if (!$model instanceof EventsToProducts) { | ||
240 | +// $model = new EventsToProducts; | ||
241 | +// $model->event_id = $this->id; | ||
242 | +// $model->product_id = $product->product->id; | ||
243 | +// $model->save(); | ||
244 | +// } | ||
245 | +// } | ||
246 | +// } | ||
247 | +// | ||
248 | +// } | ||
249 | +// fclose($handle); | ||
250 | +// unlink($file); | ||
251 | +// | ||
252 | +// } | ||
253 | + | ||
254 | + public function goEvent($file) | ||
255 | + { | ||
256 | + | ||
257 | + set_time_limit(0); | ||
258 | + | ||
259 | + $handle = fopen($file, 'r'); | ||
260 | + | ||
261 | + while (( $data = fgetcsv($handle, 1000, ";") ) !== false) { | ||
262 | + if (isset($data[ 0 ])) { | ||
263 | + $product = ProductVariant::find() | ||
264 | + ->where([ 'sku' => $data[ 0 ] ]) | ||
265 | + ->one(); | ||
266 | + if ($product instanceof ProductVariant) { | ||
267 | + $model = EventToVariant::find() | ||
268 | + ->where( | ||
269 | + [ | ||
270 | + 'event_id' => $this->id, | ||
271 | + 'variant_id' => $product->id, | ||
272 | + ] | ||
273 | + ) | ||
274 | + ->one(); | ||
275 | + if (!$model instanceof EventToVariant) { | ||
276 | + $model = new EventToVariant(); | ||
277 | + $model->event_id = $this->id; | ||
278 | + $model->variant_id = $product->id; | ||
279 | + $model->save(); | ||
280 | + } | ||
200 | } | 281 | } |
201 | } | 282 | } |
283 | + | ||
202 | } | 284 | } |
203 | - | 285 | + fclose($handle); |
286 | + unlink($file); | ||
287 | + | ||
204 | } | 288 | } |
205 | - fclose($handle); | ||
206 | - unlink($file); | ||
207 | - | ||
208 | - } | ||
209 | - | ||
210 | - public function getProducts(){ | ||
211 | - return $this->hasMany(Product::className(),['id' => 'product_id'] )->viaTable('events_to_products', ['event_id' => 'id']); | ||
212 | - } | ||
213 | - | ||
214 | - public static function getSaleEvents(){ | ||
215 | - return ArrayHelper::toArray(self::find()->select('percent')->distinct('percent')->where('is_sale=true AND percent IS NOT NULL')->orderBy('percent')->all()); | 289 | + |
290 | + public function getProducts() | ||
291 | + { | ||
292 | + return $this->hasMany(Product::className(), [ 'id' => 'product_id' ]) | ||
293 | + ->viaTable('events_to_products', [ 'event_id' => 'id' ]); | ||
294 | + } | ||
295 | + | ||
296 | + public function getVariants() | ||
297 | + { | ||
298 | + return $this->hasMany(ProductVariant::className(), [ 'id' => 'variant_id' ]) | ||
299 | + ->viaTable('event_to_variant', [ 'event_id' => 'id' ]); | ||
300 | + } | ||
301 | + | ||
302 | + public static function getSaleEvents() | ||
303 | + { | ||
304 | + return ArrayHelper::toArray( | ||
305 | + self::find() | ||
306 | + ->select('percent') | ||
307 | + ->distinct('percent') | ||
308 | + ->where('is_sale=true AND percent IS NOT NULL') | ||
309 | + ->orderBy('percent') | ||
310 | + ->all() | ||
311 | + ); | ||
312 | + } | ||
313 | + | ||
216 | } | 314 | } |
217 | - | ||
218 | -} |
1 | +<?php | ||
2 | + | ||
3 | +namespace artweb\artbox\event\models; | ||
4 | + | ||
5 | +use artweb\artbox\ecommerce\models\ProductVariant; | ||
6 | +use Yii; | ||
7 | + | ||
8 | +/** | ||
9 | + * This is the model class for table "event_to_variant". | ||
10 | + * | ||
11 | + * @property integer $id | ||
12 | + * @property integer $event_id | ||
13 | + * @property integer $variant_id | ||
14 | + * | ||
15 | + * @property Event $event | ||
16 | + * @property ProductVariant $variant | ||
17 | + */ | ||
18 | +class EventToVariant extends \yii\db\ActiveRecord | ||
19 | +{ | ||
20 | + /** | ||
21 | + * @inheritdoc | ||
22 | + */ | ||
23 | + public static function tableName() | ||
24 | + { | ||
25 | + return 'event_to_variant'; | ||
26 | + } | ||
27 | + | ||
28 | + /** | ||
29 | + * @inheritdoc | ||
30 | + */ | ||
31 | + public function rules() | ||
32 | + { | ||
33 | + return [ | ||
34 | + [['event_id', 'variant_id'], 'integer'], | ||
35 | + [['event_id'], 'exist', 'skipOnError' => true, 'targetClass' => Event::className(), 'targetAttribute' => ['event_id' => 'id']], | ||
36 | + [['variant_id'], 'exist', 'skipOnError' => true, 'targetClass' => ProductVariant::className(), 'targetAttribute' => ['variant_id' => 'id']], | ||
37 | + ]; | ||
38 | + } | ||
39 | + | ||
40 | + /** | ||
41 | + * @inheritdoc | ||
42 | + */ | ||
43 | + public function attributeLabels() | ||
44 | + { | ||
45 | + return [ | ||
46 | + 'id' => Yii::t('app', 'ID'), | ||
47 | + 'event_id' => Yii::t('app', 'Event ID'), | ||
48 | + 'variant_id' => Yii::t('app', 'Variant ID'), | ||
49 | + ]; | ||
50 | + } | ||
51 | + | ||
52 | + /** | ||
53 | + * @return \yii\db\ActiveQuery | ||
54 | + */ | ||
55 | + public function getEvent() | ||
56 | + { | ||
57 | + return $this->hasOne(Event::className(), ['id' => 'event_id']); | ||
58 | + } | ||
59 | + | ||
60 | + /** | ||
61 | + * @return \yii\db\ActiveQuery | ||
62 | + */ | ||
63 | + public function getVariant() | ||
64 | + { | ||
65 | + return $this->hasOne(ProductVariant::className(), ['id' => 'variant_id']); | ||
66 | + } | ||
67 | +} |
views/event/_form.php
@@ -116,13 +116,13 @@ use yii\helpers\Html; | @@ -116,13 +116,13 @@ use yii\helpers\Html; | ||
116 | <?php $condition = ''; | 116 | <?php $condition = ''; |
117 | echo Select2::widget( | 117 | echo Select2::widget( |
118 | [ | 118 | [ |
119 | - 'name' => 'productIds', | 119 | + 'name' => 'variantsIds', |
120 | 'options' => [ | 120 | 'options' => [ |
121 | - 'placeholder' => \Yii::t('app', 'Search for products ...'), | 121 | + 'placeholder' => \Yii::t('app', 'Search for variant ...'), |
122 | 'multiple' => true, | 122 | 'multiple' => true, |
123 | ], | 123 | ], |
124 | - 'value' => array_keys($model->productsIds), | ||
125 | - 'data' => $model->productsIds, | 124 | + 'value' => array_keys($model->variantsIds), |
125 | + 'data' => $model->variantsIds, | ||
126 | 'pluginOptions' => [ | 126 | 'pluginOptions' => [ |
127 | 'allowClear' => true, | 127 | 'allowClear' => true, |
128 | 'minimumInputLength' => 3, | 128 | 'minimumInputLength' => 3, |
@@ -132,7 +132,7 @@ use yii\helpers\Html; | @@ -132,7 +132,7 @@ use yii\helpers\Html; | ||
132 | ), | 132 | ), |
133 | ], | 133 | ], |
134 | 'ajax' => [ | 134 | 'ajax' => [ |
135 | - 'url' => Url::to([ '/ecommerce/manage/list' ]), | 135 | + 'url' => Url::to([ '/ecommerce/variant/list' ]), |
136 | 'dataType' => 'json', | 136 | 'dataType' => 'json', |
137 | 'data' => new JsExpression( | 137 | 'data' => new JsExpression( |
138 | 'function(params) { | 138 | 'function(params) { |