def email_mentees(request): """Email my mentees view.""" if request.method == 'POST': my_mentees = User.objects.filter(userprofile__mentor=request.user) email_form = EmailUsersForm(my_mentees, request.POST) if email_form.is_valid(): email_form.send_mail(request) else: messages.error(request, 'Email not sent. Invalid data.') return redirect('dashboard')
def email_attendees(request, slug): """Send email to event attendees.""" event = get_object_or_404(Event, slug=slug) attendees = event.attendees.all() if request.method == 'POST': email_form = EmailUsersForm(attendees, request.POST) if email_form.is_valid(): email_form.send_mail(request) else: messages.error(request, 'Email not sent. Invalid data.') return redirect('events_view_event', slug=slug)
def email_attendees(request, slug): """Send email to event attendees.""" event = get_object_or_404(Event, slug=slug) attendees = event.attendees.all() if request.method == "POST": email_form = EmailUsersForm(attendees, request.POST) if email_form.is_valid(): statsd.incr("events.email_attendees.total") email_form.send_mail(request) else: messages.error(request, "Email not sent. Invalid data.") return redirect("events_view_event", slug=slug)
def view_event(request, slug): """View event view.""" event = get_object_or_404(Event, slug=slug) attendees = event.attendees.exclude(groups__name='Mozillians') event_url = reverse('events_view_event', kwargs={'slug': slug}) email_att_initial = { 'subject': event.name, 'body': '%s\n%s' % (event.name, settings.SITE_URL + event_url)} email_att_form = EmailUsersForm(attendees, initial=email_att_initial) if request.method == 'POST': if not request.user.is_authenticated(): messages.error(request, 'Permission Denied') return redirect('main') event_comment = EventComment(event=event, user=request.user) event_comment_form = forms.EventCommentForm(request.POST, instance=event_comment) if event_comment_form.is_valid(): event_comment_form.save() messages.success(request, 'Comment saved') # provide new clean form event_comment_form = forms.EventCommentForm() else: event_comment_form = forms.EventCommentForm() return render(request, 'view_event.html', {'event': event, 'email_attendees_form': email_att_form, 'similar_events': event.get_similar_events(), 'comments': event.eventcomment_set.all(), 'event_comment_form': event_comment_form, 'event_comment_form_url': event_url})
def view_event(request, slug): """View event view.""" event = get_object_or_404(Event, slug=slug) attendees = event.attendees.exclude(groups__name='Mozillians') event_url = reverse('events_view_event', kwargs={'slug': slug}) email_att_initial = { 'subject': event.name, 'body': '%s\n%s' % (event.name, settings.SITE_URL + event_url) } email_att_form = EmailUsersForm(attendees, initial=email_att_initial) # Display a message if the event owner needs to submit post event data if (request.user == event.owner and event.is_past_event and event.has_new_metrics and not any([ metric.outcome for metric in event.eventmetricoutcome_set.all() ])): msg = render_to_string('includes/view_post_event_metrics.jinja', {'event': event}) messages.info(request, mark_safe(msg)) if request.method == 'POST': if not request.user.is_authenticated(): messages.error(request, 'Permission Denied') return redirect('main') event_comment = EventComment(event=event, user=request.user) event_comment_form = forms.EventCommentForm(request.POST, instance=event_comment) if event_comment_form.is_valid(): event_comment_form.save() messages.success(request, 'Comment saved') statsd.incr('events.create_comment') # provide new clean form event_comment_form = forms.EventCommentForm() else: event_comment_form = forms.EventCommentForm() return render( request, 'view_event.jinja', { 'event': event, 'email_attendees_form': email_att_form, 'similar_events': event.get_similar_events(), 'comments': event.eventcomment_set.all(), 'event_comment_form': event_comment_form, 'event_comment_form_url': event_url })
def dashboard(request): """Dashboard view.""" user = request.user args = {} # Mozillians block if user.groups.filter(name='Mozillians').exists(): return dashboard_mozillians(request, user) # Reps block q_closed = Q(status='RESOLVED') | Q(status='VERIFIED') budget_requests = (Bug.objects.filter( component='Budget Requests').exclude(q_closed)) swag_requests = (Bug.objects.filter( component='Swag Requests').exclude(q_closed)) mentorship_requests = (Bug.objects.filter( component='Mentorship').exclude(q_closed)) cit_requests = (Bug.objects.filter( component='Community IT Requests').exclude(q_closed)) planning_requests = (Bug.objects.filter( component='Planning').exclude(q_closed)) today = now().date() # Post event metrics notifications owned_events = Event.objects.filter( owner=user, end__lt=now(), eventmetricoutcome__outcome__isnull=True, has_new_metrics=True).distinct() args['owned_events'] = owned_events # NG Reports if user.groups.filter(name='Rep').exists(): args['ng_reports'] = (user.ng_reports.filter( report_date__lte=today).order_by('-report_date')) args['today'] = now() # Dashboard data my_q = (Q(cc=user) | Q(creator=user)) my_q_assigned = (my_q | Q(assigned_to=user)) my_mentees = User.objects.filter(userprofile__mentor=user, userprofile__registration_complete=True) args['my_budget_requests'] = budget_requests.filter(my_q).distinct() args['my_swag_requests'] = swag_requests.filter(my_q).distinct() if user.groups.filter(name='Mentor').exists(): args['mentees_ng_reportees'] = User.objects.filter( ng_reports__isnull=False, ng_reports__mentor=user).distinct() args['mentees_budget_requests'] = (budget_requests.filter( creator__in=my_mentees).distinct()) args['mentees_swag_requests'] = (swag_requests.filter( creator__in=my_mentees).distinct()) my_mentorship_requests = mentorship_requests.filter(my_q_assigned) my_mentorship_requests = my_mentorship_requests.order_by('whiteboard') args['my_mentorship_requests'] = my_mentorship_requests.distinct() args['mentees_emails'] = (my_mentees.values_list( 'first_name', 'last_name', 'email') or None) args['email_mentees_form'] = EmailUsersForm(my_mentees) if user.groups.filter(Q(name='Admin') | Q(name='Council')).exists(): args['all_budget_requests'] = budget_requests.all()[:20] args['all_swag_requests'] = swag_requests.all()[:20] args['my_cit_requests'] = cit_requests args['my_planning_requests'] = planning_requests else: args['my_planning_requests'] = ( planning_requests.filter(my_q_assigned).distinct()) if user.groups.filter(name='Admin').exists(): args['is_admin'] = True reps = User.objects.filter(groups__name='Rep') args['reps_without_mentors'] = reps.filter( userprofile__registration_complete=True, userprofile__mentor=None) args['reps_without_profile'] = reps.filter( userprofile__registration_complete=False) statsd.incr('dashboard.dashboard_reps') return render(request, 'dashboard_reps.html', args)
def dashboard(request): """Dashboard view.""" user = request.user args = {'today': now()} # Mozillians/Alumni block if (user.groups.filter(name='Mozillians').exists() or user.groups.filter(name='Alumni').exists()): return dashboard_mozillians(request, user) # Reps block q_closed = Q(status='RESOLVED') | Q(status='VERIFIED') budget_requests = Bug.objects.filter( component='Budget Requests').exclude(q_closed) swag_requests = Bug.objects.filter( component='Swag Requests').exclude(q_closed) mentorship_requests = Bug.objects.filter( component='Mentorship').exclude(q_closed) planning_requests = Bug.objects.filter( component='Planning').exclude(q_closed) today = now().date() # Action Items args['action_items'] = ActionItem.objects.filter(user=user, resolved=False)[:10] # NG Reports if user.groups.filter(name='Rep').exists(): args['ng_reports'] = user.ng_reports.filter( report_date__lte=today).order_by('-report_date') # Dashboard data my_q = (Q(cc=user) | Q(creator=user)) my_q_assigned = (my_q | Q(assigned_to=user)) my_mentees = User.objects.filter(userprofile__mentor=user, userprofile__registration_complete=True, groups__name='Rep') reps = User.objects.filter(groups__name='Rep') args['my_budget_requests'] = budget_requests.filter(my_q).distinct() args['my_swag_requests'] = swag_requests.filter(my_q).distinct() if user.groups.filter( Q(name='Admin') | Q(name='Council') | Q(name='Peers') | Q(name='Onboarding')).exists(): args['can_view_administration'] = True if user.groups.filter(name='Mentor').exists(): args['mentees_action_items'] = ActionItem.objects.filter( user__in=my_mentees, resolved=False)[:10] args['mentees_activities'] = User.objects.filter( userprofile__registration_complete=True, userprofile__mentor=user, groups__name='Rep').distinct() args['mentees_budget_requests'] = budget_requests.filter( creator__in=my_mentees).distinct() args['mentees_swag_requests'] = swag_requests.filter( creator__in=my_mentees).distinct() my_mentorship_requests = mentorship_requests.filter(my_q_assigned) my_mentorship_requests = my_mentorship_requests.order_by('whiteboard') args['my_mentorship_requests'] = my_mentorship_requests.distinct() args['mentees_emails'] = my_mentees.values_list( 'first_name', 'last_name', 'email') or None args['email_mentees_form'] = EmailUsersForm(my_mentees) if user.groups.filter(Q(name='Admin') | Q(name='Review')).exists(): args['all_budget_requests'] = budget_requests.all()[:20] args['all_swag_requests'] = swag_requests.all()[:20] if user.groups.filter(Q(name='Admin') | Q(name='Council')).exists(): args['my_planning_requests'] = planning_requests else: args['my_planning_requests'] = planning_requests.filter( my_q_assigned).distinct() if user.groups.filter( Q(name='Admin') | Q(name='Council') | Q(name='Onboarding')).exists(): args['reps_without_profile'] = reps.filter( userprofile__registration_complete=False) if user.groups.filter( Q(name='Admin') | Q(name='Council') | Q(name='Peers')).exists(): args['reps_without_mentors'] = reps.filter( userprofile__registration_complete=True, userprofile__mentor=None) statsd.incr('dashboard.dashboard_reps') return render(request, 'dashboard_reps.jinja', args)
def dashboard(request): """Dashboard view.""" user = request.user args = {'today': now()} # Mozillians/Alumni block if (user.groups.filter(name='Mozillians').exists() or user.groups.filter(name='Alumni').exists()): return dashboard_mozillians(request, user) # Reps block q_closed = Q(status='RESOLVED') | Q(status='VERIFIED') budget_requests = Bug.objects.filter( component='Budget Requests').exclude(q_closed) swag_requests = Bug.objects.filter( component='Swag Requests').exclude(q_closed) mentorship_requests = Bug.objects.filter( component='Mentorship').exclude(q_closed) today = now().date() # Action Items args['action_items'] = ActionItem.objects.filter(user=user, resolved=False)[:10] # NG Reports if user.groups.filter(name='Rep').exists(): args['ng_reports'] = user.ng_reports.filter( report_date__lte=today).order_by('-report_date') # Dashboard data my_q = (Q(cc=user) | Q(creator=user)) my_q_assigned = (my_q | Q(assigned_to=user)) my_mentees = User.objects.filter(userprofile__mentor=user, userprofile__registration_complete=True, groups__name='Rep') reps = User.objects.filter(groups__name='Rep') args['my_budget_requests'] = budget_requests.filter(my_q).distinct() args['my_swag_requests'] = swag_requests.filter(my_q).distinct() if user.groups.filter( Q(name='Admin') | Q(name='Council') | Q(name='Peers') | Q(name='Onboarding')).exists(): args['can_view_administration'] = True if user.groups.filter(name='Mentor').exists(): args['mentees_action_items'] = ActionItem.objects.filter( user__in=my_mentees, resolved=False)[:10] args['mentees_activities'] = User.objects.filter( userprofile__registration_complete=True, userprofile__mentor=user, groups__name='Rep').distinct() args['mentees_budget_requests'] = budget_requests.filter( creator__in=my_mentees).distinct() args['mentees_swag_requests'] = swag_requests.filter( creator__in=my_mentees).distinct() args['mentees_emails'] = my_mentees.values_list( 'first_name', 'last_name', 'email') or None args['email_mentees_form'] = EmailUsersForm(my_mentees) if user.groups.filter(Q(name='Mentor') | Q(name='Council')).exists(): my_mentorship_requests = mentorship_requests.filter(my_q_assigned) my_mentorship_requests = my_mentorship_requests.order_by('whiteboard') args['my_mentorship_requests'] = my_mentorship_requests.distinct() if user.groups.filter(Q(name='Admin') | Q(name='Review')).exists(): args['all_budget_requests'] = budget_requests.all()[:20] args['all_swag_requests'] = swag_requests.all()[:20] if user.groups.filter( Q(name='Admin') | Q(name='Council') | Q(name='Onboarding')).exists(): args['reps_without_profile'] = reps.filter( userprofile__registration_complete=False) if user.groups.filter( Q(name='Admin') | Q(name='Council') | Q(name='Peers')).exists(): # We want to show # - Reps with completed profiles and no mentor # - Reps with mentors who are Alumni # while not including any Alumni Reps alumni_ids = User.objects.filter(groups__name='Alumni').values_list( 'id', flat=True) reps_with_alumni_mentors_q = Q(userprofile__mentor__id__in=alumni_ids) reps_without_mentor_q = Q(userprofile__registration_complete=True, userprofile__mentor__isnull=True) reps_without_mentor = reps.filter(reps_with_alumni_mentors_q | reps_without_mentor_q) order_by = '-userprofile__date_joined_program' args['reps_without_mentors'] = reps_without_mentor.order_by(order_by) reps_with_profiles = reps.filter( userprofile__registration_complete=True) q_active_12_months = Q(ng_reports__report_date__range=[ get_date(weeks=-52), get_date(weeks=0) ]) args['reps_inactive_12_months'] = reps_with_profiles.filter( ~q_active_12_months).distinct() q_active_6_months = Q(ng_reports__report_date__range=[ get_date(weeks=-26), get_date(weeks=0) ]) args['reps_inactive_6_months'] = reps_with_profiles.filter( ~q_active_6_months).distinct() statsd.incr('dashboard.dashboard_reps') return render(request, 'dashboard_reps.jinja', args)