Ejemplo n.º 1
0
 def save(self, commit=True):
     user = super(RegistrationForm, self).save(commit=False)
     user.username = User.make_unique_username(self.cleaned_data['email'])
     user.set_password(self.cleaned_data['password1'])
     if commit:
         user.save()
     return user
Ejemplo n.º 2
0
def realtors(request):
    title = _(u'Риелторы агентства')
    agency = request.own_agency
    if not agency:
        raise Http404

    # клик по кнопке "Показать статистику"
    if 'show-stats' in request.GET:
        return HttpResponseRedirect(
            reverse('agency_admin:stats') + '?%s' %
            urllib.urlencode({'realtor': request.GET.getlist('realtor')}, True)
        )

    if request.method == 'POST':
        add_form = AddRealtorForm(request.POST, request.FILES, agency=agency)
        if add_form.is_valid():
            with db_transaction.atomic():
                agency_realtor = Realtor.objects.filter(
                    is_admin=True, user=request.user).get()

                try:
                    user = User.objects.get(
                        email__iexact=add_form.cleaned_data['email'])
                except User.DoesNotExist:
                    user = add_form.save(commit=False)
                    user.username = User.make_unique_username(
                        add_form.cleaned_data['email'])
                    password = ''.join(
                        random.choice(string.digits) for i in xrange(8))
                    user.set_password(password)
                    user.save()
                    phone, created = Phone.objects.get_or_create(
                        number=add_form.cleaned_data['phone'])
                    UserPhone(user=user, phone=phone, order=1).save()
                else:
                    password = None

                new_realtor = Realtor(agency=agency_realtor.agency,
                                      user=user,
                                      is_active=False,
                                      confirmation_key=uuid.uuid4().hex)
                new_realtor.save()
                new_realtor.send_mail(password)
                new_realtor.send_message()

            add_form = AddRealtorForm(agency=agency)
            messages.info(
                request,
                _(u'Рилетор добавлен.<br/>Риелтору отправлено личное сообщений с ссылкой для подтверждения'
                  ),
                extra_tags='modal-dialog-w400 modal-success')
            return HttpResponseRedirect(reverse('agency_admin:realtors'))
        else:
            add_form.set_required()

    else:
        add_form = AddRealtorForm(agency=agency)
        add_form.set_required()

    # удаляем неугодных
    if 'delete' in request.GET:
        agency.realtors.filter(pk=request.GET['delete']).delete()

    # риелторы агентства
    realtors = agency.realtors.prefetch_related('user__phones').order_by(
        '-is_admin', 'pk')

    form = RieltorFilterForm(request.GET)
    if form.is_valid():
        if form.cleaned_data['search']:
            q = form.cleaned_data['search']
            search_filter = Q(user__first_name__icontains=q) | Q(
                user__last_name__icontains=q) | Q(user__email__icontains=q)
            realtors = realtors.filter(search_filter)

    paginator = HandyPaginator(realtors, 5, request=request)

    # статистика просмотров и входов
    for i, realtor in enumerate(paginator.current_page.object_list):
        try:
            paginator.current_page.object_list[i].stats = Stat.objects.filter(user=realtor.user).order_by().values('user')\
                .annotate(ad_views=Sum('ad_views'), ad_contacts_views=Sum('ad_contacts_views'), entrances=Sum('entrances'))[0]
        except IndexError:
            paginator.current_page.object_list[i].stats = None

    return render(request, 'agency/realtors.jinja.html', locals())