def send_bookkeeper_email(month=None, year=None, emails=None): today = datetime.date.today() # now, make sure that we send out LAST month's invoices if we did # not specify a month or year. today = get_previous_month_date_range(today)[0] month = month or today.month year = year or today.year from corehq.apps.accounting.interface import InvoiceInterface request = HttpRequest() params = urlencode(( ('report_filter_statement_period_use_filter', 'on'), ('report_filter_statement_period_month', month), ('report_filter_statement_period_year', year), )) request.GET = QueryDict(params) request.couch_user = FakeUser( domain="hqadmin", username="******", ) invoice = InvoiceInterface(request) invoice.is_rendered_as_email = True first_of_month = datetime.date(year, month, 1) email_context = { 'month': first_of_month.strftime("%B"), } email_content = render_to_string( 'accounting/email/bookkeeper.html', email_context) email_content_plaintext = render_to_string( 'accounting/email/bookkeeper.txt', email_context) format_dict = Format.FORMAT_DICT[Format.CSV] excel_attachment = { 'title': 'Invoices_%(period)s.%(extension)s' % { 'period': first_of_month.strftime('%B_%Y'), 'extension': format_dict['extension'], }, 'mimetype': format_dict['mimetype'], 'file_obj': invoice.excel_response, } emails = emails or settings.BOOKKEEPER_CONTACT_EMAILS for email in emails: send_HTML_email( "Invoices for %s" % datetime.date(year, month, 1).strftime(USER_MONTH_FORMAT), email, email_content, email_from=settings.DEFAULT_FROM_EMAIL, text_content=email_content_plaintext, file_attachments=[excel_attachment], ) log_accounting_info( "Sent Bookkeeper Invoice Summary for %(month)s " "to %(emails)s." % { 'month': first_of_month.strftime(USER_MONTH_FORMAT), 'emails': ", ".join(emails) })
def weekly_digest(): today = datetime.date.today() in_forty_days = today + datetime.timedelta(days=40) from corehq.apps.accounting.interface import SubscriptionInterface request = HttpRequest() params = urlencode(( ('report_filter_end_date_use_filter', 'on'), ('end_date_startdate', today.isoformat()), ('end_date_enddate', in_forty_days.isoformat()), ('active_status', 'Active'), (filters.TrialStatusFilter.slug, filters.TrialStatusFilter.NON_TRIAL), )) request.GET = QueryDict(params) request.couch_user = FakeUser( domain="hqadmin", username="******", ) subs = SubscriptionInterface(request) subs.is_rendered_as_email = True email_context = { 'today': today.isoformat(), 'forty_days': in_forty_days.isoformat(), } email_content = render_to_string('accounting/digest_email.html', email_context) email_content_plaintext = render_to_string('accounting/digest_email.txt', email_context) format_dict = Format.FORMAT_DICT[Format.CSV] excel_attachment = { 'title': 'Subscriptions_%(start)s_%(end)s.csv' % { 'start': today.isoformat(), 'end': in_forty_days.isoformat(), }, 'mimetype': format_dict['mimetype'], 'file_obj': subs.excel_response, } from_email = "Dimagi Accounting <%s>" % settings.DEFAULT_FROM_EMAIL send_HTML_email( "Subscriptions ending in 40 Days from %s" % today.isoformat(), settings.INVOICING_CONTACT_EMAIL, email_content, email_from=from_email, text_content=email_content_plaintext, file_attachments=[excel_attachment], ) logger.info( "[BILLING] Sent summary of ending subscriptions from %(today)s" % { 'today': today.isoformat(), })