[ 
https://issues.apache.org/jira/browse/FINERACT-65?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15405499#comment-15405499
 ] 

ASF GitHub Bot commented on FINERACT-65:
----------------------------------------

Github user nazeer1100126 commented on a diff in the pull request:

    https://github.com/apache/incubator-fineract/pull/191#discussion_r73292182
  
    --- Diff: 
fineract-provider/src/main/java/org/apache/fineract/infrastructure/reportmailingjob/api/ReportMailingJobApiResource.java
 ---
    @@ -0,0 +1,157 @@
    +/**
    + * 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.infrastructure.reportmailingjob.api;
    +
    +import java.util.Collection;
    +
    +import javax.ws.rs.Consumes;
    +import javax.ws.rs.DELETE;
    +import javax.ws.rs.GET;
    +import javax.ws.rs.POST;
    +import javax.ws.rs.PUT;
    +import javax.ws.rs.Path;
    +import javax.ws.rs.PathParam;
    +import javax.ws.rs.Produces;
    +import javax.ws.rs.core.Context;
    +import javax.ws.rs.core.MediaType;
    +import javax.ws.rs.core.UriInfo;
    +
    +import org.apache.fineract.commands.domain.CommandWrapper;
    +import org.apache.fineract.commands.service.CommandWrapperBuilder;
    +import 
org.apache.fineract.commands.service.PortfolioCommandSourceWritePlatformService;
    +import 
org.apache.fineract.infrastructure.core.api.ApiRequestParameterHelper;
    +import 
org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
    +import 
org.apache.fineract.infrastructure.core.serialization.ApiRequestJsonSerializationSettings;
    +import 
org.apache.fineract.infrastructure.core.serialization.DefaultToApiJsonSerializer;
    +import 
org.apache.fineract.infrastructure.reportmailingjob.ReportMailingJobConstants;
    +import 
org.apache.fineract.infrastructure.reportmailingjob.data.ReportMailingJobData;
    +import 
org.apache.fineract.infrastructure.reportmailingjob.service.ReportMailingJobReadPlatformService;
    +import 
org.apache.fineract.infrastructure.security.service.PlatformSecurityContext;
    +import org.springframework.beans.factory.annotation.Autowired;
    +import org.springframework.context.annotation.Scope;
    +import org.springframework.stereotype.Component;
    +
    +@Path("/" + ReportMailingJobConstants.REPORT_MAILING_JOB_RESOURCE_NAME)
    +@Component
    +@Scope("singleton")
    +public class ReportMailingJobApiResource {
    +
    +    private final PlatformSecurityContext platformSecurityContext;
    +    private final PortfolioCommandSourceWritePlatformService 
commandsSourceWritePlatformService;
    +    private final ApiRequestParameterHelper apiRequestParameterHelper;
    +    private final DefaultToApiJsonSerializer<ReportMailingJobData> 
reportMailingToApiJsonSerializer;
    +    private final ReportMailingJobReadPlatformService 
reportMailingJobReadPlatformService;
    +    
    +    @Autowired
    +    public ReportMailingJobApiResource(final PlatformSecurityContext 
platformSecurityContext, 
    +            final PortfolioCommandSourceWritePlatformService 
commandsSourceWritePlatformService, 
    +            final ApiRequestParameterHelper apiRequestParameterHelper, 
    +            final DefaultToApiJsonSerializer<ReportMailingJobData> 
reportMailingToApiJsonSerializer, 
    +            final ReportMailingJobReadPlatformService 
reportMailingJobReadPlatformService) {
    +        this.platformSecurityContext = platformSecurityContext;
    +        this.commandsSourceWritePlatformService = 
commandsSourceWritePlatformService;
    +        this.apiRequestParameterHelper = apiRequestParameterHelper;
    +        this.reportMailingToApiJsonSerializer = 
reportMailingToApiJsonSerializer;
    +        this.reportMailingJobReadPlatformService = 
reportMailingJobReadPlatformService;
    +    }
    +    
    +    @POST
    +    @Consumes({ MediaType.APPLICATION_JSON })
    +    @Produces({ MediaType.APPLICATION_JSON })
    +    public String createReportMailingJob(final String 
apiRequestBodyAsJson) {
    +        final CommandWrapper commandWrapper = new CommandWrapperBuilder().
    +                
createReportMailingJob(ReportMailingJobConstants.REPORT_MAILING_JOB_PERMISSION_NAME).
    +                withJson(apiRequestBodyAsJson).build();
    +        
    +        final CommandProcessingResult commandProcessingResult = 
this.commandsSourceWritePlatformService.logCommandSource(commandWrapper);
    +        
    +        return 
this.reportMailingToApiJsonSerializer.serialize(commandProcessingResult);
    +    }
    +    
    +    @PUT
    +    @Path("{entityId}")
    +    @Consumes({ MediaType.APPLICATION_JSON })
    +    @Produces({ MediaType.APPLICATION_JSON })
    +    public String updateReportMailingJob(@PathParam("entityId") final Long 
entityId, final String apiRequestBodyAsJson) {
    +        final CommandWrapper commandWrapper = new CommandWrapperBuilder().
    +                
updateReportMailingJob(ReportMailingJobConstants.REPORT_MAILING_JOB_PERMISSION_NAME,
 entityId).
    +                withJson(apiRequestBodyAsJson).build();
    +        
    +        final CommandProcessingResult commandProcessingResult = 
this.commandsSourceWritePlatformService.logCommandSource(commandWrapper);
    +        
    +        return 
this.reportMailingToApiJsonSerializer.serialize(commandProcessingResult);
    +    }
    +    
    +    @DELETE
    +    @Path("{entityId}")
    +    @Consumes({ MediaType.APPLICATION_JSON })
    +    @Produces({ MediaType.APPLICATION_JSON })
    +    public String deleteReportMailingJob(@PathParam("entityId") final Long 
entityId, final String apiRequestBodyAsJson) {
    +        final CommandWrapper commandWrapper = new CommandWrapperBuilder().
    +                
deleteReportMailingJob(ReportMailingJobConstants.REPORT_MAILING_JOB_PERMISSION_NAME,
 entityId).
    +                withJson(apiRequestBodyAsJson).build();
    +        
    +        final CommandProcessingResult commandProcessingResult = 
this.commandsSourceWritePlatformService.logCommandSource(commandWrapper);
    +        
    +        return 
this.reportMailingToApiJsonSerializer.serialize(commandProcessingResult);
    +    }
    +    
    +    @GET
    +    @Path("{entityId}")
    +    @Consumes({ MediaType.APPLICATION_JSON })
    +    @Produces({ MediaType.APPLICATION_JSON })
    +    public String retrieveReportMailingJob(@PathParam("entityId") final 
Long entityId, @Context final UriInfo uriInfo) {
    +        
this.platformSecurityContext.authenticatedUser().validateHasReadPermission(ReportMailingJobConstants.REPORT_MAILING_JOB_PERMISSION_NAME);
    +        
    +        final ApiRequestJsonSerializationSettings settings = 
this.apiRequestParameterHelper.process(uriInfo.getQueryParameters());
    +        ReportMailingJobData reportMailingJobData = 
this.reportMailingJobReadPlatformService.retrieveReportMailingJob(entityId);
    +        
    +        if (settings.isTemplate()) {
    +            final ReportMailingJobData ReportMailingJobDataOptions = 
this.reportMailingJobReadPlatformService.retrieveReportMailingJobEnumOptions();
    +            reportMailingJobData = 
ReportMailingJobData.newInstance(reportMailingJobData, 
ReportMailingJobDataOptions);
    +        }
    +        
    +        return this.reportMailingToApiJsonSerializer.serialize(settings, 
reportMailingJobData, 
ReportMailingJobConstants.REPORT_MAILING_JOB_DATA_PARAMETERS);
    +    }
    +    
    +    @GET
    +    @Path("template")
    +    @Consumes({ MediaType.APPLICATION_JSON })
    +    @Produces({ MediaType.APPLICATION_JSON })
    +    public String retrieveReportMailingJobTemplate(@Context final UriInfo 
uriInfo) {
    +        
this.platformSecurityContext.authenticatedUser().validateHasReadPermission(ReportMailingJobConstants.REPORT_MAILING_JOB_PERMISSION_NAME);
    +        
    +        final ApiRequestJsonSerializationSettings settings = 
this.apiRequestParameterHelper.process(uriInfo.getQueryParameters());
    +        final ReportMailingJobData ReportMailingJobDataOptions = 
this.reportMailingJobReadPlatformService.retrieveReportMailingJobEnumOptions();
    +        
    +        return this.reportMailingToApiJsonSerializer.serialize(settings, 
ReportMailingJobDataOptions, 
ReportMailingJobConstants.REPORT_MAILING_JOB_DATA_PARAMETERS);
    +    }
    +    
    +    @GET
    +    @Consumes({ MediaType.APPLICATION_JSON })
    +    @Produces({ MediaType.APPLICATION_JSON })
    +    public String retrieveAllReportMailingJobs(@Context final UriInfo 
uriInfo) {
    --- End diff --
    
    Suggestion: Better to give pagination support to retrieve all report 
mailing jobs. 


> Implement ability to schedule & e-mail reports
> ----------------------------------------------
>
>                 Key: FINERACT-65
>                 URL: https://issues.apache.org/jira/browse/FINERACT-65
>             Project: Apache Fineract
>          Issue Type: New Feature
>            Reporter: Emmanuel Nnaa
>            Assignee: Markus Geiss
>            Priority: Minor
>
> Some reports take a bit longer to run, therefore we should be able to allow 
> our users to schedule them overnight to be e-mailed. 
> The way this should work is:
> - Add e-mailaddress to users and make it mandatory (possibly already in 
> MifosX)
> - Allow users to configure schedule entries which consist of:
> - One or multiple target users (e-mailaddresses)
> - Set the preferred subject and content of the e-mail (Look at user generated 
> documents API in MifosX for replacing certain variables)
> - Choose the run frequency of the report (daily, weekly, every x'th day of 
> the month etc, cron-like flexibility with a UI)
> - Pick the preferred output format (PDF/XLS/CSV)
> These reports should be picked up by a scheduled job overnight and then run 
> in serial to avoid performance hits and sent out to the users.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to