/**
  * tabella indici e presenze
  *
  * @return void
  * @author Guglielmo Celata
  */
 public function executeIndicePresenze()
 {
     sfLoader::loadHelpers(array('Number'));
     $this->session = $this->getUser();
     $this->forward404Unless($this->session->hasCredential('adhoc'));
     $limit = $this->getRequestParameter('limit', 50);
     $last_date = OppPoliticianHistoryCachePeer::fetchLastData();
     /*
     deppFiltersAndSortVariablesManager::resetVars($this->session, 'action', 'storici_action', 
                                                   array('sf_admin/opp_storici/filter', 'sf_admin/opp_storici/sort'));
     */
     // estrae tutte le date per cui esistono dati di tipo P (presenze)
     $this->all_dates = OppPoliticianHistoryCachePeer::extractDates('P');
     // reset dei filtri, se richiesto esplicitamente
     if ($this->getRequestParameter('reset_filters', 'false') == 'true') {
         $this->getRequest()->getParameterHolder()->set('filter_ramo', '0');
         $this->getRequest()->getParameterHolder()->set('filter_data', $last_date);
     }
     // se si arriva dalla rule parlamentari_nuovo_indice, è specificato il ramo
     if ($this->hasRequestParameter('ramo')) {
         $ramo = $this->getRequestParameter('ramo');
         if ($ramo == 'camera') {
             $ramo = 'c';
         } elseif ($ramo == 'senato') {
             $ramo = 's';
         }
         $this->session->setAttribute('ramo', $ramo, 'sf_admin/opp_storici/filter');
     }
     $this->processFilters(array('ramo', 'data'), $last_date);
     $this->date = $this->filters['data'];
     // if all filters were reset, then restart
     if ($this->getRequestParameter('filter_ramo') == '0' && $this->getRequestParameter('filter_data') == $last_date) {
         $this->redirect('datiStorici/indicePresenze');
     }
     $this->processListSort('indice', 'presenze');
     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('OppPoliticianHistoryCache', $itemsperpage);
     $c = new Criteria();
     $this->addFiltersCriteria($c);
     $this->addListSortCriteria($c);
     $c->addDescendingOrderByColumn(OppPoliticianHistoryCachePeer::CHI_ID);
     $c->add(OppPoliticianHistoryCachePeer::CHI_TIPO, 'P');
     $this->pager->setCriteria($c);
     $this->pager->setPage($this->getRequestParameter('page', 1));
     $this->pager->setPeerMethod('doSelect');
     $this->pager->init();
 }
/**
 * calcola o ri-calcola le posizioni per indici e presenze
 * nelle tabelle cache, a una determinata data (o a tutte)
 *
 * @param string $task 
 * @param string $args 
 * @param string $options 
 * @return void
 * @author Guglielmo Celata
 */
function run_opp_rebuild_positions($task, $args, $options)
{
    static $loaded;
    // load application context
    if (!$loaded) {
        task_loader();
        $loaded = true;
    }
    $data = '';
    $dry_run = false;
    if (array_key_exists('data', $options)) {
        $data = $options['data'];
    }
    if (array_key_exists('dry-run', $options)) {
        $dry_run = true;
    }
    $msg = sprintf("start time: %s\n", date('H:i:s'));
    echo $msg;
    if ($data != '') {
        $p_dates = array($data => $data);
    }
    $p_dates = OppPoliticianHistoryCachePeer::extractDates('N', null, 10000);
    while ($rs->next()) {
        $cnt++;
        $r = $rs->getRow();
        printf("%6d) %1s %7d ... ", $cnt, $r['chi_tipo'], $r['chi_id']);
        // calcolo date fine mese scorso e precedente
        list($data_1, $data_2) = Util::getLast2MonthsDate($data);
        // estrazione record storici a due mesi
        $r_1 = OppPoliticianHistoryCachePeer::retrieveByDataChiTipoChiIdRamo($data_1, $r['chi_tipo'], $r['chi_id'], $r['ramo']);
        $r_2 = OppPoliticianHistoryCachePeer::retrieveByDataChiTipoChiIdRamo($data_2, $r['chi_tipo'], $r['chi_id'], $r['ramo']);
        // salta record per cui non c'è abbastanza storia
        if (!$r_1 instanceof OppPoliticianHistoryCache || !$r_2 instanceof OppPoliticianHistoryCache) {
            printf(" NA \n");
            continue;
        }
        list($presenze_delta, $assenze_delta, $missioni_delta) = presenzeDelta($data_lookup, $r, $r_1, $r_2);
        printf("d_presenze: %7.2f,  d_assenze: %7.2f,  d_missioni: %7.2f,  ", $presenze_delta, $assenze_delta, $missioni_delta);
        $indice_delta = indiceDelta($data_lookup, $r, $r_1, $r_2, $data_1, $data_2);
        printf("d_indice: %7.2f,  ", $indice_delta);
        $ribellioni_delta = ribellioniDelta($data_lookup, $r, $r_1, $r_2, $data_1, $data_2);
        printf("d_ribellioni: %7.2f", $ribellioni_delta);
        if (!$dry_run) {
            $r = OppPoliticianHistoryCachePeer::retrieveByDataChiTipoChiIdRamo($data_lookup, $r['chi_tipo'], $r['chi_id'], $r['ramo']);
            $r->setPresenzeDelta($presenze_delta);
            $r->setAssenzeDelta($assenze_delta);
            $r->setMissioniDelta($missioni_delta);
            $r->setIndiceDelta($indice_delta);
            $r->setRibellioniDelta($ribellioni_delta);
            $r->save();
            printf(" OK!\n");
        } else {
            printf("\n");
        }
    }
    echo "data: {$data_lookup}\n";
    $msg = sprintf("end time: %s\n", date('H:i:s'));
    echo $msg;
}
 public function executeGetDatesForPoliticianHistoryCache()
 {
     $dates = array_values(OppPoliticianHistoryCachePeer::extractDates('P'));
     $this->_send_json_output(json_encode(array('dates' => $dates)));
     return sfView::NONE;
 }