def create(self, validated_data): if (self.context['address_id']): address = validated_data.pop('address') order = Order(**validated_data) order.user = self.context['request'].user order.address = Address.objects.get(id=self.context['address_id']) order.save() else: address = validated_data.pop('address') ad = Address.objects.create(**address) order = Order(**validated_data) order.user = self.context['request'].user order.address = ad order.save() # order_created(order.id) # self.context['request'].session['order_id'] = order.id for cartitem in self.context['cartitems']: if cartitem.quantity < cartitem.item.quantity: OrderItem.objects.create(order=order, item=cartitem.item, quantity=cartitem.quantity) else: raise serializers.ValidationError({'status': 'quantity error'}) order.total = order.get_total_cost() order.save() return order
def create_order(data): order = Order() order.address = data['Address'] order.delivery = load_delivery(data['Dostavka']) #normalized_name = normalize.name(data['Name']) #order.full_name = normalized_name if normalized_name else data["Name"] #order.first_name = get_full_name_part(normalized_name, FIRST_NAME_PART) #order.middle_name = get_full_name_part(normalized_name, MIDDLE_NAME_PART) #order.last_name = get_full_name_part(normalized_name, LAST_NAME_PART) order.first_name = data['name'] order.middle_name = data['name'] order.last_name = data['name'] order.phone = data['Phone'] order.email = data['Email'] order.comment = data.get('Comment', '') order.is_payed = is_payed(data['paymentsystem']) order.payment_system = data['paymentsystem'] order.total = data['payment']['amount'] order.payment_id = data['payment']['orderid'] order.promo_code = data.get('Промокод', '') order.save() order.refresh_from_db() return order
def orderproduct(request): current_user = request.user form = OrderForm(request.POST or None) shopcart = ShopCart.objects.filter(user_id=current_user.id) total = 0 numItems = 0 subtotal = [] for item in shopcart: numItems += 1 total += item.quantity * item.product.price for item in shopcart: subtotal.append(item.quantity * item.product.price) if request.method == 'POST': if form.is_valid(): data = Order() data.first_name = form.cleaned_data['first_name'] data.last_name = form.cleaned_data['last_name'] data.address = form.cleaned_data['address'] data.city = form.cleaned_data['city'] data.email = form.cleaned_data['email'] data.phone = form.cleaned_data['phone'] data.user_id = current_user.id data.total = total data.save() for item in shopcart: detail = OrderDetail() detail.order_id = data.id detail.user_id = current_user.id detail.product_id = item.product_id detail.quantity = item.quantity detail.price = item.product.price detail.total = item.amount detail.save() ShopCart.objects.filter(user_id=current_user.id).delete() messages.success(request, "Thanks for purchases") return HttpResponseRedirect(reverse("orderproduct", args=None)) context = { 'total': total, 'numItems': numItems, 'shopcart': shopcart, 'subtotal': subtotal, 'form': form, } template = "orders/orderproduct.html" return render(request, template, context)
def place_order(request, total=0, quantity=0): current_user = request.user cart_items = CartItem.objects.filter(user=current_user) cart_count = cart_items.count() if cart_count <= 0: return redirect('store') delivery = 2000 for cart_item in cart_items: total += (cart_item.product.price * cart_item.quantity) quantity += cart_item.quantity if total > 50000: delivery = 0 grand_total = delivery + total if request.method == 'POST': form = OrderForm(request.POST) if form.is_valid(): data = Order() data.user = current_user data.first_name = form.cleaned_data['first_name'] data.last_name = form.cleaned_data['last_name'] data.phone = form.cleaned_data['phone'] data.email = form.cleaned_data['email'] data.address = form.cleaned_data['address'] data.country = form.cleaned_data['country'] data.state = form.cleaned_data['state'] data.city = form.cleaned_data['city'] data.order_note = form.cleaned_data['order_note'] data.order_total = grand_total data.delivery = delivery data.ip = request.META.get('REMOTE_ADDR') data.save() yr = int(datetime.date.today().strftime('%Y')) dt = int(datetime.date.today().strftime('%d')) mt = int(datetime.date.today().strftime('%m')) d = datetime.date(yr, mt, dt) current_date = d.strftime('%Y%m%d') order_number = current_date + str(data.id) data.order_number = order_number data.save() # Код без оплаты, оформление заказа order = Order.objects.get(user=request.user, is_ordered=False, order_number=order_number) payment = Payment( user=request.user, payment_id=order.id, payment_method='Оплата курьеру', amount_paid=grand_total, status='В заказе', ) payment.save() order.payment = payment order.is_ordered = True order.save() cart_items = CartItem.objects.filter(user=request.user) for item in cart_items: order_product = OrderProduct() order_product.order_id = order.id order.payment = payment order_product.user_id = request.user.id order_product.size = item.size order_product.product_id = item.product_id order_product.quantity = item.quantity order_product.product_price = item.product.price order_product.ordered = True order_product.save() # уменьшение колличества товара size = Size.objects.get(product=item.product_id, size=item.size) size.stock -= item.quantity size.save() # очистка корзины CartItem.objects.filter(user=request.user).delete() # отправка письма mail_subject = 'Спасибо за покупку!' message = render_to_string('orders/order_received_email.html', { 'user': current_user, 'order': order, }) to_email = request.user.email send_email = EmailMessage(mail_subject, message, to=[to_email]) send_email.send() order_email(order.id) return redirect('order_complete') else: return redirect('checkout')
def check_in(request): cart = Cart(request) template = "check/check_in.html" address_placeholders = dict(ADDRESS_PLACEHOLDERS) if request.method == "POST": form = CheckInForm(request.POST) if form.is_valid(): cd = form.cleaned_data order = Order() order.surname = cd.get("surname") order.name = cd.get("name") order.pay_way = cd.get("pay_way") order.delivery_by = cd.get("delivery_by") order.phone = cd.get("phone") order.email = cd.get("email") order.address = cd.get("address") order.sum = cart.cart.total_sum order.comment = cd.get("user_comment") order.save() for item in cart: OrderItem( order=order, product=item.product, product_name=item.product.name, amount=item.quantity, price=item.unit_price, sum=item.total_price, ).save() # close cart if not can_proceed(order.confirm): raise PermissionDenied order.confirm() order.save() cart.cart.checked_out = True cart.cart.save() # save order data in session order_data = { ORDER_NAME: order.name, ORDER_SURNAME: order.surname, ORDER_PHONE: order.phone, ORDER_EMAIL: order.email, ORDER_ADDRESS: order.address, } request.session[ORDER_DATA] = order_data request.session[ORDER_ID] = order.pk to = reverse("cart-order-preview") if request.is_ajax(): return JsonResponse({"success": True, "location": to}) return redirect(to) else: if request.is_ajax(): errors = dict([(k, force_text(v[0])) for k, v in form.errors.items()]) return JsonResponse({"success": False, "errors": errors}) else: order_data = request.session.get(ORDER_DATA) initial = {} if order_data: initial["surname"] = order_data.get(ORDER_SURNAME) initial["name"] = order_data.get(ORDER_NAME) initial["phone"] = order_data.get(ORDER_PHONE) initial["email"] = order_data.get(ORDER_EMAIL) initial["address"] = order_data.get(ORDER_ADDRESS) if initial: form = CheckInForm(initial=initial) else: form = CheckInForm() ctx = {"cart": cart, "form": form, "address_placeholders": address_placeholders} return render(request, template, ctx)
from urllib.request import urlopen from xml.etree import cElementTree as et from orders.models import Order url = 'http://test.lengow.io/orders-test.xml' dom = et.parse(urlopen(url)) root = dom.getroot() for node in root[1]: order = Order() for element in node: if element.tag =='marketplace' and element.tag != 'None': order.marketplace = element.text if element.tag == 'order_amount' and element.tag != 'None': order.amount = float(element.text) if element.tag == 'order_shipping' and element.tag != 'None': order.shipping = float(element.text) if element.tag == 'billing_address': for child in element: if child.tag == 'billing_address' and child.text != 'None': order.address = child.text if child.tag == 'billing_lastname' and child.text != 'None': order.last_name = child.text if child.tag == 'billing_city' and child.text != 'None': order.city = child.text order.save()