# -*- encoding: utf-8 -*-
import datetime
-
import reversion
+import itertools
from ajax_select import make_ajax_form
from auf.django.references import models as ref
+from django.core.mail import send_mail
from django.contrib.auth.admin import UserAdmin
from django.contrib.auth.models import User
from django import forms
inlines = list(UserAdmin.inlines) + [ProfileInline]
+def _invalidate(modaladmin, req, qs):
+ qs.update(valide=False)
+_invalidate.short_description = 'Invalider'
+
+
+def _communique(modaladmin, req, qs):
+ url_prefix = ('https://' if req.is_secure() else 'http://') + (
+ req.META['SERVER_NAME'] if 'SERVER_NAME' in req.META else
+ 'localhost') + (':%s' % (req.META['SERVER_PORT']) if 'SERVER_PORT'
+ in req.META else '')
+
+ types = [x[0] for x in rh.TYPES_CHANGEMENT]
+
+ # make a list of all possible email types. It is reversed so that
+ # we start with the largest combinations.
+ combs = list(itertools.chain(*map(
+ lambda x: itertools.combinations(types, x),
+ range(1, len(types)+1))))
+
+ combs = reversed(combs)
+
+ recipient_list = ref.Employe.objects.filter(
+ changement_notifications__in=
+ rh.ChangementPersonnelNotifications.objects.all()).distinct()
+
+
+ for comb in combs:
+ # qf c'est pour trouver les recipients.
+ qf = reduce(
+ lambda x, y: x & y,
+ [Q(**{'changement_notifications__type': t}) for t in comb]
+ )
+ recipients = recipient_list.filter(qf)
+
+ recipient_list = recipient_list.exclude(
+ id__in=recipients.values_list('id', flat=True))
+
+ types_dict = dict(rh.TYPES_CHANGEMENT)
+
+ if len(recipients):
+ sujet = '[SGRH] Rapport des employés de type: %s' % (
+ ', '.join(
+ [types_dict[c].lower() for c in
+ comb]))
+ message = u''
+ for t in comb:
+ message += u'%s: \n' % (types_dict[t].decode('utf8'))
+ message += '\n'.join([u'\t%s %s, %s' % (
+ x.dossier.employe.prenom,
+ x.dossier.employe.nom,
+ url_prefix + reverse(
+ 'admin:rh_dossier_change', args=[x.dossier.id]))
+ for x in qs.filter(type__in=[t])])
+ send_mail(
+ sujet,
+ message,
+ settings.SERVER_EMAIL,
+ [x.courriel for x in recipients],
+ fail_silently=False)
+
+ qs.update(communique=True)
+
+_communique.short_description = u'Envoyer aux desinataires prévus.'
+
+
+class ChangementPersonnelAdmin(admin.ModelAdmin):
+
+ actions = (
+ _invalidate,
+ _communique,
+ )
+
+ list_display = (
+ 'type', 'dossier', 'valide', 'communique', 'date_communication'
+ )
+
+ list_filter = (
+ 'type',
+ 'valide',
+ 'communique',
+ )
+
+
admin.site.unregister(User)
admin.site.register(User, RHUserAdmin)
admin.site.register(rh.ValeurPoint, ValeurPointAdmin)
admin.site.register(ImplantationProxy, ImplantationProxyAdmin)
admin.site.register(RegionProxy, RegionProxyAdmin)
+admin.site.register(rh.ChangementPersonnelNotifications)
+admin.site.register(rh.ChangementPersonnel, ChangementPersonnelAdmin)