Пример #1
0
        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);
        }