source: trunk/client/modules/Elezioni/consiglieri.php@ 84

Last change on this file since 84 was 84, checked in by roby, 14 years ago

client - calcolo d'hondt aggiunta condizione per voto di lista e premio di maggioranza fisso nel maggioritario
admin - permesso l'inserimento dei voti di lista per il maggioritario
Temporaneamente gestite con variabili inserite nel config.php
$vismf=1; #abilita l'inserimento di maschi e femmine per tutti gli orari di rilevazione
$votolista=1; #per i comuni a sistema maggioritario abilita il voto di lista
$fisso=1; #alla lista di maggioranza va un numero fisso di consiglieri indipendente dai voti
$sincons=1; #il sindaco eletto toglie un seggio da quelli attribuiti alla maggioranza

File size: 34.5 KB
Line 
1<?php
2/************************************************************************/
3/* Eleonline - Raccolta e diffusione dei dati elettorali */
4/* by Roberto Gigli & Luciano Apolito */
5/* http://www.eleonline.it */
6/* info@eleonline.it luciano@aniene.net rgigli@libero.it */
7/************************************************************************/
8/* Modulo previsione seggi */
9/* Amministrazione */
10/************************************************************************/
11if (!defined('MODULE_FILE')) {
12 die ("You can't access this file directly...");
13}
14# controllo
15if ($hondt<=0){ Header("Location: index.php");
16 die();
17}
18
19$param=strtolower($_SERVER['REQUEST_METHOD']) == 'get' ? $_GET : $_POST;
20
21if (isset($param['gruppo'])) $gruppo=intval($param['gruppo']); else $gruppo='';
22if (isset($param['numgruppo'])) $numgruppo=intval($param['numgruppo']); else $numgruppo='';
23if (isset($param['listecol'])) $listecol=intval($param['listecol']); else $listecol=0;
24
25
26$res = mysql_query("SELECT id_conf FROM ".$prefix."_ele_cons_comune where id_cons_gen='$id_cons_gen' and id_comune='$id_comune'" , $dbi);
27list($id_conf) = mysql_fetch_row($res);
28//test prima di modificare il db aggiungendo id_conf
29//echo "$id_conf=2";
30//
31
32$res = mysql_query("SELECT limite,consin,infpremio,supsbarramento,suppremio,listinfsbar,listinfconta,listsupconta,supminpremio,infminpremio from ".$prefix."_ele_conf where id_conf='$id_conf'",$dbi);
33list($limite,$consin,$infpremio,$supsbarramento,$suppremio,$listinfsbar,$listinfconta,$listsupconta,$supminpremio,$infminpremio) = mysql_fetch_row($res);
34
35
36echo "<table><tr><td align=\"center\">"._PROIEZCONS."</td></tr></table>";
37
38
39function consiglio(){
40global $param,$id_cons_gen, $dbi, $prefix, $id_comune, $gruppo, $numgruppo, $listecol, $id_comune, $limite;
41//$limite=3; //fascia di separazione del maggioritario (15.000 abitanti)
42$collegate= array();
43$collperd= array();
44$x=1;
45$primoturno=0;
46while (isset($param['num_lista'.$x])) {
47 if ($param['num_lista'.$x]==$gruppo) array_push($collegate,$_SESSION['num_lista'.$x]);
48 elseif ($param['num_lista'.$x]!=0) array_push($collperd,$_SESSION['num_lista'.$x]);
49 $x++;
50}
51$res = mysql_query("SELECT t1.tipo_cons,t2.id_cons FROM ".$prefix."_ele_consultazione as t1, ".$prefix."_ele_cons_comune as t2 where t1.id_cons_gen=t2.id_cons_gen and t2.id_cons_gen='$id_cons_gen' and t2.id_comune='$id_comune'" , $dbi);
52if (mysql_num_rows($res)){
53 list($tipo_cons,$id_cons) = mysql_fetch_row($res);
54 $result = mysql_query("select fascia, capoluogo from ".$prefix."_ele_comuni where id_comune='$id_comune'", $dbi);
55 list($fascia,$capoluogo) = mysql_fetch_row($result);
56/*switch ($fascia) {
57 case 1: $numcons=12; break;
58 case 2: $numcons=16; break;
59 case 3: $numcons=20; break;
60 case 4: $numcons=20; break;
61 case 5: $numcons=30; break;
62 case 6: $numcons=40; break;
63 case 7: $numcons=46; break;
64 case 8: $numcons=50; break;
65 case 9: $numcons=60; break;
66} */
67 $result = mysql_query("SELECT seggi from ".$prefix."_ele_fasce where id_fascia=$fascia",$dbi);
68 list($numcons) = mysql_fetch_row($result);
69
70$res_val= mysql_query("SELECT id_cand, sum(voti) from ".$prefix."_ele_voti_candidati where id_cons='$id_cons' group by id_cand",$dbi);
71$num_cons= mysql_num_rows($res_val);
72if ($num_cons<$numcons){
73 echo "Il numero di candidati al consiglio inseriti con preferenza ($num_cons) e' inferiore al numero di seggi previsti ($numcons). Non e' possibile procedere con il calcolo";
74 include("footer.php");
75 die();
76}
77 if (!$gruppo){
78 $res_val = mysql_query("SELECT sum(validi) from ".$prefix."_ele_sezioni where id_cons='$id_cons'",$dbi);
79 list($validi) = mysql_fetch_row($res_val);
80 $res_lis = mysql_query("SELECT t1.num_gruppo,sum(t2.voti) as voti from ".$prefix."_ele_gruppo as t1, ".$prefix."_ele_voti_gruppo as t2 where t1.id_cons='$id_cons' and t1.id_gruppo=t2.id_gruppo group by t1.num_gruppo order by voti desc limit 0,2",$dbi);
81 $test=0;$flag=0;
82 while (list($num_gruppo,$voti)= mysql_fetch_row($res_lis)){
83 if ($voti>($validi/2)) {$gruppo=$num_gruppo;$primoturno=1;}
84 if ($voti==$test) $flag=1; else $test=$voti;
85 }
86 }
87 if ($fascia<=$limite){
88 $res_lis = mysql_query("SELECT t1.num_gruppo,sum(t2.voti) as voti from ".$prefix."_ele_gruppo as t1, ".$prefix."_ele_voti_gruppo as t2 where t1.id_cons='$id_cons' and t1.id_gruppo=t2.id_gruppo group by t1.num_gruppo order by voti desc limit 0,2",$dbi);
89 list($num_gruppo1,$voti1)= mysql_fetch_row($res_lis);
90 list($num_gruppo2,$voti2)= mysql_fetch_row($res_lis);
91 if ($voti1>$voti2)
92 $numgruppo=$num_gruppo1;
93 }
94 if($fascia<6 and $capoluogo) $fascia=6;
95 if ($fascia<=$limite and $numgruppo) consmin($fascia,$numgruppo);
96 elseif ($gruppo>0) conssup($fascia,$gruppo,$collegate,$collperd,$primoturno);
97 elseif ($numgruppo>0){
98 $res_lis = mysql_query("SELECT t1.id_lista,t1.num_lista,t1.descrizione,t1.id_gruppo from ".$prefix."_ele_lista as t1, ".$prefix."_ele_gruppo as t2 where t1.id_cons='$id_cons' and t1.id_gruppo=t2.id_gruppo and t2.num_gruppo not in (".$_SESSION['ballo1'].",".$_SESSION['ballo2'].")",$dbi);
99 $yy=mysql_num_rows($res_lis);
100 $res_voti = mysql_query("select sum(voti) from ".$prefix."_ele_voti_lista where id_cons='$id_cons'",$dbi);
101 list($validilista) = mysql_fetch_row($res_voti);
102 if ($yy){
103while(list($id_lista,$num_lista,$descr,$pgrup) = mysql_fetch_row($res_lis)) {
104 $res_voti = mysql_query("select sum(voti) from ".$prefix."_ele_voti_lista where id_lista='$id_lista'",$dbi);
105 list($votilista) = mysql_fetch_row($res_voti);
106 if(!isset($voti[$pgrup])) $voti[$pgrup]=0;
107 $voti[$pgrup]+=$votilista;
108}
109 foreach ($voti as $key=>$val){if($val<($validilista*3/100)) unset($voti[$key]);} ##################################################
110 mysql_data_seek($res_lis,0);
111 echo "<br/>";
112 echo "<form id=\"gruppo\" action=\"modules.php\">";
113 echo "<table cellspacing=\"0\" cellpadding=\"2\" border=\"1\"><tr class=\"bggray\"><td colspan=\"4\">"._COLLEGAMENTI."</td></tr><tr class=\"bggray\"><td>";
114 echo "<input type=\"hidden\" name=\"op\" value=\"consiglieri\"/>";
115 echo "<input type=\"hidden\" name=\"id_cons_gen\" value=\"$id_cons_gen\"/>";
116 echo "<input type=\"hidden\" name=\"id_comune\" value=\"$id_comune\"/></td>";
117
118echo "<td><b>".$_SESSION['grp1']."</b></td>";
119 echo "<td><b>".$_SESSION['grp2']."</b></td>";
120 echo "<td><b>"._NONCOLLE."</b></td></tr>";
121
122 $z=1;
123 while(list($id_lista,$num_lista,$descr,$pgrup) = mysql_fetch_row($res_lis)) {
124 if(!isset($voti[$pgrup])) continue;
125 $x=$_SESSION['ballo1'];
126 echo "<tr><td>$descr</td><td><input type=\"radio\" name=\"num_lista$z\" value=\"$x\"/></td>";
127 $x=$_SESSION['ballo2'];
128 $_SESSION['num_lista'.$z]=$num_lista;
129 echo "<td><input type=\"radio\" name=\"num_lista$z\" value=\"$x\"/></td>";
130 echo "<td><input type=\"radio\" name=\"num_lista$z\" value=\"0\" checked=\"checked\"/></td></tr>";
131 $z++;
132 }
133
134 echo "<tr><td colspan=\"4\"><input type=\"hidden\" name=\"listecol\" value=\"$x\"/><input type=\"hidden\" name=\"gruppo\" value=\"$numgruppo\"/>";
135 echo "<input type=\"submit\" name=\"invia\" value=\""._OK."\"/></td></tr></table></form>";
136 }else conssup($fascia,$numgruppo,$collegate,$collperd,$primoturno);
137 }else {
138 echo "<br/>";
139 echo "<form id=\"numgruppo\" action=\"modules.php\">";
140 echo "<table><tr class=\"bggray\"><td>"._SCELTASIN.":</td><td align=\"left\">";
141 echo "<input type=\"hidden\" name=\"op\" value=\"consiglieri\"/>";
142 echo "<input type=\"hidden\" name=\"id_cons_gen\" value=\"$id_cons_gen\"/>";
143 echo "<input type=\"hidden\" name=\"id_comune\" value=\"$id_comune\"/>";
144 $res = mysql_query("SELECT t1.id_gruppo,t1.num_gruppo,t1.descrizione, sum(t2.voti) as pref FROM ".$prefix."_ele_gruppo as t1, ".$prefix."_ele_voti_gruppo as t2 where t1.id_gruppo=t2.id_gruppo and t1.id_cons='$id_cons' group by t1.num_gruppo,t1.descrizione order by pref desc limit 0,2", $dbi);
145 while(list($id_gruppo,$num_gruppo, $descr_gruppo,$pref) = mysql_fetch_row($res)) {
146 if (!isset($_SESSION['ballo1'])) {
147 $_SESSION['ballo1']=$num_gruppo;
148 $_SESSION['grp1']=$descr_gruppo;
149 $_SESSION['idgrp1']=$id_gruppo;
150 }else{
151 $_SESSION['ballo2']=$num_gruppo;
152 $_SESSION['grp2']=$descr_gruppo;
153 $_SESSION['idgrp2']=$id_gruppo;
154 }
155 echo "<input type=\"radio\" name=\"numgruppo\" value=\"$num_gruppo\"/>$descr_gruppo<br/>";
156 }
157 echo "</td>";
158 echo "<td><input type=\"submit\" name=\"invia\" value=\""._OK."\"/></td></tr></table></form>";
159
160 }
161 }
162}
163
164function consmin($fascia,$grp) {
165global $id_cons, $prefix,$dbi,$num_candlst,$quozienti,$PNE,$CSEC,$consin;
166global $infpremio,$fisso,$sincons,$votolista;
167if (!isset($fisso)) $fisso=0; #se fisso=1 il premio di maggioranza Ú fisso
168if (!isset($votolista)) $fisso=0; #se votolista=1 c'e' voto di lista
169if (!isset($sincons)) $sincons=0; #se sincons=1 il sindaco eletto occupa un posto di consigliere
170$PNE=_PRIMONON;
171$CSEC=_SINDCONS;
172$sorteggio=0;
173$num_candlst=array();
174#funzione di calcolo per comuni fino a 15.000 abitanti (piᅵ esattamente fino al valore di $limite)
175#carica il numero di consiglieri
176 $result = mysql_query("SELECT seggi from ".$prefix."_ele_fasce where id_fascia=$fascia",$dbi);
177 list($numcons) = mysql_fetch_row($result);
178if ($sincons) $numcons--;
179#$numcons--;
180$consel=array();
181$conselcsne=array();
182$conselmin=array();
183//$consel[]=array("Lista","Voti","Seggi","Nominativo","Cifra Elettorale","Quoziente");
184$consel[]=array(_LISTA,_VOTI,_SEGGI,_CANDIDATO,_CIFRAELE,_QUOZIENTI);
185#carica numero di liste e voti, i voti sono quelli del gruppo se non c'e' voto di lista
186if($votolista=='0')
187 $res_val = mysql_query("SELECT sum(validi) from ".$prefix."_ele_sezioni where id_cons='$id_cons'",$dbi);
188else
189 $res_val = mysql_query("SELECT sum(voti) from ".$prefix."_ele_voti_lista where id_cons='$id_cons'",$dbi);
190list($validi) = mysql_fetch_row($res_val);
191
192#se votolista==1, Ú abilitato il voto di lista ed Ú quello su cui si calcola l'assegnazione dei seggi
193/*
194$res_per = mysql_query("SELECT t1.descrizione,t1.num_gruppo,t2.id_lista,t2.num_lista,t2.descrizione,sum(t3.voti) as voti from ".$prefix."_ele_gruppo as t1, ".$prefix."_ele_lista as t2, ".$prefix."_ele_voti_gruppo as t3 where t1.id_cons='$id_cons' and t1.id_gruppo=t2.id_gruppo and t1.id_gruppo=t3.id_gruppo group by t1.descrizione,t1.num_gruppo,t2.num_lista,t2.descrizione order by voti desc ",$dbi); */
195if ($fisso==1){
196 #seleziona il sindaco
197$res_per = mysql_query("SELECT t1.descrizione,t1.num_gruppo,t2.id_lista,t2.num_lista,t2.descrizione,sum(t3.voti) as voti from ".$prefix."_ele_gruppo as t1, ".$prefix."_ele_lista as t2, ".$prefix."_ele_voti_gruppo as t3 where t1.id_cons='$id_cons' and t1.id_gruppo=t2.id_gruppo and t1.id_gruppo=t3.id_gruppo group by t1.descrizione, t1.num_gruppo,t2.num_lista,t2.descrizione order by voti desc limit 0,1",$dbi);
198 list($descr,$num_gruppo,$id_lista1,$num_lista,$descr_lista,$voti)= mysql_fetch_row($res_per);
199$res_per = mysql_query("SELECT t2.id_lista, sum(t2.voti) as voti from ".$prefix."_ele_voti_lista as t2 where t2.id_cons='$id_cons' and t2.id_lista!='$id_lista1' group by t2.id_lista order by voti desc limit 0,1",$dbi);
200 list($id_lista2,$voti)= mysql_fetch_row($res_per);
201 #e la lista di minoranza
202 $ordine= $id_lista1>$id_lista2 ? "desc":"";
203$res_per = mysql_query("SELECT t1.descrizione,t1.num_gruppo,t2.id_lista,t2.num_lista,t2.descrizione,sum(t3.voti) as voti from ".$prefix."_ele_gruppo as t1, ".$prefix."_ele_lista as t2, ".$prefix."_ele_voti_lista as t3 where (t2.id_lista='$id_lista1' or t2.id_lista='$id_lista2') and t1.id_gruppo=t2.id_gruppo and t2.id_lista=t3.id_lista group by t1.descrizione,t1.num_gruppo,t2.num_lista,t2.descrizione order by t2.id_lista $ordine",$dbi);
204 }else{
205$res_per = mysql_query("SELECT t1.descrizione,t1.num_gruppo,t2.id_lista,t2.num_lista,t2.descrizione,sum(t3.voti) as voti from ".$prefix."_ele_gruppo as t1, ".$prefix."_ele_lista as t2, ".$prefix."_ele_voti_gruppo as t3 where t1.id_cons='$id_cons' and t1.id_gruppo=t2.id_gruppo and t1.id_gruppo=t3.id_gruppo group by t1.descrizione,t1.num_gruppo,t2.num_lista,t2.descrizione order by voti desc",$dbi);
206}
207$groups=array();
208$seggimag=array();
209$premio=0;
210$x=0;
211#carica l'array dei gruppi e della cifra di gruppo
212while (list($descr,$num_gruppo,$id_lista,$num_lista,$descr_lista,$voti)= mysql_fetch_row($res_per)){
213 $desgruppi[$num_gruppo]=$descr;
214 $desliste[$num_lista]=$num_lista.") ".$descr_lista;
215 $idlst[$num_lista]=$id_lista;
216 $listagruppo[$num_lista]=$num_gruppo;
217 $lists[$num_lista]=$voti;
218 if ($grp){
219 if ($grp!=$num_gruppo) {$groups[($num_gruppo)]=$voti;$listemin[$num_lista]=$voti;}
220 else {$gruppo[($num_gruppo)]=$voti;$listemag[$num_lista]=$voti;$lisvin=$num_lista;}
221 }else{
222 if ($x) {$groups[($num_gruppo)]=$voti;$listemin[$num_lista]=$voti;}
223 else {$gruppo[($num_gruppo)]=$voti;$listemag[$num_lista]=$voti;$lisvin=$num_lista;}
224 }
225 $x++;
226 }#controllo del premio di maggioranza
227// if ($gruppo[$listagruppo[$lisvin]]>($validi*2/3))
228 if ($gruppo[$listagruppo[$lisvin]]>($validi*$infpremio/100) and $fisso==0)
229 {
230 foreach ($groups as $key=>$val) $gruppo[$key]=$val;
231 $groups=$gruppo;
232 $gruppo=array();
233 $num_cons=$numcons;
234 } else {
235// $seggimag[$lisvin]=number_format($numcons*2/3);
236// $num_cons=number_format($numcons/3);
237 $seggimag[$lisvin]=number_format($numcons*$infpremio/100);
238 $num_cons=number_format($numcons-$seggimag[$lisvin]);
239 }
240 foreach ($listagruppo as $lista=>$val){
241 $id_lista=$idlst[$lista];
242 $res_can = mysql_query("SELECT concat(substring(concat('0',t1.num_cand),-2),') ',t1.cognome,' ',substring(t1.nome from 1 for 1),'.') as descr,sum(t2.voti) as voti from ".$prefix."_ele_candidati as t1, ".$prefix."_ele_voti_candidati as t2 where t1.id_lista='$id_lista' and t1.id_cand=t2.id_cand GROUP BY descr order by voti desc,t1.num_cand",$dbi);
243
244 $num_candlst[$lista]=mysql_num_rows($res_can);
245 $pos=0;
246 while(list($cand,$pre)=mysql_fetch_row($res_can)){
247 if(!isset($lists[$lista])) $lists[$lista]=0;
248 $cifra[$lista][$pos]=$lists[$lista]+$pre;
249 $arvin[$lista][$pos++]=$cand;
250 }
251 }
252 if ($num_candlst[$lisvin]<$seggimag[$lisvin]) {
253 $num_cons+=$seggimag[$lisvin]-$num_candlst[$lisvin];
254 $seggimag[$lisvin]=$num_candlst[$lisvin];
255 }
256 if (isset($gruppo[$listagruppo[$lisvin]])) $seggimag=calcoloseggi($listemag,$seggimag[$lisvin],1);
257 if(isset($mex))
258 echo "$mex";
259 foreach ($seggimag as $lista=>$val)
260 for ($z=0;$z<$val;$z++){
261 if ($z) $consel[]=array("","","",$arvin[$lista][($z)],$cifra[$lista][($z)],number_format($quozienti[$lista][$z],2));
262 else $consel[]=array($desliste[$lista],$lists[$lista],$val,$arvin[$lista][($z)],$cifra[$lista][($z)],number_format($quozienti[$lista][$z],2));
263 }
264 if($arvin[$lista][($z)]) $consel[]=array($desliste[$lista],"$PNE","",$arvin[$lista][($z)],$cifra[$lista][($z)],number_format($quozienti[$lista][$z],2));
265 $seggimin=array();
266 $seggimin=calcoloseggi($listemin,$num_cons,1);
267 foreach ($seggimin as $lista=>$val){
268 if ($consin and $val>0){
269 $conselcsne[]=array("$CSEC","","",$desgruppi[$listagruppo[$lista]],"","");
270 $val--;
271 }
272 for ($z=0;$z<$val;$z++){
273 if ($z) $conselmin[]=array("","","",$arvin[$lista][($z)],$cifra[$lista][($z)],number_format($quozienti[$lista][$z],2));
274 else $conselmin[]=array($desliste[$lista],$lists[$lista],$val,$arvin[$lista][($z)],$cifra[$lista][($z)],number_format($quozienti[$lista][$z],2));
275 }
276 if($arvin[$lista][($z)]) $conselmin[]=array($desliste[$lista],"$PNE","",$arvin[$lista][($z)],$cifra[$lista][($z)],number_format($quozienti[$lista][$z],2));
277 }
278 foreach($conselcsne as $key=>$val)
279 {
280 $consel[]=array($val[0],$val[3]);
281 }
282 foreach($conselmin as $key=>$val)
283 {
284 $consel[]=array($val[0],$val[1],$val[2],$val[3],$val[4],$val[5]);
285 }
286
287
288
289 echo "<table summary=\"Tabella dei consiglieri eletti\" class=\"table-docs\" cellspacing=\"0\" cellpadding=\"2\" border=\"1\" rules=\"all\">";
290 echo "<tr class=\"bggray\"><td scope=\"row\">";
291 echo _SINDACO.": ".$desgruppi[$listagruppo[$lisvin]]."</td></tr></table>";
292 stampalista($consel);
293
294
295}
296
297
298
299function calcoloseggi($gruppi,$num_cons,$flag){
300global $ultimo,$mex,$sorteggio,$quozienti,$num_cand,$num_candlst;
301
302#carica le preferenze
303$pref = array();
304$ultimo=0;
305$mex='';
306$sorteggio=0;
307$eletti = array();
308$ele = array();
309$quozienti = array();
310$num_quoz= $num_cons;
311#inizializza l'array degli eletti
312foreach ($gruppi as $x=>$val){
313 $eletti[$x]=0;
314 }
315#carica gli array dei quozienti
316foreach($gruppi as $y=>$tmp){
317 if($flag) $num_quoz= $num_cons<$num_candlst[$y] ? $num_cons:$num_candlst[$y];
318 if(!isset($ele[$y][0])) $ele[$y][0]=0;
319 for ($x=0;$x<=$num_quoz;$x++){
320 $ele[$y][$x]= $tmp/($x+1);
321 $quozienti[$y][$x]= $tmp/($x+1);
322 }
323}
324#estrae i quozienti piu' alti
325for ($y=0;$y<$num_cons;$y++){
326 $temp=0;
327 $cand=0;
328 if(! isset($pref['0'])) $pref['0']='';
329 if(! isset($pref['1'])) $pref['1']='';
330 foreach($gruppi as $x=>$tmp){
331 if(!isset($ele[$x][0])) $ele[$x][0]=0;
332 if(!isset($pref[$x])) $pref[$x]=0;
333 if ($ele[$x][0]==$temp and $pref[$x]==$pref[$cand] and ($y+1)==$num_cons) {$sorteggio=1; $mex="Per attribuire l'ultimo seggio ᅵ necessario un sorteggio tra la lista n. ".($x+1)." e la lista n. ".($cand+1);}
334 if ($ele[$x][0]>$temp or ($ele[$x][0]==$temp and $pref[$x]>$pref[$cand])) {
335 $temp=$ele[$x][0];
336 $cand=$x;
337 $sorteggio=0;$mex='';
338 }
339 }
340 if (!$sorteggio){
341 $eletti[$cand]++;
342 $ultimo=$cand;
343 array_shift($ele[$cand]);
344 }
345}
346return ($eletti);
347}
348
349function stampalista($ar) {
350global $PNE,$CSEC;
351$cmin=_SEGGIMIN;
352$csin="";
353 $bg='bgw';
354
355 $tmpbg='bggray2';
356 $tmpbg1='bgw';
357 $tmpbg2='bggray';
358 $tmpbg3='bggray2';
359 $fmin=2;
360 echo "<table summary=\"Tabella dei consiglieri eletti\" class=\"table-docs\" cellspacing=\"0\" cellpadding=\"2\" border=\"1\" rules=\"all\">";
361 $y=1;$i='';$e=0;
362 foreach ($ar as $riga) {
363 $e++;
364 if($riga[0]==$CSEC and $fmin==2)
365 {
366 { $fmin=1;
367 echo "</table>";
368 echo "<table summary=\"Tabella dei candidati sindaco eletti consigliere\" class=\"table-docs\" cellspacing=\"0\" cellpadding=\"2\" border=\"1\" rules=\"all\">";
369 echo "<tr class=\"bggray\"><td scope=\"row\" colspan=\"3\"><b>";
370 echo $csin;
371 echo "</b></td></tr>";
372 echo "<tr class=\"bggray\"><td scope=\"row\"><b>"._CANDIDATO."</b></td><td scope=\"row\"><b>"._NOMINATIVO."</b></td></tr>";
373 }
374 }
375 if($riga[0]!=$CSEC and $fmin==1)
376 { $fmin=0;
377 echo "</table>";
378 echo "<table summary=\"Tabella dei consiglieri di minoranza\" class=\"table-docs\" cellspacing=\"0\" cellpadding=\"2\" border=\"1\" rules=\"all\">";
379 echo "<tr class=\"bggray\"><td scope=\"row\" colspan=\"6\"><b>";
380 echo $cmin;
381 echo "</b></td></tr>";
382 echo "<tr class=\"bggray\"><td scope=\"row\"><b>"._LISTA."</b></td><td scope=\"row\"><b>"._VOTI."</b></td><td scope=\"row\"><b>"._SEGGI."</b></td><td scope=\"row\"><b>"._NOMINATIVO."</b></td><td scope=\"row\"><b>"._CIFRAELE."</b></td><td scope=\"row\"><b>"._QUOZIENTI."</b></td></tr>";
383 }
384 if($riga[1]==$PNE) echo "<tr class=\"red\">";
385 else{
386 $bg= ($riga[1]) ? $tmpbg3:$tmpbg1;
387 if($y) {
388 echo "<tr class=\"bggray\">";
389 }else{
390 echo "<tr class=\"$bg\">";
391 }
392 }
393 foreach ($riga as $cella) {
394 if ($e==1){
395 $t="<th scope=\"colgroup\"";$f="</th>";
396 }else{
397 $t="<td scope=\"row\"";$f="</td>";
398 }
399 echo "$t $i align=\"left\">$cella $f";
400 $i='';
401
402 }
403 if ($y) $y=0;
404 echo "</tr>";
405 }
406 echo "</table>";
407
408}
409
410function conssup($fascia,$gruppo,$collegate,$collperd,$primoturno) {
411global $id_cons, $id_cons_gen, $id_comune, $prefix,$dbi;
412global $groups,$lists,$eletti,$ultimo,$quozienti,$num_candlst,$mex,$PNE,$CSEC,$consin;
413global $supsbarramento, $supminpremio, $suppremio;
414global $listsupconta;
415#funzione di calcolo per comuni oltre 15.000 abitanti
416#carica il numero di consiglieri da eleggere$groups=array();
417$PNE=_PRIMONON;
418$CSEC=_SINDCONS;
419$lists=array();
420$eletti=array();
421$num_candlst=array();
422#$quozienti = array();
423$oldlists=array();
424$oldlstgrp=array();
425$premio=0;
426/* "Ai fini della determinazione nel secondo turno, della cifra elettorale complessiva delle liste collegate deve tenersi conto anche del collegamento intervenuto in vista del ballottaggio" (Cons. St. Sez. V 4 maggio 2001 n. 2519; 20 settembre 2000 n. 4894; 19 marzo 1996 n. 290)
427
428
429
430
431switch ($fascia) {
432 case 1: $numcons=12; break;
433 case 2: $numcons=16; break;
434 case 3: $numcons=20; break;
435 case 4: $numcons=20; break;
436 case 5: $numcons=30; break;
437 case 6: $numcons=40; break;
438 case 7: $numcons=46; break;
439 case 8: $numcons=50; break;
440 case 9: $numcons=60; break;
441} */
442 $result = mysql_query("SELECT seggi from ".$prefix."_ele_fasce where id_fascia=$fascia",$dbi);
443 list($numcons) = mysql_fetch_row($result);
444
445#verificare come gestire la situazione in cui il candidato sindaco supera lo sbarramento e il totale delle liste no.
446if (!isset($_SESSION['ballo1'])) $_SESSION['ballo1']='';
447if (!isset($_SESSION['ballo2'])) $_SESSION['ballo2']='';
448$gruppoperd= ($gruppo==$_SESSION['ballo1']) ? $_SESSION['ballo2'] : $_SESSION['ballo1'];
449
450#$res_val = mysql_query("SELECT sum(validi_lista) from ".$prefix."_ele_sezioni where id_cons='$id_cons'",$dbi);
451$res_val = mysql_query("SELECT sum(voti) from ".$prefix."_ele_voti_lista where id_cons='$id_cons'",$dbi);
452list($validi) = mysql_fetch_row($res_val);
453
454$sbarra=($validi*$supsbarramento)/100;
455$res_per = mysql_query("SELECT t1.descrizione,t1.num_gruppo,t2.id_lista,t2.num_lista,t2.descrizione,sum(t3.voti) as voti from ".$prefix."_ele_gruppo as t1, ".$prefix."_ele_lista as t2, ".$prefix."_ele_voti_lista as t3 where t1.id_cons='$id_cons' and t1.id_gruppo=t2.id_gruppo and t2.id_lista=t3.id_lista group by t1.descrizione,t1.num_gruppo,t2.num_lista,t2.descrizione order by voti desc",$dbi);
456$groups=array();
457$premio=0;
458//10-05-2009 gestione differenziata delle norme elettorali
459#carica l'array dei gruppi e della cifra di gruppo
460while (list($descr,$num_gruppo,$id_lista,$num_lista,$descr_lista,$voti)= mysql_fetch_row($res_per)){
461 if ($listsupconta or $voti>=$sbarra){
462 if (! isset($groups[($num_gruppo)])) $groups[($num_gruppo)]=0;
463 $desgruppi[$num_gruppo]=$descr;
464 $desliste[$num_lista]=$num_lista.") ".$descr_lista;
465 $idlst[$num_lista]=$id_lista;
466 $listagruppo[$num_lista]=$num_gruppo;
467 $lists[$num_lista]=$voti;
468 $groups[($num_gruppo)]+=$voti;
469 }else $validi-=$voti;
470}
471$descrsind=$desgruppi[$gruppo];
472foreach ($groups as $key=>$val){
473 #controlla se un gruppo di liste, tra quelle perdenti, ha superato il 50%
474 if ($key!=$gruppo and $val> $validi/2) $premio=2;
475 #elimina gruppi che non hanno superato lo sbarramento
476 if ($val<$sbarra){
477 foreach ($listagruppo as $lst=>$grp)
478 if ($grp==$key){
479 unset($listagruppo[$lst]);
480 unset($desliste[$lst]);
481 unset($lists[$lst]);
482 }
483 unset($groups[($key)]);
484 unset($desgruppi[($key)]);
485
486 }
487}
488
489 foreach ($collegate as $lst)
490 if (isset($lists[$lst])){
491 if($premio){
492 $oldlstgrp[$lst]=$listagruppo[$lst];
493 $oldlists[$lst]=$lists[$lst];
494 }
495 $groups[$listagruppo[$lst]]-=$lists[$lst];
496 $listagruppo[$lst]=$gruppo;
497 $groups[$gruppo]+=$lists[$lst];
498 }
499 ////da qui
500
501 foreach ($collperd as $lst)
502 if (isset($lists[$lst])){
503 $oldlstgrp[$lst]=$listagruppo[$lst];
504 $listagruppo[$lst]=$gruppoperd;
505 $oldlists[$lst]=$lists[$lst];
506 $groups[$gruppoperd]+=$lists[$lst];
507 $groups[$oldlstgrp[$lst]]-=$lists[$lst];
508 }
509
510////a qui va tolto se non vanno sommati i voti delle liste collegate al secondo turno con quelli del gruppo che perde il ballottaggio, se non si collegano viene favorita l'elezione del candidato sindaco con cui era collegata al primo turno mentre se si collegano viene favorito il principio di aggregazione. Per ora i perdenti sono considerati con la situazione al primo turno. Implementiamo cosᅵ: il 50% deve essere superato dalla minoranza nel primo turno, quindo senza somma dei voti delle liste aggiunte nel secondo turno - la suddivisione dei seggi viene fatta considerando i collegamenti al secondo turno, le liste collegate partecipano alla suddivisione dei seggi con questo gruppo quindi si confronta con le liste del gruppo in cui era al primo turno e valutando i coefficienti si stabilisce quale lista cede il seggio al candidato sindaco non acceduto al ballottaggio.
511
512#controlla se la percentuale del gruppo vincente e' tra il 40 e il 60% o il sindaco e' eletto al secondo turno
513#e se nessun altro gruppo ha superato il 50% assegna il premio di maggioranza
514#e se nessun altro gruppo ha superato il 50% e nessuno ha ottenuto piu' del 60% dei seggi, assegna il premio di maggioranza
515
516$consmin=$numcons;
517$gruppomin=calcoloseggi($groups,$consmin,0);
518$nopremio=1;
519foreach ($gruppomin as $key=>$val) {if (($numcons*60/100)<$val) $nopremio=0;}
520#die("qui:".($numcons*60/100)."<$val");
521if (($groups[$gruppo]>=(($validi*$supminpremio)/100) or ! $primoturno) and $groups[$gruppo]<(($validi*$suppremio)/100) and !$premio and $nopremio) $premio=1;
522else $premio=0;
523 $consel=array();
524 $consel[]=array(_LISTA,_VOTI,_SEGGI,_CANDIDATO,_CIFRAELE,_QUOZIENTI);
525
526$candidati=array();
527if ($premio) {
528 $sindaco[$gruppo]=$groups[$gruppo]; $groups[$gruppo]=0;
529 $gruppomag=calcoloseggi($sindaco,number_format($numcons*$suppremio/100),0);
530#######calcola i seggi per lista
531foreach ($gruppomag as $key=>$val){
532 foreach($listagruppo as $lst=>$grp){
533 if($grp!=$key) continue;
534 $id_lista=$idlst[$lst];
535 $x=$lst;
536 $y=$lists[$x];
537 $pos=0;
538 $z=0;
539 $arvin[$x][$pos++]=$desliste[$lst];
540 $res_can = mysql_query("SELECT concat(substring(concat('0',t1.num_cand),-2),') ',t1.cognome,' ',substring(t1.nome from 1 for 1),'.') as descr,sum(t2.voti) as voti from ".$prefix."_ele_candidati as t1, ".$prefix."_ele_voti_candidati as t2 where t1.id_lista='$id_lista' and t1.id_cand=t2.id_cand GROUP BY descr order by voti desc,num_cand",$dbi);
541 $num_candlst[$x]=mysql_num_rows($res_can);
542 while(list($cand,$pre)=mysql_fetch_row($res_can)){
543 $cifra[$x][$pos]=$y+$pre;
544 $arvin[$x][$pos++]=$cand;
545 }
546 $listemag[$x]=$y;
547 $desliste[$x]=$descr;
548 $percliste[$x]="<br/>$y (".number_format($y*100/$validi,2)."%)";
549 $z++;
550 }
551#foreach ($groups as $key=>$val)echo " key: $key : val : $val<br/>";
552 $seggimag=array();
553 $seggimag=calcoloseggi($listemag,$val,1);
554 $x=0;
555 foreach ($seggimag as $key=>$val){
556 for ($z=0;$z<$val;$z++){
557 if ($z) $consel[]=array("","","",$arvin[$key][($z+1)],$cifra[$key][($z+1)],number_format($quozienti[$key][$z],2));
558 else
559 {
560 $consel[]=array($arvin[$key][0],$percliste[$key],$val,$arvin[$key][($z+1)],$cifra[$key][($z+1)],number_format($quozienti[$key][$z],2));
561 $arlisdesv[]=$arvin[$key][0];$arlissegv[]=$val;$arlisnumv[]=$key;
562 }
563 }
564 $x++;
565 if($val)
566 $consel[]=array($arvin[$key][0],"$PNE","",$arvin[$key][($z+1)],$cifra[$key][($z+1)],number_format($quozienti[$key][$z],2));
567 }
568}
569}
570if ($premio) $consmin=number_format($numcons*(100-$suppremio)/100);
571else $consmin=$numcons;
572#foreach($groups as $keyb=>$valb) echo "keyb:$keyb -- valb:$valb<br/>";
573
574#####calcolo per la minoranza o in caso non ci sia premio di maggioranza
575$gruppomin=calcoloseggi($groups,$consmin,0);
576$ordinati[$gruppo]=$gruppomin[$gruppo];
577foreach ($gruppomin as $key=>$val){
578 if($key!=$gruppo) $ordinati[$key]=$val;
579}
580$gruppomin=$ordinati;
581foreach ($gruppomin as $key=>$val){
582 if($premio and $key==$gruppo) continue;
583 $listemin=array();
584 $cifra=array();
585 foreach($listagruppo as $lst=>$grp){
586 if($grp!=$key) continue;
587
588 $id_lista=$idlst[$lst];
589 $x=$lst;
590 $y=$lists[$x];
591 $pos=0;
592 $z=0;
593 $pos=0;$z=0;
594 if(!$premio and $key==$gruppo) $arvin[$x][$pos++]=$desliste[$lst];
595 else $arper[$x][$pos++]=$desliste[$lst];
596 $res_can = mysql_query("SELECT concat(substring(concat('0',t1.num_cand),-2),') ',t1.cognome,' ',substring(t1.nome from 1 for 1),'.') as descr,sum(t2.voti) as voti from ".$prefix."_ele_candidati as t1, ".$prefix."_ele_voti_candidati as t2 where t1.id_lista='$id_lista' and t1.id_cand=t2.id_cand GROUP BY descr order by voti desc,num_cand",$dbi);
597 $num_candlst[$x]=mysql_num_rows($res_can);
598 while(list($cand,$pre)=mysql_fetch_row($res_can)) {
599 $cifra[$x][$pos]=$y+$pre;
600 if(!$premio and $key==$gruppo)
601 $arvin[$x][$pos++]=$cand;
602 else
603 $arper[$x][$pos++]=$cand;
604 }
605 $listemin[$x]=$y;
606 $desliste[$x]=$descr;
607 $percliste[$x]="<br/>$y (".number_format($y*100/$validi,2)."%)";
608 }
609 $seggimin=array();
610 echo "$mex";
611 $ultimo='';
612 $seggimin=calcoloseggi($listemin,$val,1);
613 echo "$mex";#foreach ($seggimin as $lista=>$valc) echo $seggimin[$lista]." key:$lista -val:$valc<br/>";
614 if(!$premio and $key==$gruppo)
615 foreach ($seggimin as $lista=>$valc) $arper[$lista]=$arvin[$lista];
616/* for ($z=0;$z<$valc;$z++){
617 if ($z) $consel[]=array("","","",$arvin[$lista][($z+1)],$cifra[$lista][($z+1)],$quozienti[$lista][$z]);
618 else $consel[]=array($arvin[$lista][0],$percliste[$lista],$valc,$arvin[$lista][($z+1)],$cifra[$lista][($z+1)],$quozienti[$lista][$z]);
619 }
620 }
621 $consel[]=array($arvin[$lista][0],"$PNE","",$arvin[$lista][($z+1)],$cifra[$lista][($z+1)],$quozienti[$lista][$z]);
622 }//else{
623*/
624
625 if ($val and $key!=$gruppo and $consin) {$conselsin[]=array("$CSEC",$desgruppi[$key]); $arcansin[]=$desgruppi[$key];}
626foreach ($seggimin as $lista=>$val)
627 if(isset($oldlstgrp[$lista]) and !isset($oldseggi[$lista])) {$oldseggi[$lista]=$val;}
628 if($val==0){
629 if($ultimo==''){
630 foreach($oldlists as $lst=>$vot)
631 {
632 if ($oldlstgrp[$lst]!= $key or $oldseggi[$lst]==0) continue;
633 if($ultimo=='') $ultimo=$lst;
634 if($quozienti[$ultimo][($val-1)]==$last[$lst])
635 {
636 if($lists[$ultimo]==$lists[$lst]) $mex="Per attribuire l'ultimo seggio ᅵ necessario un sorteggio tra la lista n. $ultimo e la lista n. $lst";
637 elseif($lists[$ultimo]>$lists[$lst]) {$ultimo=$lst;$mex="";}
638 }
639 if ($quozienti[$lista][($val-1)]> $last[$lst]) {$ultimo=$lst;$mex="";}
640 }$lst=$ultimo;
641 if($ultimo and $consin){
642# if($conselb[$ttl[($lst-1)]][2]>1) $conselb[$ttl[($lst-1)]][2]--;else $conselb[$ttl[($lst-1)]][2]='';
643# $daunset[]=$tt[($lst-1)];
644 if($conselb[$ttl[($lst)]][2]>1) $conselb[$ttl[($lst)]][2]--;else $conselb[$ttl[($lst)]][2]='';
645 $daunset[]=$tt[($lst)];
646 $conselsin[]=array("$CSEC",$desgruppi[$key]);
647 $arcansin[]=$desgruppi[$key];
648 }
649 }
650 }
651#if($key!=$gruppo){
652 foreach ($seggimin as $lista=>$val){
653 if($ultimo==$lista and $key!=$gruppo and $consin) $val--;
654
655
656 for ($z=0;$z<$val;$z++){
657 if ($z) $conselb[]=array("","","",$arper[$lista][($z+1)],$cifra[$lista][($z+1)],number_format($quozienti[$lista][$z],2));
658 else{
659 if(!isset($arper[$lista][($z+1)])) $arper[$lista][($z+1)]=0;
660 if(!isset($cifra[$lista][($z+1)])) $cifra[$lista][($z+1)]=0;
661 $conselb[]=array($arper[$lista][0],$percliste[$lista],$val,$arper[$lista][($z+1)],$cifra[$lista][($z+1)],number_format($quozienti[$lista][$z],2));
662 $ttl[$lista]=(count($conselb)-1);
663 }
664 }
665 if (isset($oldlists[$lista]))
666 {
667 $tt[$lista]=(count($conselb)-1);
668 $last[$lista]=$quozienti[$lista][($z-1)];
669
670 }
671 if($val){
672 if(!isset($arper[$lista][($z+1)])) $arper[$lista][($z+1)]=0;
673 if(!isset($cifra[$lista][($z+1)])) $cifra[$lista][($z+1)]=0;
674 if(!isset($quozienti[$lista][$z])) $quozienti[$lista][$z]=0;
675 $conselb[]=array($arper[$lista][0],"$PNE","",$arper[$lista][($z+1)],$cifra[$lista][($z+1)],number_format($quozienti[$lista][$z],2));
676 }
677 }
678# }//chiude if $key
679 }//chiude foreach gruppomin
680# }
681 echo "<table summary=\"Tabella dei consiglieri eletti\" class=\"table-docs\" cellspacing=\"0\" cellpadding=\"2\" border=\"1\" rules=\"all\">";
682 echo "<tr class=\"bggray\"><td scope=\"row\"><b>";
683 echo _SINDACO.": ".$desgruppi[$gruppo]."</b></td></tr></table>";
684 if(isset($daunset)){
685 if ((sort($daunset,SORT_NUMERIC))==false) echo "Errore di programma!";
686 ELSE {
687 $tmpda=array_reverse($daunset);
688 foreach($tmpda as $key=>$val) {
689 $conselb[$val][0]=$conselb[($val+1)][0];$conselb[$val][1]=$conselb[($val+1)][1];
690 unset($conselb[($val+1)]);
691 }
692 }
693 }#foreach($conselb as $key=>$val) if($val[2]) echo "$x) ".$val[0]."--".$val[2]."<br/>"; else echo "passa".$x++;
694 if (!$premio)
695 {
696 foreach($conselb as $key=>$val)
697 {
698 if ($val[2]){
699 $nlst=intval($val[0]);
700 $arlisdesv[]=$val[0];
701 $arlissegv[]=$val[2];
702 }
703 if($listagruppo[$nlst]!=$gruppo) continue;
704 $consel[]=array($val[0],$val[1],$val[2],$val[3],$val[4],$val[5]);
705 }
706 }
707
708 if (isset($conselsin)) foreach($conselsin as $key=>$val)
709 {
710 $consel[]=array($val[0],$val[1]);
711 }
712 foreach($conselb as $key=>$val)
713 {
714 if ($val[2]){
715 $nlst=intval($val[0]);
716 $arlisdesp[]=$val[0];
717 $arlissegp[]=$val[2];
718 }
719 if($listagruppo[$nlst]==$gruppo) continue;
720 $consel[]=array($val[0],$val[1],$val[2],$val[3],$val[4],$val[5]);
721 }
722// plotgraf($descrsind,$arlisdesv,$arlissegv,$arlisdesp,$arlissegp,$arcansin); // per grafico
723 stampalista($consel);
724 unset($_SESSION['ballo1']);unset($_SESSION['ballo2']);unset($_SESSION['grp1']);unset($_SESSION['grp2']);
725}
726// Grafico
727function plotgraf($descrsind,$arlisdes,$arlisseg,$arlisdesp,$arlissegp,$arcansin){
728 //echo "sindaco: $descrsind<br/>";
729/* foreach($arlisdes as $key=>$val){
730 echo "key:$key -- val:$val seggi:".$arlisseg[$key]."<br/>";
731 }
732 echo "<br/><br/>";
733 foreach($arlisdesp as $key=>$val){
734 echo "key:$key -- val:$val seggi:".$arlissegp[$key]."<br/>";
735 } */
736 foreach($arlisdes as $key=>$val){
737 if($arlisseg[$key]=='1') $vocale="o"; else $vocale='';
738
739 $lista[]="$val \n [ ".$arlisseg[$key]." seggi".$vocale." ]";
740 $seggin[]=$arlisseg[$key]." seggi".$vocale."";
741 //echo "La lista $val ottiene ".$arlisseg[$key]." seggi.<br/>";
742 }
743 foreach($arcansin as $val) {
744 $seggin[]="1 seggio";
745 $arlisseg[]=1;
746 $lista[]=$val ."\n [ 1 seggio ]" ;
747 //echo "Il candidato sindaco $val e' eletto consigliere.<br/>";
748}
749$sindaco=urlencode($descrsind);
750
751$seggi=serialize($arlisseg);
752$seggi=urlencode($seggi);
753$seggin=serialize($seggin);
754$seggin=urlencode($seggin);
755$lista=serialize($lista);
756$lista=urlencode($lista);
757$title="Proiezione Composizione Consiglio Comunale";
758echo "<table><tr><td>
759 <img src='modules/Elezioni/grafici/consiglio.php?title=$title&amp;seggi=$seggi&amp;seggin=$seggin&amp;lista=$lista&amp;sindaco=$sindaco' alt=\"Grafico\" /></td></tr></table>";
760
761
762
763}
764?>
Note: See TracBrowser for help on using the repository browser.