Gestión de Inventario y Catálogo en Python: Implementación de Clase Almacén
Enviado por Chuletator online y clasificado en Informática y Telecomunicaciones
Escrito el en español con un tamaño de 6,7 KB
Implementación de un Sistema de Gestión de Almacén en Python
Este documento detalla la implementación de una clase Almacen
en Python, diseñada para gestionar el catálogo de productos y el stock de inventario. La clase encapsula la lógica necesaria para dar de alta productos, registrar entradas y salidas de stock, buscar elementos y listar el catálogo existente.
Dependencias y Módulos Importados
La implementación requiere la importación de clases específicas para los productos (StockProducto
, Lavadora
, Televisor
) y una función de utilidad (reduce
, aunque no utilizada en el código proporcionado).
from Modelo.StockProducto import StockProducto
from Modelo.Lavadora import Lavadora
from Modelo.Televisor import Televisor
from functools import reduce
Nota: La función reduce
de functools
se importa, pero no se utiliza en las operaciones de la clase Almacen
presentadas.
Clase Almacen
: Estructura y Funcionalidades
La clase Almacen
es el núcleo del sistema de gestión. Mantiene dos atributos privados principales:
__catalogo
: Un diccionario que almacena los productos disponibles, utilizando el nombre del producto como clave para un acceso rápido.__stock
: Una lista que contiene objetosStockProducto
, representando las unidades en existencia de cada producto.
Método Constructor: __init__
El constructor inicializa los atributos internos de la clase, preparando el almacén para su operación.
class Almacen:
def __init__(self):
self.__catalogo = {} # Almacena productos por su nombre para un acceso eficiente.
self.__stock = [] # Contiene objetos StockProducto con las unidades en almacén.
Gestión del Catálogo: alta_catalogo
Este método permite añadir nuevos productos al catálogo del almacén. Un producto solo se añade si no existe previamente, garantizando la unicidad en el catálogo.
def alta_catalogo(self, oElectro):
bInsertado = False
if oElectro.nombre not in self.__catalogo:
self.__catalogo[oElectro.nombre] = oElectro
bInsertado = True
return bInsertado
Retorna True
si el producto fue insertado exitosamente, False
en caso contrario (si ya existía).
Gestión de Inventario: entrada_stock
Permite registrar la entrada de unidades de un producto al stock. Si el producto no existe en el catálogo, la operación falla. Si existe, se actualiza el stock o se crea una nueva entrada de StockProducto
si es la primera vez que se recibe ese artículo.
def entrada_stock(self, nombre, unidades):
salida = "Entrada de stock OK"
# Comprobar si existe el producto en el catálogo.
if nombre not in self.__catalogo:
salida = "No existe el producto en el catálogo."
else:
oStock = self.buscar_stock(nombre)
# Si no se encontró una entrada de stock para este producto, se crea una nueva.
if oStock is None:
oStock = StockProducto(self.__catalogo[nombre], unidades) # Nuevo objeto StockProducto.
self.__stock.append(oStock) # Se agrega a la lista de stock.
else:
oStock.stock += unidades # Si ya existe, solo es necesario sumar las unidades.
return salida
Gestión de Inventario: salida_stock
Este método gestiona la retirada de unidades de un producto del stock. Realiza varias comprobaciones para asegurar la validez de la operación:
- Verifica la existencia del producto en el catálogo.
- Comprueba si hay stock disponible del producto.
- Asegura que las unidades a retirar no superen el stock existente.
def salida_stock(self, nombre, unidades):
salida = "Salida stock OK"
# Comprobar si existe el producto en el catálogo.
if nombre not in self.__catalogo:
salida = "No existe el producto en el catálogo."
else:
oStock = self.buscar_stock(nombre)
# Si no se encontró stock para este producto.
if oStock is None:
salida = "No hay stock de este producto."
else:
if oStock.stock > unidades:
oStock.stock -= unidades # Si existe, solo es necesario restar unidades.
elif oStock.stock == unidades:
self.__stock.remove(oStock)
salida = "Salida stock OK - 0 unidades en almacén."
else:
salida = "No hay suficiente stock de este producto en el almacén.\n"
salida += "Hay " + str(oStock.stock) + " unidades de " + oStock.producto.nombre
return salida
Búsqueda Interna: buscar_stock
Un método auxiliar utilizado internamente para localizar una entrada de StockProducto
por el nombre del producto. Emplea la función filter
con una expresión lambda
para realizar la búsqueda de manera eficiente.
def buscar_stock(self, nombre):
# Se filtra el stock buscando el producto por nombre.
filtrado = filter(lambda n: n.producto.nombre == nombre, self.__stock)
lista = list(filtrado)
if len(lista) == 0: # Si no se encontró ninguna coincidencia.
oStock = None
else:
oStock = lista[0] # Se toma la primera coincidencia (asumiendo unicidad por nombre).
return oStock
Visualización del Catálogo: listado_catalogo
Genera una cadena de texto con el listado completo de todos los productos registrados en el catálogo, utilizando el método __str__
de cada objeto producto.
def listado_catalogo(self):
listado = "LISTADO DEL CATÁLOGO DE PRODUCTOS\n"
for producto in self.__catalogo.values():
listado += producto.__str__() + "\n"
return listado
Conclusión
La clase Almacen
proporciona una base sólida para la gestión de inventario y catálogo de productos, demostrando principios de Programación Orientada a Objetos (POO) como la encapsulación y la modularidad. Este diseño permite un control eficiente de las operaciones de stock y una clara organización de los productos disponibles.