Commits

Chris Moffitt  committed 9d3bd18

Trying to cleanup ticket #201

  • Participants

Comments (0)

Files changed (305)

+The PRIMARY AUTHORS are:
+
+Chris Moffitt who created some of the original models and core structure.
+
+Bruce Kroeze who designed the Payment Module system as well as a bunch of other parts.
+
+John Shaffer who has provided a lot of support with internationalization, the testing framework and a fixes all over the place.
+
+Brian Johnson who led the way with the product model refactoring.
+
+THANKS
+
+This project would obviously not be possible without the outstanding
+Django framework.  Thanks to all of the individuals that started Django and
+open sourced the application.
+
+Thanks also go out to all the people that have contributed ideas or thoughts 
+for the project.
+
+==================
+Satchmo Change Log
+==================
+
+Version 0.6, October 30, 2007
+----------------
+ * Removed dependency on Webda and added new l10n models
+ * Added capability to rate and review products
+ * Improved capabilities for users to manage their account information
+ * Creation of a simple inventory management interface
+ * Multiple bug fixes and code cleanups
+ * New configuration option to allow user to set image upload directory name
+ * Improved error handling for loading data
+ * Allow manual product ordering in a category
+ * Remove most custom settings from local_settings.py, instead using the satchmo.configuration app
+ * Added a cache manager
+ * Added TrustCommerce as a processing module
+ * New downloadable product type
+ * New custom product type
+ * Added Swedish translation
+
+Version 0.5, August 22, 2007
+----------------------------
+ * First official package launch

File CONTRIBUTORS

+The Satchmo team thanks the following individuals for their help during
+the development of this project.
+
+We will attempt to identify what you helped with (but no guarantees)!
+
+=======================================================================
+
+Sean Reifschneider - Basis for Credit Card verification code
+Jonas Meli - Webda models (http://webda.python-hosting.com/)
+Neboj�a �ordevic (Nesh) - Thumbnail module
+temnoregg - Category model changes for unicode
+Antonio Cavedoni - Graphviz code for model documentation
+Brian Johnson - Price change code
+John Shaffer
+Bruce Kroeze
+Jim Alanoly - django-registration integration
+Itai Tavor
+Copyright (c) 2007, Satchmo Project 
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+1. Redistributions of source code must retain the above copyright notice,
+   this list of conditions and the following disclaimer.
+     
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+
+3. Neither the name of the Satchmo Project  nor the names of its
+   contributors may be used to endorse or promote products derived
+   from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
+TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
+THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.

File docs/alternate-1.css

+/*
+:Authors: Ian Bicking, Michael Foord
+:Contact: fuzzyman@voidspace.org.uk
+:Date: 2005/08/26 
+:Version: 0.1.0
+:Copyright: This stylesheet has been placed in the public domain.
+
+Stylesheet for Docutils.
+Based on ``blue_box.css`` by Ian Bicking
+and ``html4css1.css`` revision 1.46.
+*/
+
+@import url(html4css1.css);
+
+body {
+  font-family: Arial, sans-serif;
+}
+
+em, i {
+  /* Typically serif fonts have much nicer italics */
+  font-family: Times New Roman, Times, serif;
+}
+
+a.target {
+  color: blue;
+}
+
+a.target {
+  color: blue;
+}
+
+a.toc-backref {
+  text-decoration: none;
+  color: black;
+}
+
+a.toc-backref:hover {
+  background-color: inherit;
+}
+
+a:hover {
+  background-color: #cccccc;
+}
+
+div.attention, div.caution, div.danger, div.error, div.hint,
+div.important, div.note, div.tip, div.warning {
+  background-color: #cccccc;
+  padding: 3px;
+  width: 80%;
+}
+
+div.admonition p.admonition-title, div.hint p.admonition-title,
+div.important p.admonition-title, div.note p.admonition-title,
+div.tip p.admonition-title  {
+  text-align: center;
+  background-color: #999999;
+  display: block;
+  margin: 0;
+}
+
+div.attention p.admonition-title, div.caution p.admonition-title,
+div.danger p.admonition-title, div.error p.admonition-title,
+div.warning p.admonition-title {
+  color: #cc0000;
+  font-family: sans-serif;
+  text-align: center;
+  background-color: #999999;
+  display: block;
+  margin: 0;
+}
+
+h1, h2, h3, h4, h5, h6 {
+  font-family: Helvetica, Arial, sans-serif;
+  border: thin solid black;
+  /* This makes the borders rounded on Mozilla, which pleases me */
+  -moz-border-radius: 8px;
+  padding: 4px;
+}
+
+h1 {
+  background-color: #444499;
+  color: #ffffff;
+  border: medium solid black;
+}
+
+h1 a.toc-backref, h2 a.toc-backref { 
+  color: #ffffff;
+}
+
+h2 {
+  background-color: #666666;
+  color: #ffffff;
+  border: medium solid black;
+}
+
+h3, h4, h5, h6 {
+  background-color: #cccccc;
+  color: #000000;
+}
+
+h3 a.toc-backref, h4 a.toc-backref, h5 a.toc-backref, 
+h6 a.toc-backref { 
+  color: #000000;
+}
+
+h1.title {
+  text-align: center;
+  background-color: #444499;
+  color: #eeeeee;
+  border: thick solid black;
+  -moz-border-radius: 20px;
+}
+
+table.footnote {
+  padding-left: 0.5ex;
+}
+
+table.citation {
+  padding-left: 0.5ex
+}
+
+pre.literal-block, pre.doctest-block {
+  border: thin black solid;
+  padding: 5px;
+}
+
+.image img { border-style : solid;
+            border-width : 2px;
+}
+
+h1 tt, h2 tt, h3 tt, h4 tt, h5 tt, h6 tt {
+  font-size: 100%;
+}
+
+code, tt {
+  color: #000066;
+}

File docs/alternate-2.css

+@media screen {
+body { 
+	background-color: #400050; 
+	font-family: Gentium;
+	margin: 0;
+	padding-left: 200px;
+	padding-right: 190px;
+	min-width: 240px;
+	background: #400050 url(koi.png) fixed repeat-y 10px -10px;
+}
+}
+
+td.field-body p { margin: 0; }
+
+col { width: 0; }
+
+@media screen {
+div.document {
+    background-color: #dfd0c0;
+    color: black;
+    padding: 0 20px;
+    width: 100%;
+}
+}
+
+hr.footer { display: none; }
+
+div.footer { 
+    border-top: medium solid #400050;
+    background-color: #ccaaff;
+    color: black;
+    text-align: center; 
+    margin-left: -200px;
+    margin-right: -190px;
+    padding: 0.5em;
+}
+
+div.document > * {
+    margin-left: 1em;
+    margin-right: 1em;
+}
+
+div.section > h1, div.section > h2, div.section > h3, div.section > h4,
+div.section > h5 {
+	margin-left: -1em;
+	padding-left: 0;
+}
+
+h1.title, h2.subtitle { 
+    margin-left: -220px !important;
+    margin-right: -170px !important;
+    position: relative;
+}
+
+em, i, strong, b, h1, h2, h3, h4, h5, a, dt, th, caption, p.topic-title,
+p.sidebar-title, p.admonition-title {
+    color: #400050;
+}
+
+a:hover {
+    background-color: #ccaaff;
+}
+
+hr, table, td, tr, th{
+    border-color: #400050;
+    color: #400050;
+}
+
+div.topic, div.sidebar, div.note, table.footnote, table.footnote td {
+    border: thin solid #400050;
+    background-color: #ccaaff;
+}
+
+h1.title {
+    text-align: center;
+    background: #400050 url(raindrops.png) repeat-x center left;
+    font-family: sans-serif;
+    color: #fff0e0;
+    margin: 0px;
+}
+
+h2.subtitle {
+    text-align: center;
+    background-color: #ccaaff;
+    border-bottom: 2px solid #400050;
+    margin: 0px;
+}
+
+
+h1 a {
+padding-left: 0.5em;
+padding-right: 0.5em;
+border: thin solid #400050;
+background-color: #ccaaff;
+}
+
+
+h2 a {
+padding-left: 0.25em;
+padding-right: 0.25em;
+border: thin dashed #400050;
+background-color: #ccaaff;
+}
+
+h3 a, th {
+border-top: thin solid #400050;
+border-bottom: thin solid #400050;
+background-color: #ccaaff;
+}
+
+td {
+border-top: thin solid #400050;
+border-bottom: thin solid #400050;
+background-color: #d7d0df;
+}
+
+h4 a {
+border-top: thin dashed #400050;
+border-bottom: thin dashed #400050;
+background-color: #ccaaff;
+}
+
+table.footnote td {
+border-top: none;
+border-bottom: none
+}
+
+table { border-collapse: collapse; }
+
+blockquote.epigraph {font-style: oblique }
+
+/*
+:Author: David Goodger
+:Contact: goodger@users.sourceforge.net
+:Date: $Date: 2004/12/22 19:03:27 $
+:Version: $Revision: 1.45 $
+:Copyright: This stylesheet has been placed in the public domain.
+
+Default cascading style sheet for the HTML output of Docutils.
+*/
+
+/* "! important" is used here to override other ``margin-top`` and
+   ``margin-bottom`` styles that are later in the stylesheet or 
+   more specific.  See <http://www.w3.org/TR/CSS1#the-cascade>. */
+.first {
+  margin-top: 0 ! important }
+
+.last {
+  margin-bottom: 0 ! important }
+
+.hidden {
+  display: none }
+
+a.toc-backref {
+  text-decoration: none ;
+  color: #400050 }
+
+blockquote.epigraph {
+  margin: 2em 5em ; }
+
+dl.docutils dd {
+  margin-bottom: 0.5em }
+
+dl.docutils dt {
+  font-weight: bold }
+
+div.abstract {
+  margin: 2em 5em }
+
+div.abstract p.topic-title {
+  font-weight: bold ;
+  text-align: center }
+
+div.admonition, div.attention, div.caution, div.danger, div.error,
+div.hint, div.important, div.note, div.tip, div.warning {
+  margin: 2em ;
+  border: medium solid #400050;
+  padding: 1em }
+
+div.admonition p.admonition-title, div.hint p.admonition-title,
+div.important p.admonition-title, div.note p.admonition-title,
+div.tip p.admonition-title {
+  font-weight: bold ;
+  font-family: sans-serif }
+
+div.attention p.admonition-title, div.caution p.admonition-title,
+div.danger p.admonition-title, div.error p.admonition-title,
+div.warning p.admonition-title {
+  color: red ;
+  font-weight: bold ;
+  font-family: sans-serif }
+
+/* Uncomment (and remove this text!) to get reduced vertical space in
+   compound paragraphs.
+div.compound .compound-first, div.compound .compound-middle {
+  margin-bottom: 0.5em }
+
+div.compound .compound-last, div.compound .compound-middle {
+  margin-top: 0.5em }
+*/
+
+div.dedication {
+  margin: 2em 5em ;
+  text-align: center ;
+  font-style: italic }
+
+div.dedication p.topic-title {
+  font-weight: bold ;
+  font-style: normal }
+
+div.figure {
+  margin-left: 2em }
+
+div.footer, div.header {
+  font-size: smaller }
+
+div.line-block {
+  display: block ;
+  margin-top: 1em ;
+  margin-bottom: 1em }
+
+div.line-block div.line-block {
+  margin-top: 0 ;
+  margin-bottom: 0 ;
+  margin-left: 1.5em }
+
+div.sidebar, table.docinfo {
+  margin-left: 1em ;
+  padding: 1em ;
+  width: 240px;
+  float: right ;
+  clear: right ;
+  font-size: small;
+}
+
+@media screen {
+	div.sidebar, table.docinfo {
+	  margin-right: -160px !important;
+	}
+
+	* html table.docinfo { /* the "* html" makes it IE-only */
+	  right: -160px;
+	  margin-right: 0px !important;
+	  margin-left: -140px;
+	  position: relative;
+	  visibility: visible;
+	}
+
+	* html div.sidebar { /* the "* html" makes it IE-only */
+	  right: -160px;
+	  margin-right: 0px !important;
+	  margin-left: -140px;
+	  position: relative;
+	  visibility: visible;
+	}
+
+	div.contents{ 
+	  overflow: hidden;
+	  float: left;
+	  clear: left;
+	  width: 179px !important;
+	  padding: 0 10px !important;
+	  right: 240px;
+	  margin-left: -220px !important;
+	  margin-top: 0 !important;
+	  margin-bottom: 0;
+	  border-left: none;
+	  border-top: none;
+	  border-right: thin solid #400050;
+	  border-bottom: thin solid #400050;
+	  visibility: visible;
+	}
+
+	* html div.contents { /* the "* html" makes it IE-only */
+	  right: -220px;
+	  width: 200px !important;
+	  position: relative;
+	}
+}
+
+div.contents ul { 
+  font-family: sans-serif; 
+  font-size: x-small; 
+  padding-left: 10px; 
+}
+
+* html div.contents ul {
+  font-family: sans-serif; 
+  font-size: 8pt; 
+  margin-left: 10px; 
+}
+
+div.sidebar p.rubric {
+  font-family: sans-serif ;
+  font-size: medium }
+
+div.system-messages {
+  margin: 5em }
+
+div.system-messages h1 {
+  color: red }
+
+div.system-message {
+  border: medium solid #400050;
+  padding: 1em }
+
+div.system-message p.system-message-title {
+  color: red ;
+  font-weight: bold }
+
+div.topic {
+  margin: 2em ;
+  padding: 1em;
+}
+
+h1.title {
+  text-align: center }
+
+h2.subtitle {
+  text-align: center }
+
+hr.docutils {
+  width: 75% }
+
+ol.simple, ul.simple {
+  margin-bottom: 1em }
+
+ol.arabic {
+  list-style: decimal }
+
+ol.loweralpha {
+  list-style: lower-alpha }
+
+ol.upperalpha {
+  list-style: upper-alpha }
+
+ol.lowerroman {
+  list-style: lower-roman }
+
+ol.upperroman {
+  list-style: upper-roman }
+
+p.attribution {
+  text-align: right ;
+  margin-left: 50% }
+
+p.caption {
+  font-style: italic }
+
+p.credits {
+  font-style: italic ;
+  font-size: smaller }
+
+p.label {
+  white-space: nowrap }
+
+p.rubric {
+  font-weight: bold ;
+  font-size: larger ;
+  color: #400050 ;
+  text-align: center }
+
+p.sidebar-title {
+  font-family: sans-serif ;
+  font-weight: bold ;
+  font-size: larger }
+
+p.sidebar-subtitle {
+  font-family: sans-serif ;
+  font-weight: bold }
+
+p.topic-title {
+  font-weight: bold }
+
+pre.address {
+  margin-bottom: 0 ;
+  margin-top: 0 ;
+  font-family: serif ;
+  font-size: 100% }
+
+pre.line-block {
+  font-family: serif ;
+  font-size: 100% }
+
+pre.literal-block, pre.doctest-block {
+  margin-left: 2em ;
+  margin-right: 2em ;
+  background-color: #ccaaff }
+
+span.classifier {
+  font-family: sans-serif ;
+  font-style: oblique }
+
+span.classifier-delimiter {
+  font-family: sans-serif ;
+  font-weight: bold }
+
+span.interpreted {
+  font-family: sans-serif }
+
+span.option {
+  white-space: nowrap }
+
+span.option-argument {
+  font-style: italic }
+
+span.pre {
+  white-space: pre }
+
+span.problematic {
+  color: red }
+
+table.citation {
+  border-left: solid thin gray }
+
+table.docutils {
+  margin-top: 0.5em ;
+  margin-bottom: 0.5em }
+
+table.footnote {
+  border-left: solid thin black }
+
+table.docutils td, table.docutils th {
+  padding-left: 0.5em ;
+  padding-right: 0.5em ;
+  vertical-align: top }
+
+th.docinfo-name, th.field-name {
+  font-weight: bold ;
+  text-align: left ;
+  white-space: nowrap }
+
+h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
+h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
+  font-size: 100% }
+
+tt.docutils {
+  background-color: #ccaaff }
+
+ul.auto-toc {
+  list-style-type: none }
+

File docs/analytics.txt

+==========
+Analytics
+==========
+
+One very important capability that's needed in order to run any kind
+of eCommerce solution effectively is quality analytic capabilities.  Satchmo
+does not have a set of its own analytical capabilities, but it does have
+support for using `Google Analytics`_.
+
+In order to use Google analytics, you must have an analytics id, which you can get
+for free for registering with Google.  Once you get this tracking code, you must 
+enable it in the store.
+
+*Note:* After [758], you use the ShopOptions page to enter your Google information.
+Ignore the part below about your local_settings.py file.
+
+make 2 changes to your local_settings.py file::
+
+    GOOGLE_ANALYTICS = True
+    # If google is enabled, enter the full google code here - Example "UA-abcd-1"
+    GOOGLE_ANALYTICS_CODE = "UA-xxxx-x"
+
+Now, all of your pages will be tracked via google analytics.  Satchmo also includes
+the additional ecommerce tracking codes so that purchases from your store can be
+tracked via analytics.
+
+The google analytics code is implemented using 2 template tags.  By default, they are
+included in the base.html and checkout/success.html pages.  If you wish to alter your
+templates, use {% show_tracker is_secure %} to implement the tracking code and {% show_receipt %} 
+to implement the purchase tracking capabilities.  The show_tracker code must be within
+the <body> tags and must be before the show_receipt tags.
+
+One final note on the google analytics capability.  The actual code that is inserted
+in your web page is controlled by the two templates in the google-analytics templates
+directory.  If you would like to host the google analytics javascript file on your
+own server (make sure you know what this means for keeping it updated), you can
+just modify these templates.
+
+.. _Google Analytics: http://www.google.com/analytics/

File docs/configuration.txt

+Basic Configuration
+===================
+
+Store Settings
+--------------
+
+If you followed the installation steps, you should have a basic store to start playing with.  There are a
+number of places you might want to configure.
+
+1. In the settings.py (or local_settings.py) file, there are a number of general Django settings.  However, there are a
+   few that are specific to Satchmo.
+
+    - SHOP_BASE is used as the prefix for your store.  In the default setting, your store is 
+      located at www.yourname.com/shop.  If you would like to change this setting, this is the 
+      place to do it.  If you would like your store to be at the root of the url, set
+      SHOP_BASE = ""
+    - LOCAL_DEV is used to make sure static files are served properly when developing.  This must
+      be set to FALSE when you deploy your site.
+    - CURRENCY is the currency symbol to use within the store.
+    - Make sure that your DATABASE_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
+        + TEMPLATE_DIRS
+        
+2. The load_data.py script is helpful during testing. Make sure the following values are set in your
+   local_settings.py file:
+
+    - SITE_DOMAIN = "example.com"
+    - SITE_NAME = "My Site"
+
+Module Configurations
+---------------------
+
+There are a number of additional places where you can customize Satchmo for your needs.  Some changes
+are simple, others might require more python knowledge to implement.
+
+Newsletters
++++++++++++
+
+Satchmo has two methods for handling newsletter subscriptions.  By default, you have an "ignore it" processor enabled.
+To enable handling, first add "satchmo.newsletter" to your list of installed modules in your settings file.
+
+Next, choose the way you want to handle the subscriptions.  Currently we have two working newsletter plugins:
+
+	- ``satchmo.newsletter.simple``  - This just tracks subscriptions in a database table for your querying pleasure.  You can then export that list to whatever mailing manager you want to use.
+	- ``satchmo.newsletter.mailman`` - This is an integration module which works with Gnu Mailman (http://www.gnu.org/software/mailman/).  This is particularly convenient if you have a Cpanel VPS system, since Mailman is installed by default on most such systems. To use this, you need to make sure Mailman is on your PYTHONPATH and you should have already set up a mailing list as an announce-only list (http://www.modwest.com/help/kb13-195.html). You'll need to enter the name of the list in your local settings file.
+
+*Note:* After [758], you manage the newsletter plugins from your ShopOptions page.  Ignore the part below about local_settings below.
+
+Enable your chosen module by adding the following line to your local_settings file::
+	
+	NEWSLETTER_MODULE = 'satchmo.newsletter.mailman'
+
+If you are using Mailman, you need to tell it the name of your mailing list in your local_settings file as well::
+
+	NEWSLETTER_NAME = 'my_nifty_store_announce_list'
+
+Payment Processing
+++++++++++++++++++
+
+Satchmo can handle multiple ways of accepting payment.  By default, you have a dummy processor that does 
+nothing but accept payments.  Obviously, you'll want to enable one of the other modules before going live.
+
+*Note:* After [758], you manage the payment modules ShopOptions page.  Ignore the part below about local_settings 
+or copying settings files.  They are not used at anymore.
+
+Payments are configured using *Satchmo Payment Modules*.  These modules are found at
+``satchmo/payment/modules/``:
+
+	- ``authorizenet`` is used to process credit cards.  
+	- ``dummy`` is used to test payments during development.
+	- ``paypal`` is used to handle PayPal payments.  (Basic module works, IPN is not yet done.)
+	- ``google`` is used to handle Google Checkout payments. (Level 1 complete)
+
+To enable a payment module or modules, prepare a custom configuration file for that module, and modify your local_settings file to load
+it.  Example configuration files are found in each payment module directory.
+
+For example, to enable authorize.net, first copy the file 
+``satchmo/payment/modules/authorizenet/authorizenet_settings_customize.py`` to the root of your store.  
+The critical part of that file will look something like this::
+
+	CONNECTION = 'https://test.authorize.net/gateway/transact.dll'
+	TEST = 'TRUE'
+	LOGIN = ''
+	TRANKEY = ''
+	
+Modify the file, putting in the proper settings for your account with Authorize.net, and then enable it in your
+settings.py or local_settings.py by adding it to the PAYMENT_MODULES like so::
+
+	PAYMENT_MODULES = (
+	    'satchmo.payment.modules.dummy.dummy_settings',
+ 	    'satchmo.authorizenet_settings',
+	#    'satchmo.paypal_settings',	
+	#    'satchmo.google_settings'
+	)
+	
+In the example above, we would now have two payment systems set up:  Dummy and Authorize.net.  Each of the payment modules works
+the same, with important settings for that module stored in their own settings file.
+
+Shipping Calculations
++++++++++++++++++++++
+
+Satchmo allows very flexible shipping calculations.  
+
+*Note:* After [758], you configure your shipping choices ShopOptions page.  Ignore the rest of this section.
+
+You will want to tailor the default ones stored
+in /satchmo/shipping/modules.py.  The API is fairly simple but will be covered in more detail later
+in this document.
+
+Taxes
++++++
+
+Satchmo has support for selling taxable products.  Since tax calculations include many different 
+calculations, you can modify the tax calculations using the objects in /satchmo/tax/modules.py.  The
+API will be covered in more detail later in this document.
+
+SSL
++++
+
+SSL Security can be set on any url in your store.  In order for SSL to work,
+make sure that it is enabled in the middleware section of your settings.py::
+
+    MIDDLEWARE_CLASSES = (
+        "django.middleware.common.CommonMiddleware",
+        "django.contrib.sessions.middleware.SessionMiddleware",
+        "django.middleware.locale.LocaleMiddleware",
+        "django.contrib.auth.middleware.AuthenticationMiddleware",
+        "django.middleware.doc.XViewMiddleware",
+        "satchmo.shop.SSLMiddleware.SSLRedirect"
+			    )
+
+In order to support a fully encrypted page, you also need to make sure you provide a secure url for the media.  This url
+will automatically be used in pages served by SSL, but only if you specify it in your settings.py::
+
+    MEDIA_SECURE_URL = 'https://secure.example.com/static/'
+
+Then, enable it for the specific urls you would like to be protected by adding
+{'SSL': True} to each url.  Here's an example which would enable SSL for login::
+
+	(r'^accounts/login/$', 'login', {'SSL': True', 'template_name': 'login.html'}, 'satchmo_login'),
+
+*Note:* After [758], you manage SSL for payment modules in the ShopOptions page.
+
+SSL for Payments works slightly differently.  Since the urls for Payments are configured automatically, you can 
+have SSL applied automatically as well.  To have all checkout pages enabled for SSL, just set 
+``CHECKOUT_SSL=True`` in your local_settings file.
+
+If you only want to enable SSL for some payment modules, set ``CHECKOUT_SSL=False`` in your local_settings file
+and then put ``SSL=True`` in the payment module configuration file for the module you want to have SSL enabled.
+This may be useful if you accept both PayPal and Authorize.net payments, for example.  PayPal wouldn't need
+to be SSL enabled, but Authorize.net should be.
+
+Note that SSL in the payment settings file will always overrule any CHECKOUT_SSL setting.
+
+.. _Authorize.net: http://www.authorize.net/
+.. _Mailman: http://www.gnu.org/software/mailman/

File docs/contact.gif

Added
New image

File docs/create-docs.py

+"""
+Helper script to create the documentation for Satchmo
+"""
+
+import os
+import string
+
+os.environ["DJANGO_SETTINGS_MODULE"]="satchmo.settings"
+pathToModelviz = "."
+modelsToProcess = ["contact", "discount", "payment", "product", "shipping", "shop", "supplier", "tax"]
+pathToRest = "/home/chris/python-stuff/docutils/tools"
+response = string.lower(raw_input("Type 'yes' to create images of models: "))
+if response == 'yes':
+    print "Creating images"
+    for model in modelsToProcess:
+        os.system(pathToModelviz+"/graph-viz-satchmo.py" + " " + model + "> " + model + ".dot")
+        os.system("dot -Tgif " + model + ".dot" + " -o" + model + ".gif")
+        os.system("rm " + model + ".dot")
+#Now process rest documents
+print "Creating documents"
+os.system(pathToRest + "/rst2html.py --stylesheet-path=./alternate-1.css " + "./satchmo-doc.txt >" + "satchmo-doc.html")

File docs/customization.txt

+Store Customization
+===================
+
+The real power of Satchmo is not in what it does out of the box but what
+the framework allows you to do with minimal modification.  As you start
+to develop your online presence you will have a whole range of different
+ideas on how you would like to make your store look and feel.  Satchmo 
+provides a simple store layout that you can modify as much or as little 
+as you wish.  There are several ways to tweak Satchmo to your needs.  The
+following list is in the relative ease of customization:
+
+1.  CSS customization
+2.  Template customization
+3.  URL customization
+4.  Checkout process customization
+5.  Shipping module customization
+6.  Payment module customization
+
+CSS Customization
+-----------------
+
+The simplest way to modify Satchmo is to change the attributes in the css
+file used by the default shop.  The current style.css file is located in
+/satchmo/static/css.  You can modify this file directly (not recommended) or
+create a new CSS file and modify the base.html template file to point to
+your new and improved css file.
+
+The benefits of this approach is that it is simple to implement and makes it
+easy to update Satchmo as changes are made.  The downside is that there is 
+only so much you can do with css changes.
+
+Template Customization
+----------------------
+
+Template customization allows you to completely alter the look and feel of 
+your site without having to resort to coding.  The majority of the display 
+elements are accessible via css or template changes. Before making any template 
+changes, it would be useful to understand Django templates in general.  
+The `Django Template Author Guide`_ is the best place to start.
+
+Once you are ready to make template changes, the best option is to copy the 
+entire templates directory (and its contents) to a new location::
+
+    cp -rp /path/to/satchmo/templates /my/new/templates
+
+
+Next, modify settings.py to point to your new templates directory::
+
+    TEMPLATE_DIRS = (
+        # Put strings here, like "/home/html/django_templates".
+        # Always use forward slashes, even on Windows.
+        "/my/new/templates",)
+
+
+Now, go ahead and make all the changes to your templates.  Don't forget, this is
+also the place where you can change the email messages sent to users as well as
+the pdf documents created by the admin interface.  The amount of power and flexibility
+here is much higher than just about any "shopping cart" application out there!
+
+
+URL Customization
+-----------------
+
+Another nifty feature of Django is the flexibility in configuring the URLs of an 
+application.  Because a web store frequently requires good search engine ranking, 
+you will most likely want to do everything in your power to help your store rise
+in the rankings.  Using good, clean descriptive URLs is a huge plus.  Another benefit
+of flexible URLs is that allows you to easily integrate Satchmo with an existing
+site or differentiate your site with a creative scheme (or language).
+
+For convenience, urls can be modified by changing the SHOP_URLS variable in the
+local_settings.py file.  Any url assigned to this variable will override the existing
+url naming scheme.
+
+Checkout Process Customization
+------------------------------
+
+The checkout process is also designed to be easily configured for your needs.  More details
+of this process are forthcoming.  In the meantime, take a look at the source and see how
+easy it is to modify.
+
+Shipping Module Customization
+-----------------------------
+
+The comments in the dummy.py shipping module walk through how to configure shipping for your
+unique needs.
+
+Payment Module Customization
+----------------------------
+
+Payment modules are probably the most difficult to provide a cookie cutter approach.  Take a
+look at the payment documentation to see which modules are already configured.  If you
+have a new payment module you would like to add, then contact us on the mailing list for
+hints on how to approach the process.
+
+.. _Django Template Author Guide: http://www.djangoproject.com/documentation/templates/

File docs/discount.gif

Added
New image

File docs/discounts.txt

+Discounts
+=========
+
+Satchmo allows you to setup multiple types of discount codes:
+
+ * Straight dollar amounts
+ * Percentage off
+ * Free shipping
+ 
+Each of these types can be qualified or limited by:
+
+ * Number of uses
+ * Minimum order
+ * Specific dates
+ * Specific products
+ 
+Creating Discounts
+------------------
+
+A discount code is easy to setup in Satchmo using the following fields:
+
+Description
+    A simple characterization of the discount.  For example, "New User Discount" or "Repeat Customer Promotion."
+    
+Code
+    The unique identifier a user would enter to activate this discount.
+    
+Amount
+    A straight dollar discount off a product.  You can only have a dollar OR percentage.
+    
+Percentage
+    A percent discount off the price.
+    
+Allowed Uses
+    The number of times this discount can be applied.
+    
+Num Uses
+    The number of times this discount has been used.
+
+Minimum Order
+    The minimum amount that must be purchased before this can apply.
+   
+Start Date
+    The date when this discount becomes effective.
+    
+End Date
+    The date when this discount is no longer valid.
+    
+Active
+    A flag you can set to make it active.  If you want to create a discount in advance but hold off on making it available, you can use this flag.
+    
+Free Shipping
+    Whether or not this discount allows the user to not have to pay shipping charges.
+    
+Include Shipping
+    A flag to determine if shipping costs should be affected by the discount.
+    
+Valid Products
+    A list of all the products this discount is valid for.

File docs/email-verification.txt

+Email Verification
+==================
+
+By default, Satchmo doesn't ask users to verify their email addresses. If you'd
+like to, you can configure Satchmo to use django-registration.
+
+1. Download and extract `django-registration`_. Make sure that the registration
+   folder is on your pythonpath.
+
+2. Edit local_settings.py:
+
+    - Set REQUIRE_EMAIL_VERIFICATION to True.
+    - Set ACCOUNT_ACTIVATION_DAYS to an integer value. This setting determines
+      how long it takes for an activation code to expire.
+
+3. Edit settings.py:
+
+    - Add 'registration' to INSTALLED_APPS.
+
+4. Run "python manage.py syncdb".
+
+.. _django-registration: http://code.google.com/p/django-registration/
+

File docs/features.txt

+Satchmo Features
+=====================
+  
+Current Features
+----------------
+Satchmo is built using the Django framework.  Using this framework has a number 
+of advantages for building an online shopping site.  Some of them include:
+
+-   A built in Object-relational mapper makes it easy to create and/or modify our 
+    models and have the underlying database created for you.  The ORM also makes it 
+    easy to make simple references to complex relationships without being an SQL 
+    expert.  If you need to drop down to SQL you can.
+-   An automatic admin interface makes it easy for you to get up and running 
+    quickly and see all the data in an easy to use set of forms.  The permission 
+    system also allows you to give selective access to different people on your 
+    team.
+-   Flexible URL design that is helpful for making your site look professional 
+    and show up well in search engines.
+-   Powerful template system that allows you to configure every aspect of your 
+    site.  The included reference implementation shows you a very basic site but 
+    with Django's template you can easily make your site as unique and complex as 
+    you'd like.
+-   Proven performance including a robust caching system.  This is one of the 
+    most critical aspects of an online store.  If you make it big and realize your 
+    old site can't handle the load, you're in a difficult place.
+-   Security is also a primary component for any online site these days.  
+    Django's session management capabilities makes it more secure by not encoding 
+    session ID's in urls so that session-ID theft is not possible via the "Referrer" header.  
+    Also, Django takes care of escaping SQL statements so that SQL injection attacks are    
+    not possible.
+-   Robust internationalization support in all phases of a project allow you to 
+    tailor your site to different countries and languages.
+
+Django clearly sets Satchmo up to be a robust framework for your store.  The 
+Satchmo framework is still in development but already provides a number 
+of very sophisticated features.  Some highlights include:
+
+-   A robust customer model that allows you to maintain unlimited addresses for 
+    each of your customers as well as customer specific notes and information.
+-   Customer orders can have multiple statuses so it's easy for you to track your 
+    interactions.
+-   A full localization model that is pre-loaded with over 250 countries and 
+    information about their subdivisions including states, counties or other 
+    divisions.
+-   An extremely flexible category model that allows you to have deeply nested 
+    categories to help your users find products quickly.
+-   A sophisticated product model that allows you to describe and categorize the 
+    products as well as link them to related products.  You can feature certain 
+    products and store item dimensions in order to use for product shippping.  You 
+    can also associate as many product options (sizes, colors, etc) with a product 
+    and manage them in a very simple way.  This feature allows you to manage a 
+    large number of unique products without a lot of very time consuming steps.  
+    Each of these unique items can have price changes or other configurable changes 
+    based on your needs.
+-   Products also have the capability to have multiple images associated with 
+    them.  Each image is automatically scaled to a thumbnail size of your choosing 
+    and is automatically cached for maximum performance.
+-   Support for Authorize.net and Trust Commerce credit card processing.
+-   Support for accepting paypal.
+-   Google analytics, google addwords and sitemaps support.
+-   Support for invoice, packing slip and shipping label creation and printing.
+-   Fine grained ssl support to secure certain urls in your store.
+-   Store product search functionality.
+-   Tax calculations based on your unique requirements.
+-   Flexible pricing and discounting model.
+-   Mailman integration for newsletter management.
+-   Flexible email notifications for purchases and account signup.
+-   Full Account management features (logout, password reset and change password functionality).
+-   User configurable shipping modules.
+-   Ability to rate and/or comment on store products
+-   Regression test suite to catch bugs early.
+-   Simple inventory management screens.
+-   Downloadable product types
+
+Features for future releases
+----------------------------
+
+-   Additional payment modules
+-   Additional translations
+-   Multiple price tiers
+

File docs/graph-viz-satchmo.py

+#!/usr/bin/env python
+"""Django model to DOT (Graphviz) converter
+by Antonio Cavedoni <antonio@cavedoni.org>
+
+Lightly modified by Chris Moffitt
+Included in Satchmo with permission
+
+
+"""
+
+__version__ = "0.6"
+__svnid__ = "$Id$"
+__license__ = "Python"
+__author__ = "Antonio Cavedoni <http://cavedoni.com/>"
+__contributors__ = [
+   "Stefano J. Attardi <http://attardi.org/>",
+   "limodou <http://www.donews.net/limodou/>",
+   "Carlo C8E Miron"
+   ]
+
+from django.db import models
+from django.db.models import get_models
+from django.db.models.fields.related import \
+    ForeignKey, OneToOneField, ManyToManyField
+from django.db.models.fields.generic import GenericRelation
+from django.template import Template, Context
+import os
+from textwrap import wrap
+from string import join, split
+os.environ["DJANGO_SETTINGS_MODULE"]="satchmo.settings"
+
+
+dot_template = """
+digraph {{ name }} 
+   {
+  graph [ 
+        labelloc = t
+        label= < 
+          <TABLE>
+          <TR><TD ALIGN="center" BGCOLOR="olivedrab4">
+          Satchmo {{ title }} model</TD></TR>
+          <TR><TD ALIGN="left">{{ doc }}</TD></TR>
+          </TABLE>
+          >        
+        ]
+  fontname = "Helvetica"
+  fontsize = 8
+  node [
+    fontname = "Helvetica"
+    fontsize = 8
+    shape = "plaintext"
+  ]
+   edge [
+    fontname = "Helvetica"
+    fontsize = 8
+  ]
+
+  {% for model in models %}
+  {{ model.name }} [label=<
+    <TABLE BGCOLOR="palegoldenrod" BORDER="0" CELLBORDER="0" CELLSPACING="0">
+     <TR><TD COLSPAN="2" CELLPADDING="4" ALIGN="CENTER" BGCOLOR="olivedrab4"
+     ><FONT FACE="Helvetica Bold" COLOR="white"
+     >{{ model.name }}</FONT></TD></TR>
+     <TR><TD COLSPAN="2" ALIGN="LEFT" BGCOLOR="goldenrod3">{{model.doc}}</TD></TR>
+     {% for field in model.fields %}
+     <TR><TD ALIGN="LEFT" BORDER="0"
+     ><FONT FACE="Helvetica Bold">{{ field.name }}</FONT
+     ></TD>
+     <TD ALIGN="LEFT">{{ field.type }}</TD></TR>
+     {% endfor %}
+    </TABLE>
+    >]
+   
+  {% for relation in model.relations %}
+  {{ model.name }} -> {{ relation.target }} 
+    [label="{{ relation.type }}"] {{ relation.arrows }};
+  {% endfor %}
+  {% endfor %}
+}
+"""
+
+def wrap_doc(docString, wraplimit=45):
+    if docString:
+        tmp = wrap(docString, 45)
+        return join(tmp,"<BR/>")
+    else:
+        return ("")
+
+def generate_dot(app_label):
+   app = models.get_app(app_label)
+   doc = wrap_doc(app.__doc__, 65)
+   title = split(app.__name__,".")[1]
+   graph = Context({
+      'name': '"%s"' % app.__name__, 
+      'models': [],
+      'doc': doc,
+      'title': title,
+      })
+
+   for appmodel in get_models(app):
+      tmpDoc = wrap_doc(appmodel.__doc__)
+      model = {
+         'name': appmodel.__name__,
+         'fields': [],
+         'relations': [],
+         'doc': tmpDoc
+         }
+
+      # model attributes
+      def add_attributes():
+         model['fields'].append({
+               'name': field.name,
+               'type': type(field).__name__
+               })
+
+      for field in appmodel._meta.fields:
+         add_attributes()
+         
+      if appmodel._meta.many_to_many:
+         for field in appmodel._meta.many_to_many:
+            add_attributes()
+
+      # relations
+      def add_relation(extras=""):
+         _rel = {
+            'target': field.rel.to.__name__,
+            'type': type(field).__name__,
+            'arrows': extras
+            }
+         if _rel not in model['relations']:
+            model['relations'].append(_rel)
+
+      for field in appmodel._meta.fields:
+         if isinstance(field, ForeignKey):
+            add_relation()
+         elif isinstance(field, OneToOneField):
+            add_relation("[arrowhead=none arrowtail=none]")
+
+      if appmodel._meta.many_to_many:
+         for field in appmodel._meta.many_to_many:
+            if isinstance(field, ManyToManyField):
+               add_relation("[arrowhead=normal arrowtail=normal]")
+            elif isinstance(field, GenericRelation):
+               add_relation(
+                  '[style="dotted"] [arrowhead=normal arrowtail=normal]')
+      graph['models'].append(model)
+   
+   t = Template(dot_template)
+   return t.render(graph)
+
+if __name__ == "__main__":
+   import sys
+   try:
+      app_label = sys.argv[1]
+      print generate_dot(app_label)
+   except IndexError:
+      print __doc__

File docs/installation.txt

+============
+Installation
+============
+
+This guide assumes that Django is properly installed and that you have installed the
+dependencies mentioned in the requirements section.
+
+1. Get the latest Satchmo production source release::
+
+        svn co svn://satchmoproject.com/satchmo/tags/0.6
+             or download from
+        http://www.satchmoproject.com/snapshots/satchmo-0.6.tar.gz
+
+
+.. Note::
+    If you would like the latest bleading edge release, get it via svn-
+	    svn co svn://satchmoproject.com/satchmo/trunk/
+        
+2. Ensure that satchmo is on your pythonpath.  There are several options for adding Satchmo to the path:
+	
+	- Add satchmo to the PYTHONPATH variable
+	- Create a .pth file in your site-packages directory. pth_.
+	- Install Satchmo in the site-packages directory
+
+Either way, once it's done, you should be able to do this successfully::
+
+	$ python
+	Python 2.4.2 (#1, Feb  9 2006, 05:29:30)
+	[GCC 3.4.4 (Gentoo 3.4.4-r1, ssp-3.4.4-1.0, pie-8.7.8)] on linux2
+	Type "help", "copyright", "credits" or "license" for more information.
+	>>> import django
+	>>> import satchmo
+	>>>
+
+Do not attempt to progress any further on the install until the above imports
+work.
+
+The next two steps depend on whether or not Satchmo is a standalone project or
+just an app that is part of another Django project.
+
+If Satchmo is a standalone app (follow steps 3 and 4):
+
+3.  Modify Satchmo's default settings-customize.py file::
+
+        cp settings-customize.py settings.py
+    
+4.  Modify settings.py to reflect your setup.
+
+If Satchmo is part of another Django app (follow step 5):
+
+5. Modify you project settings.py file so that it has the following line at the end::
+
+        from local_settings import *
+
+Now that the basic application settings are complete, you will need to
+configure the satchmo specific items stored in local_settings.py.
+
+6.  Create your customized local_settings.py file::
+    
+        cp local_settings-customize.py local_settings.py
+
+7.  Edit this local_settings.py file for your setup. The following values need to be changed::
+
+        DATABASE_NAME = 'Your DB Name Here'
+        DATABASE_PASSWORD = 'Your DB Password Here'
+        DATABASE_USER = 'Your DB User Here'
+        SECRET_KEY = 'Your secret key here'
+        
+        Any other values that are applicable to your setup
+
+.. warning::
+    The next step can erase data in the satchmo database. Be sure to have a backup of any critical data.
+
+8.  Load the sample data::
+
+        python load_data.py
+    
+9.  When prompted, enter Yes to all the questions.  This script will also install the i18n data.
+
+10.  Start up the sample webserver to see your store::
+
+        python manage.py runserver
+        
+11.  In order to see your sample store, point your browser to::
+    
+        http://localhost/shop to see your store
+
+12.  If you want to see the admin interface, point your browser to::
+
+        http://localhost/admin
+
+.. note::
+    The above urls will be dependent on your Django setup.  If you're running the webserver on the
+    same machine you're developing on, the above urls should work.  If not, use the appropriate url.
+
+.. _pth: http://bob.pythonmac.org/archives/2005/02/06/using-pth-files-for-python-development/

File docs/introduction.txt

+Satchmo Introduction
+=====================
+
+History
+-------
+Like most Open Source projects, Satchmo was started to "scratch an itch."  This
+particular itch was to create a framework for developing shopping cart software
+using the Django framework.  After a little bit of discussion on the Django list, 
+we created our own project in April 2006.
+
+In August 2007, we released the first public release of Satchmo - version 0.5.
+
+Project Mission
+---------------
+Satchmo's mission is to use Django to create an open source framework for creating 
+unique and robust online stores. To provide maximum flexibility, Satchmo is licensed 
+under the BSD license.
+
+Current Development Status
+--------------------------
+With the release of version 0.5, Satchmo entered beta status.  The most recent release is 0.6 and
+includes many improvements and fixes over 0.5.  All users are encouraged to use this latest version.
+All the basic functionalities required to run the store are present.  Many advanced functions are also available.
+While we have tried to squash all of the bugs, there still may be a few out there.  We are
+also striving to maintain a stable api going forward.  All future releases will contain
+instructions on how to migrate the changes.  Please refer to this document for the 
+backwards incompatible changes - http://www.satchmoproject.com/trac/wiki/BackwardsIncompatibleChanges

File docs/migration.txt

+Satchmo Migrations and Upgrades
+===============================
+
+This guide is intended to outline the steps required to migrate an existing Satchmo shop to a newer version.  These steps will work for most stock stores but if you have made significant changes to the models, you will be required to incorporate those changes into this guide.  The latest list of backwards incompatible changes can always be found here-
+http://www.satchmoproject.com/trac/wiki/BackwardsIncompatibleChanges
+
+The ideal way to migrate would be to dump all of your existing store data, remove all of your old tables, synch the new models and reload the data.  If this process is not practical, then follow the individual steps outlined below.
+
+Always remember to do a complete backup of your store before attempting to migrate.  Additionally, we recommend that you test the migration on a test server before attempting on a production server.
+
+Version 0.5 -> 0.6
+------------------
+
+Model Changes
++++++++++++++
+
+Several changes have been made to the underlying models.  The following sql statements will need to be executed in order to ensure your tables are in synch with this version.
+
+ - Add the enable_ratings field::
+
+        alter table shop_config add enable_ratings tinyint(1) default '1';
+
+ - Add a new product ordering field::
+
+        alter table product_product add ordering int(11) default '0';
+
+ - Increased the size of the fields in the state tables::
+
+        ALTER TABLE `contact_addressbook` CHANGE `state` `state` VARCHAR( 50 )
+        ALTER TABLE `contact_order` CHANGE `bill_state` `bill_state` VARCHAR( 50 )
+        ALTER TABLE `contact_order` CHANGE `ship_state` `ship_state` VARCHAR( 50 )
+
+ - Addition of new l10n models to replace the i18n models.  Ensure satchmo.l10n is added to your settings and execute syncdb.
+
+Additional Dependencies
++++++++++++++++++++++++
+
+`Comment utils`_ is now required to add product comments.  Follow the instructions on its site to download and install it.
+
+Other Changes
++++++++++++++
+
+As mentioned earlier in this document, the old satchmo i18n models have been deprecated.  New l10n models are now used to store country related information.  You must ensure that your settings are updated to include satchmo.l10n.
+
+The new configuration model requires that a cache back end be installed.  Memcached, file or DB are acceptable options.
+
+Other changes have been made to the way credit card payment charges are captured.
+
+.. _Comment utils: http://code.google.com/p/django-comment-utils/

File docs/payment.gif

Added
New image

File docs/payment.txt

+Payment Modules
+===============
+
+Satchmo currently has support for several different payment modules.  This
+document will discuss some of the particular configuration items to keep in
+mind for each module.
+
+Authorize.net
+-------------
+The authorize.net module requires that you have a valid authorize.net account.
+In order to get your transaction key and transaction login, go to the
+`site <http://www.authorize.net/>`_ and complete the account registration process.
+When you have completed it, you can fill in the appropriate fields in the
+admin settings to enable this payment processor.
+
+There is one thing to keep in mind when setting up the test processing.
+If you are posting to https://test.authorize.net/gateway/transact.dll,
+and you are not using an account whose API login ID starts with
+"cpdev" or "cnpdev", you will get an Error 13 message. Make sure you are
+posting to https://certification.authorize.net/gateway/transact.dll for
+test transactions if you do not have a cpdev or cnpdev.
+
+TrustCommerce
+-------------
+TrustCommerce configuration is very similar to authorize.net.  You will need
+to go to `TrustCommerce <http://www.trustcommerce.com/>`_ and get your account
+setup.
+
+One special note with TrustCommerce - you must have the tclink libraries installed.
+You can get these from TrustCommerce or via this url
+`Tc Link <http://www.trustcommerce.com/tclink.html>`_
+
+Once the library is installed, you can fill in your login and password information
+in the admin config.
+
+PayPal
+------
+More details needed here.
+
+Google
+------
+More details needed here.

File docs/paypal-1.txt

+1. Get a PayPal account and set it up
+
+    Elaborate
+    Set IPN URL.
+    You'll want a developer account too for testing.
+
+2. Edit local_settings.py:
+        
+        Find "#### For PayPal Web Payments Standard ####", and uncomment all the
+        lines after it EXCEPT the first one (labeled production). Fill all of
+        values in.
+        
+3. Edit shop/urls.py:
+
+        Add "paypal." to the last two checkout steps:
+             (r'^checkout/pay/$', '>>paypal.<<checkout-step2.pay_ship_info', {'SSL': False}, 'checkout-step2'),
+             (r'^checkout/confirm/$', '>>paypal.<<checkout-step3.confirm_info', {'SSL': False}, 'checkout-step3'),
+
+4. Test it:
+
+        You should have set PayPal to use the sandbox/testing server, so it
+        won't make any real money transfers yet. Add some products to your cart,
+        check out, and make sure PayPal shows the right items and prices.
+        
+        The PayPal sandbox doesn't send real emails either. You can check the
+        emails from https://developer.paypal.com/cgi-bin/devscr?cmd=_email-session
+   
+5. If everything worked right, switch to the real PayPal server:
+
+        In local_settings.py, uncomment the production server's URL and comment
+        out the testing server.

File docs/pricing.txt

+Pricing
+=======
+
+Satchmo has flexible pricing that allows you to price at multiple levels.
+
+Pricing at the Item Level
+-------------------------
+
+You can create top-level Products, which are the things your customers see on the website. (Ex: Python Rocks shirt in demo store)
+Additionally, these products can have options (Ex: sizes, colors, etc).  The product has a variation for each combination of options. 
+This can be used to track inventory of particular product variations. (Ex: The Large, Blue, Python Rocks Shirt)
+
+Effectively it works like:
+Product + Option = Variation
+
+Pricing fits into the picture this way:
+ * You can set a default price on your Product.
+ * You can set a price adjustment for an option.
+ * You can set a price over-ride for a variation.
+
+The price code looks through these backwards. If the variation has a price then that is used
+Otherwise the Product price is used +/- the adjustment for the chosen options (IE: XL shirts are +$1.00)
+
+With this capability, you can quickly price a simple store by just using the product prices, and possibly adding price adjustments for specific options, 
+but you have the option of very fine-grained price control by setting prices for each variation.
+
+Product Variation Prices
+------------------------
+
+On the product variations, the price can have an expiration date and/or a quantity. 
+If either of these fields are set then that price is only effective for orders placed before that date, or >= that quantity. 
+The most specific of these gets highest priority (IE: the soonest expiration date, and the highest applicable quantity). 
+This useful for running temporary promotions that automatically expire.

File docs/product.gif

Added
New image

File docs/product.txt

+Products
+========
+
+The core of any online store is the product  you are selling.  Some people may have very simple needs for categorizing and describing their products, 
+while others may have much more complex needs.  Satchmo's product framework tries to strike a balance, enabling easy product configuration but supporting 
+complex products if your needs demand.
+
+Categories
+----------
+
+Out of the box, Satchmo supports the traditional hierarchical method for categorizing products.  In other words, you can create category trees like this:
+
+ * Movies
+
+   - Action
+   - Western
+   - Comedy
+   - Black and White
+
+     + Foreign
+     + English
+     + Silent
+
+ * Books
+
+   - Fiction
+   - Non-fiction
+    
+Some things to keep in mind with Satchmo's implementation:
+
+ * You are not limited to the number of categories or the depth of categories.
+ * You are allowed to add products to 1 or more product categories
+ 
+When entering a category in the admin interface, you will have several fields to fill in.  Below is a description of each field and how it is used:
+
+Name
+    The name of this specific category.  It is the text seen by the user to describe this category.  In the example above, Movies, Action, etc. are all names.
+    
+Slug
+    This is a prepopulated field that is used in the url to identify the category.  One aspect that Django encourages is well designed urls.  The slug field is commonly used so that a url "makes sense" when you look at it.  The nice side effect of this is that in some cases, search engines will give higher ranking for sites with cleaner urls.
+    
+Parent
+    If a category is at the top of the tree, then there is no parent.  In our example above, Movies and Books have no parents.  While Action, Comedy, Black and White would all have Movies as a parent.
+    
+Meta
+    When an HTML page is constructed, certain meta information can be added to the page which makes it easier for search engines to classify your pages and your products.  This field is used to enter information about your category that may not be readily seen by just looking at a description.
+    
+Description
+    This is a free form field that describes this category.  You can use this to help guide users in your site.  It's also helpful for search engines.
+    
+Product
+-------
+
+A Product is the main focus of your store.  It is the "thing" that a person going to your store would see.  There are many fields you can use to configure your Items.
+
+Category
+    See the description above.  This is where you choose one or more categories where a person could find this product.
+    
+Name
+    This is the full name of an product.  Think of it as the title of the product.
+    
+Slug
+    This is similar to the slug field in category.  It is a brief description of the item that will show up in the url and uniquely identify this product.
+    
+Description
+    Free form text fields that tell a potential customer about this item and why they may want to purchase it.
+
+Short_description
+    This is meant for a brief 1 or 2 line description that can be shown by your templates on the product category pages and similar places.
+
+Date_added
+    The date you added this product to your store.  It could be useful for showing a list of new products.
+    
+Active
+    A flag to identify which items are still valid in the store.  If you decide you don't want to show an item for purchase, I recommend making it Active=False instead of trying to delete it.
+    
+Featured