public async Task <IActionResult> PutTicketPurchaseSeat(int id, TicketPurchaseSeat ticketPurchaseSeat)
        {
            if (id != ticketPurchaseSeat.EventSeatId)
            {
                return(BadRequest());
            }

            _context.Entry(ticketPurchaseSeat).State = EntityState.Modified;

            try
            {
                await _context.SaveChangesAsync();
            }
            catch (DbUpdateConcurrencyException)
            {
                if (!TicketPurchaseSeatExists(id))
                {
                    return(NotFound());
                }
                else
                {
                    throw;
                }
            }

            return(NoContent());
        }
Пример #2
0
        // returns a tuple where Item1 corresponds to the success of the attempt, and Item2 is the associated status message
        public async Task <Tuple <bool, object> > TryAddPurchase(IEnumerable <int> eventSeatIds, string paymentMethod)
        {
            // check that event seats with the given ids exist and are available for purchase
            var purchaseSeats = new List <EventSeat>();

            foreach (int id in eventSeatIds)
            {
                var target = _context.EventSeat.SingleOrDefault(es => es.EventSeatId == id);
                if (target == null)
                {
                    return(new Tuple <bool, object>(false, $"An event seat with event_seat_id {id} does not exist"));
                }

                bool isPurchased = _context.TicketPurchaseSeat.ToList().Any(tps => tps.EventSeatId == id);
                if (isPurchased)
                {
                    return(new Tuple <bool, object>(false, $"The event seat with event_seat_id {id} has already been purchased"));
                }

                purchaseSeats.Add(target);
            }

            // make the purchase
            var purchase = new TicketPurchase {
                PaymentMethod    = paymentMethod,
                ConfirmationCode = _rand.Next(100000, 999999).ToString()
            };
            var     ticketPurchases   = new List <TicketPurchaseSeat>();
            decimal totalPurchaseCost = 0;

            foreach (EventSeat es in purchaseSeats)
            {
                decimal seatPrice    = (decimal)_context.Seat.SingleOrDefault(s => s.SeatId == es.SeatId).Price;
                var     seatPurchase = new TicketPurchaseSeat
                {
                    EventSeat    = es,
                    Purchase     = purchase,
                    SeatSubtotal = es.EventSeatPrice + seatPrice
                };
                ticketPurchases.Add(seatPurchase);
                totalPurchaseCost += (decimal)seatPurchase.SeatSubtotal;
            }

            purchase.PaymentAmount = totalPurchaseCost;
            _context.TicketPurchase.Add(purchase);
            await _context.SaveChangesAsync();

            foreach (TicketPurchaseSeat ticket in ticketPurchases)
            {
                _context.TicketPurchaseSeat.Add(ticket);
            }
            await _context.SaveChangesAsync();

            return(new Tuple <bool, object>(true, purchase));
        }
Пример #3
0
        public static void Initialize(ssdticketsContext context)
        {
            context.Database.EnsureCreated();

            if (context.Venue.Any())
            {
                // DB has already been seeded
                return;
            }

            // Initialization constants
            const string VENUE_NAME = "BCIT Stadium";

            const int NUM_SECTIONS     = 10;
            const int ROWS_PER_SECTION = 10;
            const int SEATS_PER_ROW    = 10;
            const int CAPACITY         = NUM_SECTIONS * ROWS_PER_SECTION * SEATS_PER_ROW;

            const decimal VENUE_SEAT_PRICE = 12.50m;

            // Venue
            Venue bcit = new Venue {
                Capacity = CAPACITY, VenueName = VENUE_NAME
            };

            context.Venue.Add(bcit);
            context.SaveChanges();

            // Sections
            List <Section> sections = new List <Section>();

            for (int i = 0; i < NUM_SECTIONS; i++)
            {
                var section = new Section
                {
                    VenueName   = bcit.VenueName,
                    SectionName = $"Section {i + 1}"
                };

                sections.Add(section);
                context.Section.Add(section);
            }
            context.SaveChanges();

            // Rows
            List <Row> rows = new List <Row>();

            foreach (Section s in sections)
            {
                for (int i = 0; i < ROWS_PER_SECTION; i++)
                {
                    var row = new Row {
                        Section = s, RowName = $"Row {i + 1}"
                    };
                    rows.Add(row);
                    context.Row.Add(row);
                }
                context.SaveChanges();
            }

            // Seats
            List <Seat> seats = new List <Seat>();

            foreach (Row r in rows)
            {
                for (int i = 0; i < SEATS_PER_ROW; i++)
                {
                    var seat = new Seat {
                        Row = r, Price = VENUE_SEAT_PRICE
                    };
                    seats.Add(seat);
                    context.Seat.Add(seat);
                }
                context.SaveChanges();
            }

            // Events
            var events = new Event[] {
                new Event {
                    EventName = "Conference", VenueName = VENUE_NAME
                },
                new Event {
                    EventName = "Barbecue", VenueName = VENUE_NAME
                },
                new Event {
                    EventName = "Hackathon", VenueName = VENUE_NAME
                },
                new Event {
                    EventName = "Convention", VenueName = VENUE_NAME
                },
                new Event {
                    EventName = "Soccer Championships", VenueName = VENUE_NAME
                }
            };

            foreach (Event e in events)
            {
                context.Event.Add(e);
            }
            context.SaveChanges();

            // Event Seats
            // Prices for events are 10.50, plus an extra $5 for each row closer to the front
            //   (eg. if there are 10 rows, the 10th row will have no extra cost, and the 1st row will be an extra $45)
            foreach (Event e in events)
            {
                decimal eventPrice = 10.50m;

                foreach (Seat venueSeat in seats)
                {
                    var eventSeat = new EventSeat {
                        Seat           = venueSeat,
                        Event          = e,
                        EventSeatPrice = eventPrice + (5 * (ROWS_PER_SECTION - getRowNumber(venueSeat.Row)))
                    };
                    context.EventSeat.Add(eventSeat);
                }
                context.SaveChanges();
            }

            // Ticket Purchases
            // Each event has the first row of section 1 sold out
            // Each event also has seats 1 and 2 sold in the second row of section 1
            foreach (Event e in events)
            {
                // Purchase first row in a single transaction
                IEnumerable <EventSeat> firstRow = e.EventSeat.Where(es => getRowNumber(es.Seat.Row) == 1 && es.Seat.Row.SectionId == 1);
                var firstRowPurchase             = new TicketPurchase {
                    PaymentMethod = "Credit Card", ConfirmationCode = "123456"
                };
                decimal totalPurchaseCost = 0;

                var tickets = new List <TicketPurchaseSeat>();
                foreach (EventSeat es in firstRow)
                {
                    var seatPurchase = new TicketPurchaseSeat {
                        EventSeat    = es,
                        Purchase     = firstRowPurchase,
                        SeatSubtotal = es.EventSeatPrice + es.Seat.Price
                    };
                    tickets.Add(seatPurchase);
                    totalPurchaseCost += (decimal)seatPurchase.SeatSubtotal;
                }

                firstRowPurchase.PaymentAmount = totalPurchaseCost;
                context.TicketPurchase.Add(firstRowPurchase);
                context.SaveChanges();

                foreach (TicketPurchaseSeat ticket in tickets)
                {
                    context.TicketPurchaseSeat.Add(ticket);
                }
                context.SaveChanges();

                // Purchase seats 1 and 2 of second row
                IEnumerable <EventSeat> secondRowSeats = e.EventSeat.Where(
                    es => getRowNumber(es.Seat.Row) == 2 && es.Seat.Row.SectionId == 1 && (es.SeatId % SEATS_PER_ROW == 1 || es.SeatId % SEATS_PER_ROW == 2));
                var secondRowPurchase = new TicketPurchase {
                    PaymentMethod = "Debit", ConfirmationCode = "789123"
                };
                totalPurchaseCost = 0;

                tickets = new List <TicketPurchaseSeat>();
                foreach (EventSeat es in secondRowSeats)
                {
                    var seatPurchase = new TicketPurchaseSeat
                    {
                        EventSeat    = es,
                        Purchase     = secondRowPurchase,
                        SeatSubtotal = es.EventSeatPrice + es.Seat.Price
                    };
                    tickets.Add(seatPurchase);
                    totalPurchaseCost += (decimal)seatPurchase.SeatSubtotal;
                }

                secondRowPurchase.PaymentAmount = totalPurchaseCost;
                context.TicketPurchase.Add(secondRowPurchase);
                context.SaveChanges();

                foreach (TicketPurchaseSeat ticket in tickets)
                {
                    context.TicketPurchaseSeat.Add(ticket);
                }
                context.SaveChanges();
            }
        }
        public async Task <ActionResult <TicketPurchaseSeat> > PostTicketPurchaseSeat(TicketPurchaseSeat ticketPurchaseSeat)
        {
            _context.TicketPurchaseSeat.Add(ticketPurchaseSeat);
            try
            {
                await _context.SaveChangesAsync();
            }
            catch (DbUpdateException)
            {
                if (TicketPurchaseSeatExists(ticketPurchaseSeat.EventSeatId))
                {
                    return(Conflict());
                }
                else
                {
                    throw;
                }
            }

            return(CreatedAtAction("GetTicketPurchaseSeat", new { id = ticketPurchaseSeat.EventSeatId }, ticketPurchaseSeat));
        }
Пример #5
0
        public async Task <ActionResult <TicketPurchaseSeat> > PostTicketPurchaseSeat(TicketPurchaseSeat ticketPurchaseSeat)
        {
            _context.TicketPurchaseSeats.Add(ticketPurchaseSeat);
            await _context.SaveChangesAsync();

            return(CreatedAtAction("GetTicketPurchaseSeat", new { id = ticketPurchaseSeat.Id }, ticketPurchaseSeat));
        }