# -*- encoding: utf-8 -*-
-from django.contrib import admin
from django import forms
+from django.core.urlresolvers import reverse
+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
+from models import Poste, Dossier, DossierFinalise
class PosteAdmin(VersionAdmin):
list_display = ('nom', 'implantation', 'etat', )
form.user = request.user
return form
+
+class ImportDossierAdmin(admin.ModelAdmin):
+ list_display = ('_poste', '_employe', '_dae', )
+ actions = ['importer_dans_RH', ]
+
+ def _employe(self, obj):
+ return obj.employe
+
+ def _poste(self, obj):
+ return obj.poste.nom
+
+ def _implantation(self, obj):
+ return obj.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 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):
+ if obj is None:
+ return True
+ else:
+ return False
+
+ def get_actions(self, request):
+ actions = super(ImportDossierAdmin, self).get_actions(request)
+ del actions['delete_selected']
+ return actions
+
+ def importer_dans_RH(self, request, data):
+ selected = request.POST.getlist(admin.ACTION_CHECKBOX_NAME)
+ dae = [d for d in Dossier.objects.filter(id__in=selected)]
+ for d in dae:
+ copie = d.importer()
+ messages.add_message(request, messages.SUCCESS, u"%s importé dans\
+ RH" % d)
+ url = reverse('admin:rh_dossier_change', args=(copie.id, ))
+ return redirect(url)
+
admin.site.register(Poste, PosteAdmin)
admin.site.register(Dossier, DossierAdmin)
admin.site.register(ProxyDossierStatut, DossierStatutAdmin)
+admin.site.register(DossierFinalise, ImportDossierAdmin)
import shutil
from django.conf import settings
-from project.rh import models as rh
+from project.rh import models as rh
+import models as dae
SKIP = "** SKIP **"
self.stdout.write(txt)
def clean_id(self, source, copy, parent, field, value):
- self.out(SKIP, 1)
+ 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)
else:
setattr(copy, f.name, value)
- if not self.dry_run:
- copy.save()
-
for obj_composition in obj._meta._related_objects_cache:
app_label, dummy = obj_composition.name.split(':')
field_name = obj_composition.field.rel.related_name
# 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)
else:
parentship = getattr(self, "parent")
parentship(copy, child_copy)
-
if not self.dry_run:
child_copy.save()
+
return copy
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):
filename = value.path.split('/')[-1]
copy.poste_id = parent.id
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
copy.employe = nouvel_employe
def clean_poste(self, source, copy, parent, field, value):
- copier = PosteCopier(verbosity=self.verbosity, dry_run=self.dry_run)
- poste = copier.duplicate(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.get(dae=value).rh
+ else:
+ copier = PosteCopier(verbosity=self.verbosity,
+ dry_run=self.dry_run)
+ poste = copier.duplicate(value)
copy.poste_id = poste.id
def clean_fichier(self, source, copy, parent, field, value):
dst = os.path.join(settings.PRIVE_MEDIA_ROOT, new_value)
shutil.copy(src, dst)
setattr(copy, field.name, new_value)
-
-
from django.core.management.base import BaseCommand
from project.dae import models as dae
-from project.dae import exporter
class Command(BaseCommand):
return
- dry_run = True
- if len(args) >= 3 and args[2] == "run":
- dry_run = False
-
- verbosity = 0
- if len(args) >= 4:
- verbosity = int(args[3])
-
- class_copier = getattr(exporter, "%sCopier" % classname.title())
- copier = class_copier(verbosity=verbosity, dry_run=dry_run)
-
- copy = copier.duplicate(obj)
- self.stdout.write(u"\n[%s] DAE:%s => RH:%s\n" % (obj.__class__.__name__, obj.id, copy.id))
+ copy = obj.importer()
+ self.stdout.write(u"\n[%s] DAE:%s => RH:%s\n" %
+ (obj.__class__.__name__, obj.id, copy.id))
from django.db import models
from django.db.models import Q
from utils import get_employe_from_user
-from workflow import MAP_GROUPE_ETATS_A_FAIRE
-from workflow import dae_groupes, \
- grp_administrateurs, \
- grp_directeurs_bureau, \
- grp_drh, \
+from workflow import MAP_GROUPE_ETATS_A_FAIRE, DOSSIER_ETAT_FINALISE
+from workflow import grp_drh, \
grp_drh2, \
grp_accior, \
grp_abf, \
grp_haute_direction, \
- grp_service_utilisateurs, \
- grp_correspondants_rh
+ grp_service_utilisateurs
from rh.managers import DossierManager as RHDossierManager
from rh.managers import PosteManager as RHPosteManager
class DossierComparaisonManager(RHDossierComparaisonManager, TodoManagerMixin):
pass
+class DossierFinaliseManager(models.Manager):
+ def get_query_set(self):
+ qs = super(DossierFinaliseManager,
+ self).get_query_set().filter(etat=DOSSIER_ETAT_FINALISE)
+ return qs
+
+
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)
# Managers
objects = PosteManager()
-
- def est_importe(self):
- """Test si le poste a déjà été importé"""
- return ImportPoste.objects.filter(dae=self).exists()
-
- def importer(self):
- if self.est_importe():
- return ImportPoste.objects.get(dae=self)
- rh_poste = rh.Poste()
- # Faire une copie profonde de l'objet.
- # PosteFinancement, PosteComparaison, Remun modele a ajuster...
-
- def copy_model(src, dst, exclude=[]):
- keys = [f.name for f in src._meta.fields if f.name not in ['id', ] + exclude]
- for k in keys:
- setattr(dst, k, getattr(src, k))
- return dst
-
- rh_poste = copy_model(self, rh_poste)
- rh_poste.save()
- print rh_poste.id
-
- for o in self.dae_financements.all():
- rh_financement = rh.PosteFinancement()
- rh_financement = copy_model(o, rh_financement, exclude=['poste',])
- rh_financement.poste = rh_poste
- rh_financement.save()
-
- for o in self.dae_pieces.all():
- rh_piece = rh.PostePiece()
- rh_piece = copy_model(o, rh_piece, exclude=['poste',])
- rh_piece.poste = rh_poste
- rh_piece.save()
-
- for o in self.dae_comparaisons_internes.all():
- rh_comp = rh.PosteComparaison()
- rh_comp = copy_model(o, rh_financement, exclude=['poste',])
- rh_comp.poste = rh_poste
- rh_comp.save()
-
- return rh_poste
+ def importer(self, verbosity=0, dry_run=False):
+ copieur = PosteCopier(verbosity=verbosity, dry_run=dry_run)
+ return copieur.duplicate(self)
def _get_key(self):
"""
def __unicode__(self):
return u'[%s] %s - %s' % (self.poste.implantation, self.poste.nom, self.employe)
- def est_importe(self):
- """Test si le dossier a déjà été importé"""
- return dae.ImportDossier.objects.filter(dae=self).exists()
-
- def importer(self):
- if not self.poste.est_importe():
- raise Exception('Le poste de cette DAE doît être importé')
- return True
+ def importer(self, verbosity=0, dry_run=False):
+ copieur = DossierCopier(verbosity=verbosity, dry_run=dry_run)
+ return copieur.duplicate(self)
def get_salaire_anterieur_euros(self):
if self.devise_anterieur is None:
class Contrat(rh.Contrat_):
pass
+
+class DossierFinalise(Dossier):
+
+ objects = DossierFinaliseManager()
+
+ class Meta:
+ proxy = True
+ verbose_name = "Import d'un dossier finalisé"
+ verbose_name_plural = "Import des dossiers finalisés"
+
# modèle de liaison entre les systèmes
class ImportDossier(models.Model):