From e6c0830faa9bf4a80ee977134a682868d410a40b Mon Sep 17 00:00:00 2001 From: mattfreire Date: Wed, 16 Dec 2020 13:06:49 +0200 Subject: [PATCH 1/2] Leads queryset and optional agent --- leads/migrations/0004_auto_20201216_1046.py | 19 +++++++++++ leads/migrations/0005_lead_organisation.py | 20 +++++++++++ leads/models.py | 3 +- leads/views.py | 38 ++++++++++++++++++--- 4 files changed, 74 insertions(+), 6 deletions(-) create mode 100644 leads/migrations/0004_auto_20201216_1046.py create mode 100644 leads/migrations/0005_lead_organisation.py 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) From 4a7a40785cd43f3a8b5155218584390bd0b2cc77 Mon Sep 17 00:00:00 2001 From: olable Date: Sat, 21 Aug 2021 11:49:03 +0100 Subject: [PATCH 2/2] Squashed commit of the following: commit e6c0830faa9bf4a80ee977134a682868d410a40b Author: mattfreire Date: Wed Dec 16 13:06:49 2020 +0200 Leads queryset and optional agent --- leads/migrations/0004_auto_20201216_1046.py | 19 +++++++++++ leads/migrations/0005_lead_organisation.py | 20 +++++++++++ leads/models.py | 3 +- leads/views.py | 38 ++++++++++++++++++--- 4 files changed, 74 insertions(+), 6 deletions(-) create mode 100644 leads/migrations/0004_auto_20201216_1046.py create mode 100644 leads/migrations/0005_lead_organisation.py 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)