<?php

class Usuario extends CActiveRecord
{
	
        public $confirmar_password;
        public $login;

        public function tableName()
	{
		return 'usuario';
	}

	public function rules()
	{
		return array(
                        array('password, confirmar_password', 'required','on'=>'password'),
                        array('login,password,confirmar_password,estatus,id_perfil_usuario', 'required','on'=>'create'),
                        array('login,password,confirmar_password,id_tecnico', 'required','on'=>'tecnico'),
                        array('login','validar_create','on'=> 'create,tecnico'),
                        array('login','validar_update','on'=> 'update'),
                        array('id_perfil_usuario', 'required','on'=>'update'),
                        array('password,confirmar_password', 'required','on'=>'password'),
                        array('password','length','min'=>'6','message'=>'La conraseña debe tener un minimo de 6 caracteres.','on'=>'create,tecnico,password'),
                        array('password','length','max'=>'14','message'=>'La conraseña debe tener un maximo de 14 caracteres.' ,'on'=>'create,tecnico,password'),
                        array('confirmar_password','compare','compareAttribute'=>'password','message'=>'La contraseña y la confirmación de la contrase&ntilde;a que ingresaste no coinciden.','on'=>'create,tecnico,password'),
			array('id_perfil_usuario', 'numerical', 'integerOnly'=>true),
			array('login', 'length', 'max'=>30),
			array('password', 'length', 'max'=>100),
			array('estatus, borrado', 'length', 'max'=>1),
			array('id_usuario,id_tecnico,login,nombres, apellidos, password, estatus, id_perfil_usuario, borrado', 'safe', 'on'=>'search'),
		);
	}

	public function validar_create($attributes,$params){
            $reg=Usuario::model()->find('LOWER(login)=? and borrado="0"',array(strtolower(htmlspecialchars(addslashes(stripslashes(strip_tags(trim($this->login))))))));
            if($reg != NULL){
                 $this->addError('login','NOMBRE DE USUARIO YA ESTA REGISTRADO EN EL SISTEMA.'); 
            }
        }

        public function validar_update($attributes,$params){
            $reg=  Usuario::model()->find('LOWER(login)=? and borrado="0" and  id_usuario<>?',array(strtolower(htmlspecialchars(addslashes(stripslashes(strip_tags(trim($this->login)))))),htmlspecialchars(addslashes(stripslashes(strip_tags(trim($this->id_usuario)))))));
            if($reg != NULL){
                 $this->addError('login','NOMBRE DE USUARIO YA ESTA REGISTRADO EN EL SISTEMA.');
            }
        }

	public function relations()
	{
		return array(
			'idProfileUsuario' => array(self::BELONGS_TO, 'PerfilUsuario', 'id_perfil_usuario'),
		);
	}
        
	public function attributeLabels()
	{
		return array(
			'id_usuario' => 'ID',
			'login' => 'LOGIN',
			'password' => 'PASSWORD',
                        'confirmar_password'=>'CONFIRMAR PASSWORD',
			'estatus' => 'ESTATUS',
			'id_perfil_usuario' => 'PERFIL',
                        'nombres'=>'NOMBRES',
                        'apellidos'=>'APELLIDOS',
                        'dni'=>'CEDULA DE IDENTIDAD',
             
			'borrado' => 'Borrado',
		);
	}
        
	public function search()
	{
		$criteria=new CDbCriteria;
		$criteria->compare('id_usuario',$this->id_usuario);
                $criteria->compare('LOWER(login)',strtolower($this->login),true);
                $criteria->compare('LOWER(nombres)',strtolower($this->nombres),true);
                $criteria->compare('LOWER(apellidos)',strtolower($this->apellidos),true);
                $criteria->compare('dni',$this->dni,true);
                $criteria->compare('LOWER(nombres)',strtolower($this->nombres),true);
                $criteria->compare('LOWER(apellidos)',strtolower($this->apellidos),true);
		$criteria->compare('password',$this->password,true);
		$criteria->compare('estatus',$this->estatus,true);
		$criteria->compare('id_perfil_usuario',$this->id_perfil_usuario);
		$criteria->compare('t.borrado',0,true);
                $sort = new CSort();
		$sort->defaultOrder = 'id_usuario DESC';
                $data = new CActiveDataProvider($this, array(
                    'criteria' => $criteria,
                    'pagination' => array(
                        'pageSize' => Yii::app()->user->getState('pageSize', Yii::app()->params['defaultPageSize']),
                    ),
                    'sort' => $sort,
                ));
                return $data;
	}


	public static function model($className=__CLASS__)
	{
		return parent::model($className);
	}
        
        public function validatePassword($password)
        {
            return $this->hashPassword($password)===$this->password;
        }
         
        public static function hashPassword($password)
        {
           return sha1($password);
        }
        
        public static function cambiarClave($id){
                $update = Yii::app()->db->createCommand()->
                update("usuario", array(
                "password=" =>sha1($_POST['Usuario']['password']),           
                ), "id_usuario=$id and borrado=0");
            return $update;
        }
        
        //administrador
        public static function agregarUsuario(){
        $update = Yii::app()->db->createCommand()->
            insert("usuario", array(     
            "login" =>$_POST['Usuario']['login']!=NULL?Utility::mayuscula($_POST['Usuario']['login']):'',
            "dni" =>  $_POST['Usuario']['dni']!=NULL?Utility::minuscula($_POST['Usuario']['dni']):'',
            "nombres" =>  $_POST['Usuario']['nombres']!=NULL?Utility::mayuscula($_POST['Usuario']['nombres']):'',
            "apellidos" => $_POST['Usuario']['apellidos']!=NULL?Utility::mayuscula($_POST['Usuario']['apellidos']):'', 
            "password" =>sha1($_POST['Usuario']['password']), 
            "id_perfil_usuario" =>$_POST['Usuario']['id_perfil_usuario'],  
            "estatus" =>$_POST['Usuario']['estatus'], 
            "borrado" =>'0',  
           ));
         return $update;
        }
     
        
        public static function eliminarUsuario($id){
            $update = Yii::app()->db->createCommand()->
                update("usuario", array(
                "borrado"=>1,           
                ), "id_usuario=$id and borrado=0");
            return $update;
        }

        public static function modificarUsuario($id){
        $update = Yii::app()->db->createCommand()->
            update("usuario", array(     
            "login" =>$_POST['Usuario']['login']!=NULL?Utility::mayuscula($_POST['Usuario']['login']):'',
            "dni" =>  $_POST['Usuario']['dni']!=NULL?Utility::minuscula($_POST['Usuario']['dni']):'',
            "nombres" =>  $_POST['Usuario']['nombres']!=NULL?Utility::mayuscula($_POST['Usuario']['nombres']):'',
            "apellidos" => $_POST['Usuario']['apellidos']!=NULL?Utility::mayuscula($_POST['Usuario']['apellidos']):'',  
            "estatus" =>$_POST['Usuario']['estatus'],  
            "id_perfil_usuario" =>$_POST['Usuario']['id_perfil_usuario'],     
        ),  "id_usuario=$id and borrado=0 ");
            return $update;
        }
        
    
        
        

        public static function modificarPassword($id){
        $update = Yii::app()->db->createCommand()->
            update("usuario", array(     
            "password" =>sha1($_POST['Usuario']['password']),    
        ), "id_usuario=$id and borrado=0 ");
            return $update;
        }
        
     public function getConcatened(){
            return $this->dni . '  ' .$this->nombres . '  ' . $this->apellidos;
        }    
  
    public static function lista(){
            $consulta= Usuario::model()->findAll('borrado="0"');
            $lista=  CHtml::listData($consulta, 'id_usuario', 'concatened');
            return $lista;
    }
    
    public static function descripcion($id){
           $descripcion='';
            if(!empty($id)){
            $row= Usuario::model()->find('id_usuario=?',array($id));
            if(!empty($row)){
               $descripcion=$row->login ; 
            }
            }
           return $descripcion;  
       }
}
