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

Last change on this file since 73 was 2, checked in by root, 15 years ago

importo il progetto

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