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 objetos StockProducto, 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.

Entradas relacionadas: