diff --git a/oedb/resources/demo/static/traffic.js b/oedb/resources/demo/static/traffic.js index 4aa24d9..cbc9f35 100644 --- a/oedb/resources/demo/static/traffic.js +++ b/oedb/resources/demo/static/traffic.js @@ -608,60 +608,213 @@ function validateForm() { function fillForm(issueType) { currentIssueType = issueType; + console.log('🎯 Remplissage formulaire pour type:', issueType); + // Get the form elements const whatInput = document.getElementById('what'); const labelInput = document.getElementById('label'); const descriptionInput = document.getElementById('description'); + const typeSelect = document.getElementById('type'); + + if (!whatInput || !labelInput || !descriptionInput) { + console.error('❌ Éléments de formulaire non trouvés'); + return; + } // Set default values based on the issue type switch (issueType) { + // === ROAD TAB === case 'pothole': - whatInput.value = 'road.hazard.pothole'; + whatInput.value = 'traffic.obstacle'; labelInput.value = 'Nid de poule'; descriptionInput.value = 'Nid de poule sur la chaussée'; + typeSelect.value = 'unscheduled'; break; case 'obstacle': - whatInput.value = 'road.hazard.obstacle'; + whatInput.value = 'traffic.obstacle'; labelInput.value = 'Obstacle sur la route'; descriptionInput.value = 'Obstacle sur la chaussée'; + typeSelect.value = 'unscheduled'; break; case 'vehicle': - whatInput.value = 'road.hazard.vehicle'; - labelInput.value = 'Véhicule sur le bas côté'; + whatInput.value = 'traffic.obstacle'; + labelInput.value = 'Véhicule en panne'; descriptionInput.value = 'Véhicule arrêté sur le bas côté de la route'; + typeSelect.value = 'unscheduled'; break; case 'danger': - whatInput.value = 'road.hazard.danger'; + whatInput.value = 'traffic.incident'; labelInput.value = 'Danger sur la route'; descriptionInput.value = 'Situation dangereuse sur la route'; + typeSelect.value = 'unscheduled'; break; case 'accident': - whatInput.value = 'road.accident'; + whatInput.value = 'traffic.accident'; labelInput.value = 'Accident de la route'; descriptionInput.value = 'Accident de la circulation'; + typeSelect.value = 'unscheduled'; break; case 'flooded_road': - whatInput.value = 'road.hazard.flood'; + whatInput.value = 'traffic.obstacle'; labelInput.value = 'Route inondée'; - descriptionInput.value = 'Route inondée, circulation difficile'; + descriptionInput.value = 'Route inondée, circulation difficile ou impossible'; + typeSelect.value = 'unscheduled'; break; case 'roadwork': - whatInput.value = 'road.works'; + whatInput.value = 'traffic.roadwork'; labelInput.value = 'Travaux routiers'; descriptionInput.value = 'Travaux en cours sur la chaussée'; + typeSelect.value = 'scheduled'; break; case 'traffic_jam': - whatInput.value = 'road.traffic.jam'; + whatInput.value = 'traffic.partially_closed'; labelInput.value = 'Embouteillage'; descriptionInput.value = 'Circulation dense, embouteillage'; + typeSelect.value = 'unscheduled'; break; - // Add more cases for other issue types + + // === RAIL TAB === + case 'rail_delay': + whatInput.value = 'transport.rail.delay'; + labelInput.value = 'Retard de train'; + descriptionInput.value = 'Retard important sur la ligne ferroviaire'; + typeSelect.value = 'unscheduled'; + break; + case 'rail_cancellation': + whatInput.value = 'transport.rail.cancellation'; + labelInput.value = 'Train annulé'; + descriptionInput.value = 'Annulation de service ferroviaire'; + typeSelect.value = 'unscheduled'; + break; + case 'rail_works': + whatInput.value = 'transport.rail.works'; + labelInput.value = 'Travaux ferroviaires'; + descriptionInput.value = 'Travaux de maintenance sur la voie ferrée'; + typeSelect.value = 'scheduled'; + break; + case 'rail_incident': + whatInput.value = 'transport.rail.incident'; + labelInput.value = 'Incident ferroviaire'; + descriptionInput.value = 'Incident technique sur la ligne'; + typeSelect.value = 'unscheduled'; + break; + + // === WEATHER TAB === + case 'weather_storm': + whatInput.value = 'weather.storm'; + labelInput.value = 'Orage'; + descriptionInput.value = 'Conditions météorologiques orageuses'; + typeSelect.value = 'forecast'; + break; + case 'weather_flood': + whatInput.value = 'weather.flood'; + labelInput.value = 'Inondation'; + descriptionInput.value = 'Inondation affectant la circulation'; + typeSelect.value = 'unscheduled'; + break; + case 'weather_snow': + whatInput.value = 'weather.snow'; + labelInput.value = 'Chutes de neige'; + descriptionInput.value = 'Conditions de neige affectant la circulation'; + typeSelect.value = 'forecast'; + break; + case 'weather_fog': + whatInput.value = 'weather.fog'; + labelInput.value = 'Brouillard dense'; + descriptionInput.value = 'Brouillard réduisant la visibilité'; + typeSelect.value = 'forecast'; + break; + case 'weather_heat': + whatInput.value = 'weather.heat'; + labelInput.value = 'Canicule'; + descriptionInput.value = 'Températures extrêmes, risques de déformation de chaussée'; + typeSelect.value = 'forecast'; + break; + + // === EMERGENCY TAB === + case 'emergency_fire': + whatInput.value = 'emergency.fire'; + labelInput.value = 'Incendie'; + descriptionInput.value = 'Incendie nécessitant une intervention des secours'; + typeSelect.value = 'unscheduled'; + break; + case 'emergency_medical': + whatInput.value = 'emergency.medical'; + labelInput.value = 'Urgence médicale'; + descriptionInput.value = 'Intervention médicale d\'urgence'; + typeSelect.value = 'unscheduled'; + break; + case 'emergency_police': + whatInput.value = 'emergency.police'; + labelInput.value = 'Intervention police'; + descriptionInput.value = 'Intervention des forces de l\'ordre'; + typeSelect.value = 'unscheduled'; + break; + case 'emergency_evacuation': + whatInput.value = 'emergency.evacuation'; + labelInput.value = 'Évacuation'; + descriptionInput.value = 'Évacuation de zone pour raisons de sécurité'; + typeSelect.value = 'unscheduled'; + break; + + // === CIVIC TAB === + case 'civic_bike_lane': + whatInput.value = 'civic.infrastructure.bike'; + labelInput.value = 'Problème piste cyclable'; + descriptionInput.value = 'Dégradation ou obstacle sur piste cyclable'; + typeSelect.value = 'unscheduled'; + break; + case 'civic_sidewalk': + whatInput.value = 'civic.infrastructure.pedestrian'; + labelInput.value = 'Problème trottoir'; + descriptionInput.value = 'Dégradation ou obstacle sur trottoir'; + typeSelect.value = 'unscheduled'; + break; + case 'civic_lighting': + whatInput.value = 'civic.infrastructure.lighting'; + labelInput.value = 'Éclairage défectueux'; + descriptionInput.value = 'Éclairage public en panne ou défaillant'; + typeSelect.value = 'unscheduled'; + break; + case 'civic_garbage': + whatInput.value = 'civic.sanitation.garbage'; + labelInput.value = 'Problème de déchets'; + descriptionInput.value = 'Déchets non collectés ou dépôt sauvage'; + typeSelect.value = 'unscheduled'; + break; + + // === DEFAULT CASE === + default: + console.warn('⚠️ Type d\'événement non reconnu:', issueType); + whatInput.value = 'traffic.incident'; + labelInput.value = 'Incident de circulation'; + descriptionInput.value = 'Incident affectant la circulation'; + typeSelect.value = 'unscheduled'; } + console.log('✅ Formulaire rempli:', { + what: whatInput.value, + label: labelInput.value, + type: typeSelect.value + }); + + // Trigger validation after form is filled + validateForm(); + // Scroll to the form - const formElement = document.getElementById('trafficForm'); + const formElement = document.getElementById('reportForm'); if (formElement) { formElement.scrollIntoView({behavior: 'smooth'}); + + // Focus on first empty field or description for additional details + setTimeout(() => { + const descTextarea = document.getElementById('description'); + if (descTextarea) { + descTextarea.focus(); + // Position cursor at end of existing text + descTextarea.setSelectionRange(descTextarea.value.length, descTextarea.value.length); + } + }, 500); } }