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

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