poste import + liens dans RH
authorOlivier Larchevêque <olivier.larcheveque@auf.org>
Mon, 26 Mar 2012 15:35:03 +0000 (11:35 -0400)
committerOlivier Larchevêque <olivier.larcheveque@auf.org>
Mon, 26 Mar 2012 15:35:03 +0000 (11:35 -0400)
project/dae/admin.py
project/dae/exporter.py
project/dae/managers.py
project/dae/models.py
project/rh/admin.py

index d5bee3b..27fd94a 100644 (file)
@@ -7,7 +7,7 @@ from django.contrib import messages
 from django.shortcuts import redirect
 from reversion.admin import VersionAdmin
 from auf.django.workflow.models import WorkflowCommentaire
 from django.shortcuts import redirect
 from reversion.admin import VersionAdmin
 from auf.django.workflow.models import WorkflowCommentaire
-from models import Poste, Dossier, DossierFinalise
+from models import Poste, Dossier, DossierFinalise, PosteFinalise
 
 class PosteAdmin(VersionAdmin):
     list_display = ('nom', 'implantation', 'etat', )
 
 class PosteAdmin(VersionAdmin):
     list_display = ('nom', 'implantation', 'etat', )
@@ -92,24 +92,7 @@ class DossierStatutAdmin(VersionAdmin):
         form.user = request.user
         return form
 
         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
+class ImportAdmin(admin.ModelAdmin,):
 
     def has_delete_permission(self, request, obj=None):
         return False
 
     def has_delete_permission(self, request, obj=None):
         return False
@@ -124,10 +107,37 @@ class ImportDossierAdmin(admin.ModelAdmin):
             return False
 
     def get_actions(self, request):
             return False
 
     def get_actions(self, request):
-        actions = super(ImportDossierAdmin, self).get_actions(request)
+        actions = super(ImportAdmin, self).get_actions(request)
         del actions['delete_selected']
         return actions
 
         del actions['delete_selected']
         return actions
 
+
+class ImportDossierAdmin(ImportAdmin):
+    list_display = ('_poste', '_employe', '_dae', )
+    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
+
+    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)
         dae = [d for d in Dossier.objects.filter(id__in=selected)]
     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)]
@@ -138,7 +148,31 @@ class ImportDossierAdmin(admin.ModelAdmin):
             url = reverse('admin:rh_dossier_change', args=(copie.id, ))
             return redirect(url)
 
             url = reverse('admin:rh_dossier_change', args=(copie.id, ))
             return redirect(url)
 
+
+class ImportPosteAdmin(ImportAdmin):
+    list_display = ('nom', '_implantation', '_dae', )
+    actions = ['importer_dans_RH', ]
+
+    def _implantation(self, obj):
+        return obj.implantation
+
+    def _dae(self, obj):
+        url = reverse('poste_consulter', args=(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)
+        dae = [d for d in Poste.objects.filter(id__in=selected)]
+        for p in dae:
+            copie = p.importer()
+            messages.add_message(request, messages.SUCCESS, u"%s importé dans\
+                    RH" % d)
+            url = reverse('admin:rh_poste_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)
 admin.site.register(Poste, PosteAdmin)
 admin.site.register(Dossier, DossierAdmin)
 admin.site.register(ProxyDossierStatut, DossierStatutAdmin)
 admin.site.register(DossierFinalise, ImportDossierAdmin)
+admin.site.register(PosteFinalise, ImportPosteAdmin)
index b7dae20..5b64c0f 100644 (file)
@@ -192,11 +192,11 @@ class DossierCopier(SuperCopier):
             return
 
         if dae.ImportPoste.objects.filter(dae=value).exists():
             return
 
         if dae.ImportPoste.objects.filter(dae=value).exists():
-            poste = dae.ImportPoste.get(dae=value).rh
+            poste = dae.ImportPoste.objects.get(dae=value).rh
         else:
             copier = PosteCopier(verbosity=self.verbosity,
                     dry_run=self.dry_run)
         else:
             copier = PosteCopier(verbosity=self.verbosity,
                     dry_run=self.dry_run)
-            poste = copier.duplicate(value)
+            poste = copier.copy(value)
         copy.poste_id = poste.id
 
     def clean_fichier(self, source, copy, parent, field, value):
         copy.poste_id = poste.id
 
     def clean_fichier(self, source, copy, parent, field, value):
index 5ae8204..dabe062 100644 (file)
@@ -3,7 +3,8 @@
 from django.db import models
 from django.db.models import Q
 from utils import get_employe_from_user
 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, DOSSIER_ETAT_FINALISE
+from workflow import MAP_GROUPE_ETATS_A_FAIRE, DOSSIER_ETAT_FINALISE, \
+                        POSTE_ETAT_FINALISE
 from workflow import grp_drh, \
                      grp_drh2, \
                      grp_accior, \
 from workflow import grp_drh, \
                      grp_drh2, \
                      grp_accior, \
@@ -60,9 +61,23 @@ class DossierFinaliseManager(models.Manager):
     def get_query_set(self):
         from dae.models import ImportDossier
         dae_importees = [str(i.dae_id) for i in ImportDossier.objects.all()]
     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().filter(etat=DOSSIER_ETAT_FINALISE,).extra(where=['id\
-                    NOT IN (%s)' % ", ".join(dae_importees)])
+        qs = super(DossierFinaliseManager, self).get_query_set().filter(etat=DOSSIER_ETAT_FINALISE,)
+        if len(dae_importees) > 0:
+            qs = qs.extra(where=['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().filter(etat=POSTE_ETAT_FINALISE,)
+        if len(dae_importees) > 0:
+            qs = qs.extra(where=['id NOT IN (%s)' % ", ".join(dae_importees)])
         return qs
 
 
         return qs
 
 
index 348d757..b70e001 100644 (file)
@@ -78,6 +78,15 @@ class Poste(PosteWorkflow, rh.Poste_):
             return []
         return self.id_rh.rh_dossiers.all()
 
             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 importer(self, verbosity=0, dry_run=False):
+        copieur = PosteCopier(verbosity=verbosity, dry_run=dry_run)
+        return copieur.copy(self)
 
     def get_employe(self):
         """
 
     def get_employe(self):
         """
@@ -574,6 +583,15 @@ class DossierFinalise(Dossier):
         verbose_name = "Import d'un dossier finalisé"
         verbose_name_plural = "Import des dossiers finalisés"
 
         verbose_name = "Import d'un dossier finalisé"
         verbose_name_plural = "Import des dossiers finalisés"
 
+class PosteFinalise(Poste):
+
+    objects = PosteFinaliseManager()
+
+    class Meta:
+        proxy = True
+        verbose_name = "Import d'un poste finalisé"
+        verbose_name_plural = "Import des postes finalisés"
+
 # modèle de liaison entre les systèmes
 
 class ImportDossier(models.Model):
 # modèle de liaison entre les systèmes
 
 class ImportDossier(models.Model):
index 9434399..96b228a 100644 (file)
@@ -13,6 +13,7 @@ from auf.django.metadata.admin import AUFMetadataAdminMixin, \
                                       AUF_METADATA_READONLY_FIELDS
 from forms import ContratForm, AyantDroitForm, EmployeAdminForm, AjaxSelect, \
 DossierForm
                                       AUF_METADATA_READONLY_FIELDS
 from forms import ContratForm, AyantDroitForm, EmployeAdminForm, AjaxSelect, \
 DossierForm
+from dae import models as dae
 from dae.utils import get_employe_from_user
 from change_list import ChangeList
 from groups import grp_correspondants_rh
 from dae.utils import get_employe_from_user
 from change_list import ChangeList
 from groups import grp_correspondants_rh
@@ -314,6 +315,7 @@ class DossierAdmin(DateRangeMixin, AUFMetadataAdminMixin, \
         '_date_fin',
         '_date_modification',
         'user_modification',
         '_date_fin',
         '_date_modification',
         'user_modification',
+        '_dae',
     )
     list_display_links = ('_nom',)
     list_filter = (
     )
     list_display_links = ('_nom',)
     list_filter = (
@@ -394,6 +396,22 @@ class DossierAdmin(DateRangeMixin, AUFMetadataAdminMixin, \
     _apercu.allow_tags = True
     _apercu.short_description = u""
 
     _apercu.allow_tags = True
     _apercu.short_description = u""
 
+    def _dae(self, d):
+        apercu_link = ""
+        if dae.ImportDossier.objects.filter(rh=d).exists():
+            dae_id = dae.ImportDossier.objects.get(rh=d).dae_id
+            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,)),
+                     settings.STATIC_URL,
+                     )
+        return apercu_link
+    _dae.allow_tags = True
+    _dae.short_description = u"DAE"
+
     def _date_debut(self, obj):
         return date(obj.date_debut)
 
     def _date_debut(self, obj):
         return date(obj.date_debut)
 
@@ -696,6 +714,7 @@ class PosteAdmin(DateRangeMixin, AUFMetadataAdminMixin, \
         'date_fin',
         '_date_modification',
         'user_modification',
         'date_fin',
         '_date_modification',
         'user_modification',
+        '_dae',
         )
     list_filter = (
         'implantation__region',
         )
     list_filter = (
         'implantation__region',
@@ -789,6 +808,22 @@ class PosteAdmin(DateRangeMixin, AUFMetadataAdminMixin, \
     _apercu.allow_tags = True
     _apercu.short_description = ''
 
     _apercu.allow_tags = True
     _apercu.short_description = ''
 
+    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,
+                     )
+        return apercu_link
+    _dae.allow_tags = True
+    _dae.short_description = u"DAE"
+
     def _id(self, obj):
         return "%s" % obj.id
     _id.short_description = '#'
     def _id(self, obj):
         return "%s" % obj.id
     _id.short_description = '#'