<?php

/**
 * This is the model class for table "sidcai_usuario".
 *
 * The followings are the available columns in table 'sidcai_usuario':
 * @property integer $usua_codigo_pk
 * @property string $usua_nombre
 * @property string $usua_apellido
 * @property string $usua_telefono
 * @property string $usua_cargo
 * @property string $usua_tipodocumento
 * @property string $usua_cambiocontrasena
 * @property string $usua_habilitado
 * @property integer $tipo_codigo_fk
 * @property string $usua_documento
 * @property string $usua_correoelectronico
 * @property string $usua_contrasena
 * @property integer $audit_usua
 * @property string $usua_celular
 *
 * The followings are the available model relations:
 * @property SidcaiPrestamosExpedientes[] $sidcaiPrestamosExpedientes
 * @property SidcaiPrestamosExpedientes[] $sidcaiPrestamosExpedientes1
 * @property SidcaiPrestamosExpedientes[] $sidcaiPrestamosExpedientes2
 * @property SidcaiTipoacceso $tipoCodigoFk
 * @property SidcaiAccion[] $sidcaiAccions
 * @property SidcaiDeclaracioncti[] $sidcaiDeclaracionctis
 * @property SidcaiAportante[] $sidcaiAportantes
 * @property SidcaiPerfil[] $sidcaiPerfils
 */
class SidcaiUsuario extends CActiveRecord{

	public $usua_nacionalidad; //Solo se usa para poder guardar "V" o "E" en el documento del usuario.

	/** Cambio de clave **/
	public $contrasena_actual;
	public $contrasena_nueva;
	public $repetir_contrasena;
	/** FIN Cambio de clave **/

	/**
	 * @return string the associated database table name
	 */
	public function tableName(){
		return 'sidcai_usuario';
	}

	/**
	 * @return array validation rules for model attributes.
	 */
	public function rules(){
		// NOTE: you should only define rules for those attributes that
		// will receive user inputs.
		return array(
			array(
				'usua_documento, usua_nombre, usua_apellido, usua_telefono, usua_tipodocumento, usua_correoelectronico, usua_nacionalidad', 
				'required',
				'message' => 'Este campo es requerido.'
			),
			array(
				'usua_documento, usua_nombre, usua_apellido, usua_telefono, usua_tipodocumento, usua_correoelectronico, usua_nacionalidad',
				'filter',
				'filter' => 'trim'
			),
			array(
				'tipo_codigo_fk, audit_usua, usua_telefono, usua_celular', 
				'numerical', 
				'integerOnly' => true,
				'message' => 'Solo se permiten números.'
			),
			array(
				'usua_documento',
				'length', 
				'min' => 8,
				'tooShort' => 'El número de documento no es válido.',
			),
			array(
				'usua_documento', 
				'existeDocumento',
				'on' => 'agregar'
			),
			array(
				'usua_correoelectronico', 
				'match', 
				'pattern' => '/^([a-zA-Z0-9]+)([\.{1}])?([a-zA-Z0-9-_.]+)([a-zA-Z0-9]+)(@GMAIL\.COM)?$/',
				'message' => 'Correo electrónico no válido.'
			),
			array(
				'usua_documento', 
				'match', 
				'pattern' => '/^([VE])?[0-9]{8}$/',
				'message' => 'El documento no es válido.'
			),
			// Válida que el tipo de documento sea solo "CP".
			array(
				'usua_tipodocumento', 
				'match', 
				'pattern' => '/^([CP]){1}$/',
				'message' => 'El Tipo de Documento es incorrecto.'
			),
			// Válida que la nacionalida sea solo "VE".
			array(
				'usua_nacionalidad', 
				'match', 
				'pattern' => '/^([VE]){1}$/',
				'message' => 'La Nacionalidad es incorrecta.'
			),
			array(
				'usua_nombre, usua_apellido, usua_correoelectronico, usua_cargo',
				'length', 
				'min' => 4,
				'tooShort' => 'Mínimo 4 caracteres.'
			),
			array(
				'usua_nombre, usua_apellido',
				'length',
				'max' => 30,
				'tooLong' => 'Máximo 30 caracteres.'
			),
			array(
				'usua_cargo',
				'length',
				'max' => 30,
				'tooLong' => 'Máximo 30 caracteres.'
			),
			array(
				'usua_telefono, usua_celular', 
				'length', 
				'min' => 11,
				'tooShort' => 'Número de teléfono incorrecto.',
				'max' => 11,
				'tooLong' => 'Número de teléfono incorrecto.'
			),
			array(
				'usua_contrasena', 
				'length', 
				'max' => 255
			),
			array(
				'usua_documento', 
				'existeDocumentoModificar',
				'on' => 'modificar'
			),
			array(
				'usua_cargo, usua_cambiocontrasena, usua_habilitado, usua_celular', 
				'safe'
			),
		);
	}

	/**
	 * @return array relational rules.
	 */
	public function relations(){
		// NOTE: you may need to adjust the relation name and the related
		// class name for the relations automatically generated below.
		return array(
			'sidcaiPrestamosExpedientes' => array(self::HAS_MANY, 'SidcaiPrestamosExpedientes', 'usua_codigo_devuelve_fk'),
			'sidcaiPrestamosExpedientes1' => array(self::HAS_MANY, 'SidcaiPrestamosExpedientes', 'usua_codigo_presta_fk'),
			'sidcaiPrestamosExpedientes2' => array(self::HAS_MANY, 'SidcaiPrestamosExpedientes', 'usua_codigo_prestamo_fk'),
			'tipoCodigoFk' => array(self::BELONGS_TO, 'SidcaiTipoacceso', 'tipo_codigo_fk'),
			'sidcaiAccions' => array(self::HAS_MANY, 'SidcaiAccion', 'usua_codigo_fk'),
			'sidcaiDeclaracionctis' => array(self::HAS_MANY, 'SidcaiDeclaracioncti', 'usua_codigo_fk'),
			'sidcaiAportantes' => array(self::MANY_MANY, 'SidcaiAportante', 'sidcai_usuario_aportante(usua_codigo_fk, apor_codigo_fk)'),
			'sidcaiPerfils' => array(self::MANY_MANY, 'SidcaiPerfil', 'sidcai_perfil_usuario(usua_codigo_fk, perf_codigo_fk)'),
		);
	}

	/**
	 * @return array customized attribute labels (name=>label)
	 */
	public function attributeLabels(){
		return array(
			'usua_codigo_pk' 		=> 'Código',
			'usua_nombre'			=> 'Nombres',
			'usua_apellido' 		=> 'Apellidos',
			'usua_telefono' 		=> 'Teléfono 1',
			'usua_cargo' 			=> 'Cargo',
			'usua_tipodocumento' 	=> 'Tipo de documento',
			'usua_cambiocontrasena' => 'Usua Cambiocontrasena',
			'usua_habilitado' 		=> 'Habilitado',
			'tipo_codigo_fk' 		=> 'Tipo Codigo Fk',
			'usua_documento' 		=> 'Documento',
			'usua_celular' 			=> 'Teléfono 2',
			'audit_usua'			=> 'Usuario Auditor',
			'usua_contrasena'		=> 'Contraseña',
			'usua_correoelectronico' => 'Correo electrónico',

			'usua_nacionalidad' => 'Nacionalidad',

			// Labels en Cambio de clave
            'contrasena_actual' 	=> 'Contraseña Actual',
			'contrasena_nueva' 		=> 'Nueva contraseña',
			'repetir_contrasena' 	=> 'Confirmar contraseña'
		);
	}

	/**
	 * Returns the static model of the specified AR class.
	 * Please note that you should have this exact method in all your CActiveRecord descendants!
	 * @param string $className active record class name.
	 * @return SidcaiUsuario the static model class
	 */
	public static function model($className=__CLASS__){
		return parent::model($className);
	}

	// Funcion para verificar que no exista un usuario con el mismo número de documento al registrar
	public function existeDocumento(){
		$documento = $this->usua_nacionalidad.$this->usua_documento;

		if($documento != ""){
			$usuario = SidcaiUsuario::model()->find('usua_documento = :usua_documento', array(':usua_documento' => $documento));

			if($usuario != null){
				$this->addError('usua_documento', $documento.' ya se encuentra registrado en el sistema.');
			}
		}
	}

	/* Si el documento que está guardado en la Base de Datos es distinto al que se quiere editar que compruebe que no exista otro registro con el mismo documento. */
	public function existeDocumentoModificar(){
		$original = SidcaiUsuario::model()->findByPk($this->usua_codigo_pk);
		$nuevo = SidcaiUsuario::model()->find('usua_documento = :usua_documento', array(':usua_documento' => $this->usua_nacionalidad.$this->usua_documento ));

		if($nuevo != null){
			if($nuevo->usua_codigo_pk != $original->usua_codigo_pk)
				$this->addError('usua_documento', $this->usua_nacionalidad.$this->usua_documento. ' ya se encuentra registrado.');
		}
	}
}
