diff --git a/packages/admin/resources/lang/ar/order.php b/packages/admin/resources/lang/ar/order.php index 3fea2c9554..faf48ea555 100644 --- a/packages/admin/resources/lang/ar/order.php +++ b/packages/admin/resources/lang/ar/order.php @@ -295,7 +295,7 @@ 'shipped_at' => 'تاريخ الشحن', 'handed_over' => [ 'shipping' => 'تاريخ الشحن', - 'collection' => 'تاريخ الاستلام', + 'pickup' => 'تاريخ الاستلام', 'digital' => 'تاريخ التوفير', ], 'handed_over_default' => 'تاريخ التنفيذ', @@ -339,7 +339,7 @@ 'label' => 'وضع علامة كمنفّذة', 'modal_heading' => 'وضع علامة على عملية التنفيذ كمنفّذة', 'labels' => [ - 'collection' => 'وضع علامة كمستلَمة', + 'pickup' => 'وضع علامة كمستلَمة', ], 'notification' => [ 'success' => 'تم وضع علامة على عملية التنفيذ كمنفّذة.', diff --git a/packages/admin/resources/lang/bg/order.php b/packages/admin/resources/lang/bg/order.php index a0e073419b..1c0d7d0227 100644 --- a/packages/admin/resources/lang/bg/order.php +++ b/packages/admin/resources/lang/bg/order.php @@ -295,7 +295,7 @@ 'shipped_at' => 'Изпратено на', 'handed_over' => [ 'shipping' => 'Изпратено на', - 'collection' => 'Получено на', + 'pickup' => 'Получено на', 'digital' => 'Предоставено на', ], 'handed_over_default' => 'Изпълнено на', @@ -339,7 +339,7 @@ 'label' => 'Отбележи като изпълнено', 'modal_heading' => 'Отбележи изпълнението като изпълнено', 'labels' => [ - 'collection' => 'Отбележи като получено', + 'pickup' => 'Отбележи като получено', ], 'notification' => [ 'success' => 'Изпълнението е отбелязано като изпълнено.', diff --git a/packages/admin/resources/lang/de/order.php b/packages/admin/resources/lang/de/order.php index 71b2223c48..aa808dc5af 100644 --- a/packages/admin/resources/lang/de/order.php +++ b/packages/admin/resources/lang/de/order.php @@ -295,7 +295,7 @@ 'shipped_at' => 'Versendet am', 'handed_over' => [ 'shipping' => 'Versendet am', - 'collection' => 'Abgeholt am', + 'pickup' => 'Abgeholt am', 'digital' => 'Bereitgestellt am', ], 'handed_over_default' => 'Erfüllt am', @@ -339,7 +339,7 @@ 'label' => 'Als erfüllt markieren', 'modal_heading' => 'Fulfillment als erfüllt markieren', 'labels' => [ - 'collection' => 'Als abgeholt markieren', + 'pickup' => 'Als abgeholt markieren', ], 'notification' => [ 'success' => 'Fulfillment als erfüllt markiert.', diff --git a/packages/admin/resources/lang/en/order.php b/packages/admin/resources/lang/en/order.php index fb60be6660..a2c6d51740 100644 --- a/packages/admin/resources/lang/en/order.php +++ b/packages/admin/resources/lang/en/order.php @@ -313,7 +313,7 @@ 'shipped_at' => 'Shipped at', 'handed_over' => [ 'shipping' => 'Shipped at', - 'collection' => 'Collected at', + 'pickup' => 'Picked up at', 'digital' => 'Provisioned at', ], 'handed_over_default' => 'Fulfilled at', @@ -357,7 +357,7 @@ 'label' => 'Mark fulfilled', 'modal_heading' => 'Mark fulfilment as fulfilled', 'labels' => [ - 'collection' => 'Mark collected', + 'pickup' => 'Mark picked up', ], 'notification' => [ 'success' => 'Fulfilment marked as fulfilled.', diff --git a/packages/admin/resources/lang/es/order.php b/packages/admin/resources/lang/es/order.php index 9b1cf2b962..3c4d3f76d9 100644 --- a/packages/admin/resources/lang/es/order.php +++ b/packages/admin/resources/lang/es/order.php @@ -295,7 +295,7 @@ 'shipped_at' => 'Enviado el', 'handed_over' => [ 'shipping' => 'Enviado el', - 'collection' => 'Recogido el', + 'pickup' => 'Recogido el', 'digital' => 'Aprovisionado el', ], 'handed_over_default' => 'Cumplido el', @@ -339,7 +339,7 @@ 'label' => 'Marcar como cumplido', 'modal_heading' => 'Marcar el cumplimiento como cumplido', 'labels' => [ - 'collection' => 'Marcar como recogido', + 'pickup' => 'Marcar como recogido', ], 'notification' => [ 'success' => 'Cumplimiento marcado como cumplido.', diff --git a/packages/admin/resources/lang/fa/order.php b/packages/admin/resources/lang/fa/order.php index be1ac3cd79..3d74bb10f7 100644 --- a/packages/admin/resources/lang/fa/order.php +++ b/packages/admin/resources/lang/fa/order.php @@ -295,7 +295,7 @@ 'shipped_at' => 'زمان ارسال', 'handed_over' => [ 'shipping' => 'زمان ارسال', - 'collection' => 'زمان تحویل حضوری', + 'pickup' => 'زمان تحویل حضوری', 'digital' => 'زمان تأمین دیجیتال', ], 'handed_over_default' => 'زمان تأمین', @@ -339,7 +339,7 @@ 'label' => 'علامت‌گذاری به‌عنوان تأمین‌شده', 'modal_heading' => 'علامت‌گذاری تأمین سفارش به‌عنوان تأمین‌شده', 'labels' => [ - 'collection' => 'علامت‌گذاری به‌عنوان تحویل‌گرفته‌شده', + 'pickup' => 'علامت‌گذاری به‌عنوان تحویل‌گرفته‌شده', ], 'notification' => [ 'success' => 'تأمین سفارش به‌عنوان تأمین‌شده علامت‌گذاری شد.', diff --git a/packages/admin/resources/lang/fr/order.php b/packages/admin/resources/lang/fr/order.php index 0505a1e34c..daf3ff126c 100644 --- a/packages/admin/resources/lang/fr/order.php +++ b/packages/admin/resources/lang/fr/order.php @@ -295,7 +295,7 @@ 'shipped_at' => 'Expédié le', 'handed_over' => [ 'shipping' => 'Expédié le', - 'collection' => 'Retiré le', + 'pickup' => 'Retiré le', 'digital' => 'Mis à disposition le', ], 'handed_over_default' => 'Traité le', @@ -339,7 +339,7 @@ 'label' => 'Marquer comme traité', 'modal_heading' => 'Marquer le traitement comme traité', 'labels' => [ - 'collection' => 'Marquer comme retiré', + 'pickup' => 'Marquer comme retiré', ], 'notification' => [ 'success' => 'Traitement marqué comme traité.', diff --git a/packages/admin/resources/lang/hr/order.php b/packages/admin/resources/lang/hr/order.php index 9225d6671a..06d3b1b3d1 100644 --- a/packages/admin/resources/lang/hr/order.php +++ b/packages/admin/resources/lang/hr/order.php @@ -295,7 +295,7 @@ 'shipped_at' => 'Otpremljeno', 'handed_over' => [ 'shipping' => 'Otpremljeno', - 'collection' => 'Preuzeto', + 'pickup' => 'Preuzeto', 'digital' => 'Stavljeno na raspolaganje', ], 'handed_over_default' => 'Ispunjeno', @@ -339,7 +339,7 @@ 'label' => 'Označi ispunjeno', 'modal_heading' => 'Označi ispunjenje kao ispunjeno', 'labels' => [ - 'collection' => 'Označi preuzeto', + 'pickup' => 'Označi preuzeto', ], 'notification' => [ 'success' => 'Ispunjenje označeno kao ispunjeno.', diff --git a/packages/admin/resources/lang/hu/order.php b/packages/admin/resources/lang/hu/order.php index 3446ea90dd..f3d76f5dd1 100644 --- a/packages/admin/resources/lang/hu/order.php +++ b/packages/admin/resources/lang/hu/order.php @@ -295,7 +295,7 @@ 'shipped_at' => 'Kiszállítva', 'handed_over' => [ 'shipping' => 'Kiszállítva', - 'collection' => 'Átvéve', + 'pickup' => 'Átvéve', 'digital' => 'Hozzáférhetővé téve', ], 'handed_over_default' => 'Teljesítve', @@ -339,7 +339,7 @@ 'label' => 'Teljesítettnek jelölés', 'modal_heading' => 'Teljesítés megjelölése teljesítettként', 'labels' => [ - 'collection' => 'Átvettnek jelölés', + 'pickup' => 'Átvettnek jelölés', ], 'notification' => [ 'success' => 'Teljesítés teljesítettként megjelölve.', diff --git a/packages/admin/resources/lang/mn/order.php b/packages/admin/resources/lang/mn/order.php index 1a0837f1a4..1a13adb34e 100644 --- a/packages/admin/resources/lang/mn/order.php +++ b/packages/admin/resources/lang/mn/order.php @@ -295,7 +295,7 @@ 'shipped_at' => 'Илгээсэн огноо', 'handed_over' => [ 'shipping' => 'Илгээсэн огноо', - 'collection' => 'Хүлээн авсан огноо', + 'pickup' => 'Хүлээн авсан огноо', 'digital' => 'Нийлүүлсэн огноо', ], 'handed_over_default' => 'Биелүүлсэн огноо', @@ -339,7 +339,7 @@ 'label' => 'Биелүүлсэн гэж тэмдэглэх', 'modal_heading' => 'Биелүүлэлтийг биелүүлсэн гэж тэмдэглэх', 'labels' => [ - 'collection' => 'Хүлээн авсан гэж тэмдэглэх', + 'pickup' => 'Хүлээн авсан гэж тэмдэглэх', ], 'notification' => [ 'success' => 'Биелүүлэлтийг биелүүлсэн гэж тэмдэглэв.', diff --git a/packages/admin/resources/lang/nl/order.php b/packages/admin/resources/lang/nl/order.php index 593cc5a160..0ef0d8c893 100644 --- a/packages/admin/resources/lang/nl/order.php +++ b/packages/admin/resources/lang/nl/order.php @@ -295,7 +295,7 @@ 'shipped_at' => 'Verzonden op', 'handed_over' => [ 'shipping' => 'Verzonden op', - 'collection' => 'Afgehaald op', + 'pickup' => 'Afgehaald op', 'digital' => 'Beschikbaar gesteld op', ], 'handed_over_default' => 'Afgehandeld op', @@ -339,7 +339,7 @@ 'label' => 'Markeren als afgehandeld', 'modal_heading' => 'Fulfilment markeren als afgehandeld', 'labels' => [ - 'collection' => 'Markeren als afgehaald', + 'pickup' => 'Markeren als afgehaald', ], 'notification' => [ 'success' => 'Fulfilment gemarkeerd als afgehandeld.', diff --git a/packages/admin/resources/lang/pl/order.php b/packages/admin/resources/lang/pl/order.php index 16e7f612a0..5819866a51 100644 --- a/packages/admin/resources/lang/pl/order.php +++ b/packages/admin/resources/lang/pl/order.php @@ -295,7 +295,7 @@ 'shipped_at' => 'Data wysyłki', 'handed_over' => [ 'shipping' => 'Data wysyłki', - 'collection' => 'Data odbioru', + 'pickup' => 'Data odbioru', 'digital' => 'Data udostępnienia', ], 'handed_over_default' => 'Data realizacji', @@ -339,7 +339,7 @@ 'label' => 'Oznacz jako zrealizowaną', 'modal_heading' => 'Oznacz realizację jako zrealizowaną', 'labels' => [ - 'collection' => 'Oznacz jako odebraną', + 'pickup' => 'Oznacz jako odebraną', ], 'notification' => [ 'success' => 'Realizacja oznaczona jako zrealizowana.', diff --git a/packages/admin/resources/lang/pt_BR/order.php b/packages/admin/resources/lang/pt_BR/order.php index eaeb297524..6b758cf1a7 100644 --- a/packages/admin/resources/lang/pt_BR/order.php +++ b/packages/admin/resources/lang/pt_BR/order.php @@ -295,7 +295,7 @@ 'shipped_at' => 'Enviado em', 'handed_over' => [ 'shipping' => 'Enviado em', - 'collection' => 'Retirado em', + 'pickup' => 'Retirado em', 'digital' => 'Disponibilizado em', ], 'handed_over_default' => 'Concluído em', @@ -339,7 +339,7 @@ 'label' => 'Marcar como concluído', 'modal_heading' => 'Marcar fulfillment como concluído', 'labels' => [ - 'collection' => 'Marcar como retirado', + 'pickup' => 'Marcar como retirado', ], 'notification' => [ 'success' => 'Fulfillment marcado como concluído.', diff --git a/packages/admin/resources/lang/ro/order.php b/packages/admin/resources/lang/ro/order.php index 263fb17bba..c671d29eed 100644 --- a/packages/admin/resources/lang/ro/order.php +++ b/packages/admin/resources/lang/ro/order.php @@ -295,7 +295,7 @@ 'shipped_at' => 'Expediat la', 'handed_over' => [ 'shipping' => 'Expediat la', - 'collection' => 'Ridicat la', + 'pickup' => 'Ridicat la', 'digital' => 'Furnizat la', ], 'handed_over_default' => 'Onorat la', @@ -339,7 +339,7 @@ 'label' => 'Marchează onorat', 'modal_heading' => 'Marchează onorarea ca onorată', 'labels' => [ - 'collection' => 'Marchează ridicat', + 'pickup' => 'Marchează ridicat', ], 'notification' => [ 'success' => 'Onorare marcată ca onorată.', diff --git a/packages/admin/resources/lang/tr/order.php b/packages/admin/resources/lang/tr/order.php index 4b31632ffd..c4747ef3b0 100644 --- a/packages/admin/resources/lang/tr/order.php +++ b/packages/admin/resources/lang/tr/order.php @@ -295,7 +295,7 @@ 'shipped_at' => 'Gönderim tarihi', 'handed_over' => [ 'shipping' => 'Gönderim tarihi', - 'collection' => 'Teslim alma tarihi', + 'pickup' => 'Teslim alma tarihi', 'digital' => 'Sağlanma tarihi', ], 'handed_over_default' => 'Karşılanma tarihi', @@ -339,7 +339,7 @@ 'label' => 'Karşılandı olarak işaretle', 'modal_heading' => 'Karşılamayı karşılandı olarak işaretle', 'labels' => [ - 'collection' => 'Teslim alındı olarak işaretle', + 'pickup' => 'Teslim alındı olarak işaretle', ], 'notification' => [ 'success' => 'Karşılama karşılandı olarak işaretlendi.', diff --git a/packages/admin/resources/lang/vi/order.php b/packages/admin/resources/lang/vi/order.php index 9d5c95c95f..45623a74ed 100644 --- a/packages/admin/resources/lang/vi/order.php +++ b/packages/admin/resources/lang/vi/order.php @@ -295,7 +295,7 @@ 'shipped_at' => 'Thời điểm giao', 'handed_over' => [ 'shipping' => 'Thời điểm giao', - 'collection' => 'Thời điểm nhận', + 'pickup' => 'Thời điểm nhận', 'digital' => 'Thời điểm cung cấp', ], 'handed_over_default' => 'Thời điểm hoàn thành', @@ -339,7 +339,7 @@ 'label' => 'Đánh dấu đã hoàn thành', 'modal_heading' => 'Đánh dấu đơn giao hàng là đã hoàn thành', 'labels' => [ - 'collection' => 'Đánh dấu đã nhận', + 'pickup' => 'Đánh dấu đã nhận', ], 'notification' => [ 'success' => 'Đã đánh dấu đơn giao hàng là đã hoàn thành.', diff --git a/packages/admin/src/Filament/Resources/OrderResource/Pages/Components/OrderFulfilments.php b/packages/admin/src/Filament/Resources/OrderResource/Pages/Components/OrderFulfilments.php index a0c78ae506..74af67b3e9 100644 --- a/packages/admin/src/Filament/Resources/OrderResource/Pages/Components/OrderFulfilments.php +++ b/packages/admin/src/Filament/Resources/OrderResource/Pages/Components/OrderFulfilments.php @@ -175,7 +175,7 @@ public function shipAction(): Action /** * The no-tracking terminal action for methods that don't carry tracking - * (collection → "Mark collected", digital → "Mark fulfilled"). Routes + * (pickup → "Mark picked up", digital → "Mark fulfilled"). Routes * through the `fulfil()` verb, so the agent/API path is identical. */ public function fulfilAction(): Action @@ -201,7 +201,7 @@ public function fulfilAction(): Action /** * The terminal action label for a method — a per-method override (e.g. - * collection → "Mark collected") falling back to the generic label. + * pickup → "Mark picked up") falling back to the generic label. */ protected function fulfilLabel(Fulfilment $fulfilment): string { @@ -214,7 +214,7 @@ protected function fulfilLabel(Fulfilment $fulfilment): string /** * The handed-over timestamp label for a fulfilment — a per-method override - * (shipped at / collected at / provisioned at) falling back to a generic + * (shipped at / picked up at / provisioned at) falling back to a generic * "fulfilled at". Public so the card can render it off `shipped_at`. */ public function handedOverLabel(Fulfilment $fulfilment): string @@ -475,7 +475,7 @@ public function returnAction(): Action /** * Undo a mistaken return — moves the fulfilment back to its method's fulfilled - * state (shipped / collected), keeping the handover (shipped_at + tracking) + * state (shipped / picked up), keeping the handover (shipped_at + tracking) * intact. Only the return is reversed. */ public function undoReturnAction(): Action diff --git a/packages/core/database/factories/FulfilmentFactory.php b/packages/core/database/factories/FulfilmentFactory.php index 7861a83993..13538d30a2 100644 --- a/packages/core/database/factories/FulfilmentFactory.php +++ b/packages/core/database/factories/FulfilmentFactory.php @@ -42,16 +42,16 @@ public function returned(): static ]); } - public function collection(): static + public function pickup(): static { - return $this->state(fn () => ['method' => 'collection']); + return $this->state(fn () => ['method' => 'pickup']); } - public function collected(): static + public function pickedUp(): static { return $this->state(fn () => [ - 'method' => 'collection', - 'state' => 'collected', + 'method' => 'pickup', + 'state' => 'picked-up', 'shipped_at' => now(), ]); } diff --git a/packages/core/resources/lang/ar/fulfilment.php b/packages/core/resources/lang/ar/fulfilment.php index f24bdb7b25..05bf06fbd5 100644 --- a/packages/core/resources/lang/ar/fulfilment.php +++ b/packages/core/resources/lang/ar/fulfilment.php @@ -4,7 +4,7 @@ 'methods' => [ 'shipping' => 'الشحن', - 'collection' => 'الاستلام', + 'pickup' => 'الاستلام', 'digital' => 'رقمي', ], diff --git a/packages/core/resources/lang/ar/states.php b/packages/core/resources/lang/ar/states.php index aaf016ed08..3710665f16 100644 --- a/packages/core/resources/lang/ar/states.php +++ b/packages/core/resources/lang/ar/states.php @@ -55,9 +55,9 @@ 'fulfilment' => [ 'pending' => 'قيد الانتظار', 'in-progress' => 'قيد التنفيذ', - 'ready-for-collection' => 'جاهز للاستلام', + 'ready-for-pickup' => 'جاهز للاستلام', 'shipped' => 'تم الشحن', - 'collected' => 'تم الاستلام', + 'picked-up' => 'تم الاستلام', 'provisioned' => 'تم التوفير', 'cancelled' => 'مُلغى', 'returned' => 'مُرتجَع', diff --git a/packages/core/resources/lang/bg/fulfilment.php b/packages/core/resources/lang/bg/fulfilment.php index d6dd4d0eb6..80e6a13961 100644 --- a/packages/core/resources/lang/bg/fulfilment.php +++ b/packages/core/resources/lang/bg/fulfilment.php @@ -4,7 +4,7 @@ 'methods' => [ 'shipping' => 'Доставка', - 'collection' => 'Получаване на място', + 'pickup' => 'Получаване на място', 'digital' => 'Дигитално', ], diff --git a/packages/core/resources/lang/bg/states.php b/packages/core/resources/lang/bg/states.php index b7c8d72ee1..bb00d391c9 100644 --- a/packages/core/resources/lang/bg/states.php +++ b/packages/core/resources/lang/bg/states.php @@ -55,9 +55,9 @@ 'fulfilment' => [ 'pending' => 'Изчакващо', 'in-progress' => 'В процес', - 'ready-for-collection' => 'Готово за получаване', + 'ready-for-pickup' => 'Готово за получаване', 'shipped' => 'Изпратено', - 'collected' => 'Получено', + 'picked-up' => 'Получено', 'provisioned' => 'Предоставено', 'cancelled' => 'Отменено', 'returned' => 'Върнато', diff --git a/packages/core/resources/lang/de/fulfilment.php b/packages/core/resources/lang/de/fulfilment.php index 7438e19c00..34604052d4 100644 --- a/packages/core/resources/lang/de/fulfilment.php +++ b/packages/core/resources/lang/de/fulfilment.php @@ -4,7 +4,7 @@ 'methods' => [ 'shipping' => 'Versand', - 'collection' => 'Abholung', + 'pickup' => 'Abholung', 'digital' => 'Digital', ], diff --git a/packages/core/resources/lang/de/states.php b/packages/core/resources/lang/de/states.php index bb94024b0b..44e1f243f8 100644 --- a/packages/core/resources/lang/de/states.php +++ b/packages/core/resources/lang/de/states.php @@ -55,9 +55,9 @@ 'fulfilment' => [ 'pending' => 'Ausstehend', 'in-progress' => 'In Bearbeitung', - 'ready-for-collection' => 'Abholbereit', + 'ready-for-pickup' => 'Abholbereit', 'shipped' => 'Versendet', - 'collected' => 'Abgeholt', + 'picked-up' => 'Abgeholt', 'provisioned' => 'Bereitgestellt', 'cancelled' => 'Storniert', 'returned' => 'Retourniert', diff --git a/packages/core/resources/lang/en/fulfilment.php b/packages/core/resources/lang/en/fulfilment.php index a0d3162a3a..ea76a21795 100644 --- a/packages/core/resources/lang/en/fulfilment.php +++ b/packages/core/resources/lang/en/fulfilment.php @@ -4,7 +4,7 @@ 'methods' => [ 'shipping' => 'Shipping', - 'collection' => 'Collection', + 'pickup' => 'Pickup', 'digital' => 'Digital', ], diff --git a/packages/core/resources/lang/en/states.php b/packages/core/resources/lang/en/states.php index c4f44cdf41..a4a8b84107 100644 --- a/packages/core/resources/lang/en/states.php +++ b/packages/core/resources/lang/en/states.php @@ -55,9 +55,9 @@ 'fulfilment' => [ 'pending' => 'Pending', 'in-progress' => 'In Progress', - 'ready-for-collection' => 'Ready for Collection', + 'ready-for-pickup' => 'Ready for Pickup', 'shipped' => 'Shipped', - 'collected' => 'Collected', + 'picked-up' => 'Picked Up', 'provisioned' => 'Provisioned', 'cancelled' => 'Cancelled', 'returned' => 'Returned', diff --git a/packages/core/resources/lang/es/fulfilment.php b/packages/core/resources/lang/es/fulfilment.php index a8e2b89d6f..af45339fb5 100644 --- a/packages/core/resources/lang/es/fulfilment.php +++ b/packages/core/resources/lang/es/fulfilment.php @@ -4,7 +4,7 @@ 'methods' => [ 'shipping' => 'Envío', - 'collection' => 'Recogida', + 'pickup' => 'Recogida', 'digital' => 'Digital', ], diff --git a/packages/core/resources/lang/es/states.php b/packages/core/resources/lang/es/states.php index 644eec461e..55bbfa2d0f 100644 --- a/packages/core/resources/lang/es/states.php +++ b/packages/core/resources/lang/es/states.php @@ -55,9 +55,9 @@ 'fulfilment' => [ 'pending' => 'Pendiente', 'in-progress' => 'En curso', - 'ready-for-collection' => 'Listo para recoger', + 'ready-for-pickup' => 'Listo para recoger', 'shipped' => 'Enviado', - 'collected' => 'Recogido', + 'picked-up' => 'Recogido', 'provisioned' => 'Aprovisionado', 'cancelled' => 'Cancelado', 'returned' => 'Devuelto', diff --git a/packages/core/resources/lang/fa/fulfilment.php b/packages/core/resources/lang/fa/fulfilment.php index 0423151199..7618ce8ae0 100644 --- a/packages/core/resources/lang/fa/fulfilment.php +++ b/packages/core/resources/lang/fa/fulfilment.php @@ -4,7 +4,7 @@ 'methods' => [ 'shipping' => 'ارسال', - 'collection' => 'تحویل حضوری', + 'pickup' => 'تحویل حضوری', 'digital' => 'دیجیتال', ], diff --git a/packages/core/resources/lang/fa/states.php b/packages/core/resources/lang/fa/states.php index 49b2179bc1..23b6d3479f 100644 --- a/packages/core/resources/lang/fa/states.php +++ b/packages/core/resources/lang/fa/states.php @@ -55,9 +55,9 @@ 'fulfilment' => [ 'pending' => 'در انتظار', 'in-progress' => 'در حال انجام', - 'ready-for-collection' => 'آماده تحویل حضوری', + 'ready-for-pickup' => 'آماده تحویل حضوری', 'shipped' => 'ارسال‌شده', - 'collected' => 'تحویل‌گرفته‌شده', + 'picked-up' => 'تحویل‌گرفته‌شده', 'provisioned' => 'تأمین‌شده دیجیتال', 'cancelled' => 'لغوشده', 'returned' => 'بازگشت‌داده‌شده', diff --git a/packages/core/resources/lang/fr/fulfilment.php b/packages/core/resources/lang/fr/fulfilment.php index c9c1319ca1..703748ab00 100644 --- a/packages/core/resources/lang/fr/fulfilment.php +++ b/packages/core/resources/lang/fr/fulfilment.php @@ -4,7 +4,7 @@ 'methods' => [ 'shipping' => 'Livraison', - 'collection' => 'Retrait', + 'pickup' => 'Retrait', 'digital' => 'Numérique', ], diff --git a/packages/core/resources/lang/fr/states.php b/packages/core/resources/lang/fr/states.php index 2c0fa49d15..491d5b494b 100644 --- a/packages/core/resources/lang/fr/states.php +++ b/packages/core/resources/lang/fr/states.php @@ -55,9 +55,9 @@ 'fulfilment' => [ 'pending' => 'En attente', 'in-progress' => 'En cours', - 'ready-for-collection' => 'Prêt pour le retrait', + 'ready-for-pickup' => 'Prêt pour le retrait', 'shipped' => 'Expédié', - 'collected' => 'Retiré', + 'picked-up' => 'Retiré', 'provisioned' => 'Mis à disposition', 'cancelled' => 'Annulé', 'returned' => 'Retourné', diff --git a/packages/core/resources/lang/hr/fulfilment.php b/packages/core/resources/lang/hr/fulfilment.php index ef9d3fbd52..3ce6d62b4a 100644 --- a/packages/core/resources/lang/hr/fulfilment.php +++ b/packages/core/resources/lang/hr/fulfilment.php @@ -4,7 +4,7 @@ 'methods' => [ 'shipping' => 'Dostava', - 'collection' => 'Preuzimanje', + 'pickup' => 'Preuzimanje', 'digital' => 'Digitalno', ], diff --git a/packages/core/resources/lang/hr/states.php b/packages/core/resources/lang/hr/states.php index e746473d69..abf5817da4 100644 --- a/packages/core/resources/lang/hr/states.php +++ b/packages/core/resources/lang/hr/states.php @@ -55,9 +55,9 @@ 'fulfilment' => [ 'pending' => 'Na čekanju', 'in-progress' => 'U tijeku', - 'ready-for-collection' => 'Spremno za preuzimanje', + 'ready-for-pickup' => 'Spremno za preuzimanje', 'shipped' => 'Otpremljeno', - 'collected' => 'Preuzeto', + 'picked-up' => 'Preuzeto', 'provisioned' => 'Stavljeno na raspolaganje', 'cancelled' => 'Otkazano', 'returned' => 'Vraćeno', diff --git a/packages/core/resources/lang/hu/fulfilment.php b/packages/core/resources/lang/hu/fulfilment.php index c6e2a38777..74ec78334a 100644 --- a/packages/core/resources/lang/hu/fulfilment.php +++ b/packages/core/resources/lang/hu/fulfilment.php @@ -4,7 +4,7 @@ 'methods' => [ 'shipping' => 'Kiszállítás', - 'collection' => 'Személyes átvétel', + 'pickup' => 'Személyes átvétel', 'digital' => 'Digitális', ], diff --git a/packages/core/resources/lang/hu/states.php b/packages/core/resources/lang/hu/states.php index 0f6eccec0f..59740b9013 100644 --- a/packages/core/resources/lang/hu/states.php +++ b/packages/core/resources/lang/hu/states.php @@ -55,9 +55,9 @@ 'fulfilment' => [ 'pending' => 'Függőben', 'in-progress' => 'Folyamatban', - 'ready-for-collection' => 'Átvételre kész', + 'ready-for-pickup' => 'Átvételre kész', 'shipped' => 'Kiszállítva', - 'collected' => 'Átvéve', + 'picked-up' => 'Átvéve', 'provisioned' => 'Hozzáférhetővé téve', 'cancelled' => 'Visszavonva', 'returned' => 'Visszaküldve', diff --git a/packages/core/resources/lang/mn/fulfilment.php b/packages/core/resources/lang/mn/fulfilment.php index 4f4573e42a..9070e7a45d 100644 --- a/packages/core/resources/lang/mn/fulfilment.php +++ b/packages/core/resources/lang/mn/fulfilment.php @@ -4,7 +4,7 @@ 'methods' => [ 'shipping' => 'Хүргэлт', - 'collection' => 'Очиж авах', + 'pickup' => 'Очиж авах', 'digital' => 'Цахим', ], diff --git a/packages/core/resources/lang/mn/states.php b/packages/core/resources/lang/mn/states.php index 45f642241e..13fcdc70da 100644 --- a/packages/core/resources/lang/mn/states.php +++ b/packages/core/resources/lang/mn/states.php @@ -55,9 +55,9 @@ 'fulfilment' => [ 'pending' => 'Хүлээгдэж буй', 'in-progress' => 'Хийгдэж байгаа', - 'ready-for-collection' => 'Очиж авахад бэлэн', + 'ready-for-pickup' => 'Очиж авахад бэлэн', 'shipped' => 'Илгээсэн', - 'collected' => 'Хүлээн авсан', + 'picked-up' => 'Хүлээн авсан', 'provisioned' => 'Нийлүүлсэн', 'cancelled' => 'Цуцлагдсан', 'returned' => 'Буцаасан', diff --git a/packages/core/resources/lang/nl/fulfilment.php b/packages/core/resources/lang/nl/fulfilment.php index 6862b52de7..7ba3a3d912 100644 --- a/packages/core/resources/lang/nl/fulfilment.php +++ b/packages/core/resources/lang/nl/fulfilment.php @@ -4,7 +4,7 @@ 'methods' => [ 'shipping' => 'Verzending', - 'collection' => 'Afhalen', + 'pickup' => 'Afhalen', 'digital' => 'Digitaal', ], diff --git a/packages/core/resources/lang/nl/states.php b/packages/core/resources/lang/nl/states.php index 44a86a6b7f..5b4263a1d5 100644 --- a/packages/core/resources/lang/nl/states.php +++ b/packages/core/resources/lang/nl/states.php @@ -55,9 +55,9 @@ 'fulfilment' => [ 'pending' => 'In afwachting', 'in-progress' => 'In behandeling', - 'ready-for-collection' => 'Klaar om af te halen', + 'ready-for-pickup' => 'Klaar om af te halen', 'shipped' => 'Verzonden', - 'collected' => 'Afgehaald', + 'picked-up' => 'Afgehaald', 'provisioned' => 'Beschikbaar gesteld', 'cancelled' => 'Geannuleerd', 'returned' => 'Geretourneerd', diff --git a/packages/core/resources/lang/pl/fulfilment.php b/packages/core/resources/lang/pl/fulfilment.php index 66e02c4940..7a1e1bce0e 100644 --- a/packages/core/resources/lang/pl/fulfilment.php +++ b/packages/core/resources/lang/pl/fulfilment.php @@ -4,7 +4,7 @@ 'methods' => [ 'shipping' => 'Wysyłka', - 'collection' => 'Odbiór osobisty', + 'pickup' => 'Odbiór osobisty', 'digital' => 'Cyfrowa', ], diff --git a/packages/core/resources/lang/pl/states.php b/packages/core/resources/lang/pl/states.php index cc4b3fa47f..47bfda223b 100644 --- a/packages/core/resources/lang/pl/states.php +++ b/packages/core/resources/lang/pl/states.php @@ -55,9 +55,9 @@ 'fulfilment' => [ 'pending' => 'Oczekująca', 'in-progress' => 'W trakcie', - 'ready-for-collection' => 'Gotowa do odbioru', + 'ready-for-pickup' => 'Gotowa do odbioru', 'shipped' => 'Wysłana', - 'collected' => 'Odebrana', + 'picked-up' => 'Odebrana', 'provisioned' => 'Udostępniona', 'cancelled' => 'Anulowana', 'returned' => 'Zwrócona', diff --git a/packages/core/resources/lang/pt_BR/fulfilment.php b/packages/core/resources/lang/pt_BR/fulfilment.php index 7389fc9327..9c7f952e0c 100644 --- a/packages/core/resources/lang/pt_BR/fulfilment.php +++ b/packages/core/resources/lang/pt_BR/fulfilment.php @@ -4,7 +4,7 @@ 'methods' => [ 'shipping' => 'Envio', - 'collection' => 'Retirada', + 'pickup' => 'Retirada', 'digital' => 'Digital', ], diff --git a/packages/core/resources/lang/pt_BR/states.php b/packages/core/resources/lang/pt_BR/states.php index 55ee4ee8e6..e2793ecfbb 100644 --- a/packages/core/resources/lang/pt_BR/states.php +++ b/packages/core/resources/lang/pt_BR/states.php @@ -55,9 +55,9 @@ 'fulfilment' => [ 'pending' => 'Pendente', 'in-progress' => 'Em Andamento', - 'ready-for-collection' => 'Pronto para Retirada', + 'ready-for-pickup' => 'Pronto para Retirada', 'shipped' => 'Enviado', - 'collected' => 'Retirado', + 'picked-up' => 'Retirado', 'provisioned' => 'Disponibilizado', 'cancelled' => 'Cancelado', 'returned' => 'Devolvido', diff --git a/packages/core/resources/lang/ro/fulfilment.php b/packages/core/resources/lang/ro/fulfilment.php index 2082c317aa..5928175202 100644 --- a/packages/core/resources/lang/ro/fulfilment.php +++ b/packages/core/resources/lang/ro/fulfilment.php @@ -4,7 +4,7 @@ 'methods' => [ 'shipping' => 'Livrare', - 'collection' => 'Ridicare', + 'pickup' => 'Ridicare', 'digital' => 'Digital', ], diff --git a/packages/core/resources/lang/ro/states.php b/packages/core/resources/lang/ro/states.php index 9f602b5a11..da0ef7dace 100644 --- a/packages/core/resources/lang/ro/states.php +++ b/packages/core/resources/lang/ro/states.php @@ -55,9 +55,9 @@ 'fulfilment' => [ 'pending' => 'În așteptare', 'in-progress' => 'În curs', - 'ready-for-collection' => 'Gata de ridicare', + 'ready-for-pickup' => 'Gata de ridicare', 'shipped' => 'Expediată', - 'collected' => 'Ridicată', + 'picked-up' => 'Ridicată', 'provisioned' => 'Furnizată', 'cancelled' => 'Anulată', 'returned' => 'Returnată', diff --git a/packages/core/resources/lang/tr/fulfilment.php b/packages/core/resources/lang/tr/fulfilment.php index 7540d8fc16..869650b568 100644 --- a/packages/core/resources/lang/tr/fulfilment.php +++ b/packages/core/resources/lang/tr/fulfilment.php @@ -4,7 +4,7 @@ 'methods' => [ 'shipping' => 'Gönderim', - 'collection' => 'Teslim alma', + 'pickup' => 'Teslim alma', 'digital' => 'Dijital', ], diff --git a/packages/core/resources/lang/tr/states.php b/packages/core/resources/lang/tr/states.php index 600639dc28..def1da58af 100644 --- a/packages/core/resources/lang/tr/states.php +++ b/packages/core/resources/lang/tr/states.php @@ -55,9 +55,9 @@ 'fulfilment' => [ 'pending' => 'Beklemede', 'in-progress' => 'Devam Ediyor', - 'ready-for-collection' => 'Teslim Almaya Hazır', + 'ready-for-pickup' => 'Teslim Almaya Hazır', 'shipped' => 'Gönderildi', - 'collected' => 'Teslim Alındı', + 'picked-up' => 'Teslim Alındı', 'provisioned' => 'Sağlandı', 'cancelled' => 'İptal Edildi', 'returned' => 'İade Edildi', diff --git a/packages/core/resources/lang/vi/fulfilment.php b/packages/core/resources/lang/vi/fulfilment.php index 4fe9492c60..c46dba62ad 100644 --- a/packages/core/resources/lang/vi/fulfilment.php +++ b/packages/core/resources/lang/vi/fulfilment.php @@ -4,7 +4,7 @@ 'methods' => [ 'shipping' => 'Vận chuyển', - 'collection' => 'Nhận tại nơi', + 'pickup' => 'Nhận tại nơi', 'digital' => 'Kỹ thuật số', ], diff --git a/packages/core/resources/lang/vi/states.php b/packages/core/resources/lang/vi/states.php index 6ec9c3567a..4899516d75 100644 --- a/packages/core/resources/lang/vi/states.php +++ b/packages/core/resources/lang/vi/states.php @@ -55,9 +55,9 @@ 'fulfilment' => [ 'pending' => 'Đang chờ xử lý', 'in-progress' => 'Đang xử lý', - 'ready-for-collection' => 'Sẵn sàng để nhận', + 'ready-for-pickup' => 'Sẵn sàng để nhận', 'shipped' => 'Đã giao', - 'collected' => 'Đã nhận', + 'picked-up' => 'Đã nhận', 'provisioned' => 'Đã cung cấp', 'cancelled' => 'Đã hủy', 'returned' => 'Đã trả', diff --git a/packages/core/src/Actions/Fulfilment/EnsureInitialFulfilment.php b/packages/core/src/Actions/Fulfilment/EnsureInitialFulfilment.php index feecceac90..27e6c8d920 100644 --- a/packages/core/src/Actions/Fulfilment/EnsureInitialFulfilment.php +++ b/packages/core/src/Actions/Fulfilment/EnsureInitialFulfilment.php @@ -14,7 +14,7 @@ * claims a subset, and a method that claims >= 1 line gets one fulfilment (in its * `defaultState()`) covering them at full quantity. One method, an all-physical * order → exactly one fulfilment (today's behaviour); a basket of a delivered good - * + a licence key + a collection item → a fulfilment per claiming method. + * + a licence key + a pickup item → a fulfilment per claiming method. * * Idempotent — a no-op if the order already has any fulfilment, or has no * fulfillable lines. Returns the first fulfilment created (or null). The merchant diff --git a/packages/core/src/Actions/Fulfilment/FulfilFulfilment.php b/packages/core/src/Actions/Fulfilment/FulfilFulfilment.php index 0f30b76d54..f1c6830e79 100644 --- a/packages/core/src/Actions/Fulfilment/FulfilFulfilment.php +++ b/packages/core/src/Actions/Fulfilment/FulfilFulfilment.php @@ -9,7 +9,7 @@ /** * Advance a fulfilment to its method's canonical "done" state with no tracking - * — the generic terminal verb (collection → `Collected`, digital → + * — the generic terminal verb (pickup → `PickedUp`, digital → * `Provisioned`, a custom flow → its terminal). `ShipFulfilment` is the * tracking-bearing specialisation. The transition routes through * `TransitionFulfilment`, so the per-method graph is enforced and the diff --git a/packages/core/src/Actions/Fulfilment/MergeFulfilments.php b/packages/core/src/Actions/Fulfilment/MergeFulfilments.php index 724083af1a..c87c0bc070 100644 --- a/packages/core/src/Actions/Fulfilment/MergeFulfilments.php +++ b/packages/core/src/Actions/Fulfilment/MergeFulfilments.php @@ -14,7 +14,7 @@ * fulfilled quantity, so the rollups are untouched. The target's tracking * wins; the action errors rather than silently discarding conflicting * tracking carried by a source. Source and target must share a method — you - * can't fold a shipping fulfilment into a collection one. + * can't fold a shipping fulfilment into a pickup one. */ class MergeFulfilments implements MergesFulfilments { diff --git a/packages/core/src/Actions/Fulfilment/ShipFulfilment.php b/packages/core/src/Actions/Fulfilment/ShipFulfilment.php index 86c4bc251c..2e81b21b44 100644 --- a/packages/core/src/Actions/Fulfilment/ShipFulfilment.php +++ b/packages/core/src/Actions/Fulfilment/ShipFulfilment.php @@ -14,7 +14,7 @@ * stamping the handed-over timestamp and recording any tracking references. * * The tracking-bearing terminal — only valid for methods that carry tracking; - * collection/digital use `fulfil()` instead, and calling `ship()` on a + * pickup/digital use `fulfil()` instead, and calling `ship()` on a * non-tracking method throws. The transition is delegated to * `TransitionFulfilment` (so it routes through the guarded, per-method * `FulfilmentState` graph and the timestamp is stamped by category); an illegal diff --git a/packages/core/src/Actions/Fulfilment/SplitFulfilment.php b/packages/core/src/Actions/Fulfilment/SplitFulfilment.php index 726d8990d9..97f0630b37 100644 --- a/packages/core/src/Actions/Fulfilment/SplitFulfilment.php +++ b/packages/core/src/Actions/Fulfilment/SplitFulfilment.php @@ -49,7 +49,7 @@ public function execute(Fulfilment $fulfilment, array $moves): Fulfilment // The split-off fulfilment inherits the source's method and state — // splitting only reorganises outstanding quantities, so a fulfilment // already being prepared shouldn't drop back to its default state, - // and a collection/digital fulfilment must stay that method. + // and a pickup/digital fulfilment must stay that method. /** @var Fulfilment $new */ $new = $fulfilment->order->fulfilments()->create([ 'location_id' => $fulfilment->location_id, diff --git a/packages/core/src/Actions/Fulfilment/TransitionFulfilment.php b/packages/core/src/Actions/Fulfilment/TransitionFulfilment.php index 305165ee85..50c586fac5 100644 --- a/packages/core/src/Actions/Fulfilment/TransitionFulfilment.php +++ b/packages/core/src/Actions/Fulfilment/TransitionFulfilment.php @@ -15,7 +15,7 @@ * *category* rather than a literal state name: * * - entering a `Fulfilled`-category state stamps `shipped_at` (it reads as - * shipped-at / collected-at / provisioned-at per method), unless it is + * shipped-at / picked-up-at / provisioned-at per method), unless it is * already set — so an undo-return back to a `Fulfilled` state keeps the * original timestamp; * - reverting from a `Fulfilled` state back to an `Outstanding` one un-stamps diff --git a/packages/core/src/Contracts/FulfilmentMethod.php b/packages/core/src/Contracts/FulfilmentMethod.php index fd2ac71df1..33304da3c2 100644 --- a/packages/core/src/Contracts/FulfilmentMethod.php +++ b/packages/core/src/Contracts/FulfilmentMethod.php @@ -12,7 +12,7 @@ * its state graph, which order lines it claims, and whether it carries carrier * tracking. A `Fulfilment` stores its method as a key (like a carrier key) and * resolves it through the {@see FulfilmentMethodManifest}. Core ships three - * built on this seam (`shipping`, `collection`, `digital`); a consumer registers + * built on this seam (`shipping`, `pickup`, `digital`); a consumer registers * their own (`prescription`, a 3PL hand-off, …) exactly as core registers these. */ interface FulfilmentMethod diff --git a/packages/core/src/DataTypes/ShippingOption.php b/packages/core/src/DataTypes/ShippingOption.php index 1942d72d3b..3e20dc2812 100644 --- a/packages/core/src/DataTypes/ShippingOption.php +++ b/packages/core/src/DataTypes/ShippingOption.php @@ -17,7 +17,7 @@ public function __construct( public TaxClass $taxClass, public ?string $taxReference = null, public ?string $option = null, - public bool $collect = false, + public bool $pickup = false, public ?array $meta = null, ) { // .. diff --git a/packages/core/src/Drivers/FulfilmentMethods/Collection.php b/packages/core/src/Drivers/FulfilmentMethods/Pickup.php similarity index 50% rename from packages/core/src/Drivers/FulfilmentMethods/Collection.php rename to packages/core/src/Drivers/FulfilmentMethods/Pickup.php index 8652e9674e..92c0b0125f 100644 --- a/packages/core/src/Drivers/FulfilmentMethods/Collection.php +++ b/packages/core/src/Drivers/FulfilmentMethods/Pickup.php @@ -2,24 +2,24 @@ namespace Lunar\Core\Drivers\FulfilmentMethods; -use Illuminate\Support\Collection as SupportCollection; +use Illuminate\Support\Collection; use Lunar\Core\Contracts\FulfilmentMethod; use Lunar\Core\Models\Order; use Lunar\Core\States\Fulfilment\Cancelled; -use Lunar\Core\States\Fulfilment\Collected; use Lunar\Core\States\Fulfilment\Pending; -use Lunar\Core\States\Fulfilment\ReadyForCollection; +use Lunar\Core\States\Fulfilment\PickedUp; +use Lunar\Core\States\Fulfilment\ReadyForPickup; use Lunar\Core\States\Fulfilment\Returned; /** * Click-and-collect / trade-counter pickup. Claims physical lines when the - * order's chosen shipping option is a collection (`collect === true`, persisted - * onto the shipping line at order creation), so the fulfilment presents "ready for - * collection → collected" instead of ship-and-track. No tracking. + * order's chosen shipping option is a pickup (`pickup === true`, persisted + * onto the shipping line at order creation), so the fulfilment presents "ready + * for pickup → picked up" instead of ship-and-track. No tracking. */ -class Collection implements FulfilmentMethod +class Pickup implements FulfilmentMethod { - public const KEY = 'collection'; + public const KEY = 'pickup'; public function getKey(): string { @@ -28,7 +28,7 @@ public function getKey(): string public function getLabel(): string { - return __('lunar::fulfilment.methods.collection'); + return __('lunar::fulfilment.methods.pickup'); } /** @@ -38,8 +38,8 @@ public function states(): array { return [ Pending::class, - ReadyForCollection::class, - Collected::class, + ReadyForPickup::class, + PickedUp::class, Cancelled::class, Returned::class, ]; @@ -51,13 +51,13 @@ public function states(): array public function transitions(): array { return [ - Pending::class => [ReadyForCollection::class, Collected::class, Cancelled::class], - ReadyForCollection::class => [Pending::class, Collected::class, Cancelled::class], - // A collected fulfilment can be reverted to `Pending` (un-collect) or - // marked `Returned` (the customer brings goods back). - Collected::class => [Pending::class, Returned::class], + Pending::class => [ReadyForPickup::class, PickedUp::class, Cancelled::class], + ReadyForPickup::class => [Pending::class, PickedUp::class, Cancelled::class], + // A picked-up fulfilment can be reverted to `Pending` (undo the pickup) + // or marked `Returned` (the customer brings goods back). + PickedUp::class => [Pending::class, Returned::class], Cancelled::class => [], - Returned::class => [Collected::class], + Returned::class => [PickedUp::class], ]; } @@ -68,15 +68,15 @@ public function defaultState(): string public function fulfilledState(): string { - return Collected::class; + return PickedUp::class; } /** * {@inheritDoc} */ - public function claim(Order $order, SupportCollection $unclaimed): SupportCollection + public function claim(Order $order, Collection $unclaimed): Collection { - if (! $this->orderCollects($order)) { + if (! $this->orderPicksUp($order)) { return $unclaimed->take(0); } @@ -94,13 +94,13 @@ public function usesTracking(): bool } /** - * Whether the order's chosen shipping option is a collection, read from the - * `collect` flag stamped onto the shipping line's meta at order creation. + * Whether the order's chosen shipping option is a pickup, read from the + * `pickup` flag stamped onto the shipping line's meta at order creation. */ - protected function orderCollects(Order $order): bool + protected function orderPicksUp(Order $order): bool { $meta = $order->lines()->where('type', 'shipping')->first()?->meta; - return (bool) ($meta['collect'] ?? false); + return (bool) ($meta['pickup'] ?? false); } } diff --git a/packages/core/src/Enums/FulfilmentStateCategory.php b/packages/core/src/Enums/FulfilmentStateCategory.php index dca45d27e9..610126f25c 100644 --- a/packages/core/src/Enums/FulfilmentStateCategory.php +++ b/packages/core/src/Enums/FulfilmentStateCategory.php @@ -13,10 +13,10 @@ */ enum FulfilmentStateCategory { - /** Not yet handed over: pending, in-progress, ready-for-collection, … */ + /** Not yet handed over: pending, in-progress, ready-for-pickup, … */ case Outstanding; - /** Gone to the customer: shipped, collected, provisioned, … */ + /** Gone to the customer: shipped, picked up, provisioned, … */ case Fulfilled; /** Came back after being handed over. */ diff --git a/packages/core/src/Manifests/FulfilmentMethodManifest.php b/packages/core/src/Manifests/FulfilmentMethodManifest.php index fa3e54708c..4e7a1464f0 100644 --- a/packages/core/src/Manifests/FulfilmentMethodManifest.php +++ b/packages/core/src/Manifests/FulfilmentMethodManifest.php @@ -5,8 +5,8 @@ use Illuminate\Support\Collection; use Lunar\Core\Contracts\FulfilmentMethod; use Lunar\Core\Contracts\FulfilmentMethodManifest as FulfilmentMethodManifestContract; -use Lunar\Core\Drivers\FulfilmentMethods\Collection as CollectionMethod; use Lunar\Core\Drivers\FulfilmentMethods\Digital; +use Lunar\Core\Drivers\FulfilmentMethods\Pickup; use Lunar\Core\Drivers\FulfilmentMethods\Shipping; use Lunar\Core\Enums\FulfilmentStateCategory; use Lunar\Core\States\Fulfilment\FulfilmentState; @@ -190,7 +190,7 @@ protected function flush(): void protected function registerCoreMethods(): void { $this->register(app(Digital::class)); - $this->register(app(CollectionMethod::class)); + $this->register(app(Pickup::class)); $this->register(app(Shipping::class)); } diff --git a/packages/core/src/Models/Cart.php b/packages/core/src/Models/Cart.php index c2fe81828a..262aa2edec 100644 --- a/packages/core/src/Models/Cart.php +++ b/packages/core/src/Models/Cart.php @@ -695,7 +695,7 @@ public function getEstimatedShipping(array $params, bool $setOverride = false): $this->shippingEstimateMeta = $params; $option = ShippingManifest::getOptions($this) ->filter( - fn ($option) => ! $option->collect + fn ($option) => ! $option->pickup )->sortBy('price.value')->first(); if ($setOverride && $option) { diff --git a/packages/core/src/Models/Fulfilment.php b/packages/core/src/Models/Fulfilment.php index 48750ae98c..904fe0497f 100644 --- a/packages/core/src/Models/Fulfilment.php +++ b/packages/core/src/Models/Fulfilment.php @@ -171,7 +171,7 @@ public function ship(array $tracking = [], bool $notify = true): Fulfilment /** * Advance the fulfilment to its method's canonical "done" state with no - * tracking — collection → `Collected`, digital → `Provisioned`, a custom + * tracking — pickup → `PickedUp`, digital → `Provisioned`, a custom * method → its terminal. The generic terminal verb; `ship()` is the * tracking-bearing specialisation for methods that carry tracking. */ diff --git a/packages/core/src/Pipelines/Order/Creation/CreateShippingLine.php b/packages/core/src/Pipelines/Order/Creation/CreateShippingLine.php index 749135fb1a..47d66a5fd4 100644 --- a/packages/core/src/Pipelines/Order/Creation/CreateShippingLine.php +++ b/packages/core/src/Pipelines/Order/Creation/CreateShippingLine.php @@ -46,11 +46,11 @@ public function handle(Order $order, Closure $next): mixed 'tax_total' => $shippingAddress->shippingTaxTotal->value, 'total' => $shippingAddress->shippingTotal->value, 'notes' => null, - // Persist the chosen option's `collect` flag onto the line - // snapshot so the `collection` fulfilment method can claim its + // Persist the chosen option's `pickup` flag onto the line + // snapshot so the `pickup` fulfilment method can claim its // lines without re-resolving the option at order time. 'meta' => array_merge($shippingOption->meta ?? [], [ - 'collect' => $shippingOption->collect, + 'pickup' => $shippingOption->pickup, ]), ])->save(); } diff --git a/packages/core/src/States/Fulfilment/Collected.php b/packages/core/src/States/Fulfilment/Collected.php deleted file mode 100644 index c860352fc2..0000000000 --- a/packages/core/src/States/Fulfilment/Collected.php +++ /dev/null @@ -1,24 +0,0 @@ -collect) { + if (! $shippingOption->pickup) { if (! $cart->shippingAddress) { return $this->fail('cart', __('lunar::exceptions.carts.shipping_missing')); } diff --git a/packages/demo-data/src/Generators/OrdersGenerator.php b/packages/demo-data/src/Generators/OrdersGenerator.php index 3adf389dc2..c0b54d518c 100644 --- a/packages/demo-data/src/Generators/OrdersGenerator.php +++ b/packages/demo-data/src/Generators/OrdersGenerator.php @@ -8,7 +8,7 @@ use Lunar\Core\Models\Order; use Lunar\Core\Models\Product; use Lunar\Core\Models\ProductVariant; -use Lunar\Core\States\Fulfilment\ReadyForCollection; +use Lunar\Core\States\Fulfilment\ReadyForPickup; use Lunar\Core\ValueObjects\Cart\TaxBreakdown; use Lunar\DemoData\Support\DemoContext; @@ -95,11 +95,11 @@ protected function coverage(): void $order->createFulfilment($this->coverAll($order), ['method' => 'shipping'])->ship($this->tracking()); }); - // Paid + fulfilled by collection (Pending -> ReadyForCollection -> Collected). - $this->scenario('DEMO-PAID-COLLECTION', [['variant' => $physical(5), 'quantity' => 1]], function (Order $order) { + // Paid + fulfilled by pickup (Pending -> ReadyForPickup -> PickedUp). + $this->scenario('DEMO-PAID-PICKUP', [['variant' => $physical(5), 'quantity' => 1]], function (Order $order) { $this->capture($order, $order->total); - $fulfilment = $order->createFulfilment($this->coverAll($order), ['method' => 'collection']); - $fulfilment->transition(ReadyForCollection::class); + $fulfilment = $order->createFulfilment($this->coverAll($order), ['method' => 'pickup']); + $fulfilment->transition(ReadyForPickup::class); $fulfilment->fulfil(); }); diff --git a/packages/panel/resources/js/components/orders/FulfilmentCard.test.ts b/packages/panel/resources/js/components/orders/FulfilmentCard.test.ts index 5f0d0e5083..5d58759be4 100644 --- a/packages/panel/resources/js/components/orders/FulfilmentCard.test.ts +++ b/packages/panel/resources/js/components/orders/FulfilmentCard.test.ts @@ -45,17 +45,17 @@ describe('FulfilmentCard', () => { it('offers the per-method fulfil label on a non-tracking method', async () => { mountCard( makeFulfilment({ - method: 'collection', - method_label: 'Collection', - fulfil_label: 'Mark collected', + method: 'pickup', + method_label: 'Pickup', + fulfil_label: 'Mark picked up', transitions: [ - { state: 'ready-for-collection', label: 'Ready for collection', via: 'transition', notify: true }, - { state: 'collected', label: 'Collected', via: 'fulfil', notify: false }, + { state: 'ready-for-pickup', label: 'Ready for pickup', via: 'transition', notify: true }, + { state: 'picked-up', label: 'Picked up', via: 'fulfil', notify: false }, ], }), ); - const primary = buttonByText('Mark collected'); + const primary = buttonByText('Mark picked up'); expect(primary).toBeDefined(); await primary!.trigger('click'); diff --git a/packages/panel/resources/js/components/orders/FulfilmentCard.vue b/packages/panel/resources/js/components/orders/FulfilmentCard.vue index b39fccd83c..2bdac01b0a 100644 --- a/packages/panel/resources/js/components/orders/FulfilmentCard.vue +++ b/packages/panel/resources/js/components/orders/FulfilmentCard.vue @@ -44,7 +44,7 @@ const tone = computed(() => CATEGORY_TONES[props.fulfilment.state_category const iconClasses = computed(() => CATEGORY_ICON_CLASSES[props.fulfilment.state_category] ?? 'bg-surface-2 border-line text-ink-500'); // The method's terminal verb, when currently reachable: "Mark shipped" opens -// the tracking dialog; "Mark collected" / "Mark fulfilled" confirm directly. +// the tracking dialog; "Mark picked up" / "Mark fulfilled" confirm directly. const primary = computed(() => props.fulfilment.transitions.find((tr) => tr.via === 'ship' || tr.via === 'fulfil') ?? null); const primaryLabel = computed(() => primary.value?.via === 'ship' ? t('orders.mark_shipped') : props.fulfilment.fulfil_label, diff --git a/packages/panel/resources/lang/ar/orders.php b/packages/panel/resources/lang/ar/orders.php index 0fb23677ed..957fb9974e 100644 --- a/packages/panel/resources/lang/ar/orders.php +++ b/packages/panel/resources/lang/ar/orders.php @@ -175,13 +175,13 @@ 'update_status' => 'Update status', 'handed_over_shipping' => 'Shipped', - 'handed_over_collection' => 'Collected', + 'handed_over_pickup' => 'Picked up', 'handed_over_digital' => 'Provisioned', 'handed_over_default' => 'Fulfilled', 'mark_shipped' => 'Mark shipped', 'fulfil_label' => 'Mark fulfilled', - 'fulfil_label_collection' => 'Mark collected', + 'fulfil_label_pickup' => 'Mark picked up', 'action_split' => 'Split…', 'action_merge' => 'Merge into…', diff --git a/packages/panel/resources/lang/bg/orders.php b/packages/panel/resources/lang/bg/orders.php index 0fb23677ed..957fb9974e 100644 --- a/packages/panel/resources/lang/bg/orders.php +++ b/packages/panel/resources/lang/bg/orders.php @@ -175,13 +175,13 @@ 'update_status' => 'Update status', 'handed_over_shipping' => 'Shipped', - 'handed_over_collection' => 'Collected', + 'handed_over_pickup' => 'Picked up', 'handed_over_digital' => 'Provisioned', 'handed_over_default' => 'Fulfilled', 'mark_shipped' => 'Mark shipped', 'fulfil_label' => 'Mark fulfilled', - 'fulfil_label_collection' => 'Mark collected', + 'fulfil_label_pickup' => 'Mark picked up', 'action_split' => 'Split…', 'action_merge' => 'Merge into…', diff --git a/packages/panel/resources/lang/de/orders.php b/packages/panel/resources/lang/de/orders.php index 0fb23677ed..957fb9974e 100644 --- a/packages/panel/resources/lang/de/orders.php +++ b/packages/panel/resources/lang/de/orders.php @@ -175,13 +175,13 @@ 'update_status' => 'Update status', 'handed_over_shipping' => 'Shipped', - 'handed_over_collection' => 'Collected', + 'handed_over_pickup' => 'Picked up', 'handed_over_digital' => 'Provisioned', 'handed_over_default' => 'Fulfilled', 'mark_shipped' => 'Mark shipped', 'fulfil_label' => 'Mark fulfilled', - 'fulfil_label_collection' => 'Mark collected', + 'fulfil_label_pickup' => 'Mark picked up', 'action_split' => 'Split…', 'action_merge' => 'Merge into…', diff --git a/packages/panel/resources/lang/en/orders.php b/packages/panel/resources/lang/en/orders.php index 0fb23677ed..957fb9974e 100644 --- a/packages/panel/resources/lang/en/orders.php +++ b/packages/panel/resources/lang/en/orders.php @@ -175,13 +175,13 @@ 'update_status' => 'Update status', 'handed_over_shipping' => 'Shipped', - 'handed_over_collection' => 'Collected', + 'handed_over_pickup' => 'Picked up', 'handed_over_digital' => 'Provisioned', 'handed_over_default' => 'Fulfilled', 'mark_shipped' => 'Mark shipped', 'fulfil_label' => 'Mark fulfilled', - 'fulfil_label_collection' => 'Mark collected', + 'fulfil_label_pickup' => 'Mark picked up', 'action_split' => 'Split…', 'action_merge' => 'Merge into…', diff --git a/packages/panel/resources/lang/es/orders.php b/packages/panel/resources/lang/es/orders.php index 0fb23677ed..957fb9974e 100644 --- a/packages/panel/resources/lang/es/orders.php +++ b/packages/panel/resources/lang/es/orders.php @@ -175,13 +175,13 @@ 'update_status' => 'Update status', 'handed_over_shipping' => 'Shipped', - 'handed_over_collection' => 'Collected', + 'handed_over_pickup' => 'Picked up', 'handed_over_digital' => 'Provisioned', 'handed_over_default' => 'Fulfilled', 'mark_shipped' => 'Mark shipped', 'fulfil_label' => 'Mark fulfilled', - 'fulfil_label_collection' => 'Mark collected', + 'fulfil_label_pickup' => 'Mark picked up', 'action_split' => 'Split…', 'action_merge' => 'Merge into…', diff --git a/packages/panel/resources/lang/fa/orders.php b/packages/panel/resources/lang/fa/orders.php index 0fb23677ed..957fb9974e 100644 --- a/packages/panel/resources/lang/fa/orders.php +++ b/packages/panel/resources/lang/fa/orders.php @@ -175,13 +175,13 @@ 'update_status' => 'Update status', 'handed_over_shipping' => 'Shipped', - 'handed_over_collection' => 'Collected', + 'handed_over_pickup' => 'Picked up', 'handed_over_digital' => 'Provisioned', 'handed_over_default' => 'Fulfilled', 'mark_shipped' => 'Mark shipped', 'fulfil_label' => 'Mark fulfilled', - 'fulfil_label_collection' => 'Mark collected', + 'fulfil_label_pickup' => 'Mark picked up', 'action_split' => 'Split…', 'action_merge' => 'Merge into…', diff --git a/packages/panel/resources/lang/fr/orders.php b/packages/panel/resources/lang/fr/orders.php index 0fb23677ed..957fb9974e 100644 --- a/packages/panel/resources/lang/fr/orders.php +++ b/packages/panel/resources/lang/fr/orders.php @@ -175,13 +175,13 @@ 'update_status' => 'Update status', 'handed_over_shipping' => 'Shipped', - 'handed_over_collection' => 'Collected', + 'handed_over_pickup' => 'Picked up', 'handed_over_digital' => 'Provisioned', 'handed_over_default' => 'Fulfilled', 'mark_shipped' => 'Mark shipped', 'fulfil_label' => 'Mark fulfilled', - 'fulfil_label_collection' => 'Mark collected', + 'fulfil_label_pickup' => 'Mark picked up', 'action_split' => 'Split…', 'action_merge' => 'Merge into…', diff --git a/packages/panel/resources/lang/hr/orders.php b/packages/panel/resources/lang/hr/orders.php index 0fb23677ed..957fb9974e 100644 --- a/packages/panel/resources/lang/hr/orders.php +++ b/packages/panel/resources/lang/hr/orders.php @@ -175,13 +175,13 @@ 'update_status' => 'Update status', 'handed_over_shipping' => 'Shipped', - 'handed_over_collection' => 'Collected', + 'handed_over_pickup' => 'Picked up', 'handed_over_digital' => 'Provisioned', 'handed_over_default' => 'Fulfilled', 'mark_shipped' => 'Mark shipped', 'fulfil_label' => 'Mark fulfilled', - 'fulfil_label_collection' => 'Mark collected', + 'fulfil_label_pickup' => 'Mark picked up', 'action_split' => 'Split…', 'action_merge' => 'Merge into…', diff --git a/packages/panel/resources/lang/hu/orders.php b/packages/panel/resources/lang/hu/orders.php index 0fb23677ed..957fb9974e 100644 --- a/packages/panel/resources/lang/hu/orders.php +++ b/packages/panel/resources/lang/hu/orders.php @@ -175,13 +175,13 @@ 'update_status' => 'Update status', 'handed_over_shipping' => 'Shipped', - 'handed_over_collection' => 'Collected', + 'handed_over_pickup' => 'Picked up', 'handed_over_digital' => 'Provisioned', 'handed_over_default' => 'Fulfilled', 'mark_shipped' => 'Mark shipped', 'fulfil_label' => 'Mark fulfilled', - 'fulfil_label_collection' => 'Mark collected', + 'fulfil_label_pickup' => 'Mark picked up', 'action_split' => 'Split…', 'action_merge' => 'Merge into…', diff --git a/packages/panel/resources/lang/mn/orders.php b/packages/panel/resources/lang/mn/orders.php index 0fb23677ed..957fb9974e 100644 --- a/packages/panel/resources/lang/mn/orders.php +++ b/packages/panel/resources/lang/mn/orders.php @@ -175,13 +175,13 @@ 'update_status' => 'Update status', 'handed_over_shipping' => 'Shipped', - 'handed_over_collection' => 'Collected', + 'handed_over_pickup' => 'Picked up', 'handed_over_digital' => 'Provisioned', 'handed_over_default' => 'Fulfilled', 'mark_shipped' => 'Mark shipped', 'fulfil_label' => 'Mark fulfilled', - 'fulfil_label_collection' => 'Mark collected', + 'fulfil_label_pickup' => 'Mark picked up', 'action_split' => 'Split…', 'action_merge' => 'Merge into…', diff --git a/packages/panel/resources/lang/nl/orders.php b/packages/panel/resources/lang/nl/orders.php index 0fb23677ed..957fb9974e 100644 --- a/packages/panel/resources/lang/nl/orders.php +++ b/packages/panel/resources/lang/nl/orders.php @@ -175,13 +175,13 @@ 'update_status' => 'Update status', 'handed_over_shipping' => 'Shipped', - 'handed_over_collection' => 'Collected', + 'handed_over_pickup' => 'Picked up', 'handed_over_digital' => 'Provisioned', 'handed_over_default' => 'Fulfilled', 'mark_shipped' => 'Mark shipped', 'fulfil_label' => 'Mark fulfilled', - 'fulfil_label_collection' => 'Mark collected', + 'fulfil_label_pickup' => 'Mark picked up', 'action_split' => 'Split…', 'action_merge' => 'Merge into…', diff --git a/packages/panel/resources/lang/pl/orders.php b/packages/panel/resources/lang/pl/orders.php index 0fb23677ed..957fb9974e 100644 --- a/packages/panel/resources/lang/pl/orders.php +++ b/packages/panel/resources/lang/pl/orders.php @@ -175,13 +175,13 @@ 'update_status' => 'Update status', 'handed_over_shipping' => 'Shipped', - 'handed_over_collection' => 'Collected', + 'handed_over_pickup' => 'Picked up', 'handed_over_digital' => 'Provisioned', 'handed_over_default' => 'Fulfilled', 'mark_shipped' => 'Mark shipped', 'fulfil_label' => 'Mark fulfilled', - 'fulfil_label_collection' => 'Mark collected', + 'fulfil_label_pickup' => 'Mark picked up', 'action_split' => 'Split…', 'action_merge' => 'Merge into…', diff --git a/packages/panel/resources/lang/pt_BR/orders.php b/packages/panel/resources/lang/pt_BR/orders.php index 0fb23677ed..957fb9974e 100644 --- a/packages/panel/resources/lang/pt_BR/orders.php +++ b/packages/panel/resources/lang/pt_BR/orders.php @@ -175,13 +175,13 @@ 'update_status' => 'Update status', 'handed_over_shipping' => 'Shipped', - 'handed_over_collection' => 'Collected', + 'handed_over_pickup' => 'Picked up', 'handed_over_digital' => 'Provisioned', 'handed_over_default' => 'Fulfilled', 'mark_shipped' => 'Mark shipped', 'fulfil_label' => 'Mark fulfilled', - 'fulfil_label_collection' => 'Mark collected', + 'fulfil_label_pickup' => 'Mark picked up', 'action_split' => 'Split…', 'action_merge' => 'Merge into…', diff --git a/packages/panel/resources/lang/ro/orders.php b/packages/panel/resources/lang/ro/orders.php index 0fb23677ed..957fb9974e 100644 --- a/packages/panel/resources/lang/ro/orders.php +++ b/packages/panel/resources/lang/ro/orders.php @@ -175,13 +175,13 @@ 'update_status' => 'Update status', 'handed_over_shipping' => 'Shipped', - 'handed_over_collection' => 'Collected', + 'handed_over_pickup' => 'Picked up', 'handed_over_digital' => 'Provisioned', 'handed_over_default' => 'Fulfilled', 'mark_shipped' => 'Mark shipped', 'fulfil_label' => 'Mark fulfilled', - 'fulfil_label_collection' => 'Mark collected', + 'fulfil_label_pickup' => 'Mark picked up', 'action_split' => 'Split…', 'action_merge' => 'Merge into…', diff --git a/packages/panel/resources/lang/tr/orders.php b/packages/panel/resources/lang/tr/orders.php index 0fb23677ed..957fb9974e 100644 --- a/packages/panel/resources/lang/tr/orders.php +++ b/packages/panel/resources/lang/tr/orders.php @@ -175,13 +175,13 @@ 'update_status' => 'Update status', 'handed_over_shipping' => 'Shipped', - 'handed_over_collection' => 'Collected', + 'handed_over_pickup' => 'Picked up', 'handed_over_digital' => 'Provisioned', 'handed_over_default' => 'Fulfilled', 'mark_shipped' => 'Mark shipped', 'fulfil_label' => 'Mark fulfilled', - 'fulfil_label_collection' => 'Mark collected', + 'fulfil_label_pickup' => 'Mark picked up', 'action_split' => 'Split…', 'action_merge' => 'Merge into…', diff --git a/packages/panel/resources/lang/vi/orders.php b/packages/panel/resources/lang/vi/orders.php index 0fb23677ed..957fb9974e 100644 --- a/packages/panel/resources/lang/vi/orders.php +++ b/packages/panel/resources/lang/vi/orders.php @@ -175,13 +175,13 @@ 'update_status' => 'Update status', 'handed_over_shipping' => 'Shipped', - 'handed_over_collection' => 'Collected', + 'handed_over_pickup' => 'Picked up', 'handed_over_digital' => 'Provisioned', 'handed_over_default' => 'Fulfilled', 'mark_shipped' => 'Mark shipped', 'fulfil_label' => 'Mark fulfilled', - 'fulfil_label_collection' => 'Mark collected', + 'fulfil_label_pickup' => 'Mark picked up', 'action_split' => 'Split…', 'action_merge' => 'Merge into…', diff --git a/packages/panel/src/Http/Controllers/Orders/OrderFulfilmentController.php b/packages/panel/src/Http/Controllers/Orders/OrderFulfilmentController.php index 750f2b61bb..ec8f584bcb 100644 --- a/packages/panel/src/Http/Controllers/Orders/OrderFulfilmentController.php +++ b/packages/panel/src/Http/Controllers/Orders/OrderFulfilmentController.php @@ -47,7 +47,7 @@ public function ship(ShipFulfilmentRequest $request, Order $order, Fulfilment $f } /** - * The no-tracking terminal verb — mark collected / mark fulfilled for + * The no-tracking terminal verb — mark picked up / mark fulfilled for * methods that don't carry tracking. Tracking methods ship instead. */ public function fulfil(Request $request, Order $order, Fulfilment $fulfilment): RedirectResponse @@ -61,7 +61,7 @@ public function fulfil(Request $request, Order $order, Fulfilment $fulfilment): } /** - * A plain intermediate transition (in progress, ready for collection, …). + * A plain intermediate transition (in progress, ready for pickup, …). * The target must be one the panel offers for this fulfilment — terminal * moves route through their dedicated endpoints. */ diff --git a/packages/table-rate-shipping/resources/lang/ar/shippingmethod.php b/packages/table-rate-shipping/resources/lang/ar/shippingmethod.php index f4c4df88ac..a76bc8e157 100644 --- a/packages/table-rate-shipping/resources/lang/ar/shippingmethod.php +++ b/packages/table-rate-shipping/resources/lang/ar/shippingmethod.php @@ -45,7 +45,7 @@ 'label' => 'النوع', 'options' => [ 'ship-by' => 'قياسي', - 'collection' => 'استلام من المتجر', + 'pickup' => 'استلام من المتجر', ], ], 'stock_available' => [ @@ -73,7 +73,7 @@ 'label' => 'النوع', 'options' => [ 'ship-by' => 'قياسي', - 'collection' => 'استلام من المتجر', + 'pickup' => 'استلام من المتجر', ], ], ], diff --git a/packages/table-rate-shipping/resources/lang/bg/shippingmethod.php b/packages/table-rate-shipping/resources/lang/bg/shippingmethod.php index 3d052b90fa..7d4edbaf96 100644 --- a/packages/table-rate-shipping/resources/lang/bg/shippingmethod.php +++ b/packages/table-rate-shipping/resources/lang/bg/shippingmethod.php @@ -45,7 +45,7 @@ 'label' => 'Тип', 'options' => [ 'ship-by' => 'Стандартен', - 'collection' => 'Колекция', + 'pickup' => 'Получаване на място', ], ], 'stock_available' => [ @@ -73,7 +73,7 @@ 'label' => 'Тип', 'options' => [ 'ship-by' => 'Стандартен', - 'collection' => 'Колекция', + 'pickup' => 'Получаване на място', ], ], ], diff --git a/packages/table-rate-shipping/resources/lang/en/shippingmethod.php b/packages/table-rate-shipping/resources/lang/en/shippingmethod.php index c5abd9c5d8..1dea9e45c3 100644 --- a/packages/table-rate-shipping/resources/lang/en/shippingmethod.php +++ b/packages/table-rate-shipping/resources/lang/en/shippingmethod.php @@ -45,7 +45,7 @@ 'label' => 'Type', 'options' => [ 'ship-by' => 'Standard', - 'collection' => 'Collection', + 'pickup' => 'Pickup', ], ], 'stock_available' => [ @@ -73,7 +73,7 @@ 'label' => 'Type', 'options' => [ 'ship-by' => 'Standard', - 'collection' => 'Collection', + 'pickup' => 'Pickup', ], ], ], diff --git a/packages/table-rate-shipping/resources/lang/es/shippingmethod.php b/packages/table-rate-shipping/resources/lang/es/shippingmethod.php index ac3e72fb69..2a56c9ddff 100644 --- a/packages/table-rate-shipping/resources/lang/es/shippingmethod.php +++ b/packages/table-rate-shipping/resources/lang/es/shippingmethod.php @@ -45,7 +45,7 @@ 'label' => 'Tipo', 'options' => [ 'ship-by' => 'Estándar', - 'collection' => 'Recogida', + 'pickup' => 'Recogida', ], ], 'stock_available' => [ @@ -73,7 +73,7 @@ 'label' => 'Tipo', 'options' => [ 'ship-by' => 'Estándar', - 'collection' => 'Recogida', + 'pickup' => 'Recogida', ], ], ], diff --git a/packages/table-rate-shipping/resources/lang/fa/shippingmethod.php b/packages/table-rate-shipping/resources/lang/fa/shippingmethod.php index bdbb3cf7f6..57d78c7431 100644 --- a/packages/table-rate-shipping/resources/lang/fa/shippingmethod.php +++ b/packages/table-rate-shipping/resources/lang/fa/shippingmethod.php @@ -45,7 +45,7 @@ 'label' => 'نوع', 'options' => [ 'ship-by' => 'استاندارد', - 'collection' => 'تحویل حضوری', + 'pickup' => 'تحویل حضوری', ], ], 'stock_available' => [ @@ -73,7 +73,7 @@ 'label' => 'نوع', 'options' => [ 'ship-by' => 'استاندارد', - 'collection' => 'تحویل حضوری', + 'pickup' => 'تحویل حضوری', ], ], ], diff --git a/packages/table-rate-shipping/resources/lang/fr/shippingmethod.php b/packages/table-rate-shipping/resources/lang/fr/shippingmethod.php index b48ae4b89d..dec6b93e48 100644 --- a/packages/table-rate-shipping/resources/lang/fr/shippingmethod.php +++ b/packages/table-rate-shipping/resources/lang/fr/shippingmethod.php @@ -45,7 +45,7 @@ 'label' => 'Type', 'options' => [ 'ship-by' => 'Standard', - 'collection' => 'Collecte', + 'pickup' => 'Retrait', ], ], 'stock_available' => [ @@ -73,7 +73,7 @@ 'label' => 'Type', 'options' => [ 'ship-by' => 'Standard', - 'collection' => 'Collecte', + 'pickup' => 'Retrait', ], ], ], diff --git a/packages/table-rate-shipping/resources/lang/hr/shippingmethod.php b/packages/table-rate-shipping/resources/lang/hr/shippingmethod.php index 9a66501e01..3f1a16d38f 100644 --- a/packages/table-rate-shipping/resources/lang/hr/shippingmethod.php +++ b/packages/table-rate-shipping/resources/lang/hr/shippingmethod.php @@ -45,7 +45,7 @@ 'label' => 'Tip', 'options' => [ 'ship-by' => 'Standardno', - 'collection' => 'Preuzimanje', + 'pickup' => 'Preuzimanje', ], ], 'stock_available' => [ @@ -73,7 +73,7 @@ 'label' => 'Tip', 'options' => [ 'ship-by' => 'Standardno', - 'collection' => 'Preuzimanje', + 'pickup' => 'Preuzimanje', ], ], ], diff --git a/packages/table-rate-shipping/resources/lang/hu/shippingmethod.php b/packages/table-rate-shipping/resources/lang/hu/shippingmethod.php index 1212d59a56..b607ea7f16 100644 --- a/packages/table-rate-shipping/resources/lang/hu/shippingmethod.php +++ b/packages/table-rate-shipping/resources/lang/hu/shippingmethod.php @@ -45,7 +45,7 @@ 'label' => 'Típus', 'options' => [ 'ship-by' => 'Házhozszállítás', - 'collection' => 'Személyes átvétel', + 'pickup' => 'Személyes átvétel', ], ], 'stock_available' => [ @@ -73,7 +73,7 @@ 'label' => 'Típus', 'options' => [ 'ship-by' => 'Házhozszállítás', - 'collection' => 'Személyes átvétel', + 'pickup' => 'Személyes átvétel', ], ], ], diff --git a/packages/table-rate-shipping/resources/lang/mn/shippingmethod.php b/packages/table-rate-shipping/resources/lang/mn/shippingmethod.php index 6e70c3a353..23e0f7cde6 100644 --- a/packages/table-rate-shipping/resources/lang/mn/shippingmethod.php +++ b/packages/table-rate-shipping/resources/lang/mn/shippingmethod.php @@ -45,7 +45,7 @@ 'label' => 'Төрөл', 'options' => [ 'ship-by' => 'Стандарт', - 'collection' => 'Цуглуулга', + 'pickup' => 'Очиж авах', ], ], 'stock_available' => [ @@ -73,7 +73,7 @@ 'label' => 'Төрөл', 'options' => [ 'ship-by' => 'Стандарт', - 'collection' => 'Цуглуулга', + 'pickup' => 'Очиж авах', ], ], ], diff --git a/packages/table-rate-shipping/resources/lang/pl/shippingmethod.php b/packages/table-rate-shipping/resources/lang/pl/shippingmethod.php index 195f79f415..44ed456c3d 100644 --- a/packages/table-rate-shipping/resources/lang/pl/shippingmethod.php +++ b/packages/table-rate-shipping/resources/lang/pl/shippingmethod.php @@ -45,7 +45,7 @@ 'label' => 'Typ', 'options' => [ 'ship-by' => 'Standard', - 'collection' => 'Odbiór osobisty', + 'pickup' => 'Odbiór osobisty', ], ], 'stock_available' => [ @@ -73,7 +73,7 @@ 'label' => 'Typ', 'options' => [ 'ship-by' => 'Standard', - 'collection' => 'Odbiór osobisty', + 'pickup' => 'Odbiór osobisty', ], ], ], diff --git a/packages/table-rate-shipping/resources/lang/pt_BR/shippingmethod.php b/packages/table-rate-shipping/resources/lang/pt_BR/shippingmethod.php index 34d6d92d4b..d020ae7a78 100644 --- a/packages/table-rate-shipping/resources/lang/pt_BR/shippingmethod.php +++ b/packages/table-rate-shipping/resources/lang/pt_BR/shippingmethod.php @@ -45,7 +45,7 @@ 'label' => 'Tipo', 'options' => [ 'ship-by' => 'Padrão', - 'collection' => 'Coleta', + 'pickup' => 'Retirada', ], ], 'stock_available' => [ @@ -73,7 +73,7 @@ 'label' => 'Tipo', 'options' => [ 'ship-by' => 'Padrão', - 'collection' => 'Coleta', + 'pickup' => 'Retirada', ], ], ], diff --git a/packages/table-rate-shipping/resources/lang/ro/shippingmethod.php b/packages/table-rate-shipping/resources/lang/ro/shippingmethod.php index a036a5321b..5e4930426b 100644 --- a/packages/table-rate-shipping/resources/lang/ro/shippingmethod.php +++ b/packages/table-rate-shipping/resources/lang/ro/shippingmethod.php @@ -45,7 +45,7 @@ 'label' => 'Tip', 'options' => [ 'ship-by' => 'Standard', - 'collection' => 'Ridicare', + 'pickup' => 'Ridicare', ], ], 'stock_available' => [ @@ -73,7 +73,7 @@ 'label' => 'Tip', 'options' => [ 'ship-by' => 'Standard', - 'collection' => 'Ridicare', + 'pickup' => 'Ridicare', ], ], ], diff --git a/packages/table-rate-shipping/resources/lang/tr/shippingmethod.php b/packages/table-rate-shipping/resources/lang/tr/shippingmethod.php index 5e8d867bdb..e69ca51d7a 100644 --- a/packages/table-rate-shipping/resources/lang/tr/shippingmethod.php +++ b/packages/table-rate-shipping/resources/lang/tr/shippingmethod.php @@ -45,7 +45,7 @@ 'label' => 'Tür', 'options' => [ 'ship-by' => 'Standart', - 'collection' => 'Mağazadan Teslim Alma', + 'pickup' => 'Mağazadan Teslim Alma', ], ], 'stock_available' => [ @@ -73,7 +73,7 @@ 'label' => 'Tür', 'options' => [ 'ship-by' => 'Standart', - 'collection' => 'Mağazadan Teslim Alma', + 'pickup' => 'Mağazadan Teslim Alma', ], ], ], diff --git a/packages/table-rate-shipping/resources/lang/vi/shippingmethod.php b/packages/table-rate-shipping/resources/lang/vi/shippingmethod.php index f3be228893..d05deeb0de 100644 --- a/packages/table-rate-shipping/resources/lang/vi/shippingmethod.php +++ b/packages/table-rate-shipping/resources/lang/vi/shippingmethod.php @@ -45,7 +45,7 @@ 'label' => 'Loại', 'options' => [ 'ship-by' => 'Tiêu chuẩn', - 'collection' => 'Nhận tại cửa hàng', + 'pickup' => 'Nhận tại cửa hàng', ], ], 'stock_available' => [ @@ -73,7 +73,7 @@ 'label' => 'Loại', 'options' => [ 'ship-by' => 'Tiêu chuẩn', - 'collection' => 'Nhận tại cửa hàng', + 'pickup' => 'Nhận tại cửa hàng', ], ], ], diff --git a/packages/table-rate-shipping/src/Drivers/ShippingMethods/Collection.php b/packages/table-rate-shipping/src/Drivers/ShippingMethods/Pickup.php similarity index 95% rename from packages/table-rate-shipping/src/Drivers/ShippingMethods/Collection.php rename to packages/table-rate-shipping/src/Drivers/ShippingMethods/Pickup.php index 93c72a2bb1..e844111b78 100644 --- a/packages/table-rate-shipping/src/Drivers/ShippingMethods/Collection.php +++ b/packages/table-rate-shipping/src/Drivers/ShippingMethods/Pickup.php @@ -9,7 +9,7 @@ use Lunar\Shipping\Interfaces\ShippingRateInterface; use Lunar\Shipping\Models\ShippingRate; -class Collection implements ShippingRateInterface +class Pickup implements ShippingRateInterface { /** * The shipping rate for context. @@ -21,7 +21,7 @@ class Collection implements ShippingRateInterface */ public function name(): string { - return 'Collection'; + return 'Pickup'; } /** @@ -64,7 +64,7 @@ public function resolve(ShippingOptionRequest $shippingOptionRequest): ?Shipping taxClass: $shippingRate->getTaxClass(), taxReference: $shippingRate->getTaxReference(), option: $shippingZone->name, - collect: true, + pickup: true, meta: ['shipping_zone' => $shippingZone->name] ); } diff --git a/packages/table-rate-shipping/src/Facades/Shipping.php b/packages/table-rate-shipping/src/Facades/Shipping.php index 5993cd2ba6..291343e5e5 100644 --- a/packages/table-rate-shipping/src/Facades/Shipping.php +++ b/packages/table-rate-shipping/src/Facades/Shipping.php @@ -16,7 +16,7 @@ * @method static void createFreeShippingDriver() * @method static void createFlatRateDriver() * @method static void createShipByDriver() - * @method static void createCollectionDriver() + * @method static void createPickupDriver() * @method static Collection getSupportedDrivers() * @method static ShippingZoneResolver zones() * @method static ShippingRateResolver shippingRates(Cart|null $cart = null) diff --git a/packages/table-rate-shipping/src/Filament/Resources/ShippingMethodResource/Schemas/ShippingMethodForm.php b/packages/table-rate-shipping/src/Filament/Resources/ShippingMethodResource/Schemas/ShippingMethodForm.php index 15dfbcfdde..c9a308394c 100644 --- a/packages/table-rate-shipping/src/Filament/Resources/ShippingMethodResource/Schemas/ShippingMethodForm.php +++ b/packages/table-rate-shipping/src/Filament/Resources/ShippingMethodResource/Schemas/ShippingMethodForm.php @@ -168,7 +168,7 @@ public static function getDriverComponent(): Component ->label(__('lunarpanel.shipping::shippingmethod.form.driver.label')) ->options([ 'ship-by' => __('lunarpanel.shipping::shippingmethod.form.driver.options.ship-by'), - 'collection' => __('lunarpanel.shipping::shippingmethod.form.driver.options.collection'), + 'pickup' => __('lunarpanel.shipping::shippingmethod.form.driver.options.pickup'), ]) ->default('ship-by') ->required(); diff --git a/packages/table-rate-shipping/src/Managers/ShippingManager.php b/packages/table-rate-shipping/src/Managers/ShippingManager.php index ab1d5a4e38..b86c90b7b1 100644 --- a/packages/table-rate-shipping/src/Managers/ShippingManager.php +++ b/packages/table-rate-shipping/src/Managers/ShippingManager.php @@ -2,11 +2,12 @@ namespace Lunar\Shipping\Managers; +use Illuminate\Support\Collection; use Illuminate\Support\Manager; use Lunar\Core\Models\Cart; -use Lunar\Shipping\Drivers\ShippingMethods\Collection; use Lunar\Shipping\Drivers\ShippingMethods\FlatRate; use Lunar\Shipping\Drivers\ShippingMethods\FreeShipping; +use Lunar\Shipping\Drivers\ShippingMethods\Pickup; use Lunar\Shipping\Drivers\ShippingMethods\ShipBy; use Lunar\Shipping\Interfaces\ShippingMethodManagerInterface; use Lunar\Shipping\Resolvers\ShippingOptionResolver; @@ -30,18 +31,18 @@ public function createShipByDriver() return $this->buildProvider(ShipBy::class); } - public function createCollectionDriver() + public function createPickupDriver() { - return $this->buildProvider(Collection::class); + return $this->buildProvider(Pickup::class); } - public function getSupportedDrivers(): \Illuminate\Support\Collection + public function getSupportedDrivers(): Collection { return collect([ 'free-shipping' => $this->createDriver('free-shipping'), 'flat-rate' => $this->createDriver('flat-rate'), 'ship-by' => $this->createDriver('ship-by'), - 'collection' => $this->createDriver('collection'), + 'pickup' => $this->createDriver('pickup'), ])->merge( collect($this->customCreators)->mapWithKeys(function ($creator, $key) { return [ diff --git a/packages/upgrade/database/migrations/2026_06_01_000017_rename_collection_shipping_driver.php b/packages/upgrade/database/migrations/2026_06_01_000017_rename_collection_shipping_driver.php new file mode 100644 index 0000000000..533df11ec6 --- /dev/null +++ b/packages/upgrade/database/migrations/2026_06_01_000017_rename_collection_shipping_driver.php @@ -0,0 +1,35 @@ +prefix.'shipping_methods'; + + if (! Schema::hasTable($table) || ! Schema::hasColumn($table, 'driver')) { + return; + } + + DB::table($table) + ->where('driver', 'collection') + ->update(['driver' => 'pickup']); + } +}; diff --git a/packages/upgrade/src/Rector/LunarSetList.php b/packages/upgrade/src/Rector/LunarSetList.php index 909883b64e..fcc5514756 100644 --- a/packages/upgrade/src/Rector/LunarSetList.php +++ b/packages/upgrade/src/Rector/LunarSetList.php @@ -7,6 +7,7 @@ use Lunar\Upgrade\Rector\Models\RewriteModelClassCallRector; use Lunar\Upgrade\Rector\Orders\RewriteOrderRefundCallRector; use Lunar\Upgrade\Rector\Pricing\RetypeFormatterStyleParamRector; +use Lunar\Upgrade\Rector\Shipping\RenameShippingOptionCollectArgRector; /** * Catalog of Rector renames contributed by v2 breaking specs. @@ -523,6 +524,9 @@ final class LunarSetList // --- Spec 0075: first staff account creation moves to core --- 'Lunar\\Admin\\Console\\Commands\\MakeLunarAdminCommand' => 'Lunar\\Core\\Console\\Commands\\CreateAdmin', + // --- Spec 0077: the collection fulfilment method becomes pickup --- + 'Lunar\\Shipping\\Drivers\\ShippingMethods\\Collection' => 'Lunar\\Shipping\\Drivers\\ShippingMethods\\Pickup', + ]; /** @@ -534,6 +538,7 @@ final class LunarSetList RewriteModelClassCallRector::class, RewriteOrderRefundCallRector::class, RetypeFormatterStyleParamRector::class, + RenameShippingOptionCollectArgRector::class, ]; /** @@ -677,6 +682,10 @@ final class LunarSetList * `V1_TO_V2_METHOD_RENAMES`); the property fetch form * (`$type->mappedAttributes`) is covered here. * + * Spec 0077 renamed `ShippingOption::$collect` to `$pickup`. This covers + * the property fetch (`$option->collect`); the `collect:` named argument + * on construction is rewritten by `RenameShippingOptionCollectArgRector`. + * * @var array */ public const V1_TO_V2_PROPERTY_RENAMES = [ @@ -686,6 +695,8 @@ final class LunarSetList ['Lunar\\Models\\ProductVariant', 'purchasable', 'selling_policy'], ['Lunar\\Core\\Models\\ProductType', 'mappedAttributes', 'attributeMapping'], ['Lunar\\Models\\ProductType', 'mappedAttributes', 'attributeMapping'], + ['Lunar\\Core\\DataTypes\\ShippingOption', 'collect', 'pickup'], + ['Lunar\\DataTypes\\ShippingOption', 'collect', 'pickup'], ]; /** diff --git a/packages/upgrade/src/Rector/Shipping/RenameShippingOptionCollectArgRector.php b/packages/upgrade/src/Rector/Shipping/RenameShippingOptionCollectArgRector.php new file mode 100644 index 0000000000..f18ab43166 --- /dev/null +++ b/packages/upgrade/src/Rector/Shipping/RenameShippingOptionCollectArgRector.php @@ -0,0 +1,86 @@ +collect`) is renamed by + * `RenamePropertyRector` via `LunarSetList::V1_TO_V2_PROPERTY_RENAMES`. + * Matched against both the v1 and v2 class strings so the rewrite applies + * regardless of whether `RenameClassRector` has already run. + */ +final class RenameShippingOptionCollectArgRector extends AbstractRector +{ + private const CLASSES = [ + 'Lunar\\Core\\DataTypes\\ShippingOption', + 'Lunar\\DataTypes\\ShippingOption', + ]; + + public function getRuleDefinition(): RuleDefinition + { + return new RuleDefinition( + 'Renames the collect: named argument to pickup: on ShippingOption construction.', + [new CodeSample( + <<<'CODE_SAMPLE' +new ShippingOption(name: 'Pickup', collect: true); +CODE_SAMPLE, + <<<'CODE_SAMPLE' +new ShippingOption(name: 'Pickup', pickup: true); +CODE_SAMPLE, + )], + ); + } + + /** + * @return array> + */ + public function getNodeTypes(): array + { + return [New_::class]; + } + + /** + * @param New_ $node + */ + public function refactor(Node $node): ?Node + { + if (! $node->class instanceof Name || ! $this->isShippingOption($node->class)) { + return null; + } + + $renamed = false; + + foreach ($node->getArgs() as $arg) { + if ($arg->name instanceof Identifier && $arg->name->toString() === 'collect') { + $arg->name = new Identifier('pickup'); + $renamed = true; + } + } + + return $renamed ? $node : null; + } + + protected function isShippingOption(Name $class): bool + { + foreach (self::CLASSES as $shippingOptionClass) { + if ($this->isObjectType($class, new ObjectType($shippingOptionClass))) { + return true; + } + } + + return false; + } +} diff --git a/specs/0077-rename-collection-fulfilment-to-pickup.md b/specs/0077-rename-collection-fulfilment-to-pickup.md index e9b4644e4f..47e37bfc11 100644 --- a/specs/0077-rename-collection-fulfilment-to-pickup.md +++ b/specs/0077-rename-collection-fulfilment-to-pickup.md @@ -167,12 +167,13 @@ it should match the `Очиж авах` used by mn `fulfilment.php`). ## Open questions -- Does any v1 order-creation path persist the shipping option's `collect` - flag into data the upgrade package carries over? Current understanding is - no — `meta['collect']` is stamped by v2's `CreateShippingLine`, and the - upgrade backfill (`2026_06_01_000009`) creates only `shipping`/`shipped` - fulfilments — but verify against v1 during implementation; if v1 does - persist it anywhere, the upgrade migration also rewrites that key. +- ~~Does any v1 order-creation path persist the shipping option's `collect` + flag into data the upgrade package carries over?~~ **Resolved: no.** v1's + `CreateShippingLine` writes `'meta' => $shippingOption->meta` verbatim and + never stamps the flag (verified against `1.x`); the stamp is introduced by + v2's `CreateShippingLine`, and the upgrade backfill (`2026_06_01_000009`) + creates only `shipping`/`shipped` fulfilments. No order-line meta rewrite + ships in the upgrade migration. ## References diff --git a/tests/admin/Feature/Filament/Resources/OrderResource/Pages/Components/OrderFulfilmentsTest.php b/tests/admin/Feature/Filament/Resources/OrderResource/Pages/Components/OrderFulfilmentsTest.php index 1fd9443353..d9001d2cfa 100644 --- a/tests/admin/Feature/Filament/Resources/OrderResource/Pages/Components/OrderFulfilmentsTest.php +++ b/tests/admin/Feature/Filament/Resources/OrderResource/Pages/Components/OrderFulfilmentsTest.php @@ -332,28 +332,28 @@ public function extendFulfilmentActions(array $actions, $fulfilment): array expect((string) $fulfilment->refresh()->state)->toBe('returned'); }); -it('fulfils a collection parcel via the no-tracking fulfil action', function () { - $fulfilment = $this->order->createFulfilment([$this->line->id => 5], ['method' => 'collection']); +it('fulfils a pickup parcel via the no-tracking fulfil action', function () { + $fulfilment = $this->order->createFulfilment([$this->line->id => 5], ['method' => 'pickup']); Livewire::test(OrderFulfilments::class, ['record' => $this->order]) ->callAction('fulfil', arguments: ['fulfilment' => $fulfilment->id]) ->assertHasNoActionErrors(); - expect((string) $fulfilment->refresh()->state)->toBe('collected') + expect((string) $fulfilment->refresh()->state)->toBe('picked-up') ->and($fulfilment->shipped_at)->not->toBeNull(); }); -it('routes the terminal status to fulfil for collection and ship for shipping', function () { +it('routes the terminal status to fulfil for pickup and ship for shipping', function () { $component = Livewire::test(OrderFulfilments::class, ['record' => $this->order])->instance(); - $collection = $this->order->createFulfilment([$this->line->id => 2], ['method' => 'collection']); + $pickup = $this->order->createFulfilment([$this->line->id => 2], ['method' => 'pickup']); $shipping = $this->order->createFulfilment([$this->line->id => 2]); - $collectionTransitions = $component->statusTransitions($collection->refresh()->load('lines')); + $pickupTransitions = $component->statusTransitions($pickup->refresh()->load('lines')); $shippingTransitions = $component->statusTransitions($shipping->refresh()->load('lines')); - expect($collectionTransitions->firstWhere('name', 'collected')['action'])->toBe('fulfil') - ->and($collectionTransitions->pluck('name'))->not->toContain('shipped') + expect($pickupTransitions->firstWhere('name', 'picked-up')['action'])->toBe('fulfil') + ->and($pickupTransitions->pluck('name'))->not->toContain('shipped') ->and($shippingTransitions->firstWhere('name', 'shipped')['action'])->toBe('ship'); }); diff --git a/tests/core/Stubs/TestPurchasable.php b/tests/core/Stubs/TestPurchasable.php index a0f060c137..aafc9318b3 100644 --- a/tests/core/Stubs/TestPurchasable.php +++ b/tests/core/Stubs/TestPurchasable.php @@ -17,7 +17,7 @@ public function __construct( public TaxClass $taxClass, public $taxReference = null, public $option = null, - public bool $collect = false, + public bool $pickup = false, public $meta = null, ) { // .. diff --git a/tests/core/Unit/Fulfilment/FulfilmentMethodTest.php b/tests/core/Unit/Fulfilment/FulfilmentMethodTest.php index 1376798ff7..4629002481 100644 --- a/tests/core/Unit/Fulfilment/FulfilmentMethodTest.php +++ b/tests/core/Unit/Fulfilment/FulfilmentMethodTest.php @@ -2,8 +2,8 @@ use Illuminate\Foundation\Testing\RefreshDatabase; use Lunar\Core\Contracts\Actions\Orders\ResolvesFulfilmentStatus; -use Lunar\Core\Drivers\FulfilmentMethods\Collection as CollectionMethod; use Lunar\Core\Drivers\FulfilmentMethods\Digital; +use Lunar\Core\Drivers\FulfilmentMethods\Pickup; use Lunar\Core\Drivers\FulfilmentMethods\Shipping; use Lunar\Core\Enums\FulfilmentStateCategory; use Lunar\Core\Exceptions\FulfilmentException; @@ -13,10 +13,10 @@ use Lunar\Core\Models\Language; use Lunar\Core\Models\Order; use Lunar\Core\Models\OrderLine; -use Lunar\Core\States\Fulfilment\Collected; use Lunar\Core\States\Fulfilment\Pending; +use Lunar\Core\States\Fulfilment\PickedUp; use Lunar\Core\States\Fulfilment\Provisioned; -use Lunar\Core\States\Fulfilment\ReadyForCollection; +use Lunar\Core\States\Fulfilment\ReadyForPickup; use Lunar\Core\States\Fulfilment\Returned; use Lunar\Core\States\Fulfilment\Shipped; use Lunar\Core\States\Order\Fulfilment\Fulfilled; @@ -40,9 +40,9 @@ function resolveStatus(Order $order): string // ---------------------------------------------------------------- the manifest test('the manifest registers the three core methods in priority order', function () { - expect(FulfilmentMethods::all()->keys()->all())->toBe(['digital', 'collection', 'shipping']) + expect(FulfilmentMethods::all()->keys()->all())->toBe(['digital', 'pickup', 'shipping']) ->and(FulfilmentMethods::get('shipping'))->toBeInstanceOf(Shipping::class) - ->and(FulfilmentMethods::get('collection'))->toBeInstanceOf(CollectionMethod::class) + ->and(FulfilmentMethods::get('pickup'))->toBeInstanceOf(Pickup::class) ->and(FulfilmentMethods::get('digital'))->toBeInstanceOf(Digital::class) ->and(FulfilmentMethods::get('nope'))->toBeNull(); }); @@ -55,19 +55,19 @@ function resolveStatus(Order $order): string }); test('the manifest forgets methods by key', function () { - FulfilmentMethods::forget('collection', 'digital'); + FulfilmentMethods::forget('pickup', 'digital'); expect(FulfilmentMethods::all()->keys()->all())->toBe(['shipping']) - ->and(FulfilmentMethods::get('collection'))->toBeNull(); + ->and(FulfilmentMethods::get('pickup'))->toBeNull(); }); test('the manifest groups state names by category across every method', function () { expect(FulfilmentMethods::stateNamesIn(FulfilmentStateCategory::Fulfilled)) - ->toContain('shipped', 'collected', 'provisioned') + ->toContain('shipped', 'picked-up', 'provisioned') ->and(FulfilmentMethods::stateNamesIn(FulfilmentStateCategory::Returned)) ->toBe(['returned']) ->and(FulfilmentMethods::stateNamesIn(FulfilmentStateCategory::Outstanding)) - ->toContain('pending', 'in-progress', 'ready-for-collection'); + ->toContain('pending', 'in-progress', 'ready-for-pickup'); }); // ------------------------------------------------------------ method assignment @@ -91,23 +91,23 @@ function resolveStatus(Order $order): string ->and($byMethod['digital']->lines()->pluck('order_line_id')->all())->toBe([$digital->id]); }); -test('a collection shipping option routes physical lines to the collection method', function () { +test('a pickup shipping option routes physical lines to the pickup method', function () { $order = Order::factory()->create(['placed_at' => null]); $physical = OrderLine::factory()->create([ 'order_id' => $order->id, 'type' => 'physical', 'quantity' => 2, ]); - // The chosen shipping option was a collection — stamped onto the line. + // The chosen shipping option is a pickup — stamped onto the line. OrderLine::factory()->create([ 'order_id' => $order->id, 'type' => 'shipping', 'requires_shipping' => false, 'requires_fulfilment' => false, - 'meta' => ['collect' => true], + 'meta' => ['pickup' => true], ]); $order->update(['placed_at' => now()]); $fulfilment = $order->fulfilments()->sole(); - expect($fulfilment->method)->toBe('collection') + expect($fulfilment->method)->toBe('pickup') ->and($fulfilment->state)->toBeInstanceOf(Pending::class) ->and($fulfilment->lines()->pluck('order_line_id')->all())->toBe([$physical->id]); }); @@ -118,7 +118,7 @@ function resolveStatus(Order $order): string OrderLine::factory()->create([ 'order_id' => $order->id, 'type' => 'shipping', 'requires_shipping' => false, 'requires_fulfilment' => false, - 'meta' => ['collect' => false], + 'meta' => ['pickup' => false], ]); $order->update(['placed_at' => now()]); @@ -128,18 +128,18 @@ function resolveStatus(Order $order): string // ---------------------------------------------------------- per-method graphs -test('a collection parcel runs pending to ready-for-collection to collected', function () { - $fulfilment = Fulfilment::factory()->collection()->create(['state' => 'pending']); +test('a pickup parcel runs pending to ready-for-pickup to picked-up', function () { + $fulfilment = Fulfilment::factory()->pickup()->create(['state' => 'pending']); - $fulfilment->state->transitionTo(ReadyForCollection::class); - expect((string) $fulfilment->fresh()->state)->toBe('ready-for-collection'); + $fulfilment->state->transitionTo(ReadyForPickup::class); + expect((string) $fulfilment->fresh()->state)->toBe('ready-for-pickup'); - $fulfilment->refresh()->state->transitionTo(Collected::class); - expect((string) $fulfilment->fresh()->state)->toBe('collected'); + $fulfilment->refresh()->state->transitionTo(PickedUp::class); + expect((string) $fulfilment->fresh()->state)->toBe('picked-up'); }); -test('a collection parcel cannot be shipped (a shipping-only state)', function () { - $fulfilment = Fulfilment::factory()->collection()->create(['state' => 'pending']); +test('a pickup parcel cannot be shipped (a shipping-only state)', function () { + $fulfilment = Fulfilment::factory()->pickup()->create(['state' => 'pending']); expect(fn () => $fulfilment->state->transitionTo(Shipped::class)) ->toThrow(CouldNotPerformTransition::class); @@ -157,23 +157,23 @@ function resolveStatus(Order $order): string test('transitionableStates is filtered to the parcel method', function () { $shipping = Fulfilment::factory()->create(['state' => 'pending']); - $collection = Fulfilment::factory()->collection()->create(['state' => 'pending']); + $pickup = Fulfilment::factory()->pickup()->create(['state' => 'pending']); $shippingTargets = collect($shipping->state->transitionableStates()); - $collectionTargets = collect($collection->state->transitionableStates()); + $pickupTargets = collect($pickup->state->transitionableStates()); - expect($shippingTargets)->toContain('shipped')->not->toContain('collected') - ->and($collectionTargets)->toContain('collected')->not->toContain('shipped'); + expect($shippingTargets)->toContain('shipped')->not->toContain('picked-up') + ->and($pickupTargets)->toContain('picked-up')->not->toContain('shipped'); }); // --------------------------------------------------------------------- verbs -test('fulfil advances a collection parcel to collected and stamps the timestamp', function () { - $fulfilment = Fulfilment::factory()->collection()->create(['state' => 'pending']); +test('fulfil advances a pickup parcel to picked-up and stamps the timestamp', function () { + $fulfilment = Fulfilment::factory()->pickup()->create(['state' => 'pending']); $fulfilment->fulfil(); - expect((string) $fulfilment->fresh()->state)->toBe('collected') + expect((string) $fulfilment->fresh()->state)->toBe('picked-up') ->and($fulfilment->fresh()->shipped_at)->not->toBeNull(); }); @@ -187,12 +187,12 @@ function resolveStatus(Order $order): string }); test('ship is rejected on a method that carries no tracking', function () { - $collection = Fulfilment::factory()->collection()->create(['state' => 'pending']); + $pickup = Fulfilment::factory()->pickup()->create(['state' => 'pending']); $digital = Fulfilment::factory()->digital()->create(['state' => 'pending']); - expect(fn () => $collection->ship(['tracking_number' => 'X']))->toThrow(FulfilmentException::class) + expect(fn () => $pickup->ship(['tracking_number' => 'X']))->toThrow(FulfilmentException::class) ->and(fn () => $digital->ship())->toThrow(FulfilmentException::class) - ->and((string) $collection->fresh()->state)->toBe('pending'); + ->and((string) $pickup->fresh()->state)->toBe('pending'); }); test('a shipping parcel still ships with tracking and stamps the timestamp', function () { @@ -211,13 +211,13 @@ function resolveStatus(Order $order): string $order = Order::factory()->create(); $target = Fulfilment::factory()->create(['order_id' => $order->id, 'state' => 'pending']); - Fulfilment::factory()->collection()->create([ + Fulfilment::factory()->pickup()->create([ 'order_id' => $order->id, 'location_id' => $target->location_id, 'state' => 'pending', ]); - $sources = Fulfilment::query()->where('order_id', $order->id)->where('method', 'collection')->get(); + $sources = Fulfilment::query()->where('order_id', $order->id)->where('method', 'pickup')->get(); expect(fn () => $target->merge($sources))->toThrow(FulfilmentException::class); }); diff --git a/tests/core/Unit/Validation/Cart/ValidateCartForOrderCreationTest.php b/tests/core/Unit/Validation/Cart/ValidateCartForOrderCreationTest.php index e91c37d900..05dd0b4260 100644 --- a/tests/core/Unit/Validation/Cart/ValidateCartForOrderCreationTest.php +++ b/tests/core/Unit/Validation/Cart/ValidateCartForOrderCreationTest.php @@ -154,12 +154,12 @@ ]); $shippingOption = new ShippingOption( - name: 'Collection', - description: 'Collection', - identifier: 'COLLECT', + name: 'Pickup', + description: 'Pickup', + identifier: 'PICKUP', price: new PriceValue(0, $cart->currency), taxClass: $taxClass, - collect: true + pickup: true ); ShippingManifest::addOption($shippingOption); diff --git a/tests/demo-data/Feature/DemoDataSeederTest.php b/tests/demo-data/Feature/DemoDataSeederTest.php index d16022d78e..392d210167 100644 --- a/tests/demo-data/Feature/DemoDataSeederTest.php +++ b/tests/demo-data/Feature/DemoDataSeederTest.php @@ -36,7 +36,7 @@ function seedStore(bool $fresh = false): void ->toContain('unfulfilled', 'partially-fulfilled', 'fulfilled', 'partially-returned', 'returned'); expect(Fulfilment::query()->pluck('method')->unique()->values()->all()) - ->toContain('shipping', 'collection', 'digital'); + ->toContain('shipping', 'pickup', 'digital'); }); test('--fresh wipes and rebuilds without duplicating', function () { diff --git a/tests/demo-data/Feature/OrdersGeneratorTest.php b/tests/demo-data/Feature/OrdersGeneratorTest.php index 4993c5b43f..cf6a49ac5f 100644 --- a/tests/demo-data/Feature/OrdersGeneratorTest.php +++ b/tests/demo-data/Feature/OrdersGeneratorTest.php @@ -60,7 +60,7 @@ function fulfilmentStatuses(): array generateStore(); expect(Fulfilment::query()->pluck('method')->unique()->values()->all()) - ->toContain('shipping', 'collection', 'digital'); + ->toContain('shipping', 'pickup', 'digital'); }); test('it produces cancelled, closed and on-hold states', function () { diff --git a/tests/panel/Feature/Orders/OrderFulfilmentTest.php b/tests/panel/Feature/Orders/OrderFulfilmentTest.php index edccdc4e7a..bc316c7497 100644 --- a/tests/panel/Feature/Orders/OrderFulfilmentTest.php +++ b/tests/panel/Feature/Orders/OrderFulfilmentTest.php @@ -87,15 +87,15 @@ function pendingShippingFulfilment(Order $order, int $quantity = 2): Fulfilment $this->post(route('panel.orders.fulfilments.ship', [$order, $fulfilment]))->assertNotFound(); }); -it('marks a collection fulfilment collected via fulfil', function () { +it('marks a pickup fulfilment picked up via fulfil', function () { $order = Order::factory()->placed()->create(); - $fulfilment = Fulfilment::factory()->for($order)->collection()->create(['state' => 'pending']); + $fulfilment = Fulfilment::factory()->for($order)->pickup()->create(['state' => 'pending']); $this->from(route('panel.orders.show', $order)) ->post(route('panel.orders.fulfilments.fulfil', [$order, $fulfilment]), ['notify' => false]) ->assertSessionHas('success'); - expect($fulfilment->refresh()->state::$name)->toBe('collected'); + expect($fulfilment->refresh()->state::$name)->toBe('picked-up'); }); it('forbids fulfil on a tracking method', function () { @@ -208,7 +208,7 @@ function pendingShippingFulfilment(Order $order, int $quantity = 2): Fulfilment $location = Location::factory()->create(); $source = Fulfilment::factory()->for($order)->create(['method' => 'shipping', 'state' => 'pending', 'location_id' => $location->id]); - $target = Fulfilment::factory()->for($order)->collection()->create(['state' => 'pending', 'location_id' => $location->id]); + $target = Fulfilment::factory()->for($order)->pickup()->create(['state' => 'pending', 'location_id' => $location->id]); $lineA = OrderLine::factory()->for($order)->create(['type' => 'physical', 'requires_fulfilment' => true, 'quantity' => 1]); FulfilmentLine::factory()->create(['fulfilment_id' => $source->id, 'order_line_id' => $lineA->id, 'quantity' => 1]); diff --git a/tests/shipping/Unit/Drivers/ShippingMethods/CollectionTest.php b/tests/shipping/Unit/Drivers/ShippingMethods/PickupTest.php similarity index 85% rename from tests/shipping/Unit/Drivers/ShippingMethods/CollectionTest.php rename to tests/shipping/Unit/Drivers/ShippingMethods/PickupTest.php index 568ba2d53c..d74704698d 100644 --- a/tests/shipping/Unit/Drivers/ShippingMethods/CollectionTest.php +++ b/tests/shipping/Unit/Drivers/ShippingMethods/PickupTest.php @@ -5,19 +5,19 @@ use Lunar\Core\Models\Currency; use Lunar\Core\Models\TaxClass; use Lunar\Shipping\DataTransferObjects\ShippingOptionRequest; -use Lunar\Shipping\Drivers\ShippingMethods\Collection; +use Lunar\Shipping\Drivers\ShippingMethods\Pickup; use Lunar\Shipping\Models\ShippingMethod; use Lunar\Shipping\Models\ShippingRate; use Lunar\Shipping\Models\ShippingZone; use Lunar\Tests\Shipping\TestCase; use Lunar\Tests\Shipping\TestUtils; -uses(TestCase::class)->group('shipping', 'shipping-driver', 'shipping-driver-collection'); +uses(TestCase::class)->group('shipping', 'shipping-driver', 'shipping-driver-pickup'); uses(RefreshDatabase::class); uses(TestUtils::class); -test('can get free shipping', function () { +test('can get a zero-priced pickup option', function () { $currency = Currency::factory()->create([ 'default' => true, ]); @@ -31,7 +31,7 @@ ]); $shippingMethod = ShippingMethod::factory()->create([ - 'driver' => 'free-shipping', + 'driver' => 'pickup', 'data' => [], ]); @@ -42,7 +42,7 @@ $cart = $this->createCart($currency, 500); - $driver = new Collection; + $driver = new Pickup; $request = new ShippingOptionRequest( cart: $cart, @@ -54,4 +54,6 @@ expect($shippingOption)->toBeInstanceOf(ShippingOption::class); expect($shippingOption->price->value)->toEqual(0); + + expect($shippingOption->pickup)->toBeTrue(); }); diff --git a/tests/upgrade/Feature/RenameCollectionShippingDriverTest.php b/tests/upgrade/Feature/RenameCollectionShippingDriverTest.php new file mode 100644 index 0000000000..99bc7ceddf --- /dev/null +++ b/tests/upgrade/Feature/RenameCollectionShippingDriverTest.php @@ -0,0 +1,76 @@ + SHIPDRIVER_UPG_PREFIX]); +}); + +afterEach(function () { + Schema::dropIfExists(SHIPDRIVER_UPG_PREFIX.'shipping_methods'); +}); + +function shippingDriverMigration(): object +{ + $path = glob(dirname(__DIR__, 3).'/packages/upgrade/database/migrations/*rename_collection_shipping_driver.php'); + + return require $path[0]; +} + +/** + * Stand up a v1-shaped `shipping_methods` table with rows on each driver key. + */ +function simulateV1ShippingMethods(): void +{ + Schema::create(SHIPDRIVER_UPG_PREFIX.'shipping_methods', function (Blueprint $table) { + $table->id(); + $table->string('name'); + $table->string('driver'); + $table->timestamps(); + }); + + DB::table(SHIPDRIVER_UPG_PREFIX.'shipping_methods')->insert([ + ['id' => 1, 'name' => 'Click & Collect', 'driver' => 'collection', 'created_at' => now(), 'updated_at' => now()], + ['id' => 2, 'name' => 'Standard Delivery', 'driver' => 'ship-by', 'created_at' => now(), 'updated_at' => now()], + ['id' => 3, 'name' => 'Free Shipping', 'driver' => 'free-shipping', 'created_at' => now(), 'updated_at' => now()], + ]); +} + +test('it renames the collection driver to pickup and leaves the rest alone', function () { + simulateV1ShippingMethods(); + + shippingDriverMigration()->up(); + + expect(DB::table(SHIPDRIVER_UPG_PREFIX.'shipping_methods')->find(1)->driver)->toBe('pickup') + ->and(DB::table(SHIPDRIVER_UPG_PREFIX.'shipping_methods')->find(2)->driver)->toBe('ship-by') + ->and(DB::table(SHIPDRIVER_UPG_PREFIX.'shipping_methods')->find(3)->driver)->toBe('free-shipping'); +}); + +test('it is idempotent on re-run', function () { + simulateV1ShippingMethods(); + + shippingDriverMigration()->up(); + shippingDriverMigration()->up(); + + expect(DB::table(SHIPDRIVER_UPG_PREFIX.'shipping_methods')->where('driver', 'pickup')->count())->toBe(1) + ->and(DB::table(SHIPDRIVER_UPG_PREFIX.'shipping_methods')->where('driver', 'collection')->count())->toBe(0); +}); + +test('it is a no-op when the table does not exist', function () { + shippingDriverMigration()->up(); + + expect(Schema::hasTable(SHIPDRIVER_UPG_PREFIX.'shipping_methods'))->toBeFalse(); +}); diff --git a/tests/upgrade/Unit/Rector/Shipping/Fixture/RenameShippingOptionCollectArgRector/leaves_unrelated_and_migrated_alone.php.inc b/tests/upgrade/Unit/Rector/Shipping/Fixture/RenameShippingOptionCollectArgRector/leaves_unrelated_and_migrated_alone.php.inc new file mode 100644 index 0000000000..352d4419f9 --- /dev/null +++ b/tests/upgrade/Unit/Rector/Shipping/Fixture/RenameShippingOptionCollectArgRector/leaves_unrelated_and_migrated_alone.php.inc @@ -0,0 +1,16 @@ + +----- + diff --git a/tests/upgrade/Unit/Rector/Shipping/RenameShippingOptionCollectArgRectorTest.php b/tests/upgrade/Unit/Rector/Shipping/RenameShippingOptionCollectArgRectorTest.php new file mode 100644 index 0000000000..8714ceb564 --- /dev/null +++ b/tests/upgrade/Unit/Rector/Shipping/RenameShippingOptionCollectArgRectorTest.php @@ -0,0 +1,28 @@ +doTestFile($filePath); + } + + public static function provideData(): Iterator + { + return self::yieldFilesFromDirectory(__DIR__.'/Fixture/RenameShippingOptionCollectArgRector'); + } + + public function provideConfigFilePath(): string + { + return __DIR__.'/config/shipping_option_collect_arg.php'; + } +} diff --git a/tests/upgrade/Unit/Rector/Shipping/config/shipping_option_collect_arg.php b/tests/upgrade/Unit/Rector/Shipping/config/shipping_option_collect_arg.php new file mode 100644 index 0000000000..a0b62f5d44 --- /dev/null +++ b/tests/upgrade/Unit/Rector/Shipping/config/shipping_option_collect_arg.php @@ -0,0 +1,9 @@ +withRules([RenameShippingOptionCollectArgRector::class]);