Beispiel #1
0
        public async Task <NewTicketSummary> New(ITicketCreation ticket)
        {
            IProjection projection = await this.projRepo.GetById(ticket.ProjectionId);

            await this.projRepo.DecreaseAvailableSeats(projection.Id);

            string movieName = await this.movieRepo.GetMovieNameById(projection.MovieId);

            var room = await this.roomRepo.GetById(projection.RoomId);

            var cinemaName = await this.cinemaRepo.GetCinemaNameById(room.CinemaId);

            await this.ticketRepo.Insert(
                new Ticket(
                    projection.StartDate,
                    movieName,
                    cinemaName,
                    room.Number,
                    ticket.Row,
                    ticket.Column,
                    projection.Id));

            //TODO: remove message?
            return(new NewTicketSummary(true, StringConstants.TicketCreated));
        }
Beispiel #2
0
        public async Task <NewTicketSummary> NewAsync(ITicketCreation reservation)
        {
            ITicket newTicket = await ticketRepo.InsertAsync(
                new Ticket(
                    reservation.ProjectionId,
                    reservation.Row,
                    reservation.Column));

            await projectionRepo.DecreaseAvailableSeatsAsync(reservation.ProjectionId);

            //preparing data for ticketOutputReceipt
            var currProjection = await projectionRepo.GetProjectionByIdAsync(newTicket.ProjectionId);

            var currMovie = await movieRepo.GetByIdAsync(currProjection.MovieId);

            var currRoom = await roomRepo.GetByIdAsync(currProjection.RoomId);

            var currCinema = await cinemaRepo.GetByIdAsync(currRoom.CinemaId);

            TicketOutputReceipt ticketOutputReceipt = new TicketOutputReceipt(
                newTicket.Id,
                currProjection.StartDate,
                currMovie.Name, currCinema.Name,
                currRoom.Number,
                newTicket.Row,
                newTicket.Column);

            return(new NewTicketSummary(true, ticketOutputReceipt));
        }
Beispiel #3
0
        public ITicket Insert(ITicketCreation ticket)
        {
            Ticket newTicket = new Ticket(
                ticket.ProjectionId,
                ticket.Guid,
                ticket.ProjectionStartDate,
                ticket.MovieName,
                ticket.CinemaName,
                ticket.RoomNum,
                ticket.Row,
                ticket.Column
                );

            db.Tickets.Add(newTicket);



            db.Projections
            .Where(p => p.Id == ticket.ProjectionId)
            .ToList()
            .ForEach(x => x.AvailableSeatsCount--);

            db.SaveChanges();
            return(newTicket);
        }
Beispiel #4
0
        public void Insert(ITicketCreation ticket)
        {
            Ticket newTicket = new Ticket(ticket.ProjectionId, ticket.Row, ticket.Column);

            db.Tickets.Add(newTicket);
            db.SaveChanges();
            id = newTicket.Id;
        }
Beispiel #5
0
        public async Task <ITicket> InsertAsync(ITicketCreation ticket)
        {
            Ticket newTicket = new Ticket(ticket.ProjectionId, ticket.Row, ticket.Column);

            Ticket savedTicket = db.Tickets.Add(newTicket);
            await db.SaveChangesAsync();

            return(savedTicket);
        }
        public async Task <ITicket> Insert(ITicketCreation ticket)
        {
            Ticket newTicket = new Ticket(ticket.ProjectionStartDate, ticket.Movie, ticket.Cinema, ticket.Room, ticket.Row, ticket.Column, ticket.ProjectionId);

            db.Tickets.Add(newTicket);
            await db.SaveChangesAsync();

            return(newTicket);
        }
Beispiel #7
0
        public async Task <NewTicketSummary> New(ITicketCreation model)
        {
            IProjection projection = await this.projRepo.GetById(model.ProjectionId);

            if (DateTime.Now > projection.StartDate)
            {
                return(new NewTicketSummary(false, StringConstants.MovieStarted));
            }

            return(await newTicket.New(model));
        }
        public async Task <NewCreationSummary> New(ITicketCreation ticket)
        {
            DateTime currentDate = DateTime.UtcNow;

            if (currentDate > ticket.ProjectionStartDate)
            {
                return(new NewCreationSummary(false, "Cannot buy seats for finished projection"));
            }

            return(await newTicket.New(ticket));
        }
        public async Task <NewCreationSummary> New(ITicketCreation ticket)
        {
            ITicket ticketDb = ticketRepo.Get(ticket.Row, ticket.Column, ticket.ProjectionId);

            if (ticketDb != null)
            {
                return(new NewCreationSummary(false, "The seats are already bought"));
            }

            return(await newTicket.New(ticket));
        }
Beispiel #10
0
        public async Task <NewTicketSummary> New(ITicketCreation model)
        {
            IProjection projection = await this.projRepo.GetById(model.ProjectionId);

            if (projection == null)
            {
                return(new NewTicketSummary(false, $"Projection with id {model.ProjectionId} does not exist"));
            }

            return(await newTicket.New(model));
        }
        public async Task <NewCreationSummary> New(ITicketCreation ticket)
        {
            IReservation reservationDb = await reserveRepo.Get(ticket.Row, ticket.Column, ticket.ProjectionId);

            if (reservationDb != null)
            {
                return(new NewCreationSummary(false, "Cannot buy reserved seats"));
            }

            return(await newTicket.New(ticket));
        }
Beispiel #12
0
        public async Task <NewCreationSummary> New(ITicketCreation ticket)
        {
            DateTime currentDate = DateTime.UtcNow;
            TimeSpan ts          = ticket.ProjectionStartDate - currentDate;

            if (ts.TotalMinutes > 0 && ts.TotalMinutes < 10)
            {
                return(new NewCreationSummary(false, "Cannot buy seats with reservation for projection starting in less than 10 minutes"));
            }

            return(await newTicket.New(ticket));
        }
        public NewTicketSummary New(ITicketCreation ticket)
        {
            IProjection projection = projRepo.GetById(ticket.ProjectionId);

            DateTime now = DateTime.UtcNow;

            if (projection.StartDate < now)
            {
                return(new NewTicketSummary(false, "You have to purchase a ticket before beginning of the projection!"));
            }

            return(_newTicketNoRes.New(ticket));
        }
        public async Task <NewTicketSummary> NewAsync(ITicketCreation ticket)
        {
            var currProjection = await projectionsRepo.GetProjectionByIdAsync(ticket.ProjectionId);

            if (currProjection.StartDate <= DateTime.Now)
            {
                var constraintMessage = "It is too late to buy tickets for this projection! Seats are no longer available.";

                return(new NewTicketSummary(false, constraintMessage));
            }
            else
            {
                return(await newTicket.NewAsync(ticket));
            }
        }
Beispiel #15
0
        public async Task <NewCreationSummary> New(ITicketCreation ticket)
        {
            var reservations = await reserveRepo.GetAllReservations();

            await reserveRepo.CancelExpiredReservations(reservations);

            var reservationDb = await reserveRepo.Get(ticket.Row, ticket.Column, ticket.ProjectionId);

            if (reservationDb == null)
            {
                return(new NewCreationSummary(false, "Cannot buy seats for expired reservation"));
            }

            return(await newTicket.New(ticket));
        }
        public async Task <NewTicketSummary> New(ITicketCreation ticket)
        {
            var projection = await this.projRepo.GetById(ticket.ProjectionId);

            var room = await this.roomRepo.GetById(projection.RoomId);

            if (ticket.Row < 0 || ticket.Row > room.SeatsPerRow ||
                ticket.Column < 0 || ticket.Column > room.Rows)
            {
                return(new NewTicketSummary(false, $"Seat with position row: {ticket.Row}" +
                                            $" and column: {ticket.Column} does not exist"));
            }

            return(await newTicket.New(ticket));
        }
        public NewTicketSummary New(ITicketCreation ticket)
        {
            IEnumerable <IReservation> reservedSeats  = ticketRepo.GetReservedSeats(ticket.ProjectionId);
            IEnumerable <ITicket>      purchasedSeats = ticketRepo.GetPurchasedSeats(ticket.ProjectionId);

            bool checkReservations = reservedSeats.Any(x => x.Row == ticket.Row && x.Column == ticket.Column);
            bool checkTickets      = purchasedSeats.Any(x => x.Row == ticket.Row && x.Column == ticket.Column);

            if (checkReservations || checkTickets)
            {
                return(new NewTicketSummary(false, "This seat is reserved"));
            }

            return(_newTicketNoRes.New(ticket));
        }
Beispiel #18
0
        public async Task Insert(ITicketCreation ticket)
        {
            Ticket newTicket = new Ticket(
                ticket.ProjectionStartDate,
                ticket.MovieName,
                ticket.CinemaName,
                ticket.RoomNumber,
                ticket.Row,
                ticket.Column,
                ticket.ProjectionId);

            this.db.Tickets.Add(newTicket);

            await this.db.SaveChangesAsync();
        }
        public async Task <NewCreationSummary> New(ITicketCreation ticket)
        {
            var reservations = await reserveRepo.GetAllReservations();

            await reserveRepo.CancelExpiredReservations(reservations);

            DateTime currentDate = DateTime.UtcNow;
            TimeSpan ts          = ticket.ProjectionStartDate - currentDate;

            if (ts.TotalMinutes > 0 && ts.TotalMinutes < 10)
            {
                return(new NewCreationSummary(false, "Cannot buy seats for projection starting in less than 10 minutes"));
            }

            return(await newTicket.New(ticket));
        }
        public async Task <NewTicketSummary> NewAsync(ITicketCreation ticket)
        {
            var existinglReservation = await reservationRepo
                                       .GetAsync(ticket.ProjectionId, ticket.Row, ticket.Column);

            var existingTicket = await ticketRepo.GetAsync(ticket.ProjectionId, ticket.Row, ticket.Column);

            if (existinglReservation != null || existingTicket != null)
            {
                var constraintMessage = "This seat is not available! You can not buy ticket for it";

                return(new NewTicketSummary(false, constraintMessage));
            }
            else
            {
                return(await newTicket.NewAsync(ticket));
            }
        }
        public async Task <NewTicketSummary> New(ITicketCreation ticket)
        {
            IProjection projection = await this.projRepo.GetById(ticket.ProjectionId);

            DateTime projectionStartdate = await this.projRepo.GetProjectionStartDate(projection.Id);

            if (DateTime.Now.AddMinutes(10) >= projectionStartdate)
            {
                int count = await this.reservationRepository.RemoveAllReservations(projection.Id);

                await this.projRepo.IncreaseAvailableSeats(projection.Id, count);
            }

            bool available = await this.projRepo.CheckIfSeatIsAvailable
                                 (ticket.ProjectionId, ticket.Row, ticket.Column);

            if (available == false)
            {
                return(new NewTicketSummary(false, StringConstants.OccupiedPlace));
            }

            return(await newTicket.New(ticket));
        }
Beispiel #22
0
        public TicketReturnObject Insert(ITicketCreation ticket)
        {
            Ticket newTicket = new Ticket(ticket.ProjectionStartDate,
                                          ticket.MovieName, ticket.CinemaName, ticket.RoomNumber, ticket
                                          .Row, ticket.Col, ticket.ProjectionId);

            var projection = (Projection)this.projectionRepository.GetProjectionById(ticket.ProjectionId);

            db.Tickets.Add(newTicket);

            projection.AvailableSeatsCount--;
            db.SaveChanges();

            return(new TicketReturnObject
            {
                TicketUniqueKey = newTicket.Id,
                ProjectionStartDate = newTicket.ProjectionStartDate,
                MovieName = newTicket.MovieName,
                CinemaName = newTicket.CinemaName,
                RoomNumber = newTicket.RoomNumber,
                Row = newTicket.Row,
                Column = newTicket.Col
            });
        }
Beispiel #23
0
        public NewTicketSummary New(ITicketCreation ticket)
        {
            ticketsRepo.Insert(new Ticket(ticket.ProjectionId, ticket.Row, ticket.Column));

            return(new NewTicketSummary(true));
        }
Beispiel #24
0
        //private readonly ITicketRepository ticketRepo;
        //private readonly INewTicketNoRes newRes;

        //public NewTicketNoResExistingSeatsValidation(IReservationRepository reservationRepo, INewReservation newRes)
        //{
        //    this.reservationRepo = reservationRepo;
        //    this.newRes = newRes;
        //}

        //public NewReservationSummary New(IReservationCreation reservation)
        //{
        //    IRoom room = ticketRepo.GetRoomById(reservation.ProjectionId);

        //    bool checkSeatExistence = room.Rows < reservation.Row ||
        //                              room.SeatsPerRow < reservation.Column ||
        //                              reservation.Row <= 0 ||
        //                              reservation.Column <= 0;

        //    if (checkSeatExistence)
        //    {
        //        return new NewReservationSummary(false, "This seat does not exist");
        //    }

        //    return newRes.New(reservation);
        //}

        public NewTicketSummary New(ITicketCreation ticket)
        {
            throw new System.NotImplementedException();
        }
Beispiel #25
0
        public async Task <NewCreationSummary> New(ITicketCreation ticket)
        {
            await ticketRepo.Insert(new Ticket(ticket.ProjectionStartDate, ticket.Movie, ticket.Cinema, ticket.Room, ticket.Row, ticket.Column, ticket.ProjectionId));

            return(new NewCreationSummary(true));
        }