From: Guillaume Pellerin Date: Thu, 28 Jan 2016 14:17:20 +0000 (+0100) Subject: add grouped messages X-Git-Tag: 1.1~179 X-Git-Url: https://git.parisson.com/?a=commitdiff_plain;h=bc3702c38f626cb02404d16de11fa52e8190e279;p=teleforma.git add grouped messages --- diff --git a/teleforma/admin.py b/teleforma/admin.py index 660114cd..bd8dc770 100644 --- a/teleforma/admin.py +++ b/teleforma/admin.py @@ -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) diff --git a/teleforma/models/__init__.py b/teleforma/models/__init__.py index dedbc9b8..c1868132 100644 --- a/teleforma/models/__init__.py +++ b/teleforma/models/__init__.py @@ -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 index 00000000..8292e23b --- /dev/null +++ b/teleforma/models/messages.py @@ -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) diff --git a/teleforma/views/core.py b/teleforma/views/core.py index becda0e0..a5a3ef5d 100644 --- a/teleforma/views/core.py +++ b/teleforma/views/core.py @@ -723,3 +723,4 @@ class HelpView(TemplateView): def dispatch(self, *args, **kwargs): return super(HelpView, self).dispatch(*args, **kwargs) +""""""