Symptom:
Adding to basket did not work
Cause:
Was not passing the request variable as part of the context and so the
basket form could not be generated. Hence adding to basket led to an
error.
Solution:
Add request to the context returned by the helper function.
This involves various template changes to adapt to new bootstrap.
Also:
* New responsive sheets and added responive classes into templates
* Add navigation to accounts section
* Simplify product listing templates
* Product lists enlarged images
* Single promo in the side bar
* Add btn-full for button full width responsive
* Checkout nav slightly adjusted
* Add responsive nav into the accounts
* Correct CSS class-name typo
* Make empty basket message a bit more sensible
* Remove in-page link to product description
* Widen price columns on basket/checkout as some currency symbols start
wrapping
* Add whitespace to detail page availability messages
* Remove snowcone from project
Issues:
Fixes #351
Fixes #349
Fixes #345
Was an "image-not-found" image from another project, where I originally
harvested the testing images.
Also, sym-link in Oscar's image-not-found image to the assets/media
folder.
Add reverse relations to preselect_related on category view
The availability wrapper needs to look at a product's class, which gives
two extra DB lookups for each product in the list. This adds 50 DB
queries to the listing view and makes everybody sad.
This fix looks a little ugly but reduces the number of queries to ~25
(with cache enabled).
Consumption now sorts the basket lines in descending price order so that
the most expensive products are consumed first. This means that
multibuys apply in a more natural way.
Fixes #348
Almost all textareas have it enabled. The corresponding variables in
the main templates have been marked 'safe'.
There are a few areas where the whitespace around the description isn't
quite right. Will fix later.
The widget is enabled by setting a class on the form 'wysiwyg'. It's
much easier to use the form classes as you don't normally have access to
the textarea classes directly. To do that, you would need a custom form
widget and to build each form class to use it (rather than relying on
modelforms). We may have to switch to this at some point if the current
implementation becomes too clunky. We'll see.
Add fix for OrderDiscount model when offer deleted
The OrderDiscount did not store (a copy) of the offer
name within a separate field which causes an issue when the
offer is deleted. E.g. it breaks the order history view for
the customer because no offer data is available.
I have added a new field to OrderDiscount that is automatically
populated from the offer.name field. This works in the same way
as voucher_code does in the same model.
I also found two issues with the voucher implementation within
the same model that are fixed now.
Fixes #330
Move basket status constants onto the Basket class
It was a mistake to have them at module level as it meant it was a pain
to import them when they were needed for filtering. Having them on
the basket is much nicer as they available whenever the Basket class is.
This commit may cause a few gremlins for people updating to 0.4 but I
think it's a necessary pain at this stage. It's trivial to fix too.
This requires a new templatetag that annotates the field with the widget
type. The motivation is so that normal forms (not using
form-horizontal) can render checkboxes differently - wrapping the input
in the label element. This is advocated by bootstrap amongst others:
http://twitter.github.com/bootstrap/base-css.html#forms
At the moment, checkboxes rendered in a form with class
'form-horizontal' don't look right - they need some adjusting in the
CSS.
This makes it easier to use the Oscar form mark-up but rending a form
manually.
For example::
<form action="." method="post">
<legend>First set of fields</legend>
{% include 'partials/form_field.html' with field=form.name %}
{% include 'partials/form_field.html' with field=form.description %}
<legend>Second set of fields</legend>
{% include 'partials/form_field.html' with field=form.start_date %}
{% include 'partials/form_field.html' with field=form.end_date %}
</form>