| 1 | # -=- encoding: utf-8 -=- |
| 2 | |
| 3 | import datetime |
| 4 | from django.contrib.auth.models import User |
| 5 | from django.core.files.storage import FileSystemStorage |
| 6 | from tinymce import models as tinymce_models |
| 7 | from django.db import models |
| 8 | import settings |
| 9 | |
| 10 | import datamaster_modeles.models as ref |
| 11 | from recrutement.workflow import grp_evaluateurs_recrutement |
| 12 | from auf.django.emploi import models as emploi |
| 13 | from auf.django.emploi.models import TYPE_PIECE_CHOICES |
| 14 | |
| 15 | from recrutement.workflow import grp_evaluateurs_recrutement |
| 16 | |
| 17 | ### CONSTANTES |
| 18 | #NOTES |
| 19 | NOTE_MIN = 1 |
| 20 | NOTE_RANGE = 1 |
| 21 | NOTE_MAX = 11 |
| 22 | NOTES = [(i, i) for i in range(NOTE_MIN, NOTE_MAX, NOTE_RANGE)] |
| 23 | |
| 24 | #HELP_TEXT |
| 25 | HELP_TEXT_NB_DEPENDANT = "Le nombre de personnes à charge" |
| 26 | HELP_TEXT_FORMAT_DATE = "Le format de la date est AAAA-MM-JJ" |
| 27 | HELP_TEXT_TAGS_ACCEPTES = "Pour le texte, les variables disponibles sont : \ |
| 28 | {{ nom_candidat }} {{ prenom_candidat }} \ |
| 29 | {{ offre_emploi }} et {{ genre_candidat }} \ |
| 30 | (Pour Monsieur/Madame). Ces champs seront \ |
| 31 | automatiquement remplacés par les informations de \ |
| 32 | chaque candidat." |
| 33 | |
| 34 | # Abstracts |
| 35 | class Metadata(models.Model): |
| 36 | """Méta-données AUF. |
| 37 | Metadata.actif = flag remplaçant la suppression. |
| 38 | actif == False : objet réputé supprimé. |
| 39 | """ |
| 40 | actif = models.BooleanField(default=True) |
| 41 | date_creation = models.DateField(auto_now_add=True, |
| 42 | help_text=HELP_TEXT_FORMAT_DATE, ) |
| 43 | |
| 44 | class Meta: |
| 45 | abstract = True |
| 46 | |
| 47 | class Candidat(emploi.Candidat): |
| 48 | class Meta: |
| 49 | proxy = True |
| 50 | |
| 51 | class OffreEmploi(emploi.OffreEmploi): |
| 52 | class Meta: |
| 53 | proxy = True |
| 54 | |
| 55 | |
| 56 | class CandidatPiece(emploi.CandidatPiece): |
| 57 | class Meta: |
| 58 | proxy = True |
| 59 | |
| 60 | class OffreEmploiManager(models.Manager): |
| 61 | def get_query_set(self): |
| 62 | fkeys = ('region',) |
| 63 | return super(OffreEmploiManager, self).get_query_set().\ |
| 64 | select_related(*fkeys).all() |
| 65 | |
| 66 | class ProxyOffreEmploi(emploi.OffreEmploi): |
| 67 | class Meta: |
| 68 | proxy = True |
| 69 | verbose_name = "Offre d'emploi (visualisation)" |
| 70 | verbose_name_plural = "Offres d'emploi (visualisation)" |
| 71 | |
| 72 | def __unicode__(self): |
| 73 | return '%s [%s] - View' % (self.nom, self.id) |
| 74 | |
| 75 | class ProxyCandidat(emploi.Candidat): |
| 76 | class Meta: |
| 77 | proxy = True |
| 78 | verbose_name = "Candidat (visualisation)" |
| 79 | verbose_name_plural = "Candidats (visualisation)" |
| 80 | |
| 81 | def __unicode__(self): |
| 82 | return '%s %s [%s]' % (self.prenom, self.nom, self.id) |
| 83 | |
| 84 | class Evaluateur(models.Model): |
| 85 | user = models.ForeignKey(User, unique=True, verbose_name="Évaluateur") |
| 86 | offres_emploi = models.ManyToManyField(emploi.OffreEmploi, |
| 87 | related_name="evaluateurs", blank=True) |
| 88 | |
| 89 | def save(self, *args, **kwargs): |
| 90 | """ |
| 91 | Assigner automatiquement l'évaluateurs d'une offre d'emploi à un |
| 92 | nouveau candidat. |
| 93 | """ |
| 94 | self.user.groups.add(grp_evaluateurs_recrutement) |
| 95 | super(Evaluateur, self).save(*args, **kwargs) |
| 96 | |
| 97 | class Meta: |
| 98 | verbose_name = "évaluateur" |
| 99 | |
| 100 | def __unicode__(self): |
| 101 | return '%s %s' % (self.user.first_name, self.user.last_name) |
| 102 | |
| 103 | class AdministrateurRegional(models.Model): |
| 104 | user = models.ForeignKey(User, unique=True, |
| 105 | verbose_name="Administrateur régionnal") |
| 106 | regions = models.ManyToManyField(ref.Region, |
| 107 | verbose_name="Régions", ) |
| 108 | |
| 109 | class Meta: |
| 110 | verbose_name = "administrateur régional" |
| 111 | verbose_name_plural = "administrateurs régionaux" |
| 112 | |
| 113 | def __unicode__(self): |
| 114 | return '%s %s' % (self.user.first_name, self.user.last_name) |
| 115 | |
| 116 | class CandidatEvaluation(models.Model): |
| 117 | candidat = models.ForeignKey(emploi.Candidat, db_column='candidat', |
| 118 | related_name='+',) |
| 119 | evaluateur = models.ForeignKey(Evaluateur, db_column='evaluateur', |
| 120 | related_name='+', verbose_name='Évaluateur') |
| 121 | note = models.IntegerField(choices=NOTES, blank=True, null=True) |
| 122 | commentaire = models.TextField(null=True, blank=True, default='Aucun') |
| 123 | date = models.DateField(auto_now_add=True, |
| 124 | help_text=HELP_TEXT_FORMAT_DATE, ) |
| 125 | |
| 126 | class Meta: |
| 127 | verbose_name = 'évaluation du candidat' |
| 128 | verbose_name_plural = 'évaluations des candidats' |
| 129 | |
| 130 | #### TEMPLATE COURRIEL |
| 131 | TEMPLATE_CHOICES = ( |
| 132 | ('SEL', 'Sélectionné'), |
| 133 | ('REF', 'Refusé'), |
| 134 | ) |
| 135 | |
| 136 | class CourrielTemplate(models.Model): |
| 137 | nom_modele = models.CharField(max_length=100, verbose_name='Nom du modèle',) |
| 138 | sujet = models.CharField(max_length=100, verbose_name='Sujet du courriel') |
| 139 | plain_text = models.TextField(verbose_name='Texte', |
| 140 | help_text=HELP_TEXT_TAGS_ACCEPTES, ) |
| 141 | html = tinymce_models.HTMLField(verbose_name='Texte en HTML', |
| 142 | help_text=HELP_TEXT_TAGS_ACCEPTES, ) |
| 143 | |
| 144 | def __unicode__(self): |
| 145 | return u'%s' % self.nom_modele |
| 146 | |
| 147 | class Meta: |
| 148 | ordering = ['nom_modele',] |
| 149 | |
| 150 | class CandidatCourriel(models.Model): |
| 151 | candidats = models.ManyToManyField(Candidat, verbose_name="Candidats", ) |
| 152 | template = models.ForeignKey(CourrielTemplate, db_column='template', |
| 153 | related_name='+', verbose_name="Modèle de courriel", ) |
| 154 | sujet = models.CharField(max_length=255, blank=True, |
| 155 | help_text=HELP_TEXT_TAGS_ACCEPTES, ) |
| 156 | plain_text = models.TextField(verbose_name='Texte', blank=True, |
| 157 | help_text=HELP_TEXT_TAGS_ACCEPTES, ) |
| 158 | html = tinymce_models.HTMLField(verbose_name='Texte en HTML', null=True, |
| 159 | blank=True, help_text=HELP_TEXT_TAGS_ACCEPTES, ) |
| 160 | |
| 161 | def __unicode__(self): |
| 162 | return '%s' % (self.titre) |
| 163 | |
| 164 | class Meta: |
| 165 | verbose_name = "modèle de courriel" |
| 166 | verbose_name_plural = "modèles de courriel" |
| 167 | |