]> git.parisson.com Git - teleforma.git/commitdiff
add grouped messages
authorGuillaume Pellerin <guillaume.pellerin@ircam.fr>
Thu, 28 Jan 2016 14:17:20 +0000 (15:17 +0100)
committerGuillaume Pellerin <guillaume.pellerin@ircam.fr>
Thu, 28 Jan 2016 14:17:20 +0000 (15:17 +0100)
teleforma/admin.py
teleforma/models/__init__.py
teleforma/models/messages.py [new file with mode: 0644]
teleforma/views/core.py

index 660114cd3dbe16ca49aaf6e821e88d101de512b9..bd8dc7704f59895a724aa952c8deb50a906e62f5 100644 (file)
@@ -5,13 +5,14 @@ from teleforma.exam.models import *
 from teleforma.exam.admin import *
 from teleforma.templatetags.teleforma_tags import to_recipients
 from django.contrib import admin
-from django.contrib.auth.models import User
+from django.contrib.auth.models import User, Group
 from django.contrib.auth.admin import UserAdmin
 from django.contrib.admin import SimpleListFilter
 from django.utils.translation import ugettext_lazy as _
 from django.http import HttpResponse
 from django.core import serializers
-
+from django.contrib.admin.helpers import ActionForm
+from django import forms
 
 class PeriodListFilter(SimpleListFilter):
 
@@ -58,6 +59,9 @@ class StudentInline(admin.StackedInline):
     extra = 1
 
 
+class StudentGroupForm(ActionForm):
+    group_name = forms.CharField()
+
 class StudentAdmin(admin.ModelAdmin):
 
     model = Student
@@ -70,6 +74,7 @@ class StudentAdmin(admin.ModelAdmin):
     list_display = ['student_name', 'get_trainings', 'platform_only',
                     'total_payments', 'total_fees', 'balance']
     actions = ['export_xls', 'write_message']
+    action_form = StudentGroupForm
 
     def get_trainings(self, instance):
         return ' - '.join([unicode(training) for training in instance.trainings.all()])
@@ -102,6 +107,14 @@ class StudentAdmin(admin.ModelAdmin):
         return redirect('postman_write', to_recipients(users))
     write_message.short_description = "Envoyer un message"
 
+    def add_to_new_group(self, request, queryset):
+        group_name = request.POST['group_name']
+        users = [student.user for student in queryset]
+        group, c = TeleFormaGroup.objects.get_or_create(name=group_name)
+        for user in users:
+            group.users.add(user)
+        self.message_user(request, ("Successfully added group : %s") % (group_name,), messages.SUCCESS)
+
 class ProfessorProfileInline(admin.StackedInline):
     model = Professor
     filter_horizontal = ['courses']
@@ -162,3 +175,5 @@ admin.site.register(StreamingServer)
 admin.site.register(LiveStream)
 admin.site.register(Student, StudentAdmin)
 admin.site.register(Professor, ProfessorAdmin)
+admin.site.register(TeleFormaGroup)
+admin.site.register(GroupedMessage)
index dedbc9b8fac6272526b423c2f4017fa143e62b82..c1868132211e0b8b29b5fa6df7ce087083169492 100644 (file)
@@ -2,3 +2,4 @@ from core import *
 from crfpa import *
 #from pro import *
 from ae import *
+from messages import *
diff --git a/teleforma/models/messages.py b/teleforma/models/messages.py
new file mode 100644 (file)
index 0000000..8292e23
--- /dev/null
@@ -0,0 +1,56 @@
+
+from teleforma.models import *
+from django.contrib.auth.models import User
+from postman.utils import email_visitor, notify_user
+from postman.models import Message
+
+
+class TeleFormaGroup(models.Model):
+    """(Group description)"""
+
+    name = models.CharField(_('name'), max_length=255)
+    users = models.ManyToManyField(User, related_name="teleforma_groups", verbose_name=_('users'),
+                                        blank=True, null=True)
+
+    class Meta(MetaCore):
+        db_table = app_label + '_' + 'groups'
+
+    def __unicode__(self):
+        return _("Group")
+
+
+class GroupedMessage(models.Model):
+    """(GroupedMessage description)"""
+
+    group = models.ForeignKey('TeleFormaGroup', related_name='grouped_messages',
+                                     verbose_name=_('group'),
+                                     blank=True, null=True, on_delete=models.SET_NULL)
+    sender = = models.ForeignKey('User', related_name='grouped_messages',
+                                     verbose_name=_('sender'),
+                                     blank=True, null=True, on_delete=models.SET_NULL)
+    subject = models.CharField(_('subject'), max_length=119)
+    message = models.TextField(_('message'))
+    to_send = models.BooleanField(default=False)
+    sent = models.BooleanField(default=False)
+    date_sent = models.DateTimeField(_('date sent'), null=True)
+
+    class Meta(MetaCore):
+        db_table = app_label + '_' + 'grouped_messages'
+
+    def __unicode__(self):
+        return _("GroupedMessage")
+
+    def save(self, *args, **kwargs):
+        if self.to_sent:
+            self.send()
+            self.sent = True
+            self.date_sent = datetime.datetime.now()
+        super(GroupedMessage, self).save(*args, **kwargs)
+
+    def send(self):
+        site = Site.objects.all()[0]
+        for user in self.group:
+            mess = Message(sender=self.sender, recipient=user, subject=self.subject[:119], body=self.message)
+            mess.moderation_status = 'a'
+            mess.save()
+            notify_user(mess, 'acceptance', site)
index becda0e01be468edffbfb819cb8729310d990291..a5a3ef5da8047df97181b8c0ca5d7832ec09677c 100644 (file)
@@ -723,3 +723,4 @@ class HelpView(TemplateView):
 
     def dispatch(self, *args, **kwargs):
         return super(HelpView, self).dispatch(*args, **kwargs)
+""""""