commit 08-2025

This commit is contained in:
Kevin Adametz 2025-08-12 18:01:59 +02:00
parent 824fa43e96
commit 3b2253147b
393 changed files with 43842 additions and 18418 deletions

View file

@ -0,0 +1,275 @@
<table class="table user-view-table m-0">
<tbody>
<tr>
<td>{{ __('team.account') }}:</td>
<td>
@if($TreeCalcBot->__get('business_user')->active_account)
<span class="badge badge-outline-success">{{ __('team.active') }}</span>
@else
<span class="badge badge-outline-danger">{{ __('team.not_active') }}</span>
@endif
@if($TreeCalcBot->__get('business_user')->payment_account_date)
{{ __('team.until') }}: {{ formatDate($TreeCalcBot->__get('business_user')->payment_account_date) }}
@endif
(ID: {{ $TreeCalcBot->__get('business_user')->m_account }}) <span class="badge badge-outline-info">Optimized</span>
</td>
</tr>
<tr>
<td>{{ __('team.date') }}:</td>
<td>
<strong>{{ HTMLHelper::getMonth($data['month']) }} {{ $data['year'] }}</strong> | {{ __('team.completed') }}:
@if($TreeCalcBot->__get('business_user')->isSave())
<span class="badge badge-outline-success"><i class="fa fa-check-circle"></i></span>
@if(Auth::user()->isAdmin())
<a target="_blank" class="btn btn-outline-secondary btn-xs" href="{{ route('admin_business_optimized_user_detail', [$user->id, 'force_live' => true]) }}">
<i class="fa fa-redo"></i> {{ __('Live Berechnung') }}
</a>
@endif
@else
<span class="badge badge-outline-warning-dark"><i class="fa fa-times"></i></span>
@endif
</td>
</tr>
<tr>
<td>{{ __('team.career_level') }}:</td>
<td>
{{ \App\Services\TranslationHelper::transUserLevelName($TreeCalcBot->__get('business_user')->user_level_name) }} &nbsp;
<span class="badge badge-outline-success"> {{ __('team.KU') }} {{ $TreeCalcBot->__get('business_user')->qual_kp }} / {{ __('team.PP') }} {{ formatNumber($TreeCalcBot->__get('business_user')->qual_pp, 0) }}</span>
</td>
</tr>
<tr>
<td>{{ __('team.sponsor') }}:</td>
<td>
@if($TreeCalcBot->__get('business_user')->sponsor && $TreeCalcBot->__get('business_user')->sponsor->is_sponsor)
{{ $TreeCalcBot->__get('business_user')->sponsor->first_name }} {{ $TreeCalcBot->__get('business_user')->sponsor->last_name }} |
{{ $TreeCalcBot->__get('business_user')->sponsor->email }} |
{{ $TreeCalcBot->__get('business_user')->sponsor->m_account }}
@else
-
@endif
</td>
</tr>
<tr>
<td>{{ __('team.consultant_margin') }}:</td>
<td>
{{ $TreeCalcBot->__get('business_user')->margin }} %
</td>
</tr>
<tr>
<td>{{ __('team.shop_commission') }}:</td>
<td>
{{ $TreeCalcBot->__get('business_user')->margin_shop }} %
</td>
</tr>
<tr>
<td>{{ __('team.net_turnover') }}:</td>
<td>
<strong>{{ formatNumber($TreeCalcBot->__get('business_user')->sales_volume_total_sum) }} &euro;</strong>
({{ __('team.own') }}: {{ formatNumber($TreeCalcBot->__get('business_user')->sales_volume_total) }} &euro; | {{ __('team.shop') }}: {{ formatNumber($TreeCalcBot->__get('business_user')->sales_volume_total_shop) }} &euro;)
</td>
</tr>
<tr>
<td>{{ __('team.customer_points') }}:</td>
<td>
<strong>{{ formatNumber($TreeCalcBot->__get('business_user')->sales_volume_points_KP_sum, 0) }} {{ __('team.KU') }}</strong>
({{ __('team.own') }}: {{ formatNumber($TreeCalcBot->__get('business_user')->sales_volume_KP_points, 0) }} | {{ __('team.shop') }}: {{ formatNumber($TreeCalcBot->__get('business_user')->sales_volume_points_shop, 0) }})
&nbsp; <span class="badge {{ $TreeCalcBot->__get('business_user')->isQualKP() ? 'badge-outline-success' : 'badge-outline-warning-dark' }}"> {{ __('team.KU') }} {{ $TreeCalcBot->__get('business_user')->qual_kp }}</span>
@if($TreeCalcBot->__get('business_user')->getRestQualKP() > 0)
&nbsp; <span class="badge badge-outline-info" title="Überschüssige KU-Punkte werden als Bonus zu den TP hinzugefügt">
Rest-KU: {{ formatNumber($TreeCalcBot->__get('business_user')->getRestQualKP(), 0) }}
</span>
@endif
</td>
</tr>
@if($TreeCalcBot->__get('business_user')->version == 1)
<tr>
<td>{{ __('team.qualification_points') }}:</td>
<td>
<strong>{{ formatNumber($TreeCalcBot->__get('business_user')->total_qual_pp, 0) }} {{ __('team.TP') }}</strong> (+ {{ __('team.volume_KU') }}) &nbsp;
</td>
</tr>
<tr>
<td>{{ __('team.qualification_commission') }}:</td>
<td>
@if($TreeCalcBot->__get('business_user')->isQualLevel())
<span class="badge {{ $TreeCalcBot->__get('business_user')->isQualEqualLevel() ? 'badge-outline-success' : 'badge-outline-info' }}">
{{ __('team.KP') }} {{ formatNumber($TreeCalcBot->__get('business_user')->sales_volume_points_KP_sum, 0) }} /
<strong>{{ formatNumber($TreeCalcBot->__get('business_user')->qual_user_level['qual_kp'], 0) }}</strong> |
{{ __('team.TP') }} {{ formatNumber($TreeCalcBot->__get('business_user')->total_qual_pp, 0) }} /
<strong>{{ formatNumber($TreeCalcBot->__get('business_user')->qual_user_level['qual_pp'], 0) }}</strong>
| {{ $TreeCalcBot->__get('business_user')->qual_user_level['name'] }}</span>
@endif
</td>
</tr>
@endif
@if($TreeCalcBot->__get('business_user')->version == 2)
<tr>
<td>{{ __('team.payline_points') }}:</td>
<td>
<strong>{{ formatNumber($TreeCalcBot->__get('business_user')->payline_points, 0) }} {{ __('team.PP') }}</strong>
</td>
</tr>
<tr>
<td>{{ __('team.qualification_points') }}:</td>
<td>
<strong>{{ formatNumber($TreeCalcBot->__get('business_user')->payline_points_qual_kp, 0) }} {{ __('team.PP') }}</strong>
<small class="text-muted">
({{ formatNumber($TreeCalcBot->__get('business_user')->payline_points ?? 0, 0) }} Payline
@if($TreeCalcBot->__get('business_user')->getRestQualKP() > 0)
+ {{ formatNumber($TreeCalcBot->__get('business_user')->getRestQualKP(), 0) }} Rest-KU
@endif
)
</small>
</td>
</tr>
<tr>
<td>{{ __('team.current_commission_level') }}:</td>
<td>
@if($TreeCalcBot->__get('business_user')->isQualLevel())
<span class="badge {{ $TreeCalcBot->__get('business_user')->isQualEqualLevel() ? 'badge-outline-success' : 'badge-outline-info' }}">
{{ __('team.KU') }} {{ formatNumber($TreeCalcBot->__get('business_user')->sales_volume_points_KP_sum, 0) }} /
<strong>{{ formatNumber($TreeCalcBot->__get('business_user')->qual_user_level['qual_kp'], 0) }}</strong> |
{{ __('team.PP') }} {{ formatNumber($TreeCalcBot->__get('business_user')->payline_points_qual_kp, 0) }} /
<strong>{{ formatNumber($TreeCalcBot->__get('business_user')->qual_user_level['qual_pp'], 0) }}</strong>
| {{ \App\Services\TranslationHelper::transUserLevelName($TreeCalcBot->__get('business_user')->qual_user_level['name']) }}</span>
@endif
</td>
</tr>
@if($TreeCalcBot->__get('business_user')->qual_user_level_next)
<tr>
<td>{{ __('team.next_commission_level') }}:</td>
<td>
<span class="badge badge-outline-warning-dark">
{{ __('team.KU') }} {{ formatNumber($TreeCalcBot->__get('business_user')->sales_volume_points_KP_sum, 0) }} /
<strong>{{ formatNumber($TreeCalcBot->__get('business_user')->qual_user_level_next['qual_kp'], 0) }}</strong> |
{{ __('team.PP') }} {{ formatNumber($TreeCalcBot->__get('business_user')->payline_points_qual_kp, 0) }} /
<strong>{{ formatNumber($TreeCalcBot->__get('business_user')->qual_user_level_next['qual_pp'], 0) }}</strong>
| {{ \App\Services\TranslationHelper::transUserLevelName($TreeCalcBot->__get('business_user')->qual_user_level_next['name']) }}</span>
</td>
</tr>
@endif
@endif
<tr>
<td>@if($TreeCalcBot->__get('business_user')->next_qual_user_level) {{ __('team.qualification') }}<br> @endif {{ __('team.next_career_level') }}:</td>
<td>
@if($TreeCalcBot->__get('business_user')->next_qual_user_level)
<span class="badge badge-outline-success">
{{ __('team.KU') }} {{ formatNumber($TreeCalcBot->__get('business_user')->sales_volume_points_KP_sum, 0) }} /
<strong>{{ formatNumber($TreeCalcBot->__get('business_user')->next_qual_user_level['qual_kp'], 0) }}</strong> |
{{ __('team.TP') }} {{ formatNumber($TreeCalcBot->__get('business_user')->payline_points_qual_kp, 0) }} /
<strong>{{ formatNumber($TreeCalcBot->__get('business_user')->next_qual_user_level['qual_pp'], 0) }}</strong>
| {{ \App\Services\TranslationHelper::transUserLevelName($TreeCalcBot->__get('business_user')->next_qual_user_level['name']) }}</span>
@elseif($TreeCalcBot->__get('business_user')->next_can_user_level)
<span class="badge badge-outline-warning-dark">
{{ __('team.KU') }} {{ formatNumber($TreeCalcBot->__get('business_user')->sales_volume_points_KP_sum, 0) }} /
<strong>{{ formatNumber($TreeCalcBot->__get('business_user')->next_can_user_level['qual_kp'], 0) }}</strong> |
{{ __('team.TP') }} {{ formatNumber($TreeCalcBot->__get('business_user')->payline_points_qual_kp, 0) }} /
<strong>{{ formatNumber($TreeCalcBot->__get('business_user')->next_can_user_level['qual_pp'], 0) }}</strong>
| {{ \App\Services\TranslationHelper::transUserLevelName($TreeCalcBot->__get('business_user')->next_can_user_level['name']) }}</span>
@else
<span class="badge badge-outline-warning"><i class="fa fa-times"></i></span>
@endif
</td>
</tr>
<tr>
<td><strong>{{ __('team.commission_shop') }}:</strong></td>
<td>
<span class="badge badge-primary" style="font-size: 1em;"><strong>{{ formatNumber($TreeCalcBot->__get('business_user')->commission_shop_sales) }} &euro;</strong></span>
&nbsp;
({{ __('team.sales_store_net') }}: {{ formatNumber($TreeCalcBot->__get('business_user')->sales_volume_total_shop) }} &euro; / {{ $TreeCalcBot->__get('business_user')->margin_shop }} %)
</td>
</tr>
@if($TreeCalcBot->__get('business_user')->version == 1)
<tr>
<td><strong>{{ __('team.commission_team') }}:</strong></td>
<td>
<span class="badge badge-primary" style="font-size: 1em;"><strong>{{ formatNumber($TreeCalcBot->__get('business_user')->commission_pp_total) }} &euro;</strong></span>
</td>
</tr>
@endif
@if($TreeCalcBot->__get('business_user')->version == 2)
<tr>
<td><strong>{{ __('team.commission_payline') }}:</strong></td>
<td>
<span class="badge badge-primary" style="font-size: 1em;"><strong>{{ formatNumber($TreeCalcBot->__get('business_user')->commission_pp_total) }} &euro;</strong></span>
</td>
</tr>
<tr>
<td><strong>{{ __('team.commission_WB') }}:</strong></td>
<td>
<span class="badge badge-primary" style="font-size: 1em;"><strong>{{ formatNumber($TreeCalcBot->__get('business_user')->commission_growth_total) }} &euro;</strong></span>
</td>
</tr>
@endif
<tr>
<td><strong>{{ __('team.commission_total') }}:</strong></td>
<td>
<span class="badge badge-secondary" style="font-size: 1em;"><strong>{{ formatNumber($TreeCalcBot->__get('business_user')->getCommissionTotal()) }} &euro;</strong></span>
</td>
</tr>
@if($TreeCalcBot->__get('business_user')->version == 2)
{{-- <tr>
<td>Team Points:</td>
<td>
<strong>{{ formatNumber($TreeCalcBot->__get('business_user')->total_pp, 0) }} TP</strong>
</td>
</tr>
<tr>
<td>Qualifikation Team Points:</td>
<td>
<strong>{{ formatNumber($TreeCalcBot->__get('business_user')->payline_points_qual_kp, 0) }} TP</strong> (+ Volumen KP)
</td>
</tr>
--}}
@endif
</tbody>
</table>
<hr class="border-light m-0 mb-2">
<div class="table-responsive">
<table class="table card-table m-0">
<tbody>
<tr>
<th>{{__('tables.line')}}</th>
<th>{{__('tables.points')}}</th>
<th>{{__('tables.commission')}} %</th>
<th>{{__('tables.commission')}} &euro;</th>
</tr>
@foreach (array_reverse($TreeCalcBot->__get('business_user')->business_lines->toArray(), true) as $line => $object)
<tr>
<td>
@if($line <= $TreeCalcBot->__get('business_user')->getQualLevelPaylines())
<div class="font-weight-bolder line-height-1 my-2 text-dark badge badge-outline-success">{{ $line }}. {{ __('team.PP') }}</div>
@elseif($TreeCalcBot->__get('business_user')->isQualLevelGrowth($line))
<div class="font-weight-bolder line-height-1 my-2 text-dark badge badge-outline-warning-dark">{{ $line }}. {{ __('team.WB') }}</div>
@else
<div class="font-weight-bolder line-height-1 my-2 text-dark badge badge-outline-dark">{{ $line }}.</div>
@endif
</td>
<td>{{ formatNumber($TreeCalcBot->getKeybyLine($line, 'points'), 0) }}</td>
<td>{{ formatNumber($TreeCalcBot->getKeybyLine($line, 'margin'), 1) }} %</td>
<td>{{ formatNumber($TreeCalcBot->getKeybyLine($line, 'commission'), 2) }} &euro;</td>
</tr>
@endforeach
</tbody>
<tfoot>
<tr>
<td>{{__('tables.total')}}</td>
<td>{{ formatNumber($TreeCalcBot->__get('business_user')->total_pp, 0) }}</td>
<td></td>
<td><strong>{{ formatNumber($TreeCalcBot->__get('business_user')->commission_pp_total, 2) }} &euro;</strong></td>
</tr>
</tfoot>
</table>
</div>

View file

@ -0,0 +1,69 @@
@extends('layouts.layout-2')
@section('content')
<div class="card">
<h5 class="card-header text-danger">
<i class="fa fa-exclamation-triangle mr-2"></i>
{{__('Business')}} {{__('Fehler')}}
<span class="badge badge-danger ml-2">OPTIMIERT</span>
</h5>
<div class="card-body">
<div class="alert alert-danger">
<h5 class="alert-heading">
<i class="fa fa-bug mr-2"></i>
Ein Fehler ist aufgetreten
</h5>
<p class="mb-3">
Bei der Verarbeitung der optimierten Business-Daten ist ein Fehler aufgetreten.
Dies kann durch große Datenmengen oder Systemauslastung verursacht werden.
</p>
<hr>
<div class="row">
<div class="col-md-6">
<h6>Fehlerdetails:</h6>
<div class="bg-light p-3 rounded">
<code>{{ $error }}</code>
</div>
</div>
<div class="col-md-6">
<h6>Betroffene Parameter:</h6>
<ul class="list-unstyled">
@if(isset($month) && isset($year))
<li><strong>Zeitraum:</strong> {{ $month }}/{{ $year }}</li>
@endif
@if(isset($user_id))
<li><strong>User ID:</strong> {{ $user_id }}</li>
@endif
<li><strong>Version:</strong> Optimiert</li>
<li><strong>Zeit:</strong> {{ now()->format('Y-m-d H:i:s') }}</li>
</ul>
</div>
</div>
</div>
<div class="alert alert-info">
<h6><i class="fa fa-lightbulb mr-2"></i>Lösungsvorschläge:</h6>
<ol>
<li>Verwenden Sie die <a href="{{ route('admin_business_show') }}" class="btn btn-outline-primary btn-sm ml-2">Original-Version</a></li>
<li>Versuchen Sie es zu einem späteren Zeitpunkt erneut</li>
<li>Reduzieren Sie den Zeitraum oder die Anzahl der verarbeiteten Daten</li>
<li>Kontaktieren Sie den Administrator, wenn der Fehler weiterhin auftritt</li>
</ol>
</div>
<div class="text-center mt-4">
<a href="{{ route('admin_business_optimized') }}" class="btn btn-primary">
<i class="fa fa-arrow-left mr-2"></i>
Zurück zur Übersicht
</a>
<a href="{{ route('admin_business_show') }}" class="btn btn-outline-secondary">
<i class="fa fa-undo mr-2"></i>
Original-Version verwenden
</a>
</div>
</div>
</div>
@endsection

View file

@ -0,0 +1,159 @@
@extends('layouts.layout-2')
@section('content')
<div class="card">
<h5 class="card-header">
{{__('Business')}} {{__('Übersicht')}}
<span class="badge badge-success ml-2">OPTIMIERT</span>
</h5>
<div class="card-body p-0">
{!! Form::open(['action' => route('admin_business_optimized'), 'class' => 'form-horizontal', 'id'=>'form_filter_business_user']) !!}
<div class="form-row align-items-center px-4 pb-2 pt-3">
<div class="col-6 col-sm-6 col-md-3 col-lg-3 mb-1">
<select class="custom-select on_change_invoice" name="business_user_filter_month">
@foreach($filter_months as $key=>$value)
<option value="{{$key}}" @if(session('business_user_filter_month') == $key) selected @endif>{{$value}}</option>
@endforeach
</select>
</div>
<div class="col-6 col-sm-6 col-md-3 col-lg-3 mb-1">
<select class="custom-select on_change_invoice" name="business_user_filter_year">
@foreach($filter_years as $key=>$value)
<option value="{{$value}}" @if(session('business_user_filter_year') == $value) selected @endif>{{$value}}</option>
@endforeach
</select>
</div>
<div class="col-6 col-sm-6 col-md-3 col-lg-3 mb-1">
<select class="custom-select on_change_invoice" name="business_user_filter_active">
@foreach($filter_active as $key=>$value)
<option value="{{$key}}" @if(session('business_user_filter_active') == $key) selected @endif>{{$value}}</option>
@endforeach
</select>
</div>
<div class="col-6 col-sm-6 col-md-3 col-lg-3 mb-1">
<select class="custom-select on_change_invoice" name="business_user_filter_level">
@foreach($filter_levels as $key=>$value)
<option value="{{$key}}" @if(session('business_user_filter_level') == $key) selected @endif>{{$value}}</option>
@endforeach
</select>
</div>
</div>
<!-- Zweite Filterzeile für erweiterte Filter -->
<div class="form-row align-items-center px-4 pb-3">
<div class="col-6 col-sm-6 col-md-3 col-lg-3 mb-1">
<select class="custom-select on_change_invoice" name="business_user_filter_next_level">
@foreach($filter_next_level as $key=>$value)
<option value="{{$key}}" @if(session('business_user_filter_next_level') == $key) selected @endif>{{$value}}</option>
@endforeach
</select>
</div>
<div class="col-6 col-sm-6 col-md-3 col-lg-3 mb-1">
<!-- Platz für weitere Filter falls nötig -->
</div>
<div class="col-6 col-sm-6 col-md-3 col-lg-3 mb-1">
<!-- Platz für weitere Filter falls nötig -->
</div>
<div class="col-6 col-sm-6 col-md-3 col-lg-3 mb-1">
<!-- Platz für weitere Filter falls nötig -->
</div>
</div>
{!! Form::close() !!}
<!-- Performance Info Banner -->
<div class="alert alert-info mx-4 mb-3">
<div class="d-flex align-items-center">
<i class="fa fa-rocket mr-2"></i>
<div>
<strong>Optimierte Version aktiv:</strong>
Diese Version nutzt optimierte Datenbankabfragen und Memory-effiziente Verarbeitung für bessere Performance bei großen Datenmengen.
<br>
<small><strong>Hinweis:</strong> Der "Nächster Level" Filter funktioniert optimal mit gespeicherten Monatsdaten. Bei Live-Berechnungen wird er aus Performance-Gründen ignoriert.</small>
</div>
</div>
</div>
<div class="card-datatable table-responsive pt-0">
<table class="datatables-style table table-striped table-bordered" id="datatable-users">
<thead>
<tr>
<th>{{__('ID') }}</th>
<th>{{__('Berater-ID') }}</th>
<th>{{ __('Level') }}</th>
<th>{{ __('KD') }}</th>
<th>{{__('Gesamte Points')}}</th>
<th>{{__('Umsatz netto')}}</th>
<th>{{__('E-Mail')}}</th>
<th>{{__('First name')}}</th>
<th>{{__('Last name')}}</th>
<th>{{__('Nächster Level')}}</th>
<th>{{__('Sponsor')}}</th>
<th>{{__('tables.account')}}</th>
<th>{{__('bis')}}</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
</div>
</div>
</div>
<script>
$( document ).ready(function() {
var oTable = $('#datatable-users').DataTable({
"processing": true,
"serverSide": true,
"stateSave": false,
"searching": true,
ajax: {
url: '{!! route('admin_business_optimized_user_datatable') !!}?v={{ time() }}',
data: function(d) {
d.business_user_filter_name = $('input[name=business_user_filter_name]').val();
d.business_user_filter_month = $('select[name=business_user_filter_month]').val();
d.business_user_filter_year = $('select[name=business_user_filter_year]').val();
d.business_user_filter_active = $('select[name=business_user_filter_active]').val();
d.business_user_filter_level = $('select[name=business_user_filter_level]').val();
d.business_user_filter_next_level = $('select[name=business_user_filter_next_level]').val();
},
error: function(xhr, error, code) {
console.error('DataTable Error:', error, code);
if(xhr.responseJSON && xhr.responseJSON.error) {
alert('Fehler beim Laden der Daten: ' + xhr.responseJSON.error);
}
}
},
"order": [[1, "asc" ]],
"columns": [
{ data: 'id', name: 'id', searchable: false, orderable: true },
{ data: 'm_account', name: 'm_account', orderable: true, searchable: true },
{ data: 'user_level', name: 'user_level', orderable: false, searchable: false },
{ data: 'is_qual_kp', name: 'is_qual_kp', orderable: false, searchable: false },
{ data: 'sales_volume_KP_points', name: 'sales_volume_KP_points', orderable: false, searchable: false },
{ data: 'sales_volume_total', name: 'sales_volume_total', orderable: false, searchable: false },
{ data: 'email', name: 'email', orderable: true, searchable: true},
{ data: 'first_name', name: 'first_name', orderable: true, searchable: true },
{ data: 'last_name', name: 'last_name', orderable: true, searchable: true },
{ data: 'next_level_qualified', name: 'next_level_qualified', orderable: false, searchable: false },
{ data: 'sponsor', name: 'sponsor', orderable: false, searchable: false },
{ data: 'active_account', name: 'active_account', orderable: false, searchable: false },
{ data: 'payment_account_date', name: 'payment_account_date', orderable: false, searchable: false },
],
"bLengthChange": false,
"iDisplayLength": 100,
"language": {
"url": "/js/datatables-{{ \App::getLocale() }}.json"
}
});
$('select.on_change_invoice').on('change', function(){
oTable.draw();
});
$('input.on_keyup_invoice').on('keyup', function(){
oTable.draw();
});
});
</script>
@endsection

View file

@ -0,0 +1,189 @@
@extends('layouts.layout-2')
@section('content')
<div class="card">
<h5 class="card-header">
{{__('team.business')}} {{__('team.structure')}}
<span class="badge badge-success ml-2">OPTIMIERT</span>
</h5>
<div class="card-body">
{!! Form::open(['action' => route('admin_business_optimized_structure'), 'class' => 'form-horizontal', 'id'=>'form_filter_business_user']) !!}
<div class="form-row align-items-center px-0 pb-2 pt-0">
<div class="col-6 col-sm-4 col-md-4 col-lg-4 mb-1">
<select class="custom-select on_change_select_filter" name="business_user_filter_month">
@foreach($filter_months as $key=>$value)
<option value="{{$key}}" @if(session('business_user_filter_month') == $key) selected @endif>{{$value}}</option>
@endforeach
</select>
</div>
<div class="col-6 col-sm-4 col-md-4 col-lg-4 mb-1">
<select class="custom-select on_change_select_filter" name="business_user_filter_year">
@foreach($filter_years as $key=>$value)
<option value="{{$value}}" @if(session('business_user_filter_year') == $value) selected @endif>{{$value}}</option>
@endforeach
</select>
</div>
</div>
{!! Form::close() !!}
<!-- Performance Metrics Display -->
@if(isset($performance))
<div class="alert alert-success">
<div class="row">
<div class="col-md-3">
<i class="fa fa-clock mr-1"></i>
<strong>Ladezeit:</strong> {{ $performance['execution_time'] }}ms
</div>
<div class="col-md-3">
<i class="fa fa-memory mr-1"></i>
<strong>Memory:</strong> {{ $performance['memory_used'] }}
</div>
<div class="col-md-3">
<i class="fa fa-users mr-1"></i>
<strong>Users:</strong> {{ $performance['user_count'] }}
</div>
<div class="col-md-3">
<i class="fa fa-user-times mr-1"></i>
<strong>Ohne Sponsor:</strong> {{ $performance['parentless_count'] }}
</div>
</div>
</div>
@endif
<hr class="container-m-nx border-light mt-0">
<div>
<div id="nestable-menu" class="mb-4">
<button type="button" class="btn btn-default btn-sm" data-action="expand-all">{{ __('team.expand_all') }}</button>
<button type="button" class="btn btn-default btn-sm" data-action="collapse-all">{{ __('team.collapse_all') }}</button>
<!-- Zusätzliche Optimierungs-Controls -->
<div class="btn-group ml-3" role="group">
<button type="button" class="btn btn-info btn-sm" onclick="showPerformanceDetails()">
<i class="fa fa-chart-line"></i> Performance Details
</button>
<a href="{{ route('admin_business_structure') }}" class="btn btn-outline-secondary btn-sm">
<i class="fa fa-arrow-left"></i> Original Version
</a>
@if(isset($forceLiveCalculation) && $forceLiveCalculation === true)
<a href="{{ route('admin_business_optimized_structure') }}" class="btn btn-outline-warning btn-sm" title="Live-Berechnung aus">
<i class="fa fa-refresh"></i> Live berechnen aus
</a>
@else
<a href="{{ route('admin_business_optimized_structure') }}?force_live_calculation=1" class="btn btn-outline-success btn-sm" title="Live-Berechnung erzwingen">
<i class="fa fa-refresh"></i> Live berechnen
</a>
@endif
</div>
</div>
<div class="row">
<div class="col-md-12">
<div class="dd" id="nestable2">
{!! $TreeCalcBot->makeHtmlTree() !!}
</div>
</div>
</div>
@if($TreeCalcBot->isParentless())
<div class="row">
<div class="col-md-12">
<hr>
<h6 class="">
Berater ohne Sponsor
<span class="badge badge-warning">{{ count($TreeCalcBot->__get('parentless')) }}</span>
</h6>
<div class="dd" id="">
{!! $TreeCalcBot->makeParentlessHtml() !!}
</div>
</div>
</div>
@endif
</div>
</div>
</div>
<!-- Performance Details Modal -->
<div class="modal fade" id="performanceModal" tabindex="-1" role="dialog">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">Performance Metrics</h5>
<button type="button" class="close" data-dismiss="modal">
<span>&times;</span>
</button>
</div>
<div class="modal-body">
@if(isset($performance))
<table class="table table-sm">
<tr>
<td><strong>Ausführungszeit:</strong></td>
<td>{{ $performance['execution_time'] }}ms</td>
</tr>
<tr>
<td><strong>Memory-Verbrauch:</strong></td>
<td>{{ $performance['memory_used'] }}</td>
</tr>
<tr>
<td><strong>Anzahl Users:</strong></td>
<td>{{ $performance['user_count'] }}</td>
</tr>
<tr>
<td><strong>Parentlose Users:</strong></td>
<td>{{ $performance['parentless_count'] }}</td>
</tr>
<tr>
<td><strong>Optimierungen:</strong></td>
<td>
<span class="badge badge-success">Repository Pattern</span>
<span class="badge badge-success">Eager Loading</span>
<span class="badge badge-success">Memory Monitoring</span>
</td>
</tr>
</table>
@endif
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">Schließen</button>
</div>
</div>
</div>
</div>
<link rel="stylesheet" href="/vendor/libs/nestable/nestable.css">
<script src="/vendor/libs/nestable/jquery-nestable.js?v=1"></script>
<script>
$( document ).ready(function() {
function updateOutput(e) {
//var list = e.length ? e : $(e.target);
//var output = list.data('output');
};
$('#nestable2').nestable().on('change', updateOutput);
// output initial serialised data
//updateOutput($('#nestable2').data('output', $('#nestable2-output')));
$('#nestable-menu').on('click', function(e) {
var target = $(e.target);
var action = target.data('action');
if (action === 'expand-all') {
$('.dd').nestable('expandAll');
}
if (action === 'collapse-all') {
$('.dd').nestable('collapseAll');
}
});
});
$('.on_change_select_filter').on('change', function(){
$('#form_filter_business_user').submit();
});
function showPerformanceDetails() {
$('#performanceModal').modal('show');
}
</script>
@endsection

View file

@ -0,0 +1,62 @@
@extends('layouts.layout-2')
@section('content')
<div class="card">
<h5 class="card-header">
{{__('Business')}} {{__('Übersicht')}} Berater
<span class="badge badge-success ml-2">OPTIMIERT</span>
</h5>
{!! Form::open(['action' => route('admin_business_optimized_user_detail', [$user->id]), 'class' => 'form-horizontal', 'id'=>'']) !!}
{{ Form::hidden('user_id', $user->id ) }}
{{ Form::hidden('month', $TreeCalcBot->__get('date')->month) }}
{{ Form::hidden('year', $TreeCalcBot->__get('date')->year) }}
<div class="media align-items-center pt-3 mb-0">
{{-- <img src="assets/img/avatars/5-small.png" alt="" class="d-block ui-w-100 rounded-circle">--}}
<div class="media-body ml-4">
<h4 class="font-weight-bold mb-0">
{{ $user->account->first_name }} {{ $user->account->last_name }}
<a class="font-weight-normal" href="mailto:{{ $user->email }}">{{ $user->email }}</a>
{{-- <button type="submit" class="btn btn-submit btn-secondary btn-sm float-right mr-4">{{ __('save') }}</button>&nbsp; --}}
</h4>
<!-- Performance Info -->
@if(isset($data['performance']))
<div class="mt-2">
<small class="text-muted">
<i class="fa fa-rocket mr-1"></i>
Optimierte Version - Ladezeit: {{ $data['performance']['execution_time'] }}ms
</small>
</div>
@endif
</div>
</div>
{!! Form::close() !!}
<div class="card-body">
<!-- Navigation zwischen Original und Optimiert -->
<div class="alert alert-info">
<div class="d-flex justify-content-between align-items-center">
<div>
<i class="fa fa-info-circle mr-2"></i>
<strong>Optimierte User-Detail-Ansicht:</strong>
Verbesserte Performance durch optimierte Datenbankabfragen und Memory-Management.
</div>
<a href="{{ route('admin_business_user_detail', [$user->id]) }}" class="btn btn-outline-secondary btn-sm">
<i class="fa fa-arrow-left"></i> Original Version
</a>
</div>
</div>
@include('admin.business_optimized._user_detail_in')
</div>
</div>
<script>
$( document ).ready(function() {
});
</script>
@endsection