| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245 |
- =======================
- Oscar 2.1 release notes
- =======================
-
- :release: 2020-07-10
-
- Welcome to Oscar 2.1! This is a significant release which includes a number of
- new features and performance improvements.
-
- .. contents::
- :local:
- :depth: 1
-
- .. _compatibility_of_2.1:
-
- Compatibility
- ~~~~~~~~~~~~~
-
- Oscar 2.1 is compatible with Django versions 2.2 and 3.0, and Python versions 3.5, 3.6, 3.7 and 3.8.
-
- Support for Django versions 1.11 and 2.0 has been dropped.
-
- .. _new_in_2.1:
-
- What's new in Oscar 2.1?
- ~~~~~~~~~~~~~~~~~~~~~~~~~~
-
- - The ability to add arbitrary surcharges to orders (e.g., a processing fee for
- a particular payment method) was introduced.
- See :ref:`how_to_surcharges` for details on how to configure this.
- This change requires a database migration.
-
- - The database performance of ``offer.Range.all_products()`` was substantially
- improved. The internals of that method have changed and specifically
- ``Range.invalidate_cached_ids()`` has been removed and replaced with
- ``Range.invalidate_cached_queryset()``.
-
- - The ``upload_to`` argument of image fields in Oscar's ``ProductImage`` and
- ``ProductAttributeValue`` models was changed to use a callable, so that
- Django doesn't generate migrations if a project modifies the ``OSCAR_IMAGE_FOLDER``
- to specify a custom directory structure for uploaded images.
- This change requires a database migration.
-
- - ``catalogue.Category`` now has an ``is_public`` boolean field that serves a
- similar purpose to ``catalogue.Product.is_public`` - i.e., to hide categories
- public views. The ``Category`` model also now has a custom manager
- that provides a ``browsable()`` queryset method that excludes non-public
- categories. This change requires a database migration.
-
- Category hierarchy implies that the children of any non-public category are
- also non-public. This is enforced through an ``ancestors_are_public`` field
- on the ``Category`` model.
-
- - A ``date_updated`` field was added to the ``basket.Line`` model, which is updated
- every time a line is saved. This change requires a database migration.
-
- Communications app
- ------------------
-
- A new ``communication`` app was introduced to provide a single point of entry
- for all communications sent by Oscar. This is a significant change with implications
- as follows:
-
- - Projects will need to add
- ``oscar.apps.communication.apps.CommunicationConfig`` to ``INSTALLED_APPS``.
-
- The ``CommunicationEventType``, ``Email`` and ``Notification`` models have
- moved from the ``customer`` app to the ``communication`` app. In order to
- preserve existing data, the table names for these models are unchanged.
-
- This change requires a database migration.
-
- - The ``Dispatcher`` class moved from ``customer.utils`` to
- ``communication.utils``. ``Dispatcher`` is now responsible for sending
- all notifications, and not just emails.
-
- - A ``CustomerDispatcher`` utility class that wraps the core ``Dispatcher``
- has been introduced to the ``customer`` app for sending communications to
- customers.
-
- - An ``AlertsDispatcher`` utility class that wraps the core ``Dispatcher``
- has been introduced to the ``customer.alerts`` module for sending product
- alerts.
-
- - An ``OrderDispatcher`` utility class that wraps the core ``Dispatcher``
- has been introduced to the ``order`` app for sending order related
- communications.
-
- - A new setting, ``OSCAR_SAVE_SENT_EMAILS_TO_DB`` controls whether emails
- sent through the ``Dispatcher`` are saved to the database. This defaults
- to ``True``.
-
- - The ability to send multipart emails with attachments was added to the new
- dispatcher.
-
- - All communication email templates (``commtype_*``) have moved from
- moved from ``customer/emails`` to ``communication/emails``.
-
- - Templates in ``customer/email/`` and ``customer/notification/`` have moved
- to ``communication/email/`` and ``communication/notification/``.
-
- - An ``absolute_url`` template tag was introduced to facilitate generating
- absolute URLs in templates for a given domain and path. The schema for
- generated URLs is configured via the ``OSCAR_URL_SCHEMA`` setting, which defaults
- to ``http``.
-
- Backwards incompatible changes in Oscar 2.1
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
- - The ``category`` field has been removed from the
- ``communication.Notification`` model. This change requires database migration.
-
- - The ``checkout.mixins.OrderPlacementMixin.send_confirmation_message``
- method has been replaced with a new ``send_order_placed_email`` method.
-
- - ``customer.notifications.context_processors.notifications`` has moved to
- ``communication.notifications.context_processors.notifications``.
-
- Bug fixes
- ~~~~~~~~~
-
- - Fixed a bug in the handling of requests to save an item in the basket for
- later(:issue:`3215`).
-
- - Fixed an error when deleting an offer whose related conditions/benefits have
- been deleted.
-
- - Fixed handling of count conditions in ``MultibuyDiscountBenefit``.
- Previously, when a count condition was used with this benefit it would result
- in a discount being applied for all items in the basket rather than the
- cheapest one.
-
- - Fixed a bug where a line could not be deleted from the basket, if the basket
- had another line with a validation error - i.e. its product was out of stock
- (see :issue:`2791` and :issue:`1654`).
-
- - Fixed a bug where non-public child products were not excluded from parent product
- forms and detail views.
-
- Removal of deprecated features
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
- - Support for verifying order hashes using an insecure MD5 algorithm generated
- by Oscar 1.5 and below has been dropped. The ``OSCAR_DEPRECATED_ORDER_VERIFY_KEY``
- setting is no longer used. Order verification hashes generated by Oscar 1.5
- and lower will no longer validate.
-
- - ``offer.Range.contains()`` has been removed. Use ``contains_product()`` instead.
-
- - ``catalogue.managers.ProductManager`` has been removed. Use
- ``catalogue.managers.ProductQuerySet.as_manager()`` instead.
-
- - ``catalogue.managers.BrowsableProductManager`` has been removed. Use
- ``Product.objects.browsable()`` instead.
-
- - ``catalogue.Product.browsable`` has been removed. Use
- ``Product.objects.browsable()`` instead.
-
- - Invalid URLs supplied to ``OSCAR_DASHBOARD_NAVIGATION`` are no longer ignored.
- URLs that cannot be resolved will now result in a ``NoReverseMatch`` exception.
- URLs that are not provided by a subclass of ``oscar.core.application.OscarDashboardConfig``
- will result in a ``KeyError``.
-
- - ``customer.forms.PasswordResetForm.get_reset_url`` has been removed.
-
- - The internal and undocumented class ``oscar.core.compat.UnicodeCSVReader``
- has been removed. Use ``csv.reader`` instead.
-
- Minor changes
- ~~~~~~~~~~~~~
-
- - ``OrderPlacementMixin.place_order`` now ignores inactive vouchers when placing
- an order (instead of raising an exception), for consistency with how
- the basket flows handle inactive vouchers.
-
- - Fixed the logic of ``StockRequired.parent_availability_policy`` to use
- child products to determine availability of children, rather than the parent.
-
- - ``customer.forms.PasswordResetForm`` now uses the parent class' ``get_users()``
- method to determine the list of users to send an email to. ``get_users()``
- filters out users who do not currently have a usable password - which
- did not happen previously.
-
- This change was made in response to changes in Django to address
- CVE-2019-19844. Oscar's ``PasswordResetForm`` was not vulnerable to the issue
- in Django's form, but it was possible to send a password reset email to
- unintended recipients because of unicode character collision.
-
- - ``catalogue.Product.is_public`` is now an indexed field. This change requires
- a database migration.
-
- - When a voucher that was created through the Oscar dashboard is deleted, the
- auto-generated offer that was created with the voucher is also deleted.
-
- - Fixed the ``brand_title`` block in ``partials/brand.html`` so that it doesn't span unclosed HTML tags.
-
- - ``customer.views.ProfileUpdateView.form_valid`` was modified
- to use a new ``send_email_changed_email`` method.
-
- - ``customer.views.ChangePasswordView.form_valid`` was modified
- to use a new ``send_password_changed_email`` method.
-
- - A ``public`` method was added to the ``ProductQuerySet``, which filters on products with ``is_public=True``.
-
- Dependency changes
- ~~~~~~~~~~~~~~~~~~
-
- Python package dependencies:
-
- - Upgraded ``pillow`` to version 6.0.0 or higher.
- - Upgraded ``django-extra-views`` to version 0.13.
- - Upgraded ``django-haystack`` to version 3.0 or higher.
- - Upgraded ``django-phonenumber-field`` to version 3.0.
- - Upgraded ``django-tables2`` to version 2.2.
- - Upgraded ``sorl-thumbnail`` (optional requirement) to version 12.6.
- - Upgraded ``easy-thumbnails`` (optional requirement) to version 2.7.
-
-
- Javascript dependencies:
-
- - Upgraded ``jquery`` to version 3.5.
- - Upgraded ``inputmask`` to version 5.0.
- - Upgraded ``select2`` to version 4.0.
- - Upgraded ``tinymce`` to version 5.3.
-
- .. _deprecated_features_in_2.1:
-
- Deprecated features
- ~~~~~~~~~~~~~~~~~~~
-
- - ``customer.alerts.utils.send_alerts`` is deprecated.
- Use ``AlertsDispatcher.send_alerts`` instead.
-
- - ``customer.alerts.utils.send_alert_confirmation`` is deprecated.
- Use ``AlertsDispatcher.send_product_alert_confirmation_email_for_user``
- instead.
-
- - ``customer.alerts.utils.send_product_alerts`` is deprecated.
- Use ``AlertsDispatcher.send_product_alert_email_for_user`` instead.
-
- - ``customer.notifications.services.notify_user`` is deprecated.
- Use Dispatcher.notify_user``.
-
- - ``customer.notifications.services.notify_users`` is deprecated.
- Use ``Dispatcher.notify_users`` instead.
|