Exemple #1
0
def cart_item(request, id):
    cart = get_cart(request)
    if request.method == 'GET':
        cart_item = CartItem.objects.get(id=id)
        return Response(data=CartItemSerializer(cart_item,
                                                context={
                                                    'request': request
                                                }).data,
                        status=200)
    elif request.method == 'PATCH':
        cart_item = cart.change_cart_item_amount(id, request.data['quantity'])
        currency = None
        currency_code = request.session.get('current_currency_code')
        if currency_code:
            currency = Currency.objects.get(code=currency_code)
        cart_item_total_price = cart_item.get_price(
            currency, 'total_price_with_discount_with_attributes')
        # cart_item_total_price = cart_item.total_price
        response = {
            "cart_item_total_price": cart_item_total_price,
        }
        response.update(get_cart_info(request))
        return Response(data=response, status=202)
    elif request.method == 'DELETE':
        get_cart(request).remove_cart_item(id)
        response = get_cart_info(request)
        return Response(response, status=200)
Exemple #2
0
def add_favours_to_cart(request):
    favours = FavourItem.objects.filter(cart=get_cart(request))
    for favour in favours:
        cart_item, _ = CartItem.objects.get_or_create(
            cart=get_cart(request),
            item=favour.item,
            ordered=False,
        )
        if _: cart_item.quantity = 1
        if not _: cart_item.quantity += 1
        cart_item.save()
        favour.delete()
    return Response(status=200)
def get_items_in_cart(request, items):
    items_in_cart = []
    for item in items:
        cart = get_cart(request)
        if cart.items.filter(item=item).exists():
            items_in_cart.append(item.id)
    return items_in_cart
Exemple #4
0
    def make_order(self, request):
        cart = get_cart(request)
        self.handle_user(request)
        self.handle_amount(request)

        # self.total_price = cart.total_price
        total_price = cart.get_price(price_type='total_price')
        # total_price = Decimal.from_float(total_price)
        # print("total_price:", total_price)
        # print("total_price:", type(total_price))
        self.total_price = total_price

        self.ordered = True
        self.save()
        cart.order = self
        cart.ordered = True
        cart.save()
        from sw_utils.helpers import get_admin_url
        from django.contrib.sites.models import Site
        site = Site.objects.get_current().domain
        order_admin_url = site + get_admin_url(self)
        cart_items = CartItem.objects.filter(cart=cart)
        context = {
            'cart_items': cart_items,
            'order_admin_url': order_admin_url,
        }
        box_send_mail(
            subject=_(f'Отримано замовлення товарів # {self.id}'),
            template='sw_order/mail.html',
            email_config=OrderRecipientEmail,
            model=self,
            fail_silently=True,
            # fail_silently= False,
            context=context,
        )
Exemple #5
0
 def handle_user(self, request):
     cart = get_cart(request)
     if request.user.is_authenticated:
         self.user = request.user
         self.save()
         cart.user = request.user
         cart.save()
Exemple #6
0
def get_order_liqpay_context(request, params={}):
  cart  = get_cart(request)
  order = Order.objects.get(
    cart=cart,
    ordered=False,
  )
  amount = 0 
  for cart_item in CartItem.objects.filter(cart=cart):
    amount += cart_item.total_price
  order_id = str(order.id)
  # order_id += datetime.now().strftime("%Y-%m-%d %H:%M:%S")
  print(order_id)
  def_params = {
    'amount': amount,
    'description': str(order.comments),
    'order_id': order_id,
    'action': 'pay',
    'currency': 'UAH',
    'version': '3',
    'sandbox': int(LiqpayConfig.get_solo().sandbox_mode), 
    'server_url': f'/sw_order/liqpay_callback/', 
    # 'server_url': f'{Site.objects.get_current()}pay_callback/', 
  }
  def_params.update(params)
  signature, data = get_liqpay_context(def_params)
  context = {
    'signature': signature,
    'data': data,
    'callback_url':'/sw_order/liqpay_callback/',
  }
  return context 
def get_items_in_favours(request, items):
    items_in_favours = []
    for item in items:
        cart = get_cart(request)
        # if cart.favour_items.all().exists():
        if cart.favour_items.filter(item=item).exists():
            items_in_favours.append(item.id)
    return items_in_favours
Exemple #8
0
def favour_item(request, id):
    cart = get_cart(request)
    if request.method == 'GET':
        favour_item = FavourItem.objects.get(id=id)
        response = FavourItemSerializer(favour_item).data
        return Response(response, status=200)
    elif request.method == 'DELETE':
        FavourItem.objects.get(id=id).delete()
        return Response(status=204)
Exemple #9
0
def add_favour_to_cart(request, id):
    favour_item = FavourItem.objects.get(id=id)
    cart_item, _ = CartItem.objects.get_or_create(
        cart=get_cart(request),
        item=favour_item.item,
        ordered=False,
    )
    if _: cart_item.quantity = 1
    if not _: cart_item.quantity += 1
    cart_item.save()
    favour_item.delete()
    return Response(status=202)
Exemple #10
0
def favour_items(request):
    cart = get_cart(request)
    if request.method == 'GET':
        favours = FavourItem.objects.filter(cart=cart)
        response = FavourItemSerializer(favours, many=True).data
        return Response(response, status=200)
    if request.method == 'POST':
        item_id = request.data['item_id']
        favour, _ = FavourItem.objects.get_or_create(
            cart=cart, item=Item.objects.get(id=item_id))
        return Response(status=202)
    if request.method == 'DELETE':
        FavourItem.objects.filter(cart=cart).delete()
        return Response(status=204)
Exemple #11
0
def cart_items(request):
    cart = get_cart(request)
    if request.method == 'GET':
        return Response(data=get_cart_info(request), status=200)
    if request.method == 'POST':
        query = request.data
        quantity = query.get('quantity', 1)
        item_id = query['item_id']
        attributes = query.get('attributes', [])
        if attributes:
            attributes = json.loads(attributes)
        cart.add_item(item_id, quantity, attributes)
        return Response(data=get_cart_info(request), status=203)
    if request.method == 'DELETE':
        cart.clear()
        return Response(data=get_cart_info(request), status=204)
Exemple #12
0
 def make_orderold(self, request):
     cart = get_cart(request)
     self.handle_user(request)
     self.handle_amount(request)
     self.total_price = cart.total_price
     self.ordered = True
     self.save()
     cart.order = self
     cart.ordered = True
     cart.save()
     cart_items = CartItem.objects.filter(cart=cart)
     context = {'cart_items': cart_items}
     box_send_mail(
         subject=_(f'Отримано замовлення товарів # {self.id}'),
         template='sw_order/mail.html',
         email_config=OrderRecipientEmail,
         model=self,
         fail_silently=False,
         context=context,
     )
Exemple #13
0
def order_request(request):
    '''
    покупка в 1 клік
    '''
    query = request.data
    data = query.get('data')
    if data:
        query = json.loads(data)
    name = query.get('name', '---')
    email = query.get('email', '---')
    phone = query.get('phone', '---')
    address = query.get('address', '---')
    comments = query.get('comments', '---')
    attributes = query.get('attributes')
    if attributes:
        attributes = json.loads(attributes)
    item_id = query.get('product_id')
    if not item_id:
        item_id = query.get('item_id')
    payment = _('Покупка в 1 клік')
    delivery = _('Покупка в 1 клік')
    print(query)
    cart = get_cart(request)
    if attributes:
        cart.add_item(item_id=item_id, quantity=1, attributes=attributes)
    else:
        cart.add_item(item_id=item_id, quantity=1)
    order = Order.objects.create(
        name=name,
        email=email,
        phone=phone,
        address=address,
        delivery_opt=delivery,
        payment_opt=payment,
        cart=cart,
    )
    order.make_order(request)
    return JsonResponse({
        'status': 'OK',
        'url': reverse('thank_you'),
    })
Exemple #14
0
def order_items(request):
    """
  замовлення товарів
  """
    query = request.POST or request.GET
    if not query and request.body:
        query = request.body.decode('utf-8')
        query = json.loads(query)
    print("query!!!")
    print(query)
    # print()
    name = query.get('name', "---")
    email = query.get('email', "---")
    phone = query.get('phone', "---")
    address = query.get('address', "---")
    comments = query.get('comments', "---")
    payment_opt = query.get('payment_opt', "---")
    delivery_opt = query.get('delivery_opt', "---")

    order = Order.objects.create(
        name=name,
        email=email,
        phone=phone,
        address=address,
        comments=comments,
        payment_opt=payment_opt,
        delivery_opt=delivery_opt,
    )
    cart = get_cart(request)
    cart.order = order
    cart.save()
    if payment_opt == 'liqpay':
        order.payment_opt = _("З передоплатою")
        order.save()
        url = reverse('payment')
        return JsonResponse({"url": url})
    else:
        order.payment_opt = _("Без предоплати")
        order.make_order(request)
        url = reverse('thank_you')
        return JsonResponse({"url": url})
Exemple #15
0
    def handle_amount(self, request):
        order = self
        cart = get_cart(request)
        # unavailable_stocks = ItemStock.objects.filter(availability=False)
        unavailable_stock = ItemStock.objects.filter(
            availability=False).first()

        for cart_item in CartItem.objects.filter(cart=cart):
            cart_item.ordered = True
            cart_item.order = order
            item = cart_item.item
            if item.amount != None:
                if item.amount < cart_item.quantity:
                    cart_item.quantity = item.amount
                    item.amount = 0
                    # if unavailable_stocks.exists():
                    #   item.in_stock = unavailable_stocks.first()
                    # else:
                    #   item.in_stock = None
                    item.in_stock = unavailable_stock
                else:
                    item.amount -= cart_item.quantity
            item.save()
            cart_item.save()
Exemple #16
0
 def is_in_cart(self, request):
     from sw_cart.utils import get_cart
     return self.id in get_cart(request).items.all().values_list('item__id',
                                                                 flat=True)
Exemple #17
0
def remove_favour_by_like(request, id):
    FavourItem.objects.get(cart=get_cart(request), item__id=id).delete()
    return Response(status=204)
Exemple #18
0
def get_favours_amount(request):
    favours = FavourItem.objects.filter(cart=get_cart(request))
    return HttpResponse(favours.count())
Exemple #19
0
 def wrap(request, *args, **kwargs):
     if not CartItem.objects.filter(cart=get_cart(request)).exists():
         return redirect('/')
     return function(request, *args, **kwargs)
def cart_item_count(request):
    cart = get_cart(request)
    return cart.items.all().count()
Exemple #21
0
def change_item_amount(request, id):
    get_cart(request).change_item_amount(id, request.data['quantity'])
    return Response(get_cart_info(request), status=203)