Ejemplo n.º 1
0
        public ActionResult FlightValidation(string AirlineName, string FlightNumber, string DepartureName, string ArrivalName, string DepartureTime, string ArrivalTime, string Stops, string TripTypeName, string PassengerName, string PassengerLastName, string PassengerEmail)
        {
            var            flightService = new ConnxysWCFRestService();
            var            fsm           = new FlightStatusMessages();
            string         jsonData;
            GoogleTimeZone timezone = new GoogleTimeZone();

            fsm.isValid  = false;
            fsm.messages = new Message();

            _airlinesRepository = new AirlinesRepository();
            _tagsRepository     = new TagsRepository();
            _airportsRepository = new AirportsRepository();

            if (!AirlineName.Equals("") && !FlightNumber.Equals("") && !DepartureName.Equals("") && !ArrivalName.Equals("") &&
                !DepartureTime.Equals("") && !ArrivalTime.Equals("") && !Stops.Equals("") && !TripTypeName.Equals(""))
            {
                #region Complete Info
                var model = new BasicItineraryModel
                {
                    AirlineName       = AirlineName,
                    FlightNumber      = Convert.ToInt32(FlightNumber),
                    DepartureName     = DepartureName,
                    ArrivalName       = ArrivalName,
                    DepartureTime     = Convert.ToDateTime(DepartureTime),
                    ArrivalTime       = Convert.ToDateTime(ArrivalTime),
                    Stops             = Convert.ToInt32(Stops),
                    TripTypeName      = TripTypeName,
                    PassengerName     = PassengerName,
                    PassengerLastName = PassengerLastName,
                    PassengerEmail    = PassengerEmail
                };


                //Get Airport Information: Departure and Arrival airports
                Airports DepartureAirport = new Airports();
                DepartureAirport = _airportsRepository.GetAirportbyName(DepartureName);
                Airports ArrivalAirport = new Airports();
                ArrivalAirport = _airportsRepository.GetAirportbyName(ArrivalName);

                //Get UTC of Departure Airport
                Double UTCDepartureAir = timezone.GetLocalDateTime(DepartureAirport.Latitude, DepartureAirport.Longitude, DateTime.UtcNow);

                //Get UTC of Arrival Airport
                Double UTCArrivalAir = timezone.GetLocalDateTime(ArrivalAirport.Latitude, ArrivalAirport.Longitude, DateTime.UtcNow);

                //Get the difference between UTC and local time to Departure and Arrival airport
                model.DepartDateTimeUTC  = model.DepartureTime.Value.AddHours(UTCDepartureAir);
                model.ArrivalDateTimeUTC = model.ArrivalTime.Value.AddHours(UTCArrivalAir);

                var tempAirline       = _airlinesRepository.GetAirlinebyName(model.AirlineName);
                var result            = flightService.GetInfoFlightStatus(model.FlightNumber, tempAirline.AirlineDesignator, Convert.ToDateTime(model.DepartDateTimeUTC));
                var listResult        = result.flightStatuses.ToList();
                var totalFlightStatus = listResult.Count;


                //Time validation validate the hour and minutes selected by the user
                if (model.DepartureTime.Value >= model.ArrivalTime.Value)
                {
                    fsm.messages.mainMessage = "Arrival Time must be greater than Departure Time";
                    jsonData = new JavaScriptSerializer().Serialize(fsm);
                    return(Json(jsonData, JsonRequestBehavior.AllowGet));
                }

                var utcNow = DateTime.UtcNow;
                if (model.DepartureTime.Value < utcNow || model.ArrivalTime.Value < utcNow)
                {
                    fsm.messages.mainMessage = "Departure Time and Arrival Time must be greater or equal than Current UTC time";
                    jsonData = new JavaScriptSerializer().Serialize(fsm);
                    return(Json(jsonData, JsonRequestBehavior.AllowGet));
                }

                if (totalFlightStatus > 0)
                {
                    /* If is a real flight */
                    foreach (var item in listResult)
                    {
                        fsm.messages = new Message();
                        var matchesElements = true;
                        var flightStatus    = item;

                        var serviceDepartureDate = flightStatus.departureDate.dateUtc.ToUniversalTime(); //DateTimeOffset.Parse(flightStatus.departureDate.dateUtc).UtcDateTime;
                        var serviceArrivalDate   = flightStatus.arrivalDate.dateUtc.ToUniversalTime();   //DateTimeOffset.Parse().UtcDateTime;

                        #region Departure and Arrival Airports match with real flight
                        if (model.DepartureName == flightStatus.departureAirportFsCode && model.ArrivalName == flightStatus.arrivalAirportFsCode)
                        {
                            if (serviceDepartureDate.CompareTo(model.DepartDateTimeUTC) != 0)
                            {
                                fsm.messages.depDateMessage = "The Departure Date doesn't match with real flight.";
                                matchesElements             = false;
                            }
                            if (serviceArrivalDate.CompareTo(model.ArrivalDateTimeUTC) != 0)
                            {
                                fsm.messages.arrDateMessage = "The Arrival Date doesn't match with real flight.";
                                matchesElements             = false;
                            }
                            if (matchesElements)
                            {
                                fsm.isValid = true;
                            }

                            break;
                        }
                        #endregion

                        #region Departure Airport match with real flight
                        if (model.DepartureName == flightStatus.departureAirportFsCode)
                        {
                            if (model.ArrivalName != flightStatus.arrivalAirportFsCode)
                            {
                                fsm.messages.arrivalMessage = "The Arrival doesn't match with real flight.";
                            }
                            if (serviceDepartureDate.CompareTo(model.DepartDateTimeUTC) != 0)
                            {
                                fsm.messages.departureMessage = "The Departure Date doesn't match with real flight.";
                            }
                            if (serviceArrivalDate.CompareTo(model.ArrivalDateTimeUTC) != 0)
                            {
                                fsm.messages.arrDateMessage = "The Arrival Date doesn't match with real flight.";
                            }
                            break;
                        }
                        #endregion

                        #region Arrival Airport match with real flight
                        if (model.ArrivalName == flightStatus.arrivalAirportFsCode)
                        {
                            if (model.DepartureName != flightStatus.departureAirportFsCode)
                            {
                                fsm.messages.departureMessage = "The Departure doesn't match with real flight.";
                            }
                            if (serviceDepartureDate.CompareTo(model.DepartDateTimeUTC) != 0)
                            {
                                fsm.messages.depDateMessage = "The Departure Date doesn't match with real flight.";
                            }
                            if (serviceArrivalDate.CompareTo(model.ArrivalDateTimeUTC) != 0)
                            {
                                fsm.messages.arrDateMessage = "The Arrival Date doesn't match with real flight.";
                            }
                            break;
                        }
                        #endregion

                        #region Departure and Arrival Airports don't match with real flight

                        if (model.DepartureName == flightStatus.departureAirportFsCode || model.ArrivalName == flightStatus.arrivalAirportFsCode)
                        {
                            continue;
                        }

                        fsm.messages.departureMessage = "The Departure doesn't match with real flight.";
                        fsm.messages.arrivalMessage   = "The Arrival doesn't match with real flight.";

                        if (serviceDepartureDate.CompareTo(model.DepartDateTimeUTC) != 0)
                        {
                            fsm.messages.depDateMessage = "The Departure Date doesn't match with real flight.";
                        }
                        if (serviceArrivalDate.CompareTo(model.ArrivalDateTimeUTC) != 0)
                        {
                            fsm.messages.arrDateMessage = "The Arrival Date doesn't match with real flight.";
                        }

                        #endregion
                    }
                }
                else
                {
                    /* If is not a real flight */
                    fsm.isValid = true;
                }

                if (fsm.isValid)
                {
                    // Insert the flight into flight's list
                    InsertFlightIntoList(model);
                }
                else
                {
                    fsm.messages.mainMessage = "Error: Flight number " + model.FlightNumber + " doesn't match the Flight Stats information. Please edit the information below.";
                }

                #endregion
            }
            else
            {
                fsm.messages.mainMessage = "Information required: Please complete all the flight information fields.";
            }

            jsonData = new JavaScriptSerializer().Serialize(fsm);
            return(Json(jsonData, JsonRequestBehavior.AllowGet));
        }