<?php

/**
 * This is the model class for table "asociado_cuenta_banco".
 *
 * The followings are the available columns in table 'asociado_cuenta_banco':
 *
 * @property int $id
 * @property string $idasociado
 * @property string $id_banco
 * @property string $cuenta_bancaria
 */
class AsociadoCuentaBanco extends CActiveRecord
{
	public $cedula, $nombres, $apellidos, $oficina, $unidad;
	/**
	 * @return string the associated database table name
	 */
	public function tableName()
	{
		return 'asociado_cuenta_banco';
	}

	/**
	 * @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_banco, cuenta_bancaria, cuenta_corriente', 'required'),
			array('cuenta_principal', 'verificarCuentaPrincipal', 'on'=>'Registro'),
			array('cuenta_principal', 'unico', 'on'=>'Registro'),
			array('cuenta_bancaria', 'numerical'),
			array('cuenta_bancaria', 'length', 'min'=>20, 'max'=>20),
			array('cuenta_bancaria, cuenta_principal, cuenta_corriente', 'safe'),
			// The following rule is used by search().
			// @todo Please remove those attributes that should not be searched.
			array('id, idasociado, id_banco, cuenta_bancaria, cedula, nombres, apellidos, oficina, unidad', '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(
            'idBanco' => array(self::BELONGS_TO, 'Banco', 'id_banco'),
            'idAsociado' => array(self::BELONGS_TO, 'Asociado', 'idasociado'),
        );
    }

    /**
     * @return array customized attribute labels (name=>label)
     */
    public function attributeLabels()
    {
        return array(
            'id' => 'ID',
            'idasociado' => 'Idasociado',
            'id_banco' => 'Banco',
            'cuenta_bancaria' => 'Numero de cuenta bancaria',
            'cuenta_corriente' => 'Tipo de cuenta',
        );
    }

    public function verificarCuentaPrincipal(){
		if($this->isNewRecord){
			if($this->cuenta_principal){
				$cantidadCuentasPrincipal = self::model()->count('idasociado=:idasociado AND cuenta_principal= TRUE AND blnborrado = false',[':idasociado'=>$this->idasociado]);
				if($cantidadCuentasPrincipal > 0)
					$this->addError('cuenta_principal','Ya se ha registrado la cuenta de banco  principal');
			}
			else{
				$cantidadCuentasPrincipal = self::model()->count('idasociado=:idasociado  AND cuenta_principal= TRUE AND blnborrado = false',[':idasociado'=>$this->idasociado]);
				if($cantidadCuentasPrincipal == 0)
					$this->addError('cuenta_principal','Debe registrar la cuenta de banco principal');
			}

		}
		else{
			if($this->cuenta_principal){
				$cantidadCuentasPrincipal = self::model()->count('idasociado=:idasociado AND cuenta_principal= TRUE  AND id !=:id AND blnborrado = false',[':idasociado'=>$this->idasociado,':id'=>$this->id]);
				if($cantidadCuentasPrincipal > 0)
					$this->addError('cuenta_principal','Ya se ha registrado la cuenta de banco  principal');
			}
			else{
				$cantidadCuentasPrincipal = self::model()->count('idasociado=:idasociado  AND cuenta_principal= TRUE AND id !=:id AND blnborrado = false',[':idasociado'=>$this->idasociado,':id'=>$this->id]);
				if($cantidadCuentasPrincipal == 0)
					$this->addError('cuenta_principal','Debe registrar la cuenta de banco principal');
			}

		}
	}

	public function unico(){
		if(!$this->hasErrors('cuenta_bancaria')){
			$cuenta = self::model()->find('idasociado=:idasociado AND cuenta_bancaria=:cuenta_bancaria AND blnborrado = false',[':idasociado'=>$this->idasociado,':cuenta_bancaria'=>$this->cuenta_bancaria]);
			if($cuenta){
				if($this->isNewRecord)
					$this->addError('cuenta_bancaria','El número de cuenta ya esta registrado');
				else{
					if($cuenta->id != $this->id){
						$this->addError('cuenta_bancaria','El número de cuenta ya esta registrado');
					}
				}
			}
		}
	}

	/**
	 * 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->with = 'idAsociado';
		$criteria->condition = 't.blnborrado = false AND id_estatus = 1';
		$criteria->compare('idasociado',$this->idasociado,true);
		$criteria->compare('cedula',$this->cedula);
		$criteria->compare('UPPER(nombre)',strtoupper($this->nombres),true);
		$criteria->compare('UPPER(apellidos)',strtoupper($this->apellidos),true);
		$criteria->compare('oficina',$this->oficina);
		$criteria->compare('idunidad',$this->unidad);
		$criteria->compare('cuenta_principal',$this->cuenta_principal);
		$criteria->compare('id_banco',$this->id_banco);
		$criteria->compare('t.cuenta_bancaria',$this->cuenta_bancaria,true);
		$_SESSION['datos_filtrados'] = new CActiveDataProvider($this, array(
                      'criteria'=>$criteria,
                      'pagination'=>false,
              ));
		return new CActiveDataProvider($this, array(
			'criteria'=>$criteria,
		));
	}
	public function searchCuentasAsociados($id)
	{
		// @todo Please modify the following code to remove attributes that should not be searched.

        $criteria = new CDbCriteria();
        $criteria->condition = 'blnborrado = false';
        $criteria->compare('id', $this->id);
        $criteria->compare('idasociado', $id);
        $criteria->compare('id_banco', $this->id_banco);
        $criteria->compare('cuenta_bancaria', $this->cuenta_bancaria, true);

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

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

    public static function getCuentaPrincipal($id)
    {
        return self::model()->find(array(
            'select' => 'id_banco, cuenta_bancaria',
            'condition' => 'idasociado=:id AND
                            cuenta_principal IS TRUE AND 
                            blnborrado IS FALSE',
            'params' => array(
                'id' => $id,
            ),
        ));
    }

    public static function getCuentaById($id)
    {
        return self::model()->findByPk($id);
    }

    public static function all($id)
    {
        return CHtml::listData(
            self::model()->findAll(array(
                'select' => 'acb.id, CONCAT(b.descripcion, acb.cuenta_bancaria) as cuenta_bancaria',
                'alias' => 'acb',
                'join' => 'INNER JOIN banco b ON b.idbanco=acb.id_banco',
                'condition' => 'acb.idasociado=:id',
                'params' => array(
                    'id' => $id
                )
            )),
            'id',
            'cuenta_bancaria'
        );
    }

    public function tipoCuenta()
    {
        return $this->cuenta_corriente ? 'Corriente' : 'Ahorro';
    }

    public function principal()
    {
        return $this->cuenta_principal ? 'Principal' : 'Alternativa';
    }

    public function validateNumeroCuenta()
    {
        if ($this->codigoBancoSeleccionado() != substr($this->cuenta_bancaria, 0, 4)) {
            return false;
        }

        return true;
    }

    public function codigoBancoSeleccionado()
    {
        return Yii::app()->db->createCommand('
            SELECT codigo
            FROM banco
            WHERE idbanco=:id_banco AND blnborrado IS FALSE
        ')->bindValue('id_banco', $this->id_banco)->queryRow()['codigo'];
    }
}
