Ejemplo n.º 1
0
        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);
        }