From f60ee13c74b6c4ef27f130701a874a6205da5c7d Mon Sep 17 00:00:00 2001
From: Bidot-Naude Thomas <thomas.bidotnaude@student-cs.fr>
Date: Sat, 17 Apr 2021 13:11:15 +0200
Subject: [PATCH] Notifications for Sec-Gen

---
 oser_backend/settings/common.py |  9 ++++++++
 profiles/admin.py               | 12 ++++++++++-
 profiles/models.py              | 12 +++++++++++
 register/admin.py               | 38 ---------------------------------
 requirements.txt                |  4 ++++
 runtime.txt                     |  2 +-
 6 files changed, 37 insertions(+), 40 deletions(-)

diff --git a/oser_backend/settings/common.py b/oser_backend/settings/common.py
index 84ccf82..478aa5e 100644
--- a/oser_backend/settings/common.py
+++ b/oser_backend/settings/common.py
@@ -288,3 +288,12 @@ STATICFILES_DIRS = [
 
 MEDIA_URL = '/media/'
 MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
+
+# Telegram bot
+TELEGRAM_BOT_TOKEN = os.getenv(
+    "TELEGRAM_BOT_TOKEN")
+TELEGRAM = {
+    'bot_token': TELEGRAM_BOT_TOKEN,
+    'channel_name': 'oserSECGEN',
+    'production': False,
+}
diff --git a/profiles/admin.py b/profiles/admin.py
index f209480..e4976f4 100644
--- a/profiles/admin.py
+++ b/profiles/admin.py
@@ -57,5 +57,15 @@ class StudentAdmin(ProfileAdminMixin, admin.ModelAdmin, ExportCsvMixin):
 
     class Meta:  # noqa
         model = Student
-        ordering = ['updated_date']
+    ordering = ['-updated_date']
     actions = ["export_as_csv"]
+
+
+"""def post_event_on_telegram(event):
+    #message_html = render_to_string('telegram_message.html', {
+    #    'event': event
+    #})
+    telegram_settings = settings.TELEGRAM
+    bot = telegram.Bot(token=telegram_settings['bot_token'])
+    bot.send_message(chat_id="@%s" % telegram_settings['channel_name'],
+        text="test", parse_mode=telegram.ParseMode.HTML)"""
diff --git a/profiles/models.py b/profiles/models.py
index 669195e..39f3925 100644
--- a/profiles/models.py
+++ b/profiles/models.py
@@ -7,6 +7,10 @@ from .utils import get_promotion_range
 from datetime import datetime
 from .notifications import SendDocs
 
+import telegram
+from django.conf import settings
+from django.template.loader import render_to_string
+
 
 class ProfileMixin:
     """Mixin with common functionnality for profiles."""
@@ -189,6 +193,14 @@ class Student(ProfileMixin, models.Model):
             # send email with link to registration docs
             SendDocs(user=self.user).send()
 
+            # send a telegram message to oserSECGEN
+            telegram_settings = settings.TELEGRAM
+            if telegram_settings['bot_token'] != None:
+                message_telegram = "Un tutoré a renseigné ses données personnelles, il attend ta validation !"
+                bot = telegram.Bot(token=telegram_settings['bot_token'])
+                bot.send_message(
+                    chat_id="@%s" % telegram_settings['channel_name'], text=message_telegram, parse_mode=telegram.ParseMode.HTML)
+
         return super(Student, self).save(*args, **kwargs)
 
     class Meta:  # noqa
diff --git a/register/admin.py b/register/admin.py
index 34e2c39..95a4138 100644
--- a/register/admin.py
+++ b/register/admin.py
@@ -5,44 +5,6 @@ from .models import Registration
 from profiles.models import Student
 
 
-class SchoolFilter(admin.SimpleListFilter):
-    title = 'établissement'
-    parameter_name = 'profiles__school'
-
-    def lookups(self, request, model_admin):
-        list_of_school = []
-        query = Student.objects.values_list(
-            "school", flat=True).distinct()
-        for school in query:
-            list_of_school.append((school, school))
-        return list_of_school
-
-    def queryset(self, request, queryset):
-        if self.value():
-            emails = Student.objects.filter(
-                school=self.value()).values_list("user__email", flat=True)
-            return queryset.filter(email__in=emails)
-
-
-class SchoolFilter(admin.SimpleListFilter):
-    title = 'établissement'
-    parameter_name = 'profiles__school'
-
-    def lookups(self, request, model_admin):
-        list_of_school = []
-        query = Student.objects.values_list(
-            "school", flat=True).distinct()
-        for school in query:
-            list_of_school.append((school, school))
-        return list_of_school
-
-    def queryset(self, request, queryset):
-        if self.value():
-            emails = Student.objects.filter(
-                school=self.value()).values_list("user__email", flat=True)
-            return queryset.filter(email__in=emails)
-
-
 class SchoolFilter(admin.SimpleListFilter):
     title = 'établissement'
     parameter_name = 'profiles__school'
diff --git a/requirements.txt b/requirements.txt
index 85baa93..e1b2a84 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -12,6 +12,10 @@ django-sendgrid-v5
 django-filter
 django-rest-auth
 
+# Telegram messages via python-telegram-bot
+tornado==5.1.1 
+python-telegram-bot==12.2.0
+
 # Storage of files in AWS S3
 django-storages
 boto3
diff --git a/runtime.txt b/runtime.txt
index 486fcce..0c89a2d 100644
--- a/runtime.txt
+++ b/runtime.txt
@@ -1 +1 @@
-python-3.6.5
+python-3.6.13
-- 
GitLab