20-02-2026

This commit is contained in:
Kevin Adametz 2026-02-20 17:55:06 +01:00
parent a8b395e20d
commit a00c42e770
252 changed files with 28785 additions and 8907 deletions

View file

@ -25,10 +25,13 @@
@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']) !!}
@php
$addOnlyMode = App\Services\AboHelper::isAddOnlyMode($user_abo, $view);
@endphp
{!! Form::open(['action' => route('user_abos_update', [$view, $user_abo->id]), 'class' => 'form-horizontal', 'id'=>'cart-order-form', 'data-add-only-mode' => $addOnlyMode ? '1' : '0']) !!}
<input type="hidden" name="is_for" value="{{ $user_abo->is_for }}">
<div class="card mt-3">
@include('admin.abo._order_abo')
@include('admin.abo._order_abo', ['add_only_mode' => $addOnlyMode])
</div>
@if($comp_products && Yard::instance('shopping')->getNumComp() > 0)
@ -36,7 +39,7 @@
@include('user.order.comp_product')
</div>
@endif
{{ Form::close() }}
<div class="card mt-3 mb-3">
@ -44,7 +47,47 @@
</div>
<a href="{{route('user_abos', [$view])}}" class="btn btn-sm btn-default float-right">{{ __('back') }}</a>
<a href="{{route('portal.my_subscriptions')}}" class="btn btn-sm btn-default float-right">{{ __('abo.back') }}</a>
<div class="modal fade" id="modal-confirm-add" tabindex="-1" role="dialog" aria-labelledby="modal-confirm-add-label" aria-hidden="true"
data-title-add-only="{{ __('abo.confirm_add_title') }}"
data-title-normal="{{ __('abo.confirm_add_title_normal') }}"
data-warning-add-only="{{ __('abo.confirm_add_warning') }}"
data-warning-normal="{{ __('abo.confirm_add_warning_normal') }}">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="modal-confirm-add-label"></h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="modal-body">
<div class="alert alert-warning mb-3">
<i class="fa fa-exclamation-triangle"></i> <span id="confirm-add-warning-text"></span>
</div>
<table class="table table-sm mb-0">
<tr>
<td class="font-weight-bold">{{ __('order.article') }}:</td>
<td id="confirm-add-product-name"></td>
</tr>
<tr>
<td class="font-weight-bold">{{ __('tables.price') }}:</td>
<td id="confirm-add-product-price"></td>
</tr>
<tr>
<td class="font-weight-bold">{{ __('tables.quantity') }}:</td>
<td id="confirm-add-qty-info"></td>
</tr>
</table>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">{{ __('abo.confirm_add_cancel') }}</button>
<button type="button" class="btn btn-primary" id="confirm-add-btn">{{ __('abo.confirm_add_ok') }}</button>
</div>
</div>
</div>
</div>
@endsection
@ -57,4 +100,4 @@
</script>
@endsection
@endsection

View file

@ -256,6 +256,25 @@
</div>
</div>
<div class="card mb-4">
<h5 class="card-header">{{ __('account.preferred_language') }}</h5>
<div class="card-body">
<div class="form-row">
<div class="form-group col-md-6">
<label class="form-label" for="language">{{ __('account.preferred_language') }}</label>
<select class="selectpicker" name="language" id="language" data-style="btn-light">
@foreach(\App\Models\ShoppingUser::getAvailableLanguages() as $code => $label)
<option value="{{ $code }}" {{ ($shopping_user->language ?? \App::getLocale()) === $code ? 'selected' : '' }}>
{{ $label }}
</option>
@endforeach
</select>
<p class="badge badge-default mt-2">{{ __('customer.language_hint') }}</p>
</div>
</div>
</div>
</div>
<script type="application/javascript">
$( document ).ready(function() {

View file

@ -130,6 +130,7 @@
<script src="{{ asset('/js/custom.js') }}?v=1{{ get_file_last_time('/js/custom.js') }}"></script>
@stack('scripts')
@yield('scripts')
</body>

View file

@ -3,33 +3,49 @@
<div class="row">
<div class="col-md-3 mb-1">
<strong class="mr-2">{{ __('Status') }}:</strong>
<div class="d-flex flex-wrap align-items-center mt-1" style="gap: 6px;">
<span class="text-big">
{!! \App\Services\Payment::getShoppingOrderBadge($shopping_order) !!}
</span>
</div>
</div>
<div class="col-md-3 mb-1">
<strong class="mr-2">{{ __('order.shipping') }}:</strong>
<div class="d-flex flex-wrap align-items-center mt-1" style="gap: 6px;">
@if($shopping_order->payment_for !== 8)
<span class="text-big">
<span
class="badge badge-pill badge-{{ $shopping_order->getShippedColor() }}">{{ $shopping_order->getShippedType() }}</span>
</span>
@endif
</div>
</div>
<div class="col-md-3 mb-1">
<div class="col-md-6 mb-2">
<strong class="mr-2">{{ __('order.invoice') }}:</strong>
<div class="d-flex flex-wrap align-items-center mt-1" style="gap: 6px;">
@if ($shopping_order->isInvoice())
<a href="{{ route('storage_file', [$shopping_order->id, 'invoice', 'download']) }}"
class="btn btn-primary btn-sm"><i class="fa fa-download"></i></a>
class="btn btn-primary btn-sm" title="Download DE"><i class="fa fa-download"></i></a>
<a href="{{ route('storage_file', [$shopping_order->id, 'invoice', 'stream']) }}"
target="_blank" class="btn btn-warning btn-sm"><i class="fa fa-eye"></i></a>
target="_blank" class="btn btn-warning btn-sm" title="Ansicht DE"><i class="fa fa-eye"></i></a>
{{-- Lokalisierte Versionen --}}
@foreach($shopping_order->user_invoice->getAvailableLocales() as $locale)
<a href="{{ route('storage_file', [$shopping_order->id, 'invoice', 'download', $locale]) }}"
class="btn btn-outline-primary btn-sm" title="Download {{ strtoupper($locale) }}">
<i class="fa fa-download"></i> {{ strtoupper($locale) }}
</a>
<a href="{{ route('storage_file', [$shopping_order->id, 'invoice', 'stream', $locale]) }}"
class="btn btn-outline-warning btn-sm" title="Ansicht {{ strtoupper($locale) }}">
<i class="fa fa-eye"></i> {{ strtoupper($locale) }}
</a>
@endforeach
@endif
@if (($shopping_order->txaction === 'extern' || $shopping_order->txaction === 'extern_paid') && $shopping_order->wp_invoice_path)
<a href="{{ $shopping_order->wp_invoice_path }}" class="btn btn-secondary btn-sm"><i
<a href="{{ $shopping_order->wp_invoice_path }}" class="btn btn-secondary btn-xs"><i
class="fa fa-external-link-alt"></i> <i class="fa fa-download"></i></a>
@endif
</div>
</div>
</div>
@ -279,7 +295,7 @@
</h6>
@if ($shopping_order->txaction !== 'extern')
<div class="card-datatable table-responsive">
<table class="table table-bordered table-striped">
<table class="table table-bordered table-striped" id="datatable-order-payments">
<thead>
<tr>
<th style="min-width: 60px">#</th>
@ -291,24 +307,36 @@
</tr>
</thead>
<tbody>
@php($count = 0)
@if(isset($shopping_order->shopping_payments) && $shopping_order->shopping_payments)
@foreach ($shopping_order->shopping_payments as $shopping_payment)
@if(isset($shopping_payment) && $shopping_payment)
<tr>
<th scope="row">{{ ++$count }}</th>
<td>{{ $shopping_payment->getPaymentType() }}</td>
<td>{{ $shopping_payment->getPaymentAmount() }}</td>
<td>{!! \App\Services\Payment::getShoppingPaymentBadge($shopping_payment) !!}</td>
<td>{{ $shopping_payment->created_at->format('d.m.Y H:i') }}</td>
<td>{{ $shopping_payment->reference }}</td>
</tr>
@endif
@endforeach
@endif
{{-- Daten werden per AJAX über DataTables geladen --}}
</tbody>
</table>
</div>
@push('scripts')
<script>
$(document).ready(function() {
$('#datatable-order-payments').DataTable({
processing: true,
serverSide: true,
ajax: '{!! route('portal.my_orders.payments_datatable', $shopping_order->id) !!}',
columns: [
{ data: 'line_number', name: 'line_number', searchable: false, orderable: false },
{ data: 'payment_type', name: 'clearingtype' },
{ data: 'amount', name: 'amount' },
{ data: 'status', name: 'txaction' },
{ data: 'created_at', name: 'created_at' },
{ data: 'reference', name: 'reference' },
],
bLengthChange: false,
bPaginate: false,
bInfo: false,
ordering: false,
language: {
url: '/js/datatables-{{ \App::getLocale() }}.json'
}
});
});
</script>
@endpush
@else
<div class="row">
<div class="col-sm-12">

View file

@ -19,79 +19,59 @@
<h4 class="font-weight-bold py-2 mb-2">
{{ __('navigation.my_orders') }}
</h4>
<div class="card">
<div class="card-datatable table-responsive">
<table class="table table-striped table-bordered" style="min-width:550px;" id="datatables-orders">
<div class="card-datatable table-responsive">
<table class="table table-striped table-bordered" id="datatables-orders">
<thead>
<tr>
<th>#</th>
<th>{{__('tables.date')}}</th>
<th>{{__('tables.amount')}}</th>
<th>{{__('tables.status')}}</th>
<th>{{__('tables.shipping')}}</th>
<th>{{__('tables.firstname')}}</th>
<th>{{__('tables.lastname')}}</th>
<th>{{__('tables.email')}}</th>
<th>{{__('tables.invoice')}}</th>
<th>{{__('tables.art')}}</th>
</tr>
<tr>
<th>#</th>
<th>{{ __('tables.date') }}</th>
<th>{{ __('tables.amount') }}</th>
<th>{{ __('tables.status') }}</th>
<th>{{ __('tables.shipping') }}</th>
<th>{{ __('tables.firstname') }}</th>
<th>{{ __('tables.lastname') }}</th>
<th>{{ __('tables.email') }}</th>
<th>{{ __('tables.invoice') }}</th>
<th>{{ __('tables.art') }}</th>
</tr>
</thead>
<tbody>
@if($shopping_user->shopping_order)
@forelse($shopping_user->getAllOrdersByMember() as $shopping_order)
<tr>
<td>
<a href="{{ route('portal.my_orders.show', $shopping_order->id) }}"
class="btn icon-btn btn-sm btn-primary">
<span class="fa fa-eye"></span>
</a>
</td>
<td>{{ $shopping_order->created_at->format('d.m.Y') }}</td>
<td>
<span class="no-line-break">
{{ $shopping_order->getFormattedTotalShipping() }}
</span>
</td>
<td>{!! \App\Services\Payment::getShoppingOrderBadge($shopping_order) !!}</td>
<td>
<span class="badge badge-pill badge-{{ $shopping_order->getShippedColor() }}">
{{ $shopping_order->getShippedType() }}
</span>
</td>
<td>{{ $shopping_order->shopping_user->billing_firstname }}</td>
<td>{{ $shopping_order->shopping_user->billing_lastname }}</td>
<td>{{ $shopping_order->shopping_user->billing_email }}</td>
<td>{{ $shopping_order->isInvoice() ? '<span class="no-line-break"><a href="'.route('storage_file', [$shopping_order->id, 'invoice', 'download']).'" class="btn btn-primary btn-xs"><i class="fa fa-download"></i></a>
<a href="'.route('storage_file', [$shopping_order->id, 'invoice', 'stream']).'" target="_blank" class="btn btn-warning btn-xs"><i class="fa fa-eye"></i></a></span>' : '-';
}}</td>
<td>{!! \App\Services\Payment::getPaymentForBadge($shopping_order) !!}</td>
</tr>
@empty
<tr>
<td colspan="6" class="text-center">{{ __('order.no_orders_found') }}</td>
</tr>
@endforelse
@endif
{{-- Daten werden per AJAX über DataTables geladen --}}
</tbody>
</table>
</div>
</div>
@endsection
@section('scripts')
<script>
$( document ).ready(function() {
$('#datatables-orders').DataTable({
"bLengthChange": false,
"iDisplayLength": 50,
"order": [[ 1, "desc" ]],
"language": {
"url": "/js/datatables-{{ \App::getLocale() }}.json"
$(document).ready(function() {
$('#datatables-orders').DataTable({
processing: true,
serverSide: true,
ajax: '{!! route('portal.my_orders.datatable') !!}',
order: [[1, 'desc']],
columns: [
{ data: 'id', name: 'id', searchable: false, orderable: true },
{ data: 'created_at', name: 'shopping_orders.created_at' },
{ data: 'total_shipping', name: 'shopping_orders.total_shipping' },
{ data: 'txaction', name: 'shopping_orders.txaction' },
{ data: 'shipped', name: 'shopping_orders.shipped' },
{ data: 'firstname', name: 'shopping_user.billing_firstname', orderable: false },
{ data: 'lastname', name: 'shopping_user.billing_lastname', orderable: false },
{ data: 'email', name: 'shopping_user.billing_email', orderable: false },
{ data: 'invoice', name: 'invoice', searchable: false, orderable: false },
{ data: 'payment_for', name: 'shopping_orders.payment_for' },
],
bLengthChange: false,
iDisplayLength: 50,
language: {
url: '/js/datatables-{{ \App::getLocale() }}.json'
}
});
});
</script>
@endsection
@endsection