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

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