예제 #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)
        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})
예제 #2
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
  })
예제 #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"):
                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,
    })
예제 #4
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)
예제 #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 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})
예제 #6
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
    })
예제 #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'):
                '''
                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})
예제 #8
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,
    })
예제 #9
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
    })
예제 #10
0
def update_detail_view(request, pk):
    template = 'details/update-client.html'
    detail_obj = get_object_or_404(Detail, pk=pk)

    order = get_or_create_order(request)
    client = order.client
    info_form = DetailModelForm(request.POST or None, instance=detail_obj)
    origin_form = OriginAddressForm(
        request.POST or None, initial=fields_origin_form(detail=detail_obj))
    destiny_form = DestinyAddressForm(
        request.POST or None, initial=fields_destiny_form(detail=detail_obj))
    my_addressess_list = Address.objects.filter(client=client).order_by('-id')

    if request.method == 'POST' and info_form.is_valid(
    ) and origin_form.is_valid() and destiny_form.is_valid():
        # detail_obj.distance=12.00,
        # detail_obj.sub_total=10.00
        detail_obj.update_information(order, info_form.instance,
                                      request.POST.get('distance'),
                                      request.POST.get('price_rate'))
        detail_obj.update_addressess(client, origin_form.cleaned_data,
                                     destiny_form.cleaned_data)
        if 'image' in request.FILES:
            finfo = info_form.save(commit=False)
            finfo.image = request.FILES['image']
            finfo.save()

        messages.success(request,
                         'La dirección de envío fue editado con éxito.')
        return redirect('orders:add-addresses')

    return render(request,
                  template,
                  context={
                      'order': order,
                      'detail_obj': detail_obj,
                      'info_form': info_form,
                      'origin_form': origin_form,
                      'destiny_form': destiny_form,
                      'my_addressess_list': my_addressess_list,
                      'title': '¿Qué estas enviando?'
                  })
예제 #11
0
def create_detail_view(request):
    template = 'details/create.html'
    info_form = DetailModelForm(request.POST or None)
    origin_form = OriginAddressForm(request.POST or None)
    destiny_form = DestinyAddressForm(request.POST or None)
    order = get_or_create_order(request)
    client = order.client
    my_addressess_list = Address.objects.filter(client=client).order_by('-id')
    if request.method == 'POST' and info_form.is_valid(
    ) and origin_form.is_valid() and destiny_form.is_valid():
        address_origin = Address.objects.update_or_create_address_origin(
            client, origin_form.cleaned_data)
        address_destiny = Address.objects.update_or_create_address_destiny(
            client, destiny_form.cleaned_data)
        Detail.objects.create(
            client=client,
            order=order,
            size=request.POST.get('size'),
            contain=request.POST.get('contain'),
            value=request.POST.get('value'),
            image=request.FILES['image'] if 'image' in request.FILES else None,
            description=request.POST.get('description'),
            address_origin=address_origin,
            address_destiny=address_destiny,
            distance=request.POST.get('distance'),
            price_rate=request.POST.get('price_rate'),
        )
        messages.success(request,
                         'La dirección de envío fue agregado con éxito.')
        return redirect('orders:add-addresses')

    return render(request,
                  template,
                  context={
                      'order': order,
                      'info_form': info_form,
                      'origin_form': origin_form,
                      'destiny_form': destiny_form,
                      'my_addressess_list': my_addressess_list,
                      'title': '¿Qué estas enviando?'
                  })
예제 #12
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())
예제 #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})