/** * 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; }