La empresa GestiónTareas S.A. es una agencia de proyectos que maneja múltiples tareas y proyectos para sus clientes. Actualmente, enfrentan dificultades para gestionar todas las tareas de manera eficiente. Los empleados tienen problemas para mantener un registro adecuado de las tareas asignadas, su estado actual y la prioridad de cada una. El seguimiento de las fechas de vencimiento se ha vuelto complicado, lo que ha llevado a retrasos en la entrega de proyectos y a una baja satisfacción del cliente. desarrollar una aplicación de gestión de tareas que ayude a la empresa a resolver su problemática. La aplicación debe permitir a los empleados gestionar diferentes tipos de tareas, como desarrollo de software, diseño gráfico, marketing, investigación, entre otros. Cada tarea debe tener un nombre, descripción, estado (pendiente, en progreso, completada), prioridad (alta, media, baja) y fecha de vencimiento. La aplicación debe proporcionar una interfaz de usuario
**Desarrollo de la aplicación de gestión de tareas** Para resolver la problemática de la empresa GestiónTareas S.A., desarrollaremos una aplicación de gestión de tareas utilizando Python y la biblioteca Tkinter para la interfaz de usuario. **Requisitos** * Python 3.x * Tkinter (incluido en la mayoría de las distribuciones de Python) * SQLite (para almacenar los datos de las tareas) **Estructura del proyecto** * `app.py`: archivo principal de la aplicación * `tarea.py`: módulo que define la clase `Tarea` * `database.py`: módulo que define la clase `Database` para interactuar con la base de datos * `interfaz.py`: módulo que define la clase `Interfaz` para la interfaz de usuario **Implementación** ### tarea.py ```python class Tarea: def __init__(self, nombre, descripcion, estado, prioridad, fecha_vencimiento): self.nombre = nombre self.descripcion = descripcion self.estado = estado self.prioridad = prioridad self.fecha_vencimiento = fecha_vencimiento def __str__(self): return f"Nombre: {self.nombre}\nDescripción: {self.descripcion}\nEstado: {self.estado}\nPrioridad: {self.prioridad}\nFecha de vencimiento: {self.fecha_vencimiento}" ``` ### database.py ```python import sqlite3 class Database: def __init__(self, nombre_base_datos): self.nombre_base_datos = nombre_base_datos self.conexion = sqlite3.connect(nombre_base_datos) self.cursor = self.conexion.cursor() def crear_tabla(self): self.cursor.execute(""" CREATE TABLE IF NOT EXISTS tareas ( id INTEGER PRIMARY KEY, nombre TEXT NOT NULL, descripcion TEXT NOT NULL, estado TEXT NOT NULL, prioridad TEXT NOT NULL, fecha_vencimiento DATE NOT NULL ) """) self.conexion.commit() def insertar_tarea(self, tarea): self.cursor.execute(""" INSERT INTO tareas (nombre, descripcion, estado, prioridad, fecha_vencimiento) VALUES (?, ?, ?, ?, ?) """, (tarea.nombre, tarea.descripcion, tarea.estado, tarea.prioridad, tarea.fecha_vencimiento)) self.conexion.commit() def obtener_tareas(self): self.cursor.execute("SELECT * FROM tareas") return self.cursor.fetchall() def cerrar_conexion(self): self.conexion.close() ``` ### interfaz.py ```python import tkinter as tk from tarea import Tarea from database import Database class Interfaz: def __init__(self, raiz): self.raiz = raiz self.database = Database("tareas.db") self.database.crear_tabla() self.crear_widgets() def crear_widgets(self): self.nombre_label = tk.Label(self.raiz, text="Nombre:") self.nombre_label.grid(row=0, column=0) self.nombre_entry = tk.Entry(self.raiz) self.nombre_entry.grid(row=0, column=1) self.descripcion_label = tk.Label(self.raiz, text="Descripción:") self.descripcion_label.grid(row=1, column=0) self.descripcion_entry = tk.Entry(self.raiz) self.descripcion_entry.grid(row=1, column=1) self.estado_label = tk.Label(self.raiz, text="Estado:") self.estado_label.grid(row=2, column=0) self.estado_var = tk.StringVar() self.estado_var.set("pendiente") self.estado_option = tk.OptionMenu(self.raiz, self.estado_var, "pendiente", "en progreso", "completada") self.estado_option.grid(row=2, column=1) self.prioridad_label = tk.Label(self.raiz, text="Prioridad:") self.prioridad_label.grid(row=3, column=0) self.prioridad_var = tk.StringVar() self.prioridad_var.set("alta") self.prioridad_option = tk.OptionMenu(self.raiz, self.prioridad_var, "alta", "media", "baja") self.prioridad_option.grid(row=3, column=1) self.fecha_vencimiento_label = tk.Label(self.raiz, text="Fecha de vencimiento:") self.fecha_vencimiento_label.grid(row=4, column=0) self.fecha_vencimiento_entry = tk.Entry(self.raiz) self.fecha_vencimiento_entry.grid(row=4, column=1) self.guardar_button = tk.Button(self.raiz, text="Guardar", command=self.guardar_tarea) self.guardar_button.grid(row=5, column=0) self.listar_button = tk.Button(self.raiz, text="Listar", command=self.listar_tareas) self.listar_button.grid(row=5, column=1) def guardar_tarea(self): nombre = self.nombre_entry.get() descripcion = self.descripcion_entry.get() estado = self.estado_var.get() prioridad = self.prioridad_var.get() fecha_vencimiento = self.fecha_vencimiento_entry.get() tarea = Tarea(nombre, descripcion, estado, prioridad, fecha_vencimiento) self.database.insertar_tarea(tarea) self.nombre_entry.delete(0, tk.END) self.descripcion_entry.delete(0, tk.END) self.fecha_vencimiento_entry.delete(0, tk.END) def listar_tareas(self): tareas = self.database.obtener_tareas() texto = "" for tarea in tareas: texto += f"ID: {tarea[0]}\nNombre: {tarea[1]}\nDescripción: {tarea[2]}\nEstado: {tarea[3]}\nPrioridad: {tarea[4]}\nFecha de vencimiento: {tarea[5]}\n\n" self.raiz.text_area.delete(1.0, tk.END) self.raiz.text_area.insert(tk.END, texto) root = tk.Tk() interfaz = Interfaz(root) root.mainloop() ``` **Ejecución** Para ejecutar la aplicación, simplemente ejecuta el archivo `app.py` con Python: ```bash python app.py ``` La aplicación se abrirá en una ventana con una interfaz de usuario que permite ingresar la información de las tareas y guardarlas en la base de datos. También se puede listar todas las tareas almacenadas en la base de datos. **Nota** Esta es una implementación básica y puede requerir ajustes y mejoras según las necesidades específicas de la empresa GestiónTareas S.A.