/// <summary> /// Metodo para guardar la configuracion de reimplantes /// </summary> /// <param name="configuracionReimplante">Representa el Contexto de lo que se va a guardar</param> public int GuardarConfiguracionReimplante(ConfiguracionReimplanteModel configuracionReimplante) { try { Logger.Info(); var loteReimplanteBL = new LoteReimplanteBL(); var loteProyeccionDAL = new LoteProyeccionDAL(); var loteDAL = new LoteDAL(); int result = configuracionReimplante.LoteProyeccion.LoteProyeccionID; var opciones = new TransactionOptions(); var filtroDisponilidadInfo = new FiltroDisponilidadInfo { UsuarioId = configuracionReimplante.LoteProyeccion.UsuarioCreacionID, ListaLoteDisponibilidad = new List <DisponibilidadLoteInfo> { new DisponibilidadLoteInfo { LoteId = configuracionReimplante.Lote.LoteID, FechaDisponibilidad = configuracionReimplante.FechaDisponible, DisponibilidadManual = false } } }; opciones.IsolationLevel = IsolationLevel.ReadUncommitted; opciones.Timeout = new TimeSpan(2, 0, 0); using (var scope = new TransactionScope(TransactionScopeOption.Required, opciones)) { if (configuracionReimplante.LoteProyeccion.LoteProyeccionID == 0) { configuracionReimplante.LoteProyeccion.OrganizacionID = configuracionReimplante.Corral.Organizacion.OrganizacionID; configuracionReimplante.LoteProyeccion.LoteID = configuracionReimplante.Lote.LoteID; result = loteProyeccionDAL.Crear(configuracionReimplante.LoteProyeccion); configuracionReimplante.LoteProyeccion.LoteProyeccionID = result; loteProyeccionDAL.CrearBitacora(configuracionReimplante.LoteProyeccion); } else { if (configuracionReimplante.LoteProyeccion.AplicaBitacora) { loteProyeccionDAL.Actualizar(configuracionReimplante.LoteProyeccion); loteProyeccionDAL.CrearBitacora(configuracionReimplante.LoteProyeccion); } } if (configuracionReimplante.LoteProyeccion.ListaReimplantes != null && configuracionReimplante.LoteProyeccion.ListaReimplantes.Any()) { configuracionReimplante.LoteProyeccion.ListaReimplantes.ToList().ForEach( reimp => reimp.LoteProyeccionID = result); loteReimplanteBL.GuardarListaReimplantes( configuracionReimplante.LoteProyeccion.ListaReimplantes.ToList()); } loteDAL.ActualizarLoteDisponibilidad(filtroDisponilidadInfo); if (configuracionReimplante.Lote.AplicaCierreLote) { loteDAL.ActualizaFechaCierre(configuracionReimplante.Lote.LoteID, configuracionReimplante.UsuarioCreacionID); } scope.Complete(); } return(result); } catch (ExcepcionGenerica) { throw; } catch (Exception ex) { Logger.Error(ex); throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex); } }
/// <summary> /// guardar corte por transferencia /// </summary> /// <param name="guardarAnimalCorte"></param> /// <param name="listaTratamientos"></param> /// <returns></returns> internal CorteTransferenciaGanadoGuardarInfo GuardarCorteTransferencia(CorteTransferenciaGanadoGuardarInfo guardarAnimalCorte, IList <TratamientoInfo> listaTratamientos) { try { using (var transaction = new TransactionScope()) { Logger.Info(); //var corteTransferenciaGanado = new CorteTransferenciaGanadoDAL(); var animalBl = new AnimalBL(); var animalMovimientoBL = new AnimalMovimientoBL(); var corralBl = new CorralBL(); var interfaceSalidaAnimalBl = new InterfaceSalidaAnimalBL(); var interfaceSalidoAnimalInfo = interfaceSalidaAnimalBl.ObtenerNumeroAreteIndividual( guardarAnimalCorte.AnimalCorteTransferenciaInfo.Arete, guardarAnimalCorte.OrganizacionId); if (guardarAnimalCorte.AnimalActualInfo != null) { guardarAnimalCorte.AnimalCorteTransferenciaInfo.FechaCompra = guardarAnimalCorte.AnimalActualInfo.FechaCompra; } else { if (interfaceSalidoAnimalInfo != null) { guardarAnimalCorte.AnimalCorteTransferenciaInfo.FechaCompra = interfaceSalidoAnimalInfo.FechaCompra; } } var resultoAnimalInfo = animalBl.GuardarAnimal(guardarAnimalCorte.AnimalCorteTransferenciaInfo); guardarAnimalCorte.AnimalCorteTransferenciaInfo = resultoAnimalInfo; guardarAnimalCorte.AnimalMovimientoCorteTransferenciaInfo.AnimalID = guardarAnimalCorte.AnimalCorteTransferenciaInfo.AnimalID; var loteBl = new LoteBL(); var resultadoLote = -1; var resultadoLoteOrigen = loteBl.ObtenerPorID(guardarAnimalCorte.AnimalMovimientoOrigenInfo.LoteID); var resultadoLoteBL = loteBl.ObtenerLotesActivos( guardarAnimalCorte.AnimalMovimientoCorteTransferenciaInfo.OrganizacionID, Convert.ToInt32(guardarAnimalCorte.CorralInfoGen.CorralID)); if (resultadoLoteBL == null) { //var corralInfo = new CorralInfo //{ // Codigo = guardarAnimalCorte.TxtCorralDestino, // TipoCorral = new TipoCorralInfo { TipoCorralID = (int)TipoCorral.Improductivos }, // Organizacion = new OrganizacionInfo { OrganizacionID = guardarAnimalCorte.OrganizacionId } //}; CorralInfo resultadoCorralPl = corralBl.ObtenerPorId(guardarAnimalCorte.CorralDestinoID); if (resultadoCorralPl != null) { var loteCrear = new LoteBL(); var tipoProcesoBl = new TipoProcesoBL(); var tipoProcesoResult = tipoProcesoBl.ObtenerPorOrganizacion(guardarAnimalCorte.OrganizacionId); var loteInfoLote = new LoteInfo { Activo = EstatusEnum.Activo, Cabezas = Convert.ToInt32(0), CabezasInicio = Convert.ToInt32(0), CorralID = resultadoCorralPl.CorralID, DisponibilidadManual = false, OrganizacionID = guardarAnimalCorte.AnimalMovimientoOrigenInfo.OrganizacionID, TipoCorralID = resultadoCorralPl.TipoCorral.TipoCorralID, TipoProcesoID = tipoProcesoResult, UsuarioCreacionID = resultadoCorralPl.UsuarioCreacionID, }; resultadoLote = loteCrear.GuardaLote(loteInfoLote); guardarAnimalCorte.LoteDestinoInfo = loteCrear.ObtenerPorID(resultadoLote); } } else { guardarAnimalCorte.LoteDestinoInfo = resultadoLoteBL; } //Se manda a guardar movimiento de salida de enfermeria //var animalSalidaInfo = new AnimalSalidaInfo(); //animalSalidaInfo = animalBl.ObtenerAnimalSalidaAnimalID(guardarAnimalCorte.AnimalCorteTransferenciaInfo.AnimalID); //guardarAnimalCorte.AnimalMovimientoCorteTransferenciaInfo.CorralID = animalSalidaInfo.CorralId; //guardarAnimalCorte.AnimalMovimientoCorteTransferenciaInfo.LoteID = animalSalidaInfo.LoteId; //guardarAnimalCorte.AnimalMovimientoCorteTransferenciaInfo.TipoMovimientoID = (int)TipoMovimiento.SalidaEnfermeria; //guardarAnimalCorte.AnimalMovimientoCorteTransferenciaInfo = animalMovimientoBL.GuardarAnimalMovimiento(guardarAnimalCorte.AnimalMovimientoCorteTransferenciaInfo); //Se manda a guardar movimiento de corte por transferencia guardarAnimalCorte.AnimalMovimientoCorteTransferenciaInfo.CorralID = guardarAnimalCorte.CorralInfoGen.CorralID; guardarAnimalCorte.AnimalMovimientoCorteTransferenciaInfo.LoteID = resultadoLoteBL != null ? resultadoLoteBL.LoteID : resultadoLote; guardarAnimalCorte.AnimalMovimientoCorteTransferenciaInfo.TipoMovimientoID = (int)TipoMovimiento.CortePorTransferencia; guardarAnimalCorte.AnimalMovimientoCorteTransferenciaInfo = animalMovimientoBL.GuardarAnimalMovimiento( guardarAnimalCorte.AnimalMovimientoCorteTransferenciaInfo); if (guardarAnimalCorte.AnimalMovimientoCorteTransferenciaInfo != null && guardarAnimalCorte.AnimalMovimientoCorteTransferenciaInfo.AnimalMovimientoID > 0) { if (resultadoLoteOrigen != null && guardarAnimalCorte.LoteDestinoInfo != null) { guardarAnimalCorte.CorralGlobal = guardarAnimalCorte.AnimalMovimientoOrigenInfo.CorralID; guardarAnimalCorte.LoteDestinoInfo.Cabezas = guardarAnimalCorte.LoteDestinoInfo.Cabezas + 1; guardarAnimalCorte.LoteDestinoInfo.CabezasInicio = guardarAnimalCorte.LoteDestinoInfo.CabezasInicio + 1; resultadoLoteOrigen.Cabezas = resultadoLoteOrigen.Cabezas - 1; var filtroActualizaCabezas = new FiltroActualizarCabezasLote { LoteIDOrigen = resultadoLoteOrigen.LoteID, LoteIDDestino = guardarAnimalCorte.LoteDestinoInfo.LoteID, CabezasProcesadas = 1, UsuarioModificacionID = guardarAnimalCorte.UsuarioCreacionID }; var cabezas = loteBl.ActualizarCabezasProcesadas(filtroActualizaCabezas); //TODO nuevo metodo //loteBl.ActualizaNoCabezasEnLote(guardarAnimalCorte.LoteDestinoInfo, resultadoLoteOrigen); loteBl.ActualizarSalidaEnfermeria(guardarAnimalCorte.AnimalMovimientoOrigenInfo); loteBl.ActualizarFechaSalidaEnLote(resultadoLoteOrigen); //if (resultadoLoteOrigen.Cabezas == 0) //{ // resultadoLoteOrigen.Activo = (int)EstatusEnum.Inactivo; // loteBl.ActualizaActivoEnLote(resultadoLoteOrigen); //} // ObtenerTotalCabezas(loteCorralOrigen); } if (ObtenerTotalCabezas(guardarAnimalCorte.AnimalMovimientoOrigenInfo)) { corralBl.TraspasarAnimalSalidaEnfermeria( guardarAnimalCorte.AnimalSalidaGuardarInfo.CorraletaId, guardarAnimalCorte.AnimalMovimientoOrigenInfo.LoteID); //loteDAL.EliminarSalidaEnfermeria(guardarAnimalCorte.AnimalMovimientoOrigenInfo); } } if (guardarAnimalCorte.AnimalMovimientoCorteTransferenciaInfo != null) { var almacenMovimientoInfo = new AlmacenMovimientoInfo { AlmacenID = guardarAnimalCorte.AlmacenID, AnimalMovimientoID = guardarAnimalCorte.AnimalMovimientoCorteTransferenciaInfo .AnimalMovimientoID, TipoMovimientoID = (int)TipoMovimiento.SalidaPorConsumo, Status = (int)EstatusInventario.Aplicado, Observaciones = "", UsuarioCreacionID = guardarAnimalCorte.UsuarioCreacionID, AnimalID = guardarAnimalCorte.AnimalMovimientoCorteTransferenciaInfo .AnimalID, //Verificar CostoID = (int)Costo.MedicamentoDeImplante, }; var almacenBL = new AlmacenBL(); almacenBL.GuardarDescontarTratamientos( listaTratamientos.Where(item => item.Seleccionado && item.Habilitado).ToList(), almacenMovimientoInfo); } var loteProyeccionBL = new LoteProyeccionBL(); LoteProyeccionInfo proyeccionDestino = loteProyeccionBL.ObtenerPorLote(guardarAnimalCorte.LoteDestinoInfo); //guardarAnimalCorte.LoteDestinoInfo.LoteID if (proyeccionDestino == null) { LoteProyeccionInfo proyeccionOrigen = loteProyeccionBL.ObtenerPorLote(resultadoLoteOrigen); if (proyeccionOrigen != null && resultadoLoteOrigen != null && guardarAnimalCorte.LoteDestinoInfo != null) { proyeccionOrigen.LoteProyeccionID = 0; int diasEngordaOrigen = proyeccionOrigen.DiasEngorda; DateTime fechaInicioLote = resultadoLoteOrigen.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 = guardarAnimalCorte.LoteDestinoInfo.LoteID; proyeccionOrigen.UsuarioCreacionID = guardarAnimalCorte.UsuarioCreacionID; loteProyeccionBL.Guardar(proyeccionOrigen); var loteDAL = new LoteDAL(); var filtroDisponibilidad = new FiltroDisponilidadInfo { UsuarioId = guardarAnimalCorte.UsuarioCreacionID, ListaLoteDisponibilidad = new List <DisponibilidadLoteInfo> { new DisponibilidadLoteInfo { LoteId = guardarAnimalCorte.LoteDestinoInfo.LoteID, FechaDisponibilidad = resultadoLoteOrigen.FechaDisponibilidad, DisponibilidadManual = resultadoLoteOrigen.DisponibilidadManual } } }; loteDAL.ActualizarLoteDisponibilidad(filtroDisponibilidad); } } transaction.Complete(); return(guardarAnimalCorte); } } catch (ExcepcionGenerica) { return(null); } catch (Exception ex) { Logger.Error(ex); throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex); } }
//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(); } }