
<?php
/****************************************************************************************
 * DEV: CONTRALORIA DE ESTADOS
 * PROYECTO: SISTEMA INTEGRAL ADMINISTRATIVO DE CONTRALORIAS DE ESTADOS
 * MODULO: Parque Automotor
 * PROCESO: Listado de revisiones de vehículos
 * PROGRAMADORES:
 * | # |          NOMBRES Y APELLIDOS           |               CORREO                |          TELEFONO              |
 * | 1 |           José Pereda                  |dt.ait.programador2@cgesucre.gob.ve  |         04248040078            |
 * |   |                                        |                                     |                                |
 * |___|________________________________________|_____________________________________|________________________________|
 *
 * VERSION
 *
 * |          PROGRAMADOR                  |          FECHA          |       VERSION      |
 * |               #1                      |        09-07-2015       |         1.0        |
 * |                                       |                         |                    |
 * |_______________________________________|_________________________|____________________|
 *
 *****************************************************************************************/
require_once ROOT. 'publico/contratos/docxpresso/CreateDocument.php';

class proyectoContratoControlador extends Controlador
{
    private $atProyectoContratoModelo;


    public function __construct()
    {
        parent::__construct();
        Session::metAcceso();
        #se carga el Modelo.
        $this->atProyectoContratoModelo = $this->metCargarModelo('proyectoContrato');
        $this->atContratoModelo = $this->metCargarModelo('contrato');
        $this->atReporteModelo = $this->metCargarModelo('reporte');
    }



    #Metodo Index del controlador proyectoContrato
    public function metIndex()
    {


    }

    #Metodo parac cargar el listado de los Proyecto de Contrato
    public function metListarProyectoContrato()
    {
        $complementosCss = array(
            'DataTables/jquery.dataTables',
            'DataTables/extensions/dataTables.tableTools4029',
            'DataTables/extensions/dataTables.colVis941e'
            ,'bootstrap-datepicker/datepicker'
        );

        $js [] ='materialSiace/core/demo/DemoTableDynamic';
        $complementosJs = array(
            'jquery-validation/dist/jquery.validate.min',
            'jquery-validation/dist/additional-methods.min',
            'inputmask/jquery.inputmask.bundle.min',
            'ckeditor/ckeditor',
            'ckeditor/adapters/jquery',
            'bootstrap-datepicker/bootstrap-datepicker'

         );

        if(isset($_POST['desde']) and !empty($_POST['desde']))
        {
            $mes_inicio=$_POST['desde'];
        }else{
            $mes_inicio=date('Y-m').'-01';

        }
        if(isset($_POST['hasta']) and !empty($_POST['hasta']))
        {
            $fecha_actual=$_POST['hasta'];
        }else {
            $fecha_actual = date('Y-m-d');
        }
        if(isset($_POST['proveedor']) and !empty($_POST['proveedor']) )
        {
            $proveedor=$_POST['proveedor'];
        }else {
            $proveedor="0";
        }

        $this->atVista->assign('_EstatusPost', $this->atProyectoContratoModelo->metGetEstatus());

        $this->atVista->assign('_ProveedorPost',  $this->atProyectoContratoModelo->metGetProveedores());

        $this->atVista->assign('_DependenciaPost', $this->atProyectoContratoModelo->metGetDependencias());

        $this->atVista->assign('_ProyectoContratoPost', $this->atProyectoContratoModelo->metGetProyectoContrato('0',$mes_inicio,$fecha_actual,$proveedor));

        $this->atVista->metCargarJsComplemento($complementosJs);

        $this->atVista->metCargarCssComplemento($complementosCss);

        $this->atVista->metCargarJs($js);

        $this->atVista->assign('proveedor',$proveedor);
        $this->atVista->assign('desde',$mes_inicio);
        $this->atVista->assign('hasta',$fecha_actual);

        $this->atVista->metRenderizar('ListarProyectoContrato');
    }




    // Método que permite listar empleados de acuerdo a la busqueda
    public function metFiltroProyecto()
    {

        $filtro_estatus = intval($_POST['filtro_estatus']);



        $filtro_dependencia = $_POST['filtro_dependencia'];

        $filtro_proveedor = $_POST['filtro_proveedor'];

        $resultados= $this->atProyectoContratoModelo->metFiltroProyecto($filtro_estatus,$filtro_dependencia,$filtro_proveedor);

        echo json_encode($resultados);

    }



    #Metodo parac cargar el listado de los Proyecto de Contrato por redactar
    public function metListarRedaccionProyecto()
    {

        $complementosCss = array(
            'DataTables/jquery.dataTables',
            'DataTables/extensions/dataTables.tableTools4029',
            'DataTables/extensions/dataTables.colVis941e',
            'bootstrap-datepicker/datepicker'
        );

        $js [] ='materialSiace/core/demo/DemoTableDynamic';
        $complementosJs = array(
            'jquery-validation/dist/jquery.validate.min',
            'jquery-validation/dist/additional-methods.min',
            'inputmask/jquery.inputmask.bundle.min',
            'ckeditor/ckeditor',
            'ckeditor/adapters/jquery',
            'bootstrap-datepicker/bootstrap-datepicker'

        );

        if(isset($_POST['desde']) and !empty($_POST['desde']))
        {
            $mes_inicio=$_POST['desde'];
        }else{
            $mes_inicio=date('Y-m').'-01';

        }
        if(isset($_POST['hasta']) and !empty($_POST['hasta']))
        {
            $fecha_actual=$_POST['hasta'];
        }else {
            $fecha_actual = date('Y-m-d');
        }
        if(isset($_POST['proveedor']) and !empty($_POST['proveedor']) )
        {
            $proveedor=$_POST['proveedor'];
        }else {
            $proveedor="0";
        }

        $this->atVista->metCargarJsComplemento($complementosJs);
        $this->atVista->metCargarCssComplemento($complementosCss);
        $this->atVista->metCargarJs($js);

        $this->atVista->assign('_ProyectoContratoPost',$this->atProyectoContratoModelo->metGetProyectoContrato('1',$mes_inicio,$fecha_actual,$proveedor));

        $this->atVista->assign('_ProveedorPost',  $this->atProyectoContratoModelo->metGetProveedores());

        $this->atVista->assign('proveedor',$proveedor);
        $this->atVista->assign('desde',$mes_inicio);
        $this->atVista->assign('hasta',$fecha_actual);

        $this->atVista->metRenderizar('ListarRedaccionProyecto');
    }


    #Metodo parac cargar el listado de las obligaciones generadas por un proyecto de contrato
    public function metListarProyectoObligacion()
    {

        $id_contrato=$_POST['idContrato'];
        $complementosCss = array(
            'DataTables/jquery.dataTables',
            'DataTables/extensions/dataTables.tableTools4029',
            'DataTables/extensions/dataTables.colVis941e',

        );

        $complementosJs = array(

            'jquery-validation/dist/jquery.validate.min',
            'jquery-validation/dist/additional-methods.min',
            'inputmask/jquery.inputmask.bundle.min',
        );



        $this->atVista->metCargarJsComplemento($complementosJs);
        $this->atVista->metCargarCssComplemento($complementosCss);

        $valor=$this->atProyectoContratoModelo->metListarObligacion($id_contrato);
        $this->atVista->assign('_ProyectoContratoPost',  $valor);



        if(isset($valor[0]['fk_cpd001_obligacion'])){

            $i=0;
            $TotalComprometido=0;
            $TotalCausado=0;
            $TotalPagado=0;


            while (isset($valor[$i]['fk_cpd001_obligacion'])){


                $Comprometido=$this->atProyectoContratoModelo->metMontosObligacion ($valor[$i]['fk_cpd001_obligacion'],'CO');
                $Causado=$this->atProyectoContratoModelo->metMontosObligacion ($valor[$i]['fk_cpd001_obligacion'],'CA');
                $Pagado=$this->atProyectoContratoModelo->metMontosObligacion ($valor[$i]['fk_cpd001_obligacion'],'PA');

                if(isset($Comprometido[0]['suma'])){

                    $TotalComprometido=$TotalComprometido+$Comprometido[0]['suma'];

                }
                if(isset($Causado[0]['suma'])){

                    $TotalCausado=$TotalCausado+$Causado[0]['suma'];

                }
                if(isset($Pagado[0]['suma'])){

                    $TotalPagado=$TotalPagado+$Pagado[0]['suma'];

                }

                $i++;


            }

            $Montos=array( "Comprometido" =>  $TotalComprometido ,"Causado" => $TotalCausado ,"Pagado" => $TotalPagado );

        }else{ $Montos=array( "Comprometido" => 0 ,"Causado" => 0 ,"Pagado" => 0 );}

        $montoscontratos = $this->atProyectoContratoModelo->metListarMontos($id_contrato);
        $Revertir = $this->atProyectoContratoModelo->metListarRevertir($id_contrato);

        if ($montoscontratos[0][Disponible] == '') {
            $montoscontratos[0][Disponible] = $montoscontratos[0][Comprometido];
        }

        $this->atVista->assign('Montos_',$Montos);
        $this->atVista->assign('idRevertir',$Revertir[0]['pk_num_revertir_contrato']);
        $this->atVista->assign('_MontosContratos',$montoscontratos);
        $this->atVista->assign('_id_contrato', $id_contrato);
        $this->atVista->metRenderizar('ListarObligacionesGC','modales');
    }

    #Metodo para revertir el monto restante causado al presupuesto
    public function metRevertirMontoContrato()
    {
        $valido=$this->metObtenerInt('valido');

        $complementosCss = array(
            'DataTables/jquery.dataTables',
            'DataTables/extensions/dataTables.tableTools4029',
            'DataTables/extensions/dataTables.colVis941e',

        );
        $complementosJs = array(
            'jquery-validation/dist/jquery.validate.min',
            'jquery-validation/dist/additional-methods.min',
            'inputmask/jquery.inputmask.bundle.min',
        );

        $this->atVista->metCargarJsComplemento($complementosJs);
        $this->atVista->metCargarCssComplemento($complementosCss);

        //$valido = $_POST['valido'];
        $idContrato = $_POST['idContrato'];
        $idDistribucion = $_POST['idDistribucion'];
        $motivo = $_POST['motivo'];
        $MontoPagado = $_POST['MontoPagado'];
        $MontoCO = $_POST['MontoCO'];
        $ver = $_POST['ver'];
        $movimiento = 8;

        if ($valido == 1) {

            //ACTUALIZAR MONTO COMPROMETIDO
            $id = $this->atProyectoContratoModelo->metActualizarMontoPartida($idDistribucion,$idContrato,$MontoPagado,$motivo,$MontoCO);

            $this->atProyectoContratoModelo->metRegistrarMovimiento($movimiento,$idContrato);

            if(is_array($id)){

                $validacion=[];
                $validacion['status'] = 'error';
                $validacion['detalleERROR'] = $id;
                echo json_encode($validacion);
                exit;

            }else{

                $datos=[];
                $datos['status'] = 'registrar';
                $datos['idContrato'] = $id;
                echo json_encode($datos);
                exit;

            }

        }

        //BUSCAR EL PK ESTADO DISTRIBUCION CON EL MONTO COMPROMETIDO PARA ACTUALIZAR
        $idDistribucion = $this->atProyectoContratoModelo->metListarObligacionCO($idContrato);
        $valor=$this->atProyectoContratoModelo->metListarObligacion($idContrato);
        $montoscontratos = $this->atProyectoContratoModelo->metListarMontos($idContrato);
        $Revertir = $this->atProyectoContratoModelo->metListarRevertir($idContrato);

        $this->atVista->assign('_MontosContratos',$montoscontratos);
        $this->atVista->assign('idRevertir',$Revertir[0]['pk_num_revertir_contrato']);
        $this->atVista->assign('montoRevertido',$Revertir[0]['ind_monto_revertido']);
        $this->atVista->assign('ind_motivo',$Revertir[0]['ind_motivo']);
        $this->atVista->assign('montoInicial',$Revertir[0]['ind_monto_inicial_comprometido']);
        $this->atVista->assign('_revertir',$Revertir);
        $this->atVista->assign('ver',$ver);
        $this->atVista->assign('idContrato',$idContrato);
        $this->atVista->assign('idDistribucion', $idDistribucion[0]['pk_num_estado_distribucion']);
        $this->atVista->metRenderizar('RevertirMontoContrato','modales');
    }


    public function metListarOrdenes()
    {

        $complementosCss = array(
            'DataTables/jquery.dataTables',
            'DataTables/extensions/dataTables.tableTools4029',
            'DataTables/extensions/dataTables.colVis941e',


        );

        $complementosJs = array(

            'jquery-validation/dist/jquery.validate.min',
            'jquery-validation/dist/additional-methods.min',
            'inputmask/jquery.inputmask.bundle.min',
        );

        $this->atVista->metCargarJsComplemento($complementosJs);
        $this->atVista->metCargarCssComplemento($complementosCss);

        $valor=$this->atProyectoContratoModelo->metListarOrdenContratos($id_contrato);
        $this->atVista->assign('_ProyectoContratoPost',  $valor);

        $this->atVista->assign('_ProveedorPost',  $this->atProyectoContratoModelo->metGetProveedores());

        $this->atVista->assign('ordenes',$valor);
        $this->atVista->assign('_id_contrato', $id_contrato);
        $this->atVista->metRenderizar('ListarOrdenesGC','modales');
    }


    #Metodo parac cargar el listado de los Proyecto de Contrato por revisar
    public function metListarRevisionProyecto()
    {
        $complementosCss = array(
            'DataTables/jquery.dataTables',
            'DataTables/extensions/dataTables.tableTools4029',
            'DataTables/extensions/dataTables.colVis941e',
            'bootstrap-datepicker/datepicker'


        );

        $js [] ='materialSiace/core/demo/DemoTableDynamic';
        $complementosJs = array(

            'jquery-validation/dist/jquery.validate.min',
            'jquery-validation/dist/additional-methods.min',
            'inputmask/jquery.inputmask.bundle.min',
            'bootstrap-datepicker/bootstrap-datepicker'
        );

        if(isset($_POST['desde']) and !empty($_POST['desde']))
        {
            $mes_inicio=$_POST['desde'];
        }else{
            $mes_inicio=date('Y-m').'-01';

        }
        if(isset($_POST['hasta']) and !empty($_POST['hasta']))
        {
            $fecha_actual=$_POST['hasta'];
        }else {
            $fecha_actual = date('Y-m-d');
        }
        if(isset($_POST['proveedor']) and !empty($_POST['proveedor']) )
        {
            $proveedor=$_POST['proveedor'];
        }else {
            $proveedor="0";
        }

        $this->atVista->metCargarJsComplemento($complementosJs);
        $this->atVista->metCargarCssComplemento($complementosCss);
        $this->atVista->metCargarJs($js);

        $this->atVista->assign('_ProyectoContratoPost',$this->atProyectoContratoModelo->metGetProyectoContrato('2',$mes_inicio,$fecha_actual,$proveedor));

        $this->atVista->assign('_ProveedorPost',  $this->atProyectoContratoModelo->metGetProveedores());

        $this->atVista->assign('proveedor',$proveedor);
        $this->atVista->assign('desde',$mes_inicio);
        $this->atVista->assign('hasta',$fecha_actual);

        $this->atVista->metRenderizar('ListarRevisionProyecto');
    }
    #Metodo parac cargar el listado de los Proyecto de Contrato por  conformar
    public function metListarConformacionProyecto()
    {
        $complementosCss = array(
            'DataTables/jquery.dataTables',
            'DataTables/extensions/dataTables.tableTools4029',
            'DataTables/extensions/dataTables.colVis941e',
            'bootstrap-datepicker/datepicker'
        );

        $js [] ='materialSiace/core/demo/DemoTableDynamic';
        $complementosJs = array(

            'jquery-validation/dist/jquery.validate.min',
            'jquery-validation/dist/additional-methods.min',
            'inputmask/jquery.inputmask.bundle.min',
            'bootstrap-datepicker/bootstrap-datepicker'
        );

        if(isset($_POST['desde']) and !empty($_POST['desde']))
        {
            $mes_inicio=$_POST['desde'];
        }else{
            $mes_inicio=date('Y-m').'-01';

        }
        if(isset($_POST['hasta']) and !empty($_POST['hasta']))
        {
            $fecha_actual=$_POST['hasta'];
        }else {
            $fecha_actual = date('Y-m-d');
        }
        if(isset($_POST['proveedor']) and !empty($_POST['proveedor']) )
        {
            $proveedor=$_POST['proveedor'];
        }else {
            $proveedor="0";
        }

        $this->atVista->metCargarJsComplemento($complementosJs);
        $this->atVista->metCargarCssComplemento($complementosCss);
        $this->atVista->metCargarJs($js);

        $this->atVista->assign('_ProveedorPost',  $this->atProyectoContratoModelo->metGetProveedores());

        $this->atVista->assign('_ProyectoContratoPost',$this->atProyectoContratoModelo->metGetProyectoContrato('3',$mes_inicio,$fecha_actual,$proveedor));

        $this->atVista->assign('proveedor',$proveedor);
        $this->atVista->assign('desde',$mes_inicio);
        $this->atVista->assign('hasta',$fecha_actual);

        $this->atVista->metRenderizar('ListarConformacionProyecto');
    }
    #Metodo parac cargar el listado de los Proyecto de Contrato por revisar
    public function metListarAprobacionProyecto()
    {
        $complementosCss = array(
            'DataTables/jquery.dataTables',
            'DataTables/extensions/dataTables.tableTools4029',
            'DataTables/extensions/dataTables.colVis941e',
            'bootstrap-datepicker/datepicker'

        );

        $js [] ='materialSiace/core/demo/DemoTableDynamic';
        $complementosJs = array(

            'jquery-validation/dist/jquery.validate.min',
            'jquery-validation/dist/additional-methods.min',
            'inputmask/jquery.inputmask.bundle.min',
            'bootstrap-datepicker/bootstrap-datepicker'
        );

        if(isset($_POST['desde']) and !empty($_POST['desde']))
        {
            $mes_inicio=$_POST['desde'];
        }else{
            $mes_inicio=date('Y-m').'-01';

        }
        if(isset($_POST['hasta']) and !empty($_POST['hasta']))
        {
            $fecha_actual=$_POST['hasta'];
        }else {
            $fecha_actual = date('Y-m-d');
        }
        if(isset($_POST['proveedor']) and !empty($_POST['proveedor']) )
        {
            $proveedor=$_POST['proveedor'];
        }else {
            $proveedor="0";
        }

        $this->atVista->metCargarJsComplemento($complementosJs);
        $this->atVista->metCargarCssComplemento($complementosCss);
        $this->atVista->metCargarJs($js);

        $this->atVista->assign('_ProyectoContratoPost',$this->atProyectoContratoModelo->metGetProyectoContrato('4',$mes_inicio,$fecha_actual,$proveedor));

        $this->atVista->assign('_ProveedorPost',  $this->atProyectoContratoModelo->metGetProveedores());

        $this->atVista->assign('proveedor',$proveedor);
        $this->atVista->assign('desde',$mes_inicio);
        $this->atVista->assign('hasta',$fecha_actual);

        $this->atVista->metRenderizar('ListarAprobacionProyecto');
    }

    #Metodo para cargar el listado de las partidas relacionadas con los contratos
    public function metListarPartidasContrato()
    {
        $js[] = 'Aplicacion/appFunciones';
        $this->atVista->metCargarJs($js);

        $idPartida = $_POST['id'];

        $factor =  (int) $_POST['factor'];

        $monto =  $_POST['monto'];

        $Montos=array( "Monto" => $monto);

        $idPartidas = array( "Partida" => $idPartida);

        $monto1 = (float) preg_replace('[^\w ]', '',(preg_replace('/[^0-9,]/i', '', $monto)));

        $iva = ($monto1 * $factor) / 100;

        $resultado = $monto1;

        $this->atVista->assign('monto1',$resultado);

        $this->atVista->assign('ajustado_monto',$resultado);

        $this->atVista->assign('factor',$iva);

        $this->atVista->assign('ajustado_iva',$iva);

        $this->atVista->assign('_PartidasSeleccionadasPost',$idPartidas);

        $this->atVista->assign('_monto',$Montos);

        //$this->atVista->assign('_PartidasPost',$this->atProyectoContratoModelo->metListarPartida('error',date('Y'),'error'));
        $this->atVista->metRenderizar('ListarPartidasContrato','modales');

        //echo json_encode($idPartidas);
    }

    public function metJsonDataTablaPartidas()
    {
        $anio = date("Y");
        #obtengo los rodes de usuario, Nota: esto es obligatorio
        $rol = Session::metObtener('perfil');
        #cacturo la busqueda enviada por la datatabla, Nota: esto es obligatorio
        $busqueda = $this->metObtenerFormulas('search');
        #construyo el sql, Nota: esto es obligatorio
        $sql = "SELECT
                pbp.ind_cod_presupuesto,
                pnpp.cod_partida,
                pnpp.pk_num_partida_presupuestaria,
                pnpp.ind_denominacion,
                pcpd.*,
                @num := pcpd.pk_num_presupuesto_det,
                ( SELECT sum( gc_b004_partidas_contrato.num_monto ) AS total FROM gc_b004_partidas_contrato WHERE gc_b004_partidas_contrato.ind_partida = pnpp.cod_partida AND fec_anio = '$anio' ) AS monto_pre,
                CONCAT(
                        REPLACE (
                            FORMAT(
                                FLOOR(
                                    ROUND(
                                        ( SELECT sum( gc_b004_partidas_contrato.num_monto ) AS total FROM gc_b004_partidas_contrato WHERE gc_b004_partidas_contrato.ind_partida = pnpp.cod_partida AND fec_anio = '$anio' ),
                                        2
                                    )
                                ),
                                0
                            ),
                            ',',
                            '.'
                        ),
                        ',',
                        SUBSTRING_INDEX(
                            FORMAT(
                                ROUND(
                                    ( SELECT sum( gc_b004_partidas_contrato.num_monto ) AS total FROM gc_b004_partidas_contrato WHERE gc_b004_partidas_contrato.ind_partida = pnpp.cod_partida AND fec_anio = '$anio' ),
                                    2
                                ),
                                2
                            ),
                            '.',
                            - 1
                        )
                    ) AS monto_pre_format,
                CONCAT(
                    REPLACE ( FORMAT( FLOOR( ROUND( pcpd.num_monto_aprobado, 2 ) ), 0 ), ',', '.' ),
                    ',',
                    SUBSTRING_INDEX( FORMAT( ROUND( pcpd.num_monto_aprobado, 2 ), 2 ), '.', - 1 )
                ) AS num_monto_aprobado_format,
                CONCAT(
                    REPLACE ( FORMAT( FLOOR( ROUND( pcpd.num_monto_ajustado, 2 ) ), 0 ), ',', '.' ),
                    ',',
                    SUBSTRING_INDEX( FORMAT( ROUND( pcpd.num_monto_ajustado, 2 ), 2 ), '.', - 1 )
                ) AS num_monto_ajustado_format,
                CONCAT(
                    REPLACE ( FORMAT( FLOOR( ROUND( pcpd.num_monto_compromiso, 2 ) ), 0 ), ',', '.' ),
                    ',',
                    SUBSTRING_INDEX( FORMAT( ROUND( pcpd.num_monto_compromiso, 2 ), 2 ), '.', - 1 )
                ) AS num_monto_compromiso_format,
                CONCAT(
                    REPLACE ( FORMAT( FLOOR( ROUND( pcpd.num_monto_causado, 2 ) ), 0 ), ',', '.' ),
                    ',',
                    SUBSTRING_INDEX( FORMAT( ROUND( pcpd.num_monto_causado, 2 ), 2 ), '.', - 1 )
                ) AS num_monto_causado_format,
                CONCAT(
                    REPLACE ( FORMAT( FLOOR( ROUND( pcpd.num_monto_pagado, 2 ) ), 0 ), ',', '.' ),
                    ',',
                    SUBSTRING_INDEX( FORMAT( ROUND( pcpd.num_monto_pagado, 2 ), 2 ), '.', - 1 )
                ) AS num_monto_pagado_format,
                (
                SELECT
                    SUM( pded.num_monto )
                FROM
                    pr_c002_presupuesto_det pcpd
                    INNER JOIN pr_d008_estado_distribucion pded ON ( pded.fk_prc002_num_presupuesto_det = pcpd.pk_num_presupuesto_det )
                WHERE
                    ind_tipo_distribucion = 'CO'
                    AND ind_estado = 'AC'
                    AND pded.fk_prc002_num_presupuesto_det = @num
                ) AS compromiso_dist,
                (
                SELECT
                    CONCAT(
                        REPLACE ( FORMAT( FLOOR( ROUND( SUM( pded.num_monto ), 2 ) ), 0 ), ',', '.' ),
                        ',',
                        SUBSTRING_INDEX( FORMAT( ROUND( SUM( pded.num_monto ), 2 ), 2 ), '.', - 1 )
                    )
                FROM
                    pr_c002_presupuesto_det pcpd
                    INNER JOIN pr_d008_estado_distribucion pded ON ( pded.fk_prc002_num_presupuesto_det = pcpd.pk_num_presupuesto_det )
                WHERE
                    ind_tipo_distribucion = 'CO'
                    AND ind_estado = 'AC'
                    AND pded.fk_prc002_num_presupuesto_det = @num
                ) AS compromiso_dist_format,
                pcpd.num_monto_ajustado as disponible
            FROM
                pr_c002_presupuesto_det pcpd
                INNER JOIN pr_b004_presupuesto pbp ON ( pbp.pk_num_presupuesto = pcpd.fk_prb004_num_presupuesto )
                INNER JOIN pr_b002_partida_presupuestaria pnpp ON ( pcpd.fk_prb002_num_partida_presupuestaria = pnpp.pk_num_partida_presupuestaria )
            WHERE
                1
                AND pbp.ind_estado = 'AP'
            ";
        if ($busqueda['value']) {
            $sql .= " AND
                        (
                            pnpp.cod_partida LIKE '%$busqueda[value]%' OR
                            pnpp.ind_denominacion LIKE '%$busqueda[value]%'
                         )
                        ";


        }

        //var_dump($sql);
        #creo un arreglo de los campos a mostrar, Nota: esto es obligatorio
        $campos = array('pk_num_partida_presupuestaria','ind_cod_presupuesto','cod_partida','ind_denominacion','pk_num_presupuesto_det','num_monto_aprobado','num_monto_aprobado_format','num_monto_ajustado','num_monto_ajustado_format','num_monto_compromiso','num_monto_compromiso_format', 'num_monto_causado','num_monto_causado_format','num_monto_pagado','num_monto_pagado_format','num_monto_incremento','num_monto_disminucion','num_monto_disminucion','compromiso_dist','compromiso_dist_format','monto_pre','monto_pre_format','disponible');
        #campo primario de la tabla, Nota: esto es obligatorio
        $clavePrimaria = 'pk_num_partida_presupuestaria';

        #hago el llamado de la datatabla del controlador principal.
        $this->metDataTabla($sql,$campos,$clavePrimaria);

    }


    public function metActualizarTipoContrato()
    {

        $idSolicitado=$this->metObtenerInt('idSolicitado');

        $consulta= $this->atProyectoContratoModelo->metMostrarSelectTipo($idSolicitado);
        $resultado="<option value=''>Seleccione</option>";
        for($i=0;$i<count($consulta);$i++){
            $resultado.= "<option value=".$consulta[$i]['pk_num_tipo_contrato'].">".$consulta[$i]['ind_descripcion']."</option>";
        }

        echo json_encode($resultado);
        exit;

    }

     public function metActTipoContrato()
    {


        $idSolicitado=$this->metObtenerInt('idSolicitado');

        $consulta= $this->atProyectoContratoModelo->metSelectTipo($idSolicitado);

        for($i=0;$i<count($consulta);$i++){
            $resultado=$consulta[$i]['ind_descripcion'];
        }
        echo json_encode($resultado);
        exit;

    }

    public function metCorrelContrato()
    {
        $idSolicitado=$this->metObtenerInt('idSolicitado');
        // Consultamos los proyectos registrados por año y dependencia para asignar correctamente un correlativo
        $guia=$this->atProyectoContratoModelo->metConsultarProyectoContratos(date('Y'),$idSolicitado);
        $guia++;
        // Creamos el correlativo
        $Correlativo=$this->metCorrelativoP($idSolicitado,$guia);

        echo json_encode($Correlativo);
        exit;

    }

    public function metActualizarAplicable()
    {

        $idTipoContrato=$this->metObtenerInt('idTipoContrato');

        $consulta= $this->atProyectoContratoModelo->metMostrarSelectAplicable($idTipoContrato);
        $resultado="<option value=''>Seleccione</option>";
        for($i=0;$i<sizeof($consulta);$i++){
            $resultado.= "<option value=".$consulta[$i]['pk_num_aplicable_contrato'].">".$consulta[$i]['ind_descripcion']."</option>";
        }



        echo json_encode($resultado);
        exit;

    }

    public function metVisualizarNombre()
    {

        $idTipoContrato=$this->metObtenerAlphaNumerico('idTipoDocumento');
        $idDocumento=$this->metObtenerAlphaNumerico('idDocumento');


        $consulta= $this->atProyectoContratoModelo->metMostrarNombre($idDocumento,$idTipoContrato);


        echo json_encode($consulta);
        exit;

    }
    public function metBuscarRepresentante()
    {


        $idDocumento=$this->metObtenerAlphaNumerico('idDocumento');


        $consulta= $this->atProyectoContratoModelo->metBuscarRepresentante($idDocumento);


        echo json_encode($consulta);
        exit;

    }

    public function metRegistrarProyecto()
    {

        $NumeroPartidas = $this->metObtenerInt('NPartidasSeleccionadas');
        $valido=$this->metObtenerInt('valido');
        $addendum=$this->metObtenerInt('idPost');
        $movimiento="1";

        $Accion=array( "accion" => "registrar");

        $js = array(
            'materialSiace/core/demo/DemoFormWizard',
            'materialSiace/core/demo/DemoFormComponents',
        );

        $complementosJs = array(
            'jquery-validation/dist/jquery.validate.min',
            'jquery-validation/dist/additional-methods.min',
            'inputmask/jquery.inputmask.bundle.min',
            'ckeditor/ckeditor',
            'ckeditor/adapters/jquery',
            'select2/select2.min',
            'wizard/jquery.bootstrap.wizard.min',
            'bootstrap-datepicker/bootstrap-datepicker',
            '../javascript/modGC/inputValidacion/valido','inputmask/mask'

        );

        $complementosCss = array(
            'wizard/wizardfa6c',
            'jquery-validation/dist/site-demo',
            'select2/select201ef',

        );
        if($valido==1) {

            $formInt=$this->metObtenerInt('form','int');
            $formAlphaNum=$this->metObtenerAlphaNumerico('form','alphaNum');
            $formTxt=$this->metObtenerTexto('form','txt');
            $formMonto=$this->metObtenerMonto('form','monto');
            $formCuerpo=$this->metObtenerFormulas('form','formula');

            $validacion['accion']=$this->metObtenerAlphaNumerico('accion');
            $validacion['lugarPago']=$this->metObtenerTexto('form','lugarPago');
            $validacion['guia']=$this->metObtenerTexto('form','guia');
            $validacion['formaPago']=$this->metObtenerAlphaNumerico('form','formaPago');


            if(!empty($formMonto)){
                foreach ($formMonto as $tituloInt => $valorInt) {
                    if(!empty($formMonto[$tituloInt])){
                        $validacion[$tituloInt]=$valorInt;
                    }else{
                        $validacion[$tituloInt]='error';
                    }
                }
            }

            if(!empty($formInt)){
                foreach ($formInt as $tituloInt => $valorInt) {
                    if(!empty($formInt[$tituloInt])){
                        $validacion[$tituloInt]=$valorInt;
                    }else{
                        $validacion[$tituloInt]='error';
                    }
                }
            }
            if(!empty($formAlphaNum)) {
                foreach ($formAlphaNum as $tituloAlphaNum => $valorAlphaNum) {
                    if (!empty($formAlphaNum[$tituloAlphaNum]) && $formAlphaNum[$tituloAlphaNum] != '') {
                        $validacion[$tituloAlphaNum] = $valorAlphaNum;
                    } else {
                        $validacion[$tituloAlphaNum] = 'error';
                    }
                }
            }

            if(!empty($formTxt)) {
                foreach ($formTxt as $tituloTxt => $valorTxt) {
                    if (!empty($formTxt[$tituloTxt]) && $formTxt[$tituloTxt] != '') {
                        $validacion[$tituloTxt] = $valorTxt;
                    } else {
                        $validacion[$tituloTxt] = 'error';
                    }
                }
            }

            if(!empty($formCuerpo)) {
                foreach ($formCuerpo as $tituloCuerpo => $valorCuerpo) {
                    if (!empty($formCuerpo[$tituloCuerpo]) && $formCuerpo[$tituloCuerpo] != '') {
                        $validacion[$tituloCuerpo] = $valorCuerpo;
                    } else {
                        $validacion[$tituloCuerpo] = 'error';
                    }
                }
            }

            $hora=date('H:i:s');

           $desde=$this->metFormatoFecha($_POST['desde']);
            $desde=trim($desde." $hora");

            $hasta=$this->metFormatoFecha($_POST['hasta']);
            $hasta=trim($hasta." $hora");

            $entrada=$this->metFormatoFecha($_POST['entrada']);


            $entrada=trim($entrada." $hora");

        $validacion['contrato']=str_replace(",", ".", $validacion['contrato']);

        // Consultamos los proyectos registrados por año y dependencia para asignar correctamente un correlativo
        $guia=$this->atProyectoContratoModelo->metConsultarProyectoContratos(date('Y'),$validacion['idSolicitado']);
        $guia++;


        /*if($validacion['objeto']=="error"){
            $validacion=[];
            $validacion['status'] = 'error';
            $validacion['detalleERROR'] = " Campos objeto sin contenido";
            echo json_encode($validacion);
            exit;
        }*/

        $validacion['ind_convenio']=$_POST['ind_convenio'];

        // Ingresamos el proyecto a la bd y obtenemos su id
        $id=$this->atProyectoContratoModelo->metSetProyecto2($validacion['idSolicitado'],$validacion['idTipoContrato'],$validacion['idAplicable'],$validacion['objeto'],$validacion['contrato'],$validacion['idDocumento'],$validacion['CodRepresentante'],$desde,$hasta,$entrada,$validacion['formaPago'],$validacion['lugarPago'],$movimiento,$validacion['guia'],intval($validacion['addendum']),intval($validacion['tipo_servicio']),$validacion['ind_convenio']);

            if(is_array($id)){
                $validacion=[];
                $validacion['status'] = 'error';
                $validacion['detalleERROR'] = $id;
                echo json_encode($validacion);
                exit;
            }else{



         // Creamos el correlativo
         $Correlativo=$this->metCorrelativoProyecto($validacion['idSolicitado'],$guia);
         // Asignamos el correlativo
         $this->atProyectoContratoModelo->metAsignarCorrelativo($Correlativo,$id);

         //$this->atProyectoContratoModelo->metEliminarPartidas($id);

         if ($NumeroPartidas != 0) {
             for ($i = 1; $i <= $NumeroPartidas ; $i++) {

                 if( isset($validacion['monto'.$i])){
                     $respuesta=$this->atProyectoContratoModelo->metGetPresupuestoDetPartida($validacion['partidaDet'.$i]);

                     $validacion['monto'.$i]=str_replace(",",".", $validacion['monto'.$i]);
                     $validacion['Ajustado'.$i]=str_replace(",",".", $validacion['Ajustado'.$i]);

                     $resultado = $this->atProyectoContratoModelo->metAsignarPartidas($validacion['partidaDet'.$i], $validacion['monto'.$i],$validacion['Ajustado'.$i],$respuesta['pk_num_presupuesto_det'],$respuesta['fk_cbb004_num_plan_cuenta_pub20'],$respuesta['fk_cbb004_num_plan_cuenta_onco'],$id);
                 }

             }


         }
         $feed=$this->metObtenerInt('tipoClausula');
         $Cuerpo=($validacion['ind_convenio']);

                $consulta=$this->atProyectoContratoModelo->metGetProyecto($id);
                $datos=[];
                $datos['Contenido']=$Cuerpo;
                $datos['Tipo']=$feed;
                $datos['status'] = 'creacion';
                $datos['idProyecto'] = $id;
                $datos['proveedor']=$consulta[0]['proveedor'];
                $datos['objeto']=$validacion['objeto'];
                $datos['estatus']=$consulta[0]['ind_nombre_detalle'];
                $datos['monto']=$validacion['contrato'];
                $datos['estado']=$consulta[0]['fk_a006_num_estado_contrato'];
                $datos['solicitado']=$validacion['idSolicitado'];

                $IdVal=array("idvalor" => $consulta);
                $this->atVista->assign('NumId', $IdVal);

                echo json_encode($datos);
                exit;
            }

        }else {

                $this->atVista->metCargarJsComplemento($complementosJs);
                $this->atVista->metCargarJs($js);

                $this->atVista->metCargarCssComplemento($complementosCss);
                $this->atVista->assign('_FormaPagoPost', $this->atProyectoContratoModelo->atMiscelaneoModelo->metMostrarSelect('TIPOPAGO'));
                $this->atVista->assign('listadoServicio', $this->atProyectoContratoModelo->atObligacionModelo->atServicioModelo->metServiciosListar());
            if(intval($addendum>0)){

                $Accion=array( "accion" => "addendum",);
                $this->atVista->assign('_Acciones', $Accion);
                $this->atVista->assign('_DependenciaPost', $this->atProyectoContratoModelo->metGetDependencias());
                $consulta=$this->atProyectoContratoModelo->metGetProyecto($addendum);
                $this->atVista->assign('_ProyectoContratoPost',$consulta);
                 $IdVal=array("idvalor" => $consulta);
                 $this->atVista->assign('NumId', $IdVal);

                $this->atVista->assign('_ProveedorPost',  $this->atProyectoContratoModelo->metGetProveedores());
                $this->atVista->assign('_PartidasSeleccionadasPost',$this->atProyectoContratoModelo->metObtenerPartidasSeleccionadas($addendum));
                $this->atVista->assign('_AplicablePost',$this->atProyectoContratoModelo->metMostrarSelectAplicable($consulta[0]['fk_gcc003_num_tipo_contrato']));
                $this->atVista->assign('_TipoContratoPost', $this->atProyectoContratoModelo->metMostrarSelectTipo($consulta[0]['fk_a004_dependencia']));

                $this->atVista->assign('_Addendum', $addendum);
                $this->atVista->metRenderizar('RegistrarRedaccionProyecto' );

            }else{
                $this->atVista->assign('_Acciones', $Accion);
                $this->atVista->assign('_ProveedorPost',  $this->atProyectoContratoModelo->metGetProveedores());
                $this->atVista->assign('_DependenciaPost', $this->atProyectoContratoModelo->metGetDependencias());

                $this->atVista->metRenderizar('RegistrarProyectoContrato' );

            }

        }

    }

    //--- Modificar Proyecto de Contrato

    public function metModificarProyecto()
    {

        //echo $NumeroPartidas;
        $valido=$this->metObtenerInt('valido');
        $id_valor=$this->metObtenerInt('idPost');
        $accion=$this->metObtenerTexto('accion');



        //echo $NumeroPartidas;
        $Accion=array( "accion" => $accion);

        // asignamos a la variable moviento el valor que le corresponde en el miscelaneo
        $movimiento="2";

        $js = array(
            'materialSiace/core/demo/DemoFormWizard',
            'materialSiace/core/demo/DemoFormComponents',
        );

        $complementosJs = array(
            'jquery-validation/dist/jquery.validate.min',
            'jquery-validation/dist/additional-methods.min',
            'inputmask/jquery.inputmask.bundle.min',
            'ckeditor/ckeditor',
            'ckeditor/adapters/jquery',
            'select2/select2.min',
            'wizard/jquery.bootstrap.wizard.min',
            'bootstrap-datepicker/bootstrap-datepicker',
            '../javascript/modGC/inputValidacion/valido',

        );

        $complementosCss = array(
            'wizard/wizardfa6c',
            'jquery-validation/dist/site-demo',
            'select2/select201ef',
        );

      if($valido==1) {




                $formInt=$this->metObtenerInt('form','int');
                $formAlphaNum=$this->metObtenerAlphaNumerico('form','alphaNum');
                $formTxt=$this->metObtenerTexto('form','txt');
                $formMonto=$this->metObtenerMonto('form','monto');
                $formCuerpo=$this->metObtenerFormulas('form','formula');


                if(!empty($formMonto)){
                    foreach ($formMonto as $tituloInt => $valorInt) {
                        if(!empty($formMonto[$tituloInt])){
                            $validacion[$tituloInt]=$valorInt;
                        }else{
                            $validacion[$tituloInt]='error';
                        }
                    }
                }

                if(!empty($formInt)){
                    foreach ($formInt as $tituloInt => $valorInt) {
                        if(!empty($formInt[$tituloInt])){
                            $validacion[$tituloInt]=$valorInt;
                        }else{
                            $validacion[$tituloInt]='error';
                        }
                    }
                }
                if(!empty($formAlphaNum)) {
                    foreach ($formAlphaNum as $tituloAlphaNum => $valorAlphaNum) {
                        if (!empty($formAlphaNum[$tituloAlphaNum]) && $formAlphaNum[$tituloAlphaNum] != '') {
                            $validacion[$tituloAlphaNum] = $valorAlphaNum;
                        } else {
                            $validacion[$tituloAlphaNum] = 'error';
                        }
                    }
                }

                if(!empty($formTxt)) {
                    foreach ($formTxt as $tituloTxt => $valorTxt) {
                        if (!empty($formTxt[$tituloTxt]) && $formTxt[$tituloTxt] != '') {
                            $validacion[$tituloTxt] = $valorTxt;
                        } else {
                            $validacion[$tituloTxt] = 'error';
                        }
                    }
                }

              if(!empty($formCuerpo)) {
                  foreach ($formCuerpo as $tituloCuerpo => $valorCuerpo) {
                      if (!empty($formCuerpo[$tituloCuerpo]) && $formCuerpo[$tituloCuerpo] != '') {
                          $validacion[$tituloCuerpo] = $valorCuerpo;
                      } else {
                          $validacion[$tituloCuerpo] = 'error';
                      }
                  }
              }



               $consulta=$this->atProyectoContratoModelo->metGetProyecto($validacion['idRegistro']);
               $this->atVista->assign('_Acciones', $Accion);

               if($consulta[0]['fk_gcc004_num_aplicable_contrato']!=$validacion['idAplicable']
               || $consulta[0]['ind_objeto_contrato']!=$validacion['objeto']                   || $consulta[0]['num_monto_contrato']!=$validacion['contrato']

               || $consulta[0]['fk_gcc003_num_tipo_contrato']!=$validacion['idTipoContrato']   || $consulta[0]['fk_a006_num_forma_pago']!=$validacion['formaPago']
               || $consulta[0]['fk_a003_proveedor']!=$validacion['idDocumento']                || $consulta[0]['fk_a003_representante']!=$validacion['CodRepresentante']
               || $consulta[0]['num_guia_contrato']!=$validacion['guia']
               ){

                // $validacion2['ind_convenio']=$_POST['ind_convenio'];

               $this->atProyectoContratoModelo->metUpdateProyecto($validacion['idAplicable'],$validacion['objeto'],$validacion['contrato'] ,$validacion['idSolicitado'],$validacion['idTipoContrato'],$validacion['formaPago'],$validacion['idDocumento'],$validacion['CodRepresentante'],$validacion['ind_convenio'],$validacion['idRegistro'],$movimiento,$validacion['guia']);
               }

               if($consulta[0]['fec_desde']!=$_POST['desde']  || $consulta[0]['fec_hasta']!=$_POST['hasta']  || $consulta[0]['fec_entrada']!=$_POST['entrada']
                || $consulta[0]['ind_lugar_pago']!=$validacion['lugarPago'] || $consulta[0]['ind_cuerpo']!=$validacion['ind_convenio'])
                {

                    $hora=date('H:i:s');
                  $desde=$this->metFormatoFecha($_POST['desde']);
                  $desde=trim($desde." $hora");

                  $hasta=$this->metFormatoFecha($_POST['hasta']);
                  $hasta=trim($hasta." $hora");

                  $entrada=$this->metFormatoFecha($_POST['entrada']);
                  $entrada=trim($entrada." $hora");

                  $this->atProyectoContratoModelo->metUpdateProyectoDetalle($desde,$hasta,$entrada,NULL,NULL,NULL,$validacion['lugarPago'],$validacion['idRegistro']);
                }

                $NumeroPartidas = $this->metObtenerInt('NPartidasSeleccionadas');

                if ($NumeroPartidas != 0) {

                    $this->atProyectoContratoModelo->metEliminarPartidas ($validacion['idRegistro']);

                    for ($i = 1; $i <= $NumeroPartidas ; $i++) {

                        if( isset($validacion['monto'.$i])){

                            $respuesta=$this->atProyectoContratoModelo->metGetPresupuestoDetPartida($validacion['partidaDet'.$i]);
                            $validacion['monto'.$i]=str_replace(",", ".", $validacion['monto'.$i]);
                            $validacion['Ajustado'.$i]=str_replace(",", ".", $validacion['Ajustado'.$i]);

                            $this->atProyectoContratoModelo->metAsignarPartidas( $validacion['partidaDet'.$i], $validacion['monto'.$i],$validacion['Ajustado'.$i], $respuesta['pk_num_presupuesto_det'],$respuesta['fk_cbb004_num_plan_cuenta_pub20'],$respuesta['fk_cbb004_num_plan_cuenta_onco'],$validacion['idRegistro']);
                        }
                    }
                }

                 else if($NumeroPartidas == 0) {

                    $partidas=$this->atProyectoContratoModelo->metObtenerPartidasSeleccionadas($id_valor);

                    for ($i = 1; $i <= count($partidas) ; $i++) {

                        if( isset($validacion['monto'.$i])){

                            $respuesta=$this->atProyectoContratoModelo->metGetPresupuestoDetPartida($validacion['partidaDet'.$i]);
                            $validacion['monto'.$i]=str_replace(",", ".", $validacion['monto'.$i]);
                            $validacion['Ajustado'.$i]=str_replace(",", ".", $validacion['Ajustado'.$i]);

                            $this->atProyectoContratoModelo->metAsignarPartidas( $validacion['partidaDet'.$i], $validacion['monto'.$i],$validacion['Ajustado'.$i], $respuesta['pk_num_presupuesto_det'],$respuesta['fk_cbb004_num_plan_cuenta_pub20'],$respuesta['fk_cbb004_num_plan_cuenta_onco'],$validacion['idRegistro']);
                        }
                    }
                }

                $datos=[];
                //-----------Mostrar
                $datos['cuerpo']=$consulta[0]['ind_cuerpo'];
                $datos['idProyecto']=$validacion['idRegistro'];
                $datos['proveedor']=$consulta[0]['proveedor'];
                $datos['objeto']=$validacion['objeto'];
                $datos['estatus']=$consulta[0]['ind_nombre_detalle'];
                $datos['monto']=$validacion['contrato'];
                $datos['estado']=$consulta[0]['fk_a006_num_estado_contrato'];
                echo json_encode($datos);
                exit;

        }else {

            $this->atVista->metCargarJs($js);
            $this->atVista->metCargarJsComplemento($complementosJs);
            $this->atVista->metCargarCssComplemento($complementosCss);

            $this->atVista->assign('listadoServicio', $this->atProyectoContratoModelo->atObligacionModelo->atServicioModelo->metServiciosListar());
            $this->atVista->assign('_FormaPagoPost', $this->atProyectoContratoModelo->atMiscelaneoModelo->metMostrarSelect('TIPOPAGO'));
            $this->atVista->assign('_Acciones', $Accion);
            $this->atVista->assign('_DependenciaPost', $this->atProyectoContratoModelo->metGetDependencias());
            $consulta=$this->atProyectoContratoModelo->metGetProyecto($id_valor);
            $this->atVista->assign('_ProyectoContratoPost',$consulta);
            $this->atVista->assign('_ProveedorPost',  $this->atProyectoContratoModelo->metGetProveedores());
            $this->atVista->assign('_PartidasSeleccionadasPost',$this->atProyectoContratoModelo->metObtenerPartidasSeleccionadas($id_valor));
            $this->atVista->assign('_AplicablePost',$this->atProyectoContratoModelo->metMostrarSelectAplicable($consulta[0]['fk_gcc003_num_tipo_contrato']));
            $this->atVista->assign('_TipoContratoPost', $this->atProyectoContratoModelo->metMostrarSelectTipo ($consulta[0]['fk_a004_dependencia']));
            $this->atVista->metRenderizar('RegistrarProyectoContrato',"modales");




            }
    }

//----Nuevo Metodo para Ver en Proyecto
    public function metVerProyecto()
    {
        $valido=$this->metObtenerInt('valido');
        $id_valor=$this->metObtenerInt('idPost');
        $_Accion=$this->metObtenerTexto('accion');

        $Accion=array( "accion" => $_Accion);
        //echo $validacion['accion'];

        // asignamos a la variable moviento el valor que le corresponde en el miscelaneo en este caso el 1, de  preparado.
        $movimiento="3";
        $Estatus="2";

        $js = array(
            'materialSiace/core/demo/DemoFormWizard',
            'materialSiace/core/demo/DemoFormComponents',
        );

        $complementosJs = array(
            'jquery-validation/dist/jquery.validate.min',
            'jquery-validation/dist/additional-methods.min',
            'inputmask/jquery.inputmask.bundle.min',
            'ckeditor/ckeditor',
            'ckeditor/adapters/jquery',
            'select2/select2.min',
            'wizard/jquery.bootstrap.wizard.min',
            'bootstrap-datepicker/bootstrap-datepicker',
            '../javascript/modGC/inputValidacion/valido',
        );

        $complementosCss = array(
            'wizard/wizardfa6c',
            'jquery-validation/dist/site-demo',
            'select2/select201ef',
        );

        if($valido==1) {

            $formInt=$this->metObtenerInt('form','int');
            $formAlphaNum=$this->metObtenerAlphaNumerico('form','alphaNum');
            $formTxt=$this->metObtenerTexto('form','txt');
            $formMonto=$this->metObtenerMonto('form','monto');

            if(!empty($formMonto)){
                foreach ($formMonto as $tituloInt => $valorInt) {
                    if(!empty($formMonto[$tituloInt])){
                        $validacion[$tituloInt]=$valorInt;
                    }else{
                        $validacion[$tituloInt]='error';
                    }
                }
            }

            if(!empty($formInt)){
                foreach ($formInt as $tituloInt => $valorInt) {
                    if(!empty($formInt[$tituloInt])){
                        $validacion[$tituloInt]=$valorInt;
                    }else{
                        $validacion[$tituloInt]='error';
                    }
                }
            }
            if(!empty($formAlphaNum)) {
                foreach ($formAlphaNum as $tituloAlphaNum => $valorAlphaNum) {
                    if (!empty($formAlphaNum[$tituloAlphaNum]) && $formAlphaNum[$tituloAlphaNum] != '') {
                        $validacion[$tituloAlphaNum] = $valorAlphaNum;
                    } else {
                        $validacion[$tituloAlphaNum] = 'error';
                    }
                }
            }

            if(!empty($formTxt)) {
                foreach ($formTxt as $tituloTxt => $valorTxt) {
                    if (!empty($formTxt[$tituloTxt]) && $formTxt[$tituloTxt] != '') {
                        $validacion[$tituloTxt] = $valorTxt;
                    } else {
                        $validacion[$tituloTxt] = 'error';
                    }
                }
            }


            $desde=$this->metFormatoFecha($_POST['desde']);
            $desde=trim($desde." 00:00:00");

            $hasta=$this->metFormatoFecha($_POST['hasta']);
            $hasta=trim($hasta." 00:00:00");

            $entrada=$this->metFormatoFecha($_POST['entrada']);
            $entrada=trim($entrada." 00:00:00");

            $Correlativo=1;

        if($validacion['accion']=='revisar'){
             $validacion['contrato']=str_replace(",", ".", $validacion['contrato']);
                $this->atProyectoContratoModelo->metUpdateProyectoEstatus($validacion['idAplicable'],$validacion['objeto'],$validacion['contrato'],$validacion['disponibilidad'],$validacion['idSolicitado'],$validacion['idTipoContrato'],$validacion['formaPago'],$validacion['idDocumento'],$validacion['CodRepresentante'],$_POST['ind_convenio'],$Estatus,$validacion['idRegistro'],$movimiento,$validacion['guia']);
        }

        }else {
            $this->atVista->metCargarJsComplemento($complementosJs);
            $this->atVista->metCargarJs($js);

            $this->atVista->metCargarCssComplemento($complementosCss);

            $this->atVista->assign('_FormaPagoPost', $this->atProyectoContratoModelo->atMiscelaneoModelo->metMostrarSelect('TIPOPAGO'));
            $this->atVista->assign('listadoServicio', $this->atProyectoContratoModelo->atObligacionModelo->atServicioModelo->metServiciosListar());

            $Accion=array( "accion" => $_Accion);
            $IdVal=array("idvalor" => $id_valor);

            $this->atVista->assign('_Acciones', $Accion);
            $this->atVista->assign('NumId', $IdVal);

            $this->atVista->assign('_DependenciaPost', $this->atProyectoContratoModelo->metGetDependencias());

            $consulta=$this->atProyectoContratoModelo->metGetProyecto($id_valor);

           //---- Contador de las Clausulas ----//
           //$Clau = $this->atProyectoContratoModelo->metObtenerClau($id_valor);
           //$contadorClau = count($Clau);
           //echo("Hola".$contadorClau);
           //------*

            $this->atVista->assign('_ProyectoContratoPost',$consulta);

            $this->atVista->assign('_ProveedorPost',  $this->atProyectoContratoModelo->metGetProveedores());

            $partidas=$this->atProyectoContratoModelo->metObtenerPartidasSeleccionadas($id_valor);

            for ($i=0;$i<count($partidas);$i++){
                $tmp= $this->atProyectoContratoModelo-> metBuscarIdPartida($partidas[$i]['ind_partida']);
                $partidas[$i]['pk_num_partida_presupuestaria']=$tmp['pk_num_partida_presupuestaria'];

            }
            $this->atVista->assign('_PartidasSeleccionadasPost',$partidas);
            $this->atVista->assign('_AplicablePost',$this->atProyectoContratoModelo->metMostrarSelectAplicable($consulta[0]['fk_gcc003_num_tipo_contrato']));
            $this->atVista->assign('_TipoContratoPost', $this->atProyectoContratoModelo->metMostrarSelectTipo($consulta[0]['fk_a004_dependencia']));

            $disabled= ['ver' => 'disabled'];
            $salir= ['boton' => 'Salir'];

            //$cantidadClausula = array(
                //'cantClau' => $contadorClau,
               // 'cantidadImg' => $contadorImg-1,
             //   'urlImgP' => $verImgP['ind_url_foto_activo'],
               // );

            $this->atVista->assign('disabled', $disabled);
            $this->atVista->assign('salir', $salir);
            $this->atVista->assign('Accion', $Accion);
           // $this->atVista->assign('cantidadClausula', $cantidadClausula);
            $this->atVista->metRenderizar('RegistrarRedaccionProyecto');
        }
         ##  vista
        /* $consulta=$this->atProyectoContratoModelo->metGetProyecto($id_valor);
         echo json_encode($consulta);     */
    }

    //Método para reemplazar las variables en el documento a generar ODT
    public function metReemplazar($nombre,$valor,$extra=false){
        if($extra==1) {
            $this->atDocx->replace(array($nombre => array('value' => $valor)), array('block-type' => true));
        } else {
            $this->atDocx->replace(array($nombre => array('value' => $valor)));
        }
    }

    //Método para generar el documento de los controles perceptivos
    public function metGenerar()
    {
        $id=$this->metObtenerInt('idPost');

        $this->atDocx = new Docxpresso\CreateDocument(array('template' => ROOT . 'publico' . DS . 'contratos' . DS . 'contrato-plantilla.odt'));

        $consulta= $this->atReporteModelo->metGetProyectoId($id);

        $titulo=strtoupper($consulta[0]['tipoContrato']);
        $cuerpo=strip_tags(html_entity_decode(utf8_decode($consulta[0]['ind_cuerpo'])));

        if($consulta[0]['fk_a006_num_estado_contrato']==5){
            $this->metReemplazar('correlativo',$consulta[0]['ind_correlativo_contrato']);
        }else{
            $this->metReemplazar('correlativo',$consulta[0]['ind_correlativo']);
        }

        $this->metReemplazar('titulo',$titulo);
        $this->metReemplazar('cuerpo',$consulta[0]['ind_cuerpo']);

        $this->atDocx->render(ROOT . 'publico' .DS.'contratos' .DS.'Contrato'.$id.'.odt');
        $validacion['idGenerar']=$id;
        $validacion['ruta']='.'.DS.'publico' .DS.'contratos' .DS.'Contrato'.$id.'.odt';
        echo json_encode($validacion);
        exit;

    }

    public function metClausulas()
    {
        $valido=$this->metObtenerInt('valido');
        $id_valor=$this->metObtenerInt('idPost');
        $_Accion=$this->metObtenerTexto('accion');
        $consulta=$this->atProyectoContratoModelo->metGetProyecto($id_valor);
      //  echo("Consultare ".$consulta[0]['ind_detalle_convenio']);
        echo json_encode($consulta);
    }

    public function metEliminaImagen()
    {
       $id = "0";
       $cantidadImagen = $_POST['cA'];
       echo $cantidadImagen;

      for($i=0; $i<=$cantidadImagen; $i++){

        if(isset($_POST['file'.$i])!=''){
           $pkNumImagenActivo = $_POST['file'.$i];
           $this->Activos->metEliminarImagen($id, $pkNumImagenActivo);
          }
     }
    }

    public function metRedactarProyecto()
    {
        $valido=$this->metObtenerInt('valido');
        $id_valor=$this->metObtenerInt('idPost');
        $_Accion=$this->metObtenerAlphaNumerico('accion');

        $Accion=array( "accion" => $_Accion);

        // asignamos a la variable moviento el valor que le corresponde en el miscelaneo en este caso el 1, de  preparado.
        $movimiento="3";
        $Estatus="2";

        $js = array(
            'materialSiace/core/demo/DemoFormWizard'
        );

        $complementosJs = array(
            'jquery-validation/dist/jquery.validate.min',
            'jquery-validation/dist/additional-methods.min',
            'inputmask/jquery.inputmask.bundle.min',
            'ckeditor/ckeditor',
            'ckeditor/adapters/jquery',
            'select2/select2.min',
            'wizard/jquery.bootstrap.wizard.min',
            'bootstrap-datepicker/bootstrap-datepicker',
            '../javascript/modGC/inputValidacion/valido',

        );

        $complementosCss = array(
            'wizard/wizardfa6c',
            'jquery-validation/dist/site-demo',
            'select2/select201ef',
        );

        if($valido==1) {

            $formInt=$this->metObtenerInt('form','int');
            $formAlphaNum=$this->metObtenerAlphaNumerico('form','alphaNum');
            $formTxt=$this->metObtenerTexto('form','txt');
            $formMonto=$this->metObtenerMonto('form','monto');

            $validacion['ind_convenio'] = $formTxt=$this->metObtenerTexto('form','ind_convenio');
            $validacion['objeto'] = $formTxt=$this->metObtenerTexto('form','objeto');
            $validacion['lugarPago'] = $formTxt=$this->metObtenerTexto('form','lugarPago');
            $validacion['guia'] = $formTxt=$this->metObtenerTexto('form','guia');
            $validacion['formaPago'] = $formlphaNum=$this->metObtenerTexto('form','formaPago');

            if(!empty($formMonto)){
                foreach ($formMonto as $tituloInt => $valorInt) {
                    if(!empty($formMonto[$tituloInt])){
                        $validacion[$tituloInt]=$valorInt;
                    }else{
                        $validacion[$tituloInt]='error';
                    }
                }
            }

            if(!empty($formInt)){
                foreach ($formInt as $tituloInt => $valorInt) {
                    if(!empty($formInt[$tituloInt])){
                        $validacion[$tituloInt]=$valorInt;
                    }else{
                        $validacion[$tituloInt]='error';
                    }
                }
            }
            if(!empty($formAlphaNum)) {
                foreach ($formAlphaNum as $tituloAlphaNum => $valorAlphaNum) {
                    if (!empty($formAlphaNum[$tituloAlphaNum]) && $formAlphaNum[$tituloAlphaNum] != '') {
                        $validacion[$tituloAlphaNum] = $valorAlphaNum;
                    } else {
                        $validacion[$tituloAlphaNum] = 'error';
                    }
                }
            }

            if(!empty($formTxt)) {
                foreach ($formTxt as $tituloTxt => $valorTxt) {
                    if (!empty($formTxt[$tituloTxt]) && $formTxt[$tituloTxt] != '') {
                        $validacion[$tituloTxt] = $valorTxt;
                    } else {
                        $validacion[$tituloTxt] = 'error';
                    }
                }
            }


            $desde=$this->metFormatoFecha($_POST['desde']);
            $desde=trim($desde." 00:00:00");

            $hasta=$this->metFormatoFecha($_POST['hasta']);
            $hasta=trim($hasta." 00:00:00");

            $entrada=$this->metFormatoFecha($_POST['entrada']);
            $entrada=trim($entrada." 00:00:00");

            $Correlativo=1;


            if($validacion['accion']=='revisar' || $validacion['accion']=='PorRevisar'){

                $validacion['contrato']=str_replace(",", ".", $validacion['contrato']);

                $id=$this->atProyectoContratoModelo->metUpdateProyectoEstatus($validacion['idAplicable'],$validacion['objeto'],$validacion['contrato'],$validacion['disponibilidad'],$validacion['idSolicitado'],$validacion['idTipoContrato'],$validacion['formaPago'],$validacion['idDocumento'],$validacion['CodRepresentante'],$validacion['ind_convenio'],$Estatus,$validacion['idRegistro'],$movimiento,$validacion['guia']);
                //var_dump($id);

            }


        }else {

            $this->atVista->metCargarJsComplemento($complementosJs);
            $this->atVista->metCargarJs($js);

            $this->atVista->metCargarCssComplemento($complementosCss);

            $this->atVista->assign('_FormaPagoPost', $this->atProyectoContratoModelo->atMiscelaneoModelo->metMostrarSelect('TIPOPAGO'));
            $this->atVista->assign('listadoServicio', $this->atProyectoContratoModelo->atObligacionModelo->atServicioModelo->metServiciosListar());
            $this->atVista->assign('_Acciones', $Accion);
            $this->atVista->assign('_DependenciaPost', $this->atProyectoContratoModelo->metGetDependencias());
            //-----Registrar Redacción ---------
            $consulta=$this->atProyectoContratoModelo->metGetProyecto($id_valor);
            $this->atVista->assign('_ProyectoContratoPost',$consulta);


            $this->atVista->assign('_ProveedorPost',  $this->atProyectoContratoModelo->metGetProveedores());

            $partidas=$this->atProyectoContratoModelo->metObtenerPartidasSeleccionadas($id_valor);

            for ($i=0;$i<count($partidas);$i++){
                $tmp= $this->atProyectoContratoModelo->metBuscarIdPartida($partidas[$i]['ind_partida']);
                $partidas[$i]['pk_num_partida_presupuestaria']=$tmp['pk_num_partida_presupuestaria'];
            }
                //--- Valor del Boton
            $cancelar= ['boton' => 'Cancelar'];

            $disabled= ['ver' => 'disabled'];
            $this->atVista->assign('disabled', $disabled);

            $this->atVista->assign('cancelar', $cancelar);

            $this->atVista->assign('_Acciones', $Accion);

            $this->atVista->assign('_PartidasSeleccionadasPost',$partidas);
            $this->atVista->assign('_AplicablePost',$this->atProyectoContratoModelo->metMostrarSelectAplicable($consulta[0]['fk_gcc003_num_tipo_contrato']));
            $this->atVista->assign('_TipoContratoPost', $this->atProyectoContratoModelo->metMostrarSelectTipo($consulta[0]['fk_a004_dependencia']));
            $this->atVista->metRenderizar('RegistrarRedaccionProyecto');
        }

       /* $Cuerpo=$validacion['ind_convenio'];
            $datos['contenido']=$Cuerpo;
            echo json_encode($datos);*/

    }


    public function metSubirProyecto()
    {
        $valido=$this->metObtenerInt('valido');
        $id_valor=$this->metObtenerInt('idPost');
        $_Accion=$this->metObtenerTexto('accion');

        $Accion=array( "accion" => $_Accion);

        $js = array(
            'materialSiace/core/demo/DemoFormWizard',
            'materialSiace/core/demo/DemoFormComponents',
        );

        $complementosJs = array(
            'select2/select2.min',
            'wizard/jquery.bootstrap.wizard.min',
            'bootstrap-datepicker/bootstrap-datepicker',
            '../javascript/modGC/inputValidacion/valido',

        );

        $complementosCss = array(
            'wizard/wizardfa6c',
            'jquery-validation/dist/site-demo',
            'select2/select201ef',
        );

        if($valido==1) {

            $formInt=$this->metObtenerInt('form','int');
            $formAlphaNum=$this->metObtenerAlphaNumerico('form','alphaNum');
            $formTxt=$this->metObtenerTexto('form','txt');
            $formMonto=$this->metObtenerMonto('form','monto');

            if(!empty($formMonto)){
                foreach ($formMonto as $tituloInt => $valorInt) {
                    if(!empty($formMonto[$tituloInt])){
                        $validacion[$tituloInt]=$valorInt;
                    }else{
                        $validacion[$tituloInt]='error';
                    }
                }
            }

            if(!empty($formInt)){
                foreach ($formInt as $tituloInt => $valorInt) {
                    if(!empty($formInt[$tituloInt])){
                        $validacion[$tituloInt]=$valorInt;
                    }else{
                        $validacion[$tituloInt]='error';
                    }
                }
            }
            if(!empty($formAlphaNum)) {
                foreach ($formAlphaNum as $tituloAlphaNum => $valorAlphaNum) {
                    if (!empty($formAlphaNum[$tituloAlphaNum]) && $formAlphaNum[$tituloAlphaNum] != '') {
                        $validacion[$tituloAlphaNum] = $valorAlphaNum;
                    } else {
                        $validacion[$tituloAlphaNum] = 'error';
                    }
                }
            }

            if(!empty($formTxt)) {
                foreach ($formTxt as $tituloTxt => $valorTxt) {
                    if (!empty($formTxt[$tituloTxt]) && $formTxt[$tituloTxt] != '') {
                        $validacion[$tituloTxt] = $valorTxt;
                    } else {
                        $validacion[$tituloTxt] = 'error';
                    }
                }
            }

            // subimos un nivel estatus
            $validacion['estatus']++;

            // asignamos a la variable moviento el valor que le corresponde en el miscelaneo en este método le sumaremos 1 al estatus.
            $movimiento=$validacion['estatus']+1;

            $guia=$this->atProyectoContratoModelo->metConsultarContratos(date('Y'),$validacion['idSolicitado']);
            $guia++;

            $partmp="";

            // EN CASO DE APROBACIÓN
            if($validacion['estatus']=='5') {



                $CorrelativoContrato = $this->metCorrelativoContrato($validacion['idSolicitado'] ,$guia);
                $this->atProyectoContratoModelo->metUpdateProyectoEstatus($validacion['idRegistro'],'5',$movimiento,$_POST['ind_convenio'],$CorrelativoContrato);

                    //--- Comprometer
                 if ($validacion['num_guia_contrato']=='1') {

                    $partidas=$this->atProyectoContratoModelo->metObtenerPartidasSeleccionadas($validacion['idRegistro']);

                    for ($i=0;$i<count($partidas);$i++){

                        $fkcomprometer=$this->atProyectoContratoModelo->metObtenerContratosComprometidos($validacion['idRegistro']);

                       $id=$this->atProyectoContratoModelo->metComprometer($partidas[$i]['num_monto'],'CO','AC',$partidas[$i]['fk_prc002_num_presupuesto_det'],$validacion['idRegistro'],$fkcomprometer['pk_num_estado_distribucion']);

                      //$partmp=$partidas[$i]['num_monto'];

                   }

                  }
                   //--- No Compromete
                }else{
                    $CorrelativoContrato ="0";
                    $this->atProyectoContratoModelo->metUpdateProyectoEstatus($validacion['idRegistro'],$validacion['estatus'],$movimiento,$_POST['ind_convenio'],$CorrelativoContrato);
                }


            $datos['Partida']=$partmp;
            $datos['Registro']=$validacion['idRegistro'];
            $datos['Estado']=$validacion['estatus'];
            //echo json_encode($datos);
           // echo json_encode($validacion['idRegistro']);
          // $this->atProyectoContratoModelo->metListarProyectoContrato();
            $this->atVista->metRenderizar('ListarProyectoContrato');
            exit;

        }else {

            $this->atVista->metCargarJs($js);
            $this->atVista->metCargarJsComplemento($complementosJs);
            $this->atVista->metCargarCssComplemento($complementosCss);

            $this->_MiscelaneoModelo= $this->metCargarModelo('miscelaneo', false ,'APP');
            # Asignamos el resultado del llamado a la variable _ClaseVehiculoPost.
            $this->atVista->assign('_FormaPagoPost', $this->_MiscelaneoModelo->metMostrarSelect('FPAGO'));

            $this->atVista->assign('_Acciones', $Accion);
            $this->atVista->assign('_DependenciaPost', $this->atProyectoContratoModelo->metGetDependencias());
            $consulta=$this->atProyectoContratoModelo->metGetProyecto($id_valor);
            $this->atVista->assign('_ProyectoContratoPost',$consulta);


            $this->atVista->assign('_AplicablePost',$this->atProyectoContratoModelo->metMostrarSelectAplicable($consulta[0]['fk_gcc003_num_tipo_contrato']));
            $this->atVista->assign('_TipoContratoPost', $this->atProyectoContratoModelo->metMostrarSelectTipo($consulta[0]['fk_a004_dependencia']));
            $this->atVista->metRenderizar('RegistrarProyectoContrato',"modales");

        }



    }

    public function metMovimientos()
    {
        $id_valor=$this->metObtenerInt('idPost');

        $this->atVista->assign('_MovimientosPost', $this->atProyectoContratoModelo->metGetMovimientos($id_valor));
        $this->atVista->metRenderizar('ListarMovimientos',"modales");
    }

    public function metPresupuestoContrato()
    {
        $id=$this->metObtenerInt('id');

        $respuesta=$this->atProyectoContratoModelo->metPresupuestoContrato($id);
        $datos=[];
        for($i=0;$i<count($respuesta);$i++){
            $datos[$i]['ind_partida']=$respuesta[$i]['ind_partida'];
            $datos[$i]['Comprometido']=number_format($respuesta[$i]['Comprometido'], 2, ',', '.');
            $datos[$i]['Causado']=number_format($respuesta[$i]['Causado'], 2, ',', '.');
            $datos[$i]['Pagado']=number_format($respuesta[$i]['Pagado'], 2, ',', '.');
        }

        echo json_encode($datos);
        exit;
    }


    protected function metObtenerMonto($clave,$posicion=false)
    {
        if((isset($_POST[$clave]) && !empty($_POST[$clave]))){
            if(is_array($_POST[$clave])){
                if($posicion) {
                    if (isset($_POST[$clave][$posicion]) && !empty($_POST[$clave][$posicion])) {
                        foreach ($_POST[$clave][$posicion] as $titulo => $valor) {
                            if(is_array($_POST[$clave][$posicion][$titulo])){
                                foreach($_POST[$clave][$posicion][$titulo] as $titulo1 => $valor1){
                                    $_POST[$clave][$posicion][$titulo][$titulo1] = (string)htmlspecialchars(preg_replace('/[^0-9 ,]/i', '', $_POST[$clave][$posicion][$titulo][$titulo1]));
                                }
                            }else{
                                if(isset($_POST[$clave][$posicion][$titulo]) && !empty($_POST[$clave][$posicion][$titulo])) {
                                    $_POST[$clave][$posicion][$titulo] = (string)htmlspecialchars(preg_replace('/[^0-9 ,]/i', '', $_POST[$clave][$posicion][$titulo]));
                                }
                            }
                        }
                        return $_POST[$clave][$posicion];
                    }
                }else{
                    if (isset($_POST[$clave])) {
                        foreach ($_POST[$clave] as $titulo => $valor) {
                            $_POST[$clave][$titulo] = (string)htmlspecialchars(preg_replace('/[^0-9 ,]/i', '', $_POST[$clave][$titulo]));
                        }
                        return $_POST[$clave];
                    }
                }
            }else{
                $_POST[$clave] = (string)htmlspecialchars(preg_replace('/[^0-9 ,]/i', '', $_POST[$clave]));
                return $_POST[$clave];
            }
        }
    }


    protected function metFormatoFecha($fecha)
    {
        $resultado=explode("/",$fecha);
        $resultado=$resultado[2]."-".$resultado[1]."-".$resultado[0];
        return $resultado;

    }


    public function metAnularProyecto()
    {

    $id_valor=$this->metObtenerInt('idPost');

    $resultado=$this->atProyectoContratoModelo->metGetEstatusId($id_valor);


         if($resultado[0]['fk_a006_num_estado_contrato']==1){

            $estatus="6";

            $this->atProyectoContratoModelo->metBajar($id_valor,$estatus);

            $array = array(
                'status' => 'OK',
                'idProyecto' => $id_valor,
                'accion' => $resultado[0]['fk_a006_num_estado_contrato'],
            );

            echo json_encode($array);

         }else if($resultado[0]['fk_a006_num_estado_contrato']==6){



                $this->atProyectoContratoModelo->metEliminar($id_valor);

                $array = array(
                    'status' => 'OK',
                    'idProyecto' => $id_valor
                );

                echo json_encode($array);

         }else{

                 $this->atProyectoContratoModelo->metBajar($id_valor,($resultado[0]['fk_a006_num_estado_contrato']-1));

                 $array = array(
                     'status' => 'OK',
                     'idProyecto' => $id_valor
                 );

                 echo json_encode($array);

         }
    }

    public function metRegresarProyectoContrato()
    {

    $idProyecto=$this->metObtenerInt('idProyecto');
    // Movimiento 9 (Regresar al estado anterior)
    $movimiento=9;

    $resultado=$this->atProyectoContratoModelo->metGetEstatusId($idProyecto);
    // Resto 1 para regresar al estatus anterior
    $estatus = $resultado[0]['fk_a006_num_estado_contrato'] - 1;
    // Guardo el estatus
    $this->atProyectoContratoModelo->metBajar($idProyecto,$estatus);
    //Guardo el movimiento
    $this->atProyectoContratoModelo->metRegistrarMovimiento($movimiento,$idProyecto);

    }



    protected function metCorrelativoProyecto($solicitado,$id)
    {
        $Dep = $this->atProyectoContratoModelo->metObtenerDep($solicitado);

        $Correlativo="P-".$Dep[0]['ind_codinterno']."-".str_pad($id, '4', '0', STR_PAD_LEFT)."-".date('Y');

        return $Correlativo;

    }

    protected function metCorrelativoP($solicitado,$id)
    {
        $Dep = $this->atProyectoContratoModelo->metObtenerDep($solicitado);

        $Correlativo="Nº C-".$Dep[0]['ind_codinterno']."-".str_pad($id, '4', '0', STR_PAD_LEFT)."-".date('Y');

        return $Correlativo;

    }

    protected function metCorrelativoContrato($solicitado,$id)
    {
        $Dep = $this->atProyectoContratoModelo->metObtenerDep($solicitado);

        $Correlativo="C-".$Dep[0]['ind_codinterno']."-".str_pad($id,'4', '0', STR_PAD_LEFT)."-".date('Y');

        return $Correlativo;

    }




public function metNuevaObligacion()
    {
        $complementosJs = array(
            'jquery-ui/jquery-ui.min',
            'jquery-validation/dist/jquery.validate.min',
            'jquery-validation/dist/additional-methods.min',
            'wizard/jquery.bootstrap.wizard.min',
            'select2/select2.min',
            'bootstrap-tagsinput/bootstrap-tagsinput.min',
            'multi-select/jquery.multi-select',
            'moment/moment.min',
            'bootstrap-datepicker/bootstrap-datepicker',
            'typeahead/typeahead.bundle.min',
            'dropzone/dropzone.min'
        );
        $complementoCss = array(
            'wizard/wizardfa6c',
            'select2/select201ef',
            'bootstrap-datepicker/datepicker'
        );
        $js[] = 'Aplicacion/appFunciones';

        $this->atVista->metCargarCssComplemento($complementoCss);
        $this->atVista->metCargarJsComplemento($complementosJs);
        $this->atVista->metCargarJs($js);

        $valido = $this->metObtenerInt('valido');
        $cajaChica = $this->metObtenerInt('cajaChica');
        $idObligacion = $this->metObtenerInt('idObligacion');
        $idOrden = $this->metObtenerInt('idOrden');
        $estado = $this->metObtenerAlphaNumerico('estado');
        $motivoAnulacion = $this->metObtenerAlphaNumerico('motivoAnulacion');
        $idContrato = $this->metObtenerInt('idContrato');
        $Disponible = $this->metObtenerInt('Disponible');

        $$idObligacion=$this->atProyectoContratoModelo->metListarObligacion($idContrato);


        if ($valido == 1) {
            if($estado=='RE' || $estado=='CO' || $estado=='AP' || $estado=='RECHAZO' || $estado=='AN' || $estado == 'IM'){
                if($estado=='RECHAZO'){
                    $id=$this->atProyectoContratoModelo->atObligacionModelo->metRechazarObligacion($idObligacion,$estado);
                    $validacion['Mensaje'] = array('titulo'=>'Rechazado','contenido'=>'La Obligacion fue rechazada Satisfactoriamente');
                }elseif($estado=='AN'){
                    if($motivoAnulacion==''){
                        $validacion['status']='error';
                        $validacion['ind_motivo_anulacion']='error';
                        echo json_encode($validacion);
                        exit;
                    }
                    $id=$this->atProyectoContratoModelo->atObligacionModelo->metRechazarObligacion($idObligacion,$estado,$motivoAnulacion,$idOrden);
                    $validacion['Mensaje'] = array('titulo'=>'Anulado','contenido'=>'La Obligacion fue anulada Satisfactoriamente');
                }elseif($estado=='RE'){
                    $id=$this->atProyectoContratoModelo->atObligacionModelo->metRevisarObligacion($idObligacion);
                    $validacion['Mensaje'] = array('titulo'=>'Revisada','contenido'=>'La Obligacion fue revisada Satisfactoriamente');
                    $validacion['fk_prc002_num_presupuesto_det'] = $id;
                }elseif($estado=='CO'){
                    $id=$this->atProyectoContratoModelo->atObligacionModelo->metConformarObligacion($idObligacion, Session::metObtener('CONTABILIDAD'));
                    $generaVoucherProvision = $this->atProyectoContratoModelo->atObligacionModelo->metConsultaObligacion($idObligacion);
                    $validacion['num_flag_presupuesto'] = $generaVoucherProvision['num_flag_provision'];
                    $validacion['Mensaje'] = array('titulo'=>'Conformada','contenido'=>'La Obligacion fue conformada Satisfactoriamente');
                    $validacion['contabilidad'] = Session::metObtener('CONTABILIDAD');
                }elseif($estado=='AP'){
                    $resultado=$this->atProyectoContratoModelo->atObligacionModelo->metAprobarObligacion($idObligacion, Session::metObtener('CONTABILIDAD'));
                    $generaVoucherProvision = $this->atProyectoContratoModelo->atObligacionModelo->metConsultaObligacion($idObligacion);
                    if (is_array($resultado)) {
                        $validacion['status'] = 'errorSQL';
                        echo json_encode($validacion);
                        exit;
                    }
                    $id=str_getcsv($resultado,'-');
                    $validacion['num_flag_presupuesto'] = $generaVoucherProvision['num_flag_provision'];
                    $validacion['Mensaje'] = array('titulo'=>'APROBADA','contenido'=>'La Obligacion fue aprobada Satisfactoriamente se ha generado el pago N°'.$id[1]);
                    $validacion['contabilidad'] = Session::metObtener('CONTABILIDAD');
                    $id=$id[0];
                }

                if (is_array($id)) {
                    foreach ($validacion as $titulo => $valor) {
                        if(is_array($validacion[$titulo])) {
                            if (strpos($id[2], $titulo)) {
                                $validacion[$titulo] = 'error';
                            }
                        }
                    }
                    $validacion['status'] = 'errorSQL';
                    echo json_encode($validacion);
                    exit;
                }
                $validacion['idObligacion'] = $id;
                $validacion['status'] = 'OK';
                echo json_encode($validacion);
                exit;
            }
            $excepcion = array(
                'num_flag_caja_chica', 'num_flag_pago_individual', 'num_flag_obligacion_auto',
                'num_flag_diferido', 'num_flag_pago_diferido', 'num_flag_afecto_IGV',
                'num_flag_compromiso', 'num_flag_presupuesto', 'num_flag_obligacion_directa',
                'num_monto_descuento', 'fk_cpb015_num_impuesto', 'cant',
                'ind_secuencia', 'num_monto_afecto', 'num_monto_impuesto',
                'num_monto_no_afecto', 'num_monto_impuesto_otros', 'num_monto_obligacion',
                'nomtoTotalPagar','ind_comentarios_adicional', 'ind_motivo_anulacion', 'ind_tipo_descuento',
                'num_monto_adelanto','num_monto_pago_parcial'
            );
            $alphaNum = $this->metValidarFormArrayDatos('form', 'alphaNum', $excepcion);
            $txt = $this->metValidarFormArrayDatos('form', 'txt', $excepcion);
            $ind = $this->metValidarFormArrayDatos('form', 'int', $excepcion);

            if ($alphaNum != null && $ind == null && $txt == null) {
                $validacion = $alphaNum;
            } elseif ($alphaNum == null && $ind != null && $txt == null) {
                $validacion = $ind;
            } elseif ($alphaNum != null && $ind != null && $txt == null) {
                $validacion = array_merge($alphaNum, $ind);
            } elseif ($alphaNum != null && $txt != null && $ind == null) {
                $validacion = array_merge($alphaNum, $txt);
            } elseif ($ind != null && $txt != null && $alphaNum == null) {
                $validacion = array_merge($ind, $txt);
            } else {
                $validacion = array_merge($ind, $txt, $alphaNum);
            }
            if (in_array('error', $validacion)) {
                $validacion['status'] = 'error';
                echo json_encode($validacion);
                exit;
            }
            if (!isset($validacion['num_flag_caja_chica'])) {
                $validacion['num_flag_caja_chica'] = 0;
            }
            if (!isset($validacion['num_flag_pago_individual'])) {
                $validacion['num_flag_pago_individual'] = 0;
            }
            if (!isset($validacion['num_flag_obligacion_auto'])) {
                $validacion['num_flag_obligacion_auto'] = 0;
            }
            if (!isset($validacion['num_flag_diferido'])) {
                $validacion['num_flag_diferido'] = 0;
            }
            if (!isset($validacion['num_flag_pago_diferido'])) {
                $validacion['num_flag_pago_diferido'] = 0;
            }
            if (!isset($validacion['num_flag_afecto_IGV'])) {
                $validacion['num_flag_afecto_IGV'] = 0;
            }
            if (!isset($validacion['num_flag_compromiso'])) {
                $validacion['num_flag_compromiso'] = 0;
            }
            if (!isset($validacion['num_flag_presupuesto'])) {
                $validacion['num_flag_presupuesto'] = 0;
            }
            if (!isset($validacion['num_flag_adelanto'])) {
                $validacion['num_flag_adelanto'] = 0;
            }
            if (!isset($validacion['num_flag_obligacion_directa'])) {
                $validacion['num_flag_obligacion_directa'] = 0;
            }
            if (!isset($validacion['fk_a003_num_persona_proveedor'])) {
                $validacion['fk_a003_num_persona_proveedor'] = 0;
            }
            /*if (!isset($validacion['ind_nro_factura'])) {
                $validacion['ind_nro_factura'] = 0;
            }
            if (!isset($validacion['ind_comentarios'])) {
                $validacion['ind_comentarios'] = 0;
            }
            if (!isset($validacion['partida_cuenta'])) {
                $validacion['partidaCuenta'] = 0;
            }*/
            $aux1 = strpos($validacion['nomtoTotalPagar'] , ',');
            $aux2 = strpos($validacion['num_monto_adelanto'] , ',');
            $aux3 = strpos($validacion['num_monto_afecto'] , ',');
            $aux4 = strpos($validacion['num_monto_descuento'] , ',');
            $aux5 = strpos($validacion['num_monto_impuesto_otros'] , ',');
            $aux6 = strpos($validacion['num_monto_impuesto'] , ',');
            $aux7 = strpos($validacion['num_monto_no_afecto'] , ',');
            $aux8 = strpos($validacion['num_monto_obligacion'] , ',');
            $aux9 = strpos($validacion['num_monto_pago_parcial'] , ',');

            if($aux1===false){ $validacion['nomtoTotalPagar']=$validacion['nomtoTotalPagar'];  }else{ $validacion['nomtoTotalPagar'] = str_replace(",",".",preg_replace('/[^0-9 ,]/i', '', $validacion['nomtoTotalPagar'])); }
            if($aux2===false){ $validacion['num_monto_adelanto']=$validacion['num_monto_adelanto'];  }else{ $validacion['num_monto_adelanto'] = str_replace(",",".",preg_replace('/[^0-9 ,]/i', '', $validacion['num_monto_adelanto'])); }
            if($aux3===false){ $validacion['num_monto_afecto']=$validacion['num_monto_afecto'];  }else{ $validacion['num_monto_afecto'] = str_replace(",",".",preg_replace('/[^0-9 ,]/i', '', $validacion['num_monto_afecto'])); }
            if($aux4===false){ $validacion['num_monto_descuento']=$validacion['num_monto_descuento'];  }else{ $validacion['num_monto_descuento'] = str_replace(",",".",preg_replace('/[^0-9 ,]/i', '', $validacion['num_monto_descuento'])); }
            if($aux5===false){ $validacion['num_monto_impuesto_otros']=$validacion['num_monto_impuesto_otros'];  }else{ $validacion['num_monto_impuesto_otros'] = str_replace(",",".",preg_replace('/[^0-9 ,]/i', '', $validacion['num_monto_impuesto_otros'])); }
            if($aux6===false){ $validacion['num_monto_impuesto']=$validacion['num_monto_impuesto'];  }else{ $validacion['num_monto_impuesto'] = str_replace(",",".",preg_replace('/[^0-9 ,]/i', '', $validacion['num_monto_impuesto'])); }
            if($aux7===false){ $validacion['num_monto_no_afecto']=$validacion['num_monto_no_afecto'];  }else{ $validacion['num_monto_no_afecto'] = str_replace(",",".",preg_replace('/[^0-9 ,]/i', '', $validacion['num_monto_no_afecto'])); }
            if($aux8===false){ $validacion['num_monto_obligacion']=$validacion['num_monto_obligacion'];  }else{ $validacion['num_monto_obligacion'] = str_replace(",",".",preg_replace('/[^0-9 ,]/i', '', $validacion['num_monto_obligacion'])); }
            if($aux9===false){ $validacion['num_monto_pago_parcial']=$validacion['num_monto_pago_parcial'];  }else{ $validacion['num_monto_pago_parcial'] = str_replace(",",".",preg_replace('/[^0-9 ,]/i', '', $validacion['num_monto_pago_parcial'])); }
            if ($idObligacion == 0) {
                if(isset($cajaChica) and $cajaChica==1){

                    $idCajaChica = $this->metObtenerInt('idCajaChica');
                }else{

                    $idCajaChica = '';
                }
                $procedencia = 'GC';
                $validacion['status'] = 'nuevo';

                $idEstadoDist = $this->atProyectoContratoModelo->metConsultarDistribucionObligacion($idContrato);
                $guia = $this->atProyectoContratoModelo->metConsultarGuiaContrato($idContrato);



                if ($guia['num_guia_contrato'] == 1) {

                    $id=$this->atProyectoContratoModelo->metNuevaObligacion($validacion,$procedencia);
                    // INSERTAR FK DE LA OBLIGACION CREADA A ESTADO DISTRIBUCION
                    $dist = $this->atProyectoContratoModelo->metActualizarEstadoDistContrato($idEstadoDist['pk_num_estado_distribucion'],$id);

                }
                else{
                    $id=$this->atProyectoContratoModelo->metNuevaObligacion($validacion,$procedencia);
                }

                $this->atProyectoContratoModelo->metRelacionarContrato($idContrato,$id);


                $validacion['idObligacion'] = $id;
                if(isset($cajaChica) and $cajaChica==1){
                    $actualizarCC = $this->atProyectoContratoModelo->atObligacionModelo->metActualizarCajaChica($idCajaChica,$validacion['idObligacion']);
                }

                $idNuevo = $this->atProyectoContratoModelo->atObligacionModelo->metObligacionListar(false,false,$validacion['idObligacion']);
            } else {
                $validacion['status'] = 'modificar';
                $id=$this->atProyectoContratoModelo->atObligacionModelo->metModificarObligacion($idObligacion,$validacion,'CP');
                $validacion['idObligacion'] = $id;
                $idNuevo = $this->atProyectoContratoModelo->atObligacionModelo->metObligacionListar(false,false,$idObligacion);
            }
            if (is_array($id)) {
                foreach ($validacion as $titulo => $valor) {
                    if(!is_array($validacion[$titulo])) {
                        if (strpos($id[2], $titulo)) {
                            $validacion[$titulo] = 'error';
                        }
                    }
                }
                $validacion['status'] = 'errorSQL';
                echo json_encode($validacion);
                exit;
            }
            $idNuevo['status'] = $validacion['status'];
            echo json_encode($idNuevo);
            exit;
        }


        if ($idObligacion != 0) {

            $this->atVista->assign('obligacionBD', $this->atProyectoContratoModelo->atObligacionModelo->metConsultaObligacion($idObligacion));
            $this->atVista->assign('impuestoBD', $this->atProyectoContratoModelo->atObligacionModelo->metMostrarImpuesto($idObligacion));
            $this->atVista->assign('documentoBD', $this->atProyectoContratoModelo->atObligacionModelo->metMostrarDocumentoObligacion($idObligacion));
            $this->atVista->assign('partidaBD', $this->atProyectoContratoModelo->atObligacionModelo->metMostrarPartidas($idObligacion));
            $this->atVista->assign('trDocumentos', 1);

            //montos
            $montoscontratos = $this->atProyectoContratoModelo->metListarMontos($idContrato);
            $this->atVista->assign('monto', $montoscontratos);

            if($estado!='modificar'){
                $this->atVista->assign('ver', 1);
            }

        }
        else if ($idContrato != 0){

            $listarPartidas = $this->atProyectoContratoModelo->metObtenerPartidasCargadas($idContrato);


            $acumuladorMonto=0;

            foreach ( $listarPartidas as $listar ) {

                $acumuladorMonto = $acumuladorMonto + $listar['num_monto'];

            }

            $contadorPartidas = count($listarPartidas);
            $montoscontratos = $this->atProyectoContratoModelo->metListarMontos($idContrato);

            $this->atVista->assign('partidaBD', $listarPartidas);
            $this->atVista->assign('contadorPartida', $contadorPartidas);
            $this->atVista->assign('monto', $montoscontratos);



            $respuesta=$this->atProyectoContratoModelo->metGetIdProveedor($idContrato);
            $respuesta['num_monto_obligacion']=$acumuladorMonto;
            $this->atVista->assign('obligacionBD', $respuesta );


            $this->atVista->assign('listadoDocumento', $this->atProyectoContratoModelo->atObligacionModelo->metListarDocumentosPersona($respuesta['fk_a003_num_persona_proveedor']));
            $existe= $this->atProyectoContratoModelo->atObligacionModelo->metListarServicioPersona($respuesta['fk_a003_num_persona_proveedor']);
            $this->atVista->assign('listadoServicio', $this->atProyectoContratoModelo->atObligacionModelo->metListarServicioPersona($respuesta['fk_a003_num_persona_proveedor']));

            if( empty($existe)){

                $this->atVista->assign('listadoDocumento', $this->atProyectoContratoModelo->atObligacionModelo->metDocumentoListar());
                $this->atVista->assign('listadoServicio', $this->atProyectoContratoModelo->atObligacionModelo->atServicioModelo->metServiciosListar());
            }



                $this->atVista->assign('Bloquear', $respuesta['num_guia_contrato']);


        }

        if($estado!=''){
            $this->atVista->assign('estado', $estado);
        }

        $guia = $this->atProyectoContratoModelo->metConsultarGuiaContrato($idContrato);

        //$this->atVista->assign('listadoDocumento', $this->atProyectoContratoModelo->atObligacionModelo->metDocumentoListar());
        //$this->atVista->assign('listadoServicio', $this->atProyectoContratoModelo->atObligacionModelo->atServicioModelo->metServiciosListar());

        $this->atVista->assign('listadoCuentas', $this->atProyectoContratoModelo->atObligacionModelo->atCuentasModelo->metCuentaListar());
        $this->atVista->assign('listadoTipoPago', $this->atProyectoContratoModelo->atObligacionModelo->atMiscelaneoModelo->metMostrarSelect('TDPLG'));
        $this->atVista->assign('tipoDescuento', $this->atProyectoContratoModelo->atObligacionModelo->atMiscelaneoModelo->metMostrarSelect('TIPODESC'));
        $this->atVista->assign('parametroRevisar', Session::metObtener('REVOBLIG'));
        $this->atVista->assign('idContrato', $idContrato);
        $this->atVista->assign('Disponible', $Disponible);
        $this->atVista->assign('idObligacion', $idObligacion);
        $this->atVista->assign('guia', $guia['num_guia_contrato']);
       // $this->atVista->assign('lista', $this->atObligacionModelo->metListaPartidas());
        $this->atVista->metRenderizar('NuevaObligacion', 'modales');


    }

    public function metPersona($persona = false, $idCampo = false)
    {

        $this->atVista->assign('lista', $this->atProyectoContratoModelo->metListaProveedorRepresentante());
        if($persona){
            $this->atVista->assign('listaPersona', $persona);
        }
        if($idCampo){
            $this->atVista->assign('idCampo', $idCampo);
        }

        $this->atVista->metRenderizar('listadoPersona', 'modales');
    }

    //listado de personas
    public function metPersona2($persona = false, $idCampo = false)
    {
        $js[] = 'Aplicacion/appFunciones';
        $this->atVista->metCargarJs($js);
        $this->atVista->metRenderizar('listadoPersona', 'modales');
    }

    public function metJsonDataTablaProveedorRep()
    {
        #obtengo los rodes de usuario, Nota: esto es obligatorio
        $rol = Session::metObtener('perfil');
        #cacturo la busqueda enviada por la datatabla, Nota: esto es obligatorio
        $busqueda = $this->metObtenerFormulas('search');
        #construyo el sql, Nota: esto es obligatorio
        $sql = "SELECT
                    `a003_persona`.`pk_num_persona`,
                    lg_b022_proveedor.fk_a003_num_persona_representante,
                    `a003_persona`.`ind_nombre1`,
                    `a003_persona`.`ind_nombre2`,
                    `a003_persona`.`ind_apellido1`,
                    `a003_persona`.`ind_apellido2`,
                    CONCAT_WS(' ',a003_persona.ind_nombre1,a003_persona.ind_apellido1) as nombre,
                    `a003_persona`.`ind_cedula_documento`,
                    `a003_persona`.`ind_documento_fiscal`,
                    `proveedor`.`ind_nombre1` AS representante1,
                    `proveedor`.`ind_apellido1` AS representante2,
                    proveedor.ind_cedula_documento AS doc_representante,
                    lg_b022_proveedor.fk_a003_num_persona_proveedor,
                    lg_b022_proveedor.pk_num_proveedor
                FROM
                    a003_persona
                    LEFT JOIN lg_b022_proveedor ON ( lg_b022_proveedor.fk_a003_num_persona_proveedor = a003_persona.pk_num_persona )
                    LEFT JOIN a003_persona AS proveedor ON ( proveedor.pk_num_persona = lg_b022_proveedor.fk_a003_num_persona_representante )
                WHERE
                    a003_persona.num_estatus = 1

            ";
        if ($busqueda['value']) {
            $sql .= " AND
                        (
                            a003_persona.ind_nombre1 LIKE '%$busqueda[value]%' OR
                            a003_persona.ind_nombre2 LIKE '%$busqueda[value]%' OR
                            a003_persona.ind_apellido1 LIKE '%$busqueda[value]%' OR
                            a003_persona.ind_apellido2 LIKE '%$busqueda[value]%'
                         )
                        ";


        }

        //var_dump($sql);
        #creo un arreglo de los campos a mostrar, Nota: esto es obligatorio
        $campos = array('pk_num_persona','nombre','ind_nombre1','ind_nombre2','ind_apellido1','ind_apellido2','ind_cedula_documento', 'ind_documento_fiscal','doc_representante','representante1','representante2','fk_a003_num_persona_representante');
        #campo primario de la tabla, Nota: esto es obligatorio
        $clavePrimaria = 'pk_num_persona';

        #hago el llamado de la datatabla del controlador principal.
        $this->metDataTabla($sql,$campos,$clavePrimaria);

    }

    public function metDataTablaListadoProveedorRep($sql,$listado,$clavePrimaria,$datosExtraBotones = false,$flagSistema = false)
    {

        #Instancio la clase principal del modelo
        $modelo = new Modelo();
        #Accedo a la base de datos desde el controlador
        $db = $modelo->metAccesoControladorDB();
        $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        #Parametros enviados desde el datatable
        $pagina = $this->metObtenerFormulas('draw');
        $limiteTabla = $this->metObtenerFormulas('length');
        $inicio = $this->metObtenerFormulas('start');
        $columnas = $this->metObtenerFormulas('columns');
        $orden = $this->metObtenerFormulas('order');
        $busqueda = $this->metObtenerFormulas('search');
        $busqueda = $busqueda['value'];
        $tituloColumna = $columnas[$orden[0]['column']]['data'];
        $ordenColumna = $orden[0]['dir'];
        if ($inicio == 0) {
            $inicio = '0';
        }
        if ($pagina > 1) {
            $inicio = ($inicio / $limiteTabla) + 1;
        }
        if ($inicio != 0) {
            $primerResultado = $limiteTabla * ($inicio - 1);
        } else {
            $primerResultado = 0;
        }
        #concateno el orden de la columna
        //$sql .="ORDER BY $tituloColumna $ordenColumna ";
        $resultado = $db->prepare($sql);
        $resultado->execute();
        $numeroTotalRegistros = $resultado->rowCount();
        $arrayResultado['recordsTotal'] = $numeroTotalRegistros;
        $arrayResultado['recordsFiltered'] = $numeroTotalRegistros;
        $arrayResultado['draw'] = $pagina;
        $arrayResultado['length'] = $limiteTabla;
        #concateno el Limite de la consulta
        $sql .= "LIMIT $primerResultado, $limiteTabla ";
        $resultados2 = $db->prepare($sql);
        $resultados2->execute();
        $detalle = array();
        foreach ($resultados2->fetchAll(PDO::FETCH_ASSOC) AS $i) {

            #recorro los datos
            foreach ($listado AS $titulo => $valor){
                if(!is_array($valor)){
                    $detalle[$valor]=$i[$valor];
                }else{
                    $detalle['acciones'] = '';
                    foreach ($listado[$titulo] AS $titulo2 => $valor2){
                        if($titulo == 'boton'){

                            if(is_array($valor2)){
                                $valorArreglo = str_replace("$clavePrimaria", $i[$clavePrimaria], $valor2[0]);
                                $valorEval = str_replace("#botonEval", $valorArreglo, $valor2[1]);

                                eval($valorEval);
                            }else{
                                #sustituyo el parametro del texto de la clave primaria en el boton
                                # por el valor extraido de la base de datos
                                $valor2 = str_replace("$clavePrimaria", $i[$clavePrimaria], $valor2);
                            }
                            if($datosExtraBotones){
                                foreach ($datosExtraBotones AS $datoExtraBoton){
                                    $valor2 = str_replace("$datoExtraBoton", $i[$datoExtraBoton], $valor2);
                                }
                            }
                            $detalle['acciones'] .= "$valor2 ";
                        }
                    }
                }
            }
            $arrayResultado['data'][]=$detalle;
        }
        if (!isset($arrayResultado['data'])) {
            $arrayResultado['data'] = array();
        }
        echo json_encode($arrayResultado);

    }

    /*
    public function metJsonDataTabla($estado = false,
                                     $proveedor = false,
                                     $codigoIngresadoPor = false,
                                     $doc = false,
                                     $nroDoc = false,
                                     $centroCosto = false,
                                     $desde = false,
                                     $hasta = false,
                                     $desdeR = false,
                                     $hastaR = false
    )
    {
        #obtengo los rodes de usuario, Nota: esto es obligatorio
        $rol = Session::metObtener('perfil');
        #cacturo la busqueda enviada por la datatabla, Nota: esto es obligatorio
        $busqueda = $this->metObtenerFormulas('search');
        #construyo el sql, Nota: esto es obligatorio
        $sql = "SELECT
                cp_d001_obligacion.*,
                cp_d001_obligacion.ind_estado AS estado,
                cp_b002_tipo_documento.cod_tipo_documento,
                (CASE
                        WHEN cp_d001_obligacion.ind_estado='PR' THEN 'PREPARADO'
                        WHEN cp_d001_obligacion.ind_estado='RE' THEN 'REVISADO'
                        WHEN cp_d001_obligacion.ind_estado='CO' THEN 'CONFORMADO'
                        WHEN cp_d001_obligacion.ind_estado='AP' THEN 'APROBADO'
                        WHEN cp_d001_obligacion.ind_estado='PA' THEN 'PAGADO'
                        WHEN cp_d001_obligacion.ind_estado='AN' THEN 'ANULADO'
                END) AS ind_estado,
                 (CASE
                        WHEN cp_d001_obligacion.ind_tipo_procedencia='CP' THEN 'CP'
                        WHEN cp_d001_obligacion.ind_tipo_procedencia='NM' THEN 'NOMINA'
                        WHEN cp_d001_obligacion.ind_tipo_procedencia='VI' THEN 'VIATICOS'
                        WHEN cp_d001_obligacion.ind_tipo_procedencia='CC' THEN 'CAJA CHICA'
                        WHEN cp_d001_obligacion.ind_tipo_procedencia='GC' THEN 'G. CONTRATO'
                END) AS ind_tipo_procedencia,
                CONCAT(
                    REPLACE(FORMAT(FLOOR(ROUND(cp_d001_obligacion.num_monto_obligacion, 2)), 0), ',', '.'),
                    ',',
                    SUBSTRING_INDEX(FORMAT(ROUND(cp_d001_obligacion.num_monto_obligacion,2), 2), '.', -1)
                ) AS num_monto_obligacion,
                CONCAT_WS(' ',a003_persona.ind_nombre1, a003_persona.ind_apellido1) AS fk_a003_num_persona_proveedor
            FROM
              cp_d001_obligacion
              INNER JOIN cp_b002_tipo_documento ON cp_d001_obligacion.fk_cpb002_num_tipo_documento = cp_b002_tipo_documento.pk_num_tipo_documento
              INNER JOIN a003_persona ON cp_d001_obligacion.fk_a003_num_persona_proveedor = a003_persona.pk_num_persona
            WHERE
              ind_estado<>'NM'
            ";
        if ($busqueda['value']) {
            $sql .= " AND
                        (
                        pk_num_obligacion LIKE '%$busqueda[value]%' OR
                        fk_a003_num_persona_proveedor LIKE '%$busqueda[value]%' OR
                        cp_b002_tipo_documento.cod_tipo_documento LIKE '%$busqueda[value]%' OR
                        ind_nro_factura LIKE '%$busqueda[value]%' OR
                        fec_documento LIKE '%$busqueda[value]%' OR
                        num_monto_obligacion LIKE '%$busqueda[value]%' OR
                        ind_tipo_procedencia LIKE '%$busqueda[value]%' OR
                        ind_estado LIKE '%$busqueda[value]%'
                        )
                        ";
        }
        if ($estado!='' AND $estado!='false') {
            if ($estado == 'RE' and Session::metObtener('REVOBLIG') == 'N') {
                $sql .= " AND ind_estado='PR' ";
            } else {
                $sql .= " AND ind_estado='$estado' ";
            }

        }
        if($proveedor!='' AND $proveedor!='false'){
            $sql .= " AND fk_a003_num_persona_proveedor=$proveedor ";
        }
        if($codigoIngresadoPor!='' AND $codigoIngresadoPor!='false'){
            $sql .= " AND fk_rhb001_num_empleado_ingresa=$codigoIngresadoPor ";
        }
        if($doc!='' AND $doc!='false'){
            $sql .= " AND fk_cpb002_num_tipo_documento=$doc ";
        }
        if($nroDoc!='' AND $nroDoc!='false'){
            $sql .= " AND ind_nro_factura LIKE '%$nroDoc%' ";
        }
        if($centroCosto!='' AND $centroCosto!='false'){
            $sql .= " AND fk_a023_num_centro_de_costo=$centroCosto ";
        }
        if($desde!='' AND $desde!='false' AND $hasta!='' AND $hasta!='false'){
            $sql .= " AND (fec_documento>='$desde' AND fec_documento<='$hasta') ";
        }
        if($desdeR!='' AND $desdeR!='false' AND $hastaR!='' AND $hastaR!='false'){
            $sql .= " AND (fec_registro>='$desdeR' AND fec_registro<='$hastaR') ";
        }

    //$sql .= ' ORDER BY cp_d001_obligacion.pk_num_obligacion ';

#        var_dump($sql);
        #creo un arreglo de los campos a mostrar, Nota: esto es obligatorio
        $campos = array('pk_num_obligacion','fk_a003_num_persona_proveedor', 'cod_tipo_documento', 'ind_nro_factura', 'fec_documento', 'num_monto_obligacion', 'ind_tipo_procedencia', 'ind_estado');
        #campo primario de la tabla, Nota: esto es obligatorio
        $clavePrimaria = 'pk_num_obligacion';
        #construyo el listado de botones

        if (Session::metObtener('REVOBLIG') == 'S') {
            if (in_array('CP-01-01-02-R', $rol) AND $estado == 'PR') {
                $campos['boton']['Revisar'] = '
                <button class="accion Obligacion btn ink-reaction btn-raised btn-xs btn-primary" data-toggle="modal" data-target="#formModal"
                        data-keyboard="false" id="PR" data-backdrop="static" idObligacion="' . $clavePrimaria . '" title="Revisar"
                        descipcion="El Usuario ha Revisado una Obligacion" titulo="<i class=\'icm icm-rating\'></i> Revisar Obligacion">
                    <i class="icm icm-rating" style="color: #ffffff;"></i>
                </button>
            ';
            } else {
                $campos['boton']['Revisar'] = false;
            }
        }

        if (in_array('CP-01-01-03-C',$rol) AND $estado == 'RE') {
            $campos['boton']['Conformar'] = '
                <button class="accion Obligacion btn ink-reaction btn-raised btn-xs btn-primary" data-toggle="modal" data-target="#formModal"
                        data-keyboard="false" id="RE" data-backdrop="static" idObligacion="'.$clavePrimaria.'" title="Conformar"
                        descipcion="El Usuario ha Conformar una Obligacion" titulo="<i class=\'icm icm-rating2\'></i> Conformar Obligacion">
                    <i class="icm icm-rating2" style="color: #ffffff;"></i>
                </button>
            ';
        } else {
            $campos['boton']['Conformar'] = false;
        }

        if (in_array('CP-01-01-04-AP',$rol) AND $estado == 'CO') {
            $campos['boton']['Aprobar'] = '
                <button class="accion Obligacion btn ink-reaction btn-raised btn-xs btn-primary" data-toggle="modal" data-target="#formModal"
                        data-keyboard="false" id="CO" data-backdrop="static" idObligacion="'.$clavePrimaria.'" title="Aprobar"
                        descipcion="El Usuario ha Aprobado una Obligacion" titulo="<i class=\'icm icm-rating3\'></i> Aprobar Obligacion">
                    <i class="icm icm-rating3" style="color: #ffffff;"></i>
                </button>
            ';
        } else {
            $campos['boton']['Aprobar'] = false;
        }

        if (in_array('CP-01-01-06-M',$rol) AND $estado != 'PR' ) {
            $campos['boton']['Editar'] = array("
                <button class='modificar Obligacion btn ink-reaction btn-raised btn-xs btn-primary' data-toggle='modal' data-target='#formModal'
                        data-keyboard='false' data-backdrop='static' id='modificar' idObligacion=$clavePrimaria title='Editar'
                        descipcion='El Usuario ha Modificado una Obligacion' titulo='Editar Obligacion'>
                    <i class='fa fa-edit' style='color: #ffffff;'></i>
                </button>
                ",
                'if( $i["ind_estado"] == "PREPARADO" ) { $valor2 = "#botonEval"; } else { $valor2 = ""; }'
            );

        } else {
            $campos['boton']['Editar'] = false;
        }

        if (in_array('CP-01-01-07-V',$rol)) {
            $campos['boton']['Ver'] = '
               <button class="ver logsUsuario btn ink-reaction btn-raised btn-xs btn-warning" data-toggle="modal" data-target="#formModal"
                        data-keyboard="false" data-backdrop="static" id="ver" idObligacion="'.$clavePrimaria.'" title="Consultar"
                        descipcion="El Usuario esta viendo una Obligacion" titulo="<i class=\'md md-remove-red-eye\'></i> Consultar Obligacion">
                    <i class="md md-remove-red-eye" style="color: #ffffff;"></i>
                </button>
            ';
        } else {
            $campos['boton']['Ver'] = false;
        }

    $campos['boton']['Voucher'] = '
               <button class="vvoucher logsUsuario btn ink-reaction btn-raised btn-xs btn-info" data-toggle="modal" data-target="#formModal"
                        data-keyboard="false" data-backdrop="static" id="ver" idObligacion="'.$clavePrimaria.'" title="Previsualizar Voucher"
                        descipcion="El Usuario esta previsualizando un Voucher" titulo="<i class=\'md md-dvr\'></i> Vista Previa Voucher">
                    <i class="md md-dvr" style="color: #ffffff;"></i>
                </button>
            ';

        #hago el llamado de la datatabla del controlador principal.
        $this->metDataTabla($sql,$campos,$clavePrimaria);

    }*/

    public function metVerificarDisponibilidadPartida()
    {
        $monto = $this->metObtenerInt('monto');
        $pkNumPartida = $this->metObtenerInt('idPartida');
        $partida = $this->atProyectoContratoModelo->metBuscarPartidaCuenta($pkNumPartida);


        $calculo = ((($partida['num_monto_compromiso'] +  $monto) * 100) / $partida['num_monto_ajustado']);

        $arrayPorcentaje = array(
            'porcentaje' => round($calculo, 2)
        );
        echo json_encode($arrayPorcentaje);
    }


    public function metCalcularIva()
    {

        $iva = $this->metObtenerInt('iva');

        $factor = $this->atProyectoContratoModelo->atObligacionModelo->metBuscarIva($iva);

        echo json_encode($factor);
    }

    /**
    * Permite insertar líneas detalle para seleccionar partididas presupuestaria
    */
    public function metInsertar()
    {

       $tr = '
        <tr id="detalle'.$_POST['numero'].'" style="font-size: 12px;">
            <td width="500">
                <div class="col-sm-10">
                    <div class="form-group form-group-sm floating-label" id="detalle_num_cuenta'.$_POST['numero'].'Error">
                        <input readonly id="codigoPartida'.$_POST['numero'].'" name="form[txt][partidaDet'.$_POST['numero'].']" class="form-control partida text-sm input-sm" style="font-size: 12px;"  type="text" value="" data-toggle="tooltip" data-placement="top" title="" data-original-title=""/><input type="hidden" id="idPartida'.$_POST['numero'].'" value=""/>
                    </div>
                </div>
                <div class="col-sm-1">
                    <button type="button" id="btnPartidas"  class="btn ink-reaction btn-raised btn-info btn-xs selector"
                            style="margin: 0px 0px -45px -10px;" titulo="Ver Partidas Presupuestarias"
                            data-toggle="modal" data-target="#formModal2" data-keyboard="false" data-backdrop="static" data-titulo="Listado de Plan de Cuentas"
                            ">
                        <i class="md md-search"></i>
                    </button>
                </div>
            </td>
            <td width="800">
                <div>
                    <div class="form-group">
                        <input readonly id="descripcion'.$_POST['numero'].'" name="form[txt][descripcion'.$_POST['numero'].']" class="form-control Monto text-sm input-sm" type="text" value="" data-toggle="tooltip" data-placement="top" title="" data-original-title=""/>
                    </div>
                </div>
            </td>
            <td width="300">
                <div class="col-sm-12">
                    <div class="form-group">
                        <input id="idTmp'.$_POST['numero'].'" valor="'.$_POST['numero'].'" name="form[monto][monto'.$_POST['numero'].']" class="form-control idTmp Monto text-sm input-sm" type="text"/>
                    </div>
                </div>

            </td>
            <td width="300">
                <div class="col-sm-12">
                    <div class="form-group">
                        <input id="AjTmp'.$_POST['numero'].'" name="form[monto][Ajustado'.$_POST['numero'].']" class="form-control Monto text-sm input-sm" type="text" />
                    </div>
                </div>
            </td>
            <td width="300">
                <div class="col-sm-12">
                    <div class="form-group">
                        <input readonly name="form[txt][Comprometido'.$_POST['numero'].']" class="form-control Monto text-sm input-sm"  type="text" value="0,00"/>
                    </div>
                </div>
            </td>width="400"
            <td width="300">
                <div class="col-sm-12">
                    <div class="form-group">
                        <input readonly name="form[txt][Causado'.$_POST['numero'].']" class="form-control Monto text-sm input-sm"  type="text" value="0,00"/>
                    </div>
                </div>
            </td>
            <td width="300">
                <div class="col-sm-12">
                    <div class="form-group">
                        <input readonly name="form[txt][Pagado'.$_POST['numero'].']" class="form-control Monto text-sm input-sm"  type="text" value="0,00"/>
                    </div>
                </div>
            </td>
            <td width="100">
                <button class="btn ink-reaction btn-raised btn-xs btn-danger" type="button" onclick="Borrando('.$_POST['numero'].');">
                <i class="md md-delete" style="color: #ffffff;"></i></button>
            </td>

        </tr>';


        echo $tr;
    }

}
