<commit_before>.. _changelog:

=========================
Changelog for django-SHOP
=========================

0.10
====

* In the backend, ``OrderAdmin`` and ``OrderItemAdmin`` may render the dictionary ``extra`` from
  their associated models using a special template.
* In ``OrderAdmin`` use methods ``get_fields()`` and ``get_readonly_fields()`` as intended.
* Tested with Django-1.10. Drop support for Django-1.8.
* If an anonymous customer logs in, his current cart is merged with a cart, which has previously
  been created. This has been adopted to re-use the method ``Product.is_in_cart()``.
* Added method ``post_process_cart_item()`` to :class:`shop.modifiers.base.BaseCartModifier`.
* Moved field ``salutation`` from :class:`shop.models.customer.BaseCustomer` into the merchant
  implementation. If your project does not use the provided default customer model
  :class:`shop.models.defaults.customer.Customer`, then you should add the ``salutation`` field
  to your implementation of the Customer model, if that makes sense in your use-case.
* Refactored the defaults settings for ``shop`` using an ``AppSettings`` object.
* Refactored all serializers into their own folder ``shop/serializers`` with submodules
  ``bases.py``, ``cart.py``, ``order.py`` and ``defaults.py``. The serializers
  ``CustomerSerializer``, ``ProductSummarySerializer`` and ``OrderItemSerializer`` now are
  configurable through the application settings.
* Renamed ``ProductDetailSerializerBase`` -> ``BaseProductDetailSerializer`` and
  ``ProductSummarySerializerBase`` -> ``BaseProductSummarySerializer`` to be consistent with the
  naming conventions used by the Django REST Framework.
* AngularJS directive ``<shop-auth-form ...>`` now listens of the event "pressed ENTER key"
  and submits the form data accordingly.
* Upgraded to AngularJS version 1.5.9.
* HTML5 mode is the default now.
* The previously required additional endpoint for the autocomplete search, can now be be merged
  into the same endpoint as connected to the catalog's list view. This has been made possible by
  the wrapper :class:`shop.search.views.CMSPageCatalogWrapper` which dispatch incoming requests
  to either the :class:`shop.views.catalog.ProductListView` or, for search queries to
  :class:`shop.search.views.SearchView`.
* Added choice option "Infinite Scroll" to the Cascade plugins **Catalog List View** and
  **Search Results**. They influence if the paginator is rendered or trigger an event to load
  more results from the server.
* Changed all Cascade plugins to follow the new API introduced in **djangocms-cascade** version 0.12.
* Directive ``shop-product-filter`` must be member of a ``<form ...>`` element.
* Unified the plugins **ShippingAddressFormPlugin** and **BillingAddressFormPlugin** into one plugin
  named **CheckoutAddressPlugin**, where the merchant can choose between the shipping- or billing
  form.
* Refactored :class:`shop.forms.checkout.AddressForm` and fixed minor bugs when editing multiple
  addresses.


0.9.3
=====

* Added template context processor :func:`shop.context_processors.ng_model_options` to add the
  settings ``EDITCART_NG_MODEL_OPTIONS`` and ``ADD2CART_NG_MODEL_OPTIONS``. Please check your
  templates to see, if you still use ``ng_model_options``.
* Allows to add children to the ``CartPlugin``. These children are added to the table foot of the
  rendered cart.
* Added AngularJS directive ``<ANY shop-forms-set>`` which can be used as a wrapper, when the
  proceed button shall be added to a page containing ``<form ...>`` elements with built in<commit_msg>added to changelog from upstream changes<commit_after>.. _changelog:

=========================
Changelog for django-SHOP
=========================

0.10
====

* In the backend, ``OrderAdmin`` and ``OrderItemAdmin`` may render the dictionary ``extra`` from
  their associated models using a special template.
* In ``OrderAdmin`` use methods ``get_fields()`` and ``get_readonly_fields()`` as intended.
* Tested with Django-1.10. Drop support for Django-1.8.
* If an anonymous customer logs in, his current cart is merged with a cart, which has previously
  been created. This has been adopted to re-use the method ``Product.is_in_cart()``.
* Added method ``post_process_cart_item()`` to :class:`shop.modifiers.base.BaseCartModifier`.
* Moved field ``salutation`` from :class:`shop.models.customer.BaseCustomer` into the merchant
  implementation. If your project does not use the provided default customer model
  :class:`shop.models.defaults.customer.Customer`, then you should add the ``salutation`` field
  to your implementation of the Customer model, if that makes sense in your use-case.
* Refactored the defaults settings for ``shop`` using an ``AppSettings`` object.
* Refactored all serializers into their own folder ``shop/serializers`` with submodules
  ``bases.py``, ``cart.py``, ``order.py`` and ``defaults.py``. The serializers
  ``CustomerSerializer``, ``ProductSummarySerializer`` and ``OrderItemSerializer`` now are
  configurable through the application settings.
* Renamed ``ProductDetailSerializerBase`` -> ``BaseProductDetailSerializer`` and
  ``ProductSummarySerializerBase`` -> ``BaseProductSummarySerializer`` to be consistent with the
  naming conventions used by the Django REST Framework.
* AngularJS directive ``<shop-auth-form ...>`` now listens of the event "pressed ENTER key"
  and submits the form data accordingly.
* Upgraded to AngularJS version 1.5.9.
* HTML5 mode is the default now.
* The previously required additional endpoint for the autocomplete search, can now be be merged
  into the same endpoint as connected to the catalog's list view. This has been made possible by
  the wrapper :class:`shop.search.views.CMSPageCatalogWrapper` which dispatch incoming requests
  to either the :class:`shop.views.catalog.ProductListView` or, for search queries to
  :class:`shop.search.views.SearchView`.
* Added choice option "Infinite Scroll" to the Cascade plugins **Catalog List View** and
  **Search Results**. They influence if the paginator is rendered or trigger an event to load
  more results from the server.
* Changed all Cascade plugins to follow the new API introduced in **djangocms-cascade** version 0.12.
* Directive ``shop-product-filter`` must be member of a ``<form ...>`` element.
* Unified the plugins **ShippingAddressFormPlugin** and **BillingAddressFormPlugin** into one plugin
  named **CheckoutAddressPlugin**, where the merchant can choose between the shipping- or billing
  form.
* Refactored :class:`shop.forms.checkout.AddressForm` and fixed minor bugs when editing multiple
  addresses.
* In address models, replaced ``CharField`` for ``country`` against a special ``CountryField``.
* Change value of ``BaseShippingAddress.address_type`` to ``shipping`` and
  ``BaseBillingAddress.address_type`` to ``billing``.
* Method ``shop.models.order.OrderManager.get_latest_url()`` falls back to
  ``reverse('shop-order-last')`` if no such page with ID ``shop-order-last`` was found in the CMS.
* Use menu_title instead of page title for link and tooltip content.
* In ``DialogForm``, field ``plugin_id`` is not required anymore.


0.9.3
=====

* Added template context processor :func:`shop.context_processors.ng_model_options` to add the
  settings ``EDITCART_NG_MODEL_OPTIONS`` and ``ADD2CART_NG_MODEL_OPTIONS``. Please check your
  templates to see, if you still use ``ng_model_options``.
* Allows to add children to the ``CartPlugin``. These children are added to the table foot of the
  rendered cart.
* Added AngularJS directive ``<ANY shop-forms-set>`` which can be used as a wrapper, when the
  proceed button shall be added to a page containing ``<form ...>`` elements with built in
{'fraction_non_alphanumeric': 0.11331005044625533, 'fraction_numerical': 0.00491527616091062, 'mean_word_length': 5.165869218500798, 'pattern_counts': {'":': 0, '<': 11, '<?xml version=': 0, '>': 15, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '6155975', 'n_tokens_mistral': 2094, 'n_tokens_neox': 2029, 'n_words': 878}