<?php

abstract class BaseAreasPeer {

    const DATABASE_NAME = 'propel';
    const TABLE_NAME = 'AREAS';
    const CLASS_DEFAULT = 'lib.model.Areas';
    const NUM_COLUMNS = 6;
    const NUM_LAZY_LOAD_COLUMNS = 0;
    const ID_AREA = 'AREAS.ID_AREA';
    const DESCRIPCION = 'AREAS.DESCRIPCION';
    const SIGLA = 'AREAS.SIGLA';
    const ID_DEPENDENCIA = 'AREAS.ID_DEPENDENCIA';
    const CODIGO = 'AREAS.CODIGO';
    const ID_NIVEL = 'AREAS.ID_NIVEL';
    const ESTADO = 'AREAS.ESTADO';

    private static $phpNameMap = null;
    private static $fieldNames = array(
        BasePeer::TYPE_PHPNAME => array('IdArea', 'Descripcion', 'Sigla', 'IdDependencia', 'Codigo', 'IdNivel', 'Estado',),
        BasePeer::TYPE_COLNAME => array(AreasPeer::ID_AREA, AreasPeer::DESCRIPCION, AreasPeer::SIGLA, AreasPeer::ID_DEPENDENCIA, AreasPeer::CODIGO, AreasPeer::ID_NIVEL, AreasPeer::ESTADO,),
        BasePeer::TYPE_FIELDNAME => array('ID_AREA', 'DESCRIPCION', 'SIGLA', 'ID_DEPENDENCIA', 'CODIGO', 'ID_NIVEL', 'ESTADO', ),
        BasePeer::TYPE_NUM => array(0, 1, 2, 3, 4, 5, 6,)
    );
    private static $fieldKeys = array(
        BasePeer::TYPE_PHPNAME => array('IdArea' => 0, 'Descripcion' => 1, 'Sigla' => 2, 'IdDependencia' => 3, 'Codigo' => 4, 'IdNivel' => 5, 'Estado' => 6,),
        BasePeer::TYPE_COLNAME => array(AreasPeer::ID_AREA => 0, AreasPeer::DESCRIPCION => 1, AreasPeer::SIGLA => 2, AreasPeer::ID_DEPENDENCIA => 3, AreasPeer::CODIGO => 4, AreasPeer::ID_NIVEL => 5, AreasPeer::ESTADO => 6, ),
        BasePeer::TYPE_FIELDNAME => array('ID_AREA' => 0, 'DESCRIPCION' => 1, 'SIGLA' => 2, 'ID_DEPENDENCIA' => 3, 'CODIGO' => 4, 'ID_NIVEL' => 5, 'ESTADO' => 6, ),
        BasePeer::TYPE_NUM => array(0, 1, 2, 3, 4, 5, 6,)
    );

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

    public static function getPhpNameMap() {
        if (self::$phpNameMap === null) {
            $map = AreasPeer::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(AreasPeer::TABLE_NAME . '.', $alias . '.', $column);
    }

    public static function addSelectColumns(Criteria $criteria) {

        $criteria->addSelectColumn(AreasPeer::ID_AREA);

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

        $criteria->addSelectColumn(AreasPeer::SIGLA);

        $criteria->addSelectColumn(AreasPeer::ID_DEPENDENCIA);

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

        $criteria->addSelectColumn(AreasPeer::ID_NIVEL);

        //$criteria->addSelectColumn(AreasPeer::ESTADO);//No se agrega o corre las columnas en doSelectJoinAll de basecomisionespeer - 20170106
    }

    const COUNT = 'COUNT(AREAS.ID_AREA)';
    const COUNT_DISTINCT = 'COUNT(DISTINCT AREAS.ID_AREA)';

    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(AreasPeer::COUNT_DISTINCT);
        } else {
            $criteria->addSelectColumn(AreasPeer::COUNT);
        }

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

        $rs = AreasPeer::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 = AreasPeer::doSelect($critcopy, $con);
        if ($objects) {
            return $objects[0];
        }
        return null;
    }

    public static function doSelect(Criteria $criteria, $con = null) {
        return AreasPeer::populateObjects(AreasPeer::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;
            AreasPeer::addSelectColumns($criteria);
        }

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

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

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

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

            $obj = new $cls();
            $obj->hydrate($rs);
            $results[] = $obj;
        }
        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 AreasPeer::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(AreasPeer::ID_AREA);
            $selectCriteria->add(AreasPeer::ID_AREA, $criteria->remove(AreasPeer::ID_AREA), $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(AreasPeer::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(AreasPeer::DATABASE_NAME);
        }

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

            $criteria = $values->buildPkeyCriteria();
        } else {
            $criteria = new Criteria(self::DATABASE_NAME);
            $criteria->add(AreasPeer::ID_AREA, (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(Areas $obj, $cols = null) {
        $columns = array();

        if ($cols) {
            $dbMap = Propel::getDatabaseMap(AreasPeer::DATABASE_NAME);
            $tableMap = $dbMap->getTable(AreasPeer::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(AreasPeer::DATABASE_NAME, AreasPeer::TABLE_NAME, $columns);
        if ($res !== true) {
            $request = sfContext::getInstance()->getRequest();
            foreach ($res as $failed) {
                $col = AreasPeer::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(AreasPeer::DATABASE_NAME);

        $criteria->add(AreasPeer::ID_AREA, $pk);


        $v = AreasPeer::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(AreasPeer::ID_AREA, $pks, Criteria::IN);
            $objs = AreasPeer::doSelect($criteria, $con);
        }
        return $objs;
    }

}

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