Exemplo n.º 1
0
class FreeTest(TestCase):
    def setUp(self):
        self.method = Free()

    def test_shipping_is_free_for_empty_basket(self):
        basket = Basket()
        self.method.set_basket(basket)
        self.assertEquals(D("0.00"), self.method.basket_charge_incl_tax())
        self.assertEquals(D("0.00"), self.method.basket_charge_excl_tax())

    def test_shipping_is_free_for_nonempty_basket(self):
        basket = Basket()
        basket.add_product(create_product())
        self.method.set_basket(basket)
        self.assertEquals(D("0.00"), self.method.basket_charge_incl_tax())
        self.assertEquals(D("0.00"), self.method.basket_charge_excl_tax())
Exemplo n.º 2
0
class FreeTest(TestCase):
    def setUp(self):
        self.method = Free()

    def test_shipping_is_free_for_empty_basket(self):
        basket = Basket()
        self.method.set_basket(basket)
        self.assertEquals(D('0.00'), self.method.basket_charge_incl_tax())
        self.assertEquals(D('0.00'), self.method.basket_charge_excl_tax())

    def test_shipping_is_free_for_nonempty_basket(self):
        basket = Basket()
        basket.add_product(create_product())
        self.method.set_basket(basket)
        self.assertEquals(D('0.00'), self.method.basket_charge_incl_tax())
        self.assertEquals(D('0.00'), self.method.basket_charge_excl_tax())
Exemplo n.º 3
0
    def place_order(self, basket, total_incl_tax=None, total_excl_tax=None,
                    user=None, shipping_method=None, shipping_address=None,
                    billing_address=None, order_number=None, status=None, **kwargs):
        """
        Placing an order involves creating all the relevant models based on the
        basket and session data.
        """
        # Only a basket instance is required to place an order - everything else can be set
        # to defaults
        if basket.is_empty:
            raise ValueError(_("Empty baskets cannot be submitted"))
        if not shipping_method:
            shipping_method = Free()
        if total_incl_tax is None or total_excl_tax is None:
            total_incl_tax = basket.total_incl_tax + shipping_method.basket_charge_incl_tax()
            total_excl_tax = basket.total_excl_tax + shipping_method.basket_charge_excl_tax()
        if not order_number:
            generator = OrderNumberGenerator()
            order_number = generator.order_number(basket)
        if not status and hasattr(settings, 'OSCAR_INITIAL_ORDER_STATUS'):
            status = getattr(settings, 'OSCAR_INITIAL_ORDER_STATUS')
        try:
            Order._default_manager.get(number=order_number)
        except Order.DoesNotExist:
            pass
        else:
            raise ValueError(_("There is already an order with number %s") % order_number)

        # Ok - everything seems to be in order, let's place the order
        order = self.create_order_model(
            user, basket, shipping_address, shipping_method, billing_address,
            total_incl_tax, total_excl_tax, order_number, status, **kwargs)
        for line in basket.all_lines():
            self.create_line_models(order, line)
            self.update_stock_records(line)

        for application in basket.offer_applications:
            # Trigger any deferred benefits from offers and capture the
            # resulting message
            application['message'] = application['offer'].apply_deferred_benefit(basket)
            # Record offer application results
            if application['result'].affects_shipping:
                # Skip zero shipping discounts
                if shipping_method.discount <= D('0.00'):
                    continue
                # If a shipping offer, we need to grab the actual discount off
                # the shipping method instance, which should be wrapped in an
                # OfferDiscount instance.
                application['discount'] = shipping_method.discount
            self.create_discount_model(order, application)
            self.record_discount(application)

        for voucher in basket.vouchers.all():
            self.record_voucher_usage(order, voucher, user)

        # Send signal for analytics to pick up
        order_placed.send(sender=self, order=order, user=user)

        return order
Exemplo n.º 4
0
    def place_order(self,
                    basket,
                    total_incl_tax=None,
                    total_excl_tax=None,
                    user=None,
                    shipping_method=None,
                    shipping_address=None,
                    billing_address=None,
                    order_number=None,
                    status=None,
                    **kwargs):
        """
        Placing an order involves creating all the relevant models based on the
        basket and session data.
        """
        # Only a basket instance is required to place an order - everything else can be set
        # to defaults
        if basket.is_empty:
            raise ValueError(_("Empty baskets cannot be submitted"))
        if not shipping_method:
            shipping_method = Free()
        if total_incl_tax is None or total_excl_tax is None:
            total_incl_tax = basket.total_incl_tax + shipping_method.basket_charge_incl_tax(
            )
            total_excl_tax = basket.total_excl_tax + shipping_method.basket_charge_excl_tax(
            )
        if not order_number:
            generator = OrderNumberGenerator()
            order_number = generator.order_number(basket)
        if not status and hasattr(settings, 'OSCAR_INITIAL_ORDER_STATUS'):
            status = getattr(settings, 'OSCAR_INITIAL_ORDER_STATUS')
        try:
            Order._default_manager.get(number=order_number)
        except Order.DoesNotExist:
            pass
        else:
            raise ValueError(
                _("There is already an order with number %s") % order_number)

        # Ok - everything seems to be in order, let's place the order
        order = self.create_order_model(user, basket, shipping_address,
                                        shipping_method, billing_address,
                                        total_incl_tax, total_excl_tax,
                                        order_number, status, **kwargs)
        for line in basket.all_lines():
            self.create_line_models(order, line)
            self.update_stock_records(line)

        for discount in basket.get_discounts():
            self.create_discount_model(order, discount)
            self.record_discount(discount)

        for voucher in basket.vouchers.all():
            self.record_voucher_usage(order, voucher, user)

        # Send signal for analytics to pick up
        order_placed.send(sender=self, order=order, user=user)

        return order
Exemplo n.º 5
0
    def place_order(self, basket, total_incl_tax=None, total_excl_tax=None,
                    user=None, shipping_method=None, shipping_address=None,
                    billing_address=None, order_number=None, status=None, **kwargs):
        """
        Placing an order involves creating all the relevant models based on the
        basket and session data.
        """
        # Only a basket instance is required to place an order - everything else can be set
        # to defaults
        if basket.is_empty:
            raise ValueError(_("Empty baskets cannot be submitted"))
        if not shipping_method:
            shipping_method = Free()
        if total_incl_tax is None or total_excl_tax is None:
            total_incl_tax = basket.total_incl_tax + shipping_method.basket_charge_incl_tax()
            total_excl_tax = basket.total_excl_tax + shipping_method.basket_charge_excl_tax()
        if not order_number:
            generator = OrderNumberGenerator()
            order_number = generator.order_number(basket)
        if not status and hasattr(settings, 'OSCAR_INITIAL_ORDER_STATUS'):
            status = getattr(settings, 'OSCAR_INITIAL_ORDER_STATUS')
        try:
            Order._default_manager.get(number=order_number)
        except Order.DoesNotExist:
            pass
        else:
            raise ValueError(_("There is already an order with number %s") % order_number)

        # Ok - everything seems to be in order, let's place the order
        order = self.create_order_model(user, basket, shipping_address,
                                        shipping_method, billing_address, total_incl_tax,
                                        total_excl_tax, order_number, status, **kwargs)
        for line in basket.all_lines():
            self.create_line_models(order, line)
            self.update_stock_records(line)

        # Record discounts (including any on the shipping method)
        for discount in basket.get_discounts():
            self.create_discount_model(order, discount)
            self.record_discount(discount)
        if shipping_method.is_discounted:
            discount = shipping_method.get_discount()
            self.create_discount_model(order, discount,
                                       is_shipping_discount=True)
            self.record_discount(discount)

        for voucher in basket.vouchers.all():
            self.record_voucher_usage(order, voucher, user)

        # Send signal for analytics to pick up
        order_placed.send(sender=self, order=order, user=user)

        return order
Exemplo n.º 6
0
    def place_order(self,
                    basket,
                    total_incl_tax=None,
                    total_excl_tax=None,
                    user=None,
                    shipping_method=None,
                    shipping_address=None,
                    billing_address=None,
                    order_number=None,
                    status=None,
                    **kwargs):
        """
        Placing an order involves creating all the relevant models based on the
        basket and session data.
        """
        # Only a basket instance is required to place an order - everything else can be set
        # to defaults
        if basket.is_empty:
            raise ValueError(_("Empty baskets cannot be submitted"))
        if not shipping_method:
            shipping_method = Free()
        if total_incl_tax is None or total_excl_tax is None:
            total_incl_tax = basket.total_incl_tax + shipping_method.basket_charge_incl_tax(
            )
            total_excl_tax = basket.total_excl_tax + shipping_method.basket_charge_excl_tax(
            )
        if not order_number:
            generator = OrderNumberGenerator()
            order_number = generator.order_number(basket)
        if not status and hasattr(settings, 'OSCAR_INITIAL_ORDER_STATUS'):
            status = getattr(settings, 'OSCAR_INITIAL_ORDER_STATUS')
        try:
            Order._default_manager.get(number=order_number)
        except Order.DoesNotExist:
            pass
        else:
            raise ValueError(
                _("There is already an order with number %s") % order_number)

        # Ok - everything seems to be in order, let's place the order
        order = self.create_order_model(user, basket, shipping_address,
                                        shipping_method, billing_address,
                                        total_incl_tax, total_excl_tax,
                                        order_number, status, **kwargs)
        for line in basket.all_lines():
            self.create_line_models(order, line)
            self.update_stock_records(line)

        for application in basket.offer_applications:
            # Trigger any deferred benefits from offers and capture the
            # resulting message
            application['message'] = application[
                'offer'].apply_deferred_benefit(basket)
            # Record offer application results
            if application['result'].affects_shipping:
                # If a shipping offer, we need to grab the actual discount off
                # the shipping method instance, which should be wrapped in an
                # OfferDiscount instance.
                application['discount'] = shipping_method.discount
            self.create_discount_model(order, application)
            self.record_discount(application)

        for voucher in basket.vouchers.all():
            self.record_voucher_usage(order, voucher, user)

        # Send signal for analytics to pick up
        order_placed.send(sender=self, order=order, user=user)

        return order