From 92f5db0982fb7d28bf3bd3bad4248ecb3a0fafc8 Mon Sep 17 00:00:00 2001 From: Duncan McClean Date: Thu, 23 Oct 2025 21:13:29 +0100 Subject: [PATCH 1/3] Add `new_customer` flag to orders --- src/Stache/Repositories/OrderRepository.php | 16 +++++++++++- tests/Orders/MakeOrderFromCartTest.php | 28 +++++++++++++++++++++ 2 files changed, 43 insertions(+), 1 deletion(-) diff --git a/src/Stache/Repositories/OrderRepository.php b/src/Stache/Repositories/OrderRepository.php index 5b362738..b3bfd0d7 100644 --- a/src/Stache/Repositories/OrderRepository.php +++ b/src/Stache/Repositories/OrderRepository.php @@ -6,8 +6,10 @@ use DuncanMcClean\Cargo\Contracts\Orders\Order; use DuncanMcClean\Cargo\Contracts\Orders\OrderRepository as RepositoryContract; use DuncanMcClean\Cargo\Contracts\Orders\QueryBuilder; +use DuncanMcClean\Cargo\Customers\GuestCustomer; use DuncanMcClean\Cargo\Exceptions\OrderNotFound; use DuncanMcClean\Cargo\Orders\Blueprint; +use Illuminate\Contracts\Auth\Authenticatable; use Illuminate\Support\Carbon; use Illuminate\Support\Facades\Cache; use Statamic\Fields\Blueprint as StatamicBlueprint; @@ -57,6 +59,18 @@ public function make(): Order public function makeFromCart(Cart $cart): Order { + $data = $cart->data(); + + if (! $cart->customer() instanceof GuestCustomer) { + $hasExistingOrders = $this->query() + ->where('customer', $cart->customer()->getKey()) + ->exists(); + + if (! $hasExistingOrders) { + $data->put('new_customer', true); + } + } + return self::make() ->cart($cart->id()) ->site($cart->site()) @@ -67,7 +81,7 @@ public function makeFromCart(Cart $cart): Order ->discountTotal($cart->discountTotal()) ->taxTotal($cart->taxTotal()) ->shippingTotal($cart->shippingTotal()) - ->data($cart->data()->toArray()); + ->data($data->toArray()); } public function save(Order $order): void diff --git a/tests/Orders/MakeOrderFromCartTest.php b/tests/Orders/MakeOrderFromCartTest.php index e76b89ef..32be68e5 100644 --- a/tests/Orders/MakeOrderFromCartTest.php +++ b/tests/Orders/MakeOrderFromCartTest.php @@ -7,6 +7,7 @@ use PHPUnit\Framework\Attributes\Test; use Statamic\Facades\Collection; use Statamic\Facades\Entry; +use Statamic\Facades\User; use Statamic\Testing\Concerns\PreventsSavingStacheItemsToDisk; use Tests\TestCase; @@ -68,4 +69,31 @@ public function it_can_make_an_order_from_a_cart() 'status' => 'payment_pending', ], $order->fileData()); } + + #[Test] + public function it_adds_the_new_customer_flag_when_its_the_customers_first_order() + { + $user = User::make()->id('user-123')->email('first.time@example.com')->save(); + + $cart = Cart::make()->customer($user); + + $order = Order::makeFromCart($cart); + + $this->assertEquals('user-123', $order->customer()->id()); + $this->assertEquals(true, $order->get('new_customer')); + } + + #[Test] + public function it_doesnt_add_the_new_customer_flag_when_the_customer_has_past_orders() + { + $user = User::make()->id('user-123')->email('first.time@example.com')->save(); + Order::make()->customer($user)->save(); + + $cart = Cart::make()->customer($user); + + $order = Order::makeFromCart($cart); + + $this->assertEquals('user-123', $order->customer()->id()); + $this->assertNull($order->get('new_customer')); + } } From 92f7365ca69c942d651945d36e6bcf2437dd07ad Mon Sep 17 00:00:00 2001 From: Duncan McClean Date: Thu, 23 Oct 2025 21:35:49 +0100 Subject: [PATCH 2/3] formatting --- src/Stache/Repositories/OrderRepository.php | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Stache/Repositories/OrderRepository.php b/src/Stache/Repositories/OrderRepository.php index b3bfd0d7..57e654bd 100644 --- a/src/Stache/Repositories/OrderRepository.php +++ b/src/Stache/Repositories/OrderRepository.php @@ -9,7 +9,6 @@ use DuncanMcClean\Cargo\Customers\GuestCustomer; use DuncanMcClean\Cargo\Exceptions\OrderNotFound; use DuncanMcClean\Cargo\Orders\Blueprint; -use Illuminate\Contracts\Auth\Authenticatable; use Illuminate\Support\Carbon; use Illuminate\Support\Facades\Cache; use Statamic\Fields\Blueprint as StatamicBlueprint; From 585d3003e4f83e837854c83e087188e4ef6a29f8 Mon Sep 17 00:00:00 2001 From: Duncan McClean Date: Thu, 23 Oct 2025 21:36:18 +0100 Subject: [PATCH 3/3] check customer --- src/Stache/Repositories/OrderRepository.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Stache/Repositories/OrderRepository.php b/src/Stache/Repositories/OrderRepository.php index 57e654bd..5a792c94 100644 --- a/src/Stache/Repositories/OrderRepository.php +++ b/src/Stache/Repositories/OrderRepository.php @@ -60,7 +60,7 @@ public function makeFromCart(Cart $cart): Order { $data = $cart->data(); - if (! $cart->customer() instanceof GuestCustomer) { + if ($cart->customer() && ! $cart->customer() instanceof GuestCustomer) { $hasExistingOrders = $this->query() ->where('customer', $cart->customer()->getKey()) ->exists();