diff --git a/leads/migrations/0004_auto_20201216_1046.py b/leads/migrations/0004_auto_20201216_1046.py new file mode 100644 index 0000000..eedebd9 --- /dev/null +++ b/leads/migrations/0004_auto_20201216_1046.py @@ -0,0 +1,19 @@ +# Generated by Django 3.1.4 on 2020-12-16 10:46 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('leads', '0003_auto_20201216_1027'), + ] + + operations = [ + migrations.AlterField( + model_name='lead', + name='agent', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='leads.agent'), + ), + ] diff --git a/leads/migrations/0005_lead_organisation.py b/leads/migrations/0005_lead_organisation.py new file mode 100644 index 0000000..aad9130 --- /dev/null +++ b/leads/migrations/0005_lead_organisation.py @@ -0,0 +1,20 @@ +# Generated by Django 3.1.4 on 2020-12-16 10:53 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('leads', '0004_auto_20201216_1046'), + ] + + operations = [ + migrations.AddField( + model_name='lead', + name='organisation', + field=models.ForeignKey(default=1, on_delete=django.db.models.deletion.CASCADE, to='leads.userprofile'), + preserve_default=False, + ), + ] diff --git a/leads/models.py b/leads/models.py index 81ecd6f..5a5d036 100644 --- a/leads/models.py +++ b/leads/models.py @@ -19,7 +19,8 @@ class Lead(models.Model): first_name = models.CharField(max_length=20) last_name = models.CharField(max_length=20) age = models.IntegerField(default=0) - agent = models.ForeignKey("Agent", on_delete=models.CASCADE) + organisation = models.ForeignKey(UserProfile, on_delete=models.CASCADE) + agent = models.ForeignKey("Agent", null=True, blank=True, on_delete=models.SET_NULL) def __str__(self): return f"{self.first_name} {self.last_name}" diff --git a/leads/views.py b/leads/views.py index b498b75..bbd55bc 100644 --- a/leads/views.py +++ b/leads/views.py @@ -29,9 +29,19 @@ def landing_page(request): class LeadListView(LoginRequiredMixin, generic.ListView): template_name = "leads/lead_list.html" - queryset = Lead.objects.all() context_object_name = "leads" + def get_queryset(self): + user = self.request.user + # initial queryset of leads for the entire organisation + if user.is_organisor: + queryset = Lead.objects.filter(organisation=user.userprofile) + else: + queryset = Lead.objects.filter(organisation=user.agent.organisation) + # filter for the agent that is logged in + queryset = queryset.filter(agent__user=user) + return queryset + def lead_list(request): leads = Lead.objects.all() @@ -43,9 +53,19 @@ def lead_list(request): class LeadDetailView(LoginRequiredMixin, generic.DetailView): template_name = "leads/lead_detail.html" - queryset = Lead.objects.all() context_object_name = "lead" + def get_queryset(self): + user = self.request.user + # initial queryset of leads for the entire organisation + if user.is_organisor: + queryset = Lead.objects.filter(organisation=user.userprofile) + else: + queryset = Lead.objects.filter(organisation=user.agent.organisation) + # filter for the agent that is logged in + queryset = queryset.filter(agent__user=user) + return queryset + def lead_detail(request, pk): lead = Lead.objects.get(id=pk) @@ -70,7 +90,7 @@ def form_valid(self, form): recipient_list=["test2@test.com"] ) return super(LeadCreateView, self).form_valid(form) - + def lead_create(request): form = LeadModelForm() @@ -87,9 +107,13 @@ def lead_create(request): class LeadUpdateView(OrganisorAndLoginRequiredMixin, generic.UpdateView): template_name = "leads/lead_update.html" - queryset = Lead.objects.all() form_class = LeadModelForm + def get_queryset(self): + user = self.request.user + # initial queryset of leads for the entire organisation + return Lead.objects.filter(organisation=user.userprofile) + def get_success_url(self): return reverse("leads:lead-list") @@ -111,11 +135,15 @@ def lead_update(request, pk): class LeadDeleteView(OrganisorAndLoginRequiredMixin, generic.DeleteView): template_name = "leads/lead_delete.html" - queryset = Lead.objects.all() def get_success_url(self): return reverse("leads:lead-list") + def get_queryset(self): + user = self.request.user + # initial queryset of leads for the entire organisation + return Lead.objects.filter(organisation=user.userprofile) + def lead_delete(request, pk): lead = Lead.objects.get(id=pk)