using System; using System.Collections.Generic; using System.Globalization; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Web; using System.Web.Mvc; using Koptos.DAL; using Koptos.Helpers; using Koptos.Helpers.Messengers.Link; using Koptos.Helpers.Messengers.Smsc; using Koptos.Models; using Koptos.Models.AddEditLot; using Koptos.Models.Authorize; using Koptos.Models.Database; using Koptos.Models.HomeFinance; using Koptos.Models.LotCatalog; using Koptos.Models.MyLot; using Koptos.Models.Profile; using Koptos.Models.TheLot; using Microsoft.AspNet.Identity; using Microsoft.AspNet.Identity.Owin; using Newtonsoft.Json; using PagedList; namespace Koptos.Controllers { [Authorize(Roles = "Admin, Manager"), CustomAuthorize] public class AdminController : MyBaseController { readonly AccountRepository _accountRepository = new AccountRepository(); readonly OptionRepository _optionRepository = new OptionRepository(); private ApplicationUserManager _userManager; public ApplicationUserManager UserManager { get { return _userManager ?? (_userManager = HttpContext.GetOwinContext().GetUserManager()); } } #region Option [HttpPost] [ValidateInput(false)] public ActionResult ChangeOption(string optionValue, string optionName) { var json = new JsonPost(); Session["optionName"] = optionName; _optionRepository.ChangeOption(optionName, optionValue); json.Error = "Изменения успешно сохранены"; return Json(json); } [HttpPost] [ValidateInput(false)] public ActionResult ChangeData(PageModel model) { var json = new JsonPost(); _optionRepository.ChangeOption("FooterPhone", model.Phone); _optionRepository.ChangeOption("FooterEmail", model.Email); _optionRepository.ChangeOption("FooterSkype", model.Skype); _optionRepository.ChangeOption("FooterSkype", model.Skype); _optionRepository.ChangeOption("FooterSkype", model.Skype); _optionRepository.ChangeOption("CustomAuthorize", model.CustomAuthorize.ToString()); _optionRepository.ChangeOption("MinWithdrawalAccountAmount", model.MinWithdrawalAccountAmoun); _optionRepository.ChangeOption("MinWithdrawalCompanyAmount", model.MinWithdrawalCompanyAmoun); _optionRepository.ChangeOption("VK", model.VK); _optionRepository.ChangeOption("Facebook", model.Facebook); _optionRepository.ChangeOption("Google", model.Google); _optionRepository.ChangeOption("Twitter", model.Twitter); _optionRepository.ChangeOption("LinkedIn", model.LinkedIn); _optionRepository.ChangeOption("MinInitialPriceEnglish", model.MinimalEnglish); _optionRepository.ChangeOption("MinInitialPriceDatch", model.MinimalDatch); _optionRepository.ChangeOption("MinInitialPriceCompetetive", model.MinimalCompetetive); _optionRepository.ChangeOption("EnglishFreeToTender", model.IsFreeEnglish.ToString()); _optionRepository.ChangeOption("DutchFreeToTender", model.IsFreeDatch.ToString()); _optionRepository.ChangeOption("CompetitiveFreeToTender", model.IsFreeCompetetive.ToString()); _optionRepository.ChangeOption("FooterScript", model.Footer); json.Error = "Изменения успешно сохранены"; return Json(json); } [HttpPost] [ValidateInput(false)] public ActionResult ChangeDataSmtp(SmtpModel model) { var json = new JsonPost(); _optionRepository.ChangeOption("Email", model.Email); _optionRepository.ChangeOption("EmailSender", model.EmailSender); _optionRepository.ChangeOption("Password", model.Password); _optionRepository.ChangeOption("Smtp", model.Smtp); _optionRepository.ChangeOption("Port", model.Port); _optionRepository.ChangeOption("smtpSecurity", model.Security); _optionRepository.ChangeOption("SmtpDisplayName", model.SmtpDisplayName); json.Error = "Изменения успешно сохранены"; return Json(json); } [HttpPost] [ValidateInput(false)] public ActionResult ChangeRobokassa(RobokassaModel model) { var json = new JsonPost(); _optionRepository.ChangeOption("RobokassaLogin", model.RobokassaLogin); _optionRepository.ChangeOption("RobokassaPass1", model.RobokassaPass1); _optionRepository.ChangeOption("RobokassaPass2", model.RobokassaPass2); if (model.Test) { _optionRepository.ChangeOption("RobokassaMode", "test"); } if (!model.Test) { _optionRepository.ChangeOption("RobokassaMode", "production"); } json.Error = "Изменения успешно сохранены"; return Json(json); } #endregion #region Page&Landing public ActionResult RedactPage(Page model) { return PartialView(); } [HttpPost] public ActionResult ChangeLandingSeo(LandingSeo model) { var json = new JsonPost(); _optionRepository.ChangeOption("LandingDescription", model.Description); _optionRepository.ChangeOption("LandingKeywords", model.Keywords); _optionRepository.ChangeOption("LandingMeta", model.Meta); _optionRepository.ChangeOption("LandingTitle", model.Title); json.Error = "Изменения успешно сохранены"; return Json(json); } public ActionResult ChangePage(int id) { Session["PageId"] = Convert.ToString(id); var pageM = _optionRepository.GetPageById(id); var allPage = new AllPage { Description = pageM.Description, Keywords = pageM.Keywords, PageId = pageM.PageId, Status = pageM.Status, Text = pageM.Text, Title = pageM.Title, TitleSeo = pageM.TitleSeo, DateCr = pageM.DateCr.Day + "." + pageM.DateCr.Month + "." + pageM.DateCr.Year + " " + pageM.DateCr.Hour + ":" + pageM.DateCr.Minute, Statistic = pageM.Statistic, Catalog = pageM.Catalog, News = pageM.News, Banner = pageM.Banner, DateMod = pageM.DateMod.Day + "." + pageM.DateMod.Month + "." + pageM.DateMod.Year + " " + pageM.DateMod.Hour + ":" + pageM.DateMod.Minute, }; return View(allPage); } [ValidateInput(false)] [HttpPost] public void SubmitChange(AllPage page) { var id = Session["PageId"] as string; Session["PageId"] = null; _optionRepository.ChangePage(Convert.ToInt32(id), page); } public ActionResult AddLandingPageBlock(LandingPageBlock block) { return View(block); } public ActionResult AddLandingPageBlock2(int id) { Session["BlockId"] = Convert.ToString(id); var block = _optionRepository.GetBlockById(id); Session["Order"] = Convert.ToString(_optionRepository.GetOrderByBlockId(id)); return View(block); } [HttpPost] [ValidateInput(false)] public void AddBlock(LandingPageBlock block) { block.DateCr = DateTime.Now; block.AccountId = Guid.Parse(User.Identity.GetUserId()); block.SystemId = 0; block.Order = _optionRepository.GetLatestValueOfOrder() + 1; _optionRepository.AddBlock(block); } [HttpPost] [ValidateInput(false)] public void EditBlock(LandingPageBlock block) { var id = Session["BlockId"] as string; Session["BlockId"] = null; var order = Session["Order"] as string; Session["Order"] = null; block.Order = Convert.ToInt32(order); _optionRepository.EditBlock(Convert.ToInt32(id), block); } [HttpPost] public JsonResult ChangeOrder(int[] order) { var json = new JsonPost(); for (int i = 0; i < order.Length; i++) { _optionRepository.ChangeBlockOrder(order[i], i); } var list = _optionRepository.GetAllBlock(); json.LandingPageBlocks = list; return Json(json); } [HttpPost] public JsonResult ChangeDisplayBlock(int blokId, bool display) { var json = new JsonPost(); _optionRepository.ChangeBlockDisplay(blokId, display); var list = _optionRepository.GetAllBlock(); json.LandingPageBlocks = list; return Json(json); } [HttpPost] public JsonResult DeleteBlock(int blockId) { var json = new JsonPost(); _optionRepository.DeleteBlock(blockId); var list = _optionRepository.GetAllBlock(); json.LandingPageBlocks = list; return Json(json); } public ActionResult AddSlider() { return PartialView(); } [HttpPost] [ValidateInput(false)] public ActionResult AddNewSlider(SliderModel model) { string pathDb = null; if (model.file != null) { string pic = model.SliderName + Guid.NewGuid() + ".jpg"; pic = pic.Replace(' ', '_'); string path = Path.Combine(Server.MapPath(@"~//Images/site_content"), pic); // file is uploaded model.file.SaveAs(path); // save the image path path to the database or you can send image // directly to database // in-case if you want to store byte[] ie. for DB using (var ms = new MemoryStream()) { model.file.InputStream.CopyTo(ms); } pathDb = "../Images/site_content/" + pic; } var slider = new Slider { AccountId = Guid.Parse(User.Identity.GetUserId()), Css = model.Css, DateCr = DateTime.Now, Html = model.Html, JavaScript = model.JavaScript, Order = _optionRepository.GetLatestValueOfOrderSlider() + 1, SliderName = model.SliderName, ImagePath = pathDb }; _optionRepository.AddNewSlider(slider); return RedirectToAction("profile", "home"); } [HttpPost] public JsonResult ChangeOrderSlider(int[] order) { var json = new JsonPost(); for (int i = 0; i < order.Length; i++) { _optionRepository.ChangeSliderOrder(order[i], i); } var list = _optionRepository.GetListOfSliders(); json.Sliders = list; return Json(json); } [HttpPost] public JsonResult ChangeDisplaySlider(int blokId, bool display) { var json = new JsonPost(); _optionRepository.ChangeSliderDisplay(blokId, display); var list = _optionRepository.GetListOfSliders(); json.Sliders = list; return Json(json); } [HttpPost] public JsonResult DeleteSlider(int blockId) { var json = new JsonPost(); _optionRepository.DeleteSliders(blockId); var list = _optionRepository.GetListOfSliders(); json.Sliders = list; return Json(json); } [HttpPost] public ActionResult EditSlider(SliderModel model) { Session["SliderId"] = Convert.ToString(model.SliderId); return PartialView(model); } [HttpPost] public JsonResult UploadImageSlider() { var json = new JsonPost(); for (int i = 0; i < Request.Files.Count; i++) { var file = Request.Files[i]; var fileName = Guid.NewGuid().ToString() + ".jpg"; var path = Path.Combine(Server.MapPath(@"~//Images/site_content"), fileName); if (file != null) file.SaveAs(path); var id = Session["SliderId"] as string; _optionRepository.EditSlidaerImage(Convert.ToInt32(id), "../Images/site_content/" + fileName); json.Error = "../Images/site_content/" + fileName; } return Json(json); } [HttpPost] [ValidateInput(false)] public JsonResult EditSliderData(Slider slider) { var id = Session["SliderId"] as string; _optionRepository.EditSliders(Convert.ToInt32(id), slider); var json = new JsonPost(); var list = _optionRepository.GetListOfSliders(); json.Sliders = list; return Json(json); } #endregion #region Account [HttpPost] public async Task AddToAdmin(string email) { var json = new JsonPost(); var user = await UserManager.FindByEmailAsync(email); if (user == null) { json.Error = "Пользователь с таким Email-ом отсутствует"; return Json(json); } var addTo = await UserManager.AddToRoleAsync(user.Id, "Admin"); if (addTo.Succeeded) { var allAdmins = _accountRepository.GetAllAdmin("Admin"); var listAdmin = allAdmins.Select(admin => new Admin { AdminId = admin.Id.ToString(), AdminEmail = admin.Email, AdminFullName = admin.FullName, AdminPhone = admin.PhoneNumber }).ToList(); var model = new AdminPagination { Admins = listAdmin, CurrentNumberPage = 1 }; var pageAdmin = listAdmin.ToPagedList(1, 2); ViewBag.PagedListAdmin = pageAdmin; return PartialView("AllAdmin", model); } json.Error = "Error"; return Json(json); } [HttpPost] public async Task AddToManager(string email) { var json = new JsonPost(); var user = await UserManager.FindByEmailAsync(email); if (user == null) { json.Error = "Пользователь с таким Email-ом отсутствует"; return Json(json); } var addTo = await UserManager.AddToRoleAsync(user.Id, "Manager"); if (addTo.Succeeded) { var allManager = _accountRepository.GetAllAdmin("Manager"); var listManager = allManager.Select(manager => new Manager { ManagerId = manager.Id.ToString(), ManagerEmail = manager.Email, ManagerFullName = manager.FullName, ManagerPhone = manager.PhoneNumber }).ToList(); ViewBag.PagedListAdmin = listManager.ToPagedList(1, 10); return PartialView("AllManager"); } json.Error = "Error"; return Json(json); } [HttpPost] public ActionResult ResetPassword(string accountId) { var task = UserManager.FindByIdAsync(Guid.Parse(accountId)); task.Wait(); var account = task.Result; var jsonMod = new JsonPost(); if (Request.Url == null) throw new NullReferenceException("Request url is null"); if (account != null) { var task2 = UserManager.GenerateTwoFactorTokenAsync(account.Id, "Email"); task2.Wait(); var code = task2.Result; string url = Url.Action("NewPass", "Authorize", new { userId = account.Id, code }, Request.Url.Scheme); var varDict = new Dictionary { {"UrlForComplete", url}, {"AccountEmail", account.Email}, {"AccountName", account.FullName} }; var email2 = account.Email; var displayName2 = account.FullName; LetterTemplateType.PasswordReset.SendMail(varDict, email2, displayName2); jsonMod.Error = "На почтовый адрес сброшено письмо подтвержения"; return Json(jsonMod); } jsonMod.Error = "Ошибка"; return Json(jsonMod); } [HttpPost] public async Task ResetAdmin(string accountId) { var json = new JsonPost(); var allAdmin = _accountRepository.GetAllRole("Admin"); if (allAdmin.Count < 2) { json.Error = "Ошибка"; return Json(json); } var account = await UserManager.FindByIdAsync(Guid.Parse(accountId)); if (account != null) { var result = await UserManager.RemoveFromRoleAsync(account.Id, "Admin"); if (result.Succeeded) { json.Error = "Удалено"; return Json(json); } } json.Error = "Ошибка"; return Json(json); } [HttpPost] public async Task ResetManager(string accountId) { var json = new JsonPost(); var account = await UserManager.FindByIdAsync(Guid.Parse(accountId)); if (account != null) { var result = await UserManager.RemoveFromRoleAsync(account.Id, "Manager"); if (result.Succeeded) { var allManager = _accountRepository.GetAllAdmin("Manager"); var listManager = allManager.Select(manager => new Manager { ManagerId = manager.Id.ToString(), ManagerEmail = manager.Email, ManagerFullName = manager.FullName, ManagerPhone = manager.PhoneNumber }).ToList(); ViewBag.PagedListAdmin = listManager.ToPagedList(1, 10); return PartialView("AllManager"); } } json.Error = "Ошибка"; return Json(json); } [HttpPost] public ActionResult ChangeProfileType(ProfileType profileType) { var json = new JsonPost(); _optionRepository.ChangeProfileType(profileType); json.Error = "Изменения успешно сохранены"; return Json(json); } public ActionResult AllAdmin(string page) { var allAdmins = _accountRepository.GetAllAdmin("Admin"); var listAdmin = allAdmins.Select(admin => new Admin { AdminId = admin.Id.ToString(), AdminEmail = admin.Email, AdminFullName = admin.FullName, AdminPhone = admin.PhoneNumber }).ToList(); int pageListNumber = page == null ? 1 : Convert.ToInt32(page); ViewBag.PagedListAdmin = listAdmin.ToPagedList(pageListNumber, 10); return PartialView(); } public ActionResult AllUsers(string page, string search) { var allUsers = _accountRepository.GetAllUser(); var listUser = new List(); if (search != null) { ViewBag.Search = search; allUsers = allUsers.Where( s => s.FullName.ToLower().Contains(search.ToLower()) || s.Email.ToLower().Contains(search.ToLower()) || s.PhoneNumber.ToLower().Contains(search.ToLower())); } foreach (Account users in allUsers) { string companyName = null; var company = Repository.GetCompanyByAccountId(users.Id); if (company != null) { companyName = company.Name; } var us = new User { UserId = users.Id.ToString(), UserEmail = users.Email, UserFullName = users.FullName, UserPhone = users.PhoneNumber, CompanyName = companyName }; listUser.Add(us); } int pageListNumber = page == null ? 1 : Convert.ToInt32(page); ViewBag.PagedListUser = listUser.ToPagedList(pageListNumber, 10); return PartialView(); } public ActionResult DeleteUser(Guid id) { var account = Repository.GetAccountById(id); Repository.DeleteAccount(account); return RedirectToAction("AllUsers"); } public ActionResult ChangeUser(string id) { var user = _accountRepository.GetAccountById(Guid.Parse(id)); var us = new User { UserId = user.Id.ToString(), UserEmail = user.Email, UserFullName = user.FullName, UserPhone = user.PhoneNumber }; return PartialView(us); } [HttpPost] [ValidateInput(false)] public ActionResult ChangeRole(int companyId) { var company = _accountRepository.GetCompanyByid(companyId); if (company.CompanyType == (int)AccountTypes.Organizer) { _accountRepository.ChangeCompanyRole(company.CompanyId, (int)AccountTypes.Participant); var listCompany2 = new List(); var listCompanies2 = _accountRepository.AllCompany(); foreach (Company comp in listCompanies2) { var lst = new CompanyModel { CompanyName = comp.Name, LogoPath = comp.LogoImageFileName, Description = comp.Description, Email = comp.Email, LineOfBusiness = comp.LineOfBusiness, WebSite = comp.WebSite, CompanyId = comp.CompanyId }; if (comp.CompanyType == (int)AccountTypes.Participant) { lst.TypeCompany = "Учасник торгов"; } if (comp.CompanyType == (int)AccountTypes.Organizer) { lst.TypeCompany = "Организатор торгов"; } var ac = _accountRepository.GetAccountById(comp.AccountId); lst.UserName = ac.FullName; listCompany2.Add(lst); } ViewBag.PagedListCompany = listCompany2.ToPagedList(1, 10); return PartialView("AllCompany"); } if (company.CompanyType == (int)AccountTypes.Participant) { _accountRepository.ChangeCompanyRole(company.CompanyId, (int)AccountTypes.Organizer); } var listCompany = new List(); var listCompanies = _accountRepository.AllCompany(); foreach (Company comp in listCompanies) { var lst = new CompanyModel { CompanyName = comp.Name, LogoPath = comp.LogoImageFileName, Description = comp.Description, Email = comp.Email, LineOfBusiness = comp.LineOfBusiness, WebSite = comp.WebSite, CompanyId = comp.CompanyId }; if (comp.CompanyType == (int)AccountTypes.Participant) { lst.TypeCompany = "Учасник торгов"; } if (comp.CompanyType == (int)AccountTypes.Organizer) { lst.TypeCompany = "Организатор торгов"; } var ac = _accountRepository.GetAccountById(comp.AccountId); lst.UserName = ac.FullName; listCompany.Add(lst); } ViewBag.PagedListCompany = listCompany.ToPagedList(1, 10); return PartialView("AllCompany"); } public ActionResult AllCompany(string page, string search) { var listCompany = new List(); var listCompanies = _accountRepository.AllCompany(); if (search != null) { ViewBag.Search = search; listCompanies = listCompanies.Where(a => a.Name.ToLower().Contains(search.ToLower())); } foreach (Company comp in listCompanies) { var lots = Repository.GetLotsByCompanyId(comp.CompanyId); var lst = new CompanyModel { CompanyName = comp.Name, LogoPath = comp.LogoImageFileName, Description = comp.Description, Email = comp.Email, LineOfBusiness = comp.LineOfBusiness, WebSite = comp.WebSite, CompanyId = comp.CompanyId, UserCount = comp.AccountRights.Count + 1, LotCount = lots.Count }; if (comp.CompanyType == (int)AccountTypes.Participant) { lst.TypeCompany = "Учасник торгов"; } if (comp.CompanyType == (int)AccountTypes.Organizer) { lst.TypeCompany = "Организатор торгов"; } var ac = _accountRepository.GetAccountById(comp.AccountId); lst.UserName = ac.FullName; listCompany.Add(lst); } int pageListNumber = page == null ? 1 : Convert.ToInt32(page); ViewBag.PagedListCompany = listCompany.ToPagedList(pageListNumber, 10); return PartialView(); } #endregion #region News public ActionResult AddNews(News news) { return View(news); } public ActionResult EditNews(int id) { Session["NewsId"] = Convert.ToString(id); var model = _optionRepository.GetNewsById(id); return View(model); } [HttpPost] [ValidateInput(false)] public void AddNewsNew(News news) { var imagePath = Session["ImagePath"] as string; Session["ImagePath"] = null; news.DateCr = DateTime.Now.Date; news.DateMod = DateTime.Now.Date; news.ImagePath = imagePath; _optionRepository.AddNews(news); } [HttpPost] [ValidateInput(false)] public void EditNews(NewsModel news) { var id = Session["NewsId"] as string; Session["NewsId"] = null; _optionRepository.EditNews(Convert.ToInt32(id), news); var json = new JsonPost(); var newS = _optionRepository.AllNews(); var listNw = new List(); if (newS.Count != 0) { listNw.AddRange(newS.Select(pageM => new NewsModel { Description = pageM.Description, Keywords = pageM.Keywords, NewsId = pageM.NewsId, Status = pageM.Status, Text = pageM.Text, TitleSeo = pageM.TitleSeo, Title = pageM.Title, DateCr = pageM.DateCr.Day + "." + pageM.DateCr.Month + "." + pageM.DateCr.Year, DateMod = pageM.DateMod.Day + "." + pageM.DateMod.Month + "." + pageM.DateMod.Year })); } json.AllNews = listNw; } [HttpPost] public JsonResult UploadImageNew() { var json = new JsonPost(); for (int i = 0; i < Request.Files.Count; i++) { var file = Request.Files[i]; string fileName = Guid.NewGuid().ToString() + ".jpg"; var path = Path.Combine(Server.MapPath(@"~//Images/site_content"), fileName); if (file != null) file.SaveAs(path); Session["ImagePath"] = "../Images/site_content/" + fileName; json.Error = "../Images/site_content/" + fileName; } return Json(json); } [HttpPost] public JsonResult UploadEditImageNew() { var json = new JsonPost(); for (int i = 0; i < Request.Files.Count; i++) { var file = Request.Files[i]; string fileName = Guid.NewGuid().ToString() + ".jpg"; var path = Path.Combine(Server.MapPath(@"~//Images/site_content"), fileName); if (file != null) file.SaveAs(path); var id = Session["NewsId"] as string; _optionRepository.EditNewImage(Convert.ToInt32(id), "../Images/site_content/" + fileName); json.Error = "../Images/site_content/" + fileName; } return Json(json); } [HttpPost] public JsonResult ChangeDisplayNews(int newsId, bool display) { var json = new JsonPost(); _optionRepository.ChangeStatusNews(newsId, display); var newS = _optionRepository.AllNews(); var listNw = new List(); if (newS.Count != 0) { listNw.AddRange(newS.Select(pageM => new NewsModel { Description = pageM.Description, Keywords = pageM.Keywords, NewsId = pageM.NewsId, Status = pageM.Status, Text = pageM.Text, Title = pageM.Title, TitleSeo = pageM.TitleSeo, DateCr = pageM.DateCr.Day + "." + pageM.DateCr.Month + "." + pageM.DateCr.Year + " " + pageM.DateCr.Hour + ":" + pageM.DateCr.Minute, DateMod = pageM.DateMod.Day + "." + pageM.DateMod.Month + "." + pageM.DateMod.Year + " " + pageM.DateMod.Hour + ":" + pageM.DateMod.Minute })); } json.AllNews = listNw; return Json(json); } [HttpPost] public JsonResult DeleteNew(int newsId) { var json = new JsonPost(); _optionRepository.DeleteNews(newsId); var newS = _optionRepository.AllNews(); var listNw = new List(); if (newS.Count != 0) { listNw.AddRange(newS.Select(pageM => new NewsModel { Description = pageM.Description, Keywords = pageM.Keywords, NewsId = pageM.NewsId, Status = pageM.Status, Text = pageM.Text, Title = pageM.Title, TitleSeo = pageM.TitleSeo, DateCr = pageM.DateCr.Day + "." + pageM.DateCr.Month + "." + pageM.DateCr.Year + " " + pageM.DateCr.Hour + ":" + pageM.DateCr.Minute, DateMod = pageM.DateMod.Day + "." + pageM.DateMod.Month + "." + pageM.DateMod.Year + " " + pageM.DateMod.Hour + ":" + pageM.DateMod.Minute })); } json.AllNews = listNw; return Json(json); } #endregion #region Region Map public ActionResult MapInDialog(int? regionId) { if (!regionId.HasValue) return new EmptyResult(); var region = Repository.GetRegionById(regionId.Value); if (region == null) return new EmptyResult(); var model = new YMapModel(); model.RegionId = region.RegionId; return PartialView(model); } [HttpPost] public ActionResult MapInDialog(YMapModel model) { var region = Repository.GetRegionById(model.RegionId); if (String.IsNullOrEmpty(model.CoordsString)) model.CoordsString = "0 0"; var strArr = model.CoordsString.Split(new[] {' '}); if(strArr.Count() != 2) return Json(new {message = "failure"}); double lng, lat; var result = double.TryParse(strArr[1], NumberStyles.Number, new CultureInfo("en"), out lng); if (result) { region.Longitude = lng; } result = double.TryParse(strArr[0], NumberStyles.Number, new CultureInfo("en"), out lat); if (result) { region.Latitude = lat; } Repository.UpdateRegion(region); return Json(new {message = "success"}); } #endregion public ActionResult ChangePrice(AdminProfile places) { var json = new JsonPost(); if (places.AdvertisementBannerPlaces.Count != 0) { foreach (AdvertisementBannerPlace place in places.AdvertisementBannerPlaces) { _optionRepository.ChangePlacesPrice(place, place.AdvertisementBannerPlaceId); json.Error = "Сохранено"; } } _optionRepository.ChangeOption("LotBanners", places.BannerInLot.ToString()); return Json(json); } public ActionResult AllGeolocation(string page) { var allGeolocation = _optionRepository.GetAllGeolocation(); int pageListNumber = page == null ? 1 : Convert.ToInt32(page); ViewBag.PagedListGeolocation = allGeolocation.ToPagedList(pageListNumber, 10); return PartialView(allGeolocation); } [HttpPost] [AcceptVerbs(HttpVerbs.Post)] public ActionResult ChangeGeolocations(List geolocations) { var json = new JsonPost(); if (geolocations.Count != 0) { foreach (Geolocation geolocation in geolocations) { _optionRepository.ChangegGeolocationName(geolocation); } json.Error = "Изменения сохранены"; } return Json(json); } [HttpPost] public ActionResult DeleteGeolocation(int id, string page) { var massive = new char[page.Length - 5]; for (int i = 0; i < page.Length - 5; i++) { massive[i] = page[i + 5]; } var currentPage = new string(massive); var geolocation = _optionRepository.GetGeolocationById(id); _optionRepository.DeleteGeolocation(geolocation); var allGeolocation = _optionRepository.GetAllGeolocation(); ViewBag.PagedListGeolocation = allGeolocation.ToPagedList(1, 10); return PartialView("AllGeolocation"); } public ActionResult AllLots(string page, string search) { var lots = _accountRepository.GetAllLot(); if (search != null) { ViewBag.Search = search; lots = lots.Where(a => a.Name.ToLower().Contains(search.ToLower())); } var listLots = lots.Select(lot => new LotModel { LotId = lot.LotId, DateStart = lot.RequestDateStart.ToString("MM.dd.yyyy"), DateEnd = lot.RequestDateEnd.ToString("MM.dd.yyyy"), DateTorg = lot.DateStart.ToString("MM.dd.yyyy"), LotName = lot.Name, Status = Repository.GetCurrentLotStatus(lot.LotId).LotStatusName, Winner = Repository.WinnerName(lot.LotId), LotEngName = lot.EngName, StatusId = Repository.GetCurrentLotStatus(lot.LotId).LotStatusId }).ToList(); int pageListNumber = page == null ? 1 : Convert.ToInt32(page); ViewBag.PagedListLot = listLots.ToPagedList(pageListNumber, 10); return PartialView(); } public ActionResult ChangePublished(int lotId, string published) { var llot = Repository.GetLotById(lotId); var lotLinks = llot.GetLotLinks(Url, Request.Url.Scheme); var urlLot = lotLinks.Item1; var urlImage = lotLinks.Item2; _accountRepository.ChangeLotStatus(lotId, published == "true", urlLot, urlImage); var lots = _accountRepository.GetAllLot(); var listLots = lots.Select(lot => new LotModel { LotId = lot.LotId, DateStart = lot.RequestDateStart.ToString("MM.dd.yyyy"), DateEnd = lot.RequestDateEnd.ToString("MM.dd.yyyy"), DateTorg = lot.DateStart.ToString("MM.dd.yyyy"), LotName = lot.Name, Status = Repository.GetCurrentLotStatus(lot.LotId).LotStatusName, Winner = Repository.WinnerName(lot.LotId), LotEngName = lot.EngName, StatusId = Repository.GetCurrentLotStatus(lot.LotId).LotStatusId }).ToList(); ViewBag.PagedListLot = listLots.ToPagedList(1, 10); return PartialView("AllLots"); } public ActionResult DeleteLot(int lotId) { var llot = Repository.GetLotById(lotId); var lotLinks = llot.GetLotLinks(Url, Request.Url.Scheme); var urlLot = lotLinks.Item1; var urlImage = lotLinks.Item2; _accountRepository.DeleteLot(lotId, urlLot, urlImage); var lots = _accountRepository.GetAllLot(); var listLots = lots.Select(lot => new LotModel { LotId = lot.LotId, DateStart = lot.RequestDateStart.ToString("MM.dd.yyyy"), DateEnd = lot.RequestDateEnd.ToString("MM.dd.yyyy"), DateTorg = lot.DateStart.ToString("MM.dd.yyyy"), LotName = lot.Name, Status = Repository.GetCurrentLotStatus(lot.LotId).LotStatusName, Winner = Repository.WinnerName(lot.LotId), LotEngName = lot.EngName, StatusId = Repository.GetCurrentLotStatus(lot.LotId).LotStatusId }).ToList(); ViewBag.PagedListLot = listLots.ToPagedList(1, 10); return PartialView("AllLots"); } public ActionResult AllBanner(string page, string search, string sort) { var listTarif = new List(); var listBanner = _accountRepository.GetAllBanners(); if (search != null) { listBanner = listBanner.Where(a => a.Name.ToLower().Contains(search.ToLower())); ViewBag.Search = search; } foreach (AdvertisementBanner banner in listBanner) { var company = _accountRepository.GetCompanyByid(banner.CompanyId); var lst = new TarifPlanItem { Status = banner.Status, AdvertisementBannerId = banner.AdvertisementBannerId, Name = banner.Name, StartDate = banner.StartDate.Date, EndDate = banner.EndDate.Date, AdvertisementBannerPlaceId = banner.AdvertisementBannerPlaceId, ImageBannerPath = banner.ImageBannerPath, Price = banner.Price, CompanyName = company.Name }; switch (banner.AdvertisementBannerPlaceId) { case 1: lst.Place = "Главная страница"; break; case 2: lst.Place = "Внутренние страницы"; break; } switch (banner.Status) { case 1: lst.StatusName = "Ожидает подтверждения"; break; case 2: lst.StatusName = "Отклонена"; break; case 3: lst.StatusName = "Принята"; break; } listTarif.Add(lst); } int pageListNumber = page == null ? 1 : Convert.ToInt32(page); ViewBag.PagedListBanner = listTarif.ToPagedList(pageListNumber, 10); return PartialView(); } [HttpPost] public ActionResult ChangeBannerStatus(int bannerId, string status) { _accountRepository.ChangeBannerStatus(bannerId, status == "true" ? (int)AdvertisementBannerStatuses.Accepted : (int)AdvertisementBannerStatuses.Canceled); if (status != "true") { var banner = Repository.GetAdwBannerById(bannerId); if (banner != null) { var company = Repository.GetCompanyByAccountId(CurrentUserId); if (company != null) { Repository.AddCompanyTransfer(CurrentUserId, company.CompanyId, CompanyTransferTypes.FromSystem, banner.Price, "", ""); } } } var listTarif = new List(); var listBanner = _accountRepository.GetAllBanners(); foreach (AdvertisementBanner banner in listBanner) { var company = _accountRepository.GetCompanyByid(banner.CompanyId); var lst = new TarifPlanItem { Status = banner.Status, AdvertisementBannerId = banner.AdvertisementBannerId, Name = banner.Name, StartDate = banner.StartDate.Date, EndDate = banner.EndDate.Date, AdvertisementBannerPlaceId = banner.AdvertisementBannerPlaceId, ImageBannerPath = banner.ImageBannerPath, Price = banner.Price, CompanyName = company.Name }; switch (banner.AdvertisementBannerPlaceId) { case 1: lst.Place = "Главная страница"; break; case 2: lst.Place = "Внутренние страницы"; break; } switch (banner.Status) { case (int)AdvertisementBannerStatuses.Moderation: lst.StatusName = "Ожидает подтверждения"; break; case (int)AdvertisementBannerStatuses.Canceled: lst.StatusName = "Отклонена"; break; case (int)AdvertisementBannerStatuses.Accepted: lst.StatusName = "Принята"; break; } listTarif.Add(lst); } ViewBag.PagedListBanner = listTarif.ToPagedList(1, 10); return PartialView("AllBanner"); } public ActionResult AllRegions(string page) { var allRegion = _optionRepository.GetAllRegions(); int pageListNumber = page == null ? 1 : Convert.ToInt32(page); ViewBag.PagedListRegion = allRegion.ToPagedList(pageListNumber, 10); return PartialView(); } [HttpPost] [AcceptVerbs(HttpVerbs.Post)] public ActionResult ChangeRegions(List regions) { var json = new JsonPost(); if (regions.Count != 0) { foreach (Region region in regions) { _optionRepository.ChangeRegion(region); } json.Error = "Изменения сохранены"; } return Json(json); } [HttpPost] public ActionResult DeleteRegion(int id, string page) { var region = _optionRepository.GetRegionById(id); _optionRepository.DeleteRegion(region); var allGeolocation = _optionRepository.GetAllRegions(); ViewBag.PagedListRegion = allGeolocation.ToPagedList(1, 10); return PartialView("AllRegions"); } [HttpPost] public ActionResult AddRegion(string name) { _optionRepository.AddRegion(name); var allGeolocation = _optionRepository.GetAllRegions(); ViewBag.PagedListRegion = allGeolocation.ToPagedList(1, 10); return PartialView("AllRegions"); } public ActionResult AllLetters(string page) { var listLetters = new ListLetters(); var allLetters = _optionRepository.GetAllLetter(); int pageListNumber = page == null ? 1 : Convert.ToInt32(page); listLetters.Letters = allLetters.ToPagedList(pageListNumber, 3); return PartialView(listLetters); } [HttpPost] public ActionResult ChangeLetters(LetterTemplate[] letters) { if (letters.Length != 0) { foreach (LetterTemplate letter in letters) { _optionRepository.ChangeLetter(new LetterTemplate { LetterTemplateId= letter.LetterTemplateId, Content = letter.Content, Subject = letter.Subject }); } } var listLetters = new ListLetters(); var allLetters = _optionRepository.GetAllLetter(); listLetters.Letters = allLetters.ToPagedList(1, 3); return PartialView("AllLetters", listLetters); } [HttpPost] public JsonResult PayToAccount(Guid id, string summ) { if (summ != null) { Repository.AddAccountTransfer(id, Convert.ToDecimal(summ), AccountTransferTypes.FromSystem, "", ""); } return Json(new { result = true }); } public ActionResult AllRubrics() { var rubricVm = new List(); var rubrics = _accountRepository.GetAllGeneralRubrics(); if (rubrics.Count != 0) { rubricVm.AddRange(rubrics.Select(GetTreeRubric)); } return PartialView(rubricVm); } public ActionResult AllPartRubrics(List model) { return PartialView("AllRubrics", model); } public RubricViewModel GetTreeRubric(Rubric rubric) { var rubrics = _accountRepository.GetAllRubrics(); var rubricVm = new RubricViewModel { Coefficient = rubric.Coefficient, Description = rubric.Description, ImageFileName = string.IsNullOrEmpty(rubric.ImageFileName) ? PathProvider.DefaultRubricRele : Url.Content(PathProvider.RubricRele + rubric.ImageFileName), IsDel = rubric.IsDel, Name = rubric.Name, RubricId = rubric.RubricId, ChildRubrics = new List(), AddressLineName = rubric.AddressLineName }; if (rubric.ParentId != null) { rubricVm.ParentId = (int)rubric.ParentId; } var rubricsChild = rubrics.Where(a => a.ParentId == rubric.RubricId).OrderBy(a => a.Name).ToList(); if (rubricsChild.Count != 0) { foreach (Rubric r in rubricsChild) { rubricVm.ChildRubrics.Add(GetTreeRubric(r)); } } return rubricVm; } public ActionResult RubricDetail(int id, int? parentId) { if (id == 0) return PartialView(new Rubric { ParentId = parentId, ImageFileName = PathProvider.DefaultRubricRele }); var model = _accountRepository.GetRubricById(id); model.ImageFileName = string.IsNullOrEmpty(model.ImageFileName) ? PathProvider.DefaultRubricRele : Url.Content(PathProvider.RubricRele + model.ImageFileName); return PartialView(model); } public ActionResult ChangeRubric(RubricViewModel model) { var path = Session["ImageRubric"] as string; Session["ImageRubric"] = null; if (path != null) { model.ImageFileName = path; } _accountRepository.ChangeRubric(model); var rubricVm = new List(); var rubrics = _accountRepository.GetAllGeneralRubrics(); if (rubrics.Count != 0) { rubricVm.AddRange(rubrics.Select(GetTreeRubric)); } return PartialView("AllRubrics", rubricVm); } public ActionResult DeleteRubric(int id) { _accountRepository.DeleteRubric(id); var rubricVm = new List(); var rubrics = _accountRepository.GetAllGeneralRubrics(); if (rubrics.Count != 0) { rubricVm.AddRange(rubrics.Select(GetTreeRubric)); } return PartialView("AllRubrics", rubricVm); } public ActionResult AddRubric(RubricViewModel model) { var path = Session["ImageRubric"] as string; Session["ImageRubric"] = null; model.ImageFileName = path; if (model.Name == null) { return Json(new JsonPost { Error = "Введите название" }); } _accountRepository.AddRubric(model); var rubricVm = new List(); var rubrics = _accountRepository.GetAllGeneralRubrics(); if (rubrics.Count != 0) { rubricVm.AddRange(rubrics.Select(GetTreeRubric)); } return PartialView("AllRubrics", rubricVm); } [HttpPost] public JsonResult UploadImagRubric() { var json = new JsonPost(); for (int i = 0; i < Request.Files.Count; i++) { var file = Request.Files[i]; var fileName = Guid.NewGuid().ToString() + ".jpg"; var path = Path.Combine(PathProvider.RubricAbs, fileName); if (file != null) file.SaveAs(path); Session["ImageRubric"] = fileName; json.Error = PathProvider.RubricRele + fileName; } return Json(json); } public ActionResult CompanyDetail(int id) { var model = _accountRepository.GetCompanyByid(id); var company = new CompanyModel { CompanyName = model.Name, LogoPath = string.IsNullOrEmpty(model.LogoImageFileName) ? PathProvider.DefaultCompanyRele : Url.Content(PathProvider.CompaniesRele + model.LogoImageFileName), Description = model.Description, Email = model.Email, CompanyLineId = model.CompanyLineId, WebSite = model.WebSite, CompanyId = model.CompanyId, Price = model.Price, Service = model.Service, CompanyLines = _optionRepository.GetAllCompanyLines(), }; return PartialView(company); } [HttpPost] public ActionResult ChangeCompany(CompanyModel company) { _accountRepository.ChangeCompanyAdmin(company); var listCompany = new List(); var listCompanies = _accountRepository.AllCompany(); foreach (Company comp in listCompanies) { var lots = Repository.GetLotsByCompanyId(comp.CompanyId); var lst = new CompanyModel { CompanyName = comp.Name, LogoPath = comp.LogoImageFileName, Description = comp.Description, Email = comp.Email, LineOfBusiness = comp.LineOfBusiness, WebSite = comp.WebSite, CompanyId = comp.CompanyId, UserCount = comp.AccountRights.Count + 1, LotCount = lots.Count }; if (comp.CompanyType == (int)AccountTypes.Participant) { lst.TypeCompany = "Учасник торгов"; } if (comp.CompanyType == (int)AccountTypes.Organizer) { lst.TypeCompany = "Организатор торгов"; } var ac = _accountRepository.GetAccountById(comp.AccountId); lst.UserName = ac.FullName; listCompany.Add(lst); } ViewBag.PagedListCompany = listCompany.ToPagedList(1, 10); return PartialView("AllCompany"); } public ActionResult GetInstruction(Option option) { var optionModel = _optionRepository.GetOptionValue(option.OptionName); return PartialView(optionModel); } public ActionResult LotSeoDetail(int id) { var lot = Repository.GetLotById(id); return PartialView(lot); } [HttpPost] public ActionResult ChangeLot(Lot lot) { _accountRepository.ChangeLot(lot); return Content("GoodBuy"); } [HttpPost] [ValidateInput(false)] public void ChangeOptionInstr(Option opt) { _optionRepository.ChangeOption(opt.OptionName, opt.OptionValue); } [HttpPost] public void ChangeSmscParametr(SmscSettings smsc) { _optionRepository.ChangeOption("SmsProviderType", smsc.SmsProviderType); var smscParam = JsonConvert.SerializeObject(smsc.SmscParameters); var linkParam = JsonConvert.SerializeObject(smsc.LinkParameters); _optionRepository.ChangeOption("SmscParameters", smscParam); _optionRepository.ChangeOption("LinkParameters", linkParam); } public ActionResult AllManager(string page) { var allManager = _accountRepository.GetAllAdmin("Manager"); var listManager = allManager.Select(manager => new Manager { ManagerId = manager.Id.ToString(), ManagerEmail = manager.Email, ManagerFullName = manager.FullName, ManagerPhone = manager.PhoneNumber }).ToList(); int pageListNumber = page == null ? 1 : Convert.ToInt32(page); ViewBag.PagedListAdmin = listManager.ToPagedList(pageListNumber, 10); return PartialView(); } public ActionResult ChangeConnectionString(ConnectionStringParam connection) { if (!ModelState.IsValid) { return Json(new JsonPost {Error = "Все поля обязательны для заполнения"}); } var writer = new StreamWriter(PathProvider.ConnectionString); var param = JsonConvert.SerializeObject(connection); writer.WriteLine(param); writer.Close(); return Json(new JsonPost { Error = "Успешно изменено" }); } public ActionResult GetAllSmsSettings() { var link = JsonConvert.DeserializeObject(_optionRepository.GetOption("LinkParameters")); var sms = JsonConvert.DeserializeObject(_optionRepository.GetOption("SmscParameters")); var types = new List