Affiliate program app

77 views
Skip to first unread message

skam

unread,
Mar 27, 2008, 6:18:56 AM3/27/08
to Satchmo users
I've filed ticket http://www.satchmoproject.com/trac/ticket/287
regarding affiliate and/or referral program app.
It would be great to see this feature in Satchmo.

Probably someone already did this. Does anyone see such app?

offline

unread,
Mar 27, 2008, 7:00:19 AM3/27/08
to Satchmo users
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

Max

unread,
Mar 27, 2008, 8:15:56 AM3/27/08
to Satchmo users

Thanks for the code! I'll try to play with it.
Reply all
Reply to author
Forward
0 new messages