Commit 66ff49d7ed230119efe817339056d030ee3daa69

Authored by Alexey Boroda
1 parent 8e356b8c

-Sizes alpha test

controllers/BrandSizeController.php
... ... @@ -8,6 +8,7 @@
8 8 use artweb\artbox\ecommerce\models\BrandSize;
9 9 use artweb\artbox\ecommerce\models\BrandSizeSearch;
10 10 use yii\helpers\ArrayHelper;
  11 + use yii\helpers\VarDumper;
11 12 use yii\web\Controller;
12 13 use yii\web\NotFoundHttpException;
13 14 use yii\filters\VerbFilter;
... ... @@ -126,7 +127,7 @@
126 127 public function actionUpdate($id)
127 128 {
128 129 $model = $this->findModel($id);
129   -
  130 +
130 131 $categories = ArrayHelper::map(
131 132 Category::find()
132 133 ->with('lang')
... ...
models/BrandSize.php
... ... @@ -69,7 +69,7 @@ class BrandSize extends \yii\db\ActiveRecord
69 69 */
70 70 public function getBrand()
71 71 {
72   - return $this->hasOne(Brand::className(), ['id' => 'brand_id']);
  72 + return $this->hasOne(Brand::className(), ['id' => 'brand_id'])->with('lang');
73 73 }
74 74  
75 75 /**
... ...
models/Product.php
... ... @@ -105,7 +105,7 @@
105 105 class Product extends ActiveRecord
106 106 {
107 107 public $option_id;
108   -
  108 +
109 109 public $min;
110 110 public $max;
111 111  
... ... @@ -283,20 +283,17 @@
283 283 {
284 284 return $this->getVariant();
285 285 }
286   -
287   -
288   -
289   -
290   -
  286 +
291 287 /**
292 288 * @return \yii\db\ActiveQuery
293 289 */
294   - public function getEvents(){
295   - return $this->hasMany(Event::className(), ['id' => 'event_id'])->viaTable('events_to_products', ['product_id' => 'id'])->where(['status'=>Event::ACTIVE]);
  290 + public function getEvents()
  291 + {
  292 + return $this->hasMany(Event::className(), [ 'id' => 'event_id' ])
  293 + ->viaTable('events_to_products', [ 'product_id' => 'id' ])
  294 + ->where([ 'status' => Event::ACTIVE ]);
296 295 }
297   -
298   -
299   -
  296 +
300 297 /**
301 298 * Get ProductVariant query fetching only available in stock to current Product
302 299 *
... ... @@ -332,21 +329,20 @@
332 329 ]
333 330 );
334 331 }
335   -
336   -
337   - public function getMaxPrice(){
  332 +
  333 + public function getMaxPrice()
  334 + {
338 335 $price = 0;
339   - if (!empty( $this->enabledVariants )) {
340   - foreach ( $this->enabledVariants as $variant){
341   - if($variant->price > $price){
  336 + if (!empty($this->enabledVariants)) {
  337 + foreach ($this->enabledVariants as $variant) {
  338 + if ($variant->price > $price) {
342 339 $price = $variant->price;
343 340 }
344 341 }
345 342 }
346 343 return $price;
347 344 }
348   -
349   -
  345 +
350 346 /**
351 347 * Get random ProductVariant price or 0 if not exist
352 348 *
... ... @@ -357,7 +353,7 @@
357 353 */
358 354 public function getVariantPrice(bool $exception = false): float
359 355 {
360   - if (!empty( $this->variant )) {
  356 + if (!empty($this->variant)) {
361 357 return $this->variant->price;
362 358 } elseif ($exception) {
363 359 throw new NotFoundHttpException('Product with ID ' . $this->id . ' hasn\'t got variants');
... ... @@ -376,7 +372,7 @@
376 372 */
377 373 public function getEnabledVariantPrice(bool $exception = false): float
378 374 {
379   - if (!empty( $this->enabledVariant )) {
  375 + if (!empty($this->enabledVariant)) {
380 376 return $this->enabledVariant->price;
381 377 } elseif ($exception) {
382 378 throw new NotFoundHttpException('Product with ID ' . $this->id . ' hasn\'t got enabled variants');
... ... @@ -384,39 +380,53 @@
384 380 return 0;
385 381 }
386 382 }
387   -
388 383  
389 384 /**
390 385 * Get Product name concatenated with Brand name
391 386 *
392 387 * @return string
393 388 */
394   - public function getFullName():string
  389 + public function getFullName(): string
395 390 {
396 391 $name = '';
397   - $groupName = (new Query())->select(['tax_option.*','tax_option_lang.*'])
398   - ->from([ 'tax_option' ])
399   - ->innerJoin('tax_group', 'tax_group.id = tax_option.tax_group_id')
400   - ->innerJoin('tax_option_lang', 'tax_option.id = tax_option_lang.tax_option_id')
401   - ->innerJoin('tax_group_to_category', 'tax_group.id = tax_group_to_category.tax_group_id')
402   - ->where(['tax_group_to_category.category_id' => $this->category->id, 'tax_group.use_in_name'=>1, 'tax_option.id' => ArrayHelper::getColumn($this->options,'id')])
403   - ->one();
404   -
405   -
406   - if($groupName != null ){
407   - $groupName = $groupName['value'];
  392 + $groupName = ( new Query() )->select(
  393 + [
  394 + 'tax_option.*',
  395 + 'tax_option_lang.*',
  396 + ]
  397 + )
  398 + ->from([ 'tax_option' ])
  399 + ->innerJoin('tax_group', 'tax_group.id = tax_option.tax_group_id')
  400 + ->innerJoin('tax_option_lang', 'tax_option.id = tax_option_lang.tax_option_id')
  401 + ->innerJoin(
  402 + 'tax_group_to_category',
  403 + 'tax_group.id = tax_group_to_category.tax_group_id'
  404 + )
  405 + ->where(
  406 + [
  407 + 'tax_group_to_category.category_id' => $this->category->id,
  408 + 'tax_group.use_in_name' => 1,
  409 + 'tax_option.id' => ArrayHelper::getColumn(
  410 + $this->options,
  411 + 'id'
  412 + ),
  413 + ]
  414 + )
  415 + ->one();
  416 +
  417 + if ($groupName != NULL) {
  418 + $groupName = $groupName[ 'value' ];
408 419 } else {
409 420 $groupName = '';
410 421 }
411   -
412   -
413   - if (!empty( $this->category->lang->category_synonym )) {
414   - $name = $name . ($groupName ? $groupName : $this->category->lang->category_synonym) . ' ';
  422 +
  423 + if (!empty($this->category->lang->category_synonym)) {
  424 + $name = $name . ( $groupName ? $groupName : $this->category->lang->category_synonym ) . ' ';
415 425 } else {
416   - $name = $name . ($groupName ? $groupName : $this->category->lang->title) . ' ';
  426 + $name = $name . ( $groupName ? $groupName : $this->category->lang->title ) . ' ';
417 427 }
418   -
419   - if (!empty( $this->brand )) {
  428 +
  429 + if (!empty($this->brand)) {
420 430 $name = $name . $this->brand->lang->title . ' ';
421 431 }
422 432 $name .= $this->lang->title;
... ... @@ -485,11 +495,10 @@
485 495 public function getOptions()
486 496 {
487 497 return $this->hasMany(TaxOption::className(), [ 'id' => 'option_id' ])
488   - ->viaTable('product_option', [ 'product_id' => 'id' ]);
489   -
  498 + ->viaTable('product_option', [ 'product_id' => 'id' ]);
  499 +
490 500 }
491   -
492   -
  501 +
493 502 /**
494 503 * Get TaxOptions query for current Product that will by used in filter
495 504 *
... ... @@ -497,13 +506,17 @@
497 506 */
498 507 public function getFilterOptions()
499 508 {
500   -
  509 +
501 510 return $this->getOptions()
502   - ->joinWith(['lang','taxGroup'])
503   - ->where(['is_filter' => true]);
  511 + ->joinWith(
  512 + [
  513 + 'lang',
  514 + 'taxGroup',
  515 + ]
  516 + )
  517 + ->where([ 'is_filter' => true ]);
504 518 }
505   -
506   -
  519 +
507 520 /**
508 521 * Get TaxGroup for current Product
509 522 *
... ... @@ -511,11 +524,10 @@
511 524 */
512 525 public function getGroups()
513 526 {
514   - return $this->hasMany(TaxGroup::className(), [ 'id' => 'tax_group_id' ])
515   - ->via('options');
  527 + return $this->hasMany(TaxGroup::className(), [ 'id' => 'tax_group_id' ])
  528 + ->via('options');
516 529 }
517   -
518   -
  530 +
519 531 /**
520 532 * Get TaxOptions query for current Product joined with TaxGroups
521 533 *
... ... @@ -552,7 +564,7 @@
552 564 /**
553 565 * @var TaxGroup $group
554 566 */
555   - if (!empty( $options[ $group->id ] )) {
  567 + if (!empty($options[ $group->id ])) {
556 568 $group->customOptions = $options[ $group->id ];
557 569 $groups[] = $group;
558 570 }
... ... @@ -593,7 +605,7 @@
593 605 * @see Product::getProductStocks()
594 606 * @return int
595 607 */
596   - public function getQuantity():int
  608 + public function getQuantity(): int
597 609 {
598 610 return $this->getProductStocks()
599 611 ->sum('quantity');
... ... @@ -607,10 +619,8 @@
607 619 public function afterSave($insert, $changedAttributes)
608 620 {
609 621 parent::afterSave($insert, $changedAttributes);
610   -
611   -
612   -
613   - if (!empty( $this->categories )) {
  622 +
  623 + if (!empty($this->categories)) {
614 624 $categories = Category::findAll($this->categories);
615 625 $this->unlinkAll('categories', true);
616 626 foreach ($categories as $category) {
... ... @@ -618,7 +628,7 @@
618 628 }
619 629 }
620 630  
621   - if (!empty( $this->options )) {
  631 + if (!empty($this->options)) {
622 632 $options = TaxOption::findAll($this->options);
623 633 $this->unlinkAll('options', true);
624 634 foreach ($options as $option) {
... ... @@ -664,7 +674,20 @@
664 674  
665 675 public function getSize()
666 676 {
667   - $size = BrandSize::find()->joinWith('categories')->createCommand()->rawSql;
  677 + $subQuery = Product::find()
  678 + ->select('category.id as x')
  679 + ->joinWith('categories')
  680 + ->where([ 'product.id' => $this->id, ]);
  681 + $size = BrandSize::find()
  682 + ->joinWith('categories')
  683 + ->innerJoin([ 's' => $subQuery ], 's.x = category.id')
  684 + ->where(
  685 + [
  686 + 'brand_size.brand_id' => $this->brand->id,
  687 + ]
  688 + )
  689 + ->one();
  690 + return $size;
668 691 }
669 692  
670 693 /**
... ... @@ -686,17 +709,17 @@
686 709 {
687 710 $this->options = $values;
688 711 }
689   -
  712 +
690 713 public function beforeSave($insert)
691 714 {
692 715 if (parent::beforeSave($insert)) {
693   -
  716 +
694 717 return true;
695 718 } else {
696 719 return false;
697 720 }
698 721 }
699   -
  722 +
700 723 public function beforeDelete()
701 724 {
702 725 if (parent::beforeDelete()) {
... ...
views/brand-size/index.php
... ... @@ -25,8 +25,8 @@ $this->params['breadcrumbs'][] = $this->title;
25 25 ['class' => 'yii\grid\SerialColumn'],
26 26  
27 27 'id',
28   - 'brand_id',
29   - 'image',
  28 + 'brand.lang.title',
  29 + 'imageUrl:image',
30 30  
31 31 ['class' => 'yii\grid\ActionColumn'],
32 32 ],
... ...
views/brand-size/view.php
... ... @@ -51,8 +51,8 @@
51 51 'model' => $model,
52 52 'attributes' => [
53 53 'id',
54   - 'brand_id',
55   - 'image',
  54 + 'brand.lang.title',
  55 + 'imageUrl:image',
56 56 ],
57 57 ]
58 58 ) ?>
... ...