From 256aa032dca515272694f90d6cf5a866a1920df7 Mon Sep 17 00:00:00 2001 From: Vanesa Rimada <80859025+vrimada@users.noreply.github.com> Date: Mon, 27 Apr 2026 10:48:05 -0300 Subject: [PATCH 01/37] =?UTF-8?q?-=20Validar=20en=20la=20edici=C3=B3n=20el?= =?UTF-8?q?=20ingreso=20de=20username=20existente.=20=20-=20en=20la=20list?= =?UTF-8?q?a=20de=20usuario=20que=20aparezcan=20los=20perfiles=20de=20su?= =?UTF-8?q?=20efector=20-=20=E2=80=A2=20Agregar=20en=20la=20auditoria=20el?= =?UTF-8?q?=20registro=20de=20fecha=20y=20hora=20en=20que=20el=20usuario?= =?UTF-8?q?=20acepta=20los=20t=C3=A9rminos=20y=20condiciones=20-poner=20el?= =?UTF-8?q?=20buscador=20de=20efector,=20perfil=20con=20tipeo=20como=20en?= =?UTF-8?q?=20la=20vinculaci=C3=B3n=20de=20efectores=20-Ocultar=20campo=20?= =?UTF-8?q?contrase=C3=B1a=20en=20la=20edici=C3=B3n=20de=20usuarios=20-Ocu?= =?UTF-8?q?ltar=20bot=C3=B3n=20Auditoria=20en=20el=20alta=20de=20usuario?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- WebLab/Usuarios/UsuarioEdit.aspx.cs | 20 +++++++++++++++----- WebLab/Usuarios/UsuarioList.aspx.cs | 6 ++++-- 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/WebLab/Usuarios/UsuarioEdit.aspx.cs b/WebLab/Usuarios/UsuarioEdit.aspx.cs index 83c732a3..9ab1a98c 100644 --- a/WebLab/Usuarios/UsuarioEdit.aspx.cs +++ b/WebLab/Usuarios/UsuarioEdit.aspx.cs @@ -49,7 +49,10 @@ protected void Page_Load(object sender, EventArgs e) if (Request["id"] != null) MostrarDatos(); else + { MostrarEfectores(); + btnAuditoria.Visible = false; + } } else Response.Redirect("../FinSesion.aspx", false); @@ -109,6 +112,7 @@ private void MostrarDatos() txtUsername.Text = oRegistro.Username; chkRequiereContrasenia.Checked = oRegistro.RequiereCambioPass; txtPassword.Enabled = false; + txtPassword.Visible = false; chkActivo.Checked = oRegistro.Activo; ddlPerfil.SelectedValue = oRegistro.IdPerfil.IdPerfil.ToString(); //ddlEfector.SelectedValue = oRegistro.IdEfector.IdEfector.ToString(); @@ -388,7 +392,7 @@ private DataTable GetDataSetAuditoria() { string m_strSQL = ""; - string m_strCondicion = ""; + //string m_strCondicion = ""; SqlConnection conn = (SqlConnection)NHibernateHttpModule.CurrentSession.Connection; SqlDataAdapter adapter = new SqlDataAdapter(); @@ -400,9 +404,15 @@ private DataTable GetDataSetAuditoria() m_strSQL = @" SELECT A.username AS numero, P.apellido as username, A.fecha AS fecha, A.hora, A.accion, '' as analisis, '' as valor, '' as valorAnterior - FROM LAB_Auditoriausuario AS A (nolock) - inner join sys_usuario P (nolock) on P.idusuario= A.idusuarioregistro - where A.idusuario= " + Request["id"].ToString() + @" ORDER BY A.idAuditoriausuario"; + FROM LAB_Auditoriausuario AS A (nolock) + inner join sys_usuario P (nolock) on P.idusuario= A.idusuarioregistro + where A.idusuario= " + Request["id"].ToString() + + @" union + SELECT P.username AS numero, P.apellido as username, L.fecha AS fecha, + Format(L.fecha, 'hh:mm:ss') as hora, 'Acepto Terminos y Condiciones', '' as analisis, '' as valor, '' as valorAnterior + FROM LAB_LogAccesoTerminosCondiciones AS L (nolock) + inner join sys_usuario P (nolock) on P.idusuario= L.idUsuario + where P.idusuario=" + Request["id"].ToString() + " ORDER BY fecha"; DataSet Ds1 = new DataSet(); adapter.SelectCommand = new SqlCommand(m_strSQL, conn); @@ -435,7 +445,7 @@ protected void btnBlanquear_Click(object sender, EventArgs e) protected void customValidacionGeneral_ServerValidate(object source, ServerValidateEventArgs args) { - if (Request["id"] == null) // alta + //if (Request["id"] == null) // Validar tambien en modificacion { Usuario oRegistro = new Usuario(); diff --git a/WebLab/Usuarios/UsuarioList.aspx.cs b/WebLab/Usuarios/UsuarioList.aspx.cs index 1ca5239f..f85d9415 100644 --- a/WebLab/Usuarios/UsuarioList.aspx.cs +++ b/WebLab/Usuarios/UsuarioList.aspx.cs @@ -118,9 +118,11 @@ private void CargarListas() oUtil.CargarCombo(ddlEfector, m_ssql, "idEfector", "nombre"); if (nivelcentral) - ddlEfector.Items.Insert(0, new ListItem("Todos", "0")); + ddlEfector.Items.Insert(0, new ListItem("--Seleccione un efector--", "0")); - m_ssql = @"SELECT idPerfil, nombre FROM Sys_Perfil with (nolock) ORDER BY nombre"; + m_ssql = @"SELECT idPerfil, nombre FROM Sys_Perfil with (nolock) + where idperfil in (select idperfil from Sys_Usuario where activo=1 and + idefector=" + oUser.IdEfector.IdEfector.ToString() +" ) ORDER BY nombre"; oUtil.CargarCombo(ddlPerfil, m_ssql, "idPerfil", "nombre"); ddlPerfil.Items.Insert(0, new ListItem("Todos", "0")); From e576c239386e7cf4f1dd073a91f703a03a43bf56 Mon Sep 17 00:00:00 2001 From: Vanesa Rimada <80859025+vrimada@users.noreply.github.com> Date: Mon, 27 Apr 2026 11:21:13 -0300 Subject: [PATCH 02/37] Reporte de audtoria de usuarios --- WebLab/Informes/AuditoriaUser.cs | 209 ++++++++++++++++++++++++++++ WebLab/Informes/AuditoriaUser.rpt | Bin 0 -> 16384 bytes WebLab/Usuarios/UsuarioEdit.aspx.cs | 9 +- WebLab/WebLab.csproj | 18 +-- 4 files changed, 225 insertions(+), 11 deletions(-) create mode 100644 WebLab/Informes/AuditoriaUser.cs create mode 100644 WebLab/Informes/AuditoriaUser.rpt diff --git a/WebLab/Informes/AuditoriaUser.cs b/WebLab/Informes/AuditoriaUser.cs new file mode 100644 index 00000000..6c76b2f6 --- /dev/null +++ b/WebLab/Informes/AuditoriaUser.cs @@ -0,0 +1,209 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace WebLab.Informes { + using System; + using System.ComponentModel; + using CrystalDecisions.Shared; + using CrystalDecisions.ReportSource; + using CrystalDecisions.CrystalReports.Engine; + + + public class AuditoriaUser : ReportClass { + + public AuditoriaUser() { + } + + public override string ResourceName { + get { + return "AuditoriaUser.rpt"; + } + set { + // Do nothing + } + } + + public override bool NewGenerator { + get { + return true; + } + set { + // Do nothing + } + } + + public override string FullResourceName { + get { + return "WebLab.Informes.AuditoriaUser.rpt"; + } + set { + // Do nothing + } + } + + [Browsable(false)] + [DesignerSerializationVisibilityAttribute(System.ComponentModel.DesignerSerializationVisibility.Hidden)] + public CrystalDecisions.CrystalReports.Engine.Section Section1 { + get { + return this.ReportDefinition.Sections[0]; + } + } + + [Browsable(false)] + [DesignerSerializationVisibilityAttribute(System.ComponentModel.DesignerSerializationVisibility.Hidden)] + public CrystalDecisions.CrystalReports.Engine.Section Section2 { + get { + return this.ReportDefinition.Sections[1]; + } + } + + [Browsable(false)] + [DesignerSerializationVisibilityAttribute(System.ComponentModel.DesignerSerializationVisibility.Hidden)] + public CrystalDecisions.CrystalReports.Engine.Section GroupHeaderSection1 { + get { + return this.ReportDefinition.Sections[2]; + } + } + + [Browsable(false)] + [DesignerSerializationVisibilityAttribute(System.ComponentModel.DesignerSerializationVisibility.Hidden)] + public CrystalDecisions.CrystalReports.Engine.Section GroupHeaderSection2 { + get { + return this.ReportDefinition.Sections[3]; + } + } + + [Browsable(false)] + [DesignerSerializationVisibilityAttribute(System.ComponentModel.DesignerSerializationVisibility.Hidden)] + public CrystalDecisions.CrystalReports.Engine.Section Section3 { + get { + return this.ReportDefinition.Sections[4]; + } + } + + [Browsable(false)] + [DesignerSerializationVisibilityAttribute(System.ComponentModel.DesignerSerializationVisibility.Hidden)] + public CrystalDecisions.CrystalReports.Engine.Section GroupFooterSection2 { + get { + return this.ReportDefinition.Sections[5]; + } + } + + [Browsable(false)] + [DesignerSerializationVisibilityAttribute(System.ComponentModel.DesignerSerializationVisibility.Hidden)] + public CrystalDecisions.CrystalReports.Engine.Section GroupFooterSection1 { + get { + return this.ReportDefinition.Sections[6]; + } + } + + [Browsable(false)] + [DesignerSerializationVisibilityAttribute(System.ComponentModel.DesignerSerializationVisibility.Hidden)] + public CrystalDecisions.CrystalReports.Engine.Section Section4 { + get { + return this.ReportDefinition.Sections[7]; + } + } + + [Browsable(false)] + [DesignerSerializationVisibilityAttribute(System.ComponentModel.DesignerSerializationVisibility.Hidden)] + public CrystalDecisions.CrystalReports.Engine.Section Section5 { + get { + return this.ReportDefinition.Sections[8]; + } + } + + [Browsable(false)] + [DesignerSerializationVisibilityAttribute(System.ComponentModel.DesignerSerializationVisibility.Hidden)] + public CrystalDecisions.Shared.IParameterField Parameter_encabezado1 { + get { + return this.DataDefinition.ParameterFields[0]; + } + } + + [Browsable(false)] + [DesignerSerializationVisibilityAttribute(System.ComponentModel.DesignerSerializationVisibility.Hidden)] + public CrystalDecisions.Shared.IParameterField Parameter_encabezado2 { + get { + return this.DataDefinition.ParameterFields[1]; + } + } + + [Browsable(false)] + [DesignerSerializationVisibilityAttribute(System.ComponentModel.DesignerSerializationVisibility.Hidden)] + public CrystalDecisions.Shared.IParameterField Parameter_encabezado3 { + get { + return this.DataDefinition.ParameterFields[2]; + } + } + } + + [System.Drawing.ToolboxBitmapAttribute(typeof(CrystalDecisions.Shared.ExportOptions), "report.bmp")] + public class CachedAuditoriaUser : Component, ICachedReport { + + public CachedAuditoriaUser() { + } + + [Browsable(false)] + [DesignerSerializationVisibilityAttribute(System.ComponentModel.DesignerSerializationVisibility.Hidden)] + public virtual bool IsCacheable { + get { + return true; + } + set { + // + } + } + + [Browsable(false)] + [DesignerSerializationVisibilityAttribute(System.ComponentModel.DesignerSerializationVisibility.Hidden)] + public virtual bool ShareDBLogonInfo { + get { + return false; + } + set { + // + } + } + + [Browsable(false)] + [DesignerSerializationVisibilityAttribute(System.ComponentModel.DesignerSerializationVisibility.Hidden)] + public virtual System.TimeSpan CacheTimeOut { + get { + return CachedReportConstants.DEFAULT_TIMEOUT; + } + set { + // + } + } + + public virtual CrystalDecisions.CrystalReports.Engine.ReportDocument CreateReport() { + AuditoriaUser rpt = new AuditoriaUser(); + rpt.Site = this.Site; + return rpt; + } + + public virtual string GetCustomizedCacheKey(RequestContext request) { + String key = null; + // // The following is the code used to generate the default + // // cache key for caching report jobs in the ASP.NET Cache. + // // Feel free to modify this code to suit your needs. + // // Returning key == null causes the default cache key to + // // be generated. + // + // key = RequestContext.BuildCompleteCacheKey( + // request, + // null, // sReportFilename + // this.GetType(), + // this.ShareDBLogonInfo ); + return key; + } + } +} diff --git a/WebLab/Informes/AuditoriaUser.rpt b/WebLab/Informes/AuditoriaUser.rpt new file mode 100644 index 0000000000000000000000000000000000000000..21035155ffd9f4666cbcc0763c36e666bc824cab GIT binary patch literal 16384 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 literal 0 HcmV?d00001 diff --git a/WebLab/Usuarios/UsuarioEdit.aspx.cs b/WebLab/Usuarios/UsuarioEdit.aspx.cs index 9ab1a98c..c2cb5539 100644 --- a/WebLab/Usuarios/UsuarioEdit.aspx.cs +++ b/WebLab/Usuarios/UsuarioEdit.aspx.cs @@ -365,7 +365,7 @@ protected void btnAuditoria_Click(object sender, EventArgs e) encabezado3.Value = "Auditoria de Usuario"; - oCr.Report.FileName = "../Informes/AuditoriaProtocolo.rpt"; + oCr.Report.FileName = "../Informes/AuditoriaUser.rpt"; oCr.ReportDocument.SetDataSource(dtAuditoria); oCr.ReportDocument.ParameterFields[0].CurrentValues.Add(encabezado1); oCr.ReportDocument.ParameterFields[1].CurrentValues.Add(encabezado2); @@ -403,12 +403,15 @@ private DataTable GetDataSetAuditoria() //} - m_strSQL = @" SELECT A.username AS numero, P.apellido as username, A.fecha AS fecha, A.hora, A.accion, '' as analisis, '' as valor, '' as valorAnterior + m_strSQL = @" SELECT P.username + ' - '+ P.apellido + ' ' + P.nombre as numero , + P.apellido as username, A.fecha AS fecha, A.hora, A.accion, + '' as analisis, '' as valor, '' as valorAnterior FROM LAB_Auditoriausuario AS A (nolock) inner join sys_usuario P (nolock) on P.idusuario= A.idusuarioregistro where A.idusuario= " + Request["id"].ToString() + @" union - SELECT P.username AS numero, P.apellido as username, L.fecha AS fecha, + SELECT P.username + ' - '+ P.apellido + ' ' + P.nombre as numero , + P.apellido as username, L.fecha AS fecha, Format(L.fecha, 'hh:mm:ss') as hora, 'Acepto Terminos y Condiciones', '' as analisis, '' as valor, '' as valorAnterior FROM LAB_LogAccesoTerminosCondiciones AS L (nolock) inner join sys_usuario P (nolock) on P.idusuario= L.idUsuario diff --git a/WebLab/WebLab.csproj b/WebLab/WebLab.csproj index f06aebe9..bf73074e 100644 --- a/WebLab/WebLab.csproj +++ b/WebLab/WebLab.csproj @@ -2124,7 +2124,6 @@ - @@ -4854,13 +4853,6 @@ ResultadoDefault.aspx - - ResultadosaSisa.aspx - ASPXCodeBehind - - - ResultadosaSisa.aspx - SinDatos.aspx ASPXCodeBehind @@ -4902,6 +4894,12 @@ Component True + + AuditoriaUser.rpt + True + Component + True + True True @@ -6809,6 +6807,10 @@ CrystalDecisions.VSDesigner.CodeGen.ReportCodeGenerator AuditoriaLote.cs + + CrystalDecisions.VSDesigner.CodeGen.ReportCodeGenerator + AuditoriaUser.cs + CrystalDecisions.VSDesigner.CodeGen.ReportCodeGenerator AuditoriaProtocolo.cs From ee91db6a47a6eea541051b668edc5d3be8bea0d3 Mon Sep 17 00:00:00 2001 From: Vanesa Rimada <80859025+vrimada@users.noreply.github.com> Date: Mon, 27 Apr 2026 12:24:53 -0300 Subject: [PATCH 03/37] =?UTF-8?q?Parametrizacion=20de=20aceptaci=C3=B3n=20?= =?UTF-8?q?de=20condiciones=20en=20cada=20ingreso?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- WebLab/loginSIL.ascx.cs | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/WebLab/loginSIL.ascx.cs b/WebLab/loginSIL.ascx.cs index 90f1de21..de5727dc 100644 --- a/WebLab/loginSIL.ascx.cs +++ b/WebLab/loginSIL.ascx.cs @@ -380,6 +380,13 @@ private void CrearLogAcceso(Usuario oUser) private bool MostrarTerminosCondiciones(Usuario oUser) { + /* + PARAMETRIZACION: + Cantidad X de dias + > 0 --> Muestra "Terminos y Condiciones" dado X dias + == 0 --> Muestra Siempre "Terminos y Condiciones" + < 0 --> NO muestra "Terminos y Condiciones" + */ int dias = Convert.ToInt32(ConfigurationManager.AppSettings["DiasTerminosCondiciones"]); if(dias > 0) { @@ -396,8 +403,8 @@ private bool MostrarTerminosCondiciones(Usuario oUser) } else { - // ScriptManager.RegisterStartupScript(this, this.GetType(), "error", "alert('❌ No hay dias definidos para los terminos y condiciones');", true); - return true; + if(dias == 0) return true; + else return false; } From 293c77a5916edc35b7d4882d49dd438fca72234d Mon Sep 17 00:00:00 2001 From: Vanesa Rimada <80859025+vrimada@users.noreply.github.com> Date: Mon, 27 Apr 2026 15:25:06 -0300 Subject: [PATCH 04/37] fix:auditoria de usuario --- Business/Data/Laboratorio/AuditoriaUsuario.cs | 30 +++++++- .../Data/Laboratorio/AuditoriaUsuario.hbm.xml | 3 +- Business/Data/Usuario.cs | 5 +- WebLab/Informes/AuditoriaUser.rpt | Bin 16384 -> 16384 bytes WebLab/Usuarios/UsuarioEdit.aspx.cs | 71 +++++++++++++++++- 5 files changed, 102 insertions(+), 7 deletions(-) diff --git a/Business/Data/Laboratorio/AuditoriaUsuario.cs b/Business/Data/Laboratorio/AuditoriaUsuario.cs index 9ee61111..6db54fd9 100644 --- a/Business/Data/Laboratorio/AuditoriaUsuario.cs +++ b/Business/Data/Laboratorio/AuditoriaUsuario.cs @@ -24,7 +24,9 @@ public sealed class AuditoriaUsuario : Business.BaseDataAccess private string m_accion; private string m_username; - private int m_idusuarioregistro; + private int m_idusuarioregistro; + private string m_valorNuevo; + private string m_valorAnterior; #endregion #region Default ( Empty ) Class Constuctor @@ -193,7 +195,29 @@ public bool IsChanged { get { return m_isChanged; } } - - #endregion + public string ValorNuevo + { + get { return m_valorNuevo; } + set + { + if (value != null && value.Length > 50) + throw new ArgumentOutOfRangeException("Invalid value for Valor Nuevo", value, value.ToString()); + + m_isChanged |= (m_valorNuevo != value); m_valorNuevo = value; + } + } + + public string ValorAnterior + { + get { return m_valorAnterior; } + set + { + if (value != null && value.Length > 50) + throw new ArgumentOutOfRangeException("Invalid value for Valor Anterior", value, value.ToString()); + + m_isChanged |= (m_valorAnterior != value); m_valorAnterior = value; + } + } + #endregion } } diff --git a/Business/Data/Laboratorio/AuditoriaUsuario.hbm.xml b/Business/Data/Laboratorio/AuditoriaUsuario.hbm.xml index c14ac5fb..86bb5b49 100644 --- a/Business/Data/Laboratorio/AuditoriaUsuario.hbm.xml +++ b/Business/Data/Laboratorio/AuditoriaUsuario.hbm.xml @@ -12,6 +12,7 @@ - + + diff --git a/Business/Data/Usuario.cs b/Business/Data/Usuario.cs index 1982d0a8..0f3ef633 100644 --- a/Business/Data/Usuario.cs +++ b/Business/Data/Usuario.cs @@ -225,8 +225,9 @@ public string Nombre m_isChanged |= (m_nombre != value); m_nombre = value; } } + - public void GrabaAuditoria(string accion, int iduser, string username) + public void GrabaAuditoria(string accion, int iduser, string username, string valorAnterior="", string valorNuevo="") { AuditoriaUsuario oRegistro = new AuditoriaUsuario(); oRegistro.IdUsuario = iduser; // usuario afectado que esta modificando, consultando , etc. @@ -236,6 +237,8 @@ public void GrabaAuditoria(string accion, int iduser, string username) oRegistro.Hora = DateTime.Now.ToLongTimeString(); oRegistro.IdUsuarioRegistro = this.IdUsuario; //usuario que realiza la accion + oRegistro.ValorAnterior = valorAnterior; + oRegistro.ValorNuevo = valorNuevo; oRegistro.Save(); diff --git a/WebLab/Informes/AuditoriaUser.rpt b/WebLab/Informes/AuditoriaUser.rpt index 21035155ffd9f4666cbcc0763c36e666bc824cab..1dd0a55c09ad643cd6fde0f0a8f3fdf4002f4fb7 100644 GIT binary patch delta 7346 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 Yu@oQbbgGfHx=w+F_p?zlUjd>t3|SsV)Bpeg delta 7253 zcmV-b9IE4hfB}Gj0kCWY1pt$y08o>01cw1dv-t!+1SvQGH~;_u002M$006*o(dPsK z002M$0000000000002M$006*+pa4*lVF|T=;-o(RdwvD+7n4fSqOSetreV(iU~dov z=Wf6V76=h|)B`RcB#aGcwdxk#5A>$ueW@qX6;c#G)=b}QGrSsqS^lb+XY^k&>x*o}Y zF3r>`C&c`b-2-eh9BWMHv(Y4A>x)A?9MzYpx=!%U#o~$~_pv5RQJ5;P$h(NVzK=Jl zxpsVrz6=MWEVNG0ahG`4!H3(g)js@YBsyd-GAskxq&r z9|Y;Gnb)#=2F*K$*7}014V5?KCp6Z7rHw;Xv(+`$$;X_mBAQuK?f98X^!mG+BtAU0 z&l5brXK$~uc1K+r7I1Kw_}`8IfC|{J&nnl^rAzY@#8*6oi1`m-_uxo)dEb|d$ZYiv zi^5y3s-v#ynK%}mN?6Fk9eJ3#Wwq*RZIT{OIo~#Z8|6RmJ0%QYzmVFkHmFm7)(Xh4 z9IU-e8{2_aU2sSP3N}3MXNALI?MVD>ArLOXX@0~G_;GR*v1E1OvO5EQ{>M1bT^p%e z8N2ARcj$XR^B9fiNh3ua%&4E`oQ)#$-~*biV6Mj;@uROXT@4HW2s3nZshP zIkhKe1i(9NL*t6udMkFt(4Z)PqV35^E3eb`&nPZKA;FJ3GY8ts7b~!?)v3blB87^E zZv(drb_&C?RO$*M$ZsVVfB+pW&A&m>6mcYdx~ zIbD#&((l};ByHl;^||Iylyrw)whVYik#?L!rmKS6iBtXL_K)bp>YCPnRuzVUWV#Y? zrePfnI7At681ac*=U7xAUu)y71X`>=fa{Mr&8omnQViV9B;6*Fd?6A3i%>Lctd)5R1M#kW- zfy`*m^B9tU41=RNDARo!i$V{NFlqVHLFDRBRd49KE_v7Q`DZ85|A!+VhwD)I;@`g*yq?4=<>)6Pt`wW0$peR<$+&*zg>%J>sX7lISF8|pq?9T8YfuD?^)Q%Scd zG7bZWfwD6Y>7;Of4Ti1p(t`B}ikg_uH?j0UqDFq2irSP|wqz7Y3jFCpb@Dq_Sg;xX?mVfMZfL)9;o^FvXwkV4HT;)wW-yaI z?xRTNpvU@vpXh!yfJ9GUgsxK-ew$pyE1tJ2DpL*xXwg3-NqSeeDs&$fMJc+HUnw7T+mt)cO#l4jnpr=>&&6{vL^-U zhf;2YaQ$Vsgg>F~vmLO-z|?aPg|~~BwalN&KBpp{|J=nQthrRIhjR$Np1HnzAkzJ%lUX7&=~gRBj8clq3+vt^#1f*Ql#}6e4{#M!`u}clU@-ToG2mpIPM)1v_JzQ1B0{&b zI9SKK8iZs5)YqEA_*y{|1U{*&p;muW=?wvwXuGX{l|lK^Ps=2h+1Xm1O6-A?ieFmwszE-+gvX_h8@zoshLu|1#Mv`VV_P91)x&{ zRG1L=*F=~97z7r_EDHtwxOxp-UNN57}%P(~OE&C&~g`O(NO=jaP z)XfTwibmMF^XcAFbUc(hC{E$f-7KGZE$9XI@9@`dCG6kS3j-<`%T#^F*!h)2ksP9S zzfLWacWDm@6RbO-E40?FMyWlFt%y$E_nJw6hWH!mP6_PE8X9j}YJ=UFA6a?PloUng z^r7Q6;OR0mOsf4Ss6Z{XH%NeMYME=9xk-vkGRcmU-yUS#qmLW5aM?ZTtUb8aK^S@* zJ-w?d=xTf*XR{}rFX-xn-0urQSj>h$`UE@igfGgO5{j1s*V?|5ul*B|UFspjN3pOV>`(gM0TeXo({!hM8EVgG-`e;XVZ>0aW=N|4McuoDPVCRcM<<`Cg5)=&|BJaneC z?Y*Sb>i@k4(wK_7&WJshPh~AC&=16n)1FFakwz_@+l&Gp3F~4uS^J--<*p>5Mxr)z zM^AL2#8{mKPUXs3wR`%tr5zN(%#SqCXOxag7_FXWSwmw$myNrh4`hQzVhigkBmCeF`0ZlMk zLgxtyLnSke*~r6y;Yzya?SYcKfayw{Fi5-w4$X_ml0f^er1%5T+_Hf2?rLS)2H-=P zlD$9Hk@S@aDqiXdYq1}h$u|R48#SKLZJ-*>Iw^O zMYH)H7Xg2Tkos0hb0lYgSb`8{ejJVe{W>%NrnJD_*3)51#}rhro^?z4 zfx&yyX8EDOV3ET6czhSX3f@*HG#Remi91)8X>q!O9L<5V=K@4$bw!_gUch)eFY3Rq zz~g^&7ym8fke4o=?9Ye%wQ|GB4UtOvYRk%u6uLfda^YMU%OxPYO*9UmQG=mSo#U5* zk1i0=7=Z&{hP~EU3cT4wuD9`TZ?DjuhpKf3zFDld;*m-EiWdiF(_wp1GfGfbmy%E= z=yYId+76-c`G=1{IcDwtLzmjDOSxAGitY-vOjQAcgtb(t)SO-LJthxV>J7AQ-RNe6lorNN}|x7|Ffd(H=%z{ z8y7>5XxI?sA>s|}#Au4AXe&g+zlBd_%egqbkbDpG(bT$Q=}a*ic`fRob>&@4GJCEo zb_Oxkz!X<0H_U6?AmLo|3;??L+<_KYg4YTk*KpC}q^&cm0s&~44&FxBYE7k1?~V~4 z3QIc&H*L`6%?0$VghRVGT+lZ$KKOsq2{U4>O3Q4B*29s0LD$bykk}kP&l;(QYmieI z{s~rU?eD;OlH}GWUb}?z!g_fn6u{!$6KG^;Cvu&Ntg&Ks;Mky4UJ+<3WV`$Kb|(61U5EQ149UOt&X>x5(bUVvtBJD zc(X@5R2KBrm&7TE@-2*rCYh1kI8KhP*TaC*|)xB4i z{QFv{=3FV%RE)f&=th5-!SwMSC}S`O9}Ru(6dn5l;I`OJOqQRq#7HGpx%W#v}-WE#WwgotK{iw)k*;yr<)B7_|wy0Y*!A9l3)*e~5GasFp-66?i3 zK8PZ2WRiwdGx9~CNvNJi%lP*ra!ep4}H}2X}>XULhGJzcsEkFc;K1NvFy5K z(Q&m>zi_f8`1m?)Nbmau>9agx8m7?eIVD84+&W=#RF5q^L$2~O7_ivlhEod81ETo* z#1+_)Tuo%6Fui0rX1u|n0UZ%B*D3zJ5gnH1gelt;%t!oxPVkR3 z#YldTDd~Tk1*+ZAb8^^>aI3~^$|dgS^OH%kIdFrBfI4mJi7d><#*heS-iui&A1(52weB+3Q-y*|?jEvC5c z8Kp#Jnq|yj_IP^`Rfz#Ea?0;kU>V`;_+Go0gNJ{Y;S{&C!_j4|T~sAqE0aI0EAAJu zSYT0YHBwO?^xpKs>aBoO=bWH*=#SP`Xh*b2HopETC4+v=NCn+^UQpRFF`=o>p@d0e zq~AD(;>0aeGSRR<;=+=_u%_Hkz<3jqGWue-*0GMDrm;LKi$21BC$a@oQ%#z%Af`Q9IHy$RiICu>;o#aCrE4O9!DY3zo5p`FGH##IA^_ z?sxgon$J)fft^TVo^DjX$Zh3N@(>7sFC!v1U{il0tg!(h7z_gw zd)hJ=Cv3zRmJ#1DwFpN2dQ79Fymc!56=S})C;CM8VQ=MluQ(X7{?83V)A5MPJ6>zC zZLJnpo2{$@oq9AGPK(M80j?m%MC1K+`a-JzPK|%om*j43-NCXGK`gJ#!Wxtjs`z$hKHB}|(P}qy zOp(;BwG`bIx@nK^qxdv82&$txQfSVH9Fwit52oV|ILw-`N5S5M@@D*dD$2cF4q=g| z+PUpJ-U$s7gugh?WqQlMS4iwbUF4ckIToWGfnmF!oK55NHZo~68LbR}6Uu*~KV7G^ z-;_Eie?2bTPo?mUi=5fbr;>-S;FX=$oRDq!7Un`~qpi(?XY9*c`9A1yylW&?^Tq_B zfEl31?KSJ*r;0SG;oF02^pYhRyr;Z28I{oTB#|Gb3cc0>hEYm#lf z;$7oDg`Z$gcsu{rXv9Q1FX(?l>F?KH- zhizs|&p#}z)5Fk}ZS7>AB@D=rOm^oB9B)*SfmD5p8MsPXm&t&nvwRcXr|)+fn-|mn zcsDS+=!EysokNyn`0grk7L(^-glQTw^dG#N8QkpnkJ+&#x#vHBV_ttIY_@!4q(^kl zFpe9D{VTG`{&;wQJTTjmj&s$Y+CZQ~=@?m_-mF6cj7bApF!7=qe?z8A=LJiwz*Zj? zBWfZ@>BUwac&OHTA8>Xc5ca0fI6U`A7ub`AWhe9<%B{0+%1gH-fv6f8^K*Fci(cO4 z0cNJCeN94oDW!pNZ76?g1=ceztZ)+|wXx?vgKK&twM)tzy0%x|LNkcvn*Q-o5j{b8 z%{faOP<ARjoWD<9*;mhH#4+Y(0C@h6!HSaZ^d*$+ILXVhf;acj&5ji+f zj$I#8P+rH4g^>=oEFLi=YGm~+i$v_reU|s_7o~_bxRif;wTy)cveg7S=9Z~HfBWQe z$!AIDH6bnWT5K-i&6vvKAN9H{v`GjR{e@5oy!DYVWzWmVc2?&p0m2GjOm{6~;dL3A znG7$=*6Hv0XOP$t-W0C0ZkGSv4L)oG3mSrhfCim z=8sjs2wi_SE|!1M_I@GV@U@LoYBY$koPE}Sn+p2#T#6esi&^pdZCDV!ynj30t#*xx zq!W>e(=Mhjq#~43alzXdNkVuwM=RW>GlDzdnBlWGn+iLx)3VbsOyuzzSA7|-_?MX^ z7oJU#*q09*&gp|e2s9}p6V2$?3AHCykIuk93rBy*1=Q&2fS?xFWQ(w)?I@`Rdd1bgI+&898LmajZ5k_wsg7IhlI zFXxGew3W9L72*kR<#8#SpU#^>n1&l@%y-LP?5LPD4qjLvGNjneTBg$i(*n4e!ZA(v z+gljd7GwP&;T?MfXUfGh=}UQ-kcw|mSGIqnlN;;hfp6UxWr|dZO3Rordqn~n*EKc- zSxI~!O<%-B!w6DH0_8Y^fu$gf)&j>^k(b#jEm0|*u(%& z=547(`3)k^yI$eV7lwG!;xaPH67#~VEZZk=^c@(CkE11U-o+%>qeyuVCFbG(Q*3{C z#DUsW(b{(ctix(>HEJNRDBMr!clo141;LWS1{0Ks~?vp7*&@bGLuOywje zLwUL0)E`DyZRHOn+<$oYBOG9@4U>Q1xi<$z{Yf>5jqG{s0=nvpI-kJ#Z}~a;LVZ!- z8ZVHJ?lR=$QK5%I6p#b^3Ne&$caVM4L`5gwo8izmZ}JGwO2Z_Q5ilXy!g)5HqF18L zf{oyIV;F%uFHM>~XHjP?byN=7_A@9TU|&e{vj+EbJdwy>>}3i`GFK#*^WJ}_V~`X? zQE#2q`$+fPuMA_J#QS9QT7yo8Ng9)Qr zxoPq{~B&$h{l-qw`g-vvP-I;R=K+;C2l)N6DcB^e%^(*T@=vL#l$)cAd1&O{AL4# z4t_?EI(=%!?9;oGV$inahvu7Z5S&urV+%EjrKGLp;hX8cXwQpNleB+UEx$hOw(B|j z&k6dX6-e%{i2y~!j6~j*-5|fW03sXG>hV2}3&d18cPn?t|HC)IWMK3m6|b|lrDpA`2j5v$Ly!I|NhGF9FfJ`e zTyYl@(n%UFS@IKtbv7w+!VVXQ&f`I8TB=^k@81{SLHIL5n%bVmWSCvfE3u*n#u+W} j%rjW|_NX=F9?%PX?J-rsl9N9bz=L~Fvw=Fh0irYv=iVC( diff --git a/WebLab/Usuarios/UsuarioEdit.aspx.cs b/WebLab/Usuarios/UsuarioEdit.aspx.cs index c2cb5539..37f333a6 100644 --- a/WebLab/Usuarios/UsuarioEdit.aspx.cs +++ b/WebLab/Usuarios/UsuarioEdit.aspx.cs @@ -187,9 +187,13 @@ private void Guardar(Usuario oRegistro) { string accion = "Crea"; if (Request["id"] != null) //oRegistro nunca es null + { accion = "Modifica"; + guardarAuditoria(oRegistro); + } + Perfil oPerfil = new Perfil(); oPerfil = (Perfil)oPerfil.Get(typeof(Perfil), int.Parse(ddlPerfil.SelectedValue)); @@ -405,7 +409,7 @@ private DataTable GetDataSetAuditoria() m_strSQL = @" SELECT P.username + ' - '+ P.apellido + ' ' + P.nombre as numero , P.apellido as username, A.fecha AS fecha, A.hora, A.accion, - '' as analisis, '' as valor, '' as valorAnterior + '' as analisis, isnull(valorNuevo,'') as valor, isnull(valorAnterior,'') as valorAnterior FROM LAB_Auditoriausuario AS A (nolock) inner join sys_usuario P (nolock) on P.idusuario= A.idusuarioregistro where A.idusuario= " + Request["id"].ToString() @@ -456,7 +460,9 @@ protected void customValidacionGeneral_ServerValidate(object source, ServerValid oRegistro = (Usuario)oRegistro.Get(typeof(Usuario), "Username", txtUsername.Text.Trim()); if (oRegistro != null) { - args.IsValid = false; + if (Request["id"] != null) + if (oRegistro.IdUsuario != int.Parse(Request["id"])) //que no compare el username del que estoy modificando + args.IsValid = false; return; @@ -597,6 +603,67 @@ protected void customValidatorEfector_ServerValidate(object source, ServerValida } } + private void guardarAuditoria(Usuario oRegistro) + { + Usuario oAuditor = new Usuario(); + oAuditor = (Usuario)oAuditor.Get(typeof(Usuario), int.Parse(Session["idUsuario"].ToString())); + + int idUsuario = oRegistro.IdUsuario; + if (oRegistro.Nombre != txtNombre.Text) + oAuditor.GrabaAuditoria("Modifica Nombre", idUsuario, oRegistro.Username, oRegistro.Nombre, txtNombre.Text); + + if (oRegistro.Apellido != txtApellido.Text) + oAuditor.GrabaAuditoria("Modifica Apellido", idUsuario, oRegistro.Username, oRegistro.Apellido, txtApellido.Text); + + if (oRegistro.FirmaValidacion != txtFirmaValidacion.Text) + oAuditor.GrabaAuditoria("Modifica Firma Validacion", idUsuario, oRegistro.Username, oRegistro.FirmaValidacion, txtFirmaValidacion.Text); + + if (oRegistro.Email != email.Value.ToString()) + oAuditor.GrabaAuditoria("Modifica Email", idUsuario, oRegistro.Username, oRegistro.Email, email.Value); + + if (oRegistro.Telefono != txtTelefono.Text) + oAuditor.GrabaAuditoria("Modifica Telefono", idUsuario, oRegistro.Username, oRegistro.Telefono, txtTelefono.Text); + + if (oRegistro.TipoAutenticacion.Trim() != ddlTipoAutenticacion.SelectedValue) + oAuditor.GrabaAuditoria("Modifica Tipo Autenticacion", idUsuario, oRegistro.Username, oRegistro.TipoAutenticacion, ddlTipoAutenticacion.SelectedValue); + + if (oRegistro.Username != txtUsername.Text) + oAuditor.GrabaAuditoria("Modifica Username", idUsuario, oRegistro.Username, oRegistro.Username, txtUsername.Text); + + if (oRegistro.Administrador != chkAdministrador.Checked) + oAuditor.GrabaAuditoria("Modifica Administrador", idUsuario, oRegistro.Username, oRegistro.Administrador ? "Si" : "No", chkAdministrador.Checked ? "Si" : "No"); + + if (oRegistro.IdArea.ToString() != ddlArea.SelectedValue) + { + string nombreArea = ""; + if (oRegistro.IdArea != 0) + { + Area oArea = new Area(); + oArea = (Area)oArea.Get(typeof(Area), oRegistro.IdArea); + nombreArea = oArea.Nombre; + } + else nombreArea = "Todas"; + + oAuditor.GrabaAuditoria("Modifica Area", idUsuario, oRegistro.Username, nombreArea, ddlArea.SelectedItem.Text); + } + + if (oRegistro.IdPerfil.IdPerfil.ToString() != ddlPerfil.SelectedValue) + oAuditor.GrabaAuditoria("Modifica Perfil", idUsuario, oRegistro.Username, oRegistro.IdPerfil.Nombre, ddlPerfil.SelectedItem.Text); + + if (ddlEfectorDestino.SelectedValue != "" && oRegistro.IdEfectorDestino.IdEfector.ToString() != ddlEfectorDestino.SelectedValue) + oAuditor.GrabaAuditoria("Modifica Laboratorio Destino", idUsuario, oRegistro.Username, oRegistro.IdEfectorDestino.Nombre, ddlEfectorDestino.SelectedItem.Text); + + if (oRegistro.Activo != chkActivo.Checked) + oAuditor.GrabaAuditoria("Modifica Activo", idUsuario, oRegistro.Username, oRegistro.Activo ? "Si":"No", chkActivo.Checked ? "Si":"No"); + + if (oRegistro.Externo != chkExterno.Checked) + oAuditor.GrabaAuditoria("Modifica Externo", idUsuario, oRegistro.Username, oRegistro.Externo ? "Si":"No", chkExterno.Checked ? "Si":"No"); + + if (oRegistro.RequiereCambioPass != chkRequiereContrasenia.Checked) + oAuditor.GrabaAuditoria("Modifica Requiere Contraseña", idUsuario, oRegistro.Username, oRegistro.RequiereCambioPass ? "Si":"No", chkRequiereContrasenia.Checked ? "Si":"No"); + + + } #endregion #region Efectores From 4facec55915c47fd57e79b6a12613f003d35a441 Mon Sep 17 00:00:00 2001 From: Vanesa Rimada <80859025+vrimada@users.noreply.github.com> Date: Tue, 28 Apr 2026 09:25:46 -0300 Subject: [PATCH 05/37] LAB-240 urgencias: ocultar boton recordar practicas --- WebLab/Protocolos/ProtocoloEdit2.aspx.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/WebLab/Protocolos/ProtocoloEdit2.aspx.cs b/WebLab/Protocolos/ProtocoloEdit2.aspx.cs index e3942200..bde69cde 100644 --- a/WebLab/Protocolos/ProtocoloEdit2.aspx.cs +++ b/WebLab/Protocolos/ProtocoloEdit2.aspx.cs @@ -1593,6 +1593,7 @@ inner join lab_item P with (nolock) on dp.idsubitem = p.iditem ddlOrigen.SelectedValue = oC.IdOrigenUrgencia.ToString(); //Origen: Guardia ddlSectorServicio.SelectedValue = oC.IdSectorUrgencia.ToString(); // sector de urgencia ddlPrioridad.SelectedValue = "2"; // Prioridad: Urgencia + chkRecordarPractica.Visible = false; } else { From 82d0599a8cbcafdd689b0a7254f0d41def7cd0b1 Mon Sep 17 00:00:00 2001 From: Vanesa Rimada <80859025+vrimada@users.noreply.github.com> Date: Tue, 28 Apr 2026 10:39:56 -0300 Subject: [PATCH 06/37] fix sesiones y auditoria --- WebLab/Usuarios/UsuarioEdit.aspx | 2 +- WebLab/Usuarios/UsuarioEdit.aspx.cs | 173 +++++++++---------- WebLab/Usuarios/UsuarioEdit.aspx.designer.cs | 9 + 3 files changed, 91 insertions(+), 93 deletions(-) diff --git a/WebLab/Usuarios/UsuarioEdit.aspx b/WebLab/Usuarios/UsuarioEdit.aspx index 7c745b4c..1a892ea0 100644 --- a/WebLab/Usuarios/UsuarioEdit.aspx +++ b/WebLab/Usuarios/UsuarioEdit.aspx @@ -204,7 +204,7 @@ - Contraseña: + diff --git a/WebLab/Usuarios/UsuarioEdit.aspx.cs b/WebLab/Usuarios/UsuarioEdit.aspx.cs index 37f333a6..9a469fc5 100644 --- a/WebLab/Usuarios/UsuarioEdit.aspx.cs +++ b/WebLab/Usuarios/UsuarioEdit.aspx.cs @@ -34,30 +34,36 @@ public partial class UsuarioEdit : System.Web.UI.Page protected void Page_PreInit(object sender, EventArgs e) { - oCr.CacheDuration = 0; - oCr.EnableCaching = false; - oC = (Configuracion)oC.Get(typeof(Configuracion), 1); // "IdEfector", oUser.IdEfector); + if (Session["idUsuario"] != null) + { + oCr.CacheDuration = 0; + oCr.EnableCaching = false; + oC = (Configuracion)oC.Get(typeof(Configuracion), 1); // "IdEfector", oUser.IdEfector); + } + else Response.Redirect("../FinSesion.aspx", false); } protected void Page_Load(object sender, EventArgs e) { - if (!Page.IsPostBack) - { - if (Session["idUsuario"] != null) + if (Session["idUsuario"] != null) + { + if (!Page.IsPostBack) { VerificaPermisos("Usuarios"); CargarListas(); if (Request["id"] != null) MostrarDatos(); else - { + { MostrarEfectores(); btnAuditoria.Visible = false; } - + } - else Response.Redirect("../FinSesion.aspx", false); } + else Response.Redirect("../FinSesion.aspx", false); + } + private void VerificaPermisos(string sObjeto) { @@ -91,11 +97,11 @@ private void CargarListas() oUtil.CargarCombo(ddlArea, m_ssql, "idArea", "nombre"); ddlArea.Items.Insert(0, new ListItem("Todas", "0")); - if (ConfigurationManager.AppSettings["tipoAutenticacion"].ToString() == "SSO") - { - chkRequiereContrasenia.Checked = false; - chkRequiereContrasenia.Visible = false; - } + //if (ConfigurationManager.AppSettings["tipoAutenticacion"].ToString() == "SSO") + //{ + // chkRequiereContrasenia.Checked = false; + // chkRequiereContrasenia.Visible = false; + //} } @@ -111,8 +117,10 @@ private void MostrarDatos() //txtMatricula.Text = oRegistro.Matricula; txtUsername.Text = oRegistro.Username; chkRequiereContrasenia.Checked = oRegistro.RequiereCambioPass; + //En modificacion no se puede editar contraseña, la ocultamos: txtPassword.Enabled = false; txtPassword.Visible = false; + lblPassword.Visible = false; chkActivo.Checked = oRegistro.Activo; ddlPerfil.SelectedValue = oRegistro.IdPerfil.IdPerfil.ToString(); //ddlEfector.SelectedValue = oRegistro.IdEfector.IdEfector.ToString(); @@ -185,15 +193,8 @@ private void agregarEfectorAdmin() private void Guardar(Usuario oRegistro) { - string accion = "Crea"; - if (Request["id"] != null) //oRegistro nunca es null - { - accion = "Modifica"; - guardarAuditoria(oRegistro); - } - - - + guardarAuditoria(oRegistro); + Perfil oPerfil = new Perfil(); oPerfil = (Perfil)oPerfil.Get(typeof(Perfil), int.Parse(ddlPerfil.SelectedValue)); @@ -208,13 +209,10 @@ private void Guardar(Usuario oRegistro) else oEfectorDestino = oEfector; - - oRegistro.IdEfector = oEfector; oRegistro.IdEfectorDestino = oEfectorDestino; oRegistro.IdPerfil = oPerfil; oRegistro.IdArea = int.Parse(ddlArea.SelectedValue); - oRegistro.Apellido = txtApellido.Text; oRegistro.Nombre = txtNombre.Text; oRegistro.Legajo = ""; @@ -222,7 +220,6 @@ private void Guardar(Usuario oRegistro) //oRegistro.Matricula=txtMatricula.Text; oRegistro.Administrador = chkAdministrador.Checked; oRegistro.Username = txtUsername.Text; - oRegistro.Email = email.Value; oRegistro.Telefono = txtTelefono.Text; @@ -240,39 +237,14 @@ private void Guardar(Usuario oRegistro) oRegistro.Password = m_password; } - - - if (Request["id"] != null) //oRegistro nunca es null - { - if ((oRegistro.Activo == true) && (chkActivo.Checked == false)) - accion = "Inhabilita"; - if ((oRegistro.Activo == false) && (chkActivo.Checked == true)) - accion = "Habilita"; - - if (oRegistro.IdPerfil != oPerfil) - accion = "Cambia Perfil"; - - if (oRegistro.TipoAutenticacion.Trim() != ddlTipoAutenticacion.SelectedValue) - accion = "Cambia Autenticacion: " + ddlTipoAutenticacion.SelectedValue.Trim(); - - } - oRegistro.Activo = chkActivo.Checked; oRegistro.Externo = chkExterno.Checked; oRegistro.RequiereCambioPass = chkRequiereContrasenia.Checked; oRegistro.IdUsuarioActualizacion = int.Parse(Session["idUsuario"].ToString()); oRegistro.FechaActualizacion = DateTime.Now; - - oRegistro.TipoAutenticacion = ddlTipoAutenticacion.SelectedValue; oRegistro.Save(); - - Usuario oAuditor = new Usuario(); - oAuditor = (Usuario)oAuditor.Get(typeof(Usuario), int.Parse(Session["idUsuario"].ToString())); - - oAuditor.GrabaAuditoria(accion, oRegistro.IdUsuario, oRegistro.Username); - if (Request["id"] == null) //en el alta se guardan los efectores luego de crear el usuario //en modificacion no los guardamos desde aca, ya que se guardan en el evento "Agregar Efector" GuardarEfectores(oRegistro); @@ -386,7 +358,7 @@ protected void btnAuditoria_Click(object sender, EventArgs e) } else { - string popupScript = ""; + string popupScript = ""; Page.RegisterStartupScript("PopupScript", popupScript); } } @@ -406,6 +378,7 @@ private DataTable GetDataSetAuditoria() // m_strCondicion = " and P.idefector=" + oUser.IdEfector.IdEfector.ToString(); //} + //Agregamos la auditoria de aceptacion de terminos y condiciones m_strSQL = @" SELECT P.username + ' - '+ P.apellido + ' ' + P.nombre as numero , P.apellido as username, A.fecha AS fecha, A.hora, A.accion, @@ -608,61 +581,77 @@ private void guardarAuditoria(Usuario oRegistro) Usuario oAuditor = new Usuario(); oAuditor = (Usuario)oAuditor.Get(typeof(Usuario), int.Parse(Session["idUsuario"].ToString())); - int idUsuario = oRegistro.IdUsuario; - if (oRegistro.Nombre != txtNombre.Text) - oAuditor.GrabaAuditoria("Modifica Nombre", idUsuario, oRegistro.Username, oRegistro.Nombre, txtNombre.Text); + string accion = "Crea"; - if (oRegistro.Apellido != txtApellido.Text) - oAuditor.GrabaAuditoria("Modifica Apellido", idUsuario, oRegistro.Username, oRegistro.Apellido, txtApellido.Text); + if (Request["id"] != null) + { + accion = "Modifica"; + if ((oRegistro.Activo == true) && (chkActivo.Checked == false)) + accion = "Inhabilita"; + if ((oRegistro.Activo == false) && (chkActivo.Checked == true)) + accion = "Habilita"; + } + //Auditoria accion + oAuditor.GrabaAuditoria(accion, oRegistro.IdUsuario, oRegistro.Username); + + //Auditoria cambio de valores del usuario + if (Request["id"] != null) + { + + if (oRegistro.Nombre != txtNombre.Text) + oAuditor.GrabaAuditoria("Modifica Nombre", oRegistro.IdUsuario, oRegistro.Username, oRegistro.Nombre, txtNombre.Text); - if (oRegistro.FirmaValidacion != txtFirmaValidacion.Text) - oAuditor.GrabaAuditoria("Modifica Firma Validacion", idUsuario, oRegistro.Username, oRegistro.FirmaValidacion, txtFirmaValidacion.Text); + if (oRegistro.Apellido != txtApellido.Text) + oAuditor.GrabaAuditoria("Modifica Apellido", oRegistro.IdUsuario, oRegistro.Username, oRegistro.Apellido, txtApellido.Text); - if (oRegistro.Email != email.Value.ToString()) - oAuditor.GrabaAuditoria("Modifica Email", idUsuario, oRegistro.Username, oRegistro.Email, email.Value); + if (oRegistro.FirmaValidacion != txtFirmaValidacion.Text) + oAuditor.GrabaAuditoria("Modifica Firma Validacion", oRegistro.IdUsuario, oRegistro.Username, oRegistro.FirmaValidacion, txtFirmaValidacion.Text); - if (oRegistro.Telefono != txtTelefono.Text) - oAuditor.GrabaAuditoria("Modifica Telefono", idUsuario, oRegistro.Username, oRegistro.Telefono, txtTelefono.Text); + if (oRegistro.Email != email.Value.ToString()) + oAuditor.GrabaAuditoria("Modifica Email", oRegistro.IdUsuario , oRegistro.Username, oRegistro.Email, email.Value); - if (oRegistro.TipoAutenticacion.Trim() != ddlTipoAutenticacion.SelectedValue) - oAuditor.GrabaAuditoria("Modifica Tipo Autenticacion", idUsuario, oRegistro.Username, oRegistro.TipoAutenticacion, ddlTipoAutenticacion.SelectedValue); + if (oRegistro.Telefono != txtTelefono.Text) + oAuditor.GrabaAuditoria("Modifica Telefono", oRegistro.IdUsuario, oRegistro.Username, oRegistro.Telefono, txtTelefono.Text); + + if (oRegistro.TipoAutenticacion.Trim() != ddlTipoAutenticacion.SelectedValue) + oAuditor.GrabaAuditoria("Modifica Tipo Autenticacion", oRegistro.IdUsuario, oRegistro.Username, oRegistro.TipoAutenticacion, ddlTipoAutenticacion.SelectedValue); - if (oRegistro.Username != txtUsername.Text) - oAuditor.GrabaAuditoria("Modifica Username", idUsuario, oRegistro.Username, oRegistro.Username, txtUsername.Text); + if (oRegistro.Username != txtUsername.Text) + oAuditor.GrabaAuditoria("Modifica Username", oRegistro.IdUsuario, oRegistro.Username, oRegistro.Username, txtUsername.Text); - if (oRegistro.Administrador != chkAdministrador.Checked) - oAuditor.GrabaAuditoria("Modifica Administrador", idUsuario, oRegistro.Username, oRegistro.Administrador ? "Si" : "No", chkAdministrador.Checked ? "Si" : "No"); + if (oRegistro.Administrador != chkAdministrador.Checked) + oAuditor.GrabaAuditoria("Modifica Administrador", oRegistro.IdUsuario, oRegistro.Username, oRegistro.Administrador ? "Si" : "No", chkAdministrador.Checked ? "Si" : "No"); - if (oRegistro.IdArea.ToString() != ddlArea.SelectedValue) - { - string nombreArea = ""; - if (oRegistro.IdArea != 0) + if (oRegistro.IdArea.ToString() != ddlArea.SelectedValue) { - Area oArea = new Area(); - oArea = (Area)oArea.Get(typeof(Area), oRegistro.IdArea); - nombreArea = oArea.Nombre; - } - else nombreArea = "Todas"; + string nombreArea = ""; + if (oRegistro.IdArea != 0) + { + Area oArea = new Area(); + oArea = (Area)oArea.Get(typeof(Area), oRegistro.IdArea); + nombreArea = oArea.Nombre; + } + else nombreArea = "Todas"; - oAuditor.GrabaAuditoria("Modifica Area", idUsuario, oRegistro.Username, nombreArea, ddlArea.SelectedItem.Text); - } + oAuditor.GrabaAuditoria("Modifica Area", oRegistro.IdUsuario, oRegistro.Username, nombreArea, ddlArea.SelectedItem.Text); + } - if (oRegistro.IdPerfil.IdPerfil.ToString() != ddlPerfil.SelectedValue) - oAuditor.GrabaAuditoria("Modifica Perfil", idUsuario, oRegistro.Username, oRegistro.IdPerfil.Nombre, ddlPerfil.SelectedItem.Text); + if (oRegistro.IdPerfil.IdPerfil.ToString() != ddlPerfil.SelectedValue) + oAuditor.GrabaAuditoria("Modifica Perfil", oRegistro.IdUsuario, oRegistro.Username, oRegistro.IdPerfil.Nombre, ddlPerfil.SelectedItem.Text); - if (ddlEfectorDestino.SelectedValue != "" && oRegistro.IdEfectorDestino.IdEfector.ToString() != ddlEfectorDestino.SelectedValue) - oAuditor.GrabaAuditoria("Modifica Laboratorio Destino", idUsuario, oRegistro.Username, oRegistro.IdEfectorDestino.Nombre, ddlEfectorDestino.SelectedItem.Text); + if (ddlEfectorDestino.SelectedValue != "" && oRegistro.IdEfectorDestino.IdEfector.ToString() != ddlEfectorDestino.SelectedValue) + oAuditor.GrabaAuditoria("Modifica Laboratorio Destino", oRegistro.IdUsuario, oRegistro.Username, oRegistro.IdEfectorDestino.Nombre, ddlEfectorDestino.SelectedItem.Text); - if (oRegistro.Activo != chkActivo.Checked) - oAuditor.GrabaAuditoria("Modifica Activo", idUsuario, oRegistro.Username, oRegistro.Activo ? "Si":"No", chkActivo.Checked ? "Si":"No"); + if (oRegistro.Activo != chkActivo.Checked) + oAuditor.GrabaAuditoria("Modifica Activo", oRegistro.IdUsuario, oRegistro.Username, oRegistro.Activo ? "Si":"No", chkActivo.Checked ? "Si":"No"); - if (oRegistro.Externo != chkExterno.Checked) - oAuditor.GrabaAuditoria("Modifica Externo", idUsuario, oRegistro.Username, oRegistro.Externo ? "Si":"No", chkExterno.Checked ? "Si":"No"); + if (oRegistro.Externo != chkExterno.Checked) + oAuditor.GrabaAuditoria("Modifica Externo", oRegistro.IdUsuario, oRegistro.Username, oRegistro.Externo ? "Si":"No", chkExterno.Checked ? "Si":"No"); - if (oRegistro.RequiereCambioPass != chkRequiereContrasenia.Checked) - oAuditor.GrabaAuditoria("Modifica Requiere Contraseña", idUsuario, oRegistro.Username, oRegistro.RequiereCambioPass ? "Si":"No", chkRequiereContrasenia.Checked ? "Si":"No"); + if (oRegistro.RequiereCambioPass != chkRequiereContrasenia.Checked) + oAuditor.GrabaAuditoria("Modifica Requiere Contraseña", oRegistro.IdUsuario, oRegistro.Username, oRegistro.RequiereCambioPass ? "Si":"No", chkRequiereContrasenia.Checked ? "Si":"No"); - + } } #endregion diff --git a/WebLab/Usuarios/UsuarioEdit.aspx.designer.cs b/WebLab/Usuarios/UsuarioEdit.aspx.designer.cs index d8c0b814..fcde6f90 100644 --- a/WebLab/Usuarios/UsuarioEdit.aspx.designer.cs +++ b/WebLab/Usuarios/UsuarioEdit.aspx.designer.cs @@ -140,6 +140,15 @@ public partial class UsuarioEdit /// protected global::System.Web.UI.WebControls.CustomValidator customValidacionGeneral1; + /// + /// Control lblPassword. + /// + /// + /// Campo generado automáticamente. + /// Para modificarlo, mueva la declaración del campo del archivo del diseñador al archivo de código subyacente. + /// + protected global::System.Web.UI.WebControls.Label lblPassword; + /// /// Control txtPassword. /// From 6e70dfaff92115e5108dc918bcef273cdd0d2743 Mon Sep 17 00:00:00 2001 From: Vanesa Rimada <80859025+vrimada@users.noreply.github.com> Date: Tue, 28 Apr 2026 13:35:24 -0300 Subject: [PATCH 07/37] label github --- .github/workflows/label02_has_conflicts.yaml | 84 ++++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 .github/workflows/label02_has_conflicts.yaml diff --git a/.github/workflows/label02_has_conflicts.yaml b/.github/workflows/label02_has_conflicts.yaml new file mode 100644 index 00000000..5f08c0d3 --- /dev/null +++ b/.github/workflows/label02_has_conflicts.yaml @@ -0,0 +1,84 @@ +name: PR conflict label + +on: + pull_request: + types: [opened, synchronize, reopened] + push: + branches: [master] + +permissions: + pull-requests: write + issues: write + contents: read + +jobs: + conflicts: + runs-on: ubuntu-latest + steps: + - name: Check conflicts + uses: actions/github-script@v7 + with: + script: | + const { owner, repo } = context.repo; + + async function checkPR(pr) { + let data; + let retries = 5; + const issue_number = pr.number; + + while (retries > 0) { + const response = await github.rest.pulls.get({ + owner, + repo, + pull_number: issue_number + }); + data = response.data; + console.log(`PR #${issue_number} - mergeable: ${data.mergeable}, state: ${data.mergeable_state}`); + + // Si mergeable es null, GitHub aún está calculando + if (data.mergeable !== null) break; + + await new Promise(r => setTimeout(r, 5000)); + retries--; + } + + // Usamos mergeable === false para detectar conflictos reales + if (data.mergeable === false) { + console.log(`Adding "Conflictos" label to PR #${issue_number}`); + await github.rest.issues.addLabels({ + owner, + repo, + issue_number, + labels: ['Conflictos'] + }); + } else if (data.mergeable === true) { + console.log(`Removing "Conflictos" label from PR #${issue_number} (if exists)`); + try { + await github.rest.issues.removeLabel({ + owner, + repo, + issue_number, + name: 'Conflictos' + }); + } catch (e) { + // label no existía + } + } + } + + if (context.eventName === 'pull_request') { + await checkPR(context.payload.pull_request); + } + + if (context.eventName === 'push') { + const { data: prs } = await github.rest.pulls.list({ + owner, + repo, + state: 'open', + base: 'master' + }); + + for (const pr of prs) { + await checkPR(pr); + } + } From 82841038d7807078ad89b9b4b8daed0d86cafe81 Mon Sep 17 00:00:00 2001 From: Vanesa Rimada <80859025+vrimada@users.noreply.github.com> Date: Wed, 29 Apr 2026 10:04:47 -0300 Subject: [PATCH 08/37] FIX: perfiles --- WebLab/Usuarios/UsuarioList.aspx.cs | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/WebLab/Usuarios/UsuarioList.aspx.cs b/WebLab/Usuarios/UsuarioList.aspx.cs index f85d9415..3e2a7ad8 100644 --- a/WebLab/Usuarios/UsuarioList.aspx.cs +++ b/WebLab/Usuarios/UsuarioList.aspx.cs @@ -120,9 +120,12 @@ private void CargarListas() if (nivelcentral) ddlEfector.Items.Insert(0, new ListItem("--Seleccione un efector--", "0")); - m_ssql = @"SELECT idPerfil, nombre FROM Sys_Perfil with (nolock) - where idperfil in (select idperfil from Sys_Usuario where activo=1 and - idefector=" + oUser.IdEfector.IdEfector.ToString() +" ) ORDER BY nombre"; + m_ssql = @"SELECT distinct P.idperfil, P.nombre FROM sys_usuario AS U with (nolock) + INNER JOIN Sys_Perfil AS P with (nolock) ON P.idPerfil=U.idPerfil + where U.idperfil in (select idusuario FROM Sys_UsuarioEfector WHERE idefector=" + oUser.IdEfector.IdEfector.ToString() + @") + --incluir Admin externo + or P.idPerfil in (SELECT idperfil FROM Sys_Usuario WHERE idEfectorDestino=" + oUser.IdEfector.IdEfector.ToString() + @" AND activo=1) + ORDER BY nombre"; oUtil.CargarCombo(ddlPerfil, m_ssql, "idPerfil", "nombre"); ddlPerfil.Items.Insert(0, new ListItem("Todos", "0")); From bc8319f02f2c173dfc3759e864c7762437206524 Mon Sep 17 00:00:00 2001 From: caroPintos <77695282+caroPintos@users.noreply.github.com> Date: Mon, 4 May 2026 15:17:15 -0300 Subject: [PATCH 09/37] Mantenimiento Mayo 1 (#90) --- Business/Data/AutoAnalizador/RealItem.cs | 127 ++++ Business/Data/AutoAnalizador/RealItem.hbm.xml | 13 + Business/Data/Laboratorio/Protocolo.cs | 200 +++++- .../REAL/ConfiguracionEdit.aspx | 144 +++++ .../REAL/ConfiguracionEdit.aspx.cs | 297 +++++++++ .../REAL/ConfiguracionEdit.aspx.designer.cs | 96 +++ .../ControlResultados/ControlPlanilla.aspx.cs | 34 +- WebLab/Informes/Auditoria.aspx.cs | 4 +- WebLab/Informes/AuditoriaUsuario.aspx.cs | 2 +- WebLab/Informes/HistoriaClinica.aspx.cs | 45 +- .../HTrabajoProtocolo2Horizontal.rpt | Bin 32768 -> 32768 bytes WebLab/Informes/Informe.aspx | 2 +- WebLab/Informes/Informe.aspx.cs | 7 +- WebLab/Protocolos/ProcesaRenaper.aspx.cs | 247 ++++++- WebLab/Protocolos/ProtocoloEdit2.aspx.cs | 112 +--- WebLab/Resultados/ResultadoBusqueda.aspx | 2 +- WebLab/Resultados/ResultadoEdit2.aspx | 2 +- WebLab/Resultados/ResultadoView.aspx | 19 +- WebLab/Resultados/ResultadoView.aspx.cs | 609 +++++------------- .../Resultados/ResultadoView.aspx.designer.cs | 34 +- WebLab/Turnos/TurnosEdit2.aspx.cs | 17 +- WebLab/Usuarios/PasswordEdit.aspx.cs | 20 +- WebLab/login.ascx.cs | 28 +- WebLab/loginSIL.ascx.cs | 280 ++++---- 24 files changed, 1486 insertions(+), 855 deletions(-) create mode 100644 Business/Data/AutoAnalizador/RealItem.cs create mode 100644 Business/Data/AutoAnalizador/RealItem.hbm.xml create mode 100644 WebLab/AutoAnalizador/REAL/ConfiguracionEdit.aspx create mode 100644 WebLab/AutoAnalizador/REAL/ConfiguracionEdit.aspx.cs create mode 100644 WebLab/AutoAnalizador/REAL/ConfiguracionEdit.aspx.designer.cs diff --git a/Business/Data/AutoAnalizador/RealItem.cs b/Business/Data/AutoAnalizador/RealItem.cs new file mode 100644 index 00000000..0615d231 --- /dev/null +++ b/Business/Data/AutoAnalizador/RealItem.cs @@ -0,0 +1,127 @@ +/* +insert license info here +*/ +using System; +using System.Collections; + +namespace Business.Data.AutoAnalizador +{ + /// + /// Generated by MyGeneration using the NHibernate Object Mapping template + /// + [Serializable] + public sealed class RealItem: Business.BaseDataAccess + { + + #region Private Members + private bool m_isChanged; + + private int m_idrealitem; + private string m_idreal; + private int m_iditem; + private bool m_habilitado; + #endregion + + #region Default ( Empty ) Class Constuctor + /// + /// default constructor + /// + public RealItem() + { + m_idrealitem = 0; + m_idreal = String.Empty; + m_iditem = 0; + m_habilitado = false; + } + #endregion // End of Default ( Empty ) Class Constuctor + + #region Required Fields Only Constructor + /// + /// required (not null) fields only constructor + /// + public RealItem( + string idreal, + int iditem, + bool habilitado) + : this() + { + m_idreal = idreal; + m_iditem = iditem; + m_habilitado = habilitado; + } + #endregion // End Required Fields Only Constructor + + #region Public Properties + + /// + /// + /// + public int IdRealItem + { + get { return m_idrealitem; } + set + { + m_isChanged |= (m_idrealitem != value ); + m_idrealitem = value; + } + + } + + /// + /// + /// + public string IdReal + { + get { return m_idreal; } + + set + { + if( value == null ) + throw new ArgumentOutOfRangeException("Null value not allowed for IdReal", value, "null"); + + if( value.Length > 50) + throw new ArgumentOutOfRangeException("Invalid value for IdReal", value, value.ToString()); + + m_isChanged |= (m_idreal != value); m_idreal = value; + } + } + + /// + /// + /// + public int IdItem + { + get { return m_iditem; } + set + { + m_isChanged |= ( m_iditem != value ); + m_iditem = value; + } + + } + + /// + /// + /// + public bool Habilitado + { + get { return m_habilitado; } + set + { + m_isChanged |= ( m_habilitado != value ); + m_habilitado = value; + } + + } + + /// + /// Returns whether or not the object has changed it's values. + /// + public bool IsChanged + { + get { return m_isChanged; } + } + + #endregion + } +} diff --git a/Business/Data/AutoAnalizador/RealItem.hbm.xml b/Business/Data/AutoAnalizador/RealItem.hbm.xml new file mode 100644 index 00000000..dc314397 --- /dev/null +++ b/Business/Data/AutoAnalizador/RealItem.hbm.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/Business/Data/Laboratorio/Protocolo.cs b/Business/Data/Laboratorio/Protocolo.cs index 4ab840ca..2f88115e 100644 --- a/Business/Data/Laboratorio/Protocolo.cs +++ b/Business/Data/Laboratorio/Protocolo.cs @@ -11,6 +11,8 @@ insert license info here using System.IO; using System.Drawing; using QRCoder; +using System.Collections.Generic; +using System.Linq; namespace Business.Data.Laboratorio { @@ -1116,6 +1118,120 @@ public DateTime FechaTomaMuestra } } + public class ResultadoAnteriorDTO + { + public int IdSubItem { get; set; } + public string Resultado { get; set; } + } + + public Dictionary ObtenerResultadosAnteriores(string conexion) + { + int idPaciente = this.IdPaciente.IdPaciente; + int idProtocoloActual = this.IdProtocolo; + Dictionary diccionario = + new Dictionary(); + + string sql = @" + SELECT + dp.IdSubItem, + dp.ResultadoCar, + dp.ResultadoNum, + dp.FormatoValida, + dp.UnidadMedida + FROM LAB_DetalleProtocolo dp + INNER JOIN LAB_Protocolo p + ON p.IdProtocolo = dp.IdProtocolo + INNER JOIN + ( + SELECT + dp2.IdSubItem, + MAX(dp2.IdDetalleProtocolo) IdDetalle + FROM LAB_DetalleProtocolo dp2 + INNER JOIN LAB_Protocolo p2 + ON p2.IdProtocolo = dp2.IdProtocolo + WHERE p2.IdPaciente = @idPaciente + AND p2.Baja = 0 + AND p2.Estado > 0 + AND p2.IdProtocolo < @idProtocoloActual + AND dp2.IdUsuarioValida > 0 + GROUP BY dp2.IdSubItem + ) ult + ON ult.IdDetalle = dp.IdDetalleProtocolo + "; + + Utility oUtil = new Utility(); + + using (SqlConnection conn = + new SqlConnection(conexion + )) + { + using (SqlCommand cmd = new SqlCommand(sql, conn)) + { + cmd.Parameters.AddWithValue("@idPaciente", idPaciente); + cmd.Parameters.AddWithValue("@idProtocoloActual", idProtocoloActual); + + conn.Open(); + + using (SqlDataReader dr = cmd.ExecuteReader()) + { + while (dr.Read()) + { + int idSubItem = + Convert.ToInt32(dr["IdSubItem"]); + + string resultado = ""; + + string resultadoCar = + dr["ResultadoCar"] != DBNull.Value + ? dr["ResultadoCar"].ToString().Trim() + : ""; + + if (resultadoCar == "") + { + decimal resultadoNum = + dr["ResultadoNum"] != DBNull.Value + ? Convert.ToDecimal(dr["ResultadoNum"]) + : 0; + + string formatoValida = + dr["FormatoValida"] != DBNull.Value + ? dr["FormatoValida"].ToString() + : "0"; + + string unidadMedida = + dr["UnidadMedida"] != DBNull.Value + ? dr["UnidadMedida"].ToString() + : ""; + + string formato = + oUtil.Formato(formatoValida); + + resultado = + resultadoNum.ToString( + formato, + System.Globalization.CultureInfo.InvariantCulture); + + if (unidadMedida != "") + resultado += " " + unidadMedida; + } + else + { + resultado = + resultadoCar.Length > 10 + ? resultadoCar.Substring(0, 10) + : resultadoCar; + } + + if (!diccionario.ContainsKey(idSubItem)) + diccionario.Add(idSubItem, resultado); + } + } + } + } + + return diccionario; + } + /// /// Returns whether or not the object has changed it's values. /// @@ -1252,13 +1368,11 @@ public int GenerarNumeroMultiEfector(int idEfector) } public bool tieneAdjuntoProtocolo() { - ICriteria crit = m_session.CreateCriteria(typeof(ProtocoloAnexo)); - + ICriteria crit = m_session.CreateCriteria(typeof(ProtocoloAnexo)); crit.Add(Expression.Eq("IdProtocolo", this)); crit.Add(Expression.Eq("IdDetalleProtocolo", 0)); IList lista = crit.List(); if (lista.Count > 0) - return true; else @@ -2161,8 +2275,9 @@ public void CalcularFormulas(string s_operacion, int i_idusuario, bool solovacio { crit.Add(Expression.Eq("ConResultado",false)); } + - IList lista = crit.List(); + IList lista = crit.List(); //if (lista.Count > 0) //{ @@ -2176,7 +2291,8 @@ public void CalcularFormulas(string s_operacion, int i_idusuario, bool solovacio if (oItem.SinInsumo) continue; /*fin control insumo */ - ICriteria critFormula = m_session.CreateCriteria(typeof(Formula)); + + ICriteria critFormula = m_session.CreateCriteria(typeof(Formula)); critFormula.Add(Expression.Eq("IdItem", oDet.IdSubItem)); critFormula.Add(Expression.Eq("IdTipoFormula", 1)); critFormula.Add(Expression.Eq("Baja", false)); @@ -2751,33 +2867,57 @@ FROM LAB_AuditoriaProtocolo AS A INNER JOIN public string GetPracticasPedidas() { - string s_practicas = ""; - DetalleProtocolo oDetalle = new DetalleProtocolo(); - ISession m_session = NHibernateHttpModule.CurrentSession; - ICriteria crit = m_session.CreateCriteria(typeof(DetalleProtocolo)); - crit.Add(Expression.Eq("IdProtocolo", this)); - crit.Add(Expression.Eq("Informable", true)); - crit.AddOrder(Order.Asc("IdDetalleProtocolo")); - - IList items = crit.List(); - string pivot = ""; - string sDatos = ""; - foreach (DetalleProtocolo oDet in items) - { - if (pivot != oDet.IdItem.Nombre) - { - if (sDatos == "") - sDatos = oDet.IdItem.Nombre; - else - sDatos += " - " + oDet.IdItem.Nombre; - //sDatos += "#" + oDet.IdItem.Codigo + "#" + oDet.IdItem.Nombre + "#" + oDet.TrajoMuestra + "@"; - pivot = oDet.IdItem.Nombre; - } - + /* string s_practicas = ""; + DetalleProtocolo oDetalle = new DetalleProtocolo(); + ISession m_session = NHibernateHttpModule.CurrentSession; + ICriteria crit = m_session.CreateCriteria(typeof(DetalleProtocolo)); + crit.Add(Expression.Eq("IdProtocolo", this)); + crit.Add(Expression.Eq("Informable", true)); + crit.AddOrder(Order.Asc("IdDetalleProtocolo")); + + IList items = crit.List(); + string pivot = ""; + string sDatos = ""; + foreach (DetalleProtocolo oDet in items) + { + if (pivot != oDet.IdItem.Nombre) + { + if (sDatos == "") + sDatos = oDet.IdItem.Nombre; + else + sDatos += " - " + oDet.IdItem.Nombre; + //sDatos += "#" + oDet.IdItem.Codigo + "#" + oDet.IdItem.Nombre + "#" + oDet.TrajoMuestra + "@"; + pivot = oDet.IdItem.Nombre; + } + + } + + s_practicas = sDatos; + return s_practicas; + */ + ISession session = NHibernateHttpModule.CurrentSession; + + IList practicas = session.CreateQuery(@" + select distinct i.Nombre + from DetalleProtocolo dp + inner join dp.IdItem i + where dp.IdProtocolo = :protocolo + and dp.Informable = 1 + order by i.Nombre") + .SetEntity("protocolo", this) + .List(); + + string resultado = ""; + + foreach (object item in practicas) + { + if (resultado == "") + resultado = item.ToString(); + else + resultado += " - " + item.ToString(); } - s_practicas = sDatos; - return s_practicas; + return resultado; } public void ActualizarNumeroDesdeID() diff --git a/WebLab/AutoAnalizador/REAL/ConfiguracionEdit.aspx b/WebLab/AutoAnalizador/REAL/ConfiguracionEdit.aspx new file mode 100644 index 00000000..0221967d --- /dev/null +++ b/WebLab/AutoAnalizador/REAL/ConfiguracionEdit.aspx @@ -0,0 +1,144 @@ +<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ConfiguracionEdit.aspx.cs" Inherits="WebLab.AutoAnalizador.REAL.ConfiguracionEdit" MasterPageFile="~/Site1.Master" %> +<%@ Register assembly="Anthem" namespace="Anthem" tagprefix="anthem" %> + + + + + + + + + +
+
+
+

Configuración SIL - REAL

+
+ +
+ + + + + + + + + + + + + + + + + + + <%-- + --%> + + + + + + + + + + + + + + + + + +
+ Area: + + +
+ Análisis del LIS: + + + + + + +
+ ID en Equipo: + + + +
+   + +
+ + +
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+
+
+ + + +
diff --git a/WebLab/AutoAnalizador/REAL/ConfiguracionEdit.aspx.cs b/WebLab/AutoAnalizador/REAL/ConfiguracionEdit.aspx.cs new file mode 100644 index 00000000..f8bf8818 --- /dev/null +++ b/WebLab/AutoAnalizador/REAL/ConfiguracionEdit.aspx.cs @@ -0,0 +1,297 @@ +using System; +using System.Collections; +using System.Configuration; +using System.Data; +using System.Linq; +using System.Web; +using System.Web.Security; +using System.Web.UI; +using System.Web.UI.HtmlControls; +using System.Web.UI.WebControls; +using System.Web.UI.WebControls.WebParts; +using System.Xml.Linq; +using System.Data.SqlClient; +using Business; +using Business.Data.AutoAnalizador; +using NHibernate; +using NHibernate.Expression; +using System.Text; +using System.IO; +using Business.Data; + +namespace WebLab.AutoAnalizador.REAL +{ + public partial class ConfiguracionEdit : System.Web.UI.Page + { + Usuario oUser = new Usuario(); + + protected void Page_PreInit(object sender, EventArgs e) + { + if (Session["idUsuario"] != null) + oUser = (Usuario)oUser.Get(typeof(Usuario), int.Parse(Session["idUsuario"].ToString())); + // oC = (Configuracion)oC.Get(typeof(Configuracion), "IdConfiguracion", 1, "IdEfector", oEfector); + else + Response.Redirect("../FinSesion.aspx", false); + + } + protected void Page_Load(object sender, EventArgs e) + { + if (!Page.IsPostBack) + { + VerificaPermisos("Config. REAL"); + CargarCombos(); + CargarGrilla(); + } + } + private void VerificaPermisos(string sObjeto) + { + if (Session["s_permiso"] != null) + { + Utility oUtil = new Utility(); + int i_permiso = oUtil.VerificaPermisos((ArrayList)Session["s_permiso"], sObjeto); + switch (i_permiso) + { + case 0: Response.Redirect("../AccesoDenegado.aspx", false); break; + //case 1: btn .Visible = false; break; + } + } + else Response.Redirect("../FinSesion.aspx", false); + } + private void CargarGrilla() + { + gvLista.DataSource = LeerDatos(); + gvLista.DataBind(); + } + + private DataTable LeerDatos() + { + string m_strSQL = @" SELECT M.idrealitem, I.codigo, I.nombre, M.idreal, M.habilitado as Habilitado + FROM lab_realitem AS M + INNER JOIN LAB_Item AS I ON M.idItem = I.idItem Order by I.nombre "; + + DataSet Ds = new DataSet(); + SqlConnection conn = (SqlConnection)NHibernateHttpModule.CurrentSession.Connection; + SqlDataAdapter adapter = new SqlDataAdapter(); + adapter.SelectCommand = new SqlCommand(m_strSQL, conn); + adapter.Fill(Ds); + + // CantidadRegistros.Text = Ds.Tables[0].Rows.Count.ToString() + " registros encontrados"; + + return Ds.Tables[0]; + } + private DataTable LeerDatosExcel() + { + string m_strSQL = @" SELECT I.codigo as [Codigo SIL], I.nombre as [Descripcion], M.idreal as [Codigo Real], M.habilitado as Habilitado + FROM lab_realitem AS M + INNER JOIN LAB_Item AS I ON M.idItem = I.idItem Order by I.nombre "; + + DataSet Ds = new DataSet(); + SqlConnection conn = (SqlConnection)NHibernateHttpModule.CurrentSession.Connection; + SqlDataAdapter adapter = new SqlDataAdapter(); + adapter.SelectCommand = new SqlCommand(m_strSQL, conn); + adapter.Fill(Ds); + + // CantidadRegistros.Text = Ds.Tables[0].Rows.Count.ToString() + " registros encontrados"; + + return Ds.Tables[0]; + } + + private void CargarCombos() + { + + Utility oUtil = new Utility(); + string connReady = ConfigurationManager.ConnectionStrings["SIL_ReadOnly"].ConnectionString; ///Performance: conexion de solo lectura + + string m_ssql = "select idArea, nombre from Lab_Area where baja=0 and idtiposervicio=3 order by nombre"; + oUtil.CargarCombo(ddlArea, m_ssql, "idArea", "nombre", connReady); + + + + CargarItem(); + //ddlArea.Items.Insert(0, new ListItem("Seleccione Area", "0")); + + + m_ssql = null; + oUtil = null; + } + + + + + + + private void GuardarDetalleConfiguracion() + { + RealItem oDetalle = new RealItem(); + oDetalle.IdReal = txtIDEquipo.Text; + oDetalle.IdItem = int.Parse(ddlItem.SelectedValue); + oDetalle.Habilitado = true; + oDetalle.Save(); + + + + } + + + protected void btnGuardar_Click2(object sender, EventArgs e) + { + if (Page.IsValid) + { + string validacion = existe(); + if (validacion == "") + { + lblMensajeValidacion.Text = ""; + GuardarDetalleConfiguracion(); + CargarGrilla(); + } + else + lblMensajeValidacion.Text = validacion; + } + } + + private string existe() + { + ////////////////////////////////////////////////////////////////////////////////////////// + ///Verifica de que no exista un item para la combincacion orden y tipo de muestra + ////////////////////////////////////////////////////////////////////////////////////////// + string hay = ""; + + RealItem oItem = new RealItem(); + oItem = (RealItem)oItem.Get(typeof(RealItem), "IdItem", int.Parse(ddlItem.SelectedValue)); + if (oItem == null) + { + + ISession m_session = NHibernateHttpModule.CurrentSession; + ICriteria crit = m_session.CreateCriteria(typeof(RealItem)); + crit.Add(Expression.Eq("IdReal", txtIDEquipo.Text)); + IList detalle = crit.List(); + if (detalle.Count > 0) + hay = "Ya existe una vinculación para el ID de muestra seleccionado. Verifique."; + } + else + hay = "Ya existe una configuración para el análisis seleccionado"; + + return hay; + } + + protected void gvLista_RowDataBound(object sender, GridViewRowEventArgs e) + { + if (e.Row.RowType == DataControlRowType.DataRow) + { + + ImageButton CmdEliminar = (ImageButton)e.Row.Cells[4].Controls[1]; + CmdEliminar.CommandArgument = this.gvLista.DataKeys[e.Row.RowIndex].Value.ToString(); + CmdEliminar.CommandName = "Eliminar"; + CmdEliminar.ToolTip = "Eliminar"; + + + CheckBox chkStatus = (CheckBox)e.Row.Cells[3].Controls[1]; + if (oUser.IdEfector.IdEfector == 227) + { + CmdEliminar.Visible = true; + chkStatus.Visible = true; + + } + else + { + CmdEliminar.Visible = false; + chkStatus.Enabled = false; + } + + + } + } + + protected void gvLista_RowCommand(object sender, GridViewCommandEventArgs e) + { + if (e.CommandName == "Eliminar") + { + RealItem oRegistro = new RealItem(); + oRegistro = (RealItem)oRegistro.Get(typeof(RealItem), int.Parse(e.CommandArgument.ToString())); + oRegistro.Delete(); + + CargarGrilla(); + + } + + } + protected void chkStatus_OnCheckedChanged(object sender, EventArgs e) + { + CheckBox chkStatus = (CheckBox)sender; + GridViewRow row = (GridViewRow)chkStatus.NamingContainer; + + int i_id = int.Parse(gvLista.DataKeys[row.RowIndex].Value.ToString()); + + RealItem oRegistro = new RealItem(); + oRegistro = (RealItem)oRegistro.Get(typeof(RealItem), i_id); + oRegistro.Habilitado = chkStatus.Checked; + oRegistro.Save(); + + + } + protected void lnkRegresar_Click(object sender, EventArgs e) + { + // Response.Redirect("../PrincipalSysmex.aspx", false); + } + + protected void ddlArea_SelectedIndexChanged(object sender, EventArgs e) + { + CargarItem(); + } + + private void CargarItem() + { + + + + + Utility oUtil = new Utility(); + string connReady = ConfigurationManager.ConnectionStrings["SIL_ReadOnly"].ConnectionString; ///Performance: conexion de solo lectura + + ///Carga de combos de Item sin el item que se está configurando y solo las determinaciones simples + string m_ssql = @"select idItem, nombre + ' - ' + codigo as nombre from Lab_Item I + where baja=0 AND idArea=" + ddlArea.SelectedValue + + " order by nombre"; + + oUtil.CargarCombo(ddlItem, m_ssql, "idItem", "nombre", connReady); + ddlItem.Items.Insert(0, new ListItem("Seleccione Item", "0")); + ddlItem.UpdateAfterCallBack = true; + } + + protected void btnExcel_Click(object sender, EventArgs e) + { + if (Page.IsValid) + dataTableAExcel(LeerDatosExcel(), "REAL_SIL"); + } + + + private void dataTableAExcel(DataTable tabla, string nombreArchivo) + { + if (tabla.Rows.Count > 0) + { + StringBuilder sb = new StringBuilder(); + StringWriter sw = new StringWriter(sb); + HtmlTextWriter htw = new HtmlTextWriter(sw); + Page pagina = new Page(); + HtmlForm form = new HtmlForm(); + GridView dg = new GridView(); + dg.EnableViewState = false; + dg.DataSource = tabla; + dg.DataBind(); + pagina.EnableEventValidation = false; + pagina.DesignerInitialize(); + pagina.Controls.Add(form); + form.Controls.Add(dg); + pagina.RenderControl(htw); + Response.Clear(); + Response.Buffer = true; + Response.ContentType = "application/vnd.ms-excel"; + Response.AddHeader("Content-Disposition", "attachment;filename=" + nombreArchivo + ".xls"); + Response.Charset = "UTF-8"; + Response.ContentEncoding = Encoding.Default; + Response.Write(sb.ToString()); + Response.End(); + } + } + } +} diff --git a/WebLab/AutoAnalizador/REAL/ConfiguracionEdit.aspx.designer.cs b/WebLab/AutoAnalizador/REAL/ConfiguracionEdit.aspx.designer.cs new file mode 100644 index 00000000..ce56935f --- /dev/null +++ b/WebLab/AutoAnalizador/REAL/ConfiguracionEdit.aspx.designer.cs @@ -0,0 +1,96 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace WebLab.AutoAnalizador.REAL { + + + public partial class ConfiguracionEdit { + + /// + /// ddlArea control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::Anthem.DropDownList ddlArea; + + /// + /// ddlItem control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::Anthem.DropDownList ddlItem; + + /// + /// RangeValidator1 control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.RangeValidator RangeValidator1; + + /// + /// txtIDEquipo control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.TextBox txtIDEquipo; + + /// + /// RequiredFieldValidator1 control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.RequiredFieldValidator RequiredFieldValidator1; + + /// + /// btnGuardar control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Button btnGuardar; + + /// + /// lblMensajeValidacion control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Label lblMensajeValidacion; + + /// + /// btnExcel control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Button btnExcel; + + /// + /// gvLista control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.GridView gvLista; + } +} diff --git a/WebLab/ControlResultados/ControlPlanilla.aspx.cs b/WebLab/ControlResultados/ControlPlanilla.aspx.cs index 983127e8..52f6059c 100644 --- a/WebLab/ControlResultados/ControlPlanilla.aspx.cs +++ b/WebLab/ControlResultados/ControlPlanilla.aspx.cs @@ -188,46 +188,20 @@ protected void btnBuscar_Click(object sender, EventArgs e) string m_parametro = " P.idTipoServicio=" + ddlServicio.SelectedValue; m_parametro += " AND P.Fecha>='" + fecha1.ToString("yyyyMMdd") + "' AND P.fecha<='" + fecha2.ToString("yyyyMMdd") + "'"; m_parametro += " and P.idEfector =" + oUser.IdEfector.IdEfector.ToString(); - //if (ddlArea.SelectedValue != "0") m_parametro += " AND i.idArea=" + ddlArea.SelectedValue; - - - //Configuracion oCon = new Configuracion(); oCon = (Configuracion)oCon.Get(typeof(Configuracion), 1); - //switch (oCon.TipoNumeracionProtocolo)// busqueda con autonumerico - //{ - // case 0: - // { + if (txtProtocoloDesde.Value != "") m_parametro += " And P.numero>=" + int.Parse(txtProtocoloDesde.Value); if (txtProtocoloHasta.Value != "") m_parametro += " AND P.numero<=" + int.Parse(txtProtocoloHasta.Value); - // } break; - // case 1: - // { - // if (txtProtocoloDesde.Value != "") m_parametro += " And P.numeroDiario>=" + int.Parse(txtProtocoloDesde.Value); - // if (txtProtocoloHasta.Value != "") m_parametro += " AND P.numeroDiario<=" + int.Parse(txtProtocoloHasta.Value); - // } break; - // case 2: - // { - // if (txtProtocoloDesde.Value != "") m_parametro += " And P.numeroSector>=" + int.Parse(txtProtocoloDesde.Value); - // if (txtProtocoloHasta.Value != "") m_parametro += " AND P.numeroSector<=" + int.Parse(txtProtocoloHasta.Value); - // } break; - - // case 3: - // { - // if (txtProtocoloDesde.Value != "") m_parametro += " And P.numeroTipoServicio>=" + int.Parse(txtProtocoloDesde.Value); - // if (txtProtocoloHasta.Value != "") m_parametro += " AND P.numeroTipoServicio<=" + int.Parse(txtProtocoloHasta.Value); - // } break; - //} + if (ddlEfector.SelectedValue != "0") m_parametro += " AND P.idEfectorSolicitante=" + ddlEfector.SelectedValue; if (ddlOrigen.SelectedValue != "0") m_parametro += " AND P.idOrigen=" + ddlOrigen.SelectedValue; if (ddlPrioridad.SelectedValue != "0") m_parametro += " AND P.idPrioridad=" + ddlPrioridad.SelectedValue; - // if (ddlSectorServicio.SelectedValue != "0") m_parametro += " AND P.idSector = " + ddlSectorServicio.SelectedValue; - + m_parametro += " AND P.idSector in (" + getListaSectores() + ")"; string m_orden = " order by P.numero "; - //string operacion = "Carga"; - // string modoCarga = "HT"; + if (chkRecordarFiltro.Checked) AlmacenarSesion(); diff --git a/WebLab/Informes/Auditoria.aspx.cs b/WebLab/Informes/Auditoria.aspx.cs index b1e2c999..e7f53358 100644 --- a/WebLab/Informes/Auditoria.aspx.cs +++ b/WebLab/Informes/Auditoria.aspx.cs @@ -124,11 +124,11 @@ private void CargarListas() string m_ssql = @" select idusuario, apellido + ' ' +nombre as nombre from sys_usuario u with (nolock) - where activo = 1 + where activo = 1 and username <>'adminapi' and exists (select 1 from sys_usuarioefector e (nolock) where e.idusuario = u.idusuario and e.idEfector = " + oUser.IdEfector.IdEfector.ToString() + @") order by apellido, nombre"; if (oUser.Administrador) { - m_ssql = @" select idusuario, apellido + ' ' +nombre as nombre from sys_usuario u with (nolock) where activo = 1 order by apellido, nombre"; + m_ssql = @" select idusuario, apellido + ' ' +nombre as nombre from sys_usuario u with (nolock) where activo = 1 and username <>'adminapi' order by apellido, nombre"; } oUtil.CargarCombo(ddlUsuario, m_ssql, "idusuario", "nombre", connReady); oUtil.CargarCombo(ddlUsuario2, m_ssql, "idusuario", "nombre", connReady); diff --git a/WebLab/Informes/AuditoriaUsuario.aspx.cs b/WebLab/Informes/AuditoriaUsuario.aspx.cs index afb4eff7..225967c0 100644 --- a/WebLab/Informes/AuditoriaUsuario.aspx.cs +++ b/WebLab/Informes/AuditoriaUsuario.aspx.cs @@ -68,7 +68,7 @@ private void CargarListas() { Utility oUtil = new Utility(); ///Carga de combos de tipos de servicios - string m_ssql = "select idusuario, apellido + ' ' +nombre as nombre from sys_usuario order by apellido, nombre"; + string m_ssql = "select idusuario, apellido + ' ' +nombre as nombre from sys_usuario where username<>'adminapi' order by apellido, nombre"; oUtil.CargarCombo(ddlUsuarioModificado, m_ssql, "idusuario", "nombre"); oUtil.CargarCombo(ddlUsuarioABM, m_ssql, "idusuario", "nombre"); diff --git a/WebLab/Informes/HistoriaClinica.aspx.cs b/WebLab/Informes/HistoriaClinica.aspx.cs index d1f36f04..ad26db10 100644 --- a/WebLab/Informes/HistoriaClinica.aspx.cs +++ b/WebLab/Informes/HistoriaClinica.aspx.cs @@ -24,17 +24,26 @@ namespace WebLab.Informes public partial class HistoriaClinica : System.Web.UI.Page { Paciente oPaciente = new Paciente(); - + Configuracion oCon = new Configuracion(); public CrystalReportSource oCr = new CrystalReportSource(); - + public Usuario oUser = new Usuario(); protected void Page_PreInit(object sender, EventArgs e) { oCr.Report.FileName = ""; oCr.CacheDuration = 0; oCr.EnableCaching = false; + if (Session["idUsuario"] != null) + { + + oUser = (Usuario)oUser.Get(typeof(Usuario), int.Parse(Session["idUsuario"].ToString())); + oCon = (Configuracion)oCon.Get(typeof(Configuracion), "IdEfector", oUser.IdEfector); - } + } + else + Response.Redirect("SinDatos.aspx", false); + + } protected void Page_Load(object sender, EventArgs e) { @@ -131,7 +140,8 @@ private void MostrarPaciente() private DataTable LlenarDatos() { DataSet Ds = new DataSet(); - SqlConnection conn = (SqlConnection)NHibernateHttpModule.CurrentSession.Connection; + string conexion = ConfigurationManager.ConnectionStrings["SIL_ReadOnly"].ConnectionString; + SqlConnection conn = new SqlConnection(conexion); ///Performance: conexion de solo lectura SqlCommand cmd = new SqlCommand(); cmd.CommandType = CommandType.StoredProcedure; @@ -186,16 +196,25 @@ private void ExportarPDF() dt =LlenarDatos(); if (dt.Rows.Count > 0) { - Configuracion oCon = new Configuracion(); oCon = (Configuracion)oCon.Get(typeof(Configuracion), 1); + /// Configuracion oCon = new Configuracion(); oCon = (Configuracion)oCon.Get(typeof(Configuracion), 1); + string enc1 = "SUBSECRETARIA DE SALUD"; + string enc2 = "SISTEMA INFORMATICO PROVINCIAL DE LABORATORIO"; + string enc3 = ""; + if (oUser.IdEfector.IdEfector != 227) + { + enc1= oCon.EncabezadoLinea1; + enc2 = oCon.EncabezadoLinea2; + enc3 = oCon.EncabezadoLinea3; + } ParameterDiscreteValue encabezado1 = new ParameterDiscreteValue(); - encabezado1.Value = oCon.EncabezadoLinea1; + encabezado1.Value = enc1;// oCon.EncabezadoLinea1; ParameterDiscreteValue encabezado2 = new ParameterDiscreteValue(); - encabezado2.Value = oCon.EncabezadoLinea2; + encabezado2.Value = enc2; // oCon.EncabezadoLinea2; ParameterDiscreteValue encabezado3 = new ParameterDiscreteValue(); - encabezado3.Value = oCon.EncabezadoLinea3; + encabezado3.Value = enc3;// oCon.EncabezadoLinea3; ParameterDiscreteValue encabezado4 = new ParameterDiscreteValue(); encabezado4.Value = lblAnalisis.Text; @@ -244,15 +263,7 @@ private void ExportarPDF() oCr.DataBind(); oCr.ReportDocument.ExportToHttpResponse(ExportFormatType.PortableDocFormat, Response, true, "Historial_Resultados.pdf"); - //MemoryStream oStream; // using System.IO - //oStream = (MemoryStream)oCr.ReportDocument.ExportToStream(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat); - //Response.Clear(); - //Response.Buffer = true; - //Response.ContentType = "application/pdf"; - //Response.AddHeader("Content-Disposition", "attachment;filename=Historial_Resultados.pdf"); - - //Response.BinaryWrite(oStream.ToArray()); - //Response.End(); + } else Response.Redirect("SinDatos.aspx", false); diff --git a/WebLab/Informes/HojasdeTrabajo/HTrabajoProtocolo2Horizontal.rpt b/WebLab/Informes/HojasdeTrabajo/HTrabajoProtocolo2Horizontal.rpt index 61d55423887df36ecb55e865df7793bbc8291ac5..5beb3223f27cb6766be2904440f1abed46b6fab9 100644 GIT binary patch delta 12913 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 delta 12851 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 %jp~=jrsQ0`v>apruOI%*BqUDsBwxun-@5G zY*=Sr?UNP~gvlT2FN!%7jG~TV`*wnLasfZ^rE}Ktu+GFR-^&K&KA4S5{s>) zFaor)TCbHRt%62X-rZF5^|KGQGjtnr)CPZ3_QYr~4Fe^4Hv~a(lFohcf`g_mr%Xoy zb;XX{u)4*R`DF{is86+J8iSGYP6qGd(SErN1WzZ!kJD$R2Y2v_XQ8CZCIFqBrr<1y zOgnpI(!NMl$SMJf{}Ssxal_yEMt*c#^irm`bF#&2`KGl5Z)fzxEc(;6UA`ymDq){pQLQyyXS50G1wn%EE-Y;h-c#zfx3JipwIqOx$iuJn)yPa$d86g# zE(W!zos|3+uMf`4)8&$MHlRc2>9$Kwk5KG2mBSTCokejdlZqAp4&Hvwi=)|p%eISS zb(qfR`GD0d0>y0?LVYR|xJIkm`Ma%*O&XuMt|XBECg*4-O&)LNv_j1Qd z#4V@UQ_vV(fL*kwYDGI}TcJL*pu700_dU*3$S}C|U-*ICkN|;VU zxk_#zJMyH=b_@QC27nQ@JIe*GIM`Lc^OLN9uipJ0W0@5mvv8!5vaBxeN%Da{@04UL2ObZA z*O1}hrJ2a>!flpTT_I6>^dTu%9PMuyxM@p-xK>2!n-X|W08-JDu-LrL%m)p<{)iO2 z9Es=`wZ-+5M$40;XP7FM+5^-?{=|0_Z45PZw(EkqZd!IB)9L-p223L?9QTYVYVg#$?(rDnP^~hutAUnn z79?*{X?eUnfTr4cB|N;~Ipj;~OG|}A=WJZdEIf?fS-X#HRFc4^2vj)NB4Q+W=`z7^?48GKy~{3V}&AM9KUHjW>e$BgbA4rv&yt!h_RI diff --git a/WebLab/Informes/Informe.aspx b/WebLab/Informes/Informe.aspx index 9cf9458a..a6c55f61 100644 --- a/WebLab/Informes/Informe.aspx +++ b/WebLab/Informes/Informe.aspx @@ -271,7 +271,7 @@
-

+

diff --git a/WebLab/Informes/Informe.aspx.cs b/WebLab/Informes/Informe.aspx.cs index 45443b99..de25e7f7 100644 --- a/WebLab/Informes/Informe.aspx.cs +++ b/WebLab/Informes/Informe.aspx.cs @@ -628,12 +628,7 @@ private void VistaPreeliminar(object p, string accion) } if (accion == "PDF") { - - oCr.ReportDocument.ExportToHttpResponse(ExportFormatType.PortableDocFormat, Response, true, nombrePDF); - - //oCr.ReportDocument.ExportToHttpResponse(ExportFormatType.PortableDocFormat, Response, true, nombrePDF+".pdf"); - - + oCr.ReportDocument.ExportToHttpResponse(ExportFormatType.PortableDocFormat, Response, true, nombrePDF); } else { diff --git a/WebLab/Protocolos/ProcesaRenaper.aspx.cs b/WebLab/Protocolos/ProcesaRenaper.aspx.cs index ca2083d8..b9031bc8 100644 --- a/WebLab/Protocolos/ProcesaRenaper.aspx.cs +++ b/WebLab/Protocolos/ProcesaRenaper.aspx.cs @@ -12,7 +12,7 @@ using System.Web.Script.Serialization; using Business.Data; using NHibernate; -using Business.Data.Laboratorio; +using Business.Data.Laboratorio; using NHibernate.Expression; using System.Collections; using System.Data; @@ -24,6 +24,7 @@ using System.Net.Http; using System.Security.Cryptography.X509Certificates; using System.Security.Cryptography; +using Newtonsoft.Json; namespace WebLab.Protocolos { @@ -280,7 +281,8 @@ protected void Page_Load(object sender, EventArgs e) if (!conOK)// si no funcionó la conexion con renaper se fija se está activado MPI if (oCon.ConectaMPI) { - conOK = SolicitarServicioMPI(); + // conOK = SolicitarServicioMPI(); + conOK = ConectarMPIXRoad(); if (!conOK) HabilitaCargaManual(); } @@ -289,7 +291,8 @@ protected void Page_Load(object sender, EventArgs e) { if (oCon.ConectaMPI) { - conOK = SolicitarServicioMPI(); + conOK = ConectarMPIXRoad(); + ///conOK = SolicitarServicioMPI(); if (!conOK) HabilitaCargaManual(); } @@ -767,6 +770,158 @@ private bool SolicitarServicio() return ok; } + private bool ConectarMPIXRoad() + { + bool ok = false; + try + { + string tipo = "MPI"; + imgAndes.Visible = false; + imgRenaper.Visible = false; lblFechaDomicilio.Visible = false; + GrabarLogAcceso(tipo, Request["dni"].ToString()); + + long nrodocumento = long.Parse(Request["dni"].ToString()); + // string sexo = Request["sexo"].ToString(); + + string rutaCert = ConfigurationManager.AppSettings["RutaCert"].ToString(); + string BaseUrl = "https://xroadss.andes.gob.ar/r1/OPTIC/GOB/GOB00008/GP-SALUD/MPI";///ConfigurationManager.AppSettings["BaseUrlXroad"].ToString(); + string Serv = "?identifier=http://www.renaper.gob.ar;";// GP-RENAPER/WS_RENAPER_DOCUMENTO/"; + string clie = "OPTIC/GOB/GOB00008/GP-SALUD";//ConfigurationManager.AppSettings["ClienteXroad"].ToString();//"OPTIC/GOB/GOB00008/GP-SALUD/MPI";// + string param = nrodocumento.ToString(); ///+ "/" + sexo.ToUpper(); + string host = BaseUrl + Serv + param; + + ServicePointManager.Expect100Continue = true; + ServicePointManager.ServerCertificateValidationCallback = (snder, cert, chain, error) => true; + // ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3; + ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; + + HttpWebRequest req = (HttpWebRequest)WebRequest.Create(host); + + //certificado + X509Certificate certificate = new X509Certificate(rutaCert, "", X509KeyStorageFlags.Exportable | X509KeyStorageFlags.MachineKeySet + | X509KeyStorageFlags.PersistKeySet); + + req.ClientCertificates = new X509CertificateCollection() { certificate }; + req.ContentType = "application/json"; + req.AllowAutoRedirect = true; + req.Timeout = 10 * 1000; + req.Method = "GET"; + req.Headers.Add("X-Road-Client", clie); + + + + + using (WebResponse response = req.GetResponse()) + { + JavaScriptSerializer jsonSerializer = new JavaScriptSerializer(); + + using (Stream strReader = response.GetResponseStream()) + { + + using (StreamReader objReader = new StreamReader(strReader)) + { + + string responseBody = objReader.ReadToEnd(); + + var lista = JsonConvert.DeserializeObject>(responseBody); + var resultado2 = lista?.FirstOrDefault(); + + if (resultado2 != null) + { + lblValidador.Visible = true; + lblValidador.Text = "Paciente VALIDADO POR " + tipo; + ok = true; + + txtDNI.Text = Request["dni"]?.ToString(); + + // Nombre y apellido + var nombreData = resultado2.Name?.FirstOrDefault(); + txtApellido.Text = nombreData?.Family?.FirstOrDefault()?.ToUpper() ?? ""; + txtNombre.Text = string.Join(" ", nombreData?.Given ?? new List()).ToUpper(); + + // Fecha nacimiento + txtFechaNacimiento.Value = resultado2.BirthDate.ToString("dd/MM/yyyy"); + + // Domicilio (toma el primero) + var direccion = resultado2.Address?.FirstOrDefault(); + + txtCalle.Value = direccion?.Line?.FirstOrDefault() ?? "SIN DATOS"; + txtCiudad.Value = string.IsNullOrEmpty(direccion?.City) ? "SIN DATOS" : direccion.City; + txtProvincia.Value = string.IsNullOrEmpty(direccion?.State) ? "SIN DATOS" : direccion.State; + txtPais.Value = string.IsNullOrEmpty(direccion?.Country) ? "SIN DATOS" : direccion.Country; + txtCodigoPostal.Value = string.IsNullOrEmpty(direccion?.PostalCode) ? "SIN DATOS" : direccion.PostalCode; + + // CUIL + txtCuil.Value = resultado2.Identifier? + .FirstOrDefault(x => x.System.Contains("cuil"))?.Value ?? ""; + + // Campos que ya no existen en este JSON + txtBarrio.Value = "SIN DATOS"; + fallecimiento.Text = ""; + fechaDomicilio.Text = ""; + + txtTelefono.Value = resultado2.Telecom? + .Where(x => x.System == "phone") + .OrderBy(x => x.Rank) + .FirstOrDefault() + ?.Value ?? "SIN DATOS"; + + var sexo = resultado2.Gender?.ToLower(); + + if (sexo == "female") + { + txtSexo.Value = "FEMENINO"; + ddlSexo.SelectedValue = "2"; + } + else if (sexo == "male") + { + txtSexo.Value = "MASCULINO"; + ddlSexo.SelectedValue = "3"; + } + else if (sexo == "other") + { + txtSexo.Value = "X"; + ddlSexo.SelectedValue = "0"; + } + else + { + txtSexo.Value = "SIN DATOS"; + ddlSexo.SelectedValue = "0"; + } + /// traer al paciente si no es nuevo, es modificacion + int id = Convert.ToInt32(Request.QueryString["id"]); + //datos del Paciente + Paciente pac = new Paciente(); + if (id != 0) pac = (Paciente)pac.Get(typeof(Paciente), id); + txtTelefono.Value = pac.InformacionContacto; + + + } + else + ok = false; + + + + } + response.Close(); + } + + } + + + } + catch (WebException ex) + { + ok = false; + string mensaje = ex.ToString(); + + } + + + return ok; + + } + public void GrabarLogAcceso(string servicio, string dni) { try @@ -792,6 +947,83 @@ INSERT INTO LAB_LogAccesoServicio { } } + public class ResultadoMPIModel + { + [JsonProperty("resourceType")] + public string ResourceType { get; set; } + + [JsonProperty("identifier")] + public List Identifier { get; set; } + + [JsonProperty("active")] + public bool Active { get; set; } + + [JsonProperty("name")] + public List Name { get; set; } + + [JsonProperty("telecom")] + public List Telecom { get; set; } + + [JsonProperty("gender")] + public string Gender { get; set; } + + [JsonProperty("birthDate")] + public DateTime BirthDate { get; set; } + + [JsonProperty("address")] + public List Address { get; set; } + } + public class IdentifierRenaper + { + [JsonProperty("system")] + public string System { get; set; } + + [JsonProperty("value")] + public string Value { get; set; } + } + public class NameRenaper + { + [JsonProperty("use")] + public string Use { get; set; } + + [JsonProperty("text")] + public string Text { get; set; } + + [JsonProperty("family")] + public List Family { get; set; } + + [JsonProperty("given")] + public List Given { get; set; } + } + public class TelecomRenaper + { + [JsonProperty("system")] + public string System { get; set; } // phone, email + + [JsonProperty("value")] + public string Value { get; set; } + + [JsonProperty("rank")] + public int Rank { get; set; } + } + public class AddressRenaper + { + [JsonProperty("line")] + public List Line { get; set; } + + [JsonProperty("city")] + public string City { get; set; } + + [JsonProperty("state")] + public string State { get; set; } + + [JsonProperty("postalCode")] + public string PostalCode { get; set; } + + [JsonProperty("country")] + public string Country { get; set; } + } + protected void btnConfirmar_Click(object sender, EventArgs e) { if (validadatos()) @@ -799,15 +1031,10 @@ protected void btnConfirmar_Click(object sender, EventArgs e) { if (validamail()) { - //Configuracion oC = new Configuracion(); - - //oC = (Configuracion)oC.Get(typeof(Configuracion), 1); // "IdEfector", oUser.IdEfector); - + Utility oUtil = new Utility(); - ////instancio el usuario - //Usuario us = new Usuario(); - //us = (Usuario)us.Get(typeof(Usuario), int.Parse(Session["idUsuario"].ToString())); + int id = Convert.ToInt32(Request.QueryString["id"]); //datos del Paciente diff --git a/WebLab/Protocolos/ProtocoloEdit2.aspx.cs b/WebLab/Protocolos/ProtocoloEdit2.aspx.cs index e3942200..26e0d81c 100644 --- a/WebLab/Protocolos/ProtocoloEdit2.aspx.cs +++ b/WebLab/Protocolos/ProtocoloEdit2.aspx.cs @@ -3649,71 +3649,7 @@ private void SelectedEfector() } - //private void CargarSolicitantesInternos() - //{ - // Utility oUtil = new Utility(); - // ///Carga de combos de Medicos Solicitantes - // string m_ssql = "SELECT idProfesional, apellido + ' ' + nombre AS nombre FROM Sys_Profesional ORDER BY apellido, nombre "; - // oUtil.CargarCombo(ddlEspecialista, m_ssql, "idProfesional", "nombre"); - // ddlEspecialista.Items.Insert(0, new ListItem("No identificado", "0")); - // ddlEspecialista.UpdateAfterCallBack = true; - // //imgCrearSolicitante.Visible = false; - // //imgCrearSolicitante.UpdateAfterCallBack = true; - //} - - //private void CargarSolicitantesExternos(string m_solicitante) - //{ - // Utility oUtil = new Utility(); - - // ///Carga de combos de solicitantes expertos - // string m_ssql = "select idSolicitanteExterno, apellido + ', ' + nombre as nombre from Lab_SolicitanteExterno where baja=0 order by apellido, nombre"; - // oUtil.CargarCombo(ddlEspecialista, m_ssql, "idSolicitanteExterno", "nombre"); - // ddlEspecialista.Items.Insert(0, new ListItem("No identificado", "0")); - // if (m_solicitante != "") ddlEspecialista.SelectedValue = m_solicitante; - // ddlEspecialista.UpdateAfterCallBack = true; - // //imgCrearSolicitante.Visible = true; - // //imgCrearSolicitante.UpdateAfterCallBack = true; - //} - - //protected void btnGuardarSolicitante_Click(object sender, EventArgs e) - //{ - // if (Page.IsValid) - // { - // GuardarSolicitanteExterno(); - - // LimpiarDatosSolicitante(); - // //Panel1.Visible = false; - // //Panel1.UpdateAfterCallBack = true; - // } - //} - - //private void GuardarSolicitanteExterno() - //{ - // Usuario oUser = new Usuario(); - // SolicitanteExterno oRegistro = new SolicitanteExterno(); - // Configuracion oC = new Configuracion(); oC = (Configuracion)oC.Get(typeof(Configuracion), "IdConfiguracion", 1); - // oRegistro.IdEfector = oC.IdEfector; - // oRegistro.Matricula = txtMatricula.Text; - // oRegistro.Apellido = txtApellidoSolicitante.Text; - // oRegistro.Nombre = txtNombreSolicitante.Text; - // oRegistro.IdUsuarioRegistro = (Usuario)oUser.Get(typeof(Usuario), int.Parse(Session["idUsuario"].ToString())); - // oRegistro.FechaRegistro = DateTime.Now; - // oRegistro.Save(); - // CargarSolicitantesExternos(oRegistro.IdSolicitanteExterno.ToString()); - //} - - //protected void btnCancelarSolicitante_Click(object sender, EventArgs e) - //{ - // LimpiarDatosSolicitante(); - - //} - - //private void LimpiarDatosSolicitante() - //{ - // txtMatricula.Text = ""; - // txtApellidoSolicitante.Text = ""; - // txtNombreSolicitante.Text = ""; - //} + protected void gvLista_SelectedIndexChanged(object sender, EventArgs e) { @@ -3859,18 +3795,7 @@ private void BuscarNombreDiagnostico() ISession m_session = NHibernateHttpModule.CurrentSession; if (oC.NomencladorDiagnostico == 0) { - //ICriteria crit = m_session.CreateCriteria(typeof(Cie10)); - //crit.Add(Expression.Sql(" Nombre like '%" + txtNombreDiagnostico.Text + "%' order by Nombre")); - - //IList items = crit.List(); - - //foreach (Cie10 oDiagnostico in items) - //{ - // ListItem oDia = new ListItem(); - // oDia.Text = oDiagnostico.Codigo + " - " + oDiagnostico.Nombre; - // oDia.Value = oDiagnostico.Id.ToString(); - // lstDiagnosticos.Items.Add(oDia); - //} + string m_strSQL = @"select id, codigo + ' -' + nombre from sys_cie10 (nolock) where tipo='DIAG' and Nombre like '%" + txtNombreDiagnostico.Text.Trim() + "%' order by Nombre"; @@ -4618,17 +4543,7 @@ private bool VerificaObligatoriedadFIS() } - //private bool VerificarFechaPacienteMuestra() - //{ - // Paciente oPaciente = new Paciente(); - // oPaciente = (Paciente)oPaciente.Get(typeof(Paciente), int.Parse(HFIdPaciente.Value)); - - // string tieneingreso = oPaciente.GetFechaProtocolosReciente(Request["idServicio"].ToString(),ddlMuestra.SelectedValue); - // if (tieneingreso==txtFecha.Value) return false; - // else return true; - //} - - + private bool VerificarAnalisisComplejosContenidos(string listaCodigo) @@ -4666,17 +4581,6 @@ private bool VerificarAnalisisComplejosContenidos(string listaCodigo) - //protected void lnkReimprimirComprobante_Click(object sender, EventArgs e) - //{ - // Business.Data.Laboratorio.Protocolo oRegistro = new Business.Data.Laboratorio.Protocolo(); - // oRegistro = (Business.Data.Laboratorio.Protocolo)oRegistro.Get(typeof(Business.Data.Laboratorio.Protocolo), int.Parse(Request["idProtocolo"].ToString())); - - // ////Imprimir Comprobante para el paciente - // Imprimir(oRegistro); - - - - //} protected void lnkReimprimirCodigoBarras_Click(object sender, EventArgs e) { @@ -4752,15 +4656,7 @@ private void Avanzar(int avance) } } - } - //if (avance == 1) - //{ - // ProtocoloNuevo = ProtocoloActual+1; - //} - //else //retrocede - // ProtocoloNuevo = ProtocoloActual - 1; - - + } ISession m_session = NHibernateHttpModule.CurrentSession; ICriteria crit = m_session.CreateCriteria(typeof(Protocolo)); diff --git a/WebLab/Resultados/ResultadoBusqueda.aspx b/WebLab/Resultados/ResultadoBusqueda.aspx index 06d8bd7a..4bb0fd69 100644 --- a/WebLab/Resultados/ResultadoBusqueda.aspx +++ b/WebLab/Resultados/ResultadoBusqueda.aspx @@ -349,7 +349,7 @@ -

+


diff --git a/WebLab/Resultados/ResultadoEdit2.aspx b/WebLab/Resultados/ResultadoEdit2.aspx index 63d0c042..dbeda29e 100644 --- a/WebLab/Resultados/ResultadoEdit2.aspx +++ b/WebLab/Resultados/ResultadoEdit2.aspx @@ -728,7 +728,7 @@ - + diff --git a/WebLab/Resultados/ResultadoView.aspx b/WebLab/Resultados/ResultadoView.aspx index d9fb1dce..80b242d0 100644 --- a/WebLab/Resultados/ResultadoView.aspx +++ b/WebLab/Resultados/ResultadoView.aspx @@ -336,8 +336,11 @@ - - + + +
 
+ + @@ -354,6 +357,8 @@ > + + @@ -368,10 +373,10 @@
- + <%-- - + --%> @@ -380,7 +385,7 @@ -

 

+

@@ -448,8 +453,8 @@ - + <%-- --%> diff --git a/WebLab/Resultados/ResultadoView.aspx.cs b/WebLab/Resultados/ResultadoView.aspx.cs index 1f0eb12c..f0884e4e 100644 --- a/WebLab/Resultados/ResultadoView.aspx.cs +++ b/WebLab/Resultados/ResultadoView.aspx.cs @@ -88,11 +88,7 @@ protected void Page_PreInit(object sender, EventArgs e) } } - //protected void Page_UnLoad(object sender, EventArgs e) - //{ - // oCr.Dispose(); - //} - + protected void Page_Load(object sender, EventArgs e) { @@ -115,7 +111,7 @@ private void Inicializar() pnlAntecedentes.Visible = false; - pnlHC.Visible = true; + // pnlHC.Visible = true; if (Session["validado"].ToString() == "1") lblTitulo.Text = "HISTORIAL DE RESULTADOS"; else @@ -206,14 +202,9 @@ private void CargarGrilla() if (Request["Operacion"].ToString() == "HC") m_strSQL += " order by idProtocolo desc "; // desde el mas reciente al mas antiguo. - else - { - // Configuracion oC = new Configuracion(); oC = (Configuracion)oC.Get(typeof(Configuracion), "IdConfiguracion", 1); - //if (oC.TipoNumeracionProtocolo == 0) - m_strSQL += " order by idProtocolo "; - //if (oC.TipoNumeracionProtocolo == 1) m_strSQL += " order by numerodiario "; - //if (oC.TipoNumeracionProtocolo == 2) m_strSQL += " order by prefijosector, numerosector "; - } + else + m_strSQL += " order by idProtocolo "; + DataSet Ds = new DataSet(); @@ -273,18 +264,16 @@ private void MuestraDatos(string p) if (oRegistro != null) { - //Configuracion oCon = new Configuracion(); - //oCon = (Configuracion)oCon.Get(typeof(Configuracion), "IdEfector", oRegistro.IdEfector); - //Image1.= oRegistro.getQRResultados(oCon); - + HFIdProtocolo.Value = p; //Actualiza los datos de los objetos : alta o modificacion . lblEfector.Text = oRegistro.IdEfector.Nombre; oRegistro.GrabarAuditoriaProtocolo("Consulta", int.Parse(Session["idUsuario"].ToString())); - if (oRegistro.tieneAdjuntoProtocoloVisible()) - { imgAdjunto.Visible = true; spanadjunto.Visible = true; } - else - { imgAdjunto.Visible = false; spanadjunto.Visible = false; } + + + bool tieneAdjunto = oRegistro.tieneAdjuntoProtocoloVisible(); + imgAdjunto.Visible = tieneAdjunto; + spanadjunto.Visible = tieneAdjunto; if ((oRegistro.IdTipoServicio.IdTipoServicio == 3) || (oRegistro.IdTipoServicio.IdTipoServicio == 5)) //Microbiologia @@ -313,7 +302,7 @@ private void MuestraDatos(string p) lblCovid.Visible = true; Caracter oCaracter = new Caracter(); oCaracter = (Caracter)oCaracter.Get(typeof(Caracter), oRegistro.IdCaracter); - lblCovid.Text = "Clasificación Covid-19: " + oCaracter.Nombre; + lblCovid.Text = "Clasificación SNVS: " + oCaracter.Nombre; if (oRegistro.FechaInicioSintomas.Year != 1900) lblCovid.Text = lblCovid.Text + " - F. Inicio Síntomas: " + oRegistro.FechaInicioSintomas.ToShortDateString(); @@ -368,28 +357,17 @@ private void MuestraDatos(string p) lblUsuario.Text = oRegistro.IdUsuarioRegistro.Apellido; lblFechaRegistro.Text = oRegistro.FechaRegistro.ToShortDateString() + " " + oRegistro.FechaRegistro.ToShortTimeString(); - //int len = oRegistro.FechaRegistro.ToString().Length - 11; - //lblHoraRegistro.Text = oRegistro.FechaRegistro.ToString().Substring(11, oRegistro.FechaRegistro.ToString().Length - 11); + lblFecha.Text = oRegistro.Fecha.ToShortDateString(); lblProtocolo.Text = oRegistro.Numero.ToString(); - //hplProtocolo.NavigateUrl = "../Protocolos/ProtocoloEdit2.aspx?idServicio=" + oRegistro.IdTipoServicio.IdTipoServicio.ToString()+ "&Operacion=Modifica&idProtocolo=" +oRegistro.IdProtocolo.ToString(); - - //if (oRegistro.IdEfector == oRegistro.IdEfectorSolicitante) - lblOrigen.Text = oRegistro.IdOrigen.Nombre; + lblOrigen.Text = oRegistro.IdOrigen.Nombre; //else lblSolicitante.Text = oRegistro.IdEfectorSolicitante.Nombre; if (oRegistro.MatriculaEspecialista != "-1") lblMedico.Text = oRegistro.Especialista + " MP:" + oRegistro.MatriculaEspecialista; - - //lblPrioridad.Text = oRegistro.IdPrioridad.Nombre; - // if (oRegistro.IdPrioridad.Nombre == "URGENTE") - // { - // lblPrioridad.ForeColor = Color.Red; - // lblPrioridad.Font.Bold = true; - // } - - //lblSector.Text = oRegistro.IdSector.Nombre; + + if (oRegistro.Sala != "") lblOrigen.Text += " Sala: " + oRegistro.Sala; if (oRegistro.Cama != "") lblOrigen.Text += " Cama: " + oRegistro.Cama; @@ -448,14 +426,12 @@ private void MuestraDatos(string p) } - - - + private void LlenarTabla(string p) { - // SqlConnection conn = (SqlConnection)NHibernateHttpModule.CurrentSession.Connection; - SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["SIL_ReadOnly"].ConnectionString); ///Performance: conexion de solo lectura + string conexion = ConfigurationManager.ConnectionStrings["SIL_ReadOnly"].ConnectionString; + SqlConnection conn = new SqlConnection(conexion); ///Performance: conexion de solo lectura DataSet Ds = new DataSet(); SqlCommand cmd = new SqlCommand(); cmd.CommandType = CommandType.StoredProcedure; @@ -467,13 +443,8 @@ private void LlenarTabla(string p) SqlDataAdapter da = new SqlDataAdapter(cmd); - da.Fill(Ds); - - - //int cantidadResultadosValidados = Ds.Tables[0].Rows.Count; - //if (cantidadResultadosValidados > 0) - - //{ + da.Fill(Ds); + string s = System.Globalization.CultureInfo.CurrentCulture.NumberFormat.CurrencyDecimalSeparator; @@ -544,26 +515,12 @@ private void LlenarTabla(string p) else lblCargadoPor.Text = "ESTADO"; - objCellPersona_TITULO.Controls.Add(lblCargadoPor); - - - /////observaciones - //if (Request["Operacion"].ToString() == "Valida") - //{ - - + objCellPersona_TITULO.Controls.Add(lblCargadoPor); objFila_TITULO.Cells.Add(objCellAnalisis_TITULO); - objFila_TITULO.Cells.Add(objCellResultado_TITULO); - - - - - objFila_TITULO.Cells.Add(objCellValoresReferencia_TITULO); - - + objFila_TITULO.Cells.Add(objCellResultado_TITULO); + objFila_TITULO.Cells.Add(objCellValoresReferencia_TITULO); objFila_TITULO.Cells.Add(objCellPersona_TITULO); objFila_TITULO.Cells.Add(objCellResultadoAnterior_TITULO); - objFila_TITULO.CssClass = "myLabelIzquierda"; objFila_TITULO.BackColor = Color.Gainsboro; @@ -576,7 +533,41 @@ private void LlenarTabla(string p) int tablas = Ds.Tables.Count; if (tablas > 0) - { + { + + ////Caro PF: Cache de resultado item + + ISession session = NHibernateHttpModule.CurrentSession; + ///CARO PF: traer detalleprotocolos y derivaciones antes del for para no ir a la base N veces + var idsDetallesList = Ds.Tables[0].AsEnumerable() + .Select(r => r.Field("idDetalleProtocolo")) + .ToList(); + + var detallesList = session.CreateCriteria(typeof(DetalleProtocolo)) + .Add(Expression.In("IdDetalleProtocolo", idsDetallesList.ToArray())) + .List() + .Cast() + .ToList(); + + var detallesDict = detallesList + .ToDictionary(d => d.IdDetalleProtocolo); + + // Traer todas las Derivaciones juntas + var derivacionesList = session.CreateCriteria(typeof(Derivacion)) + .CreateAlias("IdDetalleProtocolo", "dp") + .Add(Expression.In("dp.IdDetalleProtocolo", idsDetallesList.ToArray())) + .List() + .Cast() + .ToList(); + + var derivacionesDict = derivacionesList + .ToDictionary(d => d.IdDetalleProtocolo.IdDetalleProtocolo); + /// CARO PF : fin + + Protocolo oRegistro = new Protocolo(); + oRegistro = (Protocolo)oRegistro.Get(typeof(Business.Data.Laboratorio.Protocolo), int.Parse(p)); + var resultadosAnteriores = oRegistro.ObtenerResultadosAnteriores(conexion); + for (int i = 0; i < Ds.Tables[0].Rows.Count; i++) { //decimal m_minimoReferencia=-1; @@ -630,35 +621,24 @@ private void LlenarTabla(string p) TableCell objCellPersona = new TableCell(); TableCell objCellObservaciones = new TableCell(); - decimal x = 0; - - if (m_area != pivot_Area) ///poner titulo del area { TableRow objRow = new TableRow(); TableCell objCell = new TableCell(); - Label lbl0 = new Label(); - //lbl0.ForeColor = Color + Label lbl0 = new Label(); lbl0.Text = m_area.ToUpper(); lbl0.TabIndex = short.Parse("500"); lbl0.Font.Bold = true; - Master.FindControl("ContentPlaceHolder1").FindControl("Panel1").Controls.Add(lbl0); objCell.Controls.Add(lbl0); - //if (Request["Operacion"].ToString() == "HC") - // objCell.ColumnSpan = 8; - //else objCell.ColumnSpan = 8; - objRow.BackColor = Color.Beige; objRow.HorizontalAlign = HorizontalAlign.Center; - objRow.Cells.Add(objCell); - // objRow.CssClass = "myLabelIzquierda"; + objRow.Cells.Add(objCell); tContenido.Controls.Add(objRow); - pivot_Area = m_area; } @@ -691,20 +671,14 @@ private void LlenarTabla(string p) lblSinMuestra.TabIndex = short.Parse("500"); lblSinMuestra.Text = "Sin Muestra";// +oItem.IdEfectorDerivacion.Nombre; /// Ds.Tables[0].Rows[i].ItemArray[1].ToString(); lblSinMuestra.Font.Italic = true; - lblSinMuestra.ForeColor = Color.Blue; - // objCellResultado.ColumnSpan = 5; + lblSinMuestra.ForeColor = Color.Blue; objCellResultado.Controls.Add(lblSinMuestra); } } - - - Label lbl1 = new Label(); if (m_hijo == m_titulo) lbl1.Text = m_hijo; else lbl1.Text = "   " + m_hijo; - - - + lbl1.TabIndex = short.Parse("500"); lbl1.ForeColor = Color.Black; lbl1.Font.Size = FontUnit.Point(9); @@ -717,6 +691,21 @@ private void LlenarTabla(string p) objCellAnalisis.Controls.Add(lbl1); + + /* var row = Ds.Tables[0].Rows[i]; + int idDetalle = Convert.ToInt32(row["idDetalleProtocolo"]); + */ + DetalleProtocolo oDetalle; + detallesDict.TryGetValue(i_iddetalleProtocolo, out oDetalle); + + Derivacion oDeriva; + derivacionesDict.TryGetValue(i_iddetalleProtocolo, out oDeriva); + //fin + Item oItem = new Item(); + oItem = oDetalle.IdSubItem; // (Item)oItem.Get(typeof(Item), m_idItem); + + + /*antes / DetalleProtocolo oDetalle = new DetalleProtocolo(); oDetalle = (DetalleProtocolo)oDetalle.Get(typeof(DetalleProtocolo), i_iddetalleProtocolo); @@ -725,7 +714,7 @@ private void LlenarTabla(string p) //DetalleProtocolo oDetalle = new DetalleProtocolo(); //oDetalle = (DetalleProtocolo)oDetalle.Get(typeof(DetalleProtocolo), i_iddetalleProtocolo); - + fin antes*/ // bool es_Bacteriologia = false; string observacionesDetalle = ""; @@ -733,11 +722,12 @@ private void LlenarTabla(string p) /// observacionesDetalle = oDetalle.Observaciones; // m_usuariovalida += " " + oDetalle.FechaValida.ToShortDateString(); + + /*antes Derivacion oDeriva = new Derivacion(); oDeriva = (Derivacion)oDeriva.Get(typeof(Derivacion), "IdDetalleProtocolo", oDetalle); - if (oDeriva != null) /// esta pendiente - - //if (oItem.IdEfectorDerivacion != oItem.IdEfector) //es derivado + fin antes*/ + if (oDeriva != null) /// esta pendiente { Label lblDerivacion = new Label(); lblDerivacion.Font.Italic = true; @@ -745,41 +735,11 @@ private void LlenarTabla(string p) //Verifica el estado de la derivacion string estadoDerivacion = ""; - //if (i_iddetalleProtocolo != 0) - //{ - // DetalleProtocolo oDetalle = new DetalleProtocolo(); - // oDetalle = (DetalleProtocolo)oDetalle.Get(typeof(DetalleProtocolo), i_iddetalleProtocolo); - - - - // observacionesDetalle = oDetalle.Observaciones; - // m_usuariovalida += " " + oDetalle.FechaValida.ToShortDateString(); - // Derivacion oDeriva = new Derivacion(); - // oDeriva = (Derivacion)oDeriva.Get(typeof(Derivacion), "IdDetalleProtocolo", oDetalle); - // if (oDeriva == null) /// esta pendiente - // { - // estadoDerivacion = "Pendiente de Derivacion"; - // lblDerivacion.ForeColor = Color.Red; - // } - // else - // { - /* if (oDeriva.Estado == 0) /// pendiente - { - estadoDerivacion = "Pendiente de Derivacion"; - lblDerivacion.ForeColor = Color.Red; - } - if (oDeriva.Estado == 1) /// enviado - estadoDerivacion = oDetalle.ResultadoCar; // "Derivado: " + oItem.GetEfectorDerivacion(oCon.IdEfector); - if (oDeriva.Estado == 2) /// no enviado - estadoDerivacion = oDetalle.ResultadoCar; //" No Derivado. " + oDeriva.Observacion; - lblDerivacion.Font.Bold = true;*/ + estadoDerivacion = oDetalle.ResultadoCar; if (oDeriva.Resultado != "") estadoDerivacion += " - Resultado Informado: " + oDeriva.Resultado; - - //} - - //} + lblDerivacion.Text = estadoDerivacion; objCellResultado.ColumnSpan = 1; @@ -810,9 +770,7 @@ private void LlenarTabla(string p) //if (Request["Operacion"].ToString() != "HC") if (m_conResultado!= "False") { - // DetalleProtocolo oDetalle = new DetalleProtocolo(); - // oDetalle = (DetalleProtocolo)oDetalle.Get(typeof(DetalleProtocolo), i_iddetalleProtocolo); - + Anthem.GridView Gd1 = new Anthem.GridView(); Gd1.ID = m_idItem.ToString(); ProtocoloLuminex oFusion = new ProtocoloLuminex(); @@ -846,11 +804,8 @@ private void LlenarTabla(string p) if (i_iddetalleProtocolo != 0) { - if (i_iddetalleProtocolo != 9999999) - { - //DetalleProtocolo oDetalle = new DetalleProtocolo(); - //oDetalle = (DetalleProtocolo)oDetalle.Get(typeof(DetalleProtocolo), i_iddetalleProtocolo); - + //if (i_iddetalleProtocolo != 9999999) + //{ m_usuariovalida += " " + oDetalle.FechaValida.ToShortDateString(); if (Observaciones != "") { @@ -874,31 +829,32 @@ private void LlenarTabla(string p) if (oDetalle.IdProtocolo.IdTipoServicio.IdTipoServicio!=5) { - string resultadoAnterior = oDetalle.BuscarResultadoAnterior(oDetalle.IdSubItem, oDetalle.IdItem, false); - if (resultadoAnterior != "") - { + //string resultadoAnterior = oDetalle.BuscarResultadoAnterior(oDetalle.IdSubItem, oDetalle.IdItem, false); + + string resultadoAnterior = ""; + + if (resultadosAnteriores.ContainsKey(oDetalle.IdSubItem.IdItem)) + { + resultadoAnterior = resultadosAnteriores[oDetalle.IdSubItem.IdItem]; + } + + if (resultadoAnterior != "") + { hayAntecedente = true; Label olblResultadoAnterior = new Label(); olblResultadoAnterior.TabIndex = short.Parse("500"); olblResultadoAnterior.Font.Size = FontUnit.Point(8); olblResultadoAnterior.CssClass = "myLittleLink"; olblResultadoAnterior.Attributes.Add("onClick", "javascript: AntecedenteView (" + oDetalle.IdSubItem.IdItem.ToString() + "," + oDetalle.IdProtocolo.IdPaciente.IdPaciente.ToString() + ",790,540); return false"); - olblResultadoAnterior.ToolTip = "Haga clic aqui para ver gráfico de evolución"; - //olblResultadoAnterior.ForeColor = Color.Green; - olblResultadoAnterior.Width = Unit.Pixel(20); + olblResultadoAnterior.ToolTip = "Haga clic aqui para ver gráfico de evolución"; + olblResultadoAnterior.Width = Unit.Pixel(30); olblResultadoAnterior.Text = resultadoAnterior; - objCellResultadoAnterior.Controls.Add(olblResultadoAnterior); - //Button oB = new Button(); - //oB.Text = "R.ANT"; - //oB.OnClientClick = "javascript: AntecedenteView (" + oDetalle.IdSubItem.IdItem.ToString() + "," + oDetalle.IdProtocolo.IdPaciente.IdPaciente.ToString() + "); return false"; - //objCellResultadoAnterior.Controls.Add(oB); - } + } - } - // if (VerificaValorReferencia(m_minimoReferencia, m_maximoReferencia, x, m_tipoValorReferencia)) + } if (oDetalle.VerificaValorReferencia(x)) olbl.ForeColor = Color.Black; else @@ -924,7 +880,7 @@ private void LlenarTabla(string p) - if (oDetalle.tieneAdjuntoVisible())//tiene observaciones + if (oDetalle.tieneAdjuntoVisible())//Caro: falta mejorar esto { imgAdj = true; btnImagen.TabIndex = short.Parse("500"); @@ -942,22 +898,15 @@ private void LlenarTabla(string p) - } + //} } objCellResultado.Controls.Add(olbl); if (imgAdj)objCellResultado.Controls.Add(btnImagen); ///etiqueta de unidad de medida - Label olblUM = new Label(); - - - // olblUM.ID = "UM" + m_idItem.ToString(); + Label olblUM = new Label(); olblUM.Font.Size = FontUnit.Point(7); - olblUM.Text = unMedida; - - - - + olblUM.Text = unMedida; objCellResultado.Controls.Add(olblUM); olblUM.Visible = false; @@ -986,11 +935,7 @@ private void LlenarTabla(string p) } - ///IMAGENES ADJUNTAS - - - - + ///IMAGENES ADJUNTAS // fin de imagenes adjuntas @@ -998,15 +943,22 @@ private void LlenarTabla(string p) if ((i_iddetalleProtocolo != 0) ) { - if (i_iddetalleProtocolo != 9999999) - { + //if (i_iddetalleProtocolo != 9999999) + //{ //DetalleProtocolo oDetalle = new DetalleProtocolo(); //oDetalle = (DetalleProtocolo)oDetalle.Get(typeof(DetalleProtocolo), i_iddetalleProtocolo); m_usuariovalida += " " + oDetalle.FechaValida.ToShortDateString(); if (oDetalle.IdProtocolo.IdTipoServicio.IdTipoServicio != 5) { - string resultadoAnterior = oDetalle.BuscarResultadoAnterior(oDetalle.IdSubItem, oDetalle.IdItem, false); + //string resultadoAnterior = oDetalle.BuscarResultadoAnterior(oDetalle.IdSubItem, oDetalle.IdItem, false); + string resultadoAnterior = ""; + + if (resultadosAnteriores.ContainsKey(oDetalle.IdSubItem.IdItem)) + { + resultadoAnterior = resultadosAnteriores[oDetalle.IdSubItem.IdItem]; + } + if (resultadoAnterior != "") { hayAntecedente = true; @@ -1017,32 +969,25 @@ private void LlenarTabla(string p) olblResultadoAnterior.Attributes.Add("onClick", "javascript: AntecedenteView (" + oDetalle.IdSubItem.IdItem.ToString() + "," + oDetalle.IdProtocolo.IdPaciente.IdPaciente.ToString() + ",790,450); return false"); olblResultadoAnterior.ToolTip = "Haga clic aqui para ver más datos."; //olblResultadoAnterior.ForeColor = Color.Green; - olblResultadoAnterior.Width = Unit.Pixel(20); + olblResultadoAnterior.Width = Unit.Pixel(30); olblResultadoAnterior.Text = resultadoAnterior; - objCellResultadoAnterior.Controls.Add(olblResultadoAnterior); - //Button oB = new Button(); - //oB.Text = "R.ANT"; - //oB.OnClientClick = "javascript: AntecedenteView (" + oDetalle.IdSubItem.IdItem.ToString() + "," + oDetalle.IdProtocolo.IdPaciente.IdPaciente.ToString() + "); return false"; - //objCellResultadoAnterior.Controls.Add(oB); + } } if (oDetalle.tieneAdjuntoVisible())//tiene observaciones - { - // ImageButton btnImagen = new ImageButton(); + { btnImagen.TabIndex = short.Parse("500"); btnImagen.ID = "IMG" + oDetalle.IdDetalleProtocolo.ToString(); btnImagen.ImageUrl = "~/App_Themes/default/images/obs_validado.png"; - btnImagen.ToolTip = "Adjunto imprimible para " + lbl1.Text.Replace(" ", ""); - btnImagen.Attributes.Add("onClick", "javascript: AdjuntoEdit (" + oDetalle.IdDetalleProtocolo.ToString() + "," + oDetalle.IdProtocolo.IdTipoServicio.IdTipoServicio.ToString() + ",'" + Request["Operacion"].ToString() + "'); return false"); objCellResultado.Controls.Add(btnImagen); } } - } + //} } // fin case 1 break; @@ -1050,39 +995,26 @@ private void LlenarTabla(string p) }//fin swicth - - - Label lblPersona = new Label(); - // lblPersona.TabIndex = short.Parse("500"); - lblPersona.Text = m_usuariovalida; /// Ds.Tables[0].Rows[i].ItemArray[1].ToString(); - - + Label lblPersona = new Label(); + lblPersona.Text = m_usuariovalida; /// lblPersona.Font.Size = FontUnit.Point(7); lblPersona.Font.Italic = true; lblPersona.Text = m_usuariovalida ; - - objCellPersona.Controls.Add(lblPersona); - - + objCellPersona.Controls.Add(lblPersona); } - Label lblValoresReferencia = new Label(); - - // lblValoresReferencia.ID = "VR" + m_idItem.ToString(); + Label lblValoresReferencia = new Label(); lblValoresReferencia.Font.Italic = true; lblValoresReferencia.Font.Size = FontUnit.Point(8); if (valorReferencia != "") {// muestra el valor guardado lblValoresReferencia.Text = valorReferencia; - if (m_metodo != "") - // lblValoresReferencia.Text += " |Método:" + m_metodo; + if (m_metodo != "") lblValoresReferencia.Text += Environment.NewLine + m_metodo; - } - //else - // lblValoresReferencia.Text = oDetalle.CalcularValoresReferencia(); + } objCellValoresReferencia.Controls.Add(lblValoresReferencia); } @@ -1091,30 +1023,21 @@ private void LlenarTabla(string p) ///Definir los anchos de las columnas objCellAnalisis.Width = Unit.Percentage(30); - objCellResultado.Width = Unit.Percentage(30); + objCellResultado.Width = Unit.Percentage(25); objCellValoresReferencia.Width = Unit.Percentage(20); // objCellValida.Width = Unit.Percentage(5); - objCellPersona.Width = Unit.Percentage(20); - + objCellPersona.Width = Unit.Percentage(15); + objCellResultadoAnterior.Width = Unit.Percentage(10); /////////////////////// ///agrega a la fila cada una de las celdas objFila.Cells.Add(objCellAnalisis); - objFila.Cells.Add(objCellResultado); - - //if (Request["Operacion"].ToString() != "HC") objFila.Cells.Add(objCellUnMedida); - - objFila.Cells.Add(objCellValoresReferencia); - - //if ((Request["Operacion"].ToString() == "Valida") || (Request["Operacion"].ToString() == "Control")) objFila.Cells.Add(objCellValida); - + objFila.Cells.Add(objCellResultado); + objFila.Cells.Add(objCellValoresReferencia); objFila.Cells.Add(objCellPersona); - objFila.Cells.Add(objCellResultadoAnterior); - //if (Request["Operacion"].ToString() != "HC") objFila.Cells.Add(objCellObservaciones); - - ////// + ////// Master.FindControl("ContentPlaceHolder1").FindControl("Panel1").Controls.Add(tContenido); //'añadimos la fila a la tabla @@ -1142,11 +1065,7 @@ private void LlenarTablaATB(string p) da.Fill(Ds); - - //int cantidadResultadosValidados = Ds.Tables[0].Rows.Count; - //if (cantidadResultadosValidados > 0) - - //{ + string s = System.Globalization.CultureInfo.CurrentCulture.NumberFormat.CurrencyDecimalSeparator; @@ -1196,43 +1115,13 @@ private void LlenarTablaATB(string p) for (int i = 0; i < Ds.Tables[0].Rows.Count; i++) { - //decimal m_minimoReferencia=-1; - //decimal m_maximoReferencia=-1; - // string valorReferencia = Ds.Tables[0].Rows[i].ItemArray[11].ToString(); - // int m_idItem = int.Parse(Ds.Tables[0].Rows[i].ItemArray[2].ToString()); - // int m_idMecanismo = int.Parse(Ds.Tables[0].Rows[i].ItemArray[3].ToString()); - // string unMedida = Ds.Tables[0].Rows[i].ItemArray[8].ToString(); - // string Observaciones = Ds.Tables[0].Rows[i].ItemArray[5].ToString(); + int tiporesultado = (int.Parse(Ds.Tables[0].Rows[i].ItemArray[4].ToString())); - // int tipodeterminacion = int.Parse(Ds.Tables[0].Rows[i].ItemArray[6].ToString()); - // int estado = int.Parse(Ds.Tables[0].Rows[i].ItemArray[9].ToString()); - // string m_metodo = Ds.Tables[0].Rows[i].ItemArray[10].ToString(); - - // string m_observacionReferencia = Ds.Tables[0].Rows[i].ItemArray[13].ToString(); - // string m_usuarioCarga = Ds.Tables[0].Rows[i].ItemArray[14].ToString(); - // string m_trajoMuestra = Ds.Tables[0].Rows[i].ItemArray[15].ToString(); - // string m_tipoValorReferencia = Ds.Tables[0].Rows[i].ItemArray[16].ToString(); - // string m_conResultado = Ds.Tables[0].Rows[i].ItemArray[17].ToString(); - // string m_formatoDecimal = Ds.Tables[0].Rows[i].ItemArray[18].ToString(); - //string m_formato0 = Ds.Tables[0].Rows[i].ItemArray[19].ToString(); - //string m_formato1 = Ds.Tables[0].Rows[i].ItemArray[20].ToString(); - //string m_formato2 = Ds.Tables[0].Rows[i].ItemArray[21].ToString(); - //string m_formato3 = Ds.Tables[0].Rows[i].ItemArray[22].ToString(); - //string m_formato4 = Ds.Tables[0].Rows[i].ItemArray[23].ToString(); - //string m_resultadoDefecto = Ds.Tables[0].Rows[i].ItemArray[24].ToString(); - // string m_usuariocontrol = Ds.Tables[0].Rows[i].ItemArray[25].ToString(); + string m_usuariovalida = Ds.Tables[0].Rows[i].ItemArray[5].ToString(); - // int i_iddetalleProtocolo = int.Parse(Ds.Tables[0].Rows[i].ItemArray[26].ToString()); - //string m_codificaPaciente = Ds.Tables[0].Rows[i].ItemArray[27].ToString(); - - // string m_estadoObservacion = Ds.Tables[0].Rows[i].ItemArray[29].ToString(); + string m_area = "ATB";//Ds.Tables[0].Rows[i].ItemArray[30].ToString(); - - //if (m_codificaPaciente == "True") - //{ - // lblPaciente.Visible = false; - // lblCodigoPaciente.Visible = true; - //} + m_hijo = Ds.Tables[0].Rows[i].ItemArray[2].ToString(); @@ -1257,24 +1146,19 @@ private void LlenarTablaATB(string p) { TableRow objRow = new TableRow(); TableCell objCell = new TableCell(); - Label lbl0 = new Label(); - //lbl0.ForeColor = Color + Label lbl0 = new Label(); lbl0.Text = m_area.ToUpper(); lbl0.TabIndex = short.Parse("500"); lbl0.Font.Bold = true; Master.FindControl("ContentPlaceHolder1").FindControl("Panel1").Controls.Add(lbl0); - objCell.Controls.Add(lbl0); - //if (Request["Operacion"].ToString() == "HC") - // objCell.ColumnSpan = 8; - //else + objCell.Controls.Add(lbl0); objCell.ColumnSpan = 8; objRow.BackColor = Color.Beige; objRow.HorizontalAlign = HorizontalAlign.Center; - objRow.Cells.Add(objCell); - // objRow.CssClass = "myLabelIzquierda"; + objRow.Cells.Add(objCell); tContenido.Controls.Add(objRow); pivot_Area = m_area; @@ -1317,45 +1201,26 @@ private void LlenarTablaATB(string p) lbl1.TabIndex = short.Parse("500"); lbl1.ForeColor = Color.Black; lbl1.Font.Size = FontUnit.Point(9); - //if (tipodeterminacion != 0) - //{ + lbl1.Font.Bold = true; lbl1.Font.Italic = true; objCellAnalisis.ColumnSpan = 1; - //} + objCellAnalisis.Controls.Add(lbl1); - - //if (tipodeterminacion == 0) // si es una determinacion simple - //{ Label olbl = new Label(); olbl.Font.Bold = true; olbl.Font.Size = FontUnit.Point(9); - //if (m_conResultado == "0") - // olbl.Text = ""; - //else olbl.Text = Ds.Tables[0].Rows[i].ItemArray[3].ToString(); - //if (Observaciones != "") - //{ - // if (olbl.Text == "") - // olbl.Text += Observaciones; - // else - // olbl.Text += Environment.NewLine + " " + Observaciones; - - //} - objCellResultado.Controls.Add(olbl); - - //DetalleProtocolo oDetalle = new DetalleProtocolo(); - //oDetalle = (DetalleProtocolo)oDetalle.Get(typeof(DetalleProtocolo), i_iddetalleProtocolo); - + m_usuariovalida += " "; //+ fefecha validad @@ -1364,8 +1229,7 @@ private void LlenarTablaATB(string p) - Label lblPersona = new Label(); - // lblPersona.TabIndex = short.Parse("500"); + Label lblPersona = new Label(); lblPersona.Text = m_usuariovalida; /// Ds.Tables[0].Rows[i].ItemArray[1].ToString(); @@ -1378,27 +1242,7 @@ private void LlenarTablaATB(string p) objCellPersona.Controls.Add(lblPersona); - - - ///no se usa valor referencia con los ATB - //Label lblValoresReferencia = new Label(); - - //// lblValoresReferencia.ID = "VR" + m_idItem.ToString(); - //lblValoresReferencia.Font.Italic = true; - //lblValoresReferencia.Font.Size = FontUnit.Point(8); - //if (valorReferencia != "") - //{// muestra el valor guardado - // lblValoresReferencia.Text = valorReferencia; - // if (m_metodo != "") - // // lblValoresReferencia.Text += " |Método:" + m_metodo; - // lblValoresReferencia.Text += Environment.NewLine + m_metodo; - //} - ////else - //// lblValoresReferencia.Text = oDetalle.CalcularValoresReferencia(); - - //objCellValoresReferencia.Controls.Add(lblValoresReferencia); - //} - + ///Definir los anchos de las columnas @@ -1447,10 +1291,6 @@ private void Imprimir(Protocolo oProtocolo, string tipo) Configuracion oCon = new Configuracion(); oCon = (Configuracion)oCon.Get(typeof(Configuracion),"IdEfector", oProtocolo.IdEfector); - // CrystalReportSource oCr = new CrystalReportSource(); - //oCr.Report.FileName = ""; - //oCr.CacheDuration =10000; - //oCr.EnableCaching = true; string parametroPaciente = ""; string parametroProtocolo = ""; @@ -1672,7 +1512,7 @@ protected void gvLista_RowDataBound(object sender, GridViewRowEventArgs e) string idProtocolo= this.gvLista.DataKeys[e.Row.RowIndex].Value.ToString(); - string s_detalle = e.Row.Cells[0].Text + ": " + getDetalleProtocolo(idProtocolo); + string s_detalle = e.Row.Cells[0].Text;// + ": " + getDetalleProtocolo(idProtocolo); e.Row.Cells[0].ToolTip = s_detalle; e.Row.Cells[1].ToolTip = s_detalle; @@ -1699,22 +1539,7 @@ private bool AnalizarLimites(string p) throw new NotImplementedException(); } - private bool estaVisibleControl(string idarea) - { - bool visible=true; - //if (HidArea.Value == "0") - // visible = true; - //else - //{ - // if (idarea == HidArea.Value) - // visible = true; - // else - // visible = false; - //} - return visible; - - } - + @@ -1784,84 +1609,8 @@ protected void lnkAuditoria_Click(object sender, EventArgs e) - protected void lnkMarcar_Click(object sender, EventArgs e) - { - - Marcar(true); - - } - - private void Marcar(bool p) - { - - CheckBox chk; - - - if (Page.Master != null) - { - foreach (Control control in Page.Master.Controls) - { - if (control is HtmlForm) - { - foreach (Control controlform in control.Controls) - { - if (controlform is ContentPlaceHolder) - { - foreach (Control control1 in controlform.Controls) - { - if (control1 is Panel) - foreach (Control control2 in control1.Controls) - { - if (control2 is Table) - foreach (Control control3 in control2.Controls) - { - - if (control3 is TableRow) - foreach (Control control4 in control3.Controls) - { - - if (control4 is TableCell) - foreach (Control control5 in control4.Controls) - { - - if (control5 is CheckBox) - { - chk = (CheckBox)control5; - chk.Checked = p; - - - - } - - - } - } - } - } - } - } - } - } - } - } - - } - - protected void lnkDesmarcar_Click(object sender, EventArgs e) - { - Marcar(false); - } - - protected void btnVerAntecendente_Click(object sender, EventArgs e) - { - //if (ddlItem.SelectedValue != "0") - //{ - // Protocolo oProtocolo = new Protocolo(); - // oProtocolo = (Protocolo)oProtocolo.Get(typeof(Protocolo), CurrentPageIndex);//int.Parse(Request["idProtocolo"].ToString()));r(); - // CargarGrillaAntecedentes(oProtocolo); - // SetSelectedTab(TabIndex.THREE); - //} - } + + @@ -1887,35 +1636,35 @@ protected void btnPeticion_Click(object sender, EventArgs e) } - private string getDetalleProtocolo(string idProtocolo) - { - string dev = ""; int i = 0; - Protocolo oRegistro = new Protocolo(); - oRegistro = (Protocolo)oRegistro.Get(typeof(Protocolo), int.Parse(idProtocolo)); - - ISession m_session = NHibernateHttpModule.CurrentSession; - ICriteria crit = m_session.CreateCriteria(typeof(DetalleProtocolo)); - crit.Add(Expression.Eq("IdProtocolo", oRegistro)); - IList items = crit.List(); - foreach (DetalleProtocolo oDet in items) - { - i += 1; - if (dev == "") - dev = oDet.IdItem.Nombre; - else - { - if (dev.IndexOf(oDet.IdItem.Nombre) == -1) - dev = dev + " - " + oDet.IdItem.Nombre; - } - } - //return i.ToString() + ": " + dev; - return dev; - } + //private string getDetalleProtocolo(string idProtocolo) + //{ + // string dev = ""; int i = 0; + // Protocolo oRegistro = new Protocolo(); + // oRegistro = (Protocolo)oRegistro.Get(typeof(Protocolo), int.Parse(idProtocolo)); + + // ISession m_session = NHibernateHttpModule.CurrentSession; + // ICriteria crit = m_session.CreateCriteria(typeof(DetalleProtocolo)); + // crit.Add(Expression.Eq("IdProtocolo", oRegistro)); + // IList items = crit.List(); + // foreach (DetalleProtocolo oDet in items) + // { + // i += 1; + // if (dev == "") + // dev = oDet.IdItem.Nombre; + // else + // { + // if (dev.IndexOf(oDet.IdItem.Nombre) == -1) + // dev = dev + " - " + oDet.IdItem.Nombre; + // } + // } + // //return i.ToString() + ": " + dev; + // return dev; + //} - protected void btnArchivos_Click(object sender, EventArgs e) - { - Response.Redirect("../Protocolos/ProtocoloAdjuntar.aspx?idProtocolo=" + Session["idProtocolo"].ToString()+"&desde=resultado"); - } + //protected void btnArchivos_Click(object sender, EventArgs e) + //{ + // Response.Redirect("../Protocolos/ProtocoloAdjuntar.aspx?idProtocolo=" + Session["idProtocolo"].ToString()+"&desde=resultado"); + //} protected void imgPdf_Click(object sender, EventArgs e) { diff --git a/WebLab/Resultados/ResultadoView.aspx.designer.cs b/WebLab/Resultados/ResultadoView.aspx.designer.cs index 2bcb64d5..091f5509 100644 --- a/WebLab/Resultados/ResultadoView.aspx.designer.cs +++ b/WebLab/Resultados/ResultadoView.aspx.designer.cs @@ -283,49 +283,40 @@ public partial class ResultadoView { protected global::System.Web.UI.WebControls.Label lblDiagnostico; /// - /// lblNroSISA control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.WebControls.Label lblNroSISA; - - /// - /// lblPedidoOriginal control. + /// lblCovid control. /// /// /// Auto-generated field. /// To modify move field declaration from designer file to code-behind file. /// - protected global::System.Web.UI.WebControls.Label lblPedidoOriginal; + protected global::System.Web.UI.WebControls.Label lblCovid; /// - /// HFCurrTabIndex control. + /// lblNroSISA control. /// /// /// Auto-generated field. /// To modify move field declaration from designer file to code-behind file. /// - protected global::System.Web.UI.WebControls.HiddenField HFCurrTabIndex; + protected global::System.Web.UI.WebControls.Label lblNroSISA; /// - /// pnlHC control. + /// lblPedidoOriginal control. /// /// /// Auto-generated field. /// To modify move field declaration from designer file to code-behind file. /// - protected global::System.Web.UI.WebControls.Panel pnlHC; + protected global::System.Web.UI.WebControls.Label lblPedidoOriginal; /// - /// lblCovid control. + /// HFCurrTabIndex control. /// /// /// Auto-generated field. /// To modify move field declaration from designer file to code-behind file. /// - protected global::System.Web.UI.WebControls.Label lblCovid; + protected global::System.Web.UI.WebControls.HiddenField HFCurrTabIndex; ///
/// lblMuestra control. @@ -435,15 +426,6 @@ public partial class ResultadoView { /// protected global::System.Web.UI.WebControls.DropDownList ddlItem; - /// - /// btnVerAntecendente control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.WebControls.Button btnVerAntecendente; - /// /// gvAntecedente control. /// diff --git a/WebLab/Turnos/TurnosEdit2.aspx.cs b/WebLab/Turnos/TurnosEdit2.aspx.cs index a3abde8d..0a785f81 100644 --- a/WebLab/Turnos/TurnosEdit2.aspx.cs +++ b/WebLab/Turnos/TurnosEdit2.aspx.cs @@ -500,9 +500,22 @@ private void CargarListas() //oUtil.CargarCombo(ddlDiagnostico, m_ssql, "id", "nombre"); //ddlDiagnostico.Items.Insert(0, new ListItem("", "0")); - string m_ssql = "SELECT idSectorServicio, prefijo + ' - ' + nombre as nombre FROM LAB_SectorServicio with (nolock) WHERE (baja = 0) order by nombre"; + //string m_ssql = "SELECT idSectorServicio, prefijo + ' - ' + nombre as nombre FROM LAB_SectorServicio with (nolock) WHERE (baja = 0) order by nombre"; + // oUtil.CargarCombo(ddlSectorServicio, m_ssql, "idSectorServicio", "nombre"); + // ddlSectorServicio.Items.Insert(0, new ListItem("-SIN IDENTIFICAR-", "0")); + + string str_condicion = ")"; + if ( (Request["Modifica"].ToString() == "1") && (Request["idTurno"] != null)) + str_condicion = " or exists (select 1 from LAB_Turno p WHERE p.idsector = s.idSectorServicio and idTurno = " + Request["idTurno"].ToString() + ")) "; + + + + string m_ssql = @"SELECT s.idSectorServicio, s.prefijo + ' - ' + s.nombre as nombre FROM LAB_SectorServicio S with (nolock) + WHERE (baja = 0) + and ( exists (select 1 from Lab_SectorServicioEfector SE where SE.idSectorServicio=S.idSectorServicio and se.idefector=" + oUser.IdEfector.IdEfector.ToString() + @" )" + str_condicion + @" order by nombre"; + oUtil.CargarCombo(ddlSectorServicio, m_ssql, "idSectorServicio", "nombre"); - ddlSectorServicio.Items.Insert(0, new ListItem("-SIN IDENTIFICAR-", "0")); + ddlSectorServicio.Items.Insert(0, new ListItem("Seleccione", "0")); //m_ssql = "SELECT idProfesional, apellido + ' ' + nombre AS nombre FROM Sys_Profesional ORDER BY apellido, nombre "; diff --git a/WebLab/Usuarios/PasswordEdit.aspx.cs b/WebLab/Usuarios/PasswordEdit.aspx.cs index ccddad53..e0597de9 100644 --- a/WebLab/Usuarios/PasswordEdit.aspx.cs +++ b/WebLab/Usuarios/PasswordEdit.aspx.cs @@ -18,15 +18,19 @@ public partial class PasswordEdit : System.Web.UI.Page protected void Page_PreInit(object sender, EventArgs e) { Usuario oUser = new Usuario(); + if (Session["idUsuario"]!= null) oUser = (Usuario)oUser.Get(typeof(Usuario), int.Parse(Session["idUsuario"].ToString())); + else Response.Redirect("../FinSesion.aspx", false); + /* //Caro: Adaptacion multiefector - correccion que no estaba funcionando el cambio de clave de validacion. Configuracion oC = new Configuracion(); - oC = (Configuracion)oC.Get(typeof(Configuracion), "IdConfiguracion", 1); - if (oUser.IdEfector != oC.IdEfector) // es externo - { - this.MasterPageFile = "~/PeticionElectronica/SitePE.master"; + oC = (Configuracion)oC.Get(typeof(Configuracion), "IdConfiguracion", 1); + if (oUser.IdEfector != oC.IdEfector) // es externo + { + this.MasterPageFile = "~/PeticionElectronica/SitePE.master"; - } + } + */ } protected void Page_Load(object sender, EventArgs e) @@ -35,13 +39,13 @@ protected void Page_Load(object sender, EventArgs e) { Usuario oUser = new Usuario(); oUser = (Usuario)oUser.Get(typeof(Usuario), int.Parse(Session["idUsuario"].ToString())); - - Configuracion oC = new Configuracion(); + //Caro: Adaptacion multiefector - correccion que no estaba funcionando el cambio de clave de validacion. + /* Configuracion oC = new Configuracion(); oC = (Configuracion)oC.Get(typeof(Configuracion), "IdConfiguracion", 1); if (oUser.IdEfector != oC.IdEfector) // es externo VerificaPermisos("Validacion Externo"); - else + else*/ VerificaPermisos("Validacion"); if (Request["id"] != null) diff --git a/WebLab/login.ascx.cs b/WebLab/login.ascx.cs index e51634c3..8f08deaa 100644 --- a/WebLab/login.ascx.cs +++ b/WebLab/login.ascx.cs @@ -44,10 +44,10 @@ protected void Page_Load(object sender, EventArgs e) else { - if (ConfigurationManager.AppSettings["tipoAutenticacion"].ToString() == "SSO") + //if (ConfigurationManager.AppSettings["tipoAutenticacion"].ToString() == "SSO") - Salud.Security.SSO.SSOHelper.RedirectToSSOPage("Logout.aspx?relogin=1", "login.aspx"); + // Salud.Security.SSO.SSOHelper.RedirectToSSOPage("Logout.aspx?relogin=1", "login.aspx"); } } //} @@ -199,30 +199,28 @@ protected void Login1_Authenticate(object sender, AuthenticateEventArgs e) } - - + + private bool VerificarSiTienePermisodeValidar(string user, string m_url) { - bool b_permiso = false; + string m_strSQL = @" SELECT P.permiso, M.objeto, M.url, U.username FROM Sys_Menu AS M INNER JOIN Sys_Permiso AS P ON M.idMenu = P.idMenu INNER JOIN Sys_Usuario AS U ON P.idPerfil = U.idPerfil - WHERE (M.url = '" + m_url + "') AND (U.username = '" + user + "') AND (P.permiso = 2) and (U.activo=1 ) "; + WHERE (M.url = @url) AND (U.username = @username) AND (P.permiso = 2) and (U.activo=1 ) "; - using (SqlConnection conn = (SqlConnection)NHibernateHttpModule.CurrentSession.Connection) + SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["SIL_ReadOnly"].ConnectionString); ///Performance: conexion de solo lectura + using (SqlCommand cmd = new SqlCommand(m_strSQL, conn)) { - DataSet Ds = new DataSet(); + cmd.Parameters.AddWithValue("@url", m_url); + cmd.Parameters.AddWithValue("@username", user); - SqlDataAdapter adapter = new SqlDataAdapter(); - adapter.SelectCommand = new SqlCommand(m_strSQL, conn); - adapter.Fill(Ds); + conn.Open(); - DataTable dtPermisos = Ds.Tables[0]; + var result = cmd.ExecuteScalar(); - if (dtPermisos.Rows.Count > 0) b_permiso = true; - conn.Close(); - return b_permiso; + return result != null; } } } diff --git a/WebLab/loginSIL.ascx.cs b/WebLab/loginSIL.ascx.cs index 90f1de21..e7dd1d0f 100644 --- a/WebLab/loginSIL.ascx.cs +++ b/WebLab/loginSIL.ascx.cs @@ -35,53 +35,55 @@ protected void Page_Load(object sender, EventArgs e) Session["idUsuarioValida"] = null; Session["idUsuario"] = null; Session.Clear(); - if (ConfigurationManager.AppSettings["tipoAutenticacion"].ToString() == "SSO") + /* Caro: en miultiefector, no se autentica con SSO + if (ConfigurationManager.AppSettings["tipoAutenticacion"].ToString() == "SSO") Salud.Security.SSO.SSOHelper.RedirectToSSOPage("Logout.aspx?relogin=1", "login.aspx"); + */ } } } protected void Login1_Authenticate(object sender, AuthenticateEventArgs e) - { - Utility oUtil = new Utility(); - string m_password = oUtil.Encrypt(Login1.Password); - - - int i_idusuario = 0; - string m_strSQL = @" SELECT top 1 idUsuario FROM Sys_usuario with (nolock) WHERE (username = '" + Login1.UserName + "') AND ([password] = '" + m_password + "') "; - - DataSet Ds = new DataSet(); - SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["SIL_ReadOnly"].ConnectionString); ///Performance: conexion de solo lectura - SqlDataAdapter adapter = new SqlDataAdapter(); - adapter.SelectCommand = new SqlCommand(m_strSQL, conn); - adapter.Fill(Ds); - DataTable dtPermisos = Ds.Tables[0]; - - if (dtPermisos.Rows.Count > 0) { - i_idusuario = int.Parse(dtPermisos.Rows[0][0].ToString()); - } - + { Usuario oUser = new Usuario(); - //oUser = (Usuario)oUser.Get(typeof(Usuario), "Username", Login1.UserName, "Password", m_password); - if (i_idusuario > 0) - { - - oUser = (Usuario)oUser.Get(typeof(Usuario), i_idusuario); - if (MostrarTerminosCondiciones(oUser)) + oUser = (Usuario)oUser.Get(typeof(Usuario), "Username", Login1.UserName); + if (oUser!= null) //(i_idusuario > 0) + { + if ((oUser.Activo) && (oUser.IdPerfil.Activo)) { - Session["usuarioPendienteAceptacion"] = i_idusuario; - ScriptManager.RegisterStartupScript(this, this.GetType(), "mostrarModal", "$('#modalTerminosCondiciones').modal('show');", true); + if (VerificarTipoAutenticacion(oUser)) + { + if (MostrarTerminosCondiciones(oUser)) + { + Session["usuarioPendienteAceptacion"] = oUser.IdUsuario;// i_idusuario; + ScriptManager.RegisterStartupScript(this, this.GetType(), "mostrarModal", "$('#modalTerminosCondiciones').modal('show');", true); + return; + } + } + else + { + oUser = null; + e.Authenticated = false; + Login1.FailureText = "Usuario y/o contraseña incorrecta."; + return; + } + } + else + { + oUser = null; + e.Authenticated = false; + Login1.FailureText = "El usuario inválido."; return; } - + } else { oUser = null; e.Authenticated = false; - Login1.FailureText = "El usuario y/o contraseña no son correctos."; + Login1.FailureText = "El usuario inválido."; return; } @@ -89,153 +91,38 @@ protected void Login1_Authenticate(object sender, AuthenticateEventArgs e) } - private void AutenticarUsuarioLdap(string username, string key) - - { - //// string path = @"LDAP://ldap.neuquen.gov.ar:389"; - ////string path = "LDAP://OU=People,O=integrabilidad,O=neuquen, DC=ldap.neuquen.gov.ar"; - //string path = @"LDAP://ldap.neuquen.gov.ar:389/OU=People,O=integrabilidad,O=neuquen"; - - - //DirectoryEntry ds = new DirectoryEntry(path, "26982063", "bc*123456", AuthenticationTypes.Secure); - //DirectorySearcher dssearch = new DirectorySearcher(ds); - //SearchResult result = dssearch.FindOne(); - - try - { - // Create the new LDAP connection - LdapDirectoryIdentifier ldi = new LdapDirectoryIdentifier("ldap.neuquen.gov.ar", 389); - System.DirectoryServices.Protocols.LdapConnection ldapConnection = - new System.DirectoryServices.Protocols.LdapConnection(ldi); - Console.WriteLine("LdapConnection is created successfully."); - ldapConnection.AuthType = AuthType.Basic; - ldapConnection.SessionOptions.ProtocolVersion = 3; - NetworkCredential nc = new NetworkCredential("uid=" + username + ",ou=people,O=integrabilidad,O=neuquen", - key); // "bc*1213456"); //password - ldapConnection.Bind(nc); - // ldapConnection.pr - - VerificarMatriculacion(username, key); - Console.WriteLine("LdapConnection authentication success"); - ldapConnection.Dispose(); - } - catch (LdapException e) - { - Console.WriteLine("\r\nUnable to login:\r\n\t" + e.Message); - VerificarMatriculacion(username, key); - } - catch (Exception e) - { - Console.WriteLine("\r\nUnexpected exception occured:\r\n\t" + e.GetType() + ":" + e.Message); - } - - } - - public void VerificarMatriculacion(string username, string contra) - { - //HttpContext CurrContext = HttpContext.Current; - //CurrContext.Items.Add("Documento", "20321008"); - //CurrContext.Items.Add("Clave", "20321008"); - //CurrContext.Items.Add("Apellido", "RESCHIA"); - //CurrContext.Items.Add("Nombre", "SANDRA CEFERINA"); - //CurrContext.Items.Add("Titulo", "MEDICA CIRUJANA"); - //Server.Transfer("DatosPersona.aspx"); - - - Session["Documento"] = "20321008"; - Session["Clave"] = "20321008"; - Session["Apellido"] = "RESCHIA"; - Session["Nombre"] = "SANDRA CEFERINA"; - Session["Titulo"] = "MEDICA CIRUJANA"; - - Response.Redirect("DatosPersona.aspx", false); - - - /* Configuracion oC = new Configuracion(); - - - oC = (Configuracion)oC.Get(typeof(Configuracion), 1);// "IdEfector", oEfector); - - string s_urlWFC = oC.UrlMatriculacion; - string s_url = s_urlWFC + "documento=" + username; // + "&codigoProfesion in (1,23)"; - - HttpWebRequest request = (HttpWebRequest)WebRequest.Create(s_url); - HttpWebResponse ws1 = (HttpWebResponse)request.GetResponse(); - JavaScriptSerializer jsonSerializer = new JavaScriptSerializer(); - Stream st = ws1.GetResponseStream(); - StreamReader sr = new StreamReader(st); - - string s = sr.ReadToEnd(); - if (s != "0") - { - - List pro = jsonSerializer.Deserialize>(s); - string espe; - if (pro.Count > 0) - { - - for (int i = 0; i < pro.Count; i++) - { - espe = pro[i].apellido + " " + pro[i].nombre + " - " + pro[i].profesiones[0].titulo; - HttpContext CurrContext = HttpContext.Current; - CurrContext.Items.Add("Documento", username); - CurrContext.Items.Add("Clave", contra); - CurrContext.Items.Add("Apellido", pro[i].apellido); - CurrContext.Items.Add("Nombre", pro[i].nombre); - CurrContext.Items.Add("Titulo", pro[i].profesiones[0].titulo); - Server.Transfer("DatosPersona.aspx"); - - - } - - - - - } - else - { //error no encontrado} - - - - } // procount - }//s!=0 - */ - } + + private bool VerificarSiTienePermisodeValidar(string user, string m_url) { - bool b_permiso = false; + string m_strSQL = @" SELECT P.permiso, M.objeto, M.url, U.username FROM Sys_Menu AS M INNER JOIN Sys_Permiso AS P ON M.idMenu = P.idMenu INNER JOIN Sys_Usuario AS U ON P.idPerfil = U.idPerfil - WHERE (M.url = '" + m_url + "') AND (U.username = '" + user + "') AND (P.permiso = 2) and (U.activo=1 ) "; - - using (SqlConnection conn = (SqlConnection)NHibernateHttpModule.CurrentSession.Connection) + WHERE (M.url = @url) AND (U.username = @username) AND (P.permiso = 2) and (U.activo=1 ) "; + + SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["SIL_ReadOnly"].ConnectionString); ///Performance: conexion de solo lectura + using (SqlCommand cmd = new SqlCommand(m_strSQL, conn)) { - DataSet Ds = new DataSet(); + cmd.Parameters.AddWithValue("@url", m_url); + cmd.Parameters.AddWithValue("@username", user); - SqlDataAdapter adapter = new SqlDataAdapter(); - adapter.SelectCommand = new SqlCommand(m_strSQL, conn); - adapter.Fill(Ds); + conn.Open(); - DataTable dtPermisos = Ds.Tables[0]; + var result = cmd.ExecuteScalar(); - if (dtPermisos.Rows.Count > 0) b_permiso = true; - conn.Close(); - return b_permiso; + return result != null; } } private void IngresoSistema(Usuario oUser, AuthenticateEventArgs e) - { - - /* Habilitar cuando se quiera autogestion de usuarios medicos - if (oUser == null) - AutenticarUsuarioLdap(Login1.UserName, Login1.Password); - */ + { + if (oUser != null) { + if ((oUser.Activo) && (oUser.IdPerfil.Activo)) { if ((oUser.Activo) && (oUser.Externo)) @@ -341,6 +228,79 @@ private void IngresoSistema(Usuario oUser, AuthenticateEventArgs e) lblMensajeError.Text = Login1.FailureText; Login1.FailureText = ""; //Muestro solo lblMensajeError, ya que Login1.FailureText solo sirve para Login1_Authenticate y no para btn_aceptarTerminosCondiciones_Click } + + private bool VerificarTipoAutenticacion(Usuario oUser) + { /* + Caro: autenticacion diferencias con SIL /ONLOGIN + */ + // Utility oUtil = new Utility(); + bool autentica = false; + + if (oUser != null) + { //verifica el tipo de autenticacion + + string tipoAutenticacion = oUser.TipoAutenticacion.ToUpper().Trim(); + if (tipoAutenticacion == "SIL") + { + + Utility oUtil = new Utility(); + string m_password = oUtil.Encrypt(Login1.Password); + + string query = @" SELECT 1 FROM Sys_usuario + WHERE activo = 1 + AND username = @username + AND [password] = @password"; + + using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["SIL_ReadOnly"].ConnectionString)) + using (SqlCommand cmd = new SqlCommand(query, conn)) + { + cmd.Parameters.AddWithValue("@username", Login1.UserName); + cmd.Parameters.AddWithValue("@password", m_password); + + conn.Open(); + var result = cmd.ExecuteScalar(); + + autentica= result != null; + } + } + + else if (tipoAutenticacion == "ONELOGIN") + { + try + { + // Create the new LDAP connection + LdapDirectoryIdentifier ldi = new LdapDirectoryIdentifier("ldap.neuquen.gov.ar", 389); + System.DirectoryServices.Protocols.LdapConnection ldapConnection = + new System.DirectoryServices.Protocols.LdapConnection(ldi); + ldapConnection.AuthType = AuthType.Basic; + ldapConnection.SessionOptions.ProtocolVersion = 3; + NetworkCredential nc = new NetworkCredential("uid=" + Login1.UserName + ",ou=people,O=integrabilidad,O=neuquen", Login1.Password); + ldapConnection.Bind(nc); + ldapConnection.Dispose(); + autentica = true; + + } + catch (LdapException ex) + { + ////"Servicio LDAP no disponible" + autentica = false; + } + catch (Exception ex) + { + autentica = false; + } + } + else //ni sil no onlogin + { + + /// "Tipo de autenticación no soportado."; + autentica = false; + } + } + return autentica; + /*fin Caro: validacion por tipo de autenticacion*/ + } + protected void btn_aceptarTerminosCondiciones_Click(object sender, EventArgs e) { if(Session["usuarioPendienteAceptacion"] == null) From c99e26cd4a6d76b57b95123ce88eb24b5c92980a Mon Sep 17 00:00:00 2001 From: Vanesa Rimada <80859025+vrimada@users.noreply.github.com> Date: Mon, 4 May 2026 15:21:35 -0300 Subject: [PATCH 10/37] (LAB-244) Correcion hoja de trabajo (#85) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * correcion hoja de trabajo * (Lab 239) ABM y Lista Usuarios (#82) * Nueva funcionalidad. Agregar en la lista de usuarios por efector los usuarios de los CS (perfil Administrativo externo) vinculados a su efector * fix: que se actualice idEfector de Sys_Usuario al editar la lista de efectores vinculados * Nueva funcionalidad. Agregar en la lista de usuarios por efector los usuarios de los CS (perfil Administrativo externo) vinculados a su efector * fix: que se actualice idEfector de Sys_Usuario al editar la lista de efectores vinculados * fix: agregar en el listado pero no en el filtro las salitas que usan el laboratorio del efector * feature: se agrego ordenamiento * fix: agregar en el listado pero no en el filtro las salitas que usan el laboratorio del efector * feature: se agrego ordenamiento * fix: correcion de turnos para usuario externo * (Lab 230) Bugs de edicion de determinaciones desde Validacion (#78) * pasamos llenarTablas de Page PreInit a Page Init * en proceso. fix anterior no sirvio. probar si esta correcion es valida * fix: la correcion real se realiza colocando en cada control enableViewState=false * msj * Mantenimiento20260406 (#81) * (LAB-236) Bug de tildado sin muestra automatico (#80) * fix: Bug de tildado sin muestra automatico * fix: correcion de los colores de validacion en Editar Practicas * Mantenimiento20260406 (#81) * fix: Bug de tildado sin muestra automatico --------- Co-authored-by: caroPintos <77695282+caroPintos@users.noreply.github.com> * (LAB-232) bug de "Recordar Analisis" por tipo de servicio (#77) * fix: se corrige el bug de "recordar analisis" * (LAB-205) Modificación en ABM de usuarios (#64) * nuevo req, se agrega el tipo de autenticacion * feat: se agrega un modal para que acepte terminos y condiciones. Se agrega en la bd la fecha y el log de Aceptacion de los terminos * (Lab-195) Requerimientos Derivaciones (#61) * feature: Grabar estado inicial de derivación. ResultadoCar: “Pendiente de Derivar” * fix: solo se actualizan los detalleProtocolos que se ingresaron al protocolo. * fix: de query que actualiza las derivaciones en el protocolo emisor * fix: Flexibilizar fecha y hora de retiro del lote * fix: correcion de fecha en recepcion de lote * fix: por ahora no restringimos la fecha de recibo * fix: faltaba la auditoria * para resolver conflicto * fix: para no pacientes cambio del metodo de derivacion que guarda el ResultadoCar * controles para el error de test * controles para el error de test * recibir lote. se saco try catch con nueva funcion de GET en BaseDataAccess * correciones para test * para pasar a test 12/1/2025 * correciones de Caro y Vane * Mantenimiento Enero 2026 (#69) * fix: habilitar cambiar tipo de autenticacion y ampliar el ancho de listado de usuarios * ---hablar con caro por este cambio * fix: pendiente de revision proceso de alta de usuario * Delete Tests-Cypress/cypress/fixtures/local.env.json * (LAB-107) Correccion de bug "Se borran los analisis del protocolo/turno al elegir un medico" (#26) * fix: rebase con main * fix: traigo correctamente el JSON * fix: selecion de profesional en el drop down * fix: rebase con main * fix: traigo correctamente el JSON * fix: selecion de profesional en el drop down * fix: valida que si puso una matricula elija un medico y no la opcion "--selecciona--" * fix: se corrige el bug que borraba los analisis cargados en un protocolo cuando se abria el pop up de seleccionar medico * fix: se corrige el bug que borraba los analisis cargados en un protocolo cuando se abria el pop up de seleccionar medico * Al resolver conflicto falto llamar el metodo CargarDatosTxtDatosCargados * fix: correcciones de pruebas de Caro. Cuando se destildaba una determinacion tildaba, y cuando se carga el combo de profesionales, que de error si no se eligio ninguno * fix: rebase con main * fix: traigo correctamente el JSON * fix: selecion de profesional en el drop down * fix: rebase con main * fix: traigo correctamente el JSON * fix: selecion de profesional en el drop down * fix: correcion luego de correcion de conflictos * fix: correcion luego de correcion de conflictos * correciones de los conflictos * fix de testing, comentados console log * nuevos hidden para controlar todos los post back del formulario * comentarios de las funciones * js * fix: estados en txtDatos * se toma en cuenta cuando hay redirect de cambio de paciente. y fix de carga de txtdatos * fix: Protocolos – Análisis repetidos * fix: rebaseo con main * fix: correcion script sql * Asociado a LAB-214: Sacar del PR la correcion de la tarea https://proyectos.andes.gob.ar/browse/LAB-192 (pasarla a otra rama ) para despues trabajarla, ya que baja mucho la performance del sistema. * fix: 1-protocolo: en la validacion faltaba mantener los datos cargados para los casos de error de FIS, FUC y fecha de muestra 2-turnos: que no se duplique el medico solicitante 3-resultados: sacar LAB192 * label para medico * Mantenimientoprotocolosy turnos (#72) * (LAB-215) BUG Cambio de paciente (#71) * fix: correcion de bug al cambiar paciente en Protocolo que generaba uno nuevo. Bug que pasa cuando se cambia de paciente a uno nuevo. * fix: para cambio de paciente, si da error de validacion que no borre las determinaciones * (LAB-118)fix: Correcion de bug para llenar el formulario de los resultados (#53) * fix: Correcion de bug para llenar el formulario de los resultados * (Lab-195) Requerimientos Derivaciones (#61) * feature: Grabar estado inicial de derivación. ResultadoCar: “Pendiente de Derivar” * fix: solo se actualizan los detalleProtocolos que se ingresaron al protocolo. * fix: de query que actualiza las derivaciones en el protocolo emisor * fix: Flexibilizar fecha y hora de retiro del lote * fix: correcion de fecha en recepcion de lote * fix: por ahora no restringimos la fecha de recibo * fix: faltaba la auditoria * para resolver conflicto * fix: para no pacientes cambio del metodo de derivacion que guarda el ResultadoCar * controles para el error de test * controles para el error de test * recibir lote. se saco try catch con nueva funcion de GET en BaseDataAccess * correciones para test * para pasar a test 12/1/2025 * correciones de Caro y Vane * Mantenimiento Enero 2026 (#69) * (LAB-107) Correccion de bug "Se borran los analisis del protocolo/turno al elegir un medico" (#26) * fix: rebase con main * fix: traigo correctamente el JSON * fix: selecion de profesional en el drop down * fix: rebase con main * fix: traigo correctamente el JSON * fix: selecion de profesional en el drop down * fix: valida que si puso una matricula elija un medico y no la opcion "--selecciona--" * fix: se corrige el bug que borraba los analisis cargados en un protocolo cuando se abria el pop up de seleccionar medico * fix: se corrige el bug que borraba los analisis cargados en un protocolo cuando se abria el pop up de seleccionar medico * Al resolver conflicto falto llamar el metodo CargarDatosTxtDatosCargados * fix: correcciones de pruebas de Caro. Cuando se destildaba una determinacion tildaba, y cuando se carga el combo de profesionales, que de error si no se eligio ninguno * fix: rebase con main * fix: traigo correctamente el JSON * fix: selecion de profesional en el drop down * fix: rebase con main * fix: traigo correctamente el JSON * fix: selecion de profesional en el drop down * fix: correcion luego de correcion de conflictos * fix: correcion luego de correcion de conflictos * correciones de los conflictos * fix de testing, comentados console log * nuevos hidden para controlar todos los post back del formulario * comentarios de las funciones * js * fix: estados en txtDatos * se toma en cuenta cuando hay redirect de cambio de paciente. y fix de carga de txtdatos * fix: Protocolos – Análisis repetidos * fix: rebaseo con main * fix: correcion script sql * Asociado a LAB-214: Sacar del PR la correcion de la tarea https://proyectos.andes.gob.ar/browse/LAB-192 (pasarla a otra rama ) para despues trabajarla, ya que baja mucho la performance del sistema. * fix: 1-protocolo: en la validacion faltaba mantener los datos cargados para los casos de error de FIS, FUC y fecha de muestra 2-turnos: que no se duplique el medico solicitante 3-resultados: sacar LAB192 * label para medico * Mantenimientoprotocolosy turnos (#72) * fix: Correcion de bug para llenar el formulario de los resultados * fix: un tiempo de espera para que cargue correctamente el Check de s/Muestra --------- Co-authored-by: caroPintos <77695282+caroPintos@users.noreply.github.com> * fix: cartel de error para combinacion onelogin y externo * fix: formato msj error y linea repetida * ejemplos de uso de libreria select2 * Revert "ejemplos de uso de libreria select2" This reverts commit 8d9ae9c457944d59d50bffa46098682d38f49b03. * (LAB-216)Error: Prompt de médicos en gestión de turnos desde Centro de Salud (#73) * fix: se agrega configuracion para usurio externo * comments * fix: sacamos "No identificado" cuando da exception * (LAB-215) BUG Cambio de paciente (#71) * fix: correcion de bug al cambiar paciente en Protocolo que generaba uno nuevo. Bug que pasa cuando se cambia de paciente a uno nuevo. * fix: para cambio de paciente, si da error de validacion que no borre las determinaciones * (LAB-118)fix: Correcion de bug para llenar el formulario de los resultados (#53) * fix: Correcion de bug para llenar el formulario de los resultados * (Lab-195) Requerimientos Derivaciones (#61) * feature: Grabar estado inicial de derivación. ResultadoCar: “Pendiente de Derivar” * fix: solo se actualizan los detalleProtocolos que se ingresaron al protocolo. * fix: de query que actualiza las derivaciones en el protocolo emisor * fix: Flexibilizar fecha y hora de retiro del lote * fix: correcion de fecha en recepcion de lote * fix: por ahora no restringimos la fecha de recibo * fix: faltaba la auditoria * para resolver conflicto * fix: para no pacientes cambio del metodo de derivacion que guarda el ResultadoCar * controles para el error de test * controles para el error de test * recibir lote. se saco try catch con nueva funcion de GET en BaseDataAccess * correciones para test * para pasar a test 12/1/2025 * correciones de Caro y Vane * Mantenimiento Enero 2026 (#69) * (LAB-107) Correccion de bug "Se borran los analisis del protocolo/turno al elegir un medico" (#26) * fix: rebase con main * fix: traigo correctamente el JSON * fix: selecion de profesional en el drop down * fix: rebase con main * fix: traigo correctamente el JSON * fix: selecion de profesional en el drop down * fix: valida que si puso una matricula elija un medico y no la opcion "--selecciona--" * fix: se corrige el bug que borraba los analisis cargados en un protocolo cuando se abria el pop up de seleccionar medico * fix: se corrige el bug que borraba los analisis cargados en un protocolo cuando se abria el pop up de seleccionar medico * Al resolver conflicto falto llamar el metodo CargarDatosTxtDatosCargados * fix: correcciones de pruebas de Caro. Cuando se destildaba una determinacion tildaba, y cuando se carga el combo de profesionales, que de error si no se eligio ninguno * fix: rebase con main * fix: traigo correctamente el JSON * fix: selecion de profesional en el drop down * fix: rebase con main * fix: traigo correctamente el JSON * fix: selecion de profesional en el drop down * fix: correcion luego de correcion de conflictos * fix: correcion luego de correcion de conflictos * correciones de los conflictos * fix de testing, comentados console log * nuevos hidden para controlar todos los post back del formulario * comentarios de las funciones * js * fix: estados en txtDatos * se toma en cuenta cuando hay redirect de cambio de paciente. y fix de carga de txtdatos * fix: Protocolos – Análisis repetidos * fix: rebaseo con main * fix: correcion script sql * Asociado a LAB-214: Sacar del PR la correcion de la tarea https://proyectos.andes.gob.ar/browse/LAB-192 (pasarla a otra rama ) para despues trabajarla, ya que baja mucho la performance del sistema. * fix: 1-protocolo: en la validacion faltaba mantener los datos cargados para los casos de error de FIS, FUC y fecha de muestra 2-turnos: que no se duplique el medico solicitante 3-resultados: sacar LAB192 * label para medico * Mantenimientoprotocolosy turnos (#72) * fix: Correcion de bug para llenar el formulario de los resultados * fix: un tiempo de espera para que cargue correctamente el Check de s/Muestra --------- Co-authored-by: caroPintos <77695282+caroPintos@users.noreply.github.com> * fix: se agrega configuracion para usurio externo * comments * fix: sacamos "No identificado" cuando da exception --------- Co-authored-by: caroPintos <77695282+caroPintos@users.noreply.github.com> * cambios en proceso * feature: busqueda para lista de usuarios * visualizacion con grilla * fix: para todos los perfiles que no son "Administrativo Externo " que desaparezca la grilla EfectorLaboratorio y que quede el valor en "0" * lista de usuarios: check de solo admins * fix: libreria chosen compatible con controladores anthem * fix: en load que valide si hay sesion * Mantenimiento Marzo 1 (#75) Auditoria Sin Insumo:Se corrige funcionalidad para que cuando se cambie de "sin insumo" a "disponible" se borren las marcas de validacion de "sin insumo" automaticas. Resultados por HT:Se corrige que no se mostraba valor por defecto en determinaciones de tipo de resultado predeterminado (simple y multiple). Mapeo SIL y SISA: Se agrega la opcion de descargar a excel el mapeo de interoperabilidad entre el SIL y SISA desde Configuracion-> Parametros SI (solapa Interoperabilidad SISA)Nueva Funcionalidad Placas:Se agrega funcionalidad con la opcion que sea multiefector.Nueva Funcionalidad Agendas y Turnos: Se corrige bug que no permite dar turnos en dias domingo. Turnos desde C.S:Se corrige seleccion de medico solicitante. * nuevo req, se agrega el tipo de autenticacion * fix: habilitar cambiar tipo de autenticacion y ampliar el ancho de listado de usuarios * ---hablar con caro por este cambio * fix: pendiente de revision proceso de alta de usuario * fix: cartel de error para combinacion onelogin y externo * Delete Tests-Cypress/cypress/fixtures/local.env.json * fix: formato msj error y linea repetida * ejemplos de uso de libreria select2 * Revert "ejemplos de uso de libreria select2" This reverts commit 8d9ae9c457944d59d50bffa46098682d38f49b03. * cambios en proceso * feature: busqueda para lista de usuarios * visualizacion con grilla * fix: para todos los perfiles que no son "Administrativo Externo " que desaparezca la grilla EfectorLaboratorio y que quede el valor en "0" * lista de usuarios: check de solo admins * fix: libreria chosen compatible con controladores anthem * correcion luego de las correciones de conflictos * auditorias * auditoria y guardar efector en modificacion * lbl error --------- Co-authored-by: caroPintos <77695282+caroPintos@users.noreply.github.com> * fix: correcion en "No funciona validacion de análisis" * (Lab 224) Corrección de bug sobre la edición de determinaciones con la marca “sin muestra” (#74) * fix; Corrección de bug sobre la edición de determinaciones con la marca “sin muestra”, regenera los detalles si no existian * fix; Corrección de bug sobre la edición de determinaciones con la marca “sin muestra”, regenera los detalles si no existian * fix: mismo fix en protocolo edit * fix: agrego que sea titulo para entrar a la regeneracion de items * fix: manera de listar los items en la grilla. verificar de no generar derivados. * cambio valores de resultado por variable ConResultado * ajuste actualizacion obra social del paciente --------- Co-authored-by: Caro * fix: se corrige el bug de "recordar analisis" * fix: correcion en "No funciona validacion de análisis" * Mantenimiento20260406 (#81) * (LAB-236) Bug de tildado sin muestra automatico (#80) * fix: Bug de tildado sin muestra automatico * fix: correcion de los colores de validacion en Editar Practicas * Mantenimiento20260406 (#81) * fix: Bug de tildado sin muestra automatico --------- Co-authored-by: caroPintos <77695282+caroPintos@users.noreply.github.com> * fix: se corrige el bug de "recordar analisis" * fix: correcion en "No funciona validacion de análisis" --------- Co-authored-by: caroPintos <77695282+caroPintos@users.noreply.github.com> Co-authored-by: Caro * (LAB-235) Validacion de análisis en la modificación de un protocolo (#79) * fix: validacion de analisis * Mantenimiento20260406 (#81) * (LAB-236) Bug de tildado sin muestra automatico (#80) * fix: Bug de tildado sin muestra automatico * fix: correcion de los colores de validacion en Editar Practicas * Mantenimiento20260406 (#81) * fix: Bug de tildado sin muestra automatico --------- Co-authored-by: caroPintos <77695282+caroPintos@users.noreply.github.com> * (LAB-232) bug de "Recordar Analisis" por tipo de servicio (#77) * fix: se corrige el bug de "recordar analisis" * (LAB-205) Modificación en ABM de usuarios (#64) * nuevo req, se agrega el tipo de autenticacion * feat: se agrega un modal para que acepte terminos y condiciones. Se agrega en la bd la fecha y el log de Aceptacion de los terminos * (Lab-195) Requerimientos Derivaciones (#61) * feature: Grabar estado inicial de derivación. ResultadoCar: “Pendiente de Derivar” * fix: solo se actualizan los detalleProtocolos que se ingresaron al protocolo. * fix: de query que actualiza las derivaciones en el protocolo emisor * fix: Flexibilizar fecha y hora de retiro del lote * fix: correcion de fecha en recepcion de lote * fix: por ahora no restringimos la fecha de recibo * fix: faltaba la auditoria * para resolver conflicto * fix: para no pacientes cambio del metodo de derivacion que guarda el ResultadoCar * controles para el error de test * controles para el error de test * recibir lote. se saco try catch con nueva funcion de GET en BaseDataAccess * correciones para test * para pasar a test 12/1/2025 * correciones de Caro y Vane * Mantenimiento Enero 2026 (#69) * fix: habilitar cambiar tipo de autenticacion y ampliar el ancho de listado de usuarios * ---hablar con caro por este cambio * fix: pendiente de revision proceso de alta de usuario * Delete Tests-Cypress/cypress/fixtures/local.env.json * (LAB-107) Correccion de bug "Se borran los analisis del protocolo/turno al elegir un medico" (#26) * fix: rebase con main * fix: traigo correctamente el JSON * fix: selecion de profesional en el drop down * fix: rebase con main * fix: traigo correctamente el JSON * fix: selecion de profesional en el drop down * fix: valida que si puso una matricula elija un medico y no la opcion "--selecciona--" * fix: se corrige el bug que borraba los analisis cargados en un protocolo cuando se abria el pop up de seleccionar medico * fix: se corrige el bug que borraba los analisis cargados en un protocolo cuando se abria el pop up de seleccionar medico * Al resolver conflicto falto llamar el metodo CargarDatosTxtDatosCargados * fix: correcciones de pruebas de Caro. Cuando se destildaba una determinacion tildaba, y cuando se carga el combo de profesionales, que de error si no se eligio ninguno * fix: rebase con main * fix: traigo correctamente el JSON * fix: selecion de profesional en el drop down * fix: rebase con main * fix: traigo correctamente el JSON * fix: selecion de profesional en el drop down * fix: correcion luego de correcion de conflictos * fix: correcion luego de correcion de conflictos * correciones de los conflictos * fix de testing, comentados console log * nuevos hidden para controlar todos los post back del formulario * comentarios de las funciones * js * fix: estados en txtDatos * se toma en cuenta cuando hay redirect de cambio de paciente. y fix de carga de txtdatos * fix: Protocolos – Análisis repetidos * fix: rebaseo con main * fix: correcion script sql * Asociado a LAB-214: Sacar del PR la correcion de la tarea https://proyectos.andes.gob.ar/browse/LAB-192 (pasarla a otra rama ) para despues trabajarla, ya que baja mucho la performance del sistema. * fix: 1-protocolo: en la validacion faltaba mantener los datos cargados para los casos de error de FIS, FUC y fecha de muestra 2-turnos: que no se duplique el medico solicitante 3-resultados: sacar LAB192 * label para medico * Mantenimientoprotocolosy turnos (#72) * (LAB-215) BUG Cambio de paciente (#71) * fix: correcion de bug al cambiar paciente en Protocolo que generaba uno nuevo. Bug que pasa cuando se cambia de paciente a uno nuevo. * fix: para cambio de paciente, si da error de validacion que no borre las determinaciones * (LAB-118)fix: Correcion de bug para llenar el formulario de los resultados (#53) * fix: Correcion de bug para llenar el formulario de los resultados * (Lab-195) Requerimientos Derivaciones (#61) * feature: Grabar estado inicial de derivación. ResultadoCar: “Pendiente de Derivar” * fix: solo se actualizan los detalleProtocolos que se ingresaron al protocolo. * fix: de query que actualiza las derivaciones en el protocolo emisor * fix: Flexibilizar fecha y hora de retiro del lote * fix: correcion de fecha en recepcion de lote * fix: por ahora no restringimos la fecha de recibo * fix: faltaba la auditoria * para resolver conflicto * fix: para no pacientes cambio del metodo de derivacion que guarda el ResultadoCar * controles para el error de test * controles para el error de test * recibir lote. se saco try catch con nueva funcion de GET en BaseDataAccess * correciones para test * para pasar a test 12/1/2025 * correciones de Caro y Vane * Mantenimiento Enero 2026 (#69) * (LAB-107) Correccion de bug "Se borran los analisis del protocolo/turno al elegir un medico" (#26) * fix: rebase con main * fix: traigo correctamente el JSON * fix: selecion de profesional en el drop down * fix: rebase con main * fix: traigo correctamente el JSON * fix: selecion de profesional en el drop down * fix: valida que si puso una matricula elija un medico y no la opcion "--selecciona--" * fix: se corrige el bug que borraba los analisis cargados en un protocolo cuando se abria el pop up de seleccionar medico * fix: se corrige el bug que borraba los analisis cargados en un protocolo cuando se abria el pop up de seleccionar medico * Al resolver conflicto falto llamar el metodo CargarDatosTxtDatosCargados * fix: correcciones de pruebas de Caro. Cuando se destildaba una determinacion tildaba, y cuando se carga el combo de profesionales, que de error si no se eligio ninguno * fix: rebase con main * fix: traigo correctamente el JSON * fix: selecion de profesional en el drop down * fix: rebase con main * fix: traigo correctamente el JSON * fix: selecion de profesional en el drop down * fix: correcion luego de correcion de conflictos * fix: correcion luego de correcion de conflictos * correciones de los conflictos * fix de testing, comentados console log * nuevos hidden para controlar todos los post back del formulario * comentarios de las funciones * js * fix: estados en txtDatos * se toma en cuenta cuando hay redirect de cambio de paciente. y fix de carga de txtdatos * fix: Protocolos – Análisis repetidos * fix: rebaseo con main * fix: correcion script sql * Asociado a LAB-214: Sacar del PR la correcion de la tarea https://proyectos.andes.gob.ar/browse/LAB-192 (pasarla a otra rama ) para despues trabajarla, ya que baja mucho la performance del sistema. * fix: 1-protocolo: en la validacion faltaba mantener los datos cargados para los casos de error de FIS, FUC y fecha de muestra 2-turnos: que no se duplique el medico solicitante 3-resultados: sacar LAB192 * label para medico * Mantenimientoprotocolosy turnos (#72) * fix: Correcion de bug para llenar el formulario de los resultados * fix: un tiempo de espera para que cargue correctamente el Check de s/Muestra --------- Co-authored-by: caroPintos <77695282+caroPintos@users.noreply.github.com> * fix: cartel de error para combinacion onelogin y externo * fix: formato msj error y linea repetida * ejemplos de uso de libreria select2 * Revert "ejemplos de uso de libreria select2" This reverts commit 8d9ae9c457944d59d50bffa46098682d38f49b03. * (LAB-216)Error: Prompt de médicos en gestión de turnos desde Centro de Salud (#73) * fix: se agrega configuracion para usurio externo * comments * fix: sacamos "No identificado" cuando da exception * (LAB-215) BUG Cambio de paciente (#71) * fix: correcion de bug al cambiar paciente en Protocolo que generaba uno nuevo. Bug que pasa cuando se cambia de paciente a uno nuevo. * fix: para cambio de paciente, si da error de validacion que no borre las determinaciones * (LAB-118)fix: Correcion de bug para llenar el formulario de los resultados (#53) * fix: Correcion de bug para llenar el formulario de los resultados * (Lab-195) Requerimientos Derivaciones (#61) * feature: Grabar estado inicial de derivación. ResultadoCar: “Pendiente de Derivar” * fix: solo se actualizan los detalleProtocolos que se ingresaron al protocolo. * fix: de query que actualiza las derivaciones en el protocolo emisor * fix: Flexibilizar fecha y hora de retiro del lote * fix: correcion de fecha en recepcion de lote * fix: por ahora no restringimos la fecha de recibo * fix: faltaba la auditoria * para resolver conflicto * fix: para no pacientes cambio del metodo de derivacion que guarda el ResultadoCar * controles para el error de test * controles para el error de test * recibir lote. se saco try catch con nueva funcion de GET en BaseDataAccess * correciones para test * para pasar a test 12/1/2025 * correciones de Caro y Vane * Mantenimiento Enero 2026 (#69) * (LAB-107) Correccion de bug "Se borran los analisis del protocolo/turno al elegir un medico" (#26) * fix: rebase con main * fix: traigo correctamente el JSON * fix: selecion de profesional en el drop down * fix: rebase con main * fix: traigo correctamente el JSON * fix: selecion de profesional en el drop down * fix: valida que si puso una matricula elija un medico y no la opcion "--selecciona--" * fix: se corrige el bug que borraba los analisis cargados en un protocolo cuando se abria el pop up de seleccionar medico * fix: se corrige el bug que borraba los analisis cargados en un protocolo cuando se abria el pop up de seleccionar medico * Al resolver conflicto falto llamar el metodo CargarDatosTxtDatosCargados * fix: correcciones de pruebas de Caro. Cuando se destildaba una determinacion tildaba, y cuando se carga el combo de profesionales, que de error si no se eligio ninguno * fix: rebase con main * fix: traigo correctamente el JSON * fix: selecion de profesional en el drop down * fix: rebase con main * fix: traigo correctamente el JSON * fix: selecion de profesional en el drop down * fix: correcion luego de correcion de conflictos * fix: correcion luego de correcion de conflictos * correciones de los conflictos * fix de testing, comentados console log * nuevos hidden para controlar todos los post back del formulario * comentarios de las funciones * js * fix: estados en txtDatos * se toma en cuenta cuando hay redirect de cambio de paciente. y fix de carga de txtdatos * fix: Protocolos – Análisis repetidos * fix: rebaseo con main * fix: correcion script sql * Asociado a LAB-214: Sacar del PR la correcion de la tarea https://proyectos.andes.gob.ar/browse/LAB-192 (pasarla a otra rama ) para despues trabajarla, ya que baja mucho la performance del sistema. * fix: 1-protocolo: en la validacion faltaba mantener los datos cargados para los casos de error de FIS, FUC y fecha de muestra 2-turnos: que no se duplique el medico solicitante 3-resultados: sacar LAB192 * label para medico * Mantenimientoprotocolosy turnos (#72) * fix: Correcion de bug para llenar el formulario de los resultados * fix: un tiempo de espera para que cargue correctamente el Check de s/Muestra --------- Co-authored-by: caroPintos <77695282+caroPintos@users.noreply.github.com> * fix: se agrega configuracion para usurio externo * comments * fix: sacamos "No identificado" cuando da exception --------- Co-authored-by: caroPintos <77695282+caroPintos@users.noreply.github.com> * cambios en proceso * feature: busqueda para lista de usuarios * visualizacion con grilla * fix: para todos los perfiles que no son "Administrativo Externo " que desaparezca la grilla EfectorLaboratorio y que quede el valor en "0" * lista de usuarios: check de solo admins * fix: libreria chosen compatible con controladores anthem * fix: en load que valide si hay sesion * Mantenimiento Marzo 1 (#75) Auditoria Sin Insumo:Se corrige funcionalidad para que cuando se cambie de "sin insumo" a "disponible" se borren las marcas de validacion de "sin insumo" automaticas. Resultados por HT:Se corrige que no se mostraba valor por defecto en determinaciones de tipo de resultado predeterminado (simple y multiple). Mapeo SIL y SISA: Se agrega la opcion de descargar a excel el mapeo de interoperabilidad entre el SIL y SISA desde Configuracion-> Parametros SI (solapa Interoperabilidad SISA)Nueva Funcionalidad Placas:Se agrega funcionalidad con la opcion que sea multiefector.Nueva Funcionalidad Agendas y Turnos: Se corrige bug que no permite dar turnos en dias domingo. Turnos desde C.S:Se corrige seleccion de medico solicitante. * nuevo req, se agrega el tipo de autenticacion * fix: habilitar cambiar tipo de autenticacion y ampliar el ancho de listado de usuarios * ---hablar con caro por este cambio * fix: pendiente de revision proceso de alta de usuario * fix: cartel de error para combinacion onelogin y externo * Delete Tests-Cypress/cypress/fixtures/local.env.json * fix: formato msj error y linea repetida * ejemplos de uso de libreria select2 * Revert "ejemplos de uso de libreria select2" This reverts commit 8d9ae9c457944d59d50bffa46098682d38f49b03. * cambios en proceso * feature: busqueda para lista de usuarios * visualizacion con grilla * fix: para todos los perfiles que no son "Administrativo Externo " que desaparezca la grilla EfectorLaboratorio y que quede el valor en "0" * lista de usuarios: check de solo admins * fix: libreria chosen compatible con controladores anthem * correcion luego de las correciones de conflictos * auditorias * auditoria y guardar efector en modificacion * lbl error --------- Co-authored-by: caroPintos <77695282+caroPintos@users.noreply.github.com> * fix: correcion en "No funciona validacion de análisis" * (Lab 224) Corrección de bug sobre la edición de determinaciones con la marca “sin muestra” (#74) * fix; Corrección de bug sobre la edición de determinaciones con la marca “sin muestra”, regenera los detalles si no existian * fix; Corrección de bug sobre la edición de determinaciones con la marca “sin muestra”, regenera los detalles si no existian * fix: mismo fix en protocolo edit * fix: agrego que sea titulo para entrar a la regeneracion de items * fix: manera de listar los items en la grilla. verificar de no generar derivados. * cambio valores de resultado por variable ConResultado * ajuste actualizacion obra social del paciente --------- Co-authored-by: Caro * fix: se corrige el bug de "recordar analisis" * fix: correcion en "No funciona validacion de análisis" * Mantenimiento20260406 (#81) * (LAB-236) Bug de tildado sin muestra automatico (#80) * fix: Bug de tildado sin muestra automatico * fix: correcion de los colores de validacion en Editar Practicas * Mantenimiento20260406 (#81) * fix: Bug de tildado sin muestra automatico --------- Co-authored-by: caroPintos <77695282+caroPintos@users.noreply.github.com> * fix: se corrige el bug de "recordar analisis" * fix: correcion en "No funciona validacion de análisis" --------- Co-authored-by: caroPintos <77695282+caroPintos@users.noreply.github.com> Co-authored-by: Caro --------- Co-authored-by: caroPintos <77695282+caroPintos@users.noreply.github.com> Co-authored-by: Caro * pasamos llenarTablas de Page PreInit a Page Init * en proceso. fix anterior no sirvio. probar si esta correcion es valida * fix: la correcion real se realiza colocando en cada control enableViewState=false --------- Co-authored-by: caroPintos <77695282+caroPintos@users.noreply.github.com> Co-authored-by: Caro * (LAB-207) Modificación en ABM de Agendas (#66) * abm: se controla en el alta y modificacion que la agenda no se superponga con otras * fix: que no traiga agendas dadas de baja * abm: se controla en el alta y modificacion que la agenda no se superponga con otras * fix: que no traiga agendas dadas de baja * 'AjusteAgendasDiasDomingo' * correcion para que evalue el efector solicitante --------- Co-authored-by: Caro * (LAB-193)Correcion del error de SQL en Estadisticas De Resultados Combinados (practicas) (#63) * fix: correcion del error de sql * (Lab-195) Requerimientos Derivaciones (#61) * feature: Grabar estado inicial de derivación. ResultadoCar: “Pendiente de Derivar” * fix: solo se actualizan los detalleProtocolos que se ingresaron al protocolo. * fix: de query que actualiza las derivaciones en el protocolo emisor * fix: Flexibilizar fecha y hora de retiro del lote * fix: correcion de fecha en recepcion de lote * fix: por ahora no restringimos la fecha de recibo * fix: faltaba la auditoria * para resolver conflicto * fix: para no pacientes cambio del metodo de derivacion que guarda el ResultadoCar * controles para el error de test * controles para el error de test * recibir lote. se saco try catch con nueva funcion de GET en BaseDataAccess * correciones para test * para pasar a test 12/1/2025 * correciones de Caro y Vane * Mantenimiento Enero 2026 (#69) * (LAB-107) Correccion de bug "Se borran los analisis del protocolo/turno al elegir un medico" (#26) * fix: rebase con main * fix: traigo correctamente el JSON * fix: selecion de profesional en el drop down * fix: rebase con main * fix: traigo correctamente el JSON * fix: selecion de profesional en el drop down * fix: valida que si puso una matricula elija un medico y no la opcion "--selecciona--" * fix: se corrige el bug que borraba los analisis cargados en un protocolo cuando se abria el pop up de seleccionar medico * fix: se corrige el bug que borraba los analisis cargados en un protocolo cuando se abria el pop up de seleccionar medico * Al resolver conflicto falto llamar el metodo CargarDatosTxtDatosCargados * fix: correcciones de pruebas de Caro. Cuando se destildaba una determinacion tildaba, y cuando se carga el combo de profesionales, que de error si no se eligio ninguno * fix: rebase con main * fix: traigo correctamente el JSON * fix: selecion de profesional en el drop down * fix: rebase con main * fix: traigo correctamente el JSON * fix: selecion de profesional en el drop down * fix: correcion luego de correcion de conflictos * fix: correcion luego de correcion de conflictos * correciones de los conflictos * fix de testing, comentados console log * nuevos hidden para controlar todos los post back del formulario * comentarios de las funciones * js * fix: estados en txtDatos * se toma en cuenta cuando hay redirect de cambio de paciente. y fix de carga de txtdatos * fix: Protocolos – Análisis repetidos * fix: rebaseo con main * fix: correcion script sql * Asociado a LAB-214: Sacar del PR la correcion de la tarea https://proyectos.andes.gob.ar/browse/LAB-192 (pasarla a otra rama ) para despues trabajarla, ya que baja mucho la performance del sistema. * fix: 1-protocolo: en la validacion faltaba mantener los datos cargados para los casos de error de FIS, FUC y fecha de muestra 2-turnos: que no se duplique el medico solicitante 3-resultados: sacar LAB192 * label para medico * Mantenimientoprotocolosy turnos (#72) * (LAB-215) BUG Cambio de paciente (#71) * fix: correcion de bug al cambiar paciente en Protocolo que generaba uno nuevo. Bug que pasa cuando se cambia de paciente a uno nuevo. * fix: para cambio de paciente, si da error de validacion que no borre las determinaciones * (LAB-118)fix: Correcion de bug para llenar el formulario de los resultados (#53) * fix: Correcion de bug para llenar el formulario de los resultados * (Lab-195) Requerimientos Derivaciones (#61) * feature: Grabar estado inicial de derivación. ResultadoCar: “Pendiente de Derivar” * fix: solo se actualizan los detalleProtocolos que se ingresaron al protocolo. * fix: de query que actualiza las derivaciones en el protocolo emisor * fix: Flexibilizar fecha y hora de retiro del lote * fix: correcion de fecha en recepcion de lote * fix: por ahora no restringimos la fecha de recibo * fix: faltaba la auditoria * para resolver conflicto * fix: para no pacientes cambio del metodo de derivacion que guarda el ResultadoCar * controles para el error de test * controles para el error de test * recibir lote. se saco try catch con nueva funcion de GET en BaseDataAccess * correciones para test * para pasar a test 12/1/2025 * correciones de Caro y Vane * Mantenimiento Enero 2026 (#69) * (LAB-107) Correccion de bug "Se borran los analisis del protocolo/turno al elegir un medico" (#26) * fix: rebase con main * fix: traigo correctamente el JSON * fix: selecion de profesional en el drop down * fix: rebase con main * fix: traigo correctamente el JSON * fix: selecion de profesional en el drop down * fix: valida que si puso una matricula elija un medico y no la opcion "--selecciona--" * fix: se corrige el bug que borraba los analisis cargados en un protocolo cuando se abria el pop up de seleccionar medico * fix: se corrige el bug que borraba los analisis cargados en un protocolo cuando se abria el pop up de seleccionar medico * Al resolver conflicto falto llamar el metodo CargarDatosTxtDatosCargados * fix: correcciones de pruebas de Caro. Cuando se destildaba una determinacion tildaba, y cuando se carga el combo de profesionales, que de error si no se eligio ninguno * fix: rebase con main * fix: traigo correctamente el JSON * fix: selecion de profesional en el drop down * fix: rebase con main * fix: traigo correctamente el JSON * fix: selecion de profesional en el drop down * fix: correcion luego de correcion de conflictos * fix: correcion luego de correcion de conflictos * correciones de los conflictos * fix de testing, comentados console log * nuevos hidden para controlar todos los post back del formulario * comentarios de las funciones * js * fix: estados en txtDatos * se toma en cuenta cuando hay redirect de cambio de paciente. y fix de carga de txtdatos * fix: Protocolos – Análisis repetidos * fix: rebaseo con main * fix: correcion script sql * Asociado a LAB-214: Sacar del PR la correcion de la tarea https://proyectos.andes.gob.ar/browse/LAB-192 (pasarla a otra rama ) para despues trabajarla, ya que baja mucho la performance del sistema. * fix: 1-protocolo: en la validacion faltaba mantener los datos cargados para los casos de error de FIS, FUC y fecha de muestra 2-turnos: que no se duplique el medico solicitante 3-resultados: sacar LAB192 * label para medico * Mantenimientoprotocolosy turnos (#72) * fix: Correcion de bug para llenar el formulario de los resultados * fix: un tiempo de espera para que cargue correctamente el Check de s/Muestra --------- Co-authored-by: caroPintos <77695282+caroPintos@users.noreply.github.com> * (LAB-216)Error: Prompt de médicos en gestión de turnos desde Centro de Salud (#73) * fix: se agrega configuracion para usurio externo * comments * fix: sacamos "No identificado" cuando da exception * (LAB-215) BUG Cambio de paciente (#71) * fix: correcion de bug al cambiar paciente en Protocolo que generaba uno nuevo. Bug que pasa cuando se cambia de paciente a uno nuevo. * fix: para cambio de paciente, si da error de validacion que no borre las determinaciones * (LAB-118)fix: Correcion de bug para llenar el formulario de los resultados (#53) * fix: Correcion de bug para llenar el formulario de los resultados * (Lab-195) Requerimientos Derivaciones (#61) * feature: Grabar estado inicial de derivación. ResultadoCar: “Pendiente de Derivar” * fix: solo se actualizan los detalleProtocolos que se ingresaron al protocolo. * fix: de query que actualiza las derivaciones en el protocolo emisor * fix: Flexibilizar fecha y hora de retiro del lote * fix: correcion de fecha en recepcion de lote * fix: por ahora no restringimos la fecha de recibo * fix: faltaba la auditoria * para resolver conflicto * fix: para no pacientes cambio del metodo de derivacion que guarda el ResultadoCar * controles para el error de test * controles para el error de test * recibir lote. se saco try catch con nueva funcion de GET en BaseDataAccess * correciones para test * para pasar a test 12/1/2025 * correciones de Caro y Vane * Mantenimiento Enero 2026 (#69) * (LAB-107) Correccion de bug "Se borran los analisis del protocolo/turno al elegir un medico" (#26) * fix: rebase con main * fix: traigo correctamente el JSON * fix: selecion de profesional en el drop down * fix: rebase con main * fix: traigo correctamente el JSON * fix: selecion de profesional en el drop down * fix: valida que si puso una matricula elija un medico y no la opcion "--selecciona--" * fix: se corrige el bug que borraba los analisis cargados en un protocolo cuando se abria el pop up de seleccionar medico * fix: se corrige el bug que borraba los analisis cargados en un protocolo cuando se abria el pop up de seleccionar medico * Al resolver conflicto falto llamar el metodo CargarDatosTxtDatosCargados * fix: correcciones de pruebas de Caro. Cuando se destildaba una determinacion tildaba, y cuando se carga el combo de profesionales, que de error si no se eligio ninguno * fix: rebase con main * fix: traigo correctamente el JSON * fix: selecion de profesional en el drop down * fix: rebase con main * fix: traigo correctamente el JSON * fix: selecion de profesional en el drop down * fix: correcion luego de correcion de conflictos * fix: correcion luego de correcion de conflictos * correciones de los conflictos * fix de testing, comentados console log * nuevos hidden para controlar todos los post back del formulario * comentarios de las funciones * js * fix: estados en txtDatos * se toma en cuenta cuando hay redirect de cambio de paciente. y fix de carga de txtdatos * fix: Protocolos – Análisis repetidos * fix: rebaseo con main * fix: correcion script sql * Asociado a LAB-214: Sacar del PR la correcion de la tarea https://proyectos.andes.gob.ar/browse/LAB-192 (pasarla a otra rama ) para despues trabajarla, ya que baja mucho la performance del sistema. * fix: 1-protocolo: en la validacion faltaba mantener los datos cargados para los casos de error de FIS, FUC y fecha de muestra 2-turnos: que no se duplique el medico solicitante 3-resultados: sacar LAB192 * label para medico * Mantenimientoprotocolosy turnos (#72) * fix: Correcion de bug para llenar el formulario de los resultados * fix: un tiempo de espera para que cargue correctamente el Check de s/Muestra --------- Co-authored-by: caroPintos <77695282+caroPintos@users.noreply.github.com> * fix: se agrega configuracion para usurio externo * comments * fix: sacamos "No identificado" cuando da exception --------- Co-authored-by: caroPintos <77695282+caroPintos@users.noreply.github.com> * Mantenimiento Marzo 1 (#75) Auditoria Sin Insumo:Se corrige funcionalidad para que cuando se cambie de "sin insumo" a "disponible" se borren las marcas de validacion de "sin insumo" automaticas. Resultados por HT:Se corrige que no se mostraba valor por defecto en determinaciones de tipo de resultado predeterminado (simple y multiple). Mapeo SIL y SISA: Se agrega la opcion de descargar a excel el mapeo de interoperabilidad entre el SIL y SISA desde Configuracion-> Parametros SI (solapa Interoperabilidad SISA)Nueva Funcionalidad Placas:Se agrega funcionalidad con la opcion que sea multiefector.Nueva Funcionalidad Agendas y Turnos: Se corrige bug que no permite dar turnos en dias domingo. Turnos desde C.S:Se corrige seleccion de medico solicitante. * (LAB-205) Modificación en ABM de usuarios (#64) * nuevo req, se agrega el tipo de autenticacion * feat: se agrega un modal para que acepte terminos y condiciones. Se agrega en la bd la fecha y el log de Aceptacion de los terminos * (Lab-195) Requerimientos Derivaciones (#61) * feature: Grabar estado inicial de derivación. ResultadoCar: “Pendiente de Derivar” * fix: solo se actualizan los detalleProtocolos que se ingresaron al protocolo. * fix: de query que actualiza las derivaciones en el protocolo emisor * fix: Flexibilizar fecha y hora de retiro del lote * fix: correcion de fecha en recepcion de lote * fix: por ahora no restringimos la fecha de recibo * fix: faltaba la auditoria * para resolver conflicto * fix: para no pacientes cambio del metodo de derivacion que guarda el ResultadoCar * controles para el error de test * controles para el error de test * recibir lote. se saco try catch con nueva funcion de GET en BaseDataAccess * correciones para test * para pasar a test 12/1/2025 * correciones de Caro y Vane * Mantenimiento Enero 2026 (#69) * fix: habilitar cambiar tipo de autenticacion y ampliar el ancho de listado de usuarios * ---hablar con caro por este cambio * fix: pendiente de revision proceso de alta de usuario * Delete Tests-Cypress/cypress/fixtures/local.env.json * (LAB-107) Correccion de bug "Se borran los analisis del protocolo/turno al elegir un medico" (#26) * fix: rebase con main * fix: traigo correctamente el JSON * fix: selecion de profesional en el drop down * fix: rebase con main * fix: traigo correctamente el JSON * fix: selecion de profesional en el drop down * fix: valida que si puso una matricula elija un medico y no la opcion "--selecciona--" * fix: se corrige el bug que borraba los analisis cargados en un protocolo cuando se abria el pop up de seleccionar medico * fix: se corrige el bug que borraba los analisis cargados en un protocolo cuando se abria el pop up de seleccionar medico * Al resolver conflicto falto llamar el metodo CargarDatosTxtDatosCargados * fix: correcciones de pruebas de Caro. Cuando se destildaba una determinacion tildaba, y cuando se carga el combo de profesionales, que de error si no se eligio ninguno * fix: rebase con main * fix: traigo correctamente el JSON * fix: selecion de profesional en el drop down * fix: rebase con main * fix: traigo correctamente el JSON * fix: selecion de profesional en el drop down * fix: correcion luego de correcion de conflictos * fix: correcion luego de correcion de conflictos * correciones de los conflictos * fix de testing, comentados console log * nuevos hidden para controlar todos los post back del formulario * comentarios de las funciones * js * fix: estados en txtDatos * se toma en cuenta cuando hay redirect de cambio de paciente. y fix de carga de txtdatos * fix: Protocolos – Análisis repetidos * fix: rebaseo con main * fix: correcion script sql * Asociado a LAB-214: Sacar del PR la correcion de la tarea https://proyectos.andes.gob.ar/browse/LAB-192 (pasarla a otra rama ) para despues trabajarla, ya que baja mucho la performance del sistema. * fix: 1-protocolo: en la validacion faltaba mantener los datos cargados para los casos de error de FIS, FUC y fecha de muestra 2-turnos: que no se duplique el medico solicitante 3-resultados: sacar LAB192 * label para medico * Mantenimientoprotocolosy turnos (#72) * (LAB-215) BUG Cambio de paciente (#71) * fix: correcion de bug al cambiar paciente en Protocolo que generaba uno nuevo. Bug que pasa cuando se cambia de paciente a uno nuevo. * fix: para cambio de paciente, si da error de validacion que no borre las determinaciones * (LAB-118)fix: Correcion de bug para llenar el formulario de los resultados (#53) * fix: Correcion de bug para llenar el formulario de los resultados * (Lab-195) Requerimientos Derivaciones (#61) * feature: Grabar estado inicial de derivación. ResultadoCar: “Pendiente de Derivar” * fix: solo se actualizan los detalleProtocolos que se ingresaron al protocolo. * fix: de query que actualiza las derivaciones en el protocolo emisor * fix: Flexibilizar fecha y hora de retiro del lote * fix: correcion de fecha en recepcion de lote * fix: por ahora no restringimos la fecha de recibo * fix: faltaba la auditoria * para resolver conflicto * fix: para no pacientes cambio del metodo de derivacion que guarda el ResultadoCar * controles para el error de test * controles para el error de test * recibir lote. se saco try catch con nueva funcion de GET en BaseDataAccess * correciones para test * para pasar a test 12/1/2025 * correciones de Caro y Vane * Mantenimiento Enero 2026 (#69) * (LAB-107) Correccion de bug "Se borran los analisis del protocolo/turno al elegir un medico" (#26) * fix: rebase con main * fix: traigo correctamente el JSON * fix: selecion de profesional en el drop down * fix: rebase con main * fix: traigo correctamente el JSON * fix: selecion de profesional en el drop down * fix: valida que si puso una matricula elija un medico y no la opcion "--selecciona--" * fix: se corrige el bug que borraba los analisis cargados en un protocolo cuando se abria el pop up de seleccionar medico * fix: se corrige el bug que borraba los analisis cargados en un protocolo cuando se abria el pop up de seleccionar medico * Al resolver conflicto falto llamar el metodo CargarDatosTxtDatosCargados * fix: correcciones de pruebas de Caro. Cuando se destildaba una determinacion tildaba, y cuando se carga el combo de profesionales, que de error si no se eligio ninguno * fix: rebase con main * fix: traigo correctamente el JSON * fix: selecion de profesional en el drop down * fix: rebase con main * fix: traigo correctamente el JSON * fix: selecion de profesional en el drop down * fix: correcion luego de correcion de conflictos * fix: correcion luego de correcion de conflictos * correciones de los conflictos * fix de testing, comentados console log * nuevos hidden para controlar todos los post back del formulario * comentarios de las funciones * js * fix: estados en txtDatos * se toma en cuenta cuando hay redirect de cambio de paciente. y fix de carga de txtdatos * fix: Protocolos – Análisis repetidos * fix: rebaseo con main * fix: correcion script sql * Asociado a LAB-214: Sacar del PR la correcion de la tarea https://proyectos.andes.gob.ar/browse/LAB-192 (pasarla a otra rama ) para despues trabajarla, ya que baja mucho la performance del sistema. * fix: 1-protocolo: en la validacion faltaba mantener los datos cargados para los casos de error de FIS, FUC y fecha de muestra 2-turnos: que no se duplique el medico solicitante 3-resultados: sacar LAB192 * label para medico * Mantenimientoprotocolosy turnos (#72) * fix: Correcion de bug para llenar el formulario de los resultados * fix: un tiempo de espera para que cargue correctamente el Check de s/Muestra --------- Co-authored-by: caroPintos <77695282+caroPintos@users.noreply.github.com> * fix: cartel de error para combinacion onelogin y externo * fix: formato msj error y linea repetida * ejemplos de uso de libreria select2 * Revert "ejemplos de uso de libreria select2" This reverts commit 8d9ae9c457944d59d50bffa46098682d38f49b03. * (LAB-216)Error: Prompt de médicos en gestión de turnos desde Centro de Salud (#73) * fix: se agrega configuracion para usurio externo * comments * fix: sacamos "No identificado" cuando da exception * (LAB-215) BUG Cambio de paciente (#71) * fix: correcion de bug al cambiar paciente en Protocolo que generaba uno nuevo. Bug que pasa cuando se cambia de paciente a uno nuevo. * fix: para cambio de paciente, si da error de validacion que no borre las determinaciones * (LAB-118)fix: Correcion de bug para llenar el formulario de los resultados (#53) * fix: Correcion de bug para llenar el formulario de los resultados * (Lab-195) Requerimientos Derivaciones (#61) * feature: Grabar estado inicial de derivación. ResultadoCar: “Pendiente de Derivar” * fix: solo se actualizan los detalleProtocolos que se ingresaron al protocolo. * fix: de query que actualiza las derivaciones en el protocolo emisor * fix: Flexibilizar fecha y hora de retiro del lote * fix: correcion de fecha en recepcion de lote * fix: por ahora no restringimos la fecha de recibo * fix: faltaba la auditoria * para resolver conflicto * fix: para no pacientes cambio del metodo de derivacion que guarda el ResultadoCar * controles para el error de test * controles para el error de test * recibir lote. se saco try catch con nueva funcion de GET en BaseDataAccess * correciones para test * para pasar a test 12/1/2025 * correciones de Caro y Vane * Mantenimiento Enero 2026 (#69) * (LAB-107) Correccion de bug "Se borran los analisis del protocolo/turno al elegir un medico" (#26) * fix: rebase con main * fix: traigo correctamente el JSON * fix: selecion de profesional en el drop down * fix: rebase con main * fix: traigo correctamente el JSON * fix: selecion de profesional en el drop down * fix: valida que si puso una matricula elija un medico y no la opcion "--selecciona--" * fix: se corrige el bug que borraba los analisis cargados en un protocolo cuando se abria el pop up de seleccionar medico * fix: se corrige el bug que borraba los analisis cargados en un protocolo cuando se abria el pop up de seleccionar medico * Al resolver conflicto falto llamar el metodo CargarDatosTxtDatosCargados * fix: correcciones de pruebas de Caro. Cuando se destildaba una determinacion tildaba, y cuando se carga el combo de profesionales, que de error si no se eligio ninguno * fix: rebase con main * fix: traigo correctamente el JSON * fix: selecion de profesional en el drop down * fix: rebase con main * fix: traigo correctamente el JSON * fix: selecion de profesional en el drop down * fix: correcion luego de correcion de conflictos * fix: correcion luego de correcion de conflictos * correciones de los conflictos * fix de testing, comentados console log * nuevos hidden para controlar todos los post back del formulario * comentarios de las funciones * js * fix: estados en txtDatos * se toma en cuenta cuando hay redirect de cambio de paciente. y fix de carga de txtdatos * fix: Protocolos – Análisis repetidos * fix: rebaseo con main * fix: correcion script sql * Asociado a LAB-214: Sacar del PR la correcion de la tarea https://proyectos.andes.gob.ar/browse/LAB-192 (pasarla a otra rama ) para despues trabajarla, ya que baja mucho la performance del sistema. * fix: 1-protocolo: en la validacion faltaba mantener los datos cargados para los casos de error de FIS, FUC y fecha de muestra 2-turnos: que no se duplique el medico solicitante 3-resultados: sacar LAB192 * label para medico * Mantenimientoprotocolosy turnos (#72) * fix: Correcion de bug para llenar el formulario de los resultados * fix: un tiempo de espera para que cargue correctamente el Check de s/Muestra --------- Co-authored-by: caroPintos <77695282+caroPintos@users.noreply.github.com> * fix: se agrega configuracion para usurio externo * comments * fix: sacamos "No identificado" cuando da exception --------- Co-authored-by: caroPintos <77695282+caroPintos@users.noreply.github.com> * cambios en proceso * feature: busqueda para lista de usuarios * visualizacion con grilla * fix: para todos los perfiles que no son "Administrativo Externo " que desaparezca la grilla EfectorLaboratorio y que quede el valor en "0" * lista de usuarios: check de solo admins * fix: libreria chosen compatible con controladores anthem * fix: en load que valide si hay sesion * Mantenimiento Marzo 1 (#75) Auditoria Sin Insumo:Se corrige funcionalidad para que cuando se cambie de "sin insumo" a "disponible" se borren las marcas de validacion de "sin insumo" automaticas. Resultados por HT:Se corrige que no se mostraba valor por defecto en determinaciones de tipo de resultado predeterminado (simple y multiple). Mapeo SIL y SISA: Se agrega la opcion de descargar a excel el mapeo de interoperabilidad entre el SIL y SISA desde Configuracion-> Parametros SI (solapa Interoperabilidad SISA)Nueva Funcionalidad Placas:Se agrega funcionalidad con la opcion que sea multiefector.Nueva Funcionalidad Agendas y Turnos: Se corrige bug que no permite dar turnos en dias domingo. Turnos desde C.S:Se corrige seleccion de medico solicitante. * nuevo req, se agrega el tipo de autenticacion * fix: habilitar cambiar tipo de autenticacion y ampliar el ancho de listado de usuarios * ---hablar con caro por este cambio * fix: pendiente de revision proceso de alta de usuario * fix: cartel de error para combinacion onelogin y externo * Delete Tests-Cypress/cypress/fixtures/local.env.json * fix: formato msj error y linea repetida * ejemplos de uso de libreria select2 * Revert "ejemplos de uso de libreria select2" This reverts commit 8d9ae9c457944d59d50bffa46098682d38f49b03. * cambios en proceso * feature: busqueda para lista de usuarios * visualizacion con grilla * fix: para todos los perfiles que no son "Administrativo Externo " que desaparezca la grilla EfectorLaboratorio y que quede el valor en "0" * lista de usuarios: check de solo admins * fix: libreria chosen compatible con controladores anthem * correcion luego de las correciones de conflictos * auditorias * auditoria y guardar efector en modificacion * lbl error --------- Co-authored-by: caroPintos <77695282+caroPintos@users.noreply.github.com> * (Lab 224) Corrección de bug sobre la edición de determinaciones con la marca “sin muestra” (#74) * fix; Corrección de bug sobre la edición de determinaciones con la marca “sin muestra”, regenera los detalles si no existian * fix; Corrección de bug sobre la edición de determinaciones con la marca “sin muestra”, regenera los detalles si no existian * fix: mismo fix en protocolo edit * fix: agrego que sea titulo para entrar a la regeneracion de items * fix: manera de listar los items en la grilla. verificar de no generar derivados. * cambio valores de resultado por variable ConResultado * ajuste actualizacion obra social del paciente --------- Co-authored-by: Caro * Mantenimiento20260406 (#81) * (LAB-236) Bug de tildado sin muestra automatico (#80) * fix: Bug de tildado sin muestra automatico * fix: correcion de los colores de validacion en Editar Practicas * Mantenimiento20260406 (#81) * fix: Bug de tildado sin muestra automatico --------- Co-authored-by: caroPintos <77695282+caroPintos@users.noreply.github.com> * (LAB-232) bug de "Recordar Analisis" por tipo de servicio (#77) * fix: se corrige el bug de "recordar analisis" * (LAB-205) Modificación en ABM de usuarios (#64) * nuevo req, se agrega el tipo de autenticacion * feat: se agrega un modal para que acepte terminos y condiciones. Se agrega en la bd la fecha y el log de Aceptacion de los terminos * (Lab-195) Requerimientos Derivaciones (#61) * feature: Grabar estado inicial de derivación. ResultadoCar: “Pendiente de Derivar” * fix: solo se actualizan los detalleProtocolos que se ingresaron al protocolo. * fix: de query que actualiza las derivaciones en el protocolo emisor * fix: Flexibilizar fecha y hora de retiro del lote * fix: correcion de fecha en recepcion de lote * fix: por ahora no restringimos la fecha de recibo * fix: faltaba la auditoria * para resolver conflicto * fix: para no pacientes cambio del metodo de derivacion que guarda el ResultadoCar * controles para el error de test * controles para el error de test * recibir lote. se saco try catch con nueva funcion de GET en BaseDataAccess * correciones para test * para pasar a test 12/1/2025 * correciones de Caro y Vane * Mantenimiento Enero 2026 (#69) * fix: habilitar cambiar tipo de autenticacion y ampliar el ancho de listado de usuarios * ---hablar con caro por este cambio * fix: pendiente de revision proceso de alta de usuario * Delete Tests-Cypress/cypress/fixtures/local.env.json * (LAB-107) Correccion de bug "Se borran los analisis del protocolo/turno al elegir un medico" (#26) * fix: rebase con main * fix: traigo correctamente el JSON * fix: selecion de profesional en el drop down * fix: rebase con main * fix: traigo correctamente el JSON * fix: selecion de profesional en el drop down * fix: valida que si puso una matricula elija un medico y no la opcion "--selecciona--" * fix: se corrige el bug que borraba los analisis cargados en un protocolo cuando se abria el pop up de seleccionar medico * fix: se corrige el bug que borraba los analisis cargados en un protocolo cuando se abria el pop up de seleccionar medico * Al resolver conflicto falto llamar el metodo CargarDatosTxtDatosCargados * fix: correcciones de pruebas de Caro. Cuando se destildaba una determinacion tildaba, y cuando se carga el combo de profesionales, que de error si no se eligio ninguno * fix: rebase con main * fix: traigo correctamente el JSON * fix: selecion de profesional en el drop down * fix: rebase con main * fix: traigo correctamente el JSON * fix: selecion de profesional en el drop down * fix: correcion luego de correcion de conflictos * fix: correcion luego de correcion de conflictos * correciones de los conflictos * fix de testing, comentados console log * nuevos hidden para controlar todos los post back del formulario * comentarios de las funciones * js * fix: estados en txtDatos * se toma en cuenta cuando hay redirect de cambio de paciente. y fix de carga de txtdatos * fix: Protocolos – Análisis repetidos * fix: rebaseo con main * fix: correcion script sql * Asociado a LAB-214: Sacar del PR la correcion de la tarea https://proyectos.andes.gob.ar/browse/LAB-192 (pasarla a otra rama ) para despues trabajarla, ya que baja mucho la performance del sistema. * fix: 1-protocolo: en la validacion faltaba mantener los datos cargados para los casos de error de FIS, FUC y fecha de muestra 2-turnos: que no se duplique el medico solicitante 3-resultados: sacar LAB192 * label para medico * Mantenimientoprotocolosy turnos (#72) * (LAB-215) BUG Cambio de paciente (#71) * fix: correcion de bug al cambiar paciente en Protocolo que generaba uno nuevo. Bug que pasa cuando se cambia de paciente a uno nuevo. * fix: para cambio de paciente, si da error de validacion que no borre las determinaciones * (LAB-118)fix: Correcion de bug para llenar el formulario de los resultados (#53) * fix: Correcion de bug para llenar el formulario de los resultados * (Lab-195) Requerimientos Derivaciones (#61) * feature: Grabar estado inicial de derivación. ResultadoCar: “Pendiente de Derivar” * fix: solo se actualizan los detalleProtocolos que se ingresaron al protocolo. * fix: de query que actualiza las derivaciones en el protocolo emisor * fix: Flexibilizar fecha y hora de retiro del lote * fix: correcion de fecha en recepcion de lote * fix: por ahora no restringimos la fecha de recibo * fix: faltaba la auditoria * para resolver conflicto * fix: para no pacientes cambio del metodo de derivacion que guarda el ResultadoCar * controles para el error de test * controles para el error de test * recibir lote. se saco try catch con nueva funcion de GET en BaseDataAccess * correciones para test * para pasar a test 12/1/2025 * correciones de Caro y Vane * Mantenimiento Enero 2026 (#69) * (LAB-107) Correccion de bug "Se borran los analisis del protocolo/turno al elegir un medico" (#26) * fix: rebase con main * fix: traigo correctamente el JSON * fix: selecion de profesional en el drop down * fix: rebase con main * fix: traigo correctamente el JSON * fix: selecion de profesional en el drop down * fix: valida que si puso una matricula elija un medico y no la opcion "--selecciona--" * fix: se corrige el bug que borraba los analisis cargados en un protocolo cuando se abria el pop up de seleccionar medico * fix: se corrige el bug que borraba los analisis cargados en un protocolo cuando se abria el pop up de seleccionar medico * Al resolver conflicto falto llamar el metodo CargarDatosTxtDatosCargados * fix: correcciones de pruebas de Caro. Cuando se destildaba una determinacion tildaba, y cuando se carga el combo de profesionales, que de error si no se eligio ninguno * fix: rebase con main * fix: traigo correctamente el JSON * fix: selecion de profesional en el drop down * fix: rebase con main * fix: traigo correctamente el JSON * fix: selecion de profesional en el drop down * fix: correcion luego de correcion de conflictos * fix: correcion luego de correcion de conflictos * correciones de los conflictos * fix de testing, comentados console log * nuevos hidden para controlar todos los post back del formulario * comentarios de las funciones * js * fix: estados en txtDatos * se toma en cuenta cuando hay redirect de cambio de … * correcion hoja de trabajo * Mantenimiento Abril20260422 (#86) * correcion hoja de trabajo * mejora para otros efectores * fix: bouquet Roldan * Mantenimiento Mayo 1 (#90) * correcion hoja de trabajo * mejora para otros efectores --------- Co-authored-by: caroPintos <77695282+caroPintos@users.noreply.github.com> Co-authored-by: Caro --- .../HTrabajoProtocolo2Horizontal.cs | 217 ++++++++++++++++++ WebLab/WebLab.csproj | 14 +- 2 files changed, 223 insertions(+), 8 deletions(-) create mode 100644 WebLab/Informes/HojasdeTrabajo/HTrabajoProtocolo2Horizontal.cs diff --git a/WebLab/Informes/HojasdeTrabajo/HTrabajoProtocolo2Horizontal.cs b/WebLab/Informes/HojasdeTrabajo/HTrabajoProtocolo2Horizontal.cs new file mode 100644 index 00000000..da616cbc --- /dev/null +++ b/WebLab/Informes/HojasdeTrabajo/HTrabajoProtocolo2Horizontal.cs @@ -0,0 +1,217 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace WebLab.Informes.HojasdeTrabajo { + using System; + using System.ComponentModel; + using CrystalDecisions.Shared; + using CrystalDecisions.ReportSource; + using CrystalDecisions.CrystalReports.Engine; + + + public class HTrabajoProtocolo2Horizontal : ReportClass { + + public HTrabajoProtocolo2Horizontal() { + } + + public override string ResourceName { + get { + return "HTrabajoProtocolo2Horizontal.rpt"; + } + set { + // Do nothing + } + } + + public override bool NewGenerator { + get { + return true; + } + set { + // Do nothing + } + } + + public override string FullResourceName { + get { + return "WebLab.Informes.HojasdeTrabajo.HTrabajoProtocolo2Horizontal.rpt"; + } + set { + // Do nothing + } + } + + [Browsable(false)] + [DesignerSerializationVisibilityAttribute(System.ComponentModel.DesignerSerializationVisibility.Hidden)] + public CrystalDecisions.CrystalReports.Engine.Section Section1 { + get { + return this.ReportDefinition.Sections[0]; + } + } + + [Browsable(false)] + [DesignerSerializationVisibilityAttribute(System.ComponentModel.DesignerSerializationVisibility.Hidden)] + public CrystalDecisions.CrystalReports.Engine.Section Section2 { + get { + return this.ReportDefinition.Sections[1]; + } + } + + [Browsable(false)] + [DesignerSerializationVisibilityAttribute(System.ComponentModel.DesignerSerializationVisibility.Hidden)] + public CrystalDecisions.CrystalReports.Engine.Section GroupHeaderSection1 { + get { + return this.ReportDefinition.Sections[2]; + } + } + + [Browsable(false)] + [DesignerSerializationVisibilityAttribute(System.ComponentModel.DesignerSerializationVisibility.Hidden)] + public CrystalDecisions.CrystalReports.Engine.Section GroupHeaderSection2 { + get { + return this.ReportDefinition.Sections[3]; + } + } + + [Browsable(false)] + [DesignerSerializationVisibilityAttribute(System.ComponentModel.DesignerSerializationVisibility.Hidden)] + public CrystalDecisions.CrystalReports.Engine.Section Section3 { + get { + return this.ReportDefinition.Sections[4]; + } + } + + [Browsable(false)] + [DesignerSerializationVisibilityAttribute(System.ComponentModel.DesignerSerializationVisibility.Hidden)] + public CrystalDecisions.CrystalReports.Engine.Section GroupFooterSection2 { + get { + return this.ReportDefinition.Sections[5]; + } + } + + [Browsable(false)] + [DesignerSerializationVisibilityAttribute(System.ComponentModel.DesignerSerializationVisibility.Hidden)] + public CrystalDecisions.CrystalReports.Engine.Section GroupFooterSection1 { + get { + return this.ReportDefinition.Sections[6]; + } + } + + [Browsable(false)] + [DesignerSerializationVisibilityAttribute(System.ComponentModel.DesignerSerializationVisibility.Hidden)] + public CrystalDecisions.CrystalReports.Engine.Section Section4 { + get { + return this.ReportDefinition.Sections[7]; + } + } + + [Browsable(false)] + [DesignerSerializationVisibilityAttribute(System.ComponentModel.DesignerSerializationVisibility.Hidden)] + public CrystalDecisions.CrystalReports.Engine.Section Section5 { + get { + return this.ReportDefinition.Sections[8]; + } + } + + [Browsable(false)] + [DesignerSerializationVisibilityAttribute(System.ComponentModel.DesignerSerializationVisibility.Hidden)] + public CrystalDecisions.Shared.IParameterField Parameter_encabezado1 { + get { + return this.DataDefinition.ParameterFields[0]; + } + } + + [Browsable(false)] + [DesignerSerializationVisibilityAttribute(System.ComponentModel.DesignerSerializationVisibility.Hidden)] + public CrystalDecisions.Shared.IParameterField Parameter_encabezado2 { + get { + return this.DataDefinition.ParameterFields[1]; + } + } + + [Browsable(false)] + [DesignerSerializationVisibilityAttribute(System.ComponentModel.DesignerSerializationVisibility.Hidden)] + public CrystalDecisions.Shared.IParameterField Parameter_encabezado3 { + get { + return this.DataDefinition.ParameterFields[2]; + } + } + + [Browsable(false)] + [DesignerSerializationVisibilityAttribute(System.ComponentModel.DesignerSerializationVisibility.Hidden)] + public CrystalDecisions.Shared.IParameterField Parameter_imprimirFechaHora { + get { + return this.DataDefinition.ParameterFields[3]; + } + } + } + + [System.Drawing.ToolboxBitmapAttribute(typeof(CrystalDecisions.Shared.ExportOptions), "report.bmp")] + public class CachedHTrabajoProtocolo2Horizontal : Component, ICachedReport { + + public CachedHTrabajoProtocolo2Horizontal() { + } + + [Browsable(false)] + [DesignerSerializationVisibilityAttribute(System.ComponentModel.DesignerSerializationVisibility.Hidden)] + public virtual bool IsCacheable { + get { + return true; + } + set { + // + } + } + + [Browsable(false)] + [DesignerSerializationVisibilityAttribute(System.ComponentModel.DesignerSerializationVisibility.Hidden)] + public virtual bool ShareDBLogonInfo { + get { + return false; + } + set { + // + } + } + + [Browsable(false)] + [DesignerSerializationVisibilityAttribute(System.ComponentModel.DesignerSerializationVisibility.Hidden)] + public virtual System.TimeSpan CacheTimeOut { + get { + return CachedReportConstants.DEFAULT_TIMEOUT; + } + set { + // + } + } + + public virtual CrystalDecisions.CrystalReports.Engine.ReportDocument CreateReport() { + HTrabajoProtocolo2Horizontal rpt = new HTrabajoProtocolo2Horizontal(); + rpt.Site = this.Site; + return rpt; + } + + public virtual string GetCustomizedCacheKey(RequestContext request) { + String key = null; + // // The following is the code used to generate the default + // // cache key for caching report jobs in the ASP.NET Cache. + // // Feel free to modify this code to suit your needs. + // // Returning key == null causes the default cache key to + // // be generated. + // + // key = RequestContext.BuildCompleteCacheKey( + // request, + // null, // sReportFilename + // this.GetType(), + // this.ShareDBLogonInfo ); + return key; + } + } +} diff --git a/WebLab/WebLab.csproj b/WebLab/WebLab.csproj index f06aebe9..690222be 100644 --- a/WebLab/WebLab.csproj +++ b/WebLab/WebLab.csproj @@ -2124,7 +2124,6 @@ - @@ -4854,13 +4853,6 @@ ResultadoDefault.aspx - - ResultadosaSisa.aspx - ASPXCodeBehind - - - ResultadosaSisa.aspx - SinDatos.aspx ASPXCodeBehind @@ -4947,6 +4939,12 @@ HistorialPorUsuario.aspx + + True + True + HTrabajoProtocolo2Horizontal.rpt + Component + PacientesList.aspx ASPXCodeBehind From fb3e141bdbfcb40a3f2e0745877c3c4e2c19be2b Mon Sep 17 00:00:00 2001 From: Vanesa Rimada <80859025+vrimada@users.noreply.github.com> Date: Mon, 4 May 2026 15:24:12 -0300 Subject: [PATCH 11/37] (LAB-243) Visualizacion de disponibilidad de turnos por efector. (#84) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Visualizacion de disponibilidad de turnos por efector. Cambio de llamada de base de datos para mejorar performance. * mejora sql * Visualizacion de disponibilidad de turnos por efector. Cambio de llamada de base de datos para mejorar performance. * mejora sql * (Lab 239) ABM y Lista Usuarios (#82) * Nueva funcionalidad. Agregar en la lista de usuarios por efector los usuarios de los CS (perfil Administrativo externo) vinculados a su efector * fix: que se actualice idEfector de Sys_Usuario al editar la lista de efectores vinculados * Nueva funcionalidad. Agregar en la lista de usuarios por efector los usuarios de los CS (perfil Administrativo externo) vinculados a su efector * fix: que se actualice idEfector de Sys_Usuario al editar la lista de efectores vinculados * fix: agregar en el listado pero no en el filtro las salitas que usan el laboratorio del efector * feature: se agrego ordenamiento * fix: agregar en el listado pero no en el filtro las salitas que usan el laboratorio del efector * feature: se agrego ordenamiento * fix: correcion de turnos para usuario externo * (Lab 230) Bugs de edicion de determinaciones desde Validacion (#78) * pasamos llenarTablas de Page PreInit a Page Init * en proceso. fix anterior no sirvio. probar si esta correcion es valida * fix: la correcion real se realiza colocando en cada control enableViewState=false * msj * Mantenimiento20260406 (#81) * (LAB-236) Bug de tildado sin muestra automatico (#80) * fix: Bug de tildado sin muestra automatico * fix: correcion de los colores de validacion en Editar Practicas * Mantenimiento20260406 (#81) * fix: Bug de tildado sin muestra automatico --------- Co-authored-by: caroPintos <77695282+caroPintos@users.noreply.github.com> * (LAB-232) bug de "Recordar Analisis" por tipo de servicio (#77) * fix: se corrige el bug de "recordar analisis" * (LAB-205) Modificación en ABM de usuarios (#64) * nuevo req, se agrega el tipo de autenticacion * feat: se agrega un modal para que acepte terminos y condiciones. Se agrega en la bd la fecha y el log de Aceptacion de los terminos * (Lab-195) Requerimientos Derivaciones (#61) * feature: Grabar estado inicial de derivación. ResultadoCar: “Pendiente de Derivar” * fix: solo se actualizan los detalleProtocolos que se ingresaron al protocolo. * fix: de query que actualiza las derivaciones en el protocolo emisor * fix: Flexibilizar fecha y hora de retiro del lote * fix: correcion de fecha en recepcion de lote * fix: por ahora no restringimos la fecha de recibo * fix: faltaba la auditoria * para resolver conflicto * fix: para no pacientes cambio del metodo de derivacion que guarda el ResultadoCar * controles para el error de test * controles para el error de test * recibir lote. se saco try catch con nueva funcion de GET en BaseDataAccess * correciones para test * para pasar a test 12/1/2025 * correciones de Caro y Vane * Mantenimiento Enero 2026 (#69) * fix: habilitar cambiar tipo de autenticacion y ampliar el ancho de listado de usuarios * ---hablar con caro por este cambio * fix: pendiente de revision proceso de alta de usuario * Delete Tests-Cypress/cypress/fixtures/local.env.json * (LAB-107) Correccion de bug "Se borran los analisis del protocolo/turno al elegir un medico" (#26) * fix: rebase con main * fix: traigo correctamente el JSON * fix: selecion de profesional en el drop down * fix: rebase con main * fix: traigo correctamente el JSON * fix: selecion de profesional en el drop down * fix: valida que si puso una matricula elija un medico y no la opcion "--selecciona--" * fix: se corrige el bug que borraba los analisis cargados en un protocolo cuando se abria el pop up de seleccionar medico * fix: se corrige el bug que borraba los analisis cargados en un protocolo cuando se abria el pop up de seleccionar medico * Al resolver conflicto falto llamar el metodo CargarDatosTxtDatosCargados * fix: correcciones de pruebas de Caro. Cuando se destildaba una determinacion tildaba, y cuando se carga el combo de profesionales, que de error si no se eligio ninguno * fix: rebase con main * fix: traigo correctamente el JSON * fix: selecion de profesional en el drop down * fix: rebase con main * fix: traigo correctamente el JSON * fix: selecion de profesional en el drop down * fix: correcion luego de correcion de conflictos * fix: correcion luego de correcion de conflictos * correciones de los conflictos * fix de testing, comentados console log * nuevos hidden para controlar todos los post back del formulario * comentarios de las funciones * js * fix: estados en txtDatos * se toma en cuenta cuando hay redirect de cambio de paciente. y fix de carga de txtdatos * fix: Protocolos – Análisis repetidos * fix: rebaseo con main * fix: correcion script sql * Asociado a LAB-214: Sacar del PR la correcion de la tarea https://proyectos.andes.gob.ar/browse/LAB-192 (pasarla a otra rama ) para despues trabajarla, ya que baja mucho la performance del sistema. * fix: 1-protocolo: en la validacion faltaba mantener los datos cargados para los casos de error de FIS, FUC y fecha de muestra 2-turnos: que no se duplique el medico solicitante 3-resultados: sacar LAB192 * label para medico * Mantenimientoprotocolosy turnos (#72) * (LAB-215) BUG Cambio de paciente (#71) * fix: correcion de bug al cambiar paciente en Protocolo que generaba uno nuevo. Bug que pasa cuando se cambia de paciente a uno nuevo. * fix: para cambio de paciente, si da error de validacion que no borre las determinaciones * (LAB-118)fix: Correcion de bug para llenar el formulario de los resultados (#53) * fix: Correcion de bug para llenar el formulario de los resultados * (Lab-195) Requerimientos Derivaciones (#61) * feature: Grabar estado inicial de derivación. ResultadoCar: “Pendiente de Derivar” * fix: solo se actualizan los detalleProtocolos que se ingresaron al protocolo. * fix: de query que actualiza las derivaciones en el protocolo emisor * fix: Flexibilizar fecha y hora de retiro del lote * fix: correcion de fecha en recepcion de lote * fix: por ahora no restringimos la fecha de recibo * fix: faltaba la auditoria * para resolver conflicto * fix: para no pacientes cambio del metodo de derivacion que guarda el ResultadoCar * controles para el error de test * controles para el error de test * recibir lote. se saco try catch con nueva funcion de GET en BaseDataAccess * correciones para test * para pasar a test 12/1/2025 * correciones de Caro y Vane * Mantenimiento Enero 2026 (#69) * (LAB-107) Correccion de bug "Se borran los analisis del protocolo/turno al elegir un medico" (#26) * fix: rebase con main * fix: traigo correctamente el JSON * fix: selecion de profesional en el drop down * fix: rebase con main * fix: traigo correctamente el JSON * fix: selecion de profesional en el drop down * fix: valida que si puso una matricula elija un medico y no la opcion "--selecciona--" * fix: se corrige el bug que borraba los analisis cargados en un protocolo cuando se abria el pop up de seleccionar medico * fix: se corrige el bug que borraba los analisis cargados en un protocolo cuando se abria el pop up de seleccionar medico * Al resolver conflicto falto llamar el metodo CargarDatosTxtDatosCargados * fix: correcciones de pruebas de Caro. Cuando se destildaba una determinacion tildaba, y cuando se carga el combo de profesionales, que de error si no se eligio ninguno * fix: rebase con main * fix: traigo correctamente el JSON * fix: selecion de profesional en el drop down * fix: rebase con main * fix: traigo correctamente el JSON * fix: selecion de profesional en el drop down * fix: correcion luego de correcion de conflictos * fix: correcion luego de correcion de conflictos * correciones de los conflictos * fix de testing, comentados console log * nuevos hidden para controlar todos los post back del formulario * comentarios de las funciones * js * fix: estados en txtDatos * se toma en cuenta cuando hay redirect de cambio de paciente. y fix de carga de txtdatos * fix: Protocolos – Análisis repetidos * fix: rebaseo con main * fix: correcion script sql * Asociado a LAB-214: Sacar del PR la correcion de la tarea https://proyectos.andes.gob.ar/browse/LAB-192 (pasarla a otra rama ) para despues trabajarla, ya que baja mucho la performance del sistema. * fix: 1-protocolo: en la validacion faltaba mantener los datos cargados para los casos de error de FIS, FUC y fecha de muestra 2-turnos: que no se duplique el medico solicitante 3-resultados: sacar LAB192 * label para medico * Mantenimientoprotocolosy turnos (#72) * fix: Correcion de bug para llenar el formulario de los resultados * fix: un tiempo de espera para que cargue correctamente el Check de s/Muestra --------- Co-authored-by: caroPintos <77695282+caroPintos@users.noreply.github.com> * fix: cartel de error para combinacion onelogin y externo * fix: formato msj error y linea repetida * ejemplos de uso de libreria select2 * Revert "ejemplos de uso de libreria select2" This reverts commit 8d9ae9c457944d59d50bffa46098682d38f49b03. * (LAB-216)Error: Prompt de médicos en gestión de turnos desde Centro de Salud (#73) * fix: se agrega configuracion para usurio externo * comments * fix: sacamos "No identificado" cuando da exception * (LAB-215) BUG Cambio de paciente (#71) * fix: correcion de bug al cambiar paciente en Protocolo que generaba uno nuevo. Bug que pasa cuando se cambia de paciente a uno nuevo. * fix: para cambio de paciente, si da error de validacion que no borre las determinaciones * (LAB-118)fix: Correcion de bug para llenar el formulario de los resultados (#53) * fix: Correcion de bug para llenar el formulario de los resultados * (Lab-195) Requerimientos Derivaciones (#61) * feature: Grabar estado inicial de derivación. ResultadoCar: “Pendiente de Derivar” * fix: solo se actualizan los detalleProtocolos que se ingresaron al protocolo. * fix: de query que actualiza las derivaciones en el protocolo emisor * fix: Flexibilizar fecha y hora de retiro del lote * fix: correcion de fecha en recepcion de lote * fix: por ahora no restringimos la fecha de recibo * fix: faltaba la auditoria * para resolver conflicto * fix: para no pacientes cambio del metodo de derivacion que guarda el ResultadoCar * controles para el error de test * controles para el error de test * recibir lote. se saco try catch con nueva funcion de GET en BaseDataAccess * correciones para test * para pasar a test 12/1/2025 * correciones de Caro y Vane * Mantenimiento Enero 2026 (#69) * (LAB-107) Correccion de bug "Se borran los analisis del protocolo/turno al elegir un medico" (#26) * fix: rebase con main * fix: traigo correctamente el JSON * fix: selecion de profesional en el drop down * fix: rebase con main * fix: traigo correctamente el JSON * fix: selecion de profesional en el drop down * fix: valida que si puso una matricula elija un medico y no la opcion "--selecciona--" * fix: se corrige el bug que borraba los analisis cargados en un protocolo cuando se abria el pop up de seleccionar medico * fix: se corrige el bug que borraba los analisis cargados en un protocolo cuando se abria el pop up de seleccionar medico * Al resolver conflicto falto llamar el metodo CargarDatosTxtDatosCargados * fix: correcciones de pruebas de Caro. Cuando se destildaba una determinacion tildaba, y cuando se carga el combo de profesionales, que de error si no se eligio ninguno * fix: rebase con main * fix: traigo correctamente el JSON * fix: selecion de profesional en el drop down * fix: rebase con main * fix: traigo correctamente el JSON * fix: selecion de profesional en el drop down * fix: correcion luego de correcion de conflictos * fix: correcion luego de correcion de conflictos * correciones de los conflictos * fix de testing, comentados console log * nuevos hidden para controlar todos los post back del formulario * comentarios de las funciones * js * fix: estados en txtDatos * se toma en cuenta cuando hay redirect de cambio de paciente. y fix de carga de txtdatos * fix: Protocolos – Análisis repetidos * fix: rebaseo con main * fix: correcion script sql * Asociado a LAB-214: Sacar del PR la correcion de la tarea https://proyectos.andes.gob.ar/browse/LAB-192 (pasarla a otra rama ) para despues trabajarla, ya que baja mucho la performance del sistema. * fix: 1-protocolo: en la validacion faltaba mantener los datos cargados para los casos de error de FIS, FUC y fecha de muestra 2-turnos: que no se duplique el medico solicitante 3-resultados: sacar LAB192 * label para medico * Mantenimientoprotocolosy turnos (#72) * fix: Correcion de bug para llenar el formulario de los resultados * fix: un tiempo de espera para que cargue correctamente el Check de s/Muestra --------- Co-authored-by: caroPintos <77695282+caroPintos@users.noreply.github.com> * fix: se agrega configuracion para usurio externo * comments * fix: sacamos "No identificado" cuando da exception --------- Co-authored-by: caroPintos <77695282+caroPintos@users.noreply.github.com> * cambios en proceso * feature: busqueda para lista de usuarios * visualizacion con grilla * fix: para todos los perfiles que no son "Administrativo Externo " que desaparezca la grilla EfectorLaboratorio y que quede el valor en "0" * lista de usuarios: check de solo admins * fix: libreria chosen compatible con controladores anthem * fix: en load que valide si hay sesion * Mantenimiento Marzo 1 (#75) Auditoria Sin Insumo:Se corrige funcionalidad para que cuando se cambie de "sin insumo" a "disponible" se borren las marcas de validacion de "sin insumo" automaticas. Resultados por HT:Se corrige que no se mostraba valor por defecto en determinaciones de tipo de resultado predeterminado (simple y multiple). Mapeo SIL y SISA: Se agrega la opcion de descargar a excel el mapeo de interoperabilidad entre el SIL y SISA desde Configuracion-> Parametros SI (solapa Interoperabilidad SISA)Nueva Funcionalidad Placas:Se agrega funcionalidad con la opcion que sea multiefector.Nueva Funcionalidad Agendas y Turnos: Se corrige bug que no permite dar turnos en dias domingo. Turnos desde C.S:Se corrige seleccion de medico solicitante. * nuevo req, se agrega el tipo de autenticacion * fix: habilitar cambiar tipo de autenticacion y ampliar el ancho de listado de usuarios * ---hablar con caro por este cambio * fix: pendiente de revision proceso de alta de usuario * fix: cartel de error para combinacion onelogin y externo * Delete Tests-Cypress/cypress/fixtures/local.env.json * fix: formato msj error y linea repetida * ejemplos de uso de libreria select2 * Revert "ejemplos de uso de libreria select2" This reverts commit 8d9ae9c457944d59d50bffa46098682d38f49b03. * cambios en proceso * feature: busqueda para lista de usuarios * visualizacion con grilla * fix: para todos los perfiles que no son "Administrativo Externo " que desaparezca la grilla EfectorLaboratorio y que quede el valor en "0" * lista de usuarios: check de solo admins * fix: libreria chosen compatible con controladores anthem * correcion luego de las correciones de conflictos * auditorias * auditoria y guardar efector en modificacion * lbl error --------- Co-authored-by: caroPintos <77695282+caroPintos@users.noreply.github.com> * fix: correcion en "No funciona validacion de análisis" * (Lab 224) Corrección de bug sobre la edición de determinaciones con la marca “sin muestra” (#74) * fix; Corrección de bug sobre la edición de determinaciones con la marca “sin muestra”, regenera los detalles si no existian * fix; Corrección de bug sobre la edición de determinaciones con la marca “sin muestra”, regenera los detalles si no existian * fix: mismo fix en protocolo edit * fix: agrego que sea titulo para entrar a la regeneracion de items * fix: manera de listar los items en la grilla. verificar de no generar derivados. * cambio valores de resultado por variable ConResultado * ajuste actualizacion obra social del paciente --------- Co-authored-by: Caro * fix: se corrige el bug de "recordar analisis" * fix: correcion en "No funciona validacion de análisis" * Mantenimiento20260406 (#81) * (LAB-236) Bug de tildado sin muestra automatico (#80) * fix: Bug de tildado sin muestra automatico * fix: correcion de los colores de validacion en Editar Practicas * Mantenimiento20260406 (#81) * fix: Bug de tildado sin muestra automatico --------- Co-authored-by: caroPintos <77695282+caroPintos@users.noreply.github.com> * fix: se corrige el bug de "recordar analisis" * fix: correcion en "No funciona validacion de análisis" --------- Co-authored-by: caroPintos <77695282+caroPintos@users.noreply.github.com> Co-authored-by: Caro * (LAB-235) Validacion de análisis en la modificación de un protocolo (#79) * fix: validacion de analisis * Mantenimiento20260406 (#81) * (LAB-236) Bug de tildado sin muestra automatico (#80) * fix: Bug de tildado sin muestra automatico * fix: correcion de los colores de validacion en Editar Practicas * Mantenimiento20260406 (#81) * fix: Bug de tildado sin muestra automatico --------- Co-authored-by: caroPintos <77695282+caroPintos@users.noreply.github.com> * (LAB-232) bug de "Recordar Analisis" por tipo de servicio (#77) * fix: se corrige el bug de "recordar analisis" * (LAB-205) Modificación en ABM de usuarios (#64) * nuevo req, se agrega el tipo de autenticacion * feat: se agrega un modal para que acepte terminos y condiciones. Se agrega en la bd la fecha y el log de Aceptacion de los terminos * (Lab-195) Requerimientos Derivaciones (#61) * feature: Grabar estado inicial de derivación. ResultadoCar: “Pendiente de Derivar” * fix: solo se actualizan los detalleProtocolos que se ingresaron al protocolo. * fix: de query que actualiza las derivaciones en el protocolo emisor * fix: Flexibilizar fecha y hora de retiro del lote * fix: correcion de fecha en recepcion de lote * fix: por ahora no restringimos la fecha de recibo * fix: faltaba la auditoria * para resolver conflicto * fix: para no pacientes cambio del metodo de derivacion que guarda el ResultadoCar * controles para el error de test * controles para el error de test * recibir lote. se saco try catch con nueva funcion de GET en BaseDataAccess * correciones para test * para pasar a test 12/1/2025 * correciones de Caro y Vane * Mantenimiento Enero 2026 (#69) * fix: habilitar cambiar tipo de autenticacion y ampliar el ancho de listado de usuarios * ---hablar con caro por este cambio * fix: pendiente de revision proceso de alta de usuario * Delete Tests-Cypress/cypress/fixtures/local.env.json * (LAB-107) Correccion de bug "Se borran los analisis del protocolo/turno al elegir un medico" (#26) * fix: rebase con main * fix: traigo correctamente el JSON * fix: selecion de profesional en el drop down * fix: rebase con main * fix: traigo correctamente el JSON * fix: selecion de profesional en el drop down * fix: valida que si puso una matricula elija un medico y no la opcion "--selecciona--" * fix: se corrige el bug que borraba los analisis cargados en un protocolo cuando se abria el pop up de seleccionar medico * fix: se corrige el bug que borraba los analisis cargados en un protocolo cuando se abria el pop up de seleccionar medico * Al resolver conflicto falto llamar el metodo CargarDatosTxtDatosCargados * fix: correcciones de pruebas de Caro. Cuando se destildaba una determinacion tildaba, y cuando se carga el combo de profesionales, que de error si no se eligio ninguno * fix: rebase con main * fix: traigo correctamente el JSON * fix: selecion de profesional en el drop down * fix: rebase con main * fix: traigo correctamente el JSON * fix: selecion de profesional en el drop down * fix: correcion luego de correcion de conflictos * fix: correcion luego de correcion de conflictos * correciones de los conflictos * fix de testing, comentados console log * nuevos hidden para controlar todos los post back del formulario * comentarios de las funciones * js * fix: estados en txtDatos * se toma en cuenta cuando hay redirect de cambio de paciente. y fix de carga de txtdatos * fix: Protocolos – Análisis repetidos * fix: rebaseo con main * fix: correcion script sql * Asociado a LAB-214: Sacar del PR la correcion de la tarea https://proyectos.andes.gob.ar/browse/LAB-192 (pasarla a otra rama ) para despues trabajarla, ya que baja mucho la performance del sistema. * fix: 1-protocolo: en la validacion faltaba mantener los datos cargados para los casos de error de FIS, FUC y fecha de muestra 2-turnos: que no se duplique el medico solicitante 3-resultados: sacar LAB192 * label para medico * Mantenimientoprotocolosy turnos (#72) * (LAB-215) BUG Cambio de paciente (#71) * fix: correcion de bug al cambiar paciente en Protocolo que generaba uno nuevo. Bug que pasa cuando se cambia de paciente a uno nuevo. * fix: para cambio de paciente, si da error de validacion que no borre las determinaciones * (LAB-118)fix: Correcion de bug para llenar el formulario de los resultados (#53) * fix: Correcion de bug para llenar el formulario de los resultados * (Lab-195) Requerimientos Derivaciones (#61) * feature: Grabar estado inicial de derivación. ResultadoCar: “Pendiente de Derivar” * fix: solo se actualizan los detalleProtocolos que se ingresaron al protocolo. * fix: de query que actualiza las derivaciones en el protocolo emisor * fix: Flexibilizar fecha y hora de retiro del lote * fix: correcion de fecha en recepcion de lote * fix: por ahora no restringimos la fecha de recibo * fix: faltaba la auditoria * para resolver conflicto * fix: para no pacientes cambio del metodo de derivacion que guarda el ResultadoCar * controles para el error de test * controles para el error de test * recibir lote. se saco try catch con nueva funcion de GET en BaseDataAccess * correciones para test * para pasar a test 12/1/2025 * correciones de Caro y Vane * Mantenimiento Enero 2026 (#69) * (LAB-107) Correccion de bug "Se borran los analisis del protocolo/turno al elegir un medico" (#26) * fix: rebase con main * fix: traigo correctamente el JSON * fix: selecion de profesional en el drop down * fix: rebase con main * fix: traigo correctamente el JSON * fix: selecion de profesional en el drop down * fix: valida que si puso una matricula elija un medico y no la opcion "--selecciona--" * fix: se corrige el bug que borraba los analisis cargados en un protocolo cuando se abria el pop up de seleccionar medico * fix: se corrige el bug que borraba los analisis cargados en un protocolo cuando se abria el pop up de seleccionar medico * Al resolver conflicto falto llamar el metodo CargarDatosTxtDatosCargados * fix: correcciones de pruebas de Caro. Cuando se destildaba una determinacion tildaba, y cuando se carga el combo de profesionales, que de error si no se eligio ninguno * fix: rebase con main * fix: traigo correctamente el JSON * fix: selecion de profesional en el drop down * fix: rebase con main * fix: traigo correctamente el JSON * fix: selecion de profesional en el drop down * fix: correcion luego de correcion de conflictos * fix: correcion luego de correcion de conflictos * correciones de los conflictos * fix de testing, comentados console log * nuevos hidden para controlar todos los post back del formulario * comentarios de las funciones * js * fix: estados en txtDatos * se toma en cuenta cuando hay redirect de cambio de paciente. y fix de carga de txtdatos * fix: Protocolos – Análisis repetidos * fix: rebaseo con main * fix: correcion script sql * Asociado a LAB-214: Sacar del PR la correcion de la tarea https://proyectos.andes.gob.ar/browse/LAB-192 (pasarla a otra rama ) para despues trabajarla, ya que baja mucho la performance del sistema. * fix: 1-protocolo: en la validacion faltaba mantener los datos cargados para los casos de error de FIS, FUC y fecha de muestra 2-turnos: que no se duplique el medico solicitante 3-resultados: sacar LAB192 * label para medico * Mantenimientoprotocolosy turnos (#72) * fix: Correcion de bug para llenar el formulario de los resultados * fix: un tiempo de espera para que cargue correctamente el Check de s/Muestra --------- Co-authored-by: caroPintos <77695282+caroPintos@users.noreply.github.com> * fix: cartel de error para combinacion onelogin y externo * fix: formato msj error y linea repetida * ejemplos de uso de libreria select2 * Revert "ejemplos de uso de libreria select2" This reverts commit 8d9ae9c457944d59d50bffa46098682d38f49b03. * (LAB-216)Error: Prompt de médicos en gestión de turnos desde Centro de Salud (#73) * fix: se agrega configuracion para usurio externo * comments * fix: sacamos "No identificado" cuando da exception * (LAB-215) BUG Cambio de paciente (#71) * fix: correcion de bug al cambiar paciente en Protocolo que generaba uno nuevo. Bug que pasa cuando se cambia de paciente a uno nuevo. * fix: para cambio de paciente, si da error de validacion que no borre las determinaciones * (LAB-118)fix: Correcion de bug para llenar el formulario de los resultados (#53) * fix: Correcion de bug para llenar el formulario de los resultados * (Lab-195) Requerimientos Derivaciones (#61) * feature: Grabar estado inicial de derivación. ResultadoCar: “Pendiente de Derivar” * fix: solo se actualizan los detalleProtocolos que se ingresaron al protocolo. * fix: de query que actualiza las derivaciones en el protocolo emisor * fix: Flexibilizar fecha y hora de retiro del lote * fix: correcion de fecha en recepcion de lote * fix: por ahora no restringimos la fecha de recibo * fix: faltaba la auditoria * para resolver conflicto * fix: para no pacientes cambio del metodo de derivacion que guarda el ResultadoCar * controles para el error de test * controles para el error de test * recibir lote. se saco try catch con nueva funcion de GET en BaseDataAccess * correciones para test * para pasar a test 12/1/2025 * correciones de Caro y Vane * Mantenimiento Enero 2026 (#69) * (LAB-107) Correccion de bug "Se borran los analisis del protocolo/turno al elegir un medico" (#26) * fix: rebase con main * fix: traigo correctamente el JSON * fix: selecion de profesional en el drop down * fix: rebase con main * fix: traigo correctamente el JSON * fix: selecion de profesional en el drop down * fix: valida que si puso una matricula elija un medico y no la opcion "--selecciona--" * fix: se corrige el bug que borraba los analisis cargados en un protocolo cuando se abria el pop up de seleccionar medico * fix: se corrige el bug que borraba los analisis cargados en un protocolo cuando se abria el pop up de seleccionar medico * Al resolver conflicto falto llamar el metodo CargarDatosTxtDatosCargados * fix: correcciones de pruebas de Caro. Cuando se destildaba una determinacion tildaba, y cuando se carga el combo de profesionales, que de error si no se eligio ninguno * fix: rebase con main * fix: traigo correctamente el JSON * fix: selecion de profesional en el drop down * fix: rebase con main * fix: traigo correctamente el JSON * fix: selecion de profesional en el drop down * fix: correcion luego de correcion de conflictos * fix: correcion luego de correcion de conflictos * correciones de los conflictos * fix de testing, comentados console log * nuevos hidden para controlar todos los post back del formulario * comentarios de las funciones * js * fix: estados en txtDatos * se toma en cuenta cuando hay redirect de cambio de paciente. y fix de carga de txtdatos * fix: Protocolos – Análisis repetidos * fix: rebaseo con main * fix: correcion script sql * Asociado a LAB-214: Sacar del PR la correcion de la tarea https://proyectos.andes.gob.ar/browse/LAB-192 (pasarla a otra rama ) para despues trabajarla, ya que baja mucho la performance del sistema. * fix: 1-protocolo: en la validacion faltaba mantener los datos cargados para los casos de error de FIS, FUC y fecha de muestra 2-turnos: que no se duplique el medico solicitante 3-resultados: sacar LAB192 * label para medico * Mantenimientoprotocolosy turnos (#72) * fix: Correcion de bug para llenar el formulario de los resultados * fix: un tiempo de espera para que cargue correctamente el Check de s/Muestra --------- Co-authored-by: caroPintos <77695282+caroPintos@users.noreply.github.com> * fix: se agrega configuracion para usurio externo * comments * fix: sacamos "No identificado" cuando da exception --------- Co-authored-by: caroPintos <77695282+caroPintos@users.noreply.github.com> * cambios en proceso * feature: busqueda para lista de usuarios * visualizacion con grilla * fix: para todos los perfiles que no son "Administrativo Externo " que desaparezca la grilla EfectorLaboratorio y que quede el valor en "0" * lista de usuarios: check de solo admins * fix: libreria chosen compatible con controladores anthem * fix: en load que valide si hay sesion * Mantenimiento Marzo 1 (#75) Auditoria Sin Insumo:Se corrige funcionalidad para que cuando se cambie de "sin insumo" a "disponible" se borren las marcas de validacion de "sin insumo" automaticas. Resultados por HT:Se corrige que no se mostraba valor por defecto en determinaciones de tipo de resultado predeterminado (simple y multiple). Mapeo SIL y SISA: Se agrega la opcion de descargar a excel el mapeo de interoperabilidad entre el SIL y SISA desde Configuracion-> Parametros SI (solapa Interoperabilidad SISA)Nueva Funcionalidad Placas:Se agrega funcionalidad con la opcion que sea multiefector.Nueva Funcionalidad Agendas y Turnos: Se corrige bug que no permite dar turnos en dias domingo. Turnos desde C.S:Se corrige seleccion de medico solicitante. * nuevo req, se agrega el tipo de autenticacion * fix: habilitar cambiar tipo de autenticacion y ampliar el ancho de listado de usuarios * ---hablar con caro por este cambio * fix: pendiente de revision proceso de alta de usuario * fix: cartel de error para combinacion onelogin y externo * Delete Tests-Cypress/cypress/fixtures/local.env.json * fix: formato msj error y linea repetida * ejemplos de uso de libreria select2 * Revert "ejemplos de uso de libreria select2" This reverts commit 8d9ae9c457944d59d50bffa46098682d38f49b03. * cambios en proceso * feature: busqueda para lista de usuarios * visualizacion con grilla * fix: para todos los perfiles que no son "Administrativo Externo " que desaparezca la grilla EfectorLaboratorio y que quede el valor en "0" * lista de usuarios: check de solo admins * fix: libreria chosen compatible con controladores anthem * correcion luego de las correciones de conflictos * auditorias * auditoria y guardar efector en modificacion * lbl error --------- Co-authored-by: caroPintos <77695282+caroPintos@users.noreply.github.com> * fix: correcion en "No funciona validacion de análisis" * (Lab 224) Corrección de bug sobre la edición de determinaciones con la marca “sin muestra” (#74) * fix; Corrección de bug sobre la edición de determinaciones con la marca “sin muestra”, regenera los detalles si no existian * fix; Corrección de bug sobre la edición de determinaciones con la marca “sin muestra”, regenera los detalles si no existian * fix: mismo fix en protocolo edit * fix: agrego que sea titulo para entrar a la regeneracion de items * fix: manera de listar los items en la grilla. verificar de no generar derivados. * cambio valores de resultado por variable ConResultado * ajuste actualizacion obra social del paciente --------- Co-authored-by: Caro * fix: se corrige el bug de "recordar analisis" * fix: correcion en "No funciona validacion de análisis" * Mantenimiento20260406 (#81) * (LAB-236) Bug de tildado sin muestra automatico (#80) * fix: Bug de tildado sin muestra automatico * fix: correcion de los colores de validacion en Editar Practicas * Mantenimiento20260406 (#81) * fix: Bug de tildado sin muestra automatico --------- Co-authored-by: caroPintos <77695282+caroPintos@users.noreply.github.com> * fix: se corrige el bug de "recordar analisis" * fix: correcion en "No funciona validacion de análisis" --------- Co-authored-by: caroPintos <77695282+caroPintos@users.noreply.github.com> Co-authored-by: Caro --------- Co-authored-by: caroPintos <77695282+caroPintos@users.noreply.github.com> Co-authored-by: Caro * pasamos llenarTablas de Page PreInit a Page Init * en proceso. fix anterior no sirvio. probar si esta correcion es valida * fix: la correcion real se realiza colocando en cada control enableViewState=false --------- Co-authored-by: caroPintos <77695282+caroPintos@users.noreply.github.com> Co-authored-by: Caro * (LAB-207) Modificación en ABM de Agendas (#66) * abm: se controla en el alta y modificacion que la agenda no se superponga con otras * fix: que no traiga agendas dadas de baja * abm: se controla en el alta y modificacion que la agenda no se superponga con otras * fix: que no traiga agendas dadas de baja * 'AjusteAgendasDiasDomingo' * correcion para que evalue el efector solicitante --------- Co-authored-by: Caro * (LAB-193)Correcion del error de SQL en Estadisticas De Resultados Combinados (practicas) (#63) * fix: correcion del error de sql * (Lab-195) Requerimientos Derivaciones (#61) * feature: Grabar estado inicial de derivación. ResultadoCar: “Pendiente de Derivar” * fix: solo se actualizan los detalleProtocolos que se ingresaron al protocolo. * fix: de query que actualiza las derivaciones en el protocolo emisor * fix: Flexibilizar fecha y hora de retiro del lote * fix: correcion de fecha en recepcion de lote * fix: por ahora no restringimos la fecha de recibo * fix: faltaba la auditoria * para resolver conflicto * fix: para no pacientes cambio del metodo de derivacion que guarda el ResultadoCar * controles para el error de test * controles para el error de test * recibir lote. se saco try catch con nueva funcion de GET en BaseDataAccess * correciones para test * para pasar a test 12/1/2025 * correciones de Caro y Vane * Mantenimiento Enero 2026 (#69) * (LAB-107) Correccion de bug "Se borran los analisis del protocolo/turno al elegir un medico" (#26) * fix: rebase con main * fix: traigo correctamente el JSON * fix: selecion de profesional en el drop down * fix: rebase con main * fix: traigo correctamente el JSON * fix: selecion de profesional en el drop down * fix: valida que si puso una matricula elija un medico y no la opcion "--selecciona--" * fix: se corrige el bug que borraba los analisis cargados en un protocolo cuando se abria el pop up de seleccionar medico * fix: se corrige el bug que borraba los analisis cargados en un protocolo cuando se abria el pop up de seleccionar medico * Al resolver conflicto falto llamar el metodo CargarDatosTxtDatosCargados * fix: correcciones de pruebas de Caro. Cuando se destildaba una determinacion tildaba, y cuando se carga el combo de profesionales, que de error si no se eligio ninguno * fix: rebase con main * fix: traigo correctamente el JSON * fix: selecion de profesional en el drop down * fix: rebase con main * fix: traigo correctamente el JSON * fix: selecion de profesional en el drop down * fix: correcion luego de correcion de conflictos * fix: correcion luego de correcion de conflictos * correciones de los conflictos * fix de testing, comentados console log * nuevos hidden para controlar todos los post back del formulario * comentarios de las funciones * js * fix: estados en txtDatos * se toma en cuenta cuando hay redirect de cambio de paciente. y fix de carga de txtdatos * fix: Protocolos – Análisis repetidos * fix: rebaseo con main * fix: correcion script sql * Asociado a LAB-214: Sacar del PR la correcion de la tarea https://proyectos.andes.gob.ar/browse/LAB-192 (pasarla a otra rama ) para despues trabajarla, ya que baja mucho la performance del sistema. * fix: 1-protocolo: en la validacion faltaba mantener los datos cargados para los casos de error de FIS, FUC y fecha de muestra 2-turnos: que no se duplique el medico solicitante 3-resultados: sacar LAB192 * label para medico * Mantenimientoprotocolosy turnos (#72) * (LAB-215) BUG Cambio de paciente (#71) * fix: correcion de bug al cambiar paciente en Protocolo que generaba uno nuevo. Bug que pasa cuando se cambia de paciente a uno nuevo. * fix: para cambio de paciente, si da error de validacion que no borre las determinaciones * (LAB-118)fix: Correcion de bug para llenar el formulario de los resultados (#53) * fix: Correcion de bug para llenar el formulario de los resultados * (Lab-195) Requerimientos Derivaciones (#61) * feature: Grabar estado inicial de derivación. ResultadoCar: “Pendiente de Derivar” * fix: solo se actualizan los detalleProtocolos que se ingresaron al protocolo. * fix: de query que actualiza las derivaciones en el protocolo emisor * fix: Flexibilizar fecha y hora de retiro del lote * fix: correcion de fecha en recepcion de lote * fix: por ahora no restringimos la fecha de recibo * fix: faltaba la auditoria * para resolver conflicto * fix: para no pacientes cambio del metodo de derivacion que guarda el ResultadoCar * controles para el error de test * controles para el error de test * recibir lote. se saco try catch con nueva funcion de GET en BaseDataAccess * correciones para test * para pasar a test 12/1/2025 * correciones de Caro y Vane * Mantenimiento Enero 2026 (#69) * (LAB-107) Correccion de bug "Se borran los analisis del protocolo/turno al elegir un medico" (#26) * fix: rebase con main * fix: traigo correctamente el JSON * fix: selecion de profesional en el drop down * fix: rebase con main * fix: traigo correctamente el JSON * fix: selecion de profesional en el drop down * fix: valida que si puso una matricula elija un medico y no la opcion "--selecciona--" * fix: se corrige el bug que borraba los analisis cargados en un protocolo cuando se abria el pop up de seleccionar medico * fix: se corrige el bug que borraba los analisis cargados en un protocolo cuando se abria el pop up de seleccionar medico * Al resolver conflicto falto llamar el metodo CargarDatosTxtDatosCargados * fix: correcciones de pruebas de Caro. Cuando se destildaba una determinacion tildaba, y cuando se carga el combo de profesionales, que de error si no se eligio ninguno * fix: rebase con main * fix: traigo correctamente el JSON * fix: selecion de profesional en el drop down * fix: rebase con main * fix: traigo correctamente el JSON * fix: selecion de profesional en el drop down * fix: correcion luego de correcion de conflictos * fix: correcion luego de correcion de conflictos * correciones de los conflictos * fix de testing, comentados console log * nuevos hidden para controlar todos los post back del formulario * comentarios de las funciones * js * fix: estados en txtDatos * se toma en cuenta cuando hay redirect de cambio de paciente. y fix de carga de txtdatos * fix: Protocolos – Análisis repetidos * fix: rebaseo con main * fix: correcion script sql * Asociado a LAB-214: Sacar del PR la correcion de la tarea https://proyectos.andes.gob.ar/browse/LAB-192 (pasarla a otra rama ) para despues trabajarla, ya que baja mucho la performance del sistema. * fix: 1-protocolo: en la validacion faltaba mantener los datos cargados para los casos de error de FIS, FUC y fecha de muestra 2-turnos: que no se duplique el medico solicitante 3-resultados: sacar LAB192 * label para medico * Mantenimientoprotocolosy turnos (#72) * fix: Correcion de bug para llenar el formulario de los resultados * fix: un tiempo de espera para que cargue correctamente el Check de s/Muestra --------- Co-authored-by: caroPintos <77695282+caroPintos@users.noreply.github.com> * (LAB-216)Error: Prompt de médicos en gestión de turnos desde Centro de Salud (#73) * fix: se agrega configuracion para usurio externo * comments * fix: sacamos "No identificado" cuando da exception * (LAB-215) BUG Cambio de paciente (#71) * fix: correcion de bug al cambiar paciente en Protocolo que generaba uno nuevo. Bug que pasa cuando se cambia de paciente a uno nuevo. * fix: para cambio de paciente, si da error de validacion que no borre las determinaciones * (LAB-118)fix: Correcion de bug para llenar el formulario de los resultados (#53) * fix: Correcion de bug para llenar el formulario de los resultados * (Lab-195) Requerimientos Derivaciones (#61) * feature: Grabar estado inicial de derivación. ResultadoCar: “Pendiente de Derivar” * fix: solo se actualizan los detalleProtocolos que se ingresaron al protocolo. * fix: de query que actualiza las derivaciones en el protocolo emisor * fix: Flexibilizar fecha y hora de retiro del lote * fix: correcion de fecha en recepcion de lote * fix: por ahora no restringimos la fecha de recibo * fix: faltaba la auditoria * para resolver conflicto * fix: para no pacientes cambio del metodo de derivacion que guarda el ResultadoCar * controles para el error de test * controles para el error de test * recibir lote. se saco try catch con nueva funcion de GET en BaseDataAccess * correciones para test * para pasar a test 12/1/2025 * correciones de Caro y Vane * Mantenimiento Enero 2026 (#69) * (LAB-107) Correccion de bug "Se borran los analisis del protocolo/turno al elegir un medico" (#26) * fix: rebase con main * fix: traigo correctamente el JSON * fix: selecion de profesional en el drop down * fix: rebase con main * fix: traigo correctamente el JSON * fix: selecion de profesional en el drop down * fix: valida que si puso una matricula elija un medico y no la opcion "--selecciona--" * fix: se corrige el bug que borraba los analisis cargados en un protocolo cuando se abria el pop up de seleccionar medico * fix: se corrige el bug que borraba los analisis cargados en un protocolo cuando se abria el pop up de seleccionar medico * Al resolver conflicto falto llamar el metodo CargarDatosTxtDatosCargados * fix: correcciones de pruebas de Caro. Cuando se destildaba una determinacion tildaba, y cuando se carga el combo de profesionales, que de error si no se eligio ninguno * fix: rebase con main * fix: traigo correctamente el JSON * fix: selecion de profesional en el drop down * fix: rebase con main * fix: traigo correctamente el JSON * fix: selecion de profesional en el drop down * fix: correcion luego de correcion de conflictos * fix: correcion luego de correcion de conflictos * correciones de los conflictos * fix de testing, comentados console log * nuevos hidden para controlar todos los post back del formulario * comentarios de las funciones * js * fix: estados en txtDatos * se toma en cuenta cuando hay redirect de cambio de paciente. y fix de carga de txtdatos * fix: Protocolos – Análisis repetidos * fix: rebaseo con main * fix: correcion script sql * Asociado a LAB-214: Sacar del PR la correcion de la tarea https://proyectos.andes.gob.ar/browse/LAB-192 (pasarla a otra rama ) para despues trabajarla, ya que baja mucho la performance del sistema. * fix: 1-protocolo: en la validacion faltaba mantener los datos cargados para los casos de error de FIS, FUC y fecha de muestra 2-turnos: que no se duplique el medico solicitante 3-resultados: sacar LAB192 * label para medico * Mantenimientoprotocolosy turnos (#72) * fix: Correcion de bug para llenar el formulario de los resultados * fix: un tiempo de espera para que cargue correctamente el Check de s/Muestra --------- Co-authored-by: caroPintos <77695282+caroPintos@users.noreply.github.com> * fix: se agrega configuracion para usurio externo * comments * fix: sacamos "No identificado" cuando da exception --------- Co-authored-by: caroPintos <77695282+caroPintos@users.noreply.github.com> * Mantenimiento Marzo 1 (#75) Auditoria Sin Insumo:Se corrige funcionalidad para que cuando se cambie de "sin insumo" a "disponible" se borren las marcas de validacion de "sin insumo" automaticas. Resultados por HT:Se corrige que no se mostraba valor por defecto en determinaciones de tipo de resultado predeterminado (simple y multiple). Mapeo SIL y SISA: Se agrega la opcion de descargar a excel el mapeo de interoperabilidad entre el SIL y SISA desde Configuracion-> Parametros SI (solapa Interoperabilidad SISA)Nueva Funcionalidad Placas:Se agrega funcionalidad con la opcion que sea multiefector.Nueva Funcionalidad Agendas y Turnos: Se corrige bug que no permite dar turnos en dias domingo. Turnos desde C.S:Se corrige seleccion de medico solicitante. * (LAB-205) Modificación en ABM de usuarios (#64) * nuevo req, se agrega el tipo de autenticacion * feat: se agrega un modal para que acepte terminos y condiciones. Se agrega en la bd la fecha y el log de Aceptacion de los terminos * (Lab-195) Requerimientos Derivaciones (#61) * feature: Grabar estado inicial de derivación. ResultadoCar: “Pendiente de Derivar” * fix: solo se actualizan los detalleProtocolos que se ingresaron al protocolo. * fix: de query que actualiza las derivaciones en el protocolo emisor * fix: Flexibilizar fecha y hora de retiro del lote * fix: correcion de fecha en recepcion de lote * fix: por ahora no restringimos la fecha de recibo * fix: faltaba la auditoria * para resolver conflicto * fix: para no pacientes cambio del metodo de derivacion que guarda el ResultadoCar * controles para el error de test * controles para el error de test * recibir lote. se saco try catch con nueva funcion de GET en BaseDataAccess * correciones para test * para pasar a test 12/1/2025 * correciones de Caro y Vane * Mantenimiento Enero 2026 (#69) * fix: habilitar cambiar tipo de autenticacion y ampliar el ancho de listado de usuarios * ---hablar con caro por este cambio * fix: pendiente de revision proceso de alta de usuario * Delete Tests-Cypress/cypress/fixtures/local.env.json * (LAB-107) Correccion de bug "Se borran los analisis del protocolo/turno al elegir un medico" (#26) * fix: rebase con main * fix: traigo correctamente el JSON * fix: selecion de profesional en el drop down * fix: rebase con main * fix: traigo correctamente el JSON * fix: selecion de profesional en el drop down * fix: valida que si puso una matricula elija un medico y no la opcion "--selecciona--" * fix: se corrige el bug que borraba los analisis cargados en un protocolo cuando se abria el pop up de seleccionar medico * fix: se corrige el bug que borraba los analisis cargados en un protocolo cuando se abria el pop up de seleccionar medico * Al resolver conflicto falto llamar el metodo CargarDatosTxtDatosCargados * fix: correcciones de pruebas de Caro. Cuando se destildaba una determinacion tildaba, y cuando se carga el combo de profesionales, que de error si no se eligio ninguno * fix: rebase con main * fix: traigo correctamente el JSON * fix: selecion de profesional en el drop down * fix: rebase con main * fix: traigo correctamente el JSON * fix: selecion de profesional en el drop down * fix: correcion luego de correcion de conflictos * fix: correcion luego de correcion de conflictos * correciones de los conflictos * fix de testing, comentados console log * nuevos hidden para controlar todos los post back del formulario * comentarios de las funciones * js * fix: estados en txtDatos * se toma en cuenta cuando hay redirect de cambio de paciente. y fix de carga de txtdatos * fix: Protocolos – Análisis repetidos * fix: rebaseo con main * fix: correcion script sql * Asociado a LAB-214: Sacar del PR la correcion de la tarea https://proyectos.andes.gob.ar/browse/LAB-192 (pasarla a otra rama ) para despues trabajarla, ya que baja mucho la performance del sistema. * fix: 1-protocolo: en la validacion faltaba mantener los datos cargados para los casos de error de FIS, FUC y fecha de muestra 2-turnos: que no se duplique el medico solicitante 3-resultados: sacar LAB192 * label para medico * Mantenimientoprotocolosy turnos (#72) * (LAB-215) BUG Cambio de paciente (#71) * fix: correcion de bug al cambiar paciente en Protocolo que generaba uno nuevo. Bug que pasa cuando se cambia de paciente a uno nuevo. * fix: para cambio de paciente, si da error de validacion que no borre las determinaciones * (LAB-118)fix: Correcion de bug para llenar el formulario de los resultados (#53) * fix: Correcion de bug para llenar el formulario de los resultados * (Lab-195) Requerimientos Derivaciones (#61) * feature: Grabar estado inicial de derivación. ResultadoCar: “Pendiente de Derivar” * fix: solo se actualizan los detalleProtocolos que se ingresaron al protocolo. * fix: de query que actualiza las derivaciones en el protocolo emisor * fix: Flexibilizar fecha y hora de retiro del lote * fix: correcion de fecha en recepcion de lote * fix: por ahora no restringimos la fecha de recibo * fix: faltaba la auditoria * para resolver conflicto * fix: para no pacientes cambio del metodo de derivacion que guarda el ResultadoCar * controles para el error de test * controles para el error de test * recibir lote. se saco try catch con nueva funcion de GET en BaseDataAccess * correciones para test * para pasar a test 12/1/2025 * correciones de Caro y Vane * Mantenimiento Enero 2026 (#69) * (LAB-107) Correccion de bug "Se borran los analisis del protocolo/turno al elegir un medico" (#26) * fix: rebase con main * fix: traigo correctamente el JSON * fix: selecion de profesional en el drop down * fix: rebase con main * fix: traigo correctamente el JSON * fix: selecion de profesional en el drop down * fix: valida que si puso una matricula elija un medico y no la opcion "--selecciona--" * fix: se corrige el bug que borraba los analisis cargados en un protocolo cuando se abria el pop up de seleccionar medico * fix: se corrige el bug que borraba los analisis cargados en un protocolo cuando se abria el pop up de seleccionar medico * Al resolver conflicto falto llamar el metodo CargarDatosTxtDatosCargados * fix: correcciones de pruebas de Caro. Cuando se destildaba una determinacion tildaba, y cuando se carga el combo de profesionales, que de error si no se eligio ninguno * fix: rebase con main * fix: traigo correctamente el JSON * fix: selecion de profesional en el drop down * fix: rebase con main * fix: traigo correctamente el JSON * fix: selecion de profesional en el drop down * fix: correcion luego de correcion de conflictos * fix: correcion luego de correcion de conflictos * correciones de los conflictos * fix de testing, comentados console log * nuevos hidden para controlar todos los post back del formulario * comentarios de las funciones * js * fix: estados en txtDatos * se toma en cuenta cuando hay redirect de cambio de paciente. y fix de carga de txtdatos * fix: Protocolos – Análisis repetidos * fix: rebaseo con main * fix: correcion script sql * Asociado a LAB-214: Sacar del PR la correcion de la tarea https://proyectos.andes.gob.ar/browse/LAB-192 (pasarla a otra rama ) para despues trabajarla, ya que baja mucho la performance del sistema. * fix: 1-protocolo: en la validacion faltaba mantener los datos cargados para los casos de error de FIS, FUC y fecha de muestra 2-turnos: que no se duplique el medico solicitante 3-resultados: sacar LAB192 * label para medico * Mantenimientoprotocolosy turnos (#72) * fix: Correcion de bug para llenar el formulario de los resultados * fix: un tiempo de espera para que cargue correctamente el Check de s/Muestra --------- Co-authored-by: caroPintos <77695282+caroPintos@users.noreply.github.com> * fix: cartel de error para combinacion onelogin y externo * fix: formato msj error y linea repetida * ejemplos de uso de libreria select2 * Revert "ejemplos de uso de libreria select2" This reverts commit 8d9ae9c457944d59d50bffa46098682d38f49b03. * (LAB-216)Error: Prompt de médicos en gestión de turnos desde Centro de Salud (#73) * fix: se agrega configuracion para usurio externo * comments * fix: sacamos "No identificado" cuando da exception * (LAB-215) BUG Cambio de paciente (#71) * fix: correcion de bug al cambiar paciente en Protocolo que generaba uno nuevo. Bug que pasa cuando se cambia de paciente a uno nuevo. * fix: para cambio de paciente, si da error de validacion que no borre las determinaciones * (LAB-118)fix: Correcion de bug para llenar el formulario de los resultados (#53) * fix: Correcion de bug para llenar el formulario de los resultados * (Lab-195) Requerimientos Derivaciones (#61) * feature: Grabar estado inicial de derivación. ResultadoCar: “Pendiente de Derivar” * fix: solo se actualizan los detalleProtocolos que se ingresaron al protocolo. * fix: de query que actualiza las derivaciones en el protocolo emisor * fix: Flexibilizar fecha y hora de retiro del lote * fix: correcion de fecha en recepcion de lote * fix: por ahora no restringimos la fecha de recibo * fix: faltaba la auditoria * para resolver conflicto * fix: para no pacientes cambio del metodo de derivacion que guarda el ResultadoCar * controles para el error de test * controles para el error de test * recibir lote. se saco try catch con nueva funcion de GET en BaseDataAccess * correciones para test * para pasar a test 12/1/2025 * correciones de Caro y Vane * Mantenimiento Enero 2026 (#69) * (LAB-107) Correccion de bug "Se borran los analisis del protocolo/turno al elegir un medico" (#26) * fix: rebase con main * fix: traigo correctamente el JSON * fix: selecion de profesional en el drop down * fix: rebase con main * fix: traigo correctamente el JSON * fix: selecion de profesional en el drop down * fix: valida que si puso una matricula elija un medico y no la opcion "--selecciona--" * fix: se corrige el bug que borraba los analisis cargados en un protocolo cuando se abria el pop up de seleccionar medico * fix: se corrige el bug que borraba los analisis cargados en un protocolo cuando se abria el pop up de seleccionar medico * Al resolver conflicto falto llamar el metodo CargarDatosTxtDatosCargados * fix: correcciones de pruebas de Caro. Cuando se destildaba una determinacion tildaba, y cuando se carga el combo de profesionales, que de error si no se eligio ninguno * fix: rebase con main * fix: traigo correctamente el JSON * fix: selecion de profesional en el drop down * fix: rebase con main * fix: traigo correctamente el JSON * fix: selecion de profesional en el drop down * fix: correcion luego de correcion de conflictos * fix: correcion luego de correcion de conflictos * correciones de los conflictos * fix de testing, comentados console log * nuevos hidden para controlar todos los post back del formulario * comentarios de las funciones * js * fix: estados en txtDatos * se toma en cuenta cuando hay redirect de cambio de paciente. y fix de carga de txtdatos * fix: Protocolos – Análisis repetidos * fix: rebaseo con main * fix: correcion script sql * Asociado a LAB-214: Sacar del PR la correcion de la tarea https://proyectos.andes.gob.ar/browse/LAB-192 (pasarla a otra rama ) para despues trabajarla, ya que baja mucho la performance del sistema. * fix: 1-protocolo: en la validacion faltaba mantener los datos cargados para los casos de error de FIS, FUC y fecha de muestra 2-turnos: que no se duplique el medico solicitante 3-resultados: sacar LAB192 * label para medico * Mantenimientoprotocolosy turnos (#72) * fix: Correcion de bug para llenar el formulario de los resultados * fix: un tiempo de espera para que cargue correctamente el Check de s/Muestra --------- Co-authored-by: caroPintos <77695282+caroPintos@users.noreply.github.com> * fix: se agrega configuracion para usurio externo * comments * fix: sacamos "No identificado" cuando da exception --------- Co-authored-by: caroPintos <77695282+caroPintos@users.noreply.github.com> * cambios en proceso * feature: busqueda para lista de usuarios * visualizacion con grilla * fix: para todos los perfiles que no son "Administrativo Externo " que desaparezca la grilla EfectorLaboratorio y que quede el valor en "0" * lista de usuarios: check de solo admins * fix: libreria chosen compatible con controladores anthem * fix: en load que valide si hay sesion * Mantenimiento Marzo 1 (#75) Auditoria Sin Insumo:Se corrige funcionalidad para que cuando se cambie de "sin insumo" a "disponible" se borren las marcas de validacion de "sin insumo" automaticas. Resultados por HT:Se corrige que no se mostraba valor por defecto en determinaciones de tipo de resultado predeterminado (simple y multiple). Mapeo SIL y SISA: Se agrega la opcion de descargar a excel el mapeo de interoperabilidad entre el SIL y SISA desde Configuracion-> Parametros SI (solapa Interoperabilidad SISA)Nueva Funcionalidad Placas:Se agrega funcionalidad con la opcion que sea multiefector.Nueva Funcionalidad Agendas y Turnos: Se corrige bug que no permite dar turnos en dias domingo. Turnos desde C.S:Se corrige seleccion de medico solicitante. * nuevo req, se agrega el tipo de autenticacion * fix: habilitar cambiar tipo de autenticacion y ampliar el ancho de listado de usuarios * ---hablar con caro por este cambio * fix: pendiente de revision proceso de alta de usuario * fix: cartel de error para combinacion onelogin y externo * Delete Tests-Cypress/cypress/fixtures/local.env.json * fix: formato msj error y linea repetida * ejemplos de uso de libreria select2 * Revert "ejemplos de uso de libreria select2" This reverts commit 8d9ae9c457944d59d50bffa46098682d38f49b03. * cambios en proceso * feature: busqueda para lista de usuarios * visualizacion con grilla * fix: para todos los perfiles que no son "Administrativo Externo " que desaparezca la grilla EfectorLaboratorio y que quede el valor en "0" * lista de usuarios: check de solo admins * fix: libreria chosen compatible con controladores anthem * correcion luego de las correciones de conflictos * auditorias * auditoria y guardar efector en modificacion * lbl error --------- Co-authored-by: caroPintos <77695282+caroPintos@users.noreply.github.com> * (Lab 224) Corrección de bug sobre la edición de determinaciones con la marca “sin muestra” (#74) * fix; Corrección de bug sobre la edición de determinaciones con la marca “sin muestra”, regenera los detalles si no existian * fix; Corrección de bug sobre la edición de determinaciones con la marca “sin muestra”, regenera los detalles si no existian * fix: mismo fix en protocolo edit * fix: agrego que sea titulo para entrar a la regeneracion de items * fix: manera de listar los items en la grilla. verificar de no generar derivados. * cambio valores de resultado por variable ConResultado * ajuste actualizacion obra social del paciente --------- Co-authored-by: Caro * Mantenimiento20260406 (#81) * (LAB-236) Bug de tildado sin muestra automatico (#80) * fix: Bug de tildado sin muestra automatico * fix: correcion de los colores de validacion en Editar Practicas * Mantenimiento20260406 (#81) * fix: Bug de tildado sin muestra automatico --------- Co-authored-by: caroPintos <77695282+caroPintos@users.noreply.github.com> * (LAB-232) bug de "Recordar Analisis" por tipo de servicio (#77) * fix: se corrige el bug de "recordar analisis" * (LAB-205) Modificación en ABM de usuarios (#64) * nuevo req, se agrega el tipo de autenticacion * feat: se agrega un modal para que acepte terminos y condiciones. Se agrega en la bd la fecha y el log de Aceptacion de los terminos * (Lab-195) Requerimientos Derivaciones (#61) * feature: Grabar estado inicial de derivación. ResultadoCar: “Pendiente de Derivar” * fix: solo se actualizan los detalleProtocolos que se ingresaron al protocolo. * fix: de query que actualiza las derivaciones en el protocolo emisor * fix: Flexibilizar fecha y hora de retiro del lote * fix: correcion de fecha en recepcion de lote * fix: por ahora no restringimos la fecha de recibo * fix: faltaba la auditoria * para resolver conflicto * fix: para no pacientes cambio del metodo de derivacion que guarda el ResultadoCar * controles para el error de test * controles para el error de test * recibir lote. se saco try catch con nueva funcion de GET en BaseDataAccess * correciones para test * para pasar a test 12/1/2025 * correciones de Caro y Vane * Mantenimiento Enero 2026 (#69) * fix: habilitar cambiar tipo de autenticacion y ampliar el ancho de listado de usuarios * ---hablar con caro por este cambio * fix: pendiente de revision proceso de alta de usuario * Delete Tests-Cypress/cypress/fixtures/local.env.json * (LAB-107) Correccion de bug "Se borran los analisis del protocolo/turno al elegir un medico" (#26) * fix: rebase con main * fix: traigo correctamente el JSON * fix: selecion de profesional en el drop down * fix: rebase con main * fix: traigo correctamente el JSON * fix: selecion de profesional en el drop down * fix: valida que si puso una matricula elija un medico y no la opcion "--selecciona--" * fix: se corrige el bug que borraba los analisis cargados en un protocolo cuando se abria el pop up de seleccionar medico * fix: se corrige el bug que borraba los analisis cargados en un protocolo cuando se abria el pop up de seleccionar medico * Al resolver conflicto falto llamar el metodo CargarDatosTxtDatosCargados * fix: correcciones de pruebas de Caro. Cuando se destildaba una determinacion tildaba, y cuando se carga el combo de profesionales, que de error si no se eligio ninguno * fix: rebase con main * fix: traigo correctamente el JSON * fix: selecion de profesional en el drop down * fix: rebase con main * fix: traigo correctamente el JSON * fix: selecion de profesional en el drop down * fix: correcion luego de correcion de conflictos * fix: correcion luego de correcion de conflictos * correciones de los conflictos * fix de testing, comentados console log * nuevos hidden para controlar todos los post back del formulario * comentarios de las funciones * js * fix: estados en txtDatos * se toma en cuenta cuando hay redirect de cambio de paciente. y fix de carga de txtdatos * fix: Protocolos – Análisis repetidos * fix: rebaseo con main * fix: correcion script sql * Asociado a LAB-214: Sacar del PR la correcion de la tarea https://proyectos.andes.gob.ar/browse/LAB-192 (pasarla a otra rama ) para despues trabajarla, ya que baja mucho la performance del sistema. * fix: 1-protocolo: en la validacion faltaba mantener los datos cargados para los casos de error de FIS, FUC y fecha de muestra 2-turnos: que no se duplique el medico solicitante 3-resultados: sacar LAB192 * label para medico * Mantenimientoprotocolosy turnos (#72) * (LAB-215) BUG Cambio de paciente (#71) * fix: correcion de bug al cambiar paciente en Protocolo que generaba uno nuevo. Bug que pasa cuando se cambia de paciente a uno nuevo. * fix: para cambio de paciente, si da error de validacion que no borre las determinaciones * (LAB-118)fix: Correcion de bug para llenar el formulario de los resultados (#53) * fix: Correcion de bug para llenar el formulario de los resultados * (Lab-195) Requerimientos Derivaciones (#61) * feature: Grabar estado inicial de derivación. ResultadoCar: “Pendiente de Derivar” * fix: solo se actualizan los detalleProtocolos que se ingresaron al protocolo. * fix: de query que actualiza las derivaciones en el protocolo emisor * fix: Flexibilizar fecha y hora de retiro del lote * fix: correcion de fecha en recepcion de lote * fix: por ahora no restringimos la fecha de recibo * fix: faltaba la auditoria * para resolver conflicto * fix: para no pacientes cambio del metodo de derivacion que guarda el ResultadoCar * controles para el error de test * controles para el error de test * recibir lote. se saco try catch con nueva funcion de GET en BaseDataAccess * correciones para test * para pasar a test 12/1/2025 * correciones de Caro y Vane * Mantenimiento Enero 2026 (#69) * (LAB-107) Correccion de bug "Se borran los analisis del protocolo/turno al elegir un medico" (#26) * fix: rebase con main * fix: traigo correctamente el JSON * fix: selecion de profesional en el drop down * fix: rebase con main * fix: traigo correctamente el JSON * fix: selecion de profesional en el drop down * fix: valida que si puso una matricula elija un medico y no la opcion "--selecciona--" * fix: se corrige el bug que borraba los analisis cargados en un protocolo cuando se abria el pop up de seleccionar medico * fix: se corrige el bug que borraba los analisis cargados en un protocolo cuando se abria el pop up de seleccionar medico * Al resolver conflicto falto llamar el metodo CargarDatosTxtDatosCargados * fix: correcciones de pruebas de Caro. Cuando se destildaba una determinacion tildaba, y cuando se carga el combo de profesionales, que de error si no se eligio ninguno * fix: rebase con main * fix: traigo correctamente el JSON * fix: selecion de profesional en el drop down * fix: rebase con main * fix: traigo correctamente el JSON * fix: selecion de profesional en el drop down * fix: correcion luego de correcion de conflictos * fix: correcion luego de correcion de conflictos * correciones de los conflictos * fix de testing, comentados console log * nuevos hidden para controlar todos los post back del formulario * comentarios de las funciones * js * fix: estados en txtDatos * se toma en cuenta cuando hay redirect de cambio de … * Visualizacion de disponibilidad de turnos por efector. Cambio de llamada de base de datos para mejorar performance. * mejora sql * Mantenimiento Abril20260422 (#86) * Visualizacion de disponibilidad de turnos por efector. Cambio de llamada de base de datos para mejorar performance. * mejora sql --------- Co-authored-by: caroPintos <77695282+caroPintos@users.noreply.github.com> Co-authored-by: Caro --- WebLab/Turnos/TurnoList.aspx | 4 +- WebLab/Turnos/TurnoList.aspx.cs | 187 +++++++++------- WebLab/Turnos/TurnoList.aspx.designer.cs | 261 ++++++++++++----------- 3 files changed, 253 insertions(+), 199 deletions(-) diff --git a/WebLab/Turnos/TurnoList.aspx b/WebLab/Turnos/TurnoList.aspx index a830b6bd..2fe56064 100644 --- a/WebLab/Turnos/TurnoList.aspx +++ b/WebLab/Turnos/TurnoList.aspx @@ -149,7 +149,9 @@ + + diff --git a/WebLab/Turnos/TurnoList.aspx.cs b/WebLab/Turnos/TurnoList.aspx.cs index 0c40d791..21786305 100644 --- a/WebLab/Turnos/TurnoList.aspx.cs +++ b/WebLab/Turnos/TurnoList.aspx.cs @@ -1,7 +1,19 @@ -using System; +using Business; +using Business.Data; +using Business.Data.Laboratorio; +using CrystalDecisions.Shared; +using CrystalDecisions.Web; +using NHibernate; +using NHibernate.Collection; +using NHibernate.Expression; +using System; using System.Collections; using System.Configuration; using System.Data; +using System.Data.SqlClient; +using System.Data.SqlTypes; +using System.Drawing; +using System.IO; using System.Linq; using System.Web; using System.Web.Security; @@ -10,26 +22,15 @@ using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Xml.Linq; -using Business; -using System.Data.SqlClient; -using NHibernate; -using Business.Data.Laboratorio; -using NHibernate.Expression; -using System.Data.SqlTypes; -using CrystalDecisions.Shared; -using System.IO; -using System.Drawing; -using NHibernate.Collection; -using CrystalDecisions.Web; -using Business.Data; +using static System.Net.WebRequestMethods; namespace WebLab.Turnos { public partial class TurnoList : System.Web.UI.Page { protected string DiasNoHabiles = ""; - protected DateTime fechaDesde= new DateTime(); - protected DateTime fechaHasta = new DateTime(); + //protected DateTime fechaDesde= new DateTime(); //Vane: No se esta usando mas + //protected DateTime fechaHasta = new DateTime(); public Configuracion oCon = new Configuracion(); public Usuario oUser = new Usuario(); @@ -237,10 +238,10 @@ private bool noEsFeriado() private bool VerificarAgenda() { - bool result = false; + bool result = false; lblMensajeSolicitante.Visible = false; if (ddlTipoServicio.SelectedValue != "") { - string s_item = ""; string m_ssqlItem = ""; + string s_item = ""; string m_ssqlItem = "", m_ssqlDia =""; if (ddlItem.SelectedValue != "0") s_item = " - " + ddlItem.SelectedItem.Text; m_ssqlItem = " AND A.IdItem=" + ddlItem.SelectedValue; @@ -248,69 +249,109 @@ private bool VerificarAgenda() lblFecha.Text = cldTurno.SelectedDate.ToLongDateString().ToUpper();//.ToShortDateString(); int dia = (int)cldTurno.SelectedDate.DayOfWeek; - + m_ssqlDia = " AND AD.Dia=" + dia.ToString(); DateTime fecha = DateTime.Parse(cldTurno.SelectedDate.ToShortDateString()); - ISession m_session = NHibernateHttpModule.CurrentSession; - string m_ssql = ""; - if (oUser.IdPerfil.IdPerfil == 15) - m_ssql = " FROM Agenda A WHERE A.Baja=0 AND A.IdTipoServicio=" + ddlTipoServicio.SelectedValue + - " and IdEfectorSolicitante = " + oUser.IdEfector.IdEfector.ToString()+ - " AND A.FechaDesde<='" + fecha.ToString("yyyyMMdd") + "'" + - " AND A.FechaHasta>='" + fecha.ToString("yyyyMMdd") + "'" + m_ssqlItem; - - else - m_ssql = " FROM Agenda A WHERE A.Baja=0 AND A.IdTipoServicio=" + ddlTipoServicio.SelectedValue + - " and IdEfector = " + oCon.IdEfector.IdEfector.ToString() + - " and IdEfectorSolicitante = " + oCon.IdEfector.IdEfector.ToString() + - " AND A.FechaDesde<='" + fecha.ToString("yyyyMMdd") + "'" + - " AND A.FechaHasta>='" + fecha.ToString("yyyyMMdd") + "'" + m_ssqlItem; + // ISession m_session = NHibernateHttpModule.CurrentSession; + string m_ssql = @"Select AD.HoraDesde, AD.HoraHasta, AD.TipoTurno, AD.Frecuencia, AD.LimiteTurnos, A.IdEfectorSolicitante, + ISNULL(Turnos.TurnosDados, 0) as TurnosDados + FROM LAB_Agenda A with (nolock) + inner join LAB_AgendaDia AD with (nolock) on AD.idAgenda = A.idAgenda + LEFT JOIN ( + SELECT + idEfector, + idEfectorSolicitante, + idTipoServicio, + IdItem, + COUNT(idTurno) as TurnosDados + FROM LAB_Turno WITH (NOLOCK) + WHERE baja = 0 AND fecha = '" + fecha.ToString("yyyyMMdd")+ @"' + GROUP BY idEfector, idEfectorSolicitante, idTipoServicio, IdItem + ) Turnos ON + Turnos.idEfector = A.IdEfector AND + Turnos.idEfectorSolicitante = A.IdEfectorSolicitante AND + Turnos.idTipoServicio = A.IdTipoServicio AND + Turnos.IdItem = A.IdItem + WHERE A.Baja=0 + AND A.IdTipoServicio=" + ddlTipoServicio.SelectedValue + + " AND A.FechaDesde<='" + fecha.ToString("yyyyMMdd") + "'" + + " AND A.FechaHasta>='" + fecha.ToString("yyyyMMdd") + "'" + m_ssqlItem + m_ssqlDia; - IQuery q = m_session.CreateQuery(m_ssql); + if (oUser.IdPerfil.IdPerfil == 15) + m_ssql += " and IdEfectorSolicitante = " + oUser.IdEfector.IdEfector.ToString(); + else //Traigo el labo y sus relacionados + m_ssql += " and A.IdEfector = " + oCon.IdEfector.IdEfector.ToString(); + + + DataSet Ds = new DataSet(); + SqlConnection conn = (SqlConnection)NHibernateHttpModule.CurrentSession.Connection; + SqlDataAdapter adapter = new SqlDataAdapter(); + adapter.SelectCommand = new SqlCommand(m_ssql, conn); + adapter.Fill(Ds); + if (Ds.Tables[0].Rows.Count > 0) + { + result = true; + //Me traigo la fila con la que completo los horarios + DataRow[] array = Ds.Tables[0].Select("idEfectorSolicitante = " + oUser.IdEfector.IdEfector); + if (array != null && array.Length > 0) + { + DataRow fila = array[0]; + string horaDesde = fila[0].ToString(); + string horaHasta = fila[1].ToString(); + int tipoTurno = int.Parse(fila[2].ToString()); + int frecuencia = int.Parse(fila[3].ToString()); + lblHorario.Text = "Horario de Atención: " + horaDesde + " - " + horaHasta; + lblHoraTurno.Text = CalcularHorarioDisponible(tipoTurno, frecuencia, horaDesde); + } + else //no hay agenda del efector logueado + { + result = false; + } + //Me traigo la fila con la que completo los turnos disponibles, dependiendo del efector solicitante elegido + string idEfectorSolicitante = "0"; + if (ddlEfectorSolicitante.SelectedValue != "0") idEfectorSolicitante = ddlEfectorSolicitante.SelectedValue; + else idEfectorSolicitante = oUser.IdEfector.IdEfector.ToString(); - IList lista = q.List(); - if (lista.Count > 0) - { - foreach (Agenda oAgenda in lista) + DataRow[] arraySol = Ds.Tables[0].Select("idEfectorSolicitante = " + idEfectorSolicitante); + if(arraySol != null && arraySol.Length >0 ) //Tiene agenda el efector solicitante seleccionado { - fechaDesde = oAgenda.FechaDesde; - fechaHasta = oAgenda.FechaHasta; - ICriteria crit = m_session.CreateCriteria(typeof(AgendaDia)); - crit.Add(Expression.Eq("IdAgenda", oAgenda)); - crit.Add(Expression.Eq("Dia", dia)); - - IList listaDias = crit.List(); - if (listaDias.Count > 0) + DataRow filaSol = arraySol[0]; + int limiteTurnos = int.Parse(filaSol[4].ToString()); + if (limiteTurnos == 0) { - foreach (AgendaDia oAgendaDia in listaDias) - { - result = true; - lblHorario.Text = "Horario de Atención: " + oAgendaDia.HoraDesde + " - " + oAgendaDia.HoraHasta; - lblHoraTurno.Text = CalcularHorarioDisponible(oAgendaDia.TipoTurno, oAgendaDia.Frecuencia, oAgendaDia.HoraDesde); - if (oAgendaDia.LimiteTurnos == 0) - { - lblLimiteTurnos.Text = "Sin límite de turnos"; - lblTurnosDisponibles.Text = "0"; - } - else - { - lblLimiteTurnos.Text = oAgendaDia.LimiteTurnos.ToString(); - int turnos_dados = int.Parse(lblTurnosDados.Text); - lblTurnosDisponibles.Text = (oAgendaDia.LimiteTurnos - turnos_dados).ToString(); - } - - } - break; + lblLimiteTurnos.Text = "Sin límite de turnos"; + lblTurnosDisponibles.Text = "0"; } else - result = false; + { + lblLimiteTurnos.Text = limiteTurnos.ToString(); + int turnos_dados = int.Parse(filaSol[6].ToString()); + lblTurnosDisponibles.Text = (limiteTurnos - turnos_dados).ToString(); + lblTurnosDados.Text = turnos_dados.ToString(); + } + + + } + else + { + if(idEfectorSolicitante.ToString() != oUser.IdEfector.IdEfector.ToString()) + { + lblLimiteTurnos.Text = "0"; + lblTurnosDisponibles.Text = "0"; + lblTurnosDados.Text = "0"; + lblMensajeSolicitante.Text = "No existe agenda para el Efector Solicitante"; + lblMensajeSolicitante.Visible = true; + } + } + } else result = false; + } - else result = false; + return result; } @@ -319,25 +360,25 @@ private string CalcularHorarioDisponible(int tipo, int f, string horadesde) { DateTime fecha = DateTime.Parse(cldTurno.SelectedDate.ToShortDateString()); string m_strSQL = ""; - if (oUser.IdPerfil.IdPerfil==15) + if (oUser.IdPerfil.IdPerfil == 15) m_strSQL = " SELECT idTurno AS idturno, hora FROM LAB_Turno AS T (nolock) " + " WHERE (T.baja = 0) AND T.fecha='" + fecha.ToString("yyyyMMdd") + "'" + " and T.idEfectorSolicitante= " + oUser.IdEfector.IdEfector.ToString() + " AND T.idTipoServicio=" + ddlTipoServicio.SelectedValue + " AND T.IdItem=" + ddlItem.SelectedValue + " ORDER BY idturno DESC "; else - m_strSQL = @" SELECT idTurno AS idturno, hora + m_strSQL = @" SELECT idTurno AS idturno, hora FROM LAB_Turno AS T (nolock) WHERE (T.baja = 0) AND T.fecha='" + fecha.ToString("yyyyMMdd") + @"' and T.idEfector= " + oCon.IdEfector.IdEfector.ToString() + - @" and T.idEfectorSolicitante= " + oCon.IdEfector.IdEfector.ToString() + - @" AND T.idTipoServicio=" + ddlTipoServicio.SelectedValue + " AND T.IdItem=" + ddlItem.SelectedValue + " ORDER BY idturno DESC "; + @" and T.idEfectorSolicitante= " + oCon.IdEfector.IdEfector.ToString() + + @" AND T.idTipoServicio=" + ddlTipoServicio.SelectedValue + " AND T.IdItem=" + ddlItem.SelectedValue + " ORDER BY idturno DESC "; DataSet Ds = new DataSet(); SqlConnection conn = (SqlConnection)NHibernateHttpModule.CurrentSession.Connection; SqlDataAdapter adapter = new SqlDataAdapter(); adapter.SelectCommand = new SqlCommand(m_strSQL, conn); adapter.Fill(Ds); - string m_Hora=horadesde; + string m_Hora = horadesde; lblTurnosDados.Text = Ds.Tables[0].Rows.Count.ToString(); if (tipo == 1) @@ -350,7 +391,7 @@ FROM LAB_Turno AS T (nolock) } } - return m_Hora; + return m_Hora; @@ -500,7 +541,7 @@ protected void btnNuevo_Click(object sender, EventArgs e) Session["Turno_Fecha"] = cldTurno.SelectedDate; Session["Turno_IdTipoServicio"] = ddlTipoServicio.SelectedValue; Session["idServicio"] = ddlTipoServicio.SelectedValue; - Session["Turno_Hora"] = lblHoraTurno.Text; + Session["Turno_Hora"] = lblHoraTurno.Text; Session["idItem"] = ddlItem.SelectedValue; Response.Redirect("Default.aspx", false); } diff --git a/WebLab/Turnos/TurnoList.aspx.designer.cs b/WebLab/Turnos/TurnoList.aspx.designer.cs index f4b76aae..f2ee3d25 100644 --- a/WebLab/Turnos/TurnoList.aspx.designer.cs +++ b/WebLab/Turnos/TurnoList.aspx.designer.cs @@ -1,275 +1,286 @@ //------------------------------------------------------------------------------ -// -// This code was generated by a tool. +// +// Este código fue generado por una herramienta. // -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// +// Los cambios en este archivo podrían causar un comportamiento incorrecto y se perderán si +// se vuelve a generar el código. +// //------------------------------------------------------------------------------ -namespace WebLab.Turnos { - - - public partial class TurnoList { - +namespace WebLab.Turnos +{ + + + public partial class TurnoList + { + /// - /// lblTitulo control. + /// Control lblTitulo. /// /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. + /// Campo generado automáticamente. + /// Para modificarlo, mueva la declaración del campo del archivo del diseñador al archivo de código subyacente. /// protected global::System.Web.UI.WebControls.Label lblTitulo; - + /// - /// lblSubTitulo control. + /// Control lblSubTitulo. /// /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. + /// Campo generado automáticamente. + /// Para modificarlo, mueva la declaración del campo del archivo del diseñador al archivo de código subyacente. /// protected global::System.Web.UI.WebControls.Label lblSubTitulo; - + /// - /// pnlDerecho control. + /// Control pnlDerecho. /// /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. + /// Campo generado automáticamente. + /// Para modificarlo, mueva la declaración del campo del archivo del diseñador al archivo de código subyacente. /// protected global::System.Web.UI.HtmlControls.HtmlGenericControl pnlDerecho; - + /// - /// ddlTipoServicio control. + /// Control ddlTipoServicio. /// /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. + /// Campo generado automáticamente. + /// Para modificarlo, mueva la declaración del campo del archivo del diseñador al archivo de código subyacente. /// protected global::System.Web.UI.WebControls.DropDownList ddlTipoServicio; - + /// - /// imgServicioView control. + /// Control imgServicioView. /// /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. + /// Campo generado automáticamente. + /// Para modificarlo, mueva la declaración del campo del archivo del diseñador al archivo de código subyacente. /// protected global::System.Web.UI.WebControls.ImageButton imgServicioView; - + /// - /// ddlItem control. + /// Control ddlItem. /// /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. + /// Campo generado automáticamente. + /// Para modificarlo, mueva la declaración del campo del archivo del diseñador al archivo de código subyacente. /// protected global::System.Web.UI.WebControls.DropDownList ddlItem; - + /// - /// imgCalendarioView control. + /// Control imgCalendarioView. /// /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. + /// Campo generado automáticamente. + /// Para modificarlo, mueva la declaración del campo del archivo del diseñador al archivo de código subyacente. /// protected global::System.Web.UI.WebControls.ImageButton imgCalendarioView; - + /// - /// btnActualizar control. + /// Control btnActualizar. /// /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. + /// Campo generado automáticamente. + /// Para modificarlo, mueva la declaración del campo del archivo del diseñador al archivo de código subyacente. /// protected global::System.Web.UI.WebControls.Button btnActualizar; - + /// - /// cldTurno control. + /// Control cldTurno. /// /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. + /// Campo generado automáticamente. + /// Para modificarlo, mueva la declaración del campo del archivo del diseñador al archivo de código subyacente. /// protected global::System.Web.UI.WebControls.Calendar cldTurno; - + /// - /// btnNuevo control. + /// Control btnNuevo. /// /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. + /// Campo generado automáticamente. + /// Para modificarlo, mueva la declaración del campo del archivo del diseñador al archivo de código subyacente. /// protected global::System.Web.UI.WebControls.Button btnNuevo; - + /// - /// lnkProtocolo control. + /// Control lnkProtocolo. /// /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. + /// Campo generado automáticamente. + /// Para modificarlo, mueva la declaración del campo del archivo del diseñador al archivo de código subyacente. /// protected global::System.Web.UI.WebControls.LinkButton lnkProtocolo; - + /// - /// lblMensaje control. + /// Control lblMensaje. /// /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. + /// Campo generado automáticamente. + /// Para modificarlo, mueva la declaración del campo del archivo del diseñador al archivo de código subyacente. /// protected global::System.Web.UI.WebControls.Label lblMensaje; - + + /// + /// Control lblMensajeSolicitante. + /// + /// + /// Campo generado automáticamente. + /// Para modificarlo, mueva la declaración del campo del archivo del diseñador al archivo de código subyacente. + /// + protected global::System.Web.UI.WebControls.Label lblMensajeSolicitante; + /// - /// lblHoraTurno control. + /// Control lblHoraTurno. /// /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. + /// Campo generado automáticamente. + /// Para modificarlo, mueva la declaración del campo del archivo del diseñador al archivo de código subyacente. /// protected global::System.Web.UI.WebControls.Label lblHoraTurno; - + /// - /// lblTipoServicio control. + /// Control lblTipoServicio. /// /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. + /// Campo generado automáticamente. + /// Para modificarlo, mueva la declaración del campo del archivo del diseñador al archivo de código subyacente. /// protected global::System.Web.UI.WebControls.Label lblTipoServicio; - + /// - /// lblFecha control. + /// Control lblFecha. /// /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. + /// Campo generado automáticamente. + /// Para modificarlo, mueva la declaración del campo del archivo del diseñador al archivo de código subyacente. /// protected global::System.Web.UI.WebControls.Label lblFecha; - + /// - /// lblHorario control. + /// Control lblHorario. /// /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. + /// Campo generado automáticamente. + /// Para modificarlo, mueva la declaración del campo del archivo del diseñador al archivo de código subyacente. /// protected global::System.Web.UI.WebControls.Label lblHorario; - + /// - /// lblLimiteTurnos control. + /// Control lblLimiteTurnos. /// /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. + /// Campo generado automáticamente. + /// Para modificarlo, mueva la declaración del campo del archivo del diseñador al archivo de código subyacente. /// protected global::System.Web.UI.WebControls.Label lblLimiteTurnos; - + /// - /// lblTurnosDados control. + /// Control lblTurnosDados. /// /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. + /// Campo generado automáticamente. + /// Para modificarlo, mueva la declaración del campo del archivo del diseñador al archivo de código subyacente. /// protected global::System.Web.UI.WebControls.Label lblTurnosDados; - + /// - /// lblTurnosDisponibles control. + /// Control lblTurnosDisponibles. /// /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. + /// Campo generado automáticamente. + /// Para modificarlo, mueva la declaración del campo del archivo del diseñador al archivo de código subyacente. /// protected global::System.Web.UI.WebControls.Label lblTurnosDisponibles; - + /// - /// ddlEfectorSolicitante control. + /// Control ddlEfectorSolicitante. /// /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. + /// Campo generado automáticamente. + /// Para modificarlo, mueva la declaración del campo del archivo del diseñador al archivo de código subyacente. /// protected global::System.Web.UI.WebControls.DropDownList ddlEfectorSolicitante; - + /// - /// ddlEstadoTurno control. + /// Control ddlEstadoTurno. /// /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. + /// Campo generado automáticamente. + /// Para modificarlo, mueva la declaración del campo del archivo del diseñador al archivo de código subyacente. /// protected global::System.Web.UI.WebControls.DropDownList ddlEstadoTurno; - + /// - /// txtPaciente control. + /// Control txtPaciente. /// /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. + /// Campo generado automáticamente. + /// Para modificarlo, mueva la declaración del campo del archivo del diseñador al archivo de código subyacente. /// protected global::System.Web.UI.WebControls.TextBox txtPaciente; - + /// - /// rdbBusqueda control. + /// Control rdbBusqueda. /// /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. + /// Campo generado automáticamente. + /// Para modificarlo, mueva la declaración del campo del archivo del diseñador al archivo de código subyacente. /// protected global::System.Web.UI.WebControls.RadioButtonList rdbBusqueda; - + /// - /// btnBuscar control. + /// Control btnBuscar. /// /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. + /// Campo generado automáticamente. + /// Para modificarlo, mueva la declaración del campo del archivo del diseñador al archivo de código subyacente. /// protected global::System.Web.UI.WebControls.LinkButton btnBuscar; - + /// - /// cvNumeroDesde control. + /// Control cvNumeroDesde. /// /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. + /// Campo generado automáticamente. + /// Para modificarlo, mueva la declaración del campo del archivo del diseñador al archivo de código subyacente. /// protected global::System.Web.UI.WebControls.CustomValidator cvNumeroDesde; - + /// - /// lblUltimoProtocolo control. + /// Control lblUltimoProtocolo. /// /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. + /// Campo generado automáticamente. + /// Para modificarlo, mueva la declaración del campo del archivo del diseñador al archivo de código subyacente. /// protected global::System.Web.UI.WebControls.Label lblUltimoProtocolo; - + /// - /// gvLista control. + /// Control gvLista. /// /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. + /// Campo generado automáticamente. + /// Para modificarlo, mueva la declaración del campo del archivo del diseñador al archivo de código subyacente. /// protected global::System.Web.UI.WebControls.GridView gvLista; - + /// - /// lnkPlanilla control. + /// Control lnkPlanilla. /// /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. + /// Campo generado automáticamente. + /// Para modificarlo, mueva la declaración del campo del archivo del diseñador al archivo de código subyacente. /// protected global::System.Web.UI.WebControls.LinkButton lnkPlanilla; - + /// - /// lnkPlanillaDetallada control. + /// Control lnkPlanillaDetallada. /// /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. + /// Campo generado automáticamente. + /// Para modificarlo, mueva la declaración del campo del archivo del diseñador al archivo de código subyacente. /// protected global::System.Web.UI.WebControls.LinkButton lnkPlanillaDetallada; } From 086be4402c435eb7cfca007ca2eb6e4136ce39e7 Mon Sep 17 00:00:00 2001 From: Vanesa Rimada <80859025+vrimada@users.noreply.github.com> Date: Mon, 27 Apr 2026 10:48:05 -0300 Subject: [PATCH 12/37] =?UTF-8?q?-=20Validar=20en=20la=20edici=C3=B3n=20el?= =?UTF-8?q?=20ingreso=20de=20username=20existente.=20=20-=20en=20la=20list?= =?UTF-8?q?a=20de=20usuario=20que=20aparezcan=20los=20perfiles=20de=20su?= =?UTF-8?q?=20efector=20-=20=E2=80=A2=20Agregar=20en=20la=20auditoria=20el?= =?UTF-8?q?=20registro=20de=20fecha=20y=20hora=20en=20que=20el=20usuario?= =?UTF-8?q?=20acepta=20los=20t=C3=A9rminos=20y=20condiciones=20-poner=20el?= =?UTF-8?q?=20buscador=20de=20efector,=20perfil=20con=20tipeo=20como=20en?= =?UTF-8?q?=20la=20vinculaci=C3=B3n=20de=20efectores=20-Ocultar=20campo=20?= =?UTF-8?q?contrase=C3=B1a=20en=20la=20edici=C3=B3n=20de=20usuarios=20-Ocu?= =?UTF-8?q?ltar=20bot=C3=B3n=20Auditoria=20en=20el=20alta=20de=20usuario?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- WebLab/Usuarios/UsuarioEdit.aspx.cs | 20 +++++++++++++++----- WebLab/Usuarios/UsuarioList.aspx.cs | 6 ++++-- 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/WebLab/Usuarios/UsuarioEdit.aspx.cs b/WebLab/Usuarios/UsuarioEdit.aspx.cs index 83c732a3..9ab1a98c 100644 --- a/WebLab/Usuarios/UsuarioEdit.aspx.cs +++ b/WebLab/Usuarios/UsuarioEdit.aspx.cs @@ -49,7 +49,10 @@ protected void Page_Load(object sender, EventArgs e) if (Request["id"] != null) MostrarDatos(); else + { MostrarEfectores(); + btnAuditoria.Visible = false; + } } else Response.Redirect("../FinSesion.aspx", false); @@ -109,6 +112,7 @@ private void MostrarDatos() txtUsername.Text = oRegistro.Username; chkRequiereContrasenia.Checked = oRegistro.RequiereCambioPass; txtPassword.Enabled = false; + txtPassword.Visible = false; chkActivo.Checked = oRegistro.Activo; ddlPerfil.SelectedValue = oRegistro.IdPerfil.IdPerfil.ToString(); //ddlEfector.SelectedValue = oRegistro.IdEfector.IdEfector.ToString(); @@ -388,7 +392,7 @@ private DataTable GetDataSetAuditoria() { string m_strSQL = ""; - string m_strCondicion = ""; + //string m_strCondicion = ""; SqlConnection conn = (SqlConnection)NHibernateHttpModule.CurrentSession.Connection; SqlDataAdapter adapter = new SqlDataAdapter(); @@ -400,9 +404,15 @@ private DataTable GetDataSetAuditoria() m_strSQL = @" SELECT A.username AS numero, P.apellido as username, A.fecha AS fecha, A.hora, A.accion, '' as analisis, '' as valor, '' as valorAnterior - FROM LAB_Auditoriausuario AS A (nolock) - inner join sys_usuario P (nolock) on P.idusuario= A.idusuarioregistro - where A.idusuario= " + Request["id"].ToString() + @" ORDER BY A.idAuditoriausuario"; + FROM LAB_Auditoriausuario AS A (nolock) + inner join sys_usuario P (nolock) on P.idusuario= A.idusuarioregistro + where A.idusuario= " + Request["id"].ToString() + + @" union + SELECT P.username AS numero, P.apellido as username, L.fecha AS fecha, + Format(L.fecha, 'hh:mm:ss') as hora, 'Acepto Terminos y Condiciones', '' as analisis, '' as valor, '' as valorAnterior + FROM LAB_LogAccesoTerminosCondiciones AS L (nolock) + inner join sys_usuario P (nolock) on P.idusuario= L.idUsuario + where P.idusuario=" + Request["id"].ToString() + " ORDER BY fecha"; DataSet Ds1 = new DataSet(); adapter.SelectCommand = new SqlCommand(m_strSQL, conn); @@ -435,7 +445,7 @@ protected void btnBlanquear_Click(object sender, EventArgs e) protected void customValidacionGeneral_ServerValidate(object source, ServerValidateEventArgs args) { - if (Request["id"] == null) // alta + //if (Request["id"] == null) // Validar tambien en modificacion { Usuario oRegistro = new Usuario(); diff --git a/WebLab/Usuarios/UsuarioList.aspx.cs b/WebLab/Usuarios/UsuarioList.aspx.cs index 1ca5239f..f85d9415 100644 --- a/WebLab/Usuarios/UsuarioList.aspx.cs +++ b/WebLab/Usuarios/UsuarioList.aspx.cs @@ -118,9 +118,11 @@ private void CargarListas() oUtil.CargarCombo(ddlEfector, m_ssql, "idEfector", "nombre"); if (nivelcentral) - ddlEfector.Items.Insert(0, new ListItem("Todos", "0")); + ddlEfector.Items.Insert(0, new ListItem("--Seleccione un efector--", "0")); - m_ssql = @"SELECT idPerfil, nombre FROM Sys_Perfil with (nolock) ORDER BY nombre"; + m_ssql = @"SELECT idPerfil, nombre FROM Sys_Perfil with (nolock) + where idperfil in (select idperfil from Sys_Usuario where activo=1 and + idefector=" + oUser.IdEfector.IdEfector.ToString() +" ) ORDER BY nombre"; oUtil.CargarCombo(ddlPerfil, m_ssql, "idPerfil", "nombre"); ddlPerfil.Items.Insert(0, new ListItem("Todos", "0")); From 32ab18dc3cfc5627794c3ec7b6dc074cd98010a3 Mon Sep 17 00:00:00 2001 From: Vanesa Rimada <80859025+vrimada@users.noreply.github.com> Date: Mon, 27 Apr 2026 11:21:13 -0300 Subject: [PATCH 13/37] Reporte de audtoria de usuarios --- WebLab/Informes/AuditoriaUser.cs | 209 ++++++++++++++++++++++++++++ WebLab/Informes/AuditoriaUser.rpt | Bin 0 -> 16384 bytes WebLab/Usuarios/UsuarioEdit.aspx.cs | 9 +- WebLab/WebLab.csproj | 10 ++ 4 files changed, 225 insertions(+), 3 deletions(-) create mode 100644 WebLab/Informes/AuditoriaUser.cs create mode 100644 WebLab/Informes/AuditoriaUser.rpt diff --git a/WebLab/Informes/AuditoriaUser.cs b/WebLab/Informes/AuditoriaUser.cs new file mode 100644 index 00000000..6c76b2f6 --- /dev/null +++ b/WebLab/Informes/AuditoriaUser.cs @@ -0,0 +1,209 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace WebLab.Informes { + using System; + using System.ComponentModel; + using CrystalDecisions.Shared; + using CrystalDecisions.ReportSource; + using CrystalDecisions.CrystalReports.Engine; + + + public class AuditoriaUser : ReportClass { + + public AuditoriaUser() { + } + + public override string ResourceName { + get { + return "AuditoriaUser.rpt"; + } + set { + // Do nothing + } + } + + public override bool NewGenerator { + get { + return true; + } + set { + // Do nothing + } + } + + public override string FullResourceName { + get { + return "WebLab.Informes.AuditoriaUser.rpt"; + } + set { + // Do nothing + } + } + + [Browsable(false)] + [DesignerSerializationVisibilityAttribute(System.ComponentModel.DesignerSerializationVisibility.Hidden)] + public CrystalDecisions.CrystalReports.Engine.Section Section1 { + get { + return this.ReportDefinition.Sections[0]; + } + } + + [Browsable(false)] + [DesignerSerializationVisibilityAttribute(System.ComponentModel.DesignerSerializationVisibility.Hidden)] + public CrystalDecisions.CrystalReports.Engine.Section Section2 { + get { + return this.ReportDefinition.Sections[1]; + } + } + + [Browsable(false)] + [DesignerSerializationVisibilityAttribute(System.ComponentModel.DesignerSerializationVisibility.Hidden)] + public CrystalDecisions.CrystalReports.Engine.Section GroupHeaderSection1 { + get { + return this.ReportDefinition.Sections[2]; + } + } + + [Browsable(false)] + [DesignerSerializationVisibilityAttribute(System.ComponentModel.DesignerSerializationVisibility.Hidden)] + public CrystalDecisions.CrystalReports.Engine.Section GroupHeaderSection2 { + get { + return this.ReportDefinition.Sections[3]; + } + } + + [Browsable(false)] + [DesignerSerializationVisibilityAttribute(System.ComponentModel.DesignerSerializationVisibility.Hidden)] + public CrystalDecisions.CrystalReports.Engine.Section Section3 { + get { + return this.ReportDefinition.Sections[4]; + } + } + + [Browsable(false)] + [DesignerSerializationVisibilityAttribute(System.ComponentModel.DesignerSerializationVisibility.Hidden)] + public CrystalDecisions.CrystalReports.Engine.Section GroupFooterSection2 { + get { + return this.ReportDefinition.Sections[5]; + } + } + + [Browsable(false)] + [DesignerSerializationVisibilityAttribute(System.ComponentModel.DesignerSerializationVisibility.Hidden)] + public CrystalDecisions.CrystalReports.Engine.Section GroupFooterSection1 { + get { + return this.ReportDefinition.Sections[6]; + } + } + + [Browsable(false)] + [DesignerSerializationVisibilityAttribute(System.ComponentModel.DesignerSerializationVisibility.Hidden)] + public CrystalDecisions.CrystalReports.Engine.Section Section4 { + get { + return this.ReportDefinition.Sections[7]; + } + } + + [Browsable(false)] + [DesignerSerializationVisibilityAttribute(System.ComponentModel.DesignerSerializationVisibility.Hidden)] + public CrystalDecisions.CrystalReports.Engine.Section Section5 { + get { + return this.ReportDefinition.Sections[8]; + } + } + + [Browsable(false)] + [DesignerSerializationVisibilityAttribute(System.ComponentModel.DesignerSerializationVisibility.Hidden)] + public CrystalDecisions.Shared.IParameterField Parameter_encabezado1 { + get { + return this.DataDefinition.ParameterFields[0]; + } + } + + [Browsable(false)] + [DesignerSerializationVisibilityAttribute(System.ComponentModel.DesignerSerializationVisibility.Hidden)] + public CrystalDecisions.Shared.IParameterField Parameter_encabezado2 { + get { + return this.DataDefinition.ParameterFields[1]; + } + } + + [Browsable(false)] + [DesignerSerializationVisibilityAttribute(System.ComponentModel.DesignerSerializationVisibility.Hidden)] + public CrystalDecisions.Shared.IParameterField Parameter_encabezado3 { + get { + return this.DataDefinition.ParameterFields[2]; + } + } + } + + [System.Drawing.ToolboxBitmapAttribute(typeof(CrystalDecisions.Shared.ExportOptions), "report.bmp")] + public class CachedAuditoriaUser : Component, ICachedReport { + + public CachedAuditoriaUser() { + } + + [Browsable(false)] + [DesignerSerializationVisibilityAttribute(System.ComponentModel.DesignerSerializationVisibility.Hidden)] + public virtual bool IsCacheable { + get { + return true; + } + set { + // + } + } + + [Browsable(false)] + [DesignerSerializationVisibilityAttribute(System.ComponentModel.DesignerSerializationVisibility.Hidden)] + public virtual bool ShareDBLogonInfo { + get { + return false; + } + set { + // + } + } + + [Browsable(false)] + [DesignerSerializationVisibilityAttribute(System.ComponentModel.DesignerSerializationVisibility.Hidden)] + public virtual System.TimeSpan CacheTimeOut { + get { + return CachedReportConstants.DEFAULT_TIMEOUT; + } + set { + // + } + } + + public virtual CrystalDecisions.CrystalReports.Engine.ReportDocument CreateReport() { + AuditoriaUser rpt = new AuditoriaUser(); + rpt.Site = this.Site; + return rpt; + } + + public virtual string GetCustomizedCacheKey(RequestContext request) { + String key = null; + // // The following is the code used to generate the default + // // cache key for caching report jobs in the ASP.NET Cache. + // // Feel free to modify this code to suit your needs. + // // Returning key == null causes the default cache key to + // // be generated. + // + // key = RequestContext.BuildCompleteCacheKey( + // request, + // null, // sReportFilename + // this.GetType(), + // this.ShareDBLogonInfo ); + return key; + } + } +} diff --git a/WebLab/Informes/AuditoriaUser.rpt b/WebLab/Informes/AuditoriaUser.rpt new file mode 100644 index 0000000000000000000000000000000000000000..21035155ffd9f4666cbcc0763c36e666bc824cab GIT binary patch literal 16384 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 literal 0 HcmV?d00001 diff --git a/WebLab/Usuarios/UsuarioEdit.aspx.cs b/WebLab/Usuarios/UsuarioEdit.aspx.cs index 9ab1a98c..c2cb5539 100644 --- a/WebLab/Usuarios/UsuarioEdit.aspx.cs +++ b/WebLab/Usuarios/UsuarioEdit.aspx.cs @@ -365,7 +365,7 @@ protected void btnAuditoria_Click(object sender, EventArgs e) encabezado3.Value = "Auditoria de Usuario"; - oCr.Report.FileName = "../Informes/AuditoriaProtocolo.rpt"; + oCr.Report.FileName = "../Informes/AuditoriaUser.rpt"; oCr.ReportDocument.SetDataSource(dtAuditoria); oCr.ReportDocument.ParameterFields[0].CurrentValues.Add(encabezado1); oCr.ReportDocument.ParameterFields[1].CurrentValues.Add(encabezado2); @@ -403,12 +403,15 @@ private DataTable GetDataSetAuditoria() //} - m_strSQL = @" SELECT A.username AS numero, P.apellido as username, A.fecha AS fecha, A.hora, A.accion, '' as analisis, '' as valor, '' as valorAnterior + m_strSQL = @" SELECT P.username + ' - '+ P.apellido + ' ' + P.nombre as numero , + P.apellido as username, A.fecha AS fecha, A.hora, A.accion, + '' as analisis, '' as valor, '' as valorAnterior FROM LAB_Auditoriausuario AS A (nolock) inner join sys_usuario P (nolock) on P.idusuario= A.idusuarioregistro where A.idusuario= " + Request["id"].ToString() + @" union - SELECT P.username AS numero, P.apellido as username, L.fecha AS fecha, + SELECT P.username + ' - '+ P.apellido + ' ' + P.nombre as numero , + P.apellido as username, L.fecha AS fecha, Format(L.fecha, 'hh:mm:ss') as hora, 'Acepto Terminos y Condiciones', '' as analisis, '' as valor, '' as valorAnterior FROM LAB_LogAccesoTerminosCondiciones AS L (nolock) inner join sys_usuario P (nolock) on P.idusuario= L.idUsuario diff --git a/WebLab/WebLab.csproj b/WebLab/WebLab.csproj index 690222be..27e8e4d5 100644 --- a/WebLab/WebLab.csproj +++ b/WebLab/WebLab.csproj @@ -4894,6 +4894,12 @@ Component True + + AuditoriaUser.rpt + True + Component + True + True True @@ -6807,6 +6813,10 @@ CrystalDecisions.VSDesigner.CodeGen.ReportCodeGenerator AuditoriaLote.cs + + CrystalDecisions.VSDesigner.CodeGen.ReportCodeGenerator + AuditoriaUser.cs + CrystalDecisions.VSDesigner.CodeGen.ReportCodeGenerator AuditoriaProtocolo.cs From 88d423f06ce7a40cc789d4b9796002448a48c7a3 Mon Sep 17 00:00:00 2001 From: Vanesa Rimada <80859025+vrimada@users.noreply.github.com> Date: Mon, 27 Apr 2026 12:24:53 -0300 Subject: [PATCH 14/37] =?UTF-8?q?Parametrizacion=20de=20aceptaci=C3=B3n=20?= =?UTF-8?q?de=20condiciones=20en=20cada=20ingreso?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- WebLab/loginSIL.ascx.cs | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/WebLab/loginSIL.ascx.cs b/WebLab/loginSIL.ascx.cs index e7dd1d0f..1b6a2c74 100644 --- a/WebLab/loginSIL.ascx.cs +++ b/WebLab/loginSIL.ascx.cs @@ -340,6 +340,13 @@ private void CrearLogAcceso(Usuario oUser) private bool MostrarTerminosCondiciones(Usuario oUser) { + /* + PARAMETRIZACION: + Cantidad X de dias + > 0 --> Muestra "Terminos y Condiciones" dado X dias + == 0 --> Muestra Siempre "Terminos y Condiciones" + < 0 --> NO muestra "Terminos y Condiciones" + */ int dias = Convert.ToInt32(ConfigurationManager.AppSettings["DiasTerminosCondiciones"]); if(dias > 0) { @@ -356,8 +363,8 @@ private bool MostrarTerminosCondiciones(Usuario oUser) } else { - // ScriptManager.RegisterStartupScript(this, this.GetType(), "error", "alert('❌ No hay dias definidos para los terminos y condiciones');", true); - return true; + if(dias == 0) return true; + else return false; } From cffea2b95bf53219027d8aa32026166591b1d921 Mon Sep 17 00:00:00 2001 From: Vanesa Rimada <80859025+vrimada@users.noreply.github.com> Date: Mon, 27 Apr 2026 15:25:06 -0300 Subject: [PATCH 15/37] fix:auditoria de usuario --- Business/Data/Laboratorio/AuditoriaUsuario.cs | 30 +++++++- .../Data/Laboratorio/AuditoriaUsuario.hbm.xml | 3 +- Business/Data/Usuario.cs | 5 +- WebLab/Informes/AuditoriaUser.rpt | Bin 16384 -> 16384 bytes WebLab/Usuarios/UsuarioEdit.aspx.cs | 71 +++++++++++++++++- 5 files changed, 102 insertions(+), 7 deletions(-) diff --git a/Business/Data/Laboratorio/AuditoriaUsuario.cs b/Business/Data/Laboratorio/AuditoriaUsuario.cs index 9ee61111..6db54fd9 100644 --- a/Business/Data/Laboratorio/AuditoriaUsuario.cs +++ b/Business/Data/Laboratorio/AuditoriaUsuario.cs @@ -24,7 +24,9 @@ public sealed class AuditoriaUsuario : Business.BaseDataAccess private string m_accion; private string m_username; - private int m_idusuarioregistro; + private int m_idusuarioregistro; + private string m_valorNuevo; + private string m_valorAnterior; #endregion #region Default ( Empty ) Class Constuctor @@ -193,7 +195,29 @@ public bool IsChanged { get { return m_isChanged; } } - - #endregion + public string ValorNuevo + { + get { return m_valorNuevo; } + set + { + if (value != null && value.Length > 50) + throw new ArgumentOutOfRangeException("Invalid value for Valor Nuevo", value, value.ToString()); + + m_isChanged |= (m_valorNuevo != value); m_valorNuevo = value; + } + } + + public string ValorAnterior + { + get { return m_valorAnterior; } + set + { + if (value != null && value.Length > 50) + throw new ArgumentOutOfRangeException("Invalid value for Valor Anterior", value, value.ToString()); + + m_isChanged |= (m_valorAnterior != value); m_valorAnterior = value; + } + } + #endregion } } diff --git a/Business/Data/Laboratorio/AuditoriaUsuario.hbm.xml b/Business/Data/Laboratorio/AuditoriaUsuario.hbm.xml index c14ac5fb..86bb5b49 100644 --- a/Business/Data/Laboratorio/AuditoriaUsuario.hbm.xml +++ b/Business/Data/Laboratorio/AuditoriaUsuario.hbm.xml @@ -12,6 +12,7 @@ - + + diff --git a/Business/Data/Usuario.cs b/Business/Data/Usuario.cs index 1982d0a8..0f3ef633 100644 --- a/Business/Data/Usuario.cs +++ b/Business/Data/Usuario.cs @@ -225,8 +225,9 @@ public string Nombre m_isChanged |= (m_nombre != value); m_nombre = value; } } + - public void GrabaAuditoria(string accion, int iduser, string username) + public void GrabaAuditoria(string accion, int iduser, string username, string valorAnterior="", string valorNuevo="") { AuditoriaUsuario oRegistro = new AuditoriaUsuario(); oRegistro.IdUsuario = iduser; // usuario afectado que esta modificando, consultando , etc. @@ -236,6 +237,8 @@ public void GrabaAuditoria(string accion, int iduser, string username) oRegistro.Hora = DateTime.Now.ToLongTimeString(); oRegistro.IdUsuarioRegistro = this.IdUsuario; //usuario que realiza la accion + oRegistro.ValorAnterior = valorAnterior; + oRegistro.ValorNuevo = valorNuevo; oRegistro.Save(); diff --git a/WebLab/Informes/AuditoriaUser.rpt b/WebLab/Informes/AuditoriaUser.rpt index 21035155ffd9f4666cbcc0763c36e666bc824cab..1dd0a55c09ad643cd6fde0f0a8f3fdf4002f4fb7 100644 GIT binary patch delta 7346 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 Yu@oQbbgGfHx=w+F_p?zlUjd>t3|SsV)Bpeg delta 7253 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 diff --git a/WebLab/Usuarios/UsuarioEdit.aspx.cs b/WebLab/Usuarios/UsuarioEdit.aspx.cs index c2cb5539..37f333a6 100644 --- a/WebLab/Usuarios/UsuarioEdit.aspx.cs +++ b/WebLab/Usuarios/UsuarioEdit.aspx.cs @@ -187,9 +187,13 @@ private void Guardar(Usuario oRegistro) { string accion = "Crea"; if (Request["id"] != null) //oRegistro nunca es null + { accion = "Modifica"; + guardarAuditoria(oRegistro); + } + Perfil oPerfil = new Perfil(); oPerfil = (Perfil)oPerfil.Get(typeof(Perfil), int.Parse(ddlPerfil.SelectedValue)); @@ -405,7 +409,7 @@ private DataTable GetDataSetAuditoria() m_strSQL = @" SELECT P.username + ' - '+ P.apellido + ' ' + P.nombre as numero , P.apellido as username, A.fecha AS fecha, A.hora, A.accion, - '' as analisis, '' as valor, '' as valorAnterior + '' as analisis, isnull(valorNuevo,'') as valor, isnull(valorAnterior,'') as valorAnterior FROM LAB_Auditoriausuario AS A (nolock) inner join sys_usuario P (nolock) on P.idusuario= A.idusuarioregistro where A.idusuario= " + Request["id"].ToString() @@ -456,7 +460,9 @@ protected void customValidacionGeneral_ServerValidate(object source, ServerValid oRegistro = (Usuario)oRegistro.Get(typeof(Usuario), "Username", txtUsername.Text.Trim()); if (oRegistro != null) { - args.IsValid = false; + if (Request["id"] != null) + if (oRegistro.IdUsuario != int.Parse(Request["id"])) //que no compare el username del que estoy modificando + args.IsValid = false; return; @@ -597,6 +603,67 @@ protected void customValidatorEfector_ServerValidate(object source, ServerValida } } + private void guardarAuditoria(Usuario oRegistro) + { + Usuario oAuditor = new Usuario(); + oAuditor = (Usuario)oAuditor.Get(typeof(Usuario), int.Parse(Session["idUsuario"].ToString())); + + int idUsuario = oRegistro.IdUsuario; + if (oRegistro.Nombre != txtNombre.Text) + oAuditor.GrabaAuditoria("Modifica Nombre", idUsuario, oRegistro.Username, oRegistro.Nombre, txtNombre.Text); + + if (oRegistro.Apellido != txtApellido.Text) + oAuditor.GrabaAuditoria("Modifica Apellido", idUsuario, oRegistro.Username, oRegistro.Apellido, txtApellido.Text); + + if (oRegistro.FirmaValidacion != txtFirmaValidacion.Text) + oAuditor.GrabaAuditoria("Modifica Firma Validacion", idUsuario, oRegistro.Username, oRegistro.FirmaValidacion, txtFirmaValidacion.Text); + + if (oRegistro.Email != email.Value.ToString()) + oAuditor.GrabaAuditoria("Modifica Email", idUsuario, oRegistro.Username, oRegistro.Email, email.Value); + + if (oRegistro.Telefono != txtTelefono.Text) + oAuditor.GrabaAuditoria("Modifica Telefono", idUsuario, oRegistro.Username, oRegistro.Telefono, txtTelefono.Text); + + if (oRegistro.TipoAutenticacion.Trim() != ddlTipoAutenticacion.SelectedValue) + oAuditor.GrabaAuditoria("Modifica Tipo Autenticacion", idUsuario, oRegistro.Username, oRegistro.TipoAutenticacion, ddlTipoAutenticacion.SelectedValue); + + if (oRegistro.Username != txtUsername.Text) + oAuditor.GrabaAuditoria("Modifica Username", idUsuario, oRegistro.Username, oRegistro.Username, txtUsername.Text); + + if (oRegistro.Administrador != chkAdministrador.Checked) + oAuditor.GrabaAuditoria("Modifica Administrador", idUsuario, oRegistro.Username, oRegistro.Administrador ? "Si" : "No", chkAdministrador.Checked ? "Si" : "No"); + + if (oRegistro.IdArea.ToString() != ddlArea.SelectedValue) + { + string nombreArea = ""; + if (oRegistro.IdArea != 0) + { + Area oArea = new Area(); + oArea = (Area)oArea.Get(typeof(Area), oRegistro.IdArea); + nombreArea = oArea.Nombre; + } + else nombreArea = "Todas"; + + oAuditor.GrabaAuditoria("Modifica Area", idUsuario, oRegistro.Username, nombreArea, ddlArea.SelectedItem.Text); + } + + if (oRegistro.IdPerfil.IdPerfil.ToString() != ddlPerfil.SelectedValue) + oAuditor.GrabaAuditoria("Modifica Perfil", idUsuario, oRegistro.Username, oRegistro.IdPerfil.Nombre, ddlPerfil.SelectedItem.Text); + + if (ddlEfectorDestino.SelectedValue != "" && oRegistro.IdEfectorDestino.IdEfector.ToString() != ddlEfectorDestino.SelectedValue) + oAuditor.GrabaAuditoria("Modifica Laboratorio Destino", idUsuario, oRegistro.Username, oRegistro.IdEfectorDestino.Nombre, ddlEfectorDestino.SelectedItem.Text); + + if (oRegistro.Activo != chkActivo.Checked) + oAuditor.GrabaAuditoria("Modifica Activo", idUsuario, oRegistro.Username, oRegistro.Activo ? "Si":"No", chkActivo.Checked ? "Si":"No"); + + if (oRegistro.Externo != chkExterno.Checked) + oAuditor.GrabaAuditoria("Modifica Externo", idUsuario, oRegistro.Username, oRegistro.Externo ? "Si":"No", chkExterno.Checked ? "Si":"No"); + + if (oRegistro.RequiereCambioPass != chkRequiereContrasenia.Checked) + oAuditor.GrabaAuditoria("Modifica Requiere Contraseña", idUsuario, oRegistro.Username, oRegistro.RequiereCambioPass ? "Si":"No", chkRequiereContrasenia.Checked ? "Si":"No"); + + + } #endregion #region Efectores From c60c9e2d79398c3926c83cb9454f830171c760b7 Mon Sep 17 00:00:00 2001 From: Vanesa Rimada <80859025+vrimada@users.noreply.github.com> Date: Tue, 28 Apr 2026 09:25:46 -0300 Subject: [PATCH 16/37] LAB-240 urgencias: ocultar boton recordar practicas --- WebLab/Protocolos/ProtocoloEdit2.aspx.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/WebLab/Protocolos/ProtocoloEdit2.aspx.cs b/WebLab/Protocolos/ProtocoloEdit2.aspx.cs index 26e0d81c..cc2c6513 100644 --- a/WebLab/Protocolos/ProtocoloEdit2.aspx.cs +++ b/WebLab/Protocolos/ProtocoloEdit2.aspx.cs @@ -1593,6 +1593,7 @@ inner join lab_item P with (nolock) on dp.idsubitem = p.iditem ddlOrigen.SelectedValue = oC.IdOrigenUrgencia.ToString(); //Origen: Guardia ddlSectorServicio.SelectedValue = oC.IdSectorUrgencia.ToString(); // sector de urgencia ddlPrioridad.SelectedValue = "2"; // Prioridad: Urgencia + chkRecordarPractica.Visible = false; } else { From 70d3e5a0a23a4b0d53f43c48794a18e4abf9e12f Mon Sep 17 00:00:00 2001 From: Vanesa Rimada <80859025+vrimada@users.noreply.github.com> Date: Tue, 28 Apr 2026 10:39:56 -0300 Subject: [PATCH 17/37] fix sesiones y auditoria --- WebLab/Usuarios/UsuarioEdit.aspx | 2 +- WebLab/Usuarios/UsuarioEdit.aspx.cs | 173 +++++++++---------- WebLab/Usuarios/UsuarioEdit.aspx.designer.cs | 9 + 3 files changed, 91 insertions(+), 93 deletions(-) diff --git a/WebLab/Usuarios/UsuarioEdit.aspx b/WebLab/Usuarios/UsuarioEdit.aspx index 7c745b4c..1a892ea0 100644 --- a/WebLab/Usuarios/UsuarioEdit.aspx +++ b/WebLab/Usuarios/UsuarioEdit.aspx @@ -204,7 +204,7 @@ + - - -
- Contraseña: diff --git a/WebLab/Usuarios/UsuarioEdit.aspx.cs b/WebLab/Usuarios/UsuarioEdit.aspx.cs index 37f333a6..9a469fc5 100644 --- a/WebLab/Usuarios/UsuarioEdit.aspx.cs +++ b/WebLab/Usuarios/UsuarioEdit.aspx.cs @@ -34,30 +34,36 @@ public partial class UsuarioEdit : System.Web.UI.Page protected void Page_PreInit(object sender, EventArgs e) { - oCr.CacheDuration = 0; - oCr.EnableCaching = false; - oC = (Configuracion)oC.Get(typeof(Configuracion), 1); // "IdEfector", oUser.IdEfector); + if (Session["idUsuario"] != null) + { + oCr.CacheDuration = 0; + oCr.EnableCaching = false; + oC = (Configuracion)oC.Get(typeof(Configuracion), 1); // "IdEfector", oUser.IdEfector); + } + else Response.Redirect("../FinSesion.aspx", false); } protected void Page_Load(object sender, EventArgs e) { - if (!Page.IsPostBack) - { - if (Session["idUsuario"] != null) + if (Session["idUsuario"] != null) + { + if (!Page.IsPostBack) { VerificaPermisos("Usuarios"); CargarListas(); if (Request["id"] != null) MostrarDatos(); else - { + { MostrarEfectores(); btnAuditoria.Visible = false; } - + } - else Response.Redirect("../FinSesion.aspx", false); } + else Response.Redirect("../FinSesion.aspx", false); + } + private void VerificaPermisos(string sObjeto) { @@ -91,11 +97,11 @@ private void CargarListas() oUtil.CargarCombo(ddlArea, m_ssql, "idArea", "nombre"); ddlArea.Items.Insert(0, new ListItem("Todas", "0")); - if (ConfigurationManager.AppSettings["tipoAutenticacion"].ToString() == "SSO") - { - chkRequiereContrasenia.Checked = false; - chkRequiereContrasenia.Visible = false; - } + //if (ConfigurationManager.AppSettings["tipoAutenticacion"].ToString() == "SSO") + //{ + // chkRequiereContrasenia.Checked = false; + // chkRequiereContrasenia.Visible = false; + //} } @@ -111,8 +117,10 @@ private void MostrarDatos() //txtMatricula.Text = oRegistro.Matricula; txtUsername.Text = oRegistro.Username; chkRequiereContrasenia.Checked = oRegistro.RequiereCambioPass; + //En modificacion no se puede editar contraseña, la ocultamos: txtPassword.Enabled = false; txtPassword.Visible = false; + lblPassword.Visible = false; chkActivo.Checked = oRegistro.Activo; ddlPerfil.SelectedValue = oRegistro.IdPerfil.IdPerfil.ToString(); //ddlEfector.SelectedValue = oRegistro.IdEfector.IdEfector.ToString(); @@ -185,15 +193,8 @@ private void agregarEfectorAdmin() private void Guardar(Usuario oRegistro) { - string accion = "Crea"; - if (Request["id"] != null) //oRegistro nunca es null - { - accion = "Modifica"; - guardarAuditoria(oRegistro); - } - - - + guardarAuditoria(oRegistro); + Perfil oPerfil = new Perfil(); oPerfil = (Perfil)oPerfil.Get(typeof(Perfil), int.Parse(ddlPerfil.SelectedValue)); @@ -208,13 +209,10 @@ private void Guardar(Usuario oRegistro) else oEfectorDestino = oEfector; - - oRegistro.IdEfector = oEfector; oRegistro.IdEfectorDestino = oEfectorDestino; oRegistro.IdPerfil = oPerfil; oRegistro.IdArea = int.Parse(ddlArea.SelectedValue); - oRegistro.Apellido = txtApellido.Text; oRegistro.Nombre = txtNombre.Text; oRegistro.Legajo = ""; @@ -222,7 +220,6 @@ private void Guardar(Usuario oRegistro) //oRegistro.Matricula=txtMatricula.Text; oRegistro.Administrador = chkAdministrador.Checked; oRegistro.Username = txtUsername.Text; - oRegistro.Email = email.Value; oRegistro.Telefono = txtTelefono.Text; @@ -240,39 +237,14 @@ private void Guardar(Usuario oRegistro) oRegistro.Password = m_password; } - - - if (Request["id"] != null) //oRegistro nunca es null - { - if ((oRegistro.Activo == true) && (chkActivo.Checked == false)) - accion = "Inhabilita"; - if ((oRegistro.Activo == false) && (chkActivo.Checked == true)) - accion = "Habilita"; - - if (oRegistro.IdPerfil != oPerfil) - accion = "Cambia Perfil"; - - if (oRegistro.TipoAutenticacion.Trim() != ddlTipoAutenticacion.SelectedValue) - accion = "Cambia Autenticacion: " + ddlTipoAutenticacion.SelectedValue.Trim(); - - } - oRegistro.Activo = chkActivo.Checked; oRegistro.Externo = chkExterno.Checked; oRegistro.RequiereCambioPass = chkRequiereContrasenia.Checked; oRegistro.IdUsuarioActualizacion = int.Parse(Session["idUsuario"].ToString()); oRegistro.FechaActualizacion = DateTime.Now; - - oRegistro.TipoAutenticacion = ddlTipoAutenticacion.SelectedValue; oRegistro.Save(); - - Usuario oAuditor = new Usuario(); - oAuditor = (Usuario)oAuditor.Get(typeof(Usuario), int.Parse(Session["idUsuario"].ToString())); - - oAuditor.GrabaAuditoria(accion, oRegistro.IdUsuario, oRegistro.Username); - if (Request["id"] == null) //en el alta se guardan los efectores luego de crear el usuario //en modificacion no los guardamos desde aca, ya que se guardan en el evento "Agregar Efector" GuardarEfectores(oRegistro); @@ -386,7 +358,7 @@ protected void btnAuditoria_Click(object sender, EventArgs e) } else { - string popupScript = ""; + string popupScript = ""; Page.RegisterStartupScript("PopupScript", popupScript); } } @@ -406,6 +378,7 @@ private DataTable GetDataSetAuditoria() // m_strCondicion = " and P.idefector=" + oUser.IdEfector.IdEfector.ToString(); //} + //Agregamos la auditoria de aceptacion de terminos y condiciones m_strSQL = @" SELECT P.username + ' - '+ P.apellido + ' ' + P.nombre as numero , P.apellido as username, A.fecha AS fecha, A.hora, A.accion, @@ -608,61 +581,77 @@ private void guardarAuditoria(Usuario oRegistro) Usuario oAuditor = new Usuario(); oAuditor = (Usuario)oAuditor.Get(typeof(Usuario), int.Parse(Session["idUsuario"].ToString())); - int idUsuario = oRegistro.IdUsuario; - if (oRegistro.Nombre != txtNombre.Text) - oAuditor.GrabaAuditoria("Modifica Nombre", idUsuario, oRegistro.Username, oRegistro.Nombre, txtNombre.Text); + string accion = "Crea"; - if (oRegistro.Apellido != txtApellido.Text) - oAuditor.GrabaAuditoria("Modifica Apellido", idUsuario, oRegistro.Username, oRegistro.Apellido, txtApellido.Text); + if (Request["id"] != null) + { + accion = "Modifica"; + if ((oRegistro.Activo == true) && (chkActivo.Checked == false)) + accion = "Inhabilita"; + if ((oRegistro.Activo == false) && (chkActivo.Checked == true)) + accion = "Habilita"; + } + //Auditoria accion + oAuditor.GrabaAuditoria(accion, oRegistro.IdUsuario, oRegistro.Username); + + //Auditoria cambio de valores del usuario + if (Request["id"] != null) + { + + if (oRegistro.Nombre != txtNombre.Text) + oAuditor.GrabaAuditoria("Modifica Nombre", oRegistro.IdUsuario, oRegistro.Username, oRegistro.Nombre, txtNombre.Text); - if (oRegistro.FirmaValidacion != txtFirmaValidacion.Text) - oAuditor.GrabaAuditoria("Modifica Firma Validacion", idUsuario, oRegistro.Username, oRegistro.FirmaValidacion, txtFirmaValidacion.Text); + if (oRegistro.Apellido != txtApellido.Text) + oAuditor.GrabaAuditoria("Modifica Apellido", oRegistro.IdUsuario, oRegistro.Username, oRegistro.Apellido, txtApellido.Text); - if (oRegistro.Email != email.Value.ToString()) - oAuditor.GrabaAuditoria("Modifica Email", idUsuario, oRegistro.Username, oRegistro.Email, email.Value); + if (oRegistro.FirmaValidacion != txtFirmaValidacion.Text) + oAuditor.GrabaAuditoria("Modifica Firma Validacion", oRegistro.IdUsuario, oRegistro.Username, oRegistro.FirmaValidacion, txtFirmaValidacion.Text); - if (oRegistro.Telefono != txtTelefono.Text) - oAuditor.GrabaAuditoria("Modifica Telefono", idUsuario, oRegistro.Username, oRegistro.Telefono, txtTelefono.Text); + if (oRegistro.Email != email.Value.ToString()) + oAuditor.GrabaAuditoria("Modifica Email", oRegistro.IdUsuario , oRegistro.Username, oRegistro.Email, email.Value); - if (oRegistro.TipoAutenticacion.Trim() != ddlTipoAutenticacion.SelectedValue) - oAuditor.GrabaAuditoria("Modifica Tipo Autenticacion", idUsuario, oRegistro.Username, oRegistro.TipoAutenticacion, ddlTipoAutenticacion.SelectedValue); + if (oRegistro.Telefono != txtTelefono.Text) + oAuditor.GrabaAuditoria("Modifica Telefono", oRegistro.IdUsuario, oRegistro.Username, oRegistro.Telefono, txtTelefono.Text); + + if (oRegistro.TipoAutenticacion.Trim() != ddlTipoAutenticacion.SelectedValue) + oAuditor.GrabaAuditoria("Modifica Tipo Autenticacion", oRegistro.IdUsuario, oRegistro.Username, oRegistro.TipoAutenticacion, ddlTipoAutenticacion.SelectedValue); - if (oRegistro.Username != txtUsername.Text) - oAuditor.GrabaAuditoria("Modifica Username", idUsuario, oRegistro.Username, oRegistro.Username, txtUsername.Text); + if (oRegistro.Username != txtUsername.Text) + oAuditor.GrabaAuditoria("Modifica Username", oRegistro.IdUsuario, oRegistro.Username, oRegistro.Username, txtUsername.Text); - if (oRegistro.Administrador != chkAdministrador.Checked) - oAuditor.GrabaAuditoria("Modifica Administrador", idUsuario, oRegistro.Username, oRegistro.Administrador ? "Si" : "No", chkAdministrador.Checked ? "Si" : "No"); + if (oRegistro.Administrador != chkAdministrador.Checked) + oAuditor.GrabaAuditoria("Modifica Administrador", oRegistro.IdUsuario, oRegistro.Username, oRegistro.Administrador ? "Si" : "No", chkAdministrador.Checked ? "Si" : "No"); - if (oRegistro.IdArea.ToString() != ddlArea.SelectedValue) - { - string nombreArea = ""; - if (oRegistro.IdArea != 0) + if (oRegistro.IdArea.ToString() != ddlArea.SelectedValue) { - Area oArea = new Area(); - oArea = (Area)oArea.Get(typeof(Area), oRegistro.IdArea); - nombreArea = oArea.Nombre; - } - else nombreArea = "Todas"; + string nombreArea = ""; + if (oRegistro.IdArea != 0) + { + Area oArea = new Area(); + oArea = (Area)oArea.Get(typeof(Area), oRegistro.IdArea); + nombreArea = oArea.Nombre; + } + else nombreArea = "Todas"; - oAuditor.GrabaAuditoria("Modifica Area", idUsuario, oRegistro.Username, nombreArea, ddlArea.SelectedItem.Text); - } + oAuditor.GrabaAuditoria("Modifica Area", oRegistro.IdUsuario, oRegistro.Username, nombreArea, ddlArea.SelectedItem.Text); + } - if (oRegistro.IdPerfil.IdPerfil.ToString() != ddlPerfil.SelectedValue) - oAuditor.GrabaAuditoria("Modifica Perfil", idUsuario, oRegistro.Username, oRegistro.IdPerfil.Nombre, ddlPerfil.SelectedItem.Text); + if (oRegistro.IdPerfil.IdPerfil.ToString() != ddlPerfil.SelectedValue) + oAuditor.GrabaAuditoria("Modifica Perfil", oRegistro.IdUsuario, oRegistro.Username, oRegistro.IdPerfil.Nombre, ddlPerfil.SelectedItem.Text); - if (ddlEfectorDestino.SelectedValue != "" && oRegistro.IdEfectorDestino.IdEfector.ToString() != ddlEfectorDestino.SelectedValue) - oAuditor.GrabaAuditoria("Modifica Laboratorio Destino", idUsuario, oRegistro.Username, oRegistro.IdEfectorDestino.Nombre, ddlEfectorDestino.SelectedItem.Text); + if (ddlEfectorDestino.SelectedValue != "" && oRegistro.IdEfectorDestino.IdEfector.ToString() != ddlEfectorDestino.SelectedValue) + oAuditor.GrabaAuditoria("Modifica Laboratorio Destino", oRegistro.IdUsuario, oRegistro.Username, oRegistro.IdEfectorDestino.Nombre, ddlEfectorDestino.SelectedItem.Text); - if (oRegistro.Activo != chkActivo.Checked) - oAuditor.GrabaAuditoria("Modifica Activo", idUsuario, oRegistro.Username, oRegistro.Activo ? "Si":"No", chkActivo.Checked ? "Si":"No"); + if (oRegistro.Activo != chkActivo.Checked) + oAuditor.GrabaAuditoria("Modifica Activo", oRegistro.IdUsuario, oRegistro.Username, oRegistro.Activo ? "Si":"No", chkActivo.Checked ? "Si":"No"); - if (oRegistro.Externo != chkExterno.Checked) - oAuditor.GrabaAuditoria("Modifica Externo", idUsuario, oRegistro.Username, oRegistro.Externo ? "Si":"No", chkExterno.Checked ? "Si":"No"); + if (oRegistro.Externo != chkExterno.Checked) + oAuditor.GrabaAuditoria("Modifica Externo", oRegistro.IdUsuario, oRegistro.Username, oRegistro.Externo ? "Si":"No", chkExterno.Checked ? "Si":"No"); - if (oRegistro.RequiereCambioPass != chkRequiereContrasenia.Checked) - oAuditor.GrabaAuditoria("Modifica Requiere Contraseña", idUsuario, oRegistro.Username, oRegistro.RequiereCambioPass ? "Si":"No", chkRequiereContrasenia.Checked ? "Si":"No"); + if (oRegistro.RequiereCambioPass != chkRequiereContrasenia.Checked) + oAuditor.GrabaAuditoria("Modifica Requiere Contraseña", oRegistro.IdUsuario, oRegistro.Username, oRegistro.RequiereCambioPass ? "Si":"No", chkRequiereContrasenia.Checked ? "Si":"No"); - + } } #endregion diff --git a/WebLab/Usuarios/UsuarioEdit.aspx.designer.cs b/WebLab/Usuarios/UsuarioEdit.aspx.designer.cs index d8c0b814..fcde6f90 100644 --- a/WebLab/Usuarios/UsuarioEdit.aspx.designer.cs +++ b/WebLab/Usuarios/UsuarioEdit.aspx.designer.cs @@ -140,6 +140,15 @@ public partial class UsuarioEdit /// protected global::System.Web.UI.WebControls.CustomValidator customValidacionGeneral1; + /// + /// Control lblPassword. + /// + /// + /// Campo generado automáticamente. + /// Para modificarlo, mueva la declaración del campo del archivo del diseñador al archivo de código subyacente. + /// + protected global::System.Web.UI.WebControls.Label lblPassword; + /// /// Control txtPassword. /// From 7d10ead958581c86b5fa2c18c531cc13c70fc602 Mon Sep 17 00:00:00 2001 From: Vanesa Rimada <80859025+vrimada@users.noreply.github.com> Date: Tue, 28 Apr 2026 13:35:24 -0300 Subject: [PATCH 18/37] label github --- .github/workflows/label02_has_conflicts.yaml | 84 ++++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 .github/workflows/label02_has_conflicts.yaml diff --git a/.github/workflows/label02_has_conflicts.yaml b/.github/workflows/label02_has_conflicts.yaml new file mode 100644 index 00000000..5f08c0d3 --- /dev/null +++ b/.github/workflows/label02_has_conflicts.yaml @@ -0,0 +1,84 @@ +name: PR conflict label + +on: + pull_request: + types: [opened, synchronize, reopened] + push: + branches: [master] + +permissions: + pull-requests: write + issues: write + contents: read + +jobs: + conflicts: + runs-on: ubuntu-latest + steps: + - name: Check conflicts + uses: actions/github-script@v7 + with: + script: | + const { owner, repo } = context.repo; + + async function checkPR(pr) { + let data; + let retries = 5; + const issue_number = pr.number; + + while (retries > 0) { + const response = await github.rest.pulls.get({ + owner, + repo, + pull_number: issue_number + }); + data = response.data; + console.log(`PR #${issue_number} - mergeable: ${data.mergeable}, state: ${data.mergeable_state}`); + + // Si mergeable es null, GitHub aún está calculando + if (data.mergeable !== null) break; + + await new Promise(r => setTimeout(r, 5000)); + retries--; + } + + // Usamos mergeable === false para detectar conflictos reales + if (data.mergeable === false) { + console.log(`Adding "Conflictos" label to PR #${issue_number}`); + await github.rest.issues.addLabels({ + owner, + repo, + issue_number, + labels: ['Conflictos'] + }); + } else if (data.mergeable === true) { + console.log(`Removing "Conflictos" label from PR #${issue_number} (if exists)`); + try { + await github.rest.issues.removeLabel({ + owner, + repo, + issue_number, + name: 'Conflictos' + }); + } catch (e) { + // label no existía + } + } + } + + if (context.eventName === 'pull_request') { + await checkPR(context.payload.pull_request); + } + + if (context.eventName === 'push') { + const { data: prs } = await github.rest.pulls.list({ + owner, + repo, + state: 'open', + base: 'master' + }); + + for (const pr of prs) { + await checkPR(pr); + } + } From a4e0894f0b71cf11b9dde721f4ca1915b2756034 Mon Sep 17 00:00:00 2001 From: Vanesa Rimada <80859025+vrimada@users.noreply.github.com> Date: Wed, 29 Apr 2026 10:04:47 -0300 Subject: [PATCH 19/37] FIX: perfiles --- WebLab/Usuarios/UsuarioList.aspx.cs | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/WebLab/Usuarios/UsuarioList.aspx.cs b/WebLab/Usuarios/UsuarioList.aspx.cs index f85d9415..3e2a7ad8 100644 --- a/WebLab/Usuarios/UsuarioList.aspx.cs +++ b/WebLab/Usuarios/UsuarioList.aspx.cs @@ -120,9 +120,12 @@ private void CargarListas() if (nivelcentral) ddlEfector.Items.Insert(0, new ListItem("--Seleccione un efector--", "0")); - m_ssql = @"SELECT idPerfil, nombre FROM Sys_Perfil with (nolock) - where idperfil in (select idperfil from Sys_Usuario where activo=1 and - idefector=" + oUser.IdEfector.IdEfector.ToString() +" ) ORDER BY nombre"; + m_ssql = @"SELECT distinct P.idperfil, P.nombre FROM sys_usuario AS U with (nolock) + INNER JOIN Sys_Perfil AS P with (nolock) ON P.idPerfil=U.idPerfil + where U.idperfil in (select idusuario FROM Sys_UsuarioEfector WHERE idefector=" + oUser.IdEfector.IdEfector.ToString() + @") + --incluir Admin externo + or P.idPerfil in (SELECT idperfil FROM Sys_Usuario WHERE idEfectorDestino=" + oUser.IdEfector.IdEfector.ToString() + @" AND activo=1) + ORDER BY nombre"; oUtil.CargarCombo(ddlPerfil, m_ssql, "idPerfil", "nombre"); ddlPerfil.Items.Insert(0, new ListItem("Todos", "0")); From 8ed16942d48e2d3a97ccedfa193994b890028641 Mon Sep 17 00:00:00 2001 From: Vanesa Rimada <80859025+vrimada@users.noreply.github.com> Date: Tue, 5 May 2026 10:47:01 -0300 Subject: [PATCH 20/37] perfiles de usuario. cambio de adm externo a administrador ocutlar labo --- WebLab/Usuarios/UsuarioEdit.aspx.cs | 21 ++--------------- WebLab/Usuarios/UsuarioList.aspx.cs | 36 ++++++++++++++++++++++++----- 2 files changed, 32 insertions(+), 25 deletions(-) diff --git a/WebLab/Usuarios/UsuarioEdit.aspx.cs b/WebLab/Usuarios/UsuarioEdit.aspx.cs index 9a469fc5..1bbc5013 100644 --- a/WebLab/Usuarios/UsuarioEdit.aspx.cs +++ b/WebLab/Usuarios/UsuarioEdit.aspx.cs @@ -96,14 +96,6 @@ private void CargarListas() m_ssql = @" SELECT idArea, nombre FROM LAB_Area (nolock) where baja=0 ORDER BY nombre "; oUtil.CargarCombo(ddlArea, m_ssql, "idArea", "nombre"); ddlArea.Items.Insert(0, new ListItem("Todas", "0")); - - //if (ConfigurationManager.AppSettings["tipoAutenticacion"].ToString() == "SSO") - //{ - // chkRequiereContrasenia.Checked = false; - // chkRequiereContrasenia.Visible = false; - //} - - } #region Datos Generales @@ -161,6 +153,7 @@ private void habilitarAdministrador() lblMensajeEfector.Visible = false; lblMensajeEfector.UpdateAfterCallBack = true; ddlEfector3.ClearSelection(); agregarEfectorAdmin(); + ddlPerfil_SelectedIndexChanged(null,null); //si antes era Admin externo queda visible } else @@ -168,6 +161,7 @@ private void habilitarAdministrador() ddlArea.Enabled = true; ddlPerfil.Enabled = true; btnAgregarEfector.Enabled = true; + ddlPerfil_SelectedIndexChanged(null, null); } ddlArea.UpdateAfterCallBack = true; @@ -274,10 +268,6 @@ protected void btnGuardar_Click1(object sender, EventArgs e) Guardar(oRegistro); - //if (Request["id"] != null) - // Response.Redirect("UsuarioList.aspx", false); - //else - // Response.Redirect("UsuarioEdit.aspx", false); string parametros = this.parametros(); Response.Redirect("UsuarioList.aspx?" + parametros, false); } @@ -368,16 +358,9 @@ private DataTable GetDataSetAuditoria() { string m_strSQL = ""; - //string m_strCondicion = ""; - SqlConnection conn = (SqlConnection)NHibernateHttpModule.CurrentSession.Connection; SqlDataAdapter adapter = new SqlDataAdapter(); - //if (!oUser.Administrador) - //{ - // m_strCondicion = " and P.idefector=" + oUser.IdEfector.IdEfector.ToString(); - //} - //Agregamos la auditoria de aceptacion de terminos y condiciones m_strSQL = @" SELECT P.username + ' - '+ P.apellido + ' ' + P.nombre as numero , diff --git a/WebLab/Usuarios/UsuarioList.aspx.cs b/WebLab/Usuarios/UsuarioList.aspx.cs index 3e2a7ad8..2a796ad7 100644 --- a/WebLab/Usuarios/UsuarioList.aspx.cs +++ b/WebLab/Usuarios/UsuarioList.aspx.cs @@ -120,12 +120,36 @@ private void CargarListas() if (nivelcentral) ddlEfector.Items.Insert(0, new ListItem("--Seleccione un efector--", "0")); - m_ssql = @"SELECT distinct P.idperfil, P.nombre FROM sys_usuario AS U with (nolock) - INNER JOIN Sys_Perfil AS P with (nolock) ON P.idPerfil=U.idPerfil - where U.idperfil in (select idusuario FROM Sys_UsuarioEfector WHERE idefector=" + oUser.IdEfector.IdEfector.ToString() + @") - --incluir Admin externo - or P.idPerfil in (SELECT idperfil FROM Sys_Usuario WHERE idEfectorDestino=" + oUser.IdEfector.IdEfector.ToString() + @" AND activo=1) - ORDER BY nombre"; + if (nivelcentral) + m_ssql = @"SELECT idPerfil, nombre FROM Sys_Perfil with (nolock) ORDER BY nombre"; + else + m_ssql = @"SELECT DISTINCT + U.idPerfil, + P.nombre + FROM Sys_Usuario U + INNER JOIN Sys_Perfil P ON P.idPerfil = U.idPerfil + WHERE U.idUsuario IN ( + SELECT idUsuario + FROM Sys_UsuarioEfector + WHERE idEfector = " + oUser.IdEfector.IdEfector.ToString() + @" + ) + UNION + + SELECT + P.idPerfil, + P.nombre + FROM Sys_Perfil P WITH (NOLOCK) + WHERE P.idPerfil = 15 + AND EXISTS ( + SELECT 1 + FROM Sys_Usuario U WITH (NOLOCK) + WHERE U.idEfector <> " + oUser.IdEfector.IdEfector.ToString() + @" + AND U.idEfectorDestino = " + oUser.IdEfector.IdEfector.ToString() + @" + AND U.activo = 1 + AND U.idPerfil = 15 + ) + + ORDER BY P.nombre"; oUtil.CargarCombo(ddlPerfil, m_ssql, "idPerfil", "nombre"); ddlPerfil.Items.Insert(0, new ListItem("Todos", "0")); From 67063acdc276a9ab1b4ff612285aa7bc7768075e Mon Sep 17 00:00:00 2001 From: Vanesa Rimada <80859025+vrimada@users.noreply.github.com> Date: Wed, 6 May 2026 13:39:31 -0300 Subject: [PATCH 21/37] valores: len 100 --- Business/Data/Laboratorio/AuditoriaUsuario.cs | 4 ++-- Business/Data/Laboratorio/AuditoriaUsuario.hbm.xml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Business/Data/Laboratorio/AuditoriaUsuario.cs b/Business/Data/Laboratorio/AuditoriaUsuario.cs index 6db54fd9..859ea166 100644 --- a/Business/Data/Laboratorio/AuditoriaUsuario.cs +++ b/Business/Data/Laboratorio/AuditoriaUsuario.cs @@ -200,7 +200,7 @@ public string ValorNuevo get { return m_valorNuevo; } set { - if (value != null && value.Length > 50) + if (value != null && value.Length > 100) throw new ArgumentOutOfRangeException("Invalid value for Valor Nuevo", value, value.ToString()); m_isChanged |= (m_valorNuevo != value); m_valorNuevo = value; @@ -212,7 +212,7 @@ public string ValorAnterior get { return m_valorAnterior; } set { - if (value != null && value.Length > 50) + if (value != null && value.Length > 100) throw new ArgumentOutOfRangeException("Invalid value for Valor Anterior", value, value.ToString()); m_isChanged |= (m_valorAnterior != value); m_valorAnterior = value; diff --git a/Business/Data/Laboratorio/AuditoriaUsuario.hbm.xml b/Business/Data/Laboratorio/AuditoriaUsuario.hbm.xml index 86bb5b49..d11dc84e 100644 --- a/Business/Data/Laboratorio/AuditoriaUsuario.hbm.xml +++ b/Business/Data/Laboratorio/AuditoriaUsuario.hbm.xml @@ -12,7 +12,7 @@ - - + + From 5ac241da98887d654291b4b2e8c129331aea726e Mon Sep 17 00:00:00 2001 From: Vanesa Rimada <80859025+vrimada@users.noreply.github.com> Date: Wed, 6 May 2026 13:41:48 -0300 Subject: [PATCH 22/37] len 500 --- Business/Data/Laboratorio/AuditoriaUsuario.cs | 4 ++-- Business/Data/Laboratorio/AuditoriaUsuario.hbm.xml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Business/Data/Laboratorio/AuditoriaUsuario.cs b/Business/Data/Laboratorio/AuditoriaUsuario.cs index 859ea166..e72e6451 100644 --- a/Business/Data/Laboratorio/AuditoriaUsuario.cs +++ b/Business/Data/Laboratorio/AuditoriaUsuario.cs @@ -200,7 +200,7 @@ public string ValorNuevo get { return m_valorNuevo; } set { - if (value != null && value.Length > 100) + if (value != null && value.Length > 500) throw new ArgumentOutOfRangeException("Invalid value for Valor Nuevo", value, value.ToString()); m_isChanged |= (m_valorNuevo != value); m_valorNuevo = value; @@ -212,7 +212,7 @@ public string ValorAnterior get { return m_valorAnterior; } set { - if (value != null && value.Length > 100) + if (value != null && value.Length > 500) throw new ArgumentOutOfRangeException("Invalid value for Valor Anterior", value, value.ToString()); m_isChanged |= (m_valorAnterior != value); m_valorAnterior = value; diff --git a/Business/Data/Laboratorio/AuditoriaUsuario.hbm.xml b/Business/Data/Laboratorio/AuditoriaUsuario.hbm.xml index d11dc84e..4e1e1b0c 100644 --- a/Business/Data/Laboratorio/AuditoriaUsuario.hbm.xml +++ b/Business/Data/Laboratorio/AuditoriaUsuario.hbm.xml @@ -12,7 +12,7 @@ - - + + From ec6aee1fb5f88b34672362bd527bc0b983e05dd5 Mon Sep 17 00:00:00 2001 From: Vanesa Rimada <80859025+vrimada@users.noreply.github.com> Date: Wed, 6 May 2026 15:50:44 -0300 Subject: [PATCH 23/37] req8 y correcion reporte --- WebLab/Informes/AuditoriaUser.cs | 38 +++------------------------- WebLab/Informes/AuditoriaUser.rpt | Bin 16384 -> 16384 bytes WebLab/Usuarios/UsuarioEdit.aspx.cs | 13 ++++++---- 3 files changed, 11 insertions(+), 40 deletions(-) diff --git a/WebLab/Informes/AuditoriaUser.cs b/WebLab/Informes/AuditoriaUser.cs index 6c76b2f6..28b00c9e 100644 --- a/WebLab/Informes/AuditoriaUser.cs +++ b/WebLab/Informes/AuditoriaUser.cs @@ -64,43 +64,11 @@ public CrystalDecisions.CrystalReports.Engine.Section Section2 { } } - [Browsable(false)] - [DesignerSerializationVisibilityAttribute(System.ComponentModel.DesignerSerializationVisibility.Hidden)] - public CrystalDecisions.CrystalReports.Engine.Section GroupHeaderSection1 { - get { - return this.ReportDefinition.Sections[2]; - } - } - - [Browsable(false)] - [DesignerSerializationVisibilityAttribute(System.ComponentModel.DesignerSerializationVisibility.Hidden)] - public CrystalDecisions.CrystalReports.Engine.Section GroupHeaderSection2 { - get { - return this.ReportDefinition.Sections[3]; - } - } - [Browsable(false)] [DesignerSerializationVisibilityAttribute(System.ComponentModel.DesignerSerializationVisibility.Hidden)] public CrystalDecisions.CrystalReports.Engine.Section Section3 { get { - return this.ReportDefinition.Sections[4]; - } - } - - [Browsable(false)] - [DesignerSerializationVisibilityAttribute(System.ComponentModel.DesignerSerializationVisibility.Hidden)] - public CrystalDecisions.CrystalReports.Engine.Section GroupFooterSection2 { - get { - return this.ReportDefinition.Sections[5]; - } - } - - [Browsable(false)] - [DesignerSerializationVisibilityAttribute(System.ComponentModel.DesignerSerializationVisibility.Hidden)] - public CrystalDecisions.CrystalReports.Engine.Section GroupFooterSection1 { - get { - return this.ReportDefinition.Sections[6]; + return this.ReportDefinition.Sections[2]; } } @@ -108,7 +76,7 @@ public CrystalDecisions.CrystalReports.Engine.Section GroupFooterSection1 { [DesignerSerializationVisibilityAttribute(System.ComponentModel.DesignerSerializationVisibility.Hidden)] public CrystalDecisions.CrystalReports.Engine.Section Section4 { get { - return this.ReportDefinition.Sections[7]; + return this.ReportDefinition.Sections[3]; } } @@ -116,7 +84,7 @@ public CrystalDecisions.CrystalReports.Engine.Section Section4 { [DesignerSerializationVisibilityAttribute(System.ComponentModel.DesignerSerializationVisibility.Hidden)] public CrystalDecisions.CrystalReports.Engine.Section Section5 { get { - return this.ReportDefinition.Sections[8]; + return this.ReportDefinition.Sections[4]; } } diff --git a/WebLab/Informes/AuditoriaUser.rpt b/WebLab/Informes/AuditoriaUser.rpt index 1dd0a55c09ad643cd6fde0f0a8f3fdf4002f4fb7..1e957ad7ba2a6f8844b5fd5ee73d58567316c6b1 100644 GIT binary patch delta 6788 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 mfjZg&k~B038vp<~ delta 7420 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 diff --git a/WebLab/Usuarios/UsuarioEdit.aspx.cs b/WebLab/Usuarios/UsuarioEdit.aspx.cs index 1bbc5013..65a74195 100644 --- a/WebLab/Usuarios/UsuarioEdit.aspx.cs +++ b/WebLab/Usuarios/UsuarioEdit.aspx.cs @@ -363,19 +363,21 @@ private DataTable GetDataSetAuditoria() //Agregamos la auditoria de aceptacion de terminos y condiciones - m_strSQL = @" SELECT P.username + ' - '+ P.apellido + ' ' + P.nombre as numero , - P.apellido as username, A.fecha AS fecha, A.hora, A.accion, + m_strSQL = @" SELECT U.username + ' - '+ U.apellido + ' ' + U.nombre as numero , + P.apellido as username,A.fecha AS fecha, A.hora, A.accion, '' as analisis, isnull(valorNuevo,'') as valor, isnull(valorAnterior,'') as valorAnterior FROM LAB_Auditoriausuario AS A (nolock) inner join sys_usuario P (nolock) on P.idusuario= A.idusuarioregistro + inner join Sys_Usuario U (nolock) on U.idusuario= A.idUsuario where A.idusuario= " + Request["id"].ToString() + @" union - SELECT P.username + ' - '+ P.apellido + ' ' + P.nombre as numero , + SELECT U.username + ' - '+ U.apellido + ' ' + U.nombre as numero, P.apellido as username, L.fecha AS fecha, Format(L.fecha, 'hh:mm:ss') as hora, 'Acepto Terminos y Condiciones', '' as analisis, '' as valor, '' as valorAnterior FROM LAB_LogAccesoTerminosCondiciones AS L (nolock) inner join sys_usuario P (nolock) on P.idusuario= L.idUsuario - where P.idusuario=" + Request["id"].ToString() + " ORDER BY fecha"; + inner join Sys_Usuario U (nolock) on U.idusuario= P.idUsuario + where P.idusuario=" + Request["id"].ToString() + " ORDER BY fecha desc"; DataSet Ds1 = new DataSet(); adapter.SelectCommand = new SqlCommand(m_strSQL, conn); @@ -517,12 +519,13 @@ private void habilitarPorAutenticacion() //Por defecto la contraseña es el username txtPassword.Enabled = false; rfvPassword.Enabled = false; + btnBlanquear.Visible = false; } else { chkRequiereContrasenia.Enabled = true; chkExterno.Enabled = true; - + btnBlanquear.Visible = true; //Se puede poner una contraseña if (Request["id"] == null){ txtPassword.Enabled = true; rfvPassword.Enabled = true; } else From 6785d8b8e2d721ea0d7394ac7cc6694bc7bee851 Mon Sep 17 00:00:00 2001 From: Vanesa Rimada <80859025+vrimada@users.noreply.github.com> Date: Thu, 7 May 2026 10:43:56 -0300 Subject: [PATCH 24/37] fix: sacar "analisis" de la query porque no se usa para el reporte. eliminar auditoria de consulta si se modifica. --- Business/Data/Usuario.cs | 19 ++++- WebLab/Usuarios/UsuarioEdit.aspx.cs | 106 ++++++++++++++++------------ 2 files changed, 79 insertions(+), 46 deletions(-) diff --git a/Business/Data/Usuario.cs b/Business/Data/Usuario.cs index 0f3ef633..c917f0bb 100644 --- a/Business/Data/Usuario.cs +++ b/Business/Data/Usuario.cs @@ -4,6 +4,7 @@ insert license info here using Business.Data.Laboratorio; using System; using System.Collections; +using System.Data.SqlClient; namespace Business.Data { @@ -227,7 +228,7 @@ public string Nombre } - public void GrabaAuditoria(string accion, int iduser, string username, string valorAnterior="", string valorNuevo="") + public int GrabaAuditoria(string accion, int iduser, string username, string valorAnterior="", string valorNuevo="") { AuditoriaUsuario oRegistro = new AuditoriaUsuario(); oRegistro.IdUsuario = iduser; // usuario afectado que esta modificando, consultando , etc. @@ -240,7 +241,7 @@ public void GrabaAuditoria(string accion, int iduser, string username, string va oRegistro.ValorAnterior = valorAnterior; oRegistro.ValorNuevo = valorNuevo; oRegistro.Save(); - + return oRegistro.IdAuditoriaUsuario; } @@ -477,5 +478,19 @@ public DateTime FechaAceptaTerminosCondiciones { } } + + public void EliminarAuditoria(int idAuditoriaConsulta, SqlConnection conn) + { + //AuditoriaUsuario oRegistro = new AuditoriaUsuario(); + //oRegistro = (AuditoriaUsuario) oRegistro.Get(typeof(AuditoriaUsuario), "IdAuditoriaUsuario", idAuditoriaConsulta); + //oRegistro.Delete(); + + SqlCommand cmd = new SqlCommand( + "DELETE FROM LAB_AuditoriaUsuario WHERE IdAuditoriaUsuario = @id", + conn); + + cmd.Parameters.AddWithValue("@id", idAuditoriaConsulta); + cmd.ExecuteNonQuery(); + } } } diff --git a/WebLab/Usuarios/UsuarioEdit.aspx.cs b/WebLab/Usuarios/UsuarioEdit.aspx.cs index 65a74195..60432f92 100644 --- a/WebLab/Usuarios/UsuarioEdit.aspx.cs +++ b/WebLab/Usuarios/UsuarioEdit.aspx.cs @@ -134,7 +134,7 @@ private void MostrarDatos() habilitarAdministrador(); Usuario oAuditor = new Usuario(); oAuditor = (Usuario)oAuditor.Get(typeof(Usuario), int.Parse(Session["idUsuario"].ToString())); - oAuditor.GrabaAuditoria("Consulta", oRegistro.IdUsuario, oRegistro.Username); + ViewState["idAuditoriaConsulta"] = oAuditor.GrabaAuditoria("Consulta", oRegistro.IdUsuario, oRegistro.Username); MostrarEfectores(); ddlTipoAutenticacion.SelectedValue = oRegistro.TipoAutenticacion.Trim(); @@ -364,17 +364,17 @@ private DataTable GetDataSetAuditoria() //Agregamos la auditoria de aceptacion de terminos y condiciones m_strSQL = @" SELECT U.username + ' - '+ U.apellido + ' ' + U.nombre as numero , - P.apellido as username,A.fecha AS fecha, A.hora, A.accion, - '' as analisis, isnull(valorNuevo,'') as valor, isnull(valorAnterior,'') as valorAnterior - FROM LAB_Auditoriausuario AS A (nolock) + P.nombre + ' ' + P.apellido as username,A.fecha AS fecha, A.accion, + isnull(valorNuevo,'') as valor, isnull(valorAnterior,'') as valorAnterior + FROM LAB_Auditoriausuario AS A (nolock) inner join sys_usuario P (nolock) on P.idusuario= A.idusuarioregistro inner join Sys_Usuario U (nolock) on U.idusuario= A.idUsuario where A.idusuario= " + Request["id"].ToString() + @" union SELECT U.username + ' - '+ U.apellido + ' ' + U.nombre as numero, - P.apellido as username, L.fecha AS fecha, - Format(L.fecha, 'hh:mm:ss') as hora, 'Acepto Terminos y Condiciones', '' as analisis, '' as valor, '' as valorAnterior - FROM LAB_LogAccesoTerminosCondiciones AS L (nolock) + P.nombre + ' ' + P.apellido as username, L.fecha AS fecha, + 'Acepto Terminos y Condiciones', '' as valor, '' as valorAnterior + FROM LAB_LogAccesoTerminosCondiciones AS L (nolock) inner join sys_usuario P (nolock) on P.idusuario= L.idUsuario inner join Sys_Usuario U (nolock) on U.idusuario= P.idUsuario where P.idusuario=" + Request["id"].ToString() + " ORDER BY fecha desc"; @@ -564,50 +564,58 @@ protected void customValidatorEfector_ServerValidate(object source, ServerValida private void guardarAuditoria(Usuario oRegistro) { + bool huboCambios = false; + Usuario oAuditor = new Usuario(); oAuditor = (Usuario)oAuditor.Get(typeof(Usuario), int.Parse(Session["idUsuario"].ToString())); - string accion = "Crea"; - - if (Request["id"] != null) - { - accion = "Modifica"; - if ((oRegistro.Activo == true) && (chkActivo.Checked == false)) - accion = "Inhabilita"; - if ((oRegistro.Activo == false) && (chkActivo.Checked == true)) - accion = "Habilita"; - } + + + //ahora se genera una auditoria por cada modificacion + //if (Request["id"] != null) + //{ + // //accion = "Modifica"; ahora se genera una auditoria por cada modificacion + // if ((oRegistro.Activo == true) && (chkActivo.Checked == false)) + // accion = "Inhabilita"; //lo hace Modifica Activo + // if ((oRegistro.Activo == false) && (chkActivo.Checked == true)) + // accion = "Habilita"; //lo hace Modifica Activo + //} //Auditoria accion - oAuditor.GrabaAuditoria(accion, oRegistro.IdUsuario, oRegistro.Username); + //Auditor.GrabaAuditoria(accion, oRegistro.IdUsuario, oRegistro.Username); - //Auditoria cambio de valores del usuario - if (Request["id"] != null) + if (Request["id"] == null) + { + oAuditor.GrabaAuditoria("Crea", oRegistro.IdUsuario, oRegistro.Username); + huboCambios = true; + } + else //Auditoria cambio de valores del usuario { - + if (oRegistro.Nombre != txtNombre.Text) - oAuditor.GrabaAuditoria("Modifica Nombre", oRegistro.IdUsuario, oRegistro.Username, oRegistro.Nombre, txtNombre.Text); - + { oAuditor.GrabaAuditoria("Modifica Nombre", oRegistro.IdUsuario, oRegistro.Username, oRegistro.Nombre, txtNombre.Text); huboCambios = true; } + if (oRegistro.Apellido != txtApellido.Text) - oAuditor.GrabaAuditoria("Modifica Apellido", oRegistro.IdUsuario, oRegistro.Username, oRegistro.Apellido, txtApellido.Text); - + { oAuditor.GrabaAuditoria("Modifica Apellido", oRegistro.IdUsuario, oRegistro.Username, oRegistro.Apellido, txtApellido.Text); huboCambios = true; } + + if (oRegistro.FirmaValidacion != txtFirmaValidacion.Text) - oAuditor.GrabaAuditoria("Modifica Firma Validacion", oRegistro.IdUsuario, oRegistro.Username, oRegistro.FirmaValidacion, txtFirmaValidacion.Text); - + { oAuditor.GrabaAuditoria("Modifica Firma Validacion", oRegistro.IdUsuario, oRegistro.Username, oRegistro.FirmaValidacion, txtFirmaValidacion.Text); huboCambios = true; } + if (oRegistro.Email != email.Value.ToString()) - oAuditor.GrabaAuditoria("Modifica Email", oRegistro.IdUsuario , oRegistro.Username, oRegistro.Email, email.Value); - + { oAuditor.GrabaAuditoria("Modifica Email", oRegistro.IdUsuario, oRegistro.Username, oRegistro.Email, email.Value); huboCambios = true; } + if (oRegistro.Telefono != txtTelefono.Text) - oAuditor.GrabaAuditoria("Modifica Telefono", oRegistro.IdUsuario, oRegistro.Username, oRegistro.Telefono, txtTelefono.Text); - + { oAuditor.GrabaAuditoria("Modifica Telefono", oRegistro.IdUsuario, oRegistro.Username, oRegistro.Telefono, txtTelefono.Text); huboCambios = true; } + if (oRegistro.TipoAutenticacion.Trim() != ddlTipoAutenticacion.SelectedValue) - oAuditor.GrabaAuditoria("Modifica Tipo Autenticacion", oRegistro.IdUsuario, oRegistro.Username, oRegistro.TipoAutenticacion, ddlTipoAutenticacion.SelectedValue); - + { oAuditor.GrabaAuditoria("Modifica Tipo Autenticacion", oRegistro.IdUsuario, oRegistro.Username, oRegistro.TipoAutenticacion, ddlTipoAutenticacion.SelectedValue); huboCambios = true; } + if (oRegistro.Username != txtUsername.Text) - oAuditor.GrabaAuditoria("Modifica Username", oRegistro.IdUsuario, oRegistro.Username, oRegistro.Username, txtUsername.Text); - + { oAuditor.GrabaAuditoria("Modifica Username", oRegistro.IdUsuario, oRegistro.Username, oRegistro.Username, txtUsername.Text); huboCambios = true; } + if (oRegistro.Administrador != chkAdministrador.Checked) - oAuditor.GrabaAuditoria("Modifica Administrador", oRegistro.IdUsuario, oRegistro.Username, oRegistro.Administrador ? "Si" : "No", chkAdministrador.Checked ? "Si" : "No"); - + { oAuditor.GrabaAuditoria("Modifica Administrador", oRegistro.IdUsuario, oRegistro.Username, oRegistro.Administrador ? "Si" : "No", chkAdministrador.Checked ? "Si" : "No"); huboCambios = true; } + if (oRegistro.IdArea.ToString() != ddlArea.SelectedValue) { string nombreArea = ""; @@ -620,24 +628,34 @@ private void guardarAuditoria(Usuario oRegistro) else nombreArea = "Todas"; oAuditor.GrabaAuditoria("Modifica Area", oRegistro.IdUsuario, oRegistro.Username, nombreArea, ddlArea.SelectedItem.Text); + huboCambios = true; + } if (oRegistro.IdPerfil.IdPerfil.ToString() != ddlPerfil.SelectedValue) - oAuditor.GrabaAuditoria("Modifica Perfil", oRegistro.IdUsuario, oRegistro.Username, oRegistro.IdPerfil.Nombre, ddlPerfil.SelectedItem.Text); + { oAuditor.GrabaAuditoria("Modifica Perfil", oRegistro.IdUsuario, oRegistro.Username, oRegistro.IdPerfil.Nombre, ddlPerfil.SelectedItem.Text); huboCambios = true; } if (ddlEfectorDestino.SelectedValue != "" && oRegistro.IdEfectorDestino.IdEfector.ToString() != ddlEfectorDestino.SelectedValue) - oAuditor.GrabaAuditoria("Modifica Laboratorio Destino", oRegistro.IdUsuario, oRegistro.Username, oRegistro.IdEfectorDestino.Nombre, ddlEfectorDestino.SelectedItem.Text); + { oAuditor.GrabaAuditoria("Modifica Laboratorio Destino", oRegistro.IdUsuario, oRegistro.Username, oRegistro.IdEfectorDestino.Nombre, ddlEfectorDestino.SelectedItem.Text); huboCambios = true; } if (oRegistro.Activo != chkActivo.Checked) - oAuditor.GrabaAuditoria("Modifica Activo", oRegistro.IdUsuario, oRegistro.Username, oRegistro.Activo ? "Si":"No", chkActivo.Checked ? "Si":"No"); - + { oAuditor.GrabaAuditoria("Modifica Activo", oRegistro.IdUsuario, oRegistro.Username, oRegistro.Activo ? "Si" : "No", chkActivo.Checked ? "Si" : "No"); huboCambios = true; } + if (oRegistro.Externo != chkExterno.Checked) - oAuditor.GrabaAuditoria("Modifica Externo", oRegistro.IdUsuario, oRegistro.Username, oRegistro.Externo ? "Si":"No", chkExterno.Checked ? "Si":"No"); + { oAuditor.GrabaAuditoria("Modifica Externo", oRegistro.IdUsuario, oRegistro.Username, oRegistro.Externo ? "Si" : "No", chkExterno.Checked ? "Si" : "No"); huboCambios = true; } + + if (oRegistro.RequiereCambioPass != chkRequiereContrasenia.Checked) + { oAuditor.GrabaAuditoria("Modifica Requiere Contraseña", oRegistro.IdUsuario, oRegistro.Username, oRegistro.RequiereCambioPass ? "Si" : "No", chkRequiereContrasenia.Checked ? "Si" : "No"); huboCambios = true; } - if (oRegistro.RequiereCambioPass != chkRequiereContrasenia.Checked) - oAuditor.GrabaAuditoria("Modifica Requiere Contraseña", oRegistro.IdUsuario, oRegistro.Username, oRegistro.RequiereCambioPass ? "Si":"No", chkRequiereContrasenia.Checked ? "Si":"No"); + if (huboCambios) + { + //si hubo cambios: eliminar auditoria de consulta + SqlConnection conn = (SqlConnection)NHibernateHttpModule.CurrentSession.Connection; + int idAuditoriaConsulta = (int)ViewState["idAuditoriaConsulta"]; + oAuditor.EliminarAuditoria(idAuditoriaConsulta,conn); } + } } #endregion From f278e709c7de7baac5432c807bfb817a3bb885a9 Mon Sep 17 00:00:00 2001 From: Vanesa Rimada <80859025+vrimada@users.noreply.github.com> Date: Thu, 7 May 2026 11:24:26 -0300 Subject: [PATCH 25/37] revertiendo la eliminacion de auditoria de consulta --- Business/Data/Usuario.cs | 13 ---------- WebLab/Usuarios/UsuarioEdit.aspx.cs | 39 +++++++++++------------------ 2 files changed, 14 insertions(+), 38 deletions(-) diff --git a/Business/Data/Usuario.cs b/Business/Data/Usuario.cs index c917f0bb..daf5df40 100644 --- a/Business/Data/Usuario.cs +++ b/Business/Data/Usuario.cs @@ -479,18 +479,5 @@ public DateTime FechaAceptaTerminosCondiciones { } - public void EliminarAuditoria(int idAuditoriaConsulta, SqlConnection conn) - { - //AuditoriaUsuario oRegistro = new AuditoriaUsuario(); - //oRegistro = (AuditoriaUsuario) oRegistro.Get(typeof(AuditoriaUsuario), "IdAuditoriaUsuario", idAuditoriaConsulta); - //oRegistro.Delete(); - - SqlCommand cmd = new SqlCommand( - "DELETE FROM LAB_AuditoriaUsuario WHERE IdAuditoriaUsuario = @id", - conn); - - cmd.Parameters.AddWithValue("@id", idAuditoriaConsulta); - cmd.ExecuteNonQuery(); - } } } diff --git a/WebLab/Usuarios/UsuarioEdit.aspx.cs b/WebLab/Usuarios/UsuarioEdit.aspx.cs index 60432f92..28a902c3 100644 --- a/WebLab/Usuarios/UsuarioEdit.aspx.cs +++ b/WebLab/Usuarios/UsuarioEdit.aspx.cs @@ -564,8 +564,6 @@ protected void customValidatorEfector_ServerValidate(object source, ServerValida private void guardarAuditoria(Usuario oRegistro) { - bool huboCambios = false; - Usuario oAuditor = new Usuario(); oAuditor = (Usuario)oAuditor.Get(typeof(Usuario), int.Parse(Session["idUsuario"].ToString())); @@ -586,35 +584,34 @@ private void guardarAuditoria(Usuario oRegistro) if (Request["id"] == null) { oAuditor.GrabaAuditoria("Crea", oRegistro.IdUsuario, oRegistro.Username); - huboCambios = true; } else //Auditoria cambio de valores del usuario { if (oRegistro.Nombre != txtNombre.Text) - { oAuditor.GrabaAuditoria("Modifica Nombre", oRegistro.IdUsuario, oRegistro.Username, oRegistro.Nombre, txtNombre.Text); huboCambios = true; } + { oAuditor.GrabaAuditoria("Modifica Nombre", oRegistro.IdUsuario, oRegistro.Username, oRegistro.Nombre, txtNombre.Text); } if (oRegistro.Apellido != txtApellido.Text) - { oAuditor.GrabaAuditoria("Modifica Apellido", oRegistro.IdUsuario, oRegistro.Username, oRegistro.Apellido, txtApellido.Text); huboCambios = true; } + { oAuditor.GrabaAuditoria("Modifica Apellido", oRegistro.IdUsuario, oRegistro.Username, oRegistro.Apellido, txtApellido.Text); } if (oRegistro.FirmaValidacion != txtFirmaValidacion.Text) - { oAuditor.GrabaAuditoria("Modifica Firma Validacion", oRegistro.IdUsuario, oRegistro.Username, oRegistro.FirmaValidacion, txtFirmaValidacion.Text); huboCambios = true; } + { oAuditor.GrabaAuditoria("Modifica Firma Validacion", oRegistro.IdUsuario, oRegistro.Username, oRegistro.FirmaValidacion, txtFirmaValidacion.Text); } if (oRegistro.Email != email.Value.ToString()) - { oAuditor.GrabaAuditoria("Modifica Email", oRegistro.IdUsuario, oRegistro.Username, oRegistro.Email, email.Value); huboCambios = true; } + { oAuditor.GrabaAuditoria("Modifica Email", oRegistro.IdUsuario, oRegistro.Username, oRegistro.Email, email.Value); } if (oRegistro.Telefono != txtTelefono.Text) - { oAuditor.GrabaAuditoria("Modifica Telefono", oRegistro.IdUsuario, oRegistro.Username, oRegistro.Telefono, txtTelefono.Text); huboCambios = true; } + { oAuditor.GrabaAuditoria("Modifica Telefono", oRegistro.IdUsuario, oRegistro.Username, oRegistro.Telefono, txtTelefono.Text); } if (oRegistro.TipoAutenticacion.Trim() != ddlTipoAutenticacion.SelectedValue) - { oAuditor.GrabaAuditoria("Modifica Tipo Autenticacion", oRegistro.IdUsuario, oRegistro.Username, oRegistro.TipoAutenticacion, ddlTipoAutenticacion.SelectedValue); huboCambios = true; } + { oAuditor.GrabaAuditoria("Modifica Tipo Autenticacion", oRegistro.IdUsuario, oRegistro.Username, oRegistro.TipoAutenticacion, ddlTipoAutenticacion.SelectedValue); } if (oRegistro.Username != txtUsername.Text) - { oAuditor.GrabaAuditoria("Modifica Username", oRegistro.IdUsuario, oRegistro.Username, oRegistro.Username, txtUsername.Text); huboCambios = true; } + { oAuditor.GrabaAuditoria("Modifica Username", oRegistro.IdUsuario, oRegistro.Username, oRegistro.Username, txtUsername.Text); } if (oRegistro.Administrador != chkAdministrador.Checked) - { oAuditor.GrabaAuditoria("Modifica Administrador", oRegistro.IdUsuario, oRegistro.Username, oRegistro.Administrador ? "Si" : "No", chkAdministrador.Checked ? "Si" : "No"); huboCambios = true; } + { oAuditor.GrabaAuditoria("Modifica Administrador", oRegistro.IdUsuario, oRegistro.Username, oRegistro.Administrador ? "Si" : "No", chkAdministrador.Checked ? "Si" : "No"); } if (oRegistro.IdArea.ToString() != ddlArea.SelectedValue) { @@ -628,33 +625,25 @@ private void guardarAuditoria(Usuario oRegistro) else nombreArea = "Todas"; oAuditor.GrabaAuditoria("Modifica Area", oRegistro.IdUsuario, oRegistro.Username, nombreArea, ddlArea.SelectedItem.Text); - huboCambios = true; + } if (oRegistro.IdPerfil.IdPerfil.ToString() != ddlPerfil.SelectedValue) - { oAuditor.GrabaAuditoria("Modifica Perfil", oRegistro.IdUsuario, oRegistro.Username, oRegistro.IdPerfil.Nombre, ddlPerfil.SelectedItem.Text); huboCambios = true; } + { oAuditor.GrabaAuditoria("Modifica Perfil", oRegistro.IdUsuario, oRegistro.Username, oRegistro.IdPerfil.Nombre, ddlPerfil.SelectedItem.Text); } if (ddlEfectorDestino.SelectedValue != "" && oRegistro.IdEfectorDestino.IdEfector.ToString() != ddlEfectorDestino.SelectedValue) - { oAuditor.GrabaAuditoria("Modifica Laboratorio Destino", oRegistro.IdUsuario, oRegistro.Username, oRegistro.IdEfectorDestino.Nombre, ddlEfectorDestino.SelectedItem.Text); huboCambios = true; } + { oAuditor.GrabaAuditoria("Modifica Laboratorio Destino", oRegistro.IdUsuario, oRegistro.Username, oRegistro.IdEfectorDestino.Nombre, ddlEfectorDestino.SelectedItem.Text); } if (oRegistro.Activo != chkActivo.Checked) - { oAuditor.GrabaAuditoria("Modifica Activo", oRegistro.IdUsuario, oRegistro.Username, oRegistro.Activo ? "Si" : "No", chkActivo.Checked ? "Si" : "No"); huboCambios = true; } + { oAuditor.GrabaAuditoria("Modifica Activo", oRegistro.IdUsuario, oRegistro.Username, oRegistro.Activo ? "Si" : "No", chkActivo.Checked ? "Si" : "No"); } if (oRegistro.Externo != chkExterno.Checked) - { oAuditor.GrabaAuditoria("Modifica Externo", oRegistro.IdUsuario, oRegistro.Username, oRegistro.Externo ? "Si" : "No", chkExterno.Checked ? "Si" : "No"); huboCambios = true; } + { oAuditor.GrabaAuditoria("Modifica Externo", oRegistro.IdUsuario, oRegistro.Username, oRegistro.Externo ? "Si" : "No", chkExterno.Checked ? "Si" : "No"); } if (oRegistro.RequiereCambioPass != chkRequiereContrasenia.Checked) - { oAuditor.GrabaAuditoria("Modifica Requiere Contraseña", oRegistro.IdUsuario, oRegistro.Username, oRegistro.RequiereCambioPass ? "Si" : "No", chkRequiereContrasenia.Checked ? "Si" : "No"); huboCambios = true; } + { oAuditor.GrabaAuditoria("Modifica Requiere Contraseña", oRegistro.IdUsuario, oRegistro.Username, oRegistro.RequiereCambioPass ? "Si" : "No", chkRequiereContrasenia.Checked ? "Si" : "No"); } - if (huboCambios) - { - //si hubo cambios: eliminar auditoria de consulta - SqlConnection conn = (SqlConnection)NHibernateHttpModule.CurrentSession.Connection; - int idAuditoriaConsulta = (int)ViewState["idAuditoriaConsulta"]; - - oAuditor.EliminarAuditoria(idAuditoriaConsulta,conn); - } } } #endregion From 60f071b9a76e632dbe08af40007597e2c238a908 Mon Sep 17 00:00:00 2001 From: Vanesa Rimada <80859025+vrimada@users.noreply.github.com> Date: Thu, 7 May 2026 11:26:25 -0300 Subject: [PATCH 26/37] unload --- WebLab/Usuarios/UsuarioEdit.aspx.cs | 22 ++++++++-------------- 1 file changed, 8 insertions(+), 14 deletions(-) diff --git a/WebLab/Usuarios/UsuarioEdit.aspx.cs b/WebLab/Usuarios/UsuarioEdit.aspx.cs index 28a902c3..3f09ffc4 100644 --- a/WebLab/Usuarios/UsuarioEdit.aspx.cs +++ b/WebLab/Usuarios/UsuarioEdit.aspx.cs @@ -64,6 +64,14 @@ protected void Page_Load(object sender, EventArgs e) } + protected void Page_Unload(object sender, EventArgs e) + { + if (this.oCr.ReportDocument != null) + { + this.oCr.ReportDocument.Close(); + this.oCr.ReportDocument.Dispose(); + } + } private void VerificaPermisos(string sObjeto) { @@ -567,20 +575,6 @@ private void guardarAuditoria(Usuario oRegistro) Usuario oAuditor = new Usuario(); oAuditor = (Usuario)oAuditor.Get(typeof(Usuario), int.Parse(Session["idUsuario"].ToString())); - - - //ahora se genera una auditoria por cada modificacion - //if (Request["id"] != null) - //{ - // //accion = "Modifica"; ahora se genera una auditoria por cada modificacion - // if ((oRegistro.Activo == true) && (chkActivo.Checked == false)) - // accion = "Inhabilita"; //lo hace Modifica Activo - // if ((oRegistro.Activo == false) && (chkActivo.Checked == true)) - // accion = "Habilita"; //lo hace Modifica Activo - //} - //Auditoria accion - //Auditor.GrabaAuditoria(accion, oRegistro.IdUsuario, oRegistro.Username); - if (Request["id"] == null) { oAuditor.GrabaAuditoria("Crea", oRegistro.IdUsuario, oRegistro.Username); From 854cddd7e771b431c0a78bee1f5c6370e1863cc5 Mon Sep 17 00:00:00 2001 From: Vanesa Rimada <80859025+vrimada@users.noreply.github.com> Date: Tue, 12 May 2026 11:59:58 -0300 Subject: [PATCH 27/37] fix turnos (#92) --- WebLab/Turnos/TurnoList.aspx.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/WebLab/Turnos/TurnoList.aspx.cs b/WebLab/Turnos/TurnoList.aspx.cs index 21786305..1461ef87 100644 --- a/WebLab/Turnos/TurnoList.aspx.cs +++ b/WebLab/Turnos/TurnoList.aspx.cs @@ -278,7 +278,7 @@ FROM LAB_Turno WITH (NOLOCK) " AND A.FechaHasta>='" + fecha.ToString("yyyyMMdd") + "'" + m_ssqlItem + m_ssqlDia; if (oUser.IdPerfil.IdPerfil == 15) - m_ssql += " and IdEfectorSolicitante = " + oUser.IdEfector.IdEfector.ToString(); + m_ssql += " and A.IdEfectorSolicitante = " + oUser.IdEfector.IdEfector.ToString(); else //Traigo el labo y sus relacionados m_ssql += " and A.IdEfector = " + oCon.IdEfector.IdEfector.ToString(); From 5509a2cdd1bcdf659dbe9da5e58d0b073669a9eb Mon Sep 17 00:00:00 2001 From: caroPintos <77695282+caroPintos@users.noreply.github.com> Date: Tue, 12 May 2026 12:57:33 -0300 Subject: [PATCH 28/37] Mantenimiento_Mayo2 (#93) --- Business/Data/Laboratorio/AuditoriaUsuario.cs | 30 +- .../Data/Laboratorio/AuditoriaUsuario.hbm.xml | 3 +- Business/Data/Usuario.cs | 9 +- WebLab/Estadisticas/Reporte.aspx.cs | 2 +- .../ReportePorResultadoNum.aspx.cs | 93 +- WebLab/Informes/AuditoriaUser.cs | 177 ++ WebLab/Informes/AuditoriaUser.rpt | Bin 0 -> 16384 bytes WebLab/Pacientes/PacienteEdit2.aspx.cs | 8 +- WebLab/Protocolos/ProtocoloEdit2.aspx | 8 +- WebLab/Protocolos/ProtocoloEdit2.aspx.cs | 1 + .../ResultadoNoPacienteView.aspx.cs | 594 +--- WebLab/Site1.Master | 2 +- WebLab/SiteTurnos.Master | 2 +- WebLab/Turnos/TurnosEdit2.aspx.cs | 16 +- WebLab/Usuarios/PasswordEdit2.aspx.cs | 2 +- WebLab/Usuarios/UsuarioEdit.aspx | 2 +- WebLab/Usuarios/UsuarioEdit.aspx.cs | 200 +- WebLab/Usuarios/UsuarioEdit.aspx.designer.cs | 9 + WebLab/Usuarios/UsuarioList.aspx.cs | 33 +- WebLab/controldecambios.html | 2662 +++++++++-------- WebLab/loginSIL.ascx.cs | 11 +- 21 files changed, 2047 insertions(+), 1817 deletions(-) create mode 100644 WebLab/Informes/AuditoriaUser.cs create mode 100644 WebLab/Informes/AuditoriaUser.rpt diff --git a/Business/Data/Laboratorio/AuditoriaUsuario.cs b/Business/Data/Laboratorio/AuditoriaUsuario.cs index 9ee61111..e72e6451 100644 --- a/Business/Data/Laboratorio/AuditoriaUsuario.cs +++ b/Business/Data/Laboratorio/AuditoriaUsuario.cs @@ -24,7 +24,9 @@ public sealed class AuditoriaUsuario : Business.BaseDataAccess private string m_accion; private string m_username; - private int m_idusuarioregistro; + private int m_idusuarioregistro; + private string m_valorNuevo; + private string m_valorAnterior; #endregion #region Default ( Empty ) Class Constuctor @@ -193,7 +195,29 @@ public bool IsChanged { get { return m_isChanged; } } - - #endregion + public string ValorNuevo + { + get { return m_valorNuevo; } + set + { + if (value != null && value.Length > 500) + throw new ArgumentOutOfRangeException("Invalid value for Valor Nuevo", value, value.ToString()); + + m_isChanged |= (m_valorNuevo != value); m_valorNuevo = value; + } + } + + public string ValorAnterior + { + get { return m_valorAnterior; } + set + { + if (value != null && value.Length > 500) + throw new ArgumentOutOfRangeException("Invalid value for Valor Anterior", value, value.ToString()); + + m_isChanged |= (m_valorAnterior != value); m_valorAnterior = value; + } + } + #endregion } } diff --git a/Business/Data/Laboratorio/AuditoriaUsuario.hbm.xml b/Business/Data/Laboratorio/AuditoriaUsuario.hbm.xml index c14ac5fb..4e1e1b0c 100644 --- a/Business/Data/Laboratorio/AuditoriaUsuario.hbm.xml +++ b/Business/Data/Laboratorio/AuditoriaUsuario.hbm.xml @@ -12,6 +12,7 @@ - + + diff --git a/Business/Data/Usuario.cs b/Business/Data/Usuario.cs index 1982d0a8..daf5df40 100644 --- a/Business/Data/Usuario.cs +++ b/Business/Data/Usuario.cs @@ -4,6 +4,7 @@ insert license info here using Business.Data.Laboratorio; using System; using System.Collections; +using System.Data.SqlClient; namespace Business.Data { @@ -225,8 +226,9 @@ public string Nombre m_isChanged |= (m_nombre != value); m_nombre = value; } } + - public void GrabaAuditoria(string accion, int iduser, string username) + public int GrabaAuditoria(string accion, int iduser, string username, string valorAnterior="", string valorNuevo="") { AuditoriaUsuario oRegistro = new AuditoriaUsuario(); oRegistro.IdUsuario = iduser; // usuario afectado que esta modificando, consultando , etc. @@ -236,8 +238,10 @@ public void GrabaAuditoria(string accion, int iduser, string username) oRegistro.Hora = DateTime.Now.ToLongTimeString(); oRegistro.IdUsuarioRegistro = this.IdUsuario; //usuario que realiza la accion + oRegistro.ValorAnterior = valorAnterior; + oRegistro.ValorNuevo = valorNuevo; oRegistro.Save(); - + return oRegistro.IdAuditoriaUsuario; } @@ -474,5 +478,6 @@ public DateTime FechaAceptaTerminosCondiciones { } } + } } diff --git a/WebLab/Estadisticas/Reporte.aspx.cs b/WebLab/Estadisticas/Reporte.aspx.cs index fd7a9b2c..40b5dc3b 100644 --- a/WebLab/Estadisticas/Reporte.aspx.cs +++ b/WebLab/Estadisticas/Reporte.aspx.cs @@ -201,7 +201,7 @@ private void CalcularPromedio() int prom = 0; - if (Session["Agrupado"].ToString() == "0") columnas = 4; + if (Session["Agrupado"].ToString() == "0") columnas = 6; if (Session["Agrupado"].ToString() == "1") columnas = 2; for (int j=1; j"; diff --git a/WebLab/Informes/AuditoriaUser.cs b/WebLab/Informes/AuditoriaUser.cs new file mode 100644 index 00000000..28b00c9e --- /dev/null +++ b/WebLab/Informes/AuditoriaUser.cs @@ -0,0 +1,177 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace WebLab.Informes { + using System; + using System.ComponentModel; + using CrystalDecisions.Shared; + using CrystalDecisions.ReportSource; + using CrystalDecisions.CrystalReports.Engine; + + + public class AuditoriaUser : ReportClass { + + public AuditoriaUser() { + } + + public override string ResourceName { + get { + return "AuditoriaUser.rpt"; + } + set { + // Do nothing + } + } + + public override bool NewGenerator { + get { + return true; + } + set { + // Do nothing + } + } + + public override string FullResourceName { + get { + return "WebLab.Informes.AuditoriaUser.rpt"; + } + set { + // Do nothing + } + } + + [Browsable(false)] + [DesignerSerializationVisibilityAttribute(System.ComponentModel.DesignerSerializationVisibility.Hidden)] + public CrystalDecisions.CrystalReports.Engine.Section Section1 { + get { + return this.ReportDefinition.Sections[0]; + } + } + + [Browsable(false)] + [DesignerSerializationVisibilityAttribute(System.ComponentModel.DesignerSerializationVisibility.Hidden)] + public CrystalDecisions.CrystalReports.Engine.Section Section2 { + get { + return this.ReportDefinition.Sections[1]; + } + } + + [Browsable(false)] + [DesignerSerializationVisibilityAttribute(System.ComponentModel.DesignerSerializationVisibility.Hidden)] + public CrystalDecisions.CrystalReports.Engine.Section Section3 { + get { + return this.ReportDefinition.Sections[2]; + } + } + + [Browsable(false)] + [DesignerSerializationVisibilityAttribute(System.ComponentModel.DesignerSerializationVisibility.Hidden)] + public CrystalDecisions.CrystalReports.Engine.Section Section4 { + get { + return this.ReportDefinition.Sections[3]; + } + } + + [Browsable(false)] + [DesignerSerializationVisibilityAttribute(System.ComponentModel.DesignerSerializationVisibility.Hidden)] + public CrystalDecisions.CrystalReports.Engine.Section Section5 { + get { + return this.ReportDefinition.Sections[4]; + } + } + + [Browsable(false)] + [DesignerSerializationVisibilityAttribute(System.ComponentModel.DesignerSerializationVisibility.Hidden)] + public CrystalDecisions.Shared.IParameterField Parameter_encabezado1 { + get { + return this.DataDefinition.ParameterFields[0]; + } + } + + [Browsable(false)] + [DesignerSerializationVisibilityAttribute(System.ComponentModel.DesignerSerializationVisibility.Hidden)] + public CrystalDecisions.Shared.IParameterField Parameter_encabezado2 { + get { + return this.DataDefinition.ParameterFields[1]; + } + } + + [Browsable(false)] + [DesignerSerializationVisibilityAttribute(System.ComponentModel.DesignerSerializationVisibility.Hidden)] + public CrystalDecisions.Shared.IParameterField Parameter_encabezado3 { + get { + return this.DataDefinition.ParameterFields[2]; + } + } + } + + [System.Drawing.ToolboxBitmapAttribute(typeof(CrystalDecisions.Shared.ExportOptions), "report.bmp")] + public class CachedAuditoriaUser : Component, ICachedReport { + + public CachedAuditoriaUser() { + } + + [Browsable(false)] + [DesignerSerializationVisibilityAttribute(System.ComponentModel.DesignerSerializationVisibility.Hidden)] + public virtual bool IsCacheable { + get { + return true; + } + set { + // + } + } + + [Browsable(false)] + [DesignerSerializationVisibilityAttribute(System.ComponentModel.DesignerSerializationVisibility.Hidden)] + public virtual bool ShareDBLogonInfo { + get { + return false; + } + set { + // + } + } + + [Browsable(false)] + [DesignerSerializationVisibilityAttribute(System.ComponentModel.DesignerSerializationVisibility.Hidden)] + public virtual System.TimeSpan CacheTimeOut { + get { + return CachedReportConstants.DEFAULT_TIMEOUT; + } + set { + // + } + } + + public virtual CrystalDecisions.CrystalReports.Engine.ReportDocument CreateReport() { + AuditoriaUser rpt = new AuditoriaUser(); + rpt.Site = this.Site; + return rpt; + } + + public virtual string GetCustomizedCacheKey(RequestContext request) { + String key = null; + // // The following is the code used to generate the default + // // cache key for caching report jobs in the ASP.NET Cache. + // // Feel free to modify this code to suit your needs. + // // Returning key == null causes the default cache key to + // // be generated. + // + // key = RequestContext.BuildCompleteCacheKey( + // request, + // null, // sReportFilename + // this.GetType(), + // this.ShareDBLogonInfo ); + return key; + } + } +} diff --git a/WebLab/Informes/AuditoriaUser.rpt b/WebLab/Informes/AuditoriaUser.rpt new file mode 100644 index 0000000000000000000000000000000000000000..1e957ad7ba2a6f8844b5fd5ee73d58567316c6b1 GIT binary patch literal 16384 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 : +
-
diff --git a/WebLab/Protocolos/ProtocoloEdit2.aspx.cs b/WebLab/Protocolos/ProtocoloEdit2.aspx.cs index 26e0d81c..cc2c6513 100644 --- a/WebLab/Protocolos/ProtocoloEdit2.aspx.cs +++ b/WebLab/Protocolos/ProtocoloEdit2.aspx.cs @@ -1593,6 +1593,7 @@ inner join lab_item P with (nolock) on dp.idsubitem = p.iditem ddlOrigen.SelectedValue = oC.IdOrigenUrgencia.ToString(); //Origen: Guardia ddlSectorServicio.SelectedValue = oC.IdSectorUrgencia.ToString(); // sector de urgencia ddlPrioridad.SelectedValue = "2"; // Prioridad: Urgencia + chkRecordarPractica.Visible = false; } else { diff --git a/WebLab/Resultados/ResultadoNoPacienteView.aspx.cs b/WebLab/Resultados/ResultadoNoPacienteView.aspx.cs index 70b78d97..98dbfe20 100644 --- a/WebLab/Resultados/ResultadoNoPacienteView.aspx.cs +++ b/WebLab/Resultados/ResultadoNoPacienteView.aspx.cs @@ -28,9 +28,9 @@ public partial class ResultadoNoPacienteView : System.Web.UI.Page { CrystalReportSource oCr = new CrystalReportSource(); - bool hayAntecedente = false; + Configuracion oCon = new Configuracion(); - DataTable dtProtocolo; + public Usuario oUser = new Usuario(); @@ -85,21 +85,12 @@ protected void Page_Unload(object sender, EventArgs e) } private void Inicializar() { - //CargarGrilla(); + - pnlAntecedentes.Visible = false; - - pnlHC.Visible = true; - //if (Request["validado"].ToString() == "1") - // lblTitulo.Text = "HISTORIAL DE RESULTADOS"; - //else - // lblTitulo.Text = "CONSULTA DE RESULTADOS"; - + pnlAntecedentes.Visible = false; + pnlHC.Visible = true; pnlReferencia.Visible = true; - MuestraDatos(Request["idProtocolo"].ToString()); - - if (Request["desde"] == "Urgencia") hypRegresar.NavigateUrl = "../Urgencia/UrgenciaList.aspx"; else @@ -187,12 +178,7 @@ private void MuestraDatos(string p) oConservacion = (Conservacion)oConservacion.Get(typeof(Conservacion), oRegistro.IdConservacion); lblConservacion.Text = oConservacion.Descripcion; } - //lblServicio.Text = oRegistro.IdTipoServicio.Nombre.ToUpper(); - - - - - //Master.FindControl("ContentPlaceHolder1").FindControl("Panel1").Controls.Add(tContenido); + Control control1 = Master.FindControl("ContentPlaceHolder1").FindControl("Panel1").FindControl("tContenido"); Table tablaContenido = (Table)control1; int cantidadFilas =0; @@ -222,83 +208,14 @@ private void MuestraDatos(string p) lblFecha.Text = oRegistro.Fecha.ToShortDateString(); lblProtocolo.Text = oRegistro.GetNumero().ToString(); - //hplProtocolo.NavigateUrl = "../Protocolos/ProtocoloEdit2.aspx?idServicio=" + oRegistro.IdTipoServicio.IdTipoServicio.ToString()+ "&Operacion=Modifica&idProtocolo=" +oRegistro.IdProtocolo.ToString(); - - //if (oRegistro.IdEfector == oRegistro.IdEfectorSolicitante) - // lblOrigen.Text = oRegistro.IdOrigen.Nombre; - //else - // lblOrigen.Text = oRegistro.IdEfectorSolicitante.Nombre; - - //if ((oRegistro.IdEspecialistaSolicitante > 0) && (oRegistro.IdEfectorSolicitante == oRegistro.IdEfector)) - //{ - // try - // { - // Profesional oMedico = new Profesional(); - // oMedico = (Profesional)oMedico.Get(typeof(Profesional), oRegistro.IdEspecialistaSolicitante); - // if (oMedico != null) - // lblMedico.Text = oMedico.Apellido + " " + oMedico.Nombre; - // } - // catch (Exception ex) - // { - // lblMedico.Text = ""; string exception = ""; - // //while (ex != null) - // //{ - // // exception = ex.Message + "
"; - - // //} - // } - //} - //else - // lblMedico.Text = ""; - //lblPrioridad.Text = oRegistro.IdPrioridad.Nombre; - //if (oRegistro.IdPrioridad.Nombre == "URGENTE") - //{ - // lblPrioridad.ForeColor = Color.Red; - // lblPrioridad.Font.Bold = true; - //} + lblSector.Text = oRegistro.IdSector.Nombre; if (oRegistro.Sala != "") lblSector.Text += " Sala: " + oRegistro.Sala; if (oRegistro.Cama != "") lblSector.Text += " Cama: " + oRegistro.Cama; - //HFIdPaciente.Value = oRegistro.IdPaciente.IdPaciente.ToString(); - - ///Datos del Paciente - //if (oRegistro.IdPaciente.IdEstado == 2) lblDni.Text = "(Sin DU Temporal)"; - //else lblDni.Text = oRegistro.IdPaciente.NumeroDocumento.ToString(); - //lblPaciente.Text = oRegistro.IdPaciente.Apellido.ToUpper() + " " + oRegistro.IdPaciente.Nombre.ToUpper(); - //lblSexo.Text = oRegistro.IdPaciente.getSexo(); - //lblFechaNacimiento.Text = oRegistro.IdPaciente.FechaNacimiento.ToShortDateString(); - //lblEdad.Text = oRegistro.Edad.ToString(); - //switch (oRegistro.UnidadEdad) - //{ - // case 0: lblEdad.Text += " años"; break; - // case 1: lblEdad.Text += " meses"; break; - // case 2: lblEdad.Text += " días"; break; - //} lblNumeroOrigen.Text = oRegistro.NumeroOrigen; - - //////////////////////////////////////// - //string embarazada=""; - //ISession m_session = NHibernateHttpModule.CurrentSession; - //ICriteria crit = m_session.CreateCriteria(typeof(ProtocoloDiagnostico)); - //crit.Add(Expression.Eq("IdProtocolo", oRegistro)); - //IList lista = crit.List(); - //if (lista.Count > 0) - //{ - // foreach (ProtocoloDiagnostico oDiag in lista) - // { - // Cie10 oD = new Cie10(); - // oD = (Cie10)oD.Get(typeof(Cie10), oDiag.IdDiagnostico); - // if ( lblDiagnostico.Text=="") lblDiagnostico.Text = oD.Nombre; - // else lblDiagnostico.Text += " - " + oD.Nombre; - // if (oD.Codigo=="Z32.1") embarazada="E"; - - // } - //} - - //lblCodigoPaciente.Text = oRegistro.getCodificaHiv(embarazada); // lblSexo.Text.Substring(0, 1) + oRegistro.IdPaciente.Nombre.Substring(0, 2) + oRegistro.IdPaciente.Apellido.Substring(0, 2) + lblFechaNacimiento.Text.Replace("/", "") + embarazada; lblPedidoOriginal.Text = oRegistro.GetPracticasPedidas(); @@ -324,11 +241,7 @@ private void LlenarTabla(string p) da.Fill(Ds); - - //int cantidadResultadosValidados = Ds.Tables[0].Rows.Count; - //if (cantidadResultadosValidados > 0) - - //{ + string s = System.Globalization.CultureInfo.CurrentCulture.NumberFormat.CurrencyDecimalSeparator; @@ -391,31 +304,15 @@ private void LlenarTabla(string p) objCellValida_TITULO.Controls.Add(lblValida); Label lblCargadoPor = new Label(); - if ((Request["Operacion"].ToString() == "HC") && (Request["validado"].ToString() == "1")) - { - lblCargadoPor.Text = "VALIDADO POR"; - // Panel1.ScrollBars = ScrollBars.None; - } + if ((Request["Operacion"].ToString() == "HC") && (Request["validado"].ToString() == "1")) + lblCargadoPor.Text = "VALIDADO POR"; else lblCargadoPor.Text = "ESTADO"; - objCellPersona_TITULO.Controls.Add(lblCargadoPor); - - - /////observaciones - //if (Request["Operacion"].ToString() == "Valida") - //{ - - + objCellPersona_TITULO.Controls.Add(lblCargadoPor); objFila_TITULO.Cells.Add(objCellAnalisis_TITULO); - objFila_TITULO.Cells.Add(objCellResultado_TITULO); - - - - - objFila_TITULO.Cells.Add(objCellValoresReferencia_TITULO); - - + objFila_TITULO.Cells.Add(objCellResultado_TITULO); + objFila_TITULO.Cells.Add(objCellValoresReferencia_TITULO); objFila_TITULO.Cells.Add(objCellPersona_TITULO); objFila_TITULO.Cells.Add(objCellResultadoAnterior_TITULO); @@ -432,6 +329,34 @@ private void LlenarTabla(string p) int tablas = Ds.Tables.Count; if (tablas > 0) { + ////Caro PF: Cache de resultado item + + ISession session = NHibernateHttpModule.CurrentSession; + ///CARO PF: traer detalleprotocolos y derivaciones antes del for para no ir a la base N veces + var idsDetallesList = Ds.Tables[0].AsEnumerable() + .Select(r => r.Field("idDetalleProtocolo")) + .ToList(); + + var detallesList = session.CreateCriteria(typeof(DetalleProtocolo)) + .Add(Expression.In("IdDetalleProtocolo", idsDetallesList.ToArray())) + .List() + .Cast() + .ToList(); + + var detallesDict = detallesList + .ToDictionary(d => d.IdDetalleProtocolo); + + // Traer todas las Derivaciones juntas + var derivacionesList = session.CreateCriteria(typeof(Derivacion)) + .CreateAlias("IdDetalleProtocolo", "dp") + .Add(Expression.In("dp.IdDetalleProtocolo", idsDetallesList.ToArray())) + .List() + .Cast() + .ToList(); + + var derivacionesDict = derivacionesList + .ToDictionary(d => d.IdDetalleProtocolo.IdDetalleProtocolo); + /// CARO PF : fin for (int i = 0; i < Ds.Tables[0].Rows.Count; i++) { //decimal m_minimoReferencia=-1; @@ -465,12 +390,7 @@ private void LlenarTabla(string p) string m_estadoObservacion = Ds.Tables[0].Rows[i].ItemArray[29].ToString(); string m_area = Ds.Tables[0].Rows[i].ItemArray[30].ToString(); - //if (m_codificaPaciente == "True") - //{ - // lblPaciente.Visible = false; - // lblCodigoPaciente.Visible = true; - //} - + m_hijo = Ds.Tables[0].Rows[i].ItemArray[1].ToString(); m_titulo = Ds.Tables[0].Rows[i].ItemArray[0].ToString(); @@ -494,24 +414,20 @@ private void LlenarTabla(string p) { TableRow objRow = new TableRow(); TableCell objCell = new TableCell(); - Label lbl0 = new Label(); - //lbl0.ForeColor = Color + Label lbl0 = new Label(); lbl0.Text = m_area.ToUpper(); lbl0.TabIndex = short.Parse("500"); lbl0.Font.Bold = true; Master.FindControl("ContentPlaceHolder1").FindControl("Panel1").Controls.Add(lbl0); - objCell.Controls.Add(lbl0); - //if (Request["Operacion"].ToString() == "HC") - // objCell.ColumnSpan = 8; - //else + objCell.Controls.Add(lbl0); objCell.ColumnSpan = 8; objRow.BackColor = Color.Beige; objRow.HorizontalAlign = HorizontalAlign.Center; objRow.Cells.Add(objCell); - // objRow.CssClass = "myLabelIzquierda"; + tContenido.Controls.Add(objRow); pivot_Area = m_area; @@ -539,10 +455,16 @@ private void LlenarTabla(string p) tContenido.Controls.Add(objRow); m_nombre = m_titulo; + if (m_trajoMuestra == "No") + { + Label lblSinMuestra = new Label(); + lblSinMuestra.TabIndex = short.Parse("500"); + lblSinMuestra.Text = "Sin Muestra";// +oItem.IdEfectorDerivacion.Nombre; /// Ds.Tables[0].Rows[i].ItemArray[1].ToString(); + lblSinMuestra.Font.Italic = true; + lblSinMuestra.ForeColor = Color.Blue; + objCellResultado.Controls.Add(lblSinMuestra); + } } - - - Label lbl1 = new Label(); if (m_hijo == m_titulo) lbl1.Text = m_hijo; else lbl1.Text = "   " + m_hijo; @@ -562,60 +484,27 @@ private void LlenarTabla(string p) objCellAnalisis.Controls.Add(lbl1); - Item oItem = new Item(); - oItem = (Item)oItem.Get(typeof(Item), m_idItem); - - //DetalleProtocolo oDetalle = new DetalleProtocolo(); - //oDetalle = (DetalleProtocolo)oDetalle.Get(typeof(DetalleProtocolo), i_iddetalleProtocolo); + DetalleProtocolo oDetalle; + detallesDict.TryGetValue(i_iddetalleProtocolo, out oDetalle); + Derivacion oDeriva; + derivacionesDict.TryGetValue(i_iddetalleProtocolo, out oDeriva); + //fin + Item oItem = new Item(); + oItem = oDetalle.IdSubItem; // (Item)oItem.Get(typeof(Item), m_idItem); - // bool es_Bacteriologia = false; - string observacionesDetalle = ""; + ///Antes de mostrar el control verifica si está derivado - if (oItem.IdEfectorDerivacion != oItem.IdEfector) //es derivado + if (oDeriva != null) /// esta pendiente { Label lblDerivacion = new Label(); lblDerivacion.Font.Italic = true; - lblDerivacion.TabIndex = short.Parse("500"); - //Verifica el estado de la derivacion - string estadoDerivacion = ""; - - if (i_iddetalleProtocolo != 0) - { - DetalleProtocolo oDetalle = new DetalleProtocolo(); - oDetalle = (DetalleProtocolo)oDetalle.Get(typeof(DetalleProtocolo), i_iddetalleProtocolo); - - observacionesDetalle = oDetalle.Observaciones; - - Derivacion oDeriva = new Derivacion(); - oDeriva = (Derivacion)oDeriva.Get(typeof(Derivacion), "IdDetalleProtocolo", oDetalle); - if (oDeriva == null) /// esta pendiente - { - estadoDerivacion = "Pendiente de Derivacion"; - lblDerivacion.ForeColor = Color.Red; - } - else - { - //if (oDeriva.Estado == 0) /// pendiente - //{ - // estadoDerivacion = "Pendiente de Derivacion"; - // lblDerivacion.ForeColor = Color.Red; - //} - //if (oDeriva.Estado == 1) /// enviado - // estadoDerivacion = "Derivado: " + oItem.IdEfectorDerivacion.Nombre; - //if (oDeriva.Estado == 2) /// no enviado - // estadoDerivacion = " No Derivado. " + oDeriva.Observacion; - - lblDerivacion.Font.Bold = true; - estadoDerivacion = oDetalle.ResultadoCar; //Para todos los estados - if (oDeriva.Resultado != "") - estadoDerivacion += " - Resultado Informado: " + oDeriva.Resultado; - - } - - } - lblDerivacion.Text = estadoDerivacion; - + lblDerivacion.TabIndex = short.Parse("500"); + string estadoDerivacion = ""; + estadoDerivacion = oDetalle.ResultadoCar; + if (oDeriva.Resultado != "") + estadoDerivacion += " - Resultado Informado: " + oDeriva.Resultado; + lblDerivacion.Text = estadoDerivacion; objCellResultado.ColumnSpan = 1; objCellResultado.Controls.Add(lblDerivacion); } @@ -658,13 +547,10 @@ private void LlenarTabla(string p) else olbl.Text = x.ToString(System.Globalization.CultureInfo.InvariantCulture) + " " + unMedida; - if (i_iddetalleProtocolo != 0) + if (oDetalle != null) { - if (i_iddetalleProtocolo != 9999999) - { - DetalleProtocolo oDetalle = new DetalleProtocolo(); - oDetalle = (DetalleProtocolo)oDetalle.Get(typeof(DetalleProtocolo), i_iddetalleProtocolo); - + + m_usuariovalida += " " + oDetalle.FechaValida.ToShortDateString(); if (Observaciones != "") { if (m_conResultado == "False") @@ -674,7 +560,10 @@ private void LlenarTabla(string p) { Usuario oUser = new Usuario(); oUser = (Usuario)oUser.Get(typeof(Usuario), oDetalle.IdUsuarioValidaObservacion); - if (oUser.FirmaValidacion == "") m_usuariovalida = oUser.Apellido + " " + oUser.Nombre; else m_usuariovalida = oUser.FirmaValidacion; + if (oUser.FirmaValidacion == "") m_usuariovalida = oUser.Apellido + " " + oUser.Nombre; + else m_usuariovalida = oUser.FirmaValidacion; + + m_usuariovalida +=" " + oDetalle.FechaValida.ToShortDateString(); } } else @@ -684,31 +573,26 @@ private void LlenarTabla(string p) if (oDetalle.IdProtocolo.IdTipoServicio.IdTipoServicio!=5) { - string resultadoAnterior = oDetalle.BuscarResultadoAnterior(oDetalle.IdSubItem, oDetalle.IdItem, false); - if (resultadoAnterior != "") - { - hayAntecedente = true; - Label olblResultadoAnterior = new Label(); - olblResultadoAnterior.TabIndex = short.Parse("500"); - olblResultadoAnterior.Font.Size = FontUnit.Point(8); - olblResultadoAnterior.CssClass = "myLittleLink"; - olblResultadoAnterior.Attributes.Add("onClick", "javascript: AntecedenteView (" + oDetalle.IdSubItem.IdItem.ToString() + "," + oDetalle.IdProtocolo.IdPaciente.IdPaciente.ToString() + ",790,440); return false"); - olblResultadoAnterior.ToolTip = "Haga clic aqui para ver gráfico de evolución"; - //olblResultadoAnterior.ForeColor = Color.Green; - olblResultadoAnterior.Width = Unit.Pixel(20); - olblResultadoAnterior.Text = resultadoAnterior; + string resultadoAnterior = oDetalle.BuscarResultadoAnterior(oDetalle.IdSubItem, oDetalle.IdItem, false); + if (resultadoAnterior != "") + { + // hayAntecedente = true; + Label olblResultadoAnterior = new Label(); + olblResultadoAnterior.TabIndex = short.Parse("500"); + olblResultadoAnterior.Font.Size = FontUnit.Point(8); + olblResultadoAnterior.CssClass = "myLittleLink"; + olblResultadoAnterior.Attributes.Add("onClick", "javascript: AntecedenteView (" + oDetalle.IdSubItem.IdItem.ToString() + "," + oDetalle.IdProtocolo.IdPaciente.IdPaciente.ToString() + ",790,440); return false"); + olblResultadoAnterior.ToolTip = "Haga clic aqui para ver gráfico de evolución"; + olblResultadoAnterior.Width = Unit.Pixel(20); + olblResultadoAnterior.Text = resultadoAnterior; - objCellResultadoAnterior.Controls.Add(olblResultadoAnterior); + objCellResultadoAnterior.Controls.Add(olblResultadoAnterior); - //Button oB = new Button(); - //oB.Text = "R.ANT"; - //oB.OnClientClick = "javascript: AntecedenteView (" + oDetalle.IdSubItem.IdItem.ToString() + "," + oDetalle.IdProtocolo.IdPaciente.IdPaciente.ToString() + "); return false"; - //objCellResultadoAnterior.Controls.Add(oB); - } + } } - // if (VerificaValorReferencia(m_minimoReferencia, m_maximoReferencia, x, m_tipoValorReferencia)) + if (oDetalle.VerificaValorReferencia(x)) olbl.ForeColor = Color.Black; else @@ -721,48 +605,28 @@ private void LlenarTabla(string p) lblValorCritico.TabIndex = short.Parse("500"); lblValorCritico.Text = " VALOR CRITICO"; lblValorCritico.Font.Bold = true; - lblValorCritico.ForeColor = Color.OrangeRed; - // objCellResultado.ColumnSpan = 5; + lblValorCritico.ForeColor = Color.OrangeRed; - } - - ///IMAGENES ADJUNTAS - - - + } if (oDetalle.tieneAdjuntoVisible())//tiene observaciones { btnImagen.TabIndex = short.Parse("500"); btnImagen.ID = "IMG" + oDetalle.IdDetalleProtocolo.ToString(); btnImagen.ImageUrl = "~/App_Themes/default/images/obs_validado.png"; - btnImagen.ToolTip = "Adjunto imprimible para " + lbl1.Text.Replace(" ", ""); - - btnImagen.Attributes.Add("onClick", "javascript: AdjuntoEdit (" + oDetalle.IdDetalleProtocolo.ToString() + "," + oDetalle.IdProtocolo.IdTipoServicio.IdTipoServicio.ToString() + ",'" + Request["Operacion"].ToString() + "'); return false"); - } else - btnImagen.Visible = false; - - // fin de imagenes adjuntas - } + btnImagen.Visible = false; } objCellResultado.Controls.Add(olbl); objCellResultado.Controls.Add(btnImagen); ///etiqueta de unidad de medida Label olblUM = new Label(); - - - // olblUM.ID = "UM" + m_idItem.ToString(); olblUM.Font.Size = FontUnit.Point(7); - olblUM.Text = unMedida; - - - - + olblUM.Text = unMedida; objCellResultado.Controls.Add(olblUM); olblUM.Visible = false; @@ -791,33 +655,25 @@ private void LlenarTabla(string p) } objCellResultado.Controls.Add(olbl); - if ((i_iddetalleProtocolo != 0) ) + if (oDetalle != null) { - if (i_iddetalleProtocolo != 9999999) - { - DetalleProtocolo oDetalle = new DetalleProtocolo(); - oDetalle = (DetalleProtocolo)oDetalle.Get(typeof(DetalleProtocolo), i_iddetalleProtocolo); + + m_usuariovalida += " " + oDetalle.FechaValida.ToShortDateString(); if (oDetalle.IdProtocolo.IdTipoServicio.IdTipoServicio != 5) { string resultadoAnterior = oDetalle.BuscarResultadoAnterior(oDetalle.IdSubItem, oDetalle.IdItem, false); if (resultadoAnterior != "") { - hayAntecedente = true; + // hayAntecedente = true; Label olblResultadoAnterior = new Label(); olblResultadoAnterior.TabIndex = short.Parse("500"); - olblResultadoAnterior.Font.Size = FontUnit.Point(8); - //olblResultadoAnterior.CssClass = "myLink"; + olblResultadoAnterior.Font.Size = FontUnit.Point(8); olblResultadoAnterior.Attributes.Add("onClick", "javascript: AntecedenteView (" + oDetalle.IdSubItem.IdItem.ToString() + "," + oDetalle.IdProtocolo.IdPaciente.IdPaciente.ToString() + ",790,300); return false"); - olblResultadoAnterior.ToolTip = "Haga clic aqui para ver más datos."; - //olblResultadoAnterior.ForeColor = Color.Green; + olblResultadoAnterior.ToolTip = "Haga clic aqui para ver más datos."; olblResultadoAnterior.Width = Unit.Pixel(20); olblResultadoAnterior.Text = resultadoAnterior; - objCellResultadoAnterior.Controls.Add(olblResultadoAnterior); - //Button oB = new Button(); - //oB.Text = "R.ANT"; - //oB.OnClientClick = "javascript: AntecedenteView (" + oDetalle.IdSubItem.IdItem.ToString() + "," + oDetalle.IdProtocolo.IdPaciente.IdPaciente.ToString() + "); return false"; - //objCellResultadoAnterior.Controls.Add(oB); + } } @@ -835,47 +691,31 @@ private void LlenarTabla(string p) objCellResultado.Controls.Add(btnImagen); } } - } + } // fin case 1 break; - - }//fin swicth - - Label lblPersona = new Label(); - // lblPersona.TabIndex = short.Parse("500"); + Label lblPersona = new Label(); lblPersona.Text = m_usuariovalida; /// Ds.Tables[0].Rows[i].ItemArray[1].ToString(); - - - - /// lblPersona.Font.Size = FontUnit.Point(7); lblPersona.Font.Italic = true; lblPersona.Text = m_usuariovalida; - - objCellPersona.Controls.Add(lblPersona); - - + objCellPersona.Controls.Add(lblPersona); } - Label lblValoresReferencia = new Label(); - - // lblValoresReferencia.ID = "VR" + m_idItem.ToString(); + Label lblValoresReferencia = new Label(); lblValoresReferencia.Font.Italic = true; lblValoresReferencia.Font.Size = FontUnit.Point(8); if (valorReferencia != "") {// muestra el valor guardado lblValoresReferencia.Text = valorReferencia; - if (m_metodo != "") - // lblValoresReferencia.Text += " |Método:" + m_metodo; + if (m_metodo != "") lblValoresReferencia.Text += Environment.NewLine + m_metodo; - } - //else - // lblValoresReferencia.Text = oDetalle.CalcularValoresReferencia(); + } objCellValoresReferencia.Controls.Add(lblValoresReferencia); } @@ -885,27 +725,19 @@ private void LlenarTabla(string p) ///Definir los anchos de las columnas objCellAnalisis.Width = Unit.Percentage(30); objCellResultado.Width = Unit.Percentage(30); - objCellValoresReferencia.Width = Unit.Percentage(20); - // objCellValida.Width = Unit.Percentage(5); + objCellValoresReferencia.Width = Unit.Percentage(20); objCellPersona.Width = Unit.Percentage(20); - - - /////////////////////// ///agrega a la fila cada una de las celdas objFila.Cells.Add(objCellAnalisis); - objFila.Cells.Add(objCellResultado); - - //if (Request["Operacion"].ToString() != "HC") objFila.Cells.Add(objCellUnMedida); - - objFila.Cells.Add(objCellValoresReferencia); + objFila.Cells.Add(objCellResultado); - //if ((Request["Operacion"].ToString() == "Valida") || (Request["Operacion"].ToString() == "Control")) objFila.Cells.Add(objCellValida); + objFila.Cells.Add(objCellValoresReferencia); objFila.Cells.Add(objCellPersona); objFila.Cells.Add(objCellResultadoAnterior); - //if (Request["Operacion"].ToString() != "HC") objFila.Cells.Add(objCellObservaciones); + ////// Master.FindControl("ContentPlaceHolder1").FindControl("Panel1").Controls.Add(tContenido); @@ -1076,48 +908,7 @@ private void Imprimir(Protocolo oProtocolo, string tipo) } - //protected void gvLista_RowCommand(object sender, GridViewCommandEventArgs e) - //{ - // if (e.CommandName == "Ingresar") - // { - // dtProtocolo = (System.Data.DataTable)(Session["Tabla1"]); - // if (dtProtocolo != null) - // { - // for (int i = 0; i < dtProtocolo.Rows.Count; i++) - // { - // // dtProtocolo.Rows[i].Delete(); - // if (dtProtocolo.Rows[i][0].ToString() == e.CommandArgument.ToString()) CurrentIndexGrilla = i; - // } - // CurrentPageIndex = int.Parse( e.CommandArgument.ToString()); - // Response.Redirect("ResultadoView.aspx?idServicio=" + Request["idServicio"].ToString() + "&Operacion=" + Request["Operacion"].ToString() + "&idProtocolo=" + e.CommandArgument + "&Index=" + CurrentIndexGrilla + "&idArea=" + Request["idArea"].ToString() + "&validado=" + Request["validado"].ToString() + "&modo=" + Request["modo"].ToString(), false); - // } - // else - // Response.Redirect("../FinSesion.aspx", false); - // } - - //} - - //protected void gvLista_RowDataBound(object sender, GridViewRowEventArgs e) - //{ - // if (e.Row.RowType == DataControlRowType.DataRow) - // { - // ImageButton CmdModificar = (ImageButton)e.Row.Cells[2].Controls[1]; - // CmdModificar.CommandArgument = gvLista.DataKeys[e.Row.RowIndex].Value.ToString(); - // CmdModificar.CommandName = "Ingresar"; - - - // string idProtocolo= this.gvLista.DataKeys[e.Row.RowIndex].Value.ToString(); - // string s_detalle = e.Row.Cells[0].Text + ": " + getDetalleProtocolo(idProtocolo); - - // e.Row.Cells[0].ToolTip = s_detalle; - // e.Row.Cells[1].ToolTip = s_detalle; - - // CmdModificar.ToolTip = s_detalle; - // } - - - //} - + protected void cvValidaControles_ServerValidate(object source, ServerValidateEventArgs args) { //if ( (ValidaControlesSuperior()) && (ValidaControlesInferior()) ) @@ -1153,65 +944,7 @@ private bool estaVisibleControl(string idarea) - protected void btnSiguiente_Click(object sender, EventArgs e) - { - - } - - //private void Avanzar(int avance) - //{ - // //try - // //{ - - // if (Session["Tabla1"] != null) - // { - // if (CurrentIndexGrilla <= UltimaPageIndex) - // { - // if (avance == 1) - // { - // if (CurrentIndexGrilla < UltimaPageIndex) CurrentIndexGrilla += 1; //avanza - // } - // else //retrocede - // CurrentIndexGrilla = CurrentIndexGrilla - 1; //retrocede - - // if (CurrentIndexGrilla > -1) - // { - // dtProtocolo = (System.Data.DataTable)(Session["Tabla1"]); - // CurrentPageIndex = int.Parse(dtProtocolo.Rows[CurrentIndexGrilla][0].ToString()); - - // Response.Redirect("ResultadoView.aspx?idServicio=" + Request["idServicio"].ToString() + "&Operacion=" + Request["Operacion"].ToString() + "&idProtocolo=" + CurrentPageIndex + "&Index=" + CurrentIndexGrilla + "&idArea=" + Request["idArea"].ToString() + "&validado=" + Request["validado"].ToString() + "&modo=" + Request["modo"].ToString(), false); - // } - // } - // else - // if (Request["Operacion"].ToString() == "HC") - // Response.Redirect("../Informes/HistoriaClinicaFiltro.aspx?Tipo=Paciente", false); - // else - // Response.Redirect("ResultadoBusqueda.aspx?idServicio=" + Request["idServicio"].ToString() + "&Operacion=" + Request["Operacion"].ToString() + "&modo=" + Request["modo"].ToString(), false); - - // } - // else Response.Redirect("../FinSesion.aspx", false); - - - - //} - - protected void lnkPosterior_Click(object sender, EventArgs e) - { - //Avanzar(1); - } - - protected void lnkAnterior_Click(object sender, EventArgs e) - { - //Avanzar(-1); - } - - - protected void lnkAuditoria_Click(object sender, EventArgs e) - { - - } - - + protected void imgPdf_Click(object sender, ImageClickEventArgs e) { @@ -1226,75 +959,7 @@ protected void imgPdf_Click(object sender, ImageClickEventArgs e) } - - protected void lnkMarcar_Click(object sender, EventArgs e) - { - - Marcar(true); - - } - - private void Marcar(bool p) - { - - CheckBox chk; - - - if (Page.Master != null) - { - foreach (Control control in Page.Master.Controls) - { - if (control is HtmlForm) - { - foreach (Control controlform in control.Controls) - { - if (controlform is ContentPlaceHolder) - { - foreach (Control control1 in controlform.Controls) - { - if (control1 is Panel) - foreach (Control control2 in control1.Controls) - { - if (control2 is Table) - foreach (Control control3 in control2.Controls) - { - - if (control3 is TableRow) - foreach (Control control4 in control3.Controls) - { - - if (control4 is TableCell) - foreach (Control control5 in control4.Controls) - { - - if (control5 is CheckBox) - { - chk = (CheckBox)control5; - chk.Checked = p; - - - - } - - - } - } - } - } - } - } - } - } - } - } - - } - - protected void lnkDesmarcar_Click(object sender, EventArgs e) - { - Marcar(false); - } - + protected void btnVerAntecendente_Click(object sender, EventArgs e) { //if (ddlItem.SelectedValue != "0") @@ -1330,34 +995,7 @@ protected void btnPeticion_Click(object sender, EventArgs e) } - private string getDetalleProtocolo(string idProtocolo) - { - string dev = ""; int i = 0; - Protocolo oRegistro = new Protocolo(); - oRegistro = (Protocolo)oRegistro.Get(typeof(Protocolo), int.Parse(idProtocolo)); - - ISession m_session = NHibernateHttpModule.CurrentSession; - ICriteria crit = m_session.CreateCriteria(typeof(DetalleProtocolo)); - crit.Add(Expression.Eq("IdProtocolo", oRegistro)); - IList items = crit.List(); - foreach (DetalleProtocolo oDet in items) - { - i += 1; - if (dev == "") - dev = oDet.IdItem.Nombre; - else - { - if (dev.IndexOf(oDet.IdItem.Nombre) == -1) - dev = dev + " - " + oDet.IdItem.Nombre; - } - } - //return i.ToString() + ": " + dev; - return dev; - } - protected void btnArchivos_Click(object sender, EventArgs e) - { - Response.Redirect("../Protocolos/ProtocoloAdjuntar.aspx?idProtocolo=" + Request["idProtocolo"].ToString() + "&desde=resultado"); - } + protected void imgPdf_Click1(object sender, EventArgs e) { if (Session["idUsuario"] != null) diff --git a/WebLab/Site1.Master b/WebLab/Site1.Master index 0b042a64..8ab1782a 100644 --- a/WebLab/Site1.Master +++ b/WebLab/Site1.Master @@ -222,7 +222,7 @@ document.onkeydown=checkKeyCode; font-weight: normal; font-size: 14px; font-family: Arial; - text-align:center;">Versión MultiEfector Abril 2026-22.
" target="_blank" >Ver Cambios Version

+ text-align:center;">Versión MultiEfector Mayo 2026-11." target="_blank" >Ver Cambios Version

diff --git a/WebLab/SiteTurnos.Master b/WebLab/SiteTurnos.Master index b5002364..3a4ee6a7 100644 --- a/WebLab/SiteTurnos.Master +++ b/WebLab/SiteTurnos.Master @@ -222,7 +222,7 @@ document.onkeydown=checkKeyCode; font-weight: normal; font-size: 14px; font-family: Arial; - text-align:center;">Versión MultiEfector Abril 2026-22." target="_blank" >Ver Cambios Version

+ text-align:center;">Versión MultiEfector Mayo 2026-11." target="_blank" >Ver Cambios Version

diff --git a/WebLab/Turnos/TurnosEdit2.aspx.cs b/WebLab/Turnos/TurnosEdit2.aspx.cs index 0a785f81..94ce4b1a 100644 --- a/WebLab/Turnos/TurnosEdit2.aspx.cs +++ b/WebLab/Turnos/TurnosEdit2.aspx.cs @@ -508,11 +508,17 @@ private void CargarListas() if ( (Request["Modifica"].ToString() == "1") && (Request["idTurno"] != null)) str_condicion = " or exists (select 1 from LAB_Turno p WHERE p.idsector = s.idSectorServicio and idTurno = " + Request["idTurno"].ToString() + ")) "; + //Carga del combo de determinaciones + string s_idEfector = oUser.IdEfector.IdEfector.ToString(); + if (oUser.IdPerfil.IdPerfil.ToString() == "15") + { + s_idEfector = oUser.IdEfectorDestino.IdEfector.ToString(); + } string m_ssql = @"SELECT s.idSectorServicio, s.prefijo + ' - ' + s.nombre as nombre FROM LAB_SectorServicio S with (nolock) WHERE (baja = 0) - and ( exists (select 1 from Lab_SectorServicioEfector SE where SE.idSectorServicio=S.idSectorServicio and se.idefector=" + oUser.IdEfector.IdEfector.ToString() + @" )" + str_condicion + @" order by nombre"; + and ( exists (select 1 from Lab_SectorServicioEfector SE where SE.idSectorServicio=S.idSectorServicio and se.idefector="+ s_idEfector + @" )" + str_condicion + @" order by nombre"; oUtil.CargarCombo(ddlSectorServicio, m_ssql, "idSectorServicio", "nombre"); ddlSectorServicio.Items.Insert(0, new ListItem("Seleccione", "0")); @@ -522,13 +528,7 @@ private void CargarListas() //oUtil.CargarCombo(ddlEspecialista, m_ssql, "idProfesional", "nombre"); //ddlEspecialista.Items.Insert(0, new ListItem("No identificado", "0")); - //Carga del combo de determinaciones - string s_idEfector = oUser.IdEfector.IdEfector.ToString(); - - if (oUser.IdPerfil.IdPerfil.ToString() == "15") - { - s_idEfector = oUser.IdEfectorDestino.IdEfector.ToString(); - } + m_ssql = @"SELECT I.idItem as idItem, I.codigo as codigo, I.nombre as nombre, I.nombre + ' - ' + I.codigo as nombreLargo FROM Lab_item I with (nolock) diff --git a/WebLab/Usuarios/PasswordEdit2.aspx.cs b/WebLab/Usuarios/PasswordEdit2.aspx.cs index 9182eaed..3c7c4a5c 100644 --- a/WebLab/Usuarios/PasswordEdit2.aspx.cs +++ b/WebLab/Usuarios/PasswordEdit2.aspx.cs @@ -139,7 +139,7 @@ protected void btnContinuar_Click(object sender, EventArgs e) { Usuario oRegistro = new Usuario(); oRegistro = (Usuario)oRegistro.Get(typeof(Usuario), int.Parse(Session["idUsuario"].ToString())); - if (oRegistro.Externo) + if (oRegistro.Externo) Response.Redirect("~/Consulta/Historiaclinicafiltro.aspx", false); else diff --git a/WebLab/Usuarios/UsuarioEdit.aspx b/WebLab/Usuarios/UsuarioEdit.aspx index 7c745b4c..1a892ea0 100644 --- a/WebLab/Usuarios/UsuarioEdit.aspx +++ b/WebLab/Usuarios/UsuarioEdit.aspx @@ -204,7 +204,7 @@ - Contraseña: + diff --git a/WebLab/Usuarios/UsuarioEdit.aspx.cs b/WebLab/Usuarios/UsuarioEdit.aspx.cs index 83c732a3..3f09ffc4 100644 --- a/WebLab/Usuarios/UsuarioEdit.aspx.cs +++ b/WebLab/Usuarios/UsuarioEdit.aspx.cs @@ -34,25 +34,42 @@ public partial class UsuarioEdit : System.Web.UI.Page protected void Page_PreInit(object sender, EventArgs e) { - oCr.CacheDuration = 0; - oCr.EnableCaching = false; - oC = (Configuracion)oC.Get(typeof(Configuracion), 1); // "IdEfector", oUser.IdEfector); + if (Session["idUsuario"] != null) + { + oCr.CacheDuration = 0; + oCr.EnableCaching = false; + oC = (Configuracion)oC.Get(typeof(Configuracion), 1); // "IdEfector", oUser.IdEfector); + } + else Response.Redirect("../FinSesion.aspx", false); } protected void Page_Load(object sender, EventArgs e) { - if (!Page.IsPostBack) - { - if (Session["idUsuario"] != null) + if (Session["idUsuario"] != null) + { + if (!Page.IsPostBack) { VerificaPermisos("Usuarios"); CargarListas(); if (Request["id"] != null) MostrarDatos(); else + { MostrarEfectores(); - + btnAuditoria.Visible = false; + } + } - else Response.Redirect("../FinSesion.aspx", false); + } + else Response.Redirect("../FinSesion.aspx", false); + + } + + protected void Page_Unload(object sender, EventArgs e) + { + if (this.oCr.ReportDocument != null) + { + this.oCr.ReportDocument.Close(); + this.oCr.ReportDocument.Dispose(); } } @@ -87,14 +104,6 @@ private void CargarListas() m_ssql = @" SELECT idArea, nombre FROM LAB_Area (nolock) where baja=0 ORDER BY nombre "; oUtil.CargarCombo(ddlArea, m_ssql, "idArea", "nombre"); ddlArea.Items.Insert(0, new ListItem("Todas", "0")); - - if (ConfigurationManager.AppSettings["tipoAutenticacion"].ToString() == "SSO") - { - chkRequiereContrasenia.Checked = false; - chkRequiereContrasenia.Visible = false; - } - - } #region Datos Generales @@ -108,7 +117,10 @@ private void MostrarDatos() //txtMatricula.Text = oRegistro.Matricula; txtUsername.Text = oRegistro.Username; chkRequiereContrasenia.Checked = oRegistro.RequiereCambioPass; + //En modificacion no se puede editar contraseña, la ocultamos: txtPassword.Enabled = false; + txtPassword.Visible = false; + lblPassword.Visible = false; chkActivo.Checked = oRegistro.Activo; ddlPerfil.SelectedValue = oRegistro.IdPerfil.IdPerfil.ToString(); //ddlEfector.SelectedValue = oRegistro.IdEfector.IdEfector.ToString(); @@ -130,7 +142,7 @@ private void MostrarDatos() habilitarAdministrador(); Usuario oAuditor = new Usuario(); oAuditor = (Usuario)oAuditor.Get(typeof(Usuario), int.Parse(Session["idUsuario"].ToString())); - oAuditor.GrabaAuditoria("Consulta", oRegistro.IdUsuario, oRegistro.Username); + ViewState["idAuditoriaConsulta"] = oAuditor.GrabaAuditoria("Consulta", oRegistro.IdUsuario, oRegistro.Username); MostrarEfectores(); ddlTipoAutenticacion.SelectedValue = oRegistro.TipoAutenticacion.Trim(); @@ -149,6 +161,7 @@ private void habilitarAdministrador() lblMensajeEfector.Visible = false; lblMensajeEfector.UpdateAfterCallBack = true; ddlEfector3.ClearSelection(); agregarEfectorAdmin(); + ddlPerfil_SelectedIndexChanged(null,null); //si antes era Admin externo queda visible } else @@ -156,6 +169,7 @@ private void habilitarAdministrador() ddlArea.Enabled = true; ddlPerfil.Enabled = true; btnAgregarEfector.Enabled = true; + ddlPerfil_SelectedIndexChanged(null, null); } ddlArea.UpdateAfterCallBack = true; @@ -181,11 +195,8 @@ private void agregarEfectorAdmin() private void Guardar(Usuario oRegistro) { - string accion = "Crea"; - if (Request["id"] != null) //oRegistro nunca es null - accion = "Modifica"; - - + guardarAuditoria(oRegistro); + Perfil oPerfil = new Perfil(); oPerfil = (Perfil)oPerfil.Get(typeof(Perfil), int.Parse(ddlPerfil.SelectedValue)); @@ -200,13 +211,10 @@ private void Guardar(Usuario oRegistro) else oEfectorDestino = oEfector; - - oRegistro.IdEfector = oEfector; oRegistro.IdEfectorDestino = oEfectorDestino; oRegistro.IdPerfil = oPerfil; oRegistro.IdArea = int.Parse(ddlArea.SelectedValue); - oRegistro.Apellido = txtApellido.Text; oRegistro.Nombre = txtNombre.Text; oRegistro.Legajo = ""; @@ -214,7 +222,6 @@ private void Guardar(Usuario oRegistro) //oRegistro.Matricula=txtMatricula.Text; oRegistro.Administrador = chkAdministrador.Checked; oRegistro.Username = txtUsername.Text; - oRegistro.Email = email.Value; oRegistro.Telefono = txtTelefono.Text; @@ -232,39 +239,14 @@ private void Guardar(Usuario oRegistro) oRegistro.Password = m_password; } - - - if (Request["id"] != null) //oRegistro nunca es null - { - if ((oRegistro.Activo == true) && (chkActivo.Checked == false)) - accion = "Inhabilita"; - if ((oRegistro.Activo == false) && (chkActivo.Checked == true)) - accion = "Habilita"; - - if (oRegistro.IdPerfil != oPerfil) - accion = "Cambia Perfil"; - - if (oRegistro.TipoAutenticacion.Trim() != ddlTipoAutenticacion.SelectedValue) - accion = "Cambia Autenticacion: " + ddlTipoAutenticacion.SelectedValue.Trim(); - - } - oRegistro.Activo = chkActivo.Checked; oRegistro.Externo = chkExterno.Checked; oRegistro.RequiereCambioPass = chkRequiereContrasenia.Checked; oRegistro.IdUsuarioActualizacion = int.Parse(Session["idUsuario"].ToString()); oRegistro.FechaActualizacion = DateTime.Now; - - oRegistro.TipoAutenticacion = ddlTipoAutenticacion.SelectedValue; oRegistro.Save(); - - Usuario oAuditor = new Usuario(); - oAuditor = (Usuario)oAuditor.Get(typeof(Usuario), int.Parse(Session["idUsuario"].ToString())); - - oAuditor.GrabaAuditoria(accion, oRegistro.IdUsuario, oRegistro.Username); - if (Request["id"] == null) //en el alta se guardan los efectores luego de crear el usuario //en modificacion no los guardamos desde aca, ya que se guardan en el evento "Agregar Efector" GuardarEfectores(oRegistro); @@ -294,10 +276,6 @@ protected void btnGuardar_Click1(object sender, EventArgs e) Guardar(oRegistro); - //if (Request["id"] != null) - // Response.Redirect("UsuarioList.aspx", false); - //else - // Response.Redirect("UsuarioEdit.aspx", false); string parametros = this.parametros(); Response.Redirect("UsuarioList.aspx?" + parametros, false); } @@ -361,7 +339,7 @@ protected void btnAuditoria_Click(object sender, EventArgs e) encabezado3.Value = "Auditoria de Usuario"; - oCr.Report.FileName = "../Informes/AuditoriaProtocolo.rpt"; + oCr.Report.FileName = "../Informes/AuditoriaUser.rpt"; oCr.ReportDocument.SetDataSource(dtAuditoria); oCr.ReportDocument.ParameterFields[0].CurrentValues.Add(encabezado1); oCr.ReportDocument.ParameterFields[1].CurrentValues.Add(encabezado2); @@ -378,7 +356,7 @@ protected void btnAuditoria_Click(object sender, EventArgs e) } else { - string popupScript = ""; + string popupScript = ""; Page.RegisterStartupScript("PopupScript", popupScript); } } @@ -388,21 +366,26 @@ private DataTable GetDataSetAuditoria() { string m_strSQL = ""; - string m_strCondicion = ""; - SqlConnection conn = (SqlConnection)NHibernateHttpModule.CurrentSession.Connection; SqlDataAdapter adapter = new SqlDataAdapter(); - //if (!oUser.Administrador) - //{ - // m_strCondicion = " and P.idefector=" + oUser.IdEfector.IdEfector.ToString(); - //} - - - m_strSQL = @" SELECT A.username AS numero, P.apellido as username, A.fecha AS fecha, A.hora, A.accion, '' as analisis, '' as valor, '' as valorAnterior - FROM LAB_Auditoriausuario AS A (nolock) - inner join sys_usuario P (nolock) on P.idusuario= A.idusuarioregistro - where A.idusuario= " + Request["id"].ToString() + @" ORDER BY A.idAuditoriausuario"; + //Agregamos la auditoria de aceptacion de terminos y condiciones + + m_strSQL = @" SELECT U.username + ' - '+ U.apellido + ' ' + U.nombre as numero , + P.nombre + ' ' + P.apellido as username,A.fecha AS fecha, A.accion, + isnull(valorNuevo,'') as valor, isnull(valorAnterior,'') as valorAnterior + FROM LAB_Auditoriausuario AS A (nolock) + inner join sys_usuario P (nolock) on P.idusuario= A.idusuarioregistro + inner join Sys_Usuario U (nolock) on U.idusuario= A.idUsuario + where A.idusuario= " + Request["id"].ToString() + + @" union + SELECT U.username + ' - '+ U.apellido + ' ' + U.nombre as numero, + P.nombre + ' ' + P.apellido as username, L.fecha AS fecha, + 'Acepto Terminos y Condiciones', '' as valor, '' as valorAnterior + FROM LAB_LogAccesoTerminosCondiciones AS L (nolock) + inner join sys_usuario P (nolock) on P.idusuario= L.idUsuario + inner join Sys_Usuario U (nolock) on U.idusuario= P.idUsuario + where P.idusuario=" + Request["id"].ToString() + " ORDER BY fecha desc"; DataSet Ds1 = new DataSet(); adapter.SelectCommand = new SqlCommand(m_strSQL, conn); @@ -435,7 +418,7 @@ protected void btnBlanquear_Click(object sender, EventArgs e) protected void customValidacionGeneral_ServerValidate(object source, ServerValidateEventArgs args) { - if (Request["id"] == null) // alta + //if (Request["id"] == null) // Validar tambien en modificacion { Usuario oRegistro = new Usuario(); @@ -443,7 +426,9 @@ protected void customValidacionGeneral_ServerValidate(object source, ServerValid oRegistro = (Usuario)oRegistro.Get(typeof(Usuario), "Username", txtUsername.Text.Trim()); if (oRegistro != null) { - args.IsValid = false; + if (Request["id"] != null) + if (oRegistro.IdUsuario != int.Parse(Request["id"])) //que no compare el username del que estoy modificando + args.IsValid = false; return; @@ -542,12 +527,13 @@ private void habilitarPorAutenticacion() //Por defecto la contraseña es el username txtPassword.Enabled = false; rfvPassword.Enabled = false; + btnBlanquear.Visible = false; } else { chkRequiereContrasenia.Enabled = true; chkExterno.Enabled = true; - + btnBlanquear.Visible = true; //Se puede poner una contraseña if (Request["id"] == null){ txtPassword.Enabled = true; rfvPassword.Enabled = true; } else @@ -584,6 +570,76 @@ protected void customValidatorEfector_ServerValidate(object source, ServerValida } } + private void guardarAuditoria(Usuario oRegistro) + { + Usuario oAuditor = new Usuario(); + oAuditor = (Usuario)oAuditor.Get(typeof(Usuario), int.Parse(Session["idUsuario"].ToString())); + + if (Request["id"] == null) + { + oAuditor.GrabaAuditoria("Crea", oRegistro.IdUsuario, oRegistro.Username); + } + else //Auditoria cambio de valores del usuario + { + + if (oRegistro.Nombre != txtNombre.Text) + { oAuditor.GrabaAuditoria("Modifica Nombre", oRegistro.IdUsuario, oRegistro.Username, oRegistro.Nombre, txtNombre.Text); } + + if (oRegistro.Apellido != txtApellido.Text) + { oAuditor.GrabaAuditoria("Modifica Apellido", oRegistro.IdUsuario, oRegistro.Username, oRegistro.Apellido, txtApellido.Text); } + + + if (oRegistro.FirmaValidacion != txtFirmaValidacion.Text) + { oAuditor.GrabaAuditoria("Modifica Firma Validacion", oRegistro.IdUsuario, oRegistro.Username, oRegistro.FirmaValidacion, txtFirmaValidacion.Text); } + + if (oRegistro.Email != email.Value.ToString()) + { oAuditor.GrabaAuditoria("Modifica Email", oRegistro.IdUsuario, oRegistro.Username, oRegistro.Email, email.Value); } + + if (oRegistro.Telefono != txtTelefono.Text) + { oAuditor.GrabaAuditoria("Modifica Telefono", oRegistro.IdUsuario, oRegistro.Username, oRegistro.Telefono, txtTelefono.Text); } + + if (oRegistro.TipoAutenticacion.Trim() != ddlTipoAutenticacion.SelectedValue) + { oAuditor.GrabaAuditoria("Modifica Tipo Autenticacion", oRegistro.IdUsuario, oRegistro.Username, oRegistro.TipoAutenticacion, ddlTipoAutenticacion.SelectedValue); } + + if (oRegistro.Username != txtUsername.Text) + { oAuditor.GrabaAuditoria("Modifica Username", oRegistro.IdUsuario, oRegistro.Username, oRegistro.Username, txtUsername.Text); } + + if (oRegistro.Administrador != chkAdministrador.Checked) + { oAuditor.GrabaAuditoria("Modifica Administrador", oRegistro.IdUsuario, oRegistro.Username, oRegistro.Administrador ? "Si" : "No", chkAdministrador.Checked ? "Si" : "No"); } + + if (oRegistro.IdArea.ToString() != ddlArea.SelectedValue) + { + string nombreArea = ""; + if (oRegistro.IdArea != 0) + { + Area oArea = new Area(); + oArea = (Area)oArea.Get(typeof(Area), oRegistro.IdArea); + nombreArea = oArea.Nombre; + } + else nombreArea = "Todas"; + + oAuditor.GrabaAuditoria("Modifica Area", oRegistro.IdUsuario, oRegistro.Username, nombreArea, ddlArea.SelectedItem.Text); + + + } + + if (oRegistro.IdPerfil.IdPerfil.ToString() != ddlPerfil.SelectedValue) + { oAuditor.GrabaAuditoria("Modifica Perfil", oRegistro.IdUsuario, oRegistro.Username, oRegistro.IdPerfil.Nombre, ddlPerfil.SelectedItem.Text); } + + if (ddlEfectorDestino.SelectedValue != "" && oRegistro.IdEfectorDestino.IdEfector.ToString() != ddlEfectorDestino.SelectedValue) + { oAuditor.GrabaAuditoria("Modifica Laboratorio Destino", oRegistro.IdUsuario, oRegistro.Username, oRegistro.IdEfectorDestino.Nombre, ddlEfectorDestino.SelectedItem.Text); } + + if (oRegistro.Activo != chkActivo.Checked) + { oAuditor.GrabaAuditoria("Modifica Activo", oRegistro.IdUsuario, oRegistro.Username, oRegistro.Activo ? "Si" : "No", chkActivo.Checked ? "Si" : "No"); } + + if (oRegistro.Externo != chkExterno.Checked) + { oAuditor.GrabaAuditoria("Modifica Externo", oRegistro.IdUsuario, oRegistro.Username, oRegistro.Externo ? "Si" : "No", chkExterno.Checked ? "Si" : "No"); } + + if (oRegistro.RequiereCambioPass != chkRequiereContrasenia.Checked) + { oAuditor.GrabaAuditoria("Modifica Requiere Contraseña", oRegistro.IdUsuario, oRegistro.Username, oRegistro.RequiereCambioPass ? "Si" : "No", chkRequiereContrasenia.Checked ? "Si" : "No"); } + + } + } #endregion #region Efectores diff --git a/WebLab/Usuarios/UsuarioEdit.aspx.designer.cs b/WebLab/Usuarios/UsuarioEdit.aspx.designer.cs index d8c0b814..fcde6f90 100644 --- a/WebLab/Usuarios/UsuarioEdit.aspx.designer.cs +++ b/WebLab/Usuarios/UsuarioEdit.aspx.designer.cs @@ -140,6 +140,15 @@ public partial class UsuarioEdit /// protected global::System.Web.UI.WebControls.CustomValidator customValidacionGeneral1; + /// + /// Control lblPassword. + /// + /// + /// Campo generado automáticamente. + /// Para modificarlo, mueva la declaración del campo del archivo del diseñador al archivo de código subyacente. + /// + protected global::System.Web.UI.WebControls.Label lblPassword; + /// /// Control txtPassword. /// diff --git a/WebLab/Usuarios/UsuarioList.aspx.cs b/WebLab/Usuarios/UsuarioList.aspx.cs index 1ca5239f..2a796ad7 100644 --- a/WebLab/Usuarios/UsuarioList.aspx.cs +++ b/WebLab/Usuarios/UsuarioList.aspx.cs @@ -118,9 +118,38 @@ private void CargarListas() oUtil.CargarCombo(ddlEfector, m_ssql, "idEfector", "nombre"); if (nivelcentral) - ddlEfector.Items.Insert(0, new ListItem("Todos", "0")); + ddlEfector.Items.Insert(0, new ListItem("--Seleccione un efector--", "0")); - m_ssql = @"SELECT idPerfil, nombre FROM Sys_Perfil with (nolock) ORDER BY nombre"; + if (nivelcentral) + m_ssql = @"SELECT idPerfil, nombre FROM Sys_Perfil with (nolock) ORDER BY nombre"; + else + m_ssql = @"SELECT DISTINCT + U.idPerfil, + P.nombre + FROM Sys_Usuario U + INNER JOIN Sys_Perfil P ON P.idPerfil = U.idPerfil + WHERE U.idUsuario IN ( + SELECT idUsuario + FROM Sys_UsuarioEfector + WHERE idEfector = " + oUser.IdEfector.IdEfector.ToString() + @" + ) + UNION + + SELECT + P.idPerfil, + P.nombre + FROM Sys_Perfil P WITH (NOLOCK) + WHERE P.idPerfil = 15 + AND EXISTS ( + SELECT 1 + FROM Sys_Usuario U WITH (NOLOCK) + WHERE U.idEfector <> " + oUser.IdEfector.IdEfector.ToString() + @" + AND U.idEfectorDestino = " + oUser.IdEfector.IdEfector.ToString() + @" + AND U.activo = 1 + AND U.idPerfil = 15 + ) + + ORDER BY P.nombre"; oUtil.CargarCombo(ddlPerfil, m_ssql, "idPerfil", "nombre"); ddlPerfil.Items.Insert(0, new ListItem("Todos", "0")); diff --git a/WebLab/controldecambios.html b/WebLab/controldecambios.html index 43b85394..acb9cc3a 100644 --- a/WebLab/controldecambios.html +++ b/WebLab/controldecambios.html @@ -1,1199 +1,1521 @@ - - - - - - Lista de cambios - + + + +

Lista de cambios en SIL2

+ +
+ +
+ + + + + + + + + + + + +
FechaModuloDetalleTipo
+ + diff --git a/WebLab/loginSIL.ascx.cs b/WebLab/loginSIL.ascx.cs index e7dd1d0f..1b6a2c74 100644 --- a/WebLab/loginSIL.ascx.cs +++ b/WebLab/loginSIL.ascx.cs @@ -340,6 +340,13 @@ private void CrearLogAcceso(Usuario oUser) private bool MostrarTerminosCondiciones(Usuario oUser) { + /* + PARAMETRIZACION: + Cantidad X de dias + > 0 --> Muestra "Terminos y Condiciones" dado X dias + == 0 --> Muestra Siempre "Terminos y Condiciones" + < 0 --> NO muestra "Terminos y Condiciones" + */ int dias = Convert.ToInt32(ConfigurationManager.AppSettings["DiasTerminosCondiciones"]); if(dias > 0) { @@ -356,8 +363,8 @@ private bool MostrarTerminosCondiciones(Usuario oUser) } else { - // ScriptManager.RegisterStartupScript(this, this.GetType(), "error", "alert('❌ No hay dias definidos para los terminos y condiciones');", true); - return true; + if(dias == 0) return true; + else return false; } From 88264f975faff2a24f284d0d86689b88339e1c1b Mon Sep 17 00:00:00 2001 From: Vanesa Rimada <80859025+vrimada@users.noreply.github.com> Date: Mon, 27 Apr 2026 10:48:05 -0300 Subject: [PATCH 29/37] =?UTF-8?q?-=20Validar=20en=20la=20edici=C3=B3n=20el?= =?UTF-8?q?=20ingreso=20de=20username=20existente.=20=20-=20en=20la=20list?= =?UTF-8?q?a=20de=20usuario=20que=20aparezcan=20los=20perfiles=20de=20su?= =?UTF-8?q?=20efector=20-=20=E2=80=A2=20Agregar=20en=20la=20auditoria=20el?= =?UTF-8?q?=20registro=20de=20fecha=20y=20hora=20en=20que=20el=20usuario?= =?UTF-8?q?=20acepta=20los=20t=C3=A9rminos=20y=20condiciones=20-poner=20el?= =?UTF-8?q?=20buscador=20de=20efector,=20perfil=20con=20tipeo=20como=20en?= =?UTF-8?q?=20la=20vinculaci=C3=B3n=20de=20efectores=20-Ocultar=20campo=20?= =?UTF-8?q?contrase=C3=B1a=20en=20la=20edici=C3=B3n=20de=20usuarios=20-Ocu?= =?UTF-8?q?ltar=20bot=C3=B3n=20Auditoria=20en=20el=20alta=20de=20usuario?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- WebLab/Usuarios/UsuarioEdit.aspx.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/WebLab/Usuarios/UsuarioEdit.aspx.cs b/WebLab/Usuarios/UsuarioEdit.aspx.cs index 3f09ffc4..78f21d77 100644 --- a/WebLab/Usuarios/UsuarioEdit.aspx.cs +++ b/WebLab/Usuarios/UsuarioEdit.aspx.cs @@ -53,11 +53,11 @@ protected void Page_Load(object sender, EventArgs e) if (Request["id"] != null) MostrarDatos(); else - { + { MostrarEfectores(); btnAuditoria.Visible = false; } - + } } else Response.Redirect("../FinSesion.aspx", false); From ff278ae89a7cead0cc4b64d041b3fbf4d9a5bf17 Mon Sep 17 00:00:00 2001 From: Vanesa Rimada <80859025+vrimada@users.noreply.github.com> Date: Mon, 27 Apr 2026 11:21:13 -0300 Subject: [PATCH 30/37] Reporte de audtoria de usuarios --- WebLab/WebLab.csproj | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/WebLab/WebLab.csproj b/WebLab/WebLab.csproj index 690222be..27e8e4d5 100644 --- a/WebLab/WebLab.csproj +++ b/WebLab/WebLab.csproj @@ -4894,6 +4894,12 @@ Component True
+ + AuditoriaUser.rpt + True + Component + True + True True @@ -6807,6 +6813,10 @@ CrystalDecisions.VSDesigner.CodeGen.ReportCodeGenerator AuditoriaLote.cs + + CrystalDecisions.VSDesigner.CodeGen.ReportCodeGenerator + AuditoriaUser.cs + CrystalDecisions.VSDesigner.CodeGen.ReportCodeGenerator AuditoriaProtocolo.cs From 6377b088651ad1c5cc2d06839a29002a976d76cc Mon Sep 17 00:00:00 2001 From: Vanesa Rimada <80859025+vrimada@users.noreply.github.com> Date: Mon, 27 Apr 2026 15:25:06 -0300 Subject: [PATCH 31/37] fix:auditoria de usuario --- Business/Data/Usuario.cs | 2 +- WebLab/Informes/AuditoriaUser.cs | 34 ++++++++++++++- WebLab/Usuarios/UsuarioEdit.aspx.cs | 66 ++++++++++++++++++++++++----- 3 files changed, 88 insertions(+), 14 deletions(-) diff --git a/Business/Data/Usuario.cs b/Business/Data/Usuario.cs index daf5df40..af2eaca4 100644 --- a/Business/Data/Usuario.cs +++ b/Business/Data/Usuario.cs @@ -228,7 +228,7 @@ public string Nombre } - public int GrabaAuditoria(string accion, int iduser, string username, string valorAnterior="", string valorNuevo="") + public void GrabaAuditoria(string accion, int iduser, string username, string valorAnterior="", string valorNuevo="") { AuditoriaUsuario oRegistro = new AuditoriaUsuario(); oRegistro.IdUsuario = iduser; // usuario afectado que esta modificando, consultando , etc. diff --git a/WebLab/Informes/AuditoriaUser.cs b/WebLab/Informes/AuditoriaUser.cs index 28b00c9e..0f77511e 100644 --- a/WebLab/Informes/AuditoriaUser.cs +++ b/WebLab/Informes/AuditoriaUser.cs @@ -74,7 +74,6 @@ public CrystalDecisions.CrystalReports.Engine.Section Section3 { [Browsable(false)] [DesignerSerializationVisibilityAttribute(System.ComponentModel.DesignerSerializationVisibility.Hidden)] - public CrystalDecisions.CrystalReports.Engine.Section Section4 { get { return this.ReportDefinition.Sections[3]; } @@ -82,12 +81,43 @@ public CrystalDecisions.CrystalReports.Engine.Section Section4 { [Browsable(false)] [DesignerSerializationVisibilityAttribute(System.ComponentModel.DesignerSerializationVisibility.Hidden)] - public CrystalDecisions.CrystalReports.Engine.Section Section5 { get { return this.ReportDefinition.Sections[4]; } } + [Browsable(false)] + [DesignerSerializationVisibilityAttribute(System.ComponentModel.DesignerSerializationVisibility.Hidden)] + public CrystalDecisions.CrystalReports.Engine.Section GroupFooterSection2 { + get { + return this.ReportDefinition.Sections[5]; + } + } + + [Browsable(false)] + [DesignerSerializationVisibilityAttribute(System.ComponentModel.DesignerSerializationVisibility.Hidden)] + public CrystalDecisions.CrystalReports.Engine.Section GroupFooterSection1 { + get { + return this.ReportDefinition.Sections[6]; + } + } + + [Browsable(false)] + [DesignerSerializationVisibilityAttribute(System.ComponentModel.DesignerSerializationVisibility.Hidden)] + public CrystalDecisions.CrystalReports.Engine.Section Section4 { + get { + return this.ReportDefinition.Sections[7]; + } + } + + [Browsable(false)] + [DesignerSerializationVisibilityAttribute(System.ComponentModel.DesignerSerializationVisibility.Hidden)] + public CrystalDecisions.CrystalReports.Engine.Section Section5 { + get { + return this.ReportDefinition.Sections[8]; + } + } + [Browsable(false)] [DesignerSerializationVisibilityAttribute(System.ComponentModel.DesignerSerializationVisibility.Hidden)] public CrystalDecisions.Shared.IParameterField Parameter_encabezado1 { diff --git a/WebLab/Usuarios/UsuarioEdit.aspx.cs b/WebLab/Usuarios/UsuarioEdit.aspx.cs index 78f21d77..e70730c9 100644 --- a/WebLab/Usuarios/UsuarioEdit.aspx.cs +++ b/WebLab/Usuarios/UsuarioEdit.aspx.cs @@ -623,22 +623,66 @@ private void guardarAuditoria(Usuario oRegistro) } - if (oRegistro.IdPerfil.IdPerfil.ToString() != ddlPerfil.SelectedValue) - { oAuditor.GrabaAuditoria("Modifica Perfil", oRegistro.IdUsuario, oRegistro.Username, oRegistro.IdPerfil.Nombre, ddlPerfil.SelectedItem.Text); } + private void guardarAuditoria(Usuario oRegistro) + { + Usuario oAuditor = new Usuario(); + oAuditor = (Usuario)oAuditor.Get(typeof(Usuario), int.Parse(Session["idUsuario"].ToString())); - if (ddlEfectorDestino.SelectedValue != "" && oRegistro.IdEfectorDestino.IdEfector.ToString() != ddlEfectorDestino.SelectedValue) - { oAuditor.GrabaAuditoria("Modifica Laboratorio Destino", oRegistro.IdUsuario, oRegistro.Username, oRegistro.IdEfectorDestino.Nombre, ddlEfectorDestino.SelectedItem.Text); } + int idUsuario = oRegistro.IdUsuario; + if (oRegistro.Nombre != txtNombre.Text) + oAuditor.GrabaAuditoria("Modifica Nombre", idUsuario, oRegistro.Username, oRegistro.Nombre, txtNombre.Text); + + if (oRegistro.Apellido != txtApellido.Text) + oAuditor.GrabaAuditoria("Modifica Apellido", idUsuario, oRegistro.Username, oRegistro.Apellido, txtApellido.Text); + + if (oRegistro.FirmaValidacion != txtFirmaValidacion.Text) + oAuditor.GrabaAuditoria("Modifica Firma Validacion", idUsuario, oRegistro.Username, oRegistro.FirmaValidacion, txtFirmaValidacion.Text); + + if (oRegistro.Email != email.Value.ToString()) + oAuditor.GrabaAuditoria("Modifica Email", idUsuario, oRegistro.Username, oRegistro.Email, email.Value); + + if (oRegistro.Telefono != txtTelefono.Text) + oAuditor.GrabaAuditoria("Modifica Telefono", idUsuario, oRegistro.Username, oRegistro.Telefono, txtTelefono.Text); + + if (oRegistro.TipoAutenticacion.Trim() != ddlTipoAutenticacion.SelectedValue) + oAuditor.GrabaAuditoria("Modifica Tipo Autenticacion", idUsuario, oRegistro.Username, oRegistro.TipoAutenticacion, ddlTipoAutenticacion.SelectedValue); + + if (oRegistro.Username != txtUsername.Text) + oAuditor.GrabaAuditoria("Modifica Username", idUsuario, oRegistro.Username, oRegistro.Username, txtUsername.Text); + + if (oRegistro.Administrador != chkAdministrador.Checked) + oAuditor.GrabaAuditoria("Modifica Administrador", idUsuario, oRegistro.Username, oRegistro.Administrador ? "Si" : "No", chkAdministrador.Checked ? "Si" : "No"); + + if (oRegistro.IdArea.ToString() != ddlArea.SelectedValue) + { + string nombreArea = ""; + if (oRegistro.IdArea != 0) + { + Area oArea = new Area(); + oArea = (Area)oArea.Get(typeof(Area), oRegistro.IdArea); + nombreArea = oArea.Nombre; + } + else nombreArea = "Todas"; + + oAuditor.GrabaAuditoria("Modifica Area", idUsuario, oRegistro.Username, nombreArea, ddlArea.SelectedItem.Text); + } - if (oRegistro.Activo != chkActivo.Checked) - { oAuditor.GrabaAuditoria("Modifica Activo", oRegistro.IdUsuario, oRegistro.Username, oRegistro.Activo ? "Si" : "No", chkActivo.Checked ? "Si" : "No"); } + if (oRegistro.IdPerfil.IdPerfil.ToString() != ddlPerfil.SelectedValue) + oAuditor.GrabaAuditoria("Modifica Perfil", idUsuario, oRegistro.Username, oRegistro.IdPerfil.Nombre, ddlPerfil.SelectedItem.Text); - if (oRegistro.Externo != chkExterno.Checked) - { oAuditor.GrabaAuditoria("Modifica Externo", oRegistro.IdUsuario, oRegistro.Username, oRegistro.Externo ? "Si" : "No", chkExterno.Checked ? "Si" : "No"); } + if (ddlEfectorDestino.SelectedValue != "" && oRegistro.IdEfectorDestino.IdEfector.ToString() != ddlEfectorDestino.SelectedValue) + oAuditor.GrabaAuditoria("Modifica Laboratorio Destino", idUsuario, oRegistro.Username, oRegistro.IdEfectorDestino.Nombre, ddlEfectorDestino.SelectedItem.Text); - if (oRegistro.RequiereCambioPass != chkRequiereContrasenia.Checked) - { oAuditor.GrabaAuditoria("Modifica Requiere Contraseña", oRegistro.IdUsuario, oRegistro.Username, oRegistro.RequiereCambioPass ? "Si" : "No", chkRequiereContrasenia.Checked ? "Si" : "No"); } + if (oRegistro.Activo != chkActivo.Checked) + oAuditor.GrabaAuditoria("Modifica Activo", idUsuario, oRegistro.Username, oRegistro.Activo ? "Si":"No", chkActivo.Checked ? "Si":"No"); + + if (oRegistro.Externo != chkExterno.Checked) + oAuditor.GrabaAuditoria("Modifica Externo", idUsuario, oRegistro.Username, oRegistro.Externo ? "Si":"No", chkExterno.Checked ? "Si":"No"); - } + if (oRegistro.RequiereCambioPass != chkRequiereContrasenia.Checked) + oAuditor.GrabaAuditoria("Modifica Requiere Contraseña", idUsuario, oRegistro.Username, oRegistro.RequiereCambioPass ? "Si":"No", chkRequiereContrasenia.Checked ? "Si":"No"); + + } #endregion From 0264e525433d2880df5bc6e87dc43fb60f577da0 Mon Sep 17 00:00:00 2001 From: Vanesa Rimada <80859025+vrimada@users.noreply.github.com> Date: Tue, 28 Apr 2026 10:39:56 -0300 Subject: [PATCH 32/37] fix sesiones y auditoria --- WebLab/Usuarios/UsuarioEdit.aspx.cs | 98 +++++++++++++++++------------ 1 file changed, 57 insertions(+), 41 deletions(-) diff --git a/WebLab/Usuarios/UsuarioEdit.aspx.cs b/WebLab/Usuarios/UsuarioEdit.aspx.cs index e70730c9..0af6e497 100644 --- a/WebLab/Usuarios/UsuarioEdit.aspx.cs +++ b/WebLab/Usuarios/UsuarioEdit.aspx.cs @@ -53,11 +53,11 @@ protected void Page_Load(object sender, EventArgs e) if (Request["id"] != null) MostrarDatos(); else - { + { MostrarEfectores(); btnAuditoria.Visible = false; } - + } } else Response.Redirect("../FinSesion.aspx", false); @@ -628,61 +628,77 @@ private void guardarAuditoria(Usuario oRegistro) Usuario oAuditor = new Usuario(); oAuditor = (Usuario)oAuditor.Get(typeof(Usuario), int.Parse(Session["idUsuario"].ToString())); - int idUsuario = oRegistro.IdUsuario; - if (oRegistro.Nombre != txtNombre.Text) - oAuditor.GrabaAuditoria("Modifica Nombre", idUsuario, oRegistro.Username, oRegistro.Nombre, txtNombre.Text); + string accion = "Crea"; - if (oRegistro.Apellido != txtApellido.Text) - oAuditor.GrabaAuditoria("Modifica Apellido", idUsuario, oRegistro.Username, oRegistro.Apellido, txtApellido.Text); + if (Request["id"] != null) + { + accion = "Modifica"; + if ((oRegistro.Activo == true) && (chkActivo.Checked == false)) + accion = "Inhabilita"; + if ((oRegistro.Activo == false) && (chkActivo.Checked == true)) + accion = "Habilita"; + } + //Auditoria accion + oAuditor.GrabaAuditoria(accion, oRegistro.IdUsuario, oRegistro.Username); + + //Auditoria cambio de valores del usuario + if (Request["id"] != null) + { + + if (oRegistro.Nombre != txtNombre.Text) + oAuditor.GrabaAuditoria("Modifica Nombre", oRegistro.IdUsuario, oRegistro.Username, oRegistro.Nombre, txtNombre.Text); - if (oRegistro.FirmaValidacion != txtFirmaValidacion.Text) - oAuditor.GrabaAuditoria("Modifica Firma Validacion", idUsuario, oRegistro.Username, oRegistro.FirmaValidacion, txtFirmaValidacion.Text); + if (oRegistro.Apellido != txtApellido.Text) + oAuditor.GrabaAuditoria("Modifica Apellido", oRegistro.IdUsuario, oRegistro.Username, oRegistro.Apellido, txtApellido.Text); + + if (oRegistro.FirmaValidacion != txtFirmaValidacion.Text) + oAuditor.GrabaAuditoria("Modifica Firma Validacion", oRegistro.IdUsuario, oRegistro.Username, oRegistro.FirmaValidacion, txtFirmaValidacion.Text); - if (oRegistro.Email != email.Value.ToString()) - oAuditor.GrabaAuditoria("Modifica Email", idUsuario, oRegistro.Username, oRegistro.Email, email.Value); + if (oRegistro.Email != email.Value.ToString()) + oAuditor.GrabaAuditoria("Modifica Email", oRegistro.IdUsuario , oRegistro.Username, oRegistro.Email, email.Value); - if (oRegistro.Telefono != txtTelefono.Text) - oAuditor.GrabaAuditoria("Modifica Telefono", idUsuario, oRegistro.Username, oRegistro.Telefono, txtTelefono.Text); + if (oRegistro.Telefono != txtTelefono.Text) + oAuditor.GrabaAuditoria("Modifica Telefono", oRegistro.IdUsuario, oRegistro.Username, oRegistro.Telefono, txtTelefono.Text); - if (oRegistro.TipoAutenticacion.Trim() != ddlTipoAutenticacion.SelectedValue) - oAuditor.GrabaAuditoria("Modifica Tipo Autenticacion", idUsuario, oRegistro.Username, oRegistro.TipoAutenticacion, ddlTipoAutenticacion.SelectedValue); + if (oRegistro.TipoAutenticacion.Trim() != ddlTipoAutenticacion.SelectedValue) + oAuditor.GrabaAuditoria("Modifica Tipo Autenticacion", oRegistro.IdUsuario, oRegistro.Username, oRegistro.TipoAutenticacion, ddlTipoAutenticacion.SelectedValue); - if (oRegistro.Username != txtUsername.Text) - oAuditor.GrabaAuditoria("Modifica Username", idUsuario, oRegistro.Username, oRegistro.Username, txtUsername.Text); + if (oRegistro.Username != txtUsername.Text) + oAuditor.GrabaAuditoria("Modifica Username", oRegistro.IdUsuario, oRegistro.Username, oRegistro.Username, txtUsername.Text); - if (oRegistro.Administrador != chkAdministrador.Checked) - oAuditor.GrabaAuditoria("Modifica Administrador", idUsuario, oRegistro.Username, oRegistro.Administrador ? "Si" : "No", chkAdministrador.Checked ? "Si" : "No"); + if (oRegistro.Administrador != chkAdministrador.Checked) + oAuditor.GrabaAuditoria("Modifica Administrador", oRegistro.IdUsuario, oRegistro.Username, oRegistro.Administrador ? "Si" : "No", chkAdministrador.Checked ? "Si" : "No"); - if (oRegistro.IdArea.ToString() != ddlArea.SelectedValue) - { - string nombreArea = ""; - if (oRegistro.IdArea != 0) + if (oRegistro.IdArea.ToString() != ddlArea.SelectedValue) { - Area oArea = new Area(); - oArea = (Area)oArea.Get(typeof(Area), oRegistro.IdArea); - nombreArea = oArea.Nombre; - } - else nombreArea = "Todas"; + string nombreArea = ""; + if (oRegistro.IdArea != 0) + { + Area oArea = new Area(); + oArea = (Area)oArea.Get(typeof(Area), oRegistro.IdArea); + nombreArea = oArea.Nombre; + } + else nombreArea = "Todas"; - oAuditor.GrabaAuditoria("Modifica Area", idUsuario, oRegistro.Username, nombreArea, ddlArea.SelectedItem.Text); - } + oAuditor.GrabaAuditoria("Modifica Area", oRegistro.IdUsuario, oRegistro.Username, nombreArea, ddlArea.SelectedItem.Text); + } - if (oRegistro.IdPerfil.IdPerfil.ToString() != ddlPerfil.SelectedValue) - oAuditor.GrabaAuditoria("Modifica Perfil", idUsuario, oRegistro.Username, oRegistro.IdPerfil.Nombre, ddlPerfil.SelectedItem.Text); + if (oRegistro.IdPerfil.IdPerfil.ToString() != ddlPerfil.SelectedValue) + oAuditor.GrabaAuditoria("Modifica Perfil", oRegistro.IdUsuario, oRegistro.Username, oRegistro.IdPerfil.Nombre, ddlPerfil.SelectedItem.Text); - if (ddlEfectorDestino.SelectedValue != "" && oRegistro.IdEfectorDestino.IdEfector.ToString() != ddlEfectorDestino.SelectedValue) - oAuditor.GrabaAuditoria("Modifica Laboratorio Destino", idUsuario, oRegistro.Username, oRegistro.IdEfectorDestino.Nombre, ddlEfectorDestino.SelectedItem.Text); + if (ddlEfectorDestino.SelectedValue != "" && oRegistro.IdEfectorDestino.IdEfector.ToString() != ddlEfectorDestino.SelectedValue) + oAuditor.GrabaAuditoria("Modifica Laboratorio Destino", oRegistro.IdUsuario, oRegistro.Username, oRegistro.IdEfectorDestino.Nombre, ddlEfectorDestino.SelectedItem.Text); - if (oRegistro.Activo != chkActivo.Checked) - oAuditor.GrabaAuditoria("Modifica Activo", idUsuario, oRegistro.Username, oRegistro.Activo ? "Si":"No", chkActivo.Checked ? "Si":"No"); + if (oRegistro.Activo != chkActivo.Checked) + oAuditor.GrabaAuditoria("Modifica Activo", oRegistro.IdUsuario, oRegistro.Username, oRegistro.Activo ? "Si":"No", chkActivo.Checked ? "Si":"No"); - if (oRegistro.Externo != chkExterno.Checked) - oAuditor.GrabaAuditoria("Modifica Externo", idUsuario, oRegistro.Username, oRegistro.Externo ? "Si":"No", chkExterno.Checked ? "Si":"No"); + if (oRegistro.Externo != chkExterno.Checked) + oAuditor.GrabaAuditoria("Modifica Externo", oRegistro.IdUsuario, oRegistro.Username, oRegistro.Externo ? "Si":"No", chkExterno.Checked ? "Si":"No"); - if (oRegistro.RequiereCambioPass != chkRequiereContrasenia.Checked) - oAuditor.GrabaAuditoria("Modifica Requiere Contraseña", idUsuario, oRegistro.Username, oRegistro.RequiereCambioPass ? "Si":"No", chkRequiereContrasenia.Checked ? "Si":"No"); + if (oRegistro.RequiereCambioPass != chkRequiereContrasenia.Checked) + oAuditor.GrabaAuditoria("Modifica Requiere Contraseña", oRegistro.IdUsuario, oRegistro.Username, oRegistro.RequiereCambioPass ? "Si":"No", chkRequiereContrasenia.Checked ? "Si":"No"); - + } } #endregion From 12336f202302098f60c25e37c84776f802f883cb Mon Sep 17 00:00:00 2001 From: Vanesa Rimada <80859025+vrimada@users.noreply.github.com> Date: Tue, 28 Apr 2026 13:35:24 -0300 Subject: [PATCH 33/37] label github --- .github/workflows/label02_has_conflicts.yaml | 84 ++++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 .github/workflows/label02_has_conflicts.yaml diff --git a/.github/workflows/label02_has_conflicts.yaml b/.github/workflows/label02_has_conflicts.yaml new file mode 100644 index 00000000..5f08c0d3 --- /dev/null +++ b/.github/workflows/label02_has_conflicts.yaml @@ -0,0 +1,84 @@ +name: PR conflict label + +on: + pull_request: + types: [opened, synchronize, reopened] + push: + branches: [master] + +permissions: + pull-requests: write + issues: write + contents: read + +jobs: + conflicts: + runs-on: ubuntu-latest + steps: + - name: Check conflicts + uses: actions/github-script@v7 + with: + script: | + const { owner, repo } = context.repo; + + async function checkPR(pr) { + let data; + let retries = 5; + const issue_number = pr.number; + + while (retries > 0) { + const response = await github.rest.pulls.get({ + owner, + repo, + pull_number: issue_number + }); + data = response.data; + console.log(`PR #${issue_number} - mergeable: ${data.mergeable}, state: ${data.mergeable_state}`); + + // Si mergeable es null, GitHub aún está calculando + if (data.mergeable !== null) break; + + await new Promise(r => setTimeout(r, 5000)); + retries--; + } + + // Usamos mergeable === false para detectar conflictos reales + if (data.mergeable === false) { + console.log(`Adding "Conflictos" label to PR #${issue_number}`); + await github.rest.issues.addLabels({ + owner, + repo, + issue_number, + labels: ['Conflictos'] + }); + } else if (data.mergeable === true) { + console.log(`Removing "Conflictos" label from PR #${issue_number} (if exists)`); + try { + await github.rest.issues.removeLabel({ + owner, + repo, + issue_number, + name: 'Conflictos' + }); + } catch (e) { + // label no existía + } + } + } + + if (context.eventName === 'pull_request') { + await checkPR(context.payload.pull_request); + } + + if (context.eventName === 'push') { + const { data: prs } = await github.rest.pulls.list({ + owner, + repo, + state: 'open', + base: 'master' + }); + + for (const pr of prs) { + await checkPR(pr); + } + } From 99f72c72c03e35693b29effcfeb497d663b39ba4 Mon Sep 17 00:00:00 2001 From: Vanesa Rimada <80859025+vrimada@users.noreply.github.com> Date: Wed, 6 May 2026 15:50:44 -0300 Subject: [PATCH 34/37] req8 y correcion reporte --- WebLab/Informes/AuditoriaUser.cs | 33 +------------------------------- 1 file changed, 1 insertion(+), 32 deletions(-) diff --git a/WebLab/Informes/AuditoriaUser.cs b/WebLab/Informes/AuditoriaUser.cs index 0f77511e..011b0ace 100644 --- a/WebLab/Informes/AuditoriaUser.cs +++ b/WebLab/Informes/AuditoriaUser.cs @@ -81,43 +81,12 @@ public CrystalDecisions.CrystalReports.Engine.Section Section3 { [Browsable(false)] [DesignerSerializationVisibilityAttribute(System.ComponentModel.DesignerSerializationVisibility.Hidden)] + public CrystalDecisions.CrystalReports.Engine.Section Section3 { get { return this.ReportDefinition.Sections[4]; } } - [Browsable(false)] - [DesignerSerializationVisibilityAttribute(System.ComponentModel.DesignerSerializationVisibility.Hidden)] - public CrystalDecisions.CrystalReports.Engine.Section GroupFooterSection2 { - get { - return this.ReportDefinition.Sections[5]; - } - } - - [Browsable(false)] - [DesignerSerializationVisibilityAttribute(System.ComponentModel.DesignerSerializationVisibility.Hidden)] - public CrystalDecisions.CrystalReports.Engine.Section GroupFooterSection1 { - get { - return this.ReportDefinition.Sections[6]; - } - } - - [Browsable(false)] - [DesignerSerializationVisibilityAttribute(System.ComponentModel.DesignerSerializationVisibility.Hidden)] - public CrystalDecisions.CrystalReports.Engine.Section Section4 { - get { - return this.ReportDefinition.Sections[7]; - } - } - - [Browsable(false)] - [DesignerSerializationVisibilityAttribute(System.ComponentModel.DesignerSerializationVisibility.Hidden)] - public CrystalDecisions.CrystalReports.Engine.Section Section5 { - get { - return this.ReportDefinition.Sections[8]; - } - } - [Browsable(false)] [DesignerSerializationVisibilityAttribute(System.ComponentModel.DesignerSerializationVisibility.Hidden)] public CrystalDecisions.Shared.IParameterField Parameter_encabezado1 { From 803df9fc196b1778a38b9a145c978f83e19b5ce6 Mon Sep 17 00:00:00 2001 From: Vanesa Rimada <80859025+vrimada@users.noreply.github.com> Date: Thu, 7 May 2026 10:43:56 -0300 Subject: [PATCH 35/37] fix: sacar "analisis" de la query porque no se usa para el reporte. eliminar auditoria de consulta si se modifica. --- Business/Data/Usuario.cs | 4 +- WebLab/Usuarios/UsuarioEdit.aspx.cs | 92 +++++++++++++++++------------ 2 files changed, 57 insertions(+), 39 deletions(-) diff --git a/Business/Data/Usuario.cs b/Business/Data/Usuario.cs index af2eaca4..1849c6a5 100644 --- a/Business/Data/Usuario.cs +++ b/Business/Data/Usuario.cs @@ -228,7 +228,7 @@ public string Nombre } - public void GrabaAuditoria(string accion, int iduser, string username, string valorAnterior="", string valorNuevo="") + public int GrabaAuditoria(string accion, int iduser, string username, string valorAnterior="", string valorNuevo="") { AuditoriaUsuario oRegistro = new AuditoriaUsuario(); oRegistro.IdUsuario = iduser; // usuario afectado que esta modificando, consultando , etc. @@ -241,7 +241,7 @@ public void GrabaAuditoria(string accion, int iduser, string username, string va oRegistro.ValorAnterior = valorAnterior; oRegistro.ValorNuevo = valorNuevo; oRegistro.Save(); - return oRegistro.IdAuditoriaUsuario; + } diff --git a/WebLab/Usuarios/UsuarioEdit.aspx.cs b/WebLab/Usuarios/UsuarioEdit.aspx.cs index 0af6e497..9195a96e 100644 --- a/WebLab/Usuarios/UsuarioEdit.aspx.cs +++ b/WebLab/Usuarios/UsuarioEdit.aspx.cs @@ -625,50 +625,58 @@ private void guardarAuditoria(Usuario oRegistro) private void guardarAuditoria(Usuario oRegistro) { + bool huboCambios = false; + Usuario oAuditor = new Usuario(); oAuditor = (Usuario)oAuditor.Get(typeof(Usuario), int.Parse(Session["idUsuario"].ToString())); - string accion = "Crea"; - - if (Request["id"] != null) - { - accion = "Modifica"; - if ((oRegistro.Activo == true) && (chkActivo.Checked == false)) - accion = "Inhabilita"; - if ((oRegistro.Activo == false) && (chkActivo.Checked == true)) - accion = "Habilita"; - } + + + //ahora se genera una auditoria por cada modificacion + //if (Request["id"] != null) + //{ + // //accion = "Modifica"; ahora se genera una auditoria por cada modificacion + // if ((oRegistro.Activo == true) && (chkActivo.Checked == false)) + // accion = "Inhabilita"; //lo hace Modifica Activo + // if ((oRegistro.Activo == false) && (chkActivo.Checked == true)) + // accion = "Habilita"; //lo hace Modifica Activo + //} //Auditoria accion - oAuditor.GrabaAuditoria(accion, oRegistro.IdUsuario, oRegistro.Username); + //Auditor.GrabaAuditoria(accion, oRegistro.IdUsuario, oRegistro.Username); - //Auditoria cambio de valores del usuario - if (Request["id"] != null) + if (Request["id"] == null) + { + oAuditor.GrabaAuditoria("Crea", oRegistro.IdUsuario, oRegistro.Username); + huboCambios = true; + } + else //Auditoria cambio de valores del usuario { - + if (oRegistro.Nombre != txtNombre.Text) - oAuditor.GrabaAuditoria("Modifica Nombre", oRegistro.IdUsuario, oRegistro.Username, oRegistro.Nombre, txtNombre.Text); - + { oAuditor.GrabaAuditoria("Modifica Nombre", oRegistro.IdUsuario, oRegistro.Username, oRegistro.Nombre, txtNombre.Text); huboCambios = true; } + if (oRegistro.Apellido != txtApellido.Text) - oAuditor.GrabaAuditoria("Modifica Apellido", oRegistro.IdUsuario, oRegistro.Username, oRegistro.Apellido, txtApellido.Text); - + { oAuditor.GrabaAuditoria("Modifica Apellido", oRegistro.IdUsuario, oRegistro.Username, oRegistro.Apellido, txtApellido.Text); huboCambios = true; } + + if (oRegistro.FirmaValidacion != txtFirmaValidacion.Text) - oAuditor.GrabaAuditoria("Modifica Firma Validacion", oRegistro.IdUsuario, oRegistro.Username, oRegistro.FirmaValidacion, txtFirmaValidacion.Text); - + { oAuditor.GrabaAuditoria("Modifica Firma Validacion", oRegistro.IdUsuario, oRegistro.Username, oRegistro.FirmaValidacion, txtFirmaValidacion.Text); huboCambios = true; } + if (oRegistro.Email != email.Value.ToString()) - oAuditor.GrabaAuditoria("Modifica Email", oRegistro.IdUsuario , oRegistro.Username, oRegistro.Email, email.Value); - + { oAuditor.GrabaAuditoria("Modifica Email", oRegistro.IdUsuario, oRegistro.Username, oRegistro.Email, email.Value); huboCambios = true; } + if (oRegistro.Telefono != txtTelefono.Text) - oAuditor.GrabaAuditoria("Modifica Telefono", oRegistro.IdUsuario, oRegistro.Username, oRegistro.Telefono, txtTelefono.Text); - + { oAuditor.GrabaAuditoria("Modifica Telefono", oRegistro.IdUsuario, oRegistro.Username, oRegistro.Telefono, txtTelefono.Text); huboCambios = true; } + if (oRegistro.TipoAutenticacion.Trim() != ddlTipoAutenticacion.SelectedValue) - oAuditor.GrabaAuditoria("Modifica Tipo Autenticacion", oRegistro.IdUsuario, oRegistro.Username, oRegistro.TipoAutenticacion, ddlTipoAutenticacion.SelectedValue); - + { oAuditor.GrabaAuditoria("Modifica Tipo Autenticacion", oRegistro.IdUsuario, oRegistro.Username, oRegistro.TipoAutenticacion, ddlTipoAutenticacion.SelectedValue); huboCambios = true; } + if (oRegistro.Username != txtUsername.Text) - oAuditor.GrabaAuditoria("Modifica Username", oRegistro.IdUsuario, oRegistro.Username, oRegistro.Username, txtUsername.Text); - + { oAuditor.GrabaAuditoria("Modifica Username", oRegistro.IdUsuario, oRegistro.Username, oRegistro.Username, txtUsername.Text); huboCambios = true; } + if (oRegistro.Administrador != chkAdministrador.Checked) - oAuditor.GrabaAuditoria("Modifica Administrador", oRegistro.IdUsuario, oRegistro.Username, oRegistro.Administrador ? "Si" : "No", chkAdministrador.Checked ? "Si" : "No"); - + { oAuditor.GrabaAuditoria("Modifica Administrador", oRegistro.IdUsuario, oRegistro.Username, oRegistro.Administrador ? "Si" : "No", chkAdministrador.Checked ? "Si" : "No"); huboCambios = true; } + if (oRegistro.IdArea.ToString() != ddlArea.SelectedValue) { string nombreArea = ""; @@ -681,24 +689,34 @@ private void guardarAuditoria(Usuario oRegistro) else nombreArea = "Todas"; oAuditor.GrabaAuditoria("Modifica Area", oRegistro.IdUsuario, oRegistro.Username, nombreArea, ddlArea.SelectedItem.Text); + huboCambios = true; + } if (oRegistro.IdPerfil.IdPerfil.ToString() != ddlPerfil.SelectedValue) - oAuditor.GrabaAuditoria("Modifica Perfil", oRegistro.IdUsuario, oRegistro.Username, oRegistro.IdPerfil.Nombre, ddlPerfil.SelectedItem.Text); + { oAuditor.GrabaAuditoria("Modifica Perfil", oRegistro.IdUsuario, oRegistro.Username, oRegistro.IdPerfil.Nombre, ddlPerfil.SelectedItem.Text); huboCambios = true; } if (ddlEfectorDestino.SelectedValue != "" && oRegistro.IdEfectorDestino.IdEfector.ToString() != ddlEfectorDestino.SelectedValue) - oAuditor.GrabaAuditoria("Modifica Laboratorio Destino", oRegistro.IdUsuario, oRegistro.Username, oRegistro.IdEfectorDestino.Nombre, ddlEfectorDestino.SelectedItem.Text); + { oAuditor.GrabaAuditoria("Modifica Laboratorio Destino", oRegistro.IdUsuario, oRegistro.Username, oRegistro.IdEfectorDestino.Nombre, ddlEfectorDestino.SelectedItem.Text); huboCambios = true; } if (oRegistro.Activo != chkActivo.Checked) - oAuditor.GrabaAuditoria("Modifica Activo", oRegistro.IdUsuario, oRegistro.Username, oRegistro.Activo ? "Si":"No", chkActivo.Checked ? "Si":"No"); - + { oAuditor.GrabaAuditoria("Modifica Activo", oRegistro.IdUsuario, oRegistro.Username, oRegistro.Activo ? "Si" : "No", chkActivo.Checked ? "Si" : "No"); huboCambios = true; } + if (oRegistro.Externo != chkExterno.Checked) - oAuditor.GrabaAuditoria("Modifica Externo", oRegistro.IdUsuario, oRegistro.Username, oRegistro.Externo ? "Si":"No", chkExterno.Checked ? "Si":"No"); + { oAuditor.GrabaAuditoria("Modifica Externo", oRegistro.IdUsuario, oRegistro.Username, oRegistro.Externo ? "Si" : "No", chkExterno.Checked ? "Si" : "No"); huboCambios = true; } + + if (oRegistro.RequiereCambioPass != chkRequiereContrasenia.Checked) + { oAuditor.GrabaAuditoria("Modifica Requiere Contraseña", oRegistro.IdUsuario, oRegistro.Username, oRegistro.RequiereCambioPass ? "Si" : "No", chkRequiereContrasenia.Checked ? "Si" : "No"); huboCambios = true; } - if (oRegistro.RequiereCambioPass != chkRequiereContrasenia.Checked) - oAuditor.GrabaAuditoria("Modifica Requiere Contraseña", oRegistro.IdUsuario, oRegistro.Username, oRegistro.RequiereCambioPass ? "Si":"No", chkRequiereContrasenia.Checked ? "Si":"No"); + if (huboCambios) + { + //si hubo cambios: eliminar auditoria de consulta + SqlConnection conn = (SqlConnection)NHibernateHttpModule.CurrentSession.Connection; + int idAuditoriaConsulta = (int)ViewState["idAuditoriaConsulta"]; + oAuditor.EliminarAuditoria(idAuditoriaConsulta,conn); } + } } #endregion From 9c5756e66a3ce8d6d7ac0737d19b948f87050185 Mon Sep 17 00:00:00 2001 From: Vanesa Rimada <80859025+vrimada@users.noreply.github.com> Date: Thu, 7 May 2026 11:24:26 -0300 Subject: [PATCH 36/37] revertiendo la eliminacion de auditoria de consulta --- WebLab/Usuarios/UsuarioEdit.aspx.cs | 37 +++++++++++------------------ 1 file changed, 14 insertions(+), 23 deletions(-) diff --git a/WebLab/Usuarios/UsuarioEdit.aspx.cs b/WebLab/Usuarios/UsuarioEdit.aspx.cs index 9195a96e..a0ea723e 100644 --- a/WebLab/Usuarios/UsuarioEdit.aspx.cs +++ b/WebLab/Usuarios/UsuarioEdit.aspx.cs @@ -647,35 +647,34 @@ private void guardarAuditoria(Usuario oRegistro) if (Request["id"] == null) { oAuditor.GrabaAuditoria("Crea", oRegistro.IdUsuario, oRegistro.Username); - huboCambios = true; } else //Auditoria cambio de valores del usuario { if (oRegistro.Nombre != txtNombre.Text) - { oAuditor.GrabaAuditoria("Modifica Nombre", oRegistro.IdUsuario, oRegistro.Username, oRegistro.Nombre, txtNombre.Text); huboCambios = true; } + { oAuditor.GrabaAuditoria("Modifica Nombre", oRegistro.IdUsuario, oRegistro.Username, oRegistro.Nombre, txtNombre.Text); } if (oRegistro.Apellido != txtApellido.Text) - { oAuditor.GrabaAuditoria("Modifica Apellido", oRegistro.IdUsuario, oRegistro.Username, oRegistro.Apellido, txtApellido.Text); huboCambios = true; } + { oAuditor.GrabaAuditoria("Modifica Apellido", oRegistro.IdUsuario, oRegistro.Username, oRegistro.Apellido, txtApellido.Text); } if (oRegistro.FirmaValidacion != txtFirmaValidacion.Text) - { oAuditor.GrabaAuditoria("Modifica Firma Validacion", oRegistro.IdUsuario, oRegistro.Username, oRegistro.FirmaValidacion, txtFirmaValidacion.Text); huboCambios = true; } + { oAuditor.GrabaAuditoria("Modifica Firma Validacion", oRegistro.IdUsuario, oRegistro.Username, oRegistro.FirmaValidacion, txtFirmaValidacion.Text); } if (oRegistro.Email != email.Value.ToString()) - { oAuditor.GrabaAuditoria("Modifica Email", oRegistro.IdUsuario, oRegistro.Username, oRegistro.Email, email.Value); huboCambios = true; } + { oAuditor.GrabaAuditoria("Modifica Email", oRegistro.IdUsuario, oRegistro.Username, oRegistro.Email, email.Value); } if (oRegistro.Telefono != txtTelefono.Text) - { oAuditor.GrabaAuditoria("Modifica Telefono", oRegistro.IdUsuario, oRegistro.Username, oRegistro.Telefono, txtTelefono.Text); huboCambios = true; } + { oAuditor.GrabaAuditoria("Modifica Telefono", oRegistro.IdUsuario, oRegistro.Username, oRegistro.Telefono, txtTelefono.Text); } if (oRegistro.TipoAutenticacion.Trim() != ddlTipoAutenticacion.SelectedValue) - { oAuditor.GrabaAuditoria("Modifica Tipo Autenticacion", oRegistro.IdUsuario, oRegistro.Username, oRegistro.TipoAutenticacion, ddlTipoAutenticacion.SelectedValue); huboCambios = true; } + { oAuditor.GrabaAuditoria("Modifica Tipo Autenticacion", oRegistro.IdUsuario, oRegistro.Username, oRegistro.TipoAutenticacion, ddlTipoAutenticacion.SelectedValue); } if (oRegistro.Username != txtUsername.Text) - { oAuditor.GrabaAuditoria("Modifica Username", oRegistro.IdUsuario, oRegistro.Username, oRegistro.Username, txtUsername.Text); huboCambios = true; } + { oAuditor.GrabaAuditoria("Modifica Username", oRegistro.IdUsuario, oRegistro.Username, oRegistro.Username, txtUsername.Text); } if (oRegistro.Administrador != chkAdministrador.Checked) - { oAuditor.GrabaAuditoria("Modifica Administrador", oRegistro.IdUsuario, oRegistro.Username, oRegistro.Administrador ? "Si" : "No", chkAdministrador.Checked ? "Si" : "No"); huboCambios = true; } + { oAuditor.GrabaAuditoria("Modifica Administrador", oRegistro.IdUsuario, oRegistro.Username, oRegistro.Administrador ? "Si" : "No", chkAdministrador.Checked ? "Si" : "No"); } if (oRegistro.IdArea.ToString() != ddlArea.SelectedValue) { @@ -689,33 +688,25 @@ private void guardarAuditoria(Usuario oRegistro) else nombreArea = "Todas"; oAuditor.GrabaAuditoria("Modifica Area", oRegistro.IdUsuario, oRegistro.Username, nombreArea, ddlArea.SelectedItem.Text); - huboCambios = true; + } if (oRegistro.IdPerfil.IdPerfil.ToString() != ddlPerfil.SelectedValue) - { oAuditor.GrabaAuditoria("Modifica Perfil", oRegistro.IdUsuario, oRegistro.Username, oRegistro.IdPerfil.Nombre, ddlPerfil.SelectedItem.Text); huboCambios = true; } + { oAuditor.GrabaAuditoria("Modifica Perfil", oRegistro.IdUsuario, oRegistro.Username, oRegistro.IdPerfil.Nombre, ddlPerfil.SelectedItem.Text); } if (ddlEfectorDestino.SelectedValue != "" && oRegistro.IdEfectorDestino.IdEfector.ToString() != ddlEfectorDestino.SelectedValue) - { oAuditor.GrabaAuditoria("Modifica Laboratorio Destino", oRegistro.IdUsuario, oRegistro.Username, oRegistro.IdEfectorDestino.Nombre, ddlEfectorDestino.SelectedItem.Text); huboCambios = true; } + { oAuditor.GrabaAuditoria("Modifica Laboratorio Destino", oRegistro.IdUsuario, oRegistro.Username, oRegistro.IdEfectorDestino.Nombre, ddlEfectorDestino.SelectedItem.Text); } if (oRegistro.Activo != chkActivo.Checked) - { oAuditor.GrabaAuditoria("Modifica Activo", oRegistro.IdUsuario, oRegistro.Username, oRegistro.Activo ? "Si" : "No", chkActivo.Checked ? "Si" : "No"); huboCambios = true; } + { oAuditor.GrabaAuditoria("Modifica Activo", oRegistro.IdUsuario, oRegistro.Username, oRegistro.Activo ? "Si" : "No", chkActivo.Checked ? "Si" : "No"); } if (oRegistro.Externo != chkExterno.Checked) - { oAuditor.GrabaAuditoria("Modifica Externo", oRegistro.IdUsuario, oRegistro.Username, oRegistro.Externo ? "Si" : "No", chkExterno.Checked ? "Si" : "No"); huboCambios = true; } + { oAuditor.GrabaAuditoria("Modifica Externo", oRegistro.IdUsuario, oRegistro.Username, oRegistro.Externo ? "Si" : "No", chkExterno.Checked ? "Si" : "No"); } if (oRegistro.RequiereCambioPass != chkRequiereContrasenia.Checked) - { oAuditor.GrabaAuditoria("Modifica Requiere Contraseña", oRegistro.IdUsuario, oRegistro.Username, oRegistro.RequiereCambioPass ? "Si" : "No", chkRequiereContrasenia.Checked ? "Si" : "No"); huboCambios = true; } + { oAuditor.GrabaAuditoria("Modifica Requiere Contraseña", oRegistro.IdUsuario, oRegistro.Username, oRegistro.RequiereCambioPass ? "Si" : "No", chkRequiereContrasenia.Checked ? "Si" : "No"); } - if (huboCambios) - { - //si hubo cambios: eliminar auditoria de consulta - SqlConnection conn = (SqlConnection)NHibernateHttpModule.CurrentSession.Connection; - int idAuditoriaConsulta = (int)ViewState["idAuditoriaConsulta"]; - - oAuditor.EliminarAuditoria(idAuditoriaConsulta,conn); - } } } #endregion From d7891643f9d7a23b5ae7a0ce1712afa83730a2e9 Mon Sep 17 00:00:00 2001 From: Vanesa Rimada <80859025+vrimada@users.noreply.github.com> Date: Thu, 7 May 2026 11:26:25 -0300 Subject: [PATCH 37/37] unload --- WebLab/Usuarios/UsuarioEdit.aspx.cs | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/WebLab/Usuarios/UsuarioEdit.aspx.cs b/WebLab/Usuarios/UsuarioEdit.aspx.cs index a0ea723e..964fa7c2 100644 --- a/WebLab/Usuarios/UsuarioEdit.aspx.cs +++ b/WebLab/Usuarios/UsuarioEdit.aspx.cs @@ -630,20 +630,6 @@ private void guardarAuditoria(Usuario oRegistro) Usuario oAuditor = new Usuario(); oAuditor = (Usuario)oAuditor.Get(typeof(Usuario), int.Parse(Session["idUsuario"].ToString())); - - - //ahora se genera una auditoria por cada modificacion - //if (Request["id"] != null) - //{ - // //accion = "Modifica"; ahora se genera una auditoria por cada modificacion - // if ((oRegistro.Activo == true) && (chkActivo.Checked == false)) - // accion = "Inhabilita"; //lo hace Modifica Activo - // if ((oRegistro.Activo == false) && (chkActivo.Checked == true)) - // accion = "Habilita"; //lo hace Modifica Activo - //} - //Auditoria accion - //Auditor.GrabaAuditoria(accion, oRegistro.IdUsuario, oRegistro.Username); - if (Request["id"] == null) { oAuditor.GrabaAuditoria("Crea", oRegistro.IdUsuario, oRegistro.Username);