/// <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); } }
/// <summary> /// Se actualiza inventario y lote /// </summary> /// <param name="diferenciasDeInventariosInfo"></param> /// <param name="usuarioId"></param> internal void ActualizarInventarioYLote(DiferenciasDeInventariosInfo diferenciasDeInventariosInfo, int usuarioId) { var almacenInventarioBl = new AlmacenInventarioBL(); var almacenInventarioLoteBl = new AlmacenInventarioLoteBL(); //Actualiza inventario //Obtenemos el inventario de acuerdo al almacen y producto obtenido var inventarioInfo = almacenInventarioBl.ObtenerPorAlmacenIdProductoId(new AlmacenInventarioInfo() { AlmacenID = diferenciasDeInventariosInfo.Almacen.AlmacenID, ProductoID = diferenciasDeInventariosInfo.Producto.ProductoId }); if (inventarioInfo != null) { if (diferenciasDeInventariosInfo.AlmacenMovimiento.TipoMovimientoID == TipoMovimiento.SalidaPorAjuste.GetHashCode()) { inventarioInfo.Cantidad = inventarioInfo.Cantidad - diferenciasDeInventariosInfo.DiferenciaInventario; inventarioInfo.Importe = inventarioInfo.PrecioPromedio * inventarioInfo.Cantidad; } if (diferenciasDeInventariosInfo.AlmacenMovimiento.TipoMovimientoID == TipoMovimiento.EntradaPorAjuste.GetHashCode()) { inventarioInfo.Cantidad = inventarioInfo.Cantidad + diferenciasDeInventariosInfo.DiferenciaInventario; inventarioInfo.Importe = inventarioInfo.PrecioPromedio * inventarioInfo.Cantidad; } inventarioInfo.UsuarioModificacionID = usuarioId; //Actualiza inventario almacenInventarioBl.Actualizar(inventarioInfo); } //Actualiza inventario lote var almacenInventarioLoteInfo = almacenInventarioLoteBl.ObtenerAlmacenInventarioLotePorId( diferenciasDeInventariosInfo.AlmacenInventarioLote.AlmacenInventarioLoteId); if (almacenInventarioLoteInfo != null) { if (diferenciasDeInventariosInfo.AlmacenMovimiento.TipoMovimientoID == TipoMovimiento.SalidaPorAjuste.GetHashCode()) { almacenInventarioLoteInfo.Cantidad = almacenInventarioLoteInfo.Cantidad - diferenciasDeInventariosInfo.DiferenciaInventario; almacenInventarioLoteInfo.Importe = almacenInventarioLoteInfo.PrecioPromedio * almacenInventarioLoteInfo.Cantidad; } if (diferenciasDeInventariosInfo.AlmacenMovimiento.TipoMovimientoID == TipoMovimiento.EntradaPorAjuste.GetHashCode()) { almacenInventarioLoteInfo.Cantidad = almacenInventarioLoteInfo.Cantidad + diferenciasDeInventariosInfo.DiferenciaInventario; almacenInventarioLoteInfo.Importe = almacenInventarioLoteInfo.PrecioPromedio * almacenInventarioLoteInfo.Cantidad; } almacenInventarioLoteInfo.UsuarioModificacionId = usuarioId; //Actualiza inventario almacenInventarioLoteBl.Actualizar(almacenInventarioLoteInfo); //Kilogramos teoricos en 0 se desactiva el lote //if (diferenciasDeInventariosInfo.KilogramosFisicos == 0) //{ // //Desactivar lote // almacenInventarioLoteBl.DesactivarLote(almacenInventarioLoteInfo); //} } }