showMessage($msg, "error"); // Arrêt du script die(); } // Ouverture du conteneur spécifique de la page echo "
\n"; /** * */ // On récupère l'identifiant de l'élection en cours. $election = $_SESSION['election']['election']; // Description du module echo "\n\n"; // Affichage de l'identifiant et de la date de l'élection echo "

"; echo ""; echo "Election ".$election." du ".$_SESSION['election']['date']; echo ""; echo "

\n"; // echo "

"; echo "La mairie doit envoyer ses résultats par messagerie au service"; echo " informatique de la Préfecture. Ce module permet de générer le fichier"; echo " texte structuré type CSV (les données sont séparées par des ;) à"; echo " transmettre."; echo "

\n"; /** * Récupération des informations globales concernant l'élection * et la commune. Ces informations sont utilisées dans la suite * du script que ce soit pour la vérification des paramètres * ou pour l'export lui-même. */ // REQUÊTE : On récupère les données de l'élection en cours $sql = "SELECT * FROM election WHERE election='".$election."'"; $res = $f->db->query($sql); $f->databaseError($res); $election_infos =& $res->fetchRow(DB_FETCHMODE_ASSOC); $res->free(); // REQUÊTE : On récupère le code préfecture de chaque candidat/liste $sql = "SELECT election_candidat.election_candidat_ordre, election_candidat.liste_prefecture FROM election_candidat WHERE election_candidat.election='".$election."' ORDER BY election_candidat_ordre"; $res = $f->db->query($sql); $f->databaseError($res); $candidats = array(); while ($row =& $res->fetchRow(DB_FETCHMODE_ASSOC)) { // Code de la liste ou du candidat (numéro de dépôt). [3 caractères] $candidats[$row['election_candidat_ordre']] = str_pad( $row['liste_prefecture'], 3, "0", STR_PAD_LEFT); } $res->free(); // Code du département. [2 caractères] $departement = str_pad($f->collectivite["departement"], 2, "0", STR_PAD_LEFT); // Code de la commune. [3 caractères] $commune = str_pad($f->collectivite["commune"], 3, "0", STR_PAD_LEFT); // Code de la circonscription législative. [2 caractères] $circonscription = str_pad($f->collectivite["circonscription"], 2, "0", STR_PAD_LEFT); // On initialise la variable $validation avec la valeur 0 // et si elle est passée en GET alors on la récupère $validation = 0; if (isset($_GET['validation'])) { $validation = $_GET['validation']; } /** * Génération du fichier CSV */ // Si la génération est demandée if ($validation == 1) { // N° de séquence. [1 à 8 caractères] // Correspond au numéro d'ordre du résultat dans le fichier. // Initialisation du numéro de séquence à la valeur 0. $sequence = 0; // Indicatif. [1 caractère] // I pour un résultat initial, R pour rectifié // On initialise la variable $indicatif avec la valeur "I" // et si elle est passée en POST alors on la récupère $indicatif = "I"; if (isset($_POST['indicatif'])) { $indicatif = $_POST['indicatif']; } // Ce libellé permet de réafficher la sélection à l'utilisateur dans le message $indicatif_libelle = "Transfert "; $indicatif_libelle .= ($indicatif == "I" ? "Initial" : "Rectifié"); // Année de l'élection. [4 caractères] $annee = substr($election_infos['election_date'], 0, 4); // N° du tour. [1 caractère] $tour = $election_infos['election_tour']; // Type de scrutin. [2 caractères] $scrutin = ""; switch ($election_infos['typeelection']) { case "CAN": $scrutin = "CN"; break; case "DEP": $scrutin = "DP"; break; case "LEG": $scrutin = "LG"; break; case "PRE": $scrutin = "PR"; break; case "REF": $scrutin = "RF"; break; case "REG": $scrutin = "RG2"; break; case "EUR": $scrutin = "ER"; break; case "MUN": $scrutin = "MN"; break; default: $scrutin = ""; } // Nombre de listes ou de candidats. [1 à 2 caractères] $nbcandidats = $election_infos['election_nbcandidat']; // if ($scrutin != "") { // Initialisation de la variable $export qui contient le contenu du // fichier à exporter. $export = ""; // => Enregistrement(s) pour la saisie des voix // TOUTES LES ELECTIONS // REQUÊTE : Liste des résultats par bureau de vote $sql = "SELECT RES.*, CANT.canton_prefecture FROM resultat as RES LEFT OUTER JOIN bureau as BUR ON RES.bureau=BUR.bureau LEFT OUTER JOIN canton as CANT ON BUR.canton = CANT.canton WHERE election='".$election."'"; $res = $f->db->query($sql); $f->databaseError($res); while ($row =& $res->fetchRow(DB_FETCHMODE_ASSOC)) { // On incrémente la séquence $sequence++; // N° de séquence $export .= $sequence.";"; // Type de scrutin. $export .= $scrutin.";"; // Année de l’élection. $export .= $annee.";"; // UNIQUEMENT LES MUNICIPALES if ($scrutin == "MN") { // Type d'enregistrement. [1 caractère] // V pour les enregistrements de type voix $export .= "V;"; } // N° du tour. $export .= $tour.";"; // Code du département. $export .= $departement.";"; // Code de la commune $export .= $commune.";"; // Code du bureau de vote. [Vide ou 4 caractères] $export .= str_pad($row['bureau'], 4, "0", STR_PAD_LEFT).";"; // TOUTES LES ELECTIONS SAUF LES MUNICIPALES if ($scrutin != "MN") { // Code du canton. [2 caractères] $export .= str_pad($row['canton_prefecture'], 2, "0", STR_PAD_LEFT).";"; // Code de la circonscription législative. [2 caractères] // XXX Une seule circonscription par commune ? La // circonscription ne doit pas être sur un bureau plutot ? $export .= $circonscription.";"; } // Indicatif $export .= $indicatif.";"; // Nombre d’Inscrits. [1 à 8 caractères] $export .= $row['inscrit'].";"; // Nombre d’Abstentions. [1 à 8 caractères] $export .= $row['inscrit']- $row['votant'].";"; // Nombre de Votants. [1 à 8 caractères] $export .= $row['votant'].";"; // Nombre de Votants d’après les feuilles d’émargements. [0 à 8 caractères] // XXX Ce chiffre est connu avec votants2 ? $export .= ";"; // Nombre de bulletins « blancs ». [1 à 8 caractères] $export .= $row['blanc'].";"; // Nombre de bulletins « nuls ». [0 à 8 caractères] $export .= $row['nul'].";"; // Nombre d'Exprimés. [1 à 8 caractères] $export .= $row['exprime'].";"; // Nombre de listes ou de candidats. $export .= $nbcandidats.";"; // Boucle sur les candidats foreach ($candidats as $key => $candidat) { // Code dépôt de la liste. $export .= $candidat.";"; // Nombre de voix de la liste ou du candidat. [1 à 8 caractères] $export .= $row['candidat'.$key].";"; } // Retrait du dernier ; $export = substr($export, 0, strlen($export)-1); // Saut de ligne $export .= "\n"; } $res->free(); // => Enregistrement(s) pour la saisie des sièges // UNIQUEMENT LES MUNICIPALES if ($scrutin == "MN") { // On incrémente la séquence $sequence++; // N° de séquence $export .= $sequence.";"; // Type de scrutin. $export .= $scrutin.";"; // Année de l’élection. $export .= $annee.";"; // Type d'enregistrement. [1 caractère] // S pour les enregistrements de type sièges $export .= "S;"; // N° du tour. $export .= $tour.";"; // Code du département. $export .= $departement.";"; // Code de la commune $export .= $commune.";"; // Nombre de listes ou de candidats. $export .= $nbcandidats.";"; // Boucle sur les candidats foreach ($candidats as $key => $candidat) { // Code de la liste ou du candidat (numéro de dépôt). $export .= $candidat.";"; // Nombre de sièges obtenus au conseil municipal. // [1 à 8 caractères] // Récupérer le nombre de sièges. $sql = "SELECT siege FROM election_candidat inner join liste on liste.candidat = election_candidat.candidat WHERE liste_prefecture = '".$candidat. "' and liste.election='".$election."'"; $siege = $f->db->getOne($sql); $f->databaseError($siege); $export .= $siege.";"; // Nombre de sièges obtenus au conseil de secteur. // [Vide ou 1 à 8 caractères] // On laisse vide car réservé à PLM (Paris-Lyon-Marseille). $export .= ";"; // Nombre de sièges obtenus au conseil communautaire (E.P.C.I.). // [Vide ou 1 à 8 caractères] // XXX Récupérer le nombre de sièges. $sql = "SELECT siege_com FROM election_candidat inner join liste on liste.candidat = election_candidat.candidat WHERE liste_prefecture = '".$candidat. "' and liste.election='".$election."'"; $siege_com = $f->db->getOne($sql); $f->databaseError($siege_com); $export .= $siege_com.";"; } /* foreach ($candidats as $key => $candidat) { // Code de la liste ou du candidat (numéro de dépôt). $export .= $candidat.";"; // Nombre de sièges obtenus au conseil municipal. // [1 à 8 caractères] // XXX Récupérer le nombre de sièges. $export .= "0;"; // Nombre de sièges obtenus au conseil de secteur. // [Vide ou 1 à 8 caractères] // On laisse vide car réservé à PLM (Paris-Lyon-Marseille). $export .= ";"; // Nombre de sièges obtenus au conseil communautaire (E.P.C.I.). // [Vide ou 1 à 8 caractères] // XXX Récupérer le nombre de sièges. $export .= "0;"; } */ // Retrait du dernier ; $export = substr($export, 0, strlen($export)-1); // Saut de ligne $export .= "\n"; } // Ecriture du fichier CSV dans le dossier tmp/ $fichier = "../tmp/".date("Ymd-His")."-" .$election."-".$departement.$commune.".csv"; $error = false; @$inf = fopen($fichier, "w"); if ($inf == false) { $error = true; } else { @$ret = fwrite($inf, $export); if ($ret == false) { $error = true; } else { @$ret = fclose($inf); if ($ret == false) { $error = true; } } } // Affichage du lien de téléchargement ou d'un message d'erreur echo "\n\n"; if ($error == false) { echo "

"; $msg = "Le fichier de '".$indicatif_libelle."'"; $msg .= " ".$fichier.""; $msg .= " a été généré et sauvegardé. "; echo "

\n"; $f->showMessage($msg, "valid"); } else { // Message $msg = "Une erreur est survenue lors de l'écriture du fichier sur"; $msg .= " le serveur. Contactez votre administrateur."; $f->showMessage($msg, "error"); } /* // Affichage du tableau de vérification // XXX Il faut baliser les vérifications et les faire apparaître dans // le message. En l'état ce n'est pas très lisible. // Attention les compteurs n'existent plus. echo "\n\n"; echo "\n"; echo ""; echo ""; echo "\n"; // Vérification n°1 $verif1 = $votant -($exprime + $nul); if ($verif1 != 0) { echo ""; echo ""; echo "\n"; } echo ""; echo ""; echo ""; echo "\n"; // Vérification n°2 $verif2 = $exprime - $totalcandidat; if ($verif2 != 0) { echo ""; echo ""; echo "\n"; } echo ""; echo ""; echo ""; echo "\n"; echo "
verification:
*** ATTENTION ERREUR votant/exprime+nul ***
verification : votant -(exprime + nul) = 0 ".$verif1."
*** ATTENTION ERREUR exprime/totalcandidat ***
verification : exprime - totalcandidat = 0 ".$verif2."
\n"; */ } else { // Message $msg = "L'élection en cours n'est pas compatible avec cet export."; $f->showMessage($msg, "error"); } } /** * */ // Sélection du fichier à générer (Initial ou Rectifié) echo "\n\n"; echo "
\n"; echo "Sélection du fichier à générer
\n"; // echo "\n"; // echo "\n"; // echo "

\n"; // echo "\n"; // echo "\n"; // echo "
\n"; /** * */ // Vérification des paramètres echo "\n\n"; echo "
\n"; echo "Vérification des paramètres\n"; // echo "

"; echo "Les paramètres suivant doivent être renseignés."; echo "Si ils sont notés comme VIDE, il est nécessaire d'aller les paramétrer."; echo "

"; // Table collectivité echo "Paramétrage -> collectivité"; echo "\n"; // Table canton echo "Paramétrage -> Canton"; echo "\n"; // echo "
"; // Table election_candidat echo "Configuration -> Election -> config_candidat"; echo "\n"; // echo "
\n"; /** * */ // Notices de la Préfecture echo "\n\n"; echo "
\n"; echo "Notices de la Préfecture\n"; // $notices = array(); // $notices[] = array( "href" => "../doc/Format_saisie_AUTO-ER_160414.pdf", "title" => "Note Européennes", ); // foreach ($notices as $key => $value) { echo ""; echo "\"-\" "; echo $value["title"]; echo ""; echo "
\n"; } // echo "
\n"; /** * */ // Fermeture du conteneur spécifique de la page echo "\n
\n"; ?>