public async Task<ActionResult> RegisterFinish(OrderViewModel modelObj, string slug) { if (modelObj == null) modelObj = new OrderViewModel(); TryUpdateModel(modelObj); using (var ctx = new SportDataContext()) { var userManager = new UserManager<User>(new UserStore<User>(ctx)); var currentUser = await userManager.FindByIdAsync(User.Identity.GetUserId()); var team = SearchService.FindTeam(modelObj.Entrant, ctx); if (team == null) team = modelObj.CreateTeam(); var driver1 = await SearchService.FindUser(modelObj.Driver1License, ctx) ?? await SearchService.FindUserById(modelObj.Driver1Id, ctx) ?? await SearchService.FindUserName(modelObj.Driver1FirstName, modelObj.Driver1LastName, ctx); var driver2 = await SearchService.FindUser(modelObj.Driver2License, ctx) ?? await SearchService.FindUserById(modelObj.Driver2Id, ctx) ?? await SearchService.FindUserName(modelObj.Driver2FirstName, modelObj.Driver2LastName, ctx); //Защита от if (driver1==null || string.IsNullOrWhiteSpace(driver1.LastName + driver1.FirstName + "")) { driver1 = modelObj.CreateDriver1(); var existingUser = await userManager.FindByNameAsync(driver1.UserName); if (existingUser != null) driver1.UserName = Guid.NewGuid().ToString(); } if (driver2 == null || string.IsNullOrWhiteSpace(driver2.LastName + driver2.FirstName + "")) { driver2 = modelObj.CreateDriver2(); var existingUser = await userManager.FindByNameAsync(driver2.UserName); if (existingUser != null) driver2.UserName = Guid.NewGuid().ToString(); } var car = modelObj.CreateCar(); var ev = await EventService.GetEvent(slug, ctx); Dictionary<SubEvent, Order> orders = new Dictionary<SubEvent,Order>(); ViewBag.Error = null; if (driver1.Id == driver2.Id) { ViewBag.Error = "В вашей заявке совпадают первый и второй водитель. Пожалуйста, проверьте правильность заполнения заявки. Если у вас в настоящее время нет полной информации о составе экипажа - оставьте недостающие поля пустыми."; } if (string.IsNullOrWhiteSpace(driver1.LastName + driver1.FirstName + driver2.LastName + driver2.FirstName)) { ViewBag.Error = "Укажите пожалуйста в заявке не менее 1 водителя."; } if (modelObj.Groups == null || modelObj.Groups.Count() == 0) { ViewBag.Error = "В вашей заявке на " + ev.Title + " не указано ни одной зачетной группы. Пожалуйста, укажите минимум 1 зачет из списка."; } if(!string.IsNullOrWhiteSpace(ViewBag.Error)) return View("RegistrationError", ev); foreach (var group in modelObj.Groups) { var tokens = group.Split('_'); var subEv = ev.SubEvents.First(e=>e.Id == int.Parse(tokens[0])); if(!orders.ContainsKey(subEv)) { orders.Add(subEv, new Order() { Driver = driver1, CoDriver = driver2, Team = team, Car = car, Redimmed = false, Confirmed = false, CreatedAt= DateTime.Now, StartNumber="", Group = new List<Group>(), CreatedBy = currentUser }); } orders[subEv].Group.Add(subEv.Groups.First(g => g.Id == int.Parse(tokens[1]))); } foreach (var item in orders.Keys) { item.Tag.Orders = item.Tag.Orders ?? new List<Order>(); item.Tag.Orders.Add(orders[item]); } try { await ctx.SaveChangesAsync(); } catch (Exception ex) { throw; } return View("RegistrationComplete", ev); } }
public async Task<ActionResult> AccreditationFinish(Accreditation model, string slug) { using(var ctx = new SportDataContext()) { var userManager = new UserManager<User>(new UserStore<User>(ctx)); var currentUser = await userManager.FindByIdAsync(User.Identity.GetUserId()); model.User = currentUser; var ev = await EventService.GetEvent(slug, ctx); var tag = ev.SubEvents.Select(s => s.Tag).First(); model.Tag = tag; tag.Accreditations.Add(model); await ctx.SaveChangesAsync(); ViewBag.Slug = slug; ViewBag.EventName = ev.Title; EmailService.SendAdministrativeMail("Поступила заявка на аккредитацию на " + ev.Title, @"Поступила заявка на аккредитацию на " + ev.Title + " от " + model.User.LastName + " " + model.User.FirstName + ". Пожалуйста перейдите по ссылке http://www.afspb.org.ru/controlpanel/accreditations/validate/" + model.Id + " для обработки заявки."); return View(); } }