Skip to content
53 changes: 46 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 @@ -2673,6 +2677,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 +2695,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 +2908,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