def create(self, validated_data):
     profile_data = validated_data.pop('profile')
     password = validated_data.pop('password')
     user = User(**validated_data)
     user.set_password(password)
     user.save()
     UserProfile.objects.create(user=user, **profile_data)
     return user
示例#2
0
    def post(self, request, *args, **kwargs):
        email = request.data.get('email', None)
        first_name = request.data.get('first_name', None)
        middle_name = request.data.get('middle_name', None)
        last_name = request.data.get('last_name', None)
        password = request.data.get('password', None)
        name = request.data.get('institution', None)
        logo = request.data.get('logo', None)
        phone_number = request.data.get('phone_number', None)
        domain = request.data.get('domain', None)
        gps = request.data.get('gps', None)

        try:
            User.objects.get(username=email)
            return Response({'detail': 'Email already exist'},
                            status=HTTP_400_BAD_REQUEST)
        except User.DoesNotExist:
            pass

        try:
            School.objects.get(domain=domain)
            return Response(
                {
                    'detail':
                    "There's already a school with this domain registered"
                },
                status=HTTP_400_BAD_REQUEST)
        except School.DoesNotExist:
            pass

        inst_count = School.objects.count()

        inst_count = '{0:04}'.format(inst_count)

        user_count = User.objects.filter(
            school_id=institution_id(name, inst_count)).count()

        user_count = '{0:04}'.format(user_count)

        user = User(
            username=email,
            email=email,
            first_name=first_name,
            middle_name=middle_name,
            last_name=last_name,
            slug="-".join((slugify(first_name), slugify(last_name))),
            user_type='SAD',
            account_id=account_id(name, first_name, last_name, user_count),
            school_id=institution_id(name, inst_count),
        )

        user.set_password(password)

        school = School(
            name=name,
            logo=logo,
            gps_address=gps,
            phone_number=phone_number,
            slug=slugify(name),
            created_by=user,
            domain=domain,
            school_id=institution_id(name, inst_count),
        )

        user.save()
        school.save()

        user = UserSerializer(user, context={'request': request})

        school = SchoolSerializer(school, context={'request': request})

        return Response({
            'user': user.data,
            'institution': school.data
        },
                        status=HTTP_201_CREATED)
示例#3
0
def signup_school(request):

    # ss1 = None

    try:
        ss1 = request.session['ss1']
    except:
        return redirect(reverse_lazy('account:register-user'))

    context = {'errors': '', 'ss1': ss1}

    if request.method == 'POST':
        name = request.POST.get('institution', None)
        logo = request.FILES.get('logo', None)
        phone_number = request.POST.get('phone_number', None)
        domain = request.POST.get('domain', None)
        gps = request.POST.get('gps', None)

        try:
            School.objects.get(domain=domain)
            context[
                'errors'] = "There's already a school with this domain registered"
            return render(request, 'account/signup2.html', context, status=400)
        except School.DoesNotExist:
            pass

        try:
            User.objects.get(username=ss1['email'])
            context['errors'] = "This email has already been registered"
            return render(request, 'account/signup2.html', context)
        except User.DoesNotExist:
            pass

        inst_count = School.objects.count() + 1

        inst_count = '{0:04}'.format(inst_count)

        user_count = User.objects.filter(
            school_id=institution_id(name, inst_count)).count() + 1

        user_count = '{0:04}'.format(user_count)

        user = User(
            username=ss1['email'],
            email=ss1['email'],
            first_name=ss1['first_name'],
            middle_name=ss1['middle_name'],
            last_name=ss1['last_name'],
            slug="-".join(
                (slugify(ss1['first_name']), slugify(ss1['last_name']))),
            user_type='SAD',
            account_id=account_id(name, ss1['first_name'], ss1['last_name'],
                                  user_count),
            school_id=institution_id(name, inst_count),
        )

        user.set_password(ss1['password'])

        school = School(
            name=name,
            logo=logo,
            gps_address=gps,
            phone_number=phone_number,
            slug=slugify(name),
            created_by=user,
            domain=domain,
            school_id=institution_id(name, inst_count),
        )

        user.save()
        school.save()

        request.session['ss1'] = {}

        return redirect('login')

    return render(request, 'account/signup2.html', context)
示例#4
0
def staffs(request):
    staff = Staff.objects.filter(school_id=request.user.school_id)

    head = None
    try:
        head = User.objects.get(user_type='SH', school_id=request.user.school_id)
    except User.DoesNotExist:
        pass

    context = {
        'object_list': staff,
        'head': head,
        'errors': ''
    }

    if request.method == 'POST':
        form = request.POST.get('form')

        if form == 'head':
            fname = request.POST.get('first_name')
            lname = request.POST.get('last_name')
            mname = request.POST.get('middle_name')
            email = request.POST.get('email')

            try:
                User.objects.get(username=email, school_id=request.user.school_id)
                context['errors'] = 'This email already exist'
                return render(request, 'staff/index.html', context)
            except User.DoesNotExist:pass

            uc = User.objects.filter(school_id=request.user.school_id).count() + 1

            uc = '{0:04}'.format(uc)

            inst = School.objects.get(school_id=request.user.school_id)

            user = User(
                username=email,
                email=email,
                first_name=fname,
                middle_name=mname,
                last_name=lname,
                slug="-".join((slugify(fname), slugify(lname))),
                user_type='SH',
                account_id=account_id(inst.name, fname, lname, uc),
                school_id=request.user.school_id
            )

            user.set_password('password')

            mystaff = Staff(
                staff_type='SH',
                first_name=fname,
                middle_name=mname,
                last_name=lname,
                created_by=request.user,
                slug="-".join((slugify(fname), slugify(lname))),
                account_activated=True,
                school_id=request.user.school_id,
            )

            user.save()
            mystaff.save()

            return redirect('staff:list')
        elif form == 'activate':
            staff_id = request.POST.get('staff')

            staff_obj = Staff.objects.get(id=staff_id)
            email = request.POST.get('email')

            try:
                User.objects.get(username=email, school_id=staff_obj.school_id)
                context['errors'] = 'This email already exist'
                return render(request, 'staff/index.html', context)
            except User.DoesNotExist:pass

            uc = User.objects.filter(school_id=request.user.school_id).count() + 1

            uc = '{0:04}'.format(uc)

            inst = School.objects.get(school_id=request.user.school_id)

            user = User(
                username=email,
                email=email,
                first_name=staff_obj.first_name,
                middle_name=staff_obj.middle_name,
                last_name=staff_obj.last_name,
                slug="-".join((slugify(staff_obj.first_name), slugify(staff_obj.last_name))),
                user_type=staff_obj.staff_type,
                account_id=account_id(inst.name, staff_obj.first_name, staff_obj.last_name, uc),
                school_id=request.user.school_id,
                profile=staff_obj.profile
            )

            user.set_password('password')

            staff_obj.account_activated = True

            user.save()

            staff_obj.user = user

            staff_obj.save()

            return redirect('staff:list')

    return render(request, 'staff/index.html', context)