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
    }
}