示例#1
0
        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);
        }
示例#2
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"));
        }
示例#3
0
        [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"));
        }
示例#4
0
        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));
        }