feat: Implement lead scoring and prioritization
This commit is contained in:
parent
842d3c5d31
commit
307735d63a
7
leads/forms.py
Normal file
7
leads/forms.py
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
from django import forms
|
||||
from .models import Lead
|
||||
|
||||
class LeadForm(forms.ModelForm):
|
||||
class Meta:
|
||||
model = Lead
|
||||
fields = ['name', 'email', 'company', 'lead_source']
|
||||
|
|
@ -1,3 +1,31 @@
|
|||
from django.db import models
|
||||
|
||||
# Create your models here.
|
||||
class Lead(models.Model):
|
||||
name = models.CharField(max_length=100)
|
||||
email = models.EmailField()
|
||||
company = models.CharField(max_length=100)
|
||||
lead_source = models.CharField(max_length=50, choices=[
|
||||
('website', 'Website'),
|
||||
('referral', 'Referral'),
|
||||
('event', 'Event'),
|
||||
('other', 'Other'),
|
||||
])
|
||||
score = models.IntegerField(default=0)
|
||||
|
||||
def calculate_lead_score(self):
|
||||
score = 0
|
||||
if self.lead_source == 'website':
|
||||
score += 10
|
||||
elif self.lead_source == 'referral':
|
||||
score += 20
|
||||
elif self.lead_source == 'event':
|
||||
score += 15
|
||||
# Add more scoring logic based on other factors
|
||||
return score
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
self.score = self.calculate_lead_score()
|
||||
super().save(*args, **kwargs)
|
||||
|
||||
def __str__(self):
|
||||
return self.name
|
||||
|
|
|
|||
|
|
@ -1,3 +1,48 @@
|
|||
from django.shortcuts import render
|
||||
from django.shortcuts import render, redirect, get_object_or_404
|
||||
from django.db.models import Q
|
||||
from .models import Lead
|
||||
from .forms import LeadForm
|
||||
|
||||
# Create your views here.
|
||||
def lead_list(request):
|
||||
query = request.GET.get('q')
|
||||
if query:
|
||||
leads = Lead.objects.filter(
|
||||
Q(name__icontains=query) |
|
||||
Q(email__icontains=query) |
|
||||
Q(company__icontains=query)
|
||||
).order_by('-score')
|
||||
else:
|
||||
leads = Lead.objects.all().order_by('-score')
|
||||
return render(request, 'leads/lead_list.html', {'leads': leads})
|
||||
|
||||
def lead_detail(request, pk):
|
||||
lead = get_object_or_404(Lead, pk=pk)
|
||||
return render(request, 'leads/lead_detail.html', {'lead': lead})
|
||||
|
||||
def lead_create(request):
|
||||
if request.method == 'POST':
|
||||
form = LeadForm(request.POST)
|
||||
if form.is_valid():
|
||||
form.save()
|
||||
return redirect('lead_list')
|
||||
else:
|
||||
form = LeadForm()
|
||||
return render(request, 'leads/lead_form.html', {'form': form})
|
||||
|
||||
def lead_update(request, pk):
|
||||
lead = get_object_or_404(Lead, pk=pk)
|
||||
if request.method == 'POST':
|
||||
form = LeadForm(request.POST, instance=lead)
|
||||
if form.is_valid():
|
||||
form.save()
|
||||
return redirect('lead_list')
|
||||
else:
|
||||
form = LeadForm(instance=lead)
|
||||
return render(request, 'leads/lead_form.html', {'form': form})
|
||||
|
||||
def lead_delete(request, pk):
|
||||
lead = get_object_or_404(Lead, pk=pk)
|
||||
if request.method == 'POST':
|
||||
lead.delete()
|
||||
return redirect('lead_list')
|
||||
return render(request, 'leads/lead_confirm_delete.html', {'lead': lead})
|
||||
|
|
|
|||
Loading…
Reference in a new issue