<?php

class PagosMasivosController 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', // we only allow deletion via POST request
                        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','generarOrdenPago','generarOrdenPagoMasivo', 'pagoMasivoXls'),
                'users'=>array('@'),
            ),
            array('allow', // allow authenticated user to perform 'create' and 'update' actions
                'actions'=>array('create','update','buscarDatosProceso','GenerarPagoTxt','GenerarPagoExcel', 'pagar','DetallePagos','DecisionDetallePago', 'reversarPago'),
                '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)
    {
        $modelDetalle =new PagosMasivosDetalle('search');
        $modelDetalle->unsetAttributes();  // clear any default values
        if(isset($_GET['PagosMasivosDetalle']))
            $modelDetalle->attributes=$_GET['PagosMasivosDetalle'];

        $modelDatosTxt=new DatosTxtIntegrado('search');
        $modelDatosTxt->unsetAttributes();  // clear any default values
        if(isset($_GET['DatosTxtIntegrado']))
                $modelDatosTxt->attributes=$_GET['DatosTxtIntegrado'];
        $sql="SELECT nombre_titulo, cantidad_reservada, monto_pago_reservada, cantidad_pagado, monto_pago_pagado, cantidad_excluido, monto_pago_excluido FROM (
                SELECT detalle.id_pagos_masivos,id_nombre_proceso, 'CREDITOS' as nombre_titulo, cantidad_reservada, monto_pago_reservada, cantidad_pagado, monto_pago_pagado, cantidad_excluido, monto_pago_excluido
                FROM pagos.pagos_masivos_detalle as detalle
                LEFT JOIN (
                    SELECT id_pagos_masivos, count(*) AS cantidad_reservada,  sum((crd.monto_credito_depositar)) AS monto_pago_reservada FROM pagos.pagos_masivos_detalle as d
                    JOIN prestamos.credito as crd on d.id_proceso = crd.id
                    WHERE id_nombre_proceso = 1 AND id_estatus_detalle = 1
                    GROUP BY id_pagos_masivos
                ) as reservada ON detalle.id_pagos_masivos =reservada.id_pagos_masivos
                LEFT JOIN (
                    SELECT id_pagos_masivos, count(*) AS cantidad_pagado,  sum((crd.monto_credito_depositar)) AS monto_pago_pagado FROM pagos.pagos_masivos_detalle as d
                    JOIN prestamos.credito as crd on d.id_proceso = crd.id
                    WHERE id_nombre_proceso = 1 AND id_estatus_detalle = 2
                    GROUP BY id_pagos_masivos
                )as pago ON detalle.id_pagos_masivos =pago.id_pagos_masivos
                LEFT JOIN (
                    SELECT id_pagos_masivos, count(*) AS cantidad_excluido,  sum((crd.monto_credito_depositar)) AS monto_pago_excluido FROM pagos.pagos_masivos_detalle as d
                    JOIN prestamos.credito as crd on d.id_proceso = crd.id
                    WHERE id_nombre_proceso = 1 AND id_estatus_detalle = 3
                    GROUP BY id_pagos_masivos
                )as excluido ON detalle.id_pagos_masivos =excluido.id_pagos_masivos
                WHERE id_nombre_proceso = 1

                UNION
                SELECT detalle.id_pagos_masivos,id_nombre_proceso, 'RETIRO PARCIAL' as nombre_titulo, cantidad_reservada, monto_pago_reservada, cantidad_pagado, monto_pago_pagado, cantidad_excluido, monto_pago_excluido
                FROM pagos.pagos_masivos_detalle as detalle
                LEFT JOIN (
                    SELECT id_pagos_masivos, count(*) AS cantidad_reservada, sum(monto_pagar) AS monto_pago_reservada FROM pagos.pagos_masivos_detalle as d
                    JOIN retiro.retiro_parcial retiro ON d.id_proceso = retiro.id
                    WHERE id_nombre_proceso = 2 AND id_estatus_detalle = 1
                    GROUP BY id_pagos_masivos
                ) as reservada ON detalle.id_pagos_masivos =reservada.id_pagos_masivos
                LEFT JOIN (
                    SELECT id_pagos_masivos,count(*) AS cantidad_pagado, sum(monto_pagar) AS monto_pago_pagado FROM pagos.pagos_masivos_detalle as d
                    JOIN retiro.retiro_parcial retiro ON d.id_proceso = retiro.id
                    WHERE id_nombre_proceso = 2 AND id_estatus_detalle = 2
                    GROUP BY id_pagos_masivos
                )as pago ON detalle.id_pagos_masivos =pago.id_pagos_masivos
                LEFT JOIN (
                    SELECT id_pagos_masivos,count(*) AS cantidad_excluido, sum(monto_pagar) AS monto_pago_excluido FROM pagos.pagos_masivos_detalle as d
                    JOIN retiro.retiro_parcial retiro ON d.id_proceso = retiro.id
                    WHERE id_nombre_proceso = 2 AND id_estatus_detalle = 3
                    GROUP BY id_pagos_masivos
                )as excluido ON detalle.id_pagos_masivos =excluido.id_pagos_masivos
                WHERE id_nombre_proceso = 2


                UNION

                SELECT detalle.id_pagos_masivos,id_nombre_proceso, 'LIQUIDACION' as nombre_titulo, cantidad_reservada, monto_pago_reservada, cantidad_pagado, monto_pago_pagado, cantidad_excluido, monto_pago_excluido
                FROM pagos.pagos_masivos_detalle as detalle
                LEFT JOIN (
                    SELECT id_pagos_masivos, count(*) AS cantidad_reservada, sum(monto_pagar) AS monto_pago_reservada FROM pagos.pagos_masivos_detalle as d
                    JOIN retiro.liquidacion liquidacion ON d.id_proceso = liquidacion.id
                    WHERE id_nombre_proceso = 3 AND id_estatus_detalle = 1
                    GROUP BY id_pagos_masivos
                ) as reservada ON detalle.id_pagos_masivos =reservada.id_pagos_masivos
                LEFT JOIN (
                    SELECT id_pagos_masivos,count(*) AS cantidad_pagado, sum(monto_pagar) AS monto_pago_pagado FROM pagos.pagos_masivos_detalle as d
                    JOIN retiro.liquidacion liquidacion ON d.id_proceso = liquidacion.id
                    WHERE id_nombre_proceso = 3 AND id_estatus_detalle = 2
                    GROUP BY id_pagos_masivos
                )as pago ON detalle.id_pagos_masivos =pago.id_pagos_masivos
                LEFT JOIN (
                    SELECT id_pagos_masivos,count(*) AS cantidad_excluido, sum(monto_pagar) AS monto_pago_excluido FROM pagos.pagos_masivos_detalle as d
                    JOIN retiro.liquidacion liquidacion ON d.id_proceso = liquidacion.id
                    WHERE id_nombre_proceso = 3 AND id_estatus_detalle = 3
                    GROUP BY id_pagos_masivos
                )as excluido ON detalle.id_pagos_masivos =excluido.id_pagos_masivos
                WHERE id_nombre_proceso = 3




            ) as foo
            WHERE id_pagos_masivos= ".(int)$id."
            ORDER BY id_nombre_proceso";
            // echo "<pre>";print_r($sql);exit;
        $data = Yii::app()->db->createCommand($sql)->queryAll();

        $this->render('view',array(
            'model'=>$this->loadModel($id),
            'modelDetalle'=>$modelDetalle,
            'modelDatosTxt'=>$modelDatosTxt,
            'data'=>$data,
        ));
    }

    /**
     * Creates a new model.
     * If creation is successful, the browser will be redirected to the 'view' page.
     */

    public function actionCreate()
    {
        $model=new PagosMasivos('registro');
        // Uncomment the following line if AJAX validation is needed
        // $this->performAjaxValidation($model);
            $model->unsetAttributes();  // clear any default values
        if(isset($_GET['ajax'])){
            if(isset($_GET['id_tipo_pagos_masivos'])){
                $model->id_tipo_pagos_masivos=$_GET['id_tipo_pagos_masivos'];
                Yii::app()->session['id_tipo_pagos_masivos'] = $model->id_tipo_pagos_masivos;
            }
            elseif (isset(Yii::app()->session['id_tipo_pagos_masivos'])) {
                $model->id_tipo_pagos_masivos=Yii::app()->session['id_tipo_pagos_masivos'];
            }

            if(isset($_GET['tipo_descarga'])){
                $model->tipo_descarga=$_GET['tipo_descarga'];
                Yii::app()->session['tipo_descarga'] = $model->tipo_descarga;
            }
            elseif (isset(Yii::app()->session['tipo_descarga'])) {
                $model->tipo_descarga=Yii::app()->session['tipo_descarga'];
            }

            if(isset($_GET['id_banco_tipo_servicio'])){
                $model->id_banco_tipo_servicio=$_GET['id_banco_tipo_servicio'];
                Yii::app()->session['id_banco_tipo_servicio'] = $model->id_banco_tipo_servicio;
            }
            elseif (isset(Yii::app()->session['id_banco_tipo_servicio'])) {
                $model->id_banco_tipo_servicio=Yii::app()->session['id_banco_tipo_servicio'];
            }


            if(isset($_GET['id_param_banco'])){
                $model->id_param_banco=$_GET['id_param_banco'];
                Yii::app()->session['id_param_banco'] = $model->id_param_banco;
            }
            elseif (isset(Yii::app()->session['id_param_banco'])) {
                $model->id_param_banco=Yii::app()->session['id_param_banco'];
            }

            if(isset($_GET['PagosMasivos'])){
                $model->attributes=$_GET['PagosMasivos'];
            }
        }
        else
            unset(Yii::app()->session['id_tipo_pagos_masivos']);

        if(isset($_POST['PagosMasivos']))
        {
            $model->attributes=$_POST['PagosMasivos'];
            Yii::app()->session['id_tipo_pagos_masivos'] = ($model->id_tipo_pagos_masivos!='')?$model->id_tipo_pagos_masivos:NULL;
            if( $model->validate()){
                if($model->id_procesos_seleccionados !='' ){
                    $model->id_procesos_seleccionados = explode(",", $model->id_procesos_seleccionados);
                    $transaction = Yii::app()->db->beginTransaction();
                    try {
                        $model->cant_pago = count($model->id_procesos_seleccionados);
                        $model->fecha_registro = date('Y-m-d');
                        if($model->save()){
                            $modelSeguimiento = new PagosMasivosSeguimiento();
                            $modelSeguimiento->id_pagos_masivos = $model->id;
                            $modelSeguimiento->id_estatus_pagos = 1;
                            if($modelSeguimiento->save()){
                                $valido = true;
                                $monto = 0;
                                foreach ($model->id_procesos_seleccionados as $key => $value) {
                                    $modelDetalle = new PagosMasivosDetalle();
                                    $modelDetalle->id_proceso =$value;
                                    $modelDetalle->id_nombre_proceso = $model->id_tipo_pagos_masivos;

                                    if($model->id_tipo_pagos_masivos == 3){
                                        $monto+= Liquidacion::model()->findByPk($value)->monto_pagar;
                                    }
                                    //Pago Masivo de Retiros Parciales
                                    elseif ($model->id_tipo_pagos_masivos == 2) {
                                        $monto+= RetiroParcial::model()->findByPk($value)->monto_pagar;
                                    }
                                    elseif ($model->id_tipo_pagos_masivos == 7) {
                                        $monto+= AporteVoluntario::model()->findByPk($value)->monto_retirado;
                                    }
                                    elseif ($model->id_tipo_pagos_masivos == 10) {

                                        OrdenPagoSeguimiento::model()->updateAll(['actual'=>false],'id_orden_pago=:id_orden_pago',[':id_orden_pago'=>$value]);
                                        $modelSeguimiento = new OrdenPagoSeguimiento();
                                        $modelSeguimiento->id_orden_pago = $value;
                                        $modelSeguimiento->id_estatus_orden_pago = 6;
                                        $modelSeguimiento->save();

                                         $monto+= OrdenPago::model()->findByPk($value)->monto_pago;

                                    }
                                    //Pago Masivo de Creditos
                                    else{
                                        $credito= Credito::model()->findByPk($value);
                                        $monto+= $credito->monto_credito_depositar;
                                    }
                                    $modelDetalle->id_pagos_masivos = $model->id;
                                    $modelDetalle->id_estatus_detalle = 1;
                                    if(!$modelDetalle->save())
                                        $valido = false;
                                }
                                $model->total_pago = $monto;
                                $model->save();

                                if($valido){
                                    $transaction->commit();
                                    Yii::app()->user->setFlash('success', 'Los datos han sido registrado exitosamente');
                                    $this->redirect(array('view','id'=>$model->id));
                                }
                                else{
                                    $transaction->rollBack();
                                    Yii::app()->user->setFlash('error', 'Los datos no han sido registrado');
                                    $this->redirect(array('admin'));
                                }
                            }
                        }
                    }
                    catch (Exception $e){ //echo "<pre>";print_r($e);exit;
                            $transaction->rollback();
                            Yii::app()->user->setFlash('error', "Ocurrio un error durante el guardado, se han revertido todos los cambios");
                            $this->redirect(array('admin'));
                    }
                }
                else{
                    Yii::app()->user->setFlash('error','Debe seleccionar los registro que seran pagados');
                }
            }

        }
    $this->render('create',array(
            'model'=>$model,
        ));
}
	public function actionGenerarOrdenPago($id)
	{
		$model=new PagosMasivos('registroOrdenPago');
		$modelOrdenPago =  OrdenPago::model()->findByPk($id);

		if(isset($_POST['PagosMasivos']))
		{
			$valido= TRUE;
			$model->attributes=$_POST['PagosMasivos'];
			$model->id_tipo_pagos_masivos=10;
			$valido= $model->validate() && $valido;
			if($valido){
				Yii::import('application.modules.contable.models.ParametrosBancos');
		    	$modelBanco = ParametrosBancos::model()->findByPk($model->id_param_banco);
		    	if(!$modelBanco){
		    		$modelBanco = new ParametrosBancos;
		    	}

				if($model->tipo_descarga==1){
					if($modelOrdenPago->id_banco_proveedor != $modelBanco->id_banco){
						$valido = FALSE;
						Yii::app()->user->setFlash('error', 'Ha seleccionado el tipo de descarga como del mismo banco, pero los bancos seleccionados son diferentes');
					}
				}
				else{
					if($modelOrdenPago->id_banco_proveedor == $modelBanco->id_banco){
						$valido = FALSE;
						Yii::app()->user->setFlash('error', 'Ha seleccionado el tipo de descarga como bancos diferentes, pero los bancos seleccionados son iguales');
					}
				}

			}
			if($valido){
				$transaction = Yii::app()->db->beginTransaction();
				try {
					$model->cant_pago = 1;
					$model->total_pago = $modelOrdenPago->monto_pago;
					if($model->save()){
						$modelSeguimiento = new PagosMasivosSeguimiento();
						$modelSeguimiento->id_pagos_masivos = $model->id;
						$modelSeguimiento->id_estatus_pagos = 1;
						if($modelSeguimiento->save()){
							$modelDetalle = new PagosMasivosDetalle();
							$modelDetalle->id_proceso =$modelOrdenPago->id;
							$modelDetalle->id_nombre_proceso = $model->id_tipo_pagos_masivos;
							$modelDetalle->id_pagos_masivos = $model->id;
							$modelDetalle->id_estatus_detalle = 1;

							OrdenPagoSeguimiento::model()->updateAll(['actual'=>false],'id_orden_pago=:id_orden_pago',[':id_orden_pago'=>$modelOrdenPago->id]);
							$modelSeguimiento = new OrdenPagoSeguimiento();
							$modelSeguimiento->id_orden_pago = $modelOrdenPago->id;
							$modelSeguimiento->id_estatus_orden_pago = 6;
							$modelSeguimiento->save();

							if($modelDetalle->save()){
								$transaction->commit();
								Yii::app()->user->setFlash('success', 'Los datos han sido registrado exitosamente');
								$this->redirect(array('view','id'=>$model->id));
							}
							else{
								$transaction->rollBack();
								Yii::app()->user->setFlash('error', 'Los datos no han sido registrado');
								$this->redirect(array('admin'));
							}
						}
					}
				}
                catch (Exception $e){ //echo "<pre>";print_r($e);exit;
                        $transaction->rollback();
                        Yii::app()->user->setFlash('error', "Ocurrio un error durante el guardado, se han revertido todos los cambios");
                        $this->redirect(array('admin'));
                }
            }

        }
    $this->render('generarOrdenPago',array(
            'model'=>$model,
            'modelOrdenPago'=>$modelOrdenPago,
        ));
}
public function actionGenerarOrdenPagoMasivo($id)
    {
        $model=new PagosMasivos('registroOrdenPagoMasivo');
        $modelOrdenPagoMasivo =   DatosNominaOrdenPago::model()->findByPk($id);
        $modelOrdenPago = new  OrdenPago;
        $model->unsetAttributes();  // clear any default values
        if(isset($_GET['ajax'])){
            if(isset($_GET['id_orden_pago_masivo'])){
                $model->id_orden_pago_masivo=$_GET['id_orden_pago_masivo'];
                Yii::app()->session['id_orden_pago_masivo'] = $model->id_orden_pago_masivo;
            }
            elseif (isset(Yii::app()->session['id_orden_pago_masivo'])) {
                $model->id_tipo_pagos_masivos=Yii::app()->session['id_orden_pago_masivo'];
            }

            if(isset($_GET['tipo_descarga'])){
                $model->tipo_descarga=$_GET['tipo_descarga'];
                Yii::app()->session['tipo_descarga'] = $model->tipo_descarga;
            }
            elseif (isset(Yii::app()->session['tipo_descarga'])) {
                $model->tipo_descarga=Yii::app()->session['tipo_descarga'];
            }

            if(isset($_GET['id_banco_tipo_servicio'])){
                $model->id_banco_tipo_servicio=$_GET['id_banco_tipo_servicio'];
                Yii::app()->session['id_banco_tipo_servicio'] = $model->id_banco_tipo_servicio;
            }
            elseif (isset(Yii::app()->session['id_banco_tipo_servicio'])) {
                $model->id_banco_tipo_servicio=Yii::app()->session['id_banco_tipo_servicio'];
            }


            if(isset($_GET['id_param_banco'])){
                $model->id_param_banco=$_GET['id_param_banco'];
                Yii::app()->session['id_param_banco'] = $model->id_param_banco;
            }
            elseif (isset(Yii::app()->session['id_param_banco'])) {
                $model->id_param_banco=Yii::app()->session['id_param_banco'];
            }

            if(isset($_GET['PagosMasivos'])){
                $model->attributes=$_GET['PagosMasivos'];
            }
        }
        else
            unset(Yii::app()->session['id_tipo_pagos_masivos']);

        if(isset($_POST['PagosMasivos']))
        {
            $model->attributes=$_POST['PagosMasivos'];
            $model->id_tipo_pagos_masivos=10;
            if( $model->validate()){

                if($model->id_procesos_seleccionados !='' ){
                    $model->id_procesos_seleccionados = Yii::app()->db->createCommand()
                        ->select('id')
                        ->from('pagos.orden_pago')
                        ->where('id_datos_nomina_orden_pago=:id', ['id' => $id])
                        ->andWhere(['not in', 'id', explode(',', $model->id_procesos_seleccionados)])
                        ->queryAll();

                    $transaction = Yii::app()->db->beginTransaction();
                    try {
                        $model->cant_pago = count($model->id_procesos_seleccionados);
                        if($model->save()){
                            DatosNominaOrdenPagoSeguimiento::model()->updateAll(['actual'=>false],'id_datos_nomina_orden_pago=:id_datos_nomina_orden_pago',[':id_datos_nomina_orden_pago'=>$modelOrdenPagoMasivo->id]);
                            $modelSeguimiento = new DatosNominaOrdenPagoSeguimiento();
                            $modelSeguimiento->id_datos_nomina_orden_pago = $modelOrdenPagoMasivo->id;
                            $modelSeguimiento->id_estatus_orden_pago = 6;
                            $modelSeguimiento->save();

                            $modelSeguimiento = new PagosMasivosSeguimiento();
                            $modelSeguimiento->id_pagos_masivos = $model->id;
                            $modelSeguimiento->id_estatus_pagos = 1;
                            if($modelSeguimiento->save()){
                                $valido = true;
                                $monto = 0;
                                foreach ($model->id_procesos_seleccionados as $key => $value) {
                                    $modelDetalle = new PagosMasivosDetalle();
                                    $modelDetalle->id_proceso =$value['id'];
                                    $modelDetalle->id_nombre_proceso = $model->id_tipo_pagos_masivos;

                                    $modelDetalle->id_pagos_masivos = $model->id;
                                    $modelDetalle->id_estatus_detalle = 1;
                                    if($modelDetalle->save()){
                                        OrdenPagoSeguimiento::model()->updateAll(['actual'=>false],'id_orden_pago=:id_orden_pago',[':id_orden_pago'=>$value['id']]);
                                        $modelSeguimiento = new OrdenPagoSeguimiento();
                                        $modelSeguimiento->id_orden_pago = $value['id'];
                                        $modelSeguimiento->id_estatus_orden_pago = 6;
                                        $modelSeguimiento->save();

                                         $monto+= OrdenPago::model()->findByPk($value['id'])->monto_pago;

                                    }
                                    else
                                        $valido = false;
                                }
                                $model->total_pago = $monto;
                                $model->save();

                                if($valido){
                                    $transaction->commit();
                                    Yii::app()->user->setFlash('success', 'Los datos han sido registrado exitosamente');
                                    $this->redirect(array('view','id'=>$model->id));
                                }
                                else{
                                    $transaction->rollBack();
                                    Yii::app()->user->setFlash('error', 'Los datos no han sido registrado');
                                    $this->redirect(array('admin'));
                                }
                            }
                        }
                    }
                    catch (Exception $e){ //echo "<pre>";print_r($e);exit;
                            $transaction->rollback();
                            Yii::app()->user->setFlash('error', "Ocurrio un error durante el guardado, se han revertido todos los cambios");
                            $this->redirect(array('admin'));
                    }
                }
                else{
                    Yii::app()->user->setFlash('error','Debe seleccionar los registro que seran pagados');
                }
            }

        }
    $this->render('generarOrdenPagoMasivo',array(
            'model'=>$model,
            'modelOrdenPagoMasivo'=>$modelOrdenPagoMasivo,
            'modelOrdenPago'=>$modelOrdenPago,
        ));
}

public function actionGenerarPagoTxt($id)
{
    $model = $this->loadModel($id);
    if ($model) {
        $this->render('progresoArchivo', ['id' => $id]);

        echo "<script type=\"text/javascript\">
            $('#carga').show();
            $('#formulario').hide();
        </script>";
        $this->mensajeCarga(($mensaje = '<b>Consultando los formatos</b> .....'));
        //buscar el formato del encabezado del archivo
        $mensajes = '';
        $archivo = EstructuraArchivoBanco::model()->findAll(
            'id_param_bancos=:id_param_bancos AND id_banco_tipo_servicio=:id_banco_tipo_servicio AND st_formato_banco IS TRUE',
            [
                ':id_param_bancos' => $model->id_param_banco,
                ':id_banco_tipo_servicio' => $model->id_banco_tipo_servicio,
            ]
        );
        foreach ($archivo as $key => $value) {
            //guardar el contenido del ebncabezado en una variable
            $encabezado = '';
            $detalle = '';
            /*
            * Busca todas las variables que se encuentren en el formato con
            * la nomenclatura especÃ­fica para declarar una variable dentro del formato
            */
            $this->mensajeCarga(($mensaje = '<b>Buscando la estructura del encabezado del archivo</b> .....'));
            if (preg_match_all('/\[\{([a-z]|_|[0-9])*\}\]/', $value->encabezado, $variables)) {
                $variable = implode("','", array_unique($variables[0]));
                $variable = "'".$variable."'";
                $this->mensajeCarga(
                    ($mensaje =
                        '<b>Realizando el reemplazo de las variables por los valores en el encabezado</b> .....')
                );
                $encabezado = $this->reemplazoCadena(
                    $value->encabezado,
                    $variable,
                    $model,
                    $model->idBancoTipoServicio->idbanco,
                    $model->id_banco_tipo_servicio
                );
            }

            $this->mensajeCarga(($mensaje = '<b>Buscando la estructura en el cuerpo del archivo</b> .....'));
            if (preg_match_all('/\[\{([a-z]|_|[0-9])*\}\]/', $value->cuerpo, $variables)) {
                // el implode guarda en la variable $variable separado por ',' los valores conseguidos en el array
                // se utiliza $variables[0] debido a que el preg_match_all en la posicion 0 devuelve las coincidencia
                // el array_unique solo deja aquellas nomenclaturas unicas elimina las repetidas
                $variable = implode("','", array_unique($variables[0]));
                // se concatena las comillas cencillas al primcipio y al final de la cadena
                $variable = "'".$variable."'";
                $this->mensajeCarga(($mensaje = '<b>Realizando consulta para determinar los pagos</b> .....'));
                $detallesPagos = PagosMasivosDetalle::model()->findAll('id_pagos_masivos=:id_pagos_masivos', [
                    ':id_pagos_masivos' => $model->id,
                ]);
                $this->mensajeCarga(
                    ($mensaje =
                        '<b>Realizando el reemplazo de las variables por los valores en el cuerpo</b> .....')
                );
                $detalle = '';
                if (count($detallesPagos) > 0) {
                    $detalle = $this->reemplazoCadena(
                        $value->cuerpo,
                        $variable,
                        $detallesPagos,
                        $model->idBancoTipoServicio->idbanco,
                        $model->id_banco_tipo_servicio
                    );
                }
            }

            $archivo = $encabezado."\r\n".$detalle;
            if ($archivo != '') {
                $nombre_archivo = $model->nombre_archivo.'_'.$key.'.txt';
                $this->mensajeCarga(($mensaje = '<b>Guardando archivo</b> .....'));
                file_put_contents(Yii::app()->params['rutaErroresNominaAportes'].$nombre_archivo, $archivo);
                $mensajes .=
                    '<li>Descargue '.
                    CHtml::link('AQUÍ', Yii::app()->params['rutaErroresNominaAportes'].$nombre_archivo, [
                        'target' => '_blank',
                    ]).
                    ' el archivo '.
                    $model->nombre_archivo.
                    '_'.
                    $key.
                    '</li>';
            }
        }
        if ($mensajes != '') {
            echo "<script type=\"text/javascript\">
                        $('#resultado').show();
                        $('#archivos').append('<b>Descarga de los archivos:<br><ul>".
                $mensajes.
                "</ul></b><br>');
                        $('#boton').show();
                        </script>";
        } else {
            $this->mensajeCarga(($mensaje = '<b>No esta configurado el archivo para este banco</b> .....'));
        }
    }
}

    public function actionGenerarPagoExcel($id)
    {
        $model = $this->loadModel($id);
        if ($model) {
            //buscar el formato del encabezado del archivo
            $archivo = EstructuraArchivoBanco::model()->findAll('id_param_bancos=:id_param_bancos AND id_banco_tipo_servicio=:id_banco_tipo_servicio AND st_formato_banco IS TRUE', [
                'id_param_bancos' => $model->id_param_banco,
                'id_banco_tipo_servicio' => $model->id_banco_tipo_servicio
            ]);

            foreach ($archivo as $key => $value) {
                $encabezado = [];
                $detalle = [];

                /* Busca todas las variables que se encuentren en el formato con
                 * la nomenclatura especÃ­fica para declarar una variable dentro del formato
                 */
                if (preg_match_all('/\[\{([a-z]|_|[0-9])*\}\]/', $value->encabezado, $variables)) {
                    $variable = "'".implode("','", array_unique($variables[0]))."'";
                    $encabezado = $this->reemplazoCadenaTable($value->encabezado, $variable, $model, $model->idBancoTipoServicio->idbanco, $model->id_banco_tipo_servicio);
                }

                if (preg_match_all('/\[\{([a-z]|_|[0-9])*\}\]/', $value->cuerpo, $variables)) {
                    // el implode guarda en la variable $variable separado por ',' los valores conseguidos en el array
                    // se utiliza $variables[0] debido a que el preg_match_all en la posicion 0 devuelve las coincidencia
                    // el array_unique solo deja aquellas nomenclaturas unicas elimina las repetidas
                    // se concatena las comillas cencillas al primcipio y al final de la cadena
                    $variable = "'". implode("','", array_unique($variables[0])) ."'";

                    $detallesPagos = PagosMasivosDetalle::model()->findAll('id_pagos_masivos=:id_pagos_masivos', [':id_pagos_masivos'=>$model->id]);
                    $detalle = $this->reemplazoCadenaTable($value->cuerpo, $variable, $detallesPagos, $model->idBancoTipoServicio->idbanco, $model->id_banco_tipo_servicio);
                }
            }

            if (empty($encabezado) || empty($detalle)) {
                Yii::app()->user->setFlash('error', 'No esta configurado el archivo para este banco...');

                return $this->redirect(['admin']);
            }

            $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']);
            $excel = new PHPExcel();

            $ultimaCeldaEncabezado = count($encabezado[0]) - 1;
            $ultimaCeldaDetalle = count($detalle[0]) - 1;
            $totalFilas = count($detalle) + count($encabezado);
            $ultimaLetraEncabezado = PHPExcel_Cell::stringFromColumnIndex($ultimaCeldaEncabezado);
            $ultimaLetraDetalle = PHPExcel_Cell::stringFromColumnIndex($ultimaCeldaDetalle);

            foreach (range('A', $ultimaLetraDetalle) as $columnID) {
                $excel->getActiveSheet()->getColumnDimension($columnID)->setAutoSize(true);
            }

            // formato global
            $excel->getActiveSheet()->getStyle("A1:{$ultimaLetraDetalle}{$totalFilas}")->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);

            // formato para el encabezado
            $excel->getActiveSheet()->getStyle("A1:{$ultimaLetraEncabezado}1")->getFont()->setBold(true);
            $excel->getActiveSheet()->getStyle("A1:{$ultimaLetraEncabezado}1")->getFont()->getColor()->setARGB(PHPExcel_Style_Color::COLOR_WHITE);
            $excel->getActiveSheet()->getStyle("A1:{$ultimaLetraEncabezado}1")->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID);
            $excel->getActiveSheet()->getStyle("A1:{$ultimaLetraEncabezado}1")->getFill()->getStartColor()->setARGB('1C336E');

            // formato para el cuerpo
            $excel->getActiveSheet()->getStyle("A3:{$ultimaLetraDetalle}3")->getFont()->setBold(true);
            $excel->getActiveSheet()->getStyle("A3:{$ultimaLetraDetalle}3")->getFont()->getColor()->setARGB(PHPExcel_Style_Color::COLOR_WHITE);
            $excel->getActiveSheet()->getStyle("A3:{$ultimaLetraDetalle}3")->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID);
            $excel->getActiveSheet()->getStyle("A3:{$ultimaLetraDetalle}3")->getFill()->getStartColor()->setARGB('1C336E');

            $datos = array_merge([], $encabezado, $detalle);
            $fila = 1;
            $celdasFormatoNumero = [];
            $celdasFormatoTexto = [];
            $celdasFormatoCedula = [];
            foreach ($datos as $dato) {
                $columna = 0;

                if ($fila == 1 || $fila == 3) {
                    $celdasFormatoNumero = (new Warp($dato))->map(function ($item) {
                        return preg_match('/\bMonto\b/i', $item);
                    });
                }

                if ($fila == 3) {
                    $celdasFormatoTexto = (new Warp($dato))->map(function ($item) {
                        return preg_match('/\b(Nombre del beneficiario|Detalle del pago)\b/i', $item);
                    });

                    $celdasFormatoCedula = (new Warp($dato))->map(function ($item) {
                        return preg_match('/\bcedula\b/i', $item);
                    });
                }

                foreach ($dato as $key => $valor) {
                    if ($fila == 1 || $fila == 3) {
                        $excel->getActiveSheet()->setCellValueExplicitByColumnAndRow($columna, $fila, $valor);
                    } else {
                        if (isset($celdasFormatoNumero[$key]) && $celdasFormatoNumero[$key] == 1) {
                            $excel->getActiveSheet()->setCellValueByColumnAndRow($columna, $fila, $valor);
                            $excel->getActiveSheet()->getStyleByColumnAndRow($columna, $fila)->getNumberFormat()->setFormatCode('#,##0.00');
                            $excel->getActiveSheet()->getStyleByColumnAndRow($columna, $fila)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);
                        } elseif (isset($celdasFormatoTexto[$key]) && $celdasFormatoTexto[$key] == 1) {
                            $excel->getActiveSheet()->setCellValueExplicitByColumnAndRow($columna, $fila, $valor);
                            $excel->getActiveSheet()->getStyleByColumnAndRow($columna, $fila)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_LEFT);
                        } elseif (isset($celdasFormatoCedula[$key]) && $celdasFormatoCedula[$key] == 1) {
                            $excel->getActiveSheet()->setCellValueExplicitByColumnAndRow($columna, $fila, $valor);
                            $excel->getActiveSheet()->getStyleByColumnAndRow($columna, $fila)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);
                        } else {
                            $excel->getActiveSheet()->setCellValueExplicitByColumnAndRow($columna, $fila, $valor);
                        }
                    }
                    $columna++;
                }
                $fila++;
            }

            header("Content-Disposition: attachment; filename={$model->nombre_archivo}.xlsx");
            $objWriter = new PHPExcel_Writer_Excel2007($excel);
            $objWriter->setOffice2003Compatibility(true);
            $objWriter->save('php://output');
        }
    }

    public function actionPagoMasivoXls($id)
    {
        $model = $this->loadModel($id);

        spl_autoload_unregister(array('YiiBase', 'autoload'));
        include Yii::getPathOfAlias('ext.Excel.PHPExcel.Classes').DIRECTORY_SEPARATOR.'PHPExcel.php';
        include Yii::getPathOfAlias('ext.Excel.PHPExcel.Classes').DIRECTORY_SEPARATOR.'PHPExcel'.DIRECTORY_SEPARATOR.'Reader'.DIRECTORY_SEPARATOR.'Excel2007.php';
        include Yii::getPathOfAlias('application.extensions.Excel.PHPExcel.Classes.PHPExcel').DIRECTORY_SEPARATOR.'IOFactory.php';
        spl_autoload_register(array('YiiBase', 'autoload'));
        header('Content-type: application/vnd.ms-excel');
        header("Content-Disposition: attachment; filename='{$model->nombre_archivo}.xlsx'");

        $objWriter = new PHPExcel_Writer_Excel2007(
            (new ReporteAuxiliarNomina($model))->make()
        );
        $objWriter->setOffice2003Compatibility(true);
        $objWriter->save('php://output');
    }

    public function reemplazoCadena($formato, $variables, $model, $idbanco, $idBancoTipoServicio)
    {
        //Busca todas las variables que se encuentra en el formato
        $var = [];
        $todasVariables = BancoVariable::model()
            ->with('idConfVariableBanco')
            ->findAll(
                "idbanco=:idbanco AND nomenclatura_variable in(${variables}) AND id_banco_tipo_servicio=:id_banco_tipo_servicio",
                [':idbanco' => $idbanco, ':id_banco_tipo_servicio' => $idBancoTipoServicio]
            );

        foreach ($todasVariables as $value) {
            $var[$value->idConfVariableBanco->nomenclatura_variable] = [
                'condicion_variable' => $value->idConfVariableBanco->condicion_variable,
                'longitud' => $value->longitud,
                'relleno' => $value->relleno,
                'posicion_inicio' => $value->posicion_inicio,
                'posicion_fin' => $value->posicion_fin,
                'relleno_direccion' => $value->relleno_direccion,
                'separador_miles' => $value->separador_miles,
                'separador_decimal' => $value->separador_decimal,
                'formato_fecha' => $value->formato_fecha,
                'tipo_campo' => $value->tipo_campo,
                'digitos_decimales' => $value->digitos_decimales,
            ];

            if ($value->idConfVariableBanco->nomenclatura_variable === '[{referencia}]') {
                $variableRefencia = $value->idConfVariableBanco;

                if ($variableRefencia->extra === null) {
                    throw new Exception("Debe definir el valor de inicio de la referencia.");
                }

                $var[$value->idConfVariableBanco->nomenclatura_variable]['id_variable'] = $variableRefencia->id;
                $var[$value->idConfVariableBanco->nomenclatura_variable]['actual'] = $variableRefencia->actual;
                $var[$value->idConfVariableBanco->nomenclatura_variable]['operacion'] = intval($variableRefencia->operacion);
            }
        }

        if (!is_array($model)) {
            $modelo[] = $model;
        } else {
            $modelo = $model;
        }

        $cadena = '';
        $saltoLinea = count($modelo) > 1 ? "\r\n" : '';
        $numeroReferencia = ['id' => null,'valor' => null];
        foreach ($modelo as $value) {
            if (method_exists($value, 'cargarDatos')) {
                $value->cargarDatos();
            }

            $contenido = $formato;
            foreach ($var as $key2 => $value2) {
                if (method_exists($value, $value2['condicion_variable'])) {
                    $dato = $value->{$value2['condicion_variable']}();
                } else {
                    if (isset($value->{$value2['condicion_variable']})) {
                        $dato = $value->{$value2['condicion_variable']};
                    } else {
                        $dato = $value2['condicion_variable'];

                        if (strpos($key2, '[{referencia}]') !== false) {
                            // Verifica si el registro de pago masivo tiene referencia ya creada, si no tiene se le crea
                            // una y se le guarda
                            if ($value->referencia_txt === null) {
                                if ($numeroReferencia['valor'] !== null) {
                                    $valor = $numeroReferencia['valor'];
                                } else {
                                    $valor = $value2['actual'];
                                }

                                if ($value2['operacion']) {
                                    $dato = $valor + 1;
                                } else {
                                    $dato = $valor - 1;
                                }

                                $numeroReferencia['valor'] = $dato;
                                $numeroReferencia['id'] = $value2['id_variable'];

                                $value->saveAttributes(['referencia' => $dato]);
                            } else {
                                $dato = $value->referencia_txt;
                            }
                        }

                        if (strpos($dato, '**operacion**') !== false) {
                            $dato = str_replace('**operacion**', $value->proceso, $dato);
                        } else {
                            if (strpos(strtoupper($dato), 'SELECT') !== false) {
                                $sql = str_replace(
                                    [':id_proceso', ':id_nombre_proceso', ':id_pagos_masivos'],
                                    [
                                        ':id_proceso' => $value->id_proceso,
                                        ':id_nombre_proceso' => $value->id_nombre_proceso,
                                        ':id_pagos_masivos' => $value->id_pagos_masivos,
                                    ],
                                    $value2['condicion_variable']
                                );
                                $comando = Yii::app()->db->createCommand($sql);
                                $datosConsulta = $comando->queryRow();
                                if (isset($datosConsulta['dato'])) {
                                    $dato = $datosConsulta['dato'];
                                }
                            }
                        }
                    }
                }

                if ($value2['tipo_campo'] == 1) {
                    $dato = Chtml::encode($this->limpiar($dato), true);
                } elseif ($value2['tipo_campo'] == 3 && $value2['formato_fecha'] != '' && $dato != '') {
                    $dato = date($value2['formato_fecha'], strtotime($dato));
                } elseif ($value2['tipo_campo'] == 4) {
                    if (strpos($dato, '.') > 0) {
                        list($entero, $decimal) = explode('.', $dato);
                        if (strlen($decimal) == 1) {
                            $dato .= '0';
                        }

                        $dato = str_replace(',', $value2['separador_miles'], $dato);
                        $dato = str_replace('.', $value2['separador_decimal'], $dato);
                    } else {
                        if (strlen($value2['digitos_decimales']) > 0) {
                            $dato .= $value2['digitos_decimales'];
                        }
                    }
                }

                //darle formato
                if ($value2['longitud'] > 0 && strlen($dato) < $value2['longitud'] && $value2['relleno'] != '') {
                    $posicion = $value2['relleno_direccion'] == 1 ? STR_PAD_LEFT : STR_PAD_RIGHT;
                    $dato = str_pad($dato, (int) $value2['longitud'], $value2['relleno'], $posicion);
                }
                $contenido = str_replace($key2, $dato, $contenido);
            }

            $cadena .= $contenido . $saltoLinea;
        }

        // Valida que esten definidos los dos atributos (id, valor) para hacer la actualizacion al valor actual de la referencia
        if (count(array_filter($numeroReferencia)) === 2) {
            ConfVaribaleBanco::actualizarExtraActual($numeroReferencia);
        }

        return $cadena;
    }


    public function reemplazoCadenaTable($formato, $variables, $model, $idbanco, $idBancoTipoServicio)
    {
        //Busca todas las variables que se encuentra en el formato
        $var = [];
        $todasVariables = BancoVariable::model()
            ->with('idConfVariableBanco')
            ->findAll("idbanco=:idbanco AND nomenclatura_variable in($variables) AND id_banco_tipo_servicio=:id_banco_tipo_servicio", array(
                ':idbanco' => $idbanco,
                ':id_banco_tipo_servicio' => $idBancoTipoServicio
            ));

        foreach ($todasVariables as $key => $value) {
            $v['nombre'] = $value->nombre_variable;
            $v['condicion_variable'] = $value->idConfVariableBanco->condicion_variable;
            $v['longitud'] = $value->longitud;
            $v['relleno'] = $value->relleno;
            $v['posicion_inicio'] = $value->posicion_inicio;
            $v['posicion_fin'] = $value->posicion_fin;
            $v['relleno_direccion'] = $value->relleno_direccion;
            $v['separador_miles'] = $value->separador_miles;
            $v['separador_decimal'] = $value->separador_decimal;
            $v['formato_fecha'] = $value->formato_fecha;
            $v['tipo_campo'] = $value->tipo_campo;
            $var[$value->idConfVariableBanco->nomenclatura_variable] = $v;
        }

        if (! is_array($model)) {
            $modelo[] = $model;
        } else {
            $modelo = $model;
        }

        foreach ($modelo as $key => $value) {
            if (method_exists($value, 'cargarDatos')) {
                $value->cargarDatos();
            }

            $nombres = $formato;
            $contenido = $formato;
            foreach ($var as $key2 => $value2) {
                if (method_exists($value, $value2['condicion_variable'])) {
                    $dato = $value->{$value2['condicion_variable']}();
                } else {
                    if (isset($value->{$value2['condicion_variable']})) {
                        $dato = $value->{$value2['condicion_variable']};
                    } else {
                        $dato = $value2['condicion_variable'];
                        if (strpos($dato, '**operacion**') !== false) {
                            $dato = str_replace('**operacion**', $value->proceso, $dato);
                        }
                    }
                }

                if ($key == 0) {
                    $nombres = str_replace($key2, "{$value2['nombre']}_", $nombres);
                    $encabezado[$key] = $nombres;
                }

                $contenido = str_replace($key2, "{$dato}_", $contenido);
                $cuerpo[$key] = $contenido;
            }
        }

        return array_merge([], $this->crearArreglo($encabezado), $this->crearArreglo($cuerpo));
    }

    public function crearArreglo($datos)
    {
        return array_map(function ($item) {
            return explode('_', rtrim(
                rtrim($item, '_')
            , '_ '));
        }, $datos);
    }

    public function limpiar($String){
        $String = str_replace(array('á','à','â','ã','ª','ä'),"a",$String);
        $String = str_replace(array('Á','À','Â','Ã','Ä'),"A",$String);
        $String = str_replace(array('Í','Ì','Î','Ï'),"I",$String);
        $String = str_replace(array('í','ì','î','ï'),"i",$String);
        $String = str_replace(array('é','è','ê','ë'),"e",$String);
        $String = str_replace(array('É','È','Ê','Ë'),"E",$String);
        $String = str_replace(array('ó','ò','ô','õ','ö','º'),"o",$String);
        $String = str_replace(array('Ó','Ò','Ô','Õ','Ö'),"O",$String);
        $String = str_replace(array('ú','ù','û','ü'),"u",$String);
        $String = str_replace(array('Ú','Ù','Û','Ü'),"U",$String);
        $String = str_replace(array('[','^','´','`','¨','~',']'),"",$String);
        $String = str_replace("ç","c",$String);
        $String = str_replace("Ç","C",$String);
        $String = str_replace("ñ","n",$String);
        $String = str_replace("Ñ","N",$String);
        $String = str_replace("Ý","Y",$String);
        $String = str_replace("ý","y",$String);

        $String = str_replace("&aacute;","a",$String);
        $String = str_replace("&Aacute;","A",$String);
        $String = str_replace("&eacute;","e",$String);
        $String = str_replace("&Eacute;","E",$String);
        $String = str_replace("&iacute;","i",$String);
        $String = str_replace("&Iacute;","I",$String);
        $String = str_replace("&oacute;","o",$String);
        $String = str_replace("&Oacute;","O",$String);
        $String = str_replace("&uacute;","u",$String);
        $String = str_replace("&Uacute;","U",$String);
        return $String;
    }

    /**
     * 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['PagosMasivos']))
        {
            $model->attributes=$_POST['PagosMasivos'];
            if($model->save())
                $this->redirect(array('view','id'=>$model->id));
        }

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

    public function actionPagar($id)
    {
        $model = $this->loadModel($id);
        $model->fecha_comprobante = date('d-m-Y');
        $model->scenario = 'pagar';
        $modelSeguimiento = new PagosMasivosSeguimiento();
        $mostrarDetallePago = false;
        if ($model->id_estatus != 1) {
            Yii::app()->user->setFlash('error', 'Para poder pagar el txt debe estar en estatus Txt generado');
            $this->redirect(['view', 'id' => $model->id]);
        }
        $modelPagosMasivos = '';
        $cuota_rechazada = $monto_rechazada = $cuota_pagada = $monto_pagada = 0;
        if (isset($_POST['PagosMasivos'])) {
            $model->attributes = $_POST['PagosMasivos'];

            if ($model->fechaComprobanteEscenariosContables()) {
                $model->fecha_comprobante = $_POST['PagosMasivos']['fecha_comprobante'];
            }

            $modelSeguimiento->attributes = $_POST['PagosMasivosSeguimiento'];
            unset($modelPagosMasivos);
            $modelPagosMasivos = [];
            if ($model->validate()) {
                $monto_pagado = str_replace('.', '', $model->monto_pagado);
                $monto_pagado = str_replace(',', '.', $monto_pagado);
                $error = false;
                if (($monto_pagado != $model->total_pago) && $modelSeguimiento->observacion == '') {
                    $error = true;
                    $modelSeguimiento->addError('observacion', 'debe de indicar una observacion indicando la diferendia de monto pagado');
                }
                if (! $error) {
                    if ($monto_pagado == $model->total_pago) {
                        $transaction = Yii::app()->db->beginTransaction();
                        try {
                            PagosMasivosSeguimiento::model()->updateAll(['actual' => false],
                                'id_pagos_masivos=:id_pagos_masivos',
                                [':id_pagos_masivos' => $model->id]
                            );
                            $modelSeguimiento->id_estatus_pagos = 2;
                            $modelSeguimiento->id_pagos_masivos = $model->id;
                            $modelSeguimiento->save();
                            $pagarNominaAporte = false;

                            foreach ($model->pagosMasivosDetalles as $key => $value) {
                                $value->id_estatus_detalle = 2;
                                $value->save();

                                // Liquidacion
                                if ($value->id_nombre_proceso == 3) {
                                    $modelProceso = Liquidacion::model()->findByPk($value->id_proceso);
                                    $modelProceso->liquidarCuotasDePrestamos();
                                    EstatusLiquidacion::model()->updateAll(['actual' => false], 'id_liquidacion=:id', [':id' => $value->id_proceso]);
                                    $modelEstatusLiquidacion = new EstatusLiquidacion();
                                    $modelEstatusLiquidacion->id_estatus_liquidacion = 4;
                                    $modelEstatusLiquidacion->id_liquidacion = $value->id_proceso;
                                    $modelEstatusLiquidacion->observacion = $model->num_comprobante;
                                    $modelEstatusLiquidacion->save();

                                    AsociadoEstatus::model()->updateAll(['actual' => false], 'idasociado=:idasociado', [':idasociado' => $modelProceso->idasociado]);
                                    $modelEstatus = new AsociadoEstatus();
                                    $modelEstatus->idasociado = $modelProceso->idasociado;
                                    $modelEstatus->id_estatus_asociado = 2;
                                    $modelEstatus->save();
                                }

                                // Retiro parcial
                                if ($value->id_nombre_proceso == 2) {
                                    EstatusRetiroParcial::model()->updateAll(['actual' => false], 'id_retiro_parcial=:id', [':id' => $value->id_proceso]);

                                    $modelEstatusRetiroParcial = new EstatusRetiroParcial('pagaraRetiro');
                                    $modelEstatusRetiroParcial->id_estatus_retiro = 4;
                                    $modelEstatusRetiroParcial->id_retiro_parcial = $value->id_proceso;
                                    $modelEstatusRetiroParcial->observacion = $model->num_comprobante;
                                    $modelEstatusRetiroParcial->save();

                                    $modelRetiroParcial = RetiroParcial::model()->findByPk($value->id_proceso);

                                    if ($modelRetiroParcial->prestamos_pago != '') {
                                        $prestamos_seleccionado = json_decode($modelRetiroParcial->prestamos_pago, true);

                                        foreach ($prestamos_seleccionado as $keyPs => $valuePs) {
                                            CreditoTablaAmortizacion::model()->updateAll(['id_estatus_cuota' => 2], 'idcredito=:id AND id_estatus_cuota in(1,3,6,7,8,9,12)', ['id' => $valuePs['id_credito']]);
                                            CreditoTablaAmortizacion::model()->updateAll(['id_estatus_cuota' => 11], 'idcredito=:id AND id_estatus_cuota IS NULL', ['id' => $valuePs['id_credito']]);
                                            
                                            CreditoSeguimiento::model()->updateAll(['actual' => false], 'id_credito=:id', [':id' => $valuePs['id_credito']]);
                                            $modelCreditoAnterior = new CreditoSeguimiento();
                                            $modelCreditoAnterior->id_credito = $valuePs['id_credito'];
                                            $modelCreditoAnterior->id_estatus_credito = 14;
                                            $modelCreditoAnterior->save();
                                        }
                                    }
                                }

                                // Prestamos
                                if ($value->id_nombre_proceso == 1) {
                                    CreditoSeguimiento::model()->updateAll(['actual' => false], 'id_credito=:id ', [':id' => $value->id_proceso]);

                                    $modelCreditoSeguimiento = new CreditoSeguimiento();
                                    $modelCreditoSeguimiento->id_estatus_credito = 4;
                                    $modelCreditoSeguimiento->id_credito = $value->id_proceso;
                                    $modelCreditoSeguimiento->observacion = $model->num_comprobante;
                                    $modelCreditoSeguimiento->save();

                                    $modelCredito = Credito::model()->findByPk($value->id_proceso);
                                    $modelCredito->pagarCuotasPrestamosAnteriores();

                                    if ($modelCredito->refinanciado > 0) {
                                        if ($modelCredito->prestamos_seleccionados != '') {
                                            foreach (json_decode($modelCredito->prestamos_seleccionados, true) as $keyPsC => $valuePsC) {
                                                CreditoSeguimiento::model()->updateAll(['actual' => false], 'id_credito=:id', [':id' => $valuePsC['id_credito']]);
                                                $modelCreditoAnterior = new CreditoSeguimiento();
                                                $modelCreditoAnterior->id_credito = $valuePsC['id_credito'];
                                                $modelCreditoAnterior->id_estatus_credito = ($modelCredito->refinanciado == 1) ? 18 : 19;
                                                $modelCreditoAnterior->save();
                                            }
                                        }
                                    }
                                }

                                // Aporte voluntario
                                if ($value->id_nombre_proceso == 7) {
                                    $pagarNominaAporte = true;
                                    $model->pagarArchivoAportesEspeciales($value->id_proceso);
                                }

                                // Orden de pago
                                if ($value->id_nombre_proceso == 10) {
                                    OrdenPagoSeguimiento::model()->updateAll(['actual' => false], 'id_orden_pago=:id_orden_pago', [':id_orden_pago' => $value->id_proceso]);
                                    $modelSeguimientoOrdenPago = new OrdenPagoSeguimiento();
                                    $modelSeguimientoOrdenPago->id_orden_pago = $value->id_proceso;
                                    $modelSeguimientoOrdenPago->id_estatus_orden_pago = 5;
                                    $modelSeguimientoOrdenPago->observacion = $model->num_comprobante;
                                    $modelSeguimientoOrdenPago->save();
                                }

                                $detalle_pago = new ProcesoPago();
                                $detalle_pago->id_proceso = $value->id_proceso;
                                $detalle_pago->id_nombre_proceso = $value->id_nombre_proceso;
                                $detalle_pago->id_banco = $model->id_param_banco;
                                $detalle_pago->referencia = $model->num_comprobante;
                                $detalle_pago->fecha_pago = date('d-m-Y', strtotime($model->fecha_referencia));
                                $detalle_pago->observacion = 'Pago del archivo con nombre: '.$model->nombre_archivo;
                                $detalle_pago->id_usuario = Yii::app()->user->id;
                                $detalle_pago->monto_pagado = $value->monto_pagar;
                                $detalle_pago->procedencia_pago = 2;
                                $detalle_pago->fecha_registro = date('Y-m-d');
                                $detalle_pago->save();
                            }

                            if ($pagarNominaAporte) {
                                $model->pagarNominaAporte();
                            }

                            //////////////////////////// Contabilización Inicio ////////////////////////////
                            $model->setIdComprobantePago($detalle_pago->id);
                            $model->setTituloProceso($detalle_pago->id_nombre_proceso);
                            $this->comprobantePagosMasivos($model);
                            //////////////////////////// Contabilización Fin ///////////////////////////////

                            $transaction->commit();
                            Yii::app()->user->setFlash('success', 'El pago fue aprobado de forma exitosa');
                            $this->redirect(['view', 'id' => $model->id]);
                        } catch (Exception $ex) {
                            $transaction->rollback();
                            Yii::app()->user->setFlash('error', $ex->getMessage());
                            $this->redirect(['view', 'id' => $model->id]);
                        }
                    } else {
                        $mostrarDetallePago = true;
                        if (isset($_POST['PagosMasivosDetalle'])) {
                            $montoTotal = $totalEstatusSeleccionado = $totalEstatus = 0;
                            $error = false;
                            $array = Yii::app()->session['PagosMasivosDetalle'];
                            foreach ($array as $key => $value) {
                                $totalEstatus++;
                                $pagosDetalle = PagosMasivosDetalle::model()->findByPk($value['id']);
                                if ($pagosDetalle) {
                                    $pagosDetalle->observacion = $value['observacion'];
                                    $pagosDetalle->pagado = $value['pagado'];
                                    $pagosDetalle->monto_pagar = $value['monto_pagar'];
                                    $pagosDetalle->scenario = 'pago';
                                    if ($pagosDetalle->pagado) {
                                        $pagosDetalle->id_estatus_detalle = 2;
                                        $montoTotal += $pagosDetalle->monto_pagar;
                                    } else {
                                        $pagosDetalle->id_estatus_detalle = 3;
                                        $pagosDetalle->error = true;
                                    }

                                    if ($pagosDetalle->pagado) {
                                        $cuota_pagada++;
                                        $monto_pagada += $pagosDetalle->monto_pagar;
                                    } else {
                                        $cuota_rechazada++;
                                        $monto_rechazada += $pagosDetalle->monto_pagar;
                                    }

                                    if (! $pagosDetalle->validate()) {
                                        $error = true;
                                    }
                                    $modelPagosMasivos[] = $pagosDetalle;
                                }
                            }
                            Yii::app()->session['PagosMasivosDetalle'] = $array;

                            if (! $error) {
                                $montoPagado = str_replace('.', '', $model->monto_pagado);
                                $montoPagado = str_replace(',', '.', $montoPagado);
                                if (trim($montoTotal) == trim($montoPagado)) {
                                    $transaction = Yii::app()->db->beginTransaction();
                                    try {
                                        PagosMasivosSeguimiento::model()->updateAll(['actual' => false],
                                            'id_pagos_masivos=:id_pagos_masivos',
                                            [':id_pagos_masivos' => $model->id]
                                        );
                                        $modelSeguimiento->id_estatus_pagos = 3;
                                        $modelSeguimiento->id_pagos_masivos = $model->id;
                                        $modelSeguimiento->save();
                                        $pagarNominaAporte = false;
                                        foreach ($modelPagosMasivos as $key => $value) {
                                            $value->save();

                                            $detalle_pago = new ProcesoPago();
                                            $detalle_pago->id_proceso = $value->id_proceso;
                                            $detalle_pago->id_nombre_proceso = $value->id_nombre_proceso;
                                            $detalle_pago->id_banco = $model->id_param_banco;
                                            $detalle_pago->referencia = $model->num_comprobante;
                                            $detalle_pago->fecha_pago = date('d-m-Y', strtotime($model->fecha_referencia));
                                            $detalle_pago->observacion = 'Pago del archivo con nombre: '.$model->nombre_archivo;
                                            $detalle_pago->id_usuario = Yii::app()->user->id;
                                            $detalle_pago->monto_pagado = $value->monto_pagar;
                                            $detalle_pago->procedencia_pago = 2;
                                            $detalle_pago->fecha_registro = date('Y-m-d');
                                            $detalle_pago->save();

                                            // Si el detalle de la nomina es de aporte voluntario
                                            if ($value->id_nombre_proceso == 7) {
                                                $pagarNominaAporte = true;
                                                $model->pagarArchivoAportesEspeciales($value->id_proceso);
                                            }

                                            if ($value->id_estatus_detalle == 2 && $value->id_nombre_proceso != 7) {
                                                // Liquidacion
                                                if ($value->id_nombre_proceso == 3) {
                                                    $modelProceso = Liquidacion::model()->findByPk($value->id_proceso);
                                                    $modelProceso->liquidarCuotasDePrestamos();
                                                    EstatusLiquidacion::model()->updateAll(['actual' => false], 'id_liquidacion=:id', [':id' => $value->id_proceso]);
                                                    $modelEstatusLiquidacion = new EstatusLiquidacion();
                                                    $modelEstatusLiquidacion->id_estatus_liquidacion = 4;
                                                    $modelEstatusLiquidacion->id_liquidacion = $value->id_proceso;
                                                    $modelEstatusLiquidacion->save();
                                                    AsociadoEstatus::model()->updateAll(['actual' => false], 'idasociado=:idasociado', [':idasociado' => $modelProceso->idasociado]);
                                                    $modelEstatus = new AsociadoEstatus();
                                                    $modelEstatus->idasociado = $modelProceso->idasociado;
                                                    $modelEstatus->id_estatus_asociado = 2;
                                                    $modelEstatus->save();
                                                }

                                                // Retiro parcial
                                                if ($value->id_nombre_proceso == 2) {
                                                    EstatusRetiroParcial::model()->updateAll(['actual' => false], 'id_retiro_parcial=:id', [':id' => $value->id_proceso]);

                                                    $modelEstatusRetiroParcial = new EstatusRetiroParcial('pagaraRetiro');
                                                    $modelEstatusRetiroParcial->id_estatus_retiro = 4;
                                                    $modelEstatusRetiroParcial->id_retiro_parcial = $value->id_proceso;
                                                    $modelEstatusRetiroParcial->save();

                                                    $modelRetiroParcial = RetiroParcial::model()->findByPk($value->id_proceso);

                                                    if ($modelRetiroParcial->prestamos_pago != '') {
                                                        $prestamos_seleccionado = json_decode($modelRetiroParcial->prestamos_pago, true);

                                                        foreach ($prestamos_seleccionado as $keyPsC => $valuePsC) {
                                                            CreditoTablaAmortizacion::model()->updateAll(['id_estatus_cuota' => 2], 'idcredito=:id AND id_estatus_cuota in(1,3,6,7,8,9,12)', ['id' => $valuePsC['id_credito']]);
                                                            CreditoTablaAmortizacion::model()->updateAll(['id_estatus_cuota' => 11], 'idcredito=:id AND id_estatus_cuota IS NULL', ['id' => $valuePsC['id_credito']]);
                                                            
                                                            CreditoSeguimiento::model()->updateAll(['actual' => false], 'id_credito=:id', [':id' => $valuePsC['id_credito']]);
                                                            $modelCreditoAnterior = new CreditoSeguimiento();
                                                            $modelCreditoAnterior->id_credito = $valuePsC['id_credito'];
                                                            $modelCreditoAnterior->id_estatus_credito = 14;
                                                            $modelCreditoAnterior->save();
                                                        }
                                                    }
                                                }

                                                // Prestamos
                                                if ($value->id_nombre_proceso == 1) {
                                                    CreditoSeguimiento::model()->updateAll(['actual' => false], 'id_credito=:id ', [':id' => $value->id_proceso]);

                                                    $modelCreditoSeguimiento = new CreditoSeguimiento();
                                                    $modelCreditoSeguimiento->id_estatus_credito = 4;
                                                    $modelCreditoSeguimiento->id_credito = $value->id_proceso;
                                                    $modelCreditoSeguimiento->save();

                                                    $modelCredito = Credito::model()->findByPk($value->id_proceso);
                                                    $modelCredito->pagarCuotasPrestamosAnteriores();

                                                    if ($modelCredito->refinanciado > 0) {
                                                        if ($modelCredito->prestamos_seleccionados != '') {
                                                            foreach (json_decode($modelCredito->prestamos_seleccionados, true) as $keyPs => $valuePs) {
                                                                CreditoSeguimiento::model()->updateAll(['actual' => false], 'id_credito=:id', [':id' => $valuePs['id_credito']]);
                                                                $modelCreditoAnterior = new CreditoSeguimiento();
                                                                $modelCreditoAnterior->id_credito = $valuePs['id_credito'];
                                                                $modelCreditoAnterior->id_estatus_credito = ($modelCredito->refinanciado == 1) ? 18 : 19;
                                                                $modelCreditoAnterior->save();
                                                            }
                                                        }
                                                    }
                                                }

                                                // Orden de pago
                                                if ($value->id_nombre_proceso == 10) {
                                                    OrdenPagoSeguimiento::model()->updateAll(['actual' => false], 'id_orden_pago=:id_orden_pago', [':id_orden_pago' => $value->id_proceso]);
                                                    $modelSeguimientoOrdenPago = new OrdenPagoSeguimiento();
                                                    $modelSeguimientoOrdenPago->id_orden_pago = $value->id_proceso;
                                                    $modelSeguimientoOrdenPago->id_estatus_orden_pago = 5;
                                                    $modelSeguimientoOrdenPago->observacion = $model->num_comprobante;
                                                    $modelSeguimientoOrdenPago->save();
                                                }
                                            }

                                            if ($value->id_estatus_detalle == 3 && $value->id_nombre_proceso == 10) {
                                                OrdenPagoSeguimiento::model()->updateAll(['actual' => false], 'id_orden_pago=:id_orden_pago', [':id_orden_pago' => $value->id_proceso]);
                                                $modelSeguimientoOrdenPago = new OrdenPagoSeguimiento();
                                                $modelSeguimientoOrdenPago->id_orden_pago = $value->id_proceso;
                                                $modelSeguimientoOrdenPago->id_estatus_orden_pago = 4;
                                                $modelSeguimientoOrdenPago->observacion = $value->observacion;
                                                $modelSeguimientoOrdenPago->save();
                                            }
                                        }

                                        if ($pagarNominaAporte) {
                                            $model->pagarNominaAporte();
                                        }

                                        //////////////////////////// Contabilización Inicio ////////////////////////////
                                        $model->setIdComprobantePago($detalle_pago->id);
                                        $model->setTituloProceso($detalle_pago->id_nombre_proceso);
                                        $this->comprobantePagosMasivos($model);
                                        //////////////////////////// Contabilización Fin ///////////////////////////////

                                        unset(Yii::app()->session['PagosMasivosDetalle']);

                                        $transaction->commit();
                                        Yii::app()->user->setFlash('success', 'El pago fue aprobado de forma exitosa');
                                        $this->redirect(['view', 'id' => $model->id]);
                                    } catch (Exception $ex) {
                                        $transaction->rollback();
                                        Yii::app()->user->setFlash('error', $ex->getMessage());
                                        $this->redirect(['view', 'id' => $model->id]);
                                    }
                                } else {
                                    Yii::app()->user->setFlash('error', 'La cantidad del monto seleccionado es diferente al monto declarado');
                                }
                            }
                        } else {
                            Yii::app()->user->setFlash('error', 'Debido a la diferencia de pago registrado.<br />Debe de definir los pagos que no fueron cancelado');
                            $data = [];
                            $cuota_rechazada = $monto_rechazada = $cuota_pagada = $monto_pagada = 0;
                            foreach ($model->pagosMasivosDetalles as $key => $value) {
                                $datos = ['id' => $value->id, 'cedula' => $value->cedula, 'nombre' => $value->nombre, 'apellidos' => $value->apellidos, 'unidad' => $value->unidad,
                                        'proceso' => $value->proceso, 'monto_pagar' => $value->monto_pagar, 'pagado' => $value->pagado, 'observacion' => ($value->observacion != '') ? $value->observacion : '',
                                        'decision' => '', 'search' => $value->cedula.$value->nombre.$value->apellidos.$value->unidad.$value->proceso.$value->monto_pagar.(($value->pagado) ? 'pagado' : 'excluido'), ];
                                $data[] = $datos;
                                if ($value->pagado) {
                                    $cuota_pagada++;
                                    $monto_pagada += $value->monto_pagar;
                                } else {
                                    $cuota_rechazada++;
                                    $monto_rechazada += $value->monto_pagar;
                                }
                            }
                            Yii::app()->session['PagosMasivosDetalle'] = $data;
                        }
                    }
                }
            }
        } else {
            $data = [];
            foreach ($model->pagosMasivosDetalles as $key => $value) {
                $datos = ['cedula' => $value->cedula, 'nombre' => $value->nombre, 'apellidos' => $value->apellidos, 'unidad' => $value->unidad,
                                        'proceso' => $value->proceso, 'monto_pagar' => $value->monto_pagar, 'pagado' => $value->pagado, 'observacion' => $value->observacion, ];
                $data[] = $datos;
            }
            Yii::app()->session['PagosMasivosDetalle'] = $data;
        }
        unset($modelPagosMasivos);
        $modelPagosMasivos[] = new PagosMasivosDetalle();

        $this->render('pagar', [
            'model' => $model,
            'modelSeguimiento' => $modelSeguimiento,
            'modelPagosMasivos' => $modelPagosMasivos,
            'mostrarDetallePago' => $mostrarDetallePago,
            'cuota_rechazada' => $cuota_rechazada,
            'monto_rechazada' => $monto_rechazada,
            'cuota_pagada' => $cuota_pagada,
            'monto_pagada' => $monto_pagada,
        ]);
    }

    public function actionDetallePagos(){
        $model = $this->loadModel($_POST['id']);
        if($model){
            $modelPagosMasivos = Yii::app()->session['PagosMasivosDetalle'];
            $cantidad = count($modelPagosMasivos);
            $inicio = $_POST['start'];
            $longitud =  $_POST['length'];
            $datos = array_slice($modelPagosMasivos, $inicio, $longitud);
            $dato = [];
            if(isset($_POST['search']['value']) && $_POST['search']['value'] !==''){

                foreach ($modelPagosMasivos as $key => $value) {
                    // echo $value['search'].'   '. strtoupper($_POST['search']['value']).'<br>';
                    if (strpos(strtoupper($value['search']), strtoupper($_POST['search']['value'])) !== false) {
                        $dato[] = $value;
                    }
                }
                // exit;
                unset($datos);
                $datos = $dato;
                $cantidad = count($dato);
            }
            unset($modelPagosMasivos);

         // echo "<pre>";print_r($datos);exit;
            $results = [
                // "sEcho" => 1,
                "iTotalRecords" => $cantidad,
                "iTotalDisplayRecords" => $cantidad,
                "aaData"=>$datos
            ];
            echo json_encode( $results);

        }
    }
    public function actionDecisionDetallePago(){
        $results =['cuota_rechazada'=>0, 'monto_rechazada'=>0, 'cuota_pagada'=>0, 'monto_pagada'=>0];
        if(isset($_POST['id'])){
            $id = $_POST['id'];
            $array = Yii::app()->session['PagosMasivosDetalle'];
            $cuota_rechazada = $monto_rechazada= $cuota_pagada= $monto_pagada=0;
            foreach (Yii::app()->session['PagosMasivosDetalle'] as $key => $value) {
                if($value['id']== $id){
                    if($_POST['operacion']==1){
                        $array[$key]['observacion']='';
                        $array[$key]['pagado']=true;
                    }
                    else{
                        $array[$key]['observacion']=$_POST['valor'];
                        $array[$key]['pagado']=false;
                    }
                }
                if($array[$key]['pagado']){
                    $cuota_pagada++;
                    $monto_pagada+=$value['monto_pagar'];
                }
                else{
                    $cuota_rechazada++;
                    $monto_rechazada+=$value['monto_pagar'];
                }
                $array[$key]['search']=$array[$key]['cedula'].$array[$key]['nombre'].$array[$key]['apellidos'].$array[$key]['unidad'].$array[$key]['proceso'].$array[$key]['monto_pagar'].(($array[$key]['pagado'])?'pagado':'excluido');
            }
            Yii::app()->session['PagosMasivosDetalle']=$array;
            $results =['cuota_rechazada'=>$cuota_rechazada, 'monto_rechazada'=> $monto_rechazada, 'cuota_pagada'=>$cuota_pagada, 'monto_pagada'=>$monto_pagada ];
        }
        echo json_encode( $results);
    }

    /**
     * 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)
    {
        $model = $this->loadModel($id);
        PagosMasivosDetalle::model()->updateAll(['id_estatus_detalle'=>4],'id_pagos_masivos=:id',array(':id'=>$model->id));
        PagosMasivosSeguimiento::model()->updateAll(['actual'=>FALSE],'id_pagos_masivos=:id',array(':id'=>$model->id));
            $modelEstatusP= new PagosMasivosSeguimiento;
            $modelEstatusP->id_estatus_pagos=4;
            $modelEstatusP->id_pagos_masivos=$model->id;
            $modelEstatusP->actual=TRUE;
            $modelEstatusP->save();
        SeguimientoTxtIntegradoPagosMasivos::borrarPara($model->id);

        if($model->id_tipo_pagos_masivos== 10){
            foreach ($model->pagosMasivosDetalles as $key => $value) {
                OrdenPagoSeguimiento::model()->updateAll(['actual'=>false],'id_orden_pago=:id_orden_pago',[':id_orden_pago'=>$value->id_proceso]);
                $modelSeguimientoOrdenPago = new OrdenPagoSeguimiento();
                $modelSeguimientoOrdenPago->id_orden_pago = $value->id_proceso;
                $modelSeguimientoOrdenPago->id_estatus_orden_pago = 2;
                $modelSeguimientoOrdenPago->observacion = 'Rechazado';
                $modelSeguimientoOrdenPago->save();
            }
        }

        // 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('PagosMasivos');
        $this->render('index',array(
            'dataProvider'=>$dataProvider,
        ));
    }

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

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

    public function actionBuscarDatosProceso()
    {
        if(isset($_POST['id_tipo_preceso']) && $_POST['id_tipo_preceso']!=''){
            $this->render('admin',array(
                'model'=>$model,
            ));
        }
    }

    public function actionReversarPago($id)
    {
        $model = $this->loadModel($id);

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

            if ($model->reversarPago()) {
                $this->redirect(['admin']);
            }
        }

        $this->render('application.modules.retiro.views.retiroParcial.reversar', [
            '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 PagosMasivos the loaded model
     * @throws CHttpException
     */
    public function loadModel($id)
    {
        $model=PagosMasivos::model()->findByPk($id);
        if($model===null)
            throw new CHttpException(404,'The requested page does not exist.');
        return $model;
    }

    /**
     * Performs the AJAX validation.
     * @param PagosMasivos $model the model to be validated
     */
    protected function performAjaxValidation($model)
    {
        if(isset($_POST['ajax']) && $_POST['ajax']==='pagos-masivos-form')
        {
            echo CActiveForm::validate($model);
            Yii::app()->end();
        }
    }
    protected function mensajeCarga($mensaje, $contenedorMensajeId=''){
        if($contenedorMensajeId=='')
        $contenedorMensajeId ='mensajes';

        echo "  <script type=\"text/javascript\">
        $('#".$contenedorMensajeId."').html('".$mensaje."');
        </script>";
        flush();ob_flush();flush();ob_flush();
    }
    protected function barraProgreso($count, $barraProgresoId= ''){
        if($barraProgresoId=='')
        $barraProgresoId ='barraProgreso';

        echo "<script type=\"text/javascript\">
        $('#".$barraProgresoId."').css('width','".$count."%' );
        </script>";
        flush();ob_flush();
    }

    protected function comprobantePagosMasivos($model)
    {
        Yii::import('application.modules.contable.models.comprobantes.*', true);
        switch ($model->id_tipo_pagos_masivos) {
            case 2:
                Yii::import('application.modules.contable.models.comprobantes.retiro.*', true);
                (new Masivo($model))->contabilizar();
                break;
            case 1:
                $model->generarOrdenPagoAfianzadoras();

                Yii::import('application.modules.contable.models.comprobantes.prestamo.*', true);
                (new Masivo($model))->contabilizar();
                break;
            case 10:
                Yii::import('application.modules.contable.models.comprobantes.orden_pago.*', true);
                (new Masivo($model))->contabilizar();
                break;
            case 3:
                Yii::import('application.modules.contable.models.comprobantes.liquidacion.*', true);
                (new LiquidacionMasivo($model))->contabilizar();
                break;
        }
    }
}
