<?php

class BancoTipoArchivo extends CActiveRecord
{
    public $nombre;

    public function tableName()
    {
        return 'configuracion.banco_tipo_archivo';
    }

    public function rules()
    {
        return array(
            array('id_banco, id_tipo_archivo, id_banco_tipo_servicio', 'required'),
            array('id_tipo_archivo, id_banco_tipo_servicio', 'numerical', 'integerOnly' => true),
            array('id_banco, borrado', 'safe'),
            array('id, id_banco, id_tipo_archivo', 'safe', 'on' => 'search'),
        );
    }

    public function relations()
    {
        return array(
            'estructuraArchivoBancos' => array(self::HAS_MANY, 'EstructuraArchivoBanco', 'id_banco_tipo_servicio'),
            'bancoTipoServicio' => array(self::BELONGS_TO, 'BancoTipoServicio', 'id_banco_tipo_servicio'),
            'tipoArchivo' => array(self::BELONGS_TO, 'TipoArchivo', 'id_tipo_archivo'),
            'idBanco' => array(self::BELONGS_TO, 'Banco', 'id_banco'),
        );
    }

    public function attributeLabels()
    {
        return array(
            'id' => 'ID',
            'id_banco' => 'Banco',
            'id_tipo_archivo' => 'Tipo de archivo',
            'id_banco_tipo_servicio' => 'Tipo de servicio',
        );
    }

    public function search()
    {
        $criteria = new CDbCriteria();
        $criteria->compare('id', $this->id);
        $criteria->compare('id_banco', $this->id_banco);
        $criteria->compare('id_banco_tipo_servicio', $this->id_banco_tipo_servicio);
        $criteria->compare('id_tipo_archivo', $this->id_tipo_archivo);
        $criteria->addCondition('borrado IS FALSE');

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

    public function getTipoDescarga($id = null)
    {
        if (!is_null($id)) {
            return TipoArchivo::get($id)->nombre;
        }

        return CHtml::listData(TipoArchivo::all(), 'id', 'nombre');
    }

    public function getBancoTipoServicio()
    {
        return BancoTipoServicio::model()->find(array(
            'select' => 'bts.id, concat(ts.nombre, \' - \', td.nombre, \' - \', codigo_servicio) as nombre',
            'alias' => 'bts',
            'join' => 'inner join configuracion.tipo_servicio ts on bts.id_tipo_servicio=ts.id '.
                      'inner join configuracion.tipo_descarga td on bts.tipo_descarga=td.id',
            'condition' => 'bts.id=:id',
            'params' => array(
                'id' => $this->id_banco_tipo_servicio,
            ),
        ))->nombre;
    }

    public function validarConfiguracion()
    {
        $configuracion = Yii::app()->db->createCommand('
            SELECT
              (SELECT count(*)
               FROM configuracion.banco_tipo_archivo
               WHERE id_banco=a.id_banco AND id_tipo_archivo=1) as integrados,
              (SELECT count(*)
               FROM configuracion.banco_tipo_archivo
               WHERE id_banco=a.id_banco AND id_tipo_archivo=2) as separados
            FROM configuracion.banco_tipo_archivo a
            WHERE a.id_banco=:id LIMIT 1
        ')->bindValue('id', $this->id_banco)->queryRow();

        return $configuracion['integrados'] == 1 && $configuracion['separados'] == 2;
    }

    public function eliminar()
    {
        $this->borrado = true;
        return $this->save(false);
    }

    public static function model($className = __CLASS__)
    {
        return parent::model($className);
    }

    public static function tipos($id)
    {
        return self::model()->findAll(array(
            'select' => 'bta.id, ta.nombre',
            'alias' => 'bta',
            'join' => 'inner join configuracion.tipo_archivo ta on bta.id_tipo_archivo=ta.id',
            'condition' => 'id_banco=:id_banco',
            'params' => array(
                'id_banco' => $id,
            ),
        ));
    }
}
