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 | 33 | } |
| 34 | 34 | parent::__construct($config); |
| 35 | 35 | } |
| 36 | - | |
| 36 | + | |
| 37 | 37 | /** |
| 38 | 38 | * Increment product variant with $product_variant_id count by 1 |
| 39 | 39 | * |
| 40 | 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 | 45 | $data = $this->getData(); |
| 45 | 46 | if (array_key_exists($product_variant_id, $data)) { |
| 46 | 47 | if ($data[ $product_variant_id ][ 'count' ] <= 0) { |
| 47 | - $data[ $product_variant_id ] = 1; | |
| 48 | + $data[ $product_variant_id ][ 'count' ] = $count; | |
| 48 | 49 | } else { |
| 49 | - $data[ $product_variant_id ][ 'count' ] += 1; | |
| 50 | + $data[ $product_variant_id ][ 'count' ] += $count; | |
| 50 | 51 | } |
| 51 | 52 | } else { |
| 52 | 53 | if ($this->findModel($product_variant_id)) { |
| 53 | 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 | 62 | $this->setData($data); |
| 59 | 63 | } |
| 60 | 64 | |
| ... | ... | @@ -64,7 +68,7 @@ |
| 64 | 68 | * @param int $product_variant_id |
| 65 | 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 | 73 | $data = $this->getData(); |
| 70 | 74 | if (array_key_exists($product_variant_id, $data)) { |
| ... | ... | @@ -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 | 164 | * Find Product Variant by $product_variant_id |
| 145 | 165 | * |
| 146 | 166 | * @param int $product_variant_id |
| ... | ... | @@ -155,7 +175,7 @@ |
| 155 | 175 | */ |
| 156 | 176 | $model = ProductVariant::find() |
| 157 | 177 | ->where([ 'product_variant.id' => $product_variant_id ]) |
| 158 | - ->joinWith('lang', true, 'INNER JOIN') | |
| 178 | + ->joinWith('lang') | |
| 159 | 179 | ->one(); |
| 160 | 180 | if (empty( $model )) { |
| 161 | 181 | throw new NotFoundHttpException(\Yii::t('app', 'Product not found')); |
| ... | ... | @@ -173,15 +193,19 @@ |
| 173 | 193 | */ |
| 174 | 194 | public function findModels(array $product_variant_ids) |
| 175 | 195 | { |
| 196 | + if (empty( $product_variant_ids )) { | |
| 197 | + return []; | |
| 198 | + } | |
| 176 | 199 | return ProductVariant::find() |
| 177 | 200 | ->where([ 'product_variant.id' => $product_variant_ids ]) |
| 178 | - ->joinWith('lang', true, 'INNER JOIN') | |
| 201 | + ->joinWith('lang', 'product') | |
| 179 | 202 | ->with( |
| 180 | 203 | [ |
| 181 | - 'product', | |
| 204 | + 'product.lang', | |
| 182 | 205 | 'image', |
| 183 | 206 | ] |
| 184 | 207 | ) |
| 208 | + ->indexBy('id') | |
| 185 | 209 | ->all(); |
| 186 | 210 | } |
| 187 | 211 | ... | ... |