diff --git a/leads/forms.py b/leads/forms.py new file mode 100644 index 0000000..81e46cb --- /dev/null +++ b/leads/forms.py @@ -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'] diff --git a/leads/models.py b/leads/models.py index 71a8362..2ec3177 100644 --- a/leads/models.py +++ b/leads/models.py @@ -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 diff --git a/leads/views.py b/leads/views.py index 91ea44a..d081669 100644 --- a/leads/views.py +++ b/leads/views.py @@ -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})