/// <summary> /// Actualiza el Numero de Cabezas de los Lotes /// </summary> /// <param name="filtroActualizarCabezasLote"></param> /// <returns></returns> public CabezasActualizadasInfo ActualizarCabezasProcesadas( FiltroActualizarCabezasLote filtroActualizarCabezasLote) { CabezasActualizadasInfo result = null; try { Logger.Info(); var loteBL = new LoteBL(); result = loteBL.ActualizarCabezasProcesadas(filtroActualizarCabezasLote); } catch (ExcepcionGenerica) { throw; } catch (Exception ex) { Logger.Error(ex); throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex); } return(result); }
/// <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); }
/// <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); }