/// <returns>A task that represents the asynchronous operation</returns> public virtual async Task <IActionResult> Create(VendorModel model, bool continueEditing, IFormCollection form) { if (!await _permissionService.AuthorizeAsync(StandardPermissionProvider.ManageVendors)) { return(AccessDeniedView()); } //parse vendor attributes var vendorAttributesXml = await ParseVendorAttributesAsync(form); (await _vendorAttributeParser.GetAttributeWarningsAsync(vendorAttributesXml)).ToList() .ForEach(warning => ModelState.AddModelError(string.Empty, warning)); if (ModelState.IsValid) { var vendor = model.ToEntity <Vendor>(); await _vendorService.InsertVendorAsync(vendor); //activity log await _customerActivityService.InsertActivityAsync("AddNewVendor", string.Format(await _localizationService.GetResourceAsync("ActivityLog.AddNewVendor"), vendor.Id), vendor); //search engine name model.SeName = await _urlRecordService.ValidateSeNameAsync(vendor, model.SeName, vendor.Name, true); await _urlRecordService.SaveSlugAsync(vendor, model.SeName, 0); //address var address = model.Address.ToEntity <Address>(); address.CreatedOnUtc = DateTime.UtcNow; //some validation if (address.CountryId == 0) { address.CountryId = null; } if (address.StateProvinceId == 0) { address.StateProvinceId = null; } await _addressService.InsertAddressAsync(address); vendor.AddressId = address.Id; await _vendorService.UpdateVendorAsync(vendor); //vendor attributes await _genericAttributeService.SaveAttributeAsync(vendor, NopVendorDefaults.VendorAttributes, vendorAttributesXml); //locales await UpdateLocalesAsync(vendor, model); //update picture seo file name await UpdatePictureSeoNamesAsync(vendor); _notificationService.SuccessNotification(await _localizationService.GetResourceAsync("Admin.Vendors.Added")); if (!continueEditing) { return(RedirectToAction("List")); } return(RedirectToAction("Edit", new { id = vendor.Id })); } //prepare model model = await _vendorModelFactory.PrepareVendorModelAsync(model, null, true); //if we got this far, something failed, redisplay form return(View(model)); }
/// <returns>A task that represents the asynchronous operation</returns> public virtual async Task <IActionResult> ApplyVendorSubmit(ApplyVendorModel model, bool captchaValid, IFormFile uploadedFile, IFormCollection form) { if (!_vendorSettings.AllowCustomersToApplyForVendorAccount) { return(RedirectToRoute("Homepage")); } if (!await _customerService.IsRegisteredAsync(await _workContext.GetCurrentCustomerAsync())) { return(Challenge()); } if (await _customerService.IsAdminAsync(await _workContext.GetCurrentCustomerAsync())) { ModelState.AddModelError("", await _localizationService.GetResourceAsync("Vendors.ApplyAccount.IsAdmin")); } //validate CAPTCHA if (_captchaSettings.Enabled && _captchaSettings.ShowOnApplyVendorPage && !captchaValid) { ModelState.AddModelError("", await _localizationService.GetResourceAsync("Common.WrongCaptchaMessage")); } var pictureId = 0; if (uploadedFile != null && !string.IsNullOrEmpty(uploadedFile.FileName)) { try { var contentType = uploadedFile.ContentType; var vendorPictureBinary = await _downloadService.GetDownloadBitsAsync(uploadedFile); var picture = await _pictureService.InsertPictureAsync(vendorPictureBinary, contentType, null); if (picture != null) { pictureId = picture.Id; } } catch (Exception) { ModelState.AddModelError("", await _localizationService.GetResourceAsync("Vendors.ApplyAccount.Picture.ErrorMessage")); } } //vendor attributes var vendorAttributesXml = await ParseVendorAttributesAsync(form); (await _vendorAttributeParser.GetAttributeWarningsAsync(vendorAttributesXml)).ToList() .ForEach(warning => ModelState.AddModelError(string.Empty, warning)); if (ModelState.IsValid) { var description = Core.Html.HtmlHelper.FormatText(model.Description, false, false, true, false, false, false); //disabled by default var vendor = new Vendor { Name = model.Name, Email = model.Email, //some default settings PageSize = 6, AllowCustomersToSelectPageSize = true, PageSizeOptions = _vendorSettings.DefaultVendorPageSizeOptions, PictureId = pictureId, Description = description }; await _vendorService.InsertVendorAsync(vendor); //search engine name (the same as vendor name) var seName = await _urlRecordService.ValidateSeNameAsync(vendor, vendor.Name, vendor.Name, true); await _urlRecordService.SaveSlugAsync(vendor, seName, 0); //associate to the current customer //but a store owner will have to manually add this customer role to "Vendors" role //if he wants to grant access to admin area (await _workContext.GetCurrentCustomerAsync()).VendorId = vendor.Id; await _customerService.UpdateCustomerAsync(await _workContext.GetCurrentCustomerAsync()); //update picture seo file name await UpdatePictureSeoNamesAsync(vendor); //save vendor attributes await _genericAttributeService.SaveAttributeAsync(vendor, NopVendorDefaults.VendorAttributes, vendorAttributesXml); //notify store owner here (email) await _workflowMessageService.SendNewVendorAccountApplyStoreOwnerNotificationAsync(await _workContext.GetCurrentCustomerAsync(), vendor, _localizationSettings.DefaultAdminLanguageId); model.DisableFormInput = true; model.Result = await _localizationService.GetResourceAsync("Vendors.ApplyAccount.Submitted"); return(View(model)); } //If we got this far, something failed, redisplay form model = await _vendorModelFactory.PrepareApplyVendorModelAsync(model, false, true, vendorAttributesXml); return(View(model)); }