public async Task Handle(RegisteredByExternalMethodEventHandler eventMessage, CancellationToken cancellationToken) { if (eventMessage?.Customer == null || eventMessage.AuthenticationParameters == null) { return; } //handle event only for this authentication method if (!eventMessage.AuthenticationParameters.ProviderSystemName.Equals(FacebookAuthenticationDefaults.ProviderSystemName)) { return; } //store some of the customer fields var firstName = eventMessage.AuthenticationParameters.Claims?.FirstOrDefault(claim => claim.Type == ClaimTypes.GivenName)?.Value; if (!string.IsNullOrEmpty(firstName)) { await _userFieldService.SaveField(eventMessage.Customer, SystemCustomerFieldNames.FirstName, firstName); } var lastName = eventMessage.AuthenticationParameters.Claims?.FirstOrDefault(claim => claim.Type == ClaimTypes.Surname)?.Value; if (!string.IsNullOrEmpty(lastName)) { await _userFieldService.SaveField(eventMessage.Customer, SystemCustomerFieldNames.LastName, lastName); } //notifications for admin if (_customerSettings.NotifyNewCustomerRegistration) { await _messageProviderService.SendCustomerRegisteredMessage(eventMessage.Customer, _workContext.CurrentStore, _workContext.WorkingLanguage.Id); } //send welcome message if (eventMessage.RegistrationResult.Success) { await _messageProviderService.SendCustomerWelcomeMessage(eventMessage.Customer, _workContext.CurrentStore, _workContext.WorkingLanguage.Id); } }
public async Task <bool> Handle(CustomerRegisteredCommand request, CancellationToken cancellationToken) { //VAT number if (_taxSettings.EuVatEnabled) { await _userFieldService.SaveField(request.Customer, SystemCustomerFieldNames.VatNumber, request.Model.VatNumber); var vat = await _checkVatService.GetVatNumberStatus(request.Model.VatNumber); await _userFieldService.SaveField(request.Customer, SystemCustomerFieldNames.VatNumberStatusId, (int)vat.status); } //form fields if (_customerSettings.GenderEnabled) { await _userFieldService.SaveField(request.Customer, SystemCustomerFieldNames.Gender, request.Model.Gender); } await _userFieldService.SaveField(request.Customer, SystemCustomerFieldNames.FirstName, request.Model.FirstName); await _userFieldService.SaveField(request.Customer, SystemCustomerFieldNames.LastName, request.Model.LastName); if (_customerSettings.DateOfBirthEnabled) { DateTime?dateOfBirth = request.Model.ParseDateOfBirth(); await _userFieldService.SaveField(request.Customer, SystemCustomerFieldNames.DateOfBirth, dateOfBirth); } if (_customerSettings.CompanyEnabled) { await _userFieldService.SaveField(request.Customer, SystemCustomerFieldNames.Company, request.Model.Company); } if (_customerSettings.StreetAddressEnabled) { await _userFieldService.SaveField(request.Customer, SystemCustomerFieldNames.StreetAddress, request.Model.StreetAddress); } if (_customerSettings.StreetAddress2Enabled) { await _userFieldService.SaveField(request.Customer, SystemCustomerFieldNames.StreetAddress2, request.Model.StreetAddress2); } if (_customerSettings.ZipPostalCodeEnabled) { await _userFieldService.SaveField(request.Customer, SystemCustomerFieldNames.ZipPostalCode, request.Model.ZipPostalCode); } if (_customerSettings.CityEnabled) { await _userFieldService.SaveField(request.Customer, SystemCustomerFieldNames.City, request.Model.City); } if (_customerSettings.CountryEnabled) { await _userFieldService.SaveField(request.Customer, SystemCustomerFieldNames.CountryId, request.Model.CountryId); } if (_customerSettings.CountryEnabled && _customerSettings.StateProvinceEnabled) { await _userFieldService.SaveField(request.Customer, SystemCustomerFieldNames.StateProvinceId, request.Model.StateProvinceId); } if (_customerSettings.PhoneEnabled) { await _userFieldService.SaveField(request.Customer, SystemCustomerFieldNames.Phone, request.Model.Phone); } if (_customerSettings.FaxEnabled) { await _userFieldService.SaveField(request.Customer, SystemCustomerFieldNames.Fax, request.Model.Fax); } //newsletter if (_customerSettings.NewsletterEnabled) { var categories = new List <string>(); foreach (string formKey in request.Form.Keys) { if (formKey.Contains("customernewsletterCategory_")) { try { var category = formKey.Split('_')[1]; categories.Add(category); } catch { } } } //save newsletter value var newsletter = await _newsLetterSubscriptionService.GetNewsLetterSubscriptionByEmailAndStoreId(request.Model.Email, request.Store.Id); if (newsletter != null) { newsletter.Categories.Clear(); categories.ForEach(x => newsletter.Categories.Add(x)); if (request.Model.Newsletter) { newsletter.Active = true; await _newsLetterSubscriptionService.UpdateNewsLetterSubscription(newsletter); } } else { if (request.Model.Newsletter) { var newsLetterSubscription = new NewsLetterSubscription { NewsLetterSubscriptionGuid = Guid.NewGuid(), Email = request.Model.Email, CustomerId = request.Customer.Id, Active = true, StoreId = request.Store.Id, CreatedOnUtc = DateTime.UtcNow }; categories.ForEach(x => newsLetterSubscription.Categories.Add(x)); await _newsLetterSubscriptionService.InsertNewsLetterSubscription(newsLetterSubscription); } } } //save customer attributes await _customerService.UpdateCustomerField(request.Customer, x => x.Attributes, request.CustomerAttributes); //insert default address (if possible) var defaultAddress = new Address { FirstName = request.Customer.GetUserFieldFromEntity <string>(SystemCustomerFieldNames.FirstName), LastName = request.Customer.GetUserFieldFromEntity <string>(SystemCustomerFieldNames.LastName), Email = request.Customer.Email, Company = request.Customer.GetUserFieldFromEntity <string>(SystemCustomerFieldNames.Company), VatNumber = request.Customer.GetUserFieldFromEntity <string>(SystemCustomerFieldNames.VatNumber), CountryId = !string.IsNullOrEmpty(request.Customer.GetUserFieldFromEntity <string>(SystemCustomerFieldNames.CountryId)) ? request.Customer.GetUserFieldFromEntity <string>(SystemCustomerFieldNames.CountryId) : "", StateProvinceId = !string.IsNullOrEmpty(request.Customer.GetUserFieldFromEntity <string>(SystemCustomerFieldNames.StateProvinceId)) ? request.Customer.GetUserFieldFromEntity <string>(SystemCustomerFieldNames.StateProvinceId) : "", City = request.Customer.GetUserFieldFromEntity <string>(SystemCustomerFieldNames.City), Address1 = request.Customer.GetUserFieldFromEntity <string>(SystemCustomerFieldNames.StreetAddress), Address2 = request.Customer.GetUserFieldFromEntity <string>(SystemCustomerFieldNames.StreetAddress2), ZipPostalCode = request.Customer.GetUserFieldFromEntity <string>(SystemCustomerFieldNames.ZipPostalCode), PhoneNumber = request.Customer.GetUserFieldFromEntity <string>(SystemCustomerFieldNames.Phone), FaxNumber = request.Customer.GetUserFieldFromEntity <string>(SystemCustomerFieldNames.Fax), CreatedOnUtc = request.Customer.CreatedOnUtc, }; if (await IsAddressValid(defaultAddress)) { //set default address request.Customer.Addresses.Add(defaultAddress); await _customerService.InsertAddress(defaultAddress, request.Customer.Id); request.Customer.BillingAddress = defaultAddress; await _customerService.UpdateBillingAddress(defaultAddress, request.Customer.Id); request.Customer.ShippingAddress = defaultAddress; await _customerService.UpdateShippingAddress(defaultAddress, request.Customer.Id); } //notifications if (_customerSettings.NotifyNewCustomerRegistration) { await _messageProviderService.SendCustomerRegisteredMessage(request.Customer, request.Store, _languageSettings.DefaultAdminLanguageId); } //New customer has a free shipping for the first order if (_customerSettings.RegistrationFreeShipping) { await _customerService.UpdateCustomerField(request.Customer, x => x.FreeShipping, true); } await _customerActionEventService.Registration(request.Customer); return(true); }