Exemplo n.º 1
0
def edit_elder(request, elder_id, student_id=None, group_id=None):
    """Edit a village elder."""
    elder = get_object_or_404(
        model.Profile.objects.select_related('user'), id=elder_id)
    # can't edit the profile of another school staff
    if elder.school_staff:
        raise http.Http404
    if student_id is not None:
        teacher_rel = get_relationship_or_404(student_id, request.user.profile)
        editor = model.elder_in_context(teacher_rel)
        elder_rel = get_relationship_or_404(student_id, elder)
        elder = model.elder_in_context(elder_rel)
        all_elders = elder_rel.student.elder_relationships
        group = get_querystring_group(request, elder_rel.student)
    else:
        elder_rel = None
        editor = request.user.profile
        if group_id is not None:
            group = get_object_or_404(model.Group.objects.filter(
                    owner=request.user.profile), pk=group_id)
        else:
            group = model.AllStudentsGroup(request.user.profile)
        all_elders = group.all_elders

    if request.method == 'POST':
        form = forms.EditFamilyForm(request.POST, instance=elder, rel=elder_rel)
        success = False
        if elder_rel and request.POST.get('remove', False):
            with xact.xact():
                elder_rel.delete()
            success = True
        elif form.is_valid():
            with xact.xact():
                form.save(editor=editor)
            messages.success(request, u"Changes saved!")
            success = True
        if success:
            if elder_rel:
                return redirect('village', student_id=student_id)
            elif group and not group.is_all:
                return redirect('group', group_id=group.id)
            return redirect('all_students')
    else:
        form = forms.EditFamilyForm(instance=elder, rel=elder_rel)

    return TemplateResponse(
        request,
        'village/elder_form/edit_elder.html',
        {
            'form': form,
            'group': group,
            'student': elder_rel.student if elder_rel else None,
            'inviter': editor,
            'elder': elder,
            'elders': model.contextualized_elders(
                all_elders).order_by('school_staff', 'name'),
            },
        )
Exemplo n.º 2
0
def invite_family(request, student_id):
    """Invite family member to a student's village."""
    rel = get_relationship_or_404(student_id, request.user.profile)
    group = get_querystring_group(request, rel.student)

    if request.method == 'POST':
        form = forms.InviteFamilyForm(request.POST, rel=rel)
        if form.is_valid():
            with xact.xact():
                form.save()
            tracking.track(request, 'invited family')
            return redirect_to_village(rel.student, group)
    else:
        phone = request.GET.get('phone', None)
        initial = {}
        if phone is not None:
            initial['phone'] = phone
        form = forms.InviteFamilyForm(initial=initial, rel=rel)

    return TemplateResponse(
        request,
        'village/invite_elder/family.html',
        {
            'group': group,
            'student': rel.student,
            'inviter': model.elder_in_context(rel),
            'elders': model.contextualized_elders(
                rel.student.elder_relationships).order_by(
                'school_staff', 'name'),
            'form': form,
            },
        )
Exemplo n.º 3
0
    def save(self, rel=None):
        """
        Save/return new elder profile & send invite, or return existing.

        Optionally takes ``rel`` between inviting elder and student. If given
        will override rel given at initialization time. A rel must be given
        either at initialization or save time.

        """
        if rel is not None:
            self.rel = rel

        inviter = self.rel.elder

        name = self.cleaned_data.get('name')
        phone = self.cleaned_data.get('phone')
        relationship = self.cleaned_data.get('role', u"")

        if self.instance is None:
            self.instance = model.Profile.create_with_user(
                school=inviter.school,
                name=name,
                phone=phone,
                role=relationship,
                is_active=True,
                school_staff=False,
                invited_by=inviter,
                )
        else:
            # remove other existing relationships with teacher-less students
            model.Relationship.objects.filter(
                from_profile=self.instance).exclude(
                from_profile__school_staff=True).exclude(
                    to_profile=self.rel.student).delete()

        # send invite SMSes
        invites.send_invite_sms(
            self.instance,
            template_name='sms/invite_elder.txt',
            extra_context={
                'inviter': model.elder_in_context(self.rel),
                'student': self.rel.student,
                },
            )

        rel, created = model.Relationship.objects.get_or_create(
            from_profile=self.instance,
            to_profile=self.rel.student,
            defaults={
                'description': relationship,
                }
            )

        if not created and not rel.direct:
            rel.direct = True
            rel.save()

        return self.instance
Exemplo n.º 4
0
    def save(self, rel=None):
        """
        Save/return new elder profile & send invite, or return existing.

        Optionally takes ``rel`` between inviting elder and student. If given
        will override rel given at initialization time. A rel must be given
        either at initialization or save time.

        """
        if rel is not None:
            self.rel = rel

        inviter = self.rel.elder

        name = self.cleaned_data.get('name')
        phone = self.cleaned_data.get('phone')
        relationship = self.cleaned_data.get('role', u"")

        if self.instance is None:
            self.instance = model.Profile.create_with_user(
                school=inviter.school,
                name=name,
                phone=phone,
                role=relationship,
                is_active=True,
                school_staff=False,
                invited_by=inviter,
            )
        else:
            # remove other existing relationships with teacher-less students
            model.Relationship.objects.filter(
                from_profile=self.instance).exclude(
                    from_profile__school_staff=True).exclude(
                        to_profile=self.rel.student).delete()

        # send invite SMSes
        invites.send_invite_sms(
            self.instance,
            template_name='sms/invite_elder.txt',
            extra_context={
                'inviter': model.elder_in_context(self.rel),
                'student': self.rel.student,
            },
        )

        rel, created = model.Relationship.objects.get_or_create(
            from_profile=self.instance,
            to_profile=self.rel.student,
            defaults={
                'description': relationship,
            })

        if not created and not rel.direct:
            rel.direct = True
            rel.save()

        return self.instance