183 lines
No EOL
7 KiB
PHP
183 lines
No EOL
7 KiB
PHP
<?php
|
|
|
|
namespace App\Services\BusinessPlan;
|
|
|
|
use App\User;
|
|
use App\Models\UserBusiness;
|
|
|
|
|
|
/**
|
|
* Klasse für die HTML-Darstellung von Business-Trees
|
|
* Trennt Präsentationslogik von Geschäftslogik
|
|
*/
|
|
class TreeHelperOptimized
|
|
{
|
|
/**
|
|
* Generiert QualKP Badge für UserBusiness
|
|
*/
|
|
public static function generateQualKPBadge(UserBusiness $userBusiness): string
|
|
{
|
|
if (!$userBusiness->m_level_id) {
|
|
return '-';
|
|
}
|
|
|
|
$qualKP = (int) $userBusiness->qual_kp;
|
|
$pointsSum = (int) $userBusiness->sales_volume_points_KP_sum;
|
|
$isQual = $pointsSum >= $qualKP;
|
|
|
|
$badgeClass = $isQual ? 'badge-outline-success' : 'badge-outline-danger';
|
|
|
|
return '<span class="badge ' . $badgeClass . '"> KU ' . $qualKP . '</span>';
|
|
}
|
|
|
|
/**
|
|
* Generiert QualKP Badge für User
|
|
*/
|
|
public static function generateQualKPBadgeForUser(User $user, int $month, int $year): string
|
|
{
|
|
if (!$user->user_level) {
|
|
return '-';
|
|
}
|
|
|
|
$qualKP = (int) $user->user_level->qual_kp;
|
|
$pointsSum = (int) $user->getUserSalesVolumeBy($month, $year, 'sales_volume_points_KP_sum');
|
|
$isQual = $pointsSum >= $qualKP;
|
|
|
|
$badgeClass = $isQual ? 'badge-outline-success' : 'badge-outline-warning-dark';
|
|
|
|
return '<span class="badge ' . $badgeClass . '"> KU ' . $qualKP . '</span>';
|
|
}
|
|
|
|
/**
|
|
* Generiert Sales Volume Display für UserBusiness
|
|
*/
|
|
public static function generateSalesVolumeDisplay(UserBusiness $userBusiness, string $type): string
|
|
{
|
|
if ($type === 'points') {
|
|
$total = (int) $userBusiness->sales_volume_points_KP_sum;
|
|
$individual = (int) $userBusiness->sales_volume_KP_points;
|
|
$shop = (int) $userBusiness->sales_volume_points_shop;
|
|
} else {
|
|
$total = (float) $userBusiness->sales_volume_total_sum;
|
|
$individual = (float) $userBusiness->sales_volume_total;
|
|
$shop = (float) $userBusiness->sales_volume_total_shop;
|
|
$suffix = ' €';
|
|
}
|
|
|
|
$totalFormatted = $type === 'points' ? $total : formatNumber($total);
|
|
$individualFormatted = $type === 'points' ? $individual : formatNumber($individual);
|
|
$shopFormatted = $type === 'points' ? $shop : formatNumber($shop);
|
|
$suffix = $type === 'points' ? '' : ' €';
|
|
|
|
return '<div class="no-line-break">' . $totalFormatted . $suffix . '</div>' .
|
|
'<span class="small no-line-break">E: ' . $individualFormatted . ' | S: ' . $shopFormatted . $suffix . '</span>';
|
|
}
|
|
|
|
/**
|
|
* Generiert Sales Volume Display für User
|
|
*/
|
|
public static function generateSalesVolumeDisplayForUser(User $user, string $type, int $month, int $year): string
|
|
{
|
|
if ($type === 'points') {
|
|
$total = (int) $user->getUserSalesVolumeBy($month, $year, 'sales_volume_points_KP_sum');
|
|
$individual = (int) $user->getUserSalesVolumeBy($month, $year, 'sales_volume_KP_points');
|
|
$shop = (int) $user->getUserSalesVolumeBy($month, $year, 'sales_volume_points_shop');
|
|
} else {
|
|
$total = (float) $user->getUserSalesVolumeBy($month, $year, 'sales_volume_total_sum');
|
|
$individual = (float) $user->getUserSalesVolumeBy($month, $year, 'sales_volume_total');
|
|
$shop = (float) $user->getUserSalesVolumeBy($month, $year, 'sales_volume_total_shop');
|
|
}
|
|
|
|
$totalFormatted = $type === 'points' ? $total : formatNumber($total);
|
|
$individualFormatted = $type === 'points' ? $individual : formatNumber($individual);
|
|
$shopFormatted = $type === 'points' ? $shop : formatNumber($shop);
|
|
$suffix = $type === 'points' ? '' : ' €';
|
|
|
|
return '<div class="no-line-break">' . $totalFormatted . $suffix . '</div>' .
|
|
'<span class="small no-line-break">E: ' . $individualFormatted . ' | S: ' . $shopFormatted . $suffix . '</span>';
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
* Generiert Action Buttons (mit XSS-Schutz)
|
|
*/
|
|
public static function generateActionButtons($userId): string
|
|
{
|
|
$userId = (int) $userId; // Sicherheit: Nur Integer
|
|
|
|
$html = '<button type="button" class="btn icon-btn btn-xs btn-secondary" data-toggle="modal" data-target="#modals-load-content"
|
|
data-id="' . $userId . '"
|
|
data-action="business-user-detail"
|
|
data-back=""
|
|
data-modal="modal-xl"
|
|
data-init_from="admin"
|
|
data-route="' . route('modal_load') . '"><span class="fa fa-calculator"></span></button>';
|
|
|
|
if (config('app.debug') === true) {
|
|
$html .= '<a href="' . route('admin_business_optimized_user_detail', [$userId]) . '" class="btn icon-btn btn-xs btn-primary"><span class="fa fa-calculator"></span></a>';
|
|
}
|
|
|
|
return $html;
|
|
}
|
|
|
|
/**
|
|
* Generiert Sponsor Display für UserBusiness
|
|
*/
|
|
public static function generateSponsorDisplay(UserBusiness $userBusiness): string
|
|
{
|
|
if (!$userBusiness->sponsor || !$userBusiness->sponsor->is_sponsor) {
|
|
return '-';
|
|
}
|
|
|
|
$sponsor = $userBusiness->sponsor;
|
|
$html = e($sponsor->first_name . ' ' . $sponsor->last_name);
|
|
|
|
$html .= ' <button type="button" class="btn icon-btn btn-xs btn-secondary" data-toggle="modal" data-target="#modals-load-content"
|
|
data-id="' . (int) $sponsor->user_id . '"
|
|
data-action="business-user-detail"
|
|
data-back=""
|
|
data-modal="modal-xl"
|
|
data-init_from="admin"
|
|
data-route="' . route('modal_load') . '"><span class="fa fa-calculator"></span></button><br>';
|
|
|
|
$html .= '<span class="small no-line-break">' . e($sponsor->email);
|
|
$html .= ' | ' . e($sponsor->m_account);
|
|
$html .= '</span>';
|
|
|
|
return $html;
|
|
}
|
|
|
|
/**
|
|
* Generiert Sponsor Display für User
|
|
*/
|
|
public static function generateSponsorDisplayForUser(User $user): string
|
|
{
|
|
if (!$user->user_sponsor) {
|
|
return '-';
|
|
}
|
|
|
|
$sponsor = $user->user_sponsor;
|
|
$html = '';
|
|
|
|
if ($sponsor->account) {
|
|
$html .= e($sponsor->account->first_name . ' ' . $sponsor->account->last_name);
|
|
$html .= ' <button type="button" class="btn icon-btn btn-xs btn-secondary" data-toggle="modal" data-target="#modals-load-content"
|
|
data-id="' . (int) $sponsor->id . '"
|
|
data-action="business-user-detail"
|
|
data-back=""
|
|
data-modal="modal-xl"
|
|
data-init_from="admin"
|
|
data-route="' . route('modal_load') . '"><span class="fa fa-calculator"></span></button><br>';
|
|
}
|
|
|
|
$html .= '<span class="small no-line-break">' . e($sponsor->email);
|
|
if ($sponsor->account) {
|
|
$html .= ' | ' . e($sponsor->account->m_account);
|
|
}
|
|
$html .= '</span>';
|
|
|
|
return $html;
|
|
}
|
|
} |