public async Task <ActionResult> Create(WagonType wagonType)
        {
            try {
                if (ModelState.IsValid)
                {
                    await dbContext.AddAsync(wagonType);

                    await dbContext.SaveChangesAsync();

                    return(RedirectToAction("Index"));
                }
                return(View());
            } catch {
                return(NotFound());
            }
        }
        public async Task <IActionResult> ReservationConfirmation(ReservationConfirmationViewModel reservationConfirmationViewModel)
        {
            try {
                var discount = await dbContext.Discount.FirstOrDefaultAsync(x =>
                                                                            x.IdDiscount == reservationConfirmationViewModel.IdDiscount);

                var ticket = await dbContext.Ticket
                             .Include(seat => seat.SeatNavigation)
                             .SingleOrDefaultAsync(x => x.IdTicket == reservationConfirmationViewModel.IdTicket);

                ticket.SeatNavigation.SeatAvailability       = false;
                dbContext.Entry(ticket.SeatNavigation).State = EntityState.Modified;
                var sale = new Sale {
                    IdPassenger = reservationConfirmationViewModel.IdPassenger,
                    IdTicket    = reservationConfirmationViewModel.IdTicket,
                    IdDiscount  = reservationConfirmationViewModel.IdDiscount,
                    SaleDate    = DateTime.Now,
                    TotalPrice  = reservationConfirmationViewModel.Price * discount.DiscountMultiply
                };
                await dbContext.AddAsync(sale);

                await dbContext.SaveChangesAsync();

                return(RedirectToAction("History"));
            } catch {
                return(NotFound());
            }
        }
        public async Task <IActionResult> Register(RegisterViewModel registerViewModel)
        {
            if (ModelState.IsValid)
            {
                try {
                    await using var transaction = dbContext.Database.BeginTransaction();
                    var salt = HashPassword.CreateSalt();
                    var hash = HashPassword.GenerateSaltedHash(Encoding.UTF8.GetBytes(registerViewModel.Password), salt);
                    var user = new User {
                        UserLogin = registerViewModel.Login,
                        UserSalt  = Convert.ToBase64String(salt),
                        UserHash  = Convert.ToBase64String(hash),
                        UserType  = "passenger"
                    };
                    await dbContext.User.AddAsync(user);

                    await dbContext.SaveChangesAsync();

                    var passenger = new Passenger {
                        IdUser                  = user.IdUser,
                        PassengerFullName       = registerViewModel.FullName,
                        PassengerBirthday       = registerViewModel.Birthday,
                        IdPassengerPassportType = registerViewModel.IdPassportType,
                        PassengerPassport       = registerViewModel.PassportData
                    };
                    await dbContext.Passenger.AddAsync(passenger);

                    await dbContext.SaveChangesAsync();

                    transaction.Commit();
                    await Authenticate(user);

                    return(RedirectToAction("Index", "Home"));
                } catch {
                    return(NotFound());
                }
            }
            ViewBag.PassportType = new SelectList(dbContext.PassportType.ToList(), "IdPassportType", "Passport");
            return(View(registerViewModel));
        }
Example #4
0
        public async Task <ActionResult> Create(TrainArrivalTown town)
        {
            try {
                if (ModelState.IsValid)
                {
                    var transaction = dbContext.Database.BeginTransaction();
                    await dbContext.TrainArrivalTown.AddAsync(town);

                    var departureTown = new TrainDepartureTown {
                        TownName = town.TownName
                    };
                    await dbContext.TrainDepartureTown.AddAsync(departureTown);

                    await dbContext.SaveChangesAsync();

                    transaction.Commit();
                    return(RedirectToAction("Index"));
                }
                return(View());
            } catch {
                return(NotFound());
            }
        }
Example #5
0
        public async Task<IActionResult> CreateWagonInformation(List<Wagon> wagons, List<int?> numberOfSeats) {
            try {
                await using var transaction = dbContext.Database.BeginTransaction();
                var trainWagons = dbContext.TrainWagon
                    .Where(x => x.IdTrain == int.Parse(Request.Cookies["idTrain"])).ToList();
                var nextTravelCount = 1;

                if (trainWagons.Count > 0) {
                    for (int i = 0; i < trainWagons.Count; i++) {
                        if (nextTravelCount == trainWagons[i].TrainTravelCount) {
                            nextTravelCount++;
                        }
                    }
                }

                var trainWagon = new TrainWagon {
                    IdTrain = int.Parse(Request.Cookies["idTrain"]),
                    TrainTravelCount = nextTravelCount
                };
                await dbContext.TrainWagon.AddAsync(trainWagon);
                await dbContext.SaveChangesAsync();

                var wagonEntities = new List<Wagon>();
                for (int i = 0; i < wagons.Count; i++) {
                    wagonEntities.Add(new Wagon {
                        IdTrainWagon = trainWagon.IdTrainWagon,
                        WagonNumber = int.Parse($"{i + 1}"),
                        IdWagonType = wagons[i].IdWagonType
                    });
                }

                await dbContext.Wagon.AddRangeAsync(wagonEntities);
                await dbContext.SaveChangesAsync();

                var seats = new List<Seat>();
                for (int i = 0; i < wagonEntities.Count; i++) {
                    for (int j = 1; j <= numberOfSeats[i]; j++) {
                        seats.Add(new Seat {
                            IdWagon = wagonEntities[i].IdWagon,
                            Seat1 = j,
                            SeatAvailability = true
                        });
                    }
                }

                await dbContext.Seat.AddRangeAsync(seats);
                await dbContext.SaveChangesAsync();

                var tickets = new List<Ticket>();
                var time = DateTime.Parse(Request.Cookies["ticketDate"]).ToString("G");
                for (int i = 0; i < seats.Count; i++) {
                    tickets.Add(new Ticket {
                        IdSeat = seats[i].IdSeat,
                        IdTrainDepartureTown = int.Parse(Request.Cookies["idDepartureTown"]),
                        IdTrainArrivalTown = int.Parse(Request.Cookies["idArrivalTown"]),
                        TicketDate = DateTime.Parse(time),
                        TicketTravelTime = TimeSpan.Parse(Request.Cookies["ticketTravelDuration"])
                    });
                }

                await dbContext.Ticket.AddRangeAsync(tickets);
                await dbContext.SaveChangesAsync();

                await transaction.CommitAsync();
                return RedirectToAction("Index");
            } catch {
                return NotFound();
            }
        }