Search in sources :

Example 6 with DeliveryStatus

use of org.motechproject.email.domain.DeliveryStatus 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)

Aggregations

DeliveryStatus (org.motechproject.email.domain.DeliveryStatus)6 DateTime (org.joda.time.DateTime)5 EmailRecord (org.motechproject.email.domain.EmailRecord)5 Test (org.junit.Test)4 ArrayList (java.util.ArrayList)2 EmailRecordSearchCriteria (org.motechproject.email.builder.EmailRecordSearchCriteria)2 HashSet (java.util.HashSet)1 MatchesProperty (org.motechproject.mds.query.MatchesProperty)1 Property (org.motechproject.mds.query.Property)1 RangeProperty (org.motechproject.mds.query.RangeProperty)1 RestrictionProperty (org.motechproject.mds.query.RestrictionProperty)1 SetProperty (org.motechproject.mds.query.SetProperty)1 PreAuthorize (org.springframework.security.access.prepost.PreAuthorize)1 RequestMapping (org.springframework.web.bind.annotation.RequestMapping)1 CsvBeanWriter (org.supercsv.io.CsvBeanWriter)1