Beispiel #1
0
def applyPromoCodeToBookings(promoCode, bookings):
    modifiedBookings = []

    # Remove existing promo codes
    for booking in bookings:
        for reservation in booking.reservations:
            redemptionsToRemove = []

            for redemption in reservation.redemptions:
                if redemption.type == 'Discount':
                    redemptionsToRemove.append(redemption)

            for redemption in redemptionsToRemove:
                reservation.redemptions.remove(redemption)

    rexCrs = getRexClient()
    try:
        discount = rexCrs.fetch_discount(promoCode)
    except NotFoundException:
        return None

    for booking in bookings:
        for reservation in booking.reservations:
            reservation.discount(discount)

        repricedBooking = rexCrs.requote(booking)
        modifiedBookings.append(repricedBooking)

    return modifiedBookings
Beispiel #2
0
def payForBooking(bookSession, paymentForm, rexCustomer, payerInfo, messages):
    rexCrs = getRexClient()
    customer = None

    # Customer
    if rexCustomer == None:
        customer = rexCrs.fetch_anonymous_web_customer()
    else:
        customer = rexCustomer

    # Proposed bookings
    if bookSession.pickled_rex_booking_session and len(
            bookSession.pickled_rex_booking_session) > 1:
        bookings = pickle.loads(str(bookSession.pickled_rex_booking_session))

    else:
        bookings = getProposedBookings(bookSession, messages)

    if len(messages) > 0:
        return None

    if paymentForm:
        # Credit card payment
        expireDate = "%s/%s" % (paymentForm.cleaned_data['exp_month'],
                                paymentForm.cleaned_data['exp_year'])

        nameOnCard = "%s %s" % (paymentForm.cleaned_data['first_name'],
                                paymentForm.cleaned_data['last_name'])

        card = CreditCard(paymentForm.cleaned_data['card_number'], expireDate,
                          paymentForm.cleaned_data['security_number'],
                          nameOnCard)

        payment = CreditCardPayment(
            RexMoney(settings.DEFAULT_CURRENCY_CODE, bookSession.grand_total),
            card)

    else:
        payment = None

    try:
        salesOrder = rexCrs.submit_order(customer,
                                         payment=payment,
                                         bookings=bookings,
                                         payerInfo=payerInfo,
                                         otherItems=None)
        return salesOrder

    except Exception as exc:
        if 'AVS:N' in str(exc):
            messages.append(
                "AVS Error: Please check your billing address. It must match what is on file with your credit card company."
            )
        else:
            messages.append(exc)

    return None
Beispiel #3
0
def isCouponCodeValid(couponCode):
    rexCrs = getRexClient()

    coupons = rexCrs._fetch_all_coupon_issues()

    for coupon in coupons:
        if coupon.key == couponCode:
            return True

    return False
Beispiel #4
0
def buildTripsForBookingSession(bookSession, originId, destinationId, tripDate,
                                timeFrameKey):
    rexCrs = getRexClient()
    timeFrames = rexCrs.get_trip_timeframes()

    for token in timeFrames:
        if token.key == timeFrameKey:
            timeFrame = token
            break

    originName = getTripLocationName(originId, bookSession.origin_rex_key)
    originToken = RexToken(originId, originName)

    destName = getTripLocationName(destinationId, originId)
    destToken = RexToken(destinationId, destName)

    travellers = buildRexTravellerListForBookSession(bookSession)

    try:
        rexTrips = rexCrs.find_trips(originToken, destToken, tripDate,
                                     timeFrame, travellers, None)
    except Exception as e:
        logging.error(e)
        rexTrips = None

    if rexTrips == None:
        try:
            rexTrips = rexCrs.find_trips(originToken, destToken, tripDate,
                                         None, travellers, None)
        except Exception as e:
            logging.error(e)
            return

    if bookSession.origin_trip and bookSession.origin_trip.origin_key == originId:
        bookSession.origin_trip = None

    if bookSession.return_trip and bookSession.return_trip.origin_key == originId:
        bookSession.return_trip = None

    bookSession.trips.filter(origin_key=originId).delete()

    if rexTrips:
        for rex_trip in rexTrips:
            trip = models.Trip()
            trip.InitializeFromRexTrip(bookSession, rex_trip)
            trip.save()

            if len(rex_trip.components):
                for rex_comp in rex_trip.components:
                    compTrip = models.Trip()
                    compTrip.InitializeFromRexTrip(bookSession, rex_comp)
                    compTrip.parent = trip
                    compTrip.save()

    bookSession.save()
Beispiel #5
0
def getTripLocationName(location_token, origin_token):
    rexCrs = getRexClient()
    origins = rexCrs.get_trip_origins()

    for origin in origins:
        if location_token == origin.key:
            return origin.name

    # if not found then get destinations for the origin
    destinations = rexCrs.get_trip_destinations(origin_token)
    for dest in destinations:
        if location_token == dest.key:
            return dest.name

    return None
Beispiel #6
0
def setSeatingAssignmentsForBooking(rexBooking, trip):
    try:
        rexCrs = getRexClient()
        availSeats = rexCrs.fetch_available_seats(rexBooking)

        for reservation in rexBooking.reservations:
            for assgn in trip.seat_assignments.all():
                if assgn.seat_no == None or assgn.seat_no == 'None':
                    continue
                if str(-1 *
                       assgn.travelerProfile_id) == reservation.traveler.key:
                    reservation.assign_to(assgn.seat_no)

    except Exception as exc:
        logging.error(exc)
Beispiel #7
0
def getRexBookingForTrip(trip, messages):
    rexBooking = None

    try:
        rexCrs = getRexClient()

        rexFacility = RexToken(trip.facility_key, trip.facility_name)
        rexProduct = RexToken(trip.product_key, trip.product_name)
        rexOrigin = RexToken(trip.origin_key, trip.origin_name)
        rexDest = RexToken(trip.destination_key, trip.destination_name)
        rexTrip = RexTrip(rexFacility, rexProduct, rexOrigin, rexDest,
                          trip.depart_date, trip.depart_time, trip.arrive_date,
                          trip.arrive_time, trip.carrier_name, trip.route_name)

        rexTrip.crs = trip.rex_crs

        #add component legs if there are any
        if trip.hasComponentTripLegs():
            rexTrip.components = []

            for tripLeg in trip.trip_legs.all():
                rexFacility = RexToken(tripLeg.facility_key,
                                       tripLeg.facility_name)
                rexProduct = RexToken(tripLeg.product_key,
                                      tripLeg.product_name)
                rexOrigin = RexToken(tripLeg.origin_key, tripLeg.origin_name)
                rexDest = RexToken(tripLeg.destination_key,
                                   tripLeg.destination_name)
                rexTripLeg = RexTrip(rexFacility, rexProduct, rexOrigin,
                                     rexDest, tripLeg.depart_date,
                                     tripLeg.depart_time, tripLeg.arrive_date,
                                     tripLeg.arrive_time, tripLeg.carrier_name,
                                     tripLeg.route_name)

                rexTripLeg.crs = tripLeg.rex_crs

                rexTrip.components.append(rexTripLeg)

        travellers = buildRexTravellerListForBookSession(trip.bookTripSession)
        rexBooking = rexCrs.propose_trip_booking(rexTrip, travellers)

    except Exception as e:
        logging.error(e)
        messages.append(e)
        pass

    return rexBooking