+from workflow import grp_drh
+
+def _implantation_choices(obj, request):
+ # TRAITEMENT NORMAL
+ employe = get_employe_from_user(request.user)
+ # SERVICE
+ if is_user_dans_service(request.user):
+ q = Q(**{ 'id' : employe.implantation_id })
+ # REGION
+ else:
+ q = Q(**{ 'region' : employe.implantation.region })
+
+ # TRAITEMENT DRH
+ if grp_drh in request.user.groups.all():
+ q = Q()
+ return [('', '----------')] + [(i.id, unicode(i), )for i in ref.Implantation.objects.filter(q)]
+
+def _employe_choices(obj, request):
+ q = Q(id_rh__isnull=True) & Q(id_rh__isnull=True)
+
+ # TRAITEMENT NORMAL
+ employe = get_employe_from_user(request.user)
+ # SERVICE
+ if is_user_dans_service(request.user):
+ q_region_service = Q(implantation1=employe.implantation) | Q(implantation2=employe.implantation)
+ # REGION
+ else:
+ q_region_service = Q(implantation1__region=employe.implantation.region) | Q(implantation2__region=employe.implantation.region)
+ # TRAITEMENT DRH
+ if grp_drh in request.user.groups.all():
+ q_region_service = Q()
+
+ # Construction de la liste des employés en puisant dans DAE (pas d'info) et dans rh_v1
+ # Pour le filtrage par région/service, on est obligé d'aller regarder le dossier rh_v1
+ # car l'information dans le modèle rh_v1.Employe n'existe pas.
+ dae_ = dae.Employe.objects.filter(id_rh__isnull=True)
+ copies = dae.Employe.objects.filter(Q(id_rh__isnull=False))
+ id_copies = [p.id_rh_id for p in copies.all()]
+ employes_ids = list(set([d.employe_id for d in rh.Dossier.objects.filter(q_region_service)]))
+ rhv1 = rh.Employe.objects.filter(id__in=employes_ids).exclude(id__in=id_copies)
+
+ def option_label(employe):
+ return "%s %s" % (employe.nom.upper(), employe.prenom.title())
+
+ return [('', 'Nouvel employé')] + \
+ sorted([('dae-%s' % p.id, option_label(p)) for p in dae_ | copies] +
+ [('rh-%s' % p.id, option_label(p)) for p in rhv1],
+ key=lambda t: t[1])
+
+
+def label_poste_display(poste):
+ """Formate un visuel pour un poste dans une liste déroulante"""
+ label = u"%s - %s [%s]" %(poste.type_poste, poste.type_poste.famille_emploi.nom, poste.id)
+ return label
+
+class PostePieceForm(inlineformset_factory(dae.Poste, dae.PostePiece)):
+ pass
+
+class DossierPieceForm(inlineformset_factory(dae.Dossier, dae.DossierPiece)):
+ pass
+
+class FinancementForm(inlineformset_factory(dae.Poste, dae.PosteFinancement, extra=1)):
+ pass
+
+class JustificationNouvelEmployeForm(inlineformset_factory(dae.Dossier,
+ dae.JustificationNouvelEmploye,
+ extra=0,
+ can_delete=False,
+ exclude=('question',))):
+ """
+ Formulaire de justification d'un nouvel employé.
+ Le dossier a besoin d'être enregistré une première fois afin de prépopuler les questions.
+ """
+ def __init__(self, *args, **kwargs):
+ instance = kwargs['instance']
+ if instance.id:
+ q_ids = [j.question.id for j in instance.justificationnouvelemploye_set.filter(dossier=instance)]
+ for q in dae.JustificationQuestion.objects.filter(type="N"):
+ if q.id in q_ids:
+ continue
+ j = dae.JustificationNouvelEmploye()
+ j.dossier = instance
+ j.question = q
+ j.save()
+ super(self.__class__, self).__init__(*args, **kwargs)
+
+class JustificationAutreEmployeForm(inlineformset_factory(dae.Dossier,
+ dae.JustificationAutreEmploye,
+ extra=0,
+ can_delete=False,
+ exclude=('question',))):
+ """
+ Formulaire de justification d'un nouvel employé.
+ Le dossier a besoin d'être enregistré une première fois afin de prépopuler les questions.
+ """
+ def __init__(self, *args, **kwargs):
+ instance = kwargs['instance']
+ if instance.id:
+ q_ids = [j.question.id for j in instance.justificationautreemploye_set.filter(dossier=instance)]
+ for q in dae.JustificationQuestion.objects.filter(type="R"):
+ if q.id in q_ids:
+ continue
+ j = dae.JustificationAutreEmploye()
+ j.dossier = instance
+ j.question = q
+ j.save()
+ super(self.__class__, self).__init__(*args, **kwargs)