<?php

class AporteVoluntarioController extends Controller
{
	/**
	 * @var string the default layout for the views. Defaults to '//layouts/column2', meaning
	 * using two-column layout. See 'protected/views/layouts/column2.php'.
	 */
	public $layout='//layouts/column2';

	/**
	 * @return array action filters
	 */
	public function filters()
	{
		return array(
			'accessControl', // perform access control for CRUD operations
                        array('CrugeAccessControlFilter')
		);
	}

	/**
	 * Specifies the access control rules.
	 * This method is used by the 'accessControl' filter.
	 * @return array access control rules
	 */
    public function accessRules()
    {
        return array(
            array(
                'allow',  // allow all users to perform 'index' and 'view' actions
                'actions' => array('index', 'view', 'buscarCuenta', 'aprobar', 'generarPrenomina', 'OpcionRetiroSimple', 'CuentaBancariaSimple'),
                'users' => array('@'),
            ),
            array(
                'allow', // allow authenticated user to perform 'create' and 'update' actions
                'actions' => array(
                    'create', 'update', 'DetalleAporte', 'OpcionRetiro', 'modificarOpcionRetiro', 'RetiroAVAs',
                    'historialAporte', 'aportesMasivos', 'historialAporteEspecial', 'conceptoDetalle', 'reporteExcel',
                    'denegar'
                ),
                'users' => array('@'),
            ),
            array(
                'allow', // allow admin user to perform 'admin' and 'delete' actions
                'actions' => array('admin', 'delete', 'CreateAdministrador', 'DatosSocio', 'DetalleAporte', 'retiroAVA', 'retiroAVAs', 'pagar'),
                'users' => array('@'),
            ),
            array(
                'deny',  // deny all users
                'users' => array('*'),
            ),
        );
    }

	/**
	 * Displays a particular model.
	 * @param integer $id the ID of the model to be displayed
	 */
	public function actionView($id)
	{
		$this->render('view',array(
			'model'=>$this->loadModel($id),
		));
	}

	/**
	 * 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 aportes voluntario');
             $this->redirect( array('/cruge/ui/principal'));
        }
        $solicitud = Liquidacion::checkSolicitud($modelAsociados->idasociado);
        if (empty($solicitud)) {

			$model=new AporteVoluntario('individual');

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

			//if(Yii::app()->user->checkAccess('usuario_asociado') && !Yii::app()->user->checkAccess('usuario_administrador') ){

			 	$cedula = CrugeUserI::model()->findByPk(Yii::app()->user->id)->cedula;
	            $modelAsociado = Asociado::model()->find('cedula=:cedula AND blnborrado = false AND id_estatus=1 ORDER BY idasociado desc', array(':cedula' => $cedula));
	                
	            if(!$modelAsociado){
	                
	                Yii::app()->user->setFlash('error','Lo sentimos, no está habilitado para realizar esta acción');
	                $this->redirect( array('admin'));

	            }
			//}

			if(isset($_POST['AporteVoluntario']))
			{
                $model->attributes=$_POST['AporteVoluntario'];
	            $model->id_aportante=1;
                $model->id_asociado = $modelAsociado->idasociado;
                $model->opcion_retiro = 1;
	            $model->monto_cargado = $model->formatter($model->monto);
                $model->capitalizacion();

	            $trans = Yii::app()->db->beginTransaction();

	            try {            

		            if($model->save()){

		            	$status_voluntario = new EstatusAporteVoluntario();

		            	$status_voluntario->id_status_av = 1;
		            	$status_voluntario->id_aporte_voluntario = $model->id;
		            	$status_voluntario->id_user = Yii::app()->user->id;
		            	
		            	if($status_voluntario->save()){

		            		$trans->commit();

		            		//if(Yii::app()->user->checkAccess('usuario_asociado') && !Yii::app()->user->checkAccess('usuario_administrador') ){

				                Yii::app()->user->setFlash('success', "El aporte voluntario fue registrado exitosamente,se ecuentra en espera de aprobación");
				                $this->redirect(array('create'));

				            //}else{

				            //	Yii::app()->user->setFlash('success', "El aporte voluntario fue registrado exitosamente!");
				            //    $this->redirect(array('admin'));
				            //}

		            	}else{
                            throw new Exception("Error al guardar el estatus", 1);
                        }

                    }else{
		            	throw new Exception("Error al guardar el aporte", 2);	            	
		            }

	            } catch (Exception $e) {
	            	
	            	$trans->rollBack();

	            	//if(Yii::app()->user->checkAccess('usuario_asociado') && !Yii::app()->user->checkAccess('usuario_administrador')){

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

				    //}else{

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

			$this->render('create',array('model'=>$model));
			
		}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'));
        }
	}


	public function actionCreateAdministrador()
	{
		$model=new AporteVoluntario('individual');

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

		if(isset($_POST['AporteVoluntario']))
		{
			$model->attributes=$_POST['AporteVoluntario'];
            $modelAsociado = Asociado::model()->find('cedula=:cedula AND blnborrado = false AND id_estatus in(1,4) ORDER BY idasociado desc', array(':cedula' => $model->acedula));

            if (!empty($modelAsociado)) {

            	$monto = str_replace(".", "",$model->monto);
            	$monto = str_replace(",", ".",$monto);
            	$model->monto = $monto;

	            $model->id_aportante=1;
	            $model->id_asociado = $modelAsociado->idasociado;

	            $trans = Yii::app()->db->beginTransaction();

	            try {            

		            if($model->save()){

		            	$status_voluntario = new EstatusAporteVoluntario();

		            	$status_voluntario->id_status_av = 1;
		            	$status_voluntario->id_aporte_voluntario = $model->id;
		            	$status_voluntario->id_user = Yii::app()->user->id;
		            	
		            	if($status_voluntario->save()){

		            		$trans->commit();

		            		//if(Yii::app()->user->checkAccess('usuario_asociado') && !Yii::app()->user->checkAccess('usuario_administrador') ){

				                //Yii::app()->user->setFlash('success', "El aporte voluntario fue registrado exitosamente,se ecuentra en espera de aprobación");
				                //$this->redirect(array('create'));

				            //}else{

				            	Yii::app()->user->setFlash('success', "El aporte voluntario fue registrado exitosamente!");
				                $this->redirect(array('admin'));
				            //}

		            	}else{

		            		throw new Exception("Error al guardar el estatus", 1);
		            	}

		            }else{

		            	throw new Exception("Error al guardar el aporte", 2);	            	
		            }

	            } catch (Exception $e) {
	            	
	            	$trans->rollBack();

	            	//if(Yii::app()->user->checkAccess('usuario_asociado') && !Yii::app()->user->checkAccess('usuario_administrador')){
echo "<pre>";print_r($status_voluntario->getErrors());exit;
				        Yii::app()->user->setFlash('error', $e->getMessage());
			        	$this->redirect(array('admin'));

				    //}else{

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

            }else{

            	Yii::app()->user->setFlash('error', "No se encontro el asociado solicitado");
            	$this->redirect(array('admin'));
            }

		}

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

	public function actionRetiroAVA()
    {
        $model = new AporteVoluntario('retiro_aporte_voluntario');

        if (isset($_POST['AporteVoluntario'])) {
            $model->attributes = $_POST['AporteVoluntario'];
            $modelAsociado = Asociado::model()->find('cedula=:cedula AND blnborrado = false AND id_estatus in(1,4) ORDER BY idasociado desc', [':cedula' => $model->acedula]);

            if (! empty($modelAsociado)) {
                $modelBAsociado = AsociadoCuentaBanco::model()->find('id='.$model->id_banco_asociado);
                $monto = str_replace(',', '.', str_replace('.', '', $model->monto));

                $model->monto = $monto;
                $model->id_aportante = 1;
                $model->id_tipo_aporte_voluntario = 2;
                $model->id_asociado = $modelAsociado->idasociado;
                $model->id_banco_asociado = $modelBAsociado->id_banco;
                $model->cuenta_destino = $modelBAsociado->cuenta_bancaria;

                $trans = Yii::app()->db->beginTransaction();
                try {
                    if ($model->save()) {
                        $status_voluntario = new EstatusAporteVoluntario();

                        $status_voluntario->id_status_av = 1;
                        $status_voluntario->id_aporte_voluntario = $model->id;
                        $status_voluntario->id_user = Yii::app()->user->id;

                        if ($status_voluntario->save()) {
                            $trans->commit();

                            Yii::app()->user->setFlash('success', 'El aporte voluntario fue registrado exitosamente!');

                            $this->redirect(['admin']);
                        } else {
                            throw new Exception('Error al guardar el estatus', 1);
                        }
                    }
                } catch (Exception $e) {
                    $trans->rollBack();

                    Yii::app()->user->setFlash('error', $e->getMessage());
                    $this->redirect(['admin']);
                }
            } else {
                Yii::app()->user->setFlash('error', 'No se encontro el asociado solicitado');
                $this->redirect(['admin']);
            }
        }

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

	public function actionRetiroAVAs()
	{
		$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','No esta habilitado para realizar soliciutdes de aportes voluntario');
             $this->redirect( array('/cruge/ui/principal'));
        }

        $solicitud = Liquidacion::checkSolicitud($modelAsociado->idasociado);

        if (empty($solicitud)) {

			$model = new AporteVoluntario('retiro_aporte_voluntario_asc');


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

				$modelBAsociado = AsociadoCuentaBanco::model()->find('id='.$_POST["AporteVoluntario"]["id_banco_asociado"]);

                $monto = str_replace(",", ".",str_replace(".", "",$model->monto));

                $model->monto = $monto;

                $model->id_aportante = 1;

                $model->id_tipo_aporte_voluntario = 2;

                $model->id_asociado = $modelAsociado->idasociado;

				$model->id_banco_asociado=$modelBAsociado->id_banco;

                $trans = Yii::app()->db->beginTransaction();


                try {            

                    if($model->save()){

                        $status_voluntario = new EstatusAporteVoluntario();

                        $status_voluntario->id_status_av = 1;
                        $status_voluntario->id_aporte_voluntario = $model->id;
                        $status_voluntario->id_user = Yii::app()->user->id;
                        
                        if($status_voluntario->save()){

                            $trans->commit();

                            Yii::app()->user->setFlash('success', "El aporte voluntario fue registrado exitosamente!");

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

                        }else{

                            Yii::app()->user->setFlash('error', "El aporte voluntario fue registrado exitosamente!");
                            $this->redirect(array('admin'));
                        }

                    }
                    

                } catch (Exception $e) {
                    
                    $trans->rollBack();

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

                    //}else{

                    //  Yii::app()->user->setFlash('error', $e->getMessage());
                    //  $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 = 10;
        	

	        $this->render('retiroAVAs',array('model'=>$model,
	        									'modelAsociado'=>$modelAsociado,
	        									'sueldo'=>$sueldo,
	        									'porcentaje'=>$porcentaje,
	        								));

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

	/*###################
	AJAX PARA BUSCAR Y CARGAR DATOS DEL ASOCIADO EN APORTE VOLUNTARIO
	####################*/
	public function actionDatosSocio(){

        $dataAsociado = array();
        $dataAsociado['error']=1;
        $dataAsociado['nombre_apellido']='';
        $dataAsociado['empresa']='';
        $dataAsociado['unidad']='';
        $dataAsociado['sueldo']='';
        $dataAsociado['porc_sueldo']='';
        $dataAsociado['porcentaje']='';
        $dataAsociado['fecha_inscripcion']='';
        $dataAsociado['status']='';
        $dataAsociado['mensajeError'] = '';

        if (isset($_POST['cedula']) && $_POST['cedula'] !=0 && 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']));

	        if ($modelAsociado) {			            		

	           	$modelCreditosActivos = ReporteCreditos::model()->exists('idasociado=:idasociado AND id_estatus_credito=1',array(':idasociado'=>$modelAsociado->idasociado));

	           	if(!$modelCreditosActivos){ 				                    

	            	$dataAsociado['error'] = 0; 				                    
	            	$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;

	            		$dataAsociado['idsocio'] = $modelAsociado->idasociado; 				                    
	            		$dataAsociado['nombre_apellido'] = $modelAsociado->nombre.' '.$modelAsociado->apellidos;
	            		$dataAsociado['empresa'] = ($modelAsociado->lugartrabajo0)?$modelAsociado->lugartrabajo0->descripcion:"";			                    
	            		$dataAsociado['unidad'] =($modelAsociado->unidad)?$modelAsociado->unidad->descripcion:"";
	            		$dataAsociado['sueldo'] = number_format($sueldo,2,',','.') ; 				                    
	            		$dataAsociado['porcentaje'] = $porcentaje.'%'; 				                    
	            		$dataAsociado['fecha_inscripcion'] = $modelAsociado->fechaingreso ;
	            		$dataAsociado['estatus'] = strtoupper($modelAsociado->idEstatus->nombre_estatus);
	            		$dataAsociado['fecha_fallece'] = date('d-m-Y', strtotime($modelAsociado->fecha_estatus)) ;
	           	}else{ 				                    

	            	$dataAsociado['mensajeError'] = '<span class="help-inline error">La cédula suministrada no se encuentra registrada.</span>';
	            }

	        }else{ 	                    

	         $dataAsociado['mensajeError'] = '<span class="help-inline error">Cédula no registrada o pertenece a un asociado con un estatus diferente.</span>';
	        }
        }
        echo CJSON::encode($dataAsociado);
    }
        
        
    /**
     * Aprobar un aporte voluntario (una vez aprobado, se contabiliza en sus haberes)
     *
     * @param integer $id el ID del modelo a aprobar
     */
    public function actionAprobar($id)
    {
        $model = $this->loadModel($id);
        $model->fecha_comprobante = date('d-m-Y');
        $model->fecha_pago = date('d-m-Y');
        $modelEstatus = new EstatusAporteVoluntario();

        if ( $model->id_tipo_aporte_voluntario == 1 ){

        	$modelEstatus->scenario = 'aprobarAporte';

        }
        else{

        	$modelEstatus->scenario = 'aprobarRetiro';
        	
        	$model->scenario = 'aprobarRetiro';
        }

        $nuevo_valor = false;

        if (isset($_POST['EstatusAporteVoluntario']) && isset($_POST['AporteVoluntario'])) {
            if (! empty($_POST['AporteVoluntario']['monto'])) {
                $monto_formateado = str_replace('.', '', $_POST['AporteVoluntario']['monto']);
                $monto_formateado = str_replace(',', '.', $monto_formateado);

                if ($monto_formateado != $model->monto) {
                    $model->monto = floatval($monto_formateado);
                    $nuevo_valor = true;
                }
            }

            if (! empty($_POST['AporteVoluntario']['fecha_pago']) && $_POST['AporteVoluntario']['fecha_pago'] != $model->fecha_pago) {
                $fecha_formato = date('Y-m-d', strtotime($_POST['AporteVoluntario']['fecha_pago']));
                $model->fecha_pago = $fecha_formato;
                $nuevo_valor = true;
            }

            if (! empty($_POST['AporteVoluntario']['referencia']) && $_POST['AporteVoluntario']['referencia'] != $model->referencia) {
                $model->referencia = $_POST['AporteVoluntario']['referencia'];
                $nuevo_valor = true;
            }

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

            $modelEstatus->attributes = $_POST['EstatusAporteVoluntario'];

            $trans = Yii::app()->db->beginTransaction();

            try {
                if (isset($_POST['yt0'])) {
                    if ($nuevo_valor = true) {
                        $model->update();
                    }

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

                    $modelEstatus->id_status_av = 2;
                    $modelEstatus->id_aporte_voluntario = $model->id;
                    $modelEstatus->id_user = Yii::app()->user->id;

                    if (! $modelEstatus->save(true)) {
                        throw new Exception('Error al aprobar el aporte!', 1);
                    }

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

                    $trans->commit();

                    Yii::app()->user->setFlash('success', 'Aporte voluntario aprobado.');
                    $this->redirect(array('admin'));
                } elseif (isset($_POST['yt1'])) {
                    EstatusAporteVoluntario::model()->updateAll(array('actual' => false), 'id_aporte_voluntario=:id', array(':id' => $model->id));

                    $modelEstatus->id_status_av = 7;
                    $modelEstatus->id_aporte_voluntario = $model->id;
                    $modelEstatus->id_user = Yii::app()->user->id;

                    if (! $modelEstatus->save(true)) {
                        throw new Exception('Error al denegar el aporte!', 3);
                    }

                    $trans->commit();
                    Yii::app()->user->setFlash('success', 'Aporte voluntario denegado');
                    $this->redirect(array('admin'));
                }
            } catch (Exception $e) {
                $trans->rollBack();
                Yii::app()->user->setFlash('error', $e->getMessage());
                $this->redirect(array('admin'));
            }
        }

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

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

    public function actionOpcionRetiro($id, $view = false)
    {
        $model = $this->loadModel($id);

        if (! $model->canEdit()) {
            Yii::app()->user->setFlash('error', 'No tiene permisos para realizar esta acción.');

            return $this->redirect(array('datosTxtIntegrado/aprobarTxt', 'id' => $model->id_txt_integrado));
        }

        $opcion_retiro = $model->opcion_retiro;

        if(isset($_POST['AporteVoluntario'])) {
            $model->attributes = $_POST['AporteVoluntario'];
            $model->aplicarComisionAdministrativa();
            if (! $model->actualizarCuentaBanco()) {
                Yii::app()->user->setFlash('warning', '<strong>El asociado debe tener una cuenta de banco principal establecida.</strong>');

                return $this->redirect(array('OpcionRetiro', 'id' => $id));
            }

            if ($model->save()) {
                if ($view) {
                    return $this->redirect(array('datosTxtIntegrado/view', 'id' => $model->id_txt_integrado));
                }

                return $this->redirect(array('datosTxtIntegrado/aprobarTxt', 'id' => $model->id_txt_integrado));
            }
        }
        $model->opcion_retiro = $opcion_retiro;

        return $this->render('update_AE', array(
            'model' => $model,
            'view' => $view,
        ));
    }
    public function actionPagar($id)
    {
        $model = $this->loadModel($id);

        $detalle_pago = new ProcesoPago('pagos');
        
        $model->fecha_comprobante = date('d-m-Y');

        if ($model->estatusActual->id_status_av == 5) {

            Yii::app()->user->setFlash('error', '<b>El retiro de aporte voluntario con el codigo: '.$id.', ya está pagado</b>');
            $this->redirect(['admin']);

        }

        $modelEstatus = new EstatusAporteVoluntario();
        $modelEstatus->id_status_av = 5;
        $modelEstatus->id_aporte_voluntario = $model->id;
        $modelEstatus->id_user = Yii::app()->user->id;

        $model->scenario = 'pagar';


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


            $model->attributes = $_POST['AporteVoluntario'];

            $detalle_pago->attributes = $_POST['ProcesoPago'];

            Yii::import('application.modules.configuracion.models.*', true);

            if (ConfContable::config('fecha_comprobante') == 'SI') {

                $model->fecha_comprobante = $_POST['Credito']['fecha_comprobante'];

            }

            $model->fecha_pago = $detalle_pago->fecha_pago;



            $detalle_pago->attributes = $_POST['ProcesoPago'];

            $detalle_pago->id_proceso = $model->id;

            $detalle_pago->id_nombre_proceso = 7;

            $detalle_pago->id_banco = $model->id_banco_destino;

            $detalle_pago->referencia = $model->referencia;


            if (!empty($modelEstatusRetiroParcial->observacion)) {

                $detalle_pago->observacion = $modelEstatusRetiroParcial->observacion;

            }else{

                $detalle_pago->observacion = 'Pago de Bs. '.$model->monto.' por concepto de retiro de aporte voluntario del asociado: '.$model->idAsociado->nombre.' '.$model->idAsociado->apellidos;
            }

            $detalle_pago->id_usuario = Yii::app()->user->id;

            $monto_formato = floatval($model->monto);

            $detalle_pago->monto_pagado = number_format($monto_formato, 2, ".","");

            if ($modelEstatus->validate() && $model->validate()) {
                $transaction = Yii::app()->db->beginTransaction();
                try {

                	$valido = false;
                	if($detalle_pago->save()){

	                	if($model->save()){

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

		                    if ($modelEstatus->save()) {
                                $detalle_pago->refresh();
                                $model->setProcesoPago($detalle_pago->id);
                                //////////////////////////// Contabilización Comprobante Inicio ////////////////////////////
                                Yii::import('application.modules.contable.models.comprobantes.voluntario.*', true);
                                Yii::import('application.modules.contable.models.comprobantes.*', true);
                                (new PagarRetiro($model))->contabilizar();
                                //////////////////////////// Contabilización Comprobante Fin ///////////////////////////////

		                    	$transaction->commit();
		                    	$valido = true;
		                    }
						}

                	}
                	else{

		                throw new Exception("Error al guardar el pago");
		            }


					if($valido){

	                    Yii::app()->user->setFlash('success', 'El retiro de aporte voluntario fué pagado y contabilizado de forma exitosa.');
					}
					else{

	                    Yii::app()->user->setFlash('error', 'ocurrio un error al tratar de pagar el retiro');
						$transaction->rollback();

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

                } catch (Exception $e) {
                    $transaction->rollback();
                    Yii::app()->user->setFlash('error', $e->getMessage());
                    $this->redirect(['admin']);
                }
            }
        }

        $this->render('pagar', [
            'model' => $model,
            'modelEstatus' => $modelEstatus,
            'pago' => $detalle_pago
        ]);
    }

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

        if (Yii::app()->user->checkAccess('usuario_asociado') && ! $model->editar()) {
            Yii::app()->user->setFlash('error', 'No tiene permisos para realizar esta acción.');

            return $this->redirect(array('aportesMasivos'));
        }

        $opcion_retiro = $model->opcion_retiro;

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

            if (! $model->actualizarCuentaBanco()) {
                Yii::app()->user->setFlash('warning', '<strong>Debe definir una cuenta de como principal o registrar una como principal para poder continuar.</strong>');

                return $this->redirect(array('modificarOpcionRetiro', 'id' => $id));
            }

            if($model->save()) {
                return $this->redirect(array('historialAporte', 'id' => $id));
            }
        }
        $model->opcion_retiro = $opcion_retiro;

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

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

        if (Yii::app()->user->checkAccess('usuario_asociado') && ! $model->editar()) {
            Yii::app()->user->setFlash('error', 'No tiene permisos para realizar esta acción.');

            return $this->redirect(array('aportesMasivos'));
        }

        if (Yii::app()->user->checkAccess('usuario_administrador')) {
            return $this->redirect(array('historialAporteEspecial', 'id' => $model->id));
        }

        $modelAportes = new VariacionesAporteVoluntario('search');

        if(isset($_POST['AporteVoluntario'])) {
            $modelAportes->attributes = $_POST['AporteVoluntario'];
        }
        return $this->render('historico_aportes', array(
            'model' => $model,
            'modelAportes' => $modelAportes,
        ));
    }

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

        if (! $model->canEdit()) {
            Yii::app()->user->setFlash('error', 'No tiene permisos para realizar esta acción.');
            return $this->redirect(array('datosTxtIntegrado/aprobarTxt', 'id' => $model->id_txt_integrado));
        }

        $modelAportes = new VariacionesAporteVoluntario('search');

        if(isset($_POST['AporteVoluntario'])) {
            $modelAportes->attributes = $_POST['AporteVoluntario'];
        }
        return $this->render('historico_aportes', array(
            'model' => $model,
            'modelAportes' => $modelAportes,
        ));
    }

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

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

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

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

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

            if (! $model->actualizarCuentaBanco()) {
                Yii::app()->user->setFlash('warning', '<strong>El asociado debe tener una cuenta de banco principal establecida.</strong>');

                return $this->redirect(array('CuentaBancariaSimple', 'id' => $id));
            }

            if ($model->save()) {
                return $this->redirect(array('datosTxtIntegrado/view', 'id' => $model->id_txt_integrado));
            }
        }

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

	/**
	 * Deletes a particular model.
	 * If deletion is successful, the browser will be redirected to the 'admin' page.
	 * @param integer $id the ID of the model to be deleted
	 */
	public function actionDelete($id)
	{
		if(Yii::app()->request->isPostRequest)
		{
			// 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.');
	}

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

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

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

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

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

        public function actionBuscarCuenta()
	{
            if(isset($_POST['id']))
                {
                
                    $banco=  ParamBancos::model()->findByPk($_POST['id']);
                    if($banco)echo $banco->num_cuenta;
                    else echo 'no existe';
                    
                }
             else echo 'fallo';   
        }
        
                /***
         * Generar Prenomina
         * 
         * 
         */
//        public function actionGenerarPrenomina()
//        {
//            $model= new AporteVoluntario;
//            $modelAsociado= new Asociado('prenomia_aporte_voluntario');
//            
//            
//            
//            
//            
//            
//            
//            
//          $this->render('prenomina',array(
//			'model'=>$model,
//                        'modelAsociado'=>$modelAsociado,
//		));  
//            
//        }
        
        
        
	/**
	 * Manages all models.
	 */
	public function actionAdmin()
	{
		$model=new AporteVoluntario('search');
		$model->unsetAttributes();  // clear any default values
		if(isset($_GET['AporteVoluntario']))
			$model->attributes=$_GET['AporteVoluntario'];

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

	public function actionDetalleAporte($id){

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

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

	}

    public function actionAportesMasivos()
    {
        $modelAsociado = null;
        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)
            );
        }

        $modelAportes = new AporteVoluntario('search');

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

        $this->render('aportes_masivos', array(
            'modelAsociado' => $modelAsociado,
            'modelAportes' => $modelAportes,
        ));
    }

    public function actionConceptoDetalle($tipo, $cedula)
    {
        $modelAsociado = Asociado::model()->find('cedula=:cedula AND blnborrado = false AND id_estatus in(1,4) ORDER BY idasociado desc', [
            'cedula' => $cedula
        ]);

        if (! $modelAsociado) {
            echo json_encode([
                'success' => false,
                'mensaje' => 'El asociado no esta registrado en la caja',
            ]);
            return;
        }

        switch ($tipo) {
            case 'capitalizado':
                $titulo = 'Aporte voluntarios capitalizados';
                $ocultar = 1;
                break;
            case 'retirado':
                $titulo = 'Aporte voluntarios retirados';
                $ocultar = 2;
                break;
        }

        echo json_encode([
            'success' => true,
            'content' => $this->renderPartial('_detalleAporteVoluntario', [
                'id' => $modelAsociado->idasociado,
                'titulo' => $titulo,
                'ocultar' => $ocultar,
            ], true),
        ]);
    }

    public function actionReporteExcel()
    {
        $datos = $_SESSION['datos_filtrados'];

        if (count($datos) == 0) {
            exit;
        }

        $datos = $datos->getData();

        if (count($datos) == 0) {
            exit;
        }

        $phpExcelPath = Yii::getPathOfAlias('ext.Excel.PHPExcel.Classes');
        $phpExcelPath2 = Yii::getPathOfAlias('application.extensions.Excel.PHPExcel.Classes.PHPExcel');
        spl_autoload_unregister(array('YiiBase', 'autoload'));
        include $phpExcelPath.DIRECTORY_SEPARATOR.'PHPExcel.php';
        include $phpExcelPath.DIRECTORY_SEPARATOR.'PHPExcel'.DIRECTORY_SEPARATOR.'Reader'.DIRECTORY_SEPARATOR.'Excel2007.php';
        include $phpExcelPath2.DIRECTORY_SEPARATOR.'IOFactory.php';
        spl_autoload_register(array('YiiBase', 'autoload'));
        $excel = new PHPExcel();

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

        $columna = 0;
        foreach ([
            'Cédula', 'Nombres y apellidos', 'Unidad', 'Tipo aporte voluntario', 'Banco de destino', 'Número de cuenta',
            'referencia', 'Monto', 'Fecha de solicitud', 'Fecha estatus', 'Estatus'
        ] as $titulo) {
            $excel->getActiveSheet()->getStyleByColumnAndRow($columna, 1)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
            $excel->getActiveSheet()->getStyleByColumnAndRow($columna, 1)->getFont()->setBold(true);
            $excel->getActiveSheet()->getStyleByColumnAndRow($columna, 1)->getFont()->getColor()->setARGB(PHPExcel_Style_Color::COLOR_WHITE);
            $excel->getActiveSheet()->getStyleByColumnAndRow($columna, 1)->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID);
            $excel->getActiveSheet()->getStyleByColumnAndRow($columna, 1)->getFill()->getStartColor()->setARGB('1C336E');
            $excel->getActiveSheet()->setCellValueByColumnAndRow($columna, 1,  $titulo);
            $columna++;
        }

        $fila = 2;
        foreach ($datos as $campos) {
            $asociado = $campos->idAsociado;
            $excel->getActiveSheet()->setCellValueByColumnAndRow(0, $fila,  $asociado->cedula);
            $excel->getActiveSheet()->setCellValueByColumnAndRow(1, $fila,  $asociado->nombre());
            $excel->getActiveSheet()->setCellValueByColumnAndRow(2, $fila,  $asociado->unidad->descripcion);
            $excel->getActiveSheet()->setCellValueByColumnAndRow(3, $fila,  isset($campos->idTipoAporteVoluntario)
                ? $campos->idTipoAporteVoluntario->descripcion 
                : ''
            );

            if ($campos->id_tipo_aporte_voluntario == 1) {
                $excel->getActiveSheet()->setCellValueByColumnAndRow(4, $fila,  isset($campos->idBancoDestino->banco)
                    ? $campos->idBancoDestino->banco 
                    : ''
                );
            } else {
                $excel->getActiveSheet()->setCellValueByColumnAndRow(4, $fila,  isset($campos->bancoAso)
                    ? $campos->bancoAso->descripcion
                    : ''
                );
            }

            $excel->getActiveSheet()->setCellValueExplicitByColumnAndRow(5, $fila, $campos->cuenta_destino);
            $excel->getActiveSheet()->setCellValueByColumnAndRow(6, $fila, $campos->referencia);
            $excel->getActiveSheet()->setCellValueByColumnAndRow(7, $fila, $campos->monto);
            $excel->getActiveSheet()->getStyleByColumnAndRow(7, $fila)->getNumberFormat()->setFormatCode('#,##0.00');
            $excel->getActiveSheet()->getStyleByColumnAndRow(7, $fila)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);

            if ($campos->fecha_solicita == '') {
                $excel->getActiveSheet()->setCellValueByColumnAndRow(8, $fila, '');
            } else {
                $excel->getActiveSheet()->setCellValueByColumnAndRow(8, $fila, Yii::app()->format->date($campos->fecha_solicita));
            }

            $excel->getActiveSheet()->setCellValueByColumnAndRow(9, $fila, Yii::app()->format->date($campos->fecha_status));
            $excel->getActiveSheet()->setCellValueByColumnAndRow(10, $fila, $campos->nombre_estatus);
            $fila++;
        }

        // Total
        $excel->getActiveSheet()->setCellValueByColumnAndRow(0, $fila, 'Total');
        $excel->getActiveSheet()->getStyleByColumnAndRow(0, $fila)->getFont()->setBold(true);

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

        header('Content-type: application/vnd.ms-excel');
        header('Content-Disposition: attachment; filename="Aportes voluntarios.xlsx"');

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

	/**
	 * 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=AporteVoluntario::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']==='aporte-voluntario-form')
		{
			echo CActiveForm::validate($model);
			Yii::app()->end();
		}
	}
}
