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

lunes, 22 de enero de 2018

C# - Crear directorio en el servidor

using System.Web.Hosting; 

public void CreaDirectorioCR()
        {
            /*Si no existe la ruta la crea*/
            var directorioConfirma = HostingEnvironment.MapPath("/") + "DbDocuments/CR/";
            bool exists = System.IO.Directory.Exists(directorioConfirma);

            if (!exists)
                System.IO.Directory.CreateDirectory(directorioConfirma);
        }

miércoles, 29 de noviembre de 2017

C# - JQuery Carga Pagina con evento jutils ajax

Al tener un sitio Jquery publicado en IIS con un evento jutils.ajax que cargue al principio, se puede dar el siguiente error:


Esto ocurre porque la libreria jutils.ajax va a buscar el método con la URL de la página, url que de momento no encuentra, por este motivo vamos a forzar el llamado del metodo pasandole la URL, de forma dinámica:


De esta forma , la aplicación sabe si ir al Post forzado, o al Post normal






Acá el codigo para ser copiado:
  function loadComboEmpresas() {
            try {
                var id = "0";
                var wsparams = "{'a':'" + id + "'}";

                var url = window.location.href;
                if (url.indexOf('Paginas') > 0) {
                    jutils.ajax.loadCombo('SelEmpresas', wsparams, 'cmbEmpresas', 'cod_empresa', 'rut_completo');
                } else {
                    jutils.ajax.loadCombo('Paginas/GenDatosContri.aspx/SelEmpresas', wsparams, 'cmbEmpresas', 'cod_empresa', 'rut_completo');
                }
            } catch (e) {
                showMessage(e.message);
            }
        }
ACTUALIZACIÓN: Si la pagina tiene mas de un metodo AJAX, tal vez convenga recargar la url directamente en el navegador -->
  <script type="text/javascript">
        $(document).ready(function () {
            var url = window.location.href;
            if (url.indexOf('Paginas') > 0) {
            } else {
                var urlDinamica = url + "Paginas/GenDatosContri.aspx";
                window.location.replace(urlDinamica);
            }
            defineGrid();
            loadComboEmpresas();
        });
.......

martes, 21 de noviembre de 2017

C# - Leer contenido de una página externa desde .NET

-------------------------------------------------------------
Usando la dll --> HtmlAgilityPack.dll
-------------------------------------------------------------

Hay varias recetas y métodos  en internet para leer y descargar sitios web y poder manipularlos desde .NET, por lo que pude leer el sitio sin problemas, sin embargo la información que realmente necesitaba estaba contenida en la página dentro de un IFRAME que se carga en ejecución.

A través del "inspecionar" de Google Chrome llegué al nombre del IFRAME, sin embargo no podía acceder al contenido porque la llamada era "POST" y no por URL por ende no tenia la menor idea de cuales eran los paramétros necesarios para activar el iframe, gracias a un amigo que también es informático Sebastián Coppia (https://doreancl.blogspot.cl/) pude llegar a los parámetros del método, otra vez con Google Chrome, acá muestro como:







-----------------------------------------------------------------------------------------------------------
El resto es historia conocida:
-----------------------------------------------------------------------------------------------------------

using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Linq;
using System.Net;
using System.Text.RegularExpressions;
using System.Web;
using Contribuciones.Paginas;
using HtmlAgilityPack;

namespace Contribuciones.Utils
{
    public class Respuesta
    {
        public Exception Error = null;
        public string ErrMsg = string.Empty;
        public List<DetalleEnvio> lstDetalleEnvios;
    }

    public struct DetalleEnvio
    {
        public string EstadoEnvio;
        public string Fecha;
        public string Oficina;
    }

    public class ConsultaCorreosChile
    {
        /// <summary>
        /// ObtieneDetalleEnviosCorreo Trae el listado de Detalle de Envio de correo
        /// </summary>
        /// <param name="numEnvio"></param>
        /// <returns></returns>
        public static Respuesta ObtieneDetalleEnviosCorreo(string numEnvio)
        {
            Respuesta respuesta = new Respuesta();

            try
            {
                ConsultaCorreosChile consultaCorreosChile = new ConsultaCorreosChile();
                string html = consultaCorreosChile.ConnectCorreosChile(numEnvio);

                HtmlDocument doc = new HtmlDocument();
                doc.LoadHtml(html);

                List<DetalleEnvio> lstDetalleEnvios = consultaCorreosChile.GetEstadoEnvio(doc);
                respuesta.lstDetalleEnvios = lstDetalleEnvios;
            }
            catch (Exception ex)
            {
                respuesta.ErrMsg = ex.Message;
                respuesta.Error = ex;
            }
            return respuesta;
        }

        /// <summary>
        ///ConnectCorreosChile Extrae informacion desde Iframe de Correos de Chile
        /// </summary>
        /// <param name="numEnvio">Nº de Envío a consultar</param>
        /// <returns></returns>
        private string ConnectCorreosChile(string numEnvio)
        {
            var data = new NameValueCollection();
            data["obj_key"] = "Cor398-cc";
            data["obj_env"] = numEnvio.Trim();

            var wb = new WebClient();
            wb.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
            string url = "http://seguimientoweb.correos.cl/ConEnvCorreos.aspx";

            var bytes = wb.UploadValues(url, "POST", data);

            var response = System.Text.UTF8Encoding.UTF8.GetString(bytes);
            string decodeResponse = HttpUtility.UrlDecode(response, System.Text.Encoding.Default);

            string replacement = Regex.Replace(decodeResponse, @"\t|\n|\r|", "");

            replacement = replacement.Replace(@"\", "");
            return replacement;

        }

        /// <summary>
        /// GetEstadoEnvio Obtiene a traves de desgloce de html los estados y llena la clase y listado.-
        /// </summary>
        /// <param name="doc"></param>
        /// <returns></returns>
        private List<DetalleEnvio> GetEstadoEnvio(HtmlDocument doc)
        {
            List<DetalleEnvio> lstEstados = new List<DetalleEnvio>();

            if (doc.DocumentNode.SelectSingleNode("//text()[contains(., 'ESTADO DEL ENVIO')]") != null)
            {
                HtmlDocument estados = new HtmlDocument();

                estados.LoadHtml(doc.DocumentNode.SelectNodes("//table[@class='tracking']")[0].OuterHtml);

                for (int i = 1; i < estados.DocumentNode.SelectNodes(".//tr").Count; i++) // i=1 --> para que no tome los encabezados
                {
                    HtmlNode rowVigente = estados.DocumentNode.SelectNodes(".//tr")[i];
                    DetalleEnvio detalle = new DetalleEnvio();

                    detalle.EstadoEnvio = rowVigente.SelectNodes(".//td")[0].InnerText.Replace("&nbsp;","").Trim();
                    detalle.Fecha = rowVigente.SelectNodes(".//td")[1].InnerText.Trim().Replace("&nbsp;", "").Trim();
                    detalle.Oficina = rowVigente.SelectNodes(".//td")[2].InnerText.Trim().Replace("&nbsp;", "").Trim();

                    lstEstados.Add(detalle);
                }
            }
            return lstEstados;
        }
    }
}



-----------------------------------------------------------------------------------------------------------
Y dejo por aca el contenido del Iframe para que se hagan una idea de como lo recorro
para obtener los datos:
-----------------------------------------------------------------------------------------------------------
<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>
CorreosChile - Seguimiento de Envios
</title><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /><link rel="stylesheet" href="Style/Style.css" type="text/css" /></head>
<body>
   <body>
        <form method="post" action="ConEnvCorreos.aspx" id="form1">
<div class="aspNetHidden">
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUJNTE2MzM1NDU1ZGRn1MgG5Rx6zmHY/xWZIJPQFvCOWaDouApFBzTic8IDSw==" />
</div>

<div class="aspNetHidden">

<input type="hidden" name="__VIEWSTATEGENERATOR" id="__VIEWSTATEGENERATOR" value="DF4A8937" />
</div>
   
 

<div id="pnlEnvio">

 
    <div id="Panel_Entrega">

        <font class="titulo">Datos de la entrega</font>
        <br>
        <br>
        <table class="datosgenerales">
            <tr height="30px">
                <td width="95px"  class="generalTitulo">&nbsp;&nbsp;Envio</td>
                <td width="200px" bgcolor="#F8F8F8"    >&nbsp;&nbsp;1170115050593&nbsp;</td>
                <td width="95px"  class="generalTitulo">&nbsp;&nbsp;Entregado a</td>
                <td bgcolor="#F8F8F8"                  >&nbsp;&nbsp;&nbsp;</td>
            </tr>
            <tr height="30px">
                <td width="95px"  class="generalTitulo">&nbsp;&nbsp;Fecha Entrega</td>
                <td width="200px" bgcolor="#F8F8F8"    >&nbsp;&nbsp;26/07/2017 13:25&nbsp;</td>
                <td width="95px"  class="generalTitulo">&nbsp;&nbsp;Rut</td>
                <td bgcolor="#F8F8F8"                  >&nbsp;&nbsp;&nbsp;</td>
            </tr>
            </table>
     
</div>
     
         
   
    <br />
       
     
<br>     
<font class="titulo">Numero de envio: 1170115050593</font>&nbsp;<font class="texto_seguimiento" style="color:Red"></font>
<br />
<font class="texto_seguimiento2">

</font>
    &nbsp;<br>

     
    <br> 
    <table class="tracking">
        <tr height="30px">
            <th                     >ESTADO DEL ENVIO</th>
            <th >FECHA  </th>
            <th >OFICINA</th>
        </tr>                     
     
        <tr height="30px">
            <td>&nbsp;&nbsp;ENVIO ENTREGADO                                 &nbsp;</td>
            <td align='center'>26/07/2017 13:25    &nbsp;</td>
            <td >&nbsp;&nbsp;SANTIAGO CDP 01                        &nbsp;</td>
        </tr>   
     
        <tr class="impar" height="40px">
            <td>&nbsp;&nbsp;ENVIO EN REPARTO              &nbsp;</td>
            <td align='center'>26/07/2017 8:31 &nbsp;</td>
            <td >&nbsp;&nbsp;SANTIAGO CDP 01                    &nbsp;</td>
        </tr>
     
        <tr height="30px">
            <td>&nbsp;&nbsp;RECIBIDO EN OFICINA DE CORREOSCHILE                                 &nbsp;</td>
            <td align='center'>26/07/2017 8:26    &nbsp;</td>
            <td >&nbsp;&nbsp;SANTIAGO CDP 01                        &nbsp;</td>
        </tr>   
     
        <tr class="impar" height="40px">
            <td>&nbsp;&nbsp;DESPACHADO A OFICINA DE CORREOSCHILE              &nbsp;</td>
            <td align='center'>26/07/2017 3:25 &nbsp;</td>
            <td >&nbsp;&nbsp;CEN CENTRO TECNOLOGICO POSTAL                    &nbsp;</td>
        </tr>
     
        <tr height="30px">
            <td>&nbsp;&nbsp;EN OFICINA DE TRANSITO                                 &nbsp;</td>
            <td align='center'>14/07/2017 9:30    &nbsp;</td>
            <td >&nbsp;&nbsp;CEN CENTRO TECNOLOGICO POSTAL                        &nbsp;</td>
        </tr>   
     
        <tr class="impar" height="40px">
            <td>&nbsp;&nbsp;RECIBIDO EN OFICINA DE CORREOSCHILE              &nbsp;</td>
            <td align='center'>14/07/2017 9:30 &nbsp;</td>
            <td >&nbsp;&nbsp;CEN CENTRO TECNOLOGICO POSTAL                    &nbsp;</td>
        </tr>
     
        <tr height="30px">
            <td>&nbsp;&nbsp;DESPACHADO A OFICINA DE CORREOSCHILE                                 &nbsp;</td>
            <td align='center'>13/07/2017 23:05    &nbsp;</td>
            <td >&nbsp;&nbsp;PLANTA LA SERENA                        &nbsp;</td>
        </tr>   
     
        <tr class="impar" height="40px">
            <td>&nbsp;&nbsp;DESPACHADO A OFICINA DE CORREOSCHILE              &nbsp;</td>
            <td align='center'>13/07/2017 18:41 &nbsp;</td>
            <td >&nbsp;&nbsp;COQUIMBO CDP 01                    &nbsp;</td>
        </tr>
     
        <tr height="30px">
            <td>&nbsp;&nbsp;SE HA REALIZADO PRIMER INTENTO DE ENTREGA. SE DEJO AVISO                                 &nbsp;</td>
            <td align='center'>24/05/2017 15:46    &nbsp;</td>
            <td >&nbsp;&nbsp;COQUIMBO CDP 01                        &nbsp;</td>
        </tr>   
     
        <tr class="impar" height="40px">
            <td>&nbsp;&nbsp;ENVIO EN REPARTO              &nbsp;</td>
            <td align='center'>23/05/2017 8:59 &nbsp;</td>
            <td >&nbsp;&nbsp;COQUIMBO CDP 01                    &nbsp;</td>
        </tr>
     
        <tr height="30px">
            <td>&nbsp;&nbsp;RECIBIDO EN OFICINA DE CORREOSCHILE                                 &nbsp;</td>
            <td align='center'>23/05/2017 7:37    &nbsp;</td>
            <td >&nbsp;&nbsp;COQUIMBO CDP 01                        &nbsp;</td>
        </tr>   
     
        <tr class="impar" height="40px">
            <td>&nbsp;&nbsp;DESPACHADO A OFICINA DE CORREOSCHILE              &nbsp;</td>
            <td align='center'>23/05/2017 4:46 &nbsp;</td>
            <td >&nbsp;&nbsp;PLANTA LA SERENA                    &nbsp;</td>
        </tr>
     
        <tr height="30px">
            <td>&nbsp;&nbsp;DESPACHADO A OFICINA DE CORREOSCHILE                                 &nbsp;</td>
            <td align='center'>20/05/2017 16:17    &nbsp;</td>
            <td >&nbsp;&nbsp;CEN CENTRO TECNOLOGICO POSTAL                        &nbsp;</td>
        </tr>   
     
        <tr class="impar" height="40px">
            <td>&nbsp;&nbsp;EN OFICINA DE TRANSITO              &nbsp;</td>
            <td align='center'>19/05/2017 0:23 &nbsp;</td>
            <td >&nbsp;&nbsp;CEN CENTRO TECNOLOGICO POSTAL                    &nbsp;</td>
        </tr>
     
        <tr height="30px">
            <td>&nbsp;&nbsp;RECIBIDO EN OFICINA DE CORREOSCHILE                                 &nbsp;</td>
            <td align='center'>19/05/2017 0:23    &nbsp;</td>
            <td >&nbsp;&nbsp;CEN CENTRO TECNOLOGICO POSTAL                        &nbsp;</td>
        </tr>   
     
        <tr class="impar" height="40px">
            <td>&nbsp;&nbsp;DESPACHADO A OFICINA DE CORREOSCHILE              &nbsp;</td>
            <td align='center'>18/05/2017 19:04 &nbsp;</td>
            <td >&nbsp;&nbsp;SUCURSAL MONEDA                    &nbsp;</td>
        </tr>
     
        <tr height="30px">
            <td>&nbsp;&nbsp;RECIBIDO POR CORREOSCHILE                                 &nbsp;</td>
            <td align='center'>18/05/2017 11:16    &nbsp;</td>
            <td >&nbsp;&nbsp;SUCURSAL MONEDA                        &nbsp;</td>
        </tr>   
     
    </table>

 
</div> 
</form>
</body>
</body>
</html>