I did something similar, but i don't know how to write unit tests, so
my code never will be at satchmo trunk ))
I can post here my implementation.
First you need to create middleware that will put referer domain to
session if its not already there
class Affiliate(object):
def process_request(self, request):
if not request.session.get('referer', None):
referer = request.META.get('HTTP_REFERER', None)
request.session['referer'] = referer
return None
2. You need to create 3 models that will store details of participants
in your affiliate program
from django.db import models
from django.contrib.auth.models import User
from contact.models import Order
class Affiliate(models.Model):
referer = models.TextField()
user = models.ForeignKey(User)
def __unicode__(self):
return self.referer
class Admin:
list_display = ('user', 'referer')
class RefSite(models.Model):
name = models.CharField(max_length=100)
def __unicode__(self):
return
self.name
class Admin:
pass
class Referer(models.Model):
name = models.CharField(max_length=100)
bank_name = models.CharField(max_length=100)
bank_branch = models.IntegerField()
bank_account = models.IntegerField()
user = models.ForeignKey(User)
sites = models.ManyToManyField(RefSite, filter_interface=True)
procent = models.DecimalField(max_digits=4, decimal_places=3)
order = models.ManyToManyField(Order, filter_interface=True,
blank=True)
def __unicode__(self):
return
self.name
class Admin:
pass
#class Affiliate - Will be used to save referer if user will register
in store
#class RefSite - will store domain name of some affiliate
#class Referer - Store details of participant and attach orders and
domains
3. Attach methods to your views when you want to use it. The first
place is user registration file "accounts/views.py" in function
register_handle_form you can add
referer = request.session.get('referer','')
Affiliate.objects.create(referer=referer, user=user)
after line:
else:
user = User.objects.create_user(username, email,
password)
It will save the user with the referer link forever, so if user will
comeback to store after five years, he is still your referer and you
will get some money for his orders.
The last thing to do is to place trigger when the status of order will
be changed to shipped. It should attach an order to one of your
affiliates if the domain match class RefSite name field, but will try
to find referer in saved database if user authenticated, and if not
found - in session