public ActionResult CreateIB() { if (!_permissionService.Authorize(StandardPermissionProvider.ManageProducts)) return AccessDeniedView(); var model = new ProductModel(); PrepareProductModel(model, null, true, true); AddLocales(_languageService, model.Locales); PrepareAclModel(model, null, false); PrepareStoresMappingModel(model, null, false); return View(model); }
public ActionResult CreateIB() { if (!_permissionService.Authorize(StandardPermissionProvider.ManageProducts)) return AccessDeniedView(); var model = new ProductModel(); PrepareProductModel(model, null, true, true); AddLocales(_languageService, model.Locales); PrepareAclModel(model, null, false); PrepareStoresMappingModel(model, null, false); var styles = _customDataService.GetCustomDataByKeyGroup(CustomDataKeyGroupNames.Style); var materials = _customDataService.GetCustomDataByKeyGroup(CustomDataKeyGroupNames.Material); model.Styles = (from st in styles select new SelectListItem { Text = st.Value, Value = st.Key }).OrderBy(v => v.Value).ToList(); model.Materials = (from cd in materials select new SelectListItem { Text = cd.Value, Value = cd.Key }).OrderBy(v => v.Value).ToList(); var categoriesModel = new List<CategoryModel>(); //all categories var allCategories = _categoryService.GetAllCategories(); foreach (var c in allCategories) { //generate full category name (breadcrumb) string categoryBreadcrumb = ""; var breadcrumb = c.GetCategoryBreadCrumb(allCategories, _aclService, _storeMappingService); for (int i = 0; i <= breadcrumb.Count - 1; i++) { categoryBreadcrumb += breadcrumb[i].GetLocalized(x => x.Name); if (i != breadcrumb.Count - 1) categoryBreadcrumb += " >> "; } categoriesModel.Add(new CategoryModel { Id = c.Id, Breadcrumb = categoryBreadcrumb }); } model.AvailableCategories = categoriesModel.OrderBy(v => v.Breadcrumb).Select(c=> new SelectListItem { Text = c.Breadcrumb, Value = c.Id.ToString() }).ToList(); if (_workContext.CurrentVendor!=null) model.VendorId = _workContext.CurrentVendor.Id; return View(model); }
public override void OnActionExecuting(ActionExecutingContext filterContext) { base.OnActionExecuting(filterContext); if ((filterContext.RouteData.Values["controller"].ToString() == "Home") && filterContext.RouteData.Values["action"].ToString() == "Index" && filterContext.RouteData.Values["area"] == null) { string host = (((System.Web.HttpRequestWrapper)((System.Web.HttpContextWrapper)filterContext.RequestContext.HttpContext).Request).Url).Host; if (host.Split('.')[0] == "jobs") { ProductModel viewModel = new ProductModel(); //Here set all the properties of your viewModel such as your exception message filterContext.Controller.ViewData.Model = viewModel; filterContext.Result = new ViewResult { ViewName = "Login", ViewData = new ViewDataDictionary(viewModel) }; //filterContext.ExceptionHandled = true; } } // Create object parameter. //filterContext.ActionParameters["person"] = new Person("John", "Smith"); //_vendorService = EngineContext.Current.Resolve<IIndVendorService>(); //HttpCookie vendor_email_cookie = filterContext.HttpContext.Request.Cookies.Get("current_vendor_email"); //HttpCookie vendor_password_cookie = filterContext.HttpContext.Request.Cookies.Get("current_vendor_password"); //if (!_vendorService.LoginCookiesAreValid(vendor_email_cookie, vendor_password_cookie)) //{ // RedirectToLoginPage(filterContext); //} //else //{ // if (!_vendorService.IsVendorAuthenticated(vendor_email_cookie.Value, vendor_password_cookie.Value)) // { // RedirectToLoginPage(filterContext); // } // else // { // filterContext.Controller.ViewBag.CurrentVendorEmail = vendor_email_cookie.Value; // } //} }
public ActionResult CrossSellProductAddPopup(string btnId, string formId, ProductModel.AddCrossSellProductModel model) { if (!_permissionService.Authorize(StandardPermissionProvider.ManageProducts)) return AccessDeniedView(); if (model.SelectedProductIds != null) { foreach (int id in model.SelectedProductIds) { var product = _productService.GetProductById(id); if (product != null) { //a vendor should have access only to his products if (_workContext.CurrentVendor != null && product.VendorId != _workContext.CurrentVendor.Id) continue; var existingCrossSellProducts = _productService.GetCrossSellProductsByProductId1(model.ProductId); if (existingCrossSellProducts.FindCrossSellProduct(model.ProductId, id) == null) { _productService.InsertCrossSellProduct( new CrossSellProduct { ProductId1 = model.ProductId, ProductId2 = id, }); } } } } //a vendor should have access only to his products model.IsLoggedInAsVendor = _workContext.CurrentVendor != null; ViewBag.RefreshPage = true; ViewBag.btnId = btnId; ViewBag.formId = formId; return View(model); }
public ActionResult CopyProduct(ProductModel model) { if (!_permissionService.Authorize(StandardPermissionProvider.ManageProducts)) return AccessDeniedView(); var copyModel = model.CopyProductModel; try { var originalProduct = _productService.GetProductById(copyModel.Id); //a vendor should have access only to his products if (_workContext.CurrentVendor != null && originalProduct.VendorId != _workContext.CurrentVendor.Id) return RedirectToAction("List"); var newProduct = _copyProductService.CopyProduct(originalProduct, copyModel.Name, copyModel.Published, copyModel.CopyImages); SuccessNotification("The product has been copied successfully"); return RedirectToAction("Edit", new { id = newProduct.Id }); } catch (Exception exc) { ErrorNotification(exc.Message); return RedirectToAction("Edit", new { id = copyModel.Id }); } }
public ActionResult AssociatedProductUpdate(ProductModel.AssociatedProductModel model) { if (!_permissionService.Authorize(StandardPermissionProvider.ManageProducts)) return AccessDeniedView(); var associatedProduct = _productService.GetProductById(model.Id); if (associatedProduct == null) throw new ArgumentException("No associated product found with the specified id"); //a vendor should have access only to his products if (_workContext.CurrentVendor != null && associatedProduct.VendorId != _workContext.CurrentVendor.Id) { return Content("This is not your product"); } associatedProduct.DisplayOrder = model.DisplayOrder; _productService.UpdateProduct(associatedProduct); return new NullJsonResult(); }
protected virtual void UpdateLocales(ProductAttributeValue pav, ProductModel.ProductAttributeValueModel model) { foreach (var localized in model.Locales) { _localizedEntityService.SaveLocalizedValue(pav, x => x.Name, localized.Name, localized.LanguageId); } }
protected virtual void UpdateLocales(Product product, ProductModel model) { foreach (var localized in model.Locales) { _localizedEntityService.SaveLocalizedValue(product, x => x.Name, localized.Name, localized.LanguageId); _localizedEntityService.SaveLocalizedValue(product, x => x.ShortDescription, localized.ShortDescription, localized.LanguageId); _localizedEntityService.SaveLocalizedValue(product, x => x.FullDescription, localized.FullDescription, localized.LanguageId); _localizedEntityService.SaveLocalizedValue(product, x => x.MetaKeywords, localized.MetaKeywords, localized.LanguageId); _localizedEntityService.SaveLocalizedValue(product, x => x.MetaDescription, localized.MetaDescription, localized.LanguageId); _localizedEntityService.SaveLocalizedValue(product, x => x.MetaTitle, localized.MetaTitle, localized.LanguageId); //search engine name var seName = product.ValidateSeName(localized.SeName, localized.Name, false); _urlRecordService.SaveSlug(product, seName, localized.LanguageId); } }
protected virtual void SaveProductWarehouseInventory(Product product, ProductModel model) { if (product == null) throw new ArgumentNullException("product"); if (model.ManageInventoryMethodId != (int)ManageInventoryMethod.ManageStock) return; if (!model.UseMultipleWarehouses) return; var warehouses = _shippingService.GetAllWarehouses(); foreach (var warehouse in warehouses) { //parse stock quantity int stockQuantity = 0; foreach (string formKey in this.Request.Form.AllKeys) if (formKey.Equals(string.Format("warehouse_qty_{0}", warehouse.Id), StringComparison.InvariantCultureIgnoreCase)) { int.TryParse(this.Request.Form[formKey], out stockQuantity); break; } //parse reserved quantity int reservedQuantity = 0; foreach (string formKey in this.Request.Form.AllKeys) if (formKey.Equals(string.Format("warehouse_reserved_{0}", warehouse.Id), StringComparison.InvariantCultureIgnoreCase)) { int.TryParse(this.Request.Form[formKey], out reservedQuantity); break; } //parse "used" field bool used = false; foreach (string formKey in this.Request.Form.AllKeys) if (formKey.Equals(string.Format("warehouse_used_{0}", warehouse.Id), StringComparison.InvariantCultureIgnoreCase)) { int tmp; int.TryParse(this.Request.Form[formKey], out tmp); used = tmp == warehouse.Id; break; } var existingPwI = product.ProductWarehouseInventory.FirstOrDefault(x => x.WarehouseId == warehouse.Id); if (existingPwI != null) { if (used) { //update existing record existingPwI.StockQuantity = stockQuantity; existingPwI.ReservedQuantity = reservedQuantity; _productService.UpdateProduct(product); } else { //delete. no need to store record for qty 0 _productService.DeleteProductWarehouseInventory(existingPwI); } } else { if (used) { //no need to insert a record for qty 0 existingPwI = new ProductWarehouseInventory { WarehouseId = warehouse.Id, ProductId = product.Id, StockQuantity = stockQuantity, ReservedQuantity = reservedQuantity }; product.ProductWarehouseInventory.Add(existingPwI); _productService.UpdateProduct(product); } } } }
public ActionResult ProductAttributeValidationRulesPopup(string btnId, string formId, ProductModel.ProductAttributeMappingModel model) { if (!_permissionService.Authorize(StandardPermissionProvider.ManageProducts)) return AccessDeniedView(); var productAttributeMapping = _productAttributeService.GetProductAttributeMappingById(model.Id); if (productAttributeMapping == null) //No attribute value found with the specified id return RedirectToAction("List", "Product"); var product = _productService.GetProductById(productAttributeMapping.ProductId); if (product == null) throw new ArgumentException("No product found with the specified id"); //a vendor should have access only to his products if (_workContext.CurrentVendor != null && product.VendorId != _workContext.CurrentVendor.Id) return RedirectToAction("List", "Product"); if (ModelState.IsValid) { productAttributeMapping.ValidationMinLength = model.ValidationMinLength; productAttributeMapping.ValidationMaxLength = model.ValidationMaxLength; productAttributeMapping.ValidationFileAllowedExtensions = model.ValidationFileAllowedExtensions; productAttributeMapping.ValidationFileMaximumSize = model.ValidationFileMaximumSize; productAttributeMapping.DefaultValue = model.DefaultValue; _productAttributeService.UpdateProductAttributeMapping(productAttributeMapping); ViewBag.RefreshPage = true; ViewBag.btnId = btnId; ViewBag.formId = formId; return View(model); } //If we got this far, something failed, redisplay form model.ValidationRulesAllowed = productAttributeMapping.ValidationRulesAllowed(); model.AttributeControlTypeId = productAttributeMapping.AttributeControlTypeId; return View(model); }
public ActionResult ProductAttributeMappingUpdate(ProductModel.ProductAttributeMappingModel model) { if (!_permissionService.Authorize(StandardPermissionProvider.ManageProducts)) return AccessDeniedView(); var productAttributeMapping = _productAttributeService.GetProductAttributeMappingById(model.Id); if (productAttributeMapping == null) throw new ArgumentException("No product attribute mapping found with the specified id"); var product = _productService.GetProductById(productAttributeMapping.ProductId); if (product == null) throw new ArgumentException("No product found with the specified id"); //a vendor should have access only to his products if (_workContext.CurrentVendor != null && product.VendorId != _workContext.CurrentVendor.Id) return Content("This is not your product"); productAttributeMapping.ProductAttributeId = model.ProductAttributeId; productAttributeMapping.TextPrompt = model.TextPrompt; productAttributeMapping.IsRequired = model.IsRequired; productAttributeMapping.AttributeControlTypeId = model.AttributeControlTypeId; productAttributeMapping.DisplayOrder = model.DisplayOrder; _productAttributeService.UpdateProductAttributeMapping(productAttributeMapping); return new NullJsonResult(); }
public ActionResult ProductAttributeMappingInsert(ProductModel.ProductAttributeMappingModel model) { if (!_permissionService.Authorize(StandardPermissionProvider.ManageProducts)) return AccessDeniedView(); var product = _productService.GetProductById(model.ProductId); if (product == null) throw new ArgumentException("No product found with the specified id"); //a vendor should have access only to his products if (_workContext.CurrentVendor != null && product.VendorId != _workContext.CurrentVendor.Id) { return Content("This is not your product"); } //insert mapping var productAttributeMapping = new ProductAttributeMapping { ProductId = model.ProductId, ProductAttributeId = model.ProductAttributeId, TextPrompt = model.TextPrompt, IsRequired = model.IsRequired, AttributeControlTypeId = model.AttributeControlTypeId, DisplayOrder = model.DisplayOrder }; _productAttributeService.InsertProductAttributeMapping(productAttributeMapping); //predefined values var predefinedValues = _productAttributeService.GetPredefinedProductAttributeValues(model.ProductAttributeId); foreach (var predefinedValue in predefinedValues) { var pav = new ProductAttributeValue { ProductAttributeMappingId = productAttributeMapping.Id, AttributeValueType = AttributeValueType.Simple, Name = predefinedValue.Name, PriceAdjustment = predefinedValue.PriceAdjustment, WeightAdjustment = predefinedValue.WeightAdjustment, Cost = predefinedValue.Cost, IsPreSelected = predefinedValue.IsPreSelected, DisplayOrder = predefinedValue.DisplayOrder }; _productAttributeService.InsertProductAttributeValue(pav); //locales var languages = _languageService.GetAllLanguages(true); //localization foreach (var lang in languages) { var name = predefinedValue.GetLocalized(x => x.Name, lang.Id, false, false); if (!String.IsNullOrEmpty(name)) _localizedEntityService.SaveLocalizedValue(pav, x => x.Name, name, lang.Id); } } return new NullJsonResult(); }
public ActionResult ProductAttributeCombinationUpdate(ProductModel.ProductAttributeCombinationModel model) { if (!_permissionService.Authorize(StandardPermissionProvider.ManageProducts)) return AccessDeniedView(); var combination = _productAttributeService.GetProductAttributeCombinationById(model.Id); if (combination == null) throw new ArgumentException("No product attribute combination found with the specified id"); var product = _productService.GetProductById(combination.ProductId); if (product == null) throw new ArgumentException("No product found with the specified id"); //a vendor should have access only to his products if (_workContext.CurrentVendor != null && product.VendorId != _workContext.CurrentVendor.Id) return Content("This is not your product"); combination.StockQuantity = model.StockQuantity; combination.AllowOutOfStockOrders = model.AllowOutOfStockOrders; combination.Sku = model.Sku; combination.ManufacturerPartNumber = model.ManufacturerPartNumber; combination.Gtin = model.Gtin; combination.OverriddenPrice = model.OverriddenPrice; combination.NotifyAdminForQuantityBelow = model.NotifyAdminForQuantityBelow; _productAttributeService.UpdateProductAttributeCombination(combination); return new NullJsonResult(); }
public ActionResult Edit(ProductModel model, bool continueEditing) { if (!_permissionService.Authorize(StandardPermissionProvider.ManageProducts)) return AccessDeniedView(); var product = _productService.GetProductById(model.Id); if (product == null || product.Deleted) //No product found with the specified id return RedirectToAction("List"); //a vendor should have access only to his products if (_workContext.CurrentVendor != null && product.VendorId != _workContext.CurrentVendor.Id) return RedirectToAction("List"); 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 != product.ShowOnHomePage) { model.ShowOnHomePage = product.ShowOnHomePage; } var prevStockQuantity = product.GetTotalStockQuantity(); //product product = model.ToEntity(product); product.UpdatedOnUtc = DateTime.UtcNow; product.ProductObservations = model.ProductObservation; _productService.UpdateProduct(product); //search engine name model.SeName = product.ValidateSeName(model.SeName, product.Name, true); _urlRecordService.SaveSlug(product, model.SeName, 0); //locales UpdateLocales(product, model); //tags SaveProductTags(product, ParseProductTags(model.ProductTags)); //warehouses SaveProductWarehouseInventory(product, model); //ACL (customer roles) SaveProductAcl(product, model); //Stores SaveStoreMappings(product, model); //picture seo names UpdatePictureSeoNames(product); //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 (product.AppliedDiscounts.Count(d => d.Id == discount.Id) == 0) product.AppliedDiscounts.Add(discount); } else { //remove discount if (product.AppliedDiscounts.Count(d => d.Id == discount.Id) > 0) product.AppliedDiscounts.Remove(discount); } } _productService.UpdateProduct(product); _productService.UpdateHasDiscountsApplied(product); //back in stock notifications if (product.ManageInventoryMethod == ManageInventoryMethod.ManageStock && product.BackorderMode == BackorderMode.NoBackorders && product.AllowBackInStockSubscriptions && product.GetTotalStockQuantity() > 0 && prevStockQuantity <= 0 && product.Published && !product.Deleted) { _backInStockSubscriptionService.SendNotificationsToSubscribers(product); } //activity log _customerActivityService.InsertActivity("EditProduct", _localizationService.GetResource("ActivityLog.EditProduct"), product.Name); SuccessNotification(_localizationService.GetResource("Admin.Catalog.Products.Updated")); if (continueEditing) { //selected tab SaveSelectedTabIndex(); return RedirectToAction("Edit", new {id = product.Id}); } return RedirectToAction("List"); } //If we got this far, something failed, redisplay form PrepareProductModel(model, product, false, true); PrepareAclModel(model, product, true); PrepareStoresMappingModel(model, product, true); return View(model); }
//create product public ActionResult Create() { if (!_permissionService.Authorize(StandardPermissionProvider.ManageProducts)) return AccessDeniedView(); var model = new ProductModel(); PrepareProductModel(model, null, true, true); AddLocales(_languageService, model.Locales); PrepareAclModel(model, null, false); PrepareStoresMappingModel(model, null, false); var styles = _customDataService.GetCustomDataByKeyGroup(CustomDataKeyGroupNames.Style); var materials = _customDataService.GetCustomDataByKeyGroup(CustomDataKeyGroupNames.Material); model.Styles = (from st in styles select new SelectListItem { Text = st.Value, Value = st.Key }).ToList(); model.Materials = (from cd in materials select new SelectListItem { Text = cd.Value, Value = cd.Key }).ToList(); return View(model); }
protected virtual void PrepareStoresMappingModel(ProductModel model, Product product, bool excludeProperties) { if (model == null) throw new ArgumentNullException("model"); model.AvailableStores = _storeService .GetAllStores() .Select(s => s.ToModel()) .ToList(); if (!excludeProperties) { if (product != null) { model.SelectedStoreIds = _storeMappingService.GetStoresIdsWithAccess(product); } } }
protected virtual void SaveProductAcl(Product product, ProductModel model) { var existingAclRecords = _aclService.GetAclRecords(product); var allCustomerRoles = _customerService.GetAllCustomerRoles(true); foreach (var customerRole in allCustomerRoles) { if (model.SelectedCustomerRoleIds != null && model.SelectedCustomerRoleIds.Contains(customerRole.Id)) { //new role if (existingAclRecords.Count(acl => acl.CustomerRoleId == customerRole.Id) == 0) _aclService.InsertAclRecord(product, customerRole.Id); } else { //remove role var aclRecordToDelete = existingAclRecords.FirstOrDefault(acl => acl.CustomerRoleId == customerRole.Id); if (aclRecordToDelete != null) _aclService.DeleteAclRecord(aclRecordToDelete); } } }
public ActionResult ProductAttributeValueEditPopup(string btnId, string formId, ProductModel.ProductAttributeValueModel model) { if (!_permissionService.Authorize(StandardPermissionProvider.ManageProducts)) return AccessDeniedView(); var pav = _productAttributeService.GetProductAttributeValueById(model.Id); if (pav == null) //No attribute value found with the specified id return RedirectToAction("List", "Product"); var product = _productService.GetProductById(pav.ProductAttributeMapping.ProductId); if (product == null) throw new ArgumentException("No product found with the specified id"); //a vendor should have access only to his products if (_workContext.CurrentVendor != null && product.VendorId != _workContext.CurrentVendor.Id) return RedirectToAction("List", "Product"); if (pav.ProductAttributeMapping.AttributeControlType == AttributeControlType.ColorSquares) { //ensure valid color is chosen/entered if (String.IsNullOrEmpty(model.ColorSquaresRgb)) ModelState.AddModelError("", "Color is required"); try { //ensure color is valid (can be instanciated) System.Drawing.ColorTranslator.FromHtml(model.ColorSquaresRgb); } catch (Exception exc) { ModelState.AddModelError("", exc.Message); } } if (ModelState.IsValid) { pav.AttributeValueTypeId = model.AttributeValueTypeId; pav.AssociatedProductId = model.AssociatedProductId; pav.Name = model.Name; pav.ColorSquaresRgb = model.ColorSquaresRgb; pav.PriceAdjustment = model.PriceAdjustment; pav.WeightAdjustment = model.WeightAdjustment; pav.Cost = model.Cost; pav.Quantity = model.Quantity; pav.IsPreSelected = model.IsPreSelected; pav.DisplayOrder = model.DisplayOrder; pav.PictureId = model.PictureId; _productAttributeService.UpdateProductAttributeValue(pav); UpdateLocales(pav, model); ViewBag.RefreshPage = true; ViewBag.btnId = btnId; ViewBag.formId = formId; return View(model); } //If we got this far, something failed, redisplay form //pictures model.ProductPictureModels = _productService.GetProductPicturesByProductId(product.Id) .Select(x => new ProductModel.ProductPictureModel { Id = x.Id, ProductId = x.ProductId, PictureId = x.PictureId, PictureUrl = _pictureService.GetPictureUrl(x.PictureId), DisplayOrder = x.DisplayOrder }) .ToList(); var associatedProduct = _productService.GetProductById(model.AssociatedProductId); model.AssociatedProductName = associatedProduct != null ? associatedProduct.Name : ""; return View(model); }
protected virtual void SaveStoreMappings(Product product, ProductModel model) { var existingStoreMappings = _storeMappingService.GetStoreMappings(product); var allStores = _storeService.GetAllStores(); foreach (var store in allStores) { if (model.SelectedStoreIds != null && model.SelectedStoreIds.Contains(store.Id)) { //new store if (existingStoreMappings.Count(sm => sm.StoreId == store.Id) == 0) _storeMappingService.InsertStoreMapping(product, store.Id); } else { //remove store var storeMappingToDelete = existingStoreMappings.FirstOrDefault(sm => sm.StoreId == store.Id); if (storeMappingToDelete != null) _storeMappingService.DeleteStoreMapping(storeMappingToDelete); } } }
public ActionResult ProductManufacturerInsert(ProductModel.ProductManufacturerModel model) { if (!_permissionService.Authorize(StandardPermissionProvider.ManageProducts)) return AccessDeniedView(); var productId = model.ProductId; var manufacturerId = model.ManufacturerId; //a vendor should have access only to his products if (_workContext.CurrentVendor != null) { var product = _productService.GetProductById(productId); if (product != null && product.VendorId != _workContext.CurrentVendor.Id) { return Content("This is not your product"); } } var existingProductmanufacturers = _manufacturerService.GetProductManufacturersByManufacturerId(manufacturerId, showHidden: true); if (existingProductmanufacturers.FindProductManufacturer(productId, manufacturerId) == null) { var productManufacturer = new ProductManufacturer { ProductId = productId, ManufacturerId = manufacturerId, DisplayOrder = model.DisplayOrder }; //a vendor cannot edit "IsFeaturedProduct" property if (_workContext.CurrentVendor == null) { productManufacturer.IsFeaturedProduct = model.IsFeaturedProduct; } _manufacturerService.InsertProductManufacturer(productManufacturer); } return new NullJsonResult(); }
public ActionResult AssociatedProductAddPopup(string btnId, string formId, ProductModel.AddAssociatedProductModel model) { if (!_permissionService.Authorize(StandardPermissionProvider.ManageProducts)) return AccessDeniedView(); if (model.SelectedProductIds != null) { foreach (int id in model.SelectedProductIds) { var product = _productService.GetProductById(id); if (product != null) { //a vendor should have access only to his products if (_workContext.CurrentVendor != null && product.VendorId != _workContext.CurrentVendor.Id) continue; product.ParentGroupedProductId = model.ProductId; _productService.UpdateProduct(product); } } } //a vendor should have access only to his products model.IsLoggedInAsVendor = _workContext.CurrentVendor != null; ViewBag.RefreshPage = true; ViewBag.btnId = btnId; ViewBag.formId = formId; return View(model); }
public ActionResult ProductManufacturerUpdate(ProductModel.ProductManufacturerModel model) { if (!_permissionService.Authorize(StandardPermissionProvider.ManageProducts)) return AccessDeniedView(); var productManufacturer = _manufacturerService.GetProductManufacturerById(model.Id); if (productManufacturer == null) throw new ArgumentException("No product manufacturer mapping found with the specified id"); //a vendor should have access only to his products if (_workContext.CurrentVendor != null) { var product = _productService.GetProductById(productManufacturer.ProductId); if (product != null && product.VendorId != _workContext.CurrentVendor.Id) { return Content("This is not your product"); } } productManufacturer.ManufacturerId = model.ManufacturerId; productManufacturer.DisplayOrder = model.DisplayOrder; //a vendor cannot edit "IsFeaturedProduct" property if (_workContext.CurrentVendor == null) { productManufacturer.IsFeaturedProduct = model.IsFeaturedProduct; } _manufacturerService.UpdateProductManufacturer(productManufacturer); return new NullJsonResult(); }
public ActionResult AssociatedProductAddPopupList(DataSourceRequest command, ProductModel.AddAssociatedProductModel model) { if (!_permissionService.Authorize(StandardPermissionProvider.ManageProducts)) return AccessDeniedView(); //a vendor should have access only to his products if (_workContext.CurrentVendor != null) { model.SearchVendorId = _workContext.CurrentVendor.Id; } var products = _productService.SearchProducts( categoryIds: new List<int> { model.SearchCategoryId }, manufacturerId: model.SearchManufacturerId, storeId: model.SearchStoreId, vendorId: model.SearchVendorId, productType: model.SearchProductTypeId > 0 ? (ProductType?)model.SearchProductTypeId : null, keywords: model.SearchProductName, pageIndex: command.Page - 1, pageSize: command.PageSize, showHidden: true ); var gridModel = new DataSourceResult(); gridModel.Data = products.Select(x => { var productModel = x.ToModel(); //display already associated products var parentGroupedProduct = _productService.GetProductById(x.ParentGroupedProductId); if (parentGroupedProduct != null) { productModel.AssociatedToProductId = x.ParentGroupedProductId; productModel.AssociatedToProductName = parentGroupedProduct.Name; } return productModel; }); gridModel.Total = products.TotalCount; return Json(gridModel); }
public ActionResult ProductPictureUpdate(ProductModel.ProductPictureModel model) { if (!_permissionService.Authorize(StandardPermissionProvider.ManageProducts)) return AccessDeniedView(); var productPicture = _productService.GetProductPictureById(model.Id); if (productPicture == null) throw new ArgumentException("No product picture found with the specified id"); //a vendor should have access only to his products if (_workContext.CurrentVendor != null) { var product = _productService.GetProductById(productPicture.ProductId); if (product != null && product.VendorId != _workContext.CurrentVendor.Id) { return Content("This is not your product"); } } productPicture.DisplayOrder = model.DisplayOrder; _productService.UpdateProductPicture(productPicture); var picture = _pictureService.GetPictureById(productPicture.PictureId); if (picture == null) throw new ArgumentException("No picture found with the specified id"); _pictureService.UpdatePicture(picture.Id, _pictureService.LoadPictureBinary(picture), picture.MimeType, picture.SeoFilename, model.OverrideAltAttribute, model.OverrideTitleAttribute); return new NullJsonResult(); }
public ActionResult AssociateProductToAttributeValuePopup(string productIdInput, string productNameInput, ProductModel.ProductAttributeValueModel.AssociateProductToAttributeValueModel model) { if (!_permissionService.Authorize(StandardPermissionProvider.ManageProducts)) return AccessDeniedView(); var associatedProduct = _productService.GetProductById(model.AssociatedToProductId); if (associatedProduct == null) return Content("Cannot load a product"); //a vendor should have access only to his products if (_workContext.CurrentVendor != null && associatedProduct.VendorId != _workContext.CurrentVendor.Id) return Content("This is not your product"); //a vendor should have access only to his products model.IsLoggedInAsVendor = _workContext.CurrentVendor != null; ViewBag.RefreshPage = true; ViewBag.productIdInput = productIdInput; ViewBag.productNameInput = productNameInput; ViewBag.productId = associatedProduct.Id; ViewBag.productName = associatedProduct.Name; return View(model); }
public ActionResult TierPriceUpdate(ProductModel.TierPriceModel model) { if (!_permissionService.Authorize(StandardPermissionProvider.ManageProducts)) return AccessDeniedView(); var tierPrice = _productService.GetTierPriceById(model.Id); if (tierPrice == null) throw new ArgumentException("No tier price found with the specified id"); var product = _productService.GetProductById(tierPrice.ProductId); if (product == null) throw new ArgumentException("No product found with the specified id"); //a vendor should have access only to his products if (_workContext.CurrentVendor != null && product.VendorId != _workContext.CurrentVendor.Id) return Content("This is not your product"); tierPrice.StoreId = model.StoreId; tierPrice.CustomerRoleId = model.CustomerRoleId > 0 ? model.CustomerRoleId : (int?) null; tierPrice.Quantity = model.Quantity; tierPrice.Price = model.Price; _productService.UpdateTierPrice(tierPrice); return new NullJsonResult(); }
public ActionResult Create(ProductModel model, bool continueEditing) { 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; } //product var product = model.ToEntity(); product.CreatedOnUtc = DateTime.UtcNow; product.UpdatedOnUtc = DateTime.UtcNow; product.ProductObservations = model.ProductObservation; _productService.InsertProduct(product); //search engine name model.SeName = product.ValidateSeName(model.SeName, product.Name, true); _urlRecordService.SaveSlug(product, model.SeName, 0); //locales UpdateLocales(product, model); //ACL (customer roles) SaveProductAcl(product, model); //Stores SaveStoreMappings(product, model); //tags SaveProductTags(product, ParseProductTags(model.ProductTags)); //warehouses SaveProductWarehouseInventory(product, model); //discounts var allDiscounts = _discountService.GetAllDiscounts(DiscountType.AssignedToSkus, showHidden: true); foreach (var discount in allDiscounts) { if (model.SelectedDiscountIds != null && model.SelectedDiscountIds.Contains(discount.Id)) product.AppliedDiscounts.Add(discount); } _productService.UpdateProduct(product); _productService.UpdateHasDiscountsApplied(product); //activity log _customerActivityService.InsertActivity("AddNewProduct", _localizationService.GetResource("ActivityLog.AddNewProduct"), product.Name); SuccessNotification(_localizationService.GetResource("Admin.Catalog.Products.Added")); return continueEditing ? RedirectToAction("Edit", new { id = product.Id }) : RedirectToAction("List"); } //If we got this far, something failed, redisplay form PrepareProductModel(model, null, false, true); PrepareAclModel(model, null, true); PrepareStoresMappingModel(model, null, true); return View(model); }
protected virtual void PrepareAclModel(ProductModel model, Product product, bool excludeProperties) { if (model == null) throw new ArgumentNullException("model"); model.AvailableCustomerRoles = _customerService .GetAllCustomerRoles(true) .Select(cr => cr.ToModel()) .ToList(); if (!excludeProperties) { if (product != null) { model.SelectedCustomerRoleIds = _aclService.GetCustomerRoleIdsWithAccess(product); } } }
public ActionResult CrossSellProductAddPopupList(DataSourceRequest command, ProductModel.AddCrossSellProductModel model) { if (!_permissionService.Authorize(StandardPermissionProvider.ManageProducts)) return AccessDeniedView(); //a vendor should have access only to his products if (_workContext.CurrentVendor != null) { model.SearchVendorId = _workContext.CurrentVendor.Id; } var products = _productService.SearchProducts( categoryIds: new List<int> { model.SearchCategoryId }, manufacturerId: model.SearchManufacturerId, storeId: model.SearchStoreId, vendorId: model.SearchVendorId, productType: model.SearchProductTypeId > 0 ? (ProductType?)model.SearchProductTypeId : null, keywords: model.SearchProductName, pageIndex: command.Page - 1, pageSize: command.PageSize, showHidden: true ); var gridModel = new DataSourceResult(); gridModel.Data = products.Select(x => x.ToModel()); gridModel.Total = products.TotalCount; return Json(gridModel); }
protected virtual void PrepareProductModel(ProductModel 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 ProductModel.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; } }