예제 #1
0
def _gir_csv_response(month, year):
    query_month = "{year}-{month}-01".format(year=year, month=month)
    prev_month = "{year}-{month}-01".format(year=year, month=month - 1)
    two_ago = "{year}-{month}-01".format(year=year, month=month - 2)
    if not GIRRow.objects.filter(month=query_month).exists():
        return HttpResponse('Sorry, that month is not yet available')
    queryset = GIRRow.objects.filter(month__in=[query_month, prev_month, two_ago]).order_by('-month')
    domain_months = defaultdict(list)
    for item in queryset:
        domain_months[item.domain_name].append(item)
    field_names = GIR_FIELDS
    response = HttpResponse(content_type='text/csv')
    response['Content-Disposition'] = u'attachment; filename=gir.csv'
    writer = UnicodeWriter(response)
    writer.writerow(list(field_names))
    for months in domain_months.values():
        writer.writerow(months[0].export_row(months[1:]))
    return response
    def _write_file(self, slug, headers, process_domain):
        row_count = 0
        csv_file = io.BytesIO()
        writer = UnicodeWriter(csv_file)
        writer.writerow(headers)

        for domain in [
                domain for domain in map(Domain.get_by_name, self.domain_names)
                if domain
        ]:
            rows = process_domain(domain)
            row_count = row_count + len(rows)
            writer.writerows(rows)

        print('Wrote {} lines of {}'.format(row_count, slug))
        attachment = {
            'title':
            'enterprise_{}_{}.csv'.format(slug,
                                          self.now.strftime('%Y%m%d_%H%M%S')),
            'mimetype':
            'text/csv',
            'file_obj':
            csv_file,
        }
        return (attachment, row_count)
예제 #3
0
파일: tasks.py 프로젝트: mekete/commcare-hq
def _mass_email_attachment(name, rows):
    csv_file = io.BytesIO()
    writer = UnicodeWriter(csv_file)
    writer.writerow(['Email', 'Error'])
    writer.writerows(rows)
    attachment = {
        'title': "mass_email_{}.csv".format(name),
        'mimetype': 'text/csv',
        'file_obj': csv_file,
    }
    return attachment
예제 #4
0
def enterprise_dashboard_download(request, account_id, slug):
    account = BillingAccount.objects.get(id=account_id)
    report = EnterpriseReport.create(slug, account.id, request.couch_user)

    response = HttpResponse(content_type='text/csv')
    response['Content-Disposition'] = 'attachment; filename="{}"'.format(
        report.filename)
    writer = UnicodeWriter(response)

    writer.writerow(report.headers)
    writer.writerows(report.rows)

    return response
예제 #5
0
def send_status_email(domain, async_result):
    errors = []
    duration = datetime.timedelta()
    updates = 0
    noupdates = 0
    batch_info_template = "Batch {index}: Completed in {duration}. Errors: {errors}. Updates: {updates}\n"
    batch_info_message = ""
    for i, batch_info in enumerate(async_result):
        errors += batch_info.errors
        duration += batch_info.duration
        updates += batch_info.update_count
        noupdates += batch_info.noupdate_count
        batch_info_message += batch_info_template.format(
            index=i + 1,
            duration=batch_info.duration,
            updates=batch_info.update_count,
            errors=len(batch_info.errors),
        )

    subject = "eNikshay Episode Task results for: {}".format(
        datetime.date.today())
    recipient = "{}@{}.{}".format('commcarehq-ops+admins', 'dimagi', 'com')
    cc = "{}@{}.{}".format('frener', 'dimagi', 'com')

    csv_file = io.BytesIO()
    writer = UnicodeWriter(csv_file)
    writer.writerow(['Episode ID', 'Domain', 'Updater Class', 'Error'])
    writer.writerows(errors)

    message = (
        "domain: {domain},\n Summary: \n "
        "total duration: {duration} \n"
        "total updates: {updates} \n total errors: {errors} \n total non-updates: {noupdates} \n"
        "".format(domain=domain,
                  duration=duration,
                  updates=updates,
                  errors=len(errors),
                  noupdates=noupdates))
    message += batch_info_message

    attachment = {
        'title': "failed_episodes_{}.csv".format(datetime.date.today()),
        'mimetype': 'text/csv',
        'file_obj': csv_file,
    }
    send_html_email_async(subject,
                          recipient,
                          message,
                          cc=[cc],
                          text_content=message,
                          file_attachments=[attachment])
예제 #6
0
파일: views.py 프로젝트: zbidi/commcare-hq
def _gir_csv_response(month, year):
    query_month = "{year}-{month}-01".format(year=year, month=month)
    prev_month = "{year}-{month}-01".format(year=year, month=month - 1)
    two_ago = "{year}-{month}-01".format(year=year, month=month - 2)
    if not GIRRow.objects.filter(month=query_month).exists():
        return HttpResponse('Sorry, that month is not yet available')
    queryset = GIRRow.objects.filter(
        month__in=[query_month, prev_month, two_ago]).order_by('-month')
    domain_months = defaultdict(list)
    for item in queryset:
        domain_months[item.domain_name].append(item)
    field_names = GIR_FIELDS
    response = HttpResponse(content_type='text/csv')
    response['Content-Disposition'] = u'attachment; filename=gir.csv'
    writer = UnicodeWriter(response)
    writer.writerow(list(field_names))
    for months in domain_months.values():
        writer.writerow(months[0].export_row(months[1:]))
    return response
예제 #7
0
    def _write_file(self, slug):
        report = EnterpriseReport.create(slug, self.account_id,
                                         self.couch_user)

        row_count = 0
        csv_file = io.BytesIO()
        writer = UnicodeWriter(csv_file)
        writer.writerow(report.headers)

        rows = report.rows
        row_count = len(rows)
        writer.writerows(rows)

        print('Wrote {} lines of {}'.format(row_count, slug))
        attachment = {
            'title': report.filename,
            'mimetype': 'text/csv',
            'file_obj': csv_file,
        }
        return (attachment, row_count)
예제 #8
0
def send_status_email(domain, async_result):
    errors = []
    duration = datetime.timedelta()
    updates = 0
    noupdates = 0
    for batch_info in async_result:
        errors += batch_info.errors
        duration += batch_info.duration
        updates += batch_info.update_count
        noupdates += batch_info.noupdate_count

    subject = "eNikshay Episode Task results for: {}".format(
        datetime.date.today())
    recipient = "{}@{}.{}".format('commcarehq-ops+admins', 'dimagi', 'com')
    cc = "{}@{}.{}".format('frener', 'dimagi', 'com')

    csv_file = StringIO()
    writer = UnicodeWriter(csv_file)
    writer.writerow(['Episode ID', 'Domain', 'Updater Class', 'Error'])
    writer.writerows(errors)

    message = (
        "Summary of enikshay_task: domain: {domain}, duration (sec): {duration} "
        "Cases Updated {updates}, cases errored {errors} and {noupdates} "
        "cases didn't need update. ".format(domain=domain,
                                            duration=duration,
                                            updates=updates,
                                            errors=len(errors),
                                            noupdates=noupdates))
    attachment = {
        'title': "failed_episodes_{}.csv".format(datetime.date.today()),
        'mimetype': 'text/csv',
        'file_obj': csv_file,
    }
    send_html_email_async(subject,
                          recipient,
                          message,
                          cc=[cc],
                          text_content=message,
                          file_attachments=[attachment])