<?php

class DatosPreNominaCreditoController 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',
            array('CrugeAccessControlFilter')
		);
	}

	/**
	 * Specifies the access control rules.
	 * This method is used by the 'accessControl' filter.
	 * @return array access control rules
	 */
	public function accessRules()
	{
		return array(
			array('allow',  // allow all users to perform 'index' and 'view' actions
				'actions'=>array('index','view','viewRezagado','viewGeneradorPrenomina'),
				'users'=>array('@'),
			),
			array('allow', // allow authenticated user to perform 'create' and 'update' actions
				'actions'=>array('create','update','adminPrenomina','adminPrenominaRezagadas','generarPrenomina','GenerarPrenominaExcel','generarPrenominaEstimada','ArchivoCuotasReclamarExcel','ArchivoCuotasReclamarPdf',
                    'reversarNominaPrestamos', 'cuotasPrestamosAprobados'
                ),
				'users'=>array('@'),
			),
			array('allow', // allow admin user to perform 'admin' and 'delete' actions
				'actions'=>array('admin','delete'),
				'users'=>array('@'),
			),
			array('deny',  // deny all users
				'users'=>array('@'),
			),
		);
	}

	/**
     * Displays a particular model.
     *
     * @param int $id the ID of the model to be displayed
     */
    public function actionView($id)
    {
        $model = $this->loadModel($id);
        $modelReporteCredito = new ReporteCreditos('search');
        $modelReporteCredito->unsetAttributes();

        if (isset($_GET['cedula'])) {
            $modelReporteCredito->cedula = $_GET['cedula'];
        }

        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(['adminPrenomina']);
            }
        }
        $modelDatosTxt = new DatosTxtIntegrado('search');
        $modelDatosTxt->unsetAttributes();
        if (isset($_GET['DatosTxtIntegrado'])) {
            $modelDatosTxt->attributes = $_GET['DatosTxtIntegrado'];
        }

        $modelPrenomina = new CreditoTablaAmortizacion('search');
        $modelPrenomina->unsetAttributes();
        if (isset($_GET['CreditoTablaAmortizacion'])) {
            $modelPrenomina->attributes = $_GET['CreditoTablaAmortizacion'];
        }

        $modelPrenominaCuotasSubproceso = new PrenominaCuotasSubproceso('search');
        $modelPrenominaCuotasSubproceso->unsetAttributes();
        if (isset($_GET['PrenominaCuotasSubproceso'])) {
            $modelPrenominaCuotasSubproceso->attributes = $_GET['PrenominaCuotasSubproceso'];
        }

        $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.'
                    and a.blnborrado is false
                GROUP BY nombre_titulo,descripcion
                ORDER by nombre_titulo, descripcion, count(id_tabla_amortizacion), sum(monto_cuota) ';
        $data = Yii::app()->db->createCommand($sql)->queryAll();

        // mostrar la ultima nomina cargada
        $modelNomina = DatosTxtIntegrado::model()->find('id_prenomina_credito=:id_prenomina_credito ORDER BY id desc', [':id_prenomina_credito' => $model->id]);
        if ($modelNomina) {
            $estatus = $modelNomina->estatusTxtsIntegradosActual[0];
            $mostrarNomina = ($estatus->id_estatus_txt == 1 ||
                                  $estatus->id_estatus_txt == 3 ||
                                  $estatus->id_estatus_txt == 5 ||
                                  $estatus->id_estatus_txt == 8 ||
                                  $estatus->id_estatus_txt == 9) ? true : false;
        } else {
            $modelNomina = new DatosTxtIntegrado();
            $mostrarNomina = false;
        }
        $modelPagos = new DatosTxtTablaAmortizacion('search');
        $modelPagosDiferidos = new DatosTxtTablaAmortizacionDiferido('search');
        $modelCuotasExcluidas = new PreNominaTablaAmortizacion('search');
        $detallePago = ProcesoPago::model()->find('id_proceso=:proceso AND actual=true', [':proceso' => $model->id]);

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

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

        if (isset($_GET['PreNominaTablaAmortizacion'])) {
            $modelCuotasExcluidas->attributes = $_GET['PreNominaTablaAmortizacion'];
        }
        $sql3 = '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.'
                        GROUP BY nombre_titulo,descripcion
                        ORDER by nombre_titulo, descripcion, count(id_tabla_amortizacion), sum(monto_cuota) ';
        $data3 = Yii::app()->db->createCommand($sql3)->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 ='.(int) $modelNomina->id.'
                    GROUP BY a.id_txt, total_pagos_no_definidos';
        $data5 = Yii::app()->db->createCommand($sql5)->queryAll();

        if (isset(Yii::app()->session['MantenerTabsPreNomina'])) {
            $mantenerSesion = Yii::app()->session['MantenerTabsPreNomina'];
        } else {
            $mantenerSesion = null;
        }
        $this->render('view', [
            'model' => $model,
            'mantenerSesion' => $mantenerSesion,
            'modelDatosTxt' => $modelDatosTxt,
            'modelPrenomina' => $modelPrenomina,
            'data' => $data,
            'modelNomina' => $modelNomina,
            'modelPagos' => $modelPagos,
            'modelPagosDiferidos' => $modelPagosDiferidos,
            'modelCuotasExcluidas' => $modelCuotasExcluidas,
            'detallePago' => $detallePago,
            'data3' => $data3,
            'data5' => $data5,
            'mostrarNomina' => $mostrarNomina,
            'modelReporteCredito' => $modelReporteCredito,
            'modelPrenominaCuotasSubproceso' => $modelPrenominaCuotasSubproceso,
        ]);
    }

    public function actionViewRezagado(){

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

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

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

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

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

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

	/**
	 * Updates a particular model.
	 * If update is successful, the browser will be redirected to the 'view' page.
	 * @param integer $id the ID of the model to be updated
	 */
	public function actionUpdate($id)
	{
		$model=$this->loadModel($id);

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

		if(isset($_POST['DatosPreNominaCredito']))
		{
			$model->attributes=$_POST['DatosPreNominaCredito'];
			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)
    {
        $model = $this->loadModel($id);
        $model->fecha_comprobante = date('d-m-Y');

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

        if (isset($_POST['DatosPreNominaCredito'])) {
            $model->setAttributes($_POST['DatosPreNominaCredito']);

            $transaction = Yii::app()->db->beginTransaction();
            try {
                $eliminado = true;
                foreach ($model->creditoTablaPrenomiona() as $key => $value) {
                    $value->idTablaAmortizacion->id_estatus_cuota = null;
                    if (! $value->idTablaAmortizacion->save()) {
                        $eliminado = $eliminado && false;
                    }
                }

                if (! $eliminado) {
                    throw new Exception('No se puede Rechazar la prenomina');
                }

                PreNominaSeguimiento::model()->updateAll(['actual' => false], 'id_pre_nomina_credito=:id_pre_nomina_credito AND actual = true', [':id_pre_nomina_credito' => $model->id]);
                $modelPrenominaSeguimiento = new PreNominaSeguimiento();
                $modelPrenominaSeguimiento->id_estatus_pre_nomina = 9;
                $modelPrenominaSeguimiento->id_pre_nomina_credito = $model->id;
                $modelPrenominaSeguimiento->observacion = $model->observacion;
                $modelPrenominaSeguimiento->save();

                //////////////////////////// Contabilización Comprobante Inicio ////////////////////////////
                Yii::import('application.modules.contable.models.comprobantes.*', true);
                Yii::import('application.modules.contable.models.comprobantes.retencion.*', true);
                (new ReversoRetencionPorCobrar($model))->contabilizar();
                //////////////////////////// Contabilización Comprobante Fin ///////////////////////////////
                $transaction->commit();
                Yii::app()->user->setFlash('success', "Prenómina <strong>{$model->nombre_archivo}</strong> reversada correctamente.");
                $this->redirect(['admin']);
            } catch (Exception $e) {
                $transaction->rollback();
                Yii::app()->user->setFlash('error', $e->getMessage());
            }
        }

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

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

	/**
	 * Manages all models.
	 */
	public function actionAdmin()
    {
        $model = new DatosPreNominaCredito('search');
        $model->unsetAttributes();

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

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

    public function actionAdminPrenomina()
    {
        $model = new CreditoTablaAmortizacion('searchPrenomina');
        $model->fecha_comprobante = date('d-m-Y');
        $model->VerificarPeriodoContable();
        $get =12;
        if (isset($_GET['CreditoTablaAmortizacion'])) {
            $get =23;
            $model->attributes = $_GET['CreditoTablaAmortizacion'];
        }

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

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

    public function actionviewGeneradorPrenomina($idunidad, $idperiodo)
    {
        $modelUnidad = Unidad::model()->findByPk($idunidad);
        $modelPeriodo = TipoNominaPeriodo::model()->findByPk($idperiodo);
        $model = new CreditoTablaAmortizacion();
        $model->fecha_comprobante = date('d-m-Y');

        $sql = 'SELECT  nombre_titulo,descripcion,count(tabla.id) cantidad_cuota,  sum(monto_capital) as capital , sum(monto_interes) as interes, sum(monto_cuota) as monto
                FROM prestamos.credito_tabla_amortizacion as tabla
                JOIN prestamos.credito as cdt ON tabla.idcredito = cdt.id
                JOIN prestamos.credito_seguimiento as sg ON cdt.id = sg.id_credito AND actual = true AND id_estatus_credito= 4
                JOIN prestamos.tipo_credito as d on cdt.id_tipo_credito=d.id
                LEFT JOIN prestamos.titulo_tipo_credito as e on d.id_titulo_tipo_credito=e.id
                JOIN retenciones.tipo_nomina as tpnomina ON cdt.id_tipo_nomina = tpnomina.id
                JOIN asociado as asociado ON cdt.idasociado = asociado.idasociado
                JOIN prestamos.tipo_nomina_periodo tpnominap ON cdt.id_tipo_nomina =tpnominap.id_tipo_nomina AND fecha_vencimiento BETWEEN fecha_desde AND fecha_hasta
                WHERE tabla.id_estatus_cuota is null AND tpnominap.id='.$idperiodo.' and asociado.idunidad='.$idunidad.'  AND tabla.blnborrado = false
                GROUP BY nombre_titulo,descripcion
                ORDER by nombre_titulo, descripcion, count(tabla.id), sum(monto_cuota) ';
        $data = Yii::app()->db->createCommand($sql)->queryAll();
        $totalRetenciones = 0;
        foreach ($data as $key => $value) {
            $totalRetenciones += $value['cantidad_cuota'];
        }

        if (isset($_POST['yt0'])) {
            $this->render('progresoGuardandoPrenomina');
            echo '<script type="text/javascript"></script>';
            $this->mensajeCarga($mensaje = '<b>Genrando el encabezado de la prenómina:</b> .....');

            $fecha = '';
            if ($modelPeriodo->fecha_desde != '') {
                $fecha = $modelPeriodo->fecha_desde;
            }

            if ($modelPeriodo->fecha_hasta != '') {
                $fecha = $modelPeriodo->fecha_hasta;
            }

            if ($fecha == '') {
                $fecha = date('dmY');
            } else {
                $fecha = date('dmY', strtotime($fecha));
            }

            $model->setAttributes($_POST['CreditoTablaAmortizacion']);

            $datosPreNominaCredito = new DatosPreNominaCredito();
            $datosPreNominaCredito->fecha_comprobante = $model->fecha_comprobante;
            $datosPreNominaCredito->credito_rezagado = true;
            $datosPreNominaCredito->nombre_archivo = 'CR'.trim($modelPeriodo->idTipoNomina->codigo_nomina).//tipo de nomina
                                                trim($modelUnidad->codigo).//codigo de la unidad de 4 digitos
                                                $fecha; //fecha tope del periodo
            $datosPreNominaCredito->descripcion = 'Retenciones de préstamos nómina '.strtoupper($modelPeriodo->idTipoNomina->nombre_nomina).'- Período ('.date('d-m-Y', strtotime($modelPeriodo->fecha_desde)).' al '.date('d-m-Y', strtotime($modelPeriodo->fecha_hasta)).')';
            $datosPreNominaCredito->fecha_registro = date('Y-m-d');
            $datosPreNominaCredito->cant_aportantes = $totalRetenciones;
            $datosPreNominaCredito->id_unidad = $modelUnidad->idunidad;
            $datosPreNominaCredito->id_tipo_carga = 1;
            $datosPreNominaCredito->id_tipo_momina_periodo = $modelPeriodo->id;

            if ($datosPreNominaCredito->save()) {
                $transaction = Yii::app()->db->beginTransaction();
                try {
                    $this->mensajeCarga($mensaje = '<b>Guardando el encabezado de la prenomina</b>');
                    $this->mensajeCarga($mensaje = '<b>Encabezado guardado</b>');
                    $registrado = true;
                    $monto = $i = 0;
                    $total = $totalRetenciones;
                    $this->mensajeCarga($mensaje = '<b>Guardando las retenciones</b>');

                    foreach ($_SESSION['datos_filtrados']->getData() as $key => $value) {
                        $modelPrenominaTabla = new PreNominaTablaAmortizacion();
                        $modelPrenominaTabla->id_tabla_amortizacion = $value->id;
                        $modelPrenominaTabla->id_pre_nomina_credito = $datosPreNominaCredito->id;
                        $monto += $value->monto_cuota;

                        if ($modelPrenominaTabla->save()) {
                            $value->id_estatus_cuota = 3;
                            $value->save();
                        } else {
                            $registrado = $registrado && false;
                        }

                        $progreso = $i != 0 ? (($i * 100) / ($total - 1)) : 100;
                        $i++;
                        $this->barraProgreso($progreso);
                        $this->mensajeCarga($mensaje = '<b>'.floor($progreso).'%</b>', $contenedorMensajeId = 'barraProgreso');
                    }

                    $this->mensajeCarga($mensaje = '<b>Retenciones guardadas</b>');
                    if (! $registrado) {
                        throw new Exception('Ocurrio un error durante el guardado, se han revertido todos los cambios');
                    }

                    $datosPreNominaCredito->total_aportes = $monto;
                    $datosPreNominaCredito->save();
                    $modelPrenominaSeguimiento = new PreNominaSeguimiento();
                    $modelPrenominaSeguimiento->id_estatus_pre_nomina = 1;
                    $modelPrenominaSeguimiento->id_pre_nomina_credito = $datosPreNominaCredito->id;
                    $modelPrenominaSeguimiento->save();

                    $this->mensajeCarga($mensaje = '<b>Contabilizando...</b>');
                    //////////////////////////// Contabilización Comprobante Inicio ////////////////////////////
                    Yii::import('application.modules.contable.models.comprobantes.*', true);
                    Yii::import('application.modules.contable.models.comprobantes.retencion.*', true);
                    (new RetencionPorCobrar($datosPreNominaCredito))->contabilizar();
                    //////////////////////////// Contabilización Comprobante Fin ///////////////////////////////
                    $this->mensajeCarga($mensaje = '<b>Contabilizado</b>');

                    $transaction->commit();

                    echo "<script type=\"text/javascript\">
                            $('#boton').append('".
                            CHtml::link('Ir a bandeja', Yii::app()->createUrl('/prestamo/datosPreNominaCredito/admin'), ['class' => 'btn btn-inverse']).' '.
                            CHtml::link('Ver detalle de prenómina', Yii::app()->createUrl('/prestamo/datosPreNominaCredito/view', ['id' => $datosPreNominaCredito->id]), ['class' => 'btn btn-inverse']).' '.
                            CHtml::link('Descargar prenómina', Yii::app()->createUrl('/prestamo/datosPreNominaCredito/generarPrenominaExcel', ['id' => $datosPreNominaCredito->id]), ['class' => 'btn btn-inverse']).' '.
                            CHtml::link('Cargar archivo excel', Yii::app()->createUrl('/aportes/datosTxtIntegrado/cargaNominaPrestamos', ['id' => $datosPreNominaCredito->id]), ['class' => 'btn btn-inverse'])."');
                            $('#boton').show();
                            </script>";

                } catch (Exception $ex) {
                    $transaction->rollback();
                    $this->mensajeCarga($ex->getMessage(), 'errores');
                }
            }
            exit;
        }

        if (isset($_POST['yt1'])) {
            //registrar el encabezado
            $consulta = $_SESSION['datos_filtrados'];
            $datos = $consulta->getData();
            $fecha = '';
            if ($modelPeriodo->fecha_desde != '') {
                $fecha = $modelPeriodo->fecha_desde;
            }
            if ($modelPeriodo->fecha_hasta != '') {
                $fecha = $modelPeriodo->fecha_hasta;
            }

            if ($fecha == '') {
                $fecha = date('dmY');
            } else {
                $fecha = date('dmY', strtotime($fecha));
            }

            $nombre_archivo = 'EC'.(str_pad($consulta->model->unidad, 3, '0', STR_PAD_LEFT)).trim($modelPeriodo->idTipoNomina->codigo_nomina).$consulta->model->numero_periodo.$fecha;

            $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',
                                'AA', 'AB', 'AC', 'AD', 'AE', 'AF', 'AG', 'AH', 'AI', 'AJ', 'AK', 'AL', 'AM', 'AN', 'AO', 'AP', 'AQ', 'AR', 'AS', 'AT', 'AU', 'AV', 'AW', 'AX', 'AY', 'AZ', ];

            $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 $phpExcelPath2.DIRECTORY_SEPARATOR.'IOFactory.php';
            spl_autoload_register(['YiiBase', 'autoload']);

            $objPHPExcel = new PHPExcel();

            $objPHPExcel->getProperties()->setCreator('RORAIMASOFTWARE')
                ->setLastModifiedBy('RORAIMASOFTWARE')
                ->setTitle('RORAIMASOFTWARE')
                ->setSubject('RORAIMASOFTWARE')
                ->setDescription('RORAIMASOFTWARE')
                ->setKeywords('RORAIMASOFTWARE')
                ->setCategory('RORAIMASOFTWARE');

            $objPHPExcel->setActiveSheetIndex(0);

            $numtemo = 0;
            $objPHPExcel->getActiveSheet()->getStyle('A1:D1')->getFont()->setBold(true);                    //stylo
            $objPHPExcel->getActiveSheet()->getStyle('A1:D1')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
            $objPHPExcel->getActiveSheet()->getStyle('A1:R1')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
            foreach (range('A', 'T') as $columnID) {
                $objPHPExcel->getActiveSheet()->getColumnDimension($columnID)->setAutoSize(true);
            }

            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].'1', 'Total retenciones');
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].'2', count($datos));

            $numtemo++;
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].'1', 'Monto total en retenciones');
            $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].'2')->getNumberFormat()->setFormatCode('#,##0.00');

            $numtemo++;
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].'1', 'Fecha desde');
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].'2', ($modelPeriodo) ? date('d-m-Y', strtotime($modelPeriodo->fecha_desde)) : '');
            $numtemo++;
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].'1', 'Fecha hasta');
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].'2', ($modelPeriodo) ? date('d-m-Y', strtotime($modelPeriodo->fecha_hasta)) : '');

            $numtemo = 0;
            $numfila = 3;

            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, 'Cédula');
            $numtemo++;
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, 'Nombres');
            $numtemo++;
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, 'Cod. empresa');
            $numtemo++;
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, 'Clave préstamo');
            $numtemo++;
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, 'Tipo de préstamo');
            $numtemo++;
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, '% de interes');
            $numtemo++;
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, 'Numero de préstamo');
            $numtemo++;
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, 'Monto préstamo');
            $numtemo++;
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, 'Capital del préstamo');
            $numtemo++;
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, 'Intereses del préstamo');
            $numtemo++;
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, 'Fecha inicio');
            $numtemo++;
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, 'Fecha vencimiento');
            $numtemo++;

            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, 'Capital de la cuota');
            $numtemo++;
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, 'Intereses de la cuota');
            $numtemo++;
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, 'Monto de la cuota');
            $numtemo++;
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, 'Número de la cuota del periodo');
            $numtemo++;
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, 'Fecha de venc. cuota');
            $numtemo++;
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, 'Tipo de cuota');
            $numtemo++;
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, 'Saldo');
            $numtemo++;
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, 'Observación');
            $numfila++;

            $objPHPExcel->getActiveSheet()->getStyle('A3:'.$filas[$numtemo].'3')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
            $objPHPExcel->getActiveSheet()->getStyle('A3:'.$filas[$numtemo].'3')->getFont()->setBold(true);                 //stylo

            $numtemo = 0;
            $numfila = 4;
            $monto = 0;
            foreach ($consulta->getData() as $key => $value) {
                $numtemo = 0;
                $modelTablaAmortizacion = CreditoTablaAmortizacion::model()->findByPk($value->id);
                $inicio = $filas[$numtemo].$numfila;

                $fechaUltimoDescuento = CreditoTablaAmortizacion::model()->find(['select' => 'max(fecha_vencimiento) AS fecha_vencimiento, sum(monto_capital) AS monto_capital',
                                                                                  'condition' => 'idcredito=:id AND blnborrado =  false AND id_estatus_cuota is null',
                                                                                  'params' => [':id' => $modelTablaAmortizacion->idcredito], ]);
                $modelTotalInteres = CreditoTablaAmortizacion::model()->find(['select' => 'sum(monto_interes) as monto_interes', 'condition' => 'idcredito=:idcredito',
                                                                                'params' => [':idcredito' => $modelTablaAmortizacion->idcredito], ])->monto_interes;
                $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, $modelTablaAmortizacion->idCredito->idAsociado->cedula);
                $numtemo++;
                $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, $modelTablaAmortizacion->idCredito->idAsociado->nombre.' '.$modelTablaAmortizacion->idCredito->idAsociado->apellidos);
                $numtemo++;
                $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, $modelTablaAmortizacion->idCredito->idAsociado->unidad->codigo);
                $numtemo++;
                $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, $modelTablaAmortizacion->idCredito->id_tipo_credito);
                $numtemo++;
                $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, $modelTablaAmortizacion->idCredito->idTipoCredito->descripcion);
                $numtemo++;
                $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, $modelTablaAmortizacion->idCredito->idTipoCredito->taza_interes);
                $numtemo++;
                $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, $modelTablaAmortizacion->idcredito);
                $numtemo++;
                $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila)->getNumberFormat()->setFormatCode('#,##0.00');
                $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, $modelTablaAmortizacion->idCredito->monto_credito + $modelTotalInteres);
                $numtemo++;
                $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila)->getNumberFormat()->setFormatCode('#,##0.00');
                $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, $modelTablaAmortizacion->idCredito->monto_credito);
                $numtemo++;
                $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila)->getNumberFormat()->setFormatCode('#,##0.00');
                $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, $modelTotalInteres);
                $numtemo++;
                $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, $modelTablaAmortizacion->idCredito->fecha_primer_descuento);
                $numtemo++;
                $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, $fechaUltimoDescuento->fecha_vencimiento);
                $numtemo++;

                $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila)->getNumberFormat()->setFormatCode('#,##0.00');
                $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, $modelTablaAmortizacion->monto_capital);
                $numtemo++;
                $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila)->getNumberFormat()->setFormatCode('#,##0.00');
                $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, $modelTablaAmortizacion->monto_interes);
                $numtemo++;
                $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila)->getNumberFormat()->setFormatCode('#,##0.00');
                $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, $modelTablaAmortizacion->monto_cuota);
                $numtemo++;
                $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, $modelTablaAmortizacion->numero_cuota);
                $numtemo++;
                $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, $modelTablaAmortizacion->fecha_vencimiento);
                $numtemo++;
                $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila)->getNumberFormat()->setFormatCode('#,##0.00');
                $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, $modelTablaAmortizacion->tipo_cuota);
                $numtemo++;
                $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila)->getNumberFormat()->setFormatCode('#,##0.00');
                $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, $fechaUltimoDescuento->monto_capital);
                $numtemo++;

                $observacion = '';

                if ($modelTablaAmortizacion->numero_cuota == 1) {
                    $objPHPExcel->getActiveSheet()->getStyle($inicio.':'.$filas[($numtemo)].$numfila)->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID)
                        ->getStartColor()
                        ->setARGB('0000CC');
                    $observacion = 'Nuevo préstamo';
                }

                $modelUltimaCuota = CreditoTablaAmortizacion::model()->find('idcredito=:id_credito ORDER BY id desc', [':id_credito' => $modelTablaAmortizacion->idcredito]);
                if ($value->id == $modelUltimaCuota->id) {
                    $objPHPExcel->getActiveSheet()->getStyle($inicio.':'.$filas[($numtemo)].$numfila)->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID)
                        ->getStartColor()
                        ->setARGB('99FF33');
                    $observacion = 'Última cuota del préstamo';
                }

                $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, $observacion);
                $numtemo++;
                $monto += $modelTablaAmortizacion->monto_cuota;
                $numfila++;
            }
            $objPHPExcel->getActiveSheet()->setCellValue('B2', $monto);

            //$objPHPExcel->getActiveSheet()->setTitle('Reporte de Créditos');
            $objPHPExcel->setActiveSheetIndex(0);

            header('Content-Type: application/vnd.ms-excel');
            header('Content-Disposition: attachment;filename="'.$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();
            exit;
        }

        $this->render('viewGeneradorPrenomina', [
            'model' => $model,
            'data' => $data,
            'modelUnidad' => $modelUnidad,
            'modelPeriodo' => $modelPeriodo,
        ]);
    }

    public function actionAdminPrenominaRezagadas()
	{
		$model = new CreditoTablaAmortizacion('searchPrenomina');
        $model->fecha_comprobante = date('d-m-Y');
        $model->VerificarPeriodoContable();

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

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

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

    public function actionGenerarPrenomina()
    {
        $creditosRezagado = (isset($_SESSION['datos_filtrados']->model->credito_rezagado) && $_SESSION['datos_filtrados']->model->credito_rezagado) ? true : false;
        $direccion = $creditosRezagado ? 'adminPrenominaRezagadas' : 'adminPrenomina';

        if (  !isset($_SESSION['datos_filtrados']) || count($_SESSION['datos_filtrados']->getData()) == 0) {
            Yii::app()->user->setFlash('error', 'No hay datos para generar la prenómina');
            return $this->redirect([$direccion]);
        }

        //registrar el encabezado
        $consulta = $_SESSION['datos_filtrados'];
        $consulta->model->scenario = $direccion == 'adminPrenomina' ? 'RegistroPrenomina' : '';
        if (! $consulta->model->validate()) {
            $html = 'No se pudo generar la pre-nomina por falta de los siguientes datos que son requeridos:<br>';
            foreach ($consulta->model->getErrors() as $key => $value) {
                $html .= '<b>'.CreditoTablaAmortizacion::model()->getAttributeLabel($key).'</b><br> ';
            }
            Yii::app()->user->setFlash('error', $html);

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

        $prestamosAprobados = $consulta->model->countPrestamosAprobados();
        if ($prestamosAprobados > 0) {
            $linkPrestamosAprobados = CHtml::link('AQUI', Yii::app()->createUrl('/prestamo/datosPreNominaCredito/cuotasPrestamosAprobados'));
            Yii::app()->user->setFlash('warning', "Tiene <strong>{$prestamosAprobados}</strong> cuota(s) del periodo seleccionado con préstamos <strong>Aprobados</strong>, para ver mas detalles haga click {$linkPrestamosAprobados}.");
            return $this->redirect([$direccion]);
        }

        $this->render('progresoGuardandoPrenomina');
        echo '<script type="text/javascript"></script>';
        $this->mensajeCarga($mensaje = '<b>Genrando el encabezado de la prenómina:</b> .....');
        $fecha = '';
        $modelTipoNominaPeriodo = TipoNominaPeriodo::model()->find('id=:id', [':id' => (int) $consulta->model->numero_periodo]);
        if ($modelTipoNominaPeriodo->fecha_desde != '') {
            $fecha = $modelTipoNominaPeriodo->fecha_desde;
        }
        if ($modelTipoNominaPeriodo->fecha_hasta != '') {
            $fecha = $modelTipoNominaPeriodo->fecha_hasta;
        }

        if ($fecha == '') {
            $fecha = date('dmY');
        } else {
            $fecha = date('dmY', strtotime($fecha));
        }

        $model = new DatosPreNominaCredito();
        $modeunid = Unidad::model()->find('idunidad='.$consulta->model->unidad);
        $model->fecha_comprobante = $consulta->model->fecha_comprobante;
        $model->credito_rezagado = $creditosRezagado;
        $model->nombre_archivo = (($model->credito_rezagado) ? 'CR' : '').'C'.trim($modelTipoNominaPeriodo->idTipoNomina->codigo_nomina).//tipo de nomina
                                        trim($modeunid->codigo).//codigo de la unidad de 4 digitos
                                        $fecha; //fecha tope del periodo
        $model->descripcion = 'Retenciones de préstamos nómina '.strtoupper((TipoNomina::model()->findByPk($consulta->model->id_tipo_nomina)->nombre_nomina)).'- Período ('.date('d-m-Y', strtotime($modelTipoNominaPeriodo->fecha_desde)).' al '.date('d-m-Y', strtotime($modelTipoNominaPeriodo->fecha_hasta)).')';
        $model->fecha_registro = date('Y-m-d');
        $model->cant_aportantes = count($_SESSION['datos_filtrados']->getData());
        $model->id_unidad = $consulta->model->unidad;
        $model->id_tipo_carga = 1;
        $model->id_tipo_momina_periodo = $modelTipoNominaPeriodo->id;

        if (! $model->validate()) {
            Yii::app()->user->setFlash('error', 'Ocurrio un error durante el guardado, se han revertido todos los cambios');
            return $this->redirect([$direccion]);
        }

        $transaction = Yii::app()->db->beginTransaction();
        try {
            $this->mensajeCarga($mensaje = '<b>Guardando el encabezado de la prenomina...</b>');

            if ($model->save()) {
                $this->mensajeCarga($mensaje = '<b>Encabezado guardado.</b>');
                $registrado = true;
                $monto = $i = 0;
                $datos = $consulta->getData();
                $total = count($datos);
                $this->mensajeCarga($mensaje = '<b>Guardando las retenciones...</b>');

                foreach ($_SESSION['datos_filtrados']->getData() as $key => $value) {
                    $modelPrenominaTabla = new PreNominaTablaAmortizacion();
                    $modelPrenominaTabla->id_tabla_amortizacion = $value->id;
                    $modelPrenominaTabla->id_pre_nomina_credito = $model->id;

                    $monto += $value->monto_cuota;

                    if ($modelPrenominaTabla->save()) {
                        $value->id_estatus_cuota = 3;
                        $value->save();
                    } else {
                        $registrado = $registrado && false;
                    }
                    $progreso = $i != 0 ? (($i * 100) / ($total - 1)) : 100;
                    $i++;
                    $this->barraProgreso($progreso);
                    $this->mensajeCarga($mensaje = '<b>'.floor($progreso).'%</b>', $contenedorMensajeId = 'barraProgreso');
                }
                $this->mensajeCarga($mensaje = '<b>Retenciones guardadas.</b>');

                if (! $registrado) {
                    $transaction->rollback();
                    Yii::app()->user->setFlash('error', 'Ocurrio un error durante el guardado, se han revertido todos los cambios');
                    return $this->redirect([$direccion]);
                }

                $model->total_aportes = $monto;
                $model->save();
                $modelPrenominaSeguimiento = new PreNominaSeguimiento();
                $modelPrenominaSeguimiento->id_estatus_pre_nomina = 1;
                $modelPrenominaSeguimiento->id_pre_nomina_credito = $model->id;
                $modelPrenominaSeguimiento->save();

                $this->mensajeCarga($mensaje = '<b>Contabilizando...</b>');
                //////////////////////////// Contabilización Comprobante Inicio ////////////////////////////
                Yii::import('application.modules.contable.models.comprobantes.*', true);
                Yii::import('application.modules.contable.models.comprobantes.retencion.*', true);
                (new RetencionPorCobrar($model))->contabilizar();
                //////////////////////////// Contabilización Comprobante Fin ///////////////////////////////
                $this->mensajeCarga($mensaje = '<b>Contabilizado</b>');

                $transaction->commit(); //Ejecuta todas las operaciones

                echo "<script type=\"text/javascript\">
                    $('#boton').append('".
                    CHtml::link('Ir a bandeja', Yii::app()->createUrl('/prestamo/datosPreNominaCredito/admin'), ['class' => 'btn btn-inverse']).' '.
                    CHtml::link('Ver detalle de prenómina', Yii::app()->createUrl('/prestamo/datosPreNominaCredito/view', ['id' => $model->id]), ['class' => 'btn btn-inverse']).' '.
                    CHtml::link('Descargar prenómina', Yii::app()->createUrl('/prestamo/datosPreNominaCredito/generarPrenominaExcel', ['id' => $model->id]), ['class' => 'btn btn-inverse']).' '.
                    CHtml::link('Cargar archivo excel', Yii::app()->createUrl('/aportes/datosTxtIntegrado/cargaNominaPrestamos', ['id' => $model->id]), ['class' => 'btn btn-inverse'])."');
                    $('#boton').show();
                    </script>";
            }
        } catch (Exception $ex) {
            $transaction->rollback();
            $this->ocultarMensajeCarga();
            $this->mensajeCarga($ex->getMessage(), 'errores');
        }
    }

    public function actionCuotasPrestamosAprobados()
    {
        $creditosRezagado = (isset($_SESSION['datos_filtrados']->model->credito_rezagado) && $_SESSION['datos_filtrados']->model->credito_rezagado) ? true : false;
        $direccion = $creditosRezagado ? 'adminPrenominaRezagadas' : 'adminPrenomina';

        if (! isset($_SESSION['datos_filtrados']) && count($_SESSION['datos_filtrados']->getData()) == 0) {
            Yii::app()->user->setFlash('error', 'No hay datos para generar la prenómina');
            return $this->redirect([$direccion]);
        }

        $model = new CreditoTablaAmortizacion('searchPrenomina');

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

    protected function ocultarMensajeCarga($contenedorMensajeId = '')
    {
        if ($contenedorMensajeId == '') {
            $contenedorMensajeId = 'mensajes';
        }

        echo "  <script type=\"text/javascript\">
        $('#".$contenedorMensajeId."').hide();
        </script>";
        flush();
        ob_flush();
    }

    protected function mensajeCarga($mensaje, $contenedorMensajeId=''){
        if($contenedorMensajeId=='')
        $contenedorMensajeId ='mensajes';

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

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

    public function actionGenerarPrenominaExcel($id)
    {
        $model = $this->loadModel($id);
        $modelDatos = [
            'cedula' => 0,
            'nombre_apellido' => 0,
            'tipo_trabajador' => 0,
            'cuenta_bancaria' => 0,
            'cod_unidad' => 0,
            'tipo_credito' => 0,
            'descripcion_tipo_credito' => 0,
            'taza_interes' => 0,
            'idcredito' => 0,
            'monto_prestamo' => 0,
            'capital_prestamo' => 0,
            'capital_interes' => 0,
            'fecha_primer_descuento' => 0,
            'fecha_ultima_descuento' => 0,
            'capital_cuota' => 0,
            'interes_cuota' => 0,
            'monto_cuota' => 0,
            'numero_cuota' => 0,
            'fecha_vencimiento' => 0,
            'tipo_cuota' => 0,
            'monto_deuda_capital' => 0,
            'observacion' => 0,
            'agrupar_datos' => 0,
        ];

        if (isset($_POST['modelDatos'])) {
            $cantSeleccionado = 0;
            foreach ($_POST['modelDatos'] as $name => $seleccion) {
                $modelDatos[$name] = $seleccion;
                if ($seleccion == 1) {
                    $cantSeleccionado++;
                }
            }

            $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', 'AA', 'AB', 'AC', 'AD', 'AE', 'AF', 'AG', 'AH', 'AI', 'AJ', 'AK', 'AL', 'AM',
                'AN', 'AO', 'AP', 'AQ', 'AR', 'AS', 'AT', 'AU', 'AV', 'AW', 'AX', 'AY', 'AZ',
            ];

            $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 $phpExcelPath2.DIRECTORY_SEPARATOR.'IOFactory.php';
            spl_autoload_register(['YiiBase', 'autoload']);

            $objPHPExcel = new PHPExcel();

            $objPHPExcel->getProperties()->setCreator('RORAIMASOFTWARE')
                ->setLastModifiedBy('RORAIMASOFTWARE')
                ->setTitle('RORAIMASOFTWARE')
                ->setSubject('RORAIMASOFTWARE')
                ->setDescription('RORAIMASOFTWARE')
                ->setKeywords('RORAIMASOFTWARE')
                ->setCategory('RORAIMASOFTWARE');

            $objPHPExcel->setActiveSheetIndex(0);

            $numtemo = 0;
            $cantSeleccionado = $cantSeleccionado < 4 ? 4 : $cantSeleccionado;
            $objPHPExcel->getActiveSheet()->getStyle('A1:R1')->getFont()->setBold(true);
            $objPHPExcel->getActiveSheet()->getStyle('A1:R1')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);

            foreach (range('A', $filas[$cantSeleccionado - 1]) as $columnID) {
                $objPHPExcel->getActiveSheet()->getColumnDimension($columnID)->setAutoSize(true);
            }

            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].'1', 'Total retenciones');
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].'2', $model->cant_aportantes);

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

            $numtemo++;
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].'1', 'Fecha desde');
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].'2', ($model->idTipoMominaPeriodo) ? date('d-m-Y', strtotime($model->idTipoMominaPeriodo->fecha_desde)) : '');
            $numtemo++;
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].'1', 'Fecha hasta');
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].'2', ($model->idTipoMominaPeriodo) ? date('d-m-Y', strtotime($model->idTipoMominaPeriodo->fecha_hasta)) : '');

            $numtemo = 0;
            $numfila = 3;

            if ($modelDatos['cedula'] == 1) {
                $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, 'Cédula');
                $numtemo++;
            }

            if ($modelDatos['nombre_apellido'] == 1) {
                $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, 'Nombres');
                $numtemo++;
            }

            if ($modelDatos['tipo_trabajador'] == 1) {
                $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, 'Tipo de trabajador');
                $numtemo++;
            }

            if ($modelDatos['cuenta_bancaria'] == 1) {
                $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, 'Cuenta bancaria del asociado');
                $numtemo++;
            }

            if ($modelDatos['cod_unidad'] == 1) {
                $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, 'Cod. empresa');
                $numtemo++;
            }

            if ($modelDatos['tipo_credito'] == 1) {
                $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, 'Clave préstamo');
                $numtemo++;
            }

            if ($modelDatos['descripcion_tipo_credito'] == 1) {
                $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, 'Tipo de préstamo');
                $numtemo++;
            }

            if ($modelDatos['taza_interes'] == 1) {
                $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, '% de interes');
                $numtemo++;
            }

            if ($modelDatos['idcredito'] == 1) {
                $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, 'Numero de préstamo');
                $numtemo++;
            }

            if ($modelDatos['monto_prestamo'] == 1) {
                $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, 'Monto préstamo');
                $numtemo++;
            }

            if ($modelDatos['capital_prestamo'] == 1) {
                $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, 'Capital del préstamo');
                $numtemo++;
            }

            if ($modelDatos['capital_interes'] == 1) {
                $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, 'Intereses del préstamo');
                $numtemo++;
            }

            if ($modelDatos['fecha_primer_descuento'] == 1) {
                $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, 'Fecha inicio');
                $numtemo++;
            }

            if ($modelDatos['fecha_ultima_descuento'] == 1) {
                $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, 'Fecha vencimiento');
                $numtemo++;
            }

            if ($modelDatos['capital_cuota'] == 1) {
                $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, 'Capital de la cuota');
                $numtemo++;
            }

            if ($modelDatos['interes_cuota'] == 1) {
                $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, 'Intereses de la cuota');
                $numtemo++;
            }

            if ($modelDatos['monto_cuota'] == 1) {
                $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, 'Monto de la cuota');
                $numtemo++;
            }

            if ($modelDatos['numero_cuota'] == 1) {
                $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, 'Número de cuota del periodo');
                $numtemo++;
            }

            if ($modelDatos['fecha_vencimiento'] == 1) {
                $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, 'Fecha de venc. cuota');
                $numtemo++;
            }

            if ($modelDatos['tipo_cuota'] == 1) {
                $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, 'Tipo de cuota');
                $numtemo++;
            }

            if ($modelDatos['monto_deuda_capital'] == 1) {
                $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, 'Saldo');
                $numtemo++;
            }

            if ($modelDatos['observacion'] == 1) {
                $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, 'Observación');
                $numfila++;
            }

            $objPHPExcel->getActiveSheet()->getStyle('A3:'.$filas[$numtemo].'3')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
            $objPHPExcel->getActiveSheet()->getStyle('A3:'.$filas[$numtemo].'3')->getFont()->setBold(true);

            $numtemo = 0;
            $numfila = 4;

            $data = $modelDatos['agrupar_datos'] == 1 ? $model->getDataAgrupada() : $model->creditoTablaPrenomiona;

            foreach ($data as $key => $value) {
                $numtemo = 0;
                $inicio = $filas[$numtemo].$numfila;

                if ($modelDatos['cedula'] == 1) {
                    $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, (($modelDatos['agrupar_datos'] == 1) ? $value['cedula'] : $value->idTablaAmortizacion->idCredito->idAsociado->cedula));
                    $numtemo++;
                }

                if ($modelDatos['nombre_apellido'] == 1) {
                    $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, (($modelDatos['agrupar_datos'] == 1) ? $value['nombre_apellido'] : $value->idTablaAmortizacion->idCredito->idAsociado->nombre.' '.$value->idTablaAmortizacion->idCredito->idAsociado->apellidos));
                    $numtemo++;
                }

                if ($modelDatos['tipo_trabajador'] == 1) {
                    $tipo_trabajador = '';

                    if ($modelDatos['agrupar_datos'] == 1) {
                        $tipo_trabajador = $value['tipo_trabajador'];
                    } elseif (isset($value->idTablaAmortizacion->idCredito->idAsociado->tipoTrabajador)) {
                        $tipo_trabajador = $value->idTablaAmortizacion->idCredito->idAsociado->tipoTrabajador->descripcion;
                    }

                    $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, $tipo_trabajador);

                    $numtemo++;
                }

                if ($modelDatos['cuenta_bancaria'] == 1) {
                    $cuenta_bancaria = '';

                    if ($modelDatos['agrupar_datos'] == 1) {
                        $cuenta_bancaria = $value['cuenta_bancaria'];
                    } elseif (isset($value->idTablaAmortizacion->idCredito->idAsociado->cuentaPrincipal->cuenta_bancaria)) {
                        $cuenta_bancaria = $value->idTablaAmortizacion->idCredito->idAsociado->cuentaPrincipal->cuenta_bancaria;
                    }

                    $objPHPExcel->getActiveSheet()->setCellValueExplicit($filas[$numtemo].$numfila, $cuenta_bancaria);
                    $numtemo++;
                }

                if ($modelDatos['cod_unidad'] == 1) {
                    $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, (($modelDatos['agrupar_datos'] == 1) ? $value['cod_unidad'] : $value->idTablaAmortizacion->idCredito->idAsociado->unidad->codigo));
                    $numtemo++;
                }

                if ($modelDatos['tipo_credito'] == 1) {
                    $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, (($modelDatos['agrupar_datos'] == 1) ? 0 : $value->idTablaAmortizacion->idCredito->id_tipo_credito));
                    $numtemo++;
                }

                if ($modelDatos['descripcion_tipo_credito'] == 1) {
                    $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, (($modelDatos['agrupar_datos'] == 1) ? 'Cuotas agrupadas' : $value->idTablaAmortizacion->idCredito->idTipoCredito->descripcion));
                    $numtemo++;
                }

                if ($modelDatos['taza_interes'] == 1) {
                    $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, (($modelDatos['agrupar_datos'] == 1) ? 0 : $value->idTablaAmortizacion->idCredito->idTipoCredito->taza_interes));
                    $numtemo++;
                }

                if ($modelDatos['idcredito'] == 1) {
                    $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, (($modelDatos['agrupar_datos'] == 1) ? 0 : $value->idTablaAmortizacion->idcredito));
                    $numtemo++;
                }

                if ($modelDatos['monto_prestamo'] == 1) {
                    $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila)->getNumberFormat()->setFormatCode('#,##0.00');
                    $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, (($modelDatos['agrupar_datos'] == 1) ? 0 : $value->idTablaAmortizacion->idCredito->monto_credito + $value->monto_deuda_intereses));
                    $numtemo++;
                }

                if ($modelDatos['capital_prestamo'] == 1) {
                    $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila)->getNumberFormat()->setFormatCode('#,##0.00');
                    $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, (($modelDatos['agrupar_datos'] == 1) ? 0 : $value->idTablaAmortizacion->idCredito->monto_credito));
                    $numtemo++;
                }

                if ($modelDatos['capital_interes'] == 1) {
                    $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila)->getNumberFormat()->setFormatCode('#,##0.00');
                    $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, (($modelDatos['agrupar_datos'] == 1) ? 0 : $value->monto_deuda_intereses));
                    $numtemo++;
                }

                if ($modelDatos['fecha_primer_descuento'] == 1) {
                    $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, (($modelDatos['agrupar_datos'] == 1) ? '' : $value->idTablaAmortizacion->idCredito->fecha_primer_descuento));
                    $numtemo++;
                }

                if ($modelDatos['fecha_ultima_descuento'] == 1) {
                    $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, (($modelDatos['agrupar_datos'] == 1) ? '' : $value->fecha_ultima_cuota));
                    $numtemo++;
                }

                if ($modelDatos['capital_cuota'] == 1) {
                    $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila)->getNumberFormat()->setFormatCode('#,##0.00');
                    $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, (($modelDatos['agrupar_datos'] == 1) ? $value['capital_cuota'] : $value->idTablaAmortizacion->monto_capital));
                    $numtemo++;
                }

                if ($modelDatos['interes_cuota'] == 1) {
                    $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila)->getNumberFormat()->setFormatCode('#,##0.00');
                    $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, (($modelDatos['agrupar_datos'] == 1) ? $value['interes_cuota'] : $value->idTablaAmortizacion->monto_interes));
                    $numtemo++;
                }

                if ($modelDatos['monto_cuota'] == 1) {
                    $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila)->getNumberFormat()->setFormatCode('#,##0.00');
                    $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, (($modelDatos['agrupar_datos'] == 1) ? $value['monto_cuota'] : $value->idTablaAmortizacion->monto_cuota));
                    $numtemo++;
                }

                if ($modelDatos['numero_cuota'] == 1) {
                    $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, (($modelDatos['agrupar_datos'] == 1) ? 0 : $value->idTablaAmortizacion->numero_cuota));
                    $numtemo++;
                }

                if ($modelDatos['fecha_vencimiento'] == 1) {
                    $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, (($modelDatos['agrupar_datos'] == 1) ? '' : $value->idTablaAmortizacion->fecha_vencimiento));
                    $numtemo++;
                }

                if ($modelDatos['tipo_cuota'] == 1) {
                    $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, (($modelDatos['agrupar_datos'] == 1) ? '' : $value->idTablaAmortizacion->tipo_cuota));
                    $numtemo++;
                }

                if ($modelDatos['monto_deuda_capital'] == 1) {
                    $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila)->getNumberFormat()->setFormatCode('#,##0.00');
                    $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, (($modelDatos['agrupar_datos'] == 1) ? 0 : $value->monto_deuda_capital));
                    $numtemo++;
                }

                $observacion = '';

                if ($modelDatos['agrupar_datos'] == 1) {
                    $observacion = 'Cuotas agrupadas';
                } else {
                    if ($value->idTablaAmortizacion->numero_cuota == 1) {
                        $objPHPExcel->getActiveSheet()->getStyle($inicio.':'.$filas[($numtemo)].$numfila)->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID)
                            ->getStartColor()
                            ->setARGB('ADD8E6');
                        $observacion = 'Nuevo préstamo';
                    }

                    if ($value->ultima_cuota) {
                        $objPHPExcel->getActiveSheet()->getStyle($inicio.':'.$filas[($numtemo)].$numfila)->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID)
                            ->getStartColor()
                            ->setARGB('D3D3D3');
                        $observacion = 'Última cuota del préstamo';
                    }

                    if ($value->cuota_modificada) {
                        $observacion = 'El monto de la cuota ha variado';
                    }
                }

                if ($modelDatos['observacion'] == 1) {
                    $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, $observacion);
                    $numtemo++;
                }

                $numfila++;
            }

            $objPHPExcel->setActiveSheetIndex(0);

            header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
            header('Content-Disposition: attachment;filename="'.$model->nombre_archivo.'.xlsx"');
            header('Cache-Control: max-age=0');

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

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

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

            $filas=array('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',
            'AA','AB','AC','AD','AE','AF','AG','AH','AI','AJ','AK','AL','AM','AN','AO','AP','AQ','AR','AS','AT','AU','AV','AW','AX','AY','AZ');

            $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($phpExcelPath2 . DIRECTORY_SEPARATOR . 'IOFactory.php');
            spl_autoload_register(array('YiiBase','autoload'));

            $objPHPExcel = new PHPExcel();

            $objPHPExcel->getProperties()->setCreator("RORAIMASOFTWARE")
                                        ->setLastModifiedBy("RORAIMASOFTWARE")
                                        ->setTitle("RORAIMASOFTWARE")
                                        ->setSubject("RORAIMASOFTWARE")
                                        ->setDescription("RORAIMASOFTWARE")
                                        ->setKeywords("RORAIMASOFTWARE")
                                        ->setCategory("RORAIMASOFTWARE");

            $objPHPExcel->setActiveSheetIndex(0);



            $numtemo =0;
            $objPHPExcel->getActiveSheet()->getStyle('A1:R1')->getFont()->setBold(true);					//stylo
            $objPHPExcel->getActiveSheet()->getStyle('A1:R1')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
            foreach(range('A','T') as $columnID) {
                $objPHPExcel->getActiveSheet()->getColumnDimension($columnID)->setAutoSize(true);
            }

            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].'1','Total retenciones');
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].'2',$model->cant_aportantes);

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

            $numtemo++;
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].'1','Fecha desde');
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].'2',($model->idTipoMominaPeriodo)?date('d-m-Y',strtotime($model->idTipoMominaPeriodo->fecha_desde)):"");
            $numtemo++;
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].'1','Fecha hasta');
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].'2',($model->idTipoMominaPeriodo)?date('d-m-Y',strtotime($model->idTipoMominaPeriodo->fecha_hasta)):"");


            $numtemo = 0;
            $numfila = 3;
            //referencia comercial escaneada DiONIS, JUAN PABLO llamar a mariangel
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila,'Cédula');$numtemo++;
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila,'Nombres');$numtemo++;
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila,'Cod. empresa');$numtemo++;
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila,'Clave préstamo');$numtemo++;
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila,'Tipo de préstamo');$numtemo++;
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila,'% de interes');$numtemo++;
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila,'Numero de préstamo');$numtemo++;
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila,'Monto préstamo');$numtemo++;
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila,'Capital del préstamo');$numtemo++;
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila,'Intereses del préstamo');$numtemo++;
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila,'Fecha inicio');$numtemo++;
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila,'Fecha vencimiento');$numtemo++;
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila,'Capital de la cuota');$numtemo++;
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila,'Intereses de la cuota');$numtemo++;
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila,'Monto de la cuota');$numtemo++;
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila,'Número de cuota del periodo');$numtemo++;
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila,'Fecha de venc. cuota');$numtemo++;
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila,'Tipo de cuota');$numtemo++;
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila,'Saldo');$numtemo++;
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila,'Observación');$numfila++;

            $objPHPExcel->getActiveSheet()->getStyle('A3:'.$filas[$numtemo].'3')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
            $objPHPExcel->getActiveSheet()->getStyle('A3:'.$filas[$numtemo].'3')->getFont()->setBold(true);					//stylo



            $numtemo=0;
            $numfila = 4;
            foreach($model->creditoTablaPrenomiona() as $key=>$value) {
               // echo "<pre>";print_r($value->idTablaAmortizacion->numero_cuota);exit;
                $numtemo =0;
                $inicio = $filas[$numtemo].$numfila;

                $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila,$value->idTablaAmortizacion->idCredito->idAsociado->cedula);$numtemo++;
                $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila,$value->idTablaAmortizacion->idCredito->idAsociado->nombre.' '.$value->idTablaAmortizacion->idCredito->idAsociado->apellidos);$numtemo++;
                $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila,$value->idTablaAmortizacion->idCredito->idAsociado->unidad->codigo);$numtemo++;
                $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila,$value->idTablaAmortizacion->idCredito->id_tipo_credito);$numtemo++;
                $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila,$value->idTablaAmortizacion->idCredito->idTipoCredito->descripcion);$numtemo++;
                $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila,$value->idTablaAmortizacion->idCredito->idTipoCredito->taza_interes);$numtemo++;
                $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila,$value->idTablaAmortizacion->idcredito);$numtemo++;
                $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila)->getNumberFormat()->setFormatCode('#,##0.00');
                $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila,$value->idTablaAmortizacion->idCredito->monto_credito+$value->monto_deuda_intereses);$numtemo++;

                $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila)->getNumberFormat()->setFormatCode('#,##0.00');
                $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, $value->idTablaAmortizacion->idCredito->monto_credito);$numtemo++;

                $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila)->getNumberFormat()->setFormatCode('#,##0.00');
                $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila,$value->monto_deuda_intereses);$numtemo++;


                $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila,$value->idTablaAmortizacion->idCredito->fecha_primer_descuento);$numtemo++;
                $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila,$value->fecha_ultima_cuota);$numtemo++;

                $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila)->getNumberFormat()->setFormatCode('#,##0.00');
                $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila,$value->idTablaAmortizacion->monto_capital);$numtemo++;
                $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila)->getNumberFormat()->setFormatCode('#,##0.00');
                $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila,$value->idTablaAmortizacion->monto_interes);$numtemo++;
                $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila)->getNumberFormat()->setFormatCode('#,##0.00');
                $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila,$value->idTablaAmortizacion->monto_cuota);$numtemo++;
                $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila,$value->idTablaAmortizacion->numero_cuota);$numtemo++;
                $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila,$value->idTablaAmortizacion->fecha_vencimiento);$numtemo++;
                $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila)->getNumberFormat()->setFormatCode('#,##0.00');
                $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila,$value->idTablaAmortizacion->tipo_cuota);$numtemo++;
                $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila)->getNumberFormat()->setFormatCode('#,##0.00');
                $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila,$value->monto_deuda_capital);$numtemo++;


                $observacion='';
                //
                if($value->idTablaAmortizacion->numero_cuota==1){
                    $objPHPExcel->getActiveSheet()->getStyle($inicio.':'.$filas[($numtemo)].$numfila)->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID)
                                                                                ->getStartColor()
                                                                                ->setARGB('ADD8E6');
                    $observacion='Nuevo préstamo';
                }

                if($value->ultima_cuota){
                    $objPHPExcel->getActiveSheet()->getStyle($inicio.':'.$filas[($numtemo)].$numfila)->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID)
                                                                                ->getStartColor()
                                                                                ->setARGB('D3D3D3');
                    $observacion='Última cuota del préstamo';
                }
                if($value->cuota_modificada){
                    $observacion='El monto de la cuota ha variado';
                }
                //$numtemo++;
                $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila,$observacion);$numtemo++;

                $numfila ++;
            }

            //$objPHPExcel->getActiveSheet()->setTitle('Reporte de Créditos');
            $objPHPExcel->setActiveSheetIndex(0);

            header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
            header('Content-Disposition: attachment;filename="'.$model->nombre_archivo.'.xlsx"');
            header('Cache-Control: max-age=0');
            //$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
//            $objWriter->save('php://output');

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

        }
        public function actionGenerarPrenominaEstimada()
	{
		if(isset($_SESSION['datos_filtrados']) && count($_SESSION['datos_filtrados']->getData())>0){
                    //registrar el encabezado
                   $consulta =$_SESSION['datos_filtrados'];
                   $datos = $consulta->getData();
                    $fecha = '';
                    if(isset($consulta->model->fecha_vencimiento_range['from']))
                        $fecha = $consulta->model->fecha_vencimiento_range['from'];

                    if(isset($consulta->model->fecha_vencimiento_range['to']))
                        $fecha .= (($consulta->model->fecha_vencimiento_range['to']!='')?' AL '.$consulta->model->fecha_vencimiento_range['to']:$consulta->model->fecha_vencimiento_range['to']);
                    if($fecha == '')
                        $fecha = date('dmY');
                    $modelTipoNominaPeriodo = TipoNominaPeriodo::model()->find('id=:id',array(':id'=>$consulta->model->numero_periodo));
                    $nombre_archivo ='EC'.(str_pad($consulta->model->unidad, 3, "0", STR_PAD_LEFT)).trim($modelTipoNominaPeriodo->idTipoNomina->codigo_nomina).$consulta->model->numero_periodo.$fecha;

                    $filas=array('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',
                                    'AA','AB','AC','AD','AE','AF','AG','AH','AI','AJ','AK','AL','AM','AN','AO','AP','AQ','AR','AS','AT','AU','AV','AW','AX','AY','AZ');

                    $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($phpExcelPath2 . DIRECTORY_SEPARATOR . 'IOFactory.php');
                    spl_autoload_register(array('YiiBase','autoload'));

                    $objPHPExcel = new PHPExcel();

                    $objPHPExcel->getProperties()->setCreator("RORAIMASOFTWARE")
                                                ->setLastModifiedBy("RORAIMASOFTWARE")
                                                ->setTitle("RORAIMASOFTWARE")
                                                ->setSubject("RORAIMASOFTWARE")
                                                ->setDescription("RORAIMASOFTWARE")
                                                ->setKeywords("RORAIMASOFTWARE")
                                                ->setCategory("RORAIMASOFTWARE");

                    $objPHPExcel->setActiveSheetIndex(0);



                    $numtemo =0;
                    $objPHPExcel->getActiveSheet()->getStyle('A1:D1')->getFont()->setBold(true);					//stylo
                    $objPHPExcel->getActiveSheet()->getStyle('A1:D1')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
                    $objPHPExcel->getActiveSheet()->getStyle('A1:R1')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
                    foreach(range('A','T') as $columnID) {
                        $objPHPExcel->getActiveSheet()->getColumnDimension($columnID)->setAutoSize(true);
                    }

                    $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].'1','Total retenciones');
                    $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].'2',count($datos));

                    $numtemo++;
                    $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].'1','Monto total en retenciones');
                    $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].'2')->getNumberFormat()->setFormatCode('#,##0.00');

                    $numtemo++;
                    $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].'1','Fecha desde');
                    $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].'2',($modelTipoNominaPeriodo)?date('d-m-Y',strtotime($modelTipoNominaPeriodo->fecha_desde)):"");
                    $numtemo++;
                    $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].'1','Fecha hasta');
                    $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].'2',($modelTipoNominaPeriodo)?date('d-m-Y',strtotime($modelTipoNominaPeriodo->fecha_hasta)):"");




                    $numtemo = 0;
                    $numfila = 3;

                    $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila,'Cédula');$numtemo++;
                    $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila,'Nombres');$numtemo++;
                    $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila,'Cod. empresa');$numtemo++;
                    $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila,'Clave préstamo');$numtemo++;
                    $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila,'Tipo de préstamo');$numtemo++;
                    $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila,'% de interes');$numtemo++;
                    $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila,'Numero de préstamo');$numtemo++;
                    $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila,'Monto préstamo');$numtemo++;
                    $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila,'Capital del préstamo');$numtemo++;
                    $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila,'Intereses del préstamo');$numtemo++;
                    $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila,'Fecha inicio');$numtemo++;
                    $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila,'Fecha vencimiento');$numtemo++;

                    $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila,'Capital de la cuota');$numtemo++;
                    $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila,'Intereses de la cuota');$numtemo++;
                    $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila,'Monto de la cuota');$numtemo++;
                    $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila,'Número de la cuota del periodo');$numtemo++;
                    $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila,'Fecha de venc. cuota');$numtemo++;
                    $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila,'Tipo de cuota');$numtemo++;
                    $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila,'Saldo');$numtemo++;
                    $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila,'Observación');$numfila++;

                    $objPHPExcel->getActiveSheet()->getStyle('A3:'.$filas[$numtemo].'3')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
                    $objPHPExcel->getActiveSheet()->getStyle('A3:'.$filas[$numtemo].'3')->getFont()->setBold(true);					//stylo



                    $numtemo=0;
                    $numfila = 4;
                    $monto =0;
                    foreach($consulta->getData() as $key=>$value) {
                        $numtemo =0;
                        $modelTablaAmortizacion = CreditoTablaAmortizacion::model()->findByPk($value->id);
                        $inicio = $filas[$numtemo].$numfila;

                        $fechaUltimoDescuento = CreditoTablaAmortizacion::model()->find(array('select'=>'max(fecha_vencimiento) AS fecha_vencimiento, sum(monto_capital) AS monto_capital',
                                                                                      'condition'=>'idcredito=:id AND blnborrado =  false AND id_estatus_cuota is null',
                                                                                      'params'=>array(':id'=>$modelTablaAmortizacion->idcredito)));
                        $modelTotalInteres = CreditoTablaAmortizacion::model()->find(array('select'=>'sum(monto_interes) as monto_interes','condition'=>'idcredito=:idcredito',
                                                                                    'params'=>array(':idcredito'=>$modelTablaAmortizacion->idcredito)))->monto_interes;
                        $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila,$modelTablaAmortizacion->idCredito->idAsociado->cedula);$numtemo++;
                        $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila,$modelTablaAmortizacion->idCredito->idAsociado->nombre.' '.$modelTablaAmortizacion->idCredito->idAsociado->apellidos);$numtemo++;
                        $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila,$modelTablaAmortizacion->idCredito->idAsociado->unidad->codigo);$numtemo++;
                        $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila,$modelTablaAmortizacion->idCredito->id_tipo_credito);$numtemo++;
                        $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila,$modelTablaAmortizacion->idCredito->idTipoCredito->descripcion);$numtemo++;
                        $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila,$modelTablaAmortizacion->idCredito->idTipoCredito->taza_interes);$numtemo++;
                        $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila,$modelTablaAmortizacion->idcredito);$numtemo++;
                        $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila)->getNumberFormat()->setFormatCode('#,##0.00');
                        $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila,$modelTablaAmortizacion->idCredito->monto_credito+$modelTotalInteres);$numtemo++;
                        $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila)->getNumberFormat()->setFormatCode('#,##0.00');
                        $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila,$modelTablaAmortizacion->idCredito->monto_credito);$numtemo++;
                        $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila)->getNumberFormat()->setFormatCode('#,##0.00');
                        $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila,$modelTotalInteres);$numtemo++;
                        $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila,$modelTablaAmortizacion->idCredito->fecha_primer_descuento);$numtemo++;
                        $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila,$fechaUltimoDescuento->fecha_vencimiento);$numtemo++;

                        $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila)->getNumberFormat()->setFormatCode('#,##0.00');
                        $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila,$modelTablaAmortizacion->monto_capital);$numtemo++;
                        $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila)->getNumberFormat()->setFormatCode('#,##0.00');
                        $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila,$modelTablaAmortizacion->monto_interes);$numtemo++;
                        $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila)->getNumberFormat()->setFormatCode('#,##0.00');
                        $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila,$modelTablaAmortizacion->monto_cuota);$numtemo++;
                        $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila,$modelTablaAmortizacion->numero_cuota);$numtemo++;
                        $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila,$modelTablaAmortizacion->fecha_vencimiento);$numtemo++;
                        $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila)->getNumberFormat()->setFormatCode('#,##0.00');
                        $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila,$modelTablaAmortizacion->tipo_cuota);$numtemo++;
                        $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila)->getNumberFormat()->setFormatCode('#,##0.00');
                        $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila,$fechaUltimoDescuento->monto_capital);$numtemo++;


                        $observacion='';
                        //
                        if($modelTablaAmortizacion->numero_cuota==1){
                            $objPHPExcel->getActiveSheet()->getStyle($inicio.':'.$filas[($numtemo)].$numfila)->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID)
                                                                                        ->getStartColor()
                                                                                        ->setARGB('0000CC');
                            $observacion='Nuevo préstamo';
                        }

                        $modelUltimaCuota= CreditoTablaAmortizacion::model()->find('idcredito=:id_credito ORDER BY id desc',array(':id_credito'=>$modelTablaAmortizacion->idcredito));
                        if($value->id==$modelUltimaCuota->id){
                            $objPHPExcel->getActiveSheet()->getStyle($inicio.':'.$filas[($numtemo)].$numfila)->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID)
                                                                                        ->getStartColor()
                                                                                        ->setARGB('99FF33');
                            $observacion='Última cuota del préstamo';
                        }

                        $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila,$observacion);$numtemo++;
                        $monto += $modelTablaAmortizacion->monto_cuota;
                        $numfila ++;
                    }
                    $objPHPExcel->getActiveSheet()->setCellValue('B2',$monto);

                    //$objPHPExcel->getActiveSheet()->setTitle('Reporte de Créditos');
                    $objPHPExcel->setActiveSheetIndex(0);

                    header('Content-Type: application/vnd.ms-excel');
                    header('Content-Disposition: attachment;filename="'.$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();
                    exit;




                }
                else{
                    Yii::app()->user->setFlash('error', "No hay datos para generar");
                    $this->redirect(array('adminPrenomina'));
                }
	}

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

        $datos = [];
        $modelCuotasReclamar = PreNominaTablaAmortizacion::model()->findAll('id_pre_nomina_credito=:id AND id_estatus_cuota_excluida = 8', [':id'=>$model->id]);

        $contenido = (new Warp($modelCuotasReclamar))->map(function ($cuota) {
            return [
                'cedula' => $cuota->idTablaAmortizacion->idCredito->idAsociado->cedula,
                'asociado' => $cuota->idTablaAmortizacion->idCredito->idAsociado->nombre(),
                'codigo' => $cuota->idTablaAmortizacion->idCredito->idAsociado->unidad->codigo,
                'clave' => $cuota->idTablaAmortizacion->idCredito->id_tipo_credito,
                'categoria' => isset($cuota->idTablaAmortizacion->idCredito->idTipoCredito->idTituloTipoCredito)
                    ? $cuota->idTablaAmortizacion->idCredito->idTipoCredito->idTituloTipoCredito->nombre_titulo
                    : '',
                'plazo' => isset($cuota->idTablaAmortizacion->idCredito->idTipoCredito)
                    ? $cuota->idTablaAmortizacion->idCredito->idTipoCredito->descripcion
                    : '',
                'tipo_cuota' => $cuota->idTablaAmortizacion->tipo_cuota,
                'monto' => $cuota->idTablaAmortizacion->monto_cuota,
            ];
        });

        $datos = [
            ['Total reclamos', 'Monto total reclamos', 'Periodo desde', 'Periodo hasta'],
            [
                (new Warp($contenido))->count(),
                (new Warp($contenido))->sum('monto'),
                Yii::app()->format->date($model->idTipoMominaPeriodo->fecha_desde),
                Yii::app()->format->date($model->idTipoMominaPeriodo->fecha_hasta),
            ],
            [],
            ['Cédula', 'Nombres y apellidos', 'Código empresa','Clave','Categoría','Plazo del préstamo', 'Tipo de cuota', 'Monto Cuota'],
        ];
        $datos = array_merge($datos, $contenido);

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

        $objPHPExcel = new PHPExcel();
        foreach (range('A', 'H') as $columnID) {
            $objPHPExcel->getActiveSheet()->getColumnDimension($columnID)->setAutoSize(true);
        }

        $objPHPExcel->getActiveSheet()->fromArray($datos, null, 'A1');
        $objPHPExcel->getActiveSheet()->getStyle('A1:D1')->getFont()->setBold(true);
        $objPHPExcel->getActiveSheet()->getStyle('A1:D1')->getFont()->getColor()->setARGB(PHPExcel_Style_Color::COLOR_WHITE);
        $objPHPExcel->getActiveSheet()->getStyle('A1:D1')->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID);
        $objPHPExcel->getActiveSheet()->getStyle('A1:D1')->getFill()->getStartColor()->setARGB('004413');
        $objPHPExcel->getActiveSheet()->getStyle('B')->getNumberFormat()->setFormatCode('#,##0.00');

        $objPHPExcel->getActiveSheet()->getStyle('A4:H4')->getFont()->setBold(true);
        $objPHPExcel->getActiveSheet()->getStyle('A4:H4')->getFont()->getColor()->setARGB(PHPExcel_Style_Color::COLOR_WHITE);
        $objPHPExcel->getActiveSheet()->getStyle('A4:H4')->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID);
        $objPHPExcel->getActiveSheet()->getStyle('A4:H4')->getFill()->getStartColor()->setARGB('004413');
        $objPHPExcel->getActiveSheet()->getStyle('H')->getNumberFormat()->setFormatCode('#,##0.00');

        $index = 5;
        foreach ($contenido as $couta) {
            $objPHPExcel->getActiveSheet()->setCellValueExplicit("C{$index}", $couta['codigo'], PHPExcel_Cell_DataType::TYPE_STRING);
            $index++;
        }

        $objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel);
        $objWriter->setOffice2003Compatibility(true);
        header('Content-Type: application/vnd.ms-excel');
        header('Content-Disposition: attachment;filename="Cuotas_reclamar_'.$model->nombre_archivo.'.xlsx"');
        header('Cache-Control: max-age=0');
        $objWriter->save('php://output');
    }

    public function actionArchivoCuotasReclamarPdf($id)
    {
        $model = $this->loadModel($id);
        $modelCuotasReclamar = PreNominaTablaAmortizacion::model()->findAll('id_pre_nomina_credito=:id AND id_estatus_cuota_excluida = 8', [':id'=>$model->id]);
        $pdf = Yii::createComponent('application.extensions.mpdf60.mpdf');

        $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 . ' AND id_estatus_cuota_excluida = 8
                GROUP BY nombre_titulo,descripcion
                ORDER by nombre_titulo, descripcion, count(id_tabla_amortizacion), sum(monto_cuota) ';
        $data = Yii::app()->db->createCommand($sql)->queryAll();
        $htmlDetalle='
            <link rel="stylesheet" type="text/css" href="' . Yii::app()->request->baseUrl . '/css/pdf.css" />
            <h1 style ="text-align:center">Cuotas por reclamar</h1>
            <h3 style ="text-align:center">Período desde: '.Yii::app()->format->date($model->idTipoMominaPeriodo->fecha_desde).' hasta: '.Yii::app()->format->date($model->idTipoMominaPeriodo->fecha_hasta).'</h3>
            <table class="tabla-datos" bordercolor="#000" border="1" width="100%" style ="font-size:12px">
                <tr>
                    <th  class="titulo" style="text-align: center"><b>Categor&iacute;a del pr&eacute;stamo</b></th>
                    <th  class="titulo" style="text-align: center"><b>Plazo</b></th>
                    <th  class="titulo" style="text-align: center"><b>Cantidad de cuotas</b></th>
                    <th  class="titulo" style="text-align: center"><b>Monto de la cuota</b></th>
                </tr>';
        $sumaCuota = $sumaMonto=$sumaCapita = $sumaInteres =  0;
        foreach ($data as $key => $value) {
            $sumaCuota+= $value['cantidad_cuota'];
            $sumaMonto+= $value['monto'];
            $htmlDetalle.='<tr>
                            <td>' . $value['nombre_titulo'] . '</td>
                            <td>' . $value['descripcion'] . '</td>
                            <td style="text-align: center">' . $value['cantidad_cuota'] . '</td>
                            <td style="text-align: right">' . Yii::app()->numberFormatter->formatCurrency($value['monto'], '') . '</td>
                        </tr>';
        }
        $htmlDetalle.='
                <tr class="info" >
                    <th></th>
                    <th style="text-align: center"><b>Totales</b></th>
                    <th style="text-align: center"><b>' . $sumaCuota . '</b></th>
                    <th style="text-align: right"><b>Bs. ' . Yii::app()->numberFormatter->formatCurrency($sumaMonto, '') . '</b></th>
                </tr>
                </table>';
        $html='
            <table class="tabla-datos" bordercolor="#000" border="1" width="100%" style ="font-size:12px">
                <tr class="titulo">
                    <th  class="titulo">N°</th>
                    <th  class="titulo">Cédula</th>
                    <th  class="titulo">Nombres y apellidos</th>
                    <th  class="titulo">Unidad</th>
					<th  class="titulo">Clave</th>
                    <th  class="titulo">Categoría</th>
                    <th  class="titulo">Plazo del préstamo</th>
                    <th  class="titulo">Tipo de cuota</th>
                    <th  class="titulo">Monto Cuota</th>
                </tr>';
        $detalle=[];
        foreach ($modelCuotasReclamar as $key => $value) {
            $detalle[$value->idTablaAmortizacion->idCredito->idTipoCredito->idTituloTipoCredito->nombre_titulo][$value->idTablaAmortizacion->idCredito->idTipoCredito->descripcion]['descripcion']=    $value->idTablaAmortizacion->idCredito->idTipoCredito->descripcion;
            $detalle[$value->idTablaAmortizacion->idCredito->idTipoCredito->idTituloTipoCredito->nombre_titulo][$value->idTablaAmortizacion->idCredito->idTipoCredito->descripcion]['cantidad_cuota']= $detalle[$value->idTablaAmortizacion->idCredito->idTipoCredito->idTituloTipoCredito->nombre_titulo]['cantidad_cuota']+1;
            $detalle[$value->idTablaAmortizacion->idCredito->idTipoCredito->idTituloTipoCredito->nombre_titulo][$value->idTablaAmortizacion->idCredito->idTipoCredito->descripcion]['monto_cuota']=    $detalle[$value->idTablaAmortizacion->idCredito->idTipoCredito->idTituloTipoCredito->nombre_titulo]['monto_cuota']+$value->idTablaAmortizacion->monto_cuota;
            $html.='<tr>
                        <td>' . ($key+1) . '</td>
                        <td>' . $value->idTablaAmortizacion->idCredito->idAsociado->cedula . '</td>
                        <td>' . $value->idTablaAmortizacion->idCredito->idAsociado->nombre() . '</td>
                        <td>' . $value->idTablaAmortizacion->idCredito->idAsociado->unidad->codigo . '</td>
                        <td>' . $value->idTablaAmortizacion->idCredito->id_tipo_credito . '</td>
                        <td>' . ((isset($value->idTablaAmortizacion->idCredito->idTipoCredito->idTituloTipoCredito)) ? $value->idTablaAmortizacion->idCredito->idTipoCredito->idTituloTipoCredito->nombre_titulo : '') . '</td>
                        <td>' . ((isset($value->idTablaAmortizacion->idCredito->idTipoCredito)) ? $value->idTablaAmortizacion->idCredito->idTipoCredito->descripcion : '') . '</td>
                        <td>' . $value->idTablaAmortizacion->tipo_cuota . '</td>
                        <td style="text-align: right;">' . number_format($value->idTablaAmortizacion->monto_cuota, 2, ',', '.') . '</td>
                    </tr>';
        }

        $html.='</table>';

        $mpdf = new mPDF('utf8', 'LETTER', 8, '', 15, 15, 20, 15, 5, 5);
        $mpdf->setHeader($arr, 'O');
        $mpdf->defaultfooterfontsize = 6;
        $mpdf->SetFooter('Elaborado por:<br>' . $usuario . ' <br>{DATE d/m/Y} |' . $modelEmpresa->dir_emp . '| Página {PAGENO}/{nbpg}');
        $mpdf->WriteHTML($htmlDetalle. $html);
        $mpdf->Output("Cuotas_reclamar_{$model->nombre_archivo}.pdf", 'D');
        exit;
    }

    public function actionReversarNominaPrestamos($id)
    {
        // 1. Buscar la nomina
        $model = $this->loadModel($id);
        try {
            $transaction = Yii::app()->getDb()->beginTransaction();
            // 2. Buscar las cuotas
            $cuotas = $model->cuotas();

            // 3. Cambia el estatus de las cuotas a 'reservada'
            (new Warp($cuotas))->map(function ($cuota) {
                $cuotaTablaAmortizacion = CreditoTablaAmortizacion::model()->findByPk($cuota['id_tabla_amortizacion']);
                $cuotaTablaAmortizacion->id_estatus_cuota = 3;
                $cuotaTablaAmortizacion->save();
            });

            // 4. Cambiarle el estatus a la nomina a 'cargada'
            $model->setEstatusPreNomina(2);

            // 5. Cambiarle el estatus a la prenomina a 'cargada'
            $model->setEstatusNomina(1);

            // 6. Termina la transacción
            $transaction->commit();

            Yii::app()->user->setFlash('success', "Se ha reversado correctamente la nomina <strong>{$model->nombre_archivo}</strong>");
            $this->redirect(['admin']);
        } catch (Exception $e) {
            $transaction->rollback();
            Yii::app()->user->setFlash('error', $e->getMessage());
        }

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

    /**
	 * 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=DatosPreNominaCredito::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-pre-nomina-credito-form')
		{
			echo CActiveForm::validate($model);
			Yii::app()->end();
		}
	}
}
