コード例 #1
0
        /// <summary>
        /// Obtiene los dias de retiro
        /// </summary>
        /// <param name="lote">Informacion del lote</param>
        /// <returns>Numero de dias de retiro</returns>
        public int ObtenerDiasRetiro(LoteInfo lote)
        {
            int result;

            try
            {
                Logger.Info();
                var repartoBl = new RepartoBL();
                result = repartoBl.ObtenerDiasRetiro(lote);
            }
            catch (ExcepcionGenerica ex)
            {
                Logger.Error(ex);
                throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
            }
            return(result);
        }
コード例 #2
0
        /// <summary>
        /// Obtiene el Reparto por lote
        /// </summary>
        /// <param name="corral">Lote del cual se quiere obtener el reparto</param>
        /// <param name="fechaReparto">Fecha del reparto</param>
        /// <returns>Informacion del reaprto</returns>
        public RepartoInfo ObtnerPorFechaCorral(CorralInfo corral, DateTime fechaReparto)
        {
            RepartoInfo result;

            try
            {
                Logger.Info();
                var repartoBl = new RepartoBL();
                result = repartoBl.ObtenerRepartoPorFechaCorral(fechaReparto, corral);
            }
            catch (ExcepcionGenerica ex)
            {
                Logger.Error(ex);
                throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
            }
            return(result);
        }
コード例 #3
0
        /// <summary>
        ///  Metodo que actualiza las formulas de los repartos de la mañana y tarde.
        /// </summary>
        /// <param name="cambiosDetalle"></param>
        /// <returns></returns>
        public int GuardarFormulasRepartoDetalle(List <CambiosReporteInfo> cambiosDetalle)
        {
            int result;

            try
            {
                Logger.Info();
                var repartoBl = new RepartoBL();
                result = repartoBl.GuardarFormulasRepartoDetalle(cambiosDetalle);
            }
            catch (ExcepcionGenerica ex)
            {
                Logger.Error(ex);
                throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
            }
            return(result);
        }
コード例 #4
0
        /// <summary>
        /// Obtiene los datos para la generacion de la
        /// poilza de consumo de alimento
        /// </summary>
        /// <param name="movimientoDetalles"></param>
        /// <param name="organizacionID"></param>
        /// <returns></returns>
        public PolizaConsumoAlimentoModel ObtenerDatosPolizaConsumo(List <AlmacenMovimientoDetalle> movimientoDetalles, int organizacionID)
        {
            PolizaConsumoAlimentoModel resultado;

            try
            {
                Logger.Info();
                var repartoBl = new RepartoBL();
                resultado = repartoBl.ObtenerDatosPolizaConsumo(movimientoDetalles, organizacionID);
            }
            catch (ExcepcionGenerica ex)
            {
                Logger.Error(ex);
                throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
            }
            return(resultado);
        }
コード例 #5
0
        /// <summary>
        /// Genera el reparto para los corrales que no tienen
        /// </summary>
        /// <param name="cambiosDetalle"></param>
        /// <returns></returns>
        public int GenerarOrdenRepartoConfiguracionAjustes(List <CambiosReporteInfo> cambiosDetalle)
        {
            int resultado = 0;

            try
            {
                Logger.Info();
                var repartoBl = new RepartoBL();
                resultado = repartoBl.GenerarOrdenRepartoConfiguracionAjustes(cambiosDetalle);
            }
            catch (ExcepcionGenerica ex)
            {
                Logger.Error(ex);
                throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
            }
            return(resultado);
        }
コード例 #6
0
        /// <summary>
        /// Obtiene el detalle de una orden de reparto
        /// </summary>
        /// <param name="reparto">Reparto</param>
        /// <returns>Lista con el detalle</returns>
        public IList <RepartoDetalleInfo> ObtenerDetalle(RepartoInfo reparto)
        {
            IList <RepartoDetalleInfo> result;

            try
            {
                Logger.Info();
                var repartoBl = new RepartoBL();
                result = repartoBl.ObtenerDetalle(reparto);
            }
            catch (ExcepcionGenerica ex)
            {
                Logger.Error(ex);
                throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
            }
            return(result);
        }
コード例 #7
0
        /// <summary>
        /// Obtiene el listado de repartos del operador logueado.
        /// </summary>
        /// <param name="operador">Informacion del operador</param>
        /// <param name="corral">Informacion del corral</param>
        /// <returns>Informacion del reparto</returns>
        public RepartoInfo ObtenerRepartoPorOperadorId(OperadorInfo operador, CorralInfo corral)
        {
            RepartoInfo result;

            try
            {
                Logger.Info();
                var repartoBl = new RepartoBL();
                result = repartoBl.ObtenerRepartoPorOperadorId(operador, corral);
            }
            catch (ExcepcionGenerica ex)
            {
                Logger.Error(ex);
                throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
            }
            return(result);
        }
コード例 #8
0
        /// <summary>
        /// Obtiene el avance del reparto
        /// </summary>
        /// <param name="usuarioId">Identificador del usuario</param>
        /// <returns>Informacion del avance del reparto</returns>
        public RepartoAvanceInfo ObtenerAvanceReparto(int usuarioId)
        {
            RepartoAvanceInfo resultado;

            try
            {
                Logger.Info();
                var repartoBl = new RepartoBL();
                resultado = repartoBl.ObtenerAvanceReparto(usuarioId);
            }
            catch (ExcepcionGenerica ex)
            {
                Logger.Error(ex);
                throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
            }
            return(resultado);
        }
コード例 #9
0
        /// <summary>
        /// Guarda el estatus de la distribucion
        /// </summary>
        /// <param name="corral">Informacion del corral</param>
        /// <param name="estatusDistribucion">Estatus de la distribucion</param>
        /// <returns></returns>
        public int GuardarEstatusDistribucion(CorralInfo corral, int estatusDistribucion)
        {
            int result;

            try
            {
                Logger.Info();
                var repartoBl = new RepartoBL();
                result = repartoBl.GuardarEstatusDistribucion(corral, estatusDistribucion);
            }
            catch (ExcepcionGenerica ex)
            {
                Logger.Error(ex);
                throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
            }
            return(result);
        }
コード例 #10
0
        /// <summary>
        /// Obtiene el Reparto por lote
        /// </summary>
        /// <param name="lote">Lote del cual se quiere obtener el reparto</param>
        /// <param name="fechaReparto">Fecha del reparto</param>
        /// <returns>Informacion del reaprto</returns>
        public RepartoInfo ObtnerPorLote(LoteInfo lote, DateTime fechaReparto)
        {
            RepartoInfo result;

            try
            {
                Logger.Info();
                var repartoBl = new RepartoBL();
                result = repartoBl.ObtenerPorLote(lote, fechaReparto);
            }
            catch (ExcepcionGenerica ex)
            {
                Logger.Error(ex);
                throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
            }
            return(result);
        }
コード例 #11
0
        /// <summary>
        /// Genera la orden de reparto
        /// </summary>
        /// <param name="ordenReparto">Informacion de la orden de reparto de alimentacion</param>
        /// <returns>Resultado de la operacion</returns>
        public ResultadoOperacion GenerarOrdenReparto(OrdenRepartoAlimentacionInfo ordenReparto)
        {
            ResultadoOperacion resultado;

            try
            {
                Logger.Info();
                var repartoBl = new RepartoBL();
                resultado = repartoBl.GenerarOrdenReparto(ordenReparto);
            }
            catch (ExcepcionGenerica ex)
            {
                Logger.Error(ex);
                throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
            }
            return(resultado);
        }
コード例 #12
0
        /// <summary>
        /// Valida la orden de reparto antes de ser guardada
        /// </summary>
        /// <param name="tipoServicioId">Identificador del tipo de servicio</param>
        /// <param name="organizacionId">Identificador de la organizacion</param>
        /// <returns></returns>
        public ResultadoValidacion ValidarOrdenReparto(int tipoServicioId, int organizacionId)
        {
            ResultadoValidacion resultado;

            try
            {
                Logger.Info();
                var repartoBl = new RepartoBL();
                resultado = repartoBl.ValidarOrdenReparto(tipoServicioId, organizacionId);
            }
            catch (ExcepcionGenerica ex)
            {
                Logger.Error(ex);
                throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
            }
            return(resultado);
        }
コード例 #13
0
        /// <summary>
        /// Obtiene las ordenes de reparto de la fecha actual
        /// </summary>
        /// <param name="lote">informacion del lote</param>
        /// <returns>Lista de repartos</returns>
        public List <RepartoInfo> ObtenerRepartoActual(LoteInfo lote)
        {
            List <RepartoInfo> resultado;

            try
            {
                Logger.Info();
                var repartoBl = new RepartoBL();
                resultado = repartoBl.ObtenerRepartoActual(lote);
            }
            catch (ExcepcionGenerica ex)
            {
                Logger.Error(ex);
                throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
            }
            return(resultado);
        }
コード例 #14
0
        /// <summary>
        /// Obtiene los tipos de servicio
        /// </summary>
        /// <returns>Lista con los servicios configurados</returns>
        public List <TipoServicioInfo> ObtenerTiposDeServicios()
        {
            List <TipoServicioInfo> resultado;

            try
            {
                Logger.Info();
                var repartoBl = new RepartoBL();
                resultado = repartoBl.ObtenerTiposDeServicios();
            }
            catch (ExcepcionGenerica ex)
            {
                Logger.Error(ex);
                throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
            }
            return(resultado);
        }
コード例 #15
0
        /// <summary>
        /// Obtiene repartos por lote y organizacion
        /// </summary>
        /// <param name="corralID"></param>
        /// <param name="organizacionId"></param>
        /// <returns></returns>
        public List <RepartoInfo> ObtenerPorCorralOrganizacion(int corralID, int organizacionId)
        {
            List <RepartoInfo> result;

            try
            {
                Logger.Info();
                var repartoBl = new RepartoBL();
                result = repartoBl.ObtenerPorCorralOrganizacion(corralID, organizacionId);
            }
            catch (ExcepcionGenerica ex)
            {
                Logger.Error(ex);
                throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
            }
            return(result);
        }
コード例 #16
0
        /// <summary>
        /// Obtiene la consiguracion para la orden de reparto
        /// </summary>
        /// <param name="organizacionId">Identificador de la organizacion</param>
        /// <param name="parametro">Parametros solicitado</param>
        /// <returns></returns>
        public string LeerConfiguracion(int organizacionId, ParametrosEnum parametro)
        {
            string resultado;

            try
            {
                Logger.Info();
                var repartoBl = new RepartoBL();
                resultado = repartoBl.LeerConfiguracion(organizacionId, parametro);
            }
            catch (ExcepcionGenerica ex)
            {
                Logger.Error(ex);
                throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
            }
            return(resultado);
        }
コード例 #17
0
        /// <summary>
        /// Obtiene los consumos pendientes de aplicar
        /// </summary>
        /// <param name="filtros"></param>
        /// <returns></returns>
        public List <AplicacionConsumoDetalleModel> ObtenerConsumoPendiente(AplicacionConsumoModel filtros)
        {
            List <AplicacionConsumoDetalleModel> result;

            try
            {
                Logger.Info();
                var repartoBl = new RepartoBL();
                result = repartoBl.ObtenerConsumoPendiente(filtros);
            }
            catch (ExcepcionGenerica ex)
            {
                Logger.Error(ex);
                throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
            }
            return(result);
        }
コード例 #18
0
        /// <summary>
        /// Genera un reparto manual para cada corral especificado.
        /// </summary>
        /// <param name="corrales"></param>
        /// <param name="parametroConsumo"></param>
        /// <returns></returns>
        public ResultadoOperacion GenerarOrdenRepartoManual(List <CorralInfo> corrales, ParametroCapturaManualConsumoInfo parametroConsumo)
        {
            ResultadoOperacion resultado;

            try
            {
                Logger.Info();
                var repartoBl = new RepartoBL();
                resultado = repartoBl.GenerarOrdenRepartoManual(corrales, parametroConsumo);
            }
            catch (ExcepcionGenerica ex)
            {
                Logger.Error(ex);
                throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
            }
            return(resultado);
        }
コード例 #19
0
        /// <summary>
        ///     Metodo que guarda ServicioAlimento
        /// </summary>
        /// <param name="info"></param>
        internal void Guardar(IList <ServicioAlimentoInfo> info)
        {
            try
            {
                Logger.Info();
                var repartoBL            = new RepartoBL();
                var listaRepartosGuardar = new List <CambiosReporteInfo>();
                var tipoServicio         = TipoServicioEnum.Matutino;

                int organizacionID   = info.Select(rep => rep.OrganizacionID).First();
                var organizacionInfo = new OrganizacionInfo
                {
                    OrganizacionID = organizacionID
                };
                DateTime fechaHoy = DateTime.Now.Date;

                List <RepartoDetalleInfo> repartosDelDia =
                    repartoBL.ObtenerRepartoDetallePorOrganizacionID(organizacionInfo, fechaHoy);

                if (repartosDelDia != null)
                {
                    int repartosMatutino =
                        repartosDelDia.Count(
                            rep => rep.TipoServicioID == TipoServicioEnum.Matutino.GetHashCode());

                    int repartosServidosMatutino =
                        repartosDelDia.Count(
                            rep => rep.TipoServicioID == TipoServicioEnum.Matutino.GetHashCode() && rep.Servido);

                    int porcentajeServido = (repartosServidosMatutino / repartosMatutino) * 100;
                    if (porcentajeServido > 30)
                    {
                        tipoServicio = TipoServicioEnum.Vespertino;
                    }
                }


                List <CorralInfo> listaCorrales = (from rep in info
                                                   select new CorralInfo
                {
                    CorralID = rep.CorralID
                }).ToList();
                List <RepartoInfo> listaRepartosHoy     = repartoBL.ObtenerRepartosPorFechaCorrales(fechaHoy, organizacionID, listaCorrales);
                List <RepartoInfo> listaRepartosManiana = repartoBL.ObtenerRepartosPorFechaCorrales(fechaHoy.AddDays(1), organizacionID, listaCorrales);

                if (listaRepartosHoy == null)
                {
                    listaRepartosHoy = new List <RepartoInfo>();
                }
                if (listaRepartosManiana == null)
                {
                    listaRepartosManiana = new List <RepartoInfo>();
                }

                foreach (var servicio in info)
                {
                    var repartoActual = new CambiosReporteInfo();
                    RepartoDetalleInfo servicioMatutino;
                    RepartoDetalleInfo servicioVespertino;
                    RepartoInfo        repartoHoy =
                        listaRepartosHoy.FirstOrDefault(rep => rep.Corral.CorralID == servicio.CorralID);

                    RepartoInfo repartoManiana =
                        listaRepartosManiana.FirstOrDefault(rep => rep.Corral.CorralID == servicio.CorralID);

                    repartoActual.RepartoID          = 0;
                    repartoActual.CantidadProgramada = servicio.KilosProgramados;
                    repartoActual.Observaciones      = servicio.Comentarios;
                    repartoActual.EstadoComederoID   = EstadoComederoEnum.Normal.GetHashCode();
                    if (repartoHoy != null)
                    {
                        repartoActual.FechaReparto = DateTime.Now.AddDays(1);
                    }
                    else
                    {
                        repartoActual.FechaReparto = DateTime.Now;
                    }
                    repartoActual.FormulaIDProgramada   = servicio.FormulaID;
                    repartoActual.OrganizacionID        = servicio.OrganizacionID;
                    repartoActual.UsuarioModificacionID = servicio.UsuarioCreacionID;
                    repartoActual.TipoServicioID        = tipoServicio.GetHashCode();
                    repartoActual.CorralInfo            = new CorralInfo
                    {
                        CorralID = servicio.CorralID,
                        Codigo   = servicio.CodigoCorral
                    };

                    if (repartoHoy != null)
                    {
                        repartoActual.RepartoID = repartoHoy.RepartoID;
                        servicioMatutino        =
                            repartoHoy.DetalleReparto.FirstOrDefault(
                                rep => rep.TipoServicioID == TipoServicioEnum.Matutino.GetHashCode());
                        servicioVespertino =
                            repartoHoy.DetalleReparto.FirstOrDefault(
                                rep => rep.TipoServicioID == TipoServicioEnum.Vespertino.GetHashCode());
                        if (servicioMatutino != null)
                        {
                            if (!servicioMatutino.Servido)
                            {
                                repartoActual.RepartoDetalleIdManiana = servicioMatutino.RepartoDetalleID;
                                listaRepartosGuardar.Add(repartoActual);
                                continue;
                            }
                        }
                        if (servicioVespertino != null)
                        {
                            if (!servicioVespertino.Servido)
                            {
                                repartoActual.RepartoDetalleIdTarde = servicioVespertino.RepartoDetalleID;
                                listaRepartosGuardar.Add(repartoActual);
                                continue;
                            }
                        }
                    }
                    if (repartoManiana != null)
                    {
                        repartoActual.RepartoID = repartoManiana.RepartoID;
                        servicioMatutino        =
                            repartoManiana.DetalleReparto.FirstOrDefault(
                                rep => rep.TipoServicioID == TipoServicioEnum.Matutino.GetHashCode());
                        servicioVespertino =
                            repartoManiana.DetalleReparto.FirstOrDefault(
                                rep => rep.TipoServicioID == TipoServicioEnum.Vespertino.GetHashCode());
                        if (servicioMatutino != null)
                        {
                            if (!servicioMatutino.Servido)
                            {
                                repartoActual.RepartoDetalleIdManiana = servicioMatutino.RepartoDetalleID;
                                listaRepartosGuardar.Add(repartoActual);
                                continue;
                            }
                        }
                        if (servicioVespertino != null)
                        {
                            if (!servicioVespertino.Servido)
                            {
                                repartoActual.RepartoDetalleIdTarde = servicioVespertino.RepartoDetalleID;
                                listaRepartosGuardar.Add(repartoActual);
                                continue;
                            }
                        }
                    }

                    listaRepartosGuardar.Add(repartoActual);
                }
                var servicioAlimentoDAL = new ServicioAlimentoDAL();
                using (var transaccion = new TransactionScope())
                {
                    repartoBL.GuardarRepartosServicioCorrales(listaRepartosGuardar);
                    servicioAlimentoDAL.Guardar(info);
                    transaccion.Complete();
                }
            }
            catch (ExcepcionGenerica)
            {
                throw;
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
            }
        }
コード例 #20
0
        /// <summary>
        /// Carga el archivo data link en la orden de reparto
        /// </summary>
        /// <param name="validacionDatalink"></param>
        /// <param name="usuario"></param>
        /// <returns></returns>
        internal ResultadoOperacion CargarArchivoDatalink(ValidacionDataLink validacionDatalink, UsuarioInfo usuario)
        {
            var validar   = new DataLinkInfo();
            var resultado = new ResultadoOperacion {
                Resultado = true
            };

            try
            {
                Logger.Info();
                var corralBl  = new CorralBL();
                var loteBl    = new LoteBL();
                var repartoBl = new RepartoBL();
                using (var camionRepartoBl = new CamionRepartoBL())
                {
                    var servicioAlimentoBL           = new ServicioAlimentoBL();
                    var datalinks                    = new List <DataLinkInfo>();
                    var repartosServicioAlimentacion = new List <RepartoInfo>();
                    var repartosDetalles             = new List <RepartoDetalleInfo>();
                    var corralesEliminar             = new List <CorralInfo>();

                    var formulaBL = new FormulaBL();
                    IList <FormulaInfo> formulasExistentes = formulaBL.ObtenerTodos(EstatusEnum.Activo);

                    IList <CamionRepartoInfo> camionesRepartoOrganizacion =
                        camionRepartoBl.ObtenerPorOrganizacionID(usuario.Organizacion.OrganizacionID);

                    foreach (var dataLink in validacionDatalink.ListaDataLink)
                    {
                        validar = dataLink;

                        //CamionRepartoInfo camionRepartoInfo = camionRepartoBl.ObtenerPorNumeroEconomico(dataLink.NumeroCamion.Trim(), usuario.Organizacion.OrganizacionID);
                        CamionRepartoInfo camionRepartoInfo =
                            camionesRepartoOrganizacion.FirstOrDefault(
                                cam =>
                                cam.NumeroEconomico.Equals(dataLink.NumeroCamion.Trim(),
                                                           StringComparison.CurrentCultureIgnoreCase));
                        dataLink.CamionReparto = camionRepartoInfo;
                        CorralInfo corral = corralBl.ObtenerPorCodicoOrganizacionCorral(new CorralInfo
                        {
                            Codigo       = dataLink.CodigoCorral,
                            Organizacion = new OrganizacionInfo {
                                OrganizacionID = usuario.Organizacion.OrganizacionID
                            },
                            Activo = EstatusEnum.Activo,
                        });
                        if (corral != null)
                        {
                            var lote = loteBl.ObtenerPorCorralCerrado(usuario.Organizacion.OrganizacionID, corral.CorralID);
                            if (lote == null)
                            {
                                lote = new LoteInfo();
                            }
                            //if (lote != null)
                            //{

                            var fecha   = ObtenerFecha(dataLink.CadenaFechaReparto);
                            var reparto = repartoBl.ObtenerRepartoPorFechaCorralServicio(fecha, corral, dataLink.TipoServicio);
                            if (reparto != null)
                            {
                                //var formulaBl = new FormulaBL();
                                //int formulaId;
                                //int.TryParse(dataLink.ClaveFormula, out formulaId);
                                var formula = formulasExistentes.FirstOrDefault(fo => fo.Descripcion.Equals(dataLink.ClaveFormula.Trim(), StringComparison.CurrentCultureIgnoreCase));
                                if (formula != null)
                                {
                                    dataLink.FormulaServida = formula;
                                    dataLink.Reparto        = reparto;
                                    dataLink.UsuarioID      = usuario.UsuarioID;
                                    dataLink.OrganizacionID = usuario.Organizacion.OrganizacionID;
                                    datalinks.Add(dataLink);
                                }
                            }
                            //Si el Lote no se encuentra en el Reparto, buscarlo en la tabla ServicioAlimento
                            else
                            {
                                ServicioAlimentoInfo servicioAlimentoInfo =
                                    servicioAlimentoBL.ObtenerPorCorralID(usuario.Organizacion.OrganizacionID,
                                                                          corral.CorralID);

                                if (servicioAlimentoInfo != null)
                                {
                                    LoteDescargaDataLinkModel datosLote =
                                        loteBl.ObtenerLoteDataLink(usuario.Organizacion.OrganizacionID, lote.LoteID);

                                    if (datosLote == null)
                                    {
                                        datosLote = new LoteDescargaDataLinkModel
                                        {
                                            PesoInicio  = 0,
                                            FechaInicio = fecha,
                                            Cabezas     = 0,
                                        };
                                    }


                                    //var formulaBl = new FormulaBL();
                                    //int formulaId;
                                    //int.TryParse(dataLink.ClaveFormula, out formulaId);
                                    //var formula = formulaBl.ObtenerPorID(formulaId);
                                    var formula = formulasExistentes.FirstOrDefault(fo => fo.Descripcion.Equals(dataLink.ClaveFormula.Trim(), StringComparison.CurrentCultureIgnoreCase));
                                    if (formula != null)
                                    {
                                        var repartoNuevo = new RepartoInfo
                                        {
                                            OrganizacionID    = usuario.Organizacion.OrganizacionID,
                                            LoteID            = lote.LoteID,
                                            Corral            = corral,
                                            Fecha             = fecha,
                                            PesoInicio        = datosLote.PesoInicio,
                                            PesoProyectado    = 0,
                                            DiasEngorda       = Convert.ToInt32((fecha - datosLote.FechaInicio).TotalDays),
                                            PesoRepeso        = 0,
                                            DetalleReparto    = new List <RepartoDetalleInfo>(),
                                            UsuarioCreacionID = usuario.UsuarioID,
                                            Activo            = EstatusEnum.Activo
                                        };

                                        var detalleReparto = new RepartoDetalleInfo
                                        {
                                            TipoServicioID      = dataLink.TipoServicio,
                                            FormulaIDProgramada = servicioAlimentoInfo.FormulaID,
                                            FormulaIDServida    = formula.FormulaId,
                                            CantidadProgramada  = servicioAlimentoInfo.KilosProgramados,
                                            CantidadServida     = dataLink.KilosServidos,
                                            HoraReparto         = dataLink.Hora,
                                            CostoPromedio       = 0,
                                            Importe             = 0,
                                            Servido             = true,
                                            Cabezas             = datosLote.Cabezas == 0 ? 1 : datosLote.Cabezas,
                                            EstadoComederoID    = EstadoComederoEnum.Normal.GetHashCode(),
                                            CamionRepartoID     = dataLink.CamionReparto.CamionRepartoID,
                                            UsuarioCreacionID   = usuario.UsuarioID,
                                            Activo = EstatusEnum.Activo
                                        };
                                        repartoNuevo.DetalleReparto.Add(detalleReparto);

                                        repartosServicioAlimentacion.Add(repartoNuevo);

                                        var corralEliminar = new CorralInfo
                                        {
                                            CorralID = corral.CorralID,
                                            UsuarioModificacionID = usuario.UsuarioID
                                        };
                                        corralesEliminar.Add(corralEliminar);
                                    }
                                }
                            }
                            //}
                            //else
                            //{
                            //    var bitacoraBL = new BitacoraIncidenciasBL();
                            //    var errorInfo = new BitacoraErroresInfo
                            //        {
                            //            AccionesSiapID = AccionesSIAPEnum.DeDataLink,
                            //            Mensaje = "No es posible aplicar el consumo para el corral: " + corral.Codigo,
                            //            UsuarioCreacionID = usuario.UsuarioID
                            //        };

                            //    //DescargarArchivoDataLink
                            //    bitacoraBL.GuardarError(errorInfo);
                            //}
                        }
                    }
                    if (datalinks.Count > 0)
                    {
                        if (datalinks.Any(x => x.CamionReparto == null))
                        {
                            resultado.Resultado          = false;
                            resultado.DescripcionMensaje = ResourceServices.DescargaDataLink_msgCamionNoAsignado;
                        }
                        else
                        {
                            using (var transaccion = new TransactionScope())
                            {
                                if (repartosServicioAlimentacion.Any())
                                {
                                    foreach (var repartoInfo in repartosServicioAlimentacion)
                                    {
                                        int repartoID = repartoBl.Guardar(repartoInfo);
                                        repartoInfo.DetalleReparto.ToList().ForEach(rep => rep.RepartoID = repartoID);
                                        repartosDetalles.AddRange(repartoInfo.DetalleReparto);
                                    }
                                    repartoBl.GuardarRepartoDetalle(repartosDetalles);
                                    if (corralesEliminar.Any())
                                    {
                                        servicioAlimentoBL.EliminarXML(corralesEliminar);
                                    }
                                }

                                var res = repartoBl.CargarArchivoDatalink(datalinks);
                                resultado.RegistrosAfectados = res;
                                resultado.DescripcionMensaje = ResourceServices.DescargarDataLink_GuradadoOk;
                                transaccion.Complete();
                            }

                            RenombrarArchivos(validacionDatalink);
                        }
                    }
                    else
                    {
                        resultado.Resultado          = false;
                        resultado.DescripcionMensaje = ResourceServices.DescargarDataLink_NoSecargo;
                    }
                }
            }
            catch (ExcepcionGenerica)
            {
                if (validar != null)
                {
                }
                resultado.Resultado = false;
                throw;
            }
            catch (Exception ex)
            {
                if (validar != null)
                {
                }
                resultado.Resultado = false;
                Logger.Error(ex);
                throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
            }
            return(resultado);
        }