fields = ('etat', )
-class StatutAdmin(BaseAdmin, VersionAdmin):
+class StatutAdmin(BaseAdmin):
action = None
def has_delete_permission(self, request, obj=None):
from project.groups import \
is_user_dans_services_centraux, is_user_dans_region
+dae_groupes = (
+ grp_correspondants_rh,
+ grp_administrateurs,
+ grp_directeurs_bureau,
+ grp_drh,
+ grp_drh2,
+ grp_accior,
+ grp_abf,
+ grp_haute_direction,
+ grp_service_utilisateurs,
+)
+
# codes états
POSTE_ETAT_BROUILLON = 'BROUILLON'
POSTE_ETAT_ADMINISTRATEUR = 'ADMINISTRATEUR'
import textwrap
+from auf.django.emploi.models import OffreEmploi, Candidat, CandidatPiece
+from auf.django.references.models import Region, Bureau
from django.conf import settings
from django.contrib import admin
from django.core.urlresolvers import reverse
from django.shortcuts import redirect
from reversion.admin import VersionAdmin
-from auf.django.emploi.models import OffreEmploi, Candidat, CandidatPiece
-from auf.django.references.models import Region, Bureau
-
from project.groups import get_employe_from_user as get_emp
from project.rh import models as rh
-
from project.recrutement.forms import OffreEmploiForm
from project.recrutement.groups import \
grp_drh, grp_drh2, \
Evaluateur, CandidatEvaluation, \
ProxyOffreEmploi, ProxyCandidat, MesCandidatEvaluation, \
CourrielTemplate
-
### CONSTANTES
IMPLANTATIONS_CENTRALES = [15, 19]
return qs
-class OffreEmploiAdmin(BaseAdmin, VersionAdmin):
+class OffreEmploiAdminMixin(BaseAdmin):
date_hierarchy = 'date_creation'
list_display = (
'nom', 'date_limite', 'region', 'statut', 'est_affiche',
return False
-class ProxyOffreEmploiAdmin(OffreEmploiAdmin):
+class OffreEmploiAdmin(VersionAdmin, OffreEmploiAdminMixin):
+ pass
+
+
+class ProxyOffreEmploiAdmin(OffreEmploiAdminMixin):
list_display = (
'nom', 'date_limite', 'region', 'statut', 'est_affiche'
)
return self.readonly_fields
-class CandidatAdmin(BaseAdmin, VersionAdmin):
+class CandidatAdminMixin(BaseAdmin):
search_fields = ('nom', 'prenom')
exclude = ('actif', )
list_editable = ('statut', )
return qs.none()
-class ProxyCandidatAdmin(CandidatAdmin):
+class CandidatAdmin(VersionAdmin, CandidatAdminMixin):
+ pass
+
+
+class ProxyCandidatAdmin(CandidatAdminMixin):
list_editable = ()
readonly_fields = (
'statut', 'offre_emploi', 'prenom', 'nom', 'genre', 'nationalite',
# -*- encoding: utf-8 -*-
+from auf.django.emploi import models as emploi
from django.contrib import messages
from django.core.mail import EmailMultiAlternatives
from django.core.urlresolvers import reverse
from django.template import Context, Template
from django.views.static import serve
-from auf.django.emploi import models as emploi
-
from project.decorators import redirect_interdiction
-
from project.recrutement import forms
from project.recrutement import models
from project.recrutement.groups import recrutement_groupes
def index(request):
- c = {}
- return render(request, 'recrutement/index.html', c)
+ return render(request, 'recrutement/index.html')
def selectionner_template(request):
else:
form = forms.CandidatCourrielTemplateForm()
- c = {
- 'form': form,
- }
- return render(request, "recrutement/selectionner_template.html", c)
+ return render(request, "recrutement/selectionner_template.html", {
+ 'form': form
+ })
def envoyer_courriel_candidats(request):
'plain_text': template.plain_text
}
)
- c = {
- 'form': form,
- }
- return render(request, "recrutement/envoyer_courriel_candidats.html", c)
+ return render(request, "recrutement/envoyer_courriel_candidats.html", {
+ 'form': form
+ })
def affecter_evaluateurs_offre_emploi(request):
return redirect("admin:recrutement_proxyoffreemploi_changelist")
else:
form = forms.EvaluateurForm(offres_emploi=offres_emploi)
- c = {
- 'form': form,
- }
- return render(request, "recrutement/affecter_evaluateurs.html", c)
+ return render(request, "recrutement/affecter_evaluateurs.html", {
+ 'form': form
+ })
def send_templated_email(candidat, template):
def candidat_pdf(request):
candidat_id = request.GET.get('id')
candidat = models.Candidat.objects.get(id=candidat_id)
- c = {
- 'candidat': candidat,
- }
- return render(request, "recrutement/candidat_pdf.html", c)
+ return render(request, "recrutement/candidat_pdf.html", {
+ 'candidat': candidat
+ })
import datetime
+import reversion
+from ajax_select import make_ajax_form
+from auf.django.metadata.admin import \
+ AUFMetadataAdminMixin, AUFMetadataInlineAdminMixin, \
+ AUF_METADATA_READONLY_FIELDS
+from auf.django.references import models as ref
from django.core.urlresolvers import reverse
from django.contrib import admin
from django.conf import settings
from django.db.models import Q, Count
from django.template.defaultfilters import date
-from ajax_select import make_ajax_form
-
-from auf.django.metadata.admin import \
- AUFMetadataAdminMixin, AUFMetadataInlineAdminMixin, \
- AUF_METADATA_READONLY_FIELDS
-import auf.django.references.models as ref
-
from project.decorators import in_drh_or_admin
from project.groups import grp_correspondants_rh
from project.groups import get_employe_from_user
-
-import project.rh.models as rh
from project.rh.forms import ContratForm, AyantDroitForm, EmployeAdminForm, \
AjaxSelect, DossierForm, ResponsableInlineForm
-
+from project.rh import models as rh
from project.rh.change_list import ChangeList
model = rh.PosteComparaison
-class ClassementAdmin(AUFMetadataAdminMixin, BaseAdmin):
+class ClassementAdmin(AUFMetadataAdminMixin, BaseAdmin,
+ reversion.VersionAdmin):
list_display = ('_classement', '_date_modification', 'user_modification', )
fieldsets = AUFMetadataAdminMixin.fieldsets + (
(None, {
_date_modification.admin_order_field = 'date_modification'
-class DeviseAdmin(AUFMetadataAdminMixin, BaseAdmin, ArchiveMixin):
+class CommentaireAdmin(reversion.VersionAdmin, BaseAdmin):
+ pass
+
+
+class DeviseAdmin(AUFMetadataAdminMixin, reversion.VersionAdmin,
+ ArchiveMixin, BaseAdmin):
list_display = (
'code',
'nom',
class DossierAdmin(DateRangeMixin, AUFMetadataAdminMixin,
- ProtectRegionMixin, BaseAdmin, AjaxSelect):
+ ProtectRegionMixin, BaseAdmin, AjaxSelect,
+ reversion.VersionAdmin):
alphabet_filter = 'employe__nom'
search_fields = (
'id',
instance.save()
-class EmployeAdmin(DateRangeMixin, AUFMetadataAdminMixin,
- ProtectRegionMixin, BaseAdmin):
+class EmployeAdminMixin(DateRangeMixin, AUFMetadataAdminMixin,
+ ProtectRegionMixin, BaseAdmin):
prefixe_recherche_temporelle = "rh_dossiers__"
alphabet_filter = 'nom'
DEFAULT_ALPHABET = u'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
instance.save()
-class EmployeProxyAdmin(EmployeAdmin):
+class EmployeAdmin(reversion.VersionAdmin, EmployeAdminMixin):
+ pass
+
+
+class EmployeProxyAdmin(admin.ModelAdmin, EmployeAdminMixin):
list_display = ('_id', '_apercu', '_nom', '_organigramme')
actions = None
_organigramme.short_description = "Organigramme"
-class CategorieEmploiAdmin(AUFMetadataAdminMixin, BaseAdmin):
+class CategorieEmploiAdmin(AUFMetadataAdminMixin, reversion.VersionAdmin,
+ BaseAdmin):
list_display = ('nom', '_date_modification', 'user_modification', )
inlines = (TypePosteInline,)
fieldsets = AUFMetadataAdminMixin.fieldsets + (
_date_modification.admin_order_field = 'date_modification'
-class OrganismeBstgAdmin(AUFMetadataAdminMixin, BaseAdmin):
+class OrganismeBstgAdmin(AUFMetadataAdminMixin, reversion.VersionAdmin,
+ BaseAdmin):
search_fields = ('nom',)
list_display = (
'nom',
_date_modification.admin_order_field = 'date_modification'
-class PosteAdmin(DateRangeMixin, AUFMetadataAdminMixin,
- ProtectRegionMixin, BaseAdmin, AjaxSelect):
+class PosteAdmin(DateRangeMixin, AUFMetadataAdminMixin, ProtectRegionMixin,
+ reversion.VersionAdmin, AjaxSelect, BaseAdmin):
form = make_ajax_form(rh.Poste, {
'implantation': 'implantations',
'type_poste': 'typepostes',
responsable = ''
try:
- dossier = obj.responsable.rh_dossiers.all().order_by('-date_debut')[0]
+ dossier = obj.responsable.rh_dossiers.all() \
+ .order_by('-date_debut')[0]
employe_id = dossier.employe.id
employe_html = u"""<br />
<a href="%s"
'responsable__employe__prenom',
)
ordering = ('nom',)
-
+
def _region(self, obj):
return obj.region.code
_region.short_description = u"Région"
_region.admin_order_field = 'region__code'
-
+
def _nom(self, obj):
return obj.nom
_nom.short_description = u"Implantation"
_nom.admin_order_field = 'nom'
-
+
def _responsable(self, obj):
try:
employe = obj.responsable.employe
return False
-class ServiceAdmin(AUFMetadataAdminMixin, BaseAdmin, ArchiveMixin):
+class ServiceAdminMixin(AUFMetadataAdminMixin, ArchiveMixin, BaseAdmin):
list_display = (
'nom',
'_archive',
_date_modification.admin_order_field = 'date_modification'
-class ServiceProxyAdmin(ServiceAdmin):
+class ServiceAdmin(reversion.VersionAdmin, ServiceAdminMixin):
+ pass
+
+
+class ServiceProxyAdmin(admin.ModelAdmin, ServiceAdminMixin):
list_display = ('nom', '_organigramme', '_archive', )
actions = None
_organigramme.short_description = "Organigramme"
-class StatutAdmin(AUFMetadataAdminMixin, BaseAdmin):
+class StatutAdmin(AUFMetadataAdminMixin, reversion.VersionAdmin, BaseAdmin):
list_display = ('code', 'nom', '_date_modification', 'user_modification', )
fieldsets = AUFMetadataAdminMixin.fieldsets + (
(None, {
_date_modification.admin_order_field = 'date_modification'
-class TauxChangeAdmin(BaseAdmin):
+class TauxChangeAdmin(reversion.VersionAdmin, BaseAdmin):
list_display = (
'taux',
'devise',
_date_modification.admin_order_field = 'date_modification'
-class TypeContratAdmin(BaseAdmin):
+class TypeContratAdmin(reversion.VersionAdmin, BaseAdmin):
list_display = (
'nom',
'nom_long',
_date_modification.admin_order_field = 'date_modification'
-class TypePosteAdmin(AUFMetadataAdminMixin, BaseAdmin):
+class TypePosteAdmin(AUFMetadataAdminMixin, reversion.VersionAdmin,
+ BaseAdmin):
search_fields = ('nom', 'nom_feminin', )
list_display = (
'nom',
_date_modification.admin_order_field = 'date_modification'
-class TypeRemunerationAdmin(AUFMetadataAdminMixin, BaseAdmin,
- ArchiveMixin):
+class TypeRemunerationAdmin(AUFMetadataAdminMixin, reversion.VersionAdmin,
+ ArchiveMixin, BaseAdmin):
list_display = (
'nom',
'type_paiement',
_date_modification.admin_order_field = 'date_modification'
-class TypeRevalorisationAdmin(AUFMetadataAdminMixin, BaseAdmin):
+class TypeRevalorisationAdmin(AUFMetadataAdminMixin, reversion.VersionAdmin,
+ BaseAdmin):
list_display = ('nom', '_date_modification', 'user_modification', )
fieldsets = AUFMetadataAdminMixin.fieldsets + (
(None, {'fields': ('nom', )}),
_date_modification.admin_order_field = 'date_modification'
-class ValeurPointAdmin(AUFMetadataAdminMixin, BaseAdmin):
+class ValeurPointAdmin(AUFMetadataAdminMixin, reversion.VersionAdmin,
+ BaseAdmin):
list_display = (
'_devise_code',
'_devise_nom',
import StringIO
import time
-from django.db.models import Q, Count
-
from auf.django.references import models as ref
+from django.db.models import Q, Count
from project.rh import ods
from project.rh import models as rh
from datetime import date
from decimal import Decimal
-from django.core.files.storage import FileSystemStorage
-from django.db import models
-from django.db.models import Q
-from django.conf import settings
-
+import reversion
from auf.django.emploi.models import \
GENRE_CHOICES, SITUATION_CHOICES # devrait plutot être dans references
from auf.django.metadata.models import AUFMetadata
from auf.django.metadata.managers import NoDeleteManager
from auf.django.references import models as ref
+from django.core.files.storage import FileSystemStorage
+from django.db import models
+from django.db.models import Q
+from django.conf import settings
from project.rh.change_list import \
RechercheTemporelle, KEY_STATUT, STATUT_ACTIF, STATUT_INACTIF, \
'Devise', db_column='devise_max', null=True, related_name='+'
)
salaire_min = models.DecimalField(
- max_digits=12, decimal_places=2, null=True, default=0
+ max_digits=12, decimal_places=2, null=True, blank=True
)
salaire_max = models.DecimalField(
- max_digits=12, decimal_places=2, null=True, default=0
+ max_digits=12, decimal_places=2, null=True, blank=True
)
indemn_min = models.DecimalField(
- max_digits=12, decimal_places=2, null=True, default=0
+ max_digits=12, decimal_places=2, null=True, blank=True
)
indemn_max = models.DecimalField(
- max_digits=12, decimal_places=2, null=True, default=0
+ max_digits=12, decimal_places=2, null=True, blank=True
)
autre_min = models.DecimalField(
- max_digits=12, decimal_places=2, null=True, default=0
+ max_digits=12, decimal_places=2, null=True, blank=True
)
autre_max = models.DecimalField(
- max_digits=12, decimal_places=2, null=True, default=0
+ max_digits=12, decimal_places=2, null=True, blank=True
)
# Comparatifs de rémunération
.exclude(date_fin__lt=date.today())
]
+reversion.register(Poste, format='xml', follow=[
+ 'rh_financements', 'rh_pieces', 'rh_comparaisons_internes',
+ 'commentaires', 'rh_dossiers'
+])
+
POSTE_FINANCEMENT_CHOICES = (
('A', 'A - Frais de personnel'),
Poste, db_column='poste', related_name='rh_financements'
)
+reversion.register(PosteFinancement, format='xml')
+
class PostePiece_(models.Model):
"""
Poste, db_column='poste', related_name='rh_pieces'
)
+reversion.register(PostePiece, format='xml')
+
class PosteComparaison_(AUFMetadata, DevisableMixin):
"""
objects = NoDeleteManager()
+reversion.register(PosteComparaison, format='xml')
+
class PosteCommentaire(Commentaire):
poste = models.ForeignKey(
Poste, db_column='poste', related_name='commentaires'
)
+reversion.register(PosteCommentaire, format='xml')
### EMPLOYÉ/PERSONNE
"""
objects = EmployeManager()
-
+
# Identification
nom = models.CharField(max_length=255)
prenom = models.CharField(u"prénom", max_length=255)
regions.append(d.poste.implantation.region)
return regions
+reversion.register(Employe, format='xml', follow=[
+ 'pieces', 'commentaires', 'ayantdroits', 'rh_dossiers'
+])
+
class EmployePiece(models.Model):
"""
def __unicode__(self):
return u'%s' % (self.nom)
+reversion.register(EmployePiece, format='xml')
+
class EmployeCommentaire(Commentaire):
employe = models.ForeignKey(
- 'Employe', db_column='employe', related_name='+'
+ 'Employe', db_column='employe', related_name='commentaires'
)
class Meta:
verbose_name = u"Employé commentaire"
verbose_name_plural = u"Employé commentaires"
+reversion.register(EmployeCommentaire, format='xml')
+
LIEN_PARENTE_CHOICES = (
('Conjoint', 'Conjoint'),
regions.append(d.poste.implantation.region)
return regions
+reversion.register(AyantDroit, format='xml', follow=['commentaires'])
+
class AyantDroitCommentaire(Commentaire):
ayant_droit = models.ForeignKey(
- 'AyantDroit', db_column='ayant_droit', related_name='+'
+ 'AyantDroit', db_column='ayant_droit', related_name='commentaires'
)
+reversion.register(AyantDroitCommentaire, format='xml')
+
### DOSSIER
)
)
+reversion.register(Dossier, format='xml', follow=[
+ 'rh_dossierpieces', 'rh_comparaisons', 'rh_remunerations',
+ 'rh_contrats', 'commentaires'
+])
+
class DossierPiece_(models.Model):
"""
Dossier, db_column='dossier', related_name='rh_dossierpieces'
)
+reversion.register(DossierPiece, format='xml')
class DossierCommentaire(Commentaire):
Dossier, db_column='dossier', related_name='commentaires'
)
+reversion.register(DossierCommentaire, format='xml')
+
class DossierComparaison_(models.Model, DevisableMixin):
"""
Dossier, related_name='rh_comparaisons'
)
+reversion.register(DossierComparaison, format='xml')
+
### RÉMUNÉRATION
null=True, blank=True
)
montant = models.DecimalField(
- null=True, blank=True,
- default=0, max_digits=12, decimal_places=2
+ null=True, blank=True, max_digits=12, decimal_places=2
) # Annuel (12 mois, 52 semaines, 364 jours?)
devise = models.ForeignKey('Devise', db_column='devise', related_name='+')
Dossier, db_column='dossier', related_name='rh_remunerations'
)
+reversion.register(Remuneration, format='xml')
+
### CONTRATS
Dossier, db_column='dossier', related_name='rh_contrats'
)
+reversion.register(Contrat, format='xml')
+
### RÉFÉRENCES RH
def __unicode__(self):
return self.nom
+reversion.register(CategorieEmploi, format='xml')
+
class FamilleProfessionnelle(models.Model):
"""
def __unicode__(self):
return self.nom
+reversion.register(FamilleProfessionnelle, format='xml')
+
class TypePoste(AUFMetadata):
"""
def __unicode__(self):
return u'%s' % (self.nom)
+reversion.register(TypePoste, format='xml')
+
+
TYPE_PAIEMENT_CHOICES = (
(u'Régulier', u'Régulier'),
(u'Ponctuel', u'Ponctuel'),
archive = ""
return u'%s %s' % (self.nom, archive)
+reversion.register(TypeRemuneration, format='xml')
+
class TypeRevalorisation(AUFMetadata):
"""
def __unicode__(self):
return u'%s' % (self.nom)
+reversion.register(TypeRevalorisation, format='xml')
+
class Service(AUFMetadata):
"""
archive = ""
return u'%s %s' % (self.nom, archive)
+reversion.register(Service, format='xml')
+
TYPE_ORGANISME_CHOICES = (
('MAD', 'Mise à disposition'),
def get_regions(self):
return [self.pays.region]
+reversion.register(OrganismeBstg, format='xml')
+
class Statut(AUFMetadata):
"""
def __unicode__(self):
return u'%s : %s' % (self.code, self.nom)
+reversion.register(Statut, format='xml')
+
TYPE_CLASSEMENT_CHOICES = (
('S', 'S -Soutien'),
type = models.CharField(max_length=10, choices=TYPE_CLASSEMENT_CHOICES)
echelon = models.IntegerField(u"échelon", blank=True, default=0)
degre = models.IntegerField(u"degré", blank=True, default=0)
- coefficient = models.FloatField(u"coefficient", default=0, null=True)
+ coefficient = models.FloatField(u"coefficient", blank=True, null=True)
# Méta
# annee # au lieu de date_debut et date_fin
class Classement(Classement_):
__doc__ = Classement_.__doc__
+reversion.register(Classement, format='xml')
+
class TauxChange_(AUFMetadata):
"""
class TauxChange(TauxChange_):
__doc__ = TauxChange_.__doc__
+reversion.register(TauxChange, format='xml')
+
class ValeurPointManager(NoDeleteManager):
class ValeurPoint(ValeurPoint_):
__doc__ = ValeurPoint_.__doc__
+reversion.register(ValeurPoint, format='xml')
+
class Devise(AUFMetadata):
"""
def __unicode__(self):
return u'%s - %s' % (self.code, self.nom)
+reversion.register(Devise, format='xml')
+
class TypeContrat(AUFMetadata):
"""
def __unicode__(self):
return u'%s' % (self.nom)
+reversion.register(TypeContrat, format='xml')
+
### AUTRES
ordering = ['implantation__nom']
verbose_name = "Responsable d'implantation"
verbose_name_plural = "Responsables d'implantation"
+
+reversion.register(ResponsableImplantation, format='xml')
import urllib
from datetime import date
-from itertools import izip
import StringIO
import pygraphviz as pgv
-
+from auf.django.references import models as ref
from django import forms
from django.conf import settings
from django.contrib.auth.decorators import login_required
from django.http import HttpResponse
from django.shortcuts import render, get_object_or_404
-from auf.django.references import models as ref
-
-from project.decorators import redirect_interdiction
from project.decorators import drh_or_admin_required
from project.decorators import region_protected
from project.groups import get_employe_from_user
from project.groups import grp_drh, grp_correspondants_rh
-
from project.rh import models as rh
from project.rh import graph as rh_graph
from project.rh.change_list import RechercheTemporelle
-from project.rh.lib import calc_remun, get_lookup_params
+from project.rh.lib import get_lookup_params
from project.rh.masse_salariale import MasseSalariale
from project.rh.templatetags.rapports import SortHeaders
@login_required
def profil(request):
"""Profil personnel de l'employé - éditable"""
- employe = get_employe_from_user(user)
+ employe = get_employe_from_user(request.user)
c = {
'user': request.user,
'employe': employe,
).filter(
rh_contrats__in=contrats_echus
)
-
+
# employés sans contrat
employes = rh.Employe.objects.filter(
rh_dossiers__in=dossiers_sans_contrat
]
h = SortHeaders(
request, headers, order_field_type="ot", order_field="o",
- not_sortable=('dossier','dossier_date_debut','dossier_date_fin',)
+ not_sortable=('dossier', 'dossier_date_debut', 'dossier_date_fin',)
)
c = {
'title': u'Rapport des employés sans contrat',
'employes': employes,
- 'dossiers_sans_contrat':dossiers_sans_contrat,
+ 'dossiers_sans_contrat': dossiers_sans_contrat,
'headers': list(h.headers()),
}
c['data'] = data
return render(request, 'rh/rapports/postes_service.html', c)
+
@region_protected(rh.Dossier)
def dossier_apercu(request, dossier_id):
d = get_object_or_404(rh.Dossier, pk=dossier_id)
@login_required
@drh_or_admin_required
def organigrammes_employe(request, id, level="all"):
-
poste = get_object_or_404(rh.Poste, pk=id)
dossiers_by_poste = dict(
(d.poste_id, d)
@login_required
@drh_or_admin_required
def organigrammes_service(request, id):
-
service = get_object_or_404(rh.Service, pk=id)
svg = rh_graph.organigramme_postes_cluster( \
cluster_filter={"service": service}, \
titre=u"Organigramme du service %s" % service.nom,
cluster_titre=service.nom)
- c = {
+ return render(request, 'rh/organigrammes/vide.html', {
'svg': svg
- }
-
- return render(request, 'rh/organigrammes/vide.html', c,
- content_type="image/svg+xml"
- )
+ }, content_type="image/svg+xml")
@login_required
@drh_or_admin_required
def organigrammes_implantation(request, id):
-
implantation = get_object_or_404(ref.Implantation, pk=id)
svg = rh_graph.organigramme_postes_cluster( \
cluster_filter={"implantation": implantation}, \
titre=u"Organigramme de l'implantation %s" % implantation.nom,
cluster_titre=implantation.nom)
-
- c = {
+ return render(request, 'rh/organigrammes/vide.html', {
'svg': svg
- }
-
- return render(request, 'rh/organigrammes/vide.html', c,
- content_type="image/svg+xml"
- )
+ }, content_type="image/svg+xml")
@login_required
@drh_or_admin_required
def organigrammes_region(request, id):
-
region = get_object_or_404(ref.Region, pk=id)
svg = rh_graph.organigramme_postes_cluster( \
cluster_filter={"implantation__region": region}, \
titre=u"Organigramme du bureau de %s" % region.nom,
cluster_titre=region.nom)
- c = {
+ return render(request, 'rh/organigrammes/vide.html', {
'svg': svg
- }
-
- return render(request,
- 'rh/organigrammes/vide.html', c,
- content_type="image/svg+xml"
- )
+ }, content_type="image/svg+xml")
django-admin-tools = 0.4.1
django-ajax-selects = 1.1.4
django-alphafilter = 0.5.3auf4
-django-picklefield = 0.2.1
-django-reversion = 1.3.3
+django-reversion = 1.5.2
django-sendfile = 0.2.1
django-urldecorators = 0.3
auf.django.auth = 0.5.5dev