This commit is contained in:
2026-04-07 10:44:03 +02:00
parent aadf98bc80
commit 1933c74395
19 changed files with 906 additions and 246 deletions

View File

@@ -17,6 +17,14 @@ $statusSyncDirection = (string) ($statusSyncDirection ?? 'allegro_to_orderpro');
$statusSyncIntervalMinutes = max(1, (int) ($statusSyncIntervalMinutes ?? 15));
$statusMappings = is_array($statusMappings ?? null) ? $statusMappings : [];
$orderproStatuses = is_array($orderproStatuses ?? null) ? $orderproStatuses : [];
$allegroStatuses = is_array($allegroStatuses ?? null) ? $allegroStatuses : [];
$allegroMappingIndex = [];
foreach ($statusMappings as $m) {
$opCode = strtolower(trim((string) ($m['orderpro_status_code'] ?? '')));
if ($opCode !== '' && trim((string) ($m['allegro_status_code'] ?? '')) !== '') {
$allegroMappingIndex[$opCode] = $m;
}
}
?>
<section class="card">
@@ -150,75 +158,50 @@ $orderproStatuses = is_array($orderproStatuses ?? null) ? $orderproStatuses : []
<button type="submit" class="btn btn--secondary"><?= $e($t('settings.allegro.statuses.actions.sync')) ?></button>
</form>
<form class="statuses-form mt-12" action="/settings/integrations/allegro/statuses/save" method="post" novalidate>
<input type="hidden" name="_token" value="<?= $e($csrfToken ?? '') ?>">
<label class="form-field">
<span class="field-label"><?= $e($t('settings.allegro.statuses.fields.allegro_status_code')) ?></span>
<input class="form-control" type="text" name="allegro_status_code" maxlength="64" required placeholder="<?= $e($t('settings.allegro.statuses.fields.allegro_status_code_placeholder')) ?>">
</label>
<label class="form-field">
<span class="field-label"><?= $e($t('settings.allegro.statuses.fields.allegro_status_name')) ?></span>
<input class="form-control" type="text" name="allegro_status_name" maxlength="120" placeholder="<?= $e($t('settings.allegro.statuses.fields.allegro_status_name_placeholder')) ?>">
</label>
<label class="form-field">
<span class="field-label"><?= $e($t('settings.allegro.statuses.fields.orderpro_status_code')) ?></span>
<select class="form-control" name="orderpro_status_code" required>
<option value=""><?= $e($t('settings.allegro.statuses.fields.orderpro_status_placeholder')) ?></option>
<?php foreach ($orderproStatuses as $status): ?>
<?php $statusCode = strtolower(trim((string) ($status['code'] ?? ''))); ?>
<?php if ($statusCode === '') continue; ?>
<option value="<?= $e($statusCode) ?>">
<?= $e((string) ($status['name'] ?? $statusCode)) ?> (<?= $e($statusCode) ?>)
</option>
<?php endforeach; ?>
</select>
</label>
<div class="form-actions">
<button type="submit" class="btn btn--primary"><?= $e($t('settings.allegro.statuses.actions.save')) ?></button>
</div>
</form>
</section>
<section class="mt-16">
<h3 class="section-title"><?= $e($t('settings.allegro.statuses.list_title')) ?></h3>
<form action="/settings/integrations/allegro/statuses/save-bulk" method="post">
<form action="/settings/integrations/allegro/statuses/save-bulk" method="post" class="mt-12">
<input type="hidden" name="_token" value="<?= $e($csrfToken ?? '') ?>">
<div class="table-wrap mt-12">
<table class="table">
<thead>
<tr>
<th><?= $e($t('settings.allegro.statuses.fields.allegro_status_code')) ?></th>
<th><?= $e($t('settings.allegro.statuses.fields.allegro_status_name')) ?></th>
<th><?= $e($t('settings.allegro.statuses.fields.orderpro_status_code')) ?></th>
<th><?= $e($t('settings.order_statuses.fields.orderpro_status')) ?></th>
<th><?= $e($t('settings.allegro.statuses.fields.allegro_status')) ?></th>
</tr>
</thead>
<tbody>
<?php if ($statusMappings === []): ?>
<?php if ($orderproStatuses === []): ?>
<tr>
<td colspan="3" class="muted"><?= $e($t('settings.allegro.statuses.empty')) ?></td>
<td colspan="2" class="muted"><?= $e($t('settings.integrations.statuses.no_orderpro_statuses')) ?></td>
</tr>
<?php else: ?>
<?php foreach ($statusMappings as $mapping): ?>
<?php foreach ($orderproStatuses as $opStatus): ?>
<?php
$opCode = strtolower(trim((string) ($opStatus['code'] ?? '')));
if ($opCode === '') continue;
$opName = (string) ($opStatus['name'] ?? $opCode);
$mapped = $allegroMappingIndex[$opCode] ?? null;
$selectedAllegroCode = $mapped !== null ? strtolower(trim((string) ($mapped['allegro_status_code'] ?? ''))) : '';
?>
<tr>
<td>
<code><?= $e((string) ($mapping['allegro_status_code'] ?? '')) ?></code>
<input type="hidden" name="allegro_status_code[]" value="<?= $e((string) ($mapping['allegro_status_code'] ?? '')) ?>">
<?= $e($opName) ?> <code class="muted"><?= $e($opCode) ?></code>
<input type="hidden" name="orderpro_status_code[]" value="<?= $e($opCode) ?>">
</td>
<td>
<?= $e((string) ($mapping['allegro_status_name'] ?? '')) ?>
<input type="hidden" name="allegro_status_name[]" value="<?= $e((string) ($mapping['allegro_status_name'] ?? '')) ?>">
</td>
<td>
<select class="form-control" name="orderpro_status_code[]">
<option value=""><?= $e($t('settings.allegro.statuses.fields.orderpro_status_placeholder')) ?></option>
<?php foreach ($orderproStatuses as $status): ?>
<?php $statusCode = strtolower(trim((string) ($status['code'] ?? ''))); ?>
<?php if ($statusCode === '') continue; ?>
<option value="<?= $e($statusCode) ?>"<?= $statusCode === strtolower(trim((string) ($mapping['orderpro_status_code'] ?? ''))) ? ' selected' : '' ?>>
<?= $e((string) ($status['name'] ?? $statusCode)) ?> (<?= $e($statusCode) ?>)
<select class="form-control" name="allegro_status_code[]" data-allegro-name-target="allegro_status_name_<?= $e($opCode) ?>">
<option value="" data-name=""><?= $e($t('settings.order_statuses.fields.no_mapping')) ?></option>
<?php foreach ($allegroStatuses as $extStatus): ?>
<?php
$extCode = strtolower(trim((string) ($extStatus['code'] ?? '')));
$extName = (string) ($extStatus['name'] ?? $extCode);
if ($extCode === '') continue;
?>
<option value="<?= $e($extCode) ?>" data-name="<?= $e($extName) ?>"<?= $selectedAllegroCode === $extCode ? ' selected' : '' ?>>
<?= $e($extName !== '' ? $extName : $extCode) ?> (<?= $e($extCode) ?>)
</option>
<?php endforeach; ?>
</select>
<input type="hidden" name="allegro_status_name[]" id="allegro_status_name_<?= $e($opCode) ?>" value="<?= $e($mapped !== null ? (string) ($mapped['allegro_status_name'] ?? '') : '') ?>">
</td>
</tr>
<?php endforeach; ?>
@@ -226,7 +209,7 @@ $orderproStatuses = is_array($orderproStatuses ?? null) ? $orderproStatuses : []
</tbody>
</table>
</div>
<?php if ($statusMappings !== []): ?>
<?php if ($orderproStatuses !== []): ?>
<div class="form-actions mt-12">
<button type="submit" class="btn btn--primary"><?= $e($t('settings.allegro.statuses.actions.save_bulk')) ?></button>
</div>
@@ -720,4 +703,16 @@ $orderproStatuses = is_array($orderproStatuses ?? null) ? $orderproStatuses : []
}
});
})();
(function () {
document.querySelectorAll('select[data-allegro-name-target]').forEach(function (select) {
select.addEventListener('change', function () {
var targetId = select.getAttribute('data-allegro-name-target');
var hidden = document.getElementById(targetId);
if (!hidden) return;
var selected = select.options[select.selectedIndex];
hidden.value = selected ? (selected.getAttribute('data-name') || '') : '';
});
});
})();
</script>

View File

@@ -2,8 +2,9 @@
$list = is_array($rows ?? null) ? $rows : [];
$selected = is_array($selectedIntegration ?? null) ? $selectedIntegration : null;
$formValues = is_array($form ?? null) ? $form : [];
$statusRows = is_array($statusRows ?? null) ? $statusRows : [];
$mappingIndex = is_array($mappingIndex ?? null) ? $mappingIndex : [];
$orderproStatuses = is_array($orderproStatuses ?? null) ? $orderproStatuses : [];
$shopproStatuses = is_array($shopproStatuses ?? null) ? $shopproStatuses : [];
$ordersImportIntervalMinutes = max(1, (int) ($ordersImportIntervalMinutes ?? 5));
$statusSyncIntervalMinutes = max(1, (int) ($statusSyncIntervalMinutes ?? 15));
$paymentSyncIntervalMinutes = max(1, (int) ($paymentSyncIntervalMinutes ?? 10));
@@ -210,43 +211,44 @@ foreach ($dmMappings as $dm) {
<table class="table">
<thead>
<tr>
<th><?= $e($t('settings.order_statuses.fields.shoppro_code')) ?></th>
<th><?= $e($t('settings.order_statuses.fields.shoppro_name')) ?></th>
<th><?= $e($t('settings.order_statuses.fields.orderpro_status')) ?></th>
<th><?= $e($t('settings.order_statuses.fields.shoppro_status')) ?></th>
</tr>
</thead>
<tbody>
<?php if ($statusRows === []): ?>
<?php if ($orderproStatuses === []): ?>
<tr>
<td colspan="3" class="muted"><?= $e($t('settings.integrations.statuses.empty')) ?></td>
<td colspan="2" class="muted"><?= $e($t('settings.integrations.statuses.no_orderpro_statuses')) ?></td>
</tr>
<?php else: ?>
<?php foreach ($statusRows as $row): ?>
<?php foreach ($orderproStatuses as $opStatus): ?>
<?php
$shopCode = (string) ($row['shoppro_status_code'] ?? '');
$shopName = (string) ($row['shoppro_status_name'] ?? '');
$selectedOrderpro = strtolower(trim((string) ($row['orderpro_status_code'] ?? '')));
$opCode = strtolower(trim((string) ($opStatus['code'] ?? '')));
if ($opCode === '') continue;
$opName = (string) ($opStatus['name'] ?? $opCode);
$mapped = $mappingIndex[$opCode] ?? null;
$selectedShopCode = $mapped !== null ? (string) ($mapped['shoppro_status_code'] ?? '') : '';
?>
<tr>
<td>
<code><?= $e($shopCode) ?></code>
<input type="hidden" name="shoppro_status_code[]" value="<?= $e($shopCode) ?>">
<?= $e($opName) ?> <code class="muted"><?= $e($opCode) ?></code>
<input type="hidden" name="orderpro_status_code[]" value="<?= $e($opCode) ?>">
</td>
<td>
<?= $e($shopName) ?>
<input type="hidden" name="shoppro_status_name[]" value="<?= $e($shopName) ?>">
</td>
<td>
<select class="form-control" name="orderpro_status_code[]">
<option value=""><?= $e($t('settings.order_statuses.fields.no_mapping')) ?></option>
<?php foreach ($orderproStatuses as $status): ?>
<?php $statusCode = strtolower(trim((string) ($status['code'] ?? ''))); ?>
<?php if ($statusCode === '') continue; ?>
<option value="<?= $e($statusCode) ?>"<?= $selectedOrderpro === $statusCode ? ' selected' : '' ?>>
<?= $e((string) ($status['name'] ?? $statusCode)) ?> (<?= $e($statusCode) ?>)
<select class="form-control" name="shoppro_status_code[]" data-shoppro-name-target="shoppro_status_name_<?= $e($opCode) ?>">
<option value="" data-name=""><?= $e($t('settings.order_statuses.fields.no_mapping')) ?></option>
<?php foreach ($shopproStatuses as $extStatus): ?>
<?php
$extCode = (string) ($extStatus['code'] ?? '');
$extName = (string) ($extStatus['name'] ?? $extCode);
if ($extCode === '') continue;
?>
<option value="<?= $e($extCode) ?>" data-name="<?= $e($extName) ?>"<?= $selectedShopCode === $extCode ? ' selected' : '' ?>>
<?= $e($extName) ?> (<?= $e($extCode) ?>)
</option>
<?php endforeach; ?>
</select>
<input type="hidden" name="shoppro_status_name[]" id="shoppro_status_name_<?= $e($opCode) ?>" value="<?= $e($mapped !== null ? (string) ($mapped['shoppro_status_name'] ?? '') : '') ?>">
</td>
</tr>
<?php endforeach; ?>
@@ -254,7 +256,7 @@ foreach ($dmMappings as $dm) {
</tbody>
</table>
</div>
<?php if ($statusRows !== []): ?>
<?php if ($orderproStatuses !== []): ?>
<div class="form-actions mt-12">
<button type="submit" class="btn btn--primary"><?= $e($t('settings.order_statuses.actions.save')) ?></button>
</div>
@@ -740,4 +742,16 @@ foreach ($dmMappings as $dm) {
}
});
})();
(function () {
document.querySelectorAll('select[data-shoppro-name-target]').forEach(function (select) {
select.addEventListener('change', function () {
var targetId = select.getAttribute('data-shoppro-name-target');
var hidden = document.getElementById(targetId);
if (!hidden) return;
var selected = select.options[select.selectedIndex];
hidden.value = selected ? (selected.getAttribute('data-name') || '') : '';
});
});
})();
</script>