# -*- encoding: utf-8 -*-
+from auf.django.workflow.models import WorkflowCommentaire
from django import forms
-
-from django.core.urlresolvers import reverse
-from django.core.mail import mail_admins
from django.contrib import admin
-from django.contrib import messages
-from django.shortcuts import redirect
from reversion.admin import VersionAdmin
-from auf.django.workflow.models import WorkflowCommentaire
-from models import Poste, Dossier, DossierFinalise, PosteFinalise
-from rh.decorators import in_drh_or_admin
+
+from project.dae.models import Poste, Dossier
+
class PosteAdmin(VersionAdmin):
list_display = ('nom', 'implantation', 'etat', )
_etat.short_description = "État"
_etat.admin_order_field = "etat"
+
class DossierStatutAdmin(StatutAdmin):
search_fields = ('employe__nom', 'employe__prenom', 'poste__nom', )
list_display = ('_poste', '_implantation', 'employe', '_etat', )
_implantation.short_description = u"Implantation"
_implantation.admin_order_field = "poste__implantation"
+
class PosteStatutAdmin(StatutAdmin):
search_fields = ('nom', )
list_display = ('nom', 'implantation', )
form = StatutPosteForm
-class ImportAdmin(admin.ModelAdmin,):
-
- def _etat(self, obj):
- return obj.get_etat_display()
- _etat.short_description = u"État"
- _etat.admin_order_field = "etat"
-
- def has_delete_permission(self, request, obj=None):
- return False
-
- def has_add_permission(self, request):
- return False
-
- def has_change_permission(self, request, obj=None):
- return in_drh_or_admin(request.user)
-
- def get_actions(self, request):
- actions = super(ImportAdmin, self).get_actions(request)
- del actions['delete_selected']
- return actions
-
-
-class ImportDossierAdmin(ImportAdmin):
- search_fields = ('employe__nom', 'employe__prenom', 'poste__nom', )
- list_display = ('_poste', '_implantation', '_employe', '_dae', '_etat')
- list_filter = ('poste__implantation', 'etat', )
- actions = ['importer_dans_RH', ]
-
- def _employe(self, obj):
- return obj.employe
-
- def _poste(self, obj):
- rh = obj.poste.rh_importation()
- if rh is not None:
- extra = u"<a href='%s' style='color: red;'> (déjà importé)</a>" % \
- reverse('admin:rh_poste_change', args=(rh.id,))
- else:
- extra = u""
-
- return u"%s%s" % (obj.poste.nom, extra)
- _poste.allow_tags = True
-
- def _implantation(self, obj):
- return obj.poste.implantation
- _implantation.short_description = u"Implantation"
- _implantation.admin_order_field = "poste__implantation"
-
- def _dae(self, obj):
- url = reverse('embauche_consulter', args=(obj.id, ))
- return "<a href='%s'>voir la DAE</a>" % url
- _dae.allow_tags = True
-
- def importer_dans_RH(self, request, data):
- selected = request.POST.getlist(admin.ACTION_CHECKBOX_NAME)
- if len(selected) > 1:
- messages.add_message(request, messages.ERROR,
- u"Un seul dossier ne peut être importé à la fois")
- url = reverse('admin:dae_dossierfinalise_changelist')
- return redirect(url)
-
- dae = [d for d in Dossier.objects.filter(id__in=selected)]
- for d in dae:
- try:
- d.importer(dry_run=True)
- copie = d.importer()
- messages.add_message(request, messages.SUCCESS,
- u"%s importé dans RH" % d)
- url = reverse('admin:rh_dossier_change', args=(copie.id, ))
- except Exception, e:
- mail_admins('DAE import', unicode(e))
- messages.add_message(request, messages.ERROR, u"%s ne peut pas\
- être importé" % d)
- url = reverse('admin:dae_dossierfinalise_changelist')
- return redirect(url)
-
-
-class ImportPosteAdmin(ImportAdmin):
- search_fields = ('poste__nom', )
- list_display = ('nom', '_implantation', '_dae', '_etat',)
- list_filter = ('implantation',)
- actions = ['importer_dans_RH', ]
-
- def _implantation(self, obj):
- return obj.implantation
- _implantation.short_description = u"Implantation"
- _implantation.admin_order_field = "implantation"
-
- def _dae(self, obj):
- url = reverse('poste_consulter', args=("dae-%s" % obj.id, ))
- return "<a href='%s'>voir le poste dans DAE</a>" % url
- _dae.allow_tags = True
-
- def importer_dans_RH(self, request, data):
- selected = request.POST.getlist(admin.ACTION_CHECKBOX_NAME)
- if len(selected) > 1:
- messages.add_message(request, messages.ERROR,
- u"Un seul poste ne peut être importé à la fois")
- url = reverse('admin:dae_postefinalise_changelist')
- return redirect(url)
- dae = [d for d in Poste.objects.filter(id__in=selected)]
- for p in dae:
- try:
- p.importer(dry_run=True)
- copie = p.importer()
- messages.add_message(request, messages.SUCCESS,
- u"%s importé dans RH" % d)
- url = reverse('admin:rh_poste_change', args=(copie.id, ))
- except Exception, e:
- mail_admins('DAE import', unicode(e))
- messages.add_message(request, messages.ERROR, u"%s ne peut pas\
- être importé" % p)
- url = reverse('admin:dae_postefinalise_changelist')
- return redirect(url)
-
-
admin.site.register(Poste, PosteAdmin)
admin.site.register(Dossier, DossierAdmin)
admin.site.register(ProxyDossierStatut, DossierStatutAdmin)
admin.site.register(ProxyPosteStatut, PosteStatutAdmin)
-admin.site.register(DossierFinalise, ImportDossierAdmin)
-admin.site.register(PosteFinalise, ImportPosteAdmin)
+++ /dev/null
-# -*- coding: utf-8 -*-
-
-import sys
-import codecs
-import os
-import shutil
-
-from django.conf import settings
-from project.rh import models as rh
-import models as dae
-
-SKIP = "** SKIP **"
-
-class SuperCopier(object):
- """
- Classe abstraite pour faire de la copie profonde sur des objets en BD.
- Elle prévoit des hooks pour traiter des propriétés en particulier.
- """
- dry_run = True
- verbosity = 0
- stdout = codecs.getwriter('utf8')(sys.stdout)
-
- def __init__(self, dry_run=True, verbosity=0):
- self.verbosity = verbosity
- self.dry_run = dry_run
-
- def out(self, txt, level=0):
- if self.verbosity >= level:
- self.stdout.write(txt)
-
- def clean_id(self, source, copy, parent, field, value):
- self.out(SKIP, 2)
- return []
-
- def parent(self, parent, child):
- if not self.dry_run:
- parent.save()
- klass = parent.__class__.__name__.lower()
- k = "%s_id" % klass
- setattr(child, k, parent.id)
-
- def duplicate(self, obj, parent=None, level=0):
- klass = getattr(rh, obj.__class__.__name__)
- copy = klass()
-
- indent = " "*level*4
- self.out(u"\n%s [%s] %s" % (indent, str(obj.__class__),
- obj), 1)
-
- for f in obj._meta.fields:
- value = getattr(obj, f.name)
-
- self.out(u"\n%s * %s: %s " % (indent, f.name, value), 2)
-
- cleanup_fct = "clean_%s" % f.name
- if hasattr(self, cleanup_fct):
- cleaner = getattr(self, cleanup_fct)
- cleaner(obj, copy, parent, f, value)
- else:
- setattr(copy, f.name, value)
-
- for obj_composition in obj._meta._related_objects_cache:
- app_label, dummy = obj_composition.name.split(':')
- field_name = obj_composition.field.rel.related_name
- if field_name == '+':
- continue
- self.out(u"\n%s + [%s] %s " % (indent, app_label, field_name), 1)
- try:
- cleanup_fct = "clean_%s" % field_name
- if hasattr(self, cleanup_fct):
- cleaner = getattr(self, cleanup_fct)
- children = cleaner(obj, copy, parent, f, value)
- else:
- children = getattr(obj, field_name).all()
- except Exception, e:
- # no reverse relation
- self.out(" %s %s" % (field_name, str(e)), 1)
- continue
-
- for child in children:
- child_copy = self.duplicate(child, parent=copy, level=level+1,)
- parentship_fct = "parent_%s" % (field_name)
- if hasattr(self,parentship_fct):
- parentship = getattr(self, parentship_fct)
- else:
- parentship = getattr(self, "parent")
- parentship(copy, child_copy)
- if not self.dry_run:
- child_copy.save()
-
- return copy
-
- def copy(self, obj):
- return self.duplicate(obj)
-
-
-class PosteCopier(SuperCopier):
-
- def copy(self, obj):
- copy = super(PosteCopier, self).copy(obj)
- if not self.dry_run:
- dae.ImportPoste(dae=obj, rh=copy).save()
- return copy
-
- def clean_rh_dossiers(self, source, copy, parent, field, value):
- self.out(SKIP, 1)
- return []
-
- def clean_rh_comparaisons_internes(self, source, copy, parent, field, value):
- self.out(SKIP, 1)
- return []
-
- def clean_rh_financements(self, source, copy, parent, field, value):
- self.out(SKIP, 1)
- return []
-
- def clean_rh_pieces(self, source, copy, parent, field, value):
- self.out(SKIP, 1)
- return []
-
- def clean_dae_dossiers(self, source, copy, parent, field, value):
- self.out(SKIP, 1)
- return []
-
- def clean_poste(self, source, copy, parent, field, value):
- self.out(SKIP, 1)
- return []
-
- def clean_fichier(self, source, copy, parent, field, value):
- if not self.dry_run and parent.id is None:
- parent.save()
- filename = value.path.split('/')[-1]
- copy.poste_id = parent.id
- new_value = rh.poste_piece_dispatch(copy, filename)
-
- app, model, id, f = new_value.split('/')
- app_path = os.path.join(settings.PRIVE_MEDIA_ROOT, app)
- model_path = os.path.join(settings.PRIVE_MEDIA_ROOT, app, model)
- id_path = os.path.join(settings.PRIVE_MEDIA_ROOT, app, model, id)
- if not os.path.exists(app_path):
- os.mkdir(app_path)
- if not os.path.exists(model_path):
- os.mkdir(model_path)
- if not os.path.exists(id_path):
- os.mkdir(id_path)
- src = value.path
- dst = os.path.join(settings.PRIVE_MEDIA_ROOT, new_value)
- shutil.copy(src, dst)
- setattr(copy, field.name, new_value)
-
-
-class DossierCopier(SuperCopier):
-
- def copy(self, obj):
- copy = super(DossierCopier, self).copy(obj)
- if not self.dry_run:
- # update des dates partout
- date_debut = obj.contrat_date_debut
- date_fin = obj.contrat_date_fin
- copy.date_debut = date_debut
- copy.date_fin = date_fin
- copy.save()
- for r in copy.rh_remunerations.all():
- r.date_debut = date_debut
- r.date_fin = date_fin
- r.save()
- # log d'import
- dae.ImportDossier(dae=obj, rh=copy).save()
- return copy
-
- def clean_rh_contrats(self, source, copy, parent, field, value):
- self.out(SKIP, 1)
- return []
-
- def clean_rh_dossierpieces(self, source, copy, parent, field, value):
- self.out(SKIP, 1)
- return []
-
- def clean_rh_comparaisons(self, source, copy, parent, field, value):
- self.out(SKIP, 1)
- return []
-
- def clean_rh_remunerations(self, source, copy, parent, field, value):
- self.out(SKIP, 1)
- return []
-
- def clean_dossier(self, source, copy, parent, field, value):
- self.out(SKIP, 1)
- return []
-
-
- def clean_employe(self, source, copy, parent, field, value):
- if source.employe.id_rh is not None:
- copy.employe = source.employe.id_rh
- else:
- nouvel_employe = rh.Employe()
- nouvel_employe.nom = source.employe.nom
- nouvel_employe.prenom = source.employe.prenom
- nouvel_employe.genre = source.employe.genre
- nouvel_employe.save()
- copy.employe = nouvel_employe
-
- def clean_poste(self, source, copy, parent, field, value):
- # poste comparaison a un champs nommé poste
- if isinstance(value, unicode):
- setattr(copy, field.name, value)
- return
-
- if dae.ImportPoste.objects.filter(dae=value).exists():
- poste = dae.ImportPoste.objects.get(dae=value).rh
- else:
- copier = PosteCopier(verbosity=self.verbosity,
- dry_run=self.dry_run)
- poste = copier.copy(value)
- copy.poste_id = poste.id
-
- def clean_fichier(self, source, copy, parent, field, value):
- if not self.dry_run and parent.id is None:
- parent.save()
- filename = value.path.split('/')[-1]
- copy.dossier_id = parent.id
-
- ct = copy.__class__.__name__.lower()
- if ct == 'contrat':
- new_value = rh.contrat_dispatch(copy, filename)
- elif ct == 'dossierpiece':
- new_value = rh.dossier_piece_dispatch(copy, filename)
- else:
- raise Exception('fichier %s à mapper!' % ct)
-
- app, model, id, f = new_value.split('/')
- app_path = os.path.join(settings.PRIVE_MEDIA_ROOT, app)
- model_path = os.path.join(settings.PRIVE_MEDIA_ROOT, app, model)
- id_path = os.path.join(settings.PRIVE_MEDIA_ROOT, app, model, id)
- if not os.path.exists(app_path):
- os.mkdir(app_path)
- if not os.path.exists(model_path):
- os.mkdir(model_path)
- if not os.path.exists(id_path):
- os.mkdir(id_path)
- src = value.path
- dst = os.path.join(settings.PRIVE_MEDIA_ROOT, new_value)
- shutil.copy(src, dst)
- setattr(copy, field.name, new_value)
# -*- encoding: utf-8 -*-
import datetime
-from django.db.models import Q, Max
-from django import forms
-from django.forms.models import inlineformset_factory, modelformset_factory
-from django.contrib.admin import widgets as admin_widgets
-from ajax_select.fields import AutoCompleteSelectField
+
from auf.django.workflow.forms import WorkflowFormMixin
from auf.django.references import models as ref
-from dae import models as dae
-from utils import get_employe_from_user, is_user_dans_services_centraux
-from rh import models as rh
-from workflow import grp_drh, POSTE_ETATS_BOUTONS, DOSSIER_ETAT_FINALISE, POSTE_ETAT_FINALISE
+from ajax_select.fields import AutoCompleteSelectField
+from django import forms
+from django.contrib.admin import widgets as admin_widgets
+from django.db.models import Q, Max
+from django.forms.models import inlineformset_factory, modelformset_factory
+
+from project.dae import models as dae
+from project.dae.utils import \
+ get_employe_from_user, is_user_dans_services_centraux
+from project.rh import models as rh
+from project.dae.workflow import \
+ grp_drh, POSTE_ETATS_BOUTONS, DOSSIER_ETAT_FINALISE, \
+ POSTE_ETAT_FINALISE
+
def _implantation_choices(obj, request):
# TRAITEMENT NORMAL
employe = get_employe_from_user(request.user)
# SERVICE
if is_user_dans_services_centraux(request.user):
- q = Q(**{ 'id' : employe.implantation_id })
+ q = Q(**{'id': employe.implantation_id})
# REGION
else:
- q = Q(**{ 'region' : employe.implantation.region })
+ 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)]
+ return [('', '----------')] + \
+ [(i.id, unicode(i), )for i in ref.Implantation.objects.filter(q)]
+
def _employe_choices(obj, request):
# TRAITEMENT NORMAL
q_rh_region_service = Q(poste__implantation=employe.implantation)
# REGION
else:
- q_dae_region_service = Q(poste__implantation__region=employe.implantation.region)
- q_rh_region_service = Q(poste__implantation__region=employe.implantation.region)
+ q_dae_region_service = Q(
+ poste__implantation__region=employe.implantation.region
+ )
+ q_rh_region_service = Q(
+ poste__implantation__region=employe.implantation.region
+ )
# TRAITEMENT DRH
if grp_drh in request.user.groups.all():
q_dae_region_service = Q()
q_rh_region_service = Q()
- # On filtre les employes avec les droits régionaux et on s'assure que c'est bien le dernier dossier en date pour sortir l'employe
- # On retient un employé qui travaille présentement dans la même région que le user connecté.
- dossiers_regionaux_ids = [d.id for d in dae.Dossier.objects.filter(q_dae_region_service)]
- employes_ids = [d['employe'] for d in dae.Dossier.objects.values('employe').annotate(dernier_dossier=Max('id')) if d['dernier_dossier'] in dossiers_regionaux_ids]
+ # On filtre les employes avec les droits régionaux et on s'assure que
+ # c'est bien le dernier dossier en date pour sortir l'employe. On retient
+ # un employé qui travaille présentement dans la même région que le user
+ # connecté.
+ dossiers_regionaux_ids = [
+ d.id for d in dae.Dossier.objects.filter(q_dae_region_service)
+ ]
+ employes_ids = [
+ d['employe']
+ for d in dae.Dossier.objects
+ .values('employe')
+ .annotate(dernier_dossier=Max('id'))
+ if d['dernier_dossier'] in dossiers_regionaux_ids
+ ]
dae_employe = dae.Employe.objects.filter(id__in=employes_ids)
dae_ = dae_employe.filter(id_rh__isnull=True)
copies = dae_employe.filter(Q(id_rh__isnull=False))
id_copies = [p.id_rh_id for p in copies.all()]
- dossiers_regionaux_ids = [d.id for d in rh.Dossier.objects.filter(q_rh_region_service)]
- employes_ids = [d['employe'] for d in rh.Dossier.objects.values('employe').annotate(dernier_dossier=Max('id')) if d['dernier_dossier'] in dossiers_regionaux_ids]
- rhv1 = rh.Employe.objects.filter(id__in=employes_ids).exclude(id__in=id_copies)
-
- # On ajoute les nouveaux Employés DAE qui ont été crées, mais qui n'ont pas de Dossier associés
+ dossiers_regionaux_ids = [
+ d.id for d in rh.Dossier.objects.filter(q_rh_region_service)
+ ]
+ employes_ids = [
+ d['employe']
+ for d in rh.Dossier.objects
+ .values('employe')
+ .annotate(dernier_dossier=Max('id'))
+ if d['dernier_dossier'] in dossiers_regionaux_ids
+ ]
+ rhv1 = rh.Employe.objects \
+ .filter(id__in=employes_ids) \
+ .exclude(id__in=id_copies)
+
+ # On ajoute les nouveaux Employés DAE qui ont été crées, mais qui n'ont
+ # pas de Dossier associés
employes_avec_dae = [d.employe_id for d in dae.Dossier.objects.all()]
employes_orphelins = dae.Employe.objects.exclude(id__in=employes_avec_dae)
-
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 | employes_orphelins] +
- [('rh-%s' % p.id, option_label(p)) for p in rhv1],
- key=lambda t: t[1])
+ sorted(
+ [('dae-%s' % p.id, option_label(p))
+ for p in dae_ | copies | employes_orphelins] +
+ [('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"""
annee = ""
if poste.date_debut:
annee = poste.date_debut.year
- label = u"%s %s - %s [%s]" %(annee, poste.type_poste, poste.type_poste.famille_emploi.nom, poste.id)
+ label = u"%s %s - %s [%s]" % (
+ annee, poste.type_poste, poste.type_poste.famille_emploi.nom,
+ poste.id
+ )
return label
PostePieceForm = inlineformset_factory(dae.Poste, dae.PostePiece)
DossierPieceForm = inlineformset_factory(dae.Dossier, dae.DossierPiece)
-FinancementForm = inlineformset_factory(dae.Poste, dae.PosteFinancement, extra=2)
+FinancementForm = inlineformset_factory(
+ dae.Poste, dae.PosteFinancement, extra=2
+)
+
class DossierComparaisonForm(forms.ModelForm):
recherche = AutoCompleteSelectField('dossiers', required=False)
- poste = forms.CharField(max_length=255, widget=forms.TextInput(attrs={'size':'60'}))
+ poste = forms.CharField(
+ max_length=255, widget=forms.TextInput(attrs={'size': '60'})
+ )
class Meta:
model = dae.DossierComparaison
dae.DossierComparaison, extra=3, max_num=3, form=DossierComparaisonForm
)
+
class PosteComparaisonForm(forms.ModelForm):
recherche = AutoCompleteSelectField('dae_postes', required=False)
dae.PosteComparaison, extra=3, max_num=3, form=PosteComparaisonForm
)
+
class FlexibleRemunForm(forms.ModelForm):
montant_mensuel = forms.DecimalField(required=False)
devise = self.cleaned_data['devise']
if devise.code == 'EUR':
return devise
- implantation = ref.Implantation.objects.get(id=self.data['implantation'])
+ implantation = ref.Implantation.objects.get(
+ id=self.data['implantation']
+ )
liste_taux = devise.tauxchange_set.order_by('-annee')
if len(liste_taux) == 0:
- raise forms.ValidationError(u"La devise %s n'a pas de taux pour l'implantation %s" % (devise, implantation))
+ raise forms.ValidationError(
+ u"La devise %s n'a pas de taux pour l'implantation %s" %
+ (devise, implantation)
+ )
else:
return devise
dae.Dossier, dae.Remuneration, extra=5, form=FlexibleRemunForm
)
+
class PosteForm(forms.ModelForm):
""" Formulaire des postes. """
# On ne propose que les services actifs
- service = forms.ModelChoiceField(queryset=rh.Service.objects.all(), required=True)
+ service = forms.ModelChoiceField(
+ queryset=rh.Service.objects.all(), required=True
+ )
- responsable=AutoCompleteSelectField('responsables', required=True)
+ responsable = AutoCompleteSelectField('responsables', required=True)
#responsable = forms.ModelChoiceField(
# queryset=rh.Poste.objects.select_related(depth=1))
poste = forms.ChoiceField(label="Nouveau poste ou évolution du poste",
choices=(), required=False)
- valeur_point_min = forms.ModelChoiceField(queryset=rh.ValeurPoint.actuelles.all(), required=False)
- valeur_point_max = forms.ModelChoiceField(queryset=rh.ValeurPoint.actuelles.all(), required=False)
-
+ valeur_point_min = forms.ModelChoiceField(
+ queryset=rh.ValeurPoint.actuelles.all(), required=False
+ )
+ valeur_point_max = forms.ModelChoiceField(
+ queryset=rh.ValeurPoint.actuelles.all(), required=False
+ )
class Meta:
model = dae.Poste
request = kwargs.pop('request')
super(PosteForm, self).__init__(*args, **kwargs)
self.fields['poste'].choices = self._poste_choices(request)
- self.fields['implantation'].choices = _implantation_choices(self, request)
+ self.fields['implantation'].choices = \
+ _implantation_choices(self, request)
# Quand le dae.Poste n'existe pas, on recherche dans les dossiers rhv1
if self.instance and self.instance.id is None:
if len(dossiers) > 0:
self.initial['service'] = dossiers[0].poste.service
-
def _poste_choices(self, request):
""" Menu déroulant pour les postes.
d'équivalent dans dae.
"""
- copies = dae.Poste.objects.ma_region_ou_service(request.user).exclude(id_rh__isnull=True).filter(etat=POSTE_ETAT_FINALISE)
+ copies = dae.Poste.objects \
+ .ma_region_ou_service(request.user) \
+ .exclude(id_rh__isnull=True) \
+ .filter(etat=POSTE_ETAT_FINALISE)
id_copies = [p.id_rh_id for p in copies.all()]
- rhv1 = rh.Poste.objects.ma_region_ou_service(request.user).exclude(id__in=id_copies)
+ rhv1 = rh.Poste.objects.ma_region_ou_service(request.user) \
+ .exclude(id__in=id_copies)
# Optimisation de la requête
rhv1 = rhv1.select_related(depth=1)
"""
Validation conditionnelles de certains champs.
"""
- cleaned_data = self.cleaned_data
+ cleaned_data = self.cleaned_data
- if cleaned_data.get("local") is False and cleaned_data.get("expatrie") is False:
- msg = "Le poste doit au moins être ouvert localement ou aux expatriés"
+ if cleaned_data.get("local") is False \
+ and cleaned_data.get("expatrie") is False:
+ msg = "Le poste doit au moins être ouvert localement " \
+ "ou aux expatriés"
self._errors["local"] = self.error_class([msg])
self._errors["expatrie"] = ''
raise forms.ValidationError(msg)
return cleaned_data
-
def save(self, *args, **kwargs):
kwargs2 = kwargs.copy()
kwargs2['commit'] = False
def _poste_choices(self, request):
""" Menu déroulant pour les postes. """
- dae_ = dae.Poste.objects.ma_region_ou_service(request.user).filter(id_rh__isnull=True)
- copies = dae.Poste.objects.ma_region_ou_service(request.user).exclude(id_rh__isnull=True)
+ dae_ = dae.Poste.objects.ma_region_ou_service(request.user) \
+ .filter(id_rh__isnull=True)
+ copies = dae.Poste.objects.ma_region_ou_service(request.user) \
+ .exclude(id_rh__isnull=True)
return [('', '----------')] + \
sorted([('dae-%s' % p.id, unicode(p)) for p in dae_ | copies],
class DossierForm(forms.ModelForm):
""" Formulaire des dossiers. """
class Meta:
- exclude= ('etat', 'employe', 'poste', 'date_debut', )
+ exclude = ('etat', 'employe', 'poste', 'date_debut',)
model = dae.Dossier
widgets = dict(statut_residence=forms.RadioSelect(),
contrat_date_debut=admin_widgets.AdminDateWidget(),
WF_HELP_TEXT = ""
+
class PosteWorkflowForm(WorkflowFormMixin):
bouton_libelles = POSTE_ETATS_BOUTONS
+
class Meta:
fields = ('etat', )
model = dae.Poste
class DossierWorkflowForm(WorkflowFormMixin):
- bouton_libelles = POSTE_ETATS_BOUTONS # meme workflow que poste...
+ bouton_libelles = POSTE_ETATS_BOUTONS # meme workflow que poste...
+
class Meta:
fields = ('etat', )
model = dae.Dossier
poste.etat = self.instance.etat
poste.save()
+
class ContratForm(forms.ModelForm):
class Meta:
fields = ('type_contrat', 'fichier', )
model = dae.Contrat
+
class DAENumeriseeForm(forms.ModelForm):
class Meta:
model = dae.Dossier
fields = ('dae_numerisee',)
-
-class DAEImportableForm(forms.Form):
- qs_poste = dae.Poste.objects.filter(etat=POSTE_ETAT_FINALISE)
- qs_dossier = dae.Dossier.objects.filter(etat=DOSSIER_ETAT_FINALISE)
- poste = forms.ModelChoiceField(queryset=qs_poste, label="Poste finalisé", required=False)
- dossier = forms.ModelChoiceField(queryset=qs_dossier, label="DAE finalisée", required=False)
-
- def clean_poste(self):
- poste = self.cleaned_data['poste']
- if poste is not None and poste.est_importe():
- raise forms.ValidationError("Ce poste a déjà été importé")
- return poste
-
- def clean_dossier(self):
- dossier = self.cleaned_data['dossier']
- if dossier is not None and not dossier.poste.est_importe():
- raise forms.ValidationError("Le poste de ce dossier doit être importé avant de pouvoir importer le dossier.")
- return dossier
-
- def importer_poste(self):
- poste = self.cleaned_data['poste']
- if poste is not None and not poste.est_importe():
- poste.importer()
-
+++ /dev/null
-# -*- encoding: utf-8 -*-
-
-from django.core.management.base import BaseCommand
-
-from project.dae import models as dae
-
-class Command(BaseCommand):
-
-
- def handle(self, *args, **options):
-
- if len(args) < 2:
- print len(args)
- self.stdout.write("dae <modele> <id> <run>\n")
- return
-
- classname = args[0]
- klass = getattr(dae, classname, None)
- if klass is None:
- self.stdout.write("Le modèle %s n'existe pas dans DAE.\n" % classname)
-
- id = int(args[1])
- try:
- obj = klass.objects.get(id=id)
- except:
- self.stdout.write("L'id %s n'existe pas pour le modèle %s dans DAE.\n" % \
- (id, classname))
- return
-
-
- copy = obj.importer()
- self.stdout.write(u"\n[%s] DAE:%s => RH:%s\n" %
- (obj.__class__.__name__, obj.id, copy.id))
-
class DossierComparaisonManager(RHDossierComparaisonManager, TodoManagerMixin):
pass
-
-class DossierFinaliseManager(models.Manager):
- """
- Dossiers finalisés, qui ne sont pas encore importés
- """
- def get_query_set(self):
- from dae.models import ImportDossier
- dae_importees = [str(i.dae_id) for i in ImportDossier.objects.all()]
- qs = super(DossierFinaliseManager, self).get_query_set().all()
- if len(dae_importees) > 0:
- qs = qs.extra(where=['dae_dossier.id NOT IN (%s)' % ", ".join(dae_importees)])
- return qs
-
-
-class PosteFinaliseManager(models.Manager):
- """
- Dossiers finalisés, qui ne sont pas encore importés
- """
- def get_query_set(self):
- from dae.models import ImportPoste
- dae_importees = [str(i.dae_id) for i in ImportPoste.objects.all()]
-
- qs = super(PosteFinaliseManager, self).get_query_set().all()
- if len(dae_importees) > 0:
- qs = qs.extra(where=['dae_poste.id NOT IN (%s)' % ", ".join(dae_importees)])
- return qs
-
-
--- /dev/null
+# encoding: utf-8
+import datetime
+from south.db import db
+from south.v2 import SchemaMigration
+from django.db import models
+
+class Migration(SchemaMigration):
+
+ def forwards(self, orm):
+
+ # Adding field 'Dossier.dossier_rh'
+ db.add_column('dae_dossier', 'dossier_rh', self.gf('django.db.models.fields.related.ForeignKey')(blank=True, related_name='dossiers_dae', null=True, to=orm['rh.Dossier']), keep_default=False)
+
+
+ def backwards(self, orm):
+
+ # Deleting field 'Dossier.dossier_rh'
+ db.delete_column('dae_dossier', 'dossier_rh_id')
+
+
+ models = {
+ 'auth.group': {
+ 'Meta': {'object_name': 'Group'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
+ 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
+ },
+ 'auth.permission': {
+ 'Meta': {'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
+ 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
+ },
+ 'auth.user': {
+ 'Meta': {'object_name': 'User'},
+ 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
+ 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+ 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'}),
+ 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+ 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+ 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+ 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
+ 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
+ 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
+ },
+ 'contenttypes.contenttype': {
+ 'Meta': {'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
+ 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
+ },
+ 'dae.contrat': {
+ 'Meta': {'object_name': 'Contrat'},
+ 'date_creation': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'date_debut': ('django.db.models.fields.DateField', [], {}),
+ 'date_fin': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'date_modification': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'dossier': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'dae_contrats'", 'db_column': "'dossier'", 'to': "orm['dae.Dossier']"}),
+ 'fichier': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'supprime': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+ 'type_contrat': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'db_column': "'type_contrat'", 'to': "orm['rh.TypeContrat']"}),
+ 'user_creation': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'db_column': "'user_creation'", 'to': "orm['auth.User']"}),
+ 'user_modification': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'db_column': "'user_modification'", 'to': "orm['auth.User']"})
+ },
+ 'dae.dossier': {
+ 'Meta': {'object_name': 'Dossier'},
+ 'classement': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'db_column': "'classement'", 'to': "orm['rh.Classement']"}),
+ 'classement_anterieur': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'to': "orm['rh.Classement']"}),
+ 'classement_titulaire_anterieur': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'to': "orm['rh.Classement']"}),
+ 'compte_compta': ('django.db.models.fields.CharField', [], {'default': "'aucun'", 'max_length': '10'}),
+ 'compte_courriel': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+ 'contrat_date_debut': ('django.db.models.fields.DateField', [], {}),
+ 'contrat_date_fin': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'dae_numerisee': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ 'date_creation': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'date_debut': ('django.db.models.fields.DateField', [], {}),
+ 'date_fin': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'date_modification': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'devise': ('django.db.models.fields.related.ForeignKey', [], {'default': '5', 'related_name': "'+'", 'to': "orm['rh.Devise']"}),
+ 'devise_anterieur': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'to': "orm['rh.Devise']"}),
+ 'devise_titulaire_anterieur': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'to': "orm['rh.Devise']"}),
+ 'dossier_rh': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'dossiers_dae'", 'null': 'True', 'to': "orm['rh.Dossier']"}),
+ 'employe': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'dae_dossiers'", 'db_column': "'employe'", 'to': "orm['dae.Employe']"}),
+ 'employe_anterieur': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'to': "orm['rh.Employe']"}),
+ 'etat': ('django.db.models.fields.CharField', [], {'default': 'None', 'max_length': '20', 'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'justif_nouveau_commentaire': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'justif_nouveau_salaire': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'justif_nouveau_statut': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'justif_nouveau_tmp_remplacement': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'justif_rempl_commentaire': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'justif_rempl_evaluation': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'justif_rempl_salaire': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'justif_rempl_statut_employe': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'justif_rempl_type_contrat': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'organisme_bstg': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'db_column': "'organisme_bstg'", 'to': "orm['rh.OrganismeBstg']"}),
+ 'organisme_bstg_autre': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+ 'poste': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'dae_dossiers'", 'db_column': "'poste'", 'to': "orm['dae.Poste']"}),
+ 'regime_travail': ('django.db.models.fields.DecimalField', [], {'default': "'100.00'", 'null': 'True', 'max_digits': '12', 'decimal_places': '2'}),
+ 'regime_travail_nb_heure_semaine': ('django.db.models.fields.DecimalField', [], {'default': "'35.00'", 'null': 'True', 'max_digits': '12', 'decimal_places': '2'}),
+ 'remplacement': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+ 'remplacement_de': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'to': "orm['dae.Dossier']"}),
+ 'salaire': ('django.db.models.fields.DecimalField', [], {'default': 'None', 'null': 'True', 'max_digits': '13', 'decimal_places': '2'}),
+ 'salaire_anterieur': ('django.db.models.fields.DecimalField', [], {'default': 'None', 'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
+ 'salaire_titulaire_anterieur': ('django.db.models.fields.DecimalField', [], {'default': 'None', 'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
+ 'statut': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'null': 'True', 'to': "orm['rh.Statut']"}),
+ 'statut_anterieur': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'to': "orm['rh.Statut']"}),
+ 'statut_residence': ('django.db.models.fields.CharField', [], {'default': "'local'", 'max_length': '10', 'null': 'True'}),
+ 'statut_titulaire_anterieur': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'to': "orm['rh.Statut']"}),
+ 'supprime': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+ 'type_contrat': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['rh.TypeContrat']"}),
+ 'type_contrat_anterieur': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'to': "orm['rh.TypeContrat']"}),
+ 'user_creation': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'db_column': "'user_creation'", 'to': "orm['auth.User']"}),
+ 'user_modification': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'db_column': "'user_modification'", 'to': "orm['auth.User']"})
+ },
+ 'dae.dossiercomparaison': {
+ 'Meta': {'object_name': 'DossierComparaison'},
+ 'classement': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'to': "orm['rh.Classement']"}),
+ 'devise': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'to': "orm['rh.Devise']"}),
+ 'dossier': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'dae_comparaisons'", 'to': "orm['dae.Dossier']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'implantation': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'to': "orm['managedref.Implantation']"}),
+ 'montant': ('django.db.models.fields.IntegerField', [], {'null': 'True'}),
+ 'personne': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+ 'poste': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+ 'statut': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'to': "orm['rh.Statut']"})
+ },
+ 'dae.dossierpiece': {
+ 'Meta': {'object_name': 'DossierPiece'},
+ 'dossier': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'dae_dossierpieces'", 'db_column': "'dossier'", 'to': "orm['dae.Dossier']"}),
+ 'fichier': ('django.db.models.fields.files.FileField', [], {'max_length': '100'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'nom': ('django.db.models.fields.CharField', [], {'max_length': '255'})
+ },
+ 'dae.employe': {
+ 'Meta': {'object_name': 'Employe'},
+ 'date_creation': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'date_modification': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'genre': ('django.db.models.fields.CharField', [], {'max_length': '1'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'id_rh': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'null': 'True', 'to': "orm['rh.Employe']"}),
+ 'nom': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+ 'prenom': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+ 'supprime': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+ 'user_creation': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'db_column': "'user_creation'", 'to': "orm['auth.User']"}),
+ 'user_modification': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'db_column': "'user_modification'", 'to': "orm['auth.User']"})
+ },
+ 'dae.importdossier': {
+ 'Meta': {'object_name': 'ImportDossier'},
+ 'dae': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['dae.Dossier']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'rh': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['rh.Dossier']"})
+ },
+ 'dae.importposte': {
+ 'Meta': {'object_name': 'ImportPoste'},
+ 'dae': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['dae.Poste']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'rh': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['rh.Poste']"})
+ },
+ 'dae.poste': {
+ 'Meta': {'object_name': 'Poste'},
+ 'appel': ('django.db.models.fields.CharField', [], {'default': "'interne'", 'max_length': '10', 'null': 'True'}),
+ 'autre_max': ('django.db.models.fields.DecimalField', [], {'default': '0', 'null': 'True', 'max_digits': '12', 'decimal_places': '2'}),
+ 'autre_min': ('django.db.models.fields.DecimalField', [], {'default': '0', 'null': 'True', 'max_digits': '12', 'decimal_places': '2'}),
+ 'charges_patronales_max': ('django.db.models.fields.DecimalField', [], {'default': '0', 'max_digits': '12', 'decimal_places': '2'}),
+ 'charges_patronales_min': ('django.db.models.fields.DecimalField', [], {'default': '0', 'max_digits': '12', 'decimal_places': '2'}),
+ 'classement_max': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'db_column': "'classement_max'", 'to': "orm['rh.Classement']"}),
+ 'classement_min': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'db_column': "'classement_min'", 'to': "orm['rh.Classement']"}),
+ 'comp_autre_max': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
+ 'comp_autre_min': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
+ 'comp_fonctionpub_max': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
+ 'comp_fonctionpub_min': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
+ 'comp_locale_max': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
+ 'comp_locale_min': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
+ 'comp_ong_max': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
+ 'comp_ong_min': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
+ 'comp_universite_max': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
+ 'comp_universite_min': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
+ 'date_creation': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'date_debut': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'date_fin': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'date_modification': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'devise_comparaison': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'db_column': "'devise_comparaison'", 'to': "orm['rh.Devise']"}),
+ 'devise_max': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'null': 'True', 'db_column': "'devise_max'", 'to': "orm['rh.Devise']"}),
+ 'devise_min': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'null': 'True', 'db_column': "'devise_min'", 'to': "orm['rh.Devise']"}),
+ 'etat': ('django.db.models.fields.CharField', [], {'default': 'None', 'max_length': '20', 'null': 'True', 'blank': 'True'}),
+ 'expatrie': ('django.db.models.fields.NullBooleanField', [], {'default': 'False', 'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'id_rh': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'null': 'True', 'to': "orm['rh.Poste']"}),
+ 'implantation': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'db_column': "'implantation'", 'to': "orm['managedref.Implantation']"}),
+ 'indemn_expat_max': ('django.db.models.fields.DecimalField', [], {'default': '0', 'max_digits': '12', 'decimal_places': '2'}),
+ 'indemn_expat_min': ('django.db.models.fields.DecimalField', [], {'default': '0', 'max_digits': '13', 'decimal_places': '2'}),
+ 'indemn_fct_max': ('django.db.models.fields.DecimalField', [], {'default': '0', 'max_digits': '12', 'decimal_places': '2'}),
+ 'indemn_fct_min': ('django.db.models.fields.DecimalField', [], {'default': '0', 'max_digits': '12', 'decimal_places': '2'}),
+ 'indemn_max': ('django.db.models.fields.DecimalField', [], {'default': '0', 'null': 'True', 'max_digits': '12', 'decimal_places': '2'}),
+ 'indemn_min': ('django.db.models.fields.DecimalField', [], {'default': '0', 'null': 'True', 'max_digits': '12', 'decimal_places': '2'}),
+ 'justification': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'local': ('django.db.models.fields.NullBooleanField', [], {'default': 'True', 'null': 'True', 'blank': 'True'}),
+ 'mise_a_disposition': ('django.db.models.fields.NullBooleanField', [], {'default': 'False', 'null': 'True', 'blank': 'True'}),
+ 'nom': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+ 'nom_feminin': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True'}),
+ 'regime_travail': ('django.db.models.fields.DecimalField', [], {'default': "'100.00'", 'null': 'True', 'max_digits': '12', 'decimal_places': '2'}),
+ 'regime_travail_nb_heure_semaine': ('django.db.models.fields.DecimalField', [], {'default': "'35.00'", 'null': 'True', 'max_digits': '12', 'decimal_places': '2'}),
+ 'responsable': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'null': 'True', 'db_column': "'responsable'", 'to': "orm['rh.Poste']"}),
+ 'salaire_max': ('django.db.models.fields.DecimalField', [], {'default': '0', 'null': 'True', 'max_digits': '12', 'decimal_places': '2'}),
+ 'salaire_min': ('django.db.models.fields.DecimalField', [], {'default': '0', 'null': 'True', 'max_digits': '12', 'decimal_places': '2'}),
+ 'service': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'null': 'True', 'db_column': "'service'", 'to': "orm['rh.Service']"}),
+ 'supprime': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+ 'type_intervention': ('django.db.models.fields.CharField', [], {'default': "'N'", 'max_length': '1'}),
+ 'type_poste': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'null': 'True', 'db_column': "'type_poste'", 'to': "orm['rh.TypePoste']"}),
+ 'user_creation': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'db_column': "'user_creation'", 'to': "orm['auth.User']"}),
+ 'user_modification': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'db_column': "'user_modification'", 'to': "orm['auth.User']"}),
+ 'valeur_point_max': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'db_column': "'valeur_point_max'", 'to': "orm['rh.ValeurPoint']"}),
+ 'valeur_point_min': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'db_column': "'valeur_point_min'", 'to': "orm['rh.ValeurPoint']"})
+ },
+ 'dae.postecomparaison': {
+ 'Meta': {'object_name': 'PosteComparaison'},
+ 'classement': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'to': "orm['rh.Classement']"}),
+ 'date_creation': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'date_modification': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'devise': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'to': "orm['rh.Devise']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'implantation': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'to': "orm['managedref.Implantation']"}),
+ 'montant': ('django.db.models.fields.IntegerField', [], {'null': 'True'}),
+ 'nom': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+ 'poste': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'dae_comparaisons_internes'", 'to': "orm['dae.Poste']"}),
+ 'statut': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'to': "orm['rh.Statut']"}),
+ 'supprime': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+ 'user_creation': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'db_column': "'user_creation'", 'to': "orm['auth.User']"}),
+ 'user_modification': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'db_column': "'user_modification'", 'to': "orm['auth.User']"})
+ },
+ 'dae.postefinancement': {
+ 'Meta': {'object_name': 'PosteFinancement'},
+ 'commentaire': ('django.db.models.fields.TextField', [], {}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'poste': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'dae_financements'", 'db_column': "'poste'", 'to': "orm['dae.Poste']"}),
+ 'pourcentage': ('django.db.models.fields.DecimalField', [], {'max_digits': '12', 'decimal_places': '2'}),
+ 'type': ('django.db.models.fields.CharField', [], {'max_length': '1'})
+ },
+ 'dae.postepiece': {
+ 'Meta': {'object_name': 'PostePiece'},
+ 'fichier': ('django.db.models.fields.files.FileField', [], {'max_length': '100'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'nom': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+ 'poste': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'dae_pieces'", 'db_column': "'poste'", 'to': "orm['dae.Poste']"})
+ },
+ 'dae.remuneration': {
+ 'Meta': {'object_name': 'Remuneration'},
+ 'commentaire': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+ 'date_creation': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'date_debut': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'date_fin': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'date_modification': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'devise': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'db_column': "'devise'", 'to': "orm['rh.Devise']"}),
+ 'dossier': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'dae_remunerations'", 'db_column': "'dossier'", 'to': "orm['dae.Dossier']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'montant': ('django.db.models.fields.DecimalField', [], {'default': '0', 'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
+ 'supprime': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+ 'type': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'db_column': "'type'", 'to': "orm['rh.TypeRemuneration']"}),
+ 'type_revalorisation': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'db_column': "'type_revalorisation'", 'to': "orm['rh.TypeRevalorisation']"}),
+ 'user_creation': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'db_column': "'user_creation'", 'to': "orm['auth.User']"}),
+ 'user_modification': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'db_column': "'user_modification'", 'to': "orm['auth.User']"})
+ },
+ 'managedref.bureau': {
+ 'Meta': {'object_name': 'Bureau', 'db_table': "u'ref_bureau'"},
+ 'actif': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+ 'code': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'implantation': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['managedref.Implantation']", 'db_column': "'implantation'"}),
+ 'nom': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+ 'nom_court': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
+ 'nom_long': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
+ 'region': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['managedref.Region']", 'db_column': "'region'"})
+ },
+ 'managedref.implantation': {
+ 'Meta': {'object_name': 'Implantation', 'db_table': "u'ref_implantation'"},
+ 'actif': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+ 'adresse_physique_bureau': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
+ 'adresse_physique_code_postal': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+ 'adresse_physique_code_postal_avant_ville': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
+ 'adresse_physique_no': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+ 'adresse_physique_pays': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'impl_adresse_physique'", 'to_field': "'code'", 'db_column': "'adresse_physique_pays'", 'to': "orm['managedref.Pays']"}),
+ 'adresse_physique_precision': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
+ 'adresse_physique_precision_avant': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
+ 'adresse_physique_region': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
+ 'adresse_physique_rue': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
+ 'adresse_physique_ville': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+ 'adresse_postale_boite_postale': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+ 'adresse_postale_bureau': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+ 'adresse_postale_code_postal': ('django.db.models.fields.CharField', [], {'max_length': '20', 'null': 'True', 'blank': 'True'}),
+ 'adresse_postale_code_postal_avant_ville': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
+ 'adresse_postale_no': ('django.db.models.fields.CharField', [], {'max_length': '30', 'null': 'True', 'blank': 'True'}),
+ 'adresse_postale_pays': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'impl_adresse_postale'", 'to_field': "'code'", 'db_column': "'adresse_postale_pays'", 'to': "orm['managedref.Pays']"}),
+ 'adresse_postale_precision': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+ 'adresse_postale_precision_avant': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+ 'adresse_postale_region': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+ 'adresse_postale_rue': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+ 'adresse_postale_ville': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+ 'bureau_rattachement': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['managedref.Implantation']", 'db_column': "'bureau_rattachement'"}),
+ 'code_meteo': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
+ 'commentaire': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
+ 'courriel': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
+ 'courriel_interne': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
+ 'date_extension': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'date_fermeture': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'date_inauguration': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'date_ouverture': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'fax': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
+ 'fax_interne': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
+ 'fuseau_horaire': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
+ 'hebergement_convention': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
+ 'hebergement_convention_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'hebergement_etablissement': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'modif_date': ('django.db.models.fields.DateField', [], {}),
+ 'nom': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+ 'nom_court': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
+ 'nom_long': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
+ 'region': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['managedref.Region']", 'db_column': "'region'"}),
+ 'remarque': ('django.db.models.fields.TextField', [], {}),
+ 'responsable_implantation': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'statut': ('django.db.models.fields.IntegerField', [], {}),
+ 'telephone': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
+ 'telephone_interne': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
+ 'type': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+ 'url': ('django.db.models.fields.URLField', [], {'max_length': '255', 'blank': 'True'})
+ },
+ 'managedref.pays': {
+ 'Meta': {'object_name': 'Pays', 'db_table': "u'ref_pays'"},
+ 'actif': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+ 'code': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '2'}),
+ 'code_bureau': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['managedref.Bureau']", 'to_field': "'code'", 'null': 'True', 'db_column': "'code_bureau'", 'blank': 'True'}),
+ 'code_iso3': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '3'}),
+ 'developpement': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'monnaie': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+ 'nom': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+ 'nord_sud': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+ 'region': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['managedref.Region']", 'db_column': "'region'"})
+ },
+ 'managedref.region': {
+ 'Meta': {'object_name': 'Region', 'db_table': "u'ref_region'"},
+ 'actif': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+ 'code': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'implantation_bureau': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'gere_region'", 'null': 'True', 'db_column': "'implantation_bureau'", 'to': "orm['managedref.Implantation']"}),
+ 'nom': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'})
+ },
+ 'references.implantation': {
+ 'Meta': {'managed': 'False', 'object_name': 'Implantation', 'db_table': "u'ref_implantation'", '_ormbases': ['managedref.Implantation']}
+ },
+ 'references.pays': {
+ 'Meta': {'managed': 'False', 'object_name': 'Pays', 'db_table': "u'ref_pays'", '_ormbases': ['managedref.Pays']}
+ },
+ 'rh.classement': {
+ 'Meta': {'object_name': 'Classement'},
+ 'coefficient': ('django.db.models.fields.FloatField', [], {'default': '0', 'null': 'True'}),
+ 'commentaire': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'date_creation': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'date_modification': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'degre': ('django.db.models.fields.IntegerField', [], {'default': '0', 'blank': 'True'}),
+ 'echelon': ('django.db.models.fields.IntegerField', [], {'default': '0', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'supprime': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+ 'type': ('django.db.models.fields.CharField', [], {'max_length': '10'}),
+ 'user_creation': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'db_column': "'user_creation'", 'to': "orm['auth.User']"}),
+ 'user_modification': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'db_column': "'user_modification'", 'to': "orm['auth.User']"})
+ },
+ 'rh.devise': {
+ 'Meta': {'object_name': 'Devise'},
+ 'archive': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+ 'code': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '10'}),
+ 'date_creation': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'date_modification': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'nom': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+ 'supprime': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+ 'user_creation': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'db_column': "'user_creation'", 'to': "orm['auth.User']"}),
+ 'user_modification': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'db_column': "'user_modification'", 'to': "orm['auth.User']"})
+ },
+ 'rh.dossier': {
+ 'Meta': {'object_name': 'Dossier'},
+ 'classement': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'db_column': "'classement'", 'to': "orm['rh.Classement']"}),
+ 'date_creation': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'date_debut': ('django.db.models.fields.DateField', [], {}),
+ 'date_fin': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'date_modification': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'employe': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'rh_dossiers'", 'db_column': "'employe'", 'to': "orm['rh.Employe']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'organisme_bstg': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'db_column': "'organisme_bstg'", 'to': "orm['rh.OrganismeBstg']"}),
+ 'poste': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'rh_dossiers'", 'db_column': "'poste'", 'to': "orm['rh.Poste']"}),
+ 'principal': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'}),
+ 'regime_travail': ('django.db.models.fields.DecimalField', [], {'default': "'100.00'", 'null': 'True', 'max_digits': '12', 'decimal_places': '2'}),
+ 'regime_travail_nb_heure_semaine': ('django.db.models.fields.DecimalField', [], {'default': "'35.00'", 'null': 'True', 'max_digits': '12', 'decimal_places': '2'}),
+ 'remplacement': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+ 'remplacement_de': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'to': "orm['rh.Dossier']"}),
+ 'statut': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'null': 'True', 'to': "orm['rh.Statut']"}),
+ 'statut_residence': ('django.db.models.fields.CharField', [], {'default': "'local'", 'max_length': '10', 'null': 'True'}),
+ 'supprime': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+ 'user_creation': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'db_column': "'user_creation'", 'to': "orm['auth.User']"}),
+ 'user_modification': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'db_column': "'user_modification'", 'to': "orm['auth.User']"})
+ },
+ 'rh.employe': {
+ 'Meta': {'object_name': 'Employe'},
+ 'adresse': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+ 'code_postal': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+ 'date_creation': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'date_entree': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'date_modification': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'date_naissance': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'genre': ('django.db.models.fields.CharField', [], {'max_length': '1'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'nationalite': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'employes_nationalite'", 'db_column': "'nationalite'", 'to_field': "'code'", 'to': "orm['managedref.Pays']", 'blank': 'True', 'null': 'True'}),
+ 'nb_postes': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'nom': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+ 'nom_affichage': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+ 'pays': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'employes'", 'db_column': "'pays'", 'to_field': "'code'", 'to': "orm['managedref.Pays']", 'blank': 'True', 'null': 'True'}),
+ 'prenom': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+ 'province': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+ 'situation_famille': ('django.db.models.fields.CharField', [], {'max_length': '1', 'null': 'True', 'blank': 'True'}),
+ 'supprime': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+ 'tel_cellulaire': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+ 'tel_domicile': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+ 'user_creation': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'db_column': "'user_creation'", 'to': "orm['auth.User']"}),
+ 'user_modification': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'db_column': "'user_modification'", 'to': "orm['auth.User']"}),
+ 'ville': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'})
+ },
+ 'rh.familleemploi': {
+ 'Meta': {'object_name': 'FamilleEmploi'},
+ 'date_creation': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'date_modification': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'nom': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+ 'supprime': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+ 'user_creation': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'db_column': "'user_creation'", 'to': "orm['auth.User']"}),
+ 'user_modification': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'db_column': "'user_modification'", 'to': "orm['auth.User']"})
+ },
+ 'rh.organismebstg': {
+ 'Meta': {'object_name': 'OrganismeBstg'},
+ 'date_creation': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'date_modification': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'nom': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+ 'pays': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'organismes_bstg'", 'db_column': "'pays'", 'to_field': "'code'", 'to': "orm['managedref.Pays']", 'blank': 'True', 'null': 'True'}),
+ 'supprime': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+ 'type': ('django.db.models.fields.CharField', [], {'max_length': '10'}),
+ 'user_creation': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'db_column': "'user_creation'", 'to': "orm['auth.User']"}),
+ 'user_modification': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'db_column': "'user_modification'", 'to': "orm['auth.User']"})
+ },
+ 'rh.poste': {
+ 'Meta': {'object_name': 'Poste'},
+ 'appel': ('django.db.models.fields.CharField', [], {'default': "'interne'", 'max_length': '10', 'null': 'True'}),
+ 'autre_max': ('django.db.models.fields.DecimalField', [], {'default': '0', 'null': 'True', 'max_digits': '12', 'decimal_places': '2'}),
+ 'autre_min': ('django.db.models.fields.DecimalField', [], {'default': '0', 'null': 'True', 'max_digits': '12', 'decimal_places': '2'}),
+ 'classement_max': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'db_column': "'classement_max'", 'to': "orm['rh.Classement']"}),
+ 'classement_min': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'db_column': "'classement_min'", 'to': "orm['rh.Classement']"}),
+ 'comp_autre_max': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
+ 'comp_autre_min': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
+ 'comp_fonctionpub_max': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
+ 'comp_fonctionpub_min': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
+ 'comp_locale_max': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
+ 'comp_locale_min': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
+ 'comp_ong_max': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
+ 'comp_ong_min': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
+ 'comp_universite_max': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
+ 'comp_universite_min': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
+ 'date_creation': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'date_debut': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'date_fin': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'date_modification': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'devise_comparaison': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'db_column': "'devise_comparaison'", 'to': "orm['rh.Devise']"}),
+ 'devise_max': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'null': 'True', 'db_column': "'devise_max'", 'to': "orm['rh.Devise']"}),
+ 'devise_min': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'null': 'True', 'db_column': "'devise_min'", 'to': "orm['rh.Devise']"}),
+ 'expatrie': ('django.db.models.fields.NullBooleanField', [], {'default': 'False', 'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'implantation': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'db_column': "'implantation'", 'to': "orm['managedref.Implantation']"}),
+ 'indemn_max': ('django.db.models.fields.DecimalField', [], {'default': '0', 'null': 'True', 'max_digits': '12', 'decimal_places': '2'}),
+ 'indemn_min': ('django.db.models.fields.DecimalField', [], {'default': '0', 'null': 'True', 'max_digits': '12', 'decimal_places': '2'}),
+ 'justification': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'local': ('django.db.models.fields.NullBooleanField', [], {'default': 'True', 'null': 'True', 'blank': 'True'}),
+ 'mise_a_disposition': ('django.db.models.fields.NullBooleanField', [], {'default': 'False', 'null': 'True', 'blank': 'True'}),
+ 'nom': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+ 'nom_feminin': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True'}),
+ 'regime_travail': ('django.db.models.fields.DecimalField', [], {'default': "'100.00'", 'null': 'True', 'max_digits': '12', 'decimal_places': '2'}),
+ 'regime_travail_nb_heure_semaine': ('django.db.models.fields.DecimalField', [], {'default': "'35.00'", 'null': 'True', 'max_digits': '12', 'decimal_places': '2'}),
+ 'responsable': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'null': 'True', 'db_column': "'responsable'", 'to': "orm['rh.Poste']"}),
+ 'salaire_max': ('django.db.models.fields.DecimalField', [], {'default': '0', 'null': 'True', 'max_digits': '12', 'decimal_places': '2'}),
+ 'salaire_min': ('django.db.models.fields.DecimalField', [], {'default': '0', 'null': 'True', 'max_digits': '12', 'decimal_places': '2'}),
+ 'service': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'null': 'True', 'db_column': "'service'", 'to': "orm['rh.Service']"}),
+ 'supprime': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+ 'type_poste': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'null': 'True', 'db_column': "'type_poste'", 'to': "orm['rh.TypePoste']"}),
+ 'user_creation': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'db_column': "'user_creation'", 'to': "orm['auth.User']"}),
+ 'user_modification': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'db_column': "'user_modification'", 'to': "orm['auth.User']"}),
+ 'vacant': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
+ 'valeur_point_max': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'db_column': "'valeur_point_max'", 'to': "orm['rh.ValeurPoint']"}),
+ 'valeur_point_min': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'db_column': "'valeur_point_min'", 'to': "orm['rh.ValeurPoint']"})
+ },
+ 'rh.service': {
+ 'Meta': {'object_name': 'Service'},
+ 'archive': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+ 'date_creation': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'date_modification': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'nom': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+ 'supprime': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+ 'user_creation': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'db_column': "'user_creation'", 'to': "orm['auth.User']"}),
+ 'user_modification': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'db_column': "'user_modification'", 'to': "orm['auth.User']"})
+ },
+ 'rh.statut': {
+ 'Meta': {'object_name': 'Statut'},
+ 'code': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '25'}),
+ 'date_creation': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'date_modification': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'nom': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+ 'supprime': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+ 'user_creation': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'db_column': "'user_creation'", 'to': "orm['auth.User']"}),
+ 'user_modification': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'db_column': "'user_modification'", 'to': "orm['auth.User']"})
+ },
+ 'rh.typecontrat': {
+ 'Meta': {'object_name': 'TypeContrat'},
+ 'date_creation': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'date_modification': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'nom': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+ 'nom_long': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+ 'supprime': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+ 'user_creation': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'db_column': "'user_creation'", 'to': "orm['auth.User']"}),
+ 'user_modification': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'db_column': "'user_modification'", 'to': "orm['auth.User']"})
+ },
+ 'rh.typeposte': {
+ 'Meta': {'object_name': 'TypePoste'},
+ 'date_creation': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'date_modification': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'famille_emploi': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'db_column': "'famille_emploi'", 'to': "orm['rh.FamilleEmploi']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'is_responsable': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+ 'nom': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+ 'nom_feminin': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+ 'supprime': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+ 'user_creation': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'db_column': "'user_creation'", 'to': "orm['auth.User']"}),
+ 'user_modification': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'db_column': "'user_modification'", 'to': "orm['auth.User']"})
+ },
+ 'rh.typeremuneration': {
+ 'Meta': {'object_name': 'TypeRemuneration'},
+ 'archive': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+ 'date_creation': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'date_modification': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'nature_remuneration': ('django.db.models.fields.CharField', [], {'max_length': '30'}),
+ 'nom': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+ 'supprime': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+ 'type_paiement': ('django.db.models.fields.CharField', [], {'max_length': '30'}),
+ 'user_creation': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'db_column': "'user_creation'", 'to': "orm['auth.User']"}),
+ 'user_modification': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'db_column': "'user_modification'", 'to': "orm['auth.User']"})
+ },
+ 'rh.typerevalorisation': {
+ 'Meta': {'object_name': 'TypeRevalorisation'},
+ 'date_creation': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'date_modification': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'nom': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+ 'supprime': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+ 'user_creation': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'db_column': "'user_creation'", 'to': "orm['auth.User']"}),
+ 'user_modification': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'db_column': "'user_modification'", 'to': "orm['auth.User']"})
+ },
+ 'rh.valeurpoint': {
+ 'Meta': {'object_name': 'ValeurPoint'},
+ 'annee': ('django.db.models.fields.IntegerField', [], {}),
+ 'date_creation': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'date_modification': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'devise': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'db_column': "'devise'", 'to': "orm['rh.Devise']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'implantation': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'rh_valeur_point'", 'db_column': "'implantation'", 'to': "orm['managedref.Implantation']"}),
+ 'supprime': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+ 'user_creation': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'db_column': "'user_creation'", 'to': "orm['auth.User']"}),
+ 'user_modification': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'db_column': "'user_modification'", 'to': "orm['auth.User']"}),
+ 'valeur': ('django.db.models.fields.FloatField', [], {'null': 'True'})
+ },
+ 'workflow.workflowcommentaire': {
+ 'Meta': {'object_name': 'WorkflowCommentaire'},
+ 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
+ 'date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+ 'etat_final': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+ 'etat_initial': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}),
+ 'owner': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}),
+ 'texte': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'})
+ }
+ }
+
+ complete_apps = ['dae']
# -=- encoding: utf-8 -=-
+import os
+from datetime import date, timedelta
+
+import reversion
+from auf.django.metadata.models import AUFMetadata
from django.conf import settings
from django.core.files.storage import FileSystemStorage
from django.db import models
-import reversion
+from django.db.models import Q
+
+from project.dae.managers import PosteManager, DossierManager
+from project.dae.workflow import PosteWorkflow, DossierWorkflow
+from project.dae.workflow import \
+ DOSSIER_ETAT_DRH_FINALISATION, DOSSIER_ETAT_REGION_FINALISATION, \
+ DOSSIER_ETAT_FINALISE
+
+# XXX: Saloperie, il faut importer rh.models à partir d'un autre namespace
+# à cause du hack app_context() dans project.rh.models. Très fragile. Il
+# faut régler ça aussi vite que possible.
from rh import models as rh
-from workflow import PosteWorkflow, DossierWorkflow
-from workflow import DOSSIER_ETAT_DRH_FINALISATION, DOSSIER_ETAT_REGION_FINALISATION, \
- DOSSIER_ETAT_FINALISE
-from auf.django.metadata.models import AUFMetadata
-from managers import *
from rh.models import HELP_TEXT_DATE
-from exporter import DossierCopier, PosteCopier
# Upload de fichiers
UPLOAD_STORAGE = FileSystemStorage(settings.PRIVE_MEDIA_ROOT)
class DeviseException(Exception):
- silent_variable_failure = True
+ silent_variable_failure = True
class Poste(PosteWorkflow, rh.Poste_):
- type_intervention = models.CharField(max_length=1, choices=POSTE_ACTION, default='N')
+ type_intervention = models.CharField(
+ max_length=1, choices=POSTE_ACTION, default='N'
+ )
# Modèle existant
- id_rh = models.ForeignKey(rh.Poste, null=True, related_name='+',
- editable=False,
- verbose_name=u"Mise à jour du poste")
+ id_rh = models.ForeignKey(
+ rh.Poste, null=True, related_name='postes_dae', editable=False,
+ verbose_name=u"Mise à jour du poste"
+ )
# Rémunération
- indemn_expat_min = models.DecimalField(max_digits=13, decimal_places=2, default=0)
- indemn_expat_max = models.DecimalField(max_digits=12, decimal_places=2, default=0)
- indemn_fct_min = models.DecimalField(max_digits=12, decimal_places=2, default=0)
- indemn_fct_max = models.DecimalField(max_digits=12, decimal_places=2, default=0)
- charges_patronales_min = models.DecimalField(max_digits=12, decimal_places=2, default=0)
- charges_patronales_max = models.DecimalField(max_digits=12, decimal_places=2, default=0)
+ indemn_expat_min = models.DecimalField(
+ max_digits=13, decimal_places=2, default=0
+ )
+ indemn_expat_max = models.DecimalField(
+ max_digits=12, decimal_places=2, default=0
+ )
+ indemn_fct_min = models.DecimalField(
+ max_digits=12, decimal_places=2, default=0
+ )
+ indemn_fct_max = models.DecimalField(
+ max_digits=12, decimal_places=2, default=0
+ )
+ charges_patronales_min = models.DecimalField(
+ max_digits=12, decimal_places=2, default=0
+ )
+ charges_patronales_max = models.DecimalField(
+ max_digits=12, decimal_places=2, default=0
+ )
# Managers
objects = PosteManager()
return []
return self.id_rh.rh_dossiers.all()
- def rh_importation(self):
- if ImportPoste.objects.filter(dae=self).exists():
- return ImportPoste.objects.get(dae=self).rh
- else:
- return None
+ def dans_rh(self):
+ """
+ Retourne le poste RH s'il existe.
+ """
+ return self.id_rh
- def importer(self, verbosity=0, dry_run=False):
- copieur = PosteCopier(verbosity=verbosity, dry_run=dry_run)
- return copieur.copy(self)
+ def importer_dans_rh(self):
+ """
+ Importe le poste DAE dans un poste RH existant ou nouveau.
+ """
+ poste_rh = self.dans_rh() or rh.Poste()
+ poste_rh.nom = self.nom
+ poste_rh.implantation = self.implantation
+ poste_rh.type_poste = self.type_poste
+ poste_rh.service = self.service
+ poste_rh.responsable = self.responsable
+ poste_rh.regime_travail = self.regime_travail
+ poste_rh.regime_travail_nb_heure_semaine = \
+ self.regime_travail_nb_heure_semaine
+ poste_rh.local = self.local
+ poste_rh.expatrie = self.expatrie
+ poste_rh.mise_a_disposition = self.mise_a_disposition
+ poste_rh.appel = self.appel
+ poste_rh.classement_min = self.classement_min
+ poste_rh.classement_max = self.classement_max
+ poste_rh.valeur_point_min = self.valeur_point_min
+ poste_rh.valeur_point_max = self.valeur_point_max
+ poste_rh.devise_min = self.devise_min
+ poste_rh.devise_max = self.devise_max
+ poste_rh.salaire_min = self.salaire_min
+ poste_rh.salaire_max = self.salaire_max
+ poste_rh.indemn_min = self.indemn_min
+ poste_rh.indemn_max = self.indemn_max
+ poste_rh.autre_min = self.autre_min
+ poste_rh.autre_max = self.autre_max
+ poste_rh.devise_comparaison = self.devise_comparaison
+ poste_rh.comp_locale_min = self.comp_locale_min
+ poste_rh.comp_locale_max = self.comp_locale_max
+ poste_rh.comp_universite_min = self.comp_universite_min
+ poste_rh.comp_universite_max = self.comp_universite_max
+ poste_rh.comp_fonctionpub_min = self.comp_fonctionpub_min
+ poste_rh.comp_fonctionpub_max = self.comp_fonctionpub_max
+ poste_rh.comp_ong_min = self.comp_ong_min
+ poste_rh.comp_ong_max = self.comp_ong_max
+ poste_rh.comp_autre_min = self.comp_autre_min
+ poste_rh.comp_autre_max = self.comp_autre_max
+ poste_rh.justification = self.justification
+ poste_rh.date_debut = self.date_debut
+ poste_rh.date_fin = self.date_fin
+ poste_rh.save()
+
+ for piece in self.dae_pieces.all():
+ piece_rh = poste_rh.rh_pieces.create(
+ poste=poste_rh,
+ nom=piece.nom
+ )
+ piece_rh.fichier.save(
+ os.path.basename(piece.fichier.name), piece.fichier
+ )
+
+ rh.PosteComparaison.objects.filter(poste=poste_rh).delete()
+ for comp in self.dae_comparaisons_internes.all():
+ poste_rh.rh_comparaisons_internes.create(
+ implantation=comp.implantation,
+ nom=comp.nom,
+ montant=comp.montant,
+ devise=comp.devise
+ )
+
+ rh.PosteFinancement.objects.filter(poste=poste_rh).delete()
+ for financement in self.dae_financements.all():
+ poste_rh.rh_financements.create(
+ type=financement.type,
+ pourcentage=financement.pourcentage,
+ commentaire=financement.commentaire
+ )
+
+ self.id_rh = poste_rh
+ self.save()
+ return poste_rh
def get_employe(self):
"""
implantation_devise = rh.TauxChange.objects \
.filter(implantation=self.implantation)[0].devise
except:
- implantation_devise = 5 # EUR
+ implantation_devise = 5 # EUR
return implantation_devise
#####################
#####################
def get_couts_minimum(self):
- return self.salaire_min + self.indemn_expat_min + self.indemn_fct_min + self.charges_patronales_min + self.autre_min
+ return self.salaire_min + self.indemn_expat_min + \
+ self.indemn_fct_min + self.charges_patronales_min + \
+ self.autre_min
def get_salaire_minimum(self):
return self.get_couts_minimum() - self.charges_patronales_min
def get_taux_minimum(self):
if self.devise_min.code == 'EUR':
- return 1
+ return 1
liste_taux = self.devise_min.tauxchange_set.order_by('-annee')
if len(liste_taux) == 0:
- raise DeviseException(u"La devise %s n'a pas de taux pour l'implantation %s" % (self.devise_min, self.implantation))
+ raise DeviseException(
+ u"La devise %s n'a pas de taux pour l'implantation %s" %
+ (self.devise_min, self.implantation))
else:
return liste_taux[0].taux
return float(self.get_salaire_minimum()) * self.get_taux_minimum()
def get_couts_maximum(self):
- return self.salaire_max + self.indemn_expat_max + self.indemn_fct_max + self.charges_patronales_max + self.autre_max
+ return self.salaire_max + self.indemn_expat_max + \
+ self.indemn_fct_max + self.charges_patronales_max + \
+ self.autre_max
def get_salaire_maximum(self):
return self.get_couts_maximum() - self.charges_patronales_max
def get_taux_maximum(self):
if self.devise_max.code == 'EUR':
- return 1
+ return 1
liste_taux = self.devise_max.tauxchange_set.order_by('-annee')
if len(liste_taux) == 0:
- raise DeviseException(u"La devise %s n'a pas de taux pour l'implantation %s" % (self.devise_max, self.implantation))
+ raise DeviseException(
+ u"La devise %s n'a pas de taux pour l'implantation %s" %
+ (self.devise_max, self.implantation)
+ )
else:
return liste_taux[0].taux
except DeviseException, e:
return e
-
- ######################
# Comparaison de poste
- ######################
-
def est_comparable(self):
"""
- Si on a au moins une valeur de saisie dans les comparaisons, alors le poste
- est comparable.
+ Si on a au moins une valeur de saisie dans les comparaisons, alors
+ le poste est comparable.
"""
if self.comp_universite_min is None and \
self.comp_fonctionpub_min is None and \
else:
return True
-
def get_taux_comparaison(self):
try:
- return rh.TauxChange.objects.filter(devise=self.devise_comparaison)[0].taux
+ return rh.TauxChange.objects \
+ .filter(devise=self.devise_comparaison)[0].taux
except:
return 1
def get_comp_autre_max_euros(self):
return (float)(self.comp_autre_max) * self.get_taux_comparaison()
-
def __unicode__(self):
"""
Cette fonction est consommatrice SQL car elle cherche les dossiers
)
return u'%s - %s (%s)' % data
-
# Tester l'enregistrement car les models.py sont importés au complet
if not reversion.is_registered(Poste):
reversion.register(Poste)
-
POSTE_FINANCEMENT_CHOICES = (
('A', 'A - Frais de personnel'),
('B', 'B - Projet(s)-Titre(s)'),
('C', 'C - Autre')
)
+
class PosteFinancement(rh.PosteFinancement_):
pass
+
class PostePiece(rh.PostePiece_):
pass
+
class PosteComparaison(rh.PosteComparaison_):
- statut = models.ForeignKey(rh.Statut, related_name='+', verbose_name=u'Statut', null=True, blank=True, )
- classement = models.ForeignKey(rh.Classement, related_name='+', verbose_name=u'Classement', null=True, blank=True, )
+ statut = models.ForeignKey(
+ rh.Statut, related_name='+', verbose_name=u'Statut', null=True,
+ blank=True
+ )
+ classement = models.ForeignKey(
+ rh.Classement, related_name='+', verbose_name=u'Classement',
+ null=True, blank=True
+ )
### EMPLOYÉ/PERSONNE
('f', 'Femme'),
)
+
class Employe(AUFMetadata):
# Modèle existant
def __unicode__(self):
return u'%s %s' % (self.prenom, self.nom.upper())
+ def dans_rh(self):
+ """
+ Retourne l'employé RH associé à cet employé DAE.
+ """
+ return self.id_rh
+
+ def importer_dans_rh(self):
+ """
+ Importe l'employé DAE dans un employé RH existant ou nouveau.
+ """
+ employe_rh = self.dans_rh() or rh.Employe.objects.create(
+ nom=self.nom,
+ prenom=self.prenom,
+ genre=self.genre
+ )
+ self.id_rh = employe_rh
+ self.save()
+ return employe_rh
+
### DOSSIER
('aucun', 'Aucun'),
)
+
class Dossier(DossierWorkflow, rh.Dossier_):
- poste = models.ForeignKey('Poste', db_column='poste', related_name='%(app_label)s_dossiers')
- employe = models.ForeignKey('Employe', db_column='employe',
- related_name='%(app_label)s_dossiers',
- verbose_name=u"Employé")
+ poste = models.ForeignKey(
+ 'Poste', db_column='poste', related_name='%(app_label)s_dossiers'
+ )
+ employe = models.ForeignKey(
+ 'Employe', db_column='employe',
+ related_name='%(app_label)s_dossiers', verbose_name=u"Employé"
+ )
organisme_bstg_autre = models.CharField(max_length=255,
verbose_name=u"Autre organisme",
help_text="indiquer l'organisme ici s'il n'est pas dans la liste",
null=True,
blank=True,)
+ # Lien avec le dossier
+ dossier_rh = models.ForeignKey(
+ rh.Dossier, related_name='dossiers_dae', null=True, blank=True
+ )
+
# Données antérieures de l'employé
statut_anterieur = models.ForeignKey(
rh.Statut, related_name='+', null=True, blank=True,
salaire_anterieur = models.DecimalField(
max_digits=12, decimal_places=2, null=True, default=None,
blank=True, verbose_name=u'Salaire précédent')
- devise_anterieur = models.ForeignKey(rh.Devise, related_name='+',
- null=True, blank=True)
- type_contrat_anterieur = models.ForeignKey(rh.TypeContrat,
- related_name='+', null=True, blank=True,
- verbose_name=u'Type contrat antérieur', )
+ devise_anterieur = models.ForeignKey(
+ rh.Devise, related_name='+', null=True, blank=True
+ )
+ type_contrat_anterieur = models.ForeignKey(
+ rh.TypeContrat, related_name='+', null=True, blank=True,
+ verbose_name=u'Type contrat antérieur'
+ )
# Données du titulaire précédent
employe_anterieur = models.ForeignKey(
salaire_titulaire_anterieur = models.DecimalField(
max_digits=12, decimal_places=2, default=None, null=True,
blank=True, verbose_name=u'Salaire titulaire précédent')
- devise_titulaire_anterieur = models.ForeignKey(rh.Devise, related_name='+', null=True, blank=True)
+ devise_titulaire_anterieur = models.ForeignKey(
+ rh.Devise, related_name='+', null=True, blank=True
+ )
# Rémunération
salaire = models.DecimalField(max_digits=13, decimal_places=2,
help_text=HELP_TEXT_DATE)
# Justifications
- justif_nouveau_statut_label = u'Justifier le statut que ce type de poste nécessite (national, expatrié, màd ou détachement)'
- justif_nouveau_statut = models.TextField(verbose_name=justif_nouveau_statut_label, null=True, blank=True)
- justif_nouveau_tmp_remplacement_label = u"Si l'employé effectue un remplacement temporaire, préciser"
- justif_nouveau_tmp_remplacement = models.TextField(verbose_name=justif_nouveau_tmp_remplacement_label, null=True, blank=True)
- justif_nouveau_salaire_label = u"Si le salaire de l'employé ne correspond pas au classement du poste ou est différent du salaire antérieur, justifier "
- justif_nouveau_salaire = models.TextField(verbose_name=justif_nouveau_salaire_label, null=True, blank=True)
+ justif_nouveau_statut_label = u'Justifier le statut que ce type ' \
+ u'de poste nécessite (national, expatrié, màd ou détachement)'
+ justif_nouveau_statut = models.TextField(
+ verbose_name=justif_nouveau_statut_label, null=True, blank=True
+ )
+ justif_nouveau_tmp_remplacement_label = u"Si l'employé effectue un " \
+ u"remplacement temporaire, préciser"
+ justif_nouveau_tmp_remplacement = models.TextField(
+ verbose_name=justif_nouveau_tmp_remplacement_label, null=True,
+ blank=True
+ )
+ justif_nouveau_salaire_label = u"Si le salaire de l'employé ne " \
+ u"correspond pas au classement du poste ou est différent " \
+ u"du salaire antérieur, justifier "
+ justif_nouveau_salaire = models.TextField(
+ verbose_name=justif_nouveau_salaire_label, null=True, blank=True
+ )
justif_nouveau_commentaire_label = u"COMMENTAIRES ADDITIONNELS"
- justif_nouveau_commentaire = models.TextField(verbose_name=justif_nouveau_commentaire_label, null=True, blank=True)
- justif_rempl_type_contrat_label = u"Changement de type de contrat, ex : d'un CDD en CDI"
- justif_rempl_type_contrat = models.TextField(verbose_name=justif_rempl_type_contrat_label, null=True, blank=True)
- justif_rempl_statut_employe_label = u"Si le statut de l'employé a été modifié pour ce poste ; ex :national, expatrié, màd, détachement ? Si oui, justifier"
- justif_rempl_statut_employe = models.TextField(verbose_name=justif_rempl_statut_employe_label, null=True, blank=True)
- justif_rempl_evaluation_label = u"L'évaluation de l'employé est-elle favorable? Préciser"
- justif_rempl_evaluation = models.TextField(verbose_name=justif_rempl_evaluation_label, null=True, blank=True)
- justif_rempl_salaire_label = u"Si le salaire de l'employé est modifié et/ou ne correspond pas à son classement, justifier"
- justif_rempl_salaire = models.TextField(verbose_name=justif_rempl_salaire_label, null=True, blank=True)
+ justif_nouveau_commentaire = models.TextField(
+ verbose_name=justif_nouveau_commentaire_label, null=True, blank=True
+ )
+ justif_rempl_type_contrat_label = \
+ u"Changement de type de contrat, ex : d'un CDD en CDI"
+ justif_rempl_type_contrat = models.TextField(
+ verbose_name=justif_rempl_type_contrat_label, null=True, blank=True
+ )
+ justif_rempl_statut_employe_label = \
+ u"Si le statut de l'employé a été modifié pour ce poste ; " \
+ u"ex : national, expatrié, màd, détachement ? Si oui, justifier"
+ justif_rempl_statut_employe = models.TextField(
+ verbose_name=justif_rempl_statut_employe_label, null=True, blank=True
+ )
+ justif_rempl_evaluation_label = \
+ u"L'évaluation de l'employé est-elle favorable? Préciser"
+ justif_rempl_evaluation = models.TextField(
+ verbose_name=justif_rempl_evaluation_label, null=True, blank=True
+ )
+ justif_rempl_salaire_label = \
+ u"Si le salaire de l'employé est modifié et/ou ne correspond " \
+ u"pas à son classement, justifier"
+ justif_rempl_salaire = models.TextField(
+ verbose_name=justif_rempl_salaire_label, null=True, blank=True
+ )
justif_rempl_commentaire_label = u"COMMENTAIRES ADDITIONNELS"
- justif_rempl_commentaire = models.TextField(verbose_name=justif_rempl_commentaire_label, null=True, blank=True)
+ justif_rempl_commentaire = models.TextField(
+ verbose_name=justif_rempl_commentaire_label, null=True, blank=True
+ )
# Comptes
compte_compta = models.CharField(max_length=10, default='aucun',
compte_courriel = models.BooleanField()
# DAE numérisée
- dae_numerisee = models.FileField(upload_to='dae/dae_numerisee', storage=UPLOAD_STORAGE,
- blank=True, null=True, verbose_name="DAE numérisée")
+ dae_numerisee = models.FileField(
+ upload_to='dae/dae_numerisee', storage=UPLOAD_STORAGE, blank=True,
+ null=True, verbose_name="DAE numérisée"
+ )
# Managers
objects = DossierManager()
def __init__(self, *args, **kwargs):
- # Bouchon pour créer une date fictive necessaire pour valider un dossier
- # à cause de l'héritage
+ # Bouchon pour créer une date fictive necessaire pour valider un
+ # dossier à cause de l'héritage
super(rh.Dossier_, self).__init__(*args, **kwargs)
super(DossierWorkflow, self).__init__(*args, **kwargs)
import datetime
self.date_debut = datetime.datetime.today()
def __unicode__(self):
- return u'[%s] %s - %s' % (self.poste.implantation, self.poste.nom, self.employe)
+ return u'[%s] %s - %s' % (
+ self.poste.implantation, self.poste.nom, self.employe
+ )
- def importer(self, verbosity=0, dry_run=False):
- copieur = DossierCopier(verbosity=verbosity, dry_run=dry_run)
- return copieur.copy(self)
+ def dans_rh(self):
+ """
+ Retourne le dossier associé dans le système RH ou ``None`` s'il n'y
+ en a pas.
+ """
+ if self.dossier_rh:
+ return self.dossier_rh
+ today = date.today()
+ poste_rh = self.poste.dans_rh()
+ if poste_rh is None:
+ return None
+ employe_rh = self.employe.dans_rh()
+ if employe_rh is None:
+ return None
+ try:
+ return rh.Dossier.objects.get(
+ Q(date_debut=None) | Q(date_debut__lte=today),
+ Q(date_fin=None) | Q(date_fin__gte=today),
+ poste=poste_rh,
+ employe=employe_rh
+ )
+ except rh.Dossier.DoesNotExist:
+ return None
+
+ def importer_dans_rh(self):
+ """
+ Importe les données du dossier DAE dans un dossier RH existant ou
+ nouveau.
+ """
+ poste_rh = self.poste.importer_dans_rh()
+ employe_rh = self.employe.importer_dans_rh()
+ dossier_rh = self.dans_rh() or \
+ rh.Dossier(poste=poste_rh, employe=employe_rh)
+
+ dossier_rh.statut = self.statut
+ dossier_rh.organisme_bstg = self.organisme_bstg
+ dossier_rh.remplacement = self.remplacement
+ dossier_rh.remplacement_de = self.remplacement_de
+ dossier_rh.statut_residence = self.statut_residence
+ dossier_rh.classement = self.classement
+ dossier_rh.regime_travail = self.regime_travail
+ dossier_rh.regime_travail_nb_heure_semaine = \
+ self.regime_travail_nb_heure_semaine
+ dossier_rh.date_debut = self.date_debut
+ dossier_rh.date_fin = self.date_fin
+ dossier_rh.save()
+
+ rh.DossierComparaison.objects.filter(dossier=dossier_rh).delete()
+ for comp in self.dae_comparaisons.all():
+ dossier_rh.rh_comparaisons.create(
+ implantation=comp.implantation,
+ poste=comp.poste,
+ personne=comp.personne,
+ montant=comp.montant,
+ devise=comp.devise
+ )
+
+ if not dossier_rh.rh_contrats.filter(
+ type_contrat=self.type_contrat,
+ date_debut=self.contrat_date_debut,
+ date_fin=self.contrat_date_fin
+ ).exists():
+ dossier_rh.rh_contrats.create(
+ type_contrat=self.type_contrat,
+ date_debut=self.contrat_date_debut,
+ date_fin=self.contrat_date_fin,
+ )
+
+ for piece in self.dae_dossierpieces.all():
+ piece_rh = dossier_rh.rh_dossierpieces.create(
+ nom=piece.nom
+ )
+ piece_rh.fichier.save(
+ os.path.basename(piece.fichier.name), piece.fichier
+ )
+
+ # Fermer les rémunérations qui commencent avant le début du contrat
+ dossier_rh.rh_remunerations.filter(
+ Q(date_debut=None) | Q(date_debut__lt=self.contrat_date_debut),
+ Q(date_fin=None) | Q(date_fin__gte=self.contrat_date_debut)
+ ).update(date_fin=self.contrat_date_debut - timedelta(1))
+
+ # Effacer les rémunérations qui commencent à la date du contrat
+ dossier_rh.rh_remunerations \
+ .filter(date_debut=self.contrat_date_debut) \
+ .delete()
+
+ for remun in self.dae_remunerations.all():
+ dossier_rh.rh_remunerations.get_or_create(
+ type=remun.type,
+ type_revalorisation=remun.type_revalorisation,
+ montant=remun.montant,
+ devise=remun.devise,
+ commentaire=remun.commentaire,
+ date_debut=self.contrat_date_debut,
+ date_fin=self.contrat_date_fin
+ )
+
+ # Enregistrer le lien avec le dossier RH
+ self.dossier_rh = dossier_rh
+ self.save()
+
+ return dossier_rh
def get_salaire_anterieur_euros(self):
if self.devise_anterieur is None:
return None
return int(round(float(self.salaire_anterieur) * float(taux), 2))
-
def get_salaire_titulaire_anterieur_euros(self):
if self.devise_titulaire_anterieur is None:
return None
return e
if not taux:
return None
- return int(round(float(self.salaire_titulaire_anterieur) * float(taux), 2))
+ return int(round(
+ float(self.salaire_titulaire_anterieur) * float(taux), 2
+ ))
def valide(self):
return self.etat in (DOSSIER_ETAT_REGION_FINALISATION,
if not reversion.is_registered(Dossier):
reversion.register(Dossier)
+
class DossierPiece(rh.DossierPiece_):
"""Documents relatifs au Dossier (à l'occupation de ce poste par employé).
Ex.: Lettre de motivation.
"""
pass
+
class DossierComparaison(rh.DossierComparaison_):
"""
Photo d'une comparaison salariale au moment de l'embauche.
"""
- statut = models.ForeignKey(rh.Statut, related_name='+', verbose_name='Statut', null=True, blank=True, )
- classement = models.ForeignKey(rh.Classement, related_name='+', verbose_name='Classement', null=True, blank=True, )
+ statut = models.ForeignKey(
+ rh.Statut, related_name='+', verbose_name='Statut', null=True,
+ blank=True
+ )
+ classement = models.ForeignKey(
+ rh.Classement, related_name='+', verbose_name='Classement',
+ null=True, blank=True
+ )
### RÉMUNÉRATION
class Remuneration(rh.Remuneration_):
pass
+
### CONTRATS
class Contrat(rh.Contrat_):
pass
-
-
-class DossierFinalise(Dossier):
-
- objects = DossierFinaliseManager()
-
- class Meta:
- proxy = True
- verbose_name = "Import d'un dossier dans RH"
- verbose_name_plural = "Import des dossiers dans RH"
-
-class PosteFinalise(Poste):
-
- objects = PosteFinaliseManager()
-
- class Meta:
- proxy = True
- verbose_name = "Import d'un poste dans RH"
- verbose_name_plural = "Import des postes dans RH"
-
-# modèle de liaison entre les systèmes
-
-class ImportDossier(models.Model):
- dae = models.ForeignKey('dae.Dossier', related_name='+')
- rh = models.ForeignKey('rh.Dossier', related_name='+')
-
-class ImportPoste(models.Model):
- dae = models.ForeignKey('dae.Poste', related_name='+')
- rh = models.ForeignKey('rh.Poste', related_name='+')
--- /dev/null
+{% extends 'base.html' %}
+
+{% block title %}RH - DAE - Importation{% endblock %}
+{% block titre %}Ressources humaines{% endblock %}
+{% block sous_titre %}Demande d'autorisation d'engagement{% endblock %}
+
+{% block main %}
+<h1 class="gauche">Importation d'une DAE</h1>
+
+<p>Vous vous apprêtez à importer le dossier <strong>{{ dossier }}</strong> dans
+le système RH.</p>
+
+<ul>
+ {% if dossier.employe.dans_rh %}
+ <li>L'employé <strong>{{ dossier.employe }}</strong> existe déjà dans le
+ système RH.</li>
+ {% else %}
+ <li>L'employé <strong>{{ dossier.employe }}</strong> n'existe pas dans le
+ système RH et sera donc créé.</li>
+ {% endif %}
+ {% if dossier.poste.dans_rh %}
+ <li>Le poste <strong>{{ dossier.poste }}</strong> existe déjà dans le système
+ RH et sera mis à jour.</li>
+ {% else %}
+ <li>Le poste <strong>{{ dossier.poste }}</strong> n'existe pas dans le
+ système RH et sera donc créé.</li>
+ {% endif %}
+ {% if dossier.dans_rh %}
+ <li>Le dossier <strong>{{ dossier }}</strong> existe déjà dans le système RH
+ et sera mis à jour.</li>
+ {% else %}
+ <li>Le dossier <strong>{{ dossier }}</strong> n'existe pas dans le système RH
+ et sera donc créé.</li>
+ {% endif %}
+</ul>
+
+<form method="post">
+ <input type="submit" name="confirmer" value="Continuer">
+ <input type="submit" value="Annuler">
+</form>
+{% endblock %}
{% sort_header "personne" "Personne" %}
{% sort_header "debut_contrat" "Début du contrat" %}
{% sort_header "fin_contrat" "Fin du contrat" %}
+ <th></th>
</tr>
</thead>
<tbody>
<td><a href="{% url embauche_consulter dossier.id %}">{{ dossier.employe }}</a></td>
<td>{{ dossier.contrat_date_debut|date:"d-m-Y" }}</td>
<td>{{ dossier.contrat_date_fin|date:"d-m-Y" }}</td>
+ <td>
+ {% if not dossier.dossier_rh %}
+ <a href="{% url embauche_importer dossier.id %}">Importer</a></td>
+ {% endif %}
+ </td>
</tr>
{% endfor %}
</tbody>
# -*- encoding: utf-8 -*
-from django.conf.urls.defaults import patterns, url, include
+from django.conf.urls.defaults import patterns, url
urlpatterns = patterns(
'project.dae.views',
# poste
url(r'^postes$', 'postes_liste', name='dae_postes_liste'),
- url(r'^poste/consulter/(?P<key>.*)$', 'poste_consulter', name='poste_consulter'),
+ url(r'^poste/consulter/(?P<key>.*)$', 'poste_consulter',
+ name='poste_consulter'),
url(r'^poste$', 'poste', name='poste'),
url(r'^poste/(?P<key>.*)$', 'poste', name='poste'),
url(r'^pieces-postes/(\d+)/(.*)$', 'poste_piece', name='poste_piece'),
# embauche
url(r'^embauches$', 'embauches_liste', name='dae_embauches_liste'),
- url(r'^embauches-finalisees$', 'embauches_finalisees', name='embauches_finalisees'),
+ url(r'^embauches-finalisees$', 'embauches_finalisees',
+ name='embauches_finalisees'),
url(r'^embauche$', 'embauche_choisir_poste', name='embauche'),
- url(r'^embauche/consulter/(?P<dossier_id>.*)$', 'embauche_consulter', name='embauche_consulter'),
- url(r'^embauche/(?P<key>.*)/(?P<dossier_id>.*)$', 'embauche', name='embauche'),
+ url(r'^embauche/consulter/(?P<dossier_id>.*)$', 'embauche_consulter',
+ name='embauche_consulter'),
+ url(r'^embauche/importer/(?P<dossier_id>.*)$', 'embauche_importer',
+ name='embauche_importer'),
+ url(r'^embauche/(?P<key>.*)/(?P<dossier_id>.*)$', 'embauche',
+ name='embauche'),
url(r'^embauche/(?P<key>.*)$', 'embauche', name='embauche'),
# contrats
- url(r'^embauches/(?P<dossier_id>\d+)/contrats/ajouter$', 'embauche_ajouter_contrat',
- name='embauche_ajouter_contrat'),
+ url(r'^embauches/(?P<dossier_id>\d+)/contrats/ajouter$',
+ 'embauche_ajouter_contrat', name='embauche_ajouter_contrat'),
url(r'^contrats/(\d+)/fichier/(.*)$', 'contrat', name='contrat'),
- url(r'^contrats/(\d+)/supprimer$', 'contrat_supprimer', name='contrat_supprimer'),
+ url(r'^contrats/(\d+)/supprimer$', 'contrat_supprimer',
+ name='contrat_supprimer'),
# DAE numérisée
- url(r'^embauches/(\d+)/dae_numerisee$', 'dae_numerisee', name='dae_numerisee'),
+ url(r'^embauches/(\d+)/dae_numerisee$', 'dae_numerisee',
+ name='dae_numerisee'),
url(r'^embauches/(\d+)/dae_numerisee/modifier$', 'dae_numerisee_modifier',
name='dae_numerisee_modifier'),
- url(r'^embauches/(\d+)/dae_numerisee/supprimer$', 'dae_numerisee_supprimer',
- name='dae_numerisee_supprimer'),
-
- url(r'^importer$', 'importer_choix_dossier', name='importer_dae'),
+ url(r'^embauches/(\d+)/dae_numerisee/supprimer$',
+ 'dae_numerisee_supprimer', name='dae_numerisee_supprimer'),
# ajax
url(r'^employe$', 'employe', name='employe'),
url(r'^employe/(?P<key>.*)$', 'employe', name='employe'),
url(r'^dossier$', 'dossier', name='dossier'),
- url(r'^dossier/(?P<poste_key>.*)/(?P<employe_key>.*)$', 'dossier', name='dossier'),
- url(r'^pieces-dossiers/(\d+)/(.*)$', 'dossier_piece', name='dossier_piece'),
- url(r'^dossier_resume/(?P<dossier_id>.*)$', 'dossier_resume', name='dossier_resume'),
- url(r'^poste_resume/(?P<dossier_id>.*)$', 'poste_resume', name='poste_resume'),
+ url(r'^dossier/(?P<poste_key>.*)/(?P<employe_key>.*)$', 'dossier',
+ name='dossier'),
+ url(r'^pieces-dossiers/(\d+)/(.*)$', 'dossier_piece',
+ name='dossier_piece'),
+ url(r'^dossier_resume/(?P<dossier_id>.*)$', 'dossier_resume',
+ name='dossier_resume'),
+ url(r'^poste_resume/(?P<dossier_id>.*)$', 'poste_resume',
+ name='poste_resume'),
url(r'^salaire$', 'salaire', name='salaire'),
url(r'^salaire/(.*)/(.*)/(.*)$', 'salaire', name='salaire'),
url(r'^coefficient$', 'coefficient', name='dae_coefficient'),
- url(r'^liste_valeurs_point$', 'liste_valeurs_point', name='liste_valeurs_point'),
+ url(r'^liste_valeurs_point$', 'liste_valeurs_point',
+ name='liste_valeurs_point'),
url(r'^liste_postes$', 'liste_postes', name='liste_postes'),
url(r'^devise$', 'devise', name='dae_devise'),
url(r'^devises$', 'devises', name='devises'),
from datetime import date
from simplejson import dumps
+from auf.django.permissions.decorators import get_object
+from django.contrib import messages
+from django.contrib.auth.decorators import login_required
+from django.contrib.contenttypes.models import ContentType
from django.core.exceptions import MultipleObjectsReturned
from django.core.paginator import Paginator, InvalidPage
+from django.db.models import Q
from django.http import Http404, HttpResponse, HttpResponseGone
from django.shortcuts import redirect, render_to_response, get_object_or_404
from django.template import RequestContext
-from django.contrib import messages
-from django.contrib.auth.decorators import login_required
-from django.contrib.contenttypes.models import ContentType
-
from sendfile import sendfile
-from auf.django.permissions.decorators import get_object
-
-from dae import models as dae
-from dae.forms import *
-from dae.workflow import DOSSIER_ETAT_FINALISE, DOSSIER_ETAT_REGION_FINALISATION, \
- DOSSIER_ETAT_DRH_FINALISATION, POSTE_ETAT_FINALISE
-from dae.decorators import redirect_interdiction, dae_groupe_requis, \
+from project.dae import models as dae
+from project.dae.decorators import \
+ redirect_interdiction, dae_groupe_requis, \
poste_dans_ma_region_ou_service, \
dossier_dans_ma_region_ou_service, \
vieux_dossier_dans_ma_region_ou_service, \
employe_dans_ma_region_ou_service, \
dossier_est_modifiable, \
poste_est_modifiable, get_contrat
-from dae.mail import send_drh_finalisation_mail
-from rh import models as rh
+from project.dae.forms import \
+ PosteWorkflowForm, PosteForm, FinancementForm, PostePieceForm, \
+ PosteComparaisonFormSet, DossierWorkflowForm, ChoosePosteForm, \
+ EmployeForm, DossierForm, DossierPieceForm, \
+ DossierComparaisonFormSet, RemunForm, ContratForm, DAENumeriseeForm, \
+ label_poste_display
+from project.dae.mail import send_drh_finalisation_mail
+from project.dae.workflow import \
+ DOSSIER_ETAT_FINALISE, DOSSIER_ETAT_REGION_FINALISATION, \
+ DOSSIER_ETAT_DRH_FINALISATION, POSTE_ETAT_FINALISE
+from project.rh import models as rh
def devises():
liste.append(data)
return liste
+
@dae_groupe_requis
def index(request):
return render_to_response('dae/index.html', {}, RequestContext(request))
poste = get_object_or_404(dae.Poste, pk=id)
if request.POST:
- validationForm = PosteWorkflowForm(request.POST, instance=poste, request=request)
+ validationForm = PosteWorkflowForm(
+ request.POST, instance=poste, request=request
+ )
if validationForm.is_valid():
validationForm.save()
- messages.add_message(request, messages.SUCCESS, "La validation a été enregistrée.")
+ messages.add_message(
+ request, messages.SUCCESS, "La validation a été enregistrée."
+ )
return redirect('dae_postes_liste')
else:
validationForm = PosteWorkflowForm(instance=poste, request=request)
- comparaisons_internes = poste.dae_comparaisons_internes.ma_region_ou_service(request.user)
+ comparaisons_internes = \
+ poste.dae_comparaisons_internes.ma_region_ou_service(request.user)
vars = {
'poste': poste,
'validationForm': validationForm,
'comparaisons_internes': comparaisons_internes
}
- return render_to_response('dae/poste_consulter.html', vars, RequestContext(request))
+ return render_to_response(
+ 'dae/poste_consulter.html', vars, RequestContext(request)
+ )
+
@dae_groupe_requis
@poste_dans_ma_region_ou_service
data.update(dict(request.POST.items()))
form = PosteForm(data, instance=poste, request=request)
financementForm = FinancementForm(request.POST, instance=poste)
- piecesForm = PostePieceForm(request.POST, request.FILES, instance=poste)
+ piecesForm = PostePieceForm(
+ request.POST, request.FILES, instance=poste
+ )
if isinstance(poste, dae.Poste):
comparaisons_formset = PosteComparaisonFormSet(
request.POST,
- queryset=poste.dae_comparaisons_internes.ma_region_ou_service(request.user)
+ queryset=poste.dae_comparaisons_internes.ma_region_ou_service(
+ request.user
+ )
)
else:
comparaisons_formset = PosteComparaisonFormSet(
request.POST,
queryset=dae.PosteComparaison.objects.none()
)
- if form.is_valid() and piecesForm.is_valid() and financementForm.is_valid() and \
- comparaisons_formset.is_valid():
+ if form.is_valid() and piecesForm.is_valid() and \
+ financementForm.is_valid() and comparaisons_formset.is_valid():
poste = form.save()
piecesForm.instance = poste
piecesForm.save()
comparaison.poste = poste
comparaison.save()
- messages.add_message(request, messages.SUCCESS, "Le poste %s a été sauvegardé." % poste)
- if request.POST.has_key('save'):
+ messages.add_message(
+ request, messages.SUCCESS,
+ "Le poste %s a été sauvegardé." % poste
+ )
+ if 'save' in request.POST:
return redirect('poste_consulter', key='dae-%s' % poste.id)
else:
return redirect('poste', key='dae-%s' % poste.id)
else:
- messages.add_message(request, messages.ERROR, 'Il y a des erreurs dans le formulaire.')
+ messages.add_message(
+ request, messages.ERROR,
+ 'Il y a des erreurs dans le formulaire.'
+ )
else:
# 'initial' évite la validation prémature lors d'une copie de poste de
financementForm = FinancementForm(instance=poste)
if isinstance(poste, dae.Poste):
comparaisons_formset = PosteComparaisonFormSet(
- queryset=poste.dae_comparaisons_internes.ma_region_ou_service(request.user)
+ queryset=poste.dae_comparaisons_internes.ma_region_ou_service(
+ request.user
+ )
)
else:
comparaisons_formset = PosteComparaisonFormSet(
return render_to_response('dae/poste.html', vars, RequestContext(request))
+
@dae_groupe_requis
def postes_liste(request):
""" Liste des postes. """
content_type = ContentType.objects.get_for_model(dae.Poste)
extra_select = {'derniere_validation': (
"SELECT MAX(date) FROM workflow_workflowcommentaire "
- "WHERE content_type_id = '%s' AND object_id = dae_poste.id" % content_type.id
+ "WHERE content_type_id = '%s' AND object_id = dae_poste.id" %
+ content_type.id
)}
postes_a_traiter = dae.Poste.objects.mes_choses_a_faire(request.user) \
.extra(select=extra_select).order_by('-date_creation')
postes_en_cours = dae.Poste.objects.ma_region_ou_service(request.user) \
- .extra(select=extra_select).filter(~Q(etat=POSTE_ETAT_FINALISE)).order_by('-date_creation')
+ .extra(select=extra_select) \
+ .filter(~Q(etat=POSTE_ETAT_FINALISE)) \
+ .order_by('-date_creation')
return render_to_response('dae/postes_liste.html', {
'postes_a_traiter': postes_a_traiter,
'postes_en_cours': postes_en_cours,
}, RequestContext(request))
+
@login_required
def poste_piece(request, id, filename):
"""Téléchargement d'une pièce jointe à un poste."""
piece = get_object_or_404(dae.PostePiece, pk=id)
- if dae.Poste.objects.ma_region_ou_service(request.user).filter(id=piece.poste_id).exists():
+ if dae.Poste.objects.ma_region_ou_service(request.user) \
+ .filter(id=piece.poste_id).exists():
return sendfile(request, piece.fichier.path)
else:
return redirect_interdiction(request)
### DOSSIER
def filtered_type_remun():
- defaut = (2, 3, 8, 17) # salaire de base, indemnité de fonction, charges patronales
+ defaut = (2, 3, 8, 17) # salaire de base, indemnité de fonction,
+ # charges patronales
return rh.TypeRemuneration.objects.filter(pk__in=defaut)
+
@dae_groupe_requis
@dossier_dans_ma_region_ou_service
def embauche_consulter(request, dossier_id):
etat_precedent = dossier.etat
if request.POST:
- validationForm = DossierWorkflowForm(request.POST, instance=dossier, request=request)
+ validationForm = DossierWorkflowForm(
+ request.POST, instance=dossier, request=request
+ )
if validationForm.is_valid():
if etat_precedent == DOSSIER_ETAT_REGION_FINALISATION and \
- validationForm.cleaned_data['etat'] == DOSSIER_ETAT_DRH_FINALISATION:
+ validationForm.cleaned_data['etat'] == \
+ DOSSIER_ETAT_DRH_FINALISATION:
send_drh_finalisation_mail(request, dossier)
validationForm.save()
- messages.add_message(request, messages.SUCCESS, "La validation a été enregistrée.")
+ messages.add_message(
+ request, messages.SUCCESS, "La validation a été enregistrée."
+ )
return redirect('dae_embauches_liste')
else:
validationForm = DossierWorkflowForm(instance=dossier, request=request)
- comparaisons_internes = dossier.poste.dae_comparaisons_internes.ma_region_ou_service(request.user)
+ comparaisons_internes = \
+ dossier.poste.dae_comparaisons_internes.ma_region_ou_service(
+ request.user
+ )
comparaisons = dossier.dae_comparaisons.ma_region_ou_service(request.user)
vars = {
'dossier': dossier,
'comparaisons': comparaisons
}
- mode = request.GET.get('mode', None)
- return render_to_response('dae/embauche_consulter.html', vars, RequestContext(request))
+ return render_to_response(
+ 'dae/embauche_consulter.html', vars, RequestContext(request)
+ )
+
+
+@dae_groupe_requis
+@dossier_dans_ma_region_ou_service
+def embauche_importer(request, dossier_id=None):
+ dossier_dae = get_object_or_404(dae.Dossier, id=dossier_id)
+ if request.method == 'POST':
+ if 'confirmer' in request.POST:
+ dossier_rh = dossier_dae.importer_dans_rh()
+ return redirect('admin:rh_dossier_change', dossier_rh.id)
+ else:
+ return redirect('embauches_finalisees')
+ else:
+ return render_to_response('dae/embauche_importer.html', {
+ 'dossier': dossier_dae
+ }, RequestContext(request))
+
@dae_groupe_requis
def embauche_choisir_poste(request):
'form': ChoosePosteForm(request=request)
}, RequestContext(request))
+
@dae_groupe_requis
@dossier_dans_ma_region_ou_service
@dossier_est_modifiable
else:
raise Http404
- employe_form = EmployeForm(request.POST, instance=employe, request=request)
+ employe_form = EmployeForm(
+ request.POST, instance=employe, request=request
+ )
if employe_form.is_valid():
data = dict(request.POST.items())
dossier.employe = employe_form.instance
dossier_form = DossierForm(request.POST, instance=dossier)
- piecesForm = DossierPieceForm(request.POST, request.FILES, instance=dossier)
+ piecesForm = DossierPieceForm(
+ request.POST, request.FILES, instance=dossier
+ )
comparaisons_formset = DossierComparaisonFormSet(
request.POST,
- queryset=dossier.dae_comparaisons.ma_region_ou_service(request.user)
+ queryset=dossier.dae_comparaisons.ma_region_ou_service(
+ request.user
+ )
)
remunForm = RemunForm(request.POST, instance=dossier)
comparaison.dossier = dossier
comparaison.save()
- messages.success(request, "Le dossier %s a été sauvegardé." % dossier)
- if request.POST.has_key('save'):
+ messages.success(
+ request, "Le dossier %s a été sauvegardé." % dossier
+ )
+ if 'save' in request.POST:
return redirect('embauche_consulter', dossier_id=dossier.id)
else:
- return redirect('embauche', key=dossier.poste.key, dossier_id=dossier.id)
+ return redirect(
+ 'embauche', key=dossier.poste.key, dossier_id=dossier.id
+ )
else:
- messages.add_message(request, messages.ERROR, 'Il y a des erreurs dans le formulaire.')
+ messages.add_message(
+ request, messages.ERROR,
+ 'Il y a des erreurs dans le formulaire.'
+ )
else:
# Initialisation d'un formulaire vide
dossier = get_object_or_404(dae.Dossier, pk=dossier_id)
employe = dossier.employe
data = dict(employe='dae-%s' % employe.id)
- employe_form = EmployeForm(initial=data, instance=employe, request=request)
+ employe_form = EmployeForm(
+ initial=data, instance=employe, request=request
+ )
else:
dossier_rh = rh.Dossier()
poste_rh = poste.id_rh
dossier_form = DossierForm(instance=dossier)
piecesForm = DossierPieceForm(instance=dossier)
comparaisons_formset = DossierComparaisonFormSet(
- queryset=dossier.dae_comparaisons.ma_region_ou_service(request.user)
+ queryset=dossier.dae_comparaisons.ma_region_ou_service(
+ request.user
+ )
)
remunForm = RemunForm(instance=dossier)
try:
- comparaisons_internes = dossier.poste.dae_comparaisons_internes.ma_region_ou_service(
- request.user
- )
+ comparaisons_internes = \
+ dossier.poste.dae_comparaisons_internes.ma_region_ou_service(
+ request.user
+ )
except dae.Poste.DoesNotExist:
comparaisons_internes = []
'comparaisons_internes': comparaisons_internes
}, RequestContext(request))
+
@dae_groupe_requis
@dossier_dans_ma_region_ou_service
def embauches_liste(request):
content_type = ContentType.objects.get_for_model(dae.Dossier)
extra_select = {'derniere_validation': (
"SELECT MAX(date) FROM workflow_workflowcommentaire "
- "WHERE content_type_id = '%s' AND object_id = dae_dossier.id" % content_type.id
+ "WHERE content_type_id = '%s' AND object_id = dae_dossier.id" %
+ content_type.id
)}
- embauches_a_traiter = dae.Dossier.objects.mes_choses_a_faire(request.user) \
+ embauches_a_traiter = dae.Dossier.objects \
+ .mes_choses_a_faire(request.user) \
.extra(select=extra_select).order_by('-date_creation')
- embauches_en_cours = dae.Dossier.objects.ma_region_ou_service(request.user) \
- .extra(select=extra_select).order_by('-date_creation').exclude(etat=DOSSIER_ETAT_FINALISE)
+ embauches_en_cours = dae.Dossier.objects \
+ .ma_region_ou_service(request.user) \
+ .extra(select=extra_select) \
+ .order_by('-date_creation') \
+ .exclude(etat=DOSSIER_ETAT_FINALISE)
return render_to_response('dae/embauches_liste.html', {
'embauches_a_traiter': embauches_a_traiter,
'embauches_en_cours': embauches_en_cours,
}, RequestContext(request))
+
@dae_groupe_requis
def embauches_finalisees(request):
"""Liste des embauches finalisées."""
else:
dir = ''
if tri == 'region':
- embauches = embauches.order_by(dir + 'poste__implantation__region__nom')
+ embauches = embauches.order_by(
+ dir + 'poste__implantation__region__nom'
+ )
elif tri == 'implantation':
embauches = embauches.order_by(dir + 'poste__implantation__nom')
elif tri == 'poste':
'embauches': page
}, RequestContext(request))
+
def employe(request, key):
""" Récupération AJAX de l'employé pour la page d'embauche. """
data = dict(employe=key)
for field in ('prenom', 'nom', 'genre'):
setattr(employe, field, getattr(e, field))
- return HttpResponse(EmployeForm(initial=data, instance=employe, request=request).as_table())
+ return HttpResponse(
+ EmployeForm(initial=data, instance=employe, request=request).as_table()
+ )
+
### CONTRATS
def contrat(request, contrat, filename):
return sendfile(request, contrat.fichier.path)
+
@dae_groupe_requis
@get_contrat
def contrat_supprimer(request, contrat):
'contrat': contrat
}, RequestContext(request))
+
@dae_groupe_requis
@dossier_dans_ma_region_ou_service
def embauche_ajouter_contrat(request, dossier_id=None):
'form': form
}, RequestContext(request))
+
### DAE NUMERISEE
@get_object(dae.Dossier, 'consulter')
def dae_numerisee(request, dossier):
return sendfile(request, dossier.dae_numerisee.path)
+
@get_object(dae.Dossier, 'modifier_dae_numerisee')
def dae_numerisee_modifier(request, dossier):
if request.method == 'POST':
'form': form
}, RequestContext(request))
+
@get_object(dae.Dossier, 'modifier_dae_numerisee')
def dae_numerisee_supprimer(request, dossier):
if request.method == 'POST':
dossier.dae_numerisee = None
dossier.save()
return redirect('embauche_consulter', dossier_id=dossier.id)
- return render_to_response('dae/dae_numerisee_supprimer.html', {}, RequestContext(request))
+ return render_to_response(
+ 'dae/dae_numerisee_supprimer.html', {}, RequestContext(request)
+ )
+
-################################################################################
# AJAX SECURISE
-################################################################################
+
@dae_groupe_requis
@employe_dans_ma_region_ou_service
def dossier(request, poste_key, employe_key):
# Récupérer la devise de l'implantation lié au poste
implantation_devise = poste.get_default_devise()
- data.update({'devise' : implantation_devise})
+ data.update({'devise': implantation_devise})
if poste.id_rh_id is not None:
poste_rh = get_object_or_404(rh.Poste, pk=poste.id_rh_id)
else:
poste_rh = None
- ##########################################################################################
# NOUVEL EMPLOYE
- ##########################################################################################
if employe_key == '':
employe_source = 'new'
employe = None
dossier_rh = rh.Dossier()
dossier = pre_filled_dossier(dossier_rh, employe_source, poste_rh)
- ##########################################################################################
# EMPLOYE DAE
- ##########################################################################################
if employe_key.startswith('dae'):
- employe_source, employe_id = employe_key.split('-')
- employe_dae = get_object_or_404(dae.Employe, pk=employe_id)
-
- # récupération de l'ancien dossier rh v1 pour l'employe DAE
- try:
- dossier_rh = rh.Dossier.objects.get(employe=employe_dae.id_rh_id, date_fin=None)
- except (rh.Dossier.DoesNotExist):
- dossier_rh = rh.Dossier()
-
- # on tente de récupérer le dossier DAE, au pire on le contruit en le
- # prépoluant avec son dossier rh v1.
- try:
- dossier = dae.Dossier.objects.get(employe=employe_dae, poste=poste)
- except (dae.Dossier.DoesNotExist):
- dossier = pre_filled_dossier(dossier_rh, employe_source, poste_rh)
- employe = employe_dae.id_rh
- ##########################################################################################
+ employe_source, employe_id = employe_key.split('-')
+ employe_dae = get_object_or_404(dae.Employe, pk=employe_id)
+
+ # récupération de l'ancien dossier rh v1 pour l'employe DAE
+ try:
+ dossier_rh = rh.Dossier.objects.get(
+ employe=employe_dae.id_rh_id, date_fin=None
+ )
+ except (rh.Dossier.DoesNotExist):
+ dossier_rh = rh.Dossier()
+
+ # on tente de récupérer le dossier DAE, au pire on le contruit en le
+ # prépoluant avec son dossier rh v1.
+ try:
+ dossier = dae.Dossier.objects.get(employe=employe_dae, poste=poste)
+ except (dae.Dossier.DoesNotExist):
+ dossier = pre_filled_dossier(dossier_rh, employe_source, poste_rh)
+ employe = employe_dae.id_rh
+
# EMPLOYE RH v1
- ##########################################################################################
if employe_key.startswith('rh'):
- employe_source, employe_id = employe_key.split('-')
- employe_rh = get_object_or_404(rh.Employe, pk=employe_id)
-
- # récupération de l'ancien dossier rh v1 pour l'employe rh v1, s'il n'en a pas,
- # on en fournit un nouveau qui servira uniquement un créer un nouveau dossier DAE.
- try:
- dossier_rh = rh.Dossier.objects.get(employe=employe_rh, date_fin=None)
- except (rh.Dossier.DoesNotExist):
- dossier_rh = rh.Dossier()
- dossier = pre_filled_dossier(dossier_rh, employe_source, poste_rh)
- employe = employe_rh
+ employe_source, employe_id = employe_key.split('-')
+ employe_rh = get_object_or_404(rh.Employe, pk=employe_id)
+
+ # récupération de l'ancien dossier rh v1 pour l'employe rh v1, s'il
+ # n'en a pas, on en fournit un nouveau qui servira uniquement un
+ # créer un nouveau dossier DAE.
+ try:
+ dossier_rh = rh.Dossier.objects.get(
+ employe=employe_rh, date_fin=None
+ )
+ except (rh.Dossier.DoesNotExist):
+ dossier_rh = rh.Dossier()
+ dossier = pre_filled_dossier(dossier_rh, employe_source, poste_rh)
+ employe = employe_rh
dossier_form = DossierForm(initial=data, instance=dossier)
vars = dict(form=dossier_form, poste=poste, employe=employe)
return render_to_response('dae/embauche-dossier.html', vars,
RequestContext(request))
-# @Cette fonction est appelée à partir de fonctions déjà sécurisée
+
+# Cette fonction est appelée à partir de fonctions déjà sécurisée
def pre_filled_dossier(dossier_rh, employe_source, poste_rh):
dossier = dae.Dossier()
dossier.classement_anterieur = dossier_rh.classement
# Récupération du salaire de base
- remun = dossier_rh.remunerations().filter(type=1).order_by('-date_debut')
+ remun = dossier_rh.remunerations() \
+ .filter(type=1).order_by('-date_debut')
if remun:
dossier.salaire_anterieur = remun[0].montant
dossier.devise_anterieur = remun[0].devise
dossier.employe_anterieur = titulaire
dossier.classement_titulaire_anterieur = d.classement
dossier.statut_titulaire_anterieur = d.statut
- remun = d.remunerations().filter(type=1).order_by('-date_debut')[0]
+ remun = d.remunerations().filter(type=1) \
+ .order_by('-date_debut')[0]
dossier.salaire_titulaire_anterieur = remun.montant
dossier.devise_titulaire_anterieur = remun.devise
except:
return dossier
+
@dae_groupe_requis
@vieux_dossier_dans_ma_region_ou_service
def dossier_resume(request, dossier_id=None):
if dossier.statut is not None:
data['statut'] = dossier.statut.id
data['implantation'] = dossier.poste.implantation.id
- data['poste'] = u"%s %s" % (dossier.poste.type_poste.nom, dossier.poste.nom)
+ data['poste'] = u"%s %s" % (
+ dossier.poste.type_poste.nom, dossier.poste.nom
+ )
salaire = dossier.get_salaire()
if salaire is not None:
data['montant'] = float(salaire.montant)
data['montant_euros'] = 0
return HttpResponse(dumps(data))
+
@dae_groupe_requis
@vieux_dossier_dans_ma_region_ou_service
def poste_resume(request, dossier_id=None):
salaire = dossier.get_salaire()
data = {}
data['implantation'] = dossier.poste.implantation.id
- data['poste'] = u"%s %s" % (dossier.poste.type_poste.nom, dossier.poste.nom)
+ data['poste'] = u"%s %s" % (
+ dossier.poste.type_poste.nom, dossier.poste.nom
+ )
if salaire is not None:
data['devise'] = salaire.devise.id
data['montant'] = float(salaire.montant)
data['classement'] = dossier.classement_id
return HttpResponse(dumps(data))
+
def liste_postes(request):
""" Appel AJAX :
input : implantation_id
data = []
# Voir le code de _poste_choices dans forms.py
- copies = dae.Poste.objects.exclude(id_rh__isnull=True).filter(etat=POSTE_ETAT_FINALISE)
+ copies = dae.Poste.objects.exclude(id_rh__isnull=True) \
+ .filter(etat=POSTE_ETAT_FINALISE)
rh_postes_actifs = rh.Poste.objects.all()
- if 'implantation_id' in params and params.get('implantation_id') is not u"":
+ if 'implantation_id' in params \
+ and params.get('implantation_id') is not u"":
implantation_id = params.get('implantation_id')
copies = copies.filter(implantation__id=implantation_id)
- rh_postes_actifs = rh_postes_actifs.filter(implantation__id=implantation_id)
+ rh_postes_actifs = rh_postes_actifs.filter(
+ implantation__id=implantation_id
+ )
id_copies = [p.id_rh_id for p in copies.all()]
rhv1 = rh_postes_actifs.exclude(id__in=id_copies)
rhv1 = rhv1.select_related(depth=1)
- data = [('', 'Nouveau poste')] + sorted([('rh-%s' % p.id, label_poste_display(p)) for p in rhv1], key=lambda t: t[1])
+ data = [('', 'Nouveau poste')] + \
+ sorted([('rh-%s' % p.id, label_poste_display(p)) for p in rhv1],
+ key=lambda t: t[1])
return HttpResponse(dumps(data))
+
@login_required
def dossier_piece(request, id, filename):
"""Téléchargement d'une pièce jointe à un poste."""
piece = get_object_or_404(dae.DossierPiece, pk=id)
- if dae.Dossier.objects.ma_region_ou_service(request.user).filter(id=piece.dossier_id).exists():
+ if dae.Dossier.objects.ma_region_ou_service(request.user) \
+ .filter(id=piece.dossier_id).exists():
return sendfile(request, piece.fichier.path)
else:
return redirect_interdiction(request)
-@login_required
-def importer_choix_dossier(request):
- method = request.method
- params = getattr(request, method, None)
- if params:
- form = DAEImportableForm(params)
- if form.is_valid():
- form.importer_poste()
- messages.add_message(request, messages.SUCCESS, "L'importation a réussie.")
- else:
- form = DAEImportableForm()
-
- vars = dict(form=form, )
- return render_to_response('admin/dae/importer_choix_dossier.html', vars,
- RequestContext(request))
-################################################################################
# AJAX SECURITE non nécessaire
-################################################################################
+
def coefficient(request):
""" Appel AJAX :
input : classement
valeur_point = rh.ValeurPoint.objects.get(pk=valeur_point)
annee = valeur_point.annee
try:
- taux = rh.TauxChange.objects.get(annee=annee, devise=valeur_point.devise)
+ taux = rh.TauxChange.objects.get(
+ annee=annee, devise=valeur_point.devise
+ )
except MultipleObjectsReturned:
- return HttpResponseGone(u"Il existe plusieurs taux pour la devise %s cette année-là : %s" % \
- (valeur_point.devise.code, annee))
+ return HttpResponseGone(
+ u"Il existe plusieurs taux pour la devise %s "
+ u"cette année-là : %s" % (valeur_point.devise.code, annee)
+ )
data['devise'] = taux.devise.id
data['valeur'] = valeur_point.valeur
return HttpResponseGone("Vous devez choisir une valeur de point")
return HttpResponse(dumps(data))
+
def devise_code(request):
""" Appel AJAX :
input : devise
data['taux_euro'] = taux[0].taux
return HttpResponse(dumps(data))
+
def add_remun(request, dossier, type_remun):
dossier = get_object_or_404(dae.Dossier, pk=dossier)
type_remun = get_object_or_404(rh.TypeRemuneration, pk=type_remun)
return render_to_response('dae/embauche-remun.html', dict(dossier=dossier),
RequestContext(request))
+
def salaire(request, implantation, devise, classement):
if not devise or not classement:
raise Http404
taux = rh.TauxChange.objects.filter(devise=devise).order_by('-annee')
- vp = rh.ValeurPoint.objects.filter(implantation=implantation, devise=devise) \
- .order_by('-annee')
+ vp = rh.ValeurPoint.objects \
+ .filter(implantation=implantation, devise=devise) \
+ .order_by('-annee')
if vp.count() == 0:
raise Exception(u"pas de valeur de point pour le couple\
return HttpResponse(dumps(data))
+
def liste_valeurs_point(request):
""" Appel AJAX :
input : implantation_id
params = getattr(request, method, [])
data = []
annee_courante = datetime.datetime.now().year
- if 'implantation_id' in params and params.get('implantation_id') is not u"":
+ if 'implantation_id' in params \
+ and params.get('implantation_id') is not u"":
implantation_id = params.get('implantation_id')
- preselectionne = rh.ValeurPoint.objects.filter(implantation=implantation_id, annee__in=(annee_courante,)).order_by("-annee")
+ preselectionne = rh.ValeurPoint.objects \
+ .filter(implantation=implantation_id, annee=annee_courante) \
+ .order_by("-annee")
for o in preselectionne:
- data.append({'id' : o.id, 'label' : o.__unicode__(), 'devise' : o.devise_id, 'suggestion' : True})
+ data.append({
+ 'id': o.id,
+ 'label': o.__unicode__(),
+ 'devise': o.devise_id,
+ 'suggestion': True
+ })
else:
preselectionne = rh.ValeurPoint.objects.none()
- liste_complete = rh.ValeurPoint.objects.filter(annee__in=(annee_courante,)).order_by("-annee")
+ liste_complete = rh.ValeurPoint.objects \
+ .filter(annee__in=(annee_courante,)) \
+ .order_by("-annee")
for o in liste_complete.exclude(id__in=[p.id for p in preselectionne]):
- data.append({'id' : o.id, 'label' : o.__unicode__(), 'devise' : o.devise_id, 'suggestion' : False})
+ data.append({
+ 'id': o.id,
+ 'label': o.__unicode__(),
+ 'devise': o.devise_id,
+ 'suggestion': False
+ })
return HttpResponse(dumps(data, indent=4))
"""
from django.utils.translation import ugettext_lazy as _
-from django.core.urlresolvers import reverse
from admin_tools.dashboard import modules, Dashboard, AppIndexDashboard
from admin_tools.utils import get_admin_site_name
Custom index dashboard for SIGMA.
"""
def init_with_context(self, context):
- site_name = get_admin_site_name(context)
# append an app list module for "Applications"
self.children.append(modules.AppList(
def _dae(self, d):
apercu_link = ""
- if dae.ImportDossier.objects.filter(rh=d).exists():
- dae_id = dae.ImportDossier.objects.get(rh=d).dae_id
+ dossiers_dae = d.dossiers_dae.all()
+ if len(dossiers_dae) > 0:
+ dossier_dae = dossiers_dae[0]
apercu_link = u"""<a title="Aperçu du dossier"
onclick="return showAddAnotherPopup(this);"
href='%s'>
<img src="%simg/loupe.png" />
</a>""" % \
- (reverse('embauche_consulter', args=(dae_id,)),
+ (reverse('embauche_consulter', args=(dossier_dae.id,)),
settings.STATIC_URL,
)
return apercu_link
def _dae(self, poste):
apercu_link = ""
- if dae.ImportPoste.objects.filter(rh=poste).exists():
- dae_id = dae.ImportPoste.objects.get(rh=poste).dae_id
- apercu_link = u"""<a title="Aperçu du dossier"
- onclick="return showAddAnotherPopup(this);"
- href='%s'>
- <img src="%simg/loupe.png" />
- </a>""" % \
- (reverse('poste_consulter', args=("dae-%s" % dae_id,)),
- settings.STATIC_URL,
- )
+ postes_dae = poste.postes_dae.all()
+ if len(postes_dae) > 0:
+ poste_dae = postes_dae[0]
+ apercu_link = \
+ u'<a title="Aperçu du dossier" href="%s" ' \
+ u'onclick="return showAddAnotherPopup(this);">' \
+ u'<img src="%simg/loupe.png" /></a>' % (reverse(
+ 'poste_consulter', args=("dae-%s" % poste_dae.id,)
+ ), settings.STATIC_URL)
return apercu_link
_dae.allow_tags = True
_dae.short_description = u"DAE"
Ajouter Dossier
</a>
</li>
- {% comment %}
- <li>
- <a href="{% url importer_dae %}" class="addlink">
- Importer une DAE
- </a>
- </li>
- {% endcomment %}
{% endblock %}
{% block search %}
<li class="{% menu_actif request '^embauches_finalisees$' %}">
<a href="{% url embauches_finalisees %}">Embauches finalisées</a>
</li>
- {% if request.user|peut_importer %}
- <li>
- <a href="{% url admin:dae_dossierfinalise_changelist %}">Importation des embauches</a>
- </li>
- {% endif %}
- {% if request.user|peut_importer %}
- <li>
- <a href="{% url admin:dae_postefinalise_changelist %}">Importation des postes</a>
- </li>
- {% endif %}
</ul>
- </li>
- {% endif %}
+ </li>
+ {% endif %}
{% if perms.rh %}
<li>