예제 #1
0
        public async virtual Task <ActionResult> Create(CreateFlightViewModel flightModel)
        {
            if (ModelState.IsValid)
            {
                Flight flight = new Flight();

                var sourceAiport      = this.aiportList.FirstOrDefault(x => x.Code == flightModel.SourceAirportID);
                var destinationAiport = this.aiportList.FirstOrDefault(x => x.Code == flightModel.DestinationAirportID);

                Mapper.Map <CreateFlightViewModel, Flight>(flightModel, flight);
                Mapper.Map <AiportViewModel, Aiport>(sourceAiport, flight.Source);
                Mapper.Map <AiportViewModel, Aiport>(destinationAiport, flight.Destination);

                flight.LastModifiedUser = User.Identity.Name;
                flight.LastModifiedDate = DateTime.Now;

                flight.Id = await flightService.PostFlight(flight);

                return(RedirectToAction("Index"));
            }
            else
            {
                ViewBag.IsNew      = true;
                ViewBag.AiportList = this.aiportList;

                return(View(flightModel));
            }
        }
예제 #2
0
        public async Task <IActionResult> Create(CreateFlightViewModel inputModel)
        {
            var flight = new Flight
            {
                FromAirport = inputModel.FromAirport,
                ToAirport   = inputModel.ToAirport,
                Airplane    = inputModel.AirplaneId
            };

            await this.flights.Save(flight);

            return(Ok());
        }
예제 #3
0
        public IActionResult CreateFlight(CreateFlightViewModel model)
        {
            if (ModelState.IsValid)
            {
                Flight flight = new Flight()
                {
                    From             = model.From,
                    To               = model.To,
                    BusinessCapacity = model.BusinessCapacity,
                    EconomyCapacity  = model.EconomyCapacity,
                    PilotName        = model.PilotName,
                    PlaneModel       = model.PlanetModel,
                    PlaneId          = model.AirplaneId,
                    Arrival          = new DateTime(model.DateOfArrival.Year,
                                                    model.DateOfArrival.Month,
                                                    model.DateOfArrival.Day,
                                                    model.TimeOfArrival.Hour,
                                                    model.TimeOfArrival.Minute,
                                                    0),
                    Departure = new DateTime(model.DateOfDeparture.Year,
                                             model.DateOfDeparture.Month,
                                             model.DateOfDeparture.Day,
                                             model.TimeOfDeparture.Hour,
                                             model.TimeOfDeparture.Minute,
                                             0)
                };

                if (flight.Arrival < flight.Departure)
                {
                    ViewData["Error"] = "Arrival cannot be before Departure!";
                    return(View(model));
                }
                else if (flight.Departure < DateTime.Now)
                {
                    ViewData["Error"] = "Date of departure should be after current time";
                    return(View(model));
                }
                else
                {
                    context.Flights.Add(flight);
                    context.SaveChanges();
                }
            }
            else
            {
                ViewData["Error"] = "Something went wrong";
                return(View());
            }
            return(View("Flights", GetAllUpcomingFlights(true)));
        }
예제 #4
0
        public IActionResult Create()
        {
            CreateFlightViewModel model = new CreateFlightViewModel()
            {
                Airplanes    = _flightRepository.GetComboAirplanes(),
                Destinations = _flightRepository.GetComboDestinations(),
                Status       = _flightRepository.GetComboStatus(),
                StatusId     = 1,
            };


            ViewBag.minDate = DateTime.Now;
            ViewBag.format  = "dd/MM/yyyy HH:mm";

            return(View(model));
        }
예제 #5
0
        public ActionResult Create(CreateFlightViewModel createFlightViewModel)
        {
            if (ModelState.IsValid)
            {
                int year    = createFlightViewModel.Date.Year;
                int month   = createFlightViewModel.Date.Month;
                int day     = createFlightViewModel.Date.Day;
                int hours   = createFlightViewModel.Hours;
                int minutes = createFlightViewModel.Minutes;

                DateTime flightDate = new DateTime(year, month, day, hours, minutes, 0);
                bool     err        = false;
                if (createFlightViewModel.ToAirportId == createFlightViewModel.FromAirportId)
                {
                    ViewBag.SameAirportErrorMessage = "Ne smeju biti izabrani isti aerodromi!";
                    err = true;
                }
                if (flightDate < DateTime.Now.AddDays(1))
                {
                    ViewBag.TimeOfFlightErrorMessage = "Let se mora kreirati barem dan pre njegovog trenutka polaska!";
                    err = true;
                }

                if (!err)
                {
                    int    ticketsLeft = db.Avions.Single(a => a.Id == createFlightViewModel.AvionId).Capacity;
                    Flight flight      = new Flight
                    {
                        AvionId       = createFlightViewModel.AvionId,
                        FromAirportId = createFlightViewModel.FromAirportId,
                        ToAirportId   = createFlightViewModel.ToAirportId,
                        price         = createFlightViewModel.Price,
                        time          = flightDate,
                        TicketsLeft   = ticketsLeft
                    };
                    db.Flights.Add(flight);
                    db.SaveChanges();
                    return(RedirectToAction("Index"));
                }
            }

            ViewBag.AvionId       = new SelectList(db.Avions, "Id", "Model", createFlightViewModel.AvionId);
            ViewBag.FromAirportId = new SelectList(db.Airports, "Id", "Name", createFlightViewModel.FromAirportId);
            ViewBag.ToAirportId   = new SelectList(db.Airports, "Id", "Name", createFlightViewModel.ToAirportId);
            return(View(createFlightViewModel));
        }
예제 #6
0
        // GET: FlightsController/Create
        public ActionResult Create()
        {
            string airport = "";

            Dictionary <string, object> queryDict = new Dictionary <string, object>();

            queryDict.Add("airport", airport);

            var query    = new Neo4jClient.Cypher.CypherQuery("MATCH (n:Airport) RETURN n", queryDict, CypherResultMode.Set);
            var airports = ((IRawGraphClient)client).ExecuteGetCypherResults <Airport>(query).ToList();

            CreateFlightViewModel viewModel = new CreateFlightViewModel()
            {
                Airports = airports
            };

            return(View(viewModel));
        }
예제 #7
0
        // GET: Flight/Edit/5
        public async Task <IActionResult> Edit(int?id)
        {
            if (id == null)
            {
                return(NotFound());
            }

            var flight = await _flightRepository.GetFlightWithObjectsAsync(id.Value);

            if (flight == null)
            {
                return(NotFound());
            }

            CreateFlightViewModel model = new CreateFlightViewModel()
            {
                Id           = flight.Id,
                Airplanes    = _flightRepository.GetComboAirplanes(),
                Destinations = _flightRepository.GetComboDestinations(),
                Status       = _flightRepository.GetComboStatus(),
                Tickets      = _flightRepository.GetComboTickets(flight.Id),
                From         = flight.From.Id,
                To           = flight.To.Id,
                Departure    = flight.Departure,
                Arrival      = flight.Arrival,
                AirplaneId   = flight.Airplane.Id,
                StatusId     = flight.Status.Id,
            };

            if (model.StatusId == 2 || model.StatusId == 3) // Voos terminados ou cancelados não podem ser editados
            {
                // Obter o state active
                var status = _context.Status.Where(x => x.Id == model.StatusId).FirstOrDefault();
                ViewBag.message = $"Flight is {status.StatusName}! Can't be deleted";
                return(View(model));
            }

            ViewBag.minDate = DateTime.Now;
            ViewBag.format  = "dd/MM/yyyy HH:mm";
            return(View(model));
        }
예제 #8
0
        // GET: FlightsController/Edit/5
        public ActionResult Edit(int id)
        {
            var query = client.Cypher
                        .Match("(n:Airport)-[rel:FLIGHT_TO]->(m:Airport)")
                        .Where((Flight rel) => rel.id == id)
                        .Return((n, rel, m) => new
            {
                Od  = n.As <Airport>(),
                Let = rel.As <Flight>(),
                Do  = m.As <Airport>()
            }).Results.SingleOrDefault();


            CreateFlightViewModel viewModel = new CreateFlightViewModel();

            viewModel.Flight        = query.Let;
            viewModel.AirportFromId = query.Od.id;
            viewModel.AirportToId   = query.Do.id;
            viewModel.Airports.Add(query.Od);
            viewModel.Airports.Add(query.Do);
            viewModel.Disable = true;

            return(View("Create", viewModel));
        }
예제 #9
0
        public async Task <IActionResult> Create(CreateFlightViewModel model)
        {
            if (ModelState.IsValid)
            {
                var airplane = await _airplaneRepository.GetAirplaneWithUserAsync(model.AirplaneId);

                if (airplane == null)
                {
                    return(NotFound());
                }

                // Verificar a disponibilidade do avião ( É visto na tebela dos voos - Enviando o id do avião)
                bool isAvailable = _flightRepository.AirplaneIsAvailable(model.AirplaneId, model.Departure, model.Arrival);

                // Obter o state active
                var status = _context.Status.Where(x => x.StatusName == "Active").FirstOrDefault();

                var to = await _destinationRepository.GetDestinationWithUserCityAndCoutryAsync(model.To);

                var from = await _destinationRepository.GetDestinationWithUserCityAndCoutryAsync(model.From);

                if (isAvailable)
                {
                    Flight flight = new Flight()
                    {
                        From      = from,
                        To        = to,
                        Departure = model.Departure,
                        Arrival   = model.Arrival,
                        Airplane  = airplane,
                        Status    = status,
                        Business  = airplane.BusinessSeats,
                        Economic  = airplane.EconomySeats,
                    };

                    try
                    {
                        await _flightRepository.CreateAsync(flight);

                        return(RedirectToAction(nameof(Index)));
                    }

                    catch (Exception ex)
                    {
                        ModelState.AddModelError(string.Empty, ex.InnerException.Message);
                        GetCombos(model);
                        ViewBag.minDate   = DateTime.Now;
                        ViewBag.format    = "dd/MM/yyyy HH:mm";
                        ViewBag.departure = model.Departure;
                        ViewBag.arrival   = model.Arrival;

                        return(View(model));
                    }
                }

                GetCombos(model);
                ModelState.AddModelError(string.Empty, "Airplane isn't available. Choose another!");
                return(View(model));
            }


            GetCombos(model);
            ViewBag.minDate = DateTime.Now;
            ViewBag.format  = "dd/MM/yyyy HH:mm";
            return(View(model));
        }
예제 #10
0
        public async Task <IActionResult> Edit(CreateFlightViewModel model)
        {
            if (ModelState.IsValid)
            {
                // Saber se o estado mudou (só se pode alterar de activo para canceled)
                var newStatus = _context.Status.Where(x => x.Id == model.StatusId).FirstOrDefault();
                if (newStatus == null)
                {
                    return(NotFound());
                }

                // Saber se o avião mudou
                var airplane = await _airplaneRepository.GetAirplaneWithUserAsync(model.AirplaneId);

                if (airplane == null)
                {
                    return(NotFound());
                }
                bool isAirplaneChange = airplane.Id == model.AirplaneId ? false : true;

                bool isAvailable = true;

                if (isAirplaneChange) // Se o avião mudou tenho que verificar a disponibilidade do novo avião
                {
                    isAvailable = _flightRepository.AirplaneIsAvailable(model.AirplaneId, model.Departure, model.Arrival);
                }

                var to = await _destinationRepository.GetDestinationWithUserCityAndCoutryAsync(model.To);

                var from = await _destinationRepository.GetDestinationWithUserCityAndCoutryAsync(model.From);

                if (isAvailable)
                {
                    Flight flight = new Flight()
                    {
                        Id        = model.Id,
                        From      = from,
                        To        = to,
                        Departure = model.Departure,
                        Arrival   = model.Arrival,
                        Airplane  = airplane,
                        Status    = newStatus,
                        Business  = airplane.BusinessSeats,
                        Economic  = airplane.EconomySeats,
                    };

                    try
                    {
                        await _flightRepository.UpDateAsync(flight);


                        List <Ticket> ticketList = _flightRepository.GetTickets(flight.Id);


                        // Depois de Fazer o update, enviar um email para todos os utilizadores com bilhetes, com os novos dados


                        if (ticketList.Count != 0)
                        {
                            if (flight.Status.StatusName == "Active")
                            {
                                foreach (var item in ticketList)
                                {
                                    _mailHelper.SendMail(item.User.Email, "Flight changes", $"<h1>Flight changes</h1></br></br>" +
                                                         $"Please consider the new flight details:</br>" +
                                                         $"From: {item.Flight.From.City.Name} </br>" +
                                                         $"To: {item.Flight.To.City.Name} </br>" +
                                                         $"Departure: {item.Flight.Departure} </br>" +
                                                         $"Arrival: {item.Flight.Arrival} </br>" +
                                                         "Thank you for your attention");
                                }
                            }

                            else if (flight.Status.StatusName == "Canceled")
                            {
                                foreach (var item in ticketList)
                                {
                                    _mailHelper.SendMail(item.User.Email, "Flight canceled", $"<h1>Flight canceled</h1></br></br>" +
                                                         $"Your flight:</br>" +
                                                         $"From: {item.Flight.From.City.Name} </br>" +
                                                         $"To: {item.Flight.To.City.Name} </br>" +
                                                         $"Was canceled! Please, contact our customer service)");
                                }
                            }
                        }

                        return(RedirectToAction(nameof(Index)));
                    }

                    catch (Exception ex)
                    {
                        ModelState.AddModelError(string.Empty, ex.InnerException.Message);
                        GetCombos(model);
                        ViewBag.minDate = DateTime.Now;
                        ViewBag.format  = "dd/MM/yyyy HH:mm";
                        return(View(model));
                    }
                }

                ViewBag.minDate = DateTime.Now;
                ViewBag.format  = "dd/MM/yyyy HH:mm";
                GetCombos(model);
                ModelState.AddModelError(string.Empty, "Airplane isn't available. Choose another!");
                return(View(model));
            }


            GetCombos(model);
            ViewBag.minDate = DateTime.Now;
            ViewBag.format  = "dd/MM/yyyy HH:mm";
            return(View(model));
        }
예제 #11
0
 public void GetCombos(CreateFlightViewModel model)
 {
     model.Airplanes    = _flightRepository.GetComboAirplanes();
     model.Destinations = _flightRepository.GetComboDestinations();
     model.Status       = _flightRepository.GetComboStatus();
 }
예제 #12
0
        public IActionResult Create(CreateFlightViewModel model)
        {
            var d = string.Empty;

            if (model.Departure.Contains("pm"))
            {
                var s = model.Departure.Split(' ');
                d = s[0] + " " + (s[1].Split(':')[0] == "12" ? "0" : (int.Parse(s[1].Split(':')[0]) + 12).ToString()) + ":" + s[1].Split(":")[1];
            }
            else
            {
                var s = model.Departure.Split(' ');
                d = s[0] + " " + string.Format("{0:D2}", int.Parse(s[1].Split(':')[0])) + ":" + s[1].Split(':')[1];
            }

            var a = string.Empty;

            if (model.Arrival.Contains("pm"))
            {
                var s = model.Arrival.Split(' ');
                a = s[0] + " " + (s[1].Split(':')[0] == "12" ? "0" : (int.Parse(s[1].Split(':')[0]) + 12).ToString()) + ":" + s[1].Split(":")[1];
            }
            else
            {
                var s = model.Arrival.Split(' ');
                a = s[0] + " " + string.Format("{0:D2}", int.Parse(s[1].Split(':')[0])) + ":" + s[1].Split(':')[1];
            }

            var Departure = DateTime.ParseExact(d, "MM/dd/yyyy HH:mm", null);
            var Arrival   = DateTime.ParseExact(a, "MM/dd/yyyy HH:mm", null);

            var airports = this.db.Airports.Where(x => x.Name == model.Origin || x.Name == model.Destination).ToList();


            var flight = new Flight
            {
                Aircraft          = this.db.Aircrafts.Where(x => x.Name == model.Aircraft).FirstOrDefault(),
                AircraftId        = this.db.Aircrafts.Where(x => x.Name == model.Aircraft).Select(x => x.Id).FirstOrDefault(),
                DurationInMinutes = int.Parse(model.DurationInMinutes),
                Price             = decimal.Parse(model.Price),
                Departure         = Departure,
                Arrival           = Arrival,
                FlightNumber      = model.FlightNumber,
                Airports          = new List <AirportFlight>
                {
                    new AirportFlight
                    {
                        Airport   = airports[0],
                        AirportId = airports[0].Id,
                        Type      = AirportType.Origin
                    },
                    new AirportFlight
                    {
                        Airport   = airports[1],
                        AirportId = airports[1].Id,
                        Type      = AirportType.Destination
                    }
                }
            };

            this.db.Flights.Add(flight);
            this.db.SaveChanges();

            var flightId   = flight.Id;
            var flightTemp = flight;

            for (int i = 0; i < flight.Airports.Count(); i++)
            {
                flight.Airports.ToList()[i].FlightId = flightId;
                flight.Airports.ToList()[i].Flight   = flightTemp;
            }

            this.db.SaveChanges();
            return(this.Redirect("/"));
        }
예제 #13
0
        public ActionResult Save(CreateFlightViewModel model)
        {
            int    flightId       = model.Flight.id;
            bool   disable        = model.Disable;
            int    airportFrom    = model.AirportFromId;
            int    airportTo      = model.AirportToId;
            string departureDate  = model.Flight.DepartureDate;
            string departureTime  = model.Flight.DepartureTime;
            string arrivalDate    = model.Flight.ArrivalDate;
            string arrivalTime    = model.Flight.ArrivalTime;
            int    seatsAvailable = model.Flight.SeatsAvailable;
            int    ticketPrice    = model.Flight.TicketPrice;

            Dictionary <string, object> queryDict = new Dictionary <string, object>();

            queryDict.Add("airportFrom", airportFrom);
            queryDict.Add("airportTo", airportTo);
            queryDict.Add("departureDate", departureDate);
            queryDict.Add("departureTime", departureTime);
            queryDict.Add("arrivalDate", arrivalDate);
            queryDict.Add("arrivalTime", arrivalTime);
            queryDict.Add("seatsAvailable", seatsAvailable);
            queryDict.Add("ticketPrice", ticketPrice);
            queryDict.Add("flightId", flightId);

            var    queryMax = new Neo4jClient.Cypher.CypherQuery("MATCH ()-[n:FLIGHT_TO]->() RETURN max(n.id)", queryDict, CypherResultMode.Set);
            String maxIdObj = ((IRawGraphClient)client).ExecuteGetCypherResults <String>(queryMax).SingleOrDefault();
            int    maxId;

            if (maxIdObj == null)
            {
                maxId = 0;
            }
            else
            {
                maxId = Int32.Parse(maxIdObj);
            }

            var queryFrom = new Neo4jClient.Cypher.CypherQuery("MATCH (n:Airport) WHERE n.id = {airportFrom} RETURN n",
                                                               queryDict, CypherResultMode.Set);
            Airport apFrom = ((IRawGraphClient)client).ExecuteGetCypherResults <Airport>(queryFrom).SingleOrDefault();

            var queryTo = new Neo4jClient.Cypher.CypherQuery("MATCH (n:Airport) WHERE n.id = {airportTo} RETURN n",
                                                             queryDict, CypherResultMode.Set);
            Airport apTo = ((IRawGraphClient)client).ExecuteGetCypherResults <Airport>(queryTo).SingleOrDefault();

            model.Flight.From = apFrom;
            model.Flight.To   = apTo;

            QueryFlightsViewModel viewModel = new QueryFlightsViewModel();
            var createQuery = new Neo4jClient.Cypher.CypherQuery("", queryDict, CypherResultMode.Set);

            if (disable == false)
            {
                createQuery = new Neo4jClient.Cypher.CypherQuery("MATCH (n:Airport), (m:Airport) WHERE "
                                                                 + "n.id = {airportFrom} AND m.id = {airportTo} "
                                                                 + "CREATE (n)-[rel:FLIGHT_TO {id: " + ++maxId
                                                                 + " , DepartureDate: '" + departureDate
                                                                 + "', DepartureTime: '" + departureTime
                                                                 + "', ArrivalDate: '" + arrivalDate
                                                                 + "', ArrivalTime: '" + arrivalTime
                                                                 + "', SeatsAvailable: " + seatsAvailable
                                                                 + ", TicketPrice: " + ticketPrice
                                                                 + "}]->(m) RETURN rel", queryDict, CypherResultMode.Set);
            }
            else
            {
                createQuery = new Neo4jClient.Cypher.CypherQuery("MATCH (n:Airport)-[rel:FLIGHT_TO]->(m:Airport) WHERE "
                                                                 + "rel.id = {flightId} "
                                                                 + "SET rel.DepartureDate = \"" + departureDate
                                                                 + "\", rel.DepartureTime = \"" + departureTime
                                                                 + "\", rel.ArrivalDate = \"" + arrivalDate
                                                                 + "\", rel.ArrivalTime = \"" + arrivalTime
                                                                 + "\", rel.SeatsAvailable = " + seatsAvailable
                                                                 + ", rel.TicketPrice = " + ticketPrice +
                                                                 " RETURN rel", queryDict, CypherResultMode.Set);
            }
            List <Flight> create = ((IRawGraphClient)client).ExecuteGetCypherResults <Flight>(createQuery).ToList();



            var query1 = client.Cypher
                         .Match("(n:Airport)-[rel:FLIGHT_TO]->(m:Airport)")
                         .Return((n, rel, m) => new
            {
                Od  = n.As <Airport>(),
                Let = rel.As <Flight>(),
                Do  = m.As <Airport>()
            }).Results.ToList();

            var flights = new List <Flight>(query1.Count);


            foreach (var item in query1)
            {
                Flight f = item.Let;
                f.From = item.Od;
                f.To   = item.Do;
                flights.Add(f);
            }
            viewModel.FlightsList = flights;

            return(RedirectToAction("Admin"));
            //return RedirectToAction("Admin", "Flights", new { viewModel });
        }