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

Last change on this file since 199 was 199, checked in by roby, 11 years ago
  • aggiornamento consiglieri per comuni fino a 10.000 abitanti
  • inserita cancellazione voti di gruppi e liste (a caduta comprende le preferenze) per sezione
File size: 33.9 KB
Line 
1<?php
2/************************************************************************/
3/* Eleonline - Raccolta e diffusione dei dati elettorali */
4/* by Roberto Gigli & Luciano Apolito */
5/* http://www.eleonline.it */
6/* info@eleonline.it luciano@aniene.net rgigli@libero.it */
7/************************************************************************/
8/* Modulo previsione seggi */
9/* Amministrazione */
10/************************************************************************/
11if (!defined('MODULE_FILE')) {
12 die ("You can't access this file directly...");
13}
14# controllo
15if ($hondt<=0){ Header("Location: index.php");
16 die();
17}
18
19$param=strtolower($_SERVER['REQUEST_METHOD']) == 'get' ? $_GET : $_POST;
20
21if (isset($param['gruppo'])) $gruppo=intval($param['gruppo']); else $gruppo='';
22if (isset($param['numgruppo'])) $numgruppo=intval($param['numgruppo']); else $numgruppo='';
23if (isset($param['listecol'])) $listecol=intval($param['listecol']); else $listecol=0;
24
25
26$result = mysql_query("select id_conf,id_fascia from ".$prefix."_ele_cons_comune where id_cons='$id_cons'", $dbi);
27list($id_conf,$fascia) = mysql_fetch_row($result);
28
29$res = mysql_query("SELECT limite,consin,infpremio,supsbarramento,suppremio,listinfsbar,listinfconta,listsupconta,supminpremio,infminpremio from ".$prefix."_ele_conf where id_conf='$id_conf'",$dbi);
30list($limite,$consin,$infpremio,$supsbarramento,$suppremio,$listinfsbar,$listinfconta,$listsupconta,$supminpremio,$infminpremio) = mysql_fetch_row($res);
31$numcons=0;
32
33echo "<table><tr><td align=\"center\">"._PROIEZCONS."</td></tr></table>";
34
35
36function consiglio(){
37global $param,$id_cons_gen, $dbi, $prefix, $id_comune, $gruppo, $numgruppo, $listecol, $id_comune, $limite,$numcons,$id_conf,$fascia,$id_cons;
38$collegate= array();
39$collperd= array();
40$x=1;
41$primoturno=0;
42while (isset($param['num_lista'.$x])) {
43 if ($param['num_lista'.$x]==$gruppo) array_push($collegate,$_SESSION['num_lista'.$x]);
44 elseif ($param['num_lista'.$x]!=0) array_push($collperd,$_SESSION['num_lista'.$x]);
45 $x++;
46}
47$res = mysql_query("SELECT t1.tipo_cons,t2.id_cons,t2.id_fascia,t2.id_conf FROM ".$prefix."_ele_consultazione as t1, ".$prefix."_ele_cons_comune as t2 where t1.id_cons_gen=t2.id_cons_gen and t2.id_cons_gen='$id_cons_gen' and t2.id_comune='$id_comune'" , $dbi);
48if (mysql_num_rows($res)){
49 list($tipo_cons,$id_cons,$fascia,$conf) = mysql_fetch_row($res);
50 $result = mysql_query("select capoluogo from ".$prefix."_ele_comuni where id_comune='$id_comune'", $dbi);
51 list($capoluogo) = mysql_fetch_row($result);
52 $result = mysql_query("select fascia_capoluogo from ".$prefix."_ele_conf where id_conf='$conf'", $dbi);
53 list($fascia2) = mysql_fetch_row($result);
54 if($fascia<$fascia2 and $capoluogo) $fascia=$fascia2;
55
56 $result = mysql_query("SELECT seggi from ".$prefix."_ele_fasce where id_fascia='$fascia' and id_conf=$id_conf",$dbi);
57 list($numcons) = mysql_fetch_row($result);
58$res_val= mysql_query("SELECT id_cand, sum(voti) from ".$prefix."_ele_voti_candidati where id_cons='$id_cons' group by id_cand",$dbi);
59$num_cons= mysql_num_rows($res_val);
60if ($num_cons<$numcons){
61 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";
62 include("footer.php");
63 die();
64}
65 if (!$gruppo){
66 $res_val = mysql_query("SELECT sum(validi) from ".$prefix."_ele_sezioni where id_cons='$id_cons'",$dbi);
67 list($validi) = mysql_fetch_row($res_val);
68 $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);
69 $test=0;$flag=0;
70 while (list($num_gruppo,$voti)= mysql_fetch_row($res_lis)){
71 if ($voti>($validi/2)) {$gruppo=$num_gruppo;$primoturno=1;}
72 if ($voti==$test) $flag=1; else $test=$voti;
73 }
74 }
75 if ($fascia<=$limite){
76 $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);
77 list($num_gruppo1,$voti1)= mysql_fetch_row($res_lis);
78 list($num_gruppo2,$voti2)= mysql_fetch_row($res_lis);
79 if ($voti1>$voti2)
80 $numgruppo=$num_gruppo1;
81 }
82 if ($fascia<=$limite and $numgruppo) consmin($fascia,$numgruppo);
83 elseif ($gruppo>0) conssup($fascia,$gruppo,$collegate,$collperd,$primoturno);
84 elseif ($numgruppo>0){
85 $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);
86 $yy=mysql_num_rows($res_lis);
87 $res_voti = mysql_query("select sum(voti) from ".$prefix."_ele_voti_lista where id_cons='$id_cons'",$dbi);
88 list($validilista) = mysql_fetch_row($res_voti);
89 if ($yy){
90while(list($id_lista,$num_lista,$descr,$pgrup) = mysql_fetch_row($res_lis)) {
91 $res_voti = mysql_query("select sum(voti) from ".$prefix."_ele_voti_lista where id_lista='$id_lista'",$dbi);
92 list($votilista) = mysql_fetch_row($res_voti);
93 if(!isset($voti[$pgrup])) $voti[$pgrup]=0;
94 $voti[$pgrup]+=$votilista;
95}
96 foreach ($voti as $key=>$val){if($val<($validilista*3/100)) unset($voti[$key]);} ##################################################
97 mysql_data_seek($res_lis,0);
98 echo "<br/>";
99 echo "<form id=\"gruppo\" action=\"modules.php\">";
100 echo "<table cellspacing=\"0\" cellpadding=\"2\" border=\"1\"><tr class=\"bggray\"><td colspan=\"4\">"._COLLEGAMENTI."</td></tr><tr class=\"bggray\"><td>";
101 echo "<input type=\"hidden\" name=\"op\" value=\"consiglieri\"/>";
102 echo "<input type=\"hidden\" name=\"id_cons_gen\" value=\"$id_cons_gen\"/>";
103 echo "<input type=\"hidden\" name=\"id_comune\" value=\"$id_comune\"/></td>";
104
105echo "<td><b>".$_SESSION['grp1']."</b></td>";
106 echo "<td><b>".$_SESSION['grp2']."</b></td>";
107 echo "<td><b>"._NONCOLLE."</b></td></tr>";
108
109 $z=1;
110 while(list($id_lista,$num_lista,$descr,$pgrup) = mysql_fetch_row($res_lis)) {
111 if(!isset($voti[$pgrup])) continue;
112 $x=$_SESSION['ballo1'];
113 echo "<tr><td>$descr</td><td><input type=\"radio\" name=\"num_lista$z\" value=\"$x\"/></td>";
114 $x=$_SESSION['ballo2'];
115 $_SESSION['num_lista'.$z]=$num_lista;
116 echo "<td><input type=\"radio\" name=\"num_lista$z\" value=\"$x\"/></td>";
117 echo "<td><input type=\"radio\" name=\"num_lista$z\" value=\"0\" checked=\"checked\"/></td></tr>";
118 $z++;
119 }
120
121 echo "<tr><td colspan=\"4\"><input type=\"hidden\" name=\"listecol\" value=\"$x\"/><input type=\"hidden\" name=\"gruppo\" value=\"$numgruppo\"/>";
122 echo "<input type=\"submit\" name=\"invia\" value=\""._OK."\"/></td></tr></table></form>";
123 }else conssup($fascia,$numgruppo,$collegate,$collperd,$primoturno);
124 }else {
125 echo "<br/>";
126 echo "<form id=\"numgruppo\" action=\"modules.php\">";
127 echo "<table><tr class=\"bggray\"><td>"._SCELTASIN.":</td><td align=\"left\">";
128 echo "<input type=\"hidden\" name=\"op\" value=\"consiglieri\"/>";
129 echo "<input type=\"hidden\" name=\"id_cons_gen\" value=\"$id_cons_gen\"/>";
130 echo "<input type=\"hidden\" name=\"id_comune\" value=\"$id_comune\"/>";
131 $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);
132 while(list($id_gruppo,$num_gruppo, $descr_gruppo,$pref) = mysql_fetch_row($res)) {
133 if (!isset($_SESSION['ballo1'])) {
134 $_SESSION['ballo1']=$num_gruppo;
135 $_SESSION['grp1']=$descr_gruppo;
136 $_SESSION['idgrp1']=$id_gruppo;
137 }else{
138 $_SESSION['ballo2']=$num_gruppo;
139 $_SESSION['grp2']=$descr_gruppo;
140 $_SESSION['idgrp2']=$id_gruppo;
141 }
142 echo "<input type=\"radio\" name=\"numgruppo\" value=\"$num_gruppo\"/>$descr_gruppo<br/>";
143 }
144 echo "</td>";
145 echo "<td><input type=\"submit\" name=\"invia\" value=\""._OK."\"/></td></tr></table></form>";
146
147 }
148 }
149}
150
151function consmin($fascia,$grp) {
152global $id_cons, $prefix,$dbi,$num_candlst,$quozienti,$PNE,$CSEC,$consin,$numcons;
153global $infpremio,$fisso,$sincons, $votol;
154if (!isset($fisso)) $fisso=0; #se fisso=1 il premio di maggioranza Ú fisso
155if (isset($votol)) {$votolista=$votol; $fisso=$votol;} #se votolista=1 c'e' voto di lista
156if (!isset($sincons)) $sincons=0; #se sincons=1 il sindaco eletto occupa un posto di consigliere
157$PNE=_PRIMONON;
158$CSEC=_SINDCONS;
159$sorteggio=0;
160$num_candlst=array();
161#funzione di calcolo per comuni fino a 15.000 abitanti (più esattamente fino al valore di $limite)
162
163if ($sincons) $numcons--;
164#$numcons--;
165$consel=array();
166$conselcsne=array();
167$conselmin=array();
168//$consel[]=array("Lista","Voti","Seggi","Nominativo","Cifra Elettorale","Quoziente");
169$consel[]=array(_LISTA,_VOTI,_SEGGI,_CANDIDATO,_CIFRAELE,_QUOZIENTI);
170#carica numero di liste e voti, i voti sono quelli del gruppo se non c'e' voto di lista
171if($votolista=='0')
172 $res_val = mysql_query("SELECT sum(validi) from ".$prefix."_ele_sezioni where id_cons='$id_cons'",$dbi);
173else
174 $res_val = mysql_query("SELECT sum(voti) from ".$prefix."_ele_voti_lista where id_cons='$id_cons'",$dbi);
175list($validi) = mysql_fetch_row($res_val);
176#se votolista==1, Ú abilitato il voto di lista ed Ú quello su cui si calcola l'assegnazione dei seggi
177if ($fisso==1){
178 #seleziona il sindaco
179$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);
180 list($descr,$num_gruppo,$id_lista1,$num_lista,$descr_lista,$voti)= mysql_fetch_row($res_per);
181$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);
182 list($id_lista2,$voti)= mysql_fetch_row($res_per);
183 #e la lista di minoranza
184 $ordine= $id_lista1>$id_lista2 ? "desc":"";
185$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);
186 }else{
187$res_per = mysql_query("SELECT t1.descrizione,t1.num_gruppo,t2.id_lista,t2.num_lista,t2.descrizione,sum(t3.voti) as voti from ".$prefix."_ele_gruppo as t1, ".$prefix."_ele_lista as t2, ".$prefix."_ele_voti_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);
188}
189$groups=array();
190$seggimag=array();
191$premio=0;
192$x=0;
193#carica l'array dei gruppi e della cifra di gruppo
194while (list($descr,$num_gruppo,$id_lista,$num_lista,$descr_lista,$voti)= mysql_fetch_row($res_per)){
195 $desgruppi[$num_gruppo]=$descr;
196 $desliste[$num_lista]=$num_lista.") ".$descr_lista;
197 $idlst[$num_lista]=$id_lista;
198 $listagruppo[$num_lista]=$num_gruppo;
199 $lists[$num_lista]=$voti;
200 if ($grp){
201 if ($grp!=$num_gruppo) {$groups[($num_gruppo)]=$voti;$listemin[$num_lista]=$voti;}
202 else {$gruppo[($num_gruppo)]=$voti;$listemag[$num_lista]=$voti;$lisvin=$num_lista;}
203 }else{
204 if ($x) {$groups[($num_gruppo)]=$voti;$listemin[$num_lista]=$voti;}
205 else {$gruppo[($num_gruppo)]=$voti;$listemag[$num_lista]=$voti;$lisvin=$num_lista;}
206 }
207 $x++;
208 }#controllo del premio di maggioranza
209// if ($gruppo[$listagruppo[$lisvin]]>($validi*2/3))
210 if ($gruppo[$listagruppo[$lisvin]]>($validi*$infpremio/100) and $fisso==0)
211 {
212 foreach ($groups as $key=>$val) $gruppo[$key]=$val;
213 $groups=$gruppo;
214 $gruppo=array();
215 $num_cons=$numcons;
216 } else {
217// $seggimag[$lisvin]=number_format($numcons*2/3);
218// $num_cons=number_format($numcons/3);
219 $seggimag[$lisvin]=number_format($numcons*$infpremio/100);
220 $num_cons=number_format($numcons-$seggimag[$lisvin]);
221 }
222 foreach ($listagruppo as $lista=>$val){
223 $id_lista=$idlst[$lista];
224 $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);
225
226 $num_candlst[$lista]=mysql_num_rows($res_can);
227 $pos=0;
228 while(list($cand,$pre)=mysql_fetch_row($res_can)){
229 if(!isset($lists[$lista])) $lists[$lista]=0;
230 $cifra[$lista][$pos]=$lists[$lista]+$pre;
231 $arvin[$lista][$pos++]=$cand;
232 }
233 }
234 if ($num_candlst[$lisvin]<$seggimag[$lisvin]) {
235 $num_cons+=$seggimag[$lisvin]-$num_candlst[$lisvin];
236 $seggimag[$lisvin]=$num_candlst[$lisvin];
237 }
238 if (isset($gruppo[$listagruppo[$lisvin]])) $seggimag=calcoloseggi($listemag,$seggimag[$lisvin],1);
239 if(isset($mex))
240 echo "$mex";
241 foreach ($seggimag as $lista=>$val)
242 for ($z=0;$z<$val;$z++){
243 if ($z) $consel[]=array("","","",$arvin[$lista][($z)],$cifra[$lista][($z)],number_format($quozienti[$lista][$z],2));
244 else $consel[]=array($desliste[$lista],$lists[$lista],$val,$arvin[$lista][($z)],$cifra[$lista][($z)],number_format($quozienti[$lista][$z],2));
245 }
246 if($arvin[$lista][($z)]) $consel[]=array($desliste[$lista],"$PNE","",$arvin[$lista][($z)],$cifra[$lista][($z)],number_format($quozienti[$lista][$z],2));
247 $seggimin=array();
248 $seggimin=calcoloseggi($listemin,$num_cons,1);
249 foreach ($seggimin as $lista=>$val){
250 if ($consin and $val>0){
251 $conselcsne[]=array("$CSEC","","",$desgruppi[$listagruppo[$lista]],"","");
252 $val--;
253 }
254 for ($z=0;$z<$val;$z++){
255 if ($z) $conselmin[]=array("","","",$arvin[$lista][($z)],$cifra[$lista][($z)],number_format($quozienti[$lista][$z],2));
256 else $conselmin[]=array($desliste[$lista],$lists[$lista],$val,$arvin[$lista][($z)],$cifra[$lista][($z)],number_format($quozienti[$lista][$z],2));
257 }
258 if($arvin[$lista][($z)]) $conselmin[]=array($desliste[$lista],"$PNE","",$arvin[$lista][($z)],$cifra[$lista][($z)],number_format($quozienti[$lista][$z],2));
259 }
260 foreach($conselcsne as $key=>$val)
261 {
262 $consel[]=array($val[0],$val[3]);
263 }
264 foreach($conselmin as $key=>$val)
265 {
266 $consel[]=array($val[0],$val[1],$val[2],$val[3],$val[4],$val[5]);
267 }
268
269
270
271 echo "<table summary=\"Tabella dei consiglieri eletti\" class=\"table-docs\" cellspacing=\"0\" cellpadding=\"2\" border=\"1\" rules=\"all\">";
272 echo "<tr class=\"bggray\"><td scope=\"row\">";
273 echo _SINDACO.": ".$desgruppi[$listagruppo[$lisvin]]."</td></tr></table>";
274 stampalista($consel);
275
276
277}
278
279
280
281function calcoloseggi($gruppi,$num_cons,$flag){
282global $ultimo,$mex,$sorteggio,$quozienti,$num_cand,$num_candlst;
283
284#carica le preferenze
285$pref = array();
286$ultimo=0;
287$mex='';
288$sorteggio=0;
289$eletti = array();
290$ele = array();
291$quozienti = array();
292$num_quoz= $num_cons;
293#inizializza l'array degli eletti
294foreach ($gruppi as $x=>$val){
295 $eletti[$x]=0;
296 }
297#carica gli array dei quozienti
298foreach($gruppi as $y=>$tmp){
299 if($flag) $num_quoz= $num_cons<$num_candlst[$y] ? $num_cons:$num_candlst[$y];
300 if(!isset($ele[$y][0])) $ele[$y][0]=0;
301 for ($x=0;$x<=$num_quoz;$x++){
302 $ele[$y][$x]= $tmp/($x+1);
303 $quozienti[$y][$x]= $tmp/($x+1);
304 }
305}
306#estrae i quozienti piu' alti
307for ($y=0;$y<$num_cons;$y++){
308 $temp=0;
309 $cand=0;
310 if(! isset($pref['0'])) $pref['0']='';
311 if(! isset($pref['1'])) $pref['1']='';
312 foreach($gruppi as $x=>$tmp){
313 if(!isset($ele[$x][0])) $ele[$x][0]=0;
314 if(!isset($pref[$x])) $pref[$x]=0;
315 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);}
316 if ($ele[$x][0]>$temp or ($ele[$x][0]==$temp and $pref[$x]>$pref[$cand])) {
317 $temp=$ele[$x][0];
318 $cand=$x;
319 $sorteggio=0;$mex='';
320 }
321 }
322 if (!$sorteggio){
323 $eletti[$cand]++;
324 $ultimo=$cand;
325 array_shift($ele[$cand]);
326 }
327}
328return ($eletti);
329}
330
331function stampalista($ar) {
332global $PNE,$CSEC;
333$cmin=_SEGGIMIN;
334$csin="";
335 $bg='bgw';
336
337 $tmpbg='bggray2';
338 $tmpbg1='bgw';
339 $tmpbg2='bggray';
340 $tmpbg3='bggray2';
341 $fmin=2;
342 echo "<table summary=\"Tabella dei consiglieri eletti\" class=\"table-docs\" cellspacing=\"0\" cellpadding=\"2\" border=\"1\" rules=\"all\">";
343 $y=1;$i='';$e=0;
344 foreach ($ar as $riga) {
345 $e++;
346 if($riga[0]==$CSEC and $fmin==2)
347 {
348 { $fmin=1;
349 echo "</table>";
350 echo "<table summary=\"Tabella dei candidati sindaco eletti consigliere\" class=\"table-docs\" cellspacing=\"0\" cellpadding=\"2\" border=\"1\" rules=\"all\">";
351 echo "<tr class=\"bggray\"><td scope=\"row\" colspan=\"3\"><b>";
352 echo $csin;
353 echo "</b></td></tr>";
354 echo "<tr class=\"bggray\"><td scope=\"row\"><b>"._CANDIDATO."</b></td><td scope=\"row\"><b>"._NOMINATIVO."</b></td></tr>";
355 }
356 }
357 if($riga[0]!=$CSEC and $fmin==1)
358 { $fmin=0;
359 echo "</table>";
360 echo "<table summary=\"Tabella dei consiglieri di minoranza\" class=\"table-docs\" cellspacing=\"0\" cellpadding=\"2\" border=\"1\" rules=\"all\">";
361 echo "<tr class=\"bggray\"><td scope=\"row\" colspan=\"6\"><b>";
362 echo $cmin;
363 echo "</b></td></tr>";
364 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>";
365 }
366 if($riga[1]==$PNE) echo "<tr class=\"red\">";
367 else{
368 $bg= ($riga[1]) ? $tmpbg3:$tmpbg1;
369 if($y) {
370 echo "<tr class=\"bggray\">";
371 }else{
372 echo "<tr class=\"$bg\">";
373 }
374 }
375 foreach ($riga as $cella) {
376 if ($e==1){
377 $t="<th scope=\"colgroup\"";$f="</th>";
378 }else{
379 $t="<td scope=\"row\"";$f="</td>";
380 }
381 echo "$t $i align=\"left\">$cella $f";
382 $i='';
383
384 }
385 if ($y) $y=0;
386 echo "</tr>";
387 }
388 echo "</table>";
389
390}
391
392function conssup($fascia,$gruppo,$collegate,$collperd,$primoturno) {
393global $id_cons, $id_cons_gen, $id_comune, $prefix,$dbi;
394global $groups,$lists,$eletti,$ultimo,$quozienti,$num_candlst,$mex,$PNE,$CSEC,$consin;
395global $supsbarramento, $supminpremio, $suppremio;
396global $listsupconta,$numcons;
397#funzione di calcolo per comuni oltre 15.000 abitanti
398#carica il numero di consiglieri da eleggere$groups=array();
399$PNE=_PRIMONON;
400$CSEC=_SINDCONS;
401$lists=array();
402$eletti=array();
403$num_candlst=array();
404#$quozienti = array();
405$oldlists=array();
406$oldlstgrp=array();
407$premio=0;
408/* "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)
409 */
410
411#verificare come gestire la situazione in cui il candidato sindaco supera lo sbarramento e il totale delle liste no.
412if (!isset($_SESSION['ballo1'])) $_SESSION['ballo1']='';
413if (!isset($_SESSION['ballo2'])) $_SESSION['ballo2']='';
414$gruppoperd= ($gruppo==$_SESSION['ballo1']) ? $_SESSION['ballo2'] : $_SESSION['ballo1'];
415
416#$res_val = mysql_query("SELECT sum(validi_lista) from ".$prefix."_ele_sezioni where id_cons='$id_cons'",$dbi);
417$res_val = mysql_query("SELECT sum(voti) from ".$prefix."_ele_voti_gruppo where id_cons='$id_cons'",$dbi);
418list($validi) = mysql_fetch_row($res_val);
419
420$sbarra=($validi*$supsbarramento)/100;
421$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);
422$groups=array();
423$premio=0;
424//10-05-2009 gestione differenziata delle norme elettorali
425#carica l'array dei gruppi e della cifra di gruppo
426while (list($descr,$num_gruppo,$id_lista,$num_lista,$descr_lista,$voti)= mysql_fetch_row($res_per)){
427 if ($listsupconta or $voti>=$sbarra){
428 if (! isset($groups[($num_gruppo)])) $groups[($num_gruppo)]=0;
429 $desgruppi[$num_gruppo]=$descr;
430 $desliste[$num_lista]=$num_lista.") ".$descr_lista;
431 $idlst[$num_lista]=$id_lista;
432 $listagruppo[$num_lista]=$num_gruppo;
433 $lists[$num_lista]=$voti;
434 $groups[($num_gruppo)]+=$voti;
435 }//else $validi-=$voti; //maggio 2011: verificare questa sottrazione, non mi convince
436}
437$descrsind=$desgruppi[$gruppo];
438foreach ($groups as $key=>$val){
439 #controlla se un gruppo di liste, tra quelle perdenti, ha superato il 50%
440 if ($key!=$gruppo and $val> $validi/2) $premio=2;
441 #elimina gruppi che non hanno superato lo sbarramento
442 if ($val<$sbarra){
443 foreach ($listagruppo as $lst=>$grp)
444 if ($grp==$key){
445 unset($listagruppo[$lst]);
446 unset($desliste[$lst]);
447 unset($lists[$lst]);
448 }
449 unset($groups[($key)]);
450 unset($desgruppi[($key)]);
451
452 }
453}
454
455 foreach ($collegate as $lst)
456 if (isset($lists[$lst])){
457 if($premio){
458 $oldlstgrp[$lst]=$listagruppo[$lst];
459 $oldlists[$lst]=$lists[$lst];
460 }
461 $groups[$listagruppo[$lst]]-=$lists[$lst];
462 $listagruppo[$lst]=$gruppo;
463 $groups[$gruppo]+=$lists[$lst];
464 }
465 ////maggio 2011: da qui
466$consmin=$numcons;
467$gruppomin=calcoloseggi($groups,$consmin,0);
468$nopremio=1;
469foreach ($gruppomin as $key=>$val) {if (($numcons*60/100)<$val) $nopremio=0;}
470#die("qui:".($numcons*60/100)."<$val");
471if (($groups[$gruppo]>=(($validi*$supminpremio)/100) or ! $primoturno) and $groups[$gruppo]<(($validi*$suppremio)/100) and !$premio and $nopremio) $premio=1;
472else $premio=0;
473 $consel=array();
474 $consel[]=array(_LISTA,_VOTI,_SEGGI,_CANDIDATO,_CIFRAELE,_QUOZIENTI);
475
476$candidati=array();
477//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%
478//maggio 2011: da qui
479if(!isset($groups[$gruppoperd])) $groups[$gruppoperd]=0;
480 foreach ($collperd as $lst)
481 if (isset($lists[$lst])){
482 $oldlstgrp[$lst]=$listagruppo[$lst];
483 $listagruppo[$lst]=$gruppoperd;
484 $oldlists[$lst]=$lists[$lst];
485 $groups[$gruppoperd]+=$lists[$lst];
486 $groups[$oldlstgrp[$lst]]-=$lists[$lst];
487 }
488
489////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.
490
491#controlla se la percentuale del gruppo vincente e' tra il 40 e il 60% o il sindaco e' eletto al secondo turno
492#e se nessun altro gruppo ha superato il 50% assegna il premio di maggioranza
493#e se nessun altro gruppo ha superato il 50% e nessuno ha ottenuto piu' del 60% dei seggi, assegna il premio di maggioranza
494
495
496if ($premio) {
497 $sindaco[$gruppo]=$groups[$gruppo]; $groups[$gruppo]=0;
498 $gruppomag=calcoloseggi($sindaco,ceil($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=floor($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 !isset($oldseggi[$lst]) 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 if($z) $last[$lista]=$quozienti[$lista][($z-1)]; else $last[$lista]=0;
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.