Ejemplo n.º 1
0
        public LoteInfo DeteccionObtenerPorCorral(int organizacionID, int corralID)
        {
            try
            {
                Logger.Info();
                var      loteBL   = new LoteBL();
                LoteInfo loteInfo = loteBL.DeteccionObtenerPorCorral(organizacionID, corralID);

                return(loteInfo);
            }
            catch (ExcepcionGenerica)
            {
                throw;
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Guarda la salida por muerte en necropsia
        /// </summary>
        /// <param name="muerte"></param>
        /// <returns></returns>
        internal int GuardarSalidaPorMuerteNecropsia(MuerteInfo muerte)
        {
            int retValue;

            try
            {
                Logger.Info();
                var                animalBL             = new AnimalBL();
                var                animalMovimientoBL   = new AnimalMovimientoBL();
                var                corralBL             = new CorralBL();
                var                loteBL               = new LoteBL();
                var                trampaBL             = new TrampaBL();
                var                entradaGanadoBL      = new EntradaGanadoBL();
                var                animalMovimientoInfo = new AnimalMovimientoInfo();
                var                corralInfo           = new CorralInfo();
                var                muerteDAL            = new MuerteDAL();
                PolizaAbstract     poliza;
                IList <PolizaInfo> polizaSalidaMuerte;

                AnimalInfo animalInfo = null;
                using (var transaccion = new TransactionScope())
                {
                    //Se obtiene la info del Corral
                    if (muerte.CorralId > 0)
                    {
                        corralInfo = corralBL.ObtenerPorId(muerte.CorralId);
                    }
                    else if (muerte.CorralCodigo != "")
                    {
                        corralInfo = corralBL.ObtenerCorralPorCodigo(muerte.OrganizacionId,
                                                                     muerte.CorralCodigo);
                    }
                    //Se obtiene la info del Lote
                    LoteInfo loteInfo;
                    if (muerte.LoteId > 0)
                    {
                        loteInfo = loteBL.ObtenerPorID(muerte.LoteId);
                    }
                    else
                    {
                        loteInfo = loteBL.DeteccionObtenerPorCorral(muerte.OrganizacionId, corralInfo.CorralID);
                    }
                    /* Se valida el Grupo del corral */
                    switch (corralInfo.GrupoCorral)
                    {
                    case (int)GrupoCorralEnum.Recepcion:
                        /* almacena el animal en el Inventario   */
                        animalInfo = new AnimalInfo
                        {
                            Arete                 = muerte.Arete,
                            AreteMetalico         = muerte.AreteMetalico,
                            FechaCompra           = DateTime.Now,
                            TipoGanadoID          = 1,
                            CalidadGanadoID       = 1, //***
                            ClasificacionGanadoID = 1, //***
                            PesoCompra            = 0,
                            PesoLlegada           = 0, //***
                            FolioEntrada          = 1,
                            OrganizacionIDEntrada = muerte.OrganizacionId,
                            Paletas               = 0,
                            Venta                 = false,
                            Cronico               = false,
                            Activo                = true,
                            UsuarioCreacionID     = muerte.UsuarioCreacionID
                        };

                        var interfazAnimalBl          = new InterfaceSalidaAnimalBL();
                        var interfaceSalidoAnimalInfo =
                            interfazAnimalBl.ObtenerNumeroAreteIndividual(muerte.Arete, muerte.OrganizacionId);
                        int folioEntradaInterfaz = 0;
                        if (interfaceSalidoAnimalInfo != null)
                        {
                            animalInfo.FechaCompra  = interfaceSalidoAnimalInfo.FechaCompra;
                            animalInfo.PesoCompra   = (int)interfaceSalidoAnimalInfo.PesoCompra;
                            animalInfo.TipoGanadoID = interfaceSalidoAnimalInfo.TipoGanado.TipoGanadoID;
                            folioEntradaInterfaz    = interfaceSalidoAnimalInfo.Partida;
                        }

                        EntradaGanadoInfo entradaGanadoInterfaz =
                            entradaGanadoBL.ObtenerEntradasGanadoCosteado(folioEntradaInterfaz, muerte.OrganizacionId);

                        /* Obtener la entrada de ganado del Corral-Lote para conocer el origen */
                        EntradaGanadoInfo entradaGanadoInfo = entradaGanadoBL.ObtenerEntradaPorLote(loteInfo);
                        if (entradaGanadoInfo != null)
                        {
                            if (entradaGanadoInterfaz != null)
                            {
                                if (entradaGanadoInfo.EmbarqueID == entradaGanadoInterfaz.EmbarqueID)
                                {
                                    animalInfo.FolioEntrada = entradaGanadoInterfaz.FolioEntrada;
                                }
                            }
                            if (animalInfo.FolioEntrada == 1)
                            {
                                if (!entradaGanadoInfo.EsRuteo)
                                {
                                    animalInfo.FolioEntrada = entradaGanadoInfo.FolioEntrada;
                                }
                                else
                                {
                                    List <CabezasPartidasModel> partidasRuteo =
                                        entradaGanadoBL.ObtenerCabezasEntradasRuteo(entradaGanadoInfo.EmbarqueID);
                                    if (partidasRuteo != null && partidasRuteo.Any())
                                    {
                                        CabezasPartidasModel partidaConPendientes =
                                            partidasRuteo.OrderByDescending(part => part.CabezasPendientes).
                                            FirstOrDefault();
                                        if (partidaConPendientes != null)
                                        {
                                            animalInfo.FolioEntrada = partidaConPendientes.FolioEntrada;
                                        }
                                    }
                                }
                            }
                            //if (entradaGanadoInfo.TipoOrganizacionOrigenId != (int)TipoOrganizacion.CompraDirecta)
                            //{

                            //}
                            //animalInfo.FolioEntrada = entradaGanadoInfo.FolioEntrada;
                        }
                        /* Se almacena el animalMovimiento */
                        animalInfo = animalBL.GuardarAnimal(animalInfo);
                        break;

                    default:
                        if (muerte.AnimalId > 0)
                        {
                            animalInfo = animalBL.ObtenerAnimalAnimalID(muerte.AnimalId);
                            /* Se busca el animal En Salida Animal */
                            AnimalSalidaInfo animalSalidaInfo =
                                animalBL.ObtenerAnimalSalidaAnimalID(animalInfo.AnimalID);
                            if (animalSalidaInfo != null)
                            {
                                /* Se valida si no esta en una corraleta de sacrificio */
                                CorralInfo corraleta = corralBL.ObtenerPorId(animalSalidaInfo.CorraletaId);
                                if (corraleta != null &&
                                    corraleta.TipoCorral.TipoCorralID == (int)TipoCorral.CorraletaSacrificio)
                                {
                                    /* Se disminuyen las cabezas del lote en todas las ordenes de sacrificio   */
                                    var ordenSacrificioBL = new OrdenSacrificioBL();
                                    ordenSacrificioBL.DecrementarAnimalMuerto(muerte.AnimalId);
                                    /* Eliminar AnimalSalida */
                                    animalBL.EliminarAnimalSalida(animalInfo.AnimalID, loteInfo.LoteID);
                                }
                            }
                        }
                        else
                        {
                            var listaAnimales = animalBL.ObtenerAnimalesPorCorral(corralInfo, muerte.OrganizacionId);
                            if (listaAnimales != null)     //&& listaAnimales.Any())
                            {
                                //animalInfo = listaAnimales.FirstOrDefault(registro => registro.UsuarioCreacionID == 1);
                                animalInfo = listaAnimales.FirstOrDefault(registro => registro.UsuarioCreacionID == 1);
                                if (animalInfo == null)
                                {
                                    animalInfo = listaAnimales.OrderBy(ani => ani.AnimalID).FirstOrDefault();
                                }
                            }
                        }
                        break;
                    }

                    if (animalInfo != null)
                    {
                        animalInfo.UsuarioCreacionID     = muerte.UsuarioCreacionID;
                        animalInfo.UsuarioModificacionID = muerte.UsuarioCreacionID;
                        if (muerte.AnimalId == 0)
                        {
                            muerte.AnimalId = animalInfo.AnimalID;
                        }
                    }

                    /* Se actualiza la muerte con salida por necropsia */
                    muerteDAL.GuardarSalidaPorMuerteNecropsia(muerte);
                    if (animalInfo != null)
                    {
                        if (muerte.Peso == 0)
                        {
                            List <AnimalMovimientoInfo> ultimosMovimiento = animalMovimientoBL.ObtenerUltimoMovimientoAnimal(new List <AnimalInfo> {
                                animalInfo
                            });
                            if (ultimosMovimiento != null && ultimosMovimiento.Any())
                            {
                                AnimalMovimientoInfo ultimoMovimientoAnimal =
                                    ultimosMovimiento.OrderByDescending(ani => ani.AnimalMovimientoID).FirstOrDefault();

                                if (ultimoMovimientoAnimal != null)
                                {
                                    muerte.Peso = ultimoMovimientoAnimal.Peso;
                                }
                            }
                        }
                        /* Insertamos el movimiento de Muerte */
                        var trampaInfo = trampaBL.ObtenerPorHostName(TrampaGlobal.TrampaNecropsia.ToString());
                        if (trampaInfo != null)
                        {
                            animalMovimientoInfo.TrampaID = trampaInfo.TrampaID;
                        }
                        /* Se genera el animal Movimiento para almacenarlo*/
                        animalMovimientoInfo = new AnimalMovimientoInfo
                        {
                            AnimalID          = animalInfo.AnimalID,
                            OrganizacionID    = muerte.OrganizacionId,
                            CorralID          = loteInfo.CorralID,
                            LoteID            = loteInfo.LoteID,
                            Peso              = muerte.Peso,
                            Temperatura       = 0,
                            TipoMovimientoID  = (int)TipoMovimiento.Muerte,
                            TrampaID          = trampaInfo != null ? trampaInfo.TrampaID : 1,
                            OperadorID        = muerte.OperadorNecropsiaId,
                            Observaciones     = muerte.Observaciones,
                            Activo            = EstatusEnum.Activo,
                            UsuarioCreacionID = muerte.UsuarioCreacionID
                        };

                        //Proceso para Guardar Costos
                        AnimalCostoBL     animalCostoBl = new AnimalCostoBL();
                        List <AnimalInfo> animales      = new List <AnimalInfo>();
                        animales.Add(animalInfo);
                        List <AnimalCostoInfo> listaCostos = animalCostoBl.ObtenerCostosAnimal(animales);

                        if (listaCostos == null || listaCostos.Count <= 0)
                        {
                            animales = animalBL.ProcesoGenerarCostos(animales);
                        }
                        else
                        {
                            if (!listaCostos.Any(registro => registro.CostoID == Costo.CostoGanado.GetHashCode()))
                            {
                                animales = animalBL.ProcesoGenerarCostos(animales);
                            }
                        }

                        //Proceso Armar Poliza
                        if (animales != null && animales.Count > 0)
                        {
                            if (animales.FirstOrDefault().ListaCostosAnimal != null && animales.FirstOrDefault().ListaCostosAnimal.Count > 0)
                            {
                                poliza = FabricaPoliza.ObtenerInstancia().ObtenerTipoPoliza(TipoPoliza.SalidaMuerte);
                                List <AnimalCostoInfo> listaCostosAnimal = animales.FirstOrDefault().ListaCostosAnimal;
                                foreach (AnimalCostoInfo animalCosto in listaCostosAnimal)
                                {
                                    animalCosto.OrganizacionID = muerte.OrganizacionId;
                                }
                                polizaSalidaMuerte = poliza.GeneraPoliza(listaCostosAnimal);
                                if (polizaSalidaMuerte != null && polizaSalidaMuerte.Any())
                                {
                                    polizaSalidaMuerte.ToList().ForEach(
                                        org =>
                                    {
                                        org.OrganizacionID         = muerte.OrganizacionId;
                                        org.UsuarioCreacionID      = muerte.UsuarioCreacionID;
                                        org.ArchivoEnviadoServidor = 1;
                                    });
                                    //retorno = poliza.ImprimePoliza(ventasGanado, polizaSalidaMuerte);
                                    var polizaBL = new PolizaBL();
                                    polizaBL.GuardarServicioPI(polizaSalidaMuerte, TipoPoliza.SalidaMuerte);
                                }
                            }
                        }

                        /* Se almacena el animalMovimiento */
                        animalMovimientoBL.GuardarAnimalMovimiento(animalMovimientoInfo);

                        /*  Se da de baja el animal */
                        animalBL.InactivarAnimal(animalInfo);

                        /* Enviar al historico el animal inactivo */
                        var animalMuerto = new List <AnimalInfo> {
                            animalInfo
                        };
                        animalBL.EnviarAHistorico(animalMuerto);
                    }
                    /* Decrementar la cabeza del lote */
                    loteInfo.Cabezas = loteInfo.Cabezas - 1;
                    loteInfo.UsuarioModificacionID = muerte.UsuarioCreacionID;
                    var filtro = new FiltroActualizarCabezasLote
                    {
                        CabezasProcesadas     = 1,
                        LoteIDDestino         = 0,
                        LoteIDOrigen          = loteInfo.LoteID,
                        UsuarioModificacionID = muerte.UsuarioCreacionID
                    };

                    CabezasActualizadasInfo resultadoCabezas = loteBL.ActualizarCabezasProcesadas(filtro);


                    //Si ya no tenemos cabezas en el lote se actualizanb los pesos llegada
                    if (resultadoCabezas.CabezasOrigen <= 0)
                    {
                        if (corralInfo.GrupoCorral == (int)GrupoCorralEnum.Recepcion)
                        {
                            /* Si el corral es de Recepcion */
                            var corteGanadoPl = new CorteGanadoBL();
                            corteGanadoPl.ObtenerPesosOrigenLlegada(muerte.OrganizacionId,
                                                                    loteInfo.CorralID,
                                                                    loteInfo.LoteID);
                        }
                    }

                    transaccion.Complete();
                    retValue = 1;
                }
            }
            catch (ExcepcionGenerica)
            {
                throw;
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
            }

            return(retValue);
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Metodo para Guardar/Modificar un Corral
        /// </summary>
        /// <param name="arete"></param>
        /// <param name="organizacion"></param>
        /// <param name="codigoCorral"></param>
        /// <param name="corraletaID"></param>
        /// <param name="usuarioCreacion"></param>
        /// <param name="tipoMovimiento"></param>
        /// <param name="operador"></param>
        internal int Guardar(string arete, int organizacion, string codigoCorral, int corraletaID, int usuarioCreacion, int tipoMovimiento, int operador)
        {
            int retorno = 0;

            try
            {
                Logger.Info();
                var salidaIndividualDAL = new SalidaIndividualDAL();
                var animalBl            = new AnimalBL();
                var corralBl            = new CorralBL();
                var loteBl = new LoteBL();

                using (var transaccion = new TransactionScope())
                {
                    var animal = animalBl.ObtenerAnimalPorArete(arete, organizacion);
                    if (animal != null)
                    {
                        if (tipoMovimiento == TipoMovimiento.SalidaPorRecuperacion.GetHashCode())
                        {
                            var corralOrigen = corralBl.ObtenerCorralPorCodigo(organizacion, codigoCorral);
                            var loteOrigen   = new LoteInfo();
                            if (corralOrigen != null)
                            {
                                loteOrigen = loteBl.DeteccionObtenerPorCorral(organizacion, corralOrigen.CorralID);
                            }

                            var corralDestino = corralBl.ObtenerPorId(corraletaID);
                            var loteDestino   = new LoteInfo();
                            if (corralDestino != null)
                            {
                                loteDestino = loteBl.DeteccionObtenerPorCorral(organizacion, corralDestino.CorralID);
                            }

                            if (corralOrigen != null)
                            {
                                if (loteOrigen != null)
                                {
                                    if (corralDestino != null)
                                    {
                                        if (corralDestino.TipoCorral.TipoCorralID !=
                                            TipoCorral.CorraletaRecuperado.GetHashCode() && corralDestino.TipoCorral.TipoCorralID != TipoCorral.CorraletaRecuperadosPartida.GetHashCode())
                                        {
                                            if (loteDestino != null)
                                            {
                                                var animalMovimientoBl = new AnimalMovimientoBL();

                                                var ultimoMovimiento = animalBl.ObtenerUltimoMovimientoAnimal(animal);

                                                if (ultimoMovimiento != null)
                                                {
                                                    var animalMovimientoOrigen = new AnimalMovimientoInfo
                                                    {
                                                        AnimalID          = animal.AnimalID,
                                                        CorralID          = corralDestino.CorralID,
                                                        LoteID            = loteDestino.LoteID,
                                                        TipoMovimientoID  = tipoMovimiento,
                                                        OperadorID        = operador,
                                                        OrganizacionID    = organizacion,
                                                        TrampaID          = ultimoMovimiento.TrampaID,
                                                        Peso              = ultimoMovimiento.Peso,
                                                        Temperatura       = ultimoMovimiento.Temperatura,
                                                        UsuarioCreacionID = usuarioCreacion
                                                    };
                                                    animalMovimientoBl.GuardarAnimalMovimiento(animalMovimientoOrigen);

                                                    loteOrigen.Cabezas = loteOrigen.Cabezas - 1;

                                                    loteDestino.Cabezas       = loteDestino.Cabezas + 1;
                                                    loteDestino.CabezasInicio = loteDestino.CabezasInicio + 1;

                                                    var filtroActualizaCabezas = new FiltroActualizarCabezasLote
                                                    {
                                                        LoteIDOrigen          = loteOrigen.LoteID,
                                                        LoteIDDestino         = loteDestino.LoteID,
                                                        CabezasProcesadas     = 1,
                                                        UsuarioModificacionID = usuarioCreacion
                                                    };
                                                    loteBl.ActualizarCabezasProcesadas(filtroActualizaCabezas);
                                                }
                                                else
                                                {
                                                    retorno = -1;
                                                }
                                            }
                                            else
                                            {
                                                retorno = -1;
                                            }
                                        }
                                        else
                                        {
                                            var loteBL             = new LoteBL();
                                            var animalMovimientoBl = new AnimalMovimientoBL();
                                            var ultimoMovimiento   = animalBl.ObtenerUltimoMovimientoAnimal(animal);

                                            LoteInfo loteDestinoCorraleta = loteBL.DeteccionObtenerPorCorral(organizacion,
                                                                                                             corralDestino.CorralID);
                                            int loteIDGuardar = 0;
                                            if (loteDestinoCorraleta == null || loteDestinoCorraleta.Activo == EstatusEnum.Inactivo)
                                            {
                                                var loteNuevo = new LoteInfo
                                                {
                                                    Activo               = EstatusEnum.Activo,
                                                    Cabezas              = 1,
                                                    CabezasInicio        = 1,
                                                    CorralID             = corralDestino.CorralID,
                                                    DisponibilidadManual = false,
                                                    OrganizacionID       = organizacion,
                                                    TipoCorralID         = corralDestino.TipoCorral.TipoCorralID,
                                                    TipoProcesoID        = TipoProceso.EngordaPropio.GetHashCode(),
                                                    UsuarioCreacionID    = usuarioCreacion
                                                };
                                                loteIDGuardar = loteBL.GuardaLote(loteNuevo);
                                            }
                                            else
                                            {
                                                loteIDGuardar = loteDestinoCorraleta.LoteID;
                                                loteDestinoCorraleta.Cabezas = loteDestinoCorraleta.Cabezas + 1;

                                                var filtroActualizaCabezas = new FiltroActualizarCabezasLote
                                                {
                                                    LoteIDOrigen          = 0,
                                                    LoteIDDestino         = loteDestinoCorraleta.LoteID,
                                                    CabezasProcesadas     = 1,
                                                    UsuarioModificacionID = usuarioCreacion
                                                };
                                                loteBl.ActualizarCabezasProcesadas(filtroActualizaCabezas);

                                                //loteBl.ActualizaNoCabezasEnLote(loteDestinoCorraleta, loteDestinoCorraleta);
                                            }

                                            if (ultimoMovimiento != null)
                                            {
                                                var animalMovimientoOrigen = new AnimalMovimientoInfo
                                                {
                                                    AnimalID          = animal.AnimalID,
                                                    CorralID          = corralDestino.CorralID,
                                                    LoteID            = loteIDGuardar,
                                                    TipoMovimientoID  = tipoMovimiento,
                                                    OrganizacionID    = organizacion,
                                                    OperadorID        = operador,
                                                    TrampaID          = ultimoMovimiento.TrampaID,
                                                    Peso              = ultimoMovimiento.Peso,
                                                    Temperatura       = ultimoMovimiento.Temperatura,
                                                    UsuarioCreacionID = usuarioCreacion
                                                };
                                                animalMovimientoBl.GuardarAnimalMovimiento(animalMovimientoOrigen);


                                                loteOrigen.Cabezas = loteOrigen.Cabezas - 1;

                                                var filtroActualizaCabezas = new FiltroActualizarCabezasLote
                                                {
                                                    LoteIDOrigen          = loteOrigen.LoteID,
                                                    LoteIDDestino         = 0,
                                                    CabezasProcesadas     = 1,
                                                    UsuarioModificacionID = usuarioCreacion
                                                };
                                                loteBl.ActualizarCabezasProcesadas(filtroActualizaCabezas);
                                            }
                                            else
                                            {
                                                retorno = -1;
                                            }
                                        }
                                    }
                                    else
                                    {
                                        retorno = -1;
                                    }
                                }
                                else
                                {
                                    retorno = -1;
                                }
                            }
                            else
                            {
                                retorno = -1;
                            }
                        }
                        else//Salida por sacrificio
                        {
                            // Se crean los movimientos del animal
                            retorno = GuardarSalidaIndividialSacrificio(animal, organizacion, codigoCorral, corraletaID, usuarioCreacion, tipoMovimiento, operador);

                            // Se crea registro en animal Salida
                            retorno = salidaIndividualDAL.Guardar(arete, organizacion, codigoCorral,
                                                                  corraletaID, usuarioCreacion, tipoMovimiento);
                        }
                    }
                    else
                    {
                        retorno = -1;
                    }
                    transaccion.Complete();
                }

                return(retorno);
            }
            catch (ExcepcionGenerica)
            {
                retorno = -1;
                throw;
            }
            catch (Exception ex)
            {
                retorno = -1;
                Logger.Error(ex);
                throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
            }
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Metodo para guardar la salida a sacrificio a un animal
        /// </summary>
        /// <param name="animal"></param>
        /// <param name="organizacion"></param>
        /// <param name="codigoCorral"></param>
        /// <param name="corraletaID"></param>
        /// <param name="usuarioCreacion"></param>
        /// <param name="tipoMovimiento"></param>
        /// <param name="operador"></param>
        private int GuardarSalidaIndividialSacrificio(AnimalInfo animal, int organizacion, string codigoCorral, int corraletaID, int usuarioCreacion, int tipoMovimiento, int operador)
        {
            int retorno            = 0;
            var animalBl           = new AnimalBL();
            var corralBl           = new CorralBL();
            var animalMovimientoBl = new AnimalMovimientoBL();
            var loteBl             = new LoteBL();

            var corralOrigen = corralBl.ObtenerCorralPorCodigo(organizacion, codigoCorral);

            if (corralOrigen != null)
            {
                var loteOrigen = loteBl.DeteccionObtenerPorCorral(organizacion, corralOrigen.CorralID);
                if (loteOrigen != null)
                {
                    var corralDestino = corralBl.ObtenerPorId(corraletaID);
                    if (corralDestino != null)
                    {
                        var loteDestino = loteBl.DeteccionObtenerPorCorral(organizacion, corralDestino.CorralID);
                        if (loteDestino == null)
                        {
                            // Si el corral destino no tiene lo te se crea uno
                            var loteBL        = new LoteBL();
                            int loteIDGuardar = 0;
                            var loteNuevo     = new LoteInfo
                            {
                                Activo               = EstatusEnum.Activo,
                                Cabezas              = 0,
                                CabezasInicio        = 0,
                                CorralID             = corralDestino.CorralID,
                                DisponibilidadManual = false,
                                OrganizacionID       = organizacion,
                                TipoCorralID         = corralDestino.TipoCorral.TipoCorralID,
                                TipoProcesoID        = TipoProceso.EngordaPropio.GetHashCode(),
                                UsuarioCreacionID    = usuarioCreacion
                            };
                            loteIDGuardar = loteBL.GuardaLote(loteNuevo);
                            loteDestino   = new LoteInfo {
                                LoteID = loteIDGuardar
                            };
                        }
                        // Se obtiene la info del ultimo movimiento del animal
                        var ultimoMovimiento = animalBl.ObtenerUltimoMovimientoAnimal(animal);
                        if (ultimoMovimiento != null)
                        {
                            var animalMovimientoOrigen = new AnimalMovimientoInfo
                            {
                                AnimalID          = animal.AnimalID,
                                CorralID          = corralDestino.CorralID,
                                LoteID            = loteDestino.LoteID,
                                TipoMovimientoID  = tipoMovimiento,
                                OperadorID        = operador,
                                OrganizacionID    = organizacion,
                                TrampaID          = ultimoMovimiento.TrampaID,
                                Peso              = ultimoMovimiento.Peso,
                                Temperatura       = ultimoMovimiento.Temperatura,
                                UsuarioCreacionID = usuarioCreacion
                            };
                            animalMovimientoBl.GuardarAnimalMovimiento(animalMovimientoOrigen);

                            loteOrigen.Cabezas        = loteOrigen.Cabezas - 1;
                            loteDestino.Cabezas       = loteDestino.Cabezas + 1;
                            loteDestino.CabezasInicio = loteDestino.CabezasInicio + 1;

                            var filtroActualizaCabezas = new FiltroActualizarCabezasLote
                            {
                                LoteIDOrigen          = loteOrigen.LoteID,
                                LoteIDDestino         = loteDestino.LoteID,
                                CabezasProcesadas     = 1,
                                UsuarioModificacionID = usuarioCreacion
                            };
                            loteBl.ActualizarCabezasProcesadas(filtroActualizaCabezas);

                            //loteBl.ActualizaNoCabezasEnLote(loteDestino, loteOrigen);
                        }
                        else
                        {
                            retorno = -1;
                        }
                    }
                    else
                    {
                        retorno = -1;
                    }
                }
                else
                {
                    retorno = -1;
                }
            }
            else
            {
                retorno = -1;
            }

            return(retorno);
        }