예제 #1
0
def create(request):
    form = ShippingAddressForm(request.POST or None)

    if request.method == 'POST' and form.is_valid():
        shipping_address = form.save(
            commit=False
        )  #guardo temporalmente la instancia hasta verificar el usuario
        shipping_address.user = request.user
        #si la dirección es la primera entonces la guardo como default
        # shipping_address.default = not ShippingAddress.objects.filter(user=request.user).exists()
        shipping_address.default = not request.user.has_shipping_address()
        shipping_address.save()

        if request.GET.get('next'):
            if request.GET['next'] == reverse('orders:address'):
                cart = get_or_create_cart(request)
                order = get_or_create_order(cart, request)

                order.update_shipping_address(shipping_address)

                return HttpResponseRedirect(request.GET['next'])

        messages.success(request, 'Direccion creada con éxito')
        return redirect('shipping_addresses:shipping_addresses')

    context = {'form': form}

    return render(request, 'shipping_addresses/create.html', context)
예제 #2
0
    def wrap(request, *args, **kwargs):
        cart = get_or_create_cart(request)
        order = get_or_create_order(cart, request)

        add_or_remove_cart_products(request)

        return function(request, cart, order, *args, **kwargs)
예제 #3
0
def create(request):
    form = ShippingAddressForm(request.POST or None)

    if request.method == 'POST' and form.is_valid():
        shipping_address = form.save(commit=False)
        shipping_address.user = request.user
        shipping_address.default = not request.user.has_shipping_address()

        shipping_address.save()

        if request.GET.get('next'):
            if request.GET['next'] == reverse('orders:address'):
                '''
                Si el usuario añade una nueva dirección desde
                el proceso de pago, haremos lo siguiente ->
                '''
                cart = get_or_create_cart(request)
                order = get_or_create_order(cart, request)

                order.update_shipping_address(shipping_address)

                return HttpResponseRedirect(request.GET['next'])

        messages.success(request, 'Dirección creada exitosamente')
        return redirect('shipping_addresses:shipping_addresses')

    return render(request, 'shipping_addresses/create.html', {'form': form})
예제 #4
0
def create(request):
    #Función para crear una dirección tomando los valores ingresados por el usuario y guardandoos en la base de datos.
    form = ShippingAddressForm(request.POST or None)

    if request.method == 'POST' and form.is_valid():
        shipping_address = form.save(commit=False)
        shipping_address.user = request.user
        shipping_address.default = not request.user.has_shipping_address()

        shipping_address.save()

        if request.GET.get('next'):
            if request.GET['next'] == reverse('orders:address'):
                cart = get_or_create_cart(request)
                order = get_or_create_order(cart, request)

                order.update_shipping_address(shipping_address)

                return HttpResponseRedirect(request.GET['next'])

        messages.success(request, 'Address created successfully')
        return redirect('shipping_addresses:shipping_addresses')

    return render(request, 'shipping_addresses/create.html', {
        'form' : form
    })
예제 #5
0
def create(request):
    form = ShippingAddressForm(request.POST or None)

    if request.method == 'POST' and form.is_valid():
        shipping_address = form.save(commit=False)
        shipping_address.user = request.user
        shipping_address.default = not request.user.has_shipping_address()

        shipping_address.save()

        if request.GET.get('next'):
            if request.GET['next'] == reverse('orders:address'):
                cart = get_or_create_cart(request)
                order = get_or_create_order(cart, request)

                order.update_shipping_address(shipping_address)

            messages.success(request, _('Address created successfully'))

            return HttpResponseRedirect(request.GET.get('next'))

        messages.success(request, _('Address created successfully'))

        return redirect('shipping_address:shipping_address')

    return render(request, 'shipping_address/create.html', {'form': form})
예제 #6
0
def create(request):
  form = ShippingAddressForm(request.POST or None)

  if request.method == 'POST' and form.is_valid():
    shipping_address = form.save(commit=False)
    shipping_address.user = request.user
    shipping_address.default = not ShippingAddress.objects.filter(user=request.user).exists()
    
    shipping_address.save()

    if request.GET.get('next'): # Si la petición posee el parametro next
      if request.GET['next'] == reverse('orders:address'): # Si el valor de next es exactamente esa dirección, el usuario se encuentra en el proceso de orden de compra.
          # Se deben importar las funciones get_or_create_cart y order.
          cart = get_or_create_cart(request) # Obtiene el carrito de compras, Para poder obtener la orden de compra.
          order = get_or_create_order(cart, request) # Obtiene la orden.
          
          order.update_shipping_address(shipping_address)  # Establece la dirección recientemente creada a la orden de compra.
          return HttpResponseRedirect(request.GET['next']) # Para finalizar redirecciona al usuario a la sección dirección de la orden. Se importa el HttpResponseRedirect.

    messages.success(request, 'Dirección creada exitosamente')
    return redirect('shipping_addresses:shipping_addresses')

  return render(request, 'shipping_addresses/create.html', {
    'form': form
  })
예제 #7
0
def create(request):
    form = ShippingAddressForm(request.POST or None)

    if request.method == "POST" and form.is_valid():
        shipping_address = form.save(commit=False)
        shipping_address.user = request.user
        shipping_address.default = not request.user.has_shipping_address()

        shipping_address.save()

        if request.GET.get("next"):
            if request.GET["next"] == reverse("orders:address"):
                cart = get_or_create_cart(request)
                order = get_or_create_order(cart, request)

                order.update_shipping_address(shipping_address)

                return HttpResponseRedirect(request.GET["next"])

        messages.success(request, "Direccion creada exitosamente")
        return redirect("shipping_addresses:shipping_addresses")

    return render(request,"shipping_addresses/create.html",{
        #contexto
        "form": form,
    })
예제 #8
0
def order(request):
    cart = get_or_create_cart(request)
    order = get_or_create_order(cart, request)
    
    return render(request, 'orders/order.html',{

    })
예제 #9
0
def order(request):
    cart = get_or_create_cart(request)

    order = get_or_create_order(cart, request)
    print(order.order_id)
    context = {'order': order, 'cart': cart, 'breadcrumb': breadcrumb()}
    return render(request, 'orders/order.html', context)
예제 #10
0
def create(request):

    form = ShippingAddressForm(request.POST or None)

    if request.method == 'POST' and form.is_valid():
        shipping_address = form.save(commit=False)
        shipping_address.user = request.user
        shipping_address.default = not ShippingAddress.objects.filter(
            user=request.user).exists()

        shipping_address.save()

        if request.GET.get('next'):
            if request.GET['next'] == reverse('orders:address'):
                cart = get_or_create_cart(request)
                order = get_or_create_order(cart, request)

                order.update_shipping_address(shipping_address)

                return HttpResponseRedirect(request.GET['next'])

        messages.success(request, 'Dirección creada correctamente')
        return redirect('shipping_addresses:shipping_addresses')

    return render(request, 'shipping_addresses/create.html', {'form': form})
예제 #11
0
파일: views.py 프로젝트: HamelBarrer/store
def check_address(request, pk):
    cart = get_or_create_cart(request)
    order = get_or_create_order(cart, request)
    shipping_address = get_object_or_404(ShippingAddress, pk=pk)
    if request.user.id != shipping_address.user_id:
        return redirect('carts:cart')

    order.update_shipping_address(shipping_address)
    return redirect('orders:address')
예제 #12
0
파일: views.py 프로젝트: HamelBarrer/store
def order(request):
    cart = get_or_create_cart(request)
    order = get_or_create_order(cart, request)
    template_name = 'order/order.html'
    return render(request, template_name, {
        'cart': cart,
        'order': order,
        'breadcrumb': breadcrumb()
    })
예제 #13
0
def order(request):

    cart = get_or_create_cart(request)
    order = get_or_create_order(cart, request)

    return render(request, 'orders/order.html', {
        'cart': cart,
        'order': order,
        'breadcrumb': breadcrumb()
    })
예제 #14
0
파일: views.py 프로젝트: HamelBarrer/store
def cancel(request):
    cart = get_or_create_cart(request)
    order = get_or_create_order(cart, request)
    if request.user.id != order.user_id:
        return redirect('carts:cart')
    order.cancel()
    destroy_cart(request)
    destroy_order(request)
    messages.error(request, 'Orden Cancelada')
    return redirect('index')
예제 #15
0
파일: views.py 프로젝트: HamelBarrer/store
def complete(request):
    cart = get_or_create_cart(request)
    order = get_or_create_order(cart, request)
    if request.user.id != order.user_id:
        return redirect('carts:cart')
    order.complete()
    Mail.send_complete_order(order, request.user)
    destroy_cart(request)
    destroy_order(request)
    messages.success(request, 'Compra completada exitosamente')
    return redirect('index')
예제 #16
0
파일: views.py 프로젝트: HamelBarrer/store
def address(request):
    cart = get_or_create_cart(request)
    order = get_or_create_order(cart, request)
    shipping_address = order.get_or_set_shipping_address()
    can_choose_address = request.user.shippingaddress_set.count() > 1
    return render(request, 'order/address.html', {
        'cart': cart,
        'order': order,
        'shipping_address': shipping_address,
        'can_choose_address': can_choose_address,
        'breadcrumb': breadcrumb(address=True)
    })
예제 #17
0
파일: views.py 프로젝트: HamelBarrer/store
def confirm(request):
    cart = get_or_create_cart(request)
    order = get_or_create_order(cart, request)
    shipping_address = order.shipping_address
    if shipping_address is None:
        return redirect('orders:address')
    return render(request, 'order/confirm.html', {
        'cart': cart,
        'order': order,
        'shipping_address': shipping_address,
        'breadcrumb': breadcrumb(address=True, confirmation=True),
    })
예제 #18
0
def confirm(request):
    cart = get_or_create_cart(request)
    order = get_or_create_order(cart, request)
    shipping_address = order.shipping_address
    if shipping_address is None:
        return redirect('orders:address')

    return render(request, 'orders/snippets/confirm.html', {
        'cart': cart,
        'order': order,
        'shipping_address': shipping_address
    })
예제 #19
0
def cancel(request):
    cart = get_or_create_cart(request)
    order = get_or_create_order(cart, request)

    if request.user.id != order.user_id:
        return redirect('carts:cart')

    order.cancel()

    destroy_cart(request)
    destroy_order(request)

    return redirect ('product')
예제 #20
0
def validate(request):
    cart = get_or_create_cart(request)
    order = get_or_create_order(cart, request)
    code = request.GET.get('code')
    promo_code = PromoCode.objects.get_valid(code)
    if promo_code is None or promo_code.used:
        return JsonResponse({'status': False}, status=404)
    order.apply_promo_code(promo_code)
    return JsonResponse({
        'status': True,
        'code': promo_code.code,
        'discount': promo_code.discount,
        'total': order.total,
    })
예제 #21
0
def address(request):

    cart = get_or_create_cart(request)
    order = get_or_create_order(cart, request)

    shipping_address = order.get_or_set_shipping_address()
    can_choose_address = request.user.shippingaddress_set.all()

    return render(request, 'orders/address.html', {
        'cart': cart,
        'shipping_address': shipping_address,
        'order': order,
        'can_choose_address': can_choose_address
    }) 
예제 #22
0
def address(request):
    cart = get_or_create_cart(request)
    order = get_or_create_order(cart, request)
    shipping_address = order.get_or_set_shipping_address()
    hay_opciones = request.user.shippingaddress_set.count() > 1

    context = {
        'cart': cart,
        'order': order,
        'shipping_address': shipping_address,
        'breadcrumb': breadcrumb(address=True),
        'hay_opciones': hay_opciones
    }

    return render(request, 'orders/address.html', context)
예제 #23
0
def validate(request):
    cart = get_or_create_cart(request)
    order = get_or_create_order(cart, request)

    code = request.GET.get("code")
    promo_code = PromoCode.objects.get_valid(code)

    if promo_code is None:
        return JsonResponse({"status": False}, status=404)
    order.apply_promo_code(promo_code)
    return JsonResponse({
        "status": True,
        "code": promo_code.code,
        "discount": promo_code.discount,
        "total": order.total
    })
예제 #24
0
def order(request):
    cart = get_or_create_cart(request)
    #usamos filter y no get por el probema del try exeption de la otra vez
    #order = Order.objects.filter(cart=cart).first()
    #ahora llamo a Order con el propety que defini
    order = cart.order
    #creando una orden
    if order is None and request.user.is_authenticated:
        order = Order.objects.create(cart=cart, user=request.user)
    if order:
        request.session['order_id'] = order.order_id
    print('Este es cart de order', cart)
    return render(request, 'orders/order.html', {
        'cart': cart,
        'order': order,
        'breadcrumb': breadcrumb()
    })
예제 #25
0
def add(request):
    cart = get_or_create_cart(request)
    product = Product.objects.get(pk=request.POST.get('product_id'))
    quantity = int(request.POST.get('quantity', 1))

    # cart.products.add(product, through_defaults={
    #     'quantity': quantity
    # })

    cart_product = CartProducts.objects.create_or_update_quantity(
        cart=cart, product=product, quantity=quantity)

    return render(request, 'carts/add.html', {
        'quantity': quantity,
        'cart_product': cart_product,
        'product': product
    })
예제 #26
0
    def form_valid(self, form):
        context = self.get_context_data()
        form = context['form']

        with transaction.atomic():
            if form.is_valid():
                shipping_address = form.save(commit=False)
                shipping_address.user = self.request.user
                shipping_address.default = not ShippingAddress.objects.filter(
                    user=self.request.user).exists()
                shipping_address.save()

                if self.request.GET.get('next'):
                    if self.request.GET['next'] == reverse('orders:address'):
                        cart = get_or_create_cart(self.request)
                        order = get_or_create_order(cart, self.request)

                        order.update_shipping_address(shipping_address)

                        return HttpResponseRedirect(self.request.GET['next'])

                messages.success(self.request, 'Direccion creada exitosamente')

        return HttpResponseRedirect(self.get_success_url())
예제 #27
0
def remove(request):
    cart = get_or_create_cart(request)
    product = get_object_or_404(Product, pk=request.POST.get('product_id'))
    cart.products.remove(product)

    return redirect('carts:cart')
예제 #28
0
    def wrap(request, *args, **kwargs):
        cart = get_or_create_cart(request)

        order = get_or_created_order(cart, request)

        return function(request, cart, order, *args, **kwargs)
예제 #29
0
def cart(request):
    cart = get_or_create_cart(request)
    return render(request, 'carts/cart.html', {'cart': cart})