public ActionResult Configure(PromoConfigureModel model, FormCollection form)
        {
            if (!ModelState.IsValid)
            {
                return Configure();
            }

            bool enabledChanged = !_promoSettings.Equals(model.Enabled);
            
            //save settings
            // general
            _promoSettings.Enabled = model.Enabled;
            _promoSettings.LogMessages = model.LogMessages;
            _promoSettings.ShowHelperMessages = model.ShowHelperMessages;

            // Connection Details
            _promoSettings.CompanyKey = model.CompanyKey;
            _promoSettings.PromoImportEndpointAddress = model.PromoImportServiceEndpointAddress;
            _promoSettings.PromoExportEndpointAddress = model.PromoExportServiceEndpointAddress;
            _promoSettings.BasketRequestEndpointAddress = model.BasketRequestServiceEndpointAddress;
            _promoSettings.StoreId = model.StoreId;

            // Settings no longer updated via the Config area.
            //_promoSettings.ProductPictureSize = model.ProductPictureSize;
            //_promoSettings.CurrencyId = model.CurrencyId;
            //_promoSettings.BatchSize = model.BatchSize;

            // Company and Store
            _promoSettings.StoreGroup = model.StoreGroup;
            _promoSettings.Channel = model.Channel;

            _promoSettings.SynchronizeCustomerRoles = model.SynchronizeCustomerRoles;
            _promoSettings.SynchronizeProducts = model.SynchronizeProducts;
            _promoSettings.SynchronizeShippingMethods = model.SynchronizeShippingMethods;
            _promoSettings.SynchronizeStores = model.SynchronizeStores;
            _promoSettings.SynchronizeCheckoutAttributes = model.SynchronizeCheckoutAttributes;
            _promoSettings.SynchronizeCurrencies = model.SynchronizeCurrencies;

            _promoSettings.UseSelectedCurrencyWhenSubmittingBaskets = model.UseSelectedCurrencyWhenSubmittingBaskets;
            _promoSettings.ShowMissedPromotions = model.ShowMissedPromotions;

            _promoSettings.ShowPromotionDetailsInBasket = model.ShowPromotionNameOption;
            _promoSettings.ServiceEndpointSelection = model.SelectedServicesEndPoint;

            bool doSyncNow = (_promoSettings.Enabled
                                && !string.IsNullOrEmpty(_promoSettings.CompanyKey)
                                && (model.SynchronizeAllWhenSaving || _promoSettings.InitialSetup));

            bool isInitialSetup = _promoSettings.InitialSetup;
            if (doSyncNow && _promoSettings.InitialSetup)
                _promoSettings.InitialSetup = false;

            _settingService.SaveSetting(_promoSettings);

            string formKey = "checkbox_product_attribute";
            var checkedProductAttributes = form[formKey] != null ? form[formKey].Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries).Select(x => Convert.ToInt32(x)).ToList() : new List<int>();
            var productAttributes = _productAttributeConfigService.RetrieveAll().ToList();
            foreach (var productAttribute in productAttributes)
            {
                productAttribute.Enabled = checkedProductAttributes.Contains(productAttribute.Id);
                _productAttributeConfigService.Update(productAttribute);
            }

            if (enabledChanged)
            {
                // The enabled flag has changed - so go and find the scheduled task and enable/disable appropriately.
                ScheduleTask scheduleTask = _scheduleTaskService.GetTaskByType(PromoTaskNames.DataFeedTask);
                if (scheduleTask != null)
                {
                    scheduleTask.Enabled = _promoSettings.Enabled;
                    _scheduleTaskService.UpdateTask(scheduleTask);
                }

                scheduleTask = _scheduleTaskService.GetTaskByType(PromoTaskNames.PromoSyncTask);
                if (scheduleTask != null)
                {
                    scheduleTask.Enabled = _promoSettings.Enabled;
                    _scheduleTaskService.UpdateTask(scheduleTask);
                }
            }

            if (doSyncNow)
                QueueSyncNowItems(isInitialSetup);

            ModelState.Clear();

            //redisplay the form
            return Configure();
        }
        private void SetupModelLists(PromoConfigureModel model)
        {
            //stores
            model.AvailableStores.Add(new SelectListItem() { Text = _localizationService.GetResource("Admin.Common.All"), Value = "0" });
            foreach (var s in _storeService.GetAllStores())
                model.AvailableStores.Add(new SelectListItem() { Text = s.Name, Value = s.Id.ToString() });

            //currencies
            foreach (var c in _currencyService.GetAllCurrencies())
                model.AvailableCurrencies.Add(new SelectListItem() { Text = c.Name, Value = c.Id.ToString() });

            model.ServicesEndpointsList.Add(new SelectListItem() { Text = _localizationService.GetResource("Plugins.Misc.QixolPromo.ServiceEndpoint.Evaluation"), Value = SettingsEndpointAddress.EVALUATION_SERVICES.ToString() });
            model.ServicesEndpointsList.Add(new SelectListItem() { Text = _localizationService.GetResource("Plugins.Misc.QixolPromo.ServiceEndpoint.Live"), Value = SettingsEndpointAddress.LIVE_SERVICES.ToString() });

#if DEBUG
            model.ServicesEndpointsList.Add(new SelectListItem() { Text = _localizationService.GetResource("Plugins.Misc.QixolPromo.ServiceEndpoint.Custom"), Value = SettingsEndpointAddress.CUSTOM_SERVICES.ToString() });
            model.AllowCustomEndpoint = true;
#endif

            model.ShowPromotionNameOptionsList.Add(new SelectListItem() { Text = _localizationService.GetResource("Plugins.Misc.QixolPromo.ShowPromoDetails.UserText"), Value = PromotionDetailsDisplayOptions.ShowEndUserText.ToString() });
            model.ShowPromotionNameOptionsList.Add(new SelectListItem() { Text = _localizationService.GetResource("Plugins.Misc.QixolPromo.ShowPromoDetails.PromotionName"), Value = PromotionDetailsDisplayOptions.ShowPromotionName.ToString() });
            model.ShowPromotionNameOptionsList.Add(new SelectListItem() { Text = _localizationService.GetResource("Plugins.Misc.QixolPromo.ShowPromoDetails.PromotionType"), Value = PromotionDetailsDisplayOptions.ShowPromotionType.ToString() });
            model.ShowPromotionNameOptionsList.Add(new SelectListItem() { Text = _localizationService.GetResource("Plugins.Misc.QixolPromo.ShowPromoDetails.Empty"), Value = PromotionDetailsDisplayOptions.ShowNoText.ToString() });

            model.ProductConfigItems = _productAttributeConfigService.RetrieveAll()
                                                                     .ToList()
                                                                     .Select(pac => pac.ToModel())
                                                                     .ToList();

            if (model.ProductConfigItems != null && model.ProductConfigItems.Count > 0)
            {
                model.ProductConfigItems.ForEach(pac =>
                {
                    pac.NameText = _localizationService.GetResource(pac.NameResource);
                });

                model.ProductConfigItems = model.ProductConfigItems.OrderBy(pac => pac.NameText).ToList();
            }

        }
        public ActionResult Configure()
        {
            var model = new PromoConfigureModel();

            // general
            model.Enabled = _promoSettings.Enabled;
            model.LogMessages = _promoSettings.LogMessages;
            model.ShowHelperMessages = _promoSettings.ShowHelperMessages;
            
            // Connection Details
            model.CompanyKey = _promoSettings.CompanyKey;
            model.PromoImportServiceEndpointAddress = _promoSettings.PromoImportEndpointAddress;
            model.BasketRequestServiceEndpointAddress = _promoSettings.BasketRequestEndpointAddress;
            model.PromoExportServiceEndpointAddress = _promoSettings.PromoExportEndpointAddress;

            // Product Feed
            //model.ProductPictureSize = _promoSettings.ProductPictureSize;
            model.StoreId = _promoSettings.StoreId;
            //model.BatchSize = _promoSettings.BatchSize;

            // Company and Store details
            model.StoreGroup = _promoSettings.StoreGroup;
            model.Channel = _promoSettings.Channel;
            model.SelectedServicesEndPoint = _promoSettings.ServiceEndpointSelection;

            model.SynchronizeCustomerRoles = _promoSettings.SynchronizeCustomerRoles;
            model.SynchronizeProducts = _promoSettings.SynchronizeProducts;
            model.SynchronizeShippingMethods = _promoSettings.SynchronizeShippingMethods;
            model.SynchronizeStores = _promoSettings.SynchronizeStores;
            model.SynchronizeCheckoutAttributes = _promoSettings.SynchronizeCheckoutAttributes;
            model.SynchronizeCurrencies = _promoSettings.SynchronizeCurrencies;

            model.UseSelectedCurrencyWhenSubmittingBaskets = _promoSettings.UseSelectedCurrencyWhenSubmittingBaskets;
            model.ShowMissedPromotions = _promoSettings.ShowMissedPromotions;

            model.ShowPromotionNameOption = _promoSettings.ShowPromotionDetailsInBasket;
            model.DisplayVersion = GetDisplayVersion();

            model.SynchronizeAllWhenSaving = _promoSettings.InitialSetup;
            model.CanUpdateSynchronizeAll = !_promoSettings.InitialSetup;
            model.ShowAdvancedIntegrationSettings = _promoSettings.ShowAdvancedIntegrationSettings;

            SetupModelLists(model);

            return View("~/Plugins/Misc.QixolPromo/Views/Admin/Configure.cshtml", model);
        }