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

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