<?php

/**
 * This is the model class for table "contable.ejercicios".
 *
 * The followings are the available columns in table 'contable.ejercicios':
 * @property integer $id
 * @property string $nombre_periodo
 * @property string $fecha_inicio
 * @property string $fecha_fin
 * @property integer $estatus
 */
class EjerciciosContables extends CActiveRecord
{
    
	/**
	 * @return string the associated database table name
	 */
	public function tableName()
	{
		return 'contable.ejercicios';
	}
        public $reserva_emergencia;
        public $porcentaje_emergencia;
        public $cuenta_emergencia;
        
        public $reserva_estatutaria;
        public $porcentaje_estatutaria;
        public $cuenta_estatutaria;

	/**
	 * @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('estatus', 'numerical', 'integerOnly'=>true),
			array('nombre_periodo', 'length', 'max'=>200),
			array('porcentaje_emergencia,porcentaje_estatutaria', 'numerical'),
			array('activo,estatus, fecha_comprobante_administrativo', 'safe'),
			array('reserva_emergencia,reserva_estatutaria', 'required','on' => 'cierre_periodo'),
			array('porcentaje_emergencia,cuenta_emergencia', 'required','on' => 're_emergencia'),
			array('porcentaje_estatutaria,cuenta_estatutaria', 'required','on' => 're_estatutaria'),
			array('nombre_periodo,fecha_inicio, fecha_fin,estatus', 'required','on' => 'insert'),
			array('id', 'required', 'on' => 'selecciona'),
			array('estatus', 'required', 'on' => 'actualiza'),
			array('estatus', 'validarcierre', 'on' => 'actualiza'),
			//array('estatus', 'unique'),
			// The following rule is used by search().
			// @todo Please remove those attributes that should not be searched.
			array('id, nombre_periodo,activo, fecha_inicio, fecha_fin, estatus', 'safe', 'on'=>'search'),
			array('id,reserva_emergencia,reserva_estatutaria,porcentaje_emergencia,porcentaje_estatutaria,cuenta_emergencia,cuenta_estatutaria, nombre_periodo,activo, fecha_inicio, fecha_fin, estatus', 'safe'),
		);
	}

	/**
	 * @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(
                      'est' => array(self::BELONGS_TO, 'EstatusEjercicio', 'estatus'),
		);
	}

	/**
	 * @return array customized attribute labels (name=>label)
	 */
	public function attributeLabels()
	{
            if($this->scenario=='selecciona'){
		return array(
			'id' => 'Período a cambiar',
			'nombre_periodo' => 'Nombre período',
			'reserva_emergencia' => 'Reserva de emergencia',
			'reserva_estatutaria' => 'Reserva estaturaria',
			'procentaje_emergencia' => '% reserva de emergencia',
			'procentaje_estatutaria' => '% reserva estatutaria',
			'cuenta_emergencia' => 'Cuenta reserva de emergencia',
			'cuenta_estatutaria' => 'Cuenta reserva estatutaria',
			'fecha_inicio' => 'Fecha inicio',
			'fecha_fin' => 'Fecha fin',
			'estatus' => 'Estatus de cierre',
			'est.descripcion' => 'Estatus de cierre',
			'activo' => 'Activo',
            );
            }else{
		return array(
			'id' => 'Período',
			'nombre_periodo' => 'Nombre período',
                        'reserva_emergencia' => 'Reserva de emergencia',
			'fecha_inicio' => 'Fecha inicio',
			'fecha_fin' => 'Fecha fin',
			'estatus' => 'Estatus de cierre',
			'est.descripcion' => 'Estatus de cierre',
            'activo' => 'Activo',
			'fecha_comprobante_administrativo' => 'Permitir fecha de comprobante en administrativo',
		);
            }
	}

	/**
	 * 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->order='id ASC';

		$criteria->compare('id',$this->id);
		$criteria->compare('nombre_periodo',$this->nombre_periodo,true);
		$criteria->compare('fecha_inicio',$this->fecha_inicio,true);
		$criteria->compare('fecha_fin',$this->fecha_fin,true);
		$criteria->compare('estatus',$this->estatus);

		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 EjerciciosContables the static model class
	 */
	public static function model($className=__CLASS__)
	{
		return parent::model($className);
	}
        
        
    public function validarcierre(){
    Yii::import('application.modules.configuracion.models.*',true);
    Yii::import('application.modules.contable.models.*',true);
        if(!$this->hasErrors('estatus')){
            if (ConfContable::config('CONFCONTABLE')=='SI'){
               $modeltrimestre= CierreTrimestral::model()->findBySql("select * from contable.cierre_trimestral where id_periodo = $this->id and estatus=false");

              // echo "<pre>";               print_r($modeltrimestre); exit;
               $mensaje='';
               if ($this->estatus==''){
                    $this->addError('estatus',"No puede ser nulo.");
               }
               if ($modeltrimestre && $this->estatus==3){
//       
                    $this->addError('estatus',"Usted no puede cerrar este periodo contable hasta que cierre el $modeltrimestre->trimestre.");
                }
              
            
            }else {
//                  $this->addError('estatus',"Nada");
            }
               
    }
}

    public function validarcerrado($id){
            Yii::import('application.modules.contable.models.*',true);
           $ejerciciocontable=  EjerciciosContables::model()->find("id=$this->id and estatus=3");
           $ejeprecierre=  EjerciciosContables::model()->find("estatus=2 and id != $this->id");
           $estatus= EstatusEjercicio::model()->findAll();
           $abierto= $estatus[0]->descripcion;
           $precierre= $estatus[1]->descripcion;
           $cerrado= $estatus[2]->descripcion;
           $mensaje='';
                  if (isset($ejerciciocontable->id)){
                     $mensaje.="No puede cerrar un periodo contable que está con estatus <strong>$cerrado</strong>.";
                  }
                  else if (isset($ejeprecierre->id)){
                     $mensaje.="No puede cerrar un periodo contable si tiene alguno en estatus <strong>$precierre</strong>.";
                  }
            return $mensaje;
        }
        
    public function abrirperiodo(){
            Yii::import('application.modules.configuracion.models.*',true);
           $ejercicioprecierre=  EjerciciosContables::model()->find("estatus=2");
           $ejercicio=  EjerciciosContables::model()->find("estatus=1");
           $anyoactual=date('Y');
           $anyo=  EjerciciosContables::model()->findAll("(SELECT EXTRACT(YEAR FROM fecha_inicio)=$anyoactual)");
           $estatus= EstatusEjercicio::model()->findAll();
           $abierto= $estatus[0]->descripcion;
           $precierre= $estatus[1]->descripcion;
           $mensaje='';
             if (ConfContable::config('CONFAPERTURA')=='SI'){
                 $mensaje.="No puede abrir un periodo contable, ya que el periodo contable se genera automaticamente por sistema, revisar las variables de configuracion.";
                 
             }
                 else if ($ejercicio){
                 $mensaje.="No puede abrir un periodo contable, ya que el periodo contable <strong>$ejercicio->nombre_periodo</strong> está con estatus <strong>$abierto</strong>.";
              }
                 else if ($anyo){
                 $mensaje.="No puede abrir un periodo contable, ya que está un periodo contable en el año actual.";
              }
//                 else if ($anyoactual==2014){
//                 $mensaje.="No puede abrir un periodo contable, en un año menor al actual.";
//              }
                  
            return $mensaje;
        }

public function fechainicio(){
//    Yii::import('application.modules.configuracion.models.*',true);
//    Yii::import('application.modules.contable.models.*',true);
//        if (ConfContable::config('CONFCONTABLE')=='SI'){
//            $modelejercicio = EjerciciosContables::model()->find('activo=1 and estatus=1 or estatus=2 order by id desc');
//            if ($modelejercicio){
//            $modelcierre= CierreMensual::model()->findBySql("select * from contable.cierre_mensual where estatus=false and id_periodo = $modelejercicio->id and id =(select min(id) from contable.cierre_mensual where estatus=false and id_periodo =$modelejercicio->id )");
//            if ($modelcierre && $modelejercicio){
//                $fecha=date('d-m-Y',strtotime($modelcierre->fecha_desde));
//            }else{
//                 $fecha= '01-01-'.date('Y');
//            }
//                
//        }else {
//            
//            $fecha='01-01-'.date('Y');
//        }
//        
//            }else{
            $fecha='01-01-'.date('Y');
//        }
    return $fecha;    
}
        
public function fechafin(){
//    Yii::import('application.modules.configuracion.models.*',true);
//    Yii::import('application.modules.contable.models.*',true);
//        if (ConfContable::config('CONFCONTABLE')=='SI'){
//            $modelejercicio = EjerciciosContables::model()->find('activo=1');
//            $fecha= date('d-m-Y',strtotime($modelejercicio->fecha_fin));
//        }else{
            $fecha='31-12-'.date('Y'); 
//        }
    return $fecha;    
}        

    public static function fechaComprobate()
    {
        return Yii::app()->getDb()->createCommand('
            SELECT fecha_comprobante_administrativo as res
            FROM contable.ejercicios
            WHERE activo=1
        ')->queryRow()['res'];
    }
        
        
}
