This commit is contained in:
2026-04-04 18:20:13 +02:00
parent e95c4967d2
commit 7feda58a97
18 changed files with 845 additions and 325 deletions

View File

@@ -194,29 +194,40 @@ final class DeliveryStatus
private const ALLEGRO_EDGE_MAP = [
// Realne slugi z edge API (po slugify opisów)
'przygotowana_przez_nadawce' => self::CREATED,
'prepared_by_the_sender' => self::CREATED,
'nadana' => self::CONFIRMED,
'dispatched' => self::CONFIRMED,
'podjeta_z_maszyny_przez_kuriera' => self::IN_TRANSIT,
'podjeta_z_punktu_przez_kuriera' => self::IN_TRANSIT,
'podjeta_z_punktu' => self::IN_TRANSIT,
'odebrana_przez_kuriera' => self::IN_TRANSIT,
'picked_up_from_point_by_courier' => self::IN_TRANSIT,
'picked_up_by_the_courier' => self::IN_TRANSIT,
'przekazal_przesylke_do_magazynu' => self::IN_TRANSIT,
'przekazana_do_magazynu' => self::IN_TRANSIT,
'transferred_the_parcel_to_the_warehouse' => self::IN_TRANSIT,
'accepted_at_the_branch' => self::IN_TRANSIT,
'przesylka_wyjechala_w_droge_do_punktu_docelowego' => self::IN_TRANSIT,
'w_sortowni' => self::IN_TRANSIT,
'wyjechala_w_droge_do_punktu_docelowego' => self::IN_TRANSIT,
'wyslana_z_sortowni' => self::IN_TRANSIT,
'w_doreczeniu' => self::OUT_FOR_DELIVERY,
'wydana_do_doreczenia' => self::OUT_FOR_DELIVERY,
'released_for_delivery' => self::OUT_FOR_DELIVERY,
'dostarczana' => self::OUT_FOR_DELIVERY,
'gotowa_do_odbioru' => self::READY_FOR_PICKUP,
'oczekuje_na_odbior' => self::READY_FOR_PICKUP,
'przesylka_oczekuje_na_odbior' => self::READY_FOR_PICKUP,
'awaiting_pick_up' => self::READY_FOR_PICKUP,
'dostarczona' => self::DELIVERED,
'doreczona' => self::DELIVERED,
'odebrana' => self::DELIVERED,
'delivered' => self::DELIVERED,
'zwrocona' => self::RETURNED,
'zwrocona_do_nadawcy' => self::RETURNED,
'returned_to_the_sender' => self::RETURNED,
'anulowana' => self::CANCELLED,
'cancelled' => self::CANCELLED,
'odmowa_przyjecia' => self::PROBLEM,
'uszkodzona' => self::PROBLEM,
'zagubiona' => self::PROBLEM,
@@ -224,27 +235,38 @@ final class DeliveryStatus
private const ALLEGRO_EDGE_DESCRIPTIONS = [
'przygotowana_przez_nadawce' => 'Przesyłka przygotowana przez nadawcę',
'prepared_by_the_sender' => 'Przesyłka przygotowana przez nadawcę',
'nadana' => 'Przesyłka nadana',
'dispatched' => 'Przesyłka nadana',
'podjeta_z_maszyny_przez_kuriera' => 'Podjęta z maszyny przez kuriera',
'podjeta_z_punktu_przez_kuriera' => 'Podjęta z punktu przez kuriera',
'odebrana_przez_kuriera' => 'Odebrana przez kuriera',
'picked_up_from_point_by_courier' => 'Podjęta z punktu przez kuriera',
'picked_up_by_the_courier' => 'Odebrana przez kuriera',
'przekazana_do_magazynu' => 'Przekazana do magazynu',
'transferred_the_parcel_to_the_warehouse' => 'Przekazana do magazynu',
'accepted_at_the_branch' => 'Przyjęta w oddziale',
'przesylka_wyjechala_w_droge_do_punktu_docelowego' => 'Wyjechała w drogę do punktu docelowego',
'w_sortowni' => 'W sortowni',
'wyjechala_w_droge_do_punktu_docelowego' => 'Wyjechała w drogę do punktu docelowego',
'wyslana_z_sortowni' => 'Wysłana z sortowni',
'w_doreczeniu' => 'W doręczeniu',
'wydana_do_doreczenia' => 'Wydana do doręczenia',
'released_for_delivery' => 'Wydana do doręczenia',
'dostarczana' => 'Dostarczana',
'gotowa_do_odbioru' => 'Gotowa do odbioru',
'oczekuje_na_odbior' => 'Oczekuje na odbiór',
'przesylka_oczekuje_na_odbior' => 'Oczekuje na odbiór',
'awaiting_pick_up' => 'Oczekuje na odbiór',
'dostarczona' => 'Dostarczona',
'doreczona' => 'Doręczona',
'odebrana' => 'Odebrana',
'delivered' => 'Dostarczona',
'zwrocona' => 'Zwrócona',
'zwrocona_do_nadawcy' => 'Zwrócona do nadawcy',
'returned_to_the_sender' => 'Zwrócona do nadawcy',
'anulowana' => 'Anulowana',
'cancelled' => 'Anulowana',
'odmowa_przyjecia' => 'Odmowa przyjęcia',
'uszkodzona' => 'Uszkodzona',
'zagubiona' => 'Zagubiona',
@@ -369,6 +391,9 @@ final class DeliveryStatus
$text = preg_replace('/^Przesy[łl]ka zosta[łl]a\s+/ui', '', $text);
$text = preg_replace('/^Kurier\s+/ui', '', $text);
$text = preg_replace('/^Paczka zosta[łl]a\s+/ui', '', $text);
$text = preg_replace('/^Parcel has been\s+/i', '', $text);
$text = preg_replace('/^Parcel is\s+/i', '', $text);
$text = preg_replace('/^Courier has\s+/i', '', $text);
// Polskie znaki na ASCII
$polish = ['ą','ć','ę','ł','ń','ó','ś','ź','ż','Ą','Ć','Ę','Ł','Ń','Ó','Ś','Ź','Ż'];
@@ -391,6 +416,34 @@ final class DeliveryStatus
{
$lower = mb_strtolower($description, 'UTF-8');
if (str_contains($lower, 'delivered') || str_contains($lower, 'picked up by recipient')) {
return self::DELIVERED;
}
if (str_contains($lower, 'returned')) {
return self::RETURNED;
}
if (str_contains($lower, 'cancelled') || str_contains($lower, 'canceled')) {
return self::CANCELLED;
}
if (str_contains($lower, 'out for delivery') || str_contains($lower, 'released for delivery')) {
return self::OUT_FOR_DELIVERY;
}
if (str_contains($lower, 'awaiting pick-up') || str_contains($lower, 'awaiting pickup') || str_contains($lower, 'ready for pickup') || str_contains($lower, 'ready for pick-up')) {
return self::READY_FOR_PICKUP;
}
if (str_contains($lower, 'courier') || str_contains($lower, 'warehouse') || str_contains($lower, 'branch') || str_contains($lower, 'in transit') || str_contains($lower, 'picked up')) {
return self::IN_TRANSIT;
}
if (str_contains($lower, 'dispatched')) {
return self::CONFIRMED;
}
if (str_contains($lower, 'prepared') || str_contains($lower, 'created')) {
return self::CREATED;
}
if (str_contains($lower, 'damaged') || str_contains($lower, 'problem') || str_contains($lower, 'lost')) {
return self::PROBLEM;
}
if (str_contains($lower, 'doręczon') || str_contains($lower, 'dostarczono') || str_contains($lower, 'odebrana przez odbiorc')) {
return self::DELIVERED;
}