public override void PostProcessPayment(PostProcessPaymentRequest postProcessPaymentRequest)
        {
            var order   = postProcessPaymentRequest.Order;
            var session = HttpContext.GetPayPalState(SystemName);

            var orderAttribute = new PayPalInstalmentsOrderAttribute
            {
                FinancingCosts          = session.FinancingCosts,
                TotalInclFinancingCosts = session.TotalInclFinancingCosts
            };

            GenericAttributeService.SaveAttribute(order, PayPalInstalmentsOrderAttribute.Key, JsonConvert.SerializeObject(orderAttribute), order.StoreId);

            base.PostProcessPayment(postProcessPaymentRequest);
        }
        private void PopulateCustomersAndUsers(string defaultUserEmail, string defaultUserPassword)
        {
            var customerRoles = _data.CustomerRoles();

            SaveRange(customerRoles.Where(x => x != null));

            //admin user
            var adminUser = new Customer
            {
                CustomerGuid        = Guid.NewGuid(),
                Email               = defaultUserEmail,
                Username            = defaultUserEmail,
                Password            = defaultUserPassword,
                PasswordFormat      = PasswordFormat.Clear,
                PasswordSalt        = "",
                Active              = true,
                CreatedOnUtc        = DateTime.UtcNow,
                LastActivityDateUtc = DateTime.UtcNow,
            };

            var adminAddress = _data.AdminAddress();

            adminUser.Addresses.Add(adminAddress);
            adminUser.BillingAddress  = adminAddress;
            adminUser.ShippingAddress = adminAddress;
            adminUser.CustomerRoles.Add(customerRoles.SingleOrDefault(x => x.SystemName == SystemCustomerRoleNames.Administrators));
            adminUser.CustomerRoles.Add(customerRoles.SingleOrDefault(x => x.SystemName == SystemCustomerRoleNames.ForumModerators));
            adminUser.CustomerRoles.Add(customerRoles.SingleOrDefault(x => x.SystemName == SystemCustomerRoleNames.Registered));
            adminUser.CustomerRoles.Add(customerRoles.SingleOrDefault(x => x.SystemName == SystemCustomerRoleNames.Agents));
            Save(adminUser);

            // Set default customer name
            var firstAddress = adminUser.Addresses.FirstOrDefault();

            GenericAttributeService.InsertAttribute(new GenericAttribute
            {
                EntityId = adminUser.Id,
                Key      = "FirstName",
                KeyGroup = "Customer",
                Value    = firstAddress.FirstName,
                StoreId  = 0
            });
            GenericAttributeService.InsertAttribute(new GenericAttribute
            {
                EntityId = adminUser.Id,
                Key      = "LastName",
                KeyGroup = "Customer",
                Value    = firstAddress.LastName,
                StoreId  = 0
            });
            _ctx.SaveChanges();

            // Built-in user for search engines (crawlers)
            var customer = _data.SearchEngineUser();

            customer.CustomerRoles.Add(customerRoles.SingleOrDefault(x => x.SystemName == SystemCustomerRoleNames.Guests));
            Save(customer);

            // Built-in user for background tasks
            customer = _data.BackgroundTaskUser();
            customer.CustomerRoles.Add(customerRoles.SingleOrDefault(x => x.SystemName == SystemCustomerRoleNames.Guests));
            Save(customer);

            // Built-in user for the PDF converter
            customer = _data.PdfConverterUser();
            customer.CustomerRoles.Add(customerRoles.SingleOrDefault(x => x.SystemName == SystemCustomerRoleNames.Guests));
            Save(customer);
        }