templates/Reporting/Dashboard/index.html.twig line 1

Open in your IDE?
  1. {% extends 'base.html.twig' %}
  2. {% set bodyClass = 'reporting_dashboard' %}
  3. {% set menuItem = 'reporting_dashboard' %}
  4. {% block body_head %}
  5.     <h1>
  6.         {{ 'reporting.dashboard.title.index'|trans }}
  7.         <small>{{ app.user.collectivity }}</small>
  8.     </h1>
  9. {% endblock %}
  10. {% block breadcrumb %}
  11.     {% set breadcrumb = [] %}
  12.     {% include '_breadcrumb.html.twig' with {'breadcrumb': breadcrumb} %}
  13. {% endblock %}
  14. {% block body %}
  15.     <div class="tdb">
  16.         <div class="row">
  17.             {# LEFT #}
  18.             <div class="col-md-6">
  19.                 <div class="row">
  20.                     {# DETAIL : CONTRACTOR #}
  21.                     <div class="col-md-6">
  22.                         <div class="box box-solid">
  23.                             <div class="box-header with-border"><h3 class="box-title">Sous-traitants</h3></div>
  24.                             <div class="box-body">
  25.                                 {% if 0 == data.contractor.all %}
  26.                                     Aucune donnée à afficher
  27.                                 {% else %}
  28.                                     <div class="col-sm-6 col-sm-offset-0 col-xs-4 col-xs-offset-1 text-center">
  29.                                         <canvas id="contractor-clauses" width="400" height="400"></canvas>
  30.                                         <p>{{ 'reporting.dashboard.contractor.contractual_clauses_verified.title'|trans }}</p>
  31.                                     </div>
  32.                                     <div class="col-sm-6 col-sm-offset-0 col-xs-4 col-xs-offset-1 text-center">
  33.                                         <canvas id="contractor-adopted-security-features" width="400" height="400"></canvas>
  34.                                         <p>{{ 'reporting.dashboard.contractor.adopted_security_features.title'|trans }}</p>
  35.                                     </div>
  36.                                     <div class="col-sm-6 col-sm-offset-0 col-xs-4 col-xs-offset-1 text-center">
  37.                                         <canvas id="contractor-maintains-treatment-register" width="400" height="400"></canvas>
  38.                                         <p>{{ 'reporting.dashboard.contractor.maintains_treatment_register.title'|trans }}</p>
  39.                                     </div>
  40.                                     <div class="col-sm-6 col-sm-offset-0 col-xs-4 col-xs-offset-1 text-center">
  41.                                         <canvas id="contractor-sending-data-outside-eu" width="400" height="400"></canvas>
  42.                                         <p>{{ 'reporting.dashboard.contractor.sending_data_outside_eu.title'|trans }}</p>
  43.                                     </div>
  44.                                 {% endif %}
  45.                             </div>
  46.                         </div>
  47.                     </div>
  48.                     <div class="col-md-6">
  49.                         {# REQUEST #}
  50.                         <div class="small-box bg-yellow">
  51.                             <div class="inner">
  52.                                 <h3>{{ data.request.value.status.toProcess }}</h3>
  53.                                 <p>Demandes à traiter</p>
  54.                             </div>
  55.                             <div class="icon">
  56.                                 <i class="fa fa-users"></i>
  57.                             </div>
  58.                             <a aria-label="Plus d'informations" href="{{ path('registry_request_list') }}" class="small-box-footer">
  59.                                 Plus d'informations <i class="fa fa-arrow-circle-right"></i>
  60.                             </a>
  61.                         </div>
  62.                         <div class="box box-solid">
  63.                             <div class="box-header with-border"><h3 class="box-title">Demandes</h3></div>
  64.                             <div class="box-body">
  65.                                 {% if 0 == data.request.value.all %}
  66.                                     Aucune donnée à afficher
  67.                                 {% else %}
  68.                                     <div class="col-sm-6 col-sm-offset-0 col-xs-4 col-xs-offset-1 text-center" style="padding-left: 0; padding-right: 0;">
  69.                                         <canvas id="request-type" width="500" height="500"></canvas>
  70.                                         <p>{{ 'reporting.dashboard.request.type.title'|trans }}</p>
  71.                                     </div>
  72.                                     <div class="col-sm-6 col-sm-offset-0 col-xs-4 col-xs-offset-1 text-center" style="padding-left: 0; padding-right: 0;">
  73.                                         <canvas id="request-status" width="500" height="500"></canvas>
  74.                                         <p>{{ 'reporting.dashboard.request.status.title'|trans }}</p>
  75.                                     </div>
  76.                                 {% endif %}
  77.                             </div>
  78.                         </div>
  79.                     </div>
  80.                 </div>
  81.                 <div class="row">
  82.                     <div class="col-md-12">
  83.                         {# DETAIL : MATURITY #}
  84.                         <div class="box box-solid">
  85.                             <div class="box-header with-border"><h3 class="box-title">Indice de maturité</h3></div>
  86.                             <div class="box-body">
  87.                                 <style>
  88.                                     .dropdown.bootstrap-select {
  89.                                         width: 100% !important;
  90.                                     }
  91.                                 </style>
  92.                                 <select class="selectpicker" id="referentiel-chooser">
  93.                                     {% for ref in referentiels %}
  94.                                         <option value="{{ ref.id }}" {% if ref.id == selected_ref.id %}selected{% endif %}>{{ ref.name }}</option>
  95.                                     {% endfor %}
  96.                                 </select>
  97.                                 <div style="margin-top: 1em">
  98.                                     {% if data.maturity is empty %}
  99.                                         Aucun indice à afficher
  100.                                     {% else %}
  101.                                         {% if data.maturity.new is defined and data.maturity.new.data is defined and data.maturity.new.data|length >= 3 %}
  102.                                         <canvas id="maturity-radar"></canvas>
  103.                                             {% else %}
  104.                                             Le référentiel contient moins de trois sections
  105.                                         {% endif %}
  106.                                     {% endif %}
  107.                                 </div>
  108.                             </div>
  109.                         </div>
  110.                         {# DETAIL : TREATMENTS #}
  111.                         <div class="box box-solid">
  112.                             <div class="box-header with-border"><h3 class="box-title">Mesures de sécurité</h3></div>
  113.                             <div class="box-body">
  114.                                 {% if 0 == data.treatment.value.numeric %}
  115.                                     Aucun traitement utilisable pour ce graphe
  116.                                 {% else %}
  117.                                     <canvas id="treatment-bar"></canvas>
  118.                                 {% endif %}
  119.                             </div>
  120.                         </div>
  121.                     </div>
  122.                 </div>
  123.                 {% if app.user.collectivity.hasModuleConformiteTraitement == true or
  124.                     app.user.collectivity.hasModuleConformiteOrganisation == true %}
  125.                     <div class="row">
  126.                         <div class="col-md-12">
  127.                             {# DETAIL : CONFORMITE TRAITEMENT #}
  128.                             {% if app.user.collectivity.hasModuleConformiteTraitement == true %}
  129.                                 <div class="box box-solid">
  130.                                     <div class="box-header with-border"><h3 class="box-title">Conformité des traitements</h3></div>
  131.                                     <div class="box-body">
  132.                                         {% if data.conformiteTraitement.data is empty %}
  133.                                             Aucune donnée à afficher
  134.                                         {% else %}
  135.                                             <canvas id="conformiteTraitement-pie"></canvas>
  136.                                         {% endif %}
  137.                                     </div>
  138.                                 </div>
  139.                             {% endif %}
  140.                         </div>
  141.                     </div>
  142.                 {% endif %}
  143.             </div>
  144.             {# RIGHT #}
  145.             <div class="col-md-6">
  146.                 <div class="row">
  147.                     {# AIPD #}
  148.                     <div class="col-sm-6 col-xs-12">
  149.                         {% if app.user.collectivity.hasModuleConformiteTraitement == true %}
  150.                             <div class="small-box bg-light-blue">
  151.                                 <div class="inner">
  152.                                     <h3>{{ data.aipd.toDo }}</h3>
  153.                                     <p>AIPD à réaliser</p>
  154.                                 </div>
  155.                                 <div class="icon">
  156.                                     <i class="fa fa-clipboard-list"></i>
  157.                                 </div>
  158.                                 <a aria-label="Plus d'informations" href="{{ path('registry_conformite_traitement_list') }}" class="small-box-footer">
  159.                                     Plus d'informations <i class="fa fa-arrow-circle-right"></i>
  160.                                 </a>
  161.                             </div>
  162.                         {% endif %}
  163.                     </div>
  164.                     {# Action to realize #}
  165.                     <div class="col-sm-6 col-xs-12">
  166.                         <div class="small-box bg-aqua">
  167.                             <div class="inner">
  168.                                 <h3>{{ data.mesurement.value.planified }}</h3>
  169.                                 <p>Actions planifiées</p>
  170.                             </div>
  171.                             <div class="icon">
  172.                                 <i class="fa fa-bullseye"></i>
  173.                             </div>
  174.                             <a aria-label="Plus d'informations" href="{{ path('registry_mesurement_action_plan') }}" class="small-box-footer">
  175.                                 Plus d'informations <i class="fa fa-arrow-circle-right"></i>
  176.                             </a>
  177.                         </div>
  178.                     </div>
  179.                 </div>
  180.                 <div class="row">
  181.                     {# VIOLATION #}
  182.                     <div class="col-sm-6 col-xs-12">
  183.                         <div class="small-box bg-red">
  184.                             <div class="inner">
  185.                                 <h3>{{ data.violation.value.all }}</h3>
  186.                                 <p>Violations</p>
  187.                             </div>
  188.                             <div class="icon">
  189.                                 <i class="fa fa-exclamation-circle"></i>
  190.                             </div>
  191.                             <a aria-label="Plus d'informations" href="{{ path('registry_violation_list') }}" class="small-box-footer">
  192.                                 Plus d'informations <i class="fa fa-arrow-circle-right"></i>
  193.                             </a>
  194.                         </div>
  195.                     </div>
  196.                     {# MESUREMENT : applied #}
  197.                     <div class="col-sm-6 col-xs-12">
  198.                         <div class="small-box bg-green">
  199.                             <div class="inner">
  200.                                 <h3>{{ data.mesurement.value.applied }}</h3>
  201.                                 <p>Actions mises en place</p>
  202.                             </div>
  203.                             <div class="icon">
  204.                                 <i class="fa fa-adjust"></i>
  205.                             </div>
  206.                             <a aria-label="Plus d'informations" href="{{ path('registry_mesurement_list') }}" class="small-box-footer">
  207.                                 Plus d'informations <i class="fa fa-arrow-circle-right"></i>
  208.                             </a>
  209.                         </div>
  210.                     </div>
  211. {#                    <div class="col-sm-12">#}
  212. {#                        {% if app_activate_notifications and app_notification_dashboard_shown == 'true' %}#}
  213. {#                            #}{# {{app_notification_max_shown}} #}
  214. {#                            <div id="notifications" class="box box-solid">#}
  215. {#                                {{ block("body", "Notification/Notification/box.html.twig") }}#}
  216. {#                            </div>#}
  217. {#                        {% endif %}#}
  218. {#                    </div>#}
  219.                 </div>
  220.                 <div class="row">
  221.                     <div class="col-md-12">
  222.                         <div class="box box-warning">
  223.                             <div class="box-header with-border"><h3 class="box-title">Plan d'actions <small>{{ app_user_dashboard_action_plan_limit }} prochaines</small></h3></div>
  224.                             <div class="box-body">
  225.                                 <table role="presentation" class="table table-striped table-bordered">
  226.                                     <thead>
  227.                                     <tr>
  228.                                         <th scope="col">{{ 'registry.mesurement.list.name'|trans }}</th>
  229.                                         <th scope="col">{{ 'registry.mesurement.list.planification_date'|trans }}</th>
  230.                                         <th scope="col">{{ 'registry.mesurement.list.priority'|trans }}</th>
  231.                                         <th scope="col">{{ 'registry.mesurement.list.manager'|trans }}</th>
  232.                                         <th scope="col">{{ 'label.action_link'|trans }}</th>
  233.                                     </tr>
  234.                                     </thead>
  235.                                     <tbody>
  236.                                     {% if not actions|length %}
  237.                                         <tr>
  238.                                             <td colspan="5" style="text-align: center">
  239.                                                 Aucune action planifiée
  240.                                             </td>
  241.                                         </tr>
  242.                                     {% endif %}
  243.                                     {% for action in actions %}
  244.                                         <tr>
  245.                                             <td>{{ action.name }}</td>
  246.                                             <td>{{ action.planificationDate|date('d/m/Y') }}</td>
  247.                                             <td>
  248.                                                 {% set key = action.priority %}
  249.                                                 {% if key is not null %}
  250.                                                     {% if key is same as ('low') %}
  251.                                                         <span class="badge bg-blue">{{ dictionary('registry_mesurement_priority')[key] }}</span>
  252.                                                     {% elseif key is same as ('normal') %}
  253.                                                         <span class="badge bg-yellow">{{ dictionary('registry_mesurement_priority')[key] }}</span>
  254.                                                     {% elseif key is same as ('high') %}
  255.                                                         <span class="badge bg-red">{{ dictionary('registry_mesurement_priority')[key] }}</span>
  256.                                                     {% endif %}
  257.                                                 {% endif %}
  258.                                             </td>
  259.                                             <td>{{ action.manager }}</td>
  260.                                             <td>
  261.                                                 <a aria-label="Chercher" href="/actions-de-protection/visualiser/{{ action.id }}" ><i class="fas fa-search"></i></a>
  262.                                             </td>
  263.                                         </tr>
  264.                                     {% endfor %}
  265.                                     </tbody>
  266.                                 </table>
  267.                             </div>
  268.                         </div>
  269.                     </div>
  270.                 </div>
  271.                 <div class="row">
  272.                     {% if app.user.collectivity.hasModuleConformiteOrganisation == true %}
  273.                         <div class="col-md-12">
  274.                             {# DETAIL : CONFORMITE ORGANISATION #}
  275.                             <div class="box box-solid">
  276.                                 <div class="box-header with-border"><h3 class="box-title">Conformité de la structure</h3></div>
  277.                                 {% if data.conformiteOrganisation is empty %}
  278.                                     <div class="box-body">
  279.                                         Aucune donnée à afficher
  280.                                     </div>
  281.                                 {% else %}
  282.                                     <div class="box-body no-padding">
  283.                                         <table role="presentation" class="table table-striped">
  284.                                             <thead>
  285.                                             <tr>
  286.                                                 <th scope="col">Processus</th>
  287.                                                 <th scope="col">Progression</th>
  288.                                                 <th style="width: 40px" scope="col">Conformité</th>
  289.                                             </tr>
  290.                                             </thead>
  291.                                             <tbody>
  292.                                             {% for conformite in data.conformiteOrganisation %}
  293.                                                 {% set score = (conformite['conformite'] / 5 * 100) %}
  294.                                                 {% if score < 50 %}
  295.                                                     {% set color = 'red' %}
  296.                                                 {% elseif score < 70 %}
  297.                                                     {% set color = 'yellow' %}
  298.                                                 {% else %}
  299.                                                     {% set color = 'green' %}
  300.                                                 {% endif %}
  301.                                                 <tr>
  302.                                                     <td>{{ conformite['processus'] }}</td>
  303.                                                     <td>
  304.                                                         <div class="progress progress-xs">
  305.                                                             <div class="progress-bar progress-bar-{{ color }}" style="width: {{ score }}%"></div>
  306.                                                         </div>
  307.                                                     </td>
  308.                                                     <td>
  309.                                                         <span style="min-width: 100%" class="badge bg-{{ color }}">{{ score }}%</span>
  310.                                                     </td>
  311.                                                 </tr>
  312.                                             {% endfor %}
  313.                                             </tbody>
  314.                                         </table>
  315.                                     </div>
  316.                                 {% endif %}
  317.                             </div>
  318.                         </div>
  319.                     {% endif %}
  320.                 </div>
  321.             </div>
  322.         </div>
  323.         {# JOURNALISATION #}
  324.         <div class="row">
  325.             <div class="col-md-12">
  326.                 <div class="box box-solid">
  327.                     <div class="box-header with-border">
  328.                         <h3 class="box-title">Journalisation <small>{{ app_user_dashboard_journalisation_limit }} dernières actions</small></h3>
  329.                     </div>
  330.                     <div class="box-body no-padding">
  331.                         <table role="presentation" class="table">
  332.                             <thead>
  333.                             <tr>
  334.                                 <th scope="col">Nom utilisateur</th>
  335.                                 <th scope="col">Email utilisateur</th>
  336.                                 <th scope="col">Date</th>
  337.                                 <th scope="col">Sujet</th>
  338.                                 <th scope="col">Action</th>
  339.                                 <th scope="col">Nom</th>
  340.                                 <th scope="col">Lien</th>
  341.                             </tr>
  342.                             </thead>
  343.                             <tbody>
  344.                             {% for logJournal in data.logJournal %}
  345.                                 {% set logJournalLink = getLogJournalLink(logJournal) %}
  346.                                 <tr>
  347.                                     <td>{{ logJournal.userFullName }}</td>
  348.                                     <td>{{ logJournal.userEmail }}</td>
  349.                                     <td>{{ logJournal.date|date('d/m/Y') }}</td>
  350.                                     <td>{{ logJournal.subjectType ? logJournal.subjectType|dictionary('reporting_log_journal_subject') : '' }}</td>
  351.                                     <td>{{ logJournal.action ? logJournal.action|dictionary('reporting_log_journal_action') : '' }}</td>
  352.                                     <td>{{ logJournal.subjectName }}</td>
  353.                                     <td>
  354.                                         {% if logJournal.isDeleted %}
  355.                                             {{ logJournalLink }}
  356.                                         {% elseif logJournalLink is not null %}
  357.                                             <a aria-label="Lien" href="{{ logJournalLink }}">Lien</a>
  358.                                         {% endif %}
  359.                                     </td>
  360.                                 </tr>
  361.                             {% endfor %}
  362.                             </tbody>
  363.                         </table>
  364.                     </div>
  365.                 </div>
  366.             </div>
  367.         </div>
  368.     </div>
  369.     {% endblock %}
  370. {% block javascripts %}
  371.     <script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.9.3/Chart.min.js"></script>
  372.     <script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.9.3/Chart.bundle.min.js"></script>
  373.     {# DEFINE DATA #}
  374.     <script>
  375.         let labelYes = '{{ 'label.yes'|trans }}';
  376.         let labelNo = '{{ 'label.no'|trans }}';
  377.         let colorBlue = 'rgba(54, 162, 235, 1)';
  378.         let colorBlueOpacity = 'rgba(54, 162, 235, 0.5)';
  379.         let colorGreen = ' rgba(48, 183, 44, 1)';
  380.         let colorGreenOpacity = ' rgba(48, 183, 44, 0.5)';
  381.         let colorPurple = 'rgba(153, 51, 204, 1)';
  382.         let colorPurpleOpacity = 'rgba(153, 51, 204, 0.5)';
  383.         let colorRed = 'rgba(255, 99, 132, 1)';
  384.         let colorRedOpacity = 'rgba(255, 99, 132, 0.5)';
  385.         let colorTeal = 'rgba(0, 105, 92, 1)';
  386.         let colorTealOpacity = 'rgba(0, 105, 92, 0.5)';
  387.         let colorOrange = 'rgb(255, 136, 0, 1)';
  388.         let colorOrangeOpacity = 'rgb(255, 136, 0, 0.5)';
  389.         let labelYesNo = [labelYes, labelNo];
  390.         // CONTRACTOR
  391.         let contractorClausesData = [{{ data.contractor.clauses.yes }}, {{ data.contractor.clauses.no }}];
  392.         let contractorAdoptedSecurityFeaturesData = [{{ data.contractor.adoptedSecurityFeatures.yes }}, {{ data.contractor.adoptedSecurityFeatures.no }}];
  393.         let contractorMaintainsTreatmentRegisterData = [{{ data.contractor.maintainsTreatmentRegister.yes }}, {{ data.contractor.maintainsTreatmentRegister.no }}];
  394.         let contractorSendingDataOutsideEuData = [{{ data.contractor.sendingDataOutsideEu.yes }}, {{ data.contractor.sendingDataOutsideEu.no }}];
  395.         // MESUREMENT
  396.         let mesurementStatusData = [{{ data.mesurement.value.applied }}, {{ data.mesurement.value.planified }}, {{ data.mesurement.value.notApplied }}];
  397.         // MATURITY
  398.         let maturityLabels = [];
  399.         let maturitySerieLabel = [];
  400.         let maturityData = [];
  401.         {% if data.maturity.new is defined %}
  402.             let tmpData1 = [];
  403.             maturitySerieLabel.push('{{ data.maturity.new.name }}');
  404.             {% for position, info in data.maturity.new.data %}
  405.                 maturityLabels.push('{{ info.name }}');
  406.                 tmpData1.push('{{ info.score }}');
  407.             {% endfor %}
  408.             maturityData.push(tmpData1);
  409.         {% endif %}
  410.         {% if data.maturity.old is defined %}
  411.             let tmpData2 = [];
  412.             maturitySerieLabel.push('{{ data.maturity.old.name }}');
  413.             {% for position, info in data.maturity.old.data %}
  414.                 tmpData2.push('{{ info.score }}');
  415.             {% endfor %}
  416.             maturityData.push(tmpData2);
  417.         {% endif %}
  418.         // REQUEST
  419.         let requestTypeLabel = [
  420.             'Rectifier des données',
  421.             'Supprimer des données',
  422.             'Retirer le consentement',
  423.             'Accéder à des données',
  424.             'Portabilité des données',
  425.             'Limiter le traitement',
  426.             'Autre',
  427.         ];
  428.         let requestTypeData = [];
  429.         {% if data.request.value.type.correct %}
  430.             requestTypeData.push({{ data.request.value.type.correct }});
  431.         {% elseif data.request.value.type.delete %}
  432.             requestTypeData.push({{ data.request.value.type.delete }});
  433.         {% elseif data.request.value.type.withdrawConsent %}
  434.             requestTypeData.push({{ data.request.value.type.withdrawConsent }});
  435.         {% elseif data.request.value.type.access %}
  436.             requestTypeData.push({{ data.request.value.type.access }});
  437.         {% elseif data.request.value.type.dataPortability %}
  438.             requestTypeData.push({{ data.request.value.type.dataPortability }});
  439.         {% elseif data.request.value.type.limitTreatment %}
  440.             requestTypeData.push({{ data.request.value.type.limitTreatment }});
  441.         {% elseif data.request.value.type.other %}
  442.             requestTypeData.push({{ data.request.value.type.other }});
  443.         {% endif %}
  444.         let requestStatusLabel = [
  445.             'Traité',
  446.             'À traiter',
  447.             'Non-recevable',
  448.         ];
  449.         let requestStatusData = [];
  450.         {% if data.request.value.status.processed %}
  451.             requestStatusData.push({{ data.request.value.status.processed }});
  452.         {% elseif data.request.value.status.toProcess %}
  453.             requestStatusData.push({{ data.request.value.status.toProcess }});
  454.         {% elseif data.request.value.status.incomplete %}
  455.             requestStatusData.push({{ data.request.value.status.incomplete }});
  456.         {% endif %}
  457.         // TREATMENT
  458.         let treatmentLabels = [
  459.             'Contrôle d\'accès',
  460.             'Traçabilité',
  461.             'Sauvegarde',
  462.             'Mises à jour',
  463.         ];
  464.         let treatmentDatasetYes = [];
  465.         let treatmentDatasetNo = [];
  466.         {% for key, item in data.treatment.value.data %}
  467.             {% set yesItem = attribute(item, 'yes') %}
  468.             {% set noItem = attribute(item, 'no') %}
  469.             {% if yesItem > 0 or noItem > 0  %}
  470.             treatmentDatasetYes.push('{{ attribute(item, 'yes') }}');
  471.             treatmentDatasetNo.push('{{ attribute(item, 'no') }}');
  472.             {% endif %}
  473.         {% endfor %}
  474.         // CONFORMITE TRAITEMENT
  475.         let conformiteTraitementLabels = {{ data.conformiteTraitement.labels|json_encode|raw }};
  476.         let conformiteTraitementData = [];
  477.         {% if data.conformiteTraitement.data %}
  478.             conformiteTraitementData = {{ data.conformiteTraitement.data|json_encode|raw }};
  479.         {% endif %}
  480.         let conformiteTraitementColors = {{ data.conformiteTraitement.colors|json_encode|raw }};
  481.     </script>
  482.     {# USE DATA & DEFINE GRAPH #}
  483.     {{ encore_entry_script_tags('js/dashboard') }}
  484.     <script>
  485.         $(document).ready(function() {
  486.             $('body').on('change', '#referentiel-chooser', function() {
  487.                 console.log('change', $(this).val());
  488.                 window.location.href = "{{ app.request.pathinfo }}?referentiel=" + $(this).val();
  489.             })
  490.         })
  491.     </script>
  492. {% endblock %}