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

Last change on this file since 94 was 94, checked in by roby, 13 years ago

Corretta la funzione di calcolo d'Hondt per sistema maggioritario

File size: 33.3 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
29
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);
32$numcons=0;
33
34echo "<table><tr><td align=\"center\">"._PROIEZCONS."</td></tr></table>";
35
36
37function consiglio(){
38global $param,$id_cons_gen, $dbi, $prefix, $id_comune, $gruppo, $numgruppo, $listecol, $id_comune, $limite,$numcons;
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}
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);
49if (mysql_num_rows($res)){
50 list($tipo_cons,$id_cons,$datacons) = mysql_fetch_row($res);
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);
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);
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) {
154global $id_cons, $prefix,$dbi,$num_candlst,$quozienti,$PNE,$CSEC,$consin,$numcons;
155global $infpremio,$fisso,$sincons, $votol;
156if (!isset($fisso)) $fisso=0; #se fisso=1 il premio di maggioranza Ú fisso
157if (isset($votol)) {$votolista=$votol; $fisso=$votol;} #se votolista=1 c'e' voto di lista
158if (!isset($sincons)) $sincons=0; #se sincons=1 il sindaco eletto occupa un posto di consigliere
159$PNE=_PRIMONON;
160$CSEC=_SINDCONS;
161$sorteggio=0;
162$num_candlst=array();
163#funzione di calcolo per comuni fino a 15.000 abitanti (più esattamente fino al valore di $limite)
164
165if ($sincons) $numcons--;
166#$numcons--;
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);
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
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}
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
211// if ($gruppo[$listagruppo[$lisvin]]>($validi*2/3))
212 if ($gruppo[$listagruppo[$lisvin]]>($validi*$infpremio/100) and $fisso==0)
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;
398global $listsupconta,$numcons;
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)
411 */
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);
419$res_val = mysql_query("SELECT sum(voti) from ".$prefix."_ele_voti_lista where id_cons='$id_cons'",$dbi);
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;
437 }else $validi-=$voti;
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 }
467 ////da qui
468
469 foreach ($collperd as $lst)
470 if (isset($lists[$lst])){
471 $oldlstgrp[$lst]=$listagruppo[$lst];
472 $listagruppo[$lst]=$gruppoperd;
473 $oldlists[$lst]=$lists[$lst];
474 $groups[$gruppoperd]+=$lists[$lst];
475 $groups[$oldlstgrp[$lst]]-=$lists[$lst];
476 }
477
478////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.
479
480#controlla se la percentuale del gruppo vincente e' tra il 40 e il 60% o il sindaco e' eletto al secondo turno
481#e se nessun altro gruppo ha superato il 50% assegna il premio di maggioranza
482#e se nessun altro gruppo ha superato il 50% e nessuno ha ottenuto piu' del 60% dei seggi, assegna il premio di maggioranza
483
484$consmin=$numcons;
485$gruppomin=calcoloseggi($groups,$consmin,0);
486$nopremio=1;
487foreach ($gruppomin as $key=>$val) {if (($numcons*60/100)<$val) $nopremio=0;}
488#die("qui:".($numcons*60/100)."<$val");
489if (($groups[$gruppo]>=(($validi*$supminpremio)/100) or ! $primoturno) and $groups[$gruppo]<(($validi*$suppremio)/100) and !$premio and $nopremio) $premio=1;
490else $premio=0;
491 $consel=array();
492 $consel[]=array(_LISTA,_VOTI,_SEGGI,_CANDIDATO,_CIFRAELE,_QUOZIENTI);
493
494$candidati=array();
495if ($premio) {
496 $sindaco[$gruppo]=$groups[$gruppo]; $groups[$gruppo]=0;
497 $gruppomag=calcoloseggi($sindaco,number_format($numcons*$suppremio/100),0);
498#######calcola i seggi per lista
499foreach ($gruppomag as $key=>$val){
500 foreach($listagruppo as $lst=>$grp){
501 if($grp!=$key) continue;
502 $id_lista=$idlst[$lst];
503 $x=$lst;
504 $y=$lists[$x];
505 $pos=0;
506 $z=0;
507 $arvin[$x][$pos++]=$desliste[$lst];
508 $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);
509 $num_candlst[$x]=mysql_num_rows($res_can);
510 while(list($cand,$pre)=mysql_fetch_row($res_can)){
511 $cifra[$x][$pos]=$y+$pre;
512 $arvin[$x][$pos++]=$cand;
513 }
514 $listemag[$x]=$y;
515 $desliste[$x]=$descr;
516 $percliste[$x]="<br/>$y (".number_format($y*100/$validi,2)."%)";
517 $z++;
518 }
519#foreach ($groups as $key=>$val)echo " key: $key : val : $val<br/>";
520 $seggimag=array();
521 $seggimag=calcoloseggi($listemag,$val,1);
522 $x=0;
523 foreach ($seggimag as $key=>$val){
524 for ($z=0;$z<$val;$z++){
525 if ($z) $consel[]=array("","","",$arvin[$key][($z+1)],$cifra[$key][($z+1)],number_format($quozienti[$key][$z],2));
526 else
527 {
528 $consel[]=array($arvin[$key][0],$percliste[$key],$val,$arvin[$key][($z+1)],$cifra[$key][($z+1)],number_format($quozienti[$key][$z],2));
529 $arlisdesv[]=$arvin[$key][0];$arlissegv[]=$val;$arlisnumv[]=$key;
530 }
531 }
532 $x++;
533 if($val)
534 $consel[]=array($arvin[$key][0],"$PNE","",$arvin[$key][($z+1)],$cifra[$key][($z+1)],number_format($quozienti[$key][$z],2));
535 }
536}
537}
538if ($premio) $consmin=number_format($numcons*(100-$suppremio)/100);
539else $consmin=$numcons;
540#foreach($groups as $keyb=>$valb) echo "keyb:$keyb -- valb:$valb<br/>";
541
542#####calcolo per la minoranza o in caso non ci sia premio di maggioranza
543$gruppomin=calcoloseggi($groups,$consmin,0);
544$ordinati[$gruppo]=$gruppomin[$gruppo];
545foreach ($gruppomin as $key=>$val){
546 if($key!=$gruppo) $ordinati[$key]=$val;
547}
548$gruppomin=$ordinati;
549foreach ($gruppomin as $key=>$val){
550 if($premio and $key==$gruppo) continue;
551 $listemin=array();
552 $cifra=array();
553 foreach($listagruppo as $lst=>$grp){
554 if($grp!=$key) continue;
555
556 $id_lista=$idlst[$lst];
557 $x=$lst;
558 $y=$lists[$x];
559 $pos=0;
560 $z=0;
561 $pos=0;$z=0;
562 if(!$premio and $key==$gruppo) $arvin[$x][$pos++]=$desliste[$lst];
563 else $arper[$x][$pos++]=$desliste[$lst];
564 $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);
565 $num_candlst[$x]=mysql_num_rows($res_can);
566 while(list($cand,$pre)=mysql_fetch_row($res_can)) {
567 $cifra[$x][$pos]=$y+$pre;
568 if(!$premio and $key==$gruppo)
569 $arvin[$x][$pos++]=$cand;
570 else
571 $arper[$x][$pos++]=$cand;
572 }
573 $listemin[$x]=$y;
574 $desliste[$x]=$descr;
575 $percliste[$x]="<br/>$y (".number_format($y*100/$validi,2)."%)";
576 }
577 $seggimin=array();
578 echo "$mex";
579 $ultimo='';
580 $seggimin=calcoloseggi($listemin,$val,1);
581 echo "$mex";#foreach ($seggimin as $lista=>$valc) echo $seggimin[$lista]." key:$lista -val:$valc<br/>";
582 if(!$premio and $key==$gruppo)
583 foreach ($seggimin as $lista=>$valc) $arper[$lista]=$arvin[$lista];
584/* for ($z=0;$z<$valc;$z++){
585 if ($z) $consel[]=array("","","",$arvin[$lista][($z+1)],$cifra[$lista][($z+1)],$quozienti[$lista][$z]);
586 else $consel[]=array($arvin[$lista][0],$percliste[$lista],$valc,$arvin[$lista][($z+1)],$cifra[$lista][($z+1)],$quozienti[$lista][$z]);
587 }
588 }
589 $consel[]=array($arvin[$lista][0],"$PNE","",$arvin[$lista][($z+1)],$cifra[$lista][($z+1)],$quozienti[$lista][$z]);
590 }//else{
591*/
592
593 if ($val and $key!=$gruppo and $consin) {$conselsin[]=array("$CSEC",$desgruppi[$key]); $arcansin[]=$desgruppi[$key];}
594foreach ($seggimin as $lista=>$val)
595 if(isset($oldlstgrp[$lista]) and !isset($oldseggi[$lista])) {$oldseggi[$lista]=$val;}
596 if($val==0){
597 if($ultimo==''){
598 foreach($oldlists as $lst=>$vot)
599 {
600 if ($oldlstgrp[$lst]!= $key or $oldseggi[$lst]==0) continue;
601 if($ultimo=='') $ultimo=$lst;
602 if($quozienti[$ultimo][($val-1)]==$last[$lst])
603 {
604 if($lists[$ultimo]==$lists[$lst]) $mex="Per attribuire l'ultimo seggio ᅵ necessario un sorteggio tra la lista n. $ultimo e la lista n. $lst";
605 elseif($lists[$ultimo]>$lists[$lst]) {$ultimo=$lst;$mex="";}
606 }
607 if ($quozienti[$lista][($val-1)]> $last[$lst]) {$ultimo=$lst;$mex="";}
608 }$lst=$ultimo;
609 if($ultimo and $consin){
610# if($conselb[$ttl[($lst-1)]][2]>1) $conselb[$ttl[($lst-1)]][2]--;else $conselb[$ttl[($lst-1)]][2]='';
611# $daunset[]=$tt[($lst-1)];
612 if($conselb[$ttl[($lst)]][2]>1) $conselb[$ttl[($lst)]][2]--;else $conselb[$ttl[($lst)]][2]='';
613 $daunset[]=$tt[($lst)];
614 $conselsin[]=array("$CSEC",$desgruppi[$key]);
615 $arcansin[]=$desgruppi[$key];
616 }
617 }
618 }
619#if($key!=$gruppo){
620 foreach ($seggimin as $lista=>$val){
621 if($ultimo==$lista and $key!=$gruppo and $consin) $val--;
622
623
624 for ($z=0;$z<$val;$z++){
625 if ($z) $conselb[]=array("","","",$arper[$lista][($z+1)],$cifra[$lista][($z+1)],number_format($quozienti[$lista][$z],2));
626 else{
627 if(!isset($arper[$lista][($z+1)])) $arper[$lista][($z+1)]=0;
628 if(!isset($cifra[$lista][($z+1)])) $cifra[$lista][($z+1)]=0;
629 $conselb[]=array($arper[$lista][0],$percliste[$lista],$val,$arper[$lista][($z+1)],$cifra[$lista][($z+1)],number_format($quozienti[$lista][$z],2));
630 $ttl[$lista]=(count($conselb)-1);
631 }
632 }
633 if (isset($oldlists[$lista]))
634 {
635 $tt[$lista]=(count($conselb)-1);
636 $last[$lista]=$quozienti[$lista][($z-1)];
637
638 }
639 if($val){
640 if(!isset($arper[$lista][($z+1)])) $arper[$lista][($z+1)]=0;
641 if(!isset($cifra[$lista][($z+1)])) $cifra[$lista][($z+1)]=0;
642 if(!isset($quozienti[$lista][$z])) $quozienti[$lista][$z]=0;
643 $conselb[]=array($arper[$lista][0],"$PNE","",$arper[$lista][($z+1)],$cifra[$lista][($z+1)],number_format($quozienti[$lista][$z],2));
644 }
645 }
646# }//chiude if $key
647 }//chiude foreach gruppomin
648# }
649 echo "<table summary=\"Tabella dei consiglieri eletti\" class=\"table-docs\" cellspacing=\"0\" cellpadding=\"2\" border=\"1\" rules=\"all\">";
650 echo "<tr class=\"bggray\"><td scope=\"row\"><b>";
651 echo _SINDACO.": ".$desgruppi[$gruppo]."</b></td></tr></table>";
652 if(isset($daunset)){
653 if ((sort($daunset,SORT_NUMERIC))==false) echo "Errore di programma!";
654 ELSE {
655 $tmpda=array_reverse($daunset);
656 foreach($tmpda as $key=>$val) {
657 $conselb[$val][0]=$conselb[($val+1)][0];$conselb[$val][1]=$conselb[($val+1)][1];
658 unset($conselb[($val+1)]);
659 }
660 }
661 }#foreach($conselb as $key=>$val) if($val[2]) echo "$x) ".$val[0]."--".$val[2]."<br/>"; else echo "passa".$x++;
662 if (!$premio)
663 {
664 foreach($conselb as $key=>$val)
665 {
666 if ($val[2]){
667 $nlst=intval($val[0]);
668 $arlisdesv[]=$val[0];
669 $arlissegv[]=$val[2];
670 }
671 if($listagruppo[$nlst]!=$gruppo) continue;
672 $consel[]=array($val[0],$val[1],$val[2],$val[3],$val[4],$val[5]);
673 }
674 }
675
676 if (isset($conselsin)) foreach($conselsin as $key=>$val)
677 {
678 $consel[]=array($val[0],$val[1]);
679 }
680 foreach($conselb as $key=>$val)
681 {
682 if ($val[2]){
683 $nlst=intval($val[0]);
684 $arlisdesp[]=$val[0];
685 $arlissegp[]=$val[2];
686 }
687 if($listagruppo[$nlst]==$gruppo) continue;
688 $consel[]=array($val[0],$val[1],$val[2],$val[3],$val[4],$val[5]);
689 }
690// plotgraf($descrsind,$arlisdesv,$arlissegv,$arlisdesp,$arlissegp,$arcansin); // per grafico
691 stampalista($consel);
692 unset($_SESSION['ballo1']);unset($_SESSION['ballo2']);unset($_SESSION['grp1']);unset($_SESSION['grp2']);
693}
694// Grafico
695function plotgraf($descrsind,$arlisdes,$arlisseg,$arlisdesp,$arlissegp,$arcansin){
696 //echo "sindaco: $descrsind<br/>";
697/* foreach($arlisdes as $key=>$val){
698 echo "key:$key -- val:$val seggi:".$arlisseg[$key]."<br/>";
699 }
700 echo "<br/><br/>";
701 foreach($arlisdesp as $key=>$val){
702 echo "key:$key -- val:$val seggi:".$arlissegp[$key]."<br/>";
703 } */
704 foreach($arlisdes as $key=>$val){
705 if($arlisseg[$key]=='1') $vocale="o"; else $vocale='';
706
707 $lista[]="$val \n [ ".$arlisseg[$key]." seggi".$vocale." ]";
708 $seggin[]=$arlisseg[$key]." seggi".$vocale."";
709 //echo "La lista $val ottiene ".$arlisseg[$key]." seggi.<br/>";
710 }
711 foreach($arcansin as $val) {
712 $seggin[]="1 seggio";
713 $arlisseg[]=1;
714 $lista[]=$val ."\n [ 1 seggio ]" ;
715 //echo "Il candidato sindaco $val e' eletto consigliere.<br/>";
716}
717$sindaco=urlencode($descrsind);
718
719$seggi=serialize($arlisseg);
720$seggi=urlencode($seggi);
721$seggin=serialize($seggin);
722$seggin=urlencode($seggin);
723$lista=serialize($lista);
724$lista=urlencode($lista);
725$title="Proiezione Composizione Consiglio Comunale";
726echo "<table><tr><td>
727 <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>";
728
729
730
731}
732?>
Note: See TracBrowser for help on using the repository browser.