from django.db.models import Q, Max
from django import forms
-from django.forms.models import inlineformset_factory
+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
recherche = AutoCompleteSelectField('dossiers', required=False)
poste = forms.CharField(max_length=255, widget=forms.TextInput(attrs={'size':'60'}))
- class Model:
+ class Meta:
model = dae.DossierComparaison
+ exclude = ('dossier',)
-DossierComparaisonForm = inlineformset_factory(
- dae.Dossier, dae.DossierComparaison, extra=3, max_num=3, form=DossierComparaisonForm
+DossierComparaisonFormSet = modelformset_factory(
+ dae.DossierComparaison, extra=3, max_num=3, form=DossierComparaisonForm
)
class PosteComparaisonForm(forms.ModelForm):
recherche = AutoCompleteSelectField('postes', required=False)
- class Model:
+ class Meta:
model = dae.PosteComparaison
+ exclude = ('poste',)
-PosteComparaisonForm = inlineformset_factory(
- dae.Poste, dae.PosteComparaison, extra=3, max_num=3, form=PosteComparaisonForm
+PosteComparaisonFormSet = modelformset_factory(
+ dae.PosteComparaison, extra=3, max_num=3, form=PosteComparaisonForm
)
class FlexibleRemunForm(forms.ModelForm):
On s'intéresse aussi au groupe auquel appartient le user car certains groupes
peuvent tout voir.
"""
- # On s'assure que le manager travaille sur un modèle avec WF, autrement
- # on ne teste pas sur l'état
- try:
- self.model._meta.get_field_by_name('etat')
- workflowed_model = True
- except:
- workflowed_model = False
-
employe = get_employe_from_user(user)
############################################
q = Q(**{ self.prefixe_implantation : employe.implantation.region })
# SERVICE
- if self.prefixe_service and workflowed_model and \
- grp_service_utilisateurs in user.groups.all():
+ if self.prefixe_service and grp_service_utilisateurs in user.groups.all():
q = q | Q(**{ self.prefixe_service : employe.service})
liste = self.get_query_set().filter(q)
############################################
# TRAITEMENT ACCIOR
############################################
- if workflowed_model and grp_accior in user.groups.all():
+ if grp_accior in user.groups.all():
liste = self.get_query_set().all()
############################################
# TRAITEMENT ABF
############################################
- if workflowed_model and grp_abf in user.groups.all():
+ if grp_abf in user.groups.all():
liste = self.get_query_set().all()
############################################
# TRAITEMENT HAUTE DIRECTION
############################################
- if workflowed_model and grp_haute_direction in user.groups.all():
+ if grp_haute_direction in user.groups.all():
liste = self.get_query_set().all()
############################################
class PosteComparaisonManager(SecurityManager):
use_for_related_fields = True
prefixe_implantation = "implantation__region"
+
+class DossierComparaisonManager(SecurityManager):
+ use_for_related_fields = True
+ prefixe_implantation = "implantation__region"
from workflow import PosteWorkflow, DossierWorkflow
from workflow import DOSSIER_ETAT_DRH_FINALISATION, DOSSIER_ETAT_REGION_FINALISATION, \
DOSSIER_ETAT_FINALISE
-from managers import DossierManager, PosteManager, PosteComparaisonManager
+from managers import DossierManager, PosteManager, PosteComparaisonManager, \
+ DossierComparaisonManager
import datamaster_modeles.models as ref
from rh_v1 import models as rh
montant = models.IntegerField(null=True)
devise = models.ForeignKey(rh.Devise, default=5, related_name='+', null=True, blank=True)
+ objects = DossierComparaisonManager()
+
def taux_devise(self):
if self.devise.code == 'EUR':
return 1
<fieldset>
<h2>Comparaison salariale</h2>
<span class="info">dans la région pour les employés occupant un poste similaire</span>
- {% for f in dossiersComparaisonsForm.management_form %}
- {{ f }}
- {% endfor %}
+ {{ comparaisons_formset.management_form }}
- {% for f in dossiersComparaisonsForm.forms %}
+ {% for f in comparaisons_formset.forms %}
<table>
{% for field in f %}
{% if field.is_hidden %}{{ field }}{% endif %}
<th>Salaire</th>
<th>Salaire EUR</th>
</tr>
- {% for dc in dossier.comparaisons.all %}
+ {% for dc in comparaisons %}
<tr>
<td>{{ dc.classement|default:"" }}</td>
<td>{{ dc.statut|default:"" }}</td>
<fieldset>
<h2>Éléments de comparaison (interne)</h2>
- {% for f in postesComparaisonsForm.management_form %}
- {{ f }}
- {% endfor %}
-
- {% for f in postesComparaisonsForm.forms %}
+ {{ comparaisons_formset.management_form }}
+
+ {% for f in comparaisons_formset.forms %}
<table>
{% for field in f %}
{% if field.is_hidden %}{{ field }}{% endif %}
form = PosteForm(data, instance=poste, request=request)
financementForm = FinancementForm(request.POST, instance=poste)
piecesForm = PostePieceForm(request.POST, request.FILES, instance=poste)
- postesComparaisonsForm = PosteComparaisonForm(request.POST, instance=poste)
- if form.is_valid() and piecesForm.is_valid() and financementForm.is_valid() and postesComparaisonsForm.is_valid():
+ comparaisons_formset = PosteComparaisonFormSet(
+ request.POST,
+ queryset=poste.comparaisons_internes.ma_region_ou_service(request.user)
+ )
+ 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()
financementForm.instance = poste
financementForm.save()
- postesComparaisonsForm.instance = poste
- postesComparaisonsForm.save()
+
+ # Ne remplacer que les comparaisons de ma région
+ comparaisons = comparaisons_formset.save(commit=False)
+ for comparaison in comparaisons:
+ comparaison.poste = poste
+ comparaison.save()
+
messages.add_message(request, messages.SUCCESS, "Le poste %s a été sauvegardé." % poste)
if request.POST.has_key('save'):
return redirect('poste_consulter', key='dae-%s' % poste.id)
form = PosteForm(initial=data, instance=poste, request=request)
piecesForm = PostePieceForm(instance=poste)
financementForm = FinancementForm(instance=poste)
- postesComparaisonsForm = PosteComparaisonForm(instance=poste)
+ comparaisons_formset = PosteComparaisonFormSet(
+ queryset=poste.comparaisons_internes.ma_region_ou_service(request.user)
+ )
- vars.update(dict(form=form, poste=poste, poste_key=key, piecesForm=piecesForm, financementForm=financementForm, postesComparaisonsForm=postesComparaisonsForm))
+ vars.update(dict(
+ form=form, poste=poste, poste_key=key, piecesForm=piecesForm,
+ financementForm=financementForm,
+ comparaisons_formset=comparaisons_formset
+ ))
return render_to_response('dae/poste.html', vars, RequestContext(request))
validationForm = DossierWorkflowForm(instance=dossier, request=request)
comparaisons_internes = dossier.poste.comparaisons_internes.ma_region_ou_service(request.user)
+ comparaisons = dossier.comparaisons.ma_region_ou_service(request.user)
vars = {
'dossier': dossier,
'validationForm': validationForm,
- 'comparaisons_internes': comparaisons_internes
- }
+ 'comparaisons_internes': comparaisons_internes,
+ 'comparaisons': comparaisons
+ }
mode = request.GET.get('mode', None)
if mode is None:
dossier_form = DossierForm(request.POST, instance=dossier)
piecesForm = DossierPieceForm(request.POST, request.FILES, instance=dossier)
- dossiersComparaisonsForm = DossierComparaisonForm(request.POST, instance=dossier)
+ comparaisons_formset = DossierComparaisonFormSet(
+ request.POST,
+ queryset=dossier.comparaisons.ma_region_ou_service(request.user)
+ )
remunForm = RemunForm(request.POST, instance=dossier)
if dossier_form.is_valid() and \
piecesForm.is_valid() and \
- dossiersComparaisonsForm.is_valid() and \
+ comparaisons_formset.is_valid() and \
remunForm.is_valid():
employe.save()
piecesForm.save()
- dossiersComparaisonsForm.save()
remunForm.save()
+
+ # Ne remplacer que les comparaisons de ma région
+ comparaisons = comparaisons_formset.save(commit=False)
+ for comparaison in comparaisons:
+ comparaison.dossier = dossier
+ comparaison.save()
+
messages.success(request, "Le dossier %s a été sauvegardé." % dossier)
if request.POST.has_key('save'):
return redirect('embauche_consulter', dossier_id=dossier.id)
dossier_form = DossierForm(instance=dossier)
piecesForm = DossierPieceForm(instance=dossier)
- dossiersComparaisonsForm = DossierComparaisonForm(instance=dossier)
+ comparaisons_formset = DossierComparaisonFormSet(
+ queryset=dossier.comparaisons.ma_region_ou_service(request.user)
+ )
remunForm = RemunForm(instance=dossier)
comparaisons_internes = dossier.poste.comparaisons_internes.ma_region_ou_service(request.user)
'dossier': dossier,
'piecesForm': piecesForm,
'remunForm': remunForm,
- 'dossiersComparaisonsForm': dossiersComparaisonsForm,
+ 'comparaisons_formset': comparaisons_formset,
'forms': dict(employe=employe_form, dossier=dossier_form, ),
'comparaisons_internes': comparaisons_internes
}, RequestContext(request))