Skip to content

Vasak-Group/budgets

Repository files navigation

Generador de Presupuestos

Una aplicación web moderna para crear, gestionar y sincronizar presupuestos con almacenamiento flexible y gratuito.

🚀 Características Principales

Almacenamiento Gratuito y Flexible

  • Local: Almacenamiento completamente local sin costos
  • Google Sheets: Utiliza el espacio gratuito de Google Drive (15GB)
  • Híbrido: Sincronización automática entre local y Google Sheets

Gestión de Presupuestos

  • Crear presupuestos profesionales con múltiples ítems
  • Calcular automáticamente subtotales, descuentos e impuestos
  • Generar PDFs profesionales para envío a clientes
  • Historial completo de presupuestos guardados

Sincronización Inteligente

  • Sincronización automática cada 5 minutos
  • Detección de cambios sin sincronizar
  • Resolución automática de conflictos
  • Funciona offline con sincronización al reconectar

Sistema de Backup Completo

  • Exportar datos a JSON (local, Google Sheets, o fusionado)
  • Importar datos desde archivos de backup
  • Migración automática entre sistemas de almacenamiento
  • Respaldo automático en múltiples ubicaciones

🛠️ Tecnologías

  • Vue 3 con Composition API y <script setup>
  • TypeScript para type safety
  • Vite para desarrollo rápido
  • Google Sheets API para almacenamiento gratuito
  • jsPDF para generación de PDFs
  • Vue Router para navegación

📦 Instalación

# Clonar el repositorio
git clone [url-del-repo]
cd presupuesto

# Instalar dependencias
bun install

# Configurar variables de entorno
cp .env.example .env.local
# Editar .env.local con tus credenciales de Google API

# Iniciar servidor de desarrollo
bun run dev

⚙️ Configuración

Variables de Entorno

Crear .env.local con:

# Google Sheets API (para almacenamiento gratuito)
VITE_GOOGLE_CLIENT_ID=tu_client_id_de_google_console
VITE_GOOGLE_API_KEY=tu_api_key_de_google_console

# Opcional: configuración adicional
VITE_DEFAULT_LOGO_URL=url_del_logo_por_defecto

Obtener Credenciales de Google

  1. Ve a Google Cloud Console
  2. Crea un nuevo proyecto o selecciona uno existente
  3. Habilita las APIs: Google Sheets API y Google Drive API
  4. Crea credenciales (API Key y OAuth 2.0 Client ID)
  5. Configura los orígenes autorizados para tu dominio

🎯 Modos de Almacenamiento

1. Local Only

  • Almacenamiento completamente local
  • Sin costos ni dependencias externas
  • Ideal para uso personal o privado

2. Google Sheets

  • Almacenamiento en Google Sheets (15GB gratis)
  • Acceso desde cualquier dispositivo
  • Respaldo automático en tu Google Drive

3. Híbrido

  • Lo mejor de ambos mundos
  • Sincronización automática bidireccional
  • Funciona offline con sync al reconectar

📖 Uso

Cambiar Modo de Almacenamiento

import { setStorageMode } from '@/services/backupService';
import { authenticateUser } from '@/services/googleSheetsAuth';

// Para Google Sheets, primero autenticar
await authenticateUser();
setStorageMode('google-sheets');

// Para modo híbrido
setStorageMode('hybrid');

// Para solo local
setStorageMode('local-only');

Usar en Componentes

<script setup lang="ts">
import { useUnifiedStorage } from '@/composables/useUnifiedStorage';

const {
  budgets,
  settings,
  loading,
  saveBudget,
  performSync
} = useUnifiedStorage();
</script>

🔄 Migración y Backup

Exportar Datos

import { downloadBackup } from '@/services/backupService';

// Descargar backup completo
await downloadBackup('both');

Importar Datos

import { importBackupFile } from '@/services/backupService';

// Importar desde archivo JSON
await importBackupFile(file, 'both');

🏗️ Estructura del Proyecto

src/
├── components/
│   ├── SettingsPanel.vue      # Panel de configuración y sync
│   ├── BudgetForm.vue         # Formulario de presupuestos
│   └── BudgetHistory.vue      # Historial de presupuestos
├── services/
│   ├── unifiedStorage.ts      # Servicio de almacenamiento unificado
│   ├── backupService.ts       # Sistema de backup/restore
│   ├── googleSheetsAuth.ts    # Autenticación con Google
│   ├── googleSheetsCRUD.ts    # Operaciones CRUD en Sheets
│   └── budgetStorage.ts       # Almacenamiento local (legacy)
├── composables/
│   └── useUnifiedStorage.ts   # Composable para gestión de estado
└── types/
    └── index.ts               # Definiciones de tipos TypeScript

📚 Documentación Adicional

🤝 Contribuir

  1. Fork el proyecto
  2. Crea una rama para tu feature (git checkout -b feature/AmazingFeature)
  3. Commit tus cambios (git commit -m 'Add some AmazingFeature')
  4. Push a la rama (git push origin feature/AmazingFeature)
  5. Abre un Pull Request

💰 Costos

¡Completamente GRATIS!

  • ✅ Google Sheets API: Gratuita
  • ✅ Google Drive: 15GB gratis (suficiente para miles de presupuestos)
  • ✅ Hosting: Puede deployarse gratis en Vercel, Netlify, etc.
  • ✅ Sin suscripciones ni pagos recurrentes

📄 Licencia

MIT License - ve LICENSE para detalles.

� Solución de Problemas

❌ Error de Autenticación Google Sheets

Si ves errores como "IdentityCredentialError" o "Error retrieving a token":

  1. Verifica tu configuración:

    # Tu .env.local debe contener credenciales reales:
    VITE_GOOGLE_CLIENT_ID=tu_client_id_real.apps.googleusercontent.com
    VITE_GOOGLE_API_KEY=tu_api_key_real
  2. Sigue la guía completa: Ver GOOGLE_SHEETS_TROUBLESHOOT.md

  3. Configuración básica en Google Cloud Console:

    • Habilita Google Sheets API y Google Drive API
    • Crea OAuth 2.0 Client ID para aplicación web
    • Agrega http://localhost:5173 a orígenes autorizados
    • Completa OAuth Consent Screen

🆘 Archivos de Ayuda

�🐛 Reportar Problemas

Si encuentras algún problema, por favor abre un issue con:

  • Descripción del problema
  • Pasos para reproducir
  • Modo de almacenamiento usado
  • Capturas de pantalla si es relevante

⭐ Agradecimientos

  • Vue.js team por el excelente framework
  • Google por las APIs gratuitas
  • Comunidad open source por las librerías utilizadas

About

Servicio para generar Facturas / presupuestos online

Topics

Resources

Stars

Watchers

Forks