/**
  * @throws ValidationException
  */
 public function setData(Order $order, array $data)
 {
     if (Member::currentUserID()) {
         return;
     }
     if (!Checkout::membership_required() && empty($data['Password'])) {
         return;
     }
     $factory = new ShopMemberFactory();
     $member = $factory->create($data);
     $member->write();
     $member->extend('onAfterMemberCreate');
     $member->logIn();
     if ($order->BillingAddressID) {
         $address = $order->getBillingAddress();
         $address->MemberID = $member->ID;
         $address->write();
         $member->DefaultBillingAddressID = $order->BillingAddressID;
     }
     if ($order->ShippingAddressID) {
         $address = $order->getShippingAddress();
         $address->MemberID = $member->ID;
         $address->write();
         $member->DefaultShippingAddressID = $order->ShippingAddressID;
     }
     if ($member->isChanged()) {
         $member->write();
     }
 }