Example #1
0
        /// <summary>
        /// Obtiene un ingrediente con su detalle
        /// Activo - Solo activos
        /// Inactivo - Solo inactivos
        /// Todos - Ambos
        /// </summary>
        /// <returns>IngredienteInfo</returns>
        internal IngredienteInfo ObtenerPorId(IngredienteInfo ingrediente, EstatusEnum estatus)
        {
            try
            {
                var ingredienteDal = new IngredienteDAL();
                ingrediente = ingredienteDal.ObtenerPorId(ingrediente, estatus);

                if (ingrediente != null)
                {
                    if (ingrediente.Organizacion.OrganizacionID > 0)
                    {
                        var organizacionBl = new OrganizacionBL();
                        ingrediente.Organizacion = organizacionBl.ObtenerPorID(ingrediente.Organizacion.OrganizacionID);
                    }
                    if (ingrediente.Formula.FormulaId > 0)
                    {
                        var formulaBl = new FormulaBL();
                        ingrediente.Formula = formulaBl.ObtenerPorID(ingrediente.Formula.FormulaId);
                    }

                    if (ingrediente.Producto.ProductoId > 0)
                    {
                        var productoBl = new ProductoBL();
                        ingrediente.Producto = productoBl.ObtenerPorID(ingrediente.Producto);
                    }
                }
            }
            catch (ExcepcionDesconocida)
            {
                throw;
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
            }

            return(ingrediente);
        }
Example #2
0
        /// <summary>
        /// Obtiene una salida de producto por id
        /// </summary>
        /// <param name="salidaProducto"></param>
        /// <returns></returns>
        internal SalidaProductoInfo ObtenerPorSalidaProductoId(SalidaProductoInfo salidaProducto)
        {
            try
            {
                var salidaProductoDal = new SalidaProductoDAL();
                salidaProducto = salidaProductoDal.ObtenerPorSalidaProductoId(salidaProducto);
                if (salidaProducto != null)
                {
                    if (salidaProducto.Organizacion.OrganizacionID > 0)
                    {
                        var organizacionBl = new OrganizacionBL();
                        salidaProducto.Organizacion =
                            organizacionBl.ObtenerPorID(salidaProducto.Organizacion.OrganizacionID);
                    }

                    if (salidaProducto.OrganizacionDestino.OrganizacionID > 0)
                    {
                        var organizacionBl = new OrganizacionBL();
                        salidaProducto.Organizacion =
                            organizacionBl.ObtenerPorID(salidaProducto.OrganizacionDestino.OrganizacionID);
                    }

                    if (salidaProducto.Almacen.AlmacenID > 0)
                    {
                        var almacenBl = new AlmacenBL();
                        salidaProducto.Almacen = almacenBl.ObtenerPorID(salidaProducto.Almacen.AlmacenID);
                    }

                    if (salidaProducto.AlmacenInventarioLote.AlmacenInventarioLoteId > 0)
                    {
                        var almacenInventarioLoteBl = new AlmacenInventarioLoteBL();
                        salidaProducto.AlmacenInventarioLote =
                            almacenInventarioLoteBl.ObtenerAlmacenInventarioLotePorId(
                                salidaProducto.AlmacenInventarioLote.AlmacenInventarioLoteId);
                    }

                    if (salidaProducto.Cliente.ClienteID > 0)
                    {
                        var clienteBl = new ClienteBL();
                        salidaProducto.Cliente = clienteBl.ObtenerPorID(salidaProducto.Cliente.ClienteID);
                    }
                    if (salidaProducto.CuentaSAP.CuentaSAPID > 0)
                    {
                        var cuentaSapBl = new CuentaSAPBL();
                        salidaProducto.CuentaSAP = cuentaSapBl.ObtenerPorID(salidaProducto.CuentaSAP.CuentaSAPID);
                    }

                    if (salidaProducto.TipoMovimiento.TipoMovimientoID > 0)
                    {
                        var tipoMovimientoBl = new TipoMovimientoBL();
                        salidaProducto.TipoMovimiento =
                            tipoMovimientoBl.ObtenerPorID(salidaProducto.TipoMovimiento.TipoMovimientoID);
                    }
                }
            }
            catch (ExcepcionGenerica)
            {
                throw;
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
            }
            return(salidaProducto);
        }
Example #3
0
        /// <summary>
        /// Genera Incidencias SIAP
        /// </summary>
        internal void GenerarIncidenciasSIAP()
        {
            try
            {
                List <IncidenciasInfo> listaIncidencias       = new List <IncidenciasInfo>();
                List <IncidenciasInfo> listaNuevasIncidencias = new List <IncidenciasInfo>();
                List <XDocument>       listaNew = new List <XDocument>();
                var usuarioBL = new UsuarioBL();
                usuario = usuarioBL.ObtenerPorActiveDirectory(UsuarioProcesosEnum.AlertaSIAP.ToString());

                IList <OrganizacionInfo> ListaOrganizacion = new List <OrganizacionInfo>();
                var organizacionBL = new OrganizacionBL();
                ListaOrganizacion = organizacionBL.ObtenerTodos();

                var IncidenciasDal = new IncidenciasDAL();
                listaAlertaConfiguracion = IncidenciasDal.ObtenerConfiguracionAlertas(EstatusEnum.Activo);
                listaIncidencias         = ObtenerIncidenciasActivas();


                if (listaAlertaConfiguracion != null && listaAlertaConfiguracion.Any())
                {
                    foreach (AlertaInfo alertaInfo in listaAlertaConfiguracion)
                    {
                        List <XDocument> listaNueva = new List <XDocument>();
                        string           query      = CrearQuery(alertaInfo.ConfiguracionAlerta);

                        XDocument resultadoQuery = IncidenciasDal.EjecutarQuery(query);

                        if (resultadoQuery != null)
                        {
                            if (resultadoQuery.Root != null)
                            {
                                var result = resultadoQuery.Root.Elements().ToList();
                                listaNueva.AddRange(result.Select(xElement => XDocument.Parse(xElement.ToString())));
                            }

                            if (listaIncidencias != null && listaIncidencias.Any())
                            {
                                List <XDocument> listaRegistrada = new List <XDocument>();
                                var incidencias =
                                    listaIncidencias.Where(x => x.Alerta.AlertaID == alertaInfo.AlertaID).ToList();
                                listaRegistrada.AddRange(incidencias.Select(incidenciasInfo => XDocument.Parse(incidenciasInfo.XmlConsulta.ToString())));

                                if (incidencias.Any())
                                {
                                    List <XDocument> registradas = new List <XDocument>();

                                    foreach (var xDocument in listaRegistrada)
                                    {
                                        var xdocumetCopy = new XDocument
                                                           (
                                            new XElement("Table",
                                                         from row in xDocument.Root.Elements()
                                                         select new XElement(row.Name, row.Value)));

                                        foreach (var document in listaNueva.Where(document => XNode.DeepEquals(xdocumetCopy, document)))
                                        {
                                            listaNew.Add(document);
                                            registradas.Add(xDocument);
                                        }
                                    }
                                    if (alertaInfo.TerminadoAutomatico == EstatusEnum.Activo)
                                    {
                                        listaRegistrada = listaRegistrada.Except(registradas).ToList();


                                        if (listaRegistrada != null && listaRegistrada.Any())
                                        {
                                            foreach (IncidenciasInfo incidencia in listaRegistrada
                                                     .Select(xDocument => incidencias.FirstOrDefault(x => XNode.DeepEquals(x.XmlConsulta, xDocument)))
                                                     .Where(incidencia => incidencia != null).Where(incidencia => incidencia.Estatus.EstatusId != Estatus.CerrarAler.GetHashCode()))
                                            {
                                                CerrarIncidenciaAutomatico(incidencia);
                                            }
                                        }
                                    }

                                    listaNueva = listaNueva.Except(listaNew).ToList();
                                }
                            }

                            if (listaNueva.Any())
                            {
                                foreach (var xDocument in listaNueva)
                                {
                                    int organizacionID = 0;


                                    foreach (var xElement in xDocument.Root.Elements())
                                    {
                                        if (xElement.Name.ToString().ToUpper() ==
                                            "OrganizacionID".ToUpper())
                                        {
                                            int xElementOrganizacionID;
                                            if (int.TryParse(xElement.Value, out xElementOrganizacionID))
                                            {
                                                OrganizacionInfo organizacion =
                                                    ListaOrganizacion.FirstOrDefault(o => o.OrganizacionID == (int.Parse(xElement.Value)) &&
                                                                                     o.TipoOrganizacion.TipoOrganizacionID == TipoOrganizacion.Ganadera.GetHashCode());
                                                if (organizacion != null)
                                                {
                                                    organizacionID = organizacion.OrganizacionID;
                                                }
                                            }
                                            break;
                                        }
                                        if (xElement.Name.ToString().ToUpper() ==
                                            "Nombre_Del_Centro".ToUpper())
                                        {
                                            OrganizacionInfo organizacion =
                                                ListaOrganizacion.FirstOrDefault(o => o.Descripcion.ToUpper() ==
                                                                                 (xElement.Value.ToUpper()));

                                            organizacion =
                                                ListaOrganizacion.FirstOrDefault(
                                                    o =>
                                                    organizacion != null &&
                                                    o.Division.ToUpper() == organizacion.Division.ToUpper() && o.TipoOrganizacion.TipoOrganizacionID == TipoOrganizacion.Ganadera.GetHashCode());
                                            if (organizacion != null)
                                            {
                                                organizacionID = organizacion.OrganizacionID;
                                            }
                                            break;
                                        }
                                    }

                                    IncidenciasInfo incidenciasInfo = new IncidenciasInfo
                                    {
                                        Organizacion = new OrganizacionInfo
                                        {
                                            OrganizacionID = organizacionID
                                        },

                                        Alerta = new AlertaInfo
                                        {
                                            AlertaID            = alertaInfo.AlertaID,
                                            HorasRespuesta      = alertaInfo.HorasRespuesta,
                                            ConfiguracionAlerta = new ConfiguracionAlertasInfo
                                            {
                                                NivelAlerta = new NivelAlertaInfo
                                                {
                                                    NivelAlertaId = alertaInfo.ConfiguracionAlerta.NivelAlerta.NivelAlertaId
                                                }
                                            }
                                        },
                                        XmlConsulta = xDocument,
                                        Estatus     = new EstatusInfo
                                        {
                                            EstatusId = Estatus.NuevaAlert.GetHashCode()
                                        },
                                        UsuarioCreacionID = usuario.UsuarioID,
                                        Activo            = EstatusEnum.Activo
                                    };
                                    listaNuevasIncidencias.Add(incidenciasInfo);
                                }
                            }
                        }
                    }
                }

                using (var transaction = new TransactionScope())
                {
                    if (listaNuevasIncidencias.Any())
                    {
                        GuardarNuevasIncidencias(listaNuevasIncidencias, TipoFolio.AlertaSiap.GetHashCode());
                    }

                    ProcesarIncicencias();

                    transaction.Complete();
                }
            }
            catch (ExcepcionGenerica)
            {
                throw;
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
            }
        }
Example #4
0
        /// <summary>
        /// Metrodo para obtener un listado de contratos por estado
        /// </summary>
        internal List <ContratoInfo> ObtenerPorEstado(EstatusEnum estatus)
        {
            List <ContratoInfo> result;

            try
            {
                Logger.Info();
                var contratoDAL = new ContratoDAL();
                result = contratoDAL.ObtenerPorEstado(estatus);
                if (result != null)
                {
                    foreach (var contratoInfo in result)
                    {
                        if (contratoInfo.Organizacion.OrganizacionID > 0)
                        {
                            var organizacionBl = new OrganizacionBL();
                            contratoInfo.Organizacion =
                                organizacionBl.ObtenerPorID(contratoInfo.Organizacion.OrganizacionID);
                        }

                        if (contratoInfo.Producto.ProductoId > 0)
                        {
                            var productoBl = new ProductoBL();
                            contratoInfo.Producto = productoBl.ObtenerPorID(contratoInfo.Producto);
                        }

                        if (contratoInfo.Proveedor.ProveedorID > 0)
                        {
                            var proveedorBl = new ProveedorBL();
                            contratoInfo.Proveedor =
                                proveedorBl.ObtenerPorID(contratoInfo.Proveedor.ProveedorID);
                        }

                        if (contratoInfo.TipoContrato.TipoContratoId > 0)
                        {
                            var tipoContratoBl = new TipoContratoBL();
                            contratoInfo.TipoContrato =
                                tipoContratoBl.ObtenerPorId(contratoInfo.TipoContrato.TipoContratoId);
                        }

                        if (contratoInfo.TipoFlete.TipoFleteId > 0)
                        {
                            var tipoFleteBl = new TipoFleteBL();
                            contratoInfo.TipoFlete =
                                tipoFleteBl.ObtenerPorId(contratoInfo.TipoFlete.TipoFleteId);
                        }

                        if (contratoInfo.ContratoId <= 0)
                        {
                            continue;
                        }
                        var contratoDetalleBl = new ContratoDetalleBL();
                        contratoInfo.ListaContratoDetalleInfo = contratoDetalleBl.ObtenerPorContratoId(contratoInfo);
                    }
                }
            }
            catch (ExcepcionGenerica)
            {
                throw;
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
            }
            return(result);
        }
Example #5
0
        /// <summary>
        /// Obtiene un contrato por id
        /// </summary>
        /// <param name="contratoInfo"></param>
        /// <returns>ContratoInfo</returns>
        internal ContratoInfo ObtenerPorId(ContratoInfo contratoInfo)
        {
            ContratoInfo contrato;

            try
            {
                Logger.Info();
                var contratoDAL = new ContratoDAL();
                contrato = contratoDAL.ObtenerPorId(contratoInfo);

                if (contrato != null)
                {
                    if (contrato.Organizacion.OrganizacionID > 0)
                    {
                        var organizacionBl = new OrganizacionBL();
                        contrato.Organizacion = organizacionBl.ObtenerPorID(contrato.Organizacion.OrganizacionID);
                    }

                    if (contrato.Producto.ProductoId > 0)
                    {
                        var productoBl = new ProductoBL();
                        contrato.Producto = productoBl.ObtenerPorID(contrato.Producto);
                    }

                    if (contrato.Proveedor.ProveedorID > 0)
                    {
                        var proveedorBl = new ProveedorBL();
                        contrato.Proveedor =
                            proveedorBl.ObtenerPorID(contrato.Proveedor.ProveedorID);
                    }

                    if (contrato.TipoContrato.TipoContratoId > 0)
                    {
                        var tipoContratoBl = new TipoContratoBL();
                        contrato.TipoContrato =
                            tipoContratoBl.ObtenerPorId(contrato.TipoContrato.TipoContratoId);
                        contrato.tipocontratodescripcion = contrato.TipoContrato.Descripcion.ToString();
                    }

                    if (contrato.TipoFlete != null && contrato.TipoFlete.TipoFleteId > 0)
                    {
                        var tipoFleteBl = new TipoFleteBL();
                        contrato.TipoFlete =
                            tipoFleteBl.ObtenerPorId(contrato.TipoFlete.TipoFleteId);
                    }

                    if (contrato.TipoCambio != null && contrato.TipoCambio.TipoCambioId > 0)
                    {
                        var tipoCambioBl = new TipoCambioBL();
                        contrato.TipoCambio =
                            tipoCambioBl.ObtenerPorId(contrato.TipoCambio.TipoCambioId);
                    }

                    if (contrato.ContratoId > 0)
                    {
                        var contratoDetalleBl = new ContratoDetalleBL();
                        contrato.ListaContratoDetalleInfo = contratoDetalleBl.ObtenerPorContratoId(contrato);
                    }

                    //Obtener precio y cantidad por tonelada
                    contrato.CantidadToneladas = (int)(contrato.Cantidad / 1000);
                    if (contrato.TipoCambio != null)
                    {
                        if (contrato.TipoCambio.Descripcion == Properties.ResourceServices.ContratoBL_DescripcionMonedaDolarMayuscula)
                        {
                            contrato.PrecioToneladas = (contrato.Precio * 1000) / contrato.TipoCambio.Cambio;
                        }
                        else
                        {
                            contrato.PrecioToneladas = contrato.Precio * 1000;
                        }
                    }

                    if (contrato.Cuenta != null)
                    {
                        if (contrato.Cuenta.CuentaSAPID > 0)
                        {
                            CuentaSAPBL cuentaSapBl = new CuentaSAPBL();
                            contrato.Cuenta.Activo = EstatusEnum.Activo;
                            contrato.Cuenta        = cuentaSapBl.ObtenerPorFiltroSinTipo(contrato.Cuenta);
                        }
                    }
                    //
                }
            }
            catch (ExcepcionGenerica)
            {
                throw;
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
            }
            return(contrato);
        }
Example #6
0
        /// <summary>
        /// Metodo para generar la proyeccion de reimplante
        /// </summary>
        internal void GenerarProyeccionReimplante()
        {
            //ResultadoPolizaModel resultadoPolizaModel = null;
            try
            {
                Logger.Info();
                var organizacionBL   = new OrganizacionBL();
                var usuarioBL        = new UsuarioBL();
                var loteBL           = new LoteBL();
                var corralBl         = new CorralBL();
                var loteProyeccionBL = new LoteProyeccionBL();
                var loteReimplanteBL = new LoteReimplanteBL();
                //Se obtiene el usuario del proceso de alimentacion
                UsuarioInfo usuario = usuarioBL.ObtenerPorActiveDirectory(UsuarioProcesosEnum.ProyeccionReimplante.ToString());
                //Si se encontro el usuario
                if (usuario != null)
                {
                    //Consulta todas las organizaciones que esten activas
                    List <OrganizacionInfo> listaOrganizaciones =
                        organizacionBL.ObtenerTodos(EstatusEnum.Activo).ToList();
                    if (listaOrganizaciones != null && listaOrganizaciones.Any())
                    {
                        //Se obtienen las organizaciones que son de tipo ganadera
                        List <OrganizacionInfo> listaOrganizacionesFiltrada =
                            listaOrganizaciones.Where(
                                organizacion =>
                                organizacion.TipoOrganizacion.TipoOrganizacionID == (int)TipoOrganizacion.Ganadera)
                            .ToList();
                        if (listaOrganizacionesFiltrada.Count > 0)
                        {
                            foreach (OrganizacionInfo organizacion in listaOrganizacionesFiltrada)
                            {
                                try
                                {
                                    //using (var scope = new TransactionScope())
                                    //{

                                    //Obtener los corrales-Lotes que fueron reimplantados
                                    List <LoteCorralReimplanteInfo> listaCorrales = ObtenerCorralesReimplantados(organizacion);
                                    if (listaCorrales != null && listaCorrales.Any())
                                    {
                                        foreach (var loteCorral in listaCorrales)
                                        {
                                            //Obtener el tipo de ganado del lote
                                            TipoGanadoInfo tipoGanadoInfo = loteBL.ObtenerTipoGanadoLoteID(loteCorral.Lote);
                                            //Info del lote
                                            loteCorral.Lote = loteBL.ObtenerPorID(loteCorral.Lote.LoteID);

                                            //Obtener las proyecciones de los corrales origenes
                                            IList <LoteProyeccionInfo> listaProyeccionOrigen =
                                                loteProyeccionBL.ObtenerProyeccionDeLotesOrigen(loteCorral);

                                            if (listaProyeccionOrigen != null && listaProyeccionOrigen.Any())
                                            {
                                                var pesoReimplantePromedio = loteCorral.PesoReimplante /
                                                                             loteCorral.TotalCabezas;
                                                var pesoOrigenPromedio = loteCorral.PesoOrigen /
                                                                         loteCorral.TotalCabezas;

                                                //ObtenerDias engorda del corral
                                                var diasEngordaCorral =
                                                    corralBl.ObtenerDiasEngordaPorLote(loteCorral.Lote);
                                                //Calcular la Ganacia Diaria = (PesoReimplante-PesoOrigen)/DiasEngordaDelCorral
                                                decimal gananciaDiaria =
                                                    ((pesoReimplantePromedio - pesoOrigenPromedio) /
                                                     (decimal)diasEngordaCorral);
                                                gananciaDiaria = Math.Round(gananciaDiaria, 2);

                                                //Calculo diasEngorda: (PesoSalida-PesoPromedioReimplante)/GananciaDiaria
                                                var diasEngorda = (int)((tipoGanadoInfo.PesoSalida - pesoReimplantePromedio) /
                                                                        gananciaDiaria);

                                                var loteProyeccion =
                                                    loteProyeccionBL.ObtenerPorLote(loteCorral.Lote);

                                                LoteReimplanteInfo loteReimplante = null;
                                                var numeroReimplante = listaProyeccionOrigen.Max(p => p.NumeroReimplante);


                                                if (loteProyeccion == null)
                                                {
                                                    // Se crea el registro en lote proyeccion
                                                    loteProyeccion = new LoteProyeccionInfo
                                                    {
                                                        LoteID            = loteCorral.Lote.LoteID,      //OK
                                                        OrganizacionID    = organizacion.OrganizacionID, //OK
                                                        Frame             = 0,                           //OK
                                                        GananciaDiaria    = gananciaDiaria,              //OK
                                                        ConsumoBaseHumeda =
                                                            listaProyeccionOrigen.Select(p => p.ConsumoBaseHumeda).Sum() /
                                                            listaProyeccionOrigen.Count(),     // Promedio De los Corrales Origenes
                                                        Conversion =
                                                            listaProyeccionOrigen.Select(p => p.Conversion).Sum() /
                                                            listaProyeccionOrigen.Count(),     // Promedio De los Corrales Origenes
                                                        PesoMaduro =
                                                            listaProyeccionOrigen.Select(p => p.PesoMaduro).Sum() /
                                                            listaProyeccionOrigen.Count(),     // Promedio De los Corrales Origenes
                                                        PesoSacrificio =
                                                            listaProyeccionOrigen.Select(p => p.PesoSacrificio).Sum() /
                                                            listaProyeccionOrigen.Count(), // Promedio De los Corrales Origenes
                                                        DiasEngorda        = diasEngorda,  // OK
                                                        FechaEntradaZilmax =
                                                            ObtenerFechaZilmax(loteCorral.Lote, tipoGanadoInfo,
                                                                               diasEngorda),  //OK
                                                        UsuarioCreacionID = usuario.UsuarioID //OK
                                                    };

                                                    loteProyeccion.LoteProyeccionID =
                                                        loteProyeccionBL.Guardar(loteProyeccion);

                                                    // Fecha Sacrificio = fechaInicioLote + loteProyeccion.DiasEngorda
                                                    DateTime fechaProyectada =
                                                        loteCorral.Lote.FechaInicio.AddDays(loteProyeccion.DiasEngorda);

                                                    DateTime fechaHoy = DateTime.Now;
                                                    TimeSpan ts       = fechaProyectada - fechaHoy;
                                                    // GananciaDiaria*DiasQueFlatanParaReimplante) + PesoReimplante
                                                    int pesoProyectado =
                                                        (int)
                                                        ((loteProyeccion.GananciaDiaria * ts.Days) +
                                                         pesoReimplantePromedio);
                                                    //Se almacena el lote reimplante nuevo
                                                    GuardarNuevoReimplante(numeroReimplante, loteProyeccion, fechaProyectada, usuario, loteCorral, pesoProyectado, pesoOrigenPromedio);
                                                }
                                                else
                                                {
                                                    // Si ya existe el LoteProyeccion Obtener los lotesReimplantes
                                                    List <LoteReimplanteInfo> loteReimplanteInfo =
                                                        loteReimplanteBL.ObtenerListaPorLote(loteCorral.Lote);

                                                    DateTime fechaProyectada =
                                                        loteCorral.Lote.FechaInicio.AddDays(loteProyeccion.DiasEngorda);
                                                    DateTime fechaHoy = DateTime.Now;
                                                    TimeSpan ts       = fechaProyectada - fechaHoy;
                                                    // GananciaDiaria*DiasQueFlatanParaReimplante) + PesoReimplante
                                                    int pesoProyectado =
                                                        (int)
                                                        ((loteProyeccion.GananciaDiaria * ts.Days) +
                                                         pesoReimplantePromedio);

                                                    if (loteReimplanteInfo != null)
                                                    {
                                                        var numeroReimplanteMaximo = loteReimplanteInfo.Max(p => p.NumeroReimplante);
                                                        if (numeroReimplante == 2 && numeroReimplanteMaximo != 3)
                                                        {
                                                            // El peso Origen sea menor a 200 generar el lote reimplante
                                                            // y que los dias engorda sean mayores a 90 dias
                                                            if (pesoOrigenPromedio <= 200 && loteProyeccion.DiasEngorda >= 90)
                                                            {
                                                                // Se crea el registro en lote reimplante
                                                                loteReimplante = new LoteReimplanteInfo
                                                                {
                                                                    LoteProyeccionID  = loteProyeccion.LoteProyeccionID,
                                                                    NumeroReimplante  = 3,
                                                                    FechaProyectada   = fechaProyectada,
                                                                    PesoProyectado    = pesoProyectado,
                                                                    PesoReal          = 0,
                                                                    FechaReal         = new DateTime(1900, 01, 01),
                                                                    UsuarioCreacionID = usuario.UsuarioID
                                                                };
                                                                loteReimplanteBL.Guardar(loteReimplante);
                                                            }
                                                        }
                                                    }
                                                    else
                                                    {
                                                        //Se almacena el lote reimplante nuevo
                                                        GuardarNuevoReimplante(numeroReimplante, loteProyeccion, fechaProyectada, usuario, loteCorral, pesoProyectado, pesoOrigenPromedio);
                                                    }
                                                }
                                            }
                                        }
                                    }
                                    //    scope.Complete();
                                    //}
                                }
                                catch (Exception ex)
                                {
                                    var bitacoraBL = new BitacoraIncidenciasBL();
                                    var bitacora   = new BitacoraErroresInfo
                                    {
                                        AccionesSiapID    = AccionesSIAPEnum.SerProReim,
                                        Mensaje           = ex.Message,
                                        UsuarioCreacionID = usuario.UsuarioID
                                    };
                                    bitacoraBL.GuardarError(bitacora);
                                }
                            }
                        }
                    }
                }
            }
            catch (ExcepcionServicio ex)
            {
                Logger.Error(ex);
                throw;
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
            }
        }