/// <summary>
        /// Carga el valor de los parametros de criba entrada y criba entrada salida
        /// </summary>
        private void CargarCribaPermitida()
        {
            var parametroPl = new ParametroOrganizacionPL();
            var parametro   = parametroPl.ObtenerPorOrganizacionIDClaveParametro(organizacionID, ParametrosEnum.CribaEntrada.ToString());

            if (parametro != null)
            {
                int.TryParse(parametro.Valor, out maximoCribaEntrada);
            }

            /*else
             * {
             *  SkMessageBox.Show(Application.Current.Windows[ConstantesVista.WindowPrincipal],
             *        "No se encontro el parametro ",
             *        MessageBoxButton.OK,
             *        MessageImage.Stop);
             * }*/
            parametro = parametroPl.ObtenerPorOrganizacionIDClaveParametro(organizacionID, ParametrosEnum.CribaSalida.ToString());
            if (parametro != null)
            {
                int.TryParse(parametro.Valor, out maximoCribaSalida);
            }

            /*else
             * {
             *  SkMessageBox.Show(Application.Current.Windows[ConstantesVista.WindowPrincipal],
             *        "No se encontro el parametro ",
             *        MessageBoxButton.OK,
             *        MessageImage.Stop);
             * }*/
        }
예제 #2
0
        private bool AplicaEnvioMarel()
        {
            var result = false;

            try
            {
                var paramOrgPl = new ParametroOrganizacionPL();
                var paramOrg   = paramOrgPl.ObtenerPorOrganizacionIDClaveParametro(organizacionId, ParametrosEnum.AplicaSalidaSacrificioMarel.ToString());

                if (paramOrg != null)
                {
                    if (paramOrg.Valor.Trim() == "1")
                    {
                        result = true;
                    }
                }
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                Logger.Error(new Exception(Properties.Resources.CancelacionOrdenSacrificio_ErrorValidarEnvioMarel));
                throw;
            }

            return(result);
        }
예제 #3
0
 /// <summary>
 /// Valida la obtencion de los parametros necesarios para la ejecucion
 /// </summary>
 /// <returns></returns>
 private bool ValidarParametros()
 {
     try
     {
         var dataLink = new GenerarArchivoDatalinkPL();
         var parametrosOrganizacionPl = new ParametroOrganizacionPL();
         var parametro = parametrosOrganizacionPl.ObtenerPorOrganizacionIDClaveParametro(organizacionID,
                                                                                         ParametrosEnum.rutaGenerarArchivoDatalink.ToString());
         if (parametro == null)
         {
             ClientScript.RegisterStartupScript(GetType(), "myScript", "EnviarMensajeRutaNoConfigurada();", true);
             return(false);
         }
         rutaGenerarArchivoDataLink = parametro.Valor;
         if (!dataLink.ValidarRutaArchivo(rutaGenerarArchivoDataLink))
         {
             ClientScript.RegisterStartupScript(GetType(), "myScript", "EnviarMensajeRuta();", true);
             return(false);
         }
     }
     catch (Exception)
     {
         return(false);
     }
     return(true);
 }
예제 #4
0
        private static bool ActualizarParametroEjecucion(bool ejecutando)
        {
            var usuario = HttpContext.Current.Session["Seguridad"] as SeguridadInfo;

            if (usuario != null)
            {
                var parametroOrganizacionPL         = new ParametroOrganizacionPL();
                ParametroOrganizacionInfo parametro =
                    parametroOrganizacionPL.ObtenerPorOrganizacionIDClaveParametro(usuario.Usuario.Organizacion.OrganizacionID,
                                                                                   ParametrosEnum.EJECORDENREP.ToString());
                if (parametro != null)
                {
                    if (parametro.Valor.Trim().Equals("1") && ejecutando)
                    {
                        return(false);
                    }
                    if (ejecutando)
                    {
                        parametro.Valor = "1";
                    }
                    else
                    {
                        parametro.Valor = "0";
                    }
                    parametro.UsuarioModificacionID = usuario.Usuario.UsuarioID;
                    parametroOrganizacionPL.Guardar(parametro);
                }
                return(true);
            }
            return(false);
        }
예제 #5
0
        /// <summary>
        /// Valida la obtencion de los parametros necesarios para la ejecucion
        /// </summary>
        /// <returns></returns>
        private bool ValidarParametros()
        {
            try
            {
                var dataLink = new DescargaArchivoDataLinkPL();
                var parametrosOrganizacionPl        = new ParametroOrganizacionPL();
                ParametroOrganizacionInfo parametro = parametrosOrganizacionPl.ObtenerPorOrganizacionIDClaveParametro(organizacionID,
                                                                                                                      ParametrosEnum.rutaArchivoDatalink.ToString());
                if (parametro == null)
                {
                    ClientScript.RegisterStartupScript(GetType(), "myScript", "EnviarMensajeRolUsuario();", true);
                    return(false);
                }
                rutaArchivoDataLink = parametro.Valor;
                if (!dataLink.ValidarRutaArchivo(rutaArchivoDataLink))
                {
                    ClientScript.RegisterStartupScript(GetType(), "myScript", "EnviarMensajeRuta();", true);
                    return(false);
                }
                ParametroOrganizacionInfo parametroGeneral = parametrosOrganizacionPl.ObtenerPorOrganizacionIDClaveParametro(organizacionID,
                                                                                                                             ParametrosEnum.nombreArchivoDatalink.ToString());
                if (parametroGeneral == null)
                {
                    ClientScript.RegisterStartupScript(GetType(), "myScript", "EnviarMensajeRuta();", true);
                    return(false);
                }
                nombreArchivoDataLink = parametroGeneral.Valor;

                parametro = parametrosOrganizacionPl.ObtenerPorOrganizacionIDClaveParametro(organizacionID,
                                                                                            ParametrosEnum.RutaRespaldoDL.ToString());
                if (parametro != null)
                {
                    rutaRespaldoArchivo = parametro.Valor;
                }
            }
            catch (Exception)
            {
                return(false);
            }
            return(true);
        }
예제 #6
0
        private void ValidarParametroHumedad()
        {
            var seguridad = HttpContext.Current.Session["Seguridad"] as SeguridadInfo;
            var parametroOrganizacionPL = new ParametroOrganizacionPL();

            if (seguridad != null)
            {
                ParametroOrganizacionInfo parametro =
                    parametroOrganizacionPL.ObtenerPorOrganizacionIDClaveParametro(
                        seguridad.Usuario.Organizacion.OrganizacionID, ParametrosEnum.MuestraHumedad.ToString());
                if (parametro != null)
                {
                    int valor;
                    int.TryParse(parametro.Valor, out valor);
                    if (valor == 1)
                    {
                        aplicaCapturaHumedad  = true;
                        hfAplicaHumedad.Value = parametro.Valor;
                    }

                    ParametroOrganizacionInfo parametroProductos = parametroOrganizacionPL.ObtenerPorOrganizacionIDClaveParametro(
                        seguridad.Usuario.Organizacion.OrganizacionID, ParametrosEnum.ProductosMuestraHumedad.ToString());
                    if (parametroProductos != null)
                    {
                        if (parametroProductos.Valor.Contains('|'))
                        {
                            ProductosHumedad = (from tipos in parametroProductos.Valor.Split('|')
                                                select Convert.ToInt32(tipos)).ToList();
                        }
                        else
                        {
                            int producto = Convert.ToInt32(parametroProductos.Valor);
                            ProductosHumedad.Add(producto);
                        }
                    }
                }
            }
        }
        public static ResultadoInfo <CorralInfo> ExisteCorraletaDeSacrificioConfigurada(string arete)
        {
            ResultadoInfo <CorralInfo> corraletas = null;

            try
            {
                var animalPL     = new AnimalPL();
                var tipoGanadoPL = new TipoGanadoPL();
                var parametroOrg = new ParametroOrganizacionPL();
                var corralPL     = new CorralPL();

                var seguridad      = (SeguridadInfo)HttpContext.Current.Session["Seguridad"];
                int organizacionId = seguridad.Usuario.Organizacion.OrganizacionID;

                // Se obtiene el animal
                var animal = animalPL.ObtenerAnimalPorArete(arete, organizacionId);

                if (animal != null)
                {
                    // Obtener el tipo de ganado
                    animal.TipoGanado = tipoGanadoPL.ObtenerPorID(animal.TipoGanadoID);
                    // Se obtiene el tipo de corraletaSacrificio a Buscar
                    var paramTipoCorraletaSacrificio = animal.TipoGanado.Sexo == Sexo.Macho ?
                                                       ParametrosEnum.CorraletaSacrificioMacho : ParametrosEnum.CorraletaSacrificioHembra;
                    var parametroOrganizacionInfo =
                        parametroOrg.ObtenerPorOrganizacionIDClaveParametro(organizacionId, paramTipoCorraletaSacrificio.ToString());
                    // Si se tiene configurado el parametro
                    if (parametroOrganizacionInfo != null)
                    {
                        //Obtener info de las corraletas configuradas
                        corraletas =
                            corralPL.ObtenerInformacionCorraletasDisponiblesSacrificio(organizacionId, parametroOrganizacionInfo.Valor);
                        if (corraletas != null && corraletas.Lista.Count > 0)
                        {
                            var corral = new CorralInfo {
                                Codigo = "Seleccione", CorralID = 0
                            };
                            corraletas.Lista.Insert(0, corral);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
            }

            return(corraletas);
        }
예제 #8
0
        /// <summary>
        /// Obtiene la fecha minima en la que se podra consultar el reporte
        /// </summary>
        private void ObtenerFechaMinima()
        {
            var parametroOrganizacionPL = new ParametroOrganizacionPL();
            ParametroOrganizacionInfo parametroOrganizacion = parametroOrganizacionPL.
                                                              ObtenerPorOrganizacionIDClaveParametro(
                AuxConfiguracion.ObtenerOrganizacionUsuario(),
                ParametrosEnum.DiasAtrasReporteInventario.ToString());

            if (parametroOrganizacion != null)
            {
                invervalo   = Convert.ToInt32(parametroOrganizacion.Valor);
                fechaMinima = DateTime.Now.AddDays(invervalo * -1);
            }
            else
            {
                fechaMinima = DateTime.Now.AddDays(-90);
                invervalo   = 90;
            }
        }
예제 #9
0
        /// <summary>
        /// Carga el Parametro por Organizacion de los productos que aplican para capturar muestra de Humedad
        /// </summary>
        private void CargarProductosValidosHumedad()
        {
            var parametroOrganizacionPL = new ParametroOrganizacionPL();

            var parametroOrganizacionInfo = new ParametroOrganizacionInfo
            {
                Parametro = new ParametroInfo
                {
                    Clave =
                        ParametrosEnum.ProductosMuestraHumedad.
                        ToString()
                },
                Organizacion = new OrganizacionInfo
                {
                    OrganizacionID =
                        Auxiliar.AuxConfiguracion.
                        ObtenerOrganizacionUsuario()
                }
            };

            ParametroOrganizacionInfo parametro =
                parametroOrganizacionPL.ObtenerPorOrganizacionIDClaveParametro(parametroOrganizacionInfo.Organizacion.OrganizacionID, parametroOrganizacionInfo.Parametro.Clave);

            if (parametro == null)
            {
                SkMessageBox.Show(this, Properties.Resources.CapturaHumedadBusquedaFolio_SinParametro, MessageBoxButton.OK, MessageImage.Warning);
                confirmaSalir = false;
                Close();
                return;
            }
            if (parametro.Valor.Contains('|'))
            {
                ProductosHumedad = (from tipos in parametro.Valor.Split('|')
                                    select Convert.ToInt32(tipos)).ToList();
            }
            else
            {
                int producto = Convert.ToInt32(parametro.Valor);
                ProductosHumedad.Add(producto);
            }
        }
예제 #10
0
 /// <summary>
 /// Valida la el parametro y la configuracion del parametro de tipoCorralDestino
 /// </summary>
 /// <returns>Regresa true si el parametro esta registrado y esta configurado como activo para la organizacion del usuario logueado.</returns>
 private bool ValidarParametroCorralDestino()
 {
     try
     {
         Logger.Info();
         bool                    parametroConfigurado    = true;
         ParametroPL             parametroPl             = new ParametroPL();
         ParametroOrganizacionPL parametroOrganizacionPl = new ParametroOrganizacionPL();
         List <ParametroInfo>    parametros             = parametroPl.ObtenerTodos(EstatusEnum.Activo).ToList();
         ParametroInfo           parametroCorralDestino = null;
         if (parametros != null)
         {
             parametroCorralDestino = parametros.Where(parametro => parametro.Clave == ParametrosEnum.CORRALDESTINOORGANIZACION.ToString()).FirstOrDefault();
         }
         if (parametroCorralDestino == null)
         {
             parametroConfigurado = false;
         }
         else
         {
             ParametroOrganizacionInfo parametroValor = parametroOrganizacionPl.ObtenerPorOrganizacionIDClaveParametro(int.Parse(Application.Current.Properties["OrganizacionID"].ToString()), ParametrosEnum.CORRALDESTINOORGANIZACION.ToString());
             if (parametroValor == null || parametroValor.Activo == EstatusEnum.Inactivo)
             {
                 parametroConfigurado = false;
             }
             else
             {
                 parametroConfigurado = true;
             }
         }
         return(parametroConfigurado);
     }
     catch (Exception ex)
     {
         Logger.Error(ex);
         SkMessageBox.Show(Application.Current.Windows[ConstantesVista.WindowPrincipal], ex.Message, MessageBoxButton.OK, MessageImage.Error);
         return(false);
     }
 }
        private void dtpFechaSacrificio_LostFocus(object sender, RoutedEventArgs e)
        {
            var fechaPl                 = new FechaPL();
            var fechaServidor           = fechaPl.ObtenerFechaActual();
            int diasFacturacion         = 1;
            var parametroOrganizacionPL = new ParametroOrganizacionPL();
            ParametroOrganizacionInfo parametroOrganizacion =
                parametroOrganizacionPL.ObtenerPorOrganizacionIDClaveParametro(organizacionId,
                                                                               ParametrosEnum.DIASFACTURACION.ToString());

            if (parametroOrganizacion != null)
            {
                int.TryParse(parametroOrganizacion.Valor, out diasFacturacion);
                if (diasFacturacion == 0)
                {
                    diasFacturacion = 1;
                }
            }

            if (dtpFechaSacrificio.SelectedDate != null)
            {
                DateTime fechaMinima = fechaServidor.FechaActual.AddDays(-diasFacturacion);
                if (dtpFechaSacrificio.SelectedDate.Value.Date < fechaMinima.Date)
                {
                    SkMessageBox.Show(Application.Current.Windows[ConstantesVista.WindowPrincipal],
                                      string.Format(Properties.Resources.FacturacionSacrificio_MensajeFechaMenorAyer, diasFacturacion),
                                      MessageBoxButton.OK, MessageImage.Warning);
                    dtpFechaSacrificio.SelectedDate = DateTime.Now;
                }
                if (dtpFechaSacrificio.SelectedDate.Value.Date > fechaServidor.FechaActual.Date)
                {
                    SkMessageBox.Show(Application.Current.Windows[ConstantesVista.WindowPrincipal],
                                      Properties.Resources.FacturacionSacrificio_MensajeFechaMayorAHoy,
                                      MessageBoxButton.OK, MessageImage.Warning);
                    dtpFechaSacrificio.SelectedDate = DateTime.Now;
                }
            }
        }
예제 #12
0
        /// <summary>
        /// Obtiene los datos de la entrada ganado transito
        /// </summary>
        private void ObtenerDatosEntradaGanadoTransito()
        {
            int cabezasOrigen     = ContenedorCosteoEntrada.EntradaGanado.CabezasOrigen;
            int cabezasLlegada    = ContenedorCosteoEntrada.EntradaGanadoCosteo.ListaEntradaDetalle.Sum(cab => cab.Cabezas);
            int diferenciaCabezas = cabezasLlegada - cabezasOrigen;

            if (diferenciaCabezas != 0)
            {
                var parametroOrganizacionPL = new ParametroOrganizacionPL();
                var codigoParametro         = ParametrosEnum.CORRALFALTDIRECTA;
                switch ((TipoOrganizacion)ContenedorCosteoEntrada.EntradaGanado.TipoOrigen)
                {
                case TipoOrganizacion.Cadis:
                case TipoOrganizacion.Centro:
                case TipoOrganizacion.Praderas:
                    codigoParametro = ParametrosEnum.CORRALFALTPROPIO;
                    break;
                }
                ParametroOrganizacionInfo parametroOrganizacion =
                    parametroOrganizacionPL.ObtenerPorOrganizacionIDClaveParametro(organizacionIdLogin,
                                                                                   codigoParametro.ToString());
                if (parametroOrganizacion == null)
                {
                    SkMessageBox.Show(Application.Current.Windows[ConstantesVista.WindowPrincipal],
                                      Properties.Resources.CosteoEntradaGanado_ConfiguracionCorralesTransito, MessageBoxButton.OK,
                                      MessageImage.Stop);
                    return;
                }
                var entradaGanadoTransitoBL = new EntradaGanadoTransitoBL();
                EntradaGanadoTransitoInfo entradaGanadoTransito =
                    entradaGanadoTransitoBL.ObtenerPorCorralOrganizacion(parametroOrganizacion.Valor,
                                                                         organizacionIdLogin);
                if (entradaGanadoTransito != null)
                {
                    entradaGanadoTransito.Sobrante = diferenciaCabezas >= 0;
                    decimal pesoTransito =
                        ContenedorCosteoEntrada.EntradaGanadoCosteo.ListaEntradaDetalle.Sum(
                            peso => peso.PesoLlegada - peso.PesoOrigen);
                    decimal importeTransito = ContenedorCosteoEntrada.EntradaGanadoCosteo.ListaEntradaDetalle.Sum(
                        imp => imp.Importe);
                    decimal importeOrigen = ContenedorCosteoEntrada.EntradaGanadoCosteo.ListaEntradaDetalle.Sum(
                        imp => imp.ImporteOrigen);

                    LoteInfo lote = entradaGanadoTransito.Lote;
                    lote.Cabezas = lote.Cabezas + diferenciaCabezas;
                    lote.UsuarioModificacionID = AuxConfiguracion.ObtenerUsuarioLogueado();

                    int multiplicador;
                    if (entradaGanadoTransito.Sobrante)
                    {
                        multiplicador = 1;
                    }
                    else
                    {
                        multiplicador = -1;
                    }
                    entradaGanadoTransito.Cabezas = (diferenciaCabezas * multiplicador) * -1;
                    entradaGanadoTransito.Peso    = Convert.ToInt32(pesoTransito * multiplicador);

                    int totalCabezasTipoGanado = ContenedorCosteoEntrada.EntradaGanadoCosteo
                                                 .ListaEntradaDetalle.Sum(cab => cab.Cabezas);
                    totalCabezasTipoGanado += (diferenciaCabezas * multiplicador);
                    int porcentajeDescontar = Convert.ToInt32(Math.Round(100 - ((importeTransito * 100) / importeOrigen), 0, MidpointRounding.AwayFromZero));

                    List <EntradaGanadoTransitoDetalleInfo> detalles = entradaGanadoTransito.EntradasGanadoTransitoDetalles;
                    EntradaGanadoTransitoDetalleInfo        detalle;

                    decimal importeConDescuento;
                    for (int index = 0; index < detalles.Count; index++)
                    {
                        detalle = detalles[index];

                        importeOrigen = ContenedorCosteoEntrada.EntradaGanadoCosteo.ListaCostoEntrada
                                        .Where(id => id.Costo.CostoID == detalle.Costo.CostoID)
                                        .Select(imp => imp.Importe).FirstOrDefault();
                        importeConDescuento = (importeOrigen / 100) * porcentajeDescontar;
                        detalle.Importe     = importeConDescuento * multiplicador;
                    }
                    entradaGanadoTransito.UsuarioModificacionID   = AuxConfiguracion.ObtenerUsuarioLogueado();
                    ContenedorCosteoEntrada.EntradaGanadoTransito = entradaGanadoTransito;
                }
            }
        }
예제 #13
0
        //private static int organizacionID;
        //private static int usuarioID;
        //private static SeguridadInfo usuario;

        #endregion
        #region Eventos

        protected void Page_Load(object sender, EventArgs e)
        {
            var ordenRepartoPl = new RepartoPL();

            var usuario             = HttpContext.Current.Session["Seguridad"] as SeguridadInfo;
            var localResourceObject = GetLocalResourceObject("msgErrorRolUsuario");

            if (localResourceObject != null)
            {
                msgErrorUsuario.Value = localResourceObject.ToString();
            }
            localResourceObject = GetLocalResourceObject("msgErrorParametros");
            if (localResourceObject != null)
            {
                msgErrorParametros.Value = localResourceObject.ToString();
            }
            localResourceObject = GetLocalResourceObject("msgSinCorrales");
            if (localResourceObject != null)
            {
                msgSinCorrales.Value = localResourceObject.ToString();
            }
            localResourceObject = GetLocalResourceObject("OK");
            if (localResourceObject != null)
            {
                msgOK.Value = localResourceObject.ToString();
            }
            localResourceObject = GetLocalResourceObject("msgSinConsumoTotal");
            if (localResourceObject != null)
            {
                msgSinConsumoTotal.Value = localResourceObject.ToString();
            }
            localResourceObject = GetLocalResourceObject("msgCorralesIncompletos");
            if (localResourceObject != null)
            {
                msgCorralesIncompletos.Value = localResourceObject.ToString();
            }
            localResourceObject = GetLocalResourceObject("msgErrorProceso");
            if (localResourceObject != null)
            {
                msgErrorProceso.Value = localResourceObject.ToString();
            }
            localResourceObject = GetLocalResourceObject("AlimentoNoServidoMatutino");
            if (localResourceObject != null)
            {
                AlimentoNoServidoMatutino.Value = localResourceObject.ToString();
            }
            localResourceObject = GetLocalResourceObject("AlimentoNoServidoVespertino");
            if (localResourceObject != null)
            {
                AlimentoNoServidoVespertino.Value = localResourceObject.ToString();
            }
            localResourceObject = GetLocalResourceObject("msgFaltaPorcentaje");
            if (localResourceObject != null)
            {
                msgFaltaPorcentaje.Value = localResourceObject.ToString();
            }
            btnSi.Value     = GetLocalResourceObject("btnSi").ToString();
            btnNo.Value     = GetLocalResourceObject("btnNo").ToString();
            idUsuario.Value = usuario.Usuario.UsuarioID.ToString(CultureInfo.InvariantCulture);
            if (usuario != null)
            {
                //organizacionID = usuario.Usuario.Organizacion.OrganizacionID;
                //usuarioID = usuario.Usuario.UsuarioID;
                listaServicio = ordenRepartoPl.ObtenerTiposDeServicios();
                if (listaServicio == null)
                {
                    ClientScript.RegisterStartupScript(GetType(), "myScript", " EnviarMensajeSinParametros();", true);
                }
                else
                {
                    foreach (var servicio in listaServicio)
                    {
                        switch (servicio.TipoServicioId)
                        {
                        case (int)TipoServicioEnum.Matutino:
                            lblrdbMatutino.Text = servicio.Descripcion;
                            break;

                        case (int)TipoServicioEnum.Vespertino:
                            lblrdbVespertino.Text = servicio.Descripcion;
                            break;
                        }
                    }
                }

                if (!ValidarParametros())
                {
                    ClientScript.RegisterStartupScript(GetType(), "myScript", " EnviarMensajeSinParametros();", true);
                }
                var parametroOrganizacionPL         = new ParametroOrganizacionPL();
                ParametroOrganizacionInfo parametro = parametroOrganizacionPL.ObtenerPorOrganizacionIDClaveParametro(usuario.Usuario.Organizacion.OrganizacionID,
                                                                                                                     ParametrosEnum.EJECORDENREP.ToString());
                if (parametro != null)
                {
                    int valor;
                    int.TryParse(parametro.Valor, out valor);
                    if (valor != 0)
                    {
                        ClientScript.RegisterStartupScript(GetType(), "myScript", " EnviarMensajeEjecutandose();", true);
                    }
                }
            }
            else
            {
                ClientScript.RegisterStartupScript(GetType(), "myScript", "EnviarMensajeRolUsuario();", true);
            }
            CargarComboSeccion();
        }
예제 #14
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);
        }