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)); }