217 lines
5.4 KiB
Markdown
217 lines
5.4 KiB
Markdown
# 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.
|