@@ -151,58 +151,59 @@ private function processAlerts(string $alertType, array $customerIds, int $websi
151151 $ email ->setWebsiteId ($ websiteId );
152152 $ errors = [];
153153
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 ;
163154 /** @var Website $website */
164155 $ website = $ this ->storeManager ->getWebsite ($ websiteId );
165- $ defaultStoreId = $ website ->getDefaultStore ()->getId ();
166- $ products = [];
167-
168- /** @var Price|Stock $alert */
169- foreach ($ collection as $ alert ) {
170- try {
171- if ($ alert ->getStoreId ()) {
172- $ email ->setStoreId ($ alert ->getStoreId ());
173- }
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- }
180156
181- if (! isset ( $ products [ $ alert -> getProductId ()]) ) {
182- $ product = $ this -> productRepository -> getById ( $ alert -> getProductId (), false , $ defaultStoreId , true );
183- $ products [ $ alert -> getProductId ()] = $ product ;
184- } else {
185- $ product = $ products [ $ alert -> getProductId ()] ;
186- }
157+ foreach ( $ website -> getStores () as $ store ) {
158+ /** @var CustomerInterface $customer */
159+ $ customer = null ;
160+ $ products = [];
161+ $ storeId = ( int ) $ store -> getId () ;
162+ $ email -> setStoreId ( $ storeId );
187163
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- }
164+ try {
165+ $ collection = $ this ->getAlertCollection ($ alertType , $ customerIds , $ storeId );
196166 } catch (\Exception $ e ) {
197167 $ errors [] = $ e ->getMessage ();
168+ continue ;
198169 }
199- }
200170
201- if ($ customer !== null ) {
202- try {
203- $ this ->sendEmail ($ customer , $ email );
204- } catch (\Exception $ e ) {
205- $ errors [] = $ e ->getMessage ();
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 ();
198+ }
199+ }
200+
201+ if ($ customer !== null ) {
202+ try {
203+ $ this ->sendEmail ($ customer , $ email );
204+ } catch (\Exception $ e ) {
205+ $ errors [] = $ e ->getMessage ();
206+ }
206207 }
207208 }
208209
@@ -227,25 +228,25 @@ private function validateAlertType(string $alertType): void
227228 *
228229 * @param string $alertType
229230 * @param array $customerIds
230- * @param int $websiteId
231+ * @param int $storeId
231232 * @return AbstractCollection
232233 * @throws \InvalidArgumentException
233234 */
234- private function getAlertCollection (string $ alertType , array $ customerIds , int $ websiteId ): AbstractCollection
235+ private function getAlertCollection (string $ alertType , array $ customerIds , int $ storeId ): AbstractCollection
235236 {
236237 switch ($ alertType ) {
237238 case self ::ALERT_TYPE_STOCK :
238239 $ collection = $ this ->stockCollectionFactory ->create ();
239240 $ collection ->addFieldToFilter ('customer_id ' , ['in ' => $ customerIds ])
240- ->addWebsiteFilter ($ websiteId )
241241 ->addStatusFilter (0 )
242+ ->addFilter ('store_id ' , $ storeId )
242243 ->setCustomerOrder ()
243244 ->addOrder ('product_id ' );
244245 break ;
245246 case self ::ALERT_TYPE_PRICE :
246247 $ collection = $ this ->priceCollectionFactory ->create ();
247248 $ collection ->addFieldToFilter ('customer_id ' , ['in ' => $ customerIds ])
248- ->addWebsiteFilter ( $ websiteId )
249+ ->addFilter ( ' store_id ' , $ storeId )
249250 ->setCustomerOrder ()
250251 ->addOrder ('product_id ' );
251252 break ;
0 commit comments