protected function execute($arguments = array(), $options = array()) { // initialize the database connection $databaseManager = new sfDatabaseManager($this->configuration); $connection = $databaseManager->getDatabase($options['connection'] ? $options['connection'] : null)->getConnection(); $handle = fopen("php://stdin", "r"); $line = fgets($handle); while ($line = fgets($handle)) { $data = explode(";", "{$line}"); $c = new Criteria(); $c->add(GeoPeer::NOMBRE, $data[3]); $geos = GeoPeer::doSelect($c); $aGeo = false; foreach ($geos as $geo) { if ($geo->getGeoRelatedByGeoId() != null && $geo->getGeoRelatedByGeoId()->getCodigo() && $geo->getGeoRelatedByGeoId()->getCodigo() != '') { //echo 'geo: ' . $geo->getNombre() . "\n"; $aGeo = $geo; } } if (!$aGeo) { echo 'Geo not found: (' . $data[3] . ")\n"; continue; } $c = new Criteria(); $c->add(PartidoPeer::ABREVIATURA, $data[5]); $partido = PartidoPeer::doSelectOne($c); if (!$partido) { $partido = new Partido(); $partido->setAbreviatura($data[5]); $partido->setIsActive(true); $partido->setNombre($data[5], 'es'); $partido->setNombre($data[5], 'ca'); $partido->save(); echo "Created partido ({$partido})\n"; } $c = new Criteria(); $c->add(CircunscripcionPeer::GEO_ID, $aGeo->getId()); $circu = CircunscripcionPeer::doSelectOne($c); $c = new Criteria(); $c->addJoin(ConvocatoriaPeer::ELECCION_ID, EleccionPeer::ID); $c->addJoin(EleccionInstitucionPeer::ELECCION_ID, EleccionPeer::ID); $c->addJoin(InstitucionPeer::ID, EleccionInstitucionPeer::INSTITUCION_ID); $c->add(InstitucionPeer::GEO_ID, $aGeo->getId()); $convocatoria = ConvocatoriaPeer::doSelectOne($c); if (!$convocatoria) { echo "Convocatoria not found: ({$geo})\n"; continue; } $c = new Criteria(); $c->add(ListaPeer::CONVOCATORIA_ID, $convocatoria->getId()); $c->add(ListaPeer::CIRCUNSCRIPCION_ID, $circu->getId()); $c->add(ListaPeer::PARTIDO_ID, $partido->getId()); $lista = ListaPeer::doSelectOne($c); if (!$lista) { $lista = new Lista(); $lista->setPartido($partido); $lista->setCircunscripcion($circu); $lista->setConvocatoria($convocatoria); $lista->save(); echo "Created lista ({$partido}, {$circu})\n"; } $politicos = false; $c = new Criteria(); $c->add("concat(nombre, ' ', apellidos)", trim($data[2])); //$c->add('fullname', utf8_encode( trim($data[2]) ), Criteria::EQUAL); $politicos = PoliticoPeer::doSelect($c); if (count($politicos) != 0) { echo "(ASIGNADO) " . $data[2] . "\n"; $politico = $politicos[0]; } else { echo "(NUEVO) " . $data[2] . "\n"; $politico = new Politico(); $nombreApellidos = explode(" ", $data[2]); $nombre = array_shift($nombreApellidos); $apellidos = implode(" ", $nombreApellidos); $politico->setNombre($nombre); $politico->setApellidos($apellidos); if ($data[7] != '1') { if (trim($data[10]) != '') { $c = new Criteria(); $c->add(PartidoPeer::ABREVIATURA, $data[5]); $partido = PartidoPeer::doSelectOne($c); if ($partido) { $politico->setPartido($partido); } } else { $politico->setPartido($lista->getPartido()); } } $politico->setSexo($data[1] == "hombre" ? 'H' : 'M'); $politico->save(); $politicoI18n = new PoliticoI18n(); $politicoI18n->setPolitico($politico); $politicoI18n->setCulture('es'); $politicoI18n->save(); $politicoI18n = new PoliticoI18n(); $politicoI18n->setPolitico($politico); $politicoI18n->setCulture('ca'); $politicoI18n->save(); } $c = new Criteria(); $c->add(PoliticoListaPeer::LISTA_ID, $lista->getId()); $c->add(PoliticoListaPeer::POLITICO_ID, $politico->getId()); $pl = PoliticoListaPeer::doSelectOne($c); if (!$pl) { $pl = new PoliticoLista(); $pl->setLista($lista); $pl->setPolitico($politico); } else { echo "Ya estaba.\n"; } $pl->setOrden($data[0]); $pl->save(); } fclose($handle); }
public function getResults($geoName = false, $sorted = true) { $aKey = "Convocatoria_" . $this->getId() . "-{$geoName}-{$sorted}"; $cache = sfcontext::getInstance()->getViewCacheManager() ? sfcontext::getInstance()->getViewCacheManager()->getCache() : false; if ($cache) { $key = md5($aKey); $data = unserialize($cache->get($key)); } else { $data = false; } if (!$data) { $res = array(); $c = new Criteria(); $c->addJoin(ListaPeer::PARTIDO_ID, PartidoPeer::ID); $c->add(ListaPeer::CONVOCATORIA_ID, $this->getId()); $c->setDistinct(); $res['partidos'] = PartidoPeer::doSelect($c); // Circus $c = new Criteria(); $c->addJoin(ListaPeer::CIRCUNSCRIPCION_ID, CircunscripcionPeer::ID); $c->addJoin(CircunscripcionPeer::GEO_ID, GeoPeer::ID); $c->add(ListaPeer::CONVOCATORIA_ID, $this->getId()); $c->addAscendingOrderByColumn(GeoPeer::NOMBRE); $c->setDistinct(); //$this->geos = GeoPeer::doSelect( $c ); $res['circus'] = CircunscripcionPeer::doSelect($c); $instituciones = $this->getEleccion()->getEleccionInstitucions(); //$this->institucionName = $instituciones[0]->getInstitucion(); $res['institucionName'] = $instituciones[0]->getInstitucion(); // Minimo de votos necesario para obtener escaño $listas = $this->getListas(); if ($geoName) { $c = new Criteria(); $c->addJoin(ListaPeer::CIRCUNSCRIPCION_ID, CircunscripcionPeer::ID); $c->addJoin(CircunscripcionPeer::GEO_ID, GeoPeer::ID); $c->add(ListaPeer::CONVOCATORIA_ID, $this->getId()); $c->add(GeoPeer::NOMBRE, $geoName); //$this->geos = GeoPeer::doSelect( $c ); $circu = CircunscripcionPeer::doSelectOne($c); $numEscanyos = $circu->getEscanyos(); } else { $numEscanyos = 0; $circuCounted = array(); foreach ($listas as $lista) { if (!in_array($lista->getCircunscripcion()->getId(), $circuCounted)) { $circuCounted[] = $lista->getCircunscripcion()->getId(); $numEscanyos += $lista->getCircunscripcion()->getEscanyos(); } } } $listaElectoral = ListaElectoral::getInstance($this->getId(), false, $geoName); $politicos = $listaElectoral->getPoliticos(); $idx = 0; //$this->minSumu = 0; $res['minSumu'] = 0; //$this->minSumd = 0; $res['minSumd'] = 0; $res['lastDate'] = null; $res['apellidos'] = ''; $res['nombre'] = ''; foreach ($politicos as $politico) { $idx++; if ($idx == $numEscanyos + 1) { $res['minSumu'] = $politico->getSumu(); $res['minSumd'] = $politico->getSumd(); $res['lastDate'] = $politico->getLastDate(); $res['apellidos'] = $politico->getApellidos(); $res['nombre'] = $politico->getNombre(); } } // Ordenar por escaños if ($sorted) { $idx = 0; $res['totalEscanyos'] = 0; foreach ($res['partidos'] as $partido) { $listaElectoral = new ListaElectoral($this->getId(), $partido->getId(), $geoName); $escanyos = $listaElectoral->getEscanyos($res['minSumu'], $res['minSumd'], $res['lastDate'], $res['apellidos']); $res['totalEscanyos'] += $escanyos; for ($j = 0; $j < $idx; $j++) { $listaElectoral2 = ListaElectoral::getInstance($this->getId(), $res['partidos'][$j]->getId(), $geoName); if ($listaElectoral2->getEscanyos($res['minSumu'], $res['minSumd'], $res['lastDate'], $res['apellidos']) < $escanyos) { $partidoTmp = clone $res['partidos'][$idx]; $res['partidos'][$idx] = $res['partidos'][$j]; $res['partidos'][$j] = $partidoTmp; } } $idx++; } } $data = $res; if ($cache) { $n = rand(0, 100); $cache->set($key, serialize($data ? $data : "zero"), 3600 * $n / 100); } } return $data == "zero" ? 0 : $data; }