def mixandmatchinit(mixedflightinit, othermodesend, logger): """ Join flight journey with other modes, with flight being first part of combined journey :param mixedflightinit: flight part of journey :param othermodesend: other mode of journey :param otherModesEnd2: other mode of journey2 :return: combined journey flight followed by other mode """ logger.debug("[START] flight + othermodesend") mixedflightinit = miscUtility.limitResults(mixedflightinit, "flight") for j in range(len(mixedflightinit["flight"])): flightpart = mixedflightinit["flight"][j]["parts"][0] subparts = [] for k in range(len(othermodesend)): subpart = othermodesend[k]["parts"][0] if dateTimeUtility.isjourneypossible( dateTimeUtility.convertflighttime(flightpart["arrival"]), subpart["departure"], flightpart["arrivalDate"], subpart["departureDate"], 3, 24): subpart["waitingTime"] = dateTimeUtility.getWaitingTime( flightpart["arrival"], subpart["departure"], flightpart["arrivalDate"], subpart["departureDate"]) subpart["subJourneyTime"] = dateTimeUtility.gettotalduration( subpart["arrival"], dateTimeUtility.convertflighttime(flightpart["arrival"]), subpart["arrivalDate"], flightpart["arrivalDate"]) subparts.append(copy.deepcopy(subpart)) subparts.sort(miscUtility.sortonsubjourneytime) if len(subparts) > 5: subparts = subparts[0:5] if subparts: minmax = minMaxUtil.getMinMaxValues(subparts) newpart = { "subParts": subparts, "mode": subparts[0]["mode"], "id": mixedflightinit["flight"][j]["full"][0]["id"] + str(1), "destination": subparts[0]["destination"], "source": subparts[0]["source"], "carrierName": subparts[0]["carrierName"] } mixedflightinit["flight"][j]["parts"].append(newpart) mixedflightinit["flight"][j]["full"][0][ "route"] = flightpart["source"] + ",flight," + flightpart[ "destination"] + "," + subparts[0]["mode"] + "," + newpart[ "destination"] mixedflightinit["flight"][j]["full"][0]["price"] = int( mixedflightinit["flight"][j]["full"][0]["price"]) + int( minMaxUtil.getprice(subparts[0])) mixedflightinit["flight"][j]["full"][0]["minPrice"] = int( mixedflightinit["flight"][j]["full"][0]["minPrice"]) + int( minmax["minPrice"]) mixedflightinit["flight"][j]["full"][0]["maxPrice"] = int( mixedflightinit["flight"][j]["full"][0]["maxPrice"]) + int( minmax["maxPrice"]) mixedflightinit["flight"][j]["full"][0][ "duration"] = dateTimeUtility.addDurations( mixedflightinit["flight"][j]["full"][0]["duration"], subparts[0]["subJourneyTime"]) mixedflightinit["flight"][j]["full"][0][ "minDuration"] = dateTimeUtility.addDurations( mixedflightinit["flight"][j]["full"][0]["minDuration"], minmax["minDuration"]) mixedflightinit["flight"][j]["full"][0][ "maxDuration"] = dateTimeUtility.addDurations( mixedflightinit["flight"][j]["full"][0]["maxDuration"], minmax["maxDuration"]) mixedflightinit["flight"][j]["full"][0]["minArrival"] = minmax[ "minArr"] mixedflightinit["flight"][j]["full"][0]["maxArrival"] = minmax[ "maxArr"] mixedflightinit["flight"][j]["full"][0]["destination"] = subparts[ 0]["destination"] mixedflightinit["flight"][j]["full"][0]["waitingTime"] = subparts[ 0]["waitingTime"] mixedflightinit["flight"][j]["full"][0]["arrival"] = subparts[0][ "arrival"] mixedflightinit["flight"][j]["full"][0]["arrivalDate"] = subparts[ 0]["arrivalDate"] mixedflightinit["flight"][j]["full"][0][ "arrivalDay"] = models.getdayabbrevationfromdatestr( subparts[0]["arrivalDate"], 0) mixedflightinit["flight"][j]["full"][0][ "departureDay"] = models.getdayabbrevationfromdatestr( flightpart["departureDate"], 0) mixedflightinit["flight"] = [ x for x in mixedflightinit["flight"] if len(x["parts"]) == 2 ] logger.debug("[FlightApi.mixAndMatchInit]-[END]") return mixedflightinit
def mixandmatchend(mixedflightend, othermodesinit, logger): """ Join flight with other modes, with flight in the end :param mixedflightend: flight part of journey :param othermodesinit: other mode of journey :param otherModesInit2: other mode of jounrey2 :return: combined journey with flight after other mode of total journey """ logger.debug("[START]") mixedflightend = miscUtility.limitResults(mixedflightend, "flight") for j in range(len(mixedflightend["flight"])): flightpart = mixedflightend["flight"][j]["parts"][0] subparts = [] for k in range(len(othermodesinit)): subpart = othermodesinit[k]["parts"][0] if dateTimeUtility.isjourneypossible( subpart["arrival"], dateTimeUtility.convertflighttime(flightpart["departure"]), subpart["arrivalDate"], flightpart["departureDate"], 3, 24): subpart["waitingTime"] = dateTimeUtility.getWaitingTime( subpart["arrival"], flightpart["departure"], subpart["arrivalDate"], flightpart["departureDate"]) subpart["subJourneyTime"] = dateTimeUtility.gettotalduration( dateTimeUtility.convertflighttime(flightpart["departure"]), subpart["departure"], flightpart["departureDate"], subpart["departureDate"]) subparts.append(copy.deepcopy(subpart)) subparts.sort(miscUtility.sortonsubjourneytime) if len(subparts) > 5: subparts = subparts[0:5] if subparts: minmax = minMaxUtil.getMinMaxValues(subparts) newpart = { "subParts": subparts, "mode": subparts[0]["mode"], "id": mixedflightend["flight"][j]["full"][0]["id"] + str(0), "destination": subparts[0]["destination"], "source": subparts[0]["source"], "carrierName": subparts[0]["carrierName"] } flightpart[ "id"] = mixedflightend["flight"][j]["full"][0]["id"] + str(1) mixedflightend["flight"][j]["parts"].insert(0, newpart) mixedflightend["flight"][j]["full"][0]["route"] = newpart[ "source"] + "," + subparts[0]["mode"] + "," + newpart[ "destination"] + ",flight," + flightpart["destination"] mixedflightend["flight"][j]["full"][0]["price"] = int( mixedflightend["flight"][j]["full"][0]["price"]) + int( minMaxUtil.getprice(subparts[0])) mixedflightend["flight"][j]["full"][0]["minPrice"] = int( mixedflightend["flight"][j]["full"][0]["minPrice"]) + int( minmax["minPrice"]) mixedflightend["flight"][j]["full"][0]["maxPrice"] = int( mixedflightend["flight"][j]["full"][0]["maxPrice"]) + int( minmax["maxPrice"]) mixedflightend["flight"][j]["full"][0][ "duration"] = dateTimeUtility.addDurations( mixedflightend["flight"][j]["full"][0]["duration"], subparts[0]["subJourneyTime"]) mixedflightend["flight"][j]["full"][0][ "minDuration"] = dateTimeUtility.addDurations( mixedflightend["flight"][j]["full"][0]["minDuration"], minmax["minDuration"]) mixedflightend["flight"][j]["full"][0][ "maxDuration"] = dateTimeUtility.addDurations( mixedflightend["flight"][j]["full"][0]["maxDuration"], minmax["maxDuration"]) mixedflightend["flight"][j]["full"][0]["minDeparture"] = minmax[ "minDep"] mixedflightend["flight"][j]["full"][0]["maxDeparture"] = minmax[ "maxDep"] mixedflightend["flight"][j]["full"][0]["source"] = subparts[0][ "source"] mixedflightend["flight"][j]["full"][0]["waitingTime"] = subparts[ 0]["waitingTime"] mixedflightend["flight"][j]["full"][0]["departure"] = subparts[0][ "departure"] mixedflightend["flight"][j]["full"][0]["departureDate"] = subparts[ 0]["departureDate"] mixedflightend["flight"][j]["full"][0][ "departureDay"] = models.getdayabbrevationfromdatestr( subparts[0]["departureDate"], 0) mixedflightend["flight"][j]["full"][0][ "arrivalDay"] = models.getdayabbrevationfromdatestr( flightpart["arrivalDate"], 0) mixedflightend["flight"] = [ x for x in mixedflightend["flight"] if len(x["parts"]) == 2 ] logger.debug("[END]") return mixedflightend
def mixandmatch(directflight, othermodesinit, othermodesend, logger): logger.debug("[START] Flight mix & match") directflight = miscUtility.limitResults(directflight, "flight") for j in range(len(directflight["flight"])): flightpart = directflight["flight"][j]["parts"][0] subparts = [] for k in range(len(othermodesinit)): subpart = othermodesinit[k]["parts"][0] if dateTimeUtility.isjourneypossible( subpart["arrival"], dateTimeUtility.convertflighttime(flightpart["departure"]), subpart["arrivalDate"], flightpart["departureDate"], 3, 24): subpart["waitingTime"] = dateTimeUtility.getWaitingTime( subpart["arrival"], flightpart["departure"], subpart["arrivalDate"], flightpart["departureDate"]) subpart["subJourneyTime"] = dateTimeUtility.gettotalduration( dateTimeUtility.convertflighttime(flightpart["departure"]), subpart["departure"], flightpart["departureDate"], subpart["departureDate"]) subparts.append(copy.deepcopy(subpart)) subparts.sort(miscUtility.sortonsubjourneytime) if len(subparts) > 5: subparts = subparts[0:5] continuefurther = 0 if subparts: continuefurther = 1 minmax1 = minMaxUtil.getMinMaxValues(subparts) price1 = int(minMaxUtil.getprice(subparts[0])) subJourneyTime1 = subparts[0]["subJourneyTime"] waitingtime1 = subparts[0]["waitingTime"] departuredate1 = subparts[0]["departureDate"] departure1 = subparts[0]["departure"] source = subparts[0]["source"] newpart = { "subParts": subparts, "mode": subparts[0]["mode"], "id": directflight["flight"][j]["full"][0]["id"] + str(0), "destination": subparts[0]["destination"], "source": subparts[0]["source"], "carrierName": subparts[0]["carrierName"] } flightpart[ "id"] = directflight["flight"][j]["full"][0]["id"] + str(1) directflight["flight"][j]["parts"].insert(0, newpart) directflight["flight"][j]["full"][0]["route"] = newpart[ "source"] + "," + newpart["mode"] + "," + newpart[ "destination"] + ",flight," + flightpart["destination"] subparts = [] for k in range(len(othermodesend)): subpart = othermodesend[k]["parts"][0] if dateTimeUtility.isjourneypossible( dateTimeUtility.convertflighttime(flightpart["arrival"]), subpart["departure"], flightpart["arrivalDate"], subpart["departureDate"], 3, 24): subpart["waitingTime"] = dateTimeUtility.getWaitingTime( flightpart["arrival"], subpart["departure"], flightpart["arrivalDate"], subpart["departureDate"]) subpart["subJourneyTime"] = dateTimeUtility.gettotalduration( subpart["arrival"], dateTimeUtility.convertflighttime(flightpart["arrival"]), subpart["arrivalDate"], flightpart["arrivalDate"]) subparts.append(copy.deepcopy(subpart)) subparts.sort(miscUtility.sortonsubjourneytime) if len(subparts) > 5: subparts = subparts[0:5] if subparts and continuefurther == 1: minmax2 = minMaxUtil.getMinMaxValues(subparts) price2 = int(minMaxUtil.getprice(subparts[0])) destination = subparts[0]["destination"] subJourneyTime2 = subparts[0]["subJourneyTime"] newpart = { "subParts": subparts, "mode": subparts[0]["mode"], "id": directflight["flight"][j]["full"][0]["id"] + str(2), "destination": subparts[0]["destination"], "source": subparts[0]["source"], "carrierName": subparts[0]["carrierName"] } directflight["flight"][j]["parts"].append(newpart) directflight["flight"][j]["full"][0]["route"] = directflight[ "flight"][j]["full"][0]["route"] + "," + subparts[0][ "mode"] + "," + newpart["destination"] directflight["flight"][j]["full"][0]["price"] = int( directflight["flight"][j]["full"][0] ["price"]) + price1 + price2 directflight["flight"][j]["full"][0]["minPrice"] = int( directflight["flight"][j]["full"][0]["minPrice"]) + int( minmax1["minPrice"]) + int(minmax2["minPrice"]) directflight["flight"][j]["full"][0]["maxPrice"] = int( directflight["flight"][j]["full"][0]["maxPrice"]) + int( minmax1["maxPrice"]) + int(minmax2["maxPrice"]) directflight["flight"][j]["full"][0][ "duration"] = dateTimeUtility.addDurations( dateTimeUtility.addDurations( directflight["flight"][j]["full"][0]["duration"], subJourneyTime1), subJourneyTime2) directflight["flight"][j]["full"][0][ "minDuration"] = dateTimeUtility.addDurations( dateTimeUtility.addDurations( directflight["flight"][j]["full"][0]["minDuration"], minmax1["minDuration"]), minmax2["minDuration"]) directflight["flight"][j]["full"][0][ "maxDuration"] = dateTimeUtility.addDurations( dateTimeUtility.addDurations( directflight["flight"][j]["full"][0]["maxDuration"], minmax1["maxDuration"]), minmax2["maxDuration"]) directflight["flight"][j]["full"][0]["minDeparture"] = minmax1[ "minDep"] directflight["flight"][j]["full"][0]["maxDeparture"] = minmax1[ "maxDep"] directflight["flight"][j]["full"][0]["minArrival"] = minmax2[ "minArr"] directflight["flight"][j]["full"][0]["maxArrival"] = minmax2[ "maxArr"] directflight["flight"][j]["full"][0]["destination"] = destination directflight["flight"][j]["full"][0]["source"] = source directflight["flight"][j]["full"][0][ "waitingTime"] = dateTimeUtility.addDurations( waitingtime1, subparts[0]["waitingTime"]) directflight["flight"][j]["full"][0]["arrival"] = subparts[0][ "arrival"] directflight["flight"][j]["full"][0]["departure"] = departure1 directflight["flight"][j]["full"][0]["arrivalDate"] = subparts[0][ "arrivalDate"] directflight["flight"][j]["full"][0][ "departureDate"] = departuredate1 directflight["flight"][j]["full"][0][ "arrivalDay"] = models.getdayabbrevationfromdatestr( subparts[0]["arrivalDate"], 0) directflight["flight"][j]["full"][0][ "departureDay"] = models.getdayabbrevationfromdatestr( departuredate1, 0) directflight["flight"] = [ x for x in directflight["flight"] if len(x["parts"]) == 3 ] logger.debug("[END] flight mix & match") return directflight