diff --git a/models/Basket.php b/models/Basket.php index a03b01e..a5e3073 100755 --- a/models/Basket.php +++ b/models/Basket.php @@ -33,28 +33,32 @@ } parent::__construct($config); } - + /** * Increment product variant with $product_variant_id count by 1 * * @param int $product_variant_id + * @param int $count */ - public function add(int $product_variant_id) + public function add(int $product_variant_id, int $count) { $data = $this->getData(); if (array_key_exists($product_variant_id, $data)) { if ($data[ $product_variant_id ][ 'count' ] <= 0) { - $data[ $product_variant_id ] = 1; + $data[ $product_variant_id ][ 'count' ] = $count; } else { - $data[ $product_variant_id ][ 'count' ] += 1; + $data[ $product_variant_id ][ 'count' ] += $count; } } else { if ($this->findModel($product_variant_id)) { $data[ $product_variant_id ] = [ - 'count' => 1, + 'count' => $count, ]; } } + if($data[$product_variant_id]['count'] <= 0) { + unset($data[$product_variant_id]); + } $this->setData($data); } @@ -64,7 +68,7 @@ * @param int $product_variant_id * @param int $count */ - private function set(int $product_variant_id, int $count) + public function set(int $product_variant_id, int $count) { $data = $this->getData(); if (array_key_exists($product_variant_id, $data)) { @@ -141,6 +145,22 @@ } /** + * Get sum of product variants in basket + * + * @return float + */ + public function getSum(): float + { + $data = $this->getData(); + $models = $this->findModels(array_keys($data)); + $sum = 0; + foreach ($models as $model) { + $sum += $model->price * $data[$model->id]['count']; + } + return $sum; + } + + /** * Find Product Variant by $product_variant_id * * @param int $product_variant_id @@ -155,7 +175,7 @@ */ $model = ProductVariant::find() ->where([ 'product_variant.id' => $product_variant_id ]) - ->joinWith('lang', true, 'INNER JOIN') + ->joinWith('lang') ->one(); if (empty( $model )) { throw new NotFoundHttpException(\Yii::t('app', 'Product not found')); @@ -173,15 +193,19 @@ */ public function findModels(array $product_variant_ids) { + if (empty( $product_variant_ids )) { + return []; + } return ProductVariant::find() ->where([ 'product_variant.id' => $product_variant_ids ]) - ->joinWith('lang', true, 'INNER JOIN') + ->joinWith('lang', 'product') ->with( [ - 'product', + 'product.lang', 'image', ] ) + ->indexBy('id') ->all(); } -- libgit2 0.21.4