Example #1
0
def user_login(request):
    [categories, suppliers, objectives, products_rec, offers] = list()
    if request.method == 'POST':
        form = LoginForm(request.POST)
        if form.is_valid():
            cd = form.cleaned_data
            user = authenticate(request,
                                username=cd['username'],
                                password=cd['password'])
            if user:
                if user.is_active:
                    login(request, user)
                    return redirect('cart:cart_detail')
                else:
                    messages.error(request, 'Аккаунт неактивен!')
                    context = locals()
                    template = 'account/login.html'
                    return render(request, template, context)
            else:
                messages.error(request, 'Неверные логин или пароль')
                context = locals()
                template = 'account/login.html'
                return render(request, template, context)
    else:
        form = LoginForm()
    context = locals()
    template = 'account/login.html'
    return render(request, template, context)
Example #2
0
def register(request):
    [categories, suppliers, objectives, products_rec, offers] = list()
    if request.method == 'POST':
        user_form = UserRegistrationForm(request.POST)
        profile_form = UserProfileForm(request.POST)
        if user_form.is_valid():
            new_user = user_form.save(commit=False)
            new_user.set_password(user_form.cleaned_data['password'])
            email = user_form.cleaned_data["email"]
            # проверка на наличие email в базе. Уникальное значение в базе не удалось проставить
            if User.objects.filter(email=email).count() > 0 and email:
                messages.error(request,
                               'Пользовать с указанным email уже существует')
                context = locals()
                template = 'account/register.html'
                return render(request, template, context)
            else:
                new_user.save()
                login(request,
                      new_user,
                      backend='django.contrib.auth.backends.ModelBackend')
                messages.success(request,
                                 'Спасибо за регистрацию на нашем сайте!')
                context = locals()
                return redirect('cart:cart_detail')
    else:
        user_form = UserRegistrationForm()
    context = locals()
    template = 'account/register.html'
    return render(request, template, context)
Example #3
0
def deny(request, order_id):
    [categories, suppliers, objectives, products_rec, offers] = list()
    order = Order.published.get(id=order_id)
    username = request.user.username
    template = 'orders/order/deny.html'
    context = locals()
    return render(request, template, context)
Example #4
0
def order_list(request, pk):
    [categories, suppliers, objectives, products_rec, offers] = list()
    order = Order.published.get(id=pk)
    items = order.items.all()
    template = 'orders/order/list.html'
    context = locals()
    return render(request, template, context)
Example #5
0
def denied(request, order_id):
    [categories, suppliers, objectives, products_rec, offers] = list()
    order = Order.published.get(id=order_id)
    order.status = 'Отказ'
    order.save()
    subject = 'Отмена заказа'
    sender = '*****@*****.**'
    message = 'Отмена заказа!\n\n Номер заказа:{}\n Перейти в админку для просмотра заказа: {}' \
        .format(order.id, 'https://mrpit.online/admin/orders/order')
    send_mail(subject, message, sender,
              ['*****@*****.**', '*****@*****.**'])
    template = 'orders/order/deny_submit.html'
    context = locals()
    return render(request, template, context)
Example #6
0
def profile(request):
    [categories, suppliers, objectives, products_rec, offers] = list()
    orders = Order.published.filter(client=request.user)
    # Если юзер авторизован, то находим его профиль иначе редиректим на форму входа на сайт
    if request.user.is_authenticated:
        profile = Profile.published.get(user=request.user)
    else:
        return redirect('login')

    # блок для редактирования профиля
    if request.method == 'POST':
        user_form = UserProfileForm(request.POST, instance=profile)
        if user_form.is_valid():
            user_form.save()
            messages.success(request, 'Профиль успешно изменён')
    else:
        user_form = UserProfileForm(instance=profile)
    context = locals()
    template = 'account/profile.html'
    return render(request, template, context)
Example #7
0
def user_logout(request):
    [categories, suppliers, objectives, products_rec, offers] = list()
    logout(request)
    context = locals()
    template = 'account/logged_out.html'
    return render(request, template, context)
Example #8
0
def order_create(request):
    [categories, suppliers, objectives, products_rec, offers] = list()
    cart = Cart(request)
    if not cart:
        messages.error(request, "Корзина пуста!")
        return redirect('cart:cart_detail')
    profile = Profile.published.get(user=request.user)
    data = {
        'first_name': profile.first_name,
        'last_name': profile.last_name,
        'email': profile.email,
        'address': profile.address,
        'city': profile.city,
        'postal_code': profile.postal_code,
        'phone': profile.phone
    }
    postal_code = ''
    if request.method == 'POST':
        if 'form' in request.POST:
            form = OrderCreateForm(request.POST, initial=data)
            order = form.save(commit=False)
        else:
            perm_form = PermOrderCreateForm(request.POST, initial=data)
            order = perm_form.save(commit=False)
        if cart.coupon:
            order.coupon = cart.coupon
            order.discount = cart.coupon.discount

        order.client = request.user
        order.status = 'Новый'
        order.save()
        # Высчитываем массу и создаём объекты заказа в функции calc_order_total_mass
        order.total_mass = calc_order_total_mass(cart, order)
        cart.clear()
        # Пробуем получить стоимость доставки по API почты России.
        try:
            # если Пермь, то по дефолту будет стоить 200р. Если другой  населенный пункт,
            # то пробуем рассчитать через API почты
            if order.city != 'Пермь':
                order.deliver_cost = russian_post_calc(
                    postal_code=order.postal_code, mass=order.total_mass)
        except:
            try:
                # если пользователь ввёл неверный индекс, то пробуем посчитать доставку до белгорода
                order.deliver_cost = russian_post_calc(postal_code='308000',
                                                       mass=order.total_mass)
            except:
                # если пользователь ввёл неверный индекс и API почты не работает, то ставим среднюю доставку 350 р
                order.deliver_cost = 350
        order.save()
        messages.success(request, 'Заказ успешно создан.')
        messages.success(request, 'Оплатить заказ можно по форме ниже.')

        # Отправка письма администрации
        subject = 'Новый заказ'
        sender = '*****@*****.**'
        message = 'Новый заказ!<br> Номер заказа:{}<br> Город: {}<br>' \
                  'Перейти в <a href="https://mrpit.online/admin/orders/order">Админку</a> для просмотра заказа. ' \
            .format(order.id, order.city)
        mail_admin = EmailMessage(subject, message, sender,
                                  ['*****@*****.**', '*****@*****.**'])
        mail_admin.content_subtype = "html"
        mail_admin.send()
        # Отправка письма Клиенту
        client_subject = 'Заказ с сайта MrPit.Online'
        mail_from = '*****@*****.**'
        mail_to = [order.email]
        сlient_message = 'Спасибо за Ваш заказ!<br>Номер заказа:{}<br>' \
                         'Стоимость заказа:{} р., Стоимость доставки:{} р.' \
                         'Масса посылки с учетом упаковки:{} гр.<br>' \
                         'Оплатить заказ Вы можете на сайте в ' \
                         '<a href="https://mrpit.online/account">Личном Кабинете</a><br>' \
                         'После оплаты заказа мы начнём сборку. ' \
                         'Статус заказа Вы можете отслеживать также в личном кабинете.<br><br>' \
                         'Наши соцсети ждут именно Вас:<br>' \
                         '<a href="https://vk.com/mrpit.online">Вконтакте</a><br>' \
                         '<a href="https://instagram.com/mrpit.online">Instagram</a>' \
            .format(order.id, order.get_total_cost(), order.deliver_cost, order.total_mass)
        mail = EmailMessage(client_subject, сlient_message, mail_from, mail_to)
        mail.content_subtype = "html"
        mail.send()
        username = request.user.username
        # перенаправляем пользователя в личный кабинет, где он сможет оплатить заказ
        return redirect('profile')
    else:
        form = OrderCreateForm(initial=data)
        perm_form = PermOrderCreateForm(initial=data)
    template = 'orders/order/create.html'
    context = locals()
    return render(request, template, context)