feat: Implement lead scoring and prioritization

This commit is contained in:
Lord_Devi 2024-09-16 20:48:30 -04:00
parent 842d3c5d31
commit 307735d63a
3 changed files with 83 additions and 3 deletions

7
leads/forms.py Normal file
View 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']

View file

@ -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

View file

@ -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})