27-05-2026 Update DHL Modul v2.0
This commit is contained in:
parent
53bdba33cd
commit
036595be94
41 changed files with 3346 additions and 310 deletions
|
|
@ -102,7 +102,7 @@
|
|||
<option value="created" {{ request('status') == 'created' ? 'selected' : '' }}>Erstellt</option>
|
||||
<option value="shipped" {{ request('status') == 'shipped' ? 'selected' : '' }}>Versendet</option>
|
||||
<option value="delivered" {{ request('status') == 'delivered' ? 'selected' : '' }}>Zugestellt</option>
|
||||
<option value="cancelled" {{ request('status') == 'cancelled' ? 'selected' : '' }}>Storniert</option>
|
||||
<option value="canceled" {{ in_array(request('status'), ['canceled', 'cancelled']) ? 'selected' : '' }}>Storniert</option>
|
||||
<option value="failed" {{ request('status') == 'failed' ? 'selected' : '' }}>Fehler</option>
|
||||
</select>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -109,9 +109,148 @@ $(document).ready(function() {
|
|||
return;
|
||||
}
|
||||
|
||||
if ($('#dhl-preflight-confirmed').val() !== '1') {
|
||||
validateDhlAddress(formData, submitBtn, function() {
|
||||
$('#dhl-preflight-confirmed').val('1');
|
||||
submitBtn.prop('disabled', false).html('<i class="fas fa-shipping-fast"></i> Sendung jetzt erstellen');
|
||||
});
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
validateDhlAddress(formData, submitBtn, function() {
|
||||
submitDhlShipment(form, formData, submitBtn);
|
||||
});
|
||||
});
|
||||
|
||||
function validateDhlAddress(formData, submitBtn, onSuccess) {
|
||||
submitBtn.prop('disabled', true).html('<i class="fas fa-spinner fa-spin"></i> Prüfe Sendung...');
|
||||
|
||||
$.ajax({
|
||||
url: '{{ route('admin.dhl.validate-address') }}',
|
||||
method: 'POST',
|
||||
data: formData,
|
||||
success: function(response) {
|
||||
renderDhlPreflightStatus(response);
|
||||
|
||||
onSuccess();
|
||||
},
|
||||
error: function(xhr) {
|
||||
var response = xhr.responseJSON || {};
|
||||
|
||||
renderDhlPreflightStatus(response);
|
||||
resetDhlPreflight(true);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function renderDhlPreflightStatus(response) {
|
||||
var status = response.status || 'error';
|
||||
var product = (response.preflight && response.preflight.product) ? response.preflight.product : {};
|
||||
var address = (response.preflight && response.preflight.address) ? response.preflight.address : {};
|
||||
var normalized = address.normalized || {};
|
||||
var errors = response.errors || [];
|
||||
var warnings = response.warnings || [];
|
||||
var statusClass = status === 'valid' ? 'success' : (status === 'warning' ? 'warning' : 'danger');
|
||||
var statusIcon = status === 'valid' ? 'check-circle' : (status === 'warning' ? 'exclamation-triangle' : 'times-circle');
|
||||
var productScope = product.scope_label || 'Nicht geprüft';
|
||||
var productCode = product.code || $('#modal-product-code').val() || '-';
|
||||
var countryLabel = product.country_label || $('#shipping_country option:selected').text().trim() || '-';
|
||||
var validationBadgeClass = address.validation_available ? 'info' : 'warning';
|
||||
var validationBadgeText = address.validation_available ? 'Formale DACH-Prüfung' : 'Basisprüfung';
|
||||
var validationMessage = address.validation_message || 'Adressvalidierung wurde nicht eindeutig bestimmt.';
|
||||
|
||||
var listHtml = '';
|
||||
if (errors.length) {
|
||||
listHtml += '<div class="alert alert-danger mb-2"><strong>Fehler:</strong><ul class="mb-0 pl-3">';
|
||||
errors.forEach(function(error) {
|
||||
listHtml += '<li>' + escapeHtml(error) + '</li>';
|
||||
});
|
||||
listHtml += '</ul></div>';
|
||||
}
|
||||
if (warnings.length) {
|
||||
listHtml += '<div class="alert alert-warning mb-2"><strong>Hinweise:</strong><ul class="mb-0 pl-3">';
|
||||
warnings.forEach(function(warning) {
|
||||
listHtml += '<li>' + escapeHtml(warning) + '</li>';
|
||||
});
|
||||
listHtml += '</ul></div>';
|
||||
}
|
||||
|
||||
if (!errors.length && !warnings.length) {
|
||||
listHtml = '<div class="alert alert-success mb-2">Alle Vorabprüfungen sind erfolgreich.</div>';
|
||||
}
|
||||
|
||||
$('#dhl-preflight-status')
|
||||
.removeClass('border-secondary border-success border-warning border-danger')
|
||||
.addClass('border-' + statusClass)
|
||||
.html(`
|
||||
<div class="card-header d-flex align-items-center">
|
||||
<i class="fas fa-${statusIcon} text-${statusClass} mr-2"></i>
|
||||
<strong>Vorabprüfung: ${escapeHtml(response.message || 'Prüfung abgeschlossen')}</strong>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div class="row mb-3">
|
||||
<div class="col-md-4">
|
||||
<small class="text-muted d-block">Produktcode</small>
|
||||
<strong>${escapeHtml(productCode)}</strong>
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
<small class="text-muted d-block">Sendungsart</small>
|
||||
<strong>${escapeHtml(productScope)}</strong>
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
<small class="text-muted d-block">Zielland</small>
|
||||
<strong>${escapeHtml(countryLabel)}</strong>
|
||||
</div>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<small class="text-muted d-block">Lieferadresse</small>
|
||||
<strong>${escapeHtml([normalized.street, normalized.house_number].filter(Boolean).join(' '))}</strong>,
|
||||
${escapeHtml([normalized.postal_code, normalized.city].filter(Boolean).join(' '))}
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<small class="text-muted d-block">Adressvalidierung</small>
|
||||
<span class="badge badge-${validationBadgeClass} mr-2">${escapeHtml(validationBadgeText)}</span>
|
||||
<span>${escapeHtml(validationMessage)}</span>
|
||||
</div>
|
||||
${listHtml}
|
||||
${response.can_create_label ? '<small class="text-muted">Prüfung bestätigt. Klicken Sie erneut auf „Sendung jetzt erstellen“, um das Label zu erzeugen.</small>' : ''}
|
||||
</div>
|
||||
`);
|
||||
}
|
||||
|
||||
function resetDhlPreflight(keepStatus) {
|
||||
$('#dhl-preflight-confirmed').val('0');
|
||||
$('#create-shipment-btn').prop('disabled', false).html('<i class="fas fa-clipboard-check"></i> Vorabprüfung durchführen');
|
||||
|
||||
if (keepStatus) {
|
||||
return;
|
||||
}
|
||||
|
||||
$('#dhl-preflight-status')
|
||||
.removeClass('border-success border-warning border-danger')
|
||||
.addClass('border-secondary')
|
||||
.html(`
|
||||
<div class="card-header d-flex align-items-center">
|
||||
<i class="fas fa-clipboard-check text-secondary mr-2"></i>
|
||||
<strong>Vorabprüfung vor Labelerstellung</strong>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<p class="text-muted mb-0">
|
||||
Formular geändert. Bitte führen Sie die Vorabprüfung erneut aus, bevor das Label erstellt wird.
|
||||
</p>
|
||||
</div>
|
||||
`);
|
||||
}
|
||||
|
||||
function escapeHtml(value) {
|
||||
return $('<div>').text(value || '').html();
|
||||
}
|
||||
|
||||
function submitDhlShipment(form, formData, submitBtn) {
|
||||
// Disable submit button
|
||||
submitBtn.prop('disabled', true).html('<i class="fas fa-spinner fa-spin"></i> Wird erstellt...');
|
||||
|
||||
|
||||
$.ajax({
|
||||
url: form.attr('action'),
|
||||
method: 'POST',
|
||||
|
|
@ -119,14 +258,14 @@ $(document).ready(function() {
|
|||
success: function(response) {
|
||||
if (response.success) {
|
||||
console.log(response);
|
||||
|
||||
|
||||
// Show success message
|
||||
if (typeof showAlert === 'function') {
|
||||
showAlert('success', response.message);
|
||||
} else {
|
||||
alert(response.message);
|
||||
}
|
||||
|
||||
|
||||
// Switch to info mode instead of closing modal
|
||||
setTimeout(function() {
|
||||
// Show loading indicator
|
||||
|
|
@ -140,7 +279,7 @@ $(document).ready(function() {
|
|||
</div>
|
||||
`;
|
||||
$('#modals-load-content .modal-dialog').html(loadingHtml);
|
||||
|
||||
|
||||
// Reload modal in info mode to show the created shipment
|
||||
$.post('{{ route('modal_load') }}', {
|
||||
action: 'create-dhl-shipment',
|
||||
|
|
@ -148,7 +287,7 @@ $(document).ready(function() {
|
|||
_token: '{{ csrf_token() }}'
|
||||
}).done(function(response) {
|
||||
$('#modals-load-content .modal-dialog').html(response.html);
|
||||
|
||||
|
||||
// Show success message in the new modal content
|
||||
setTimeout(function() {
|
||||
if (typeof showAlert === 'function') {
|
||||
|
|
@ -160,30 +299,60 @@ $(document).ready(function() {
|
|||
});
|
||||
}, 1000); // Wait 1 seconds to show success message
|
||||
} else {
|
||||
alert(response.message || 'Fehler beim Erstellen der Sendung.');
|
||||
submitBtn.prop('disabled', false).html('<i class="fas fa-shipping-fast"></i> Sendung erstellen');
|
||||
renderDhlCreationErrorStatus(response);
|
||||
resetDhlPreflight(true);
|
||||
}
|
||||
},
|
||||
error: function(xhr) {
|
||||
var errorMessage = 'Fehler beim Erstellen der Sendung.';
|
||||
var response = xhr.responseJSON || {
|
||||
message: 'Fehler beim Erstellen der Sendung.'
|
||||
};
|
||||
if (xhr.responseJSON && xhr.responseJSON.message) {
|
||||
errorMessage = xhr.responseJSON.message;
|
||||
response.message = xhr.responseJSON.message;
|
||||
} else if (xhr.responseText) {
|
||||
try {
|
||||
var errorData = JSON.parse(xhr.responseText);
|
||||
if (errorData.errors) {
|
||||
errorMessage = Object.values(errorData.errors).flat().join(', ');
|
||||
response.errors = Object.values(errorData.errors).flat();
|
||||
}
|
||||
} catch (e) {
|
||||
// Ignore JSON parse errors
|
||||
}
|
||||
}
|
||||
|
||||
alert(errorMessage);
|
||||
submitBtn.prop('disabled', false).html('<i class="fas fa-shipping-fast"></i> Sendung erstellen');
|
||||
|
||||
renderDhlCreationErrorStatus(response);
|
||||
resetDhlPreflight(true);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function renderDhlCreationErrorStatus(response) {
|
||||
var errors = response.errors || [response.message || 'DHL hat die Labelerstellung abgelehnt.'];
|
||||
|
||||
renderDhlPreflightStatus({
|
||||
status: 'error',
|
||||
can_create_label: false,
|
||||
message: 'DHL hat die Adresse bei der Labelerstellung abgelehnt.',
|
||||
errors: errors,
|
||||
warnings: [],
|
||||
preflight: {
|
||||
product: {
|
||||
code: $('#modal-product-code').val(),
|
||||
scope_label: $('#modal-product-code option:selected').text().trim()
|
||||
},
|
||||
address: {
|
||||
validation_available: true,
|
||||
validation_message: 'DHL-Leitcodierung über mustEncode wurde bei der Labelerstellung geprüft.',
|
||||
normalized: {
|
||||
street: $('#shipping_address').val(),
|
||||
house_number: $('#shipping_houseNumber').val(),
|
||||
postal_code: $('#shipping_zipcode').val(),
|
||||
city: $('#shipping_city').val()
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// Enhanced form validation
|
||||
function validateForm() {
|
||||
|
|
@ -216,6 +385,12 @@ $(document).ready(function() {
|
|||
isValid = false;
|
||||
}
|
||||
});
|
||||
|
||||
var reference = $('#modal-reference').val();
|
||||
if (reference && reference.length > 35) {
|
||||
$('#modal-reference').addClass('is-invalid').after('<div class="invalid-feedback">Referenz darf maximal 35 Zeichen lang sein.</div>');
|
||||
isValid = false;
|
||||
}
|
||||
|
||||
return isValid;
|
||||
}
|
||||
|
|
@ -237,6 +412,23 @@ $(document).ready(function() {
|
|||
}
|
||||
}
|
||||
});
|
||||
|
||||
var dhlProductSuggestions = @json($productSuggestions ?? []);
|
||||
|
||||
$('#shipping_country').on('change', function() {
|
||||
var countryCode = $(this).find(':selected').data('country-code');
|
||||
var suggestedProduct = dhlProductSuggestions[countryCode];
|
||||
|
||||
if (suggestedProduct && $('#modal-product-code option[value="' + suggestedProduct + '"]').length) {
|
||||
$('#modal-product-code').val(suggestedProduct);
|
||||
}
|
||||
});
|
||||
|
||||
$('#modal-create-shipment-form').on('input change', 'input, select', function() {
|
||||
if ($(this).attr('id') !== 'dhl-preflight-confirmed') {
|
||||
resetDhlPreflight();
|
||||
}
|
||||
});
|
||||
|
||||
// Real-time required field validation
|
||||
$('input[required], select[required]').on('blur', function() {
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
<form id="modal-create-shipment-form" method="POST" action="{{ route('admin.dhl.store') }}">
|
||||
@csrf
|
||||
<input type="hidden" name="order_id" value="{{ $order->id }}">
|
||||
<input type="hidden" id="dhl-preflight-confirmed" value="0">
|
||||
|
||||
<div class="modal-body">
|
||||
<div class="row">
|
||||
|
|
@ -52,7 +53,7 @@
|
|||
<input type="number" class="form-control" id="modal-weight" name="weight" min="0.1"
|
||||
max="31.5" step="0.1" value="{{ number_format($orderWeight, 1) }}" required>
|
||||
<small class="form-text text-muted">
|
||||
Berechnet: {{ number_format($orderWeight, 1) }} kg
|
||||
Berechnetes DHL-Gewicht inkl. Kompensationsprodukten: {{ number_format($orderWeight, 3, ',', '.') }} kg
|
||||
</small>
|
||||
</div>
|
||||
|
||||
|
|
@ -63,9 +64,14 @@
|
|||
</label>
|
||||
<select class="form-control custom-select" id="modal-product-code" name="product_code">
|
||||
@foreach ($productCodes as $code => $name)
|
||||
<option value="{{ $code }}">{{ $code }} - {{ $name }}</option>
|
||||
<option value="{{ $code }}" {{ ($selectedProductCode ?? null) === $code ? 'selected' : '' }}>
|
||||
{{ $code }} - {{ $name }}
|
||||
</option>
|
||||
@endforeach
|
||||
</select>
|
||||
<small class="form-text text-muted">
|
||||
Das Produkt wird anhand des Ziellandes vorgeschlagen und kann bei erlaubten Kombinationen angepasst werden.
|
||||
</small>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
|
|
@ -86,6 +92,19 @@
|
|||
Automatisches Tracking
|
||||
</label>
|
||||
</div>
|
||||
|
||||
<div class="form-group mt-3">
|
||||
<label for="modal-reference" class="font-weight-semibold">
|
||||
<i class="fas fa-tag"></i>
|
||||
Referenz <small class="text-muted">(optional)</small>
|
||||
</label>
|
||||
<input type="text" class="form-control" id="modal-reference" name="reference"
|
||||
value="{{ 'Order-' . $order->id }}" maxlength="35"
|
||||
placeholder="z.B. Nachlieferung, Ersatz, Order-{{ $order->id }}">
|
||||
<small class="form-text text-muted">
|
||||
Wird als DHL refNo uebertragen und an der Sendung gespeichert. Maximal 35 Zeichen.
|
||||
</small>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
|
@ -176,6 +195,7 @@
|
|||
id="shipping_country" required>
|
||||
@foreach ($availableCountries as $countryOption)
|
||||
<option value="{{ $countryOption->id }}"
|
||||
data-country-code="{{ $countryOption->code }}"
|
||||
{{ $shippingAddress['country'] && $shippingAddress['country']->id == $countryOption->id ? 'selected' : '' }}>
|
||||
{{ $countryOption->getLocated() }}
|
||||
</option>
|
||||
|
|
@ -228,6 +248,18 @@
|
|||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="dhl-preflight-status" class="card border-secondary mt-3 mb-0">
|
||||
<div class="card-header d-flex align-items-center">
|
||||
<i class="fas fa-clipboard-check text-secondary mr-2"></i>
|
||||
<strong>Vorabprüfung vor Labelerstellung</strong>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<p class="text-muted mb-0">
|
||||
Bitte führen Sie vor der Labelerstellung die Vorabprüfung aus. Dabei werden Produktcode, nationale/internationale Sendungsart und Lieferadresse geprüft.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="modal-footer">
|
||||
|
|
@ -236,7 +268,7 @@
|
|||
</button>
|
||||
<button type="submit" class="btn btn-primary" id="create-shipment-btn"
|
||||
{{ !empty($errors) ? 'disabled' : '' }}>
|
||||
<i class="fas fa-shipping-fast"></i> Sendung erstellen
|
||||
<i class="fas fa-clipboard-check"></i> Vorabprüfung durchführen
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
|
|
|
|||
|
|
@ -54,9 +54,10 @@
|
|||
<span class="badge badge-info">{{ __('dhl.status.delivered') }}</span>
|
||||
</div>
|
||||
@break
|
||||
@case('canceled')
|
||||
@case('cancelled')
|
||||
<div class="h5 mb-0 font-weight-bold text-gray-800">
|
||||
<span class="badge badge-secondary">{{ __('dhl.status.cancelled') }}</span>
|
||||
<span class="badge badge-secondary">{{ __('dhl.status.canceled') }}</span>
|
||||
</div>
|
||||
@break
|
||||
@case('failed')
|
||||
|
|
@ -110,7 +111,7 @@
|
|||
@if(false)
|
||||
<code class="text-info">{{ $shipment->dhl_shipment_no }}</code>
|
||||
<br>
|
||||
<a href="{{ route('public.tracking') }}?dhl_shipment_no={{ $shipment->dhl_shipment_no }}"
|
||||
<a href="{{ route('public.tracking') }}?tracking_number={{ $shipment->dhl_shipment_no }}"
|
||||
target="_blank" class="text-muted small">
|
||||
<i class="fas fa-external-link-alt"></i> Verfolgen
|
||||
</a>
|
||||
|
|
@ -147,7 +148,7 @@
|
|||
</div>
|
||||
|
||||
<!-- Action Buttons -->
|
||||
@if($shipment->status != 'cancelled')
|
||||
@if(!in_array($shipment->status, ['canceled', 'cancelled']))
|
||||
<div class="card mb-4">
|
||||
<div class="card-body">
|
||||
<div class="d-flex flex-wrap gap-2">
|
||||
|
|
@ -219,6 +220,16 @@
|
|||
@endif
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="font-weight-semibold">Referenz:</td>
|
||||
<td>
|
||||
@if($shipment->reference)
|
||||
<code class="text-dark">{{ $shipment->reference }}</code>
|
||||
@else
|
||||
<span class="text-muted">Nicht gesetzt</span>
|
||||
@endif
|
||||
</td>
|
||||
</tr>
|
||||
{{--
|
||||
<tr>
|
||||
<td class="font-weight-semibold">Routing-Code:</td>
|
||||
|
|
@ -511,14 +522,71 @@
|
|||
</div>
|
||||
<div class="card-body">
|
||||
@if($shipment->wasTrackingEmailSent())
|
||||
<div class="alert alert-success mb-0">
|
||||
<div class="alert alert-success">
|
||||
<i class="fas fa-check-circle"></i>
|
||||
<strong>E-Mail gesendet</strong><br>
|
||||
<strong>Zuletzt 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>
|
||||
|
||||
@php($trackingEmailHistory = $shipment->getTrackingEmailHistory())
|
||||
@if(!empty($trackingEmailHistory))
|
||||
<div class="table-responsive">
|
||||
<table class="table table-sm mb-0">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Zeitpunkt</th>
|
||||
<th>Typ</th>
|
||||
<th>Status</th>
|
||||
<th>Empfänger</th>
|
||||
<th>Sendungen</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@foreach($trackingEmailHistory as $entry)
|
||||
<tr>
|
||||
<td>
|
||||
@if(!empty($entry['sent_at']))
|
||||
{{ \Carbon\Carbon::parse($entry['sent_at'])->format('d.m.Y H:i') }}
|
||||
@else
|
||||
<span class="text-muted">-</span>
|
||||
@endif
|
||||
</td>
|
||||
<td>
|
||||
<span class="badge badge-{{ ($entry['type'] ?? '') === 'auto' ? 'info' : 'secondary' }}">
|
||||
{{ ($entry['type'] ?? '') === 'auto' ? 'Automatisch' : 'Manuell' }}
|
||||
</span>
|
||||
</td>
|
||||
<td>
|
||||
<span class="badge badge-{{ \Acme\Dhl\Models\DhlShipment::getStatusBadgeClassFor($entry['status'] ?? 'unknown') }}">
|
||||
{{ \Acme\Dhl\Models\DhlShipment::getStatusTranslationFor($entry['status'] ?? 'unknown') }}
|
||||
</span>
|
||||
@if(!empty($entry['tracking_status']))
|
||||
<br><small class="text-muted">{{ $entry['tracking_status'] }}</small>
|
||||
@endif
|
||||
</td>
|
||||
<td>
|
||||
@if(!empty($entry['recipient_email']))
|
||||
<small>{{ $entry['recipient_email'] }}</small>
|
||||
@else
|
||||
<span class="text-muted">-</span>
|
||||
@endif
|
||||
</td>
|
||||
<td>
|
||||
@if(!empty($entry['included_shipment_ids']))
|
||||
<small>#{{ implode(', #', $entry['included_shipment_ids']) }}</small>
|
||||
@else
|
||||
<span class="text-muted">-</span>
|
||||
@endif
|
||||
</td>
|
||||
</tr>
|
||||
@endforeach
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
@endif
|
||||
@else
|
||||
<div class="alert alert-secondary mb-0">
|
||||
<i class="fas fa-clock"></i>
|
||||
|
|
|
|||
|
|
@ -170,11 +170,15 @@
|
|||
</div>
|
||||
<div class="form-group col-sm-4">
|
||||
<label class="form-label">{{ __('Standard Produktcode') }}*</label>
|
||||
@php
|
||||
$selectedDhlProduct = \App\Models\Setting::getContentBySlug('dhl_product') ?: 'V01PAK';
|
||||
$selectedDhlProduct = $selectedDhlProduct === 'V62WP' ? 'V62KP' : $selectedDhlProduct;
|
||||
@endphp
|
||||
{{ Form::select('settings[dhl_product][val]', [
|
||||
'V01PAK' => 'V01PAK - DHL Paket National',
|
||||
'V53PAK' => 'V53PAK - DHL Paket International',
|
||||
'V62WP' => 'V62WP - Warenpost National'
|
||||
], \App\Models\Setting::getContentBySlug('dhl_product') ?: 'V01PAK', array('class'=>'form-control custom-select')) }}
|
||||
'V62KP' => 'V62KP - DHL Kleinpaket'
|
||||
], $selectedDhlProduct, array('class'=>'form-control custom-select')) }}
|
||||
{{ Form::hidden('settings[dhl_product][type]', 'text') }}
|
||||
</div>
|
||||
<div class="form-group col-sm-6">
|
||||
|
|
@ -196,6 +200,50 @@
|
|||
<strong>Deaktiviert:</strong> Versandlabel werden sofort erstellt (synchron)
|
||||
</small>
|
||||
</div>
|
||||
<div class="form-group col-sm-6">
|
||||
<label class="custom-control custom-checkbox mt-4">
|
||||
{!! Form::checkbox('settings[dhl_print_only_if_codeable][val]', 1, \App\Models\Setting::getContentBySlug('dhl_print_only_if_codeable') ?? config('dhl.print_only_if_codeable', true), ['class'=>'custom-control-input']) !!}
|
||||
<span class="custom-control-label">DHL-Leitcodierung erzwingen (mustEncode)</span>
|
||||
</label>
|
||||
{{ Form::hidden('settings[dhl_print_only_if_codeable][type]', 'bool') }}
|
||||
<small class="form-text text-muted">
|
||||
Aktiviert für deutsche Empfängeradressen <code>mustEncode=true</code>. DHL erstellt dann nur ein Label, wenn die Adresse leitcodierbar ist.
|
||||
</small>
|
||||
</div>
|
||||
<div class="form-group col-sm-12">
|
||||
<label class="form-label">{{ __('DHL Paket International Zielländer') }}</label>
|
||||
@php
|
||||
$dhlInternationalCountries = (new \App\Services\DhlProductResolver())->getSupportedInternationalCountries();
|
||||
$dhlCountryCodes = array_keys(\App\Services\DhlProductResolver::DHL_COUNTRY_CODES);
|
||||
$dhlInternationalCountryOptions = \App\Models\Country::query()
|
||||
->where('active', 1)
|
||||
->whereIn('code', $dhlCountryCodes)
|
||||
->where('code', '!=', \App\Services\DhlProductResolver::DOMESTIC_COUNTRY)
|
||||
->orderBy('de')
|
||||
->get();
|
||||
@endphp
|
||||
<div class="row">
|
||||
@foreach ($dhlInternationalCountryOptions as $countryOption)
|
||||
<div class="col-sm-6 col-md-4 col-lg-3">
|
||||
<label class="custom-control custom-checkbox">
|
||||
{!! Form::checkbox(
|
||||
'settings[dhl_international_countries][val][]',
|
||||
$countryOption->code,
|
||||
in_array($countryOption->code, $dhlInternationalCountries, true),
|
||||
['class' => 'custom-control-input']
|
||||
) !!}
|
||||
<span class="custom-control-label">
|
||||
{{ $countryOption->getLocated() }} ({{ $countryOption->code }})
|
||||
</span>
|
||||
</label>
|
||||
</div>
|
||||
@endforeach
|
||||
</div>
|
||||
{{ Form::hidden('settings[dhl_international_countries][type]', 'object') }}
|
||||
<small class="form-text text-muted">
|
||||
Aktivierte Länder verwenden im DHL-Modul automatisch V53PAK. Deutschland bleibt separat über V01PAK/V62KP geregelt.
|
||||
</small>
|
||||
</div>
|
||||
<div class="form-group col-sm-4">
|
||||
<button type="button" class="btn btn-secondary" id="test-dhl-login-btn">
|
||||
<i class="fas fa-key"></i> API Login testen
|
||||
|
|
@ -227,9 +275,9 @@
|
|||
{{ Form::hidden('settings[dhl_account_v53pak][type]', 'text') }}
|
||||
</div>
|
||||
<div class="form-group col-sm-6">
|
||||
<label class="form-label">{{ __('V62WP - Warenpost National') }}</label>
|
||||
{{ Form::text('settings[dhl_account_v62wp][val]', \App\Models\Setting::getContentBySlug('dhl_account_v62wp'), array('class'=>'form-control')) }}
|
||||
{{ Form::hidden('settings[dhl_account_v62wp][type]', 'text') }}
|
||||
<label class="form-label">{{ __('V62KP - DHL Kleinpaket') }}</label>
|
||||
{{ Form::text('settings[dhl_account_v62kp][val]', \App\Models\Setting::getContentBySlug('dhl_account_v62kp') ?: \App\Models\Setting::getContentBySlug('dhl_account_v62wp'), array('class'=>'form-control')) }}
|
||||
{{ Form::hidden('settings[dhl_account_v62kp][type]', 'text') }}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
|
|
|||
|
|
@ -308,6 +308,7 @@ $(document).ready(function() {
|
|||
badgeClass = 'badge-info';
|
||||
text = 'Zugestellt';
|
||||
break;
|
||||
case 'canceled':
|
||||
case 'cancelled':
|
||||
badgeClass = 'badge-secondary';
|
||||
text = 'Storniert';
|
||||
|
|
@ -345,6 +346,7 @@ $(document).ready(function() {
|
|||
iconClass = 'fas fa-home';
|
||||
color = 'text-info';
|
||||
break;
|
||||
case 'canceled':
|
||||
case 'cancelled':
|
||||
iconClass = 'fas fa-ban';
|
||||
color = 'text-secondary';
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue