public ActionResult Shipping(ShippingSettingsModel model) { if (!_permissionService.Authorize(StandardPermissionProvider.ManageSettings)) return AccessDeniedView(); _shippingSettings = model.ToEntity(_shippingSettings); var originAddress = _addressService.GetAddressById(_shippingSettings.ShippingOriginAddressId) ?? new Core.Domain.Common.Address() { CreatedOnUtc = DateTime.UtcNow, }; originAddress = model.ShippingOriginAddress.ToEntity(originAddress); if (originAddress.Id > 0) _addressService.UpdateAddress(originAddress); else _addressService.InsertAddress(originAddress); _shippingSettings.ShippingOriginAddressId = originAddress.Id; _settingService.SaveSetting(_shippingSettings); //activity log _customerActivityService.InsertActivity("EditSettings", _localizationService.GetResource("ActivityLog.EditSettings")); SuccessNotification(_localizationService.GetResource("Admin.Configuration.Updated")); return RedirectToAction("Shipping"); }
public ActionResult Shipping(ShippingSettingsModel model) { if (!_permissionService.Authorize(StandardPermissionProvider.ManageSettings)) return AccessDeniedView(); //load settings for a chosen store scope var storeScope = this.GetActiveStoreScopeConfiguration(_storeService, _workContext); var shippingSettings = _settingService.LoadSetting<ShippingSettings>(storeScope); shippingSettings = model.ToEntity(shippingSettings); /* We do not clear cache after each setting update. * This behavior can increase performance because cached settings will not be cleared * and loaded from database after each update */ if (model.AllowPickUpInStore_OverrideForStore || storeScope == 0) _settingService.SaveSetting(shippingSettings, x => x.AllowPickUpInStore, storeScope, false); else if (storeScope > 0) _settingService.DeleteSetting(shippingSettings, x => x.AllowPickUpInStore, storeScope); if (model.PickUpInStoreFee_OverrideForStore || storeScope == 0) _settingService.SaveSetting(shippingSettings, x => x.PickUpInStoreFee, storeScope, false); else if (storeScope > 0) _settingService.DeleteSetting(shippingSettings, x => x.PickUpInStoreFee, storeScope); if (model.UseWarehouseLocation_OverrideForStore || storeScope == 0) _settingService.SaveSetting(shippingSettings, x => x.UseWarehouseLocation, storeScope, false); else if (storeScope > 0) _settingService.DeleteSetting(shippingSettings, x => x.UseWarehouseLocation, storeScope); if (model.NotifyCustomerAboutShippingFromMultipleLocations_OverrideForStore || storeScope == 0) _settingService.SaveSetting(shippingSettings, x => x.NotifyCustomerAboutShippingFromMultipleLocations, storeScope, false); else if (storeScope > 0) _settingService.DeleteSetting(shippingSettings, x => x.NotifyCustomerAboutShippingFromMultipleLocations, storeScope); if (model.FreeShippingOverXEnabled_OverrideForStore || storeScope == 0) _settingService.SaveSetting(shippingSettings, x => x.FreeShippingOverXEnabled, storeScope, false); else if (storeScope > 0) _settingService.DeleteSetting(shippingSettings, x => x.FreeShippingOverXEnabled, storeScope); if (model.FreeShippingOverXValue_OverrideForStore || storeScope == 0) _settingService.SaveSetting(shippingSettings, x => x.FreeShippingOverXValue, storeScope, false); else if (storeScope > 0) _settingService.DeleteSetting(shippingSettings, x => x.FreeShippingOverXValue, storeScope); if (model.FreeShippingOverXIncludingTax_OverrideForStore || storeScope == 0) _settingService.SaveSetting(shippingSettings, x => x.FreeShippingOverXIncludingTax, storeScope, false); else if (storeScope > 0) _settingService.DeleteSetting(shippingSettings, x => x.FreeShippingOverXIncludingTax, storeScope); if (model.EstimateShippingEnabled_OverrideForStore || storeScope == 0) _settingService.SaveSetting(shippingSettings, x => x.EstimateShippingEnabled, storeScope, false); else if (storeScope > 0) _settingService.DeleteSetting(shippingSettings, x => x.EstimateShippingEnabled, storeScope); if (model.DisplayShipmentEventsToCustomers_OverrideForStore || storeScope == 0) _settingService.SaveSetting(shippingSettings, x => x.DisplayShipmentEventsToCustomers, storeScope, false); else if (storeScope > 0) _settingService.DeleteSetting(shippingSettings, x => x.DisplayShipmentEventsToCustomers, storeScope); if (model.DisplayShipmentEventsToStoreOwner_OverrideForStore || storeScope == 0) _settingService.SaveSetting(shippingSettings, x => x.DisplayShipmentEventsToStoreOwner, storeScope, false); else if (storeScope > 0) _settingService.DeleteSetting(shippingSettings, x => x.DisplayShipmentEventsToStoreOwner, storeScope); if (model.BypassShippingMethodSelectionIfOnlyOne_OverrideForStore || storeScope == 0) _settingService.SaveSetting(shippingSettings, x => x.BypassShippingMethodSelectionIfOnlyOne, storeScope, false); else if (storeScope > 0) _settingService.DeleteSetting(shippingSettings, x => x.BypassShippingMethodSelectionIfOnlyOne, storeScope); if (model.ShippingOriginAddress_OverrideForStore || storeScope == 0) { //update address var addressId = _settingService.SettingExists(shippingSettings, x => x.ShippingOriginAddressId, storeScope) ? shippingSettings.ShippingOriginAddressId : 0; var originAddress = _addressService.GetAddressById(addressId) ?? new Address { CreatedOnUtc = DateTime.UtcNow, }; //update ID manually (in case we're in multi-store configuration mode it'll be set to the shared one) model.ShippingOriginAddress.Id = addressId; originAddress = model.ShippingOriginAddress.ToEntity(originAddress); if (originAddress.Id > 0) _addressService.UpdateAddress(originAddress); else _addressService.InsertAddress(originAddress); shippingSettings.ShippingOriginAddressId = originAddress.Id; _settingService.SaveSetting(shippingSettings, x => x.ShippingOriginAddressId, storeScope, false); } else if (storeScope > 0) _settingService.DeleteSetting(shippingSettings, x => x.ShippingOriginAddressId, storeScope); //now clear settings cache _settingService.ClearCache(); //activity log _customerActivityService.InsertActivity("EditSettings", _localizationService.GetResource("ActivityLog.EditSettings")); SuccessNotification(_localizationService.GetResource("Admin.Configuration.Updated")); return RedirectToAction("Shipping"); }