From 6b3953aded1024dd93498a3c3744d77a707617fc Mon Sep 17 00:00:00 2001
From: bassamalasadi <bassamalasadi@gmail.com>
Date: Thu, 11 Feb 2021 09:47:40 +0200
Subject: [PATCH] Updating the lead count for each category

---
 leads/models.py                          |  1 +
 leads/templates/leads/category_list.html | 14 ++++++++++++--
 leads/views.py                           | 23 ++++++++++++++++++++---
 3 files changed, 33 insertions(+), 5 deletions(-)

diff --git a/leads/models.py b/leads/models.py
index b39843c..4c93c80 100644
--- a/leads/models.py
+++ b/leads/models.py
@@ -64,6 +64,7 @@ def __str__(self):
 
 class Category(models.Model):
     name = models.CharField(max_length=30)  # New, Contacted, Converted, Unconverted
+    number = models.IntegerField(default=0)
     organisation = models.ForeignKey(UserProfile, on_delete=models.CASCADE)
 
     def __str__(self):
diff --git a/leads/templates/leads/category_list.html b/leads/templates/leads/category_list.html
index 3f9c779..a1603aa 100644
--- a/leads/templates/leads/category_list.html
+++ b/leads/templates/leads/category_list.html
@@ -24,14 +24,24 @@ <h1 class="sm:text-4xl text-3xl font-medium title-font mb-2 text-gray-900">Categ
                 <td class="px-4 py-3">Unassigned</td>
                 <td class="px-4 py-3">{{ unassigned_lead_count }}</td>
             </tr>
-            {% for category in category_list %}
+            <!-- {% for category in category_list %}
                 <tr>
                     <td class="px-4 py-3">
                       <a class="hover:text-blue-500" href="{% url 'leads:category-detail' category.pk %}">{{ category.name }}</a>
                     </td>
                     <td class="px-4 py-3">TODO count</td>
                 </tr>
-            {% endfor %}
+            {% endfor %} -->
+                
+            {% for ret in reset %}
+              <div>
+                <tr>
+                  <td class="px-4 py-3" > <a href="{% url 'leads:category-detail' ret.id %}">{{ ret.name }} </a></td>
+                  <td class="px-4 py-3">{{ ret.number }}</td>
+                </tr>
+              </div>
+            {% endfor %} 
+
           </tbody>
         </table>
       </div>
diff --git a/leads/views.py b/leads/views.py
index 8d2f89b..64d1197 100644
--- a/leads/views.py
+++ b/leads/views.py
@@ -262,8 +262,14 @@ class CategoryListView(LoginRequiredMixin, generic.ListView):
     context_object_name = "category_list"
 
     def get_context_data(self, **kwargs):
-        context = super(CategoryListView, self).get_context_data(**kwargs)
         user = self.request.user
+        context = super(CategoryListView, self).get_context_data(**kwargs)
+        # Extraction of the Categories info 
+        # <QuerySet [{'id': 6, 'name': 'developer', 'organisation_id': 1},
+        # {'id': 7, 'name': 'salary', 'organisation_id': 1}, 
+        # {'id': 8, 'name': 'DevOps', 'organisation_id': 1}]> 
+        cate_list = context['object_list'].values()
+        list_of_categories = []
 
         if user.is_organisor:
             queryset = Lead.objects.filter(
@@ -271,14 +277,25 @@ def get_context_data(self, **kwargs):
             )
         else:
             queryset = Lead.objects.filter(
-                organisation=user.agent.organisation
+                organisations=user.agent.organisation
             )
+        # Looping over the extracted list of dictionaries
+        for cate_number in cate_list:
+            # Update The number field in each category by counting all the leads that connected to this category
+            cate_number['number'] = queryset.filter(
+                category=cate_number['id']).count()
+            x = {'id': cate_number['id'], 'name': cate_number['name'],
+                 'number': cate_number['number']}
+            list_of_categories.append(x)
 
         context.update({
-            "unassigned_lead_count": queryset.filter(category__isnull=True).count()
+            "unassigned_lead_count": queryset.filter(category__isnull=True).count(),
+            "reset": list_of_categories
+
         })
         return context
 
+
     def get_queryset(self):
         user = self.request.user
         # initial queryset of leads for the entire organisation