Example #1
0
def chois_verif_abs(_req):

    # Imports
    from app.forms.gest_abs import FiltrerVerificationAbsences
    from app.functions import init_form
    from app.functions import prep_dtab
    from app.models import TUtilisateur
    from django.http import HttpResponse
    from django.shortcuts import render
    import json

    output = None

    # Obtention d'une instance TUtilisateur
    obj_util = TUtilisateur.objects.get(pk=_req.user.pk)

    if _req.method == 'GET':

        # Initialisation du formulaire
        form_filtr_verif_abs = FiltrerVerificationAbsences(kw_util=obj_util)

        # Affichage du template
        output = render(
            _req, './gest_abs/chois_verif_abs.html', {
                'dtab_filtr_verif_abs': form_filtr_verif_abs.init_dtab(_req),
                'form_filtr_verif_abs': init_form(form_filtr_verif_abs),
                'title': 'Choisir une absence en attente'
            })

    else:

        # Soumission du formulaire
        form_filtr_verif_abs = FiltrerVerificationAbsences(_req.POST,
                                                           kw_util=obj_util)

        # Rafraîchissement de la datatable ou affichage des erreurs
        if form_filtr_verif_abs.is_valid():
            output = prep_dtab(form_filtr_verif_abs.init_dtab(_req))

        else:
            output = HttpResponse(json.dumps(form_filtr_verif_abs.errors),
                                  content_type='application/json')

    return output
Example #2
0
def chois_agent(_req):

    # Imports
    from app.forms.gest_agents import FiltrerAgents
    from app.functions import init_form
    from app.functions import prep_dtab
    from app.models import TUtilisateur
    from django.http import HttpResponse
    from django.shortcuts import render
    import json

    output = None

    if _req.method == 'GET':

        # Initialisation du formulaire
        form_filtr_agents = FiltrerAgents()

        # Affichage du template
        output = render(
            _req, './gest_agents/chois_agent.html', {
                'dtab_filtr_agents': form_filtr_agents.init_dtab(_req),
                'form_filtr_agents': init_form(form_filtr_agents),
                'title': 'Choisir un agent'
            })

    else:

        # Soumission du formulaire
        form_filtr_agents = FiltrerAgents(_req.POST)

        # Rafraîchissement de la datatable ou affichage des erreurs
        if form_filtr_agents.is_valid():
            output = prep_dtab(form_filtr_agents.init_dtab(_req))
        else:
            output = HttpResponse(json.dumps(form_filtr_agents.errors),
                                  content_type='application/json')

    return output
Example #3
0
def consult_compte(_req):

    # Imports
    from app.forms.gest_agents import TrierTransactionsCetAgent
    from app.functions import init_consult
    from app.functions import init_fm
    from app.functions import init_form
    from app.functions import prep_dtab
    from app.functions import transform_bool
    from app.models import TUtilisateur
    from datetime import date
    from django.http import HttpResponse
    from django.shortcuts import render
    import json

    output = None

    # Obtention d'une instance TUtilisateur
    obj_util = TUtilisateur.objects.get(pk=_req.user.pk)

    if _req.method == 'GET':
        if 'action' in _req.GET:

            # Téléchargement de la fiche CET d'un agent
            if _req.GET['action'] == 'telecharger-cet-agent' and 'mode-de-tri' in _req.GET and \
            'historique' in _req.GET :
                hist_trans_cet_util = _req.GET['historique']
                if hist_trans_cet_util:
                    hist_trans_cet_util = int(hist_trans_cet_util)
                output = obj_util.get_fiche_cet(_req.GET['mode-de-tri'],
                                                hist_trans_cet_util)

            # Affichage des absences autorisées ou en attente
            if _req.GET[
                    'action'] == 'consulter-absences' and 'annee' in _req.GET:
                output = prep_dtab(obj_util.get_tabl_abs(_req.GET['annee']), {
                    'modal_id': '#fm_consult_abs',
                    'modal_id_action': 'show'
                })

        else:

            # Préparation des attributs disponibles en consultation
            tab_attrs_util = {
                'courr_second_util': {
                    'label': 'Courriel secondaire',
                    'value': obj_util.get_courr_second_util()
                },
                'email': {
                    'label': 'Courriel principal',
                    'value': obj_util.get_email()
                },
                'email_auto_courr_princ': {
                    'label':
                    'Les notifications sont-elles envoyées sur le courriel principal ?',
                    'value':
                    transform_bool(obj_util.get_email_auto_courr_princ())
                },
                'email_auto_courr_second': {
                    'label':
                    'Les notifications sont-elles envoyées sur le courriel secondaire ?',
                    'value':
                    transform_bool(obj_util.get_email_auto_courr_second())
                },
                'en_act': {
                    'label': 'Êtes-vous en activité ?',
                    'value': transform_bool(obj_util.get_en_act())
                },
                'first_name': {
                    'label': 'Prénom',
                    'value': obj_util.get_first_name()
                },
                'gpe_util': {
                    'label':
                    'Groupes d\'utilisateur',
                    'value':
                    ', '.join(
                        [str(gu) for gu in obj_util.get_gpe_util().all()])
                },
                'last_name': {
                    'label': 'Nom de famille',
                    'value': obj_util.get_last_name()
                },
                'solde_cet_util': {
                    'label': 'Solde restant sur le compte épargne temps (CET)',
                    'value': obj_util.get_solde_cet_restant_util__str()
                },
                'type_util': {
                    'label':
                    'Quels sont les rôles assignés au compte ?',
                    'value':
                    ', '.join(
                        [str(tu) for tu in obj_util.get_type_util().all()])
                },
                'username': {
                    'label': 'Nom d\'utilisateur',
                    'value': obj_util.get_username()
                }
            }

            # Initialisation des statuts agent
            tab_statut_util = []
            for su in obj_util.get_statut_util_set().all():

                # Détermination du statut agent actuel
                statut_util_actuel = False
                if date.today() > date(su.get_annee().get_pk(),
                                       su.get_mois_deb_statut_util(), 1):
                    statut_util_actuel = True
                    for elem in tab_statut_util:
                        if elem['class']: elem['class'] = None

                tab_statut_util.append({
                    'class':
                    'to-highlight' if statut_util_actuel == True else None,
                    'period_deb_statut_util':
                    su.get_period_deb_statut_util(),
                    'pk':
                    su.get_pk(),
                    'statut_util':
                    su.get_statut_util__str()
                })

            # Initialisation des décomptes agent
            tab_decompt_util = [{
                'annee':
                du.get_annee(),
                'nbre_j_cp_autor':
                du.get_util().get_nbre_j_autor__str(True,
                                                    du.get_annee().get_pk()),
                'nbre_j_cp_base':
                du.get_nbre_j_cp_base__str(),
                'nbre_j_cp_rest':
                du.get_util().get_nbre_j_rest__str(True,
                                                   du.get_annee().get_pk()),
                'nbre_j_cp_transf':
                du.get_util().get_nbre_j_transf__str(True,
                                                     du.get_annee().get_pk()),
                'nbre_j_rtt_autor':
                du.get_util().get_nbre_j_autor__str(False,
                                                    du.get_annee().get_pk()),
                'nbre_j_rtt_base':
                du.get_nbre_j_rtt_base__str(),
                'nbre_j_rtt_rest':
                du.get_util().get_nbre_j_rest__str(False,
                                                   du.get_annee().get_pk()),
                'nbre_j_rtt_transf':
                du.get_util().get_nbre_j_transf__str(False,
                                                     du.get_annee().get_pk()),
            } for du in obj_util.get_decompt_util_set().reverse()]

            # Initialisation du formulaire de tri des transactions d'un CET
            form_tri_trans_cet_util = TrierTransactionsCetAgent(
                kw_consult=True, kw_util=obj_util)

            # Affichage du template
            output = render(
                _req, './gest_compte/consult_compte.html', {
                    'dtab_tri_trans_cet_util':
                    form_tri_trans_cet_util.init_dtab(_req),
                    'form_tri_trans_cet_util':
                    init_form(form_tri_trans_cet_util),
                    'tab_attrs_util':
                    init_consult(tab_attrs_util),
                    'tab_decompt_util':
                    tab_decompt_util,
                    'tab_fm': [
                        init_fm(
                            'consult_abs',
                            'Consulter les absences autorisées ou en attente',
                            obj_util.get_tabl_abs())
                    ],
                    'tab_statut_util':
                    tab_statut_util,
                    'title':
                    'Consulter mon compte',
                })

    else:

        # Traitement du cas où je dois rafraîchir la fiche CET d'un agent (altération du mode de tri)
        if _req.GET['action'] == 'trier-transactions-cet-agent':

            # Soumission du formulaire
            form_tri_trans_cet_util = TrierTransactionsCetAgent(
                _req.POST, kw_consult=True, kw_util=obj_util)

            # Rafraîchissement de la datatable ou affichage des erreurs
            if form_tri_trans_cet_util.is_valid():
                output = prep_dtab(form_tri_trans_cet_util.init_dtab(_req))
            else:
                output = HttpResponse(json.dumps(
                    form_tri_trans_cet_util.errors),
                                      content_type='application/json')

    return output
Example #4
0
def filtr_abs(_req, _gby) :

	# Imports
	from app.forms.real_etats import FiltrerAbsences
	from app.functions import gener_cdc
	from app.functions import init_fm
	from app.functions import init_form
	from app.functions import prep_dtab
	from app.functions import transform_bool
	from app.models import TAbsence
	from app.models import TUtilisateur
	from django.http import HttpResponse
	from django.shortcuts import render
	from django.template.context_processors import csrf
	import csv
	import json

	output = None

	# Initialisation du préfixe de chaque formulaire
	pref_filtr_abs = 'FiltrerAbsences'

	# Obtention d'une instance TUtilisateur
	obj_util = TUtilisateur.objects.get(pk = _req.user.pk)

	if _req.method == 'GET' :
		if 'action' in _req.GET :
			if _req.GET['action'] == 'exporter-csv' and 'group-by' in _req.GET \
			and _req.GET['group-by'] in ['off', 'on'] :

				# Génération d'un fichier au format CSV
				output = HttpResponse(content_type = 'text/csv', charset = 'cp1252')
				output['Content-Disposition'] = 'attachment; filename="{0}.csv"'.format(gener_cdc())

				# Accès en écriture
				writer = csv.writer(output, delimiter = ';')

				# Initialisation des données
				tab_lg = _req.session['filtr_abs'] if 'filtr_abs' in _req.session else []

				# Définition de l'en-tête
				if _gby == False :
					header = [
						'Agent ayant émis l\'absence',
						'Date d\'émission de l\'absence',
						'Agent concerné',
						'Type de l\'absence',
						'Année',
						'Date de l\'absence',
						'Justificatif d\'absence',
						'Commentaire (phase de pré-validation)',
						'Agent ayant vérifié l\'absence',
						'Date de vérification de l\'absence',
						'L\'absence est-elle autorisée ?',
						'Type final de l\'absence',
						'Commentaire (phase de post-validation)'
					]
				else :
					header = [
						'Nom complet de l\'agent/des agents',
						'Type de l\'absence',
						'Année de l\'absence',
						'État de l\'absence',
						'Nombre d\'absences',
						'Nombre de jours d\'absence'
					]

				# Ajout de l'en-tête
				writer.writerow(header)

				for elem in tab_lg :

					# Définition des données de la nouvelle ligne
					if _gby == False :

						# Obtention d'une instance TAbsence
						obj_abs = TAbsence.objects.get(pk = elem[0])

						# Ajout des données "pré-validation"
						body = [
							obj_abs.get_util_connect().get_nom_complet() if obj_abs.get_util_connect() else None,
							obj_abs.get_dt_emiss_abs__str(),
							obj_abs.get_util_emett().get_nom_complet(),
							obj_abs.get_type_abs(),
							obj_abs.get_annee(),
							obj_abs.get_dt_abs__fr_str(),
							_req.build_absolute_uri(str(obj_abs.get_pj_abs())) if obj_abs.get_pj_abs() else None,
							obj_abs.get_comm_abs()
						]

						# Ajout des données "post-validation" si définies
						if obj_abs.get_verif_abs() :
							body += [
								obj_abs.get_verif_abs().get_util_verif().get_nom_complet() \
								if obj_abs.get_verif_abs().get_util_verif() else None,
								obj_abs.get_verif_abs().get_dt_verif_abs__str(),
								transform_bool(obj_abs.get_verif_abs().get_est_autor()),
								obj_abs.get_verif_abs().get_type_abs_final(),
								obj_abs.get_verif_abs().get_comm_verif_abs()
							]

					else :
						body = elem

					# Ajout d'une nouvelle ligne
					writer.writerow(body)

		else :

			# Initialisation du formulaire et de ses attributs
			form_filtr_abs = FiltrerAbsences(prefix = pref_filtr_abs, kw_gby = _gby, kw_util = obj_util)
			_form_filtr_abs = init_form(form_filtr_abs)

			# Définition de l'attribut <title/>
			if _gby == False :
				title = 'Réalisation d\'états en sélectionnant des absences'
			else :
				title = 'Réalisation d\'états en regroupant des absences'

			# Initialisation des fenêtres modales
			tab_fm = [init_fm(
				'filtr_abs',
				'Filtrer les absences par',
				'''
				<form action="" method="post" name="form_select_abs" onsubmit="trait_post(event);">
					<input name="csrfmiddlewaretoken" type="hidden" value="{0}">
					{1}
					<div class="row">
						<div class="col-sm-6">{2}</div>
						<div class="col-sm-6">{3}</div>
					</div>
					<span class="theme-color">Période de début d'absence</span>
					<div class="row">
						<div class="col-sm-6">{4}</div>
						<div class="col-sm-6">{5}</div>
					</div>
					{6}
					{7}
					{8}
					<button class="center-block custom-btn green-btn" type="submit">Valider</button>
				</form>
				'''.format(
					csrf(_req)['csrf_token'],
					_form_filtr_abs['zcc_util'],
					_form_filtr_abs['zl_type_abs'],
					_form_filtr_abs['zl_annee'],
					_form_filtr_abs['zd_dt_deb_abs'],
					_form_filtr_abs['zd_dt_fin_abs'],
					_form_filtr_abs['zl_etat_abs'],
					_form_filtr_abs['rb_gby'] if 'rb_gby' in _form_filtr_abs else '',
					_form_filtr_abs['zcc_ajout_select_exist']
				)
			)]

			# Affichage du template
			output = render(_req, './real_etats/filtr_abs.html', {
				'dtab_filtr_abs' : form_filtr_abs.init_dtab(_req),
				'form_filtr_abs' : init_form(form_filtr_abs),
				'gby' : 'off' if _gby == False else 'on',
				'tab_fm' : tab_fm,
				'title' : title
			})

	else :

		# Soumission du formulaire
		form_filtr_abs = FiltrerAbsences(_req.POST, prefix = pref_filtr_abs, kw_gby = _gby, kw_util = obj_util)

		# Rafraîchissement de la datatable ou affichage des erreurs
		if form_filtr_abs.is_valid() :
			output = prep_dtab(form_filtr_abs.init_dtab(_req), {
				'modal_id' : '#fm_filtr_abs', 'modal_id_action' : 'hide'
			})
		else :
			tab_errs = { '{0}-{1}'.format(pref_filtr_abs, cle) : val for cle, val in form_filtr_abs.errors.items() }
			output = HttpResponse(json.dumps(tab_errs), content_type = 'application/json')

	return output
Example #5
0
def consult_agent(_req, _a):

    # Imports
    from app.forms.gest_agents import TrierTransactionsCetAgent
    from app.form_templates import get_ft_ger_statut_util
    from app.form_templates import get_ft_ger_trans_cet_util
    from app.forms.gest_agents import GererStatutAgent
    from app.forms.gest_agents import GererTransactionCetAgent
    from app.functions import affich_dem_suppr
    from app.functions import init_consult
    from app.functions import init_fm
    from app.functions import init_form
    from app.functions import prep_dtab
    from app.functions import transform_bool
    from app.models import TStatutsUtilisateur
    from app.models import TTransactionsCetUtilisateur
    from app.models import TUtilisateur
    from datetime import date
    from django.core.urlresolvers import reverse
    from django.http import HttpResponse
    from django.shortcuts import get_object_or_404
    from django.shortcuts import render
    from django.template.context_processors import csrf
    import json

    output = None

    # Initialisation du préfixe de chaque formulaire
    pref_ajout_statut_agent = 'AjouterStatutAgent'
    pref_ajout_trans_cet_agent = 'AjouterTransactionCetAgent'
    pref_modif_statut_agent = 'ModifierStatutAgent'
    pref_modif_trans_cet_agent = 'ModifierTransactionCetAgent'

    # Tentative d'obtention d'une instance TUtilisateur
    obj_util = get_object_or_404(TUtilisateur, pk=_a)

    # Obtention d'une instance TUtilisateur
    obj_util_connect = TUtilisateur.objects.get(pk=_req.user.pk)

    if _req.method == 'GET':
        if 'action' in _req.GET:

            # Initialisation du formulaire de mise à jour d'un statut agent
            if _req.GET[
                    'action'] == 'initialiser-formulaire-modification-statut-agent' and 'id' in _req.GET:

                # Initialisation du formulaire
                form_ger_statut_util = GererStatutAgent(
                    prefix=pref_modif_statut_agent,
                    instance=TStatutsUtilisateur.objects.get(
                        pk=_req.GET['id']),
                    kw_util=obj_util)

                # Affichage du formulaire
                output = HttpResponse(json.dumps({
                    'success': {
                        'content':
                        get_ft_ger_statut_util(_req, form_ger_statut_util)
                    }
                }),
                                      content_type='application/json')

            # Affichage d'une demande de suppression d'un statut agent
            if _req.GET[
                    'action'] == 'supprimer-statut-agent-etape-1' and 'id' in _req.GET:

                # Stockage en session du statut agent à supprimer
                _req.session['statut_util__pk'] = _req.GET['id']

                # Affichage de la demande de suppression du statut agent
                output = HttpResponse(json.dumps({
                    'success': {
                        'content':
                        affich_dem_suppr(
                            '?action=supprimer-statut-agent-etape-2',
                            'suppr_statut_util')
                    }
                }),
                                      content_type='application/json')

            # Suppression d'un statut agent
            if _req.GET[
                    'action'] == 'supprimer-statut-agent-etape-2' and 'statut_util__pk' in _req.session:

                # Suppression d'une instance TStatutsUtilisateur
                obj_util.get_statut_util_set().get(
                    pk=_req.session['statut_util__pk']).delete()

                # Affichage du message de succès
                output = HttpResponse(json.dumps({
                    'success': {
                        'message':
                        'L\'agent {} a été modifié avec succès.'.format(
                            obj_util),
                        'redirect':
                        reverse('consult_agent', args=[obj_util.get_pk()])
                    }
                }),
                                      content_type='application/json')

            # Initialisation du formulaire de mise à jour d'une transaction sur un CET
            if _req.GET['action'] == 'initialiser-formulaire-modification-transaction-entrante-cet-agent' and \
            'id' in _req.GET :

                # Initialisation du formulaire
                form_ger_trans_cet_util = GererTransactionCetAgent(
                    prefix=pref_modif_trans_cet_agent,
                    instance=TTransactionsCetUtilisateur.objects.get(
                        pk=_req.GET['id']),
                    kw_util=obj_util,
                    kw_util_connect=obj_util_connect)

                # Affichage du formulaire
                output = HttpResponse(json.dumps({
                    'success': {
                        'content':
                        get_ft_ger_trans_cet_util(_req,
                                                  form_ger_trans_cet_util)
                    }
                }),
                                      content_type='application/json')

            # Affichage d'une demande de suppression d'une transaction entrante sur le CET
            if _req.GET[
                    'action'] == 'supprimer-transaction-entrante-cet-agent-etape-1' and 'id' in _req.GET:

                # Stockage en session du statut agent à supprimer
                _req.session['trans_cet_util__pk'] = _req.GET['id']

                # Affichage de la demande de suppression d'une transaction entrante sur le CET
                output = HttpResponse(json.dumps({
                    'success': {
                        'content':
                        affich_dem_suppr(
                            '?action=supprimer-transaction-entrante-cet-agent-etape-2',
                            'suppr_trans_cet_util')
                    }
                }),
                                      content_type='application/json')

            # Suppression d'une transaction entrante sur le CET
            if _req.GET['action'] == 'supprimer-transaction-entrante-cet-agent-etape-2' and \
            'trans_cet_util__pk' in _req.session :

                # Suppression d'une instance TTransactionsCetUtilisateur
                obj_util.get_trans_cet_util_set().get(
                    pk=_req.session['trans_cet_util__pk']).delete()

                # Affichage du message de succès
                output = HttpResponse(json.dumps({
                    'success': {
                        'message':
                        '''
						Le compte épargne temps de l'agent {} a été modifié avec succès.
						'''.format(obj_util),
                        'redirect':
                        reverse('consult_agent', args=[obj_util.get_pk()])
                    }
                }),
                                      content_type='application/json')

            # Téléchargement de la fiche CET d'un agent
            if _req.GET['action'] == 'telecharger-cet-agent' and 'mode-de-tri' in _req.GET and \
            'historique' in _req.GET :
                hist_trans_cet_util = _req.GET['historique']
                if hist_trans_cet_util:
                    hist_trans_cet_util = int(hist_trans_cet_util)
                output = obj_util.get_fiche_cet(_req.GET['mode-de-tri'],
                                                hist_trans_cet_util)

            # Affichage des absences autorisées ou en attente
            if _req.GET[
                    'action'] == 'consulter-absences' and 'annee' in _req.GET:
                output = prep_dtab(obj_util.get_tabl_abs(_req.GET['annee']), {
                    'modal_id': '#fm_consult_abs',
                    'modal_id_action': 'show'
                })

        else:

            # Préparation des attributs disponibles en consultation
            tab_attrs_util = {
                'courr_second_util': {
                    'label': 'Courriel secondaire',
                    'value': obj_util.get_courr_second_util()
                },
                'email': {
                    'label': 'Courriel principal',
                    'value': obj_util.get_email()
                },
                'email_auto_courr_princ': {
                    'label':
                    'Les notifications sont-elles envoyées sur le courriel principal ?',
                    'value':
                    transform_bool(obj_util.get_email_auto_courr_princ())
                },
                'email_auto_courr_second': {
                    'label':
                    'Les notifications sont-elles envoyées sur le courriel secondaire ?',
                    'value':
                    transform_bool(obj_util.get_email_auto_courr_second())
                },
                'en_act': {
                    'label': 'L\'agent est-il en activité ?',
                    'value': transform_bool(obj_util.get_en_act())
                },
                'first_name': {
                    'label': 'Prénom',
                    'value': obj_util.get_first_name()
                },
                'gpe_util': {
                    'label':
                    'Groupes d\'utilisateur',
                    'value':
                    ', '.join(
                        [str(gu) for gu in obj_util.get_gpe_util().all()])
                },
                'is_active': {
                    'label': 'Le compte est-il actif ?',
                    'last_child': True,
                    'value': transform_bool(obj_util.get_is_active())
                },
                'last_name': {
                    'label': 'Nom de famille',
                    'value': obj_util.get_last_name()
                },
                'solde_cet_util': {
                    'label': 'Solde restant sur le compte épargne temps (CET)',
                    'value': obj_util.get_solde_cet_restant_util__str()
                },
                'type_util': {
                    'label':
                    'Quels sont les rôles assignés au compte ?',
                    'value':
                    ', '.join(
                        [str(tu) for tu in obj_util.get_type_util().all()])
                },
                'username': {
                    'label': 'Nom d\'utilisateur',
                    'value': obj_util.get_username()
                }
            }

            # Initialisation des statuts agent
            tab_statut_util = []
            for su in obj_util.get_statut_util_set().all():

                # Détermination du statut agent actuel
                statut_util_actuel = False
                if date.today() > date(su.get_annee().get_pk(),
                                       su.get_mois_deb_statut_util(), 1):
                    statut_util_actuel = True
                    for elem in tab_statut_util:
                        if elem['class']: elem['class'] = None

                tab_statut_util.append({
                    'class':
                    'to-highlight' if statut_util_actuel == True else None,
                    'period_deb_statut_util':
                    su.get_period_deb_statut_util(),
                    'pk':
                    su.get_pk(),
                    'statut_util':
                    su.get_statut_util__str()
                })

            # Initialisation des décomptes agent
            tab_decompt_util = [{
                'annee':
                du.get_annee(),
                'nbre_j_cp_autor':
                du.get_util().get_nbre_j_autor__str(True,
                                                    du.get_annee().get_pk()),
                'nbre_j_cp_base':
                du.get_nbre_j_cp_base__str(),
                'nbre_j_cp_rest':
                du.get_util().get_nbre_j_rest__str(True,
                                                   du.get_annee().get_pk()),
                'nbre_j_cp_transf':
                du.get_util().get_nbre_j_transf__str(True,
                                                     du.get_annee().get_pk()),
                'nbre_j_rtt_autor':
                du.get_util().get_nbre_j_autor__str(False,
                                                    du.get_annee().get_pk()),
                'nbre_j_rtt_base':
                du.get_nbre_j_rtt_base__str(),
                'nbre_j_rtt_rest':
                du.get_util().get_nbre_j_rest__str(False,
                                                   du.get_annee().get_pk()),
                'nbre_j_rtt_transf':
                du.get_util().get_nbre_j_transf__str(False,
                                                     du.get_annee().get_pk()),
            } for du in obj_util.get_decompt_util_set().reverse()]

            # Initialisation du formulaire de tri des transactions d'un CET
            form_tri_trans_cet_util = TrierTransactionsCetAgent(
                kw_util=obj_util)

            # Initialisation des fenêtres modales
            tab_fm = [
                init_fm(
                    'ajout_trans_cet_util', 'Ajouter une transaction entrante',
                    get_ft_ger_trans_cet_util(
                        _req,
                        GererTransactionCetAgent(
                            prefix=pref_ajout_trans_cet_agent,
                            kw_util=obj_util,
                            kw_util_connect=obj_util_connect))),
                init_fm(
                    'ajout_statut_util', 'Ajouter un statut agent',
                    get_ft_ger_statut_util(
                        _req,
                        GererStatutAgent(prefix=pref_ajout_statut_agent,
                                         kw_util=obj_util))),
                init_fm('consult_abs',
                        'Consulter les absences autorisées ou en attente',
                        obj_util.get_tabl_abs()),
                init_fm('modif_statut_util', 'Modifier un statut agent'),
                init_fm('modif_trans_cet_util',
                        'Modifier une transaction entrante'),
                init_fm(
                    'suppr_statut_util',
                    'Êtes-vous sûr de vouloir supprimer définitivement le statut agent ?'
                ),
                init_fm(
                    'suppr_trans_cet_util',
                    'Êtes-vous sûr de vouloir supprimer définitivement la transaction entrante ?'
                )
            ]

            # Affichage du template
            output = render(
                _req, './gest_agents/consult_agent.html', {
                    'a':
                    obj_util,
                    'dtab_tri_trans_cet_util':
                    form_tri_trans_cet_util.init_dtab(_req),
                    'form_tri_trans_cet_util':
                    init_form(form_tri_trans_cet_util),
                    'tab_attrs_util':
                    init_consult(tab_attrs_util),
                    'tab_decompt_util':
                    tab_decompt_util,
                    'tab_fm':
                    tab_fm,
                    'tab_statut_util':
                    tab_statut_util,
                    'title':
                    'Consulter un agent'
                })

    else:
        if 'action' in _req.GET:

            # Définition du préfixe du formulaire de gestion des statuts agent
            if _req.GET['action'] == 'ajouter-statut-agent':
                prefix = pref_ajout_statut_agent
            elif _req.GET['action'] == 'modifier-statut-agent':
                prefix = pref_modif_statut_agent
            else:
                prefix = None

            if prefix:

                # Stockage des données du formulaire
                val_pk = _req.POST.get('{}-zsc_pk'.format(prefix))

                # Soumission du formulaire
                form_ger_statut_util = GererStatutAgent(
                    _req.POST,
                    instance=TStatutsUtilisateur.objects.get(
                        pk=val_pk) if val_pk else None,
                    prefix=prefix,
                    kw_util=obj_util)

                if form_ger_statut_util.is_valid():

                    # Création/modification d'une instance TStatutsUtilisateur
                    obj_statut_util_valid = form_ger_statut_util.save()

                    # Affichage du message de succès
                    output = HttpResponse(json.dumps({
                        'success': {
                            'message':
                            '''
							L'agent {} a été modifié avec succès.
							'''.format(obj_statut_util_valid.get_util()),
                            'redirect':
                            reverse(
                                'consult_agent',
                                args=[
                                    obj_statut_util_valid.get_util().get_pk()
                                ])
                        }
                    }),
                                          content_type='application/json')

                else:

                    # Affichage des erreurs
                    tab_errs = {
                        '{0}-{1}'.format(prefix, cle): val
                        for cle, val in form_ger_statut_util.errors.items()
                    }
                    output = HttpResponse(json.dumps(tab_errs),
                                          content_type='application/json')

            # Définition du préfixe du formulaire de gestion des transactions entrantes sur le CET agent
            if _req.GET['action'] == 'ajouter-transaction-entrante-cet-agent':
                prefix = pref_ajout_trans_cet_agent
            elif _req.GET[
                    'action'] == 'modifier-transaction-entrante-cet-agent':
                prefix = pref_modif_trans_cet_agent
            else:
                prefix = None

            if prefix:

                # Stockage des données du formulaire
                val_pk = _req.POST.get('{}-zsc_pk'.format(prefix))

                # Soumission du formulaire
                form_ger_trans_cet_util = GererTransactionCetAgent(
                    _req.POST,
                    instance=TTransactionsCetUtilisateur.objects.get(
                        pk=val_pk) if val_pk else None,
                    prefix=prefix,
                    kw_util=obj_util,
                    kw_util_connect=obj_util_connect)

                if form_ger_trans_cet_util.is_valid():

                    # Création/modification d'une instance TTransactionsCetUtilisateur
                    obj_trans_cet_util_valid = form_ger_trans_cet_util.save()

                    # Affichage du message de succès
                    output = HttpResponse(json.dumps({
                        'success': {
                            'message':
                            '''
							Le compte épargne temps de l'agent {} a été modifié avec succès.
							'''.format(obj_trans_cet_util_valid.get_util()),
                            'redirect':
                            reverse('consult_agent',
                                    args=[
                                        obj_trans_cet_util_valid.get_util().
                                        get_pk()
                                    ])
                        }
                    }),
                                          content_type='application/json')

                else:

                    # Affichage des erreurs
                    tab_errs = {
                        '{0}-{1}'.format(prefix, cle): val
                        for cle, val in form_ger_trans_cet_util.errors.items()
                    }
                    output = HttpResponse(json.dumps(tab_errs),
                                          content_type='application/json')

            # Traitement du cas où je dois rafraîchir la fiche CET d'un agent (altération du mode de tri)
            if _req.GET['action'] == 'trier-transactions-cet-agent':

                # Soumission du formulaire
                form_tri_trans_cet_util = TrierTransactionsCetAgent(
                    _req.POST, kw_util=obj_util)

                # Rafraîchissement de la datatable ou affichage des erreurs
                if form_tri_trans_cet_util.is_valid():
                    output = prep_dtab(form_tri_trans_cet_util.init_dtab(_req))
                else:
                    output = HttpResponse(json.dumps(
                        form_tri_trans_cet_util.errors),
                                          content_type='application/json')

    return output