You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

v0.6.rst 18KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479
  1. =======================
  2. Oscar 0.6 release notes
  3. =======================
  4. Welcome to Oscar 0.6!
  5. These release notes cover the `new features`_ as well as `backwards incompatible changes`_
  6. that you'll want to be aware of when upgrading from Oscar 0.5 or
  7. earlier. This release contains some major changes to core APIs which means
  8. many old APIs are to be dropped - see the `deprecation plan`_.
  9. To upgrade your Oscar site, make sure you study both the `backwards incompatible changes`_
  10. and the `deprecated features`_
  11. .. _`new features`: `What's new in Oscar 0.6?`_
  12. .. _`upgrading advice`: `Upgrading`_
  13. .. _`deprecation plan`: `Features deprecated in 0.6`_
  14. .. _`deprecation features`: `Features deprecated in 0.6`_
  15. .. _`backwards incompatible changes`: `Backwards incompatible changes in 0.6`_
  16. Overview
  17. ========
  18. The biggest change in Oscar 0.6 is the reworking of `pricing and availability`_, which
  19. builds on top of the change to allow `multiple stockrecords per product`_. The
  20. charge is largely backwards compatible with the old system of "partner
  21. wrappers" but it is recommended to upgrade to the new system. Support for
  22. partner wrappers will be removed for Oscar 0.7.
  23. `Oscar now supports Django 1.5`_ and its custom user model. This has been only
  24. tested in the context of starting a new Oscar project with a custom model.
  25. Switching from a separate "profile" model to the new system is not recommended
  26. at this point.
  27. Other notable new features include:
  28. * A feature-rich `demo site`_ that illustrates how Oscar can be customised. It
  29. uses several of Oscar's many extensions, such as django-oscar-paypal_,
  30. django-oscar-datacash_ and django-oscar-stores_. It is intended as a
  31. reference site for Oscar.
  32. * `Partners can now have addresses`_.
  33. * `Customer wishlists`_
  34. * `New helper methods`_ in the ``EventHandler`` class for order processing
  35. .. _`Oscar now supports Django 1.5`: `Django 1.5 and custom user model support`_
  36. .. _`Partners can now have addresses`: `Partner addresses`_
  37. .. _`Customer wishlists`: `Wishlists`_
  38. .. _`New helper methods`: `Order processing changes`_
  39. What's new in Oscar 0.6?
  40. ========================
  41. Multiple stockrecords per product
  42. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  43. Products can now have multiple stockrecords rather than just one. This allows a
  44. product to be fulfilled by one of several partners. This is a key requirement
  45. for large-scale e-commerce sites selling millions of products, that use many
  46. different fulfillment partners. It also allows products to be sold in
  47. different currencies.
  48. This changes means several APIs are `deprecated`_ as they assume there is only
  49. one stockrecord per product.
  50. .. _`deprecated`: `Features deprecated in 0.6`_
  51. Pricing and availability
  52. ~~~~~~~~~~~~~~~~~~~~~~~~
  53. When products can have many stockrecords, a process needs to be in place to
  54. choose which one is selected for a given customer and product. To handle this,
  55. a new "strategy" class has been introduced which selects the appropriate
  56. stockrecord for a given customer and product.
  57. This change also paved the way for reworking how prices, taxes and availability
  58. are handled. Instead of using `"partner wrappers"`_, the strategy class is
  59. responsible for returning availability details and prices for a particular
  60. product. New classes known as pricing and availabiliy policies are used to
  61. encapsulate this information.
  62. These changes allows Oscar to dynamically choose which stockrecord to use for a
  63. given customer and product. This enables several advanced features such as:
  64. * Fulfilling a product from the partner that offers the best margin.
  65. * Fulfilling a product from the partner geographically closest to the customer.
  66. * Supporting transactions in multiple currencies on the same site.
  67. * Supporting different tax treatments on the same site (eg UK VAT and US sales
  68. tax)
  69. * Having different pricing policies for different customers.
  70. It also provides a customisation layer for custom price and availability logic.
  71. There's a great deal of flexibility. See the guide to
  72. :doc:`prices and availability </topics/prices_and_availability>`
  73. for more information.
  74. Note that the :function:`oscar.templatetags.currency_filters.currency` now
  75. accepts an optional currency parameter.
  76. Payment models have abstract versions
  77. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  78. The :doc:`payment models </ref/apps/payment>` have been split into abstract- and
  79. concrete versions. This brings them inline with other Oscar apps and allows
  80. them to be customised.
  81. Wishlists
  82. ~~~~~~~~~
  83. Wishlist functionality has finally landed. Signed in customers are now able to
  84. create multiple named wishlists and add products to them. There is a new
  85. section in the customer's account where wishlists can be managed.
  86. Partner addresses
  87. ~~~~~~~~~~~~~~~~~
  88. Partners can now have addresses. These are useful for US sales tax where tax
  89. calculations need to know the origin of a product being shipped. The dashboard
  90. has been extended to allow partner addresses to be edited.
  91. Checkout
  92. ~~~~~~~~
  93. The :class:`~oscar.apps.checkout.views.PaymentDetailsView` checkout view has
  94. been restructured slightly to be more flexible. There is a new
  95. ``build_submission`` method which is responsible for building a dict of all data
  96. for passing to the ``submit`` method. This includes the shipping address and
  97. shipping method which were previously loaded indirectly within the ``submit``
  98. method. The ``submit`` method has also been extended to take additional parameters.
  99. Demo site
  100. ~~~~~~~~~
  101. Oscar now ships with a demo site along side the sandbox site. While the sandbox
  102. is a minimal Django project that uses Oscar with all its defaults, the demo site
  103. is a more realistic example of an Oscar project. It has a custom skin and makes
  104. many alterations to the default Oscar behaviour.
  105. It's features include:
  106. * A range of different product types: books, downloads, clothing
  107. * PayPal Express integration using django-oscar-paypal_
  108. * Datacash integration using django-oscar-datacash_
  109. .. _django-oscar-paypal: https://github.com/tangentlabs/django-oscar-paypal
  110. .. _django-oscar-datacash: https://github.com/tangentlabs/django-oscar-datacash
  111. .. _django-oscar-stores: https://github.com/tangentlabs/django-oscar-stores
  112. Further reading:
  113. * :doc:`The demo site </internals/sandbox>`.
  114. Django 1.5 and custom user model support
  115. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  116. Oscar now supports `custom user models`_, the headline new feature in Django
  117. 1.5. These can be used standalone or with a one-to-one profile model: Oscar's
  118. account forms inspect the model fields to dynamically pick up the fields for
  119. editing and display.
  120. There are some restrictions on what fields a custom user model must have. For
  121. instance, Oscar's default auth backend requires the user model to have an email
  122. and password field. New Oscar projects are encouraged to use the provided
  123. abstract user model as the base for their users.
  124. Further reading:
  125. * :doc:`How to use a custom user model </howto/use_a_custom_user_model>`.
  126. .. _`custom user models`: https://docs.djangoproject.com/en/dev/topics/auth/customizing/#specifying-a-custom-user-model
  127. .. _`documentation on user models`: https://docs.djangoproject.com/en/dev/topics/auth/customizing/#specifying-a-custom-user-model
  128. Accounts
  129. ~~~~~~~~
  130. The views and templates of the accounts section have been reworked to be clearer
  131. and easier to extend.
  132. Better bankcard handling
  133. ~~~~~~~~~~~~~~~~~~~~~~~~
  134. The bankcard model in the payment app has been greatly improved.
  135. Order processing changes
  136. ~~~~~~~~~~~~~~~~~~~~~~~~
  137. There are changes to order processing methods
  138. Minor changes
  139. ~~~~~~~~~~~~~
  140. * detox_ is a new dependency, which allows running `tox` tests in parallel.
  141. .. _detox: https://pypi.python.org/pypi/detox
  142. Backwards incompatible changes in 0.6
  143. =====================================
  144. Checkout
  145. ~~~~~~~~
  146. Several changes have been made to the checkout classes.
  147. * The ``submit`` method in
  148. :class:`~oscar.apps.checkout.views.PaymentDetailsView` now accepts several
  149. new parameters.
  150. * The ``handle_payment`` method in
  151. :class:`~oscar.apps.checkout.views.PaymentDetailsView` now accepts a
  152. :class:`~oscar.core.prices.Price`` instance instead of a Decimal.
  153. Signature changes
  154. ~~~~~~~~~~~~~~~~~
  155. Several classes and functions have had signature changes:
  156. * The ``basket_form`` templatetag has been altered to take the ``request`` as the
  157. first argument, not ``request.basket``.
  158. * The :class:`oscar.apps.customer.forms.EmailAuthenticationForm` form needs to
  159. be instantated with a host name so prevent redirects to external sites.
  160. * The :class:`oscar.apps.customer.forms.EmailAuthenticationForm` form needs to
  161. be instantated with a host name so prevent redirects to external sites.
  162. * The two product review forms, ``SignedInUserProductReviewForm`` and
  163. ``AnonymousUserProductReviewForm``, have been replaced by a new
  164. :class:`oscar.apps.catalogue.reviews.forms.ProductReviewForm``.
  165. Address model changes
  166. ~~~~~~~~~~~~~~~~~~~~~
  167. * The ``UserAddress.salutation`` and ``UserAddress.name`` methods are now
  168. properties.
  169. * The ``Country`` model's `is_highlighted` column is now an integer field to allow
  170. fine-grained country selection.
  171. Renamed templates
  172. ~~~~~~~~~~~~~~~~~
  173. Some templates have been renamed for greater consistency. If you are overriding
  174. these templates, ensure you rename your corresponding project templates.
  175. Many of the profile templates have been reorganised:
  176. * ``customer/address_list.html`` is renamed to
  177. ``customer/address/address_list.html``
  178. * ``customer/address_form.html`` is renamed to
  179. ``customer/address/address_form.html``
  180. * ``customer/address_delete.html`` is renamed to
  181. ``customer/address/address_delete.html``
  182. * ``customer/email.html`` is renamed to
  183. ``customer/email/email_detail.html``
  184. * ``customer/email_list.html`` is renamed to
  185. ``customer/email/email_list.html``
  186. * ``customer/order.html`` is renamed to
  187. ``customer/order/order_detail.html``
  188. * ``customer/order_list.html`` is renamed to
  189. ``customer/order/order_list.html``
  190. * ``customer/profile.html`` is renamed to
  191. ``customer/profile/profile.html``
  192. * ``customer/profile_form.html`` is renamed to
  193. ``customer/profile/profile_form.html``
  194. * ``customer/change_password_form.html`` is renamed to
  195. ``customer/profile/change_password_form.html``
  196. * ``partials/nav_profile.html`` has been removed.
  197. Template block changes
  198. ~~~~~~~~~~~~~~~~~~~~~~
  199. * The template ``dashboard/orders/order_detail.html`` has been reorganised. The
  200. ``tab_transactions`` block has been renamed to ``payment_transactions``.
  201. * In ``checkout/checkout.html``, the ``checkout-nav`` block has been renamed
  202. ``checkout_nav``.
  203. Account templates
  204. ~~~~~~~~~~~~~~~~~
  205. The templates for the customer account section have been reworked so that the
  206. profile page is much simpler. Content is no longer loaded into tabs on a single
  207. page; instead, separate pages are used to each section.
  208. Upgrading notes
  209. ===============
  210. Database migrations
  211. ~~~~~~~~~~~~~~~~~~~
  212. * Alternative product class templates now use ``slug` field instead of
  213. ``name.lower()`` to determine their filename. If you have templates for
  214. specific product classes, please update your filenames accordingly
  215. Checkout app:
  216. * Checkout has a new option "Register and continue". Option value `new` in
  217. `GatewayForm` has changed to `guest` as `new` option is used for this feature.
  218. * Payment details - create_billing_address accepts kwargs so data can be passed
  219. to it from the final page of checkout.
  220. * The session methods for loading shipping addresses and methods have been made
  221. explicit. The relevant basket *has* to be passed in now.
  222. Payment app:
  223. * The `balance` method on the source object is not a property not a method.
  224. Order app:
  225. * ``0015``: Unused ``sequence_number`` and ``is_required`` deleted from
  226. ``ShippingEventType``. Unused ``sequence_number`` deleted from
  227. ``PaymentEventType``.
  228. URLs
  229. ~~~~
  230. Migrations
  231. ~~~~~~~~~~
  232. There are new migrations in the following apps to be aware of.
  233. * Catalogue:
  234. - ``0011``: Higher ``max_length`` on FileFields and ImageFields
  235. * Promotions:
  236. - ``0003``: Higher ``max_length`` on FileFields and ImageFields
  237. * Address:
  238. - ``0003``: ``Country``'s ``is_highlighted`` is now an integer to allow
  239. finer control.
  240. * ShippingAddress:
  241. - ``0018``: ``ShippingAddress``'s ``phone_number`` is now a PhoneNumberField
  242. to allow fine validation.
  243. * Order app:
  244. - The `date` field of the ``order.AbstractCommunicationEvent``, ``order.AbstractPaymentEvent`` and
  245. ``order.AbstractShippingEvent`` models have been renamed to ``date_created`` for
  246. consistency with the rest of Oscar.
  247. Features deprecated in 0.6
  248. ==========================
  249. Accessing a product's stockrecords
  250. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  251. Several properties and methods of the core
  252. :class:`~oscar.apps.catalogue.abstract_models.AbstractProduct` class have been
  253. deprecated following the change to allow multiple stockrecords per product.
  254. * :attr:`~oscar.apps.catalogue.abstract_models.AbstractProduct.has_stockrecord`
  255. no longer makes sense when there can be more than one stockrecord. It is
  256. replaced by
  257. :attr:`~oscar.apps.catalogue.abstract_models.AbstractProduct.has_stockrecords`
  258. * :attr:`~oscar.apps.catalogue.abstract_models.AbstractProduct.stockrecord` is
  259. deprecated since it presumes there is only one stockrecord per product.
  260. Choosing the appropriate stockrecord is now the responsiblity of the
  261. :ref:`strategy class <strategy_class>`. A backward compatible version has
  262. been kept in place that selects the first stockrecord for a product. This
  263. will continue to work for sites that only have one stockrecord per product.
  264. All availability logic has been moved to :ref:`availability policies<availability_policies>`
  265. which are determined by the :ref:`strategy class <strategy_class>`.
  266. * :attr:`~oscar.apps.catalogue.abstract_models.AbstractProduct.is_available_to_buy`
  267. is deprecated. The functionality is now part of availability policies.
  268. * :meth:`~oscar.apps.catalogue.abstract_models.AbstractProduct.is_purchase_permitted`
  269. is deprecated. The functionality is now part of availability policies.
  270. Checkout session manager
  271. ~~~~~~~~~~~~~~~~~~~~~~~~
  272. The ``shipping_method`` method of the
  273. :class:`~oscar.apps.checkout.utils.CheckoutSessionData` is now deprecated in
  274. favour of using ``shipping_method_code``. It is being removed as the
  275. ``CheckoutSessionData`` class should only be responsible for retriving data
  276. from the session, not loading shipping method instances.
  277. "Partner wrappers"
  278. ~~~~~~~~~~~~~~~~~~
  279. Before Oscar 0.6, availability and pricing logic was encapsulated in "partner
  280. wrappers". A partner wrapper was a class that provided availability and price
  281. information for a particular partner, as specified by the
  282. ``OSCAR_PARTNER_WRAPPERS`` setting. The stockrecord model had several
  283. properties and methods
  284. which delegated to the appropriate wrapper for the record's partner.
  285. This functionailty is now deprecated in favour of using :ref:`strategy classes <strategy_class>`.
  286. How prices and taxes are determined is not generally a function of the partner,
  287. and so this system was not a good model. Strategy classes are much more
  288. flexible and allow better modelling of taxes and availability.
  289. The following attributes and methods from :class:`~oscar.apps.partner.abstract_models.StockRecord`
  290. are deprecated and will be removed for Oscar 0.7.
  291. * :attr:`AbstractStockRecord.is_available_to_buy <oscar.apps.partner.abstract_models.AbstractStockRecord.is_available_to_buy>`
  292. * :meth:`AbstractStockRecord.is_purchase_permitted <oscar.apps.partner.abstract_models.AbstractStockRecord.is_purchase_permitted>`
  293. * :attr:`AbstractStockRecord.availability_code <oscar.apps.partner.abstract_models.AbstractStockRecord.availability_code>`
  294. * :attr:`AbstractStockRecord.availability <oscar.apps.partner.abstract_models.AbstractStockRecord.availability>`
  295. * :attr:`AbstractStockRecord.max_purchase_quantity <oscar.apps.partner.abstract_models.AbstractStockRecord.max_purchase_quantity>`
  296. * :attr:`AbstractStockRecord.dispatch_date <oscar.apps.partner.abstract_models.AbstractStockRecord.dispatch_date>`
  297. * :attr:`AbstractStockRecord.lead_time <oscar.apps.partner.abstract_models.AbstractStockRecord.lead_time>`
  298. * :attr:`AbstractStockRecord.price_incl_tax <oscar.apps.partner.abstract_models.AbstractStockRecord.price_incl_tax>`
  299. * :attr:`AbstractStockRecord.price_tax <oscar.apps.partner.abstract_models.AbstractStockRecord.price_tax>`
  300. All the above properties and methods have effectively been moved to the availability and pricing
  301. policies that a strategy class is responsible for loading. To upgrade your
  302. codebase, replcae your partner wrapper classes with equivalent
  303. :doc:`availability and pricing policies </topics/prices_and_availability>`.
  304. Basket
  305. ~~~~~~~
  306. Now that products can have multiple stockrecords, several changes have been made
  307. to baskets to allow the appropriate stockrecord to be tracked for each basket
  308. line. The basket line model has a new field that links to the selected
  309. stockrecord and the basket itself requires an instance of the strategy class so
  310. that prices can be calculated for each line. Hence, if you are manipulating
  311. baskets directly, you need to assign a strategy class in order for prices to
  312. calculate correctly:
  313. .. code-block:: python
  314. from oscar.apps.basket import models
  315. basket = models.Basket.objects.get(id=1)
  316. basket.strategy = request.strategy
  317. With an assigned strategy class, a basket will raise a ``RuntimeError`` when
  318. attempting to calculate totals.
  319. The way a product is added to a basket has also been changed as a ``StockInfo``
  320. instance is also required.
  321. .. code-block:: python
  322. from oscar.apps.basket import models
  323. from oscar.apps.catalogue import models as product_models
  324. basket = models.Basket.objects.get(id=1)
  325. basket.strategy = request.strategy
  326. product = product_models.Product.objects.get(id=1)
  327. stockinfo = request.strategy.fetch(product)
  328. basket.
  329. Test support extension brought back into core
  330. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  331. The `Oscar test support library`_ has been ported back into Oscar core. This
  332. simplifies things and avoids circular dependency issues. If your project is
  333. using this extension, you should remove it as a dependency and use the
  334. analogous functionality from ``oscar/test/``.
  335. .. _`Oscar test support library`: https://github.com/tangentlabs/django-oscar-testsupport