Rechnung/Lieferschein: - PDF-Gruppierung Abo- vs. Einmal-Artikel (is_abo_addon), rueckwaertskompatibel - Vorschau-Command sales:preview-invoice (umgeht Test-System-Gate, ohne Rechnungsnummer) Reminder-Mail (vorbereitet, Cron inaktiv): - MailAboExecutionReminder + Template, abo:send-execution-reminder, Spalte onetime_reminder_sent_for - Berater -> Sales Center, Kunde -> Portal; Vorschau abo:preview-reminder - Datum-Fix: formatDateDB() statt formatDate() (ICU-Format) Sperrfristen konfigurierbar (Admin-Settings): - abo-lock-days-change (Liefertag + Abo-Produkte), abo-lock-days-pause-cancel - Meldungen mit :lock-Platzhalter; Pausieren/Kuendigen vom Change-Lock entkoppelt - Abo-Produkt-Aenderungen im Lock-Fenster server- + clientseitig eingefroren - Selbstbedienung: Add-only/Lock nach $view (kein Admin-Bypass), Stale-Cache-Fix beim Mengen-Update Dashboard: - Einmalprodukte-Card + Team-Abo-KPI-Card, News-Card responsiv (col-xl-6) Lokalisierung: - Sprachdateien en/es/fr vollstaendig mit de synchronisiert (inkl. marketingplan/portal) - LocalizationSyncTest sichert Key-Gleichheit ab Tests: AboOneTimeInvoiceGrouping, AboExecutionReminder, AboLockDaysSetting, AboOnetimeDashboardAndMail, PreviewInvoiceCommand, TeamAboOverview + erweiterte View-Tests Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
177 lines
5.6 KiB
PHP
177 lines
5.6 KiB
PHP
<style>
|
|
table.table-product,
|
|
table.table-product tr td,
|
|
table.table-product tr th {
|
|
border: none;
|
|
}
|
|
|
|
table.table-product tr.border-top td {
|
|
border-top: 1px solid #b8b8b9;
|
|
}
|
|
|
|
table.table-product tr.border-bottom td,
|
|
table.table-product tr.border-bottom th {
|
|
border-bottom: 1px solid #b8b8b9;
|
|
}
|
|
|
|
|
|
.table-small {
|
|
font-size: 0.9em;
|
|
width: auto;
|
|
}
|
|
|
|
.table-small td {
|
|
padding: 0.225rem 1rem 0.225rem 0;
|
|
}
|
|
|
|
.btn-md-extra {
|
|
padding: 0.3rem 0.6rem;
|
|
font-size: 0.8rem;
|
|
line-height: 1.5;
|
|
border-radius: 0.25rem;
|
|
}
|
|
|
|
.md-btn-extra {
|
|
width: calc(1.7rem + 2px) !important;
|
|
line-height: 1.5rem;
|
|
}
|
|
|
|
.form-control.input-extra {
|
|
padding: 0.28rem 0.6rem;
|
|
font-size: 0.8rem;
|
|
font-weight: 500;
|
|
min-height: calc(1.8rem + 2px);
|
|
height: calc(1.8rem + 2px);
|
|
width: 44px;
|
|
}
|
|
|
|
.input-group-min-w {
|
|
min-width: 102px;
|
|
}
|
|
|
|
.img-extra {
|
|
min-width: 55px;
|
|
max-height: 120px;
|
|
}
|
|
|
|
.table td.border-top {
|
|
border: none;
|
|
border-top: 1px solid #ccccdb;
|
|
}
|
|
|
|
.table td {
|
|
border: none;
|
|
}
|
|
|
|
.table th {
|
|
border: none;
|
|
border-bottom: 1px solid #c3c3d2;
|
|
}
|
|
|
|
@media (max-width: 767px) {
|
|
|
|
.default-style:not([dir=rtl]) div.card-datatable table.dataTable thead th:first-child,
|
|
.default-style:not([dir=rtl]) div.card-datatable table.dataTable tbody td:first-child,
|
|
.default-style:not([dir=rtl]) div.card-datatable table.dataTable tfoot th:first-child {
|
|
padding-left: 0.6rem !important;
|
|
|
|
}
|
|
|
|
.img-extra {
|
|
min-width: 35px;
|
|
max-height: 160px;
|
|
}
|
|
}
|
|
|
|
.table .foot-small td {
|
|
padding: 0.225rem 0.625rem;
|
|
}
|
|
|
|
.table .text-body {
|
|
font-size: 0.9em;
|
|
}
|
|
|
|
.table .options a.auto-delete-product {
|
|
font-size: 0.7em;
|
|
font-weight: bold;
|
|
text-transform: uppercase;
|
|
}
|
|
|
|
.table .min-width-80 {
|
|
min-width: 160px;
|
|
}
|
|
|
|
.bg-warning-light {
|
|
background-color: rgba(255, 217, 80, 0.6) !important;
|
|
}
|
|
|
|
.small {
|
|
font-size: 90%;
|
|
}
|
|
|
|
.table tfoot td {
|
|
padding: 0.225rem;
|
|
}
|
|
</style>
|
|
<div class="card-header bg-light">
|
|
<h5 class="font-weight-semibold mb-0"> <i class="fa fa-list-alt text-primary"></i>
|
|
{{ __('abo.abo_order_hl') }}
|
|
</h5>
|
|
</div>
|
|
<div class="card-body">
|
|
@if (isset($only_show_products) && $only_show_products === true)
|
|
@if ($view === 'team')
|
|
<div class="alert alert-info">{!! __('abo.abo_order_info_block_team', [
|
|
'abo-min-duration' => \App\Models\Setting::getContentBySlug('abo-min-duration'),
|
|
]) !!}</div>
|
|
@else
|
|
<div class="alert alert-info">{!! __('abo.abo_order_info_block', [
|
|
'abo-min-duration' => \App\Models\Setting::getContentBySlug('abo-min-duration'),
|
|
]) !!}</div>
|
|
@endif
|
|
@elseif(isset($add_only_mode) && $add_only_mode)
|
|
@if ($view === 'ot')
|
|
<div class="alert alert-info">{!! __('abo.abo_order_info_block_customer', [
|
|
'abo-min-duration' => \App\Models\Setting::getContentBySlug('abo-min-duration'),
|
|
]) !!}</div>
|
|
@else
|
|
<div class="alert alert-info">{!! __('abo.abo_order_info_add_only', [
|
|
'abo-min-duration' => \App\Models\Setting::getContentBySlug('abo-min-duration'),
|
|
]) !!}</div>
|
|
@endif
|
|
@else
|
|
<div class="alert alert-info">{{ __('abo.abo_order_info_2') }}</div>
|
|
@endif
|
|
<hr>
|
|
@include('user.abo.vat_info')
|
|
@php
|
|
$only_show_products = isset($only_show_products) ? $only_show_products : false;
|
|
$add_only_mode = isset($add_only_mode) ? $add_only_mode : false;
|
|
$split_mode = isset($split_mode) ? $split_mode : false;
|
|
$summary = isset($summary) ? $summary : null;
|
|
$change_locked = isset($change_locked) ? $change_locked : false;
|
|
@endphp
|
|
@if ($change_locked)
|
|
<div class="alert alert-warning mt-2">
|
|
{{ __('abo.error_change_locked', [
|
|
'days' => (int) now()->diffInDays(\Carbon\Carbon::parse($user_abo->next_date), false),
|
|
'lock' => App\Repositories\AboRepository::getLockDaysChange(),
|
|
]) }}
|
|
</div>
|
|
@endif
|
|
@if (!$only_show_products && !$change_locked)
|
|
<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', [
|
|
'only_show_products' => $only_show_products,
|
|
'add_only_mode' => $add_only_mode,
|
|
'split_mode' => $split_mode,
|
|
'summary' => $summary,
|
|
'change_locked' => $change_locked,
|
|
])
|
|
</div>
|
|
</div>
|