Exemple #1
0
def manage():
	tour = request.args.get('tour')
	cur_user = current_user()
	guestlist = []
	if cur_user:
		
		# Get message template
		msgTemplate = MessageTemplate.query(MessageTemplate.restaurant_key==cur_user.key,MessageTemplate.message_type==1,MessageTemplate.is_active==True).get()
		if not msgTemplate:
			# No template exists, create one
			msgTemplate = MessageTemplate(restaurant_key=cur_user.key,message_type=1,is_active=True,message_text="{firstName}, your table is almost ready. Need more time? Reply ""bump"" and the # of minutes you'd like.")
			msgTemplate.put()
		
		# Create a list of guests (as dicts) within the user's library
		for checkin in cur_user.get_checkedin_guests(): 
			guest = Guest.get_by_id(checkin.guest_key.id())
			checkedinGuest = {}
			checkedinGuest["guest_ID"] = checkin.guest_key.id()
			checkedinGuest["checkin_ID"] = checkin.key.id()
			checkedinGuest["firstName"] = guest.first_name
			checkedinGuest["lastName"] = guest.last_name
			if guest.sms_number:
				checkedinGuest["sms"] = functions.stylizePhoneNumber(guest.sms_number)
			checkedinGuest["email"] = guest.email
			checkedinGuest["partySize"] = checkin.party_size
			arrival_time = checkin.signin_time - timedelta(hours=6)
			checkedinGuest["arrival_time"] = arrival_time
			checkedinGuest["wait_estimate"] = checkin.wait_estimate
			checkedinGuest["target_time"] = arrival_time + timedelta(minutes=checkin.wait_estimate)
			guestlist.append(checkedinGuest)
	# Sort guestlist by arrival time (oldest on top)
	guestlist.sort(key=lambda guest: guest["arrival_time"])
	return render_response("manage.html", guestlist=guestlist, cur_user=cur_user, tour=tour, default_message=msgTemplate.message_text)
Exemple #2
0
def refresh_manage():
	cur_user = current_user()
	waitlist = []
	if cur_user:
	# Create a list of guests (as dicts) within the user's library
		for checkin in cur_user.get_checkedin_guests(): 
			guest = Guest.get_by_id(checkin.guest_key.id())
			checkedinGuest = {}
			checkedinGuest["guest_ID"] = checkin.guest_key.id()
			checkedinGuest["checkin_ID"] = checkin.key.id()
			checkedinGuest["firstName"] = guest.first_name
			checkedinGuest["lastName"] = guest.last_name
			if guest.sms_number:
				checkedinGuest["sms"] = functions.stylizePhoneNumber(guest.sms_number)
			checkedinGuest["email"] = guest.email
			checkedinGuest["partySize"] = checkin.party_size
			arrival_time = checkin.signin_time - timedelta(hours=6)
			checkedinGuest["arrival_time"] = arrival_time.strftime('%I:%M %p')
			checkedinGuest["wait_estimate"] = checkin.wait_estimate
			target_time = arrival_time + timedelta(minutes=checkin.wait_estimate)
			checkedinGuest["target_time"] = target_time.strftime('%I:%M %p')
			waitlist.append(checkedinGuest)
		# Sort guestlist by arrival time (oldest on top)
		waitlist.sort(key=lambda guest: guest["arrival_time"])
		jsondump = json.dumps(waitlist)
		return jsondump
	return "User Not Logged In"
Exemple #3
0
def guest_signin():
	cur_user = current_user()
	tour = request.args.get('tour')
	if cur_user:
		if request.method == 'POST':
			firstName = request.form["firstName"]
			try:
				lastName = request.form["lastName"]
			except:
				lastName = None
			preferredContact = request.form["preferredContact"]
			if preferredContact == 'sms':
				smsNumber = functions.digitizePhoneNumber(request.form["smsNumber"])
				email = None
			elif preferredContact == 'email':
				email = request.form["email"]
				smsNumber = None
			try:
				if request.form["optIn"] == 'on':
					optIn = True
				else:
					optIn = False
			except:
				optIn = False
			# Add guest to database
			guest = Guest.add_guest(firstName=firstName,lastName=lastName,preferredContact=preferredContact,smsNumber=smsNumber,email=email,optIn=optIn,signup_method=1,user=cur_user)
			if not guest:
				return "Error"
			checkin = CheckIn.check_in_guest(guest)
			if not checkin:
				return "Error"
			if tour == "continue":
				return redirect(url_for("manage") + '?tour=continue')
			return "Success"
	return render_response("guest-signin.html", tour=tour)
Exemple #4
0
	def send_promo(cls,guest_ID,msgTemplate):
		cur_user = current_user()
		guest = Guest.get_by_id(int(guest_ID))
		
		# Create Message Object
		msg = Message(restaurant_key = cur_user.key, recipient_key = guest.key, contact_method = guest.preferred_contact, time_initiated = datetime.now(), message_template_key=msgTemplate.key)
		
		# Create msg_text from msgTemplate.message_text
		msg_text = msgTemplate.message_text
		if guest.first_name:
			msg_text = msg_text.replace('{firstName}',guest.first_name)
		if guest.last_name:
			msg_text = msg_text.replace('{lastName}',guest.last_name)
		
		# Send Message
		logging.info("Attempting to send promo to %s..." % str(guest.first_name) + ' ' + str(guest.last_name))
		if msg.send_message(guest,msg_text):
			msg.send_success = True
		else:
			msg.send_success = False
		
		# Store Message
		msg.put()
		
		# Return success
		return msg.send_success
Exemple #5
0
	def send_notification(cls,guest_ID,msg_text=False):
		cur_user = current_user()
		guest = Guest.get_by_id(int(guest_ID))
		
		# Create Message Object
		msg = Message(restaurant_key = cur_user.key, recipient_key = guest.key, contact_method = guest.preferred_contact, time_initiated = datetime.now())
		
		# If a default notification, populate msg_text and store MessageTemplate Key
		if not msg_text:
			msgTemplate = MessageTemplate.query(MessageTemplate.restaurant_key==cur_user.key,MessageTemplate.message_type==1,MessageTemplate.is_active==True).get()
			if not msgTemplate:
				# No template exists (new user), create one
				msgTemplate = MessageTemplate(restaurant_key=cur_user.key,message_type=1,is_active=True,message_text="{firstName}, your table is almost ready. Need more time? Reply ""bump"" and the # of minutes you'd like.")
				msgTemplate.put()
			msg.message_template_key = msgTemplate.key
			msg_text = msgTemplate.message_text
			if guest.first_name:
				msg_text = msg_text.replace('{firstName}',guest.first_name)
			if guest.last_name:
				msg_text = msg_text.replace('{lastName}',guest.last_name)
		
		# Send Message
		logging.info("Attempting to send notification to %s..." % str(guest.first_name) + ' ' + str(guest.last_name))
		if msg.send_message(guest,msg_text):
			msg.send_success = True
		else:
			msg.send_success = False
		
		# Store Message
		msg.put()
		
		# Return success
		return msg.send_success
Exemple #6
0
def undo_optout_guest(guest_ID):
	guest = Guest.get_by_id(int(guest_ID))
	if guest:
		guest.opt_in = True
		guest.put()
		return "Success"
	else:
		return "Error"
Exemple #7
0
def optin_guest(user_ID,signup_method):
	user = UserAccount.get_by_id(int(user_ID))
	# Opt in the guest (this will add them if they don't exist, and update and optin if they already do)
	guest = Guest.add_guest(firstName=request.form["firstName"], lastName=None, smsNumber=functions.digitizePhoneNumber(request.form["smsNumber"]), email=request.form["email"], preferredContact=request.form["preferredContact"], optIn=True, signup_method=int(signup_method), user=user)
	if guest:
		return "Success"
	else:
		return "Error"
Exemple #8
0
def logout():
	# Clear out guests and checkins if demo account
	cur_user = current_user()
	if cur_user.is_demo:
		# Delete guest objects, checkin objects, and user object
		guests = Guest.query(Guest.restaurant_key==cur_user.key).fetch()
		for guest in guests:
			checkins = CheckIn.query(CheckIn.guest_key==guest.key).fetch()
			for checkin in checkins:
				checkin.key.delete()
			guest.key.delete()
		for msg in Message.query(Message.restaurant_key==cur_user.key).fetch():
			msg.key.delete()
		for msgTemplate in MessageTemplate.query(MessageTemplate.restaurant_key==cur_user.key).fetch():
			msgTemplate.key.delete()
		cur_user.key.delete()
	# Logs out User
	logout_account()
	return redirect(users.create_logout_url("/"))
Exemple #9
0
def quick_add():
	cur_user = current_user()
	if not cur_user:
		logging.info("there is not a user logged in")
		return "Error"
	else:
		# Create/Update Guest and Create New Checkin, adding to queue
		firstName = request.form["quickAddName"]
		try:
			# Not used anymore, but if neither SMS or Email is checked, this gives error
			preferredContact = request.form["preferredContact"]
		except:
			preferredContact = None
		# Check to see if a phone number or email was given
		quickAddContact = request.form["quickAddContact"]
		if quickAddContact == '':
			preferredContact = None # This causes email and smsNumber to be set to None later (even though it's passing an empty string)
		partySize = int(request.form["quickAddPartySize"])
		waitEstimate = int(request.form["quickAddWaitEstimate"])
		if preferredContact == 'sms':
			smsNumber = functions.digitizePhoneNumber(request.form["quickAddContact"])
			email = None
		elif preferredContact == 'email':
			email = request.form["quickAddContact"]
			smsNumber = None
		else:
			# email or smsNumber could be empty string, but set to none
			email = None
			smsNumber = None
		try:
			if request.form["quickAddOptIn"] == 'on':
				optIn = True
			else:
				optIn = False
		except:
			optIn = False
		guest = Guest.add_guest(firstName=firstName,lastName=None,preferredContact=preferredContact,smsNumber=smsNumber,email=email,optIn=optIn,signup_method=1,user=cur_user)
		if not guest:
			return "Error"
		checkin = CheckIn.check_in_guest(guest,partySize,waitEstimate)
		if not checkin:
			return "Error"
	return "Success"
Exemple #10
0
def send_promos():
	cur_user = current_user()
	sms_counter = 0
	
	if request.form["schedule"] == "now":
		msgTemplate = MessageTemplate.get_by_id(int(request.form["msgTemplate"]))
		
		# Nasty hack because I just don't get JSON
		for key in request.form:
			if key[:5] == "guest":
				# Send message
				if not cur_user.is_demo or sms_counter <= 10:
					Message.send_promo(request.form[key], msgTemplate)
				if Guest.get_by_id(int(request.form[key])).preferred_contact == 'sms':
					sms_counter = sms_counter + 1
					if sms_counter % 5 == 0:
					# Delay message 1 min with every 5 sms
						time.sleep(60)
	return "Success"
Exemple #11
0
	def get_optins(self):
		from src.guests.models import Guest
		return Guest.query(Guest.restaurant_key==self.key,Guest.opt_in==True).fetch()
Exemple #12
0
	def get_guests(self):
		from src.guests.models import Guest
		return Guest.query(Guest.restaurant_key==self.key).fetch()