Search in sources :

Example 6 with EmailRecordSearchCriteria

use of org.motechproject.email.builder.EmailRecordSearchCriteria in project motech by motech.

the class EmailController method prepareCriteria.

private EmailRecordSearchCriteria prepareCriteria(GridSettings filter) {
    EmailRecordSearchCriteria criteria = new EmailRecordSearchCriteria();
    DateTime from = StringUtils.isBlank(filter.getTimeFrom()) ? null : DateTimeFormat.forPattern("Y-MM-dd HH:mm:ss").parseDateTime(filter.getTimeFrom());
    DateTime to = StringUtils.isBlank(filter.getTimeTo()) ? null : DateTimeFormat.forPattern("Y-MM-dd HH:mm:ss").parseDateTime(filter.getTimeTo());
    criteria.withMessageTimeRange(new Range<>(from, to));
    if (filter.getDeliveryStatusFromSettings() != null && (!filter.getDeliveryStatusFromSettings().isEmpty())) {
        criteria = criteria.withDeliveryStatuses(filter.getDeliveryStatusFromSettings());
    }
    Order sortOrder = new Order(filter.getSidx(), filter.getSord());
    QueryParams queryParams = new QueryParams(filter.getPage(), filter.getRows(), sortOrder);
    criteria.withQueryParams(queryParams);
    criteria.withSubject(filter.getSubject());
    criteria.withToAddress(filter.getSubject());
    criteria.withFromAddress(filter.getSubject());
    criteria.withMessage(filter.getSubject());
    return criteria;
}
Also used : Order(org.motechproject.mds.util.Order) QueryParams(org.motechproject.mds.query.QueryParams) EmailRecordSearchCriteria(org.motechproject.email.builder.EmailRecordSearchCriteria) DateTime(org.joda.time.DateTime)

Example 7 with EmailRecordSearchCriteria

use of org.motechproject.email.builder.EmailRecordSearchCriteria in project motech by motech.

the class EmailController method exportEmailLog.

@RequestMapping(value = "/emails/export", method = RequestMethod.GET)
@PreAuthorize(EmailRolesConstants.HAS_ANY_EMAIL_ROLE)
public void exportEmailLog(@RequestParam("range") String range, @RequestParam(value = "month", required = false) String month, HttpServletResponse response, HttpServletRequest request) throws IOException {
    DateTime now = new DateTime();
    List<? extends BasicEmailRecordDto> toSave = new ArrayList<>();
    if ("all".equals(range)) {
        GridSettings allEmailsFilter = new GridSettings();
        List<EmailRecord> allEmails = auditService.findAllEmailRecords();
        allEmailsFilter.setPage(1);
        allEmailsFilter.setRows(allEmails.size());
        toSave = hideColumns(allEmails, allEmailsFilter);
    } else if ("table".equals(range)) {
        GridSettings filter = lastFilter.get(getUsername(request));
        toSave = getEmails(filter, request).getRows();
    } else if ("month".equals(range) && (!month.isEmpty())) {
        int moved = 0;
        String fixedMonth;
        if (month.charAt(0) == '0') {
            fixedMonth = month.substring(1);
            moved++;
        } else {
            fixedMonth = month;
        }
        GridSettings oneMonthFilter = new GridSettings();
        DateTime monthBegin = new // NO CHECKSTYLE MagicNumber
        DateTime(// NO CHECKSTYLE MagicNumber
        Integer.parseInt(fixedMonth.substring(3 - moved, 7 - moved)), Integer.parseInt(fixedMonth.substring(0, 2 - moved)), 1, 0, 0);
        DateTime monthFall = // NO CHECKSTYLE MagicNumber
        new DateTime().withYear(Integer.parseInt(fixedMonth.substring(3 - moved, 7 - moved))).withMonthOfYear(Integer.parseInt(fixedMonth.substring(0, 2 - moved))).dayOfMonth().withMaximumValue().hourOfDay().withMaximumValue().minuteOfHour().withMaximumValue().secondOfMinute().withMaximumValue().millisOfSecond().withMaximumValue();
        Set<DeliveryStatus> allDeliveryStatuses = Sets.newHashSet(DeliveryStatus.values());
        List<EmailRecord> monthEmails = auditService.findEmailRecords(new EmailRecordSearchCriteria().withMessageTimeRange(new Range<>(monthBegin, monthFall)).withDeliveryStatuses(allDeliveryStatuses));
        oneMonthFilter.setPage(1);
        oneMonthFilter.setRows(monthEmails.size());
        toSave = hideColumns(monthEmails, oneMonthFilter);
    }
    String fileName = "motech_email_logs_" + now.toString("yyyy-MM-dd_HH-kk-mm");
    response.setContentType("text/csv;charset=utf-8");
    response.setCharacterEncoding(UTF_8);
    response.setHeader("Content-Disposition", "attachment; filename=" + fileName + ".csv");
    try (CsvBeanWriter csvBeanWriter = new CsvBeanWriter(response.getWriter(), CsvPreference.STANDARD_PREFERENCE)) {
        String[] headers;
        String[] fieldMapping;
        if (toSave.size() == 0 || toSave.get(0) instanceof EmailRecordDto) {
            headers = new String[] { "Delivery Status", "Delivery Time", "From Address", "To Address", "Subject", "Message" };
            fieldMapping = new String[] { "deliveryStatus", "deliveryTime", "fromAddress", "toAddress", "subject", "message" };
        } else {
            headers = new String[] { "Delivery Status", "Delivery Time" };
            fieldMapping = new String[] { "deliveryStatus", "deliveryTime" };
        }
        csvBeanWriter.writeHeader(headers);
        for (BasicEmailRecordDto email : toSave) {
            csvBeanWriter.write(email, fieldMapping);
        }
    }
}
Also used : ArrayList(java.util.ArrayList) DateTime(org.joda.time.DateTime) EmailRecord(org.motechproject.email.domain.EmailRecord) CsvBeanWriter(org.supercsv.io.CsvBeanWriter) DeliveryStatus(org.motechproject.email.domain.DeliveryStatus) EmailRecordSearchCriteria(org.motechproject.email.builder.EmailRecordSearchCriteria) PreAuthorize(org.springframework.security.access.prepost.PreAuthorize) RequestMapping(org.springframework.web.bind.annotation.RequestMapping)

Example 8 with EmailRecordSearchCriteria

use of org.motechproject.email.builder.EmailRecordSearchCriteria in project motech by motech.

the class EmailController method getEmails.

@RequestMapping(value = "/emails", method = RequestMethod.GET)
@PreAuthorize(EmailRolesConstants.HAS_ANY_EMAIL_ROLE)
@ResponseBody
public EmailRecords<? extends BasicEmailRecordDto> getEmails(GridSettings filter, HttpServletRequest request) {
    EmailRecordSearchCriteria criteria = prepareCriteria(filter);
    List<EmailRecord> filtered = auditService.findEmailRecords(criteria);
    List<? extends BasicEmailRecordDto> rows = hideColumns(filtered, filter);
    long total = auditService.countEmailRecords(criteria);
    if (filter.getRows() == null) {
        int defaultRowsAmount = 10;
        filter.setRows(defaultRowsAmount);
    }
    if (filter.getPage() == null) {
        int defaultPage = 1;
        filter.setPage(defaultPage);
    }
    int totalPages = (int) Math.ceil((double) total / filter.getRows());
    String username = getUsername(request);
    if (username != null) {
        lastFilter.put(username, filter);
    }
    return new EmailRecords<>((int) total, filter.getPage(), totalPages, rows);
}
Also used : EmailRecord(org.motechproject.email.domain.EmailRecord) EmailRecords(org.motechproject.email.domain.EmailRecords) EmailRecordSearchCriteria(org.motechproject.email.builder.EmailRecordSearchCriteria) PreAuthorize(org.springframework.security.access.prepost.PreAuthorize) RequestMapping(org.springframework.web.bind.annotation.RequestMapping) ResponseBody(org.springframework.web.bind.annotation.ResponseBody)

Aggregations

EmailRecordSearchCriteria (org.motechproject.email.builder.EmailRecordSearchCriteria)8 Test (org.junit.Test)5 EmailRecord (org.motechproject.email.domain.EmailRecord)4 DateTime (org.joda.time.DateTime)3 PrintWriter (java.io.PrintWriter)2 StringWriter (java.io.StringWriter)2 DeliveryStatus (org.motechproject.email.domain.DeliveryStatus)2 QueryParams (org.motechproject.mds.query.QueryParams)2 Order (org.motechproject.mds.util.Order)2 PreAuthorize (org.springframework.security.access.prepost.PreAuthorize)2 RequestMapping (org.springframework.web.bind.annotation.RequestMapping)2 ArrayList (java.util.ArrayList)1 HashSet (java.util.HashSet)1 Range (org.motechproject.commons.api.Range)1 EmailRecords (org.motechproject.email.domain.EmailRecords)1 PrepareForTest (org.powermock.core.classloader.annotations.PrepareForTest)1 ResponseBody (org.springframework.web.bind.annotation.ResponseBody)1 CsvBeanWriter (org.supercsv.io.CsvBeanWriter)1