Addressing SMS Review Comments

Project: http://git-wip-us.apache.org/repos/asf/incubator-fineract/repo
Commit: 
http://git-wip-us.apache.org/repos/asf/incubator-fineract/commit/2d1f6ab3
Tree: http://git-wip-us.apache.org/repos/asf/incubator-fineract/tree/2d1f6ab3
Diff: http://git-wip-us.apache.org/repos/asf/incubator-fineract/diff/2d1f6ab3

Branch: refs/heads/develop
Commit: 2d1f6ab39137094af30aaf26a1766b8691ca09e0
Parents: 911cab8
Author: Nazeer Hussain Shaik <[email protected]>
Authored: Mon Nov 14 17:50:37 2016 +0530
Committer: Nazeer Hussain Shaik <[email protected]>
Committed: Mon Nov 14 17:50:37 2016 +0530

----------------------------------------------------------------------
 api-docs/apiLive.htm                            | 156 ++++++++-
 .../commands/service/CommandWrapperBuilder.java |  12 +-
 .../sms/constants/SmsCampaignConstants.java     |  11 -
 .../sms/constants/SmsCampaignEnumerations.java  |  10 +-
 .../sms/data/CampaignTriggerWithSubTypes.java   | 298 -----------------
 .../sms/data/TriggerTypeWithSubTypesData.java   |  43 ---
 .../sms/domain/SmsCampaignRepository.java       |   5 +
 .../service/SmsCampaignDomainServiceImpl.java   | 332 ++++++++-----------
 .../SmsCampaignDropdownReadPlatformService.java |   3 -
 ...CampaignDropdownReadPlatformServiceImpl.java |  15 +-
 .../SmsCampaignWritePlatformServiceJpaImpl.java |  15 +-
 .../SmsMessageScheduledJobServiceImpl.java      |   2 +-
 12 files changed, 327 insertions(+), 575 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/2d1f6ab3/api-docs/apiLive.htm
----------------------------------------------------------------------
diff --git a/api-docs/apiLive.htm b/api-docs/apiLive.htm
index c2a06be..467d6c5 100644
--- a/api-docs/apiLive.htm
+++ b/api-docs/apiLive.htm
@@ -21159,12 +21159,15 @@ Request Body:
 <a id="smscampaigns_retrieve" name="smscampaigns_retrieve" 
class="old-syle-anchor">&nbsp;</a>
     <div class="method-section">
         <div class="method-description">
-            <h4>Retrieve a Share Product</h4>
+            <h4>Retrieve a SMS Campaign</h4>
             <p>Example Requests: </p>
             <div class=apiClick>smscampaigns/1</div>
             <br><br>
             <div class=apiClick>smscampaigns/1?template=true</div>
+                       <br><br>
+                       <div class=apiClick>smscampaigns/template</div>
         </div>
+
         <div class="method-example">
                        <code class="method-declaration">GET https://Domain 
Name/api/v1/smscampaigns/1</code>
                        <code class="method-response">
@@ -21197,7 +21200,150 @@ Request Body:
                "recurrenceStartDate":"22 Jan 2016",
                "recurrence": "YEARLY"                  
 }
-                       </code>
+
+                       
+       <B>smscampaigns/1?template=true</B>
+
+       {
+               "id": 1,
+               "campaignName": "Savings Deposit Campaign"
+               "campaignType": "SMS",
+               "triggerType": 3,
+               "providerId": 2,
+               "runReportId": 180,
+               "reportName" : "Savings Deposit",
+               "paramValue": 
"{"officeId":1,"loanOfficerId":-1,"transactionId":1,"reportName":"Savings 
Deposit"}",
+               "message": "Hello {fullName} your account is credited with 
{depositAmount} on {transactionDate}",
+               "status" : { "id":"","code":"","value":""}      
+               
+               "smsProviderOptions": [{
+               "id": 1,
+               "tenantId": "1",
+               "phoneNo": "+XXXXXXXXXX",
+               "providerName": "Twilio SMS Provider",
+               "providerDescription": "Twilio, just for testing"
+               }],
+               "businessRulesOptions": [
+                       {
+                       "reportId": 166,
+                       "reportName": "Active Clients",
+                       "reportType": "SMS",
+                       "reportSubType": "NonTriggered",
+                       "reportDescription": "All clients with the status 
‘Active’",
+                       "reportParamName": {
+                               "Office": "OfficeIdSelectOne",
+                               "Loan Officer": "loanOfficerIdSelectAll"
+                       }
+                       }
+               ],
+               "triggerTypeOptions": [
+                       {"id": 1,"code": "triggerType.direct", "value": 
"Direct"},
+                       {"id": 2, "code": "triggerType.schedule","value": 
"Scheduled"},
+                       {"id": 3,"code": "triggerType.triggered","value": 
"Triggered"}
+                       ],
+               "months": [
+               { "id": 1, "code": "JANUARY", "value": "JANUARY" },
+               { "id": 2, "code": "FEBRUARY", "value": "FEBRUARY" },
+               { "id": 3, "code": "MARCH", "value": "MARCH" },
+               { "id": 4, "code": "APRIL", "value": "APRIL" },
+               { "id": 5, "code": "MAY", "value": "MAY" },
+               { "id": 6, "code": "JUNE", "value": "JUNE" },
+               { "id": 7, "code": "JULY", "value": "JULY" },
+               { "id": 8, "code": "AUGUST", "value": "AUGUST" },
+               { "id": 9, "code": "SEPTEMBER", "value": "SEPTEMBER"},
+               { "id": 10, "code": "OCTOBER", "value": "OCTOBER"},
+               { "id": 11, "code": "NOVEMBER", "value": "NOVEMBER" }
+       ],
+       "weekDays": [
+               { "id": 1, "code": "calendarWeekDaysType.monday", "value": "MO" 
},
+               { "id": 2, "code": "calendarWeekDaysType.tuesday", "value": 
"TU" },
+               { "id": 3, "code": "calendarWeekDaysType.wednesday", "value": 
"WE" },
+               { "id": 4, "code": "calendarWeekDaysType.thursday", "value": 
"TH"},
+               { "id": 5, "code": "calendarWeekDaysType.friday", "value": "FR" 
},
+               { "id": 6, "code": "calendarWeekDaysType.saturday", "value": 
"SA" },
+               { "id": 7, "code": "calendarWeekDaysType.sunday", "value": "SU" 
}
+       ],
+       "frequencyTypeOptions": [
+               { "id": 1, "code": "calendarFrequencyType.daily", "value": 
"DAILY" },
+               { "id": 2, "code": "calendarFrequencyType.weekly", "value": 
"WEEKLY"},
+               { "id": 3, "code": "calendarFrequencyType.monthly", "value": 
"MONTHLY"},
+               { "id": 4, "code": "calendarFrequencyType.yearly", "value": 
"YEARLY" }
+       ],
+       "periodFrequencyOptions": [
+               { "id": 0, "code": "periodFrequencyType.days", "value": "DAYS" 
},
+               { "id": 1, "code": "periodFrequencyType.weeks", "value": 
"WEEKS" },
+               { "id": 2, "code": "periodFrequencyType.months", "value": 
"MONTHS" },
+               { "id": 3, "code": "periodFrequencyType.years", "value": 
"YEARS" }
+       ]
+}
+
+<B>smscampaigns/template</B>
+
+       {
+               "smsProviderOptions": [{
+               "id": 1,
+               "tenantId": "1",
+               "phoneNo": "+XXXXXXXXXX",
+               "providerName": "Twilio SMS Provider",
+               "providerDescription": "Twilio, just for testing"
+               }],
+               "businessRulesOptions": [
+                       {
+                       "reportId": 166,
+                       "reportName": "Active Clients",
+                       "reportType": "SMS",
+                       "reportSubType": "NonTriggered",
+                       "reportDescription": "All clients with the status 
‘Active’",
+                       "reportParamName": {
+                               "Office": "OfficeIdSelectOne",
+                               "Loan Officer": "loanOfficerIdSelectAll"
+                       }
+                       }
+               ],
+               "triggerTypeOptions": [
+                       {"id": 1,"code": "triggerType.direct", "value": 
"Direct"},
+                       {"id": 2, "code": "triggerType.schedule","value": 
"Scheduled"},
+                       {"id": 3,"code": "triggerType.triggered","value": 
"Triggered"}
+                       ],
+               "months": [
+               { "id": 1, "code": "JANUARY", "value": "JANUARY" },
+               { "id": 2, "code": "FEBRUARY", "value": "FEBRUARY" },
+               { "id": 3, "code": "MARCH", "value": "MARCH" },
+               { "id": 4, "code": "APRIL", "value": "APRIL" },
+               { "id": 5, "code": "MAY", "value": "MAY" },
+               { "id": 6, "code": "JUNE", "value": "JUNE" },
+               { "id": 7, "code": "JULY", "value": "JULY" },
+               { "id": 8, "code": "AUGUST", "value": "AUGUST" },
+               { "id": 9, "code": "SEPTEMBER", "value": "SEPTEMBER"},
+               { "id": 10, "code": "OCTOBER", "value": "OCTOBER"},
+               { "id": 11, "code": "NOVEMBER", "value": "NOVEMBER" }
+       ],
+       "weekDays": [
+               { "id": 1, "code": "calendarWeekDaysType.monday", "value": "MO" 
},
+               { "id": 2, "code": "calendarWeekDaysType.tuesday", "value": 
"TU" },
+               { "id": 3, "code": "calendarWeekDaysType.wednesday", "value": 
"WE" },
+               { "id": 4, "code": "calendarWeekDaysType.thursday", "value": 
"TH"},
+               { "id": 5, "code": "calendarWeekDaysType.friday", "value": "FR" 
},
+               { "id": 6, "code": "calendarWeekDaysType.saturday", "value": 
"SA" },
+               { "id": 7, "code": "calendarWeekDaysType.sunday", "value": "SU" 
}
+       ],
+       "frequencyTypeOptions": [
+               { "id": 1, "code": "calendarFrequencyType.daily", "value": 
"DAILY" },
+               { "id": 2, "code": "calendarFrequencyType.weekly", "value": 
"WEEKLY"},
+               { "id": 3, "code": "calendarFrequencyType.monthly", "value": 
"MONTHLY"},
+               { "id": 4, "code": "calendarFrequencyType.yearly", "value": 
"YEARLY" }
+       ],
+       "periodFrequencyOptions": [
+               { "id": 0, "code": "periodFrequencyType.days", "value": "DAYS" 
},
+               { "id": 1, "code": "periodFrequencyType.weeks", "value": 
"WEEKS" },
+               { "id": 2, "code": "periodFrequencyType.months", "value": 
"MONTHS" },
+               { "id": 3, "code": "periodFrequencyType.years", "value": 
"YEARS" }
+       ]
+}
+
+</code>
+                       
+                       
         </div>
 </div>
 
@@ -21279,7 +21425,7 @@ Request Body:
     "status": {
       "id": 300,
       "code": "smsCampaignStatus.active",
-      "value": "Activated",
+      "value": "active",
     },
     "locale": "en",
     "dateFormat": "dd MMMM yyyy",
@@ -21314,7 +21460,7 @@ Request Body:
     "status": {
       "id": 600,
       "code": "smsCampaignStatus.closed",
-      "value": "Activated",
+      "value": "closed",
     },
     "locale": "en",
     "dateFormat": "dd MMMM yyyy",
@@ -21350,7 +21496,7 @@ Request Body:
     "status": {
       "id": 300,
       "code": "smsCampaignStatus.active",
-      "value": "Activated",
+      "value": "active",
     },
     "locale": "en",
     "dateFormat": "dd MMMM yyyy",

http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/2d1f6ab3/fineract-provider/src/main/java/org/apache/fineract/commands/service/CommandWrapperBuilder.java
----------------------------------------------------------------------
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/commands/service/CommandWrapperBuilder.java
 
b/fineract-provider/src/main/java/org/apache/fineract/commands/service/CommandWrapperBuilder.java
index ed92a38..0cdc7e2 100755
--- 
a/fineract-provider/src/main/java/org/apache/fineract/commands/service/CommandWrapperBuilder.java
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/commands/service/CommandWrapperBuilder.java
@@ -2808,7 +2808,7 @@ public class CommandWrapperBuilder {
         this.actionName = "CREATE";
         this.entityName = "SMSCAMPAIGN";
         this.entityId = null;
-        this.href = "/smscampaign";
+        this.href = "/smscampaigns";
         return this;
     }
     
@@ -2816,7 +2816,7 @@ public class CommandWrapperBuilder {
         this.actionName = "UPDATE";
         this.entityName = "SMSCAMPAIGN";
         this.entityId = resourceId;
-        this.href = "/smscampaign/"+resourceId;
+        this.href = "/smscampaigns/"+resourceId;
         return this;
     }
     
@@ -2824,7 +2824,7 @@ public class CommandWrapperBuilder {
         this.actionName = "ACTIVATE";
         this.entityName = "SMSCAMPAIGN";
         this.entityId = resourceId;
-        this.href = "/smscampaign/"+resourceId + "?command=activate";
+        this.href = "/smscampaigns/"+resourceId + "?command=activate";
         return this;
     }
 
@@ -2832,14 +2832,14 @@ public class CommandWrapperBuilder {
         this.actionName = "CLOSE";
         this.entityName = "SMSCAMPAIGN";
         this.entityId = resourceId;
-        this.href = "/smscampaign/"+resourceId + "?command=close";
+        this.href = "/smscampaigns/"+resourceId + "?command=close";
         return this;
     }
     public CommandWrapperBuilder reactivateSmsCampaign(final Long resourceId) {
         this.actionName = "REACTIVATE";
         this.entityName = "SMSCAMPAIGN";
         this.entityId = resourceId;
-        this.href = "/smscampaign/"+resourceId + "?command=reactivate";
+        this.href = "/smscampaigns/"+resourceId + "?command=reactivate";
         return this;
     }
     
@@ -2847,7 +2847,7 @@ public class CommandWrapperBuilder {
         this.actionName = "DELETE";
         this.entityName = "SMSCAMPAIGN";
         this.entityId = resourceId;
-        this.href = "/smscampaign/"+resourceId;
+        this.href = "/smscampaigns/"+resourceId;
         return this;
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/2d1f6ab3/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/sms/constants/SmsCampaignConstants.java
----------------------------------------------------------------------
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/sms/constants/SmsCampaignConstants.java
 
b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/sms/constants/SmsCampaignConstants.java
index 104f4c7..964beda 100644
--- 
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/sms/constants/SmsCampaignConstants.java
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/sms/constants/SmsCampaignConstants.java
@@ -20,8 +20,6 @@ package 
org.apache.fineract.infrastructure.campaigns.sms.constants;
 
 public interface SmsCampaignConstants {
 
-    String SMS_CAMPAIGN_NAME = "sms";
-
     String RESOURCE_NAME = "SMSCAMPAIGN";
 
     String SMS_BRIDGE = "sms_bridge";
@@ -31,13 +29,4 @@ public interface SmsCampaignConstants {
     String FINERACT_PLATFORM_TENANT_ID = "Fineract-Platform-TenantId";
 
     String FINERACT_TENANT_APP_KEY = "Fineract-Tenant-App-Key";
-    
-    //Supported Triggered Campaigns
-    
-    String LOAN_REJECT = "Loan Rejected" ;
-    
-    String LOAN_APPROVED = "Loan Approved" ;
-    
-    String LOAN_REPAYMENT = "Loan Repayment" ;
-    
 }

http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/2d1f6ab3/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/sms/constants/SmsCampaignEnumerations.java
----------------------------------------------------------------------
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/sms/constants/SmsCampaignEnumerations.java
 
b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/sms/constants/SmsCampaignEnumerations.java
index 16ae3cd..99de55e 100644
--- 
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/sms/constants/SmsCampaignEnumerations.java
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/sms/constants/SmsCampaignEnumerations.java
@@ -73,7 +73,7 @@ public class SmsCampaignEnumerations {
     public static List<EnumOptionData> calendarMonthType() {
         final List<EnumOptionData> optionDatas = new ArrayList<>();
         for (final Month monthType : Month.values()) {
-            if (Month.DECEMBER.compareTo(monthType) != 0) {
+            if (Month.DECEMBER.compareTo(monthType) != 0) { //We are removing 
December because we are adding yearly frequency
                 optionDatas.add(calendarMonthType(monthType));
             }
         }
@@ -83,9 +83,11 @@ public class SmsCampaignEnumerations {
     public static List<EnumOptionData> calendarPeriodFrequencyTypes(final 
PeriodFrequencyType[] periodFrequencyTypes) {
         final List<EnumOptionData> optionDatas = new ArrayList<>();
         for (final PeriodFrequencyType periodFrequencyType : 
periodFrequencyTypes) {
-            final EnumOptionData optionData = new 
EnumOptionData(periodFrequencyType.getValue().longValue(), 
periodFrequencyType.getCode(),
-                    periodFrequencyType.toString());
-            optionDatas.add(optionData);
+               
if(!periodFrequencyType.getValue().equals(PeriodFrequencyType.INVALID.getValue()))
 {
+                       final EnumOptionData optionData = new 
EnumOptionData(periodFrequencyType.getValue().longValue(), 
periodFrequencyType.getCode(),
+                        periodFrequencyType.toString());
+                optionDatas.add(optionData);   
+               }
         }
         return optionDatas;
     }

http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/2d1f6ab3/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/sms/data/CampaignTriggerWithSubTypes.java
----------------------------------------------------------------------
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/sms/data/CampaignTriggerWithSubTypes.java
 
b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/sms/data/CampaignTriggerWithSubTypes.java
deleted file mode 100644
index c23771f..0000000
--- 
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/sms/data/CampaignTriggerWithSubTypes.java
+++ /dev/null
@@ -1,298 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.fineract.infrastructure.campaigns.sms.data;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-
-import org.apache.fineract.infrastructure.core.data.EnumOptionData;
-
-public final class CampaignTriggerWithSubTypes {
-
-    public enum ActualCampaignTriggerType {
-        INVALID(0, "campaignTriggerType.invalid"), //
-        LOAN(1, "campaignTriggerType.loan"), //
-        SAVING(2, "campaignTriggerType.saving"), //
-        CLIENT(3, "campaignTriggerType.client");
-
-        private Integer value;
-        private String code;
-
-        private ActualCampaignTriggerType(Integer value, String code) {
-            this.value = value;
-            this.code = code;
-        }
-
-        public static ActualCampaignTriggerType fromInt(final Integer 
typeValue) {
-            ActualCampaignTriggerType type = ActualCampaignTriggerType.INVALID;
-            switch (typeValue) {
-                case 1:
-                    type = LOAN;
-                break;
-                case 2:
-                    type = SAVING;
-                break;
-                case 3:
-                    type = CLIENT;
-                break;
-            }
-            return type;
-        }
-
-        public Integer getValue() {
-            return this.value;
-        }
-
-        public String getCode() {
-            return this.code;
-        }
-
-        public static EnumOptionData toEnumOptionData(final 
ActualCampaignTriggerType triggerType) {
-            final EnumOptionData optionData = new EnumOptionData(new 
Long(triggerType.getValue()), triggerType.getCode(), triggerType.name());
-            return optionData;
-        }
-
-        public static EnumOptionData toEnumOptionData(final Integer 
triggerTypeValue) {
-            ActualCampaignTriggerType actualCampaignTriggerType = 
ActualCampaignTriggerType.fromInt(triggerTypeValue);
-            final EnumOptionData optionData = new EnumOptionData(new 
Long(actualCampaignTriggerType.getValue()),
-                    actualCampaignTriggerType.getCode(), 
actualCampaignTriggerType.name());
-            return optionData;
-        }
-
-        public boolean isInvalid() {
-            return 
this.value.equals(ActualCampaignTriggerType.INVALID.getValue());
-        }
-    }
-
-    public enum CampaignTriggerSubType {
-        INVALID(0, ActualCampaignTriggerType.INVALID, 
"campaignTriggerSubType.invalid"), //
-
-        DISBURSE(101, ActualCampaignTriggerType.LOAN, 
"campaignTriggerSubType.disburse"), //
-        REPAYMENT(102, ActualCampaignTriggerType.LOAN, 
"campaignTriggerSubType.repayment"), //
-        UNDO_DISBURSAL(103, ActualCampaignTriggerType.LOAN, 
"campaignTriggerSubType.undodisbursal"), //
-        WRITE_OFF(104, ActualCampaignTriggerType.LOAN, 
"campaignTriggerSubType.writeoff"), //
-        ADJUST(105, ActualCampaignTriggerType.LOAN, 
"campaignTriggerSubType.adjust"), //
-        UNDO_WRITE_OFF(106, ActualCampaignTriggerType.LOAN, 
"campaignTriggerSubType.undowriteoff"), //
-        FORECLOSURE(107, ActualCampaignTriggerType.LOAN, 
"campaignTriggerSubType.foreclosure"), //
-        APPROVED(108, ActualCampaignTriggerType.LOAN, 
"campaignTriggerSubType.approved"), //
-        WAIVE_INTEREST(109, ActualCampaignTriggerType.LOAN, 
"campaignTriggerSubType.waive.interest"), //
-        CLOSE(110, ActualCampaignTriggerType.LOAN, 
"campaignTriggerSubType.close"), //
-        CLOSE_AS_RESCHEDULE(111, ActualCampaignTriggerType.LOAN, 
"campaignTriggerSubType.close.as.rescheduled"), //
-        ADD_CHARGE(112, ActualCampaignTriggerType.LOAN, 
"campaignTriggerSubType.add.charge"), //
-        UPDATE_CHARGE(113, ActualCampaignTriggerType.LOAN, 
"campaignTriggerSubType.update.charge"), //
-        WAIVE_CHARGE(114, ActualCampaignTriggerType.LOAN, 
"campaignTriggerSubType.waive.charge"), //
-        DELETE_CHARGE(115, ActualCampaignTriggerType.LOAN, 
"campaignTriggerSubType.delete.charge"), //
-        CHARGE_PAYMENT(116, ActualCampaignTriggerType.LOAN, 
"campaignTriggerSubType.charge.payment"), //
-        INITIATE_TRANSFER(117, ActualCampaignTriggerType.LOAN, 
"campaignTriggerSubType.initiate.transfer"), //
-        ACCEPT_TRANSFER(118, ActualCampaignTriggerType.LOAN, 
"campaignTriggerSubType.accept.transfer"), //
-        WITHDRAW_TRANSFER(119, ActualCampaignTriggerType.LOAN, 
"campaignTriggerSubType.withdraw.transfer"), //
-        REJECT_TRANSFER(120, ActualCampaignTriggerType.LOAN, 
"campaignTriggerSubType.reject.transfer"), //
-        REASSIGN_OFFICER(121, ActualCampaignTriggerType.LOAN, 
"campaignTriggerSubType.reassign.officer"), //
-        REMOVE_OFFICER(122, ActualCampaignTriggerType.LOAN, 
"campaignTriggerSubType.reassign.officer"), //
-        APPLY_OVERDUE_CHARGE(123, ActualCampaignTriggerType.LOAN, 
"campaignTriggerSubType.reassign.officer"), //
-        INTEREST_RECALCULATION(124, ActualCampaignTriggerType.LOAN, 
"campaignTriggerSubType.reassign.officer"), //
-        REFUND(125, ActualCampaignTriggerType.LOAN, 
"campaignTriggerSubType.reassign.officer"), //
-
-        SAVINGS_DEPOSIT(201, ActualCampaignTriggerType.SAVING, 
"campaignTriggerSubType.deposit"), //
-        SAVINGS_WITHDRAWAL(202, ActualCampaignTriggerType.SAVING, 
"campaignTriggerSubType.withdrawal"), //
-        SAVINGS_ACTIVATE(203, ActualCampaignTriggerType.SAVING, 
"campaignTriggerSubType.savings.activate"), //
-        SAVINGS_ADJUST_TRANSACTION(204, ActualCampaignTriggerType.SAVING, 
"campaignTriggerSubType.savings.adjust"), //
-        SAVINGS_APPLY_ANNUAL_FEE(205, ActualCampaignTriggerType.SAVING, 
"campaignTriggerSubType.savings.apply.annual.fee"), //
-        SAVINGS_CALCULATE_INTEREST(206, ActualCampaignTriggerType.SAVING, 
"campaignTriggerSubType.savings.calclulate.interest"), //
-        SAVINGS_CLOSE(207, ActualCampaignTriggerType.SAVING, 
"campaignTriggerSubType.savings.close"), //
-        SAVINGS_POST_INTEREST(208, ActualCampaignTriggerType.SAVING, 
"campaignTriggerSubType.savings.post"), //
-        SAVINGS_REJECT(209, ActualCampaignTriggerType.SAVING, 
"campaignTriggerSubType.savings.reject"), //
-        SAVINGS_UNDO(210, ActualCampaignTriggerType.SAVING, 
"campaignTriggerSubType.savings.undo"), //
-        SAVINGS_ADD_CHARGE(211, ActualCampaignTriggerType.SAVING, 
"campaignTriggerSubType.savings.add.charge"), //
-        SAVINGS_WAIVE_CHARGE(212, ActualCampaignTriggerType.SAVING, 
"campaignTriggerSubType.savings.waive.charge"), //
-        SAVINGS_PAY_CHARGE(213, ActualCampaignTriggerType.SAVING, 
"campaignTriggerSubType.savings.pay.charge"), //
-
-        CLIENTS_ACTIVATE(301, ActualCampaignTriggerType.CLIENT, 
"campaignTriggerSubType.activate"), //
-        CLIENTS_CLOSE(302, ActualCampaignTriggerType.CLIENT, 
"campaignTriggerSubType.close"), //
-        CLIENTS_ACCEPT_TRANSFER(303, ActualCampaignTriggerType.CLIENT, 
"campaignTriggerSubType.accept.transfer"), //
-        CLIENTS_ASSIGN_STAFF(304, ActualCampaignTriggerType.CLIENT, 
"campaignTriggerSubType.assign.staff"), //
-        CLIENTS_CREATE(305, ActualCampaignTriggerType.CLIENT, 
"campaignTriggerSubType.create"), //
-        CLIENTS_DELETE(306, ActualCampaignTriggerType.CLIENT, 
"campaignTriggerSubType.delete"), //
-        CLIENTS_PROPOSE_TRANSFER(307, ActualCampaignTriggerType.CLIENT, 
"campaignTriggerSubType.propose.transfer"), //
-        CLIENTS_REACTIVATE(308, ActualCampaignTriggerType.CLIENT, 
"campaignTriggerSubType.reactivate"), //
-        CLIENTS_REJECT(309, ActualCampaignTriggerType.CLIENT, 
"campaignTriggerSubType.reject"), //
-        CLIENTS_REJECT_TRANSFER(310, ActualCampaignTriggerType.CLIENT, 
"campaignTriggerSubType.reject.transfer"), //
-        CLIENTS_WITHDRAW(311, ActualCampaignTriggerType.CLIENT, 
"campaignTriggerSubType.withdraw"), //
-        CLIENTS_WITHDRAW_TRANSFER(312, ActualCampaignTriggerType.CLIENT, 
"campaignTriggerSubType.withdraw.transfer");
-
-        private Integer id;
-        private ActualCampaignTriggerType type;
-        private String code;
-
-        private CampaignTriggerSubType(Integer id, ActualCampaignTriggerType 
type, String code) {
-            this.id = id;
-            this.type = type;
-            this.code = code;
-        }
-
-        public static CampaignTriggerSubType fromInt(final Integer 
subTypeValue) {
-            CampaignTriggerSubType subType = CampaignTriggerSubType.INVALID;
-            switch (subTypeValue) {
-                case 101:
-                    subType = DISBURSE;
-                break;
-                case 102:
-                    subType = REPAYMENT;
-                break;
-                case 103:
-                    subType = ADJUST;
-                break;
-                case 104:
-                    subType = UNDO_DISBURSAL;
-                break;
-                case 105:
-                    subType = WRITE_OFF;
-                break;
-                case 106:
-                    subType = UNDO_WRITE_OFF;
-                break;
-
-                case 201:
-                    subType = SAVINGS_DEPOSIT;
-                break;
-                case 202:
-                    subType = SAVINGS_WITHDRAWAL;
-                break;
-                case 203:
-                    subType = SAVINGS_ACTIVATE;
-                break;
-                case 204:
-                    subType = SAVINGS_ADJUST_TRANSACTION;
-                break;
-                case 205:
-                    subType = SAVINGS_APPLY_ANNUAL_FEE;
-                break;
-                case 206:
-                    subType = SAVINGS_CALCULATE_INTEREST;
-                break;
-                case 207:
-                    subType = SAVINGS_CLOSE;
-                break;
-                case 208:
-                    subType = SAVINGS_POST_INTEREST;
-                break;
-                case 209:
-                    subType = SAVINGS_REJECT;
-                break;
-                case 210:
-                    subType = SAVINGS_UNDO;
-                break;
-                case 211:
-                    subType = SAVINGS_ADD_CHARGE;
-                break;
-                case 212:
-                    subType = SAVINGS_WAIVE_CHARGE;
-                break;
-                case 213:
-                    subType = SAVINGS_PAY_CHARGE;
-                break;
-
-                case 301:
-                    subType = CLIENTS_ACTIVATE;
-                break;
-                case 302:
-                    subType = CLIENTS_CLOSE;
-                break;
-                case 303:
-                    subType = CLIENTS_ACCEPT_TRANSFER;
-                break;
-                case 304:
-                    subType = CLIENTS_ASSIGN_STAFF;
-                break;
-                case 305:
-                    subType = CLIENTS_CREATE;
-                break;
-                case 306:
-                    subType = CLIENTS_DELETE;
-                break;
-                case 307:
-                    subType = CLIENTS_PROPOSE_TRANSFER;
-                break;
-                case 308:
-                    subType = CLIENTS_REACTIVATE;
-                break;
-                case 309:
-                    subType = CLIENTS_REJECT;
-                break;
-                case 310:
-                    subType = CLIENTS_REJECT_TRANSFER;
-                break;
-                case 311:
-                    subType = CLIENTS_WITHDRAW;
-                break;
-                case 312:
-                    subType = CLIENTS_WITHDRAW_TRANSFER;
-                break;
-            }
-            return subType;
-        }
-
-        public Integer getId() {
-            return this.id;
-        }
-
-        public ActualCampaignTriggerType getType() {
-            return this.type;
-        }
-
-        public String getCode() {
-            return this.code;
-        }
-
-        public static EnumOptionData toEnumOptionData(final Integer 
triggerSubType) {
-            CampaignTriggerSubType subTypeEnum = 
CampaignTriggerSubType.fromInt(triggerSubType);
-            final EnumOptionData optionData = new EnumOptionData(new 
Long(subTypeEnum.getId()), subTypeEnum.getCode(), subTypeEnum.name());
-            return optionData;
-        }
-    }
-
-    public static List<EnumOptionData> 
addTypeSubTypeMapping(ActualCampaignTriggerType type) {
-        List<EnumOptionData> subTypeList = new ArrayList<>();
-        EnumOptionData optionData = null;
-        for (CampaignTriggerSubType subType : CampaignTriggerSubType.values()) 
{
-            if (subType.getType().equals(type)) {
-                optionData = new EnumOptionData(subType.getId().longValue(), 
subType.getCode(), subType.name());
-                subTypeList.add(optionData);
-            }
-        }
-        return subTypeList;
-    }
-
-    public static Collection<TriggerTypeWithSubTypesData> 
getTriggerTypeAndSubTypes() {
-        final Collection<TriggerTypeWithSubTypesData> typesList = new 
ArrayList<>();
-        EnumOptionData actualTriggerType = null;
-        for (ActualCampaignTriggerType triggerType : 
ActualCampaignTriggerType.values()) {
-            if (triggerType.isInvalid()) {
-                continue;
-            }
-            List<EnumOptionData> subTypeList = 
addTypeSubTypeMapping(triggerType);
-            actualTriggerType = 
ActualCampaignTriggerType.toEnumOptionData(triggerType);
-            TriggerTypeWithSubTypesData triggerTypeWithSubTypesData = new 
TriggerTypeWithSubTypesData(actualTriggerType, subTypeList);
-            typesList.add(triggerTypeWithSubTypesData);
-        }
-        return typesList;
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/2d1f6ab3/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/sms/data/TriggerTypeWithSubTypesData.java
----------------------------------------------------------------------
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/sms/data/TriggerTypeWithSubTypesData.java
 
b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/sms/data/TriggerTypeWithSubTypesData.java
deleted file mode 100644
index b6e9c3c..0000000
--- 
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/sms/data/TriggerTypeWithSubTypesData.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.fineract.infrastructure.campaigns.sms.data;
-
-import java.util.List;
-
-import org.apache.fineract.infrastructure.core.data.EnumOptionData;
-
-public class TriggerTypeWithSubTypesData {
-
-    private final EnumOptionData actualTriggerType;
-    private final List<EnumOptionData> triggerSubTypes;
-
-    public TriggerTypeWithSubTypesData(final EnumOptionData actualTriggerType, 
List<EnumOptionData> triggerSubTypes) {
-        this.actualTriggerType = actualTriggerType;
-        this.triggerSubTypes = triggerSubTypes;
-    }
-
-    public EnumOptionData getActualTriggerType() {
-        return this.actualTriggerType;
-    }
-
-    public List<EnumOptionData> getTriggerSubTypes() {
-        return this.triggerSubTypes;
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/2d1f6ab3/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/sms/domain/SmsCampaignRepository.java
----------------------------------------------------------------------
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/sms/domain/SmsCampaignRepository.java
 
b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/sms/domain/SmsCampaignRepository.java
index 436f9ed..bc3bb7d 100644
--- 
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/sms/domain/SmsCampaignRepository.java
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/sms/domain/SmsCampaignRepository.java
@@ -23,6 +23,8 @@ import java.util.List;
 
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.query.Param;
 
 public interface SmsCampaignRepository extends JpaRepository<SmsCampaign, 
Long>, JpaSpecificationExecutor<SmsCampaign> {
 
@@ -32,4 +34,7 @@ public interface SmsCampaignRepository extends 
JpaRepository<SmsCampaign, Long>,
             final Integer status);
 
     Collection<SmsCampaign> findByTriggerType(final Integer triggerType) ;
+    
+    @Query("SELECT campaign FROM SmsCampaign campaign WHERE 
campaign.paramValue LIKE :reportPattern AND campaign.triggerType=:triggerType 
AND campaign.status=300")
+    List<SmsCampaign> findActiveSmsCampaigns(@Param("reportPattern") final 
String reportPattern, @Param("triggerType") final Integer triggerType) ;
 }

http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/2d1f6ab3/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/sms/service/SmsCampaignDomainServiceImpl.java
----------------------------------------------------------------------
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/sms/service/SmsCampaignDomainServiceImpl.java
 
b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/sms/service/SmsCampaignDomainServiceImpl.java
index 00926c4..42d7b8b 100644
--- 
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/sms/service/SmsCampaignDomainServiceImpl.java
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/sms/service/SmsCampaignDomainServiceImpl.java
@@ -25,6 +25,7 @@ import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashMap;
 import java.util.HashSet;
+import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
@@ -65,6 +66,8 @@ public class SmsCampaignDomainServiceImpl implements 
SmsCampaignDomainService {
 
        private static final Logger logger = 
LoggerFactory.getLogger(SmsCampaignDomainServiceImpl.class);
        
+       //private final static int POOL_SIZE = 5 ;
+       
     private final SmsCampaignRepository smsCampaignRepository;
     private final SmsMessageRepository smsMessageRepository;
     private final OfficeRepository officeRepository;
@@ -100,216 +103,192 @@ public class SmsCampaignDomainServiceImpl implements 
SmsCampaignDomainService {
         
this.businessEventNotifierService.addBusinessEventPostListners(BUSINESS_EVENTS.SAVINGS_REJECT,
 new SavingsAccountRejectedListener());
         
this.businessEventNotifierService.addBusinessEventPostListners(BUSINESS_EVENTS.SAVINGS_DEPOSIT,
 new SavingsAccountTransactionListener(true));
         
this.businessEventNotifierService.addBusinessEventPostListners(BUSINESS_EVENTS.SAVINGS_WITHDRAWAL,
 new SavingsAccountTransactionListener(false));
-        
-        
     }
 
-    private void notifyRejectedLoanOwner(Loan loan) {
-        ArrayList<SmsCampaign> smsCampaigns = retrieveSmsCampaigns("loan 
rejected");
-        if(smsCampaigns.size()>0){
-            for (SmsCampaign campaign:smsCampaigns){
-                if(campaign.isActive()) {
-                    
this.smsCampaignWritePlatformCommandHandler.insertDirectCampaignIntoSmsOutboundTable(loan,
 campaign);
-                }
-            }
-        }
-    }
+       private void notifyRejectedLoanOwner(Loan loan) {
+               List<SmsCampaign> smsCampaigns = retrieveSmsCampaigns("Loan 
Rejected");
+               if (smsCampaigns.size() > 0) {
+                       for (SmsCampaign campaign : smsCampaigns) {
+                               if (campaign.isActive()) {
+                                       
SmsCampaignDomainServiceImpl.this.smsCampaignWritePlatformCommandHandler
+                                                       
.insertDirectCampaignIntoSmsOutboundTable(loan, campaign);
+                               }
+                       }
+               }
+       }
 
     private void notifyAcceptedLoanOwner(Loan loan) {
-        ArrayList<SmsCampaign> smsCampaigns = retrieveSmsCampaigns("loan 
approved");
-
+        List<SmsCampaign> smsCampaigns = retrieveSmsCampaigns("Loan Approved");
         if(smsCampaigns.size()>0){
             for (SmsCampaign campaign:smsCampaigns){
-                if(campaign.isActive()) {
-                    
this.smsCampaignWritePlatformCommandHandler.insertDirectCampaignIntoSmsOutboundTable(loan,
 campaign);
-                }
+               
this.smsCampaignWritePlatformCommandHandler.insertDirectCampaignIntoSmsOutboundTable(loan,
 campaign);
             }
         }
     }
 
     private void notifyClientActivated(final Client client) {
-        ArrayList<SmsCampaign> smsCampaigns = retrieveSmsCampaigns("client 
activated");
+        List<SmsCampaign> smsCampaigns = retrieveSmsCampaigns("Client 
Activated");
         if(smsCampaigns.size()>0){
              for (SmsCampaign campaign:smsCampaigns){
-                 if(campaign.isActive()) {
-                     
this.smsCampaignWritePlatformCommandHandler.insertDirectCampaignIntoSmsOutboundTable(client,
 campaign);
-                 }
+                
this.smsCampaignWritePlatformCommandHandler.insertDirectCampaignIntoSmsOutboundTable(client,
 campaign);
              }
          }
         
     }
     
     private void notifyClientRejected(final Client client) {
-        ArrayList<SmsCampaign> smsCampaigns = retrieveSmsCampaigns("client 
rejected");
+        List<SmsCampaign> smsCampaigns = retrieveSmsCampaigns("Client 
Rejected");
         if(smsCampaigns.size()>0){
             for (SmsCampaign campaign:smsCampaigns){
-                if(campaign.isActive()) {
-                    
this.smsCampaignWritePlatformCommandHandler.insertDirectCampaignIntoSmsOutboundTable(client,
 campaign);
-                }
+               
this.smsCampaignWritePlatformCommandHandler.insertDirectCampaignIntoSmsOutboundTable(client,
 campaign);
             }
         }
         
    }
     
        private void notifySavingsAccountActivated(final SavingsAccount 
savingsAccount) {
-               ArrayList<SmsCampaign> smsCampaigns = 
retrieveSmsCampaigns("savings activated");
+               List<SmsCampaign> smsCampaigns = retrieveSmsCampaigns("Savings 
Activated");
                if (smsCampaigns.size() > 0) {
                        for (SmsCampaign campaign : smsCampaigns) {
-                               if (campaign.isActive()) {
-                                       
this.smsCampaignWritePlatformCommandHandler.insertDirectCampaignIntoSmsOutboundTable(savingsAccount,
+                               
this.smsCampaignWritePlatformCommandHandler.insertDirectCampaignIntoSmsOutboundTable(savingsAccount,
                                                        campaign);
-                               }
                        }
                }
 
        }
 
        private void notifySavingsAccountRejected(final SavingsAccount 
savingsAccount) {
-               ArrayList<SmsCampaign> smsCampaigns = 
retrieveSmsCampaigns("savings rejected");
+               List<SmsCampaign> smsCampaigns = retrieveSmsCampaigns("Savings 
Rejected");
                if (smsCampaigns.size() > 0) {
                        for (SmsCampaign campaign : smsCampaigns) {
-                               if (campaign.isActive()) {
-                                       
this.smsCampaignWritePlatformCommandHandler.insertDirectCampaignIntoSmsOutboundTable(savingsAccount,
+                               
this.smsCampaignWritePlatformCommandHandler.insertDirectCampaignIntoSmsOutboundTable(savingsAccount,
                                                        campaign);
-                               }
                        }
                }
 
        }
        
        private void sendSmsForLoanRepayment(LoanTransaction loanTransaction) {
-               ArrayList<SmsCampaign> smsCampaigns = 
retrieveSmsCampaigns("loan repayment");
+               List<SmsCampaign> smsCampaigns = retrieveSmsCampaigns("Loan 
Repayment");
                if (smsCampaigns.size() > 0) {
                        for (SmsCampaign smsCampaign : smsCampaigns) {
-                               if (smsCampaign.isActive()) {
-                                       try {
-                                               Loan loan = 
loanTransaction.getLoan();
-                                               final Set<Client> groupClients 
= new HashSet<>();
-                                               if (loan.hasInvalidLoanType()) {
-                                                       throw new 
InvalidLoanTypeException("Loan Type cannot be Invalid for the Triggered Sms 
Campaign");
-                                               }
-                                               if (loan.isGroupLoan()) {
-                                                       Group group = 
this.groupRepository.findOne(loan.getGroupId());
-                                                       
groupClients.addAll(group.getClientMembers());
-                                               } else {
-                                                       
groupClients.add(loan.client());
-                                               }
-                                               HashMap<String, String> 
campaignParams = new ObjectMapper()
-                                                               
.readValue(smsCampaign.getParamValue(), new TypeReference<HashMap<String, 
String>>() {
-                                                               });
-
-                                               if (groupClients.size() > 0) {
-                                                       for (Client client : 
groupClients) {
-                                                               HashMap<String, 
Object> smsParams = processRepaymentDataForSms(loanTransaction, client);
-                                                               for (String key 
: campaignParams.keySet()) {
-                                                                       String 
value = campaignParams.get(key);
-                                                                       String 
spvalue = null;
-                                                                       boolean 
spkeycheck = smsParams.containsKey(key);
-                                                                       if 
(spkeycheck) {
-                                                                               
spvalue = smsParams.get(key).toString();
-                                                                       }
-                                                                       if 
(spkeycheck && !(value.equals("-1") || spvalue.equals(value))) {
-                                                                               
if (key.equals("officeId")) {
-                                                                               
        Office campaignOffice = 
this.officeRepository.findOne(Long.valueOf(value));
-                                                                               
        if (campaignOffice
-                                                                               
                        
.doesNotHaveAnOfficeInHierarchyWithId(client.getOffice().getId())) {
-                                                                               
                throw new RuntimeException();
-                                                                               
        }
-                                                                               
} else {
+                               try {
+                                       Loan loan = loanTransaction.getLoan();
+                                       final Set<Client> groupClients = new 
HashSet<>();
+                                       if (loan.hasInvalidLoanType()) {
+                                               throw new 
InvalidLoanTypeException(
+                                                               "Loan Type 
cannot be Invalid for the Triggered Sms Campaign");
+                                       }
+                                       if (loan.isGroupLoan()) {
+                                               Group group = 
this.groupRepository.findOne(loan.getGroupId());
+                                               
groupClients.addAll(group.getClientMembers());
+                                       } else {
+                                               groupClients.add(loan.client());
+                                       }
+                                       HashMap<String, String> campaignParams 
= new ObjectMapper().readValue(smsCampaign.getParamValue(),
+                                                       new 
TypeReference<HashMap<String, String>>() {
+                                                       });
+
+                                       if (groupClients.size() > 0) {
+                                               for (Client client : 
groupClients) {
+                                                       HashMap<String, Object> 
smsParams = processRepaymentDataForSms(loanTransaction, client);
+                                                       for (String key : 
campaignParams.keySet()) {
+                                                               String value = 
campaignParams.get(key);
+                                                               String spvalue 
= null;
+                                                               boolean 
spkeycheck = smsParams.containsKey(key);
+                                                               if (spkeycheck) 
{
+                                                                       spvalue 
= smsParams.get(key).toString();
+                                                               }
+                                                               if (spkeycheck 
&& !(value.equals("-1") || spvalue.equals(value))) {
+                                                                       if 
(key.equals("officeId")) {
+                                                                               
Office campaignOffice = this.officeRepository.findOne(Long.valueOf(value));
+                                                                               
if (campaignOffice
+                                                                               
                
.doesNotHaveAnOfficeInHierarchyWithId(client.getOffice().getId())) {
                                                                                
        throw new RuntimeException();
                                                                                
}
+                                                                       } else {
+                                                                               
throw new RuntimeException();
                                                                        }
                                                                }
-                                                               String message 
= this.smsCampaignWritePlatformCommandHandler.compileSmsTemplate(
-                                                                               
smsCampaign.getMessage(), smsCampaign.getCampaignName(), smsParams);
-                                                               Object mobileNo 
= smsParams.get("mobileNo");
-                                                               if (mobileNo != 
null) {
-                                                                       
SmsMessage smsMessage = SmsMessage.pendingSms(null, null, client, null, message,
-                                                                               
        mobileNo.toString(), smsCampaign);
-                                                                       
this.smsMessageRepository.save(smsMessage);
-                                                                       
Collection<SmsMessage> messages = new ArrayList<>();
-                                                                       
messages.add(smsMessage);
-                                                                       
Map<SmsCampaign, Collection<SmsMessage>> smsDataMap = new HashMap<>();
-                                                                       
smsDataMap.put(smsCampaign, messages);
-                                                                       
this.smsMessageScheduledJobService.sendTriggeredMessages(smsDataMap);
-                                                               }
+                                                       }
+                                                       String message = 
this.smsCampaignWritePlatformCommandHandler.compileSmsTemplate(
+                                                                       
smsCampaign.getMessage(), smsCampaign.getCampaignName(), smsParams);
+                                                       Object mobileNo = 
smsParams.get("mobileNo");
+                                                       if (mobileNo != null) {
+                                                               SmsMessage 
smsMessage = SmsMessage.pendingSms(null, null, client, null, message,
+                                                                               
mobileNo.toString(), smsCampaign);
+                                                               
this.smsMessageRepository.save(smsMessage);
+                                                               
Collection<SmsMessage> messages = new ArrayList<>();
+                                                               
messages.add(smsMessage);
+                                                               
Map<SmsCampaign, Collection<SmsMessage>> smsDataMap = new HashMap<>();
+                                                               
smsDataMap.put(smsCampaign, messages);
+                                                               
this.smsMessageScheduledJobService.sendTriggeredMessages(smsDataMap);
                                                        }
                                                }
-                                       } catch (final IOException e) {
-                                               logger.error("smsParams does 
not contain the key: " + e.getMessage());
-                                       } catch (final RuntimeException e) {
-                                               logger.debug("Client Office Id 
and SMS Campaign Office id doesn't match");
                                        }
+                               } catch (final IOException e) {
+                                       logger.error("smsParams does not 
contain the key: " + e.getMessage());
+                               } catch (final RuntimeException e) {
+                                       logger.debug("Client Office Id and SMS 
Campaign Office id doesn't match");
                                }
                        }
                }
        }
 
        private void sendSmsForSavingsTransaction(final 
SavingsAccountTransaction savingsTransaction, boolean isDeposit) {
-               String campaignName = isDeposit ? "savings deposit" : "savings 
withdrawal";
-               ArrayList<SmsCampaign> smsCampaigns = 
retrieveSmsCampaigns(campaignName);
+               String campaignName = isDeposit ? "Savings Deposit" : "Savings 
Withdrawal";
+               List<SmsCampaign> smsCampaigns = 
retrieveSmsCampaigns(campaignName);
                if (smsCampaigns.size() > 0) {
                        for (SmsCampaign smsCampaign : smsCampaigns) {
-                               if (smsCampaign.isActive()) {
-                                       try {
-                                               final SavingsAccount 
savingsAccount = savingsTransaction.getSavingsAccount();
-                                               final Client client = 
savingsAccount.getClient();
-                                               HashMap<String, String> 
campaignParams = new ObjectMapper()
-                                                               
.readValue(smsCampaign.getParamValue(), new TypeReference<HashMap<String, 
String>>() {
-                                                               });
-                                               HashMap<String, Object> 
smsParams = processSavingsTransactionDataForSms(savingsTransaction,
-                                                               client);
-                                               for (String key : 
campaignParams.keySet()) {
-                                                       String value = 
campaignParams.get(key);
-                                                       String spvalue = null;
-                                                       boolean spkeycheck = 
smsParams.containsKey(key);
-                                                       if (spkeycheck) {
-                                                               spvalue = 
smsParams.get(key).toString();
-                                                       }
-                                                       if (spkeycheck && 
!(value.equals("-1") || spvalue.equals(value))) {
-                                                               if 
(key.equals("officeId")) {
-                                                                       Office 
campaignOffice = this.officeRepository.findOne(Long.valueOf(value));
-                                                                       if 
(campaignOffice
-                                                                               
        .doesNotHaveAnOfficeInHierarchyWithId(client.getOffice().getId())) {
-                                                                               
throw new RuntimeException();
-                                                                       }
-                                                               } else {
+                               try {
+                                       final SavingsAccount savingsAccount = 
savingsTransaction.getSavingsAccount();
+                                       final Client client = 
savingsAccount.getClient();
+                                       HashMap<String, String> campaignParams 
= new ObjectMapper().readValue(smsCampaign.getParamValue(),
+                                                       new 
TypeReference<HashMap<String, String>>() {
+                                                       });
+                                       HashMap<String, Object> smsParams = 
processSavingsTransactionDataForSms(savingsTransaction, client);
+                                       for (String key : 
campaignParams.keySet()) {
+                                               String value = 
campaignParams.get(key);
+                                               String spvalue = null;
+                                               boolean spkeycheck = 
smsParams.containsKey(key);
+                                               if (spkeycheck) {
+                                                       spvalue = 
smsParams.get(key).toString();
+                                               }
+                                               if (spkeycheck && 
!(value.equals("-1") || spvalue.equals(value))) {
+                                                       if 
(key.equals("officeId")) {
+                                                               Office 
campaignOffice = this.officeRepository.findOne(Long.valueOf(value));
+                                                               if 
(campaignOffice.doesNotHaveAnOfficeInHierarchyWithId(client.getOffice().getId()))
 {
                                                                        throw 
new RuntimeException();
                                                                }
+                                                       } else {
+                                                               throw new 
RuntimeException();
                                                        }
                                                }
-                                               String message = 
this.smsCampaignWritePlatformCommandHandler
-                                                               
.compileSmsTemplate(smsCampaign.getMessage(), smsCampaign.getCampaignName(), 
smsParams);
-                                               Object mobileNo = 
smsParams.get("mobileNo");
-                                               if (mobileNo != null) {
-                                                       SmsMessage smsMessage = 
SmsMessage.pendingSms(null, null, client, null, message,
-                                                                       
mobileNo.toString(), smsCampaign);
-                                                       
this.smsMessageRepository.save(smsMessage);
-                                                       Collection<SmsMessage> 
messages = new ArrayList<>();
-                                                       
messages.add(smsMessage);
-                                                       Map<SmsCampaign, 
Collection<SmsMessage>> smsDataMap = new HashMap<>();
-                                                       
smsDataMap.put(smsCampaign, messages);
-                                                       
this.smsMessageScheduledJobService.sendTriggeredMessages(smsDataMap);
-                                               }
-                                       } catch (final IOException e) {
-                                               logger.error("smsParams does 
not contain the key: " + e.getMessage());
-                                       } catch (final RuntimeException e) {
-                                               logger.debug("Client Office Id 
and SMS Campaign Office id doesn't match");
                                        }
+                                       String message = 
this.smsCampaignWritePlatformCommandHandler
+                                                       
.compileSmsTemplate(smsCampaign.getMessage(), smsCampaign.getCampaignName(), 
smsParams);
+                                       Object mobileNo = 
smsParams.get("mobileNo");
+                                       if (mobileNo != null) {
+                                               SmsMessage smsMessage = 
SmsMessage.pendingSms(null, null, client, null, message,
+                                                               
mobileNo.toString(), smsCampaign);
+                                               
this.smsMessageRepository.save(smsMessage);
+                                               Collection<SmsMessage> messages 
= new ArrayList<>();
+                                               messages.add(smsMessage);
+                                               Map<SmsCampaign, 
Collection<SmsMessage>> smsDataMap = new HashMap<>();
+                                               smsDataMap.put(smsCampaign, 
messages);
+                                               
this.smsMessageScheduledJobService.sendTriggeredMessages(smsDataMap);
+                                       }
+                               } catch (final IOException e) {
+                                       logger.error("smsParams does not 
contain the key: " + e.getMessage());
+                               } catch (final RuntimeException e) {
+                                       logger.debug("Client Office Id and SMS 
Campaign Office id doesn't match");
                                }
                        }
                }
        }
     
-    private ArrayList<SmsCampaign> retrieveSmsCampaigns(String paramValue){
-        Collection<SmsCampaign> initialSmsCampaignList = 
smsCampaignRepository.findByTriggerType(SmsCampaignTriggerType.TRIGGERED.getValue());
-        ArrayList<SmsCampaign> smsCampaigns = new ArrayList<>();
-
-        for(SmsCampaign campaign : initialSmsCampaignList){
-            if(campaign.getParamValue().toLowerCase().contains(paramValue)){
-                smsCampaigns.add(campaign);
-            }
-        }
+    private List<SmsCampaign> retrieveSmsCampaigns(String paramValue){
+        List<SmsCampaign> smsCampaigns = 
smsCampaignRepository.findActiveSmsCampaigns("%"+paramValue+"%", 
SmsCampaignTriggerType.TRIGGERED.getValue());
         return smsCampaigns;
     }
 
@@ -396,12 +375,15 @@ public class SmsCampaignDomainServiceImpl implements 
SmsCampaignDomainService {
         return smsParams;
     }
     
-    private class SendSmsOnLoanApproved implements BusinessEventListner{
-
-        @Override
-        public void 
businessEventToBeExecuted(Map<BusinessEventNotificationConstants.BUSINESS_ENTITY,
 Object> businessEventEntity) {
+    private abstract class SmsBusinessEventAdapter implements 
BusinessEventListner {
 
-        }
+               @Override
+               public void businessEventToBeExecuted(Map<BUSINESS_ENTITY, 
Object> businessEventEntity) {
+                       //Nothing to do
+               }
+    }
+    
+    private class SendSmsOnLoanApproved extends SmsBusinessEventAdapter{
 
         @Override
         public void 
businessEventWasExecuted(Map<BusinessEventNotificationConstants.BUSINESS_ENTITY,
 Object> businessEventEntity) {
@@ -413,12 +395,7 @@ public class SmsCampaignDomainServiceImpl implements 
SmsCampaignDomainService {
         }
     }
 
-    private class SendSmsOnLoanRejected implements BusinessEventListner{
-
-        @Override
-        public void 
businessEventToBeExecuted(Map<BusinessEventNotificationConstants.BUSINESS_ENTITY,
 Object> businessEventEntity) {
-
-        }
+    private class SendSmsOnLoanRejected extends SmsBusinessEventAdapter{
 
         @Override
         public void 
businessEventWasExecuted(Map<BusinessEventNotificationConstants.BUSINESS_ENTITY,
 Object> businessEventEntity) {
@@ -430,12 +407,7 @@ public class SmsCampaignDomainServiceImpl implements 
SmsCampaignDomainService {
         }
     }
 
-    private class SendSmsOnLoanRepayment implements BusinessEventListner{
-
-        @Override
-        public void 
businessEventToBeExecuted(Map<BusinessEventNotificationConstants.BUSINESS_ENTITY,
 Object> businessEventEntity) {
-
-        }
+    private class SendSmsOnLoanRepayment extends SmsBusinessEventAdapter{
 
         @Override
         public void 
businessEventWasExecuted(Map<BusinessEventNotificationConstants.BUSINESS_ENTITY,
 Object> businessEventEntity) {
@@ -447,12 +419,7 @@ public class SmsCampaignDomainServiceImpl implements 
SmsCampaignDomainService {
         }
     }
     
-    private class ClientActivatedListener implements BusinessEventListner {
-
-               @Override
-               public void businessEventToBeExecuted(Map<BUSINESS_ENTITY, 
Object> businessEventEntity) {
-                       
-               }
+    private class ClientActivatedListener extends SmsBusinessEventAdapter {
 
                @Override
                public void businessEventWasExecuted(Map<BUSINESS_ENTITY, 
Object> businessEventEntity) {
@@ -463,12 +430,7 @@ public class SmsCampaignDomainServiceImpl implements 
SmsCampaignDomainService {
                }
     }
     
-    private class ClientRejectedListener implements BusinessEventListner {
-
-               @Override
-               public void businessEventToBeExecuted(Map<BUSINESS_ENTITY, 
Object> businessEventEntity) {
-                       
-               }
+    private class ClientRejectedListener extends SmsBusinessEventAdapter {
 
                @Override
                public void businessEventWasExecuted(Map<BUSINESS_ENTITY, 
Object> businessEventEntity) {
@@ -480,12 +442,7 @@ public class SmsCampaignDomainServiceImpl implements 
SmsCampaignDomainService {
                }
     }
     
-    private class SavingsAccountActivatedListener implements 
BusinessEventListner {
-
-               @Override
-               public void businessEventToBeExecuted(Map<BUSINESS_ENTITY, 
Object> businessEventEntity) {
-                       
-               }
+    private class SavingsAccountActivatedListener extends 
SmsBusinessEventAdapter{
 
                @Override
                public void businessEventWasExecuted(Map<BUSINESS_ENTITY, 
Object> businessEventEntity) {
@@ -497,12 +454,7 @@ public class SmsCampaignDomainServiceImpl implements 
SmsCampaignDomainService {
                }
     }
     
-    private class SavingsAccountRejectedListener implements 
BusinessEventListner {
-
-               @Override
-               public void businessEventToBeExecuted(Map<BUSINESS_ENTITY, 
Object> businessEventEntity) {
-                       
-               }
+    private class SavingsAccountRejectedListener extends 
SmsBusinessEventAdapter {
 
                @Override
                public void businessEventWasExecuted(Map<BUSINESS_ENTITY, 
Object> businessEventEntity) {
@@ -513,18 +465,13 @@ public class SmsCampaignDomainServiceImpl implements 
SmsCampaignDomainService {
                }
     }
     
-    private class SavingsAccountTransactionListener implements 
BusinessEventListner {
+    private class SavingsAccountTransactionListener extends 
SmsBusinessEventAdapter {
 
        final boolean isDeposit ;
        
        public SavingsAccountTransactionListener(final boolean isDeposit) {
                        this.isDeposit = isDeposit ;
                }
-               @Override
-               public void businessEventToBeExecuted(Map<BUSINESS_ENTITY, 
Object> businessEventEntity) {
-                       // TODO Auto-generated method stub
-                       
-               }
 
                @Override
                public void businessEventWasExecuted(Map<BUSINESS_ENTITY, 
Object> businessEventEntity) {
@@ -534,4 +481,19 @@ public class SmsCampaignDomainServiceImpl implements 
SmsCampaignDomainService {
                        }
                }
     }
+    
+    /*private abstract class Task implements Runnable {
+       
+       protected final FineractPlatformTenant tenant;
+       
+       protected final String reportName ;
+       
+       private final Object entity ;
+       
+       public Task(final FineractPlatformTenant tenant, final String 
reportName, final Object entity) {
+            this.tenant = tenant;
+            this.reportName = reportName ;
+            this.entity = entity ;
+       }
+    }*/
 }

http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/2d1f6ab3/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/sms/service/SmsCampaignDropdownReadPlatformService.java
----------------------------------------------------------------------
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/sms/service/SmsCampaignDropdownReadPlatformService.java
 
b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/sms/service/SmsCampaignDropdownReadPlatformService.java
index bb9814c..2da3a59 100644
--- 
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/sms/service/SmsCampaignDropdownReadPlatformService.java
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/sms/service/SmsCampaignDropdownReadPlatformService.java
@@ -21,7 +21,6 @@ package 
org.apache.fineract.infrastructure.campaigns.sms.service;
 import java.util.Collection;
 
 import org.apache.fineract.infrastructure.campaigns.sms.data.SmsProviderData;
-import 
org.apache.fineract.infrastructure.campaigns.sms.data.TriggerTypeWithSubTypesData;
 import org.apache.fineract.infrastructure.core.data.EnumOptionData;
 
 public interface SmsCampaignDropdownReadPlatformService {
@@ -38,6 +37,4 @@ public interface SmsCampaignDropdownReadPlatformService {
 
     Collection<EnumOptionData> retrivePeriodFrequencyTypes();
 
-    Collection<TriggerTypeWithSubTypesData> getTriggerTypeAndSubTypes();
-    
 }

http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/2d1f6ab3/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/sms/service/SmsCampaignDropdownReadPlatformServiceImpl.java
----------------------------------------------------------------------
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/sms/service/SmsCampaignDropdownReadPlatformServiceImpl.java
 
b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/sms/service/SmsCampaignDropdownReadPlatformServiceImpl.java
index 44c92b9..d974d7a 100644
--- 
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/sms/service/SmsCampaignDropdownReadPlatformServiceImpl.java
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/sms/service/SmsCampaignDropdownReadPlatformServiceImpl.java
@@ -27,12 +27,9 @@ import java.util.Map;
 
 import org.apache.fineract.infrastructure.campaigns.constants.CampaignType;
 import org.apache.fineract.infrastructure.campaigns.helper.SmsConfigUtils;
-import 
org.apache.fineract.infrastructure.campaigns.sms.constants.SmsCampaignConstants;
 import 
org.apache.fineract.infrastructure.campaigns.sms.constants.SmsCampaignEnumerations;
 import 
org.apache.fineract.infrastructure.campaigns.sms.constants.SmsCampaignTriggerType;
-import 
org.apache.fineract.infrastructure.campaigns.sms.data.CampaignTriggerWithSubTypes;
 import org.apache.fineract.infrastructure.campaigns.sms.data.SmsProviderData;
-import 
org.apache.fineract.infrastructure.campaigns.sms.data.TriggerTypeWithSubTypesData;
 import 
org.apache.fineract.infrastructure.campaigns.sms.exception.ConnectionFailureException;
 import org.apache.fineract.infrastructure.core.data.EnumOptionData;
 import org.apache.fineract.portfolio.calendar.domain.CalendarWeekDaysType;
@@ -74,19 +71,20 @@ public class SmsCampaignDropdownReadPlatformServiceImpl 
implements SmsCampaignDr
     @Override
     public Collection<SmsProviderData> retrieveSmsProviders() {
         Collection<SmsProviderData> smsProviderOptions = new ArrayList<>();
+        String hostName = "" ;
         try {
             Map<String, Object> hostConfig = 
this.smsConfigUtils.getMessageGateWayRequestURI("smsbridges", null);
             URI uri = (URI) hostConfig.get("uri");
+            hostName = uri.getHost() ;
             HttpEntity<?> entity = (HttpEntity<?>) hostConfig.get("entity");
             ResponseEntity<Collection<SmsProviderData>> responseOne = 
restTemplate.exchange(uri, HttpMethod.GET, entity,
                     new 
ParameterizedTypeReference<Collection<SmsProviderData>>() {});
             smsProviderOptions = responseOne.getBody();
             if (!responseOne.getStatusCode().equals(HttpStatus.OK)) {
-                System.out.println(responseOne.getStatusCode().name());
-                throw new 
ConnectionFailureException(SmsCampaignConstants.SMS_BRIDGE);
+                throw new ConnectionFailureException(hostName);
             }
         } catch (Exception e) {
-            e.getStackTrace();
+                throw new ConnectionFailureException(hostName);
         }
         return smsProviderOptions;
     }
@@ -117,9 +115,4 @@ public class SmsCampaignDropdownReadPlatformServiceImpl 
implements SmsCampaignDr
                 .calendarPeriodFrequencyTypes(PeriodFrequencyType.values());
         return periodFrequencyTypes;
     }
-
-    @Override
-    public Collection<TriggerTypeWithSubTypesData> getTriggerTypeAndSubTypes() 
{
-        return CampaignTriggerWithSubTypes.getTriggerTypeAndSubTypes();
-    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/2d1f6ab3/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/sms/service/SmsCampaignWritePlatformServiceJpaImpl.java
----------------------------------------------------------------------
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/sms/service/SmsCampaignWritePlatformServiceJpaImpl.java
 
b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/sms/service/SmsCampaignWritePlatformServiceJpaImpl.java
index c4d47e8..477b534 100644
--- 
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/sms/service/SmsCampaignWritePlatformServiceJpaImpl.java
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/sms/service/SmsCampaignWritePlatformServiceJpaImpl.java
@@ -234,8 +234,7 @@ public class SmsCampaignWritePlatformServiceJpaImpl 
implements SmsCampaignWriteP
                 }
             }
         } catch (final IOException e) {
-            // TODO throw something here
-            System.out.println(e.getMessage());
+               logger.error(e.getMessage());
         }
 
     }
@@ -291,9 +290,9 @@ public class SmsCampaignWritePlatformServiceJpaImpl 
implements SmsCampaignWriteP
                 }
             }
         } catch (final IOException e) {
-            System.out.println("IOException: " + e.getMessage());
+               logger.error(e.getMessage()) ;
         } catch (final RuntimeException e) {
-            System.out.println("RuntimeException: " + e.getMessage());
+               logger.error(e.getMessage()) ;
         }
     }
 
@@ -332,9 +331,9 @@ public class SmsCampaignWritePlatformServiceJpaImpl 
implements SmsCampaignWriteP
                                }
                        }
         } catch (final IOException e) {
-            System.out.println("IOException: " + e.getMessage());
+               logger.error(e.getMessage()) ;
         } catch (final RuntimeException e) {
-            System.out.println("RuntimeException: " + e.getMessage());
+               logger.error(e.getMessage()) ;
         }
     }
     
@@ -372,9 +371,9 @@ public class SmsCampaignWritePlatformServiceJpaImpl 
implements SmsCampaignWriteP
                                }
                        }
         } catch (final IOException e) {
-            System.out.println("IOException: " + e.getMessage());
+               logger.error(e.getMessage()) ;
         } catch (final RuntimeException e) {
-            System.out.println("RuntimeException: " + e.getMessage());
+               logger.error(e.getMessage()) ;
         }
     }
     

http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/2d1f6ab3/fineract-provider/src/main/java/org/apache/fineract/infrastructure/sms/scheduler/SmsMessageScheduledJobServiceImpl.java
----------------------------------------------------------------------
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 3e23a10..4b34f41 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
@@ -173,7 +173,7 @@ public class SmsMessageScheduledJobServiceImpl implements 
SmsMessageScheduledJob
         if (responseOne != null) {
 //            String smsResponse = responseOne.getBody();
             if (!responseOne.getStatusCode().equals(HttpStatus.ACCEPTED)) {
-                System.out.println(responseOne.getStatusCode().name());
+               logger.debug(responseOne.getStatusCode().name());
                 throw new ConnectionFailureException(SmsCampaignConstants.SMS);
             }
         }

Reply via email to