public async Task <bool> CreateTicket(TicketCreateInputModel model, string userId) { Customer customer = await this.customerServices.CustomerCreate(model.Customer); var ticketToAdd = new Ticket() { AdultCount = model.AdultCount, ChildrenCount = model.ChildCount, ExcursionId = model.ExcursionId, Notes = model.Notes, TourLanguageId = model.TourLanguageId, Customer = customer, Discount = model.Discount, PriceAfterDiscount = model.SumAfterDiscount }; var sale = await this.saleServices.GetOrCreateSaleById(userId); sale.Tickets.Add(ticketToAdd); ticketToAdd.Sale = sale; await context.Tickets.AddAsync(ticketToAdd); int result = await context.SaveChangesAsync(); return(result > 0); }
[HttpPost] //works! public async Task <IActionResult> TicketCreateAnother(TicketCreateInputModel model) { var userId = User.FindFirstValue(ClaimTypes.NameIdentifier); if (string.IsNullOrEmpty(userId)) { //TODO: proper error message return(this.Redirect("/Home/Index")); } if (model is null) { //TODO: add proper error message! return(this.Redirect("/Home/Index")); } bool IsCreated = await this.ticketServices.CreateTicket(model, userId); //it will still buy the tickets, but redirect to the pick Excursion button return(Redirect("/Excursion/Representative/TicketPickExcursion")); }
[HttpPost] //works too (decoupled it from ticket checkout) public async Task <IActionResult> TicketCreate(TicketCreateInputModel model) { var userId = User.FindFirstValue(ClaimTypes.NameIdentifier); if (string.IsNullOrEmpty(userId)) { //TODO: proper error message return(this.Redirect("/Home/Index")); } if (model is null) { //TODO: add proper error message! return(this.Redirect("/Home/Index")); } bool IsCreated = await this.ticketServices.CreateTicket(model, userId); //i won`t be making any special checkup for customers (not worth it i think?) return(this.Redirect("/Excursion/Representative/TicketCheckOut")); }
public async Task <IActionResult> TicketCheckOut(TicketCreateInputModel model) { var userId = User.FindFirstValue(ClaimTypes.NameIdentifier); var rep = await this.context.Users.FirstOrDefaultAsync(u => u.Id == userId); //these 3 are indeed necessary! var sale = await context .Sales .Include(s => s.Tickets) .ThenInclude(t => t.Excursion) .ThenInclude(e => e.ExcursionType) .FirstOrDefaultAsync(s => s.IsFinalized == false && s.Liquidation.RepresentativeId == rep.Id); var inputModel = new SaleCreateInputModel() { SaleId = sale.Id }; inputModel.TicketsViews = sale.Tickets.Select(t => new SaleCreateTicketViewModel { TicketId = t.Id, AdultCount = t.AdultCount, ChildCount = t.ChildrenCount, ExcursionName = t.Excursion.ExcursionType.Name, PricePerAdult = t.Excursion.PricePerAdult, PricePerChild = t.Excursion.PricePerChild, Discount = t.Discount }) .ToList(); inputModel.TotalSumAfterDiscount = inputModel.TicketsViews.Any() ? inputModel.TicketsViews.Sum(t => t.TotalSum) : 0; return(View(inputModel)); }