From a4f1c43eaa6aa8647ba86617dc10de273b0a6467 Mon Sep 17 00:00:00 2001 From: Krishna Kaushal Date: Wed, 1 Jan 2025 19:12:29 +0530 Subject: [PATCH] added Peer Recognition feature --- blt/urls.py | 2 + website/migrations/0177_kudos.py | 51 ++++++ website/models.py | 14 ++ website/static/img/kudos_icon.png | Bin 0 -> 31473 bytes website/templates/team_overview.html | 244 ++++++++++++++++++++++++++- website/views/teams.py | 46 ++++- 6 files changed, 347 insertions(+), 10 deletions(-) create mode 100644 website/migrations/0177_kudos.py create mode 100644 website/static/img/kudos_icon.png diff --git a/blt/urls.py b/blt/urls.py index b9f0efa19..841c8f892 100644 --- a/blt/urls.py +++ b/blt/urls.py @@ -190,6 +190,7 @@ add_member, create_team, delete_team, + give_kudos, join_requests, kick_member, leave_team, @@ -793,6 +794,7 @@ path("teams/delete-team/", delete_team, name="delete_team"), path("teams/leave-team/", leave_team, name="leave_team"), path("teams/kick-member/", kick_member, name="kick_member"), + path("teams/give-kudos/", give_kudos, name="give_kudos"), path( "similarity-scan", TemplateView.as_view(template_name="similarity.html"), diff --git a/website/migrations/0177_kudos.py b/website/migrations/0177_kudos.py new file mode 100644 index 000000000..11eda5bea --- /dev/null +++ b/website/migrations/0177_kudos.py @@ -0,0 +1,51 @@ +# Generated by Django 5.1.4 on 2024-12-30 17:47 + +import django.db.models.deletion +from django.conf import settings +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ("website", "0176_repo_contributor_repo_contributor_count_and_more"), + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.CreateModel( + name="Kudos", + fields=[ + ( + "id", + models.AutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ("message", models.TextField(blank=True, null=True)), + ("timestamp", models.DateTimeField(auto_now_add=True)), + ( + "receiver", + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + related_name="kudos_received", + to=settings.AUTH_USER_MODEL, + ), + ), + ( + "sender", + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + related_name="kudos_sent", + to=settings.AUTH_USER_MODEL, + ), + ), + ], + options={ + "verbose_name_plural": "Kudos", + "ordering": ["-timestamp"], + }, + ), + ] diff --git a/website/models.py b/website/models.py index 113bb9fe2..b7dc690a4 100644 --- a/website/models.py +++ b/website/models.py @@ -1292,3 +1292,17 @@ def save(self, *args, **kwargs): def __str__(self): return f"{self.project.name}/{self.name}" + + +class Kudos(models.Model): + sender = models.ForeignKey(User, on_delete=models.CASCADE, related_name="kudos_sent") + receiver = models.ForeignKey(User, on_delete=models.CASCADE, related_name="kudos_received") + message = models.TextField(null=True, blank=True) + timestamp = models.DateTimeField(auto_now_add=True) + + class Meta: + ordering = ["-timestamp"] + verbose_name_plural = "Kudos" + + def __str__(self): + return f"Kudos from {self.sender.username} to {self.receiver.username}" diff --git a/website/static/img/kudos_icon.png b/website/static/img/kudos_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..f76c980974bec4a3fc912f29eb3817d4a0ae6381 GIT binary patch literal 31473 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 e<>#@p^V(9Gt;JWce}I9 literal 0 HcmV?d00001 diff --git a/website/templates/team_overview.html b/website/templates/team_overview.html index 7b9d9e372..312f3176e 100644 --- a/website/templates/team_overview.html +++ b/website/templates/team_overview.html @@ -1,4 +1,5 @@ {% extends "base.html" %} +{% load static %} {% block content %} {% include "includes/sidenav.html" %}
@@ -365,18 +408,33 @@
Team Leader: {{ user.userprofile.team.admin.username }} + {% if user.userprofile.team.admin.kudos_count %} + {{ user.userprofile.team.admin.kudos_count }} kudos + {% endif %}
-
- {{ user.userprofile.team.admin.username }} -
- {% for member in user.userprofile.team.managers.all %} -
+ {#
#} + {# {{ user.userprofile.team.admin.username }}#} + {# {% if user.userprofile.team.admin != user %}#} + {# #} + {# {% endif %}#} + {#
#} + {% for member in team_members %} +
{{ member.username }} {% if user.userprofile.team.admin == user and user.userprofile.team.admin != member %} @@ -384,10 +442,53 @@ id="kick-{{ member.username }}" onclick="kickMember('{{ member.username }}')">Kick {% endif %} + + {% if member != user %} + + {% endif %}
{% endfor %}
+
+

Your Received Kudos

+ {% if received_kudos.exists %} +
+ {% for kudos in received_kudos %} +
+

+ {{ kudos.sender.username }}: {{ kudos.message }} +

+ {{ kudos.timestamp|date:"M d, Y H:i" }} +
+ {% endfor %} +
+ {% else %} +

No kudos received yet.

+ {% endif %} +
+ +
+

Team Kudos

+
+ {% for kudos in team_kudos %} +
+

+ {{ kudos.sender.username }} → {{ kudos.receiver.username }}: {{ kudos.message }} +

+ {{ kudos.timestamp|date:"M d, Y H:i" }} +
+ {% endfor %} +
+
@@ -481,6 +582,52 @@

Add New Member

+ +
+ +
+ + + {% for member in team_members %} +
+
+ {{ member.username }} + + {{ member.kudos_count|default:"0" }} kudos + +
+ {% if member != user %} + + {% endif %} +
+ {% endfor %} + +