public function executeTabellaDelta()
 {
     $this->data = $this->getRequestParameter('data');
     $this->mesi = $this->getRequestParameter('mesi');
     $this->ramo = $this->getRequestParameter('ramo');
     $this->dato = $this->getRequestParameter('dato');
     // calcolo date fine mese scorso e n_mesi prima
     list($this->data_2, $this->data_1) = Util::getLastNMonthsDates($this->data, $this->mesi);
     $this->parlamentari_rs = OppPoliticianHistoryCachePeer::getDeltaPoliticiRSByDataRamo($this->data_1, $this->data_2, $this->ramo, $this->dato);
     if ($this->data_2 == 0) {
         $leg = OppLegislaturaPeer::getActive();
         $this->data_2 = OppLegislaturaPeer::$legislature[$leg]['data_inizio'];
     }
 }
 /**
  * estrae i parlamentari di un ramo, per una legislatura, attivi durante una settimana 
  * se ramo e settimana non sono specificati, l'estrazione riguarda tutti i rami/periodi
  * @param string  $ramo ['', 'camera', 'senato', 'governo']
  * @param integer $legislatura 
  * @param string  $settimana ['', 'y-m-d']
  * @return array di OppCaricaObject (join con OppPolitico)
  * @author Guglielmo Celata
  */
 public static function getParlamentariRamoSettimana($ramo, $settimana, $offset = null, $limit = null)
 {
     // calcolo della legislatura
     if ($settimana != '') {
         $legislatura = OppLegislaturaPeer::getCurrent($settimana);
     } else {
         $legislatura = OppLegislaturaPeer::getCurrent();
     }
     $c = new Criteria();
     $c->addJoin(OppCaricaPeer::POLITICO_ID, OppPoliticoPeer::ID);
     $c->addAscendingOrderByColumn(OppCaricaPeer::TIPO_CARICA_ID);
     $c->addAscendingOrderByColumn(OppPoliticoPeer::COGNOME);
     if ($ramo == 'camera') {
         $c->add(OppCaricaPeer::LEGISLATURA, $legislatura, Criteria::EQUAL);
         $c->add(OppCaricaPeer::TIPO_CARICA_ID, '1', Criteria::EQUAL);
     } else {
         if ($ramo == 'senato') {
             // in questo modo considero i senatori a vita
             $cton = $c->getNewCriterion(OppCaricaPeer::LEGISLATURA, $legislatura, Criteria::EQUAL);
             $cton1 = $c->getNewCriterion(OppCaricaPeer::LEGISLATURA, null, Criteria::EQUAL);
             $cton->addOr($cton1);
             $c->add($cton);
             $c->add(OppCaricaPeer::TIPO_CARICA_ID, array(4, 5), Criteria::IN);
         } else {
             if ($ramo == 'governo') {
                 // considero presidente del consiglio, ministri, vicemoinistri e sottosegretari
                 $c->add(OppCaricaPeer::TIPO_CARICA_ID, array(2, 3, 6, 7), Criteria::IN);
             } else {
                 if ($ramo == '') {
                     /**
                      * criteri composti per estrarre deputati, senatori e senatori a vita
                      * (oppCarica.legislatura = leg OR oppCarica.legislatura IS NULL) AND 
                      * (oppCarica.tipo_carica in (4, 5)  OR (oppCarica.legislatura = leg AND oppCarica.tipo_carica = 1))
                      *
                      **/
                     $crit0 = $c->getNewCriterion(OppCaricaPeer::LEGISLATURA, $legislatura);
                     $crit1 = $c->getNewCriterion(OppCaricaPeer::LEGISLATURA, null, Criteria::ISNULL);
                     $crit2 = $c->getNewCriterion(OppCaricaPeer::TIPO_CARICA_ID, array(4, 5), Criteria::IN);
                     $crit3 = $c->getNewCriterion(OppCaricaPeer::LEGISLATURA, $legislatura);
                     $crit4 = $c->getNewCriterion(OppCaricaPeer::TIPO_CARICA_ID, 1);
                     $crit0->addOr($crit1);
                     $crit3->addAnd($crit4);
                     $crit2->addOr($crit3);
                     $crit0->addAnd($crit2);
                     $c->add($crit0);
                 }
             }
         }
     }
     // in carica al momento del calcolo
     if ($settimana != '') {
         $cton0 = $c->getNewCriterion(OppCaricaPeer::DATA_INIZIO, strtotime("+1 week", strtotime($settimana)), Criteria::LESS_THAN);
         $cton1 = $c->getNewCriterion(OppCaricaPeer::DATA_FINE, $settimana, Criteria::GREATER_EQUAL);
         $cton2 = $c->getNewCriterion(OppCaricaPeer::DATA_FINE, null, Criteria::ISNULL);
         $cton1->addOr($cton2);
         $cton0->addAnd($cton1);
         $c->add($cton0);
     } else {
         $c->add(OppCaricaPeer::DATA_FINE, null, Criteria::EQUAL);
     }
     if ($offset) {
         $c->setOffset($offset);
     }
     if ($limit) {
         $c->setLimit($limit);
     }
     return self::doSelect($c);
 }
 /**
  * torna gli emendamenti presentati da questa carica (primo firmatario)
  * fino a una certa data
  *
  * @param string $settimana
  * @return array of Opp
  * @author Guglielmo Celata
  */
 public function getPresentedEmendamentos($data = '')
 {
     // quando l'incarico è appena stato creato, non ci sono ancora firme
     if (!$this->isNew()) {
         $c = new Criteria();
         $c->addJoin(OppCaricaHasEmendamentoPeer::EMENDAMENTO_ID, OppEmendamentoPeer::ID);
         $c->add(OppCaricaHasEmendamentoPeer::TIPO, 'P');
         $c->add(OppCaricaHasEmendamentoPeer::CARICA_ID, $this->getId());
         if ($data != '') {
             $c->add(OppCaricaHasEmendamentoPeer::DATA, $data, Criteria::LESS_THAN);
             $c->add(OppEmendamentoPeer::LEGISLATURA, OppLegislaturaPeer::getCurrent($data));
         } else {
             $c->add(OppEmendamentoPeer::LEGISLATURA, OppLegislaturaPeer::getCurrent());
         }
         $res = OppEmendamentoPeer::doSelect($c);
         return $res;
     }
     return null;
 }
/**
 * Calcola o ri-calcola la rilevanza degli argomenti, come somma della rilevanza degli atti taggati
 * Si può specificare il una data fino alla quale calcolare la rilevanza
 * Se sono passati degli ID (argomenti), sono interpretati come ID di argomenti e il calcolo è fatto solo per loro
 */
function run_opp_build_cache_tags($task, $args, $options)
{
    static $loaded;
    // load application context
    if (!$loaded) {
        _loader();
    }
    echo "memory usage: " . memory_get_usage() . "\n";
    $data = '';
    $verbose = false;
    $offset = null;
    $limit = null;
    $start_time = time();
    if (array_key_exists('data', $options)) {
        $data = $options['data'];
    }
    if (array_key_exists('verbose', $options)) {
        $verbose = true;
    }
    if (array_key_exists('offset', $options)) {
        $offset = $options['offset'];
    }
    if (array_key_exists('limit', $options)) {
        $limit = $options['limit'];
    }
    if ($data != '') {
        $legislatura_corrente = OppLegislaturaPeer::getCurrent($data);
        $data_lookup = $data;
    } else {
        $legislatura_corrente = OppLegislaturaPeer::getCurrent();
        $data = date('Y-m-d');
        $data_lookup = OppTagHistoryCachePeer::fetchLastData();
    }
    $msg = sprintf("calcolo rilevanza tag - fino a: %10s\n", $data);
    echo pakeColor::colorize($msg, array('fg' => 'cyan', 'bold' => true));
    if (count($args) > 0) {
        $tags_ids = $args;
    } else {
        $tags_ids = TaggingPeer::getActiveTagsIds('OppAtto');
    }
    $n_tags = count($tags_ids);
    echo "memory usage: " . memory_get_usage() . "\n";
    foreach ($tags_ids as $cnt => $tag_id) {
        printf("%5d/%6d) %40s %6d ... ", $cnt + 1, $n_tags, TagPeer::retrieveByPK($tag_id), $tag_id);
        $indice = OppIndiceRilevanzaPeer::calcola_rilevanza_tag($tag_id, $data, $verbose);
        // inserimento o aggiornamento del valore in opp_tag_history_cache
        $cache_record = OppTagHistoryCachePeer::retrieveByDataChiTipoChiId($data_lookup, 'S', $tag_id);
        if (!$cache_record) {
            $cache_record = new OppTagHistoryCache();
        }
        $cache_record->setLegislatura($legislatura_corrente);
        $cache_record->setChiTipo('S');
        $cache_record->setChiId($tag_id);
        $cache_record->setIndice($indice);
        $cache_record->setData($data);
        $cache_record->setUpdatedAt(date('Y-m-d H:i'));
        // forza riscrittura updated_at, per tenere traccia esecuzioni
        $cache_record->save();
        unset($cache_record);
        $msg = sprintf("%7.2f", $indice);
        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));
    }
    $msg = sprintf("%d tag elaborati\n", $cnt + 1);
    echo pakeColor::colorize($msg, array('fg' => 'cyan', 'bold' => true));
}
  }
  $n_ribellioni = OppVotazioneHasCaricaPeer::countRibellioniCaricaData($p['id'], $legislatura_corrente, $data, $gruppo_obj->getDataInizio());
  $gruppo_obj->setRibelle($n_ribellioni);
  $gruppo_obj->save();
  printf("carica: %d, gruppo: %d, n_ribellioni: %d\n", $carica_id, $gruppo_id, $n_ribellioni);  
}

// mail("*****@*****.**", "OK - Update Ribellioni", "aggiornamento a buon fine", "From: BatchOpp");	
*/
define('SF_ROOT_DIR', realpath(dirname(__FILE__) . '/..'));
define('SF_APP', 'fe');
define('SF_ENVIRONMENT', 'prod');
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 $leg = OppLegislaturaPeer::getCurrent();
print "Fetching data... \n";
// DEPUTATI E SENATORI
$c = new Criteria();
$crit0 = $c->getNewCriterion(OppCaricaPeer::TIPO_CARICA_ID, 1);
$crit1 = $c->getNewCriterion(OppCaricaPeer::TIPO_CARICA_ID, 4);
$crit0->addOr($crit1);
$crit2 = $c->getNewCriterion(OppCaricaPeer::LEGISLATURA, $leg);
$crit0->addAnd($crit2);
$crit3 = $c->getNewCriterion(OppCaricaPeer::TIPO_CARICA_ID, 5);
$crit4 = $c->getNewCriterion(OppCaricaPeer::DATA_FINE, NULL, Criteria::ISNULL);
$crit3->addAnd($crit4);
$crit0->addOr($crit3);
$c->add($crit0);
$cariche = OppCaricaPeer::doSelect($c);
foreach ($cariche as $carica) {
 protected function impactFactorCSV($ramo)
 {
     sfLoader::loadHelpers(array('Number'));
     $this->opp_user = OppUserPeer::retrieveByPK($this->getUser()->getId());
     $this->forward404Unless($this->getUser()->hasCredential('adhoc'));
     // get user's monitored tags
     $this->tags_ids = $this->opp_user->getMonitoredPks('Tag');
     $limit = sfConfig::get('app_limit_classifica_parlamentari_sioccupanodi', 15);
     $data_inizio = OppLegislaturaPeer::$legislature[OppLegislaturaPeer::getCurrent()]['data_inizio'];
     $data_fine = OppActHistoryCachePeer::fetchLastData();
     $date = array_reverse(Util::buildCacheDatesArray($data_inizio, $data_fine));
     $politici_csv = array();
     if (count($this->tags_ids)) {
         $this->group_filter = $this->getRequestParameter('group_filter');
         if (is_array($this->group_filter)) {
             $c = new Criteria();
             $c->add(OppGruppoPeer::ID, $this->group_filter, Criteria::IN);
         } else {
             $this->group_filter = array();
         }
         // estrazione classifica dei politici che più si interessano degli argomenti monitorati
         $politici = OppCaricaPeer::getClassificaPoliticiSiOccupanoDiArgomenti($this->tags_ids, $ramo, $data_fine, $limit, $this->group_filter);
         // costruzione delle serie storiche per ogni politico (da inizio legislatura)
         foreach ($politici as $carica_id => $politico) {
             // genero il label
             $label = sprintf("%s %s (%s)", $politico['nome'], $politico['cognome'], $politico['acronimo']);
             // arrotonda l'array dei valori storici a due cifre decimali (max)
             $storico = OppCaricaPeer::getStoricoInteressePoliticoArgomenti($carica_id, $this->tags_ids);
             // calcola la posizione del politico
             $posizione = OppCaricaPeer::getPosizionePoliticoOggettiVotatiPerArgomenti($carica_id, $this->tags_ids, $this->getUser()->getId());
             $posizione = format_number(round($posizione, 2), 'it_IT');
             // primi campi (dati fissi)
             $csv_row = "{$carica_id},\"{$label}\",\"{$posizione}\",";
             foreach ($date as $cnt => $data) {
                 if (array_key_exists($data, $storico)) {
                     $storico[$data] = format_number(round($storico[$data], 2), 'it_IT');
                 } else {
                     $storico[$data] = 0;
                 }
                 $csv_row .= '"' . $storico[$data] . '"';
                 if ($cnt < count($date) - 1) {
                     $csv_row .= ",";
                 }
             }
             $politici_csv[] = $csv_row;
         }
     }
     $this->date_csv = "carica_id,politico,posizione," . implode(",", $date);
     $this->politici_csv = $politici_csv;
     $this->setLayout(false);
     $this->setTemplate('impactFactorCSV');
     $this->response->setContentType('text/csv');
 }
 /**
  * esporta csv con dati storici della rilevanza dei tag, con limite custom
  *
  * @return void
  * @author Guglielmo Celata
  */
 public function executeRilevanzaTagExport()
 {
     sfLoader::loadHelpers(array('Number'));
     $this->session = $this->getUser();
     $this->forward404Unless($this->session->hasCredential('adhoc'));
     $data_inizio = OppLegislaturaPeer::$legislature[OppLegislaturaPeer::getCurrent()]['data_inizio'];
     $data_fine = OppTagHistoryCachePeer::fetchLastData();
     $date = Util::buildCacheDatesArray($data_inizio, $data_fine);
     $limit = $this->getRequestParameter('limit', 50);
     $c = new Criteria();
     $c->addJoin(TagPeer::ID, OppTagHistoryCachePeer::CHI_ID);
     $c->add(OppTagHistoryCachePeer::CHI_TIPO, 'S');
     $c->add(OppTagHistoryCachePeer::DATA, $data_fine);
     $c->addDescendingOrderByColumn(OppTagHistoryCachePeer::INDICE);
     $c->setLimit($limit);
     $tags = TagPeer::doSelect($c);
     $csv_rows = array();
     // costruzione delle serie storiche per ogni politico (da inizio legislatura)
     foreach ($tags as $cnt => $tag) {
         $tag_id = $tag->getId();
         // genero il label
         $label = sprintf("%s(%s)", $tag->getTripleValue(), $tag->getTripleNamespace());
         // arrotonda l'array dei valori storici a due cifre decimali (max)
         $storico = OppTagHistoryCachePeer::getHistory('S', $tag->getId());
         // primi campi (dati fissi)
         $csv_row = "{$tag_id},\"{$label}\",";
         foreach ($date as $cnt => $data) {
             if (array_key_exists($data, $storico)) {
                 $storico[$data] = format_number(round($storico[$data], 2), 'it_IT');
             } else {
                 $storico[$data] = 0;
             }
             $csv_row .= '"' . $storico[$data] . '"';
             if ($cnt < count($date) - 1) {
                 $csv_row .= ",";
             }
         }
         $csv_rows[] = $csv_row;
     }
     $this->csv_header = "tag_id,tag(namespace)," . implode(",", $date);
     $this->csv_rows = $csv_rows;
     $this->setLayout(false);
     $this->response->setContentType('text/plain');
 }
 /**
  * estrae gli atti presentati in un intervallo di date (al massimo 200)
  * estrae solo gli atti al primo step dell'iter (pred=null)
  * @param string   $data_inizio ['y-m-d']
  * @param string   $data_fine ['y-m-d']
  * @param integer  $ramo
  * @param integer  $tipo_atto
  * @param integer  $escludi_tipi - array di id opp_tipo_atto
  * @return array di OppAtto
  * @author Guglielmo Celata
  */
 public static function getAttiInDateInterval($data_inizio, $data_fine, $ramo = null, $tipo_atto = null, $escludi_tipi = array())
 {
     if ($data_fine < $data_inizio) {
         throw new Exception('La data_inizio deve essere precedente o uguale alla data_fine');
     }
     // calcolo della legislatura
     $legislatura = OppLegislaturaPeer::getCurrent($data_inizio);
     $c = new Criteria();
     $c->add(self::LEGISLATURA, $legislatura);
     // $c->add(self::PRED, null, Criteria::ISNULL);
     $c1 = $c->getNewCriterion(self::DATA_PRES, $data_inizio, Criteria::GREATER_EQUAL);
     $c2 = $c->getNewCriterion(self::DATA_PRES, $data_fine, Criteria::LESS_THAN);
     $c2->addAnd($c1);
     $c->add($c2);
     if ($ramo) {
         $c->add(self::RAMO, $ramo);
     }
     // non sono estratti odg e comunicati gov, a meno che non siano richiesti esplicitamente
     if ($tipo_atto) {
         $tipi_ids = self::getTipiIdsFromDenominazioneFB($tipo_atto);
         $c->add(self::TIPO_ATTO_ID, $tipi_ids, Criteria::IN);
     } else {
         // di default esclude atti di tipo ODG e Comunicati del Governo
         $escludi_tipi_ids = array(10, 11, 13);
         foreach ($escludi_tipi as $tipo_atto) {
             $escludi_tipi_ids = array_merge($escludi_tipi_ids, self::getTipiIdsFromDenominazioneFB(trim($tipo_atto)));
         }
         $c->add(self::TIPO_ATTO_ID, $escludi_tipi_ids, Criteria::NOT_IN);
     }
     $c->setLimit(500);
     $c->addDescendingOrderByColumn(self::DATA_PRES);
     return self::doSelect($c);
 }