update 20.10.2025
This commit is contained in:
parent
8c11130b5d
commit
a939cd51ef
616 changed files with 84821 additions and 4121 deletions
125
dev/app-bak/Services/NextLevelBadgeHelper.php
Normal file
125
dev/app-bak/Services/NextLevelBadgeHelper.php
Normal file
|
|
@ -0,0 +1,125 @@
|
|||
<?php
|
||||
|
||||
namespace App\Services;
|
||||
|
||||
use App\Models\UserBusiness;
|
||||
|
||||
/**
|
||||
* Helper-Klasse für die optimierte Generierung von Next-Level-Badges
|
||||
*
|
||||
* Diese Klasse nutzt ausschließlich bereits berechnete und gespeicherte Daten
|
||||
* aus der UserBusiness-Tabelle, anstatt für jeden User eine neue TreeCalcBot-Instanz
|
||||
* zu erstellen. Dies führt zu erheblichen Performance-Verbesserungen bei DataTables.
|
||||
*/
|
||||
class NextLevelBadgeHelper
|
||||
{
|
||||
/**
|
||||
* Generiert Badge für nächsten Level Qualifikation basierend auf UserBusiness-Daten
|
||||
*
|
||||
* @param UserBusiness $userBusiness Bereits gespeicherte Business-Daten
|
||||
* @return string HTML Badge
|
||||
*/
|
||||
public static function generateBadgeFromUserBusiness(UserBusiness $userBusiness): string
|
||||
{
|
||||
return self::renderBadge($userBusiness);
|
||||
}
|
||||
|
||||
/**
|
||||
* Generiert Badge basierend auf BusinessUser-Objekt (für TreeCalcBot-Kompatibilität)
|
||||
*
|
||||
* @param object $businessUser Business-User-Objekt mit Level-Daten
|
||||
* @return string HTML Badge
|
||||
*/
|
||||
public static function generateBadgeFromBusinessUser($businessUser): string
|
||||
{
|
||||
return self::renderBadge($businessUser);
|
||||
}
|
||||
|
||||
/**
|
||||
* Zentrale Badge-Rendering-Logik
|
||||
*
|
||||
* @param mixed $source UserBusiness Model oder BusinessUser Objekt
|
||||
* @return string HTML Badge
|
||||
*/
|
||||
private static function renderBadge($source): string
|
||||
{
|
||||
// Prüfe ob User für den nächsten Level qualifiziert ist (grün)
|
||||
if (!empty($source->next_qual_user_level)) {
|
||||
return self::renderQualifiedBadge($source);
|
||||
}
|
||||
|
||||
// Prüfe ob User den Level erreichen könnte, aber noch nicht qualifiziert ist (gelb)
|
||||
if (!empty($source->next_can_user_level)) {
|
||||
return self::renderCanReachBadge($source);
|
||||
}
|
||||
|
||||
// Kein nächster Level verfügbar (rot)
|
||||
return self::renderNoLevelBadge();
|
||||
}
|
||||
|
||||
/**
|
||||
* Rendert Badge für qualifizierte User (grün)
|
||||
*/
|
||||
private static function renderQualifiedBadge($source): string
|
||||
{
|
||||
$level = $source->next_qual_user_level;
|
||||
$ku = formatNumber($source->sales_volume_points_KP_sum ?? 0, 0);
|
||||
$ku_required = formatNumber($level['qual_kp'] ?? 0, 0);
|
||||
$tp = formatNumber($source->payline_points_qual_kp ?? 0, 0);
|
||||
$tp_required = formatNumber($level['qual_pp'] ?? 0, 0);
|
||||
$levelName = TranslationHelper::transUserLevelName($level['name'] ?? 'Unbekannt');
|
||||
|
||||
return '<span class="badge badge-outline-success" title="Qualifiziert für nächsten Level">
|
||||
<i class="fa fa-check"></i> ' . e($levelName) . '<br/>
|
||||
<small>KU: ' . $ku . '/' . $ku_required . ' | TP: ' . $tp . '/' . $tp_required . '</small>
|
||||
</span>';
|
||||
}
|
||||
|
||||
/**
|
||||
* Rendert Badge für User die den Level erreichen könnten (gelb)
|
||||
*/
|
||||
private static function renderCanReachBadge($source): string
|
||||
{
|
||||
$level = $source->next_can_user_level;
|
||||
$ku = formatNumber($source->sales_volume_points_KP_sum ?? 0, 0);
|
||||
$ku_required = formatNumber($level['qual_kp'] ?? 0, 0);
|
||||
$tp = formatNumber($source->payline_points_qual_kp ?? 0, 0);
|
||||
$tp_required = formatNumber($level['qual_pp'] ?? 0, 0);
|
||||
$levelName = TranslationHelper::transUserLevelName($level['name'] ?? 'Unbekannt');
|
||||
|
||||
return '<span class="badge badge-outline-warning-dark" title="Noch nicht qualifiziert">
|
||||
<i class="fa fa-clock"></i> ' . e($levelName) . '<br/>
|
||||
<small>KU: ' . $ku . '/' . $ku_required . ' | TP: ' . $tp . '/' . $tp_required . '</small>
|
||||
</span>';
|
||||
}
|
||||
|
||||
/**
|
||||
* Rendert Badge wenn kein nächster Level verfügbar ist (rot)
|
||||
*/
|
||||
private static function renderNoLevelBadge(): string
|
||||
{
|
||||
return '<span class="badge badge-outline-warning" title="Kein nächster Level verfügbar">
|
||||
<i class="fa fa-times"></i>
|
||||
</span>';
|
||||
}
|
||||
|
||||
/**
|
||||
* Fallback-Badge bei Fehlern oder fehlenden Daten
|
||||
*/
|
||||
public static function renderErrorBadge(string $message = 'Fehler bei der Berechnung'): string
|
||||
{
|
||||
return '<span class="badge badge-outline-danger" title="' . e($message) . '">
|
||||
<i class="fa fa-exclamation"></i> Fehler
|
||||
</span>';
|
||||
}
|
||||
|
||||
/**
|
||||
* Badge für fehlende Daten
|
||||
*/
|
||||
public static function renderNoDataBadge(): string
|
||||
{
|
||||
return '<span class="badge badge-outline-secondary" title="Keine Daten verfügbar">
|
||||
<i class="fa fa-question"></i> Keine Daten
|
||||
</span>';
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue