Commit b213b850acca3faea9ef53c0a44825efa9a68a48

Authored by Yarik
1 parent 183a715c

Basket

Showing 1 changed file with 33 additions and 9 deletions   Show diff stats
@@ -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