<?php

abstract class BaseProyectosPeer {

    const DATABASE_NAME = 'propel';
    const TABLE_NAME = 'PROYECTOS';
    const CLASS_DEFAULT = 'lib.model.Proyectos';
    const NUM_COLUMNS = 8;
    const NUM_LAZY_LOAD_COLUMNS = 0;
    const ID = 'PROYECTOS.ID';
    const ANO_FISCAL = 'PROYECTOS.ANO_FISCAL';
    const DESCRIPCION = 'PROYECTOS.DESCRIPCION';
    const ID_AREA_LIDER = 'PROYECTOS.ID_AREA_LIDER';
    const VALOR_PROYECTO = 'PROYECTOS.VALOR_PROYECTO';
    const CODIGO = 'PROYECTOS.CODIGO';
    const ESTADO = 'PROYECTOS.ESTADO';
    const ID_CDP_GLOBAL = 'PROYECTOS.ID_CDP_GLOBAL';

    private static $phpNameMap = null;
    private static $fieldNames = array(
        BasePeer::TYPE_PHPNAME => array('Id', 'AnoFiscal', 'Descripcion', 'IdAreaLider', 'ValorProyecto', 'Codigo', 'Estado','id_cdp_global',),
        BasePeer::TYPE_COLNAME => array(ProyectosPeer::ID, ProyectosPeer::ANO_FISCAL, ProyectosPeer::DESCRIPCION, ProyectosPeer::ID_AREA_LIDER, ProyectosPeer::VALOR_PROYECTO, ProyectosPeer::CODIGO, ProyectosPeer::ESTADO,ProyectosPeer::ID_CDP_GLOBAL,),
        BasePeer::TYPE_FIELDNAME => array('ID', 'ANO_FISCAL', 'DESCRIPCION', 'ID_AREA_LIDER', 'VALOR_PROYECTO', 'CODIGO', 'ESTADO','ID_CDP_GLOBAL',),
        BasePeer::TYPE_NUM => array(0, 1, 2, 3, 4, 5, 6,8,)
    );
    private static $fieldKeys = array(
        BasePeer::TYPE_PHPNAME => array('Id' => 0, 'AnoFiscal' => 1, 'Descripcion' => 2, 'IdAreaLider' => 3, 'ValorProyecto' => 4, 'Codigo' => 5, 'Estado' => 6,'id_cdp_global' => 7,),
        BasePeer::TYPE_COLNAME => array(ProyectosPeer::ID => 0, ProyectosPeer::ANO_FISCAL => 1, ProyectosPeer::DESCRIPCION => 2, ProyectosPeer::ID_AREA_LIDER => 3, ProyectosPeer::VALOR_PROYECTO => 4, ProyectosPeer::CODIGO => 5, ProyectosPeer::ESTADO => 6,ProyectosPeer::ID_CDP_GLOBAL => 7,),
        BasePeer::TYPE_FIELDNAME => array('ID' => 0, 'ANO_FISCAL' => 1, 'DESCRIPCION' => 2, 'ID_AREA_LIDER' => 3, 'VALOR_PROYECTO' => 4, 'CODIGO' => 5, 'ESTADO' => 6,'ID_CDP_GLOBAL' => 7,),
        BasePeer::TYPE_NUM => array(0, 1, 2, 3, 4, 5, 6,7)
    );

    public static function getMapBuilder() {
        return BasePeer::getMapBuilder('lib.model.map.ProyectosMapBuilder');
    }

    public static function getPhpNameMap() {
        if (self::$phpNameMap === null) {
            $map = ProyectosPeer::getTableMap();
            $columns = $map->getColumns();
            $nameMap = array();
            foreach ($columns as $column) {
                $nameMap[$column->getPhpName()] = $column->getColumnName();
            }
            self::$phpNameMap = $nameMap;
        }
        return self::$phpNameMap;
    }

    static public function translateFieldName($name, $fromType, $toType) {
        $toNames = self::getFieldNames($toType);
        $key = isset(self::$fieldKeys[$fromType][$name]) ? self::$fieldKeys[$fromType][$name] : null;
        if ($key === null) {
            throw new PropelException("'$name' could not be found in the field names of type '$fromType'. These are: " . print_r(self::$fieldKeys[$fromType], true));
        }
        return $toNames[$key];
    }

    static public function getFieldNames($type = BasePeer::TYPE_PHPNAME) {
        if (!array_key_exists($type, self::$fieldNames)) {
            throw new PropelException('Method getFieldNames() expects the parameter $type to be one of the class constants TYPE_PHPNAME, TYPE_COLNAME, TYPE_FIELDNAME, TYPE_NUM. ' . $type . ' was given.');
        }
        return self::$fieldNames[$type];
    }

    public static function alias($alias, $column) {
        return str_replace(ProyectosPeer::TABLE_NAME . '.', $alias . '.', $column);
    }

    public static function addSelectColumns(Criteria $criteria) {

        $criteria->addSelectColumn(ProyectosPeer::ID);

        $criteria->addSelectColumn(ProyectosPeer::ANO_FISCAL);

        $criteria->addSelectColumn(ProyectosPeer::DESCRIPCION);

        $criteria->addSelectColumn(ProyectosPeer::ID_AREA_LIDER);

        $criteria->addSelectColumn(ProyectosPeer::VALOR_PROYECTO);

        $criteria->addSelectColumn(ProyectosPeer::CODIGO);

        $criteria->addSelectColumn(ProyectosPeer::ESTADO);

        $criteria->addSelectColumn(ProyectosPeer::ID_CDP_GLOBAL);
    }

    const COUNT = 'COUNT(PROYECTOS.ID)';
    const COUNT_DISTINCT = 'COUNT(DISTINCT PROYECTOS.ID)';

    public static function doCount(Criteria $criteria, $distinct = false, $con = null) {
        $criteria = clone $criteria;

        $criteria->clearSelectColumns()->clearOrderByColumns();
        if ($distinct || in_array(Criteria::DISTINCT, $criteria->getSelectModifiers())) {
            $criteria->addSelectColumn(ProyectosPeer::COUNT_DISTINCT);
        } else {
            $criteria->addSelectColumn(ProyectosPeer::COUNT);
        }

        foreach ($criteria->getGroupByColumns() as $column) {
            $criteria->addSelectColumn($column);
        }

        $rs = ProyectosPeer::doSelectRS($criteria, $con);
        if ($rs->next()) {
            return $rs->getInt(1);
        } else {
            return 0;
        }
    }

    public static function doSelectOne(Criteria $criteria, $con = null) {
        
        $critcopy = clone $criteria;
        $critcopy->setLimit(1);
        $objects = ProyectosPeer::doSelect($critcopy, $con);
        if ($objects) {
            return $objects[0];
        }
        return null;
    }

    public static function doSelect(Criteria $criteria, $con = null) {
        return ProyectosPeer::populateObjects(ProyectosPeer::doSelectRS($criteria, $con));
    }

    public static function doSelectRS(Criteria $criteria, $con = null) {
        if ($con === null) {
            $con = Propel::getConnection(self::DATABASE_NAME);
        }

        if (!$criteria->getSelectColumns()) {
            $criteria = clone $criteria;
            ProyectosPeer::addSelectColumns($criteria);
        }

        $criteria->setDbName(self::DATABASE_NAME);

        return BasePeer::doSelect($criteria, $con);
    }

    public static function populateObjects(ResultSet $rs) {
        $results = array();

        $cls = ProyectosPeer::getOMClass();
        $cls = sfPropel::import($cls);
        while ($rs->next()) {

            $obj = new $cls();
            $obj->hydrate($rs);
            $results[] = $obj;
        }
        return $results;
    }

    public static function doCountJoinAreas(Criteria $criteria, $distinct = false, $con = null) {
        $criteria = clone $criteria;

        $criteria->clearSelectColumns()->clearOrderByColumns();
        if ($distinct || in_array(Criteria::DISTINCT, $criteria->getSelectModifiers())) {
            $criteria->addSelectColumn(ProyectosPeer::COUNT_DISTINCT);
        } else {
            $criteria->addSelectColumn(ProyectosPeer::COUNT);
        }

        foreach ($criteria->getGroupByColumns() as $column) {
            $criteria->addSelectColumn($column);
        }

        $criteria->addJoin(ProyectosPeer::ID_AREA_LIDER, AreasPeer::ID_AREA);

        $rs = ProyectosPeer::doSelectRS($criteria, $con);
        if ($rs->next()) {
            return $rs->getInt(1);
        } else {
            return 0;
        }
    }

    public static function doSelectJoinAreas(Criteria $c, $con = null) {
        $c = clone $c;

        if ($c->getDbName() == Propel::getDefaultDB()) {
            $c->setDbName(self::DATABASE_NAME);
        }

        ProyectosPeer::addSelectColumns($c);
        $startcol = (ProyectosPeer::NUM_COLUMNS - ProyectosPeer::NUM_LAZY_LOAD_COLUMNS) + 1;
        AreasPeer::addSelectColumns($c);

        $c->addJoin(ProyectosPeer::ID_AREA_LIDER, AreasPeer::ID_AREA);
        $rs = BasePeer::doSelect($c, $con);
        $results = array();

        while ($rs->next()) {

            $omClass = ProyectosPeer::getOMClass();

            $cls = sfPropel::import($omClass);
            $obj1 = new $cls();
            $obj1->hydrate($rs);

            $omClass = AreasPeer::getOMClass();

            $cls = sfPropel::import($omClass);
            $obj2 = new $cls();
            $obj2->hydrate($rs, $startcol);

            $newObject = true;
            foreach ($results as $temp_obj1) {
                $temp_obj2 = $temp_obj1->getAreas();
                if ($temp_obj2->getPrimaryKey() === $obj2->getPrimaryKey()) {
                    $newObject = false;
                    $temp_obj2->addProyectos($obj1);
                    break;
                }
            }
            if ($newObject) {
                $obj2->initProyectoss();
                $obj2->addProyectos($obj1);
            }
            $results[] = $obj1;
        }
        return $results;
    }

    public static function doCountJoinAll(Criteria $criteria, $distinct = false, $con = null) {
        $criteria = clone $criteria;

        $criteria->clearSelectColumns()->clearOrderByColumns();
        if ($distinct || in_array(Criteria::DISTINCT, $criteria->getSelectModifiers())) {
            $criteria->addSelectColumn(ProyectosPeer::COUNT_DISTINCT);
        } else {
            $criteria->addSelectColumn(ProyectosPeer::COUNT);
        }

        foreach ($criteria->getGroupByColumns() as $column) {
            $criteria->addSelectColumn($column);
        }

        $criteria->addJoin(ProyectosPeer::ID_AREA_LIDER, AreasPeer::ID_AREA);

        $rs = ProyectosPeer::doSelectRS($criteria, $con);
        if ($rs->next()) {
            return $rs->getInt(1);
        } else {
            return 0;
        }
    }

    public static function doSelectJoinAll(Criteria $c, $con = null) {
        $c = clone $c;

        if ($c->getDbName() == Propel::getDefaultDB()) {
            $c->setDbName(self::DATABASE_NAME);
        }

        ProyectosPeer::addSelectColumns($c);
        $startcol2 = (ProyectosPeer::NUM_COLUMNS - ProyectosPeer::NUM_LAZY_LOAD_COLUMNS) + 1;

        AreasPeer::addSelectColumns($c);
        $startcol3 = $startcol2 + AreasPeer::NUM_COLUMNS;

        $c->addJoin(ProyectosPeer::ID_AREA_LIDER, AreasPeer::ID_AREA);

        $rs = BasePeer::doSelect($c, $con);
        $results = array();

        while ($rs->next()) {

            $omClass = ProyectosPeer::getOMClass();


            $cls = sfPropel::import($omClass);
            $obj1 = new $cls();
            $obj1->hydrate($rs);



            $omClass = AreasPeer::getOMClass();


            $cls = sfPropel::import($omClass);
            $obj2 = new $cls();
            $obj2->hydrate($rs, $startcol2);

            $newObject = true;
            for ($j = 0, $resCount = count($results); $j < $resCount; $j++) {
                $temp_obj1 = $results[$j];
                $temp_obj2 = $temp_obj1->getAreas();
                if ($temp_obj2->getPrimaryKey() === $obj2->getPrimaryKey()) {
                    $newObject = false;
                    $temp_obj2->addProyectos($obj1);
                    break;
                }
            }

            if ($newObject) {
                $obj2->initProyectoss();
                $obj2->addProyectos($obj1);
            }

            $results[] = $obj1;
        }
        return $results;
    }

    static public function getUniqueColumnNames() {
        return array();
    }

    public static function getTableMap() {
        return Propel::getDatabaseMap(self::DATABASE_NAME)->getTable(self::TABLE_NAME);
    }

    public static function getOMClass() {
        return ProyectosPeer::CLASS_DEFAULT;
    }

    public static function doInsert($values, $con = null) {
        if ($con === null) {
            $con = Propel::getConnection(self::DATABASE_NAME);
        }

        if ($values instanceof Criteria) {
            $criteria = clone $values;
        } else {
            $criteria = $values->buildCriteria();
        }


        $criteria->setDbName(self::DATABASE_NAME);

        try {
            $con->begin();
            $pk = BasePeer::doInsert($criteria, $con);
            $con->commit();
        } catch (PropelException $e) {
            $con->rollback();
            throw $e;
        }

        return $pk;
    }

    public static function doUpdate($values, $con = null) {
        if ($con === null) {
            $con = Propel::getConnection(self::DATABASE_NAME);
        }

        $selectCriteria = new Criteria(self::DATABASE_NAME);

        if ($values instanceof Criteria) {
            $criteria = clone $values;
            $comparison = $criteria->getComparison(ProyectosPeer::ID);
            $selectCriteria->add(ProyectosPeer::ID, $criteria->remove(ProyectosPeer::ID), $comparison);
        } else {
            $criteria = $values->buildCriteria();
            $selectCriteria = $values->buildPkeyCriteria();
        }

        $criteria->setDbName(self::DATABASE_NAME);

        return BasePeer::doUpdate($selectCriteria, $criteria, $con);
    }

    public static function doDeleteAll($con = null) {
        if ($con === null) {
            $con = Propel::getConnection(self::DATABASE_NAME);
        }
        $affectedRows = 0;
        try {
            $con->begin();
            $affectedRows += BasePeer::doDeleteAll(ProyectosPeer::TABLE_NAME, $con);
            $con->commit();
            return $affectedRows;
        } catch (PropelException $e) {
            $con->rollback();
            throw $e;
        }
    }

    public static function doDelete($values, $con = null) {
        if ($con === null) {
            $con = Propel::getConnection(ProyectosPeer::DATABASE_NAME);
        }

        if ($values instanceof Criteria) {
            $criteria = clone $values;
        } elseif ($values instanceof Proyectos) {

            $criteria = $values->buildPkeyCriteria();
        } else {
            $criteria = new Criteria(self::DATABASE_NAME);
            $criteria->add(ProyectosPeer::ID, (array) $values, Criteria::IN);
        }

        $criteria->setDbName(self::DATABASE_NAME);

        $affectedRows = 0;
        try {
            $con->begin();

            $affectedRows += BasePeer::doDelete($criteria, $con);
            $con->commit();
            return $affectedRows;
        } catch (PropelException $e) {
            $con->rollback();
            throw $e;
        }
    }

    public static function doValidate(Proyectos $obj, $cols = null) {
        $columns = array();

        if ($cols) {
            $dbMap = Propel::getDatabaseMap(ProyectosPeer::DATABASE_NAME);
            $tableMap = $dbMap->getTable(ProyectosPeer::TABLE_NAME);

            if (!is_array($cols)) {
                $cols = array($cols);
            }

            foreach ($cols as $colName) {
                if ($tableMap->containsColumn($colName)) {
                    $get = 'get' . $tableMap->getColumn($colName)->getPhpName();
                    $columns[$colName] = $obj->$get();
                }
            }
        } else {
            
        }

        $res = BasePeer::doValidate(ProyectosPeer::DATABASE_NAME, ProyectosPeer::TABLE_NAME, $columns);
        if ($res !== true) {
            $request = sfContext::getInstance()->getRequest();
            foreach ($res as $failed) {
                $col = ProyectosPeer::translateFieldname($failed->getColumn(), BasePeer::TYPE_COLNAME, BasePeer::TYPE_PHPNAME);
                $request->setError($col, $failed->getMessage());
            }
        }

        return $res;
    }

    public static function retrieveByPK($pk, $con = null) {
        if ($con === null) {
            $con = Propel::getConnection(self::DATABASE_NAME);
        }

        $criteria = new Criteria(ProyectosPeer::DATABASE_NAME);

        $criteria->add(ProyectosPeer::ID, $pk);


        $v = ProyectosPeer::doSelect($criteria, $con);

        return !empty($v) > 0 ? $v[0] : null;
    }

    public static function retrieveByPKs($pks, $con = null) {
        if ($con === null) {
            $con = Propel::getConnection(self::DATABASE_NAME);
        }

        $objs = null;
        if (empty($pks)) {
            $objs = array();
        } else {
            $criteria = new Criteria();
            $criteria->add(ProyectosPeer::ID, $pks, Criteria::IN);
            $objs = ProyectosPeer::doSelect($criteria, $con);
        }
        return $objs;
    }

}

if (Propel::isInit()) {
    try {
        BaseProyectosPeer::getMapBuilder();
    } catch (Exception $e) {
        Propel::log('Could not initialize Peer: ' . $e->getMessage(), Propel::LOG_ERR);
    }
} else {
    Propel::registerMapBuilder('lib.model.map.ProyectosMapBuilder');
}
