diff --git a/src/Customer/Listeners/ClaimGuestOrdersOnLogin.php b/src/Customer/Listeners/ClaimGuestOrdersOnLogin.php new file mode 100644 index 0000000..f1172b8 --- /dev/null +++ b/src/Customer/Listeners/ClaimGuestOrdersOnLogin.php @@ -0,0 +1,24 @@ +claimer->claim($event->user); + } +} diff --git a/src/Customer/Services/GuestOrderClaimer.php b/src/Customer/Services/GuestOrderClaimer.php new file mode 100644 index 0000000..3ca626c --- /dev/null +++ b/src/Customer/Services/GuestOrderClaimer.php @@ -0,0 +1,41 @@ +latestCustomer(); + + if (! $customer || ! $user->email) { + return 0; + } + + return Order::query() + ->whereNotNull('placed_at') + ->whereNull('customer_id') + ->whereNull('user_id') + ->whereHas('billingAddress', fn ($query) => $query + ->whereRaw('lower(contact_email) = ?', [strtolower($user->email)])) + ->update([ + 'customer_id' => $customer->id, + 'user_id' => $user->id, + ]); + } +} diff --git a/src/Providers/CustomerServiceProvider.php b/src/Providers/CustomerServiceProvider.php index 9d0cde3..96940c1 100644 --- a/src/Providers/CustomerServiceProvider.php +++ b/src/Providers/CustomerServiceProvider.php @@ -6,11 +6,13 @@ use Illuminate\Support\Facades\Event; use Illuminate\Support\ServiceProvider; use Lunar\Facades\ModelManifest; use Lunar\Models\Contracts\Customer as LunarCustomer; +use Modules\Core\Auth\Events\UserAuthenticated; use Modules\Core\Auth\Events\UserCreated; use Modules\Core\Customer\Events\CustomerAddressCreated; use Modules\Core\Customer\Events\CustomerAddressDeleted; use Modules\Core\Customer\Events\CustomerAddressUpdated; use Modules\Core\Customer\Events\CustomerProfileUpdated; +use Modules\Core\Customer\Listeners\ClaimGuestOrdersOnLogin; use Modules\Core\Customer\Listeners\CreateCustomerForUser; use Modules\Core\Customer\Listeners\LogCustomerAccountActivity; use Modules\Core\Customer\Models\Customer; @@ -35,6 +37,7 @@ class CustomerServiceProvider extends ServiceProvider $this->app->booted(fn () => ModelManifest::replace(LunarCustomer::class, Customer::class)); Event::listen(UserCreated::class, CreateCustomerForUser::class); + Event::listen(UserAuthenticated::class, ClaimGuestOrdersOnLogin::class); Event::listen(CustomerAddressCreated::class, [LogCustomerAccountActivity::class, 'handleAddressCreated']); Event::listen(CustomerAddressUpdated::class, [LogCustomerAccountActivity::class, 'handleAddressUpdated']);