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

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

Proiezione consiglio comunale: gestione della riduzione del 20% dei seggi

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