/**
  * torna il numero di interventi sugli atti con un certo tag 
  * tutti gli atti degli argomenti
  *
  * @return void
  * @author Guglielmo Celata
  */
 public function executeQuantodiscusso()
 {
     $interventi_max = sfSupra::getVariable('numero_interventi_max');
     $c = new Criteria();
     $c->addJoin(OppInterventoPeer::ATTO_ID, OppAttoPeer::ID);
     $c->addJoin(TaggingPeer::TAGGABLE_ID, OppAttoPeer::ID);
     $c->add(TaggingPeer::TAGGABLE_MODEL, 'OppAtto');
     $c->add(TaggingPeer::TAG_ID, $this->tag->getId());
     $this->interventi = OppInterventoPeer::doCount($c);
     $this->interventi_perc = 100 * $this->interventi / $interventi_max;
     $this->interventi_avg = sfSupra::getVariable('numero_interventi_avg');
     $this->interventi_avg_perc = 100 * $this->interventi_avg / $interventi_max;
 }
 public function getInterventiCount()
 {
     $c = new Criteria();
     $c->clearSelectColumns();
     $c->addSelectColumn(OppInterventoPeer::ID);
     $c->addJoin(OppInterventoPeer::CARICA_ID, OppCaricaPeer::ID, Criteria::LEFT_JOIN);
     $c->addJoin(OppCaricaPeer::POLITICO_ID, OppPoliticoPeer::ID, Criteria::LEFT_JOIN);
     $c->addJoin(OppInterventoPeer::SEDE_ID, OppSedePeer::ID, Criteria::LEFT_JOIN);
     $c->add(OppInterventoPeer::ATTO_ID, $this->getId(), Criteria::EQUAL);
     $c->addDescendingOrderByColumn(OppInterventoPeer::DATA);
     $c->addAscendingOrderByColumn(OppPoliticoPeer::COGNOME);
     $count = OppInterventoPeer::doCount($c);
     return $count;
 }
 public static function getPosizionePoliticoOggettiVotatiPerArgomenti($carica_id, $tags_ids, $user_id, $verbose = false, $log = null, $data = null, $con = null)
 {
     // Firme
     // estrazione di tutti gli atti taggati con un pool di argomenti e votati da un utente
     $con = Propel::getConnection(self::DATABASE_NAME);
     $sql = sprintf("select f.tipo, f.atto_id, a.tipo_atto_id, t.tag_id, v.voting from opp_carica_has_atto f, opp_atto a, sf_tagging t, sf_votings v  where f.carica_id=%d and f.atto_id=a.id and t.taggable_model='OppAtto' and t.taggable_id = a.id and t.tag_id in (%s) and v.votable_model='OppAtto' and v.votable_id=a.id and v.user_id=%d", $carica_id, implode(", ", $tags_ids), $user_id);
     if ($verbose) {
         echo "\nAtti: " . $sql . "\n\n";
     }
     $stm = $con->createStatement();
     $rs = $stm->executeQuery($sql, ResultSet::FETCHMODE_ASSOC);
     $log_msgs = array();
     // calcolo del punteggio
     $punteggio = 0;
     $punteggio_firme = 0;
     $punteggio_interventi = 0;
     while ($rs->next()) {
         $row = $rs->getRow();
         $atto_id = $row['atto_id'];
         $tipo_atto_id = $row['tipo_atto_id'];
         $tipo_firma = $row['tipo'];
         $voto = $row['voting'];
         $d_punteggio = OppCaricaHasAttoPeer::get_fattore_firma_posizione($tipo_firma, $tipo_atto_id) * $voto;
         $log_msgs[] = $log_msg = sprintf("atto: %9d, tipo_atto: %4d, tipo_firma: %1s, voto: %3d, punteggio: %7.2f", $atto_id, $tipo_atto_id, $tipo_firma, $voto, $d_punteggio);
         if ($verbose) {
             echo sprintf("  %s\n", $log_msg);
         }
         $punteggio_firme += $d_punteggio;
     }
     $log_msgs[] = sprintf("Totale firme: %7.2f", $punteggio_firme);
     // Interventi
     // estrazione di tutti gli interventi votati da un utente e relativi ad atti taggati con un pool di argomenti
     $con = Propel::getConnection(self::DATABASE_NAME);
     $sql = sprintf("select i.id, i.tipologia, i.atto_id, t.tag_id, v.voting from opp_intervento i, sf_tagging t, sf_votings v  where i.carica_id=%d and t.taggable_model='OppAtto' and t.taggable_id = i.atto_id and t.tag_id in (%s) and v.votable_model='OppIntervento' and v.votable_id=i.id and v.user_id=%d", $carica_id, implode(", ", $tags_ids), $user_id);
     if ($verbose) {
         echo "\nInterventi: " . $sql . "\n\n";
     }
     $stm = $con->createStatement();
     $rs = $stm->executeQuery($sql, ResultSet::FETCHMODE_ASSOC);
     // calcolo del punteggio
     while ($rs->next()) {
         $row = $rs->getRow();
         $intervento_id = $row['id'];
         $tipo_intervento = $row['tipologia'];
         $atto_id = $row['atto_id'];
         $voto = $row['voting'];
         $d_punteggio = OppInterventoPeer::get_fattore_intervento_posizione($tipo_intervento) * $voto;
         $log_msgs[] = $log_msg = sprintf("  atto: %9d, voto: %3d, tipo_intervento: %61s\n", $atto_id, $tipo_intervento, $voto, $d_punteggio);
         if ($verbose) {
             echo sprintf("  %s\n", $log_msg);
         }
         $punteggio_interventi += $d_punteggio;
     }
     $punteggio = $punteggio_firme + $punteggio_interventi;
     $log_msgs[] = sprintf("Totale interventi: %7.2f", $punteggio_interventi);
     $log_msgs[] = sprintf("Totale: %7.2f", $punteggio);
     if (is_null($log)) {
         return $punteggio;
     } else {
         return $log_msgs;
     }
 }
/**
 * Processa il file specificato in --yaml-file per l'upgrade di un atto
 *
 */
function run_opp_update_ddl_from_yaml($task, $args, $options)
{
    static $loaded;
    // load application context
    if (!$loaded) {
        _loader();
    }
    $dry_run = false;
    if (array_key_exists('dry-run', $options)) {
        $dry_run = true;
    }
    if (array_key_exists('yaml-file', $options)) {
        $yaml_file = strtolower($options['yaml-file']);
    } else {
        throw new Exception("Specificare il file contenente i dati dei ddl con l'opzione --yaml-file=FILE_COMPLETE_PATH");
    }
    echo "memory usage: " . memory_get_usage() . "\n";
    $start_time = time();
    $msg = sprintf("upgrade ddl da {$yaml_file}\n");
    echo pakeColor::colorize($msg, array('fg' => 'cyan', 'bold' => true));
    if (file_exists($yaml_file)) {
        $up_ddl = sfYaml::Load($yaml_file);
    } else {
        throw new Exception("Impossibile trovare il file {$yaml_file}");
    }
    $con = Propel::getConnection(OppAttoPeer::DATABASE_NAME);
    $opp_id = $up_ddl['opp_id'];
    $atto = OppAttoPeer::retrieveByPK($opp_id);
    $parl_id = $up_ddl['parl_id'];
    if (is_null($atto->getParlamentoId()) || $atto->getParlamentoId() != $parl_id) {
        $atto->setParlamentoId($parl_id);
    }
    $key = 'titolo';
    if (array_key_exists($key, $up_ddl)) {
        $titolo = $up_ddl['titolo'];
        $atto->setTitolo($titolo);
        print "{$key}\n";
        print str_repeat("=", strlen($key)) . "\n";
        print "{$titolo}\n";
        print "\n";
    }
    # firme
    $firmatari = array('P' => 'primi_firmatari', 'R' => 'relatori', 'C' => 'co_firmatari');
    foreach ($firmatari as $tipo_firma => $key) {
        if (array_key_exists($key, $up_ddl) && !is_null($up_ddl[$key])) {
            print "{$key}\n";
            print str_repeat("=", strlen($key)) . "\n";
            foreach ($up_ddl[$key] as $id => $signature_data) {
                $ca = new OppCaricaHasAtto();
                $ca->setAttoId($opp_id);
                $ca->setCaricaId($id);
                $ca->setTipo($tipo_firma);
                $name = $signature_data['nome'];
                $signature_date = $signature_data['data_firma'];
                $ca->setData($signature_date);
                $ca->save();
                print "  {$name} ({$id}) il {$signature_date}\n";
            }
            print "\n";
        }
    }
    # commissioni
    $commissioni = array('referente', 'consultiva');
    foreach ($commissioni as $tipo_commissione) {
        if (array_key_exists($tipo_commissione, $up_ddl)) {
            print "{$tipo_commissione}\n";
            print str_repeat("=", strlen($tipo_commissione)) . "\n";
            foreach ($up_ddl[$tipo_commissione] as $id => $name) {
                $as = new OppAttoHasSede();
                $as->setAttoId($opp_id);
                $as->setSedeId($id);
                $as->setTipo(ucfirst($tipo_commissione));
                $as->save();
                print "  {$name} ({$id})\n";
            }
            print "\n";
        }
    }
    # tagging
    if (array_key_exists('tags', $up_ddl)) {
        print "tagging\n";
        print "=======\n";
        foreach ($up_ddl['tags'] as $tag_id => $name) {
            $t = new Tagging();
            $t->setTaggableModel('OppAtto');
            $t->setTaggableId($opp_id);
            $t->setTagId($tag_id);
            $t->save();
            print "  {$name} ({$tag_id})\n";
        }
        print "\n";
    }
    # documenti
    if (array_key_exists('documenti', $up_ddl)) {
        print "documenti\n";
        print "=========\n";
        foreach ($up_ddl['documenti'] as $cnt => $doc) {
            if (!array_key_exists('titolo', $doc)) {
                $doc['titolo'] = "Testo della Proposta di Legge";
            }
            $d = new OppDocumento();
            $d->setAttoId($opp_id);
            $d->setTitolo($doc['titolo']);
            $d->setUrlPdf($doc['url_pdf']);
            $d->setUrlTesto($doc['url_testo']);
            printf("titolo: %s\n", $doc['titolo']);
            printf("  pdf:  %s\n", $doc['url_pdf']);
            printf("  html: %s\n", $doc['url_testo']);
            if (file_exists($doc['file_testo'])) {
                $doc_txt = file_get_contents($doc['file_testo']);
                $d->setTesto($doc_txt);
                printf("  text: %s\n", $doc['file_testo']);
            }
            $d->save();
        }
        print "\n";
    }
    #pred e succ
    if (array_key_exists('pred_id', $up_ddl)) {
        $atto->setPred($up_ddl['pred_id']);
        printf(" pred: %d\n\n", $up_ddl['pred_id']);
    }
    if (array_key_exists('succ_id', $up_ddl)) {
        $atto->setSucc($up_ddl['succ_id']);
        printf(" succ: %d\n\n", $up_ddl['succ_id']);
    }
    # iter
    if (array_key_exists('iter', $up_ddl)) {
        print "iter\n";
        print "====\n";
        foreach ($up_ddl['iter'] as $id => $details) {
            $ai = new OppAttoHasIter();
            $ai->setAttoId($opp_id);
            $ai->setIterId($id);
            $ai->setData($details['data_pres']);
            $ai->save();
            printf("  %s (%s) - %s\n", $details['fase'], $id, $details['data_pres']);
        }
        print "\n";
    }
    # relazioni
    if (array_key_exists('relazioni', $up_ddl)) {
        print "relazioni\n";
        print "=========\n";
        foreach ($up_ddl['relazioni'] as $key => $details) {
            $r = new OppRelazioneAtto();
            $r->setAttoFromId($details['from_id']);
            $r->setAttoToId($details['to_id']);
            $r->setTipoRelazioneId($details['tipo_id']);
            $r->save();
            printf("  from: %s to: %s - %s (%s)\n", $details['from_id'], $details['to_id'], $details['tipo_relazione'], $details['tipo_id']);
        }
        print "\n";
    }
    # trattazione (esiti, sedute e interventi)
    $tipi_commissione = array('primaria' => 'Primaria', 'consultiva' => 'Consultiva', 'assemblea' => 'Aula');
    foreach ($tipi_commissione as $key => $tipo_commissione) {
        $trattazione_key = "trattazione_{$key}";
        if (array_key_exists('trattazioni', $up_ddl)) {
            print "trattazione {$tipo_commissione}\n";
            print "============" . str_repeat("=", strlen($tipo_commissione)) . "\n";
            foreach ($up_ddl['trattazioni'][$trattazione_key] as $seduta_id => $details) {
                list($seduta, $id) = explode("_", $seduta_id);
                $es = new OppEsitoSeduta();
                $es->setAttoId($opp_id);
                $es->setSedeId($details['comm_id']);
                $es->setData($details['date']);
                $es->setEsito($details['esito']);
                $es->setTipologia($details['comm_type']);
                $es->save();
                print "  seduta {$id}\n";
                printf("    %s - %s: %s\n", $details['date'], $details['comm_type'], $details['comm_id']);
                printf("    esito: %s\n", $details['esito']);
                printf("    %d interventi\n", count($details['interventi']));
                foreach ($details['interventi'] as $carica_id => $i_details) {
                    try {
                        $con->begin();
                        # cancella tutti i record con interventi di carica su atto, in sede e data
                        $c = OppInterventoPeer::criterionByAttoCaricaSedeData($opp_id, $carica_id, $details['comm_id'], $details['date']);
                        $deleted = OppInterventoPeer::doDelete($c, $con);
                        printf("      trovati e rimossi %d record\n", $deleted);
                        # riscrive un solo record, con tutte le url raggruppate
                        $i = new OppIntervento();
                        $i->setAttoId($opp_id);
                        $i->setCaricaId($carica_id);
                        $i->setData($details['date']);
                        $i->setSedeId($details['comm_id']);
                        $i->setTipologia($details['comm_type']);
                        $i->setUrl($i_details['urls']);
                        $i->save($con);
                        printf("      %s (%d) - %s\n", $i_details['cognome'], $carica_id, $i_details['urls']);
                        $con->commit();
                    } catch (PropelException $e) {
                        printf("problemi nell'aggiornamento interventi di %d su %d, sede %d, data %s\n%s\n", $carica_id, $opp_id, $details['comm_id'], $details['date'], $e->getMessage());
                        $con->rollback();
                    }
                }
            }
            print "\n";
        }
    }
    $atto->setDataAgg(time());
    $atto->save($con);
    # l'md5 viene ri-salvato dopo il salvataggio per evitare che atti inconsistenti siano
    # marcati come uguali
    $atto->setMd5($up_ddl['md5']);
    $atto->save();
    unset($atto);
    $msg = sprintf("fine elaborazione atto\n");
    echo pakeColor::colorize($msg, array('fg' => 'cyan', 'bold' => true));
    $msg = sprintf(" [%4d sec] [%10d bytes]\n", time() - $start_time, memory_get_usage());
    echo pakeColor::colorize($msg, array('fg' => 'red', 'bold' => false));
}
 public function executeInterventi()
 {
     $this->limit = 2;
     $this->limit_count = 0;
     $i_fields = array('data', 'denominazione', 'ramo', 'nome', 'cognome', 'politico_id');
     $this->interventi_count = count($this->interventi);
     # estende gli interventi, splittando le url quando necessario
     $interventi_singoli = array();
     foreach ($this->interventi as $key => $intervento) {
         $i_obj = OppInterventoPeer::retrieveByPK($intervento['id']);
         $links = explode('@', $intervento['link']);
         foreach ($links as $link) {
             $i_singolo = array();
             $i_singolo['obj'] = $i_obj;
             foreach ($i_fields as $field) {
                 $i_singolo[$field] = $intervento[$field];
             }
             if ($i_singolo['ramo'] == 'C') {
                 if (!preg_match("#^http:#", $link)) {
                     $i_singolo['url'] = sfConfig::get('app_url_sito_camera', 'http://www.camera.it/') . $link;
                 } else {
                     $i_singolo['url'] = $link;
                 }
             } else {
                 if (!preg_match("#^http:#", $link)) {
                     $i_singolo['url'] = sfConfig::get('app_url_sito_senato', 'http://www.senato.it/') . $link;
                 } else {
                     $i_singolo['url'] = $link;
                 }
             }
             array_push($interventi_singoli, $i_singolo);
         }
     }
     $this->interventi = $interventi_singoli;
 }
 /**
  * torna il numero di sedute in cui è intervenuto (almeno una volta), fino a una certa data
  * una seduta è identificata da sede_id e data
  *
  * @param string $carica 
  * @param string $data 
  * @return integer
  * @author Guglielmo Celata
  */
 public function getNSeduteConInterventi($data)
 {
     $n_int = OppInterventoPeer::getNSeduteConInterventiCarica($this, $data);
     return $n_int;
 }
define('SF_DEBUG', false);
require_once SF_ROOT_DIR . DIRECTORY_SEPARATOR . 'apps' . DIRECTORY_SEPARATOR . SF_APP . DIRECTORY_SEPARATOR . 'config' . DIRECTORY_SEPARATOR . 'config.php';
sfContext::getInstance();
echo "starting\n";
$con = Propel::getConnection(TagPeer::DATABASE_NAME);
$c = new Criteria(TagPeer::DATABASE_NAME);
$argomenti = TagPeer::doSelect($c, $con);
$ninterventi_tot = 0;
$ninterventi_max = 0;
foreach ($argomenti as $a) {
    echo $a->getTripleValue() . ": ";
    $c = new Criteria(TagPeer::DATABASE_NAME);
    $c->addJoin(OppInterventoPeer::ATTO_ID, OppAttoPeer::ID);
    $c->addJoin(TaggingPeer::TAGGABLE_ID, OppAttoPeer::ID);
    $c->add(TaggingPeer::TAGGABLE_MODEL, 'OppAtto');
    $c->add(TaggingPeer::TAG_ID, $a->getId());
    $ninterventi = OppInterventoPeer::doCount($c, $con);
    $ninterventi_tot += $ninterventi;
    if ($ninterventi > $ninterventi_max) {
        $ninterventi_max = $ninterventi;
    }
    echo " {$ninterventi} ({$ninterventi_max})\n";
}
$ninterventi_avg = $ninterventi_tot / count($argomenti);
echo "found:\n";
printf("n_interventi_max: {$ninterventi_max}, n_interventi_tot: {$ninterventi_tot}, n_interventi_avg: {$ninterventi_avg}\n");
echo "storing in the supra storage\n";
sfSupra::setVariable('numero_interventi_max', $ninterventi_max);
sfSupra::setVariable('numero_interventi_tot', $ninterventi_tot);
sfSupra::setVariable('numero_interventi_avg', $ninterventi_avg);
echo "done\n";
 /**
  * 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 executeLavoroCommissioni()
 {
     $c = new Criteria();
     $c->add(OppSedePeer::RAMO, $this->ramo);
     $c->add(OppSedePeer::TIPOLOGIA, 'Commissione permanente');
     $comms = OppSedePeer::doSelect($c);
     foreach ($comms as $comm) {
         $c = new Criteria();
         $c->addJoin(OppAttoPeer::ID, OppAttoHasSedePeer::ATTO_ID);
         $c->add(OppAttoPeer::LEGISLATURA, $this->leg);
         $c->add(OppAttoPeer::TIPO_ATTO_ID, 1);
         $c->add(OppAttoHasSedePeer::SEDE_ID, $comm->getId());
         $c->add(OppAttoHasSedePeer::TIPO, 'Referente');
         $ref = OppAttoHasSedePeer::doCount($c);
         $c = new Criteria();
         $c->addJoin(OppAttoPeer::ID, OppAttoHasSedePeer::ATTO_ID);
         $c->add(OppAttoPeer::LEGISLATURA, $this->leg);
         $c->add(OppAttoPeer::TIPO_ATTO_ID, 1);
         $c->add(OppAttoHasSedePeer::SEDE_ID, $comm->getId());
         $c->add(OppAttoHasSedePeer::TIPO, 'Consultiva');
         $con = OppAttoHasSedePeer::doCount($c);
         $c = new Criteria();
         $c->addJoin(OppAttoPeer::ID, OppAttoHasSedePeer::ATTO_ID);
         $c->add(OppAttoPeer::LEGISLATURA, $this->leg);
         $c->add(OppAttoPeer::TIPO_ATTO_ID, 1, Criteria::NOT_EQUAL);
         $c->add(OppAttoHasSedePeer::SEDE_ID, $comm->getId());
         $atti_non_leg = OppAttoHasSedePeer::doCount($c);
         $c = new Criteria();
         $c->add(OppResocontoPeer::LEGISLATURA, $this->leg);
         $c->add(OppResocontoPeer::SEDE_ID, $comm->getId());
         $sedute = OppResocontoPeer::doCount($c);
         $c = new Criteria();
         $c->addJoin(OppAttoPeer::ID, OppInterventoPeer::ATTO_ID);
         $c->add(OppAttoPeer::LEGISLATURA, $this->leg);
         $c->add(OppInterventoPeer::SEDE_ID, $comm->getId());
         $interventi = OppInterventoPeer::doCount($c);
         $compara_comm[$comm->getId()] = array($ref, $con, $atti_non_leg, $sedute, $interventi);
     }
     $this->compara_comm = $compara_comm;
 }
 public function executeInterventi()
 {
     $response = sfContext::getInstance()->getResponse();
     if ($this->getUser()->isAuthenticated() && ($this->getUser()->hasCredential('amministratore') || $this->getUser()->hasCredential('adhoc'))) {
         $response->addStylesheet('votazione_interventi', 'last');
         $response->addJavascript('votazione_interventi', 'last');
     }
     $this->_getAndCheckParlamentare();
     if ($this->carica == NULL) {
         return;
     }
     $this->session = $this->getUser();
     // reset dei filtri se richiesto esplicitamente
     if ($this->getRequestParameter('reset_filters', 'false') == 'true') {
         $this->getRequest()->getParameterHolder()->set('filter_ddls_collegati', '0');
     }
     $this->processInterventiFilters(array('ddls_collegati'));
     // if all filters were reset, then restart
     if ($this->getRequestParameter('filter_ddls_collegati') == '0') {
         $this->redirect('@parlamentare_interventi?id=' . $this->getRequestParameter('id') . '&slug=' . $this->parlamentare->getSlug());
     }
     if ($this->hasRequestParameter('itemsperpage')) {
         $this->getUser()->setAttribute('itemsperpage', $this->getRequestParameter('itemsperpage'));
     }
     $itemsperpage = $this->getUser()->getAttribute('itemsperpage', sfConfig::get('app_pagination_limit'));
     $this->pager = new sfPropelPager('OppIntervento', $itemsperpage);
     $c = new Criteria();
     $c->add(OppInterventoPeer::CARICA_ID, $this->carica->getId());
     $c->addDescendingOrderByColumn(OppInterventoPeer::CREATED_AT);
     $this->addInterventiFiltersCriteria($c);
     $this->pager->setCriteria($c);
     $this->pager->setPage($this->getRequestParameter('page', 1));
     $this->pager->setPeerMethod('doSelectJoinAll');
     $this->pager->init();
     $cariche_ids = $this->parlamentare->getCaricheCorrentiIds();
     $this->ddls_collegati = OppInterventoPeer::getDDLCollegatiCariche($cariche_ids);
     if ($this->carica->getTipoCaricaId() == 1) {
         $ramo = 'C';
     }
     if ($this->carica->getTipoCaricaId() == 4 || $this->carica->getTipoCaricaId() == 5) {
         $ramo = 'S';
     }
     $this->ramo = $ramo == 'C' ? 'camera' : 'senato';
     $this->getResponse()->setTitle('Interventi in Parlamento ' . ($this->ramo == 'camera' ? 'On. ' : 'Sen. ') . $this->parlamentare->getNome() . ' ' . $this->parlamentare->getCognome() . ' - ' . sfConfig::get('app_main_title'));
     //    if ($this->ramo=='camera')
     //       $this->getResponse()->setTitle('On. '.$this->parlamentare->getNome().' '.$this->parlamentare->getCognome().' - interventi parlamentari - '.sfConfig::get('app_main_title'));
     //    else
     //       $this->getResponse()->setTitle('Sen. '.$this->parlamentare->getNome().' '.$this->parlamentare->getCognome().' - interventi parlamentari - '.sfConfig::get('app_main_title'));
     $this->response->addMeta('description', 'La lista aggiornata quotidianamente di tutti gli interventi in Parlamento, in aula e nelle commissioni, di ' . $this->parlamentare->getNome() . ' ' . $this->parlamentare->getCognome(), true);
 }