<?php

class LiquidacionController 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 array(
            array('allow',  // allow all users to perform 'index' and 'view' actions
                'actions'=>array('index','view'),
                'users'=>array('@'),
            ),
            array('allow', // allow authenticated user to perform 'create' and 'update' actions
                'actions'=>array('txt','SolicitudLiquidacionAdmin','reporteLiquidacion','solicitudLiquidacion',
                    'MigrarPagoLote','Pagar','Migrar_form','Migra_liquidacion','create','admin','adminAnalista','update',
                    'aprobar','denegarLiquidacion','reporte','pagado', 'GetCuenta', 'ficha', 'conceptoDetalle'),
                'users'=>array('@'),
            ),
            array('allow', // allow admin user to perform 'admin' and 'delete' actions
                'actions'=>array('delete'),
                'users'=>array('@'),
            ),
            array('deny',  // deny all users
                'users'=>array('*'),
            ),
        );
        // return array(array('CrugeAccessControlFilter'));
    }

    public function actionView($id = null)
    {
        $model = $this->loadModel($id);
        $detallePago = ProcesoPago::model()->find('id_proceso=:proceso AND actual=true and id_nombre_proceso=3', [':proceso' => $model->id]);

        $fichaLiquidacion = new FichaLiquidacion();
        $fichaLiquidacion->setDatos($model->ficha_liquidacion);

        $this->render('view', [
            'model' => $model,
            'detalle' => $detallePago,
            'fichaLiquidacion' => $fichaLiquidacion,
        ]);
    }

    public function actionConceptoDetalle()
    {
        $cedula = (new Warp($_GET))->get('cedula');
        $type = (new Warp($_GET))->get('type');
        $view = (new Warp($_GET))->get('view');
        $option = (new Warp($_GET))->get('options', []);
        $id_liquidacion = (new Warp($_GET))->get('liquidacion');

        $modelAsociado = Asociado::model()->find([
            'condition' => 'cedula=:cedula AND blnborrado IS FALSE',
            'order' => 'idasociado DESC',
            'params' => [
                'cedula' => $cedula
            ]
        ]);

        if ($view == 'false') {
            $activeFichaDetalle = new ActiveFichaDetalle(
                $modelAsociado,
                $option
            );

            $detalles = $activeFichaDetalle->get($type);
        } else {
            $model = $this->loadModel($id_liquidacion);

            $fichaLiquidacion = new FichaLiquidacion();
            $fichaLiquidacion->setDatos($model->ficha_liquidacion);

            $staticFichaDetalle = new StaticFichaDetalle($fichaLiquidacion);

            $detalles = $staticFichaDetalle->get($type);
        }

        echo $this->renderPartial('_conceptoDetalle', [
            'detalles' => $detalles
        ], true);
    }

    public function actionSolicitudLiquidacion($id)
    {
        $model = $this->loadModel($id);
        $modelEmpresa = Empresa::model()->find();
        $estatus = EstatusLiquidacion::model()->find('id_liquidacion=:id and actual=true', [':id' => $model->id]);
        $usuario = CrugeUserI::model()->findByPk(Yii::app()->user->id)->nombres.' '.CrugeUserI::model()->findByPk(Yii::app()->user->id)->apellidos;
        $pdf = Yii::createComponent('application.extensions.mpdf60.mpdf');

        $titulo = 'Solicitud de Liquidación<br>';
        if ($model->idEstatus == 2) {
            $titulo = 'Liquidación aprobada<br>';
        }

        if ($model->idEstatus == 3) {
            $titulo = 'Liquidación denegada<br>';
        }

        if ($model->idEstatus == 4) {
            $titulo = 'Liquidación pagada<br>';
        }

        $mpdf = new mPDF('win-1252', 'LETTER', 8, '', 15, 15, 20, 15, 5, 5);
        $mpdf->SetHeader([
            'L' => [
                'content' => empty($modelEmpresa->logo)
                    ? '<img src='.dirname(Yii::app()->getBasePath())."/images/logo.png alt='Logo' width ='40px' heigth='40px'/>" 
                    : "<img src='".dirname(Yii::app()->getBasePath()).'/images/'.$modelEmpresa->logo."' alt='Logo' width ='40px' heigth='40px'/>",
            ],
            'R' => [
                'content' => $titulo,
                'font-style' => 'BI',
                'font-family' => 'serif',
                'color' => '#000000',
            ],
            'line' => 0,
        ], 'O');
        $mpdf->defaultfooterfontsize = 6;
        $mpdf->SetFooter('Elaborado por:<br>'.$usuario.' <br>{DATE d/m/Y} |'.$modelEmpresa->dir_emp.'| Página {PAGENO}/{nbpg}');
        $fichaLiquidacion = new FichaLiquidacion();
        $fichaLiquidacion->setDatos($model->ficha_liquidacion);

        $mpdf->WriteHTML($this->renderPartial('solicitudLiquidacion', [
            'model' => $model,
            'modelEmpresa' => $modelEmpresa,
            'estatusLiquidacion' => $estatus,
            'fichaLiquidacion' => $fichaLiquidacion,
        ], true));

        $mpdf->Output('Solicitud de liquidación('.date('d-m-Y').').pdf', 'D');
        exit;
    }

    /**
     * Creates a new model.
     * If creation is successful, the browser will be redirected to the 'view' page.
     */
    public function actionCreate()
        {
            $modelAsociado = Asociado::model()->find('cedula=:cedula AND blnborrado = false AND id_estatus =1  ORDER BY idasociado desc', [':cedula' => CrugeUserI::model()->findByPk(Yii::app()->user->id)->cedula]);

            if (! $modelAsociado) {
                Yii::app()->user->setFlash('error', '<b>Usted no esta habilitado para realizar la solicitud de liquidación.</b>');
                $this->redirect(['admin']);
            }

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

            if (! empty($solicitud)) {
                Yii::app()->user->setFlash('error', '<b>Ud. posee una solicitud de liquidación registrada.</b>');
                $this->redirect(['admin']);
            }

            $validarLiquidacion = Liquidacion::validarSolcitudLiquidacion($modelAsociado->idasociado);
            if ($validarLiquidacion['valido'] == 0) {
                Yii::app()->user->setFlash('error', $validarLiquidacion['mensaje']);
                $this->redirect(['admin']);
            }

            $model = new Liquidacion('solicitudLiquidacionAsociado');

            if ($modelAsociado->fechaingreso != '') {
                $modelAsociado->fechaingreso = date('d/m/Y', strtotime($modelAsociado->fechaingreso));
            }

            $model->idasociado = $modelAsociado->idasociado;
            $fichaLiquidacion = new FichaLiquidacion($modelAsociado);

            if (isset($_POST['Liquidacion'])) {
                $result = Liquidacion::CheckDeudas($modelAsociado->idasociado);

                if (! empty($result['bool']['prest']) || ! empty($result['bool']['ret_parc'])) {
                    if ($result['bool']['prest'] == 1 && $result['bool']['ret_parc'] == 1) {
                        Yii::app()->user->setFlash('error', 'Usted posee '.$result['msgs']['prest'].' y '.$result['msgs']['ret_parc'].' con estatus APROBADO, debe esperar la ejecución de pagos o contactar al Administrador del sistema antes de proceder a solicitar la liquidación!');

                        return $this->redirect(['create']);
                    } elseif ($result['bool']['prest'] == 1 && $result['bool']['ret_parc'] == '') {
                        Yii::app()->user->setFlash('error', 'Usted posee '.$result['msgs']['prest'].' con estatus APROBADO, debe esperar la ejecución de pagos o contactar al Administrador del sistema antes de proceder a solicitar la liquidación!');

                        return $this->redirect(['create']);
                    } elseif ($result['bool']['prest'] == '' && $result['bool']['ret_parc'] == 1) {
                        Yii::app()->user->setFlash('error', 'Usted posee '.$result['msgs']['ret_parc'].' con estatus APROBADO, debe esperar la ejecución de pagos o contactar al Administrador del sistema antes de proceder a solicitar la liquidación!');

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

                $model->attributes = $_POST['Liquidacion'];
                $model->ficha_liquidacion = $fichaLiquidacion->toJson();
                $model->monto_pagar = $fichaLiquidacion->find('totales.total_a_depositar');
                $model->monto_total_deuda = $fichaLiquidacion->find('totales.deducciones');
                $model->monto_total_disponible = $fichaLiquidacion->find('totales.asignaciones');

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

                        if (! $model->save()) {
                            throw new Exception('No se puedo guardar la liquidación');
                        }

                        //prestamos en solicitud
                        $modelPrestamos1 = ReporteCreditos::model()->findAll('idasociado=:idasociado AND id_estatus_credito=1', [':idasociado' => $modelAsociado->idasociado]);
                        if ($modelPrestamos1) {
                            foreach ($modelPrestamos1 as $key => $value) {
                                CreditoSeguimiento::model()->updateAll(['actual' => false], 'id_credito=:id', [':id' => $value->idcredito]);
                                $creditoSeguimiento = new CreditoSeguimiento();
                                $creditoSeguimiento->id_credito = $value->idcredito;
                                $creditoSeguimiento->id_estatus_credito = 3;
                                $creditoSeguimiento->save();
                            }
                        }

                        //Solicitud de Refinanciamiento
                        $modelPrestamos2 = ReporteCreditos::model()->findAll('idasociado=:idasociado AND id_estatus_credito=6', [':idasociado' => $modelAsociado->idasociado]);

                        if ($modelPrestamos2) {
                            foreach ($modelPrestamos2 as $key => $value) {
                                CreditoSeguimiento::model()->updateAll(['actual' => false], 'id_credito=:id', [':id' => $value->idcredito]);
                                $creditoSeguimiento = new CreditoSeguimiento();
                                $creditoSeguimiento->id_credito = $value->idcredito;
                                $creditoSeguimiento->id_estatus_credito = 10;
                                $creditoSeguimiento->save();

                                $modelCreditoRefinanciado = Credito::model()->findByPk($value->idcredito);
                                CreditoSeguimiento::model()->updateAll(['actual' => false], 'id_credito=:id', [':id' => $modelCreditoRefinanciado->id_credito_padre]);
                                $creditoSeguimiento = new CreditoSeguimiento();
                                $creditoSeguimiento->id_credito = $value->idcredito;
                                $creditoSeguimiento->id_estatus_credito = 17;
                                $creditoSeguimiento->save();
                            }
                        }

                        //solicitud de retiro parcial
                        $modelRetroParcial = RetiroParcial::model()->with('estatusRetiroParcial')->findAll('id_estatus_retiro = 1 AND actual = true AND idasociado=:idasociado', [':idasociado' => $modelAsociado->idasociado]);
                        foreach ($modelRetroParcial as $key => $value) {
                            EstatusRetiroParcial::model()->updateAll(['actual' => false], 'id_retiro_parcial=:id', [':id' => $value->id]);
                            $modelEstatusRetiro = new EstatusRetiroParcial();
                            $modelEstatusRetiro->id_retiro_parcial = $value->id;
                            $modelEstatusRetiro->id_estatus_retiro = 3;
                            $modelEstatusRetiro->save();
                        }

                        $modelEstatusLiquidacion = new EstatusLiquidacion();
                        $modelEstatusLiquidacion->id_liquidacion = $model->id;
                        $modelEstatusLiquidacion->id_estatus_liquidacion = 1;
                        $modelEstatusLiquidacion->ficha_liquidacion = $fichaLiquidacion->toJson();
                        if (! $modelEstatusLiquidacion->save()) {
                            throw new Exception('A ocurrido un inconveniente al intentar guardar su solicitud');
                        }

                        $transaction->commit();
                        Yii::app()->user->setFlash('success', 'La solicitud de liquidacion se ha registrado exitosamente');
                        $this->redirect(['view', 'id' => $model->id]);
                    } catch (Exception $e) {
                        $transaction->rollBack();
                        Yii::app()->user->setFlash('error', $e->getMessage());
                        $this->redirect(['admin']);
                    }
                }
            }

            $this->render('create', [
                'model' => $model,
                'modelAsociado' => $modelAsociado,
                'fichaLiquidacion' => $fichaLiquidacion
            ]);
        }

    public function actionSolicitudLiquidacionAdmin()
    {
        $model = new Liquidacion('solicitudLiquidacionAdministrador');
        $modelEstatusLiquidacion = new EstatusLiquidacion('solicitudLiquidacionAdministrador');
        $modelEstatusLiquidacion->fecha_registro = date('d-m-Y');

        if (isset($_POST['Liquidacion'])) {
            $modelAsociado = Asociado::model()->find('cedula=:cedula AND blnborrado = false AND id_estatus in(1,3,4,5) ORDER BY idasociado desc', [':cedula' => $_POST['Liquidacion']['cedula']]);
            if (! $modelAsociado) {
                Yii::app()->user->setFlash('error', '<b>Asociado no encontrado.</b>');

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

            $result = Liquidacion::CheckDeudas($modelAsociado->idasociado);
            if (! empty($result['bool']['prest']) || ! empty($result['bool']['ret_parc'])) {
                $full_name = $modelAsociado->nombre.' '.$modelAsociado->apellidos;

                if ($result['bool']['prest'] == 1 && $result['bool']['ret_parc'] == 1) {
                    Yii::app()->user->setFlash('error', 'El asociado '.$full_name.' posee '.$result['msgs']['prest'].' y '.$result['msgs']['ret_parc'].' con estatus APROBADO, debe esperar la ejecución de pagos o contactar al Administrador del sistema antes de proceder a realizar la solcitud de liquidación!');
                    return $this->redirect(['solicitudLiquidacionAdmin']);
                }

                if ($result['bool']['prest'] == 1 && $result['bool']['ret_parc'] == '') {
                    Yii::app()->user->setFlash('error', 'El asociado '.$full_name.' posee '.$result['msgs']['prest'].' con estatus APROBADO, debe esperar la ejecución de pagos o contactar al Administrador del sistema antes de proceder a realizar la solcitud de liquidación!');
                    return $this->redirect(['solicitudLiquidacionAdmin']);
                }

                if ($result['bool']['prest'] == '' && $result['bool']['ret_parc'] == 1) {
                    Yii::app()->user->setFlash('error', 'El asociado '.$full_name.' posee '.$result['msgs']['ret_parc'].' con estatus APROBADO, debe esperar la ejecución de pagos o contactar al Administrador del sistema antes de proceder a realizar la solcitud de liquidación!');
                    return $this->redirect(['solicitudLiquidacionAdmin']);
                }
            }

            $fichaLiquidacion = new FichaLiquidacion($modelAsociado);

            $model->attributes = $_POST['Liquidacion'];
            $model->ficha_liquidacion = $fichaLiquidacion->toJson();
            $model->monto_pagar = $fichaLiquidacion->find('totales.total_a_depositar');
            $model->monto_total_deuda = $fichaLiquidacion->find('totales.deducciones');
            $model->monto_total_disponible = $fichaLiquidacion->find('totales.asignaciones');

            $modelEstatusLiquidacion->attributes = $_POST['EstatusLiquidacion'];
            $modelEstatusLiquidacion->ficha_liquidacion = $fichaLiquidacion->toJson();

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

                    if ($model->save()) {
                        //prestamos en solicitud
                        $modelPrestamos1 = ReporteCreditos::model()->findAll('idasociado=:idasociado AND id_estatus_credito=1', [':idasociado' => $model->idasociado]);
                        if ($modelPrestamos1) {
                            foreach ($modelPrestamos1 as $key => $value) {
                                CreditoSeguimiento::model()->updateAll(['actual' => false], 'id_credito=:id', [':id' => $value->idcredito]);
                                $creditoSeguimiento = new CreditoSeguimiento();
                                $creditoSeguimiento->id_credito = $value->idcredito;
                                $creditoSeguimiento->id_estatus_credito = 3;
                                $creditoSeguimiento->save();
                            }
                        }

                        //Solicitud de Refinanciamiento
                        $modelPrestamos2 = ReporteCreditos::model()->findAll('idasociado=:idasociado AND id_estatus_credito=6', [':idasociado' => $model->idasociado]);
                        if ($modelPrestamos2) {
                            foreach ($modelPrestamos2 as $key => $value) {
                                CreditoSeguimiento::model()->updateAll(['actual' => false], 'id_credito=:id', [':id' => $value->idcredito]);
                                $creditoSeguimiento = new CreditoSeguimiento();
                                $creditoSeguimiento->id_credito = $value->idcredito;
                                $creditoSeguimiento->id_estatus_credito = 10;
                                $creditoSeguimiento->save();

                                $modelCreditoRefinanciado = Credito::model()->findByPk($value->idcredito);
                                CreditoSeguimiento::model()->updateAll(['actual' => false], 'id_credito=:id', [':id' => $modelCreditoRefinanciado->id_credito_padre]);
                                $creditoSeguimiento = new CreditoSeguimiento();
                                $creditoSeguimiento->id_credito = $modelCreditoRefinanciado->id_credito_padre;
                                $creditoSeguimiento->id_estatus_credito = 4;
                                $creditoSeguimiento->save();
                            }
                        }

                        //Solicitud de Reestructuracion
                        $modelPrestamos3 = ReporteCreditos::model()->findAll('idasociado=:idasociado AND id_estatus_credito=8', [':idasociado' => $model->idasociado]);
                        if ($modelPrestamos3) {
                            foreach ($modelPrestamos3 as $key => $value) {
                                CreditoSeguimiento::model()->updateAll(['actual' => false], 'id_credito=:id', [':id' => $value->idcredito]);
                                $creditoSeguimiento = new CreditoSeguimiento();
                                $creditoSeguimiento->id_credito = $value->idcredito;
                                $creditoSeguimiento->id_estatus_credito = 11;
                                $creditoSeguimiento->save();

                                $modelCreditoRefinanciado = Credito::model()->findByPk($value->idcredito);
                                CreditoSeguimiento::model()->updateAll(['actual' => false], 'id_credito=:id', [':id' => $modelCreditoRefinanciado->id_credito_padre]);
                                $creditoSeguimiento = new CreditoSeguimiento();
                                $creditoSeguimiento->id_credito = $modelCreditoRefinanciado->id_credito_padre;
                                $creditoSeguimiento->id_estatus_credito = 4;
                                $creditoSeguimiento->save();
                            }
                        }

                        //solicitud de retiro parcial
                        $modelRetroParcial = RetiroParcial::model()->with('estatusRetiroParcial')->findAll('id_estatus_retiro = 1 AND actual = true AND idasociado=:idasociado', ['idasociado' => $model->idasociado]);
                        foreach ($modelRetroParcial as $key => $value) {
                            EstatusRetiroParcial::model()->updateAll(['actual' => false], 'id_retiro_parcial=:id', [':id' => $value->id]);
                            $modelEstatusRetiro = new EstatusRetiroParcial();
                            $modelEstatusRetiro->id_retiro_parcial = $value->id;
                            $modelEstatusRetiro->id_estatus_retiro = 3;
                            $modelEstatusRetiro->save();
                        }

                        $modelEstatusLiquidacion->id_liquidacion = $model->id;
                        $modelEstatusLiquidacion->id_estatus_liquidacion = 1;
                        if (! $modelEstatusLiquidacion->save()) {
                            $transaction->rollBack();
                            Yii::app()->user->setFlash('error', 'A ocurrido un inconveniente al intentar guardar su solicitud');
                            $this->redirect(['admin']);
                        }

                        $transaction->commit();
                        Yii::app()->user->setFlash('success', 'La solicitud de liquidacion se ha registrado exitosamente');
                        $this->redirect(['view', 'id' => $model->id]);
                    }
                } catch (Exception $e) {
                    $transaction->rollBack();
                    Yii::app()->user->setFlash('error', $e->getMessage());
                }
            }
        }

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

    public function actionFicha()
    {
        $cedula = (new Warp($_POST))->get('cedulaSocio');

        if ($cedula == null) {
            return;
        }

        $modelAsociado = Asociado::model()->find([
            'condition' => 'cedula=:cedula AND blnborrado = false AND id_estatus in(1,3,4,5)',
            'order' => 'idasociado desc',
            'params' => [
                'cedula' => $cedula
            ]
        ]);

        if (! $modelAsociado) {
            echo json_encode('');
            return;
        }

        echo json_encode([
            'ficha' => $this->renderPartial('fichaLiquidacion', [
                'fichaLiquidacion' => new FichaLiquidacion($modelAsociado),
                'cedula' => $cedula,
                'buttons' => true,
                'model' => $modelAsociado,
            ], true)
        ]);
    }

    public function actionAprobar($id)
    {
        $model = $this->loadModel($id);
        $modelEstatusLiquidacion = new EstatusLiquidacion();
        $modelConfiguracion = ConfLiquidacion::model()->find();

        $modelAjuste = [];
        if ($model->idEstatus != 1) {
            Yii::app()->user->setFlash('error', '<b>Operación no permitida</b>');
            $this->redirect(['admin']);
        }
        $modelEstatusLiquidacion->fecha_registro = date('d-m-Y');
        $modelAsociado = $model->idAsociado;

        $modelRetiroAprobado = RetiroParcial::model()->with('estatusRetiroParcial')->together(true)->findAll('idasociado=:idasociado AND actual = true AND id_estatus_retiro =2', [':idasociado' => $modelAsociado->idasociado]);
        if ($modelRetiroAprobado) {
            Yii::app()->user->setFlash('error', '<b>El asociado '.$modelAsociado->cedula.", posee una solicitud de Retiro parcial con estatus 'Aprobada', debe de pagar o denegara la solicitud para poder aprobar la solicitud de liquidación</b>");
            $this->redirect(['admin']);
        }

        if ($modelAsociado->fechaingreso != '') {
            $modelAsociado->fechaingreso = date('d/m/Y', strtotime($modelAsociado->fechaingreso));
        }

        $modelHaberesSocio = ReporteHaberes::model()->find('idasociado=:idasociado', [':idasociado' => $modelAsociado->idasociado]);
        $modelMontoTotalFiador = ReporteCreditos::model()->getTotalMontoFiador($model->idasociado);

        if (! $modelHaberesSocio) {
            $modelHaberesSocio = new ReporteHaberes();
        }

        $porcentajeGastoAdministrativo = 0.01;
        if ($modelConfiguracion && $modelConfiguracion->gastos_administrativo != '') {
            $porcentajeGastoAdministrativo = $modelConfiguracion->gastos_administrativo;
        }

        $fichaLiquidacion = new FichaLiquidacion($modelAsociado);
        $model->monto_total_disponible = $fichaLiquidacion->find('totales.asignaciones');

        $model->diferencial_haberes = 0;
        if ($model->monto_total_disponible < 0) {
            $model->diferencial_haberes = abs($model->monto_total_disponible);
            $model->monto_total_disponible = 0;
        }

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

        if (isset($_POST['EstatusLiquidacion'])) {
            $modelEstatusLiquidacion->attributes = $_POST['EstatusLiquidacion'];
            $modelEstatusLiquidacion->id_liquidacion = $model->id;

            if (isset($_POST['aprobacion'])) {
                $modelEstatusLiquidacion->id_estatus_liquidacion = 2;
                $model->scenario = 'aprobacionSolicitud';
            }

            if (! isset($_POST['aprobacion'])) {
                $modelEstatusLiquidacion->id_estatus_liquidacion = 3;
                $modelEstatusLiquidacion->scenario = 'denegacionSolicitud';
            }

            if ($modelEstatusLiquidacion->validate()) {
                $transaction = Yii::app()->db->beginTransaction();
                try {
                    if ($modelEstatusLiquidacion->id_estatus_liquidacion == 2) {
                        //calculando el porcentaje de las partes
                        $modelPorcentajes = PorcentajeDescuentoAsociadoPatrono::model()->find('idasociado=:id', [':id' => $model->idasociado]);
                        if ($modelPorcentajes) {
                            $porcentajeAsociado = $modelPorcentajes->idPorcentajeAsociado->descripcion / 100;
                            $porcentajePatrono = $modelPorcentajes->idPorcentajePatrono->descripcion / 100;
                            $sumatoriaPorcentaje = $porcentajeAsociado + $porcentajePatrono;

                            $model->monto_liquidacion_asociado = $model->monto_total_disponible * $porcentajeAsociado / $sumatoriaPorcentaje;
                            $model->monto_liquidacion_patrono = $model->monto_total_disponible * $porcentajePatrono / $sumatoriaPorcentaje;
                        }

                        if (isset($_POST['Liquidacion'])) {
                            $ajustes = (new Warp($_POST['Liquidacion']))->map(function ($ajuste) {
                                $monto_asociado = str_replace('.', '', $ajuste['monto_asociado']);
                                $monto_asociado = str_replace(',', '.', $monto_asociado);

                                $monto_patrono = str_replace('.', '', $ajuste['monto_patrono']);
                                $monto_patrono = str_replace(',', '.', $monto_patrono);

                                $monto = str_replace('.', '', $ajuste['monto']);
                                $monto = str_replace(',', '.', $monto);

                                return array_merge($ajuste, [
                                    'monto_asociado' => strlen($monto_asociado) > 0 ? $monto_asociado : 0,
                                    'monto_patrono' => strlen($monto_patrono) > 0 ? $monto_patrono : 0,
                                    'monto' => strlen($monto) ? $monto : 0,
                                ]);
                            });

                            $sumatoria_ajuste_deduccion_asociado = (new Warp($ajustes))->sum('monto_asociado');
                            $sumatoria_ajuste_deduccion_patrono = (new Warp($ajustes))->sum('monto_patrono');

                            $deduccion_asociado_ficha = $fichaLiquidacion->find('retiro_deducciones.conceptos.0.monto');
                            $deduccion_patrono_ficha = $fichaLiquidacion->find('retiro_deducciones.conceptos.1.monto');
                            $totol_retiro_deducciones = $fichaLiquidacion->find('retiro_deducciones.conceptos.2.monto');

                            $total_deduccion_asociado = $sumatoria_ajuste_deduccion_asociado + $deduccion_asociado_ficha;
                            $total_deduccion_patrono = $sumatoria_ajuste_deduccion_patrono + $deduccion_patrono_ficha;

                            $fichaLiquidacion->modify([
                                'retiro_deducciones.conceptos.0.monto' => $total_deduccion_asociado,
                                'retiro_deducciones.conceptos.1.monto' => $total_deduccion_patrono,
                                'retiro_deducciones.total.monto' => $totol_retiro_deducciones + $total_deduccion_asociado + $total_deduccion_patrono,
                            ]);

                            $model->monto_total_disponible = $fichaLiquidacion->find('totales.asignaciones');

                            $ajustes = (new Warp($_POST['Liquidacion']))->map(function ($ajuste) {
                                return [
                                    'descripcion' => $ajuste['descripcion'],
                                    'concepto' => $ajuste['concepto'],
                                    'numero_operacion' => $ajuste['numero_operacion'],
                                    'fecha_operacion' => $ajuste['fecha_operacion'],
                                    'tipo_movimiento' => $ajuste['tipo_movimiento'],
                                    'monto_asociado' => str_replace(',', '.', str_replace('.', '', $ajuste['monto_asociado'])),
                                    'monto_patrono' => str_replace(',', '.', str_replace('.', '', $ajuste['monto_patrono'])),
                                    'monto' => str_replace(',', '.', str_replace('.', '', $ajuste['monto'])),
                                ];
                            });
                            $model->ajuste_liquidacion = count($ajustes) > 0
                                ? json_encode($ajustes)
                                : null;

                            $model->generarDeducciones($ajustes);
                        }

                        $modelEstatusLiquidacion->ficha_liquidacion = $fichaLiquidacion->toJson();

                        $model->ficha_liquidacion = $fichaLiquidacion->toJson();
                        $model->monto_total_deuda = $fichaLiquidacion->find('totales.deducciones');
                        $model->monto_gasto_administrativo = $fichaLiquidacion->find('totales.comision_administrativa');
                        $model->monto_comision_bancaria = $fichaLiquidacion->find('totales.comision_bancaria');
                        $model->monto_pagar = $fichaLiquidacion->find('totales.total_a_depositar');
                        $model->monto_deuda_pendiente = $fichaLiquidacion->find('totales.cuenta_x_cobrar') + $model->diferencial_haberes;

                        $model->gestionarAportesEnTransito();
                        $model->gestionarCuotasNoAfectadas();
                        $model->gestionarCuotasAfectadas();

                        Asociado::model()->updateAll(['id_estatus' => 2], 'idasociado=:idasociado', [':idasociado' => $model->idasociado]);
                        CrugeUserI::model()->updateAll(['state' => 2], 'cedula=:cedula', [':cedula' => $model->idAsociado->cedula]);
                        AsociadoEstatus::model()->updateAll(['actual' => false], 'idasociado=:idasociado', [':idasociado' => $model->idasociado]);

                        $modelEstatus = new AsociadoEstatus();
                        $modelEstatus->idasociado = $model->idasociado;
                        $modelEstatus->id_estatus_asociado = 2;
                        $modelEstatus->save();

                        //Congelado por fallecimiento
                        $modelPrestamos4 = ReporteCreditos::model()->findAll('idasociado=:idasociado AND id_estatus_credito=15', [':idasociado' => $model->idasociado]);
                        if ($modelPrestamos4) {
                            foreach ($modelPrestamos4 as $key => $value) {
                                CreditoSeguimiento::model()->updateAll(['actual' => false], 'id_credito=:id', [':id' => $value->idcredito]);
                                $creditoSeguimiento = new CreditoSeguimiento();
                                $creditoSeguimiento->id_credito = $value->idcredito;
                                $creditoSeguimiento->id_estatus_credito = 17;
                                $creditoSeguimiento->save();
                            }
                        }
                    }

                    if ($model->save()) {
                        //busqueda de todos los retiros parciales que estan en estatus solicitud
                        $modelRetiro = RetiroParcial::model()->with('estatusRetiroParcial')->together(true)->findAll('idasociado=:idasociado AND actual = true AND id_estatus_retiro =1', [':idasociado' => $modelAsociado->idasociado]);
                        if ($modelRetiro) {
                            foreach ($modelRetiro as $key => $value) {
                                $modelEstatusRetiro = new EstatusRetiroParcial();
                                $modelEstatusRetiro->id_retiro_parcial = $value->id;
                                $modelEstatusRetiro->id_estatus_retiro = 3;
                                $modelEstatusRetiro->save();
                            }
                        }
                        EstatusLiquidacion::model()->updateAll(['actual' => false], 'id_liquidacion=:id', [':id' => $model->id]);
                        if ($modelEstatusLiquidacion->id_estatus_liquidacion == 2) {
                            $modelEstatusLiquidacion->ficha_liquidacion = $fichaLiquidacion->toJson();
                        }
                        $modelEstatusLiquidacion->save();
                        $transaction->commit();
                        Yii::app()->user->setFlash('success', 'La solicitud ha sido <strong>procesada</strong> exitosamente.');
                    } else {
                        $transaction->rollBack();
                        Yii::app()->user->setFlash('error', '<b>Error ocurrido al momento de aprobar la solicitud</b>');
                    }
                    $this->redirect(['admin']);
                } catch (Exception $e) {
                    $transaction->rollBack();
                    Yii::app()->user->setFlash('error', $e->getMessage());
                }
            }
        }

        $this->render('aprobar', [
            'model' => $model,
            'modelAsociado' => $modelAsociado,
            'modelHaberesSocio' => $modelHaberesSocio,
            'modelEstatusLiquidacion' => $modelEstatusLiquidacion,
            'modelAjuste' => $modelAjuste,
            'fichaLiquidacion' => $fichaLiquidacion,
        ]);
    }

    public function actionPagar($id)
    {
        $model = $this->loadModel($id);
        $model->fecha_comprobante = date('d-m-Y');
        $modelEstatusLiquidacion = new EstatusLiquidacion('pagarLiquidacion');
        $model->scenario = 'pagar';
        $detalle_pago = new ProcesoPago('pagos');

        $modelPagoMasivo = PagosMasivosDetalle::model()->find('id_proceso=:id AND id_nombre_proceso = 3 AND id_estatus_detalle in(1,2)', ['id' => $id]);
        if ($modelPagoMasivo) {
            Yii::app()->user->setFlash('error', '<b>La liquidacion con el codigo: '.$id.', esta en una nomina de pago masivo</b>');
            $this->redirect(['admin']);
        }

        if (isset($_POST['EstatusLiquidacion'])) {
            $modelEstatusLiquidacion->attributes = $_POST['EstatusLiquidacion'];
            $modelEstatusLiquidacion->id_estatus_liquidacion = 4;
            $modelEstatusLiquidacion->id_liquidacion = $id;

            Yii::import('application.modules.contable.models.*', true);
            $ejercicio = EjerciciosContables::model()->find('estatus=1');
            if ($modelEstatusLiquidacion->validate()) {
                $transaction = Yii::app()->db->beginTransaction();
                try {
                    Asociado::model()->updateAll(['id_estatus' => 2], 'idasociado=:idasociado', [':idasociado' => $model->idasociado]);

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

                    if (! $modelEstatusLiquidacion->save()) {
                        throw new Exception('Error ocurrido al momento de pagar la solicitud');
                    }

                    EstatusLiquidacion::model()->updateAll(['actual' => false], 'id_liquidacion=:id_liquidacion AND id_estatus_liquidacion != 4', [':id_liquidacion' => $model->id]);
                    Yii::import('application.modules.contable.models.*');
                    Yii::import('application.modules.contable.controllers.*');

                    $model->liquidarCuotasDePrestamos();

                    $detalle_pago->attributes = $_POST['ProcesoPago'];
                    $detalle_pago->id_proceso = $model->id;
                    $detalle_pago->id_nombre_proceso = 3;
                    $detalle_pago->id_banco = $modelEstatusLiquidacion->idBanco;
                    $detalle_pago->referencia = $modelEstatusLiquidacion->referencia;
                    $detalle_pago->id_usuario = Yii::app()->user->id;
                    $detalle_pago->monto_pagado = number_format($model->monto_pagar, 2, '.', '');

                    if (! empty($modelEstatusRetiroParcial->observacion)) {
                        $detalle_pago->observacion = $modelEstatusRetiroParcial->observacion;
                    } else {
                        $detalle_pago->observacion = 'Pago de Bs. '.$model->monto_pagar.' por concepto de Liquidación del asociado: '.$model->idAsociado->nombre.' '.$model->idAsociado->apellidos;
                    }

                    if (! $detalle_pago->save()) {
                        throw new Exception('Error al guardar el pago');
                    }

                    $model->setBanco($detalle_pago->id_banco);
                    $model->setFechaPago($detalle_pago->fecha_pago);
                    $model->setReferenciaPago($detalle_pago->referencia);
                    $model->setFechaComprobante((new Warp($_POST))->get('Liquidacion.fecha_comprobante'));
                    //////////////////////////// Contabilización Comprobante Inicio ////////////////////////////
                    Yii::import('application.modules.contable.models.comprobantes.*', true);
                    Yii::import('application.modules.contable.models.comprobantes.liquidacion.*', true);
                    (new LiquidacionIndividual($model))->contabilizar();
                    //////////////////////////// Contabilización Comprobante Fin ///////////////////////////////

                    $transaction->commit();
                    Yii::app()->user->setFlash('success', '<b>La liquidación con el código: '.$id.', ha sido pagada exitosamente</b>');
                    $this->redirect(['admin']);
                } catch (Exception $e) {
                    $transaction->rollBack();
                    Yii::app()->user->setFlash('error', $e->getMessage());
                    $this->redirect(['admin']);
                }
            }
        }
        $this->render('pagar', [
            'model' => $model,
            'modelEstatusLiquidacion' => $modelEstatusLiquidacion,
            'pago' => $detalle_pago,
        ]);
    }

    public function actionMigrar_form()
            {
                $model=new Liquidacion;

                                $id=$_REQUEST["id"];

                                $model=$this->loadModel($id);
                                $id_trabajador= $model->idasociado;
                                $cedula= $model->trabajador->cedula;
                                $cuenta= $model->cuenta;
                                $error=false;

                                $nombre = $model->trabajador->nombre . ' ' .  $model->trabajador->apellidos;
                                $correo =  $model->trabajador->correoelectronico;

                            /*     if(isset($_POST['ajax']) && $_POST['ajax']==='retiro-parcial-_pagar_form-form')
                            {
                                echo CActiveForm::validate($model);
                                Yii::app()->end();
                            }*/
                            $model->scenario = 'migrar_form';
                                if(isset($_POST['Liquidacion']))
                {


            //$f_solicitud= $model->fecha_solicitud;
                                $error = 0;
                                $modelb=$this->loadModel($id);
                                $validacion = Liquidacion::model()->findAll('"idliquidacion"=:id and aprobado=1 and blnborrado=false ', array(':id'=> $id));
                                if($validacion!=null)
                                             {
                                                 $error = 1;
                                             }
                                if ($error!="0"){
                                $status="pagado=true";
                                $fechaactual=date('Y-m-d');
                                $idusuario=Yii::app()->user->id;


                                Yii::import('application.modules.contable.models.*');
                                $ban=$_POST['Liquidacion']['banco'];
                                $bc= ParametrosBancos::model()->find('id='.$ban);
                                $id_banco=$bc->clvcuenta;
                                $fecha_ref=$_POST['Liquidacion']['fecha_pagado'];
                                $ref=$_POST['Liquidacion']['referencia'];
                                //print_r($ref);die();
                                $sql="update  contable.liquidacion set pago_migrado=true,fecha_pagado='$fecha_ref' where idliquidacion=$id";
                                //var_dump($sql); die();
                                $connection=Yii::app()->db;
                                $command=$connection->createCommand($sql);
                                $row=$command->queryAll();
                                    // if AJAX request (triggered by deletion via admin grid view), we should not redirect the browser
                                //throw new CHttpException(409,'El credito ha quedado en estatus de pagado.');
                                  $num= Yii::import('application.modules.contable.controllers.*');
                                  $num= Yii::import('application.modules.contable.models.*');

                                    $fecha=date('d-m-Y',strtotime($fecha_ref));
                                    list($dia,$mes,$anio) = explode("-",$fecha);
                                    $sql="select MAX(numero) from contable.comprobante where EXTRACT(MONTH FROM fecha_comprobante)='$mes' and date_part('year', fecha_comprobante) ='$anio' and blnborrado=false";
                                    $connection=Yii::app()->db;
                                    $command=$connection->createCommand($sql);
                                    $row=$command->queryRow();
                                    $numero=$row["max"];
                                    if($numero==""){
                                            $a=1;
                                            }else{
                                    $a=$numero+1;
                                    }
                                  $ejercicio = EjerciciosContables::model()->find('estatus=1');

              $hist_pago=  new HistorialPagos;
              $hist_pago->proceso='LIQUIDACION';
              $hist_pago->clvbanco=$id_banco;
              $hist_pago->monto=$modelb->remanente;
              $hist_pago->referencia=$ref;
              $hist_pago->fecha_referencia=$fecha_ref;
              $hist_pago->observacion=$obser.' '.$modelb->trabajador->nombre.' '.$modelb->trabajador->apellidos.' '.$modelb->trabajador->cedula;
              $hist_pago->save();

              $cred_liqu= PagoLiquidacionCredito::model()->findAll(array('condition'=>'idasociado='.$model->idasociado));

              if(count($cred_liqu)==0) {
              $comprobante= new Comprobante();
              $comprobante->numero=$a;
              $comprobante->mes=$mes;
              $comprobante->num_comprobante=$mes.$a;
              $comprobante->fecha_comprobante=$fecha_ref;
              $comprobante->descripcion='LIQUIDACIÓN '.$modelb->trabajador->nombre.' '.$modelb->trabajador->apellidos.' '.$modelb->trabajador->cedula;
              $comprobante->status=1;
              $comprobante->id_usuario=Yii::app()->user->id;
              $comprobante->nro_documento=$ref;
              $comprobante->blnborrado =0;
              $comprobante->clvejercicio =$ejercicio->id;

              //$crit_cred=Cre;
              if($comprobante->save())
              {
              $det_comp_trab_d= new DetalleComprobante;
              $det_comp_trab_d->descripcion="$comprobante->descripcion";
              $det_comp_trab_d->fecha_referencia=$fecha_ref;
              $det_comp_trab_d->referencia="$comprobante->nro_documento";
              $det_comp_trab_d->id_cuenta=317;
              $det_comp_trab_d->clv_comprobante=$comprobante->id;
              $det_comp_trab_d->clv_auxiliar=$modelb->trabajador->idunidad;
              $det_comp_trab_d->monto_debe=$modelb->remanente/2;
              $det_comp_trab_d->monto_haber=0;
              $det_comp_trab_d->blnborrado=0;
              $det_comp_trab_d->estatus_contab=1;
              $det_comp_trab_d->save();

              $det_comp_patr_h= new DetalleComprobante;
              $det_comp_patr_h->descripcion="$comprobante->descripcion";
              $det_comp_patr_h->fecha_referencia=$fecha_ref;
              $det_comp_patr_h->referencia="$comprobante->nro_documento";
              $det_comp_patr_h->id_cuenta=722;
              $det_comp_patr_h->clv_comprobante=$comprobante->id;
              $det_comp_patr_h->clv_auxiliar=$modelb->trabajador->idunidad;
              $det_comp_patr_h->monto_debe=$modelb->remanente/2;
              $det_comp_patr_h->monto_haber=0;
              $det_comp_patr_h->blnborrado=0;
              $det_comp_patr_h->estatus_contab=1;
              $det_comp_patr_h->save();

              $det_comp_banco= new DetalleComprobante;
              $det_comp_banco->descripcion="$comprobante->descripcion";
              $det_comp_banco->fecha_referencia=$fecha_ref;
              $det_comp_banco->referencia="$comprobante->nro_documento";
              $det_comp_banco->id_cuenta=$id_banco;
              $det_comp_banco->clv_comprobante=$comprobante->id;
              $det_comp_banco->clv_auxiliar=null;
              $det_comp_banco->monto_debe=0;
              $det_comp_banco->monto_haber=$modelb->remanente;
              $det_comp_banco->blnborrado=0;
              $det_comp_banco->estatus_contab=1;
              $det_comp_banco->save();

                                  }
            }

            else {
              $comprobante= new Comprobante();
              $comprobante->numero=$a;
              $comprobante->mes=$mes;
              $comprobante->num_comprobante=$mes.$a;
              $comprobante->fecha_comprobante=$fecha_ref;
              $comprobante->descripcion='LIQUIDACIÓN '.$modelb->trabajador->nombre.' '.$modelb->trabajador->apellidos.' '.$modelb->trabajador->cedula;
              $comprobante->status=1;
              $comprobante->id_usuario=Yii::app()->user->id;
              $comprobante->nro_documento=$ref;
              $comprobante->blnborrado =0;
              $comprobante->clvejercicio =$ejercicio->id;

              //$crit_cred=Cre;
              if($comprobante->save())
              {
              $det_comp_trab_d= new DetalleComprobante;
              $det_comp_trab_d->descripcion="$comprobante->descripcion";
              $det_comp_trab_d->fecha_referencia=$fecha_ref;
              $det_comp_trab_d->referencia="$comprobante->nro_documento";
              $det_comp_trab_d->id_cuenta=317;
              $det_comp_trab_d->clv_comprobante=$comprobante->id;
              $det_comp_trab_d->clv_auxiliar=$modelb->trabajador->idunidad;
              $det_comp_trab_d->monto_debe=$modelb->total_haberes/2;
              $det_comp_trab_d->monto_haber=0;
              $det_comp_trab_d->blnborrado=0;
              $det_comp_trab_d->estatus_contab=1;
              $det_comp_trab_d->save();

              $det_comp_patr_h= new DetalleComprobante;
              $det_comp_patr_h->descripcion="$comprobante->descripcion";
              $det_comp_patr_h->fecha_referencia=$fecha_ref;
              $det_comp_patr_h->referencia="$comprobante->nro_documento";
              $det_comp_patr_h->id_cuenta=722;
              $det_comp_patr_h->clv_comprobante=$comprobante->id;
              $det_comp_patr_h->clv_auxiliar=$modelb->trabajador->idunidad;
              $det_comp_patr_h->monto_debe=$modelb->total_haberes/2;
              $det_comp_patr_h->monto_haber=0;
              $det_comp_patr_h->blnborrado=0;
              $det_comp_patr_h->estatus_contab=1;

              $det_comp_patr_h->save();
              foreach ($cred_liqu as $cl){
              $det_comp_prestamo= new DetalleComprobante;
              $det_comp_prestamo->descripcion="$comprobante->descripcion";
              $det_comp_prestamo->fecha_referencia=$fecha_ref;
              $det_comp_prestamo->referencia="$comprobante->nro_documento";
              $det_comp_prestamo->id_cuenta=$cl->cta_credito;
              $det_comp_prestamo->clv_comprobante=$comprobante->id;
              $det_comp_prestamo->clv_auxiliar=$cl->idunidad;
              $det_comp_prestamo->monto_debe=0;
              $det_comp_prestamo->monto_haber=$cl->amortizacion;
              $det_comp_prestamo->blnborrado=0;
              $det_comp_prestamo->estatus_contab=1;
              $det_comp_prestamo->save();
              }

              $det_comp_banco= new DetalleComprobante;
              $det_comp_banco->descripcion="$comprobante->descripcion";
              $det_comp_banco->fecha_referencia=$fecha_ref;
              $det_comp_banco->referencia="$comprobante->nro_documento";
              $det_comp_banco->id_cuenta=$id_banco;
              $det_comp_banco->clv_comprobante=$comprobante->id;
              $det_comp_banco->clv_auxiliar=null;
              $det_comp_banco->monto_debe=0;
              $det_comp_banco->monto_haber=$modelb->total_haberes-$modelb->total_deuda;
              $det_comp_banco->blnborrado=0;
              $det_comp_banco->estatus_contab=1;
              $det_comp_banco->save();

                                  }
            }

                                }
                                Yii::app()->user->setFlash('success', "<b>La liquidación con el código: ".$id.", ha sido migrada exitosamente</b>");
                                $this->redirect(array('admin'));

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


        public function actionMigrarPagoLote()
{
    $model=new Liquidacion;

           /*         $id=$_REQUEST["id"];

                    $model=$this->loadModel($id);
                    $id_trabajador= $model->idasociado;
                    $cedula= $model->trabajador->cedula;
                    $cuenta= $model->cuenta;
                    $error=false;

                    $nombre = $model->trabajador->nombre . ' ' .  $model->trabajador->apellidos;
                    $correo =  $model->trabajador->correoelectronico;

*/
                $model->scenario = 'migrar_masivo';
                    if(isset($_POST['Liquidacion']))
    {


         $desde=$_POST['Liquidacion']['fecha_desde'];
         $hasta=$_POST['Liquidacion']['fecha_hasta'];

        /* $criteria= new CdbCriteria;
         $criteria->condition="pagado=true and pago_migrado=false and  blnborrado=false and fecha_aprobacion between  '$desde' and '$hasta' ";
         $criteria->order='fecha_aprobacion asc';
         $m_liquid= Liquidacion::model()->findAll($criteria);
         */

             $criteria= new CdbCriteria;
             //$criteria->condition="fecha_ref between '$desde' and '$hasta'";
             $m_liquid= VMigrarLiquidacion::model()->findAll();

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

                    Yii::import('application.modules.contable.models.*');

                    $ban=$_POST['Liquidacion']['banco'];
                    $bc= ParametrosBancos::model()->find('id='.$ban);
                    $id_banco=$bc->clvcuenta;

                    $ref=$_POST['Liquidacion']['referencia'];
                    $obser=$_POST['Liquidacion']['observacion'];
                    Yii::import('application.modules.contable.models.*');


                    $ejercicio = EjerciciosContables::model()->find('estatus=1');

                    $num= Yii::import('application.modules.contable.controllers.*');
                    $num= Yii::import('application.modules.contable.models.*');

         foreach ($m_liquid as $mt){

                    $id=$mt->idliquidacion;

            // echo $mt->idretiro. " ". $mt->fecha_aprobacion."<br>";

         //die();


                    $modelb= Liquidacion::model()->find('idliquidacion='.$id);

            // if AJAX request (triggered by deletion via admin grid view), we should not redirect the browser
                    //throw new CHttpException(409,'El credito ha quedado en estatus de pagado.');

                        $fecha=date('d-m-Y',strtotime($mt->fecha_ref));
                        list($dia,$mes,$anio) = explode("-",$fecha);
                        $sql="select MAX(numero) from contable.comprobante where EXTRACT(MONTH FROM fecha_comprobante)='$mes' and date_part('year', fecha_comprobante) ='$anio' and blnborrado=false";
                        $connection=Yii::app()->db;
                        $command=$connection->createCommand($sql);
                        $row=$command->queryRow();
                        $numero=$row["max"];
                        if($numero==""){
                                $a=1;
                                }else{
            $a=$numero+1;
            }
              $bco= ParametrosBancos::model()->find('clvcuenta='.$mt->clvcuenta);
              $hist_pago=  new HistorialPagos;
              $hist_pago->proceso='LIQUIDACION';
              $hist_pago->clvbanco=$bco->id;
              $hist_pago->monto=$modelb->remanente;
              $hist_pago->referencia=$mt->n_ref;
              $hist_pago->fecha_referencia=$mt->fecha_ref;
              $hist_pago->observacion='LIQUIDACIÓN '.$mt->nombre.' '.$mt->apellidos.' '.$mt->cedula;
              $hist_pago->save();

                                  $comprobante= new Comprobante();
                                  $comprobante->numero=$a;
                                  $comprobante->mes=$mes;
                                  $comprobante->num_comprobante=$mes.$a;
                                  $comprobante->fecha_comprobante=$mt->fecha_ref;
                                  $comprobante->descripcion='LIQUIDACIÓN '.$mt->nombre.' '.$mt->apellidos.' '.$mt->cedula;
                                  $comprobante->status=1;
                                  $comprobante->id_usuario=Yii::app()->user->id;
                                  $comprobante->nro_documento=$mt->n_ref;
                                  $comprobante->blnborrado =0;
                                  $comprobante->clvejercicio =$ejercicio->id;
                                  if($comprobante->save())
                                  {
                                  $det_comp_trab_d= new DetalleComprobante;
                                  $det_comp_trab_d->descripcion="$comprobante->descripcion";
                                  $det_comp_trab_d->fecha_referencia=$mt->fecha_ref;
                                  $det_comp_trab_d->referencia="$comprobante->nro_documento";
                                  $det_comp_trab_d->id_cuenta=317;
                                  $det_comp_trab_d->clv_comprobante=$comprobante->id;
                                  $det_comp_trab_d->clv_auxiliar=$modelb->trabajador->idunidad;
                                  $det_comp_trab_d->monto_debe=$modelb->remanente/2;
                                  $det_comp_trab_d->monto_haber=0;
                                  $det_comp_trab_d->blnborrado=0;
                                  $det_comp_trab_d->estatus_contab=1;
                                  $det_comp_trab_d->save();

                                  $det_comp_patr_h= new DetalleComprobante;
                                  $det_comp_patr_h->descripcion="$comprobante->descripcion";
                                  $det_comp_patr_h->fecha_referencia=$mt->fecha_ref;
                                  $det_comp_patr_h->referencia="$comprobante->nro_documento";
                                  $det_comp_patr_h->id_cuenta=722;
                                  $det_comp_patr_h->clv_comprobante=$comprobante->id;
                                  $det_comp_patr_h->clv_auxiliar=$modelb->trabajador->idunidad;
                                  $det_comp_patr_h->monto_debe=$modelb->remanente/2;
                                  $det_comp_patr_h->monto_haber=0;
                                  $det_comp_patr_h->blnborrado=0;
                                  $det_comp_patr_h->estatus_contab=1;
                                  $det_comp_patr_h->save();

                                  $det_comp_banco= new DetalleComprobante;
                                  $det_comp_banco->descripcion="$comprobante->descripcion";
                                  $det_comp_banco->fecha_referencia=$mt->fecha_ref;
                                  $det_comp_banco->referencia="$comprobante->nro_documento";
                                  $det_comp_banco->id_cuenta=$mt->clvcuenta;
                                  $det_comp_banco->clv_comprobante=$comprobante->id;
                                  $det_comp_banco->clv_auxiliar=null;
                                  $det_comp_banco->monto_debe=0;
                                  $det_comp_banco->monto_haber=$modelb->remanente;
                                  $det_comp_banco->blnborrado=0;
                                  $det_comp_banco->estatus_contab=1;
                                  $det_comp_banco->save();

                                 }
                      $modelb->pago_migrado=true;
                      $modelb->update();

                         }
                    Yii::app()->user->setFlash('success', "<b>La migracion de liquidaciones  fue exitosa</b>");

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

            }
    $this->render('_migrar_pago_lote',array('model'=>$model));
}
   public function actionTxt()
    {
      $this->render('txt');
     }
        public function actionDenegarLiquidacion($id)
        {

                $model=$this->loadModel($id);
                if($model->estaLiquidacionNominaPago()){
                    Yii::app()->user->setFlash('error', "<b>La liquidacion con el codigo: " . $id . ", esta en una nomina de pago masivo</b>");
                    $this->redirect(array('admin'));
                }

                if ($model->idEstatus == 2) {

                    $EstatusLiquidacion = new EstatusLiquidacion('denegarLiquidacion');

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

                        $EstatusLiquidacion->attributes = $_POST['EstatusLiquidacion'];
                        $EstatusLiquidacion->id_liquidacion = $model->id;
                        $EstatusLiquidacion->id_estatus_liquidacion = 3;
                        //echo "<pre>";print_r($EstatusLiquidacion);exit;

                        if ($EstatusLiquidacion->validate()) {

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

                            try {

                                EstatusLiquidacion::model()->updateAll(array('actual'=>false),'id_liquidacion=:id',array(':id'=>$model->id));
                                $EstatusLiquidacion->save(false);

                                $id = 1;
                                $modelEstatusAsociado = AsociadoEstatus::model()->find('idasociado=:idasociado AND actual <> true order by id desc',[':idasociado'=>$model->idasociado]);
                                if ($modelEstatusAsociado) {
                                    $id = $modelEstatusAsociado->id_estatus_asociado;

                                }
                                Asociado::model()->updateAll(array('blnborrado'=>false,'id_estatus'=>1),'idasociado=:idasociado',array(':idasociado'=>$model->idasociado));
                                if($id !=2 && $id !=5)CrugeUserI::model()->updateAll(array('state'=>1),'cedula=:cedula',array(':cedula'=>$model->idAsociado->cedula));
                                AsociadoEstatus::model()->updateAll(array('actual'=>false),'idasociado=:idasociado',array(':idasociado'=>$model->idasociado));

                                $modelPrestamos = CreditoSeguimiento::model()->with('idCredito')->findAll('idasociado=:idasociado AND actual = true AND id_estatus_credito =17',[':idasociado'=>$model->idasociado]);
                                foreach ($modelPrestamos as $key => $value) {
                                    $estatus = CreditoSeguimiento::model()->find('id_credito=:id_credito AND actual <> true order by id desc',[':id_credito'=>$value->id_credito]);
                                    // echo $estatus->id_estatus_credito ;Exit;
                                    if($estatus->id_estatus_credito  == 4 && $id ==1){
                                        CreditoSeguimiento::model()->updateAll(array('actual'=>false),'id_credito=:id',array(':id'=>$value->id_credito));
                                        $modelEstatusCreditoAnterio = new CreditoSeguimiento();
                                        $modelEstatusCreditoAnterio->id_credito = $value->id_credito;
                                        $modelEstatusCreditoAnterio->id_estatus_credito =4;
                                        $modelEstatusCreditoAnterio->save();
                                    }
                                    else{
                                        CreditoSeguimiento::model()->updateAll(array('actual'=>false),'id_credito=:id',array(':id'=>$value->id_credito));
                                        $modelEstatusCreditoAnterio = new CreditoSeguimiento();
                                        $modelEstatusCreditoAnterio->id_credito = $value->id_credito;
                                        $modelEstatusCreditoAnterio->id_estatus_credito =$estatus->id_estatus_credito;
                                        $modelEstatusCreditoAnterio->save();
                                    }
                                }
                                // exit;
                                $modelEstatus = new AsociadoEstatus();
                                $modelEstatus->idasociado = $model->idasociado;
                                $modelEstatus->id_estatus_asociado = $id;
                                $modelEstatus->save();

                                $ajustesDeduccion = AjusteHaberes::model()->findAll('id_liquidacion=:liquidacion', ['liquidacion' => $model->id]);

                                (new Warp($ajustesDeduccion))->map(function ($deduccion) {
                                    AjusteHaberesSeguimiento::model()->updateAll(['actual' => false], 'id_ajuste_haberes=:id_ajuste_haberes', [':id_ajuste_haberes' => $deduccion->id]);

                                    $seguimiento = new AjusteHaberesSeguimiento();
                                    $seguimiento->id_ajuste_haberes = $deduccion->id;
                                    $seguimiento->id_estatus_ajuste_haberes = 3;

                                    if (! $seguimiento->save()) {
                                        throw new Exception('Error al guardar el seguimiento del ajuste de haberes');
                                    }
                                });

                                $transaction->commit();
                                Yii::app()->user->setFlash('success', "<b>La solicitud ha sido denegada</b>");
                                $this->redirect(array('admin'));

                            } catch (Exception $e) {
                                // echo "<pre>";print_r($e);exit;
                                $transaction->rollBack();
                                Yii::app()->user->setFlash('error', "<b>Ocurrio un error al denegar la solicitud</b>");
                                $this->redirect(array('admin'));
                            }


                        }else{

                            Yii::app()->user->setFlash('error', "<b>Error al validar los datos</b>");
                            $this->refresh();
                        }
                    }

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

                }else{//Si el estatus no es aprobado

                    $nombre = $model->idAsociado->nombre . ' ' .  $model->idAsociado->apellidos;
                    $correo =  $model->idAsociado->correoelectronico;
                    $f_solicitud= $model->fecha_solicitud;

                    $model->aprobado = 2;
                    // $sql= "update contable.liquidacion set aprobado= 2 where  idliquidacion = $model->idliquidacion";
                    // $connection=Yii::app()->db;
                    // $command=$connection->createCommand($sql);
                    if ($model->save())
                    {

                        $text_correo="Saludos sr(a). $nombre,<br /><br /> Por medio del presente se le informa que su solicitud de Liquidacion de fecha $f_solicitud , fue RECHAZADA.  <br /><br /> Atentamente, <br /><br /> <strong>Caja de Ahorro de los idAsociadoes y idAsociadoas de PDVSA Industrial.</strong>";
                        $asunto='Rechazo de Solicitud de Liquidacion - CATTPI';
                        // RetiroParcialController::EnviarCorreo($nombre, $correo, $text_correo, $asunto);
                        Yii::app()->user->setFlash('success', "<b style='color: red;'>La solicitud ha sido DENEGADA y se ha enviado la notificación al correo electronico <strong>$correo</strong></b>");
                        $this->redirect(array('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['Liquidacion']))
        {
            $model->attributes=$_POST['Liquidacion'];
            if($model->save())
                $this->redirect(array('view','id'=>$model->idliquidacion));
        }

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

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

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

    /**
     * Manages all models.
     */
    public function actionAdmin()
    {

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

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

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

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



    /**
     * Emite reporte sobre los asociados dados de baja en el periodo consultado
     */
    public function actionReporteLiquidacion()
    {
       $model=new Liquidacion('esc_periodo');
       //echo "<pre>";print_r($model);exit;
       if(isset($_POST['yt0']))
           {
            $model->mes=$_POST['Liquidacion']['mes'];
            $model->desde=$_POST['Liquidacion']['desde'];
            $model->hasta=$_POST['Liquidacion']['hasta'];
            $model->consulta=$_POST['Liquidacion']['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)
                  $liquidaciones=Liquidacion::model()->with(array('estatusLiquidacion','idAsociado'))->together(true)->findAll('date_part(\'month\',"estatusLiquidacion".fecha_registro)='.$model->mes.' AND date_part(\'year\',"estatusLiquidacion".fecha_registro)='.date('Y').' AND actual=TRUE AND (id_estatus_liquidacion=2 OR id_estatus_liquidacion=4) '.$idUniades);
               else
                   $liquidaciones=Liquidacion::model()->with(array('estatusLiquidacion','idAsociado'))->together(true)->findAll('"estatusLiquidacion".fecha_registro BETWEEN \''.$model->desde.'\' AND \''.$model->hasta.'\' AND actual=TRUE AND (id_estatus_liquidacion=2 OR id_estatus_liquidacion=4) '.$idUniades);

               if($liquidaciones){

                   #Array de Salida
                   $liquidados=array();
                   $liquidados[0]=array('Cédula','Nombre','Apellido','Unidad','Fecha de Liquidación','Estatus');
                   foreach ($liquidaciones as $key=>$liquidacion)
                       {
                         $liquidados[]=array($liquidacion->idAsociado->cedula,$liquidacion->idAsociado->nombre,$liquidacion->idAsociado->apellidos,$liquidacion->idAsociado->unidad->descripcion,date('d-m-Y',strtotime($liquidacion->fecha_estatus)),$liquidacion->nombre_estatus);                       }
                   #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','F') as $columnID) {
                    $objPHPExcel->getActiveSheet()->getColumnDimension($columnID)->setAutoSize(true);
                      }
                    $objPHPExcel->getActiveSheet()->fromArray($liquidados,NULL,'A1');
                    $objPHPExcel->getActiveSheet()->getStyle('A1:F1')->getFont()->setBold(true);
                    $objPHPExcel->getActiveSheet()->getStyle('A1:F1')->getFont()->getColor()->setARGB(PHPExcel_Style_Color::COLOR_WHITE);
                    $objPHPExcel->getActiveSheet()->getStyle('A1:F1')->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID);
                    $objPHPExcel->getActiveSheet()->getStyle('A1:F1')->getFill()->getStartColor()->setARGB('004413');
                    //$objWriter->save("doc/liquidados.xlsx");
                    header('Content-Type: application/vnd.ms-excel');
                    header('Content-Disposition: attachment;filename="liquidados.xlsx"');
                    header('Cache-Control: max-age=0');
                   //echo "<pre>";print_r($_POST);exit;
                    $objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel);
                    $objWriter->setOffice2003Compatibility(true);
                    $objWriter->save('php://output');
                   exit;
               }
               else {
                   Yii::app()->user->setFlash('warning', "No existen asociados liquidados en este período");
               }
            }


          }

       $this->render('reporte_liquidaciones',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 $id the ID of the model to be loaded
     * @return Liquidacion the loaded model
     * @throws CHttpException
     */
    public function loadModel($id)
    {
        $model=Liquidacion::model()->findByPk($id);
        if($model===null)
            throw new CHttpException(404,'The requested page does not exist.');
        return $model;
    }

    /**
     * Performs the AJAX validation.
     * @param Liquidacion $model the model to be validated
     */
    protected function performAjaxValidation($model)
    {
        if(isset($_POST['ajax']) && $_POST['ajax']==='liquidacion-form')
        {
            echo CActiveForm::validate($model);
            Yii::app()->end();
        }
    }
        public function actionMigra_liquidacion()
{
    $model=new Liquidacion;
    $model->scenario= 'migra';

    // uncomment the following code to enable ajax-based validation

    if(isset($_POST['ajax']) && $_POST['ajax']==='liquidacion-migra_liquidacion-form')
    {
        echo CActiveForm::validate($model);
        Yii::app()->end();
    }


    if(isset($_POST['Liquidacion']))
    {
        $model->attributes=$_POST['Liquidacion'];
        if($model->validate())
        {
          $modelb = Liquidacion::model()->findAll(array('condition'=>'aprobado='.$model->migrar));
          //$i=0;
          foreach ($modelb as $b){
             //echo $b->fecha_aprobacion."<br>";

          $num= Yii::import('application.modules.contable.controllers.*');
          $num= Yii::import('application.modules.contable.models.*');
                      $a= ComprobanteController::actionNumero();
                    Yii::import('application.modules.contable.models.*',true);

                      $ejercicio = EjerciciosContables::model()->find('estatus=1');
                     // echo "-----".date('d-m-Y'). " ----- ".$b->fecha_aprobacion."<br>";
             //echo $b->idAsociado->cedula."<br>";
                      $comprobante= new Comprobante();
                      $comprobante->numero=$a;
                      $comprobante->fecha_comprobante=date('d-m-Y');
                      $comprobante->descripcion='LIQUIDACION '.date('d-m-Y',strtotime($b->fecha_aprobacion)).' '.$b->idAsociado->nombre.' '.$b->trabajador->apellidos.' '.$b->trabajador->cedula;
                      //$comprobante->descripcion='LIQUIDACION';
                      $comprobante->status=1;
                      $comprobante->id_usuario=Yii::app()->user->id;
                      $comprobante->nro_documento=$b->trabajador->cedula;
                      //$comprobante->nro_documento=1;
                      $comprobante->blnborrado =0;
                      $comprobante->clvejercicio =1;
                      if($comprobante->save()){
                          $det_comp_trab_d= new DetalleComprobante;
                      $det_comp_trab_d->descripcion="$comprobante->descripcion";
                      $det_comp_trab_d->fecha_referencia=$b->fecha_aprobacion;
                      $det_comp_trab_d->referencia="$comprobante->nro_documento";
                      $det_comp_trab_d->id_cuenta=323;
                      $det_comp_trab_d->clv_comprobante=$comprobante->id;
                      $det_comp_trab_d->clv_auxiliar=$b->trabajador->idasociado;
                      $det_comp_trab_d->monto_debe=$b->remanente;
                      $det_comp_trab_d->monto_haber=0;
                      $det_comp_trab_d->blnborrado=0;
                      $det_comp_trab_d->estatus_contab=1;
                      $det_comp_trab_d->save();

                      $det_comp_patr_h= new DetalleComprobante;
                      $det_comp_patr_h->descripcion="$comprobante->descripcion";
                      $det_comp_patr_h->fecha_referencia=date('d-m-Y');
                      $det_comp_patr_h->referencia="$comprobante->nro_documento";
                      $det_comp_patr_h->id_cuenta=324;
                      $det_comp_patr_h->clv_comprobante=$comprobante->id;
                      $det_comp_patr_h->clv_auxiliar=$b->trabajador->idasociado;
                      $det_comp_patr_h->monto_debe=0;
                      $det_comp_patr_h->monto_haber=$b->remanente;
                      $det_comp_patr_h->blnborrado=0;
                      $det_comp_patr_h->estatus_contab=1;
                      $det_comp_patr_h->save();
                      }
          }
           // echo $model->migrar; die();
        }
    }
    $this->render('migra_liquidacion',array('model'=>$model));
}
    public function actionReporte()
    {
        //        $model=  Estado::model()->findAll();
        yii::app()->request->sendFile("Reporte liquidación (".date('d-m-Y').").xlsx",
        $this->renderPartial('reportPhpExcel',array(
       // 'model'=>$model,
        ), true)
        );
    }

    public function actionGetCuenta(){

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

            $socio = Asociado::model()->find('cedula=:ci AND id_estatus=1', array(':ci'=>$_POST['ci']));

            if (!empty($socio)) {

                if (!empty($socio->cuenta_bancaria)) {

                    $cuenta = $socio->cuenta_bancaria;

                }else{

                    return false;
                }
            }
        }
        echo CJSON::encode($cuenta);
    }
}
