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())
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())
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
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
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
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