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

Last change on this file since 83 was 83, checked in by roby, 14 years ago

client - calcolo d'hondt aggiunta condizione per voto di lista

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