def ask_for_ride( request ): ''' Asks for a ride from a particular offer ''' data = request.POST profile = request.session.get("profile") offer = RideOffer.objects.get( pk=ObjectId(data['offer_id']) ) msg = data['msg'] request_id = data['request_choices'] if 'request_choices' in data else 'new' # See if the logged-in user has already asked for a ride from this person for asker in offer.askers: if asker.passenger == profile: messages.add_message( request, messages.ERROR, "You have already asked to join this ride." ) return render_to_response( 'ride_offer.html', locals(), context_instance=RequestContext(request) ) # Get or create the RideRequest if request_id == 'new': req = RideRequest.objects.create( passenger = profile, start = offer.start, end = offer.end, message = msg, date = offer.date ) request_id = req.id profile.requests.append( req ) profile.save() else: req = RideRequest.objects.get( pk=ObjectId(request_id) ) req.message = msg req.save() # Stuff that we append to the message accept_link = '%s%s'%( _hostname(), reverse( 'process_ask_for_ride', args=('accept', offer.id, request_id) ) ) decline_link = '%s%s'%( _hostname(), reverse( 'process_ask_for_ride', args=('decline', offer.id, request_id) ) ) appended = render_message( "taxi/static/emails/ask_for_ride_accept_or_decline.txt", locals() ) msg = "\r\n".join( (msg,30*'-',appended) ) # Save this asker in the offer's 'askers' field offer.askers.append( req ) offer.save() dest_email = offer.driver.user.username subject = "{} {} is asking you for a ride!".format( request.user.first_name, request.user.last_name ) send_email( email_to=dest_email, email_body=msg, email_subject=subject ) messages.add_message( request, messages.SUCCESS, "Your request has been sent successfully." ) return HttpResponseRedirect( reverse("browse") )
def offer_ride( request ): ''' Sends an offer for a ride to someone who has made a RideRequest ''' data = request.POST profile = request.session.get("profile") req = RideRequest.objects.get( pk=ObjectId(data['request_id']) ) msg = data['msg'] offer_choices = data['offer_choices'] if 'offer_choices' in data else 'new' # Can't offer twice for asker in req.askers: if asker.driver == profile: messages.add_message( request, messages.ERROR, "You have already offered a ride to this person" ) return render_to_response( 'ride_request.html', locals(), context_instance=RequestContext(request) ) # Get or create the offer that this request should be associated with if offer_choices == 'new': offer = RideOffer.objects.create( driver = profile, start = req.start, end = req.end, date = req.date, message = msg ) profile.offers.append( offer ) profile.save() else: offer = RideOffer.objects.get( pk=ObjectId(offer_choices) ) offer.message = msg offer.save() # Message to be sent to the passenger accept_link = '%s%s'%( _hostname(), reverse( 'process_offer_ride', args=('accept', offer.id, req.id) ) ) decline_link = '%s%s'%( _hostname(), reverse( 'process_offer_ride', args=('decline', offer.id, req.id) ) ) appended = render_message( 'taxi/static/emails/offer_ride_accept_or_decline.txt', locals() ) msg = "\r\n".join( (msg,30*'-',appended) ) # Save this asker in the offer's 'askers' field req.askers.append( offer ) req.save() dest_email = req.passenger.user.username subject = "{} can drive you to {}".format( profile, req.end ) send_email( email_to=dest_email, email_body=msg, email_subject=subject ) messages.add_message( request, messages.SUCCESS, "Your offer has been sent successfully." ) return HttpResponseRedirect( reverse("browse") )