Commit b213b850acca3faea9ef53c0a44825efa9a68a48
1 parent
183a715c
Basket
Showing
1 changed file
with
33 additions
and
9 deletions
Show diff stats
models/Basket.php
@@ -33,28 +33,32 @@ | @@ -33,28 +33,32 @@ | ||
33 | } | 33 | } |
34 | parent::__construct($config); | 34 | parent::__construct($config); |
35 | } | 35 | } |
36 | - | 36 | + |
37 | /** | 37 | /** |
38 | * Increment product variant with $product_variant_id count by 1 | 38 | * Increment product variant with $product_variant_id count by 1 |
39 | * | 39 | * |
40 | * @param int $product_variant_id | 40 | * @param int $product_variant_id |
41 | + * @param int $count | ||
41 | */ | 42 | */ |
42 | - public function add(int $product_variant_id) | 43 | + public function add(int $product_variant_id, int $count) |
43 | { | 44 | { |
44 | $data = $this->getData(); | 45 | $data = $this->getData(); |
45 | if (array_key_exists($product_variant_id, $data)) { | 46 | if (array_key_exists($product_variant_id, $data)) { |
46 | if ($data[ $product_variant_id ][ 'count' ] <= 0) { | 47 | if ($data[ $product_variant_id ][ 'count' ] <= 0) { |
47 | - $data[ $product_variant_id ] = 1; | 48 | + $data[ $product_variant_id ][ 'count' ] = $count; |
48 | } else { | 49 | } else { |
49 | - $data[ $product_variant_id ][ 'count' ] += 1; | 50 | + $data[ $product_variant_id ][ 'count' ] += $count; |
50 | } | 51 | } |
51 | } else { | 52 | } else { |
52 | if ($this->findModel($product_variant_id)) { | 53 | if ($this->findModel($product_variant_id)) { |
53 | $data[ $product_variant_id ] = [ | 54 | $data[ $product_variant_id ] = [ |
54 | - 'count' => 1, | 55 | + 'count' => $count, |
55 | ]; | 56 | ]; |
56 | } | 57 | } |
57 | } | 58 | } |
59 | + if($data[$product_variant_id]['count'] <= 0) { | ||
60 | + unset($data[$product_variant_id]); | ||
61 | + } | ||
58 | $this->setData($data); | 62 | $this->setData($data); |
59 | } | 63 | } |
60 | 64 | ||
@@ -64,7 +68,7 @@ | @@ -64,7 +68,7 @@ | ||
64 | * @param int $product_variant_id | 68 | * @param int $product_variant_id |
65 | * @param int $count | 69 | * @param int $count |
66 | */ | 70 | */ |
67 | - private function set(int $product_variant_id, int $count) | 71 | + public function set(int $product_variant_id, int $count) |
68 | { | 72 | { |
69 | $data = $this->getData(); | 73 | $data = $this->getData(); |
70 | if (array_key_exists($product_variant_id, $data)) { | 74 | if (array_key_exists($product_variant_id, $data)) { |
@@ -141,6 +145,22 @@ | @@ -141,6 +145,22 @@ | ||
141 | } | 145 | } |
142 | 146 | ||
143 | /** | 147 | /** |
148 | + * Get sum of product variants in basket | ||
149 | + * | ||
150 | + * @return float | ||
151 | + */ | ||
152 | + public function getSum(): float | ||
153 | + { | ||
154 | + $data = $this->getData(); | ||
155 | + $models = $this->findModels(array_keys($data)); | ||
156 | + $sum = 0; | ||
157 | + foreach ($models as $model) { | ||
158 | + $sum += $model->price * $data[$model->id]['count']; | ||
159 | + } | ||
160 | + return $sum; | ||
161 | + } | ||
162 | + | ||
163 | + /** | ||
144 | * Find Product Variant by $product_variant_id | 164 | * Find Product Variant by $product_variant_id |
145 | * | 165 | * |
146 | * @param int $product_variant_id | 166 | * @param int $product_variant_id |
@@ -155,7 +175,7 @@ | @@ -155,7 +175,7 @@ | ||
155 | */ | 175 | */ |
156 | $model = ProductVariant::find() | 176 | $model = ProductVariant::find() |
157 | ->where([ 'product_variant.id' => $product_variant_id ]) | 177 | ->where([ 'product_variant.id' => $product_variant_id ]) |
158 | - ->joinWith('lang', true, 'INNER JOIN') | 178 | + ->joinWith('lang') |
159 | ->one(); | 179 | ->one(); |
160 | if (empty( $model )) { | 180 | if (empty( $model )) { |
161 | throw new NotFoundHttpException(\Yii::t('app', 'Product not found')); | 181 | throw new NotFoundHttpException(\Yii::t('app', 'Product not found')); |
@@ -173,15 +193,19 @@ | @@ -173,15 +193,19 @@ | ||
173 | */ | 193 | */ |
174 | public function findModels(array $product_variant_ids) | 194 | public function findModels(array $product_variant_ids) |
175 | { | 195 | { |
196 | + if (empty( $product_variant_ids )) { | ||
197 | + return []; | ||
198 | + } | ||
176 | return ProductVariant::find() | 199 | return ProductVariant::find() |
177 | ->where([ 'product_variant.id' => $product_variant_ids ]) | 200 | ->where([ 'product_variant.id' => $product_variant_ids ]) |
178 | - ->joinWith('lang', true, 'INNER JOIN') | 201 | + ->joinWith('lang', 'product') |
179 | ->with( | 202 | ->with( |
180 | [ | 203 | [ |
181 | - 'product', | 204 | + 'product.lang', |
182 | 'image', | 205 | 'image', |
183 | ] | 206 | ] |
184 | ) | 207 | ) |
208 | + ->indexBy('id') | ||
185 | ->all(); | 209 | ->all(); |
186 | } | 210 | } |
187 | 211 |