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(); $c = new Criteria(); //$c->add(OppAttoPeer::ID, 8333); $atti = OppAttoPeer::doSelect($c); foreach ($atti as $atto) { $ctrl = 0; $fase_iter = "ok"; $c1 = new Criteria(); $c1->addJoin(OppAttoPeer::ID, OppAttoHasIterPeer::ATTO_ID); $c1->addJoin(OppIterPeer::ID, OppAttoHasIterPeer::ITER_ID); $c1->add(OppAttoPeer::ID, $atto->getId()); $iters = OppAttoHasIterPeer::doSelect($c1); foreach ($iters as $iter) { if ($atto->getStatoCod() == 'IC' and $iter->getOppIter()->getCacheCod() == 'CO' || $iter->getOppIter()->getCacheCod() == 'RE' || $iter->getOppIter()->getCacheCod() == 'AP') { $ctrl = $iter->getOppIter()->getCacheCod(); $fase_iter = $iter->getOppIter()->getFase(); $data = $iter->getData(); break; } if ($atto->getStatoCod() == 'CO' and $iter->getOppIter()->getCacheCod() == 'RE' || $iter->getOppIter()->getCacheCod() == 'AP') { $ctrl = $iter->getOppIter()->getCacheCod(); $fase_iter = $iter->getOppIter()->getFase(); $data = $iter->getData(); break; } } if ($fase_iter != "ok") {
public function executeDdl2legge() { if ($this->gruppo != NULL) { $c = new Criteria(); $c->add(OppGruppoPeer::ACRONIMO, $this->gruppo); $gruppo = OppGruppoPeer::doSelectOne($c); $cariche = OppCaricaHasGruppoPeer::getCarichePerGruppo($gruppo->getId(), 1); foreach ($cariche as $carica) { $componenti_gruppo[] = $carica->getCaricaId(); } } if ($this->gruppo != NULL) { $c = new Criteria(); $c->add(OppGruppoPeer::ACRONIMO, $this->gruppo); $gruppo = OppGruppoPeer::doSelectOne($c); $cariche = OppCaricaHasGruppoPeer::getCaricheGovernoPerGruppo($gruppo->getId(), 1); foreach ($cariche as $carica) { $componenti_gruppo[] = $carica; } } $arrs = array(); $arr_alls = array(); foreach (array(1, 2, 4) as $i) { $c = new Criteria(); if ($this->gruppo != NULL) { $c->addJoin(OppAttoPeer::ID, OppCaricaHasAttoPeer::ATTO_ID); $c->add(OppCaricaHasAttoPeer::CARICA_ID, $componenti_gruppo, Criteria::IN); $c->add(OppCaricaHasAttoPeer::TIPO, 'P'); } $c->add(OppAttoPeer::TIPO_ATTO_ID, 1); $c->add(OppAttoPeer::LEGISLATURA, $this->leg); $c->add(OppAttoPeer::INIZIATIVA, $i); $c->setDistinct(OppAttoPeer::ID); $atti = OppAttoPeer::doSelect($c); $c = new Criteria(); if ($this->gruppo != NULL) { $c->addJoin(OppAttoPeer::ID, OppCaricaHasAttoPeer::ATTO_ID); $c->add(OppCaricaHasAttoPeer::CARICA_ID, $componenti_gruppo, Criteria::IN); $c->add(OppCaricaHasAttoPeer::TIPO, 'P'); } $c->addJoin(OppAttoPeer::ID, OppAttoHasIterPeer::ATTO_ID); $c->add(OppAttoPeer::TIPO_ATTO_ID, 1); $c->add(OppAttoPeer::LEGISLATURA, $this->leg); $c->add(OppAttoPeer::INIZIATIVA, $i); $c->add(OppAttoHasIterPeer::ITER_ID, 16); $c->setDistinct(OppAttoPeer::ID); $leggi = OppAttoHasIterPeer::doSelect($c); $tempo_medio = 0; foreach ($leggi as $legge) { $ddl = $legge->getOppAtto(); while ($ddl->getPred() != NULL) { $ddl = OppAttoPeer::retrieveByPk($ddl->getPred()); } //$this->data_pres=$ddl->getDataPres(); //$this->data_appr=$legge->getData(); $data_pres = strtotime($ddl->getDataPres()); $data_appr = strtotime($legge->getData()); $tempo_medio = $tempo_medio + ($data_appr - $data_pres) / 86400; $arr_alls[] = array($legge->getOppAtto(), ($data_appr - $data_pres) / 86400); } if (count($leggi) > 0) { $tempo_medio = intval($tempo_medio / count($leggi)); } else { $tempo_medio = $tempo_medio; } $arrs[] = array(count($atti), count($leggi), $tempo_medio); } $this->arrs = $arrs; function cmp($a, $b) { if ($a[1] == $b[1]) { return 0; } return $a[1] < $b[1] ? -1 : 1; } usort($arr_alls, "cmp"); $this->arr_alls = $arr_alls; }
public function getIterLegge($quale_atto) { $rappresentazioni = array(); for ($x = 0; $x < count($quale_atto); $x++) { $c = new Criteria(); $c->clearSelectColumns(); $c->addSelectColumn(OppAttoHasIterPeer::DATA); $c->addSelectColumn(OppIterPeer::FASE); $c->addSelectColumn(OppAttoPeer::RAMO); $c->addSelectColumn(OppAttoPeer::NUMFASE); $c->addSelectColumn(OppAttoPeer::ID); $c->addSelectColumn(OppAttoPeer::DATA_PRES); $c->add(OppAttoHasIterPeer::ATTO_ID, $quale_atto[$x], Criteria::EQUAL); $c->add(OppAttoPeer::ID, $quale_atto[$x], Criteria::EQUAL); $c->add(OppIterPeer::ID, array(16), Criteria::IN); $c->addJoin(OppAttoHasIterPeer::ITER_ID, OppIterPeer::ID, Criteria::LEFT_JOIN); $c->addDescendingOrderByColumn(OppAttoHasIterPeer::DATA); $c->setLimit(1); $rs = OppAttoHasIterPeer::doSelectRS($c); while ($rs->next()) { $rappresentazioni[$x][1] = $rs->getDate(1, 'Y-m-d'); $rappresentazioni[$x][2] = $rs->getString(2); $rappresentazioni[$x][3] = $rs->getString(3); $rappresentazioni[$x][4] = $rs->getString(4); $rappresentazioni[$x][5] = $rs->getString(5); $rappresentazioni[$x][6] = $rs->getString(6); } } return $rappresentazioni; }
/** * 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; }