diff --git a/api-docs/apiLive.htm b/api-docs/apiLive.htm
index 9e10be258..4ead11adc 100644
--- a/api-docs/apiLive.htm
+++ b/api-docs/apiLive.htm
@@ -3617,6 +3617,14 @@
|
|
+
+ |
+ self/clients/{clientId}/images |
+ |
+ |
+ |
+ Delete client image |
+
| Loan Product |
self/loanproducts?clientId={clientId} |
@@ -3651,14 +3659,6 @@
|
|
-
- |
- self/clients/{clientId}/images |
- |
- |
- |
- Delete client image |
-
| Share Product |
self/shareproducts?clientId={clientId} |
@@ -3875,6 +3875,30 @@
|
|
+
+ | Surveys |
+ self/surveys?isActive=true |
+ |
+ Retrieve Active Surveys |
+ |
+ |
+
+
+ |
+ self/surveys/scorecards/{surveyId} |
+ Take Survey |
+ |
+ |
+ |
+
+
+ |
+ self/surveys/scorecards/clients/{clientId} |
+ |
+ Survey Scorecards |
+ |
+ |
+
@@ -49700,8 +49724,7 @@ GET https://DomainName/api/v1/self/loanproducts?clientId={clientId}
]
-
-
+
@@ -50414,6 +50437,123 @@ GET https://DomainName/api/v1/self/loanproducts/{productId}?clientId={clientId}
+
+
+
+
+
Retrieve Active Surveys
+
+
Example Requests :
+
self/surveys?isActive=true
+
+
+ GET https://domainname/api/v1/self/surveys?isActive=true
+
+[
+ {
+ "id":1,
+ "componentDatas":[
+
+ ],
+ "questionDatas":[
+ {
+ "id":1,
+ "responseDatas":[
+ {
+ "id":2,
+ "text":"Own",
+ "value":1,
+ "sequenceNo":1
+ },
+ {
+ "id":1,
+ "text":"Rent",
+ "value":0,
+ "sequenceNo":2
+ }
+ ],
+ "componentKey":Test,
+ "key":"t1",
+ "text":"Type of house",
+ "description":Test,
+ "sequenceNo":1
+ }
+ ],
+ "key":"test",
+ "name":"test",
+ "description":"test",
+ "countryCode":"in",
+ "validFrom":1540233000000,
+ "validTo":4695906600000
+ }
+]
+
+
+
+
+
+
+
+
Submit Survey
+
+
Example Requests :
+
self/surveys/scorecards/1
+
+
+ POST https://domainname/api/v1/self/surveys/scorecards/{surveyId}
+
+{
+ "userId":3,
+ "clientId":"1",
+ "surveyId":1,
+ "scorecardValues":[
+ {
+ "questionId":1,
+ "responseId":2,
+ "value":1,
+ "createdOn":1540291482379
+ }
+ ],
+ "surveyName":"",
+ "username":"",
+ "id":0
+}
+
+
+
+
+
+
+
+
Retrieve Survey records
+
+
Example Requests :
+
self/surveys/scorecards/clients/1
+
+
+ GET https://domainname/api/v1/self/surveys/scorecards/clients/{clientId}
+
+[
+ {
+ "id":8,
+ "userId":,
+ "username":"mifos",
+ "clientId":3,
+ "surveyId":1,
+ "surveyName":"test",
+ "scorecardValues":[
+ {
+ "questionId":1,
+ "responseId":2,
+ "value":1,
+ "createdOn":1540233000000
+ }
+ ]
+ }
+]
+
+
+
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/self/spm/api/SelfScorecardApiResource.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/self/spm/api/SelfScorecardApiResource.java
new file mode 100644
index 000000000..b097e10b4
--- /dev/null
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/self/spm/api/SelfScorecardApiResource.java
@@ -0,0 +1,93 @@
+/**
+ * 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.portfolio.self.spm.api;
+
+import java.util.List;
+
+import javax.ws.rs.Consumes;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.MediaType;
+
+import org.apache.fineract.infrastructure.security.service.PlatformSecurityContext;
+import org.apache.fineract.portfolio.client.exception.ClientNotFoundException;
+import org.apache.fineract.portfolio.self.client.service.AppuserClientMapperReadService;
+import org.apache.fineract.spm.api.ScorecardApiResource;
+import org.apache.fineract.spm.data.ScorecardData;
+import org.apache.fineract.useradministration.domain.AppUser;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Scope;
+import org.springframework.stereotype.Component;
+import org.springframework.transaction.annotation.Transactional;
+
+@Path("/self/surveys/scorecards")
+@Component
+@Scope("singleton")
+public class SelfScorecardApiResource {
+
+ private final PlatformSecurityContext context;
+ private final ScorecardApiResource scorecardApiResource;
+ private final AppuserClientMapperReadService appuserClientMapperReadService;
+
+ @Autowired
+ public SelfScorecardApiResource(final PlatformSecurityContext securityContext,
+ final AppuserClientMapperReadService appuserClientMapperReadService,
+ final ScorecardApiResource scorecardApiResource) {
+ this.context = securityContext;
+ this.scorecardApiResource = scorecardApiResource;
+ this.appuserClientMapperReadService = appuserClientMapperReadService;
+ }
+
+ @GET
+ @Path("clients/{clientId}")
+ @Consumes({ MediaType.APPLICATION_JSON })
+ @Produces({ MediaType.APPLICATION_JSON })
+ @Transactional
+ public List findByClient(@PathParam("clientId") final Long clientId) {
+
+ validateAppuserClientsMapping(clientId);
+ return this.scorecardApiResource.findByClient(clientId);
+ }
+
+ @POST
+ @Path("{surveyId}")
+ @Consumes({ MediaType.APPLICATION_JSON })
+ @Produces({ MediaType.APPLICATION_JSON })
+ @Transactional
+ public void createScorecard(@PathParam("surveyId") final Long surveyId, final ScorecardData scorecardData) {
+ if (scorecardData.getClientId() != null) {
+ validateAppuserClientsMapping(scorecardData.getClientId());
+ this.scorecardApiResource.createScorecard(surveyId, scorecardData);
+ }
+
+ }
+
+ private void validateAppuserClientsMapping(final Long clientId) {
+ AppUser user = this.context.authenticatedUser();
+ final boolean mappedClientId = this.appuserClientMapperReadService.isClientMappedToUser(clientId, user.getId());
+ if (!mappedClientId) {
+ throw new ClientNotFoundException(clientId);
+ }
+ }
+
+}
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/self/spm/api/SelfSpmApiResource.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/self/spm/api/SelfSpmApiResource.java
new file mode 100644
index 000000000..5e2f5003c
--- /dev/null
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/self/spm/api/SelfSpmApiResource.java
@@ -0,0 +1,62 @@
+/**
+ * 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.portfolio.self.spm.api;
+
+import java.util.List;
+
+import javax.ws.rs.Consumes;
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.MediaType;
+
+import org.apache.fineract.infrastructure.security.service.PlatformSecurityContext;
+import org.apache.fineract.spm.api.SpmApiResource;
+import org.apache.fineract.spm.data.SurveyData;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Scope;
+import org.springframework.stereotype.Component;
+import org.springframework.transaction.annotation.Transactional;
+
+@Path("/self/surveys")
+@Component
+@Scope("singleton")
+public class SelfSpmApiResource {
+
+ private final PlatformSecurityContext securityContext;
+ private final SpmApiResource spmApiResource;
+
+ @Autowired
+ public SelfSpmApiResource(final PlatformSecurityContext securityContext, final SpmApiResource spmApiResource) {
+ this.securityContext = securityContext;
+ this.spmApiResource = spmApiResource;
+ }
+
+ @GET
+ @Consumes({ MediaType.APPLICATION_JSON })
+ @Produces({ MediaType.APPLICATION_JSON })
+ @Transactional
+ public List fetchAllSurveys() {
+ securityContext.authenticatedUser();
+ final Boolean isActive = true;
+ return this.spmApiResource.fetchAllSurveys(isActive);
+ }
+
+}