public function executeSioccupadi() { $options = array('limit' => 20, 'sort_by_relevance' => true); // estrazione tag, tipo firma, tipo atto // questo dovrebbe andare in TagPeer, ma romperebbe la neutralità del plugin $c = new Criteria(); $c->addJoin(OppCaricaHasAttoPeer::ATTO_ID, OppAttoPeer::ID); $c->addJoin(TaggingPeer::TAGGABLE_ID, OppAttoPeer::ID); $c->addJoin(TagPeer::ID, TaggingPeer::TAG_ID); $c->add(OppCaricaHasAttoPeer::CARICA_ID, $this->carica->getId()); $c->add(TaggingPeer::TAGGABLE_MODEL, 'OppAtto'); $c->clearSelectColumns(); $c->addSelectColumn(TagPeer::TRIPLE_VALUE); $c->addSelectColumn(OppCaricaHasAttoPeer::TIPO); $c->addSelectColumn(OppAttoPeer::TIPO_ATTO_ID); // costruzione array associativo dei tag $tags = array(); $rs = TagPeer::doSelectRS($c); while ($rs->next()) { $value = $rs->getString(1); $tipo = $rs->getString(2); $tipo_atto_id = $rs->getInt(3); if (!array_key_exists($value, $tags)) { $tags[$value] = 0; } $tags[$value] += OppCaricaHasAttoPeer::get_fattore_firma($tipo) * OppAttoPeer::get_fattore_tipo_atto($tipo_atto_id); } // ordinamento per rilevanza, prima dello slice arsort($tags); // slice dell'array, se specificata l'opzione limit if (isset($options['limit']) && count($tags) > $options['limit']) { $this->n_remaining_tags = count($tags) - $options['limit']; $tags = array_slice($tags, 0, $options['limit'], true); } // ordinamento per triple_value, in caso sort_by_relevance non sia specificato if (!isset($options['sort_by_relevance']) || true !== $options['sort_by_relevance']) { krsort($tags); } $this->tags = $tags; }
/** * estrae tutte le firme fino a una certa data * * @param string $data * @return array di OppCaricaHasAtto * @author Guglielmo Celata */ public function getFirme($data) { return OppCaricaHasAttoPeer::getFirme($this->getId(), $data); }
/** * torna un array associativo di politici che si occupano di certi argomenti, * ordinati in base al punteggio, con eventuale limit * * @param array $argomenti_ids * @param string $ramo (C o S) * @param integer $gruppo_id filtro opzionale per gruppo * @param boolean fetch_interventi (se fetchare o meno gli interventi) * @return array di hash, con chiave carica_id * - politico_id, * - nome, cognome, acronimo, * - punteggio * @author Guglielmo Celata */ public static function getClassificaPoliticiSiOccupanoDiArgomenti($argomenti_ids, $ramo, $data, $limit = null, $gruppo_ids = null, $fetch_interventi = true) { // definizione array tipi di cariche if ($ramo == 'C') { $tipi_cariche = array(1); } else { if ($ramo == 'S') { $tipi_cariche = array(4, 5); } else { $tipi_cariche = array(1, 4, 5); } } if (is_array($gruppo_ids)) { if (count($gruppo_ids) > 0) { $group_constraint = sprintf(" and g.id in (%s) ", implode(", ", $gruppo_ids)); } else { $group_constraint = ''; } } else { if (is_null($gruppo_ids)) { $group_constraint = ''; } else { $group_constraint = " and g.id = {$gruppo_ids} "; } } // Firme // estrazione di tutte le firme relative ad atti non-omnibus taggati con argomento $con = Propel::getConnection(self::DATABASE_NAME); $sql = sprintf("select p.nome, p.cognome, p.id as politico_id, g.acronimo, c.id as carica_id, c.circoscrizione, ca.tipo, ca.atto_id, ah.indice, ah.priorita from opp_carica c, opp_carica_has_atto ca, opp_carica_has_gruppo cg, opp_gruppo g, sf_tagging t, opp_act_history_cache ah, opp_politico p, opp_atto a where p.id=c.politico_id and c.id=ca.carica_id and cg.carica_id=c.id and cg.data_fine is null and cg.gruppo_id=g.id %s and a.is_omnibus = 0 and t.taggable_id=ca.atto_id and t.taggable_model='OppAtto' and ah.chi_tipo='A' and ah.data='%s' and ah.chi_id=ca.atto_id and a.id=ca.atto_id and (ca.tipo != 'P' or ca.tipo = 'P' and a.pred is null) and c.tipo_carica_id in (%s) and c.data_fine is null and cg.data_fine is null and t.tag_id in (%s) group by ca.tipo, ca.atto_id, ca.carica_id", $group_constraint, $data, implode(", ", $tipi_cariche), implode(", ", $argomenti_ids)); $stm = $con->createStatement(); $rs = $stm->executeQuery($sql, ResultSet::FETCHMODE_ASSOC); // costruzione array associativo dei politici (sommatoria pesata) $politici = array(); while ($rs->next()) { $row = $rs->getRow(); $carica_id = $row['carica_id']; $circoscrizione = $row['circoscrizione']; $atto_id = $row['atto_id']; $tipo = $row['tipo']; $punti_atto = $row['indice']; $priorita = $row['priorita']; $politico_id = $row['politico_id']; $nome = $row['nome']; $cognome = $row['cognome']; $acronimo = $row['acronimo']; if (!array_key_exists($carica_id, $politici)) { $politici[$carica_id] = array('politico_id' => $politico_id, 'circoscrizione' => $circoscrizione, 'nome' => $nome, 'cognome' => $cognome, 'acronimo' => $acronimo, 'punteggio' => 0); } $politici[$carica_id]['punteggio'] += OppCaricaHasAttoPeer::get_nuovo_fattore_firma($tipo) * $punti_atto / (double) $priorita; } // Firme // estrazione di tutte le firme relative ad atti omnibus taggati con argomento $con = Propel::getConnection(self::DATABASE_NAME); $sql = sprintf("select p.nome, p.cognome, p.id as politico_id, g.acronimo, c.id as carica_id, c.circoscrizione, ca.tipo, ca.atto_id, ah.indice, ah.priorita from opp_carica c, opp_carica_has_atto ca, opp_carica_has_gruppo cg, opp_gruppo g, sf_tagging_for_index t, opp_act_history_cache ah, opp_politico p, opp_atto a where p.id=c.politico_id and c.id=ca.carica_id and cg.carica_id=c.id and cg.data_fine is null and cg.gruppo_id=g.id %s and a.is_omnibus = 1 and t.atto_id=ca.atto_id and (ca.tipo != 'P' or ca.tipo = 'P' and a.pred is null) and ah.chi_tipo='A' and ah.data='%s' and ah.chi_id=ca.atto_id and a.id=ca.atto_id and c.tipo_carica_id in (%s) and c.data_fine is null and cg.data_fine is null and t.tag_id in (%s) group by ca.tipo, ca.atto_id, ca.carica_id", $group_constraint, $data, implode(", ", $tipi_cariche), implode(", ", $argomenti_ids)); $stm = $con->createStatement(); $rs = $stm->executeQuery($sql, ResultSet::FETCHMODE_ASSOC); // aggiunta all'array della classifica dei politici while ($rs->next()) { $row = $rs->getRow(); $carica_id = $row['carica_id']; $circoscrizione = $row['circoscrizione']; $atto_id = $row['atto_id']; $tipo = $row['tipo']; $punti_atto = $row['indice']; $priorita = $row['priorita']; $politico_id = $row['politico_id']; $nome = $row['nome']; $cognome = $row['cognome']; $acronimo = $row['acronimo']; if (!array_key_exists($carica_id, $politici)) { $politici[$carica_id] = array('politico_id' => $politico_id, 'circoscrizione' => $circoscrizione, 'nome' => $nome, 'cognome' => $cognome, 'acronimo' => $acronimo, 'punteggio' => 0); } $politici[$carica_id]['punteggio'] += OppCaricaHasAttoPeer::get_nuovo_fattore_firma($tipo) * $punti_atto / (double) $priorita; } if ($fetch_interventi) { // Interventi // estrazione degli interventi relativi ad atti non-omnibus taggati con argomenti $sql = sprintf("select count(*) as ni, p.id as politico_id, p.nome, p.cognome, c.circoscrizione, g.acronimo, i.atto_id, i.carica_id, ah.indice, ah.priorita from opp_intervento i, opp_atto a, opp_politico p, opp_carica c, opp_carica_has_gruppo cg, opp_gruppo g, sf_tagging t, opp_act_history_cache ah where p.id=c.politico_id and ah.chi_id=i.atto_id and i.atto_id=a.id and c.id=i.carica_id and cg.carica_id=c.id and cg.data_fine is null and cg.gruppo_id=g.id %s and ah.data='%s' and c.tipo_carica_id in (%s) and c.data_fine is null and a.is_omnibus = 0 and t.taggable_id=a.id and t.taggable_model='OppAtto' and t.tag_id in (%s) group by i.carica_id, i.atto_id;", $group_constraint, $data, implode(", ", $tipi_cariche), implode(", ", $argomenti_ids)); $stm = $con->createStatement(); $rs = $stm->executeQuery($sql, ResultSet::FETCHMODE_ASSOC); // costruzione array associativo dei politici (sommatoria pesata) while ($rs->next()) { $row = $rs->getRow(); $n_interventi = $row['ni']; $carica_id = $row['carica_id']; $atto_id = $row['atto_id']; $circoscrizione = $row['circoscrizione']; $priorita = $row['priorita']; $punti_atto = $row['indice']; $politico_id = $row['politico_id']; $nome = $row['nome']; $cognome = $row['cognome']; $acronimo = $row['acronimo']; if (!array_key_exists($carica_id, $politici)) { $politici[$carica_id] = array('politico_id' => $politico_id, 'circoscrizione' => $circoscrizione, 'nome' => $nome, 'cognome' => $cognome, 'acronimo' => $acronimo, 'punteggio' => 0); } $politici[$carica_id]['punteggio'] += OppCaricaHasAttoPeer::get_nuovo_fattore_firma('I') * $n_interventi * $punti_atto / (double) $priorita; } // estrazione di tutte le sedute con interventi relativi ad atti omnibus taggati con argomenti $sql = sprintf("select count(*) as ni, p.id as politico_id, p.nome, p.cognome, c.circoscrizione, g.acronimo, i.atto_id, i.sede_id, i.data, i.carica_id, ah.indice, ah.priorita from opp_intervento i, opp_atto a, opp_politico p, opp_carica c, opp_carica_has_gruppo cg, opp_gruppo g, sf_tagging_for_index t, opp_act_history_cache ah where p.id=c.politico_id and ah.chi_id=i.atto_id and i.atto_id=a.id and c.id=i.carica_id and cg.carica_id=c.id and cg.data_fine is null and cg.gruppo_id=g.id %s and ah.data='%s' and c.tipo_carica_id in (%s) and c.data_fine is null and a.is_omnibus = 1 and t.atto_id=a.id and t.tag_id in (%s) group by i.carica_id, i.atto_id;", $group_constraint, $data, implode(", ", $tipi_cariche), implode(", ", $argomenti_ids)); $stm = $con->createStatement(); $rs = $stm->executeQuery($sql, ResultSet::FETCHMODE_ASSOC); // costruzione array associativo dei politici (sommatoria pesata) while ($rs->next()) { $row = $rs->getRow(); $n_interventi = $row['ni']; $carica_id = $row['carica_id']; $circoscrizione = $row['circoscrizione']; $atto_id = $row['atto_id']; $priorita = $row['priorita']; $punti_atto = $row['indice']; $politico_id = $row['politico_id']; $nome = $row['nome']; $cognome = $row['cognome']; $acronimo = $row['acronimo']; if (!array_key_exists($carica_id, $politici)) { $politici[$carica_id] = array('politico_id' => $politico_id, 'circoscrizione' => $circoscrizione, 'nome' => $nome, 'cognome' => $cognome, 'acronimo' => $acronimo, 'punteggio' => 0); } $politici[$carica_id]['punteggio'] += OppCaricaHasAttoPeer::get_nuovo_fattore_firma('I') * $n_interventi * $punti_atto / (double) $priorita; } } // ordinamento per rilevanza, prima dello slice if (count($politici) > 1) { uasort($politici, array("OppCaricaPeer", "comparisonIndice")); } // slice dell'array, se specificata l'opzione limit if (!is_null($limit) && count($politici) > $limit) { $politici = array_slice($politici, 0, $limit, true); } return $politici; }
/** * torna gli atti firmati dal politico, come array di id * qualsiasi firma * * @param string $criteria * @param string $con * @return void * @author Guglielmo Celata */ public function getOppCaricaHasAttosPKs($criteria = null, $con = null) { $oppCaricaHasAttosPKs = array(); if (!$this->isNew()) { if ($criteria === null) { $criteria = new Criteria(); } elseif ($criteria instanceof Criteria) { $criteria = clone $criteria; } $criteria->add(OppCaricaHasAttoPeer::CARICA_ID, $this->getId()); $criteria->clearSelectColumns(); $criteria->addSelectColumn(OppCaricaHasAttoPeer::ATTO_ID); $rs = OppCaricaHasAttoPeer::doSelectRS($criteria, $con); while ($rs->next()) { $oppCaricaHasAttosPKs[] = $rs->getInt(1); } } return $oppCaricaHasAttosPKs; }
throw new Exception('$a è negativo'); } break; } catch (Exception $e) { //echo 'Caught exception: ', $e->getMessage(), "\n"; } } $errore = $html->find('p.messaggioErrore'); $numero = -1; foreach ($errore as $er) { $numero = 0; } if ($numero == -1) { $numero = $html->find('div.rigaTabRic div.sottoTit'); $numero = $numero[0]->find('strong'); $numero = $numero[2]->plaintext; } $c = new Criteria(); $c->addJoin(OppCaricaHasAttoPeer::ATTO_ID, OppAttoPeer::ID); $c->add(OppAttoPeer::TIPO_ATTO_ID, 1); $c->add(OppCaricaHasAttoPeer::CARICA_ID, $result->getId()); $c->add(OppCaricaHasAttoPeer::TIPO, 'R', Criteria::NOT_EQUAL); $count = OppCaricaHasAttoPeer::doCount($c); if ($numero < $count) { echo "!!!! ERRORE in " . $result->getId() . " nel DB n." . $count . " nel sito " . $numero . "\n"; } if ($numero > $count) { echo "!!!! ERRORE MANCANO FIRME in " . $result->getId() . " nel DB n." . $count . " nel sito " . $numero . "\n"; } } }
public function executeSenatorisioccupanodi() { $options = array('limit' => 10, 'sort_by_relevance' => true); //$options = array('sort_by_relevance' => true); // estrazione cariche, tipo firma, tipo atto $c = new Criteria(); $c->addJoin(OppCaricaPeer::ID, OppCaricaHasAttoPeer::CARICA_ID); $c->addJoin(OppCaricaHasAttoPeer::ATTO_ID, OppAttoPeer::ID); $c->addJoin(TaggingPeer::TAGGABLE_ID, OppAttoPeer::ID); $c->add(OppCaricaPeer::TIPO_CARICA_ID, array(4, 5), Criteria::IN); $c->add(OppCaricaPeer::DATA_FINE, NULL); $c->add(TaggingPeer::TAG_ID, $this->tag->getId()); $c->add(TaggingPeer::TAGGABLE_MODEL, 'OppAtto'); $c->clearSelectColumns(); $c->addSelectColumn(OppCaricaPeer::ID); $c->addSelectColumn(OppCaricaHasAttoPeer::TIPO); $c->addSelectColumn(OppAttoPeer::TIPO_ATTO_ID); // costruzione array associativo dei politici $politici = array(); $rs = OppCaricaPeer::doSelectRS($c); while ($rs->next()) { $carica_id = $rs->getInt(1); $tipo = $rs->getString(2); $tipo_atto_id = $rs->getInt(3); if (!array_key_exists($carica_id, $politici)) { $politici[$carica_id] = 0; } $politici[$carica_id] += OppCaricaHasAttoPeer::get_nuovo_fattore_firma($tipo) * OppAttoPeer::get_fattore_tipo_atto($tipo_atto_id); } // ordinamento per rilevanza, prima dello slice arsort($politici); // slice dell'array, se specificata l'opzione limit $this->n_remaining_politici = 0; if (isset($options['limit']) && count($politici) > $options['limit']) { $this->n_remaining_politici = count($politici) - $options['limit']; $politici = array_slice($politici, 0, $options['limit'], true); } // ordinamento per triple_value, in caso sort_by_relevance non sia specificato if (!isset($options['sort_by_relevance']) || true !== $options['sort_by_relevance']) { krsort($politici); } $this->politici = $politici; }
/** * calcola l'indice di rilevanza, per un atto, nel suo complesso * * @param integer $atto_id * @param integer $tipo_atto_id * @param date $data * @param SimpleXMLElement $xml_node * @param boolean $verbose * @return float * @author Guglielmo Celata */ public static function calcolaRilevanzaAtto($atto, $tipo_atto_id, $data, $xml_node, $verbose = false) { $atto_node = $xml_node->addChild('atto', null, self::$opp_ns); $atto_id = $atto->getId(); // calcolo gruppi e schieramenti che presentano list($schier_pres, $grup_pres) = OppCaricaHasAttoPeer::getSchierGrupPresAtto($atto_id, $data); if ($verbose) { printf("\n presentazione:\n"); printf(" schieramenti: %s\n", join(',', $schier_pres)); printf(" gruppi: %s\n", join(',', $grup_pres)); } // il peso di un atto non dipende mai da chi lo ha presentato // il coefficiente che si considera è sempre quello di maggioranza $di_maggioranza = true; // determina la priorità dell'atto $priorita = is_null($atto->getPriorityValue()) ? 1 : $atto->getPriorityValue(); $atto_is_ratifica = $atto->isRatifica(); // determina il tipo di atto (per quello che concerne il calcolo dell'indice) $tipo_atto = OppTipoAttoPeer::getTipoPerIndice($tipo_atto_id); if (is_null($tipo_atto)) { return 0; } $atto_node->addAttribute('tipo_atto', $tipo_atto); $atto_node->addAttribute('priorita', $priorita); $atto_node->addAttribute('id', $atto_id); $punteggio = 0.0; // punteggio dato all'atto per-se, a seconda del tipo if ($tipo_atto == 'SDDL') { $punteggio = 1.0; } else { $punteggio = 0.5; } $presentazione_node = $atto_node->addChild('presentazione', null, self::$opp_ns); $presentazione_node->addAttribute('totale', $punteggio); // --- consenso --- $consenso_node = $atto_node->addChild('consenso', null, self::$opp_ns); $firmeRS = OppCaricaHasAttoPeer::getFirmeAttoDataTipoRS($atto_id, $data, "'C'"); $n_firme = array('gruppo' => 0, 'altri' => 0, 'opp' => 0); while ($firmeRS->next()) { $row = $firmeRS->getRow(); if ($verbose) { printf(" %d firme per gruppo %d\n", $row['nf'], $row['gruppo_id']); } // gestione del caso in cui l'atto è presentato dai due schieramenti // tutte le firme sono assegnate a gruppo, altri e opp if (count($schier_pres) > 1) { $n_firme['gruppo'] += $row['nf']; $n_firme['altri'] += $row['nf']; $n_firme['opp'] += $row['nf']; continue; } // gestione del caso in cui l'atto è presentato da più di un gruppo // le firme dello schieramento di pres. sono assegnate a gruppo e altri if (count($grup_pres) > 1) { if ($row['maggioranza'] == $schier_pres[0]) { $n_firme['gruppo'] += $row['nf']; $n_firme['altri'] += $row['nf']; } else { $n_firme['opp'] += $row['nf']; } continue; } if (in_array($row['gruppo_id'], $grup_pres)) { if ($row['nf'] > 1) { $n_firme['gruppo'] += $row['nf']; } } else { if (count($schier_pres) > 0 && $row['maggioranza'] == $schier_pres[0]) { $n_firme['altri'] += $row['nf']; } else { $n_firme['gruppo'] += $row['nf']; } } } $d_punteggio = 0.0; foreach ($n_firme as $tipo => $value) { if (!$value) { continue; } $soglia = self::$soglia_cofirme; if ($tipo_atto == 'mozione') { $soglia = self::$soglia_cofirme_mozioni; } if ($value <= $soglia) { $d_punteggio += $dd_punteggio = self::getPunteggio($tipo_atto, "cofirme_{$tipo}_lo", $di_maggioranza); } else { $d_punteggio += $dd_punteggio = self::getPunteggio($tipo_atto, "cofirme_{$tipo}_hi", $di_maggioranza); } $firme_node = $consenso_node->addChild('firme_' . $tipo, null, self::$opp_ns); $firme_node->addAttribute('n_firme', $value); $firme_node->addAttribute('totale', $dd_punteggio); if ($verbose) { printf(" firme %s (%d) %7.2f\n", $tipo, $value, $dd_punteggio); } } $punteggio += $d_punteggio; if ($verbose) { printf(" totale firme %7.2f\n", $d_punteggio); } $consenso_node->addAttribute('n_firme', $n_firme['gruppo'] + $n_firme['altri'] + $n_firme['opp']); $consenso_node->addAttribute('totale', $d_punteggio); // --- iter --- // controlla se atti non assorbiti sono diventati legge dopo passaggi in altri rami // atti diventati legge non prendono il punteggio di approvazione $diventato_legge_in_altri_rami = false; if (!isset($passaggio) || $passaggio != 'assorbito') { $atto = OppAttoPeer::retrieveByPK($atto_id); $c = new Criteria(); $c->add(OppAttoHasIterPeer::ITER_ID, 16); $c->add(OppAttoHasIterPeer::DATA, $data, Criteria::LESS_EQUAL); while ($atto_succ_id = $atto->getSucc()) { $atto = OppAttoPeer::retrieveByPK($atto_succ_id); if ($atto->countOppAttoHasIters($c) > 0) { $diventato_legge_in_altri_rami = true; } } unset($c); unset($atto); } // determina se l'atto è parte di un Testo Unificato $is_unified = OppAttoPeer::isUnifiedText($atto_id); // determina se l'atto è stato assorbito $is_absorbed = OppAttoPeer::isAbsorbed($atto_id); // determina se l'atto unificato è principale o meno $is_unificato_non_main = is_array($is_unified) && !$is_unified['is_main_unified']; $is_unificato_main = is_array($is_unified) && $is_unified['is_main_unified']; $itinera_atto_rs = OppAttoHasIterPeer::getItineraAttoDataRS($atto_id, $data); $iter_node = $atto_node->addChild('iter', null, self::$opp_ns); $d_punteggio = 0.0; $n_passaggi = 0; while ($itinera_atto_rs->next()) { $iter_atto = $itinera_atto_rs->getRow(); $passaggio = OppIterPeer::getIterPerIndice($iter_atto['iter_id']); if (is_null($passaggio)) { continue; } // se l'atto è unificato e non-main, allora prende il punteggio come gli atti assorbiti if ($is_unificato_non_main && $passaggio == 'approvato') { $passaggio = 'assorbito'; } // se diventato legge in altri rami, non prende punteggio di approvazione if ($diventato_legge_in_altri_rami && $passaggio == 'approvato') { continue; } $n_passaggi++; $passaggio_node = $iter_node->addChild('passaggio', null, self::$opp_ns); if ($passaggio == 'assorbito' && $is_unificato_non_main) { $passaggio_node->addAttribute('tipo', 'assorbimento come unificato non principale'); } else { $passaggio_node->addAttribute('tipo', $passaggio); } $d_punteggio += $dd_punteggio = self::getPunteggio($tipo_atto, $passaggio, $di_maggioranza); if ($verbose) { if ($passaggio == 'assorbito' && $is_unificato_non_main) { printf(" iter %s %7.2f\n", 'assorbimento come unificato non principale', $dd_punteggio); } else { printf(" iter %s %7.2f\n", $passaggio, $dd_punteggio); } } $passaggio_node->addAttribute('totale', $dd_punteggio); // il break su atti assorbiti avviene dopo l'assegnazione del punteggio if ($passaggio == 'assorbito') { break; } // --- bonus maggioranza --- if ($passaggio == 'approvato') { if ($di_maggioranza && OppAttoPeer::isAttoVotatoDaOpposizione($atto_id, $data)) { $d_punteggio += $dd_punteggio = self::getPunteggio($tipo_atto, 'bonus_bi_partisan', true); $bonus_node = $iter_node->addChild('bonus_maggioranza', null, self::$opp_ns); $bonus_node->addAttribute('totale', $dd_punteggio); if ($verbose) { printf(" bonus di maggioranza! %7.2f\n", $dd_punteggio); } } } // break se mozione, risoluzione o odg approvato if (in_array($tipo_atto, array('mozione', 'risoluzione', 'odg')) && $passaggio == 'approvato') { break; } } // assegna punteggio se diventato legge in altri rami if ($diventato_legge_in_altri_rami && is_null($is_absorbed) && (is_null($is_unified) || $is_unificato_main)) { $d_punteggio += $dd_punteggio = self::getPunteggio($tipo_atto, 'diventato_legge', $di_maggioranza); $passaggio_node = $iter_node->addChild('passaggio', null, self::$opp_ns); $passaggio_node->addAttribute('tipo', "diventato legge in altri rami"); $passaggio_node->addAttribute('totale', $dd_punteggio); if ($verbose) { printf(" iter %s %7.2f\n", "diventato legge in altri rami", $dd_punteggio); } } $punteggio += $d_punteggio; if ($verbose) { printf(" totale iter %7.2f\n", $d_punteggio); } $iter_node->addAttribute('n_passaggi', $n_passaggi); $iter_node->addAttribute('totale', $d_punteggio); // --- componente emendamenti con funzione sigmoide --- $punteggio += $d_punteggio = self::calcolaComponenteEmendamentiPerAtto($atto_id, $data, $atto_node, $verbose); // --- sedute con interventi in commissione e assemblea --- $sedute_con_interventi_node = $atto_node->addChild('sedute_con_interventi', null, self::$opp_ns); $sedute_commissioni_node = $sedute_con_interventi_node->addChild('commissioni', null, self::$opp_ns); $n_sedute_commissioni = OppInterventoPeer::getNSeduteConInterventiAttoData($atto_id, 'C', $data); if ($n_sedute_commissioni) { $n_sedute_commissioni--; } if ($verbose) { printf(" n. sedute in commissione %d\n", $n_sedute_commissioni); } $d_punteggio_sedute_commissioni = $n_sedute_commissioni * parent::$punteggi['seduta_in_comm']; $sedute_commissioni_node->addAttribute('n_sedute', $n_sedute_commissioni); $sedute_commissioni_node->addAttribute('totale', $d_punteggio_sedute_commissioni); $sedute_assemblea_node = $sedute_con_interventi_node->addChild('assemblea', null, self::$opp_ns); $n_sedute_assemblea = OppInterventoPeer::getNSeduteConInterventiAttoData($atto_id, 'A', $data); if ($n_sedute_assemblea) { $n_sedute_assemblea--; } if ($verbose) { printf(" n. sedute in commissione %d\n", $n_sedute_assemblea); } $d_punteggio_sedute_assemblea = $n_sedute_assemblea * parent::$punteggi['seduta_in_ass']; $sedute_assemblea_node->addAttribute('n_sedute', $n_sedute_assemblea); $sedute_assemblea_node->addAttribute('totale', $d_punteggio_sedute_assemblea); $punteggio += $d_punteggio_sedute = $d_punteggio_sedute_commissioni + $d_punteggio_sedute_assemblea; if ($verbose) { printf(" totale sedute %7.2f\n", $d_punteggio_sedute); } $sedute_con_interventi_node->addAttribute('totale', $d_punteggio_sedute); if ($atto_is_ratifica) { $atto_node->addAttribute('totale_pre_decurtazione_ratifica', $punteggio); if ($verbose) { print "questo ATTO è una ratifica\n"; } $punteggio = $punteggio / self::$punteggi['fattore_diminuzione_ratifica']; } $punteggio = $priorita * $punteggio; $atto_node->addAttribute('totale', $punteggio); return $punteggio; }
public function executeUserVsSinglePolitician() { $user_id = $this->user->getId(); $pol_id = $this->politico->getId(); $leg = $this->legislatura; $arr = array(); $come = array(); $contro = array(); $indice = 0; $c = new Criteria(); $c->add(OppCaricaPeer::POLITICO_ID, $pol_id); $c->add(OppCaricaPeer::LEGISLATURA, $leg); $cariche = OppCaricaPeer::doSelect($c); foreach ($cariche as $carica) { $arr[] = $carica->getId(); } $c = new Criteria(); $c->add(sfVotingPeer::USER_ID, $user_id); $voting_objects = sfVotingPeer::doSelect($c); foreach ($voting_objects as $voting_object) { $c = new Criteria(); $c->addJoin(OppAttoPeer::ID, OppCaricaHasAttoPeer::ATTO_ID); $c->add(OppCaricaHasAttoPeer::CARICA_ID, $arr, Criteria::IN); $c->add(OppAttoPeer::ID, $voting_object->getVotableID()); $c->add(OppAttoPeer::LEGISLATURA, $leg); $c->add(OppCaricaHasAttoPeer::TIPO, 'R', Criteria::NOT_EQUAL); $firme = OppCaricaHasAttoPeer::doSelect($c); foreach ($firme as $firma) { $value = $this->calcolaIndice($firma->getOppAtto()->getTipoAttoId(), $firma->getTipo()); $indice = $indice + $value * $voting_object->getVoting(); if ($voting_object->getVoting() == 1) { if (!in_array($firma->getAttoId(), $come)) { $come[] = $firma->getAttoId(); } } else { if (!in_array($firma->getAttoId(), $contro)) { $contro[] = $firma->getAttoId(); } } } } $this->comes = $come; $this->contros = $contro; $this->indice = $indice; }
public static function getRecordsetFirmatari($id, $tipo) { $c = new Criteria(); $c->clearSelectColumns(); $c->addSelectColumn(OppPoliticoPeer::ID); $c->addSelectColumn(OppPoliticoPeer::NOME); $c->addSelectColumn(OppPoliticoPeer::COGNOME); $c->addSelectColumn(OppGruppoPeer::NOME); $c->addSelectColumn(OppCaricaHasAttoPeer::DATA); $c->addSelectColumn(OppGruppoPeer::ACRONIMO); $c->addSelectColumn(OppCaricaPeer::TIPO_CARICA_ID); $c->addSelectColumn(OppCaricaPeer::ID); $c->add(OppCaricaHasAttoPeer::ATTO_ID, $id, Criteria::EQUAL); $c->addJoin(OppCaricaHasAttoPeer::CARICA_ID, OppCaricaPeer::ID, Criteria::LEFT_JOIN); $c->addJoin(OppCaricaPeer::POLITICO_ID, OppPoliticoPeer::ID, Criteria::LEFT_JOIN); $c->addJoin(OppCaricaPeer::ID, OppCaricaHasGruppoPeer::CARICA_ID, Criteria::LEFT_JOIN); $c->addJoin(OppCaricaHasGruppoPeer::GRUPPO_ID, OppGruppoPeer::ID, Criteria::LEFT_JOIN); $c->add(OppCaricaHasGruppoPeer::DATA_FINE, NULL, Criteria::ISNULL); $c->add(OppCaricaHasAttoPeer::TIPO, $tipo, Criteria::EQUAL); $c->addAscendingOrderByColumn(OppPoliticoPeer::COGNOME); $c->addAscendingOrderByColumn(OppCaricaHasGruppoPeer::DATA_FINE); $rs = OppCaricaHasAttoPeer::doSelectRS($c); return $rs; }
echo $ncariche . "\n"; // costruisce array dei politici, con le firme $politici = array(); foreach ($cariche as $i => $carica) { $politico = $carica->getOppPolitico(); $politici[$i]['id'] = $carica->getId(); $politici[$i]['cognome'] = $politico->getCognome(); $politici[$i]['nome'] = $politico->getNome(); echo $i . "(" . $politici[$i]['id'] . "): " . $politici[$i]['nome'] . " " . $politici[$i]['cognome'] . ": "; // legge le firme dal DB e li mette nell'array firme $c = new Criteria(); $c->clearSelectColumns(); $c->addSelectColumn(OppCaricaHasAttoPeer::ATTO_ID); $c->addSelectColumn(OppCaricaHasAttoPeer::TIPO); $c->add(OppCaricaHasAttoPeer::CARICA_ID, $carica->getId()); $res = OppCaricaHasAttoPeer::doSelectRS($c); $firme = array(); while ($res->next()) { $firme[$res->getInt(1)] = $res->getString(2); } $politici[$i]['firme'] = $firme; unset($res); $nfirme = count($firme); echo " ({$nfirme} firme)\n"; } // update dei valori delle firme for ($i = 0; $i < $ncariche; $i++) { $dd = OppSimilaritaPeer::retrieveByPK($politici[$i]['id'], $politici[$i]['id']); if (is_null($dd)) { $dd = new OppSimilarita(); $dd->setCaricaFromId($politici[$i]['id']);
$atto = $intervento['atto']; ?> <li> <?php echo $intervento['n_interventi']; ?> Interventi: Atto: <?php echo link_to($atto->getShortTitle(), '@singolo_atto?id=' . $atto->getId()); ?> punti: <?php echo $intervento['n_interventi']; ?> x <?php echo $intervento['punti_atto']; ?> x <?php echo OppCaricaHasAttoPeer::get_nuovo_fattore_firma('I'); ?> = <?php echo $intervento['punti_atto'] * $intervento['n_interventi'] * OppCaricaHasAttoPeer::get_nuovo_fattore_firma('I'); ?> </li> <?php } ?> </ul> <?php }