diff --git a/api-docs/apiLive.htm b/api-docs/apiLive.htm
index 1dcb321fb..c182e6588 100644
--- a/api-docs/apiLive.htm
+++ b/api-docs/apiLive.htm
@@ -3601,6 +3601,30 @@
|
|
+
+ |
+ self/clients/{clientId}/images |
+ Upload client image (Data URI) |
+ |
+ |
+ |
+
+
+ |
+ self/clients/{clientId}/images |
+ Upload client image (Multi-part Form data) |
+ |
+ |
+ |
+
+
+ |
+ self/clients/{clientId}/images |
+ |
+ |
+ |
+ Delete client image |
+
| Loans |
self/loans/template?templateType=individual |
@@ -49110,6 +49134,98 @@ GET https://DomainName/api/v1/self/clients/{clientId}/obligeedetails
+
+
+
+
+
Upload client image (Data URI)
+
+
+
+POST https://DomainName/api/v1/self/clients/{clientId}/images
+
+
+POST self/clients/14/images
+Content-Type: text/plain
+Request Body:
+data:image/png;base64,iVBORw0KGgoAA
+AANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABlBMVEUAAAD///+l2Z/dAAAAM0l
+EQVR4nGP4/5/h/1+G/58ZDrAz3D/McH8yw83NDDeNGe4Ug9C9zwz3gVLMDA/A6
+P9/AFGGFyjOXZtQAAAAAElFTkSuQmCC
+
+
+{
+ "resourceId": 14,
+ "changes": {},
+ "resourceIdentifier": "14"
+}
+
+
+
+
+
+
+
+
Upload client image (Multi-part Form data)
+
+
+ Mandatory Fields |
+
+
+ | file
+ |
+
+
+
+ The form should contain a required named body part with the
+ name "file".
+ If you are using a HTML form, a snippet like
+ <input type="file" name="file"></input>
+ can be used for uploading the image file
+
+
+
+
+POST https://DomainName/api/v1/self/clients/{clientId}/images
+
+
+POST self/clients/14/images
+Content-Type: multipart/form-data
+Request Body: Not shown
+
+
+{
+ "resourceId": 14,
+ "changes": {},
+ "resourceIdentifier": "14"
+}
+
+
+
+
+
+
+
Delete an client's Image
+
+
+
+DELETE https://DomainName/api/v1/self/clients/{clientId}/images
+
+
+DELETE self/clients/14/images
+Content-Type: application/json
+No Request Body:
+
+
+{
+ "resourceId": 14,
+ "changes": {},
+ "resourceIdentifier": "14"
+}
+
+
+
+
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/api/ClientApiConstants.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/api/ClientApiConstants.java
index 6d6738153..64edab861 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/api/ClientApiConstants.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/api/ClientApiConstants.java
@@ -188,6 +188,7 @@ public class ClientApiConstants {
public static final String datatables = "datatables";
public static final String obligeeData = "ObligeeDetails";
+ public static final String clientEntityName = "clients";
/**
* These parameters will match the class level parameters of
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/self/client/api/SelfClientsApiResource.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/self/client/api/SelfClientsApiResource.java
index d9f1a06a6..d34ad27e4 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/self/client/api/SelfClientsApiResource.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/self/client/api/SelfClientsApiResource.java
@@ -18,9 +18,14 @@
*/
package org.apache.fineract.portfolio.self.client.api;
+import java.io.InputStream;
+
import javax.ws.rs.Consumes;
+import javax.ws.rs.DELETE;
import javax.ws.rs.DefaultValue;
import javax.ws.rs.GET;
+import javax.ws.rs.HeaderParam;
+import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
@@ -44,6 +49,10 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
+import com.sun.jersey.core.header.FormDataContentDisposition;
+import com.sun.jersey.multipart.FormDataBodyPart;
+import com.sun.jersey.multipart.FormDataParam;
+
@Path("/self/clients")
@Component
@Scope("singleton")
@@ -217,6 +226,43 @@ public class SelfClientsApiResource {
throw new ClientNotFoundException(clientId);
}
}
+
+ @POST
+ @Path("{clientId}/images")
+ @Consumes({ MediaType.MULTIPART_FORM_DATA })
+ @Produces({ MediaType.APPLICATION_JSON })
+ public String addNewClientImage(@PathParam("clientId") final Long clientId,
+ @HeaderParam("Content-Length") final Long fileSize, @FormDataParam("file") final InputStream inputStream,
+ @FormDataParam("file") final FormDataContentDisposition fileDetails,
+ @FormDataParam("file") final FormDataBodyPart bodyPart) {
+
+ validateAppuserClientsMapping(clientId);
+ return this.imagesApiResource.addNewClientImage(ClientApiConstants.clientEntityName, clientId, fileSize,
+ inputStream, fileDetails, bodyPart);
+
+ }
+
+ @POST
+ @Path("{clientId}/images")
+ @Consumes({ MediaType.TEXT_PLAIN, MediaType.TEXT_HTML, MediaType.APPLICATION_JSON })
+ @Produces({ MediaType.APPLICATION_JSON })
+ public String addNewClientImage(@PathParam("entity") final String entityName,
+ @PathParam("clientId") final Long clientId, final String jsonRequestBody) {
+ validateAppuserClientsMapping(clientId);
+ return this.imagesApiResource.addNewClientImage(ClientApiConstants.clientEntityName, clientId, jsonRequestBody);
+
+ }
+
+ @DELETE
+ @Path("{clientId}/images")
+ @Consumes({ MediaType.APPLICATION_JSON })
+ @Produces({ MediaType.APPLICATION_JSON })
+ public String deleteClientImage(@PathParam("clientId") final Long clientId) {
+
+ validateAppuserClientsMapping(clientId);
+ return this.imagesApiResource.deleteClientImage(ClientApiConstants.clientEntityName, clientId);
+
+ }
@GET
@Path("{clientId}/obligeedetails")