def logout_user(request): request.session['new_cart'] = None cart = Cart(request) cart.flush() logout(request) return render_to_response('customers/logout.html', context_instance=RequestContext(request))
def cart_flush(request): """ Remove all items from cart and flush session data related to cart. """ cart = Cart(request) cart.flush() create_message(request, _("Cart has been flushed")) return conditional_redirect(request, '/')
def add_to_cart(request, product_id): cart = Cart(request) product_object = get_object_or_404(Product, id=product_id) if request.method == 'POST': forms = QuantityForm(product_id, request.POST) if forms.is_valid(): cd = forms.cleaned_data cart.add(product=product_object, quantity=cd['product_quantity']) return redirect('orders:cart')
def cart_add(request, slug): product = get_object_or_404(Product, slug=slug) quantity = request.GET.get('quantity', False) cart = Cart(request) if quantity: cart.add([product.pk for i in range(0, int(quantity))]) else: cart.add(product) create_message(request, _("Product %s added") % product.name) return conditional_redirect(request, reverse('show_cart'))
def order_submit(request): user = request.user cart = Cart(request) if len(cart) != 0: dandp = DandP(request) delivery = Delivery.objects.get(id=int(dandp.dandp['delivery']) + 1) payment = Payment.objects.get(id=int(dandp.dandp['payment']) + 1) status_delivery = StatusDelivery.objects.get(id=1) status_payment = StatusPayment.objects.get(id=1) order = Order.objects.create(user=user.profile, email=user.email, total_price=cart.get_total_price(), delivery=delivery, status_delivery=status_delivery, payment=payment, status_payment=status_payment, full_name=user.profile.full_name, phone=user.profile.phone, postcode=user.profile.postcode, region=user.profile.region, locality=user.profile.locality, street=user.profile.street, house_nmb=user.profile.house_nmb, apartment_nmb=user.profile.apartment_nmb) for item in cart: product = Product.objects.get(id=item['product_id']) OrderItem.objects.create(order=order, product=product, price=item['price'], quantity=item['quantity'], total_price=item['cost']) product.save() cart.clear() dandp.clear() current_site = get_current_site(request) mail_subject = 'Новый заказ на сайте: ' + current_site.domain message = render_to_string('orders/order_submit_message.html', { 'domain': current_site.domain, 'order': order, }) to_email = MailToString.objects.all().first().email email = EmailMessage(mail_subject, message, to=[to_email]) email.send() context = {} return render(request, 'orders/order_submit.html', context) else: return redirect('cart')
def remove(request): cart = Cart(request) product_id = int(request.GET.get('product_id')) product = Product.objects.get(id=product_id) cart.remove(product) context = { 'cart_len': len(cart), 'total_price': cart.get_total_price(), } return JsonResponse(context)
def add_to_cart(self, request, **kwargs): ADDED = 50 NOT_ADDED = 60 research_slug = request.GET.get('add_to_cart') research = Research.objects.get(slug=research_slug) success_message = '<span class="font-weight-bold">"%s"</span>, по цене <span class="text-nowrap font-weight-bold">%s руб.</span><br />' % ( research.title, research.nominal) cart = SessionCart(request) if cart.add(research): messages.add_message(request, ADDED, success_message) else: messages.add_message(request, NOT_ADDED, 'Исследование уже в корзине')
def cart_quantity(request): """ Change given item's quantity in shopping cart. """ if request.method == 'POST': try: product_slug = request.POST.get('slug', False) quantity = int(request.POST.get('quantity', 1)) if quantity > 0: product = Product.published.get(slug=product_slug) cart = Cart(request) cart.change_quantity(product, quantity) except: pass return conditional_redirect(request, reverse('show_cart'))
def cart_detail(request): """get cart detail""" cart = Cart(request) context = { 'cart': cart, } return render(request, 'orders/cart.html', context)
def contact_info(request): cart = Cart(request) if len(cart) != 0: if request.method == 'POST': dandp = DandP(request) delivery = request.POST.get('delivery') payment = request.POST.get('payment') if delivery == 0: dandp.dandp['delivery'] = 0 if delivery == 1: dandp.dandp['delivery'] = 1 if payment == 0: dandp.dandp['payment'] = 0 if payment == 1: dandp.dandp['payment'] = 1 dandp.update(delivery, payment) else: return redirect('cart') form = OrderForm(request.user) context = { 'form': form, } return render(request, 'orders/contact_info.html', context)
def change_quantity(request): cart = Cart(request) product_id = int(request.GET.get('product_id')) product = Product.objects.get(id=product_id) quantity = int(request.GET.get('quantity')) cart.change_quantity(product=product, quantity=quantity) cost = int(cart.cart[str(product.id)]['cost']) context = { 'cart_len': len(cart), 'total_price': cart.get_total_price(), 'cost': cost, } return JsonResponse(context)
def get_context_data(self, **kwargs): data = super(CartPurchaseView, self).get_context_data(**kwargs) # if self.request.user.is_authenticated: # cart = Cart.objects.get(client__user=self.request.user) # research = cart.items.all() # else: # cart = Cart(self.request) # research = [a.product for a in cart] cart = Cart(self.request) research = cart.cart.cartitem_set.all() FormSet = forms.formset_factory(CartResearchForm, max_num=len(research), min_num=len(research)) formset = FormSet(initial=[{ 'research': x.research, 'duration': x.duration, 'update_frequency': x.update_frequency } for x in research]) try: data['cart'] = kwargs['form'] data['formset'] = zip(kwargs['form'], research) except: data['cart'] = formset data['formset'] = zip(formset, research) finally: return data
def cart_show(request): cart = Cart(request) if request.method == 'POST': payment_shipment = PaymentShipment(request.POST) else: payment = cart.payment shipment = cart.shipment if payment and shipment: payment_shipment = PaymentShipment({ 'payment': payment, 'shipment': shipment }) else: payment_shipment = PaymentShipment() if payment_shipment.is_valid(): valid_payment = payment_shipment.cleaned_data['payment'] valid_shipment = payment_shipment.cleaned_data['shipment'] cart.set_payment(valid_payment) cart.set_shipment(valid_shipment) return render_to_response('orders/show_cart.html', { 'object_list': cart.full_list(), 'payment_shipment': payment_shipment, 'shipment_price': cart.shipment_cost, 'total_cost': cart.total_cost, }, context_instance=RequestContext(request))
def checkout(request): """checkout process""" cart = Cart(request) if request.method == 'POST': form = UserInfoForm(request.POST, instance=request.user.userinfo) if form.is_valid(): form.save() order_total = cart.get_total_price() get_order = Order.objects.create(paid=False, total_price=order_total) get_userinfo = UserInfo.objects.get(user=request.user) get_order.user_info = get_userinfo get_order.save() for item in cart: create_item = OrderItem.objects.create( order=get_order, product=item['product'], price=item['price'], quantity=item['quantity'], ) cart.stock_management(item['product'], item['quantity']) cart.clear() return redirect('home:dashboard') form = UserInfoForm(instance=request.user.userinfo) context = { 'form': form, } return render(request, 'orders/checkout.html', context)
def cart_show(request): cart = Cart(request) if request.method == 'POST': payment_shipment = PaymentShipment(request.POST) else: payment = cart.payment shipment = cart.shipment if payment and shipment: payment_shipment = PaymentShipment({'payment':payment, 'shipment':shipment}) else: payment_shipment = PaymentShipment() if payment_shipment.is_valid(): valid_payment = payment_shipment.cleaned_data['payment'] valid_shipment = payment_shipment.cleaned_data['shipment'] cart.set_payment(valid_payment) cart.set_shipment(valid_shipment) return render_to_response('orders/show_cart.html', { 'object_list': cart.full_list(), 'payment_shipment': payment_shipment, 'shipment_price': cart.shipment_cost, 'total_cost': cart.total_cost, }, context_instance=RequestContext(request))
def post(self, request, *args, **kwargs): cart = Cart(self.request) research = cart.cart.cartitem_set.all() FormSet = forms.formset_factory(CartResearchForm, max_num=len(research)) formset = FormSet(request.POST or None) get_forms = self.get_forms() if formset.is_valid() and self.are_forms_valid(get_forms): self.form_valid(formset) return self.forms_valid(get_forms) elif not self.are_forms_valid(get_forms): return self.forms_invalid(get_forms) else: return self.form_invalid(formset)
def getting_cartinfo(request): cart = Cart(request) cart_len = len(cart) for item in cart.cart.values(): item['cost'] = int(item['cost']) context = { 'cart': cart, 'cart_len': cart_len, } return context
def remove_from_cart(request, product_id): """remove cart item""" cart = Cart(request) product_object = get_object_or_404(Product, id=product_id) if request.method == 'POST': cart.remove(product_object) cart.save_session() return redirect('orders:cart')
def form_valid(self, form): success_message = '<span class="font-weight-bold">"%s"</span>, по цене <span class="text-nowrap font-weight-bold">%s руб.</span><br />' % ( model_instance.research.title, model_instance.price) cart = Cart(self.request) cart_item = form.save(commit=False) cart_item.research = Research.objects.get(slug=self.kwargs['slug']) cart_item.cart = cart cart_item.save() if cart.add(cart_item): messages.add_message(self.request, 50, success_message) else: messages.add_message(self.request, 60, 'Исследование уже в корзине') # if self.request.user.is_authenticated: # cart = Cart.objects.get(client__user=self.request.user) # try: # CartItem.objects.get(research=model_instance.research, cart=cart) # messages.add_message(self.request, 60, 'Исследование уже в корзине') # except: # model_instance.cart = Cart.objects.get(client__user=self.request.user) # model_instance.save() # # messages.add_message(self.request, 50, success_message) # else: # # for item in Cart(self.request): # if item.get_product() in CartItem.objects.filter(research=model_instance.research): # messages.add_message(self.request, 60, 'Исследование уже в корзине') # break # else: # model_instance.save() # cart = Cart(self.request) # cart.add(model_instance, model_instance.price) # messages.add_message(self.request, 50, success_message) return HttpResponseRedirect(self.get_success_url())
def form_valid(self, form): if self.request.user.is_authenticated: client = Client.objects.get(user=self.request.user) Order.objects.create(client=client) else: Order.objects.create() order = Order.objects.latest() for item in form: order_cart = item.save(commit=False) order_cart.order = order order_cart.save() Cart(self.request).clear() return super().form_valid(form)
def product(request, category_slug, subcategory_slug, product_slug): cart = Cart(request) category = get_object_or_404(Category, slug=category_slug) subcategory = get_object_or_404(SubCategory, slug=subcategory_slug) product = get_object_or_404(Product, slug=product_slug, is_active=True) images = get_list_or_404(Image, product=product) cars = Car.objects.filter(products__in=[product]) similar = Product.objects.filter(is_active=True) similar = similar.filter( Q(cars__in=cars) | Q(subcategory=subcategory) | Q(category=category)).distinct() similar = similar.exclude(name=product.name) if len(similar) > 8: similar = similar[:8] if str(product.id) in cart.cart: product_in_cart = True else: product_in_cart = False product_cars = '' for car in cars: product_cars += str(car) + ', ' product_cars = product_cars[:-2] context = { 'category': category, 'subcategory': subcategory, 'product': product, 'images': images, 'product_in_cart': product_in_cart, 'similar': similar, 'product_cars': product_cars, } return render(request, 'shop/product_detail.html', context)
def shopping_cart(request): c = Cart(request) return {'cart': c, 'cdebug': request.session.get('cart_new', 0)}
def remove_from_cart(self, request, **kwargs): research = Research.objects.get(slug=self.request.GET.get('remove_from_cart')) cart = Cart(self.request) cart.remove(research)
def cart_remove(request, slug): product = get_object_or_404(Product, slug=slug) cart = Cart(request) cart.remove(product) return conditional_redirect(request, reverse('show_cart'))
def place_order(request): if request.method == 'POST': cart = Cart(request) discount = CodeValidator(request, cart) prev_orders_count = Order.objects.filter(user=request.user).count() if not cart.is_valid(): return conditional_redirect(request, reverse('show_cart')) customer = request.user.get_profile() if not customer.shipping_address(): create_message(request, _("You haven't chosen shipping address.")) return conditional_redirect(request, reverse('profile_address')) else: return conditional_redirect(request, reverse('show_cart')) if cart.shipping_address is not None: shipping_addr = Address.published.get(pk=cart.shipping_address) else: shipping_addr = request.user.get_profile().shipping_address() #shipping_addr = Address.published.get(customer=request.user.get_profile(), is_shipping=True) if cart.billing_address is not None: billing_addr = Address.published.get(pk=cart.billing_address) else: billing_addr = request.user.get_profile().billing_address() #billing_addr = Address.published.get(Q(customer=request.user.get_profile()), Q(is_billing=True) | Q(is_shipping=True)) now = datetime.datetime.now() try: last_order = Order.objects.filter(user=request.user)[-1] except: last_order = None if last_order: diff = now - last_order.created if diff.seconds <= ORDER_TIME_DELTA: create_message(request, _("Your order has already been filled")) return conditional_redirect(request, '/') new_order = Order(name=str(request.user.email) + "-" + str(prev_orders_count), price=str(cart.total_cost), discount=str(discount.calculated_amount), user=request.user, shipping_price=str(cart.shipment_cost), shipping_address=shipping_addr, billing_address=billing_addr, payment_type=str(cart.payment), shipment_type=cart.shipment, is_gift=False) new_order.save() if discount.partner and discount.partner.is_active: from resellers.utils import log_order log_order(discount.partner, new_order) discount.kill() for item in cart.full_list(): ordered_item = OrderedItem(order=new_order, user=request.user, product=item, price=item.price, quantity=item.cart_quantity, description=item.name) ordered_item.save() payment = cart.payment order_name = str(request.user.email) + "-" + str(prev_orders_count) cart.flush() # email notification subject = "Biolander otrzymał Twoje zamówienie!" #subject = _("New order: %s" % new_order.name) # Email subject *must not* contain newlines subject = ''.join(subject.splitlines()) email_billing = new_order.billing_address email_shipping = new_order.shipping_address message = render_to_string('email/place_order.html', { 'order': new_order, 'billing': email_billing, 'shipping': email_shipping, }) staff_msg = render_to_string('email/admin_new_order.html', { 'order': new_order, 'billing': email_billing, 'shipping': email_shipping, }) from django.conf import settings send_mail(subject, message, settings.DEFAULT_FROM_EMAIL, [new_order.user.email]) send_mail('Nowe zamówienie: %s' % new_order.name, staff_msg, settings.DEFAULT_FROM_EMAIL, settings.SHOP_STAFF_EMAILS) # has to be here to avoid circular dependencies from orders.dotpay import ProcessPayment payment = ProcessPayment(request, new_order) return payment.process()
def checkout(request): cart = Cart(request) discount = CodeValidator(request, cart) if not cart.is_valid(): return conditional_redirect(request, reverse('show_cart')) if request.method == 'POST': try: if request.POST['type'] == 'billing': cart.billing_address = request.POST['address'] cart.refresh() elif request.POST['type'] == 'shipping': cart.shipping_address = request.POST['address'] cart.refresh() except: pass if cart.shipping_address is not None: shipping_addr = Address.published.get(pk=cart.shipping_address) if shipping_addr.customer != request.user.get_profile(): cart.flush() return conditional_redirect(request, '/') else: shipping_addr = request.user.get_profile().shipping_address() #shipping_addr = Address.published.get(customer=request.user.get_profile(), is_shipping=True) if cart.billing_address is not None: billing_addr = Address.published.get(pk=cart.billing_address) if billing_addr.customer != request.user.get_profile(): cart.flush() return conditional_redirect(request, '/') else: billing_addr = request.user.get_profile().billing_address() #billing_addr = Address.published.get(Q(customer=request.user.get_profile()), Q(is_billing=True) | Q(is_shipping=True)) return render_to_response('orders/checkout.html', { 'object_list': cart.full_list(), 'shipping_address': shipping_addr, 'billing_address': billing_addr, 'discount': discount, }, context_instance=RequestContext(request))
def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) context['cart'] = Cart(self.request) context['date_order'] = Order.objects.all().last() return context
def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) context['cart'] = Cart(self.request) return context
def cart(request): return {'cart': Cart(request)}
def place_order(request): if request.method == 'POST': cart = Cart(request) discount = CodeValidator(request, cart) prev_orders_count = Order.objects.filter(user=request.user).count() if not cart.is_valid(): return conditional_redirect(request, reverse('show_cart')) customer = request.user.get_profile() if not customer.shipping_address(): create_message(request, _("You haven't chosen shipping address.")) return conditional_redirect(request, reverse('profile_address')) else: return conditional_redirect(request, reverse('show_cart')) if cart.shipping_address is not None: shipping_addr = Address.published.get(pk=cart.shipping_address) else: shipping_addr = request.user.get_profile().shipping_address() #shipping_addr = Address.published.get(customer=request.user.get_profile(), is_shipping=True) if cart.billing_address is not None: billing_addr = Address.published.get(pk=cart.billing_address) else: billing_addr = request.user.get_profile().billing_address() #billing_addr = Address.published.get(Q(customer=request.user.get_profile()), Q(is_billing=True) | Q(is_shipping=True)) now = datetime.datetime.now() try: last_order = Order.objects.filter(user=request.user)[-1] except: last_order = None if last_order: diff = now - last_order.created if diff.seconds <= ORDER_TIME_DELTA: create_message(request, _("Your order has already been filled")) return conditional_redirect(request, '/') new_order = Order(name = str(request.user.email)+"-"+str(prev_orders_count), price = str(cart.total_cost), discount = str(discount.calculated_amount), user=request.user, shipping_price = str(cart.shipment_cost), shipping_address=shipping_addr, billing_address=billing_addr, payment_type=str(cart.payment), shipment_type=cart.shipment, is_gift = False) new_order.save() if discount.partner and discount.partner.is_active: from resellers.utils import log_order log_order(discount.partner, new_order) discount.kill() for item in cart.full_list(): ordered_item = OrderedItem(order=new_order, user=request.user, product=item, price=item.price, quantity=item.cart_quantity, description=item.name) ordered_item.save() payment = cart.payment order_name = str(request.user.email)+"-"+str(prev_orders_count) cart.flush() # email notification subject = "Biolander otrzymał Twoje zamówienie!" #subject = _("New order: %s" % new_order.name) # Email subject *must not* contain newlines subject = ''.join(subject.splitlines()) email_billing = new_order.billing_address email_shipping = new_order.shipping_address message = render_to_string('email/place_order.html', { 'order': new_order, 'billing': email_billing, 'shipping': email_shipping, }) staff_msg = render_to_string('email/admin_new_order.html', { 'order': new_order, 'billing': email_billing, 'shipping': email_shipping, }) from django.conf import settings send_mail(subject, message, settings.DEFAULT_FROM_EMAIL, [new_order.user.email]) send_mail('Nowe zamówienie: %s' % new_order.name, staff_msg, settings.DEFAULT_FROM_EMAIL, settings.SHOP_STAFF_EMAILS) # has to be here to avoid circular dependencies from orders.dotpay import ProcessPayment payment = ProcessPayment(request, new_order) return payment.process()