<?php

/**
 * This is the model class for table "cuentas_consolidada".
 *
 * The followings are the available columns in table 'cuentas_consolidada':
 * @property integer $id
 * @property string $descripcion
 * @property integer $idpadre
 * @property boolean $valido
 * @property string $fecharegistro
 * @property integer $usuario_registro
 * @property string $codigo_cuenta
 */
class CuentasConsolidada extends CActiveRecord
{
      public $cuenta_descripcion;
	/**
	 * @return string the associated database table name
	 */
	public function tableName()
	{
		return 'contable.cuentas_consolidada';
	}

	/**
	 * @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('idpadre, usuario_registro', 'numerical', 'integerOnly'=>true),
			array('codigo_cuenta,descripcion,cuenta_descripcion,naturaleza', 'required','on'=>'create'),
			array('descripcion', 'required','on'=>'update'),
//                     array('cuenta', 'unique', 'criteria'=>array(
//                        'condition'=>'blnborrado=false',
//                        )),
                        array('codigo_cuenta', 'verificarCodigo'),
                        array('descripcion', 'verificarDescripcion'),
                        // array('titulo_mov', 'verificarTitulo'),
//                        array('cuenta_descripcion', 'verificarIdPadre'),

			array('descripcion,cta_banco,cta_prestamo,titulo_mov, cta_int_x_cobr,valido,tiene_aux,cta_ing_x_int,nivel,grupo_aux,codigo_cuenta,naturaleza,esactivo,valido,cuenta_descripcion', 'safe'),
			// The following rule is used by search().
			// @todo Please remove those attributes that should not be searched.
			array('id,cuenta,descripcion,cta_banco,titulo_mov,grupo_cuenta,esactivo,tiene_aux,naturaleza, idpadre, valido, fecharegistro, usuario_registro, codigo_cuenta,sudeca', 'safe', 'on'=>'search'),
		);
	}


public function verificarTitulo()
{
    if (!$this->hasErrors('titulo_mov')) {
        $model = self::model()->find('id=:idpadre', array(':idpadre' => $this->idpadre));

        if ($model->nivel == 6 && $this->titulo_mov == 1) {
            $this->addError('titulo_mov', 'Esta cuenta no puede ser de tipo título, debido a que es auxliar.');
        }
    }
}

public function verificarDescripcion(){
    if(!$this->hasErrors('descripcion')){
        $descripcion=strtolower($this->descripcion);
        $model = self::model()->findAll('LOWER(descripcion) LIKE :descripcion and blnborrado=false and idpadre=:idpadre', array(':descripcion'=> "%$descripcion%",':idpadre'=> $this->idpadre));
//        echo "<pre>";print_r($model); die();
        if($this->descripcion==null){
       $this->addError('descripcion','Nombre Cuenta no puede ser nulo.');}
        else if(count($model)>=1 and $this->isNewRecord==true){
        $this->addError('descripcion','Nombre de cuenta: '.$this->descripcion.' ya ha sido tomado.');}
}}
public function verificarCodigo(){
    if(!$this->hasErrors('codigo_cuenta')){
        $codigo_cuenta=strtolower($this->codigo_cuenta);
        $model = self::model()->findAll('LOWER(codigo_cuenta) LIKE :codigo_cuenta and blnborrado=false and idpadre=:idpadre', array(':codigo_cuenta'=> "%$codigo_cuenta%",':idpadre'=> $this->idpadre));
       if($this->codigo_cuenta==null){
       $this->addError('codigo_cuenta','Código Cuenta no puede ser nulo.');}
        else if(count($model)>=1 and $this->isNewRecord==true){
        $this->addError('codigo_cuenta','El código de cuenta: '.$this->codigo_cuenta.' ya ha sido tomado');}
        else if ($this->codigo_cuenta=="Usted llegó al límite de cuentas por cargar."){
        $this->addError('codigo_cuenta','Usted llegó al límite de cuentas por cargar.');}
    }
        }
public function verificarIdPadre(){
if(!$this->hasErrors('cuenta_descripcion')){
    $criteria = new CDbCriteria;
 $criteria->compare('LOWER(descripcion)', strtolower($this->cuenta_descripcion), true);
 $criteria->compare('LOWER(codigo_cuenta)', strtolower($this->cuenta_descripcion), true, 'OR');
 $criteria->addCondition('titulo_mov=1 and nivel>2 and blnborrado=false');
 $criteria->order = 'codigo_cuenta';
 $criteria->limit = 30;
 $data = CuentasConsolidada::model()->findAll($criteria);

 if (!empty($data))
 {
     $this->idpadre=$item->id;

 }
 else
 {
  $this->addError('cuenta_descripcion','Usted llegó al límite de cuentas por cargar.');
 }
}
        }

	/**
	 * @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(
                    'cuenta_padre' => array(self::BELONGS_TO, 'CuentasConsolidada', 'idpadre'),
                    'Grupo' => array(self::BELONGS_TO, 'GrupoCuentas', 'grupo_cuenta'),
		);
	}

	/**
	 * @return array customized attribute labels (name=>label)
	 */
	public function attributeLabels()
	{
		return array(
			'id' => 'ID',
			'descripcion' => 'Nombre cuenta',
			'idpadre' => 'Código cuenta padre',
			'cuenta_descripcion' => 'Código cuenta padre',
			'valido' => 'Valido',
			'cta_banco' => 'Módulo bancos',
			'fecharegistro' => 'Fecha registro',
			'usuario_registro' => 'Usuario registro',
			'codigo_cuenta' => 'Código cuenta',
			'cta_prestamo' => 'Módulo préstamos',
			'cta_int_x_cobr' => 'Intereses por cobrar',
			'cta_ing_x_int' => 'Ingresos por intereses',
			'tiene_aux' => 'Tiene auxiliares',
			'esactivo' => 'Activo fijo',
			'grupo_aux' => 'Grupo de auxiliares',
			'titulo_mov' => 'Cuenta de título',
		);
	}

	/**
	 * 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;
                $sort=new CSort();
                $sort->defaultOrder='codigo_cuenta asc';
                 //$criteria->condition ='id!=1 and blnborrado=false'; Plan de cuentas 2015
                $criteria->condition =' blnborrado=false ';
		$criteria->compare('id',$this->id);
		$criteria->compare('LOWER(descripcion)',strtolower($this->descripcion),true);
		$criteria->compare('idpadre',$this->idpadre);
		$criteria->compare('valido',$this->valido);
		$criteria->compare('fecharegistro',$this->fecharegistro,true);
		$criteria->compare('usuario_registro',$this->usuario_registro);
		$criteria->compare("codigo_cuenta",$this->codigo_cuenta,true);
		$criteria->compare('naturaleza',$this->naturaleza,true);
		$criteria->compare('tiene_aux',$this->tiene_aux);
		$criteria->compare('esactivo',$this->esactivo);
		$criteria->compare('titulo_mov',$this->titulo_mov);
		$criteria->compare('grupo_cuenta',$this->grupo_cuenta);
                $criteria->compare('cuenta',$this->cuenta);
                $criteria->compare('nivel',$this->nivel);
                $criteria->compare('sudeca',$this->sudeca);

                $_SESSION['datos_filtrados'] = new CActiveDataProvider($this, array(
                'criteria'=>$criteria,
                'sort'=>$sort,
                'pagination'=>false,
                ));


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

    public function getCuenta()
    {
        return $this->codigo_cuenta . '-' . $this->descripcion;
    }
	/**
	 * 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 CuentasConsolidada the static model class
	 */
	public static function model($className=__CLASS__)
	{
		return parent::model($className);
	}

        public function getEspacio($nivel,$descripcion) {
          if ($nivel>1)
            $descripcion= str_repeat("&nbsp;&nbsp;", $nivel).$descripcion;
          print  $descripcion;

        }


         public function getColor() {

        $statuscolor='white';
        switch ($this->nivel) {
            case 1:
                $statuscolor='azul';
//                $statuscolor='negrita';
                break;
            case 2:
                $statuscolor='verde';
//                $statuscolor='negrita';
                break;
            case 3:
                 if ($this->titulo_mov==1)
                    $statuscolor='naranja';
//                $statuscolor = 'negrita';
                else $statuscolor='white';
                break;
            case 4:
                if ($this->titulo_mov==1)
                    $statuscolor='vinotinto';
//                $statuscolor='negrita';
                else $statuscolor='white';
                break;
            case 5:
                if ($this->titulo_mov==1)
                    $statuscolor='negrita';
                else $statuscolor='white';
                break;
            case 6:
                if ($this->titulo_mov==1)
                    $statuscolor='gris';
//                $statuscolor='negrita';
                else $statuscolor='white';
                break;
             default :
                if ($this->titulo_mov==1)
                    $statuscolor='vinotinto';
//                $statuscolor='negrita';
                else $statuscolor='white';
                break;
        }
        return $statuscolor;

    }
         public function muestraNivel() {

        $nivel='Auxiliar';
        switch ($this->nivel) {
            case 1:
                $nivel='Rubro';
                break;
            case 2:
                $nivel='Grupo';
                break;
            case 3:
                $nivel='Cuenta';
                break;
            case 4:
                $nivel='Primera Subcuenta';
                break;
            case 5:
                $nivel='Segunda Subcuenta';
                break;
            case 6:
                $nivel='Tercera Subcuenta';
                break;
             default :
                $nivel='Auxiliar';
                break;
        }
        return $nivel;

    }
}
