Crear Tarea
Exportar contenido
Crea nuevas tareas con información completa y configuración avanzada.
- Botón “Nueva Tarea” en la cabecera del módulo
- FAB (Floating Action Button) en móvil
- Desde vista Calendario: crea tarea con fecha preseleccionada
Información Básica
Sección titulada «Información Básica»Campos Requeridos:
- Título: Nombre descriptivo de la tarea (máx. 255 caracteres)
- Fecha de Vencimiento: Fecha límite para completar la tarea
Campos Opcionales:
- Descripción: Detalles adicionales (texto largo, área de texto)
- Prioridad: Baja, Media, Alta o Urgente (por defecto: Media)
- Estado: Pendiente, En Progreso, Completada, Cancelada, En Espera (por defecto: Pendiente)
- Fecha de Inicio: Cuándo comenzar la tarea
- Horas Estimadas: Tiempo estimado de trabajo (decimal)
- Progreso: Porcentaje de avance (0-100%, slider de 5 en 5)
- Categoría: Selección de categorías personalizadas creadas previamente
- Proyecto: Asignación a proyecto existente
- Etiquetas: Tags personalizados para clasificación
Proceso de Creación
Sección titulada «Proceso de Creación»- Click en “Nueva Tarea”
- Completar pestaña “General” con información básica
- (Opcional) Configurar recurrencia en pestaña “Recurrencia”
- (Opcional) Ajustar configuración avanzada en pestaña “Configuración”
- Click en “Guardar”
La tarea se crea inmediatamente y aparece en las vistas correspondientes.
Detalles Técnicos
Componente
Sección titulada «Componente»- Archivo:
TaskFormSheet.tsx - Ruta:
src/features/projects/sub-modules/tasks/components/TaskFormSheet.tsx
Schema de Validación
Sección titulada «Schema de Validación»const taskSchema = z.object({ title: z.string().min(1, "El título es obligatorio").max(255, "El título es muy largo"), description: z.string().optional(), priority: z.enum(["low", "medium", "high", "urgent"]), status: z.enum(["pending", "in_progress", "completed", "cancelled", "on_hold"]), start_date: z.string().optional(), due_date: z.string().min(1, "La fecha de vencimiento es obligatoria"), estimated_hours: z.number().min(0).max(1000).optional(), progress: z.number().min(0).max(100), category: z.string().optional(), tags: z.array(z.string()).optional(), project_id: z.string().optional(),});Mutación de Creación
Sección titulada «Mutación de Creación»const createTaskMutation = useMutation({ mutationFn: async (data: TaskFormData) => { const taskData = { ...data, user_id: user.id, tags: selectedTags, start_date: data.start_date ? new Date(data.start_date + "T00:00:00").toISOString() : null, due_date: data.due_date ? new Date(data.due_date + "T23:59:59").toISOString() : null, project_id: data.project_id === "none" ? null : data.project_id || null, };
const { data: insertedTask, error } = await supabase .from("tasks") .insert([taskData]) .select('id') .single();
if (error) throw error;
// Si tiene recurrencia, crear configuración if (recurrenceEnabled && insertedTask.id) { await supabase.from("task_recurrence_config").insert([recurrenceData]); } }});Estados del Formulario
Sección titulada «Estados del Formulario»| Estado | Descripción |
|---|---|
taskId | ID de tarea al editar (undefined al crear) |
projectId | ID de proyecto preseleccionado |
defaultDueDate | Fecha de vencimiento predeterminada |
selectedTags | Array de etiquetas seleccionadas |
recurrenceEnabled | Si se activa la recurrencia |
Pestañas del Formulario
Sección titulada «Pestañas del Formulario»Pestaña General:
- Título
- Descripción
- Fecha de vencimiento
- Prioridad
- Categoría (si hay categorías creadas)
Pestaña Recurrencia:
- Activar/desactivar recurrencia
- Tipo de recurrencia (diaria, semanal, mensual, anual)
- Intervalo de repetición
- Días de la semana (para recurrencia semanal)
- Fecha final opcional
- Máximo de ocurrencias opcional
- Vista previa de próximas fechas
Pestaña Recordatorios (solo al editar):
- Configuración de recordatorios programados
Pestaña Configuración:
- Estado de la tarea
- Progreso (slider 0-100%)
- Proyecto asignado
- Fecha de inicio
- Horas estimadas
- Etiquetas personalizadas
Tabla: tasks
Sección titulada «Tabla: tasks»CREATE TABLE tasks ( id UUID PRIMARY KEY DEFAULT uuid_generate_v4(), user_id UUID NOT NULL REFERENCES auth.users(id), title VARCHAR(255) NOT NULL, description TEXT, priority VARCHAR(20) NOT NULL, status VARCHAR(20) NOT NULL, start_date TIMESTAMPTZ, due_date TIMESTAMPTZ NOT NULL, completed_at TIMESTAMPTZ, estimated_hours NUMERIC(10,2), actual_hours NUMERIC(10,2), progress INTEGER DEFAULT 0, category VARCHAR(100), tags TEXT[], parent_task_id UUID REFERENCES tasks(id), project_id UUID REFERENCES projects(id), customer_id UUID REFERENCES customers(id), invoice_id UUID REFERENCES invoices(id), expense_id UUID REFERENCES expenses(id), product_id UUID REFERENCES products(id), reminder_enabled BOOLEAN DEFAULT false, reminder_date TIMESTAMPTZ, reminder_sent BOOLEAN DEFAULT false, created_at TIMESTAMPTZ DEFAULT NOW(), updated_at TIMESTAMPTZ DEFAULT NOW());