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

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