Esempio n. 1
0
        internal int GuardarDetalle(GrupoVentaGanadoInfo venta)
        {
            var animalBL = new AnimalBL();
            var corralBl = new CorralBL();
            var loteBl   = new LoteBL();

            try
            {
                Logger.Info();
                int retorno;
                using (var transaccion = new TransactionScope())
                {
                    var ventaGanadoDetalleDAL = new VentaGanadoDetalleDAL();

                    //Obtener Corral y Lote
                    var corral = corralBl.ObtenerCorralPorCodigo(venta.OrganizacionId, venta.CodigoCorral);
                    var lote   = loteBl.ObtenerPorCorralCerrado(venta.OrganizacionId, corral.CorralID);

                    if (venta.TipoVenta == Info.Enums.TipoVentaEnum.Propio)
                    {
                        //Validar si tenemos animales que pertenezcan a la carga inicial
                        var listaCargaInicial = venta.VentaGandadoDetalle.Where(animal => animal.Animal.CargaInicial).ToList();
                        if (listaCargaInicial != null && listaCargaInicial.Any())
                        {
                            foreach (var animal in listaCargaInicial)
                            {
                                var animalInventario = animalBL.ObtenerAnimalPorArete(animal.Arete, venta.OrganizacionId);
                                var deteccionGrabar  = new DeteccionInfo
                                {
                                    CorralID          = corral.CorralID,
                                    LoteID            = lote.LoteID,
                                    UsuarioCreacionID = venta.VentaGanado.UsuarioModificacionID
                                };

                                // Se intercambian aretes por encontrarse el animal en un corral distinto y ser carga inicial
                                animalBL.ReemplazarAretes(animalInventario, deteccionGrabar);
                            }
                        }
                    }

                    retorno = ventaGanadoDetalleDAL.GuardarDetalle(venta);

                    // Se cierral la transaccion
                    transaccion.Complete();
                }
                return(retorno);
            }
            catch (ExcepcionGenerica)
            {
                throw;
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
            }
        }
Esempio n. 2
0
 public CorralInfo ObtenerCorralPorCodigo(int organizacionId, string corralCodigo)
 {
     try
     {
         Logger.Info();
         var        corralBL = new CorralBL();
         CorralInfo result   = corralBL.ObtenerCorralPorCodigo(organizacionId, corralCodigo);
         return(result);
     }
     catch (ExcepcionGenerica)
     {
         throw;
     }
     catch (Exception ex)
     {
         Logger.Error(ex);
         throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
     }
 }
Esempio n. 3
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);
        }
Esempio n. 4
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);
            }
        }
Esempio n. 5
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);
        }
Esempio n. 6
0
        /// <summary>
        /// Valida el corral que se le validara el reimplante
        /// </summary>
        /// <param name="corral">
        /// The corral.
        /// </param>
        /// <returns>
        /// The <see cref="ResultadoValidacion"/>.
        /// </returns>
        /// <exception cref="ExcepcionDesconocida">
        /// </exception>
        internal ResultadoValidacion ValidarCorral(CorralInfo corral)
        {
            try
            {
                var        resultado       = new ResultadoValidacion();
                var        corralBl        = new CorralBL();
                CorralInfo corralResultado = corralBl.ObtenerCorralPorCodigo(corral.OrganizacionId, corral.Codigo);
                var        revisionActual  = new RevisionImplanteInfo();
                if (corralResultado == null)
                {
                    resultado.Resultado = false;
                    resultado.Mensaje   = ResourceServices.RevisionImplante_msgCorralNoExiste;
                    return(resultado);
                }

                revisionActual.Corral = corralResultado;
                var loteBl   = new LoteBL();
                var loteInfo = new LoteInfo
                {
                    OrganizacionID = corral.OrganizacionId,
                    CorralID       = corralResultado.CorralID
                };

                var loteResultado = loteBl.ObtenerPorCorralID(loteInfo);
                if (loteResultado == null)
                {
                    resultado.Resultado = false;
                    resultado.Mensaje   = ResourceServices.RevisionImplante_msgLoteInactivo;
                    return(resultado);
                }
                revisionActual.Lote = loteResultado;

                if (loteResultado.TipoCorralID != (int)TipoCorral.Produccion)
                {
                    resultado.Resultado = false;
                    resultado.Mensaje   = ResourceServices.RevisionImplante_msgCorralNoProductivo;
                    return(resultado);
                }

                var animalBl = new AnimalBL();
                List <AnimalInfo> animales = animalBl.ObtenerAnimalesPorLote(corral.OrganizacionId, loteResultado.LoteID);

                if (animales == null)
                {
                    resultado.Resultado = false;
                    resultado.Mensaje   = ResourceServices.RevisionImplante_msgCorralSinMovimientos;
                    return(resultado);
                }

                if (animales.Count == 0)
                {
                    resultado.Resultado = false;
                    resultado.Mensaje   = ResourceServices.RevisionImplante_msgCorralSinMovimientos;
                    return(resultado);
                }

                resultado.Resultado = true;
                resultado.Control   = revisionActual;
                return(resultado);
            }
            catch (ExcepcionGenerica)
            {
                throw;
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
            }
        }
Esempio n. 7
0
        /// <summary>
        /// Guardar entrada enfermeria
        /// </summary>
        internal EntradaGanadoEnfermeriaInfo GuardarEntradaEnfermeria(EntradaGanadoEnfermeriaInfo entradaGanadoEnfermeria)
        {
            entradaGanadoEnfermeria.Resultado = false;
            try
            {
                var resultadoCabezas  = new CabezasActualizadasInfo();
                var transactionOption = new TransactionOptions();
                transactionOption.IsolationLevel = System.Transactions.IsolationLevel.ReadCommitted;
                using (var transaction = new TransactionScope(TransactionScopeOption.Required, transactionOption))
                {
                    var animalDal          = new AnimalDAL();
                    var animalMovimientoBL = new AnimalMovimientoBL();
                    var corralBL           = new CorralBL();
                    var loteBL             = new LoteBL();

                    bool actualizaAreteDeteccion = entradaGanadoEnfermeria.Deteccion.ActualizarAreteDeteccion;
                    bool animalRecaido           = entradaGanadoEnfermeria.AnimalRecaido;

                    if (entradaGanadoEnfermeria.CambiarTipoGanado &&
                        entradaGanadoEnfermeria.Deteccion.Animal.AnimalID > 0 &&
                        entradaGanadoEnfermeria.Deteccion.Animal.TipoGanadoID != entradaGanadoEnfermeria.Animal.TipoGanadoID)
                    {
                        entradaGanadoEnfermeria.Animal.AnimalID = entradaGanadoEnfermeria.Deteccion.Animal.AnimalID;
                        entradaGanadoEnfermeria.Animal.UsuarioModificacionID = entradaGanadoEnfermeria.UsuarioId;
                    }
                    if (entradaGanadoEnfermeria.Animal.AnimalID == 0)
                    {
                        entradaGanadoEnfermeria.Animal.AnimalID       = entradaGanadoEnfermeria.Deteccion.Animal.AnimalID;
                        entradaGanadoEnfermeria.Animal.AplicaBitacora = entradaGanadoEnfermeria.Deteccion.Animal.AplicaBitacora;
                    }
                    AnimalInfo animalInfo = animalDal.GuardarAnimal(entradaGanadoEnfermeria.Animal);
                    if (actualizaAreteDeteccion)
                    {
                        //Si el flag esta activo se actualiza el arete en la deteccion de ganado cuando solo traen fotos
                        var deteccionBl = new DeteccionBL();
                        deteccionBl.ActualizarDeteccionConFoto(entradaGanadoEnfermeria.Deteccion);
                    }
                    /* Si esta activo el flag de recaido generar la deteccion */
                    if (animalRecaido)
                    {
                        entradaGanadoEnfermeria.Deteccion.DeteccionID = GenerarDeteccionAnimalGenerica(entradaGanadoEnfermeria);
                    }

                    if (animalInfo != null && animalInfo.AnimalID > 0)
                    {
                        entradaGanadoEnfermeria.Animal = animalInfo;
                        entradaGanadoEnfermeria.Movimiento.AnimalID = animalInfo.AnimalID;
                        if (entradaGanadoEnfermeria.LoteDestino.LoteID == 0)
                        {
                            entradaGanadoEnfermeria.LoteDestino.LoteID = loteBL.GuardaLote(entradaGanadoEnfermeria.LoteDestino);
                            entradaGanadoEnfermeria.Movimiento.LoteID  = entradaGanadoEnfermeria.LoteDestino.LoteID;
                        }
                        //Se almacena el movimiento
                        AnimalMovimientoInfo animalMovimientoInfo =
                            animalMovimientoBL.GuardarAnimalMovimiento(entradaGanadoEnfermeria.Movimiento);
                        if (animalMovimientoInfo != null && animalMovimientoInfo.AnimalMovimientoID > 0)
                        {
                            if (entradaGanadoEnfermeria.Tratamientos.Any(registro => registro.Seleccionado))
                            {
                                var almacenpl = new AlmacenBL();
                                entradaGanadoEnfermeria.AlmacenMovimiento.AnimalMovimientoID =
                                    animalMovimientoInfo.AnimalMovimientoID;
                                entradaGanadoEnfermeria.AlmacenMovimiento.AnimalID = animalInfo.AnimalID;
                                almacenpl.GuardarDescontarTratamientos(entradaGanadoEnfermeria.Tratamientos,
                                                                       entradaGanadoEnfermeria.AlmacenMovimiento);
                            }
                            entradaGanadoEnfermeria.Deteccion.AnimalMovimiento = animalMovimientoInfo;
                            GurdarDeteccion(entradaGanadoEnfermeria.Deteccion, entradaGanadoEnfermeria.ListaProblemas);

                            /* Se desactiva la deteccion */
                            var deteccion = new DeteccionInfo
                            {
                                DeteccionID       = entradaGanadoEnfermeria.Deteccion.DeteccionID,
                                UsuarioCreacionID = entradaGanadoEnfermeria.UsuarioId,
                                Arete             = entradaGanadoEnfermeria.Animal.Arete
                            };
                            EliminarDeteccion(deteccion);
                            #region LOTE
                            //Se decrementan las cabezas del lote
                            if (entradaGanadoEnfermeria.LoteDestino.LoteID != entradaGanadoEnfermeria.LoteOrigen.LoteID)
                            {
                                entradaGanadoEnfermeria.LoteDestino = loteBL.ObtenerPorID(entradaGanadoEnfermeria.LoteDestino.LoteID);
                                var animalBL = new AnimalBL();
                                List <AnimalInfo> animalesDestino =
                                    animalBL.ObtenerAnimalesPorLote(entradaGanadoEnfermeria.LoteOrigen.OrganizacionID,
                                                                    entradaGanadoEnfermeria.LoteDestino.LoteID);
                                if (animalesDestino != null && animalesDestino.Any())
                                {
                                    entradaGanadoEnfermeria.LoteDestino.Cabezas = animalesDestino.Count;
                                }
                                //Una vez insertado el lote y el animal se incrementan las cabezas de lote
                                entradaGanadoEnfermeria.LoteDestino.Cabezas =
                                    entradaGanadoEnfermeria.LoteDestino.Cabezas + 1;
                                if (entradaGanadoEnfermeria.LoteDestino.Cabezas > entradaGanadoEnfermeria.LoteDestino.CabezasInicio)
                                {
                                    entradaGanadoEnfermeria.LoteDestino.CabezasInicio =
                                        entradaGanadoEnfermeria.LoteDestino.CabezasInicio + 1;
                                }
                                entradaGanadoEnfermeria.LoteDestino.UsuarioModificacionID =
                                    entradaGanadoEnfermeria.Movimiento.UsuarioCreacionID;
                                // ------ //
                                entradaGanadoEnfermeria.LoteOrigen.Cabezas =
                                    entradaGanadoEnfermeria.LoteOrigen.Cabezas - 1;

                                List <AnimalInfo> animales =
                                    animalBL.ObtenerAnimalesPorLote(entradaGanadoEnfermeria.LoteOrigen.OrganizacionID,
                                                                    entradaGanadoEnfermeria.LoteOrigen.LoteID);
                                if (animales != null && animales.Any())
                                {
                                    entradaGanadoEnfermeria.LoteOrigen.Cabezas = animales.Count;
                                }
                                //Se actualizan las cabezas que tiene el lote
                                var filtro = new FiltroActualizarCabezasLote
                                {
                                    CabezasProcesadas     = 1,
                                    LoteIDDestino         = entradaGanadoEnfermeria.LoteDestino.LoteID,
                                    LoteIDOrigen          = entradaGanadoEnfermeria.LoteOrigen.LoteID,
                                    UsuarioModificacionID = entradaGanadoEnfermeria.Movimiento.UsuarioCreacionID
                                };

                                resultadoCabezas = loteBL.ActualizarCabezasProcesadas(filtro);
                            }
                            #endregion LOTE
                            //Si ya no tenemos cabezas en el lote se actualizanb los pesos llegada
                            if (resultadoCabezas.CabezasOrigen <= 0)
                            {
                                //Se obtiene el Corral para ver Si es de Recepcion
                                CorralInfo corralInfo = corralBL.ObtenerCorralPorCodigo(entradaGanadoEnfermeria.LoteOrigen.OrganizacionID,
                                                                                        entradaGanadoEnfermeria.LoteOrigen.Corral.Codigo);
                                if (corralInfo.GrupoCorral == (int)GrupoCorralEnum.Recepcion)
                                {
                                    /* Si el corral es de Recepcion */
                                    var corteGanadoPl = new CorteGanadoBL();
                                    corteGanadoPl.ObtenerPesosOrigenLlegada(entradaGanadoEnfermeria.LoteOrigen.OrganizacionID,
                                                                            entradaGanadoEnfermeria.LoteOrigen.CorralID,
                                                                            entradaGanadoEnfermeria.LoteOrigen.LoteID);
                                }
                            }
                            transaction.Complete();
                            entradaGanadoEnfermeria.Resultado = true;
                        }
                    }
                }
            }
            catch (ExcepcionGenerica ex)
            {
                Logger.Error(ex);
                entradaGanadoEnfermeria.Resultado = false;
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                entradaGanadoEnfermeria.Resultado = false;
                throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
            }
            return(entradaGanadoEnfermeria);
        }