feat(28-shipment-tracking-ui): badge'e statusow dostawy, linki sledzenia, ustawienia interwalu trackingu
- Kolorowe badge'e statusow dostawy w tabelach paczek (show.php + prepare.php) - Link sledzenia z carrier detection (InPost, Apaczka, Orlen, Allegro, Google fallback) - Sekcja Status dostawy w boksie Platnosc i wysylka - Ustawienie interwalu trackingu crona (5-120 min) w zakladce Ustawienia - Tekstowe mapowania statusow Apaczka API (NEW, CONFIRMED, etc.) - Fix: use-statements ApaczkaShipmentService (pre-existing bug) - Fix: pickup date normalization (next day po 16:00) - Fix: przycisk Pobierz etykiete (POST zamiast link do prepare) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -131,6 +131,18 @@ final class DeliveryStatus
|
||||
'8' => self::PROBLEM,
|
||||
'9' => self::READY_FOR_PICKUP,
|
||||
'10' => self::IN_TRANSIT,
|
||||
'NEW' => self::CREATED,
|
||||
'PENDING' => self::CREATED,
|
||||
'CONFIRMED' => self::CONFIRMED,
|
||||
'PICKED_UP' => self::IN_TRANSIT,
|
||||
'IN_TRANSIT' => self::IN_TRANSIT,
|
||||
'OUT_FOR_DELIVERY' => self::OUT_FOR_DELIVERY,
|
||||
'DELIVERED' => self::DELIVERED,
|
||||
'RETURNED' => self::RETURNED,
|
||||
'CANCELLED' => self::CANCELLED,
|
||||
'ERROR' => self::PROBLEM,
|
||||
'WAITING_FOR_PICKUP' => self::READY_FOR_PICKUP,
|
||||
'REDIRECT' => self::IN_TRANSIT,
|
||||
];
|
||||
|
||||
private const APACZKA_DESCRIPTIONS = [
|
||||
@@ -145,6 +157,18 @@ final class DeliveryStatus
|
||||
'8' => 'Błąd zamówienia',
|
||||
'9' => 'Oczekuje na odbiór w punkcie',
|
||||
'10' => 'Przekierowana',
|
||||
'NEW' => 'Zamówienie utworzone',
|
||||
'PENDING' => 'Oczekuje na przetworzenie',
|
||||
'CONFIRMED' => 'Zamówienie potwierdzone',
|
||||
'PICKED_UP' => 'Odebrana przez kuriera',
|
||||
'IN_TRANSIT' => 'W transporcie',
|
||||
'OUT_FOR_DELIVERY' => 'W doręczeniu',
|
||||
'DELIVERED' => 'Doręczona',
|
||||
'RETURNED' => 'Zwrócona do nadawcy',
|
||||
'CANCELLED' => 'Anulowana',
|
||||
'ERROR' => 'Błąd zamówienia',
|
||||
'WAITING_FOR_PICKUP' => 'Oczekuje na odbiór w punkcie',
|
||||
'REDIRECT' => 'Przekierowana',
|
||||
];
|
||||
|
||||
private const ALLEGRO_MAP = [
|
||||
@@ -200,4 +224,61 @@ final class DeliveryStatus
|
||||
{
|
||||
return in_array($status, self::TERMINAL_STATUSES, true);
|
||||
}
|
||||
|
||||
public static function trackingUrl(string $provider, string $trackingNumber, string $carrierId = ''): ?string
|
||||
{
|
||||
$number = trim($trackingNumber);
|
||||
if ($number === '') {
|
||||
return null;
|
||||
}
|
||||
|
||||
$encoded = rawurlencode($number);
|
||||
|
||||
if ($provider === 'inpost') {
|
||||
return 'https://inpost.pl/sledzenie-przesylek?number=' . $encoded;
|
||||
}
|
||||
|
||||
if ($provider === 'allegro_wza') {
|
||||
return 'https://allegro.pl/przesylka/' . $encoded;
|
||||
}
|
||||
|
||||
if ($carrierId !== '') {
|
||||
$url = self::matchCarrierByName($encoded, strtolower(trim($carrierId)));
|
||||
if ($url !== null) {
|
||||
return $url;
|
||||
}
|
||||
}
|
||||
|
||||
return 'https://www.google.com/search?q=' . $encoded . '+sledzenie+przesylki';
|
||||
}
|
||||
|
||||
private static function matchCarrierByName(string $encoded, string $carrier): ?string
|
||||
{
|
||||
if (str_contains($carrier, 'dpd')) {
|
||||
return 'https://tracktrace.dpd.com.pl/parcelDetails?p1=' . $encoded;
|
||||
}
|
||||
if (str_contains($carrier, 'dhl')) {
|
||||
return 'https://www.dhl.com/pl-pl/home/sledzenie-przesylki.html?tracking-id=' . $encoded;
|
||||
}
|
||||
if (str_contains($carrier, 'inpost') || str_contains($carrier, 'paczkomat')) {
|
||||
return 'https://inpost.pl/sledzenie-przesylek?number=' . $encoded;
|
||||
}
|
||||
if (str_contains($carrier, 'orlen') || str_contains($carrier, 'ruch')) {
|
||||
return 'https://www.orlenpaczka.pl/sledz-paczke/?numer=' . $encoded;
|
||||
}
|
||||
if (str_contains($carrier, 'poczta') || str_contains($carrier, 'pocztex')) {
|
||||
return 'https://emonitoring.poczta-polska.pl/?numer=' . $encoded;
|
||||
}
|
||||
if (str_contains($carrier, 'ups')) {
|
||||
return 'https://www.ups.com/track?tracknum=' . $encoded;
|
||||
}
|
||||
if (str_contains($carrier, 'fedex')) {
|
||||
return 'https://www.fedex.com/fedextrack/?trknbr=' . $encoded;
|
||||
}
|
||||
if (str_contains($carrier, 'gls')) {
|
||||
return 'https://gls-group.com/PL/pl/sledzenie-paczek?match=' . $encoded;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user