def orgs_team_members(request, org, team_id, template="orgs/orgs_team_members.html"): #organization and teams organization = Organization.get_by_name(org) teams = Team.get_by_org(org) current_domains = Domain.get_by_organization(org) #check that the team exists team = Team.get(team_id) if team is None: raise Http404("Group %s does not exist" % team_id) #inspect the members of the team member_ids = team.get_member_ids() members = WebUser.view("_all_docs", keys=member_ids, include_docs=True).all() members.sort(key=lambda user: user.username) #inspect the domains of the team domain_names = team.get_domains() domains = list() for name in domain_names: domains.append([Domain.get_by_name(name), team.role_label(domain=name)]) all_org_domains = Domain.get_by_organization(org) non_domains = [domain for domain in all_org_domains if domain.name not in domain_names] all_org_member_ids = organization.members all_org_members = WebUser.view("_all_docs", keys=all_org_member_ids, include_docs=True).all() non_members = [member for member in all_org_members if member.user_id not in member_ids] vals = dict(org=organization, team=team, teams=teams, members=members, nonmembers=non_members, domains=current_domains, team_domains=domains, team_nondomains=non_domains) return render_to_response(request, template, vals)
def noneulized_users(request, template="hqadmin/noneulized_users.html"): context = get_hqadmin_base_context(request) days = request.GET.get("days", None) days = int(days) if days else 60 days_ago = datetime.now() - timedelta(days=days) users = WebUser.view( "eula_report/noneulized_users", reduce=False, include_docs=True, startkey=["WebUser", days_ago.strftime("%Y-%m-%dT%H:%M:%SZ")], endkey=["WebUser", {}], ).all() context.update({"users": filter(lambda user: not user.is_dimagi, users), "days": days}) headers = DataTablesHeader( DataTablesColumn("Username"), DataTablesColumn("Date of Last Login"), DataTablesColumn("couch_id") ) context["layout_flush_content"] = True context["headers"] = headers context["aoColumns"] = headers.render_aoColumns return render(request, template, context)
def update_subscription_properties_by_domain(domain): affected_users = WebUser.view( 'users/web_users_by_domain', reduce=False, key=domain.name, include_docs=True ).all() for web_user in affected_users: update_subscription_properties_by_user(web_user)
def update_subscription_properties_by_domain(domain): affected_users = WebUser.view( 'users/web_users_by_domain', reduce=False, key=domain.name, include_docs=True ).all() for web_user in affected_users: update_subscription_properties_by_user(web_user)
def noneulized_users(request, template="hqadmin/noneulized_users.html"): context = get_hqadmin_base_context(request) days = request.GET.get("days", None) days = int(days) if days else 60 days_ago = datetime.now() - timedelta(days=days) users = WebUser.view( "eula_report/noneulized_users", reduce=False, include_docs=True, startkey=["WebUser", days_ago.strftime("%Y-%m-%dT%H:%M:%SZ")], endkey=["WebUser", {}]).all() context.update({ "users": filter(lambda user: not user.is_dimagi, users), "days": days }) headers = DataTablesHeader( DataTablesColumn("Username"), DataTablesColumn("Date of Last Login"), DataTablesColumn("couch_id"), ) context['layout_flush_content'] = True context["headers"] = headers context["aoColumns"] = headers.render_aoColumns return render(request, template, context)
def update_subscription_properties_by_domain(domain): domain_obj = Domain.get_by_name(domain) if domain_obj: affected_users = WebUser.view( 'users/web_users_by_domain', reduce=False, key=domain, include_docs=True ).all() for web_user in affected_users: properties = get_subscription_properties_by_user(web_user) update_subscription_properties_by_user.delay(web_user.get_id, properties)
def update_subscription_properties_by_domain(domain): domain_obj = Domain.get_by_name(domain) if domain_obj: affected_users = WebUser.view( 'users/web_users_by_domain', reduce=False, key=domain, include_docs=True ).all() for web_user in affected_users: properties = get_subscription_properties_by_user(web_user) update_subscription_properties_by_user.delay(web_user.get_id, properties)
def mass_email(request): if not request.couch_user.is_staff: raise Http404() if request.method == "POST": form = EmailForm(request.POST) if form.is_valid(): subject = form.cleaned_data['email_subject'] body = form.cleaned_data['email_body'] real_email = form.cleaned_data['real_email'] if real_email: recipients = WebUser.view( 'users/mailing_list_emails', reduce=False, include_docs=True, ).all() else: recipients = [request.couch_user] for recipient in recipients: params = { 'email_body': body, 'user_id': recipient.get_id, 'unsub_url': get_url_base() + reverse('unsubscribe', args=[recipient.get_id]) } text_content = render_to_string( "hqadmin/email/mass_email_base.txt", params) html_content = render_to_string( "hqadmin/email/mass_email_base.html", params) send_HTML_email(subject, recipient.email, html_content, text_content, email_from=settings.DEFAULT_FROM_EMAIL) messages.success(request, 'Your email(s) were sent successfully.') else: form = EmailForm() context = get_hqadmin_base_context(request) context['hide_filters'] = True context['form'] = form return render(request, "hqadmin/mass_email.html", context)
def mass_email(request): if not request.couch_user.is_staff: raise Http404() if request.method == "POST": form = EmailForm(request.POST) if form.is_valid(): subject = form.cleaned_data['email_subject'] body = form.cleaned_data['email_body'] real_email = form.cleaned_data['real_email'] if real_email: recipients = WebUser.view( 'users/mailing_list_emails', reduce=False, include_docs=True, ).all() else: recipients = [request.couch_user] for recipient in recipients: params = { 'email_body': body, 'user_id': recipient.get_id, 'unsub_url': get_url_base() + reverse('unsubscribe', args=[recipient.get_id]) } text_content = render_to_string("hqadmin/email/mass_email_base.txt", params) html_content = render_to_string("hqadmin/email/mass_email_base.html", params) send_HTML_email(subject, recipient.email, html_content, text_content, email_from=settings.DEFAULT_FROM_EMAIL) messages.success(request, 'Your email(s) were sent successfully.') else: form = EmailForm() context = get_hqadmin_base_context(request) context['hide_filters'] = True context['form'] = form return render(request, "hqadmin/mass_email.html", context)
def handle(self, *args, **options): for user_data in WebUser.view('users/mailing_list_emails').all(): email_address = user_data['key'] if options.get(RUN_FIX, False): print 'subscribing %s' % email_address try: subscribe_user_to_mailchimp_list( WebUser.get(user_data['id']), settings.MAILCHIMP_MASS_EMAIL_ID, email=email_address, ) print 'subscribed %s' % email_address except mailchimp.ListAlreadySubscribedError: print 'already subscribed %s' % email_address except mailchimp.ListInvalidImportError as e: print e.message except mailchimp.ValidationError as e: print e.message except mailchimp.Error as e: raise e else: print 'ready to subscribe %s' % email_address
def handle(self, *args, **options): for user_data in WebUser.view('users/mailing_list_emails').all(): email_address = user_data['key'] if options.get(RUN_FIX, False): print 'subscribing %s' % email_address try: subscribe_user_to_mailchimp_list( WebUser.get(user_data['id']), settings.MAILCHIMP_MASS_EMAIL_ID, email=email_address, ) print 'subscribed %s' % email_address except mailchimp.ListAlreadySubscribedError: print 'already subscribed %s' % email_address except mailchimp.ListInvalidImportError as e: print e.message except mailchimp.ValidationError as e: print e.message except mailchimp.Error as e: raise e else: print 'ready to subscribe %s' % email_address
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 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) 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, 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 if request.method == "POST" and form.is_valid(): for k, v in form.cleaned_data.items(): setattr(instance, k, v) 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 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).all() 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) if instance.owner_id != user_id or instance.domain != domain: raise HttpResponseBadRequest() else: instance = ReportNotification(owner_id=user_id, domain=domain, config_ids=[], day_of_week=-1, hours=8, 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 if request.method == "POST" and form.is_valid(): for k, v in form.cleaned_data.items(): setattr(instance, k, v) instance.save() if is_new: messages.success(request, "Scheduled report added!") else: messages.success(request, "Scheduled report updated!") return HttpResponseRedirect(reverse('reports_home', args=(domain,))) context['form'] = form 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 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) 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, 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 if request.method == "POST" and form.is_valid(): for k, v in form.cleaned_data.items(): setattr(instance, k, v) 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)