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)
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"
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)
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
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
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"
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"
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("/"))
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"
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"
def get_optins(self): from src.guests.models import Guest return Guest.query(Guest.restaurant_key==self.key,Guest.opt_in==True).fetch()
def get_guests(self): from src.guests.models import Guest return Guest.query(Guest.restaurant_key==self.key).fetch()