Skip to content

Commit 51e3a50

Browse files
Add new_customer flag to orders (#60)
1 parent acb82a5 commit 51e3a50

File tree

2 files changed

+42
-1
lines changed

2 files changed

+42
-1
lines changed

src/Stache/Repositories/OrderRepository.php

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
use DuncanMcClean\Cargo\Contracts\Orders\Order;
77
use DuncanMcClean\Cargo\Contracts\Orders\OrderRepository as RepositoryContract;
88
use DuncanMcClean\Cargo\Contracts\Orders\QueryBuilder;
9+
use DuncanMcClean\Cargo\Customers\GuestCustomer;
910
use DuncanMcClean\Cargo\Exceptions\OrderNotFound;
1011
use DuncanMcClean\Cargo\Orders\Blueprint;
1112
use Illuminate\Support\Carbon;
@@ -57,6 +58,18 @@ public function make(): Order
5758

5859
public function makeFromCart(Cart $cart): Order
5960
{
61+
$data = $cart->data();
62+
63+
if ($cart->customer() && ! $cart->customer() instanceof GuestCustomer) {
64+
$hasExistingOrders = $this->query()
65+
->where('customer', $cart->customer()->getKey())
66+
->exists();
67+
68+
if (! $hasExistingOrders) {
69+
$data->put('new_customer', true);
70+
}
71+
}
72+
6073
return self::make()
6174
->cart($cart->id())
6275
->site($cart->site())
@@ -67,7 +80,7 @@ public function makeFromCart(Cart $cart): Order
6780
->discountTotal($cart->discountTotal())
6881
->taxTotal($cart->taxTotal())
6982
->shippingTotal($cart->shippingTotal())
70-
->data($cart->data()->toArray());
83+
->data($data->toArray());
7184
}
7285

7386
public function save(Order $order): void

tests/Orders/MakeOrderFromCartTest.php

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
use PHPUnit\Framework\Attributes\Test;
88
use Statamic\Facades\Collection;
99
use Statamic\Facades\Entry;
10+
use Statamic\Facades\User;
1011
use Statamic\Testing\Concerns\PreventsSavingStacheItemsToDisk;
1112
use Tests\TestCase;
1213

@@ -68,4 +69,31 @@ public function it_can_make_an_order_from_a_cart()
6869
'status' => 'payment_pending',
6970
], $order->fileData());
7071
}
72+
73+
#[Test]
74+
public function it_adds_the_new_customer_flag_when_its_the_customers_first_order()
75+
{
76+
$user = User::make()->id('user-123')->email('first.time@example.com')->save();
77+
78+
$cart = Cart::make()->customer($user);
79+
80+
$order = Order::makeFromCart($cart);
81+
82+
$this->assertEquals('user-123', $order->customer()->id());
83+
$this->assertEquals(true, $order->get('new_customer'));
84+
}
85+
86+
#[Test]
87+
public function it_doesnt_add_the_new_customer_flag_when_the_customer_has_past_orders()
88+
{
89+
$user = User::make()->id('user-123')->email('first.time@example.com')->save();
90+
Order::make()->customer($user)->save();
91+
92+
$cart = Cart::make()->customer($user);
93+
94+
$order = Order::makeFromCart($cart);
95+
96+
$this->assertEquals('user-123', $order->customer()->id());
97+
$this->assertNull($order->get('new_customer'));
98+
}
7199
}

0 commit comments

Comments
 (0)