//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> /// Genera la carga inicial de los inventarios /// </summary> /// <param name="cargaInventarios"></param> /// <returns></returns> public void GenerarCargaInicial(List <CargaMPPAModel> cargaInventarios) { try { var almacenInventarioBL = new AlmacenInventarioBL(); var almacenInventarioLoteBL = new AlmacenInventarioLoteBL(); var fechaBL = new FechaBL(); FechaInfo fechaActual = fechaBL.ObtenerFechaActual(); using (var transaction = new TransactionScope()) { foreach (var cargaInventario in cargaInventarios) { if (cargaInventario.AlmacenInventario == null) { cargaInventario.AlmacenInventario = new AlmacenInventarioInfo(); } var almacenInventarioFiltro = new AlmacenInventarioInfo { AlmacenID = cargaInventario.AlmacenID, ProductoID = cargaInventario.ProductoID }; var almacenInventario = almacenInventarioBL.ObtenerPorAlmacenIdProductoId(almacenInventarioFiltro); if (almacenInventario == null) { almacenInventario = new AlmacenInventarioInfo(); } var almacenInventarioLote = new AlmacenInventarioLoteInfo(); almacenInventario.Importe = almacenInventario.Importe + cargaInventario.ImporteActual; almacenInventario.Cantidad = almacenInventario.Cantidad + cargaInventario.CantidadActual; almacenInventario.PrecioPromedio = almacenInventario.Importe / almacenInventario.Cantidad; almacenInventario.AlmacenID = cargaInventario.Almacen.AlmacenID; almacenInventario.ProductoID = cargaInventario.Producto.ProductoId; almacenInventario.UsuarioCreacionID = 1; almacenInventario.UsuarioModificacionID = 1; if (almacenInventario.AlmacenInventarioID == 0) { int almacenInventarioID = almacenInventarioBL.Crear(almacenInventario); almacenInventario.AlmacenInventarioID = almacenInventarioID; } else { almacenInventarioBL.Actualizar(almacenInventario); } if (cargaInventario.Producto.ManejaLote) { almacenInventarioLote = new AlmacenInventarioLoteInfo { AlmacenInventario = almacenInventario, Cantidad = cargaInventario.CantidadActual, Importe = cargaInventario.ImporteActual, PrecioPromedio = cargaInventario.ImporteActual / cargaInventario.CantidadActual, Lote = cargaInventario.Lote, Piezas = cargaInventario.Piezas, FechaInicio = cargaInventario.FechaInicioLote == DateTime.MinValue ? fechaActual.FechaActual : cargaInventario.FechaInicioLote, UsuarioCreacionId = 1, Activo = EstatusEnum.Activo }; int almacenInventaroLoteID = almacenInventarioLoteBL.CrearConTodosParametros(almacenInventarioLote); almacenInventarioLote.AlmacenInventarioLoteId = almacenInventaroLoteID; } GenerarMovimientosAlmacen(cargaInventario, almacenInventarioLote); } transaction.Complete(); } } catch (ExcepcionGenerica) { throw; } catch (Exception ex) { Logger.Error(ex); throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex); } }