# Quote Management System - Bay Area Affiliates, Inc. Ein vollständiges Quote-Management-System mit PostgreSQL-Datenbank, Node.js Backend und Tailwind CSS Frontend. ## Features - **Kundenverwaltung**: Erstellen, Bearbeiten und Löschen von Kunden mit vollständigen US-Adressen - **Quote-Erstellung**: Generierung professioneller Angebote mit automatischer Nummerierung (YYYY-MM-XXXX) - **Flexible Preisgestaltung**: - Automatische Berechnung von Subtotal, Tax (8.25%) und Total - Tax-Exempt Option für Churches und Non-Profits - TBD-Support für noch nicht festgelegte Beträge mit flexiblen Fußnoten - **PDF-Export**: Generierung druckfertiger PDFs basierend auf Ihrer HTML-Vorlage - **Responsive Design**: Modernes UI mit Tailwind CSS ## Installation & Start ### Voraussetzungen - Docker - Docker Compose ### Schnellstart 1. **Repository klonen oder Dateien kopieren** ```bash cd quote-system ``` 2. **Logo hochladen (optional)** - Legen Sie Ihr Logo als `logo_.png` in den Ordner `/uploads` oder nutzen Sie die Upload-Funktion in der App 3. **Anwendung starten** ```bash docker-compose up -d ``` 4. **Anwendung öffnen** - Browser: http://localhost:3000 ### Erste Schritte 1. Die Datenbank wird automatisch initialisiert mit einem Beispielkunden (Braselton Development) 2. Navigieren Sie zu "Customers" um weitere Kunden anzulegen 3. Erstellen Sie Ihr erstes Quote unter "Quotes" → "+ New Quote" ## Verwendung ### Kunden verwalten - **Neuen Kunden anlegen**: Klicken Sie auf "+ New Customer" - **Kunde bearbeiten**: Klicken Sie auf "Edit" neben dem Kunden - **Kunde löschen**: Klicken Sie auf "Delete" (Achtung: Löscht auch alle zugehörigen Quotes!) ### Quotes erstellen 1. Klicken Sie auf "+ New Quote" 2. Wählen Sie einen Kunden aus dem Dropdown 3. Die Quote-Nummer wird automatisch generiert (Format: YYYY-MM-XXXX) 4. Das Datum ist standardmäßig heute, kann aber geändert werden 5. Fügen Sie Line Items hinzu: - **Quantity**: Menge (z.B. "1", "2", "TBD") - **Description**: Beschreibung des Artikels/Service - **Rate**: Preis pro Einheit oder Stundensatz - **Amount**: Gesamtbetrag (wird bei TBD automatisch auf "TBD" gesetzt) - **TBD Checkbox**: Markiert Posten als "To Be Determined" 6. Für Tax-Exempt Kunden (Churches, Non-Profits): Aktivieren Sie "Tax Exempt" 7. Bei TBD-Posten: Geben Sie eine Fußnote ein (z.B. "Total excludes labor charges...") ### PDF generieren - Klicken Sie auf "PDF" neben dem gewünschten Quote - Das PDF wird automatisch im originalen Design heruntergeladen ## Technische Details ### Architektur - **Backend**: Node.js mit Express - **Datenbank**: PostgreSQL 15 - **Frontend**: Vanilla JavaScript mit Tailwind CSS - **PDF Generation**: Puppeteer - **Container**: Docker & Docker Compose ### Datenbank-Schema #### Customers - id, name, street, city, state, zip_code, account_number - created_at, updated_at #### Quotes - id, quote_number, customer_id (FK), quote_date - tax_exempt, tax_rate, subtotal, tax_amount, total - has_tbd, tbd_note - created_at, updated_at #### Quote Items - id, quote_id (FK), quantity, description, rate, amount - is_tbd, item_order - created_at ### API Endpoints #### Customers - `GET /api/customers` - Alle Kunden - `GET /api/customers/:id` - Einzelner Kunde - `POST /api/customers` - Neuer Kunde - `PUT /api/customers/:id` - Kunde aktualisieren - `DELETE /api/customers/:id` - Kunde löschen #### Quotes - `GET /api/quotes` - Alle Quotes - `GET /api/quotes/:id` - Einzelnes Quote mit Items - `POST /api/quotes` - Neues Quote - `PUT /api/quotes/:id` - Quote aktualisieren - `DELETE /api/quotes/:id` - Quote löschen - `GET /api/quotes/next-number` - Nächste Quote-Nummer - `POST /api/quotes/:id/pdf` - PDF generieren #### Upload - `POST /api/upload-logo` - Logo hochladen ## Konfiguration ### Umgebungsvariablen Die folgenden Umgebungsvariablen können in der `docker-compose.yml` angepasst werden: ```yaml DB_HOST: postgres DB_PORT: 5432 DB_USER: quoteuser DB_PASSWORD: quotepass123 # ÄNDERN SIE DIES FÜR PRODUKTION! DB_NAME: quotedb ``` ### Ports - **Anwendung**: 3000 - **PostgreSQL**: 5432 (extern erreichbar für Backups) ## Backup & Restore ### Backup erstellen ```bash docker exec quote_postgres pg_dump -U quoteuser quotedb > backup.sql ``` ### Backup wiederherstellen ```bash docker exec -i quote_postgres psql -U quoteuser quotedb < backup.sql ``` ## Wartung ### Logs ansehen ```bash docker-compose logs -f ``` ### Anwendung neu starten ```bash docker-compose restart ``` ### Anwendung stoppen ```bash docker-compose down ``` ### Datenbank zurücksetzen (VORSICHT!) ```bash docker-compose down -v docker-compose up -d ``` ## Anpassungen ### Firmendaten ändern Bearbeiten Sie die HTML-Vorlage in `server.js` in der Funktion `generateQuoteHTML()`: - Firmenname - Adresse - Telefonnummern - E-Mail - Tagline ### Tax Rate ändern Standard ist 8.25% (Texas). Ändern Sie in: - `server.js`: Zeile mit `tax_rate: 8.25` - `init.sql`: Zeile mit `tax_rate DECIMAL(5,2) DEFAULT 8.25` ## Fehlerbehebung ### Anwendung startet nicht ```bash docker-compose logs app ``` ### Datenbankverbindung fehlgeschlagen ```bash docker-compose logs postgres ``` ### Port bereits belegt Ändern Sie in `docker-compose.yml` den Port: ```yaml ports: - "3001:3000" # Statt 3000:3000 ``` ## Support Bei Problemen oder Fragen wenden Sie sich an Ihren Administrator. ## Lizenz Proprietär - Bay Area Affiliates, Inc.