Example #1
0
 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)
Example #2
0
 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)
Example #3
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)
Example #4
0
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)
Example #5
0
 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)
Example #6
0
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
Example #7
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]
             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)
Example #8
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)
Example #9
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()
Example #10
0
    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)
Example #11
0
    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)