wip mifosx-195 report maintenance changes
This commit is contained in:
+33
-1
@@ -28,6 +28,8 @@ import org.mifosplatform.infrastructure.core.exception.PlatformApiDataValidation
|
|||||||
import org.mifosplatform.infrastructure.core.exception.PlatformDataIntegrityException;
|
import org.mifosplatform.infrastructure.core.exception.PlatformDataIntegrityException;
|
||||||
import org.springframework.data.jpa.domain.AbstractPersistable;
|
import org.springframework.data.jpa.domain.AbstractPersistable;
|
||||||
|
|
||||||
|
import com.google.gson.JsonArray;
|
||||||
|
|
||||||
@Entity
|
@Entity
|
||||||
@Table(name = "stretchy_report", uniqueConstraints = { @UniqueConstraint(columnNames = { "report_name" }, name = "unq_report_name") })
|
@Table(name = "stretchy_report", uniqueConstraints = { @UniqueConstraint(columnNames = { "report_name" }, name = "unq_report_name") })
|
||||||
public class Report extends AbstractPersistable<Long> {
|
public class Report extends AbstractPersistable<Long> {
|
||||||
@@ -58,7 +60,7 @@ public class Report extends AbstractPersistable<Long> {
|
|||||||
private String reportSql;
|
private String reportSql;
|
||||||
|
|
||||||
@LazyCollection(LazyCollectionOption.FALSE)
|
@LazyCollection(LazyCollectionOption.FALSE)
|
||||||
@OneToMany(cascade = CascadeType.ALL, mappedBy = "report", orphanRemoval = true)
|
@OneToMany(cascade = CascadeType.ALL, mappedBy = "report")
|
||||||
private Set<ReportParameterUsage> reportParameterUsages = null;
|
private Set<ReportParameterUsage> reportParameterUsages = null;
|
||||||
|
|
||||||
public static Report fromJson(
|
public static Report fromJson(
|
||||||
@@ -174,6 +176,14 @@ public class Report extends AbstractPersistable<Long> {
|
|||||||
this.reportSql = StringUtils.defaultIfEmpty(newValue, null);
|
this.reportSql = StringUtils.defaultIfEmpty(newValue, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
final String reportParametersParamName = "reportParameters";
|
||||||
|
if (command.hasParameter(reportParametersParamName)) {
|
||||||
|
JsonArray jsonArray = command.arrayOfParameterNamed(reportParametersParamName);
|
||||||
|
if (jsonArray != null) {
|
||||||
|
actualChanges.put(reportParametersParamName, command.jsonFragment(reportParametersParamName));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
validate();
|
validate();
|
||||||
|
|
||||||
if (!actualChanges.isEmpty()) {
|
if (!actualChanges.isEmpty()) {
|
||||||
@@ -272,4 +282,26 @@ public class Report extends AbstractPersistable<Long> {
|
|||||||
return reportName;
|
return reportName;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Set<ReportParameterUsage> getReportParameterUsages() {
|
||||||
|
return reportParameterUsages;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean update(
|
||||||
|
final Set<ReportParameterUsage> newReportParameterUsages) {
|
||||||
|
if (newReportParameterUsages == null)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
boolean updated = false;
|
||||||
|
if (this.reportParameterUsages != null) {
|
||||||
|
|
||||||
|
if (!(this.reportParameterUsages.equals(newReportParameterUsages))) {
|
||||||
|
updated = true;
|
||||||
|
this.reportParameterUsages = newReportParameterUsages;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
updated = true;
|
||||||
|
this.reportParameterUsages = newReportParameterUsages;
|
||||||
|
}
|
||||||
|
return updated;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+8
@@ -46,4 +46,12 @@ public class ReportParameterUsage extends AbstractPersistable<Long> {
|
|||||||
this.report = report;
|
this.report = report;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setParameter(ReportParameter parameter) {
|
||||||
|
this.parameter = parameter;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setReportParameterName(String reportParameterName) {
|
||||||
|
this.reportParameterName = reportParameterName;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
+105
-32
@@ -71,11 +71,16 @@ public class ReportWritePlatformServiceImpl implements
|
|||||||
|
|
||||||
this.fromApiJsonDeserializer.validate(command.json());
|
this.fromApiJsonDeserializer.validate(command.json());
|
||||||
|
|
||||||
final Set<ReportParameterUsage> reportParameterUsages = assembleSetOfReportParameterUsages(command);
|
final Set<ReportParameterUsage> reportParameterUsages = assembleSetOfReportParameterUsages(
|
||||||
final Report report = Report.fromJson(reportParameterUsages, command);
|
null, command);
|
||||||
for (ReportParameterUsage rpu : reportParameterUsages) {
|
final Report report = Report.fromJson(reportParameterUsages,
|
||||||
rpu.setReport(report);
|
command);
|
||||||
}
|
if (reportParameterUsages != null) {
|
||||||
|
for (ReportParameterUsage rpu : reportParameterUsages) {
|
||||||
|
rpu.setReport(report);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
final Permission permission = new Permission("report",
|
final Permission permission = new Permission("report",
|
||||||
report.getReportName(), "READ");
|
report.getReportName(), "READ");
|
||||||
this.reportRepository.save(report);
|
this.reportRepository.save(report);
|
||||||
@@ -106,6 +111,16 @@ public class ReportWritePlatformServiceImpl implements
|
|||||||
}
|
}
|
||||||
|
|
||||||
final Map<String, Object> changes = report.update(command);
|
final Map<String, Object> changes = report.update(command);
|
||||||
|
|
||||||
|
if (changes.containsKey("reportParameters")) {
|
||||||
|
final Set<ReportParameterUsage> reportParameterUsages = assembleSetOfReportParameterUsages(
|
||||||
|
report, command);
|
||||||
|
boolean updated = report.update(reportParameterUsages);
|
||||||
|
if (!updated) {
|
||||||
|
changes.remove("reportParameters");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (!changes.isEmpty()) {
|
if (!changes.isEmpty()) {
|
||||||
this.reportRepository.saveAndFlush(report);
|
this.reportRepository.saveAndFlush(report);
|
||||||
}
|
}
|
||||||
@@ -134,10 +149,11 @@ public class ReportWritePlatformServiceImpl implements
|
|||||||
"Core Reports Can't be Deleted", "");
|
"Core Reports Can't be Deleted", "");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
final Permission permission = this.permissionRepository
|
||||||
final Permission permission = this.permissionRepository.findOneByCode("READ" + "_" + report.getReportName());
|
.findOneByCode("READ" + "_" + report.getReportName());
|
||||||
if (permission == null) {
|
if (permission == null) {
|
||||||
throw new PermissionNotFoundException("READ" + "_" + report.getReportName());
|
throw new PermissionNotFoundException("READ" + "_"
|
||||||
|
+ report.getReportName());
|
||||||
}
|
}
|
||||||
|
|
||||||
this.reportRepository.delete(report);
|
this.reportRepository.delete(report);
|
||||||
@@ -170,35 +186,92 @@ public class ReportWritePlatformServiceImpl implements
|
|||||||
+ realCause.getMessage());
|
+ realCause.getMessage());
|
||||||
}
|
}
|
||||||
|
|
||||||
private Set<ReportParameterUsage> assembleSetOfReportParameterUsages(final JsonCommand command) {
|
private Set<ReportParameterUsage> assembleSetOfReportParameterUsages(
|
||||||
|
final Report report, final JsonCommand command) {
|
||||||
|
|
||||||
final Set<ReportParameterUsage> reportParameterUsages = new HashSet<ReportParameterUsage>();
|
if (command.parameterExists("reportParameters")) {
|
||||||
|
Set<ReportParameterUsage> reportParameterUsages = new HashSet<ReportParameterUsage>();
|
||||||
|
JsonArray reportParametersArray = command
|
||||||
|
.arrayOfParameterNamed("reportParameters");
|
||||||
|
if (reportParametersArray != null) {
|
||||||
|
for (int i = 0; i < reportParametersArray.size(); i++) {
|
||||||
|
|
||||||
|
final JsonObject jsonObject = reportParametersArray.get(i)
|
||||||
|
.getAsJsonObject();
|
||||||
|
Long id = null;
|
||||||
|
ReportParameter parameter = null;
|
||||||
|
String reportParameterName = null;
|
||||||
|
|
||||||
if (command.parameterExists("reportParameters")) {
|
if (jsonObject.has("parameterId")) {
|
||||||
JsonArray reportParametersArray = command.arrayOfParameterNamed("reportParameters");
|
final Long parameterId = jsonObject.get("parameterId")
|
||||||
if (reportParametersArray != null) {
|
.getAsLong();
|
||||||
for (int i = 0; i < reportParametersArray.size(); i++) {
|
parameter = this.reportParameterRepository
|
||||||
|
.findOne(parameterId);
|
||||||
|
if (parameter == null) {
|
||||||
|
throw new ReportParameterNotFoundException(
|
||||||
|
parameterId);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
throw new PlatformDataIntegrityException(
|
||||||
|
"error.msg.parameter.id.mandatory.in.report.parameter",
|
||||||
|
"parameterId column is mandatory in Report Parameter Entry");
|
||||||
|
}
|
||||||
|
|
||||||
final JsonObject jsonObject = reportParametersArray.get(i).getAsJsonObject();
|
if (jsonObject.has("reportParameterName")) {
|
||||||
if (jsonObject.has("id")) {
|
reportParameterName = jsonObject.get(
|
||||||
Long id = null;
|
"reportParameterName").getAsString();
|
||||||
final String idStr = jsonObject.get("id").getAsString();
|
}
|
||||||
if (!(idStr.equals(""))) id = Long.parseLong(idStr);
|
|
||||||
|
|
||||||
final Long parameterId = jsonObject.get("parameterId").getAsLong();
|
ReportParameterUsage reportParameterUsage = null;
|
||||||
final ReportParameter parameter = this.reportParameterRepository.findOne(parameterId);
|
if (report == null) {
|
||||||
if (parameter == null) {
|
reportParameterUsage = new ReportParameterUsage(report,
|
||||||
throw new ReportParameterNotFoundException(parameterId);
|
parameter, reportParameterName);
|
||||||
}
|
} else {
|
||||||
final String reportParameterName = jsonObject.get("reportParameterName").getAsString();
|
if (jsonObject.has("id")) {
|
||||||
reportParameterUsages.add(new ReportParameterUsage(null, parameter, reportParameterName));
|
final String idStr = jsonObject.get("id")
|
||||||
}
|
.getAsString();
|
||||||
}
|
if (!(idStr.equals("")))
|
||||||
}
|
id = Long.parseLong(idStr);
|
||||||
}
|
}
|
||||||
|
if (id == null) {
|
||||||
|
reportParameterUsage = new ReportParameterUsage(
|
||||||
|
report, parameter, reportParameterName);
|
||||||
|
} else {
|
||||||
|
reportParameterUsage = rpuById(report, id);
|
||||||
|
|
||||||
return reportParameterUsages;
|
if (reportParameterUsage == null) {
|
||||||
}
|
throw new PlatformDataIntegrityException(
|
||||||
|
"error.msg.supplied.parameter.id.doesnt.exist",
|
||||||
|
"Supplied parameterId column doesn't Exist",
|
||||||
|
id);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (parameter != null)
|
||||||
|
reportParameterUsage.setParameter(parameter);
|
||||||
|
|
||||||
|
if (reportParameterName != null)
|
||||||
|
reportParameterUsage
|
||||||
|
.setReportParameterName(reportParameterName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
reportParameterUsages.add(reportParameterUsage);
|
||||||
|
}
|
||||||
|
return reportParameterUsages;
|
||||||
|
} else
|
||||||
|
return null;
|
||||||
|
} else
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private ReportParameterUsage rpuById(final Report report, final Long id) {
|
||||||
|
|
||||||
|
for (ReportParameterUsage rpu : report.getReportParameterUsages()) {
|
||||||
|
if (rpu.getId().equals(id))
|
||||||
|
return rpu;
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
+1
-2
@@ -238,9 +238,8 @@ public class LoanProduct extends AbstractPersistable<Long> {
|
|||||||
if (command.hasParameter(chargesParamName)) {
|
if (command.hasParameter(chargesParamName)) {
|
||||||
JsonArray jsonArray = command.arrayOfParameterNamed(chargesParamName);
|
JsonArray jsonArray = command.arrayOfParameterNamed(chargesParamName);
|
||||||
if (jsonArray != null) {
|
if (jsonArray != null) {
|
||||||
|
actualChanges.put(chargesParamName, command.jsonFragment(chargesParamName));
|
||||||
}
|
}
|
||||||
actualChanges.put(chargesParamName, command.jsonFragment(chargesParamName));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return actualChanges;
|
return actualChanges;
|
||||||
|
|||||||
Reference in New Issue
Block a user