protected virtual void PrepareGroupdealViewModel(GroupDealViewModel model, Product product, bool setPredefinedValues, bool excludeProperties) { if (model == null) throw new ArgumentNullException("model"); if (product != null) { var parentGroupedProduct = _productService.GetProductById(product.ParentGroupedProductId); if (parentGroupedProduct != null) { model.AssociatedToProductId = product.ParentGroupedProductId; model.AssociatedToProductName = parentGroupedProduct.Name; } } model.PrimaryStoreCurrencyCode = _currencyService.GetCurrencyById(_currencySettings.PrimaryStoreCurrencyId).CurrencyCode; model.BaseWeightIn = _measureService.GetMeasureWeightById(_measureSettings.BaseWeightId).Name; model.BaseDimensionIn = _measureService.GetMeasureDimensionById(_measureSettings.BaseDimensionId).Name; if (product != null) { model.CreatedOn = _dateTimeHelper.ConvertToUserTime(product.CreatedOnUtc, DateTimeKind.Utc); model.UpdatedOn = _dateTimeHelper.ConvertToUserTime(product.UpdatedOnUtc, DateTimeKind.Utc); } //little performance hack here //there's no need to load attributes, categories, manufacturers when creating a new product //anyway they're not used (you need to save a product before you map add them) if (product != null) { foreach (var productAttribute in _productAttributeService.GetAllProductAttributes()) { model.AvailableProductAttributes.Add(new SelectListItem { Text = productAttribute.Name, Value = productAttribute.Id.ToString() }); } foreach (var manufacturer in _manufacturerService.GetAllManufacturers(showHidden: true)) { model.AvailableManufacturers.Add(new SelectListItem { Text = manufacturer.Name, Value = manufacturer.Id.ToString() }); } var allCategories = _categoryService.GetAllCategories(showHidden: true); foreach (var category in allCategories) { model.AvailableCategories.Add(new SelectListItem { Text = category.GetFormattedBreadCrumb(allCategories), Value = category.Id.ToString() }); } } //copy product if (product != null) { model.CopyProductModel.Id = product.Id; model.CopyProductModel.Name = "Copy of " + product.Name; model.CopyProductModel.Published = true; model.CopyProductModel.CopyImages = true; } //templates var templates = _productTemplateService.GetAllProductTemplates(); foreach (var template in templates) { model.AvailableProductTemplates.Add(new SelectListItem { Text = template.Name, Value = template.Id.ToString() }); } //vendors model.IsLoggedInAsVendor = _workContext.CurrentVendor != null; model.AvailableVendors.Add(new SelectListItem { Text = _localizationService.GetResource("Admin.Catalog.Products.Fields.Vendor.None"), Value = "0" }); var vendors = _vendorService.GetAllVendors(showHidden: true); foreach (var vendor in vendors) { model.AvailableVendors.Add(new SelectListItem { Text = vendor.Name, Value = vendor.Id.ToString() }); } //delivery dates model.AvailableDeliveryDates.Add(new SelectListItem { Text = _localizationService.GetResource("Admin.Catalog.Products.Fields.DeliveryDate.None"), Value = "0" }); var deliveryDates = _shippingService.GetAllDeliveryDates(); foreach (var deliveryDate in deliveryDates) { model.AvailableDeliveryDates.Add(new SelectListItem { Text = deliveryDate.Name, Value = deliveryDate.Id.ToString() }); } //warehouses var warehouses = _shippingService.GetAllWarehouses(); model.AvailableWarehouses.Add(new SelectListItem { Text = _localizationService.GetResource("Admin.Catalog.Products.Fields.Warehouse.None"), Value = "0" }); foreach (var warehouse in warehouses) { model.AvailableWarehouses.Add(new SelectListItem { Text = warehouse.Name, Value = warehouse.Id.ToString() }); } //multiple warehouses foreach (var warehouse in warehouses) { var pwiModel = new GroupDealViewModel.ProductWarehouseInventoryModel { WarehouseId = warehouse.Id, WarehouseName = warehouse.Name }; if (product != null) { var pwi = product.ProductWarehouseInventory.FirstOrDefault(x => x.WarehouseId == warehouse.Id); if (pwi != null) { pwiModel.WarehouseUsed = true; pwiModel.StockQuantity = pwi.StockQuantity; pwiModel.ReservedQuantity = pwi.ReservedQuantity; pwiModel.PlannedQuantity = _shipmentService.GetQuantityInShipments(product, pwi.WarehouseId, true, true); } } model.ProductWarehouseInventoryModels.Add(pwiModel); } //product tags if (product != null) { var result = new StringBuilder(); for (int i = 0; i < product.ProductTags.Count; i++) { var pt = product.ProductTags.ToList()[i]; result.Append(pt.Name); if (i != product.ProductTags.Count - 1) result.Append(", "); } model.ProductTags = result.ToString(); } //tax categories var taxCategories = _taxCategoryService.GetAllTaxCategories(); model.AvailableTaxCategories.Add(new SelectListItem { Text = "---", Value = "0" }); foreach (var tc in taxCategories) model.AvailableTaxCategories.Add(new SelectListItem { Text = tc.Name, Value = tc.Id.ToString(), Selected = product != null && !setPredefinedValues && tc.Id == product.TaxCategoryId }); //baseprice units var measureWeights = _measureService.GetAllMeasureWeights(); foreach (var mw in measureWeights) model.AvailableBasepriceUnits.Add(new SelectListItem { Text = mw.Name, Value = mw.Id.ToString(), Selected = product != null && !setPredefinedValues && mw.Id == product.BasepriceUnitId }); foreach (var mw in measureWeights) model.AvailableBasepriceBaseUnits.Add(new SelectListItem { Text = mw.Name, Value = mw.Id.ToString(), Selected = product != null && !setPredefinedValues && mw.Id == product.BasepriceBaseUnitId }); //specification attributes var specificationAttributes = _specificationAttributeService.GetSpecificationAttributes(); for (int i = 0; i < specificationAttributes.Count; i++) { var sa = specificationAttributes[i]; model.AddSpecificationAttributeModel.AvailableAttributes.Add(new SelectListItem { Text = sa.Name, Value = sa.Id.ToString() }); if (i == 0) { //attribute options foreach (var sao in _specificationAttributeService.GetSpecificationAttributeOptionsBySpecificationAttribute(sa.Id)) model.AddSpecificationAttributeModel.AvailableOptions.Add(new SelectListItem { Text = sao.Name, Value = sao.Id.ToString() }); } } //default specs values model.AddSpecificationAttributeModel.ShowOnProductPage = true; //discounts model.AvailableDiscounts = _discountService .GetAllDiscounts(DiscountType.AssignedToSkus, showHidden: true) .Select(d => d.ToModel()) .ToList(); if (!excludeProperties && product != null) { model.SelectedDiscountIds = product.AppliedDiscounts.Select(d => d.Id).ToArray(); } //default values if (setPredefinedValues) { model.MaximumCustomerEnteredPrice = 1000; model.MaxNumberOfDownloads = 10; model.RecurringCycleLength = 100; model.RecurringTotalCycles = 10; model.RentalPriceLength = 1; model.StockQuantity = 10000; model.NotifyAdminForQuantityBelow = 1; model.OrderMinimumQuantity = 1; model.OrderMaximumQuantity = 10000; model.UnlimitedDownloads = true; model.IsShipEnabled = true; model.AllowCustomerReviews = true; model.Published = true; model.VisibleIndividually = true; } }
public ActionResult Create(GroupDealViewModel model) { //if (!_permissionService.Authorize(StandardPermissionProvider.ManageProducts)) // return AccessDeniedView(); if (ModelState.IsValid) { //a vendor should have access only to his products if (_workContext.CurrentVendor != null) { model.VendorId = _workContext.CurrentVendor.Id; } //vendors cannot edit "Show on home page" property if (_workContext.CurrentVendor != null && model.ShowOnHomePage) { model.ShowOnHomePage = false; } //var groupDeal = new ModelsMapper().CreateMap<GroupDealViewModel, GroupDeal>(model); var groupDealProduct = new ModelsMapper().CreateMap<GroupDealViewModel, Product>(model); groupDealProduct.DisplayOrder = 1; groupDealProduct.ProductType = ProductType.SimpleProduct; groupDealProduct.OrderMaximumQuantity = 10; groupDealProduct.OrderMinimumQuantity = 1; groupDealProduct.Published = true; // datetime fields groupDealProduct.CreatedOnUtc = DateTime.UtcNow; groupDealProduct.UpdatedOnUtc = DateTime.UtcNow; groupDealProduct.AvailableEndDateTimeUtc = DateTime.Parse("01/01/2016"); groupDealProduct.AvailableStartDateTimeUtc = DateTime.UtcNow; groupDealProduct.PreOrderAvailabilityStartDateTimeUtc = DateTime.UtcNow; groupDealProduct.SpecialPriceStartDateTimeUtc = DateTime.UtcNow; groupDealProduct.SpecialPriceEndDateTimeUtc = DateTime.Parse("01/01/2016"); //_groupdealService.InsertGroupDeal(groupDeal); _productService.InsertProduct(groupDealProduct); //search engine name model.SeName = groupDealProduct.ValidateSeName(model.SeName, groupDealProduct.Name, true); _urlRecordService.SaveSlug(groupDealProduct, model.SeName, 0); groupDealProduct.SetIsGroupDeal(true); _genericAttributeService.SaveAttribute(groupDealProduct, GroupDealAttributes.Active, true); _genericAttributeService.SaveAttribute(groupDealProduct, GroupDealAttributes.FinePrint, model.FinePrint); return RedirectToAction("Index", new { area = "Admin" }); } return View("CreateGroupdeal", model); }
public ActionResult Edit(GroupDealViewModel model, bool continueEditing) { var groupDeal = _productService.GetProductById(model.Id); if (groupDeal == null || groupDeal.Deleted) //No product found with the specified id return RedirectToAction("Index", new { area = "Admin" }); //a vendor should have access only to his products if (_workContext.CurrentVendor != null && groupDeal.VendorId != _workContext.CurrentVendor.Id) return RedirectToAction("Index", new { area = "Admin" }); if (ModelState.IsValid) { //a vendor should have access only to his products if (_workContext.CurrentVendor != null) { model.VendorId = _workContext.CurrentVendor.Id; } //vendors cannot edit "Show on home page" property if (_workContext.CurrentVendor != null && model.ShowOnHomePage != groupDeal.ShowOnHomePage) { model.ShowOnHomePage = groupDeal.ShowOnHomePage; } var prevStockQuantity = groupDeal.GetTotalStockQuantity(); //groupdeal //groupdeal = model.ToEntity(groupdeal); model.CreatedOn = groupDeal.CreatedOnUtc; groupDeal = new ModelsMapper().CreateMap<GroupDealViewModel, Product>(model, groupDeal); groupDeal.UpdatedOnUtc = DateTime.UtcNow; _productService.UpdateProduct(groupDeal); //search engine name model.SeName = groupDeal.ValidateSeName(model.SeName, "groupdeal.Name", true); _urlRecordService.SaveSlug(groupDeal, model.SeName, 0); ////locales //UpdateLocales(groupdeal, model); ////tags //SaveProductTags(groupdeal, ParseProductTags(model.ProductTags)); ////warehouses //SaveProductWarehouseInventory(groupdeal, model); ////ACL (customer roles) //SaveProductAcl(groupdeal, model); ////Stores //SaveStoreMappings(groupdeal, model); ////picture seo names //UpdatePictureSeoNames(groupdeal); ////discounts //var allDiscounts = _discountService.GetAllDiscounts(DiscountType.AssignedToSkus, showHidden: true); //foreach (var discount in allDiscounts) //{ // if (model.SelectedDiscountIds != null && model.SelectedDiscountIds.Contains(discount.Id)) // { // //new discount // if (groupdeal.AppliedDiscounts.Count(d => d.Id == discount.Id) == 0) // groupdeal.AppliedDiscounts.Add(discount); // } // else // { // //remove discount // if (groupdeal.AppliedDiscounts.Count(d => d.Id == discount.Id) > 0) // groupdeal.AppliedDiscounts.Remove(discount); // } //} //_productService.UpdateProduct(groupdeal); //_productService.UpdateHasDiscountsApplied(groupdeal); ////back in stock notifications //if (groupdeal.ManageInventoryMethod == ManageInventoryMethod.ManageStock && // groupdeal.BackorderMode == BackorderMode.NoBackorders && // groupdeal.AllowBackInStockSubscriptions && // groupdeal.GetTotalStockQuantity() > 0 && // prevStockQuantity <= 0 && // groupdeal.Published && // !groupdeal.Deleted) //{ // _backInStockSubscriptionService.SendNotificationsToSubscribers(groupdeal); //} ////activity log //_customerActivityService.InsertActivity("EditProduct", _localizationService.GetResource("ActivityLog.EditProduct"), groupdeal.Name); //SuccessNotification(_localizationService.GetResource("Admin.Catalog.Products.Updated")); if (continueEditing) { //selected tab //SaveSelectedTabIndex(); return RedirectToAction("Edit", new { id = groupDeal.Id, area = "Admin" }); } return RedirectToAction("Index", new { area = "Admin" }); } //If we got this far, something failed, redisplay form //PrepareProductModel(model, groupdeal, false, true); //PrepareAclModel(model, groupdeal, true); //PrepareStoresMappingModel(model, groupdeal, true); return View("EditGroupDeal", model); }
public ActionResult Create() { var model = new GroupDealViewModel(); /* var vendors = _vendorService.GetAllVendors(); model.AvailableVendors = new List<SelectListItem>(); foreach (var vendor in vendors) { model.AvailableVendors.Add(new SelectListItem { Text = vendor.Name, Value = vendor.Id.ToString() }); } */ PrepareGroupdealViewModel(model, null, true, true); return View("CreateGroupdeal", model); }
public ActionResult Index() { var gdvm = new GroupDealViewModel(); var area = ControllerContext.RouteData.Values["area"]; if (area.ToString().ToLower() == "vendor") { if (_workContext.CurrentVendor != null) gdvm.IsLoggedInAsVendor = true; } else { if (_workContext.CurrentVendor != null) gdvm.IsLoggedInAsVendor = false; } return RedirectToAction("List", new { area = "Admin" }); }