<?php

/**
 * This is the model class for table "configuracion.banco_variable".
 *
 * The followings are the available columns in table 'configuracion.banco_variable':
 *
 * @property int    $id
 * @property string $id_conf_variable_banco
 * @property int    $tipo_campo
 * @property string $formato_variable
 * @property bool   $blnborrado
 * @property string $idbanco
 *
 * The followings are the available model relations:
 * @property ConfVaribaleBanco $idConfVariableBanco
 * @property TipoServicio      $idBancoServicio
 */
class BancoVariable extends CActiveRecord
{
    public static $tipoDato = ['1' => 'TEXTO', '2' => 'INTEGER', '3' => 'FECHA', '4' => 'NUMERICO'];
    public $longitud;
    public $relleno;
    public $posicion_inicio;
    public $posicion_fin;
    public $relleno_direccion;
    public $separador_miles;
    public $separador_decimal;
    public $formato_fecha;
    public $digitos_decimales;

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

    /**
     * @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 [
            ['idbanco, id_banco_tipo_servicio,id_conf_variable_banco, tipo_campo, nombre_variable, longitud', 'required', 'on' => 'registro'],
            ['tipo_campo', 'numerical', 'integerOnly' => true],
            ['longitud, posicion_inicio, posicion_fin', 'numerical', 'integerOnly' => true, 'on' => 'formato_variable'],

            ['digitos_decimales ,longitud, posicion_inicio, posicion_fin', 'length', 'max' => 3, 'on' => 'formato_variable'],
            ['formato_fecha, posicion_fin', 'length', 'max' => 8, 'on' => 'formato_variable'],
            ['relleno, separador_decimal, separador_miles', 'length', 'max' => 1, 'on' => 'formato_variable'],

            ['digitos_decimales,idbanco, longitud,id_banco_tipo_servicio, relleno, posicion_inicio, posicion_fin, relleno_direccion, separador_miles,
            separador_decimal, formato_fecha, id_conf_variable_banco, formato_variable, blnborrado, nombre_variable', 'safe'],
            // The following rule is used by search().
            // @todo Please remove those attributes that should not be searched.
            ['id, id_conf_variable_banco, tipo_campo, formato_variable, blnborrado, idbanco', '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 [
            'idConfVariableBanco' => [self::BELONGS_TO, 'ConfVaribaleBanco', 'id_conf_variable_banco'],
            'idBanco' => [self::BELONGS_TO, 'Banco', 'idbanco'],
        ];
    }

    /**
     * @return array customized attribute labels (name=>label)
     */
    public function attributeLabels()
    {
        return [
            'id' => 'ID',
            'id_conf_variable_banco' => 'Variable',
            'tipo_campo' => 'Tipo Campo',
            'formato_variable' => 'Formato Variable',
            'blnborrado' => 'Blnborrado',
            'idbanco' => 'Banco',
            'nombre_variable' => 'Alias',
            'id_banco_tipo_servicio' => 'Tipo de servicio',
            'digitos_decimales' => 'Relleno para el redondeo',
        ];
    }

    public function afterFind()
    {
        if ($this->formato_variable != '') {
            $formato = json_decode($this->formato_variable, true);
            if (is_array($formato)) {
                $this->longitud = $formato['longitud'];
                $this->posicion_inicio = $formato['posicion_inicio'];
                $this->posicion_fin = $formato['posicion_fin'];
                $this->relleno = $formato['relleno'];
                $this->relleno_direccion = $formato['relleno_direccion'];
                $this->separador_miles = $formato['separador_miles'];
                $this->separador_decimal = $formato['separador_decimal'];
                $this->formato_fecha = $formato['formato_fecha'];

                if (isset($formato['digitos_decimales'])) {
                    $this->digitos_decimales = $formato['digitos_decimales'];
                }
            }
        }

        return parent::afterFind();
    }

    /**
     * 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('id_conf_variable_banco', $this->id_conf_variable_banco);
        $criteria->compare('idbanco', $this->idbanco);
        $criteria->compare('tipo_campo', $this->tipo_campo);
        $criteria->compare('formato_variable', $this->formato_variable, true);
        $criteria->compare('blnborrado', $this->blnborrado);

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

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

        $criteria = new CDbCriteria();

        $criteria->compare('id', $this->id);
        $criteria->compare('id_conf_variable_banco', $id);
        $criteria->compare('tipo_campo', $this->tipo_campo);
        $criteria->compare('formato_variable', $this->formato_variable, true);
        $criteria->compare('blnborrado', $this->blnborrado);

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

    public function getTipoDato($id = null)
    {
        if ($id !== null) {
            return self::$tipoDato[$id];
        }

        return self::$tipoDato;
    }

    public function beforeSave()
    {
        $this->formato_variable = json_encode([
            'longitud' => $this->longitud,
            'posicion_inicio' => $this->posicion_inicio,
            'posicion_fin' => $this->posicion_fin,
            'relleno' => $this->relleno,
            'relleno_direccion' => $this->relleno_direccion,
            'separador_miles' => $this->separador_miles,
            'separador_decimal' => $this->separador_decimal,
            'formato_fecha' => $this->formato_fecha,
            'digitos_decimales' => $this->digitos_decimales,
        ]);

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