Beispiel #1
0
def tax_billship_handler(request, order_form):
    """
    Tax/billing/shipping handler - called when the first step in
    the checkout process with billing/shipping address fields is
    submitted. Implement your own and specify the path to import it
    from via the setting ``SHOP_HANDLER_BILLING_SHIPPING``.
    This function will typically contain any shipping calculation
    where the shipping amount can then be set using the function
    ``cartridge.shop.utils.set_shipping``. The Cart object is also
    accessible via ``request.cart``
    """
    settings.use_editable()
    if not request.session.get('free_shipping'):
        set_shipping(request, _("Flat rate shipping"),
                settings.SHOP_DEFAULT_SHIPPING_VALUE)

    if settings.TAX_SHIPPING:
        tax_shipping = \
                Decimal(str(request.session.get('shipping_total')))
    else:
        tax_shipping = Decimal(0)

    if request.session.get('tax_total'):
        del request.session['tax_total']

    if not settings.TAX_USE_TAXCLOUD:
        if settings.TAX_OUT_OF_STATE or \
                request.session.get('order')['shipping_detail_state'] \
                    == settings.TAX_SHOP_STATE:
            # Use the flat rate
            tax_rate = Decimal(settings.TAX_FLAT_RATE) * Decimal(str(.01))
            tax_total = (request.cart.total_price() + tax_shipping) * \
                Decimal(tax_rate)
            set_salestax(request, _("Flat sales tax"), tax_total)
        else:
            # Sweet: no sales tax
            set_salestax(request, _("Out of state"), Decimal(0))
    else:
        # Use TaxCloud.net SOAP service.
        api_key = settings.TAX_TAXCLOUD_API_KEY
        api_id = settings.TAX_TAXCLOUD_API_ID
        url = "https://api.taxcloud.net/1.0/?wsdl"
        client = suds.client.Client(url)
        order = request.session.get('order')
        settings.use_editable()
        origin = client.factory.create('Address')
        origin.Address1 = settings.TAX_SHOP_ADDRESS
        origin.Address2 = settings.TAX_SHOP_ADDRESS2
        origin.City = settings.TAX_SHOP_CITY
        origin.State = settings.TAX_SHOP_STATE
        origin.Zip5 = settings.TAX_SHOP_POSTCODE
        origin.Zip4 = settings.TAX_SHOP_POSTCODE_PLUS4
        if len(str(order['shipping_detail_postcode']).replace('-','')) == 9:
            shipping_detail_postcode_plus4 = \
                    str(order['shipping_detail_postcode'])[:-4]
            shipping_detail_postcode = \
                    str(order['shipping_detail_postcode'])[0:5]
        else:
            shipping_detail_postcode = \
                    str(order['shipping_detail_postcode'])[0:5]
            shipping_detail_postcode_plus4 = '0000'
        destination = client.factory.create('Address')
        destination.Address1 = order['shipping_detail_street']
        destination.Address2 = ''
        destination.City = order['shipping_detail_city']
        destination.State = order['shipping_detail_state']
        destination.Zip5 = shipping_detail_postcode
        destination.Zip4 = shipping_detail_postcode_plus4
        ArrayOfCartItem = client.factory.create('ArrayOfCartItem')
        items = CartItem.objects.filter(cart_id=request.session.get('cart'))
        for idx, item in enumerate(items):
            cartItem = client.factory.create('CartItem')
            cartItem.Index = idx + 1
            cartItem.ItemID = str(item.sku)
            productVariation = ProductVariation.objects.get(sku=item.sku)
            product = Product.objects.get(id=productVariation.product_id)
            cartItem.TIC = int(product.tic)
            cartItem.Price = float(item.unit_price)
            cartItem.Qty = float(item.quantity)
            ArrayOfCartItem.CartItem.append(cartItem)
        shipping = client.factory.create('CartItem')
        shipping.Index = len(items) + 1
        shipping.ItemID = str('shipping')
        shipping.TIC = int(11010)
        shipping.Price = float(tax_shipping)
        shipping.Qty = float(1)
        ArrayOfCartItem.CartItem.append(shipping)
        cartID = uuid4()
        request.session['cartID'] = cartID
        request.session.modified = True
        try:
            result = client.service.Lookup(str(api_id), str(api_key),
                str(request.user.id),
                cartID,
                ArrayOfCartItem, origin, destination, False
                )
            tax_total = 0
        except:
            raise CheckoutError("Unable to contact the TaxCloud \
            server.")
        if str(result.ResponseType) == 'OK' and \
                result.CartID == cartID:
            for CartItemResponse in result.CartItemsResponse[0]:
                tax_total += CartItemResponse.TaxAmount
        else:
            raise CheckoutError(result.Messages)
        print tax_total
        set_salestax(request, _("Sales tax for shipping address"), tax_total)
Beispiel #2
0
def tax_billship_handler(request, order_form):
    """
    Tax/billing/shipping handler - called when the first step in
    the checkout process with billing/shipping address fields is
    submitted. Implement your own and specify the path to import it
    from via the setting ``SHOP_HANDLER_BILLING_SHIPPING``.
    This function will typically contain any shipping calculation
    where the shipping amount can then be set using the function
    ``cartridge.shop.utils.set_shipping``. The Cart object is also
    accessible via ``request.cart``
    """
    settings.use_editable()
    if not request.session.get('free_shipping'):
        set_shipping(request, _("Flat rate shipping"),
                settings.SHOP_DEFAULT_SHIPPING_VALUE)

    if settings.TAX_SHIPPING:
        tax_shipping = \
                Decimal(str(request.session.get('shipping_total')))
    else:
        tax_shipping = Decimal(0)
    
    if not settings.TAX_USE_TAXCLOUD:
        if settings.TAX_OUT_OF_STATE or \
                request.session.get('order')['shipping_detail_state'] \
                    == settings.TAX_SHOP_STATE:
            # Use the flat rate
            tax_rate = Decimal(settings.TAX_FLAT_RATE) * Decimal(str(.01))
            total_tax = (request.cart.total_price() + tax_shipping) * \
                Decimal(tax_rate)
            set_salestax(request, _("Flat sales tax"), total_tax)
        else:
            # Sweet: no sales tax
            set_salestax(request, _("Out of state"), Decimal(0))
    else:  # Use TaxCloud.net SOAP service.
        api_key = settings.TAXCLOUD_API_KEY
        api_id = settings.TAXCLOUD_API_ID
        order = request.session.get('order')
        settings.use_editable()
        origin = (settings.TAX_SHOP_ADDRESS,
                settings.TAX_SHOP_ADDRESS2, settings.TAX_SHOP_CITY,
                settings.TAX_SHOP_STATE, settings.TAX_SHOP_POSTCODE,
                settings.TAX_SHOP_POSTCODE_PLUS4,)
        if len(str(order['shipping_detail_postcode']).replace('-','')) == 9:
            shipping_detail_postcode_plus4 = str(order['shipping_detail_postcode'])[:-4]
            shipping_detail_postcode = str(order['shipping_detail_postcode'])[0:4]
        else:
            shipping_detail_postcode = str(order['shipping_detail_postcode'])[0:4]
            shipping_detail_postcode_plus4 = '0000'

        destination = [
                order['shipping_detail_street'],
                '',
                order['shipping_detail_city'],
                order['shipping_detail_state'],
                shipping_detail_postcode,
                shipping_detail_postcode_plus4,
                ]
        cartItems = []
        items = CartItem.objects.filter(cart_id=request.session.get('cart'))
        for idx, item in enumerate(items):
            index = idx
            itemId = str(item.sku)
            productVariation = ProductVariation.objects.get(sku=itemId)
            product = Product.objects.get(id=productVariation.product_id)
            tic = str(product.tic)
            price = str(item.unit_price)
            quantity = item.quantity
            cartItem = (index, itemId, tic, price, quantity)
            cartItems.append(cartItem)
        shipping = (len(items) + 1, 'shipping', '11010',
                str(tax_shipping), 1)
        cartItems.append(shipping)
        url = "https://api.taxcloud.net/1.0/?wsdl"
        client = suds.client.Client(url)
        tax_total = client.service.Lookup(api_id, api_key,
                request.user.id, request.session.get('cart'),
                cartItems, origin, destination)
        set_salestax(request, tax_type, tax_total)
Beispiel #3
0
def tax_billship_handler(request, order_form):
    """
    Tax/billing/shipping handler - called when the first step in
    the checkout process with billing/shipping address fields is
    submitted. Implement your own and specify the path to import it
    from via the setting ``SHOP_HANDLER_BILLING_SHIPPING``.
    This function will typically contain any shipping calculation
    where the shipping amount can then be set using the function
    ``cartridge.shop.utils.set_shipping``. The Cart object is also
    accessible via ``request.cart``
    """
    settings.use_editable()
    if not request.session.get('free_shipping'):
        set_shipping(request, _("Flat rate shipping"),
                     settings.SHOP_DEFAULT_SHIPPING_VALUE)

    if settings.TAX_SHIPPING:
        tax_shipping = \
                Decimal(str(request.session.get('shipping_total')))
    else:
        tax_shipping = Decimal(0)

    if request.session.get('tax_total'):
        del request.session['tax_total']

    if not settings.TAX_USE_TAXCLOUD:
        if settings.TAX_OUT_OF_STATE or \
                request.session.get('order')['shipping_detail_state'] \
                    == settings.TAX_SHOP_STATE:
            # Use the flat rate
            tax_rate = Decimal(settings.TAX_FLAT_RATE) * Decimal(str(.01))
            tax_total = (request.cart.total_price() + tax_shipping) * \
                Decimal(tax_rate)
            set_salestax(request, _("Flat sales tax"), tax_total)
        else:
            # Sweet: no sales tax
            set_salestax(request, _("Out of state"), Decimal(0))
    else:
        # Use TaxCloud.net SOAP service.
        api_key = settings.TAX_TAXCLOUD_API_KEY
        api_id = settings.TAX_TAXCLOUD_API_ID
        url = "https://api.taxcloud.net/1.0/?wsdl"
        client = suds.client.Client(url)
        order = request.session.get('order')
        settings.use_editable()
        origin = client.factory.create('Address')
        origin.Address1 = settings.TAX_SHOP_ADDRESS
        origin.Address2 = settings.TAX_SHOP_ADDRESS2
        origin.City = settings.TAX_SHOP_CITY
        origin.State = settings.TAX_SHOP_STATE
        origin.Zip5 = settings.TAX_SHOP_POSTCODE
        origin.Zip4 = settings.TAX_SHOP_POSTCODE_PLUS4
        if len(str(order['shipping_detail_postcode']).replace('-', '')) == 9:
            shipping_detail_postcode_plus4 = \
                    str(order['shipping_detail_postcode'])[:-4]
            shipping_detail_postcode = \
                    str(order['shipping_detail_postcode'])[0:5]
        else:
            shipping_detail_postcode = \
                    str(order['shipping_detail_postcode'])[0:5]
            shipping_detail_postcode_plus4 = '0000'
        destination = client.factory.create('Address')
        destination.Address1 = order['shipping_detail_street']
        destination.Address2 = ''
        destination.City = order['shipping_detail_city']
        destination.State = order['shipping_detail_state']
        destination.Zip5 = shipping_detail_postcode
        destination.Zip4 = shipping_detail_postcode_plus4
        ArrayOfCartItem = client.factory.create('ArrayOfCartItem')
        items = CartItem.objects.filter(cart_id=request.session.get('cart'))
        for idx, item in enumerate(items):
            cartItem = client.factory.create('CartItem')
            cartItem.Index = idx + 1
            cartItem.ItemID = str(item.sku)
            productVariation = ProductVariation.objects.get(sku=item.sku)
            product = Product.objects.get(id=productVariation.product_id)
            cartItem.TIC = int(product.tic)
            cartItem.Price = float(item.unit_price)
            cartItem.Qty = float(item.quantity)
            ArrayOfCartItem.CartItem.append(cartItem)
        shipping = client.factory.create('CartItem')
        shipping.Index = len(items) + 1
        shipping.ItemID = str('shipping')
        shipping.TIC = int(11010)
        shipping.Price = float(tax_shipping)
        shipping.Qty = float(1)
        ArrayOfCartItem.CartItem.append(shipping)
        cartID = uuid4()
        request.session['cartID'] = cartID
        request.session.modified = True
        try:
            result = client.service.Lookup(str(api_id), str(api_key),
                                           str(request.user.id), cartID,
                                           ArrayOfCartItem, origin,
                                           destination, False)
            tax_total = 0
        except:
            raise CheckoutError("Unable to contact the TaxCloud \
            server.")
        if str(result.ResponseType) == 'OK' and \
                result.CartID == cartID:
            for CartItemResponse in result.CartItemsResponse[0]:
                tax_total += CartItemResponse.TaxAmount
        else:
            raise CheckoutError(result.Messages)
        print tax_total
        set_salestax(request, _("Sales tax for shipping address"), tax_total)