File tree Expand file tree Collapse file tree 2 files changed +42
-1
lines changed
Expand file tree Collapse file tree 2 files changed +42
-1
lines changed Original file line number Diff line number Diff line change 66use DuncanMcClean \Cargo \Contracts \Orders \Order ;
77use DuncanMcClean \Cargo \Contracts \Orders \OrderRepository as RepositoryContract ;
88use DuncanMcClean \Cargo \Contracts \Orders \QueryBuilder ;
9+ use DuncanMcClean \Cargo \Customers \GuestCustomer ;
910use DuncanMcClean \Cargo \Exceptions \OrderNotFound ;
1011use DuncanMcClean \Cargo \Orders \Blueprint ;
1112use 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
Original file line number Diff line number Diff line change 77use PHPUnit \Framework \Attributes \Test ;
88use Statamic \Facades \Collection ;
99use Statamic \Facades \Entry ;
10+ use Statamic \Facades \User ;
1011use Statamic \Testing \Concerns \PreventsSavingStacheItemsToDisk ;
1112use 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}
You can’t perform that action at this time.
0 commit comments