<?php

class DatosTxtIntegradoController 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')
    );
//                return array();
  }

  /**
   * 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 authenticated user to perform 'create' and 'update' actions
        'actions'=>array('create','update','cargarAporteOrdinario','cargarAporteFondo','ViewPrestamos','view','viewCmao',
            'viewCmaof','AdminAO','cargarAporteVoluntario','aprobarTxt','adminAE','adminMP','aprobarCmao','viewFaltantes',
            'exportarXls','vercontable','viewMp','viewCPR','aprobarMp','reporteCmaof', 'viewCmaf', 'AdminAF', 'PdfAO',
            'pdfAOFaltante', 'xlsAOF','vistaArchivoCargado', 'consolidado', 'resumen', 'reversarNominaAE', 'reversarNominaAO'
        ),
        //'actions'=>array('create','update','cargarAporteOrdinario','view','ViewPrestamos','viewCmao','AdminAO','cargarAporteVoluntario','aprobarTxt','adminAE','aprobarCmao','viewFaltantes','exportarXls','vercontable'),
        'users'=>array('@'),
      ),
      array('allow', // allow admin user to perform 'admin' and 'delete' actions
        'actions'=>array('admin','AdminPrestamo','delete','deleteNominaPrestamos','pagarCmae','pagarCmao', 'PagarCmap',
            'CargaNominaPrestamos','pagarMp','aprobarPrestamo', 'confTxtIntegrado', 'cerrarProceso', 'retiro', 'generarTxt',
            'generarXls', 'generarPDF', 'sinCuenta', 'xlsAO','UpdateAporteDiferidoAjax'
        ),
        'users'=>array('@'),
      ),
      array('deny',  // deny all users
        'users'=>array('*'),
      ),
    );
  }

    /**
     * Displays a particular model.
     *
     * @param int $id the ID of the model to be displayed
     */
    public function actionView($id)
    {
        $model = $this->loadModel($id);
        $modelAportes = new AporteVoluntario('search'); //AporteVoluntario::model()->findAll('id_txt_integrado=:id',array(':id'=>$model->id));
        $modelAportesDiferidos = new AporteVoluntarioDiferido('search'); //AporteVoluntarioDiferido::model()->findAll('id_txt=:id',array(':id'=>$model->id));

        $detallePago = ProcesoPago::model()->find('id_proceso=:proceso AND actual=true and id_nombre_proceso=7', array(':proceso' => $model->id));

        if (empty($detallePago)) {
            empty($detallePago);
        }

        if (isset($_GET['AporteVoluntario'])) {
            $modelAportes->attributes = $_GET['AporteVoluntario'];
        }
        if (isset($_GET['AporteVoluntarioDiferido'])) {
            $modelAportesDiferidos->attributes = $_GET['AporteVoluntarioDiferido'];
        }

        $this->render('view', array(
            'model' => $model,
            'modelAportes' => $modelAportes,
            'modelAportesDiferidos' => $modelAportesDiferidos,
            'detalle' => $detallePago,
        ));
    }

        public function actionViewPrestamos($id)
  {

            $model=$this->loadModel($id);
            if (!Yii::app()->user->checkAccess('usuario_administrador') ){
                $modelUnidad = UnidadUsuario::model()->find('idusuario=:idusuario AND idunidad=:id_unidad',array(':idusuario'=>Yii::app()->user->id,':id_unidad'=>$model->id_unidad));

                if(!$modelUnidad){
                    $this->redirect(array('/prestamo/datosPreNominaCredito/view','id' =>$model->id_prenomina_credito));
                }

            }

            $modelPagos= new DatosTxtTablaAmortizacion('search');//AporteVoluntario::model()->findAll('id_txt_integrado=:id',array(':id'=>$model->id));
            $modelPagosDiferidos= new DatosTxtTablaAmortizacionDiferido('search'); //AporteVoluntarioDiferido::model()->findAll('id_txt=:id',array(':id'=>$model->id));
            $modelCuotasExcluidas= new PreNominaTablaAmortizacion('search'); //AporteVoluntarioDiferido::model()->findAll('id_txt=:id',array(':id'=>$model->id));
            $detallePago = ProcesoPago::model()->find('id_proceso=:proceso AND actual=true', array(':proceso'=>$model->id));

            if (empty($detallePago)) {

                empty($detallePago);
            }

            if(isset($_GET['DatosTxtTablaAmortizacion'])){
      $modelPagos->attributes=$_GET['DatosTxtTablaAmortizacion'];
            }
            if(isset($_GET['DatosTxtTablaAmortizacionDiferido']))
              $modelPagosDiferidos->attributes=$_GET['DatosTxtTablaAmortizacionDiferido'];

            if(isset($_GET['PreNominaTablaAmortizacion']))
      $modelCuotasExcluidas->attributes=$_GET['PreNominaTablaAmortizacion'];
      $sql='select nombre_titulo,descripcion,count(id_tabla_amortizacion) cantidad_cuota,  sum(monto_capital) as capital , sum(monto_interes) as interes, sum(monto_cuota) as monto from prestamos.pre_nomina_tabla_amortizacion as a
                JOIN prestamos.credito_tabla_amortizacion as b on a.id_tabla_amortizacion=  b.id
                JOIN prestamos.credito as c on b.idcredito=c.id
                JOIN prestamos.tipo_credito as d on c.id_tipo_credito=d.id
                LEFT JOIN prestamos.titulo_tipo_credito as e on d.id_titulo_tipo_credito=e.id
                where id_pre_nomina_credito = '.(int)$model->id_prenomina_credito.'
                GROUP BY nombre_titulo,descripcion
                ORDER by nombre_titulo, descripcion, count(id_tabla_amortizacion), sum(monto_cuota) ';
            $data = Yii::app()->db->createCommand($sql)->queryAll();

      $sql2='SELECT nombre_titulo,d.descripcion, count(id_tabla_amortizacion) cantidad_cuota, sum(monto_cuota_pagado) AS monto_pagado, sum(monto_cobro) as monto_cobro, sum(a.monto_remanente) as monto_remanente
            FROM prestamos.datos_txt_tabla_amortizacion as a
            JOIN prestamos.credito_tabla_amortizacion as b on a.id_tabla_amortizacion= b.id
            JOIN prestamos.credito as c on b.idcredito=c.id
            JOIN prestamos.tipo_credito as d on c.id_tipo_credito=d.id
            LEFT JOIN prestamos.titulo_tipo_credito as e on d.id_titulo_tipo_credito=e.id
            WHERE id_txt ='.(int)$model->id.'
            GROUP BY nombre_titulo,d.descripcion
            ORDER by nombre_titulo, d.descripcion,
            count(id_tabla_amortizacion), sum(monto_cuota)';
            // echo "<pre>";print_r($sql2);exit;
            $data2 = Yii::app()->db->createCommand($sql2)->queryAll();

            $this->render('view_P',array(
                        'model'=>$model,
                        'modelPagos'=>$modelPagos,
                        'modelPagosDiferidos'=>$modelPagosDiferidos,
                        'modelCuotasExcluidas'=>$modelCuotasExcluidas,
                        'detalle'=>$detallePago,
                        'data'=>$data,
                        'data2'=>$data2,
    ));
  }

    public function actionVistaArchivoCargado($id)
    {
        $model = $this->loadModel($id);
        if (! Yii::app()->user->checkAccess('usuario_administrador')) {
            $modelUnidad = UnidadUsuario::model()->find('idusuario=:idusuario AND idunidad=:id_unidad', [':idusuario' => Yii::app()->user->id, ':id_unidad' => $model->id_unidad]);

            if (! $modelUnidad) {
                $this->redirect(['/prestamo/datosPreNominaCredito/view', 'id' => $model->id_prenomina_credito]);
            }
        }

        $detallePago = ProcesoPago::model()->find('id_proceso=:proceso AND actual=true', [':proceso' => $model->id]);

        $sql = 'select nombre_titulo,descripcion,count(id_tabla_amortizacion) cantidad_cuota,  sum(monto_capital) as capital , sum(monto_interes) as interes, sum(monto_cuota) as monto from prestamos.pre_nomina_tabla_amortizacion as a
                    JOIN prestamos.credito_tabla_amortizacion as b on a.id_tabla_amortizacion=  b.id
                    JOIN prestamos.credito as c on b.idcredito=c.id
                    JOIN prestamos.tipo_credito as d on c.id_tipo_credito=d.id
                    LEFT JOIN prestamos.titulo_tipo_credito as e on d.id_titulo_tipo_credito=e.id
                    where id_pre_nomina_credito = '.(int) $model->id_prenomina_credito.'
                    GROUP BY nombre_titulo,descripcion
                    ORDER by nombre_titulo, descripcion, count(id_tabla_amortizacion), sum(monto_cuota) ';
        $data = Yii::app()->db->createCommand($sql)->queryAll();

        $sql4 = 'SELECT nombre_titulo,d.descripcion, monto_prenomina,cantidad_cuota_prenomina,sum(monto_cuota_pagado) AS monto_pagado, count(id_tabla_amortizacion) cantidad_cuota, capital_pagado,interes_pagado,sum(monto_cobro) as monto_cobro, capital_cobro, interes_cobro,
                        sum(a.monto_remanente) as monto_remanente
                            FROM prestamos.datos_txt_tabla_amortizacion as a
                            JOIN prestamos.credito_tabla_amortizacion as b on a.id_tabla_amortizacion= b.id
                            JOIN prestamos.credito as c on b.idcredito=c.id
                            JOIN prestamos.tipo_credito as d on c.id_tipo_credito=d.id
                            LEFT JOIN prestamos.titulo_tipo_credito as e on d.id_titulo_tipo_credito=e.id
                            JOIN retenciones.datos_txt_integrado as f on a.id_txt=f.id
                            LEFT JOIN (
                                select id_pre_nomina_credito, id_tipo_credito,count(id_tabla_amortizacion) cantidad_cuota_prenomina,  sum(monto_cuota) as monto_prenomina,  sum(monto_capital) as capital_pagado , sum(monto_interes) as interes_pagado
                                from prestamos.pre_nomina_tabla_amortizacion as a
                                JOIN prestamos.credito_tabla_amortizacion as b on a.id_tabla_amortizacion=  b.id
                                JOIN prestamos.credito as c on b.idcredito=c.id
                                GROUP BY id_pre_nomina_credito,id_tipo_credito
                            ) as g ON f.id_prenomina_credito = g.id_pre_nomina_credito AND c.id_tipo_credito= g.id_tipo_credito
                            LEFT JOIN (
                                SELECT id_tipo_credito,id_pre_nomina_credito, sum(capital_cobro) AS capital_cobro, sum(interes_cobro) AS interes_cobro FROM prestamos.cobro_diferencial_cuota as cobro
                                JOIN prestamos.pre_nomina_tabla_amortizacion as pre ON cobro.id_proceso =pre.id_tabla_amortizacion
                                JOIN prestamos.credito_tabla_amortizacion as tabla on pre.id_tabla_amortizacion= tabla.id
                                JOIN prestamos.credito as cdt on tabla.idcredito=cdt.id
                                WHERE id_nombre_proceso = 2
                                GROUP BY cdt.id_tipo_credito,pre.id_pre_nomina_credito
                            ) AS cobro ON f.id_prenomina_credito = cobro.id_pre_nomina_credito AND c.id_tipo_credito= cobro.id_tipo_credito
                            WHERE id_txt='.$model->id.'
                            GROUP BY nombre_titulo,d.descripcion, monto_prenomina,cantidad_cuota_prenomina,capital_pagado,interes_pagado,capital_cobro, interes_cobro
                            ORDER by nombre_titulo, d.descripcion,
                            count(id_tabla_amortizacion), sum(monto_cuota)
                    ';
        $data4 = Yii::app()->db->createCommand($sql4)->queryAll();

        $sql5 = 'SELECT a.id_txt,sum(monto_cuota_pagado) AS total_pagos_conciliados, b.total_pagos_no_definidos, sum(monto_cobro) as total_monto_cobro, sum(a.monto_remanente) as total_monto_reembolso
                    FROM prestamos.datos_txt_tabla_amortizacion as a
                    LEFT JOIN (
                        SELECT id_txt, sum(monto_cuota) as total_pagos_no_definidos
                        FROM prestamos.datos_txt_tabla_amortizacion_diferido
                        WHERE blnborrado =false
                        GROUP BY id_txt
                                )as b ON a.id_txt  =b.id_txt
                    WHERE a.id_txt ='. $model->id.'
                    GROUP BY a.id_txt, total_pagos_no_definidos';
        $data5 = Yii::app()->db->createCommand($sql5)->queryAll();

        $filas = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'];

        $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']);

        $objPHPExcel = new PHPExcel();
        $objPHPExcel->getProperties()->setCreator('Roraima Software')
            ->setLastModifiedBy('Roraima Software')
            ->setTitle('Roraima Software')
            ->setSubject('Roraima Software')
            ->setDescription('Roraima Software')
            ->setKeywords('Roraima Software')
            ->setCategory('Roraima Software');

        $objPHPExcel->setActiveSheetIndex(0);

        $numtemo = 0;
        $objPHPExcel->getActiveSheet()->getStyle('A1:M1')->getFont()->setBold(true);                    //stylo
        $objPHPExcel->getActiveSheet()->getStyle('A1:M1')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
        foreach (range('A', 'Z') as $columnID) {
            $objPHPExcel->getActiveSheet()->getColumnDimension($columnID)->setAutoSize(true);
        }
        $objPHPExcel->setActiveSheetIndex(0)->mergeCells('A1:M1');
        $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].'1', 'Archivo de carga masiva '.$model->nombre_archivo);
        // $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].'1')->getFont()->setSize(20);

        for ($i = 2; $i <= 8; $i++) {
            $objPHPExcel->getActiveSheet()->getStyle('A'.$i)->getFont()->setBold(true);         //stylo
            $objPHPExcel->getActiveSheet()->getStyle('A'.$i)->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID);
            $objPHPExcel->getActiveSheet()->getStyle('A'.$i)->getFill()->getStartColor()->setARGB('1C336E');
            // $objPHPExcel->getActiveSheet()->getStyle('A'.$i)->getFont()->setSize(14);
            $objPHPExcel->getActiveSheet()->getStyle('A'.$i)->getFont()->getColor()->setARGB(PHPExcel_Style_Color::COLOR_WHITE);
            $objPHPExcel->getActiveSheet()->getStyle('A'.$i)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_LEFT);

            $objPHPExcel->getActiveSheet()->getStyle('B'.$i)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);
            // code...
        }
        $numtemo = 0;
        $numfila = 2;

        $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, 'Nombre del archivo');
        $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo + 1].$numfila, $model->nombre_archivo);
        $numfila++;

        $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, 'Descripción');
        $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo + 1].$numfila, $model->descripcion);
        $numfila++;

        $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, 'Fecha de registro');
        $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo + 1].$numfila, $model->fecha_registro != '' ? date('d-m-Y', strtotime($model->fecha_registro)) : '');
        $numfila++;

        $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, 'Monto cancelado');
        $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila)->getNumberFormat()->setFormatCode('#,##0.00');
        $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo + 1].$numfila, $model->total_aportes);
        $numfila++;

        $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, 'Cantidad de cuotas');
        $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo + 1].$numfila, $model->cant_aportantes);
        $numfila++;

        $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, 'Fecha del Aporte');
        $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo + 1].$numfila, $model->fecha_aporte != '' ? date('d-m-Y', strtotime($model->fecha_aporte)) : '');
        $numfila++;
        $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, 'Estatus');
        $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo + 1].$numfila, ($model->estatusTxtsIntegradosActual) ? $model->estatusTxtsIntegradosActual[0]->idEstatusTxt->nombre_estatus : '');
        $numfila++;
        $numfila += 2;

        /////////// inicio Información de la nómina de préstamo
        $objPHPExcel->setActiveSheetIndex(0)->mergeCells('A'.$numfila.':F'.$numfila);
        $objPHPExcel->getActiveSheet()->getStyle('A'.$numfila)->getFont()->setBold(true);                    //stylo
        $objPHPExcel->getActiveSheet()->getStyle('A'.$numfila)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
        // $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila)->getFont()->setSize(18);
        $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, 'Información de la nómina de préstamo ');

        $numfila++;
        $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila.':'.$filas[$numtemo + 5].$numfila)->getFont()->setBold(true);         //stylo
        $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila.':'.$filas[$numtemo + 5].$numfila)->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID);
        $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila.':'.$filas[$numtemo + 5].$numfila)->getFill()->getStartColor()->setARGB('1C336E');
        // $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila.':'.$filas[$numtemo+5].$numfila)->getFont()->setSize(14);
        $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila.':'.$filas[$numtemo + 5].$numfila)->getFont()->getColor()->setARGB(PHPExcel_Style_Color::COLOR_WHITE);
        $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila.':'.$filas[$numtemo + 5].$numfila)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_LEFT);
        // code...
        $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, 'Categoría del préstamo');
        $numtemo++;
        $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, 'Plazo');
        $numtemo++;
        $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, 'Cantidad de cuotas');
        $numtemo++;
        $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, 'Monto capital');
        $numtemo++;
        $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, 'Monto interes');
        $numtemo++;
        $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, 'Monto total');
        $numtemo++;

        $numtemo = 0;
        $numfila++;
        $monto = 0;
        $inicioTabla = $numfila;
        foreach ($data as $key => $value) {
            $numtemo = 0;
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, $value['nombre_titulo']);
            $numtemo++;
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, $value['descripcion']);
            $numtemo++;
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, $value['cantidad_cuota']);
            $numtemo++;
            $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila)->getNumberFormat()->setFormatCode('#,##0.00');
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, $value['capital']);
            $numtemo++;
            $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila)->getNumberFormat()->setFormatCode('#,##0.00');
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, $value['interes']);
            $numtemo++;
            $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila)->getNumberFormat()->setFormatCode('#,##0.00');
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, $value['monto']);
            $numtemo++;
            $numfila++;
        }

        $finTabla = $numfila;
        $numtemo = 0;
        $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila.':'.$filas[$numtemo + 5].$numfila)->getFont()->setBold(true);
        $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila.':'.$filas[$numtemo + 5].$numfila)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);

        $objPHPExcel->setActiveSheetIndex(0)->mergeCells($filas[$numtemo].$numfila.':'.$filas[$numtemo + 1].$numfila);
        $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);
        $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila)->getFont()->setBold(true);
        $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, 'Total');
        $numtemo += 2;
        $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, '=SUM('.$filas[$numtemo].$inicioTabla.':'.$filas[$numtemo].($numfila - 1).')');
        $numtemo++;
        $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila)->getNumberFormat()->setFormatCode('#,##0.00');
        $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, '=SUM('.$filas[$numtemo].$inicioTabla.':'.$filas[$numtemo].($numfila - 1).')');
        $numtemo++;
        $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila)->getNumberFormat()->setFormatCode('#,##0.00');
        $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, '=SUM('.$filas[$numtemo].$inicioTabla.':'.$filas[$numtemo].($numfila - 1).')');
        $numtemo++;
        $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila)->getNumberFormat()->setFormatCode('#,##0.00');
        $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, '=SUM('.$filas[$numtemo].$inicioTabla.':'.$filas[$numtemo].($numfila - 1).')');
        $numtemo++;
        /////////// fin Información de la nómina de préstamo

        /////////// Información de la nómina de conciliada
        $numfila += 3;
        $numtemo = 0;
        $objPHPExcel->setActiveSheetIndex(0)->mergeCells('A'.$numfila.':H'.$numfila);
        $objPHPExcel->getActiveSheet()->getStyle('A'.$numfila)->getFont()->setBold(true);                    //stylo
        $objPHPExcel->getActiveSheet()->getStyle('A'.$numfila)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
        $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, 'Información de la nómina de conciliada');

        $numfila++;
        $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila.':'.$filas[$numtemo + 3].$numfila)->getFont()->setBold(true);         //stylo
        $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila.':'.$filas[$numtemo + 3].$numfila)->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID);
        $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila.':'.$filas[$numtemo + 3].$numfila)->getFill()->getStartColor()->setARGB('1C336E');
        $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila.':'.$filas[$numtemo + 3].$numfila)->getFont()->getColor()->setARGB(PHPExcel_Style_Color::COLOR_WHITE);
        $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila.':'.$filas[$numtemo + 3].$numfila)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_LEFT);
        $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, 'Pagos conciliados');
        $numtemo++;
        $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, 'Pagos no definidos');
        $numtemo++;
        $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, ' Monto a cobro');
        $numtemo++;
        $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, 'Monto a reembolso');
        $numtemo++;

        $numfila++;
        $numtemo = 0;
        foreach ($data5 as $key => $value) {
            $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila)->getNumberFormat()->setFormatCode('#,##0.00');
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, $value['total_pagos_conciliados']);
            $numtemo++;
            $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila)->getNumberFormat()->setFormatCode('#,##0.00');
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, $value['total_pagos_no_definidos']);
            $numtemo++;
            $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila)->getNumberFormat()->setFormatCode('#,##0.00');
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, (($value['total_monto_cobro'] != '') ? $value['total_monto_cobro'] : 0));
            $numtemo++;
            $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila)->getNumberFormat()->setFormatCode('#,##0.00');
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, $value['total_monto_reembolso']);
            $numtemo++;
        }

        $numtemo = 0;
        $numfila += 2;
        $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila.':'.$filas[$numtemo + 7].$numfila)->getFont()->setBold(true);         //stylo
        $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila.':'.$filas[$numtemo + 7].$numfila)->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID);
        $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila.':'.$filas[$numtemo + 7].$numfila)->getFill()->getStartColor()->setARGB('1C336E');
        $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila.':'.$filas[$numtemo + 7].$numfila)->getFont()->getColor()->setARGB(PHPExcel_Style_Color::COLOR_WHITE);
        $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila.':'.$filas[$numtemo + 7].$numfila)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_LEFT);

        $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, 'Categoría del préstamo');
        $numtemo++;
        $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, 'Plazo');
        $numtemo++;
        $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, 'Monto prénomina');
        $numtemo++;
        $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, 'Cuotas prénomina');
        $numtemo++;
        $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, 'Monto cargado');
        $numtemo++;
        $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, 'Cuotas nomina');
        $numtemo++;
        $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, 'Monto por cobro');
        $numtemo++;
        $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, 'Monto por gestión de reembolso');
        $numtemo++;

        $numtemo = 0;
        $numfila++;
        $monto = 0;
        $inicioTablaCocniliada = $numfila;
        foreach ($data4 as $key => $value) {
            $numtemo = 0;
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, $value['nombre_titulo']);
            $numtemo++;
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, $value['descripcion']);
            $numtemo++;
            $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila)->getNumberFormat()->setFormatCode('#,##0.00');
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, $value['monto_prenomina'] != '' ? $value['monto_prenomina'] : 0);
            $numtemo++;
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, $value['cantidad_cuota_prenomina'] != '' ? $value['cantidad_cuota_prenomina'] : 0);
            $numtemo++;

            $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila)->getNumberFormat()->setFormatCode('#,##0.00');
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, $value['monto_pagado'] != '' ? $value['monto_pagado'] : 0);
            $numtemo++;
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, $value['cantidad_cuota'] != '' ? $value['cantidad_cuota'] : 0);
            $numtemo++;

            $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila)->getNumberFormat()->setFormatCode('#,##0.00');
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, $value['monto_cobro'] != '' ? $value['monto_cobro'] : 0);
            $numtemo++;
            $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila)->getNumberFormat()->setFormatCode('#,##0.00');
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, $value['monto_remanente'] != '' ? $value['monto_remanente'] : 0);
            $numtemo++;
            $numfila++;
        }
        $numtemo = 0;
        $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila.':'.$filas[$numtemo + 7].$numfila)->getFont()->setBold(true);
        $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila.':'.$filas[$numtemo + 7].$numfila)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);

        $objPHPExcel->setActiveSheetIndex(0)->mergeCells($filas[$numtemo].$numfila.':'.$filas[$numtemo + 1].$numfila);
        $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);
        $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila)->getFont()->setBold(true);
        $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, 'Total');
        $numtemo += 2;

        if (count($data4) > 0) {
            $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila)->getNumberFormat()->setFormatCode('#,##0.00');
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, '=SUM('.$filas[$numtemo].$inicioTablaCocniliada.':'.$filas[$numtemo].($numfila - 1).')');
            $numtemo++;
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, '=SUM('.$filas[$numtemo].$inicioTablaCocniliada.':'.$filas[$numtemo].($numfila - 1).')');
            $numtemo++;
            $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila)->getNumberFormat()->setFormatCode('#,##0.00');
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, '=SUM('.$filas[$numtemo].$inicioTablaCocniliada.':'.$filas[$numtemo].($numfila - 1).')');
            $numtemo++;
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, '=SUM('.$filas[$numtemo].$inicioTablaCocniliada.':'.$filas[$numtemo].($numfila - 1).')');
            $numtemo++;
            $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila)->getNumberFormat()->setFormatCode('#,##0.00');
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, '=SUM('.$filas[$numtemo].$inicioTablaCocniliada.':'.$filas[$numtemo].($numfila - 1).')');
            $numtemo++;
            $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila)->getNumberFormat()->setFormatCode('#,##0.00');
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, '=SUM('.$filas[$numtemo].$inicioTablaCocniliada.':'.$filas[$numtemo].($numfila - 1).')');
            $numtemo++;
        }
        /////////// fin Información de la nómina de conciliada

        $numtemo = 0;
        $numfila += 2;
        $inicioPagosCargados = $numfila;
        $objPHPExcel->setActiveSheetIndex(0)->mergeCells('A'.$numfila.':K'.$numfila);
        $objPHPExcel->getActiveSheet()->getStyle('A'.$numfila)->getFont()->setBold(true);
        $objPHPExcel->getActiveSheet()->getStyle('A'.$numfila)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
        $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, 'Pagos conciliados');
        $numfila++;

        $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila.':'.$filas[$numtemo + 16].$numfila)->getFont()->setBold(true);
        $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila.':'.$filas[$numtemo + 16].$numfila)->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID);
        $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila.':'.$filas[$numtemo + 16].$numfila)->getFill()->getStartColor()->setARGB('1C336E');
        $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila.':'.$filas[$numtemo + 16].$numfila)->getFont()->getColor()->setARGB(PHPExcel_Style_Color::COLOR_WHITE);
        $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila.':'.$filas[$numtemo + 16].$numfila)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
        $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, 'Cédula');
        $numtemo++;
        $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, 'Nombres y Apellidos');
        $numtemo++;
        $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, 'Unidad');
        $numtemo++;
        $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, 'Tipo de préstamo');
        $numtemo++;
        $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, 'Plazo del préstamo');
        $numtemo++;
        $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, 'Fecha de vecimiento');
        $numtemo++;
        $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, 'Número de la cuota');
        $numtemo++;
        $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, 'Cuota préstamo');
        $numtemo++;
        $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, 'Cuota cargada');
        $numtemo++;
        $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, 'Monto pendiente');
        $numtemo++;
        $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, 'Monto remanente');
        $numtemo++;
        $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, 'Monto pagado');
        $numtemo++;
        $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, 'Capital recuperado');
        $numtemo++;
        $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, 'Interés recuperado');
        $numtemo++;
        $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, 'Capital pendiente');
        $numtemo++;
        $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, 'Interés pendiente');
        $numtemo++;
        $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, 'Estatus diferencial');
        $numtemo++;
        $principioTablaPagos = $numfila + 1;

        $analisisCapitalRecuperadoAsociados = (new AnalisisCapitalRecuperado($model))->asociados();
        foreach ($analisisCapitalRecuperadoAsociados as $asociado) {
            $numfila++;
            $numtemo = 0;
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, $asociado['cedula']);
            $numtemo++;
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, $asociado['nombre']);
            $numtemo++;
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, $asociado['unidad']);
            $numtemo++;
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, $asociado['categoria']);
            $numtemo++;
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, $asociado['plazo']);
            $numtemo++;
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, Yii::app()->format->date($asociado['fecha_vencimiento']));
            $numtemo++;
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, $asociado['numero_cuota']);
            $numtemo++;
            $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila)->getNumberFormat()->setFormatCode('#,##0.00');
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, $asociado['monto_cuota']);
            $numtemo++;
            $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila)->getNumberFormat()->setFormatCode('#,##0.00');
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, $asociado['monto_cuota_cargada']);
            $numtemo++;
            $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila)->getNumberFormat()->setFormatCode('#,##0.00');
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, $asociado['monto_pendiente']);
            $numtemo++;
            $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila)->getNumberFormat()->setFormatCode('#,##0.00');
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, $asociado['monto_remanente']);
            $numtemo++;
            $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila)->getNumberFormat()->setFormatCode('#,##0.00');
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, $asociado['monto_pagado']);
            $numtemo++;
            $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila)->getNumberFormat()->setFormatCode('#,##0.00');
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, $asociado['capital_recuperado']);
            $numtemo++;
            $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila)->getNumberFormat()->setFormatCode('#,##0.00');
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, $asociado['interes_recuperado']);
            $numtemo++;
            $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila)->getNumberFormat()->setFormatCode('#,##0.00');
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, $asociado['capital_pendiente']);
            $numtemo++;
            $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila)->getNumberFormat()->setFormatCode('#,##0.00');
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, $asociado['interes_pendiente']);
            $numtemo++;
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, $asociado['estatus']);
            $numtemo++;
        }
        $numfila++;
        $numtemo = 0;
        $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila.':'.$filas[$numtemo + 15].$numfila)->getFont()->setBold(true);
        $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila.':'.$filas[$numtemo + 15].$numfila)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);

        $objPHPExcel->setActiveSheetIndex(0)->mergeCells($filas[$numtemo].$numfila.':'.$filas[$numtemo + 5].$numfila);
        $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);
        $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila)->getFont()->setBold(true);
        $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, 'Total');
        $numtemo += 6;

        if (count($analisisCapitalRecuperadoAsociados) > 0) {
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, '=SUM('.$filas[$numtemo].$principioTablaPagos.':'.$filas[$numtemo].($numfila - 1).')');
            $numtemo++;
            $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila)->getNumberFormat()->setFormatCode('#,##0.00');
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, '=SUM('.$filas[$numtemo].$principioTablaPagos.':'.$filas[$numtemo].($numfila - 1).')');
            $numtemo++;
            $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila)->getNumberFormat()->setFormatCode('#,##0.00');
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, '=SUM('.$filas[$numtemo].$principioTablaPagos.':'.$filas[$numtemo].($numfila - 1).')');
            $numtemo++;
            $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila)->getNumberFormat()->setFormatCode('#,##0.00');
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, '=SUM('.$filas[$numtemo].$principioTablaPagos.':'.$filas[$numtemo].($numfila - 1).')');
            $numtemo++;
            $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila)->getNumberFormat()->setFormatCode('#,##0.00');
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, '=SUM('.$filas[$numtemo].$principioTablaPagos.':'.$filas[$numtemo].($numfila - 1).')');
            $numtemo++;
            $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila)->getNumberFormat()->setFormatCode('#,##0.00');
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, '=SUM('.$filas[$numtemo].$principioTablaPagos.':'.$filas[$numtemo].($numfila - 1).')');
            $numtemo++;
            $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila)->getNumberFormat()->setFormatCode('#,##0.00');
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, '=SUM('.$filas[$numtemo].$principioTablaPagos.':'.$filas[$numtemo].($numfila - 1).')');
            $numtemo++;
            $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila)->getNumberFormat()->setFormatCode('#,##0.00');
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, '=SUM('.$filas[$numtemo].$principioTablaPagos.':'.$filas[$numtemo].($numfila - 1).')');
            $numtemo++;
            $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila)->getNumberFormat()->setFormatCode('#,##0.00');
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, '=SUM('.$filas[$numtemo].$principioTablaPagos.':'.$filas[$numtemo].($numfila - 1).')');
            $numtemo++;
            $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila)->getNumberFormat()->setFormatCode('#,##0.00');
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, '=SUM('.$filas[$numtemo].$principioTablaPagos.':'.$filas[$numtemo].($numfila - 1).')');
            $numtemo++;
        }
        //fin pagos cargados

        ///Retenciones de prestamos sin definir
        $numtemo = 0;
        $numfila += 2;
        $inicioPagosCargados = $numfila;
        $objPHPExcel->setActiveSheetIndex(0)->mergeCells('A'.$numfila.':E'.$numfila);
        $objPHPExcel->getActiveSheet()->getStyle('A'.$numfila)->getFont()->setBold(true);                    //stylo
        $objPHPExcel->getActiveSheet()->getStyle('A'.$numfila)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
        $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, 'Retenciones de préstamos sin definir');
        $numfila++;

        $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila.':'.$filas[$numtemo + 4].$numfila)->getFont()->setBold(true);         //stylo
        $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila.':'.$filas[$numtemo + 4].$numfila)->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID);
        $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila.':'.$filas[$numtemo + 4].$numfila)->getFill()->getStartColor()->setARGB('1C336E');
        $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila.':'.$filas[$numtemo + 4].$numfila)->getFont()->getColor()->setARGB(PHPExcel_Style_Color::COLOR_WHITE);
        $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila.':'.$filas[$numtemo + 4].$numfila)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
        $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, 'Cédula');
        $numtemo++;
        $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, 'Monto Cuota');
        $numtemo++;
        $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, 'Monto conciliado');
        $numtemo++;
        $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, 'Tipo de cuota');
        $numtemo++;
        $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, 'Estatus');
        $numtemo++;
        $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, 'Observaciones');
        $numtemo++;
        $principioTablaPagos = $numfila;
        foreach ($model->detalleNominaDiferido as $key => $value) {
            $numfila++;
            $numtemo = 0;
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, $value->cedula);
            $numtemo++;
            $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila)->getNumberFormat()->setFormatCode('#,##0.00');
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, $value->monto_cuota != '' ? $value->monto_cuota : 0);
            $numtemo++;
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, $value->monto_conciliado);
            $numtemo++;
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, $value->tipo_cuota);
            $numtemo++;
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, (isset($value->idEstatusAmoritzacionDiferida)) ? $value->idEstatusAmoritzacionDiferida->nombre_estatus : '');
            $numtemo++;
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, $value->observaciones);
            $numtemo++;
        }

        if ($numfila > $principioTablaPagos) {
            $numfila++;
            $numtemo = 0;
            $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila.':'.$filas[$numtemo].($numfila + 1))->getFont()->setBold(true);         //stylo
            $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila.':'.$filas[$numtemo].($numfila + 1))->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);
            $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);
            $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila)->getFont()->setBold(true);
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, 'Total');
            $numtemo += 2;
            $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila)->getNumberFormat()->setFormatCode('#,##0.00');
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, '=SUM('.$filas[$numtemo].$principioTablaPagos.':'.$filas[$numtemo].($numfila - 1).')');
            $numtemo++;
        }
        //fin pagos cargados

        ///fin Retenciones de prestamos sin definir

        ///Cuotas excluidas
        $numtemo = 0;
        $numfila += 2;
        $inicioPagosCargados = $numfila;
        $objPHPExcel->setActiveSheetIndex(0)->mergeCells('A'.$numfila.':G'.$numfila);
        $objPHPExcel->getActiveSheet()->getStyle('A'.$numfila)->getFont()->setBold(true);                    //stylo
        $objPHPExcel->getActiveSheet()->getStyle('A'.$numfila)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
        $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, 'Cuotas excluidas');
        $numfila++;

        $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila.':'.$filas[$numtemo + 8].$numfila)->getFont()->setBold(true);         //stylo
        $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila.':'.$filas[$numtemo + 8].$numfila)->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID);
        $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila.':'.$filas[$numtemo + 8].$numfila)->getFill()->getStartColor()->setARGB('1C336E');
        $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila.':'.$filas[$numtemo + 8].$numfila)->getFont()->getColor()->setARGB(PHPExcel_Style_Color::COLOR_WHITE);
        $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila.':'.$filas[$numtemo + 8].$numfila)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
        $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, 'Cédula');
        $numtemo++;
        $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, 'Unidad');
        $numtemo++;
        $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, 'Tipo de préstamo');
        $numtemo++;
        $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, 'Plazo del préstamo');
        $numtemo++;
        $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, 'Monto capital');
        $numtemo++;
        $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, 'Monto interés');
        $numtemo++;
        $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, 'Monto de la cuota');
        $numtemo++;
        $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, 'Estatus');
        $numtemo++;
        $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, 'Observaciones');
        $numtemo++;
        $principioTablaPagos = $numfila;
        foreach (PreNominaTablaAmortizacion::model()->searchCuitaExcluidaView($model->id_prenomina_credito) as $key => $value) {
            $numfila++;
            $numtemo = 0;
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, $value->cedula);
            $numtemo++;
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, $value->nombre_unidad);
            $numtemo++;
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, $value->nombre_titulo);
            $numtemo++;
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, $value->tipo_credito);
            $numtemo++;
            $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila)->getNumberFormat()->setFormatCode('#,##0.00');
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, $value->monto_cuota != '' ? $value->monto_capital : 0);
            $numtemo++;
            $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila)->getNumberFormat()->setFormatCode('#,##0.00');
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, $value->monto_cuota != '' ? $value->monto_interes : 0);
            $numtemo++;
            $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila)->getNumberFormat()->setFormatCode('#,##0.00');
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, $value->monto_cuota != '' ? $value->monto_cuota : 0);
            $numtemo++;
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, $value->nombre_estatus);
            $numtemo++;
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, $value->observaciones);
            $numtemo++;
        }
        if ($numfila > $principioTablaPagos) {
            $numfila++;
            $numtemo = 0;
            $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila.':'.$filas[$numtemo + 6].$numfila)->getFont()->setBold(true);         //stylo
            $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila.':'.$filas[$numtemo + 6].$numfila)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);
            $objPHPExcel->setActiveSheetIndex(0)->mergeCells($filas[$numtemo].$numfila.':'.$filas[$numtemo + 3].$numfila);
            $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);
            $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila)->getFont()->setBold(true);
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, 'Total');
            $numtemo += 4;
            $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila)->getNumberFormat()->setFormatCode('#,##0.00');
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, '=SUM('.$filas[$numtemo].$principioTablaPagos.':'.$filas[$numtemo].($numfila - 1).')');
            $numtemo++;
            $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila)->getNumberFormat()->setFormatCode('#,##0.00');
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, '=SUM('.$filas[$numtemo].$principioTablaPagos.':'.$filas[$numtemo].($numfila - 1).')');
            $numtemo++;
            $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila)->getNumberFormat()->setFormatCode('#,##0.00');
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, '=SUM('.$filas[$numtemo].$principioTablaPagos.':'.$filas[$numtemo].($numfila - 1).')');
            $numtemo++;
        }
        ///fin Retenciones de pr&eacute;stamos sin definir

        if (! empty($detalle)) {
            $numtemo = 0;
            $numtemo++;
            $objPHPExcel->setActiveSheetIndex(0)->mergeCells('A'.$numfila.':M'.$numfila);
            $objPHPExcel->getActiveSheet()->getStyle('A'.$numfila)->getFont()->setBold(true);                    //stylo
            $objPHPExcel->getActiveSheet()->getStyle('A'.$numfila)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, 'Detalle del pago');
            $numfila++;

            $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila.':'.$filas[$numtemo + 5].$numfila)->getFont()->setBold(true);         //stylo
            $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila.':'.$filas[$numtemo + 5].$numfila)->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID);
            $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila.':'.$filas[$numtemo + 5].$numfila)->getFill()->getStartColor()->setARGB('1C336E');
            $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila.':'.$filas[$numtemo + 5].$numfila)->getFont()->getColor()->setARGB(PHPExcel_Style_Color::COLOR_WHITE);
            $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila.':'.$filas[$numtemo + 5].$numfila)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);

            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, 'Fecha del pago');
            $numtemo++;
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, 'Banco origen');
            $numtemo++;
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, 'Cuenta origen');
            $numtemo++;
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, 'Referencia del pago');
            $numtemo++;
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, 'Monto pagado');
            $numtemo++;
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, 'Observación');
            $numtemo++;

            $numtemo = 0;
            $numtemo++;
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, date('d-m-Y', strtotime($detalle->fecha_pago)));
            $numtemo++;
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, $detalle->banco_desc->banco);
            $numtemo++;
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, $detalle->banco_desc->num_cuenta);
            $numtemo++;
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, $detalle->referencia);
            $numtemo++;
            $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila)->getNumberFormat()->setFormatCode('#,##0.00');
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, $value->monto_pagado != '' ? $value->monto_pagado : 0);
            $numtemo++;
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, $detalle->observacion);
            $numtemo++;
        }

        $objPHPExcel->setActiveSheetIndex(0);

        header('Content-Type: application/vnd.ms-excel');
        header('Content-Disposition: attachment;filename="Vista del Archivo '.$model->nombre_archivo.'.xls"');
        // header('Cache-Control: max-age=0');

        // $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
        // $objWriter->save('php://output');
        // flush();ob_flush();flush();ob_flush();

        // header('Content-type: application/vnd.ms-excel');
        // header('Content-Disposition: attachment; filename="Archivo de aportes ordinarios faltantes ('.$datos[1]['nombre_archivo'].').xlsx"');

        $objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel);
        $objWriter->setOffice2003Compatibility(true);
        $objWriter->save('php://output');

        exit;
    }

  public function actionViewMp($id)
  {
            $model=$this->loadModel($id);
            $modelSolicitudes=  SolicitudMp::model()->with('txtPrenominaMps')->find('id_txt_nomina=:itn',array('itn'=>$id));
            $modelAportes= new AporteMontePio('search');//AporteVoluntario::model()->findAll('id_txt_integrado=:id',array(':id'=>$model->id));
            $modelAportesDiferidos= new AporteVoluntarioDiferido('search'); //AporteVoluntarioDiferido::model()->findAll('id_txt=:id',array(':id'=>$model->id));
            if(isset($_GET['NominaMp']))
      $modelAportes->attributes=$_GET['NominaMp'];
            if(isset($_GET['AporteVoluntarioDiferido']))
      $modelAportesDiferidos->attributes=$_GET['AporteVoluntarioDiferido'];
            $this->render('view_mp',array(
      'model'=>$model,
                        'modelAportes'=>$modelAportes,
                        'modelAportesDiferidos'=>$modelAportesDiferidos,
                        'modelSolicitudes'=>$modelSolicitudes,
    ));
  }

    public function actionViewCmao($id)
    {
        $model = $this->loadModel($id);
        $modelAportes = new AporteOrdinario('search');
        $modelAportesDiferidos = new AporteOrdinarioDiferido('search');

        $aportesCeroPatrono = AporteOrdinario::model()->count('id_txt=:id AND COALESCE(aporte_patrono,0)=0 AND blnborrado=FALSE', [':id' => $model->id]);
        $aportesCeroSocio = AporteOrdinario::model()->count('id_txt=:id AND COALESCE(aporte_asociado,0)=0  AND blnborrado=FALSE', [':id' => $model->id]);
        $aportesCero = AporteOrdinario::model()->count('id_txt=:id AND (COALESCE(aporte_asociado,0)=0 AND COALESCE(aporte_patrono,0)=0)AND blnborrado=FALSE', [':id' => $model->id]);

        $totalAportantes = AporteOrdinario::model()->count('id_txt=:id  AND  blnborrado=FALSE AND COALESCE(id_estatus_aporte,0)!=4', [':id' => $model->id]);
        $totalMontoAporteActivo = AporteOrdinario::model()->find([
            'select' => ' sum (aporte_patrono) as aporte_patrono, sum (aporte_asociado) as aporte_asociado',
            'condition' => 'id_txt=:id  AND  blnborrado=FALSE AND COALESCE(id_estatus_aporte,0)!=4',
            'params' => [':id' => $model->id],
        ]);
        $modelAportesLiquidados = AporteOrdinarioDiferido::model()->count('id_txt=:id AND id_estatus_aod =5 AND  blnborrado=FALSE', [':id' => $model->id]);
        $totalMontoAporteLiquidados = AporteOrdinarioDiferido::model()->find([
            'select' => ' sum (aporte_patrono) as aporte_patrono, sum (aporte_asociado) as aporte_asociado',
            'condition' => 'id_txt=:id AND id_estatus_aod =5 AND  blnborrado=FALSE',
            'params' => [':id' => $model->id],
        ]);

        $modelAportesTotalDiferidos = AporteOrdinarioDiferido::model()->count('id_txt=:id AND id_estatus_aod !=5 AND  blnborrado=FALSE', [':id' => $model->id]);
        $totalMontoAporteDiferidos = AporteOrdinarioDiferido::model()->find([
            'select' => ' sum (aporte_patrono) as aporte_patrono, sum (aporte_asociado) as aporte_asociado',
            'condition' => 'id_txt=:id AND id_estatus_aod !=5 AND  blnborrado=FALSE',
            'params' => [':id' => $model->id],
        ]);

        $detallePago = ProcesoPago::model()->find('id_proceso=:proceso AND actual=true and id_nombre_proceso=6', [':proceso' => $model->id]);

        $modelAporteOrdinarioDiferido = new AporteOrdinarioDiferido('asociado_cmao');

        $modelAsociado = new Asociado('sin_validacion');

        if (isset($_GET['AporteOrdinario'])) {
            $modelAportes->attributes = $_GET['AporteOrdinario'];
            $modelAportes->nombre_completo = $_GET['AporteOrdinario']['nombre_completo'];
        }

        if (isset($_GET['AporteOrdinarioDiferido'])) {
            $modelAportesDiferidos->attributes = $_GET['AporteOrdinarioDiferido'];
        }

        $this->render('view_cmao', [
            'model' => $model,
            'modelAportes' => $modelAportes,
            'modelAportesDiferidos' => $modelAportesDiferidos,
            'aportesCeroPatrono' => $aportesCeroPatrono,
            'aportesCeroSocio' => $aportesCeroSocio,
            'aportesCero' => $aportesCero,
            'totalAportantes' => $totalAportantes,
            'totalMontoAporteActivo' => $totalMontoAporteActivo,
            'modelAportesLiquidados' => $modelAportesLiquidados,
            'totalMontoAporteLiquidados' => $totalMontoAporteLiquidados,
            'modelAportesTotalDiferidos' => $modelAportesTotalDiferidos,
            'totalMontoAporteDiferidos' => $totalMontoAporteDiferidos,
            'detalle' => $detallePago,
            'resumenPago' => DatosTxtIntegrado::resumenPago($id),
            'modelAporteOrdinarioDiferido' => $modelAporteOrdinarioDiferido,
            'modelAsociado' => $modelAsociado,
        ]);
    }

  public function actionViewCmaof($id)
  {

            $model=$this->loadModel($id);
            $aportesCeroPatrono= AporteOrdinario::model()->count('id_txt=:id AND COALESCE(aporte_patrono,0)=0 AND blnborrado=FALSE and COALESCE(aporte_asociado,0)=0 and COALESCE(id_estatus_aporte,0)!=4',array(':id'=>$model->id));
            $aportesCeroSocio= AporteOrdinario::model()->count('id_txt=:id AND COALESCE(aporte_asociado,0)=0  AND blnborrado=FALSE and COALESCE(aporte_asociado,0)=0 and COALESCE(id_estatus_aporte,0)!=4',array(':id'=>$model->id));
            $aportesCero= AporteOrdinario::model()->count('id_txt=:id AND (COALESCE(aporte_asociado,0)=0 AND COALESCE(aporte_patrono,0)=0)AND blnborrado=FALSE and COALESCE(aporte_asociado,0)=0 and COALESCE(id_estatus_aporte,0)!=4',array(':id'=>$model->id));
            $sql=' SELECT sum(monto_pagado) as monto_pagado
                    FROM "comprobante_pago" "t"
                    LEFT OUTER JOIN "retenciones"."comprobante_pago_datos_txt_integrado" "datosTextIntegrado" ON ("datosTextIntegrado"."id_comprobante_pago"="t"."id")
                     WHERE (id_txt=:id) ';
            $aportesComprobante = ComprobantePago::model()->with('datosTextIntegrado')->findBysql($sql,array(':id'=>$model->id));
            $modelAportes= new AporteOrdinario('search');//AporteVoluntario::model()->findAll('id_txt_integrado=:id',array(':id'=>$model->id));
            $modelAportesDiferidos= new AporteOrdinarioDiferido('search'); //AporteVoluntarioDiferido::model()->findAll('id_txt=:id',array(':id'=>$model->id));

            $totalAportantes= AporteOrdinario::model()->count('id_txt=:id  AND  blnborrado=FALSE AND COALESCE(id_estatus_aporte,0)!=4',array(':id'=>$model->id));
            $totalMontoAporteActivo= AporteOrdinario::model()->find(array(
                                                                        'select'=>' sum (aporte_patrono) as aporte_patrono, sum (aporte_asociado) as aporte_asociado',
                                                                        'condition'=>'id_txt=:id  AND  blnborrado=FALSE AND COALESCE(id_estatus_aporte,0)!=4',
                                                                        'params'=>array(':id'=>$model->id)));
            $modelAportesLiquidados= AporteOrdinarioDiferido::model()->count('id_txt=:id AND id_estatus_aod =5 AND  blnborrado=FALSE',
                                                                                    array(':id'=>$model->id)); //AporteVoluntarioDiferido::model()->findAll('id_txt=:id',array(':id'=>$model->id));
            $totalMontoAporteLiquidados= AporteOrdinarioDiferido::model()->find(array(
                                                                        'select'=>' sum (aporte_patrono) as aporte_patrono, sum (aporte_asociado) as aporte_asociado',
                                                                        'condition'=>'id_txt=:id AND id_estatus_aod =5 AND  blnborrado=FALSE',
                                                                        'params'=>array(':id'=>$model->id)));

            $modelAportesTotalDiferidos= AporteOrdinarioDiferido::model()->count('id_txt=:id AND id_estatus_aod !=5 AND  blnborrado=FALSE',
                                                                                    array(':id'=>$model->id)); //AporteVoluntarioDiferido::model()->findAll('id_txt=:id',array(':id'=>$model->id));
            $totalMontoAporteDiferidos= AporteOrdinarioDiferido::model()->find(array(
                                                                        'select'=>' sum (aporte_patrono) as aporte_patrono, sum (aporte_asociado) as aporte_asociado',
                                                                        'condition'=>'id_txt=:id AND id_estatus_aod !=5 AND  blnborrado=FALSE',
                                                                        'params'=>array(':id'=>$model->id)));

            $detallePago = ProcesoPago::model()->find('id_proceso=:proceso AND actual=true', array(':proceso'=>$model->id));

            if (empty($detallePago)) {

                empty($detallePago);
            }


            if(isset($_GET['AporteOrdinario']))
                $modelAportes->attributes=$_GET['AporteOrdinario'];

            $this->render('view_cmaof',array(
      'model'=>$model,
                        'modelAportes'=>$modelAportes,
                        'aportesCeroPatrono'=>$aportesCeroPatrono,
                        'aportesCeroSocio'=>$aportesCeroSocio,
                        'aportesCero'=>$aportesCero,
                        'aportesComprobante'=>$aportesComprobante,
                        'totalAportantes'=>$totalAportantes,
                        'totalMontoAporteActivo'=>$totalMontoAporteActivo,
                        'modelAportesLiquidados'=>$modelAportesLiquidados,
                        'totalMontoAporteLiquidados'=>$totalMontoAporteLiquidados,
                        'modelAportesTotalDiferidos'=>$modelAportesTotalDiferidos,
                        'totalMontoAporteDiferidos'=>$totalMontoAporteDiferidos,
                        'detalle'=>$detallePago,
    ));
  }
  public function actionReporteCmaof($id)
  {
      $model=$this->loadModel($id);
            $aportesCeroPatrono= AporteOrdinario::model()->count('id_txt=:id AND COALESCE(aporte_patrono,0)=0 AND blnborrado=FALSE and COALESCE(aporte_asociado,0)=0 and COALESCE(id_estatus_aporte,0)!=4',array(':id'=>$model->id));
            $aportesCeroSocio= AporteOrdinario::model()->count('id_txt=:id AND COALESCE(aporte_asociado,0)=0  AND blnborrado=FALSE and COALESCE(aporte_asociado,0)=0 and COALESCE(id_estatus_aporte,0)!=4',array(':id'=>$model->id));
            $aportesCero= AporteOrdinario::model()->count('id_txt=:id AND (COALESCE(aporte_asociado,0)=0 AND COALESCE(aporte_patrono,0)=0)AND blnborrado=FALSE and COALESCE(aporte_asociado,0)=0 and COALESCE(id_estatus_aporte,0)!=4',array(':id'=>$model->id));
            $sql=' SELECT sum(monto_pagado) as monto_pagado
                    FROM "comprobante_pago" "t"
                    LEFT OUTER JOIN "retenciones"."comprobante_pago_datos_txt_integrado" "datosTextIntegrado" ON ("datosTextIntegrado"."id_comprobante_pago"="t"."id")
                     WHERE (id_txt=:id) ';
      $aportesComprobante = ComprobantePago::model()->with('datosTextIntegrado')->findBysql($sql,array(':id'=>$model->id));
      yii::app()->request->sendFile("reporteAporteFaltante.xls",
        $this->renderPartial('reporteCmaof',array(
                        'model'=>$model,
                        'aportesCeroPatrono'=>$aportesCeroPatrono,
                        'aportesCeroSocio'=>$aportesCeroSocio,
                        'aportesCero'=>$aportesCero,
                        'aportesComprobante'=>$aportesComprobante,
        ), true)
        );
  }



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

                if (!Yii::app()->user->checkAccess('usuario_administrador') ){
                $modelUnidad = UnidadUsuario::model()->find('idusuario=:idusuario AND idunidad=:id_unidad',array(':idusuario'=>Yii::app()->user->id,':id_unidad'=>$model->id_unidad));

                if(!$modelUnidad){
                    $this->redirect(array('/prestamo/datosPreNominaCredito/view','id' =>$model->id_prenomina_credito));
                }

            }

                $modelFaltantes=new AportantesExcuidos('search');
    $modelFaltantes->unsetAttributes();  // clear any default values
    if(isset($_GET['AportantesExcuidos']))
      $modelFaltantes->attributes=$_GET['AportantesExcuidos'];

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

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

      if (!Yii::app()->user->checkAccess('usuario_administrador') ){
        $modelUnidad = UnidadUsuario::model()->find('idusuario=:idusuario AND id_unidad=:id_unidad',array(':idusuario'=>Yii::app()->user->id,':id_unidad'=>$model->id_unidad));

        if(!$modelUnidad){
            $this->redirect(array('/prestamo/datosPreNominaCredito/view','id' =>$model->id_prenomina_credito));
        }

      }

    $modelCPR=new PreNominaTablaAmortizacion('search');
    $modelCPR->unsetAttributes();  // clear any default values
    if(isset($_GET['PreNominaTablaAmortizacion']))
      $modelCPR->attributes=$_GET['PreNominaTablaAmortizacion'];


    $sql='SELECT nombre_titulo,tc.descripcion,count(txt.id) cantidad_cuota, sum(monto_cuota) as monto_cuota
          FROM retenciones.datos_txt_integrado as txt
          JOIN prestamos.pre_nomina_tabla_amortizacion as pnm ON txt.id_prenomina_credito = pnm.id_pre_nomina_credito
          JOIN prestamos.credito_tabla_amortizacion as tabla on pnm.id_tabla_amortizacion=tabla.id
          JOIN prestamos.credito as crd on tabla.idcredito=crd.id
          JOIN prestamos.tipo_credito as tc on crd .id_tipo_credito=tc.id
          LEFT JOIN prestamos.titulo_tipo_credito as titulo on tc.id_titulo_tipo_credito=titulo.id
          where txt.id = '.(int)$model->id.' AND id_estatus_cuota_excluida = 8
          GROUP BY nombre_titulo,tc.descripcion ORDER by nombre_titulo, descripcion';
            $data = Yii::app()->db->createCommand($sql)->queryAll();
    $this->render('view_CPR',array(
      'model'=>$model,
      'modelCPR'=>$modelCPR,
      'data'=>$data,
    ));
  }


  /**
   * Creates a new model.
   * If creation is successful, the browser will be redirected to the 'view' page.
   */
  public function actionCreate()
  {
    $model=new DatosTxtIntegrado;

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

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

    $this->render('create',array(
      'model'=>$model,
    ));
  }
        /**
         *
         * @param type $id
         */
  public function actionAprobarMp($id){

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

    if($model->getEstatusSc()=='Cargado'){

      if(isset($_POST['yt0'])){

        $model->fecha_referencia=$_POST['DatosTxtIntegrado']['fecha_referencia'];

        if($model->validate()){

          try {

            EstatusTxtIntegrado::model()->updateAll(array('actual'=>FALSE),'id_datos_txt_integrado=:id',array(':id'=>$model->id));
            $modelEstatusTxt= new EstatusTxtIntegrado;
            $modelEstatusTxt->id_estatus_txt=3;
            $modelEstatusTxt->id_datos_txt_integrado=$model->id;
            $modelEstatusTxt->actual=TRUE;

            if($modelEstatusTxt->save()){

              $modelAportes=  AporteFondo::model()->findAll('id_txt=:idtxt',array(':idtxt'=>$model->id));

              if($modelAportes){

                foreach ($modelAportes as $key=>$modelAporte){

                  $modelAporte->aprobado=TRUE;
                  //$modelAporte->fecha_aprobacion=date('Y-m-d');
                  //$modelAporte->referencia=$model->referencia;
                  //$modelAporte->fecha_referencia=$model->fecha_referencia;
                  $modelAporte->save(false);
                }

              }else{

                throw new Exception("Error, aporte no encontrado", 1);
              }

              $this->redirect(array('adminAF'));

            }else{

              throw new Exception("Error al actualizar estatus", 2);

            }

          } catch (Exception $e) {

            Yii::app()->user->setFlash('error', $e->getMessage());
            $this->redirect(array('adminAF'));
          }
        }
      }

    }else{

      Yii::app()->user->setFlash('error', "Para poder aprobar la nomina, esta debe estar en estatus Cargado");
      $this->redirect(array('adminAF'));
    }

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

  }




        /**
         * Esta función realiza la aprobacion de los aportes cargados de forma masiva
         * @param $id
         */
        public function actionAprobarTxt($id)
        {
            $model= $this->loadModel($id);
            $modelAportes = new AporteVoluntario('search');

            if(isset($_GET['AporteVoluntario'])) {
                $modelAportes->attributes = $_GET['AporteVoluntario'];
            }

            if($model->getEstatusSc()=='Cargado')
            {

             $model->scenario='aprobar';
############################################# Modulo Contable   ################################################################
            Yii::import('application.modules.configuracion.models.*',true);
            Yii::import('application.modules.contable.models.*',true);
                if (ConfContable::config('CONFCONTABLE')=='SI'){
                    if ($model->validarEjercioContable($id)!=''){
                        Yii::app()->user->setFlash('error', $model->validarEjercioContable($id));
                        $this->redirect(array('adminAE'));
                    }
                }
                if (ConfContable::config('CONFCONTABLE')=='SI' && ConfContable::config('CONFUNIDAD')=='SI'){
                    if ($model->validarUnidadesVoluntario($id)!=''){
                        Yii::app()->user->setFlash('error', $model->validarUnidadesVoluntario($id));
                        $this->redirect(array('adminAE'));
                    }
                    else if ($model->validarMontosVolunario($id)!=''){
                        Yii::app()->user->setFlash('error', $model->validarMontosVolunario($id));
                        $this->redirect(array('adminAE'));
                    }
                }
############################################# Modulo Contable   ################################################################
            if(isset($_POST['yt0'])){
                if ($model->validarCuentasAsociados()) {
                    $model->actualizarCuentasBancoAportesSinCuentaBancaria();

                    if ($model->validarCuentasAsociados()) {
                        Yii::app()->user->setFlash('info', 'Hay asociados que retiran aportes que no tienen cuenta de banco establecida.');
                        $this->redirect(array('adminAE'));
                    }
                }

                 //$model->referencia=$_POST['DatosTxtIntegrado']['referencia'];
                 $model->fecha_referencia=$_POST['DatosTxtIntegrado']['fecha_referencia'];

                if($model->validate())
                {
                    $transaction=Yii::app()->db->beginTransaction();
                    try
                    {
                        $modelDiferidos=  AporteVoluntarioDiferido::model()->findAll('id_txt=:idtxt AND id_estatus_avd=1',array(':idtxt'=>$model->id));
                        if($modelDiferidos)
                            {
                                foreach ($modelDiferidos as $key=>$diferido)
                                    {

                                        $asociado=  Asociado::model()->find('id_estatus=1 and cedula=:ci',array(':ci'=>$diferido->cedula));
                                        if($asociado)
                                            {
                                                $aporte= new AporteVoluntario('carga_masiva_guardado');
                                                $aporte->id_asociado=$asociado->idasociado;
                                                $aporte->id_txt_integrado=$model->id;
                                                $aporte->monto=$diferido->monto;
                                                $aporte->id_aportante=2;
                                                if($aporte->save()){
                                                    $modelDiferido=  AporteVoluntarioDiferido::model()->findByPk($diferido->id);
                                                    $modelDiferido->blnborrado=TRUE;
                                                    $modelDiferido->save();

                                                }

                                            }
                                    }

                            }
                       $countDiferidos= AporteVoluntarioDiferido::model()->count('id_txt=:idtxt AND id_estatus_avd=1',array(':idtxt'=>$model->id));
                       if($countDiferidos==0)
                           {
                             $countAportes=  AporteVoluntario::model()->count('id_txt_integrado=:idtxt AND blnborrado=FALSE',array(':idtxt'=>$model->id));
                             if($countAportes>0)
                             {
                                $modelEstatusTxt= new EstatusTxtIntegrado;
                                $modelEstatusTxt->id_estatus_txt=3;
                                $modelEstatusTxt->id_datos_txt_integrado=$model->id;
                                $modelEstatusTxt->actual=TRUE;
                                EstatusTxtIntegrado::model()->updateAll(array('actual'=>FALSE),'id_datos_txt_integrado=:id',array(':id'=>$model->id));
                                if($modelEstatusTxt->save())
                                    {
                                      $modelAportes=AporteVoluntario::model()->findAll('id_txt_integrado=:idtxt',array(':idtxt'=>$model->id));
                                      if($modelAportes)
                                          {
                                              foreach ($modelAportes as $key=>$modelAporte)
                                              {
                                                 $modelAporte->aprobado=TRUE;
                                                 //$modelAporte->referencia=$model->referencia;
                                                // $modelAporte->fecha_referencia=$model->fecha_referencia;
                                                 $modelAporte->save(false);
                                                 EstatusAporteVoluntario::seguimiento($modelAporte->id, 2);
                                              }
                                          }
############################################# Modulo Contable   ################################################################
                                     /*   if (ConfContable::config('CONFCONTABLE')=='SI'){
                                          $fecha=$model->fecha_referencia;

                                            $modelComprobante= new Comprobante;
                                            $modelComprobante->fecha_comprobante=$fecha;
                                            $modelComprobante->descripcion=$model->descripcion.', segun archivo '.$model->nombre_archivo.', de fecha: '.date('d-m-Y',  strtotime($model->fecha_aporte));
                                            $modelComprobante->status=1;
                                            $modelComprobante->nro_documento=$model->id;
                                            $modelComprobante->save();
                                            $comprobante= Comprobante::model()->findByPk($modelComprobante->id);

                                               $montosaportes= VistaNominaAportesVoluntarios::model()->findAll('id_txt=:txt ',array(':txt'=>$model->id));
                                                //    echo "<pre>"; print_r($montosaportes); exit;
                                                $escenarios='';
                                                 foreach ($montosaportes as $montos):
                                                     $escenarios.="'".$montos->escenario."',";
                                                      if ($montos === end($montosaportes)) {
                                                     $escenarios.="'".$montos->escenario."'";
                                                }

                                                endforeach;

                                                if (ConfContable::config('CONFUNIDAD')=='SI'){
                                                     $asientocontable= VswParametrosContables::model()->findAll("id_escenario=4 and escenario in ($escenarios) and id_unidad>=1");
                                                }else {
                                                     $asientocontable= VswParametrosContables::model()->findAll("id_escenario=4 and escenario in ($escenarios)  and id_unidad is null");
                                                }

                                                foreach ($asientocontable as $contable):
                                                 $fecha= date('d-m-Y');

                                                $montos= VistaNominaAportesVoluntarios::model()->findBySql('select '.$contable->monto.' as aporte from retenciones.vista_nomina_aportes_voluntarios where id_txt='.$model->id.' and escenario in ('.$contable->clave.')');

                                                    $modelDetComprobante= new DetalleComprobante;
                                                    $modelDetComprobante->descripcion= $contable->descripcion;
                                                    $modelDetComprobante->fecha_referencia=$fecha;
                                                    $modelDetComprobante->referencia=$comprobante->numero;
                                                    $modelDetComprobante->id_cuenta=$contable->valor;
                                                    $modelDetComprobante->clv_comprobante=$modelComprobante->id;
                                                    if ($contable->naturaleza==1){
                                                    $modelDetComprobante->monto_debe=$montos->aporte;
                                                    $modelDetComprobante->monto_haber=0;
                                                    }else{
                                                    $modelDetComprobante->monto_debe=0;
                                                    $modelDetComprobante->monto_haber=$montos->aporte;
                                                    }
                                                    $modelDetComprobante->estatus_contab=1;
                                                    $modelDetComprobante->save();
                                                    endforeach;
                                        }*/
############################################# Modulo Contable   ################################################################
                                    $transaction->commit(); #Ejecuta todas las operaciones
                                    Yii::app()->user->setFlash('success', "El archivo fue aprobado de forma exitosa");
                                    $this->redirect(array('adminAE'));
                                    }
                                  else Yii::app()->user->setFlash('error', "La aprobación de la carga masiva falló");
                             }
                             else Yii::app()->user->setFlash('error', "No se puede aprobar la carga, no ha sido cargado ningun aporte");

                           }
                       else {
                                Yii::app()->user->setFlash('error', "No se puede aprobar la carga mientras existan aportes no definidos");
                        }

                   } catch (Exception $ex) {
                        $transaction->rollback();
                        Yii::app()->user->setFlash('error', "El archivo debe estar en estatus Cargado para poder Aprobar");
                        $this->redirect(array('adminAE'));


                    }

                }
            }

         $this->render('aprobar_AE',array(
      'model'=>$model,
      'modelAportes' => $modelAportes,
    ));

            }
            else {
                 Yii::app()->user->setFlash('error', Yii::app()->user->getFlash('error'));
                 $this->redirect(array('adminAE'));

            }
        }

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

        if ($model->getEstatusSc() != 'Cargado') {
            Yii::app()->user->setFlash('error', 'La nomina debe estar en estatus cargada para poder aprobar');
            $this->redirect(['prestamo/DatosPreNominaCredito/view', 'id' => $model->id_prenomina_credito]);
        }

        if ($cuotas = $model->cuotasConciliadasSinDefinir()) {
            Yii::app()->user->setFlash('warning', "Tiene <strong>{$cuotas}</strong> cuotas conciliadas sin definir, es necesario definirlas para poder avanzar");

            $this->redirect(['/prestamo/DatosPreNominaCredito/view', 'id' => $model->id_prenomina_credito]);
        }

        if (!Yii::app()->user->checkAccess('usuario_administrador')) {
            $modelUnidad = UnidadUsuario::model()->find('idusuario=:idusuario AND idunidad=:id_unidad', array(':idusuario'=>Yii::app()->user->id,':id_unidad'=>$model->id_unidad));

            if (!$modelUnidad) {
                $this->redirect(array('/prestamo/datosPreNominaCredito/view','id' =>$model->id_prenomina_credito));
            }
        }

        $model->scenario='aprobar';

        if (isset($_POST['yt0'])) {
            $model->fecha_referencia=$_POST['DatosTxtIntegrado']['fecha_referencia'];

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

                    $modelPrenominaSeguimiento = new PreNominaSeguimiento();
                    $modelPrenominaSeguimiento->id_estatus_pre_nomina = 4;
                    $modelPrenominaSeguimiento->id_pre_nomina_credito=$model->id_prenomina_credito;
                    $modelPrenominaSeguimiento->save();

                    $modelEstatusTxt= new EstatusTxtIntegrado;
                    $modelEstatusTxt->id_estatus_txt=3;
                    $modelEstatusTxt->id_datos_txt_integrado=$model->id;
                    $modelEstatusTxt->actual=true;

                    EstatusTxtIntegrado::model()->updateAll(array('actual' => false), 'id_datos_txt_integrado=:id', array(
                        'id' => $model->id
                    ));

                    if ($modelEstatusTxt->save()) {
                        CreditoTablaAmortizacion::model()->updateAll([
                            'id_estatus_cuota' => 1
                        ], "id in (
                            select dtta.id_tabla_amortizacion
                            from prestamos.datos_txt_tabla_amortizacion dtta
                            inner join retenciones.datos_txt_integrado dti on dti.id=dtta.id_txt
                            where dtta.id_txt={$model->id}
                                and dtta.id_tabla_amortizacion not in (
                                    select id_tabla_amortizacion
                                    from prestamos.pre_nomina_cuotas_subproceso
                                    where id_pre_nomina_credito=dti.id_prenomina_credito
                                )
                        )");

                        $cuotasEnPrenomina = PreNominaTablaAmortizacion::model()->findAll('id_pre_nomina_credito=:id_txt AND blnborrado IS FALSE', [
                            'id_txt' => $model->id_prenomina_credito
                        ]);
                        foreach ($cuotasEnPrenomina as $value) {
                            $cuota = $value->idTablaAmortizacion;

                            if ($value->id_estatus_cuota_excluida == 5) {
                                $cuota->id_estatus_cuota = 6;
                            } elseif ($value->id_estatus_cuota_excluida == 6) {
                                $cuota->id_estatus_cuota = 7;
                            } elseif ($value->id_estatus_cuota_excluida == 7) {
                                $cuota->id_estatus_cuota = 8;
                            } elseif ($value->id_estatus_cuota_excluida == 8) {
                                $cuota->id_estatus_cuota = 9;
                            }

                            $cuota->save();
                        }

                        $transaction->commit();
                        Yii::app()->user->setFlash('success', "El archivo fue aprobado de forma exitosa");
                        $this->redirect(array('/prestamo/datosPreNominaCredito/view','id'=>$model->id_prenomina_credito));
                    } else {
                        Yii::app()->user->setFlash('error', "La aprobación de la carga masiva falló");
                    }
                } catch (Exception $ex) {
                    $transaction->rollback();
                    Yii::app()->user->setFlash('error', $ex->getMessage());
                    $this->redirect(array('adminPrestamo'));
                }
            }
        }

        $sql = 'select nombre_titulo,descripcion,count(id_tabla_amortizacion) cantidad_cuota,  sum(monto_capital) as capital , sum(monto_interes) as interes, sum(monto_cuota) as monto
            from prestamos.pre_nomina_tabla_amortizacion as a
            JOIN prestamos.credito_tabla_amortizacion as b on a.id_tabla_amortizacion=  b.id
            JOIN prestamos.credito as c on b.idcredito=c.id
            JOIN prestamos.tipo_credito as d on c.id_tipo_credito=d.id
            LEFT JOIN prestamos.titulo_tipo_credito as e on d.id_titulo_tipo_credito=e.id
            where id_pre_nomina_credito = '.(int)$model->id_prenomina_credito.'
            GROUP BY nombre_titulo,descripcion
            ORDER by nombre_titulo, descripcion, count(id_tabla_amortizacion), sum(monto_cuota) ';
        $data = Yii::app()->db->createCommand($sql)->queryAll();

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

    /**
     * Esta función realiza la aprobacion de los aportes cargados de forma masiva.
     *
     * @param $id
     */
    public function actionAprobarCmao($id)
    {
        $model = $this->loadModel($id);
        $model->fecha_comprobante = date('d-m-Y');
        $aportesCeroPatrono = AporteOrdinario::model()->count('id_txt=:id AND COALESCE(aporte_patrono,0)=0 AND blnborrado=FALSE', array(':id' => $model->id));
        $aportesCeroSocio = AporteOrdinario::model()->count('id_txt=:id AND COALESCE(aporte_asociado,0)=0  AND blnborrado=FALSE', array(':id' => $model->id));
        $aportesCero = AporteOrdinario::model()->count('id_txt=:id AND (COALESCE(aporte_asociado,0)=0 AND COALESCE(aporte_patrono,0)=0)AND blnborrado=FALSE', array(':id' => $model->id));
        $modelAportes = new AporteOrdinario('search');
        $modelAportesDiferidos = new AporteOrdinarioDiferido('search');

        $totalAportantes = AporteOrdinario::model()->count('id_txt=:id  AND  blnborrado=FALSE AND COALESCE(id_estatus_aporte,0)!=4', array(':id' => $model->id));
        $totalMontoAporteActivo = AporteOrdinario::model()->find(array(
            'select' => ' sum (aporte_patrono) as aporte_patrono, sum (aporte_asociado) as aporte_asociado',
            'condition' => 'id_txt=:id  AND  blnborrado=FALSE AND COALESCE(id_estatus_aporte,0)!=4',
            'params' => array(':id' => $model->id),
        ));

        $modelAportesLiquidados = AporteOrdinarioDiferido::model()->count('id_txt=:id AND id_estatus_aod =5 AND  blnborrado=FALSE', array(':id' => $model->id));
        $totalMontoAporteLiquidados = AporteOrdinarioDiferido::model()->find(array(
            'select' => ' sum (aporte_patrono) as aporte_patrono, sum (aporte_asociado) as aporte_asociado',
            'condition' => 'id_txt=:id AND id_estatus_aod =5 AND  blnborrado=FALSE',
            'params' => array(':id' => $model->id)
        ));

        $modelAportesTotalDiferidos = AporteOrdinarioDiferido::model()->count('id_txt=:id AND id_estatus_aod !=5 AND  blnborrado=FALSE', array(':id' => $model->id));
        $totalMontoAporteDiferidos = AporteOrdinarioDiferido::model()->find(array(
            'select' => ' sum (aporte_patrono) as aporte_patrono, sum (aporte_asociado) as aporte_asociado',
            'condition' => 'id_txt=:id AND id_estatus_aod !=5 AND  blnborrado=FALSE',
            'params' => array(':id' => $model->id)
        ));

        if ($model->getEstatusSc() == 'Cargado') {
            $model->scenario = 'aprobar';

            if (isset($_POST['yt0'])) {
                $model->fecha_referencia = $_POST['DatosTxtIntegrado']['fecha_referencia'];

                Yii::import('application.modules.contable.models.*', true);
                if (ParamEscenarios::fechaComprobante(['aprobar_aporte_ordinario' => 2])) {
                    $model->fecha_comprobante = $_POST['DatosTxtIntegrado']['fecha_comprobante'];
                }

                if ($model->validate()) {
                    $transaction = Yii::app()->db->beginTransaction();
                    try {
                        $modelEstatusTxt = new EstatusTxtIntegrado();
                        $modelEstatusTxt->id_estatus_txt = 3;
                        $modelEstatusTxt->id_datos_txt_integrado = $model->id;
                        $modelEstatusTxt->actual = true;
                        EstatusTxtIntegrado::model()->updateAll(array('actual' => false), 'id_datos_txt_integrado=:id', array(':id' => $model->id));
                        if ($modelEstatusTxt->save()) {
                            $modelAportes = AporteOrdinario::model()->findAll('id_txt=:idtxt', array(':idtxt' => $model->id));

                            if ($modelAportes) {
                                foreach ($modelAportes as $key => $modelAporte) {
                                    $modelAporte->aprobado = true;
                                    $modelAporte->save(false);
                                }
                            }

                            //////////////////////////// Contabilización Comprobante Inicio ////////////////////////////
                            Yii::import('application.modules.contable.models.comprobantes.ordinario.*', true);
                            Yii::import('application.modules.contable.models.comprobantes.*', true);
                            (new AprobacionAO($model))->contabilizar();
                            //////////////////////////// Contabilización Comprobante Fin ///////////////////////////////

                            $transaction->commit();
                            Yii::app()->user->setFlash('success', 'El archivo fue aprobado de forma exitosa');
                            $this->redirect(array('adminAO'));
                        } else {
                            Yii::app()->user->setFlash('error', 'La aprobación de la carga masiva falló');
                        }
                    } catch (Exception $ex) {
                        $transaction->rollback();
                        Yii::app()->user->setFlash('error', $ex->getMessage());
                        $this->redirect(array('adminAO'));
                    }
                }
            }

            $this->render('aprobar_AO', array(
                'model' => $model,
                'aportesCeroPatrono' => $aportesCeroPatrono,
                'aportesCeroSocio' => $aportesCeroSocio,
                'aportesCero' => $aportesCero,
                'totalAportantes' => $totalAportantes,
                'totalMontoAporteActivo' => $totalMontoAporteActivo,
                'modelAportesLiquidados' => $modelAportesLiquidados,
                'totalMontoAporteLiquidados' => $totalMontoAporteLiquidados,
                'modelAportesTotalDiferidos' => $modelAportesTotalDiferidos,
                'totalMontoAporteDiferidos' => $totalMontoAporteDiferidos,
            ));
        } else {
            Yii::app()->user->setFlash('error', 'El archivo debe estar en estatus Cargado para poder aprobar');
            $this->redirect(array('adminAO'));
        }
    }

    /**
     *
     * @param type $id
     */
    public function actionPagarCmae($id)
    {
        $model = $this->loadModel($id);
        $detalle_pago = new ProcesoPago('nomina_aporte');

        if ($model->getEstatusSc() != 'Aprobado') {
            Yii::app()->user->setFlash('error', 'El archivo debe estar en estatus Aprobado para poder Pagar');
            $this->redirect(array('/prestamo/DatosPreNominaCredito/admin'));
        }

        $model->scenario = 'pago';
        if (isset($_POST['DatosTxtIntegrado'])) {
            $transaction = Yii::app()->db->beginTransaction();
            try {
                $model->attributes = $_POST['DatosTxtIntegrado'];
                $model->referencia = $_POST['DatosTxtIntegrado']['referencia'];
                $model->fecha_referencia = $_POST['DatosTxtIntegrado']['fecha_referencia'];
                $model->banco = $_POST['DatosTxtIntegrado']['banco'];

                if ($model->validate()) {
                    AporteVoluntario::capitalizarRezagados($model->id);
                    foreach (AporteVoluntario::aportesNoPagados($model->id) as $key => $aporte) {
                        $aporte->referencia = $model->referencia;
                        $aporte->fecha_referencia = $model->fecha_referencia;
                        $aporte->id_banco_destino = $model->banco;
                        $banco = ParamBancos::model()->findByPk($model->banco);
                        if ($banco) {
                            $aporte->cuenta_destino = $banco->num_cuenta;
                        }
                        $aporte->pagado = true;
                        $aporte->save();

                        EstatusAporteVoluntario::seguimiento($aporte->id, 3);
                    }

                    // Guarda el detalle del pago realizado
                    $detalle_pago->id_proceso = $model->id;
                    $detalle_pago->id_nombre_proceso = 7;
                    $detalle_pago->id_banco = $model->banco;
                    $detalle_pago->referencia = $model->referencia;
                    $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 = $_POST['ProcesoPago']['monto_pagado'];

                    if (! $detalle_pago->validate()) {
                        throw new Exception('Error en validacion de datos de pago', 1);
                    }

                    $detalle_pago->monto_pagado = ProcesoPago::model()->formatter($detalle_pago->monto_pagado);
                    $detalle_pago->save(false);

                    if (! $model->aportesSinPagar()) {
                        EstatusTxtIntegrado::seguimiento($model->id, 5);
                    }

                    $transaction->commit();

                    Yii::app()->user->setFlash('success', 'El archivo fue pagado de forma exitosa');

                    if ($model->id_tipo_carga == 1) {
                        $this->redirect(array('/aportes/datosTxtIntegrado/adminAE'));
                    } else {
                        $this->redirect(array('/prestamo/DatosPreNominaCredito/admin'));
                    }
                }
            } catch (Exception $e) {
                $transaction->rollback();
                Yii::app()->user->setFlash('error', 'Ocurrio un error durante el guardado, se han revertido todos los cambios');
                $this->redirect(array('/prestamo/DatosPreNominaCredito/admin'));
            }
        }

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

    public function actionPagarCmap($id)
    {
        $model = $this->loadModel($id);
        $model->fecha_comprobante = date('d-m-Y');
        $detalle_pago = new ProcesoPago('nomina_aporte');

        if ($model->getEstatusSc() != 'Aprobado') {
            Yii::app()->user->setFlash('error', 'El archivo debe estar en estatus Aprobado para poder Pagar');
            return $this->redirect(['/prestamo/DatosPreNominaCredito/view', 'id' => $model->id_prenomina_credito]);
        }

        if (isset($_POST['DatosTxtIntegrado'])) {
            $transaction = Yii::app()->db->beginTransaction();
            try {
                $model->setScenario('pago');
                $model->setAttributes($_POST['DatosTxtIntegrado']);
                $detalle_pago->monto_pagado = $_POST['ProcesoPago']['monto_pagado'];
                $model->setMontoPagado(
                    $detalle_pago->formatter($detalle_pago->monto_pagado)
                );
                $detalle_pago->setScenario('cargarPagoPrestamos');

                if ($model->validate() && $detalle_pago->validate()) {
                    PreNominaSeguimiento::model()->updateAll(['actual' => false], 'id_pre_nomina_credito=:id_pre_nomina_credito', ['id_pre_nomina_credito' => $model->id_prenomina_credito]);
                    $modelPrenominaSeguimiento = new PreNominaSeguimiento();
                    $modelPrenominaSeguimiento->id_estatus_pre_nomina = 5;
                    $modelPrenominaSeguimiento->id_pre_nomina_credito = $model->id_prenomina_credito;
                    $modelPrenominaSeguimiento->save();

                    EstatusTxtIntegrado::model()->updateAll(['actual' => false], 'id_datos_txt_integrado=:id', [':id' => $model->id]);
                    $modelEstatusTxt = new EstatusTxtIntegrado;
                    $modelEstatusTxt->id_estatus_txt = 5;
                    $modelEstatusTxt->id_datos_txt_integrado = $model->id;
                    $modelEstatusTxt->actual = true;

                    if ($modelEstatusTxt->save()) {
                        CreditoTablaAmortizacion::model()->updateAll([
                            'id_estatus_cuota' => 2
                        ], "id in (
                            select dtta.id_tabla_amortizacion
                            from prestamos.datos_txt_tabla_amortizacion dtta
                            inner join retenciones.datos_txt_integrado dti on dti.id=dtta.id_txt
                            where dtta.id_txt={$model->id}
                                and dtta.id_tabla_amortizacion not in (
                                    select id_tabla_amortizacion
                                    from prestamos.pre_nomina_cuotas_subproceso
                                    where id_pre_nomina_credito={$model->id_prenomina_credito}
                                )
                        )");

                        $retenciones = Yii::app()->getDb()->createCommand("
                            select cta.idcredito
                            from prestamos.datos_txt_tabla_amortizacion dtta
                            inner join prestamos.credito_tabla_amortizacion cta on cta.id=dtta.id_tabla_amortizacion
                            inner join (
                                select idcredito as id_credito,
                                    count(*)
                                from prestamos.credito_tabla_amortizacion
                                where blnborrado is false
                                group by idcredito
                            ) as cuotas on cuotas.id_credito=cta.idcredito
                            left join (
                                select idcredito as id_credito,
                                    count(*)
                                from prestamos.credito_tabla_amortizacion
                                where blnborrado is false
                                    and id_estatus_cuota=2
                                group by idcredito
                            ) as pagadas on pagadas.id_credito=cta.idcredito
                            where dtta.id_txt={$model->id}
                                and (cuotas.count = coalesce(pagadas.count, 0)) is true
                        ")->queryAll();

                        // Pago total deuda a creditos que se pagaron totalmente con la nomina
                        foreach ($retenciones as $cuota) {
                            CreditoSeguimiento::model()->updateAll(['actual' => false], 'id_credito=:id', [':id' => $cuota['idcredito']]);
                            $modelCreditoAnterior = new CreditoSeguimiento();
                            $modelCreditoAnterior->id_credito = $cuota['idcredito'];
                            $modelCreditoAnterior->id_estatus_credito = 14;
                            $modelCreditoAnterior->save();
                        }

                        $detalle_pago->id_proceso = $model->id;
                        $detalle_pago->id_nombre_proceso = 8;
                        $detalle_pago->id_banco = $model->banco;
                        $detalle_pago->referencia = $model->referencia;
                        $detalle_pago->fecha_pago = date('d-m-Y', strtotime($model->fecha_referencia));
                        $detalle_pago->observacion = 'Pago archivo: ' . $model->nombre_archivo;
                        $detalle_pago->id_usuario = Yii::app()->user->id;

                        if (! $detalle_pago->validate()) {
                            throw new Exception('Error en validacion de datos de pago', 1);
                        }

                        $detalle_pago->monto_pagado = $detalle_pago->formatter($detalle_pago->monto_pagado);
                        $detalle_pago->save(false);

                        $model->setFechaOperacion($model->fecha_referencia);
                        $model->setReferencia($detalle_pago->referencia);
                        $model->setIdComprobantePago($detalle_pago->id);

                        $model->actualizarEstatusCuotasConMontoCobro();

                        (new NominaPrestamos($model))->pagar();

                        (new Generar($model, $detalle_pago))->createAll();

                        $transaction->commit();
                        Yii::app()->user->setFlash('success', 'El archivo fue pagado  y contabilizado de forma exitosa');
                        $this->redirect(['/prestamo/DatosPreNominaCredito/view', 'id' => $model->id_prenomina_credito]);
                    }
                }
            } catch (Exception $e) {
                $transaction->rollback();
                Yii::app()->user->setFlash('error', $e->getMessage());
                $this->redirect(['/prestamo/DatosPreNominaCredito/view', 'id' => $model->id_prenomina_credito]);
            }
        }

        $sql = 'select nombre_titulo,descripcion,count(id_tabla_amortizacion) cantidad_cuota,  sum(monto_capital) as capital , sum(monto_interes) as interes, sum(monto_cuota) as monto
            from prestamos.pre_nomina_tabla_amortizacion as a
            JOIN prestamos.credito_tabla_amortizacion as b on a.id_tabla_amortizacion=  b.id
            JOIN prestamos.credito as c on b.idcredito=c.id
            JOIN prestamos.tipo_credito as d on c.id_tipo_credito=d.id
            LEFT JOIN prestamos.titulo_tipo_credito as e on d.id_titulo_tipo_credito=e.id
            where id_pre_nomina_credito=' . $model->id_prenomina_credito . '
            GROUP BY nombre_titulo,descripcion
            ORDER by nombre_titulo, descripcion, count(id_tabla_amortizacion), sum(monto_cuota) ';

        $data = Yii::app()->db->createCommand($sql)->queryAll();

        $sqlCargado = 'SELECT nombre_titulo,descripcion,count(id_tabla_amortizacion) cantidad_cuota,
                sum(monto_capital) as capital , sum(monto_interes) as interes, sum(monto_cuota) as monto
            FROM "prestamos"."datos_txt_tabla_amortizacion" "t"
            LEFT OUTER JOIN "prestamos"."credito_tabla_amortizacion" "idTablaAmortizacion" ON ("t"."id_tabla_amortizacion"="idTablaAmortizacion"."id")
            LEFT OUTER JOIN "prestamos"."credito" "idCredito" ON ("idTablaAmortizacion"."idcredito"="idCredito"."id")
            LEFT OUTER JOIN "asociado" "idAsociado" ON ("idCredito"."idasociado"="idAsociado"."idasociado")
            LEFT OUTER JOIN "prestamos"."tipo_credito" "idTipoCredito" ON ("idCredito"."id_tipo_credito"="idTipoCredito"."id")
            LEFT JOIN "prestamos"."titulo_tipo_credito" "idTituloCredito" ON ("idTipoCredito"."id_titulo_tipo_credito"="idTituloCredito"."id")
            WHERE (id_txt=' . $model->id . ')
            GROUP BY nombre_titulo,descripcion
            ORDER by nombre_titulo, descripcion, count(id_tabla_amortizacion), sum(monto_cuota)';
        $dataCargada = Yii::app()->db->createCommand($sqlCargado)->queryAll();

        $this->render('pagarCmap', [
            'model' => $model,
            'detalle' => $detalle_pago,
            'data' => $data,
            'dataCargada' => $dataCargada,
        ]);
    }

    /**
     * @param type $id
     */
    public function actionPagarCmao($id)
    {
        $model = $this->loadModel($id);
        $model->fecha_comprobante = date('d-m-Y');
        $aportesCeroPatrono = AporteOrdinario::model()->count('id_txt=:id AND COALESCE(aporte_patrono,0)=0 AND blnborrado=FALSE', array(':id' => $model->id));
        $aportesCeroSocio = AporteOrdinario::model()->count('id_txt=:id AND COALESCE(aporte_asociado,0)=0  AND blnborrado=FALSE', array(':id' => $model->id));
        $aportesCero = AporteOrdinario::model()->count('id_txt=:id AND (COALESCE(aporte_asociado,0)=0 AND COALESCE(aporte_patrono,0)=0)AND blnborrado=FALSE', array(':id' => $model->id));
        $modelAportes = new AporteOrdinario('search'); //AporteVoluntario::model()->findAll('id_txt_integrado=:id',array(':id'=>$model->id));
            // $modelAportesDiferidos = new AporteOrdinarioDiferido('search'); //AporteVoluntarioDiferido::model()->findAll('id_txt=:id',array(':id'=>$model->id));

            $totalAportantes = AporteOrdinario::model()->count('id_txt=:id  AND  blnborrado=FALSE AND COALESCE(id_estatus_aporte,0)!=4', array(':id' => $model->id));
        $totalMontoAporteActivo = AporteOrdinario::model()->find(array(
                                                                        'select' => ' sum (aporte_patrono) as aporte_patrono, sum (aporte_asociado) as aporte_asociado',
                                                                        'condition' => 'id_txt=:id  AND  blnborrado=FALSE AND COALESCE(id_estatus_aporte,0)!=4',
                                                                        'params' => array(':id' => $model->id), ));
        $modelAportesLiquidados = AporteOrdinarioDiferido::model()->count('id_txt=:id AND id_estatus_aod =5 AND  blnborrado=FALSE',
                                                                                    array(':id' => $model->id)); //AporteVoluntarioDiferido::model()->findAll('id_txt=:id',array(':id'=>$model->id));
        $totalMontoAporteLiquidados = AporteOrdinarioDiferido::model()->find(array(
                                                                        'select' => ' sum (aporte_patrono) as aporte_patrono, sum (aporte_asociado) as aporte_asociado',
                                                                        'condition' => 'id_txt=:id AND id_estatus_aod =5 AND  blnborrado=FALSE',
                                                                        'params' => array(':id' => $model->id), ));

        $modelAportesTotalDiferidos = AporteOrdinarioDiferido::model()->count('id_txt=:id AND id_estatus_aod !=5 AND  blnborrado=FALSE',
                                                                                    array(':id' => $model->id)); //AporteVoluntarioDiferido::model()->findAll('id_txt=:id',array(':id'=>$model->id));
        $totalMontoAporteDiferidos = AporteOrdinarioDiferido::model()->find(array(
                                                                        'select' => ' sum (aporte_patrono) as aporte_patrono, sum (aporte_asociado) as aporte_asociado',
                                                                        'condition' => 'id_txt=:id AND id_estatus_aod !=5 AND  blnborrado=FALSE',
                                                                        'params' => array(':id' => $model->id), ));

        $modelComprobantePago = new ProcesoPago('nomina_aporte');

        if ($model->idUnidad->nominaCajaAhorro()) {
            $modelComprobantePago->id_tipo_unidad = 2;
        } else {
            $modelComprobantePago->id_tipo_unidad = 1;
        }

        if(isset($_GET['AporteOrdinario'])) {
            $modelAportes->attributes=$_GET['AporteOrdinario'];
            $modelAportes->nombre_completo = $_GET['AporteOrdinario']['nombre_completo'];
        }

        if ($model->getEstatusSc() != 'Aprobado') {
            Yii::app()->user->setFlash('error', 'El archivo debe estar en estatus Aprobado para poder Pagar');
            $this->redirect(array('adminAO'));
        }

        if (isset($_POST['ProcesoPago'])) {
            $modelComprobantePago->attributes = $_POST['ProcesoPago'];
            $modelComprobantePago->id_proceso = $model->id;
            $modelComprobantePago->id_nombre_proceso = 6;
            $modelComprobantePago->observacion = 'Pago del archivo con nombre: '.$model->nombre_archivo;
            $modelComprobantePago->id_usuario = Yii::app()->user->id;

            if ($modelComprobantePago->validate()) {
                $modelComprobantePago->monto_pagado = ProcesoPago::model()->formatter($_POST['ProcesoPago']['monto_pagado']);
                $transaction = Yii::app()->db->beginTransaction();

                try {
                    $modelComprobantePago->save(false);
                    EstatusTxtIntegrado::model()->updateAll(array('actual' => false), 'id_datos_txt_integrado=:id', array(':id' => $model->id));

                    if ($_POST['metodos_pago'] == 1) {
                        AporteOrdinario::model()->updateAll(array('metodo_pago' => false), 'id_txt=:id', array(':id' => $model->id));
                        (new Warp(json_decode($_POST['asociados'])))->map(function ($aporte) {
                            AporteOrdinario::model()->updateAll(['metodo_pago' => true], 'id=:id', ['id' => $aporte]);
                        });
                    } else {
                        AporteOrdinario::model()->updateAll(array('metodo_pago' => true), 'id_txt=:id', array(':id' => $model->id));
                    }

                    $sql = 'SELECT sum(aporte_patrono) as aporte_patrono, sum(aporte_asociado) as aporte_asociado
                            FROM retenciones.aporte_ordinario
                            WHERE id_txt ='.$model->id.' ';
                    $modelMontoCompromiso = AporteOrdinario::model()->findBySql($sql);

                    $a = $modelComprobantePago->monto_pagado;
                    $b = $modelMontoCompromiso->aporte_asociado + $modelMontoCompromiso->aporte_patrono;

                    Yii::import('application.modules.contable.models.*', true);
                    if (ParamEscenarios::fechaComprobante(['pagar_aporte_ordinario' => 3])) {
                        $model->fecha_comprobante = $_POST['DatosTxtIntegrado']['fecha_comprobante'];
                    }

                    $metodo_a_seguir = DatosTxtIntegrado::datosAporte($model->id);
                    if (empty($metodo_a_seguir['diferidos'])) {
                        $model->setMontoPagado($a);
                        $model->setFechaOperacion($modelComprobantePago->fecha_pago);
                        $model->setIdComprobantePago($modelComprobantePago->id);
                        $model->setMetodoPego($_POST['metodos_pago']);
                        $model->setBancoPago($modelComprobantePago->id_banco);
                        $model->setReferencia($modelComprobantePago->referencia);
                        $model->setTituloProceso($modelComprobantePago->id_nombre_proceso);

                        ////el monto pagado es igual al monto del compromiso
                        if (bccomp($a, $b, 2) == 0) {
                            if (($b - $a) < 0) {
                                $pagoAdicional = new PagosAdicionales();
                                $pagoAdicional->id_txt = $model->id;
                                $pagoAdicional->tipo_aporte = 1;
                                $pagoAdicional->monto_adicional = ($a - $b);
                                $pagoAdicional->fecha_transaccion = $modelComprobantePago->fecha_pago;
                                $pagoAdicional->usuario = Yii::app()->user->id;

                                if (!$pagoAdicional->save()) {
                                    throw new Exception('Error al guardar el excedente', 1);
                                }
                            }
                            // coloca los aportes como disponible
                            $modelEstatusTxt = new EstatusTxtIntegrado();
                            $modelEstatusTxt->id_estatus_txt = 5;
                            $modelEstatusTxt->id_datos_txt_integrado = $model->id;
                            $modelEstatusTxt->actual = true;

                            if ($modelEstatusTxt->save()) {
                                AporteOrdinario::model()->updateAll([
                                    'pagado' => true,
                                    'id_estatus_aporte' => 3,
                                ],
                                'id_txt=:idtxt AND blnborrado=FALSE', [
                                    ':idtxt' => $model->id
                                ]);
                            }

                            //////////////////////////// Contabilización Comprobante Inicio ////////////////////////////
                            Yii::import('application.modules.contable.models.comprobantes.ordinario.*', true);
                            Yii::import('application.modules.contable.models.comprobantes.*', true);
                            (new PagoAOE1($model))->contabilizar();
                            //////////////////////////// Contabilización Comprobante Fin ///////////////////////////////
                        } elseif (bccomp($a, $b, 2) > 0) { // Escenario 6: si el monto pagado > monto calculado y todos los asociados son activos
                            $pagoAdicional = new PagosAdicionales();
                            $pagoAdicional->id_txt = $model->id;
                            $pagoAdicional->tipo_aporte = 1;
                            $pagoAdicional->monto_adicional = ($a - $b);
                            $pagoAdicional->fecha_transaccion = $modelComprobantePago->fecha_pago;
                            $pagoAdicional->usuario = Yii::app()->user->id;

                            if (! $pagoAdicional->save()) {
                                throw new Exception('Error al guardar el excedente', 1);
                            }
                            EstatusTxtIntegrado::seguimiento($model->id, 5);

                            $proveedor = $model->getProveedor();
                            $montoSobranteFormateado = Yii::app()->format->number($pagoAdicional->monto_adicional);

                            Yii::import('application.modules.configuracion.models.*');
                            OrdenPago::generar([
                                'idproveedor' => $proveedor->id,
                                'id_tipo_orden' => 1,
                                'id_tipo_carga' => 3,
                                'id_tipo_persona' => $proveedor->id_tipo_persona,
                                'rif' => $proveedor->rif,
                                'monto_pago' => $montoSobranteFormateado,
                                'descripcion' => "Tipo: patrono {$model->getDescripcion()} Monto: {$montoSobranteFormateado}",
                                'idbanco' => $proveedor->proveedorCuentaBancosPrincipal->id,
                                'id_concepto' => ConceptosOrdenPago::proceso(6),
                            ], 2);

                            //////////////////////////// Contabilización Comprobante Inicio ////////////////////////////
                            Yii::import('application.modules.contable.models.comprobantes.ordinario.*', true);
                            Yii::import('application.modules.contable.models.comprobantes.*', true);
                            (new PagoAOE6($model, $modelComprobantePago->fecha_pago))->contabilizar();
                            //////////////////////////// Contabilización Comprobante Fin ///////////////////////////////
                        } else { // El monto pagado es menor al monto del compromiso
                            $model->escenarioCincoPuntoDosPagoActivos();
                        }

                        $transaction->commit(); //Ejecuta todas las operaciones
                        Yii::app()->user->setFlash('success', 'El archivo fue pagado  y contabilizado de forma exitosa');
                        $this->redirect(array('adminAO'));
                    } else {//FUNCION PARA PAGAR CON APORTES DIFERIDOS
                        $model->pagosEnEscenarios($a, $modelComprobantePago, $_POST['metodos_pago']);
                        $transaction->commit();
                        Yii::app()->user->setFlash('success', 'El archivo fue pagado  y contabilizado de forma exitosa');

                        return $this->redirect(array('adminAO'));
                    }
                } catch (Exception $e) {
                    $transaction->rollback();
                    Yii::app()->user->setFlash('error', $e->getMessage());
                    $this->redirect(array('pagarCmao', 'id' => $model->id));
                }
            } else {
                Yii::app()->user->setFlash('error', 'Error en validación de datos verifiquelos e intentelo nuevamente!');
                $this->redirect(array('adminAO'));
            }
        }

        $this->render('pagarCmao', array(
            'model' => $model,
            'modelAportes' => $modelAportes,
             'modelComprobantePago' => $modelComprobantePago,
             'aportesCeroPatrono' => $aportesCeroPatrono,
             'aportesCeroSocio' => $aportesCeroSocio,
             'aportesCero' => $aportesCero,
             'totalAportantes' => $totalAportantes,
             'totalMontoAporteActivo' => $totalMontoAporteActivo,
             'modelAportesLiquidados' => $modelAportesLiquidados,
             'totalMontoAporteLiquidados' => $totalMontoAporteLiquidados,
             'modelAportesTotalDiferidos' => $modelAportesTotalDiferidos,
             'totalMontoAporteDiferidos' => $totalMontoAporteDiferidos,
            ));
    }




  public function actionPagarMp($id){

    $model=$this->loadModel($id);
    $proceso_pago = new ProcesoPago;
    $proceso_pago->scenario = 'pagarFondo';

    if($model->getEstatusSc()=='Aprobado'){

      if(isset($_POST['ProcesoPago'])){

        $proceso_pago->attributes=$_POST['ProcesoPago'];
        $proceso_pago->id_proceso = $model->id;
        $proceso_pago->id_nombre_proceso = 5;
        $proceso_pago->observacion = 'Pago del archivo: '.$model->nombre_archivo;
        $proceso_pago->id_usuario = Yii::app()->user->id;

        if($proceso_pago->validate()){

          $proceso_pago->monto_pagado = ProcesoPago::model()->formatter($_POST['ProcesoPago']['monto_pagado']);
          $transaction=Yii::app()->db->beginTransaction();

          try {

            $proceso_pago->save(false);
            EstatusTxtIntegrado::model()->updateAll(array('actual'=>FALSE),'id_datos_txt_integrado=:id',array(':id'=>$model->id));

            $sql = 'SELECT sum(aporte) as aporte FROM montepio.aporte_fondo WHERE id_txt ='.$model->id.' ';

            $montoArchivo = AporteFondo::model()->findBySql($sql);
            $a = floatval($proceso_pago->monto_pagado);
            $b = floatval($montoArchivo->aporte);

            if (bccomp($a, $b, 2)>=0) { //Si el monto enviado por formulario es mayor o igual al monto total del archivo

              //echo "<pre>monto_post = que monto archivo";print_r($proceso_pago);exit;

              $modelEstatusTxt= new EstatusTxtIntegrado;
              $modelEstatusTxt->id_estatus_txt=5;
              $modelEstatusTxt->id_datos_txt_integrado=$model->id;
              $modelEstatusTxt->actual=TRUE;
              //$modelEstatusTxt->id_usuario=Yii::app()->user->id;

              if($modelEstatusTxt->save()){

                $aportes= AporteFondo::model()->findAll('id_txt=:txt AND blnborrado=FALSE',array(':txt'=>$model->id));

                foreach ($aportes as $key=>$aporte){

                  $aporte->referencia=$proceso_pago->referencia;
                  $aporte->fecha_referencia=$proceso_pago->fecha_pago;
                  $aporte->id_banco_destino=$proceso_pago->id_banco;
                  $banco=ParamBancos::model()->findByPk($proceso_pago->id_banco);

                  if($banco){
                    $aporte->cuenta_destino=$banco->num_cuenta;
                  }else{
                    throw new Exception("Error, banco no encontrado", 1);
                  }

                  $aporte->pagado=TRUE;

                  if(!$aporte->save()){
                    throw new Exception("Error al guardar los aportes", 2);
                  }

                }

                //$transaction->commit();
                //Yii::app()->user->setFlash('success', "La nómina ha sido pagada con exito!");
                //$this->redirect(array('adminAF'));

              }else{

                throw new Exception("Error al actualizar estatus", 3);
              }

            }else{ //Si el monto enviado por formulario es diferente del monto total del archivo
throw new Exception("El pago parcial está deshabilitado temporalmente, consulte con el administrador!", 4);
              //echo "<pre>monto_post != que monto archivo";print_r($montoArchivo);exit;

              $modelEstatusTxt= new EstatusTxtIntegrado;
              $modelEstatusTxt->id_estatus_txt=6;
              $modelEstatusTxt->id_datos_txt_integrado=$model->id;
              $modelEstatusTxt->actual=TRUE;
              $modelEstatusTxt->id_usuario=Yii::app()->user->id;

              if($modelEstatusTxt->save()){

                $porcentajeAporte = round((($montoArchivo->aporte * 100)/ $model->total_aportes));

                $montoPagado = ($porcentajeAporte * $proceso_pago->monto_pagado )/100;
echo "<pre>";print_r($model->total_aportes);exit;
                $a=0;

                foreach (AporteFondo::model()->findAll('id_txt=:idtxt AND blnborrado=FALSE',array(':idtxt'=>$model->id)) as $key=>$aporte){

                  $aporte->pagado=TRUE;
                  $aporte->id_aporte_status=3;
                  $aporte->save();
                                    //echo "<pre>";print_r($aporte->attributes);
                  $nuevoAporte = new AporteFondo();
                  $nuevoAporte->id_asociado = $aporte->id_asociado;
                  $nuevoAporte->id_txt = $aporte->id_txt;
                  $nuevoAporte->id_taporte = $aporte->id_taporte;
                  $nuevoAporte->id_tnomina = $aporte->id_tnomina;
                  $nuevoAporte->aporte= ($aporte->aporte !='')? -round((($aporte->aporte/$montoArchivo->aporte)*($montoArchivo->aporte-$montoPagado)),2):NULL;
                  $nuevoAporte->fecha_aporte = $aporte->fecha_aporte;
                  $nuevoAporte->id_unidad = $aporte->id_unidad;
                  $nuevoAporte->id_user = Yii::app()->user->id;
                  $nuevoAporte->aprobado=TRUE;
                  $aporte->referencia=$proceso_pago->referencia;
                  $aporte->fecha_referencia=$proceso_pago->fecha_referencia;
                  $nuevoAporte->pagado=TRUE;
                  $aporte->id_banco_destino=$proceso_pago->banco;
                  $banco=ParamBancos::model()->findByPk($model->banco);

                  if($banco){
                    $aporte->cuenta_destino=$banco->num_cuenta;
                  }else{
                    throw new Exception("Error, banco no encontrado", 1);
                  }

                  $nuevoAporte->observaciones = 'Aporte diferido por pago de la cuota del aporte ='.
                                                    (($aporte->aporte !='')?$aporte->aporte:0);
                  $nuevoAporte->id_aporte_status=4;
                  if(!$nuevoAporte->save()){

                    throw new Exception("Error al guardar diferencia de aporte", 4);
                  }

                  $a+= $nuevoAporte->aporte;
                }

              }

            }
                $transaction->commit();
                Yii::app()->user->setFlash('success', "La nómina ha sido pagada con exito!");
                $this->redirect(array('adminAF'));

          } catch (Exception $e) {

            $transaction->rollBack();
            Yii::app()->user->setFlash('error', $e->getMessage());
            $this->redirect(array('PagarMp', 'id'=>$model->id));
          }
        }
      }
    }else{

      Yii::app()->user->setFlash('error', "La nomina debe estar en estatus Aprobado para poder Pagar");
      $this->redirect(array('adminAF'));
    }

    $this->render('pagar_mp',array(
                  'model'=>$model,
                  'pago'=>$proceso_pago,
    ));

  }

    /**
     * Realiza la carga masiva de Aportes Ordinarios a traves de un archivo excel
     */
    public function actionCargarAporteOrdinario()
    {
        $model = new DatosTxtIntegrado('cmao_form');

        if (isset($_POST['DatosTxtIntegrado'])) {
            $errorLinea = '';
            $totalAportes = 0;
            $model->attributes = $_POST['DatosTxtIntegrado'];
            $uploadedFile = CUploadedFile::getInstance($model, 'nombre_archivo');
            $model->nombre_archivo = $uploadedFile;
            $ruta = Yii::app()->params['rutaNominaAportes'].$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
                $objReader = new PHPExcel_Reader_Excel2007();
                //carga en objphpExcel por medio de objReader,el nombre del archivo
                $objPHPExcel = $objReader->load($ruta);
                $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->cant_aportantes = $objPHPExcel->getActiveSheet()->getCell('A2')->getCalculatedValue();

                    $model->total_aportes = $objPHPExcel->getActiveSheet()->getCell('B2')->getCalculatedValue();
                    $model->total_aportes = str_replace('.', ',', $model->total_aportes);

                    $valor_inicial = $objPHPExcel->getActiveSheet()->getCell('C2')->getValue();
                    //Condicional para verificar si el campo de fecha del archivo excel viene con formato string o numerico
                    if (is_string($valor_inicial)) {
                        if (stristr($valor_inicial, '-') == true) {
                            $valor_inicial = str_replace('-', '/', $valor_inicial);
                            $model->fecha_aporte = $valor_inicial;
                        } else {
                            $model->fecha_aporte = $valor_inicial;
                        }
                    } elseif (is_numeric($valor_inicial)) {
                        $s = $objPHPExcel->getActiveSheet()->getCell('C2')->getValue() + 1;
                        $d = PHPExcel_Shared_Date::ExcelToPHP($s);
                        $model->fecha_aporte = date('d/m/Y', $d);
                    }

                    $model->scenario = 'cmao_linea1';

                    if ($model->validate()) {
                        $e_rrores = [];
                        // Valida La primera linea del archivo, contra el formato de nombre de archivo
                        $fechaNombre = substr($model->nombre_archivo, 5, 8);
                        $fechaLinea1 = str_replace('/', '', $model->fecha_aporte);
                        if ($fechaNombre != $fechaLinea1) {
                            $valido = false;
                            $errorLinea .= 'La fecha ('.$fechaNombre.')en el nombre del archivo no coincide con la fecha ('.$fechaLinea1.') en la primera linea'.'; ';
                        }

                        if ($model->cant_aportantes != $numRows - 3) {
                            $valido = false;
                            $errorLinea .= 'La cantidad de aportantes  '.$model->cant_aportantes.' no coincide con la cantidad de asociados presentes '.($numRows).' en el archivo '.'; ';
                        }
                        // Recorre el archivo en busca de errores
                        $e_rrores[0] = ['Total aportantes', 'Total aportes', 'Fecha aportes', null, null, null, null, null, 'ERRORES'];
                        $e_rrores[1] = [$model->cant_aportantes, $model->total_aportes, $model->fecha_aporte, null, null, null, null, null, $errorLinea];
                        $e_rrores[2] = ['CEDULA', 'UNIDAD', 'SUELDO', 'TIPO NOMINA'/*,'% SOCIO'*/, 'APORTE SOCIO'/*,'% PATRONO'*/, 'APORTE PATRONO', 'ERRORES'];

                        for ($fila = 4; $fila <= $model->cant_aportantes + 3; $fila++) {
                            $errores = '';
                            $modelAporte = new AporteOrdinario('carga_masiva');
                            $modelAporte->cedula = $objPHPExcel->getActiveSheet()->getCell('A'.$fila)->getCalculatedValue();
                            $uni_rrhh = Unidad::model()->find('codigo::int='.(int) $objPHPExcel->getActiveSheet()->getCell('B'.$fila)->getFormattedValue());

                            if (! is_null($uni_rrhh)) {
                                $modelAporte->id_unidad = $uni_rrhh->idunidad;
                            }

                            $modelAporte->sueldo_base = $objPHPExcel->getActiveSheet()->getCell('C'.$fila)->getCalculatedValue();
                            $modelAporte->sueldo_base = str_replace('.', ',', $modelAporte->sueldo_base);
                            $modelAporte->sueldo_base = (float) $modelAporte->sueldo_base;
                            $modelAporte->id_tipo_nomina = $objPHPExcel->getActiveSheet()->getCell('D'.$fila)->getCalculatedValue();
                            $modelAporte->aporte_asociado = round($objPHPExcel->getActiveSheet()->getCell('E'.$fila)->getCalculatedValue(), 2);
                            $modelAporte->aporte_asociado = str_replace('.', ',', $modelAporte->aporte_asociado);
                            $modelAporte->aporte_patrono = round($objPHPExcel->getActiveSheet()->getCell('F'.$fila)->getCalculatedValue(), 2);
                            $modelAporte->aporte_patrono = str_replace('.', ',', $modelAporte->aporte_patrono);
                            if (! $modelAporte->validate()) {
                                $valido = false; //Si contiene al menos un error, el archivo es devuelto
                                $errores .= $modelAporte->getError('cedula').' ';
                                $errores .= $modelAporte->getError('id_unidad').' ';
                                $errores .= $modelAporte->getError('sueldo_base').' ';
                                $errores .= $modelAporte->getError('id_tipo_nomina').' ';
                                $errores .= $modelAporte->getError('aporte_asociado').' ';
                                $errores .= $modelAporte->getError('aporte_patrono').' ';
                                $e_rrores[$fila - 1] = [$modelAporte->cedula, $modelAporte->id_unidad, $modelAporte->sueldo_base, $modelAporte->id_tipo_nomina/*,$modelAporte->p_asociado*/, $modelAporte->aporte_asociado, /*$modelAporte->p_patrono,*/$modelAporte->aporte_patrono, $errores];
                            } else {
                                $e_rrores[$fila] = [$modelAporte->cedula, $modelAporte->id_unidad, $modelAporte->sueldo_base, $modelAporte->id_tipo_nomina, /*$modelAporte->p_asociado,*/$modelAporte->aporte_asociado, /*$modelAporte->p_patrono,*/$modelAporte->aporte_patrono];
                                $modelAporte->aporte_asociado = (float) str_replace(',', '.', $modelAporte->aporte_asociado);
                                $modelAporte->aporte_patrono = (float) str_replace(',', '.', $modelAporte->aporte_patrono);
                                $totalAportes = $totalAportes + $modelAporte->aporte_asociado + $modelAporte->aporte_patrono;
                                $id_unidad = $modelAporte->id_unidad;
                            }
                        }

                        if (round($totalAportes, 2) != round(str_replace(',', '.', $model->total_aportes), 2)) {
                            $valido = false;
                            $errorLinea .= 'El total de aportes declarado en el archivo  '.(round(str_replace(',', '.', $model->total_aportes), 2)).' no coincide con la sumatoria de los aportes presentes en el mismo '.round($totalAportes, 2).' '.'; ';
                            $e_rrores[1] = [$model->cant_aportantes, $model->total_aportes, $model->fecha_aporte, null, null, null, $errorLinea];
                        }

                        if ($valido) {// Si el archivo no contiene errores se procede al guardado
                            $transaction = Yii::app()->db->beginTransaction();
                            try {
                                $model->id_usuario = Yii::app()->user->id;
                                $model->total_aportes = str_replace(',', '.', $model->total_aportes);
                                $model->id_tipo_carga = 2;
                                $model->id_unidad = $id_unidad;

                                //Guarda el encabezado del xls en el modelo
                                if ($model->save()) {
                                    $estatus = 1;
                                    //Recorre el archivo excel para cargar los apòrtes
                                    for ($fila = 4; $fila <= $model->cant_aportantes + 3; $fila++) {
                                        $modelAporte = new AporteOrdinario('carga_masiva_guardado');
                                        $modelAporte->cedula = $objPHPExcel->getActiveSheet()->getCell('A'.$fila)->getCalculatedValue();
                                        $modelAsociado = Asociado::model()->find('id_estatus=1 and cedula=:ci', [':ci' => $modelAporte->cedula]);
                                        if ($modelAsociado) {
                                            $modelAporte->id_asociado = $modelAsociado->idasociado;
                                        }
                                        $modelUnidad = Unidad::model()->find('codigo::int='.(int) $objPHPExcel->getActiveSheet()->getCell('B'.$fila)->getFormattedValue());
                                        if ($modelUnidad) {
                                            $modelAporte->id_unidad = $modelUnidad->idunidad;
                                        }

                                        $modelAporte->sueldo_base = $objPHPExcel->getActiveSheet()->getCell('C'.$fila)->getCalculatedValue();
                                        $modelAporte->sueldo_base = str_replace('.', ',', $modelAporte->sueldo_base);
                                        $modelAporte->sueldo_base = (float) $modelAporte->sueldo_base;
                                        $id_tipo_nomina = $objPHPExcel->getActiveSheet()->getCell('D'.$fila)->getCalculatedValue();
                                        $tipoNomina = TipoNomina::model()->find('codigo_nomina=:cod AND blnborrado=FALSE', [':cod' => $id_tipo_nomina]);
                                        if ($tipoNomina) {
                                            $modelAporte->id_tipo_nomina = $tipoNomina->id;
                                        }
                                        $modelAporte->aporte_asociado = $objPHPExcel->getActiveSheet()->getCell('E'.$fila)->getCalculatedValue();
                                        $modelAporte->aporte_patrono = $objPHPExcel->getActiveSheet()->getCell('F'.$fila)->getCalculatedValue();
                                        $modelAporte->id_usuario = Yii::app()->user->id;
                                        $modelAporte->id_txt = $model->id;
                                        $modelAporte->fecha_aporte = $model->fecha_aporte;
                                        $modelAporte->scenario = 'cm_guardado';

                                        if (! $modelAporte->save()) {
                                            $estatus = 2;
                                            $modelAportesDiferidos = new AporteOrdinarioDiferido('cm_aportes_ordinarios_diferidos');
                                            $modelAportesDiferidos->cedula = $modelAporte->cedula;
                                            $modelAportesDiferidos->id_txt = $model->id;
                                            $modelAportesDiferidos->tipo_nomina = $id_tipo_nomina;
                                            $modelAportesDiferidos->unidad = $modelUnidad->idunidad;
                                            $modelAportesDiferidos->sueldo = $modelAporte->sueldo_base;
                                            $modelAportesDiferidos->aporte_asociado = $modelAporte->aporte_asociado;
                                            $modelAportesDiferidos->p_asociado = null; //$modelAporte->p_asociado;
                                            $modelAportesDiferidos->aporte_patrono = $modelAporte->aporte_patrono;
                                            $modelAportesDiferidos->p_patrono = null; //$modelAporte->p_patrono;
                                            $modelAportesDiferidos->observaciones = json_encode($modelAporte->getErrors());
                                            $modelAportesDiferidos->id_estatus_aod = 1;
                                            $modelAportesDiferidos->save();
                                        }
                                    }

                                    $modelEstatusIntegrado = new EstatusTxtIntegrado('aporte_voluntario');
                                    $modelEstatusIntegrado->id_datos_txt_integrado = $model->id;
                                    $modelEstatusIntegrado->id_estatus_txt = $estatus;
                                    $modelEstatusIntegrado->actual = true;
                                    $modelEstatusIntegrado->save();

                                    $transaction->commit();
                                    $this->redirect(['viewCmao', '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(['cargarAporteOrdinario']);
                            }
                        } else { //Si el Archivo contiene errores
                            $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('cant_aportantes', 'El Archivo no contiene ningun aporte');
                }
            }//if($model->validate()) si el modelo DatosTxtIntegrado es valido
        }//Fin if(isset($_POST['DatosTxtIntegrado']))

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

        /*
         * Realiza la carga masiva de Aportes voluntarios del patrono a traves de un archivo excel
         *
         *
         */
        public function actionCargarAporteVoluntario()
  {
    $model=new DatosTxtIntegrado('aporte_voluntario');
    $modelConfAE = ConfAporteVoluntario::getConf();

    // if (isset($_POST['ConfAporteVoluntario'])) {
    //     $modelConfAE->attributes = $_POST['ConfAporteVoluntario'];
    //     $modelConfAE->save();
    //     SeguimientoConfAporteVoluntario::registrar($_POST['ConfAporteVoluntario']);
    // }

    if(isset($_POST['DatosTxtIntegrado']))
    {
                    $errorLinea = array();
                    $totalAportes=0;
                    $model->attributes=$_POST['DatosTxtIntegrado'];
                    $uploadedFile=CUploadedFile::getInstance($model,'nombre_archivo');
                    $model->nombre_archivo=$uploadedFile;

                    $ruta=Yii::app()->params['rutaNominaAportes'].$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(array('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(array('YiiBase','autoload'));

                    // Cargando la hoja de calculo
                    $objReader = new PHPExcel_Reader_Excel2007(); //instancio un objeto como PHPExcelReader(objeto de captura de datos de excel)

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

                    ##############################################################################################
                    #######nueva variable que contiene el total de rows vacias basado en la columna de cedula############

                    //Array que contiene las letras de las columnas que posee el archivo, solo funciona hasta la Z.
                    /*$cols = ord($objPHPExcel->getActiveSheet()->getHighestDataColumn());
                    $col_excel = array();
                    for ($i=65; $i <= $cols ; $i++) {

                      array_push($col_excel, chr($i));
                    }*/

                    $col_base = 'A';
                    $num_rows_vacia = array('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_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->fecha_aporte = $objPHPExcel->getActiveSheet()->getCell('A2')->getFormattedValue();
                        $model->cant_aportantes = $objPHPExcel->getActiveSheet()->getCell('B2')->getCalculatedValue();
                        $model->total_aportes = $objPHPExcel->getActiveSheet()->getCell('C2')->getCalculatedValue();

                        $valor_inicial = $objPHPExcel->getActiveSheet()->getCell('A2')->getValue();

                        //Condicional para verificar si el campo de fecha del archivo excel viene con formato string o numerico
                        if (is_string($valor_inicial)) {

                          if (stristr($valor_inicial, "-") == true) {

                            $valor_inicial = str_replace('-', '/', $valor_inicial);
                            $model->fecha_aporte = $valor_inicial;

                          }else{

                            $model->fecha_aporte = $valor_inicial;

                          }

                        }elseif (is_numeric($valor_inicial)) {

                          $s = $objPHPExcel->getActiveSheet()->getCell("A2")->getValue()+1;
                          $d = PHPExcel_Shared_Date::ExcelToPHP($s);
                          $model->fecha_aporte = date('d/m/Y',$d);

                        }

                        $model->scenario='linea1';
                        if($model->validate())
                        {
                            $e_rrores=array();
            # Valida La primera linea del archivo, contra el formato de nombre de archivo
                            $fechaNombre = substr($model->nombre_archivo, 6,8);
                            $fechaLinea1=str_replace("/", "", $model->fecha_aporte);
                            if($fechaNombre!=$fechaLinea1)
                                {
                                //echo $fechaNombre.' '.$fechaLinea1;exit;
                                $valido = false;
                                $errorLinea[1] = 'La fecha en el nombre del archivo no coincide con la fecha en la primera linea';
                                }
                            if($model->cant_aportantes!=$numRows-3){
                                $valido = false;
                                $errorLinea[2] = 'La cantidad de aportantes no coincide con la cantidad de asociados presentes en el archivo';
                            }
                            $e_rrores[0]=array('Fecha de aporte','Numero de aportantes','Total aportes');
                            $e_rrores[1]=array($model->fecha_aporte,$model->cant_aportantes,$model->total_aportes);
                            $e_rrores[2]=array('CEDULA','MONTO','UNIDAD');
                # Recorre el archivo en busca de errores

                            for ($fila=4;$fila<=$model->cant_aportantes+3;$fila++)
                            {
                              if (empty($objPHPExcel->getActiveSheet()->getCell('A'.$fila)->getCalculatedValue())) {
                                  break;
                              }

                              $errores='';
                              $modelAporteVoluntario=new AporteVoluntario('carga_masiva');
                              $modelAporteVoluntario->acedula=$objPHPExcel->getActiveSheet()->getCell('A'.$fila)->getCalculatedValue();
                              $modelAporteVoluntario->monto_cargado = $objPHPExcel->getActiveSheet()->getCell('B'.$fila)->getFormattedValue();
                              $uni_rrhh= Unidad::model()->find('codigo::int='.(int) $objPHPExcel->getActiveSheet()->getCell('C'.$fila)->getFormattedValue());
                              $modelAporteVoluntario->aid_unidad = $uni_rrhh->idunidad;
                              $modelAporteVoluntario->id_aportante = $objPHPExcel->getActiveSheet()->getCell('D'.$fila)->getCalculatedValue();
                              $modelAsociado = Asociado::model()->find('id_estatus=1 and cedula=:ci',array(':ci'=>$modelAporteVoluntario->acedula));
                              if (! is_null($modelAsociado)) {
                                  $modelAporteVoluntario->opcion_retiro = $modelAsociado->aporte_voluntario;
                                  $cuenta = AsociadoCuentaBanco::getCuentaPrincipal($modelAsociado->idasociado);

                                  if ($modelAporteVoluntario->opcion_retiro == 2 && ! is_null($cuenta)) {
                                        $modelAporteVoluntario->id_banco_asociado = $cuenta->id_banco;
                                        $modelAporteVoluntario->cuenta_destino = $cuenta->cuenta_bancaria;
                                  }
                              }
                              if(!$modelAporteVoluntario->validate())
                                {
                                    $valido=false;#Si contiene al menos un errors, el archivo es devuelto
                                    $errores.=$modelAporteVoluntario->getError('acedula').' ';
                                    $errores.=$modelAporteVoluntario->getError('monto').' ';
                                    $errores.=$modelAporteVoluntario->getError('aid_unidad').' ';
                                    $errores.=$modelAporteVoluntario->getError('id_aportante').' ';
                                    $e_rrores[$fila-1]=array($modelAporteVoluntario->acedula,$modelAporteVoluntario->monto_cargado,$modelAporteVoluntario->aid_unidad,$modelAporteVoluntario->id_aportante,$errores);
                                }
                                else{
                                    $valido = true;
                                    $e_rrores[$fila-1]=array($modelAporteVoluntario->acedula,$modelAporteVoluntario->monto_cargado,$modelAporteVoluntario->aid_unidad,$modelAporteVoluntario->id_aportante);
                                }
                                $totalAportes += $modelAporteVoluntario->monto_cargado;
                             }
                            if(abs(floatval($totalAportes) - floatval($model->total_aportes)) > 0.00001)
                                {

                                $valido = false;
                                $errorLinea[3] = 'El total de aportes declarado en el archivo, no coincide con la sumatoria de los aportes presentes en el mismo';

                                }
                            if ($valido)# Si el archivo no contiene errores se procede al guardado
                            {
                                $transaction=Yii::app()->db->beginTransaction();
                                try
                                {

                                    $model->id_tipo_carga=1;
                                    $model->id_unidad=$modelAporteVoluntario->aid_unidad;
                                    $model->id_usuario=Yii::app()->user->id;
                                  //echo '<pre>'; print_r($model->attributes);exit;
                    #Guarda el encabezado del xls en el modelo
                                   if($model->save())
                                    {
                                        $estatus=1;

                                        SeguimientoConfAporteVoluntario::registrar($model->id, $_POST);

                                       #Recorre el archivo excel para cargar los apòrtes
                                       for ($fila=4;$fila<=$model->cant_aportantes+3;$fila++)
                                        {

                                            $modelAporteVoluntario=new AporteVoluntario('carga_masiva_guardado');
                                            $modelAporteVoluntario->acedula=$objPHPExcel->getActiveSheet()->getCell('A'.$fila)->getCalculatedValue();
                                            $modelAsociado=  Asociado::model()->find('id_estatus=1 and cedula=:ci',array(':ci'=>$modelAporteVoluntario->acedula));
                                            if(! is_null($modelAsociado)){
                                                $modelAporteVoluntario->id_asociado = $modelAsociado->idasociado;
                                            }
                                            $modelAporteVoluntario->monto_cargado = $objPHPExcel->getActiveSheet()->getCell('B'.$fila)->getCalculatedValue();

                                            $modelUnidad= Unidad::model()->find('codigo::int='.(int) $objPHPExcel->getActiveSheet()->getCell('C'.$fila)->getFormattedValue());
                                            $modelAporteVoluntario->aid_unidad = $modelUnidad->idunidad;

                                            if($modelUnidad)$modelAporteVoluntario->id_unidad=$modelAporteVoluntario->aid_unidad;
                                            $modelAporteVoluntario->id_txt_integrado=$model->id;

                                            $modelAporteVoluntario->id_aportante=$objPHPExcel->getActiveSheet()->getCell('D'.$fila)->getCalculatedValue();
                                            $modelAporteVoluntario->fecha_pago=$model->fecha_aporte;
                                            if (! is_null($modelAsociado)) {
                                                $modelAporteVoluntario->opcion_retiro = $modelAsociado->aporte_voluntario;
                                                $cuenta = AsociadoCuentaBanco::getCuentaPrincipal($modelAsociado->idasociado);

                                                if ($modelAporteVoluntario->opcion_retiro == 2 && ! is_null($cuenta)) {
                                                    $modelAporteVoluntario->id_banco_asociado = $cuenta->id_banco;
                                                    $modelAporteVoluntario->cuenta_destino = $cuenta->cuenta_bancaria;
                                                }
                                            }
                                            $modelAporteVoluntario->aplicarComisionAdministrativa();

                                            if(!$modelAporteVoluntario->save())
                                            {
                                               $estatus=2;
                                               $modelDiferido= new AporteVoluntarioDiferido;
                                               $modelDiferido->cedula= $modelAporteVoluntario->acedula;
                                               $modelDiferido->monto=$modelAporteVoluntario->monto_cargado;
                                               $modelDiferido->area=$modelAporteVoluntario->aid_unidad;
                                               $modelDiferido->aportante=$modelAporteVoluntario->id_aportante;
                                               $modelDiferido->id_txt=$model->id;
                                               $modelDiferido->id_estatus_avd=1;
                                               $modelDiferido->save();

                                             }

                                            EstatusAporteVoluntario::seguimiento($modelAporteVoluntario->id, 1);
                                         }

                                        $modelEstatusIntegrado= new EstatusTxtIntegrado('aporte_voluntario');
                                        $modelEstatusIntegrado->id_datos_txt_integrado=$model->id;
                                        $modelEstatusIntegrado->id_estatus_txt=$estatus;
                                        $modelEstatusIntegrado->actual=TRUE;
                                        $modelEstatusIntegrado->save();

                                       $transaction->commit(); #Ejecuta todas las operaciones
                                       $this->redirect(array('adminAE'));
                                    }
                                    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(array('cargarAporteVoluntario'));
                                }
                            }
                            else
                            { #Si el Archivo contiene errores

                                $objPHPExcel2 = new PHPExcel();
                                $objPHPExcel2->getActiveSheet()->fromArray($e_rrores,NULL,'A1');
                                $objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel2);
                                $objWriter->setOffice2003Compatibility(true);
//                                $objWriter->save("doc/ReporteErrores.xlsx");
//                                Yii::app()->user->setFlash('error', "El archivo contiene errores, verifique ".CHtml::link('AQU?', "doc/ReporteErrores.xlsx",array('target'=>'_blank')));
                                $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",array('target'=>'_blank')));
                                if (! $valido) {
                                    Yii::app()->user->setFlash('error_cabecera', $errorLinea);
                                }
                             }

                         }# Fin de la validacion de la primera linea

                     }# Fin if ($numRows>3), es decir, si el archivo no esta vacio
                     else {
                         Yii::app()->user->setFlash('error', "El archivo no contiene ningun aporte");
                     }

               }#if($model->validate()) si el modelo DatosTxtIntegrado es valido

            }#Fin if(isset($_POST['DatosTxtIntegrado']))

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

        public function actionCargarAporteMontepio()
  {
    $model=new DatosTxtIntegrado('aporte_montepio');

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

    if(isset($_POST['DatosTxtIntegrado']))
    {
                    $errorLinea='';
                    $totalAportes=0;
                    $model->attributes=$_POST['DatosTxtIntegrado'];
                    $uploadedFile=CUploadedFile::getInstance($model,'nombre_archivo');
                    $model->nombre_archivo=$uploadedFile;

                    $ruta=Yii::app()->params['rutaNominaAportes'].$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(array('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(array('YiiBase','autoload'));

                    // Cargando la hoja de calculo
                    $objReader = new PHPExcel_Reader_Excel2007(); //instancio un objeto como PHPExcelReader(objeto de captura de datos de excel)
                    $objPHPExcel = $objReader->load($ruta); //carga en objphpExcel por medio de objReader,el nombre del archivo
                    $objPHPExcel->setActiveSheetIndex(0);
                    $numRows = $objPHPExcel->setActiveSheetIndex(0)->getHighestRow();
                    $valido=true;

                    if ($numRows>3)
                    {
                    # Valida que los campos de la primera linea cumplan con el formato
                        $model->cant_aportantes = $objPHPExcel->getActiveSheet()->getCell('A2')->getCalculatedValue();
                        $model->total_aportes = $objPHPExcel->getActiveSheet()->getCell('B2')->getCalculatedValue();
                        $model->fecha_aporte = $objPHPExcel->getActiveSheet()->getCell('C2')->getFormattedValue();

                        $model->scenario='linea1';
                        if($model->validate())
                        {
                            $e_rrores=array();
                    # Valida La primera linea del archivo, contra el formato de nombre de archivo
                            $fechaNombre = substr($model->nombre_archivo, 6,8);
                            $fechaLinea1=str_replace("/", "", $model->fecha_aporte);
                            if($fechaNombre!=$fechaLinea1)
                                {
                                //echo $fechaNombre.' '.$fechaLinea1;exit;
                                $valido==FALSE;
                                $errorLinea.='La fecha en el nombre del archivo no coincide con la fecha en la primera linea'.'\n';
                                }
                            if($model->cant_aportantes!=$numRows-2){
                                $valido==FALSE;
                                $errorLinea.='La cantidad de aportantes no coincide con la cantidad de asociados presentes en el archivo'.'\n';
                            }
                            $e_rrores[0]=array('Fecha de aporte','Numero de aportantes','Total aportes');
                            $e_rrores[1]=array($model->fecha_aporte,$model->cant_aportantes,$model->total_aportes);
                            $e_rrores[2]=array('CEDULA','MONTO','UNIDAD');
                # Recorre el archivo en busca de errores

                            for ($fila=4;$fila<=$model->cant_aportantes+3;$fila++)
                            {
                              $errores='';
                              $modelAporteMontePio=new AporteMontePio('carga_masiva_mp');
                              $modelAporteMontePio->acedula=$objPHPExcel->getActiveSheet()->getCell('A'.$fila)->getCalculatedValue();
                              $modelAporteMontePio->monto = $objPHPExcel->getActiveSheet()->getCell('B'.$fila)->getFormattedValue();
                              $modelAporteMontePio->aid_unidad = $objPHPExcel->getActiveSheet()->getCell('C'.$fila)->getCalculatedValue();

                              if(!$modelAporteMontePio->validate())
                                {
                                    echo '<pre>';print_r($modelAporteMontePio->getErrors());exit;
                                    $valido=false;#Si contiene al menos un errors, el archivo es devuelto
                                    $errores.=$modelAporteMontePio->getError('acedula').' ';
                                    $errores.=$modelAporteMontePio->getError('monto').' '.$modelAporteMontePio->monto.' ';
                                    $errores.=$modelAporteMontePio->getError('aid_unidad').' ';

                                    $e_rrores[$fila-1]=array($modelAporteMontePio->acedula,$modelAporteMontePio->monto,$modelAporteMontePio->aid_unidad,$errores);

                                }
                                else{
                                    $e_rrores[$fila-1]=array($modelAporteMontePio->acedula,$modelAporteMontePio->monto,$modelAporteMontePio->aid_unidad);
                                    $totalAportes=$totalAportes+$modelAporteMontePio->monto;

                                }
                             }
                            if($totalAportes!=$model->total_aportes)
                                {

                                $valido==FALSE;
                                $errorLinea.='El total de aportes declarado en el archivo, no coincide con la sumatoria de los aportes presentes en el mismo'.'\n';

                                }

                            if ($valido)# Si el archivo no contiene errores se procede al guardado
                            {
                                $transaction=Yii::app()->db->beginTransaction();
                                try
                                {

                                    $model->id_tipo_carga=3;
                                    $model->id_usuario=Yii::app()->user->id;

                                  //echo '<pre>'; print_r($model->attributes);exit;
                                #Guarda el encabezado del xls en el modelo
                                   if($model->save())
                                    { $estatus=1;
                                       #Recorre el archivo excel para cargar los apòrtes
                                       for ($fila=4;$fila<=$model->cant_aportantes+3;$fila++)
                                        {

                                            $modelAporteMontePio=new AporteMontePio('carga_masiva_guardado');
                                            $modelAporteMontePio->acedula=$objPHPExcel->getActiveSheet()->getCell('A'.$fila)->getCalculatedValue();
                                            $modelAsociado=  Asociado::model()->find('id_estatus=1 and cedula=:ci',array(':ci'=>$modelAporteMontePio->acedula));
                                            if($modelAsociado)$modelAporteMontePio->id_asociado=$modelAsociado->idasociado;
                                            $modelAporteMontePio->monto = $objPHPExcel->getActiveSheet()->getCell('B'.$fila)->getCalculatedValue();
                                            $modelAporteMontePio->aid_unidad = $objPHPExcel->getActiveSheet()->getCell('C'.$fila)->getCalculatedValue();
                                            $modelUnidad=Unidad::model()->findByPk($modelAporteMontePio->aid_unidad);
                                            if($modelUnidad)$modelAporteMontePio->id_unidad=$modelAporteMontePio->aid_unidad;
                                            $modelAporteMontePio->id_txt_integrado=$model->id;

                                            $modelAporteMontePio->id_aportante=1;
                                            $modelAporteMontePio->fecha_pago=$model->fecha_aporte;
                                            if(!$modelAporteMontePio->save())
                                            {
                                               $estatus=2;
                                               $modelDiferido= new AporteVoluntarioDiferido;
                                               $modelDiferido->cedula= $modelAporteMontePio->acedula;
                                               $modelDiferido->monto=$modelAporteMontePio->monto;
                                               $modelDiferido->area=$modelAporteMontePio->aid_unidad;
                                               $modelDiferido->aportante=1;
                                               $modelDiferido->id_txt=$model->id;
                                               $modelDiferido->id_estatus_avd=1;
                                               $modelDiferido->save();

                                             }


                                         }
                                        $modelEstatusIntegrado= new EstatusTxtIntegrado('aporte_montepio');
                                        $modelEstatusIntegrado->id_datos_txt_integrado=$model->id;
                                        $modelEstatusIntegrado->id_estatus_txt=$estatus;
                                        $modelEstatusIntegrado->actual=TRUE;
                                        $modelEstatusIntegrado->save();

                                       $transaction->commit(); #Ejecuta todas las operaciones
                                       $this->redirect(array('adminMP'));
                                    }
                                    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(array('cargarAporteVoluntario'));
                                }
                            }
                            else
                            { #Si el Archivo contiene errores

                                $objPHPExcel2 = new PHPExcel();
                                $objPHPExcel2->getActiveSheet()->fromArray($e_rrores,NULL,'A1');
                                $objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel2);
                                $objWriter->setOffice2003Compatibility(true);
//                                $objWriter->save("doc/ReporteErrores.xlsx");
//                                Yii::app()->user->setFlash('error', "El archivo contiene errores, verifique ".CHtml::link('AQU?', "doc/ReporteErrores.xlsx",array('target'=>'_blank')));
                                $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",array('target'=>'_blank')));

                             }

                         }# Fin de la validacion de la primera linea

                     }# Fin if ($numRows>3), es decir, si el archivo no esta vacio
                     else {
                         Yii::app()->user->setFlash('error', "El archivo no contiene ningun aporte");
                     }

               }#if($model->validate()) si el modelo DatosTxtIntegrado es valido

            }#Fin if(isset($_POST['DatosTxtIntegrado']))

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

    public function actionCargaNominaPrestamos($id)
    {
        $modelPrenomina = DatosPreNominaCredito::model()->findByPk($id);
        if ($modelPrenomina === null) {
            Yii::app()->user->setFlash('error', 'No se pudo encontrar la prenomina.');
            $this->redirect(['/prestamo/DatosPreNominaCredito/admin']);
        }

        if ($modelPrenomina->nominaConciliada()) {
            Yii::app()->user->setFlash('error', 'Ya se ha conciliado una nomina');
            $this->redirect(['/prestamo/DatosPreNominaCredito/view', 'id' => $modelPrenomina->id]);
        }

        $modelConfiguracionPrenomina = ConfPreNomina::model()->find();
        if (! $modelConfiguracionPrenomina) {
            Yii::app()->user->setFlash('error', 'No existe el metodo de distribución para las cuotas diferidas, Por favor defina el método y vuelva a intentarlo');
            $this->redirect(['/prestamo/DatosPreNominaCredito/view', 'id' => $modelPrenomina->id]);
        }

        $model = new DatosTxtIntegrado('aporte_creditos');

        if (isset($_POST['DatosTxtIntegrado'])) {
            $errorLinea = '';
            $totalAportes = 0;
            $model->attributes = $_POST['DatosTxtIntegrado'];
            $uploadedFile = CUploadedFile::getInstance($model, 'nombre_archivo');
            $model->nombre_archivo = $uploadedFile->getName();
            $ruta = Yii::app()->params['rutaNominaAportes'].$uploadedFile;
            $model->id_prenomina_credito = $id;
            if ($model->validate()) {
                $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']);

                // Si es .xls o xlsx
                if ($uploadedFile->getExtensionName() == 'xls') {
                    $objReader = new PHPExcel_Reader_Excel5();
                    $objPHPExcel = $objReader->load($ruta);
                } else {
                    $objPHPExcel = PHPExcel_IOFactory::load($ruta);
                }

                $objPHPExcel->setActiveSheetIndex(0);
                $numRows = $objPHPExcel->getActiveSheet()->getHighestDataRow();
                $columna = $objPHPExcel->getActiveSheet()->rangeToArray('A1:'.'A'.$numRows, '', false, false, true);
                unset($columna['1'], $columna['2'], $columna['3']);

                $valido = true;
                if ($numRows > 3) {
                    // Valida que los campos de la primera linea cumplan con el formato
                    $model->cant_aportantes = $objPHPExcel->getActiveSheet()->getCell('A2')->getCalculatedValue();
                    $model->total_aportes = $objPHPExcel->getActiveSheet()->getCell('B2')->getCalculatedValue();
                    $model->total_aportes = str_replace(',', '.', str_replace('.', ',', $model->total_aportes));

                    $fechas = [
                        'fd' => $objPHPExcel->getActiveSheet()->getCell('C2')->getValue(),
                        'fh' => $objPHPExcel->getActiveSheet()->getCell('D2')->getValue(),
                    ];

                    // Condicional para verificar si el campo de fecha del archivo excel viene con formato string o numerico
                    if ($fechas['fd'] != '' && $fechas['fh'] != '') {
                        foreach ($fechas as $rango => $fecha) {
                            if ($rango == 'fd') {
                                if (is_string($fecha)) {
                                    if (stristr($fecha, '/') == true) {
                                        $fecha = str_replace('/', '-', $fecha);
                                        $model->fecha_desde = $fecha;
                                    } else {
                                        $model->fecha_desde = $fecha;
                                    }
                                } elseif (is_numeric($fecha)) {
                                    $fecha = $fecha + 1;
                                    $d = PHPExcel_Shared_Date::ExcelToPHP($fecha);
                                    $model->fecha_desde = date('d-m-Y', $d);
                                }
                            }

                            if ($rango == 'fh') {
                                if (is_string($fecha)) {
                                    if (stristr($fecha, '/') == true) {
                                        $fecha = str_replace('/', '-', $fecha);
                                        $model->fecha_hasta = $fecha;
                                    } else {
                                        $model->fecha_hasta = $fecha;
                                    }
                                } elseif (is_numeric($fecha)) {
                                    $fecha = $fecha + 1;
                                    $d = PHPExcel_Shared_Date::ExcelToPHP($fecha);
                                    $model->fecha_hasta = date('d-m-Y', $d);
                                }
                            }
                        }
                    } else {
                        $model->fecha_desde = null;
                        $model->fecha_hasta = null;
                    }

                    $model->scenario = 'carga_retenciones';
                    if ($model->validate()) {
                        // Valida La primera linea del archivo, contra el formato de nombre de archivo
                        if ($model->cant_aportantes != $numRows - 3) {
                            $valido = false;
                            $errorLinea .= 'La cantidad de ('.$model->cant_aportantes.') retenciones declaradas 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 = [];
                        $e_rrores[0] = ['Total retenciones', 'Monto total en retenciones', 'Fecha desde', 'Fecha hasta', null, null, null, null, 'ERRORES'];
                        $e_rrores[1] = [$model->cant_aportantes, $model->total_aportes, $model->fecha_desde, $model->fecha_hasta, null, null, null, null, $errorLinea];
                        $e_rrores[2] = ['Cédula', 'Codigo de empresa', 'Clave del préstamo', 'Monto de la cuota', 'Tipo de cuota'];

                        for ($fila = 4; $fila <= $model->cant_aportantes + 3; ++$fila) {
                            $errores = '';
                            $valid = true;
                            $modelAporte = new DatosTxtTablaAmortizacion('carga_masiva');
                            $modelAporte->cedula = $objPHPExcel->getActiveSheet()->getCell('A'.$fila)->getCalculatedValue();
                            $modelAporte->codigo_unidad = (int) $objPHPExcel->getActiveSheet()->getCell('B'.$fila)->getFormattedValue();
                            $modelAporte->id_tipo_credito = (int) $objPHPExcel->getActiveSheet()->getCell('C'.$fila)->getFormattedValue();
                            $modelAporte->monto_cuota_pagado = str_replace('.', ',', $objPHPExcel->getActiveSheet()->getCell('D'.$fila)->getCalculatedValue());
                            $modelAporte->tipo_cuota = $objPHPExcel->getActiveSheet()->getCell('E'.$fila)->getCalculatedValue();
                            $modelAporte->id_prenomina = $id;

                            // Si contiene al menos un error, el archivo es devuelto
                            if (! $modelAporte->validate()) {
                                $valid = false;
                                $errores .= $modelAporte->getError('cedula').' ';
                                $errores .= $modelAporte->getError('codigo_unidad').' ';
                                $errores .= $modelAporte->getError('id_tipo_credito').' ';
                                $errores .= $modelAporte->getError('monto_cuota_pagado').' ';
                                $errores .= $modelAporte->getError('tipo_cuota').' ';
                                if (! $modelAporte->getError('monto_cuota_pagado')) {
                                    $totalAportes += str_replace(',', '.', $modelAporte->monto_cuota_pagado);
                                }
                            } else {
                                $valid = true;
                                $e_rrores[$fila] = [$modelAporte->cedula, $modelAporte->codigo_unidad, $modelAporte->id_tipo_credito, $modelAporte->monto_cuota_pagado, $modelAporte->tipo_cuota];
                                $totalAportes += str_replace(',', '.', $modelAporte->monto_cuota_pagado);
                            }

                            if (! $valid) {
                                $valido = $valido && false;
                                $e_rrores[$fila] = [$modelAporte->cedula, $modelAporte->codigo_unidad, $modelAporte->id_tipo_credito, $modelAporte->monto_cuota_pagado, $modelAporte->tipo_cuota, $errores];
                            }
                        }

                        if (round($totalAportes, 2) != round(str_replace(',', '.', $model->total_aportes), 2)) {
                            $valido = false;
                            $errorLinea .= 'El total de retenciones declarado en el archivo '.$model->total_aportes.', no coincide con la sumatoria de las retenciones presentes en el mismo '.$totalAportes.';  ';
                            $e_rrores[1] = [$model->cant_aportantes, $model->total_aportes, $model->fecha_desde, $model->fecha_desde, null, null, null, null, $errorLinea];
                        }

                        // Si el archivo no contiene errores se procede al guardado
                        if ($valido) {
                            $transaction = Yii::app()->db->beginTransaction();
                            try {
                                $model->id_usuario = Yii::app()->user->id;
                                $model->total_aportes = str_replace(',', '.', $model->total_aportes);
                                $model->id_tipo_carga = 5;

                                $model->id_unidad = DatosPreNominaCredito::model()->findByPk($id)->id_unidad;
                                $model->id_prenomina_credito = $id;

                                if ($model->save()) {
                                    for ($fila = 4; $fila <= $model->cant_aportantes + 3; ++$fila) {
                                        DatosTxtTablaAmortizacionTmp::create([
                                            'id_txt' => $model->id,
                                            'cedula' => $objPHPExcel->getActiveSheet()->getCell('A'.$fila)->getCalculatedValue(),
                                            'codigo_unidad' => $objPHPExcel->getActiveSheet()->getCell('B'.$fila)->getCalculatedValue(),
                                            'id_tipo_credito' => $objPHPExcel->getActiveSheet()->getCell('C'.$fila)->getFormattedValue(),
                                            'tipo_cuota' => $objPHPExcel->getActiveSheet()->getCell('E'.$fila)->getFormattedValue(),
                                            'monto_cuota' => $objPHPExcel->getActiveSheet()->getCell('D'.$fila)->getFormattedValue(),
                                        ]);
                                    }

                                    (new CargarNominaPrestamosAction([
                                        'id_nomina' => $model->id,
                                        'id_prenomina' => $modelPrenomina->id
                                    ]))->execute();

                                    // Ejecuta todas las operaciones
                                    $transaction->commit();
                                    $this->redirect(['/prestamo/DatosPreNominaCredito/view', 'id' => $model->id_prenomina_credito]);
                                } else {
                                    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(['/prestamo/DatosPreNominaCredito/view', 'id' => $model->id_prenomina_credito]);
                            }
                        } else { //Si el Archivo contiene errores
                            $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
                } else {
                    $model->addError('cant_aportantes', 'El Archivo no contiene ningun aporte');
                }
            }
        }

        $sql = 'select nombre_titulo,descripcion,count(id_tabla_amortizacion) cantidad_cuota,  sum(monto_capital) as capital , sum(monto_interes) as interes, sum(monto_cuota) as monto from prestamos.pre_nomina_tabla_amortizacion as a
                    JOIN prestamos.credito_tabla_amortizacion as b on a.id_tabla_amortizacion=  b.id
                    JOIN prestamos.credito as c on b.idcredito=c.id
                    JOIN prestamos.tipo_credito as d on c.id_tipo_credito=d.id
                    LEFT JOIN prestamos.titulo_tipo_credito as e on d.id_titulo_tipo_credito=e.id
                    where id_pre_nomina_credito = '.(int) $id.'
                    GROUP BY nombre_titulo,descripcion
                    ORDER by nombre_titulo, descripcion, count(id_tabla_amortizacion), sum(monto_cuota) ';
        $data = Yii::app()->db->createCommand($sql)->queryAll();

        $this->render('carga_masiva_credito', [
            'model' => $model,
            'modelPrenomina' => $modelPrenomina,
            'data' => $data,
        ]);
    }

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

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

    /**
     * Deletes a particular model.
     * If deletion is successful, the browser will be redirected to the 'admin' page.
     * @param integer $id the ID of the model to be deleted
     */
    public function actionDelete($id)
    {
        if (Yii::app()->request->isPostRequest) {
            $transaction = Yii::app()->db->beginTransaction();
            try {
                $model = $this->loadModel($id);
                if ($model->getEstatusSc() != 'Aprobado' && $model->getEstatusSc() != 'Pagado') {
                    $model->blnborrado = true;
                    if ($model->save(false)) {
                        if ($model->id_tipo_carga == 1) {
                            AporteVoluntario::model()->updateAll(['blnborrado' => true], 'id_txt_integrado=:id', [':id' => $model->id]);
                            AporteVoluntarioDiferido::model()->updateAll(['blnborrado' => true], 'id_txt=:id', [':id' => $model->id]);

                            $aportes = Yii::app()->getDb()->createCommand('
                                select id
                                from retenciones.aporte_voluntario
                                where id_txt_integrado=:id
                            ')->bindValue('id', $model->id)->queryAll();

                            foreach ($aportes as $aporte) {
                                EstatusAporteVoluntario::create([
                                    'id_aporte_voluntario' => $aporte['id'],
                                    'id_status_av' => 6,
                                ]);
                            }
                        } elseif ($model->id_tipo_carga == 2) {
                            AporteOrdinario::model()->updateAll(['blnborrado' => true], 'id_txt=:id', [':id' => $model->id]);
                            AporteOrdinarioDiferido::model()->updateAll(['blnborrado' => true], 'id_txt=:id', [':id' => $model->id]);
                        } elseif ($model->id_tipo_carga == 3 || $model->id_tipo_carga == 4) {
                            AporteFondo::model()->updateAll(['blnborrado' => true], 'id_txt=:id', [':id' => $model->id]);
                            AporteFondoDiferido::model()->updateAll(['blnborrado' => true], 'id_txt=:id', [':id' => $model->id]);
                        } elseif ($model->id_tipo_carga == 5) {
                            DatosTxtTablaAmortizacion::model()->updateAll(['blnborrado' => true, 'actual' => false], 'id_txt=:id', [':id' => $model->id]);
                            PreNominaSeguimiento::model()->updateAll(['actual' => false], 'id_pre_nomina_credito=:id', [':id' => $model->id_prenomina_credito]);
                            $modelEstatusP = new PreNominaSeguimiento();
                            $modelEstatusP->id_estatus_pre_nomina = 6;
                            $modelEstatusP->id_pre_nomina_credito = $model->id_prenomina_credito;
                            $modelEstatusP->actual = true;
                            $modelEstatusP->save();

                            //cobro de diferedidos
                            //todos los cobros de la tabla datos txt tabla amortizacion
                            foreach (CobroDiferencialCuota::model()->findAll('id in (SELECT cobro.id FROM prestamos.cobro_diferencial_cuota as cobro
                                                                                                                        JOIN prestamos.datos_txt_tabla_amortizacion as txt ON cobro.id_proceso = txt.id AND id_nombre_proceso = 1
                                                                                                                        WHERE id_txt =:id_txt)', [':id_txt' => $model->id]) as $key => $value) {
                                // code...
                                CobroDiferencialCuotaSeguimiento::model()->updateAll(['actual' => false, 'id_usuario' => Yii::app()->user->id,
                                                                                          'id_cobro_diferencial_cuota =:id_cobro_diferencial_cuota)', [':id_cobro_diferencial_cuota' => $value->id], ]);

                                $modelSeguimiento = new CobroDiferencialCuotaSeguimiento();
                                $modelSeguimiento->id_cobro_diferencial_cuota = $value->id;
                                $modelSeguimiento->id_estatus_cobro_cuota = 2;
                                $modelSeguimiento->save();
                            }
                            //todos los cobros de la tabla pre nomina
                            foreach (CobroDiferencialCuota::model()->findAll('id in (SELECT cobro.id FROM prestamos.cobro_diferencial_cuota as cobro
                                                                                                                      JOIN prestamos.pre_nomina_tabla_amortizacion as txt ON cobro.id_proceso = txt.id AND id_nombre_proceso = 2
                                                                                                                        WHERE id_pre_nomina_credito =:id)', [':id' => $model->id_prenomina_credito]) as $key => $value) {
                                // code...
                                CobroDiferencialCuotaSeguimiento::model()->updateAll(['actual' => false, 'id_usuario' => Yii::app()->user->id,
                                                                                          'id_cobro_diferencial_cuota =:id_cobro_diferencial_cuota)', [':id_cobro_diferencial_cuota' => $value->id], ]);

                                $modelSeguimiento = new CobroDiferencialCuotaSeguimiento();
                                $modelSeguimiento->id_cobro_diferencial_cuota = $value->id;
                                $modelSeguimiento->id_estatus_cobro_cuota = 2;
                                $modelSeguimiento->save();
                            }
                            $modelCuotasExcluidas = PreNominaTablaAmortizacion::model()->findAll('id_pre_nomina_credito=:id_pre_nomina_credito AND cuota_excluida= TRUE', [':id_pre_nomina_credito' => $model->id_prenomina_credito]);
                            foreach ($modelCuotasExcluidas as $key => $value) {
                                $value->cuota_excluida = false;
                                $value->id_estatus_cuota_excluida = null;
                                $value->observaciones = null;
                                $value->save();
                            }

                            // cuotas excluidas colocar en nul nuevamente
                            // DatosTxtIntegrado::model()->updateAll(['blnborrado' => true], 'id_txt=:id', [':id' => $model->id]);
                        }

                        EstatusTxtIntegrado::model()->updateAll(['actual' => false], 'id_datos_txt_integrado=:id', [':id' => $model->id]);
                        $modelEstatusTxt = new EstatusTxtIntegrado();
                        $modelEstatusTxt->id_estatus_txt = 4;
                        $modelEstatusTxt->id_datos_txt_integrado = $model->id;
                        $modelEstatusTxt->actual = true;
                        if ($modelEstatusTxt->save(false)) {
                            $transaction->commit();
                            echo 'rechazado';
                        }
                    }
                } else {
                    Yii::app()->user->setFlash('error', 'No se puede Rechazar el archivo');
                }
            } catch (Exception $e) {
                $transaction->rollback();
                throw new CHttpException(500, $e->getMessage());
            }

            // if (isset($_GET['case'])) {
            //     switch ($model->id_tipo_carga) {
            //         case 1:
            //             $this->redirect(['adminAE']);
            //             // no break
            //         case 2:
            //             $this->redirect(['adminAO']);
            //             // no break
            //         case 3:
            //             $this->redirect(['adminAF']);
            //     }
            // }

            if (! isset($_GET['ajax'])) {
                $this->redirect(isset($_POST['returnUrl']) ? $_POST['returnUrl'] : ['admin']);
            }
        } else {
            throw new CHttpException(400, 'Invalid request. Please do not repeat this request again.');
        }
    }

    public function actionDeleteNominaPrestamos($id)
    {
       $transaction=Yii::app()->db->beginTransaction();
        try
        {   $model=$this->loadModel($id);
            if($model->getEstatusSc()!='Aprobado' && $model->getEstatusSc()!='Pagado')
            {
                $model->blnborrado=TRUE;
                if($model->save(FALSE)){
                  DatosTxtTablaAmortizacion::model()->updateAll(array('blnborrado'=>TRUE,'actual'=>FALSE),'id_txt=:id',array(':id'=>$model->id));
                  PreNominaSeguimiento::model()->updateAll(array('actual'=>FALSE),'id_pre_nomina_credito=:id',array(':id'=>$model->id_prenomina_credito));
                  $modelEstatusP= new PreNominaSeguimiento;
                  $modelEstatusP->id_estatus_pre_nomina=6;
                  $modelEstatusP->id_pre_nomina_credito=$model->id_prenomina_credito;
                  $modelEstatusP->actual=TRUE;
                  $modelEstatusP->save();

                  //cobro de diferedidos
                  //todos los cobros de la tabla datos txt tabla amortizacion
                  foreach (CobroDiferencialCuota::model()->findAll('id in (SELECT cobro.id FROM prestamos.cobro_diferencial_cuota as cobro
                                                                                                      JOIN prestamos.datos_txt_tabla_amortizacion as txt ON cobro.id_proceso = txt.id AND id_nombre_proceso = 1
                                                                                                      WHERE id_txt =:id_txt)',[':id_txt'=>$model->id]) as $key => $value) {
                    # code...
                    CobroDiferencialCuotaSeguimiento::model()->updateAll(['actual'=>false,'id_usuario'=>Yii::app()->user->id,
                                                                        'id_cobro_diferencial_cuota =:id_cobro_diferencial_cuota)',[':id_cobro_diferencial_cuota'=>$value->id]]);

                    $modelSeguimiento = new CobroDiferencialCuotaSeguimiento();
                    $modelSeguimiento->id_cobro_diferencial_cuota = $value->id;
                    $modelSeguimiento->id_estatus_cobro_cuota = 2;
                    $modelSeguimiento->save();
                  }
                  //todos los cobros de la tabla pre nomina
                  foreach (CobroDiferencialCuota::model()->findAll('id in (SELECT cobro.id FROM prestamos.cobro_diferencial_cuota as cobro
                                                                                                    JOIN prestamos.pre_nomina_tabla_amortizacion as txt ON cobro.id_proceso = txt.id AND id_nombre_proceso = 2
                                                                                                      WHERE id_pre_nomina_credito =:id)',[':id'=>$model->id_prenomina_credito]) as $key => $value) {
                    # code...
                    CobroDiferencialCuotaSeguimiento::model()->updateAll(['actual'=>false,'id_usuario'=>Yii::app()->user->id,
                                                                        'id_cobro_diferencial_cuota =:id_cobro_diferencial_cuota)',[':id_cobro_diferencial_cuota'=>$value->id]]);

                    $modelSeguimiento = new CobroDiferencialCuotaSeguimiento();
                    $modelSeguimiento->id_cobro_diferencial_cuota = $value->id;
                    $modelSeguimiento->id_estatus_cobro_cuota = 2;
                    $modelSeguimiento->save();
                  }
                  $modelCuotasExcluidas = PreNominaTablaAmortizacion::model()->findAll("id_pre_nomina_credito=:id_pre_nomina_credito AND cuota_excluida= TRUE",[':id_pre_nomina_credito'=>$model->id_prenomina_credito]);
                  foreach ($modelCuotasExcluidas as $key => $value) {
                    $value->cuota_excluida=false;
                    $value->id_estatus_cuota_excluida =NULL;
                    $value->observaciones =NULL;
                    $value->save();
                  }

                  EstatusTxtIntegrado::model()->updateAll(array('actual'=>FALSE),'id_datos_txt_integrado=:id',array(':id'=>$model->id));
                  $modelEstatusTxt= new EstatusTxtIntegrado;
                  $modelEstatusTxt->id_estatus_txt=4;
                  $modelEstatusTxt->id_datos_txt_integrado=$model->id;
                  $modelEstatusTxt->actual=TRUE;
                  if($modelEstatusTxt->save(FALSE)){
                      $transaction->commit();
                       Yii::app()->user->setFlash('successful', "El archivo a sido Rechazado, los aportes no seran contabilizados");
                        $this->redirect(array('/prestamo/DatosPreNominaCredito/view','id'=>$model->id_prenomina_credito));
                  }

              }
            }
            else {
                Yii::app()->user->setFlash('error', "No se puede Rechazar el archivo");
                $this->redirect(array('/prestamo/DatosPreNominaCredito/view','id'=>$model->id_prenomina_credito));

            }
       }catch(Exception $e)
                    { //echo "<pre>";print_r($e);exit;
                       $transaction->rollback();
                       throw new CHttpException(500,'Ocurrio un Error durante el proceso, se han revertido todos los cambios');
                    }
    }

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

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

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


          /**
   * Administrar los aportes Voluntarios.
   */
  public function actionAdminAE()
  {
    $model=new DatosTxtIntegrado('search');
    $model->unsetAttributes();  // clear any default values
    if(isset($_GET['DatosTxtIntegrado']))
      $model->attributes=$_GET['DatosTxtIntegrado'];

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

  public function actionAdminMP()
  {
    $model=new DatosTxtIntegrado('search');
    $model->unsetAttributes();  // clear any default values
    if(isset($_GET['DatosTxtIntegrado']))
      $model->attributes=$_GET['DatosTxtIntegrado'];

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

        /**
         * Administrar los archivos de Aportes Ordinarios
         *
         */
          public function actionAdminAO()
  {
    $model=new DatosTxtIntegrado('search');
    $model->unsetAttributes();  // clear any default values
    if(isset($_GET['DatosTxtIntegrado']))
      $model->attributes=$_GET['DatosTxtIntegrado'];

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

        public function actionAdminPrestamo()
  {
    $model=new DatosTxtIntegrado('search');
    $model->unsetAttributes();  // clear any default values
    if(isset($_GET['DatosTxtIntegrado']))
      $model->attributes=$_GET['DatosTxtIntegrado'];

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

    public function actionExportarXls()
    {
        $filtro=unserialize(Yii::app()->session['filtro']);
        $modelo=unserialize(Yii::app()->session['modelo']);

        $data=[];
        $data[0]=['Archivo','Unidad','Descripción','Fecha de Aporte','Fecha registro','Total aportes','Cantidad de aportantes','Estatus', 'Cargado', 'Aprobado', 'Rechazado', 'Pagado', 'Monto pagado', 'Pagado por', 'Banco origen', 'Cuenta origen', 'Referencia del pago'];
        $result=$modelo->findAll($filtro);
        foreach ($result as $key=>$archivo) {
            $fechas = DatosTxtIntegrado::getFechasEstatus($archivo->id);
            $info_pago = ProcesoPago::getDatosPago($archivo->id);

            $data[]=[
                $archivo->nombre_archivo,
                $archivo->idUnidad->descripcion,
                $archivo->descripcion,
                $archivo->fecha_aporte,
                $archivo->fecha_registro,
                $archivo->total_aportes,
                $archivo->cant_aportantes,
                $archivo->getEstatusSc(),
                $fechas['Cargado'],
                $fechas['Aprobado'],
                $fechas['Rechazado'],
                $fechas['Pagado'],
                $info_pago['monto_pagado'],
                $info_pago['pagado_por'],
                $info_pago['banco'],
                $info_pago['cuenta'],
                $info_pago['referencia']
            ];
        }
        $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']);
        $objPHPExcel2 = new PHPExcel();
        //Ancho de las columnas
        foreach (range('A', 'Q') as $columnID) {
            $objPHPExcel2->getActiveSheet()->getColumnDimension($columnID)->setAutoSize(true);
        }
        $objPHPExcel2->getActiveSheet()->fromArray($data, null, 'A1');
        $objPHPExcel2->getActiveSheet()->getStyle('A1:Q1')->getFont()->setBold(true);
        $objPHPExcel2->getActiveSheet()->getStyle('A1:Q1')->getFont()->getColor()->setARGB(PHPExcel_Style_Color::COLOR_WHITE);
        $objPHPExcel2->getActiveSheet()->getStyle('A1:Q1')->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID);
        $objPHPExcel2->getActiveSheet()->getStyle('A1:Q1')->getFill()->getStartColor()->setARGB('004413');

        $objPHPExcel2->getActiveSheet()->getStyle("E")->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);
        $objPHPExcel2->getActiveSheet()->getStyle("L")->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);
        $objPHPExcel2->getActiveSheet()->getStyle('F')->getNumberFormat()->setFormatCode('#,##0.00');
        $objPHPExcel2->getActiveSheet()->getStyle('M')->getNumberFormat()->setFormatCode('#,##0.00');

        $objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel2);
        $objWriter->setOffice2003Compatibility(true);

        header('Content-type: application/vnd.ms-excel');
        // It will be called file.xls
        //header('Content-Disposition: attachment; filename="Informe de aportes voluntarios('.date("d-m-Y").').xlsx"');
        if ($result[0]->id_tipo_carga == 1) {
            header('Content-Disposition: attachment; filename="Informe de aportes voluntarios('.date("d-m-Y").').xlsx"');
        } elseif ($result[0]->id_tipo_carga == 2) {
            header('Content-Disposition: attachment; filename="Informe de aportes ordinarios('.date("d-m-Y").').xlsx"');
        } elseif ($result[0]->id_tipo_carga == 3 || $result[0]->id_tipo_carga == 4) {
            header('Content-Disposition: attachment; filename="Informe de aportes al fondo MP/MA('.date("d-m-Y").').xlsx"');
        }

        // Write file to the browser
        $objWriter->save('php://output');
    }

  public function actionCargarAporteFondo(){

    $model=new DatosTxtIntegrado('cmaf_form');

    if(isset($_POST['DatosTxtIntegrado'])){

      $errorLinea='';
      $totalAportes=0;
      $model->attributes=$_POST['DatosTxtIntegrado'];
      //echo "<pre>";print_r($_POST);echo "\n";print_r($model);exit;
      $uploadedFile=CUploadedFile::getInstance($model,'nombre_archivo');
      $model->nombre_archivo=$uploadedFile;
      //$ruta=Yii::app()->basePath."/data/".$uploadedFile;
      $ruta=Yii::app()->params['rutaNominaAportes'].$uploadedFile;
      //echo Yii::app()->params['rutaNominaAportes'];exit;


      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(array('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(array('YiiBase','autoload'));

        // Cargando la hoja de calculo
        $objReader = new PHPExcel_Reader_Excel2007(); //instancio un objeto como PHPExcelReader(objeto de captura de datos de excel)
        $objPHPExcel = $objReader->load(Yii::app()->params['rutaNominaAportes'].$uploadedFile); //carga en objphpExcel por medio de objReader,el nombre del archivo
        $objPHPExcel->setActiveSheetIndex(0);

        $numRows = $objPHPExcel->setActiveSheetIndex(0)->getHighestRow();

        ##############################################################################################
        #######nueva variable que contiene el total de rows vacias basado en la columna de cedula############

        //Array que contiene las letras de las columnas que posee el archivo, solo funciona hasta la Z.
        /*$cols = ord($objPHPExcel->getActiveSheet()->getHighestDataColumn());
        $col_excel = array();
        for ($i=65; $i <= $cols ; $i++) {

          array_push($col_excel, chr($i));
        }*/

        $col_base = 'A';
        $num_rows_depurado = 0;
        $num_rows_vacia = array('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->cant_aportantes = $objPHPExcel->getActiveSheet()->getCell('A2')->getCalculatedValue();
          $model->total_aportes = $objPHPExcel->getActiveSheet()->getCell('B2')->getCalculatedValue();
          $model->total_aportes=str_replace('.', ',', $model->total_aportes);
          //$model->fecha_aporte = $objPHPExcel->getActiveSheet()->getCell('C2')->getFormattedValue();

          $valor_inicial = $objPHPExcel->getActiveSheet()->getCell('C2')->getValue();

          //Condicional para verificar si el campo de fecha del archivo excel viene con formato string o numerico
          if (is_string($valor_inicial)) {

            if (stristr($valor_inicial, "-") == true) {

              $valor_inicial = str_replace('-', '/', $valor_inicial);
              $model->fecha_aporte = $valor_inicial;

            }else{

              $model->fecha_aporte = $valor_inicial;
            }

          }elseif (is_numeric($valor_inicial)) {

            $s = $objPHPExcel->getActiveSheet()->getCell("C2")->getValue()+1;
            $d = PHPExcel_Shared_Date::ExcelToPHP($s);
            $model->fecha_aporte = date('d/m/Y',$d);
          }

          //echo "<pre>";print_r($model->cant_aportantes);echo "\n";print_r($model->total_aportes);echo "\n";print_r($model->fecha_aporte);exit;
          $model->scenario='caf_linea1';

          if($model->validate()){

            $e_rrores=array();

            # Valida La primera linea del archivo, contra el formato de nombre de archivo
            $fechaNombre = substr($model->nombre_archivo, 6,8);
            $fechaLinea1=str_replace("/", "", $model->fecha_aporte);


            if($fechaNombre!=$fechaLinea1){

              $valido=FALSE;
              $errorLinea.='La fecha ('.$fechaNombre.')en el nombre del archivo no coincide con la fecha ('.$fechaLinea1.') en la primera linea'.'; ';

            }

            if($model->cant_aportantes!=$numRows-3){

              $valido=FALSE;
              $errorLinea.='La cantidad de aportantes  '.$model->cant_aportantes.' no coincide con la cantidad de asociados presentes '.($numRows-2).' en el archivo '.'; ';
            }

            # Recorre el archivo en busca de errores
            $e_rrores[0]=array('Total aportantes','Total aportes','Fecha aportes',NULL,NULL,NULL,NULL,NULL,'ERRORES');
            $e_rrores[1]=array($model->cant_aportantes,$model->total_aportes,$model->fecha_aporte,NULL,NULL,NULL,NULL,NULL,$errorLinea);
            $e_rrores[2]=array('CEDULA','UNIDAD','SUELDO','TIPO NOMINA'/*,'% SOCIO'*/,'APORTE SOCIO'/*,'% PATRONO'*/,'APORTE PATRONO','ERRORES');

            for($fila=4;$fila<=$model->cant_aportantes+3;$fila++){

              $errores='';
              $modelAporte=new AporteFondo('cmasiva');
              $modelAporte->cedula=$objPHPExcel->getActiveSheet()->getCell('A'.$fila)->getCalculatedValue();
              $uni_rrhh= Unidad::model()->find('codigo::int='.(int) $objPHPExcel->getActiveSheet()->getCell('B'.$fila)->getFormattedValue());
              $modelAporte->id_unidad = $uni_rrhh->idunidad;
              $modelAporte->id_tnomina =  trim($objPHPExcel->getActiveSheet()->getCell('C'.$fila)->getCalculatedValue());
              $modelAporte->aporte = $objPHPExcel->getActiveSheet()->getCell('D'.$fila)->getCalculatedValue();
              $modelAporte->aporte =str_replace('.', ',', $modelAporte->aporte);
              //echo "<pre>";print_r($modelAporte);exit;

              if(!$modelAporte->validate()){

                $valido=FALSE;#Si contiene al menos un error, el archivo es devuelto
                $errores.=$modelAporte->getError('cedula').' ';
                $errores.=$modelAporte->getError('id_unidad').' ';
                $errores.=$modelAporte->getError('id_tnomina').' ';
                $errores.=$modelAporte->getError('aporte').' ';
                $e_rrores[$fila-1]=array($modelAporte->cedula,
                                          $modelAporte->id_unidad,
                                          $modelAporte->id_tnomina,
                                          $modelAporte->aporte,
                                          $errores
                                        );

              }else{

                $e_rrores[$fila]=array($modelAporte->cedula,
                                        $modelAporte->id_unidad,
                                        $modelAporte->id_tnomina,
                                        $modelAporte->aporte,
                                      );

                $modelAporte->aporte=(float)str_replace(',', '.',$modelAporte->aporte);
                $totalAportes=$totalAportes+$modelAporte->aporte;
                $id_unidad=$modelAporte->id_unidad;

                /*if ($fila==9) {

                  echo "<pre>";print_r($modelAporte);echo "\n";print_r($model->total_aportes);exit;
                }*/
              }
            }

            if(round($totalAportes,2)!=round(str_replace(',', '.', $model->total_aportes),2)){

              //echo $totalAportes.'---- '.$model->total_aportes;exit();
              //$valido==FALSE;
              // $errorLinea.='El total de aportes declarado en el archivo '.$model->total_aportes.', no coincide con la sumatoria de los aportes presentes en el mismo '.$totalAportes.';  ';
              //}
              $valido=FALSE;
              $errorLinea.='El total de aportes declarado en el archivo  '.(round(str_replace(',', '.', $model->total_aportes),2)).' no coincide con la sumatoria de los aportes presentes en el mismo '.round($totalAportes,2).' '.'; ';
              $e_rrores[1]=array($model->cant_aportantes,$model->total_aportes,$model->fecha_aporte,NULL,NULL,NULL,$errorLinea);
            }

            if($valido){# Si el archivo no contiene errores se procede al guardado
              $msg_error = false;
              $tNomina = substr($model->nombre_archivo, 0,2);
//echo "<pre>";print_r($modelAporte);echo "\n";print_r($model->total_aportes);echo "\n";print_r($tNomina);exit;
              $transaction=Yii::app()->db->beginTransaction();

              try{

                $model->id_usuario=Yii::app()->user->id;
                $model->total_aportes=str_replace(',', '.', $model->total_aportes);

                if ($tNomina == "MP"){

                  $model->id_tipo_carga=3;

                }elseif ($tNomina == "MA"){

                  $model->id_tipo_carga=4;

                }

                $model->id_unidad=$id_unidad;

                //echo '<pre>'; print_r($model);exit;
                #Guarda el encabezado del xls en el modelo
                if($model->save()){

                  $estatus=1;

                  #Recorre el archivo excel para cargar los apòrtes
                  for($fila=4;$fila<=$model->cant_aportantes+3;$fila++){

                    $modelAporte=new AporteFondo;
                    $modelAporte->cedula=$objPHPExcel->getActiveSheet()->getCell('A'.$fila)->getCalculatedValue();
                    $modelAsociado= Asociado::model()->find('id_estatus=1 and cedula=:ci',array(':ci'=>$modelAporte->cedula));

                    if($modelAsociado){

                      $modelAporte->id_asociado=$modelAsociado->idasociado;
                    }

                    $modelUnidad= Unidad::model()->find('codigo::int='.(int) $objPHPExcel->getActiveSheet()->getCell('B'.$fila)->getFormattedValue());

                    if($modelUnidad)$modelAporte->id_unidad=$modelUnidad->idunidad;

                      $id_tipo_nomina = $objPHPExcel->getActiveSheet()->getCell('C'.$fila)->getCalculatedValue();
                      $tipoNomina=  TipoNomina::model()->find('codigo_nomina=:cod AND blnborrado=FALSE',array(':cod'=>$id_tipo_nomina));

                      if($tipoNomina)$modelAporte->id_tnomina=$tipoNomina->id;

                        $modelAporte->aporte = $objPHPExcel->getActiveSheet()->getCell('D'.$fila)->getCalculatedValue();
                        $modelAporte->id_user=Yii::app()->user->id;
                        $modelAporte->id_txt=$model->id;

                        if ($tNomina == "MP"){

                          $modelAporte->id_taporte=1;
                          //echo '<pre>'; print_r($modelAporte);echo "\n";print_r($tNomina);exit;

                        }elseif ($tNomina == "MA"){

                          $modelAporte->id_taporte=2;

                        }

                        $modelAporte->fecha_aporte=$model->fecha_aporte;
                        $modelAporte->scenario='cm_guardar';
                        //echo '<pre> guardado pendiente';print_r($tipoNomina);echo"\n";print_r($modelAporte);exit;
                        if (!$modelAporte->save()) {

                          $estatus=2;
                          $modelAportesDiferidos= new AporteFondoDiferido('cm_aportes_fondo_diferidos');
                          $modelAportesDiferidos->id_txt=$model->id;
                          $modelAportesDiferidos->cedula=$modelAporte->cedula;
                          $modelAportesDiferidos->unidad=$modelUnidad->idunidad;
                          $modelAportesDiferidos->t_nomina=$tipoNomina->id;
                          $modelAportesDiferidos->aporte_asociado=$modelAporte->aporte;
                          $modelAportesDiferidos->observaciones=json_encode($modelAporte->getErrors());
                          $modelAportesDiferidos->id_status=1;
                          //echo '<pre> nivel aportes diferidos'; print_r($modelAportesDiferidos);echo "\n";print_r($modelAporte->getErrors());exit;
                          $modelAportesDiferidos->save();

                        }
                  }

                      $modelEstatusIntegrado= new EstatusTxtIntegrado('aporte_voluntario');
                      $modelEstatusIntegrado->id_datos_txt_integrado=$model->id;
                      $modelEstatusIntegrado->id_estatus_txt=$estatus;
                      $modelEstatusIntegrado->actual=TRUE;
                      $modelEstatusIntegrado->save();

                      $transaction->commit(); #Ejecuta todas las operaciones
                      $this->redirect(array('viewCmaf','id'=>$model->id));

                }else{

                  #No se pudo guargar el archivo
                  Yii::app()->user->setFlash('error', "No se pudo Guargar el Archivo");


                }

              }catch(Exception $e){
                //echo "<pre> error";print_r($e->getMessage());echo "\n";print_r($modelAporte);exit;
                $transaction->rollback();

                Yii::app()->user->setFlash('error', "Ocurrio un error durante el guardado, se han revertido todos los cambios");
                $this->redirect(array('CargarAporteFondo'));

              }

            }else{ #Si el Archivo contiene errores

              $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",array('target'=>'_blank')));
            }

          }# Fin de la validacion de la primera linea

        }else{ # Fin if ($numRows>3), es decir, si el archivo no esta vacio

          $model->addError('cant_aportantes', 'El Archivo no contiene ningun aporte');

        }
      }#if($model->validate()) si el modelo DatosTxtIntegrado es valido
    }#Fin if(isset($_POST['DatosTxtIntegrado']))

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

  public function actionViewCmaf($id){

    $model=$this->loadModel($id);


    $aportesCeroSocio= AporteFondo::model()->count('id_txt=:id AND COALESCE(aporte,0)=0  AND blnborrado=FALSE',array(':id'=>$model->id));

    $modelAportes= new AporteFondo('search');

    $modelAportesDiferidos= new AporteFondoDiferido('search');

    $totalAportantes= AporteFondo::model()->count('id_txt=:id AND blnborrado=FALSE AND COALESCE(id_aporte_status,0)!=4',array(':id'=>$model->id));

    $totalMontoAporteActivo= AporteFondo::model()->find(array(
                                                              'select'=>'sum (aporte) as aporte_asociado',
                                                              'condition'=>'id_txt=:id  AND  blnborrado=FALSE AND COALESCE(id_aporte_status,0)!=4',
                                                              'params'=>array(':id'=>$model->id)));

    $modelAportesLiquidados= AporteFondoDiferido::model()->count('id_txt=:id AND id_status=5 AND  blnborrado=FALSE',
                                                                                    array(':id'=>$model->id)); //AporteVoluntarioDiferido::model()->findAll('id_txt=:id',array(':id'=>$model->id));
    $totalMontoAportesLiquidados= AporteFondoDiferido::model()->find(array(
                                                                        'select'=>'sum (aporte_asociado) as aporte_asociado',
                                                                        'condition'=>'id_txt=:id AND id_status =5 AND  blnborrado=FALSE',
                                                                        'params'=>array(':id'=>$model->id)));

    $modelAportesTotalDiferidos= AporteFondoDiferido::model()->count('id_txt=:id AND id_status !=5 AND  blnborrado=FALSE',
                                                                                    array(':id'=>$model->id)); //AporteVoluntarioDiferido::model()->findAll('id_txt=:id',array(':id'=>$model->id));
    $totalMontoAportesDiferidos= AporteFondoDiferido::model()->find(array(
                                                                        'select'=>' sum (aporte_asociado) as aporte_asociado',
                                                                        'condition'=>'id_txt=:id AND id_status !=5 AND  blnborrado=FALSE',
                                                                        'params'=>array(':id'=>$model->id)));

    $detallePago = ProcesoPago::model()->find('id_proceso=:proceso AND actual=true', array(':proceso'=>$model->id));

    if (empty($detallePago)) {

        empty($detallePago);
    }

    if(isset($_GET['AporteFondo']))
      $modelAportes->attributes=$_GET['AporteFondo'];
    if(isset($_GET['AporteFondoDiferido']))
      $modelAportesDiferidos->attributes=$_GET['AporteFondoDiferido'];

    $this->render('view_cmaf',array(
                                    'model'=>$model,
                                    'modelAportes'=>$modelAportes,
                                    'modelAportesDiferidos'=>$modelAportesDiferidos,
                                    'aportesCeroSocio'=>$aportesCeroSocio,
                                    'totalAportantes'=>$totalAportantes,
                                    'totalMontoAporteActivo'=>$totalMontoAporteActivo,
                                    'modelAporteLiquidados'=>$modelAportesLiquidados,
                                    'totalMontoAporteLiquidados'=>$totalMontoAportesLiquidados,
                                    'modelAportesTotalDiferidos'=>$modelAportesTotalDiferidos,
                                    'totalMontoAporteDiferidos'=>$totalMontoAportesDiferidos,
                                    'detalle'=>$detallePago,
                              )
                );
  }

  public function actionAdminAF(){

    $model=new DatosTxtIntegrado('search');
    $model->unsetAttributes();  // clear any default values

    if(isset($_GET['DatosTxtIntegrado']))
      $model->attributes=$_GET['DatosTxtIntegrado'];

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


    public function actionPdfAO($id)
    {
        Yii::import('application.modules.contable.models.*', true);

        $info = array(
            'model' => '',
            'modelAportes' => '',
            'modelAportesDiferidos' => '',
            'modelAportesLiquidados' => '',
            'modelAportesTotalDiferidos' => '',
            'aportesCeroPatrono' => '',
            'aportesCeroSocio' => '',
            'aportesCero' => '',
            'totalAportantes' => '',
            'totalMontoAporteActivo' => '',
            'totalMontoAporteLiquidados' => '',
            'totalMontoAporteDiferidos' => '',
        );

        $modelEmpresa = Empresa::model()->find();
        $usuario = CrugeUserI::model()->findByPk(Yii::app()->user->id);

        $info['model'] = $this->loadModel($id);
        $info['aportesCeroPatrono'] = AporteOrdinario::model()->count('id_txt=:id AND COALESCE(aporte_patrono,0)=0 AND blnborrado=FALSE', array(':id' => $info['model']->id));
        $info['aportesCeroSocio'] = AporteOrdinario::model()->count('id_txt=:id AND COALESCE(aporte_asociado,0)=0  AND blnborrado=FALSE', array(':id' => $info['model']->id));
        $info['aportesCero'] = AporteOrdinario::model()->count('id_txt=:id AND (COALESCE(aporte_asociado,0)=0 AND COALESCE(aporte_patrono,0)=0)AND blnborrado=FALSE', array(':id' => $info['model']->id));
        $info['modelAportes'] = new AporteOrdinario('search');
        $info['modelAportesDiferidos'] = new AporteOrdinarioDiferido('search');

        $info['totalAportantes'] = AporteOrdinario::model()->count('id_txt=:id  AND  blnborrado=FALSE AND COALESCE(id_estatus_aporte,0)!=4', array(':id' => $info['model']->id));
        $info['totalMontoAporteActivo'] = AporteOrdinario::model()->find(array(
            'select' => ' sum (aporte_patrono) as aporte_patrono, sum (aporte_asociado) as aporte_asociado',
            'condition' => 'id_txt=:id  AND  blnborrado=FALSE AND COALESCE(id_estatus_aporte,0)!=4',
            'params' => array(':id' => $info['model']->id),
        ));
        $info['modelAportesLiquidados'] = AporteOrdinarioDiferido::model()->count('id_txt=:id AND id_estatus_aod =5 AND  blnborrado=FALSE', array(
            ':id' => $info['model']->id,
        ));
        $info['totalMontoAporteLiquidados'] = AporteOrdinarioDiferido::model()->find(array(
            'select' => ' sum (aporte_patrono) as aporte_patrono, sum (aporte_asociado) as aporte_asociado',
            'condition' => 'id_txt=:id AND id_estatus_aod =5 AND  blnborrado=FALSE',
            'params' => array(':id' => $info['model']->id),
        ));
        $info['modelAportesTotalDiferidos'] = AporteOrdinarioDiferido::model()->count('id_txt=:id AND id_estatus_aod !=5 AND  blnborrado=FALSE', array(
            ':id' => $info['model']->id,
        ));
        $info['totalMontoAporteDiferidos'] = AporteOrdinarioDiferido::model()->find(array(
            'select' => ' sum (aporte_patrono) as aporte_patrono, sum (aporte_asociado) as aporte_asociado',
            'condition' => 'id_txt=:id AND id_estatus_aod !=5 AND  blnborrado=FALSE',
            'params' => array(':id' => $info['model']->id),
        ));

        if (isset($_GET['AporteOrdinario'])) {
            $info['modelAportes']->attributes = $_GET['AporteOrdinario'];
        }

        if (isset($_GET['AporteOrdinarioDiferido'])) {
            $info['modelAportesDiferidos']->attributes = $_GET['AporteOrdinarioDiferido'];
        }

        Yii::createComponent('application.extensions.mpdf60.mpdf');
        $mpdf = new mPDF('win-1252', 'LETTER', 8, '', 15, 15, 25, 15, 5, 5);
        $mpdf->simpleTables = true;
        $mpdf->useSubstitutions = false;
        $arr = array(
            'L' => array(
                'content' => (empty($modelEmpresa->logo))
                    ? '<img src='.Yii::app()->baseUrl."/images/logo.png alt='Logo' width ='40px' heigth='40px'/>"
                    : "<img src='".Yii::app()->request->getBaseUrl(true).'/images/'.$modelEmpresa->logo."' alt='Logo' width ='40px' heigth='40px'/>",
            ),
            'R' => array(
                'content' => $info['model']->idCarga->nombre,
                'font-style' => 'BI',
                'font-family' => 'serif',
                'color' => '#000000',
            ),
            'line' => 0,
        );

        $mpdf->setHeader($arr, 'O');
        $mpdf->defaultfooterfontsize = 6;
        $mpdf->SetFooter('Elaborado por:<br>'.$usuario->getFullName().' <br>{DATE d/m/Y} |'.$modelEmpresa->dir_emp.'| Página {PAGENO}/{nbpg}');
        $mpdf->WriteHTML($this->renderPartial('AO_pdf', array(
            'data' => $info,
            'resumenPago' => DatosTxtIntegrado::resumenPago($id),
            'historial_pagos' => HistorialDiferidosTotalizados::detalle($info['model']->id),
            'comp' => Comprobante::model()->findAll('nro_documento=:doc', array(':doc' => $info['model']->id)),
        ), true));

        //Imprime la tabla de aportantes activos
        $mpdf->addPage();
        $mpdf->setHeader($arr, 'O');
        $mpdf->defaultfooterfontsize = 6;
        $mpdf->SetFooter('Elaborado por:<br>'.$usuario->getFullName().' <br>{DATE d/m/Y} |'.$modelEmpresa->dir_emp.'| Página {PAGENO}/{nbpg}');
        $mpdf->WriteHTML($this->renderPartial('tabla_aportantes_activos', array(
            'datos_aportes' => AporteOrdinario::getReporte($info['model']->id),
        ), true), 2);

        //Imprime la tabla de aportantes no definidos si existen
        $tabla_aportes_nd = AporteOrdinarioDiferido::getReporte($info['model']->id);
        if (! empty($tabla_aportes_nd)) {
            $mpdf->addPage();
            $mpdf->setHeader($arr, 'O');
            $mpdf->defaultfooterfontsize = 6;
            $mpdf->SetFooter('Elaborado por:<br>'.$usuario->getFullName().' <br>{DATE d/m/Y} |'.$modelEmpresa->dir_emp.'| Página {PAGENO}/{nbpg}');
            $mpdf->WriteHTML($this->renderPartial('tabla_aportantes_no_definidos', array(
                'datos_aportes_nd' => $tabla_aportes_nd,
            ), true));
        }

        $mpdf->Output('Archivo de aportes ordinarios('.$info['model']['nombre_archivo'].')', 'D');
        exit;
    }

    public function actionXlsAO($id)
    {
        $depuracion = DatosTxtIntegrado::depuracion($id);
        unset($depuracion[0]['registro']);
        unset($depuracion[1]['registro']);
        unset($depuracion[2]['registro']);
        unset($depuracion[3]['registro']);

        $datos = [
            ['Nombre Archivo', 'Descripción', 'Cantidad de Aportantes', 'Total Aportes', 'Fecha del Aporte',
            'Fecha de Registro', 'Asociados con aporte patronal en cero (0)', 'Asociado con aporte empleado en cero (0)',
            'Aportantes con aportes propios y del patrono en cero (0)', 'Estatus', 'Monto pagado', 'Monto restante'],
        ];
        $detalle = array_merge(DatosTxtIntegrado::informacion($id), DatosTxtIntegrado::resumenPago($id));
        $datos = array_merge($datos, [$detalle]);
        $datos = array_merge($datos, [
            [''],
            ['Resultado de la depuración de carga'],
            ['Tipo', 'Cantidad asociados', 'Total aporte empleado', 'Total aporte patronal', 'Monto total'],
            array_merge(['Activos'], $depuracion[0]),
            array_merge(['Ex-asociados'], $depuracion[1]),
            array_merge(['No asociados'], $depuracion[2]),
            array_merge(['Totales'], $depuracion[3]),
            [''],
            ['Detalle del pago'],
            ['Fecha del pago', 'Banco origen', 'Cuenta origen', 'Referencia del pago', 'Monto pagado', 'Observación'],
            $detallePago = ProcesoPago::detalle($id),
            [''],
            ['Historial de pagos'],
            ['Monto según archivo', 'Monto aportantes activos', 'Monto pagado', 'Monto restante', 'Banco', 'Cuenta', 'Referencia', 'Fecha de transacción'],
        ]);

        $historialPagos = HistorialDiferidosTotalizados::detalle($id);
        $numeroHistorialPagos = 17 + (count($historialPagos) - 1);
        $datos = array_merge($datos, $historialPagos);
        $datos = array_merge($datos, [
            [''],
            ['Aportantes activos'],
            ['Cédula', 'Nombre y apellido', 'Aporte patrono', 'Aporte asociado', 'Aporte total', 'Aporte pagado patrono', 'Aporte pagado asociado',
            'Aporte por pagar patrono', 'Aporte por pagar asociado', 'Fecha aporte'],
        ]);

        $aportesActivos = AporteOrdinario::getReporte($id);
        $datos = array_merge($datos, $aportesActivos);
        $datos = array_merge($datos, [['TOTALES']]);
        $datos = array_merge($datos, [
            [''],
            ['Aportantes no definidos'],
            ['Cédula', 'Unidad', 'Sueldo', 'Aporte patrono', 'Aporte asociado', 'Total aporte', 'Aporte pendiente', 'Fecha registro', 'Estatus'],
        ]);
        $aportesNoDefinidos = AporteOrdinarioDiferido::getReporte($id);
        $datos = array_merge($datos, $aportesNoDefinidos);
        $datos = array_merge($datos, [['TOTALES']]);

        $phpExcelPath = Yii::getPathOfAlias('ext.Excel.PHPExcel.Classes');
        $phpExcelPath2 = Yii::getPathOfAlias('application.extensions.Excel.PHPExcel.Classes.PHPExcel');
        spl_autoload_unregister(array('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(array('YiiBase', 'autoload'));
        $objPHPExcel2 = new PHPExcel();

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

        $objPHPExcel2->getActiveSheet()->fromArray($datos, null, 'A1');
        $objPHPExcel2->getActiveSheet()->getStyle('A1:L1')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
        $objPHPExcel2->getActiveSheet()->getStyle('A1:L1')->getFont()->setBold(true);
        $objPHPExcel2->getActiveSheet()->getStyle('A1:L1')->getFont()->getColor()->setARGB(PHPExcel_Style_Color::COLOR_WHITE);
        $objPHPExcel2->getActiveSheet()->getStyle('A1:L1')->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID);
        $objPHPExcel2->getActiveSheet()->getStyle('A1:L1')->getFill()->getStartColor()->setARGB('1C336E');
        $objPHPExcel2->getActiveSheet()->getStyle('D')->getNumberFormat()->setFormatCode('#,##0.00');
        $objPHPExcel2->getActiveSheet()->getStyle('K2:L2')->getNumberFormat()->setFormatCode('#,##0.00');
        $objPHPExcel2->getActiveSheet()->getStyle('C')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
        $objPHPExcel2->getActiveSheet()->getStyle('G')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
        $objPHPExcel2->getActiveSheet()->getStyle('H')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
        $objPHPExcel2->getActiveSheet()->getStyle('E')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
        $objPHPExcel2->getActiveSheet()->getStyle('F')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
        $objPHPExcel2->getActiveSheet()->getStyle('I')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);

        $objPHPExcel2->getActiveSheet()->getStyle('A6:A8')->getFill()->getStartColor()->setARGB('1C336E');
        $objPHPExcel2->getActiveSheet()->getStyle('A5:E5')->getFont()->setBold(true);
        $objPHPExcel2->getActiveSheet()->getStyle('A5:E5')->getFont()->getColor()->setARGB(PHPExcel_Style_Color::COLOR_WHITE);
        $objPHPExcel2->getActiveSheet()->getStyle('A5:E5')->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID);
        $objPHPExcel2->getActiveSheet()->getStyle('A5:E5')->getFill()->getStartColor()->setARGB('1C336E');
        $objPHPExcel2->getActiveSheet()->getStyle('B6:B9')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
        $objPHPExcel2->getActiveSheet()->getStyle('A5:E5')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
        $objPHPExcel2->getActiveSheet()->getStyle('C6:E9')->getNumberFormat()->setFormatCode('#,##0.00');
        $objPHPExcel2->getActiveSheet()->getStyle('A9:E9')->getFont()->setBold(true);
        $objPHPExcel2->getActiveSheet()->mergeCells('A4:E4');
        $objPHPExcel2->getActiveSheet()->getStyle('A4:E4')->getFont()->setBold(true);
        $objPHPExcel2->getActiveSheet()->getStyle('A4:E4')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);

        // Detalle del pago
        $objPHPExcel2->getActiveSheet()->mergeCells('A11:F11');
        $objPHPExcel2->getActiveSheet()->getStyle('A11:F11')->getFont()->setBold(true);
        $objPHPExcel2->getActiveSheet()->getStyle('A11:F11')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
        $objPHPExcel2->getActiveSheet()->getStyle('A12:F12')->getFont()->setBold(true);
        $objPHPExcel2->getActiveSheet()->getStyle('A12:F12')->getFont()->getColor()->setARGB(PHPExcel_Style_Color::COLOR_WHITE);
        $objPHPExcel2->getActiveSheet()->getStyle('A12:F12')->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID);
        $objPHPExcel2->getActiveSheet()->getStyle('A12:F12')->getFill()->getStartColor()->setARGB('1C336E');
        $objPHPExcel2->getActiveSheet()->getStyle('A12:F12')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
        $objPHPExcel2->getActiveSheet()->getStyle('A13:D13')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
        $objPHPExcel2->getActiveSheet()->getStyle('E13')->getNumberFormat()->setFormatCode('#,##0.00');
        $objPHPExcel2->getActiveSheet()->getStyle('F13')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);

        if ($detallePago) {
            $objPHPExcel2->getActiveSheet()->getCell('C13')->setValueExplicit($detallePago['numero_cuenta'], PHPExcel_Cell_DataType::TYPE_STRING);
            $objPHPExcel2->getActiveSheet()->getStyle('C13')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
        }

        // Historial de pagos
        $objPHPExcel2->getActiveSheet()->mergeCells('A15:H15');
        $objPHPExcel2->getActiveSheet()->getStyle('A15:H15')->getFont()->setBold(true);
        $objPHPExcel2->getActiveSheet()->getStyle('A15:H15')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
        $objPHPExcel2->getActiveSheet()->getStyle('A16:H16')->getFont()->setBold(true);
        $objPHPExcel2->getActiveSheet()->getStyle('A16:H16')->getFont()->getColor()->setARGB(PHPExcel_Style_Color::COLOR_WHITE);
        $objPHPExcel2->getActiveSheet()->getStyle('A16:H16')->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID);
        $objPHPExcel2->getActiveSheet()->getStyle('A16:H16')->getFill()->getStartColor()->setARGB('1C336E');
        $objPHPExcel2->getActiveSheet()->getStyle('A16:H16')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
        $objPHPExcel2->getActiveSheet()->getStyle("A17:D{$numeroHistorialPagos}")->getNumberFormat()->setFormatCode('#,##0.00');

        foreach ($historialPagos as $key => $historial) {
            if ($key == 0) {
                $numero = 17;
            } else {
                $numero = $numeroHistorialPagos;
            }
            $objPHPExcel2->getActiveSheet()->getCell("F{$numero}")->setValueExplicit($historial['numero_cuenta'], PHPExcel_Cell_DataType::TYPE_STRING);
        }

        $objPHPExcel2->getActiveSheet()->getStyle("F17:H{$numeroHistorialPagos}")->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);

        // Aportantes activos
        $inicioAportesActivos = $numeroHistorialPagos + 2;
        $numeroAportesActivos = $inicioAportesActivos + (count($aportesActivos) - 1) + 2;
        $numeroAportesNoDefinidos = ($numeroAportesActivos + 5) + count($aportesNoDefinidos) - 1;

        $objPHPExcel2->getActiveSheet()->mergeCells("A{$inicioAportesActivos}:J{$inicioAportesActivos}");
        $objPHPExcel2->getActiveSheet()->getStyle("A{$inicioAportesActivos}:J{$inicioAportesActivos}")->getFont()->setBold(true);
        $objPHPExcel2->getActiveSheet()->getStyle("A{$inicioAportesActivos}:J{$inicioAportesActivos}")->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
        $inicioAportesActivos += 1;
        $objPHPExcel2->getActiveSheet()->getStyle("A{$inicioAportesActivos}:J{$inicioAportesActivos}")->getFont()->setBold(true);
        $objPHPExcel2->getActiveSheet()->getStyle("A{$inicioAportesActivos}:J{$inicioAportesActivos}")->getFont()->getColor()->setARGB(PHPExcel_Style_Color::COLOR_WHITE);
        $objPHPExcel2->getActiveSheet()->getStyle("A{$inicioAportesActivos}:J{$inicioAportesActivos}")->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID);
        $objPHPExcel2->getActiveSheet()->getStyle("A{$inicioAportesActivos}:J{$inicioAportesActivos}")->getFill()->getStartColor()->setARGB('1C336E');
        $objPHPExcel2->getActiveSheet()->getStyle("A{$inicioAportesActivos}:J{$inicioAportesActivos}")->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
        $inicioAportesActivos += 1;
        $objPHPExcel2->getActiveSheet()->getStyle("A{$inicioAportesActivos}:B{$numeroAportesActivos}")->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_LEFT);
        $objPHPExcel2->getActiveSheet()->getStyle("C{$inicioAportesActivos}:I{$numeroAportesActivos}")->getNumberFormat()->setFormatCode('#,##0.00');
        $objPHPExcel2->getActiveSheet()->getStyle("J{$inicioAportesActivos}:J{$numeroAportesActivos}")->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);

        $formula = "=SUM(C{$inicioAportesActivos}:C{$numeroAportesActivos})";
        $formula2 = "=SUM(D{$inicioAportesActivos}:D{$numeroAportesActivos})";
        $formula3 = "=SUM(E{$inicioAportesActivos}:E{$numeroAportesActivos})";
        $formula4 = "=SUM(F{$inicioAportesActivos}:F{$numeroAportesActivos})";
        $formula5 = "=SUM(G{$inicioAportesActivos}:G{$numeroAportesActivos})";
        $formula6 = "=SUM(H{$inicioAportesActivos}:H{$numeroAportesActivos})";
        $formula7 = "=SUM(I{$inicioAportesActivos}:I{$numeroAportesActivos})";
        $numeroAportesActivos += 1;

        $objPHPExcel2->getActiveSheet()->mergeCells("A{$numeroAportesActivos}:B{$numeroAportesActivos}");
        $objPHPExcel2->getActiveSheet()->getStyle("A{$numeroAportesActivos}:I{$numeroAportesActivos}")->getFont()->setBold(true);
        $objPHPExcel2->getActiveSheet()->getStyle("A{$numeroAportesActivos}")->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);

        $objPHPExcel2->getActiveSheet()->setCellValue("C{$numeroAportesActivos}", $formula);
        $objPHPExcel2->getActiveSheet()->getStyle("C{$numeroAportesActivos}")->getNumberFormat()->setFormatCode('#,##0.00');
        $objPHPExcel2->getActiveSheet()->getStyle("C{$numeroAportesActivos}")->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);

        $objPHPExcel2->getActiveSheet()->setCellValue("D{$numeroAportesActivos}", $formula2);
        $objPHPExcel2->getActiveSheet()->getStyle("D{$numeroAportesActivos}")->getNumberFormat()->setFormatCode('#,##0.00');
        $objPHPExcel2->getActiveSheet()->getStyle("D{$numeroAportesActivos}")->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);

        $objPHPExcel2->getActiveSheet()->setCellValue("E{$numeroAportesActivos}", $formula3);
        $objPHPExcel2->getActiveSheet()->getStyle("E{$numeroAportesActivos}")->getNumberFormat()->setFormatCode('#,##0.00');
        $objPHPExcel2->getActiveSheet()->getStyle("E{$numeroAportesActivos}")->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);

        $objPHPExcel2->getActiveSheet()->setCellValue("F{$numeroAportesActivos}", $formula4);
        $objPHPExcel2->getActiveSheet()->getStyle("F{$numeroAportesActivos}")->getNumberFormat()->setFormatCode('#,##0.00');
        $objPHPExcel2->getActiveSheet()->getStyle("F{$numeroAportesActivos}")->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);

        $objPHPExcel2->getActiveSheet()->setCellValue("G{$numeroAportesActivos}", $formula5);
        $objPHPExcel2->getActiveSheet()->getStyle("G{$numeroAportesActivos}")->getNumberFormat()->setFormatCode('#,##0.00');
        $objPHPExcel2->getActiveSheet()->getStyle("G{$numeroAportesActivos}")->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);

        $objPHPExcel2->getActiveSheet()->setCellValue("H{$numeroAportesActivos}", $formula6);
        $objPHPExcel2->getActiveSheet()->getStyle("H{$numeroAportesActivos}")->getNumberFormat()->setFormatCode('#,##0.00');
        $objPHPExcel2->getActiveSheet()->getStyle("H{$numeroAportesActivos}")->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);

        $objPHPExcel2->getActiveSheet()->setCellValue("I{$numeroAportesActivos}", $formula7);
        $objPHPExcel2->getActiveSheet()->getStyle("I{$numeroAportesActivos}")->getNumberFormat()->setFormatCode('#,##0.00');
        $objPHPExcel2->getActiveSheet()->getStyle("I{$numeroAportesActivos}")->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);

        $numeroAportesActivos += 2;

        // Asociados no definidos
        $objPHPExcel2->getActiveSheet()->mergeCells("A{$numeroAportesActivos}:I{$numeroAportesActivos}");
        $objPHPExcel2->getActiveSheet()->getStyle("A{$numeroAportesActivos}:I{$numeroAportesActivos}")->getFont()->setBold(true);
        $objPHPExcel2->getActiveSheet()->getStyle("A{$numeroAportesActivos}:I{$numeroAportesActivos}")->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);

        $numeroAportesActivos += 1;

        $objPHPExcel2->getActiveSheet()->getStyle("A{$numeroAportesActivos}:I{$numeroAportesActivos}")->getFont()->setBold(true);
        $objPHPExcel2->getActiveSheet()->getStyle("A{$numeroAportesActivos}:I{$numeroAportesActivos}")->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
        $objPHPExcel2->getActiveSheet()->getStyle("A{$numeroAportesActivos}:I{$numeroAportesActivos}")->getFont()->getColor()->setARGB(PHPExcel_Style_Color::COLOR_WHITE);
        $objPHPExcel2->getActiveSheet()->getStyle("A{$numeroAportesActivos}:I{$numeroAportesActivos}")->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID);
        $objPHPExcel2->getActiveSheet()->getStyle("A{$numeroAportesActivos}:I{$numeroAportesActivos}")->getFill()->getStartColor()->setARGB('1C336E');

        $primera = $numeroAportesActivos += 1;

        $objPHPExcel2->getActiveSheet()->getStyle("A{$primera}:B{$numeroAportesNoDefinidos}")->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_LEFT);
        $objPHPExcel2->getActiveSheet()->getStyle("B{$primera}:B{$numeroAportesNoDefinidos}")->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
        $objPHPExcel2->getActiveSheet()->getStyle("H{$primera}:I{$numeroAportesNoDefinidos}")->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
        $objPHPExcel2->getActiveSheet()->getStyle("C{$primera}:G{$numeroAportesNoDefinidos}")->getNumberFormat()->setFormatCode('#,##0.00');

        $formula1 = "=SUM(C{$primera}:C{$numeroAportesNoDefinidos})";
        $formula2 = "=SUM(D{$primera}:D{$numeroAportesNoDefinidos})";
        $formula3 = "=SUM(E{$primera}:E{$numeroAportesNoDefinidos})";
        $formula4 = "=SUM(F{$primera}:F{$numeroAportesNoDefinidos})";
        $formula5 = "=SUM(G{$primera}:G{$numeroAportesNoDefinidos})";

        $numeroAportesNoDefinidos += 1;
        // Totales
        $objPHPExcel2->getActiveSheet()->mergeCells("A{$numeroAportesNoDefinidos}:B{$numeroAportesNoDefinidos}");
        $objPHPExcel2->getActiveSheet()->getStyle("A{$numeroAportesNoDefinidos}:G{$numeroAportesNoDefinidos}")->getFont()->setBold(true);
        $objPHPExcel2->getActiveSheet()->getStyle("A{$numeroAportesNoDefinidos}:B{$numeroAportesNoDefinidos}")->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);

        if ($aportesNoDefinidos) {
            $objPHPExcel2->getActiveSheet()->setCellValue("C{$numeroAportesNoDefinidos}", $formula1);
            $objPHPExcel2->getActiveSheet()->getStyle("C{$numeroAportesNoDefinidos}")->getNumberFormat()->setFormatCode('#,##0.00');
            $objPHPExcel2->getActiveSheet()->getStyle("C{$numeroAportesNoDefinidos}")->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);

            $objPHPExcel2->getActiveSheet()->setCellValue("D{$numeroAportesNoDefinidos}", $formula2);
            $objPHPExcel2->getActiveSheet()->getStyle("D{$numeroAportesNoDefinidos}")->getNumberFormat()->setFormatCode('#,##0.00');
            $objPHPExcel2->getActiveSheet()->getStyle("D{$numeroAportesNoDefinidos}")->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);

            $objPHPExcel2->getActiveSheet()->setCellValue("E{$numeroAportesNoDefinidos}", $formula3);
            $objPHPExcel2->getActiveSheet()->getStyle("E{$numeroAportesNoDefinidos}")->getNumberFormat()->setFormatCode('#,##0.00');
            $objPHPExcel2->getActiveSheet()->getStyle("E{$numeroAportesNoDefinidos}")->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);

            $objPHPExcel2->getActiveSheet()->setCellValue("F{$numeroAportesNoDefinidos}", $formula4);
            $objPHPExcel2->getActiveSheet()->getStyle("F{$numeroAportesNoDefinidos}")->getNumberFormat()->setFormatCode('#,##0.00');
            $objPHPExcel2->getActiveSheet()->getStyle("F{$numeroAportesNoDefinidos}")->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);

            $objPHPExcel2->getActiveSheet()->setCellValue("G{$numeroAportesNoDefinidos}", $formula5);
            $objPHPExcel2->getActiveSheet()->getStyle("G{$numeroAportesNoDefinidos}")->getNumberFormat()->setFormatCode('#,##0.00');
            $objPHPExcel2->getActiveSheet()->getStyle("G{$numeroAportesNoDefinidos}")->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);
        }
        header('Content-type: application/vnd.ms-excel');
        header('Content-Disposition: attachment; filename="Archivo de aportes ordinarios ('.$datos[1]['nombre_archivo'].').xlsx"');

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

    public function actionPdfAOFaltante($id)
    {
        Yii::import('application.modules.contable.models.*', true);

        $info = array(
            'model' => '',
            'modelAportes' => '',
            'modelAportesDiferidos' => '',
            'modelAportesLiquidados' => '',
            'modelAportesTotalDiferidos' => '',
            'aportesCeroPatrono' => '',
            'aportesCeroSocio' => '',
            'aportesCero' => '',
            'totalAportantes' => '',
            'totalMontoAporteActivo' => '',
            'totalMontoAporteLiquidados' => '',
            'totalMontoAporteDiferidos' => '',
        );

        $modelEmpresa = Empresa::model()->find();
        $usuario = CrugeUserI::model()->findByPk(Yii::app()->user->id);

        $info['model'] = $this->loadModel($id);
        $info['aportesCeroPatrono'] = AporteOrdinario::model()->count('id_txt=:id AND COALESCE(aporte_patrono,0)=0 AND blnborrado=FALSE', array(':id' => $info['model']->id));
        $info['aportesCeroSocio'] = AporteOrdinario::model()->count('id_txt=:id AND COALESCE(aporte_asociado,0)=0  AND blnborrado=FALSE', array(':id' => $info['model']->id));
        $info['aportesCero'] = AporteOrdinario::model()->count('id_txt=:id AND (COALESCE(aporte_asociado,0)=0 AND COALESCE(aporte_patrono,0)=0)AND blnborrado=FALSE', array(':id' => $info['model']->id));
        $info['modelAportes'] = new AporteOrdinario('search');
        $info['modelAportesDiferidos'] = new AporteOrdinarioDiferido('search');
        $sql = 'SELECT sum(monto_pagado) as monto_pagado
                FROM "comprobante_pago" "t"
                LEFT OUTER JOIN "retenciones"."comprobante_pago_datos_txt_integrado" "datosTextIntegrado" ON ("datosTextIntegrado"."id_comprobante_pago"="t"."id")
                WHERE (id_txt=:id)';
        $aportesComprobante = ComprobantePago::model()->with('datosTextIntegrado')->findBysql($sql,array(':id' => $info['model']->id));

        $info['totalAportantes'] = AporteOrdinario::model()->count('id_txt=:id  AND  blnborrado=FALSE AND COALESCE(id_estatus_aporte,0)!=4', array(':id' => $info['model']->id));
        $info['totalMontoAporteActivo'] = AporteOrdinario::model()->find(array(
            'select' => ' sum (aporte_patrono) as aporte_patrono, sum (aporte_asociado) as aporte_asociado',
            'condition' => 'id_txt=:id  AND  blnborrado=FALSE AND COALESCE(id_estatus_aporte,0)!=4',
            'params' => array(':id' => $info['model']->id),
        ));
        $info['modelAportesLiquidados'] = AporteOrdinarioDiferido::model()->count('id_txt=:id AND id_estatus_aod =5 AND  blnborrado=FALSE', array(
            ':id' => $info['model']->id,
        ));
        $info['totalMontoAporteLiquidados'] = AporteOrdinarioDiferido::model()->find(array(
            'select' => ' sum (aporte_patrono) as aporte_patrono, sum (aporte_asociado) as aporte_asociado',
            'condition' => 'id_txt=:id AND id_estatus_aod =5 AND  blnborrado=FALSE',
            'params' => array(':id' => $info['model']->id),
        ));
        $info['modelAportesTotalDiferidos'] = AporteOrdinarioDiferido::model()->count('id_txt=:id AND id_estatus_aod !=5 AND  blnborrado=FALSE', array(
            ':id' => $info['model']->id,
        ));
        $info['totalMontoAporteDiferidos'] = AporteOrdinarioDiferido::model()->find(array(
            'select' => ' sum (aporte_patrono) as aporte_patrono, sum (aporte_asociado) as aporte_asociado',
            'condition' => 'id_txt=:id AND id_estatus_aod !=5 AND  blnborrado=FALSE',
            'params' => array(':id' => $info['model']->id),
        ));

        if (isset($_GET['AporteOrdinario'])) {
            $info['modelAportes']->attributes = $_GET['AporteOrdinario'];
        }

        if (isset($_GET['AporteOrdinarioDiferido'])) {
            $info['modelAportesDiferidos']->attributes = $_GET['AporteOrdinarioDiferido'];
        }

        Yii::createComponent('application.extensions.mpdf60.mpdf');
        $mpdf = new mPDF('win-1252', 'LETTER', 8, '', 15, 15, 25, 15, 5, 5);
        $mpdf->simpleTables = true;
        $mpdf->useSubstitutions = false;
        $arr = array(
            'L' => array(
                'content' => (empty($modelEmpresa->logo))
                    ? '<img src='.Yii::app()->baseUrl."/images/logo.png alt='Logo' width ='40px' heigth='40px'/>"
                    : "<img src='".Yii::app()->request->getBaseUrl(true).'/images/'.$modelEmpresa->logo."' alt='Logo' width ='40px' heigth='40px'/>",
            ),
            'R' => array(
                'content' => $info['model']->idCarga->nombre,
                'font-style' => 'BI',
                'font-family' => 'serif',
                'color' => '#000000',
            ),
            'line' => 0,
        );
        $mpdf->setHeader($arr, 'O');
        $mpdf->defaultfooterfontsize = 6;
        $mpdf->SetFooter('Elaborado por:<br>'.$usuario->getFullName().' <br>{DATE d/m/Y} |'.$modelEmpresa->dir_emp.'| Página {PAGENO}/{nbpg}');
        $mpdf->WriteHTML($this->renderPartial('AOF_pdf', array(
            'data' => $info,
            'detalle_pago' => ProcesoPago::detalle($info['model']->id),
            'aportesComprobante' => $aportesComprobante,
            'comp' => Comprobante::model()->findAll('nro_documento=:doc', array(':doc' => $info['model']->id)),
        ), true));

        //Imprime la tabla de aportantes activos
        $mpdf->addPage();
        $mpdf->setHeader($arr, 'O');
        $mpdf->defaultfooterfontsize = 6;
        $mpdf->SetFooter('Elaborado por:<br>'.$usuario->getFullName().' <br>{DATE d/m/Y} |'.$modelEmpresa->dir_emp.'| Página {PAGENO}/{nbpg}');
        $mpdf->WriteHTML($this->renderPartial('tabla_aportante_faltantes', array(
            'datos_aportes' => AporteOrdinario::aportesFaltantes($info['model']->id),
        ), true), 2);

        $mpdf->Output('Archivo de aportes ordinarios('.$info['model']['nombre_archivo'].')', 'D');
        exit;
    }

    public function actionXlsAOF($id)
    {
        $depuracion = DatosTxtIntegrado::depuracion($id);
        unset($depuracion[0]['registro']);
        unset($depuracion[1]['registro']);
        unset($depuracion[2]['registro']);
        unset($depuracion[3]['registro']);

        $datos = [
            ['Nombre archivo', 'Descripción', 'Cantidad de aportantes', 'Total aportes', 'Fecha del aporte',
            'Fecha de registro', 'Monto cancelado por RRHH', 'Monto faltante', 'Asociados con aporte patronal en cero (0)', 'Asociado con aporte empleado en cero (0)',
            'Aportantes con aportes propios y del patrono en cero (0)', 'Estatus'],
            DatosTxtIntegrado::informacionAportesFaltantes($id)
        ];

        $datos = array_merge($datos, [
            [''],
            ['Resultado de la depuración de carga'],
            ['Tipo', 'Cantidad asociados', 'Total aporte empleado', 'Total aporte patronal', 'Monto total'],
            array_merge(['Activos'], $depuracion[0]),
            array_merge(['Ex-asociados'], $depuracion[1]),
            array_merge(['No asociados'], $depuracion[2]),
            array_merge(['Totales'], $depuracion[3]),
            [''],
            ['Detalle del pago'],
            ['Fecha del pago', 'Banco origen', 'Cuenta origen', 'Referencia del pago', 'Monto pagado', 'Observación'],
            $detallePago = ProcesoPago::detalle($id),
            [''],
            ['Aportantes activos'],
            ['Cédula', 'Nombre y apellido', 'Deuda patrono', 'Deuda asociado', 'Aporte pendiente', 'Fecha aporte'],
        ]);
        $aportesActivos = AporteOrdinarioDiferido::detalle($id);
        $numeroAportesActivos = 13 + (count($aportesActivos) - 1);
        $datos = array_merge($datos, $aportesActivos);
        $datos = array_merge($datos, [['TOTALES']]);

        $phpExcelPath = Yii::getPathOfAlias('ext.Excel.PHPExcel.Classes');
        $phpExcelPath2 = Yii::getPathOfAlias('application.extensions.Excel.PHPExcel.Classes.PHPExcel');
        spl_autoload_unregister(array('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(array('YiiBase', 'autoload'));
        $objPHPExcel2 = new PHPExcel();

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

        $objPHPExcel2->getActiveSheet()->fromArray($datos, null, 'A1');
        $objPHPExcel2->getActiveSheet()->getStyle('A1:L1')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
        $objPHPExcel2->getActiveSheet()->getStyle('A1:L1')->getFont()->setBold(true);
        $objPHPExcel2->getActiveSheet()->getStyle('A1:L1')->getFont()->getColor()->setARGB(PHPExcel_Style_Color::COLOR_WHITE);
        $objPHPExcel2->getActiveSheet()->getStyle('A1:L1')->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID);
        $objPHPExcel2->getActiveSheet()->getStyle('A1:L1')->getFill()->getStartColor()->setARGB('1C336E');
        $objPHPExcel2->getActiveSheet()->getStyle('D')->getNumberFormat()->setFormatCode('#,##0.00');
        $objPHPExcel2->getActiveSheet()->getStyle('G2:H2')->getNumberFormat()->setFormatCode('#,##0.00');
        $objPHPExcel2->getActiveSheet()->getStyle('I2:L2')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
        $objPHPExcel2->getActiveSheet()->getStyle('C')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
        $objPHPExcel2->getActiveSheet()->getStyle('G')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
        $objPHPExcel2->getActiveSheet()->getStyle('H')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
        $objPHPExcel2->getActiveSheet()->getStyle('E')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
        $objPHPExcel2->getActiveSheet()->getStyle('F')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
        $objPHPExcel2->getActiveSheet()->getStyle('I')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);

        $objPHPExcel2->getActiveSheet()->getStyle('A6:A8')->getFill()->getStartColor()->setARGB('1C336E');
        $objPHPExcel2->getActiveSheet()->getStyle('A5:E5')->getFont()->setBold(true);
        $objPHPExcel2->getActiveSheet()->getStyle('A5:E5')->getFont()->getColor()->setARGB(PHPExcel_Style_Color::COLOR_WHITE);
        $objPHPExcel2->getActiveSheet()->getStyle('A5:E5')->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID);
        $objPHPExcel2->getActiveSheet()->getStyle('A5:E5')->getFill()->getStartColor()->setARGB('1C336E');
        $objPHPExcel2->getActiveSheet()->getStyle('B6:B9')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
        $objPHPExcel2->getActiveSheet()->getStyle('A5:E5')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
        $objPHPExcel2->getActiveSheet()->getStyle('C6:E9')->getNumberFormat()->setFormatCode('#,##0.00');
        $objPHPExcel2->getActiveSheet()->getStyle('A9:E9')->getFont()->setBold(true);
        $objPHPExcel2->getActiveSheet()->mergeCells('A4:E4');
        $objPHPExcel2->getActiveSheet()->getStyle('A4:E4')->getFont()->setBold(true);
        $objPHPExcel2->getActiveSheet()->getStyle('A4:E4')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);

        // Detalle del pago
        $objPHPExcel2->getActiveSheet()->mergeCells('A11:F11');
        $objPHPExcel2->getActiveSheet()->getStyle('A11:F11')->getFont()->setBold(true);
        $objPHPExcel2->getActiveSheet()->getStyle('A11:F11')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
        $objPHPExcel2->getActiveSheet()->getStyle('A12:F12')->getFont()->setBold(true);
        $objPHPExcel2->getActiveSheet()->getStyle('A12:F12')->getFont()->getColor()->setARGB(PHPExcel_Style_Color::COLOR_WHITE);
        $objPHPExcel2->getActiveSheet()->getStyle('A12:F12')->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID);
        $objPHPExcel2->getActiveSheet()->getStyle('A12:F12')->getFill()->getStartColor()->setARGB('1C336E');
        $objPHPExcel2->getActiveSheet()->getStyle('A12:F12')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
        $objPHPExcel2->getActiveSheet()->getStyle('A13:D13')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
        $objPHPExcel2->getActiveSheet()->getStyle('E13')->getNumberFormat()->setFormatCode('#,##0.00');
        $objPHPExcel2->getActiveSheet()->getStyle('F13')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
        $objPHPExcel2->getActiveSheet()->getCell('C13')->setValueExplicit($detallePago['numero_cuenta'], PHPExcel_Cell_DataType::TYPE_STRING);
        $objPHPExcel2->getActiveSheet()->getStyle('C13')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);

        $numeroAportesActivos += 4;

        $objPHPExcel2->getActiveSheet()->mergeCells('A15:F15');
        $objPHPExcel2->getActiveSheet()->getStyle('A15:F15')->getFont()->setBold(true);
        $objPHPExcel2->getActiveSheet()->getStyle('A15:F15')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
        $objPHPExcel2->getActiveSheet()->getStyle('A16:F16')->getFont()->setBold(true);
        $objPHPExcel2->getActiveSheet()->getStyle('A16:F16')->getFont()->getColor()->setARGB(PHPExcel_Style_Color::COLOR_WHITE);
        $objPHPExcel2->getActiveSheet()->getStyle('A16:F16')->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID);
        $objPHPExcel2->getActiveSheet()->getStyle('A16:F16')->getFill()->getStartColor()->setARGB('1C336E');
        $objPHPExcel2->getActiveSheet()->getStyle('A16:F16')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
        $objPHPExcel2->getActiveSheet()->getStyle("A17:B{$numeroAportesActivos}")->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_LEFT);
        $objPHPExcel2->getActiveSheet()->getStyle("C17:E{$numeroAportesActivos}")->getNumberFormat()->setFormatCode('#,##0.00');
        $objPHPExcel2->getActiveSheet()->getStyle("F17:F{$numeroAportesActivos}")->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);

        $formula1 = "=SUM(C17:C{$numeroAportesActivos})";
        $formula2 = "=SUM(D17:D{$numeroAportesActivos})";
        $formula3 = "=SUM(E17:E{$numeroAportesActivos})";
        $numeroAportesActivos += 1;

        $objPHPExcel2->getActiveSheet()->mergeCells("A{$numeroAportesActivos}:B{$numeroAportesActivos}");
        $objPHPExcel2->getActiveSheet()->getStyle("A{$numeroAportesActivos}:E{$numeroAportesActivos}")->getFont()->setBold(true);
        $objPHPExcel2->getActiveSheet()->getStyle("A{$numeroAportesActivos}:B{$numeroAportesActivos}")->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);

        $objPHPExcel2->getActiveSheet()->setCellValue("C{$numeroAportesActivos}", $formula1);
        $objPHPExcel2->getActiveSheet()->getStyle("C{$numeroAportesActivos}")->getNumberFormat()->setFormatCode('#,##0.00');
        $objPHPExcel2->getActiveSheet()->getStyle("C{$numeroAportesActivos}")->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);

        $objPHPExcel2->getActiveSheet()->setCellValue("D{$numeroAportesActivos}", $formula2);
        $objPHPExcel2->getActiveSheet()->getStyle("D{$numeroAportesActivos}")->getNumberFormat()->setFormatCode('#,##0.00');
        $objPHPExcel2->getActiveSheet()->getStyle("D{$numeroAportesActivos}")->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);

        $objPHPExcel2->getActiveSheet()->setCellValue("E{$numeroAportesActivos}", $formula3);
        $objPHPExcel2->getActiveSheet()->getStyle("E{$numeroAportesActivos}")->getNumberFormat()->setFormatCode('#,##0.00');
        $objPHPExcel2->getActiveSheet()->getStyle("E{$numeroAportesActivos}")->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);

        header('Content-type: application/vnd.ms-excel');
        header('Content-Disposition: attachment; filename="Archivo de aportes ordinarios faltantes ('.$datos[1]['nombre_archivo'].').xlsx"');

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

    public function actionConfTxtIntegrado($id)
    {
        $model = $this->loadModel($id);
        $modelGestionAporteVoluntario = $this->firstOrCreateGAV($model->id);

        if (isset($_POST['GestionAporteVoluntario'])) {
            $modelGestionAporteVoluntario->attributes = $_POST['GestionAporteVoluntario'];
            $modelGestionAporteVoluntario->id_datos_txt_integrado = $model->id;
            $modelGestionAporteVoluntario->estatus = 1;
            if ($modelGestionAporteVoluntario->save()) {
                $this->redirect(array('confTxtIntegrado', 'id' => $model->id));
            }
        }

        $this->render('gestion_aporte_voluntario', array(
            'model' => $modelGestionAporteVoluntario,
            'modelTxt' => $model,
        ));
    }

    public function actionCerrarProceso($id)
    {
        $model = GestionAporteVoluntario::model()->findByPk($id);
        $model->cerrar();

        $this->redirect(array('confTxtIntegrado', 'id' => $model->id_datos_txt_integrado));
    }

    public function actionGenerarTxt($id)
    {
        $model = new PagosMasivos('registro_ae');
        $model->id_tipo_pagos_masivos = 7;

        $nomina = DatosTxtIntegrado::getById($id);

        if (is_null($nomina)) {
            Yii::app()->user->setFlash('error', 'La nomina seleccionada, no tiene aportantes que retiren');
            return $this->redirect(array('adminAE'));
        }

        if (isset($_POST['PagosMasivos'])) {
            $model->id_tipo_archivo = $_POST['PagosMasivos']['id_tipo_archivo'];
            $model->attributes = $_POST['PagosMasivos'];
            $res = $model->cargarPagos($nomina);
            if ($res['error']) {
                Yii::app()->user->setFlash('error', $res['mensaje']);
                return $this->redirect(array('adminAE'));
            }

            Yii::app()->user->setFlash('success', $res['mensaje']);
            return $this->redirect(array('adminAE'));
        }

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

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

        Yii::import('application.modules.contable.models.*', true);
        Yii::createComponent('application.extensions.mpdf60.mpdf');
        $modelEmpresa = Empresa::model()->find();
        $usuario = CrugeUserI::model()->findByPk(Yii::app()->user->id)->nombres.' '.CrugeUserI::model()->findByPk(Yii::app()->user->id)->apellidos;

        $ruta_logo = Yii::app()->request->getBaseUrl(true).'/images/'.$modelEmpresa->logo;

        $mpdf = new mPDF('win-1252', 'LETTER', 8, '', 15, 15, 25, 15, 5, 5);
        $arr = array(
            'L' => array(
                'content' => empty($modelEmpresa->logo)
                    ? '<img src='.Yii::app()->baseUrl.'/images/logo.png alt=\'Logo\' width =\'40px\' heigth=\'40px\'/>'
                    : '<img src=\''.$ruta_logo.'\' alt=\'Logo\' width =\'40px\' heigth=\'40px\'/>',
            ),
            'R' => array(
                'content' => $model->idCarga->nombre,
                'font-style' => 'BI',
                'font-family' => 'serif',
                'color' => '#000000'
            ),
            'line' => 0,
        );
        $mpdf->setHeader($arr, 'O');
        $mpdf->simpleTables = true;
        $mpdf->useSubstitutions = false;
        $mpdf->defaultfooterfontsize = 6;
        $mpdf->SetFooter('Elaborado por:<br>'.$usuario.' <br>{DATE d/m/Y} |'.$modelEmpresa->dir_emp.'| Página {PAGENO}/{nbpg}');
        $mpdf->WriteHTML($this->renderPartial('AE_pdf', array(
            'model' => $model,
            'resumen' => AporteVoluntario::resumen($model->id),
        ), true));

        $mpdf->addPage();
        $mpdf->setHeader($arr, 'O');
        $mpdf->simpleTables = true;
        $mpdf->useSubstitutions = false;
        $mpdf->defaultfooterfontsize = 6;
        $mpdf->SetFooter('Elaborado por:<br>'.$usuario.' <br>{DATE d/m/Y} |'.$modelEmpresa->dir_emp.'| Página {PAGENO}/{nbpg}');
        $mpdf->WriteHTML($this->renderPartial('tabla_aportes_voluntarios', array(
            'aportes' => AporteVoluntario::detalle($model->id)
        ), true));

        $mpdf->addPage();
        $mpdf->setHeader($arr, 'O');
        $mpdf->simpleTables = true;
        $mpdf->useSubstitutions = false;
        $mpdf->defaultfooterfontsize = 6;
        $mpdf->SetFooter('Elaborado por:<br>'.$usuario.' <br>{DATE d/m/Y} |'.$modelEmpresa->dir_emp.'| Página {PAGENO}/{nbpg}');
        $mpdf->WriteHTML($this->renderPartial('tabla_aportantes_no_definidos_AE', array(
            'aportes' => AporteVoluntarioDiferido::detalle($model->id)
        ), true));

        $mpdf->Output('Archivo de aportes extras('.$model->nombre_archivo.').pdf', 'D');
        exit;
    }

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

        $phpExcelPath = Yii::getPathOfAlias('ext.Excel.PHPExcel.Classes');
        $phpExcelPath2 = Yii::getPathOfAlias('application.extensions.Excel.PHPExcel.Classes.PHPExcel');
        spl_autoload_unregister(array('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(array('YiiBase', 'autoload'));
        $excel = new PHPExcel();

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

        $excel->getActiveSheet()->setCellValueByColumnAndRow(0, 1, 'Información del archivo');
        $excel->getActiveSheet()->mergeCells('A1:G1');
        $excel->getActiveSheet()->getStyle('A1:G1')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);

        $columna = 0;
        foreach (['Nombre archivo', 'Descripción', 'Fecha de registro', 'Fecha de aporte', 'Cantidad de aportantes', 'Total aporte', 'Estatus'] as $titulo) {
            $excel->getActiveSheet()->setCellValueByColumnAndRow($columna, 2, $titulo);
            $excel->getActiveSheet()->getStyleByColumnAndRow($columna, 2)->getFont()->setBold(true);
            $excel->getActiveSheet()->getStyleByColumnAndRow($columna, 2)->getFill()->getStartColor()->setARGB('1C336E');
            $excel->getActiveSheet()->getStyleByColumnAndRow($columna, 2)->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID);
            $excel->getActiveSheet()->getStyleByColumnAndRow($columna, 2)->getFont()->getColor()->setARGB(PHPExcel_Style_Color::COLOR_WHITE);
            $excel->getActiveSheet()->getStyleByColumnAndRow($columna, 2)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
            $columna++;
        }

        $excel->getActiveSheet()->setCellValueByColumnAndRow(0, 3, $model->nombre_archivo);
        $excel->getActiveSheet()->setCellValueByColumnAndRow(1, 3, $model->descripcion);
        $excel->getActiveSheet()->setCellValueByColumnAndRow(2, 3, Yii::app()->format->date($model->fecha_registro));
        $excel->getActiveSheet()->setCellValueByColumnAndRow(3, 3, Yii::app()->format->date($model->fecha_aporte));
        $excel->getActiveSheet()->setCellValueByColumnAndRow(4, 3, $model->cant_aportantes);
        $excel->getActiveSheet()->getStyleByColumnAndRow(4, 3)->getNumberFormat()->setFormatCode('#,##0');
        $excel->getActiveSheet()->getStyleByColumnAndRow(4, 3)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);
        $excel->getActiveSheet()->setCellValueByColumnAndRow(5, 3, $model->total_aportes);
        $excel->getActiveSheet()->getStyleByColumnAndRow(5, 3)->getNumberFormat()->setFormatCode('#,##0.00');
        $excel->getActiveSheet()->getStyleByColumnAndRow(5, 3)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);
        $excel->getActiveSheet()->setCellValueByColumnAndRow(6, 3, $model->getEstatusSc());

        $excel->getActiveSheet()->setCellValueByColumnAndRow(0, 5, 'Aportes cargados');
        $excel->getActiveSheet()->mergeCells('A5:K5');
        $excel->getActiveSheet()->getStyle('A5:K5')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
        $columna = 0;
        foreach ([
            'Cédula',
            'Nombres y apellidos',
            'Tipo aportante',
            'Tipo Operación ',
            'Cuenta destino',
            'Monto Cargado',
            'Monto Retirado',
            'Comisión Retira',
            'Monto Capitalizado',
            'Comisión capitalización',
            'Fecha Pago',
            'Estatus',
        ] as $titulo) {
            $excel->getActiveSheet()->setCellValueByColumnAndRow($columna, 6, $titulo);
            $excel->getActiveSheet()->getStyleByColumnAndRow($columna, 6)->getFont()->setBold(true);
            $excel->getActiveSheet()->getStyleByColumnAndRow($columna, 6)->getFill()->getStartColor()->setARGB('1C336E');
            $excel->getActiveSheet()->getStyleByColumnAndRow($columna, 6)->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID);
            $excel->getActiveSheet()->getStyleByColumnAndRow($columna, 6)->getFont()->getColor()->setARGB(PHPExcel_Style_Color::COLOR_WHITE);
            $excel->getActiveSheet()->getStyleByColumnAndRow($columna, 6)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
            $columna++;
        }

        $fila = 7;
        $aportesCargados = AporteVoluntario::detalle($model->id);
        $cantidadAportesCargadados = count($aportesCargados);
        foreach ($aportesCargados as $aportes) {
            $excel->getActiveSheet()->setCellValueByColumnAndRow(0, $fila, $aportes['cedula']);
            $excel->getActiveSheet()->setCellValueByColumnAndRow(1, $fila, $aportes['asociado']);
            $excel->getActiveSheet()->setCellValueByColumnAndRow(2, $fila, $aportes['tipo_aporte']);
            $excel->getActiveSheet()->setCellValueByColumnAndRow(3, $fila, $aportes['tipo_operacion']);
            $excel->getActiveSheet()->setCellValueExplicitByColumnAndRow(4, $fila, $aportes['cuenta_destino']);

            $excel->getActiveSheet()->setCellValueByColumnAndRow(5, $fila, $aportes['monto_cargado']);
            $excel->getActiveSheet()->getStyleByColumnAndRow(5, $fila)->getNumberFormat()->setFormatCode('#,##0.00');
            $excel->getActiveSheet()->getStyleByColumnAndRow(5, $fila)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);

            $excel->getActiveSheet()->setCellValueByColumnAndRow(6, $fila, $aportes['monto_retirado']);
            $excel->getActiveSheet()->getStyleByColumnAndRow(6, $fila)->getNumberFormat()->setFormatCode('#,##0.00');
            $excel->getActiveSheet()->getStyleByColumnAndRow(6, $fila)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);

            $excel->getActiveSheet()->setCellValueByColumnAndRow(7, $fila, $aportes['monto_comision_retira']);
            $excel->getActiveSheet()->getStyleByColumnAndRow(7, $fila)->getNumberFormat()->setFormatCode('#,##0.00');
            $excel->getActiveSheet()->getStyleByColumnAndRow(7, $fila)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);

            $excel->getActiveSheet()->setCellValueExplicitByColumnAndRow(8, $fila, $aportes['monto_capitalizado']);
            $excel->getActiveSheet()->getStyleByColumnAndRow(8, $fila)->getNumberFormat()->setFormatCode('#,##0.00');
            $excel->getActiveSheet()->getStyleByColumnAndRow(8, $fila)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);

            $excel->getActiveSheet()->setCellValueByColumnAndRow(9, $fila, $aportes['monto_comision_capitaliza']);
            $excel->getActiveSheet()->getStyleByColumnAndRow(9, $fila)->getNumberFormat()->setFormatCode('#,##0.00');
            $excel->getActiveSheet()->getStyleByColumnAndRow(9, $fila)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);

            $excel->getActiveSheet()->setCellValueByColumnAndRow(10, $fila, Yii::app()->format->date($aportes['fecha_pago']));

            $excel->getActiveSheet()->setCellValueByColumnAndRow(11, $fila, $aportes['estatus']);
            $fila++;
        }

        // Totales
        $excel->getActiveSheet()->setCellValueByColumnAndRow(0, $fila, 'Total');
        $excel->getActiveSheet()->getStyleByColumnAndRow(0, $fila)->getFont()->setBold(true);
        $ultimoDato = $fila - 1;
        $excel->getActiveSheet()->setCellValue("F{$fila}", "=SUM(F7:F{$ultimoDato})");
        $excel->getActiveSheet()->getStyle("F{$fila}")->getNumberFormat()->setFormatCode('#,##0.00');
        $excel->getActiveSheet()->getStyle("F{$fila}")->getFont()->setBold(true);

        $excel->getActiveSheet()->setCellValue("G{$fila}", "=SUM(G7:G{$ultimoDato})");
        $excel->getActiveSheet()->getStyle("G{$fila}")->getNumberFormat()->setFormatCode('#,##0.00');
        $excel->getActiveSheet()->getStyle("G{$fila}")->getFont()->setBold(true);

        $excel->getActiveSheet()->setCellValue("H{$fila}", "=SUM(H7:H{$ultimoDato})");
        $excel->getActiveSheet()->getStyle("H{$fila}")->getNumberFormat()->setFormatCode('#,##0.00');
        $excel->getActiveSheet()->getStyle("H{$fila}")->getFont()->setBold(true);

        $excel->getActiveSheet()->setCellValue("I{$fila}", "=SUM(I7:I{$ultimoDato})");
        $excel->getActiveSheet()->getStyle("I{$fila}")->getNumberFormat()->setFormatCode('#,##0.00');
        $excel->getActiveSheet()->getStyle("I{$fila}")->getFont()->setBold(true);

        $excel->getActiveSheet()->setCellValue("J{$fila}", "=SUM(J7:J{$ultimoDato})");
        $excel->getActiveSheet()->getStyle("J{$fila}")->getNumberFormat()->setFormatCode('#,##0.00');
        $excel->getActiveSheet()->getStyle("J{$fila}")->getFont()->setBold(true);

        $columna = 0;
        $fila = 6 + $cantidadAportesCargadados + 3;
        $excel->getActiveSheet()->setCellValueByColumnAndRow(0, $fila, 'Aportes no definidos');
        $excel->getActiveSheet()->mergeCells("A{$fila}:E{$fila}");
        $excel->getActiveSheet()->getStyle("A{$fila}:E{$fila}")->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);

        $fila += 1;
        foreach ([
            'Cédula',
            'Monto',
            'Areas',
            'Aportante',
            'Estatus',
        ] as $titulo) {
            $excel->getActiveSheet()->setCellValueByColumnAndRow($columna, $fila, $titulo);
            $excel->getActiveSheet()->getStyleByColumnAndRow($columna, $fila)->getFont()->setBold(true);
            $excel->getActiveSheet()->getStyleByColumnAndRow($columna, $fila)->getFill()->getStartColor()->setARGB('1C336E');
            $excel->getActiveSheet()->getStyleByColumnAndRow($columna, $fila)->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID);
            $excel->getActiveSheet()->getStyleByColumnAndRow($columna, $fila)->getFont()->getColor()->setARGB(PHPExcel_Style_Color::COLOR_WHITE);
            $excel->getActiveSheet()->getStyleByColumnAndRow($columna, $fila)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
            $columna++;
        }

        $fila += 1;
        $aportesNoDefinidos = AporteVoluntarioDiferido::detalle($model->id);
        foreach ($aportesNoDefinidos as $aportes) {
            $excel->getActiveSheet()->setCellValueByColumnAndRow(0, $fila, $aportes['cedula']);
            $excel->getActiveSheet()->setCellValueByColumnAndRow(1, $fila, $aportes['monto']);
            $excel->getActiveSheet()->getStyleByColumnAndRow(1, $fila)->getNumberFormat()->setFormatCode('#,##0.00');
            $excel->getActiveSheet()->getStyleByColumnAndRow(1, $fila)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);
            $excel->getActiveSheet()->setCellValueByColumnAndRow(2, $fila, $aportes['area']);
            $excel->getActiveSheet()->setCellValueByColumnAndRow(3, $fila, $aportes['aportante']);
            $excel->getActiveSheet()->setCellValueByColumnAndRow(4, $fila, $aportes['nombre_estatus']);
            $fila++;
        }

        // Totales
        $excel->getActiveSheet()->setCellValueByColumnAndRow(0, $fila, 'Total');
        $excel->getActiveSheet()->getStyleByColumnAndRow(0, $fila)->getFont()->setBold(true);
        $ultimoDato = $fila - 1;
        $excel->getActiveSheet()->setCellValue("B{$fila}", "=SUM(B7:B{$ultimoDato})");
        $excel->getActiveSheet()->getStyle("B{$fila}")->getNumberFormat()->setFormatCode('#,##0.00');
        $excel->getActiveSheet()->getStyle("B{$fila}")->getFont()->setBold(true);

        header('Content-type: application/vnd.ms-excel');
        header('Content-Disposition: attachment; filename="Archivo de aportes extra ('.$model->nombre_archivo.').xlsx"');

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

    public function actionSinCuenta($id)
    {
        $model= $this->loadModel($id);
        $modelAportes = new AporteVoluntario('search');

        if(isset($_GET['AporteVoluntario'])) {
            $modelAportes->attributes = $_GET['AporteVoluntario'];
        }

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

    public function actionConsolidado()
    {
        $aportes = implode(',', json_decode($_POST['aportes']));

        if (empty($aportes)) {
            echo json_encode([
                'aporte_asociado' => 0,00,
                'aporte_patrono' => 0,00,
                'total_aporte' => 0,00,
            ]);
            return;
        }

        echo json_encode(Yii::app()->getDb()->createCommand("
            SELECT coalesce(sum(aporte_asociado), 0) AS aporte_asociado,
                   coalesce(sum(aporte_patrono), 0) AS aporte_patrono,
                   (coalesce(sum(aporte_asociado), 0) + coalesce(sum(aporte_patrono), 0)) total_aporte
            FROM retenciones.aporte_ordinario
            WHERE id IN ({$aportes})
        ")->queryRow());
    }

    public function actionResumen()
    {
        $id = $_POST['id'];

        if (empty($id)) {
            echo json_encode([
                'aporte_asociado' => 0,00,
                'aporte_patrono' => 0,00,
                'total_aporte' => 0,00,
            ]);
            return;
        }

        echo json_encode(Yii::app()->getDb()->createCommand("
            SELECT count(*) as asociados,
                   coalesce(sum(aporte_asociado), 0) AS aporte_asociado,
                   coalesce(sum(aporte_patrono), 0) AS aporte_patrono,
                   (coalesce(sum(aporte_asociado), 0) + coalesce(sum(aporte_patrono), 0)) total_aporte
            FROM retenciones.aporte_ordinario
            where id_txt=:id;
        ")->bindValue('id', $id)->queryRow());
    }

    public function actionReversarNominaAE($id)
    {
        $model = $this->loadModel($id);
        $model->scenario = 'reversar';

        if (! isset($_POST['DatosTxtIntegrado'])) {
            return $this->render('reversar',array(
                'model' => $model,
            ));
        }

        $model->observacion = $_POST['DatosTxtIntegrado']['observacion'];

        $transaction = Yii::app()->db->beginTransaction();
        try {
            $model->reversarNomina();
            $transaction->commit();
            Yii::app()->user->setFlash('success', 'Nómina reversada correctamente.');
        } catch (Exception $e) {
            $transaction->rollback();
            Yii::app()->user->setFlash('error', $e->getMessage());
        }

        $this->redirect(array('/aportes/datosTxtIntegrado/adminAE'));
    }

    public function actionReversarNominaAO($id)
    {
        $model = $this->loadModel($id);
        $model->fecha_comprobante = date('d-m-Y');
        $model->scenario = 'reversar';

        if (! isset($_POST['DatosTxtIntegrado'])) {
            return $this->render('reversar',array(
                'model' => $model,
            ));
        }

        $model->fecha_comprobante = (new Warp($_POST))->get('DatosTxtIntegrado.fecha_comprobante', date('d-m-Y'));
        $model->observacion = $_POST['DatosTxtIntegrado']['observacion'];

        $transaction = Yii::app()->db->beginTransaction();
        try {
            $model->reversarNominaAO();

            //////////////////////////// Contabilización Comprobante Inicio ////////////////////////////
            Yii::import('application.modules.contable.models.comprobantes.ordinario.*', true);
            Yii::import('application.modules.contable.models.comprobantes.*', true);
            (new ReversarAprobacionAO($model))->contabilizar();
            //////////////////////////// Contabilización Comprobante Fin ///////////////////////////////

            $transaction->commit();
            Yii::app()->user->setFlash('success', 'Nómina reversada correctamente.');
        } catch (Exception $e) {
            $transaction->rollback();
            Yii::app()->user->setFlash('error', $e->getMessage());
        }

        $this->redirect(array('/aportes/datosTxtIntegrado/adminAO'));
    }

    public function actionUpdateAporteDiferidoAjax()
    {
        $resultado = [
            'error' => 0,
            'actualizarVista' => 0,
            'mensajes_error' => '<ul>',
        ];

        $id = (isset($_POST['AporteOrdinarioDiferido']['id']) && $_POST['AporteOrdinarioDiferido']['id'] != '') ? $_POST['AporteOrdinarioDiferido']['id'] : null;

        $model = AporteOrdinarioDiferido::model()->findByPk($id);

        if ($model) {
            $id_estatus_aod = $model->id_estatus_aod;
            $model->scenario = 'asociado_cmao';

            $modelAsociado = new Asociado('sin_validacion');
            $modelAsociado->cedula = $model->cedula;

            $planillas = Asociado::model()->findAll('cedula=:ci', [':ci' => $model->cedula]);

            $activa = false;
            $egresoEmpresa = false;
            $liquidada = false;
            foreach ($planillas as $key => $value) {
                if ($value->id_estatus == 1) {
                    $activa = true;
                }

                if ($value->id_estatus == 2) {
                    $liquidada = true;
                }

                if ($value->id_estatus == 4 || $value->id_estatus == 3) {
                    $egresoEmpresa = true;
                }
            }

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

                if (in_array($model->id_estatus_aod, [2, 5]) && $activa) {
                    $mensaje_error .= 'No pude asignar este estatus, ya que el asociado tiene planilla activa.';
                }

                if ($activa == false && ! $egresoEmpresa && $model->id_estatus_aod == 6) {
                    $mensaje_error .= 'No posee una planilla activa para actualizar a este estatus';
                }

                if ($model->id_estatus_aod == 2 && $liquidada) {
                    $mensaje_error .= 'El asociado tiene una planilla liquidada.';
                }

                if (in_array($model->id_estatus_aod, [3, 4])) {
                    $modelAsociado->scenario = 'planilla_cmao';
                }

                if ($model->id_estatus_aod == 2) {
                    $modelAsociado->scenario = 'definicion_no_asociados';
                }

                $valido = true;

                if ($mensaje_error != '') {
                    $resultado['error'] = 1;
                    $resultado['mensajes_error'] = $mensaje_error;
                    $valido = false;
                } else {
                    $modelAsociado->attributes = $_POST['Asociado'];

                    if ($model->validate() && $modelAsociado->validate()) {
                        $transaction = Yii::app()->db->beginTransaction();
                        try {
                            $model->extra = null;
                            if ($model->id_estatus_aod == 2) {
                                $model->extra = json_encode([
                                    'razon_social' => $modelAsociado->nombre_apellido,
                                    'id_tipo_persona' => $modelAsociado->id_tipo_persona,
                                    'cedula' => $modelAsociado->cedula,
                                    'id_banco' => $modelAsociado->id_banco,
                                    'numero_cuenta' => $modelAsociado->numero_cuenta,
                                    'correoelectronico' => $modelAsociado->correoelectronico,
                                ]);
                            }

                            if (! $model->save()) {
                                throw new Exception('No se pudo guardar el registro');
                            }

                            if (in_array($model->id_estatus_aod, [3, 4])) {
                                $modelAsociado->dirhabitacion = '';
                                $modelAsociado->clvcreado_por = Yii::app()->user->id;
                                if ($modelAsociado->save()) {
                                    $ex = 0;
                                    $modelUsuario = CrugeUserI::model()->find('cedula=:ci', [':ci' => $modelAsociado->cedula]);
                                    if (! $modelUsuario) {
                                        $modelUsuario = new CrugeUserI();
                                        $ex++;
                                    }
                                    $modelUsuario->cedula = $modelAsociado->cedula;
                                    $modelUsuario->nombres = $modelAsociado->nombre;
                                    $modelUsuario->apellidos = $modelAsociado->apellidos;
                                    $modelUsuario->username = $modelAsociado->cedula;
                                    $modelUsuario->password = md5($modelAsociado->cedula);
                                    $modelUsuario->state = 1;

                                    if ($modelUsuario->save() && $ex > 0) {
                                        Yii::app()->user->rbac->assign('usuario_asociado', $modelUsuario->primaryKey);
                                    }

                                    $modelAporte = new AporteOrdinario('carga_masiva_guardado');
                                    $modelAporte->id_asociado = $modelAsociado->idasociado;
                                    $modelAporte->id_txt = $model->id_txt;
                                    $modelAporte->aporte_patrono = $model->aporte_patrono;
                                    $modelAporte->aporte_asociado = $model->aporte_asociado;
                                    $modelAporte->sueldo_base = $model->sueldo;
                                    $modelAporte->p_patrono = $model->p_patrono;
                                    $modelAporte->p_asociado = $model->p_asociado;
                                    $tipoNomina = TipoNomina::model()->find('codigo_nomina=:cod', [':cod' => $model->tipo_nomina]);
                                    if ($tipoNomina) {
                                        $modelAporte->id_tipo_nomina = $tipoNomina->id;
                                    }

                                    $modelAporte->fecha_aporte = $model->idTxt->fecha_aporte;
                                    $unidad = Unidad::model()->findByPk($model->unidad);
                                    $modelAporte->id_unidad = $unidad->idunidad;
                                    $modelAporte->id_usuario = Yii::app()->user->id;
                                    if ($modelAporte->save()) {
                                        $model->blnborrado = true;
                                        $model->save(false);
                                    }

                                    $modelEstatus = new AsociadoEstatus();
                                    $modelEstatus->idasociado = $modelAsociado->idasociado;
                                    $modelEstatus->id_estatus_asociado = 1;
                                    $modelEstatus->fecha_movimiento = $modelAsociado->fechaingreso;
                                    $modelEstatus->save();
                                }
                            }

                            if ($model->id_estatus_aod == 6 && $egresoEmpresa) {
                                $consulta = Asociado::model()->find('cedula=:ci and id_estatus in(3,4)', ['ci' => $model->cedula]);

                                if (empty($consulta)) {
                                    $resultado['error'] = 1;
                                    $resultado['mensajes_error'] = 'Este asociado no posee una planilla activa';
                                    $this->refresh();
                                }

                                $modelAporte = new AporteOrdinario('carga_masiva_guardado');
                                $modelAporte->id_asociado = $consulta->idasociado;
                                $modelAporte->id_txt = $model->id_txt;
                                $modelAporte->aporte_patrono = $model->aporte_patrono;
                                $modelAporte->aporte_asociado = $model->aporte_asociado;
                                $modelAporte->sueldo_base = $model->sueldo;
                                $modelAporte->p_patrono = $model->p_patrono;
                                $modelAporte->p_asociado = $model->p_asociado;

                                $tipoNomina = TipoNomina::model()->find('codigo_nomina=:cod', [':cod' => $model->tipo_nomina]);
                                if ($tipoNomina) {
                                    $modelAporte->id_tipo_nomina = $tipoNomina->id;
                                }

                                $modelAporte->fecha_aporte = $model->idTxt->fecha_aporte;
                                $unidad = Unidad::model()->findByPk($model->unidad);
                                $modelAporte->id_unidad = $unidad->idunidad;
                                $modelAporte->id_usuario = Yii::app()->user->id;

                                if ($modelAporte->save()) {
                                    $model->blnborrado = true;
                                    $model->save(false);
                                }
                            }

                            if ($model->id_estatus_aod == 6 && ! $egresoEmpresa) {
                                $consulta = Asociado::model()->find('cedula=:ci and id_estatus=1', ['ci' => $model->cedula]);

                                if (! empty($consulta)) {
                                    $modelAporte = new AporteOrdinario('carga_masiva_guardado');
                                    $modelAporte->id_asociado = $consulta->idasociado;
                                    $modelAporte->id_txt = $model->id_txt;
                                    $modelAporte->aporte_patrono = $model->aporte_patrono;
                                    $modelAporte->aporte_asociado = $model->aporte_asociado;
                                    $modelAporte->sueldo_base = $model->sueldo;
                                    $modelAporte->p_patrono = $model->p_patrono;
                                    $modelAporte->p_asociado = $model->p_asociado;
                                    $tipoNomina = TipoNomina::model()->find('codigo_nomina=:cod', [':cod' => $model->tipo_nomina]);
                                    if ($tipoNomina) {
                                        $modelAporte->id_tipo_nomina = $tipoNomina->id;
                                    }
                                    $modelAporte->fecha_aporte = $model->idTxt->fecha_aporte;
                                    $unidad = Unidad::model()->findByPk($model->unidad);
                                    $modelAporte->id_unidad = $unidad->idunidad;
                                    $modelAporte->id_usuario = Yii::app()->user->id;

                                    if ($modelAporte->save()) {
                                        $model->blnborrado = true;
                                        $model->save(false);
                                    }
                                } else {
                                    $resultado['error'] = 1;
                                    $resultado['mensajes_error'] = 'Este asociado no posee una planilla activa';
                                    $this->refresh();
                                }
                            }

                            $countDiferidos = AporteOrdinarioDiferido::model()->count('id_txt=:idTxt AND id_estatus_aod= 1 ', [':idTxt' => $model->id_txt]);
                            if ($countDiferidos == 0) {
                                EstatusTxtIntegrado::model()->updateAll(['actual' => false], 'id_datos_txt_integrado=:id', [':id' => $model->id_txt]);
                                $status = EstatusTxtIntegrado::model()->find('id_estatus_txt=:idEstatus AND id_datos_txt_integrado=:idTxt', [':idEstatus' => 1, ':idTxt' => $model->id_txt]);
                                if ($status) {
                                    $status->actual = true;
                                    $status->save();
                                } else {
                                    $resultado['actualizarVista'] = 1;

                                    $modelEstatusTxt = new EstatusTxtIntegrado();
                                    $modelEstatusTxt->id_estatus_txt = 1;
                                    $modelEstatusTxt->id_datos_txt_integrado = $model->id_txt;
                                    $modelEstatusTxt->actual = true;
                                    $modelEstatusTxt->save();
                                }
                            }

                            $transaction->commit();

                            $resultado['error'] = 0;
                        } catch (Exception $e) {
                            $transaction->rollback();
                            $resultado['error'] = 1;
                            $resultado['mensajes_error'] = 'Ocurrio un error durante el guardado, se han revertido todos los cambios';
                        }
                    } 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>';
                        }

                        foreach ($modelAsociado->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>';
                        echo CJSON::encode($resultado);
                        Yii::app()->end();
                    }
                }
            }
        } else {
            $resultado['error'] = 1;
            $resultado['mensajes_error'] = 'El aporte no definido no se encuentra registrado';
        }

        echo CJSON::encode($resultado);
    }

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

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

    public function firstOrCreateGAV($id)
    {
        $gav = GestionAporteVoluntario::model()->find('id_datos_txt_integrado=:id', array('id' => $id));

        if (is_null($gav)) {
            $gav = new GestionAporteVoluntario();
        }

        return $gav;
    }
}
