You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@fineract.apache.org by ra...@apache.org on 2016/11/14 14:06:13 UTC
[11/14] incubator-fineract git commit: Addressing SMS Review Comments
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 <na...@confluxtechnologies.com>
Authored: Mon Nov 14 17:50:37 2016 +0530
Committer: Nazeer Hussain Shaik <na...@confluxtechnologies.com>
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"> </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 \u2018Active\u2019",
+ "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 \u2018Active\u2019",
+ "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);
}
}