Skip to content
8 changes: 4 additions & 4 deletions ImprimeLocal/App.config
Original file line number Diff line number Diff line change
Expand Up @@ -21,12 +21,12 @@
</connectionStrings>

<appSettings>
<add key="impresora" value="ZebraLCentral" />
<add key="idEfector" value="185" />
<add key="impresora" value="SATO Laboratorio" />
<add key="idEfector" value="70" />
<add key="numeroProtocolo" value="30630" />
<!--<add key="urlAPILaboratorio" value="https://www.saludnqn.gob.ar:7118/" />-->
<add key="urlAPILaboratorio" value="https://www.saludnqn.gob.ar:7118/" />
<add key="tokenAPI" value="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJKV1RTZXJ2aWNlc0FjY2Vzc1Rva2VuIiwianRpIjoiMWQxNzEzOWUtYThjZS00OWNjLThlYjktYjRlODE5MWJjN2QxIiwiaWF0IjoiMy8xMS8yMDI0IDM6NTM6MjcgUE0iLCJ1c3VhcmlvIjoiQURNSU4iLCJleHAiOjIwMjU3MDUyMDcsImlzcyI6Ind3dy5zYWx1ZG5xbi5nb2IuYXIiLCJhdWQiOiJodHRwOi8vbG9jYWxob3N0OjcxMTgvIn0.cARfD5fdg5JGqvfBDjN2dd4yStHE648fSS2Ifw9KeV8" />
<add key="urlAPILaboratorio" value="https://localhost:7118/" />
<!--<add key="urlAPILaboratorio" value="https://localhost:7118/" />-->

<add key="aspnet:MaxHttpCollectionKeys" value="30000" />
<add key="aspnet:MaxJsonDeserializerMembers" value="30000" />
Expand Down
55 changes: 48 additions & 7 deletions WebLab/Protocolos/ProtocoloEdit2.aspx.cs
Original file line number Diff line number Diff line change
Expand Up @@ -1111,12 +1111,16 @@ private void MostrarDeterminaciones(Protocolo oRegistro)
crit.AddOrder(Order.Asc("IdDetalleProtocolo"));

IList items = crit.List();
string pivot = "";
string pivot = "";
string sDatos = "";

HashSet<string> pivote = new HashSet<string>();

foreach (DetalleProtocolo oDet in items)
{
if (pivot != oDet.IdItem.Nombre)
//Debo cambiar la manera que verifica los repetidos, porque ahora cuando se regenera un subItem el IdDetalleProtocolo no es secuencial
//Y en la vista del protocolo se ve "duplicado"
//if (pivot != oDet.IdItem.Nombre)
if (pivote.Add(oDet.IdItem.Nombre)) // Si Add devuelve True es porque lo agrego porque no hay duplicados
{
/*if (sDatos == "")
sDatos = oDet.IdItem.Codigo + "#" + oDet.TrajoMuestra + "#" + oDet.ConResultado;
Expand Down Expand Up @@ -1749,9 +1753,11 @@ protected void btnGuardar_Click(object sender, EventArgs e)


/// actualiza al paciente con la ultima obra social guardada: solo en las altas
/* No es necesario siempre se guarda -1 con el sil2
oRegistro.IdPaciente.IdObraSocial = oRegistro.IdObraSocial.IdObraSocial;
oRegistro.IdPaciente.FechaUltimaActualizacion = DateTime.Now;
oRegistro.IdPaciente.Save();
*/

if (ddlImpresoraEtiqueta.SelectedValue != "0")
// oRegistro.ImprimirCodigoBarras(ddlImpresoraEtiqueta.SelectedItem.Text, int.Parse(Session["idUsuario"].ToString()));
Expand Down Expand Up @@ -2673,6 +2679,8 @@ private void GuardarDetalle(Business.Data.Laboratorio.Protocolo oRegistro)
{ /// si cambió la marca de sin muetsra
foreach (DetalleProtocolo oDetalle in listadetalle)
{


if (trajomuestra == "true") /// es no trajo
{
if (oDetalle.TrajoMuestra == "Si") // estaba grabado Si
Expand All @@ -2689,6 +2697,39 @@ private void GuardarDetalle(Business.Data.Laboratorio.Protocolo oRegistro)
oDetalle.TrajoMuestra = "Si";
oDetalle.GrabarAuditoriaDetalleProtocolo("Con Muestra", oUser.IdUsuario);
oDetalle.Save();

/* Bug sobre la edición de determinaciones con la marca “sin muestra”:
* Si se genero el protocolo con un analisis "S/muestra" de una practica no se generan los idItem del diagrama
* (porque GuardarDetallePractica solo actualizaba TrajoMuestra del codigo de la practica)
* Correcion: si en protocolo se cambia a "Con muestra",se regeneran los detalles faltantes de la practica
*/

if (oDetalle.IdItem == oDetalle.IdSubItem)
{
/* Si ValidadoTotal (en ProtocoloEdit2) cargó idUsuarioValida por un caso de
* "sin muestra" se debe resetear idUsuarioValida para evitar inconsistencias
*/

//Caso 1: el análisis aún no tiene resultados (simple o compuesto),
if (!oDetalle.ConResultado)
{
oDetalle.IdUsuarioValida = 0;
oDetalle.FechaValida = DateTime.Parse("01/01/1900");
}

//Caso 2: Es derivacion.
//Los analisis Derivados no tienen IdUsuarioValida, solo idUsuarioResultado

if (oDetalle.ResultadoCar == "Pendiente de derivar")
{
oDetalle.IdUsuarioValida = 0;
oDetalle.FechaValida = DateTime.Parse("01/01/1900");
}
if (oItem.IdCategoria == 1 )
{
GuardarDetallePractica(oDetalle, true); //regenera=true --> se omite si es Derivacion para no generar una nueva Derivacion
}
}
}
}

Expand Down Expand Up @@ -2869,11 +2910,11 @@ private void GuardarDetalle(Business.Data.Laboratorio.Protocolo oRegistro)



private void GuardarDetallePractica(DetalleProtocolo oDet)
private void GuardarDetallePractica(DetalleProtocolo oDet, bool regenera=false)
{


if (oDet.VerificarSiEsDerivable(oUser.IdEfector)) //oDet.IdItem.IdEfector.IdEfector != oDet.IdItem.IdEfectorDerivacion.IdEfector) //Si es un item derivable no busca hijos y guarda directamente.
//Alta normal (regenera = false) --> el código funciona como antes
// Modificación con regeneración(regenera = true) --> se omite si es Derivacion para no generar una nueva Derivacion
if (!regenera && oDet.VerificarSiEsDerivable(oUser.IdEfector)) //oDet.IdItem.IdEfector.IdEfector != oDet.IdItem.IdEfectorDerivacion.IdEfector) //Si es un item derivable no busca hijos y guarda directamente.
{
oDet.IdSubItem = oDet.IdItem;
oDet.Save();
Expand Down
63 changes: 57 additions & 6 deletions WebLab/Resultados/AnalisisEdit.aspx.cs
Original file line number Diff line number Diff line change
Expand Up @@ -109,9 +109,14 @@ private void MuestraDatos()
IList items = crit.List();
string pivot = "";
string sDatos = "";
HashSet<string> pivote = new HashSet<string>();

foreach (DetalleProtocolo oDet in items)
{
if (pivot != oDet.IdItem.Nombre)
//if (pivot != oDet.IdItem.Nombre) //Debo cambiar la manera que verifica los repetidos,
// porque ahora cuando se regenera un subItem el IdDetalleProtocolo no es secuencial
// Y en la vista del protocolo se ve "duplicado"
if (pivote.Add(oDet.IdItem.Nombre)) // Si Add devuelve True es porque lo agrego sin problemas de duplicados
{
if (sDatos == "")
sDatos = oDet.IdItem.Codigo + "#" + oDet.TrajoMuestra + "#" + oDet.ConResultado;
Expand Down Expand Up @@ -389,18 +394,62 @@ private void GuardarDetalle(Business.Data.Laboratorio.Protocolo oRegistro)
// GuardarDerivacion(oDetalle);
//oDetalle.GuardarDerivacion(oUser);
}
else //si ya esta actualizo si trajo muestra o no
else //si ya esta actualizo si trajo muestra o no //3/3/2026 Y regenero los analisis de las practicas si no estaban en el alta
{

foreach (DetalleProtocolo oDetalle in listadetalle)
{
if (trajomuestra == "true")
oDetalle.TrajoMuestra = "No";
else

else // (trajomuestra == "false"
{
/* Bug sobre la edición de determinaciones con la marca “sin muestra”:
* Si se genero el protocolo con un analisis "S/muestra" de una practica no se generan los idItem del diagrama
* (porque GuardarDetallePractica solo actualizaba TrajoMuestra del codigo de la practica)
* Correcion: si en Validacion se cambia a "Con muestra",se regeneran los detalles faltantes de la practica
*/


bool antesSinMuestra = (oDetalle.TrajoMuestra == "No");
oDetalle.TrajoMuestra = "Si";

if (antesSinMuestra && oDetalle.IdItem == oDetalle.IdSubItem &&
(oRegistro.IdTipoServicio.IdTipoServicio == 1 || oRegistro.IdTipoServicio.IdTipoServicio ==3)) //Solo pasa en Labo y Microbiologia, en NO Pacientes se generan todos los items sin muesta
{
/* Si ValidadoTotal (en ProtocoloEdit2) cargó idUsuarioValida por un caso de
* "sin muestra" se debe resetear idUsuarioValida para evitar inconsistencias
*/

//Caso 1: el análisis aún no tiene resultados (simple o compuesto),
if (!oDetalle.ConResultado)
{
oDetalle.IdUsuarioValida = 0;
oDetalle.FechaValida = DateTime.Parse("01/01/1900");
}

//Caso 2: Es derivacion.
//Los analisis Derivados no tienen IdUsuarioValida, solo idUsuarioResultado
if (oDetalle.ResultadoCar == "Pendiente de derivar")
{
oDetalle.IdUsuarioValida = 0;
oDetalle.FechaValida = DateTime.Parse("01/01/1900");
}

/* Si es un analisis Compuesto Regenero analisis.
* Considero que si el analisis es Derivacion no se debe regenerar
* Considero idItem = idSubItem
*/

if ( oItem.IdCategoria == 1 )
GuardarDetallePractica(oDetalle, true); //true --> se omite si es Derivacion para no generar una nueva Derivacion
}

}

oDetalle.Save();

}

}
}
}
Expand Down Expand Up @@ -541,10 +590,12 @@ private void GuardarDetalle2(Business.Data.Laboratorio.Protocolo oRegistro)



private void GuardarDetallePractica(DetalleProtocolo oDet)
private void GuardarDetallePractica(DetalleProtocolo oDet, bool regenera = false)
{
//Alta normal (regenera = false) → el código funciona como antes
// Modificación con regeneración(regenera = true) → se omite si es Derivacion para no generar una nueva Derivacion

if (oDet.VerificarSiEsDerivable(oDet.IdProtocolo.IdEfector)) //oDet.IdItem.IdEfector.IdEfector != oDet.IdItem.IdEfectorDerivacion.IdEfector) //Si es un item derivable no busca hijos y guarda directamente.
if (!regenera && oDet.VerificarSiEsDerivable(oDet.IdProtocolo.IdEfector)) //oDet.IdItem.IdEfector.IdEfector != oDet.IdItem.IdEfectorDerivacion.IdEfector) //Si es un item derivable no busca hijos y guarda directamente.
{
oDet.IdSubItem = oDet.IdItem;
oDet.Save();
Expand Down