Merge branch 'master' into test test
authorEric Mc Sween <eric.mcsween@auf.org>
Wed, 9 Jan 2013 17:07:01 +0000 (12:07 -0500)
committerEric Mc Sween <eric.mcsween@auf.org>
Wed, 9 Jan 2013 17:07:01 +0000 (12:07 -0500)
Conflicts:
project/dae/views.py

project/dae/views.py
project/rh/admin.py
project/rh/models.py
project/rh/templates/admin/rh/dossier/change_list.html
project/rh/templatetags/rapports.py
project/templates/reversion/change_form.html [deleted file]
project/templates/reversion/revision_form.html [deleted file]

index 5072704..642baf9 100644 (file)
@@ -6,10 +6,9 @@ from auf.django.permissions.decorators import get_object
 from django.contrib import messages
 from django.contrib.auth.decorators import login_required, user_passes_test
 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, Count
-from django.http import Http404, HttpResponse, HttpResponseGone
+from django.http import Http404, HttpResponse, HttpResponseNotFound
 from django.shortcuts import redirect, render, get_object_or_404
 from sendfile import sendfile
 from simplejson import dumps
@@ -24,7 +23,8 @@ from project.dae.decorators import \
         dossier_est_modifiable, \
         poste_est_modifiable, get_contrat
 from project.dae.forms import FinancementFormSet, FinancementFormSetInitial
-from project.dae.forms import PosteComparaisonFormSet, PosteComparaisonFormSetInitial
+from project.dae.forms import \
+        PosteComparaisonFormSet, PosteComparaisonFormSetInitial
 from project.dae.forms import \
         PosteWorkflowForm, PosteForm, PostePieceFormSet, \
         DossierWorkflowForm, ChoosePosteForm, \
@@ -96,7 +96,6 @@ def poste_consulter(request, key):
     })
 
 
-
 @user_passes_test(lambda u: u.is_superuser)
 @drh_or_admin_required
 def poste_importer(request, id):
@@ -161,7 +160,6 @@ def poste(request, key=None):
     if creer_dossier_dae:
         data['type_intervention'] = request.GET['creer_dossier_dae']
 
-
     # Poste existant
     poste_rh = None
     if not new:
@@ -195,12 +193,13 @@ def poste(request, key=None):
         financements = []
         comparaisons = []
 
-
     if request.POST:
         data.update(dict(request.POST.items()))
         form = PosteForm(data, instance=poste, request=request)
         financementForm = FinancementForm(request.POST, instance=poste, )
-        piecesForm = PostePieceFormSet(request.POST, request.FILES, instance=poste, )
+        piecesForm = PostePieceFormSet(
+            request.POST, request.FILES, instance=poste
+        )
         comparaisons_formset = PosteComparaisonForm(
                 request.POST,
                 instance=poste,
@@ -249,7 +248,9 @@ def poste(request, key=None):
         piecesForm = PostePieceFormSet(instance=poste)
 
         if poste_rh is not None:
-            financementForm = FinancementForm(initial=financements, instance=poste)
+            financementForm = FinancementForm(
+                initial=financements, instance=poste
+            )
             comparaisons_formset = PosteComparaisonForm(
                 initial=comparaisons,
                 instance=poste,
@@ -350,6 +351,7 @@ def embauche_consulter(request, dossier_id):
         'importer': request.user.is_superuser,
     })
 
+
 @user_passes_test(lambda u: u.is_superuser)
 @dae_groupe_requis
 @dossier_dans_ma_region_ou_service
@@ -569,7 +571,10 @@ def embauches_finalisees(request):
         importees = search_form.cleaned_data.get('importees')
         if q:
             criteria = [
-                Q(poste__implantation__zone_administrative__nom__icontains=word) |
+                Q(**{
+                    'poste__implantation__zone_administrative__nom__icontains':
+                    word
+                }) |
                 Q(poste__implantation__zone_administrative__code=word) |
                 Q(poste__implantation__nom__icontains=word) |
                 Q(poste__nom__icontains=word) |
@@ -840,15 +845,18 @@ def pre_filled_dossier(dossier_rh, employe_source, poste_rh):
 
     return dossier
 
+
 def _get_salaire_traitement(dossier):
     """
     Type de remun traitement derniers commencant a la meme date
     """
     data = {}
     # Toutes les rémunérations d'un dossier
-    remunerations = [r for r in dossier.remunerations().order_by('-date_debut') if \
-            r.type.nature_remuneration == "Traitement"]
-    
+    remunerations = [
+        r for r in dossier.remunerations().order_by('-date_debut')
+        if r.type.nature_remuneration == "Traitement"
+    ]
+
     # On prend les dernières avec le postulat que les rémun à la même date
     # constituent le dernier salaire
     if len(remunerations) > 0:
@@ -870,14 +878,15 @@ def _get_salaire_traitement(dossier):
     data['montant_euros'] = montant_euros
     return data
 
+
 @dae_groupe_requis
 @vieux_dossier_dans_ma_region_ou_service
 def dossier_resume(request, dossier_id=None):
     try:
         dossier = rh.Dossier.objects.get(id=dossier_id)
     except:
-        return HttpResponseGone("Ce dossier n'est pas accessible")
-    
+        return HttpResponseNotFound("Ce dossier n'est pas accessible")
+
     data = {}
     data['personne'] = unicode(dossier.employe)
     if dossier.classement is not None:
@@ -900,9 +909,8 @@ def poste_resume(request, dossier_id=None):
     try:
         dossier = rh.Dossier.objects.get(id=dossier_id)
     except:
-        return HttpResponseGone("Ce dossier n'est pas accessible")
+        return HttpResponseNotFound("Ce dossier n'est pas accessible")
 
-    salaire = dossier.get_salaire()
     data = {}
     data['implantation'] = dossier.poste.implantation.id
     data['poste'] = dossier.poste.nom
@@ -984,8 +992,13 @@ def devise(request):
             taux = rh.TauxChange.objects.get(
                 annee=annee, devise=valeur_point.devise
             )
-        except MultipleObjectsReturned:
-            return HttpResponseGone(
+        except rh.TauxChange.DoesNotExist:
+            return HttpResponseNotFound(
+                u"Taux de change introuvable pour la devise %s "
+                u"pour l'année %d" % (valeur_point.devise.code, annee)
+            )
+        except rh.TauxChange.MultipleObjectsReturned:
+            return HttpResponseNotFound(
                 u"Il existe plusieurs taux pour la devise %s "
                 u"cette année-là : %s" % (valeur_point.devise.code, annee)
             )
@@ -995,7 +1008,7 @@ def devise(request):
         data['devise_code'] = taux.devise.code
         data['taux_euro'] = taux.taux
     else:
-        return HttpResponseGone("Vous devez choisir une valeur de point")
+        return HttpResponseNotFound("Vous devez choisir une valeur de point")
     return HttpResponse(dumps(data))
 
 
@@ -1013,7 +1026,7 @@ def devise_code(request):
         annee = date.today().year
         taux = rh.TauxChange.objects.filter(annee=annee, devise=devise)
         if len(taux) == 0:
-            return HttpResponseGone("Le taux n'est pas disponible")
+            return HttpResponseNotFound("Le taux n'est pas disponible")
         data['devise_code'] = devise.code
         data['taux_euro'] = taux[0].taux
     return HttpResponse(dumps(data))
index c257513..5815a32 100644 (file)
@@ -28,6 +28,7 @@ from project.rh.forms import ContratForm, AyantDroitForm, EmployeAdminForm, \
         AjaxSelect, DossierForm, ResponsableInlineForm
 from project.rh.change_list import ChangeList
 
+
 def listing_par_defaut(model, request):
     """
     Teste si la requete provient de la même page.
@@ -42,6 +43,7 @@ def listing_par_defaut(model, request):
             model.__name__.lower(),)
     return referer != reverse(change_list_view)
 
+
 class BaseAdmin(admin.ModelAdmin):
 
     class Media:
@@ -152,7 +154,8 @@ class ProtectRegionMixin(object):
                 prefix_za = "%s__code__exact" % self.model.prefix_implantation
                 params.update({prefix_za: za})
                 request.GET = params
-        return super(ProtectRegionMixin, self).changelist_view(request, extra_context)
+        return super(ProtectRegionMixin, self) \
+                .changelist_view(request, extra_context)
 
     def queryset(self, request):
         qs = super(ProtectRegionMixin, self).queryset(request)
@@ -514,7 +517,8 @@ class DossierAdmin(DateRangeMixin, ProtectRegionMixin, reversion.VersionAdmin,
     def _zone_administrative(self, obj):
         return obj.poste.implantation.zone_administrative.code
     _zone_administrative.short_description = u"Zone administrative"
-    _zone_administrative.admin_order_field = 'poste__implantation__zone_administrative__code'
+    _zone_administrative.admin_order_field = \
+            'poste__implantation__zone_administrative__code'
 
     def _implantation(self, obj):
         return obj.poste.implantation.nom
@@ -901,10 +905,11 @@ class PosteAdmin(DateRangeMixin, ProtectRegionMixin, reversion.VersionAdmin,
     def lookup_allowed(self, key, value):
         return key in (
             'date_debut__gte', 'date_debut__isnull', 'date_fin__lte',
-            'date_fin__isnull', 'implantation__zone_administrative__code__exact',
+            'date_fin__isnull',
+            'implantation__zone_administrative__code__exact',
             'implantation__id__exact', 'type_poste__id__exact',
             'type_poste__categorie_emploi__id__exact', 'service__id__exact',
-            'service__isnull', 'vacant__exact', 'vacant__isnull',
+            'service__isnull', 'vacant__exact', 'vacant__isnull'
         ) or super(PosteAdmin, self).lookup_allowed(key, value)
 
     def _id(self, obj):
@@ -960,7 +965,8 @@ class PosteAdmin(DateRangeMixin, ProtectRegionMixin, reversion.VersionAdmin,
     def _zone_administrative(self, poste):
         return poste.implantation.zone_administrative.code
     _zone_administrative.short_description = 'Zone administrative'
-    _zone_administrative.admin_order_field = 'implantation__zone_administrative__code'
+    _zone_administrative.admin_order_field = \
+            'implantation__zone_administrative__code'
 
     def _implantation(self, poste):
         return poste.implantation.nom
@@ -1085,7 +1091,10 @@ class ResponsableImplantationAdmin(BaseAdmin):
         try:
             employe = employe = obj.responsable.employe
         except Exception, e:
-            return u"<span style='color: red;'>Pas de responsable</span><!-- %s -->" % e
+            return (
+                u"<span style='color: red;'>"
+                u"Pas de responsable</span><!-- %s -->" % e
+            )
         try:
             dossiers = employe.dossiers_encours()
             if len(dossiers) == 0:
@@ -1241,6 +1250,10 @@ class ValeurPointAdmin(reversion.VersionAdmin, DerniereModificationAdmin,
         (None, {'fields': ('valeur', 'devise', 'implantation', 'annee')}),
     )
 
+    def queryset(self, request):
+        return super(ValeurPointAdmin, self).queryset(request) \
+                .select_related('devise', 'implantation')
+
     def _devise_code(self, obj):
         return obj.devise.code
     _devise_code.short_description = "Code de la devise"
index 43ae7bf..187dffe 100644 (file)
@@ -118,22 +118,9 @@ class DevisableMixin(object):
             return 1
 
         annee = self.get_annee_pour_taux_devise()
-        taux = [
-            tc.taux
-            for tc in TauxChange.objects.filter(devise=devise, annee=annee)
-        ]
-        taux = set(taux)
-
-        if len(taux) == 0:
-            raise Exception(
-                u"Pas de taux pour %s en %s" % (devise.code, annee)
-            )
-
-        if len(taux) > 1:
-            raise Exception(u"Il existe plusieurs taux de %s en %s" %
-                    (devise.code, annee))
-        else:
-            return list(taux)[0]
+        taux = TauxChange.objects.filter(devise=devise, annee__lte=annee) \
+                .order_by('-annee')
+        return taux[0].taux
 
     def montant_euros(self):
         try:
index d18608e..f85e1ea 100644 (file)
@@ -1,12 +1,19 @@
 {% extends "reversion/change_list.html" %}
-{% load change_list %}
+{% load change_list i18n %}
 
 {% block object-tools-items %}
-  <li>
-    <a href="add/{% if is_popup %}?_popup=1{% endif %}" class="addlink">
-        Ajouter Dossier
-    </a>
-  </li>
+<li>
+  <a href="{{recoverlist_url}}" class="recoverlink">
+    {% blocktrans with cl.opts.verbose_name_plural|escape as name %}
+    Récupérer dossiers supprimés
+    {% endblocktrans %}
+  </a>
+</li>
+<li>
+  <a href="add/{% if is_popup %}?_popup=1{% endif %}" class="addlink">
+      Ajouter Dossier
+  </a>
+</li>
 {% endblock %}
 
 {% block search %}
index 484326c..b013435 100644 (file)
@@ -45,8 +45,8 @@ def filter_zone_administrative(context, prefix=None):
     return {
         'title': u"zone administrative",
         'choices': prepare_choices(
-            ZoneAdministrative.objects.values_list('code', 'nom'), label, context,
-            remove=['pays', 'nord_sud']
+            ZoneAdministrative.objects.values_list('code', 'nom'), label,
+            context, remove=['pays', 'nord_sud']
         )
     }
 
@@ -74,7 +74,7 @@ def filter_zone_administrative_contrat(context):
             code=employe.implantation.zone_administrative.code
         )
     else:
-       zones = ZoneAdministrative.objects.all()
+        zones = ZoneAdministrative.objects.all()
     return {
         'title': u"région",
         'choices': prepare_choices(
@@ -120,9 +120,14 @@ def filter_implantation_contrat(context):
             zone_administrative=employe.implantation.zone_administrative
         )
     else:
-       implantations = Implantation.objects.all()
-    return {'title': u"implantation",
-            'choices': prepare_choices(implantations.values_list('id', 'nom'), 'dossier__poste__implantation', context)}
+        implantations = Implantation.objects.all()
+    return {
+        'title': u"implantation",
+        'choices': prepare_choices(
+            implantations.values_list('id', 'nom'),
+            'dossier__poste__implantation', context
+        )
+    }
 
 
 @register.inclusion_tag('admin/filter.html', takes_context=True)
@@ -191,11 +196,10 @@ def filter_debut_contrat(context):
 @register.inclusion_tag('admin/filter_select.html', takes_context=True)
 def filter_a_venir(context):
     today = datetime.date.today()
-    year, month, day = datetime.date.today().timetuple()[:3]
-    mois_prochain = datetime.date(
-        year + (month + 1) / 13, (month + 1) % 12, 1
-    )
-    this_month = datetime.date(year, month, 1)
+    mois_prochain = datetime.date(today.year, today.month + 1, 1) \
+            if today.month < 12 \
+            else datetime.date(today.year + 1, today.month, 1)
+    this_month = datetime.date(today.year, today.month, 1)
 
     field_name = 'date_debut'
     return {'title': u"à venir",
diff --git a/project/templates/reversion/change_form.html b/project/templates/reversion/change_form.html
deleted file mode 100644 (file)
index f7610e1..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-{% extends "admin/base_site.html" %}
-{% load i18n admin_modify adminmedia %}
-{% load url from future %}
-
-{% block extrahead %}{{ block.super }}
-{% url 'admin:jsi18n' as jsi18nurl %}
-<script type="text/javascript" src="{{ jsi18nurl|default:"../../../jsi18n/" }}"></script>
-{{ media }}
-{% endblock %}
-
-{% block extrastyle %}{{ block.super }}<link rel="stylesheet" type="text/css" href="{% admin_media_prefix %}css/forms.css" />{% endblock %}
-
-{% block coltype %}{% if ordered_objects %}colMS{% else %}colM{% endif %}{% endblock %}
-
-{% block bodyclass %}{{ opts.app_label }}-{{ opts.object_name.lower }} change-form{% endblock %}
-
-{% block breadcrumbs %}{% if not is_popup %}
-<div class="breadcrumbs">
-     <a href="../../../">{% trans "Home" %}</a> &rsaquo;
-     <a href="../../">{{ app_label|capfirst|escape }}</a> &rsaquo;
-     {% if has_change_permission %}<a href="../">{{ opts.verbose_name_plural|capfirst }}</a>{% else %}{{ opts.verbose_name_plural|capfirst }}{% endif %} &rsaquo;
-     {% if add %}{% trans "Add" %} {{ opts.verbose_name }}{% else %}{{ original|truncatewords:"18" }}{% endif %}
-</div>
-{% endif %}{% endblock %}
-
-{% block content %}<div id="content-main">
-{% block object-tools %}
-{% if change %}{% if not is_popup %}
-  <ul class="object-tools">
-    {% block object-tools-items %}
-    <li><a href="history/" class="historylink">{% trans "History" %}</a></li>
-    {% if has_absolute_url %}<li><a href="../../../r/{{ content_type_id }}/{{ object_id }}/" class="viewsitelink">{% trans "View on site" %}</a></li>{% endif%}
-    {% endblock %}
-  </ul>
-{% endif %}{% endif %}
-{% endblock %}
-<form {% if has_file_field %}enctype="multipart/form-data" {% endif %}action="{{ form_url }}" method="post" id="{{ opts.module_name }}_form">{% csrf_token %}{% block form_top %}{% endblock %}
-<div>
-{% if is_popup %}<input type="hidden" name="_popup" value="1" />{% endif %}
-{% if errors %}
-    <p class="errornote">
-    {% blocktrans count errors|length as counter %}Please correct the error below.{% plural %}Please correct the errors below.{% endblocktrans %}
-    </p>
-    {{ adminform.form.non_field_errors }}
-{% endif %}
-
-{% for fieldset in adminform %}
-  {% include "admin/includes/fieldset.html" %}
-{% endfor %}
-
-{% block after_field_sets %}{% endblock %}
-
-{% for inline_admin_formset in inline_admin_formsets %}
-    {% include inline_admin_formset.opts.template %}
-{% endfor %}
-
-{% block after_related_objects %}{% endblock %}
-
-{% if adminform and add %}
-   <script type="text/javascript">document.getElementById("{{ adminform.first_field.id_for_label }}").focus();</script>
-{% endif %}
-
-{# JavaScript for prepopulated fields #}
-{% prepopulated_fields_js %}
-
-</div>
-</form></div>
-{% endblock %}
diff --git a/project/templates/reversion/revision_form.html b/project/templates/reversion/revision_form.html
deleted file mode 100644 (file)
index b72d949..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-{% extends "reversion/change_form.html" %}
-{% load i18n %}
-
-
-{% block breadcrumbs %}
-       <div class="breadcrumbs">
-               <a href="{% url admin:index %}">{% trans "Home" %}</a> &rsaquo;
-               <a href="{% url admin:app_list app_label %}">{{app_label|capfirst|escape}}</a> &rsaquo; 
-               <a href="{{changelist_url}}">{{opts.verbose_name_plural|capfirst}}</a> &rsaquo;
-               <a href="{{change_url}}">{{original|truncatewords:"18"}}</a> &rsaquo;
-               <a href="../">{% trans "History" %}</a> &rsaquo;
-               {% blocktrans with opts.verbose_name as verbose_name %}Revert {{verbose_name}}{% endblocktrans %}
-       </div>
-{% endblock %}
-
-
-{% block content %}
-       {% with 1 as is_popup %}
-               {{block.super}}
-       {% endwith %}
-{% endblock %}
-
-
-