<?php

/**
 * This is the model class for table "retenciones.estatus_txt_integrado".
 *
 * The followings are the available columns in table 'retenciones.estatus_txt_integrado':
 *
 * @property string $id_estatus_txt
 * @property string $id_datos_txt_integrado
 * @property string $fecha_registro
 * @property bool $actual
 */
class EstatusTxtIntegrado extends CActiveRecord
{
    public $datosUsuario;

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

    /**
     * @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('id_estatus_txt, id_datos_txt_integrado', 'required'),
            array('id_estatus_txt, id_datos_txt_integrado, actual', 'required', 'on' => 'aporte_voluntario'),

            array('actual, id_metodo_pago', 'safe'),
            // The following rule is used by search().
            // @todo Please remove those attributes that should not be searched.
            array('id_estatus_txt, id_datos_txt_integrado, fecha_registro, actual', 'safe', 'on' => 'search'),
        );
    }

    /**
     * @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(
                    'idTxtIntegrado' => array(self::BELONGS_TO, 'DatosTxtIntegrado', 'id_datos_txt_integrado'),
                    'idEstatusTxt' => array(self::BELONGS_TO, 'EstatusTxt', 'id_estatus_txt'),
        );
    }

    /**
     * @return array customized attribute labels (name=>label)
     */
    public function attributeLabels()
    {
        return array(
            'id_estatus_txt' => 'Id Estatus Txt',
            'id_datos_txt_integrado' => 'Id Datos Txt Integrado',
            'fecha_registro' => 'Fecha Registro',
            'actual' => 'Actual',
        );
    }

    /**
     * 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_estatus_txt', $this->id_estatus_txt, true);
        $criteria->compare('id_datos_txt_integrado', $this->id_datos_txt_integrado, true);
        $criteria->compare('fecha_registro', $this->fecha_registro, true);
        $criteria->compare('actual', $this->actual);

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

    public function searchStatus($id)
    {
        // @todo Please modify the following code to remove attributes that should not be searched.

        $criteria = new CDbCriteria();

        $criteria->compare('id_estatus_txt', $this->id_estatus_txt, true);
        $criteria->compare('id_datos_txt_integrado', $id);
        $criteria->compare('fecha_registro', $this->fecha_registro, true);
        $criteria->compare('actual', $this->actual);
        $criteria->order = 'id DESC';

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

    public function afterFind()
    {
        if ($this->id_usuario != '') {
            $datos = CrugeUserI::model()->findByPk($this->id_usuario);
            if ($datos) {
                $this->datosUsuario = $datos->username;
            }
        }

        return parent::afterFind();
    }

    /**
     * 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 EstatusTxtIntegrado the static model class
     */
    public static function model($className = __CLASS__)
    {
        return parent::model($className);
    }

    public function beforeSave()
    {
        $this->id_usuario = Yii::app()->user->id;

        return parent::beforeSave();
    }

    public static function seguimiento($idNomina, $idEstatus, $metodo_pago = null, $observacion = null)
    {
        self::model()->updateAll(array('actual' => false), 'id_datos_txt_integrado=:id', array(':id' => $idNomina));

        $modelEstatusTxt = new self();
        $modelEstatusTxt->id_estatus_txt = $idEstatus;
        $modelEstatusTxt->id_datos_txt_integrado = $idNomina;
        $modelEstatusTxt->observacion = $observacion;
        $modelEstatusTxt->actual = true;

        if (! is_null($metodo_pago)) {
            $modelEstatusTxt->id_metodo_pago = $metodo_pago;
        }

        if (! $modelEstatusTxt->save()) {
            throw new Exception('No se pudo realizar la actualización del estatus de la nomina.');
        }

        return true;
    }
}
