Skip to main content

Un gestor de inventario creado con GTK3 y SQLite.

Project description


📦 Gestor de Inventario

Un sistema de gestión de inventario de escritorio, limpio y eficiente, desarrollado en Python utilizando GTK3 para la interfaz gráfica y SQLite para el almacenamiento local de datos.

✨ Características

  • Gestión de Productos (CRUD): Añade, edita, elimina y visualiza productos fácilmente.
  • Gestión de Categorías: Organiza tu inventario creando categorías personalizadas.
  • Base de datos local: Almacenamiento seguro en SQLite aislado en la carpeta de usuario (~/.gestor_inventario/).
  • Interfaz moderna: Estilos personalizados mediante CSS (tematización completa de GtkTreeView, botones y formularios).
  • Validación de datos: Formularios a prueba de errores.

📚 Documentación

Puedes consultar la documentación detallada de la API, clases y métodos, generada con Sphinx, en el siguiente enlace:

👉 gestor-inventario-samuel.readthedocs.io

🛠️ Requisitos Previos

  • Python 3.8 o superior.
  • Librerías de GTK3 instaladas en tu sistema:
  • Linux: Instaladas por defecto en la mayoría de distribuciones (como Debian/Ubuntu).
  • Windows: Requiere un entorno como MSYS2 o WSL.

🚀 Instalación

La aplicación está publicada, por lo que puedes instalarla fácilmente a través de pip:

pip install .

Uso

Una vez instalado, puedes ejecutar la aplicación con el comando:

xestor-inventario

🧪 Tests

Para ejecutar las pruebas unitarias de validación y conexión a base de datos:

python -m unittest discover tests/

📊 Arquitectura del Sistema

1. Diagrama de Clases

Este diagrama muestra cómo se relacionan las piezas principales del código, incluyendo la lógica de la aplicación, la interfaz y la persistencia.

classDiagram
    class App {
        +VentanaPrincipal ventanaPrincipal
        +__init__()
        +cargarEstilos()
    }

    class VentanaPrincipal {
        +GtkTreeView vistaArbol
        +__init__()
        +cargarDatos()
        +alHacerClicAnadir(widget)
        +alHacerClicEditar(widget)
        +alHacerClicEliminar(widget)
        +alHacerClicCategorias(widget)
    }

    class DialogoFormulario {
        +int identificadorProducto
        +__init__(ventanaPadre, productoSeleccionado)
        +cargarCategorias()
        +obtenerDatos()
        +validarDatos()
    }

    class VentanaCategorias {
        +GtkTreeView vistaArbol
        +__init__(ventanaPadre)
        +cargarDatos()
        +alHacerClicAnadir(widget)
    }

    class ConexionBD {
        +String rutaBaseDatos
        +Connection conexionActiva
        +Cursor cursorActivo
        +__init__(rutaBaseDatos)
        +conectarBaseDatos()
        +crearCursor()
        +consultaSenParametros(sql)
        +engadeRexistro(sql, args)
        +actualizaRexistro(sql, args)
        +eliminarRegistro(sql, args)
        +cerrarBaseDatos()
    }

    %% Relaciones
    App "1" *-- "1" VentanaPrincipal : Inicializa
    VentanaPrincipal "1" ..> "*" DialogoFormulario : Abre
    VentanaPrincipal "1" ..> "1" VentanaCategorias : Abre
    VentanaPrincipal ..> ConexionBD : Usa
    DialogoFormulario ..> ConexionBD : Usa
    VentanaCategorias ..> ConexionBD : Usa

2. Diagrama de Secuencia

Proceso de añadir un nuevo producto al inventario:

sequenceDiagram
    actor Usuario
    participant VP as VentanaPrincipal
    participant DF as DialogoFormulario
    participant BD as ConexionBD
    participant SQLite as Base de Datos Local

    Usuario->>VP: Clic en botón "Añadir"
    VP->>DF: __init__(parent=VP, producto=None)
    activate DF
    DF->>BD: conectarBaseDatos()
    BD->>SQLite: SELECT * FROM categorias
    SQLite-->>BD: Retorna categorías
    BD-->>DF: Diccionario de categorías
    DF-->>VP: Muestra ventana modal (Formulario)
    
    Usuario->>DF: Rellena datos y clic en "Guardar"
    DF->>DF: validarDatos()
    alt Datos Inválidos
        DF-->>Usuario: Muestra MensajeDialog (Error)
    else Datos Válidos
        DF->>DF: obtenerDatos()
        DF->>BD: conectarBaseDatos()
        DF->>BD: engadeRexistro(INSERT INTO productos...)
        activate BD
        BD->>SQLite: Ejecuta Query
        SQLite-->>BD: OK
        BD-->>DF: Operación exitosa
        deactivate BD
        DF-->>VP: Retorna ResponseType.OK
        deactivate DF
        
        VP->>BD: conectarBaseDatos()
        VP->>BD: consultaSenParametros(SELECT * FROM productos...)
        BD->>SQLite: Ejecuta Query
        SQLite-->>BD: Retorna filas actualizadas
        BD-->>VP: Datos de productos
        VP->>VP: Actualiza GtkListStore (TreeView)
        VP-->>Usuario: Muestra tabla actualizada
    end

Desarrollado por: Samuel

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

gestor_inventario_samuel-3.0.tar.gz (17.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

gestor_inventario_samuel-3.0-py3-none-any.whl (14.5 kB view details)

Uploaded Python 3

File details

Details for the file gestor_inventario_samuel-3.0.tar.gz.

File metadata

  • Download URL: gestor_inventario_samuel-3.0.tar.gz
  • Upload date:
  • Size: 17.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.5

File hashes

Hashes for gestor_inventario_samuel-3.0.tar.gz
Algorithm Hash digest
SHA256 2c741d4a377a180511f3ff604f848a9be874f9ddf75786113aec8aa5601e3eaf
MD5 fb61da206b075ef1246c5ebf0f41eaf6
BLAKE2b-256 85d9772d24445f8adc24f251d077fa8f44d282fc9a6e9b48586447c197bad209

See more details on using hashes here.

File details

Details for the file gestor_inventario_samuel-3.0-py3-none-any.whl.

File metadata

File hashes

Hashes for gestor_inventario_samuel-3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 39c76f5cee580f7b4414e52d8da8fc2bde5c7ffea0cf60dd9832c755d2b8b93f
MD5 59c7ca3d217e533ba94eae8b7655a5d1
BLAKE2b-256 11d1dbd57363468ca6ccda27a3e64cf577ff201dbc49e4e735fa4d9bee4cd602

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page