Repository: fineract
Updated Branches:
  refs/heads/develop 504f679c8 -> bf894732d


ReportRunFrequncy parameter was added


Project: http://git-wip-us.apache.org/repos/asf/fineract/repo
Commit: http://git-wip-us.apache.org/repos/asf/fineract/commit/5cfea884
Tree: http://git-wip-us.apache.org/repos/asf/fineract/tree/5cfea884
Diff: http://git-wip-us.apache.org/repos/asf/fineract/diff/5cfea884

Branch: refs/heads/develop
Commit: 5cfea884cee0e3545d3090e8f6c401aff82b54ae
Parents: d6accae
Author: Konstantin Golub <key.offe...@runbox.com>
Authored: Wed Oct 4 17:22:26 2017 -0300
Committer: Konstantin Golub <key.offe...@runbox.com>
Committed: Wed Oct 4 17:22:26 2017 -0300

----------------------------------------------------------------------
 .../adhocquery/api/AdHocJsonInputParams.java    |  5 ++-
 .../fineract/adhocquery/data/AdHocData.java     | 47 ++++++++++++++------
 .../fineract/adhocquery/domain/AdHoc.java       | 36 ++++++++++++---
 .../adhocquery/domain/ReportRunFrequency.java   | 43 ++++++++++++++++++
 .../adhocquery/service/AdHocDataValidator.java  | 26 ++++++++++-
 .../service/AdHocReadPlatformServiceImpl.java   |  9 ++--
 .../core_db/V336__report-run-frequency.sql      | 22 +++++++++
 7 files changed, 164 insertions(+), 24 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/fineract/blob/5cfea884/fineract-provider/src/main/java/org/apache/fineract/adhocquery/api/AdHocJsonInputParams.java
----------------------------------------------------------------------
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/adhocquery/api/AdHocJsonInputParams.java
 
b/fineract-provider/src/main/java/org/apache/fineract/adhocquery/api/AdHocJsonInputParams.java
index 0cb3384..e8c1420 100644
--- 
a/fineract-provider/src/main/java/org/apache/fineract/adhocquery/api/AdHocJsonInputParams.java
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/adhocquery/api/AdHocJsonInputParams.java
@@ -25,7 +25,10 @@ import java.util.Set;
  * Enum of all parameters passed in while creating/updating a AdHocQuery 
  ***/
 public enum AdHocJsonInputParams {
-    ID("id"), 
NAME("name"),QUERY("query"),TABLENAME("tableName"),TABLEFIELD("tableFields"), 
ISACTIVE("isActive"),EMAIL("email");
+    ID("id"), 
NAME("name"),QUERY("query"),TABLENAME("tableName"),TABLEFIELD("tableFields"), 
ISACTIVE("isActive"),
+    REPORT_RUN_FREQUENCY("reportRunFrequency"),
+    REPORT_RUN_EVERY("reportRunEvery"),
+    EMAIL("email");
 
     private final String value;
 

http://git-wip-us.apache.org/repos/asf/fineract/blob/5cfea884/fineract-provider/src/main/java/org/apache/fineract/adhocquery/data/AdHocData.java
----------------------------------------------------------------------
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/adhocquery/data/AdHocData.java
 
b/fineract-provider/src/main/java/org/apache/fineract/adhocquery/data/AdHocData.java
index f0fd7a8..bd5421d 100644
--- 
a/fineract-provider/src/main/java/org/apache/fineract/adhocquery/data/AdHocData.java
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/adhocquery/data/AdHocData.java
@@ -18,13 +18,13 @@
  */
 package org.apache.fineract.adhocquery.data;
 
-import java.util.Collection;
+import java.util.Arrays;
+import java.util.List;
+import java.util.stream.Collectors;
 
-import org.apache.fineract.organisation.office.data.OfficeData;
-import org.apache.fineract.useradministration.data.AppUserData;
-import org.apache.fineract.useradministration.data.RoleData;
+import org.apache.fineract.adhocquery.domain.ReportRunFrequency;
+import org.apache.fineract.infrastructure.core.data.EnumOptionData;
 import org.joda.time.DateTime;
-import org.joda.time.LocalDate;
 
 /**
  * Immutable data object represent note or case information AdHocData
@@ -32,8 +32,8 @@ import org.joda.time.LocalDate;
  */
 public class AdHocData {
 
-       
-    
+
+
        @SuppressWarnings("unused")
     private final Long id;
     @SuppressWarnings("unused")
@@ -59,13 +59,16 @@ public class AdHocData {
        @SuppressWarnings("unused")
        private final String createdBy;
        
-    
-       
+    private final List<EnumOptionData> reportRunFrequencies;
+
+    private final Long reportRunFrequency;
 
-    public AdHocData(final Long id, final String name,final String query, 
final String tableName,final String tableFields, 
-               final boolean isActive, final DateTime createdOn, final Long 
createdById,final Long updatedById,
-               final DateTime updatedOn,final String createdBy,final String 
email
-            ) {
+    private final Long reportRunEvery;
+
+    public AdHocData(final Long id, final String name, final String query, 
final String tableName, final String tableFields,
+                     final boolean isActive, final DateTime createdOn, final 
Long createdById, final Long updatedById,
+                     final DateTime updatedOn, final String createdBy, final 
String email,
+                     final List<EnumOptionData> reportRunFrequencies, final 
Long reportRunFrequency, final Long reportRunEvery) {
         this.id = id;
         this.name=name;
         this.query=query;
@@ -78,9 +81,16 @@ public class AdHocData {
         this.updatedOn=updatedOn;
         this.createdBy=createdBy;
         this.email=email;
+           this.reportRunFrequencies = reportRunFrequencies;
+           this.reportRunFrequency = reportRunFrequency;
+           this.reportRunEvery = reportRunEvery;
     }
     public static AdHocData template() {
-        AdHocData adHocData = new 
AdHocData(null,null,null,null,null,false,null,null,null,null,null,null);
+           List<EnumOptionData> reportRunFrequencies = 
Arrays.stream(ReportRunFrequency.values()).map(rrf -> new EnumOptionData(
+                   (long) rrf.getValue(), rrf.getCode(), rrf.getCode()
+           )).collect(Collectors.toList());
+
+           AdHocData adHocData = new 
AdHocData(null,null,null,null,null,false,null,null,null,null,null,null, 
reportRunFrequencies, null, null);
                return adHocData;
     }
     public Long getId() {
@@ -119,4 +129,13 @@ public class AdHocData {
        public String getCreatedBy() {
                return this.createdBy;
        }
+       public List<EnumOptionData> getReportRunFrequencies() {
+               return this.reportRunFrequencies;
+       }
+       public Long getReportRunFrequency() {
+               return this.reportRunFrequency;
+       }
+       public Long getReportRunEvery() {
+               return this.reportRunEvery;
+       }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/fineract/blob/5cfea884/fineract-provider/src/main/java/org/apache/fineract/adhocquery/domain/AdHoc.java
----------------------------------------------------------------------
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/adhocquery/domain/AdHoc.java
 
b/fineract-provider/src/main/java/org/apache/fineract/adhocquery/domain/AdHoc.java
index be315ba..93fa73f 100644
--- 
a/fineract-provider/src/main/java/org/apache/fineract/adhocquery/domain/AdHoc.java
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/adhocquery/domain/AdHoc.java
@@ -53,17 +53,24 @@ public class AdHoc extends AbstractAuditableCustom<AppUser, 
Long> {
        
     @Column(name = "email", length = 500)
     private  String email;
-    
-   
+
+    @Column(name = "report_run_frequency_code")
+    private Long reportRunFrequency;
+
+    @Column(name = "report_run_every")
+    private Long reportRunEvery;
+
        @Column(name = "IsActive", nullable = false)
     private boolean isActive = false;
        
-    private AdHoc(final String name, final String query,final String 
tableName,final String tableFields ,final String email,final boolean isActive) {
+    private AdHoc(final String name, final String query,final String 
tableName,final String tableFields ,final String email, final Long 
reportRunFrequency, final Long reportRunEvery, final boolean isActive) {
         this.name = StringUtils.defaultIfEmpty(name, null);
         this.query=StringUtils.defaultIfEmpty(query,null);
         this.tableName=StringUtils.defaultIfEmpty(tableName,null);
         this.tableFields=StringUtils.defaultIfEmpty(tableFields,null);
         this.email=StringUtils.defaultIfEmpty(email,null);
+        this.reportRunFrequency = reportRunFrequency;
+        this.reportRunEvery = reportRunEvery;
         this.isActive = BooleanUtils.toBooleanDefaultIfNull(isActive, false);
        
     }
@@ -77,8 +84,10 @@ public class AdHoc extends AbstractAuditableCustom<AppUser, 
Long> {
         final String tableName = 
command.stringValueOfParameterNamed(AdHocJsonInputParams.TABLENAME.getValue());
         final String tableFields = 
command.stringValueOfParameterNamed(AdHocJsonInputParams.TABLEFIELD.getValue());
         final String email = 
command.stringValueOfParameterNamed(AdHocJsonInputParams.EMAIL.getValue());
+        final Long reportRunFrequency = 
command.longValueOfParameterNamed(AdHocJsonInputParams.REPORT_RUN_FREQUENCY.getValue());
+        final Long reportRunEvery = 
command.longValueOfParameterNamed(AdHocJsonInputParams.REPORT_RUN_EVERY.getValue());
         final boolean isActive = 
command.booleanPrimitiveValueOfParameterNamed(AdHocJsonInputParams.ISACTIVE.getValue());
-        return new AdHoc(name,query,tableName,tableFields ,email,isActive);
+        return new AdHoc(name,query,tableName,tableFields, email, 
reportRunFrequency, reportRunEvery, isActive);
     }
     
     public Map<String, Object> update(final JsonCommand command) {
@@ -116,6 +125,18 @@ public class AdHoc extends 
AbstractAuditableCustom<AppUser, Long> {
             actualChanges.put(email, newValue);
             this.email = newValue;
         }
+        final String reportRunFrequency = "reportRunFrequency";
+        if (command.isChangeInLongParameterNamed(reportRunFrequency, 
this.getReportRunFrequency())) {
+            final Long newValue = 
command.longValueOfParameterNamed(reportRunFrequency);
+            actualChanges.put(reportRunFrequency, newValue);
+            this.reportRunFrequency = newValue;
+        }
+        final String reportRunEvery = "reportRunEvery";
+        if (command.isChangeInLongParameterNamed(reportRunEvery, 
this.getReportRunEvery())) {
+            final Long newValue = 
command.longValueOfParameterNamed(reportRunEvery);
+            actualChanges.put(reportRunEvery, newValue);
+            this.reportRunEvery = newValue;
+        }
         final String paramisActive = "isActive";
         if (command.isChangeInBooleanParameterNamed(paramisActive, 
this.isActive)) {
                final Boolean newValue = 
command.booleanObjectValueOfParameterNamed(paramisActive);
@@ -149,5 +170,10 @@ public class AdHoc extends 
AbstractAuditableCustom<AppUser, Long> {
     public void enableActive() {
        this.isActive = false;
     }
-
+    public Long getReportRunFrequency() {
+        return this.reportRunFrequency;
+    }
+    public Long getReportRunEvery() {
+        return this.reportRunEvery;
+    }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/fineract/blob/5cfea884/fineract-provider/src/main/java/org/apache/fineract/adhocquery/domain/ReportRunFrequency.java
----------------------------------------------------------------------
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/adhocquery/domain/ReportRunFrequency.java
 
b/fineract-provider/src/main/java/org/apache/fineract/adhocquery/domain/ReportRunFrequency.java
new file mode 100644
index 0000000..78bd011
--- /dev/null
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/adhocquery/domain/ReportRunFrequency.java
@@ -0,0 +1,43 @@
+/**
+ * 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.adhocquery.domain;
+
+public enum ReportRunFrequency {
+    DAILY(1, "reportRunFrequency.daily"),
+    WEEKLY(2, "reportRunFrequency.weekly"),
+    MONTHLY(3, "reportRunFrequency.monthly"),
+    YEARLY(4, "reportRunFrequency.yearly"),
+    CUSTOM(5, "reportRunFrequency.custom");
+
+    private final int value;
+    private final String code;
+
+    private ReportRunFrequency(final int value, final String code) {
+        this.value = value;
+        this.code = code;
+    }
+
+    public int getValue() {
+        return this.value;
+    }
+
+    public String getCode() {
+        return this.code;
+    }
+}

http://git-wip-us.apache.org/repos/asf/fineract/blob/5cfea884/fineract-provider/src/main/java/org/apache/fineract/adhocquery/service/AdHocDataValidator.java
----------------------------------------------------------------------
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/adhocquery/service/AdHocDataValidator.java
 
b/fineract-provider/src/main/java/org/apache/fineract/adhocquery/service/AdHocDataValidator.java
index 2cdd294..b96cc10 100644
--- 
a/fineract-provider/src/main/java/org/apache/fineract/adhocquery/service/AdHocDataValidator.java
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/adhocquery/service/AdHocDataValidator.java
@@ -27,6 +27,7 @@ import java.util.Map;
 import java.util.Set;
 
 import org.apache.commons.lang.StringUtils;
+import org.apache.fineract.adhocquery.domain.ReportRunFrequency;
 import org.apache.fineract.infrastructure.core.data.ApiParameterError;
 import org.apache.fineract.infrastructure.core.data.DataValidatorBuilder;
 import org.apache.fineract.infrastructure.core.exception.InvalidJsonException;
@@ -44,7 +45,9 @@ public final class AdHocDataValidator {
     /**
      * The parameters supported for this command.
      */
-    private final Set<String> supportedParameters = new 
HashSet<>(Arrays.asList("name","query","tableName","tableFields","email","isActive"));
+    private final Set<String> supportedParameters = new 
HashSet<>(Arrays.asList(
+        "name","query","tableName","tableFields","email","isActive", 
"reportRunFrequency", "reportRunEvery"
+    ));
 
     private final FromJsonHelper fromApiJsonHelper;
 
@@ -78,6 +81,18 @@ public final class AdHocDataValidator {
 
         final String email = 
this.fromApiJsonHelper.extractStringNamed("email", element);
         
baseDataValidator.reset().parameter("email").value(email).notBlank().notExceedingLengthOf(500);
+
+        final Long reportRunFrequencyCode = 
this.fromApiJsonHelper.extractLongNamed("reportRunFrequency", element);
+        if (reportRunFrequencyCode != null) {
+            
baseDataValidator.reset().parameter("reportRunFrequency").value(reportRunFrequencyCode)
+                .inMinMaxRange(ReportRunFrequency.DAILY.getValue(), 
ReportRunFrequency.CUSTOM.getValue());
+        }
+
+        final Long reportRunEvery = 
this.fromApiJsonHelper.extractLongNamed("reportRunEvery", element);
+        if (reportRunEvery != null) {
+            
baseDataValidator.reset().parameter("reportRunEvery").value(reportRunFrequencyCode).integerGreaterThanZero();
+        }
+
         throwExceptionIfValidationWarningsExist(dataValidationErrors);
     }
 
@@ -113,6 +128,15 @@ public final class AdHocDataValidator {
             final String email = 
this.fromApiJsonHelper.extractStringNamed("email", element);
             
baseDataValidator.reset().parameter("email").value(email).notBlank().notExceedingLengthOf(500);
         }
+        if (this.fromApiJsonHelper.parameterExists("reportRunFrequency", 
element)) {
+            final Long reportRunFrequencyCode = 
this.fromApiJsonHelper.extractLongNamed("reportRunFrequency", element);
+            
baseDataValidator.reset().parameter("reportRunFrequency").value(reportRunFrequencyCode)
+                .inMinMaxRange(ReportRunFrequency.DAILY.getValue(), 
ReportRunFrequency.CUSTOM.getValue());
+        }
+        if (this.fromApiJsonHelper.parameterExists("reportRunEvery", element)) 
{
+            final Long reportRunEvery = 
this.fromApiJsonHelper.extractLongNamed("reportRunEvery", element);
+            
baseDataValidator.reset().parameter("reportRunEvery").value(reportRunEvery).integerGreaterThanZero();
+        }
         /*if (this.fromApiJsonHelper.parameterExists("isActive", element)) {
             final Integer isActive = 
this.fromApiJsonHelper.extractIntegerNamed("isActive", element, 
Locale.getDefault());
             
baseDataValidator.reset().parameter("isActive").value(isActive).notNull().inMinMaxRange(1,
 2);

http://git-wip-us.apache.org/repos/asf/fineract/blob/5cfea884/fineract-provider/src/main/java/org/apache/fineract/adhocquery/service/AdHocReadPlatformServiceImpl.java
----------------------------------------------------------------------
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/adhocquery/service/AdHocReadPlatformServiceImpl.java
 
b/fineract-provider/src/main/java/org/apache/fineract/adhocquery/service/AdHocReadPlatformServiceImpl.java
index eb1f633..2ea6cfd 100644
--- 
a/fineract-provider/src/main/java/org/apache/fineract/adhocquery/service/AdHocReadPlatformServiceImpl.java
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/adhocquery/service/AdHocReadPlatformServiceImpl.java
@@ -88,13 +88,16 @@ public class AdHocReadPlatformServiceImpl implements 
AdHocReadPlatformService {
             final DateTime updatedOn=JdbcSupport.getDateTime(rs, "updatedOn");
             final String createdByUsername=rs.getString("createdBy");
             final String email=rs.getString("email");
-          
-            return new AdHocData(id,name,query, 
tableName,tableFields,isActive,createdDate,createdById,updatedById,updatedOn,createdByUsername,email);
+            final Long reportRunFrequency=JdbcSupport.getLong(rs, 
"report_run_frequency_code");
+            final Long reportRunEvery=JdbcSupport.getLong(rs, 
"report_run_every");
+
+            return new AdHocData(id,name,query, 
tableName,tableFields,isActive,createdDate,createdById,updatedById,updatedOn,createdByUsername,email,
 AdHocData.template().getReportRunFrequencies(), reportRunFrequency, 
reportRunEvery);
         }
 
         public String schema() {
             return " r.id as id, r.name as name, r.query as query, 
r.table_name as tableName,r.table_fields as tableField ,r.IsActive as isActive 
,r.email as email ,"
-                       +" r.created_date as createdDate, r.createdby_id as 
createdById,cb.username as createdBy,r.lastmodifiedby_id as updatedById 
,r.lastmodified_date as updatedOn "
+                    + " r.report_run_frequency_code, r.report_run_every, "
+                       + " r.created_date as createdDate, r.createdby_id as 
createdById,cb.username as createdBy,r.lastmodifiedby_id as updatedById 
,r.lastmodified_date as updatedOn "
                     + " from m_adhoc r left join m_appuser cb on 
cb.id=r.createdby_id left join m_appuser mb on mb.id=r.lastmodifiedby_id";
                                
         }

http://git-wip-us.apache.org/repos/asf/fineract/blob/5cfea884/fineract-provider/src/main/resources/sql/migrations/core_db/V336__report-run-frequency.sql
----------------------------------------------------------------------
diff --git 
a/fineract-provider/src/main/resources/sql/migrations/core_db/V336__report-run-frequency.sql
 
b/fineract-provider/src/main/resources/sql/migrations/core_db/V336__report-run-frequency.sql
new file mode 100644
index 0000000..3f593c4
--- /dev/null
+++ 
b/fineract-provider/src/main/resources/sql/migrations/core_db/V336__report-run-frequency.sql
@@ -0,0 +1,22 @@
+--
+-- 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 m_adhoc ADD COLUMN report_run_frequency_code INT NULL DEFAULT NULL;
+ALTER TABLE m_adhoc ADD COLUMN report_run_every INT NULL DEFAULT NULL;
+ALTER TABLE m_adhoc ADD COLUMN last_run TIMESTAMP NULL DEFAULT NULL;
\ No newline at end of file

Reply via email to