/[openfoncier]/trunk/app/js/script.js
ViewVC logotype

Annotation of /trunk/app/js/script.js

Parent Directory Parent Directory | Revision Log Revision Log


Revision 19592 - (hide annotations)
Wed Jan 22 18:04:27 2025 UTC (11 days, 22 hours ago) by softime
File MIME type: application/javascript
File size: 306961 byte(s)
merge: fusion de la branche d'intégration v6.10.0-develop dans le trunk

1 mbroquet 3730 /**
2     * Script JS spécifique à l'applicatif, ce script est destiné à être
3     * appelé en dernier dans la pile des fichiers JS.
4     *
5     * @package openfoncier
6     * @version SVN : $Id: script.js 6066 2016-03-01 11:11:26Z nhaye $
7     */
8    
9 softime 6565 /**
10 softime 8989 * UUID utilisé pour détecter si ce fichier a été chargé.
11     *
12     * Utilisé actuellement par le détecteur de bloqueur de pub.
13     */
14     var app_script_t4Fv4a59uSU7MwpJ59Qp = true;
15    
16     /**
17 softime 16749 * Variable utilisé pour stocker le numero de dossier complet lors de la création d'un nouveau
18     * dossier en cas de case de numero de dossier complet decoché
19     */
20     var get_num_dossier_complet = null;
21    
22     /**
23     *
24     *
25     */
26     var getting_num_dossier_seq = false;
27    
28     /**
29 softime 6565 * Méthode exécutée au chargement de la page.
30     * Permet, au rafraichissement de la page, d'avoir le focus des champs à saisir
31     * et le bind des actions direct du portlet.
32     *
33     * @return {[type]} [description]
34     */
35     function initBindFocus(){
36 mbroquet 3730
37     /**
38     * Ajout du focus sur le champ login au chargement de la page.
39     */
40     $('#login_form #login').focus();
41    
42     /**
43     * Spécifique à l'action affichage_reglementaire_attestation de la classe
44     * demande pour donner le focus sur le champ de recherche au chargement de
45     * la page.
46     */
47     $('#affichage_reglementaire_attestation_form #dossier').focus();
48    
49     /**
50     * WIDGET DASHBOARD - widget_recherche_dossier.
51     *
52     * Spécifique app/widget_recherche_dossier.php pour donner le
53     * focus sur le champ de recherche au chargement de la page.
54     */
55     $('#widget_recherche_dossier_form #dossier').focus();
56    
57 softime 6565 /**
58     * WIDGET DASHBOARD - widget_recherche_dossier_par_type.
59     *
60     * Spécifique app/widget_recherche_dossier_par_type.php pour donner le
61     * focus sur le champ de recherche au chargement de la page.
62     */
63     $('#widget_recherche_dossier_par_type_form #dossier').focus();
64    
65 mbroquet 3730 /**
66     * Spécifique app/suivi_retours_de_consultation.php pour donner le focus sur le champ de
67     * recherche au chargement de la page.
68     */
69     $('#suivi_retours_de_consultation_form #code_barres').focus();
70    
71     /**
72     * Spécifique app/suivi_mise_a_jour_des_dates.php pour donner le focus sur le champ
73     * instruction au chargement de la page si la date n'est pas vide.
74     */
75     if($('#suivi_mise_a_jour_des_dates_form #date').val()!="") {
76     $('#suivi_mise_a_jour_des_dates_form #code_barres').focus();
77     }
78    
79     /**
80     * Spécifique app/suivi_envoi_lettre_rar.php pour donner le focus sur le champ
81     * liste des codes barres d'instructions scannés au chargement de la page.
82     */
83     $('#suivi_envoi_lettre_rar_form #liste_code_barres_instruction').focus();
84    
85     /**
86     * Spécifique app/suivi_mise_a_jour_des_dates.php pour donner le focus sur le champ
87     * instruction au chargement de la page si la date n'est pas vide.
88     */
89     if($('#bordereau_envoi_maire #date').val()!="") {
90     $('#bordereau_envoi_maire #code_barres').focus();
91     }
92    
93     /**
94     * Sur les widgets du tableau de bord, si on détecte un bloc d'aide
95     * alors on le déplace dans le titre du widget (i).
96     */
97     $("#dashboard .widget-content div.widget-help").each(function(){
98     widget = $(this).parent().parent().parent();
99     header = widget.find(".widget-header");
100     header.prepend($(this));
101     });
102    
103     /**
104     * Affichage d'un dialog pour les règles de calcul associés à l'action
105     */
106     $('.regle_action').dialog({
107     autoOpen: false,
108     show: "fade",
109     hide: "fade",
110     dialogClass: "alert",
111     minHeight: 30,
112 softime 15650 minWidth: 200
113 mbroquet 3730 });
114    
115     $('.wf_evenement_action').mouseover(
116     function(){
117     var id = $(this).attr("id");
118 softime 14542 // Ajout d'une classe permettant de sélectionner les dialog du workflow
119 softime 15650 if ($( "#regle_action"+ id ).length) {
120     $(this).addClass("cursor-help")
121     };
122 softime 14542 $( "#regle_action"+ id ).parent().addClass("alert_regle_action");
123 softime 15650 $( "#regle_action"+ id ).dialog({ position: { my: "left", at: "right", of: $(this) }, resizable: false });
124 mbroquet 3730 $( "#regle_action"+ id ).dialog("open");
125     $(".ui-dialog-titlebar").hide();
126     }
127     );
128    
129     $('.wf_evenement_action').mouseleave(
130     function(){
131     var id = $(this).attr("id");
132     $( "#regle_action"+ id ).dialog( "close" );
133     }
134     );
135    
136     /**
137     * Plugin jquery qui bind les actions du formulaire dossier_instruction pour
138     * ouvrir des overlay.
139     *
140     * @param string action Identifiant de l'action
141     * @param string obj Formulaire ouvert en overlay
142     *
143     * @return void
144     */
145     (function($){
146     //Within this wrapper, $ is the jQuery namespace
147 softime 16749 $.fn.bind_action_for_overlay = function(obj, width, height, callback, callbackParams, position, resizable, insert_after) {
148 mbroquet 3730 if( typeof(width) == 'undefined' ){
149     width = 'auto';
150     }
151     if( typeof(height) == 'undefined' ){
152     height = 'auto';
153     }
154     if( typeof(callback) == 'undefined' ){
155     callback = '';
156     }
157     if( typeof(callbackParams) == 'undefined' ){
158     callbackParams = '';
159     }
160 softime 9245 if( typeof(position) == 'undefined' ){
161     position = 'left top';
162     }
163 mbroquet 3730
164     // bind de la function passée en arg sur l'event click des actions portlet
165 nhaye 5254 $(this).off("click").on("click", function(event) {
166 mbroquet 3730 //
167     elem_href = $(this).attr('href');
168     if (elem_href != '#') {
169     $(this).attr('data-href', elem_href);
170     $(this).attr('href', '#');
171     }
172     //
173 softime 16749 popupIt(obj, $(this).attr('data-href'), width, height, callback, callbackParams, position, resizable, insert_after);
174 mbroquet 3730 });
175     return $(this);
176     }
177     })(jQuery);
178    
179 softime 10808 // Bind actions formulaire de sélection des demandeurs à notifier depuis instruction
180     $('a[id^=action-sousform-instruction][id$=-overlay_notification_manuelle]').each(function(){
181     $(this).bind_action_for_overlay("instruction_notification_manuelle");
182     });
183 softime 11585 // Bind actions formulaire de sélection des services à notifier depuis instruction
184     $('a[id^=action-sousform-instruction][id$=-overlay_notification_service_consulte]').each(function(){
185     $(this).bind_action_for_overlay("instruction_notification_manuelle");
186     });
187     // Bind actions formulaire de sélection des tiers à notifier depuis instruction
188     $('a[id^=action-sousform-instruction][id$=-overlay_notification_tiers_consulte]').each(function(){
189     $(this).bind_action_for_overlay("instruction_notification_manuelle");
190     });
191 mbroquet 3730 // Bind actions données techniques depuis dossier instruction
192     $('a[id^=action-form-dossier_instruction][id$=-donnees_techniques]').each(function(){
193 softime 13137 $(this).bind_action_for_overlay("donnees_techniques", "90%");
194 mbroquet 3730 });
195 softime 6565 // Bind actions données techniques depuis dossier contentieux
196     $('a[id^=action-form-dossier_contentieux][id$=-donnees_techniques]').each(function(){
197     $(this).bind_action_for_overlay("donnees_techniques_contexte_ctx");
198     });
199 softime 12847 // Bind actions données techniques depuis sous-dossier
200     $('a[id^=action-form-sous_dossier][id$=-donnees_techniques]').each(function(){
201     $(this).bind_action_for_overlay("donnees_techniques");
202     });
203 mbroquet 3730 // Bind actions rapport d'instruction depuis dossier instruction
204     $('a[id^=action-form-dossier_instruction][id$=-rapport_instruction]').each(function(){
205     $(this).bind_action_for_overlay("rapport_instruction");
206     });
207 softime 12847 // Bind actions rapport d'instruction depuis sous-dossier
208     $('a[id^=action-form-sous_dossier][id$=-rapport_instruction]').each(function(){
209     $(this).bind_action_for_overlay("rapport_instruction");
210     });
211 mbroquet 3730 // Bind actions geolocalisation depuis dossier instruction
212     $('a[id^=action-form-dossier_instruction][id$=-geolocalisation]').each(function(){
213     $(this).bind_action_for_overlay("geolocalisation_sig");
214     });
215 softime 6565 // Bind actions geolocalisation depuis dossier contentieux
216     $('a[id^=action-form-dossier_contentieux][id$=-geolocalisation]').each(function(){
217     $(this).bind_action_for_overlay("geolocalisation_sig");
218     });
219 softime 12847 // Bind actions geolocalisation depuis sous-dossier
220     $('a[id^=action-form-sous_dossier][id$=-geolocalisation]').each(function(){
221     $(this).bind_action_for_overlay("geolocalisation_sig");
222     });
223     // Bind actions designation operateur depuis sous_dossier
224 softime 12433 $('a[id^=action-form-dossier_instruction][id$=-designation_operateur]').each(function(){
225 softime 13528 $(this).bind_action_for_overlay("dossier_operateur", "90%", modal_height, '', '', modal_position);
226 softime 12433 });
227 softime 12847 // Bind actions designation operateur depuis sous_dossier
228     $('a[id^=action-form-sous_dossier][id$=-designation_operateur]').each(function(){
229 softime 13528 $(this).bind_action_for_overlay("dossier_operateur", "90%", modal_height, '', '', modal_position);
230 softime 12847 });
231 mbroquet 3730 // Bind actions geolocalisation depuis demande_avis
232     $('#action-sousform-demande_avis_encours-rendre_avis').each(function(){
233     $(this).bind_action_for_overlay("demande_avis_encours", "auto", "auto", returnToTab, 'demande_avis_encours');
234     });
235 softime 16749 // Bind action change_linked_users (utilisateurs liés) depuis le header
236     $('a[class=action-change_linked_users]').each(function(){
237     $(this).bind_action_for_overlay("change_linked_users", "50%", modal_height, '', '', modal_position, false, '#header');
238     });
239 softime 9245 // Bind actions prévisualisation document depuis document_numerise
240     var modal_height = screen.availHeight * 0.90;
241 softime 12847 var modal_position = { my: "left top", at: "top", of: window };
242 softime 9245 $('a[id^=action-form-document_numerise][id$=-preview_edition]').each(function(){
243 softime 15650 $(this).bind_action_for_overlay("document_numerise_preview_edition", "50%", modal_height, '', '', modal_position, false);
244 softime 11418 // Récupération et affichage des miniatures lors du passage du curseur au dessus
245     // de l'icône de prévisualisation et uniquement si l'option d'affichage des miniature
246     // est active (visible via la classe tooltip)
247     if ($(this).attr('class') == 'action action-self tooltip') {
248     $(this).on('hover', function(){
249     if ($(this).find('img').attr('class') != 'thumbnailLoaded') {
250     var idDossier = $(this).attr('id-dossier');
251     var img_src = '';
252     var objet = this;
253     $.ajax({
254     type: "GET",
255     url: "../app/index.php?module=form&obj=document_numerise&action=997&idx="+idDossier,
256     data: "html",
257     success: function(json){
258     img_src = json;
259     $(objet).find('img').attr('class', 'thumbnailLoaded');
260     $(objet).find('img').attr('src', img_src);
261     }
262     });
263     }
264     });
265     }
266 softime 9245 });
267 softime 10573 // Bind actions prévisualisation document numerise depuis le sous onglet document
268     $('a[id^=action-soustab-document_numerise-left-previsualiser]').each(function(){
269     $(this).bind_action_for_overlay("document_numerise_preview_edition", "70%", modal_height, '', '', modal_position);
270     });
271     // Bind actions prévisualisation document de travail depuis le sous onglet document
272 softime 11418 $('div#sousform-document_travail a[id^=action-soustab-document_numerise-left-previsualiser]').each(function(){
273     $(this).bind_action_for_overlay("document_numerise_preview_edition", "70%", modal_height, '', '', modal_position);
274 softime 10573 });
275     // Bind actions prévisualisation instruction depuis document_numerise
276     var modal_height = screen.availHeight * 0.90;
277 softime 12847 var modal_position = { my: "left top", at: "top", of: window };
278 softime 10573 $('a[id^=action-form-instruction][id$=-preview_edition]').each(function(){
279     $(this).bind_action_for_overlay("instruction_preview_edition", "70%", modal_height, '', '', modal_position);
280     });
281     // Bind actions prévisualisation document d'instruction depuis le sous onglet document
282     $('a[id^=action-soustab-document_instruction-left-previsualiser]').each(function(){
283     $(this).bind_action_for_overlay("instruction_preview_edition", "70%", modal_height, '', '', modal_position);
284     });
285     // Bind actions prévisualisation rapport instruction depuis document_numerise
286     var modal_height = screen.availHeight * 0.90;
287 softime 12847 var modal_position = { my: "left top", at: "top", of: window };
288 softime 10573 $('a[id^=action-form-rapport_instruction][id$=-preview_edition]').each(function(){
289     $(this).bind_action_for_overlay("rapport_instruction_preview_edition", "70%", modal_height, '', '', modal_position);
290     });
291     // Bind actions prévisualisation rapport instruction historisé depuis document_numerise
292     var modal_height = screen.availHeight * 0.90;
293 softime 12847 var modal_position = { my: "left top", at: "top", of: window };
294 softime 10573 $('a[id^=action-form-storage][id$=-preview_edition]').each(function(){
295     $(this).bind_action_for_overlay("storage_preview_edition", "70%", modal_height, '', '', modal_position);
296     });
297     // Bind actions prévisualisation document consultation depuis document_numerise
298     var modal_height = screen.availHeight * 0.90;
299 softime 12847 var modal_position = { my: "left top", at: "top", of: window };
300 softime 10573 $('a[id^=action-form-consultation][id$=-preview_edition]').each(function(){
301     $(this).bind_action_for_overlay("consultation_preview_edition", "70%", modal_height, '', '', modal_position);
302     });
303     // Bind actions "normaliser l'adresse" depuis dossier instruction
304     $('a[id^=action-form-dossier_instruction][id$=-normalize_address]').each(function(){
305 softime 15835 $(this).bind_action_for_overlay("normalize_address", 'auto', 'auto', '', '', '', false);
306 softime 10573 });
307     // Bind actions "normaliser l'adresse" depuis dossier contentieux
308     $('a[id^=action-form-dossier_contentieux][id$=-normalize_address]').each(function(){
309     $(this).bind_action_for_overlay("normalize_address");
310     });
311 softime 12847 // Bind actions "normaliser l'adresse" depuis sous_dossier
312     $('a[id^=action-form-sous_dossier][id$=-normalize_address]').each(function(){
313     $(this).bind_action_for_overlay("normalize_address");
314     });
315 softime 10573 // Ajout de l'entete du tableau de l'onglet pièce -> document -> document d'instruction
316     if (! $('#sousform-document_instruction .tab-tab .categorie').exists()) {
317     $('#sousform-document_instruction .tab-tab thead').prepend(
318     "\n<tr class=\"ui-tabs-nav ui-accordion ui-state-default tab-title\">\n"
319     +"\t<th class=\"title categorie\" colspan=\"5\">Documents d'instruction</td>"
320     +"</tr>\n"
321     );
322     }
323     // Ajout de l'entete du tableau de l'onglet pièce -> document -> document de travail
324     if (! $('#sousform-document_travail .tab-tab .categorie').exists()) {
325     $('#sousform-document_travail .tab-tab thead').prepend(
326     "\n<tr class=\"ui-tabs-nav ui-accordion ui-state-default tab-title\">\n"
327     +"\t<th class=\"title categorie\" colspan=\"3\">Documents de travail</td>"
328     +"</tr>\n"
329     );
330     }
331 softime 12847 // Bind actions remplacer document signé depuis instruction
332     $('#action-sousform-instruction-modale_selection_document_signe').each(function(){
333     $(this).bind_action_for_overlay("instruction_modale");
334     });
335 softime 19307 // Bind actions remplacer document signé depuis instruction
336     $('#action-sousform-instruction_contexte_ctx_inf-modale_selection_document_signe').each(function(){
337     $(this).bind_action_for_overlay("instruction_modale");
338     });
339 softime 12847
340     // Permet d'afficher un autre texte sur l'action "Consulter" des dossiers d'instruction dématérialisés
341 softime 13137 if ($('table.tab-tab tr.tab-data.consult-demat td.icons a span').exists()) {
342     text_trad = '';
343 softime 12847 $.ajax({
344     type: "GET",
345     url: "../app/index.php?module=form&obj=dossier_instruction&action=230&idx=0",
346     cache: false,
347     async: false,
348     dataType: "json",
349     success: function(json){
350 softime 13137 if ('consulter' in json) {
351     text_trad = json['consulter'];
352     }
353 softime 12847 }
354     });
355 softime 13137 $('table.tab-tab tr.tab-data.consult-demat td.icons a span').each(function(){
356     $(this).attr('title', text_trad);
357     });
358     }
359 softime 18436
360     // Affiche la documentation des modules depuis le formulaire de modification
361     $('div#sousform-lien_module input#module').each(function() {
362     show_module_doc_link(this);
363     });
364 softime 6565 }
365 mbroquet 3730
366 softime 6565 // Document is ready
367     $(initBindFocus);
368    
369 softime 17036 /**
370     * Méthode exécutée au chargement de la page.
371     * Permet, au chargement de la page de crée les loaders
372     * et de charger les données en asynchrone.
373     *
374     */
375     document.addEventListener("DOMContentLoaded", (event) => {
376     // Commune dans les nouveaux dossiers
377     var commune_loader_div = document.getElementsByClassName('commune---loader');
378     if (
379     typeof(commune_loader_div) !== 'undefined'
380     && typeof(commune_loader_div[0]) !== 'undefined'
381     ) {
382     updateCommuneSelect();
383     }
384     });
385 softime 15218
386 softime 17036
387 mbroquet 3730 /**
388 softime 7996 * Si mode = server_side alors
389     * Renvoi sur om_widget.class.php::init_class_actions()
390     * Le DOM est construit dans la méthode view_widget_rss() de la classe om_widget
391     *
392     * Si mode = client_side alors
393     * Le DOM est construit dans cette méthode Javascript
394     *
395     * @return void
396     **/
397     function bind_widget_rss() {
398     $(".widget_rss").each(function() {
399     var bloc_html_cible = this.id;
400     var mode = $("#"+bloc_html_cible+" .widget-rss-marker").data('mode');
401     var id_widget = $("#"+bloc_html_cible+" .widget-rss-marker").data('id_widget');
402    
403     if (mode == 'server_side') {
404     $.ajax({
405     type: "GET",
406     url: "../app/index.php?module=form&obj=om_widget&action=4&idx="+id_widget,
407     success: function(html){
408     $(html).appendTo($("#"+bloc_html_cible+" .widget-rss-marker"));
409     }
410     });
411     }
412    
413     if (mode == 'client_side') {
414     var link = $("#"+bloc_html_cible+" .widget-rss-marker").data('urls');
415     var max_item = $("#"+bloc_html_cible+" .widget-rss-marker").data('max_item');
416     var real_max_item = max_item - 1;
417     var urls = link.split(",");
418     var element = [];
419    
420     // Création d'une variable id_url pour rendre unique un url dans le
421     // cas de multiple url sur le widget
422     var id_url = 0;
423    
424     urls.forEach(function(url) {
425     $.ajax(url).done(function(data) {
426     var channel_title = data.getElementsByTagName('channel').item(0).getElementsByTagName('title').item(0).childNodes.item(0).nodeValue;
427    
428     element = {
429     "url" : url,
430     "channel_title" : channel_title,
431     };
432    
433     id_url = id_url + 1;
434    
435     $("#"+bloc_html_cible+" .widget-rss-marker").append("<ul id='ul_"+id_url+"_"+bloc_html_cible+"'><h4>"+channel_title+"</h4>");
436    
437     // Pour chaque item du flux
438     var x = data.getElementsByTagName('item');
439     if (x.length != 0) {
440     for (i=0; i<=real_max_item; i++) {
441     var item_title = x.item(i).getElementsByTagName('title').item(0).childNodes.item(0).nodeValue;
442     var item_link = x.item(i).getElementsByTagName('link').item(0).childNodes.item(0).nodeValue;
443     var item_desc = x.item(i).getElementsByTagName('description').item(0).childNodes.item(0).nodeValue;
444    
445     element['items', i] = {
446     "title" : item_title,
447     "link" : item_link,
448     "description" : item_desc,
449     };
450    
451     // Contenu
452     $("#ul_"+id_url+"_"+bloc_html_cible).append("<li><a href="+item_link+" target=_blank><h5>"+item_title+"</h5></a><p>"+item_desc+"</p></li>")
453     }
454     } else {
455     $("#ul_"+id_url+"_"+bloc_html_cible).append("Aucune donnée disponible")
456    
457     }
458     });
459    
460     });
461     }
462     });
463     }
464    
465    
466     /**
467 mbroquet 3730 * Surcharge de la fonction ajaxIt spécifique au formulaire ouvert en
468     * overlay ayant des actions directs.
469     *
470     * @param string objsf Objet ouvert en sous-formulaire
471     * @param string link Lien vers contenu à afficher
472     *
473     * @return void
474     */
475     function overlayIt(objsf, link) {
476     // execution de la requete en POST
477     $.ajax({
478     type: "GET",
479     url: link,
480     cache: false,
481     success: function(html){
482 nhaye 5254 $("#sousform-href").attr("id","sousform-href-disabled");
483 mbroquet 3730 $("#sousform-"+objsf).empty();
484     $("#sousform-"+objsf).append(html);
485     // Affiche la div necessaire aux actions directs
486     var href = '<div id="sousform-href" ></div>'
487     $("#sousform-"+objsf).append(href);
488     if ($("#sousform-href").length) {
489     $("#sousform-href").attr("data-href", link);
490     }
491     om_initialize_content(true);
492 softime 12433 // Si on est dans l'overlay de gestion des operateurs
493     if ($("#operateur_amenagement_pers_publique").exists() || $("#message_consultation_amenageur").exists()) {
494     // Au chargement de l'overlay on appelle les fonctions permettant
495     // d'afficher/cacher les champs d'opérateur
496     switch_operateur_amenagement_pers_public($("#operateur_amenagement_pers_publique").val());
497     if ($("#operateur_pers_publique_amenageur").exists()) {
498     switch_operateur_pers_publique_amenageur($("#operateur_pers_publique_amenageur").val());
499     }
500     }
501 mbroquet 3730 }
502     });
503     }
504    
505     /**
506 softime 12433 * Fonction qui affiche ou cache des champs en fonction de la valeur
507     * passée en paramètre
508     *
509     * @param string undefined|'t'|'f' valeur du select operateur_amenagement_pers_public
510     *
511     * @return void
512     */
513     function switch_operateur_amenagement_pers_public(field_select_value) {
514     // On cache tous les champs
515     $('#operateur_personne_publique').parent().parent().hide();
516     $('#operateur_pers_publique_amenageur').parent().parent().hide();
517     $('#operateur_personne_publique_avis').parent().parent().hide();
518     $('#message_consultation_amenageur').parent().parent().hide();
519     $('#message_consultation_tiers').parent().parent().hide();
520     $('#fieldset-sousform-dossier_operateur-consultation-de-l_amenageur').hide();
521    
522     // Si la valeur n'est pas définie ou que la recherche d'opérateur
523     // n'a pas été lancé (opérateur inrap obligatoire)
524     if (field_select_value == undefined
525     || $('#operateur_detecte_inrap').val() == "") {
526     return;
527     }
528    
529     // Si le champ est à 'Oui'
530     if (field_select_value == "t") {
531     // On affiche le fieldset
532     $('#fieldset-sousform-dossier_operateur-consultation-de-l_amenageur').show();
533     $('#operateur_pers_publique_amenageur').parent().parent().show();
534     // La valeur '' permet d'éviter un problème au chargement de l'overlay
535     if ($('select#operateur_pers_publique_amenageur').val() == '') {
536     // Enlève l'option '' du select qui doit compoter seulement Oui ou Non
537     $('select#operateur_pers_publique_amenageur option[value=""]').prop('hidden', true);
538     $('select#operateur_pers_publique_amenageur').val('t');
539     }
540     $("select#operateur_pers_publique_amenageur").change(function() {
541     switch_operateur_pers_publique_amenageur($(this));
542     });
543     $('#message_consultation_amenageur').parent().parent().show();
544     $('#operateur_personne_publique_avis').parent().parent().show();
545     }
546    
547     if (field_select_value == "f") {
548     $('#fieldset-sousform-dossier_operateur-consultation-de-l_amenageur').hide();
549     $('#operateur_pers_publique_amenageur').parent().parent().hide();
550     $('#operateur_pers_publique_amenageur').val('');
551     $('#operateur_personne_publique').parent().parent().hide();
552     $('#operateur_personne_publique').val('');
553     $('#operateur_personne_publique_avis').parent().parent().hide();
554     $('#operateur_personne_publique_avis').val('');
555     }
556     }
557    
558     /**
559     * Fonction qui affiche ou cache des champs en fonction de la valeur
560     * passée en paramètre
561     *
562     * @param string undefined|'t'|'f' valeur du select operateur_pers_publique_amenageur
563     *
564     * @return void
565     */
566     function switch_operateur_pers_publique_amenageur(field_select_value) {
567    
568     if (field_select_value == undefined) {
569     return;
570     }
571    
572     // Enlève l'option "" du select qui doit compoter seulement Oui ou Non
573     $('select#operateur_pers_publique_amenageur option[value=""]').prop('hidden', true);
574    
575     if (field_select_value == "f") {
576     $('#operateur_personne_publique').parent().parent().show();
577     $('#message_consultation_tiers').parent().parent().show();
578     }
579    
580     if (field_select_value == "t") {
581     $('#operateur_personne_publique').parent().parent().hide();
582     $('#operateur_personne_publique').val('');
583     $('#message_consultation_tiers').parent().parent().hide();
584     }
585     }
586    
587    
588     /**
589 softime 10869 * ADVS_SEARCH - handle_highlight_advs_search.
590     *
591     * L'objectif ici est de mettre en valeur :
592     * - les champs sélectionnés une fois le formulaire validé
593     * - les champs en cours de modification avant validation du formulaire
594     */
595     function handle_highlight_advs_search() {
596     $("#adv-search-adv-fields select, #adv-search-adv-fields input").each(function() {
597     if ($(this).val() != "") {
598     $(this).addClass('advs-active-field-search');
599     }
600     });
601     $("#adv-search-adv-fields select, #adv-search-adv-fields input").each(function() {
602     $(this).change(function() {
603     $(this).addClass('advs-unvalidate-field-search');
604     $("#adv-search-submit").addClass('advs-unvalidate-field-search');
605     });
606     });
607     }
608    
609    
610     /**
611     * ADVS_SEARCH - clear_form.
612     *
613     * Override framework_openmairie
614     */
615 softime 16749 function clear_form(form, without_id = false, not_params = []) {
616 softime 10869 if (form.selector == "#advanced-form") {
617     $("#adv-search-adv-fields select, #adv-search-adv-fields input").each(function() {
618     if ($(this).val() != "") {
619     $(this).val('').trigger("change");
620     }
621     });
622     } else {
623 softime 16749 var selector = 'form#'+form.attr('id');
624     // Si le formulaire passé ne possède pas d'identifiant
625     if (without_id == true) {
626     selector = form;
627     }
628     var not_clear = '';
629     not_params.forEach(function(item, index, array) {
630     if (item !== '') {
631     not_clear += ', ' + item;
632     }
633     });
634 softime 10869 // On redéfinit la fonction du framework si on ne se trouve pas dans le contexte
635     // de la recherche avancée.
636 softime 16749 $(":input", selector)
637     .not(':button, :submit, :reset, :hidden' + not_clear)
638 softime 10869 .val('')
639     .removeAttr('checked')
640     .removeAttr('selected');
641     }
642     }
643    
644    
645    
646     /**
647 mbroquet 3730 * WIDGET liés au formulaire et sousformulaire
648     *
649     * Ces fonctions javascript sont appelées depuis les méthodes setOnChange,
650     * setOnClick, ...
651     */
652     //
653     // Cette fonction permet de retourner les informations sur le fichier téléchargé
654     // du formulaire d'upload vers le formulaire d'origine
655     function bible_return(form, champ) {
656     // Initialisation de la variable contenant les valeurs sélectionnées
657     var listeElement = '';
658     // Récupération du contenu de chacun des éléments cochés
659     $("span.content").each(function( index ) {
660     if (document.getElementById('checkbox'+index).checked == true) {
661     listeElement += $(this).attr('title').replace(/\r\n|\n|\r/g, '<br />')+'<br />';
662     }
663     });
664     obj = tinyMCE.get(champ);
665     // Remplissage du textarea et déclenchement du trigger autosize
666     if(listeElement != '') {
667     obj.setContent(obj.getContent()+"<br/>"+listeElement+"<br/>");
668     }
669     // Fermeture de la boite de dialog
670     $('#upload-container').dialog('close').remove();
671     }
672     //
673     function bible(numero) {
674     //
675     var ev = document.f2.evenement.value;
676     //
677     if (ev == "") {
678     window.alert("Vous devez d'abord sélectionner un événement.");
679     return false;
680     }
681     //
682     var idx = document.f2.dossier.value;
683     //
684 softime 7996 var link = "../app/index.php?module=form&obj=instruction&action=130&complement="+numero+"&ev="+ev+"&idx="+idx;
685 mbroquet 3730 load_form_in_modal(link);
686     //
687     return false;
688     }
689     // bible_auto - type httpclick
690     function bible_auto(){
691     // Récupération de l'identifiant de l'événement
692     var ev=document.f2.evenement.value;
693     // Si pas d'événement on affiche un message d'erreur
694     if (ev == "") {
695     window.alert("Vous devez d'abord sélectionner un événement.");
696     return false;
697     }
698     // Récupération de l'identifiant du dossier
699     var idx=document.f2.dossier.value;
700     // Récupération des retours de consultation et de la bible
701     $.ajax({
702     type: "GET",
703 softime 7996 url: "../app/index.php?module=form&obj=instruction&action=140&idx="+idx+"&ev="+ev,
704 mbroquet 3730 cache: false,
705     dataType: "json",
706     success: function(data){
707    
708     // Remplissage du textarea complement_om_html
709     if(data.complement_om_html != '') {
710     var obj = tinyMCE.get('complement_om_html');
711     obj.setContent(obj.getContent()+"<br/>"+data.complement_om_html+"<br/>");
712     }
713     // Remplissage du textarea complement2_om_html
714     if(data.complement2_om_html != '') {
715     var obj2 = tinyMCE.get('complement2_om_html');
716     obj2.setContent(obj2.getContent()+"<br/>"+data.complement2_om_html+"<br/>");
717     }
718     // Remplissage du textarea complement2_om_html
719     if(data.complement3_om_html != '') {
720     var obj3 = tinyMCE.get('complement3_om_html');
721     obj3.setContent(obj3.getContent()+"<br/>"+data.complement3_om_html+"<br/>");
722     }
723     // Remplissage du textarea complement4_om_html
724     if(data.complement4_om_html != '') {
725     var obj4 = tinyMCE.get('complement4_om_html');
726     obj4.setContent(obj4.getContent()+"<br/>"+data.complement4_om_html+"<br/>");
727     }
728     }
729     });
730    
731     return false;
732     }
733 softime 10808
734 mbroquet 3730
735     /**
736     * Cette fonction permet de compléter le champ par des zéro par la gauche
737     * @param string champ Champ concerné
738     * @param integer length Taille du champ retourné
739     */
740 softime 17036 function strPadJs(champ, length) {
741 mbroquet 3730
742     // Initialisation de la variable str
743     var str = '' + champ.value;
744    
745 softime 10573 // Si le champ n'est pas vide et que c'est un chiffre
746     if (str != '' && /^[0-9]+$/.test(str) === true) {
747 mbroquet 3730 // Tant que la taille n'est pas atteint,
748     // on ajoute des 0
749     while (str.length < length) {
750     str = '0' + str;
751     }
752     // Modifie le champ
753     champ.value = str;
754     }
755     }
756    
757    
758     /**
759     * Fonction de récupération des paramètres GET de la page
760     * @return Array Tableau associatif contenant les paramètres GET
761     */
762     function extractUrlParams(){
763     var t = location.search.substring(1).split('&');
764     var f = [];
765     for (var i=0; i<t.length; i++){
766     var x = t[ i ].split('=');
767     f[x[0]]=x[1];
768     }
769     return f;
770     }
771    
772     // Cette fonction permet de gérer la validation de l'action
773     // affichage_reglementaire_registre de la classe demande
774 softime 17036 /*
775 mbroquet 3730 function affichage_reglementaire_registre(button) {
776     // Popup de confirmation du traitement par l'utilisateur
777     if (trt_confirm() == false) {
778     return false;
779     }
780     // Suppression du bouton pour que l'utilisateur ne puisse pas cliquer une
781     // deuxième fois
782     $(button).remove();
783     // Affichage du spinner
784     $("#msg").html(msg_loading);
785     // Requête AJAX vers le fichier l'action affichage_reglementaire_registre
786     // pour mettre à jour les dossiers
787     // XXX layout
788     $.ajax({
789     type: "GET",
790 softime 7996 url: "../app/index.php?module=form&obj=demande_affichage_reglementaire_registre&action=110&idx=0&update",
791 mbroquet 3730 cache: false,
792     success: function(html){
793     // Ajout d'un bloc de message vide
794     $('#msg').html(
795     '<div class="message ui-widget ui-corner-all ui-state-highlight">'+
796     '<p>'+
797     '<span class="ui-icon ui-icon-info"></span>'+
798     '<span class="text">'+
799     '</span>'+
800     '</p>'+
801     '</div>'
802     );
803     // Si le retour de l'appel Ajax n'est pas vide, alors il y a eu une
804     // lors du traitement
805     if ( html.length > 2 ) {
806     $("#msg .message").addClass("ui-state-error");
807     $("#msg .text").html(html);
808     } else {
809     // Sinon message de succès et appel de l'édition
810     $("#msg .message").addClass("ui-state-valid");
811     $("#msg .text").html("Traitement terminé. Le registre a été téléchargé.");
812 softime 7996 window.open("../app/index.php?module=form&obj=demande_affichage_reglementaire_registre&action=111&idx=0");
813 mbroquet 3730 }
814     },
815     async: false
816     });
817     //
818     return false;
819     }
820 softime 17036 */
821 mbroquet 3730
822     /**
823 softime 8989 * Copie modifiée des fonctions form_confirmation_action() et
824     * form_execute_action_direct() afin de ne pas modifier les fonctions du 'core'
825     * (framework openMairie).
826     *
827     * Fenêtre modale de confirmation spécifique à l'action de déclenchement du
828     * traitement du registre d'affichage réglementaire.
829     */
830 softime 17542 function registreFormConfirmationAction(elem, action) {
831     $('#'+elem+'-message').html(msg_loading);
832     // Suppression du bouton pour que l'utilisateur ne
833     // puisse pas cliquer une deuxième fois
834     $(action).remove();
835 softime 8989 //
836 softime 17542 $.ajax({
837     type: "POST",
838     url: $(action).attr('data-href')+"&validation=1&contentonly=true",
839     cache: false,
840     dataType: "html",
841     data: "submit=true",
842     success: function(html){
843     // XXX Il semble nécessaire afin de récupérer la portion de code
844     // div.message d'ajouter un container qui contient l'intégralité
845     // du code html représentant le contenu du formulaire. Si on ajoute
846     // pas ce bloc la récupération du bloc ne se fait pas.
847     container_specific_js = '<div id="container-specific-js">'+html+'</div>';
848     message = $(container_specific_js).find('div.message').get(0);
849     if (message == undefined) {
850     message = -1;
851 softime 8989 }
852 softime 17542 // Ajout du contenu récupéré (uniquement le bloc message)
853     $('#'+elem+'-message').html(message);
854     // Rafraichissement du bloc de formulaire
855     form_container_refresh(elem);
856     // Initialisation JS du nouveau contenu de la page
857     om_initialize_content();
858     }
859 softime 8989 });
860     }
861    
862     /**
863 mbroquet 3730 * WIDGET DASHBOARD - widget_recherche_dossier.
864     *
865     * Fonction de redirection pour le widget de recherche de dossier
866     */
867 softime 6565 function widget_recherche_dossier(data, nbRes, obj) {
868 mbroquet 3730 // S'il n'y a qu'un seul résultat, afficher un résumé
869 softime 6565 if (nbRes == 1) {
870 softime 7996 window.location = "../app/index.php?module=form&obj=" + obj + "&action=3&" +
871     "idx=" + data + "&premier=0&advs_id=&tricol=&" +
872     "valide=&retour=tab";
873 mbroquet 3730 }
874     // S'il y a une liste de dossier, redirection vers le tableau
875     else {
876 softime 6565 window.location = "../app/web_entry.php?obj=" + obj + "&field=dossier&value=" + data;
877 mbroquet 3730 }
878     }
879    
880     /**
881     * Retour spécifique de l'écran de consultation multiple - surcharge de ajaxIt
882     * @todo XXX voir les différences avec ajaxIt et si il n'est pas possible
883     * d'effectuer la modification dans le core
884     */
885     function messageIt(objsf, link, empty) {
886     // execution de la requete en GET
887     $.ajax({
888     type: "GET",
889     url: link,
890     cache: false,
891     success: function(html){
892     (empty == true )?$("#sousform-"+objsf).empty():'';
893     $("#sousform-"+objsf).append(html);
894     om_initialize_content();
895     },
896     async: false
897     });
898     }
899    
900     /**
901     * TTélécharegement de fichier pdf en ajax
902     * spécifique de l'écran de consultation multiple
903     */
904     /* Plugin jQuery qui lance un espèce d'appel AJAX vers un script PHP de téléchargement de fichier*/
905     jQuery.download = function(url, data, method){
906     //url and data options required
907     if( url && data ){
908     //data can be string of parameters or array/object
909     data = typeof data == 'string' ? data : jQuery.param(data);
910     //split params into form inputs
911     var inputs = '';
912     jQuery.each(data.split('&'), function(){
913     var pair = this.split('=');
914     inputs+='<input type="hidden" name="'+ pair[0] +'" value="'+ pair[1] +'" />';
915     });
916     //send request
917     jQuery('<form action="'+ url +'" method="'+ (method||'post') +'">'+inputs+'</form>')
918     .prependTo('body').submit().remove();
919     };
920     };
921    
922     /**
923     * Cette fonction permet de charger dans un dialog jqueryui un formulaire tel
924 softime 16749 * qu'il aurait été chargé avec ajaxIt.
925 mbroquet 3730 *
926 softime 16749 * @param {string} objsf Objet en sousformulaire.
927     * @param {string} link Lien vers le sousformulaire.
928     * @param {integer} width Largeur du dialog en px.
929     * @param {integer} height Hauteur du dialog en px.
930     * @param {function} callback Méthode à appeler à la fermeture du dialog.
931     * @param {mixed} callbackParams Paramètres à traiter dans le callback.
932     * @param {string} position Position du dialog sur l'écran.
933     * @param {boolean} resizable Permettre le redimensionnement du dialog.
934     * @param {string} insert_after Après quel html le dialog est inséré.
935     *
936     * @return void ou false.
937     */
938     function popupIt(objsf, link, width, height, callback, callbackParams, position, resizable = true, insert_after = '#tabs-1 .formControls-bottom') {
939 mbroquet 3730 // Insertion du conteneur du dialog
940 softime 16749 var dialog = $('<div id=\"sousform-'+objsf+'\"></div>').insertAfter(insert_after);
941 softime 9245 if( typeof(position) == 'undefined' ){
942     position = 'left top';
943     }
944 mbroquet 3730 // execution de la requete passee en parametre
945     // (idem ajaxIt + callback)
946     $.ajax({
947     type: "GET",
948     url: link,
949     cache: false,
950     success: function(html){
951     //Suppression d'un precedent dialog
952     dialog.empty();
953     //Ajout du contenu recupere
954     dialog.append(html);
955     //Initialisation du theme OM
956     om_initialize_content();
957     //Creation du dialog
958     $(dialog).dialog({
959 softime 9245 //OnClose suppression du contenu
960     close: function(ev, ui) {
961     // Si le formulaire est submit et valide on execute la méthode
962     // passée en paramètre
963     if (typeof(callback) === "function") {
964     callback(callbackParams);
965     }
966     $(this).remove();
967     },
968 softime 15650 resizable: resizable,
969 softime 9245 modal: true,
970     width: width,
971     height: height,
972     position: position,
973     });
974 mbroquet 3730 },
975     async : false
976     });
977 softime 10573
978 mbroquet 3730 //Fermeture du dialog lors d'un clic sur le bouton retour
979 softime 6565 $('#sousform-'+objsf).off("click").on("click",'a.retour',function() {
980 mbroquet 3730 $(dialog).dialog('close').remove();
981     return false;
982     });
983     }
984    
985     /***
986     * Fonction getter des paramètres de l'url courante
987     */
988     // Parse URL Queries Method
989     (function($){
990     $.getQuery = function( query ) {
991     query = query.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
992     var expr = "[\\?&]"+query+"=([^&#]*)";
993     var regex = new RegExp( expr );
994     var results = regex.exec( window.location.href );
995     if( results !== null ) {
996     return results[1];
997     } else {
998     return false;
999     }
1000     };
1001     })(jQuery);
1002    
1003    
1004     /*
1005     * Javascript concernant la demande d'avis
1006     *
1007     *
1008     */
1009    
1010     /**
1011 softime 7521 * Fonction de callback appelée lors de la fermeture du dialog (popupit)
1012 mbroquet 3730 * du retour d'avis d'un service
1013     **/
1014     function returnToTab(objsf) {
1015     var valid=$('#sousform-'+objsf+' div.ui-state-valid');
1016     if(valid.length > 0) {
1017 softime 7996 document.location.href="../app/index.php?module=tab&obj="+$.getQuery('obj')+"&premier="+$.getQuery('premier')
1018     +"&advs_id="+$.getQuery('advs_id')+"&tricol="+$.getQuery('tricol');
1019 mbroquet 3730 }
1020     };
1021    
1022    
1023     /*
1024     * Javascript concernant la demande
1025     *
1026     *
1027     */
1028    
1029 softime 16749 /**
1030     * Traitement à appliquer lors de la validation des demandeurs en sous-formulaire.
1031     *
1032     * @param {string} obj Objet
1033     * @param {string} link Lien du formulaire à afficher
1034     * @param {string} formulaire formulaire
1035     * @param {string} type Type du pétitionnaire
1036     * @param {integer} id Identifiant du demandeur
1037     *
1038     * @return false pour qu'il n'y ait pas d'autres traitement ensuite.
1039     */
1040 softime 17036 function validateSformDemandeur(obj, link, formulaire, type, id) {
1041 softime 16749 affichersform(obj, link, formulaire, false);
1042     if (typeof(id) == 'undefined') {
1043     getDemandeurId(type);
1044     } else {
1045     replaceDemandeur({
1046     'type': type,
1047     'id': id,
1048     'id_css': '#'+type+'_'+id
1049     });
1050     }
1051     if($.isNumeric($('#id_retour').val())) {
1052     $('#sousform-'+obj).remove();
1053     }
1054     return false;
1055     }
1056    
1057 mbroquet 3730 /**
1058     * Fonction permettant de mettre à jour les infos du demandeur
1059     **/
1060     function getDemandeurId(type) {
1061     var id_demandeur=$('#id_retour').val();
1062     if($.isNumeric(id_demandeur)) {
1063     afficherDemandeur(id_demandeur,type);
1064     om_initialize_content();
1065     }
1066     }
1067    
1068     /**
1069     * Fonction permettant d'afficher la synthèse d'un demandeur
1070     */
1071     function afficherDemandeur(id,type) {
1072     $.ajax({
1073     type: "GET",
1074     url: '../app/afficher_synthese_demandeur.view.php?iddemandeur='+id+'&type='+type,
1075     cache: false,
1076     success: function(html){
1077 softime 16749 $(html).insertBefore('#hidden_'+type).fadeIn(500);
1078 mbroquet 3730 },
1079     async:false
1080     });
1081     affichageBoutonsDemandeurs();
1082     }
1083    
1084     /**
1085     * Fonction permettant de modifier un demandeur
1086     */
1087     function editDemandeur(obj,id,type,id_css) {
1088 softime 10573 id_dossier = '';
1089    
1090     if ($("#dossier").size() !== 0) {
1091     id_dossier=$("#dossier").val();
1092     }
1093 softime 16749 var principal = '';
1094     if (id_css.indexOf('principal') != -1) {
1095     principal = '&principal=true';
1096     }
1097     var url = '../app/index.php?module=sousform&obj='+obj+'&retourformulaire=demande&action=1&idx='+id+'&idx_dossier='+id_dossier+principal;
1098     popupIt(obj, url, 860, 'auto', replaceDemandeur, {'type': type, 'id': id, 'id_css': '#'+id_css});
1099 mbroquet 3730 affichageBoutonsDemandeurs();
1100     }
1101    
1102     /**
1103     * Function permettant de remplacer un contenu déjà existant
1104     **/
1105     function replaceDemandeur(obj) {
1106     var new_demandeur=$('#id_retour').val();
1107     if($.isNumeric(new_demandeur)) {
1108     $.ajax({
1109     type: "GET",
1110     url: '../app/afficher_synthese_demandeur.view.php?iddemandeur='+new_demandeur+'&type='+obj.type,
1111     cache: false,
1112 softime 16749 async: false,
1113 mbroquet 3730 success: function(html){
1114     $(obj.id_css).replaceWith(html);
1115     }
1116     });
1117     }
1118     }
1119     /**
1120     * Function permettant de remplacer un contenu déjà existant
1121     **/
1122     function removeDemandeur(id) {
1123     var div_class=$('#'+id).attr("class");
1124     $('#'+id).remove();
1125     if(div_class == "delegataire") {
1126     $('#add_delegataire').fadeIn(500);
1127     }
1128 softime 10573 if(div_class == "proprietaire") {
1129     $('#add_proprietaire').fadeIn(500);
1130     }
1131     if(div_class == "architecte_lc") {
1132     $('#add_architecte_lc').fadeIn(500);
1133     }
1134     if(div_class == "paysagiste") {
1135     $('#add_paysagiste').fadeIn(500);
1136     }
1137 mbroquet 3730 affichageBoutonsDemandeurs();
1138     }
1139    
1140     /**
1141     * Fonction permettant d'afficher et cacher les boutons d'ajout de demandeurs
1142     */
1143     function affichageBoutonsDemandeurs(){
1144 softime 6565 // Si le fieldset Demandeurs n'est pas présent, on sort de la fonction
1145     if($('#liste_demandeur').size() === 0) {
1146     return false;
1147     }
1148     // Affichage des blocs en fonction du type de demande
1149     type_aff_form = getDemandeInfo('type_aff_form');
1150     switch (type_aff_form) {
1151 softime 13528 case 'CONSULTATION ENTRANTE':
1152 softime 6565 case 'ADS':
1153     // Suppression des types de demandeurs d'autres type de DA
1154     $('.plaignant_principal').each(function() {
1155     $(this).remove();
1156     });
1157     $('.plaignant').each(function() {
1158     $(this).remove();
1159     });
1160     $('.contrevenant_principal').each(function() {
1161     $(this).remove();
1162     });
1163     $('.contrevenant').each(function() {
1164     $(this).remove();
1165     });
1166     $('.requerant').each(function() {
1167     $(this).remove();
1168     });
1169     $('.avocat').each(function() {
1170     $(this).remove();
1171     });
1172 softime 7067 $('.bailleur_principal').each(function() {
1173     $(this).remove();
1174     });
1175     $('.bailleur').each(function() {
1176     $(this).remove();
1177     });
1178 softime 6565 // Affichage ou non des blocs
1179     $('#plaignant_contrevenant').hide();
1180     $('#requerant_avocat').hide();
1181 softime 7067 $('#petitionnaire_principal_delegataire_bailleur').hide();
1182 softime 16749 $('#btn_plaignant_contrevenant').hide();
1183     $('#btn_requerant_avocat').hide();
1184     $('#btn_petitionnaire_principal_delegataire_bailleur').hide();
1185     $('#petitionnaire_principal_delegataire').fadeIn(0);
1186     $('#btn_petitionnaire_principal_delegataire').fadeIn(0);
1187 softime 6565 break;
1188    
1189     case 'CTX RE':
1190     // Suppression des types de demandeurs d'autres type de DA
1191     $('.plaignant_principal').each(function() {
1192     $(this).remove();
1193     });
1194     $('.plaignant').each(function() {
1195     $(this).remove();
1196     });
1197     $('.contrevenant_principal').each(function() {
1198     $(this).remove();
1199     });
1200     $('.contrevenant').each(function() {
1201     $(this).remove();
1202     });
1203 softime 7067 $('.bailleur_principal').each(function() {
1204     $(this).remove();
1205     });
1206     $('.bailleur').each(function() {
1207     $(this).remove();
1208     });
1209 softime 6565 // Affichage ou non des blocs
1210     $('#plaignant_contrevenant').hide();
1211     $('#requerant_avocat').hide();
1212 softime 7067 $('#petitionnaire_principal_delegataire_bailleur').hide();
1213 softime 16749 $('#btn_plaignant_contrevenant').hide();
1214     $('#btn_requerant_avocat').hide();
1215     $('#btn_petitionnaire_principal_delegataire_bailleur').hide();
1216     $('#petitionnaire_principal_delegataire').fadeIn(0);
1217     $('#btn_petitionnaire_principal_delegataire').fadeIn(0);
1218 softime 6565 // Affichage du bloc requerant/avocat
1219     if ($('input[name^=petitionnaire_principal]').size() > 0) {
1220 softime 16749 $('#requerant_avocat').fadeIn(0);
1221     $('#btn_requerant_avocat').fadeIn(0);
1222 softime 6565 } else {
1223     $('#requerant_avocat').hide();
1224 softime 16749 $('#btn_requerant_avocat').hide();
1225 softime 6565 }
1226     break;
1227    
1228     case 'CTX IN':
1229     $('.petitionnaire_principal').each(function() {
1230     $(this).remove();
1231     });
1232     $('.delegataire').each(function() {
1233     $(this).remove();
1234     });
1235     $('.petitionnaire').each(function() {
1236     $(this).remove();
1237     });
1238     $('.requerant').each(function() {
1239     $(this).remove();
1240     });
1241     $('.avocat').each(function() {
1242     $(this).remove();
1243     });
1244 softime 7067 $('.bailleur_principal').each(function() {
1245     $(this).remove();
1246     });
1247     $('.bailleur').each(function() {
1248     $(this).remove();
1249     });
1250 softime 6565 $('#requerant_avocat').hide();
1251     $('#petitionnaire_principal_delegataire').hide();
1252 softime 7067 $('#listePetitionnaires').hide();
1253     $('#petitionnaire_principal_delegataire_bailleur').hide();
1254 softime 16749 $('#btn_requerant_avocat').hide();
1255     $('#btn_petitionnaire_principal_delegataire').hide();
1256     $('#btn_listePetitionnaires').hide();
1257     $('#btn_petitionnaire_principal_delegataire_bailleur').hide();
1258     $('#plaignant_contrevenant').fadeIn(0);
1259     $('#listeContrevenants').fadeIn(0);
1260     $('#btn_plaignant_contrevenant').fadeIn(0);
1261     $('#btn_listeContrevenants').fadeIn(0);
1262 softime 7067 break;
1263    
1264     case 'DPC':
1265     // Suppression des types de demandeurs d'autres type de DA
1266     $('.plaignant_principal').each(function() {
1267     $(this).remove();
1268     });
1269     $('.plaignant').each(function() {
1270     $(this).remove();
1271     });
1272     $('.contrevenant_principal').each(function() {
1273     $(this).remove();
1274     });
1275     $('.contrevenant').each(function() {
1276     $(this).remove();
1277     });
1278     $('.requerant').each(function() {
1279     $(this).remove();
1280     });
1281     $('.avocat').each(function() {
1282     $(this).remove();
1283     });
1284     // Affichage ou non des blocs
1285     $('#plaignant_contrevenant').hide();
1286     $('#requerant_avocat').hide();
1287 softime 16749 $('#btn_plaignant_contrevenant').hide();
1288     $('#btn_requerant_avocat').hide();
1289     $('#petitionnaire_principal_delegataire').fadeIn(0);
1290     $('#petitionnaire_principal_delegataire_bailleur').fadeIn(0);
1291     $('#listeBailleurs').fadeIn(0);
1292     $('#btn_petitionnaire_principal_delegataire').fadeIn(0);
1293     $('#btn_petitionnaire_principal_delegataire_bailleur').fadeIn(0);
1294     $('#btn_listeBailleurs').fadeIn(0);
1295 softime 7067 break;
1296 softime 6565 default:
1297    
1298     }
1299 mbroquet 3730
1300     // Si formulaire après validation on cache les boutons d'ajout de demandeurs
1301     url = document.location + "" ;
1302 softime 6565 if ($('#liste_demandeur').size() > 0
1303 mbroquet 3730 && $("form[name=f1] .form-is-valid").size() > 0 ) {
1304    
1305     $('#add_petitionnaire_principal').hide();
1306     $('#add_delegataire').hide();
1307     if($('input[name=delegataire][type=hidden]').size() == 0) {
1308     $('#delegataire').hide();
1309 softime 16749 $('#btn_delegataire').hide();
1310 mbroquet 3730 }
1311     $('#add_petitionnaire').hide();
1312 softime 6565 $('#add_plaignant').hide();
1313     $('#add_contrevenant_principal').hide();
1314     $('#add_contrevenant').hide();
1315     if($('input[name=contrevenant][type=hidden]').size() == 0) {
1316     $('#contrevenant').hide();
1317 softime 16749 $('#btn_contrevenant').hide();
1318 mbroquet 3730 }
1319 softime 6565 $('#add_requerant').hide();
1320     $('#add_avocat').hide();
1321 softime 7067 $('#add_bailleur_principal').hide();
1322     $('#add_bailleur').hide();
1323     if($('input[name=bailleur][type=hidden]').size() == 0) {
1324     $('#bailleur').hide();
1325 softime 16749 $('#btn_bailleur').hide();
1326 softime 7067 }
1327 softime 10573 $('#add_proprietaire').hide();
1328     $('#add_architecte_lc').hide();
1329     $('#add_paysagiste').hide();
1330 softime 16749
1331 softime 6565 } else if ($('form[name=f1] #liste_demandeur').size() > 0) {
1332 softime 7067 // Affichage du bouton d'ajout du petitionnaire principal
1333     if($('input[name^=petitionnaire_principal]').size() > 0) {
1334     $('#add_petitionnaire_principal').hide();
1335     } else {
1336 softime 16749 $('#add_petitionnaire_principal').fadeIn(0);
1337 softime 7067 }
1338     // Affichage du bloc delegataire
1339     if($('input[name^=petitionnaire_principal]').size() == 0) {
1340     $('#delegataire').hide();
1341 softime 16749 $('#btn_delegataire').hide();
1342 softime 7067 } else {
1343 softime 16749 $('#delegataire').fadeIn(0);
1344     $('#btn_delegataire').fadeIn(0);
1345 softime 7067 }
1346     // Affichage du bouton délégataire
1347     if($('input[name^=petitionnaire_principal]').size() == 0 ||
1348     $('input[name^=delegataire]').size() > 0) {
1349     $('#add_delegataire').hide();
1350     } else {
1351 softime 16749 $('#add_delegataire').fadeIn(0);
1352 softime 7067 }
1353 softime 10573 // Affichage du bloc proprietaire
1354     if($('input[name^=petitionnaire_principal]').size() == 0) {
1355     $('#proprietaire').hide();
1356 softime 16749 $('#btn_proprietaire').hide();
1357 softime 10573 } else {
1358 softime 16749 $('#proprietaire').fadeIn(0);
1359     $('#btn_proprietaire').fadeIn(0);
1360 softime 10573 }
1361     // Affichage du bouton proprietaire
1362     if($('input[name^=petitionnaire_principal]').size() == 0 ||
1363     $('input[name^=proprietaire]').size() > 0) {
1364     $('#add_proprietaire').hide();
1365     } else {
1366 softime 16749 $('#add_proprietaire').fadeIn(0);
1367 softime 10573 }
1368     // Affichage du bloc architecte_lc
1369     if($('input[name^=petitionnaire_principal]').size() == 0) {
1370     $('#architecte_lc').hide();
1371 softime 16749 $('#btn_architecte_lc').hide();
1372 softime 10573 } else {
1373 softime 16749 $('#architecte_lc').fadeIn(0);
1374     $('#btn_architecte_lc').fadeIn(0);
1375 softime 10573 }
1376     // Affichage du bouton architecte_lc
1377     if($('input[name^=petitionnaire_principal]').size() == 0 ||
1378     $('input[name^=architecte_lc]').size() > 0) {
1379     $('#add_architecte_lc').hide();
1380 softime 16749 $('#btn_add_architecte_lc').hide();
1381 softime 10573 } else {
1382 softime 16749 $('#add_architecte_lc').fadeIn(0);
1383     $('#btn_add_architecte_lc').fadeIn(0);
1384 softime 10573 }
1385     // Affichage du bloc paysagiste
1386     if($('input[name^=petitionnaire_principal]').size() == 0) {
1387     $('#paysagiste').hide();
1388 softime 16749 $('#btn_paysagiste').hide();
1389 softime 10573 } else {
1390 softime 16749 $('#paysagiste').fadeIn(0);
1391     $('#btn_paysagiste').fadeIn(0);
1392 softime 10573 }
1393     // Affichage du bouton paysagiste
1394     if($('input[name^=petitionnaire_principal]').size() == 0 ||
1395     $('input[name^=paysagiste]').size() > 0) {
1396     $('#add_paysagiste').hide();
1397     } else {
1398 softime 16749 $('#add_paysagiste').fadeIn(0);
1399 softime 10573 }
1400 softime 7067 // Affichage du bloc petitionnaire
1401     if($('input[name^=petitionnaire_principal]').size() == 0) {
1402     $('#listePetitionnaires').hide();
1403 softime 16749 $('#btn_listePetitionnaires').hide();
1404 softime 7067 } else {
1405 softime 16749 $('#listePetitionnaires').fadeIn(0);
1406     $('#btn_listePetitionnaires').fadeIn(0);
1407 softime 7067 }
1408     // Affichage du bouton petitionnaire
1409     if($('input[name^=petitionnaire_principal]').size() == 0) {
1410     $('#add_petitionnaire').hide();
1411     } else {
1412 softime 16749 $('#add_petitionnaire').fadeIn(0);
1413 softime 7067 }
1414     // Affichage du bloc petitionnaire
1415     if($('input[name^=petitionnaire_principal]').size() == 0) {
1416     $('#listePetitionnaires').hide();
1417 softime 16749 $('#btn_listePetitionnaires').hide();
1418 softime 7067 } else {
1419 softime 16749 $('#listePetitionnaires').fadeIn(0);
1420     $('#btn_listePetitionnaires').fadeIn(0);
1421 softime 7067 }
1422     if($('input[name^=requerant_principal]').size() == 0) {
1423     $('#listeAutresRequerants').hide();
1424 softime 16749 $('#btn_listeAutresRequerants').hide();
1425 softime 7067 } else {
1426 softime 16749 $('#listeAutresRequerants').fadeIn(0);
1427     $('#btn_listeAutresRequerants').fadeIn(0);
1428 softime 7067 }
1429     if($('input[name^=avocat_principal]').size() == 0) {
1430     $('#listeAutresAvocats').hide();
1431 softime 16749 $('#btn_listeAutresAvocats').hide();
1432 softime 7067 } else {
1433 softime 16749 $('#listeAutresAvocats').fadeIn(0);
1434     $('#btn_listeAutresAvocats').fadeIn(0);
1435 softime 7067 }
1436 softime 6565
1437 softime 7067 if ($('input[name^=petitionnaire_principal]').size() == 0 ||
1438     $('input[name^=requerant_principal]').size() > 0) {
1439     $('#add_requerant_principal').hide();
1440 softime 16749 $('#add_requerant').fadeIn(0);
1441 softime 7067 } else {
1442 softime 16749 $('#add_requerant_principal').fadeIn(0);
1443 softime 7067 $('#add_requerant').hide();
1444     }
1445    
1446     if ($('input[name^=petitionnaire_principal]').size() == 0 ||
1447     $('input[name^=avocat_principal]').size() > 0) {
1448     $('#add_avocat_principal').hide();
1449 softime 16749 $('#add_avocat').fadeIn(0);
1450 softime 7067 } else {
1451 softime 16749 $('#add_avocat_principal').fadeIn(0);
1452 softime 7067 $('#add_avocat').hide();
1453     }
1454 softime 6565
1455     // Formulaire CTX IN
1456     // Affichage du bouton d'ajout du contrevenant principal
1457     if($('input[name^=contrevenant_principal]').size() > 0) {
1458     $('#add_contrevenant_principal').hide();
1459 mbroquet 3730 } else {
1460 softime 16749 $('#add_contrevenant_principal').fadeIn(0);
1461 mbroquet 3730 }
1462 softime 6565 // Affichage du bouton contrevenant
1463     if($('input[name^=contrevenant_principal]').size() == 0) {
1464     $('#listeAutresContrevenants').hide();
1465 softime 16749 $('#btn_listeAutresContrevenants').hide();
1466 softime 6565 $('#add_contrevenant').hide();
1467 mbroquet 3730 } else {
1468 softime 16749 $('#listeAutresContrevenants').fadeIn(0);
1469     $('#btn_listeAutresContrevenants').fadeIn(0);
1470     $('#add_contrevenant').fadeIn(0);
1471 mbroquet 3730 }
1472 softime 6565 // Affichage du bloc Plaignants
1473     if($('input[name^=contrevenant_principal]').size() == 0) {
1474     $('#listePlaignants').hide();
1475 softime 16749 $('#btn_listePlaignants').hide();
1476 softime 6565 } else {
1477 softime 16749 $('#listePlaignants').fadeIn(0);
1478     $('#btn_listePlaignants').fadeIn(0);
1479 softime 6565 }
1480     if($('input[name^=plaignant_principal]').size() == 0) {
1481     $('#listeAutresPlaignants').hide();
1482 softime 16749 $('#btn_listeAutresPlaignants').hide();
1483 softime 6565 } else {
1484 softime 16749 $('#listeAutresPlaignants').fadeIn(0);
1485     $('#btn_listeAutresPlaignants').fadeIn(0);
1486 softime 6565 }
1487     if ($('input[name^=contrevenant_principal]').size() == 0 ||
1488     $('input[name^=plaignant_principal]').size() > 0) {
1489     $('#add_plaignant_principal').hide();
1490 softime 16749 $('#add_plaignant').fadeIn(0);
1491 softime 6565 } else {
1492 softime 16749 $('#add_plaignant_principal').fadeIn(0);
1493 softime 6565 $('#add_plaignant').hide();
1494     }
1495 softime 7067
1496     // Formulaire DPC
1497     if($('input[name^=bailleur_principal]').size() > 0) {
1498     $('#add_bailleur_principal').hide();
1499     } else {
1500 softime 16749 $('#add_bailleur_principal').fadeIn(0);
1501 softime 7067 }
1502     if($('input[name^=bailleur_principal]').size() == 0) {
1503     $('#listeAutresBailleurs').hide();
1504 softime 16749 $('#btn_listeAutresBailleurs').hide();
1505 softime 7067 $('#add_bailleur').hide();
1506     } else {
1507 softime 16749 $('#listeAutresBailleurs').fadeIn(0);
1508     $('#btn_listeAutresBailleurs').fadeIn(0);
1509     $('#add_bailleur').fadeIn(0);
1510 softime 7067 }
1511 mbroquet 3730 }
1512     }
1513    
1514     /**
1515     * Appel au chargement de la page
1516     **/
1517     $(function() {
1518 softime 10869 /**
1519     * Gère la mise en valeur des champs modifiés ou validés de la recherche avancée.
1520     */
1521     handle_highlight_advs_search();
1522    
1523 softime 6565 if ( $('#type_demandeur') == 'petitionnaire' ||
1524 softime 7067 $('#type_demandeur') == 'avocat' ||
1525     $('#type_demandeur') == 'bailleur'){
1526 mbroquet 3730 addSearchIcon();
1527     addDivDialog('.bloc_demandeur');
1528     }
1529     affichageBoutonsDemandeurs();
1530 softime 10573 id_dossier = '';
1531    
1532     if ($("#dossier").size() !== 0) {
1533     id_dossier=$("#dossier").val();
1534     }
1535 mbroquet 3730 // Bind de la fonction permettant l'ajout du pétitionnaire principal
1536     $("#formulaire").on("click","#add_petitionnaire_principal", function() {
1537     popupIt('petitionnaire',
1538 softime 7996 '../app/index.php?module=sousform&obj=petitionnaire&action=0'+
1539 softime 10573 '&retourformulaire=demande&principal=true&idx_dossier='+id_dossier, 860, 'auto',
1540 mbroquet 3730 getDemandeurId, 'petitionnaire_principal');
1541     });
1542 softime 6565 // Bind de la fonction permettant l'ajout du plaignant
1543     $("#formulaire").on("click","#add_plaignant_principal", function() {
1544     popupIt('plaignant',
1545 softime 7996 '../app/index.php?module=sousform&obj=plaignant&action=0'+
1546 softime 16749 '&retourformulaire=demande&principal=true&idx_dossier='+id_dossier, 860, 'auto',
1547 softime 6565 getDemandeurId, 'plaignant_principal');
1548     });
1549     // Bind de la fonction permettant l'ajout du plaignant
1550     $("#formulaire").on("click","#add_plaignant", function() {
1551     popupIt('plaignant',
1552 softime 7996 '../app/index.php?module=sousform&obj=plaignant&action=0'+
1553 softime 10573 '&retourformulaire=demande&idx_dossier='+id_dossier, 860, 'auto',
1554 softime 6565 getDemandeurId, 'plaignant');
1555     });
1556     // Bind de la fonction permettant l'ajout du contrevenant principal
1557     $("#formulaire").on("click","#add_contrevenant_principal", function() {
1558     popupIt('contrevenant',
1559 softime 7996 '../app/index.php?module=sousform&obj=contrevenant&action=0'+
1560 softime 16749 '&retourformulaire=demande&principal=true&idx_dossier='+id_dossier, 860, 'auto',
1561 softime 6565 getDemandeurId, 'contrevenant_principal');
1562     });
1563     // Bind de la fonction permettant l'ajout du contrevenant
1564     $("#formulaire").on("click","#add_contrevenant", function() {
1565     popupIt('contrevenant',
1566 softime 7996 '../app/index.php?module=sousform&obj=contrevenant&action=0'+
1567 softime 10573 '&retourformulaire=demande&idx_dossier='+id_dossier, 860, 'auto',
1568 softime 6565 getDemandeurId, 'contrevenant');
1569     });
1570     // Bind de la fonction permettant l'ajout du requerant
1571     $("#formulaire").on("click","#add_requerant_principal", function() {
1572     popupIt('requerant',
1573 softime 7996 '../app/index.php?module=sousform&obj=requerant&action=0'+
1574 softime 16749 '&retourformulaire=demande&principal=true&idx_dossier='+id_dossier, 860, 'auto',
1575 softime 6565 getDemandeurId, 'requerant_principal');
1576     });
1577     // Bind de la fonction permettant l'ajout du requerant
1578     $("#formulaire").on("click","#add_requerant", function() {
1579     popupIt('requerant',
1580 softime 7996 '../app/index.php?module=sousform&obj=requerant&action=0'+
1581 softime 10573 '&retourformulaire=demande&idx_dossier='+id_dossier, 860, 'auto',
1582 softime 6565 getDemandeurId, 'requerant');
1583     });
1584     // Bind de la fonction permettant l'ajout de l'avocat
1585     $("#formulaire").on("click","#add_avocat_principal", function() {
1586     popupIt('avocat',
1587 softime 7996 '../app/index.php?module=sousform&obj=avocat&action=0'+
1588 softime 16749 '&retourformulaire=demande&principal=true&idx_dossier='+id_dossier, 860, 'auto',
1589 softime 6565 getDemandeurId, 'avocat_principal');
1590     });
1591     // Bind de la fonction permettant l'ajout de l'avocat
1592     $("#formulaire").on("click","#add_avocat", function() {
1593     popupIt('avocat',
1594 softime 7996 '../app/index.php?module=sousform&obj=avocat&action=0'+
1595 softime 10573 '&retourformulaire=demande&idx_dossier='+id_dossier, 860, 'auto',
1596 softime 6565 getDemandeurId, 'avocat');
1597     });
1598 mbroquet 3730 // Bind de la fonction permettant l'ajout du délégataire
1599     $("#formulaire").on("click","#add_delegataire", function(event) {
1600     popupIt('delegataire',
1601 softime 7996 '../app/index.php?module=sousform&obj=delegataire&action=0'+
1602 softime 10573 '&retourformulaire=demande&idx_dossier='+id_dossier, 860, 'auto',
1603 mbroquet 3730 getDemandeurId, 'delegataire');
1604     });
1605     // Bind de la fonction permettant l'ajout des pétitionnaires
1606     $("#formulaire").on("click","#add_petitionnaire", function(event) {
1607     popupIt('petitionnaire',
1608 softime 7996 '../app/index.php?module=sousform&obj=petitionnaire&action=0'+
1609 softime 10573 '&retourformulaire=demande&idx_dossier='+id_dossier, 860, 'auto',
1610 mbroquet 3730 getDemandeurId, 'petitionnaire');
1611     });
1612 softime 7067 // Bind de la fonction permettant l'ajout du bailleur principal
1613     $("#formulaire").on("click","#add_bailleur_principal", function() {
1614     popupIt('bailleur',
1615 softime 7996 '../app/index.php?module=sousform&obj=bailleur&action=0'+
1616 softime 16749 '&retourformulaire=demande&principal=true&idx_dossier='+id_dossier, 860, 'auto',
1617 softime 7067 getDemandeurId, 'bailleur_principal');
1618     });
1619     // Bind de la fonction permettant l'ajout des bailleurs
1620     $("#formulaire").on("click","#add_bailleur", function() {
1621     popupIt('bailleur',
1622 softime 7996 '../app/index.php?module=sousform&obj=bailleur&action=0'+
1623 softime 10573 '&retourformulaire=demande&idx_dossier='+id_dossier, 860, 'auto',
1624 softime 7067 getDemandeurId, 'bailleur');
1625     });
1626 softime 10573 // Bind de la fonction permettant l'ajout du délégataire
1627     $("#formulaire").on("click","#add_proprietaire", function(event) {
1628     popupIt('proprietaire',
1629     '../app/index.php?module=sousform&obj=proprietaire&action=0'+
1630     '&retourformulaire=demande&idx_dossier='+id_dossier, 860, 'auto',
1631     getDemandeurId, 'proprietaire');
1632     });
1633     // Bind de la fonction permettant l'ajout de l'architecte_lc
1634     $("#formulaire").on("click","#add_architecte_lc", function(event) {
1635     popupIt('architecte_lc',
1636     '../app/index.php?module=sousform&obj=architecte_lc&action=0'+
1637     '&retourformulaire=demande&idx_dossier='+id_dossier, 860, 'auto',
1638     getDemandeurId, 'architecte_lc');
1639     });
1640     // Bind de la fonction permettant l'ajout du paysagiste
1641     $("#formulaire").on("click","#add_paysagiste", function(event) {
1642     popupIt('paysagiste',
1643     '../app/index.php?module=sousform&obj=paysagiste&action=0'+
1644     '&retourformulaire=demande&idx_dossier='+id_dossier, 860, 'auto',
1645     getDemandeurId, 'paysagiste');
1646     });
1647 mbroquet 3730
1648     url = document.location + "" ;
1649 softime 7996 if (url.indexOf("index.php?module=form&") != -1 &&
1650 softime 7685 (
1651     url.indexOf("obj=demande&") != -1 ||
1652     url.indexOf("obj=dossier&") != -1 ||
1653     url.indexOf("obj=dossier_instruction&") != -1 ||
1654     url.indexOf("obj=dossier_instruction_mes_encours&") != -1 ||
1655     url.indexOf("obj=dossier_instruction_tous_encours&") != -1 ||
1656     url.indexOf("obj=dossier_instruction_mes_clotures&") != -1 ||
1657     url.indexOf("obj=dossier_instruction_tous_clotures&") != -1 ||
1658     url.indexOf("obj=dossier_contentieux_mes_infractions&") != -1 ||
1659     url.indexOf("obj=dossier_contentieux_toutes_infractions&") != -1 ||
1660     url.indexOf("obj=dossier_contentieux_mes_recours&") != -1 ||
1661 softime 12847 url.indexOf("obj=dossier_contentieux_tous_recours&") != -1 ||
1662     url.indexOf("obj=sous_dossier&") != -1
1663 mbroquet 3730 )
1664 softime 7996 && url.indexOf("&action=3") == -1
1665 softime 8477 && url.indexOf("&action=126") == -1
1666 softime 10573 && url.indexOf("&action=2") == -1
1667     && url.indexOf("&action=160") == -1) {
1668 mbroquet 3730
1669     formatFieldReferenceCadastrale();
1670     }
1671    
1672     // S'il y a une erreur durant la validation lors de l'ajout
1673     // d'une nouvelle demande
1674 softime 7996 if (url.indexOf("index.php?module=form") != -1 &&
1675 softime 7685 (url.indexOf("obj=demande_nouveau_dossier&") != -1
1676     || url.indexOf("obj=demande_nouveau_dossier_contentieux&") != -1)
1677 mbroquet 3730 && (url.indexOf("&action=3") == -1
1678     && url.indexOf("&action=2") == -1
1679 softime 16749 && url.indexOf("&validation") != -1)) {
1680 mbroquet 3730
1681 softime 16749 add_button_copy_demandeur_address();
1682 mbroquet 3730 addButtonCadastraleAdesse();
1683     formatFieldReferenceCadastrale();
1684 softime 6565 manage_display_demande($('#dossier_autorisation_type_detaille').val());
1685 softime 10573 //On affiche le select du type de la demande
1686     if ($('#demande_type option').size() > 2) {
1687     $('#demande_type').parent().parent().show();
1688     }
1689 softime 16749 verifier_numerotation_urbanisme($('#num_doss_complet')[0]);
1690 mbroquet 3730 }
1691 softime 7685
1692 softime 7996 if (url.indexOf("index.php?module=form") != -1
1693 softime 7685 && (url.indexOf("obj=demande_nouveau_dossier&") != -1
1694     || url.indexOf("obj=demande_nouveau_dossier_contentieux&") != -1)
1695 mbroquet 3730 && (url.indexOf("&action=3") == -1
1696     && url.indexOf("&action=2") == -1
1697     && url.indexOf("&validation") == -1
1698     && $(".form-is-valid").size() == 0)) {
1699    
1700 softime 16749 add_button_copy_demandeur_address();
1701 mbroquet 3730 addButtonCadastraleAdesse();
1702     changeDemandeType();
1703     }
1704    
1705     // Ajout de demande
1706 softime 7996 if (url.indexOf("index.php?module=form") != -1
1707 softime 7685 && (url.indexOf("obj=demande_nouveau_dossier&") != -1
1708     || url.indexOf("obj=demande_nouveau_dossier_contentieux&") != -1
1709     || url.indexOf("obj=demande_dossier_encours&") != -1
1710     || url.indexOf("obj=demande_autre_dossier&") != -1)
1711 softime 7996 && url.indexOf("&action=0") != -1
1712     && url.indexOf("&validation") == -1){
1713 mbroquet 3730
1714     /*Cache les champs avant que dossier_autorisation_type_detaille soit choisi*/
1715     hideFields();
1716     }
1717    
1718     // Ajout de demande sur dossier existant
1719 softime 7996 if (url.indexOf("index.php?module=form") != -1
1720 softime 7685 && (url.indexOf("obj=demande_dossier_encours&") != -1
1721     || url.indexOf("obj=demande_autre_dossier&") != -1)
1722 softime 7996 && url.indexOf("&action=0") != -1
1723     && url.indexOf("&validation") == -1){
1724 mbroquet 3730
1725     //Cache les champs avant que dossier_autorisation_type_detaille soit choisi
1726     hideFields();
1727     //On affiche le select du type de la demande
1728     $('#demande_type').parent().parent().show();
1729     }
1730    
1731     // Modification de demande
1732 softime 7996 if ( url.indexOf("index.php?module=form") != -1
1733 softime 7685 && (
1734     url.indexOf("obj=demande&") != -1
1735     || url.indexOf("obj=demande_nouveau_dossier&") != -1
1736     || url.indexOf("obj=demande_nouveau_dossier_contentieux&") != -1
1737     || url.indexOf("obj=demande_dossier_encours&") != -1
1738     || url.indexOf("obj=demande_autre_dossier&") != -1
1739 mbroquet 3730 )
1740     && url.indexOf("&action") == -1
1741     ){
1742    
1743     formatFieldReferenceCadastrale();
1744     }
1745 softime 6702
1746 softime 8989 // Sur le formulaire d'ajout d'une nouvelle demande au chargement de la page
1747     // Si l'option pour saisir la nuérotation manuelle est activée
1748     if ($("#formulaire div.bloc_numero_dossier").exists() === true) {
1749     // Affiche ou cache le bloc de la numérotation manuelle en fonction de
1750     // la case à cocher
1751 softime 17036 toggleNumDossierManuel($("#formulaire div.bloc_numero_dossier div.bloc_activ_num_manu input#num_doss_manuel")[0], true);
1752 softime 8989 }
1753 softime 7685
1754 softime 10573 // Sur le formulaire d'ajout d'une nouvelle demande au chargement de la page
1755     // Si l'option pour saisir la nuérotation manuelle est activée
1756     if ($("#formulaire div.bloc_numero_complet_dossier").exists() === true) {
1757     // Affiche ou cache le bloc de la numérotation manuelle en fonction de
1758     // la case à cocher
1759 softime 17036 toggleNoNumDossComplet($("#formulaire div.bloc_numero_complet_dossier input#no_num_doss_complet")[0], true);
1760 softime 10573 }
1761    
1762 softime 7996 if (url.indexOf("index.php?module=form&") != -1
1763 softime 7685 && url.indexOf("obj=commission&") != -1
1764 softime 6702 && (url.indexOf("&action=0") != -1
1765     || url.indexOf("&action=1") != -1)
1766     && url.indexOf("&validation") == -1
1767     && $(".form-is-valid").size() == 0) {
1768     changeCommissionType();
1769     }
1770 softime 9245
1771 softime 8989 // surcharge la fonction de sélection des onglets
1772     // pour déclencher le (re)chargement de l'onglet DI
1773     // à chaque futur clic provenant d'un autre onglet
1774     var tabs_select_function = $("#formulaire").tabs('option', 'select');
1775     $("#formulaire").tabs('option', 'select', function(event, ui) {
1776 softime 9245 var clicked_on_di_from_another_tab = set_di_href_in_data_load_tabs(event, ui);
1777 softime 8989 tabs_select_function(event, ui);
1778 softime 9245 // cache la recherche dynamique si clique sur DI
1779     if (clicked_on_di_from_another_tab) {
1780     $('#recherche_onglet').hide();
1781     }
1782 softime 8989 });
1783 softime 12124
1784     // Si on est dans le listing du widget suivi_tache on
1785     // ajoute une infobulle sur la colonne du type de tache.
1786     if (url.indexOf("index.php?module=tab&") != -1
1787     && url.indexOf("obj=suivi_tache&") != -1) {
1788 softime 12433
1789     // On doit récupérer la valeur du paramètre widget_recherche_id pour la requête ajax
1790     urlParams = extractUrlParams();
1791     typeTitleText = '';
1792     // Requête ajax de récupération des données
1793     $.ajax({
1794     type: "GET",
1795     url: "../app/index.php?module=form&obj=suivi_tache&action=998&idx=0&widget_recherche_id="+urlParams['widget_recherche_id'],
1796     async: false,
1797     success: function(data){
1798     typeTitleText = data;
1799     }
1800     });
1801 softime 12124 //
1802 softime 12433 $('<span id="infobulle-type" class="ui-icon ui-icon-info" title="'+typeTitleText+'"></span>').insertAfter($("th.col-3 > span.ui-icon-search"));
1803 softime 12124 }
1804 mbroquet 3730 });
1805    
1806 softime 16749
1807 mbroquet 3730 /*
1808 softime 16749 * Méthode permettant de switcher sur l'affichage ou non du message d'information
1809     * sur l'existence d'un DI
1810     */
1811 softime 17036 function toggleDisplayMessageDIExistOnDemandeNouveauDossier(){
1812 softime 16749
1813     //Si le formulaire n'as pas été validée
1814     if ($("form[name=f1] .form-is-valid").size() == 0 ) {
1815     //
1816     var om_collectivite_id = $('#om_collectivite').val();
1817     var datd = $('#dossier_autorisation_type_detaille').val()
1818     var demande_type = $('#demande_type').val()
1819     // Vérifie si la checkbox "saisir le numéro de dossier" est cochée
1820     var checkbox = document.getElementById('no_num_doss_complet');
1821     var checkboxIsChecked = checkbox.checked;
1822    
1823     // Si la checkbox saisie du numéro de dossier est déselectionné
1824     if (checkboxIsChecked === false
1825     && om_collectivite_id.length !== 0
1826     && datd.length !== 0
1827     && demande_type.length !== 0) {
1828     // trigger true checkbox numéro de dossier
1829 softime 17036 displayMessageDIExistOnDemandeNouveauDossier();
1830 softime 16749 } else {
1831     // vider le message d'erreur
1832     $('#complet_err_msg').remove();
1833     // On supprime le message car checkbox saisie du numéro de dossier à false
1834 softime 17036 undisplayPanelInformation('#display_message_di_exist');
1835 softime 16749 }
1836     } else {
1837     // vider le message d'erreur
1838     $('#complet_err_msg').remove();
1839     // On supprime le message car checkbox saisie du numéro de dossier à false
1840 softime 17036 undisplayPanelInformation('#display_message_di_exist');
1841 softime 16749 }
1842     }
1843    
1844     /*
1845     * Méthode de récupération et d'affichage du message d'information sur l'existence
1846     * d'un DI avec le même numéro de dossier et collectivié que ceux saisis
1847     * par l'utilisateur
1848     */
1849 softime 17036 function displayMessageDIExistOnDemandeNouveauDossier(){
1850 softime 16749
1851     // Récupération des valeurs necessaire pour la recherche du DI
1852     var om_collectivite_id = $('#om_collectivite').val();
1853     var num_doss_complet = $('#num_doss_complet').val();
1854     // Si la suite du formulaire s'est bien affiché (!= "none")
1855     var ready_to_display = $('#liste_demandeur.demande_hidden_bloc')[0];
1856    
1857     if (om_collectivite_id !== undefined && om_collectivite_id !== ''
1858     && (num_doss_complet !== undefined && num_doss_complet !== '')
1859     && $(ready_to_display).is(":visible")) {
1860    
1861     // récupère l'objet de l'url courante
1862     // Permet le switch entre une nouvelle demande de dossier classique et de contentieux
1863     var obj = getUrlParamValue('obj', window.location.search);
1864    
1865     // Lien vers l'action permettant de récupérer certaines valeurs du DI
1866     var url = '../app/index.php?module=form&obj=' + obj + '&action=180&numero_dossier=' + num_doss_complet +
1867     '&om_collectivite_id=' + om_collectivite_id;
1868    
1869     // Récupération du message avec son contenu réactualisé
1870     $.ajax({
1871     type: 'GET',
1872     url: url,
1873     dataType: 'text',
1874     async: true,
1875     success: function(data) {
1876     // On supprime le message au cas où il existerait déjà (par exemple lors de deux
1877     // recherches successives sur deux DI différent existant)
1878 softime 17036 undisplayPanelInformation('#display_message_di_exist');
1879 softime 16749 // On affiche le message (ré)actualisé avec les nouvelles données du DI
1880     $('#fieldset-form-' + obj + '-type-de-dossier').parent().after(data)
1881     }});
1882     } else {
1883 softime 17036 undisplayPanelInformation('#display_message_di_exist');
1884 softime 16749 }
1885    
1886     }
1887    
1888     /*
1889     * Méthode de suppression du message d'information
1890     * Params selecteur string de précisions pour le selecteur commencent par # pour un ID ou . pour une classe.
1891     */
1892 softime 17036 function undisplayPanelInformation(selecteur = null){
1893 softime 16749 string_selecteur = '.panel_information';
1894     if (selecteur !== null) string_selecteur = selecteur;
1895     $(string_selecteur).remove();
1896     }
1897    
1898     /*
1899 mbroquet 3730 * Action sur les champs pour les références cadastrales
1900     */
1901     function formatFieldReferenceCadastrale(){
1902    
1903     addNewFieldReferencesCadastrales();
1904     $('#terrain_references_cadastrales').parent().parent().hide();
1905    
1906     url = document.location + "";
1907    
1908     reference_cadastrale = $('#terrain_references_cadastrales').val();
1909     /*Formatage de la reference cadastrale*/
1910     if ( reference_cadastrale != '' ){
1911     /* Récupère la référence cadastrale non formatée */
1912     references_cadastrales = reference_cadastrale.split(';');
1913     donnees = new Array();
1914    
1915     i = 0 ;
1916     /* Boucle sur les références, elles étaient séparées par un ; */
1917 softime 7521 for ( idx_line = 0 ; idx_line < references_cadastrales.length - 1 ; idx_line ++ ) {
1918 mbroquet 3730
1919 softime 7521 /*Récupère le code impôts du quartier [CHIFFRES]*/
1920 mbroquet 3730 k = 0;
1921     donnees[i] = '';
1922 softime 7521 for ( j = k ; j < references_cadastrales[idx_line].length ; j++ ) {
1923 mbroquet 3730
1924 softime 10573 if ( k <= 2 ) {
1925 mbroquet 3730
1926 softime 7521 donnees[i] += references_cadastrales[idx_line].charAt(j);
1927 mbroquet 3730 k++;
1928    
1929     } else {
1930    
1931     i++;
1932     break;
1933     }
1934     }
1935 softime 10573
1936     var only_one_letter = true;
1937    
1938     // Le dernier chiffre de la parcelle est soit au caractère 9 soit au caractère 8
1939     if (references_cadastrales[idx_line].charAt(8).length == 0
1940     || references_cadastrales[idx_line].charAt(8) == "A" || references_cadastrales[idx_line].charAt(8) == "/" ) {
1941    
1942     only_one_letter = true;
1943    
1944     } else if ( /^[0-9]+$/.test(references_cadastrales[idx_line].charAt(8)) === true ) {
1945 mbroquet 3730
1946 softime 10573 only_one_letter = false;
1947     }
1948    
1949     /* Récupère la section [LETTRES / CHIFFRES] */
1950 mbroquet 3730 donnees[i] = '';
1951 softime 7521 for ( j = k ; j < references_cadastrales[idx_line].length ; j++ )
1952 softime 10573 if ( (k == 3 || k == 4) && only_one_letter === false
1953     || k == 3 && only_one_letter === true) {
1954 mbroquet 3730
1955 softime 7521 donnees[i] += references_cadastrales[idx_line].charAt(j);
1956 mbroquet 3730 k++;
1957    
1958     } else {
1959    
1960     i++;
1961     break;
1962     }
1963    
1964     /* Récupère la parcelle [CHIFFRES] */
1965     donnees[i] = '';
1966 softime 7521 for ( j = k ; j < references_cadastrales[idx_line].length ; j++ )
1967 softime 10573 if ( (k>=5 && k<9) && only_one_letter === false
1968     || (k>=4 && k<8) && only_one_letter === true){
1969 mbroquet 3730
1970 softime 7521 donnees[i] += references_cadastrales[idx_line].charAt(j);
1971 mbroquet 3730 k++;
1972    
1973     } else {
1974    
1975     break;
1976     }
1977    
1978 softime 10573 /* Récupère les séparateurs [ A / ] */
1979 softime 7521 nb_suffixes = 0; // chaque paire de champs additionnels sur une ligne
1980     if ( k < references_cadastrales[idx_line].length ) {
1981 mbroquet 3730
1982 softime 7521 for ( j = k ; j < references_cadastrales[idx_line].length ; j++ )
1983     if ( isAlpha(references_cadastrales[idx_line].charAt(j)) ){
1984 mbroquet 3730
1985 softime 7521 nb_suffixes++;
1986     donnees[++i] = references_cadastrales[idx_line].charAt(j);
1987 mbroquet 3730 donnees[++i] = '';
1988     }
1989     else {
1990    
1991 softime 7521 donnees[i] += references_cadastrales[idx_line].charAt(j);
1992 mbroquet 3730 }
1993     }
1994    
1995     /*Créé autant de champs de que de référence */
1996     donnees[++i] = ';';
1997     i++;
1998    
1999 softime 7521 if ( idx_line > 0 ) {
2000 softime 16749 $('.reference_cadastrale_custom_fields').append(fieldReferenceCadastraleBase());
2001 mbroquet 3730 }
2002    
2003     actionFormReferenceCadastrale();
2004    
2005 softime 7521 if ( nb_suffixes > 0 ) {
2006 mbroquet 3730
2007 softime 7521 for ( j = 0 ; j < nb_suffixes ; j++ ){
2008 mbroquet 3730
2009 softime 7521 var idx_last_line = $('.moreFieldReferenceCadastrale').length - 1;
2010     var selector = '#moreFieldReferenceCadastrale' + idx_last_line;
2011     /*Boutton "ajouter d'autres champs" (le dernier à ce moment là de l'exécution)*/
2012     var more_fields_button = $(selector);
2013     if (more_fields_button.length === 0) {
2014     console.error('Boutton "ajouter d\'autres champs" non trouvé. selecteur: ' + selector);
2015     continue; // TODO meilleure gestion de cette erreur. Elle n'est pas
2016     // censée arriver et est critique ça va causer un corruption
2017     // du formulaire. (bouton inactifs, )
2018     }
2019     more_fields_button.
2020 mbroquet 3730 before(
2021     newInputReferenceCadastrale()
2022     );
2023     }
2024     }
2025     }
2026     /* Action sur les boutons [+ ajouter d'autres champs] et [+ ajouter
2027     * d'autres lignes] */
2028     actionLineFormReferenceCadastrale();
2029    
2030     /* Ajoute les données dans les champs nouvellement créés */
2031     $('.reference_cadastrale_custom_field').each(
2032     function(index) {
2033    
2034     $(this).val(donnees[index])
2035     }
2036     );
2037     }
2038     else{
2039     actionFormReferenceCadastrale();
2040     actionLineFormReferenceCadastrale();
2041     }
2042     }
2043    
2044     /**
2045     * Ajoute les icônes pour la recherche de pétitionnaire fréquent.
2046     */
2047     function addSearchIcon(){
2048    
2049     $("#form-content:not(.form-is-valid) .search_fields").each(
2050     function() {
2051    
2052     // N'ajoute pas l'icône de recherche sur la collectivité
2053     if ($(this).find("#om_collectivite").length <= 0) {
2054    
2055     //Ajout de l'icône après le champs dénomination et nom de la personne morale*/
2056     $(this).append(
2057     '<span '+
2058     'class="om-icon om-icon-16 om-icon-fix search-frequent-16" '+
2059     'title="Chercher un frequent"> '+
2060     '</span>'
2061     );
2062     }
2063     }
2064     );
2065    
2066     /*Ajout des actions sur les boutons*/
2067     addActionSearchIcon();
2068     addActionRemove();
2069    
2070     }
2071    
2072     /**
2073     * Fonction permettant de revenir sur le formulaire d'ajout de demandeur
2074     **/
2075 softime 16749 function addActionRemove() {
2076     $('.erase-demandeur').click(
2077     function(){
2078     clear_form($('#sousform-demandeur form'), true, ['#qualite']);
2079     });
2080 mbroquet 3730 $('.erase-petitionnaire').click(
2081     function(){
2082 softime 16749 clear_form($('#sousform-petitionnaire form'), true, ['#qualite']);
2083 mbroquet 3730 });
2084 softime 6565 $('.erase-avocat').click(
2085     function(){
2086 softime 16749 clear_form($('#sousform-avocat form'), true, ['#qualite']);
2087 softime 6565 });
2088 softime 7067 $('.erase-bailleur').click(
2089     function(){
2090 softime 16749 clear_form($('#sousform-bailleur form'), true, ['#qualite']);
2091 softime 7067 });
2092 softime 16749 $('.erase-proprietaire').click(
2093     function(){
2094     clear_form($('#sousform-proprietaire form'), true, ['#qualite']);
2095     });
2096     $('.erase-plaignant').click(
2097     function(){
2098     clear_form($('#sousform-plaignant form'), true, ['#qualite']);
2099     });
2100     $('.erase-delegataire').click(
2101     function(){
2102     clear_form($('#sousform-delegataire form'), true, ['#qualite']);
2103     });
2104     $('.erase-requerant').click(
2105     function(){
2106     clear_form($('#sousform-requerant form'), true, ['#qualite']);
2107     });
2108     $('.erase-contrevenant').click(
2109     function(){
2110     clear_form($('#sousform-contrevenant form'), true, ['#qualite']);
2111     });
2112     $('.erase-architecte_lc').click(
2113     function(){
2114     clear_form($('#sousform-architecte_lc form'), true, ['#qualite']);
2115     });
2116     $('.erase-paysagiste').click(
2117     function(){
2118     clear_form($('#sousform-paysagiste form'), true, ['#qualite']);
2119     });
2120 mbroquet 3730 }
2121    
2122     /**
2123     * Vérifie que les champs necessaires sont remplis et retourne les données necessaires
2124     * sous forme de tableau JSOn
2125     */
2126     function getDataSearch(){
2127    
2128     // Récupèration de la valeur de la collectivité du dossier...
2129     var om_collectivite_value = $('#om_collectivite').val();
2130     // ... écrasée éventuellement par celle du demandeur
2131     if ($('#sousform-petitionnaire #om_collectivite').length) {
2132     om_collectivite_value = $('#sousform-petitionnaire #om_collectivite').val();
2133     }
2134 softime 7685 else if ($('#sousform-bailleur #om_collectivite').length) {
2135     om_collectivite_value = $('#sousform-bailleur #om_collectivite').val();
2136     }
2137     else if ($('#sousform-avocat #om_collectivite').length) {
2138     om_collectivite_value = $('#sousform-avocat #om_collectivite').val();
2139     }
2140 mbroquet 3730 // Il faut un minimum de trois lettres pour lancer la recherche
2141     var minChar = false;
2142     // Récupération des données
2143     var dataJson = "{";
2144     $('.search_fields .champFormulaire').each(
2145     function(){
2146     if ( $(this).val().length >= 3 ){
2147     minChar = true;
2148     }
2149    
2150     var idInput = $(this).attr("id");
2151     var valInput = $(this).val();
2152     dataJson += "\"" + idInput + "\":\"" + valInput + "\",";
2153     }
2154     );
2155    
2156     // Si aucune collectivité est sélectionné
2157     if (om_collectivite_value == "") {
2158     //
2159     alert('Veuillez sélectionner une collectivité.');
2160     return "";
2161     }
2162    
2163     if (!minChar){
2164     alert('Saisissez au moins trois lettres pour la recherche');
2165     return "";
2166     }
2167     // Transformation de la chaîne de caractères en tableau
2168     dataJson = $.parseJSON(dataJson.substring(0,dataJson.length-1)+"}");
2169     // Mono : on définit la collectivité
2170     // Multi : on écrase la collectivité
2171     dataJson.om_collectivite = om_collectivite_value;
2172     // Retour des champs avec leur valeur
2173     return dataJson;
2174     }
2175    
2176     /*
2177     * Ajoute les actions sur les icônes de recherche
2178     */
2179     function addActionSearchIcon(){
2180    
2181     //Selon l'objet dans lequel on se trouve
2182     var objName = '';
2183     var objReturn = '';
2184 softime 6565 if ( $('#sousform-petitionnaire').length == 1 ){
2185 mbroquet 3730 objName = 'petitionnaire';
2186     objReturn = 'demande';
2187     }
2188     else if($('#architecte').length == 1){
2189     objName = 'architecte';
2190     objReturn = 'donnees_techniques';
2191     }
2192 softime 6565 else if($('#sousform-avocat').length == 1){
2193     objName = 'avocat';
2194     objReturn = 'demande';
2195     }
2196 softime 7067 else if($('#sousform-bailleur').length == 1){
2197     objName = 'bailleur';
2198     objReturn = 'demande';
2199     }
2200 mbroquet 3730 $('.search-frequent-16').click(
2201     function(){
2202     //Récupération des données
2203     dataJson = getDataSearch();
2204     //Si ce n'est pas un tableau JSON on n'exécute pas le reste du code
2205     if ( typeof dataJson !== 'object' ){
2206     return;
2207     }
2208    
2209     //Requête qui va récupérer les données du addSearchIcon(es)
2210     //pétitionnaire(s) correspondant(s) à la recherche
2211     $.ajax({
2212     type: "POST",
2213     dataType: "json",
2214     data: dataJson,
2215     url: "../app/find" + objName.charAt(0).toUpperCase() + objName.substring(1) + ".php" ,
2216     cache: false,
2217     success: function(obj){
2218     var freq = obj;
2219     var res='';
2220     /*Si la recherche a donné des résultats*/
2221     if ( freq.length > 0 ){
2222     /*Limitation des résultats à 50 */
2223     if ( freq.length > 50 ){
2224    
2225     nbRes = 50;
2226     res += 'Votre recherche a donn&eacute; ' + freq.length
2227     + ' r&eacute;sultats. Seul les cinquantes premiers ' +
2228     'seront affich&eacute;s.<br/>';
2229     } else {
2230     nbRes = freq.length;
2231     }
2232    
2233     res += '<select id="select-'+objName+'">' ;
2234    
2235     /* Met les résultats de la recherche dans un select */
2236     for ( i = 0 ; i < nbRes ; i++ ){
2237     res += '<option value="' + freq[i].value + '">' +
2238     freq[i].content +
2239     '</option>';
2240     }
2241    
2242     res += '</select>';
2243     } else {
2244     res += 'Aucune correspondance trouvée.';
2245     }
2246    
2247     addDivDialog('#sousform-' + objName);
2248     /* Affichage de l'overlay */
2249     $('#dialog').html(res);
2250    
2251     $( "#dialog" ).dialog({
2252     dialogClass: "dialog-search-frequent-"+objName,
2253     modal: true,
2254     buttons : {
2255     Valider: function(){
2256     if ( res != 'Aucune correspondance trouvée.'){
2257     var id = $('#select-'+objName+' option:selected').val();
2258     if($.isNumeric(id)) {
2259     ajaxIt(objName,
2260 softime 7996 '../app/index.php?module=sousform&obj=' + objName +
2261 mbroquet 3730 '&action=110&retourformulaire=' + objReturn +
2262     '&idx='+id
2263     );
2264     }
2265     }
2266     // Fermeture de l'overlay
2267     $(this).dialog( "close" );
2268     $(this).remove();
2269     }
2270     },
2271     close: function(){
2272     $(this).remove();
2273     }
2274     });
2275     },
2276     });
2277     }
2278     );
2279     }
2280    
2281     /*
2282     * Ajoute un div pour l'overlay dialog de jQuery
2283     */
2284     function addDivDialog(id){
2285    
2286     $(id).prepend('<div id="dialog"></div>');
2287 nhaye 5254
2288 mbroquet 3730 }
2289    
2290     /*
2291     Action au changement du select de la qualite du demandeur
2292     * */
2293     function changeDemandeurType(id){
2294    
2295     /*Réinitialise les champs et cache les champs inutiles selon la qualité du demandeur*/
2296     /*Si la qualite du demandeur est particulier */
2297     if ( $('#' + id ).val() == 'particulier' ) {
2298    
2299     $('.personne_morale_fields input').each(
2300     function(){
2301     $(this).val('');
2302     }
2303     );
2304     $('.personne_morale_fields select option[value=""]').each(
2305     function(){
2306     $(this).attr('selected', 'selected');
2307     }
2308     );
2309    
2310     $('.personne_morale_fields').hide();
2311     $('.particulier_fields').show();
2312     }
2313     /*Si c'est une personne morale*/
2314     else if ( $('#' + id ).val() == 'personne_morale' ) {
2315    
2316     $('.particulier_fields input').each(
2317     function(){
2318     $(this).val('');
2319     }
2320     );
2321     $('.particulier_fields select option[value=""]').each(
2322     function(){
2323     $(this).attr('selected', 'selected');
2324     }
2325     );
2326    
2327     $('.particulier_fields').hide();
2328     $('.personne_morale_fields').show();
2329     }
2330     }
2331    
2332     /*
2333     Fonction de test des champs
2334     * */
2335 softime 17036
2336 mbroquet 3730 function isAlpha(str) {
2337     return /^[a-zA-Z\/]+$/.test(str);
2338     }
2339    
2340 softime 17036 function isAlphaNum(str) {
2341 softime 8989 return /^[a-zA-Z0-9\/]+$/.test(str);
2342     }
2343    
2344 softime 17036 // verifNumDec - type text
2345     function verifNumDec(champ) {
2346     champ.value = champ.value.replace(",", "."); // remplacement de la virgule
2347     //if (champ.value.lastIndexOf(".") == -1){ // champ decimal
2348     if (isNaN(champ.value)) {
2349     alert(msg_alert_error_verifnum);
2350     champ.value = "";
2351     return;
2352     }
2353     //}
2354    
2355 mbroquet 3730 }
2356    
2357 softime 8989 /**
2358     * Permet de vérifier que la valeur saisie dans un champ input est une chaîne de
2359     * caractères alphanumérique.
2360     * Le cas échéant, affiche un message d'erreur et supprime la valeur du champ.
2361     *
2362     * @return void
2363     */
2364 softime 17036 function checkInputIsAlphaNum(input, error_msg) {
2365 softime 8989 if (typeof(error_msg) == 'undefined') {
2366     error_msg = "Il ne s'agit pas d'une chaîne alphanumérique.";
2367     }
2368 softime 17036 if (input.value !== '' && isAlphaNum(input.value) === false) {
2369 softime 8989 alert(error_msg);
2370     input.value = '';
2371     }
2372     }
2373 mbroquet 3730
2374 softime 16749 /**
2375     * Permet de vérifier que la valeur saisie dans un champ input est une chaîne de
2376     * caractères alphanumérique.
2377     * Elle ne remonte aucune alerte et n'est pas bloquant
2378     * On supprime tout caractère qui n'est pas alphanumérique
2379     *
2380     * @return void
2381     */
2382     function checkInputNumDossierComplet(input) {
2383     // Si la valeur n'est pas vide
2384 softime 17036 if (input.value !== '' && isAlphaNum(input.value) === false) {
2385 softime 16749 // On nettoye la valeur et on ne conserve que les caractères alphanumériques
2386     input.value = input.value.replace(/[^0-9A-Za-z]/gi, "");
2387     }
2388     }
2389    
2390 mbroquet 3730 /*
2391 softime 7521 * Ajoute les actions spécifiques pour le formulaire personnalisé d'ajout de
2392     * référence cadastrale. (boutons "ajouter d'autres champs")
2393     * Est appelée une fois par ligne de référence cadastrale et bind l'action sur
2394     * le dernier boutton existant.
2395 mbroquet 3730 */
2396     function actionFormReferenceCadastrale(){
2397    
2398     if( $("form[name=f1] .form-is-valid").size() == 0) {
2399    
2400 softime 7521 var idx_last_line = $('.moreFieldReferenceCadastrale').length - 1;
2401     var selector = '#moreFieldReferenceCadastrale' + idx_last_line;
2402     /*Boutton "ajouter d'autres champs" (le dernier à ce moment là de l'exécution)*/
2403     var more_fields_button = $(selector);
2404     if (more_fields_button.length === 0) {
2405     console.error('Boutton "ajouter d\'autres champs" non trouvé. selecteur: ' + selector);
2406     return; // TODO meilleure gestion de cette erreur. Elle n'est pas
2407     // censée arriver et est critique ça va causer un corruption
2408     // du formulaire. (bouton inactifs, )
2409     }
2410     more_fields_button.
2411 mbroquet 3730 on("click", function() {
2412    
2413     $(this).before(newInputReferenceCadastrale());
2414     });
2415     }
2416    
2417     }
2418    
2419     /*
2420     * Récupère les données saisies dans les champs de références cadastrales
2421     */
2422     function getDataFieldReferenceCadastrale(){
2423    
2424 softime 16749 let reference_cadastrale = '';
2425     let reference_cadastrale_temp = '';
2426     let error = false;
2427 mbroquet 3730
2428     /*Pour chacun des champs du formulaire de saisie de référence cadastrale*/
2429     $('.reference_cadastrale_custom_field').each(
2430     function(){
2431 softime 16749
2432 mbroquet 3730 /*Si on est à la fin d'une ligne de champs*/
2433     if ( $(this).val() == ';' ){
2434 softime 16749 reference_cadastrale_bis = reference_cadastrale_temp ;
2435 mbroquet 3730 /* Vérifie que les données sont correctement formatées avant de
2436     * les ajouter au résultat*/
2437 softime 16749 if ( reference_cadastrale_bis !== ''){
2438     // On vérifie que le formatage correct, ainsi que la présence éventuelle d'opérateurs en fin de référence
2439     if ( /^([0-9]{1,4}[0-9a-zA-Z]{1,2}[0-9]{1,5}([A\/]{1}[0-9]{1,4})*)*[A\/]*$/.test(reference_cadastrale_bis) ){
2440     // On supprime les opérateurs finaux indésirables
2441     reference_cadastrale_bis = reference_cadastrale_bis.replace(/[A\/]*$/, '');
2442     reference_cadastrale += reference_cadastrale_bis + (reference_cadastrale_bis ? ";" : "") ;
2443 mbroquet 3730 }
2444     else{
2445     alert("Les références cadastrales saisies sont incorrectes. Veuillez les corriger.");
2446     error = true;
2447     return false;
2448 softime 16749 }
2449 mbroquet 3730 }
2450     reference_cadastrale_temp = '';
2451     }
2452     else {
2453     /*Sinon, on récupère la valeur du champ*/
2454     reference_cadastrale_temp += $(this).val();
2455     }
2456     }
2457     );
2458    
2459     if(error) return false;
2460     /*Met la valeur du résultat dans le champs généré par le framework*/
2461     $('#terrain_references_cadastrales').val(reference_cadastrale);
2462     return true;
2463     }
2464    
2465     /*
2466     Action pour l'ajout de nouvelle ligne dans le formulaire d'ajout
2467     de référence cadastrale
2468     * */
2469     function actionLineFormReferenceCadastrale(){
2470 softime 10573
2471 mbroquet 3730 if( $("form[name=f1] .form-is-valid").size() == 0) {
2472    
2473     $('#morelineReferenceCadastrale').click(
2474     function(){
2475    
2476     /*Ajout des trois champs de base*/
2477     $('.reference_cadastrale_custom_fields').
2478 softime 16749 append(fieldReferenceCadastraleBase());
2479 mbroquet 3730
2480     /*Ajout du bind pour l'ajout de nouveaux champs*/
2481 softime 7521 var idx_last_line = $('.moreFieldReferenceCadastrale').length - 1;
2482     var selector = '#moreFieldReferenceCadastrale' + idx_last_line;
2483     /*Boutton "ajouter d'autres champs" (le dernier à ce moment là de l'exécution)*/
2484     var more_fields_button = $(selector);
2485     if (more_fields_button.length === 0) {
2486     console.error('Boutton "ajouter d\'autres champs" non trouvé. selecteur: ' + selector);
2487     return; // TODO meilleure gestion de cette erreur. Elle n'est pas
2488     // censée arriver et est critique ça va causer un corruption
2489     // du formulaire. (bouton inactifs, )
2490     }
2491     more_fields_button.
2492 mbroquet 3730 on("click", function() {
2493     $(this).before(newInputReferenceCadastrale());
2494     });
2495     }
2496     );
2497     }
2498     }
2499    
2500 softime 6702
2501 softime 6565 /**
2502 softime 6702 * Gestion du type de commission et de l'affichage des champs du formulaire
2503     * lors de la sélection de la collectivité.
2504     *
2505     * @return void
2506     */
2507     function changeCommissionType(){
2508    
2509     var idCollectivite = $("#om_collectivite").val();
2510    
2511     // Si l'identifiant fourni est valide
2512     if ($.isNumeric(idCollectivite)){
2513    
2514     // Met à jour la liste déroulante des type de commission
2515     // avec les données correspondantes
2516     filterSelect(idCollectivite, 'commission_type', 'om_collectivite', 'commission');
2517     }
2518     }
2519    
2520 softime 7366
2521 softime 6702 /**
2522 softime 10573 * Gestion du type de la demande
2523 softime 6565 * lors de la sélection du type de DA détaillé.
2524     *
2525     * @return void
2526     */
2527 softime 10573 function changeDemandeType(tab_datd_dossier_platau){
2528 mbroquet 3730
2529     var idDossierAutorisationTypeDetaille =
2530     $("#dossier_autorisation_type_detaille").val();
2531 softime 10573
2532 softime 6565 // Récupère les données saisies dans les champs pour la référence cadastrale
2533 mbroquet 3730 getDataFieldReferenceCadastrale();
2534 softime 6565
2535     // Si l'identifiant fourni est valide
2536 mbroquet 3730 if ( $.isNumeric(idDossierAutorisationTypeDetaille) ){
2537 softime 6565
2538 softime 10573 // Si le champ 'demande_type' existe
2539     var demande_type_node = document.getElementById('demande_type');
2540     if (demande_type_node) {
2541    
2542     // Met à jour la liste déroulante du type de demande
2543     // avec les données correspondantes
2544     filterSelect(idDossierAutorisationTypeDetaille, 'demande_type', 'dossier_autorisation_type_detaille', 'demande');
2545    
2546     // récupère l'élément jQuery correspondant
2547     var demande_type_jq = $(demande_type_node);
2548    
2549     // Affiche la liste déroulante du type de demande
2550     demande_type_jq.parent().parent().show();
2551    
2552     // S'il n'y a qu'un seul type de demande
2553     // on le sélectionne et on le masque
2554     if ($('#demande_type option').size() === 2) {
2555     var idx_type_demande = $('#demande_type option').eq(1).val();
2556     demande_type_jq.val(idx_type_demande);
2557     //demande_type_jq.trigger('change');
2558     demande_type_jq.parent().parent().hide();
2559     }
2560 mbroquet 3730 }
2561 softime 10573 }
2562     }
2563    
2564     /*
2565     * Renvoi 'true' si le formulaire de la dmande est déjà affiché en entier, 'false' sinon.
2566     *
2567     */
2568     function isNouvelleDemandeFormDisplayed() {
2569     var date_demande_node = document.getElementById('date_demande');
2570     var type_of_date_demande_node = typeof(date_demande_node);
2571     if (type_of_date_demande_node != 'undefined' && type_of_date_demande_node != null) {
2572     return $(date_demande_node).is(":visible");
2573     }
2574     return false;
2575     }
2576    
2577     /*
2578     * Affiche le formulaire de demande, en fonction du DAtd et de la demande type
2579     *
2580     * @return void
2581     */
2582     function afficheFormDemandeDAtd(hideWhenAlreadyAForm = 0) {
2583    
2584     var idDossierAutorisationTypeDetaille =
2585     $("#dossier_autorisation_type_detaille").val();
2586    
2587     // Si l'identifiant fourni est valide
2588     if ($.isNumeric(idDossierAutorisationTypeDetaille)) {
2589    
2590     // si on a demandé à masquer les champs d'abord (avant de les ré-afficher)
2591     var hideSec = 0;
2592     if (isNouvelleDemandeFormDisplayed()) {
2593     hideFields();
2594     hideSec = hideWhenAlreadyAForm;
2595 softime 6565 }
2596 softime 10573 setTimeout(function () {
2597 softime 16749 manage_display_demande(idDossierAutorisationTypeDetaille);
2598 softime 6565
2599 softime 10573 // S'il n'y a qu'un seul type de demande on affiche les champs d'après
2600 softime 16749 // et on remplis la liste à choix de la nature des travaux
2601 softime 10573 if ($('#demande_type option').size() === 2) {
2602 softime 16749 filterSelect($('#demande_type').val(), 'nature_travaux', 'demande_type', 'demande_nouveau_dossier');
2603 softime 10573 }
2604    
2605     // S'il n'y a pas de type de demande
2606     // on affiche directement les champs d'après
2607     else if ($('#demande_type option').size() < 2) {
2608     showFormDemande();
2609     }
2610    
2611     // sinon on affiche le champ
2612     else {
2613     $('#demande_type').parent().parent().show();
2614     }
2615    
2616     // Si aucune option n'est sélectionnée on masque les champs d'après
2617     if($('#demande_type').val() == '' ) {
2618     hideFields(false); // masquer les champs mais pas 'demande_type'
2619     $('input[type=submit]').hide();
2620     }
2621     }, hideSec);
2622 mbroquet 3730 }
2623 softime 10573
2624 softime 6565 // Sinon on cache tous les champs du formulaire
2625 mbroquet 3730 else {
2626     hideFields();
2627     }
2628     }
2629    
2630 softime 10573 /*
2631     * Affiche le formulaire de demande, en fonction de la demande type
2632     *
2633     * @return void
2634     */
2635     function afficheFormDemandeDT(hideWhenAlreadyAForm = 0) {
2636     // si on a demandé à masquer les champs d'abord (avant de les ré-afficher)
2637     var hideSec = 0;
2638     if (isNouvelleDemandeFormDisplayed()) {
2639     hideFields(false); // ne pas masquer le champ 'type de demande'
2640     hideSec = hideWhenAlreadyAForm;
2641     }
2642     setTimeout(function () {
2643    
2644     // appelle de la "vraie" fonction d'affichage du formulaire
2645     showFormDemande();
2646     }, hideSec);
2647     }
2648    
2649 softime 8593 /**
2650     * Méthode permettant d'afficher ou de cacher les champs signaiter et type de rédaction
2651     * lors de l'ajout d'une instruction.
2652     *
2653     * @param {evenement_id} integer Identifiant de l'événement sélectionné
2654     * @param {idxformulaire} string Identifiant du DI de l'instruction en cours d'ajout
2655     *
2656     * @return void
2657     */
2658     function manage_instruction_evenement_lettretype(evenement_id, idxformulaire) {
2659     // Lien
2660     link = "../app/index.php?module=form&obj=instruction&action=300&idx=0&idxformulaire=" + idxformulaire + "&evenement_id=" + evenement_id;
2661     // Traitement
2662     $.ajax({
2663     type: "GET",
2664     url: link,
2665     cache: false,
2666     dataType: "json",
2667     success: function(data) {
2668     if (data.lettretype === true) {
2669     $('#signataire_arrete').parent().parent().show();
2670     if (data.option_redaction_libre_enabled === true) {
2671     $('#flag_edition_integrale').parent().parent().show();
2672     }
2673 softime 12847
2674     // Si on a une lettre type qui est associé au dossier
2675     // Récupération de la valeur du onsubmit pour la modifier et la faire passer à retour=form au lieu de retour=tab
2676     var new_link_onsubmit = $('div#sousform-container form')[0].getAttribute("onsubmit").replace('retour=tab', 'retour=form');
2677     // On réinjecte le contenu du "onsubmit" modifié dans la balise concernée
2678     $('div#sousform-container form').attr("onsubmit", new_link_onsubmit)
2679    
2680     // Récupération de la valeur du data-href pour la modifier et la faire passer à retour=form au lieu de retour=tab
2681     var new_data_href_link = document.getElementById("sousform-href").getAttribute('data-href').replace('retour=tab', 'retour=form')
2682     $('div#sousform-href').attr("data-href", new_data_href_link)
2683    
2684 softime 8593 } else {
2685     $('#signataire_arrete').parent().parent().hide();
2686     $('#flag_edition_integrale').parent().parent().hide();
2687 softime 12847
2688     // Modification/simplification du parcours utilisateur lors de l'ajout d'une instruction et si aucune lettre type n'est associé au dossier
2689     // Récupération de la valeur du onsubmit pour la modifier et la faire passer à retour=tab au lieu de retour=form
2690     var new_link_onsubmit = $('div#sousform-container form')[0].getAttribute("onsubmit").replace('retour=form', 'retour=tab');
2691     // On réinjecte le contenu du "onsubmit" modifié dans la balise concernée
2692     $('div#sousform-container form').attr("onsubmit", new_link_onsubmit)
2693    
2694     // Récupération de la valeur du data-href pour la modifier et la faire passer à retour=tab au lieu de retour=form
2695     var new_data_href_link = document.getElementById("sousform-href").getAttribute('data-href').replace('retour=form', 'retour=tab')
2696     $('div#sousform-href').attr("data-href", new_data_href_link)
2697 softime 8593 }
2698     },
2699     async: false,
2700     });
2701     }
2702    
2703 softime 10573 /**
2704 softime 19592 * Méthode permettant d'afficher ou de cacher le champ destinataire
2705     * lors de l'ajout d'une instruction.
2706     *
2707     * @param {evenement_id} integer Identifiant de l'événement sélectionné
2708     * @param {idxformulaire} string Identifiant du DI de l'instruction en cours d'ajout
2709     * @param {service_consultant} string Service consultant éventuel
2710     *
2711     * @return void
2712     */
2713     function manage_instruction_evenement_destinataire(evenement_id, idxformulaire, service_consultant) {
2714     // Lien
2715     link = "../app/index.php?module=form&obj=instruction&action=302&idx=0&idxformulaire=" + idxformulaire + "&evenement_id=" + evenement_id;
2716     // Traitement
2717     $.ajax({
2718     type: "GET",
2719     url: link,
2720     cache: false,
2721     dataType: "json",
2722     success: function(data) {
2723     if (data.tiers_destinataire === "acteur" || data.tiers_destinataire === "acteur_service_consultant") {
2724     $('#tiers_destinataire').parent().parent().show();
2725     $("#tiers_destinataire").val(0).trigger("chosen:updated");
2726     if (data.tiers_destinataire === "acteur_service_consultant" && service_consultant) {
2727     $("#tiers_destinataire").val(service_consultant).trigger("chosen:updated");
2728     }
2729     } else {
2730     $('#tiers_destinataire').parent().parent().hide();
2731     }
2732     },
2733     async: false,
2734     });
2735     }
2736    
2737     /**
2738 softime 10573 * Méthode permettant d'afficher ou de cacher le champs commentaire lors de l'ajout d'une instruction.
2739     *
2740     * @param {evenement_id} integer Identifiant de l'événement sélectionné
2741     * @param {idxformulaire} string Identifiant du DI de l'instruction en cours d'ajout
2742     *
2743     * @return void
2744     */
2745     function manage_instruction_evenement_commentaire(evenement_id, idxformulaire) {
2746     // Lien
2747     link = "../app/index.php?module=form&obj=instruction&action=301&idx=0&idxformulaire=" + idxformulaire + "&evenement_id=" + evenement_id;
2748     // Traitement
2749     $.ajax({
2750     type: "GET",
2751     url: link,
2752     cache: false,
2753     dataType: "json",
2754     success: function(data) {
2755     if (data.commentaire === true) {
2756     $('#commentaire').parent().parent().show();
2757     // Permet de correctement possitionner le champ
2758 softime 18769 $('#commentaire').parent().parent().attr('style', 'display: grid');
2759     // modifie la classe du parent du parent
2760     if (! $('#commentaire').parent().parent().hasClass('field-type-textarea') && $('#commentaire').parent().parent().hasClass('field-type-textareahidden')) {
2761     $('#commentaire').parent().parent().removeClass('field-type-textareahidden');
2762     $('#commentaire').parent().parent().addClass('field-type-textarea');
2763     }
2764 softime 10573 } else {
2765 softime 18769 // modifie la classe du parent du parent
2766     if (! $('#commentaire').parent().parent().hasClass('field-type-textareahidden') && $('#commentaire').parent().parent().hasClass('field-type-textarea')) {
2767     $('#commentaire').parent().parent().removeClass('field-type-textarea');
2768     $('#commentaire').parent().parent().addClass('field-type-textareahidden');
2769     }
2770 softime 10573 $('#commentaire').parent().parent().hide();
2771     $('#commentaire').val("");
2772     }
2773     },
2774     async: false,
2775     });
2776     }
2777 mbroquet 3730 /*
2778     Ajoute le code HTML des champs pour les références cadastrales
2779     * */
2780     function addNewFieldReferencesCadastrales(){
2781    
2782 softime 7521 // Nettoyage des bouttons "ajouter d'autres champs" car dans
2783     // fieldReferenceCadastraleBase() appelée ci-après, on compte le nombre de
2784     // bouttons. Et si on les supprimes après, on aura pas exemple le nouveau
2785     // bouton en position 0 mais avec l'id 2. Ce qui va causer des bugs.
2786     $('.moreFieldReferenceCadastrale').remove();
2787    
2788 mbroquet 3730 var html = '<div class="field field-type-text references_cadastrales_new_field" >'+
2789     '<div class="form-libelle">' +
2790     '<label '+
2791     'class="libelle-terrain_references_cadastrales" '+
2792     'for="terrain_references_cadastrales">'+
2793     ' Références cadastrales '+
2794     '</label>' +
2795     '</div>' +
2796     '<div class="form-content reference_cadastrale_custom_fields">' +
2797     fieldReferenceCadastraleBase() +
2798     '</div>' +
2799     '</div>';
2800    
2801     url = document.location + "";
2802 softime 6565 demandeInfo = getDemandeInfo('nature');
2803     if((demandeInfo == 'NOUV' || demandeInfo == 'NONE' ) && $(".form-is-valid").size() == 0 && url.indexOf('action=3') == -1 ) {
2804 softime 16749 html += ` <button type="button" id="morelineReferenceCadastrale" class="om-form-button button-secondary" title="Ajouter">
2805     <i class="ri-map-pin-add-line"></i> Ajouter d'autres sections
2806     </button>` ;
2807 mbroquet 3730 }
2808    
2809     $('.references_cadastrales_new_field').remove();
2810     $('#morelineReferenceCadastrale').remove();
2811     $('#terrain_references_cadastrales').parent().parent().before(
2812     html
2813     );
2814     }
2815    
2816 softime 16749 /**
2817     * Fonction d'ajout du nouveau bouton permettant
2818     * la copie de l'adresse du demandeur
2819     */
2820     function add_button_copy_demandeur_address(){
2821     //
2822     if($(".form-is-valid").size() == 0) {
2823     $('.demande__localisation--adresse .bloc-titre').after(
2824     '<div class="demande__localisation--copy-address">' +
2825     '<button id="dem-adr-them" '+
2826     'class="om-form-button button-secondary" '+
2827     'type="button" '+
2828     'onclick="copy_demandeur_address();" '+
2829 softime 18436 '><i class="ri-file-copy-2-line"></i>recopier adresse du demandeur</button>' +
2830 softime 16749 '</div>' );
2831     }
2832    
2833     }
2834    
2835 mbroquet 3730 function addButtonCadastraleAdesse(){
2836    
2837     // Permet d'ajouter le bouton de récupération d'adresse si sig activé
2838 softime 16749 if ($('#option_sig').val() == 'sig_externe'
2839     && $(".form-is-valid").size() == 0 ){
2840 mbroquet 3730
2841 softime 16749 $('.demande__localisation--adresse #dem-adr-them').after(
2842     '<button id="cad-adr-them" '+
2843     'class="om-form-button button-secondary" '+
2844     'type="button" '+
2845     'onclick="getAdressFromCadastrale();" '+
2846     '><i class="ri-map-pin-line"></i>adresse de la parcelle</button>'
2847     );
2848 mbroquet 3730 }
2849     }
2850    
2851 softime 16749 /**
2852     * Fonction permettant la copie de l'adresse du demandeur
2853     * pour insérer les données dans les champs correspondant
2854     * de l'adresse du terrain
2855     */
2856     function copy_demandeur_address(){
2857     var demandeur_id = $(".demandeur_id").val()
2858     //
2859     if(demandeur_id !== undefined){
2860     // Lien vers l'action permettant de récupérer les valeurs de l'adresse
2861     // postale du demandeur
2862     var url = '../app/index.php?module=form&obj=demandeur&action=11&demandeur_id=' + demandeur_id;
2863     // Remplissage des champs de l'adresse du terrain
2864     $.ajax({
2865     type: 'GET',
2866     url: url,
2867     dataType: 'json',
2868     async: true,
2869     success: function(data) {
2870     $('#terrain_adresse_voie_numero').val(data.numero);
2871     $('#terrain_adresse_voie').val(data.voie);
2872     $('#terrain_adresse_lieu_dit').val(data.lieu_dit);
2873     $('#terrain_adresse_localite').val(data.localite);
2874     $('#terrain_adresse_code_postal').val(data.code_postal);
2875     $('#terrain_adresse_bp').val(data.bp);
2876     $('#terrain_adresse_cedex').val(data.cedex);
2877     }
2878     });
2879     }
2880     }
2881    
2882 softime 17542 /**
2883     * Fonction permettant la copie du contenu d'un modèle
2884     * dans le champs analyse réglementaire d'un rapport d'instruction.
2885     */
2886     function copy_modele_rapport_instruction(){
2887     var modele_id = $("#modele").val()
2888     //
2889     if(modele_id !== undefined){
2890     // Lien vers l'action permettant de récupérer les valeurs de l'adresse
2891     // postale du demandeur
2892     var url = '../app/index.php?module=form&obj=rapport_instruction&action=130&modele_id=' + modele_id;
2893     // Remplissage des champs de l'adresse du terrain
2894     $.ajax({
2895     type: 'GET',
2896     url: url,
2897     dataType: 'json',
2898     async: true,
2899     success: function(data) {
2900     // Remplissage du textarea complement_om_html
2901     var obj = tinyMCE.get('analyse_reglementaire_om_html');
2902     obj.setContent(data.analyse_reglementaire_om_html);
2903     }
2904     });
2905     }
2906     }
2907    
2908 mbroquet 3730 /*
2909     Séparateur caché ; pour marqué la fin d'une ligne de référence cadastrale
2910     * */
2911     function hiddenSeparatorField(){
2912    
2913     return '<input ' +
2914     'class="reference_cadastrale_custom_field" ' +
2915     'type="hidden" ' +
2916     'maxlength="2" ' +
2917     'size="2" ' +
2918     'value=";" />';
2919     }
2920    
2921     /**
2922 softime 7366 * Retourne l'info passée en paramètre parmi trois possibilités:
2923     * - la nature de la demande
2924     * - le type de demande est à avec_recup (de petitionnaire)
2925     * - le type d'affichage
2926 mbroquet 3730 **/
2927     function getDemandeInfo(info) {
2928     var id_demande_type = $('#demande_type').val();
2929     var res = "";
2930 softime 6565 if ( typeof id_demande_type !== "undefined" && id_demande_type !== ''){
2931 mbroquet 3730 $.ajax({
2932     type: "GET",
2933     url: "../app/getDemandeInfo.php?iddemandetype=" + id_demande_type
2934     + "&info=" + info,
2935     cache: false,
2936     async: false,
2937     success: function(val){
2938     res = val;
2939     }
2940     });
2941     }
2942     else {
2943    
2944     res = "NONE"
2945     }
2946     return res;
2947     }
2948     /*
2949     Ajout d'une nouvelle ligne de champ de référence cadastrale
2950     Retourne le code HTML
2951     * */
2952     function fieldReferenceCadastraleBase(){
2953    
2954 softime 16749 let url = document.location + "";
2955 mbroquet 3730
2956     var type = getDemandeInfo('nature');
2957 softime 16749
2958 mbroquet 3730 // désactivation des champs de référence cadastrale
2959 softime 16749 // si on est sur l'objet correspondant à une nouvelle demande
2960 softime 10573 var urlParams = extractUrlParams();
2961     var obj = 'obj' in urlParams ? urlParams['obj'] : null;
2962 mbroquet 3730
2963 softime 16749 let prefixeDisabled = () => {
2964     if((obj !== 'demande_nouveau_dossier'
2965     && obj !== 'demande_nouveau_dossier_contentieux'
2966     && type != 'NOUV'
2967     && type != 'NONE')
2968 softime 10573 || $(".form-is-valid").size() > 0
2969     || url.indexOf('action=3') != -1 ) {
2970 softime 16749 return 'disabled="disabled" ';
2971     }
2972 mbroquet 3730 }
2973    
2974 softime 16749 let reference_cadastrale =
2975     // Champ "Préfixe"
2976     `<div class="champ--ref-cadastrales__section">
2977     <div class="champ--ref-cadastrales">
2978     <label for="references-cadastrales--prefixe">Préfixe</label>
2979     <input class="champFormulaire reference_cadastrale_custom_field"
2980     type="text"
2981     id="references-cadastrales--prefixe"
2982 softime 17036 onchange="VerifNum(this);strPadJs(this, 3);"
2983 softime 16749 maxlength="3"
2984     size="3" placeholder="_ _ _"
2985     ${prefixeDisabled()}
2986     value="" />
2987     </div>`
2988     +
2989     // Champ "Section"
2990     `<div class="champ--ref-cadastrales">
2991     <label for="references-cadastrales--section">Section</label>
2992     <input class="champFormulaire reference_cadastrale_custom_field"
2993     type="text"
2994     id="references-cadastrales--section"
2995     maxlength="2"
2996     size="2"
2997     placeholder="_ _"
2998     ${prefixeDisabled()}
2999     value=""
3000 softime 17036 onchange="this.value=this.value.toUpperCase();checkInputIsAlphaNum(this);strPadJs(this, 2);"/>
3001 softime 16749 </div>`
3002     +
3003     // Champ "Numéro"
3004     `<div class="champ--ref-cadastrales">
3005     <label for="references-cadastrales--numero">Numéro</label>
3006     <input class="champFormulaire reference_cadastrale_custom_field" references-cadastrales--numero
3007     type="text"
3008     id="references-cadastrales--numero"
3009     maxlength="4"
3010     size="4"
3011     placeholder="_ _ _ _"
3012     ${prefixeDisabled()}
3013     value=""
3014 softime 17036 onchange="VerifNum(this);strPadJs(this, 4);"/>
3015 softime 16749 </div>`
3016     +
3017     // Section pour l'ajout de séparateur et autres numéros
3018     `<div id="moreFieldReferenceCadastrale${$('.moreFieldReferenceCadastrale').length}"
3019     class="moreFieldReferenceCadastrale">` + hiddenSeparatorField();
3020 mbroquet 3730
3021 softime 16749 // Si form validé pas de bouton
3022     if(!((obj !== 'demande_nouveau_dossier'
3023     && obj !== 'demande_nouveau_dossier_contentieux'
3024     && type != 'NOUV'
3025     && type != 'NONE')
3026     || $(".form-is-valid").size() > 0
3027     || url.indexOf('action=3') != -1)) {
3028    
3029 mbroquet 3730 reference_cadastrale +=
3030 softime 16749 `<button type="button" class="om-form-button button-primary" title="Ajouter d'autres numéros à des parcelles ayant les mêmes préfixes et section">
3031     <i class="ri-add-line"></i> Ajouter d'autres numéros
3032     </button></div>`;
3033     }
3034     reference_cadastrale += '</div>';
3035 mbroquet 3730
3036     return reference_cadastrale;
3037     }
3038    
3039     /**
3040     * Cache les champs inutules [formulaire de demande]
3041     **/
3042 softime 10573 function hideFields(hideDemandeType = true){
3043 mbroquet 3730 $('.demande_hidden_bloc').each(
3044     function(){
3045     $(this).hide();
3046     }
3047     );
3048     $('input[type=submit]').hide();
3049 softime 10573 if (hideDemandeType) {
3050     $('#demande_type').parent().parent().hide();
3051     }
3052 mbroquet 3730 }
3053    
3054     /**
3055     * Gestion de la checklist des documents obligatoires, fonction appelée onchange
3056     * du champ demande_type.
3057     *
3058     * @param node demande_type champ demande_type
3059     */
3060     function manage_document_checklist(demande_type) {
3061     // Appel de la vue correspondante à l'action 100 de l'objet demande_type
3062 softime 7996 $.getJSON( "../app/index.php?module=form&obj=demande_type&action=100&idx="+$(demande_type).val(), function( data ) {
3063 mbroquet 3730 if(data != false) {
3064     // Si l'action retourne une autre valeur que false on affiche la checklist
3065     show_document_checklist(data);
3066     }
3067     });
3068     }
3069    
3070     /**
3071     * Affichage et gestion du comportement de la checklist des documents obligatoires.
3072     *
3073     * @param {obj} data Objet correspondant au json retourné par l'action 100 de demande_type
3074     */
3075     function show_document_checklist(data) {
3076    
3077     // Préparation du contenu du dialog
3078     var html_list = "<div id='liste_doc'><form><ul>";
3079     // Une checkbox par document obligatoire
3080     $.each(data.documents, function( key, value) {
3081     html_list += "<li><input type='checkbox' name='"+key+"'/> "+value+"</li>"
3082     });
3083     html_list += "</ul></form></div>";
3084    
3085     // Création de la fonction de vérification des checkbox cochées appelée lors
3086     // de la fermeture du dialog
3087     var check_doc = function(){
3088     // Si le nombre de checkbox cochées ne correspond pas au nombre de doc
3089     // fournis par l'action 100 de demande_type on affiche un message d'erreur
3090     // et bloque la fermeture du dialog
3091     if(data.documents.length != $("#liste_doc form input:checked").length) {
3092     alert(data.message_ko);
3093     return false;
3094     }
3095     }
3096     // Définition des boutons du dialog
3097     var dialog_buttons = {};
3098     dialog_buttons[data.libelle_cancel] = function(){
3099     // Si Rejet de la demande, affichage d'un message de confirmation et rechargement
3100     if(window.confirm(data.message_rejet)) {
3101     location.reload();
3102     }
3103     }
3104     dialog_buttons[data.libelle_ok] = function(){
3105     // Si validation du dialog : fermeture
3106     $(this).dialog('close');
3107     }
3108     // Insertion dans le dom du dialog non instancié
3109     $("html").append(html_list);
3110     // Instanciation du dialog
3111     $( "#liste_doc" ).dialog({
3112     title: data.title,
3113     resizable: false,
3114     modal: true,
3115     buttons: dialog_buttons,
3116     // Action avant fermeture : verification des checkbox cochées
3117     beforeClose: check_doc
3118     });
3119     }
3120 softime 10573
3121 mbroquet 3730 /*
3122 softime 16749 Fonction de selection du noeud DOM approprié pour le calcul du champ du code département-commune
3123     * */
3124    
3125     function getNodeForCodeDepcom(){
3126     var node_for_code_depcom = $('#om_collectivite')[0];
3127     var commune_node = document.getElementById('commune');
3128     if (commune_node) {
3129     node_for_code_depcom = commune_node;
3130     }
3131     return node_for_code_depcom;
3132     }
3133    
3134     /*
3135 mbroquet 3730 Affiche les champs dont on a besoin dans le formulaire de demande
3136     * */
3137 softime 6565 function showFormDemande(){
3138 softime 10573
3139 mbroquet 3730 if($('#demande_type').val() != "") {
3140    
3141     $('.demande_hidden_bloc').each(
3142     function(){
3143     $(this).show();
3144     }
3145     );
3146 softime 16749
3147     update_num_dossier_type_da($('select#dossier_autorisation_type_detaille')[0]);
3148     update_num_dossier_code_depcom(getNodeForCodeDepcom());
3149     update_num_dossier_annee($('input#date_demande'));
3150     update_num_dossier_division();
3151    
3152 softime 6565 formatFieldReferenceCadastrale();
3153 mbroquet 3730 $('.field-type-text').show();
3154     $('input[type=submit]').show();
3155     $('.terrain_references_cadastrales_custom').hide();
3156 softime 10573
3157 mbroquet 3730 $('#terrain_references_cadastrales').parent().parent().hide();
3158    
3159     //Vérification des contraintes de récupération des demandeurs si
3160     // pas de récupération, on efface la liste
3161 softime 6565 var demandeInfo = getDemandeInfo('contraintes');
3162 softime 10573 var urlParams = extractUrlParams();
3163     var obj = 'obj' in urlParams ? urlParams['obj'] : null;
3164     // si on est sur l'objet correspondant à une nouvelle demande
3165     if (obj !== 'demande_nouveau_dossier'
3166     && obj !== 'demande_nouveau_dossier_contentieux') {
3167     //
3168     if (demandeInfo == 'sans_recup') {
3169     if($('input[name^=petitionnaire_principal]').size() != -1) {
3170     removeDemandeur("petitionnaire_principal_" + $('input[name^=petitionnaire_principal]').val());
3171     }
3172     if($('input[name^=delegataire]').size() != -1) {
3173     removeDemandeur("delegataire_" + $('input[name^=delegataire]').val());
3174     }
3175     if($('input[name^=proprietaire]').size() != -1) {
3176     removeDemandeur("proprietaire_" + $('input[name^=proprietaire]').val());
3177 mbroquet 3730 }
3178 softime 10573 if($('input[name^=architecte_lc]').size() != -1) {
3179     removeDemandeur("architecte_lc_" + $('input[name^=architecte_lc]').val());
3180 mbroquet 3730 }
3181 softime 10573 if($('input[name^=paysagiste]').size() != -1) {
3182     removeDemandeur("paysagiste_" + $('input[name^=paysagiste]').val());
3183     }
3184 mbroquet 3730
3185 softime 10573 $('#listePetitionnaires input.demandeur_id').each(function(){
3186     if($(this).size() != -1) {
3187 mbroquet 3730
3188 softime 10573 removeDemandeur("petitionnaire_" + $(this).val());
3189     }
3190     });
3191 softime 14064 } else if (demandeInfo !== 'sans_recup'
3192     && demandeInfo !== ''
3193     && demandeInfo !== null) {
3194 softime 10573 //Récupération des demandeurs si la contrainte le permet
3195     $.ajax({
3196     type: "GET",
3197 softime 14064 url: "../app/getDemandeurList.php?dossier_autorisation=" + $('#dossier_autorisation').val() + "&contraintes=" + demandeInfo,
3198 softime 10573 cache: false,
3199     async: false,
3200     success: function(html){
3201     $('#liste_demandeur').replaceWith(html);
3202     }
3203     });
3204     }
3205 mbroquet 3730 }
3206     affichageBoutonsDemandeurs();
3207     } else {
3208     /*Récupère les references cadastrales*/
3209     getDataFieldReferenceCadastrale();
3210 softime 10573
3211 mbroquet 3730 $('.demande_hidden_bloc').each(
3212     function(){
3213     $(this).hide();
3214     }
3215     );
3216     $('input[type=submit]').hide();
3217    
3218     }
3219 softime 16749
3220 softime 17036 toggleDisplayMessageDIExistOnDemandeNouveauDossier();
3221 mbroquet 3730 }
3222    
3223 softime 6565 function lookingForAutorisationContestee() {
3224     // Récupération de l'identifiant du dossier contesté sans espace.
3225     var idx = $('#autorisation_contestee').val().replace(/\s+/g,'');
3226     idx = $.trim(idx);
3227     $('#autorisation_contestee').val(idx);
3228     // Initialisation du bloc de message d'erreur.
3229     var error_message =
3230     '<div ' +
3231     'class="message ui-widget ui-corner-all ui-state-highlight ui-state-error">' +
3232     '<p>' +
3233     '<span class="ui-icon ui-icon-info"></span>' +
3234     '<span class="text">' +
3235     '{0}' +
3236     '</span>' +
3237     '</p>' +
3238     '</div>';
3239     // On vide les demandeurs possiblement déjà présents dans le formulaire
3240     // puisqu'ils vont être récupérés depuis le dossier contesté.
3241 softime 16749 remove_existing_demandeur();
3242 softime 6565
3243     if (idx != '') {
3244     $('#form-message').html(msg_loading);
3245     //
3246     $.ajax({
3247     type: "POST",
3248 softime 7996 url: "../app/index.php?module=form&obj=dossier_instruction&action=220&idx="+idx+"&validation=1&contentonly=true",
3249 softime 6565 cache: false,
3250     data: "submit=plop&",
3251     }).done(function(json) {
3252    
3253     var infos_dossier = jQuery.parseJSON(json);
3254     if (infos_dossier.hasOwnProperty('error')) {
3255     $('#autorisation_contestee').val('');
3256     // Ajout du contenu récupéré (uniquement le bloc message)
3257     $('#form-message').html(error_message.format(infos_dossier.error));
3258     return false;
3259     }
3260     $('#autorisation_contestee_search_button').prop('disabled', true);
3261     $('#autorisation_contestee_search_button').button('option', 'disabled', true);
3262     $('#autorisation_contestee').prop('readonly', true);
3263     $('#form-message').html('');
3264     // Affichage des valeurs de formulaires
3265     $.each(infos_dossier, function( index, value ) {
3266     if ($('#'+index).length == 1) {
3267     $('#'+index).val(value);
3268     }
3269     });
3270     // Affichage des demandeurs
3271     afficherDemandeur(infos_dossier.demandeurs.petitionnaire_principal, 'petitionnaire_principal');
3272     if (infos_dossier.demandeurs.hasOwnProperty("delegataire") == true) {
3273     afficherDemandeur(infos_dossier.demandeurs.delegataire, 'delegataire');
3274     }
3275     if (infos_dossier.demandeurs.hasOwnProperty("petitionnaire") == true) {
3276     $.each(infos_dossier.demandeurs.petitionnaire, function( type, id ) {
3277     afficherDemandeur(id, 'petitionnaire');
3278     });
3279     }
3280     showFormDemande();
3281     });
3282    
3283    
3284     }
3285     }
3286    
3287 softime 16749 /**
3288     * Vide les demandeurs déjà présent sur un formulaier d'ajout de demande.
3289     */
3290     function remove_existing_demandeur() {
3291     $('.petitionnaire_principal').each(function() {
3292     $(this).remove();
3293     });
3294     $('.delegataire').each(function() {
3295     $(this).remove();
3296     });
3297     $('.petitionnaire').each(function() {
3298     $(this).remove();
3299     });
3300     $('.avocat').each(function() {
3301     $(this).remove();
3302     });
3303     $('.requerent').each(function() {
3304     $(this).remove();
3305     });
3306     $('.plaignant').each(function() {
3307     $(this).remove();
3308     });
3309     $('.contrevenant').each(function() {
3310     $(this).remove();
3311     });
3312     $('.bailleur').each(function() {
3313     $(this).remove();
3314     });
3315     $('.proprietaire').each(function() {
3316     $(this).remove();
3317     });
3318     $('.architecte_lc').each(function() {
3319     $(this).remove();
3320     });
3321     $('.paysagiste').each(function() {
3322     $(this).remove();
3323     });
3324     }
3325    
3326     function copy_dossier_demandeurs_principaux_to_new_demande(list_id_demandeur_and_type) {
3327     remove_existing_demandeur();
3328     // Traitement des données pour récupérer l'id du demandeur et son
3329     // type (ceux ne sont que des demandeurs principaux)
3330     let list_demandeur_datas = list_id_demandeur_and_type.split(":")
3331     list_demandeur_datas.forEach(all_data => {
3332     let data_splited = all_data.split(",")
3333     let id_demandeur = data_splited[0]
3334     let type = data_splited[1]
3335    
3336     // On vérifie l'existence ou non du fieldset pour éviter de l'ajouter en double
3337     // Lorsqu'on supprime un demandeur par exemple, et qu'on clique à nouveau sur le bouton
3338     // de récupération des informations du demandeur
3339     // Le(s) fieldset malgré la suppresion, reste dans le dom
3340     // ce qui peux crée des doublons très facilement
3341     if($('fieldset[id='+type+'_'+id_demandeur+']').size() == 0){
3342     // On appelle la méthode d'affichage pour chaque demandeur
3343     afficherDemandeur(id_demandeur, type);
3344     }
3345    
3346     });
3347     }
3348    
3349 softime 6565 function eraseAutorisationContestee(){
3350     $('#autorisation_contestee_search_button').prop('disabled', false);
3351     $('#autorisation_contestee_search_button').button('option', 'disabled', false);
3352     $('#autorisation_contestee').prop('readonly', false);
3353     $('#autorisation_contestee').val('');
3354     hideFields();
3355     }
3356    
3357 mbroquet 3730 /*
3358     Action au clique sur le bouton " + ajouter d'autres champs"
3359     * */
3360     function newInputReferenceCadastrale(){
3361    
3362     // Champs désactivé si le formulaire a été validé et est valide
3363     var type = getDemandeInfo('nature');
3364     var reference_cadastrale_disabled = '';
3365 softime 10573 var urlParams = extractUrlParams();
3366     var obj = 'obj' in urlParams ? urlParams['obj'] : null;
3367     // si on est sur l'objet correspondant à une nouvelle demande
3368     if((obj !== 'demande_nouveau_dossier'
3369     && obj !== 'demande_nouveau_dossier_contentieux'
3370     && type != 'NOUV'
3371     && type != 'NONE')
3372     || $(".form-is-valid").size() > 0
3373     || url.indexOf('action=3') != -1 ) {
3374     //
3375 mbroquet 3730 reference_cadastrale_disabled = 'disabled="disabled" ';
3376     }
3377    
3378 softime 16749 return `<div class="champ--ref-cadastrales">
3379     <select
3380     id="references-cadastrales--operator${$('.references-cadastrales--numero').length}"
3381     class="champFormulaire reference_cadastrale_custom_field"
3382     ${reference_cadastrale_disabled}
3383     >
3384     <option value="A">jusqu'à</option>
3385     <option value="/">et</option>
3386     </select>
3387     </div>`
3388     +
3389     // Champ "Numéro"
3390     `<div class="champ--ref-cadastrales">
3391     <label for="references-cadastrales--numero${$('.references-cadastrales--numero').length}">Numéro</label>
3392     <input class="champFormulaire reference_cadastrale_custom_field references-cadastrales--numero"
3393     type="text"
3394     id="references-cadastrales--numero${$('.references-cadastrales--numero').length}"
3395     maxlength="4"
3396     size="4"
3397     placeholder="_ _ _ _"
3398     ${reference_cadastrale_disabled}
3399     value=""
3400 softime 17036 onchange="VerifNum(this);strPadJs(this, 4);"/>
3401 softime 16749 </div>`;
3402 mbroquet 3730 }
3403    
3404     /**
3405     * Permet d'éventuellement lancer des scripts spécifiques à l'application.
3406     */
3407 softime 6929 function app_initialize_content(tinymce_load) {
3408 softime 14542 // On cache les champs de recherche sousform pour les listing specifiques
3409     if ($('#sousform-document_numerise').exists()
3410     || $('#sousform-dossier_autorisation').exists()
3411     || $('#sousform-dossier_contrainte').exists()
3412     || $('#sousform-lien_dossier_tiers').exists()) {
3413    
3414     $('#recherche_onglet').hide();
3415 nhaye 4780 }
3416 softime 14542
3417 softime 6565 // Si l'onglet consultatione existe
3418     if ($('#sousform-consultation').exists()) {
3419     // Si le champ de recherche de l'onglet à dans son attribut onkeyup
3420     // la chaîne de caractère 'retourformulaire=demande_avis'
3421 softime 7366 if ($('#recherche_onglet input#recherchedyn').exists()
3422     && $('#recherche_onglet input#recherchedyn').attr("onkeyup").match(/retourformulaire=demande_avis/g) !== null) {
3423 softime 6565 //
3424 softime 14542 // On cache le champ de recherche sousform
3425     $('#recherche_onglet').hide();
3426 softime 6565 }
3427     }
3428 mbroquet 3730 changeDemandeurType('qualite');
3429     addSearchIcon();
3430     addDivDialog('.bloc_demandeur');
3431 jymadier 4554 // Interface de gestion de la commission
3432     commission_manage_interface();
3433 nhaye 5254 // Bind actions afficher les données technique depuis les lots
3434     $('a[id^=action-sousform-lot][id$=-donnees_techniques]').each(function(){
3435     $(this).bind_action_for_overlay("donnees_techniques");
3436     });
3437 softime 6565
3438     // Bind des actions après le rafraichissement.
3439     initBindFocus();
3440    
3441     // Bind actions afficher les données technique depuis les lots
3442     $('a[id^=action-sousform-lot][id$=-donnees_techniques]').each(function(){
3443     $(this).bind_action_for_overlay("donnees_techniques");
3444     });
3445    
3446 nmeucci 5549 // Fermeture overlay sur clic bouton retour
3447     $("#sousform-donnees_techniques a.retour").off('click').on('click', function(event) {
3448     $('#sousform-donnees_techniques').dialog('close').remove();
3449 softime 10808 // Rechargement du formulaire en fond de page
3450     form_container_refresh("form");
3451 nmeucci 5549 return false;
3452     });
3453     $("#sousform-architecte a.retour").off('click').on('click', function(event) {
3454     $('#sousform-architecte').dialog('close').remove();
3455     return false;
3456     });
3457     $("#sousform-demande_avis_encours a.retour").off('click').on('click', function(event) {
3458     $('#sousform-demande_avis_encours').dialog('close').remove();
3459     return false;
3460     });
3461 softime 10573 $("#sousform-rapport_instruction a[id^=sousform-action-rapport_instruction-back]").off('click').on('click', function(event) {
3462 softime 5901 $('#sousform-rapport_instruction').dialog('close').remove();
3463     return false;
3464     });
3465 softime 10573 $("#sousform-instruction_preview_edition a.retour").off('click').on('click', function(event) {
3466     $('#sousform-instruction_preview_edition').dialog('close').remove();
3467     return false;
3468     });
3469     $("#sousform-document_numerise_preview_edition a.retour").off('click').on('click', function(event) {
3470     $('#sousform-document_numerise_preview_edition').dialog('close').remove();
3471     return false;
3472     });
3473 softime 6565
3474     var myObj = '';
3475     if ($('#sousform-lien_dossier_dossier').exists()) {
3476     myObj = 'lien_dossier_dossier';
3477     }
3478     if ($('#sousform-lien_dossier_dossier_contexte_ctx_re').exists()) {
3479     myObj = 'lien_dossier_dossier_contexte_ctx_re';
3480     }
3481     if ($('#sousform-lien_dossier_dossier_contexte_ctx_inf').exists()) {
3482     myObj = 'lien_dossier_dossier_contexte_ctx_inf';
3483     }
3484     // Onglet "Dossiers Liés" du DI
3485     if (myObj !== '' && $('#action-soustab-dossier_lies-corner-ajouter').exists()) {
3486    
3487     // Étant donné que la vue spécifique comporte trois tableaux
3488     // et que l'action "Ajouter" d'un tableau remplace uniquement
3489     // celui-ci par le formulaire, on redéfinit son comportement
3490     // en chargeant ce formulaire dans l'onglet entier.
3491     $('#action-soustab-dossier_lies-corner-ajouter').prop('onclick', null).off('click').on('click', function() {
3492     // On récupère le lien de l'action passé dans la foncion JS ajaxIt() appelée dans le onclick
3493     var on_click = $(this).attr('onclick');
3494     var reg = new RegExp(/^ajaxIt\('.*','(.*)'\);$/);
3495     var res = reg.exec(on_click);
3496     if (res !== null) {
3497     var link_action = res[1];
3498     ajaxIt(myObj, link_action);
3499     }
3500     return false;
3501     });
3502     // De même on affiche le message de validation des actions-direct
3503     // en entête de l'onglet au lieu du tableau concerné.
3504     $('#sousform-dossier_lies a.action-direct').prop('onclick', null).off('click').on('click', function() {
3505     // On récupère le lien de l'action passé dans la foncion JS ajaxIt() appelée dans le onclick
3506     var on_click = $(this).attr('onclick');
3507     var reg = new RegExp(/^ajaxIt\('.*','(.*)'\);$/);
3508     var res = reg.exec(on_click);
3509     if (res !== null) {
3510     var link_action = res[1] + '&validation=1&contentonly=true';
3511     var link_tab = $('#tab_dossier_lies_href').attr('data-href');
3512     var msg_container = '#sousform-' + myObj + ' > .soustab-message';
3513     var tab_container = '#sousform-dossier_lies .soustab-container';
3514     $(msg_container).html(msg_loading);
3515     //
3516     $.ajax({
3517     type: "POST",
3518     url: link_action,
3519     cache: false,
3520     success: function(html){
3521     // Ajout du contenu récupéré (uniquement le bloc message)
3522     $(msg_container).html($(html).find('div.message').get(0));
3523     // Rafraichissement du tableau
3524    
3525     $.get(link_tab, function(html_content) {
3526     $(tab_container).html(html_content);
3527     om_initialize_content();
3528     });
3529     }
3530     });
3531     }
3532     return false;
3533     });
3534     }
3535 softime 14064 // Ce code sert à gérer le comportement des actions d'ajout et de suppression de l'onglet acteur.
3536     if ($('#sousform-lien_dossier_tiers').exists()) {
3537     myObj = 'lien_dossier_tiers';
3538     // Étant donné que la vue peux comporter plusieurs tableau et que l'action "Ajouter" d'un
3539     // tableau remplace uniquement celui-ci par le formulaire, on redéfinit son comportement
3540     // en chargeant ce formulaire dans l'onglet entier.
3541     $('#action-soustab-' + myObj + '-corner-ajouter').prop('onclick', null).off('click').on('click', function() {
3542     // Récupère le lien de l'action passé dans la foncion JS ajaxIt() appelée dans le onclick
3543     // et recharge la page en utilisant ce lien
3544     var on_click = $(this).attr('onclick');
3545     var reg = new RegExp(/^ajaxIt\('.*','(.*)'\);$/);
3546     var res = reg.exec(on_click);
3547     if (res !== null) {
3548     var link_action = res[1];
3549     ajaxIt('lien_dossier_tiers', link_action);
3550     }
3551     return false;
3552     });
3553    
3554     // Gestion des action-direct
3555     $('a[id^="action-soustab-' + myObj + '"].action-direct').prop('onclick', null).off('click').on('click', function() {
3556     // Récupère le lien de l'action passé dans la foncion JS ajaxIt() appelée dans le onclick
3557     // Si rien n'a été récupéré, ne fais rien.
3558     // Si le lien a été récupéré, construis l'url de l'action avec ce lien pour ne récupérer que
3559     // le message de retour. Effectue ensuite une requête ajax avec cette url pour récupérer
3560     // le message de traitement.
3561     // Pour finir recharge le formulaire en utilisant l'url récupéré dans la balise #back_link et
3562     // modifie le html pour afficher le tableau à jour et le message de traitement.
3563     var on_click = $(this).attr('onclick');
3564     var reg = new RegExp(/^ajaxIt\('.*','(.*)'\);$/);
3565     var res = reg.exec(on_click);
3566     if (res !== null) {
3567     var link_action = res[1] + '&validation=1&contentonly=true';
3568     var link_tab = $('#back_link').attr('data-href');
3569     $.ajax({
3570     type: "POST",
3571     url: link_action,
3572     cache: false,
3573     success: function(html){
3574     // Ajout du contenu récupéré (uniquement le bloc message)
3575     message = $(html).find('div.message').get(0);
3576     // Rafraichissement du tableau
3577     $.get(link_tab, function(html_content) {
3578     $('#sousform-' + myObj).html(html_content);
3579     $('#sousform-message').html(message);
3580     om_initialize_content();
3581     });
3582     }
3583     });
3584     }
3585     return false;
3586     });
3587     }
3588 softime 7521
3589 softime 14064 // Chosen multiple servant a sélectionner la liste des tiers acteur du dossier
3590     $("div#sousform-lien_dossier_tiers select#tiers").parents('div.formEntete').css("overflow", "visible");
3591     $("div#sousform-lien_dossier_tiers select#tiers option[value='']").empty();
3592     $("div#sousform-lien_dossier_tiers select#tiers").chosen({
3593 softime 18436 width: "750px",
3594 softime 14064 placeholder_text_single: "Sélectionner les acteurs",
3595     no_results_text: "Aucun résultat",
3596     allow_single_deselect: true
3597     });
3598 softime 8593 // Change la liste à choix de l'événement sur l'instruction avec chosen
3599     // Le div.formEntete doit avoir sa propriété overflow à visible pour que le
3600     // contenu de la liste à choix soit correctement affiché
3601     $("div.sousform-instruction-action-0").parents('div.formEntete').css("overflow", "visible");
3602     $("div.sousform-instruction-action-0 select#evenement option[value='']").empty();
3603     $("div.sousform-instruction-action-0 select#evenement").chosen({
3604 softime 18436 width: "750px",
3605 softime 8593 placeholder_text_single: "Choisir l'événement",
3606     no_results_text: "Aucun résultat",
3607     allow_single_deselect: true
3608     });
3609    
3610 softime 11585 // Change la liste à choix des tiers sur la notification des tiers avec chosen
3611     // Le div.formEntete doit avoir sa propriété overflow à visible pour que le
3612     // contenu de la liste à choix soit correctement affiché
3613 softime 11876 $("div#sousform-instruction_notification_manuelle div.formEntete").css({"overflow":"visible","border":"none"});
3614     $("div#sousform-instruction_notification_manuelle").css("overflow", "visible");
3615     $("div#sousform-instruction_notification_manuelle").parent('div.ui-dialog.ui-widget-content').css("overflow", "visible");
3616 softime 11585 $("div#sousform-instruction_notification_manuelle select#tiers_consulte option[value='']").empty();
3617     $("div#sousform-instruction_notification_manuelle select#tiers_consulte").chosen({
3618 softime 18436 width: "750px",
3619 softime 11585 placeholder_text_single: "Choisir les tiers à notifier",
3620     no_results_text: "Aucun résultat",
3621     allow_single_deselect: true
3622     });
3623     // Chosen multiple servant a sélectionner la liste des annexes a envoyer lors de la notif des services/tiers
3624 softime 12433 // ainsi que la liste des documents et des pièces annexes pour la notification des demandeurs
3625     $("div#sousform-instruction_notification_manuelle select[id^=annexes] option[value='']").empty();
3626     $("div#sousform-instruction_notification_manuelle select[id^=annexes]").chosen({
3627 softime 18436 width: "750px",
3628 softime 11585 placeholder_text_single: "Sélectionner les annexes",
3629     no_results_text: "Aucun résultat",
3630     allow_single_deselect: true
3631     });
3632 softime 10573
3633 softime 11585
3634 softime 10573 // Change la liste à choix du type de document pour les pièces d'un dossier avec chosen
3635     // Le div.formEntete doit avoir sa propriété overflow à visible pour que le
3636     // contenu de la liste à choix soit correctement affiché
3637     // En ajout
3638     $("div.sousform-document_numerise-action-0").parents('div.formEntete').css("overflow", "visible");
3639     $("div.sousform-document_numerise-action-0 select#document_numerise_type option[value='']").empty();
3640     $("div.sousform-document_numerise-action-0 select#document_numerise_type").chosen({
3641 softime 18436 width: "750px",
3642 softime 10573 placeholder_text_single: "Choisir le type de pièce",
3643     no_results_text: "Aucun résultat",
3644     allow_single_deselect: true
3645     });
3646     // En modification
3647     $("div.sousform-document_numerise-action-1").parents('div.formEntete').css("overflow", "visible");
3648     $("div.sousform-document_numerise-action-1 select#document_numerise_type option[value='']").empty();
3649     $("div.sousform-document_numerise-action-1 select#document_numerise_type").chosen({
3650 softime 18436 width: "750px",
3651 softime 10573 placeholder_text_single: "Choisir le type de pièce",
3652     no_results_text: "Aucun résultat",
3653     allow_single_deselect: true
3654     });
3655    
3656 softime 12433 // Chosen multiple servant a sélectionner la division territoriale d’intervention commune
3657     $("select#division_territoire_intervention_commune option[value='']").empty();
3658     $("select#division_territoire_intervention_commune").chosen({
3659 softime 18436 width: "750px",
3660 softime 12433 placeholder_text_single: "Sélectionner les communes",
3661     no_results_text: "Aucun résultat",
3662     allow_single_deselect: true
3663     });
3664     // Chosen multiple servant a sélectionner la division territoriale d’intervention département
3665     $("select#division_territoire_intervention_departement option[value='']").empty();
3666     $("select#division_territoire_intervention_departement").chosen({
3667 softime 18436 width: "750px",
3668 softime 12433 placeholder_text_single: "Sélectionner les departements",
3669     no_results_text: "Aucun résultat",
3670     allow_single_deselect: true
3671     });
3672 softime 12124
3673 softime 14542 // url de la page
3674     url = document.location + "";
3675     if (url.indexOf("index.php?module=tab&") == -1) {
3676     // Chosen multiple servant a sélectionner la nature de travaux
3677     $("select#nature_travaux option[value='']").empty();
3678     $("select#nature_travaux").chosen({
3679 softime 18436 width: "750px",
3680 softime 14542 placeholder_text_single: "Sélectionner les natures de travaux",
3681     no_results_text: "Aucun résultat",
3682     allow_single_deselect: true
3683     });
3684     }
3685 softime 15650 // Chosen servant à sélectionner l'évènement à suggérer dans l'onglet Évènements suggérés
3686     $("div#sousform-lien_sig_contrainte_evenement select#evenement option[value='']").empty();
3687     $("div#sousform-lien_sig_contrainte_evenement select#evenement").chosen({
3688 softime 18436 width: "750px",
3689 softime 15650 placeholder_text_single: "Sélectionner un évènement",
3690     no_results_text: "Aucun résultat",
3691     allow_single_deselect: true
3692     });
3693 softime 12433
3694 softime 14542 if (url.indexOf("index.php?module=form&obj=nature_travaux") != -1) {
3695     // Chosen multiple servant a sélectionner le dit dans nature de travaux
3696     $("div.form-content").parents("div.formEntete").css("overflow", "visible");
3697     $("select#dossier_instruction_type option[value='']").empty();
3698     $("select#dossier_instruction_type").chosen({
3699 softime 18436 width: "750px",
3700 softime 14542 placeholder_text_single: "Sélectionner les type de dossier d'instruction",
3701     no_results_text: "Aucun résultat",
3702     allow_single_deselect: true
3703     });
3704     }
3705 softime 12433
3706 softime 14542 // Chosen servant à sélectionner l'évènement à suggérer dans l'onglet Évènements suggérés
3707     $("div#sousform-lien_sig_contrainte_evenement select#evenement option[value='']").empty();
3708     $("div#sousform-lien_sig_contrainte_evenement select#evenement").chosen({
3709 softime 18436 width: "750px",
3710 softime 14542 placeholder_text_single: "Choisir l'événement",
3711     no_results_text: "Aucun résultat",
3712     allow_single_deselect: true
3713     });
3714    
3715 softime 15973 // Chosen appliqué sur le champs enjeux de la page de modification des dossiers d'instruction
3716     if (url.indexOf("index.php?module=form&obj=dossier") != -1) {
3717     $("select#enjeux option[value='']").empty();
3718     $("select#enjeux").chosen({
3719     width: "200px",
3720     placeholder_text_single: "Choisir l'enjeu",
3721     no_results_text: "Aucun résultat",
3722     allow_single_deselect: true
3723     });
3724     }
3725 softime 16749 // Chosen servant à sélectionner le type de dossier à suggérer
3726     $("div.dossier_type select#dossier_autorisation_type_detaille [value='']").empty();
3727     $("div.dossier_type select#dossier_autorisation_type_detaille").chosen({
3728 softime 18436 width: "750px",
3729 softime 16749 placeholder_text_single: "Sélectionner un type de dossier",
3730     no_results_text: "Aucun résultat",
3731     allow_single_deselect: true
3732     });
3733     // Chosen servant à sélectionner la commune à suggérer
3734     $("div.dossier_type select#commune option[value='']").empty();
3735     $("div.dossier_type select#commune").chosen({
3736 softime 18436 width: "750px",
3737 softime 16749 placeholder_text_single: "Sélectionner un évènement",
3738     no_results_text: "Aucun résultat",
3739     allow_single_deselect: true
3740     });
3741 softime 19592 // Chosen servant dans le cadre d'un ajout de nomenclature de pièce pour :
3742     // - le type de pièce
3743     // - le type de dossier d'instruction
3744     if (url.indexOf("index.php?module=form&obj=lien_document_n_type_d_i_t") != -1) {
3745     $("select#document_numerise_type option[value='']").empty();
3746     $("select#document_numerise_type").chosen({
3747     width: "750px",
3748     placeholder_text_single: "Sélectionner un type de pièce",
3749     no_results_text: "Aucun résultat",
3750     allow_single_deselect: true
3751     });
3752     $("select#dossier_instruction_type option[value='']").empty();
3753     $("select#dossier_instruction_type").chosen({
3754     width: "750px",
3755     placeholder_text_single: "Sélectionner un type de dossier d'instruction",
3756     no_results_text: "Aucun résultat",
3757     allow_single_deselect: true
3758     });
3759     }
3760     // Chosen servant dans le cadre d'un événement pour définir un destinataire parmi les acteurs
3761     if (url.indexOf("index.php?module=form&obj=dossier_instruction") != -1) {
3762     // Chosen multiple servant a sélectionner le destinataire
3763     $("select#tiers_destinataire option[value='']").empty();
3764     $("select#tiers_destinataire").chosen({
3765     width: "750px",
3766     placeholder_text_single: "Sélectionner le destinataire",
3767     no_results_text: "Aucun résultat",
3768     allow_single_deselect: true
3769     });
3770     }
3771 softime 14542
3772 softime 12124 // Création d'un tooltip à coté de tous les champs Chosen
3773 softime 16749 let chosen_title_text = "La chaîne de caractère de la barre de recherche doit figurer dans l'un des mots de l'élément désiré\nLa recherche n'est pas sensible à la casse.\nPar exemple, les premiers caractères saisis sont 'Ra':\n- 'Rapport d'annulation' apparaît puisque le mot 'RApport' contient les caractères saisis\n- 'Lettre rappel incomplétude' apparaît puisque le mot 'RAppel' contient les caractères saisis\n- 'Toutes les pièces du certificat d'urbanisme opérationnel' apparaît puisque le mot 'opéRAtionnel' contient les caractères saisis\n- 'Arrêté de conformité' n'apparaît pas puisqu'aucun des mots ne comporte les caractères saisis";
3774 softime 12124
3775 softime 15650 if ($('div.chosen-container').has('.info-16.chosen-tooltip').length != 1) {
3776     $('div.chosen-container')
3777 softime 16749 .append('<span class="info-16 chosen-tooltip" title="'+chosen_title_text+'"></span>');
3778 softime 15650 }
3779 softime 12124
3780 softime 12654 // Création d'une infobulle pour le champ json payload de la RA sur les moniteurs plat'au/ide'au
3781     let json_payload_infobulle = "Vous devez utiliser les '*' au début et à la fin du terme que vous recherchez.\n Exemple pour une numéro de dossier : *PC 123456 12 12345* au lieu de PC 123456 12 12345 tout simplement.\n Un dernier exemple, les dates : *09/06/2022* au lieu de 09/06/2022.";
3782 softime 12124
3783 softime 12654 $('label#lib-contenu_json')
3784     .append('<span class="info-16 " title="'+json_payload_infobulle+'"></span>');
3785    
3786    
3787 softime 8593 // Si le bouton de refresh de la preview existe sur la page, que celui-ci
3788     // est visible et que l'écran est considéré comme grand
3789     if ($('#btn_refresh').exists()
3790     && $('#btn_refresh').is(":visible")
3791     && screen.width > 1280) {
3792     // Récupère la position initiale du bouton
3793     btn_refresh_top = $('#btn_refresh').parent().offset().top-50
3794     // Le bonton suit le scroll de la page
3795     $(window).scroll(function (event) {
3796     if ($(window).scrollTop() > btn_refresh_top){
3797     $("#btn_refresh").addClass('floating');
3798     } else {
3799     $("#btn_refresh").removeClass('floating');
3800     }
3801     });
3802     }
3803    
3804     // Si le bouton pour afficher la prévisualisation existe et qu'il s'agit
3805     // d'un écran considéré comme petit
3806     if ($('#btn_preview').exists() && (screen.width <= 1280 || $(window).width() <= 1266)) {
3807     // Récupère la position initiale du bouton
3808     btn_preview_top = $('#btn_preview').parent().offset().top-25
3809     // Le bonton suit le scroll de la page
3810     $(window).scroll(function (event) {
3811     if ($(window).scrollTop() > btn_preview_top){
3812     $("#btn_preview").css("position", "fixed");
3813     $("#btn_preview").css("top", 20);
3814     $("#btn_preview").css("z-index", 9999);
3815     } else {
3816     $("#btn_preview").css("position", "relative");
3817     $("#btn_preview").css("top", 0);
3818     }
3819     });
3820     }
3821    
3822     // Si le bouton pour afficher les champs de rédaction existe et qu'il s'agit
3823     // d'un écran considéré comme petit
3824     if ($('#btn_redaction').exists() && (screen.width <= 1280 || $(window).width() <= 1266)) {
3825     // Récupère la position initiale du bouton
3826     btn_redaction_top = $('#btn_redaction').parent().offset().top-25
3827     // Le bonton suit le scroll de la page
3828     $(window).scroll(function (event) {
3829     if ($(window).scrollTop() > btn_redaction_top){
3830     $("#btn_redaction").css("position", "fixed");
3831     $("#btn_redaction").css("top", 20);
3832     $("#btn_redaction").css("z-index", 9999);
3833     } else {
3834     $("#btn_redaction").css("position", "relative");
3835     $("#btn_redaction").css("top", 0);
3836     }
3837     });
3838     }
3839    
3840     // Depuis une instruction en modification, si la prévisualisation du PDF est
3841     // activée et que l'écran de l'utilisateur est considéré comme petit
3842     if ($(".container_instr_edition").exists() === true
3843     && (screen.width <= 1280 || $(window).width() <= 1266)) {
3844     //
3845     $(".preview_instr_edition").hide();
3846     //
3847     $("#btn_redaction").parent().parent().hide();
3848     $("#btn_refresh").parent().parent().hide();
3849     }
3850     // Sur un écran considéré comme grand
3851     if ($(".container_instr_edition").exists() === true
3852     && (screen.width > 1280 && $(window).width() > 1266)) {
3853     //
3854     $("#btn_preview").parent().parent().hide();
3855     $("#btn_redaction").parent().parent().hide();
3856     }
3857    
3858 softime 7521 // Si l'iframe de prévisualisation du PDF existe dans la page
3859 softime 11876 if ($(".preview_instr_edition .field-type-previsualiser_pdf #frame_content").exists() === true
3860     && $(".preview_instr_edition .field-type-previsualiser_pdf #frame_content").is (":visible")) {
3861 softime 8593 // Redimensionne la taille du contenu après un temps afin de laisser
3862     // tinymce calculer la taille des champs compléments
3863 softime 7521 setTimeout(resize_frame_pdf, 2000);
3864     }
3865 softime 8593
3866 softime 19592 // masque par défaut les champs 'signataire', 'type de rédaction', 'tiers_destinataire'
3867 softime 18436 // et 'commentaire' sur le sous-formulaire d'ajout d'une instruction
3868 softime 8593 $('div.sousform-instruction-action-0 #flag_edition_integrale').parent().parent().hide();
3869     $('div.sousform-instruction-action-0 #signataire_arrete').parent().parent().hide();
3870 softime 19592 $('div.sousform-instruction-action-0 #tiers_destinataire').parent().parent().hide();
3871 softime 18436 $('div.sousform-instruction-action-0 #commentaire').parent().parent().hide();
3872     // Déclenche les méthodes à exécuter sur la sélection d'un événement
3873     $('div.sousform-instruction-action-0 select#evenement').each(function() {
3874     this.onchange();
3875     });
3876 softime 8593
3877     // modifie les messages de confirmations lors des clics sur les boutons du
3878     // Portlet 'Rédaction libre' et 'Rédaction par compléments'
3879     modify_confirm_msg_for_portlet_btn_redaction();
3880 softime 17542 display_action_notification_manuelle_portal_popup_confirmation()
3881 softime 9245 //
3882     if ($('#sousform-document_numerise_preview_edition').exists() === true) {
3883     setTimeout(view_document_numerise_preview_edition, 500);
3884 softime 10573 } else if ($('#sousform-instruction_preview_edition').exists() === true) {
3885     setTimeout(view_instruction_preview_edition, 500);
3886     } else if ($('#sousform-rapport_instruction_preview_edition').exists() === true) {
3887     setTimeout(view_rapport_instruction_preview_edition, 500);
3888     } else if ($('#sousform-storage_preview_edition').exists() === true) {
3889     setTimeout(view_storage_preview_edition, 500);
3890     } else if ($('#sousform-consultation_preview_edition').exists() === true) {
3891     setTimeout(view_consultation_preview_edition, 500);
3892 softime 9245 }
3893 softime 10573
3894     // Recherche de l'adresse dans la BAN avec présentation des résultats
3895     // dès l'ouverture du formulaire de normalisation
3896     if ($('#sousform-normalize_address').exists() === true) {
3897     search_geo_api_address();
3898     $("#address").autocomplete("search");
3899     }
3900    
3901     // récupère l'objet de l'url courante
3902     var obj = getUrlParamValue('obj', window.location.search);
3903    
3904     // si on est sur l'objet correspondant à une nouvelle demande
3905     if (obj == 'demande_nouveau_dossier' || obj == 'demande_nouveau_dossier_contentieux') {
3906    
3907     // ne pas afficher le champs de l'affectation automatique par défaut
3908     // sauf si une valeur est déjà sélectionnée
3909     var aff_auto_node = $('#affectation_automatique');
3910     if (aff_auto_node && aff_auto_node.val() == undefined || aff_auto_node.val() == '') {
3911     aff_auto_node.parent().parent().hide();
3912     }
3913     }
3914 softime 12433 // Le champ message_consultation_amenageur peut être affiché lors du lancement de la recherche d'opérateur.
3915     // Il faut donc vérifier si il existe et relancer la méthode permettant de cacher/afficher les champs.
3916     if ($("#operateur_amenagement_pers_publique").exists() || $("#message_consultation_amenageur").exists()) {
3917     switch_operateur_amenagement_pers_public($("#operateur_amenagement_pers_publique").val());
3918     $("select#operateur_amenagement_pers_publique").change(function() {
3919     switch_operateur_amenagement_pers_public($(this).val());
3920     });
3921     if ($("#operateur_pers_publique_amenageur").exists()) {
3922     switch_operateur_pers_publique_amenageur($("#operateur_pers_publique_amenageur").val());
3923     $("select#operateur_pers_publique_amenageur").change(function() {
3924     switch_operateur_pers_publique_amenageur($(this).val());
3925     });
3926     }
3927     }
3928 mbroquet 3730 }
3929    
3930 softime 8593 /**
3931 softime 10573 * Recherche l'adresse normalisée dans l'API Adresse.
3932     *
3933     * @return void
3934     */
3935     function search_geo_api_address() {
3936     $("#address").autocomplete({
3937     source: function(request, response) {
3938     $.ajax({
3939     url: "https://api-adresse.data.gouv.fr/search/?q="+$("#address").val(),
3940     data: { q: request.term },
3941     dataType: "json",
3942     success: function(data) {
3943     response($.map(data.features, function(item) {
3944     return {
3945     label: item.properties.label,
3946     properties: item.properties
3947     };
3948     }));
3949     }
3950     });
3951     },
3952     select: function(event, ui) {
3953     $('#address_json').val(JSON.stringify(ui.item.properties));
3954     }
3955     });
3956     }
3957    
3958     /**
3959     * Utilise l'action get_json_data du dossier pour
3960     * récupérer les informations du dossier. A partir de ces informations
3961     * compose l'adresse du terrain et fait appelle à la méthode
3962     * permettant de rediriger vers maps
3963     *
3964     * @return void
3965     */
3966     function get_adresse_terrain(object, idDossierInstruction) {
3967     // Ajout d'un spinner d'attente
3968     $("#"+object).append(
3969     '<div class="msg_loading">'+msg_loading +'</div>'
3970     );
3971     //
3972     $.ajax({
3973     url: "../app/index.php?module=form&obj=dossier&idx="
3974     + idDossierInstruction
3975     + "&action=998",
3976     dataType: "json",
3977     success: function(data) {
3978     // Évite d'avoir des espaces inutiles si des morceaux de l'adresse
3979     // n'ont pas été rempli ou si l'adresse est vide
3980     adresse = '';
3981     adresse = data.terrain_adresse_voie_numero != '' ?
3982     adresse + data.terrain_adresse_voie_numero : adresse;
3983     adresse = data.terrain_adresse_code_postal != '' ?
3984     adresse + ' ' + data.terrain_adresse_code_postal : adresse;
3985     adresse = data.terrain_adresse_voie != '' ?
3986     adresse + ' ' + data.terrain_adresse_voie : adresse;
3987     adresse = data.terrain_adresse_localite != '' ?
3988     adresse + ' ' + data.terrain_adresse_localite : adresse;
3989     open_streetview(adresse);
3990     }
3991     });
3992     // Suppression du spinner d'attente
3993     $("#"+object+" .msg_loading").remove();
3994     }
3995    
3996     /**
3997     * Envoie l'adresse reçu à la BAN pour récupérer sa latitude et sa longitude
3998     * puis compose l'url vers google map en utilisant ces données.
3999     * Si l'adresse récupérée est vide ou si l'adresse n'a pas été trouvé par la BAN
4000     * ouvre google map sans localisation, sinon ouvre google map en mode streetview
4001     * vers l'adresse indiquée.
4002     *
4003     * @return string
4004     */
4005     function open_streetview(adresse) {
4006     if (adresse != '') {
4007     $.ajax({
4008     url: "https://api-adresse.data.gouv.fr/search/?q="+ adresse,
4009     dataType: "json",
4010     success: function(data) {
4011     coordonne = $.map(data.features, function(item) {
4012     return {
4013     coordinates : item.geometry.coordinates
4014     };
4015     });
4016    
4017     // Composition du lien streetview. Si aucune adresse n'a été récupéré alors
4018     // redirige vers google maps sans envoyer d'adresse.
4019    
4020     // Utilise les coordonées récupérées comme paramètre pour l'URL
4021     parametreUrl = '';
4022     if (coordonne.length > 0
4023     && $.inArray('coordinates', coordonne)
4024     && coordonne[0]['coordinates'].length >= 2) {
4025     //
4026     parametreUrl =
4027     '?q=&layer=c&cbll='
4028     + encodeURIComponent(
4029     coordonne[0]['coordinates'][1]
4030     + ','
4031     + coordonne[0]['coordinates'][0]
4032     );
4033     }
4034    
4035     urlStreetview = "https://www.google.com/maps" + parametreUrl;
4036     window.open(urlStreetview);
4037     }
4038     });
4039     } else {
4040     window.open("https://www.google.com/maps");
4041     }
4042     }
4043    
4044     /**
4045     * Appel la méthode PHP pour mettre à jour les données de l'adresse normalisée
4046     * et recharge la page pour avoir les valeurs de la synthèse du dossier à jour.
4047     *
4048     * @param object form Formulaire de normalisation de l'adresse
4049     * @return void
4050     */
4051     function normalize_address(form) {
4052     $.ajax({
4053     type: "POST",
4054     url: form.firstElementChild.attributes["data-href"].value,
4055     cache: false,
4056     data: "address="+form.elements["address"].value+"&address_json="+form.elements["address_json"].value+"&submit-normalize="+form.elements["submit-normalize"].value,
4057     success: function(html){
4058     refresh_page_return();
4059     }
4060     });
4061     }
4062    
4063     /**
4064 softime 8593 * Depuis une instruction en modification avec l'option de prévisualisation
4065     * activée, affiche le contexte de la prévisualisation.
4066     *
4067     * @return void
4068     */
4069     function show_instr_preview() {
4070     $(".redaction_instr_edition").hide();
4071     $(".preview_instr_edition").show();
4072     //
4073     $("#btn_preview").parent().parent().hide();
4074     $("#btn_redaction").parent().parent().show();
4075     //
4076     reload_pdf_viewer();
4077     }
4078 softime 6565
4079 softime 8593 /**
4080     * Depuis une instruction en modification avec l'option de prévisualisation
4081     * activée, affiche le contexte de la rédaction.
4082     *
4083     * @return void
4084     */
4085     function show_instr_redaction() {
4086     $(".redaction_instr_edition").show();
4087     $(".preview_instr_edition").hide();
4088     //
4089     $("#btn_preview").parent().parent().show();
4090     $("#btn_redaction").parent().parent().hide();
4091     //
4092     $(window).scrollTop($(".container_instr_edition").offset().top);
4093     }
4094    
4095    
4096 nhaye 5254 function activate_data_href() {
4097     $('#sousform-href-disabled').attr('id', 'sousform-href');
4098     }
4099    
4100 nhaye 4780 jQuery.fn.exists = function(){return this.length>0;}
4101    
4102 mbroquet 3730 // Retourne la valeur d'une variable GET de l'URL
4103     function getQuerystring(key, default_)
4104     {
4105     if (default_==null) default_="";
4106     key = key.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
4107     var regex = new RegExp("[\\?&]"+key+"=([^&#]*)");
4108     var qs = regex.exec(window.location.href);
4109     if(qs == null)
4110     return default_;
4111     else
4112     return qs[1];
4113     }
4114    
4115     /**
4116     * Fonction permettant de faire la somme des champs passé en 2nd parametre et
4117     * le stocker dans le champ passé en 1er
4118     */
4119     function sommeChampsCerfa(cible, source) {
4120     val_cible = 0;
4121    
4122     $.each(source, function(index, value) {
4123     // Conversion des champs source en integer
4124     val_source = parseInt($('#'+value).val());
4125     // Cumul des valeurs des champs source
4126     val_cible = val_cible + (isNaN(val_source) ? 0 : val_source);
4127     });
4128     // Affectation de la nouvelle valeur
4129     $('#'+cible).val(val_cible);
4130     }
4131    
4132 softime 4636
4133     /**
4134     * Calcul automatique des tableaux des surfaces.
4135     *
4136     * @param integer tab Numéro du tableau des surface (1 pour les destinations, 2
4137     * pour les sous-destinations).
4138     *
4139     * @return void
4140     */
4141     function calculSurfaceTotal(tab) {
4142    
4143     // On vérifie que le paramètre fait référence à un des tableaux
4144     if (tab !== 1 && tab !== 2) {
4145     return;
4146     }
4147    
4148     // Préfixe des champs du tableau
4149     var prefix;
4150     // Nom des colonnes du tableau
4151     var nom_col;
4152     // Nombre de ligne du tableau
4153     var nb_ligne;
4154    
4155     // Tableau des destinations
4156     if (tab === 1) {
4157     //
4158     prefix = "su"
4159     //
4160     nom_col = [ "su_avt_shon",
4161 mbroquet 3730 "su_cstr_shon",
4162     "su_chge_shon",
4163     "su_demo_shon",
4164     "su_sup_shon",
4165     "su_tot_shon" ];
4166 softime 4636 //
4167     nb_ligne = 9;
4168     }
4169 mbroquet 3730
4170 softime 4636 // Tableau des sous-destinations
4171     if (tab === 2) {
4172     //
4173     prefix = "su2"
4174     //
4175     nom_col = [ "su2_avt_shon",
4176     "su2_cstr_shon",
4177     "su2_chge_shon",
4178     "su2_demo_shon",
4179     "su2_sup_shon",
4180     "su2_tot_shon" ];
4181     //
4182 softime 13137 nb_ligne = 22;
4183 softime 4636 }
4184    
4185 mbroquet 3730 // Calcul des totaux de colonnes
4186     $.each(nom_col, function(index, value) {
4187     var tot_col = 0;
4188 softime 4636 for ( var i = 1; i <= nb_ligne; i++ ) {
4189 mbroquet 3730 // Conversion des champs source en numérique flotant
4190     val_source = parseFloat($('#'+value+i).val());
4191     val_source = parseFloat(val_source.toFixed(2));
4192     if (isNaN(val_source) == false) {
4193     $('#'+value+i).val(val_source);
4194     }
4195     // Cumul des valeurs des champs source
4196     tot_col = tot_col + (isNaN(val_source) ? 0 : val_source);
4197     }
4198    
4199     // Affectation du résultat de ligne
4200     $('#'+value+'_tot').val(tot_col);
4201     });
4202    
4203     // Calcul des totaux des lignes
4204 softime 4636 for ( var j = 1; j <= nb_ligne; j++ ) {
4205 mbroquet 3730 // Conversion des champs source en numérique flotant
4206 softime 4636 su_avt_shon = parseFloat($('#'+prefix+'_avt_shon'+j).val());
4207 mbroquet 3730 if (isNaN(su_avt_shon) == false) {
4208     su_avt_shon = parseFloat(su_avt_shon.toFixed(2));
4209 softime 4636 $('#'+prefix+'_avt_shon'+j).val(su_avt_shon);
4210 mbroquet 3730 }
4211 softime 4636 su_cstr_shon = parseFloat($('#'+prefix+'_cstr_shon'+j).val());
4212 mbroquet 3730 if (isNaN(su_cstr_shon) == false) {
4213     su_cstr_shon = parseFloat(su_cstr_shon.toFixed(2));
4214 softime 4636 $('#'+prefix+'_cstr_shon'+j).val(su_cstr_shon);
4215 mbroquet 3730 }
4216 softime 4636 su_chge_shon = parseFloat($('#'+prefix+'_chge_shon'+j).val());
4217 mbroquet 3730 if (isNaN(su_chge_shon) == false) {
4218     su_chge_shon = parseFloat(su_chge_shon.toFixed(2));
4219 softime 4636 $('#'+prefix+'_chge_shon'+j).val(su_chge_shon);
4220 mbroquet 3730 }
4221 softime 4636 su_demo_shon = parseFloat($('#'+prefix+'_demo_shon'+j).val());
4222 mbroquet 3730 if (isNaN(su_demo_shon) == false) {
4223     su_demo_shon = parseFloat(su_demo_shon.toFixed(2));
4224 softime 4636 $('#'+prefix+'_demo_shon'+j).val(su_demo_shon);
4225 mbroquet 3730 }
4226 softime 4636 su_sup_shon = parseFloat($('#'+prefix+'_sup_shon'+j).val());
4227 mbroquet 3730 if (isNaN(su_sup_shon) == false) {
4228     su_sup_shon = parseFloat(su_sup_shon.toFixed(2));
4229 softime 4636 $('#'+prefix+'_sup_shon'+j).val(su_sup_shon);
4230 mbroquet 3730 }
4231    
4232     // Cumul des valeurs des champs source
4233     su_avt_shon = isNaN(su_avt_shon) ? 0 : su_avt_shon;
4234     su_cstr_shon = isNaN(su_cstr_shon) ? 0 : su_cstr_shon;
4235     su_chge_shon = isNaN(su_chge_shon) ? 0 : su_chge_shon;
4236     su_demo_shon = isNaN(su_demo_shon) ? 0 : su_demo_shon;
4237     su_sup_shon = isNaN(su_sup_shon) ? 0 : su_sup_shon;
4238    
4239     // Affectation du résultat de ligne
4240     su_tot_shon = (su_avt_shon+su_cstr_shon+su_chge_shon)-(su_demo_shon+su_sup_shon);
4241     su_tot_shon = parseFloat(su_tot_shon.toFixed(2));
4242 softime 4636 $('#'+prefix+'_tot_shon'+j).val(su_tot_shon);
4243 mbroquet 3730
4244     }
4245    
4246     // Calcul du total des totaux
4247     // Conversion des champs source en numérique flotant
4248 softime 4636 su_avt_shon = parseFloat($('#'+prefix+'_avt_shon_tot').val());
4249 mbroquet 3730 su_avt_shon = parseFloat(su_avt_shon.toFixed(2));
4250     if (isNaN(su_avt_shon) == false) {
4251     su_avt_shon = parseFloat(su_avt_shon.toFixed(2));
4252 softime 4636 $('#'+prefix+'_avt_shon_tot').val(su_avt_shon);
4253 mbroquet 3730 }
4254 softime 4636 su_cstr_shon = parseFloat($('#'+prefix+'_cstr_shon_tot').val());
4255 mbroquet 3730 su_cstr_shon = parseFloat(su_cstr_shon.toFixed(2));
4256     if (isNaN(su_cstr_shon) == false) {
4257     su_cstr_shon = parseFloat(su_cstr_shon.toFixed(2));
4258 softime 4636 $('#'+prefix+'_cstr_shon_tot').val(su_cstr_shon);
4259 mbroquet 3730 }
4260 softime 4636 su_chge_shon = parseFloat($('#'+prefix+'_chge_shon_tot').val());
4261 mbroquet 3730 su_chge_shon = parseFloat(su_chge_shon.toFixed(2));
4262     if (isNaN(su_chge_shon) == false) {
4263     su_chge_shon = parseFloat(su_chge_shon.toFixed(2));
4264 softime 4636 $('#'+prefix+'_chge_shon_tot').val(su_chge_shon);
4265 mbroquet 3730 }
4266 softime 4636 su_demo_shon = parseFloat($('#'+prefix+'_demo_shon_tot').val());
4267 mbroquet 3730 su_demo_shon = parseFloat(su_demo_shon.toFixed(2));
4268     if (isNaN(su_demo_shon) == false) {
4269     su_demo_shon = parseFloat(su_demo_shon.toFixed(2));
4270 softime 4636 $('#'+prefix+'_demo_shon_tot').val(su_demo_shon);
4271 mbroquet 3730 }
4272 softime 4636 su_sup_shon = parseFloat($('#'+prefix+'_sup_shon_tot').val());
4273 mbroquet 3730 su_sup_shon = parseFloat(su_sup_shon.toFixed(2));
4274     if (isNaN(su_sup_shon) == false) {
4275     su_sup_shon = parseFloat(su_sup_shon.toFixed(2));
4276 softime 4636 $('#'+prefix+'_sup_shon_tot').val(su_sup_shon);
4277 mbroquet 3730 }
4278    
4279     // Cumul des valeurs des champs source
4280     su_avt_shon = isNaN(su_avt_shon) ? 0 : su_avt_shon;
4281     su_cstr_shon = isNaN(su_cstr_shon) ? 0 : su_cstr_shon;
4282     su_chge_shon = isNaN(su_chge_shon) ? 0 : su_chge_shon;
4283     su_demo_shon = isNaN(su_demo_shon) ? 0 : su_demo_shon;
4284     su_sup_shon = isNaN(su_sup_shon) ? 0 : su_sup_shon;
4285    
4286     // Affectation du résultat de ligne
4287     su_tot_shon_tot = (su_avt_shon+su_cstr_shon+su_chge_shon)-(su_demo_shon+su_sup_shon);
4288     su_tot_shon_tot = parseFloat(su_tot_shon_tot.toFixed(2));
4289 softime 4636 $('#'+prefix+'_tot_shon_tot').val(su_tot_shon_tot);
4290 mbroquet 3730
4291     }
4292    
4293     /*
4294     * Marque comme non frequent un petitionnaire
4295     */
4296     function portletUpdatePetitionnaire(id, objet, objetc, file, field, message){
4297    
4298     /*
4299     *Vérifie que l'identifiant passé en paramètre est bien un chiffre
4300     * et que le type d'objet est défini
4301     */
4302     if ( $.isNumeric(id) && objet != '' ){
4303    
4304     donnees = "?ido=" + id + '&obj=' + objet + '&objk=' + objetc + '&idxDossier=' + getQuerystring('idx');
4305     $.ajax({
4306     type: "GET",
4307     url: "../app/"+file+".php" + donnees ,
4308     cache: false,
4309     success: function(html){
4310    
4311     $('#formulaire .message').remove();
4312     /*Change la valeur affiché et affiche un message valide*/
4313     if ( $.parseJSON(html) == "Mise à jour effectué avec succès" ||
4314     $.parseJSON(html).indexOf("Transfert effectue avec succes") != -1 ){
4315    
4316     // On modife le champ field
4317     if ( field != '' && message != '' ){
4318     $('#'+field).html(message);
4319     html = $.parseJSON(html);
4320     }
4321     else {
4322     html = $.parseJSON(html).split(';');
4323    
4324     $('#'+field).html(html[0]);
4325    
4326     html = html[1];
4327     }
4328    
4329     // On supprime l'action
4330     $('span.'+field+'-16').parent().parent().remove();
4331     // On affiche le message
4332     $('#formulaire #tabs-1').prepend(
4333     '<div ' +
4334     'class="message ui-widget ui-corner-all ui-state-highlight ui-state-valid">' +
4335     '<p>' +
4336     '<span class="ui-icon ui-icon-info"></span>' +
4337     '<span class="text">' +
4338     html +
4339     '</span>' +
4340     '</p>' +
4341     '</div>'
4342     );
4343     }
4344     /*Affichage d'une erreur*/
4345     else{
4346     $('#formulaire #tabs-1').prepend(
4347     '<div ' +
4348     'class="message ui-widget ui-corner-all ui-state-highlight ui-state-error">' +
4349     '<p>' +
4350     '<span class="ui-icon ui-icon-info"></span>' +
4351     '<span class="text">' +
4352     $.parseJSON(html) +
4353     '</span>' +
4354     '</p>' +
4355     '</div>'
4356     );
4357     }
4358     }
4359     });
4360     }
4361     }
4362    
4363    
4364     // Affiche le sous formulaire onglet
4365     function redirectPortletAction(id, onglet, nom_tabs){
4366    
4367     var nom_tabs = ( typeof nom_tabs === "undefined" ) ? ".ui-tabs" : nom_tabs;
4368     var $tabs = $(nom_tabs).tabs();
4369    
4370     lien_onglet = $('#' + onglet).attr('href');
4371     lien_onglet = lien_onglet.substring( lien_onglet.length - 1, lien_onglet.length);
4372    
4373     $tabs.tabs('select', lien_onglet);
4374     }
4375    
4376 jymadier 4554 /**
4377     * COMMISSION
4378     */
4379     // Gestion de l'interface de gestion de la commission
4380     function commission_manage_interface() {
4381     // Gestion des onglets
4382     var $tabs = $("#commission-manage-tabs").tabs({
4383     load: function(event, ui) {
4384     //
4385     om_initialize_content(true);
4386     return true;
4387 mbroquet 3730 },
4388 jymadier 4554 select: function(event, ui) {
4389     // Suppression du contenu de l'onglet precedemment selectionne
4390     // #ui-tabs-X correspond uniquement aux ids des onglets charges
4391     // dynamiquement
4392     selectedTabIndex = $tabs.tabs('option', 'selected');
4393     $("#ui-tabs-"+(selectedTabIndex+1)).empty();
4394     return true;
4395 mbroquet 3730 },
4396 jymadier 4554 ajaxOptions: {
4397     error: function(xhr, status, index, anchor) {
4398     $(anchor.hash).html(msg_alert_error_tabs);
4399     }
4400     }
4401 mbroquet 3730 });
4402     }
4403 jymadier 4554 // Gestion spécifique de la soumission du formulaire qui contient des checkbox
4404     // et qui est soumis via une requête Ajax. Il n'est pas possible de savoir
4405     // quelles checkbox sont cochées, elles sont toutes renvoyées.
4406     // On compose donc un champ particulier représentant les cases cochées
4407     // avant de poster le formulaire.
4408     function commission_submit_plan_or_unplan_demands(objsf, link, formulaire) {
4409     //
4410     $("#view_form_plan_or_unplan_demands .message").remove();
4411     $("#view_form_plan_or_unplan_demands").prepend(
4412     '<div class="msg_loading">'+msg_loading +'</div>'
4413 mbroquet 3730 );
4414 jymadier 4554 //
4415     var checkeds = '';
4416     $("#view_form_plan_or_unplan_demands form input[type='checkbox']").each(
4417 mbroquet 3730 function(index) {
4418 jymadier 4554 if ($(this).is(":checked")) {
4419     checkeds += $(this).val()+";";
4420 mbroquet 3730 }
4421     }
4422     );
4423 jymadier 4554 //
4424     var input = document.createElement("input");
4425     input.type = "hidden";
4426     input.name = "checkeds";
4427     input.value = checkeds;
4428     formulaire.appendChild(input);
4429     //
4430     affichersform(objsf, link, formulaire);
4431     //
4432     $("#view_form_plan_or_unplan_demands .msg_loading").remove();
4433 mbroquet 3730 }
4434 jymadier 4554 // Aide à la saisie, récupère les données du type de commission et pré-remplit
4435     // les champs de la commission
4436     function commission_update_data_from_commission_type(commission_type_id){
4437     // Requête ajax de récupération des données
4438 mbroquet 3730 $.ajax({
4439     type: "GET",
4440 softime 7996 url: "../app/index.php?module=form&obj=commission_type&action=11&idx="+commission_type_id,
4441 mbroquet 3730 dataType: "json",
4442     async: false,
4443     success: function(data){
4444     // Ajout des données dans les champs
4445     $('#libelle').val(data.libelle);
4446     $('#lieu_adresse_ligne1').val(data.lieu_adresse_ligne1);
4447     $('#lieu_adresse_ligne2').val(data.lieu_adresse_ligne2);
4448     $('#lieu_salle').val(data.lieu_salle);
4449     $('#listes_de_diffusion').val(data.listes_de_diffusion);
4450     $('#participants').val(data.participants);
4451     }
4452     });
4453     }
4454    
4455     /**
4456     * Popup de confirmation pour les traitements
4457     */
4458     //
4459     function trt_confirm() {
4460     //
4461     if (confirm("Etes-vous sur de vouloir confirmer cette action ?")) {
4462     //
4463     return true;
4464     } else {
4465     //
4466     return false;
4467     }
4468     }
4469    
4470     /**
4471     * Cette fonction permet d'afficher les options d'un select par rapport
4472     * à un autre champ
4473     *
4474     * @param int id Données (identifiant) du champ visé
4475     * @param string tableName Nom de la table
4476     * @param string linkedField Champ visé
4477     * @param string formCible Formulaire visé
4478 softime 16749 * @param string otherData Autre section
4479 mbroquet 3730 */
4480 softime 16749 function filterSelect(id, tableName, linkedField, formCible, ...otherData) {
4481 mbroquet 3730
4482     //lien vers script php
4483 softime 7996 link = "../app/index.php?module=form&snippet=filterselect&idx=" + id + "&tableName=" + tableName +
4484 mbroquet 3730 "&linkedField=" + linkedField + "&formCible=" + formCible;
4485    
4486 softime 16749 // Concaténation dans l'url des paramètres supplémentaires spécifiques
4487     if (otherData.length > 0) {
4488     for(let cptOtherData=0 ; cptOtherData < otherData.length ; cptOtherData++ ) {
4489     if ( otherData[(cptOtherData)].length !== 0) {
4490     link += "&"+otherData[cptOtherData];
4491     cptOtherData++;
4492     link += "="+otherData[(cptOtherData)];
4493     }
4494     }
4495     }
4496    
4497     // lancement de l'appel et récupération du nouveau contenu du select
4498 mbroquet 3730 $.ajax({
4499     type: "GET",
4500     url: link,
4501     cache: false,
4502 softime 16749 dataType: "html",
4503 mbroquet 3730 success: function(res){
4504 softime 16749 var table_node = document.getElementById(tableName);
4505     var selected_id = table_node.value;
4506    
4507 mbroquet 3730 $('#'+tableName).empty();
4508 softime 16749 $('#'+tableName).append(res);
4509    
4510     if (selected_id !== '' && selected_id !== null) {
4511     var is_found = false;
4512     for(let cpt_option = 0; cpt_option < table_node.length; cpt_option++ ) {
4513     if ( table_node[cpt_option].value == selected_id){
4514     table_node[0].selected = false;
4515     table_node[cpt_option].selected = true;
4516     is_found = true;
4517     }
4518     }
4519     if (!is_found && tableName == 'commune') {
4520     // Récupère un message traduit en PHP
4521     $.ajax({
4522     type: "GET",
4523     url: "../app/index.php?module=form&obj=demande_nouveau_dossier&action=170&idx=0&text_choice=commune_change_selection",
4524     success: function(message) {
4525     if (message) {
4526     alert(message);
4527     }
4528     }
4529     });
4530     }
4531 mbroquet 3730 }
4532 softime 16749
4533     // Spécifique au chosen, permet de reset le chosen pour qu'il prenne les nouvelles
4534     // valeurs du select
4535     if ($('#' + tableName + '_chosen').exists() === true) {
4536 softime 17036 resetChosen(tableName);
4537 softime 16749 }
4538 mbroquet 3730 },
4539     async: false
4540     });
4541     }
4542    
4543     /**
4544     * Redirige vers une page après un temps d'attente
4545     * @param string page lien de la page vers la redirection
4546     * @param int milliseconde temps d'attente avant la redirection
4547     */
4548     function redirection(page, milliseconde) {
4549    
4550     //
4551     setTimeout(window.location = page, milliseconde);
4552     }
4553    
4554     /**
4555     * Retourne ce qu'il y a à afficher dans le formulaire de retour (bouton ajouter ou supprimer et éditer)
4556     */
4557     function getObjId(obj){
4558    
4559     //Récupération de l'id de l'objet
4560     var id=$('#id_retour').val();
4561    
4562     //Retour des données
4563     if ( $('#id_retour').length > 0 ){
4564     setDataFrequent(id, obj);
4565     om_initialize_content();
4566     }
4567     }
4568    
4569     function setDataFrequent(id,obj) {
4570     $.ajax({
4571     type: "GET",
4572     url: '../app/afficher_synthese_obj.view.php?idx='+id+'&obj=' + obj,
4573     cache: false,
4574     success: function(html){
4575     $('.add_'+obj).each(
4576     function(){
4577     $(this).remove();
4578     }
4579     );
4580     $(html).insertBefore('#'+obj).fadeIn(500);
4581     $('#'+obj).val(id);
4582     },
4583     async:false
4584     });
4585     }
4586    
4587     /**
4588     * Redirige vers le script PHP pour mettre à jour les informations
4589     * et met à jour l'interface pour l'utilisateur
4590 jymadier 6911 * @param string obj Objet du dossier
4591 mbroquet 3730 * @param string id Identifiant du dossier
4592     * @param string fieldname Nom du champ
4593     * @param Function callback Fonction mettant à jour l'interface des données
4594     * @param string confirm_message Texte du message de confirmation
4595     */
4596 jymadier 6911 function geolocalisation_treatment(obj, id, fieldname, callback, confirm_message) {
4597 mbroquet 3730
4598     var idx_dossier = id;
4599     // Overlay de confirmation du traitement
4600     if (confirm_message != null && confirm_message != '') {
4601     var dialog_confirm = confirm(confirm_message);
4602     if( dialog_confirm == false ){
4603     return false;
4604     }
4605     }
4606    
4607     // Affichage du spinner
4608     $('#'+fieldname).each(
4609     function(){
4610     $(this).children().removeClass();
4611     $(this).children().addClass('message ui-widget ui-corner-all ui-state-highlight ui-state-empty');
4612     $(this).children().children().children(".text").html(msg_loading);
4613     }
4614     );
4615    
4616     // lien vers script PHP faisant l'appel au webservice
4617 softime 7996 link = '../app/index.php?module=form&obj=' + obj + '&idx='+id+'&action=';
4618 mbroquet 3730 // sélection de l'action en fonction du bouton cliqué
4619     switch(fieldname) {
4620     case 'verif_parcelle':
4621     link += '121';
4622     break;
4623     case 'calcul_emprise':
4624     link += '122';
4625     break;
4626     case 'dessin_emprise':
4627     link += '123';
4628     break;
4629     case 'calcul_centroide':
4630     link += '124';
4631     break;
4632     case 'recup_contrainte':
4633     link += '125';
4634     break;
4635     }
4636    
4637     // Traitement
4638     $.ajax({
4639     type: "GET",
4640     url: link,
4641     cache: false,
4642     dataType: "json",
4643     success: function(res){
4644     //
4645     $('#'+fieldname).each(
4646     function(){
4647     // Affichage du message en face de l'action
4648     $(this).children().children().children(".text").text(res['log']['message']);
4649     $(this).children().removeClass();
4650     // Changement de la couleur du message selon la réponse de
4651     // l'action
4652     if (res['log']['etat'] == true) {
4653     $(this).children().addClass('message ui-widget ui-corner-all ui-state-highlight ui-state-valid');
4654     } else {
4655     $(this).children().addClass('message ui-widget ui-corner-all ui-state-highlight ui-state-error');
4656     }
4657     }
4658     );
4659    
4660     // Appel de la méthode de callback si l'action s'est déroulée correctement
4661     if (typeof(callback) === "function" && res['log']['etat'] == true) {
4662     callback(res, idx_dossier);
4663     }
4664     },
4665     async:false
4666     });
4667     }
4668    
4669     /**
4670     * Efface le message en haut du formulaire
4671     * @param array res Résultat après le traitement du script PHP
4672     */
4673     function set_geolocalisation_message(res, id) {
4674     // Si il y a un message d'erreur
4675     if ($('#geolocalisation-message')[0]) {
4676     // Supprime le message
4677     $('#geolocalisation-message').remove();
4678     // Modifie les messages des autres fonctionnalités
4679     $('#calcul_emprise').each(
4680     function() {
4681     $(this).children().removeClass();
4682     $(this).children().addClass('message ui-widget ui-corner-all ui-state-highlight ui-state-error');
4683     $(this).children().children().children(".text").text(res['log']['message_diff_parcelle']);
4684     }
4685     );
4686     $('#calcul_centroide').each(
4687     function() {
4688     $(this).children().removeClass();
4689     $(this).children().addClass('message ui-widget ui-corner-all ui-state-highlight ui-state-error');
4690     $(this).children().children().children(".text").text(res['log']['message_diff_parcelle']);
4691     }
4692     );
4693     $('#recup_contrainte').each(
4694     function() {
4695     $(this).children().removeClass();
4696     $(this).children().addClass('message ui-widget ui-corner-all ui-state-highlight ui-state-error');
4697     $(this).children().children().children(".text").text(res['log']['message_diff_parcelle']);
4698     }
4699     );
4700     }
4701    
4702     }
4703    
4704     /**
4705     * Met le champ centroïde à jour
4706     * @param array res Résultat après le traitement du script PHP
4707     */
4708     function set_geolocalisation_centroide(res, id) {
4709     var content = "<a id='action-form-localiser'"+
4710 softime 7996 " target='_SIG' href='../app/index.php?module=form&obj=dossier_instruction&action=140&idx="+id+"'>"+
4711 mbroquet 3730 "<span class='om-icon om-icon-16 om-icon-fix sig-16' title='Localiser'>Localiser</span> "+
4712 softime 7996 " POINT("+res['return']['x']+" "+res['return']['y']+")"+
4713 mbroquet 3730 " </a>";
4714    
4715     $('span#centroide').html(content);
4716     }
4717    
4718     /**
4719     * Met le champ contrainte à jour
4720     * @param array res Résultat après le traitement du script PHP
4721     */
4722     function set_geolocalisation_contrainte(res, id) {
4723     // Contenus du champ contrainte
4724     var content = $('span#msg_contrainte_sig').html();
4725     // Si aucune contraintes est récupérées du SIG
4726     if (res['dossier_contrainte']['nb_contrainte_sig'] == 0) {
4727     content = res['dossier_contrainte']['msg_contrainte_sig_empty'];
4728     }
4729     // S'il y a des contraintes récupérées
4730     if (res['dossier_contrainte']['nb_contrainte_sig'] != 0) {
4731     content = res['dossier_contrainte']['nb_contrainte_sig'] + " " + res['dossier_contrainte']['msg_contrainte_sig']
4732     }
4733     // Affiche le message
4734     $('span#msg_contrainte_sig').html(content);
4735     }
4736    
4737     /**
4738     * Redirige vers le sig
4739     * @param array res Résultat après le traitement du script PHP
4740     */
4741     function redirection_web_sig(res, id) {
4742     window.open(res['return']);
4743     }
4744    
4745     /**
4746     * Traitement du bouton permettant de calculer toutes les données géographiques
4747 jymadier 6911 * @param string obj Objet du dossier
4748 mbroquet 3730 * @param string id Identifiant du dossier
4749     * @param string confirm_message Texte du message de confirmation
4750     */
4751 jymadier 6911 function all_geolocalisation_treatments(obj, id, confirm_message) {
4752 mbroquet 3730
4753     // Overlay de confirmation du traitement
4754     if (confirm_message != null && confirm_message != '') {
4755     var dialog_confirm = confirm(confirm_message);
4756     if( dialog_confirm == false ){
4757     return false;
4758     }
4759     }
4760    
4761     // Initialisation des variables utilisées en paramètres
4762     var fieldname = '';
4763     var callback = '';
4764     var confirm_message = '';
4765     var flag = '';
4766    
4767     // Modification des variables utilisées en paramètres pour "Vérifier les
4768     // parcelles"
4769     fieldname = 'verif_parcelle';
4770     callback = set_geolocalisation_message;
4771     // Traitement "Vérifier les parcelles"
4772 jymadier 6911 geolocalisation_treatment(obj, id, fieldname, callback, confirm_message);
4773 mbroquet 3730
4774     // Positionne le flag sur le message de "Vérifier les parcelles"
4775     flag = $('#'+fieldname+"-message").attr("class");
4776     // Si c'est un message d'erreur on arrete le traitement
4777     if (flag == 'message ui-widget ui-corner-all ui-state-highlight ui-state-error') {
4778     return false;
4779     }
4780    
4781     // Modification des variables utilisées en paramètres pour "Calculer
4782     // l'emprise"
4783     fieldname = 'calcul_emprise';
4784     callback = '';
4785     // Traitement "Calculer l'emprise"
4786 jymadier 6911 geolocalisation_treatment(obj, id, fieldname, callback, confirm_message);
4787 mbroquet 3730
4788     // Positionne le flag sur le message de "Calculer l'emprise"
4789     flag = $('#'+fieldname+"-message").attr("class");
4790     // Si c'est un message d'erreur on arrete le traitement
4791     if (flag == 'message ui-widget ui-corner-all ui-state-highlight ui-state-error') {
4792     return false;
4793     }
4794    
4795     // Modification des variables utilisées en paramètres pour "Calculer le
4796     // centroïde"
4797     fieldname = 'calcul_centroide';
4798     callback = set_geolocalisation_centroide;
4799     // Traitement "Calculer le centroïde"
4800 jymadier 6911 geolocalisation_treatment(obj, id, fieldname, callback, confirm_message);
4801 mbroquet 3730
4802     // Positionne le flag sur le message de "Calculer le centroïde"
4803     flag = $('#'+fieldname+"-message").attr("class");
4804     // Si c'est un message d'erreur on arrete le traitement
4805     if (flag == 'message ui-widget ui-corner-all ui-state-highlight ui-state-error') {
4806     return false;
4807     }
4808    
4809     // Modification des variables utilisées en paramètres pour "Récupérer les
4810     // contraintes"
4811     fieldname = 'recup_contrainte';
4812     callback = set_geolocalisation_contrainte;
4813     //Traitement "Récupérer les contraintes"
4814 jymadier 6911 geolocalisation_treatment(obj, id, fieldname, callback, confirm_message);
4815 mbroquet 3730
4816     }
4817    
4818     /**
4819     * Remplit le formulaire avec l'adresse trouvée ou affiche un message d'erreur
4820     */
4821     function getAdressFromCadastrale(){
4822    
4823     //Récupération des références cadastrales
4824     var referenceCadastrale = '{"refcad":[{';
4825     var i = 0 ;
4826     var j = 1 ;
4827     var delimit = 0;
4828     var parcelleDelimit = 0;
4829     var noReferenceCadastrale = false;
4830     var om_collectivite = "";
4831     if($("#om_collectivite").attr("type") != "hidden") {
4832     om_collectivite = $("#om_collectivite").val();
4833     if(om_collectivite == '') {
4834     alert('Une collectivité doit être sélectionnée');
4835     return;
4836     }
4837     }
4838 softime 10573 var commune_node = document.getElementById('commune');
4839 mbroquet 3730 $(".reference_cadastrale_custom_field").each(
4840     function(){
4841    
4842     //On vérifie que le champ n'est pas vide
4843     if ($(this).val()!=""&&$(this).val() != ";"){
4844     noReferenceCadastrale = true;
4845     }
4846    
4847     //On va à la ligne suivante
4848     if ( $(this).val() == ";" ){
4849     referenceCadastrale +=(delimit!=0)?'}]':'';
4850     referenceCadastrale += "}" ;
4851     i++;
4852     j = 1;
4853     delimit = 0;
4854     parcelleDelimit = 0;
4855     }
4856     //On parcourt la ligne
4857     else {
4858     switch(true){
4859     //Quartier
4860     case (j==1):
4861     referenceCadastrale += (i!=0)?',':'';
4862     referenceCadastrale += '"' + i + '"' + ':{"quartier":"'+$(this).val()+'"';
4863     break;
4864     //Section
4865     case (j==2):
4866     referenceCadastrale += ', "section":"'+$(this).val()+'"';
4867     break;
4868     //Parcelle
4869     case (j==3):
4870     referenceCadastrale += ', "parcelle":"'+$(this).val()+'"';
4871     break;
4872     //Le délimiteur
4873     case (j%2==0&&j!=2):
4874     if ( delimit==0 ){
4875     referenceCadastrale += ', "delimit":[{"'+(delimit++)+'":"'+$(this).val()+'"';
4876     }
4877     else {
4878     referenceCadastrale += ', "'+(delimit++)+'":"'+$(this).val()+'"';
4879     }
4880     break;
4881     //La parcelle après le délimiteur
4882     case (j%2==1&&j!=1&&j!=3):
4883     referenceCadastrale += ',"'+(delimit++)+'":"'+$(this).val()+'"';
4884     break;
4885     }
4886     j++;
4887     }
4888     }
4889     );
4890     if ( noReferenceCadastrale == true ){
4891     referenceCadastrale += "}]";
4892     if(om_collectivite != "") {
4893     referenceCadastrale += ', "om_collectivite":'+om_collectivite;
4894     }
4895 softime 10573 if (commune_node) {
4896     referenceCadastrale += ', "commune":'+commune_node.value;
4897     }
4898 mbroquet 3730 referenceCadastrale += "}";
4899     }
4900     else {
4901     referenceCadastrale = "";
4902     }
4903     // Lien
4904 softime 7996 link = "../app/index.php?module=form&obj=demande&action=130&idx=0";
4905 mbroquet 3730 // Affichage du spinner
4906     ;
4907 softime 7717 $('#cad-adr-them').parent().append('<img id="adresse_cadastral_spinner" src="../lib/om-assets/img/loading.gif" alt="Le traitement est en cours. Merci de patienter.">');
4908 mbroquet 3730 //Lance la tentative de récupération de l'adresse
4909     $.ajax({
4910     type: "POST",
4911     url: link,
4912     data: $.parseJSON(referenceCadastrale),
4913     cache: false,
4914     dataType: "json",
4915     success: function(data){
4916     //Si le retour est un objet JSON, on a un résultat
4917     if ( $.isPlainObject(data)){
4918    
4919     //On met l'adresse dans les champs
4920     $("#terrain_adresse_voie_numero").val(data.return_addr.numero_voie);
4921     $("#terrain_adresse_voie").val(data.return_addr.nom_voie);
4922     $("#terrain_adresse_code_postal").val(data.return_addr.code_postal);
4923     $("#terrain_adresse_localite").val(data.return_addr.localite);
4924     }
4925     //Sinon, on affiche un message d'erreur
4926     else {
4927     alert(data);
4928     }
4929     $('#adresse_cadastral_spinner').remove();
4930     },
4931     async: false
4932     });
4933     }
4934    
4935     /**
4936     * Modifie les champs requis pour le formulaire demande_type
4937     * @param integer demande_nature Identifiant
4938     * @param string lib_dossier_autorisation_type_detaille Libellé du champ
4939     * dossier_autorisation_type_detaille
4940     * @param string lib_dossier_instruction_type Libellé du champ
4941     * dossier_instruction_type
4942     */
4943     function required_fields_demande_type(demande_nature, lib_dossier_autorisation_type_detaille, lib_dossier_instruction_type) {
4944    
4945     // Lien
4946 softime 7996 link = "../app/index.php?module=form&obj=demande_nature&action=11&idx=" + demande_nature;
4947 mbroquet 3730
4948     // Traitement
4949     $.ajax({
4950     type: "GET",
4951     url: link,
4952     cache: false,
4953     dataType: "json",
4954     success: function(demande_nature_info) {
4955    
4956     // On enlève le "*" au libellé du champ
4957     // dossier_autorisation_type_detaille pour montrer qu'il n'est
4958     // pas obligatoire
4959     $("#lib-dossier_autorisation_type_detaille").text('');
4960     $("#lib-dossier_autorisation_type_detaille")
4961     .html(lib_dossier_autorisation_type_detaille);
4962    
4963     // On enlève le "*" au libellé du champ
4964     // dossier_instruction_type pour montrer qu'il n'est
4965     // pas obligatoire
4966     $("#lib-dossier_instruction_type").text('');
4967     $("#lib-dossier_instruction_type")
4968     .html(lib_dossier_instruction_type);
4969    
4970     // Si c'est une nouvelle demande
4971     if (demande_nature_info != ''
4972     && demande_nature_info != null) {
4973    
4974     if (demande_nature_info['code'] == 'NOUV') {
4975    
4976     // On ajoute le "*" au libellé du champ
4977     // dossier_autorisation_type_detaille pour montrer qu'il est
4978     // obligatoire
4979     $("#lib-dossier_autorisation_type_detaille").text('');
4980     $("#lib-dossier_autorisation_type_detaille")
4981     .html(lib_dossier_autorisation_type_detaille + ' <span class="not-null-tag">*</span>');
4982    
4983     // On ajoute le "*" au libellé du champ
4984     // dossier_instruction_type pour montrer qu'il est
4985     // obligatoire
4986     $("#lib-dossier_instruction_type").text('');
4987     $("#lib-dossier_instruction_type")
4988     .html(lib_dossier_instruction_type + ' <span class="not-null-tag">*</span>');
4989    
4990     }
4991    
4992     }
4993    
4994     },
4995     async:false
4996     });
4997     }
4998    
4999     /**
5000     * Appel au chargement de la page
5001     **/
5002     $(function() {
5003    
5004     // url de la page
5005     url = document.location + "";
5006    
5007     // Si dans le formulaire des type de demande
5008     // et que c'est en mode ajout ou modifier
5009 softime 7996 if (url.indexOf("index.php?module=form&obj=demande_type&") != -1
5010 mbroquet 3730 && (url.indexOf("&action=0") != -1
5011     || url.indexOf("&action=1") != -1
5012     || url.indexOf("&validation=") != -1)) {
5013    
5014     // Récupère les paramètres nécessaires
5015     var demande_nature = $("#demande_nature").val();
5016     var lib_dossier_autorisation_type_detaille = $("#lib-dossier_autorisation_type_detaille").text();
5017     var lib_dossier_instruction_type = $("#lib-dossier_instruction_type").text();
5018    
5019     // Appelle la fonction pour indiquer si les champs sont requis ou non
5020     required_fields_demande_type(demande_nature, lib_dossier_autorisation_type_detaille, lib_dossier_instruction_type);
5021     }
5022    
5023 softime 7996 // Bind les widgets RSS affichés sur le tableau de bord
5024     bind_widget_rss();
5025 mbroquet 3730 });
5026    
5027     /**
5028     * Cache les champs du formulaire événement
5029     * @param array fields Tableau des champs
5030     */
5031     function hideFieldsEvenement(fields) {
5032    
5033     // Pour chaque champ
5034     for (var cpt = 0; cpt < fields.length; cpt++) {
5035    
5036     $('#' + fields[cpt]).each(
5037     function(){
5038    
5039     // Récupère la balise parent et la valeur
5040     var parentField = $(this).parent();
5041     var valueField = $(this).val();
5042     // Supprime le champ
5043     $(this).remove();
5044     // Affiche le champ en tant que static
5045     parentField.append('<span id="'+fields[cpt]+'" class="field_value">'+valueField+'</span>');
5046     }
5047     );
5048    
5049     }
5050    
5051     // Cache les champs "evenement_retour_ar" et "evenement_retour_signature"
5052     $('#evenement_retour_ar').parent().parent().hide();
5053     $('#evenement_retour_signature').parent().parent().hide();
5054     }
5055    
5056     /**
5057     * Affiche les champs du formulaire événement
5058     * @param array fields Tableau des champs
5059     */
5060     function showFieldsEvenement(fields) {
5061    
5062     // Pour chaque champ
5063     for (var cpt = 0; cpt < fields.length; cpt++) {
5064    
5065     $('#' + fields[cpt]).each(
5066     function(){
5067    
5068     // Récupère la balise parent et la valeur
5069     var parentField = $(this).parent();
5070     var valueField = $(this).text();
5071     // Supprime le champ
5072     $(this).remove();
5073    
5074     // Si le champ est restriction
5075     if (this.id == 'restriction') {
5076    
5077     // Réaffiche le champ en type text
5078     parentField.append('<input id="'+this.id+'" class="champFormulaire" type="text" maxlength="60" size="30" value="'+ valueField +'" name="'+this.id+'">');
5079     } else {
5080    
5081     // Réaffiche les selects
5082     parentField.append('<select id="'+this.id+'" class="champFormulaire" size="1" name="'+this.id+'"></select>');
5083     filterSelect(valueField, fields[cpt], 'delai', 'evenement');
5084     }
5085     }
5086     );
5087    
5088     }
5089    
5090     // Affiche les champs "evenement_retour_ar" et "evenement_retour_signature"
5091     $('#evenement_retour_ar').parent().parent().show();
5092     $('#evenement_retour_signature').parent().parent().show();
5093     }
5094    
5095     /**
5096     * Action onchange sur la case à cocher "retour" du formulaire "evenement"
5097     * @param object field Champ de type booléen
5098     */
5099     function retourOnchangeEvenement(field) {
5100    
5101     // liste des champs à modifier dans le formulaire
5102     var fields = new Array(
5103     'restriction',
5104     'delai',
5105     'accord_tacite',
5106     'delai_notification',
5107     'avis_decision'
5108     );
5109    
5110     // Si le champ booléen est à 'Oui'
5111     if (field.value == 'Oui') {
5112     // Cache et rend static les champs de la liste
5113     hideFieldsEvenement(fields);
5114     } else {
5115     // Affiche et rend modifiable les champs de la liste
5116     showFieldsEvenement(fields);
5117     }
5118     }
5119    
5120 softime 7685 /**
5121     * Permet de récupérer les contraintes ajoutées manuellement depuis le
5122     * formulaire spécifique.
5123     */
5124 mbroquet 3730 function dossierContrainteValidationForm(objsf, link, formulaire) {
5125     // composition de la chaine data en fonction des elements du formulaire
5126     var data = "";
5127 softime 7685 //
5128 mbroquet 3730 if (formulaire) {
5129 softime 7685 // Pour chaque champ du formulaire
5130 mbroquet 3730 for (i=0; i<formulaire.elements.length; i++) {
5131 softime 7685 //
5132     var name = formulaire.elements[i].name;
5133     var value = formulaire.elements[i].value;
5134    
5135     // Compose la chaîne data avec les champs contraintes dont la valeur
5136     // est définit et à 'Oui', ainsi que les champs qui ne sont pas des
5137     // contraintes
5138     if (typeof(value) != 'undefined'
5139     && ((name.match(/contrainte_.*/) !== null && value == 'Oui')
5140     || name.match(/contrainte_.*/) === null)) {
5141     //
5142     data += name+"="+encodeURIComponent(value)+"&";
5143     }
5144 mbroquet 3730 }
5145     }
5146 softime 7685
5147 mbroquet 3730 // execution de la requete en POST
5148     $.ajax({
5149     type: "POST",
5150     url: link,
5151     cache: false,
5152     data: data,
5153     dataType: "json",
5154     success: function(html){
5155     // Efface le message
5156     $('.message').remove();
5157     // Affiche le message
5158     $('.subtitle').after(
5159     '<div ' +
5160     'class="message ui-widget ui-corner-all ui-state-highlight ui-state-valid">' +
5161     '<p>' +
5162     '<span class="ui-icon ui-icon-info"></span>' +
5163     '<span class="text">' +
5164     html +
5165     '</span>' +
5166     '</p>' +
5167     '</div>'
5168     );
5169     // Décoche toutes les checkbox
5170     $(":checkbox").attr('checked', false);
5171     $(":checkbox").attr('value', '');
5172     }
5173     });
5174     }
5175    
5176 softime 12433
5177 mbroquet 3730 /**
5178 softime 12433 * Permet de récupérer les avis des opérateurs kpark en mode modifier.
5179     */
5180     function get_avis_from_operateur_kpark(tab_collterr) {
5181     // composition de la chaine data en fonction des elements du formulaire
5182     var data = [];
5183     for (j=0; j<tab_collterr; j++) {
5184     if ($("#tab_avis_"+j).attr('value') != 'no_select') {
5185     data[j] = $("#tab_avis_"+j).attr('value');
5186     } else {
5187     data[j] = 'no_select';
5188     }
5189     }
5190    
5191     $("#tab_avis_maj").get(0).value = JSON.stringify(data);
5192     }
5193    
5194     /**
5195 mbroquet 3730 * Permet de recharger la page.
5196     */
5197     function refresh_page_return() {
5198     // Recharge la page
5199     location.reload();
5200     }
5201 jymadier 3880
5202     /**
5203     * Action permettant la génération d'une archive zip contenant les documents
5204     * numérisés de la page.
5205     *
5206 softime 3925 * @param {array} var_text Chaînes d'affichage.
5207     * @param {string} dossier Identifiant du DA ou DI (selon contexte pièce).
5208 jymadier 3880 */
5209 softime 10573 function zip_doc_numerise(var_text, dossier, obj, action) {
5210 jymadier 3880 // Message d'attente
5211 softime 7717 waiting_message_loading ='<img src="../lib/om-assets/img/loading.gif" alt="'+var_text.waiting_message+'" />'+var_text.waiting_message;
5212 jymadier 3880 // Création du modal dialog de confirmation
5213 softime 6565 id_sousform = "#sousform-" + obj;
5214     addDivDialog(id_sousform);
5215 jymadier 3880 $( "#dialog" ).html(var_text.confirm_message);
5216     $( "#dialog" ).dialog({
5217     title: var_text.title,
5218     resizable: false,
5219     height:140,
5220     modal: true,
5221     buttons: [
5222     {
5223     text: var_text.confirm_button_ok,
5224 softime 15650 class : "ui-dialog-button-confirm",
5225 jymadier 3880 click: function() {
5226     // Si confirmation :
5227     // on enlève les boutons
5228     $( "#dialog" ).dialog( "option", "buttons", {});
5229     // on change le contenu du modal
5230     $( "#dialog" ).html(waiting_message_loading);
5231     // on récupère les identifiant des documents numérisés
5232     ids = new Array();
5233     $('tr td .lienDocumentNumerise').each(function() {
5234     ids.push(this.id.replace("document_numerise_", ""));
5235     });
5236     // On appel le script de génération de l'archive
5237     $.ajax({
5238 softime 10573 url: "../app/index.php?module=form&obj=" + obj + "&action=" + action + "&idx=0&dossier="+dossier+"&ids="+ids.join(','),
5239 jymadier 3880 dataType: "json"
5240     }).done(
5241     function(data) {
5242     // Une fois la génération terminée on affiche l'erreur
5243     // ou le lien de téléchargement
5244     if(data.status == false) {
5245     $( "#dialog" ).html(var_text.error_message);
5246     } else {
5247 softime 7996 link = '<a id="archive_download_link" href="../app/index.php?module=form&snippet=file&uid='+data.file+
5248 jymadier 3880 '&dl=download&mode=temporary">'+
5249     '<span class="om-icon om-icon-16 om-icon-fix archive-16" title="'+var_text.download_link_message+'">'+
5250     var_text.download_link_message+'</span>'+var_text.download_link_message+'</a>';
5251     $( "#dialog" ).html(var_text.download_message+'<br/>'+link);
5252     }
5253     }
5254     ).fail(
5255     function() {
5256     $( "#dialog" ).html(var_text.error_message);
5257     }
5258     );
5259     }
5260     }, {
5261     text: var_text.confirm_button_ko,
5262 softime 15650 class : "ui-dialog-button-cancel",
5263 jymadier 3880 click: function() {
5264     $(this).dialog('close');
5265     }
5266     }
5267     ],
5268     //OnClose suppression du contenu
5269     close: function(ev, ui) {
5270     $(this).remove();
5271     }
5272     });
5273 nhaye 4780 }
5274 softime 6565
5275 softime 8329 /**
5276     * Fonctions de cochage des items de dossier final
5277     */
5278     function dossier_final_checkbox_select_all_none(checkbox) {
5279     if (checkbox.checked === true) {
5280     dossier_final_select_all();
5281     } else {
5282     dossier_final_select_none();
5283     }
5284     }
5285     function dossier_final_select_all(){
5286     $('.checkbox-dossier_final').each(function() {
5287     this.checked = true;
5288     });
5289     }
5290     function dossier_final_select_none(){
5291     $('.checkbox-dossier_final').each(function() {
5292     this.checked = false;
5293     });
5294     }
5295     function dossier_final_select_recommandees(){
5296     $('.checkbox-dossier_final').each(function() {
5297     if($(this).parents("tr").hasClass("dossier_final_piece_recommandee")){
5298     this.checked = true;
5299     }else
5300     {this.checked = false;}
5301     });
5302     }
5303    
5304     /**
5305 softime 15218 * Fonctions de cochage des items de l'onglet téléchargement
5306     */
5307     function telechargement_checkbox_select_all_none(checkbox) {
5308     if (checkbox.checked === true) {
5309     telechargement_select_all();
5310     } else {
5311     telechargement_select_none();
5312     }
5313     }
5314     function telechargement_select_none(){
5315     $('.checkbox-telechargement').each(function() {
5316     this.checked = false;
5317     });
5318     }
5319     function telechargement_select_all(){
5320     $('.checkbox-telechargement').each(function() {
5321     this.checked = true;
5322     });
5323     }
5324    
5325     /**
5326 softime 8329 * Vérifie que des éléments sont cochés et retourne l'état coché/non coché des fichiers
5327     */
5328 softime 15218 function get_fichiers_checked(context){
5329 softime 8329
5330 softime 15218 $('#form-message-'+context).html(msg_loading);
5331     context = context.replace('-', '_');
5332 softime 8329 // Récupération des données
5333 softime 15218 var dataJson = "{\""+context+"\":[";
5334     $('.checkbox-'+context).each(
5335 softime 8329 function(){
5336     var id_table = $(this).attr("name")
5337     var idInput = $(this).attr("id");
5338     var champ_uid = $(this).attr("champ_uid");
5339     var checked = this.checked;
5340     dataJson += "{\"uid\":\"" + idInput + "\",\"champ_uid\":\""+ champ_uid + "\",\"table\":\""+ id_table +"\",\"val\":\""+ checked +"\"},";
5341     }
5342     );
5343     dataJson = $.parseJSON(dataJson.substring(0,dataJson.length-1)+"]}");
5344     // Retour des champs avec leur valeur
5345     return dataJson;
5346     }
5347    
5348     function constituer_dossier_final(dossier, obj){
5349    
5350 softime 15218 dataJson = get_fichiers_checked('dossier-final');
5351 softime 8329 if (dataJson == "") {
5352     return;
5353     }
5354     // On appel le script de constitution du dossier final
5355     $.ajax({
5356     type: "POST",
5357     url: "../app/index.php?module=form&obj=" + obj + "&action=301&idx=0&dossier="+dossier,
5358     dataType: "json",
5359     data: dataJson
5360     }).done(
5361     function(html) {
5362     $('#form-message-dossier-final').html(
5363     '<div class="message ui-widget ui-corner-all ui-state-highlight">'+
5364     '<p>'+
5365     '<span class="ui-icon ui-icon-info"></span>'+
5366     '<span class="text">'+
5367     'Le dossier final a bien été constitué.'+
5368     '</span>'+
5369     '</p>'+
5370     '</div>'
5371     );
5372     $('#telecharger-dossier-final').html(html.button_content);
5373     // Si le retour de l'appel Ajax n'est pas vide, alors il y a eu une
5374     // erreur lors du traitement
5375     if ( html.msg_error.length > 2 ) {
5376     $("#form-message-dossier-final .message").addClass("ui-state-error");
5377     $("#form-message-dossier-final .text").html(html.msg_error);
5378     }
5379     }
5380     ).fail(
5381     function(html) {
5382     if(html.responseText.length > 0){
5383     $("#form-message-dossier-final .text").html(html.responseText);
5384     }
5385     else {
5386     $('#form-message-dossier-final').html(
5387     '<div class="message ui-widget ui-corner-all ui-state-highlight">'+
5388     '<p>'+
5389     '<span class="ui-icon ui-icon-info"></span>'+
5390     '<span class="text">'+
5391     '</span>'+
5392     '</p>'+
5393     '</div>'
5394     );
5395     $("#form-message-dossier-final .message").addClass("ui-state-error");
5396     $("#form-message-dossier-final .text").html("Erreur lors de la constitution du dossier final.");
5397     }
5398     }
5399     );
5400     }
5401    
5402     /**
5403 softime 10713 * Fonctions de cochage des contraintes à supprimer
5404     */
5405     function dossier_contrainte_checkbox_select_all_none(checkbox) {
5406     if (checkbox.checked === true) {
5407     dossier_contrainte_select_all();
5408 softime 11876 // Si la case qui sélectionne toutes les contraintes est
5409     // coché on décoche toutes les cases de sélection de constrainte par groupe
5410     $('.checkbox_select_all_groupe_none').each(function() {
5411     this.checked = true;
5412     });
5413 softime 10713 } else {
5414     dossier_contrainte_select_none();
5415 softime 11876 // Si la case qui sélectionne toutes les contraintes est
5416     // décoché on décoche toutes les cases de sélection de constrainte par groupe
5417     $('.checkbox_select_all_groupe_none').each(function() {
5418     this.checked = false;
5419     });
5420 softime 10713 }
5421     }
5422     function dossier_contrainte_select_all(){
5423     $('.checkbox-contrainte_conserve').each(function() {
5424     this.checked = true;
5425     });
5426     }
5427     function dossier_contrainte_select_none(){
5428     $('.checkbox-contrainte_conserve').each(function() {
5429     this.checked = false;
5430     });
5431     }
5432    
5433     /**
5434 softime 11876 * Fonctions de cochage par groupe des contraintes à conserver
5435     */
5436     function dossier_contrainte_checkbox_select_groupe(checkbox){
5437     id_parent = checkbox.id.replace('checkbox_select_all_groupe_', '');
5438     if (checkbox.checked === true) {
5439     $('#'+id_parent+' .checkbox-contrainte_conserve').each(function() {
5440     this.checked = true;
5441     });
5442     } else {
5443     $('#'+id_parent+' .checkbox-contrainte_conserve').each(function() {
5444     this.checked = false;
5445     });
5446     // On décoche la case de sélection de toutes les contraintes
5447     // car un des groupes est déselectionné
5448     $('.checkbox_select_all_none').each(function() {
5449     this.checked = false;
5450     });
5451     }
5452     }
5453    
5454     /**
5455 softime 10713 * Vérifie que des éléments sont cochés et retourne l'état coché/non coché des contraintes
5456     * et renvoie ces informations dans un json.
5457     *
5458     * @return {json}
5459     */
5460     function getContrainteAConserver(){
5461    
5462     $('#form-message-contrainte-conserve').html(msg_loading);
5463    
5464     // Récupération des données
5465     var dataJson = "{\"contraintes_a_conserver\":[";
5466     $('.checkbox-contrainte_conserve').each(
5467     function(){
5468     var idInput = $(this).attr("id");
5469     var checked = this.checked;
5470     dataJson += "{\"id\":\"" + idInput + "\",\"val\":\"" + checked + "\"},";
5471     }
5472     );
5473     dataJson = $.parseJSON(dataJson.substring(0,dataJson.length-1)+"]}");
5474     // Retour des champs avec leur valeur
5475     return dataJson;
5476     }
5477    
5478     /**
5479     * Fait appel à l'action permettant de supprimer les contraintes non séléctionnées.
5480     * Actualise la page et affiche un message indiquant si le traitement à réussi.
5481     *
5482     * @param {string} dossier
5483     * @param {string} obj
5484     * @returns
5485     */
5486     function supprimer_contraintes_non_selectionnees(dossier, obj){
5487     dataJson = getContrainteAConserver();
5488     if (dataJson == "") {
5489     return;
5490     }
5491     // On appel le script de suppression des contraintes
5492     $.ajax({
5493     type: "POST",
5494     url: "../app/index.php?module=form&obj=" + obj + "&action=6&idx=0&dossier=" + dossier,
5495     dataType: "json",
5496     data: dataJson
5497     }).done(
5498     function(html) {
5499     form_container_refresh("sousform");
5500     $('#sousform-dossier_contrainte #sousform-message').html(
5501     '<div class="message ui-widget ui-corner-all ui-state-highlight">'+
5502     '<p>'+
5503     '<span class="ui-icon ui-icon-info"></span>'+
5504     '<span class="text">'+
5505     '</span>'+
5506     '</p>'+
5507     '</div>'
5508     );
5509     $('#sousform-dossier_contrainte #sousform-message span.text').html(html.msg_validation);
5510     // Si le retour de l'appel Ajax n'est pas vide, alors il y a eu une
5511     // erreur lors du traitement
5512     if ( html.msg_error.length > 2 ) {
5513     $("#sousform-dossier_contrainte #sousform-message .message").addClass("ui-state-error");
5514     $("#sousform-dossier_contrainte #sousform-message .text").html(html.msg_error);
5515     }
5516     }
5517     ).fail(
5518     function(html) {
5519     form_container_refresh("sousform");
5520     if(html.responseText.length > 0){
5521     $("#sousform-dossier_contrainte #sousform-message .text").html(html.responseText);
5522     }
5523     else {
5524     $('#sousform-dossier_contrainte #sousform-message').html(
5525     '<div class="message ui-widget ui-corner-all ui-state-highlight">'+
5526     '<p>'+
5527     '<span class="ui-icon ui-icon-info"></span>'+
5528     '<span class="text">'+
5529     '</span>'+
5530     '</p>'+
5531     '</div>'
5532     );
5533     $("#sousform-dossier_contrainte #sousform-message .message").addClass("ui-state-error");
5534     $("#sousform-dossier_contrainte #sousform-message .text").html("Erreur lors de la suppression des contraintes.");
5535     }
5536     }
5537     );
5538     }
5539    
5540     /**
5541 softime 8329 * Action permettant la génération d'une archive zip contenant
5542     * les documents du dernier dossier final constitué
5543     *
5544     * @param {array} var_text Chaînes d'affichage.
5545     * @param {array} uids Les uid des fichiers du dossier final.
5546     * @param {string} dossier Identifiant du DI.
5547     * @param {string} obj Nom de l'obj
5548     */
5549     function generate_archive_dossier_final(var_text, uids, dossier, obj) {
5550     // Message d'attente
5551     waiting_message_loading ='<img src="../lib/om-assets/img/loading.gif" alt="'+var_text.waiting_message+'" />'+var_text.waiting_message;
5552     // Création du modal dialog de confirmation
5553     id_sousform = "#sousform-" + obj;
5554     addDivDialog(id_sousform);
5555     $( "#dialog" ).html(var_text.confirm_message);
5556     $( "#dialog" ).dialog({
5557     title: var_text.title,
5558     resizable: false,
5559     modal: true,
5560     buttons: [
5561     {
5562     text: var_text.confirm_button_ok,
5563 softime 15650 class : "ui-dialog-button-confirm",
5564 softime 8329 click: function() {
5565     // Si confirmation :
5566     // on enlève les boutons
5567     $( "#dialog" ).dialog( "option", "buttons", {});
5568     // on change le contenu du modal
5569     $( "#dialog" ).html(waiting_message_loading);
5570     // On appel le script de génération de l'archive
5571     $.ajax({
5572     url: "../app/index.php?module=form&obj=" + obj + "&action=302&idx=0&dossier="+dossier+"&ids="+uids.join(','),
5573     dataType: "json",
5574     }).done(
5575     function(data) {
5576     // Une fois la génération terminée on affiche l'erreur
5577     // ou le lien de téléchargement
5578     if(data.status == false) {
5579     $( "#dialog" ).html(var_text.error_message);
5580     $( "#dialog" ).html("Nein");
5581     } else {
5582     link = '<a id="archive_download_link" href="../app/index.php?module=form&snippet=file&uid='+data.file+
5583     '&dl=download&mode=temporary">'+
5584     '<span class="om-icon om-icon-16 om-icon-fix archive-16" title="'+var_text.download_link_message+'">'+
5585     var_text.download_link_message+'</span>'+var_text.download_link_message+'</a>';
5586 softime 10573 $( "#dialog" ).html(var_text.download_message+'<br/>'+link);
5587 softime 8329 }
5588     }
5589     ).fail(
5590     function(data) {
5591     $( "#dialog" ).html(var_text.error_message);
5592     }
5593     );
5594     }
5595     }, {
5596     text: var_text.confirm_button_ko,
5597 softime 15650 class : "ui-dialog-button-cancel",
5598 softime 8329 click: function() {
5599     $(this).dialog('close');
5600     }
5601     }
5602     ],
5603     //OnClose suppression du contenu
5604     close: function(ev, ui) {
5605     $(this).remove();
5606     }
5607     });
5608     }
5609    
5610 softime 15218 /**
5611     * Action permettant la génération d'une archive zip contenant
5612     * les documents sélectionnés dans l'onglet téléchargement et
5613     * l'affichage d'un popup permettant de le télécharger
5614     *
5615     * @param {array} var_text Chaînes d'affichage.
5616     * @param {string} dossier Identifiant du DI.
5617     * @param {string} obj Nom de l'obj
5618     */
5619     function archive_telechargement(var_text, dossier, obj) {
5620     // récupération des fichiers sélectionnés
5621     dataJson = get_fichiers_checked('telechargement');
5622     if (dataJson == "") {
5623     return;
5624     }
5625     uids = [];
5626     dataJson.telechargement.forEach(function (element) { if (element.val == "true") {uids.push(element.uid);}})
5627    
5628     if (uids.length == 0) {
5629     // Le click sur le bouton affiche un message, on le supprime
5630     $('#form-message-telechargement').html("");
5631     return;
5632     }
5633     // Message d'attente
5634     waiting_message_loading ='<img src="../lib/om-assets/img/loading.gif" alt="'+var_text.waiting_message+'" />'+var_text.waiting_message;
5635     // Création du modal dialog de confirmation
5636     id_sousform = "#sousform-" + obj;
5637     addDivDialog(id_sousform);
5638     $( "#dialog" ).html(var_text.confirm_message);
5639     $( "#dialog" ).dialog({
5640     title: var_text.title,
5641     resizable: false,
5642     modal: true,
5643     buttons: [
5644     {
5645     text: var_text.confirm_button_ok,
5646 softime 15650 class : "ui-dialog-button-confirm",
5647 softime 15218 click: function() {
5648     // Si confirmation :
5649     // on enlève les boutons
5650     $( "#dialog" ).dialog( "option", "buttons", {});
5651     // on change le contenu du modal
5652     $( "#dialog" ).html(waiting_message_loading);
5653     // On appel le script de génération de l'archive
5654     $.ajax({
5655     url: "../app/index.php?module=form&obj=" + obj + "&action=304&idx=0&dossier="+dossier+"&ids="+uids.join(','),
5656     dataType: "json",
5657     }).done(
5658     function(data) {
5659     // Une fois la génération terminée on affiche l'erreur
5660     // ou le lien de téléchargement
5661     if(data.status == false) {
5662     $( "#dialog" ).html(var_text.error_message);
5663     $( "#dialog" ).html("Nein");
5664     } else {
5665     link = '<a id="archive_download_link" href="../app/index.php?module=form&snippet=file&uid='+data.file+
5666     '&dl=download&mode=temporary">'+
5667     '<span class="om-icon om-icon-16 om-icon-fix archive-16" title="'+var_text.download_link_message+'">'+
5668     var_text.download_link_message+'</span>'+var_text.download_link_message+'</a>';
5669     $( "#dialog" ).html(var_text.download_message+'<br/>'+link);
5670     }
5671     }
5672     ).fail(
5673     function(data) {
5674     $( "#dialog" ).html(var_text.error_message);
5675     }
5676     );
5677     }
5678     }, {
5679     text: var_text.confirm_button_ko,
5680 softime 15650 class : "ui-dialog-button-cancel",
5681 softime 15218 click: function() {
5682     $(this).dialog('close');
5683     // On supprime le message de traitement en cours
5684     $('#form-message-telechargement').html("");
5685     }
5686     }
5687     ],
5688     //OnClose suppression du contenu
5689     close: function(ev, ui) {
5690     $(this).remove();
5691     // On supprime le message de traitement en cours
5692     $('#form-message-telechargement').html("");
5693     }
5694     });
5695     }
5696    
5697 softime 6565 function manage_display_demande(idx_datd) {
5698     var request = $.ajax({
5699     type: "GET",
5700 softime 7996 url: "../app/index.php?module=form&obj=dossier_autorisation_type_detaille&action=4&idx="+idx_datd,
5701 softime 6565 cache: false,
5702 softime 7521 // La requête doit être synchrone car c'était l'une des deux causes d'un
5703     // bug qui cassait les champs custom de références cadastrales et
5704     // certains de leurs boutons. Pour une raison qui n'a pas été comprise
5705     // (c'est la folie tout ce qui se passe pour formater (3 fois!) ces
5706     // champs customs) cela provoque un appel récursif de
5707     // formatFieldReferenceCadastrale(). Et le fait d'avoir 2 appels
5708     // imbriqués fait que l'état est incohérent. Donc la création des champs
5709     // et des boutons ne se fait pas bien.
5710     //
5711     // Il est possible de rendre à nouveau cette requête asynchrone en
5712     // allant voir où manage_display_demande() est appelée. Puis de mettre
5713     // la suite du code (ce qui se passe après l'appel à
5714     // manage_display_demande()) dans le callback pour que l'ordre
5715     // d'exécution soit le même que avec la requête synchrone. Le but est
5716     // d'éviter de freezer toute la page web pendant la requète au serveur
5717     // (temps réseau + traitement serveur)
5718     //
5719     // manage_display_demande() est appelée à deux endroits donc c'est peut
5720     // être eux qui vont devoir fournir le callback.
5721     async: false,
5722     dataType: "json"
5723 softime 6565 });
5724     request.done(function(affichage_form) {
5725     $('.demande_autorisation_contestee_hidden_bloc').hide();
5726     hideFields();
5727    
5728     switch(affichage_form) {
5729    
5730     case 'CTX RE':
5731     // On affiche le champ de recherche de dossier à contester
5732     $('.demande_autorisation_contestee_hidden_bloc').show();
5733     // Désactivation de la validation du formulaire de la demande
5734     // par l'appui sur la touche entrée
5735     $(document).on("keypress", '#autorisation_contestee', function (e) {
5736     var code = e.keyCode || e.which;
5737     if (code == 13) {
5738     e.preventDefault();
5739     return false;
5740     }
5741     });
5742     // Dans le cas d'un formulaire soumis en erreur le champ
5743     // peut être déjà saisie, on recherche donc les informations
5744     if ($('#autorisation_contestee').val() != '') {
5745     lookingForAutorisationContestee();
5746     }
5747     break;
5748     default:
5749     showFormDemande();
5750     break;
5751     }
5752     });
5753     }
5754    
5755     /**
5756     * Méthode de mise en forme semblable à sprintf :
5757     * "lorem {0} dolor {1} amet".format("ipsum", "sit");
5758     *
5759     * @return, string Chaîne fourni avec remplacement des index
5760     */
5761     String.prototype.format = function () {
5762     var args = [].slice.call(arguments);
5763     return this.replace(/(\{\d+\})/g, function (a){
5764     return args[+(a.substr(1,a.length-2))||0];
5765     });
5766     };
5767 softime 7521
5768    
5769     /**
5770 softime 8989 * Enregistre le contenu d'un rendu PDF au format base64
5771     * dans une variable 'globale' dont la portée est gérée
5772     * par jQuery
5773     */
5774     function set_jquery_data_var_pdf(base64_content) {
5775     window.pdfjs_content_b64 = atob(base64_content);
5776     }
5777    
5778     /**
5779     * Affiche l'iframe de prévisualisation PDF
5780     * (écrasée à chaque rechargement)
5781     */
5782     function load_iframe_pdf() {
5783 softime 10573 // Détection du navigateur et de sa version
5784     // https://stackoverflow.com/questions/5916900
5785     navigator.sayswho= (function(){
5786     var ua= navigator.userAgent, tem,
5787     M= ua.match(/(opera|chrome|safari|firefox|msie|trident(?=\/))\/?\s*(\d+)/i) || [];
5788     if(/trident/i.test(M[1])){
5789     tem= /\brv[ :]+(\d+)/g.exec(ua) || [];
5790     return 'IE '+(tem[1] || '');
5791     }
5792     if(M[1]=== 'Chrome'){
5793     tem= ua.match(/\b(OPR|Edge)\/(\d+)/);
5794     if(tem!= null) return tem.slice(1).join(' ').replace('OPR', 'Opera');
5795     }
5796     M= M[2]? [M[1], M[2]]: [navigator.appName, navigator.appVersion, '-?'];
5797     if((tem= ua.match(/version\/(\d+)/i))!= null) M.splice(1, 1, tem[1]);
5798     return M;
5799     })();
5800    
5801     // Charge la librairie pdfjs récente ou pdfjs ancienne en fonction du navigateur et de sa version
5802     if ((navigator.sayswho[0].toLowerCase() === 'firefox' && parseInt(navigator.sayswho[1], 10) < 74)
5803     || (navigator.sayswho[0].toLowerCase() === 'chrome' && parseInt(navigator.sayswho[1], 10) < 80)) {
5804     //
5805     $("#frame_content").html('<iframe src="lib/pdfjs-2.0.943/web/om_viewer.html" id="frame_pdf"></iframe>');
5806     } else {
5807     $("#frame_content").html('<iframe src="lib/pdfjs-2.10.377/web/om_viewer.html" id="frame_pdf"></iframe>');
5808     }
5809 softime 8989 }
5810    
5811     /**
5812 softime 7521 * Recharge le contenu du PDF de prévisualisation
5813     *
5814     * @return void
5815     */
5816     function reload_pdf_viewer() {
5817 softime 8593 var link = "../app/index.php?module=form&obj=instruction&action=777&idx="+$(".form-content #instruction").val();
5818     var params ='';
5819     if (tinyMCE.get('corps_om_htmletatex') != null) {
5820     params += '&corps='+encodeURIComponent(tinyMCE.get('corps_om_htmletatex').getContent());
5821     }
5822     if (tinyMCE.get('titre_om_htmletat') != null) {
5823     params += '&titre='+encodeURIComponent(tinyMCE.get('titre_om_htmletat').getContent());
5824     }
5825     if (tinyMCE.get('complement_om_html') != null) {
5826     params += '&c1='+encodeURIComponent(tinyMCE.get('complement_om_html').getContent());
5827     }
5828     if (tinyMCE.get('complement2_om_html') != null) {
5829     params += '&c2='+encodeURIComponent(tinyMCE.get('complement2_om_html').getContent());
5830     }
5831     if (tinyMCE.get('complement3_om_html') != null) {
5832     params += '&c3='+encodeURIComponent(tinyMCE.get('complement3_om_html').getContent());
5833     }
5834     if (tinyMCE.get('complement4_om_html') != null) {
5835     params += '&c4='+encodeURIComponent(tinyMCE.get('complement4_om_html').getContent());
5836     }
5837 softime 7521 $.ajax({
5838     type: "POST",
5839     url: link,
5840 softime 8593 data: params,
5841 softime 7521 dataType: "json",
5842 softime 8593 async: false,
5843 softime 7521 success: function(data){
5844 softime 8989 // Enregistre le contenu du fichier PDF dans une variable globale
5845     // qui sera ensuite utilisée dans l'iframe pour charger le document
5846     set_jquery_data_var_pdf(data.base);
5847     // Affiche l'iframe (écrase à chaque rechargement)
5848     load_iframe_pdf();
5849 softime 7521 // Redimensionne la taille de l'iframe contenant le PDF
5850     resize_frame_pdf();
5851 softime 8593 // Positionne l'écran au début de la prévisualisation
5852     $(window).scrollTop($(".container_instr_edition").offset().top);
5853 softime 7521 }
5854     });
5855     }
5856    
5857    
5858     /**
5859     * Redimensionne l'iframe contenant le PDF de prévisualisation lors de la
5860     * modification d'une instruction.
5861     *
5862     * @return void
5863     */
5864     function resize_frame_pdf() {
5865 softime 8593 //
5866     if (screen.width <= 1280 || $(window).width() <= 1266) {
5867     $("#frame_pdf").height($('.box_instr_edition').height());
5868     } else {
5869     // Récupère la taille du container comprenant les éléments de rédaction
5870     var height = $('.box_instr_edition').height();
5871     // Redimensionne l'iframe en supprimant les élements au dessus
5872     // et en dessous de l'iframe
5873     $("#frame_pdf").height(height-87);
5874     }
5875 softime 7521 }
5876 softime 7996
5877    
5878     /**
5879 softime 10573 * Initialise la vue du type de champ jsontotab
5880     * en utilisant la librairie gridjs
5881     *
5882     * @return void
5883     */
5884     function init_view_jsontotab(champ, columns_tab, data_tab) {
5885     new gridjs.Grid({
5886     columns: columns_tab,
5887     data: data_tab,
5888     width: 'none',
5889     style: {
5890 softime 12433 container: {
5891     'font-weight' : 'normal'
5892     },
5893 softime 10573 td: {
5894     'padding-top': '5px',
5895     'padding-bottom': '5px',
5896     'padding-left': '7px',
5897     'padding-right': '7px',
5898     color: '#4d4d4d',
5899     'font-size': '90%'
5900     },
5901     th: {
5902     'padding-top': '5px',
5903     'padding-bottom': '5px',
5904     'padding-left': '7px',
5905     'padding-right': '7px',
5906     'font-variant': 'small-caps'
5907     }
5908     }
5909     }).render(document.getElementById(champ+'_jsontotab'));
5910     }
5911    
5912    
5913     /**
5914 softime 7996 * Permet d'afficher tout les dossiers consultés. (limit à 20)
5915     *
5916     * @param {string} widget_id Identifiant du widget
5917     *
5918     * @return void
5919     */
5920     function get_all_dossier_consulte(widget_id) {
5921     $("div #" + widget_id + " tr").show();
5922     $("div #" + widget_id + " .widget-footer").hide();
5923     }
5924 softime 8593
5925     /**
5926     * Hack rapide pour modifier les messages de confirmations lors des clics
5927     * sur les boutons du Portlet 'Rédaction libre' et 'Rédaction par compléments'
5928     **/
5929     function modify_confirm_msg_for_portlet_btn_redaction()
5930     {
5931     actions = ['enable', 'disable'];
5932     for(i = 0; i < actions.length; i++) {
5933     btn_id = 'action-sousform-instruction-' + actions[i] + '-edition-integrale';
5934     $('#' + btn_id).off('click').on('click', function(event) {
5935     //
5936     if ($(this).attr('class').indexOf("action-with-confirmation") >= 0) {
5937 softime 17542 // Définis le contenu du message en fonction de l'action utilisée
5938     var redaction_libre_action = $(this).attr('id')
5939     .replace('action-sousform-instruction-', '')
5940     .replace('-edition-integrale', '')
5941     var msg_confirm = redaction_libre_action == 'enable'
5942     ? 'Êtes-vous sûr de vouloir activer le mode "Rédaction Libre" ?<br/><br/><span>Le contenu de vos compléments va être intégré dans le document, dont vous pourrez modifier librement l\'intégralité.</span>'
5943     : 'Êtes-vous sûr de vouloir activer le mode "Rédaction par Compléments" ?<br/><br/><span style="font-weight: bold; color: red;">Attention: toute la rédaction manuelle réalisée sera perdue.</span>';
5944     // Modifie le message la popup de confirmation
5945     remplace_popup_confirmation(form_execute_action_direct, "sousform", this, msg_confirm);
5946 softime 8593 } else {
5947     form_execute_action_direct("sousform", this);
5948     }
5949     //
5950     return false;
5951     });
5952     }
5953     }
5954    
5955     /**
5956 softime 17542 * Affiche la popup de confirmation lorsque l'utilisateur clique sur l'action
5957     * notification_manuelle_portal.
5958 softime 8593 **/
5959 softime 17542 function display_action_notification_manuelle_portal_popup_confirmation() {
5960     id_instruction = $('input#instruction').val()
5961     $('#action-sousform-instruction-notification_manuelle_portal').off('click').on('click', function(event) {
5962     // Interroge le serveur pour savoir si la date limite de notification est dépassée
5963     elem = this
5964     $.ajax({
5965     type: "GET",
5966     url: "../app/index.php?module=form&obj=instruction&action=412&idx=" + id_instruction,
5967     cache: false,
5968     success: function(data){
5969     // Affichage du message de confirmation en fonction du dépassement de la
5970     // date limite de notification
5971     if (data == "True") {
5972     remplace_popup_confirmation(
5973     form_execute_action_direct,
5974     "sousform",
5975     elem,
5976     "<b>Vous êtes sur le point de notifier un document alors que la date limite d’instruction est dépassée.</b><br/><br/>"
5977     + msg_form_action_confirmation
5978     );
5979     } else {
5980     form_confirmation_action(form_execute_action_direct, "sousform", elem);
5981     }
5982     }
5983     });
5984 softime 8593
5985 softime 17542 })
5986     }
5987    
5988     /**
5989     * Remplace le contenu d'une popup de confirmation par un nouveau contenu.
5990     *
5991     * @param {callback} callback callable utilisé si l'utilisateur clique sur le bouton
5992     * de validation
5993     * @param {string} elem Element sur lequel s'applique l'action du callback. Ex : form ou sousform
5994     * @param {string} action Action appliqué lors de l'utilisation du callback
5995     * @param {string=} msg Nouveau message de la popup
5996     * @param {array|Object=} btn Tableau de paramétrage des boutons
5997     */
5998     function remplace_popup_confirmation(callback, elem, action, msg, btn = []) {
5999     // Paramétrage du message par défaut
6000     if (msg === undefined) {
6001     msg = msg_form_action_confirmation
6002     }
6003     // Paramétrage des boutons par défaut
6004     if (btn === undefined || btn.length == 0) {
6005     btn = [
6006 softime 8593 {
6007     text: msg_form_action_confirmation_button_confirm,
6008 softime 15650 class: "ui-dialog-button-confirm",
6009 softime 8593 click: function() {
6010 softime 17542 $(this).dialog("close")
6011     callback(elem, action)
6012 softime 8593 }
6013     }, {
6014     text: msg_form_action_confirmation_button_cancel,
6015 softime 15650 class : "ui-dialog-button-cancel",
6016 softime 8593 click: function() {
6017 softime 17542 $(this).dialog("close")
6018 softime 8593 }
6019     }
6020 softime 17542 ];
6021     }
6022    
6023     // Suppression du message de confirmation par défaut
6024     $('#dialog-action-confirmation').remove()
6025     // Remplissage du bloc avec le nouveau message
6026     var dialogbloc = $('<div id="dialog-action-confirmation">' + msg + '</div>').insertAfter('#footer')
6027     // Suppression de la popup pour la re-construire par la suite
6028     $(dialogbloc).dialog( "destroy" )
6029    
6030     // Construction du nouveau message de confirmation
6031     $(dialogbloc).dialog({
6032     resizable: false,
6033     height: 'auto',
6034     width: 350,
6035     modal: true,
6036     buttons: btn
6037     })
6038 softime 8593 }
6039 softime 8989
6040     /**
6041     * Copie modifiée des fonctions form_confirmation_action() et
6042     * form_execute_action_direct() afin de ne pas modifier les fonctions du 'core'
6043     * (framework openMairie).
6044     *
6045     * Fenêtre modale de confirmation spécifique à l'action d'export d'un fichier
6046     * SITADEL.
6047     */
6048 softime 17542 function sitadel_form_confirmation_action(elem, action) {
6049     $('#'+elem+'-message').html(msg_loading);
6050 softime 8989 //
6051 softime 17542 $.ajax({
6052     type: "POST",
6053     url: $(action).attr('data-href')+"&validation=1&contentonly=true",
6054     cache: false,
6055     dataType: "html",
6056     data: "datedebut="+action.form.datedebut.value+"&datefin="+action.form.datefin.value+"&numero="+action.form.numero.value,
6057     success: function(html){
6058     // XXX Il semble nécessaire afin de récupérer la portion de code
6059     // div.message d'ajouter un container qui contient l'intégralité
6060     // du code html représentant le contenu du formulaire. Si on ajoute
6061     // pas ce bloc la récupération du bloc ne se fait pas.
6062     container_specific_js = '<div id="container-specific-js">'+html+'</div>';
6063     message = $(container_specific_js).find('div.message').get(0);
6064     if (message == undefined) {
6065     message = -1;
6066 softime 8989 }
6067 softime 17542 // Ajout du contenu récupéré (uniquement le bloc message)
6068     $('#'+elem+'-message').html(message);
6069     // Rafraichissement du bloc de formulaire
6070     form_container_refresh(elem);
6071     // Initialisation JS du nouveau contenu de la page
6072     om_initialize_content();
6073     }
6074 softime 8989 });
6075     }
6076    
6077     /**
6078     * Défini l'url pour charger le contenu de l'onglet DI.
6079     * (uniquement dans le cas d'un clic depuis un autre onglet
6080     * et si l'url n'est pas déjà défini).
6081     * Cela permet de forcer le (re)chargement du contenu de l'onglet DI
6082 softime 9245 * à chaque clic sur l'onglet DI.
6083     *
6084     * @return boolean 'true' si clique sur un DI à partir d'un autre onglet, sinon 'false'
6085 softime 8989 */
6086     function set_di_href_in_data_load_tabs(evt, ui) {
6087 softime 9245 var ret = false;
6088    
6089 softime 14542 // Réinitialisation de la valeur de la barre de recherche lors
6090     // du passage d'un sous-formulaire à un autre
6091     $('#recherchedyn').val("");
6092    
6093 softime 9245 // recherche l'index de l'onglet 'DI' et son noeud DOM
6094     var di_tab_title_node = null;
6095     var di_tab_index = -1;
6096     var di_tab_node = null;
6097     var list_of_tabs = $('.ui-tabs-nav li');
6098     for (var i = 0; i < list_of_tabs.length; i++) {
6099     var tab = list_of_tabs.get(i);
6100     var tab_title_node = $(tab).find('> a');
6101     if(tab_title_node && tab_title_node.length == 1) {
6102     tab_title_node.contents().filter(function() {
6103     return this.nodeType == Node.TEXT_NODE;
6104     });
6105     var tab_title = null;
6106     if (tab_title_node) {
6107     tab_title = $(tab_title_node).text().trim();
6108     }
6109     if (tab_title == 'DI') {
6110     di_tab_title_node = tab_title_node.get(0);
6111     di_tab_index = i;
6112     break;
6113     }
6114     }
6115     }
6116    
6117     // si l'onglet DI existe (son index a été trouvé)
6118     if (di_tab_index != -1 && di_tab_title_node) {
6119     // récupère l'id de l'onglet actuellement sélectionné
6120 softime 8989 var tabIdSelectedFrom = $("#formulaire").tabs('option', 'selected');
6121     // si on clic sur l'onglet DI à partir d'un autre onglet
6122 softime 9245 if (ui.tab == di_tab_title_node && tabIdSelectedFrom != di_tab_index) {
6123     ret = true;
6124     // récupère la source (href) de l'onglet DI actuellement définie
6125 softime 8989 var tab_href = $.data(di_tab_title_node, 'load.tabs');
6126 softime 9245 // si l'onglet n'a aucune source distante définie
6127 softime 8989 if (!tab_href) {
6128 softime 9245 // récupère l'URL de la page courante
6129     // (sans le hash car celui-ci est utilisé pour afficher un autre onglet)
6130     var tab_href = window.location.href;
6131     if (tab_href.indexOf('#') != -1) {
6132     tab_href = window.location.href.split('#')[0];
6133     }
6134     }
6135     // une recherche dynamique est disponible
6136     var recherchedyn = document.getElementById("recherchedyn");
6137     if (recherchedyn) {
6138     // retire l'id de la recherche dynamique (car ajouté systématiquement après)
6139     tab_href = tab_href.replace(/&advs_id=[^&#]*/ig, '');
6140     // met à jour l'id de la recherche dynamique (car utilisé par la fonction suivante)
6141     // si cet id n'est pas mis à jour, le bouton retour de l'onglet DI nouvellement
6142     // généré aura l'id de recherche d'une recherche vide (si aucune recherche n'a été
6143     // effectuée)
6144 softime 8989 var search_params = new URLSearchParams(window.location.search);
6145 softime 9245 if (search_params) {
6146     var advs_id = search_params.get('advs_id');
6147     if (advs_id) {
6148     var current_advs_id = $('#advs_id').get(0).value;
6149     if (current_advs_id != advs_id) {
6150     $('#advs_id').get(0).value = advs_id;
6151     }
6152     }
6153     }
6154 softime 8989 }
6155 softime 9245 // défini la source (href) de l'onglet DI (ce qui provoquera son rechargement)
6156     $.data(di_tab_title_node, 'load.tabs', tab_href);
6157 softime 8989 }
6158     }
6159 softime 9245 return ret;
6160 softime 8989 }
6161    
6162 softime 16749 /**
6163     *
6164     * @param {*} no_num_doss_complet_node
6165     */
6166 softime 17036 function resetCommuneDADTFromNoNumDossComplet(no_num_doss_complet_node) {
6167 softime 16749 if ( no_num_doss_complet_node.value == 'Oui' ){
6168 softime 17036 suggestCommuneDatdFromNumDossier(true);
6169 softime 16749 }else{
6170 softime 17036 suggestCommuneDatdFromNumDossier();
6171 softime 16749 }
6172     }
6173 softime 8989
6174     /**
6175 softime 16749 *
6176     */
6177 softime 17036 function suggestCommuneDatdFromNumDossier( reset = false ) {
6178 softime 16749 // Recuper le numéro de dossier complet
6179     num_doss_complet_node = $("#num_doss_complet")[0];
6180    
6181     if ( num_doss_complet_node.value != '' || reset === true ) {
6182     // récupère l'objet de l'url courante
6183     var obj = getUrlParamValue('obj', window.location.search);
6184     if (! obj || (obj != 'demande_nouveau_dossier'
6185     && obj != 'demande_nouveau_dossier_contentieux')) {
6186     obj = 'demande_nouveau_dossier';
6187     }
6188    
6189     //
6190     filterSelect (num_doss_complet_node.value, 'dossier_autorisation_type_detaille', 'num_doss_complet', obj);
6191    
6192     // si le select 'commune' existe
6193     var communes_select_node = document.getElementById('commune');
6194     if (communes_select_node) {
6195     var collectivite_node = document.getElementById('om_collectivite');
6196     // si le champ 'om_collectivite' existe
6197     if (collectivite_node) {
6198     // récupère sa valeur courante
6199     om_collectivite = collectivite_node.value || '';
6200     }
6201     // si le champ 'date_demande' existe
6202     var date_demande_node = document.getElementById('date_demande');
6203     if (date_demande_node) {
6204     // récupère sa valeur courante
6205     date_demande = date_demande_node.value || '';
6206     }
6207 softime 17036 updateCommuneSelect();
6208     //filterSelect (num_doss_complet_node.value, 'commune', 'num_doss_complet', obj, 'date_demande', date_demande, 'om_collectivite', om_collectivite);
6209 softime 16749 }
6210     }
6211     }
6212    
6213     /**
6214 softime 8989 * Fonctions pour la mise à jour des champs composant le numéro de dossier
6215     * d'une nouvelle demande.
6216     */
6217    
6218     /**
6219     * Affiche/cache les champs composant la numérotation manuelle
6220     *
6221     * @return void
6222     */
6223 softime 17036 function toggleNoNumDossComplet(no_num_doss_complet_node, onload = false) {
6224 softime 10573
6225 softime 16749 //Si le formulaire n'as pas été validée
6226     if ($("form[name=f1] .form-is-valid").size() == 0 ) {
6227 softime 10573
6228 softime 16749 // si la case de la saisie manuelle du numéro de dossier vient d'être cochée
6229     if (no_num_doss_complet_node.checked === true) {
6230     // Désactive le numéro de dossier complet
6231     $("#num_doss_complet")[0].setAttribute('disabled','disabled');
6232    
6233     // Stock le contenu du numero de dossier complet
6234     get_num_dossier_complet = $("#num_doss_complet").val();
6235     // Vide le contenu du numéro de dossier complet
6236     $("#num_doss_complet").val('');
6237 softime 10573
6238 softime 16749 // Affiche le bloc pour la numérotation manuelle
6239     if (!onload) {
6240     // met à jour le type de dossier d'autorisation
6241     update_num_dossier_type_da($('select#dossier_autorisation_type_detaille')[0], true);
6242     // met à jour les différents champs qui compose le numéro de dossier
6243     update_num_dossier_code_depcom(getNodeForCodeDepcom(), true);
6244     update_num_dossier_annee($('input#date_demande'), true);
6245     update_num_dossier_division(true);
6246     update_num_dossier_seq(true);
6247 softime 10573
6248 softime 16749 // montre le bloc de numéro manuelle de dossier
6249     $("div.bloc_num_manu").show('fast', 'swing');
6250 softime 10573 }
6251 softime 16749
6252     // affiche le bloc de numéro manuelle de dossier
6253     else {
6254     $("div.bloc_num_manu").show();
6255 softime 10573 }
6256     }
6257    
6258 softime 16749 // case de la saisie manuelle du numéro de dossier vient d'être décochée
6259 softime 10573 else {
6260 softime 16749 // Active le numéro de dossier complet
6261     $("#num_doss_complet")[0].removeAttribute('disabled');
6262     // Récupère le num_doss_complet si un numéro est stockée.
6263     if ( get_num_dossier_complet ) {
6264     $("#num_doss_complet").val(get_num_dossier_complet);
6265     }
6266 softime 10573
6267 softime 16749 //On trigger la vérification du numéro d'urbanisme
6268     verifier_numerotation_urbanisme($("#num_doss_complet")[0]);
6269 softime 10573
6270 softime 16749 // Cache le bloc de la numérotation manuelle
6271     var bloc_numero_dossier = document.getElementsByClassName('bloc demande_hidden_bloc bloc_numero_dossier')[0];
6272     // Si le block parent n'est pas caché et que l'on n'est pas au chargement de la page
6273     if (
6274     typeof(bloc_numero_dossier) !== undefined && $(bloc_numero_dossier).is(":visible")
6275     && !onload
6276     ) {
6277     // On applique un effet
6278     $("div.bloc_num_manu").hide('fast', 'swing');
6279     } else {
6280     // Sinon on cache
6281     $("div.bloc_num_manu").hide();
6282     }
6283 softime 10573 }
6284 softime 16749 } else {
6285     // Sinon on cache
6286     $("div.bloc_numero_complet_dossier").hide();
6287     $("div.bloc_num_manu").hide();
6288 softime 10573 }
6289     }
6290    
6291     /**
6292     * Affiche/cache les champs composant la numérotation manuelle
6293     *
6294     * @return void
6295     */
6296 softime 17036 function toggleNumDossierManuel(saisie_manuelle_node, onload) {
6297 softime 16749 //Si le formulaire n'as pas été validée
6298     if ($("form[name=f1] .form-is-valid").size() == 0 ) {
6299     // Désactivation des champs de saisie
6300     if (onload === true) {
6301     $("#num_doss_type_da")[0].setAttribute('disabled','disabled');
6302     $("#num_doss_code_depcom")[0].setAttribute('disabled','disabled');
6303     $("#num_doss_annee")[0].setAttribute('disabled','disabled');
6304     }
6305 softime 10573
6306 softime 16749 if (saisie_manuelle_node.checked === true) {
6307     // Activation des champs de saisie
6308     $("#num_doss_division")[0].removeAttribute('disabled');
6309     $("#num_doss_sequence")[0].removeAttribute('disabled');
6310 softime 10573 } else {
6311 softime 16749 // Désactivation des champs de saisie
6312     $("#num_doss_division")[0].setAttribute('disabled','disabled');
6313     $("#num_doss_sequence")[0].setAttribute('disabled','disabled');
6314     update_num_dossier_type_da($('select#dossier_autorisation_type_detaille')[0]);
6315     update_num_dossier_code_depcom(getNodeForCodeDepcom());
6316     update_num_dossier_annee($('input#date_demande'));
6317     update_num_dossier_division();
6318 softime 8989 }
6319 softime 16749 } else {
6320     // Sinon on cache
6321     $("div.bloc_num_manu").hide();
6322 softime 8989 }
6323     }
6324    
6325     /**
6326 softime 10573 * [verifier_numerotation_urbanisme description]
6327 softime 16749 * @param {[type]} num_doss_complet [description]
6328 softime 10573 * @return {[type]} [description]
6329     */
6330 softime 16749 function verifier_numerotation_urbanisme(num_doss_complet) {
6331 softime 15037 // vider le message d'erreur
6332     $('#complet_err_msg').remove();
6333    
6334     // si la valeur est vide: rien à faire
6335 softime 16749 // ou si la page est valide
6336     if (
6337     (num_doss_complet.value.trim() === "")
6338     || ($("form[name=f1] .form-is-valid").size() != 0 )
6339     ) {
6340 softime 15037 return;
6341     }
6342    
6343 softime 10573 //
6344     var datd_id = document.getElementById('dossier_autorisation_type_detaille');
6345     var demande_type_id = document.getElementById('demande_type');
6346    
6347     // Récupère l'objet de l'url courante
6348     var obj = getUrlParamValue('obj', window.location.search);
6349     if (!obj || (obj != 'demande_nouveau_dossier'
6350     && obj != 'demande_nouveau_dossier_contentieux')) {
6351     //
6352     obj = 'demande_nouveau_dossier';
6353     }
6354    
6355     //
6356     var url = '../app/index.php?module=form&obj='+obj+'&action=160'
6357     + '&num_doss_complet=' + encodeURIComponent(num_doss_complet.value)
6358     + '&datd_id=' + encodeURIComponent(datd_id.value)
6359     + '&demande_type_id=' + encodeURIComponent(demande_type_id.value);
6360     $.ajax({
6361     url: url,
6362     dataType: "json",
6363     success: function(data) {
6364     //
6365     if (data && typeof(data) == 'object' && 'info_msg' in data) {
6366 softime 15037 var err_msg_elt = document.getElementById('complet_err_msg');
6367     if (! err_msg_elt) {
6368 softime 16749 $('div.bloc_numero_complet_dossier_message').append(
6369 softime 15037 '<div id="complet_err_msg">'+ data['info_msg'] +'</div>');
6370     }
6371     else {
6372     $(err_msg_elt).html(data['info_msg']);
6373     }
6374 softime 10573 }
6375     }
6376     });
6377     }
6378    
6379     /**
6380 softime 16749 * Detecte la visibilité des champs num_dossier
6381     *
6382     *
6383     */
6384 softime 17036 function numDossierIsVisible(){
6385 softime 16749 var bloc_numero_dossier = document.getElementsByClassName('bloc demande_hidden_bloc bloc_numero_dossier')[0];
6386     var num_doss_manuel_bloc = document.getElementsByClassName('bloc bloc_num_manu inline_block')[0];
6387    
6388     if (
6389     typeof(bloc_numero_dossier) !== undefined
6390     && $(bloc_numero_dossier).is(":visible")
6391     && typeof(num_doss_manuel_bloc) !== undefined
6392     && $(num_doss_manuel_bloc).is(":visible")
6393     ) {
6394     return true;
6395     }
6396     return false;
6397     }
6398    
6399     /**
6400 softime 8989 * Met à jour le code du type de dossier d'autorisation composant la
6401     * numérotation du dossier.
6402     *
6403     * @return void
6404     */
6405 softime 16749 function update_num_dossier_type_da(type_da_node, force = false) {
6406 softime 10573
6407     // si le champ du type DA du numéro de dossier existe
6408 softime 8989 var num_doss_type_da_node = document.getElementById('num_doss_type_da');
6409 softime 16749 if (num_doss_type_da_node
6410 softime 17036 && ( numDossierIsVisible() || force)
6411 softime 16749 ) {
6412 softime 10573
6413     // détermine le noeud DOM de référence pour le type de DAdt
6414 softime 8989 type_da_node = type_da_node || document.getElementById('dossier_autorisation_type_detaille');
6415 softime 10573
6416     // si une valeur est renseignée pour le DAdt
6417 softime 8989 if (type_da_node.value) {
6418 softime 10573
6419     // si la valeur est valide
6420 softime 8989 var type_da = type_da_node.value;
6421     var type_da_regex = new RegExp('^[0-9]{1,3}$');
6422     if (type_da_regex.test(type_da)) {
6423 softime 10573
6424     // récupère l'objet de l'url courante
6425     var obj = getUrlParamValue('obj', window.location.search);
6426     if (! obj || (obj != 'demande_nouveau_dossier'
6427     && obj != 'demande_nouveau_dossier_contentieux')) {
6428     obj = 'demande_nouveau_dossier';
6429     }
6430    
6431     // récupère le code du DA et met à jour le champ
6432     var url = '../app/index.php?module=form&obj='+obj+'&action=140'
6433 softime 8989 + '&type_dadt=' + encodeURIComponent(type_da);
6434     $.ajax({
6435     url: url,
6436     dataType: "json",
6437     success: function(data) {
6438     if (data && typeof(data) == 'object' && 'code_type_da' in data) {
6439     num_doss_type_da_node.value = data['code_type_da'];
6440 softime 10573 $(num_doss_type_da_node).trigger('change');
6441 softime 8989 }
6442     }
6443     });
6444     }
6445 softime 10573
6446     // valeur invalide : on vide le champ
6447 softime 8989 else {
6448     num_doss_type_da_node.value = '';
6449 softime 10573 $(num_doss_type_da_node).trigger('change');
6450 softime 8989 }
6451     }
6452 softime 10573
6453     // pas de valeur : on vide le champ
6454     else {
6455     num_doss_type_da_node.value = '';
6456     $(num_doss_type_da_node).trigger('change');
6457     }
6458 softime 8989 }
6459     }
6460    
6461     /**
6462     * Récupère l'année sur deux caractères depuis la date de la demande.
6463     *
6464     * @return string
6465     */
6466 softime 16749 function get_date_demande_annee(date_demande_node, force = false) {
6467 softime 10573 if (date_demande_node.attr("id") == "date_depot_mairie" && date_demande_node[0].value == "") {
6468     date_demande_node = $('input#date_demande')
6469     }
6470     // si le champ date demande existe
6471 softime 8989 if (date_demande_node.exists() === true) {
6472 softime 10573
6473     // si sa valeur est valide (date à la française)
6474 softime 8989 var date = date_demande_node[0].value;
6475     var date_regex = new RegExp('^[0-9]{2}/[0-9]{2}/([0-9]{4})$');
6476     if (date_regex.test(date)) {
6477 softime 10573
6478     // on renvoie l'année
6479 softime 8989 return date.replace(date_regex, '$1').substring(2);
6480     }
6481     }
6482 softime 10573
6483     // on renvoie une chaine vide par défaut
6484 softime 8989 return '';
6485     }
6486    
6487     /**
6488     * Met à jour l'année composant la numérotation du dossier.
6489     *
6490     * @return void
6491     */
6492 softime 16749 function update_num_dossier_annee(date_demande_node, force = false) {
6493 softime 10573
6494     // si le champ de l'année du numéro de dossier existe
6495     var num_doss_annee_node = document.getElementById('num_doss_annee');
6496 softime 16749 if (num_doss_annee_node && (
6497 softime 17036 numDossierIsVisible() || force)
6498 softime 16749 ) {
6499 softime 10573
6500     // si le champ de la date_demande existe et permet de calculer l'année
6501     if ($('input#date_depot_mairie').attr("type") == "hidden" || ($('input#date_depot_mairie').attr("type") != "hidden" && $('input#date_depot_mairie').val() == "")) {
6502     var date_annee = get_date_demande_annee(date_demande_node);
6503     } else {
6504     var date_annee = get_date_demande_annee($('input#date_depot_mairie'));
6505     }
6506 softime 8989 if (typeof(date_annee) !== 'undefined') {
6507 softime 10573 num_doss_annee_node.value = date_annee;
6508     $(num_doss_annee_node).trigger('change');
6509 softime 8989 }
6510 softime 10573
6511     // si aucune année : on vide le champ
6512 softime 8989 else {
6513 softime 10573 num_doss_annee_node.value = '';
6514     $(num_doss_annee_node).trigger('change');
6515 softime 8989 }
6516     }
6517     }
6518    
6519     /**
6520     * Met à jour le code du département et le code de la commune composant la
6521     * numérotation du dossier.
6522     *
6523     * @return void
6524     */
6525 softime 10573 var regex_positive_integer = new RegExp('^[0-9]+$');
6526 softime 16749 function update_num_dossier_code_depcom(event_node, force = false) {
6527 softime 10573
6528     // si le champ code département-commune existe
6529     // et que le noeud cible de l'évènement est l'un des noeuds attendus
6530 softime 8989 var num_doss_code_depcom_node = document.getElementById('num_doss_code_depcom');
6531 softime 16749 if (
6532     num_doss_code_depcom_node
6533     && event_node
6534     && ['om_collectivite', 'commune', 'autocomplete-commune-id'].indexOf(event_node.id) != -1
6535     && (
6536 softime 17036 numDossierIsVisible() || force
6537 softime 16749 )
6538     ) {
6539 softime 10573
6540     // récupère l'objet de l'url courante
6541     var obj = getUrlParamValue('obj', window.location.search);
6542     if (! obj || (obj != 'demande_nouveau_dossier'
6543     && obj != 'demande_nouveau_dossier_contentieux')) {
6544     obj = 'demande_nouveau_dossier';
6545     }
6546    
6547     var url = '../app/index.php?module=form&obj='+obj+'&action=141';
6548     var url_param_to_add = null;
6549    
6550     // le champ 'commune' existe donc on l'utilise (sous forme de select normal ou autocomplete)
6551     var commune_node = document.getElementById('commune');
6552     if (commune_node) {
6553    
6554     // le champ 'commune' existe et le déclencheur est le champ 'om_collectivite'
6555     // on ne fait rien
6556     if (event_node.id == 'om_collectivite') {
6557     return;
6558     }
6559    
6560     // sinon on ajoute le paramètre de la commune à l'url
6561     var commune_id = commune_node.value
6562     if (regex_positive_integer.test(commune_id)) {
6563     url_param_to_add = '&commune_id=' + encodeURIComponent(commune_id);
6564     }
6565     }
6566     // le déclencheur est le champ 'collectivité' et le champ 'commune' n'existe pas
6567     else if (event_node.id == 'om_collectivite') {
6568     var collectivite_id = event_node.value;
6569     if (regex_positive_integer.test(collectivite_id)) {
6570     url_param_to_add = '&collectivite_id=' + encodeURIComponent(collectivite_id);
6571     }
6572     }
6573    
6574     // ajoute le paramètre à l'url et lance la requête Ajax
6575     if (url_param_to_add) {
6576     url += url_param_to_add;
6577    
6578     // récupération et mise à jour du code département-commune
6579 softime 8989 $.ajax({
6580     url: url,
6581     dataType: "json",
6582     success: function(data) {
6583     if (data && typeof(data) == 'object' && 'code_depcom' in data) {
6584     num_doss_code_depcom_node.value = data['code_depcom'];
6585 softime 10573 $(num_doss_code_depcom_node).trigger('change');
6586 softime 8989 }
6587     }
6588     });
6589     }
6590 softime 10573
6591     // si on a aucun paramètre pour construire l'URL : on vide le champs
6592 softime 8989 else {
6593     num_doss_code_depcom_node.value = '';
6594 softime 10573 $(num_doss_code_depcom_node).trigger('change');
6595 softime 8989 }
6596     }
6597     }
6598    
6599     /**
6600     * Met à jour la division composant la numérotation du dossier.
6601     *
6602     * @return void
6603     */
6604 softime 16749 function update_num_dossier_division(force = false) {
6605 softime 10573
6606     // si le champ de la division du numéro de dossier existe
6607     var doss_division_node = document.getElementById('num_doss_division');
6608 softime 16749 if (doss_division_node
6609 softime 17036 && ( numDossierIsVisible() || force)
6610 softime 16749 ) {
6611 softime 10573
6612 softime 16749 /* si :
6613     - la saisie manuelle est décochée on reclcule toujours
6614     - la saisie manuelle est cochée et le champ n'a aucun valeur renseigner.
6615     - on force le calcul
6616     */
6617     var num_doss_manuel_node = document.getElementById('num_doss_manuel');
6618     if (
6619     (num_doss_manuel_node.value == 'Oui' && (! doss_division_node.value || doss_division_node.value == '0'))
6620     || num_doss_manuel_node.value != 'Oui'
6621     || force
6622     ) {
6623 softime 10573
6624 softime 16749 // récupération des informations nécessaires pour le calcul de la division
6625     // de l'instructeur affecté automatiquement
6626     var om_collectivite_node = document.getElementById('om_collectivite');
6627     var datd_node = document.getElementById('dossier_autorisation_type_detaille');
6628 softime 10573
6629 softime 16749 // si on les champs requis existent et leurs valeurs sont valides
6630     if (om_collectivite_node && datd_node && om_collectivite_node.value &&
6631     om_collectivite_node.value != '0' && datd_node.value && datd_node.value != '0') {
6632 softime 10573
6633 softime 16749 // la vérification se fait seulement sur la première parcelle saisie
6634     var ref_cadas_quar = $('.champ--ref-cadastrales__section:first-of-type .champ--ref-cadastrales:nth-of-type(1) input');
6635     var ref_cadas_sect = $('.champ--ref-cadastrales__section:first-of-type .champ--ref-cadastrales:nth-of-type(2) input');
6636     var ref_cadas_parc = $('.champ--ref-cadastrales__section:first-of-type .champ--ref-cadastrales:nth-of-type(3) input');
6637     var ref_cadas = '';
6638     if (ref_cadas_quar.exists() && ref_cadas_sect.exists() && ref_cadas_parc.exists()) {
6639     ref_cadas = ref_cadas_quar[0].value + ref_cadas_sect[0].value + ref_cadas_parc[0].value;
6640     }
6641 softime 10573
6642 softime 16749 // récupère l'objet de l'url courante
6643     var obj = getUrlParamValue('obj', window.location.search);
6644     if (! obj || (obj != 'demande_nouveau_dossier'
6645     && obj != 'demande_nouveau_dossier_contentieux')) {
6646     obj = 'demande_nouveau_dossier';
6647     }
6648 softime 10573
6649 softime 16749 // composition de l"URL permettant de récupérer le code de la division
6650     var url = '../app/index.php?module=form&obj='+obj+'&action=143'
6651     + '&om_collectivite=' + encodeURIComponent(om_collectivite_node.value)
6652     + '&datd=' + encodeURIComponent(datd_node.value)
6653     + '&ref_cadas=' + encodeURIComponent(ref_cadas);
6654 softime 10573
6655 softime 16749 // cas de la commune associé aux dossier
6656     var commune_node = document.getElementById('commune');
6657     if (commune_node) {
6658     url += '&commune=' + encodeURIComponent(commune_node.value);
6659     }
6660    
6661     // récupération de la division et mise à jour du champ
6662     $.ajax({
6663     url: url,
6664     dataType: "json",
6665     success: function(data) {
6666     if (data && typeof(data) == 'object' && 'code_division' in data) {
6667     var code_division = data['code_division'];
6668     if (code_division !== '') {
6669     doss_division_node.value = code_division;
6670     $(doss_division_node).trigger('change');
6671     }
6672 softime 10573 }
6673     }
6674 softime 16749 });
6675     }
6676 softime 10573
6677 softime 16749 // les champs requis ne sont pas existant ou invalides : on vide le champ
6678     else {
6679     doss_division_node.value = '';
6680     $(doss_division_node).trigger('change');
6681     }
6682 softime 10573 }
6683 softime 8989 }
6684 softime 10573 }
6685    
6686     /**
6687     * Met à jour le numéro de séquence composant la numérotation du dossier.
6688     *
6689     * @return void
6690     */
6691     function update_num_dossier_seq(force = false) {
6692    
6693     // si le champ de la séquence existe
6694 softime 16749 const num_seq_node = document.getElementById('num_doss_sequence');
6695     if (
6696     num_seq_node
6697 softime 17036 && ( numDossierIsVisible() || force)
6698 softime 16749 ) {
6699 softime 10573
6700 softime 16749 var num_doss_manuel_node = document.getElementById('num_doss_manuel');
6701     // si la saisie manuelle est décochée ou que la sélquence est null
6702     if (
6703     (num_doss_manuel_node.value == 'Oui' && (! num_seq_node.value || num_seq_node.value == '0'))
6704     || num_doss_manuel_node.value != 'Oui'
6705     || force
6706     ) {
6707 softime 10573 // récupération des autres champs composant la numérotation
6708     // nécessaires au calcul de la séquence
6709     var type_da_node = document.getElementById('num_doss_type_da');
6710     var code_depcom_node = document.getElementById('num_doss_code_depcom');
6711     var date_annee_node = document.getElementById('num_doss_annee');
6712    
6713     // si leur valeur est non-nulle/non-vide/non-indéfinie/non-zéro
6714     if (type_da_node && code_depcom_node && date_annee_node &&
6715     type_da_node.value && code_depcom_node.value && date_annee_node.value &&
6716     type_da_node.value != '0' && code_depcom_node.value != '0' &&
6717     date_annee_node.value != '0') {
6718    
6719     // récupère l'objet de l'url courante
6720     var obj = getUrlParamValue('obj', window.location.search);
6721     if (! obj || (obj != 'demande_nouveau_dossier'
6722     && obj != 'demande_nouveau_dossier_contentieux')) {
6723     obj = 'demande_nouveau_dossier';
6724 softime 8989 }
6725 softime 10573
6726     // défini l'URL permettant de récupérer la valeur courante de la séquence
6727     var url = '../app/index.php?module=form&obj='+obj+'&action=142'
6728     + '&type_da=' + encodeURIComponent(type_da_node.value)
6729     + '&code_depcom=' + encodeURIComponent(code_depcom_node.value)
6730     + '&date_demande_annee=' + encodeURIComponent(date_annee_node.value);
6731    
6732     // récupération de la valeur de la séquence et mise à jour du champ
6733     $.ajax({
6734     url: url,
6735     dataType: "json",
6736     success: function(data) {
6737     if (data && typeof(data) == 'object' && 'seq_currval' in data) {
6738     var num_doss_seq_currval = parseInt(data['seq_currval']);
6739     if (num_doss_seq_currval < 9999) {
6740     num_seq_node.value = num_doss_seq_currval + 1;
6741     $(num_seq_node).trigger('change');
6742     }
6743     else {
6744     console.error(
6745     "Le numéro de séquence reçu '"+ num_doss_seq_currval +"' "+
6746     "est invalide (supérieur ou égal à 9999).");
6747     }
6748     }
6749     }
6750     });
6751 softime 8989 }
6752 softime 10573
6753     // si les champs requis sont inexistant ou leurs valeurs invalides : on vide le champ
6754     else {
6755     num_seq_node.value = '';
6756     $(num_seq_node).trigger('change');
6757     }
6758 softime 8989 }
6759 softime 10573 }
6760 softime 8989 }
6761    
6762     /**
6763 softime 13137 * Met à jour la liste des affectations automatiques (identifiées comme manuelle) possibles d'une nouvelle demande.
6764 softime 8989 *
6765 softime 10573 * @param mixed _this L'objet courant
6766     * @param func callback Une fonction a appeler après que le champ est été mis à jour
6767     * @param int delay_cb Un délai avant le callback. Uniquemnt si le champ est affiché
6768     *
6769 softime 8989 * @return void
6770     */
6771 softime 10573 function update_affectation_auto(_this = null, callback = null, delay_cb = 0) {
6772    
6773     // champs de l'affectation automatique
6774     var aff_auto_jq = $('#affectation_automatique');
6775    
6776     // fonction d'appel du callback
6777     var _cb = function (aff_auto_jq_is_show) {
6778     if (typeof callback === 'function') {
6779     if (delay_cb && aff_auto_jq_is_show) {
6780     setTimeout(function() { callback(_this); }, delay_cb);
6781     }
6782     else {
6783     callback(_this);
6784     }
6785     }
6786     };
6787    
6788     // si aucun champ 'affectation_automatique' on ne fait rien
6789     if (! aff_auto_jq.exists()) {
6790     _cb(false);
6791 softime 8989 return;
6792     }
6793 softime 10573
6794     // récupération des informations nécessaires
6795     var om_collectivite_id = $('#om_collectivite').val();
6796     var datd_id = $('select#dossier_autorisation_type_detaille').val();
6797 softime 13137 var demande_type_id = $('#demande_type').val();
6798 softime 10573
6799     // s'il manque des informations
6800     if (om_collectivite_id == undefined || om_collectivite_id == ''
6801     || datd_id == undefined || datd_id == ''
6802 softime 13137 || demande_type_id == undefined || demande_type_id == '') {
6803 softime 10573
6804     // on remplace le noeud DOM par un <input> caché et à valeur vide
6805     aff_auto_jq.replaceWith(
6806     '<input id="affectation_automatique" name="affectation_automatique" type="hidden" ' +
6807     'value="" />'
6808     );
6809    
6810     // on cache la ligne du bloc
6811     $('#affectation_automatique').parent().parent().hide();
6812    
6813     // on s'arrête là
6814     _cb(false);
6815     return;
6816     }
6817    
6818     // récupère l'objet de l'url courante
6819     var obj = getUrlParamValue('obj', window.location.search);
6820     if (! obj || (obj != 'demande_nouveau_dossier'
6821     && obj != 'demande_nouveau_dossier_contentieux')) {
6822     obj = 'demande_nouveau_dossier';
6823     }
6824    
6825     // composition de l"URL permettant de récupérer les affectations automatiques
6826     var url = '../app/index.php?module=form&obj='+obj+'&action=150'
6827     + '&om_collectivite=' + encodeURIComponent(om_collectivite_id)
6828     + '&datd=' + encodeURIComponent(datd_id)
6829 softime 13137 + '&demande_type=' + encodeURIComponent(demande_type_id);
6830 softime 10573
6831     // le champ 'commune' existe donc on l'utilise (sous forme de select normal ou autocomplete)
6832     var commune_node = document.getElementById('commune');
6833     if (commune_node) {
6834 softime 16749 var commune_id = commune_node.value;
6835 softime 10573 if (regex_positive_integer.test(commune_id)) {
6836     url += '&commune=' + encodeURIComponent(commune_id);
6837     }
6838     }
6839    
6840     // exécution de la requête HTTP pour récupérer les affectations automatiques
6841 softime 8989 $.ajax({
6842     url: url,
6843     dataType: "json",
6844     success: function(data) {
6845 softime 10573 aff_auto_jq = $('#affectation_automatique');
6846    
6847     // si le champ 'affectation_automatique' n'existe plus
6848     if (! aff_auto_jq) {
6849     _cb(false);
6850     return;
6851     }
6852    
6853     // on cache la ligne du bloc
6854     aff_auto_jq.parent().parent().hide();
6855    
6856     // on remplace le noeud DOM par un <select>
6857     var aff_auto_jq_classes = aff_auto_jq.attr('class');
6858     var urlParams = extractUrlParams();
6859     var selectedValue = null;
6860     if ('affectation_automatique' in urlParams) {
6861     selectedValue = urlParams['affectation_automatique'];
6862     }
6863     aff_auto_jq.replaceWith(
6864     '<select id="affectation_automatique" name="affectation_automatique">' +
6865     '<option value=""' + (! selectedValue ? ' selected="selected"' : '') + '>' +
6866     'choisir affectation automatique' +
6867     '</option>' +
6868     '</select>'
6869     );
6870     aff_auto_jq = $('#affectation_automatique');
6871     aff_auto_jq.attr('class', aff_auto_jq_classes);
6872    
6873     // si on a bien reçu des affectations automatiques correspondantes
6874     var options_received = false;
6875     if (data && typeof(data) == 'object' && 'affectations_auto' in data) {
6876     var aff_auto = data['affectations_auto'];
6877     if (aff_auto && typeof(aff_auto) == 'object' && aff_auto.length > 0) {
6878     options_received = true;
6879    
6880     // on les ajoute au <select> en tant que <option>
6881     $.each(aff_auto, function() {
6882     var opt_html = $("<option></option>").text(this.libelle).val(this.id);
6883     if (selectedValue && selectedValue == this.id) {
6884     opt_html.attr('selected', 'selected');
6885     }
6886     aff_auto_jq.append(opt_html);
6887     });
6888 softime 8989 }
6889     }
6890 softime 10573
6891     // si on a ajouté des options on affiche la ligne du bloc
6892     if (options_received) {
6893     aff_auto_jq.parent().parent().show();
6894    
6895     // exécute le callback avec délai
6896     _cb(true);
6897     }
6898     else {
6899    
6900     // exécute le callback sans délai
6901     _cb(false);
6902     }
6903 softime 8989 }
6904     });
6905     }
6906 softime 9245
6907     /**
6908 softime 10573 * Remplace un paramètre d'une URL relative (sans domaine)
6909 softime 9245 *
6910 softime 10573 * @source: https://stackoverflow.com/a/20420424
6911     */
6912     function replaceRelativeUrlParam(url, paramName, paramValue)
6913     {
6914     if (paramValue == null) {
6915     paramValue = '';
6916     }
6917     var pattern = new RegExp('\\b('+paramName+'=).*?(&|#|$)');
6918     if (url.search(pattern)>=0) {
6919     return url.replace(pattern,'$1' + paramValue + '$2');
6920     }
6921     url = url.replace(/[?#]$/,'');
6922     return url + (url.indexOf('?')>0 ? '&' : '?') + paramName + '=' + paramValue;
6923     }
6924    
6925     /**
6926 softime 16749 * Met à jour l'objet 'select' du champ commune à partir des champs
6927 softime 10573 * 'om_collectivite' et 'date_demande'
6928     * (lorsque l'option dossier_commune est activée)
6929     */
6930 softime 17036 function updateCommuneSelect() {
6931 softime 16749 // si la select 'commune' existe
6932     var commune_node = document.getElementById('commune');
6933     if (commune_node) {
6934     var om_collectivite = '';
6935     var date_demande = '';
6936 softime 17036 var has_loader = false;
6937 softime 10573
6938 softime 16749 // Recuper le numéro de dossier complet
6939     num_doss_complet_node = $("#num_doss_complet")[0];
6940 softime 10573
6941 softime 16749 // récupère l'objet de l'url courante
6942 softime 17036 const obj = getUrlParamValue('obj', window.location.search);
6943 softime 16749 if (! obj || (obj != 'demande_nouveau_dossier'
6944     && obj != 'demande_nouveau_dossier_contentieux')) {
6945     obj = 'demande_nouveau_dossier';
6946     }
6947 softime 10573
6948 softime 17036 const collectivite_node = document.getElementById('om_collectivite');
6949 softime 16749 // si le champ 'om_collectivite' existe
6950     if (collectivite_node) {
6951     // récupère sa valeur courante
6952     om_collectivite = collectivite_node.value || '';
6953     }
6954     // si le champ 'date_demande' existe
6955     var date_demande_node = document.getElementById('date_demande');
6956     if (date_demande_node) {
6957     // récupère sa valeur courante
6958     date_demande = date_demande_node.value || '';
6959     }
6960 softime 10573
6961 softime 17036 // la section suivante fait l'équivalent de
6962     // filterSelect (num_doss_complet_node.value, 'commune', 'num_doss_complet', obj, 'date_demande', date_demande, 'om_collectivite', om_collectivite);
6963     // mais avec l'ajout du loader
6964     // lien vers script php
6965     link = "../app/index.php?module=form&snippet=filterselect&idx=" + num_doss_complet_node.value + "&tableName=commune" +
6966     "&linkedField=num_doss_complet&formCible=" + obj;
6967     // Concaténation dans l'url des paramètres supplémentaires spécifiques
6968     link += "&date_demande="+date_demande;
6969     link += "&om_collectivite="+om_collectivite;
6970     link += "&triggered_load="+true;
6971    
6972     const commune_loader_div = document.getElementsByClassName('commune---loader');
6973     if (
6974     typeof(commune_loader_div) !== 'undefined'
6975     && typeof(commune_loader_div[0]) !== 'undefined'
6976     && commune_loader_div[0].firstElementChild.hidden === false
6977     ) {
6978     // add loading image
6979     has_loader = true;
6980     $(commune_loader_div).addClass('inline_block');
6981     $(commune_loader_div).append('<div id="commune_loader_div" class="loader"></div>');
6982     }
6983 softime 10573
6984 softime 17036 // lancement de l'appel et récupération du nouveau contenu du select
6985     $.ajax({
6986     type: "GET",
6987     url: link,
6988     cache: true,
6989     dataType: "html",
6990     success: function(res){
6991     var table_node = document.getElementById('commune');
6992     var selected_id = table_node.value;
6993    
6994     $('#commune').empty();
6995     $('#commune').append(res);
6996    
6997     if (selected_id !== '' && selected_id !== null) {
6998     var is_found = false;
6999     for(let cpt_option = 0; cpt_option < table_node.length; cpt_option++ ) {
7000     if ( table_node[cpt_option].value == selected_id){
7001     table_node[0].selected = false;
7002     table_node[cpt_option].selected = true;
7003     is_found = true;
7004     }
7005     }
7006     if (!is_found) {
7007     // Récupère un message traduit en PHP
7008     $.ajax({
7009     type: "GET",
7010     url: "../app/index.php?module=form&obj=demande_nouveau_dossier&action=170&idx=0&text_choice=commune_change_selection",
7011     success: function(message) {
7012     if (message) {
7013     alert(message);
7014     }
7015     }
7016     });
7017     }
7018     }
7019    
7020     // Spécifique au chosen, permet de reset le chosen pour qu'il prenne les nouvelles
7021     // valeurs du select
7022     if ($('#commune_chosen').exists() === true) {
7023     resetChosen('commune');
7024     }
7025     }
7026     }).always(function() {
7027     if (has_loader){
7028     // remove loading image
7029     const commune_loader_node = document.getElementById('commune_loader_div');
7030     $(commune_loader_node).remove();
7031     $(commune_loader_div).removeClass('inline_block');
7032     }
7033     });
7034 softime 10573 }
7035     }
7036    
7037    
7038     /**
7039     *
7040 softime 9245 * @return void
7041     */
7042     function view_document_numerise_preview_edition() {
7043     //
7044     $("#frame_pdf").height($('#sousform-document_numerise_preview_edition').height()-50);
7045     $("#frame_pdf").width($('#sousform-document_numerise_preview_edition').width()-50);
7046     $('#sousform-document_numerise_preview_edition .formControls input').hide();
7047     $('#sousform-document_numerise_preview_edition .formControls-bottom').hide();
7048     }
7049 softime 10573
7050     /**
7051     *
7052     * @return void
7053     */
7054     function view_instruction_preview_edition() {
7055     //
7056     $("#frame_pdf").height($('#sousform-instruction_preview_edition').height()-50);
7057     $("#frame_pdf").width($('#sousform-instruction_preview_edition').width()-50);
7058     $('#sousform-instruction_preview_edition .formControls input').hide();
7059     $('#sousform-instruction_preview_edition .formControls-bottom').hide();
7060     }
7061    
7062     /**
7063     *
7064     * @return void
7065     */
7066     function view_rapport_instruction_preview_edition() {
7067     //
7068     $("#frame_pdf").height($('#sousform-rapport_instruction_preview_edition').height()-50);
7069     $("#frame_pdf").width($('#sousform-rapport_instruction_preview_edition').width()-50);
7070     $('#sousform-rapport_instruction_preview_edition .formControls input').hide();
7071     $('#sousform-rapport_instruction_preview_edition .formControls-bottom').hide();
7072     }
7073    
7074     /**
7075     *
7076     * @return void
7077     */
7078     function view_storage_preview_edition() {
7079     //
7080     $("#frame_pdf").height($('#sousform-storage_preview_edition').height()-50);
7081     $("#frame_pdf").width($('#sousform-storage_preview_edition').width()-50);
7082     $('#sousform-storage_preview_edition .formControls input').hide();
7083     $('#sousform-storage_preview_edition .formControls-bottom').hide();
7084     }
7085    
7086     /**
7087     *
7088     * @return void
7089     */
7090     function view_consultation_preview_edition() {
7091     //
7092     $("#frame_pdf").height($('#sousform-consultation_preview_edition').height()-50);
7093     $("#frame_pdf").width($('#sousform-consultation_preview_edition').width()-50);
7094     $('#sousform-consultation_preview_edition .formControls input').hide();
7095     $('#sousform-consultation_preview_edition .formControls-bottom').hide();
7096     }
7097     /**
7098     * Renvoi la valeur du paramètre GET de l'url passée en argument, ou 'false' si non-trouvé
7099     *
7100     */
7101     function getUrlParamValue(key, url = null) {
7102     if (url === null) {
7103     url = window.location.search;
7104     }
7105     var search_params = new URLSearchParams(url);
7106     if (search_params) {
7107     return search_params.get(key);
7108     }
7109     return false;
7110     }
7111    
7112     /**
7113     * Surcharge de la méthode form_container_refresh qui
7114     * utilise les données récupérée à partir du href de la balise d'id sousform-real-href plutot
7115     * que celle du sousform-href pour mettre à jour les données de la page.
7116     *
7117     * Dans le cas ou un listing est affiché en dessous d'un formulaire en consultation,
7118     * cette modification permet d'afficher le code complet de la page et pas uniquement
7119     * celui du tableau.
7120     * Le problème étant que le tableau à lui aussi une balise d'id sousform-href et que
7121     * c'est le href qui lui est associé qui va être utilisé car cette balise est affichée
7122     * en première.
7123     */
7124     function form_container_refresh(elem) {
7125     //
7126     if (elem == "form") {
7127     //
7128     $.get(window.location.href, function(data) {
7129     //
7130     $('#form-container').html(data);
7131     // Initialisation JS du nouveau contenu de la page
7132     om_initialize_content();
7133     });
7134     } else if (elem == "sousform") {
7135     //
7136 softime 13528 if($("#sousform-real-href").attr('data-href') !== null &&
7137     $("#sousform-real-href").attr('data-href') !== undefined &&
7138     $("#sousform-real-href").attr('data-href') !== ''
7139     ){
7140    
7141     $.get($("#sousform-real-href").attr('data-href')+"&contentonly=true", function(data) {
7142     //
7143     $('#sousform-container').html(data);
7144     // Initialisation JS du nouveau contenu de la page
7145     om_initialize_content();
7146     });
7147     }
7148 softime 10573 }
7149     }
7150    
7151     /**
7152     * Affiche le champ description_type dans le formulaire d'ajout des pièces
7153     * si le champ Autre à préciser est sélectionné.
7154     * Si un autre type de pièce est choisi, masque le champ et supprime son
7155     * contenu
7156     *
7157     */
7158     function afficheChampDescription(selectedValue, idPieceAutre) {
7159     if (selectedValue == idPieceAutre) {
7160     $('input#description_type').parents('div.field-type-hidden').attr('class', 'field field-type-text');
7161     document.getElementById('description_type').type = 'text';
7162     $('input#description_type').val("");
7163     } else {
7164     document.getElementById('description_type').type = 'hidden';
7165     $('input#description_type').val("");
7166     $('input#description_type').parents('div.field-type-text').attr('class', 'field field-type-hidden');
7167     }
7168     }
7169 softime 10808
7170     /**
7171     * Permet de mettre à jour le formulaire d'instruction après validation
7172     * du formulaire de sélection des demandeurs.
7173     *
7174     */
7175     function validation_formulaire_notification_manuelle() {
7176     // Refresh du formulaire de l'instruction
7177     form_container_refresh("sousform");
7178     }
7179    
7180 softime 11057 /**
7181     * Récupérer le numéro du dossier courant et de l'instructeur sélecionné.
7182     * A partir de ces informations interroge le serveur à l'aide d'une ajax
7183     * pour récupérer l'identifiant de la division de l'instructeur.
7184     * Donne au select du champ division la valeur ainsi récupérée.
7185     *
7186     * @param {integer} idInstructeur identifiant de l'instructeur sélectionné
7187     * @param {string} idDossier identifiant du dossier courant
7188     */
7189     function changementDivision(idInstructeur,idDossier) {
7190     // Lien servant à appeller l'action qui permet de récupérer l'identifiant de la division
7191     // à l'aide de l'identifiant de l'instructeur contenu dans "instructeurId"
7192     link = "../app/index.php?module=form&obj=dossier_instruction&action=599&idx=" + idDossier + "&instructeurId=" + idInstructeur;
7193     // Traitement
7194     $.ajax({
7195     type: "GET",
7196     url: link,
7197     cache: false,
7198     dataType: "json",
7199     success: function(data) {
7200     // Le select du champ division prend la valeur récupérer via l'action
7201     $("#division").val(data["division"]);
7202     },
7203     async: false,
7204     });
7205     }
7206    
7207 softime 11418 /**
7208 softime 16749 * SURCHARGE - lib/om-assets/js/layout_jqueryui_after.js
7209     */
7210     function affichersform(objsf, link, formulaire, async = true) {
7211     // composition de la chaine data en fonction des elements du formulaire
7212     var data = "";
7213     //
7214     if (formulaire) {
7215     //
7216     for (i = 0; i < formulaire.elements.length; i++) {
7217     //
7218     field = $(formulaire.elements[i]);
7219     // Sauvegarde du contenu des tinymce avant serialisation
7220     if (tinyMCE.editors[formulaire.elements[i].name]) {
7221     //
7222     form_val = encodeURIComponent(tinyMCE.get(formulaire.elements[i].name).getContent());
7223     //
7224     data+=formulaire.elements[i].name+"="+form_val+"&";
7225     } else if (field.attr("multiple") == "multiple") {
7226     var multipleValues = field.val() || [];
7227     for (var j = 0; j < multipleValues.length; j++) {
7228     data+=formulaire.elements[i].name+"="+multipleValues[j]+"&";
7229     };
7230     } else {
7231     form_val = encodeURIComponent(formulaire.elements[i].value);
7232     //
7233     data+=formulaire.elements[i].name+"="+form_val+"&";
7234     }
7235     }
7236     }
7237     // execution de la requete en POST
7238     $.ajax({
7239     type: "POST",
7240     url: link,
7241     cache: false,
7242     data: data,
7243     async: async,
7244     success: function(html){
7245     $("#sousform-"+objsf).empty();
7246     $("#sousform-"+objsf).append(html);
7247     real_link = $(html).find("#sousform-real-href").attr("data-href");
7248     if ($("#sousform-href").length) {
7249     if (real_link != undefined) {
7250     $("#sousform-href").attr("data-href", real_link);
7251     } else {
7252     $("#sousform-href").attr("data-href", link);
7253     }
7254     }
7255     om_initialize_content(true);
7256     // Remonte au début du formulaire
7257     $(window).scrollTop($("div.ui-widget-content div#sousform-" + objsf).parent().offset().top);
7258     }
7259     });
7260     }
7261    
7262     /**
7263 softime 11418 * Surcharge de ajaxIt pour ajouter un spinner au chargement de la page.
7264     *
7265     * @param {string} objsf nom du sous formulaire ex: document_numerise
7266     * @param {string} link url permettant de récupérer les infos du formulaire
7267     */
7268     function ajaxIt(objsf, link) {
7269     $("#sousform-"+objsf).append(msg_loading);
7270     // execution de la requete en POST
7271     $.ajax({
7272     type: "GET",
7273     url: link,
7274     cache: false,
7275     success: function(html){
7276     $("#sousform-"+objsf).empty();
7277     $("#sousform-"+objsf).append(html);
7278     real_link = $(html).find("#sousform-real-href").attr("data-href");
7279     if ($("#sousform-href").length) {
7280     if (real_link != undefined) {
7281     $("#sousform-href").attr("data-href", real_link);
7282     } else {
7283     $("#sousform-href").attr("data-href", link);
7284     }
7285     }
7286     om_initialize_content(true);
7287     }
7288     });
7289     }
7290 softime 12847
7291     /**
7292     * SURCHARGE/OVERLOAD - lib/om-assets/js/layout_jqueryui_after.js
7293     *
7294     * FORM WIDGET - HTML tinyMCE Complet pour les états et lettre type
7295     *
7296     * Le surcharge permet d'ajouter la police de caractère Arial.
7297     *
7298     * CORPS
7299     */
7300     function inputText_bind_tinyMCE_extended() {
7301     //
7302     tinymce.init({
7303     //
7304     selector: "textarea.htmletatex",
7305     //
7306     menubar: "edit insert format table tools",
7307     //
7308     menu: {
7309     edit: {title: 'Edit', items: 'undo redo | cut copy paste pastetext | selectall | searchreplace'},
7310     insert: {title: 'Insert', items: 'sousetats | hr pagebreak | insertdatetime'},
7311     format: {title: 'Format', items: 'bold italic underline strikethrough superscript subscript | removeformat'},
7312     table: {title: 'Table', items: 'inserttable tableprops deletetable | cell row column'},
7313     tools: {title: 'Tools', items: 'code | fullscreen'}
7314     },
7315     // modifier le language via l'appel à la LOCALE
7316     language : locale,
7317     // Spell check (pas de contextmenu...)
7318     browser_spellcheck : true,
7319     //
7320     fontsize_formats: "6pt 7pt 8pt 9pt 10pt 11pt 12pt 13pt 14pt 15pt 18pt 24pt 36pt",
7321     entity_encoding : "raw",
7322     plugins: [
7323     "advlist lists hr pagebreak",
7324     "searchreplace wordcount fullscreen",
7325     "insertdatetime save table",
7326     "paste textcolor autoresize code"
7327     ],
7328     // Custom CSS
7329     content_css: "../lib/om-assets/css/tinymce.css",
7330     // Style inline
7331     inline_styles : true,
7332     paste_auto_cleanup_on_paste : true,
7333     paste_word_valid_elements: "b,strong,i,em,h1,h2",
7334     //
7335     contextmenu : "cut copy paste pastetext selectall | removeformat | insertdate inserttable",
7336     insertdatetime_formats : ["%d/%m/%Y", "%H:%M"],
7337     tools: "inserttable",
7338     debug : true,
7339     pagebreak_separator : "<br pagebreak='true' />",
7340     // table_unbreakable_breakable_property - Ajout de l'attribut nobr sur
7341     // l'élement table comme élément valide pour ne pas qu'il soit supprimé
7342     // par tinymce (tous les attributs existants de table ont été repris
7343     // car le paramètre 'extended_valid_elements' n'étend pas l'existant
7344     // sur une balise).
7345     extended_valid_elements : "br[pagebreak],table[nobr|border=0|style|cellspacing|cellpadding|width|frame|rules|height|align|summary|bgcolor|background|bordercolor],",
7346     invalid_elements : "script,applet,iframe,tcpdf",
7347     toolbar1: "undo redo | bold italic underline | fontselect |"+
7348     " fontsizeselect | alignleft aligncenter alignright alignjustify |"+
7349     " bullist numlist | forecolor backcolor | majmin | codebarre | table_unbreakable_breakable_property",
7350     formats : {
7351     bold: {inline: 'span', styles: {'font-weight': 'bold'}},
7352     mce_minformat: {inline: 'span', 'classes': 'mce_min'},
7353     mce_majformat: {inline: 'span', 'classes': 'mce_maj'},
7354     mce_codebarreformat: {inline: 'span', 'classes': 'mce_codebarre'},
7355     },
7356    
7357     // Liste des polices
7358     font_formats: "Courier New=courier new,courier;"+
7359     "Helvetica=helvetica;"+
7360     "Times New Roman=times new roman,times;"+
7361     "Arial=arial",
7362    
7363     // Interdiction de redimentionner une table
7364     object_resizing : false,
7365     // Colle le texte brut sans style, ni balise
7366     paste_as_text: true,
7367     //
7368     setup: function (editor) {
7369     //
7370     addMajMinButton(editor);
7371     // table_unbreakable_breakable_property - Ajout du bouton.
7372     tinymce_add_table_unbreakable_breakable_property(editor);
7373     //
7374     addCodeBarreButton(editor);
7375     //
7376     addSEMenu(editor);
7377     //
7378     editor.on('SetContent', function(e) {
7379     editor.save();
7380     });
7381     }
7382     });
7383     }
7384    
7385     /**
7386     * SURCHARGE/OVERLOAD - lib/om-assets/js/layout_jqueryui_after.js
7387     *
7388     * FORM WIDGET - HTML Simplifié - Zones de texte des formulaires
7389     *
7390     * Le surcharge permet d'ajouter la police de caractère Arial.
7391     *
7392     * CHAMPS DE FUSION
7393     */
7394     function inputText_bind_tinyMCE() {
7395     //
7396     tinymce.init({
7397     //
7398     selector: "textarea.html",
7399     //
7400     menubar: "edit insert format table tools",
7401     //
7402     menu: {
7403     edit: {title: 'Edit', items: 'undo redo | cut copy paste pastetext | selectall | searchreplace'},
7404 softime 14542 insert: {title: 'Insert', items: 'hr | insertdatetime'},
7405 softime 12847 format: {title: 'Format', items: 'bold italic underline strikethrough superscript subscript | removeformat'},
7406     table: {title: 'Table', items: 'inserttable tableprops deletetable | cell row column'},
7407     tools: {title: 'Tools', items: 'code | fullscreen'}
7408     },
7409     // modifier le language via l'appel à la LOCALE
7410     language : locale,
7411     // Spell check (pas de contextmenu...)
7412     browser_spellcheck : true,
7413     //
7414     fontsize_formats: "6pt 7pt 8pt 9pt 10pt 11pt 12pt 13pt 14pt 15pt 18pt 24pt 36pt",
7415     entity_encoding : "raw",
7416     plugins: [
7417     "advlist lists hr",
7418     "searchreplace wordcount",
7419 softime 17542 "insertdatetime save table",
7420 softime 12847 "paste textcolor autoresize code"
7421     ],
7422     // Custom CSS
7423     content_css: "../lib/om-assets/css/tinymce.css",
7424     // Style inline
7425     inline_styles : true,
7426     paste_auto_cleanup_on_paste : true,
7427     paste_word_valid_elements: "b,strong,i,em,h1,h2",
7428     //
7429     contextmenu : "cut copy paste pastetext selectall | removeformat | insertdate",
7430     insertdatetime_formats : ["%d/%m/%Y", "%H:%M"],
7431     invalid_elements : "script,applet,iframe,tcpdf",
7432     toolbar1: "undo | bold italic underline | fontselect | "+
7433     " fontsizeselect | alignleft aligncenter alignright alignjustify |"+
7434     " bullist numlist | forecolor backcolor",
7435    
7436     formats : {
7437     bold: {inline: 'span', styles: {'font-weight': 'bold'}},
7438     },
7439    
7440     // Liste des polices
7441     font_formats: "Courier New=courier new,courier;"+
7442     "Helvetica=helvetica;"+
7443     "Times New Roman=times new roman,times;"+
7444     "Arial=arial",
7445    
7446     // Colle le texte brut sans style, ni balise
7447     paste_as_text: true,
7448     //
7449     setup: function(editor) {
7450     //
7451     editor.on('SetContent', function(e) {
7452     editor.save();
7453     });
7454     }
7455     });
7456     }
7457    
7458     /**
7459     * SURCHARGE/OVERLOAD - lib/om-assets/js/layout_jqueryui_after.js
7460     *
7461     * FORM WIDGET - HTML Simplifié pour champs de fusions des états et lettretype
7462     *
7463     * Le surcharge permet d'ajouter la police de caractère Arial.
7464     *
7465     * TITRE, HEADER, FOOTER
7466     */
7467     function inputText_bind_tinyMCE_simple() {
7468     //
7469     tinymce.init({
7470     //
7471     selector: "textarea.htmletat",
7472     //
7473     menubar: "edit insert view format table tools",
7474     //
7475     menu: {
7476     edit: {title: 'Edit', items: 'undo redo | cut copy paste pastetext | selectall | searchreplace'},
7477 softime 14542 insert: {title: 'Insert', items: 'hr | insertdatetime | template'},
7478 softime 12847 format: {title: 'Format', items: 'bold italic underline strikethrough superscript subscript | removeformat'},
7479     table: {title: 'Table', items: 'inserttable tableprops deletetable | cell row column'},
7480     tools: {title: 'Tools', items: 'code | fullscreen'}
7481     },
7482     // modifier le language via l'appel à la LOCALE
7483     language : locale,
7484     // Spell check (pas de contextmenu...)
7485     browser_spellcheck : true,
7486     //
7487     fontsize_formats: "6pt 7pt 8pt 9pt 10pt 11pt 12pt 13pt 14pt 15pt 18pt 24pt 36pt",
7488     entity_encoding : "raw",
7489     plugins: [
7490     "advlist lists hr",
7491     "searchreplace wordcount fullscreen",
7492     "insertdatetime save table",
7493     "template paste textcolor autoresize code"
7494     ],
7495     // Custom CSS
7496     content_css: "../lib/om-assets/css/tinymce.css",
7497     // Style inline
7498     inline_styles : true,
7499     paste_auto_cleanup_on_paste : true,
7500     paste_word_valid_elements: "b,strong,i,em,h1,h2",
7501     //
7502     contextmenu : "cut copy paste pastetext selectall | removeformat | insertdate inserttable",
7503     insertdatetime_formats : ["%d/%m/%Y", "%H:%M"],
7504     tools: "inserttable",
7505     invalid_elements : "script,applet,iframe,tcpdf",
7506     toolbar1: "undo redo | bold italic underline | fontselect |"+
7507     " fontsizeselect | alignleft aligncenter alignright alignjustify |"+
7508 softime 14542 " bullist numlist | forecolor backcolor | majmin | codebarre | fullscreen",
7509 softime 12847 templates: [
7510     {title: 'Modèle courrier', content: '<p>&nbsp;</p><table><tbody><tr><td style=\'width: 50%;\'><p>Civilit&eacute; Nom Pr&eacute;nom emetteur</p><p>adresse</p><p>compl&eacute;ment</p><p>cp ville</p><p>&nbsp;</p><p>&nbsp;</p><p>&nbsp;</p><p>&nbsp;</p><p>&nbsp;</p><p>&nbsp;</p><p>&nbsp;</p></td><td><p>&nbsp;</p><p>&nbsp;</p><p>&nbsp;</p><p>&nbsp;</p><p>&nbsp;</p><p>&nbsp;</p><p>&nbsp;</p><p>Civilit&eacute; Nom Pr&eacute;nom destinataire</p><p>adresse</p><p>compl&eacute;ment</p><p>cp ville</p></td></tr></tbody></table>'} ],
7511    
7512     formats : {
7513     bold: {inline: 'span', styles: {'font-weight': 'bold'}},
7514     mce_minformat: {inline: 'span', 'classes': 'mce_min'},
7515     mce_majformat: {inline: 'span', 'classes': 'mce_maj'},
7516     mce_codebarreformat: {inline: 'span', 'classes': 'mce_codebarre'},
7517     },
7518    
7519     // Liste des polices
7520     font_formats: "Courier New=courier new,courier;"+
7521     "Helvetica=helvetica;"+
7522     "Times New Roman=times new roman,times;"+
7523     "Arial=arial",
7524    
7525     // Interdiction de redimentionner une table
7526     object_resizing : false,
7527     // Colle le texte brut sans style, ni balise
7528     paste_as_text: true,
7529     //
7530     setup: function (editor) {
7531     //
7532     addMajMinButton(editor);
7533     //
7534     addCodeBarreButton(editor);
7535     //
7536     editor.on('SetContent', function(e) {
7537     editor.save();
7538     });
7539     }
7540     });
7541     }
7542    
7543     /**
7544     * Alterne l'affichage de la liste des champs passé en paramètre
7545     * selon si la condition voulue est remplie ou pas.
7546     *
7547     * @param {boolean} condition
7548     * @param {array} afficheSiOK liste des champs affiché si la condition est respectée
7549     * @param {array} afficheSiNon Liste des champs affiché si la condition n'est pas
7550     * respecté
7551     */
7552     function alternate_display(condition, afficheSiOK, afficheSiNon) {
7553     if (condition) {
7554 softime 15650 afficheSiOK.forEach(displayField);
7555     afficheSiNon.forEach(hideField);
7556 softime 12847 return;
7557     }
7558 softime 15650 afficheSiNon.forEach(displayField)
7559     afficheSiOK.forEach(hideField)
7560 softime 12847 }
7561    
7562     /**
7563     * Masque un champs de formulaire en lui donnant pour type hidden.
7564     * @param {string} fieldName identifiant du champs à cacher
7565     */
7566 softime 15650 function hideField(fieldName) {
7567     $('#' + fieldName).parents('.field').addClass('ui-tabs-hide')
7568 softime 12847 // Vide la valeur du champs masqué
7569     $('#' + fieldName).val('').removeAttr('checked').removeAttr('selected');
7570     }
7571    
7572     /**
7573     * Affiche un champs caché en lui retirant sa classe hidden.
7574     * @param {string} fieldName identifiant du champs à cacher
7575     */
7576 softime 15650 function displayField(fieldName) {
7577     $('#' + fieldName).parents('.field').removeClass('ui-tabs-hide')
7578 softime 12847 }
7579 softime 13137
7580     /**
7581     * Mutateur de la valeur d'un champ et déclenche son événement de changement (onchange).
7582     *
7583     * @param {object} target Objet visé.
7584     * @param {string} value Valeur de l'objet visé.
7585     */
7586     function set_field_value(target, value) {
7587     target.value = value;
7588     target.onchange();
7589     }
7590    
7591     /**
7592     * Permet de faire un calcul simplifié et sauvegardé le résultat dans la valeur d'un champ.
7593     * Simplifié dans le sens où l'opérateur se mettra entre chaque opérande de façon itérative.
7594     * Exemple pour une division avec 3 opérandes 10, 4, 8.
7595     * Le résultat sera 10 / 4 = 2.5, puis 2.5 / 8 = 0,3125.
7596     * Donc le résultat final sera 0.3125.
7597     *
7598     * @param {object} target Objet visé.
7599     * @param {string} operator Opérateur du calcul (addition, subtraction, division, multiplication).
7600     * @param {[type]} operands Opérandes composant le calcul.
7601     */
7602     function calculate_field_value(target, operator, operands) {
7603     // Si un opérande n'est pas définit alors le calcul n'est pas exécuté
7604     operands.forEach(function(item, index, array) {
7605     if (item === '') {
7606     return;
7607     }
7608     });
7609    
7610     // Par défaut le résultat prend le premier opérande
7611     result = parseFloat(operands[0]);
7612     if (operator === 'addition') {
7613     operands.forEach(function(item, index, array) {
7614     if (index !== 0 && isNaN(item) !== true) {
7615     result += parseFloat(item);
7616     }
7617     });
7618     }
7619     if (operator === 'subtraction') {
7620     operands.forEach(function(item, index, array) {
7621     if (index !== 0 && isNaN(item) !== true) {
7622     result -= parseFloat(item);
7623     }
7624     });
7625     }
7626     if (operator === 'division') {
7627     operands.forEach(function(item, index, array) {
7628     if (index !== 0 && isNaN(item) !== true) {
7629 softime 14542 // Gestion de la division par 0
7630     if (parseFloat(item) === 0) {
7631     result = 0;
7632     } else {
7633     result /= parseFloat(item);
7634     }
7635 softime 13137 }
7636     });
7637     }
7638     if (operator === 'multiplication') {
7639     operands.forEach(function(item, index, array) {
7640     if (index !== 0 && isNaN(item) !== true) {
7641     result *= parseFloat(item);
7642     }
7643     });
7644     }
7645    
7646     // Le résutat doit être un numérique pour mettre à jour la cible
7647     // et déclencher sont onchange
7648     if (isNaN(result) !== true) {
7649     target.value = result;
7650     target.onchange();
7651     }
7652     }
7653 softime 15650
7654     // SURCHAGE afin de modifier l'icone des datepicker
7655     function inputdate_bind_datepicker() {
7656     //
7657     $(".datepicker").datepicker({
7658     dateFormat: dateFormat,
7659     changeMonth: true,
7660     changeYear: true,
7661     yearRange: minYear+':'+maxYear,
7662     showOn: "button",
7663     buttonImage: './img/calendar-16x16.svg',
7664     buttonImageOnly: true,
7665     buttonText: "Choisir une date",
7666     constrainInput: true
7667     });
7668     }
7669    
7670 softime 16749 /**
7671     * Si un select lié à un chosen est modifié dynamiquement, le chosen n'est pas mis
7672     * à jour automatiquement.
7673     * Cette fonction permet donc de mettre à jour les valeurs d'un chosen par rapport
7674     * à son select de référence.
7675     *
7676     * Remarque : lors de la mise à jour le chosen se base sur le contenu du select,
7677     * si le placeholder a été défini lors de l'application du chosen et pas dans le
7678     * select, il va donc être supprimé lors de la mise à jour.
7679     * Pour garder le placeholder sur un select, il faut ajouter dans sa balise <select>
7680     * un attribut data-placeholder qui contiens le texte voulu.
7681     *
7682     * @param {string} field
7683     */
7684 softime 17036 function resetChosen(field) {
7685 softime 16749 $("#" + field).trigger("chosen:updated");
7686     }
7687    
7688 softime 15650 // ***
7689     // Ajout d'une deuxième scrollbar quand le tableau est dans un petit écran
7690     // ***
7691    
7692     $(function(){
7693     $(".wrapper1").scroll(function(){
7694     $(".wrapper2")
7695     .scrollLeft($(".wrapper1").scrollLeft());
7696     });
7697     $(".wrapper2").scroll(function(){
7698     $(".wrapper1")
7699     .scrollLeft($(".wrapper2").scrollLeft());
7700     });
7701     });
7702 softime 18436
7703     /**
7704     * Ajout un lien vers la documentation du module dans le formulaire de paramétrage d'un
7705     * module d'évènement.
7706     *
7707     * @return void
7708     */
7709     function show_module_doc_link(module_element) {
7710     let module_name = module_element.value;
7711     let object_name = '';
7712     let object_name_field = $('#object_name');
7713     if (object_name_field) object_name = object_name_field.val();
7714     let object_id = '';
7715     let object_id_field = $('#object_id');
7716     if (object_id_field) object_id = object_id_field.val();
7717     let module_doc_url = '../app/getModuleDoc.php?module='+module_name+'&object_name='+object_name+'&object_id='+object_id;
7718     let module_doc_element = $('#module-doc-link');
7719    
7720     // si aucun module n'est sélectionné et que l'élément module-doc-link existe
7721     if (! module_name && module_doc_element.length) {
7722     module_doc_element.remove();
7723     }
7724     // si un module est sélectionné
7725     else {
7726    
7727     // ajoute l'élément module-doc-link
7728     if (! module_doc_element.length) {
7729     let docLinkNode = document.createElement('p');
7730     docLinkNode.setAttribute('id', 'module-doc-link');
7731     module_element.parentNode.appendChild(docLinkNode);
7732     module_doc_element = $('#module-doc-link');
7733     }
7734    
7735     // fabrique le lien vers la documentation
7736     let doc_link_text = 'Pour plus d\'information <a '+
7737     'onclick="popupIt(\'evenement\', $(this).attr(\'data-href\'), 800, \'auto\');" '+
7738     'data-href="' + module_doc_url + '">consultez la documentation</a>';
7739     module_doc_element.html(doc_link_text);
7740     }
7741     }
7742    
7743     /**
7744     * Met à jour la liste des déclencheurs d'un module sur le formulaire de paramétrage.
7745     *
7746     * @return void
7747     */
7748     function update_module_declencheur_field(module_element) {
7749     let module_name = module_element.value;
7750     let object_name = '';
7751     let object_name_field = $('#object_name');
7752     if (object_name_field) object_name = object_name_field.val();
7753     let object_id = '';
7754     let object_id_field = $('#object_id');
7755     if (object_id_field) object_id = object_id_field.val();
7756     let module_declencheur_data_url = '../app/findModuleDeclencheurs.php?module='+module_name+'&object_name='+object_name+'&object_id='+object_id;
7757     let declencheur_field = $('#declencheur');
7758    
7759     if (! declencheur_field && typeof declencheur_field == "undefined"){
7760     return;
7761     }
7762     // Le select des déclencheurs est présent mais caché par défaut, avant la première sélection
7763     declencheur_field.parent().parent().removeClass('ui-tabs-hide')
7764     // vide le contenu du select dans tous les cas, sauf le premier élement qui doit être
7765     // le placeholder (avec une valeur vide)
7766     declencheur_field.find('option:gt(0)').remove();
7767    
7768     if (module_name) {
7769     $.ajax({
7770     type: 'GET',
7771     url: module_declencheur_data_url,
7772     dataType: 'json',
7773     success: function(hooks) {
7774     var ownProps = Object.keys( hooks ),
7775     i = ownProps.length;
7776     if (i == 0){
7777     declencheur_field.parent().parent().hide();
7778     } else {
7779     while (i--) {
7780     let option = $('<option></option>').attr("value", ownProps[i]).text(hooks[ownProps[i]]);
7781     declencheur_field.append(option);
7782     }
7783     declencheur_field.parent().parent().show();
7784     }
7785     }
7786     });
7787     }
7788     }
7789 softime 19307
7790     /**
7791     * SURCHARGE/OVERLOAD - lib/om-assets/js/layout_jqueryui_after.js
7792     *
7793     * FORMULAIRE
7794     *
7795     * La surcharge permet de désactiver le script jQuery.autosize sur tous les textarea
7796     *
7797     * @return void
7798     */
7799     function textarea_autoresize() {
7800 softime 19592 }

Properties

Name Value
svn:keywords "Id"

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26