[
https://issues.apache.org/jira/browse/FINERACT-628?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16700188#comment-16700188
]
ASF GitHub Bot commented on FINERACT-628:
-----------------------------------------
ShruthiRajaram closed pull request #479: FINERACT-628 self service user reports
URL: https://github.com/apache/fineract/pull/479
This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:
As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):
diff --git a/api-docs/apiLive.htm b/api-docs/apiLive.htm
index 4ead11adc..e381755b6 100644
--- a/api-docs/apiLive.htm
+++ b/api-docs/apiLive.htm
@@ -3872,6 +3872,14 @@ <h2 class="flybar-button">Self Service</h2>
<td>self/clients/{clientId}/obligeedetails</td>
<td></td>
<td><a
href="#self_obligee_list">Obligee list</a></td>
+ </td>
+ </td>
+ </tr>
+ <tr>
+ <td><a
href="#self_service_user_reports">Run Report</a></td>
+
<td>self/runreports/{reportName}</td>
+ <td></td>
+ <td><a
href="#self_service_user_reports">Run a Report</a></td>
<td></td>
<td></td>
</tr>
@@ -49299,6 +49307,7 @@ <h4>Delete an client's Image</h4>
} </code>
</div>
</div>
+
<a id="self_loanproducts" name="self_loanproducts"
class="old-syle-anchor"> </a>
<div class="method-section">
<div class="method-description">
@@ -50554,6 +50563,134 @@ <h2>Retrieve Survey records</h2>
</div>
</div>
+ <a id="self_service_user_reports" name="self_service_user_reports"
class="old-syle-anchor"> </a>
+ <div class="method-section">
+ <div class="method-description">
+ <h4>Running a Report</h4>
+ <p>This resource allows you to run and
receive output from pre-defined Apache Fineract reports. </p>
+ <p>
+ The default output is a JSON
formatted "Generic Resultset". The Generic Resultset contains
+ Column Heading as well as Data
information. However, you can
+ export to CSV format by simply
adding "&exportCSV=true" to the end
+ of your URL.</p>
+ <p>If Pentaho reports have been
pre-defined, they can also be
+ run through this resource.
Pentaho reports can return HTML, PDF or
+ CSV formats.</p>
+ <p>The Apache Fineract reference
application uses a
+ JQuery plugin called
stretchyreporting which, itself, uses this
+ reports resource to provide a
pretty flexible reporting User
+ Interface (UI).</p>
+ <h5>Arguments</h5>
+ <dl class="argument-list">
+ <dt>R_'parameter names' ...</dt>
+ <dd>
+ optional, <span>No
defaults</span>
+ </dd>
+ <dd>The number and names of the
parameters depend on the
+ specific report and how
it has been configured. R_officeId is an
+ example parameter
name.</dd>
+ <dd>Note: the prefix R_ stands
for Reporting</dd>
+ <dt>genericResultSet</dt>
+ <dd>
+ <span>optional,
defaults to true</span>
+ </dd>
+ <dd>If 'true' an optimised JSON
format is returned suitable for tabular display of data.
+ <dd>If 'false' a simple JSON
format is returned.
+ <dt>parameterType</dt>
+ <dd>
+ optional, <span>The
only valid value is 'true'. If any
+ other value is
provided the argument will be ignored</span>
+ </dd>
+ <dd>Determines whether the
request looks in the list of
+ reports or the list of
parameters for its data. Doesn't apply to
+ Pentaho reports.</dd>
+ <dt>exportCSV</dt>
+ <dd>
+ optional, <span>The
only valid value is 'true'. If any
+ other value is
provided the argument will be ignored</span>
+ </dd>
+ <dd>Output will be delivered as
a CSV file instead of JSON.
+ Doesn't apply to
Pentaho reports.</dd>
+ <dt>output-type</dt>
+ <dd>
+ optional,
<span>Defaults to HTML.</span>
+ </dd>
+ <dd>Valid Values are HTML, XLS,
XSLX, CSV and PDF for html, Excel, Excel 2007+,
+ CSV and PDF formats
respectively.</dd>
+ <dd>Only applies to Pentaho
reports.</dd>
+ <dt>locale</dt>
+ <dd>
+ optional
+ </dd>
+ <dd>Any valid locale Ex: en_US,
en_IN, fr_FR etc</dd>
+ <dd>Only applies to Pentaho
reports.</dd>
+ </dl>
+ <p>Example Requests:</p>
+ <div
class=apiClick>self/runreports/Client%20Details?R_officeId=1</div>
+ <br>
+ <br>
+ <div
class=apiClick>self/runreports/Client%20Details?R_officeId=1&exportCSV=true</div>
+ <br>
+ <br>
+ </div>
+ <div class="method-example">
+ <code class="method-declaration">
+GET https://DomainName/api/v1/self/runreports/{reportName}
+ </code>
+ <code class="method-response">
+{
+ "columnHeaders": [
+ {
+ "columnName": "Office/Branch",
+ "columnType": "VARCHAR",
+ "isColumnNullable": false,
+ "isColumnPrimaryKey": false,
+ "columnValues": []
+ },
+ {
+ "columnName": "Client Account No.",
+ "columnType": "VARCHAR",
+ "isColumnNullable": false,
+ "isColumnPrimaryKey": false,
+ "columnValues": []
+ },
+ {
+ "columnName": "Name",
+ "columnType": "VARCHAR",
+ "isColumnNullable": false,
+ "isColumnPrimaryKey": false,
+ "columnValues": []
+ },
+ {
+ "columnName": "Joined",
+ "columnType": "DATE",
+ "isColumnNullable": false,
+ "isColumnPrimaryKey": false,
+ "columnValues": []
+ },
+ {
+ "columnName": "External Id",
+ "columnType": "VARCHAR",
+ "isColumnNullable": false,
+ "isColumnPrimaryKey": false,
+ "columnValues": []
+ }
+ ],
+ "data": [
+ {
+ "row": [
+ "Head Office",
+ "000000001",
+ "John Doe",
+ "2017-03-04",
+ "786YYH7"
+ ]
+ }
+ ]
+}
+ </code>
+ </div>
+ </div>
<!-- end of Customer Self Service APIs-->
</div>
<!-- main-content-wrapper -->
diff --git
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/api/RunreportsApiResource.java
b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/api/RunreportsApiResource.java
index ff83770e9..e13e65246 100644
---
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/api/RunreportsApiResource.java
+++
b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/api/RunreportsApiResource.java
@@ -24,10 +24,12 @@
import java.util.Set;
import javax.ws.rs.Consumes;
+import javax.ws.rs.DefaultValue;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
+import javax.ws.rs.QueryParam;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.MultivaluedMap;
@@ -82,9 +84,11 @@ public RunreportsApiResource(final PlatformSecurityContext
context, final ReadRe
@ApiOperation(value = "Running a Report", notes = "This resource allows
you to run and receive output from pre-defined Apache Fineract reports.\n" +
"\n" + "Reports can also be used to provide data for searching and workflow
functionality.\n" + "\n" + "The default output is a JSON formatted \"Generic
Resultset\". The Generic Resultset contains Column Heading as well as Data
information. However, you can export to CSV format by simply adding
\"&exportCSV=true\" to the end of your URL.\n" + "\n" + "If Pentaho reports
have been pre-defined, they can also be run through this resource. Pentaho
reports can return HTML, PDF or CSV formats.\n" + "\n" + "The Apache Fineract
reference application uses a JQuery plugin called stretchy reporting which,
itself, uses this reports resource to provide a pretty flexible reporting User
Interface (UI).\n\n" + "\n" +
"\n" + "Example Requests:\n" + "\n" +
"runreports/Client%20Listing?R_officeId=1\n" + "\n" + "\n" +
"runreports/Client%20Listing?R_officeId=1&exportCSV=true\n" + "\n" + "\n" +
"runreports/OfficeIdSelectOne?R_officeId=1¶meterType=true\n" + "\n" + "\n"
+
"runreports/OfficeIdSelectOne?R_officeId=1¶meterType=true&exportCSV=true\n"
+ "\n" + "\n" +
"runreports/Expected%20Payments%20By%20Date%20-%20Formatted?R_endDate=2013-04-30&R_loanOfficerId=-1&R_officeId=1&R_startDate=2013-04-16&output-type=HTML&R_officeId=1\n"
+ "\n" + "\n" +
"runreports/Expected%20Payments%20By%20Date%20-%20Formatted?R_endDate=2013-04-30&R_loanOfficerId=-1&R_officeId=1&R_startDate=2013-04-16&output-type=XLS&R_officeId=1\n"
+ "\n" + "\n" +
"runreports/Expected%20Payments%20By%20Date%20-%20Formatted?R_endDate=2013-04-30&R_loanOfficerId=-1&R_officeId=1&R_startDate=2013-04-16&output-type=CSV&R_officeId=1\n"
+ "\n" + "\n" +
"runreports/Expected%20Payments%20By%20Date%20-%20Formatted?R_endDate=2013-04-30&R_loanOfficerId=-1&R_officeId=1&R_startDate=2013-04-16&output-type=PDF&R_officeId=1")
@ApiResponses({@ApiResponse(code = 200, message = "", response =
RunreportsApiResourceSwagger.GetReportNameResponse.class)})
- public Response runReport(@PathParam("reportName") @ApiParam(value =
"reportName") final String reportName, @Context final UriInfo uriInfo) {
+ public Response runReport(@PathParam("reportName") @ApiParam(value =
"reportName") final String reportName,
+ @Context final UriInfo uriInfo,
+ @DefaultValue("false")
@QueryParam("isSelfServiceUserReport") @ApiParam(value =
"isSelfServiceUserReport") final boolean isSelfServiceUserReport) {
- final MultivaluedMap<String, String> queryParams =
uriInfo.getQueryParameters();
+ final MultivaluedMap<String, String> queryParams =
uriInfo.getQueryParameters();
final boolean prettyPrint =
ApiParameterHelper.prettyPrint(uriInfo.getQueryParameters());
final boolean exportCsv =
ApiParameterHelper.exportCsv(uriInfo.getQueryParameters());
@@ -96,7 +100,7 @@ public Response runReport(@PathParam("reportName")
@ApiParam(value = "reportName
String parameterTypeValue = null;
if (!parameterType) {
parameterTypeValue = "report";
- String reportType =
this.readExtraDataAndReportingService.getReportType(reportName);
+ String reportType =
this.readExtraDataAndReportingService.getReportType(reportName,
isSelfServiceUserReport);
ReportingProcessService reportingProcessService =
this.reportingProcessServiceProvider.findReportingProcessService(reportType);
if (reportingProcessService != null) { return
reportingProcessService.processRequest(reportName, queryParams); }
} else {
@@ -108,7 +112,7 @@ public Response runReport(@PathParam("reportName")
@ApiParam(value = "reportName
if (exportPdf) {
final Map<String, String> reportParams =
getReportParams(queryParams);
final String pdfFileName = this.readExtraDataAndReportingService
- .retrieveReportPDF(reportName, parameterTypeValue,
reportParams);
+ .retrieveReportPDF(reportName, parameterTypeValue,
reportParams, isSelfServiceUserReport);
final File file = new File(pdfFileName);
@@ -124,7 +128,7 @@ public Response runReport(@PathParam("reportName")
@ApiParam(value = "reportName
final Map<String, String> reportParams =
getReportParams(queryParams);
final GenericResultsetData result =
this.readExtraDataAndReportingService.retrieveGenericResultset(reportName,
- parameterTypeValue, reportParams);
+ parameterTypeValue, reportParams, isSelfServiceUserReport);
String json = "";
final boolean genericResultSetIsPassed =
ApiParameterHelper.genericResultSetPassed(uriInfo.getQueryParameters());
@@ -145,7 +149,7 @@ public Response runReport(@PathParam("reportName")
@ApiParam(value = "reportName
// CSV Export
final Map<String, String> reportParams = getReportParams(queryParams);
final StreamingOutput result = this.readExtraDataAndReportingService
- .retrieveReportCSV(reportName, parameterTypeValue,
reportParams);
+ .retrieveReportCSV(reportName, parameterTypeValue,
reportParams, isSelfServiceUserReport);
return Response.ok().entity(result).type("text/csv")
.header("Content-Disposition", "attachment;filename=" +
reportName.replaceAll(" ", "") + ".csv").build();
diff --git
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/domain/Report.java
b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/domain/Report.java
index f909c33b6..95965ab79 100644
---
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/domain/Report.java
+++
b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/domain/Report.java
@@ -75,6 +75,9 @@
@OneToMany(cascade = CascadeType.ALL, mappedBy = "report", orphanRemoval =
true, fetch=FetchType.EAGER)
private Set<ReportParameterUsage> reportParameterUsages = new HashSet<>();
+
+ @Column(name = "self_service_user_report")
+ private boolean isSelfServiceUserReport;
public static Report fromJson(final JsonCommand command, final
Collection<String> reportTypes) {
@@ -278,6 +281,7 @@ private boolean changeInReportParameters(final
Set<ReportParameterUsage> newRepo
}
public Set<ReportParameterUsage> getReportParameterUsages() {
- return this.reportParameterUsages;
- }
+ return this.reportParameterUsages;
+ }
+
}
\ No newline at end of file
diff --git
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/service/ReadReportingService.java
b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/service/ReadReportingService.java
index 952a36a42..bc8b9a68b 100644
---
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/service/ReadReportingService.java
+++
b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/service/ReadReportingService.java
@@ -32,13 +32,13 @@
public interface ReadReportingService {
- StreamingOutput retrieveReportCSV(String name, String type, Map<String,
String> extractedQueryParams);
+ StreamingOutput retrieveReportCSV(String name, String type, Map<String,
String> extractedQueryParams, boolean isSelfServiceUserReport);
- GenericResultsetData retrieveGenericResultset(String name, String type,
Map<String, String> extractedQueryParams);
+ GenericResultsetData retrieveGenericResultset(String name, String type,
Map<String, String> extractedQueryParams, boolean isSelfServiceUserReport);
- String retrieveReportPDF(String name, String type, Map<String, String>
extractedQueryParams);
+ String retrieveReportPDF(String name, String type, Map<String, String>
extractedQueryParams, boolean isSelfServiceUserReport);
- String getReportType(String reportName);
+ String getReportType(String reportName, boolean isSelfServiceUserReport);
Collection<ReportData> retrieveReportList();
diff --git
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/service/ReadReportingServiceImpl.java
b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/service/ReadReportingServiceImpl.java
index c732f0d1e..2d9d271fa 100644
---
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/service/ReadReportingServiceImpl.java
+++
b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/service/ReadReportingServiceImpl.java
@@ -90,15 +90,16 @@ public ReadReportingServiceImpl(final
PlatformSecurityContext context, final Rou
}
@Override
- public StreamingOutput retrieveReportCSV(final String name, final String
type, final Map<String, String> queryParams) {
+ public StreamingOutput retrieveReportCSV(final String name, final
String type,
+ final Map<String, String> queryParams, final boolean
isSelfServiceUserReport) {
- return new StreamingOutput() {
+ return new StreamingOutput() {
@Override
public void write(final OutputStream out) {
try {
- final GenericResultsetData result =
retrieveGenericResultset(name, type, queryParams);
+ final GenericResultsetData result =
retrieveGenericResultset(name, type, queryParams, isSelfServiceUserReport);
final StringBuffer sb = generateCsvFileBuffer(result);
final InputStream in = new
ByteArrayInputStream(sb.toString().getBytes("UTF-8"));
@@ -171,12 +172,13 @@ private StringBuffer generateCsvFileBuffer(final
GenericResultsetData result) {
}
@Override
- public GenericResultsetData retrieveGenericResultset(final String name,
final String type, final Map<String, String> queryParams) {
+ public GenericResultsetData retrieveGenericResultset(final String name,
final String type,
+ final Map<String, String> queryParams, final boolean
isSelfServiceUserReport) {
final long startTime = System.currentTimeMillis();
logger.info("STARTING REPORT: " + name + " Type: " + type);
- final String sql = getSQLtoRun(name, type, queryParams);
+ final String sql = getSQLtoRun(name, type, queryParams,
isSelfServiceUserReport);
final GenericResultsetData result =
this.genericDataService.fillGenericResultSet(sql);
@@ -185,7 +187,8 @@ public GenericResultsetData retrieveGenericResultset(final
String name, final St
return result;
}
- private String getSQLtoRun(final String name, final String type, final
Map<String, String> queryParams) {
+ private String getSQLtoRun(final String name, final String type, final
Map<String, String> queryParams,
+ final boolean isSelfServiceUserReport) {
String sql = getSql(name, type);
@@ -203,18 +206,22 @@ private String getSQLtoRun(final String name, final
String type, final Map<Strin
// (typically used to return report lists containing only reports
// permitted to be run by the user
sql = this.genericDataService.replace(sql, "${currentUserId}",
currentUser.getId().toString());
+
+ sql = this.genericDataService.replace(sql,
"${isSelfServiceUser}",
+ Integer.toString(isSelfServiceUserReport ? 1 :
0));
- sql = this.genericDataService.wrapSQL(sql);
+ sql = this.genericDataService.wrapSQL(sql);
- return sql;
+ return sql;
- }
+ }
private String getSql(final String name, final String type) {
- final String inputSql = "select " + type + "_sql as the_sql from
stretchy_" + type + " where " + type + "_name = '" + name + "'";
+ final String inputSql = "select " + type + "_sql as the_sql from
stretchy_" + type + " where " + type + "_name = '" + name + "'" ;
final String inputSqlWrapped =
this.genericDataService.wrapSQL(inputSql);
+ // the return statement contains the exact sql required
final SqlRowSet rs = this.jdbcTemplate.queryForRowSet(inputSqlWrapped);
if (rs.next() && rs.getString("the_sql") != null) { return
rs.getString("the_sql"); }
@@ -222,21 +229,22 @@ private String getSql(final String name, final String
type) {
}
@Override
- public String getReportType(final String reportName) {
+ public String getReportType(final String reportName, final boolean
isSelfServiceUserReport) {
- final String sql = "SELECT ifnull(report_type,'') as report_type FROM
`stretchy_report` where report_name = '" + reportName + "'";
+ final String sql = "SELECT ifnull(report_type,'') as report_type FROM
`stretchy_report` where report_name = '" + reportName + "' and
self_service_user_report = ?";
this.columnValidator.validateSqlInjection(sql, reportName);
final String sqlWrapped = this.genericDataService.wrapSQL(sql);
- final SqlRowSet rs = this.jdbcTemplate.queryForRowSet(sqlWrapped);
+ final SqlRowSet rs = this.jdbcTemplate.queryForRowSet(sqlWrapped, new
Object [] {isSelfServiceUserReport});
if (rs.next()) { return rs.getString("report_type"); }
throw new ReportNotFoundException(sql);
}
@Override
- public String retrieveReportPDF(final String reportName, final String
type, final Map<String, String> queryParams) {
+ public String retrieveReportPDF(final String reportName, final String
type, final Map<String, String> queryParams,
+ final boolean isSelfServiceUserReport) {
final String fileLocation =
FileSystemContentRepository.FINERACT_BASE_DIR + File.separator + "";
if (!new File(fileLocation).isDirectory()) {
@@ -246,7 +254,7 @@ public String retrieveReportPDF(final String reportName,
final String type, fina
final String genaratePdf = fileLocation + File.separator + reportName
+ ".pdf";
try {
- final GenericResultsetData result =
retrieveGenericResultset(reportName, type, queryParams);
+ final GenericResultsetData result =
retrieveGenericResultset(reportName, type, queryParams,
isSelfServiceUserReport);
final List<ResultsetColumnHeaderData> columnHeaders =
result.getColumnHeaders();
final List<ResultsetRowData> data = result.getData();
diff --git
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/reportmailingjob/service/ReportMailingJobWritePlatformServiceImpl.java
b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/reportmailingjob/service/ReportMailingJobWritePlatformServiceImpl.java
index 6e9f5e381..338303f04 100644
---
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/reportmailingjob/service/ReportMailingJobWritePlatformServiceImpl.java
+++
b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/reportmailingjob/service/ReportMailingJobWritePlatformServiceImpl.java
@@ -422,7 +422,8 @@ private StringBuilder generateReportOutputStream(final
ReportMailingJob reportMa
final MultivaluedMap<String, String> reportParams, final String
reportName, final StringBuilder errorLog) {
try {
- final String reportType =
this.readReportingService.getReportType(reportName);
+ final boolean isSelfServiceUserReport = false;
+ final String reportType =
this.readReportingService.getReportType(reportName, isSelfServiceUserReport);
final ReportingProcessService reportingProcessService =
this.reportingProcessServiceProvider.findReportingProcessService(reportType);
if (reportingProcessService != null) {
diff --git
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/self/runreport/SelfRunReportApiResource.java
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/self/runreport/SelfRunReportApiResource.java
index b86d176a6..941aff04f 100644
---
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/self/runreport/SelfRunReportApiResource.java
+++
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/self/runreport/SelfRunReportApiResource.java
@@ -54,7 +54,8 @@ public SelfRunReportApiResource(final PlatformSecurityContext
context, final Run
@Produces({ MediaType.APPLICATION_JSON, "text/csv",
"application/vnd.ms-excel", "application/pdf", "text/html" })
public Response runReport(@PathParam("reportName") final String
reportName, @Context final UriInfo uriInfo) {
this.context.authenticatedUser();
- return this.runreportsApiResource.runReport(reportName, uriInfo);
+ final boolean isSelfServiceUserReport = true;
+ return this.runreportsApiResource.runReport(reportName, uriInfo,
isSelfServiceUserReport);
}
}
diff --git
a/fineract-provider/src/main/resources/sql/migrations/core_db/V345__reports_for_self_service_user.sql
b/fineract-provider/src/main/resources/sql/migrations/core_db/V345__reports_for_self_service_user.sql
new file mode 100644
index 000000000..92c4283db
--- /dev/null
+++
b/fineract-provider/src/main/resources/sql/migrations/core_db/V345__reports_for_self_service_user.sql
@@ -0,0 +1,29 @@
+--
+-- 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.
+--
+
+ALTER TABLE `stretchy_report`
+ ADD COLUMN `self_service_user_report` TINYINT(1) NOT NULL DEFAULT '0'
AFTER `use_report`;
+
+
+UPDATE `stretchy_parameter` SET `parameter_sql`='select sp.parameter_name,
sp.parameter_variable, sp.parameter_label, sp.parameter_displayType, \r
sp.parameter_FormatType, sp.parameter_default, sp.selectOne, sp.selectAll,
spp.parameter_name as parentParameterName\r from stretchy_parameter sp\r left
join stretchy_parameter spp on spp.id = sp.parent_id\r where sp.special is
null\r and exists \r (select \'f\' \r from stretchy_report sr\r join
stretchy_report_parameter srp on srp.report_id = sr.id and
sr.self_service_user_report = \'${isSelfServiceUser}\'\r where sr.report_name
in(${reportListing})\r and srp.parameter_id = sp.id\r )\r order by sp.id'
WHERE `parameter_name` = 'FullParameterList';
+
+UPDATE `stretchy_parameter` SET `parameter_sql`='select r.id as report_id,
r.report_name, r.report_type, r.report_subtype, r.report_category,\nrp.id as
parameter_id, rp.report_parameter_name, p.parameter_name\n from
stretchy_report r\n left join stretchy_report_parameter rp on rp.report_id =
r.id \n left join stretchy_parameter p on p.id = rp.parameter_id\n where
r.use_report is true and r.self_service_user_report =
\'${isSelfServiceUser}\'\n and exists\n ( select \'f\'\n from m_appuser_role
ur \n join m_role r on r.id = ur.role_id\n join m_role_permission rp on
rp.role_id = r.id\n join m_permission p on p.id = rp.permission_id\n where
ur.appuser_id = ${currentUserId}\n and (p.code in (\'ALL_FUNCTIONS_READ\',
\'ALL_FUNCTIONS\') or p.code = concat("READ_", r.report_name)) )\n order by
r.report_category, r.report_name, rp.id' WHERE `parameter_name` =
'FullReportList';
+
+UPDATE `stretchy_parameter` SET `parameter_sql`='select r.id as report_id,
r.report_name, r.report_type, r.report_subtype, r.report_category,\n rp.id as
parameter_id, rp.report_parameter_name, p.parameter_name\n from
stretchy_report r\n left join stretchy_report_parameter rp on rp.report_id =
r.id\n left join stretchy_parameter p on p.id = rp.parameter_id\n where
r.report_category = \'${reportCategory}\'\n and r.use_report is true and
r.self_service_user_report = \'${isSelfServiceUser}\' \n and exists\n
(select \'f\'\n from m_appuser_role ur \n join m_role r on r.id =
ur.role_id\n join m_role_permission rp on rp.role_id = r.id\n join
m_permission p on p.id = rp.permission_id\n where ur.appuser_id =
${currentUserId}\n and (p.code in (\'ALL_FUNCTIONS_READ\', \'ALL_FUNCTIONS\')
or p.code = concat("READ_", r.report_name)) )\n order by r.report_category,
r.report_name, rp.id' WHERE `parameter_name`='reportCategoryList';
+
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
[email protected]
> Creation Of API's for Self-Service App
> --------------------------------------
>
> Key: FINERACT-628
> URL: https://issues.apache.org/jira/browse/FINERACT-628
> Project: Apache Fineract
> Issue Type: New Feature
> Affects Versions: 1.1.0
> Reporter: Saksham Handu
> Assignee: Shruthi M R
> Priority: Major
>
> List Of API's needed are mentioned below,
> 1) Support for applying for savings accounts
> 2) Support for viewing share accounts
> 3) Support for adding guarantors
> 4) Support for editing user details.
> 5) Support for viewing reports
> 6) Support for surveys
> 7) Support for Applying for new Shares Account
> 8) Support for uploading new Client's Image
> 9) Support for the list of Loan, Savings, Shares product along with their
> details
> 10) Support for viewing Recent Transactions
> 11) Support for viewing Charges
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)