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

Last change on this file since 198 was 198, checked in by roby, 10 years ago

calcolo del numero di consiglieri spettanti per il premio di maggioranza con arrotondamento all'unità superiore e non inferiore

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