public List <AnimalInfo> ObtenerAnimalesPorLote(int organizacionID, int loteID) { List <AnimalInfo> result; try { Logger.Info(); var animalBL = new AnimalBL(); result = animalBL.ObtenerAnimalesPorLote(organizacionID, loteID); } catch (ExcepcionGenerica) { throw; } catch (Exception ex) { Logger.Error(ex); throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex); } return(result); }
//Metodo que guarda el movimiento private void GuardarMovimientoTraspasoGanadoCorrales(List <AnimalInfo> aretesTotal, CorralInfo corralInfo, UsuarioInfo usuarioInfo) { //var animalInfo = new AnimalInfo(); int loteOrigenID = 0; int loteDestinoID = 0; var loteBl = new LoteBL(); var animalBL = new AnimalBL(); var animalMovimientoBL = new AnimalMovimientoBL(); var tipoProcesoBl = new TipoProcesoBL(); var fechaBL = new FechaBL(); var loteProyeccionBL = new LoteProyeccionBL(); List <AnimalMovimientoInfo> ultimosMovimientos = animalBL.ObtenerUltimoMovimientoAnimalXML(aretesTotal, usuarioInfo. Organizacion. OrganizacionID); if (ultimosMovimientos == null) { ultimosMovimientos = new List <AnimalMovimientoInfo>(); } var resultadoLoteBl = loteBl.ObtenerLotesActivos(usuarioInfo.Organizacion.OrganizacionID, Convert.ToInt32(corralInfo.CorralID)); var tipoProcesoResult = tipoProcesoBl.ObtenerPorOrganizacion(usuarioInfo.Organizacion.OrganizacionID); var fechaServidor = fechaBL.ObtenerFechaActual(); IList <LoteInfo> lotesCorrales = loteBl.ObtenerPorOrganizacionEstatus( usuarioInfo.Organizacion.OrganizacionID, EstatusEnum.Activo); if (lotesCorrales == null) { lotesCorrales = new List <LoteInfo>(); } IList <LoteProyeccionInfo> lotesProyeccion = loteProyeccionBL.ObtenerPorLoteXML(usuarioInfo.Organizacion.OrganizacionID, lotesCorrales); var resultadoLote = -1; using (var transaction = new TransactionScope()) { if (resultadoLoteBl == null) { var loteCrear = new LoteBL(); var loteInfoLote = new LoteInfo { Activo = EstatusEnum.Activo, Cabezas = Convert.ToInt32(0), CabezasInicio = Convert.ToInt32(0), CorralID = corralInfo.CorralID, DisponibilidadManual = false, OrganizacionID = usuarioInfo.Organizacion.OrganizacionID, TipoCorralID = corralInfo.TipoCorral.TipoCorralID, TipoProcesoID = tipoProcesoResult, UsuarioCreacionID = usuarioInfo.UsuarioID }; resultadoLote = loteCrear.GuardaLote(loteInfoLote); if ((corralInfo.TipoCorral != null && corralInfo.TipoCorral.TipoCorralID != TipoCorral.Enfermeria.GetHashCode()) || (corralInfo.TipoCorralId > 0 && corralInfo.TipoCorralId != TipoCorral.Enfermeria.GetHashCode())) { loteBl.ActualizaFechaCierre(resultadoLote, usuarioInfo.UsuarioID); } } foreach (var animalInfo in aretesTotal) { var animalMovimientoInfo = new AnimalMovimientoInfo(); animalInfo.OrganizacionIDEntrada = usuarioInfo.Organizacion.OrganizacionID; //Obtener ultimo movimiento del animal var ultimoMovimientoInfo = ultimosMovimientos.FirstOrDefault(ani => ani.AnimalID == animalInfo.AnimalID); if (ultimoMovimientoInfo != null) { animalMovimientoInfo.OrganizacionID = usuarioInfo.Organizacion.OrganizacionID; animalMovimientoInfo.AnimalID = animalInfo.AnimalID; animalMovimientoInfo.CorralID = corralInfo.CorralID; animalMovimientoInfo.LoteID = resultadoLoteBl != null ? resultadoLoteBl.LoteID : resultadoLote; DateTime diaHoy = fechaServidor.FechaActual.Date; animalMovimientoInfo.FechaMovimiento = diaHoy.Date; animalMovimientoInfo.Peso = ultimoMovimientoInfo.Peso; animalMovimientoInfo.Temperatura = ultimoMovimientoInfo.Temperatura; animalMovimientoInfo.TipoMovimientoID = (int)TipoMovimiento.TraspasoDeGanado; animalMovimientoInfo.TrampaID = ultimoMovimientoInfo.TrampaID; animalMovimientoInfo.OperadorID = ultimoMovimientoInfo.OperadorID; animalMovimientoInfo.Observaciones = String.Empty; animalMovimientoInfo.Activo = EstatusEnum.Activo; animalMovimientoInfo.UsuarioCreacionID = usuarioInfo.UsuarioID; //Se manda a guardar el registro en base de datos animalMovimientoInfo = animalMovimientoBL.GuardarAnimalMovimiento(animalMovimientoInfo); if (animalMovimientoInfo == null || animalMovimientoInfo.AnimalMovimientoID <= 0) { return; } var resultadoLoteOrigen = loteBl.ObtenerPorID(ultimoMovimientoInfo.LoteID); var resultadoLoteDestino = loteBl.ObtenerPorID(animalMovimientoInfo.LoteID); if (resultadoLoteDestino != null) { resultadoLoteDestino.UsuarioModificacionID = usuarioInfo.UsuarioID; } //Incrementar y Decrementar cabezas if (resultadoLoteOrigen != null && resultadoLoteDestino != null) { loteOrigenID = resultadoLoteOrigen.LoteID; loteDestinoID = resultadoLoteDestino.LoteID; resultadoLoteDestino.Cabezas = resultadoLoteDestino.Cabezas + 1; resultadoLoteDestino.CabezasInicio = resultadoLoteDestino.CabezasInicio + 1; resultadoLoteOrigen.Cabezas = resultadoLoteOrigen.Cabezas - 1; //Verificar si el Lote tiene cabezas en 0 para inactivarlo resultadoLoteOrigen = loteBl.ObtenerPorID(ultimoMovimientoInfo.LoteID); if (resultadoLoteOrigen.Cabezas != 0) { continue; } } } } var loteOrigenInfo = loteBl.ObtenerPorID(loteOrigenID); var loteDestinoInfo = loteBl.ObtenerPorID(loteDestinoID); if (lotesProyeccion != null && lotesProyeccion.Any()) { LoteProyeccionInfo proyeccionOrigen = lotesProyeccion.FirstOrDefault(lote => lote.LoteID == loteOrigenInfo.LoteID); LoteProyeccionInfo proyeccionDestino = lotesProyeccion.FirstOrDefault(lote => lote.LoteID == loteDestinoInfo.LoteID); if (proyeccionOrigen != null && proyeccionDestino == null) { proyeccionOrigen.LoteProyeccionID = 0; int diasEngordaOrigen = proyeccionOrigen.DiasEngorda; DateTime fechaInicioLote = loteOrigenInfo.FechaInicio; int diasEngordaReales = new TimeSpan(DateTime.Now.Ticks - fechaInicioLote.Ticks).Days; if ((diasEngordaOrigen - diasEngordaReales) <= 0) { proyeccionOrigen.DiasEngorda = 0; } else { proyeccionOrigen.DiasEngorda = diasEngordaOrigen - diasEngordaReales; } proyeccionOrigen.LoteID = loteDestinoInfo.LoteID; proyeccionOrigen.UsuarioCreacionID = usuarioInfo.UsuarioID; loteProyeccionBL.Guardar(proyeccionOrigen); var loteDAL = new LoteDAL(); var filtroDisponibilidad = new FiltroDisponilidadInfo { UsuarioId = usuarioInfo.UsuarioID, ListaLoteDisponibilidad = new List <DisponibilidadLoteInfo> { new DisponibilidadLoteInfo { LoteId = loteDestinoInfo.LoteID, FechaDisponibilidad = loteOrigenInfo.FechaDisponibilidad, DisponibilidadManual = loteOrigenInfo.DisponibilidadManual } } }; loteDAL.ActualizarLoteDisponibilidad(filtroDisponibilidad); } } List <AnimalInfo> animalesOrigen = animalBL.ObtenerAnimalesPorLote(usuarioInfo.Organizacion.OrganizacionID, loteOrigenID); if (animalesOrigen != null && animalesOrigen.Any()) { loteOrigenInfo.Cabezas = animalesOrigen.Count; } List <AnimalInfo> animalesDestino = animalBL.ObtenerAnimalesPorLote(usuarioInfo.Organizacion.OrganizacionID, loteDestinoID); if (animalesDestino != null && animalesDestino.Any()) { loteDestinoInfo.Cabezas = animalesDestino.Count; } //Se actualizan las cabezas que tiene el lote var filtro = new FiltroActualizarCabezasLote { CabezasProcesadas = aretesTotal.Count, LoteIDDestino = loteDestinoInfo.LoteID, LoteIDOrigen = loteOrigenInfo.LoteID, UsuarioModificacionID = usuarioInfo.UsuarioID }; loteBl.ActualizarCabezasProcesadas(filtro); transaction.Complete(); } }
/// <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); }
/// <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); } }
/// <summary> /// Obteneri dias de engorda 70 /// </summary> /// <param name="lote"></param> /// <returns></returns> internal int ObtnerDiasEngorda70(LoteInfo lote) { try { Logger.Info(); var loteBL = new LoteBL(); LoteInfo loteAnterior = loteBL.ObtenerLoteAnteriorAnimal(lote.LoteID); var animalBL = new AnimalBL(); var animalesLote = animalBL.ObtenerAnimalesPorLote(lote.OrganizacionID, lote.LoteID); if (animalesLote == null) { return(0); } var count = animalesLote.Count; double temp = 0D; for (int i = 0; i < count; i++) { temp += animalesLote[i].FechaEntrada.Ticks / (double)count; } var average = new DateTime((long)temp); var diferenciaFechas = DateTime.Now - average; int diasEngordaLote = Convert.ToInt32(diferenciaFechas.TotalDays); //Si los dias de engorda son mayor de 115, automaticamente se dejan 101 dias de Engorda en Grano if (diasEngordaLote > 115) { return(101); } var loteFiltro = new LoteInfo { LoteID = 0, OrganizacionID = lote.OrganizacionID }; List <DiasEngordaGranoModel> diasEngorda = loteBL.ObtenerDiasEngordaGrano(loteFiltro); //Obtiene todos los Lotes //var repartoDal = new RepartoDAL(); //var repartoDetalle = repartoDal.ObtenerDetalleRepartoPorLote(lote); int diasEngorda70 = 0; if (loteAnterior != null && loteAnterior.LoteID > 0) { DiasEngordaGranoModel diasEngordaLoteAnterior = diasEngorda.FirstOrDefault(dias => dias.LoteID == loteAnterior.LoteID); if (diasEngordaLoteAnterior != null) { diasEngorda70 += diasEngordaLoteAnterior.DiasGrano; } } DiasEngordaGranoModel diasEngordaLoteActual = diasEngorda.FirstOrDefault(dias => dias.LoteID == lote.LoteID); if (diasEngordaLoteActual != null) { diasEngorda70 += diasEngordaLoteActual.DiasGrano; } //if (repartoDetalle != null) //{ // var fechaActual = DateTime.Now; // var listaVespertino = repartoDetalle.Where(repartoDetalleInfo => repartoDetalleInfo.TipoServicioID == (int)TipoServicioEnum.Vespertino).ToList(); // var listaMatutino = repartoDetalle.Where(repartoDetalleInfo => repartoDetalleInfo.TipoServicioID == (int) TipoServicioEnum.Matutino).ToList(); // var diasFormula = listaMatutino.Sum(detalleMatutino => listaVespertino.Count(detalleVespertino => detalleMatutino.RepartoID == detalleVespertino.RepartoID && detalleMatutino.FormulaIDServida == detalleVespertino.FormulaIDServida)); // var diferenciaFechasDiasEngorda = fechaActual - lote.FechaInicio; // var diasEngorda = diferenciaFechasDiasEngorda.Days; // if (diasEngorda > 0 && diasFormula > 0) // { // diasEngorda70 = (int) (((float)diasFormula / (float)diasEngorda) * 100); // } //} return(diasEngorda70); } catch (ExcepcionGenerica ex) { Logger.Error(ex); throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex); } catch (Exception ex) { Logger.Error(ex); throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex); } }