Exemple #1
0
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')
Exemple #2
0
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')
Exemple #3
0
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)
Exemple #4
0
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)
Exemple #5
0
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)
Exemple #6
0
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})
Exemple #7
0
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
        })
Exemple #8
0
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)
Exemple #9
0
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)
Exemple #10
0
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)