<?php

class DatosNominaAjusteHaberesController 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
            array('CrugeAccessControlFilter'),
            'postOnly + delete', // we only allow deletion via POST request
        );
    }

    /**
     * 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','updateDefinicionAjusteAjax','denegar','AprobarDenegarAjusteHaberes'),
                '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, $operacion =0)
    {
        if (isset(Yii::app()->session['MantenerTabsNominaAjusteHaberes'])) {
            $mantenerSessionAjuste = Yii::app()->session['MantenerTabsNominaAjusteHaberes'];
        } else {
            $mantenerSessionAjuste = null;
        }

        $model = $this->loadModel($id);
        $model->fecha_comprobante = date('d-m-Y');

        $modelAjustes=new AjusteHaberes('search');
        $modelSeguimiento=new DatosNominaHaberesSeguimiento('Aprobar');

        $modelAjustes->unsetAttributes();  // clear any default values
        if (isset($_GET['AjusteHaberes'])) {
            $modelAjustes->attributes=$_GET['AjusteHaberes'];
        }

        $modelAjustesDiferido=new AjusteHaberesDiferido('search');
        $modelAjustesDiferido->unsetAttributes();  // clear any default values
        if (isset($_GET['AjusteHaberesDiferido'])) {
            $modelAjustesDiferido->attributes=$_GET['AjusteHaberesDiferido'];
        }

        $sql1="
                SELECT 'Ajustes cargado' as descripcion, COUNT(*) AS total, SUM(monto_asociado) AS monto_asociado, SUM(monto_patrono) AS monto_patrono FROM ajuste_haberes.ajuste_haberes WHERE id_nomina_ajuste_haberes =".(int)$id."
                UNION
                SELECT 'Ajustes no definidos' as descripcion, COUNT(*) AS total, SUM(monto_asociado) AS monto_asociado, SUM(monto_patrono) FROM ajuste_haberes.ajuste_haberes_diferido WHERE id_nomina_ajuste =".(int)$id;
        $data1 = Yii::app()->db->createCommand($sql1)->queryAll();

        $this->render('view', array(
            'model'=> $model,
            'modelAjustes'=>$modelAjustes,
            'modelAjustesDiferido'=>$modelAjustesDiferido,
            'mantenerSessionAjuste'=>$mantenerSessionAjuste,
            'data1'=>$data1,
            'operacion'=>$operacion,
            'modelSeguimiento'=>$modelSeguimiento,
        ));
    }

    /**
     * Creates a new model.
     * If creation is successful, the browser will be redirected to the 'view' page.
     */
    public function actionCreate()
    {
        $model = new DatosNominaAjusteHaberes('RegistroMasivo');
        $postDatos = false;
        // Uncomment the following line if AJAX validation is needed
        // $this->performAjaxValidation($model);

        if (isset($_POST['DatosNominaAjusteHaberes'])) {
            $errorLinea = '';
            $totalAjustes = 0;
            $model->attributes = $_POST['DatosNominaAjusteHaberes'];
            $uploadedFile = CUploadedFile::getInstance($model, 'nombre_archivo');
            $model->nombre_archivo = $uploadedFile;
            $model->nombre_archivo_carga = $model->nombre_archivo;
            $ruta = Yii::app()->params['rutaAjusteHaberes'].$uploadedFile;

            if ($model->validate()) {
                $archivo = $uploadedFile->saveAs($ruta);
                //Lectura del Excel

                $phpExcelPath = Yii::getPathOfAlias('ext.Excel.PHPExcel.Classes');
                $phpExcelPath2 = Yii::getPathOfAlias('application.extensions.Excel.PHPExcel.Classes.PHPExcel');

                spl_autoload_unregister(['YiiBase', 'autoload']);
                include $phpExcelPath.DIRECTORY_SEPARATOR.'PHPExcel.php';
                include $phpExcelPath.DIRECTORY_SEPARATOR.'PHPExcel'.DIRECTORY_SEPARATOR.'Reader'.DIRECTORY_SEPARATOR.'Excel2007.php';
                include $phpExcelPath2.DIRECTORY_SEPARATOR.'IOFactory.php';
                spl_autoload_register(['YiiBase', 'autoload']);

                // Cargando la hoja de calculo
                // $extension = end((explode(".",  $model->nombre_archivo)));
                $extension = $uploadedFile->getExtensionName();
                if ($extension == 'xls') { // Si es .xls o xlsx
                    $objReader = new PHPExcel_Reader_Excel5();
                } else {
                    $objReader = new PHPExcel_Reader_Excel2007();
                }

                $objPHPExcel = $objReader->load($ruta); //carga en objphpExcel por medio de objReader,el nombre del archivo
                $objPHPExcel->setActiveSheetIndex(0);
                $numRows = $objPHPExcel->setActiveSheetIndex(0)->getHighestRow();

                $col_base = 'A';
                $num_rows_depurado = 0;
                $num_rows_vacia = ['cant' => 0, 'rows_vacias' => ''];

                $filas = $objPHPExcel->getActiveSheet()->getHighestRow($col_base);
                $columna = $objPHPExcel->getActiveSheet()->rangeToArray($col_base.'1:'.$col_base.$filas, '', false, false, true);
                unset($columna['1'],$columna['2'],$columna['3']);

                foreach ($columna as $celda => $data) {
                    if ($data[$col_base] != '' || $data[$col_base] != null) {
                        $num_rows_depurado++;
                    } else {
                        $num_rows_vacia['cant']++;
                        $num_rows_vacia['rows_vacias'] .= $col_base.$celda.', ';
                    }
                }
                //#######################################################################################
                //#######################################################################################

                $numRows = intval($numRows) - intval($num_rows_vacia['cant']);

                $valido = true;
                if ($numRows > 3) {
                    // Valida que los campos de la primera linea cumplan con el formato
                    $model->total_asociado = $objPHPExcel->getActiveSheet()->getCell('A2')->getCalculatedValue();
                    $model->total_ajuste = $objPHPExcel->getActiveSheet()->getCell('B2')->getCalculatedValue();
                    $model->total_ajuste = round(str_replace(',', '.', str_replace('.', ',', $model->total_ajuste)), 2);
                    $model->fecha_ajuste = $objPHPExcel->getActiveSheet()->getCell('C2')->getCalculatedValue();
                    $model->scenario = 'carga_ajuste';
                    if ($model->validate()) {
                        $e_rrores = [];
                        // Valida La primera linea del archivo, contra el formato de nombre de archivo
                        if ($model->total_asociado != $numRows - 3) {
                            $valido = false;
                            $errorLinea .= 'La cantidad de ('.$model->total_asociado.') ajustes de haberes declarados en la cabecera no coincide con la cantidad de ('.($numRows - 3).') asociados presentes en el archivo; ';
                        }

                        // Recorre el archivo en busca de errores
                        $e_rrores[0] = ['Total asociados', 'Total ajuste', 'Fecha del ajuste', null, null, 'ERRORES'];
                        $e_rrores[1] = [$model->total_asociado, $model->total_ajuste, $model->fecha_ajuste, null, null, $errorLinea];
                        $e_rrores[2] = ['Cédula', 'Monto asociado', 'Monto patrono', 'tipo de ajuste'];

                        for ($fila = 4; $fila <= $model->total_asociado + 3; $fila++) {
                            $errores = '';
                            $valid = true;
                            $modelAjuste = new AjusteHaberes('RegistroIndividualMasivo');
                            $modelAjuste->cedula = $objPHPExcel->getActiveSheet()->getCell('A'.$fila)->getCalculatedValue();
                            $modelAjuste->monto_asociado = str_replace('.', ',', $objPHPExcel->getActiveSheet()->getCell('B'.$fila)->getCalculatedValue());
                            $modelAjuste->monto_patrono = str_replace('.', ',', $objPHPExcel->getActiveSheet()->getCell('C'.$fila)->getCalculatedValue());
                            $modelAjuste->id_tipo_ajuste = $model->id_tipo_ajuste;
                            if (! $modelAjuste->validate()) {
                                $valid = false; //Si contiene al menos un error, el archivo es devuelto
                                $errores .= $modelAjuste->getError('cedula').' ';
                                $errores .= $modelAjuste->getError('monto_asociado').' ';
                                $errores .= $modelAjuste->getError('monto_patrono').' ';
                                $errores .= $modelAjuste->getError('id_tipo_ajuste').' ';
                                if (! $modelAjuste->getError('monto_asociado')) {
                                    $totalAjustes += str_replace(',', '.', $modelAjuste->monto_asociado);
                                }
                                if (! $modelAjuste->getError('monto_patrono')) {
                                    $totalAjustes += str_replace(',', '.', $modelAjuste->monto_patrono);
                                }
                            } else {
                                $valid = true;
                                $e_rrores[$fila] = [$modelAjuste->cedula, $modelAjuste->monto_asociado, $modelAjuste->monto_patrono, $modelAjuste->id_tipo_ajuste];

                                $totalAjustes += (float) str_replace(',', '.', $modelAjuste->monto_asociado);
                                $totalAjustes += (float) str_replace(',', '.', $modelAjuste->monto_patrono);
                            }

                            if (! $valid) {
                                $valido = $valido && false;
                                $e_rrores[$fila] = [$modelAjuste->cedula, $modelAjuste->monto_asociado, $modelAjuste->monto_patrono, $modelAjuste->id_tipo_ajuste, $errores];
                            }
                        }

                        if (round($totalAjustes, 2) != round(str_replace(',', '.', $model->total_ajuste), 2)) {
                            $valido = false;
                            $errorLinea .= 'El total de ajuste declarado en el archivo '.$model->total_ajuste.', no coincide con la sumatoria de los ajustes presentes en el mismo '.$totalAjustes.';  ';
                            $e_rrores[1] = [$model->total_asociado, $model->total_ajuste, $model->fecha_ajuste, null, null, $errorLinea];
                        }
                        // Si el archivo no contiene errores se procede al guardado
                        if ($valido) {
                            $transaction = Yii::app()->db->beginTransaction();
                            try {
                                unset($modelAjuste);
                                //Guarda el encabezado del xls en el modelo
                                if ($model->save()) {
                                    $estatus = 4;
                                    //Recorre el archivo excel para cargar los apòrtes
                                    for ($fila = 4; $fila <= $model->total_asociado + 3; $fila++) {
                                        $errores = '';
                                        $error = false;
                                        $modelAjuste = new AjusteHaberes('RegistroIndividualMasivo');
                                        $modelAjuste->cedula = $objPHPExcel->getActiveSheet()->getCell('A'.$fila)->getCalculatedValue();
                                        $modelAjuste->monto_asociado = $this->getValue($objPHPExcel->getActiveSheet()->getCell('B'.$fila)->getCalculatedValue());
                                        $modelAjuste->monto_patrono = $this->getValue($objPHPExcel->getActiveSheet()->getCell('C'.$fila)->getCalculatedValue());
                                        $modelAjuste->id_tipo_ajuste = $model->id_tipo_ajuste;
                                        $modelAjuste->id_nomina_ajuste_haberes = $model->id;
                                        $modelAsociado = Asociado::model()->find('cedula=:ci AND id_estatus in(1,3,4) ORDER BY idasociado DESC ', [':ci' => $modelAjuste->cedula]);
                                        if (! $modelAsociado) {
                                            $error = true;
                                            $errores .= 'La cédula no pertenece a ningún asociado activo';
                                        } else {
                                            $modelAjuste->idasociado = $modelAsociado->idasociado;
                                            $modelTipoAjuste = TipoAjuste::model()->findByPk((int) $modelAjuste->id_tipo_ajuste);
                                            if (! $modelTipoAjuste) {
                                                $modelAjuste->id_tipo_ajuste = null;
                                                $error = true;
                                                $errores .= 'El tipo de ajuste cargado no existe';
                                            }
                                        }

                                        $modelAjuste->id_nomina_ajuste_haberes = $model->id;
                                        if (! $error) {
                                            if ($modelAjuste->monto_asociado > 0 && $modelAjuste->monto_patrono > 0) {
                                                $modelAjuste->id_tipo_movimiento = 3;
                                            } elseif ($modelAjuste->monto_patrono > 0) {
                                                $modelAjuste->id_tipo_movimiento = 2;
                                            } else {
                                                $modelAjuste->id_tipo_movimiento = 1;
                                            }

                                            $modelAjuste->save();
                                            $modelSeguimiento = new AjusteHaberesSeguimiento();
                                            $modelSeguimiento->id_ajuste_haberes = $modelAjuste->id;
                                            $modelSeguimiento->id_estatus_ajuste_haberes = 1;
                                            $modelSeguimiento->save();
                                        } else {
                                            $estatus = 5;
                                            $modelAjusteDiferidos = new AjusteHaberesDiferido();
                                            $modelAjusteDiferidos->cedula = $modelAjuste->cedula;
                                            $modelAjusteDiferidos->id_nomina_ajuste = $model->id;
                                            $modelAjusteDiferidos->monto_asociado = $modelAjuste->monto_asociado;
                                            $modelAjusteDiferidos->monto_patrono = $modelAjuste->monto_patrono;
                                            $modelAjusteDiferidos->id_tipo_ajuste = $modelAjuste->id_tipo_ajuste;
                                            $modelAjusteDiferidos->id_estatus_ajuste_diferido = 1;
                                            $modelAjusteDiferidos->observacion = $errores;
                                            if (! $modelAjusteDiferidos->save()) {
                                                throw new Exception('Error al guardar ajuste de haberes diferido');
                                            }
                                        }
                                    }
                                    $modelEstatusNomina = new DatosNominaHaberesSeguimiento();
                                    $modelEstatusNomina->id_datos_nomina_ajuste_haberes = $model->id;
                                    $modelEstatusNomina->id_estatus_ajuste_haberes = $estatus;
                                    $modelEstatusNomina->actual = true;
                                    $modelEstatusNomina->save();
                                    $transaction->commit(); //Ejecuta todas las operaciones
                                    $this->redirect(['view', 'id' => $model->id]);
                                } else {
                                    //No se pudo guargar el archivo
                                    Yii::app()->user->setFlash('error', 'No se pudo Guargar el Archivo');
                                }
                            } catch (Exception $e) {
                                $transaction->rollback();
                                Yii::app()->user->setFlash('error', 'Ocurrio un error durante el guardado, se han revertido todos los cambios');
                                $this->redirect(['admin']);
                            }
                        } else { //Si el Archivo contiene errores
                            // echo"<pre>";print_r($e_rrores);exit;
                            $objPHPExcel2 = new PHPExcel();
                            $objPHPExcel2->getActiveSheet()->fromArray($e_rrores, null, 'A1');
                            $objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel2);

                            $objWriter->setOffice2003Compatibility(true);

                            $objWriter->save(Yii::app()->params['rutaErroresNominaAportes'].'errores_'.$model->nombre_archivo.'.xlsx');
                            Yii::app()->user->setFlash('error', 'El archivo contiene errores, verifique '.CHtml::link('AQUÍ', Yii::app()->params['rutaErroresNominaAportes'].'errores_'.$model->nombre_archivo.'.xlsx', ['target' => '_blank']));
                        }
                    }// Fin de la validacion de la primera linea
                }// Fin if ($numRows>3), es decir, si el archivo no esta vacio
                else {
                    $model->addError('total_asociado', 'El Archivo no contiene ningun ajuste');
                }
            }
        }

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

    protected function getValue($number)
    {
        if (stripos(',', $number)) {
            return $this->bcround(str_replace('.', ',', $number));
        }

        return $this->bcround($number);
    }

    protected function bcround($strval, $precision = 2)
    {
        if (false !== ($pos = strpos($strval, '.')) && (strlen($strval) - $pos - 1) > $precision) {
            $zeros = str_repeat('0', $precision);

            return bcadd($strval, "0.{$zeros}5", $precision);
        }

        return $strval;
    }

    /**
     * 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($id)
    {
        $model=$this->loadModel($id);

        // Uncomment the following line if AJAX validation is needed
        // $this->performAjaxValidation($model);

        if (isset($_POST['DatosNominaAjusteHaberes'])) {
            $model->attributes=$_POST['DatosNominaAjusteHaberes'];
            if ($model->save()) {
                $this->redirect(array('view','id'=>$model->id));
            }
        }

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

    public function actionUpdateDefinicionAjusteAjax()
    {
        $resultado=array();
        $resultado['error'] = 0;
        $resultado['estatusTxt'] = 0;

        $resultado['mensajes_error'] = "<div class=\"alert in alert-block fade alert-error\"><ul>";

        $id = (isset($_POST['AjusteHaberesDiferido']['id'])&& $_POST['AjusteHaberesDiferido']['id']!='')?$_POST['AjusteHaberesDiferido']['id']:null;
        $model = new AjusteHaberesDiferido;
        $model = AjusteHaberesDiferido::model()->findByPk((int)$id);
        $model->attributes = $_POST['AjusteHaberesDiferido'];
        $model->scenario = 'DefinicionEstatus';
        if ($model->validate()) {
            $transaction = Yii::app()->db->beginTransaction();
            try {
                if ($model->save()) {
                    $modelDiferidos =AjusteHaberesDiferido::model()->count('id_nomina_ajuste=:id AND id_estatus_ajuste_diferido = 1', [':id'=>$model->id_nomina_ajuste]);
                    if ($modelDiferidos ==0) {
                        DatosNominaHaberesSeguimiento::model()->updateAll(
                            ['actual'=>false],
                            'id_datos_nomina_ajuste_haberes=:id_datos_nomina_ajuste_haberes',
                            [':id_datos_nomina_ajuste_haberes'=>$model->id_nomina_ajuste]
                        );
                        $DatosNominaHaberesSeguimiento = new DatosNominaHaberesSeguimiento();
                        $DatosNominaHaberesSeguimiento->id_estatus_ajuste_haberes = 4 ;
                        $DatosNominaHaberesSeguimiento ->id_datos_nomina_ajuste_haberes=$model->id_nomina_ajuste;
                        $DatosNominaHaberesSeguimiento ->save();

                        $resultado['estatusTxt'] = 4;
                    }
                    $transaction->commit();
                    Yii::app()->user->setFlash('success', 'Los datos han sido actualizado exitosamente');
                }
            } catch (Exception $e) {//echo "<pre>";print_r($e);exit;
                throw new CHttpException(400, $e->getMessage());
                $transaction->rollBack();
                Yii::app()->user->setFlash('error', 'Ha ocurrido un error al tratar de actualizar el ajuste de haber.');
            }
        } else {
            $resultado['error'] = 1;
            $errores='';
            foreach ($model->getErrors() as $key=>$value) {
                $error="";
                foreach ($value as $keyI => $valueI) {
                    $error .=$valueI." \n";
                }
                $resultado[$key] =$error;

                $errores.='<li>'.$error.'</li>';
            }

            $resultado['mensajes_error'].=$errores.'</ul></div>';

            echo CJSON::encode($resultado);
            Yii::app()->end();
        }
        echo CJSON::encode($resultado);
    }

    public function actionAprobarDenegarAjusteHaberes()
    {
        $resultado = [];
        $resultado['error'] = 0;
        $resultado['estatusTxt'] = 0;

        $resultado['mensajes_error'] = '<div class="alert in alert-block fade alert-error"><ul>';

        $model = new DatosNominaHaberesSeguimiento();
        $id = (isset($_POST['DatosNominaHaberesSeguimiento']['id_datos_nomina_ajuste_haberes']) && $_POST['DatosNominaHaberesSeguimiento']['id_datos_nomina_ajuste_haberes'] != '')
            ? $_POST['DatosNominaHaberesSeguimiento']['id_datos_nomina_ajuste_haberes']
            : null;
        $modelNomina = $this->loadModel($id);
        $modelNomina->fecha_comprobante = date('d-m-Y');
        $modelNomina->attributes = (new Warp($_POST))->get('DatosNominaAjusteHaberes');
        $model->attributes = $_POST['DatosNominaHaberesSeguimiento'];
        $model->scenario = (2 == $model->id_estatus_ajuste_haberes) ? 'AprobarCarga' : 'DenegarCarga';

        if ($model->validate()) {
            $transaction = Yii::app()->db->beginTransaction();
            try {
                DatosNominaHaberesSeguimiento::model()->updateAll(
                    ['actual' => false],
                    'id_datos_nomina_ajuste_haberes=:id_datos_nomina_ajuste_haberes',
                    ['id_datos_nomina_ajuste_haberes' => $model->id_datos_nomina_ajuste_haberes]
                );

                $model->fecha_registro = date('Y-m-d', strtotime($model->fecha_registro));
                $model->save();

                Yii::app()
                    ->getDb()
                    ->createCommand("SELECT ajuste_haberes.generar_seguimientos_para_ajustes_de_nomina_ajuste_haberes(:nomina, :estatus, :observacion)")
                    ->bindValues([
                        'nomina' => $model->id_datos_nomina_ajuste_haberes,
                        'estatus' => $model->id_estatus_ajuste_haberes,
                        'observacion' => $model->observacion
                    ])
                    ->execute();

                $modelNomina->setReferencia($model->num_comprobante);
                $modelNomina->setFechaReferencia($model->fecha_registro);
                //////////////////////////// Contabilización Comprobante Inicio ////////////////////////////
                Yii::import('application.modules.contable.models.comprobantes.*', true);
                Yii::import('application.modules.contable.models.comprobantes.ajuste.*', true);
                (new AjusteMasivo($modelNomina))->contabilizar();
                //////////////////////////// Contabilización Comprobante Fin ///////////////////////////////

                $transaction->commit();
                Yii::app()->user->setFlash('success', 'Los datos han sido actualizado exitosamente');
            } catch (Exception $e) {
                $transaction->rollBack();
                Yii::app()->user->setFlash('error', 'Ha ocurrido un error al tratar de aprobar el ajuste de haber.');
                throw new CHttpException(400, $e->getMessage());
            }
        } else {
            $resultado['error'] = 1;
            $errores = '';
            foreach ($model->getErrors() as $key => $value) {
                $error = '';
                foreach ($value as $keyI => $valueI) {
                    $error .= $valueI." \n";
                }
                $resultado[$key] = $error;

                $errores .= '<li>'.$error.'</li>';
            }

            $resultado['mensajes_error'] .= $errores.'</ul></div>';

            echo CJSON::encode($resultado);
            Yii::app()->end();
        }
        echo CJSON::encode($resultado);
    }

    public function actionDenegar($id)
    {
        $transaction=Yii::app()->db->beginTransaction();
        try {
            $model=$this->loadModel($id);
            if ($model->id_estatus==4 || $model->id_estatus==5) {
                DatosNominaHaberesSeguimiento::model()->updateAll(
                    ['actual'=>false],
                    'id_datos_nomina_ajuste_haberes=:id_datos_nomina_ajuste_haberes',
                    [':id_datos_nomina_ajuste_haberes'=>$model->id]
                );
                $DatosNominaHaberesSeguimiento = new DatosNominaHaberesSeguimiento();
                $DatosNominaHaberesSeguimiento->id_estatus_ajuste_haberes = 3 ;
                $DatosNominaHaberesSeguimiento ->id_datos_nomina_ajuste_haberes=$model->id;
                if ($DatosNominaHaberesSeguimiento->save(false)) {
                    Yii::app()
                        ->getDb()
                        ->createCommand("SELECT ajuste_haberes.generar_seguimientos_para_ajustes_de_nomina_ajuste_haberes(:nomina, :estatus, :observacion)")
                        ->bindValues([
                            'nomina' => $model->id,
                            'estatus' => 3, // Rechazado
                            'observacion' => 'Rechazado'
                        ])
                        ->execute();

                    $transaction->commit();
                    Yii::app()->user->setFlash('success', "El archivo a sido Rechazado");
                    $this->redirect(array('view','id'=>$model->id));
                }
            } else {
                Yii::app()->user->setFlash('error', "No se puede Rechazar el archivo");
                $this->redirect(array('view','id'=>$model->id));
            }
        } catch (Exception $e) {
            $transaction->rollback();
            throw new CHttpException(500, 'Ocurrio un Error durante el proceso, se han revertido todos los cambios');
        }
    }



    /**
     * 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)
    {
        $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'));
        }
    }

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

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

        $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 $id the ID of the model to be loaded
     * @return DatosNominaAjusteHaberes the loaded model
     * @throws CHttpException
     */
    public function loadModel($id)
    {
        $model=DatosNominaAjusteHaberes::model()->findByPk($id);
        if ($model===null) {
            throw new CHttpException(404, 'The requested page does not exist.');
        }
        return $model;
    }

    /**
     * Performs the AJAX validation.
     * @param DatosNominaAjusteHaberes $model the model to be validated
     */
    protected function performAjaxValidation($model)
    {
        if (isset($_POST['ajax']) && $_POST['ajax']==='datos-nomina-ajuste-haberes-form') {
            echo CActiveForm::validate($model);
            Yii::app()->end();
        }
    }
}
