def post(self): user = users.get_current_user() person = login.is_roommate_account_initialized(user) home = Home.query(Home.key == person.home_key).fetch()[0] home_key = home.key chore_name = self.request.get('chore_name') duration = int(self.request.get('days')) cur_time = time.time() duration = duration * 24 * 60 * 60 end_time = cur_time + duration workers = [] workers_names = [] for p in home.occupants: if self.request.get(p) == 'on': workers.append(p) per = Person.query().filter( Person.user_id == p).fetch()[0].name workers_names.append(per) chore = Chore(home_key=home_key, workers_names=workers_names, chore_name=chore_name, duration=duration, end_time=end_time, workers=workers) chore.put() render.render_page(self, 'choreCreated.html', 'Chore Created') helpers.redirect(self, '/dashboard', 1000)
def get(self): user = users.get_current_user() if user: person = login.is_roommate_account_initialized(user) if person: if (person.do_not_disturb): person.do_not_disturb = False data = {'dnd_state': 'Do not disturb is off.'} person.put() else: person.do_not_disturb = True data = {'dnd_state': 'DO NOT DISTURB!'} person.put() sender_address = 'Roommates <*****@*****.**>' occupants = Home.query().filter( Home.key == person.home_key).fetch()[0].occupants for occupant in occupants: receipient = Person.query().filter( Person.user_id == occupant).fetch()[0] receipient = receipient.email_address if receipient == person.email_address: logging.info(occupant) else: helpers.send_dnd_mail(sender_address, person.name, receipient) render.render_page_with_data(self, 'doNotDisturb.html', "Do Not Disturb Toggle", data) helpers.redirect(self, '/dashboard', 1000) else: helpers.redirect(self, '/', 0) else: helpers.redirect(self, '/', 0)
def post(self): user = users.get_current_user() if user: # Retrieve data from form title = self.request.get('title') content = self.request.get('content') days = int(self.request.get('days')) hours = int(self.request.get('hours')) # Convert 'on' or 'off' from checkbox to True or False important_original = self.request.get('important') if important_original == 'on': important = True else: important = False # Retrieve person and home objects person = login.is_roommate_account_initialized(user) person_name = Person.query().filter( Person.user_id == person.user_id).fetch()[0].name home = Home.query().filter(Home.key == person.home_key).fetch() # Calculate expiration time cur_time = time.time() expir_time = cur_time + days * 24 * 60 * 60 + hours * 60 * 60 # Create and put new sticky new_sticky = Sticky(title=title, content=content, important=important, author=person_name, home_key=person.home_key, expiration=expir_time) new_sticky.put() render.render_page(self, 'stickyCreated.html', "Sticky Created") helpers.redirect(self, '/dashboard', 1000)
def dndEnabled(self, enabler): home = Home.query().filter(Home.key == enabler.home_key).fetch() for id in home[0].occupants: people_in_home.append(Person.query().filter(id == Person.user_id).fetch()[0]) for person in people_in_home: if not person.user_id == enabler.user_id: email_content = "Dear " + person.name +",\n" + enabler.name + " has turned on do not disturb for your room. Enter with caution. Or better yet, not at all. ;)\nSincerely,\nThe Roomates Developer Team" # Import smtplib for the actual sending function sendEmail(person.user_id, enabler.email, 'Do Not Disturb Enabled', email_content)
def post(self): user = users.get_current_user() person = login.is_roommate_account_initialized(user) home = Home.query(Home.key == person.home_key).fetch()[0] bill_name = self.request.get('bill_name') payer_id = self.request.get('payer') payer_name = Person.query().filter( Person.user_id == payer_id).fetch()[0].name home_key = home.key bill = Bills(bill_name=bill_name, home_key=home_key, payer_id=payer_id, payer_name=payer_name) bill.put() render.render_page(self, 'billsCreated.html', 'Bill Created') helpers.redirect(self, '/dashboard', 1000)
def getDashData(self, person): if person: home = Home.query().filter(Home.key == person.home_key).fetch() dnd_state = False home_stickies = [] checked_in = [] checked_out = [] people_in_home = [] has_dnd_on = [] for id in home[0].occupants: people_in_home.append(Person.query().filter(id == Person.user_id).fetch()[0]) for p in people_in_home: if p.location: checked_in.append(p) else: checked_out.append(p) if p.do_not_disturb: has_dnd_on.append(p) # Check for and delete expired sticky notes for sticky_note in Sticky.query().filter(Sticky.home_key == person.home_key).fetch(): if sticky_note.expiration < time.time(): sticky_note.key.delete() else: home_stickies.append(sticky_note) # fetch chores chores = Chore.query().filter(Chore.home_key==home[0].key).fetch() # update chores for chore in chores: if chore.end_time < time.time(): chore.end_time = chore.end_time + chore.duration chore.index = (chore.index + 1)%len(chore.workers) chore.completed = False chore.put() # fetch bills bills = Bills.query().filter(Bills.home_key==home[0].key).fetch() # fetch room name room_name = home[0].name # for person in people_in_home: # logging.info(person.name) return_data = {'room_name': room_name, 'bills': bills, 'chores': chores, 'checked_in' : checked_in, 'checked_out' : checked_out, 'has_dnd_on' : has_dnd_on ,'home_stickies' : home_stickies, 'person': person} return return_data
def get(self): user = users.get_current_user() if user: person = login.is_roommate_account_initialized(user) if person: home = Home.query(Home.key == person.home_key).fetch()[0] rotation_list = [] for user_id in home.occupants: p = Person.query().filter( Person.user_id == user_id).fetch()[0] rotation_list.append(p) data = {'rotation_list': rotation_list} render.render_page_with_data(self, 'chores.html', 'Create a Chore', data) else: helpers.redirect(self, '/', 0) else: helpers.redirect(self, '/', 0)
def get(self): user = users.get_current_user() if user: person = login.is_roommate_account_initialized(user) if person: home = Home.query(Home.key == person.home_key).fetch()[0] possible_payers = [] for user_id in home.occupants: p = Person.query().filter( Person.user_id == user_id).fetch()[0] possible_payers.append(p) data = {'payers': possible_payers} render.render_page_with_data(self, 'bills.html', 'Assign a Bill', data) else: helpers.redirect(self, '/', 0) else: helpers.redirect(self, '/', 0)
def removeFromRoom(self, user): person = login.is_roommate_account_initialized(user) if person: home = Home.query().filter(Home.key == person.home_key).fetch()[0] logging.info("Person: ") logging.info(person) logging.info("Home Occupants: ") logging.info(home.occupants) else: logging.info("no person") #Removes person from record of Home if person.user_id in home.occupants: home.occupants.remove(person.user_id) logging.info("Home occupants: ") logging.info(home.occupants) chores = Chore.query().filter(Chore.home_key == home.key) bills = Bills.query().filter(Bills.home_key == home.key) if len(home.occupants) == 0: for c in chores: c.key.delete() for b in bills: b.key.delete() home.key.delete() else: #Creo que esto funcione for c in chores: if person.user_id in c.workers: c.workers.remove(person.user_id) for b in bills: if b.payer_id == person.user_id: b.key.delete() home.put() #Find stickies associated with person stickies = Sticky.query().filter(Sticky.author == person.user_id) for note in stickies: note.key.delete() #Updates person and home entries person.key.delete()
def post(self): name = self.request.get('name') phone_number = int( self.request.get('phone_number1') + self.request.get('phone_number2') + self.request.get('phone_number3')) #create new person object user = users.get_current_user() color = self.request.get('color') person = Person(name=name, color=color, phone_number=phone_number, user_id=user.user_id(), email_address=user.email(), calendar_id=user.email()) #retrieve data from form home_name = self.request.get('home_name') password = helpers.hashPass(self.request.get('password')) # Query for home object potential_home = Home.query().filter( Home.name == home_name, Home.password == password).fetch() if potential_home: potential_home[0].occupants.append(user.user_id()) home_key = potential_home[0].put() person.put() person.home_key = home_key #Share Calendar calID = potential_home[0].calendar_id #Share calendar with user scopes = ['https://www.googleapis.com/auth/calendar'] credentials = ServiceAccountCredentials.from_json_keyfile_name( 'service_account.json', scopes=scopes) http_auth = credentials.authorize(Http()) rule = { 'scope': { 'type': 'user', 'value': user.email() }, 'role': 'reader' } created_rule = service.acl().insert( calendarId=calID, body=rule).execute(http=http_auth) logging.info(calID) #Update new calendar with events of person who just joined #Gets primary calendary ID http = decorator.http() #Call the service using the authorized Http object. now = datetime.datetime.utcnow().isoformat( ) + 'Z' # 'Z' indicates UTC time requestResults = service.events().list( calendarId='primary', timeMin=now, singleEvents=True, orderBy='startTime').execute(http=http) for event in requestResults['items']: helpers.addEventToCal(self, event, calID) # requestResults = service.events().list(calendarId='primary', timeMin=now, singleEvents=True, orderBy='startTime').execute(http=http) # for event in requestResults['items']: # helpers.addEventToCal(self, event, calID) #DONE WITH PASTED CODE person.put() data = {'home_name': home_name} render.render_page_with_data(self, 'successfullyJoinedHome.html', 'Successfully Joined Home', data) helpers.redirect(self, '/dashboard', 1000) else: # REPORT to client to try again. wrong name or password data = { 'error': 'You have entered an incorrect home name or password' } render.render_page_with_data_no_header( self, 'newJoinHome.html', 'Error: Wrong Name or Password', data)
def post(self): #retrieve data from form name = self.request.get('name_b') phone_number = int( self.request.get('phone_number1_b') + self.request.get('phone_number2_b') + self.request.get('phone_number3_b')) color = self.request.get('color') #create new person object user = users.get_current_user() person = Person(name=name, color=color, phone_number=phone_number, user_id=user.user_id(), email_address=user.email(), calendar_id=user.email()) home_name = self.request.get('home_name_b') homes_with_same_name = Home.query().filter( Home.name == home_name).fetch() logging.info(self.request.get('password_a')) logging.info(self.request.get('password_b')) if len(homes_with_same_name ) > 0: #If home with same name already exists data = {'error': 'This home name is already taken'} render.render_page_with_data_no_header(self, 'newJoinHome.html', 'Error: Home Name Taken', data) elif not (self.request.get('password_b') == self.request.get('password_a')): data = {'error': 'Error: Passwords do not match'} render.render_page_with_data_no_header(self, 'newJoinHome.html', 'Join a Room', data) else: password = helpers.hashPass(self.request.get('password_b')) #Creates a calendar to be shared (on service account) calID = helpers.createNewCal(self, home_name) new_home = Home(name=home_name, password=password, calendar_id=calID, occupants=[user.user_id()]) person.home_key = new_home.put() person.put() #Share calendar with user scopes = ['https://www.googleapis.com/auth/calendar'] credentials = ServiceAccountCredentials.from_json_keyfile_name( 'service_account.json', scopes=scopes) http_auth = credentials.authorize(Http()) rule = { 'scope': { 'type': 'user', 'value': user.email() }, 'role': 'reader' } created_rule = service.acl().insert( calendarId=calID, body=rule).execute(http=http_auth) logging.info(calID) #Update new calendar with events of person who just joined #Gets primary calendary ID http = decorator.http() #Call the service using the authorized Http object. now = datetime.datetime.utcnow().isoformat( ) + 'Z' # 'Z' indicates UTC time requestResults = service.events().list( calendarId='primary', timeMin=now, singleEvents=True, orderBy='startTime').execute(http=http) for event in requestResults['items']: helpers.addEventToCal(self, event, calID) #redirect to create a calendar helpers.redirect(self, '/dashboard', 1000)