def edit_scheduled_report(request, domain, scheduled_report_id=None, template="reports/edit_scheduled_report.html"): from corehq.apps.users.models import WebUser from corehq.apps.reports.forms import ScheduledReportForm context = { 'form': None, 'domain': domain, 'report': { 'show': request.couch_user.can_view_reports() or request.couch_user.get_viewable_reports(), 'slug': None, 'default_url': reverse('reports_home', args=(domain,)), 'is_async': False, 'section_name': ProjectReport.section_name, } } user_id = request.couch_user._id configs = ReportConfig.by_domain_and_owner(domain, user_id) config_choices = [(c._id, c.full_name) for c in configs if c.report and c.report.emailable] if not config_choices: return render(request, template, context) web_users = WebUser.view('users/web_users_by_domain', reduce=False, key=domain, include_docs=True).all() web_user_emails = [u.get_email() for u in web_users] if scheduled_report_id: instance = ReportNotification.get(scheduled_report_id) time_difference = get_timezone_difference(domain) (instance.hour, day_change) = recalculate_hour(instance.hour, int(time_difference[:3]), int(time_difference[3:])) instance.minute = 0 if day_change: instance.day = calculate_day(instance.interval, instance.day, day_change) if instance.owner_id != user_id or instance.domain != domain: raise HttpResponseBadRequest() else: instance = ReportNotification(owner_id=user_id, domain=domain, config_ids=[], hour=8, minute=0, send_to_owner=True, recipient_emails=[]) is_new = instance.new_document initial = instance.to_json() initial['recipient_emails'] = ', '.join(initial['recipient_emails']) kwargs = {'initial': initial} args = (request.POST,) if request.method == "POST" else () form = ScheduledReportForm(*args, **kwargs) form.fields['config_ids'].choices = config_choices form.fields['recipient_emails'].choices = web_user_emails form.fields['hour'].help_text = "This scheduled report's timezone is %s (%s GMT)" % \ (Domain._get_by_name(domain)['default_timezone'], get_timezone_difference(domain)[:3] + ':' + get_timezone_difference(domain)[3:]) if request.method == "POST" and form.is_valid(): for k, v in form.cleaned_data.items(): setattr(instance, k, v) time_difference = get_timezone_difference(domain) (instance.hour, day_change) = calculate_hour(instance.hour, int(time_difference[:3]), int(time_difference[3:])) instance.minute = int(time_difference[3:]) if day_change: instance.day = calculate_day(instance.interval, instance.day, day_change) instance.save() if is_new: messages.success(request, "Scheduled report added!") else: messages.success(request, "Scheduled report updated!") touch_saved_reports_views(request.couch_user, domain) return HttpResponseRedirect(reverse('reports_home', args=(domain,))) context['form'] = form context['day_value'] = getattr(instance, "day", 1) context['weekly_day_options'] = ReportNotification.day_choices() context['monthly_day_options'] = [(i, i) for i in range(1, 32)] if is_new: context['form_action'] = "Create a new" context['report']['title'] = "New Scheduled Report" else: context['form_action'] = "Edit" context['report']['title'] = "Edit Scheduled Report" return render(request, template, context)
def get_timezone_difference(domain): return datetime.now(pytz.timezone(Domain._get_by_name(domain)['default_timezone'])).strftime('%z')
def edit_scheduled_report(request, domain, scheduled_report_id=None, template="reports/edit_scheduled_report.html"): from corehq.apps.users.models import WebUser from corehq.apps.reports.forms import ScheduledReportForm context = { 'form': None, 'domain': domain, 'report': { 'show': request.couch_user.can_view_reports() or request.couch_user.get_viewable_reports(), 'slug': None, 'default_url': reverse('reports_home', args=(domain, )), 'is_async': False, 'section_name': ProjectReport.section_name, } } user_id = request.couch_user._id configs = ReportConfig.by_domain_and_owner(domain, user_id) config_choices = [(c._id, c.full_name) for c in configs if c.report and c.report.emailable] if not config_choices: return render(request, template, context) web_users = WebUser.view('users/web_users_by_domain', reduce=False, key=domain, include_docs=True).all() web_user_emails = [u.get_email() for u in web_users] if scheduled_report_id: instance = ReportNotification.get(scheduled_report_id) time_difference = get_timezone_difference(domain) (instance.hour, day_change) = recalculate_hour(instance.hour, int(time_difference[:3]), int(time_difference[3:])) instance.minute = 0 if day_change: instance.day = calculate_day(instance.interval, instance.day, day_change) if instance.owner_id != user_id or instance.domain != domain: raise HttpResponseBadRequest() else: instance = ReportNotification(owner_id=user_id, domain=domain, config_ids=[], hour=8, minute=0, send_to_owner=True, recipient_emails=[]) is_new = instance.new_document initial = instance.to_json() initial['recipient_emails'] = ', '.join(initial['recipient_emails']) kwargs = {'initial': initial} args = (request.POST, ) if request.method == "POST" else () form = ScheduledReportForm(*args, **kwargs) form.fields['config_ids'].choices = config_choices form.fields['recipient_emails'].choices = web_user_emails form.fields['hour'].help_text = "This scheduled report's timezone is %s (%s GMT)" % \ (Domain._get_by_name(domain)['default_timezone'], get_timezone_difference(domain)[:3] + ':' + get_timezone_difference(domain)[3:]) if request.method == "POST" and form.is_valid(): for k, v in form.cleaned_data.items(): setattr(instance, k, v) time_difference = get_timezone_difference(domain) (instance.hour, day_change) = calculate_hour(instance.hour, int(time_difference[:3]), int(time_difference[3:])) instance.minute = int(time_difference[3:]) if day_change: instance.day = calculate_day(instance.interval, instance.day, day_change) instance.save() if is_new: messages.success(request, "Scheduled report added!") else: messages.success(request, "Scheduled report updated!") touch_saved_reports_views(request.couch_user, domain) return HttpResponseRedirect(reverse('reports_home', args=(domain, ))) context['form'] = form context['day_value'] = getattr(instance, "day", 1) context['weekly_day_options'] = ReportNotification.day_choices() context['monthly_day_options'] = [(i, i) for i in range(1, 32)] if is_new: context['form_action'] = "Create a new" context['report']['title'] = "New Scheduled Report" else: context['form_action'] = "Edit" context['report']['title'] = "Edit Scheduled Report" return render(request, template, context)
def get_timezone_difference(domain): return datetime.now(pytz.timezone(Domain._get_by_name(domain)["default_timezone"])).strftime("%z")
def get_timezone_difference(domain): return datetime.now( pytz.timezone( Domain._get_by_name(domain)['default_timezone'])).strftime('%z')