<?php

class EjerciciosContablesController extends Controller
{
	/**
	 * @var string the default layout for the views. Defaults to '//layouts/column2', meaning
	 * using two-column layout. See 'protected/views/layouts/column2.php'.
	 */
	public $layout='//layouts/column2';

	/**
	 * @return array action filters
	 */
        public function filters()
	{
		return array(
			'accessControl', // perform access control for CRUD operations
                        'postOnly + delete',
                         array('CrugeAccessControlFilter')
		);
	}

	/**
	 * Specifies the access control rules.
	 * This method is used by the 'accessControl' filter.
	 * @return array access control rules
	 */
	public function accessRules()
	{
		return array(
			array('allow',  // allow all users to perform 'index' and 'view' actions
				'actions'=>array('index','view'),
				'users'=>array('@'),
			),
			array('allow', // allow authenticated user to perform 'create' and 'update' actions
				'actions'=>array('create','update','seleccionaPeriodo','cambiafecha'),
				'users'=>array('@'),
			),
			array('allow', // allow admin user to perform 'admin' and 'delete' actions
				'actions'=>array('admin','delete'),
				'users'=>array('@'),
			),
			array('deny',  // deny all users
				'users'=>array('*'),
			),
		);
	}

	/**
	 * Displays a particular model.
	 * @param integer $id the ID of the model to be displayed
	 */
	public function actionView($id)
	{
		$this->render('view',array(
			'model'=>$this->loadModel($id),
		));
	}
        
        public function actionSeleccionaPeriodo()
            {
                $model=new EjerciciosContables;
                $model->scenario = 'selecciona';
                // uncomment the following code to enable ajax-based validation
                
                if(isset($_POST['ajax']) && $_POST['ajax']==='ejercicios-contables-seleccionaPeriodo-form')
                {
                    echo CActiveForm::validate($model);
                    Yii::app()->end();
                }
                

                if(isset($_POST['EjerciciosContables']))
                {
                    $model->attributes=$_POST['EjerciciosContables'];
                   
                   
                        $modelb = EjerciciosContables::model()->findAll(array('condition'=>'id!='.$model->id));
                        foreach ($modelb as $b){
                        $b->activo= 0;
                        $b->update();
                        }
                        
                        $model = EjerciciosContables::model()->findByPk($model->id);
                        $model->activo= 1;
//                        $anyo=date('Y',  strtotime($model->fecha_inicio));
//                        $model->nombre_periodo='Período contable '.$anyo;
                        $model->update();
                        
                        Yii::app()->user->setFlash('success', '<strong>Bien!</strong> El período contable ha sido cambiado.');
                       
                        $this->redirect(array('seleccionaPeriodo'));
// form inputs are valid, do something here
                       
                    
                    //echo "hola";
                }
                $this->render('seleccionaPeriodo',array('model'=>$model));
            }

	/**
	 * Creates a new model.
	 * If creation is successful, the browser will be redirected to the 'view' page.
	 */
	public function actionCreate()
	{
		$model=new EjerciciosContables;
		// Uncomment the following line if AJAX validation is needed
		// $this->performAjaxValidation($model);
                 if ($model->abrirperiodo()!=''){
                        Yii::app()->user->setFlash('error', $model->abrirperiodo());
                        $this->redirect(array('admin'));
                    }
		if(isset($_POST['EjerciciosContables']))
		{
			$model->attributes=$_POST['EjerciciosContables'];
                        $model->estatus=1;
                        $model->nombre_periodo='Período contable '.date('Y');
                        $model->fecha_inicio=$model->fechainicio();
                        $model->fecha_fin=$model->fechafin();
                        
                        
                        
			if($model->save())
$mes = array("Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre");
$anyo=date('Y');
$mesfechadesde= array("$anyo-01-01","$anyo-02-01","$anyo-03-01","$anyo-04-01","$anyo-05-01","$anyo-06-01","$anyo-07-01","$anyo-08-01","$anyo-09-01","$anyo-10-01","$anyo-11-01","$anyo-12-01");
$mesfechahasta= array("$anyo-01-31","$anyo-02-28","$anyo-03-31","$anyo-04-30","$anyo-05-31","$anyo-06-30","$anyo-07-31","$anyo-08-31","$anyo-09-30","$anyo-10-31","$anyo-11-30","$anyo-12-31");
$trimestre = array("Trimestre 1","Trimestre 2","Trimestre 3","Trimestre 4");
$mesestrimestre= array ("Enero,Febrero,Marzo","Abril,Mayo,Junio","Julio,Agosto,Septiembre","Octubre,Noviembre,Diciembre");
$trimestrefechadesde= array("$anyo-01-01","$anyo-04-01","$anyo-07-01","$anyo-10-01");
$trimestrefechahasta= array("$anyo-03-31","$anyo-06-30","$anyo-09-30","$anyo-12-31");

        
        for ($i=0; $i<=11; $i++){
         if ($i==1){
             if (date("L")==0){
             $mesfechahasta[1]=date('Y').'-02-28';
             }else {
             $mesfechahasta[1]=date('Y').'-02-29';
         }
     }
    
            $cierremensual= new CierreMensual;
            $cierremensual->mes=  strtoupper($mes[$i]);
            $cierremensual->fecha_desde=$mesfechadesde[$i];
            $cierremensual->fecha_hasta=$mesfechahasta[$i];
            $cierremensual->id_periodo=$model->id;
            $cierremensual->save();
        }
        
        
         for ($j=0; $j<=3; $j++){
     
            $cierretrimestral= new CierreTrimestral;
            $cierretrimestral->trimestre=  $trimestre[$j];
            $cierretrimestral->meses= strtoupper($mesestrimestre[$j]);
            $cierretrimestral->fecha_desde=$trimestrefechadesde[$j];
            $cierretrimestral->fecha_hasta=$trimestrefechahasta[$j];
            $cierretrimestral->id_periodo=$model->id;
            $cierretrimestral->save();
 
        }
				$this->redirect(array('view','id'=>$model->id));
		}

		$this->render('create',array(
			'model'=>$model,
		));
	}

	/**
	 * Updates a particular model.
	 * If update is successful, the browser will be redirected to the 'view' page.
	 * @param integer $id the ID of the model to be updated
	 */
	public function actionUpdate()
    {
        if (! EjerciciosContables::model()->exists('activo=1')) {
            Yii::app()->user->setFlash('error', 'Debe tener un periodo contable activo, por favor cree un periodo contable.');
            $this->redirect(['admin']);
        } else {
            $id = EjerciciosContables::model()->find('activo=1')->id;
        }

        $model = $this->loadModel($id);
        $model->scenario = 'actualiza';

        if ($model->validarcerrado($id) != '') {
            Yii::app()->user->setFlash('error', $model->validarcerrado($id));
            $this->redirect(['admin']);
        }

        if (isset($_POST['EjerciciosContables'])) {
            $model->attributes = $_POST['EjerciciosContables'];

            if ($model->estatus == 3) {
                $model->scenario = 'cierre_periodo';
            }

            if ($model->reserva_emergencia == 1) {
                $model->scenario = 're_emergencia';
            }

            if ($model->reserva_estatutaria == 1) {
                $model->scenario = 're_estatutaria';
            }

            $transaction = Yii::app()->getDb()->beginTransaction();
            try {
                if ($model->save()) {
                    $saldo_posit = 0;
                    //SE VERIFICA EL PERIODO 3 CORRESPONDIENTE AL PARAMETRO DE CIERRE, SE HACE CONSULTA DE LOS INGRESOS Y EGRESOS
                    if ($model->estatus == 3) {
                        Yii::import('application.modules.configuracion.models.*');
                        $conf_contable_res = ConfContable::model()->find('id=6');
                        $conf_contable_util = ConfContable::model()->find('id=4');
                        $conf_contable_ex_ant = ConfContable::model()->find('id=5');
                        $conf_contable_cta_pag = ConfContable::model()->find('id=7');

                        $criteria = new CdbCriteria();
                        $criteria->select = 'id_cuenta,grupo_cuenta,cuenta,sum(COALESCE(monto_debe, 0::numeric)) as monto_debe,sum(COALESCE(monto_haber, 0::numeric)) as monto_haber,'
                          .'CASE  WHEN grupo_cuenta=4 THEN
                            sum(COALESCE(monto_haber, 0::numeric))-sum(COALESCE(monto_debe, 0::numeric))
                            ELSE sum(COALESCE(monto_debe, 0::numeric))-sum(COALESCE(monto_haber, 0::numeric))
                            END  as saldo_cuenta';
                        $criteria->condition = 'grupo_cuenta in(4,5) AND clvejercicio='.$model->id.' AND blnborrado=false';
                        $criteria->group = 'id_cuenta,grupo_cuenta,cuenta';
                        $criteria->order = 'grupo_cuenta,cuenta asc';
                        $cierre_resultado = DetalleAnalitico::model()->findAll($criteria);

                        //SE REGISTRA EL COMPROBANTE DE CIERRE - ENCABEZADO
                        $modelComprobante1 = new Comprobante();
                        $modelComprobante1->fecha_comprobante = $model->fecha_fin;
                        $modelComprobante1->descripcion = 'Cierre anual al '.date('d-m-Y', strtotime($model->fecha_fin));
                        $modelComprobante1->id_tipo_comprobante = 3;
                        $modelComprobante1->status = 1;
                        if ($modelComprobante1->save()) {
                            $comprobante1 = Comprobante::model()->findByPk($modelComprobante1->id);
                            $suma_ingresos = 0;
                            $suma_gastos = 0;
                            foreach ($cierre_resultado as $cr) {
                                if ($cr->grupo_cuenta == 4) {
                                    $si = $cr->saldo_cuenta;
                                    $suma_ingresos = $suma_ingresos + $si;
                                }

                                if ($cr->grupo_cuenta == 5) {
                                    $sg = $cr->saldo_cuenta;
                                    $suma_gastos = $suma_gastos + $sg;
                                }

                                //SE REGISTRAN LOS ASIENTOS DE DETALLE PARA REVERSAR Y LLEVAR A CERO LOS SALDOS DE LAS CUENTAS
                                $modelDetComprobante1 = new DetalleComprobante();
                                $modelDetComprobante1->descripcion = $comprobante1->descripcion;
                                $modelDetComprobante1->referencia = '--';
                                $modelDetComprobante1->fecha_referencia = $comprobante1->fecha_comprobante;
                                $modelDetComprobante1->id_cuenta = $cr->id_cuenta;
                                $modelDetComprobante1->clv_comprobante = $comprobante1->id;

                                /**************** ESTE BLOQUE REVERSA CUENTAS DE INGRESO Y DETERMINA LA NATURALEZA DEL SALDO SI ES POSITIVO O NEGATIVO ****************/
                                if ($cr->grupo_cuenta == 4 && $cr->saldo_cuenta >= 0) {
                                    $modelDetComprobante1->monto_haber = 0;
                                    $modelDetComprobante1->monto_debe = $cr->saldo_cuenta;
                                }

                                if ($cr->grupo_cuenta == 4 && $cr->saldo_cuenta < 0) {
                                    $modelDetComprobante1->monto_debe = 0;
                                    $modelDetComprobante1->monto_haber = $cr->saldo_cuenta * -1;
                                }
                                /**************************************************/

                                /**************** ESTE BLOQUE REVERSA CUENTAS DE GASTOS Y DETERMINA LA NATURALEZA DEL SALDO SI ES POSITIVO O NEGATIVO ****************/
                                if ($cr->grupo_cuenta == 5 && $cr->saldo_cuenta >= 0) {
                                    $modelDetComprobante1->monto_debe = 0;
                                    $modelDetComprobante1->monto_haber = $cr->saldo_cuenta;
                                }

                                if ($cr->grupo_cuenta == 5 && $cr->saldo_cuenta < 0) {
                                    $modelDetComprobante1->monto_haber = 0;
                                    $modelDetComprobante1->monto_debe = $cr->saldo_cuenta * -1;
                                }
                                /**************************************************/
                                $modelDetComprobante1->estatus_contab = 1;
                                $modelDetComprobante1->save();
                            }
                            /************** aquí se definen las variables para el traslado de reserva de emergencia y excedente o deficit
                            Hay que optimizar las cuentas que ****************/
                            $utilidad = $suma_ingresos - $suma_gastos;
                            $reserva_emerg = $utilidad * ((float) $model->porcentaje_emergencia / 100);
                            $reserva_estatut = $utilidad * ((float) $model->porcentaje_estatutaria / 100);
                            $excedente = $utilidad - $reserva_emerg - $reserva_estatut;

                            /******************** SI EXITE GANANCIA DEL EJERCICIO SE VA POR ESTE CAMINO ************************/
                            if ($utilidad > 0) {
                                //se registra el monto de la reserva de emergencia
                                if ($model->reserva_emergencia == 1) {
                                    $modelDetComprobante1 = new DetalleComprobante();
                                    $modelDetComprobante1->descripcion = $comprobante1->descripcion;
                                    $modelDetComprobante1->referencia = '--';
                                    $modelDetComprobante1->fecha_referencia = $comprobante1->fecha_comprobante;
                                    $modelDetComprobante1->id_cuenta = $model->cuenta_emergencia;
                                    $modelDetComprobante1->clv_comprobante = $comprobante1->id;
                                    $modelDetComprobante1->monto_debe = 0;
                                    $modelDetComprobante1->monto_haber = $reserva_emerg;
                                    $modelDetComprobante1->estatus_contab = 1;
                                    $modelDetComprobante1->save();
                                }

                                //se registra el monto de la reserva estaturaria u otras reservas
                                if ($model->reserva_estatutaria == 1) {
                                    $modelDetComprobante1 = new DetalleComprobante();
                                    $modelDetComprobante1->descripcion = $comprobante1->descripcion;
                                    $modelDetComprobante1->referencia = '--';
                                    $modelDetComprobante1->fecha_referencia = $comprobante1->fecha_comprobante;
                                    $modelDetComprobante1->id_cuenta = $model->cuenta_estatutaria;
                                    $modelDetComprobante1->clv_comprobante = $comprobante1->id;
                                    $modelDetComprobante1->monto_debe = 0;
                                    $modelDetComprobante1->monto_haber = $reserva_estatut;
                                    $modelDetComprobante1->estatus_contab = 1;
                                    $modelDetComprobante1->save();
                                }

                                // se registra el remante de la utilidad aplicando la resta de las reservas.
                                $modelDetComprobante1 = new DetalleComprobante();
                                $modelDetComprobante1->descripcion = $comprobante1->descripcion;
                                $modelDetComprobante1->referencia = '--';
                                $modelDetComprobante1->fecha_referencia = $comprobante1->fecha_comprobante;
                                $modelDetComprobante1->id_cuenta = $conf_contable_util->atributo;
                                $modelDetComprobante1->clv_comprobante = $comprobante1->id;
                                $modelDetComprobante1->monto_debe = 0;
                                $modelDetComprobante1->monto_haber = $excedente;
                                $modelDetComprobante1->estatus_contab = 1;
                                $modelDetComprobante1->save();
                            }

                            /******************** SI EXITE PERDIDA DEL EJERCICIO SE VA POR ESTE CAMINO, SE REGISTRA LA UTILIDAD Y NO LA RESERVA DE EMERGENCIA ************************/

                            if ($utilidad < 0) {
                                $modelDetComprobante1 = new DetalleComprobante();
                                $modelDetComprobante1->descripcion = $comprobante1->descripcion;
                                $modelDetComprobante1->referencia = '--';
                                $modelDetComprobante1->fecha_referencia = $comprobante1->fecha_comprobante;
                                $modelDetComprobante1->id_cuenta = $conf_contable_util->atributo;
                                $modelDetComprobante1->clv_comprobante = $comprobante1->id;
                                $modelDetComprobante1->monto_debe = $utilidad * -1;
                                $modelDetComprobante1->monto_haber = 0;
                                $modelDetComprobante1->estatus_contab = 1;
                                $modelDetComprobante1->save();
                            }
                        }

                        /*********** CON ESTA CONSULTA SE MIGRAN LOS SALDOS DE BALANCE AL PERIODO SIGUIENTE ***********/
                        $criteria = new CdbCriteria();
                        $criteria->select = 'id_cuenta,grupo_cuenta,cuenta,sum(COALESCE(monto_debe, 0::numeric)) as monto_debe,sum(COALESCE(monto_haber, 0::numeric)) as monto_haber,
                            CASE  WHEN grupo_cuenta in (1,6) THEN
                            sum(COALESCE(monto_debe, 0::numeric))-sum(COALESCE(monto_haber, 0::numeric))
                            WHEN  grupo_cuenta in (2,7) THEN
                            sum(COALESCE(monto_haber, 0::numeric))-sum(COALESCE(monto_debe, 0::numeric))
                            WHEN grupo_cuenta=3 THEN
                            sum(COALESCE(monto_haber, 0::numeric))-sum(COALESCE(monto_debe, 0::numeric) )
                            END  as saldo_cuenta';
                        $criteria->condition = 'grupo_cuenta in(1,2,3,6,7) AND clvejercicio='.$model->id.' AND blnborrado=false';
                        $criteria->group = 'id_cuenta,grupo_cuenta,cuenta';
                        $criteria->order = 'grupo_cuenta,cuenta asc';
                        $saldos_balance = DetalleAnalitico::model()->findAll($criteria);

                        $nuevafecha = strtotime('+1 year', strtotime($model->fecha_inicio));
                        $fecha_apertura = date('d-m-Y', $nuevafecha);
                        $anio_apertura = date('Y', $nuevafecha);
                        $modelComprobante2 = new Comprobante();
                        $modelComprobante2->fecha_comprobante = $fecha_apertura;
                        $modelComprobante2->descripcion = "Apertura ejercicio ${anio_apertura}";
                        $modelComprobante2->clvejercicio = $model->id + 1;
                        $modelComprobante2->mov_apertura = 1;
                        $modelComprobante2->id_tipo_comprobante = 2;
                        $modelComprobante2->status = 1;

                        if ($modelComprobante2->save()) {
                            $modelComprobanteb = Comprobante::model()->findByPk($modelComprobante2->id);
                            $exced = 0;
                            foreach ($saldos_balance as $sb) {
                                $modelDetComprobante1 = new DetalleComprobante();
                                $modelDetComprobante1->descripcion = $modelComprobanteb->descripcion;
                                $modelDetComprobante1->referencia = '--';
                                $modelDetComprobante1->fecha_referencia = $modelComprobanteb->fecha_comprobante;
                                $modelDetComprobante1->clv_comprobante = $modelComprobanteb->id;

                                /**************** Este bloque registra los movimientos iniciales del ACTIVO ****************/
                                if (($sb->grupo_cuenta == 1 || $sb->grupo_cuenta == 6) && $sb->saldo_cuenta >= 0) {
                                    $modelDetComprobante1->id_cuenta = $sb->id_cuenta;
                                    $modelDetComprobante1->monto_debe = $sb->saldo_cuenta;
                                    $modelDetComprobante1->monto_haber = 0;
                                }

                                if (($sb->grupo_cuenta == 1 || $sb->grupo_cuenta == 6) && $sb->saldo_cuenta < 0) {
                                    $modelDetComprobante1->id_cuenta = $sb->id_cuenta;
                                    $modelDetComprobante1->monto_debe = 0;
                                    $modelDetComprobante1->monto_haber = $sb->saldo_cuenta * -1;
                                }
                                /**************************************************/

                                /**************** Este bloque registra los movimientos iniciales del PASIVO ****************/
                                if (($sb->grupo_cuenta == 2 || $sb->grupo_cuenta == 7) && $sb->saldo_cuenta >= 0) {
                                    $modelDetComprobante1->id_cuenta = $sb->id_cuenta;
                                    $modelDetComprobante1->monto_debe = 0;
                                    $modelDetComprobante1->monto_haber = $sb->saldo_cuenta;
                                }

                                if (($sb->grupo_cuenta == 2 || $sb->grupo_cuenta == 7) && $sb->saldo_cuenta < 0) {
                                    $modelDetComprobante1->id_cuenta = $sb->id_cuenta;
                                    $modelDetComprobante1->monto_debe = $sb->saldo_cuenta * -1;
                                    $modelDetComprobante1->monto_haber = 0;
                                }
                                /**************************************************/

                                /**************** Este bloque registra los movimientos iniciales del PASIVO ****************/

                                ////////// se excluye la cuenta de excedente o deficit actual. será enviada a la cuenta excedente o deficit del ejercicio anterior
                                if ($sb->grupo_cuenta == 3 && $sb->saldo_cuenta >= 0 && $sb->id_cuenta != $conf_contable_util->atributo) {
                                    $modelDetComprobante1->id_cuenta = $sb->id_cuenta;
                                    $modelDetComprobante1->monto_debe = 0;
                                    $modelDetComprobante1->monto_haber = $sb->saldo_cuenta;
                                }

                                if ($sb->grupo_cuenta == 3 && $sb->saldo_cuenta < 0 && $sb->id_cuenta != $conf_contable_util->atributo) {
                                    $modelDetComprobante1->id_cuenta = $sb->id_cuenta;
                                    $modelDetComprobante1->monto_debe = $sb->saldo_cuenta * -1;
                                    $modelDetComprobante1->monto_haber = 0;
                                }

                                /////////se envía a la cuenta de excedente de ejercicio anterior.
                                if ($sb->grupo_cuenta == 3 && ($sb->monto_haber - $sb->monto_debe) > 0 && $sb->id_cuenta == $conf_contable_util->atributo) {
                                    $saldo_posit = $sb->saldo_cuenta;
                                    $exced = $exced + $sb->saldo_cuenta;
                                    $modelDetComprobante1->id_cuenta = $conf_contable_ex_ant->atributo;
                                    $modelDetComprobante1->monto_debe = 0;
                                    $modelDetComprobante1->monto_haber = $sb->saldo_cuenta;
                                }

                                if ($sb->grupo_cuenta == 3 && ($sb->monto_haber - $sb->monto_debe) < 0 && $sb->id_cuenta == $conf_contable_util->atributo) {
                                    $modelDetComprobante1->id_cuenta = $conf_contable_ex_ant->atributo;
                                    $saldo_neg = $sb->saldo_cuenta;
                                    $modelDetComprobante1->monto_debe = $sb->saldo_cuenta * -1;
                                    $exced2 = $exced + $modelDetComprobante1->monto_debe;
                                    $modelDetComprobante1->monto_haber = 0;
                                }
                                /**************************************************/

                                $modelDetComprobante1->estatus_contab = 1;
                                $modelDetComprobante1->save();
                            }
                            /*$modelDetComprobante1= new DetalleComprobante;
                            $modelDetComprobante1->descripcion= $modelComprobanteb->descripcion;
                            $modelDetComprobante1->referencia= '--';
                            $modelDetComprobante1->fecha_referencia=$modelComprobanteb->fecha_comprobante;
                            $modelDetComprobante1->clv_comprobante=$modelComprobanteb->id;*/
                            if ($saldo_posit > 0) {
                                $modelDetComprobante1 = new DetalleComprobante();
                                $modelDetComprobante1->descripcion = $modelComprobanteb->descripcion;
                                $modelDetComprobante1->referencia = '--';
                                $modelDetComprobante1->fecha_referencia = $modelComprobanteb->fecha_comprobante;
                                $modelDetComprobante1->clv_comprobante = $modelComprobanteb->id;
                                $modelDetComprobante1->id_cuenta = $conf_contable_ex_ant->atributo;
                                $modelDetComprobante1->monto_debe = $exced;
                                $modelDetComprobante1->monto_haber = 0;
                                $modelDetComprobante1->estatus_contab = 1;
                                $modelDetComprobante1->save();

                                $modelDetComprobante1 = new DetalleComprobante();
                                $modelDetComprobante1->descripcion = $modelComprobanteb->descripcion;
                                $modelDetComprobante1->referencia = '--';
                                $modelDetComprobante1->fecha_referencia = $modelComprobanteb->fecha_comprobante;
                                $modelDetComprobante1->clv_comprobante = $modelComprobanteb->id;
                                $modelDetComprobante1->id_cuenta = $conf_contable_cta_pag->atributo;
                                $modelDetComprobante1->monto_debe = 0;
                                $modelDetComprobante1->monto_haber = $exced;
                                $modelDetComprobante1->estatus_contab = 1;
                                $modelDetComprobante1->save();
                            }
                        }
                    }

                    $transaction->commit();

                    $this->redirect(['view', 'id' => $model->id]);
                }
            } catch (Exception $e) {
                $transaction->rollBack();
                Yii::app()->user->setFlash('error', $e->getMessage());
            }
        }

        $this->render('update', [
            'model' => $model,
        ]);
    }

	/**
	 * Deletes a particular model.
	 * If deletion is successful, the browser will be redirected to the 'admin' page.
	 * @param integer $id the ID of the model to be deleted
	 */
	public function actionDelete($id)
	{
		if(Yii::app()->request->isPostRequest)
		{
			// we only allow deletion via POST request
			$this->loadModel($id)->delete();

			// if AJAX request (triggered by deletion via admin grid view), we should not redirect the browser
			if(!isset($_GET['ajax']))
				$this->redirect(isset($_POST['returnUrl']) ? $_POST['returnUrl'] : array('admin'));
		}
		else
			throw new CHttpException(400,'Invalid request. Please do not repeat this request again.');
	}

	/**
	 * Lists all models.
	 */
	public function actionIndex()
	{
		$dataProvider=new CActiveDataProvider('EjerciciosContables');
		$this->render('index',array(
			'dataProvider'=>$dataProvider,
		));
	}

	/**
	 * Manages all models.
	 */
	public function actionAdmin()
	{
		$model=new EjerciciosContables('search');
		$model->unsetAttributes();  // clear any default values
		if(isset($_GET['EjerciciosContables']))
			$model->attributes=$_GET['EjerciciosContables'];

                
Yii::import('application.modules.configuracion.models.*',true);
  Yii::import('application.modules.contable.models.*',true);
  if (ConfContable::config('CONFAPERTURA')=='SI'){
      $fecha_actual=date('Y-m-d');
      $fecha_anterior= strtotime ( '-1 year' , strtotime ($fecha_actual) ) ;
      $fecha_anterior = date( 'Y' , $fecha_anterior).'-01-01';
      $fecha_precierre= strtotime ( '-1 year' , strtotime ($fecha_anterior) ) ;
      $fecha_precierre = date( 'Y' , $fecha_precierre).'-01-01';
//      echo $fecha_anterior;exit;
        $modelejercicio= EjerciciosContables::model()->find("activo=1 and estatus=1 and fecha_inicio='$fecha_anterior'");
        $modelprecierre= EjerciciosContables::model()->find("estatus=2 and fecha_inicio='$fecha_precierre'");
if ($modelprecierre){
     Yii::app()->user->setFlash('error', "<strong>No! </strong>Debera cerrar el periodo de hace dos años antes de continuar.");
//         echo "<pre>"; print_r($modelprecierre);exit;
//     exit;
}else {
    
      if ($fecha_actual>=date('Y').'-01-01' &&  $fecha_actual<=date('Y').'-12-31' && $modelejercicio){
          
        $modelcierremensual= CierreMensual::model()->findAll("id_periodo=$modelejercicio->id order by id asc");
        $modelcierretrimestral= CierreTrimestral::model()->findAll("id_periodo=$modelejercicio->id order by id asc");
   

$mes = array("Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre");
$trimestre = array("Trimestre 1","Trimestre 2","Trimestre 3","Trimestre 4");
$mesestrimestre= array ("Enero,Febrero,Marzo","Abril,Mayo,Junio","Julio,Agosto,Septiembre","Octubre,Noviembre,Diciembre");
//$rangostrimestre = array("1,2,3","4,5,6","7,8,9","10,11,12");

        
                $modelejercicio->estatus=2;
                $modelejercicio->activo=0;
                $modelejercicio->save();
                
                $nuevoejercicio= new EjerciciosContables;
                $nuevoejercicio->nombre_periodo='Período contable '.date('Y');
                $nuevoejercicio->fecha_inicio=date('Y').'-01-01';
                $nuevoejercicio->fecha_fin=date('Y').'-12-31';
                $nuevoejercicio->estatus=1;
                $nuevoejercicio->activo=1;
                $nuevoejercicio->save();
              
        for ($i=0; $i<=11; $i++){
         $fecha_desde= strtotime ( '+1 year' , strtotime ($modelcierremensual[$i]->fecha_desde) ) ;
         $fecha_hasta= strtotime ( '+1 year' , strtotime ($modelcierremensual[$i]->fecha_hasta) ) ;
         $fecha_desde = date ( 'Y-m-d' , $fecha_desde );
         $fecha_hasta = date ( 'Y-m-d' , $fecha_hasta );
     
         if ($i==1){
             if (date("L")==0){
             $fecha_hasta=date('Y').'-02-28';
             }else {
             $fecha_hasta=date('Y').'-02-29';
         }
     }
    
            $cierremensual= new CierreMensual;
            $cierremensual->mes=  strtoupper($mes[$i]);
            $cierremensual->fecha_desde=$fecha_desde;
            $cierremensual->fecha_hasta=$fecha_hasta;
            $cierremensual->id_periodo=$nuevoejercicio->id;
            $cierremensual->save();
//            echo strtoupper($mes[$i])."<br/>"; 
        }
        
        
         for ($j=0; $j<=3; $j++){
     
         $fecha_desde= strtotime ( '+1 year' , strtotime ($modelcierretrimestral[$j]->fecha_desde) ) ;
         $fecha_hasta= strtotime ( '+1 year' , strtotime ($modelcierretrimestral[$j]->fecha_hasta) ) ;
         $fecha_desde = date ( 'Y-m-d' , $fecha_desde );
         $fecha_hasta = date ( 'Y-m-d' , $fecha_hasta );
     
    
            $cierretrimestral= new CierreTrimestral;
            $cierretrimestral->trimestre=  $trimestre[$j];
            $cierretrimestral->meses= strtoupper($mesestrimestre[$j]);
//            $cierretrimestral->idmeses=  $rangostrimestre[$j];
            $cierretrimestral->fecha_desde=$fecha_desde;
            $cierretrimestral->fecha_hasta=$fecha_hasta;
            $cierretrimestral->id_periodo=$nuevoejercicio->id;
            $cierretrimestral->save();
 
        }
        $anoactual=date('Y');
        Yii::app()->user->setFlash('success', "<strong>Bien! </strong>Se ha aperturado un nuevo periodo contable para el año $anoactual.");
//        echo 'el usuario dijo que si '.$fecha_actual;
      }
  }
}
                
		$this->render('admin',array(
			'model'=>$model,
		));
	}

	/**
	 * Returns the data model based on the primary key given in the GET variable.
	 * If the data model is not found, an HTTP exception will be raised.
	 * @param integer the ID of the model to be loaded
	 */
	public function loadModel($id)
	{
		$model=EjerciciosContables::model()->findByPk($id);
		if($model===null)
			throw new CHttpException(404,'The requested page does not exist.');
		return $model;
	}

	/**
	 * Performs the AJAX validation.
	 * @param CModel the model to be validated
	 */
	protected function performAjaxValidation($model)
	{
		if(isset($_POST['ajax']) && $_POST['ajax']==='ejercicios-contables-form')
		{
			echo CActiveForm::validate($model);
			Yii::app()->end();
		}
	}
        
        public function actionCambiafecha(){
                $fecha_fin='';
		if(isset($_POST['EjerciciosContables']['fecha_inicio'])){
                   $anio=date('Y-m-d',  strtotime($_POST['EjerciciosContables']['fecha_inicio']));
                   $fecha_fin =date('d-m-Y', strtotime('+1 year'));
//                     $fecha_fin = date ( 'd-m-Y' , $fecha_fin );
                    
		}
                echo $fecha_fin;
	}
}
