|
- 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" %>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
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
zcmXw9qp$Dp?;ik>{isp79ys|MI1-pN*;qb5(P%vh%oZ{LKj-{#Z7bOY
zEEHHc`4tQRyr1j^4gfA{eg)?Q0d7oYhLV;3uNBNs2c#du{t)kn@IR#bA>0qyeu(fx
zp&ugtQ0j+BKUDf5$`7@E_+OPIk3eZkLj5>(AQvDvAY&kBAS)n;pEKc)z<$I5#0|vu
zL!lovOe@xz{oMS||9=Vnm|MAw{~g%^Iy0FG3@ix-12Ed=eITsXM$=@_b4C41ONc(8
zvj-#F1&7b1=|oGkS5~N+%=KH#7BWX9u529&%N+_0J|6RXOK;YNu3or8wN)u@tA30;)kFro(rvxCzGu@~gr#Uw|;fC-oFqp){U0;z_h`Q|q-XBCt4i
zRM4Teu;}Q}meZ$)RXVpAwBq{4QD
z^#HDb^6R(l{qS%1f#f2#Z%rfC;(QjwdEk}{@!4+_UugrFr|hr{@$d-49Ki#>EpKUC
zM8%S(y=~yMIk_pZ*DtEwWdH9d)*)Liy}u*C_4khGwO4{VsjOUAY#Wwxj9>|MHay#N
zJG_;Z(jYWo%2EAXPAL<7PdW4#G)PocgMcfa0nf7rtz%aCE$_c2ZEM%JK&^1#>SQkg
z%Cn4W$Gybi;ZsuKkTO6@aRxNc!MQ)Qla^FE(Qu+o*NCxXPh+m^x#
zsgrXzFJ#vNgb8PNL@P-@#1lsyE`yeEdzeN9BJ*Gx5zOv+b(Mwq5RaHL*PxqKnv@$4
zg%ft-IB5lo3ygzgH9dmsfM8>%Ghj&VoBA)qc-uL#3vV@?Oz1;5cr)mq??ybojmJ3%
zL?*V(_cce^}Kx;C8oc{;otzBuQ9pN
zS!R+oll6Qjd1Jg?T}65z4)}kD(PT9HCZ$6D4v@-DDI(YKuqma#<}=@`BmkK{OfeO|
zUIAo|UG_o66=Ry(q&7%?C8scY;l)N{`v{6DpGug8e4<_J
za>%NVK9Ez_dhQH~6?aG=^6Z27wa5*<2AS}D>47GsdxR70IDa94ZbNqmA}Mpq%P|Ec
zk@K81`go9H>O|s<7W-djfWIbmXj~5JP+A!uJSf64!H8^FC#5(PWC0qc0I=Y-ooape
zzh|H_Ffg$&*=9_EG6>@t2uXL(MKDtGW@+fvj3D4I!WsD>l$yi`o)Q#A`Si+kvkF~%
zyN$lI+uvonUg?;jL_)nL6_mc)iNi)+dmP!kN)c)1;y*e(rf=5>
zdu*3=9D#p4YC4+S+@H}xm;9%96A6kty<9L01Jae_70B_-Rd}bzQ|uimcK0dsWbKLh
z2;o6dpxAv=2_Vkq5*qR01OEU`*BMHJRWZHiEK|}9F_IC19RtF+Q8_9jPRDH{HMh(r
z?-Sd-U)Jx!G`k{{$Wx*2yd7F_;u(?4c0H3-*jijYrb{h~WjjcDZ2$)4muI9H)A8u3p=^}2er00#m+dZ5R;m&vfP+rzk3c!rpa-j5e|fy(
z?3u>`G5E*Q65<}fHrjBrQ@4;Dy)~rFx2=
ziex=w8X-Qef$!W{6oJ=8KmpHJC`aD*-v|N52&1IA-tew)=C`U_#!2)X^XL2&l>@1<*K3Bwb&~?$SjY~~=&=|{wK~co!nP&zD*`xYg5V_Aj
z01M4u*N-KfQPLWPG-kGkF!t7@ozK^rbx{}9s{#!FCNz{J#(UB_dwJuJA`L>T}ez{!WFxd*7@kou(g1n3IeHHPYso@
zF#-7tAOx^0zES2ewi&W;eDMtQVI|m;lfOKG+T6F0t@#gufqR0wFCM*$4uqG&5*=iZ
zSU3+sT-U>lA{1apNOpEzsCKv%7-6#pTNCp-;pOH{zm=kQ2{~k$cI2iUAV9JDMDi3}
zLafl7Neq)s=oEUAWF~A6_cJgu<{T)xLP4AntdO97x;vi1$E6JCNW-@b^Y%M^0z~%aYKe5hWMhBv#t?RIuO}GZN`ER}jbT
zYHV4i$+>?@xBZcoA(xP
zC&M)f{qkHYQlV^SmFzdj@F0u!#_!YcL2A_+;_iM)#Eg8`Z<#Ah
z|1s%SX&9kkV1hEcU%|vER^-H7dwl884sH4r@PCGHMn;5)T(nrb{e;Vh58h|KbPiZ4
zl8M0xn)}geVBz~a|2J?0gZ?DhfMl)CsCYqnHM2{IZU%=c<4Qqz8L@nXnV6=<1~`x}`bw2xEX8;D
z>2y_6EC&t75#}YU2eKzYxo_kZT(%H3jYJwGj5_V-q{XxfZ*#b$_3Q{u=N|YtT-|j(
z{OBrtva#j7ujkiyyhFTK;SDeEtw=xsVw*mytJ%wrHrVLy^Y$IkU%n|5R7yU8^=@wexX;^
zfnJWTf+V(*!<>)B#ouqrr&x%@lJl+kD-_TtD*amxA+P1YgjTsO8j!s0Bk2T#SE1hA
zXnqHD`vvuS2bYD#L*nHqQFLgs)S0|z<65N++t^6P_AyTRVn|yqUqh1x6~{w{2mh;K
z?ut$mKZMB5*GzKKdxW8GZP?@kj9S7xS^Wv?so`C0gN1WaHW{>P%_hu6u_|l}nfj#L
zaxTGn`LfAUT`86nJKY#TT#R3t)mL3(`T}zHMK~1FVCF#
zpcL%L1J>}qD!7T?4w;&(+O3HA=kMa0mYG;vWalT-Tzw&R{8#uXYLwd9yhZ~LX@OvsZ`OV04RS?M)^@hti4${
zvr>yj$ofEPlBLO@MFe`|*hG!c>dieRp`9QoxokpUK4kh!5w
zf<37ef!8%O!*8chJUZlNJm$a+=jHyHIcs)(1QL=JuG`dmXz
ztQT9WC_Nrpn5GNS^BBGCA7-RY`kTvfJm%N2U(`_8-6J4`04qhs?|9r$b57##r;?#&
z{xCw8`1pPV_N;W0;j-LiGc)#l*o?%BdP#!%zd{X6c}7+XDgeCO&2O&`sb|GffoQ??
z1mqWyD9v2r-n5}yHMU>Pui=}1BFpGZG=jay0|CKCiBGd|ud0%0ZWOUt>6@Q@Tx)fC`VLw+-f-)!%_
zI*9P&tu1zns0XK7Q?F%|bL0YMaI1@^HiQcQR(z<%07KME#&M5P-KE+^1jE4wod6Ws
zS<24-KWo=snnH3~QLLB2pi|2bqXAPc>abk;^#v#Bt_r+x%%&gz~$H!)6=9=0s-Wy}nPs_$&TD76-N7FCw>6FXyTgHCUT@K+>33QFQ!Prj!c3whK(>s5o>P%3jxe
z>nTvV$6h$ln%>|zfGA#cs0_b5$|2_C+V_4?!)5UOn}e9goV3#S8JIdr$WJ4zDg{FW
z-;ZpC8TScL;s!ZLVBapOE(+2P5$CK2w>iq%Gdho9u-<5!4}cwE6kMPu&D
z0S&C7(RT@|rFA&+swDdc`K@qcLBp^nfP+Z*Zqp%{^E2r8Z^-qa7^m5&MIippB;ApG
z9BkKdGTEenl5;FEmN;a>;U`USnnyESudQRG+4qZsdWlwmuC{5P+@f!fcdG+mb#_8`ORmzANG8`lWI0~IaRPnd=Knf_3%!ZY5!tIc
zNc;pll_4M;=$B6~+E%31zv|znv1qk6set;YfX5xoX8Pn47+}3)>j;^g?SV*!rXuE)
zpmZ!__yf#1t;f3b!
zU@|KnCbgMl@fv2OMrMj)&wY-lLZc7|Kd$8lhDgQc9CLP=9v11GFZ_8)0Q|2%P753ecT-qLB)Il
z0-tXOB3QLA_mra&i-kkDsU%h15R*BCnz@tS=f`I9$L>guyYi7!k~6d=Mc+kx3cOp|
z9Ypt2TFpEvMfX>#ib-<{GC<&8#6#+|KAvScFwj4Fwpm9mkYh2%=b_YN5H4elfnJ}A
zbSD-;O>NM?Z68MMfA8x00fo1QhjMPO31F+l=na0iTN-gCmd1EUX?Z<2a~&@+78wj)
ztLk(3>dO2Q9Su3W!6m~5jzHU-Bxg}32mI#UrOD^#lR%%UUwl-8zW@qla;gUZ;_R{63+9im@x61+=@lNDJ9fh&}VE95ZWks)ReI~g4Bk`ndU4Rq#%yww4
zo)(>8jJCkKg(l#U_687ulwnw&I`9d_h*Fj2B}^yMz8$FJO<|^ZpbmHlTRIroD1H{1
zLn~NMD;&_wp)F&`BVh5lJgP3&8I-t^KX*iOU&2MXmu`abRE$5~Q2((F6bkl0zHpPo
z^0re*gixqL&0Qn3^iN{_JwjTx@#>Y47JJt10y(!;OH2idod^i(7+mAYrljwT(~Ihz
zv429lw+GR<7-Gm!o5!x=p$87XD{!6!uZ>HtZe7C9?@!ef4K+u
zGgU?>Uxm{}nQt8&T+3TDS*c2>?I|m4Kugym6f;o3$cL{Hm?|tgB#t-!FCdKy5#TJ5
zbm_0-$&Jpgb-*%8UMcp;;szRL?rjf`MqRb0hxgte(*5<2;+Y57v8|&r2rv^I9Cna0
z!oq3EJEp9b-Xmr!^kzh6&GMSg;8b>Gmdf?X!4HY!hg(N%&=7xhwoCpZ-J5
zJK8z*^A%o6)Q@!qMzI}riyUE&!o*1dA(iIlfeHb@niFyGyvG3-
z=N4j%ae$WNTx;xR`|==CtL>CnImg|6GUn!vLE(t_D^7`jro_Zs>UJRNDYVu-w76h7
z`x=Wj?&K^)pI!kU<~44pm2o!hm<=rX(U>^KP~+*%#%f{SL2ifiTi_)dg2iO@8>p
zGYi@izB>QLY1bPsp5U-O3&EmSYj0^DHF6WeRsqSUrP%G5#lX#i8z%P1n8`tRp?ESP
zMn#uA=-^5;M8IjzVVKuulwn8&SFCqwgJx)xCUoO!J&1B_*n?=J%|<78B@vEFB2rug
z+a$3_dZgkSu*UAiq>@MA*K|A=oic{O^=Sn>!T2n&mL~GYPN;&P48JjY@Rt-^j61mj
zJb;rDzucTw3@lapAn|03o!~D)(@DLt5h0To%ZKq5wsG(zvO9k&AnYDLL6KIl
zoOxs}iH3~^PRJFxX~l8q#c<_~McREFlLpRWVZ{vHbCQ!WyPz?KWc)!)FR8vkQ93A9
zUA$SbztK0pO0pJlEfzFu_5Jz@>H%KTkl7_Rh4-#-3BuAO(609XXx&gbHL?s}sso0K
zgPk;o)+aEL(8Hs){E~El6+eyB2pZp>^l!5j*hs
z_&$4KEmwdZ!73mo9fW{dL_L~
zji(4#hL!8`O4t+azIp<^W7kbFYe(U@$!;4{G}jt?@=Jyx>w{rbO#x)g!9^w&;*cOk
z93(c;(2;Sn~lBn
z2_dT3lpyn0ONy#EW5hD+St3!FfH>n?E^yvghH@}zA+KQMXeN!to#5Mq#a0XOIIZvx
zCiwCh@{g$cJ`?a6J_GPgTB@t!ynDl+6OD$2z_pLizF3SX4BlyVv<>H#EmWvHym+T>
z%h^0Q2DcJ5){d(*f#PvWvU~6GTA5)7=vCtF5&UUg{mZTS|=c#QN`&V)zlTC2f3vH(rpyc^jmcb^{4D!}5P
z0~bVnyFOZd@8bs!xmzo6F$lL#nED|{P*0->hwaIu4aN#y^kqaA6sT^}JX8ZLO`Mud3^yk+B=7xXPl6KX8C7
z;}b*d3zLEi4tUC9y0pxv?kr@};Ymf))liz!_OfQ{q)}qqd~rjcXFXF&1uE+Vkp3Mr
zD}|7}OWd(^yeJw=lH$)YCp@=|NlozPy;b!gMcpaU)rU(7t>UQNe><;MilBc|BG
z>Hz)y&vId(>NVCJxU>VfHsH8i#_MbJ)CYHHZ&(tN)}D_VADlyoTyU^U;(b^*Yjf?u
z`(p>`+$dHyCD4(xmCC62Yi@L}YqCmpRp*j$W7HG{%Id@i;brM9N^-wdZP8tas1vKZFw$C@d)5?V`ls`
zEy=S!H({E=y8J1KpGU{Lx0P_)sK5%uuOLa!4zLu_h@h-nTA1vfo}}LUr8}JCWzRm5
z)2vUYezELTpAP!uWPYtl!kc=pBkDd>$4I&wDl<5dW4fvNFZM}^r^!pXu-MUsy@EXl
zisni`+FKOwHW9*ABCC9!5t?SA@b%?p2j1U6JJII8N52GP2K|U;VcSAv|iJ+F8)GOtE4IO>Q>Gh4n
zJ`|fB(mg1eg!DmNNDF~;<@|zH!xljgCBQ8}x3e`FP0MC}19H?gd(gSJ9BC?G1uk62
zaG}$I7plFw)W1HNrK++wK^FAnyGQ*DIljLG%4fv5fqm0xBrP&<=+XgnygZiPUz@V0
z^0Z(^3;Ybw5O8=GkD&fMS}(g!&AxK8>?Oc_H(kj;j#s4Q3}kx=6CJHk$O
zF4t#Iw2&1+8?HbyfSDa`T(vUv1mpsiBm9gfdB0M4zSAexicdEjd`&Q(%oAG~20fa_`UvB)$
zZcr-M3U(=S0-s*=U;P|T;o>H#dbGtmKt|G=6^|3p1bCY@CRC`<;3pRM(xiyj_EUM1
zpvQ;fUn=NrXS{@@ny_gSAtg;Sn)VsNH~F$?Rmen^h16{KUc~zmkAt0U4nR>XfKs`K=$nh2o&vkeQ{<(Um>{&4a^DJBBC{dir!G
zx|-#}+KD`;@O15>QuMrmS#4Tl0TI3sTp4A8JkC4(r*Lo8Jr
z81)M=qpRh4Ftw*d%pE{WkW|mt(1IHndEpc~GmxL(BW_>|;d+MAfEdJ0m|ah3O6h^V
zr$sE>&4yAWVdZEgoeItZd~2{^Mtm%SA^-?u3JK&$==s2}ot=q3qdyjZD}jW+Ntdj#
zwj8aT(4FYZD|)ux(;P+_BWm%Q_(bc1oXoKF?bT5Og>N$&j;{pmaKfftIam95%+9EY;E4V;Z1J^a#D@9;^ri?#9V?JSxnq`n*|C_=CvB(
zZNt$1+}4BZ%W>S#J)>Vk49GgQhEe4S!H0|59^7Sb>#O>v04nLPZd(&LD_~LoK}$=H
zNM{Vh7rn;m%_o`4jMA@R<(KB%^hyH+=OmuZzbO-|Fifzv)j=KfenG{4{!_W<{zOBo
zz+!QI3rlYl|LjPbr%?nz{8bnyUYNt`*09ARMl56@RCl&&L_Fw&Ttjjq472Pl8TN9h
z7bV0qUMmBY01P1kkm$U$^p2O`XV-P76%MGSe)tr*6z`I-mJy?8v4&
z$9s9jBe^ceEmU^!*GIGMg4M&T>u~Pr70J94ce2SLtgx9UGVl)srZ8lNfF{Wg>+cQ+
z@Er%i^Q%o7E0Zy)xOCM?Xt(_H>5S?3?J{!rGv9WYzG<`H>K%WctHz`L;x1fY?Go#w
zya>@S1IWIdC0@7Bil?O#v!dLnr>|pR&ZKjwiSM#gD3I+6m|9nn`z@S$7UbUiMAl;R
z8Gons%6h5E4axT&W%CN@*c7?Fe?P;bse_cAmP~mC&&9P}l=nf0n&3>=9A8Fl=(m
zE6;|%H8wdI@woMrK#+qnt*chY4->)}rthiy%uipf6Ha>n{3^Q#yahIsQmW!g79wTH
z-_)eI-+OyqLsK(e9TF4!S%Bk#Sr~$^0kFg`;v>j3*WqnH%t!V5VBTD(ix^*wyrj90
zA{!W-B`}Yuu)>9aheH_46QM&vrRGh(YYxu+E30YC#gW8>shL&>$7*?MPW#0I{jAl|
zN+uf4{@v?cSxj!2R%oF^?}o%-Y~Kc`wM9C^33aFT-P#;4BoE-bVYi6{SM8SP0%Dsc
z8ChWb)|+a_%?B`n98P=8w8kW!u^^ZR_nqp8&t$t&G(*fFWX(51*-
z3noI=FQ53Gy^ZOEw7!VJw?@MOmKByolF0v9$YaX2>tS@OYs)yb#>hF`csOCiE>QP0
zQMyKLnbt-872htZowWu|_h#3*ZPI;1Nx@pEwuG;$Drm@)tH14>9PK8b0QAgRuGFAV
zr^P2&GtLJqPR{|78^gxOzy=_l!T?b~)3J*I+U;r`FveF%uIuD+TDRCT#PR~!ua+37
z50~SXOhI(z+pdz_{$8&e&QOue#AK1qFfNu%@FhH0K765oZasnmEgiZbgyl3OG}ap#
zM-rzYWw3gGNTx(mbR63g0FnaOXWht^Hsg$U14fqYS(6Kaufbwx{sAhpiIPo97mMpJ
z(bdGV23`MC;9X-vXZQwFFJ(mfRzf-gA&}*EvtUk`J0{Lu=Bgc32eIB5($Zdbp}5V<
zo@r$Y!YEMAMS)%3bB#+XZQsGT+yN35H~kyvP6f%)S3)VvH#p5*Kpe(Jq@&mRFD&4J
z9XifY^p+48JUyS+eDA^N(50v|**v1IqRn@KLbQYGOJS?F#vJ}hx7n+cC%u|QOkyhi
zqJCPf+u_(fL=dP9TxmTg4g3XpZUP+MLop3b^U#e~fc~?YuVnRFV4S;{L%9;jJf~UJm@TpDw_k>R^%``UVwp=5
z?_7uYBP63vFL!71J(_DK?&wzLJreC`-tO`-t_gUGfa6*Xz@G7_3mZz_nVg_ppjv;O
zYMDeRYu3{zx@R5hYW#&RJt$!o;J>o4%l
z#>~f0u+aBRIZ|fZbcvb2K)&S&!Ozlbj4^^b5Rw%IKng_p9JxJbSP5A9o62cSb}cB6
zAj8LOJ&d|#l>TQpXO+1*XM}#R%L|FGFeR)hwpByp($gNn~9(#84)
zn3rz5kk4W(oiK0##Uj|ki)LGOXM`}*wqtt5PWcjwu~M9lD+!oZyQhI%6oUN@o+jt^
zTZ1%o*aFqN)OYjP)HW@Rj#9fFR{*QvJ}*5G#)3_&l06yuPJ07yKG<73Yn4_PRd8lI
zkmM!@afFRPN-+Ldkpc>PNC6Ct-|a;KfP*^)Jenjp@Q4M=rGPTM#(hRj#wf`TE<~U_
zzrS{5Nb-=RwgO4go9`4->A2rVz2mY3aT&}#t(>izQj!g3ARa!**+m0VIe9kmO=57I
zH{8QNb9|_PAe#sN%p*4zarSL>(@K|$tUpb4@fidM70NMCt}BDP!euh_xotTDXkiGp
zERN{;{>8+{Pd!C43e@l1*gtTvlkuKU*q=i7L<|q{Rx4M7T#m2`4hd{cK`mvx3a@-*O<
z64ya+iREHSH52P8Uf9VEA6>Jqu%Lpc;PjU%YqUjOc{2z~;8qux<&*7-#A0)qcm4u~
ziO}wzEkS$J3Bqp2#d#r;@H$^FDPq+k5XDx8F*0!!&QVqeDpGJlAwjo#5LK_re%{(^&x)G#-Sxwu4-)^EZ1
zkexL}HnKe^fCxRxRJk6S%gTl&zX2yoe0S4F(hYOMv$tn49#-nXn17EkMqw>QxruXe
zypI}txl53bH9)@%J8;7We8}$`Qd#+RH9pc{WdV>@HyZDr+gxaZnN7%2SH*cAsBzkQ
zA1|Y9rba;~oixza_wD-IgiK?fw)hUE*mh1Q3{dAahLCTX+77ST)#BlX5XypwlFp62
z#P)3p3;N@0obJmIB_e%K707)HVFxyG=7jYEBM%$MOragoe{Wy_9@@xbI#7Zlf6Mc6
zhq()Je2d=G;_QI<67%bLA*8^>8QH~=?@hBvNxjwWB6%Fc1*!RTAk5P1k33mN*
z&PWH*^~=`H!nBP8g1?cB|6)I5K>d^A=#wEx(D<82)~e1Lk-*z)Zu2m^<;Gx2;-d9+
z7gYC<9J$^}k^4!>RX5}6Fbv600k3f4iuy_MAn(t(q-z{^}z
z#Ni2us7=H+OZi~D=<+GLRY2<;OgE5f+;wf{JRiaAkoYMXkXj>+f%DHME5D1O(zFuC
zzCLR;Bm4j!f$sX!Y`rJ1f?pXprRmnU@O$rZ&;pJP$LTCcs2i@|F$P~HNrRH{wq#(M
zqMqDPSqD5A_!Z%C$)GmMA4t{$1SEhHvTA?5#f^KnF%mq)?szN)4L&wl#xH|-1
zdAsj5Smcn7inEpatNzqW?8YNck5%GrUbr@jS}g5tu}q+wyxl|CWCumMPTh+IE(^6?
z5W|UBH3-c-fc3cpBiJ_-EYuhRLcW0oP5uOBd^qPA5KTzieRPoW40%giKdXcC*T0_X
zJUZIb2kKS|Nl?xVB94OR>}d
delta 12851
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 |