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>

miércoles, 4 de octubre de 2017

SQL - Buscar texto en objetos de BD

DECLARE @search VARCHAR(50)
SET @search = 'reemplazo_bien'

SELECT SPECIFIC_CATALOG ,
ROUTINE_NAME ,
ROUTINE_DEFINITION ,
ROUTINE_TYPE ,
CREATED ,
LAST_ALTERED
FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_DEFINITION LIKE '%' + @search + '%'
--AND ROUTINE_TYPE ='PROCEDURE'
ORDER BY ROUTINE_NAME

martes, 26 de septiembre de 2017

C# - JQuery enabled/disabled y evento click

<!--#include file="~/Scripts/jquery.includes.htm"-->
<script type="text/javascript" language="javascript">
.
.
.

 function EventoCheckOrigen() {
            if ($("#chkOrigenPago").is(":checked") === true) {
                $("#chkRutProveedor").prop("checked", false);
                $("#ddlOrigenPago").prop('disabled', false);
                $("#txtRutProveedor").val('');
                $("#txtRutProveedor").prop('disabled', true);
            } else {
                $("#ddlOrigenPago").prop('disabled', true);
                $("#ddlOrigenPago").val('0');
                $("#chkRutProveedor").prop('disabled', false);
                $("#txtRutProveedor").val('');
                $("#txtRutProveedor").prop('disabled', true);
            }
        }

        function EventoCheckRut() {
            if ($("#chkRutProveedor").is(":checked") === true) {
                $("#txtRutProveedor").prop('disabled', false);
                $("#chkOrigenPago").prop("checked", false);
                $("#ddlOrigenPago").val('0');
                $("#ddlOrigenPago").prop('disabled', true);
            } else {

                $("#txtRutProveedor").prop('disabled', true);
                $("#txtRutProveedor").val('');
                $("#chkOrigenPago").prop("checked", false);
                $("#ddlOrigenPago").val('0');
                $("#ddlOrigenPago").prop('disabled', true);
            }
        }
.
.
.


</script>



<html>
.
.
.

    <input type="checkbox" id="chkOrigenPago" name="chkOrigenPago" class="cont_check" onclick="EventoCheckOrigen();" />
                     
  <select id="ddlOrigenPago" style="margin: 1px 1px 2px 2px; font-family: Calibri;
 font-size: 13px; cursor: default; width: 150px; height: 25px;" disabled="disabled">
 <option value="0" selected="selected">Seleccione...</option>
 <option value="1">Doc. Negocio</option>
 <option value="2">Doc. Administrativos</option>
 <option value="4">Anticipos</option>
 <option value="5">Cobertura Importación</option>
 <option value="6">Devoluciones Cliente</option>
 <option value="7">Fogape / Fogain</option>
 </select>

  <input type="checkbox" id="chkRutProveedor" name="chkRutProveedor" class="cont_check" onclick="EventoCheckRut();" />
 <input id="txtRutProveedor" type="text" maxlength="13" class="caja-datos" disabled="disabled" />
.
.
.
</html>

viernes, 25 de agosto de 2017

SQL - Transacciones y errores

USE [leaseoper]
GO

/****** Object:  StoredProcedure [dbo].[pa_lo_sel_bienes_pozo_solicitud_reemplazo]    Script Date: 08/25/2017 17:43:58 ******/
IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[pa_lo_sel_bienes_pozo_solicitud_reemplazo]') AND type in (N'P', N'PC'))
DROP PROCEDURE [dbo].[pa_lo_sel_bienes_pozo_solicitud_reemplazo]
GO

USE [leaseoper]
GO

/****** Object:  StoredProcedure [dbo].[pa_lo_sel_bienes_pozo_solicitud_reemplazo]    Script Date: 08/25/2017 17:43:58 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

/*
-- =============================================
 Author:        Joel Castillo
 Create date: 25-08-2017
 Description: Obtiene bienes que pueden ser reemplazados   
 Ejecución:
            --salta error
            leaseoper..pa_lo_sel_bienes_pozo_solicitud_reemplazo 17
            --trae bienes
            leaseoper..pa_lo_sel_bienes_pozo_solicitud_reemplazo 333

 Utilizado en: /Paginas/AdmContratos/ReemplazoBienPorGarantia/SolicitudReemplazoBien.aspx
-- =============================================
*/
CREATE PROCEDURE [dbo].[pa_lo_sel_bienes_pozo_solicitud_reemplazo]
@operacion NUMERIC(20,0)
AS
BEGIN

BEGIN TRANSACTION
BEGIN TRY
----------------------------------------------
--VARIABLES
----------------------------------------------
DECLARE @estado_operacion TINYINT
       ,@msg_error VARCHAR(MAX)


----------------------------------------------
--VALIDACIONES
----------------------------------------------

SELECT @estado_operacion = ISNULL(estado_operacion,99)
FROM leaseoper..t_contratos
WHERE operacion = @operacion

IF(@estado_operacion NOT IN (1,2))
BEGIN 
--CAE AL CATCH
 RAISERROR('Operación debe estar Vigente...',16,1)
END

----------------------------------------------
--SALIDA
----------------------------------------------

SELECT d.cod_material
      ,d.num_material
      ,d.descripcion
      ,d.rut_proveedor
      ,d.num_factura
      ,d.fecha_compra_mat
      ,d.valor_libro_inicial_mat
      ,d.cod_est_mat
      ,d.cod_rubro
      ,d.cod_rubro_especifico
      ,(SELECT ISNULL(r.descripcion,'')
       FROM leasecom..p_rubros_especificos r
       WHERE r.cod_rubro = d.cod_rubro AND r.cod_rubro_especifico = d.cod_rubro_especifico) AS descripcion_rubro      
FROM  leaseoper..t_bienes_detalle d
WHERE operacion = @operacion


COMMIT TRANSACTION
END TRY
BEGIN CATCH
    ROLLBACK TRANSACTION
--RESCATA ERROR Y LO MUESTRA
    SET @msg_error = (SELECT CONVERT(varchar(max), ERROR_MESSAGE()))
     RAISERROR (@msg_error,16,1)
     RETURN
END CATCH
   
END

GO



miércoles, 23 de agosto de 2017

SQL - Insertar columna en tabla.-

USE leaseoper
GO

SELECT * FROM  leaseoper..t_correccion_estado_pago


/* Para evitar posibles problemas de pérdida de datos, debe revisar este script detalladamente antes de ejecutarlo fuera del contexto del diseñador de base de datos.*/
BEGIN TRANSACTION
SET QUOTED_IDENTIFIER ON
SET ARITHABORT ON
SET NUMERIC_ROUNDABORT OFF
SET CONCAT_NULL_YIELDS_NULL ON
SET ANSI_NULLS ON
SET ANSI_PADDING ON
SET ANSI_WARNINGS ON
COMMIT
BEGIN TRANSACTION
GO
CREATE TABLE dbo.Tmp_t_correccion_estado_pago
                (
                periodo int NOT NULL,
                fecha_proceso smalldatetime NOT NULL,
                operacion numeric(20, 0) NOT NULL,
                origen_docto tinyint NULL, --CAMPO NUEVO
                id_documento int NOT NULL,
                fecha_compra smalldatetime NULL,
                factor_rev float(53) NOT NULL,
                monto_total_documento float(53) NOT NULL,
                mto_reval_ejercicio float(53) NULL,
                mto_reval_total float(53) NULL,
                fecha_ingreso datetime NULL,
                estado tinyint NULL
                )  ON [PRIMARY]
GO
ALTER TABLE dbo.Tmp_t_correccion_estado_pago SET (LOCK_ESCALATION = TABLE)
GO
GRANT DELETE ON dbo.Tmp_t_correccion_estado_pago TO Usuarios  AS dbo
GO
GRANT INSERT ON dbo.Tmp_t_correccion_estado_pago TO Usuarios  AS dbo
GO
GRANT SELECT ON dbo.Tmp_t_correccion_estado_pago TO Usuarios  AS dbo
GO
GRANT UPDATE ON dbo.Tmp_t_correccion_estado_pago TO Usuarios  AS dbo
GO
IF EXISTS(SELECT * FROM dbo.t_correccion_estado_pago)
                EXEC('INSERT INTO dbo.Tmp_t_correccion_estado_pago (periodo, fecha_proceso, operacion, id_documento, fecha_compra, factor_rev, monto_total_documento, mto_reval_ejercicio, mto_reval_total, fecha_ingreso, estado)
                               SELECT periodo, fecha_proceso, operacion, id_documento, fecha_compra, factor_rev, monto_total_documento, mto_reval_ejercicio, mto_reval_total, fecha_ingreso, estado FROM dbo.t_correccion_estado_pago WITH (HOLDLOCK TABLOCKX)')
GO
DROP TABLE dbo.t_correccion_estado_pago
GO
EXECUTE sp_rename N'dbo.Tmp_t_correccion_estado_pago', N't_correccion_estado_pago', 'OBJECT'
GO
ALTER TABLE dbo.t_correccion_estado_pago ADD CONSTRAINT
                pk_t_correccion_estado_pago PRIMARY KEY CLUSTERED
                (
                periodo,
                id_documento
                ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]

GO
COMMIT
--Compruebo el cambio
IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[t_correccion_estado_pago]') AND type in (N'U'))
SELECT * FROM  leaseoper..t_correccion_estado_pago



viernes, 11 de agosto de 2017

C# - Obtener el número menor de un arreglo

private int ObtenerMenorValor(int[] arrCorrelativo)
        {
            int rest = arrCorrelativo[0]; //resultado
            for (int n = 1; n < arrCorrelativo.Length; n++)
            {
                if (arrCorrelativo[n] < rest)
                {
                    rest = arrCorrelativo[n];
                }
            }

            return rest;
        }

//Llenado y declaracion del array 
 var arrCorrelativo = new int[gv.VisibleRowCount]; //inicializa el arreglo con el numero de datos en grilla
            for (int i = 0; i < gv.VisibleRowCount; ++i)
            {
                arrCorrelativo[i] = Convert.ToInt32(gv.GetRowValues(i, "correlativo_pago"));
            }



  var correlativoMasAntiguo = ObtenerMenorValor(arrCorrelativo);

viernes, 4 de agosto de 2017

C# - Obtener el máximo número (entity)

//previamente la tabla (con su respectiva PRIMARY KEY) debe estar incluida en el MODELO.


 private int NewCodJuzgado()
        {
            var newId = 0;
            using (var context = new leaOperModel())
            {
                newId = context.p_juzgados.Select(p => p.cod_juzgado).Max() + 1;
            }
            return newId;
        }

lunes, 31 de julio de 2017

viernes, 28 de julio de 2017

SQL - Ciclo While resumido en reemplazo de un cursor

DECLARE @contador INT
    SET @contador = 1
    WHILE (@contador <= 5)
    BEGIN
    PRINT CONVERT(VARCHAR(100),@contador)
    SET @contador = @contador + 1
    END
   

miércoles, 26 de julio de 2017

C# - enabled y seteo de valores a nivel de cliente.-

 <html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server"> 

    <script type="text/javascript" language="javascript">


 function EventoCheckPago(s, e) {
            var isTrue = s.GetValue();
            if (isTrue == true) {
                dteFechaPago.SetEnabled(true); 

                chkOrigenPago.SetChecked(false);
                ddlOrigenPago.SetValue(null);
                ddlOrigenPago.SetEnabled(false);

                chkRutProveedor.SetChecked(false);
                txtRutProveedor.SetValue("");
                txtRutProveedor.SetEnabled(false);
            } else {
                dteFechaPago.SetEnabled(false);
                dteFechaPago.SetValue(null);

                chkOrigenPago.SetChecked(false);
                ddlOrigenPago.SetValue(null);
                ddlOrigenPago.SetEnabled(false);

                chkRutProveedor.SetChecked(false);
                txtRutProveedor.SetValue("");
                txtRutProveedor.SetEnabled(false);
            }
        }

  </script>

</head>
<body>

</body>

 </html>

jueves, 13 de julio de 2017

C# - Devexpress Valor de una celda editable en grilla sea obligatorio


.ASPX
<dx:ASPxGridView ID="gvParent" runat="server" AutoGenerateColumns="False" Width="100%"
                        ClientInstanceName="gvParent" CssFilePath="~/App_Themes/DevEx/{0}/styles.css"
                        CssPostfix="DevEx" DataSourceID="odsParent" KeyFieldName="ID_COMPROMISO">
                        <Settings ShowFilterRow="true" />
                        <SettingsPager PageSize="25">
                        </SettingsPager>
                        <Columns>
                            <dx:GridViewCommandColumn Width="50px" ButtonType="Image" CellStyle-Font-Size="9px"
                                VisibleIndex="0" Caption=" ">
                                <EditButton Text="Editar" Image-Url="../../images/layer_edit.png" Visible="true">
                                    <Image Url="../../images/layer_edit.png">
                                    </Image>
                                </EditButton>
                                <CancelButton Text="Cancelar" Image-Url="../../images/cancelar.png" Visible="true">
                                    <Image Url="../../images/cancelar.png">
                                    </Image>
                                </CancelButton>
                                <UpdateButton Text="Grabar" Image-Url="../../images/save.png" Visible="false">
                                    <Image Url="../../images/save.png">
                                    </Image>
                                </UpdateButton>
                                <DeleteButton Text="true" Image-Url="../../images/map_remove.png" Visible="False">
                                    <Image Url="../../images/map_remove.png">
                                    </Image>
                                </DeleteButton>
                                <ClearFilterButton Visible="True" Image-Url="../../images/broom-icon.png">
                                    <Image Url="../../images/broom-icon.png">
                                    </Image>
                                </ClearFilterButton>
                                <CellStyle Font-Size="9px">
                                </CellStyle>
                            </dx:GridViewCommandColumn>
                            <dx:GridViewDataTextColumn FieldName="ID_COMPROMISO" VisibleIndex="3" Visible="False"
                                Caption="ID_COMPROMISO">
                            </dx:GridViewDataTextColumn>
                            <dx:GridViewDataComboBoxColumn Caption="MINUTA ASOCIADA" FieldName="ID_MINUTA" ToolTip="Para Ingresar Minutas vea --> Gestion Proyectos> Minutas"
                                VisibleIndex="2">
                                <PropertiesComboBox DataSourceID="odsMinuta" ValueField="ID_MINUTA" TextField="NOMBRE_MINUTA"
                                    IncrementalFilteringMode="StartsWith" Spacing="0">
                                </PropertiesComboBox>
                            </dx:GridViewDataComboBoxColumn>
                              <dx:GridViewDataMemoColumn FieldName="DESCRIPCION_COMPROMISO" VisibleIndex="2" ReadOnly="False"
                                Caption="COMPROMISO">
                                <PropertiesMemoEdit MaxLength="1000" Height="80px">
                                </PropertiesMemoEdit>
                            </dx:GridViewDataMemoColumn>
                            <dx:GridViewDataDateColumn FieldName="FECHA_INICIO_COMPROMISO" ShowInCustomizationForm="True"
                                VisibleIndex="3" Width="100px" Caption="FECHA INICIO COMP." HeaderStyle-HorizontalAlign="Center"
                                CellStyle-HorizontalAlign="Center">
                                <EditFormSettings Visible="True" />
                                <PropertiesDateEdit DisplayFormatString="dd/MM/yyyy">
                                </PropertiesDateEdit>
                                <HeaderStyle Wrap="False" />
                                <CellStyle Wrap="False">
                                </CellStyle>
                            </dx:GridViewDataDateColumn>
                            <dx:GridViewDataDateColumn FieldName="FECHA_COMPROMETIDA_COMPROMISO" ShowInCustomizationForm="True"
                                VisibleIndex="4" Width="100px" Caption="FECHA COMPROMETIDA COMP." HeaderStyle-HorizontalAlign="Center"
                                CellStyle-HorizontalAlign="Center">
                                <EditFormSettings Visible="True" />
                                <PropertiesDateEdit DisplayFormatString="dd/MM/yyyy">
                                </PropertiesDateEdit>
                                <HeaderStyle Wrap="False" />
                                <CellStyle Wrap="False">
                                </CellStyle>
                            </dx:GridViewDataDateColumn>
                            <dx:GridViewDataDateColumn FieldName="FECHA_REAL_TERMINO_COMPROMISO" ShowInCustomizationForm="True"
                                VisibleIndex="5" Width="100px" Caption="FECHA REAL TÉRMINO COMP." HeaderStyle-HorizontalAlign="Center"
                                CellStyle-HorizontalAlign="Center">
                                <EditFormSettings Visible="True" />
                                <PropertiesDateEdit DisplayFormatString="dd/MM/yyyy">
                                </PropertiesDateEdit>
                                <HeaderStyle Wrap="False" />
                                <CellStyle Wrap="False">
                                </CellStyle>
                            </dx:GridViewDataDateColumn>
                            <dx:GridViewDataMemoColumn FieldName="TIPO_COMPROMISO" VisibleIndex="7" ReadOnly="False"
                                Caption="TIPO COMPROMISO">
                                <PropertiesMemoEdit MaxLength="50" Height="80px">
                                </PropertiesMemoEdit>
                            </dx:GridViewDataMemoColumn>
                            <dx:GridViewDataComboBoxColumn FieldName="ESTADO" VisibleIndex="8">
                                <PropertiesComboBox ValueType="System.String" IncrementalFilteringMode="StartsWith"
                                    Spacing="0">
                                    <Items>
                                        <dx:ListEditItem Text="ACTIVO" Value="1" />
                                        <dx:ListEditItem Text="INACTIVO" Value="0" />
                                    </Items>
                                </PropertiesComboBox>
                            </dx:GridViewDataComboBoxColumn>
                        </Columns>
                        <SettingsBehavior AllowFocusedRow="true" />
                        <Images SpriteCssFilePath="~/App_Themes/DevEx/{0}/sprite.css">
                            <LoadingPanelOnStatusBar Url="~/App_Themes/DevEx/GridView/StatusBarLoading.gif">
                            </LoadingPanelOnStatusBar>
                            <LoadingPanel Url="~/App_Themes/Styles/img/icons/loading.gif">
                            </LoadingPanel>
                        </Images>
                        <ImagesFilterControl>
                            <LoadingPanel Url="~/App_Themes/Styles/img/icons/loading.gif">
                            </LoadingPanel>
                        </ImagesFilterControl>
                        <Styles CssPostfix="DevEx" CssFilePath="~/App_Themes/DevEx/{0}/styles.css">
                            <Header ImageSpacing="5px" SortingImageSpacing="5px">
                            </Header>
                            <LoadingPanel ImageSpacing="5px">
                            </LoadingPanel>
                        </Styles>
                        <StylesEditors ButtonEditCellSpacing="0">
                            <ProgressBar Height="21px">
                            </ProgressBar>
                        </StylesEditors>
                    </dx:ASPxGridView>



.CS 

  protected void Page_Init(object sender, EventArgs e)
        {
            gvParent.InitNewRow += gvParent_InitNewRow;
            gvParent.CustomCallback += GvParentCustomCallback;
            gvParent.RowValidating += GvParentRowValidating;
            gvParent.RowInserting += gvParent_RowInserting;
            gvParent.RowUpdating += gvParent_RowUpdating;
            gvParent.ParseValue += gvParent_ParseValue;
            gvParent.CustomErrorText += gvParent_CustomErrorText;

            odsMinuta.Selecting += odsMinuta_Selecting;

        }







 void GvParentRowValidating(object sender, DevExpress.Web.Data.ASPxDataValidationEventArgs e)
        {
            foreach (GridViewColumn column in gvParent.Columns)
            {
                var dataColumn = column as GridViewDataColumn;
                if (dataColumn == null) continue;
                switch (dataColumn.FieldName)
                {
                    case "ID_MINUTA":
                        if (e.NewValues["ID_MINUTA"] == null)
                        {
                            e.Errors[dataColumn] = "Campo requerido";
                        }
                        break;
                    case "DESCRIPCION_COMPROMISO":
                        if (e.NewValues["DESCRIPCION_COMPROMISO"] == null)
                        {
                            e.Errors[dataColumn] = "Campo requerido";
                        }
                        break;
                    case "FECHA_INICIO_COMPROMISO":
                        if (e.NewValues["FECHA_INICIO_COMPROMISO"] == null)
                        {
                            e.Errors[dataColumn] = "Campo requerido";
                        }
                        break;
                    case "FECHA_COMPROMETIDA_COMPROMISO":
                        if (e.NewValues["FECHA_COMPROMETIDA_COMPROMISO"] == null)
                        {
                            e.Errors[dataColumn] = "Campo requerido";
                        }
                        break;
                    case "TIPO_COMPROMISO":
                        if (e.NewValues["TIPO_COMPROMISO"] == null)
                        {
                            e.Errors[dataColumn] = "Campo requerido";
                        }
                        break;
                    case "ESTADO":
                        if (e.NewValues["ESTADO"] == null)
                        {
                            e.Errors[dataColumn] = "Campo requerido";
                        }
                        break;
                }
            }
        }

miércoles, 12 de julio de 2017

C# - BRANCHES para mantener distintas versiones de un mismo proyecto.-


Team Explorer > MiProyecto > Source Control
Mi Proyecto > Branche

Selecciono el proyecto que será enlazado.-


Y eligo el target.-

Para realizar MERGE, mismo procedimiento, pero seleccionando opcion MERGE.-