public virtual async Task <IActionResult> Create(CheckoutAttributeModel model, bool continueEditing)
        {
            if (!await _permissionService.AuthorizeAsync(StandardPermissionProvider.ManageAttributes))
            {
                return(AccessDeniedView());
            }

            if (ModelState.IsValid)
            {
                var checkoutAttribute = model.ToEntity <CheckoutAttribute>();
                await _checkoutAttributeService.InsertCheckoutAttributeAsync(checkoutAttribute);

                //locales
                await UpdateAttributeLocalesAsync(checkoutAttribute, model);

                //stores
                await SaveStoreMappingsAsync(checkoutAttribute, model);

                //activity log
                await _customerActivityService.InsertActivityAsync("AddNewCheckoutAttribute",
                                                                   string.Format(await _localizationService.GetResourceAsync("ActivityLog.AddNewCheckoutAttribute"), checkoutAttribute.Name), checkoutAttribute);

                _notificationService.SuccessNotification(await _localizationService.GetResourceAsync("Admin.Catalog.Attributes.CheckoutAttributes.Added"));

                if (!continueEditing)
                {
                    return(RedirectToAction("List"));
                }

                return(RedirectToAction("Edit", new { id = checkoutAttribute.Id }));
            }

            //prepare model
            model = await _checkoutAttributeModelFactory.PrepareCheckoutAttributeModelAsync(model, null, true);

            //if we got this far, something failed, redisplay form
            return(View(model));
        }
        public async Task SetUp()
        {
            _checkoutAttributeParser    = GetService <ICheckoutAttributeParser>();
            _checkoutAttributeFormatter = GetService <ICheckoutAttributeFormatter>();
            _checkoutAttributeService   = GetService <ICheckoutAttributeService>();

            //color (dropdownlist)
            _ca1 = new CheckoutAttribute
            {
                Name                 = "Color",
                TextPrompt           = "Select color:",
                IsRequired           = true,
                AttributeControlType = AttributeControlType.DropdownList,
                DisplayOrder         = 1
            };

            await _checkoutAttributeService.InsertCheckoutAttributeAsync(_ca1);

            _cav11 = new CheckoutAttributeValue
            {
                Name                = "Green",
                DisplayOrder        = 1,
                CheckoutAttributeId = _ca1.Id
            };
            _cav12 = new CheckoutAttributeValue
            {
                Name                = "Red",
                DisplayOrder        = 2,
                CheckoutAttributeId = _ca1.Id
            };

            await _checkoutAttributeService.InsertCheckoutAttributeValueAsync(_cav11);

            await _checkoutAttributeService.InsertCheckoutAttributeValueAsync(_cav12);

            //custom option (checkboxes)
            _ca2 = new CheckoutAttribute
            {
                Name                 = "Custom option",
                TextPrompt           = "Select custom option:",
                IsRequired           = true,
                AttributeControlType = AttributeControlType.Checkboxes,
                DisplayOrder         = 2
            };

            await _checkoutAttributeService.InsertCheckoutAttributeAsync(_ca2);

            _cav21 = new CheckoutAttributeValue
            {
                Name                = "Option 1",
                DisplayOrder        = 1,
                CheckoutAttributeId = _ca2.Id
            };
            _cav22 = new CheckoutAttributeValue
            {
                Name                = "Option 2",
                DisplayOrder        = 2,
                CheckoutAttributeId = _ca2.Id
            };

            await _checkoutAttributeService.InsertCheckoutAttributeValueAsync(_cav21);

            await _checkoutAttributeService.InsertCheckoutAttributeValueAsync(_cav22);

            //custom text
            _ca3 = new CheckoutAttribute
            {
                Name                 = "Custom text",
                TextPrompt           = "Enter custom text:",
                IsRequired           = true,
                AttributeControlType = AttributeControlType.MultilineTextbox,
                DisplayOrder         = 3
            };

            await _checkoutAttributeService.InsertCheckoutAttributeAsync(_ca3);
        }