martes, 27 de noviembre de 2018

SQL - Paginación.-

Ambas van a retornar el mismo conjunto de resultados.-


--SQL 2008
SELECT operacion,estado FROM
(SELECT operacion, estado ,ROW_NUMBER() OVER (ORDER BY operacion) AS Seq
FROM leaseoper..t_contratos) t
WHERE t.Seq BETWEEN 11 AND 15 /*tramo*/


--SQL 2012 EN ADELANTE

SELECT      operacion,estado
FROM        leaseoper..t_contratos
ORDER BY operacion OFFSET 10 /*n° de fila de partida*/ ROWS FETCH NEXT 5 /*cantidad de registros a mostrar*/ ROWS ONLY

miércoles, 24 de octubre de 2018

SSIS 2017 - Crear PATH dinámico para obtener un origen de datos (.csv)

Primer paso crear una variable global en el paquete. CONTROL FLOW.
En este caso la llamé ruta_entrada, es de tipo String, y como pide un Value le podría indicar cualquiera, pero opto por poner el que supuestamente tendrá en producción.-





Creo una nueva conexión de archivo, como SSIS exige que de una ruta con el archivo valido, tomo mi archivo de entrada y lo dejo en el escritorio (que no será la ruta final ya que será dinámica), así puede reconocer las columnas.


En  Advanced le indico nombres a las columnas y puedo indicar el tipo de datos y el largo.




Luego en mi conexión de archivo plano recién creada voy a setear una Expresión, así que hago click derecho y Propiedades


En las propiedas marco ... en EXPRESIONES , para crearle una expresión a la conexión.-




Ahora voy a explicar los números, que obviamente es el orden en el que debemos configurar:

1. Selecciono ConnectionString , ya que esa es la propiedad que será REEMPLAZADA en tiempo de ejecución.
2.Presiono los [...] y abrirá la ventana Expresion Builder donde se construirá la Expresión que va a reemplazar el path original que pusimos anteriormente y con que? con nuestra variable global creada al principo, asi que la arrastro al cuadro Expression.
3.Presiono OK para guardar los cambios
4. Ahora veremos como expresión nuestra variable.-







Que falta?

Actualizar la variable global con el valor (en este caso la ruta, que será obtenida desde la Base de Datos).

Para realizar la actualización (que será obviamente en tiempo de ejecución) creo una tarea SQL TASK EDITOR , 
importante!! el Result Set lo marco en SINGLE ROW y en SQL STATEMENT indico la consulta de base de datos, que como resultado debe entregarnos la famosa RUTA DINAMICA.




Acá la ruta la obtiene mediante un SP, pero puede ser un SELECT directo.- importante, es que el recordar que el nombre de la salida es el mismo que usaremos mas adelante en el RESUL SET.- 

RESULT SET
Expliquemos los numeros:

1.Para agregar el result set y PISAR el VALUE de nuestra variable global llamada ruta_entrada.
2.Result Name, es el nombre que tiene la salida de nuestro script o sp.-
3.Variable Name la variable que resultará "pisada" en tiempo de ejecución.-
4. OK. para guardar los cambios.

Finalmente ya podemos hacer uso de un origen de archivo plano con nuestra ruta dinamica.-
adjunto foto con un ejemplo.-

en un DATA FLOW, genero un FLAT FILE SOURCE y en el FLAT FIULE CONECCTION MANAGER elijo la conexión creada inicialmente, y LISTO! en tiempo de ejecución el ETL usará la ruta que devuelva el SP y no la que pusimos en DURO.-



FOTOS -->>











fuente de conocimiento : https://geeks.ms/gelexgaray/2006/10/10/paths-relativos-en-integration-services/











lunes, 24 de septiembre de 2018

C# - JQUERY edición de combo en cascada

//fueron eliminadas columnas, para darle mas importancia al ejemplo.-
var lastsel;
        function defineGridGvDoctosCompras() {
            try {
                $("#gvDoctosCompras").jqGrid({
                    datatype: "local",
                    colNames: ['Tipo', 'Proveedor', 'modo_pago', 'Nómina/HCP', 'Modo Pago (Edit.)', 'cod_inst_financ', 'Banco (Edit.)', 'Cuenta Corriente (Edit.)',],
                    colModel: [{ name: 'desc_tipo', index: 'desc_tipo', align: 'center', width: '100px', editable: false, hidden: false },
                    { name: 'proveedor_completo', index: 'proveedor_completo', align: 'center', width: '250px', editable: false, hidden: false },
                    { name: 'modo_pago', index: 'modo_pago', align: 'center', width: '100px', editable: false, hidden: true },
                    { name: 'correl_hcp', index: 'correl_hcp', align: 'right', width: '100px', editable: false, hidden: false },
                    {
                        name: 'desc_modo_pago', index: 'desc_modo_pago', width: '200px', resizable: true, align: 'center', sorttype:
                        'text', editable: true, edittype: 'select',
                        editoptions: {
                            value: GetModoPago()//, //JC comento porque gatillo carga atraves de eventos de celda.-
                            //dataEvents: [
                            //    { type: 'change', fn: function (e) { SetBancos($(e.target).val(), e.target); } },
                            //    { type: 'keyup', fn: function (e) { $(e.target).trigger('change'); } }
                            //]
                        }
                    },
                    { name: 'cod_inst_financ', index: 'cod_inst_financ', align: 'center', width: '100px', editable: false, hidden: true },
                    {
                        name: 'desc_banco', index: 'desc_banco', width: '200px', resizable: true, align: 'center', sorttype:
                        'text', editable: true, edittype: 'select', editoptions: { value: GetBancos() }
                    }
                   ],
                    url: "Paginas/Compras/AdmPago/DocumentosCompras.aspx",
                    multiselect: true,
                    cellsubmit: 'clientArray', //para activar la edicion de la grilla
                    rowNum: -1,
                    cellEdit: true, //activo la edición por celda
                    pgbuttons: false,
                    pager: $('#pager'),
                    viewrecords: true,
                    width: 940,
                    shrinkToFit: false,
                    autowidth: false,
                    forceFit: true,
                    height: 540,
                    footerrow: true,
                    editurl: jutils.pageName(),
                    onSelectRow: function (id, status) {
                        if (id && id !== lastsel) {
                            $('#gvDoctosCompras').jqGrid('restoreRow', lastsel);
                        }
                        //jQuery("#gvDoctosCompras").jqGrid('editRow', id, true); // activo la edición por fila
                    },
                    afterEditCell: function (id, name, val, iRow, iCol) {
                        //if (name === 'desc_modo_pago') {
                        //    if (val === '4') //Abono en cuenta corriente
                        //    {
                        //        $("#gvDoctosCompras").jqGrid("setColProp", "desc_banco", { editoptions: { value: '18:ITAU' } });
                        //    } else {
                        //        $("#gvDoctosCompras").setColProp('desc_banco',
                        //            { editoptions: { value: GetBancos() } });
                        //    }
                        //}
                        //JOEL --> Aqui debo programar que desc_banco no se pueda cambiar si desc_modo_pago es 4
                    },
                    beforeSubmitCell: function (id, name, val, iRow, iCol) {
                        if (name === 'desc_modo_pago') {
                            if (val === '4') //Abono en cuenta corriente
                            {
                                //$("#gvDoctosCompras").setColProp('desc_banco',{ editoptions: { value: GetBancos2() } }); //edición del combo si los valores fueran dinamicos

                                $("#gvDoctosCompras").jqGrid("setColProp", "desc_banco", { editoptions: { value: '18:ITAU' } });
                                //$('#gvDoctosCompras').trigger('reloadGrid'); //refresca la grilla
                                //$("#gvDoctosCompras").jqGrid('setCell', id, 'cta_cte', '666-TEST'); //Edición de una celda.-
                            } else {
                                $("#gvDoctosCompras").setColProp('desc_banco',
                                    { editoptions: { value: GetBancos() } });
                                //$('#gvDoctosCompras').trigger('reloadGrid'); //refresca la grilla
                            }
                        }
                    },
                    gridComplete: function () {
                        var neto = jQuery("#gvDoctosCompras").jqGrid('getCol', 'neto', false, 'sum');
                        var exento = jQuery("#gvDoctosCompras").jqGrid('getCol', 'exento', false, 'sum');
                        var iva = jQuery("#gvDoctosCompras").jqGrid('getCol', 'iva', false, 'sum');
                        var sumaAnticipo = jQuery("#gvDoctosCompras").jqGrid('getCol', 'suma_anticipo', false, 'sum');
                        var montoMandato = jQuery("#gvDoctosCompras").jqGrid('getCol', 'monto_mandato', false, 'sum');
                        var total = jQuery("#gvDoctosCompras").jqGrid('getCol', 'total', false, 'sum');

                        jQuery("#gvDoctosCompras").jqGrid('footerData', 'set', { 'proveedor_completo': 'Totales', 'neto': neto, 'exento': exento, 'iva': iva, 'suma_anticipo': sumaAnticipo, 'monto_mandato': montoMandato, 'total': total });
                    }
                });
                $("#gvDoctosCompras").jqGrid('navGrid', "#pager", { edit: false, add: false, del: false, refresh: false, search: false });
            } catch (e) {
                jutils.showError(e, arguments.callee.name);
            }
        }



 //JC comento porque gatillo carga atraves de eventos de celda.-

        //function SetBancos(value, value2) {
        //    if (value === '4') //Abono en cuenta corriente
        //    {
        //        $("#gvDoctosCompras").setColProp('desc_banco',
        //            { editoptions: { value: GetBancos2() } });
        //    } else {
        //        $("#gvDoctosCompras").setColProp('desc_banco',
        //            { editoptions: { value: GetBancos() } });
        //    }
        //}

jueves, 30 de agosto de 2018

C# - Crear BRANCHE para mantener distintas versiones de un mismo proyecto 2018.-

1.Se crea un nuevo proyecto de equipo.-


2.Siguiente

3.Siguiente

4. Se elige Crear un nuevo branch desde el proyecto original y finalizar

5. De esta forma quedan ambos proyectos de equipo enlazados para poder realizar luego MERGE


6. Para realizar el merge se selecciona el proyecto y se elige el destino y origen, luego NETX y se hará el merge automatica y/o manual de ser requerido.-


jueves, 2 de agosto de 2018

C# - JQGRID Doble encabezado para columnas en grilla jquery



 var lastsel2;
        function defineGvTasas() {
            try {
                $("#gridTasas").jqGrid({
                    datatype: "local",
                    colNames: ['Fecha ', 'Tipo Fecha ', 'Tasa Max.', 'Vigencia', 'Tasa Max.', 'Vigencia', 'Tasa Max.', 'Vigencia'],
                    colModel: [
                        { name: 'fecha', index: 'fecha', align: 'center', width: '116px', editable: false, hidden: false },
                        { name: 'glosa_fecha', index: 'glosa_fecha', align: 'center', width: '116px', editable: false, hidden: false },
                        { name: 'tasa_max_$', index: 'tasa_max_$', align: 'center', width: '116px', editable: false, hidden: false },
                        { name: 'vigencia_$', index: 'vigencia_$', align: 'center', width: '116px', editable: false, hidden: false },
                        { name: 'tasa_max_uf', index: 'tasa_max_uf', align: 'center', width: '116px', editable: false, hidden: false },
                        { name: 'vigencia_uf', index: 'vigencia_uf', align: 'center', width: '116px', editable: false, hidden: false },
                        { name: 'tasa_max_usd', index: 'tasa_max_usd', align: 'center', width: '116px', editable: false, hidden: false },
                        { name: 'vigencia_usd', index: 'vigencia_usd', align: 'center', width: '116px', editable: false, hidden: false }
                    ],
                    multiselect: false,
                    rowNum: -1,
                    footerrow: false,
                    pgbuttons: false,
                    viewrecords: true,
                    width: 980,
                    shrinkToFit: false,
                    autowidth: false,
                    forceFit: true,
                    height: 65,
                    editurl: jutils.pageName()
                });

                jQuery("#gridTasas").jqGrid('setGroupHeaders', {
                    useColSpanStyle: true,
                    groupHeaders: [
                        { startColumnName: 'tasa_max_$', numberOfColumns: 2, titleText: '$' },
                        { startColumnName: 'tasa_max_uf', numberOfColumns: 2, titleText: 'U.F.' },
                        { startColumnName: 'tasa_max_usd', numberOfColumns: 2, titleText: 'US$ OBS.' }
                    ]
                });

            } catch (e) {
                jutils.showError(e, arguments.callee.name);
            }
        }

C# - Datatable agregar una columna con un valor por defecto a datable ya existente.-

//DataTable x para ejemplo
var dt = new BcEvaluarPagos().GetTasaMaxima(Convert.ToDateTime(fechaPago));

//Crea la nueva columna con nombre y tipo de dato
                DataColumn newColumn = new DataColumn("fecha_actual", typeof(System.DateTime));
//Asigna el valor por defecto para la columna
                newColumn.DefaultValue = DateTime.Now;
//Se agrega la columna al DataTable
                dt.Columns.Add(newColumn);

miércoles, 25 de abril de 2018

Javascript - Validar RUT CHILENO

  function ValidarRut(s, e) {
            var rut = s.GetText();
 
            var suma = 0;
            var arrRut = rut.split("-");
            var rutSolo = arrRut[0];
            rutSolo = rutSolo.replace('.''').replace('.''');
            var verif = arrRut[1];
            var continuar = true;
            for (i = 2; continuar; i++) {
                suma += (rutSolo % 10) * i;
                rutSolo = parseInt((rutSolo / 10));
                i = (i == 7) ? 1 : i;
                continuar = (rutSolo == 0) ? false : true;
            }
            var resto = suma % 11;
            var dv = 11 - resto;
            if (dv == 10) {
                if (verif.toUpperCase() == 'K')
                    return true;
            } else if (dv == 11 && verif == 0)
                return true;
            else if (dv == verif)
                return true;
            else
                alert('El rut ingresado no es válido');//return false;
 
        }

miércoles, 21 de febrero de 2018

C# - IIS Extender el tiempo activo de la Session



Para poder extender el tiempo de conexión del usuario a nuestro sitio web debemos entender que son 3 parámetros los que se deben configurar:


1.Aumentar tiempo del estado de la sesión en nuestro sitio web
2.Aumentar tiempo aceptado de inactividad del pool de aplicaciones del sitio web
3.Definir la duración del tiempo de sesión de usuario en global.asax

Cabe destacar que por defecto son 20 minutos y así lo recomienda Microsoft por motivos de seguridad.-


Para configurarlos:

1.Aumentar tiempo del sitio web en IIS









Este paso se puede realizar también escribiendo directamente en el web.config el tag 
......

<sessionState cookieless="AutoDetect" timeout="70" /> </system.web> 
 <system.webServer>

......




2.Aumentar tiempo de inactividad del pool de aplicaciones del sitio web






3.Definir tiempo de sesión de usuario en global.asax



4. Bonus, adicionalmente se puede configurar también:




Y con esto ya el tiempo de sesión no sera de 20 minutos por defecto (los asignados por Microsoft)
sino lo que nosotros definamos en nuestra aplicación.-

martes, 20 de febrero de 2018

C# - JQGRID con eventos (edicion in line)

--------------------------------------------------------------------------------------------------------------------
Producto de una migracion de DEVEXPRESS a JQUERY, manejo los calculos en session, y se
van actualizando tanto en pantalla como en sesión.-
--------------------------------------------------------------------------------------------------------------------



--------------------------------------------------------------------------------------------------------------------
.aspx
--------------------------------------------------------------------------------------------------------------------
<%@ Page Title="Evaluador de Pagos" Language="C#" MasterPageFile="~/Site.Master"
    AutoEventWireup="true" CodeBehind="EvaluadorPagos.aspx.cs" Inherits="LeaseOperWeb.Paginas.Cobranza.EvaluarPagos.EvaluadorPagos" %>
 
<asp:Content ID="Content1" ContentPlaceHolderID="HeadContent" runat="server">
    <script src="../../../Scripts/JSValidadores.js" type="text/javascript"></script>
    <%-- <link href="../../../css/style-css.css" rel="stylesheet" type="text/css" />--%>
    <!--#include file="../../../Scripts/jquery.includes.htm"-->
    <script type="text/javascript" language="javascript">
        var alert = 0;
        $(document).ready(function () {
            defineGvEvaluador();
            defineFormato();
        });
        var lastsel;
        function defineGvEvaluador() {
            try {
                $("#grid").jqGrid({
                    datatype: "local",
                    colNames: ['Rut''Operación''T.C''Cta.''Descrip.Concepto''Descrip.Estado Pago''Concepto''Tipo Pago''Fecha Vcto.''Fecha Pago''Cuota Mo.''Cuota $''Mora Mo''Interes Mora $''Gast Cobr M.O''Gasto Cob.$''Total a Pagar $''Monto Pagado $''corre_cons''num_consulta'],
                    colModel: [
                        { name: 'rut', index: 'rut', align: 'center', width: '100px', editable: false, hidden: true },
                        { name: 'operacion', index: 'operacion', align: 'center', width: '100px', editable: false, hidden: false },
                        { name: 'cod_tipo_cuota', index: 'cod_tipo_cuota', align: 'center', width: '100px', editable: false, hidden: false },
                        { name: 'num_cuota', index: 'num_cuota', align: 'center', width: '100px', editable: false, hidden: false },
                        { name: 'descripcion_concepto', index: 'descripcion_concepto', align: 'center', width: '100px', editable: false, hidden: false },
                        { name: 'desc_est_pago', index: 'desc_est_pago', align: 'center', width: '100px', editable: false, hidden: false },
                        { name: 'concepto_norenta', index: 'concepto_norenta', align: 'center', width: '100px', editable: false, hidden: true },
                        { name: 'cod_estado_pago', index: 'cod_estado_pago', align: 'center', width: '100px', editable: false, hidden: true },
                        { name: 'fecha_vencimiento', index: 'fecha_vencimiento', align: 'center', width: '100px', editable: false, hidden: false },
                        { name: 'fecha_pago', index: 'fecha_pago', align: 'center', width: '100px', editable: true, hidden: false },
                        { name: 'valor_cuota_mo', index: 'valor_cuota_mo', align: 'center', width: '100px', formatter: 'number', formatoptions: { decimalPlaces: 2 }, editable: false, hidden: false },
                        { name: 'paridad', index: 'paridad', align: 'center', width: '100px', formatter: 'number', formatoptions: { decimalPlaces: 0 }, editable: false, hidden: false },
                        { name: 'interes_mora_mo', index: 'interes_mora_mo', align: 'center', width: '100px', formatter: 'number', formatoptions: { decimalPlaces: 2 }, editable: false, hidden: false },
                        { name: 'interes_mora_pe', index: 'interes_mora_pe', align: 'center', width: '100px', formatter: 'number', formatoptions: { decimalPlaces: 0 }, editable: true, hidden: false },
                        { name: 'gastos_cobranza_mo', index: 'gastos_cobranza_mo', align: 'center', width: '100px', formatter: 'number', formatoptions: { decimalPlaces: 2 }, editable: false, hidden: false },
                        { name: 'gastos_cobranza', index: 'gastos_cobranza', align: 'center', width: '100px', formatter: 'number', formatoptions: { decimalPlaces: 0 }, editable: true, hidden: false },
                        { name: 'valor_total_pesos', index: 'valor_total_pesos', align: 'center', width: '100px', formatter: 'number', formatoptions: { decimalPlaces: 0 }, editable: false, hidden: false },
                        { name: 'monto_cancelado', index: 'monto_cancelado', align: 'center', width: '100px', formatter: 'number', formatoptions: { decimalPlaces: 0 }, editable: false, hidden: false },
                        { name: 'corre_cons', index: 'corre_cons', align: 'center', width: '100px', editable: false, hidden: true },
                        { name: 'num_consulta', index: 'num_consulta', align: 'center', width: '100px', editable: false, hidden: true }
                    ],
                    multiselect: false,
                    rowNum: -1,
                    footerrow: true,
                    pgbuttons: true,
                    viewrecords: true,
                    width: 980,
                    shrinkToFit: false,
                    autowidth: false,
                    forceFit: true,
                    height: 300,
                    editurl: jutils.pageName(),
                    cellEdit: true//PERMITEN LA EDICION POR CELDA
                    cellsubmit: 'clientArray'//PERMITEN LA EDICION POR CELDA
                    onSelectRow: function (id, status) {
                        if (id && id !== lastsel) {
                            $('#grid').jqGrid('restoreRow', lastsel);
                        } jQuery("#grid").jqGrid('editRow', id, true);
                    }
                    , afterEditCell: function (id, name, val, iRow, iCol) {
                        if (name === 'fecha_pago') {
                            jQuery("#" + iRow + "_fecha_pago""#grid").datepicker({
                                changeMonth: true,
                                changeYear: true,
                                dateFormat: 'dd/mm/yy',
                                firstDay: 1,
                                yearSuffix: '',
                                dayNamesMin: ['Dom''Lun''Mar''Mier''jue''Vie''Sab'],
                                monthNamesShort: ["Ene""Feb""Mar""Abr",
                                    "May""Jun""Jul""Ago""Sep",
                                    "Oct""Nov""Dic"]
                            });
                            jQuery("#" + iRow + "_fecha_pago""#grid").attr('readonly'true);
                        }
                        if (name === 'interes_mora_pe') {
                            jQuery("#" + iRow + "_interes_mora_pe""#grid").keyup(function () {
                                this.value = this.value.replace(/[^0-9\.]/g, '');
                            });
                        }
                        if (name === 'gastos_cobranza') {
                            jQuery("#" + iRow + "_gastos_cobranza""#grid").keyup(function () {
                                this.value = this.value.replace(/[^0-9\.]/g, '');
                            });
                        }
                    },
                    beforeSubmitCell: function (id, name, val, iRow, iCol) {
                        RefreshChangeValueCell(id, name, val, iRow - 1, iCol);
                    },
                    gridComplete: function () {
                        var colSumTotalPesos = jQuery("#grid").jqGrid('getCol''valor_total_pesos'false'sum');
                        var colSumToTalPagado = jQuery("#grid").jqGrid('getCol''monto_cancelado'false'sum');
                        jQuery("#grid").jqGrid('footerData''set', { 'valor_total_pesos': colSumTotalPesos, 'monto_cancelado': colSumToTalPagado });
                    }
                });
            } catch (e) {
                jutils.showError(e, arguments.callee.name);
            }
        }
 
        function RefreshChangeValueCell(id, name, val, iRow, iCol) {
            try {
                if (name === 'fecha_pago' || name === 'monto_cancelado') {
                    var paramsVal = "{'type':'" + name + "','value':'" + val + "','index':'" + iRow + "'}";
                    var data = jutils.ajax.serverCall("ChangeDateOrAmountToPay", paramsVal, arguments.callee.name);
                    if (data !== 'OK') {
                        showMessage(data);
                        return;
                    }
                }
                var params = "{'type':'" + name + "','value':'" + val + "','index':'" + iRow + "'}";
                jutils.ajax.getJsonData_Async("RefreshChangeValueCell", params, arguments.callee.name, DataBindRefresh);
 
                var paramsMsg = "{}";
                var msg = jutils.ajax.serverCall("ReviewMsgDet", paramsMsg, arguments.callee.name);
                msg = msg.replace(/['"]+/g, '');
                if (msg !== 'OK') {
                    showMessage(msg);
                    return;
                }
 
            } catch (e) {
                jutils.showError(e, arguments.callee.name);
            }
        }
 
        function defineFormato() {
            $("#textOperacion").keyup(function () {
                this.value = this.value.replace(/[^0-9\.]/g, '');
            });
 
            $("#txtNumConsulta").keyup(function () {
                this.value = this.value.replace(/[^0-9\.]/g, '');
            });
 
            $("#textNumFactura").keyup(function () {
                this.value = this.value.replace(/[^0-9\.]/g, '');
            });
 
            $('#textRut').Rut({
                on_error: function () { showMessage('El RUT ingresado no es válido'); },
                format_on: 'keyup'
            });
 
            var currentDate = new Date();
            $("#textFecha").datepicker({
                changeMonth: true,
                changeYear: true,
                dateFormat: 'dd/mm/yy',
                firstDay: 1,
                yearSuffix: '',
                dayNamesMin: ['Dom''Lun''Mar''Mier''jue''Vie''Sab'],
                monthNamesShort: [
                    "Ene""Feb""Mar""Abr",
                    "May""Jun""Jul""Ago""Sep",
                    "Oct""Nov""Dic"
                ]
            });
            $.datepicker.setDefaults($.datepicker.regional['es']);
            $("#textFecha").datepicker("setDate", currentDate);
        }
 
        function OperacionBlur() {
            $('#grid').clearGridData(true);
            if ($("#textOperacion").val() === '') {
                showMessage('Debe indicar la operación');
                return;
            }
            CargaGrillaEvaluarPagos('operacion');
        }
 
        function NumConsultaBlur() {
            $('#grid').clearGridData(true);
            if ($("#txtNumConsulta").val() === '') {
                showMessage('Debe indicar n° Consulta');
                return;
            }
            CargaGrillaEvaluarPagos('numConsulta');
        }
 
        function RutBlur() {
            $('#grid').clearGridData(true);
            if ($("#textRut").val() === '') {
                showMessage('Debe indicar Rut');
                return;
            }
            if ($.Rut.validar($("#textRut").val()) === false) {
                showMessage('El RUT ingresado no es válido');
                return;
            }
            CargaGrillaEvaluarPagos('rut');
        }
 
        function TipoFacturaChange() {
            if ($("#cmbTipoFactura").val() === '0') {
                return;
            }
            if ($("#textNumFactura").val() === '') {
                showMessage('Debe indicar n° Factura');
                return;
            }
            CargaGrillaEvaluarPagos('factura');
        }
 
        function CargaGrillaEvaluarPagos(value) {
            try {
                var sinCosto = 0;
                if ($("#checkSinCost").is(":checked") === true)
                    sinCosto = 1;
                var params;
                if (value === 'operacion') {
                    var operacion = $("#textOperacion").val();
                    params = "{'operacion':'" + operacion + "','rut':'" + 0 + "','tipo':'" + 0 + "','numFact':'" + 0 + "','numConsulta':'" + 0 + "','tipoConsulta':'" + 'operacion' + "','sinCosto':'" + sinCosto + "'}";
                    jutils.ajax.getJsonData_Async("LoadJqGrid", params, arguments.callee.name, DataBind);
                }
                if (value === 'numConsulta') {
                    var numConsulta = $("#txtNumConsulta").val();
                    params = "{'operacion':'" + 0 + "','rut':'" + 0 + "','tipo':'" + 0 + "','numFact':'" + 0 + "','numConsulta':'" + numConsulta + "','tipoConsulta':'" + 'numConsulta' + "','sinCosto':'" + sinCosto + "'}";
                    jutils.ajax.getJsonData_Async("LoadJqGrid", params, arguments.callee.name, DataBind);
                }
                if (value === 'rut') {
                    var rut = $("#textRut").val();
                    rut = rut.replace(".""").replace(".""").replace(".""");
                    rut = rut.split("-")[0];
                    params = "{'operacion':'" + 0 + "','rut':'" + rut + "','tipo':'" + 0 + "','numFact':'" + 0 + "','numConsulta':'" + 0 + "','tipoConsulta':'" + 'rut' + "','sinCosto':'" + sinCosto + "'}";
                    jutils.ajax.getJsonData_Async("LoadJqGrid", params, arguments.callee.name, DataBind);
                }
                if (value === 'factura') {
                    var factura = $("#textNumFactura").val();
                    params = "{'operacion':'" + 0 + "','rut':'" + 0 + "','tipo':'" + 0 + "','numFact':'" + factura + "','numConsulta':'" + 0 + "','tipoConsulta':'" + 'factura' + "','sinCosto':'" + sinCosto + "'}";
                    jutils.ajax.getJsonData_Async("LoadJqGrid", params, arguments.callee.name, DataBind);
                }
                var paramsMsg = "{}";
                var msg = jutils.ajax.serverCall("ReviewMsgDet", paramsMsg, arguments.callee.name);
                msg = msg.replace(/['"]+/g, '');
                if (msg !== 'OK') {
                    showMessage(msg);
                    return;
                }
 
                msg = jutils.ajax.serverCall("ReviewMsgNec", paramsMsg, arguments.callee.name);
                msg = msg.replace(/['"]+/g, '');
                if (msg !== 'OK') {
                    showMessage(msg);
                    return;
                }
                //                var rowCount = $("#grid").getGridParam("reccount"); // JC : Eliminar en proxima revision
                //                if (rowCount > 0) {
                CargaEncabezado();
                //                }
            }
            catch (e) {
                jutils.showError(e, arguments.callee.name);
            }
        }
 
        function DataBind(data) {
            if (data != null && data.substring(0, 1) === '*') {
                showMessage(data, 'Atención');
                return;
            }
            var jsondata = $.parseJSON(data);
            $('#grid').clearGridData(true);
            $(jsondata).each(function (e) {
                $("#grid").addRowData(e, this);
            });
        }
 
        function CargaEncabezado() {
            try {
                var paramsEnc = "{}";
                var data = jutils.ajax.serverCall("LoadHead", paramsEnc, arguments.callee.name);
 
                //                if (data.substring(0, 1) === '*') {
                //                    showMessage(data, 'Atención');
                //                    return;
                //                }
                $("#txtNumConsulta").val(data[0]['num_consulta']);
                $("#textOperacion").val(data[0]['operacion']);
                if (data[0]['numero_factura'] === null)
                    $("#textNumFactura").val('0');
                else
                    $("#textNumFactura").val(data[0]['numero_factura']);
                $("#textRut").val(formatNumber(data[0]['rut_cliente']) + '-' + data[0]['dv'].toString());
                $("#textNombre").val(data[0]['nombre_cliente']);
                if (data[0]['tipo'] === null)
                    $("#cmbTipoFactura").val('0');
                else
                    $("#cmbTipoFactura").val(data[0]['tipo']);
            } catch (e) {
                jutils.showError(e, arguments.callee.name);
            }
        }
 
        function formatNumber(value) {
            var retorno = value.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ".");
            return retorno;
        }
 
        function ClearTexts() {
            $("#txtNumConsulta").val('');
            $("#textOperacion").val('');
            $("#textNumFactura").val('');
            $("#textRut").val('');
            $("#textNombre").val('');
            //$("#textFecha").val('');
            $("#cmbTipoFactura").val('0');
            $('#grid').clearGridData(true);
 
            var params = "{}";
            jutils.ajax.serverCall("ClearSession", params, arguments.callee.name);
        }
 
        //Borrado desde abajo hacia arriba automático
        //        function BorrarFila() {
        //            try {
        //                var rowid = $("#grid").getGridParam("reccount") - 1;
        //                if (rowid >= 0) {
 
        //                    $('#grid').jqGrid('delRowData', rowid);
 
        //                    var params = "{'rowCount':'" + rowid + "'}";
        //                    jutils.ajax.serverCall("DelRow", params, arguments.callee.name);
        //                }
        //            } catch (e) {
        //                jutils.showError(e, arguments.callee.name);
        //            }
        //        }
 
        //Borrado selectivo por Row
        function BorrarFila() {
            try {
                var rowid = $("#grid").jqGrid('getGridParam''selrow');
                var rowData = jQuery("#grid").getRowData(rowid);
                var colData = rowData['concepto_norenta'];
                var correlativoInConsulta = rowData['corre_cons'];
                var rowCount = $("#grid").getGridParam("reccount") - 1;
 
                if (rowid >= 0) {
                    if (colData !== '1') {
                        $('#grid').jqGrid('delRowData', rowid);
 
                        var params = "{'correlativoInConsulta':'" + correlativoInConsulta + "','rowCount':'" + rowCount + "'}";
                        jutils.ajax.serverCall("DelRow", params, arguments.callee.name);
 
                    } else {
                        jutils.confirmMessage("Se eliminarán todas las rentas hacia abajo""Eliminar Rentas", EliminarRentas);
                    }
                } else {
                    showMessage('Debe seleccionar una fila para Eliminar''Atención');
                    return;
 
                }
            } catch (e) {
                jutils.showError(e, arguments.callee.name);
            }
        }
 
        function EliminarRentas() {
            //OBTENGO EL ID ROW A ELIMINAR
            var rowidToDelete = $("#grid").jqGrid('getGridParam''selrow');
            //OBTENGO EL INDICE PARA ELIMNAR EN SESSION EN .CS
            var rowIndex = $('#' + $.jgrid.jqID(rowidToDelete))[0].rowIndex;
            //OBTENGO LA CANTIDAD DE REGISTROS PARA ELIMINAR EN SESSION EN .CS
            var rowCount = $("#grid").getGridParam("reccount");
 
 
            if (rowidToDelete >= 0) {
                //1.OBTENGO TODOS LOS IDS DE LA GRILLA
                var rows = jQuery("#grid").getDataIDs();
                //2.LOS RECORRO
                for (var a = 0; a < rows.length; a++) {
                    //OBTENGO EL IDROW DESDE MI ARREGLO "rows"
                    var rowFor = rows[a];
                    //3.SI EL IDROW ES MENOR AL ID A ELIMINAR NO HAGO NADA, DE LO CONTRARIO ELIMINO LA FILA DE LA GRILLA
                    if (parseInt(rowFor) >= parseInt(rowidToDelete)) {
                        var row1 = jQuery("#grid").getRowData(rowFor);
                        var colDataFor1 = row1['concepto_norenta'];
                        if (colDataFor1 === '1') {
                            $('#grid').jqGrid('delRowData', rowFor);
                        }
                    }
                }
                var params = "{'rowId':'" + rowIndex + "','rowCount':'" + rowCount + "'}";
                jutils.ajax.serverCall("DelRowMassive", params, arguments.callee.name);
            }
        }
 
        function Grabar() {
            try {
                var rowCount = $("#grid").getGridParam("reccount");
                if (rowCount > 0) {
                    var params = "{}";
                    var data = jutils.ajax.serverCall("Save", params, arguments.callee.name);
                    data = data.replace(/['"]+/g, '');
                    if (data === 'Grabación efectuada OK.') {
                        RefreshBeforeSave();
                        showMessage(data, 'Atención');
                    } else {
                        showMessage(data, 'Atención');
                        return;
                    }
                } else {
                    showMessage('No hay registros para Guardar''Atención');
                    return;
                }
            } catch (e) {
                jutils.showError(e, arguments.callee.name);
            }
        }
 
        function RefreshBeforeSave() {
            var params = "{}";
            jutils.ajax.getJsonData_Async("RefreshBeforeSave", params, arguments.callee.name, DataBindRefresh);
        }
 
        function DataBindRefresh(data) {
            if (data != null && data.substring(0, 1) === '*') {
                showMessage(data, 'Atención');
                return;
            } else {
                var jsondata = $.parseJSON(data);
                $('#grid').clearGridData(true);
                $(jsondata).each(function (e) {
                    $("#grid").addRowData(e, this);
                });
            }
        }
 
        function PreExcel() {
            jutils.confirmMessage("Se generará Excel en base a últimos registros Guardados""Atención", Excel);
        }
 
        var flag = 0;
        function Excel() {
 
            var id = '325';
            var wsdata = "{'iddocx':'" + id + "'}";
            var hoja = jutils.ajax.getJsonData("RecuperaNomDoc", wsdata, arguments.callee.name);
            var url;
            var downloadWindow;
            var opciones = "toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=yes, resizable=yes, width=1, height=1, top=1, left=1 ";
 
            var numConsulta = $("#txtNumConsulta").val();
            if (numConsulta == '') {
                showMessage('No hay número de consulta para realizar exportación''Atención');
                return;
            }
            var wsdataXls = "{'num_consulta':'" + numConsulta + "','hoja':'" + hoja + "'}";
            jutils.ajax.getJsonData_Async("ReporteXls", wsdataXls, arguments.callee.name, showReportExcel);
 
        }
 
        function showReportExcel(data) {
            if (data != null && data !== "" && data.substring(0, 1) !== "*") {
                if (data === 'SD') {
                    showMessage('No se encontraron Registros''Atención');
                    return;
                } else {
                    var wsdata = "{}";
                    var url = jutils.ajax.getJsonData("GetRutaCargaExcel", wsdata, arguments.callee.name);
                    url = url + data;
                    var opciones = "toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=no, resizable=no, width=100, height=100, top=0, left=2500";
                    window.open(url, '', opciones);
                }
            }
            else {
                showMessage('Ha ocurrido un error. ' + data, 'Atención');
            }
        }
 
        function PreVer() {
            jutils.confirmMessage("Se generará Informe en base a últimos registros Guardados""Atención", Ver);
        }
 
        function Ver() {
            var numConsulta = $("#txtNumConsulta").val();
            if (numConsulta === '') {
                showMessage('No hay número de consulta para realizar exportación''Atención');
                return;
            }
            var wsdata = "{'num_consulta':'" + numConsulta + "'}";
            jutils.ajax.getJsonData_Async("DownloadPDF", wsdata, arguments.callee.name, showReport);
 
        }
 
        function showReport(data) {
            if (data != null && data !== "" && data.substring(0, 1) !== "*")
                if (data !== 'SD') {
                    document.getElementById('FrameDialog').src = data;
                } else {
                    showMessage('No se encontraron Registros''Atención');
                    return;
                }
 
            else {
                var wsdata = "{}";
                var url = jutils.ajax.getJsonData("GetRutaCRError", wsdata, arguments.callee.name);
                url = url + data;
                document.getElementById('FrameDialog').src = url;
            }
 
            $("#frmPdf").dialog({
                title: 'Informe Informe Evaluar Pagos',
                height: 800,
                width: 900,
                resizable: false,
                modal: true,
                open: function () {  //para que funcione correctamente en emulación IE8
                    $(".ui-dialog-titlebar-close").show();
                    $('.ui-dialog').css('z-index', 103);
                    $('.ui-widget-overlay').css('z-index', 102);
                }
 
            });
        }
    </script>
    <form id="frmPdf" style="displaynone">
    <table width="100%">
        <tr>
            <td>
                <iframe id="FrameDialog" height="800px" width="100%" scrolling="yes" style="z-index-1;">
                </iframe>
            </td>
        </tr>
    </table>
    </form>
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="HeaderContent" runat="server">
    <table width="100%" border="0" cellspacing="0" cellpadding="0">
        <tr>
            <td valign="top" id="td-descrip" class="style21">
                <table width="100%" border="0" cellspacing="0" cellpadding="0">
                    <tr>
                        <td>
                            &nbsp;
                        </td>
                    </tr>
                    <tr>
                        <td class="td-titulos">
                            Evaluar Pagos
                        </td>
                    </tr>
                    <tr>
                        <td>
                            <table width="100%" border="0" cellspacing="0" cellpadding="0">
                                <tr>
                                    <td width="40">
                                        &nbsp;
                                    </td>
                                    <td class="lin-borde">
                                        &nbsp;
                                    </td>
                                </tr>
                            </table>
                        </td>
                    </tr>
                    <tr>
                        <td class="mig">
                            Cobranza / Cobranza / Evaluar Pagos
                        </td>
                    </tr>
                </table>
                <!-------------------------------------------------------------titulo y miga de pan-------------------------------------------------------------------------------------------->
            </td>
        </tr>
        <tr>
            <td valign="top">
                &nbsp;
            </td>
        </tr>
        <tr>
            <td valign="top">
            </td>
        </tr>
        <tr>
            <td valign="top">
                &nbsp;
            </td>
        </tr>
        <tr>
            <td valign="top">
                <!---------------------------------Tabla de ejecutivo-------------------------------->
                <table width="100%" border="0" cellpadding="0" cellspacing="0">
                    <tr>
                        <td width="10">
                            &nbsp;
                        </td>
                        <td>
                            <table width="100%" border="0" cellspacing="0" cellpadding="0">
                                <tr>
                                    <td>
                                        <table width="100%" border="0" cellspacing="0" cellpadding="0" class="borde">
                                            <tr>
                                                <td>
                                                    <div class="modul">
                                                        <div class="modul_top">
                                                            <div class="modul_top_right">
                                                                <table width="100%" border="0" cellspacing="0" cellpadding="0">
                                                                    <tr>
                                                                        <td width="9">
                                                                        </td>
                                                                        <td class="modul_fd">
                                                                            <table width="100%" border="0" cellspacing="0" cellpadding="0">
                                                                                <tr>
                                                                                    <td class="modul_fd_tit">
                                                                                        PARAMETROS DE CONSULTA
                                                                                    </td>
                                                                                </tr>
                                                                            </table>
                                                                        </td>
                                                                        <td width="9">
                                                                        </td>
                                                                    </tr>
                                                                </table>
                                                            </div>
                                                        </div>
                                                        <div class="modul_content">
                                                        </div>
                                                    </div>
                                                </td>
                                            </tr>
                                        </table>
                                    </td>
                                </tr>
                                <tr>
                                    <td class="modul_bordes">
                                        <table width="100%" border="0" cellspacing="0" cellpadding="0" class="caja-datos">
                                            <tr>
                                                <td width="10">
                                                </td>
                                                <td height="10">
                                                </td>
                                                <td>
                                                </td>
                                            </tr>
                                            <tr>
                                                <td width="10" rowspan="3">
                                                </td>
                                                <td>
                                                    <table class="style1">
                                                        <tr>
                                                            <td class="style8" colspan="12">
                                                                <table width="100%">
                                                                    <tr>
                                                                        <td class="style17">
                                                                            Rut
                                                                        </td>
                                                                        <td class="style16" align="left">
                                                                            <input id="textRut" type="text" maxlength="13" class="caja-datos" onblur="RutBlur()" />
                                                                        </td>
                                                                        <td class="style18">
                                                                            Nombre Cliente
                                                                        </td>
                                                                        <td align="left" class="style19">
                                                                            <input id="textNombre" type="text" maxlength="100" class="caja-datos" readonly="readonly"
                                                                                style="width250px" />
                                                                        </td>
                                                                        <td align="left" class="style20">
                                                                            <input id="checkSinCost" type="checkbox" maxlength="100" class="caja-datos" />
                                                                            Sin Costo Cob.
                                                                        </td>
                                                                        <td align="left" class="style23">
                                                                        </td>
                                                                        <td align="left">
                                                                            <input id="btnLimpiar" type="button" value="Limpiar" class="btn_limpiar" onclick="ClearTexts()"
                                                                                title="Limpiar" />
                                                                        </td>
                                                                    </tr>
                                                                </table>
                                                            </td>
                                                        </tr>
                                                        <tr>
                                                            <td class="style24">
                                                                Operación
                                                            </td>
                                                            <td class="style9">
                                                                <input id="textOperacion" type="text" maxlength="20" class="caja-datos" onblur="OperacionBlur()" />
                                                            </td>
                                                            <td class="style10">
                                                                N° Consulta
                                                            </td>
                                                            <td align="left" class="style7">
                                                                <input id="txtNumConsulta" type="text" maxlength="20" class="caja-datos" style="width100px;
                                                                    horiz-alignright" onblur="NumConsultaBlur()" />
                                                            </td>
                                                            <td class="style8">
                                                                N° Factura
                                                            </td>
                                                            <td align="left" class="style12">
                                                                <input id="textNumFactura" type="text" maxlength="20" class="caja-datos" style="width100px;
                                                                    horiz-alignright" />
                                                            </td>
                                                            <td class="style13" align="left">
                                                                <select id="cmbTipoFactura" class="caja-datos" style="width150px;" onchange="TipoFacturaChange()">
                                                                    <option value="0" selected="selected">Sin Filtro</option>
                                                                    <option value="1">FA AF-Afecta</option>
                                                                    <option value="2">FA EX-Exenta</option>
                                                                    <option value="2">FA AEL-Afecta Electrónica</option>
                                                                    <option value="2">FA EEL-Exenta Electrónica</option>
                                                                </select>
                                                            </td>
                                                            <td class="style11">
                                                                Fecha
                                                            </td>
                                                            <td class="style11" align="left">
                                                                <input id="textFecha" readonly="readonly" width="100px" class="FormElement ui-widget-content " />
                                                                <td class="style11">
                                                                </td>
                                                                <td class="style11">
                                                                </td>
                                                                <td class="style11">
                                                                </td>
                                                        </tr>
                                                    </table>
                                                </td>
                                                <td width="10" rowspan="3">
                                                </td>
                                            </tr>
                                            <tr>
                                                <td height="10">
                                                </td>
                                            </tr>
                                            <tr>
                                                <td height="10" align="right">
                                                    &nbsp;
                                                </td>
                                            </tr>
                                        </table>
                                    </td>
                                </tr>
                                <tr>
                                    <td>
                                        <div class="modul_bottom">
                                            <div class="modul_bottom_right">
                                                <div class="modul_borde-bottom">
                                                </div>
                                            </div>
                                        </div>
                                    </td>
                                </tr>
                            </table>
                        </td>
                        <td width="10">
                            &nbsp;
                        </td>
                    </tr>
                </table>
                <!---------------------------------Fin  de ejecutivo-------------------------------->
            </td>
        </tr>
        <tr>
            <td valign="top">
                &nbsp;
            </td>
        </tr>
        <tr>
            <td valign="top">
                <!---------------------------------Inicio tabla alternativa-------------------------------->
                <table width="100%" border="0" cellpadding="0" cellspacing="0">
                    <tr>
                        <td width="10">
                            &nbsp;
                        </td>
                        <td>
                            <table width="100%" border="0" cellspacing="0" cellpadding="0">
                                <tr>
                                    <td>
                                        <table width="100%" border="0" cellspacing="0" cellpadding="0" class="borde">
                                            <tr>
                                                <td>
                                                    <div class="modul">
                                                        <div class="modul_top">
                                                            <div class="modul_top_right">
                                                                <table width="100%" border="0" cellspacing="0" cellpadding="0">
                                                                    <tr>
                                                                        <td width="9">
                                                                        </td>
                                                                        <td class="modul_fd">
                                                                            <table width="100%" border="0" cellspacing="0" cellpadding="0">
                                                                                <tr>
                                                                                    <td class="modul_fd_tit">
                                                                                        EVALUAR PAGOS
                                                                                    </td>
                                                                                </tr>
                                                                            </table>
                                                                        </td>
                                                                        <td width="9">
                                                                        </td>
                                                                    </tr>
                                                                </table>
                                                            </div>
                                                        </div>
                                                        <div class="modul_content">
                                                        </div>
                                                    </div>
                                                </td>
                                            </tr>
                                        </table>
                                    </td>
                                </tr>
                                <tr>
                                    <td class="modul_bordes">
                                        <table width="100%" border="0" cellspacing="0" cellpadding="0" class="caja-datos">
                                            <tr>
                                                <td width="10">
                                                </td>
                                                <td height="10">
                                                </td>
                                                <td>
                                                </td>
                                            </tr>
                                            <tr>
                                                <td width="10" rowspan="3">
                                                </td>
                                                <td align="center" valign="top">
                                                    <div id="printerElement">
                                                        <table id="grid">
                                                            <tr>
                                                                <td>
                                                                </td>
                                                            </tr>
                                                        </table>
                                                    </div>
                                                    <div id="pager">
                                                    </div>
                                                </td>
                                                <td width="10" rowspan="3">
                                                </td>
                                            </tr>
                                        </table>
                                    </td>
                                </tr>
                                <tr>
                                    <td>
                                        <div class="modul_bottom">
                                            <div class="modul_bottom_right">
                                                <div class="modul_borde-bottom">
                                                </div>
                                            </div>
                                        </div>
                                    </td>
                                </tr>
                            </table>
                        </td>
                    </tr>
                </table>
                <!---------------------------------Fin Inicio tabla alternativa-------------------------------->
            </td>
        </tr>
    </table>
    <br />
    <asp:UpdatePanel ID="UpdPanel1" runat="server">
        <ContentTemplate>
            <table width="450" border="0" align="right" cellpadding="0" cellspacing="0">
                <tr>
                    <td align="right">
                        <input id="btnGuardar" type="button" value="Grabar" title="Guardar Registros" class="btn_guardar"
                            onclick="Grabar()" />
                    </td>
                    <td align="right">
                        <input id="btnBorrarFila" type="button" value="Borrar" title="Borrar fila" class="btn_eliminar"
                            onclick="BorrarFila()" />
                    </td>
                    <td align="right">
                        <input id="btnPdf" type="button" value="PDF" class="btn_generar_pdf" onclick="PreVer()" />
                    </td>
                    <td align="right">
                        <input id="btnExcel" type="button" value="Excel" class="btn_excel" onclick="PreExcel()" />
                    </td>
                </tr>
            </table>
        </ContentTemplate>
    </asp:UpdatePanel>
    <br />
</asp:Content>



--------------------------------------------------------------------------------------------------------------------
.cs
--------------------------------------------------------------------------------------------------------------------
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Web.UI;
using System.Web.UI.WebControls;
using Newtonsoft.Json;
using System.Data;
using LeaOperBussinesLayer.BussinesComponents.Cobranza.EvaluarPagos;
using LeaOperBussinesLayer.BussinesComponents.Contabilidad.InforContables;
using LeaOperBussinesLayer.Util;
using LeaseOperWeb.Negocio.Cobranza.EvaluarPagos;
using LeaseOperWeb.Negocio.Comun;
using LeaseOperWeb.Utils;
 
namespace LeaseOperWeb.Paginas.Cobranza.EvaluarPagos
{
    public partial class EvaluadorPagos : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                Session["dtDwDet"] = null;
                Session["dt_old"] = null;
                Session["dt_encabezado"] = null;
                Session["rutCliente"] = null;
                Session["msgDet"] = null;
                Session["msgNec"] = null;
            }
        }
 
        [WebMethod]public static string LoadJqGrid(string operacion, string rut, string tipo, string numFact, string numConsulta, string tipoConsulta, string sinCosto)
        {
            HttpContext.Current.Session["msgDet"] = null;
            HttpContext.Current.Session["msgNec"] = null;
            DataTable dw_det = null, dw_nec = null;
            string msgNec, msgDet;
            try
            {
                new EvaluarPagosWebBc().recupera_detalle_evaluador(Convert.ToDecimal(operacion),
                    Convert.ToInt32(rut), Convert.ToInt16(tipo), Convert.ToDecimal(numFact),
                    Convert.ToInt32(numConsulta),
                    DateTime.Now, tipoConsulta, Convert.ToInt32(sinCosto), out dw_nec, out dw_det, out msgNec,
                    out msgDet);
                HttpContext.Current.Session["dtDwDet"] = dw_det;
                HttpContext.Current.Session["dt_old"] = dw_det;
                HttpContext.Current.Session["dt_encabezado"] = dw_nec;
 
                if (msgNec != "OK")
                {
                    HttpContext.Current.Session["msgNec"] = msgNec;
                }
                if (msgDet != "OK")
                {
                    HttpContext.Current.Session["msgDet"] = msgDet;
                }
 
                string result = JsonConvert.SerializeObject(dw_det).Replace("ö""o");
                return JsonConvert.SerializeObject(result);
            }
            catch (Exception ex)
            {
                dw_det = null;
                string result = JsonConvert.SerializeObject(dw_det).Replace("ö""o");
                return JsonConvert.SerializeObject(result);
            }
        }
 
        [WebMethod]
        public static string LoadHead()
        {
            try
            {
                var dt = (DataTable)HttpContext.Current.Session["dt_encabezado"];
                HttpContext.Current.Session["rutCliente"] = dt.Rows[0]["rut_cliente"];
                return JsonConvert.SerializeObject(dt);
            }
            catch (Exception ex)
            {
                return JsonConvert.SerializeObject("*" + "Se ha perdido la sesión, reingrese al sistema");
            }
        }
 
        [WebMethod]
        public static void ClearSession()
        {
            HttpContext.Current.Session["dtDwDet"] = null;
            HttpContext.Current.Session["dt_old"] = null;
            HttpContext.Current.Session["dt_encabezado"] = null;
            HttpContext.Current.Session["rutCliente"] = null;
            HttpContext.Current.Session["msgDet"] = null;
            HttpContext.Current.Session["msgNec"] = null;
        }
 
 
        [WebMethod]
        public static void DelRow(string correlativoInConsulta, string rowCount)
        {
            var gridRowCount = Convert.ToInt32(rowCount);
            var dt = (DataTable)HttpContext.Current.Session["dtDwDet"];
            for (int i = 0; i <= gridRowCount; i++)
            {
                DataRow dr = dt.Rows[i]; 
                if (dr["corre_cons"].ToString().Trim() == correlativoInConsulta.Trim())
                    dr.Delete();
            }
            dt.AcceptChanges();
            HttpContext.Current.Session["dtDwDet"] = dt;
 
        }
 
        [WebMethod]
        public static void DelRowMassive(string rowId, string rowCount)
        {
            var index = Convert.ToInt32(rowId)-1;
            var gridRowCount = Convert.ToInt32(rowCount)-1;
            if (index >= 0)
            {
                var dt = (DataTable)HttpContext.Current.Session["dtDwDet"];
                for (int i = index; i <= gridRowCount; i++)
                {
                    DataRow dr = dt.Rows[i];
                    if (dr["concepto_norenta"].ToString() == "1")
                        dr.Delete();
                }
                dt.AcceptChanges();
                HttpContext.Current.Session["dtDwDet"] = dt;
            }
        }
 
        [WebMethod]
        public static string RefreshChangeValueCell(string type, string value, string index)
        {
            var msgDet = string.Empty;
            HttpContext.Current.Session["msgDet"] = null;
            DataTable dt_DwDet = nulltry
            {
                switch (type)
                {
                    case "fecha_pago":
                        new EvaluarPagosWebBc().CambioFechaPagoOMontoCancelado(0, "fecha", (DataTable)HttpContext.Current.Session["dtDwDet"], Convert.ToInt32(index), out dt_DwDet, out msgDet);
                        break;
 
                    case "interes_mora_pe":
                        if (value.Trim() == string.Empty)
                            value = "0"new EvaluarPagosWebBc().CambioFechaPagoOMontoCancelado(Convert.ToDecimal(value), "interes_mora_pe", (DataTable)HttpContext.Current.Session["dtDwDet"], Convert.ToInt32(index), out dt_DwDet, out msgDet);
                        break;
 
                    case "gastos_cobranza":
                        if (value.Trim() == string.Empty)
                            value = "0";
                        new EvaluarPagosWebBc().CambioFechaPagoOMontoCancelado(Convert.ToDecimal(value), "gastos_cobranza", (DataTable)HttpContext.Current.Session["dtDwDet"], Convert.ToInt32(index), out dt_DwDet, out msgDet);
                        //Representación del método CargarGastosCobranzaMO existente en evaluador DXpress
                        for (int i = 0; i < dt_DwDet.Rows.Count; i++)
                        {
                            dt_DwDet.Rows[i]["gastos_cobranza_mo"] = (Convert.ToDecimal(dt_DwDet.Rows[i]["gastos_cobranza"]) / Convert.ToDecimal(dt_DwDet.Rows[i]["paridad_fecha_pago"]));
                        }
                        break;
                    case "monto_cancelado"//JC:Este metodo no está en uso en el Evaluador de origen, pero se programa por si en el futuro lo desean habilitar.-
                        new EvaluarPagosWebBc().CambioFechaPagoOMontoCancelado(0, "monto_cancelado", (DataTable)HttpContext.Current.Session["dtDwDet"], Convert.ToInt32(index), out dt_DwDet, out msgDet);
                        break;
                }
 
                if (msgDet != "OK")
                {
                    HttpContext.Current.Session["msgDet"] = msgDet;
                }
 
                HttpContext.Current.Session["dtDwDet"] = dt_DwDet;
                string result = JsonConvert.SerializeObject(dt_DwDet).Replace("ö""o");
                return JsonConvert.SerializeObject(result);
            }
            catch (Exception ex)
            {
                string result = JsonConvert.SerializeObject(ex.Message).Replace("ö""o");
                return JsonConvert.SerializeObject(result);
            }
        }
 
        [WebMethod]
        public static string ReviewMsgDet()
        {
            var msg = HttpContext.Current.Session["msgDet"] ?? "OK";
            string result = JsonConvert.SerializeObject(msg).Replace("ö""o");
            return JsonConvert.SerializeObject(result);
        }
 
        [WebMethod]
        public static string ReviewMsgNec()
        {
            var msg = HttpContext.Current.Session["msgNec"] ?? "OK";
            string result = JsonConvert.SerializeObject(msg).Replace("ö""o");
            return JsonConvert.SerializeObject(result);
        }
 
        [WebMethod]
        public static string ChangeDateOrAmountToPay(string type, string value, string index)
        {
            var msg = "OK";
            var dt = (DataTable)HttpContext.Current.Session["dtDwDet"];
            if (type == "fecha_pago")
            {
                if (value.Trim() == string.Empty)
                {
                    msg = "Fecha Pago no puede estar vacía";
                    return JsonConvert.SerializeObject(msg);
                }
                dt.Rows[Convert.ToInt32(index)]["fecha_pago"] = value;
            }
            else //JC: monto cancelado no está editable, pero se programa por si lo habilitan en el futuro.-
            {
                if (value.Trim() == string.Empty)
                {
                    msg = "Monto cancelado no puede estar vacío";
                    return JsonConvert.SerializeObject(msg);
                }
                dt.Rows[Convert.ToInt32(index)]["monto_cancelado"] = value;
            }
            HttpContext.Current.Session["dtDwDet"] = dt;
            return JsonConvert.SerializeObject(msg);
        }
 
        [WebMethod]
        public static string Save()
        {
            try
            {
                var user = (UserSessionObjectBc)HttpContext.Current.Session["UserSessionObjectBc"];
                string msgDet;
                string msg;
                string result;
                if (user == null)
                {
                    msg = "Se ha perdido la sesión, vuelva a conectarse al sistema.";
                    result = JsonConvert.SerializeObject(msg).Replace("ö""o");
                    return JsonConvert.SerializeObject(result);
                }
 
                DataTable dtDwDetOld = (DataTable)HttpContext.Current.Session["dt_old"];
                string msgNe2, msgNe3;
 
                var rutCliente = Convert.ToInt32(HttpContext.Current.Session["rutCliente"]);
                var dtDwDet = (DataTable)HttpContext.Current.Session["dtDwDet"];
                DataTable dt_DwDet;
 
                new EvaluarPagosWebBc().ValidaYGrabaEvaluoPago(user.CodPersonal, rutCliente, dtDwDet,
                                                               out dt_DwDet,
                                                               out msgDet, ref  dtDwDetOld);
 
                HttpContext.Current.Session["dtDwDet"] = dt_DwDet;
 
                if (msgDet.Contains("OK"))
                    msgDet = "Grabación efectuada OK.";
 
                result = JsonConvert.SerializeObject(msgDet).Replace("ö""o").Replace(@"\""");
                return JsonConvert.SerializeObject(result);
            }
            catch (Exception ex)
            {
                string result = JsonConvert.SerializeObject(ex.Message).Replace("ö""o");
                return JsonConvert.SerializeObject(result);
 
            }
        }
 
        [WebMethod]
        public static string RefreshBeforeSave()
        {
            try
            {
                var dw_det = (DataTable)HttpContext.Current.Session["dtDwDet"];
                string result = JsonConvert.SerializeObject(dw_det).Replace("ö""o");
                return JsonConvert.SerializeObject(result);
            }
            catch (Exception ex)
            {
                string result = JsonConvert.SerializeObject(ex.Message).Replace("ö""o");
                return JsonConvert.SerializeObject(result);
            }
        }
 
        #region Exportación
        [WebMethod]
        public static string ReporteXls(string num_consulta, string hoja)
        {
            string salida = string.Empty;
            DataSet ds = new DataSet();
            try
            {
                ds = new BcEvaluarPagos().EvaluarPago_NumConsulta_Excel(Convert.ToInt32(num_consulta));
 
                if (ds != null && ds.Tables[0].Rows.Count == 0)
                {
                    return JsonConvert.SerializeObject("SD");
                }
                else
                {
                    salida = FuncionesGenericasWebBc.bajarExcel(ds.Tables[0], hoja);
                }
 
            }
            catch (Exception exc)
            {
                salida = "*" + exc.Message.ToString().Replace("'"" ").Replace("\"""").Replace(@"\r""").Replace("\r\n""") + "*";
            }
 
            return JsonConvert.SerializeObject(salida);
        }
 
        [WebMethod]
        public static string DownloadPDF(string num_consulta)
        {
            string filename = string.Empty;
            DataSet ds = new DataSet();
            try
            {
                ds = new BcEvaluarPagos().EvaluarPago_NumConsulta(Convert.ToInt32(num_consulta));
                //ds.WriteXml(@"C:\CR\InformeEvaluarPagos.xml");
 
                DataTable reporte = new CR().RecuperaReporte(325);
                if (reporte != null && reporte.Rows.Count > 0)
                {
                    if (ds != null)
                    {
                        if (ds.Tables.Count == 0 || ds.Tables[0].Rows.Count == 0)
                        {
                            filename = "SD";
                        }
                        else
                        {
                            filename = new FuncionesGenericas().GeneraPdf(ds, reporte);
                        }
                    }
                }
            }
            catch (Exception exc)
            {
                filename = "*" + new Exception(exc.Message.ToString().Replace("'"" ").Replace("\"""").Replace(@"\r""").Replace("\r\n""")) + "*";
            }
            return JsonConvert.SerializeObject(filename);
        }
 
        [WebMethod]
        public static string GetRutaCRError()
        {
            return JsonConvert.SerializeObject(new FuncionesGenericas().MapPathURLCRError());
        }
        [WebMethod]
        public static string GetRutaCargaExcel()
        {
            return JsonConvert.SerializeObject(new FuncionesGenericas().MapPathURLExcelDownLoad());
        }
 
        [WebMethod]
        public static string RecuperaNomDoc(string iddocx)
        {
            int iddoc = Convert.ToInt32(iddocx);
            var dt = new InforContablesBc().RecuperaNomDoc(iddoc);
            return JsonConvert.SerializeObject(dt);
        }
 
        #endregion
    }
}