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

Last change on this file since 421 was 420, checked in by roby, 6 months ago
  • CLIENT

-- modifica alla funzione della proiezione di assegnazione dei seggi
-- modifica alla funzione rss
-- modifica ai widget pie_affluenze e gom_affluenze

File size: 49.2 KB
Line 
1<?php
2/************************************************************************/
3/* Eleonline - Raccolta e diffusione dei dati elettorali */
4/* by Roberto Gigli & Luciano Apolito */
5/* http://www.eleonline.it */
6/* info@eleonline.it luciano@aniene.net rgigli@libero.it */
7/************************************************************************/
8/* Modulo previsione seggi */
9/* Amministrazione */
10/************************************************************************/
11if (!defined('MODULE_FILE')) {
12 die ("You can't access this file directly...");
13}
14# controllo
15if ($hondt<=0){ Header("Location: index.php");
16 die();
17}
18$param=strtolower($_SERVER['REQUEST_METHOD']) == 'get' ? $_GET : $_POST;
19if (isset($param['gruppo'])) $gruppo=intval($param['gruppo']); else $gruppo='';
20if (isset($param['numgruppo'])) $numgruppo=intval($param['numgruppo']); else $numgruppo='';
21if (isset($param['listecol'])) $listecol=intval($param['listecol']); else $listecol=0;
22$sql = "select id_conf,id_fascia from ".$prefix."_ele_cons_comune where id_cons='$id_cons'";
23$result = $dbi->prepare("$sql");
24$result->execute();
25list($id_conf,$fascia) = $result->fetch(PDO::FETCH_NUM);
26$sql = "SELECT limite,consin,infpremio,supsbarramento,suppremio,listinfsbar,listinfconta,listsupconta,supminpremio,infminpremio,inffisso from ".$prefix."_ele_conf where id_conf='$id_conf'";
27$res = $dbi->prepare("$sql");
28$res->execute();
29list($limite,$consin,$infpremio,$supsbarramento,$suppremio,$listinfsbar,$listinfconta,$listsupconta,$supminpremio,$infminpremio,$inffisso) = $res->fetch(PDO::FETCH_NUM);
30$numcons=0;
31echo "<table><tr><td align=\"center\">"._PROIEZCONS."</td></tr></table>";
32
33
34function consiglio(){
35global $param,$id_cons_gen, $dbi, $prefix, $id_comune, $gruppo, $numgruppo, $listecol, $id_comune, $limite,$numcons,$id_conf,$fascia,$id_cons,$validi;
36$collegate= array();
37$collperd= array();
38$x=1;
39$primoturno=0;
40while (isset($param['num_lista'.$x])) {
41 if ($param['num_lista'.$x]==$gruppo) array_push($collegate,$_SESSION['num_lista'.$x]);
42# elseif ($param['num_lista'.$x]!=0) array_push($collperd,$_SESSION['num_lista'.$x]);
43 $x++;
44}
45$sql = "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'";
46$res = $dbi->prepare("$sql");
47$res->execute();
48
49if ($res->rowCount()){
50 list($tipo_cons,$id_cons,$fascia,$conf) = $res->fetch(PDO::FETCH_NUM);
51 $sql = "select capoluogo from ".$prefix."_ele_comuni where id_comune='$id_comune'";
52$result = $dbi->prepare("$sql");
53$result->execute();
54
55 list($capoluogo) = $result->fetch(PDO::FETCH_NUM);
56 $sql = "select inffisso,fascia_capoluogo from ".$prefix."_ele_conf where id_conf='$conf'";
57$result = $dbi->prepare("$sql");
58$result->execute();
59
60 list($inffisso,$fascia2) = $result->fetch(PDO::FETCH_NUM);
61 if($fascia<$fascia2 and $capoluogo) $fascia=$fascia2;
62
63 $sql = "SELECT seggi from ".$prefix."_ele_fasce where id_fascia='$fascia' and id_conf=$id_conf";
64$result = $dbi->prepare("$sql");
65$result->execute();
66
67 list($numcons) = $result->fetch(PDO::FETCH_NUM);
68$sql = "SELECT id_cand, sum(voti) from ".$prefix."_ele_voti_candidati where id_cons='$id_cons' group by id_cand";
69$res_val = $dbi->prepare("$sql");
70$res_val->execute();
71
72$num_cons= $res_val->rowCount();
73if ($num_cons<$numcons){
74 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";
75 include("footer.php");
76 die();
77}
78 if (!$gruppo){
79 $sql = "SELECT sum(validi) from ".$prefix."_ele_sezioni where id_cons='$id_cons'";
80$res_val = $dbi->prepare("$sql");
81$res_val->execute();
82
83 list($validi) = $res_val->fetch(PDO::FETCH_NUM);
84 $sql = "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";
85$res_lis = $dbi->prepare("$sql");
86$res_lis->execute();
87
88 $test=0;$flag=0;
89 while (list($num_gruppo,$voti)= $res_lis->fetch(PDO::FETCH_NUM)){
90 if ($voti>($validi/2)) {$gruppo=$num_gruppo;$primoturno=1;}
91 if ($voti==$test) $flag=1; else $test=$voti;
92 }
93 }
94 if ($fascia<=$limite){
95 $sql = "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";
96 $res_lis = $dbi->prepare("$sql");
97 $res_lis->execute();
98 if($res_lis->rowCount()==1 or $inffisso)
99 {
100 list($num_gruppo1,$voti1)= $res_lis->fetch(PDO::FETCH_NUM);
101 $voti2=0;
102 $sql = "SELECT sum(maschi+femmine) from ".$prefix."_ele_sezioni where id_cons='$id_cons'";
103 $res_val = $dbi->prepare("$sql");
104 $res_val->execute();
105 list($elettori)=$res_val->fetch(PDO::FETCH_NUM);
106 $sql = "select sum(voti_complessivi) from ".$prefix."_ele_voti_parziale where id_cons='$id_cons' group by data,orario order by data desc, orario desc limit 0,1";
107 $res_val = $dbi->prepare("$sql");
108 $res_val->execute();
109 list($votanti)=$res_val->fetch(PDO::FETCH_NUM);
110 if($votanti<($elettori/2) || $voti1<($votanti/2))
111 {
112 echo "<div style=\"text-align:center;\"><br><br>Il numero di votanti Ú inferiore al 50%, non Ú possibile assegnare i seggi. <br>La consultazione Ú nulla</div>";
113 include("footer.php");
114 die();
115 }
116 }else{
117 list($num_gruppo1,$voti1)= $res_lis->fetch(PDO::FETCH_NUM);
118 list($num_gruppo2,$voti2)= $res_lis->fetch(PDO::FETCH_NUM);
119 }
120 if ($voti1>$voti2)
121 $numgruppo=$num_gruppo1;
122 else
123 $numgruppo=$num_gruppo2;
124 }
125 if ($fascia<=$limite and $numgruppo) {
126 if($inffisso)
127 consmin4($fascia,$numgruppo);
128 else
129 consmin($fascia,$numgruppo);
130 }
131 elseif ($gruppo>0) conssup($fascia,$gruppo,$collegate,$collperd,$primoturno);
132 elseif ($numgruppo>0){
133 $sqllis = "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'].")";
134$res_lis = $dbi->prepare("$sqllis");
135$res_lis->execute();
136
137 $yy=$res_lis->rowCount();
138 $sql = "select sum(voti) from ".$prefix."_ele_voti_lista where id_cons='$id_cons'";
139$res_voti = $dbi->prepare("$sql");
140$res_voti->execute();
141
142 list($validilista) = $res_voti->fetch(PDO::FETCH_NUM);
143 if ($yy){
144while(list($id_lista,$num_lista,$descr,$pgrup) = $res_lis->fetch(PDO::FETCH_NUM)) {
145 $sql = "select sum(voti) from ".$prefix."_ele_voti_lista where id_lista='$id_lista'";
146$res_voti = $dbi->prepare("$sql");
147$res_voti->execute();
148
149 list($votilista) = $res_voti->fetch(PDO::FETCH_NUM);
150 if(!isset($voti[$pgrup])) $voti[$pgrup]=0;
151 $voti[$pgrup]+=$votilista;
152}
153 foreach ($voti as $key=>$val){if($val<($validilista*3/100)) unset($voti[$key]);} ##################################################
154 $res_lis = $dbi->prepare("$sqllis");
155 $res_lis->execute();
156 echo "<br/>";
157 echo "<form id=\"gruppo\" action=\"modules.php\">";
158 echo "<table cellspacing=\"0\" cellpadding=\"2\" border=\"1\"><tr class=\"bggray\"><td colspan=\"4\">"._COLLEGAMENTI."</td></tr><tr class=\"bggray\"><td>";
159 echo "<input type=\"hidden\" name=\"op\" value=\"consiglieri\"/>";
160 echo "<input type=\"hidden\" name=\"id_cons_gen\" value=\"$id_cons_gen\"/>";
161 echo "<input type=\"hidden\" name=\"id_comune\" value=\"$id_comune\"/></td>";
162
163echo "<td><b>".$_SESSION['grp1']."</b></td>";
164 echo "<td><b>".$_SESSION['grp2']."</b></td>";
165 echo "<td><b>"._NONCOLLE."</b></td></tr>";
166
167 $z=1;
168 while(list($id_lista,$num_lista,$descr,$pgrup) = $res_lis->fetch(PDO::FETCH_NUM)) {
169 if(!isset($voti[$pgrup])) continue;
170 $x=$_SESSION['ballo1'];
171 echo "<tr><td>$descr</td><td><input type=\"radio\" name=\"num_lista$z\" value=\"$x\"/></td>";
172 $x=$_SESSION['ballo2'];
173 $_SESSION['num_lista'.$z]=$num_lista;
174 echo "<td><input type=\"radio\" name=\"num_lista$z\" value=\"$x\"/></td>";
175 echo "<td><input type=\"radio\" name=\"num_lista$z\" value=\"0\" checked=\"checked\"/></td></tr>";
176 $z++;
177 }
178
179 echo "<tr><td colspan=\"4\"><input type=\"hidden\" name=\"listecol\" value=\"$x\"/><input type=\"hidden\" name=\"gruppo\" value=\"$numgruppo\"/>";
180 echo "<input type=\"submit\" name=\"invia\" value=\""._OK."\"/></td></tr></table></form>";
181 }else conssup($fascia,$numgruppo,$collegate,$collperd,$primoturno);
182 }else {
183 echo "<br/>";
184 echo "<form id=\"numgruppo\" action=\"modules.php\">";
185 echo "<table><tr class=\"bggray\"><td>"._SCELTASIN.":</td><td align=\"left\">";
186 echo "<input type=\"hidden\" name=\"op\" value=\"consiglieri\"/>";
187 echo "<input type=\"hidden\" name=\"id_cons_gen\" value=\"$id_cons_gen\"/>";
188 echo "<input type=\"hidden\" name=\"id_comune\" value=\"$id_comune\"/>";
189 $sql = "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.id_gruppo,t1.num_gruppo,t1.descrizione order by pref desc limit 0,2";
190 $res = $dbi->prepare("$sql");
191 $res->execute();
192
193 while(list($id_gruppo,$num_gruppo, $descr_gruppo,$pref) = $res->fetch(PDO::FETCH_NUM)) {
194 if (!isset($_SESSION['ballo1'])) {
195 $_SESSION['ballo1']=$num_gruppo;
196 $_SESSION['grp1']=$descr_gruppo;
197 $_SESSION['idgrp1']=$id_gruppo;
198 }else{
199 $_SESSION['ballo2']=$num_gruppo;
200 $_SESSION['grp2']=$descr_gruppo;
201 $_SESSION['idgrp2']=$id_gruppo;
202 }
203 echo "<input type=\"radio\" name=\"numgruppo\" value=\"$num_gruppo\"/>$descr_gruppo<br/>";
204 }
205 echo "</td>";
206 echo "<td><input type=\"submit\" name=\"invia\" value=\""._OK."\"/></td></tr></table></form>";
207
208 }
209 }
210}
211
212function consmin4($fascia,$grp) {
213global $id_cons, $prefix,$dbi,$num_candlst,$PNE,$CSEC,$validi,$consin,$numcons,$inffisso;
214global $infpremio,$fisso,$sincons, $votol;
215if (!isset($fisso)) $fisso=0; #se fisso=1 il premio di maggioranza Ú fisso
216if (isset($votol)) {$votolista=$votol; $fisso=$votol;} #se votolista=1 c'e' voto di lista
217if (!isset($sincons)) $sincons=0; #se sincons=1 il sindaco eletto occupa un posto di consigliere
218####################### DA TOGLIERE
219$sql="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";
220#$sql="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";
221$res = $dbi->prepare("$sql");
222$res->execute();
223$numgruppi=$res->rowCount();
224#######################
225
226
227$sql = "SELECT sum(validi_lista+contestati_lista) from ".$prefix."_ele_sezioni where id_cons='$id_cons'";
228$res = $dbi->prepare("$sql");
229$res->execute();
230list($valista)=$res->fetch(PDO::FETCH_NUM);
231$PNE=_PRIMONON;
232$CSEC=_SINDCONS;
233$sorteggio=0;
234$sindel=0;
235$num_candlst=array();
236$listagruppo=array();
237#funzione di calcolo per comuni fino a 15.000 abitanti (più esattamente fino al valore di $limite)
238$grpcond='';
239if($grp) $grpcond="and t1.num_gruppo='$grp'";
240if ($sincons) $numcons--;
241#$numcons--;
242#carica numero di liste e voti, i voti sono quelli del gruppo se non c'e' voto di lista
243$seggimag=array();
244##########
245# $sql = "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,2";
246
247 ################
248 #seleziona il sindaco (gruppo con più voti) e lista collegata
249# $sql = "SELECT t1.descrizione,t1.num_gruppo,sum(t3.voti) as voti from ".$prefix."_ele_gruppo as t1, ".$prefix."_ele_voti_gruppo as t3 where t1.id_cons='$id_cons' and t1.id_gruppo=t3.id_gruppo group by t1.descrizione, t1.num_gruppo order by voti desc limit 0,2";
250 $sql = "SELECT t1.descrizione,t1.num_gruppo,sum(t3.voti) as voti from ".$prefix."_ele_gruppo as t1, ".$prefix."_ele_voti_gruppo as t3 where t1.id_cons='$id_cons' and t1.id_gruppo=t3.id_gruppo group by t1.descrizione, t1.num_gruppo order by voti desc";
251 $res_per = $dbi->prepare("$sql");
252 $res_per->execute();
253 $votig=0;
254 $conselcsne=array();
255 $desgruppi=array();
256 $arlismag=array();
257 $arlismin=array();
258 $lisvin=0;
259 $gruvin=0;
260 $grumin=0;
261 $votigrumin=0;
262 #Il controllo va spostato nella funzione consiglio() -- riferimento riga 124
263 while(list($descr,$num_gruppo,$voti)= $res_per->fetch(PDO::FETCH_NUM))
264 {
265# $sql = "SELECT t2.id_lista,t2.num_lista,t2.descrizione,sum(t3.voti) from ".$prefix."_ele_lista as t2, ".$prefix."_ele_voti_lista as t3 where t2.id_cons='$id_cons' and t2.id_lista=t3.id_lista and t2.num_gruppo=$num_gruppo group by t2.id_lista,t2.num_lista,t2.descrizione order by voti desc limit 0,1";
266 $desgruppi[$num_gruppo]=$descr;
267 if($voti>=($votig-1)) # and (!$grp or $grp==$num_gruppo)
268 {
269 if($grp and $grp!=$num_gruppo)
270 { #confronta i voti delle liste collegate ai candidati con stesso numero di voti e assegna il seggio a quello le cui liste hanno più voti
271 $sql = "SELECT t2.num_gruppo,sum(t3.voti) from ".$prefix."_ele_lista as t2, ".$prefix."_ele_voti_lista as t3 where t2.id_cons='$id_cons' and t2.id_lista=t3.id_lista and (t2.num_gruppo=$num_gruppo or t2.num_gruppo=$grp) group by t2.num_gruppo order by voti desc";
272 $res_lis = $dbi->prepare("$sql");
273 $res_lis->execute();
274 $votillrif=0;
275 while(list($num_grp,$votill)= $res_lis->fetch(PDO::FETCH_NUM))
276 {
277 if($votill>$votillrif)
278 {
279 $gruvin=$num_grp;
280 $votig=$voti+1;
281 $votillrif=$votill;
282 $grp=$num_grp;
283 }
284 if($grp!=$num_grp)
285 {
286 $sindel=1;
287 $votigrumin=$voti;
288 $conselcsne[0]=array("$CSEC","","",$desgruppi[$num_grp],"","");
289 $grumin=$num_grp;
290 }
291
292 }
293 }else{
294 $gruvin=$num_gruppo;
295 $votig=$voti;
296 if ($grp)
297 $votig++;
298 $votigrumin=$voti;
299 }
300 }
301 elseif($votigrumin and $voti==$votigrumin)
302 { #confronta i voti delle liste collegate ai candidati con stesso numero di voti e assegna il seggio a quello le cui liste hanno più voti
303 $sql = "SELECT t2.num_gruppo,sum(t3.voti) from ".$prefix."_ele_lista as t2, ".$prefix."_ele_voti_lista as t3 where t2.id_cons='$id_cons' and t2.id_lista=t3.id_lista group by t2.num_gruppo order by voti desc";
304 $res_lis = $dbi->prepare("$sql");
305 $res_lis->execute();
306 $votillrif=0;
307 while(list($num_grpmin,$votill)= $res_lis->fetch(PDO::FETCH_NUM))
308 if($voti>=$validi/5 and $votill>$votillrif) {$sindel=1; $votigrumin=$voti; $conselcsne[0]=array("$CSEC","","",$descr,"",""); $grumin=$num_gruppo;}
309 }else{
310 if($voti>=$validi/5 and !$sindel) {$sindel=1; $conselcsne[0]=array("$CSEC","","",$descr,"",""); }
311 $votigrumin=$voti;
312 $grumin=$num_gruppo;
313 }
314 if(!isset($conselcsne[0][0])) $conselcsne[0]=array("<br><b>Consiglieri di minoranza</b>","","","","","");
315#######
316
317 }
318#####
319 $sql = "SELECT t1.descrizione,t1.num_gruppo,sum(t3.voti) as voti from ".$prefix."_ele_gruppo as t1, ".$prefix."_ele_voti_gruppo as t3 where t1.id_cons='$id_cons' and t1.id_gruppo=t3.id_gruppo and t1.num_gruppo=$grp or t1.num_gruppo=$grumin group by t1.descrizione, t1.num_gruppo order by voti desc";
320 $res_per = $dbi->prepare("$sql");
321 $res_per->execute();
322 while(list($descr,$num_gruppo,$voti)= $res_per->fetch(PDO::FETCH_NUM))
323 {
324 $sql = "SELECT t2.id_lista,t2.num_lista,t2.descrizione,sum(t3.voti) from ".$prefix."_ele_lista as t2, ".$prefix."_ele_voti_lista as t3 where t2.id_cons='$id_cons' and t2.id_lista=t3.id_lista and t2.num_gruppo=$num_gruppo group by t2.id_lista,t2.num_lista,t2.descrizione order by voti desc";
325 $res_lis = $dbi->prepare("$sql");
326 $res_lis->execute();
327 while(list($id_lista1,$num_lista,$descr_lista,$votil)= $res_lis->fetch(PDO::FETCH_NUM))
328 {
329 $listagruppo[$num_lista]=$num_gruppo;
330 if($grp==$num_gruppo)
331 {
332 $arlismag[$num_gruppo][]=$num_lista;
333 if(!$lisvin ) {$lisvin=$num_lista; }
334 }else{
335 $arlismin[$num_gruppo][]=$num_lista;
336 }
337 }
338 }
339#####
340 #seleziona la lista (o liste) con più voti
341 $sql = "SELECT t1.descrizione, t2.id_lista,t2.num_lista, t1.num_gruppo, sum(t2.voti) as voti from ".$prefix."_ele_voti_lista as t2 left join ".$prefix."_ele_lista as t1 on t1.id_lista=t2.id_lista where t2.id_cons='$id_cons' and (t1.num_gruppo=$grp or t1.num_gruppo=$grumin) group by t2.id_lista,t2.num_lista,t1.num_gruppo, t1.descrizione order by voti desc";
342 $res_per = $dbi->prepare("$sql");
343 $res_per->execute();
344 $seggi=array();
345 $idlst= array();
346 $desliste=array();
347 $lists=array();
348# $votimax=0;
349 $contalst=0;
350 $mag=intval($valista/2)+1;
351 $lim5=intval($validi/20);
352 $varmag=0;
353 $prevoti=0;
354 $lav=0;
355#aggiungo $num_gruppo per creare due array, uno per le liste di maggioranza e uno per la minoranza, le liste che non raggiungono il 5% vengono escluse
356 while(list($descr_lista,$id_lista2,$num_lista,$num_gruppo,$voti)= $res_per->fetch(PDO::FETCH_NUM)){
357 if($voti<$prevoti)
358 if($num_lista!=$lisvin)
359 {
360 if($lav) break;
361 else continue;
362 }
363 if($voti<=$lim5) break;
364 if($voti>=$mag) {
365 $desliste[$num_lista]=$num_lista.") ".$descr_lista;
366 $quozienti[$num_lista]=$voti;
367 $lists[$num_lista]=$voti;
368 $idlst[$num_lista]=$id_lista2;
369 if($num_lista===$lisvin) {
370 $seggi[$num_lista]=number_format($numcons/3*2);
371 $varmag=1;
372 continue;
373 }else{
374 $seggimin[$num_lista]=number_format($numcons*0.6,0);
375 $seggi[$lisvin]=number_format($numcons*0.4,0);
376 $prevoti=$voti;
377 $varmag=1;
378 $contalst++;
379 continue;
380 }
381 }else{
382 if($num_lista!=$lisvin) $contalst++;
383 $quozienti[$num_lista]=$voti;
384 $desliste[$num_lista]=$num_lista.") ".$descr_lista;
385 $lists[$num_lista]=$voti;
386 $idlst[$num_lista]=$id_lista2;
387 if($num_lista==$lisvin and !$varmag)
388 $seggi[$num_lista]=number_format($numcons/3*2);
389 elseif($num_lista!=$lisvin)
390 $seggimin[$num_lista]=number_format($numcons/3);
391 }
392 if($num_lista!=$lisvin) $prevoti=$voti;
393 else $lav=1;
394 }
395 if(!isset($seggi[$lisvin])) $seggi[$lisvin]=number_format($numcons/3*2,0);
396$consel=array();
397$conselmin=array();
398$consel[]=array(_LISTA,_VOTI,_SEGGI,_CANDIDATO,_CIFRAELE,_QUOZIENTI);
399foreach ($idlst as $lista=>$id_lista){
400 $sql = "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,descr";
401 $res_can = $dbi->prepare("$sql");
402 $res_can->execute();
403 $num_candlst[$lista]=$res_can->rowCount();
404 $pos=0;
405 while(list($cand,$pre)=$res_can->fetch(PDO::FETCH_NUM)){
406 if(!isset($lists[$lista])) $lists[$lista]=0;
407 $cifra[$lista][$pos]=$lists[$lista]+$pre;
408 $arvin[$lista][$pos++]=$cand;
409 }
410}
411 if(isset($mex))
412 echo "$mex";
413 foreach ($seggi as $lista=>$val){
414 for ($z=0;$z<$val;$z++){
415 if ($z) $consel[]=array("","","",$arvin[$lista][($z)],$cifra[$lista][($z)],number_format($quozienti[$lista]/($z+1),2,',','.'));
416 else $consel[]=array($desliste[$lista],$lists[$lista],$val,$arvin[$lista][($z)],$cifra[$lista][($z)],number_format($quozienti[$lista]/($z+1),2,',','.'));
417 }
418 }
419 if($arvin[$lista][($z)]) $consel[]=array($desliste[$lista],"$PNE","",$arvin[$lista][($z)],$cifra[$lista][($z)],number_format($quozienti[$lista]/($z+1),2,',','.'));
420 $assegnato=0;
421 $sorteggio=0;
422 foreach ($seggimin as $lista=>$val){
423 if ($consin and $val>0 and $sindel){
424 $val--;
425 }
426 $val=number_format($val/$contalst);
427 if($val%$contalst) $sorteggio=1;
428 for ($z=0;$z<$val;$z++){
429 if ($z) $conselmin[]=array("","","",$arvin[$lista][($z)],$cifra[$lista][($z)],number_format($quozienti[$lista]/($z+1),2,',','.'));
430 else $conselmin[]=array($desliste[$lista],$lists[$lista],$val,$arvin[$lista][($z)],$cifra[$lista][($z)],number_format($quozienti[$lista]/($z+1),2,',','.'));
431 }
432 if($arvin[$lista][($z)]) $conselmin[]=array($desliste[$lista],"$PNE","",$arvin[$lista][($z)],$cifra[$lista][($z)],number_format($quozienti[$lista]/($z+1),2,',','.'));
433 }
434 foreach($conselcsne as $key=>$val)
435 {
436 $consel[]=array($val[0],$val[3]);
437 }
438 foreach($conselmin as $key=>$val)
439 {
440 $consel[]=array($val[0],$val[1],$val[2],$val[3],$val[4],$val[5]);
441 }
442
443
444# echo "<br> lisvin: $lisvin";
445 echo "<table summary=\"Tabella dei consiglieri eletti\" class=\"table-docs\" cellspacing=\"0\" cellpadding=\"2\" border=\"1\" rules=\"all\">";
446 echo "<tr class=\"bggray\"><td scope=\"row\">";
447 echo _SINDACO.": ".$desgruppi[$listagruppo[$lisvin]]."</td></tr></table>";
448 stampalista($consel);
449}
450#####################
451
452function consmin($fascia,$grp) {
453global $id_cons, $prefix,$dbi,$num_candlst,$quozienti,$PNE,$CSEC,$consin,$numcons,$inffisso;
454global $infpremio,$fisso,$sincons, $votol;
455if (!isset($fisso)) $fisso=0; #se fisso=1 il premio di maggioranza Ú fisso
456if (isset($votol)) {$votolista=$votol; $fisso=$votol;} #se votolista=1 c'e' voto di lista
457if (!isset($sincons)) $sincons=0; #se sincons=1 il sindaco eletto occupa un posto di consigliere
458$sql="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";
459$res = $dbi->prepare("$sql");
460$res->execute();
461$numgruppi=$res->rowCount();
462$PNE=_PRIMONON;
463$CSEC=_SINDCONS;
464$sorteggio=0;
465$num_candlst=array();
466#funzione di calcolo per comuni fino a 15.000 abitanti (più esattamente fino al valore di $limite)
467
468if ($sincons) $numcons--;
469#$numcons--;
470$consel=array();
471$conselcsne=array();
472$conselmin=array();
473//$consel[]=array("Lista","Voti","Seggi","Nominativo","Cifra Elettorale","Quoziente");
474$consel[]=array(_LISTA,_VOTI,_SEGGI,_CANDIDATO,_CIFRAELE,_QUOZIENTI);
475#carica numero di liste e voti, i voti sono quelli del gruppo se non c'e' voto di lista
476if($inffisso=='1')
477 $sql = "SELECT sum(validi+contestati) from ".$prefix."_ele_sezioni where id_cons='$id_cons'";
478elseif($votolista=='0')
479 $sql = "SELECT sum(validi) from ".$prefix."_ele_sezioni where id_cons='$id_cons'";
480else
481 $sql = "SELECT sum(voti) from ".$prefix."_ele_voti_lista where id_cons='$id_cons'";
482$res_val = $dbi->prepare("$sql");
483$res_val->execute();
484list($validi) = $res_val->fetch(PDO::FETCH_NUM);
485#se votolista==1, Ú abilitato il voto di lista ed Ú quello su cui si calcola l'assegnazione dei seggi
486if ($fisso==1){
487 #seleziona il sindaco (gruppo con più voti) e lista collegata
488 $sql = "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.id_lista,t2.num_lista,t2.descrizione order by voti desc limit 0,1";
489 $res_per = $dbi->prepare("$sql");
490 $res_per->execute();
491 list($descr,$num_gruppo,$id_lista1,$num_lista,$descr_lista,$voti)= $res_per->fetch(PDO::FETCH_NUM);
492 #seleziona la lista di minoranza con più voti
493 $sql = "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";
494 $res_per = $dbi->prepare("$sql");
495 $res_per->execute();
496 list($id_lista2,$voti)= $res_per->fetch(PDO::FETCH_NUM);
497 #e la lista di minoranza
498 $ordine= $id_lista1>$id_lista2 ? "desc":"";
499 $sql = "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";
500 $res_per = $dbi->prepare("$sql");
501 $res_per->execute();
502}else{
503 $sql = "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.id_lista,t2.num_lista,t2.descrizione order by voti desc";
504 $res_per = $dbi->prepare("$sql");
505 $res_per->execute();
506}
507$groups=array();
508$seggimag=array();
509$premio=0;
510$x=0;
511#carica l'array dei gruppi e della cifra di gruppo
512while (list($descr,$num_gruppo,$id_lista,$num_lista,$descr_lista,$voti)= $res_per->fetch(PDO::FETCH_NUM)){
513 $desgruppi[$num_gruppo]=$descr;
514 $desliste[$num_lista]=$num_lista.") ".$descr_lista;
515 $idlst[$num_lista]=$id_lista;
516 $listagruppo[$num_lista]=$num_gruppo;
517 $lists[$num_lista]=$voti;
518 if ($grp){
519 if ($grp!=$num_gruppo) {$groups[($num_gruppo)]=$voti;$listemin[$num_lista]=$voti;}
520 else {$gruppo[($num_gruppo)]=$voti;$listemag[$num_lista]=$voti;$lisvin=$num_lista;}
521 }else{
522 if ($x) {$groups[($num_gruppo)]=$voti;$listemin[$num_lista]=$voti;}
523 else {$gruppo[($num_gruppo)]=$voti;$listemag[$num_lista]=$voti;$lisvin=$num_lista;}
524 }
525 $x++;
526 }#controllo del premio di maggioranza
527 // if ($gruppo[$listagruppo[$lisvin]]>($validi*2/3))
528 if($numgruppi==1) $fisso=1;
529 if ($gruppo[$listagruppo[$lisvin]]>($validi*$infpremio/100) and $fisso==1)
530 {
531 $seggimag[$lisvin]=number_format($numcons*($gruppo[$listagruppo[$lisvin]]*100/$validi)/100);
532 ##echo "<br> seggimag:".$seggimag[$lisvin];
533 $num_cons=number_format($numcons-$seggimag[$lisvin]);
534 # $num_cons=$numcons;
535 } else {
536// $seggimag[$lisvin]=number_format($numcons*2/3);
537// $num_cons=number_format($numcons/3);
538 $seggimag[$lisvin]=number_format($numcons*$infpremio/100);
539 $num_cons=number_format($numcons-$seggimag[$lisvin]);
540 }
541 foreach ($listagruppo as $lista=>$val){
542 $id_lista=$idlst[$lista];
543 $sql = "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,descr";
544 $res_can = $dbi->prepare("$sql");
545 $res_can->execute();
546 $num_candlst[$lista]=$res_can->rowCount();
547 $pos=0;
548 while(list($cand,$pre)=$res_can->fetch(PDO::FETCH_NUM)){
549 if(!isset($lists[$lista])) $lists[$lista]=0;
550 $cifra[$lista][$pos]=$lists[$lista]+$pre;
551 $arvin[$lista][$pos++]=$cand;
552 }
553 }
554 if ($num_candlst[$lisvin]<$seggimag[$lisvin]) {
555 $num_cons+=$seggimag[$lisvin]-$num_candlst[$lisvin];
556 $seggimag[$lisvin]=$num_candlst[$lisvin];
557 }
558 if (isset($gruppo[$listagruppo[$lisvin]])) $seggimag=calcoloseggi($listemag,$seggimag[$lisvin],1);
559 if(isset($mex))
560 echo "$mex";
561 foreach ($seggimag as $lista=>$val)
562 for ($z=0;$z<$val;$z++){
563 if ($z) $consel[]=array("","","",$arvin[$lista][($z)],$cifra[$lista][($z)],number_format($quozienti[$lista][$z],2));
564 else $consel[]=array($desliste[$lista],$lists[$lista],$val,$arvin[$lista][($z)],$cifra[$lista][($z)],number_format($quozienti[$lista][$z],2));
565 }
566 if($arvin[$lista][($z)]) $consel[]=array($desliste[$lista],"$PNE","",$arvin[$lista][($z)],$cifra[$lista][($z)],number_format($quozienti[$lista][$z],2));
567 $seggimin=array();
568 $assegnato=0;
569 $corrente=0;
570 $seggimin=calcoloseggi($listemin,$num_cons,1);
571 foreach ($seggimin as $lista=>$val){
572 if ($consin and $val>0 and (!$assegnato or !$inffisso)){
573 $conselcsne[]=array("$CSEC","","",$desgruppi[$listagruppo[$lista]],"","");
574 $val--;
575 $assegnato=1;
576 $corrente=1;
577 }
578 for ($z=0;$z<$val;$z++){
579 if ($z) $conselmin[]=array("","","",$arvin[$lista][($z)],$cifra[$lista][($z)],number_format($quozienti[$lista][$z],2));
580 else $conselmin[]=array($desliste[$lista],$lists[$lista],$val,$arvin[$lista][($z)],$cifra[$lista][($z)],number_format($quozienti[$lista][$z],2));
581 }
582 if($arvin[$lista][($z)] and $corrente) $conselmin[]=array($desliste[$lista],"$PNE","",$arvin[$lista][($z)],$cifra[$lista][($z)],number_format($quozienti[$lista][$z],2));
583 $corrente=0;
584 }
585 foreach($conselcsne as $key=>$val)
586 {
587 $consel[]=array($val[0],$val[3]);
588 }
589 foreach($conselmin as $key=>$val)
590 {
591 $consel[]=array($val[0],$val[1],$val[2],$val[3],$val[4],$val[5]);
592 }
593
594
595
596 echo "<table summary=\"Tabella dei consiglieri eletti\" class=\"table-docs\" cellspacing=\"0\" cellpadding=\"2\" border=\"1\" rules=\"all\">";
597 echo "<tr class=\"bggray\"><td scope=\"row\">";
598 echo _SINDACO.": ".$desgruppi[$listagruppo[$lisvin]]."</td></tr></table>";
599 stampalista($consel);
600
601
602}
603
604function calcoloseggi($gruppi,$num_cons,$flag){
605global $ultimo,$mex,$sorteggio,$quozienti,$num_cand,$num_candlst;
606
607#carica le preferenze
608$pref = array();
609$ultimo=0;
610$mex='';
611$sorteggio=0;
612$eletti = array();
613$ele = array();
614$quozienti = array();
615$num_quoz= $num_cons;
616#inizializza l'array degli eletti
617foreach ($gruppi as $x=>$val){
618 $eletti[$x]=0;
619 }
620#carica gli array dei quozienti
621foreach($gruppi as $y=>$tmp){
622
623 if($flag) $num_quoz= $num_cons<$num_candlst[$y] ? $num_cons:$num_candlst[$y];
624 if(!isset($ele[$y][0])) $ele[$y][0]=0;
625 for ($x=0;$x<=$num_quoz;$x++){
626 $ele[$y][$x]= $tmp/($x+1);
627 $quozienti[$y][$x]= $tmp/($x+1); ###echo "<br>[$y][$x]=".$tmp/($x+1);
628 }
629}
630#estrae i quozienti piu' alti
631for ($y=0;$y<$num_cons;$y++){
632 $temp=0;
633 $cand=0;
634 if(! isset($pref['0'])) $pref['0']='';
635 if(! isset($pref['1'])) $pref['1']='';
636 foreach($gruppi as $x=>$tmp){
637 if(!isset($ele[$x][0])) $ele[$x][0]=0;
638 if(!isset($pref[$x])) $pref[$x]=0;
639 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);}
640 if ($ele[$x][0]>$temp or ($ele[$x][0]==$temp and $pref[$x]>$pref[$cand])) {
641 $temp=$ele[$x][0];
642 $cand=$x;
643 $sorteggio=0;$mex='';
644 }
645 }
646 if (!$sorteggio and $cand){
647 $eletti[$cand]++;
648 $ultimo=$cand;
649 array_shift($ele[$cand]);
650 }
651}
652return ($eletti);
653}
654
655function stampalista($ar) {
656global $PNE,$CSEC;
657$cmin=_SEGGIMIN;
658$csin="";
659 $bg='bgw';
660
661 $tmpbg='bggray2';
662 $tmpbg1='bgw';
663 $tmpbg2='bggray';
664 $tmpbg3='bggray2';
665 $fmin=2;
666 echo "<table summary=\"Tabella dei consiglieri eletti\" class=\"table-docs\" cellspacing=\"0\" cellpadding=\"2\" border=\"1\" rules=\"all\">";
667 $y=1;$i='';$e=0;
668 foreach ($ar as $riga) {
669 $e++;
670 if($riga[0]==$CSEC and $fmin==2)
671 {
672 { $fmin=1;
673 echo "</table>";
674 echo "<table summary=\"Tabella dei candidati sindaco eletti consigliere\" class=\"table-docs\" cellspacing=\"0\" cellpadding=\"2\" border=\"1\" rules=\"all\">";
675 echo "<tr class=\"bggray\"><td scope=\"row\" colspan=\"3\"><b>";
676 echo $csin;
677 echo "</b></td></tr>";
678 echo "<tr class=\"bggray\"><td scope=\"row\"><b>"._CANDIDATO."</b></td><td scope=\"row\"><b>"._NOMINATIVO."</b></td></tr>";
679 }
680 }
681 if($riga[0]!=$CSEC and $fmin==1)
682 { $fmin=0;
683 echo "</table>";
684 echo "<table summary=\"Tabella dei consiglieri di minoranza\" class=\"table-docs\" cellspacing=\"0\" cellpadding=\"2\" border=\"1\" rules=\"all\">";
685 echo "<tr class=\"bggray\"><td scope=\"row\" colspan=\"6\"><b>";
686 echo $cmin;
687 echo "</b></td></tr>";
688 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>";
689 }
690 if($riga[1]==$PNE) echo "<tr class=\"red\">";
691 else{
692 $bg= ($riga[1]) ? $tmpbg3:$tmpbg1;
693 if($y) {
694 echo "<tr class=\"bggray\">";
695 }else{
696 echo "<tr class=\"$bg\">";
697 }
698 }
699 $z=0;
700 foreach ($riga as $cella) {
701 if ($e==1){
702 $t="<th scope=\"colgroup\"";$f="</th>";
703 }else{
704 $t="<td scope=\"row\"";$f="</td>";
705 }
706 if($z==0 or $z==3)
707 echo "$t $i align=\"left\">$cella $f";
708 else
709 echo "$t $i align=\"right\">$cella $f";
710 $i='';
711 $z++;
712 }
713 if ($y) $y=0;
714 echo "</tr>";
715 }
716 echo "</table>";
717
718}
719
720function conssup($fascia,$gruppo,$collegate,$collperd,$primoturno) {
721 global $id_cons, $id_cons_gen, $id_comune, $prefix,$dbi;
722 global $groups,$lists,$eletti,$ultimo,$quozienti,$num_candlst,$mex,$PNE,$CSEC,$consin;
723 global $supsbarramento, $supminpremio, $suppremio;
724 global $listsupconta,$numcons;
725 #funzione di calcolo per comuni oltre 15.000 abitanti
726 #carica il numero di consiglieri da eleggere$groups=array();
727 $PNE=_PRIMONON;
728 $CSEC=_SINDCONS;
729 $lists=array();
730 $eletti=array();
731 $num_candlst=array();
732 #$quozienti = array();
733 $oldlists=array();
734 $oldlstgrp=array();
735 $premio=0;
736 /* "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)
737 */
738
739 if (!isset($_SESSION['ballo1'])) $_SESSION['ballo1']='';
740 if (!isset($_SESSION['ballo2'])) $_SESSION['ballo2']='';
741 $gruppoperd= ($gruppo==$_SESSION['ballo1']) ? $_SESSION['ballo2'] : $_SESSION['ballo1'];
742
743 #per voti validi non si intendono i voti validi alle liste ma i voti validi espressi
744 #$res_val = mysql_query("SELECT sum(validi_lista) from ".$prefix."_ele_sezioni where id_cons='$id_cons'",$dbi);
745 $sql = "SELECT sum(voti) from ".$prefix."_ele_voti_gruppo where id_cons='$id_cons'";
746 $res_val = $dbi->prepare("$sql");
747 $res_val->execute();
748
749 list($validi) = $res_val->fetch(PDO::FETCH_NUM);
750
751 $sbarra=($validi*$supsbarramento)/100;
752 $sql = "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.id_lista,t2.num_lista,t2.descrizione order by voti desc";
753 $res_per = $dbi->prepare("$sql");
754 $res_per->execute();
755
756 $groups=array();
757 $premio=0;
758 //10-05-2009 gestione differenziata delle norme elettorali
759 #carica l'array dei gruppi e della cifra di gruppo
760 while (list($descr,$num_gruppo,$id_lista,$num_lista,$descr_lista,$voti)= $res_per->fetch(PDO::FETCH_NUM)){
761 if ($listsupconta or $voti>=$sbarra){
762 if (! isset($groups[($num_gruppo)])) $groups[($num_gruppo)]=0;
763 $desgruppi[$num_gruppo]=$descr;
764 $desliste[$num_lista]=$num_lista.") ".$descr_lista;
765 $idlst[$num_lista]=$id_lista;
766 $listagruppo[$num_lista]=$num_gruppo;
767 $lists[$num_lista]=$voti;
768 $groups[($num_gruppo)]+=$voti;
769 }
770 }
771################### carica array ... 25 maggio 2014
772 foreach($collegate as $key=>$val){
773 $sql = "SELECT id_gruppo from ".$prefix."_ele_lista where num_lista='$val' and id_cons='$id_cons'";
774 $res = $dbi->prepare("$sql");
775 $res->execute();
776 list($tempig)=$res->fetch(PDO::FETCH_NUM);
777 $sql = "SELECT num_gruppo from ".$prefix."_ele_gruppo where id_gruppo='$tempig' and id_cons='$id_cons'";
778 $res = $dbi->prepare("$sql");
779 $res->execute();
780 list($tempng)=$res->fetch(PDO::FETCH_NUM);
781 $grpinc[$val]=$tempng;
782 }
783 $elencog=array();
784 $sindseggiopre=array();
785 foreach($groups as $testk=>$valk) if($testk!=$gruppo) {$elencog[$testk]=$valk;}
786 $testseggio=calcoloseggi($elencog,floor($numcons*(100-$suppremio)/100),0);
787 foreach($testseggio as $testk=>$valk) { $sindseggiopre[]=$testk;}
788##################
789 $descrsind=$desgruppi[$gruppo];
790 foreach ($groups as $key=>$val){
791#controlla se un gruppo di liste, tra quelle perdenti, ha superato il 50%
792 if ($key!=$gruppo and $val> $validi/2) $premio=2;
793#elimina gruppi che non hanno superato lo sbarramento
794 if ($val<$sbarra){
795 foreach ($listagruppo as $lst=>$grp)
796 if ($grp==$key){
797 unset($listagruppo[$lst]);
798 unset($desliste[$lst]);
799 unset($lists[$lst]);
800 }
801 unset($groups[($key)]);
802 unset($desgruppi[($key)]);
803
804 }
805 }
806 foreach ($collegate as $lst)
807 if (isset($lists[$lst])){
808 if($premio){
809 $oldlstgrp[$lst]=$listagruppo[$lst];
810 $oldlists[$lst]=$lists[$lst];
811 }
812 $groups[$listagruppo[$lst]]-=$lists[$lst];
813 $listagruppo[$lst]=$gruppo;
814 $groups[$gruppo]+=$lists[$lst];
815 }
816#controlla se la percentuale del gruppo vincente e' tra il 40 e il 60% o il sindaco e' eletto al secondo turno
817#e se nessun altro gruppo ha superato il 50% assegna il premio di maggioranza
818#e se nessun altro gruppo ha superato il 50% e nessuno ha ottenuto piu' del 60% dei seggi, assegna il premio di maggioranza
819 $consmin=$numcons;
820 $gruppomin=calcoloseggi($groups,$consmin,0);
821 $nopremio=1;
822 if (($groups[$gruppo]>=(($validi*$supminpremio)/100) or ! $primoturno) and $groups[$gruppo]<(($validi*$suppremio)/100) and !$premio and $nopremio) $premio=1;
823 else $premio=0;
824 $consel=array();
825 $consel[]=array(_LISTA,_VOTI,_SEGGI,_CANDIDATO,_CIFRAELE,_QUOZIENTI);
826 $groupsappo=$groups;
827 $candidati=array();
828 $grpperd=$gruppoperd;
829//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%
830//maggio 2011: da qui
831 if(!isset($groups[$gruppoperd])) $groups[$gruppoperd]=0;
832 foreach ($collperd as $lst)
833 if (isset($lists[$lst])){
834 $oldlstgrp[$lst]=$listagruppo[$lst];
835 $listagruppo[$lst]=$gruppoperd;
836 $oldlists[$lst]=$lists[$lst];
837 $groups[$gruppoperd]+=$lists[$lst];
838 $groups[$oldlstgrp[$lst]]-=$lists[$lst];
839 }
840////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.
841 if ($premio) {
842################### nell'array sindseggio vengono inseriti i candidati sindaco che restano senza seggio per gli apparentamenti
843 $elencog=array();
844 $testseggio=array();
845 $sindseggio=array();
846 foreach($groups as $testk=>$valk) {if($testk!=$gruppo) $elencog[$testk]=$valk;}
847 $perdente[$gruppoperd]=$groups[$gruppoperd];
848 $testseggio=calcoloseggi($elencog,floor($numcons-$numcons*($suppremio)/100),0);
849 foreach($testseggio as $testk=>$valk)
850 foreach($sindseggiopre as $testk=>$valk){ if(isset($testseggio[$valk]) and $testseggio[$valk]) continue; $sindseggio[$valk]=$valk;}
851 $sindaco[$gruppo]=$groups[$gruppo]; $groups[$gruppo]=0;
852 $gruppomag=calcoloseggi($sindaco,ceil($numcons*$suppremio/100),0);
853#######calcola i seggi per lista
854 foreach ($gruppomag as $key=>$val){
855 foreach($listagruppo as $lst=>$grp){
856 if($grp!=$key) continue;
857 $id_lista=$idlst[$lst];
858 $x=$lst;
859 $y=$lists[$x];
860 $pos=0;
861 $z=0;
862 $arvin[$x][$pos++]=$desliste[$lst];
863 $sql = "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 t1.num_cand,t1.cognome,t1.nome order by voti desc,t1.num_cand";
864 $res_can = $dbi->prepare("$sql");
865 $res_can->execute();
866 $num_candlst[$x]=$res_can->rowCount();
867 while(list($cand,$pre)=$res_can->fetch(PDO::FETCH_NUM)){
868 $cifra[$x][$pos]=$y+$pre;
869 $arvin[$x][$pos++]=$cand;
870 }
871 $listemag[$x]=$y;
872 $desliste[$x]=$descr;
873 $percliste[$x]="<br/>$y (".number_format($y*100/$validi,2)."%)";
874 $z++;
875 $seggimag=array();
876 $x=0;
877#####25 maggio 2014 - il candidato sindaco non eletto ha diritto al seggio anche se di maggioranza
878### individua ultimi seggi assegnati a liste collegate
879 if($grp==$gruppo){
880 $listdec =array();
881 $seggitmp=calcoloseggi($listemag,$val,1);
882 foreach ($seggitmp as $keyl=>$vall){
883 if($vall==0) continue;
884 $sql = "SELECT id_gruppo from ".$prefix."_ele_lista where num_lista='$keyl' and id_cons='$id_cons'";
885 $res = $dbi->prepare("$sql");
886 $res->execute();
887 list($tempig)=$res->fetch(PDO::FETCH_NUM);
888 $sql = "SELECT num_gruppo from ".$prefix."_ele_gruppo where id_gruppo='$tempig' and id_cons='$id_cons'";
889 $res = $dbi->prepare("$sql");
890 $res->execute();
891 list($tempng)=$res->fetch(PDO::FETCH_NUM);
892 if (isset($sindseggio[$tempng])) {$listdec[$tempng][]=$keyl;}
893 }
894 }
895 }
896 $seggimag=calcoloseggi($listemag,$val,1);
897####cerca ultimo seggio assegnato per gruppo di liste collegate al primo turno
898 foreach ($seggimag as $key2=>$val2){
899 if($val2==0) continue;
900 if(isset($grpinc[$key2])) { $tempng=$grpinc[$key2];}
901 if(isset($listdec[$tempng]))
902 foreach($listdec[$tempng] as $ark=>$arv) {
903 if(!isset($ultquoz[($sindseggio[$tempng])]) and $sindseggio[$tempng]) {$ultquoz[($sindseggio[$tempng])]=$quozienti[$arv][($val2-1)];$lastlist[$tempng]=$arv;}
904 elseif ($ultquoz[($sindseggio[$tempng])]>$quozienti[$arv][($val2-1)])
905 {
906 $ultquoz[($sindseggio[$tempng])]=$quozienti[$arv][($val2-1)];$lastlist[($sindseggio[$tempng])]=$arv;
907 }
908 }
909 }
910 foreach ($seggimag as $key2=>$val2){
911## condizione per esclusione di un seggio da destinare al sindaco non eletto in_array($key2,$lastlist)
912 if(isset($lastlist))
913 foreach($lastlist as $key3=>$val3){
914 if($key2==$val3) {
915 $arappo=array_shift($arvin[$key2]);$tpmgrp=0;
916 array_unshift($arvin[$key2],$desgruppi[$key3]); array_unshift($arvin[$key2],$arappo);array_unshift($cifra[$key2],"--");array_unshift($cifra[$key2],"--");
917 }
918 }
919## fine condizione - impostare variabile in db per differenziare il comportamento per consultazioni diverse
920 for ($z=0;$z<$val2;$z++){
921 if ($z) $consel[]=array("","","",$arvin[$key2][($z+1)],$cifra[$key2][($z+1)],number_format($quozienti[$key2][$z],2));
922 else
923 {
924 $consel[]=array($arvin[$key2][0],$percliste[$key2],$val2,$arvin[$key2][($z+1)],$cifra[$key2][($z+1)],number_format($quozienti[$key2][$z],2));
925 $arlisdesv[]=$arvin[$key2][0];$arlissegv[]=$val2;$arlisnumv[]=$key2;
926 }
927 }
928 $x++;
929 if($val2)
930 $consel[]=array($arvin[$key2][0],"$PNE","",$arvin[$key2][($z+1)],$cifra[$key2][($z+1)],number_format($quozienti[$key2][$z],2));
931 }
932 }
933 }
934 if ($premio) $consmin=floor($numcons*(100-$suppremio)/100);
935 else $consmin=$numcons;
936#####calcolo per la minoranza o in caso non ci sia premio di maggioranza
937 $gruppomin=calcoloseggi($groups,$consmin,0);
938 $ordinati[$gruppo]=$gruppomin[$gruppo];
939 foreach ($gruppomin as $key=>$val){
940 if($key!=$gruppo) $ordinati[$key]=$val;
941 }
942 $gruppomin=$ordinati;
943 foreach ($gruppomin as $key=>$val){
944 if($premio and $key==$gruppo) continue;
945 $listemin=array();
946 $cifra=array();
947 foreach($listagruppo as $lst=>$grp){
948 if($grp!=$key) continue;
949 $id_lista=$idlst[$lst];
950 $x=$lst;
951 $y=$lists[$x];
952 $pos=0;
953 $z=0;
954 $pos=0;$z=0;
955 if(!$premio and $key==$gruppo) $arvin[$x][$pos++]=$desliste[$lst];
956 else $arper[$x][$pos++]=$desliste[$lst];
957 $sql = "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";
958 $res_can = $dbi->prepare("$sql");
959 $res_can->execute();
960 $num_candlst[$x]=$res_can->rowCount();
961 while(list($cand,$pre)=$res_can->fetch(PDO::FETCH_NUM)) {
962 $cifra[$x][$pos]=$y+$pre;
963 if(!$premio and $key==$gruppo)
964 $arvin[$x][$pos++]=$cand;
965 else
966 $arper[$x][$pos++]=$cand;
967 }
968 $listemin[$x]=$y;
969 $desliste[$x]=$descr;
970 $percliste[$x]="<br/>$y (".number_format($y*100/$validi,2)."%)";
971 }
972 $seggimin=array();
973 echo "$mex";
974 $ultimo='';
975 $seggimin=calcoloseggi($listemin,$val,1);
976 echo "$mex";
977 if(!$premio and $key==$gruppo)
978 foreach ($seggimin as $lista=>$valc){
979 $arper[$lista]=$arvin[$lista];
980 }
981 if ($val and $key!=$gruppo and $consin) {$conselsin[]=array("$CSEC",$desgruppi[$key]); $arcansin[]=$desgruppi[$key];}
982 foreach ($seggimin as $lista=>$val)
983 if(isset($oldlstgrp[$lista]) and !isset($oldseggi[$lista])) {$oldseggi[$lista]=$val;
984 }
985 if($val==0){
986 if($ultimo==''){
987 foreach($oldlists as $lst=>$vot)
988 {
989 if (!isset($quozienti[$lst][($val)])) $quozienti[$lst][($val)]=$vot;
990 if ($oldlstgrp[$lst]!= $key or !isset($oldseggi[$lst]) or $oldseggi[$lst]==0) continue;
991 if($ultimo=='') $ultimo=$lst;
992 if($quozienti[$ultimo][($val)]==$last[$lst])
993 {
994 if($lists[$ultimo]==$lists[$lst] and $ultimo!=$lst) $mex="Per attribuire l'ultimo seggio Ú necessario un sorteggio tra la lista n. $ultimo e la lista n. $lst";
995 elseif($lists[$ultimo]>$lists[$lst]) {$ultimo=$lst;$mex="";}
996 }
997 if ($quozienti[$ultimo][($val)]> $last[$lst]) {$ultimo=$lst;$mex="";}
998 }
999 $lst=$ultimo;
1000 if($ultimo and $consin){
1001 if($conselb[$ttl[($lst)]][2]>1) $conselb[$ttl[($lst)]][2]--;else $conselb[$ttl[($lst)]][2]='';
1002 $daunset[]=$tt[($lst)];
1003 $conselsin[]=array("$CSEC",$desgruppi[$key]);
1004 $arcansin[]=$desgruppi[$key];
1005 }
1006 }
1007 }
1008 foreach ($seggimin as $lista=>$val){
1009 if($ultimo==$lista and $key!=$gruppo and $consin) $val--;
1010 }
1011 foreach ($seggimin as $lista=>$val){
1012 if($ultimo==$lista and $key!=$gruppo and $consin) $val--;
1013 for ($z=0;$z<$val;$z++){
1014 if ($z) $conselb[]=array("","","",$arper[$lista][($z+1)],$cifra[$lista][($z+1)],number_format($quozienti[$lista][$z],2));
1015 else{
1016 if(!isset($arper[$lista][($z+1)])) $arper[$lista][($z+1)]=0;
1017 if(!isset($cifra[$lista][($z+1)])) $cifra[$lista][($z+1)]=0;
1018 $conselb[]=array($arper[$lista][0],$percliste[$lista],$val,$arper[$lista][($z+1)],$cifra[$lista][($z+1)],number_format($quozienti[$lista][$z],2));
1019 $ttl[$lista]=(count($conselb)-1);
1020 }
1021 }
1022 if (isset($oldlists[$lista]))
1023 {
1024 $tt[$lista]=(count($conselb)-1);
1025 if($z) $last[$lista]=$quozienti[$lista][($z-1)]; else $last[$lista]=0;
1026 }
1027 if($val){
1028 if(!isset($arper[$lista][($z+1)])) $arper[$lista][($z+1)]=0;
1029 if(!isset($cifra[$lista][($z+1)])) $cifra[$lista][($z+1)]=0;
1030 if(!isset($quozienti[$lista][$z])) $quozienti[$lista][$z]=0;
1031 $conselb[]=array($arper[$lista][0],"$PNE","",$arper[$lista][($z+1)],$cifra[$lista][($z+1)],number_format($quozienti[$lista][$z],2));
1032 }
1033 }
1034 }//chiude foreach gruppomin
1035 echo "<table summary=\"Tabella dei consiglieri eletti\" class=\"table-docs\" cellspacing=\"0\" cellpadding=\"2\" border=\"1\" rules=\"all\">";
1036 echo "<tr class=\"bggray\"><td scope=\"row\"><b>";
1037 echo _SINDACO.": ".$desgruppi[$gruppo]."</b></td></tr></table>";
1038 if(isset($daunset)){
1039 if ((sort($daunset,SORT_NUMERIC))==false) echo "Errore di programma!";
1040 ELSE {
1041 $tmpda=array_reverse($daunset);
1042 foreach($tmpda as $key=>$val) {
1043 $conselb[$val][0]=$conselb[($val+1)][0];$conselb[$val][1]=$conselb[($val+1)][1];
1044 unset($conselb[($val+1)]);
1045 }
1046 }
1047 }
1048 if (!$premio)
1049 {
1050 foreach($conselb as $key=>$val)
1051 {
1052 if ($val[2]){
1053 $nlst=intval($val[0]);
1054 $arlisdesv[]=$val[0];
1055 $arlissegv[]=$val[2];
1056 }
1057 if($listagruppo[$nlst]!=$gruppo) continue;
1058 $consel[]=array($val[0],$val[1],$val[2],$val[3],$val[4],$val[5]);
1059 }
1060 }
1061 if (isset($conselsin)) foreach($conselsin as $key=>$val)
1062 {
1063 $consel[]=array($val[0],$val[1]);
1064 }
1065 foreach($conselb as $key=>$val)
1066 {
1067 if ($val[2]){
1068 $nlst=intval($val[0]);
1069 $arlisdesp[]=$val[0];
1070 $arlissegp[]=$val[2];
1071 }
1072 if($listagruppo[$nlst]==$gruppo) continue;
1073 $consel[]=array($val[0],$val[1],$val[2],$val[3],$val[4],$val[5]);
1074 }
1075 stampalista($consel);
1076 unset($_SESSION['ballo1']);unset($_SESSION['ballo2']);unset($_SESSION['grp1']);unset($_SESSION['grp2']);
1077}
1078
1079?>
Note: See TracBrowser for help on using the repository browser.