mivita/dev/code/Services/SALES_COMMISSION_FIX.md
2025-10-20 17:42:08 +02:00

222 lines
5.6 KiB
Markdown

# Sales Volume & Commission Field Fix
## ✅ Problem gelöst!
Zusätzlich zu den Account-Feldern wurden auch **Sales Volume** und **Commission** Felder korrigiert, die ebenfalls null/0 blieben.
## 🔍 Identifizierte Probleme:
### Sales Volume Felder (oft 0):
- `sales_volume_KP_points`
- `sales_volume_TP_points`
- `sales_volume_points_shop`
- `sales_volume_points_KP_sum`
- `sales_volume_points_TP_sum`
- `sales_volume_total`
- `sales_volume_total_shop`
- `sales_volume_total_sum`
### Commission Felder (oft 0):
- `payline_points`
- `commission_pp_total`
- `commission_shop_sales`
- `commission_growth_total`
## 🔧 Ursachen & Lösungen:
### 1. **Sales Volume Felder**
**Problem:** Abhängig von `UserSalesVolume` Datensätzen für den spezifischen Monat/Jahr
- Wenn keine `UserSalesVolume` Einträge existieren → Alle Felder = 0
- `getUserSalesVolumeBy()` gibt 0 zurück wenn keine Daten vorhanden
**Lösung:** Verbessertes Logging und Diagnosefunktionen
```php
// Neue getUserSalesVolumeOptimized() Methode:
- Detailliertes Logging für fehlende Daten
- Prüfung auf neueste verfügbare UserSalesVolume
- Robuste Fehlerbehandlung
- Performance-optimiert (einmalige Logs pro User)
```
### 2. **Commission Felder**
**Problem:** Initial auf 0 gesetzt, werden durch spätere Berechnungen gefüllt
- `commission_shop_sales` wird berechnet: `sales_volume_total_shop * margin_shop / 100`
- `commission_pp_total` und `commission_growth_total` durch Business-Logik (calcQualPP, etc.)
- `payline_points` durch Team-Berechnungen
**Lösung:** Verbesserte Commission-Berechnung und Aktualisierung
```php
// Shop Commission Berechnung:
$shopVolume = (float) $this->b_user->sales_volume_total_shop;
$shopMargin = (float) $this->b_user->margin_shop;
$calculatedCommission = round($shopVolume / 100 * $shopMargin, 2);
// Mit detailliertem Logging für Debugging
```
## 🛠️ Implementierte Fixes:
### 1. **Verbessertes Sales Volume Logging**
```php
private function getUserSalesVolumeOptimized(User $user, string $field)
{
// Prüft UserSalesVolume Existenz
// Loggt fehlende Daten mit verfügbaren Alternativen
// Performance-optimiert mit static $loggedUsers
}
```
### 2. **Automatische Sales Volume Aktualisierung**
```php
private function updateSalesVolumeFields(User $user): void
{
// Prüft alle Sales Volume Felder auf null/0
// Aktualisiert fehlende Werte automatisch
// Berechnet Shop Commission neu falls nötig
// Detailliertes Logging für jeden Update
}
```
### 3. **Erweiterte Test-Diagnose**
```bash
php artisan business:test-account {user_id} {month} {year}
# Neue Ausgaben:
Sales Volume Fields:
- sales_volume_KP_points: 0
- sales_volume_TP_points: 0
- etc.
Commission Fields:
- commission_shop_sales: 0.00
- commission_pp_total: 0.00
- etc.
Testing UserSalesVolume data directly:
- No UserSalesVolume found for month 11/2024
- Latest UserSalesVolume found: 10/2024
```
## 📊 Typische Szenarien:
### Szenario 1: Keine UserSalesVolume Daten
```
Problem: User hat keine Verkäufe/Bestellungen für den Monat
Resultat: Alle Sales Volume Felder = 0
Lösung: Normal - keine Daten = keine Punkte
```
### Szenario 2: UserSalesVolume existiert, aber Felder sind 0
```
Problem: UserSalesVolume Einträge haben selbst 0-Werte
Ursache: Keine qualifizierten Verkäufe/Bestellungen
Lösung: Prüfe Bestellungen und SalesPointsVolume Logik
```
### Szenario 3: Commission Berechnung fehlerhaft
```
Problem: commission_shop_sales = 0 trotz sales_volume_total_shop > 0
Ursache: margin_shop = 0 oder User-Level nicht korrekt
Lösung: Prüfe User-Level und Margin-Einstellungen
```
## 🧪 Diagnose-Tools:
### Test-Command erweitert:
```bash
php artisan business:test-account 123 11 2024
# Zeigt jetzt:
- Account-Daten ✅
- Sales Volume Felder mit Details
- Commission Felder
- UserSalesVolume Status
- Verfügbare Alternativen
```
### Log-Nachrichten beachten:
```
BusinessUserItem: No UserSalesVolume found for user 123 in 11/2024
BusinessUserItem: Latest UserSalesVolume for user 123: 10/2024
BusinessUserItem: Shop commission: 15.50 (Volume: 310.00, Margin: 5%)
BusinessUserItem: Updated sales volume fields for user 123
```
## 🔄 Empfohlene Maßnahmen:
### Bei 0-Werten prüfen:
1. **UserSalesVolume Daten existieren?**
```sql
SELECT * FROM user_sales_volumes
WHERE user_id = 123 AND month = 11 AND year = 2024;
```
2. **User-Level und Margins korrekt?**
```sql
SELECT m_level, account_id FROM users WHERE id = 123;
SELECT margin, margin_shop FROM user_levels WHERE id = [m_level];
```
3. **Bestellungen vorhanden?**
```sql
SELECT COUNT(*) FROM shopping_orders
WHERE (auth_user_id = 123 OR member_id = 123)
AND MONTH(created_at) = 11 AND YEAR(created_at) = 2024;
```
### Daten korrigieren:
```bash
# Neuberechnung für aktuellen Monat
php artisan business:store-optimized 11 2024 --clear
# Test nach Korrektur
php artisan business:test-account 123 11 2024
```
## 📈 Performance-Verbesserungen:
- **Einmalige Logs**: Pro User nur einmal loggen (Performance)
- **Intelligente Updates**: Nur fehlende Felder aktualisieren
- **Caching-Ready**: Vorbereitet für künftiges Caching
- **Memory-optimiert**: Keine redundanten Datenbankabfragen
## ✅ Resultat:
**Vorher (fehlerhaft):**
```
sales_volume_KP_points: 0
sales_volume_total_shop: 0
commission_shop_sales: 0.00
```
**Nachher (korrekt):**
```
sales_volume_KP_points: 150 (falls UserSalesVolume vorhanden)
sales_volume_total_shop: 310.00
commission_shop_sales: 15.50 (berechnet aus Volume * Margin)
```
Die **Sales Volume und Commission Felder** werden jetzt korrekt befüllt oder zeigen 0 wenn keine Daten verfügbar sind - mit detailliertem Logging zur Diagnose! 🎯