class OrderView(TemplateView): model = Order template_name = "order.html" form = None def get(self, request, *args, **kwargs): self.form = OrderForm() return super(OrderView, self).get(request, *args, **kwargs) def get_context_data(self, **kwargs): context = super(OrderView, self).get_context_data(**kwargs) context["form"] = self.form return context def post(self, request, *args, **kwargs): self.form = OrderForm(request.POST) if self.form.is_valid(): if self.form.cleaned_data["honeypot"] == "": if self.form['qty'] > 0: self.form.save() messages.add_message(request, messages.SUCCESS, "Заказ успешно отправлен.") return redirect("main") else: return super(OrderView, self).get(request, *args, **kwargs)
def show_orderform(context): request = context['request'] if request.method == 'POST': form = OrderForm(request.POST) if form.is_valid(): phone = form.cleaned_data['phone'] email = form.cleaned_data['email'] name = form.cleaned_data['name'] date_execution = form.cleaned_data['date_execution'] address = form.cleaned_data['address'] message = form.cleaned_data['message'] form.save() recipients = ['*****@*****.**'] text_content = 'Имя: {}\n{}\nУдобное время: {}\nТелефон: {}\nПочта: {}\nАдрес: {}'.format( message, date_execution.strftime("%d.%m.%Y %H:%M"), name, phone, email, address) html_content = '<p>Имя: {}</p><p>{}</p><p>Удобное время: {}</p><p>Телефон: {}</p><p>Почта: {}</p><p>Адрес: {}</p>'.format( message, date_execution.strftime("%d.%m.%Y %H:%M"), name, phone, email, address) send_mail(u'Тест', text_content, '*****@*****.**', recipients, fail_silently=True, auth_user=None, auth_password=None, connection=None, html_message=html_content) messages.success(request, 'Поступила новая заявка, номер для связи: ' + phone + ' E-mail: ' + email) form = OrderForm() else: form = OrderForm() return {"form": form}
def order_product(request, pk): ''' Shows order product page ''' product = Product.objects.get(pk=pk) form = OrderForm(initial={'product': product}) form_errors = None if request.method == 'POST': form = OrderForm(request.POST) if form.is_valid(): order = form.save(commit=False) order.product = product order.client = request.user order.save() return redirect('order') return render(request, "product_order.html", { 'form': form, 'form_errors': form_errors, 'product': product, })
def post(self, request, *args, **kwargs): form = OrderForm(request.POST or None) if form.is_valid(): new_order = form.save(commit=False) new_order.first_name = form.cleaned_data['first_name'] new_order.last_name = form.cleaned_data['last_name'] new_order.phone = form.cleaned_data['phone'] new_order.address = form.cleaned_data['first_name'] new_order.buying_type = form.cleaned_data['buying_type'] new_order.order_date = form.cleaned_data['order_date'] new_order.comment = form.cleaned_data['comment'] new_order.save() self.cart.in_order = True new_order.cart = self.cart new_order.save() self.cart.delete() messages.add_message(request, messages.INFO, 'Thank you for your order, but its not actually a shop :(') return HttpResponseRedirect('/') return HttpResponseRedirect('/checkout/')
def register(request): products = Product.objects.filter(active=True) cheapest_product_price = list(products.aggregate(Min('sale_price_int')).values())[0] or 0 half_a_year_ago = datetime.now() - timedelta(days=180) users = User.objects.filter(profile__balance__gte=cheapest_product_price) # sort users after user's last purchase time users = sorted(users, key=lambda u: u.profile.last_purchase_date(), reverse=True) users_js = users_format_js(users) # multiple orderlines (one per product) OrderLineFormSet = formset_factory(OrderLineForm) if request.method == "POST": orderform = OrderForm(request.POST) formset = OrderLineFormSet(request.POST) if formset.is_valid() and orderform.is_valid(): order = orderform.save(commit=False) if order.is_external(): order_sum = sum([ol['amount'] * ol['unit_price_ext'] for ol in formset.cleaned_data]) else: order_sum = sum([ol['amount'] * ol['unit_price_int'] for ol in formset.cleaned_data]) # empty order? if order_sum == 0: messages.error(request, 'Du har ikke valgt hva du skal kjøpe...') return HttpResponseRedirect(reverse('register')) if not order.is_external(): profile = order.customer.profile # can she afford it? if profile.balance < order_sum: messages.error(request, '{0} {1} har ikke råd, mangler {2} kr.'.format( order.customer.first_name, order.customer.last_name, int(order_sum - profile.balance))) return HttpResponseRedirect(reverse('register')) # substract order from balance profile.balance -= order_sum profile.save() order.order_sum = order_sum order.save() orderlines = [] for ol in formset.cleaned_data: if ol['amount'] > 0: product = Product.objects.get(pk=ol['product']) if order.is_external(): unit_price = ol['unit_price_ext'] else: unit_price = ol['unit_price_int'] OrderLine.objects.create( order=order, product=product, amount=ol['amount'], unit_price=unit_price) product.inventory_amount -= ol['amount'] product.save() orderlines.append("{0} {1}".format(ol['amount'], product)) if order.is_external(): messages.success(request, 'Ekstern kjøpte {0}.'.format(", ".join(orderlines))) else: messages.success(request, '{0} {1} kjøpte {2}.'.format( order.customer.first_name, order.customer.last_name, ", ".join(orderlines) )) return redirect('register') else: # TODO specify error(s) messages.error(request, 'Skjemaet er ikke gyldig.') orderform = OrderForm(request.POST) formset = OrderLineFormSet(request.POST) else: orderform = OrderForm() formset = OrderLineFormSet() return render(request, 'register.html', locals())