public ActionResult Tax(TaxSettingsModel model) { if (!_permissionService.Authorize(StandardPermissionProvider.ManageSettings)) return AccessDeniedView(); _taxSettings = model.ToEntity(_taxSettings); var defaultAddress = _addressService.GetAddressById(_taxSettings.DefaultTaxAddressId) ?? new Core.Domain.Common.Address() { CreatedOnUtc = DateTime.UtcNow, }; defaultAddress = model.DefaultTaxAddress.ToEntity(defaultAddress); if (defaultAddress.Id > 0) _addressService.UpdateAddress(defaultAddress); else _addressService.InsertAddress(defaultAddress); _taxSettings.DefaultTaxAddressId = defaultAddress.Id; _settingService.SaveSetting(_taxSettings); //activity log _customerActivityService.InsertActivity("EditSettings", _localizationService.GetResource("ActivityLog.EditSettings")); SuccessNotification(_localizationService.GetResource("Admin.Configuration.Updated")); return RedirectToAction("Tax"); }
public ActionResult Tax(TaxSettingsModel model) { if (!_permissionService.Authorize(StandardPermissionProvider.ManageSettings)) return AccessDeniedView(); //load settings for a chosen store scope var storeScope = this.GetActiveStoreScopeConfiguration(_storeService, _workContext); var taxSettings = _settingService.LoadSetting<TaxSettings>(storeScope); taxSettings = model.ToEntity(taxSettings); /* 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.PricesIncludeTax_OverrideForStore || storeScope == 0) _settingService.SaveSetting(taxSettings, x => x.PricesIncludeTax, storeScope, false); else if (storeScope > 0) _settingService.DeleteSetting(taxSettings, x => x.PricesIncludeTax, storeScope); if (model.AllowCustomersToSelectTaxDisplayType_OverrideForStore || storeScope == 0) _settingService.SaveSetting(taxSettings, x => x.AllowCustomersToSelectTaxDisplayType, storeScope, false); else if (storeScope > 0) _settingService.DeleteSetting(taxSettings, x => x.AllowCustomersToSelectTaxDisplayType, storeScope); if (model.TaxDisplayType_OverrideForStore || storeScope == 0) _settingService.SaveSetting(taxSettings, x => x.TaxDisplayType, storeScope, false); else if (storeScope > 0) _settingService.DeleteSetting(taxSettings, x => x.TaxDisplayType, storeScope); if (model.DisplayTaxSuffix_OverrideForStore || storeScope == 0) _settingService.SaveSetting(taxSettings, x => x.DisplayTaxSuffix, storeScope, false); else if (storeScope > 0) _settingService.DeleteSetting(taxSettings, x => x.DisplayTaxSuffix, storeScope); if (model.DisplayTaxRates_OverrideForStore || storeScope == 0) _settingService.SaveSetting(taxSettings, x => x.DisplayTaxRates, storeScope, false); else if (storeScope > 0) _settingService.DeleteSetting(taxSettings, x => x.DisplayTaxRates, storeScope); if (model.HideZeroTax_OverrideForStore || storeScope == 0) _settingService.SaveSetting(taxSettings, x => x.HideZeroTax, storeScope, false); else if (storeScope > 0) _settingService.DeleteSetting(taxSettings, x => x.HideZeroTax, storeScope); if (model.HideTaxInOrderSummary_OverrideForStore || storeScope == 0) _settingService.SaveSetting(taxSettings, x => x.HideTaxInOrderSummary, storeScope, false); else if (storeScope > 0) _settingService.DeleteSetting(taxSettings, x => x.HideTaxInOrderSummary, storeScope); if (model.ForceTaxExclusionFromOrderSubtotal_OverrideForStore || storeScope == 0) _settingService.SaveSetting(taxSettings, x => x.ForceTaxExclusionFromOrderSubtotal, storeScope, false); else if (storeScope > 0) _settingService.DeleteSetting(taxSettings, x => x.ForceTaxExclusionFromOrderSubtotal, storeScope); if (model.TaxBasedOn_OverrideForStore || storeScope == 0) _settingService.SaveSetting(taxSettings, x => x.TaxBasedOn, storeScope, false); else if (storeScope > 0) _settingService.DeleteSetting(taxSettings, x => x.TaxBasedOn, storeScope); if (model.DefaultTaxAddress_OverrideForStore || storeScope == 0) { //update address var addressId = _settingService.SettingExists(taxSettings, x => x.DefaultTaxAddressId, storeScope) ? taxSettings.DefaultTaxAddressId : 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.DefaultTaxAddress.Id = addressId; originAddress = model.DefaultTaxAddress.ToEntity(originAddress); if (originAddress.Id > 0) _addressService.UpdateAddress(originAddress); else _addressService.InsertAddress(originAddress); taxSettings.DefaultTaxAddressId = originAddress.Id; _settingService.SaveSetting(taxSettings, x => x.DefaultTaxAddressId, storeScope, false); } else if (storeScope > 0) _settingService.DeleteSetting(taxSettings, x => x.DefaultTaxAddressId, storeScope); if (model.ShippingIsTaxable_OverrideForStore || storeScope == 0) _settingService.SaveSetting(taxSettings, x => x.ShippingIsTaxable, storeScope, false); else if (storeScope > 0) _settingService.DeleteSetting(taxSettings, x => x.ShippingIsTaxable, storeScope); if (model.ShippingPriceIncludesTax_OverrideForStore || storeScope == 0) _settingService.SaveSetting(taxSettings, x => x.ShippingPriceIncludesTax, storeScope, false); else if (storeScope > 0) _settingService.DeleteSetting(taxSettings, x => x.ShippingPriceIncludesTax, storeScope); if (model.ShippingTaxClassId_OverrideForStore || storeScope == 0) _settingService.SaveSetting(taxSettings, x => x.ShippingTaxClassId, storeScope, false); else if (storeScope > 0) _settingService.DeleteSetting(taxSettings, x => x.ShippingTaxClassId, storeScope); if (model.PaymentMethodAdditionalFeeIsTaxable_OverrideForStore || storeScope == 0) _settingService.SaveSetting(taxSettings, x => x.PaymentMethodAdditionalFeeIsTaxable, storeScope, false); else if (storeScope > 0) _settingService.DeleteSetting(taxSettings, x => x.PaymentMethodAdditionalFeeIsTaxable, storeScope); if (model.PaymentMethodAdditionalFeeIncludesTax_OverrideForStore || storeScope == 0) _settingService.SaveSetting(taxSettings, x => x.PaymentMethodAdditionalFeeIncludesTax, storeScope, false); else if (storeScope > 0) _settingService.DeleteSetting(taxSettings, x => x.PaymentMethodAdditionalFeeIncludesTax, storeScope); if (model.PaymentMethodAdditionalFeeTaxClassId_OverrideForStore || storeScope == 0) _settingService.SaveSetting(taxSettings, x => x.PaymentMethodAdditionalFeeTaxClassId, storeScope, false); else if (storeScope > 0) _settingService.DeleteSetting(taxSettings, x => x.PaymentMethodAdditionalFeeTaxClassId, storeScope); if (model.EuVatEnabled_OverrideForStore || storeScope == 0) _settingService.SaveSetting(taxSettings, x => x.EuVatEnabled, storeScope, false); else if (storeScope > 0) _settingService.DeleteSetting(taxSettings, x => x.EuVatEnabled, storeScope); if (model.EuVatShopCountryId_OverrideForStore || storeScope == 0) _settingService.SaveSetting(taxSettings, x => x.EuVatShopCountryId, storeScope, false); else if (storeScope > 0) _settingService.DeleteSetting(taxSettings, x => x.EuVatShopCountryId, storeScope); if (model.EuVatAllowVatExemption_OverrideForStore || storeScope == 0) _settingService.SaveSetting(taxSettings, x => x.EuVatAllowVatExemption, storeScope, false); else if (storeScope > 0) _settingService.DeleteSetting(taxSettings, x => x.EuVatAllowVatExemption, storeScope); if (model.EuVatUseWebService_OverrideForStore || storeScope == 0) _settingService.SaveSetting(taxSettings, x => x.EuVatUseWebService, storeScope, false); else if (storeScope > 0) _settingService.DeleteSetting(taxSettings, x => x.EuVatUseWebService, storeScope); if (model.EuVatAssumeValid_OverrideForStore || storeScope == 0) _settingService.SaveSetting(taxSettings, x => x.EuVatAssumeValid, storeScope, false); else if (storeScope > 0) _settingService.DeleteSetting(taxSettings, x => x.EuVatAssumeValid, storeScope); if (model.EuVatEmailAdminWhenNewVatSubmitted_OverrideForStore || storeScope == 0) _settingService.SaveSetting(taxSettings, x => x.EuVatEmailAdminWhenNewVatSubmitted, storeScope, false); else if (storeScope > 0) _settingService.DeleteSetting(taxSettings, x => x.EuVatEmailAdminWhenNewVatSubmitted, storeScope); //now clear settings cache _settingService.ClearCache(); //activity log _customerActivityService.InsertActivity("EditSettings", _localizationService.GetResource("ActivityLog.EditSettings")); SuccessNotification(_localizationService.GetResource("Admin.Configuration.Updated")); return RedirectToAction("Tax"); }