This is an automated email from the ASF dual-hosted git repository.

victorromero pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/fineract.git


The following commit(s) were added to refs/heads/develop by this push:
     new b7845166c4 FINERACT-2227: Fix triggered SMS messages error (#4511)
b7845166c4 is described below

commit b7845166c49b629d719568c309a8616282bdce2d
Author: Peter Mwangi <[email protected]>
AuthorDate: Tue Apr 1 05:43:30 2025 +0300

    FINERACT-2227: Fix triggered SMS messages error (#4511)
---
 .../SmsMessageScheduledJobServiceImpl.java         | 41 +++++++++++++---------
 1 file changed, 24 insertions(+), 17 deletions(-)

diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/sms/scheduler/SmsMessageScheduledJobServiceImpl.java
 
b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/sms/scheduler/SmsMessageScheduledJobServiceImpl.java
index 278f4fc7b6..733601a712 100644
--- 
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/sms/scheduler/SmsMessageScheduledJobServiceImpl.java
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/sms/scheduler/SmsMessageScheduledJobServiceImpl.java
@@ -22,7 +22,6 @@ import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import java.net.URI;
 import java.util.ArrayList;
 import java.util.Collection;
-import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import lombok.RequiredArgsConstructor;
@@ -90,36 +89,44 @@ public class SmsMessageScheduledJobServiceImpl implements 
SmsMessageScheduledJob
             if (!smsDataMap.isEmpty()) {
                 List<SmsMessage> toSaveMessages = new ArrayList<>();
                 List<SmsMessage> toSendNotificationMessages = new 
ArrayList<>();
+
                 for (Map.Entry<SmsCampaign, Collection<SmsMessage>> entry : 
smsDataMap.entrySet()) {
-                    Iterator<SmsMessage> smsMessageIterator = 
entry.getValue().iterator();
-                    Collection<SmsMessageApiQueueResourceData> 
apiQueueResourceDatas = new ArrayList<>();
-                    while (smsMessageIterator.hasNext()) {
-                        SmsMessage smsMessage = smsMessageIterator.next();
+                    for (SmsMessage smsMessage : entry.getValue()) {
                         if (smsMessage.isNotification()) {
                             
smsMessage.setStatusType(SmsMessageStatusType.WAITING_FOR_DELIVERY_REPORT.getValue());
                             toSendNotificationMessages.add(smsMessage);
                         } else {
-                            SmsMessageApiQueueResourceData 
apiQueueResourceData = SmsMessageApiQueueResourceData.instance(
-                                    smsMessage.getId(), null, null, null, 
smsMessage.getMobileNo(), smsMessage.getMessage(),
-                                    entry.getKey().getProviderId());
-                            apiQueueResourceDatas.add(apiQueueResourceData);
                             
smsMessage.setStatusType(SmsMessageStatusType.WAITING_FOR_DELIVERY_REPORT.getValue());
                             toSaveMessages.add(smsMessage);
                         }
                     }
-                    if (toSaveMessages.size() > 0) {
-                        this.smsMessageRepository.saveAll(toSaveMessages);
-                        this.smsMessageRepository.flush();
-                        this.taskExecutor.execute(new 
SmsTask(apiQueueResourceDatas, ThreadLocalContextUtil.getContext()));
-                    }
-                    if (!toSendNotificationMessages.isEmpty()) {
-                        
this.notificationSenderService.sendNotification(toSendNotificationMessages);
+                }
+                if (!toSaveMessages.isEmpty()) {
+                    this.smsMessageRepository.saveAll(toSaveMessages);
+                    this.smsMessageRepository.flush();
+
+                    for (Map.Entry<SmsCampaign, Collection<SmsMessage>> entry 
: smsDataMap.entrySet()) {
+                        Collection<SmsMessageApiQueueResourceData> 
apiQueueResourceDatas = new ArrayList<>();
+                        for (SmsMessage smsMessage : entry.getValue()) {
+                            if (!smsMessage.isNotification()) {
+                                SmsMessageApiQueueResourceData 
apiQueueResourceData = SmsMessageApiQueueResourceData.instance(
+                                        smsMessage.getId(), null, null, null, 
smsMessage.getMobileNo(), smsMessage.getMessage(),
+                                        entry.getKey().getProviderId());
+                                
apiQueueResourceDatas.add(apiQueueResourceData);
+                            }
+                        }
+                        if (!apiQueueResourceDatas.isEmpty()) {
+                            this.taskExecutor.execute(new 
SmsTask(apiQueueResourceDatas, ThreadLocalContextUtil.getContext()));
+                        }
                     }
+                }
 
+                if (!toSendNotificationMessages.isEmpty()) {
+                    
this.notificationSenderService.sendNotification(toSendNotificationMessages);
                 }
             }
         } catch (Exception e) {
-            log.error("Error occured.", e);
+            log.error("Error occurred.", e);
         }
     }
 

Reply via email to