Commits

marconius committed 15d612a Draft Merge

merging satchmo tip.

Comments (0)

Files changed (407)

 .*.sw?
 *.egg
 .git
+.emacs.desktop*
 1d754f284da7bb421464de410156c9e9897fa5cb added_es_ES_locale
 1d754f284da7bb421464de410156c9e9897fa5cb added_es_ES_locale
 0000000000000000000000000000000000000000 added_es_ES_locale
+3250f63baa751322cdfea2e9cd39a1880896f431 0.9.2
+[main]
+host = https://www.transifex.net
+
+[satchmo.ocale-en-LC_MESSAGES-django-po_0]
+file_filter = satchmo/apps/l10n/locale/<lang>/LC_MESSAGES/django.po
+source_file = satchmo/apps/l10n/locale/en/LC_MESSAGES/django.po
+source_lang = en
+
+[satchmo.ocale-en-LC_MESSAGES-django-po_1]
+file_filter = satchmo/apps/payment/locale/<lang>/LC_MESSAGES/django.po
+source_file = satchmo/apps/payment/locale/en/LC_MESSAGES/django.po
+source_lang = en
+
+[satchmo.ocale-en-LC_MESSAGES-django-po_2]
+file_filter = satchmo/apps/payment/modules/giftcertificate/locale/<lang>/LC_MESSAGES/django.po
+source_file = satchmo/apps/payment/modules/giftcertificate/locale/en/LC_MESSAGES/django.po
+source_lang = en
+
+[satchmo.ocale-en-LC_MESSAGES-django-po_3]
+file_filter = satchmo/apps/product/locale/<lang>/LC_MESSAGES/django.po
+source_file = satchmo/apps/product/locale/en/LC_MESSAGES/django.po
+source_lang = en
+
+[satchmo.ocale-en-LC_MESSAGES-django-po_7]
+file_filter = satchmo/apps/satchmo_ext/newsletter/locale/<lang>/LC_MESSAGES/django.po
+source_file = satchmo/apps/satchmo_ext/newsletter/locale/en/LC_MESSAGES/django.po
+source_lang = en
+
+[satchmo.ocale-en-LC_MESSAGES-django-po_9]
+file_filter = satchmo/apps/satchmo_ext/productratings/locale/<lang>/LC_MESSAGES/django.po
+source_file = satchmo/apps/satchmo_ext/productratings/locale/en/LC_MESSAGES/django.po
+source_lang = en
+
+[satchmo.ocale-en-LC_MESSAGES-django-po_15]
+file_filter = satchmo/apps/satchmo_store/accounts/locale/<lang>/LC_MESSAGES/django.po
+source_file = satchmo/apps/satchmo_store/accounts/locale/en/LC_MESSAGES/django.po
+source_lang = en
+
+[satchmo.ocale-en-LC_MESSAGES-django-po_16]
+file_filter = satchmo/apps/satchmo_store/contact/locale/<lang>/LC_MESSAGES/django.po
+source_file = satchmo/apps/satchmo_store/contact/locale/en/LC_MESSAGES/django.po
+source_lang = en
+
+[satchmo.ocale-en-LC_MESSAGES-django-po_17]
+file_filter = satchmo/apps/satchmo_store/shop/locale/<lang>/LC_MESSAGES/django.po
+source_file = satchmo/apps/satchmo_store/shop/locale/en/LC_MESSAGES/django.po
+source_lang = en
+
+[satchmo.ocale-en-LC_MESSAGES-django-po_18]
+file_filter = satchmo/apps/satchmo_utils/locale/<lang>/LC_MESSAGES/django.po
+source_file = satchmo/apps/satchmo_utils/locale/en/LC_MESSAGES/django.po
+source_lang = en
+
+[satchmo.ocale-en-LC_MESSAGES-django-po_19]
+file_filter = satchmo/apps/shipping/locale/<lang>/LC_MESSAGES/django.po
+source_file = satchmo/apps/shipping/locale/en/LC_MESSAGES/django.po
+source_lang = en
+
+[satchmo.ocale-en-LC_MESSAGES-django-po_20]
+file_filter = satchmo/apps/tax/locale/<lang>/LC_MESSAGES/django.po
+source_file = satchmo/apps/tax/locale/en/LC_MESSAGES/django.po
+source_lang = en
+
-Copyright (c) 2009, Satchmo Project
+Copyright (c) 2012, Satchmo Project
 All rights reserved.
 
 Redistribution and use in source and binary forms, with or without
 
 # General information about the project.
 project = u'Satchmo'
-copyright = u'2010, Chris Moffitt'
+copyright = u'2012, Chris Moffitt'
 
 # The version info for the project you're documenting, acts as replacement for
 # |version| and |release|, also used in various other places throughout the
 # built documents.
 #
 # The short X.Y version.
-version = '0.9.2'
+version = '0.9.3'
 # The full version, including alpha/beta/rc tags.
-release = '0.9.2-development'
+release = '0.9.3-Dev'
 
 # The language for content autogenerated by Sphinx. Refer to documentation
 # for a list of supported languages.

docs/configuration.txt

 
     Whether or not SSL should be enabled for the checkout modules.
 
+  ``'DOCUMENT_CONVERTER'``
+
+    :default: ``'shipping.views.TRMLDocument'``
+
+    Which document generation system to use. See :ref:`documents_settings`.
+
 2. In addition to the Satchmo specific settings, there are some Django settings you will want to make sure are properly set:
 
     - Make sure that your ``DATABASES['default']['ENGINE']`` variable is also set correctly.
     - You should ensure that all of your paths are setup correctly.  Key ones to look at are:
 
-        + ``MEDIA_ROOT`` (this is where images will be stored)
-        + ``MEDIA_URL``
-        + ``ADMIN_MEDIA_PREFIX``
+        + ``MEDIA_ROOT`` this is where product images and other uploadable will be stored
+        + ``MEDIA_URL``   '/media/'
+        + ``STATIC_ROOT`` directory for css, js and template images, where they are collected
+        + ``STATIC_URL``  '/static/'
+        + ``STATICFILES_DIRS`` additional directories where search the source static files
+        + ``ADMIN_MEDIA_PREFIX``  (obsoleted with Django 1.4)
         + ``TEMPLATE_DIRS``
 
+    Satchmo uses for media files and destination static files different
+    directories, as it is required by Django, but the source directories are
+    for backward compatibility the same: project...directory/static/
+    However directories can be easy set different now and it is better for the future.
+
 .. index::
    single: settings; L10N
 
 The ``L10N_SETTINGS`` variable also allows you to control whether or not translation fields
 should be displayed in the admin. In the example above, they will be disabled. The default is ``True``
 
+.. index::
+   single: settings; PDF
+   single: settings; documents
+
+.. _documents_settings:
+
+Setting up document generation
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+.. versionchanged: 0.9.3
+
+Satchmo is able to generate a various range of *documents*
+that generally need to be printed on plain old paper
+or on an equivalent electronic format
+(such as :abbr:`PDF (Portable Document Format)`).
+
+Examples of these documents are invoices,
+packing slips and shipping labels
+(although the system can be adapted to much more than this).
+
+For new projects, Satchmo renders these documents as normal HTML pages,
+which have been slightly optimized for direct printing
+(i.e. from the browser).
+
+Should this not be enough for you,
+Satchmo also includes two (optional) ways
+to export said documents in :abbr:`PDF (Portable Document Format)`:
+one based on trml2pdf_ and the other based on _wkhtmltopdf.
+
+Which system to use is controlled by the ``'DOCUMENT_CONVERTER'`` key
+within the ``SATCHMO_SETTINGS`` dictionary,
+which should contain
+the full dotted path of the *document converter* to use.
+
+wkhtmltopdf
+"""""""""""
+
+wkhtmltopdf_ is a program that contains a statically compiled,
+headless WebKit rendering engine
+(which is the basis of succesful browsers
+such as Safari, Google Chrome,
+and the default browsers on the two most popular mobile platforms).
+
+Installing it is as simple as downloading and unzipping the release
+for the platform you are using.
+After doing that, keep note of the directory where you have unzipped
+the release, and then enable it in your settings file.
+
+To do the latter, set the ``'DOCUMENT_CONVERTER'`` key
+within ``SATCHMO_SETTINGS`` dictionary
+to ``'shipping.views.WKHTMLDocument'``.
+Then you must tell Satchmo where the wkhtmltopdf_ binary can be found,
+by adding a ``'WKHTML2PDF_BINARIES'`` key in the dictionary,
+whose value is another dictionary
+where the keys are the operating system categories
+as reported by ``sys.platform``
+and the values are the absolute paths to the corresponding wkhtmltopdf_
+binary.
+
+.. Note::
+   You are **not required** to fill in a key for each platform:
+   the key of the platform you are on is sufficient.
+
+The values for the keys can be obtained by looking at the documentation
+for the core module ``sys``,
+but here is a quick,
+non authoritative and incomplete list:
+
+    * ``linux2`` for Linux (``linux`` on Python 3.3 and above)
+    * ``darwin`` for Mac OS X
+    * ``win32`` for Windows
+
+Therefore, if you are on a Linux machine you will do::
+
+    SATCHMO_SETTINGS = {
+        ...
+        'DOCUMENT_CONVERTER': 'shipping.views.WKHTMLDocument',
+        'WKHTML2PDF_BINARIES': {
+            'linux2': '/path/to/wkhtmltopdf-i386'
+        },
+        ...
+    }
+
+While on Mac OS X you will do::
+
+    SATCHMO_SETTINGS = {
+        ...
+        'DOCUMENT_CONVERTER': 'shipping.views.WKHTMLDocument',
+        'WKHTML2PDF_BINARIES': {
+            'darwin': '/path/to/wkhtmltopdf'
+        },
+        ...
+    }
+
+.. _document_settings_trml2pdf:
+
+trml2pdf
+""""""""
+
+If you wish to use trml2pdf_, you must first install Reportlab
+(based on the description for your OS
+`here <http://www.reportlab.com/software/opensource/rl-toolkit/download/>`_)
+and then trml2pdf_ itself::
+
+    pip install http://www.satchmoproject.com/snapshots/trml2pdf-1.2.tar.gz
+
+Then you must set the ``'DOCUMENT_CONVERTER'`` key
+within ``SATCHMO_SETTINGS`` dictionary
+to ``'shipping.views.TRMLDocument'``.
+
+Customizing templates
+"""""""""""""""""""""
+
+If you wish to customize templates,
+keep in mind that they are located in ``shop/docs/html``
+within the ``shop`` application
+for HTML templates
+(used by the default HTML generator, and by the wkhtmltopdf_ one)
+and within ``shop/docs/rml``
+for the trml2pdf_ ones.
+
+Developing your own
+"""""""""""""""""""
+
+If you wish to develop your own *document converter*, take a look at
+``shipping.views`` and implement a class with the same methods as
+``HTMLDocument``.
+
+You will then be able to activate it by setting ``'DOCUMENT_CONVERTER'``
+to your class *full dotted name*
+(e.g. ``'my.module.converter.MyDocument``)
+
 .. Note::
     If you use a unicode character, you'll need to have an encoding at the top
     of your settings.py file::
 
 .. _Authorize.net: http://www.authorize.net/
 .. _Mailman: http://www.gnu.org/software/mailman/
+.. _trml2pdf: http://pypi.python.org/pypi/trml2pdf/
+.. _wkhtmltopdf: http://code.google.com/p/wkhtmltopdf/

docs/custom-payment.txt

 
 For most processors, a simple file would look like this::
 
-    from django.conf.urls.defaults import *
+    from django.conf.urls import *
     from livesettings import config_value, config_get_group
 
 

docs/customization.txt

 the items that are displayed on the quick order page so that only featured items are shown. The full 
 urls.py is shown below::
 
-    from django.conf.urls.defaults import *
+    from django.conf.urls import *
 
     # Uncomment the next two lines to enable the admin:
     # from django.contrib import admin

docs/directory_structure.txt

         This application is useful if you have different brands of products that you want to use to
         categorize and display your products.
 
-    **contrib**
-        This application contains one small helper function that modifies the price
-        calculation to count all items in the cart when figuring quantity discounts.
-
-    **metrics**
-        The metrics app has a Log Middleware which you can add to your middleware and capture
-        items that are being viewed.
-
     **newsletter**
         Satchmo has two basic options for handling newsletter configurations. You can use a simple
         database list or interface with mailman. See :ref:`newsletter`.

docs/email-verification.txt

     - Account Verification -> Email
     - Days to verify Account -> Your integer value here
 
-.. _django-registration: http://code.google.com/p/django-registration/
+.. _django-registration: https://bitbucket.org/hynekcer/django-registration/
 

docs/images/admin-product-settings.png

Removed
Old image
 .. toctree::
    :maxdepth: 1
 
+   release-notes-0-9-3
    release-notes-0-9-2
    release-notes-0-9-1
    release-notes-0-9

docs/introduction.txt

 
 Current Development Status
 --------------------------
-With the release of version 0.5, Satchmo entered beta status.  The most recent release is 0.9.1 and
-includes many improvements and fixes over 0.9.  All users are encouraged to use this latest version. 
-Please refer to this document for the backwards incompatible changes - http://bitbucket.org/chris1610/satchmo/wiki/BackwardsIncompatibleChanges
+With the release of version 0.5, Satchmo entered beta status.  The most recent release is 0.9.2 and
+includes many improvements and fixes over 0.9.1.  All users are encouraged to use this latest version. 

docs/new_installation.txt

 you have write access to. In the below example, we use :file:`/home/user/src`. You are expected to modify the path to fit your needs.
 
 .. warning::
-   You must have Django >= 1.2.3 properly installed.
+   You must have Django 1.4.x properly installed. Satchmo is not compatible with Django 1.5 at this time.
 
 A Quick Note About Installing Dependencies
 ------------------------------------------
 All of these will work fine with Satchmo, but in the interest of keeping this as
 straightforward as possible, we show how to install the packages with either:
 
-  - :command:`easy_install`, or
+  - :command:`pip`, or
   - :command:`python setup.py install` on a source code checkout (with mercurial)
 
 .. note::
     The provided egg and tar files by the various dependencies may not be the
     most current installation, so you should ensure that the version recommended
-    by satchmo (see :doc:`requirements`) is available via
-    :command:`easy_install` before proceeding.
+    by satchmo (see :doc:`requirements`) is available via `easy_install` before proceeding.
 
 Installing Dependencies
 -----------------------
 
 #. Install required dependencies (this may vary based on your OS of choice)::
 
-        easy_install pycrypto
-        easy_install http://www.satchmoproject.com/snapshots/trml2pdf-1.2.tar.gz
-        easy_install django-registration
-        easy_install PyYAML
-
-   .. note::
-      If you have Python 2.4 installed, you will need to install elementtree also::
-
-        easy_install elementtree
+        pip install pycrypto
+        pip install pyyaml
 
 #. Install Python Imaging Library. There are multiple options for installing
    this application; please use one of the options below:
 
        sudo apt-get install python-imaging
 
-#. Install Reportlab based on the description for your OS `here <http://www.reportlab.com/software/opensource/rl-toolkit/download/>`_
+#. Install django-threaded-multihost::
 
-#. Install django-threaded-multihost:
+        pip install django-threaded-multihost
 
-   - Check out from source::
+#. Install django-app-plugins::
 
-       hg clone http://bitbucket.org/bkroeze/django-threaded-multihost/
-       cd /path/to/django-threaded-multihost
-       python setup.py install
+        pip install django-app-plugins
 
-#. Install django-app-plugins:
+#. Install sorl-thumbnail::
 
-   - Check out the satchmo-enhanced version::
+        pip install sorl-thumbnail
 
-       hg clone http://bitbucket.org/bkroeze/django-caching-app-plugins/
-       cd /path/to/django-caching-app-plugins
-       python setup.py install
+#. Install signals-ahoy::
 
-#. Install sorl-thumbnail:
+        pip install django-signals-ahoy
 
-   - Using pip::
-   
-       pip install sorl-thumbnail==3.2.5
+#. Install livesettings::
 
-#. Install signals-ahoy:
+        pip install django-livesettings
 
-   - Check out from source::
+#. Install keyedcache::
 
-       hg clone http://bitbucket.org/bkroeze/django-signals-ahoy/
-       cd /path/to/django-signals-ahoy
-       python setup.py install
-
-#. Install livesettings:
-
-   - Check out from source::
-
-       hg clone http://bitbucket.org/bkroeze/django-livesettings/
-       cd /path/to/djang-livesettings
-       python setup.py install
-
-   .. versionadded:: 0.9.1
-
-#. Install keyedcache:
-
-   - Check out from source::
-
-       hg clone http://bitbucket.org/bkroeze/django-keyedcache/
-       cd /path/to/django-keyedcache
-       python setup.py install
+        pip install django-keyedcache
 
    .. versionadded:: 0.9.1
 
 
    You may choose to install these dependencies by running::
 
-     easy_install Sphinx
-     easy_install docutils
+        pip install sphinx
+        pip install docutils
 
 #. Satchmo also uses South for database migrations. You may also install it::
 
-     easy_install South
+        pip install South
 
    .. seealso::
 
 
    .. versionadded:: 0.9.1
 
+#. If you use the Fedex shipping module, you will need to install 2 additional modules::
+
+        pip install fedex
+        pip install suds
+
+#. Install django-registration:
+
+        pip install django-registration
+
+
 Installing Satchmo into your path
 ---------------------------------
 
 document will discuss some of the particular configuration items to keep in
 mind for each module.
 
+There are 3 primary types of payment modules in Satchmo:
+    
+    1. Modules based on views not asking for credit card number on the merchant site:
+
+        Google Checkout, PayPal, Sermepa.
+
+    2. Modules that collect and process a card number:
+        
+        Authorize.net Cybersource.net, Sage Pay, TrustCommerce.
+
+    3. Modules which are not typical payment gateways:
+        
+        Auto success, COD (cash on delivery), dummy, gift certificate, purchase order.
+
 .. index:: Authorize.net
 
 Authorize.net
 will break when the payment module calls PayPal again in utf-8 and there are special characters in the call. The solution is to login to 
 PayPal and change the website encoding of your account on PayPal to utf-8 in your profile settings (bottom right link on the profile page).
 
+.. index:: Payflow Pro
+
+Payflow pro payment method
+--------------------------
+
+This payment communicates with `PayPal's PayflowPro <https://merchant.paypal.com/us/cgi-bin/?cmd=_render-content&content_ID=merchant/payment_gateway>`_ system.
+
+You will need a payflow gateway account, and a merchant bank account to link it to. At the moment of this writing, the service was available in the
+United States, Australia, Canada and New Zealand only.
+
+Dependencies
+^^^^^^^^^^^^
+
+You must install `python-payflowpro <https://github.com/bkeating/python-payflowpro.git>`_ . It's recommended that you install it using pip::
+
+    pip install git+git://github.com/bkeating/python-payfowpro.git#egg=python-payflowpro`. If this doesn't work you might have an old version of git. Try with
+    pip install -e git+git://github.com/bkeating/python-payflowpro.git#egg=python-payflowpro`, but I really recommend you upgrade pip if at all possible.
+
+Installation
+^^^^^^^^^^^^
+Simply add 'payment.modules.payflowpro' to your INSTALLED_APPS
+
+Settings
+^^^^^^^^
+No specific django settings for this app.
+
+Livesettings
+^^^^^^^^^^^^
+When you activate this app, you will see a new PayflowPro Payment Settings tab
+in your site's livesettings page. Here you can select whether to use real
+payments or not, which types of credit cards you want to accept, whether to use
+a capture or authorize-capture sales model, the name the user will see in the
+checkout screens, and the URL this module will work under.
+
+Most important are the Partner, Vendor, User, and Password settings. You will
+receive this data from PayPal when you sign up for your account.
+
+What Works
+^^^^^^^^^^
+Basic authorize and capture work.
+
+TODO
+^^^^
+    * write unit tests.
+    * test authorize + release (when you cancel an order) workflow
+    * write support for recurrent payments
+    * sort the livesettings options
+
 .. index:: Google Checkout
 
 Google Checkout
   
 3. If the user has multiple tiers, return the lowest amount found in 2a & 2b.
 
+Pricing tiers should not be applied to superuser or staff members and they are ignored for them.
+It is easy to create other unprivileged user account for testing or shopping.
+
 .. _Django_Extensions: https://github.com/django-extensions/django-extensions/
     Extensive Wiki on: http://code.google.com/p/django-command-extensions/
 Install Base Requirements
 -------------------------
 
-Ensure that python 2.4 or greater is installed. Mercurial must also be installed. 
+Ensure that python 2.5 or greater is installed. Mercurial must also be installed. 
 
 Next, install `python setuptools <http://pypi.python.org/pypi/setuptools>`_ 
 so that easy_install is available.
 ----------
 
 You should review :doc:`Tutorial 1 <tutorial1>` to learn how to add Products to your store.
+
+When your development is ready, you can "freeze" versions of packages, that
+you may want to install later on the production server::
+
+    pip freeze -r edited-requirements.txt > my-stable-reqirements.txt

docs/release-notes-0-9-2.txt

-Satchmo Development Branch
-==========================
+Satchmo 0.9.2 Release
+=====================
 
-These are the notes for the latest development version.
+These are the notes for Satchmo 0.9.2.
 The full list of closed tickets can be viewed `here <http://www.bitbucket.org/chris1610/satchmo/issues?status=resolved&milestone=0.9.2>`_
 
+This release contains numerous fixes, improvements and updates from 0.9.1. A summary of some of the key items are included below.
 
 New Features
 ------------
 - Satchmo check now does a more thorough job of checking your environment for issues
 - Product variation images can be shown when the user selects the product
 - In the admin view of products, stock and price are displayed in a more useable format
+- Ability to add and manage addressbook entries
 
 Translations
 ------------
 - Added Czech translation
 - Updated French translation
 - Updated Spanish translation
+- Added Romanian translation
 
 Bug Fixes
 ---------
 - Several fixes to handle unicode characters better
 - Replace some admin jquery scripts with simpler django readonly fields
 - Ensure that google checkout empties the cart
+- Converted to SOAP based Fedex API
+- Fix use of sale variable in context processor
+- Handle different ship to and bill to addressees better
+- Tax processor was not being cached correctly
+- Secure autocomplete view so that only staff users could view it
+- Fix product variation pricing so that explicit prices don't get overriden by deltas
+- Fix apply_even_split so that discounts get applied properly
+- Ensure home page paginator handles improper inputs better
+- Improve satchmo_check's ability to report possible errors
+- Fix payment information displayed in confirmation emails
 
 Performance Improvements
 ------------------------
 this was fixed but had the unintended side effect of returning all the product variations in the default templates. In order to maintain
 consistency, the default variation display value is now False. The only people that will notice the issue are those that customized
 the variation display in the category page.
+
+Order Shipping Method and Description Fields increased
+++++++++++++++++++++++++++++++++++++++++++++++++++++++
+The fields in the Order model for storing the shipping method and description were too small. The size of the field has been increased to 200 characters.
+A migration is included for this change:
+
+    python manage.py migrate contact --fake 0001
+    python manage.py migrate shop --fake 0001
+    python manage.py migrate shop
+
+Fedex Module Update
++++++++++++++++++++
+The old Fedex module used the XML api reference. The Fedex API documentation is geared more towards a SOAP API. We have moved to
+using this new interface.  If you were using the old Fedex module, you will need to update your account and get a new API key.
+
+Additionally, we are requiring two new modules for Fedex. You can install them using pip or easy_install:
+
+    pip install fedex
+    pip install suds
+
+Additional Notes
+----------------
+
+Future versions of Satchmo will require Django 1.3.1 and higher.

docs/release-notes-0-9-3.txt

+Satchmo Development Branch
+==========================
+
+These are the notes for the development version of Satchmo.
+
+
+New Features
+------------
+ * upgraded to use the latest Sorl Thumbnail code. Please review the migration notes
+ * Added Paypal Payflowpro payment module
+ * Updated all templates to use `Django static files <https://docs.djangoproject.com/en/dev/howto/static-files/>`_
+ * Send email to gift certificate recipients
+ * Rewrite PDF (document) generation, removed trml2pdf and Reportlab dependencies: please see :ref:`document_settings_trml2pdf` and the migration notes when upgrading
+ * Updated to using django-registration 0.8
+
+Translations
+------------
+ * Italian updates
+
+Bug Fixes
+---------
+ * Make variation manager more robust so that you can't delete an order when deleting the variation.
+ * Javascript updates for newer jquery
+ * Fix bug with required login not working
+ * Ensure TRACK_INVENTORY is used in all payment modules
+ 
+Performance Improvements
+------------------------
+ * DB optimizations using new prefetch_related from Django 1.4 
+ * Tweaks to product ratings
+ 
+Additional Packages
+-------------------
+
+Migration Notes
+---------------
+
+PDF generation
+++++++++++++++
+
+If you wish to maintain the ``trml2pdf`` PDF generation (recommended if you
+have customized templates) for invoices, packing slips and shipping labels,
+you must set the ``'DOCUMENT_CONVERTER'`` key
+within ``SATCHMO_SETTINGS`` to ``'shipping.views.TRMLDocument'``::
+
+    SATCHMO_SETTINGS = {
+        ...
+        'DOCUMENT_CONVERTER': 'shipping.views.TRMLDocument',
+        ...
+    }
+
+You should also move your templates, as the following template renames happened
+(here is indicated only the *template path*, from ``templates/`` onward):
+
+    * ``shop/pdf/invoice.rml`` → ``shop/docs/rml/invoice.rml``
+    * ``shop/pdf/packing-slip.rml`` → ``shop/docs/rml/packingslip.rml``
+    * ``shop/pdf/shipping-label.rml`` → ``shop/docs/rml/shippinglabel.rml``
+
+See :ref:`document_settings_trml2pdf` for more details.
+
+Sorl Thumbnail
+++++++++++++++
+In `rev 2449 <http://bitbucket.org/chris1610/satchmo/changeset/9fb522d26404>`_ Satchmo is updated to use the latest Sorl Thumbnail code.
+
+The primary change is that all custom templates that reference images, will need to be changed to support Sorl's updated syntax. 
+A typical example of an old template tag looks like this::
+
+    {% thumbnail pic.picture 280x280 as image %}
+    <img src="{{ image }}" width="{{ image.width }}" height="{{ image.height }}" />
+    
+Templates need to be updated to support the endthumbnail tag::
+
+    {% thumbnail pic.picture "280x280" as image %}
+    <img src="{{ image.url }}" width="{{ image.width }}" height="{{ image.height }}" />
+    {% endthumbnail %}
+
+Also, after upgrading to the latest Sorl Thumbnail code, you must remember to do a syncdb to create Sorl's cache table.
+
+This upgrade allows Satchmo to utilize all the latest features in Sorl. You are encouraged to read `Sorl's docs <http://thumbnail.sorl.net/index.html>`_ in order to determine 
+which ones you'd like to include in your store.
+
+Django Static Files
++++++++++++++++++++
+In `rev 2476 <https://bitbucket.org/chris1610/satchmo/changeset/3848d39b63c0>`_ Satchmo is updated to use Django's static files. If you have made any changes to templates, you'll need to make sure
+to replace references top media_url with STATIC_URL. Here is an example of the original template::
+
+    <script src="{{media_url}}js/jquery.cookie.js" type="text/javascript"></script>
+    
+Here is the new template::
+    
+    <script src="{{ STATIC_URL }}js/jquery.cookie.js" type="text/javascript"></script>
+    

docs/requirements.txt

 Django instance to use Satchmo.  The `Django installation guide`_ will step you
 through the process.
 
-You must use Django 1.2.3 or greater in order to use the latest CSRF features.
+You must use Django 1.4.x. Satchmo is not compatible with Django 1.5.x at this time.
 
-Satchmo requires Python 2.4 or later and a database supported by Django.
+Satchmo requires Python 2.5 or later and a database supported by Django.
 
 There is always a challenge in deciding how many dependencies to include in a project. With
 Satchmo, we strongly believe in avoiding "Not Invented Here" syndrome and using the power
 - Satchmo's thumbnail capability is very robust and utilizes the following packages:
 
   - `Python Imaging Library`_
-  - Sorl Thumbnails
+  - Sorl Thumbnail
   
-  .. warning::
-    You must use Sorl Thumbnails version 3.2.5 with Satchmo.
+    .. versionadded:: 0.9.3 - Use the latest version of Sorl Thumbnail
+    
 
 - In order to securely store sensitive information, you will need:
 
 
   - `Django Registration`_
 
-  .. warning::
-    You must use Django registration 0.7 with Satchmo. When 0.8 comes out, we will
-    migrate to the new version.
-
 A valid Django cache backend (file, memcached or DB) is required for the config settings.
 
 - The following package is required to load the initial data and run the unit tests:
 .. _Django installation guide: http://www.djangoproject.com/documentation/install/
 .. _Python Imaging Library: http://www.pythonware.com/products/pil/
 .. _Elementtree: http://effbot.org/zone/element-index.htm
-.. _Python cryptography toolkit: http://www.amk.ca/python/code/crypto
+.. _Python cryptography toolkit: http://pypi.python.org/pypi/pycrypto/2.6
 .. _Windows binary: http://www.voidspace.org.uk/python/modules.shtml#pycrypto
 .. _ReportLab: http://www.reportlab.com/software/opensource/rl-toolkit/download/
 .. _Sphinx: http://sphinx.pocoo.org/
 .. _Authorize.net: http://www.authorize.net/
 .. _download link: http://www.satchmoproject.com/snapshots/trml2pdf-1.2.tar.gz
 .. _Django Registration: http://bitbucket.org/ubernostrum/django-registration/wiki/Home
+.. _`Django registration 0.7.1`: https://bitbucket.org/hynekcer/django-registration
 .. _snapshot: http://www.satchmoproject.com/snapshots/
 .. _`Django Threaded Multihost`: http://bitbucket.org/bkroeze/django-threaded-multihost
 .. _`Django App Plugins`: http://bitbucket.org/bkroeze/django-caching-app-plugins/
 .. _Django Livesettings: http://bitbucket.org/bkroeze/django-livesettings
 .. _Django Keyedcache: http://bitbucket.org/bkroeze/django-keyedcache
 .. _Akismet: http://www.voidspace.org.uk/python/akismet_python.html
+.. _`Sorl Thumbnail version 3.2.5`: http://pypi.python.org/packages/source/s/sorl-thumbnail/sorl-thumbnail-3.2.5.tar.gz
                 'shipping',
                 'product',
                 'product.modules.configurable',
+                'product.modules.custom',
+                'product.modules.downloadable',
+                'product.modules.subscription',
                 'payment',
                 'payment.modules.dummy',
                 'payment.modules.giftcertificate',
             )
 
         #### Satchmo unique variables ####
-        #from django.conf.urls.defaults import patterns, include
+        #from django.conf.urls import patterns, include
         SATCHMO_SETTINGS = {
                             'SHOP_BASE' : '',
                             'MULTISHOP' : False,
 
 1. Next, you need to configure your :file:`urls.py` file. The most simple :file:`urls.py` file would look like this::
 
-        from django.conf.urls.defaults import *
+        from django.conf.urls import *
         from satchmo_store.urls import urlpatterns
 
 
 2. If you have additional urls you would like to add to your project, it would look like this::
 
-        from django.conf.urls.defaults import *
+        from django.conf.urls import *
         from satchmo_store.urls import urlpatterns
 
         urlpatterns += patterns('',
             (r'test/', include('simple.localsite.urls'))
         )
 
-
-3. Copy over the static directory::
-
-        python manage.py satchmo_copy_static
-
-4. Ensure that you have a template directory setup. You only need to place templates in the directory if you are
+3. Ensure that you have a template directory setup. You only need to place templates in the directory if you are
 overriding existing templates.
 
 After you have installed everything, you should have a directory structure that looks similar to this::
 .. Note::
     Unlike most modules, settings for this module are not displayed in a separate section;
     they are displayed alongside settings that apply across all modules in the
-    :ref:`Shipping Settings section <shipping_settings>`.
+    :ref:`Shipping Settings section <_shipping_settings>`. 
 
 .. _shipping_no:
 
 .. Note::
     Unlike most modules, settings for this module are not displayed in a separate section;
     they are displayed alongside settings that apply across all modules in the
-    :ref:`Shipping Settings section <shipping_settings>`.
+    :ref:`Shipping Settings section <_shipping_settings>`.
 
 .. _shipping_productshipping:
 
 price and handling fee. This means that at checkout the shipping price is based on the shipping country
 and the total weight of the cart.
 
+NOTE: the weight value of the Weight Tier part of the Zone object is called
+"Min Weight", but each tier is used for carts that weight at MOST that amount.
+This means this is the MAXIMUM weight that will be handled by that price.
+
 .. _shipping_tieredquantity:
 
 Tiered Quantity
 
 To enable, see `Enabling Modules`_.
 
-The Fedex module allows Satchmo to calculate shipping costs using the Fedex Web Services interface.
+The Fedex module allows Satchmo to calculate shipping costs using the Fedex Web Services interface. The Fedex module
+has two additional dependencies:
+
+    1. `python-fedex <http://code.google.com/p/python-fedex/>`_
+    2. `suds <https://fedorahosted.org/suds/>`_
+    
+.. warning::
+   The Fedex module will not work correctly without these modules installed on your system.
 
 One important note to consider is that each product MUST have a weight of at least .1 pounds for Fedex to give a valid response.
-If you have a configurable product you will need to set weights on each product option. Otherwise you will get errors when the
-FedEx module tries to calculate the weight to send to FedEx for the quote.
+Therefore, there is a setting in the Fedex module to allow you to set a minimum weight that will be used if the individual
+products do not have weights.
 
 Once you've got the module installed its time to get your account set up with FedEx. (It does not work without the following steps)
 
         The module having url patterns added to it
 
     ``patterns``
-        The url patterns to be added. This is an instance of ``django.conf.urls.defaults.patterns``
+        The url patterns to be added. This is an instance of ``django.conf.urls.patterns``
 
     ``section``
         The name of the section adding the urls (Note: this argument is not always provided). For example '__init__' or 'product'

docs/template-filters-tags.txt

 	
 	Usage::
 	
-		{% load satchmo_util %}
+		{% load satchmo_upsell %}
 		{% product_upsell product %}
 
 		
 Then, edit your settings.py file to enable the i18n urls.::
 
     #### Satchmo unique variables ####
-    from django.conf.urls.defaults import patterns, include
+    from django.conf.urls import patterns, include
     SATCHMO_SETTINGS = {
         'SHOP_BASE' : '',
         'MULTISHOP' : False,
 .. _ISO 639-1: http://en.wikipedia.org/wiki/List_of_ISO_639-1_codes
 .. _ISO 3166-1: http://www.iso.org/iso/country_codes/iso_3166_code_lists/english_country_names_and_code_elements.htm
 .. _Django: http://www.djangoproject.com/
-.. _Django Registration: http://code.google.com/p/django-registration/
+.. _Django Registration: https://bitbucket.org/ubernostrum/django-registration/wiki/Home
 .. _poedit: http://www.poedit.net/
 .. _kbabel: http://kbabel.kde.org/
 .. _gtranslator: http://gtranslator.sourceforge.net/
 Setup product types
 +++++++++++++++++++
 
-Ensure the you have ``ConfigurableProducts`` and ``ProductVariations`` installed.
-Go to /settings and verify both values are highlighted in ``Product Model Options``:
-
-.. image:: /images/admin-product-settings.png
-
+Verify that the necessary module ``product.modules.configurable`` is enabled
+in ``INSTALLED_APPS`` which is satisfied by default.
 
 Create the Product
 ++++++++++++++++++
 Here are the variables provided in the context by Satchmo's context processor,
 satchmo_store.shop.context_processor.settings.
 
-  :shop_base: the value SHOP_BASE of in SATCHMO_SETTINGS in your
-              local_settings.py
-  :shop: the current satchmo_store.shop.models.Config in use
+  :shop_base: The base URL from SHOP_BASE in SATCHMO_SETTINGS
+  :shop: an object satchmo_store.shop.models.Config representing the
+    current store configuration
   :shop_name: the *store_name* value from the config
-  :media_url: .. TODO
+  :media_url: The current media url, taking into account SSL
+  :STATIC_URL: The current static url, taking into account SSL
   :cart_count: number of items in the cart
   :cart: user's current cart; an instance of satchmo_store.shop.models.Cart
   :categories: all categories in the site
-  :is_secure: .. TODO
-  :request: .. TODO
+  :is_secure: A boolean representing weather or not SSL is enabled
+  :request: The HttpRequest object passed into the context processor
   :login_url: the LOGIN_URL setting in your settings.py
   :logout_url: the LOGOUT_URL setting in your settings.py
-  :sale: .. TODO
+  :storewide_sale: An instance of product.models.Discount if there is a
+    global sale, or None
 
 Common variables
 ----------------

satchmo/apps/l10n/locale/es/LC_MESSAGES/django.mo

Binary file modified.

satchmo/apps/l10n/locale/it/LC_MESSAGES/django.mo

Binary file modified.

satchmo/apps/l10n/locale/it/LC_MESSAGES/django.po

 msgstr ""
 "Project-Id-Version: django\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-02-28 19:55-0600\n"
-"PO-Revision-Date: 2010-05-13 11:52+0200\n"
-"Last-Translator: Andrea Innocenti <andyinno@gmail.com>\n"
+"POT-Creation-Date: 2012-05-16 20:13+0200\n"
+"PO-Revision-Date: 2012-05-17 11:06+0100\n"
+"Last-Translator: Simone Deponti <simone.deponti@abstract.it>\n"
 "Language-Team: italiano <nn@nn.it>\n"
+"Language: \n"
 "MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=utf-8\n"
-"Content-Transfer-Encoding: utf-8\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
 "X-Generator: KBabel 1.11.4\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Poedit-Language: Italian\n"
+"X-Poedit-Country: ITALY\n"
+"X-Poedit-Basepath: ../../../\n"
 
-#: admin.py:15 admin.py:24
+#: admin.py:15
+#: admin.py:24
 msgid "1 country was"
 msgstr "Una nazione era"
 
-#: admin.py:17 admin.py:26
+#: admin.py:17
+#: admin.py:26
 #, python-format
 msgid "%s countries were"
 msgstr "%s nazioni erano"
 msgid "Continent"
 msgstr "Continente"
 
-#: models.py:60 models.py:81
+#: models.py:60
+#: models.py:81
 msgid "Administrative Area"
 msgstr "Area amministrativa"
 
 # translated = "Abbreviazione postale"
 #: models.py:78
 msgid "Area is active"
-msgstr "La zona e' attiva"
+msgstr "La zona è attiva"
 
 #: models.py:82
 msgid "Administrative Areas"
 
 #: templates/l10n/_language_selection_form.html:5
 msgid "Change language"
-msgstr "Cambia Lingua"
+msgstr "Cambia lingua"
 
 #: templates/l10n/_language_selection_form.html:11
 msgid "Change"
 #: validators/uspostcode.py:10
 msgid "Invalid ZIP code"
 msgstr "CAP non valido"
+

satchmo/apps/l10n/locale/ro/LC_MESSAGES/django.mo

Binary file added.

satchmo/apps/l10n/locale/ro/LC_MESSAGES/django.po

+# Satchmo Translation Package
+# Copyright (C) 2008 Satchmo Project
+# This file is distributed under the same license as the Satchmo package.
+# 
+# Translators:
+# florindinu <contact@florindinu.ro>, 2011.
+msgid ""
+msgstr ""
+"Project-Id-Version: Satchmo\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-02-28 19:54-0600\n"
+"PO-Revision-Date: 2011-03-22 15:14+0000\n"
+"Last-Translator: florindinu <contact@florindinu.ro>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ro\n"
+"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1))\n"
+
+#: admin.py:15 admin.py:24
+msgid "1 country was"
+msgstr "o țară a fost"
+
+#: admin.py:17 admin.py:26
+#, python-format
+msgid "%s countries were"
+msgstr ""
+
+#: admin.py:18
+#, python-format
+msgid "%s successfully marked as active"
+msgstr "%s a fost marcat(ă) ca activ(ă)"
+
+#: admin.py:19
+msgid "Mark selected countries as active"
+msgstr "Marchiază țările selectate ca active"
+
+#: admin.py:27
+#, python-format
+msgid "%s successfully marked as inactive"
+msgstr "%s a fost marcat(ă) ca inactiv(ă)"
+
+#: admin.py:28
+msgid "Mark selected countries as inactive"
+msgstr "Marchiază țările selectate ca inactive"
+
+#: models.py:6
+msgid "Africa"
+msgstr "Africa"
+
+#: models.py:7
+msgid "North America"
+msgstr "America de nord"
+
+#: models.py:8
+msgid "Europe"
+msgstr "Europa"
+
+#: models.py:9
+msgid "Asia"
+msgstr "Asia"
+
+#: models.py:10
+msgid "Oceania"
+msgstr "Oceania"
+
+#: models.py:11
+msgid "South America"
+msgstr "America de sud"
+
+#: models.py:12
+msgid "Antarctica"
+msgstr "Antarctica"
+
+#: models.py:16
+msgid "Another"
+msgstr "Alta"
+
+#: models.py:17
+msgid "Island"
+msgstr "Islanda"
+
+#: models.py:18
+msgid "Arrondissement"
+msgstr ""
+
+#: models.py:19
+msgid "Atoll"
+msgstr ""
+
+#: models.py:20
+msgid "Autonomous island"
+msgstr "Insulă autonomă"
+
+#: models.py:21
+msgid "Canton"
+msgstr "Canton"
+
+#: models.py:22
+msgid "Commune"
+msgstr "Comună"
+
+#: models.py:23
+msgid "County"
+msgstr "Județ"
+
+#: models.py:24
+msgid "Department"
+msgstr "Departament"
+
+#: models.py:25
+msgid "Dependency"
+msgstr "Dependință"
+
+#: models.py:26
+msgid "District"
+msgstr "District"
+
+#: models.py:27
+msgid "Division"
+msgstr "Diviziune"
+
+#: models.py:28
+msgid "Emirate"
+msgstr "Emirat"
+
+#: models.py:29
+msgid "Governorate"
+msgstr "Guvernorat"
+
+#: models.py:30
+msgid "Island council"
+msgstr "Consiliu de insule"
+
+#: models.py:31
+msgid "Island group"
+msgstr "Grup de insule"
+
+#: models.py:32
+msgid "Island region"
+msgstr "Regiune insulară"
+
+#: models.py:33
+msgid "Kingdom"
+msgstr "Regat"
+
+#: models.py:34
+msgid "Municipality"
+msgstr "Municipalitate"
+
+#: models.py:35
+msgid "Parish"
+msgstr "Parohie"
+
+#: models.py:36
+msgid "Prefecture"
+msgstr "Prefectură"
+
+#: models.py:37
+msgid "Province"
+msgstr "Provincie"
+
+#: models.py:38
+msgid "Region"
+msgstr "Regiune"
+
+#: models.py:39
+msgid "Republic"
+msgstr "Republică"
+
+#: models.py:40
+msgid "Sheading"
+msgstr ""
+
+#: models.py:41
+msgid "State"
+msgstr "Stat"
+
+#: models.py:42
+msgid "Subdivision"
+msgstr "Subdiviziune"
+
+#: models.py:43
+msgid "Subject"
+msgstr "Subiect"
+
+#: models.py:44
+msgid "Territory"
+msgstr "Teritoriu"
+
+#: models.py:53
+msgid "ISO alpha-2"
+msgstr "ISO alfa-2"
+
+#: models.py:54
+msgid "Official name (CAPS)"
+msgstr "Nume oficial (LITERE MARI)"
+
+#: models.py:55
+msgid "Country name"
+msgstr "Numele țării"
+
+#: models.py:56
+msgid "ISO alpha-3"
+msgstr "ISO alfa-3"
+
+#: models.py:57
+msgid "ISO numeric"
+msgstr "ISO numeric"
+
+#: models.py:58
+msgid "Country is active"
+msgstr "Țara este activă"
+
+#: models.py:59
+msgid "Continent"
+msgstr "Continent"
+
+#: models.py:60 models.py:81
+msgid "Administrative Area"
+msgstr "Zonă administrativă"
+
+#: models.py:63
+msgid "Country"
+msgstr "Țară"
+
+#: models.py:64
+msgid "Countries"
+msgstr "Țări"
+
+#: models.py:76
+msgid "Admin Area name"
+msgstr "Nume în zona de administrare"
+
+#: models.py:77
+msgid "Postal Abbreviation"
+msgstr "Abreviere poștală"
+
+#: models.py:78
+msgid "Area is active"
+msgstr "Zona este activă"
+
+#: models.py:82
+msgid "Administrative Areas"
+msgstr "Zone administrative"
+
+#: templates/l10n/_language_selection_form.html:5
+msgid "Change language"
+msgstr "Schimbă limba"
+
+#: templates/l10n/_language_selection_form.html:11
+msgid "Change"
+msgstr "Modifică"
+
+#: validators/aupostcode.py:13
+msgid "Invalid Australian postal code"
+msgstr "Cod poștal australian invalid"
+
+#: validators/capostcode.py:18
+msgid "Invalid postal code for Canada"
+msgstr "Cod poștal canadian invalid"
+
+#: validators/uspostcode.py:10
+msgid "Invalid ZIP code"
+msgstr "Cod poștal invalid"
+
+

satchmo/apps/l10n/urls.py

-from django.conf.urls.defaults import *
+from django.conf.urls import *
 
 urlpatterns = patterns('',
     (r'^setlang/$', 'django.views.i18n.set_language', {}, 'satchmo_set_language'),

satchmo/apps/payment/forms.py

                 order=order,
                 contact=self._contact
                 )
+        if self.fields['paymentmethod'].initial == None:
+            self.fields['paymentmethod'].initial = payment_choices[0][0]
         if len(payment_choices) == 1:
-            self.fields['paymentmethod'].widget = forms.HiddenInput(attrs={'value' : payment_choices[0][0]})
+            self.fields['paymentmethod'].widget = forms.HiddenInput()
         else:
-            self.fields['paymentmethod'].widget = forms.RadioSelect(attrs={'value' : payment_choices[0][0]})
+            self.fields['paymentmethod'].widget = forms.RadioSelect()
         self.fields['paymentmethod'].choices = payment_choices
 
     def clean(self):
             cart = kwargs.get('cart', None)
             if not cart:
                 cart = Cart.objects.from_request(request)
+            if not cart.customer:
+                cart.customer = contact
+                cart.save()
             self.order = get_or_create_order(request, cart, contact, self.cleaned_data)
             form_postsave.send(PaymentContactInfoForm, form=self)
             return contactid
         if order and order.discount_code:
             try:
                 discount = Discount.objects.by_code(order.discount_code)
-                if discount and discount.shipping == "FREECHEAP":
+                # 'discount' object could be NullDiscount instance
+                if discount and hasattr(discount, 'shipping') and discount.shipping == "FREECHEAP":
                     if cheapshipping:
                         shipping_choices = [opt for opt in shipping_choices if opt[0] == cheapshipping]
                         shipping_dict = {cheapshipping: shipping_dict[cheapshipping]}

satchmo/apps/payment/locale/es/LC_MESSAGES/django.mo

Binary file modified.

satchmo/apps/payment/locale/it/LC_MESSAGES/django.mo

Binary file modified.

satchmo/apps/payment/locale/it/LC_MESSAGES/django.po

 msgstr ""
 "Project-Id-Version: django\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-02-28 19:55-0600\n"
-"PO-Revision-Date: 2010-10-10 21:05+0200\n"
-"Last-Translator: Andrea Innocenti <andyinno@gmail.com>\n"
+"POT-Creation-Date: 2012-05-16 20:13+0200\n"
+"PO-Revision-Date: 2012-05-09 20:44+0100\n"
+"Last-Translator: Simone Deponti <simone.deponti@abstract.it>\n"
 "Language-Team: italiano <nn@nn.it>\n"
+"Language: \n"
 "MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=utf-8\n"
-"Content-Transfer-Encoding: utf-8\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
 "X-Generator: KBabel 1.11.4\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Poedit-Basepath: ../../../\n"
 
-#: config.py:13