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

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