<?php

class CreditoController extends Controller
{
	/**
	 * @var string the default layout for the views. Defaults to '//layouts/column2', meaning
	 * using two-column layout. See 'protected/views/layouts/column2.php'.
	 */
	public $layout='//layouts/column2';

	/**
	 * @return array action filters
	 */
		public function filters()
	{
		return array(
			'accessControl', // perform access control for CRUD operations
                        'postOnly + delete',
                        array('CrugeAccessControlFilter')
		);
	}

	/**
	 * Specifies the access control rules.
	 * This method is used by the 'accessControl' filter.
	 * @return array access control rules
	 */
	public function accessRules()
    {
        return [
            [
                'allow',
                'actions' => [
                    'index', 'view', 'ComprobanteSolcitudPrestamo', 'createRefinanciamientoAdministrador',
                    'createRefinanciamiento', 'ReestructuracionCredito', 'create', 'update', 'TablaAmoritzacion',
                    'TablaAmoritzacionAdministrador', 'ReporteCredito', 'Aprobar', 'Pagar', 'Reporte', 'CreateAdministrador',
                    'MontoSugerido', 'TipoCreditoCaracteristica', 'ReportePrestamo', 'reversarPago', 'admin', 'delete', 'Denegar',
                    'ConsultaAsociadoCreditos', 'BuscarCredito', 'GuardarNuevaFechaDescuento', 'TablaAmoritzacionReestructuracion',
                ],
                'users' => ['@'],
            ],
            [
                'deny',
                'users' => ['*'],
            ],
        ];
    }

	public function actionView($id)
    {
        $model = $this->loadModel($id);
        if (Yii::app()->user->checkAccess('usuario_asociado') && ! Yii::app()->user->checkAccess('usuario_administrador')) {
            $modelAsociado = Asociado::model()->find('cedula=:cedula AND blnborrado = false AND id_estatus in(1,4) ORDER BY idasociado desc', [
                'cedula' => CrugeUserI::model()->findByPk(Yii::app()->user->id)->cedula,
            ]);
            if ($model->idasociado != $modelAsociado->idasociado) {
                Yii::app()->user->setFlash('error', 'No se encontraron registro para mostrar, intente mas tarde');
                $this->redirect(['admin']);
            }
        }

        $detallePago = ProcesoPago::model()->find('id_proceso=:proceso AND actual=true and id_nombre_proceso=1', [':proceso' => $model->id]);
        $modelCreditoSeleccionado = [];

        if ($model->prestamos_seleccionados != '') {
            $id_creditos = '';
            $prestamos_seleccionado = json_decode($model->prestamos_seleccionados, true);
            foreach ($prestamos_seleccionado as $key => $value) {
                $id_creditos .= $value['id_credito'].',';
            }

            $prestamos = trim($id_creditos, ',');
            $modelCreditoSeleccionado = Yii::app()->db->createCommand("
                    SELECT t.idcredito as id_credito,
                            nombre_titulo AS categoria,
                            plazo_prestamo,
                            t.id_tipo_credito,
                            prestamo,
                            fecha_registro,
                            cuotas_pagadas,
                            id_tipo_nomina,
                            nombre_estatus_credito,
                            ps.monto,
                            ps.capital_cuotas_no_afectadas,
                            ps.interes_cuotas_no_afectadas
                    FROM reporte_creditos t
                    inner join (
                        select cast(d.el->>'id_credito' as integer) as id_credito,
                                cast(d.el->>'id_tipo_credito' as integer) as id_tipo_credito,
                                cast(d.el->>'monto' as numeric) as monto,
                                cast(d.el->>'capital_cuotas_no_afectadas' as numeric) as capital_cuotas_no_afectadas,
                                cast(d.el->>'interes_cuotas_no_afectadas' as numeric) as interes_cuotas_no_afectadas
                        from (
                            select id, json_array_elements(prestamos_seleccionados) as el
                            from prestamos.credito
                            where id=:credito
                                and blnborrado is false
                        ) as d
                    ) as ps on ps.id_credito=t.idcredito
                    order by t.idcredito
                ")->bindValues([
                'credito' => $model->id,
            ])->queryAll();
        }

        $this->render('view', [
            'model' => $model,
            'modelCapacidadPago' => ($model->detalle_capacidad_pago != '') ? json_decode($model->detalle_capacidad_pago, true) : [],
            'detalle' => $detallePago,
            'modelCreditoSeleccionado' => $modelCreditoSeleccionado,
        ]);
    }

	/**
	 * Creates a new model.
	 * If creation is successful, the browser will be redirected to the 'view' page.
	 */
	public function actionCreate()
	{
        $modelAsociados = Asociado::model()->find('cedula=:cedula AND blnborrado = false AND id_estatus=1 ORDER BY idasociado desc', array(':cedula' => CrugeUserI::model()->findByPk(Yii::app()->user->id)->cedula));
        if(!$modelAsociados){
             Yii::app()->user->setFlash('error','No esta habilitado para realizar soliciutdes de prestamos');
             $this->redirect( array('admin'));
        }
        $solicitud = Liquidacion::checkSolicitud($modelAsociados->idasociado);

        if (empty($solicitud)) {

    		$model=new Credito('SolcitudAsociado');
                    $post = false;
                    $postDatos = false;
                    $modelAsociado = Asociado::model()->find('cedula=:cedula AND blnborrado = false AND id_estatus = 1 ORDER BY idasociado desc', array(':cedula' => CrugeUserI::model()->findByPk(Yii::app()->user->id)->cedula));
                     if(!$modelAsociado){
                         Yii::app()->user->setFlash('error','Lo sentimos, no está habilitado para realizar solicitud de préstamos ');
                         $this->redirect( array('admin'));
                    }
                    $modelCapacidadPago[] = new TipoCreditoCapacidadPago('Solicitud');
                    $modelSeguimientoCredito = new CreditoSeguimiento();
                    $model->idasociado = $modelAsociado->idasociado;
                    $model->cuenta = $modelAsociado->cuenta_bancaria;
                    $errores = '';
                    $poseeSolicitudCredito = FALSE;
                    $modelCreditosActivos = ReporteCreditos::model()->find('idasociado=:idasociado AND id_estatus_credito=1',array(':idasociado'=>$model->idasociado));
                    if($modelCreditosActivos){
                         $modelCategoria = array();
                        $poseeSolicitudCredito = TRUE;
                    }
                    else{
                        $modelCategoria = TituloTipoCredito::model()->with('tiposCreditos')->findAll(' publicar = TRUE AND blnborrado = false ');

                    }

    //                if($modelCategoria){
    //                    foreach ($modelCategoria AS $key =>$value){
    //                        $tipoCredito = array();
    //                        $mostar = false;
    //                        foreach ($value->tiposCreditos as $keyTipo => $valueTipo) {
    //                            $tipoCredito = TipoCredito::model()->validarTipoCreditoOrdinarias ($valueTipo, $tipoCredito = array(), $modelAsociado);
    //                            if($tipoCredito['mensaje']=='')
    //                                $mostar = true;
    //                            else
    //                                $errores .= $tipoCredito['mensaje'];
    //                        }
    //                        unset($tipoCredito);
    //
    //                        if(!$mostar)
    //                            unset ($modelCategoria[$key]);
    //                    }
    //                }
    //
    //                if(count($modelCategoria)==0 ){
    //                     Yii::app()->user->setFlash('error',$errores);
    //                     $this->redirect( array('admin'));
    //                }
    //
                    $sueldo = $modelAsociado->utltimoSueldoPorcentajeAporte($modelAsociado->idasociado);
                    $modelPorcentajeAporte = PorcentajeDescuentoAsociadoPatrono::model()->find('idasociado=:idasociado AND actual = true',array(':idasociado'=>$modelAsociado->idasociado));
                    if($modelPorcentajeAporte)
                        $porcentaje = $modelPorcentajeAporte->idPorcentajeAsociado->descripcion;
                    else
                        $porcentaje = ($modelAsociado->aportes)?$modelAsociado->aportes->descripcion:10;


    		if(isset($_POST['Credito']))
    		{
                            unset($modelCapacidadPago);$modelCapacidadPago=array();
    			$model->attributes=$_POST['Credito'];
    			$post = false;
                            $postDatos =  true;
                            $valido = TRUE;
                            if(isset($_POST['TipoCreditoCapacidadPago'])){
                                $post =  true;
                                foreach($_POST['TipoCreditoCapacidadPago'] as $keyCuotas=>$valueCuotas){
                                    $item = new TipoCreditoCapacidadPago('Solicitud');
                                    $item->attributes=$valueCuotas;
                                    $modelCreditoCapacidadPago =TipoCreditoCapacidadPago::model()->findByPk($keyCuotas);
                                    $item->nombre_concepto = $modelCreditoCapacidadPago->idCapacidadPago->nombre_concepto;
                                    $item->asignacion = ($modelCreditoCapacidadPago->idCapacidadPago->asignacion)?1:0;
                                    $valido =$item->validate()&&$valido;
                                    $modelCapacidadPago[$keyCuotas] = $item;
                                    unset($item);
                                }

                           // echo "<pre>";print_r($modelCapacidadPago);exit;
                            }
                            $recibo_pago=CUploadedFile::getInstance($model,'nombre_recibo_pago');
                            if($recibo_pago) {
                                $model->nombre_recibo_pago='recibo_pago';
                            }

    			if($model->validate()){
                                if(isset(Yii::app()->session['CrearCreditoAdministrador'])){
                                    $monto = str_replace('.', '', $model->monto_credito);
                                    $monto=str_replace(',', '.', $monto);
                                    $modelResultadoTablaAmortizacion = Yii::app()->session['CrearCreditoAdministrador'];
                                    if($modelResultadoTablaAmortizacion['error']==0){

                                        $modelTablaAmortizacion = $modelResultadoTablaAmortizacion['tablaAmortizacion'];
                                        $modelTipoCredito = TipoCredito::model()->findByPk($model->id_tipo_credito);
                                        $interesGenerado =0;

                                        $transaction = Yii::app()->db->beginTransaction();
                                        try {


                                                    $modelTipoCredito = TipoCredito::model()->findByPk($model->id_tipo_credito);
                                                    $model->taza_interes = number_format($modelTipoCredito->taza_interes, 3,',', '.');
                                                    $model->id_tipo_cobro = $modelTipoCredito->id_tipo_cobro;
                                                    $model->cuota_pagar = $modelTablaAmortizacion[0]->monto_cuota;
                                                    $model->gastos_administrativo = $modelResultadoTablaAmortizacion['gastosAdministrativo'];
                                                    $model->gastos_administrativos_afianzadora = $modelResultadoTablaAmortizacion['gastosAdministrativoAfianzador'];
                                                    $model->gastos_administrativos_afianzadora_caja = $modelResultadoTablaAmortizacion['descontarGastosAdministrativoAfianzadorCaja'];
                                                    $model->id_afianzadora = $modelResultadoTablaAmortizacion['idAfianzadora'];
                                                    $model->monto_haberes_comprometido = $modelResultadoTablaAmortizacion['monto_haberes_socio'];

                                                    $modelAsociado = Asociado::model()->findByPk($model->idasociado);
                                                    $model->id_tipo_nomina = $modelAsociado->getIdTipoNomina();

                                                    $detalleCapacidadPago = array();
                                                    $asiganaciones=0;
                                                    $deducciones = 0;
                                                    $i= count($modelCapacidadPago)+1;
                                                    if(count($modelCapacidadPago)>0 ){
                                                        $capacidadPago = array();
                                                        foreach($modelCapacidadPago as $keyCE=>$valueCE) {
                                                            $capacidadPago[($keyCE+1)]['monto'] =$valueCE->monto;
                                                            $modelCreditoCapacidadPago =TipoCreditoCapacidadPago::model()->findByPk($keyCE);
                                                            $capacidadPago[($keyCE+1)]['nombre_concepto'] = $modelCreditoCapacidadPago->idCapacidadPago->nombre_concepto;
                                                            $capacidadPago[($keyCE+1)]['asignacion'] = $modelCreditoCapacidadPago->idCapacidadPago->asignacion;

                                                            if($valueCE->asignacion){
                                                                $montoasiganaciones = str_replace('.', '',  $valueCE->monto);
                                                                $montoasiganaciones = str_replace(',', '.', $montoasiganaciones);
                                                                $asiganaciones += $montoasiganaciones;
                                                            }
                                                            else{
                                                                $montoasiganaciones = str_replace('.', '',  $valueCE->monto);
                                                                $montoasiganaciones = str_replace(',', '.', $montoasiganaciones);
                                                                $deducciones += $montoasiganaciones;
                                                            }

                                                        }
                                                    }
                                                    else{
                                                        $asiganaciones = Asociado::model()->utltimoSueldoPorcentajeAporte($model->idasociado);

                                                        $capacidadPago[$i]['monto'] =$asiganaciones;
                                                        $capacidadPago[$i]['nombre_concepto'] = 'Último sueldo';
                                                        $capacidadPago[$i]['asignacion'] =TRUE;
                                                        $i++;
                                                    }

                                                    foreach (Yii::app()->session['CapacidadPago']['creditos'] as $key => $value) {
                                                        $capacidadPago[$i]['monto'] =$value;
                                                        $capacidadPago[$i]['nombre_concepto'] ='Préstamo "'.$key.'"';
                                                        $capacidadPago[$i]['asignacion'] =false;
                                                        $i++;
                                                        $deducciones += $value;
                                                    }

                                                    $detalleCapacidadPago['total_haberes']  = Yii::app()->session['CapacidadPago']['total_haberes'];
                                                    $detalleCapacidadPago['porcentaje_tipo_credito']  = Yii::app()->session['CapacidadPago']['porcentaje_tipo_credito'];
                                                    $detalleCapacidadPago['total_monto_prestamo']  = Yii::app()->session['CapacidadPago']['total_monto_prestamo'];
                                                    $detalleCapacidadPago['total_monto_fiador']  = Yii::app()->session['CapacidadPago']['total_monto_fiador'];
                                                    $detalleCapacidadPago['total_asiganaciones'] = $asiganaciones;
                                                    $detalleCapacidadPago['total_deducciones'] = $deducciones;
                                                    $detalleCapacidadPago['detalle_capacidad_pago'] =$capacidadPago;
                                                    $model->detalle_capacidad_pago = json_encode($detalleCapacidadPago);


                                                    $valido= TRUE;
                                                    $model->fecha_registro = $modelSeguimientoCredito-> fecha_registro;
                                                    $modelSeguimientoCredito->fecha_registro = date('Y-m-d');
                                                    //echo "<pre>";print_r($model);exit;

                                                    $modelDescontarastosAdministrativo = TipoCreditoGastosAdministrativo::model()->count('id_tipo_credito=:id_tipo_credito AND descontar = true',[':id_tipo_credito'=>$modelTipoCredito->id]);
                                                    $monto = str_replace(['.',','], ['','.'], $model->monto_credito);
                                                    if($modelDescontarastosAdministrativo> 0){

                                                        $model->monto_credito_depositar = $monto-$model->gastos_administrativo;
                                                    }
                                                    else{
                                                        $model->monto_credito_depositar = $monto;
                                                    }

                                                    if($modelTipoCredito->descontar_grantia_afianzadora){
                                                         $model->monto_credito_depositar = $model->monto_credito_depositar-$model->gastos_administrativos_afianzadora;
                                                    }


                                                    if($model->save()){
                                                        $modelEstatusCredito = new CreditoSeguimiento();
                                                        $modelEstatusCredito->id_credito = $model->id;
                                                        $modelEstatusCredito->id_estatus_credito = 1;
                                                        if($modelEstatusCredito->save()){
                                                            foreach($modelTablaAmortizacion as $key =>$value){
                                                                $value->idcredito = $model->id;
                                                                if(!$value->save()){
                                                                    $valido = false;
                                                                }
                                                            }
                                                        }
                                                    }

                                                    if($valido){
                                                        $transaction->commit();
                                                        unset(Yii::app()->session['CrearCreditoAdministrador']);
                                                        unset(Yii::app()->session['CapacidadPago']);
                                                        if($recibo_pago!=''){
                                                            $model->nombre_recibo_pago='recibo_pago_'.$model->id.'_'.$model->idAsociado->cedula.'.'.$recibo_pago->getExtensionName();

                                                            $model->save();
                                                            $recibo_pago->saveAs(Credito::$ruta.$model->nombre_recibo_pago);

                                                        }
                                                        Yii::app()->user->setFlash('success', 'Los datos han sido registrado exitosamente');
        //                                            CorreoElectronico::enviarCorreo(array('nombre'=>$model->nombre.' '.$model->apellidos,
        //                                                                                    'correo'=>$model->correoelectronico,
        //                                                                                    'asunto'=>'Registo de los Datos de la Planilla',
        //                                                                                    'mensaje'=>$this->renderPartial('correoRegistroAsociado',array(
        //                                                                                            'model'=>$model,
        //                                                                                            'empresa' =>  Empresa::model()->find(),
        //                                                                                    ), true)
        //                                                                            ));
        //
                                                        $this->redirect(array('view','id'=>$model->id));
                                                    }
                                                    else{
                                                        $transaction->rollBack();
                                                        Yii::app()->user->setFlash('error', 'Los datos no han sido registrado');
                                                        $this->redirect(array('admin'));
                                                    }

                                        }
                                        catch (Exception $e){
                                                throw new CHttpException(400,$e->getMessage());
                                                $transaction->rollBack();
                                        }

                                    }
                                    else{
                                        Yii::app()->user->setFlash('info', '<div class="alert alert-info">
                                                                                <i class="icon-info-sign"></i>
                                                                                    '.$modelResultadoTablaAmortizacion['mensajeError'].'
                                                                            </div>');
                                    }
                                }
    			}
                           /* else{
                                    Yii::app()->user->setFlash('info', '<div class="alert alert-info">
                                                                            <i class="icon-info-sign"></i>
                                                                                '.$modelResultadoTablaAmortizacion['mensajeError'].'
                                                                        </div>');
                                }*/
    		}

                     $modelPermitirCuotasEspeciales = TipoCredito::model()->count('id=:id AND generar_tabla_cuotas_especiales= false',array(':id'=>(int)$model->id_tipo_credito));
    		$this->render('create', array(  'model'=>$model,
                                                    'modelAsociado'=>$modelAsociado,
                                                    'post'=>$post,
                                                    'postDatos'=>$postDatos,
                                                    'sueldo'=>$sueldo,
                                                    'porcentaje'=>$porcentaje,
                                                    'modelCapacidadPago'=>$modelCapacidadPago,
                                                    'modelPermitirCuotasEspeciales'=>$modelPermitirCuotasEspeciales,
                                                    'poseeSolicitudCredito'=>$poseeSolicitudCredito,
                                                    'modelCategoria'=>$modelCategoria,));

        }else{ //Si hay una solicitud de liquidacion registrada que no este denegada redirige

            Yii::app()->user->setFlash('error', "<b>Ud. posee una solicitud de liquidación registrada.</b>");
            $this->redirect(array('/retiro/liquidacion/admin'));
        }
	}

	/**
	 * 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['Credito']))
		{
			$model->attributes=$_POST['Credito'];
			if($model->save())
				$this->redirect(array('view','id'=>$model->id));
		}

		$this->render('update',array(
			'model'=>$model,
		));
	}

    public function actionCreateAdministrador()
    {
        $model = new Credito('SolicitudAdministrador');
        $modelSeguimientoCredito = new CreditoSeguimiento();
        $modelCapacidadPago[] = new TipoCreditoCapacidadPago('Solicitud');
        $post = false;
        $postDatos = false;

        if (isset($_POST['Credito'])) {
            unset($modelCapacidadPago);
            $modelCapacidadPago = [];
            $valido = true;
            $model->attributes = $_POST['Credito'];
            $modelSeguimientoCredito->attributes = $_POST['CreditoSeguimiento'];
            $postDatos = true;

            if (isset($_POST['TipoCreditoCapacidadPago'])) {
                $post = true;
                foreach ($_POST['TipoCreditoCapacidadPago'] as $keyCuotas => $valueCuotas) {
                    $item = new TipoCreditoCapacidadPago('Solicitud');
                    $item->attributes = $valueCuotas;
                    $modelCreditoCapacidadPago = TipoCreditoCapacidadPago::model()->findByPk($keyCuotas);
                    $item->nombre_concepto = $modelCreditoCapacidadPago->idCapacidadPago->nombre_concepto;
                    $item->asignacion = ($modelCreditoCapacidadPago->idCapacidadPago->asignacion) ? 1 : 0;
                    $valido = $item->validate() && $valido;
                    $modelCapacidadPago[$keyCuotas] = $item;
                    unset($item);
                }
            }

            $recibo_pago = CUploadedFile::getInstance($model, 'nombre_recibo_pago');

            if ($recibo_pago) {
                $model->nombre_recibo_pago = 'recibo_pago';
            }
            if ($model->validate()) {
                if (isset(Yii::app()->session['CrearCreditoAdministrador'])) {
                    $monto = str_replace('.', '', $model->monto_credito);
                    $monto = str_replace(',', '.', $monto);
                    $modelResultadoTablaAmortizacion = Yii::app()->session['CrearCreditoAdministrador'];
                    if ($modelResultadoTablaAmortizacion['error'] == 0) {
                        $modelTablaAmortizacion = $modelResultadoTablaAmortizacion['tablaAmortizacion'];

                        $modelTipoCredito = TipoCredito::model()->findByPk($model->id_tipo_credito);
                        $interesGenerado = 0;

                        $transaction = Yii::app()->db->beginTransaction();
                        try {
                            $modelTipoCredito = TipoCredito::model()->findByPk($model->id_tipo_credito);
                            $model->taza_interes = number_format($modelTipoCredito->taza_interes, 3, ',', '.');
                            $model->cuota_pagar = $modelTablaAmortizacion[0]->monto_cuota;
                            $model->gastos_administrativo = $modelResultadoTablaAmortizacion['gastosAdministrativo'];
                            $model->gastos_administrativos_afianzadora = $modelResultadoTablaAmortizacion['gastosAdministrativoAfianzador'];
                            $model->gastos_administrativos_afianzadora_caja = $modelResultadoTablaAmortizacion['descontarGastosAdministrativoAfianzadorCaja'];
                            $model->id_afianzadora = $modelResultadoTablaAmortizacion['idAfianzadora'];
                            $model->monto_haberes_comprometido = (float) $modelResultadoTablaAmortizacion['monto_haberes_socio'];

                            $modelAsociado = Asociado::model()->findByPk($model->idasociado);
                            $model->id_tipo_nomina = $modelAsociado->getIdTipoNomina();

                            $detalleCapacidadPago = [];
                            $asiganaciones = 0;
                            $deducciones = 0;
                            $i = count($modelCapacidadPago) + 1;
                            if (count($modelCapacidadPago) > 0) {
                                $capacidadPago = [];
                                foreach ($modelCapacidadPago as $keyCE => $valueCE) {
                                    $capacidadPago[($keyCE + 1)]['monto'] = $valueCE->monto;
                                    $modelCreditoCapacidadPago = TipoCreditoCapacidadPago::model()->findByPk($keyCE);
                                    $capacidadPago[($keyCE + 1)]['nombre_concepto'] = $modelCreditoCapacidadPago->idCapacidadPago->nombre_concepto;
                                    $capacidadPago[($keyCE + 1)]['asignacion'] = $modelCreditoCapacidadPago->idCapacidadPago->asignacion;

                                    if ($valueCE->asignacion) {
                                        $montoasiganaciones = str_replace('.', '', $valueCE->monto);
                                        $montoasiganaciones = str_replace(',', '.', $montoasiganaciones);
                                        $asiganaciones += $montoasiganaciones;
                                    } else {
                                        $montoasiganaciones = str_replace('.', '', $valueCE->monto);
                                        $montoasiganaciones = str_replace(',', '.', $montoasiganaciones);
                                        $deducciones += $montoasiganaciones;
                                    }
                                }
                            } else {
                                $asiganaciones = Asociado::model()->utltimoSueldoPorcentajeAporte($model->idasociado);

                                $capacidadPago[$i]['monto'] = $asiganaciones;
                                $capacidadPago[$i]['nombre_concepto'] = 'Último sueldo';
                                $capacidadPago[$i]['asignacion'] = true;
                                $i++;
                            }

                            foreach (Yii::app()->session['CapacidadPago']['creditos'] as $key => $value) {
                                $capacidadPago[$i]['monto'] = $value;
                                $capacidadPago[$i]['nombre_concepto'] = 'Préstamo "'.$key.'"';
                                $capacidadPago[$i]['asignacion'] = false;
                                $i++;
                                $deducciones += $value;
                            }

                            $detalleCapacidadPago['total_haberes'] = Yii::app()->session['CapacidadPago']['total_haberes'];
                            $detalleCapacidadPago['porcentaje_tipo_credito'] = Yii::app()->session['CapacidadPago']['porcentaje_tipo_credito'];
                            $detalleCapacidadPago['total_monto_prestamo'] = Yii::app()->session['CapacidadPago']['total_monto_prestamo'];
                            $detalleCapacidadPago['total_monto_fiador'] = Yii::app()->session['CapacidadPago']['total_monto_fiador'];
                            $detalleCapacidadPago['total_asiganaciones'] = $asiganaciones;
                            $detalleCapacidadPago['total_deducciones'] = $deducciones;
                            $detalleCapacidadPago['detalle_capacidad_pago'] = $capacidadPago;
                            $model->detalle_capacidad_pago = json_encode($detalleCapacidadPago);

                            $valido = true;
                            $model->fecha_registro = $modelSeguimientoCredito->fecha_registro;
                            $modelSeguimientoCredito->fecha_registro = date('Y-m-d');

                            $monto = str_replace(['.', ','], ['', '.'], $model->monto_credito);


                            $modelDescontarastosAdministrativo = TipoCreditoGastosAdministrativo::model()->count('id_tipo_credito=:id_tipo_credito AND descontar = true', [':id_tipo_credito' => $modelTipoCredito->id]);
                            if ($modelDescontarastosAdministrativo > 0) {
                                $model->monto_credito_depositar = $monto - $model->gastos_administrativo;
                            } else {
                                $model->monto_credito_depositar = $monto;
                            }

                            if ($modelTipoCredito->descontar_grantia_afianzadora) {
                                $model->monto_credito_depositar = $model->monto_credito_depositar - $model->gastos_administrativos_afianzadora;
                            }

                            if ($model->bloqueo_anticipado_prestamos) {
                                $model->monto_bloqueo_anticipado = $modelTipoCredito->calcularBloqueoPrestamos($monto);
                                $model->monto_credito_depositar -= $model->monto_bloqueo_anticipado;
                            }

                            if ($model->save()) {
                                $modelEstatusCredito = new CreditoSeguimiento();
                                $modelEstatusCredito->id_credito = $model->id;
                                $modelEstatusCredito->id_estatus_credito = 1;
                                if ($modelEstatusCredito->save()) {
                                    foreach ($modelTablaAmortizacion as $key => $value) {
                                        $value->idcredito = $model->id;
                                        if (! $value->save()) {
                                            $valido = false;
                                        }
                                    }
                                }
                            }

                            if ($valido) {
                                $transaction->commit();
                                unset(Yii::app()->session['CrearCreditoAdministrador'], Yii::app()->session['CapacidadPago']);

                                if ($recibo_pago != '') {
                                    $model->nombre_recibo_pago = 'recibo_pago_'.$model->id.'_'.$model->idAsociado->cedula.'.'.$recibo_pago->getExtensionName();

                                    $model->save();
                                    $recibo_pago->saveAs(Credito::$ruta.$model->nombre_recibo_pago);
                                }
                                Yii::app()->user->setFlash('success', 'Los datos han sido registrado exitosamente');
                                $this->redirect(['view', 'id' => $model->id]);
                            } else {
                                $transaction->rollBack();
                                Yii::app()->user->setFlash('error', 'Los datos no han sido registrado');
                                $this->redirect(['admin']);
                            }
                        } catch (Exception $e) {
                            $transaction->rollBack();
                            throw new CHttpException(400, $e->getMessage());
                        }
                    } else {
                        Yii::app()->user->setFlash('info', '<div class="alert alert-info">
                                                                        <i class="icon-info-sign"></i>
                                                                            '.$modelResultadoTablaAmortizacion['mensajeError'].'
                                                                    </div>');
                    }
                }
            }

            $modelAsociado = Asociado::model()->findByPk($model->idasociado);
        }
        $modelPermitirCuotasEspeciales = TipoCredito::model()->count('id=:id AND generar_tabla_cuotas_especiales= false', [':id' => (int) $model->id_tipo_credito]);

        $this->render('createAdministrador', [
            'model' => $model,
            'modelSeguimientoCredito' => $modelSeguimientoCredito,
            'modelCapacidadPago' => $modelCapacidadPago,
            'postDatos' => $postDatos,
            'post' => $post,
            'modelPermitirCuotasEspeciales' => $modelPermitirCuotasEspeciales,
        ]);
    }

    public function actionCreateRefinanciamientoAdministrador()
    {
        $model = new Credito('SolicitudAdministradorRefinanciamiento');
        $modelSeguimientoCredito = new CreditoSeguimiento();
        $modelCapacidadPago[] = new TipoCreditoCapacidadPago('Solicitud');
        $post = false;
        $postDatos = false;
        $modelConfiguracionPrestamos = ConfGeneralCredito::model()->find();
        $prestamos_seleccionado = [];

        if (isset($_POST['Credito'])) {
            unset($modelCapacidadPago);
            $modelCapacidadPago = [];
            $valido = true;
            $model->attributes = $_POST['Credito'];
            $modelSeguimientoCredito->attributes = (new Warp($_POST))->get('CreditoSeguimiento', []);
            $postDatos = true;
            $array_prestamos_seleccionado = [];
            $post = true;

            if (isset($_POST['Credito']['id_creditos'])) {
                foreach ($_POST['Credito']['id_creditos'] as $key => $value) {
                    $prestamos_seleccionado[$value] = 1;
                    $model->id_credito_padre .= $value . ',';
                }

                $model->id_credito_padre = trim($model->id_credito_padre, ',');

                $creditos = Yii::app()->db->createCommand("
                    SELECT idcredito,
                           id_tipo_credito, 
                           COALESCE(deuda_actual, 0) + COALESCE(deuda_actual_esp, 0) AS deuda_actual,
                           cuotas.monto_capital,
                           cuotas.monto_interes
                    FROM reporte_creditos
                    left join (
                        select idcredito as id_credito,
                            sum(monto_capital) as monto_capital,
                            sum(monto_interes) as monto_interes
                        from prestamos.credito_tabla_amortizacion
                        where blnborrado is false
                            and id_estatus_cuota is null
                        group by idcredito 
                    ) as cuotas on cuotas.id_credito=idcredito
                    WHERE idcredito in ({$model->id_credito_padre})
                ")->queryAll();

                foreach ($creditos as $credito) {
                    array_push($array_prestamos_seleccionado, [
                        'id_credito' => $credito['idcredito'],
                        'id_tipo_credito' => $credito['id_tipo_credito'],
                        'monto' => $credito['deuda_actual'],
                        'capital_cuotas_no_afectadas' => $credito['monto_capital'],
                        'interes_cuotas_no_afectadas' => $credito['monto_interes'],
                    ]);

                    $model->monto_credito_anterior += $credito['monto_capital'] + $credito['monto_interes'];
                }
            } else {
                $modelCantidadCreditos = ReporteCreditos::model()->count('cedula=:cedula AND id_estatus_credito=4', [
                    'cedula' => $model->cedula
                ]);

                if ($modelCantidadCreditos > 0) {
                    Yii::app()->user->setFlash('error', 'Debe seleccionar al menos un préstamos para registrar la solicitud');
                }
            }

            if ($model->monto_credito == 0 && $model->refinanciado == 2) {
                $model->monto_credito = number_format($model->monto_credito_anterior, 2, ',', '.');
                $model->reestructuracion_tabla = true;
            }

            if (isset($_POST['TipoCreditoCapacidadPago'])) {
                $post = true;
                foreach ($_POST['TipoCreditoCapacidadPago'] as $keyCuotas => $valueCuotas) {
                    $item = new TipoCreditoCapacidadPago('Solicitud');
                    $item->attributes = $valueCuotas;
                    $modelCreditoCapacidadPago = TipoCreditoCapacidadPago::model()->findByPk($keyCuotas);
                    $item->nombre_concepto = $modelCreditoCapacidadPago->idCapacidadPago->nombre_concepto;
                    $item->asignacion = $modelCreditoCapacidadPago->idCapacidadPago->asignacion ? 1 : 0;
                    $valido = $item->validate() && $valido;
                    $modelCapacidadPago[$keyCuotas] = $item;
                    unset($item);
                }
            }
            $recibo_pago = CUploadedFile::getInstance($model, 'nombre_recibo_pago');

            if ($recibo_pago) {
                $model->nombre_recibo_pago = 'recibo_pago';
            }

            if ($model->validate()) {
                if (isset(Yii::app()->session['CrearCreditoAdministrador'])) {
                    $monto = str_replace('.', '', $model->monto_credito);
                    $monto = str_replace(',', '.', $monto);
                    $modelResultadoTablaAmortizacion = Yii::app()->session['CrearCreditoAdministrador'];
                    if ($modelResultadoTablaAmortizacion['error'] == 0) {
                        $modelTablaAmortizacion = $modelResultadoTablaAmortizacion['tablaAmortizacion'];
                        $modelTipoCredito = TipoCredito::model()->findByPk($model->id_tipo_credito);
                        $interesGenerado = 0;

                        $transaction = Yii::app()->db->beginTransaction();
                        try {
                            $modelTipoCredito = TipoCredito::model()->findByPk($model->id_tipo_credito);
                            $model->taza_interes = number_format($modelTipoCredito->taza_interes, 3, ',', '.');
                            $model->cuota_pagar = $modelTablaAmortizacion[0]->monto_cuota;
                            $model->gastos_administrativo = $modelResultadoTablaAmortizacion['gastosAdministrativo'];
                            $model->gastos_administrativos_afianzadora = $modelResultadoTablaAmortizacion['gastosAdministrativoAfianzador'];
                            $model->gastos_administrativos_afianzadora_caja = $modelResultadoTablaAmortizacion['descontarGastosAdministrativoAfianzadorCaja'];
                            $model->id_afianzadora = $modelResultadoTablaAmortizacion['idAfianzadora'];
                            $model->monto_haberes_comprometido = (float) $modelResultadoTablaAmortizacion['monto_haberes_socio'];

                            $modelAsociado = Asociado::model()->findByPk($model->idasociado);
                            $model->id_tipo_nomina = $modelAsociado->getIdTipoNomina();

                            $detalleCapacidadPago = [];
                            $asiganaciones = 0;
                            $deducciones = 0;
                            $i = count($modelCapacidadPago) + 1;
                            if (count($modelCapacidadPago) > 0) {
                                $capacidadPago = [];
                                foreach ($modelCapacidadPago as $keyCE => $valueCE) {
                                    $capacidadPago[$keyCE + 1]['monto'] = $valueCE->monto;
                                    $modelCreditoCapacidadPago = TipoCreditoCapacidadPago::model()->findByPk($keyCE);
                                    $capacidadPago[$keyCE + 1]['nombre_concepto'] = $modelCreditoCapacidadPago->idCapacidadPago->nombre_concepto;
                                    $capacidadPago[$keyCE + 1]['asignacion'] = $modelCreditoCapacidadPago->idCapacidadPago->asignacion;

                                    if ($valueCE->asignacion) {
                                        $montoasiganaciones = str_replace('.', '', $valueCE->monto);
                                        $montoasiganaciones = str_replace(',', '.', $montoasiganaciones);
                                        $asiganaciones += $montoasiganaciones;
                                    } else {
                                        $montoasiganaciones = str_replace('.', '', $valueCE->monto);
                                        $montoasiganaciones = str_replace(',', '.', $montoasiganaciones);
                                        $deducciones += $montoasiganaciones;
                                    }
                                }
                            } else {
                                $i = 1;
                                $asiganaciones = Asociado::model()->utltimoSueldoPorcentajeAporte($model->idasociado);

                                $capacidadPago[$i]['monto'] = $asiganaciones;
                                $capacidadPago[$i]['nombre_concepto'] = 'Último sueldo';
                                $capacidadPago[$i]['asignacion'] = true;
                                $i++;
                            }

                            foreach (Yii::app()->session['CapacidadPago']['creditos'] as $key => $value) {
                                $capacidadPago[$i]['monto'] = $value;
                                $capacidadPago[$i]['nombre_concepto'] = 'Préstamo "' . $key . '"';
                                $capacidadPago[$i]['asignacion'] = false;
                                $i++;
                                $deducciones += $value;
                            }

                            $detalleCapacidadPago['total_haberes'] = Yii::app()->session['CapacidadPago']['total_haberes'];
                            $detalleCapacidadPago['porcentaje_tipo_credito'] = Yii::app()->session['CapacidadPago']['porcentaje_tipo_credito'];
                            $detalleCapacidadPago['total_monto_prestamo'] = Yii::app()->session['CapacidadPago']['total_monto_prestamo'];
                            $detalleCapacidadPago['total_monto_fiador'] = Yii::app()->session['CapacidadPago']['total_monto_fiador'];
                            $detalleCapacidadPago['total_asiganaciones'] = $asiganaciones;
                            $detalleCapacidadPago['total_deducciones'] = $deducciones;
                            $detalleCapacidadPago['detalle_capacidad_pago'] = $capacidadPago;
                            $model->detalle_capacidad_pago = json_encode($detalleCapacidadPago);

                            $valido = true;
                            $model->fecha_registro = $modelSeguimientoCredito->fecha_registro;
                            $modelSeguimientoCredito->fecha_registro = date('Y-m-d');
                            $gastosAdm = $gastosAdmAfinazadora = $gastosAdmAfinazadoraCaja = 0;

                            $modelDescontarastosAdministrativo = TipoCreditoGastosAdministrativo::model()->count('id_tipo_credito=:id_tipo_credito AND descontar = true', [
                                'id_tipo_credito' => $modelTipoCredito->id
                            ]);
                            if ($modelDescontarastosAdministrativo > 0) {
                                $gastosAdm = $model->gastos_administrativo;
                            }

                            if ($modelTipoCredito->descontar_grantia_afianzadora) {
                                $gastosAdmAfinazadora = $model->gastos_administrativos_afianzadora;
                            }

                            if ($model->gastos_administrativos_afianzadora_caja > 0) {
                                $gastosAdmAfinazadoraCaja = $model->gastos_administrativos_afianzadora_caja;
                            }

                            $monto = str_replace(['.', ','], ['', '.'], $model->monto_credito);
                            if ($model->refinanciado == 1) {
                                $model->monto_credito_depositar = $monto - ($model->monto_credito_anterior + $gastosAdm + $gastosAdmAfinazadora + $gastosAdmAfinazadoraCaja);
                            } else {
                                if (!$model->reestructuracion_tabla) {
                                    $model->monto_credito_depositar = $monto - ($gastosAdm + $gastosAdmAfinazadora + $gastosAdmAfinazadoraCaja);
                                } else {
                                    $model->monto_credito_depositar = 0;
                                }
                            }

                            $model->prestamos_seleccionados = json_encode($array_prestamos_seleccionado);

                            if ($model->save()) {
                                foreach ($array_prestamos_seleccionado as $valuePs) {
                                    CreditoSeguimiento::model()->updateAll(['actual' => false], 'id_credito=:id', [
                                        'id' => $valuePs['id_credito']
                                    ]);
                                    $modelEstatusCreditoAnterio = new CreditoSeguimiento();
                                    $modelEstatusCreditoAnterio->id_credito = $valuePs['id_credito'];
                                    $modelEstatusCreditoAnterio->id_estatus_credito = ($model->refinanciado == 1) ? 7 : 9;
                                    $modelEstatusCreditoAnterio->save();
                                }

                                $modelEstatusCredito = new CreditoSeguimiento();
                                $modelEstatusCredito->id_credito = $model->id;
                                $modelEstatusCredito->id_estatus_credito = ($model->refinanciado == 1) ? 6 : 8;
                                if ($modelEstatusCredito->save()) {
                                    foreach ($modelTablaAmortizacion as $keyTA => $valueTA) {
                                        $valueTA->idcredito = $model->id;
                                        if (!$valueTA->save()) {
                                            $valido = false;
                                        }
                                    }
                                }

                                // Gestionar cuotas de prestamos
                                $model->gestionarCuotasNoAfectadas();
                                $model->gestionarCuotasAfectadas();
                            }

                            if ($valido) {
                                $transaction->commit();
                                unset(Yii::app()->session['CrearCreditoAdministrador'], Yii::app()->session['CapacidadPago']);
                                if ($recibo_pago != '') {
                                    $model->nombre_recibo_pago = 'recibo_pago_' . $model->id . '_' . $model->idAsociado->cedula . '.' . $recibo_pago->getExtensionName();

                                    $model->save();
                                    $recibo_pago->saveAs(Credito::$ruta . $model->nombre_recibo_pago);
                                }
                                Yii::app()->user->setFlash('success', 'Los datos han sido registrado exitosamente');
                                $this->redirect(['view', 'id' => $model->id]);
                            } else {
                                $transaction->rollBack();
                                Yii::app()->user->setFlash('error', 'Los datos no han sido registrado');
                                $this->redirect(['admin']);
                            }
                        } catch (Exception $e) {
                            $transaction->rollBack();
                            throw new CHttpException(400, $e->getMessage());
                        }
                    } else {
                        Yii::app()->user->setFlash(
                            'info',
                            '<div class="alert alert-info">
                                <i class="icon-info-sign"></i>' .
                                $modelResultadoTablaAmortizacion['mensajeError'] .
                                '
                            </div>'
                        );
                    }
                } else {
                    Yii::app()->user->setFlash(
                        'info',
                        '<div class="alert alert-info">
                            <i class="icon-info-sign"></i>
                                Debe visualizar la tabla de amortizacion
                        </div>'
                    );
                }
            }

            $modelAsociado = Asociado::model()->findByPk($model->idasociado);
        }

        $modelPermitirCuotasEspeciales = TipoCredito::model()->count('id=:id AND generar_tabla_cuotas_especiales= false', [
            'id' => $model->id_tipo_credito
        ]);

        $this->render('createRefinanciamientoAdministrador', [
            'model' => $model,
            'modelSeguimientoCredito' => $modelSeguimientoCredito,
            'modelCapacidadPago' => $modelCapacidadPago,
            'postDatos' => $postDatos,
            'post' => $post,
            'modelPermitirCuotasEspeciales' => $modelPermitirCuotasEspeciales,
            'modelConfiguracionPrestamos' => $modelConfiguracionPrestamos,
            'prestamos_seleccionado' => $prestamos_seleccionado
        ]);
    }

        public function actionCreateRefinanciamiento()
    {
        $modelAsociado = Asociado::model()->find('cedula=:cedula AND id_estatus=1',
         array(':cedula' => CrugeUserI::model()->findByPk(Yii::app()->user->id)->cedula));
         if(!$modelAsociado){
             Yii::app()->user->setFlash('error','Lo sentimos, no está habilitado para realizar solicitud de préstamos ');
             $this->redirect( array('admin'));
        }
        $model=new Credito('SolicitudRefinanciamiento');

        $modelCapacidadPago[] = new TipoCreditoCapacidadPago('Solicitud');
        $post =  false;
        $postDatos =  false;
        $model->cuenta = $modelAsociado->cuenta_bancaria;

        $model->idasociado = $modelAsociado->idasociado;

        $modelConfiguracionPrestamos = ConfGeneralCredito::model()->find();

        $prestamos_seleccionado = [];

                // $modelReporteCredito=new ReporteCreditos('search');
        // Uncomment the following line if AJAX validation is needed
        // $this->performAjaxValidation($model);

        // $modelReporteCredito->unsetAttributes();  // clear any default values
        // if(isset($_GET['ReporteCreditos']))
        //  $modelReporteCredito->attributes=$_GET['ReporteCreditos'];

                 $sueldo = $modelAsociado->utltimoSueldoPorcentajeAporte($modelAsociado->idasociado);
                $modelPorcentajeAporte = PorcentajeDescuentoAsociadoPatrono::model()->find('idasociado=:idasociado AND actual = true',array(':idasociado'=>$modelAsociado->idasociado));
                if($modelPorcentajeAporte)
                    $porcentaje = $modelPorcentajeAporte->idPorcentajeAsociado->descripcion;
                else
                    $porcentaje = 10;

                if (isset($_POST['Credito'])) {

                    unset($modelCapacidadPago);$modelCapacidadPago=array();
                    $valido = true;
                    $model->attributes = $_POST['Credito'];
                    $model->idasociado = $modelAsociado->idasociado;
//                    $modelSeguimientoCredito->attributes = $_POST['CreditoSeguimiento'];
                     $postDatos =  true;

                    $prestamos_seleccionado = [];

                    $array_prestamos_seleccionado = [];

                    if(isset($_POST['Credito']['id_creditos'])){

                        foreach ($_POST['Credito']['id_creditos'] as $key => $value) {

                            $prestamos_seleccionado[$value] = 1;

                            $model->id_credito_padre .=$value.',';

                        }

                        $model->id_credito_padre = trim($model->id_credito_padre,',');

                         $creditos = Yii::app()->db->createCommand(
                                      'SELECT t.idcredito, nombre_titulo AS categoria, plazo_prestamo,id_tipo_credito, prestamo, fecha_registro, cuotas_pagadas,id_tipo_nomina,
                                              COALESCE(deuda_actual, 0::numeric) + COALESCE(deuda_actual_esp, 0::numeric) AS deuda_actual , nombre_estatus_credito
                                          FROM "reporte_creditos" "t"
                                          WHERE  idcredito in ('.trim($model->id_credito_padre,',').')')->queryAll();;/// $this->VistaHaberesSocio($modelAsociado->idasociado, $vista=1);


                        foreach ($creditos as $key => $value) {

                           array_push($array_prestamos_seleccionado,[
                                'id_credito'=>$value['idcredito'],
                                'id_tipo_credito'=>$value['id_tipo_credito'],
                                'monto'=>$value['deuda_actual'],
                           ]);

                            $model->monto_credito_anterior += $value['deuda_actual'];

                        }

                    }
                    else{

                        $modelCantidadCreditos = ReporteCreditos::model()->count('idasociado=:idasociado AND id_estatus_credito=4',[':idasociado'=>(int)$model->idasociado]);

                        if($modelCantidadCreditos > 0){

                            Yii::app()->user->setFlash('error','Debe seleccionar al menos un préstamos para registrar la solicitud');

                        }
                    }
                     $post =  true;
                    if ($model->validate()) {

                        if(isset(Yii::app()->session['CrearCreditoAdministrador'])){
                            $monto = str_replace('.', '', $model->monto_credito);
                            $monto=str_replace(',', '.', $monto);
                            $modelResultadoTablaAmortizacion = Yii::app()->session['CrearCreditoAdministrador'];
                            if($modelResultadoTablaAmortizacion['error']==0){

                                $modelTablaAmortizacion = $modelResultadoTablaAmortizacion['tablaAmortizacion'];

                                $modelTipoCredito = TipoCredito::model()->findByPk($model->id_tipo_credito);
                                $interesGenerado =0;

                                $transaction = Yii::app()->db->beginTransaction();
                                try {
                                            $modelTipoCredito = TipoCredito::model()->findByPk($model->id_tipo_credito);
                                            $model->id_tipo_cobro =  $modelTipoCredito->id_tipo_cobro;
                                            $model->taza_interes = number_format($modelTipoCredito->taza_interes, 3,',', '.');
                                            $model->cuota_pagar = $modelTablaAmortizacion[0]->monto_cuota;
                                            $model->gastos_administrativo = $modelResultadoTablaAmortizacion['gastosAdministrativo'];
                                            $model->gastos_administrativos_afianzadora = $modelResultadoTablaAmortizacion['gastosAdministrativoAfianzador'];
                                            $model->gastos_administrativos_afianzadora_caja = $modelResultadoTablaAmortizacion['descontarGastosAdministrativoAfianzadorCaja'];
                                            $model->id_afianzadora = $modelResultadoTablaAmortizacion['idAfianzadora'];
                                            $model->monto_haberes_comprometido = (float)$modelResultadoTablaAmortizacion['monto_haberes_socio'];

                                            // $modelAsociado = Asociado::model()->findByPk($model->idasociado);
                                            $model->id_tipo_nomina = $modelAsociado->getIdTipoNomina();

                                            $detalleCapacidadPago = array();
                                            $asiganaciones=0;
                                            $deducciones = 0;
                                                $asiganaciones = Asociado::model()->utltimoSueldoPorcentajeAporte($model->idasociado);
                                                 $i= 1;
                                                $capacidadPago[$i]['monto'] =$asiganaciones;
                                                $capacidadPago[$i]['nombre_concepto'] = 'Último sueldo';
                                                $capacidadPago[$i]['asignacion'] =TRUE;
                                                $i++;

                                            foreach (Yii::app()->session['CapacidadPago']['creditos'] as $key => $value) {
                                                $capacidadPago[$i]['monto'] =$value;
                                                $capacidadPago[$i]['nombre_concepto'] ='Préstamo "'.$key.'"';
                                                $capacidadPago[$i]['asignacion'] =false;
                                                $i++;
                                                $deducciones += $value;
                                            }

                                            $detalleCapacidadPago['total_haberes']  = Yii::app()->session['CapacidadPago']['total_haberes'];
                                            $detalleCapacidadPago['porcentaje_tipo_credito']  = Yii::app()->session['CapacidadPago']['porcentaje_tipo_credito'];
                                            $detalleCapacidadPago['total_monto_prestamo']  = Yii::app()->session['CapacidadPago']['total_monto_prestamo'];
                                            $detalleCapacidadPago['total_monto_fiador']  = Yii::app()->session['CapacidadPago']['total_monto_fiador'];
                                            $detalleCapacidadPago['total_asiganaciones'] = $asiganaciones;
                                            $detalleCapacidadPago['total_deducciones'] = $deducciones;
                                            $detalleCapacidadPago['detalle_capacidad_pago'] =$capacidadPago;
                                            $model->detalle_capacidad_pago = json_encode($detalleCapacidadPago);


                                            $valido= TRUE;
                                            $model->fecha_registro = date('Y-m-d');
                                            $modelSeguimientoCredito = new CreditoSeguimiento();
                                            $modelSeguimientoCredito->fecha_registro = $model->fecha_registro;
                                            //echo "<pre>";print_r($model);exit;
                                            // $model->monto_credito_anterior= ReporteCreditos::model()->find('idcredito=:idcredito',array(':idcredito'=>$model->id_credito_padre))->deuda_actual + ReporteCreditos::model()->find('idcredito=:idcredito',array(':idcredito'=>$model->id_credito_padre))->deuda_actual_esp;
                                            $gastosAdm =$gastosAdmAfinazadora =$gastosAdmAfinazadoraCaja =0;

                                            $modelDescontarastosAdministrativo = TipoCreditoGastosAdministrativo::model()->count('id_tipo_credito=:id_tipo_credito AND descontar = true',[':id_tipo_credito'=>$modelTipoCredito->id]);
                                            if($modelDescontarastosAdministrativo> 0){
                                                $gastosAdm = $model->gastos_administrativo;
                                            }

                                            if($modelTipoCredito->descontar_grantia_afianzadora){
                                                 $gastosAdmAfinazadora = $model->gastos_administrativos_afianzadora;
                                            }

                                            if($model->gastos_administrativos_afianzadora_caja>0){
                                                $gastosAdmAfinazadoraCaja =$model->gastos_administrativos_afianzadora_caja;
                                            }

                                            // $model->monto_credito_depositar = $model ->monto_credito_anterior - $model->monto_credito;
                                            //$model->monto_credito += $model ->monto_credito_anterior;
                                            $monto = str_replace(['.',','], ['','.'], $model->monto_credito);

                                            if($model->refinanciado ==1)
                                                $model->monto_credito_depositar = $monto - ($model->monto_credito_anterior + $gastosAdm + $gastosAdmAfinazadora + $gastosAdmAfinazadoraCaja);
                                            else{

                                                $model->monto_credito_depositar = $monto- ($gastosAdm + $gastosAdmAfinazadora + $gastosAdmAfinazadoraCaja);
                                            }

                                            $model->prestamos_seleccionados = json_encode($array_prestamos_seleccionado);

                                            if($model->save()){

                                                foreach ($array_prestamos_seleccionado as $keyPS => $valuePs) {

                                                    CreditoSeguimiento::model()->updateAll(array('actual'=>false),'id_credito=:id',array(':id'=>$valuePs['id_credito']));
                                                    $modelEstatusCreditoAnterio = new CreditoSeguimiento();
                                                    $modelEstatusCreditoAnterio->id_credito = $valuePs['id_credito'];
                                                    $modelEstatusCreditoAnterio->id_estatus_credito = ($model->refinanciado==1)?7:9;
                                                    $modelEstatusCreditoAnterio->save();

                                                }

                                                $modelEstatusCredito = new CreditoSeguimiento();
                                                $modelEstatusCredito->id_credito = $model->id;
                                                $modelEstatusCredito->id_estatus_credito = ($model->refinanciado==1)?6:8;
                                                if($modelEstatusCredito->save()){
                                                    foreach($modelTablaAmortizacion as $key =>$value){
                                                        $value->idcredito = $model->id;
                                                        if(!$value->save()){
                                                            $valido = false;
                                                        }
                                                    }
                                                }
                                            }

                                            if($valido){
                                                $transaction->commit();
                                                unset(Yii::app()->session['CrearCreditoAdministrador']);
                                                unset(Yii::app()->session['CapacidadPago']);
//                                                if($recibo_pago!=''){
//                                                    $model->nombre_recibo_pago='recibo_pago_'.$model->id.'_'.$model->idAsociado->cedula.'.'.$recibo_pago->getExtensionName();
//
//                                                    $model->save();
//                                                    $recibo_pago->saveAs(Credito::$ruta.$model->nombre_recibo_pago);
//
//                                                }
                                                Yii::app()->user->setFlash('success', 'Los datos han sido registrado exitosamente');
                                                $this->redirect(array('view','id'=>$model->id));
                                            }
                                            else{
                                                $transaction->rollBack();
                                                Yii::app()->user->setFlash('error', 'Los datos no han sido registrado');
                                                $this->redirect(array('admin'));
                                            }

                                        }
                                        catch (Exception $e){
                                                throw new CHttpException(400,$e->getMessage());
                                                $transaction->rollBack();
                                        }

                            }
                            else{
                                Yii::app()->user->setFlash('info', '<div class="alert alert-info">
                                                                        <i class="icon-info-sign"></i>
                                                                            '.$modelResultadoTablaAmortizacion['mensajeError'].'
                                                                    </div>');
                            }
                        }
                        else{
                            Yii::app()->user->setFlash('info', '<div class="alert alert-info">
                                                                        <i class="icon-info-sign"></i>
                                                                            Debe visualizar la tabla de amortizacion
                                                                    </div>');
                        }
                    }
                    // $modelAsociado = Asociado::model()->findByPk($model->idasociado);
                    // echo "<pre>";print_r($model->getErrors());exit;
                }
                $modelPermitirCuotasEspeciales = TipoCredito::model()->count('id=:id AND generar_tabla_cuotas_especiales= false',array(':id'=>(int)$model->id_tipo_credito));


        $this->render('createRefinanciamiento',array(
            'model'=>$model,
            'modelAsociado'=>$modelAsociado,
            'modelCapacidadPago'=>$modelCapacidadPago,
            'postDatos'=>$postDatos,
            'sueldo'=>$sueldo,
            'porcentaje'=>$porcentaje,
            'post'=>$post,
            'modelPermitirCuotasEspeciales'=>$modelPermitirCuotasEspeciales,
            'modelConfiguracionPrestamos'=>$modelConfiguracionPrestamos,
            'prestamos_seleccionado'=>$prestamos_seleccionado,

            // 'modelReporteCredito'=>$modelReporteCredito,
        ));
    }


    public function actionReestructuracionCredito($id)
	{
        $model = Credito::model()->findByPk($id);

        $sql = ConfReestructuracionTablaCredito::getCuotasHabilitadasReestructuracion();

        $monto_credito = $model->monto_credito;

        $fecha_primer_descuento = $model->fecha_primer_descuento;


        $modelTabla = CreditoTablaAmortizacion::model()->find(array('select'=>'sum(monto_capital) as monto_capital, count(*) AS numero_cuota',
                                                                                 'condition'=>'idcredito=:idcredito AND blnborrado = false '.$sql,
                                                                                 'params'=>array(':idcredito'=>$model->id)));

        $model->monto_credito = $modelTabla->monto_capital;


        $post =  false;
        $postDatos =  false;

        $modelConfiguracionPrestamos = ConfGeneralCredito::model()->find();

        $seguimiento = [
                        'id_usuario' => Yii::app()->user->id,
                        'fecha_registro' =>date('d-m-Y H:m:s'),
                        'saldo_deudor'=> $model->monto_credito,
                        'cuota_pagar'=> $model->cuota_pagar,
                        'fecha_primer_descuento'=> $model->fecha_primer_descuento,
                        'id_tipo_nomina'=> $model->id_tipo_nomina,
                        'id_tipo_cobro'=> $model->id_tipo_cobro,
                        'numero_cuota'=> $modelTabla->numero_cuota,

                    ];

        if (isset($_POST['Credito'])) {

            $valido = true;

            $model->attributes = $_POST['Credito'];
            $model->id_tipo_nomina = $_POST['Credito']['id_tipo_nomina'];

            $postDatos =  true;

            $post =  true;

            if ($model->validate()) {

                if(isset(Yii::app()->session['CrearCreditoAdministrador'])){

                    $modelResultadoTablaAmortizacion = Yii::app()->session['CrearCreditoAdministrador'];

                    if($modelResultadoTablaAmortizacion['error']==0){

                        $modelTablaAmortizacion = $modelResultadoTablaAmortizacion['tablaAmortizacion'];

                        $transaction = Yii::app()->db->beginTransaction();
                        try {

                            $model->taza_interes =  number_format($model->taza_interes, 3,',', '.');

                            $model->cuota_pagar = $modelTablaAmortizacion[0]->monto_cuota;

                            $model->monto_credito = number_format($monto_credito, 2, ',','.');


                            $seguimiento_reestructuracion = [];

                            if( $model->reestructuracion_seguimiento !=""){

                                $seguimiento_reestructuracion = json_decode($model->reestructuracion_seguimiento, true);
                            }



                            array_push( $seguimiento_reestructuracion, $seguimiento );

                            $model->reestructuracion_seguimiento = json_encode($seguimiento_reestructuracion);


                            if($model->save()){

                                CreditoTablaAmortizacion::model()->updateAll(['blnborrado'=>true,'id_usuario'=>Yii::app()->user->id],'idcredito=:id '.$sql,[':id'=>$model->id]);


                                foreach($modelTablaAmortizacion as $key =>$value){

                                    $value->idcredito = $model->id;

                                    $cuotaLibre = false;

                                    $numeroCuota = $value->numero_cuota;

                                    do{

                                        $modelNumero = CreditoTablaAmortizacion::model()->find('idcredito=:idcredito AND numero_cuota=:numero_cuota AND blnborrado = false AND tipo_cuota=:tipo_cuota',
                                                                                                [':idcredito'=>$value->idcredito,':numero_cuota'=> $numeroCuota ,':tipo_cuota'=> $value->tipo_cuota]);

                                        if(!$modelNumero){

                                            $value->numero_cuota = $numeroCuota;

                                            $cuotaLibre = true;

                                        }

                                        $numeroCuota++;

                                    } while (!$cuotaLibre);

                                    if(!$value->save()){

                                        $valido = false;
                                    }
                                    else{

                                        if($key == 0)

                                            $primeraCuota = $value->id;
                                    }

                                }

                                if($valido){

                                    Credito::model()->UpdateAll(['fecha_primer_descuento'=>$model->fecha_primer_descuento],'id=:idcredito',[':idcredito'=>$model->id]);


                                    $transaction->commit();

                                    unset(Yii::app()->session['CrearCreditoAdministrador']);

                                    Yii::app()->user->setFlash('success', 'Los datos han sido registrado exitosamente');

                                    $this->redirect(array('view','id'=>$model->id));
                                }
                                else{

                                    $transaction->rollBack();

                                    Yii::app()->user->setFlash('error', 'Los datos no han sido registrado');

                                    $this->redirect(array('admin'));
                                }

                            }



                        }
                        catch (Exception $e){

                            Yii::app()->user->setFlash('error', 'Los datos no han sido registrado');

                            $transaction->rollBack();
                        }

                    }
                    else{
                        Yii::app()->user->setFlash('info', '<div class="alert alert-info">
                                                                <i class="icon-info-sign"></i>
                                                                    '.$modelResultadoTablaAmortizacion['mensajeError'].'
                                                            </div>');
                    }
                }
                else{
                    Yii::app()->user->setFlash('info', '<div class="alert alert-info">
                                                                <i class="icon-info-sign"></i>
                                                                    Debe visualizar la tabla de amortizacion
                                                            </div>');
                }
            }
            $model->monto_credito = str_replace('.', '', str_replace(',', '.', $model->monto_credito));
        }
        $modelPermitirCuotasEspeciales = TipoCredito::model()->count('id=:id AND generar_tabla_cuotas_especiales= false',array(':id'=>(int)$model->id_tipo_credito));


        $this->render('reestructuracionCredito',array(
            'model'=>$model,
            'postDatos'=>$postDatos,
            'post'=>$post,
            'modelPermitirCuotasEspeciales'=>$modelPermitirCuotasEspeciales,
            'modelConfiguracionPrestamos'=>$modelConfiguracionPrestamos,
            // 'modelReporteCredito'=>$modelReporteCredito,
        ));
    }

	/**
	 * Deletes a particular model.
	 * If deletion is successful, the browser will be redirected to the 'admin' page.
	 * @param integer $id the ID of the model to be deleted
	 */
	public function actionDelete($id)
	{
		if(Yii::app()->request->isPostRequest)
		{
			// we only allow deletion via POST request
			$this->loadModel($id)->delete();

			// if AJAX request (triggered by deletion via admin grid view), we should not redirect the browser
			if(!isset($_GET['ajax']))
				$this->redirect(isset($_POST['returnUrl']) ? $_POST['returnUrl'] : array('admin'));
		}
		else
			throw new CHttpException(400,'Invalid request. Please do not repeat this request again.');
	}

	/**
	 * Lists all models.
	 */
	public function actionIndex()
	{
		$dataProvider=new CActiveDataProvider('Credito');
		$this->render('index',array(
			'dataProvider'=>$dataProvider,
		));
	}

	/**
	 * Manages all models.
	 */
	public function actionAdmin()
	{
		$model=new Credito('search');
		$model->unsetAttributes();  // clear any default values
		if(isset($_GET['Credito']))
			$model->attributes=$_GET['Credito'];

		$this->render('admin',array(
			'model'=>$model,
		));
	}

	/**
	 * Returns the data model based on the primary key given in the GET variable.
	 * If the data model is not found, an HTTP exception will be raised.
	 * @param integer the ID of the model to be loaded
	 */
	public function loadModel($id)
	{
		$model=Credito::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']==='credito-form')
		{
			echo CActiveForm::validate($model);
			Yii::app()->end();
		}
	}

    public function actionAprobar($id)
    {
        $model = $this->loadModel($id);

        $modelSeguimiento = CreditoSeguimiento::model()->find('id_credito=:id and actual= true', [':id' => $id]);

        // if ($modelSeguimiento->id_estatus_credito != 1 && $modelSeguimiento->id_estatus_credito != 6 && $modelSeguimiento->id_estatus_credito != 8) {
        if (! in_array($modelSeguimiento->id_estatus_credito, [1, 6, 8])) {
            $this->redirect(['view', 'id' => $id]);
        }

        $modelCreditoSeleccionado = [];

        if ($model->prestamos_seleccionados != '') {
            $id_creditos = '';
            foreach (json_decode($model->prestamos_seleccionados, true) as $key => $value) {
                $id_creditos .= $value['id_credito'].',';
            }

            $modelCreditoSeleccionado = Yii::app()
                ->db->createCommand(
                    'SELECT t.idcredito, nombre_titulo AS categoria, plazo_prestamo,id_tipo_credito, prestamo, fecha_registro, cuotas_pagadas,id_tipo_nomina,
                                                COALESCE(deuda_actual, 0::numeric) + COALESCE(deuda_actual_esp, 0::numeric) AS deuda_actual , nombre_estatus_credito
                                            FROM "reporte_creditos" "t"
                                            WHERE  idcredito in ('.
                        trim($id_creditos, ',').
                        ')'
                )
                ->queryAll();
        }

        $modelCreditoSeguimiento = new CreditoSeguimiento();
        $modelCreditoSeguimiento->id_credito = $id;
        $modelAsociado = $model->idAsociado;
        $modelHaberesSocio = ReporteHaberes::model()->find('idasociado=:idasociado', [
            ':idasociado' => $modelAsociado->idasociado,
        ]);
        $modelMontoTotalFiador = ReporteCreditos::model()->getTotalMontoFiador($modelAsociado->idasociado);

        $porcentaje = 80;
        $modelMontoTotalFiador = ReporteCreditos::model()->getTotalMontoFiador($model->idasociado);
        $model->habereDisponibles =
            $modelHaberesSocio->total_haberes * ($porcentaje / 100) -
            ($modelHaberesSocio->deuda_actual + $modelMontoTotalFiador);
        $model->idasociado = $modelAsociado->idasociado;

        if (isset($_POST['Credito'])) {
            $valido = true;
            $model->attributes = $_POST['Credito'];
            $modelCreditoSeguimiento->attributes = $_POST['CreditoSeguimiento'];
            $empresa = Empresa::model()->find();

            //aprobado
            if (isset($_POST['yt0'])) {
                $modelCreditoSeguimiento->id_estatus_credito = 2;
                $model->scenario = 'aprobacionSolicitud';
                $text_correo =
                    'Saludos sr(a). '.
                    $model->idAsociado->nombre.
                    ' '.
                    $model->idAsociado->apellidos.
                    ',<br /><br /> '.
                    'Por medio del presente se le informa que su solicitud de Prestamo de fecha'.
                    $model->fecha_solicitud.
                    ', fue '.
                    'APROBADA. <br /><br /> El descuento de la primera cuota del credito se realizara el día '.
                    $model->fecha_primer_descuento.
                    '. <br /><br /> '.
                    'El abono de su solicitud se realizara a su Cuenta Bancaria Num. '.
                    $model->cuenta.
                    ' <br /><br />'.
                    'Atentamente, <br /><br /> <strong>'.
                    $empresa->email_emp.
                    '.</strong>';
                $asunto = 'Aprobada de Solicitud de Prestamo - '.$empresa->email_emp;

                $texto =
                    'La solicitud de prestamo Nº #'.
                    $model->id.
                    ' ha sido APROBADO. Se ha enviado un correo al asociado para notificarlo';
            }
            if (isset($_POST['yt1'])) {
                $modelCreditoSeguimiento->id_estatus_credito =
                    $model->refinanciado == 0 ? 3 : ($model->refinanciado == 1 ? 10 : 11);
                $modelCreditoSeguimiento->scenario = 'denegacionSolicitud';

                $text_correo =
                    'Saludos sr(a). '.
                    $model->idAsociado->nombre.
                    ' '.
                    $model->idAsociado->apellidos.
                    ',<br /><br /> '.
                    'Por medio del presente se le informa que su solicitud de Prestamo de fecha '.
                    $model->fecha_solicitud.
                    ' , '.
                    'fue DENEGADA. <br /><br /> Debido a: <i>"'.
                    $modelCreditoSeguimiento->observacion.
                    '"</i>  <br /><br /> Atentamente, <br /><br /> '.
                    '<strong>'.
                    $empresa->razon_social.
                    '.</strong>';
                $asunto = 'Rechazo de Solicitud de Prestamo - '.$empresa->email_emp;
            }

            $model->monto_credito = number_format($model->monto_credito, 2, ',', '.');
            $model->taza_interes = number_format($model->taza_interes, 3, ',', '.');

            if ($model->validate() && $modelCreditoSeguimiento->validate()) {
                $transaction = Yii::app()->db->beginTransaction();
                try {
                    if ($model->hasBloqueoAnticipado()) {
                        Yii::import('application.modules.ajustehaberes.models.*');
                        $model->ajuste_haberes = AjusteHaberes::generar(
                            [
                                'idasociado' => $model->idasociado,
                                'id_tipo_ajuste' => 2,
                                'id_concepto_ajuste' => AjusteHaberConcepto::proceso(1),
                                'id_tipo_movimiento' => 1,
                                'observacion' => 'Bloqueo automático de préstamos.',
                                'numero_operacion' => $model->id,
                                'fecha_operacion' => $model->fecha_primer_descuento,
                                'monto_asociado' => Yii::app()->format->number($model->monto_bloqueo_anticipado),
                            ],
                            2,
                            true
                        );
                    }

                    if ($model->save()) {
                        if ($model->refinanciado > 0 && $model->prestamos_seleccionados != '') {
                            foreach (json_decode($model->prestamos_seleccionados, true) as $keyPs => $valuePs) {
                                CreditoSeguimiento::model()->updateAll(['actual' => false], 'id_credito=:id', [
                                    ':id' => $valuePs['id_credito'],
                                ]);

                                $modelCreditoAnterior = new CreditoSeguimiento();

                                $modelCreditoAnterior->id_credito = $valuePs['id_credito'];

                                if (isset($_POST['yt0'])) {
                                    $modelCreditoAnterior->id_estatus_credito = $model->refinanciado == 1 ? 7 : 9;
                                } else {
                                    $modelCreditoAnterior->id_estatus_credito = 4;
                                }

                                $modelCreditoAnterior->save();
                            }
                        }

                        //determinar si el credito posee cuotas Anuales
                        $modelCuotasAnuales = CreditoTablaAmortizacion::model()->find(
                            'idCredito=:idCredito AND blnborrado =false and id_estatus_cuota is null AND tipo_cuota =\'A\' AND numero_cuota=1',
                            [':idCredito' => $model->id]
                        );

                        if ($modelCuotasAnuales) {
                            $inicio = strtotime($modelCuotasAnuales->idCredito->fecha_primer_descuento);
                            $fin = strtotime($modelCuotasAnuales->fecha_vencimiento);
                            $diasTranscurrido = ceil(($fin - $inicio) / 60 / 60 / 24);
                            $tasaInteres = $modelCuotasAnuales->idCredito->idTipoCredito->taza_interes;
                            $interes = round(
                                $modelCuotasAnuales->monto_capital * ($tasaInteres / 36000) * $diasTranscurrido,
                                2
                            );
                            $modelCuotasAnuales->monto_interes = $interes;
                            $modelCuotasAnuales->monto_cuota = $modelCuotasAnuales->monto_capital + $interes;
                            $modelCuotasAnuales->save();
                        }

                        CreditoSeguimiento::model()->updateAll(['actual' => false], 'id_credito=:id', [
                            ':id' => $model->id,
                        ]);
                        $modelCreditoSeguimiento->save();
                        $transaction->commit();
                        Yii::app()->user->setFlash(
                            'success',
                            '<b>La solicitud ha sido PROCESADA exitosamente y se ha enviado la notificación al correo electronico <b>'.
                                $model->idAsociado->correoelectronico.
                                '</b></b>'
                        );
                        CorreoElectronico::enviarCorreo([
                            'nombre' => $model->idAsociado->nombre.' '.$model->idAsociado->apellidos,
                            'correo' => $model->idAsociado->correoelectronico,
                            'asunto' => $asunto,
                            'mensaje' => $text_correo,
                        ]);
                    } else {
                        $transaction->rollBack();
                        Yii::app()->user->setFlash(
                            'error',
                            '<b>Error ocurrido al momento de aprobar la solicitud</b></b>'
                        );
                    }

                    $this->redirect(['admin']);
                } catch (Exception $e) {
                    throw new CHttpException(400, $e->getMessage());
                    $transaction->rollBack();
                }
            }

            $model->monto_credito = $this->unFormatt($model->monto_credito);
            $model->taza_interes = $this->unFormatt($model->taza_interes);
        }

        $this->render('aprobar', [
            'model' => $model,
            'modelAsociado' => $modelAsociado,
            'modelHaberesSocio' => $modelHaberesSocio,
            'porcentaje' => $porcentaje,
            'modelCreditoSeguimiento' => $modelCreditoSeguimiento,
            'modelCreditoSeleccionado' => $modelCreditoSeleccionado,
        ]);
    }

    private function unFormatt($number)
    {
        $unFormatted = str_replace('.', '', $number);
        return str_replace(',', '.', $unFormatted);
    }

    public function actionPagar($id)
    {
        $model = $this->loadModel($id);
        $detalle_pago = new ProcesoPago('pagos');
        $model->fecha_comprobante = date('d-m-Y');

        if ($model->id_estatus == 4) {
            Yii::app()->user->setFlash('error', '<b>El Prestamo con el codigo: '.$id.', ya está pagado</b>');
            $this->redirect(['admin']);
        }

        $modelPagoMasivo = PagosMasivosDetalle::model()->find('id_proceso=:id AND id_nombre_proceso = 1 AND id_estatus_detalle in(1,2)', [':id' => $id]);

        if ($modelPagoMasivo) {
            Yii::app()->user->setFlash('info', 'El prestamo esta en una nomina de pago masivo');
            $this->redirect(['admin']);
        }

        $modelCreditoSeguimiento = new CreditoSeguimiento('pagarCredito');
        $modelCreditoSeguimiento->id_estatus_credito = 4;
        $modelCreditoSeguimiento->id_credito = $id;
        $model->scenario = 'pagar';

        if (isset($_POST['CreditoSeguimiento'])) {
            $modelCreditoSeguimiento->attributes = $_POST['CreditoSeguimiento'];

            Yii::import('application.modules.configuracion.models.*', true);
            if (ConfContable::config('fecha_comprobante') == 'SI') {
                $model->fecha_comprobante = $_POST['Credito']['fecha_comprobante'];
            }

            if ($modelCreditoSeguimiento->validate()) {
                $transaction = Yii::app()->db->beginTransaction();
                try {
                    if ($modelCreditoSeguimiento->save()) {
                        CreditoSeguimiento::model()->updateAll(['actual' => false], 'id_credito=:id AND id_estatus_credito !=4', [':id' => $model->id]);
                        if ($model->refinanciado > 0) {
                            if ($model->prestamos_seleccionados != '') {
                                foreach (json_decode($model->prestamos_seleccionados, true) as $keyPs => $valuePs) {
                                    foreach (CreditoTablaAmortizacion::model()->findAll('idcredito=:idcredito  AND blnborrado = false and id_estatus_cuota is null ',
                                                [':idcredito' => $valuePs['id_credito']]) as $keyCtA => $valueCtA) {
                                        $valueCtA->id_estatus_cuota = ($model->refinanciado == 1) ? 4 : 5;
                                        $valueCtA->save();
                                    }

                                    CreditoSeguimiento::model()->updateAll(['actual' => false], 'id_credito=:id', [':id' => $valuePs['id_credito']]);
                                    $modelCreditoAnterior = new CreditoSeguimiento();
                                    $modelCreditoAnterior->id_credito = $valuePs['id_credito'];
                                    $modelCreditoAnterior->id_estatus_credito = ($model->refinanciado == 1) ? 18 : 19;
                                    $modelCreditoAnterior->save();
                                }
                            }
                        }

                        $detalle_pago->attributes = $_POST['ProcesoPago'];
                        $detalle_pago->id_proceso = $model->id;
                        $detalle_pago->id_nombre_proceso = 1;
                        $detalle_pago->id_banco = $modelCreditoSeguimiento->idBanco;
                        $detalle_pago->referencia = $modelCreditoSeguimiento->referencia;

                        if (! empty($modelCreditoSeguimiento->observacion)) {
                            $detalle_pago->observacion = $modelCreditoSeguimiento->observacion;
                        } else {
                            $detalle_pago->observacion = 'Pago de Bs.'.$model->monto_credito.' por concepto de '.$model->idTipoCredito->descripcion.' al asociado '.$model->idAsociado->nombre.' '.$model->idAsociado->apellidos;
                        }

                        $detalle_pago->id_usuario = Yii::app()->user->id;
                        $detalle_pago->monto_pagado = $model->monto_credito;

                        if (! $detalle_pago->save()) {
                            throw new Exception('Error al guardar el pago');
                        }

                        if (! is_null($model->id_afianzadora)) {
                            $proveedor = $model->idAfianzadora->proveedor;

                            if (is_null($proveedor)) {
                                throw new Exception("La afianzadora <strong>{$model->idAfianzadora->descripcion}</strong>, no tiene un proveedor asociado.");
                            }

                            OrdenPago::generar([
                                'id_tipo_orden' => 1,
                                'id_tipo_carga' => 3,
                                'id_concepto' => ConceptosOrdenPago::proceso(8),
                                'id_tipo_persona' => $proveedor->id_tipo_persona,
                                'rif' => $proveedor->rif,
                                'idbanco' => $proveedor->proveedorCuentaBancosPrincipal->id,
                                'monto_pago' => number_format($model->gastos_administrativos_afianzadora, 2, ',', '.'),
                                'idproveedor' => $proveedor->id,
                                'descripcion' => $model->getDescripcion(),
                            ], 2);
                        }

                        $model->pagarCuotasPrestamosAnteriores();

                        //////////////////////////// Contabilización Comprobante Inicio ////////////////////////////
                        Yii::import('application.modules.contable.models.comprobantes.*', true);
                        Yii::import('application.modules.contable.models.comprobantes.prestamo.*', true);
                        (new Individual($model, $detalle_pago))->contabilizar();
                        //////////////////////////// Contabilización Comprobante Fin ///////////////////////////////

                        $transaction->commit();

                        Yii::app()->user->setFlash('success', 'El préstamo fué pagado y contabilizado de forma exitosa.');
                        $this->redirect(['admin']);
                    }
                } catch (Exception $e) {
                    $transaction->rollback();
                    Yii::app()->user->setFlash('error', $e->getMessage());
                    $this->redirect(['admin']);
                }
            }
        }

        $this->render('pagar', [
            'model' => $model,
            'modelCreditoSeguimiento' => $modelCreditoSeguimiento,
            'pago' => $detalle_pago
        ]);
    }

    public function actionTipoCreditoCaracteristica()
    {
        $datosTipoCredito = [];
        $datosTipoCredito['error'] = 1;
        $datosTipoCredito['monto_sugerido'] = '';
        $datosTipoCredito['mensajeError'] = '';

        $idTipoCredito = (int) $_POST['idTipoCredito'];
        $id = '';
        $asociado = false;
        if (Yii::app()->user->checkAccess('usuario_asociado') && ! Yii::app()->user->checkAccess('usuario_administrador')) {
            $model = Asociado::model()->find('cedula=:cedula AND blnborrado = false AND id_estatus in(1,4) ORDER BY idasociado desc', [':cedula' => CrugeUserI::model()->findByPk(Yii::app()->user->id)->cedula]);
            $asociado = true;
        }

        if (isset($_POST['idTrabajador']) && $_POST['idTrabajador'] != '') {
            $id = $_POST['idTrabajador'];
        } elseif (isset($_POST['cedula']) && $_POST['cedula'] != '' && is_numeric($_POST['cedula'])) {
            $modelAsociado = Asociado::model()->find('cedula=:cedula AND blnborrado = false AND id_estatus in(1,4) ORDER BY idasociado desc',
                [':cedula' => $_POST['cedula']]);
            $id = $modelAsociado->idasociado;
        } else {
            $modelAsociado = Asociado::model()->find('cedula=:cedula AND blnborrado = false AND id_estatus in(1,4) ORDER BY idasociado desc',
                [':cedula' => CrugeUserI::model()->findByPk(Yii::app()->user->id)->cedula]);
            if ($modelAsociado) {
                $id = $modelAsociado->idasociado;
            }
        }

        unset(Yii::app()->session['CapacidadPago']);

        if ($id != '' && $idTipoCredito != '') {
            $modelBasica = Basica::model()->find();
            $modelTipoCredito = TipoCredito::model()->find('id=:id', [':id' => $idTipoCredito]);

            if ($modelTipoCredito && $modelTipoCredito->porcentaje_disponibilidad != '') {
                $porcentaje = $modelTipoCredito->porcentaje_disponibilidad;
            } else {
                $porcentaje = 80;
            }

            $haberes = ReporteHaberes::model()->find('idasociado=:ida', [':ida' => $modelAsociado->idasociado]);
            $montoTotalSolicitud = $haberes->haberDisponible($modelAsociado->idasociado, $porcentaje);
            $modelMontoTotalFiador = ReporteCreditos::model()->getTotalMontoFiador($modelAsociado->idasociado);
            $modelMontoTotalDeuda = ReporteCreditos::model()->getTotalMontoDeuda($modelAsociado->idasociado);

            if ($montoTotalSolicitud > 0) {
                $datosTipoCredito['error'] = 0;

                $creditoOrdinario = (isset($_POST['refinanciamiento'])) ? false : true;
                $tipo = [];
                if ($asociado) {
                    $tipo = $modelTipoCredito->validarTipoCreditoOrdinarias($modelTipoCredito, $tipo, $modelAsociado, $creditoOrdinario);
                } else {
                    $tipo = $modelTipoCredito->validarTipoCreditoAdministrador($modelTipoCredito, $tipo, $modelAsociado, $creditoOrdinario);
                }

                if ($tipo['mensaje'] == '') {
                    $disponible = new Disponibilidad([
                        'asociado' => $modelAsociado->idasociado,
                        'proceso' => 1,
                    ]);

                    $datosTipoCredito['porcentajeCapacidadPago'] = ($modelTipoCredito->capacidad_pago_porcentaje != '') ? $modelTipoCredito->capacidad_pago_porcentaje : 33;
                    $datosTipoCredito['monto_sugerido'] = 'Bs. '. Yii::app()->format->number($disponible->formula('T.total'));
                    $datosTipoCredito['monto_haberes_socio'] = ($modelTipoCredito->id_clasificacion_tipo_credito == 2) ? $montoTotalSolicitud : 0;

                    $sql = 'select * FROM "prestamos"."credito"  "t"
                    LEFT OUTER JOIN "prestamos"."credito_seguimiento" "idCreditoSeguimientoActual" ON ("idCreditoSeguimientoActual" ."id_credito"="t"."id")
                    WHERE (t.idasociado=:idasociado AND id_estatus_credito in( 2,4)) AND (actual=true)';
                    $credito = Credito::model()->findAllBySql($sql, [':idasociado' => $id]);

                    $modelCapacidadPago = TipoCreditoCapacidadPago::model()->with('idCapacidadPago')->findAll(['condition' => 'id_tipo_credito=:id_tipo_credito',
                        'params' => [':id_tipo_credito' => $modelTipoCredito->id],
                        'order' => 'asignacion desc', ]);

                    $html = $this->renderPartial('_form_capacidad_pago', [
                        'modelCapacidadPago' => $modelCapacidadPago,
                        'modelTipoCredito' => $modelTipoCredito,
                        'porcentajeCapacidadPago' => $datosTipoCredito['porcentajeCapacidadPago'],
                        'idAsociado' => $id,
                        'modelCreditos' => $credito,
                    ], true);

                    $datosTipoCredito['porcentajeCapacidadPago'] = $datosTipoCredito['porcentajeCapacidadPago'] / 100;
                    $buscar = ['<form class="form-vertical" id="yw0" action="'.CController::createUrl('TipoCreditoCaracteristica').'" method="post">', '</form>'];
                    $datosTipoCredito['detalle_capacidad_pago'] = str_replace($buscar, '', $html);
                    $datosTipoCredito['mostrar_recibo_pago'] = (! $modelTipoCredito->capacidad_pago_sueldo_aporte) ? 1 : 0;
                    $datosTipoCredito['mostrar_afinazadoras'] = ($modelTipoCredito->id_clasificacion_tipo_credito == 2) ? 1 : 0;

                    Yii::app()->session['CapacidadPago'] = [
                        'total_haberes' => $haberes->total_haberes,
                        'porcentaje_tipo_credito' => $porcentaje,
                        'total_monto_prestamo' => $modelMontoTotalDeuda,
                        'total_monto_fiador' => $modelMontoTotalFiador,
                        'creditos' => CHtml::listData($credito, 'idTipoCredito.descripcion', 'cuota_pagar'),
                    ];

                    $porcentaje = number_format($porcentaje, 2, ',', '.').'%';
                    $datosTipoCredito['calculadoraHaberes'] = $this->renderPartial('application.modules.asociado.views.asociado.haberesSocio', [
                        'modelAsociado' => $modelAsociado,
                        'ocultarDatosPersonales' => 1,
                        'haberes' => $haberes,
                        'modelTipoCredito' => $modelTipoCredito,
                        'porcentaje' => $porcentaje,
                        'montoTotaSolicitud' => $montoTotalSolicitud,
                        'etiquetaAcordeon' => "Porcentaje de haberes disponibles para \"{$modelTipoCredito->descripcion}\"",
                        'etiquetaFecha' => 'Fecha de Inscripción',
                        'fecha' => $modelAsociado->fechaingreso,
                        'disponible' => $disponible,
                    ], true);

                    $datosTipoCredito['permitirDesicionCuotasEspeciales'] = (count($modelTipoCredito->idCuotasEspeciales) > 0) ? ($modelTipoCredito->generar_tabla_cuotas_especiales) ? 0 : 1 : 0;
                    $datosTipoCredito['id_tipo_cobro'] = $modelTipoCredito->id_tipo_cobro;
                    $datosTipoCredito['bloqueo_anticipado_prestamos'] = $modelTipoCredito->bloqueo_anticipado_prestamos;
                } else {
                    $datosTipoCredito['error'] = 1;
                    $datosTipoCredito['mensajeError'] = '<span class="help-inline error">'.$tipo['mensaje'].'</span>';
                }
            } else {
                $datosTipoCredito['error'] = 1;
                $datosTipoCredito['mensajeError'] = ' <span class="help-inline error"><b>Los haberes disponibles de '.number_format($montoTotalSolicitud, 2, ',', '.').' Bs,  no son suficiente para cubrir solicitudes</b></span>';
            }
        }

        echo CJSON::encode($datosTipoCredito);
    }

    public function actionTablaAmoritzacionAdministrador()
    {
        $datosTipoCredito = [];
        $datosTipoCredito['error'] = 1;
        $datosTipoCredito['mensajeError'] = '';
        unset(Yii::app()->session['CrearCreditoAdministrador']);
        $asociado = false;
        $reestructuracion_tabla = false;

        if (Yii::app()->user->checkAccess('usuario_asociado') && ! Yii::app()->user->checkAccess('usuario_administrador')) {
            $asociado = true;
        }

        $idTipoCredito = (isset($_POST['idTipoCredito'])) ? $_POST['idTipoCredito'] : '';
        $montoCredito = (isset($_POST['montoCredito'])) ? $_POST['montoCredito'] : '';
        $opcionRefinanciamiento = (isset($_POST['opcionRefinanciamiento'])) ? $_POST['opcionRefinanciamiento'] : 0;
        $idCredito = (new Warp($_POST))->get('idcredito', 0);

        if ($montoCredito == 0 && $opcionRefinanciamiento == 2) {
            $montoCredito = number_format(CreditoTablaAmortizacion::getTotalCapitalCuotasNull($idCredito), 2, ',', '.');
            $reestructuracion_tabla = true;
        }

        if ($idTipoCredito != '' && $montoCredito != '') {
            $capacidadPago = $_POST['capacidad_pago'];
            $monto_haberes_socio = $_POST['monto_haberes_socio'];
            $generar_cuotas_especiales = (isset($_POST['generar_cuotas_especiales'])) ? $_POST['generar_cuotas_especiales'] : 0;
            $numeroCuotas = (isset($_POST['numeroCuotas'])) ? $_POST['numeroCuotas'] : 0;
            $omitirEvaluacion = (isset($_POST['omitirEvaluacion'])) ? $_POST['omitirEvaluacion'] : 0;
            $omitirMaximo = (isset($_POST['omitirMaximo'])) ? $_POST['omitirMaximo'] : 0;
            $id_afianzadora = (isset($_POST['id_afianzadora'])) ? $_POST['id_afianzadora'] : 0;
            $bloqueo_anticipado = boolval((new Warp($_POST))->get('bloqueo_anticipado', 0));

            // si esta seleccionado la omision de la evaluacion de pago, y la capacidad de pago es 0 entonce
            // colocaria la capcidad de pago en 1
            if ($omitirEvaluacion == 1) {
                $capacidadPago = $capacidadPago == 0 ? 1 : $capacidadPago;
            }
            $modelDeuda = 0;
            $id = '';

            if ($capacidadPago > 0) {
                if (isset($_POST['idTrabajador']) && $_POST['idTrabajador'] != '') {
                    $modelAsociado = Asociado::model()->findByPk($_POST['idTrabajador']);
                    $id = $_POST['idTrabajador'];
                } elseif (isset($_POST['cedula']) && $_POST['cedula'] != '' && is_numeric($_POST['cedula'])) {
                    $modelAsociado = Asociado::model()->find('cedula=:cedula AND blnborrado = false AND id_estatus in(1,4) ORDER BY idasociado desc', [
                        'cedula' => $_POST['cedula'],
                    ]);
                    $id = $modelAsociado->idasociado;
                } else {
                    $modelAsociado = Asociado::model()->find('cedula=:cedula AND blnborrado = false AND id_estatus in(1,4) ORDER BY idasociado desc', [
                        ':cedula' => CrugeUserI::model()->findByPk(Yii::app()->user->id)->cedula,
                    ]);
                    if ($modelAsociado) {
                        $id = $modelAsociado->idasociado;
                    }
                }

                $montoCredito = str_replace(',', '.', str_replace('.', '', $montoCredito));

                if ($id != '' && $montoCredito > 0) {
                    $modelTipoCredito = TipoCredito::model()->find('id=:id', [':id' => $idTipoCredito]);
                    $disponible = new Disponibilidad([
                        'asociado' => $modelAsociado->idasociado,
                        'proceso' => 1,
                    ]);
                    $montoDisponible = $disponible->formula('T.total');
                    $valido = true;

                    if ($modelTipoCredito->monto_minimo_credito > 0 && $montoCredito < $modelTipoCredito->monto_minimo_credito) {
                        $valido = $valido && false;

                        $datosTipoCredito['mensajeError'] = '<div class="alert alert-warning">
                                                                <i class="icon-info-sign"></i>
                                                                El monto minimo a solicitar es ('.number_format($modelTipoCredito->monto_minimo_credito, 2, ',', '.').')
                                                            </div>';
                    }

                    if ($opcionRefinanciamiento != 0) {
                        $modelDeuda = CreditoTablaAmortizacion::getTotalCapitalCuotasNull($idCredito);

                        if ($opcionRefinanciamiento == 1 && $montoCredito < $modelDeuda) {
                            $valido = $valido && false;

                            $datosTipoCredito['mensajeError'] = '<div class="alert alert-warning">
                                                                <i class="icon-info-sign"></i>
                                                                    El monto solicitado no paga el monto de la deuda anterior ('.number_format($modelDeuda, 2, ',', '.').')
                                                                </div>';
                        }
                    }

                    if ($valido && $montoCredito > $montoDisponible && ! $reestructuracion_tabla && ! $omitirMaximo) {
                        $valido = $valido && false;
                        $datosTipoCredito['mensajeError'] = '<div class="alert alert-warning">
                                                                    <i class="icon-info-sign"></i>
                                                                        El monto solicitado es mayor al monto sugerido ('.number_format($montoDisponible, 2, ',', '.').')
                                                                    </div>';
                    }

                    if ($valido) {
                        if ($monto_haberes_socio > $montoCredito) {
                            $monto_haberes_socio = $montoCredito;
                        }

                        if ($opcionRefinanciamiento == 2 && ! $reestructuracion_tabla) {
                            $montoCredito += $modelDeuda;
                        }

                        $modelTipoNomina = AporteOrdinario::model()->find('id_asociado=:id_asociado and blnborrado=false AND aprobado = true AND id_tipo_nomina IN (1,2,3) order by fecha_aporte desc', [':id_asociado' => $id]);
                        if ($modelTipoNomina) {
                            $modelResultadoTablaAmortizacion = CreditoTablaAmortizacion::model()->tablaAmortizacionDetalle([
                                'tipo_credito' => $_POST['idTipoCredito'],
                                'monto_credito' => $montoCredito,
                                'capacidad_pago' => $capacidadPago,
                                'omitir_evaluacion' => $omitirEvaluacion,
                                'generar_cuotas_especiales' => $generar_cuotas_especiales,
                                'monto_haberes_socio' => $monto_haberes_socio,
                                'numeroCuotas' => $numeroCuotas,
                                'id_afianzadora' => $id_afianzadora,
                                'reestructuracion_tabla' => $reestructuracion_tabla,
                                'idtrabajador' => $id,
                            ]);

                            if ($modelResultadoTablaAmortizacion['error'] == 0) {
                                $modelTablaAmortizacion = $modelResultadoTablaAmortizacion['tablaAmortizacion'];

                                $modelTipoCredito = TipoCredito::model()->findByPk($idTipoCredito);
                                $interesGenerado = 0;
                                $cuota = $modelTablaAmortizacion[0]->monto_cuota;

                                Yii::app()->session['CrearCreditoAdministrador'] = $modelResultadoTablaAmortizacion;
                                $cuotasEspaciales = 0;
                                foreach ($modelTablaAmortizacion as $key => $value) {
                                    $interesGenerado += $value->monto_interes;
                                    if ($value->tipo_cuota == 'A') {
                                        $cuotasEspaciales++;
                                    }
                                }

                                $datosTipoCredito['error'] = 0;
                                $this->layout = '';

                                $html = $this->renderPartial('tablaAmortizacionEncabezado', [
                                    'modelTipoCredito' => $modelTipoCredito,
                                    'montoCredito' => $montoCredito,
                                    'cuota' => $cuota,
                                    'gastosAdministrativo' => $modelResultadoTablaAmortizacion['gastosAdministrativo'],
                                    'gastosAdministrativoAfianzadora' => $modelResultadoTablaAmortizacion['gastosAdministrativoAfianzador'],
                                    'gastosAdministrativoAfianzadoraCaja' => $modelResultadoTablaAmortizacion['descontarGastosAdministrativoAfianzadorCaja'],
                                    'modelTipoNomina' => $modelTipoNomina,
                                    'interesGenerado' => $interesGenerado,
                                    'cuotasEspaciales' => $cuotasEspaciales,
                                    'cantidadCuotasOrdinarias' => (count($modelTablaAmortizacion) - $cuotasEspaciales),
                                    'opcionRefinanciamiento' => $opcionRefinanciamiento,
                                    'modelDeuda' => $modelDeuda,
                                    'montoDeudaTotal' => CreditoTablaAmortizacion::getTotalCuotasNull($idCredito),
                                    'cuotasAfectadas' => CreditoTablaAmortizacion::getTotalCuotasAfectadas($idCredito),
                                    'bloqueo_anticipado' => $bloqueo_anticipado,
                                ], true);
                                $html .= $this->renderPartial('tablaAmortizacionDetalle', [
                                    'modelTablaAmortizacion' => $modelTablaAmortizacion,
                                    'cuotasEspaciales' => $cuotasEspaciales,
                                    'modelTipoNomina' => $modelTipoNomina,
                                    'cantidadCuotasOrdinarias' => (count($modelTablaAmortizacion) - $cuotasEspaciales),
                                ], true);
                                $datosTipoCredito['encabezado_tabla_amoritzacion'] = $html;
                            } else {
                                $datosTipoCredito['mensajeError'] = '<div class="alert alert-info">
                                                                            <i class="icon-info-sign"></i>
                                                                                '.$modelResultadoTablaAmortizacion['mensajeError'].'
                                                                        </div>';
                            }
                        } else {
                            $datosTipoCredito['mensajeError'] = '<div class="alert alert-info">
                                                                        <i class="icon-info-sign"></i>
                                                                            No tiene tipo de nomina definido, por favor contacte con el administrador de la caja
                                                                        </div>';
                        }
                    }
                }
            } else {
                $datosTipoCredito['mensajeError'] = '<div class="alert alert-warning">
                                                        <i class="icon-info-sign"></i>
                                                        El asociado no posee capacidad de pago para solictar préstamo
                                                    </div>';
            }
        }
        echo CJSON::encode($datosTipoCredito);
    }

    public function actionTablaAmoritzacionReestructuracion(){
        $datosTipoCredito = [
                'error' => 1,
                'mensajeError' => '',
            ];


        unset(Yii::app()->session['CrearCreditoAdministrador']);

        $id_credito = (isset($_POST['idcredito'])&& $_POST['idcredito']!='')? (int)$_POST['idcredito']:NULL;

        $model = Credito::model()->findByPk($id_credito);

        if($model){

            $generar_cuotas_especiales = (isset($_POST['generar_cuotas_especiales']))?$_POST['generar_cuotas_especiales']:0;

            $id_tipo_nomina = (isset($_POST['idTipoNomina']))?(int)$_POST['idTipoNomina']:0;

            $numeroCuotas = (isset($_POST['numeroCuotas']))?$_POST['numeroCuotas']:0;

            $id_afianzadora = (isset($_POST['id_afianzadora']))?$_POST['id_afianzadora']:0;


            $modelDeuda = 0;

                        // $disponible = new Disponibilidad([
                        //         'asociado' => $modelAsociado->idasociado,
                        //         'proceso' => 1,
                        //         'ignorar' => [],
                        //     ]);

                        //     $montoDisponible = $disponible->formula('T.total');

            $valido= TRUE;

            if( $id_tipo_nomina > 0 ){

                $sql = ConfReestructuracionTablaCredito::getCuotasHabilitadasReestructuracion();

                ################## Monto del Credito mas la cantidad de cuotas que no se han cancelado del credito #########################
                $modelTabla = CreditoTablaAmortizacion::model()->find(array('select'=>'sum(monto_capital) as monto_capital, count(*) AS numero_cuota',
                                                                                 'condition'=>'idcredito=:idcredito AND blnborrado = false '.$sql,
                                                                                 'params'=>array(':idcredito'=>$model->id)));


                $numero_cuota = 0;
                ###################### Determinar el numero de cuotas del prestamo #########################################################

                if( ($id_tipo_nomina != $model->id_tipo_nomina)){

                    $modelFechaInicio = CreditoTablaAmortizacion::model()->find('idcredito=:idcredito AND blnborrado = false '.$sql.' ORDER BY id ASC',
                                                                            [':idcredito'=>$model->id]);

                    $modelFechaFin = CreditoTablaAmortizacion::model()->find('idcredito=:idcredito AND blnborrado = false '.$sql.' ORDER BY id DESC',
                                                                            [':idcredito'=>$model->id]);


                    $fechainicial = new DateTime($modelFechaInicio->fecha_vencimiento);

                    $fechafinal = new DateTime($modelFechaFin->fecha_vencimiento);

                    $diferencia = $fechainicial->diff($fechafinal);

                    ############################ MENSUAL ###############################3
                    if( $id_tipo_nomina == 1 ){

                        $numero_cuota = ( $diferencia->y * 12 ) + $diferencia->m;

                    }####################### QUINCENAL #################################
                    elseif ( $id_tipo_nomina == 2 ) {

                        $numero_cuota = ( ( $diferencia->y * 12 ) + $diferencia->m ) * 2;

                    }####################### SEMANAL #################################
                    else{

                        $numero_cuota = floor(($diferencia->format('%a') / 7));

                    }

                }
                else{

                     $numero_cuota = $modelTabla->numero_cuota;

                }

                $modelTipoNomina =TipoNomina::model()->findByPk( $id_tipo_nomina );

                if( $numeroCuotas <= $numero_cuota ){

                    $modelTipoCredito = $model->idTipoCredito;

                    if( $numeroCuotas >0 )

                        $numero_cuota = $numeroCuotas;


                    $modelTipoCredito = $model->idTipoCredito;

                    $modelResultadoTablaAmortizacion = CreditoTablaAmortizacion::model()->tablaAmortizacion(['tipo_credito'=>$modelTipoCredito,
                                                                                                        'monto_credito'=>$modelTabla->monto_capital,
                                                                                                        'idTipoNomina'=>$id_tipo_nomina,
                                                                                                        'generar_cuotas_especiales'=>($generar_cuotas_especiales)?1:0,
                                                                                                        'mantener_cuota'=>false,
                                                                                                        'numeroCuota'=>$numero_cuota]);


                    $modelTablaAmortizacion = $modelResultadoTablaAmortizacion['tablaAmortizacion'];


                    $interesGenerado =0;

                    $cuota = $modelTablaAmortizacion[0]->monto_cuota;

                    Yii::app()->session['CrearCreditoAdministrador'] =$modelResultadoTablaAmortizacion ;

                    $cuotasEspaciales = 0;

                    foreach($modelTablaAmortizacion AS $key =>$value){

                        $interesGenerado += $value->monto_interes;

                        if($value->tipo_cuota=='A')

                            $cuotasEspaciales++;

                    }


                    $datosTipoCredito['error'] = 0;

                    $this->layout='';

                    $html = $this->renderPartial('tablaAmortizacionEncabezado',array(
                                                    'modelTipoCredito'=>$modelTipoCredito,
                                                    'montoCredito'=>$modelTabla->monto_capital,
                                                    'cuota'=>$cuota,
                                                    'gastosAdministrativo'=>0,
                                                    'gastosAdministrativoAfianzadora'=>0,
                                                    'gastosAdministrativoAfianzadoraCaja'=>0,
                                                    'modelTipoNomina'=>$modelTipoNomina,
                                                    'interesGenerado'=>$interesGenerado,
                                                    'cuotasEspaciales'=>$cuotasEspaciales,
                                                    'cantidadCuotasOrdinarias'=>(count($modelTablaAmortizacion)-$cuotasEspaciales),
                                                    'opcionRefinanciamiento'=>false,
                                                    'modelDeuda'=>$modelDeuda,
                                                    'montoDeudaTotal' => CreditoTablaAmortizacion::getTotalCuotasNull($id_credito),
                                                    'cuotasAfectadas' => CreditoTablaAmortizacion::getTotalCuotasAfectadas($id_credito),
                                                    'bloqueo_anticipado' => false,
                                            ),true);

                    $html .= $this->renderPartial('tablaAmortizacionDetalle',array(
                                                    'modelTablaAmortizacion'=>$modelTablaAmortizacion,
                                                    'cuotasEspaciales'=>$cuotasEspaciales,
                                                    'modelTipoNomina'=>$modelTipoNomina,
                                                    'cantidadCuotasOrdinarias'=>(count($modelTablaAmortizacion)-$cuotasEspaciales),
                                            ),true);

                    $datosTipoCredito['encabezado_tabla_amoritzacion'] = $html ;

                }
                else{

                    $datosTipoCredito['mensajeError'] =  '<div class="alert alert-info">
                                                            <i class="icon-info-sign"></i>
                                                            El número de cuotas seleccionadas es mayor a las cuotas restantes del credito
                                                        </div>';

                }

            }
            else{

                 $datosTipoCredito['mensajeError'] =  '<div class="alert alert-info">
                                                        <i class="icon-info-sign"></i>
                                                            No tiene tipo de nomina definido, por favor contacte con el administrador de la caja
                                                        </div>';
            }

        }
        echo CJSON::encode($datosTipoCredito);
	}

    public function actionTablaAmoritzacion(){
            if(isset($_POST['idTipoCredito'])&& $_POST['idTipoCredito']!='' &&  isset($_POST['montoCredito'])&& $_POST['montoCredito']!='' ){
                $idTipoCredito = $_POST['idTipoCredito'];
                $montoCredito = $_POST['montoCredito'];
                $id='';
                if(isset($_POST['idTrabajador']) && $_POST['idTrabajador']!=''){
                    $modelAsociado = Asociado::model()->findByPk($_POST['idTrabajador']);
                    $id =$_POST['idTrabajador'];
                }
                elseif (isset($_POST['cedula']) && $_POST['cedula']!='' &&is_numeric($_POST['cedula'])){
                    $modelAsociado = Asociado::model()->find('cedula=:cedula AND blnborrado = false AND id_estatus in(1,4) ORDER BY idasociado desc',
                                                            array(':cedula'=>$_POST['cedula']));

                    $id =$modelAsociado->idasociado;
                }
                else{
                    $modelAsociado = Asociado::model()->find('cedula=:cedula AND blnborrado = false AND id_estatus in(1,4) ORDER BY idasociado desc',
                                                                            array(':cedula'=>CrugeUserI::model()->findByPk(Yii::app()->user->id)->cedula));
                    if($modelAsociado)
                        $id =$modelAsociado->idasociado;
                }

                if($id!=''){
                    $montoCredito = str_replace('.', '', $montoCredito);
                    $montoCredito = str_replace(',', '.', $montoCredito);
                    $montoDisponible =Credito::model()->calcularHaberesDisponibles($id, $idTipoCredito);

                    $modelTipoCredito = TipoCredito::model()->find('id=:id',array(':id'=>$idTipoCredito));
                    if($modelTipoCredito->numero_haberes_disponible>0){
                        if($montoDisponible>0)
                            $montoDisponible *=  $modelTipoCredito->numero_haberes_disponible;
                        else
                            $montoDisponible +=($modelTipoCredito->numero_haberes_disponible*$montoDisponible*-1);
                    }

                    if($montoCredito<= round($montoDisponible,2)){
                        $modelTipoNomina = AporteOrdinario::model()->find('id_asociado=:id_asociado and blnborrado=false AND id_tipo_nomina IN (1,2,3) order by id desc',array(':id_asociado'=>$id));
                        if($modelTipoNomina){
                            $modelTablaAmortizacion = CreditoTablaAmortizacion::model()->tablaAmortizacion(array('tipo_credito'=>$_POST['idTipoCredito'],
                                                                                                                'monto_credito'=>$montoCredito,
                                                                                                                'idtrabajador'=>$id));

                            if(is_array($modelTablaAmortizacion) && count($modelTablaAmortizacion)>0){
                                $modelTipoCredito = TipoCredito::model()->findByPk($idTipoCredito);
                                $interesGenerado =0;
                                $capacidadPago =  $modelTipoNomina->sueldo_base*0.33;
                                $cuota = $modelTablaAmortizacion[0]->monto_cuota;

                                if($cuota<$capacidadPago){
                                    $cuotasEspaciales = 0;
                                    foreach($modelTablaAmortizacion AS $key =>$value){
                                        $interesGenerado += $value->monto_interes;
                                        if($value->tipo_cuota=='A'){
                                            $cuotasEspaciales++;
                                        }
                                    }

                                    $this->layout='';
                                    $html = $this->renderPartial('_form_capacidad_pago', array(
                                                        'modelCapacidadPago' => $modelTipoCredito->tipoCreditoCapacidadPagos,

                                                        'modelCreditos'=>  Credito::model()->findAll('idasociado=:idasociado',array(':idasociado'=>$id))
                                                        ),true);
                                    $buscar=array('<form class="form-vertical" id="yw0" action="'.Yii::app()->baseUrl.'/index.php?r=prestamo/credito/TipoCreditoCaracteristica" method="post">','</form>');
                                    $datosTipoCredito['detalle_capacidad_pago'] = str_replace($buscar, '', $html); ;


                                    $this->renderPartial('tablaAmortizacion',array(
                                                                    'modelAsociado'=>$modelAsociado,
                                                                    'modelTipoCredito'=>$modelTipoCredito,
                                                                    'montoCredito'=>$montoCredito,
                                                                    'modelTablaAmortizacion'=>$modelTablaAmortizacion,
                                                                    'modelTipoNomina'=>$modelTipoNomina,
                                                                    'interesGenerado'=>$interesGenerado,
                                                                    'cuotasEspaciales'=>$cuotasEspaciales,
                                                            ));
                                }
                                else{
                                    echo '<div class="alert alert-info">
                                            <i class="icon-info-sign"></i>
                                                El monto de la cuota excede a la capacidad de pago, por favor seleccione otro monto
                                        </div>';
                                }

                            }
                            else{
                                 echo '<div class="alert alert-info">
                                            <i class="icon-info-sign"></i>
                                                El monto de la cuota excede a la capacidad de pago, por favor seleccione otro monto
                                        </div>';
                            }
                        }
                        else{
                            echo '<div class="alert alert-info">
                                    <i class="icon-info-sign"></i>
                                        No tiene tipo de nomina definido, por favor contacte con el administrador de la caja
                                    </div>';
                        }

                    }
                    else{
                        echo '<div class="alert alert-warning">
                                <i class="icon-info-sign"></i>
                                    El monto solicitado es mayor al disponible ('.  number_format($montoDisponible, 2, ",", ".").')
                                </div>';
                    }

                }
            }
	}

        public function actionComprobanteSolcitudPrestamo($id) {

            $model = $this->loadModel($id);
            $modelEmpresa = Empresa::model()->find();
            $usuario = CrugeUserI::model()->findByPk(Yii::app()->user->id)->nombres.' '.CrugeUserI::model()->findByPk(Yii::app()->user->id)->apellidos;
            $coletilla = Empresa::Coletilla();

            if (Yii::app()->user->checkAccess('usuario_asociado') && !Yii::app()->user->checkAccess('usuario_administrador') ){
                $modelAsociado = Asociado::model()->find('cedula=:cedula AND blnborrado = false  AND id_estatus in(1,4) ORDER BY idasociado desc',
                                        array(':cedula'=>CrugeUserI::model()->findByPk(Yii::app()->user->id)->cedula));
                if($model->idasociado != $modelAsociado->idasociado){
                     Yii::app()->user->setFlash('error','No se encontraron registro para mostrar, intente mas tarde');
                     $this->redirect( array('admin'));
                }
            }
            $pdf = Yii::createComponent('application.extensions.mpdf60.mpdf');
            $html=
                $this->renderPartial('comprobanteSolicitud_prestamo',array(
                    'model'=> $model,
                    'modelEmpresa'=>  $modelEmpresa,
                    'coletilla' => $coletilla,
                    'modelCapacidadPago'=> ($model->detalle_capacidad_pago!='')?json_decode($model->detalle_capacidad_pago, true):array()),TRUE);
                //$ruta_logo =Yii::app()->theme->baseUrl."/images/".$modelEmpresa->logo;
            //Yii::app()->basePath . '../';
               $ruta_logo= dirname(Yii::app()->getBasePath())."/images/".$modelEmpresa->logo;
                //echo "<pre>";print_r($ruta_logo);exit;
            $html2=
                $this->renderPartial('reporte_TAmortizacion',array(
                    'model'=> $model),TRUE);
           //echo $html;echo "\n";echo $html2;exit;
             $mpdf=new mPDF('win-1252','LETTER',8,'',15,15,20,15,5,5);
             $arr = array (
                        'L' => array (
                          'content' => (empty($modelEmpresa->logo))?"<img src=".dirname(Yii::app()->getBasePath())."/images/logo.png alt='Logo' width ='40px' heigth='40px'/>":"<img src='".$ruta_logo."' alt='Logo' width ='40px' heigth='40px'/>",
                        ),

                        'R' => array (
                          'content' => $model->idTipoCredito->descripcion,
                          'font-style' => 'BI',
                          'font-family' => 'serif',
                          'color'=>'#000000'
                        ),

                        'line' => 0,

                    );
             $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($html);
             //echo "<pre>";print_r($mpdf);exit;
             $mpdf->addPage();
             $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($html2);
             $mpdf->Output('Solicitud de Prestamo.pdf', 'D');
             exit;

        }
    public function actionReporte()
    {

        yii::app()->request->sendFile("Reporte préstamo (".date('d-m-Y').").xlsx",
        $this->renderPartial('reportPhpExcel',array(
       // 'model'=>$model,
        ), true)
        );
    }

       public function actionReporteCredito()
    {
       $model=new ReporteCreditos('esc_periodo');
       if(isset($_POST['yt0']))
           {
            $model->mes=$_POST['ReporteCreditos']['mes'];
            $model->fecha_inicio=$_POST['ReporteCreditos']['fecha_inicio'];
            $model->fecha_fin=$_POST['ReporteCreditos']['fecha_fin'];
            $model->consulta=$_POST['ReporteCreditos']['consulta'];
            if($model->consulta==1)$model->scenario='esc_fecha';

           if($model->validate())
            {

               $idUniades='';
              foreach (Unidad::getUnidadUsario() as $key => $value) {
                    $idUniades.=$key.',';
              }

              if ($idUniades !='') {
                $idUniades ='AND idunidad in('.trim($idUniades,',').')';
                # code...
              }

               #Consulta
               if($model->consulta==0)
                $prestamos=ReporteCreditos::model()->with(array('tseg'))->together(true)->findAll('date_part(\'month\',tseg.fecha_registro)='.$model->mes.' AND date_part(\'year\',tseg.fecha_registro)='.date('Y').' AND  (tseg.id_estatus_credito=4) and tseg.actual=true '.$idUniades);
                   else
                $prestamos=ReporteCreditos::model()->with(array('tseg'))->together(true)->findAll('tseg.fecha_registro BETWEEN \''.$model->fecha_inicio.'\' AND \''.$model->fecha_fin.'\' AND (tseg.id_estatus_credito=4) and tseg.actual=true '.$idUniades);
                       if($prestamos){

                   #Array de Salida
                   $liquidados=array();
                   $prestamo[0]=array('Cédula','Nombres','Apellidos','Unidad',' Clave préstamo','Tipo de préstamo',' % de interes',' Numero de préstamo','Monto préstamo','Capital del préstamo',' Intereses del préstamo','Fecha inicio',' Fecha vencimiento','Monto de la cuota','Número de cuotas');
                   foreach ($prestamos as $key=>$value)
                       {
                            $modelTotalInteres = CreditoTablaAmortizacion::model()->find(array('select'=>'sum(monto_interes) as monto_interes','condition'=>'idcredito=:idcredito',
                                                                                    'params'=>array(':idcredito'=>$value->idcredito)))->monto_interes;

                         $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'=>$value->idcredito)));
                         $prestamo[]=array($value->cedula,$value->nombre,$value->apellidos,$value->unidad->descripcion,$value->id_tipo_credito,$value->tipoCredito->descripcion, number_format($value->taza_interes,2,',','.'),$value->idcredito, number_format(($value->prestamo+$modelTotalInteres),2,',','.'), number_format($value->prestamo,2,',','.') , number_format($modelTotalInteres,2,',','.') , date('d-m-Y',strtotime($value->idCredito->fecha_primer_descuento)), date('d-m-Y',strtotime($fechaUltimoDescuento->fecha_vencimiento)), number_format($value->cuota_pagar,2,',','.'), ($value->cuotas_pagadas+$value->cuotas_pendientes) );
                       }
                   #Lectura del Excel
                    $phpExcelPath = Yii::getPathOfAlias('ext.Excel.PHPExcel.Classes');
                    $phpExcelPath2 = Yii::getPathOfAlias('application.extensions.Excel.PHPExcel.Classes.PHPExcel');
                    spl_autoload_unregister(array('YiiBase','autoload'));
                    include($phpExcelPath . DIRECTORY_SEPARATOR . 'PHPExcel.php');
                    include($phpExcelPath.DIRECTORY_SEPARATOR.'PHPExcel'.DIRECTORY_SEPARATOR.'Reader'.DIRECTORY_SEPARATOR.'Excel2007.php');
                    include($phpExcelPath2 . DIRECTORY_SEPARATOR . 'IOFactory.php');
                    spl_autoload_register(array('YiiBase','autoload'));
                    #
                    $objPHPExcel = new PHPExcel();
                    foreach(range('A','O') as $columnID) {
                        $objPHPExcel->getActiveSheet()->getColumnDimension($columnID)->setAutoSize(true);
                      }
                    $objPHPExcel->getActiveSheet()->fromArray($prestamo,NULL,'A1');
                    $objPHPExcel->getActiveSheet()->getStyle('A1:O1')->getFont()->setBold(true);
                    $objPHPExcel->getActiveSheet()->getStyle('A1:O1')->getFont()->getColor()->setARGB(PHPExcel_Style_Color::COLOR_WHITE);
                    $objPHPExcel->getActiveSheet()->getStyle('A1:O1')->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID);
                    $objPHPExcel->getActiveSheet()->getStyle('A1:O1')->getFill()->getStartColor()->setARGB('004413');
                    $objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel);
                    $objWriter->setOffice2003Compatibility(true);
                    //$objWriter->save("doc/liquidados.xlsx");
                    header('Content-Type: application/vnd.ms-excel');
                    header('Content-Disposition: attachment;filename="nuevosPrestamos.xlsx"');
                    header('Cache-Control: max-age=0');
                    $objWriter->save('php://output');
                   exit;

               }
               else {
                   Yii::app()->user->setFlash('warning', "No existen nuevos préstamos en este período");
               }
            }


          }

       $this->render('reporte_credito',array(
            'model'=>$model,
        ));


    }

    public function actionReportePrestamo(){

        //$model = $this->loadModel($id);
        $model = new Credito;

        $modeloAs = Asociado::model()->find('idasociado=:socio AND id_estatus in(1,4) ORDER BY idasociado desc', array(':socio'=>$model->idasociado));
        $modelMontoTotalFiador = ReporteCreditos::model()->getTotalMontoFiador($model->idasociado);
        $modelHaberesSocio = ReporteHaberes::model()->find('idasociado=:idasociado',array(':idasociado'=>$model->idasociado));

        $pdf = Yii::createComponent('application.extensions.mpdf60.mpdf');
            $html=
                $this->renderPartial('reporte_prestamo',array(
                    'model'=> $model,
                    'solicitante' => $solicitante,
                    'beneficiarios' => $beneficiarios,
                    'modelEmpresa'=>  Empresa::model()->find()),TRUE);

            echo $html;exit;
            $mpdf=new mPDF('win-1252','LETTER','','',5,5,5,5,5,3);
            $mpdf->SetFooter(' ESTA PLANILLA VA SIN ENMIENDAS|Página {PAGENO}/{nbpg}|{DATE d/m/Y}');
            $mpdf->WriteHTML($html);
            $mpdf->Output('Solicitud de montepio(Aprobada | '.date("d-m-Y").').pdf','D');
             exit;
    }

    public function actionDenegar($id)
    {
        $model = $this->loadModel($id);

        if ($model->id_estatus != 2) {
            Yii::app()->user->setFlash(
                'error',
                '<b>Error, el crédito se encuentra en estatus <b>'.strtoupper($model->nombre_estatus).'</b></b>'
            );
            $this->redirect(['admin']);
        }
        if ($model->estaPrestamoNominaPago()) {
            Yii::app()->user->setFlash(
                'error',
                '<b>El Prestamo con el codigo: '.$id.', esta en una nomina de pago masivo</b>'
            );
            $this->redirect(['admin']);
        }

        $EstatusCredito = new CreditoSeguimiento('denegarCredito');

        if (isset($_POST['CreditoSeguimiento'])) {
            $EstatusCredito->attributes = $_POST['CreditoSeguimiento'];
            $EstatusCredito->id_credito = $model->id;
            $EstatusCredito->id_estatus_credito = 3;
            //echo "<pre>";print_r($EstatusCredito);exit;

            if ($EstatusCredito->validate()) {
                $transaction = Yii::app()->db->beginTransaction();

                try {
                    //denegacion del credito presente
                    CreditoSeguimiento::model()->updateAll(['actual' => false], 'id_credito=:id', [
                        ':id' => $model->id,
                    ]);
                    $EstatusCredito->save(false);
                    // si el credito es refinanciado
                    if ($model->refinanciado > 0 && $model->prestamos_seleccionados != '') {
                        // Activar el credito anterior
                        foreach (json_decode($model->prestamos_seleccionados, true) as $keyPs => $valuePs) {
                            CreditoSeguimiento::model()->updateAll(
                                ['actual' => false],
                                'id_credito=:id',
                                [':id' => $valuePs['id_credito']]
                            );
                            $modelCreditoAnterior = new CreditoSeguimiento();
                            $modelCreditoAnterior->id_credito = $valuePs['id_credito'];
                            $modelCreditoAnterior->id_estatus_credito = 4;
                            $modelCreditoAnterior->save();
                        }
                    }

                    if ($model->hasAjusteHaber()) {
                        AjusteHaberesSeguimiento::model()->updateAll(['actual' => false], 'id_ajuste_haberes=:id', [
                            ':id' => $model->ajuste_haberes,
                        ]);

                        $modelSeguimiento = new AjusteHaberesSeguimiento();
                        $modelSeguimiento->id_ajuste_haberes = $model->ajuste_haberes;
                        $modelSeguimiento->id_estatus_ajuste_haberes = 3; // denegado
                        $modelSeguimiento->save();
                    }

                    $transaction->commit();
                    Yii::app()->user->setFlash('error', '<b>La solicitud ha sido denegada</b>');
                    $this->redirect(['admin']);
                } catch (Exception $e) {
                    $transaction->rollBack();
                    Yii::app()->user->setFlash('error', '<b>Ocurrio un error al denegar la solicitud</b>');
                    $this->redirect(['admin']);
                }
            } else {
                Yii::app()->user->setFlash('error', '<b>Error al validar los datos</b>');
                $this->refresh();
            }
        }

        $this->render('denegarCredito', ['model' => $model, 'estatusCredito' => $EstatusCredito]);
    }

    public function actionReversarPago($id)
    {
        $model = $this->loadModel($id);

        if ($model->nominaPagoAsociada()) {
            Yii::app()->user->setFlash('error', '<strong>Error</strong>: el crédito esta presente en una nómina de pagos masivos. El reverso debe realizarse desde <strong>bandeja de pagos</strong>.');

            return $this->redirect(['admin']);
        }

        if(isset($_POST['Credito'])) {
            $model->attributes = $_POST['Credito'];

            if ($model->reversarPago()) {
                $this->redirect(['admin']);
            }
        }

        $this->render('application.modules.retiro.views.retiroParcial.reversar', [
            'model' => $model
        ]);
    }

    public function actionConsultaAsociadoCreditos()
    {
        if ($_POST['opcion'] == 1) {
            $model = DatosTxtTablaAmortizacionDiferido::model()->findByPk($_POST['id']);
            $modelAsociado = Asociado::model()->find('cedula=:cedula AND id_estatus in(1,2,4) ORDER BY idasociado desc', [':cedula' => $model->cedula]);
        } else {
            $model = PreNominaTablaAmortizacion::model()->findByPk($_POST['id']);
            $modelAsociado = $model->idTablaAmortizacion->idCredito->idAsociado;
        }

        if (! $modelAsociado) {
            echo 'Información suministrada es invalida';
            exit;
        }

        $sql = 'SELECT a.id, d.nombre_titulo as categoria, c.descripcion as plazo,id_tipo_credito,refinanciado, a.fecha_registro,nombre_estatus as estatus_credito,monto_credito, (SELECT monto_cuota FROM prestamos.credito_tabla_amortizacion
                    WHERE blnborrado = false AND idcredito = a.id
                    GROUP BY idcredito, monto_cuota, id_estatus_cuota
                    order by idcredito, id_estatus_cuota in(null, 3, 2)desc, monto_cuota desc
                    limit 1
                    )cuota_pagar
                FROM prestamos.credito AS a
                JOIN prestamos.credito_seguimiento as b ON a.id = b.id_credito AND actual = true
                JOIN prestamos.estatus_credito as e ON b.id_estatus_credito= e.id
                JOIN prestamos.tipo_credito as c ON a.id_tipo_credito = c.id
                JOIN prestamos.titulo_tipo_credito as d ON c.id_titulo_tipo_credito = d.id
                WHERE idasociado ='.$modelAsociado->idasociado;
        $data = Yii::app()->db->createCommand($sql)->queryAll();

        echo $this->renderPartial('asociadoCredito', [
            'modelAsociado' => $modelAsociado,
            'data' => $data,
        ], true);
    }

    public function actionBuscarCredito(){

        $id = (isset($_POST['id']))?(int)$_POST['id']:NULL;

        $resultado['encontrado'] = 0;

        if($id >0){

            $model = $this->loadModel($id);

            if( $model ){


                $resultado['vista'] = '<fieldset>
                                            <legend style=" font-size: 17px;"><b>Datos del solicitante</b></legend>
                                            <table class="table table-bordered">
                                                <tr>
                                                    <td style="width: 25%"><b>C&eacute;dula de identidad del solicitante</b></td>
                                                    <td style="width: 25%">'.$model->idAsociado->cedula.'</td>
                                                    <td style="width: 20%"><b>Nombres y apellidos</b></td>
                                                    <td style="width: 30%">'.$model->idAsociado->nombre.' '.$model->idAsociado->apellidos.'</td>
                                                </tr>
                                            </table>
                                        </fieldset>
                                        <fieldset>
                                            <legend style=" font-size: 17px;"><b>Datos del pr&eacute;stamo</b></legend>
                                            <table class="table table-bordered">
                                                <tr>
                                                    <td style="width: 25%"><b>Tipo de cobro</b></td>
                                                    <td style="width: 25%">'.((isset($model->idTipoCobro))?$model->idTipoCobro->descripcion:"").'</td>
                                                    <td style="width: 20%"><b>Plazo del préstamo</b></td>
                                                    <td style="width: 30%">'. ((isset($model->idTipoCredito))?$model->idTipoCredito->descripcion:"").'</td>
                                                </tr>
                                                <tr>
                                                    <td style="width: 25%"><b>Tipo de préstamo</b></td>
                                                    <td style="width: 25%">'.(($model->refinanciado==0)?"Ordinario":(($model->refinanciado==1)?"Refinanciado":"Reestructuración")).'</td>
                                                    <td style="width: 20%"><b>Monto del préstamo </b></td>
                                                    <td style="width: 30%"><?'.number_format($model->monto_credito, 2,',','.') .'</td>
                                                </tr>
                                                <tr>
                                                    <td style="width: 25%"><b>Fecha solicitud </b></td>
                                                    <td style="width: 25%">'.((!empty($model->fecha_solicita))?date("d-m-Y",strtotime($model->fecha_solicita)):"") .'</td>
                                                    <td style="width: 20%"><b>Fecha primer descuento </b></td>
                                                    <td style="width: 25%">'.((!empty($model->fecha_primer_descuento))?date("d-m-Y",strtotime($model->fecha_primer_descuento)):"") .'</td>
                                                </tr>';
                                    if($model->fecha_primer_descuento !=''){

                                        $resultado['encontrado']= 1;

                                        $resultado['vista'] .='<tr>
                                                                    <td></td>
                                                                    <td></td>
                                                                    <td style="width: 20%"><b>Nueva fecha de descuento </b></td>
                                                                    <td style="width: 25%"><div class="span6" id ="fecha_primer_descuento"><input name="Credito[fecha_primer_descuento]" id="Credito-fecha_primer_descuento" type="date" required></div></td>
                                                                </tr>';
                                    }

                                    $resultado['vista'] .='
                                            </table>
                                        </fieldset>
                                        ';
            }
        }

        echo CJSON::encode($resultado);

    }

    public function actionGuardarNuevaFechaDescuento(){

        $resultado['error'] = 1;

        $resultado['encontrado'] = 0;

        $resultado['guardado'] = 0;

        if($_POST['Credito']){

            $id = (isset($_POST['Credito']['id']))?(int)$_POST['Credito']['id']:NULL;

            if($id){

                $model = Credito::model()->findByPk($id);
                if( $model ){

                    $resultado['encontrado'] = 1;

                    $model->attributes = $_POST['Credito'];

                    $model->monto_credito = number_format($model->monto_credito,2,',','.');

                    $model->scenario = 'cambio-fecha';

                    if($model->validate()){

                        $transaction = Yii::app()->db->beginTransaction();
                        try {
                                $resultado['error'] = 0;

                                $resultado['guardado'] = 1;

                                Credito::model()->updateAll(['fecha_primer_descuento'=>$model->fecha_primer_descuento],'id=:id',[':id'=>$model->id]);

                                $modelSeguimientoActual = CreditoSeguimiento::model()->find('actual = TRUE AND id_credito=:id',[':id'=>$model->id]);

                                CreditoSeguimiento::model()->updateAll(array('actual'=>false),'id_credito=:id',array(':id'=>$model->id));

                                $modelSeguimiento = new CreditoSeguimiento();
                                $modelSeguimiento->id_credito=$model->id;
                                $modelSeguimiento->id_estatus_credito=$modelSeguimientoActual->id_estatus_credito;
                                $modelSeguimiento->observacion='Cambio de fecha de inicio del prestamo';
                                $modelSeguimiento->save();

                                $transaction->commit();

                        }
                        catch (Exception $e){
                            // throw new CHttpException(400,$e->getMessage());
                            $resultado['guardado'] = 0;
                            $resultado['error_dato'] ='<div class="alert in alert-block fade alert-error"><ul>'.$e.'</ul></div> ';
                            $transaction->rollBack();
                        }

                    }
                    else{

                        $errores = '';
                        // $errores = [];

                        foreach ($model->getErrors() as $key => $value) {
                            // $error = '';
                            foreach ($value as $keyV => $valueV) {

                                $errores .='<li>'.$valueV.'</li>';
                                // $error .= $valueV.', ';

                            }
                            // $errores[$key] = trim($error,',');

                        }

                        $resultado['error_dato'] ='<div class="alert in alert-block fade alert-error"><ul>'.$errores.'</ul></div> ';
                        // $resultado['error_dato'] =$errores;

                    }
                }
                else{

                    $resultado['mensaje_error'] = '<div class="alert in alert-block fade alert-error">El préstamo no se encuentra</div>';
                }

            }
            else{

                $resultado['mensaje_error'] = '<div class="alert in alert-block fade alert-error">Error en los datos enviado</div>';

            }
        }

        echo  CJSON::encode($resultado);

    }
}
