23-01-2026
This commit is contained in:
parent
a939cd51ef
commit
a8b395e20d
248 changed files with 29342 additions and 4805 deletions
|
|
@ -30,7 +30,7 @@
|
|||
</div>
|
||||
<div class="col-md-3 mb-3">
|
||||
<div class="text-muted small">{{ __('tables.abo_delivery') }}</div>
|
||||
{{ $user_abo->getCountOrders() }}
|
||||
{{ $user_abo->getCountPaidOrders() }} / {{ \App\Models\Setting::getContentBySlug('abo-min-duration') }}
|
||||
|
||||
</div>
|
||||
|
||||
|
|
@ -83,11 +83,13 @@
|
|||
<div class="card-body pb-1">
|
||||
<div class="row">
|
||||
<div class="col-md-6 mb-3">
|
||||
@if(App\Services\AboHelper::canEditAbo($user_abo, $view))
|
||||
<button type="button" class="btn btn-sm btn-secondary" data-toggle="modal" data-target="#modals-load-content"
|
||||
data-id="{{ $user_abo->id }}"
|
||||
data-action="abo_update_settings"
|
||||
data-view="{{ $view }}"
|
||||
data-route="{{ route('modal_load') }}"><span class="fa fa-edit"></span>{{ __('abo.abo_settings') }}</button>
|
||||
@endif
|
||||
</div>
|
||||
|
||||
<div class="col-md-3 mb-3">
|
||||
|
|
|
|||
24
resources/views/admin/abo/_detail_abo_info.blade.php
Normal file
24
resources/views/admin/abo/_detail_abo_info.blade.php
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
|
||||
<div class="card-body pb-1">
|
||||
<h5 class="font-weight-semibold">
|
||||
{{ __('abo.abo_info') }}
|
||||
</h5>
|
||||
<div class="row">
|
||||
<div class="col-md-12 mb-3">
|
||||
<div class="">
|
||||
<h6 class="card-header bg-light text-primary px-2 py-2">
|
||||
<a href="#" class="" data-toggle="collapse" data-target="#collapseFilter" aria-expanded="false" aria-controls="collapseFilter">
|
||||
<i class="fa fa-caret-expand"></i> {{ __('abo.pros_hl') }}
|
||||
</a>
|
||||
</h6>
|
||||
<div class="collapse" id="collapseFilter">
|
||||
<div class="form-row pb-1 pt-1">
|
||||
<ul class="list-padding-top">
|
||||
{!! __('abo.pros_list', ['abo-min-duration' => \App\Models\Setting::getContentBySlug('abo-min-duration')]) !!}
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -31,7 +31,9 @@
|
|||
<th>{{__('tables.status')}}</th>
|
||||
<th>{{__('tables.shipping')}}</th>
|
||||
<th>{{__('tables.art')}}</th>
|
||||
@if(!isset($only_show_products) || !$only_show_products)
|
||||
<th>{{__('tables.invoice')}}</th>
|
||||
@endif
|
||||
<th>{{__('tables.firstname')}}</th>
|
||||
<th>{{__('tables.lastname')}}</th>
|
||||
<th>{{__('tables.email')}}</th>
|
||||
|
|
@ -53,10 +55,19 @@
|
|||
@endif
|
||||
@else
|
||||
@if($user_abo->is_for === 'me')
|
||||
@if(!isset($only_show_products) || !$only_show_products)
|
||||
{!! '<a href="' . route('user_order_detail', [$user_abo_order->shopping_order_id]) . '" class="btn btn-xs btn-primary">'.$user_abo_order->shopping_order_id.'</a>' !!}
|
||||
|
||||
@else
|
||||
{{ $user_abo_order->shopping_order_id }}
|
||||
@endif
|
||||
@endif
|
||||
@if($user_abo->is_for === 'ot')
|
||||
@if(!isset($only_show_products) || !$only_show_products)
|
||||
{!! '<a href="' . route('user_shop_order_detail', [$user_abo_order->shopping_order_id]) . '" class="btn btn-xs btn-secondary">'.$user_abo_order->shopping_order_id.'</a>' !!}
|
||||
@else
|
||||
{{ $user_abo_order->shopping_order_id }}
|
||||
@endif
|
||||
@endif
|
||||
@endif
|
||||
</td>
|
||||
|
|
@ -78,12 +89,14 @@
|
|||
<td>
|
||||
{!! '<span class="badge badge-pill badge-'.$user_abo_order->shopping_order->getPaymentForColor().'">'.$user_abo_order->shopping_order->getPaymentForType().'</span>' !!}
|
||||
</td>
|
||||
@if(!isset($only_show_products) || !$only_show_products)
|
||||
<td>
|
||||
@if($user_abo_order->shopping_order->isInvoice())
|
||||
{!! '<span class="no-line-break"><a href="'.route('storage_file', [$user_abo_order->shopping_order->id, 'invoice', 'download']).'" class="btn btn-primary btn-xs"><i class="fa fa-download"></i></a>
|
||||
<a href="'.route('storage_file', [$user_abo_order->shopping_order->id, 'invoice', 'stream']).'" target="_blank" class="btn btn-warning btn-xs"><i class="fa fa-eye"></i></a></span>' !!}
|
||||
@endif
|
||||
</td>
|
||||
@endif
|
||||
<td>
|
||||
{{ $user_abo_order->shopping_order->shopping_user->shipping_firstname }}
|
||||
</td>
|
||||
|
|
|
|||
|
|
@ -107,17 +107,22 @@
|
|||
<h5 class=" font-weight-semibold mb-2">
|
||||
{{ __('abo.abo_order_hl') }}
|
||||
</h5>
|
||||
<p>{{ __('abo.abo_order_info_2') }}</p>
|
||||
@if(isset($only_show_products) && $only_show_products === true)
|
||||
<p>{!! __('abo.abo_order_info_block', ['abo-min-duration' => \App\Models\Setting::getContentBySlug('abo-min-duration')]) !!}</p>
|
||||
@else
|
||||
<p>{{ __('abo.abo_order_info_2') }}</p>
|
||||
@endif
|
||||
<hr>
|
||||
@include('user.abo.vat_info')
|
||||
|
||||
@if(!isset($only_show_products) || !$only_show_products)
|
||||
<button type="button" class="btn btn-sm btn-secondary btn-block mt-2" data-toggle="modal" data-target="#modals-load-content"
|
||||
data-id="{{ $user_abo->id }}"
|
||||
data-action="abo-add-product"
|
||||
data-route="{{ route('modal_load') }}"><i class="fa fa-plus-circle"></i> {{ __('abo.add_product') }}</button>
|
||||
|
||||
@endif
|
||||
<div class="" id="insert_show_products_order" data-cart-order-id="{{ $user_abo->id }}">
|
||||
@include('admin.abo._order_abo_show')
|
||||
@php $only_show_products = isset($only_show_products) ? $only_show_products : false; @endphp
|
||||
@include('admin.abo._order_abo_show', ['only_show_products' => $only_show_products])
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
|
@ -28,11 +28,14 @@
|
|||
<div>{{ __('order.content') }}: {{ $abo_item->product->contents }}</div>
|
||||
<div>{{ __('order.art_no') }}: {{ $abo_item->product->number }}</div>
|
||||
</div>
|
||||
@if(!isset($only_show_products) || !$only_show_products)
|
||||
<div class="options">
|
||||
<a href="#" class="auto-delete-product remove_item_form_cart product-tooltip" data-order-item-id="{{$abo_item->id}}" data-product-id="{{ $abo_item->product->id }}"><i class="fa fa-times"></i> {{ __('order.article_remove') }}</a>
|
||||
</div>
|
||||
@endif
|
||||
</td>
|
||||
<td>
|
||||
@if(!isset($only_show_products) || !$only_show_products)
|
||||
<div class="no-line-break input-group-min-w">
|
||||
<div class="input-group d-inline-flex w-auto">
|
||||
<span class="input-group-prepend">
|
||||
|
|
@ -44,6 +47,9 @@
|
|||
</span>
|
||||
</div>
|
||||
</div>
|
||||
@else
|
||||
<div class="no-line-break"> {{ $abo_item->qty }}</div>
|
||||
@endif
|
||||
</td>
|
||||
<td class="text-right font-weight-semibold align-top px-3 py-2" style="width: 100px;">
|
||||
<div class="no-line-break"> {{ $abo_item->getFormattedTotalPrice() }} €</div>
|
||||
|
|
|
|||
|
|
@ -20,6 +20,9 @@
|
|||
<div class="card">
|
||||
@include('admin.abo._detail')
|
||||
</div>
|
||||
<div class="card mt-3">
|
||||
@include('admin.abo._detail_abo_info')
|
||||
</div>
|
||||
<div class="card mt-3">
|
||||
@include('admin.customer._customer_detail', ['shopping_user' => $customer_detail])
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -10,26 +10,27 @@
|
|||
<input type="hidden" name="id" value="{{$data['id']}}">
|
||||
<input type="hidden" name="view" value="{{$data['view']}}">
|
||||
|
||||
@if($data['view'] !== 'admin' && ($user_abo->user_id != \Auth::user()->id && $user_abo->member_id != \Auth::user()->id))
|
||||
@if(!App\Services\AboHelper::canEditAbo($user_abo, $data['view']))
|
||||
<div class="alert alert-danger">
|
||||
Unauthorized action. Is not my abo
|
||||
</div>
|
||||
@else
|
||||
|
||||
<div class="form-row">
|
||||
<div class="col-sm-6">
|
||||
<label for="abo_interval" class="form-label">{{ __('tables.abo_delivery_day') }}*</label>
|
||||
<select class="custom-select" name="abo_interval" id="abo_interval" required>
|
||||
{!! HTMLHelper::getAboDeliveryOptions($user_abo->abo_interval) !!}
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-sm-12 mt-1">
|
||||
<i class="text-muted">{{ __('abo.abo_copy_abo_interval') }}</i>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
{{--
|
||||
<div class="form-row">
|
||||
<div class="col-sm-6">
|
||||
<label for="abo_interval" class="form-label">{{ __('tables.abo_delivery_day') }}*</label>
|
||||
<select class="custom-select" name="abo_interval" id="abo_interval" required>
|
||||
{!! HTMLHelper::getAboDeliveryOptions($user_abo->abo_interval) !!}
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-sm-12 mt-1">
|
||||
<i class="text-muted">{{ __('abo.abo_copy_abo_interval') }}</i>
|
||||
</div>
|
||||
</div>
|
||||
<hr>
|
||||
|
||||
{{-- <div class="form-row">
|
||||
<div class="col-sm-6">
|
||||
<label for="next_date" class="form-label">{{ __('tables.next_date') }} ({{ $user_abo->next_date }})</label>
|
||||
{!! Form::text('next_date', $user_abo->next_date, ['class'=>'form-control datepicker-base']) !!}
|
||||
|
|
@ -40,23 +41,44 @@
|
|||
</div>
|
||||
<hr>
|
||||
--}}
|
||||
|
||||
@php
|
||||
$canCancel = App\Services\AboHelper::canCancelAbo($user_abo, $data['view']);
|
||||
@endphp
|
||||
<hr>
|
||||
@if($canCancel || $data['view'] == 'admin')
|
||||
|
||||
<div class="form-row">
|
||||
<div class="col-sm-12">
|
||||
<label class="switcher switcher-primary">
|
||||
<input type="checkbox" class="switcher-input" name="abo_is_active" value="true" @if($user_abo->active) checked @endif>
|
||||
<span class="switcher-indicator">
|
||||
<span class="switcher-yes"></span>
|
||||
<span class="switcher-no"></span>
|
||||
</span>
|
||||
<span class="switcher-label">{{ __('abo.abo_is_active') }}</span>
|
||||
</label>
|
||||
</div>
|
||||
<div class="col-sm-12 mt-1">
|
||||
<i class="text-muted">{{ __('abo.abo_copy_active') }}</i>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="form-row">
|
||||
<div class="col-sm-12">
|
||||
<label class="switcher switcher-primary">
|
||||
<input type="checkbox" class="switcher-input" name="abo_is_active" value="true" @if($user_abo->active) checked @endif>
|
||||
<span class="switcher-indicator">
|
||||
<span class="switcher-yes"></span>
|
||||
<span class="switcher-no"></span>
|
||||
</span>
|
||||
<span class="switcher-label">{{ __('abo.abo_is_active') }}</span>
|
||||
</label>
|
||||
@if($data['view'] !== 'admin')
|
||||
<div class="col-sm-12 mt-3">
|
||||
<button type="submit" name="abo_cancel" value="true" class="btn btn-danger btn-sm" onclick="return confirm('{{ __('abo.confirm_cancel') }}')">
|
||||
<i class="ion ion-ios-trash"></i> {{ __('abo.cancel_abo') }}
|
||||
</button>
|
||||
</div>
|
||||
@endif
|
||||
</div>
|
||||
<div class="col-sm-12 mt-1">
|
||||
<i class="text-muted">{{ __('abo.abo_copy_active') }}</i>
|
||||
</div>
|
||||
</div>
|
||||
@else
|
||||
<input type="hidden" name="abo_is_active" value="{{ $user_abo->active }}">
|
||||
<div class="mt-1">
|
||||
<div class="alert alert-warning">
|
||||
{{ __('abo.info_min_duration_orders_left', ['count' => App\Services\AboHelper::getAboMinDuration() - $user_abo->getCountPaidOrders()]) }}
|
||||
</div>
|
||||
</div>
|
||||
@endif
|
||||
@endif
|
||||
</div>
|
||||
|
||||
|
|
|
|||
|
|
@ -32,7 +32,7 @@
|
|||
<td>{{ __('team.career_level') }}:</td>
|
||||
<td>
|
||||
{{ \App\Services\TranslationHelper::transUserLevelName($TreeCalcBot->business_user->user_level_name) }}
|
||||
<span class="badge badge-outline-success"> {{ __('team.KU') }} {{ $TreeCalcBot->business_user->qual_kp }} / {{ __('team.PP') }} {{ formatNumber($TreeCalcBot->business_user->qual_pp, 0) }}</span>
|
||||
<span class="badge badge-outline-success"> {{ __('team.KU') }} {{ $TreeCalcBot->business_user->qual_kp }} / {{ __('team.PP') }} {{ formatNumber($TreeCalcBot->business_user->qual_pp) }}</span>
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
|
|
@ -71,8 +71,8 @@
|
|||
<tr>
|
||||
<td>{{ __('team.customer_points') }}:</td>
|
||||
<td>
|
||||
<strong>{{ formatNumber($TreeCalcBot->business_user->sales_volume_points_KP_sum, 0) }} {{ __('team.KU') }}</strong>
|
||||
({{ __('team.own') }}: {{ formatNumber($TreeCalcBot->business_user->sales_volume_KP_points, 0) }} | {{ __('team.shop') }}: {{ formatNumber($TreeCalcBot->business_user->sales_volume_points_shop, 0) }})
|
||||
<strong>{{ formatNumber($TreeCalcBot->business_user->sales_volume_points_KP_sum) }} {{ __('team.KU') }}</strong>
|
||||
({{ __('team.own') }}: {{ formatNumber($TreeCalcBot->business_user->sales_volume_KP_points) }} | {{ __('team.shop') }}: {{ formatNumber($TreeCalcBot->business_user->sales_volume_points_shop) }})
|
||||
<span class="badge {{ $TreeCalcBot->business_user->isQualKP() ? 'badge-outline-success' : 'badge-outline-warning-dark' }}"> {{ __('team.KU') }} {{ $TreeCalcBot->business_user->qual_kp }}</span>
|
||||
|
||||
</td>
|
||||
|
|
@ -81,7 +81,7 @@
|
|||
<tr>
|
||||
<td>{{ __('team.qualification_points') }}:</td>
|
||||
<td>
|
||||
<strong>{{ formatNumber($TreeCalcBot->business_user->total_qual_pp, 0) }} {{ __('team.TP') }}</strong> (+ {{ __('team.volume_KU') }})
|
||||
<strong>{{ formatNumber($TreeCalcBot->business_user->total_qual_pp) }} {{ __('team.TP') }}</strong> (+ {{ __('team.volume_KU') }})
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
|
|
@ -89,10 +89,10 @@
|
|||
<td>
|
||||
@if($TreeCalcBot->business_user->isQualLevel())
|
||||
<span class="badge {{ $TreeCalcBot->business_user->isQualEqualLevel() ? 'badge-outline-success' : 'badge-outline-info' }}">
|
||||
{{ __('team.KP') }} {{ formatNumber($TreeCalcBot->business_user->sales_volume_points_KP_sum, 0) }} /
|
||||
<strong>{{ formatNumber($TreeCalcBot->business_user->qual_user_level['qual_kp'], 0) }}</strong> |
|
||||
{{ __('team.TP') }} {{ formatNumber($TreeCalcBot->business_user->total_qual_pp, 0) }} /
|
||||
<strong>{{ formatNumber($TreeCalcBot->business_user->qual_user_level['qual_pp'], 0) }}</strong>
|
||||
{{ __('team.KP') }} {{ formatNumber($TreeCalcBot->business_user->sales_volume_points_KP_sum) }} /
|
||||
<strong>{{ formatNumber($TreeCalcBot->business_user->qual_user_level['qual_kp']) }}</strong> |
|
||||
{{ __('team.TP') }} {{ formatNumber($TreeCalcBot->business_user->total_qual_pp) }} /
|
||||
<strong>{{ formatNumber($TreeCalcBot->business_user->qual_user_level['qual_pp']) }}</strong>
|
||||
| {{ $TreeCalcBot->business_user->qual_user_level['name'] }}</span>
|
||||
@endif
|
||||
</td>
|
||||
|
|
@ -103,14 +103,14 @@
|
|||
<tr>
|
||||
<td>{{ __('team.payline_points') }}:</td>
|
||||
<td>
|
||||
<strong>{{ formatNumber($TreeCalcBot->business_user->payline_points, 0) }} {{ __('team.PP') }}</strong>
|
||||
<strong>{{ formatNumber($TreeCalcBot->business_user->payline_points) }} {{ __('team.PP') }}</strong>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>{{ __('team.qualification_points') }} :</td>
|
||||
<td>
|
||||
<strong>{{ formatNumber($TreeCalcBot->business_user->payline_points_qual_kp, 0) }} {{ __('team.PP') }}</strong> (+ {{ __('team.volume_KU') }})
|
||||
<strong>{{ formatNumber($TreeCalcBot->business_user->payline_points_qual_kp) }} {{ __('team.PP') }}</strong> (+ {{ __('team.volume_KU') }})
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
|
|
@ -118,10 +118,10 @@
|
|||
<td>
|
||||
@if($TreeCalcBot->business_user->isQualLevel())
|
||||
<span class="badge {{ $TreeCalcBot->business_user->isQualEqualLevel() ? 'badge-outline-success' : 'badge-outline-info' }}">
|
||||
{{ __('team.KU') }} {{ formatNumber($TreeCalcBot->business_user->sales_volume_points_KP_sum, 0) }} /
|
||||
<strong>{{ formatNumber($TreeCalcBot->business_user->qual_user_level['qual_kp'], 0) }}</strong> |
|
||||
{{ __('team.PP') }} {{ formatNumber($TreeCalcBot->business_user->payline_points_qual_kp, 0) }} /
|
||||
<strong>{{ formatNumber($TreeCalcBot->business_user->qual_user_level['qual_pp'], 0) }}</strong>
|
||||
{{ __('team.KU') }} {{ formatNumber($TreeCalcBot->business_user->calc_qual_kp) }} /
|
||||
<strong>{{ formatNumber($TreeCalcBot->business_user->qual_user_level['qual_kp']) }}</strong> |
|
||||
{{ __('team.PP') }} {{ formatNumber($TreeCalcBot->business_user->payline_points_qual_kp) }} /
|
||||
<strong>{{ formatNumber($TreeCalcBot->business_user->qual_user_level['qual_pp']) }}</strong>
|
||||
| {{ \App\Services\TranslationHelper::transUserLevelName($TreeCalcBot->business_user->qual_user_level['name']) }}</span>
|
||||
@endif
|
||||
</td>
|
||||
|
|
@ -131,10 +131,10 @@
|
|||
<td>{{ __('team.next_commission_level') }}:</td>
|
||||
<td>
|
||||
<span class="badge badge-outline-warning-dark">
|
||||
{{ __('team.KU') }} {{ formatNumber($TreeCalcBot->business_user->sales_volume_points_KP_sum, 0) }} /
|
||||
<strong>{{ formatNumber($TreeCalcBot->business_user->qual_user_level_next['qual_kp'], 0) }}</strong> |
|
||||
{{ __('team.PP') }} {{ formatNumber($TreeCalcBot->business_user->payline_points_qual_kp, 0) }} /
|
||||
<strong>{{ formatNumber($TreeCalcBot->business_user->qual_user_level_next['qual_pp'], 0) }}</strong>
|
||||
{{ __('team.KU') }} {{ formatNumber($TreeCalcBot->business_user->qual_user_level_next['_calculated_qual_kp']) }} /
|
||||
<strong>{{ formatNumber($TreeCalcBot->business_user->qual_user_level_next['qual_kp']) }}</strong> |
|
||||
{{ __('team.PP') }} {{ formatNumber($TreeCalcBot->business_user->qual_user_level_next['_calculated_payline_points_qual_kp']) }} /
|
||||
<strong>{{ formatNumber($TreeCalcBot->business_user->qual_user_level_next['qual_pp']) }}</strong>
|
||||
| {{ \App\Services\TranslationHelper::transUserLevelName($TreeCalcBot->business_user->qual_user_level_next['name']) }}</span>
|
||||
</td>
|
||||
</tr>
|
||||
|
|
@ -146,17 +146,17 @@
|
|||
<td>
|
||||
@if($TreeCalcBot->business_user->next_qual_user_level)
|
||||
<span class="badge badge-outline-success">
|
||||
{{ __('team.KU') }} {{ formatNumber($TreeCalcBot->business_user->sales_volume_points_KP_sum, 0) }} /
|
||||
<strong>{{ formatNumber($TreeCalcBot->business_user->next_qual_user_level['qual_kp'], 0) }}</strong> |
|
||||
{{ __('team.TP') }} {{ formatNumber($TreeCalcBot->business_user->payline_points_qual_kp, 0) }} /
|
||||
<strong>{{ formatNumber($TreeCalcBot->business_user->next_qual_user_level['qual_pp'], 0) }}</strong>
|
||||
{{ __('team.KU') }} {{ formatNumber($TreeCalcBot->business_user->next_qual_user_level['_calculated_qual_kp']) }} /
|
||||
<strong>{{ formatNumber($TreeCalcBot->business_user->next_qual_user_level['qual_kp']) }}</strong> |
|
||||
{{ __('team.TP') }} {{ formatNumber($TreeCalcBot->business_user->next_qual_user_level['_calculated_payline_points_qual_kp']) }} /
|
||||
<strong>{{ formatNumber($TreeCalcBot->business_user->next_qual_user_level['qual_pp']) }}</strong>
|
||||
| {{ \App\Services\TranslationHelper::transUserLevelName($TreeCalcBot->business_user->next_qual_user_level['name']) }}</span>
|
||||
@elseif($TreeCalcBot->business_user->next_can_user_level)
|
||||
<span class="badge badge-outline-warning-dark">
|
||||
{{ __('team.KU') }} {{ formatNumber($TreeCalcBot->business_user->sales_volume_points_KP_sum, 0) }} /
|
||||
<strong>{{ formatNumber($TreeCalcBot->business_user->next_can_user_level['qual_kp'], 0) }}</strong> |
|
||||
{{ __('team.TP') }} {{ formatNumber($TreeCalcBot->business_user->payline_points_qual_kp, 0) }} /
|
||||
<strong>{{ formatNumber($TreeCalcBot->business_user->next_can_user_level['qual_pp'], 0) }}</strong>
|
||||
{{ __('team.KU') }} {{ formatNumber($TreeCalcBot->business_user->next_can_user_level['_calculated_qual_kp']) }} /
|
||||
<strong>{{ formatNumber($TreeCalcBot->business_user->next_can_user_level['qual_kp']) }}</strong> |
|
||||
{{ __('team.TP') }} {{ formatNumber($TreeCalcBot->business_user->next_can_user_level['_calculated_payline_points_qual_kp']) }} /
|
||||
<strong>{{ formatNumber($TreeCalcBot->business_user->next_can_user_level['qual_pp']) }}</strong>
|
||||
| {{ \App\Services\TranslationHelper::transUserLevelName($TreeCalcBot->business_user->next_can_user_level['name']) }}</span>
|
||||
@else
|
||||
<span class="badge badge-outline-warning"><i class="fa fa-times"></i></span>
|
||||
|
|
@ -204,13 +204,13 @@
|
|||
{{-- <tr>
|
||||
<td>Team Points:</td>
|
||||
<td>
|
||||
<strong>{{ formatNumber($TreeCalcBot->business_user->total_pp, 0) }} TP</strong>
|
||||
<strong>{{ formatNumber($TreeCalcBot->business_user->total_pp) }} TP</strong>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Qualifikation Team Points:</td>
|
||||
<td>
|
||||
<strong>{{ formatNumber($TreeCalcBot->business_user->payline_points_qual_kp, 0) }} TP</strong> (+ Volumen KP)
|
||||
<strong>{{ formatNumber($TreeCalcBot->business_user->payline_points_qual_kp) }} TP</strong> (+ Volumen KP)
|
||||
</td>
|
||||
</tr>
|
||||
--}}
|
||||
|
|
@ -241,7 +241,7 @@
|
|||
<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, 'points')) }}</td>
|
||||
<td>{{ formatNumber($TreeCalcBot->getKeybyLine($line, 'margin'), 1) }} %</td>
|
||||
<td>{{ formatNumber($TreeCalcBot->getKeybyLine($line, 'commission'), 2) }} €</td>
|
||||
</tr>
|
||||
|
|
@ -250,7 +250,7 @@
|
|||
<tfoot>
|
||||
<tr>
|
||||
<td>{{__('tables.total')}}</td>
|
||||
<td>{{ formatNumber($TreeCalcBot->business_user->total_pp, 0) }}</td>
|
||||
<td>{{ formatNumber($TreeCalcBot->business_user->total_pp) }}</td>
|
||||
<td></td>
|
||||
<td><strong>{{ formatNumber($TreeCalcBot->business_user->commission_pp_total, 2) }} €</strong></td>
|
||||
</tr>
|
||||
|
|
|
|||
|
|
@ -33,7 +33,7 @@
|
|||
@if($userSalesVolume)
|
||||
<tr>
|
||||
<td>{{ $userSalesVolume->date }}</td>
|
||||
<td>{{ $userSalesVolume->points }}</td>
|
||||
<td>{{ $userSalesVolume->getFormattedPoints() }}</td>
|
||||
<td>{{ formatNumber($userSalesVolume->total_net) }} €</td>
|
||||
<td>{{ $userSalesVolume->getStatusType() }}</td>
|
||||
<td>@if($userSalesVolume->user)
|
||||
|
|
@ -57,7 +57,7 @@
|
|||
<div class="form-row">
|
||||
<div class="form-group col-sm-4">
|
||||
<label for="points" class="form-label">{{__('Points')}}</label>
|
||||
{{ Form::text('points', $userSalesVolume->points, array('class'=>'form-control', 'id'=>'points')) }}
|
||||
{{ Form::text('points', $userSalesVolume->getFormattedPoints(), array('class'=>'form-control', 'id'=>'points')) }}
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -6,12 +6,23 @@
|
|||
Business Points
|
||||
|
||||
<div class="float-right">
|
||||
<button type="button" class="btn btn-sm btn-primary" data-toggle="modal" data-target="#modals-load-content"
|
||||
data-id="new"
|
||||
data-action="add_user_sales_volume"
|
||||
data-back="{{url()->current()}}"
|
||||
data-route="{{ route('modal_load') }}"><span class="fa fa-plus-circle"></span> Points hinzufügen
|
||||
</button>
|
||||
<div class="d-flex">
|
||||
<form action="{{ route('admin_business_points_recalculate') }}" method="POST" style="display: none;" id="recalculate-form" onsubmit="return confirmRecalculate();" class="inline-block">
|
||||
@csrf
|
||||
<input type="hidden" name="points_filter_member_id" id="recalc_member_id" value="">
|
||||
<input type="hidden" name="points_filter_month" id="recalc_month" value="">
|
||||
<input type="hidden" name="points_filter_year" id="recalc_year" value="">
|
||||
<button type="submit" class="btn btn-sm btn-warning">
|
||||
<span class="fa fa-refresh"></span> Punkte neu berechnen
|
||||
</button>
|
||||
</form>
|
||||
<button type="button" class="btn btn-sm btn-primary" data-toggle="modal" data-target="#modals-load-content"
|
||||
data-id="new"
|
||||
data-action="add_user_sales_volume"
|
||||
data-back="{{url()->current()}}"
|
||||
data-route="{{ route('modal_load') }}"><span class="fa fa-plus-circle"></span> Points hinzufügen
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</h5>
|
||||
|
||||
|
|
@ -65,6 +76,25 @@
|
|||
</div>
|
||||
{!! Form::close() !!}
|
||||
|
||||
<!-- Summen-Anzeige -->
|
||||
<div id="points-summary" style="display: none;" class="alert alert-info mx-4 mb-3">
|
||||
<h6 class="mb-3"><strong>Monatssummen für ausgewählten Berater</strong></h6>
|
||||
<div class="row">
|
||||
<div class="col-md-4">
|
||||
<strong>KP-Punkte (Eigene):</strong> <span id="sum-kp-points">0</span><br>
|
||||
<small class="text-muted">Eigenumsatz: <span id="sum-kp-net">0</span> €</small>
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
<strong>TP-Punkte (Team):</strong> <span id="sum-tp-points">0</span><br>
|
||||
<small class="text-muted">Shop: <span id="sum-shop-points">0</span> Punkte</small>
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
<strong>Gesamtumsatz:</strong> <span id="sum-total-net">0</span> €<br>
|
||||
<small class="text-muted">Shop-Umsatz: <span id="sum-shop-net">0</span> €</small>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card-datatable table-responsive pt-0">
|
||||
<table class="datatables-style table table-striped table-bordered" id="datatable-invoice">
|
||||
<thead>
|
||||
|
|
@ -94,6 +124,68 @@
|
|||
</div>
|
||||
|
||||
<script>
|
||||
function toggleRecalculateButton() {
|
||||
var memberId = $('select[name=points_filter_member_id]').val();
|
||||
var month = $('select[name=points_filter_month]').val();
|
||||
var year = $('select[name=points_filter_year]').val();
|
||||
|
||||
if (memberId && month && year) {
|
||||
$('#recalc_member_id').val(memberId);
|
||||
$('#recalc_month').val(month);
|
||||
$('#recalc_year').val(year);
|
||||
$('#recalculate-form').show();
|
||||
loadSummary();
|
||||
} else {
|
||||
$('#recalculate-form').hide();
|
||||
$('#points-summary').hide();
|
||||
}
|
||||
}
|
||||
|
||||
function loadSummary() {
|
||||
var memberId = $('select[name=points_filter_member_id]').val();
|
||||
var month = $('select[name=points_filter_month]').val();
|
||||
var year = $('select[name=points_filter_year]').val();
|
||||
|
||||
if (!memberId || !month || !year) {
|
||||
$('#points-summary').hide();
|
||||
return;
|
||||
}
|
||||
|
||||
$.ajax({
|
||||
url: '{!! route('admin_business_points_summary') !!}',
|
||||
type: 'GET',
|
||||
data: {
|
||||
points_filter_member_id: memberId,
|
||||
points_filter_month: month,
|
||||
points_filter_year: year
|
||||
},
|
||||
success: function(response) {
|
||||
if (response.success && response.data) {
|
||||
var data = response.data;
|
||||
$('#sum-kp-points').text(data.total_KP_points.toLocaleString('de-DE'));
|
||||
$('#sum-tp-points').text(data.total_TP_points.toLocaleString('de-DE'));
|
||||
$('#sum-shop-points').text(data.month_shop_points.toLocaleString('de-DE'));
|
||||
$('#sum-kp-net').text(data.month_total_net.toLocaleString('de-DE', {minimumFractionDigits: 2, maximumFractionDigits: 2}));
|
||||
$('#sum-shop-net').text(data.month_shop_total_net.toLocaleString('de-DE', {minimumFractionDigits: 2, maximumFractionDigits: 2}));
|
||||
$('#sum-total-net').text(data.total_net.toLocaleString('de-DE', {minimumFractionDigits: 2, maximumFractionDigits: 2}));
|
||||
$('#points-summary').show();
|
||||
} else {
|
||||
$('#points-summary').hide();
|
||||
}
|
||||
},
|
||||
error: function() {
|
||||
$('#points-summary').hide();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function confirmRecalculate() {
|
||||
var month = $('#recalc_month').val();
|
||||
var year = $('#recalc_year').val();
|
||||
var monthPadded = month.toString().padStart(2, '0');
|
||||
return confirm('Möchten Sie die Punkte für den ausgewählten Berater im Monat ' + monthPadded + '/' + year + ' wirklich neu berechnen?');
|
||||
}
|
||||
|
||||
$( document ).ready(function() {
|
||||
var oTable = $('#datatable-invoice').DataTable({
|
||||
"processing": true,
|
||||
|
|
@ -132,13 +224,27 @@
|
|||
"url": "/js/datatables-{{ \App::getLocale() }}.json"
|
||||
}
|
||||
});
|
||||
|
||||
// Toggle button on filter change
|
||||
$('select.on_change_select').on('change', function(){
|
||||
toggleRecalculateButton();
|
||||
oTable.draw();
|
||||
});
|
||||
|
||||
$('input.on_keyup_input').on('keyup', function(){
|
||||
oTable.draw();
|
||||
});
|
||||
|
||||
// Initial toggle on page load
|
||||
toggleRecalculateButton();
|
||||
|
||||
// Reload summary after table draw completes
|
||||
oTable.on('draw', function() {
|
||||
var memberId = $('select[name=points_filter_member_id]').val();
|
||||
if (memberId) {
|
||||
loadSummary();
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
@endsection
|
||||
|
|
|
|||
|
|
@ -0,0 +1,277 @@
|
|||
<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-default">v2</span>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>{{ __('team.date') }}:</td>
|
||||
<td>
|
||||
<strong>{{ HTMLHelper::getMonth($data['month']) }} {{ $data['year'] }}</strong> |
|
||||
@if($TreeCalcBot->__get('business_user')->isSave())
|
||||
{{ __('team.completed') }}:
|
||||
<span class="badge badge-outline-success"><i class="fa fa-check-circle"></i></span>
|
||||
{{-- @if(Auth::user()->isSySAdmin())
|
||||
<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
|
||||
{{ __('team.open') }}:
|
||||
<span class="badge badge-outline-warning-dark"><i class="fa fa-history"></i></span>
|
||||
|
||||
@endif
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>{{ __('team.career_level') }}:</td>
|
||||
<td>
|
||||
{{ \App\Services\TranslationHelper::transUserLevelName($TreeCalcBot->__get('business_user')->user_level_name) }}
|
||||
<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) }} €</strong>
|
||||
({{ __('team.own') }}: {{ formatNumber($TreeCalcBot->__get('business_user')->sales_volume_total) }} € | {{ __('team.shop') }}: {{ formatNumber($TreeCalcBot->__get('business_user')->sales_volume_total_shop) }} €)
|
||||
</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) }})
|
||||
<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)
|
||||
<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') }})
|
||||
</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')->calc_qual_kp, 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')->qual_user_level_next['_calculated_qual_kp'], 0) }} /
|
||||
<strong>{{ formatNumber($TreeCalcBot->__get('business_user')->qual_user_level_next['qual_kp'], 0) }}</strong> |
|
||||
{{ __('team.PP') }} {{ formatNumber($TreeCalcBot->__get('business_user')->qual_user_level_next['_calculated_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')->next_qual_user_level['_calculated_qual_kp'], 0) }} /
|
||||
<strong>{{ formatNumber($TreeCalcBot->__get('business_user')->next_qual_user_level['qual_kp'], 0) }}</strong> |
|
||||
{{ __('team.TP') }} {{ formatNumber($TreeCalcBot->__get('business_user')->next_qual_user_level['_calculated_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')->next_can_user_level['_calculated_qual_kp'], 0) }} /
|
||||
<strong>{{ formatNumber($TreeCalcBot->__get('business_user')->next_can_user_level['qual_kp'], 0) }}</strong> |
|
||||
{{ __('team.TP') }} {{ formatNumber($TreeCalcBot->__get('business_user')->next_can_user_level['_calculated_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) }} €</strong></span>
|
||||
|
||||
({{ __('team.sales_store_net') }}: {{ formatNumber($TreeCalcBot->__get('business_user')->sales_volume_total_shop) }} € / {{ $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) }} €</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) }} €</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) }} €</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()) }} €</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')}} €</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'), 2) }} %</td>
|
||||
<td>{{ formatNumber($TreeCalcBot->getKeybyLine($line, 'commission'), 2) }} €</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) }} €</strong></td>
|
||||
</tr>
|
||||
|
||||
</tfoot>
|
||||
</table>
|
||||
</div>
|
||||
|
|
@ -38,7 +38,7 @@
|
|||
<td>{{ __('team.career_level') }}:</td>
|
||||
<td>
|
||||
{{ \App\Services\TranslationHelper::transUserLevelName($TreeCalcBot->__get('business_user')->user_level_name) }}
|
||||
<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>
|
||||
<span class="badge badge-outline-success"> {{ __('team.KU') }} {{ $TreeCalcBot->__get('business_user')->qual_kp }} / {{ __('team.PP') }} {{ formatNumber($TreeCalcBot->__get('business_user')->qual_pp) }}</span>
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
|
|
@ -77,12 +77,12 @@
|
|||
<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) }})
|
||||
<strong>{{ formatNumber($TreeCalcBot->__get('business_user')->sales_volume_points_KP_sum) }} {{ __('team.KU') }}</strong>
|
||||
({{ __('team.own') }}: {{ formatNumber($TreeCalcBot->__get('business_user')->sales_volume_KP_points) }} | {{ __('team.shop') }}: {{ formatNumber($TreeCalcBot->__get('business_user')->sales_volume_points_shop) }})
|
||||
<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)
|
||||
<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) }}
|
||||
Rest-KU: {{ formatNumber($TreeCalcBot->__get('business_user')->getRestQualKP()) }}
|
||||
</span>
|
||||
@endif
|
||||
</td>
|
||||
|
|
@ -91,7 +91,7 @@
|
|||
<tr>
|
||||
<td>{{ __('team.qualification_points') }}:</td>
|
||||
<td>
|
||||
<strong>{{ formatNumber($TreeCalcBot->__get('business_user')->total_qual_pp, 0) }} {{ __('team.TP') }}</strong> (+ {{ __('team.volume_KU') }})
|
||||
<strong>{{ formatNumber($TreeCalcBot->__get('business_user')->total_qual_pp) }} {{ __('team.TP') }}</strong> (+ {{ __('team.volume_KU') }})
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
|
|
@ -99,10 +99,10 @@
|
|||
<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>
|
||||
{{ __('team.KP') }} {{ formatNumber($TreeCalcBot->__get('business_user')->sales_volume_points_KP_sum) }} /
|
||||
<strong>{{ formatNumber($TreeCalcBot->__get('business_user')->qual_user_level['qual_kp']) }}</strong> |
|
||||
{{ __('team.TP') }} {{ formatNumber($TreeCalcBot->__get('business_user')->total_qual_pp) }} /
|
||||
<strong>{{ formatNumber($TreeCalcBot->__get('business_user')->qual_user_level['qual_pp']) }}</strong>
|
||||
| {{ $TreeCalcBot->__get('business_user')->qual_user_level['name'] }}</span>
|
||||
@endif
|
||||
</td>
|
||||
|
|
@ -113,18 +113,18 @@
|
|||
<tr>
|
||||
<td>{{ __('team.payline_points') }}:</td>
|
||||
<td>
|
||||
<strong>{{ formatNumber($TreeCalcBot->__get('business_user')->payline_points, 0) }} {{ __('team.PP') }}</strong>
|
||||
<strong>{{ formatNumber($TreeCalcBot->__get('business_user')->payline_points) }} {{ __('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>
|
||||
<strong>{{ formatNumber($TreeCalcBot->__get('business_user')->payline_points_qual_kp) }} {{ __('team.PP') }}</strong>
|
||||
<small class="text-muted">
|
||||
({{ formatNumber($TreeCalcBot->__get('business_user')->payline_points ?? 0, 0) }} Payline
|
||||
({{ formatNumber($TreeCalcBot->__get('business_user')->payline_points ?? 0) }} Payline
|
||||
@if($TreeCalcBot->__get('business_user')->getRestQualKP() > 0)
|
||||
+ {{ formatNumber($TreeCalcBot->__get('business_user')->getRestQualKP(), 0) }} Rest-KU
|
||||
+ {{ formatNumber($TreeCalcBot->__get('business_user')->getRestQualKP()) }} Rest-KU
|
||||
@endif
|
||||
)
|
||||
</small>
|
||||
|
|
@ -135,10 +135,10 @@
|
|||
<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>
|
||||
{{ __('team.KU') }} {{ formatNumber($TreeCalcBot->__get('business_user')->calc_qual_kp) }} /
|
||||
<strong>{{ formatNumber($TreeCalcBot->__get('business_user')->qual_user_level['qual_kp']) }}</strong> |
|
||||
{{ __('team.PP') }} {{ formatNumber($TreeCalcBot->__get('business_user')->payline_points_qual_kp) }} /
|
||||
<strong>{{ formatNumber($TreeCalcBot->__get('business_user')->qual_user_level['qual_pp']) }}</strong>
|
||||
| {{ \App\Services\TranslationHelper::transUserLevelName($TreeCalcBot->__get('business_user')->qual_user_level['name']) }}</span>
|
||||
@endif
|
||||
</td>
|
||||
|
|
@ -148,32 +148,32 @@
|
|||
<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>
|
||||
{{ __('team.KU') }} {{ formatNumber($TreeCalcBot->__get('business_user')->qual_user_level_next['_calculated_qual_kp']) }} /
|
||||
<strong>{{ formatNumber($TreeCalcBot->__get('business_user')->qual_user_level_next['qual_kp']) }}</strong> |
|
||||
{{ __('team.PP') }} {{ formatNumber($TreeCalcBot->__get('business_user')->qual_user_level_next['_calculated_payline_points_qual_kp']) }} /
|
||||
<strong>{{ formatNumber($TreeCalcBot->__get('business_user')->qual_user_level_next['qual_pp']) }}</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>
|
||||
{{ __('team.KU') }} {{ formatNumber($TreeCalcBot->__get('business_user')->next_qual_user_level['_calculated_qual_kp']) }} /
|
||||
<strong>{{ formatNumber($TreeCalcBot->__get('business_user')->next_qual_user_level['qual_kp']) }}</strong> |
|
||||
{{ __('team.TP') }} {{ formatNumber($TreeCalcBot->__get('business_user')->next_qual_user_level['_calculated_payline_points_qual_kp']) }} /
|
||||
<strong>{{ formatNumber($TreeCalcBot->__get('business_user')->next_qual_user_level['qual_pp']) }}</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>
|
||||
{{ __('team.KU') }} {{ formatNumber($TreeCalcBot->__get('business_user')->next_can_user_level['_calculated_qual_kp']) }} /
|
||||
<strong>{{ formatNumber($TreeCalcBot->__get('business_user')->next_can_user_level['qual_kp']) }}</strong> |
|
||||
{{ __('team.TP') }} {{ formatNumber($TreeCalcBot->__get('business_user')->next_can_user_level['_calculated_payline_points_qual_kp']) }} /
|
||||
<strong>{{ formatNumber($TreeCalcBot->__get('business_user')->next_can_user_level['qual_pp']) }}</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>
|
||||
|
|
@ -221,13 +221,13 @@
|
|||
{{-- <tr>
|
||||
<td>Team Points:</td>
|
||||
<td>
|
||||
<strong>{{ formatNumber($TreeCalcBot->__get('business_user')->total_pp, 0) }} TP</strong>
|
||||
<strong>{{ formatNumber($TreeCalcBot->__get('business_user')->total_pp) }} 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)
|
||||
<strong>{{ formatNumber($TreeCalcBot->__get('business_user')->payline_points_qual_kp) }} TP</strong> (+ Volumen KP)
|
||||
</td>
|
||||
</tr>
|
||||
--}}
|
||||
|
|
@ -258,8 +258,8 @@
|
|||
<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, 'points')) }}</td>
|
||||
<td>{{ formatNumber($TreeCalcBot->getKeybyLine($line, 'margin'), 2) }} %</td>
|
||||
<td>{{ formatNumber($TreeCalcBot->getKeybyLine($line, 'commission'), 2) }} €</td>
|
||||
</tr>
|
||||
@endforeach
|
||||
|
|
@ -267,11 +267,85 @@
|
|||
<tfoot>
|
||||
<tr>
|
||||
<td>{{__('tables.total')}}</td>
|
||||
<td>{{ formatNumber($TreeCalcBot->__get('business_user')->total_pp, 0) }}</td>
|
||||
<td>{{ formatNumber($TreeCalcBot->__get('business_user')->total_pp) }}</td>
|
||||
<td></td>
|
||||
<td><strong>{{ formatNumber($TreeCalcBot->__get('business_user')->commission_pp_total, 2) }} €</strong></td>
|
||||
</tr>
|
||||
|
||||
</tfoot>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@if(!empty($matrix = $TreeCalcBot->__get('business_user')->getGrowthBonusMatrix()))
|
||||
@php
|
||||
// Maximale Tiefe für Spalten ermitteln (für Matrix-Header)
|
||||
$maxLevel = 0;
|
||||
foreach($matrix as $leg) {
|
||||
if(!empty($leg['levels'])) {
|
||||
$maxKey = max(array_keys($leg['levels']));
|
||||
if($maxKey > $maxLevel) $maxLevel = $maxKey;
|
||||
}
|
||||
}
|
||||
// Begrenze Anzeige auf sinnvolle Breite (z.B. 20 Ebenen)
|
||||
$maxLevel = min($maxLevel, 20);
|
||||
@endphp
|
||||
|
||||
<div class="table-responsive mt-4">
|
||||
<h5 class="font-weight-bold mb-2">{{ __('team.commission_WB') ?? '(Tiefenbonus)' }}</h5>
|
||||
<table class="table card-table m-0 table-bordered table-sm text-center">
|
||||
<thead class="thead-light">
|
||||
<tr>
|
||||
<th style="width: 200px" class="text-left align-middle">Partner</th>
|
||||
@for($i = 1; $i <= $maxLevel; $i++)
|
||||
<th style="min-width: 80px">L{{ $i }}</th>
|
||||
@endfor
|
||||
<th class="text-right align-middle" style="width: 100px; border-left: 2px solid #dee2e6">Total</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@foreach($matrix as $leg)
|
||||
<tr>
|
||||
<td class="text-left align-middle">
|
||||
<div class="font-weight-bold text-truncate" style="max-width: 180px;" title="{{ $leg['user']['name'] }}">
|
||||
{{ $leg['user']['name'] }}
|
||||
</div>
|
||||
<div class="small text-muted">
|
||||
ID: {{ $leg['user']['id'] }} | {{ $leg['user']['level'] }}
|
||||
</div>
|
||||
</td>
|
||||
@for($i = 1; $i <= $maxLevel; $i++)
|
||||
@php $levelData = $leg['levels'][$i] ?? null; @endphp
|
||||
<td class="align-middle position-relative">
|
||||
@if($levelData)
|
||||
@if($levelData['commission'] > 0)
|
||||
<div class="font-weight-bold text-success" style="font-size: 0.9em">
|
||||
{{ formatNumber($levelData['commission'], 2) }}€
|
||||
</div>
|
||||
@else
|
||||
<div class="text-danger" style="font-size: 0.8em">0 €</div>
|
||||
@endif
|
||||
<div class="small text-muted" style="font-size: 0.75em">
|
||||
{{ formatNumber($levelData['volume']) }} / <span class="text-danger">{{ $levelData['details'][0]['pct'] ?? 0 }}%</span>
|
||||
</div>
|
||||
@if(!empty($levelData['has_blocker']))
|
||||
<div class="position-absolute" style="top: 0; right: 0; font-size: 0.6em;" title="Blocker: {{ $levelData['blocker_name'] }}">
|
||||
<i class="fa fa-shield-alt text-warning"></i>
|
||||
</div>
|
||||
@endif
|
||||
@else
|
||||
<span class="text-muted">-</span>
|
||||
@endif
|
||||
</td>
|
||||
@endfor
|
||||
<td class="text-right align-middle font-weight-bold" style="border-left: 2px solid #dee2e6">
|
||||
{{ formatNumber($leg['total_commission'], 2) }} €
|
||||
</td>
|
||||
</tr>
|
||||
@endforeach
|
||||
</tbody>
|
||||
</table>
|
||||
<div class="small text-muted mt-1">
|
||||
{{ __('team.growth_bonus_details_description') }}
|
||||
</div>
|
||||
</div>
|
||||
@endif
|
||||
|
|
@ -27,6 +27,10 @@
|
|||
</div>
|
||||
|
||||
<div class="form-row">
|
||||
<div class="form-group col-sm-8">
|
||||
<label class="form-label" for="slug">{{ __('URL') }}</label>
|
||||
{{ Form::text('slug', $category->slug, array('placeholder'=>__('URL'), 'class'=>'form-control', 'id'=>'slug')) }}
|
||||
</div>
|
||||
{{--<div class="form-group col-8">
|
||||
<label for="parent_id" class="form-label">{{__('Hauptkategorie')}}</label>
|
||||
<select class="selectpicker" data-style="btn-default" name="">
|
||||
|
|
@ -39,6 +43,9 @@
|
|||
{{ Form::text('pos', $category->pos, array('placeholder'=>__('pos'), 'class'=>'form-control', 'id'=>'pos')) }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-row ml-1">
|
||||
URL: <a href="https://mivita.shop/produkte/{{ ($category->slug) }}" target="_blank">https://mivita.shop/produkte/{{ ($category->slug) }}</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -11,9 +11,9 @@
|
|||
<tr>
|
||||
<th style="max-width: 60px;"> </th>
|
||||
<th>{{__('Pos')}}</th>
|
||||
<th>{{__('Name')}}</th>
|
||||
<th>{{__('Kategorie')}}</th>
|
||||
{{--<th>{{__('Kategorie')}}</th>--}}
|
||||
<th>{{__('Headline')}}</th>
|
||||
<th>{{__('URL')}}</th>
|
||||
<th>{{__('tables.products')}}</th>
|
||||
<th>{{ __('activ') }}</th>
|
||||
|
||||
|
|
@ -34,6 +34,7 @@
|
|||
<td>@if($value->parent) {{ $value->parent->name }} @else {{ $value->name }} @endif</td>
|
||||
{{-- <td>@if($value->parent) {{ $value->name }} @else - @endif</td>--}}
|
||||
<td>{{ $value->headline }}</td>
|
||||
<td>{{ $value->slug }}</td>
|
||||
<td>{{ $value->product_categories->count() }}</td>
|
||||
<td>{{ $value->productCategoriesCountActive() }}</td>
|
||||
|
||||
|
|
|
|||
|
|
@ -109,6 +109,13 @@
|
|||
<div class="text-muted small">{{ __('Phone') }}</div>
|
||||
{{ $shopping_user->shipping_phone }}
|
||||
</div>
|
||||
@if($shopping_user->shipping_postnumber)
|
||||
<div class="col-md-3 mb-3">
|
||||
<div class="text-muted small">{{ __('payment.dhl_postnumber') }}</div>
|
||||
<span class="badge badge-info">{{ $shopping_user->shipping_postnumber }}</span>
|
||||
<small class="d-block text-muted">{{ __('payment.packstation_info') }}</small>
|
||||
</div>
|
||||
@endif
|
||||
</div>
|
||||
@endif
|
||||
</div>
|
||||
|
|
@ -21,6 +21,7 @@
|
|||
</div>
|
||||
<div class="col-md-3 mb-3">
|
||||
<a class="btn btn-sm btn-secondary mt-2" href="{{route('admin_customer_edit', [$shopping_user->id])}}">{{ __('customer.edit_customer_data') }}</a>
|
||||
<a class="btn btn-sm btn-danger mt-2" href="{{route('admin_customer_delete', [$shopping_user->id])}}" onclick="return confirm('{{ __('customer.delete_customer_confirm') }}')">{{ __('customer.delete_customer') }}</a>
|
||||
</div>
|
||||
</div>
|
||||
@else
|
||||
|
|
@ -201,7 +202,7 @@
|
|||
<small>
|
||||
<span class="text-muted">{{ __('order.content') }}: </span> {{ $shopping_order_item->product->contents }}<br>
|
||||
<span class="text-muted">{{ __('order.weight') }}: </span> {{ $shopping_order_item->product->weight }} g<br>
|
||||
<span class="text-muted">{{ __('order.points') }}: </span> {{ $shopping_order_item->product->points }}
|
||||
<span class="text-muted">{{ __('order.points') }}: </span> {{ $shopping_order_item->product->getFormattedPoints() }}
|
||||
</small>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -310,10 +311,17 @@
|
|||
@forelse($shopping_user->getAllOrdersByMember() as $shopping_order)
|
||||
<tr>
|
||||
<td>
|
||||
@if($isAdmin)
|
||||
<a href="{{ route('admin_sales_customers_detail', $shopping_order->id) }}"
|
||||
class="btn icon-btn btn-sm btn-primary">
|
||||
<span class="fa fa-edit"></span>
|
||||
</a>
|
||||
@else
|
||||
<a href="{{ route('user_shop_order_detail', $shopping_order->id) }}"
|
||||
class="btn icon-btn btn-sm btn-primary">
|
||||
<span class="fa fa-edit"></span>
|
||||
</a>
|
||||
@endif
|
||||
</td>
|
||||
<td>{{ $shopping_order->created_at->format('d.m.Y') }}</td>
|
||||
<td>
|
||||
|
|
|
|||
|
|
@ -219,6 +219,30 @@
|
|||
{{ Form::text('shipping_phone', $shopping_user->shipping_phone, array('placeholder'=>__('Phone'), 'class'=>'form-control', 'id'=>'shipping_phone', 'tabindex' => 26)) }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-row">
|
||||
<div class="form-group col-md-12">
|
||||
<label class="form-label" for="shipping_postnumber">{{ __('payment.dhl_postnumber') }} <small class="text-muted">({{ __('optional') }})</small></label>
|
||||
{{ Form::text('shipping_postnumber', $shopping_user->shipping_postnumber, array('placeholder'=>'12345678', 'class'=>'form-control', 'id'=>'shipping_postnumber', 'maxlength'=>'20', 'tabindex' => 27)) }}
|
||||
<small class="form-text text-muted">{{ __('payment.packstation_info') }}</small>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{-- Alert-Box für Packstation-Hinweis --}}
|
||||
<div class="alert alert-warning alert-dismissible fade show" id="packstation-alert" style="display: @if($shopping_user->shipping_postnumber) block @else none @endif;">
|
||||
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
|
||||
<span aria-hidden="true">×</span>
|
||||
</button>
|
||||
<h6 class="alert-heading"><i class="fa fa-exclamation-triangle"></i> <strong>{{ __('payment.packstation_alert_title') }}</strong></h6>
|
||||
<hr>
|
||||
<p class="mb-2"><strong>{{ __('payment.packstation_alert_intro') }}</strong></p>
|
||||
<ul class="mb-2 pl-3">
|
||||
<li><strong>{{ __('Street') }} / {{ __('House number') }}:</strong> {{ __('payment.packstation_alert_street') }} <em>({{ __('payment.packstation_alert_street_example') }})</em></li>
|
||||
<li><strong>{{ __('Postcode') }} / {{ __('City') }}:</strong> {{ __('payment.packstation_alert_location') }} <em>({{ __('payment.packstation_alert_not_home') }})</em></li>
|
||||
</ul>
|
||||
<p class="mb-0 small text-muted">
|
||||
<i class="fa fa-info-circle"></i> {{ __('payment.packstation_alert_footer') }}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="custom-control custom-checkbox m-0">
|
||||
|
|
@ -355,6 +379,24 @@
|
|||
});
|
||||
});
|
||||
|
||||
// Packstation Alert show|hide
|
||||
function togglePackstationAlert() {
|
||||
var postnumber = $('#shipping_postnumber').val();
|
||||
if (postnumber && postnumber.trim() !== '') {
|
||||
$('#packstation-alert').slideDown(300);
|
||||
} else {
|
||||
$('#packstation-alert').slideUp(300);
|
||||
}
|
||||
}
|
||||
|
||||
// Bei Eingabe im Postnummer-Feld
|
||||
$('#shipping_postnumber').on('input', function() {
|
||||
togglePackstationAlert();
|
||||
});
|
||||
|
||||
// Bei Seitenladen prüfen
|
||||
togglePackstationAlert();
|
||||
|
||||
$.extend( $.validator.messages, {
|
||||
required: "{{__('account.validator_required')}}",
|
||||
maxlength: $.validator.format( "{{__('account.validator_maxlength')}}" ),
|
||||
|
|
|
|||
|
|
@ -205,6 +205,16 @@
|
|||
@endsection
|
||||
|
||||
@section('scripts')
|
||||
<style>
|
||||
/* Highlight return shipments */
|
||||
#dhl-shipments-table tbody tr.return-shipment {
|
||||
background-color: rgba(255, 193, 7, 0.08) !important;
|
||||
border-left: 3px solid #ffc107;
|
||||
}
|
||||
#dhl-shipments-table tbody tr.return-shipment:hover {
|
||||
background-color: rgba(255, 193, 7, 0.15) !important;
|
||||
}
|
||||
</style>
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
// DataTable initialization
|
||||
|
|
@ -245,6 +255,7 @@ $(document).ready(function() {
|
|||
// Re-initialize tooltips on each table draw
|
||||
drawCallback: function () {
|
||||
$('[data-toggle="tooltip"]').tooltip();
|
||||
// Row classes are now added automatically by DataTables via DT_RowClass
|
||||
}
|
||||
});
|
||||
|
||||
|
|
@ -414,11 +425,15 @@ $(document).ready(function() {
|
|||
|
||||
$('#dhl-shipments-table').on('click', '.create-return-btn', function() {
|
||||
var shipmentId = $(this).data('shipment-id');
|
||||
var btn = $(this);
|
||||
|
||||
if (!confirm('Möchten Sie ein Retourenlabel für diese Sendung erstellen?')) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Disable button to prevent double-click
|
||||
btn.prop('disabled', true).html('<i class="fas fa-spinner fa-spin"></i>');
|
||||
|
||||
$.ajax({
|
||||
url: `/admin/dhl/shipment/${shipmentId}/return-label`,
|
||||
method: 'POST',
|
||||
|
|
@ -428,20 +443,25 @@ $(document).ready(function() {
|
|||
success: function(response) {
|
||||
if (response.success) {
|
||||
showAlert('success', response.message);
|
||||
location.reload();
|
||||
setTimeout(function() {
|
||||
location.reload();
|
||||
}, 1500);
|
||||
} else {
|
||||
showAlert('error', response.message);
|
||||
btn.prop('disabled', false).html('<i class="fas fa-undo"></i>');
|
||||
}
|
||||
},
|
||||
error: function(xhr) {
|
||||
showAlert('error', 'Fehler beim Erstellen des Retourenlabels.');
|
||||
var errorMsg = xhr.responseJSON ? xhr.responseJSON.message : 'Fehler beim Erstellen des Retourenlabels.';
|
||||
showAlert('error', errorMsg);
|
||||
btn.prop('disabled', false).html('<i class="fas fa-undo"></i>');
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
$('#dhl-shipments-table').on('click', '.update-tracking-btn', function() {
|
||||
var shipmentId = $(this).data('shipment-id');
|
||||
|
||||
|
||||
$.ajax({
|
||||
url: `/admin/dhl/shipment/${shipmentId}/update-tracking`,
|
||||
method: 'POST',
|
||||
|
|
@ -463,6 +483,114 @@ $(document).ready(function() {
|
|||
}
|
||||
});
|
||||
});
|
||||
|
||||
// Send tracking email button
|
||||
$('#dhl-shipments-table').on('click', '.send-tracking-email-btn', function() {
|
||||
var shipmentId = $(this).data('shipment-id');
|
||||
var btn = $(this);
|
||||
|
||||
if (!confirm('Möchten Sie die Tracking-E-Mail an den Kunden senden?')) {
|
||||
return;
|
||||
}
|
||||
|
||||
btn.prop('disabled', true).html('<i class="fas fa-spinner fa-spin"></i>');
|
||||
|
||||
$.ajax({
|
||||
url: `/admin/dhl/shipment/${shipmentId}/send-tracking-email`,
|
||||
method: 'POST',
|
||||
data: {
|
||||
_token: '{{ csrf_token() }}'
|
||||
},
|
||||
success: function(response) {
|
||||
if (response.success) {
|
||||
showAlert('success', response.message);
|
||||
btn.removeClass('btn-outline-info').addClass('btn-success');
|
||||
btn.html('<i class="fas fa-envelope"></i>');
|
||||
btn.attr('title', 'E-Mail gesendet: ' + response.sent_at);
|
||||
} else {
|
||||
showAlert('error', response.message);
|
||||
btn.prop('disabled', false).html('<i class="fas fa-envelope"></i>');
|
||||
}
|
||||
},
|
||||
error: function(xhr) {
|
||||
var errorMsg = xhr.responseJSON ? xhr.responseJSON.message : 'Fehler beim Senden der E-Mail.';
|
||||
showAlert('error', errorMsg);
|
||||
btn.prop('disabled', false).html('<i class="fas fa-envelope"></i>');
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
// Cancel shipment button
|
||||
$('#dhl-shipments-table').on('click', '.cancel-shipment-btn', function() {
|
||||
var shipmentId = $(this).data('shipment-id');
|
||||
var btn = $(this);
|
||||
|
||||
if (!confirm('Möchten Sie diese Sendung wirklich stornieren?\n\nDas Label wird bei DHL ungültig und kann nicht mehr verwendet werden.')) {
|
||||
return;
|
||||
}
|
||||
|
||||
btn.prop('disabled', true).html('<i class="fas fa-spinner fa-spin"></i>');
|
||||
|
||||
$.ajax({
|
||||
url: `/admin/dhl/shipment/${shipmentId}/cancel`,
|
||||
method: 'DELETE',
|
||||
data: {
|
||||
_token: '{{ csrf_token() }}'
|
||||
},
|
||||
success: function(response) {
|
||||
if (response.success) {
|
||||
showAlert('success', response.message || 'Sendung wird storniert...');
|
||||
setTimeout(function() {
|
||||
table.ajax.reload();
|
||||
}, 2000);
|
||||
} else {
|
||||
showAlert('error', response.message);
|
||||
btn.prop('disabled', false).html('<i class="fas fa-ban"></i>');
|
||||
}
|
||||
},
|
||||
error: function(xhr) {
|
||||
var errorMsg = xhr.responseJSON ? xhr.responseJSON.message : 'Fehler beim Stornieren der Sendung.';
|
||||
showAlert('error', errorMsg);
|
||||
btn.prop('disabled', false).html('<i class="fas fa-ban"></i>');
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
// Create return label button
|
||||
$('#dhl-shipments-table').on('click', '.create-return-btn', function() {
|
||||
var shipmentId = $(this).data('shipment-id');
|
||||
var btn = $(this);
|
||||
|
||||
if (!confirm('Möchten Sie ein Retourenlabel für diese Sendung erstellen?')) {
|
||||
return;
|
||||
}
|
||||
|
||||
btn.prop('disabled', true).html('<i class="fas fa-spinner fa-spin"></i>');
|
||||
|
||||
$.ajax({
|
||||
url: `/admin/dhl/shipment/${shipmentId}/return-label`,
|
||||
method: 'POST',
|
||||
data: {
|
||||
_token: '{{ csrf_token() }}'
|
||||
},
|
||||
success: function(response) {
|
||||
if (response.success) {
|
||||
showAlert('success', response.message || 'Retourenlabel wird erstellt...');
|
||||
setTimeout(function() {
|
||||
table.ajax.reload();
|
||||
}, 2000);
|
||||
} else {
|
||||
showAlert('error', response.message);
|
||||
btn.prop('disabled', false).html('<i class="fas fa-undo"></i>');
|
||||
}
|
||||
},
|
||||
error: function(xhr) {
|
||||
var errorMsg = xhr.responseJSON ? xhr.responseJSON.message : 'Fehler beim Erstellen des Retourenlabels.';
|
||||
showAlert('error', errorMsg);
|
||||
btn.prop('disabled', false).html('<i class="fas fa-undo"></i>');
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
// Remove old auto-submit logic
|
||||
/*
|
||||
|
|
@ -474,6 +602,9 @@ $(document).ready(function() {
|
|||
|
||||
// Alert helper function
|
||||
function showAlert(type, message) {
|
||||
// Remove any existing alerts first to prevent duplicates
|
||||
$('.alert.alert-dismissible').remove();
|
||||
|
||||
var alertClass = type === 'success' ? 'alert-success' : 'alert-danger';
|
||||
var alertHtml = `
|
||||
<div class="alert ${alertClass} alert-dismissible fade show" role="alert">
|
||||
|
|
|
|||
|
|
@ -190,6 +190,41 @@
|
|||
value="{{ $shippingAddress['phone'] ?? '' }}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="form-group">
|
||||
<label for="shipping_email">E-Mail <span class="text-danger">*</span></label>
|
||||
<input type="email"
|
||||
class="form-control {{ empty($shippingAddress['email']) ? 'border-warning' : '' }}"
|
||||
name="shipping_email"
|
||||
id="shipping_email"
|
||||
value="{{ $shippingAddress['email'] ?? $order->shopping_user->email ?? '' }}"
|
||||
required>
|
||||
<small class="form-text text-muted">
|
||||
Wird für DHL Benachrichtigungen und Tracking-E-Mails verwendet.
|
||||
</small>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{-- DHL Packstation/Paketbox --}}
|
||||
<div class="col-md-12 mt-2">
|
||||
<hr>
|
||||
<h6 class="text-muted mb-2">
|
||||
<i class="fas fa-cube"></i>
|
||||
Packstation / Paketbox
|
||||
<small class="text-muted">(nur wenn zutreffend)</small>
|
||||
</h6>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="form-group">
|
||||
<label for="shipping_postnumber">DHL Postnummer <small class="text-muted">(optional)</small></label>
|
||||
<input type="text" class="form-control" name="shipping_postnumber" id="shipping_postnumber"
|
||||
value="{{ $shippingAddress['postnumber'] ?? '' }}" maxlength="20"
|
||||
placeholder="z.B. 12345678">
|
||||
<small class="form-text text-muted">
|
||||
Nur bei Lieferung an Packstation/Paketbox. Im Feld "Straße" dann "Packstation XXX" eintragen.
|
||||
</small>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -147,6 +147,14 @@
|
|||
</a>
|
||||
@endif
|
||||
|
||||
@if($shipment['can_send_email'] ?? false)
|
||||
<button type="button"
|
||||
class="btn btn-info btn-sm mb-2 send-tracking-email-modal-btn"
|
||||
data-shipment-id="{{ $shipment['id'] }}">
|
||||
<i class="fas fa-envelope"></i> Tracking-E-Mail senden
|
||||
</button>
|
||||
@endif
|
||||
|
||||
<a href="{{ route('admin.dhl.show', $shipment['id']) }}"
|
||||
class="btn btn-outline-primary btn-sm mb-2" target="_blank">
|
||||
<i class="fas fa-eye"></i> Details anzeigen
|
||||
|
|
@ -302,5 +310,42 @@ window.showAlert = function(type, message) {
|
|||
// Initialize modal
|
||||
$(document).ready(function() {
|
||||
// Modal is ready for interaction
|
||||
|
||||
// Tracking E-Mail senden Button
|
||||
$(document).on('click', '.send-tracking-email-modal-btn', function() {
|
||||
var shipmentId = $(this).data('shipment-id');
|
||||
var btn = $(this);
|
||||
|
||||
if (!confirm('Tracking-E-Mail an den Kunden senden?')) {
|
||||
return;
|
||||
}
|
||||
|
||||
btn.prop('disabled', true).html('<i class="fas fa-spinner fa-spin"></i> Wird gesendet...');
|
||||
|
||||
$.ajax({
|
||||
url: `/admin/dhl/shipment/${shipmentId}/send-tracking-email`,
|
||||
method: 'POST',
|
||||
data: {
|
||||
_token: '{{ csrf_token() }}'
|
||||
},
|
||||
success: function(response) {
|
||||
if (response.success) {
|
||||
showAlert('success', response.message);
|
||||
btn.removeClass('btn-info').addClass('btn-success')
|
||||
.html('<i class="fas fa-check"></i> E-Mail gesendet');
|
||||
|
||||
|
||||
} else {
|
||||
showAlert('error', response.message);
|
||||
btn.prop('disabled', false).html('<i class="fas fa-envelope"></i> Tracking-E-Mail senden');
|
||||
}
|
||||
},
|
||||
error: function(xhr) {
|
||||
var errorMsg = xhr.responseJSON ? xhr.responseJSON.message : 'Fehler beim Senden der E-Mail.';
|
||||
showAlert('error', errorMsg);
|
||||
btn.prop('disabled', false).html('<i class="fas fa-envelope"></i> Tracking-E-Mail senden');
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
|
|
|||
|
|
@ -4,11 +4,11 @@
|
|||
|
||||
<div class="d-flex justify-content-between align-items-center py-2 mb-4">
|
||||
<h4 class="font-weight-bold mb-0">
|
||||
<i class="fas fa-box text-primary"></i>
|
||||
<i class="fas fa-box {{ $shipment->type == 'return' ? 'text-warning' : 'text-primary' }}"></i>
|
||||
DHL Sendung #{{ $shipment->id }}
|
||||
@if($shipment->type == 'return')
|
||||
<span class="badge badge-info ml-2">
|
||||
<i class="fas fa-undo"></i> Retoure
|
||||
<span class="badge badge-warning ml-2" style="font-size: 1rem; font-weight: 700; padding: 0.5rem 1rem;">
|
||||
<i class="fas fa-undo"></i> RETOURE
|
||||
</span>
|
||||
@endif
|
||||
</h4>
|
||||
|
|
@ -157,17 +157,8 @@
|
|||
<i class="fas fa-download"></i> Label herunterladen
|
||||
</a>
|
||||
@endif
|
||||
{{-- Todo: Add tracking button
|
||||
@if($shipment->canCancel())
|
||||
<button type="button"
|
||||
class="btn btn-warning mr-2"
|
||||
id="cancel-shipment-btn"
|
||||
data-shipment-id="{{ $shipment->id }}">
|
||||
<i class="fas fa-ban"></i> Sendung stornieren
|
||||
</button>
|
||||
@endif
|
||||
|
||||
@if($shipment->type == 'outbound' && !$shipment->relatedShipment)
|
||||
@if($shipment->type == 'outbound' && !$shipment->returns->count())
|
||||
<button type="button"
|
||||
class="btn btn-info mr-2"
|
||||
id="create-return-btn"
|
||||
|
|
@ -175,14 +166,23 @@
|
|||
<i class="fas fa-undo"></i> Retourenlabel erstellen
|
||||
</button>
|
||||
@endif
|
||||
--}}
|
||||
@if($shipment->dhl_shipment_no)
|
||||
<button type="button"
|
||||
class="btn btn-secondary mr-2"
|
||||
<button type="button"
|
||||
class="btn btn-secondary mr-2"
|
||||
id="update-tracking-btn"
|
||||
data-shipment-id="{{ $shipment->id }}">
|
||||
<i class="fas fa-sync"></i> Tracking aktualisieren
|
||||
</button>
|
||||
|
||||
@if($shipment->canSendTrackingEmail())
|
||||
<button type="button"
|
||||
class="btn {{ $shipment->wasTrackingEmailSent() ? 'btn-success' : 'btn-info' }} mr-2"
|
||||
id="send-tracking-email-btn"
|
||||
data-shipment-id="{{ $shipment->id }}">
|
||||
<i class="fas fa-envelope"></i>
|
||||
{{ $shipment->wasTrackingEmailSent() ? 'Tracking-E-Mail erneut senden' : 'Tracking-E-Mail senden' }}
|
||||
</button>
|
||||
@endif
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -345,6 +345,14 @@
|
|||
</td>
|
||||
</tr>
|
||||
@endif
|
||||
@if($shipment->recipient && isset($shipment->recipient['street']))
|
||||
<tr>
|
||||
<td class="font-weight-semibold">Straße:</td>
|
||||
<td>
|
||||
{{ $shipment->recipient['street'] }}
|
||||
</td>
|
||||
</tr>
|
||||
@endif
|
||||
<tr>
|
||||
<td class="font-weight-semibold">Straße:</td>
|
||||
<td>
|
||||
|
|
@ -492,6 +500,42 @@
|
|||
<div class="col-lg-4">
|
||||
|
||||
|
||||
<!-- Email Status -->
|
||||
@if($shipment->dhl_shipment_no)
|
||||
<div class="card mb-4">
|
||||
<div class="card-header">
|
||||
<h5 class="mb-0">
|
||||
<i class="fas fa-envelope text-{{ $shipment->wasTrackingEmailSent() ? 'success' : 'secondary' }}"></i>
|
||||
Tracking-E-Mail Status
|
||||
</h5>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
@if($shipment->wasTrackingEmailSent())
|
||||
<div class="alert alert-success mb-0">
|
||||
<i class="fas fa-check-circle"></i>
|
||||
<strong>E-Mail gesendet</strong><br>
|
||||
<small>
|
||||
Am {{ $shipment->tracking_email_sent_at->format('d.m.Y \u\m H:i') }} Uhr
|
||||
({{ $shipment->tracking_email_type === 'auto' ? 'automatisch' : 'manuell' }})
|
||||
</small>
|
||||
</div>
|
||||
@else
|
||||
<div class="alert alert-secondary mb-0">
|
||||
<i class="fas fa-clock"></i>
|
||||
<strong>Noch nicht gesendet</strong><br>
|
||||
<small>
|
||||
@if($shipment->canSendTrackingEmail())
|
||||
Klicken Sie auf "Tracking-E-Mail senden" um den Kunden zu benachrichtigen.
|
||||
@else
|
||||
E-Mail kann nicht gesendet werden (keine Empfänger-E-Mail verfügbar).
|
||||
@endif
|
||||
</small>
|
||||
</div>
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
@endif
|
||||
|
||||
<!-- Tracking Information -->
|
||||
@if($shipment->tracking_status || $shipment->dhl_shipment_no)
|
||||
<div class="card mb-4">
|
||||
|
|
@ -709,6 +753,42 @@ $(document).ready(function() {
|
|||
});
|
||||
});
|
||||
|
||||
// Send tracking email
|
||||
$('#send-tracking-email-btn').click(function() {
|
||||
var shipmentId = $(this).data('shipment-id');
|
||||
var btn = $(this);
|
||||
|
||||
if (!confirm('Tracking-E-Mail an den Kunden senden?')) {
|
||||
return;
|
||||
}
|
||||
|
||||
btn.prop('disabled', true).html('<i class="fas fa-spinner fa-spin"></i> Wird gesendet...');
|
||||
|
||||
$.ajax({
|
||||
url: `/admin/dhl/shipment/${shipmentId}/send-tracking-email`,
|
||||
method: 'POST',
|
||||
data: {
|
||||
_token: '{{ csrf_token() }}'
|
||||
},
|
||||
success: function(response) {
|
||||
if (response.success) {
|
||||
showAlert('success', response.message);
|
||||
setTimeout(function() {
|
||||
location.reload();
|
||||
}, 2000);
|
||||
} else {
|
||||
showAlert('error', response.message);
|
||||
resetButton(btn, '<i class="fas fa-envelope"></i> Tracking-E-Mail senden');
|
||||
}
|
||||
},
|
||||
error: function(xhr) {
|
||||
var errorMsg = xhr.responseJSON ? xhr.responseJSON.message : 'Fehler beim Senden der Tracking-E-Mail.';
|
||||
showAlert('error', errorMsg);
|
||||
resetButton(btn, '<i class="fas fa-envelope"></i> Tracking-E-Mail senden');
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
// Helper functions
|
||||
function resetButton(btn, originalText) {
|
||||
btn.prop('disabled', false).html(originalText);
|
||||
|
|
|
|||
|
|
@ -44,7 +44,7 @@
|
|||
@if($value->user_sales_volume)
|
||||
<tr>
|
||||
<td>{{ $value->user_sales_volume->date }}</td>
|
||||
<td>{{ $value->user_sales_volume->points }}</td>
|
||||
<td>{{ $value->user_sales_volume->getFormattedPoints() }}</td>
|
||||
<td>{{ formatNumber($value->user_sales_volume->total_net) }} €</td>
|
||||
<td>{{ $value->user_sales_volume->getStatusType() }}</td>
|
||||
<td>@if($value->user_sales_volume->user)
|
||||
|
|
|
|||
|
|
@ -67,6 +67,9 @@
|
|||
@else
|
||||
<br>
|
||||
@endif
|
||||
@if($current->shipping_postnumber)
|
||||
<strong>DHL {{ __('payment.dhl_postnumber') }}: {{ $current->shipping_postnumber }}</strong><br>
|
||||
@endif
|
||||
{{ $current->shipping_zipcode }}
|
||||
{{ $current->shipping_city }}<br>
|
||||
{{ $current->shipping_email }}<br>
|
||||
|
|
@ -183,6 +186,9 @@
|
|||
@else
|
||||
<br>
|
||||
@endif
|
||||
@if($possible->shipping_postnumber)
|
||||
<strong>DHL {{ __('payment.dhl_postnumber') }}: {{ $possible->shipping_postnumber }}</strong><br>
|
||||
@endif
|
||||
{{ $possible->shipping_zipcode }}
|
||||
{{ $possible->shipping_city }}<br>
|
||||
{{ $possible->shipping_email }}<br>
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@
|
|||
<tbody>
|
||||
<tr>
|
||||
<td class="border-0 text-muted align-middle" style="width: 110px">{{ __('order.points') }}:</td>
|
||||
<td class="border-0">{{ $product->points }}</td>
|
||||
<td class="border-0">{{ $product->getFormattedPoints() }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="border-0 text-muted align-middle" style="width: 110px">{{ __('order.content') }}:</td>
|
||||
|
|
|
|||
|
|
@ -51,8 +51,8 @@
|
|||
</div>
|
||||
|
||||
<div class="form-group col-sm-12">
|
||||
<label for="growth_bonus" class="form-label">{{__('Wachstumsbonus in %')}} </label>
|
||||
{{ Form::text('growth_bonus', $value->getFormattedGrowthBonus(), array('placeholder'=>__('Wachstumsbonus in %'), 'class'=>'form-control', 'id'=>'growth_bonus')) }}
|
||||
<label for="growth_bonus" class="form-label">{{__('Tiefenbonus in %')}} </label>
|
||||
{{ Form::text('growth_bonus', $value->getFormattedGrowthBonus(), array('placeholder'=>__('Tiefenbonus in %'), 'class'=>'form-control', 'id'=>'growth_bonus')) }}
|
||||
</div>
|
||||
</div>
|
||||
<hr>
|
||||
|
|
|
|||
|
|
@ -59,7 +59,7 @@
|
|||
<div class="td-entry-table-margin">
|
||||
<i class="fa fa-plus-circle text-secondary"></i>
|
||||
{!! formatNumber($credit->credit) !!} € |
|
||||
{!! nl2br($credit->message) !!}
|
||||
{{ formatTextWithLineBreaks($credit->message, true) }}
|
||||
/ {{ $credit->created_at->format("d.m.Y") }}
|
||||
@if($deleteTime = $credit->deleteTime())
|
||||
/ <span class="no-line-break">
|
||||
|
|
|
|||
|
|
@ -274,7 +274,7 @@
|
|||
@foreach ($cr->user_sales_volumes as $user_sales_volume)
|
||||
<tr>
|
||||
<td>{{ $user_sales_volume->date }}</td>
|
||||
<td>{{ $user_sales_volume->points }}</td>
|
||||
<td>{{ $user_sales_volume->getFormattedPoints() }}</td>
|
||||
<td>{{ $user_sales_volume->info }}</td>
|
||||
</tr>
|
||||
@endforeach
|
||||
|
|
@ -294,7 +294,7 @@
|
|||
--}}
|
||||
@if (isset($cbot))
|
||||
|
||||
{{-- Payline Points / Provision / Wachstumsbonus
|
||||
{{-- Payline Points / Provision / Tiefenbonus
|
||||
<div class="card-header">
|
||||
<table class="table user-view-table m-0">
|
||||
<tbody>
|
||||
|
|
@ -324,7 +324,7 @@
|
|||
</div>
|
||||
--}}
|
||||
|
||||
{{-- Payline Points / Provision / Wachstumsbonus
|
||||
{{-- Payline Points / Provision / Tiefenbonus
|
||||
<hr>
|
||||
<div class="card-header">
|
||||
<table class="table user-view-table m-0">
|
||||
|
|
@ -374,7 +374,7 @@
|
|||
</div>
|
||||
--}}
|
||||
|
||||
{{-- Table Payline Points / Provision / Wachstumsbonus
|
||||
{{-- Table Payline Points / Provision / Tiefenbonus
|
||||
<div class="card-body table-responsive pt-0 pb-0">
|
||||
<table class="datatables-style table table-striped ">
|
||||
<thead>
|
||||
|
|
|
|||
|
|
@ -137,7 +137,7 @@
|
|||
<td>{{ $user_sales_volume->date }}</td>
|
||||
<td>{{ $user_sales_volume->getStatusType() }}</td>
|
||||
<td>{{ formatNumber($user_sales_volume->total_net) }} €</td>
|
||||
<td>{{ $user_sales_volume->points }}</td>
|
||||
<td>{{ $user_sales_volume->getFormattedPoints() }}</td>
|
||||
<td>{{ $user_sales_volume->getStatusPointsType() }}</td>
|
||||
<td>{{ $user_sales_volume->getStatusTurnoverType() }}</td>
|
||||
<td>
|
||||
|
|
@ -232,7 +232,7 @@
|
|||
<td>{{ $user_sales_volume->date }}</td>
|
||||
<td>{{ $user_sales_volume->getStatusType() }}</td>
|
||||
<td>{{ formatNumber($user_sales_volume->total_net) }} €</td>
|
||||
<td>{{ $user_sales_volume->points }}</td>
|
||||
<td>{{ $user_sales_volume->getFormattedPoints() }}</td>
|
||||
<td>{{ $user_sales_volume->getStatusPointsType() }}</td>
|
||||
<td>{{ $user_sales_volume->getStatusTurnoverType() }}</td>
|
||||
<td>
|
||||
|
|
@ -292,7 +292,7 @@
|
|||
<td>{{ $user_sales_volume->id }}</td>
|
||||
<td>{{ $user_sales_volume->date }}</td>
|
||||
<td>{{ $user_sales_volume->getStatusType() }}</td>
|
||||
<td>{{ $user_sales_volume->points }}</td>
|
||||
<td>{{ $user_sales_volume->getFormattedPoints() }}</td>
|
||||
<td>{{ $user_sales_volume->getStatusPointsType() }}</td>
|
||||
<td>{{ $user_sales_volume->getStatusTurnoverType() }}</td>
|
||||
<td>{{ $user_sales_volume->info }}</td>
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
|
||||
<div class="card mb-2">
|
||||
|
||||
<h5 class="card-header">
|
||||
<h5 class="card-header bg-primary text-white">
|
||||
{{ __('Product') }}
|
||||
|
||||
</h5>
|
||||
|
|
@ -60,7 +60,7 @@
|
|||
</div>
|
||||
|
||||
<div class="card mb-2">
|
||||
<h5 class="card-header">
|
||||
<h5 class="card-header bg-primary text-white">
|
||||
{{ __('Preise in EUR') }}
|
||||
</h5>
|
||||
<div class="card-body">
|
||||
|
|
@ -93,7 +93,7 @@
|
|||
</div>
|
||||
<div class="form-group col-sm-4">
|
||||
<label class="form-label" for="points">{{ __('Points pro Produkt') }}</label>
|
||||
{{ Form::text('points', $product->points, array('placeholder'=>__('Points pro Produkt'), 'class'=>'form-control', 'id'=>'points')) }}
|
||||
{{ Form::text('points', $product->getFormattedPoints(), array('placeholder'=>__('Points pro Produkt'), 'class'=>'form-control', 'id'=>'points')) }}
|
||||
</div>
|
||||
<div class="form-group col-sm-4">
|
||||
<label class="form-label" for="amount">{{ __('Anzahl/Verfügbarkeit') }}</label>
|
||||
|
|
@ -147,7 +147,7 @@
|
|||
</div>
|
||||
|
||||
<div class="card mb-2">
|
||||
<h5 class="card-header">
|
||||
<h5 class="card-header bg-primary text-white">
|
||||
Landesspezifische Preise
|
||||
</h5>
|
||||
|
||||
|
|
@ -239,7 +239,7 @@
|
|||
|
||||
|
||||
<div class="card mb-2">
|
||||
<h5 class="card-header">
|
||||
<h5 class="card-header bg-primary text-white">
|
||||
{{ __('Details') }}
|
||||
</h5>
|
||||
<div class="card-body">
|
||||
|
|
@ -299,7 +299,7 @@
|
|||
</div>
|
||||
|
||||
<div class="card mb-2">
|
||||
<h5 class="card-header">
|
||||
<h5 class="card-header bg-primary text-white">
|
||||
{{ __('order.contents') }}
|
||||
</h5>
|
||||
<div class="card-body">
|
||||
|
|
@ -340,9 +340,80 @@
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card mb-2">
|
||||
<h5 class="card-header bg-primary text-white">
|
||||
{{ __('Set/Kit Inhalte') }}
|
||||
@if($product->bundleItems->count() > 0)
|
||||
<span class="badge badge-primary ml-2">{{ $product->bundleItems->count() }} Produkt(e)</span>
|
||||
@endif
|
||||
</h5>
|
||||
<div class="card-body">
|
||||
<p class="text-muted small mb-3">
|
||||
<i class="fa fa-info-circle"></i>
|
||||
Hier können Sie Produkte definieren, die in diesem Set/Kit enthalten sind.
|
||||
Diese werden auf Rechnungen und Lieferscheinen unter dem Hauptprodukt aufgelistet.
|
||||
</p>
|
||||
@if($product->bundleItems->count() > 0)
|
||||
<div class="card-datatable table-responsive pt-0">
|
||||
<table class="datatables-style table table-striped table-bordered">
|
||||
<thead>
|
||||
<tr>
|
||||
<th style="width: 80px">{{__('Art.-Nr.')}}</th>
|
||||
<th>{{__('Produktname')}}</th>
|
||||
<th style="width: 100px" class="text-center">{{__('Menge')}}</th>
|
||||
<th style="width: 100px" class="text-right">{{__('Preis VK')}}</th>
|
||||
<th style="width: 80px" class="text-center">{{__('Punkte')}}</th>
|
||||
<th style="width: 50px"></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@foreach($product->bundleItems as $bundleItem)
|
||||
<tr>
|
||||
<td>{{ $bundleItem->number }}</td>
|
||||
<td>{{ $bundleItem->name }}</td>
|
||||
<td class="text-center">
|
||||
<input type="hidden" name="bundle_quantities[{{ $bundleItem->id }}][id]" value="{{ $bundleItem->id }}">
|
||||
<input type="number" name="bundle_quantities[{{ $bundleItem->id }}][qty]"
|
||||
value="{{ $bundleItem->pivot->quantity }}"
|
||||
min="1" max="999"
|
||||
class="form-control form-control-sm text-center"
|
||||
style="width: 70px; display: inline-block;">
|
||||
</td>
|
||||
<td class="text-right">{{ $bundleItem->getFormattedPrice() }} €</td>
|
||||
<td class="text-center">{{ $bundleItem->getFormattedPoints() }}</td>
|
||||
<td class="text-center">
|
||||
<a class="text-danger" href="{{ route('admin_product_delete', [$product->id, 'bundle', $bundleItem->id]) }}" onclick="return confirm('{{__('Produkt aus Set entfernen?')}}');">
|
||||
<i class="fa fa-trash-alt"></i>
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
@endforeach
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
@else
|
||||
<div class="alert alert-light border mb-3">
|
||||
<i class="fa fa-box-open text-muted"></i>
|
||||
Dieses Produkt enthält noch keine Bundle-Produkte.
|
||||
</div>
|
||||
@endif
|
||||
<div class="form-row">
|
||||
<div class="form-group col-sm-10">
|
||||
<label class="form-label">{{ __('Produkte zum Set hinzufügen (Mehrfachauswahl)') }}</label>
|
||||
<select class="selectpicker" name="product_bundles[]" id="product_bundles" data-style="btn-light" data-live-search="true" multiple>
|
||||
{!! HTMLHelper::getProductBundleOptions($product->bundleItems()->pluck('bundle_product_id')->toArray(), $product->id) !!}
|
||||
</select>
|
||||
</div>
|
||||
<div class="form-group col-sm-2">
|
||||
<button type="submit" class="btn btn-submit mt-0 mt-sm-4">{{ __('save') }}</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@if(Auth::user()->isSuperAdmin())
|
||||
<div class="card mb-2">
|
||||
<h5 class="card-header">
|
||||
<h5 class="card-header bg-secondary">
|
||||
{{ __('SuperAdmin Einstellungen') }}
|
||||
</h5>
|
||||
<div class="card-body">
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
|
||||
<div class="card mb-2">
|
||||
|
||||
<h5 class="card-header">
|
||||
<h5 class="card-header bg-secondary">
|
||||
{{ __('Bilder') }}
|
||||
|
||||
</h5>
|
||||
|
|
|
|||
|
|
@ -58,7 +58,7 @@
|
|||
</td>
|
||||
<td>{{ $value->getFormattedPrice() }}</td>
|
||||
<td>{{ $value->getFormattedTax() }}</td>
|
||||
<td>{{ $value->points }}</td>
|
||||
<td>{{ $value->getFormattedPoints() }}</td>
|
||||
<td>{{ $value->contents_total }}</td>
|
||||
<td>{{ $value->getUnitType() }}</td>
|
||||
<td>{{ $value->getBasePriceFormatted() }}</td>
|
||||
|
|
|
|||
|
|
@ -114,7 +114,7 @@
|
|||
</div>
|
||||
<div class="col-md-3 mb-3">
|
||||
<div class="text-muted small">{{ __('order.points_total') }}</div>
|
||||
{{ $shopping_order->points }}
|
||||
{{ $shopping_order->getFormattedPoints() }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -205,6 +205,64 @@
|
|||
<!-- / Member -->
|
||||
@endif
|
||||
|
||||
{{-- Vorkasse Hinweis mit TXID bei unbezahlten Bestellungen --}}
|
||||
@php
|
||||
$vorPayment = $shopping_order->shopping_payments->where('clearingtype', 'vor')->first();
|
||||
$isVorUnpaid = $vorPayment && !in_array($shopping_order->txaction, ['paid', 'completed']);
|
||||
@endphp
|
||||
@if($isVorUnpaid)
|
||||
@php
|
||||
$payTrans = $vorPayment->payment_transactions->first();
|
||||
$txid = $payTrans->txid ?? ($payTrans->transmitted_data['txid'] ?? null);
|
||||
@endphp
|
||||
<!-- Billing -->
|
||||
<div class="card-body">
|
||||
<div class="alert alert-warning border-warning mb-3" style="border-left: 4px solid #ffc107 !important;">
|
||||
<h5 class="mb-3"><i class="fa fa-university"></i> {{ __('payment.prepayment_bank_details') }}:</h5>
|
||||
<div style="background: #fff; border-radius: 8px; padding: 15px;">
|
||||
@if($payTrans && isset($payTrans->transmitted_data))
|
||||
<table style="width: 100%;">
|
||||
<tr>
|
||||
<td style="padding: 5px 10px 5px 0; width: 140px;"><strong>{{ __('payment.account_holder') }}:</strong></td>
|
||||
<td style="padding: 5px 0;">{{ $payTrans->transmitted_data['clearing_bankaccountholder'] }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="padding: 5px 10px 5px 0;"><strong>{{ __('payment.IBAN') }}:</strong></td>
|
||||
<td style="padding: 5px 0; font-family: monospace; letter-spacing: 1px;">{{ $payTrans->transmitted_data['clearing_bankiban'] }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="padding: 5px 10px 5px 0;"><strong>{{ __('payment.BIC') }}:</strong></td>
|
||||
<td style="padding: 5px 0; font-family: monospace;">{{ $payTrans->transmitted_data['clearing_bankbic'] }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="padding: 5px 10px 5px 0;"><strong>{{ __('payment.bank') }}:</strong></td>
|
||||
<td style="padding: 5px 0;">{{ $payTrans->transmitted_data['clearing_bankname'] }}</td>
|
||||
</tr>
|
||||
<tr style="border-top: 1px solid #ffc107;">
|
||||
<td style="padding: 10px 10px 5px 0;"><strong>{{ __('payment.total_amount') }}:</strong></td>
|
||||
<td style="padding: 10px 0 5px 0; font-size: 18px; font-weight: bold; color: #d35400;">{{ number_format( floatval($payTrans->shopping_payment->amount/100), 2, ",", ".") }} EUR</td>
|
||||
</tr>
|
||||
</table>
|
||||
@endif
|
||||
</div>
|
||||
|
||||
<hr style="border-color: #ffc107;">
|
||||
|
||||
<p>{{ __('payment.prepayment_reference_notice') }}</p>
|
||||
|
||||
@if(isset($payTrans->transmitted_data['txid']))
|
||||
<div class="text-center p-4 my-3" style="background: #fff; border: 3px dashed #ffc107; border-radius: 8px;">
|
||||
<strong style="font-size: 16px;">{{ __('payment.prepayment_txid') }}:</strong><br>
|
||||
<span style="font-size: 32px; font-weight: bold; color: #d35400; letter-spacing: 3px;">{{ $payTrans->transmitted_data['txid'] }}</span>
|
||||
</div>
|
||||
@endif
|
||||
|
||||
<p><strong>{{ __('payment.prepayment_reference_only') }}</strong></p>
|
||||
<p class="mt-3 mb-0 text-muted"><em>{{ __('payment.prepayment_waiting_payment') }}</em></p>
|
||||
</div>
|
||||
</div>
|
||||
<hr class="m-0">
|
||||
@endif
|
||||
<!-- Billing -->
|
||||
<div class="card-body">
|
||||
|
||||
|
|
@ -343,6 +401,13 @@
|
|||
<div class="text-muted small">{{ __('Phone') }}</div>
|
||||
{{ $shopping_order->shopping_user->shipping_phone }}
|
||||
</div>
|
||||
@if($shopping_order->shopping_user->shipping_postnumber)
|
||||
<div class="col-md-3 mb-3">
|
||||
<div class="text-muted small">{{ __('payment.dhl_postnumber') }}</div>
|
||||
<span class="badge badge-info">{{ $shopping_order->shopping_user->shipping_postnumber }}</span>
|
||||
<small class="d-block text-muted">{{ __('payment.packstation_delivery') }}</small>
|
||||
</div>
|
||||
@endif
|
||||
<div class="col-md-3 mb-3">
|
||||
<div class="text-muted small">{{ __('Country') }}</div>
|
||||
{{ $shopping_order->shopping_user->shipping_country->getLocated() }}
|
||||
|
|
@ -354,6 +419,10 @@
|
|||
<hr class="m-0">
|
||||
<!-- / Shipping -->
|
||||
|
||||
<!-- DHL Sendungen -->
|
||||
@include('admin.sales._detail_dhl_shipments')
|
||||
<!-- / DHL Sendungen -->
|
||||
|
||||
<!-- Items -->
|
||||
<div class="card-body">
|
||||
<h6 class="small font-weight-semibold">
|
||||
|
|
@ -446,6 +515,9 @@
|
|||
<h6 class="small font-weight-semibold">
|
||||
{{ __('tables.payment') }}
|
||||
</h6>
|
||||
|
||||
|
||||
|
||||
@if ($shopping_order->txaction !== 'extern')
|
||||
<div class="table-responsive">
|
||||
<table class="table table-bordered table-striped">
|
||||
|
|
|
|||
275
resources/views/admin/sales/_detail_dhl_shipments.blade.php
Normal file
275
resources/views/admin/sales/_detail_dhl_shipments.blade.php
Normal file
|
|
@ -0,0 +1,275 @@
|
|||
{{-- DHL Sendungen Block für Order Detail --}}
|
||||
@if($shopping_order->dhlShipments && $shopping_order->dhlShipments->count() > 0)
|
||||
<div class="card mb-4">
|
||||
<div class="card-header bg-warning text-dark">
|
||||
<h5 class="mb-0">
|
||||
<i class="fas fa-shipping-fast"></i>
|
||||
DHL Sendungen ({{ $shopping_order->dhlShipments->count() }})
|
||||
</h5>
|
||||
</div>
|
||||
<div class="card-body p-0">
|
||||
<div class="table-responsive">
|
||||
<table class="table table-striped table-hover mb-0">
|
||||
<thead class="thead-light">
|
||||
<tr>
|
||||
<th style="width: 80px;">#</th>
|
||||
<th>Sendungsnummer</th>
|
||||
<th>Status</th>
|
||||
<th>Tracking</th>
|
||||
<th>E-Mail</th>
|
||||
@if (isset($isAdmin) && $isAdmin)
|
||||
<th style="width: 150px;">Aktionen</th>
|
||||
@endif
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@foreach($shopping_order->dhlShipments as $shipment)
|
||||
<tr class="{{ $shipment->type === 'return' ? 'bg-warning bg-opacity-10' : '' }}" style="{{ $shipment->type === 'return' ? 'background-color: rgba(255, 193, 7, 0.1);' : '' }}">
|
||||
<td>
|
||||
<a href="{{ route('admin.dhl.show', $shipment) }}" class="font-weight-bold {{ $shipment->type === 'return' ? 'text-warning' : 'text-primary' }}">
|
||||
@if($shipment->type === 'return')<i class="fas fa-undo mr-1"></i>@endif#{{ $shipment->id }}
|
||||
</a>
|
||||
@if($shipment->type === 'return')
|
||||
<br><span class="badge badge-warning badge-sm" style="font-weight: 600;">RETOURE</span>
|
||||
@endif
|
||||
</td>
|
||||
<td>
|
||||
@if($shipment->dhl_shipment_no)
|
||||
<code class="text-success">{{ $shipment->dhl_shipment_no }}</code>
|
||||
<br>
|
||||
<a href="{{ $shipment->getTrackingUrl() }}" target="_blank" class="small text-muted">
|
||||
<i class="fas fa-external-link-alt"></i> Bei DHL verfolgen
|
||||
</a>
|
||||
@else
|
||||
<span class="text-muted">-</span>
|
||||
@endif
|
||||
</td>
|
||||
<td>
|
||||
<span class="badge badge-{{ $shipment->getStatusBadgeClass() }}">
|
||||
{{ $shipment->status }}
|
||||
</span>
|
||||
@if($shipment->tracking_status)
|
||||
<br><small class="text-muted">{{ $shipment->tracking_status }}</small>
|
||||
@endif
|
||||
</td>
|
||||
<td>
|
||||
@if($shipment->last_tracked_at)
|
||||
<small class="text-muted">
|
||||
{{ $shipment->last_tracked_at->format('d.m.Y H:i') }}
|
||||
</small>
|
||||
@else
|
||||
<span class="text-muted">-</span>
|
||||
@endif
|
||||
</td>
|
||||
<td>
|
||||
@if($shipment->wasTrackingEmailSent())
|
||||
<span class="badge badge-success" title="Gesendet am {{ $shipment->tracking_email_sent_at->format('d.m.Y H:i') }} ({{ $shipment->tracking_email_type === 'auto' ? 'automatisch' : 'manuell' }})">
|
||||
<i class="fas fa-check"></i> {{ $shipment->tracking_email_sent_at->format('d.m.Y') }}
|
||||
</span>
|
||||
<br>
|
||||
<small class="text-muted">
|
||||
@if($shipment->tracking_email_type === 'auto')
|
||||
<i class="fas fa-robot"></i> Automatisch
|
||||
@else
|
||||
<i class="fas fa-user"></i> Manuell
|
||||
@endif
|
||||
</small>
|
||||
@else
|
||||
<span class="badge badge-secondary">Nicht gesendet</span>
|
||||
@endif
|
||||
</td>
|
||||
@if (isset($isAdmin) && $isAdmin)
|
||||
<td>
|
||||
<div class="btn-group btn-group-sm" role="group">
|
||||
<a href="{{ route('admin.dhl.show', $shipment) }}" class="btn btn-outline-primary" title="Details">
|
||||
<i class="fas fa-eye"></i>
|
||||
</a>
|
||||
@if($shipment->label_path)
|
||||
<a href="{{ route('admin.dhl.download-label', $shipment) }}" class="btn btn-outline-success" title="Label herunterladen">
|
||||
<i class="fas fa-download"></i>
|
||||
</a>
|
||||
@endif
|
||||
@if($shipment->dhl_shipment_no)
|
||||
<button type="button"
|
||||
class="btn btn-outline-secondary dhl-update-tracking-btn"
|
||||
data-shipment-id="{{ $shipment->id }}"
|
||||
title="Tracking aktualisieren">
|
||||
<i class="fas fa-sync"></i>
|
||||
</button>
|
||||
@if($shipment->canSendTrackingEmail())
|
||||
<button type="button"
|
||||
class="btn {{ $shipment->wasTrackingEmailSent() ? 'btn-success' : 'btn-outline-info' }} dhl-send-email-btn"
|
||||
data-shipment-id="{{ $shipment->id }}"
|
||||
title="{{ $shipment->wasTrackingEmailSent() ? 'E-Mail erneut senden' : 'Tracking-E-Mail senden' }}">
|
||||
<i class="fas fa-envelope"></i>
|
||||
</button>
|
||||
@endif
|
||||
@endif
|
||||
@if($shipment->type === 'outbound' && !$shipment->returns->count())
|
||||
<button type="button"
|
||||
class="btn btn-outline-info dhl-create-return-btn"
|
||||
data-shipment-id="{{ $shipment->id }}"
|
||||
title="Retourenlabel erstellen">
|
||||
<i class="fas fa-undo"></i>
|
||||
</button>
|
||||
@endif
|
||||
@if($shipment->canCancel())
|
||||
<button type="button"
|
||||
class="btn btn-outline-danger dhl-cancel-shipment-btn"
|
||||
data-shipment-id="{{ $shipment->id }}"
|
||||
title="Sendung stornieren">
|
||||
<i class="fas fa-ban"></i>
|
||||
</button>
|
||||
@endif
|
||||
</div>
|
||||
</td>
|
||||
@endif
|
||||
</tr>
|
||||
@endforeach
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
// Update tracking button
|
||||
$('.dhl-update-tracking-btn').click(function() {
|
||||
var shipmentId = $(this).data('shipment-id');
|
||||
var btn = $(this);
|
||||
|
||||
btn.prop('disabled', true).html('<i class="fas fa-spinner fa-spin"></i>');
|
||||
|
||||
$.ajax({
|
||||
url: `/admin/dhl/shipment/${shipmentId}/update-tracking`,
|
||||
method: 'POST',
|
||||
data: {
|
||||
_token: '{{ csrf_token() }}'
|
||||
},
|
||||
success: function(response) {
|
||||
if (response.success) {
|
||||
location.reload();
|
||||
} else {
|
||||
alert('Fehler: ' + response.message);
|
||||
btn.prop('disabled', false).html('<i class="fas fa-sync"></i>');
|
||||
}
|
||||
},
|
||||
error: function() {
|
||||
alert('Fehler beim Aktualisieren des Trackings.');
|
||||
btn.prop('disabled', false).html('<i class="fas fa-sync"></i>');
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
// Send email button
|
||||
$('.dhl-send-email-btn').click(function() {
|
||||
var shipmentId = $(this).data('shipment-id');
|
||||
var btn = $(this);
|
||||
|
||||
if (!confirm('Tracking-E-Mail an den Kunden senden?')) {
|
||||
return;
|
||||
}
|
||||
|
||||
btn.prop('disabled', true).html('<i class="fas fa-spinner fa-spin"></i>');
|
||||
|
||||
$.ajax({
|
||||
url: `/admin/dhl/shipment/${shipmentId}/send-tracking-email`,
|
||||
method: 'POST',
|
||||
data: {
|
||||
_token: '{{ csrf_token() }}'
|
||||
},
|
||||
success: function(response) {
|
||||
if (response.success) {
|
||||
alert(response.message);
|
||||
location.reload();
|
||||
} else {
|
||||
alert('Fehler: ' + response.message);
|
||||
btn.prop('disabled', false).html('<i class="fas fa-envelope"></i>');
|
||||
}
|
||||
},
|
||||
error: function(xhr) {
|
||||
var errorMsg = xhr.responseJSON ? xhr.responseJSON.message : 'Fehler beim Senden der E-Mail.';
|
||||
alert(errorMsg);
|
||||
btn.prop('disabled', false).html('<i class="fas fa-envelope"></i>');
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
// Create return label button
|
||||
$('.dhl-create-return-btn').click(function() {
|
||||
var shipmentId = $(this).data('shipment-id');
|
||||
var btn = $(this);
|
||||
|
||||
// Check if already processing
|
||||
if (btn.prop('disabled')) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!confirm('Möchten Sie ein Retourenlabel für diese Sendung erstellen?')) {
|
||||
return;
|
||||
}
|
||||
|
||||
btn.prop('disabled', true).html('<i class="fas fa-spinner fa-spin"></i>');
|
||||
|
||||
$.ajax({
|
||||
url: `/admin/dhl/shipment/${shipmentId}/return-label`,
|
||||
method: 'POST',
|
||||
data: {
|
||||
_token: '{{ csrf_token() }}'
|
||||
},
|
||||
success: function(response) {
|
||||
if (response.success) {
|
||||
alert(response.message || 'Retourenlabel wurde erstellt!');
|
||||
setTimeout(function() {
|
||||
location.reload();
|
||||
}, 1500);
|
||||
} else {
|
||||
alert('Fehler: ' + response.message);
|
||||
btn.prop('disabled', false).html('<i class="fas fa-undo"></i>');
|
||||
}
|
||||
},
|
||||
error: function(xhr) {
|
||||
var errorMsg = xhr.responseJSON ? xhr.responseJSON.message : 'Fehler beim Erstellen des Retourenlabels.';
|
||||
alert(errorMsg);
|
||||
btn.prop('disabled', false).html('<i class="fas fa-undo"></i>');
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
// Cancel shipment button
|
||||
$('.dhl-cancel-shipment-btn').click(function() {
|
||||
var shipmentId = $(this).data('shipment-id');
|
||||
var btn = $(this);
|
||||
|
||||
if (!confirm('Möchten Sie diese Sendung wirklich stornieren?\n\nDas Label wird bei DHL ungültig und kann nicht mehr verwendet werden.')) {
|
||||
return;
|
||||
}
|
||||
|
||||
btn.prop('disabled', true).html('<i class="fas fa-spinner fa-spin"></i>');
|
||||
|
||||
$.ajax({
|
||||
url: `/admin/dhl/shipment/${shipmentId}/cancel`,
|
||||
method: 'DELETE',
|
||||
data: {
|
||||
_token: '{{ csrf_token() }}'
|
||||
},
|
||||
success: function(response) {
|
||||
if (response.success) {
|
||||
alert(response.message || 'Sendung wird storniert...');
|
||||
location.reload();
|
||||
} else {
|
||||
alert('Fehler: ' + response.message);
|
||||
btn.prop('disabled', false).html('<i class="fas fa-ban"></i>');
|
||||
}
|
||||
},
|
||||
error: function(xhr) {
|
||||
var errorMsg = xhr.responseJSON ? xhr.responseJSON.message : 'Fehler beim Stornieren der Sendung.';
|
||||
alert(errorMsg);
|
||||
btn.prop('disabled', false).html('<i class="fas fa-ban"></i>');
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
</script>
|
||||
@endif
|
||||
|
|
@ -232,6 +232,13 @@
|
|||
<div class="text-muted small">{{ __('Phone') }}</div>
|
||||
{{ $homeparty_guest->shipping_phone }}
|
||||
</div>
|
||||
@if($homeparty_guest->shipping_postnumber)
|
||||
<div class="col-md-3 mb-3">
|
||||
<div class="text-muted small">{{ __('payment.dhl_postnumber') }}</div>
|
||||
<span class="badge badge-info">{{ $homeparty_guest->shipping_postnumber }}</span>
|
||||
<small class="d-block text-muted">{{ __('payment.packstation_delivery') }}</small>
|
||||
</div>
|
||||
@endif
|
||||
<div class="col-md-3 mb-3">
|
||||
<div class="text-muted small">{{ __('Country') }}</div>
|
||||
{{ $homeparty_guest->shipping_country->getLocated() }}
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@
|
|||
<small>
|
||||
<span class="text-muted">{{ __('order.content') }}: </span> {{ $shopping_order_item->product->contents }}<br>
|
||||
<span class="text-muted">{{ __('order.weight') }}: </span> {{ $shopping_order_item->product->weight }} g<br>
|
||||
<span class="text-muted">{{ __('order.points') }}: </span> {{ $shopping_order_item->product->points }}<br>
|
||||
<span class="text-muted">{{ __('order.points') }}: </span> {{ $shopping_order_item->product->getFormattedPoints() }}<br>
|
||||
<span class="text-muted">{{ __('order.number') }}: </span> {{ $shopping_order_item->product->number }}
|
||||
</small>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -51,7 +51,7 @@
|
|||
</div>--}}
|
||||
<div class="form-row">
|
||||
<div class="form-group col-sm-6">
|
||||
<label class="form-label">{{ __('Tag des Monats für die Fixierung/Auswertungen der Business Marketing Plans') }}*</label>
|
||||
<label class="form-label">Tag des Monats für die Fixierung/Auswertungen der Business Marketing Plans*</label>
|
||||
{{ Form::text('settings[day-exectute-business-structur][val]', \App\Models\Setting::getContentBySlug('day-exectute-business-structur'), array('class'=>'form-control')) }}
|
||||
{{ Form::hidden('settings[day-exectute-business-structur][type]', 'int') }}
|
||||
</div>
|
||||
|
|
@ -60,6 +60,20 @@
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card mb-2">
|
||||
<div class="card-body">
|
||||
<h4>Abo Einstellungen</h4>
|
||||
<div class="form-row">
|
||||
<div class="form-group col-sm-6">
|
||||
<label class="form-label">Mindestlaufzeit des Abos in Monaten*</label>
|
||||
{{ Form::text('settings[abo-min-duration][val]', \App\Models\Setting::getContentBySlug('abo-min-duration'), array('class'=>'form-control')) }}
|
||||
{{ Form::hidden('settings[abo-min-duration][type]', 'int') }}
|
||||
</div>
|
||||
</div>
|
||||
<button type="submit" name="action" value="save_prepayment" class="btn btn-primary btn-sm mb-2"><i class="ion ion-ios-save"></i> speichern</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card mb-2">
|
||||
<div class="card-body">
|
||||
<h4>Auszeitparty</h4>
|
||||
|
|
|
|||
49
resources/views/admin/site/news/edit.blade.php
Normal file
49
resources/views/admin/site/news/edit.blade.php
Normal file
|
|
@ -0,0 +1,49 @@
|
|||
@extends('layouts.layout-2')
|
||||
|
||||
@section('content')
|
||||
|
||||
@if ($errors->any())
|
||||
<div class="row">
|
||||
<div class="col-sm-12">
|
||||
<div class="alert alert-danger">
|
||||
<ul>
|
||||
@foreach ($errors->all() as $error)
|
||||
<li>{{ $error }}</li>
|
||||
@endforeach
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endif
|
||||
|
||||
<h4 class="font-weight-bold py-2 mb-2">
|
||||
<i class="ion ion-md-megaphone mr-2"></i>
|
||||
{{ $news->id ? __('backend.edit_news') : __('backend.add_news') }}
|
||||
</h4>
|
||||
|
||||
{!! Form::open(['action' => route('admin_dashboard_news_store', [$news->id ?: 'new']), 'class' => 'form-horizontal', 'id'=>'']) !!}
|
||||
|
||||
<div class="text-left mt-0 mb-2">
|
||||
<button type="submit" class="btn btn-submit btn-primary">
|
||||
<i class="ion ion-md-checkmark"></i> {{ __('save') }}
|
||||
</button>
|
||||
<a href="{{ route('admin_dashboard_news') }}" class="btn btn-secondary">
|
||||
<i class="ion ion-md-close"></i> {{ __('backend.cancel') }}
|
||||
</a>
|
||||
</div>
|
||||
|
||||
@include('admin.site.news.form')
|
||||
|
||||
<div class="text-left mt-0 mb-2">
|
||||
<button type="submit" class="btn btn-submit btn-primary">
|
||||
<i class="ion ion-md-checkmark"></i> {{ __('save') }}
|
||||
</button>
|
||||
<a href="{{ route('admin_dashboard_news') }}" class="btn btn-secondary">
|
||||
<i class="ion ion-md-close"></i> {{ __('backend.cancel') }}
|
||||
</a>
|
||||
</div>
|
||||
|
||||
{!! Form::close() !!}
|
||||
|
||||
@endsection
|
||||
|
||||
266
resources/views/admin/site/news/form.blade.php
Normal file
266
resources/views/admin/site/news/form.blade.php
Normal file
|
|
@ -0,0 +1,266 @@
|
|||
<div class="card mb-4">
|
||||
<h5 class="card-header">
|
||||
<i class="ion ion-md-settings mr-2"></i>
|
||||
{{ __('backend.general_settings') }}
|
||||
</h5>
|
||||
<div class="card-body">
|
||||
<div class="form-row">
|
||||
<div class="form-group col-md-6">
|
||||
<label class="custom-control custom-checkbox">
|
||||
{!! Form::checkbox('active', 1, $news->active ?? true, ['class'=>'custom-control-input']) !!}
|
||||
<span class="custom-control-label">{{ __('backend.news_active') }}</span>
|
||||
</label>
|
||||
|
||||
<small class="form-text text-muted">
|
||||
<i class="ion ion-md-information-circle"></i>
|
||||
{{ __('backend.news_active_hint') }}<br>
|
||||
<strong>{{ __('backend.news_active_single') }}</strong>
|
||||
</small>
|
||||
</div>
|
||||
<div class="form-group col-md-6">
|
||||
<label class="form-label" for="display_date">{{ __('backend.display_date') }}</label>
|
||||
{!! Form::text('display_date', $news->display_date ? $news->display_date->format('d.m.Y') : now()->format('d.m.Y'), ['class'=>'form-control datepicker-base', 'id' => 'display_date']) !!}
|
||||
|
||||
<small class="form-text text-muted">{{ __('backend.display_date_hint') }}</small>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- German (Default Language) -->
|
||||
<div class="card mb-4">
|
||||
<h5 class="card-header bg-primary text-white">
|
||||
<i class="ion ion-md-flag mr-2"></i>
|
||||
{{ __('backend.german') }} ({{ __('backend.default_language') }})
|
||||
</h5>
|
||||
<div class="card-body">
|
||||
<div class="form-row">
|
||||
<div class="form-group col">
|
||||
<label class="form-label" for="title">{{ __('backend.title') }}*</label>
|
||||
{{ Form::text('title', $news->title, ['placeholder' => __('backend.title'), 'class' => 'form-control', 'id' => 'title', 'required']) }}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-row">
|
||||
<div class="form-group col">
|
||||
<label class="form-label" for="teaser">{{ __('backend.teaser') }}*</label>
|
||||
{{ Form::textarea('teaser', $news->teaser, ['placeholder' => __('backend.teaser'), 'class' => 'form-control', 'id' => 'teaser', 'rows' => 3, 'required']) }}
|
||||
<small class="form-text text-muted">{{ __('backend.teaser_hint') }}</small>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-row">
|
||||
<div class="form-group col">
|
||||
<label class="form-label" for="content">{{ __('backend.content') }}</label>
|
||||
{{ Form::textarea('content', $news->content, ['placeholder' => __('backend.content'), 'class' => 'form-control summernote-small', 'id' => 'content', 'rows' => 8]) }}
|
||||
<small class="form-text text-muted">{{ __('backend.content_hint') }}</small>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-row">
|
||||
<div class="form-group col">
|
||||
<label class="form-label">
|
||||
<i class="ion ion-md-attach mr-1"></i>
|
||||
{{ __('backend.file_links') }}
|
||||
</label>
|
||||
<div id="file-links-de" class="border p-3 rounded bg-light">
|
||||
@php
|
||||
$existingLinks = $news->file_links['de'] ?? [];
|
||||
@endphp
|
||||
@foreach($existingLinks as $index => $link)
|
||||
<div class="file-link-item mb-2" data-index="{{ $index }}">
|
||||
<div class="row">
|
||||
<div class="col-md-8">
|
||||
<input type="text" name="file_links[de][{{ $index }}][label]"
|
||||
class="form-control form-control-sm"
|
||||
placeholder="{{ __('backend.link_label') }}"
|
||||
value="{{ $link['label'] ?? '' }}">
|
||||
</div>
|
||||
<div class="col-md-3">
|
||||
<select name="file_links[de][{{ $index }}][file_id]"
|
||||
class="form-control form-control-sm select2-files"
|
||||
data-placeholder="{{ __('backend.select_file') }}">
|
||||
<option value="">{{ __('backend.select_file') }}</option>
|
||||
@foreach(\App\Models\DcFile::where('active', 1)->orderBy('original_name')->get() as $file)
|
||||
<option value="{{ $file->id }}"
|
||||
{{ ($link['file_id'] ?? null) == $file->id ? 'selected' : '' }}>
|
||||
{{ $file->original_name }}
|
||||
</option>
|
||||
@endforeach
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-md-1">
|
||||
<button type="button" class="btn btn-sm btn-danger remove-file-link">
|
||||
<i class="ion ion-md-trash"></i>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endforeach
|
||||
</div>
|
||||
<button type="button" class="btn btn-sm btn-outline-primary mt-2" id="add-file-link-de">
|
||||
<i class="ion ion-md-add-circle"></i> {{ __('backend.add_file_link') }}
|
||||
</button>
|
||||
<small class="form-text text-muted">{{ __('backend.file_links_hint') }}</small>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Other Languages -->
|
||||
@foreach($languages as $locale => $localeData)
|
||||
@if($locale !== 'de')
|
||||
<div class="card mb-4">
|
||||
<h5 class="card-header">
|
||||
<i class="ion ion-md-flag mr-2"></i>
|
||||
{{ $localeData['native'] }} ({{ strtoupper($locale) }})
|
||||
</h5>
|
||||
<div class="card-body">
|
||||
<div class="form-row">
|
||||
<div class="form-group col">
|
||||
<label class="form-label" for="trans_title_{{ $locale }}">{{ __('backend.title') }}</label>
|
||||
{{ Form::text('trans_title_' . $locale, $news->getTrans('title', $locale), ['placeholder' => __('backend.title'), 'class' => 'form-control ', 'id' => 'trans_title_' . $locale]) }}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-row">
|
||||
<div class="form-group col">
|
||||
<label class="form-label" for="trans_teaser_{{ $locale }}">{{ __('backend.teaser') }}</label>
|
||||
{{ Form::textarea('trans_teaser_' . $locale, $news->getTrans('teaser', $locale), ['placeholder' => __('backend.teaser'), 'class' => 'form-control', 'id' => 'trans_teaser_' . $locale, 'rows' => 3]) }}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-row">
|
||||
<div class="form-group col">
|
||||
<label class="form-label" for="trans_content_{{ $locale }}">{{ __('backend.content') }}</label>
|
||||
{{ Form::textarea('trans_content_' . $locale, $news->getTrans('content', $locale), ['placeholder' => __('backend.content'), 'class' => 'form-control summernote-small', 'id' => 'trans_content_' . $locale, 'rows' => 8]) }}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-row">
|
||||
<div class="form-group col">
|
||||
<label class="form-label">
|
||||
<i class="ion ion-md-attach mr-1"></i>
|
||||
{{ __('backend.file_links') }}
|
||||
</label>
|
||||
<div id="file-links-{{ $locale }}" class="border p-3 rounded bg-light">
|
||||
@php
|
||||
$existingLinks = $news->file_links[$locale] ?? [];
|
||||
@endphp
|
||||
@foreach($existingLinks as $index => $link)
|
||||
<div class="file-link-item mb-2" data-index="{{ $index }}">
|
||||
<div class="row">
|
||||
<div class="col-md-8">
|
||||
<input type="text" name="file_links[{{ $locale }}][{{ $index }}][label]"
|
||||
class="form-control form-control-sm"
|
||||
placeholder="{{ __('backend.link_label') }}"
|
||||
value="{{ $link['label'] ?? '' }}">
|
||||
</div>
|
||||
<div class="col-md-3">
|
||||
<select name="file_links[{{ $locale }}][{{ $index }}][file_id]"
|
||||
class="form-control form-control-sm select2-files"
|
||||
data-placeholder="{{ __('backend.select_file') }}">
|
||||
<option value="">{{ __('backend.select_file') }}</option>
|
||||
@foreach(\App\Models\DcFile::where('active', 1)->orderBy('original_name')->get() as $file)
|
||||
<option value="{{ $file->id }}"
|
||||
{{ ($link['file_id'] ?? null) == $file->id ? 'selected' : '' }}>
|
||||
{{ $file->original_name }}
|
||||
</option>
|
||||
@endforeach
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-md-1">
|
||||
<button type="button" class="btn btn-sm btn-danger remove-file-link">
|
||||
<i class="ion ion-md-trash"></i>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endforeach
|
||||
</div>
|
||||
<button type="button" class="btn btn-sm btn-outline-primary mt-2 add-file-link" data-locale="{{ $locale }}">
|
||||
<i class="ion ion-md-add-circle"></i> {{ __('backend.add_file_link') }}
|
||||
</button>
|
||||
<small class="form-text text-muted">{{ __('backend.file_links_hint') }}</small>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endif
|
||||
@endforeach
|
||||
|
||||
<script>
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
let fileOptions = `@foreach(\App\Models\DcFile::where('active', 1)->orderBy('original_name')->get() as $file)<option value="{{ $file->id }}">{{ $file->original_name }}</option>@endforeach`;
|
||||
|
||||
// Add file link for DE (default language)
|
||||
document.getElementById('add-file-link-de')?.addEventListener('click', function() {
|
||||
addFileLink('de');
|
||||
});
|
||||
|
||||
// Add file link for other languages
|
||||
document.querySelectorAll('.add-file-link').forEach(button => {
|
||||
button.addEventListener('click', function() {
|
||||
let locale = this.getAttribute('data-locale');
|
||||
addFileLink(locale);
|
||||
});
|
||||
});
|
||||
|
||||
// Remove file link
|
||||
document.addEventListener('click', function(e) {
|
||||
if (e.target.closest('.remove-file-link')) {
|
||||
e.target.closest('.file-link-item').remove();
|
||||
}
|
||||
});
|
||||
|
||||
function addFileLink(locale) {
|
||||
let container = document.getElementById('file-links-' + locale);
|
||||
let index = container.querySelectorAll('.file-link-item').length;
|
||||
|
||||
let html = `
|
||||
<div class="file-link-item mb-2" data-index="${index}">
|
||||
<div class="row">
|
||||
<div class="col-md-8">
|
||||
<input type="text" name="file_links[${locale}][${index}][label]"
|
||||
class="form-control form-control-sm"
|
||||
placeholder="{{ __('backend.link_label') }}">
|
||||
</div>
|
||||
<div class="col-md-3">
|
||||
<select name="file_links[${locale}][${index}][file_id]"
|
||||
class="form-control form-control-sm select2-files"
|
||||
data-placeholder="{{ __('backend.select_file') }}">
|
||||
<option value="">{{ __('backend.select_file') }}</option>
|
||||
${fileOptions}
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-md-1">
|
||||
<button type="button" class="btn btn-sm btn-danger remove-file-link">
|
||||
<i class="ion ion-md-trash"></i>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
`;
|
||||
|
||||
container.insertAdjacentHTML('beforeend', html);
|
||||
|
||||
// Initialize Select2 on new element
|
||||
let newSelect = container.querySelector('.file-link-item:last-child select');
|
||||
if (typeof $.fn.select2 !== 'undefined') {
|
||||
$(newSelect).select2({
|
||||
width: '100%',
|
||||
placeholder: '{{ __("backend.select_file") }}'
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
// Initialize Select2 on existing selects
|
||||
if (typeof $.fn.select2 !== 'undefined') {
|
||||
$('.select2-files').select2({
|
||||
width: '100%',
|
||||
placeholder: '{{ __("backend.select_file") }}'
|
||||
});
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
75
resources/views/admin/site/news/index.blade.php
Normal file
75
resources/views/admin/site/news/index.blade.php
Normal file
|
|
@ -0,0 +1,75 @@
|
|||
@extends('layouts.layout-2')
|
||||
|
||||
@section('content')
|
||||
|
||||
<h4 class="font-weight-bold py-2 mb-2">
|
||||
<i class="ion ion-md-megaphone mr-2"></i>
|
||||
{{ __('backend.dashboard_news') }}
|
||||
</h4>
|
||||
|
||||
<div class="text-left mt-0 mb-4">
|
||||
<a href="{{ route('admin_dashboard_news_edit', ['new']) }}" class="btn btn-primary">
|
||||
<i class="ion ion-md-add"></i> {{ __('backend.add_news') }}
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div class="card">
|
||||
<h5 class="card-header">
|
||||
<i class="ion ion-md-megaphone mr-2"></i>
|
||||
{{ __('backend.dashboard_news') }}
|
||||
</h5>
|
||||
<div class="card-body p-0">
|
||||
@if($news->count() > 0)
|
||||
<div class="table-responsive">
|
||||
<table class="table table-striped table-bordered">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>ID</th>
|
||||
<th>{{ __('backend.title') }}</th>
|
||||
<th>{{ __('backend.status') }}</th>
|
||||
<th>{{ __('backend.display_date') }}</th>
|
||||
<th>{{ __('backend.actions') }}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@foreach($news as $item)
|
||||
<tr>
|
||||
<td>{{ $item->id }}</td>
|
||||
<td>
|
||||
<strong>{{ $item->title }}</strong>
|
||||
<br>
|
||||
<small class="text-muted">{{ \Illuminate\Support\Str::limit($item->teaser, 80) }}</small>
|
||||
</td>
|
||||
<td>
|
||||
@if($item->active)
|
||||
<span class="badge badge-success">{{ __('backend.active') }}</span>
|
||||
@else
|
||||
<span class="badge badge-danger">{{ __('backend.inactive') }}</span>
|
||||
@endif
|
||||
</td>
|
||||
<td>{{ $item->getDisplayDateFormatted() }}</td>
|
||||
<td>
|
||||
<a href="{{ route('admin_dashboard_news_edit', [$item->id]) }}" class="btn btn-sm btn-primary">
|
||||
<i class="ion ion-md-create"></i> {{ __('navigation.edit') }}
|
||||
</a>
|
||||
<a href="{{ route('admin_dashboard_news_delete', [$item->id]) }}"
|
||||
class="btn btn-sm btn-danger"
|
||||
onclick="return confirm('{{ __('backend.confirm_delete') }}')">
|
||||
<i class="ion ion-md-trash"></i> {{ __('backend.delete') }}
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
@endforeach
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
@else
|
||||
<div class="alert alert-info">
|
||||
<i class="ion ion-md-information-circle"></i> {{ __('backend.no_news_yet') }}
|
||||
</div>
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@endsection
|
||||
|
||||
|
|
@ -5,6 +5,19 @@
|
|||
{{ __('User') }}
|
||||
</h4>
|
||||
|
||||
@if ($errors->any())
|
||||
<div class="alert alert-danger alert-dismissible fade show">
|
||||
<button type="button" class="close" data-dismiss="alert">×</button>
|
||||
<ul>
|
||||
@foreach ($errors->all() as $error)
|
||||
<li>{!! $error !!}</li>
|
||||
@endforeach
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
|
||||
@endif
|
||||
|
||||
<div class="card">
|
||||
<div class="card-datatable table-responsive">
|
||||
<table class="datatables-users table table-striped table-bordered">
|
||||
|
|
@ -20,8 +33,8 @@
|
|||
<th>{{ __('active') }} (seit)</th>
|
||||
<th>{{ __('tables.account') }} (bis)</th>
|
||||
<th>{{ __('tables.shop') }} (bis)</th>
|
||||
<th>{{ __('tables.shop') }} ab</th>
|
||||
<th>{{ __('Shop URL') }}</th>
|
||||
<th>{{ __('tables.shop') }} ab</th>
|
||||
<th>{{ __('Zahlungsarten') }}</th>
|
||||
<th>{{ __('Land') }}</th>
|
||||
<th>{{ __('Test Modus') }}</th>
|
||||
|
|
@ -106,7 +119,7 @@
|
|||
<div class="form-group col">
|
||||
<label for="confirmation_date" class="form-label">{{ __('Datum') }} seit</label>
|
||||
<input type="text" name="confirmation_date" class="form-control b-material-datetime-picker"
|
||||
placeholder="25.10.2020 10:30">
|
||||
placeholder="Datum">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -118,6 +131,71 @@
|
|||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<!-- Modal restore -->
|
||||
<div class="modal fade" id="modals-restore">
|
||||
<div class="modal-dialog">
|
||||
<form class="modal-content" action="{{ route('admin_user_store') }}" method="post">
|
||||
@csrf
|
||||
<input type="hidden" class="form-control" name="id">
|
||||
|
||||
<div class="modal-header">
|
||||
<h5 class="modal-title">{{ __('User') }} <span
|
||||
class="font-weight-light">{{ __('Account reaktivieren') }}</span></h5>
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="Close">×</button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
|
||||
<div class="form-row">
|
||||
<div class="form-group col">
|
||||
<label for="email" class="form-label">{{ __('E-Mail') }}</label>
|
||||
<input type="text" class="form-control" name="email" placeholder="{{ __('E-Mail') }}"
|
||||
readonly>
|
||||
</div>
|
||||
</div>
|
||||
<hr>
|
||||
<div class="form-group">
|
||||
<label class="custom-control custom-checkbox m-0">
|
||||
<input type="checkbox" class="custom-control-input" name="restore_account" >
|
||||
<span class="custom-control-label">Soll der Account des Users wieder aktiviert werden?</span>
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-row">
|
||||
<div class="form-group col">
|
||||
<label for="payment_account" class="form-label">Wenn ja, wird der Account bis zum angegebenen Datum aktiviert.</label>
|
||||
<input type="text" name="payment_account" class="form-control b-material-datetime-picker"
|
||||
placeholder="Datum">
|
||||
</div>
|
||||
</div>
|
||||
<hr>
|
||||
<div class="form-group">
|
||||
<label class="custom-control custom-checkbox m-0">
|
||||
<input type="checkbox" class="custom-control-input" name="restore_childs" >
|
||||
<span class="custom-control-label">Sollen die Berater dem User wieder zugewiesen werden?</span>
|
||||
</label>
|
||||
<p class="mt-2"><i>Bei der Löschung wurden alle Berater des Users auf dem Sponsor übertragen.</i></p>
|
||||
</div>
|
||||
<hr>
|
||||
<div class="form-group">
|
||||
<label class="custom-control custom-checkbox m-0">
|
||||
<input type="checkbox" class="custom-control-input" name="restore_send_email">
|
||||
<span class="custom-control-label">Dem User eine E-Mail mit den Informationen zum Wiederherstellen senden?</span>
|
||||
</label>
|
||||
<div class="alert alert-info mt-4">
|
||||
Wiederhergestellte User müssen Ihr Passwort zurücksetzen, da das Passwort beim Löschen zurückgesetzt wurde. Auch der Shop-Name (Subdomain) muss neu vergeben werden, da dieser beim Löschen freigegeben wurde.
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-default" data-dismiss="modal">{{ __('close') }}</button>
|
||||
<button type="submit" class="btn btn-primary" name="save-restore"
|
||||
value="save-restore">{{ __('save') }}</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Modal active -->
|
||||
<div class="modal fade" id="modals-active">
|
||||
|
|
@ -150,7 +228,7 @@
|
|||
<div class="form-group col">
|
||||
<label for="active_date" class="form-label">{{ __('Datum') }} seit</label>
|
||||
<input type="text" name="active_date" class="form-control b-material-datetime-picker"
|
||||
placeholder="25.10.2020 10:30">
|
||||
placeholder="Datum">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
|
@ -189,7 +267,7 @@
|
|||
<div class="form-group col">
|
||||
<label for="payment_account" class="form-label">{{ __('tables.account') }} bis</label>
|
||||
<input type="text" name="payment_account" class="form-control b-material-datetime-picker"
|
||||
placeholder="25.10.2020 10:30">
|
||||
placeholder="Datum">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
|
@ -228,7 +306,7 @@
|
|||
<div class="form-group col">
|
||||
<label for="payment_shop" class="form-label">{{ __('tables.shop') }} bis</label>
|
||||
<input type="text" name="payment_shop" class="form-control b-material-datetime-picker"
|
||||
placeholder="25.10.2020 10:30">
|
||||
placeholder="Datum">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -400,6 +478,14 @@
|
|||
$(this).find(".modal-body input[name='active_date']").val(button.data('active_date'));
|
||||
});
|
||||
|
||||
$('#modals-restore').on('show.bs.modal', function(event) {
|
||||
var button = $(event.relatedTarget);
|
||||
$(this).find(".modal-content input[name='id']").val(button.data('id'));
|
||||
$(this).find(".modal-body input[name='email']").val(button.data('email'));
|
||||
$(this).find(".modal-body input[name='active']").prop("checked", button.data('active'));
|
||||
$(this).find(".modal-body input[name='payment_account']").val(button.data('payment_account'));
|
||||
});
|
||||
|
||||
$('#modals-account').on('show.bs.modal', function(event) {
|
||||
var button = $(event.relatedTarget);
|
||||
$(this).find(".modal-content input[name='id']").val(button.data('id'));
|
||||
|
|
|
|||
88
resources/views/dashboard/_news.blade.php
Normal file
88
resources/views/dashboard/_news.blade.php
Normal file
|
|
@ -0,0 +1,88 @@
|
|||
@if(isset($dashboardNews) && $dashboardNews)
|
||||
<div class="d-flex col-xl-12 align-items-stretch">
|
||||
<div class="card w-100 mb-4 border-primary">
|
||||
<h5 class="card-header with-elements bg-primary text-white">
|
||||
<div class="card-header-title">
|
||||
<i class="ion ion-md-megaphone mr-2"></i>
|
||||
{{__('home.news_updates') }}
|
||||
</div>
|
||||
<div class="card-header-elements ml-auto">
|
||||
<span class="badge badge-light">{{ $dashboardNews->getDisplayDateFormatted() }}</span>
|
||||
</div>
|
||||
</h5>
|
||||
<div class="card-body">
|
||||
{{-- Kurzer Teaser Text --}}
|
||||
<div class="news-preview">
|
||||
<h6 class="font-weight-bold mb-2">
|
||||
<i class="ion ion-md-information-circle text-primary mr-1"></i>
|
||||
{{ $dashboardNews->getLang('title') }}
|
||||
</h6>
|
||||
<p class="mb-2">
|
||||
{{ $dashboardNews->getLang('teaser') }}
|
||||
</p>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
{{-- Collapse für mehr Inhalt --}}
|
||||
@if($dashboardNews->getLang('content'))
|
||||
<div class="collapse" id="newsCollapse">
|
||||
<hr class="my-3">
|
||||
<div class="news-full-content">
|
||||
{!! $dashboardNews->getLang('content') !!}
|
||||
</div>
|
||||
|
||||
{{-- Datei-Links --}}
|
||||
@if($dashboardNews->hasFileLinks())
|
||||
<div class="mt-3">
|
||||
<div class="d-flex flex-wrap gap-2">
|
||||
|
||||
@foreach($dashboardNews->getFileLinks() as $linkData)
|
||||
<a href="{{ route('storage_file', [$linkData['file']->id, 'dc_file', 'download']) }}"
|
||||
class="btn btn-sm btn-outline-success"
|
||||
target="_blank"
|
||||
title="{{ $linkData['file']->original_name }}">
|
||||
<i class="ion ion-md-download mr-1"></i>
|
||||
{{ $linkData['label'] }}
|
||||
</a>
|
||||
@endforeach
|
||||
|
||||
<a href="{{ route('user_downloadcenter') }}"
|
||||
class="btn btn-sm btn-outline-success"
|
||||
title="{{ __('navigation.downloadcenter') }}">
|
||||
<i class="ion ion-ios-download mr-1"></i>
|
||||
{{ __('navigation.downloadcenter') }}
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
@endif
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
{{-- Mehr lesen Button --}}
|
||||
<div class="mt-3">
|
||||
<a class="btn btn-sm btn-outline-primary" data-toggle="collapse" href="#newsCollapse" role="button" aria-expanded="false" aria-controls="newsCollapse">
|
||||
<span class="when-closed">
|
||||
<i class="ion ion-md-arrow-dropdown"></i> {{__('home.read_more')}}
|
||||
</span>
|
||||
<span class="when-open">
|
||||
<i class="ion ion-md-arrow-dropup"></i> {{__('home.read_less')}}
|
||||
</span>
|
||||
</a>
|
||||
</div>
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<style>
|
||||
.when-open { display: none; }
|
||||
.when-closed { display: inline; }
|
||||
[aria-expanded="true"] .when-open { display: inline; }
|
||||
[aria-expanded="true"] .when-closed { display: none; }
|
||||
.gap-2 > * { margin-right: 0.5rem; margin-bottom: 0.5rem; }
|
||||
.gap-2 > *:last-child { margin-right: 0; }
|
||||
</style>
|
||||
@endif
|
||||
|
||||
|
|
@ -1,15 +1,31 @@
|
|||
@php
|
||||
$selectedMonth = request()->get('points_month', date('n'));
|
||||
$selectedYear = request()->get('points_year', date('Y'));
|
||||
@endphp
|
||||
<div class="d-flex col-xl-12 align-items-stretch">
|
||||
<div class="card w-100 mb-4">
|
||||
<h5 class="card-header with-elements">
|
||||
<div class="card-header-title">{{__('home.current_points_for') }} {{ HTMLHelper::getMonth(date('n')) }} {{ date('Y') }} </div>
|
||||
<h5 class="card-header with-elements d-flex justify-content-between align-items-center flex-wrap">
|
||||
<div class="card-header-title">{{__('home.current_points_for') }} {{ HTMLHelper::getMonth($selectedMonth) }} {{ $selectedYear }} </div>
|
||||
<div class="d-flex align-items-center mt-2 mt-md-0">
|
||||
<select id="points-month-filter" class="form-control custom-select form-control-sm mr-2" style="width: auto;">
|
||||
@foreach(HTMLHelper::getTransMonths() as $monthNum => $monthName)
|
||||
<option value="{{ $monthNum }}" {{ $selectedMonth == $monthNum ? 'selected' : '' }}>{{ $monthName }}</option>
|
||||
@endforeach
|
||||
</select>
|
||||
<select id="points-year-filter" class="form-control custom-select form-control-sm" style="width: auto;">
|
||||
@foreach(HTMLHelper::getYearRange() as $year)
|
||||
<option value="{{ $year }}" {{ $selectedYear == $year ? 'selected' : '' }}>{{ $year }}</option>
|
||||
@endforeach
|
||||
</select>
|
||||
</div>
|
||||
</h5>
|
||||
<div class="card-body">
|
||||
@if($user->isActiveAccount())
|
||||
<h6>
|
||||
@php($userSalesVolume = $user->getUserSalesVolume(date('n'), date('Y'), 'first'))
|
||||
@php($userSalesVolume = $user->getUserSalesVolume($selectedMonth, $selectedYear, 'first'))
|
||||
@if($userSalesVolume)
|
||||
<div class="mb-2">
|
||||
<strong>{{ __('team.total_points') }}: {{ $userSalesVolume->getPointsKPSum() }}</strong> | {{ __('team.own') }}: {{ $userSalesVolume->month_points }} | {{ __('team.shop') }}: {{ $userSalesVolume->month_shop_points }}<br>
|
||||
<strong>{{ __('team.total_points') }}: {{ formatNumber($userSalesVolume->getPointsKPSum()) }}</strong> | {{ __('team.own') }}: {{ $userSalesVolume->getFormattedMonthKPPoints() }} | {{ __('team.shop') }}: {{ $userSalesVolume->getFormattedMonthShopPoints() }}<br>
|
||||
</div>
|
||||
<div>
|
||||
<strong>{{ __('team.total_turnover') }}: {{ formatNumber($userSalesVolume->getTotalNetSum()) }} €</strong> | {{ __('team.own') }}: {{ formatNumber($userSalesVolume->month_total_net) }} € | {{ __('team.shop') }}: {{ formatNumber($userSalesVolume->month_shop_total_net) }} €
|
||||
|
|
@ -25,12 +41,13 @@
|
|||
<th>{{__('tables.net_sales')}}</th>
|
||||
<th>{{__('tables.type')}}</th>
|
||||
<th>{{__('tables.order')}}</th>
|
||||
<th>{{__('tables.member')}}</th>
|
||||
<th>{{__('tables.info') }}</th>
|
||||
<th>{{__('tables.note') }}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@php($userSalesVolumes = $user->getUserSalesVolume(date('n'), date('Y')))
|
||||
@php($userSalesVolumes = $user->getUserSalesVolume($selectedMonth, $selectedYear, 'get', ['shopping_order.shopping_user']))
|
||||
@if($userSalesVolumes)
|
||||
@foreach ($userSalesVolumes as $userSalesVolume)
|
||||
<tr>
|
||||
|
|
@ -38,7 +55,7 @@
|
|||
{{ $userSalesVolume->date }}
|
||||
</td>
|
||||
<td class="text-left font-weight-semibold">
|
||||
{{ $userSalesVolume->points }}
|
||||
{{ $userSalesVolume->getFormattedPoints() }}
|
||||
</td>
|
||||
<td class="text-left font-weight-semibold">
|
||||
{{ formatNumber($userSalesVolume->total_net) }} €
|
||||
|
|
@ -56,6 +73,13 @@
|
|||
@endif
|
||||
@endif
|
||||
</td>
|
||||
<td class="text-left font-weight-semibold">
|
||||
@if($userSalesVolume->shopping_order && $userSalesVolume->shopping_order->shopping_user)
|
||||
|
||||
<span class="no-line-break"> {{ $userSalesVolume->shopping_order->shopping_user->billing_firstname }} {{ $userSalesVolume->shopping_order->shopping_user->billing_lastname }}<br>
|
||||
<small>{{ $userSalesVolume->shopping_order->shopping_user->billing_email }}</small></span>
|
||||
@endif
|
||||
</td>
|
||||
<td class="text-left font-weight-semibold">
|
||||
<span class="no-line-break"> {{ $userSalesVolume->message }}</span>
|
||||
</td>
|
||||
|
|
@ -93,5 +117,19 @@
|
|||
"url": "/js/datatables-{{ \App::getLocale() }}.json"
|
||||
}
|
||||
});
|
||||
|
||||
// Filter für Monat/Jahr
|
||||
function updatePointsFilter() {
|
||||
var month = $('#points-month-filter').val();
|
||||
var year = $('#points-year-filter').val();
|
||||
var url = new URL(window.location.href);
|
||||
url.searchParams.set('points_month', month);
|
||||
url.searchParams.set('points_year', year);
|
||||
window.location.href = url.toString();
|
||||
}
|
||||
|
||||
$('#points-month-filter, #points-year-filter').on('change', function() {
|
||||
updatePointsFilter();
|
||||
});
|
||||
});
|
||||
</script>
|
||||
246
resources/views/dashboard/_statistics.blade.php
Normal file
246
resources/views/dashboard/_statistics.blade.php
Normal file
|
|
@ -0,0 +1,246 @@
|
|||
@php
|
||||
$selectedMonth = request()->get('stats_month', date('n'));
|
||||
$selectedYear = request()->get('stats_year', date('Y'));
|
||||
|
||||
// Start- und Enddatum für den Monat
|
||||
$startDate = \Carbon\Carbon::createFromDate($selectedYear, $selectedMonth, 1)->startOfMonth();
|
||||
$endDate = \Carbon\Carbon::createFromDate($selectedYear, $selectedMonth, 1)->endOfMonth();
|
||||
|
||||
// UserBusiness für den Monat laden (enthält Payline-Punkte)
|
||||
$userBusiness = \App\Models\UserBusiness::where('user_id', $user->id)
|
||||
->where('month', $selectedMonth)
|
||||
->where('year', $selectedYear)
|
||||
->first();
|
||||
|
||||
// UserSalesVolume für KP-Punkte
|
||||
$userSalesVolume = $user->getUserSalesVolume($selectedMonth, $selectedYear, 'first');
|
||||
|
||||
// Kunden-Umsatz Punkte (KP - Eigene Punkte + Shop)
|
||||
$customerPoints = $userSalesVolume ? $userSalesVolume->getPointsKPSum() : 0;
|
||||
|
||||
// Team-Umsatz Punkte (Payline) - Live-Berechnung wenn UserBusiness nicht verfügbar
|
||||
$teamPaylinePoints = 0;
|
||||
$isLiveCalculation = false;
|
||||
|
||||
if ($userBusiness) {
|
||||
// Gespeicherte Daten aus UserBusiness verwenden
|
||||
$teamPaylinePoints = $userBusiness->payline_points ?? 0;
|
||||
} else {
|
||||
// Live-Berechnung über TreeCalcBot (für aktuellen Monat)
|
||||
$isLiveCalculation = true;
|
||||
try {
|
||||
$treeCalcBot = new \App\Services\BusinessPlan\TreeCalcBot((int)$selectedMonth, (int)$selectedYear, 'member');
|
||||
$treeCalcBot->initBusinesslUserDetail($user);
|
||||
|
||||
if ($treeCalcBot->business_user) {
|
||||
$teamPaylinePoints = $treeCalcBot->business_user->payline_points ?? 0;
|
||||
}
|
||||
} catch (\Exception $e) {
|
||||
\Log::warning("Live-Berechnung Payline-Punkte fehlgeschlagen für User {$user->id}: " . $e->getMessage());
|
||||
$teamPaylinePoints = 0;
|
||||
}
|
||||
}
|
||||
|
||||
// Direkte Neupartner (Firstlines) in diesem Monat
|
||||
$directNewPartners = \App\User::where('m_sponsor', $user->id)
|
||||
->where('active_date', '>=', $startDate)
|
||||
->where('active_date', '<=', $endDate)
|
||||
->where('m_level', '!=', null)
|
||||
->where('payment_account', '!=', null)
|
||||
->count();
|
||||
|
||||
// ===== REKURSIVE TEAM-STRUKTUR =====
|
||||
// Hilfsfunktion um alle Team-Mitglieder rekursiv zu sammeln (inkl. Sponsor-Kette)
|
||||
$getAllTeamMemberIds = function($sponsorId, $maxDepth = 20) use (&$getAllTeamMemberIds) {
|
||||
static $cache = [];
|
||||
|
||||
if (isset($cache[$sponsorId])) {
|
||||
return $cache[$sponsorId];
|
||||
}
|
||||
|
||||
$teamIds = [];
|
||||
$currentLevel = [$sponsorId];
|
||||
$depth = 0;
|
||||
|
||||
while (!empty($currentLevel) && $depth < $maxDepth) {
|
||||
$children = \App\User::whereIn('m_sponsor', $currentLevel)
|
||||
->where('m_level', '!=', null)
|
||||
->where('payment_account', '!=', null)
|
||||
->whereNull('deleted_at')
|
||||
->pluck('id')
|
||||
->toArray();
|
||||
|
||||
$teamIds = array_merge($teamIds, $children);
|
||||
$currentLevel = $children;
|
||||
$depth++;
|
||||
}
|
||||
|
||||
$cache[$sponsorId] = $teamIds;
|
||||
return $teamIds;
|
||||
};
|
||||
|
||||
// Alle Team-Mitglieder rekursiv laden
|
||||
$allTeamMemberIds = $getAllTeamMemberIds($user->id);
|
||||
|
||||
// Neupartner im gesamten Team (rekursiv im Marketingplan)
|
||||
$teamNewPartners = 0;
|
||||
if (!empty($allTeamMemberIds)) {
|
||||
$teamNewPartners = \App\User::whereIn('id', $allTeamMemberIds)
|
||||
->where('active_date', '>=', $startDate)
|
||||
->where('active_date', '<=', $endDate)
|
||||
->count();
|
||||
}
|
||||
|
||||
// Kundenabos (is_for = 'customer' oder shop-bezogen)
|
||||
$customerAbos = \App\Models\UserAbo::where('member_id', $user->id)
|
||||
->where('is_for', 'customer')
|
||||
->whereIn('status', [1, 2]) // aktive Abos
|
||||
->where('active', true)
|
||||
->count();
|
||||
|
||||
// Eigene Abos
|
||||
$ownAbos = \App\Models\UserAbo::where('user_id', $user->id)
|
||||
->where('is_for', 'me')
|
||||
->whereIn('status', [1, 2])
|
||||
->where('active', true)
|
||||
->count();
|
||||
|
||||
// Team-Abos (rekursiv über gesamtes Team im Marketingplan)
|
||||
$teamAbos = 0;
|
||||
if (!empty($allTeamMemberIds)) {
|
||||
$teamAbos = \App\Models\UserAbo::whereIn('user_id', $allTeamMemberIds)
|
||||
->where('is_for', 'me')
|
||||
->whereIn('status', [1, 2])
|
||||
->where('active', true)
|
||||
->count();
|
||||
}
|
||||
@endphp
|
||||
|
||||
@if($user->isActiveAccount())
|
||||
<div class="d-flex col-xl-12 align-items-stretch">
|
||||
<div class="card w-100 mb-4">
|
||||
<h5 class="card-header with-elements d-flex justify-content-between align-items-center flex-wrap">
|
||||
<div class="card-header-title">
|
||||
<i class="ion ion-md-stats mr-2"></i>{{__('home.monthly_statistics') }} - {{ HTMLHelper::getMonth($selectedMonth) }} {{ $selectedYear }}
|
||||
</div>
|
||||
<div class="d-flex align-items-center mt-2 mt-md-0">
|
||||
<select id="stats-month-filter" class="form-control custom-select form-control-sm mr-2" style="width: auto;">
|
||||
@foreach(HTMLHelper::getTransMonths() as $monthNum => $monthName)
|
||||
<option value="{{ $monthNum }}" {{ $selectedMonth == $monthNum ? 'selected' : '' }}>{{ $monthName }}</option>
|
||||
@endforeach
|
||||
</select>
|
||||
<select id="stats-year-filter" class="form-control custom-select form-control-sm" style="width: auto;">
|
||||
@foreach(HTMLHelper::getYearRange() as $year)
|
||||
<option value="{{ $year }}" {{ $selectedYear == $year ? 'selected' : '' }}>{{ $year }}</option>
|
||||
@endforeach
|
||||
</select>
|
||||
</div>
|
||||
</h5>
|
||||
<div class="card-body">
|
||||
<div class="row">
|
||||
{{-- Kunden-Umsatz Punkte --}}
|
||||
<div class="col-md-6 col-lg-4 mb-4">
|
||||
<div class="d-flex align-items-center">
|
||||
<div class="bg-primary text-white rounded-circle d-flex align-items-center justify-content-center" style="width: 50px; height: 50px;">
|
||||
<i class="ion ion-md-cart" style="font-size: 1.5rem;"></i>
|
||||
</div>
|
||||
<div class="ml-3">
|
||||
<div class="text-muted small">{{ __('home.customer_turnover_points') }}</div>
|
||||
<div class="font-weight-bold text-large">{{ number_format($customerPoints, 0, ',', '.') }}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{-- Team-Umsatz Punkte (Payline) --}}
|
||||
<div class="col-md-6 col-lg-4 mb-4">
|
||||
<div class="d-flex align-items-center">
|
||||
<div class="bg-success text-white rounded-circle d-flex align-items-center justify-content-center" style="width: 50px; height: 50px;">
|
||||
<i class="ion ion-md-people" style="font-size: 1.5rem;"></i>
|
||||
</div>
|
||||
<div class="ml-3">
|
||||
<div class="text-muted small">
|
||||
{{ __('home.team_turnover_points') }} (Payline)
|
||||
@if($isLiveCalculation)
|
||||
<span class="badge badge-pill badge-info ml-1" title="{{ __('home.live_calculation_hint') }}">Live</span>
|
||||
@endif
|
||||
</div>
|
||||
<div class="font-weight-bold text-large">{{ number_format($teamPaylinePoints, 0, ',', '.') }}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{-- Direkte Neupartner --}}
|
||||
<div class="col-md-6 col-lg-4 mb-4">
|
||||
<div class="d-flex align-items-center">
|
||||
<div class="bg-info text-white rounded-circle d-flex align-items-center justify-content-center" style="width: 50px; height: 50px;">
|
||||
<i class="ion ion-md-person-add" style="font-size: 1.5rem;"></i>
|
||||
</div>
|
||||
<div class="ml-3">
|
||||
<div class="text-muted small">{{ __('home.direct_new_partners') }}</div>
|
||||
<div class="font-weight-bold text-large">{{ $directNewPartners }}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{-- Neupartner im Team --}}
|
||||
<div class="col-md-6 col-lg-4 mb-4">
|
||||
<div class="d-flex align-items-center">
|
||||
<div class="bg-warning text-white rounded-circle d-flex align-items-center justify-content-center" style="width: 50px; height: 50px;">
|
||||
<i class="ion ion-md-contacts" style="font-size: 1.5rem;"></i>
|
||||
</div>
|
||||
<div class="ml-3">
|
||||
<div class="text-muted small">{{ __('home.team_new_partners') }}</div>
|
||||
<div class="font-weight-bold text-large">{{ $teamNewPartners }}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{-- Kundenabos --}}
|
||||
<div class="col-md-6 col-lg-4 mb-4">
|
||||
<div class="d-flex align-items-center">
|
||||
<div class="bg-secondary text-white rounded-circle d-flex align-items-center justify-content-center" style="width: 50px; height: 50px;">
|
||||
<i class="ion ion-md-repeat" style="font-size: 1.5rem;"></i>
|
||||
</div>
|
||||
<div class="ml-3">
|
||||
<div class="text-muted small">{{ __('home.customer_subscriptions') }}</div>
|
||||
<div class="font-weight-bold text-large">{{ $customerAbos }} + {{ $ownAbos }} {{ __('home.own') }}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{-- Team-Abos --}}
|
||||
<div class="col-md-6 col-lg-4 mb-4">
|
||||
<div class="d-flex align-items-center">
|
||||
<div class="bg-dark text-white rounded-circle d-flex align-items-center justify-content-center" style="width: 50px; height: 50px;">
|
||||
<i class="ion ion-md-sync" style="font-size: 1.5rem;"></i>
|
||||
</div>
|
||||
<div class="ml-3">
|
||||
<div class="text-muted small">{{ __('home.team_subscriptions') }}</div>
|
||||
<div class="font-weight-bold text-large">{{ $teamAbos }}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
// Filter für Monat/Jahr - Statistiken
|
||||
function updateStatsFilter() {
|
||||
var month = $('#stats-month-filter').val();
|
||||
var year = $('#stats-year-filter').val();
|
||||
var url = new URL(window.location.href);
|
||||
url.searchParams.set('stats_month', month);
|
||||
url.searchParams.set('stats_year', year);
|
||||
window.location.href = url.toString();
|
||||
}
|
||||
|
||||
$('#stats-month-filter, #stats-year-filter').on('change', function() {
|
||||
updateStatsFilter();
|
||||
});
|
||||
});
|
||||
</script>
|
||||
@endif
|
||||
|
||||
|
|
@ -337,6 +337,9 @@
|
|||
@if($shopping_order->shopping_user->shipping_address_2)
|
||||
{{ $shopping_order->shopping_user->shipping_address_2 }}<br>
|
||||
@endif
|
||||
@if($shopping_order->shopping_user->shipping_postnumber)
|
||||
<strong>DHL {{ __('payment.dhl_postnumber') }}: {{ $shopping_order->shopping_user->shipping_postnumber }}</strong><br>
|
||||
@endif
|
||||
{{ $shopping_order->shopping_user->shipping_zipcode }}
|
||||
{{ $shopping_order->shopping_user->shipping_city }} <br>
|
||||
{{ $shopping_order->shopping_user->shipping_country->getLocated() }} <br>
|
||||
|
|
@ -455,6 +458,9 @@
|
|||
@if($shopping_order->shopping_user->shipping_address_2)
|
||||
{{ $shopping_order->shopping_user->shipping_address_2 }}<br>
|
||||
@endif
|
||||
@if($shopping_order->shopping_user->shipping_postnumber)
|
||||
<strong>DHL {{ __('payment.dhl_postnumber') }}: {{ $shopping_order->shopping_user->shipping_postnumber }}</strong><br>
|
||||
@endif
|
||||
|
||||
{{ $shopping_order->shopping_user->shipping_zipcode }}
|
||||
{{ $shopping_order->shopping_user->shipping_city }} <br>
|
||||
|
|
|
|||
|
|
@ -158,21 +158,58 @@
|
|||
@if($txaction === 'failed')
|
||||
<b>{{__('email.checkout_mail_pay_error')}}</b><br>
|
||||
@elseif($txaction === 'appointed')
|
||||
|
||||
@if($shopping_payment->clearingtype === "vor")
|
||||
<b>{{__('email.checkout_mail_pay_pre')}}</b><br>
|
||||
{{__('email.checkout_mail_pay_pre_c1')}} {{ number_format( floatval($shopping_payment->amount/100), 2, ",", ".") }} {{__('email.checkout_mail_pay_pre_c2')}}<br>
|
||||
<p>
|
||||
@php($pay_trans = $shopping_payment->payment_transactions->where('request', 'authorization')->last())
|
||||
@if(isset($pay_trans->transmitted_data) && is_array($pay_trans->transmitted_data))
|
||||
<b>{{__('email.checkout_mail_bank_holder')}}</b> @if(isset($pay_trans->transmitted_data['clearing_bankaccountholder'])){{ $pay_trans->transmitted_data['clearing_bankaccountholder'] }} @endif <br>
|
||||
<b>{{__('email.checkout_mail_bank_iban')}}</b> @if(isset($pay_trans->transmitted_data['clearing_bankiban'])) {{ $pay_trans->transmitted_data['clearing_bankiban'] }} @endif<br>
|
||||
<b>{{__('email.checkout_mail_bank_bic')}}</b> @if(isset($pay_trans->transmitted_data['clearing_bankbic'])) {{ $pay_trans->transmitted_data['clearing_bankbic'] }} @endif<br>
|
||||
<b>{{__('email.checkout_mail_bank_name')}}</b> @if(isset($pay_trans->transmitted_data['clearing_bankname'])) {{ $pay_trans->transmitted_data['clearing_bankname'] }} @endif<br>
|
||||
<b>{{__('email.checkout_mail_bank_total')}}</b> @if(isset($pay_trans->shopping_payment->amount)) {{ number_format( (float) ($pay_trans->shopping_payment->amount/100), 2, ",", ".") }} EUR @endif<br>
|
||||
<b>{{__('email.checkout_mail_bank_code')}}</b> @if(isset($pay_trans->transmitted_data['txid'])) {{ $pay_trans->transmitted_data['txid'] }} @endif
|
||||
@if(isset($shopping_payment) && $shopping_payment && $shopping_payment->clearingtype === "vor")
|
||||
@php($pay_trans = $shopping_payment->payment_transactions->where('request', 'authorization')->last())
|
||||
@php($txid = $pay_trans->transmitted_data['txid'] ?? ($pay_trans->txid ?? null))
|
||||
|
||||
{{-- Prominenter Vorkasse-Hinweis mit Bankdaten und TXID --}}
|
||||
<div style="background: #fff8e1; border: 3px solid #ffc107; padding: 20px; margin: 10px 0;">
|
||||
<h3 style="color: #856404; margin: 0 0 15px 0; font-size: 18px;">{{ __('payment.prepayment_important_notice') }}</h3>
|
||||
|
||||
{{-- Bankdaten zuerst --}}
|
||||
<h4 style="margin: 0 0 10px 0; font-size: 16px;">{{ __('payment.prepayment_bank_details') }}:</h4>
|
||||
<div style="background: #fff; border-radius: 8px; padding: 15px; margin-bottom: 15px;">
|
||||
@if(isset($pay_trans->transmitted_data) && is_array($pay_trans->transmitted_data))
|
||||
<table style="width: 100%; border-collapse: collapse;">
|
||||
<tr>
|
||||
<td style="padding: 5px 10px 5px 0; width: 140px;"><strong>{{ __('payment.account_holder') }}:</strong></td>
|
||||
<td style="padding: 5px 0;">@if(isset($pay_trans->transmitted_data['clearing_bankaccountholder'])){{ $pay_trans->transmitted_data['clearing_bankaccountholder'] }} @endif</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="padding: 5px 10px 5px 0;"><strong>{{ __('payment.IBAN') }}:</strong></td>
|
||||
<td style="padding: 5px 0; font-family: monospace; letter-spacing: 1px;">@if(isset($pay_trans->transmitted_data['clearing_bankiban'])){{ $pay_trans->transmitted_data['clearing_bankiban'] }} @endif</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="padding: 5px 10px 5px 0;"><strong>{{ __('payment.BIC') }}:</strong></td>
|
||||
<td style="padding: 5px 0; font-family: monospace;">@if(isset($pay_trans->transmitted_data['clearing_bankbic'])){{ $pay_trans->transmitted_data['clearing_bankbic'] }} @endif</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="padding: 5px 10px 5px 0;"><strong>{{ __('payment.bank') }}:</strong></td>
|
||||
<td style="padding: 5px 0;">@if(isset($pay_trans->transmitted_data['clearing_bankname'])){{ $pay_trans->transmitted_data['clearing_bankname'] }} @endif</td>
|
||||
</tr>
|
||||
<tr style="border-top: 1px solid #ffc107;">
|
||||
<td style="padding: 10px 10px 5px 0;"><strong>{{ __('payment.total_amount') }}:</strong></td>
|
||||
<td style="padding: 10px 0 5px 0; font-size: 18px; font-weight: bold; color: #d35400;">@if(isset($pay_trans->shopping_payment->amount)){{ number_format( (float) ($pay_trans->shopping_payment->amount/100), 2, ",", ".") }} EUR @endif</td>
|
||||
</tr>
|
||||
</table>
|
||||
@endif
|
||||
</div>
|
||||
|
||||
<hr style="border: none; border-top: 1px solid #ffc107; margin: 15px 0;">
|
||||
|
||||
{{-- Dann TXID Hinweis --}}
|
||||
<p style="margin-bottom: 10px;">{{ __('payment.prepayment_reference_notice') }}</p>
|
||||
|
||||
@if($txid)
|
||||
<div style="background: #fff; border: 3px dashed #ffc107; padding: 20px; text-align: center; margin: 15px 0; border-radius: 8px;">
|
||||
<strong style="font-size: 16px; color: #333;">{{ __('payment.prepayment_txid') }}:</strong><br>
|
||||
<span style="font-size: 28px; font-weight: bold; color: #d35400; letter-spacing: 3px; display: block; margin-top: 10px;">{{ $txid }}</span>
|
||||
</div>
|
||||
@endif
|
||||
</p>
|
||||
|
||||
<p style="margin: 15px 0;"><strong>{{ __('payment.prepayment_reference_only') }}</strong></p>
|
||||
<p style="margin: 0; color: #666; font-style: italic;">{{ __('payment.prepayment_waiting_payment') }}</p>
|
||||
</div>
|
||||
<hr />
|
||||
@else
|
||||
<b>{{__('email.checkout_mail_pay_approved')}}</b><br>
|
||||
|
|
@ -339,6 +376,9 @@
|
|||
@if($shopping_order->shopping_user->shipping_address_2)
|
||||
{{ $shopping_order->shopping_user->shipping_address_2 }}<br>
|
||||
@endif
|
||||
@if($shopping_order->shopping_user->shipping_postnumber)
|
||||
<strong>DHL {{ __('payment.dhl_postnumber') }}: {{ $shopping_order->shopping_user->shipping_postnumber }}</strong><br>
|
||||
@endif
|
||||
{{ $shopping_order->shopping_user->shipping_zipcode }}
|
||||
{{ $shopping_order->shopping_user->shipping_city }} <br>
|
||||
{{ $shopping_order->shopping_user->shipping_country->getLocated() }} <br>
|
||||
|
|
|
|||
|
|
@ -261,6 +261,9 @@
|
|||
@if($shopping_user->shipping_phone)
|
||||
<br> {{ $shopping_user->shipping_phone }}<br>
|
||||
@endif
|
||||
@if($shopping_user->shipping_postnumber)
|
||||
<strong>DHL {{ __('payment.dhl_postnumber') }}: {{ $shopping_user->shipping_postnumber }}</strong><br>
|
||||
@endif
|
||||
@endif
|
||||
</td>
|
||||
</tr>
|
||||
|
|
|
|||
241
resources/views/emails/dhl_tracking.blade.php
Normal file
241
resources/views/emails/dhl_tracking.blade.php
Normal file
|
|
@ -0,0 +1,241 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||
<title>{{ __('email.dhl_tracking_subject') }}</title>
|
||||
|
||||
<style type="text/css">
|
||||
img {
|
||||
max-width: 600px;
|
||||
outline: none;
|
||||
text-decoration: none;
|
||||
-ms-interpolation-mode: bicubic;
|
||||
}
|
||||
|
||||
a {
|
||||
text-decoration: none;
|
||||
border: 0;
|
||||
outline: none;
|
||||
color: #919f7a;
|
||||
}
|
||||
a:hover {
|
||||
color: #b6b600;
|
||||
}
|
||||
a img {
|
||||
border: none;
|
||||
}
|
||||
|
||||
td, h1, h2, h3 {
|
||||
font-family: Helvetica, Verdana, Arial, sans-serif;
|
||||
font-weight: 400;
|
||||
}
|
||||
|
||||
td {
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
body {
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-webkit-text-size-adjust: none;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
color: #37302d;
|
||||
background: #ffffff;
|
||||
font-size: 15px;
|
||||
line-height: 26px
|
||||
}
|
||||
|
||||
table {
|
||||
border-collapse: separate !important;
|
||||
}
|
||||
|
||||
.headline {
|
||||
color: #37302d;
|
||||
font-size: 18px;
|
||||
}
|
||||
|
||||
.sub_headline {
|
||||
color: #788662;
|
||||
font-size: 15px;
|
||||
}
|
||||
|
||||
.force-full-width {
|
||||
width: 100% !important;
|
||||
}
|
||||
|
||||
hr {
|
||||
border: none;
|
||||
border-top: 1px solid #b7c59e;
|
||||
}
|
||||
|
||||
.tracking-box {
|
||||
background-color: #f6fdf5;
|
||||
border: 2px solid #b5c49b;
|
||||
border-radius: 8px;
|
||||
padding: 20px;
|
||||
text-align: center;
|
||||
margin: 20px 0;
|
||||
}
|
||||
|
||||
.tracking-number {
|
||||
font-size: 20px;
|
||||
font-weight: bold;
|
||||
color: #37302d;
|
||||
letter-spacing: 2px;
|
||||
margin: 10px 0;
|
||||
}
|
||||
|
||||
</style>
|
||||
<style type="text/css" media="screen">
|
||||
@media screen {
|
||||
td, h1, h2, h3 {
|
||||
font-family: Helvetica, Verdana, Arial, sans-serif;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
<style type="text/css" media="only screen and (max-width: 480px)">
|
||||
@media only screen and (max-width: 480px) {
|
||||
|
||||
table[class="w320"] {
|
||||
width: 320px !important;
|
||||
}
|
||||
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body class="body" style="padding:0; margin:0; display:block; background:#f8f8f8; -webkit-text-size-adjust:none" bgcolor="#f8f8f8">
|
||||
<div style="display: none; mso-hide: all; width: 0px; height: 0px; max-width: 0px; max-height: 0px; font-size: 0px; line-height: 0px;">
|
||||
{{ __('email.dhl_tracking_preview', ['number' => $trackingNumber]) }}
|
||||
</div>
|
||||
<table align="left" cellpadding="0" cellspacing="0" width="100%" height="100%">
|
||||
<tr>
|
||||
<td align="left" valign="top" bgcolor="#f8f8f8" width="100%">
|
||||
<br>
|
||||
<table style="margin: 0 auto;" cellpadding="0" cellspacing="0" width="700" class="w320">
|
||||
<tr>
|
||||
<td align="left" valign="top">
|
||||
<table style="margin: 0 auto;" cellpadding="0" cellspacing="0" width="100%">
|
||||
<tr>
|
||||
<td style=" text-align:center;">
|
||||
<center>
|
||||
<table width="100%" cellpadding="0" cellspacing="0" border="0" class="">
|
||||
<tbody class="">
|
||||
<tr class="">
|
||||
<td align="center" valign="middle" style="font-size: 0px;" class="">
|
||||
<center>
|
||||
<picture style="text-align: center">
|
||||
<img src="https://my.mivita.care/images/logo_mivita.png" alt="mivita.care" style="border:none" width="230">
|
||||
</picture>
|
||||
</center>
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><br></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</center>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<table cellpadding="10" style="padding: 10px;" cellspacing="0" border="0" width="100%" bgcolor="#ffffff">
|
||||
<tr>
|
||||
<td class="headline">
|
||||
<b>{{ __('email.dhl_tracking_title') }}</b>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="color:#37302d;line-height:1.6em;">
|
||||
{{ $salutation }},
|
||||
<br><br>
|
||||
@if($shipments->count() > 1)
|
||||
{{ __('email.dhl_tracking_message_multiple', ['count' => $shipments->count()]) }}
|
||||
@else
|
||||
{{ __('email.dhl_tracking_message') }}
|
||||
@endif
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
@foreach($shipments as $index => $singleShipment)
|
||||
<tr>
|
||||
<td>
|
||||
<table style="background-color: #f6fdf5; border: 2px solid #b5c49b; border-radius: 8px; padding: 20px; text-align: center; margin: 20px 0;" cellpadding="15" cellspacing="0" width="100%">
|
||||
@if($shipments->count() > 1)
|
||||
<tr>
|
||||
<td style="text-align: center; color: #37302d; font-size: 16px; font-weight: bold;">
|
||||
{{ __('email.dhl_tracking_package_label', ['number' => $index + 1]) }}
|
||||
</td>
|
||||
</tr>
|
||||
@endif
|
||||
<tr>
|
||||
<td style="text-align: center; color: #788662; font-size: 14px;">
|
||||
{{ __('email.dhl_tracking_number_label') }}
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="text-align: center; font-size: 20px; font-weight: bold; color: #37302d; letter-spacing: 2px;">
|
||||
{{ $singleShipment->dhl_shipment_no }}
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="text-align: center; color: #788662; font-size: 13px;">
|
||||
{{ __('email.dhl_tracking_order_ref', ['order' => $orderNumber]) }}
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="text-align: center; padding-top: 10px;">
|
||||
<a href="{{ $singleShipment->getTrackingUrl() }}" style="display: inline-block; background: #FFCC00; color: #37302d; padding: 10px 20px; text-decoration: none; border-radius: 5px; font-weight: bold; font-size: 13px;">
|
||||
{{ __('email.dhl_tracking_button') }}
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
@endforeach
|
||||
<tr>
|
||||
<td style="color:#37302d;line-height:1.6em;">
|
||||
<br>
|
||||
{{ __('email.dhl_tracking_info') }}
|
||||
<br><br>
|
||||
{{ $greetings }}<br>
|
||||
{{ $sender }}
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<center>
|
||||
<table cellpadding="0" cellspacing="0" class="force-full-width"
|
||||
bgcolor="#f8f8f8" style="margin: 0 auto; text-align: center;line-height:1.6em;">
|
||||
<tr>
|
||||
<td style="color:#7B7B7E; font-size:14px; text-align: center;line-height:1.6em;" align="center">
|
||||
<p>
|
||||
{{__('email.footer_copy1')}}
|
||||
</p>
|
||||
<br>
|
||||
<a href="https://www.mivita.care" style="color: #7B7B7E; text-decoration: underline;">www.mivita.care</a>
|
||||
<br>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="color:#bbbbbb; font-size:12px; text-align: center;line-height:1.6em;" align="center">
|
||||
<p>{{__('email.footer_copy2')}}</p>
|
||||
<a href="https://www.mivita.care/datenschutz">{{ __('dataprotect.data_protect') }}</a> <br>
|
||||
<p>{{__('email.footer_copy3')}}</p>
|
||||
<br>
|
||||
<br>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</center>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</body>
|
||||
</html>
|
||||
252
resources/views/emails/user_restore.blade.php
Normal file
252
resources/views/emails/user_restore.blade.php
Normal file
|
|
@ -0,0 +1,252 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||
<title>mivita.care</title>
|
||||
|
||||
<style type="text/css">
|
||||
img {
|
||||
max-width: 600px;
|
||||
outline: none;
|
||||
text-decoration: none;
|
||||
-ms-interpolation-mode: bicubic;
|
||||
}
|
||||
|
||||
a {
|
||||
text-decoration: none;
|
||||
border: 0;
|
||||
outline: none;
|
||||
color: #919f7a;
|
||||
}
|
||||
a:hover {
|
||||
color: #b6b600;
|
||||
}
|
||||
a img {
|
||||
border: none;
|
||||
}
|
||||
|
||||
td, h1, h2, h3 {
|
||||
font-family: Helvetica, Verdana, Arial, sans-serif;
|
||||
font-weight: 400;
|
||||
}
|
||||
|
||||
td {
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
body {
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-webkit-text-size-adjust: none;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
color: #37302d;
|
||||
background: #ffffff;
|
||||
font-size: 15px;
|
||||
line-height: 26px
|
||||
}
|
||||
|
||||
table {
|
||||
border-collapse: separate !important;
|
||||
}
|
||||
|
||||
.headline {
|
||||
color: #37302d;
|
||||
font-size: 18px;
|
||||
}
|
||||
|
||||
.sub_headline {
|
||||
color: #788662;
|
||||
font-size: 15px;
|
||||
}
|
||||
|
||||
.force-full-width {
|
||||
width: 100% !important;
|
||||
}
|
||||
|
||||
hr {
|
||||
border: none;
|
||||
border-top: 1px solid #b7c59e;
|
||||
}
|
||||
|
||||
</style>
|
||||
<style type="text/css" media="screen">
|
||||
@media screen {
|
||||
td, h1, h2, h3 {
|
||||
font-family: Helvetica, Verdana, Arial, sans-serif;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
<style type="text/css" media="only screen and (max-width: 480px)">
|
||||
@media only screen and (max-width: 480px) {
|
||||
|
||||
table[class="w320"] {
|
||||
width: 320px !important;
|
||||
}
|
||||
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body class="body" style="padding:0; margin:0; display:block; background:#f8f8f8; -webkit-text-size-adjust:none" bgcolor="#f8f8f8">
|
||||
@if(isset($copy1line))
|
||||
<div style="display: none; mso-hide: all; width: 0px; height: 0px; max-width: 0px; max-height: 0px; font-size: 0px; line-height: 0px;">
|
||||
{{ $copy1line }}
|
||||
</div>
|
||||
@endif
|
||||
<table align="left" cellpadding="0" cellspacing="0" width="100%" height="100%">
|
||||
<tr>
|
||||
<td align="left" valign="top" bgcolor="#f8f8f8" width="100%">
|
||||
<br>
|
||||
<table style="margin: 0 auto;" cellpadding="0" cellspacing="0" width="700" class="w320">
|
||||
<tr>
|
||||
<td align="left" valign="top">
|
||||
<table style="margin: 0 auto;" cellpadding="0" cellspacing="0" width="100%">
|
||||
<tr>
|
||||
<td style=" text-align:center;">
|
||||
<center>
|
||||
<table width="100%" cellpadding="0" cellspacing="0" border="0" class="">
|
||||
<tbody class="">
|
||||
<tr class="">
|
||||
<td align="center" valign="middle" style="font-size: 0px;" class="">
|
||||
<center>
|
||||
<picture style="text-align: center">
|
||||
<img src="https://my.mivita.care/images/logo_mivita.png" alt="mivita.care" style="border:none" width="230">
|
||||
</picture>
|
||||
</center>
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><br></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</center>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<table cellpadding="10" style="padding: 10px;" cellspacing="0" border="0" width="100%" bgcolor="#ffffff">
|
||||
@if(isset($title))
|
||||
<tr>
|
||||
<td class="headline">
|
||||
<b>{{ $title }}</b>
|
||||
</td>
|
||||
</tr>
|
||||
@endif
|
||||
@if(isset($greeting))
|
||||
<tr>
|
||||
<td style="color:#37302d;line-height:1.6em;">
|
||||
{!! $greeting !!}
|
||||
</td>
|
||||
</tr>
|
||||
@endif
|
||||
@if(isset($copy1line))
|
||||
<tr>
|
||||
<td style="color:#37302d;line-height:1.6em;">
|
||||
{!! nl2br($copy1line) !!}
|
||||
</td>
|
||||
</tr>
|
||||
@endif
|
||||
@if(isset($payment_account_date))
|
||||
<tr>
|
||||
<td>
|
||||
<table style="padding: 20px; border:1px solid #eee; background-color: #e8f5e9;line-height:1.6em;" cellpadding="2" cellspacing="0" width="100%">
|
||||
<tr>
|
||||
<td>
|
||||
<strong>{{ __('email.user_restore_account_valid') }}</strong><br>
|
||||
<span style="font-size: 18px; color: #2e7d32;">{{ $payment_account_date }}</span>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
@endif
|
||||
@if(isset($copy2line))
|
||||
<tr>
|
||||
<td style="color:#37302d;line-height:1.6em;">
|
||||
{!! nl2br($copy2line) !!}
|
||||
</td>
|
||||
</tr>
|
||||
@endif
|
||||
@if(isset($reset_password_url))
|
||||
<tr>
|
||||
<td>
|
||||
<center>
|
||||
<table role="presentation" cellpadding="0" cellspacing="0" width="100%" border="0">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td style="word-wrap:break-word;background:transparent;font-size:0px;padding:10px 25px;padding-top:15px;padding-bottom:15px;padding-right:40px;padding-left:40px;" align="center" valign="top" background="data:image/gif;base64,">
|
||||
<table role="presentation" cellpadding="0" cellspacing="0" align="center" border="0">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td style="border:none;border-radius:20px;color:#ffffff;cursor:auto;padding:15px 25px;" align="center" valign="middle" bgcolor="#b5c49b">
|
||||
<p style="text-decoration:none;background:#b5c49b;color:#ffffff;font-family:Arial, sans-serif;font-size:13px;font-weight:normal;line-height:120%;text-transform:none;margin:0px;text-align: center">
|
||||
<a href="{{ $reset_password_url }}" style="color:#ffffff;font-size:14px;font-weight:bold;text-align:center;text-decoration:none;-webkit-text-size-adjust:none;">{{ __('email.user_restore_button') }}</a>
|
||||
</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="color:#37302d;text-align: center">
|
||||
<span style="color: #cabda9; font-weight: normal; font-size: 13px; text-decoration: underline; word-wrap: break-word;white-space: pre-line;">{{ $reset_password_url }}</span>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</center>
|
||||
</td>
|
||||
<tr>
|
||||
@endif
|
||||
@if(isset($copy3line))
|
||||
<tr>
|
||||
<td>
|
||||
<table style="padding: 20px; border:1px solid #eee; background-color: #fff3e0;line-height:1.6em;" cellpadding="2" cellspacing="0" width="100%">
|
||||
<tr>
|
||||
<td>
|
||||
<strong>{{ __('email.user_restore_important') }}</strong><br>
|
||||
{!! nl2br($copy3line) !!}
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
@endif
|
||||
</table>
|
||||
<center>
|
||||
<table cellpadding="0" cellspacing="0" class="force-full-width"
|
||||
bgcolor="#f8f8f8" style="margin: 0 auto; text-align: center;line-height:1.6em;">
|
||||
<tr>
|
||||
<td style="color:#7B7B7E; font-size:14px; text-align: center;line-height:1.6em;" align="center">
|
||||
<p>
|
||||
{{__('email.footer_copy1')}}
|
||||
</p>
|
||||
<br>
|
||||
<a href="https://www.mivita.care" style="color: #7B7B7E; text-decoration: underline;">www.mivita.care</a>
|
||||
<br>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="color:#bbbbbb; font-size:12px; text-align: center;line-height:1.6em;" align="center">
|
||||
<p>{{__('email.footer_copy2')}}</p>
|
||||
<a href="https://www.mivita.care/datenschutz">{{ __('dataprotect.data_protect') }}</a> <br>
|
||||
<p>{{__('email.footer_copy3')}}</p>
|
||||
<br>
|
||||
<br>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</center>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
|
|
@ -26,6 +26,8 @@
|
|||
<hr class="container-m-nx mt-0 mb-4">
|
||||
|
||||
<div class="row">
|
||||
|
||||
@include('dashboard._news')
|
||||
|
||||
@include('dashboard._reminder')
|
||||
|
||||
|
|
@ -33,6 +35,8 @@
|
|||
|
||||
@include('dashboard._shop')
|
||||
|
||||
@include('dashboard._statistics')
|
||||
|
||||
@include('dashboard._points')
|
||||
|
||||
@include('dashboard._activities')
|
||||
|
|
|
|||
|
|
@ -116,13 +116,25 @@
|
|||
<div>{{ __('navigation.structure') }}</div>
|
||||
</a>
|
||||
</li>
|
||||
<li class="sidenav-item{{ Request::is('user/team/abos') ? ' active' : '' }}">
|
||||
<a href="{{ route('user_team_abos_show') }}" class="sidenav-link"><i
|
||||
class="sidenav-icon ion ion-ios-refresh-circle"></i>
|
||||
<div>{{ __('navigation.abos') }}</div>
|
||||
</a>
|
||||
</li>
|
||||
<li class="sidenav-item{{ Request::is('user/team/level-reports') ? ' active' : '' }}">
|
||||
<a href="{{ route('user_team_level_reports') }}" class="sidenav-link"><i
|
||||
class="sidenav-icon ion ion-ios-stats"></i>
|
||||
<div>{{ __('navigation.level_reports') }}</div>
|
||||
</a>
|
||||
</li>
|
||||
<li class="sidenav-item{{ Request::is('user/team/marketingplan') ? ' active' : '' }}">
|
||||
<a href="{{ route('user_team_marketingplan') }}" class="sidenav-link"><i
|
||||
class="sidenav-icon ion ion-ios-trending-up"></i>
|
||||
<div>{{ __('navigation.marketingplan') }}</div>
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
@if (Auth::user()->isVIP())
|
||||
<li class="sidenav-item{{ Request::is('user/team/export') ? ' active' : '' }}">
|
||||
<a href="{{ route('user_team_export') }}" class="sidenav-link"><i
|
||||
|
|
@ -442,18 +454,25 @@
|
|||
</li>
|
||||
|
||||
|
||||
<li class="sidenav-item @if (Request::is('admin/sites/*')) open @endif">
|
||||
<li class="sidenav-item @if (Request::is('admin/sites/*', 'admin/dashboard-news*')) open @endif">
|
||||
<a href="javascript:void(0)" class="sidenav-link sidenav-toggle">
|
||||
<i class="sidenav-icon ion ion-md-albums"></i>
|
||||
<div>{{ __('navigation.contents') }}</div>
|
||||
</a>
|
||||
<ul class="sidenav-menu">
|
||||
<li class="sidenav-item{{ Request::is('admin/dashboard-news*') ? ' active' : '' }}">
|
||||
<a href="{{ route('admin_dashboard_news') }}" class="sidenav-link"><i
|
||||
class="sidenav-icon ion ion-md-megaphone"></i>
|
||||
<div>{{ __('navigation.dashboard_news') }}</div>
|
||||
</a>
|
||||
</li>
|
||||
<li class="sidenav-item{{ Request::is('admin/sites/start') ? ' active' : '' }}">
|
||||
<a href="{{ route('admin_sites', ['start']) }}" class="sidenav-link"><i
|
||||
class="sidenav-icon ion ion-ios-document"></i>
|
||||
<div>{{ __('navigation.start_site') }}</div>
|
||||
</a>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@
|
|||
$( document ).ready(function() {
|
||||
$.growl.error({
|
||||
title: "{{__('error')}}",
|
||||
message: '{{ Session::get('alert-error') }}',
|
||||
message: '{!! Session::get('alert-error') !!}',
|
||||
location: 'tr'
|
||||
});
|
||||
});
|
||||
|
|
@ -31,7 +31,7 @@
|
|||
$( document ).ready(function() {
|
||||
$.growl({
|
||||
title: "{{__('saved')}}",
|
||||
message: '{{ Session::get('alert-success') }}',
|
||||
message: '{!! Session::get('alert-success') !!}',
|
||||
location: 'tr'
|
||||
});
|
||||
});
|
||||
|
|
|
|||
|
|
@ -636,7 +636,7 @@
|
|||
@foreach ($cr->user_sales_volumes as $user_sales_volume)
|
||||
<tr>
|
||||
<td>{{ $user_sales_volume->date }}</td>
|
||||
<td>{{ $user_sales_volume->points }}</td>
|
||||
<td>{{ $user_sales_volume->getFormattedPoints() }}</td>
|
||||
<td>{{ $user_sales_volume->info }}</td>
|
||||
</tr>
|
||||
@endforeach
|
||||
|
|
@ -656,7 +656,7 @@
|
|||
|
||||
|
||||
@if (isset($cbot))
|
||||
{{-- Payline Points / Provision / Wachstumsbonus
|
||||
{{-- Payline Points / Provision / Tiefenbonus
|
||||
<div class="card-header">
|
||||
<table class="table user-view-table m-0">
|
||||
<tbody>
|
||||
|
|
@ -687,7 +687,7 @@
|
|||
<hr>
|
||||
--}}
|
||||
|
||||
{{-- Payline Points / Provision / Wachstumsbonus
|
||||
{{-- Payline Points / Provision / Tiefenbonus
|
||||
|
||||
<div class="card-header">
|
||||
<table class="table user-view-table m-0">
|
||||
|
|
@ -737,7 +737,7 @@
|
|||
</div>
|
||||
--}}
|
||||
|
||||
{{-- Table Payline Points / Provision / Wachstumsbonus
|
||||
{{-- Table Payline Points / Provision / Tiefenbonus
|
||||
<div class="card-body table-responsive pt-0 pb-0">
|
||||
<table class="datatables-style table table-striped ">
|
||||
<thead>
|
||||
|
|
|
|||
|
|
@ -507,7 +507,7 @@
|
|||
<td>{{ $user_sales_volume->date }}</td>
|
||||
<td>{{ $user_sales_volume->getStatusType() }}</td>
|
||||
<td>{{ formatNumber($user_sales_volume->total_net) }} €</td>
|
||||
<td>{{ $user_sales_volume->points }}</td>
|
||||
<td>{{ $user_sales_volume->getFormattedPoints() }}</td>
|
||||
<td>{{ $user_sales_volume->getStatusPointsType() }}</td>
|
||||
<td>{{ $user_sales_volume->getStatusTurnoverType() }}</td>
|
||||
<td>
|
||||
|
|
@ -581,7 +581,7 @@
|
|||
<td>{{ $user_sales_volume->date }}</td>
|
||||
<td>{{ $user_sales_volume->getStatusType() }}</td>
|
||||
<td>{{ formatNumber($user_sales_volume->total_net) }} €</td>
|
||||
<td>{{ $user_sales_volume->points }}</td>
|
||||
<td>{{ $user_sales_volume->getFormattedPoints() }}</td>
|
||||
<td>{{ $user_sales_volume->getStatusPointsType() }}</td>
|
||||
<td>{{ $user_sales_volume->getStatusTurnoverType() }}</td>
|
||||
<td>
|
||||
|
|
@ -663,7 +663,7 @@
|
|||
<td>{{ $user_sales_volume->id }}</td>
|
||||
<td>{{ $user_sales_volume->date }}</td>
|
||||
<td>{{ $user_sales_volume->getStatusType() }}</td>
|
||||
<td>{{ $user_sales_volume->points }}</td>
|
||||
<td>{{ $user_sales_volume->getFormattedPoints() }}</td>
|
||||
<td>{{ $user_sales_volume->getStatusPointsType() }}</td>
|
||||
<td>{{ $user_sales_volume->getStatusTurnoverType() }}</td>
|
||||
<td>{{ $user_sales_volume->info }}</td>
|
||||
|
|
@ -718,7 +718,7 @@
|
|||
</div>
|
||||
––}}
|
||||
|
||||
{{-- Payline Points / Provision / Wachstumsbonus
|
||||
{{-- Payline Points / Provision / Tiefenbonus
|
||||
<div class="page-break">
|
||||
<div class="card-header">
|
||||
<table class="table user-view-table m-0">
|
||||
|
|
|
|||
|
|
@ -22,6 +22,22 @@
|
|||
{{ cleanIntegerFromString($shopping_order_item->qty) }}
|
||||
</td>
|
||||
</tr>
|
||||
{{-- Bundle-Items: Enthaltene Produkte im Set/Kit auflisten --}}
|
||||
@if($shopping_order_item->product->bundleItems && $shopping_order_item->product->bundleItems->count() > 0)
|
||||
@foreach($shopping_order_item->product->bundleItems as $bundleItem)
|
||||
<tr class="item" style="background-color: #f9f9f9;">
|
||||
<td class="small text-left" style="padding-left: 5mm; color: #666;">
|
||||
{{ $bundleItem->number }}
|
||||
</td>
|
||||
<td class="small text-left" style="color: #666;">
|
||||
<span style="font-size: 0.9em;">↳ {{ $bundleItem->pivot->quantity }}x {{ maxStrLength($bundleItem->getLang('name'), 30) }}</span>
|
||||
</td>
|
||||
<td class="text-right small" style="color: #999;">
|
||||
-
|
||||
</td>
|
||||
</tr>
|
||||
@endforeach
|
||||
@endif
|
||||
@endforeach
|
||||
</tbody>
|
||||
</table>
|
||||
|
|
|
|||
|
|
@ -300,6 +300,9 @@
|
|||
@if($shopping_order->shopping_user->shipping_address_2)
|
||||
{{ $shopping_order->shopping_user->shipping_address_2 }}<br>
|
||||
@endif
|
||||
@if($shopping_order->shopping_user->shipping_postnumber)
|
||||
<strong>{{ __('payment.dhl_postnumber') }}: {{ $shopping_order->shopping_user->shipping_postnumber }}</strong><br>
|
||||
@endif
|
||||
{{ $shopping_order->shopping_user->shipping_zipcode }} {{ $shopping_order->shopping_user->shipping_city }}<br>
|
||||
@if($shopping_order->shopping_user->shipping_country)
|
||||
{{ $shopping_order->shopping_user->shipping_country->getLocated() }}
|
||||
|
|
@ -314,7 +317,7 @@
|
|||
<td class="text-right">{{ $invoice_date }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="text-left">{{ __('pdf.delivery_note_no.') }}:</td>
|
||||
<td class="text-left">{{ __('pdf.invoice_nr') }}:</td>
|
||||
<td class="text-right">{{ $invoice_number }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
|
|
|
|||
|
|
@ -75,7 +75,7 @@
|
|||
<b>{{ __('order.sums') }}</b>
|
||||
</td>
|
||||
<td class="text-right">
|
||||
<strong>{{ $shopping_order->shopping_collect_order->points }} <strong>
|
||||
<strong>{{ $shopping_order->shopping_collect_order->getFormattedPoints() }} <strong>
|
||||
</td>
|
||||
<td class="text-right">
|
||||
</td>
|
||||
|
|
|
|||
|
|
@ -54,8 +54,8 @@
|
|||
<td class="text-right small">
|
||||
{{ cleanIntegerFromString($shopping_order_item->qty) }}
|
||||
</td>
|
||||
<td class="text-right small">
|
||||
{{ $shopping_order_item->points }}
|
||||
<td class="text-right small">
|
||||
{{ $shopping_order_item->getFormattedPoints() }}
|
||||
</td>
|
||||
<td class="text-right small">
|
||||
@if($shopping_order_item->price > 0)
|
||||
|
|
@ -70,6 +70,31 @@
|
|||
@endif
|
||||
|
||||
</tr>
|
||||
{{-- Bundle-Items: Enthaltene Produkte im Set/Kit auflisten --}}
|
||||
@if($shopping_order_item->product->bundleItems && $shopping_order_item->product->bundleItems->count() > 0)
|
||||
@foreach($shopping_order_item->product->bundleItems as $bundleItem)
|
||||
<tr class="item" style="background-color: #f9f9f9;">
|
||||
<td class="small text-left" style="padding-left: 5mm; color: #666;">
|
||||
{{ $bundleItem->number }}
|
||||
</td>
|
||||
<td class="small text-left" style="color: #666;">
|
||||
<span style="font-size: 0.9em;">{{ $bundleItem->pivot->quantity }}x {{ maxStrLength($bundleItem->getLang('name'), 30) }}</span>
|
||||
</td>
|
||||
@if($shopping_order->payment_for === 6)
|
||||
<td class="text-right small" style="color: #999;">-</td>
|
||||
<td class="text-right small" style="color: #999;">-</td>
|
||||
<td class="text-right small" style="color: #999;">-</td>
|
||||
<td class="text-right small" style="color: #999;">-</td>
|
||||
@else
|
||||
<td class="text-right small" style="color: #999;">-</td>
|
||||
<td class="text-right small" style="color: #999;">-</td>
|
||||
<td class="text-right small" style="color: #999;">-</td>
|
||||
<td class="text-right small" style="color: #999;">-</td>
|
||||
<td class="text-right small" style="color: #999;">-</td>
|
||||
@endif
|
||||
</tr>
|
||||
@endforeach
|
||||
@endif
|
||||
@endforeach
|
||||
</tbody>
|
||||
<tfoot>
|
||||
|
|
|
|||
|
|
@ -72,7 +72,7 @@
|
|||
<td colspan="4">
|
||||
<b>Bestellnummer: {{ $order['order_id'] }}</b> |
|
||||
WP Number: {{ $order['wp_order_number'] }} |
|
||||
Points: {{ $order['shopping_order']->points }}
|
||||
Points: {{ $order['shopping_order']->getFormattedPoints() }}
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="bg-grey">
|
||||
|
|
|
|||
|
|
@ -340,15 +340,15 @@
|
|||
@if(isset($user_sales_volume))
|
||||
<tr>
|
||||
<td class="text-left">{{ __('pdf.points_order') }}:</td>
|
||||
<td class="text-right">{{ $user_sales_volume->points }}</td>
|
||||
<td class="text-right">{{ $user_sales_volume->getFormattedPoints() }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="text-left">{{ __('pdf.points') }} {{ $user_sales_volume->getFormatedMonthYear() }}:</td>
|
||||
<td class="text-right">{{ $user_sales_volume->month_points }}</td>
|
||||
<td class="text-right">{{ $user_sales_volume->getFormattedMonthKPPoints() }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="text-left">{{ __('pdf.points_shop') }} {{ $user_sales_volume->getFormatedMonthYear() }}:</td>
|
||||
<td class="text-right">{{ $user_sales_volume->month_shop_points }}</td>
|
||||
<td class="text-right">{{ $user_sales_volume->getFormattedMonthShopPoints() }}</td>
|
||||
</tr>
|
||||
@endif
|
||||
<tr>
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
@include('portal.abo.componenten.vat-info')
|
||||
|
||||
<div class="alert alert-warning">
|
||||
<strong>{!! __('abo.abo_type_info', ['base'=>get_abo_type_badge('base'), 'upgrade'=>get_abo_type_badge('upgrade')]) !!}</strong>
|
||||
<strong>{!! __('abo.abo_type_info', ['base'=>get_abo_type_badge('base'), 'upgrade'=>get_abo_type_badge('upgrade'), 'abo-min-duration' => \App\Models\Setting::getContentBySlug('abo-min-duration')]) !!}</strong>
|
||||
</div>
|
||||
|
||||
@if(isset($error))
|
||||
|
|
|
|||
|
|
@ -172,7 +172,11 @@
|
|||
</select>
|
||||
</div>
|
||||
<div class="alert alert-info">
|
||||
<i class="fa fa-info-circle"></i> {!! __('abo.abo_order_info') !!}
|
||||
<i class="fa fa-info-circle"></i> {!! __('abo.abo_order_info_check') !!}
|
||||
<hr>
|
||||
<i class="fa fa-info-circle"></i> {!! __('abo.abo_order_info_check_2') !!}
|
||||
<hr>
|
||||
<i class="fa fa-info-circle"></i> {!! __('abo.abo_order_info_check_3', ['abo-min-duration' => \App\Models\Setting::getContentBySlug('abo-min-duration')]) !!}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -3,13 +3,17 @@
|
|||
<h4>{{ __('abo.abo_delivery') }}</h4>
|
||||
|
||||
<p>
|
||||
{{ __('abo.abo_order_info') }}
|
||||
{{ __('abo.abo_order_info_check') }}
|
||||
<hr>
|
||||
{{ __('abo.abo_order_info_check_2') }}
|
||||
<hr>
|
||||
{{ __('abo.abo_order_info_check_3', ['abo-min-duration' => \App\Models\Setting::getContentBySlug('abo-min-duration')]) }}
|
||||
</p>
|
||||
<hr class="container-m-nx mt-0 mb-4">
|
||||
|
||||
<h5>{{ __('abo.pros_hl') }}</h5>
|
||||
<ul>
|
||||
{!! __('abo.pros_list') !!}
|
||||
{!! __('abo.pros_list', ['abo-min-duration' => \App\Models\Setting::getContentBySlug('abo-min-duration')]) !!}
|
||||
</ul>
|
||||
|
||||
@if(isset($no_shopping_user) && $no_shopping_user)
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
@include('portal.abo.componenten.vat-info')
|
||||
|
||||
<div class="alert alert-warning">
|
||||
<strong>{!! __('abo.abo_type_info', ['base'=>get_abo_type_badge('base'), 'upgrade'=>get_abo_type_badge('upgrade')]) !!}</strong>
|
||||
<strong>{!! __('abo.abo_type_info', ['base'=>get_abo_type_badge('base'), 'upgrade'=>get_abo_type_badge('upgrade'), 'abo-min-duration' => \App\Models\Setting::getContentBySlug('abo-min-duration')]) !!}</strong>
|
||||
</div>
|
||||
|
||||
@if(isset($error))
|
||||
|
|
|
|||
|
|
@ -219,6 +219,30 @@
|
|||
{{ Form::text('shipping_phone', $shopping_user->shipping_phone, array('placeholder'=>__('Phone'), 'class'=>'form-control', 'id'=>'shipping_phone', 'tabindex' => 26)) }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-row">
|
||||
<div class="form-group col-md-12">
|
||||
<label class="form-label" for="shipping_postnumber">{{ __('payment.dhl_postnumber') }} <small class="text-muted">({{ __('optional') }})</small></label>
|
||||
{{ Form::text('shipping_postnumber', $shopping_user->shipping_postnumber, array('placeholder'=>'12345678', 'class'=>'form-control', 'id'=>'shipping_postnumber', 'maxlength'=>'20', 'tabindex' => 27)) }}
|
||||
<small class="form-text text-muted">{{ __('payment.packstation_info') }}</small>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{-- Alert-Box für Packstation-Hinweis --}}
|
||||
<div class="alert alert-warning alert-dismissible fade show" id="packstation-alert" style="display: @if($shopping_user->shipping_postnumber) block @else none @endif;">
|
||||
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
|
||||
<span aria-hidden="true">×</span>
|
||||
</button>
|
||||
<h6 class="alert-heading"><i class="fa fa-exclamation-triangle"></i> <strong>{{ __('payment.packstation_alert_title') }}</strong></h6>
|
||||
<hr>
|
||||
<p class="mb-2"><strong>{{ __('payment.packstation_alert_intro') }}</strong></p>
|
||||
<ul class="mb-2 pl-3">
|
||||
<li><strong>{{ __('Street') }} / {{ __('House number') }}:</strong> {{ __('payment.packstation_alert_street') }} <em>({{ __('payment.packstation_alert_street_example') }})</em></li>
|
||||
<li><strong>{{ __('Postcode') }} / {{ __('City') }}:</strong> {{ __('payment.packstation_alert_location') }} <em>({{ __('payment.packstation_alert_not_home') }})</em></li>
|
||||
</ul>
|
||||
<p class="mb-0 small text-muted">
|
||||
<i class="fa fa-info-circle"></i> {{ __('payment.packstation_alert_footer') }}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="custom-control custom-checkbox m-0">
|
||||
|
|
@ -246,6 +270,24 @@
|
|||
});
|
||||
});
|
||||
|
||||
// Packstation Alert show|hide
|
||||
function togglePackstationAlert() {
|
||||
var postnumber = $('#shipping_postnumber').val();
|
||||
if (postnumber && postnumber.trim() !== '') {
|
||||
$('#packstation-alert').slideDown(300);
|
||||
} else {
|
||||
$('#packstation-alert').slideUp(300);
|
||||
}
|
||||
}
|
||||
|
||||
// Bei Eingabe im Postnummer-Feld
|
||||
$('#shipping_postnumber').on('input', function() {
|
||||
togglePackstationAlert();
|
||||
});
|
||||
|
||||
// Bei Seitenladen prüfen
|
||||
togglePackstationAlert();
|
||||
|
||||
$.extend( $.validator.messages, {
|
||||
required: "{{__('account.validator_required')}}",
|
||||
maxlength: $.validator.format( "{{__('account.validator_maxlength')}}" ),
|
||||
|
|
|
|||
|
|
@ -189,6 +189,13 @@
|
|||
<div class="text-muted small">{{ __('Phone') }}</div>
|
||||
{{ $shopping_order->shopping_user->shipping_phone }}
|
||||
</div>
|
||||
@if($shopping_order->shopping_user->shipping_postnumber)
|
||||
<div class="col-md-3 mb-3">
|
||||
<div class="text-muted small">{{ __('payment.dhl_postnumber') }}</div>
|
||||
<span class="badge badge-info">{{ $shopping_order->shopping_user->shipping_postnumber }}</span>
|
||||
<small class="d-block text-muted">{{ __('payment.packstation_delivery') }}</small>
|
||||
</div>
|
||||
@endif
|
||||
<div class="col-md-3 mb-3">
|
||||
<div class="text-muted small">{{ __('Country') }}</div>
|
||||
{{ $shopping_order->shopping_user->shipping_country->getLocated() }}
|
||||
|
|
|
|||
|
|
@ -25,25 +25,32 @@
|
|||
<div class="card">
|
||||
@include('admin.abo._detail')
|
||||
</div>
|
||||
|
||||
<div class="card mt-3">
|
||||
@include('admin.abo._detail_abo_info')
|
||||
</div>
|
||||
<div class="card mt-3">
|
||||
@include('admin.customer._customer_detail', ['shopping_user' => $customer_detail])
|
||||
</div>
|
||||
|
||||
{!! Form::open(['action' => route('user_abos_update', [$view, $user_abo->id]), 'class' => 'form-horizontal', 'id'=>'cart-order-form']) !!}
|
||||
<input type="hidden" name="is_for" value="{{ $user_abo->is_for }}">
|
||||
<div class="card mt-3">
|
||||
@include('admin.abo._order_abo')
|
||||
</div>
|
||||
|
||||
@if($comp_products && Yard::instance('shopping')->getNumComp() > 0)
|
||||
<div id="holder_html_view_comp_product">
|
||||
@include('user.order.comp_product')
|
||||
@if(App\Services\AboHelper::canCancelAbo($user_abo, $view))
|
||||
{!! Form::open(['action' => route('user_abos_update', [$view, $user_abo->id]), 'class' => 'form-horizontal', 'id'=>'cart-order-form']) !!}
|
||||
<input type="hidden" name="is_for" value="{{ $user_abo->is_for }}">
|
||||
<div class="card mt-3">
|
||||
@include('admin.abo._order_abo')
|
||||
</div>
|
||||
@endif
|
||||
|
||||
{{ Form::close() }}
|
||||
|
||||
@if($comp_products && Yard::instance('shopping')->getNumComp() > 0)
|
||||
<div id="holder_html_view_comp_product">
|
||||
@include('user.order.comp_product')
|
||||
</div>
|
||||
@endif
|
||||
|
||||
{{ Form::close() }}
|
||||
@else
|
||||
|
||||
<div class="card mt-3">
|
||||
@include('admin.abo._order_abo', ['only_show_products' => true])
|
||||
</div>
|
||||
@endif
|
||||
<div class="card mt-3 mb-3">
|
||||
@include('admin.abo._executions')
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -30,6 +30,10 @@
|
|||
@endif
|
||||
@if($homeparty_user->billing_phone)
|
||||
Telefon: {{ $homeparty_user->billing_phone }}
|
||||
<br>
|
||||
@endif
|
||||
@if($homeparty_user->shipping_postnumber)
|
||||
<strong>DHL {{ __('payment.dhl_postnumber') }}: {{ $homeparty_user->shipping_postnumber }}</strong>
|
||||
@endif
|
||||
</p>
|
||||
@else
|
||||
|
|
@ -62,6 +66,10 @@
|
|||
@endif
|
||||
@if($homeparty_user->shipping_phone)
|
||||
Telefon: {{ $homeparty_user->shipping_phone }}
|
||||
<br>
|
||||
@endif
|
||||
@if($homeparty_user->shipping_postnumber)
|
||||
<strong>DHL {{ __('payment.dhl_postnumber') }}: {{ $homeparty_user->shipping_postnumber }}</strong>
|
||||
@endif
|
||||
</p>
|
||||
@endif
|
||||
|
|
|
|||
|
|
@ -49,7 +49,7 @@
|
|||
@endif
|
||||
@if($is_abo)
|
||||
<hr>
|
||||
<div class="alert alert-warning"><strong>{!! __('abo.abo_type_info', ['base'=>get_abo_type_badge('base'), 'upgrade'=>get_abo_type_badge('upgrade')]) !!}</strong></div>
|
||||
<div class="alert alert-warning"><strong>{!! __('abo.abo_type_info', ['base'=>get_abo_type_badge('base'), 'upgrade'=>get_abo_type_badge('upgrade'), 'abo-min-duration' => \App\Models\Setting::getContentBySlug('abo-min-duration')]) !!}</strong></div>
|
||||
<p><strong><em></em></strong></p>
|
||||
@endif
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -81,15 +81,15 @@
|
|||
</label>
|
||||
</div>
|
||||
<div class="mt-3">
|
||||
<h6 class="card-header bg-light px-2 py-2">
|
||||
<h6 class="card-header bg-light text-primary px-2 py-2">
|
||||
<a href="#" class="" data-toggle="collapse" data-target="#collapseFilter" aria-expanded="false" aria-controls="collapseFilter">
|
||||
<i class="fa fa-caret-expand"></i> {{ __('abo.pros_hl') }}
|
||||
</a>
|
||||
</h6>
|
||||
<div class="collapse" id="collapseFilter">
|
||||
<div class="form-row pb-1 pt-1">
|
||||
<ul class="">
|
||||
{!! __('abo.pros_list') !!}
|
||||
<ul class="list-padding-top">
|
||||
{!! __('abo.pros_list', ['abo-min-duration' => \App\Models\Setting::getContentBySlug('abo-min-duration')]) !!}
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -134,6 +134,13 @@
|
|||
<div class="text-muted small">{{ __('Phone') }}</div>
|
||||
{{ $shopping_user->shipping_phone }}
|
||||
</div>
|
||||
@if($shopping_user->shipping_postnumber)
|
||||
<div class="col-md-3 mb-3">
|
||||
<div class="text-muted small">{{ __('payment.dhl_postnumber') }}</div>
|
||||
<span class="badge badge-info">{{ $shopping_user->shipping_postnumber }}</span>
|
||||
<small class="d-block text-muted">{{ __('payment.packstation_delivery') }}</small>
|
||||
</div>
|
||||
@endif
|
||||
</div>
|
||||
@endif
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -12,6 +12,7 @@
|
|||
{{ Form::hidden('shipping_zipcode', $user->account->zipcode) }}
|
||||
{{ Form::hidden('shipping_city', $user->account->city) }}
|
||||
{{ Form::hidden('shipping_phone', $user->account->phone) }}
|
||||
{{ Form::hidden('shipping_postnumber', $user->account->shipping_postnumber) }}
|
||||
{{ Form::hidden('shipping_state', Yard::instance('shopping')->getShippingCountryId()) }}
|
||||
|
||||
|
||||
|
|
@ -40,6 +41,7 @@
|
|||
{{ Form::hidden('shipping_zipcode', $user->account->shipping_zipcode) }}
|
||||
{{ Form::hidden('shipping_city', $user->account->shipping_city) }}
|
||||
{{ Form::hidden('shipping_phone', $user->account->shipping_phone) }}
|
||||
{{ Form::hidden('shipping_postnumber', $user->account->shipping_postnumber) }}
|
||||
{{ Form::hidden('shipping_state', Yard::instance('shopping')->getShippingCountryId()) }}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -27,6 +27,7 @@
|
|||
{{ Form::hidden('shipping_city', $shopping_user->billing_city) }}
|
||||
{{ Form::hidden('shipping_phone', $shopping_user->billing_phone) }}
|
||||
{{ Form::hidden('shipping_state', Yard::instance('shopping')->getShippingCountryId()) }}
|
||||
{{ Form::hidden('shipping_postnumber', $shopping_user->shipping_postnumber) }}
|
||||
|
||||
|
||||
|
||||
|
|
@ -57,6 +58,7 @@
|
|||
{{ Form::hidden('shipping_city', $shopping_user->shipping_city) }}
|
||||
{{ Form::hidden('shipping_phone', $shopping_user->shipping_phone) }}
|
||||
{{ Form::hidden('shipping_state', Yard::instance('shopping')->getShippingCountryId()) }}
|
||||
{{ Form::hidden('shipping_postnumber', $shopping_user->shipping_postnumber) }}
|
||||
{{-- <div class="">
|
||||
<div class="form-row">
|
||||
<div class="form-group col-md-12 {{ $errors->has('shipping_state') ? 'has-error' : '' }}">
|
||||
|
|
|
|||
|
|
@ -129,6 +129,7 @@
|
|||
<div class="text-body">
|
||||
<div>{{ __('order.content') }}: {{ $product->contents }}</div>
|
||||
<div>{{ __('order.art_no') }}: {{ $product->number }}</div>
|
||||
<div>{{ __('order.points') }}: @if($row->options->comp) 0 @else {{ $product->getFormattedPoints() }} @endif</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="options">
|
||||
|
|
@ -179,7 +180,7 @@
|
|||
<div class="d-flex flex-wrap justify-content-between pb-4">
|
||||
<div class="mt-2">
|
||||
<p class="small mb-2"> {!! __('order.you_has_article_in_shopping_cart', ['num'=> Yard::instance('shopping')->compCount() ]) !!}</p>
|
||||
<p>{{ __('order.points_total') }}: {{ Yard::instance('shopping')->points() }}</p>
|
||||
<p>{{ __('order.points_total') }}: {{ formatNumber(Yard::instance('shopping')->points()) }}</p>
|
||||
<button type="button" class="btn btn-default btn-sm" id="clear-products-basket"><i class="ion ion-ios-trash"></i> {{ __('order.shopping_cart_delete') }}</button>
|
||||
</div>
|
||||
<div class="d-flex">
|
||||
|
|
@ -258,27 +259,49 @@
|
|||
|
||||
@if(isset($is_abo) && $is_abo)
|
||||
<div class="text-right">
|
||||
<div class="alert alert-info">
|
||||
<h4>{{ __('abo.abo_settings') }}</h4>
|
||||
|
||||
<div class="form-row">
|
||||
<div class="col-6 col-sm-8 col-md-9 col-lg-9 mb-1">
|
||||
</div>
|
||||
<div class="col-6 col-sm-4 col-md-3 col-lg-3 mb-1 text-right">
|
||||
<div class="col-12 col-sm-4 col-md-3 col-lg-3 mb-1 text-right">
|
||||
<label class="form-label">{{ __('abo.delivery_day') }}*</label>
|
||||
<select class="custom-select" name="abo_interval">
|
||||
{!! HTMLHelper::getAboDeliveryOptions() !!}
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="col-12 col-sm-4 col-md-6 mb-1">
|
||||
<div class="col-12 col-sm-12 col-md-4 col-lg-6 mb-1">
|
||||
</div>
|
||||
<div class="col-12 col-sm-8 col-md-6 mb-1">
|
||||
<div class="col-12 col-sm-12 col-md-8 col-lg-6 mb-1">
|
||||
<div class="text-right">
|
||||
<em class="small"> <i> {!! __('abo.abo_order_info') !!}</em>
|
||||
</div>
|
||||
<em class="small"> <i> {!! __('abo.abo_order_info_check') !!}</em>
|
||||
<hr style="margin-top: 10px; margin-bottom: 10px; border-color: #b4b4b4; border-width: 1px;">
|
||||
<em class="font-weight-bold"> <i> {!! __('abo.abo_order_info_check_2') !!}</em>
|
||||
<hr style="margin-top: 10px; margin-bottom: 10px; border-color: #b4b4b4; border-width: 1px;">
|
||||
<em class="small"> <i> {!! __('abo.abo_order_info_check_3', ['abo-min-duration' => \App\Models\Setting::getContentBySlug('abo-min-duration')]) !!}</em>
|
||||
<hr style="margin-top: 10px; margin-bottom: 10px; border-color: #b4b4b4; border-width: 1px;">
|
||||
|
||||
|
||||
<label class="switcher switcher-success">
|
||||
<input type="checkbox" class="switcher-input" name="abo_order_info_checkbox" value="true" required>
|
||||
<span class="switcher-indicator">
|
||||
<span class="switcher-yes">
|
||||
<span class="ion ion-md-checkmark"></span>
|
||||
</span>
|
||||
<span class="switcher-no">
|
||||
<span class="ion ion-md-close"></span>
|
||||
</span>
|
||||
</span>
|
||||
<span class="switcher-label"><strong>{{ __('abo.abo_order_info_checkbox') }}</strong></span>
|
||||
</label>
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<hr>
|
||||
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -77,7 +77,7 @@
|
|||
</div>
|
||||
<div class="col-md-3 mb-3">
|
||||
<div class="text-muted small">{{ __('order.points_total') }}</div>
|
||||
{{ $order->shopping_order->points }}
|
||||
{{ $order->shopping_order->getFormattedPoints() }}
|
||||
</div>
|
||||
<div class="col-md-12 mb-3">
|
||||
<div class="text-muted small">{{ __('order.invoice_address') }} </div>
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
<h6>
|
||||
@if($userSalesVolume)
|
||||
<div class="mb-2">
|
||||
<strong>{{ __('team.total_points') }}: {{ $userSalesVolume->getPointsKPSum() }}</strong> | {{ __('team.own') }}: {{ $userSalesVolume->month_points }} | {{ __('team.shop') }}: {{ $userSalesVolume->month_shop_points }}<br>
|
||||
<strong>{{ __('team.total_points') }}: {{ formatNumber($userSalesVolume->getPointsKPSum()) }}</strong> | {{ __('team.own') }}: {{ formatNumber($userSalesVolume->month_KP_points) }} | {{ __('team.shop') }}: {{ $userSalesVolume->getFormattedMonthShopPoints() }}<br>
|
||||
</div>
|
||||
<div>
|
||||
<strong>{{ __('team.total_turnover') }}: {{ formatNumber($userSalesVolume->getTotalNetSum()) }} €</strong> | {{ __('team.own') }}: {{ formatNumber($userSalesVolume->month_total_net) }} € | {{ __('team.shop') }}: {{ formatNumber($userSalesVolume->month_shop_total_net) }} €
|
||||
|
|
|
|||
62
resources/views/user/team/abo_detail.blade.php
Normal file
62
resources/views/user/team/abo_detail.blade.php
Normal file
|
|
@ -0,0 +1,62 @@
|
|||
@extends('layouts.layout-2')
|
||||
|
||||
@section('content')
|
||||
|
||||
<h4 class="font-weight-bold py-2 mb-2">
|
||||
<a href="{{route('user_team_abos_show')}}" class="btn btn-sm btn-default float-right">{{ __('back') }}</a>
|
||||
|
||||
<div>
|
||||
{{ __('abo.team_subscriptions') }}
|
||||
<span class="text-muted">{{ '#'.$user_abo->payone_userid }}</span>
|
||||
</div>
|
||||
</h4>
|
||||
|
||||
|
||||
@if(Session::has('alert-error'))
|
||||
<div class="col-sm-12">
|
||||
<div class="alert alert-danger p-2 mt-2">
|
||||
<ul>
|
||||
<li>{{ Session::get('alert-error') }}</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
@endif
|
||||
<div class="card">
|
||||
@include('admin.abo._detail')
|
||||
</div>
|
||||
<div class="card mt-3">
|
||||
@include('admin.abo._detail_abo_info')
|
||||
</div>
|
||||
<div class="card mt-3">
|
||||
@include('admin.customer._customer_detail', ['shopping_user' => $customer_detail])
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="card mt-3">
|
||||
@include('admin.abo._order_abo', ['only_show_products' => true])
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="card mt-3 mb-3">
|
||||
@include('admin.abo._executions', ['only_show_products' => true])
|
||||
</div>
|
||||
|
||||
|
||||
<a href="{{route('user_team_abos_show')}}" class="btn btn-sm btn-default float-right">{{ __('back') }}</a>
|
||||
|
||||
@endsection
|
||||
|
||||
@section('scripts')
|
||||
<script src="{{ asset('/js/iq-modal-cart.js') }}?v=1{{ get_file_last_time('/js/iq-modal-cart.js') }}"></script>
|
||||
<script type="application/javascript">
|
||||
var iqModalCart = IqModalCart.init();
|
||||
$( document ).ready(function() {
|
||||
});
|
||||
|
||||
|
||||
</script>
|
||||
@endsection
|
||||
|
||||
120
resources/views/user/team/abos.blade.php
Normal file
120
resources/views/user/team/abos.blade.php
Normal file
|
|
@ -0,0 +1,120 @@
|
|||
@extends('layouts.layout-2')
|
||||
|
||||
@section('content')
|
||||
<h4 class="font-weight-bold py-2 mb-2 d-flex justify-content-between align-items-center w-100 ">
|
||||
<div>
|
||||
{{ __('abo.team_subscriptions') }} / {{ __('navigation.overview') }}
|
||||
</div>
|
||||
</h4>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
|
||||
@if(!$abos || $abos->isEmpty())
|
||||
<div class="card mb-4">
|
||||
<div class="card-body pb-2">
|
||||
<div class="row">
|
||||
<div class="col-sm-12">
|
||||
<h5>{{ __('abo.team_subscriptions') }}</h5>
|
||||
<p class="text-muted">{{ __('tables.no_data_available') }}</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endif
|
||||
|
||||
@foreach($abos as $user_abo)
|
||||
<div class="card mb-4">
|
||||
<div class="card-body pb-2">
|
||||
<div class="row">
|
||||
<div class="col-sm-6">
|
||||
<h5 class="mb-1">
|
||||
<a href="{{ route('user_team_abos_detail', [$user_abo->id]) }}">
|
||||
{{ __('navigation.abo') }} <span class="text-muted">{{ '#'.$user_abo->payone_userid }}</span>
|
||||
</a>
|
||||
</h5>
|
||||
</div>
|
||||
<div class="col-sm-6 text-right">
|
||||
<a href="{{ route('user_team_abos_detail', [$user_abo->id]) }}" class="btn btn-sm btn-secondary float-right">
|
||||
<span class="fa fa-edit"></span>{{ __('abo.abo_details') }}
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<hr class="m-0">
|
||||
<div class="card-body pb-1">
|
||||
<div class="row">
|
||||
<div class="col-md-3 mb-2">
|
||||
<div class="text-muted small">{{ __('tables.start_date') }}</div>
|
||||
<div class="font-weight-bold">{{ $user_abo->start_date }}</div>
|
||||
</div>
|
||||
<div class="col-md-3 mb-2">
|
||||
<div class="text-muted small">{{ __('tables.next_date') }} </div>
|
||||
<div class="font-weight-bold">{{ $user_abo->next_date }}</div>
|
||||
</div>
|
||||
<div class="col-md-3 mb-2">
|
||||
<div class="text-muted small">{{ __('tables.abo_delivery_day') }}</div>
|
||||
<div class="font-weight-bold">{{ \App\Services\HTMLHelper::getAboStrLang($user_abo->abo_interval) }}</div>
|
||||
</div>
|
||||
<div class="col-md-3 mb-2">
|
||||
<div class="text-muted small">{{ __('tables.last_date') }}</div>
|
||||
<div class="font-weight-bold">{{ $user_abo->last_date }}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<hr class="m-0">
|
||||
<div class="card-body pb-1">
|
||||
<div class="row">
|
||||
<div class="col-md-3 mb-3">
|
||||
<div class="text-muted small">{{ __('tables.status') }} / {{ __('tables.active') }}</div>
|
||||
{!! $user_abo->getStatusFormated() !!} {!! get_active_badge($user_abo->active) !!}
|
||||
</div>
|
||||
<div class="col-md-3 mb-3">
|
||||
<div class="text-muted small">{{ __('tables.abo_delivery') }}</div>
|
||||
{{ $user_abo->getCountOrders() }}
|
||||
</div>
|
||||
<div class="col-md-3 mb-3">
|
||||
<div class="text-muted small">{{ __('tables.amount') }}</div>
|
||||
{{ $user_abo->getFormattedAmount() }} €
|
||||
</div>
|
||||
<div class="col-md-3 mb-3">
|
||||
<div class="text-muted small">{{ __('tables.payment') }}</div>
|
||||
{{ $user_abo->getPaymentType() }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<hr class="m-0">
|
||||
<div class="card-body pb-1">
|
||||
<div class="row">
|
||||
<div class="col-md-3 mb-3">
|
||||
<div class="text-muted small">{{ __('First name') }}</div>
|
||||
@if($user_abo->user && $user_abo->user->account)
|
||||
{{ $user_abo->user->account->first_name }}
|
||||
@endif
|
||||
</div>
|
||||
<div class="col-md-3 mb-3">
|
||||
<div class="text-muted small">{{ __('Last name') }}</div>
|
||||
@if($user_abo->user && $user_abo->user->account)
|
||||
{{ $user_abo->user->account->last_name }}
|
||||
@endif
|
||||
</div>
|
||||
<div class="col-md-3 mb-3">
|
||||
<div class="text-muted small">{{ __('E-Mail') }}</div>
|
||||
@if($user_abo->user)
|
||||
{{ $user_abo->user->email }}
|
||||
@endif
|
||||
</div>
|
||||
<div class="col-md-3 mb-3">
|
||||
<div class="text-muted small">{{ __('tables.partner') }}</div>
|
||||
@if($user_abo->user && $user_abo->user->account)
|
||||
{{ $user_abo->user->account->m_account }}
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endforeach
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
|
||||
177
resources/views/user/team/level-reports.blade.php
Normal file
177
resources/views/user/team/level-reports.blade.php
Normal file
|
|
@ -0,0 +1,177 @@
|
|||
@extends('layouts.layout-2')
|
||||
|
||||
@section('content')
|
||||
<div class="card">
|
||||
<h5 class="card-header">
|
||||
{{ __('team.level_reports_title') }}
|
||||
<span class="badge badge-info ml-2">{{ $promotions->count() }}</span>
|
||||
</h5>
|
||||
|
||||
<div class="card-body p-0">
|
||||
@if(isset($error))
|
||||
<div class="alert alert-danger m-4">
|
||||
<i class="fas fa-exclamation-triangle"></i> {{ $error }}
|
||||
</div>
|
||||
@endif
|
||||
|
||||
<!-- Filter Form -->
|
||||
<form method="GET" action="{{ route('user_team_level_reports') }}" class="form-horizontal" id="form_filter_level_reports">
|
||||
<div class="form-row align-items-center px-4 pb-2 pt-3">
|
||||
<div class="col-6 col-sm-6 col-md-2 col-lg-2 mb-1">
|
||||
<label class="small text-muted d-block">{{ __('team.level_reports_month') }}</label>
|
||||
<select class="custom-select" name="month" required>
|
||||
@foreach($availableMonths as $key => $value)
|
||||
<option value="{{ $key }}" @if(isset($filters['month']) && $filters['month'] == $key) selected @elseif(!isset($filters['month']) && $key == date('m')) selected @endif>{{ $value }}</option>
|
||||
@endforeach
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-6 col-sm-6 col-md-2 col-lg-2 mb-1">
|
||||
<label class="small text-muted d-block">{{ __('team.level_reports_year') }}</label>
|
||||
<select class="custom-select" name="year" required>
|
||||
@foreach($availableYears as $year)
|
||||
<option value="{{ $year }}" @if(isset($filters['year']) && $filters['year'] == $year) selected @elseif(!isset($filters['year']) && $year == date('Y')) selected @endif>{{ $year }}</option>
|
||||
@endforeach
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-6 col-sm-6 col-md-3 col-lg-3 mb-1">
|
||||
<div class="custom-control custom-checkbox mt-4">
|
||||
<input type="checkbox" class="custom-control-input" id="not_updated" name="not_updated" value="1" @if(isset($filters['only_not_updated']) && $filters['only_not_updated']) checked @endif>
|
||||
<label class="custom-control-label" for="not_updated">{{ __('team.level_reports_filter_not_updated') }}</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-6 col-sm-6 col-md-3 col-lg-3 mb-1">
|
||||
<div class="mt-4">
|
||||
<button type="submit" class="btn btn-primary mr-2">{{ __('team.level_reports_filter_button') }}</button>
|
||||
<a href="{{ route('user_team_level_reports_export', request()->query()) }}" class="btn btn-success">{{ __('team.level_reports_csv_export') }}</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
@if($promotions->count() > 0)
|
||||
<!-- Statistiken -->
|
||||
<div class="px-4 pb-3">
|
||||
<div class="row">
|
||||
<div class="col-md-3">
|
||||
<div class="card bg-primary text-white">
|
||||
<div class="card-body">
|
||||
<h4 class="card-title">{{ $statistics['total_count'] }}</h4>
|
||||
<p class="card-text">{{ __('team.level_reports_total_promotions') }}</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-9">
|
||||
<div class="card">
|
||||
<div class="card-body">
|
||||
<h6 class="card-subtitle mb-2 text-muted">{{ __('team.level_reports_by_level') }}</h6>
|
||||
@foreach($statistics['level_stats'] as $level => $count)
|
||||
<span class="badge badge-secondary mr-1">{{ $level }}: {{ $count }}</span>
|
||||
@endforeach
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Tabelle -->
|
||||
<div class="table-responsive">
|
||||
<table class="table table-striped table-hover mb-0">
|
||||
<thead class="thead-light">
|
||||
<tr>
|
||||
<th>{{ __('team.level_reports_table_date') }}</th>
|
||||
<th>{{ __('team.level_reports_table_user') }}</th>
|
||||
<th>{{ __('team.level_reports_table_from_level') }}</th>
|
||||
<th>{{ __('team.level_reports_table_to_level') }}</th>
|
||||
<th>{{ __('team.level_reports_table_current_level') }}</th>
|
||||
<th>{{ __('team.level_reports_table_kp_quali') }}</th>
|
||||
<th>{{ __('team.level_reports_table_user_kp') }}</th>
|
||||
<th>{{ __('team.level_reports_table_pp_quali') }}</th>
|
||||
<th>{{ __('team.level_reports_table_user_pp') }}</th>
|
||||
<th>{{ __('team.level_reports_table_update') }}</th>
|
||||
<th>{{ __('team.level_reports_table_active') }}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@foreach($promotions as $promotion)
|
||||
<tr class="@if($promotion['level_updated'] === 'Nein' || $promotion['level_updated'] === __('team.no')) table-warning @endif">
|
||||
<td>{{ $promotion['date'] }}</td>
|
||||
<td>
|
||||
<strong>{{ $promotion['first_name'] }} {{ $promotion['last_name'] }}</strong><br>
|
||||
<small class="text-muted">
|
||||
{{ __('team.ID') }}: {{ $promotion['user_id'] }}<br>
|
||||
{{ $promotion['email'] }}
|
||||
</small>
|
||||
</td>
|
||||
<td>
|
||||
<span class="badge badge-secondary">
|
||||
{{ $promotion['from_level_name'] }}
|
||||
</span>
|
||||
<br><small>{{ __('team.ID') }}: {{ $promotion['from_level_id'] }}</small>
|
||||
</td>
|
||||
<td>
|
||||
<span class="badge badge-success">
|
||||
{{ $promotion['to_level_name'] }}
|
||||
</span>
|
||||
<br><small>{{ __('team.ID') }}: {{ $promotion['to_level_id'] }}</small>
|
||||
</td>
|
||||
<td>
|
||||
<span class="badge badge-info">
|
||||
{{ $promotion['current_user_level_name'] }}
|
||||
</span>
|
||||
<br><small>{{ __('team.ID') }}: {{ $promotion['current_user_level_id'] ?? __('team.not_available') }}</small>
|
||||
</td>
|
||||
<td><span class="badge badge-outline-info">{{ number_format($promotion['to_level_qual_kp'], 0, ',', '.') }}</span></td>
|
||||
<td><span class="badge badge-outline-success">{{ number_format($promotion['sales_volume_points_sum'], 0, ',', '.') }}</span></td>
|
||||
<td><span class="badge badge-outline-info">{{ number_format($promotion['to_level_qual_pp'], 0, ',', '.') }}</span></td>
|
||||
<td><span class="badge badge-outline-success">{{ number_format($promotion['payline_points_qual_kp'], 0, ',', '.') }}</span></td>
|
||||
<td>
|
||||
@if($promotion['level_updated'] === 'Ja' || $promotion['level_updated'] === __('team.yes'))
|
||||
<span class="badge badge-success">{{ __('team.yes') }}</span>
|
||||
@else
|
||||
<span class="badge badge-warning">{{ __('team.no') }}</span>
|
||||
@endif
|
||||
</td>
|
||||
<td>
|
||||
@if($promotion['active_account'] === 'Ja' || $promotion['active_account'] === __('team.yes'))
|
||||
<span class="badge badge-success">{{ __('team.yes') }}</span>
|
||||
@else
|
||||
<span class="badge badge-danger">{{ __('team.no') }}</span>
|
||||
@endif
|
||||
</td>
|
||||
</tr>
|
||||
@endforeach
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
@if(!empty($statistics['period_stats']))
|
||||
<!-- Periode Statistiken -->
|
||||
<div class="px-4 py-3 border-top">
|
||||
<h6 class="text-muted mb-2">{{ __('team.level_reports_by_period') }}</h6>
|
||||
@foreach($statistics['period_stats'] as $period => $count)
|
||||
<span class="badge badge-outline-default mr-1">{{ $period }}: {{ $count }}</span>
|
||||
@endforeach
|
||||
</div>
|
||||
@endif
|
||||
@else
|
||||
<div class="px-4 py-5 text-center">
|
||||
<h5 class="text-muted">{{ __('team.level_reports_no_data') }}</h5>
|
||||
<p class="text-muted">{{ __('team.level_reports_no_data_description') }}</p>
|
||||
</div>
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
// Auto-submit Form bei Änderung der Filter
|
||||
const selects = document.querySelectorAll('#form_filter_level_reports select, #form_filter_level_reports input[type="checkbox"]');
|
||||
selects.forEach(function(select) {
|
||||
select.addEventListener('change', function() {
|
||||
document.getElementById('form_filter_level_reports').submit();
|
||||
});
|
||||
});
|
||||
});
|
||||
</script>
|
||||
@endsection
|
||||
|
||||
|
|
@ -157,7 +157,7 @@
|
|||
</div>
|
||||
@endif
|
||||
|
||||
<!-- Wachstumsbonus -->
|
||||
<!-- Tiefenbonus -->
|
||||
@if($level->getFormattedGrowthBonus())
|
||||
<div class="mb-3">
|
||||
<h6 class="text-muted mb-2">
|
||||
|
|
|
|||
|
|
@ -257,6 +257,30 @@
|
|||
{{ Form::text('shipping_phone', $user->account->shipping_phone, array('placeholder'=>__('Phone'), 'class'=>'form-control', 'id'=>'shipping_phone', 'tabindex' => 26)) }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-row">
|
||||
<div class="form-group col-md-12">
|
||||
<label class="form-label" for="shipping_postnumber">{{ __('payment.dhl_postnumber') }} <small class="text-muted">({{ __('optional') }})</small></label>
|
||||
{{ Form::text('shipping_postnumber', $user->account->shipping_postnumber, array('placeholder'=>'12345678', 'class'=>'form-control', 'id'=>'shipping_postnumber', 'maxlength'=>'20', 'tabindex' => 27)) }}
|
||||
<small class="form-text text-muted">{{ __('payment.packstation_info') }}</small>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{-- Alert-Box für Packstation-Hinweis --}}
|
||||
<div class="alert alert-warning alert-dismissible fade show" id="packstation-alert" style="display: @if($user->account->shipping_postnumber) block @else none @endif;">
|
||||
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
|
||||
<span aria-hidden="true">×</span>
|
||||
</button>
|
||||
<h6 class="alert-heading"><i class="fa fa-exclamation-triangle"></i> <strong>{{ __('payment.packstation_alert_title') }}</strong></h6>
|
||||
<hr>
|
||||
<p class="mb-2"><strong>{{ __('payment.packstation_alert_intro') }}</strong></p>
|
||||
<ul class="mb-2 pl-3">
|
||||
<li><strong>{{ __('Street') }} / {{ __('House number') }}:</strong> {{ __('payment.packstation_alert_street') }} <em>({{ __('payment.packstation_alert_street_example') }})</em></li>
|
||||
<li><strong>{{ __('Postcode') }} / {{ __('City') }}:</strong> {{ __('payment.packstation_alert_location') }} <em>({{ __('payment.packstation_alert_not_home') }})</em></li>
|
||||
</ul>
|
||||
<p class="mb-0 small text-muted">
|
||||
<i class="fa fa-info-circle"></i> {{ __('payment.packstation_alert_footer') }}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<hr>
|
||||
<div class="form-group">
|
||||
|
|
@ -438,6 +462,24 @@
|
|||
});
|
||||
});
|
||||
|
||||
// Packstation Alert show|hide
|
||||
function togglePackstationAlert() {
|
||||
var postnumber = $('#shipping_postnumber').val();
|
||||
if (postnumber && postnumber.trim() !== '') {
|
||||
$('#packstation-alert').slideDown(300);
|
||||
} else {
|
||||
$('#packstation-alert').slideUp(300);
|
||||
}
|
||||
}
|
||||
|
||||
// Bei Eingabe im Postnummer-Feld
|
||||
$('#shipping_postnumber').on('input', function() {
|
||||
togglePackstationAlert();
|
||||
});
|
||||
|
||||
// Bei Seitenladen prüfen
|
||||
togglePackstationAlert();
|
||||
|
||||
$.extend( $.validator.messages, {
|
||||
required: "{{__('account.validator_required')}}",
|
||||
maxlength: $.validator.format( "{{__('account.validator_maxlength')}}" ),
|
||||
|
|
|
|||
|
|
@ -101,17 +101,53 @@
|
|||
@if($pay_trans && $pay_trans->shopping_payment)
|
||||
|
||||
@if($pay_trans->shopping_payment->clearingtype === "vor")
|
||||
<h3>{{ __('payment.payment_in_advance') }}:</h3>
|
||||
<p>{!! __('payment.please_transfer_amount_following_account', ['amount'=>number_format( floatval($pay_trans->shopping_payment->amount/100), 2, ",", ".")]) !!}
|
||||
<br>
|
||||
<strong>{{ __('payment.account_holder') }}:</strong> {{ $pay_trans->transmitted_data['clearing_bankaccountholder'] }} <br>
|
||||
<strong>{{ __('payment.IBAN') }}:</strong> {{ $pay_trans->transmitted_data['clearing_bankiban'] }} <br>
|
||||
<strong>{{ __('payment.BIC') }}:</strong> {{ $pay_trans->transmitted_data['clearing_bankbic'] }} <br>
|
||||
<strong>{{ __('payment.bank') }}:</strong> {{ $pay_trans->transmitted_data['clearing_bankname'] }} <br>
|
||||
<strong>{{ __('payment.total_amount') }}:</strong> {{ number_format( floatval($pay_trans->shopping_payment->amount/100), 2, ",", ".") }} EUR<br>
|
||||
<strong>{{ __('payment.reason_for_payment') }}:</strong> {{ $pay_trans->transmitted_data['txid'] }}
|
||||
</p>
|
||||
<hr />
|
||||
{{-- Prominenter Vorkasse-Hinweis mit TXID und Bankdaten --}}
|
||||
<div class="alert alert-warning" style="border: 3px solid #ffc107; background-color: #fff8e1;">
|
||||
<h4 class="alert-heading"><i class="fa fa-exclamation-triangle"></i> {{ __('payment.prepayment_important_notice') }}</h4>
|
||||
|
||||
|
||||
|
||||
<h5 class="mb-3"><i class="fa fa-university"></i> {{ __('payment.prepayment_bank_details') }}:</h5>
|
||||
<div style="background: #fff; border-radius: 8px; padding: 15px;">
|
||||
<table style="width: 100%;">
|
||||
<tr>
|
||||
<td style="padding: 5px 10px 5px 0; width: 140px;"><strong>{{ __('payment.account_holder') }}:</strong></td>
|
||||
<td style="padding: 5px 0;">{{ $pay_trans->transmitted_data['clearing_bankaccountholder'] }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="padding: 5px 10px 5px 0;"><strong>{{ __('payment.IBAN') }}:</strong></td>
|
||||
<td style="padding: 5px 0; font-family: monospace; letter-spacing: 1px;">{{ $pay_trans->transmitted_data['clearing_bankiban'] }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="padding: 5px 10px 5px 0;"><strong>{{ __('payment.BIC') }}:</strong></td>
|
||||
<td style="padding: 5px 0; font-family: monospace;">{{ $pay_trans->transmitted_data['clearing_bankbic'] }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="padding: 5px 10px 5px 0;"><strong>{{ __('payment.bank') }}:</strong></td>
|
||||
<td style="padding: 5px 0;">{{ $pay_trans->transmitted_data['clearing_bankname'] }}</td>
|
||||
</tr>
|
||||
<tr style="border-top: 1px solid #ffc107;">
|
||||
<td style="padding: 10px 10px 5px 0;"><strong>{{ __('payment.total_amount') }}:</strong></td>
|
||||
<td style="padding: 10px 0 5px 0; font-size: 18px; font-weight: bold; color: #d35400;">{{ number_format( floatval($pay_trans->shopping_payment->amount/100), 2, ",", ".") }} EUR</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<hr style="border-color: #ffc107;">
|
||||
|
||||
<p>{{ __('payment.prepayment_reference_notice') }}</p>
|
||||
|
||||
@if(isset($pay_trans->transmitted_data['txid']))
|
||||
<div class="text-center p-4 my-3" style="background: #fff; border: 3px dashed #ffc107; border-radius: 8px;">
|
||||
<strong style="font-size: 16px;">{{ __('payment.prepayment_txid') }}:</strong><br>
|
||||
<span style="font-size: 32px; font-weight: bold; color: #d35400; letter-spacing: 3px;">{{ $pay_trans->transmitted_data['txid'] }}</span>
|
||||
</div>
|
||||
@endif
|
||||
|
||||
<p><strong>{{ __('payment.prepayment_reference_only') }}</strong></p>
|
||||
|
||||
</div>
|
||||
<hr />
|
||||
@endif
|
||||
|
||||
@if($pay_trans->shopping_payment->clearingtype === "cc")
|
||||
|
|
|
|||
|
|
@ -807,6 +807,42 @@
|
|||
@endif
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{-- DHL Packstation/Paketbox --}}
|
||||
<div class="row mt-3">
|
||||
<div class="col-md-12 col-sm-12">
|
||||
<hr>
|
||||
<h6 class="mb-2"><i class="fa fa-cube"></i> {{ __('payment.packstation_delivery') }}</h6>
|
||||
<p class="info-small mb-2">{{ __('payment.packstation_info') }}</p>
|
||||
</div>
|
||||
<div class="col-md-6 col-sm-6">
|
||||
<label class="mt-0 fs-14 fw-400" for="shipping_postnumber">{{ __('payment.dhl_postnumber') }} ({{ __('optional') }})</label>
|
||||
{!! Form::text('shipping_postnumber', $shopping_user->shipping_postnumber, ['class' => 'form-control '.($errors->has('shipping_postnumber') ? 'error' : ''), 'id'=>'shipping_postnumber', 'placeholder' => '12345678', 'maxlength' => '20']) !!}
|
||||
@if ($errors->has('shipping_postnumber'))
|
||||
<label for="shipping_postnumber" class="error text-danger small" style="display: block;">{{ $errors->first('shipping_postnumber') }}</label>
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
{{-- Alert-Box für Packstation-Hinweis --}}
|
||||
<div class="row mt-2" id="packstation-hint" style="display: none;">
|
||||
<div class="col-md-12">
|
||||
<div class="alert alert-warning alert-dismissible show">
|
||||
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
|
||||
<span aria-hidden="true">×</span>
|
||||
</button>
|
||||
<h6 class="alert-heading"><i class="fa fa-exclamation-triangle"></i> <strong>{{ __('payment.packstation_alert_title') }}</strong></h6>
|
||||
<hr>
|
||||
<p class="mb-2"><strong>{{ __('payment.packstation_alert_intro') }}</strong></p>
|
||||
<ul class="mb-2 pl-3">
|
||||
<li><strong>{{ __('Street') }} / {{ __('House number') }}:</strong> {{ __('payment.packstation_alert_street') }} <em>({{ __('payment.packstation_alert_street_example') }})</em></li>
|
||||
<li><strong>{{ __('Postcode') }} / {{ __('City') }}:</strong> {{ __('payment.packstation_alert_location') }} <em>({{ __('payment.packstation_alert_not_home') }})</em></li>
|
||||
</ul>
|
||||
<p class="mb-0 small text-muted">
|
||||
<i class="fa fa-info-circle"></i> {{ __('payment.packstation_alert_footer') }}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</fieldset>
|
||||
{{-- /SHIPPING --}}
|
||||
|
|
@ -922,19 +958,33 @@
|
|||
<fieldset class="box-border-shadow p-20">
|
||||
<h4>{{ __('abo.abo_delivery') }}</h4>
|
||||
<hr>
|
||||
<p class="small mb-2">{{ __('abo.abo_order_info') }}</p>
|
||||
<em class="small mb-4">{!! __('abo.abo_order_info_check') !!}</em>
|
||||
<hr style="margin-top: 10px; margin-bottom: 10px; border-color: #b4b4b4; border-width: 1px;">
|
||||
|
||||
<em class="small font-weight-bold mb-4">{!! __('abo.abo_order_info_check_2') !!}</em>
|
||||
<hr style="margin-top: 10px; margin-bottom: 10px; border-color: #b4b4b4; border-width: 1px;">
|
||||
<em class="small mb-4">{!! __('abo.abo_order_info_check_3', ['abo-min-duration' => \App\Models\Setting::getContentBySlug('abo-min-duration')]) !!}</em>
|
||||
<hr>
|
||||
|
||||
<div class="clearfix mb-2">
|
||||
<span class="pull-right small text-right">
|
||||
<div class="no-line-break"><strong> {{ now()->format('d.m.Y') }}</strong></div>
|
||||
</span>
|
||||
<span class="pull-left small"><strong>{{ __('abo.abo_start_date') }}:</strong></span>
|
||||
<span class="pull-left small"><strong>{{ __('abo.abo_first_execution_date') }}:</strong></span>
|
||||
</div>
|
||||
|
||||
<div class="clearfix mb-2">
|
||||
<span class="pull-right small text-right">
|
||||
<div class="no-line-break"><strong> {{ HTMLHelper::getAboStrLang($abo_interval) }}</strong></div>
|
||||
</span>
|
||||
<span class="pull-left small"><strong>{{ __('abo.abo_delivery_intervall') }}:</strong></span>
|
||||
</div>
|
||||
<div class="clearfix mb-2">
|
||||
<span class="pull-right small text-right">
|
||||
<div class="no-line-break"><strong> {{ HTMLHelper::getAboFirstExecutionDate(now(), $abo_interval) }}</strong></div>
|
||||
</span>
|
||||
<span class="pull-left small"><strong>{{ __('abo.abo_next_execution_date') }}:</strong></span>
|
||||
</div>
|
||||
</fieldset>
|
||||
@endif
|
||||
{{-- ABO INFOS END --}}
|
||||
|
|
@ -1315,6 +1365,22 @@
|
|||
jQuery('input[name="payment_method"]').on('change', function () {
|
||||
showSEPAPayment($(this).val());
|
||||
});
|
||||
|
||||
// Packstation/Paketbox Hinweis
|
||||
function togglePackstationHint() {
|
||||
var postnumber = $('#shipping_postnumber').val();
|
||||
if (postnumber && postnumber.trim().length > 0) {
|
||||
$('#packstation-hint').slideDown(200);
|
||||
} else {
|
||||
$('#packstation-hint').slideUp(200);
|
||||
}
|
||||
}
|
||||
// Initial check
|
||||
togglePackstationHint();
|
||||
// On input
|
||||
$('#shipping_postnumber').on('input', function() {
|
||||
togglePackstationHint();
|
||||
});
|
||||
</script>
|
||||
|
||||
@endsection
|
||||
Loading…
Add table
Add a link
Reference in a new issue