@@ -151,50 +151,59 @@ private function processAlerts(string $alertType, array $customerIds, int $websi
151
151
$ email ->setWebsiteId ($ websiteId );
152
152
$ errors = [];
153
153
154
- try {
155
- $ collection = $ this ->getAlertCollection ($ alertType , $ customerIds , $ websiteId );
156
- } catch (\Exception $ e ) {
157
- $ errors [] = $ e ->getMessage ();
158
- return $ errors ;
159
- }
160
-
161
- /** @var CustomerInterface $customer */
162
- $ customer = null ;
163
154
/** @var Website $website */
164
155
$ website = $ this ->storeManager ->getWebsite ($ websiteId );
165
- $ defaultStoreId = $ website ->getDefaultStore ()->getId ();
166
- $ products = [];
167
156
168
- /** @var Price|Stock $alert */
169
- foreach ( $ collection as $ alert ) {
170
- try {
171
- if ( $ alert -> getStoreId ()) {
172
- $ email -> setStoreId ( $ alert -> getStoreId () );
173
- }
157
+ foreach ( $ website -> getStores () as $ store ) {
158
+ /** @var CustomerInterface $customer */
159
+ $ customer = null ;
160
+ $ products = [];
161
+ $ storeId = ( int ) $ store -> getId ( );
162
+ $ email -> setStoreId ( $ storeId );
174
163
175
- if ($ customer === null || (int )$ customer ->getId () !== (int )$ alert ->getCustomerId ()) {
176
- $ customer = $ this ->customerRepository ->getById ($ alert ->getCustomerId ());
177
- }
164
+ try {
165
+ $ collection = $ this ->getAlertCollection ($ alertType , $ customerIds , $ websiteId , $ storeId );
166
+ } catch (\Exception $ e ) {
167
+ $ errors [] = $ e ->getMessage ();
168
+ return $ errors ;
169
+ }
178
170
179
- if (!isset ($ products [$ alert ->getProductId ()])) {
180
- $ product = $ this ->productRepository ->getById ($ alert ->getProductId (), false , $ defaultStoreId , true );
181
- $ products [$ alert ->getProductId ()] = $ product ;
182
- } else {
183
- $ product = $ products [$ alert ->getProductId ()];
171
+ /** @var Price|Stock $alert */
172
+ foreach ($ collection as $ alert ) {
173
+ try {
174
+ if ($ customer === null ) {
175
+ $ customer = $ this ->customerRepository ->getById ($ alert ->getCustomerId ());
176
+ } elseif ((int )$ customer ->getId () !== (int )$ alert ->getCustomerId ()) {
177
+ $ this ->sendEmail ($ customer , $ email );
178
+ $ customer = $ this ->customerRepository ->getById ($ alert ->getCustomerId ());
179
+ }
180
+
181
+ if (!isset ($ products [$ alert ->getProductId ()])) {
182
+ $ product = $ this ->productRepository ->getById ($ alert ->getProductId (), false , $ storeId , true );
183
+ $ products [$ alert ->getProductId ()] = $ product ;
184
+ } else {
185
+ $ product = $ products [$ alert ->getProductId ()];
186
+ }
187
+
188
+ switch ($ alertType ) {
189
+ case self ::ALERT_TYPE_STOCK :
190
+ $ this ->saveStockAlert ($ alert , $ product , $ website , $ email );
191
+ break ;
192
+ case self ::ALERT_TYPE_PRICE :
193
+ $ this ->savePriceAlert ($ alert , $ product , $ customer , $ email );
194
+ break ;
195
+ }
196
+ } catch (\Exception $ e ) {
197
+ $ errors [] = $ e ->getMessage ();
184
198
}
199
+ }
185
200
186
- switch ($ alertType ) {
187
- case self ::ALERT_TYPE_STOCK :
188
- $ this ->saveStockAlert ($ alert , $ product , $ website , $ email );
189
- break ;
190
- case self ::ALERT_TYPE_PRICE :
191
- $ this ->savePriceAlert ($ alert , $ product , $ customer , $ email );
192
- break ;
201
+ if ($ customer !== null ) {
202
+ try {
203
+ $ this ->sendEmail ($ customer , $ email );
204
+ } catch (\Exception $ e ) {
205
+ $ errors [] = $ e ->getMessage ();
193
206
}
194
-
195
- $ this ->sendEmail ($ customer , $ email );
196
- } catch (\Exception $ e ) {
197
- $ errors [] = $ e ->getMessage ();
198
207
}
199
208
}
200
209
@@ -220,24 +229,27 @@ private function validateAlertType(string $alertType): void
220
229
* @param string $alertType
221
230
* @param array $customerIds
222
231
* @param int $websiteId
232
+ * @param int $storeId
223
233
* @return AbstractCollection
224
234
* @throws \InvalidArgumentException
225
235
*/
226
- private function getAlertCollection (string $ alertType , array $ customerIds , int $ websiteId ): AbstractCollection
236
+ private function getAlertCollection (string $ alertType , array $ customerIds , int $ websiteId, int $ storeId ): AbstractCollection
227
237
{
228
238
switch ($ alertType ) {
229
239
case self ::ALERT_TYPE_STOCK :
230
240
$ collection = $ this ->stockCollectionFactory ->create ();
231
241
$ collection ->addFieldToFilter ('customer_id ' , ['in ' => $ customerIds ])
232
242
->addWebsiteFilter ($ websiteId )
233
243
->addStatusFilter (0 )
244
+ ->addFilter ('store_id ' , $ storeId )
234
245
->setCustomerOrder ()
235
246
->addOrder ('product_id ' );
236
247
break ;
237
248
case self ::ALERT_TYPE_PRICE :
238
249
$ collection = $ this ->priceCollectionFactory ->create ();
239
250
$ collection ->addFieldToFilter ('customer_id ' , ['in ' => $ customerIds ])
240
251
->addWebsiteFilter ($ websiteId )
252
+ ->addFilter ('store_id ' , $ storeId )
241
253
->setCustomerOrder ()
242
254
->addOrder ('product_id ' );
243
255
break ;
0 commit comments