예제 #1
0
        public async Task <IActionResult> Shipping(int storeScope, ShippingSettings settings)
        {
            var store = storeScope == 0 ? Services.StoreContext.CurrentStore : Services.StoreContext.GetStoreById(storeScope);
            var model = await MapperFactory.MapAsync <ShippingSettings, ShippingSettingsModel>(settings);

            model.PrimaryStoreCurrencyCode = store.PrimaryStoreCurrency.CurrencyCode;

            var todayShipmentHours = new List <SelectListItem>();

            for (var i = 1; i <= 24; ++i)
            {
                var hourStr = i.ToString();
                todayShipmentHours.Add(new SelectListItem
                {
                    Text     = hourStr,
                    Value    = hourStr,
                    Selected = settings.TodayShipmentHour == i
                });
            }

            ViewBag.TodayShipmentHours = todayShipmentHours;

            await _storeDependingSettingHelper.GetOverrideKeysAsync(settings, model, storeScope);

            // Shipping origin
            if (storeScope > 0 && await Services.Settings.SettingExistsAsync(settings, x => x.ShippingOriginAddressId, storeScope))
            {
                _storeDependingSettingHelper.AddOverrideKey(settings, "ShippingOriginAddress");
            }

            var originAddress = settings.ShippingOriginAddressId > 0
                ? await _db.Addresses.FindByIdAsync(settings.ShippingOriginAddressId, false)
                : null;

            if (originAddress != null)
            {
                MiniMapper.Map(originAddress, model.ShippingOriginAddress);
            }

            var countries = await _db.Countries
                            .AsNoTracking()
                            .Include(x => x.StateProvinces.OrderBy(x => x.DisplayOrder))
                            .ApplyStandardFilter(true)
                            .ToListAsync();

            foreach (var c in countries)
            {
                model.ShippingOriginAddress.AvailableCountries.Add(
                    new SelectListItem {
                    Text = c.Name, Value = c.Id.ToString(), Selected = (originAddress != null && c.Id == originAddress.CountryId)
                }
                    );
            }

            var states = originAddress != null && originAddress.Country != null
                ? countries.FirstOrDefault(x => x.Id == originAddress.Country.Id).StateProvinces.ToList()
                : new List <StateProvince>();

            if (states.Count > 0)
            {
                foreach (var s in states)
                {
                    model.ShippingOriginAddress.AvailableStates.Add(
                        new SelectListItem {
                        Text = s.Name, Value = s.Id.ToString(), Selected = (s.Id == originAddress.StateProvinceId)
                    }
                        );
                }
            }
            else
            {
                model.ShippingOriginAddress.AvailableStates.Add(new SelectListItem {
                    Text = T("Admin.Address.OtherNonUS"), Value = "0"
                });
            }

            model.ShippingOriginAddress.CountryEnabled        = true;
            model.ShippingOriginAddress.StateProvinceEnabled  = true;
            model.ShippingOriginAddress.ZipPostalCodeEnabled  = true;
            model.ShippingOriginAddress.ZipPostalCodeRequired = true;

            return(View(model));
        }