예제 #1
0
def product_detail(request, category_slug, slug):
    """
    Return details about a specific product according to a request
    Params:
        - category_slug:[String] A specific ID-like string for a specific category
        - slug: [String]  A specific ID-like string for a specific product
    Return:
        -[Render]: Return a product_detail.html containing information about a specific product
    """

    product = get_object_or_404(Product, slug=slug)
    product.num_visits += 1
    product.last_visit = datetime.now()
    product.save()

    # Add review
    if request.method == 'POST' and request.user.is_authenticated:
        stars = request.POST.get('stars', 3)
        content = request.POST.get('content', '')

        review = ProductReview.objects.create(product=product,
                                              user=request.user,
                                              stars=stars,
                                              content=content)

        return redirect('product_detail',
                        category_slug=category_slug,
                        slug=slug)
    #

    related_products = list(
        product.category.products.all().exclude(id=product.id))
    if (len(related_products) >= 3):
        related_products = random.sample(related_products, 3)

    imagesstring = "{'thumbnail': '%s', 'image': '%s'}," % (
        product.thumbnail.url, product.image.url)

    # for image in product.images.all():
    # imagesstring += ("{'thumbnail': '%s', 'image': '%s'}," %(image.thumbnail.url, image.image.url))

    cart = Cart(request)
    if cart.has_product(product.id):
        product.in_cart = True
    else:
        product.in_cart = False

    owned_stores = utils.get_owned_stores(request)

    product_form = EditProductForm(instance=product, stores=owned_stores)

    context = {
        'product': product,
        'imagesstring': imagesstring,
        'related_products': related_products,
        'owned_stores': owned_stores,
        'product_form': product_form,
    }

    return render(request, 'product_detail.html', context)
예제 #2
0
def order_create(request):
    cart = Cart(request)
    if request.method == 'POST':
        form = OrderCreateForm(request.POST)
        if form.is_valid():
            order = form.save(commit=False)
            if cart.coupon:
                order.coupon = cart.coupon
                order.discount = cart.coupon.discount
            order.paid = True
            order.save()
            for item in cart:
                OrderItem.objects.create(order=order, product=item['product'], price=item['price'], quantity=item['quantity'])
                #clear the cart
                cart.clear()
                template = 'orders/order/created.html'
                context = {
                    'order': order,
                }
                # Lauch asynchronous task
                # order_created.delay(order.id)
                return render(request, template, context)
    else:
        form = OrderCreateForm()
    template = 'orders/order/create.html'
    context = {
        'cart': cart,
        'form': form,
    }
    return render(request, template, context)
예제 #3
0
def api_checkout(request):
    cart = Cart(request)

    data = json.loads(request.body)
    json_response = {'success': True}
    first_name = data['first_name']
    last_name = data['last_name']
    email = data['email']
    address = data['address']
    zipcode = data['zipcode']
    city = data['city']
    country = data['country']

    orderid = checkout(request, first_name, last_name, email, address, zipcode,
                       city, country)

    paid = True  # Update payment if Stripe gets a response back

    if paid:
        order = Order.objects.get(pk=orderid)
        order.paid = True
        order.paid_amount = cart.get_total_cost()
        order.save()

        cart.clear()  # When order is complete and paid clear the cart

    return JsonResponse(json_response)
예제 #4
0
def product_detail(request, category_slug, slug):
    product = get_object_or_404(Product, slug=slug)

    related_products = list(
        product.category.products.filter(parent=None).exclude(id=product.id))

    if len(related_products) >= 50:
        related_products = random.sample(related_products, 50)

    if product.parent:
        return redirect('product_detail',
                        category_slug=category_slug,
                        slug=product.parent.slug)

    imagesstring = "{'thumbnail': '%s', 'image': '%s'}," % (
        product.thumbnail.url, product.image.url)

    for image in product.images.all():
        imagesstring = imagesstring + ("{'thumbnail': '%s', 'image': '%s'}," %
                                       (image.thumbnail.url, image.image.url))

    cart = Cart(request)

    if cart.has_product(product.id):
        product.in_cart = True
    else:
        product.in_cart = False

    context = {
        'product': product,
        'imagesstring': imagesstring,
        'related_products': related_products
    }

    return render(request, 'product_detail.html', context)
예제 #5
0
def mi_carrito_pago(request):
    print("ENTRO")
    profile = request.user.userprofile
    data = {'status': 'error'}
    cart = Cart(request)
    # Suma para el precio final
    _subtotal = cart.summary()
    info_general = InformacionGeneral.objects.get(pk=1)
    taxi = info_general.taxi
    if taxi:
        total = _subtotal + taxi
    else:
        total = _subtotal
    """ Bloque para pago """
    # Consultamos al numero de pedido
    if request.method == 'POST':
        print("Soy POST")
        form = PedidoForm(request.POST)
        if form.is_valid():
            pedido = form.save(commit=False)
            pedido.cart = cart.cart
            pedido.usuario = profile
            pedido.numero_pedido = get_next_codigo_pedido()
            pedido.precio_total = total
            del request.session['CART-ID']
            del request.session['numero_pedido']
            profile.cart = None
            profile.save()
            pedido.save()
        else:
            print(form.errors, "<- errores!!!")
    else:
        print("NO SOY  POST")
    return JsonResponse(data)
예제 #6
0
def product_detail(request, category_slug, slug):
    product = get_object_or_404(Product, slug=slug)

    if product.parent:
        return redirect('product_detail',
                        category_slug=category_slug,
                        slug=product.parent.slug)

    imagesstring = "{'thumbnail': '%s', 'image': '%s'}," % (
        product.thumbnail.url, product.image.url)

    for image in product.images.all():
        imagesstring = imagesstring + ("{'thumbnail': '%s', 'image': '%s'}," %
                                       (image.thumbnail.url, image.image.url))

    cart = Cart(request)

    if cart.has_product(product.id):
        product.in_cart = True
    else:
        product.in_cart = False

    context = {'product': product, 'imagesstring': imagesstring}

    return render(request, 'product_detail.html', context)
예제 #7
0
def api_checkout(request):

    cart = Cart(request)

    data = json.loads(request.body)
    jsonresponse = {'success': True}
    first_name = data['first_name']
    last_name = data['last_name']
    email = data['email']
    city = data['city']
    address = data['address']
    phone = data['phone']
    orderid = checkout(request, first_name, last_name, email, city, address,
                       phone)

    cod = True

    if cod:
        order = Order.objects.get(pk=orderid)
        order.cod = True
        order.amount_to_be_paid = cart.get_total_cost()
        order.save()
        html = render_to_string('core/email_confirmation.html')
        send_mail('Order Confirmation',
                  'Your order has been sent',
                  '*****@*****.**', ['*****@*****.**', order.email],
                  fail_silently=True,
                  html_message=html)
        cart.clear()

    return JsonResponse(jsonresponse)
예제 #8
0
def api_checkout(request):
    cart = Cart(request)
    data = json.loads(request.body)
    jsonresponse = {'success': True}
    first_name = data['first_name']
    last_name = data['last_name']
    email = data['email']
    address = data['address']
    zipcode = data['zipcode']
    place = data['place']

    orderid = checkout(request, first_name, last_name, email, address, zipcode,
                       place)

    paid = True

    if paid == True:
        order = Order.objects.get(pk=orderid)
        order.paid = True
        order.paid_amount = cart.get_total_cost()
        order.save()

        cart.clear()

    return JsonResponse(jsonresponse)
예제 #9
0
def order_create(request):
    cart = Cart(request)
    if request.method == 'POST':
        form = OrderCreateForm(request.POST)
        if form.is_valid():
            order = form.save(commit=False)

            if cart.coupon:
                order.coupon = cart.coupon
                order.discount = cart.coupon.discount
            order.save()

            for item in cart:
                OrderItem.objects.create(order=order,
                                         product=item['product'],
                                         price=item['price'],
                                         quantity=item['quantity'])
            # clear the cart
            cart.clear()
            # launch asynchronous task
            order_created.delay(order.id)
            # set the order in the session
            request.session['order_id'] = order.id
            # redirect for payment
            return redirect(reverse('payment:process'))
    else:
        form = OrderCreateForm()
    return render(request, 'orders/order/create.html', {
        'cart': cart,
        'form': form
    })
예제 #10
0
def api_checkout(request):
    cart = Cart(request)

    data = json.loads(request.body)
    jsonresponse = {"success": True}
    first_name = data["first_name"]
    last_name = data["last_name"]
    email = data["email"]
    address = data["address"]
    zipcode = data["zipcode"]
    place = data["place"]

    orderid = checkout(request, first_name, last_name, email, address, zipcode,
                       place)

    paid = True

    if paid == True:
        order = Order.objects.get(pk=orderid)
        order.paid = True
        order.paid_amount = cart.get_total_cost()
        order.save()

        cart.clear()

    return JsonResponse(jsonresponse)
예제 #11
0
def order_create(request):
    cart = Cart(request)
    if request.method == 'POST':
        form = OrderCreateForm(request.POST)
        if form.is_valid():
            order = form.save()
            for item in cart:
                OrderItem.objects.create(order=order,
                                         product=item['product'],
                                         price=item['price'],
                                         quantity=item['quantity'])
            # очистка корзины
            cart.clear()
            order_created(order.id)
            request.session['order_id'] = order.id
            # redirect to the payment
            return redirect('payment:process')
        #  return render(request, 'orders/order/created.html',
        #              {'order': order})
    else:
        form = OrderCreateForm
    return render(request, 'orders/order/create.html', {
        'cart': cart,
        'form': form
    })
예제 #12
0
def product(request, category_slug, product_slug):
    cart = Cart(request)

    product = get_object_or_404(Product,
                                category__slug=category_slug,
                                slug=product_slug)

    if request.method == 'POST':
        form = AddToCartForm(request.POST)

        if form.is_valid():
            quantity = form.cleaned_data['quantity']

            cart.add(product_id=product.id,
                     quantity=quantity,
                     update_quantity=False)

            messages.success(request, 'The product was added to the cart')

            return redirect('product',
                            category_slug=category_slug,
                            product_slug=product_slug)
    else:
        form = AddToCartForm()

    similar_products = list(product.category.products.exclude(id=product.id))

    if len(similar_products) >= 4:
        similar_products = random.sample(similar_products, 4)

    return render(request, 'product/product.html', {
        'form': form,
        'product': product,
        'similar_products': similar_products
    })
예제 #13
0
def order_create(request):
    cart = Cart(request)
    if not request.user.is_authenticated:
        return redirect('cuenta:dashboard')
    if request.method == 'POST':
        form = OrderCreateForm(request.POST)
        if form.is_valid():
            order = form.save(commit=False)
            order.usuario = request.user
            order.pagado = False
            order.creado = datetime.datetime.now()
            order.actualizado = datetime.datetime.now()
            order.save()
            productos_comp = []
            for item in cart:
                OrderItem.objects.create(orden=order,producto=item['product'],precio=item['price'],
                    cantidad=item['quantity'])
                productos_comp.append(item['product'])
            if settings.USE_REDIS:
                r = Recommender()
                r.producto_comprados(productos_comp)

            # clear the cart
            send_mail(
                'Se ha producido una venta',
                'Un cliente ha comprado algo en la web podes modificarla aca {0}orders/admin/order/{1}/pdf/'.format(
                    settings.BASE_URL, order.id
                ),
                '*****@*****.**',
                settings.VENTAS,
                fail_silently=False,
            )
            cart.clear()
            return render(request,'orders/order/creado.html',{'order': order})
        else:
            messages.warning(request, 'Debe corregir los datos para poder finalizar la compra.')
    else:
        ultimacompra = None
        try:
            ultimacompra = Order.objects.filter(usuario=request.user).order_by('-creado')
        except:
            pass
        if ultimacompra:
            print("Ultima compra: {}".format(ultimacompra[0]))
            form = OrderCreateForm(initial={'nombre':ultimacompra[0].nombre if ultimacompra[0].nombre else '',
                                            'apellido':ultimacompra[0].apellido if ultimacompra[0].apellido else '',
                                            'email':ultimacompra[0].email if ultimacompra[0].email else '',
                                            'direccion':ultimacompra[0].direccion,
                                            'telefono':ultimacompra[0].telefono,
                                            'codigopostal':ultimacompra[0].codigopostal,
                                            'ciudad':ultimacompra[0].ciudad})
        else:
            print("No hay compra registrada")
            form = OrderCreateForm(initial={
                'nombre':'',
                'apellido':'',
                'email':''
            })
    return render(request,'orders/order/crear.html',{'cart': cart, 'form': form})
예제 #14
0
def api_remove_from_cart(request):
    data = json.loads(request.body)
    jsonresponse = {'success': True}
    product_id = str(data['product_id'])

    cart = Cart(request)
    cart.remove(product_id)
    return JsonResponse(jsonresponse)
예제 #15
0
def remove_from_cart(request):
    print('VIEW: remove_from_cart')
    curso_id = request.POST.get('product_id')
    curso_id = int(curso_id)
    curso = get_object_or_404(Curso, id=curso_id)
    cart = Cart(request)
    cart.remove(curso)
    return redirect(reverse('pedidos:mi_carrito'))
예제 #16
0
def ajax_add_cart_item_by_sku(request):
    size = Size.objects.get(sku=settings.BIEN_SLUG_MAG_001)
    product = Item.objects.get(available_sizes__id=size.id)

    cart = Cart(request)
    cart.add(product, size.price)

    return JsonResponse({'success': True, 'template': "New size %d" % cart.count()})
예제 #17
0
def api_remove_from_cart(request):
    data = json.loads(request.body)
    json_response = {'success': True}
    product_id = str(
        data['product_id'])  # Cast as string or throws an error in console

    cart = Cart(request)  # Update cart to above values
    cart.remove(product_id)  # Remove the product from the cart

    return JsonResponse(json_response)
예제 #18
0
파일: views.py 프로젝트: linky-sky/shopsys
def cart_add(request, product_id):
    cart = Cart(request)
    product = get_object_or_404(Product, id=product_id)
    form = CartAddProductForm(request.POST)
    if form.is_valid():
        cd = form.cleaned_data
        cart.add(product=product,
                 quantity=cd['quantity'],
                 update_quantity=cd['update'])
    return redirect('cart:cart_detail')
예제 #19
0
def product_detail(request, category_slug, slug):
    product = get_object_or_404(Product, slug=slug)
    product.num_visits = product.num_visits + 1
    product.last_visit = datetime.now()
    product.save()

    # Add review

    if request.method == 'POST' and request.user.is_authenticated:
        stars = request.POST.get('stars', 3)
        content = request.POST.get('content', '')

        review = ProductReview.objects.create(product=product,
                                              user=request.user,
                                              stars=stars,
                                              content=content)

        return redirect('product_detail',
                        category_slug=category_slug,
                        slug=slug)

    #

    related_products = list(
        product.category.products.filter(parent=None).exclude(id=product.id))

    if len(related_products) >= 3:
        related_products = random.sample(related_products, 3)

    if product.parent:
        return redirect('product_detail',
                        category_slug=category_slug,
                        slug=product.parent.slug)

    imagesstring = "{'thumbnail': '%s', 'image': '%s'}," % (
        product.thumbnail.url, product.image.url)

    for image in product.images.all():
        imagesstring = imagesstring + ("{'thumbnail': '%s', 'image': '%s'}," %
                                       (image.thumbnail.url, image.image.url))

    cart = Cart(request)

    if cart.has_product(product.id):
        product.in_cart = True
    else:
        product.in_cart = False

    context = {
        'product': product,
        'imagesstring': imagesstring,
        'related_products': related_products
    }

    return render(request, 'product_detail.html', context)
예제 #20
0
def checkout(request):
    cart = Cart(request)
    total_cost = cart.get_total_cost()
    if request.method == "POST":
        form = CheckOutForm
        if form.is_valid():
            Cart(request).clear()
            return redirect('successpage')

    form = CheckOutForm
    return render(request, 'checkout.html', {'cost': total_cost, 'form': form})
예제 #21
0
def ajax_validation_magazine_order_form(request, product_id):
    product = get_object_or_404(Product, id=product_id)
    order_form = ProductOrderingForm(data=request.POST, instance=product)

    if order_form.is_valid():
        cart = Cart(request)
        cart.add(product,
                 product.available_sizes().first().price,
                 order_form.cleaned_data['amount'])
        return JsonResponse({'success': True})

    return JsonResponse(order_form.errors.as_json(), status=400, safe=False)
예제 #22
0
def ajax_update_cart_item(request):
    cart = Cart(request)
    product = Item.objects.get(id=request.POST.get('item_product'))
    cart.update(product, request.POST.get('item_quantity'), product.available_sizes.first().price,
                request.POST.get('item_size'))

    template = render_to_string('cart/cart_item_container.html', {
        'cart': cart,
        'config': config
    })

    return JsonResponse({'success': True, 'template': template})
예제 #23
0
def ajax_validation_order_form(request, product_id):
    item = get_object_or_404(Item, id=product_id)

    order_form = ProductOrderingForm(data=request.POST, instance=item)

    if order_form.is_valid():
        cart = Cart(request)

        size = order_form.cleaned_data.get('available_sizes', None)
        cart.add(item, size.price, order_form.cleaned_data['amount'], size)
        success_url = reverse('products:get_cart')
        return JsonResponse({'success': True, 'success_url': success_url})
    return JsonResponse(order_form.errors.as_json(), status=400, safe=False)
예제 #24
0
파일: api.py 프로젝트: omarouhra/techStore
def create_checkout_session(request):
    cart = Cart(request)
    stripe.api_key = settings.STRIPE_API_KEY_HIDDEN

    items = []

    for item in cart:
        product = item['product']

        obj = {
            'price_data': {
                'currency': 'usd',
                'product_data': {
                    'name': product.title
                },
                'unit_amount': int(product.price * 100)
            },
            'quantity': item['quantity']
        }

        items.append(obj)
    session = stripe.checkout.Session.create(
        payment_method_types=['card'],
        line_items=items,
        mode='payment',
        success_url='http://127.0.0.1:8000/cart/success/',
        cancel_url='http://127.0.0.1:8000/cart/',
    )

    data = json.loads(request.body)
    first_name = data['first_name']
    last_name = data['last_name']
    email = data['email']
    address = data['address']
    zipcode = data['zipcode']
    place = data['place']
    phone = data['phone']
    payment_intent = session.payment_intent
    orderid = checkoutCreate(request, first_name, last_name, email, address,
                             zipcode, place, phone)

    order = Order.objects.get(pk=orderid)
    order.payment_intent = payment_intent
    order.paid = True
    order.paid_amount = cart.get_total_cost()

    order.save()

    print(items)

    return JsonResponse({'session': session})
예제 #25
0
def ajax_remove_item(request, item_id):
    cart = Cart(request)
    product = Item.objects.get(id=item_id)
    cart.remove(product, request.GET.get('item_size'))
    if cart.count():
        template = render_to_string('cart/cart_item_container.html', {
            'cart': cart,
            'config': config
        })
    else:
        template = render_to_string('cart/empty.html', {
        })

    return JsonResponse({'success': True, 'template': template})
예제 #26
0
def checkout(request, first_name, last_name, email, address, zipcode, place, phone):
    """
    Params:
        -first_name:[String] Customer's first name
        -last_name:[String] Customer's last name
        -email:[String] Customer's E-mail
        -address:[String] Customer's Address
        -zipcode:[String] Customer's zipcode
        -phone:[String] Customer's phone
    Return:
        -order.id : [String] The generated id from the order that just saved into the Database
    """
    order = Order(first_name=first_name, last_name=last_name, \
        email=email, address=address, zipcode=zipcode, place=place, phone=phone)
    # If the user is authenticated then save the already saved user's info in the order's info
    if request.user.is_authenticated:
        order.user = request.user
        
    order.save()

    cart = Cart(request)
    # Create the order 
    for item in cart:
        OrderItem.objects.create(order=order, product=item['product'], \
            price=item['price'], quantity=item['quantity'])

    return order.id
예제 #27
0
def api_remove_from_cart(request):
    data = json.loads(request.body)

    jsonresponse = {'success': True}

    product_id = str(data['product_id'])
    quantity = int(data['quantity'])

    cart = Cart(request)
    cart.remove(product_id, quantity)

    product = get_object_or_404(Product, pk=product_id)
    product.num_available += quantity
    product.save()

    return JsonResponse(jsonresponse)
예제 #28
0
def checkout(request, first_name, last_name, email, address, zipcode, place,
             country, phone):
    order = Order(first_name=first_name,
                  last_name=last_name,
                  email=email,
                  address=address,
                  zipcode=zipcode,
                  place=place,
                  country=country,
                  phone=phone)

    if request.user.is_authenticated:
        order.user = request.user

    order.save()

    cart = Cart(request)

    for item in cart:
        OrderItem.objects.create(order=order,
                                 product=item['product'],
                                 price=item['price'],
                                 quantity=item['quantity'])

    return order.id
예제 #29
0
def listado(request, slug=None):
    header = "producto"

    categorias = Categoria.objects.all().order_by('position')
    if slug == None:
        print("No hay slug")
        categoria_selected = Categoria.objects.all().order_by('position')[0]

        try:
            cursos = Curso.objects.filter(
                fk_categoria=categoria_selected).order_by('position')
        except:
            cursos = None
    else:
        print("hay slug")
        categoria_selected = Categoria.objects.get(slug=slug)

        # Traer los productos
        cursos = Curso.objects.filter(
            fk_categoria=categoria_selected).order_by('position')
    """ Validador para que un curso solo pueda ser clickeable
        1 vez """
    try:
        profile = request.user.userprofile
    except:
        profile = None
    if profile:
        cart = Cart(request)
        items = cart.cart.item_set.all()
        list_id_items = []
        for row in items:
            list_id_items.append(row.object_id)
    return render(request, 'productos/listado.html', locals())
예제 #30
0
def add_to_cart(request):
    product_id = request.POST.get('product_id')
    quantity = 1
    curso = get_object_or_404(Curso, id=product_id)
    cart = Cart(request)
    cart.add(curso, curso.precio, quantity)
    try:
        profile = UserProfile.objects.get(user__id=request.user.id)
        print(profile, "<- profile")
        if not profile.cart:
            profile.cart = cart.cart
            profile.save()
    except:
        return redirect(reverse('usuarios:login'))

    return redirect(reverse('pedidos:mi_carrito'))