public static List <CorralInfo> ObtenerCorralDestinoAnimal(string arete) { var corrales = new List <CorralInfo>(); try { //var animalPL = new AnimalPL(); var animalMovimientoPL = new AnimalMovimientoPL(); var seguridad = (SeguridadInfo)HttpContext.Current.Session["Seguridad"]; int organizacionId = seguridad.Usuario.Organizacion.OrganizacionID; //animal = animalPL.ObtenerAnimalPorArete(arete, organizacionId); List <AnimalMovimientoInfo> movimientosArete = animalMovimientoPL.ObtenerMovimientosPorArete(organizacionId, arete); var movimientoEnfermeria = new AnimalMovimientoInfo(); var movimientoCorralOrigen = new AnimalMovimientoInfo(); var parametroOrganizacionPL = new ParametroOrganizacionPL(); var deteccionAnimalBL = new DeteccionAnimalBL(); var corralPL = new CorralPL(); double diasEnfermeria = 0; if (movimientosArete != null && movimientosArete.Any()) { movimientosArete = movimientosArete.OrderByDescending(mov => mov.AnimalMovimientoID).ToList(); foreach (var animalMovimientoInfo in movimientosArete) { if (animalMovimientoInfo.GrupoCorralID == GrupoCorralEnum.Enfermeria.GetHashCode()) { var movimientosDiferenteEnfermeria = movimientosArete.Any( mov => mov.GrupoCorralID != GrupoCorralEnum.Enfermeria.GetHashCode()); if (!movimientosDiferenteEnfermeria) { var primerMovimientoEnfermeria = movimientosArete.LastOrDefault(); if (primerMovimientoEnfermeria != null) { movimientoEnfermeria = primerMovimientoEnfermeria; DeteccionAnimalInfo deteccionAnimal = deteccionAnimalBL.ObtenerPorAnimalMovimientoID( movimientoEnfermeria.AnimalMovimientoID); if (deteccionAnimal != null) { animalMovimientoInfo.GrupoCorralEnum = (GrupoCorralEnum)deteccionAnimal.GrupoCorralID; movimientoCorralOrigen = animalMovimientoInfo; TimeSpan diferencia = DateTime.Now - movimientoEnfermeria.FechaMovimiento; diasEnfermeria = diferencia.TotalDays; break; } } } movimientoEnfermeria = animalMovimientoInfo; continue; } if (animalMovimientoInfo.GrupoCorralID != GrupoCorralEnum.Enfermeria.GetHashCode()) { //Validar que el corral no sea el de Sobrantes ParametroOrganizacionInfo parametroOrganizacionSobrante = parametroOrganizacionPL.ObtenerPorOrganizacionIDClaveParametro(organizacionId, ParametrosEnum.CORRALSOBRANTE.ToString()); if (parametroOrganizacionSobrante != null && !string.IsNullOrWhiteSpace(parametroOrganizacionSobrante.Valor)) { var corralSobrante = new CorralInfo { Codigo = parametroOrganizacionSobrante.Valor, Organizacion = new OrganizacionInfo { OrganizacionID = organizacionId } }; corralSobrante = corralPL.ObtenerPorCodicoOrganizacionCorral(corralSobrante); var lotePL = new LotePL(); if (corralSobrante != null) { LoteInfo loteOrigenSobrante = lotePL.ObtenerPorCorral(organizacionId, corralSobrante.CorralID); TimeSpan diferencia; if (loteOrigenSobrante != null) { if (loteOrigenSobrante.LoteID == animalMovimientoInfo.LoteID) { DeteccionAnimalInfo deteccionAnimal = deteccionAnimalBL.ObtenerPorAnimalMovimientoID( movimientoEnfermeria.AnimalMovimientoID); if (deteccionAnimal != null) { animalMovimientoInfo.GrupoCorralEnum = (GrupoCorralEnum)animalMovimientoInfo.GrupoCorralID; movimientoCorralOrigen = animalMovimientoInfo; movimientoCorralOrigen.LoteID = deteccionAnimal.Lote.LoteID; diferencia = DateTime.Now - movimientoEnfermeria.FechaMovimiento; diasEnfermeria = diferencia.TotalDays; break; } } } animalMovimientoInfo.GrupoCorralEnum = (GrupoCorralEnum)animalMovimientoInfo.GrupoCorralID; movimientoCorralOrigen = animalMovimientoInfo; diferencia = DateTime.Now - movimientoEnfermeria.FechaMovimiento; diasEnfermeria = diferencia.TotalDays; break; } } } } } int diasRecuperacion = 0; ParametroOrganizacionInfo parametroOrganizacion = parametroOrganizacionPL.ObtenerPorOrganizacionIDClaveParametro(organizacionId, ParametrosEnum.DiasRecuperacion. ToString()); if (parametroOrganizacion != null) { int.TryParse(parametroOrganizacion.Valor, out diasRecuperacion); } if (diasRecuperacion == 0) { diasRecuperacion = 7; //Valor por default, si no se encuentra el parámetro de la organización } if (movimientoCorralOrigen.TipoCorralID == TipoCorral.CorraletaRecuperado.GetHashCode() || movimientoCorralOrigen.TipoCorralID == TipoCorral.CorraletaRecuperadosPartida.GetHashCode()) { var tipoCorralRecuperado = new TipoCorralInfo { TipoCorralID = TipoCorral.CorraletaRecuperado.GetHashCode() }; List <CorralInfo> corralesRecuperados = corralPL.ObtenerCorralesPorTipoCorral(tipoCorralRecuperado, organizacionId); if (corralesRecuperados != null && corralesRecuperados.Any()) { corrales.AddRange(corralesRecuperados); return(corrales); } } switch (movimientoCorralOrigen.GrupoCorralEnum) { case GrupoCorralEnum.Produccion: if (diasEnfermeria < diasRecuperacion) { var lotePL = new LotePL(); //var corralPL = new CorralPL(); LoteInfo loteOriginal = lotePL.ObtenerPorId(movimientoCorralOrigen.LoteID); if (loteOriginal != null && loteOriginal.Activo == EstatusEnum.Activo) { corrales.Add(loteOriginal.Corral); } else { var tipoCorralRecuperado = new TipoCorralInfo { TipoCorralID = TipoCorral.CorraletaRecuperado.GetHashCode() }; List <CorralInfo> corralesRecuperados = corralPL.ObtenerCorralesPorTipoCorral(tipoCorralRecuperado, organizacionId); if (corralesRecuperados != null && corralesRecuperados.Any()) { corrales.AddRange(corralesRecuperados); } } } else { //var corralPL = new CorralPL(); var tipoCorralRecuperado = new TipoCorralInfo { TipoCorralID = TipoCorral.CorraletaRecuperado.GetHashCode() }; List <CorralInfo> corralesRecuperados = corralPL.ObtenerCorralesPorTipoCorral(tipoCorralRecuperado, organizacionId); if (corralesRecuperados != null && corralesRecuperados.Any()) { corrales.AddRange(corralesRecuperados); } } break; case GrupoCorralEnum.Recepcion: if (diasEnfermeria < diasRecuperacion) { //var corralPL = new CorralPL(); var tipoCorralRecuperadoPartida = new TipoCorralInfo { TipoCorralID = TipoCorral.CorraletaRecuperadosPartida.GetHashCode() }; List <CorralInfo> corralesRecuperados = corralPL.ObtenerCorralesPorTipoCorral(tipoCorralRecuperadoPartida, organizacionId); if (corralesRecuperados != null && corralesRecuperados.Any()) { corrales.AddRange(corralesRecuperados); } } else { //var corralPL = new CorralPL(); var tipoCorralRecuperado = new TipoCorralInfo { TipoCorralID = TipoCorral.CorraletaRecuperado.GetHashCode() }; List <CorralInfo> corralesRecuperados = corralPL.ObtenerCorralesPorTipoCorral(tipoCorralRecuperado, organizacionId); if (corralesRecuperados != null && corralesRecuperados.Any()) { corrales.AddRange(corralesRecuperados); } } break; } if (!corrales.Any()) { var tipoCorralRecuperado = new TipoCorralInfo { TipoCorralID = TipoCorral.CorraletaRecuperado.GetHashCode() }; List <CorralInfo> corralesRecuperados = corralPL.ObtenerCorralesPorTipoCorral(tipoCorralRecuperado, organizacionId); if (corralesRecuperados != null && corralesRecuperados.Any()) { corrales.AddRange(corralesRecuperados); } } } catch (Exception ex) { Logger.Error(ex); } return(corrales); }
/// <summary> /// Guardar la salida por recuperacion /// </summary> /// <returns></returns> private bool GuardarSalidaRecuperacion() { var regreso = false; if (lisBoxCorralDestino.Items.Count > 0) { var lotePL = new LotePL(); var lote = new LoteInfo { Corral = new CorralInfo { CorralID = corralIdOrigen }, CorralID = corralIdOrigen, OrganizacionID = organizacionId }; lote = lotePL.ObtenerPorCorralID(lote); var animalMovimientoPL = new AnimalMovimientoPL(); List <AnimalMovimientoInfo> movimientosAnimal = animalMovimientoPL.ObtenerUltimoMovimientoAnimal(animales); if (movimientosAnimal != null) { var loteDestino = new LoteInfo { Corral = new CorralInfo { CorralID = corralIdDestino }, CorralID = corralIdDestino, OrganizacionID = organizacionId }; loteDestino = lotePL.ObtenerPorCorralID(loteDestino); movimientosAnimal.ForEach(datos => { datos.LoteID = loteDestino.LoteID; datos.CorralID = corralIdDestino; datos.TipoMovimientoID = TipoMovimiento.SalidaEnfermeria.GetHashCode(); datos.Activo = EstatusEnum.Activo; datos.UsuarioCreacionID = usuario; datos.UsuarioModificacionID = usuario; }); lote.Cabezas -= movimientosAnimal.Count; loteDestino.Cabezas += movimientosAnimal.Count; using (var scope = new TransactionScope()) { animalMovimientoPL.GuardarAnimalMovimientoXML(movimientosAnimal); var filtro = new FiltroActualizarCabezasLote { CabezasProcesadas = movimientosAnimal.Count, LoteIDDestino = loteDestino.LoteID, LoteIDOrigen = lote.LoteID, UsuarioModificacionID = AuxConfiguracion.ObtenerUsuarioLogueado() }; lotePL.ActualizarCabezasProcesadas(filtro); scope.Complete(); } regreso = true; } } return(regreso); }