<?php

/**
 * This is the model class for table "conf_porcentaje".
 *
 * The followings are the available columns in table 'conf_porcentaje':
 * @property integer $id
 * @property string $idunidad
 * @property string $idtipotrabajador
 * @property integer $idporcentaje
 * @property boolean $trabajador
 * @property boolean $blnborrado
 * @property string $fecharegistro
 * @property string $fecha_actualizar_porcentaje
 * @property string $id_usuario
 *
 * The followings are the available model relations:
 * @property TipoTrabajador $idtipotrabajador0
 * @property Unidad $idunidad0
 */
class ConfPorcentaje extends CActiveRecord
{
    public $fechaActualizacion;
    public $registradoTrabajador =NULL;
    //0 Ninguno
    //1 Asociado
    //2 CajaAhorro

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

	/**
	 * @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('tipo_aporte', 'required'),
                        array('registradoTrabajador', 'validarPorcentaje'),
                        array('tipo_aporte', 'validarPorcentajePatrono','on'=>'RegistroPatrono, RegistroAsociado'),
                        array('tipo_aporte', 'validarUnicidad'),
			//array('porcentaje', 'numerical', 'integerOnly'=>true),
//                        array('porcentaje', 'match',  //PARA VALIDAR CAMPOS CON FORMATO MONEDA
//					'pattern' => '/^[0-9]\d{0,2}(\.[0-9]\d{2,2})*(\,\d{1,2})?$/',
// 					'message' => 'El valor del campo debe tener un formato 100,00',),
			array('idunidad, idtipotrabajador, trabajador, blnborrado, fecharegistro, idporcentaje,fecha_actualizar_porcentaje, id_usuario,fechaActualizacion,publicar,tipo_aporte', 'safe'),
			// The following rule is used by search().
			// @todo Please remove those attributes that should not be searched.
			array('id, idunidad, idtipotrabajador, trabajador, blnborrado, fecharegistro, fecha_actualizar_porcentaje, id_usuario,publicar', 'safe', 'on'=>'search'),
		);
	}

        public function validarPorcentaje(){
            if(!$this->hasErrors('registradoTrabajador')){
                if($this->registradoTrabajador == 1 && $this->idporcentaje =='')
                    $this->addError('idporcentaje','Debe de definir el porcentaje para el asociado');
            }
        }
        public function validarUnicidad(){
            if(!$this->hasErrors('tipo_aporte')){                
                $criteria=new CDbCriteria;
		$criteria->compare('idunidad',$this->idunidad);
		$criteria->compare('idtipotrabajador',$this->idtipotrabajador);
		$criteria->compare('trabajador',($this->trabajador)?1:0);
		$criteria->compare('tipo_aporte',$this->tipo_aporte);
		$criteria->compare('blnborrado',0);                
//                echo "<pre>";print_r($criteria);exit;
                $model = ConfPorcentaje::model()->find($criteria);
                if($model){
                    if($this->isNewRecord){                        
                        if($model)
                            $this->addError('tipo_aporte','Ya se ha registrado este tipo de aporte');
                    }
                    else{
                        if($this->id != $model->id)
                            $this->addError('tipo_aporte','Ya se ha registrado este tipo de aporte');
                    }

                }
            }
        }
        public function validarPorcentajePatrono(){
            if(!$this->hasErrors('tipo_aporte')){
                if($this->tipo_aporte == 1){
                    if($this->idporcentaje =='')
                        $this->addError('idporcentaje','Debe de definir el porcentaje del patrono');
                }
                elseif ($this->tipo_aporte == 3) {
                    if(($this->idunidad =='' && $this->idtipotrabajador =='')){
                         $this->addError('idunidad','Debe de definir la unidad o el tipo de trabajador');
                         $this->addError('idtipotrabajador','Debe de definir la unidad o el tipo de trabajador');                        
                    }
                    if($this->idporcentaje =='')
                         $this->addError('idporcentaje','Debe de definir el porcentaje para el patrono');
                }
                   
            }
        }
	/**
	 * @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(
			'idTipotrabajador' => array(self::BELONGS_TO, 'TipoTrabajador', 'idtipotrabajador'),
			'idUnidad' => array(self::BELONGS_TO, 'Unidad', 'idunidad'),
			'idPorcentaje' => array(self::BELONGS_TO, 'Porcentaje', 'idporcentaje'), 
		);
	}

	/**
	 * @return array customized attribute labels (name=>label)
	 */
	public function attributeLabels()
	{
		return array(
			'id' => 'ID',
			'idunidad' => 'Unidad',
			'idtipotrabajador' => 'Tipo de trabajador',
			'idporcentaje' => 'Porcentaje',
			'trabajador' => 'Trabajador',
			'blnborrado' => 'Blnborrado',
			'fecharegistro' => 'Fecharegistro',
			'fecha_actualizar_porcentaje' => 'Fecha Actualizar Porcentaje',
			'id_usuario' => 'Id Usuario',
			'porcentaje_equivalente' => 'Porcentaje equivalente',
			'registradoTrabajador' => 'Definido a',
                    
		);
	}

	/**
	 * Retrieves a list of models based on the current search/filter conditions.
	 *
	 * Typical usecase:
	 * - Initialize the model fields with values from filter form.
	 * - Execute this method to get CActiveDataProvider instance which will filter
	 * models according to data in model fields.
	 * - Pass data provider to CGridView, CListView or any similar widget.
	 *
	 * @return CActiveDataProvider the data provider that can return the models
	 * based on the search/filter conditions.
	 */
	public function search()
	{
		// @todo Please modify the following code to remove attributes that should not be searched.

		$criteria=new CDbCriteria;

		$criteria->compare('id',$this->id);
		$criteria->compare('idunidad',$this->idunidad);
		$criteria->compare('idtipotrabajador',$this->idtipotrabajador);
		$criteria->compare('idporcentaje',$this->idporcentaje);
		$criteria->compare('trabajador',$this->trabajador);
		$criteria->compare('blnborrado',$this->blnborrado);
		$criteria->compare('fecharegistro',$this->fecharegistro,true);
		$criteria->compare('fecha_actualizar_porcentaje',$this->fecha_actualizar_porcentaje,true);
		$criteria->compare('id_usuario',$this->id_usuario);
		$criteria->compare('publicar',$this->publicar);

		return new CActiveDataProvider($this, array(
			'criteria'=>$criteria,
		));
	}

        public function afterFind(){
            $configuracion = json_decode($this->fecha_actualizar_porcentaje, true );
           
            if(is_array($configuracion)){
                $this->fechaActualizacion = $configuracion;  
            }
            if($this->trabajador)
                $this->registradoTrabajador= 1;
            else
                $this->registradoTrabajador= 2;
                    
            return parent::afterFind();
        }
        public function beforeSave(){            
            $this->idunidad = (($this->idunidad!='')?$this->idunidad:NULL);
            $this->idtipotrabajador = (($this->idtipotrabajador!='')?$this->idtipotrabajador:NULL);
            $this->idporcentaje = (($this->idporcentaje!='')?$this->idporcentaje:NULL);           
            
            return parent::beforeSave();
        }
        
	/**
	 * 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 ConfPorcentaje the static model class
	 */
	public static function model($className=__CLASS__)
	{
		return parent::model($className);
	}
}
