Пример #1
0
    def get(self):
        apt_name = self.request.get(IDENTIFIER_APT_NAME)
        user_email = self.request.get(IDENTIFIER_USER_EMAIL)
        apt_lst = Apartment.query(Apartment.apt_name == apt_name).fetch()

        # print "called: " + user_email + ", " + apt_name
        cur_apt = None
        for apt in apt_lst:
            if user_email in apt.user_email_lst:
                cur_apt = apt

        cur_notebook_lst = NoteBook.query( NoteBook.notebook_id == cur_apt.notebook_id).fetch()
        if len(cur_notebook_lst) == 0:
            response = {}
            response['error'] = 'we dont have notebook for the apt: ' + apt_name
            return self.respond(**response)


        cur_notebook = cur_notebook_lst[0]


        retList = []
        for noteid in cur_notebook.note_id_lst:
            note_lst = Note.query(Note.id == noteid).fetch()
            cur_note = note_lst[0]
            ret_note = {}
            ret_note['author'] = cur_note.author_email
            ret_note['description'] = cur_note.description
            date = str(cur_note.date)
            ret_note['last_edit_date'] = date
            retList.append(ret_note)

        self.respond(AllNoteLst = retList, status="Success")
Пример #2
0
    def get(self):
        apt_name = self.request.get(IDENTIFIER_APT_NAME)
        user_email = self.request.get(IDENTIFIER_USER_EMAIL)
        apt_lst = Apartment.query(Apartment.apt_name == apt_name).fetch()
        cur_apt = None
        for apt in apt_lst:
            if user_email in apt.user_email_lst:
                cur_apt = apt
        if cur_apt == None:
            response = {}
            response[
                'error'] = 'the apt: ' + apt_name + ' is not available for user: ' + user_email
            return self.respond(**response)

        for expense_id in cur_apt.expense_id_lst:
            expense_lst = Expense.query(
                Expense.expense_id == expense_id).fetch()
            if len(expense_lst) > 0:
                expense = expense_lst[0]
                if not expense.is_paid:
                    expense.checkout()
                    cur_apt.total_cost += expense.total_cost
                    cur_apt.put()

        self.respond(status="Success")
Пример #3
0
 def get(self):
     apt_id = self.request.get(IDENTIFIER_APT_ID)
     print "getExpenseListService, apt_id="+apt_id
     expenses_lst = []
     apt_lst = Apartment.query(Apartment.apt_id == apt_id).fetch()
     if len(apt_lst)!=0 :
         apt = apt_lst[0]
         expenses = apt.getAllexpenses()
         if len(expenses)!=0:
             for expense in expenses:
                 cur_expense = {}
                 cur_expense['expense_id'] = str(expense.expense_id)
                 creater_email = expense.creater_email
                 creaters = User.query(User.user_email == creater_email).fetch()
                 creater = creaters[0]
                 creater_nick_name = creater.nick_name
                 cur_expense['creater_nickname'] = creater_nick_name
                 cur_expense['photo'] = expense.cover_url
                 cur_expense['date'] = str(expense.last_edit)
                 cur_expense['expense_name'] = expense.expense_name
                 cur_expense['sharer_lst'] = expense.user_email_lst
                 cur_expense['is_paid'] = expense.is_paid
                 cur_expense['the_number_of_items'] = len(expense.item_id_lst)
                 cur_expense['total_cost'] = expense.total_cost
                 # cur_expense['approval_cost'] = expense.approval_cost
                 expenses_lst.append(cur_expense)
     self.respond(status="success", expenses_lst=expenses_lst)
Пример #4
0
    def get(self):
        apt_name = self.request.get(IDENTIFIER_APT_NAME)
        user_email = self.request.get(IDENTIFIER_USER_EMAIL)
        apt_lst = Apartment.query(Apartment.apt_name == apt_name).fetch()

        # print "called: " + user_email + ", " + apt_name
        cur_apt = None
        for apt in apt_lst:
            if user_email in apt.user_email_lst:
                cur_apt = apt

        cur_notebook_lst = NoteBook.query(
            NoteBook.notebook_id == cur_apt.notebook_id).fetch()
        if len(cur_notebook_lst) == 0:
            response = {}
            response[
                'error'] = 'we dont have notebook for the apt: ' + apt_name
            return self.respond(**response)

        cur_notebook = cur_notebook_lst[0]

        retList = []
        for noteid in cur_notebook.note_id_lst:
            note_lst = Note.query(Note.id == noteid).fetch()
            cur_note = note_lst[0]
            ret_note = {}
            ret_note['author'] = cur_note.author_email
            ret_note['description'] = cur_note.description
            date = str(cur_note.date)
            ret_note['last_edit_date'] = date
            retList.append(ret_note)

        self.respond(AllNoteLst=retList, status="Success")
Пример #5
0
    def get(self):

        apt_name = self.request.get(IDENTIFIER_APT_NAME)
        user_email = self.request.get(IDENTIFIER_USER_EMAIL)
        apt_lst = Apartment.query(Apartment.apt_name == apt_name).fetch()

        # print "called: " + user_email + ", " + apt_name
        cur_apt = None
        for apt in apt_lst:
            if user_email in apt.user_email_lst:
                cur_apt = apt

        user_info_lst = []
        for user_email in apt.user_email_lst:
            users = User.query(User.user_email == user_email).fetch()
            user = users[0]
            user_info = {}
            user_info['email:'] = user_email
            user_info['nick_name'] = user.nick_name
            user_info['owe'] = user.cost
            user_info['owed'] = user.borrow
            user_info['balance'] = user.owe
            user_info_lst.append(user_info)

        self.respond(user_info_lst=user_info_lst,
                     total_cost=apt.total_cost,
                     status="Success")
Пример #6
0
    def get(self):

        apt_name = self.request.get(IDENTIFIER_APT_NAME)
        user_email = self.request.get(IDENTIFIER_USER_EMAIL)
        apt_lst = Apartment.query(Apartment.apt_name == apt_name).fetch()

        # print "called: " + user_email + ", " + apt_name
        cur_apt = None
        for apt in apt_lst:
            if user_email in apt.user_email_lst:
                cur_apt = apt

        user_info_lst = []
        for user_email in apt.user_email_lst:
            users = User.query(User.user_email == user_email).fetch()
            user = users[0]
            user_info = {}
            user_info['email:'] = user_email
            user_info['nick_name'] = user.nick_name
            user_info['owe'] = user.cost
            user_info['owed'] = user.borrow
            user_info['balance'] = user.owe
            user_info_lst.append(user_info)

        self.respond(user_info_lst = user_info_lst, total_cost = apt.total_cost, status="Success")
Пример #7
0
 def get(self):
     apt_id = self.request.get(IDENTIFIER_APT_ID)
     print "getExpenseListService, apt_id=" + apt_id
     expenses_lst = []
     apt_lst = Apartment.query(Apartment.apt_id == apt_id).fetch()
     if len(apt_lst) != 0:
         apt = apt_lst[0]
         expenses = apt.getAllexpenses()
         if len(expenses) != 0:
             for expense in expenses:
                 cur_expense = {}
                 cur_expense['expense_id'] = str(expense.expense_id)
                 creater_email = expense.creater_email
                 creaters = User.query(
                     User.user_email == creater_email).fetch()
                 creater = creaters[0]
                 creater_nick_name = creater.nick_name
                 cur_expense['creater_nickname'] = creater_nick_name
                 cur_expense['photo'] = expense.cover_url
                 cur_expense['date'] = str(expense.last_edit)
                 cur_expense['expense_name'] = expense.expense_name
                 cur_expense['sharer_lst'] = expense.user_email_lst
                 cur_expense['is_paid'] = expense.is_paid
                 cur_expense['the_number_of_items'] = len(
                     expense.item_id_lst)
                 cur_expense['total_cost'] = expense.total_cost
                 # cur_expense['approval_cost'] = expense.approval_cost
                 expenses_lst.append(cur_expense)
     self.respond(status="success", expenses_lst=expenses_lst)
Пример #8
0
    def get(self):
        apt_name = self.request.get(IDENTIFIER_APT_NAME)
        user_email = self.request.get(IDENTIFIER_USER_EMAIL)
        apt_lst = Apartment.query(Apartment.apt_name == apt_name).fetch()

        # print "called: " + user_email + ", " + apt_name
        cur_apt = None
        for apt in apt_lst:
            if user_email in apt.user_email_lst:
                cur_apt = apt

        user_lst = User.query(User.apt_id == cur_apt.apt_id).fetch()

        sorted_user_lst = sorted(user_lst, key=lambda user:user.owe)

        first = 0
        end = len(sorted_user_lst) - 1

        payment_lst = []

        print "sorted_lst: " + str(sorted_user_lst)

        while first < end:
            first_user = sorted_user_lst[first]
            end_user = sorted_user_lst[end]
            if first_user.owe == 0:
                first += 1
                continue
            if end_user.owe == 0:
                end -= 1
                continue
            payment = {}

            payment['from'] = first_user.user_email
            payment['to'] = end_user.user_email



            if abs(first_user.owe) > end_user.owe:
                payment['amount'] = end_user.owe
                first_user.owe += end_user.owe
                end_user.owe = 0

            else:
                payment['amount'] = abs(first_user.owe)
                end_user.owe -= abs(first_user.owe)
                first_user.owe = 0


            print payment
            print first_user.user_email + ": " + str(first_user.owe)
            print end_user.user_email + ": " + str(end_user.owe)

            payment_lst.append(payment)
            first_user.put()
            end_user.put()

        self.respond(payment_lst = payment_lst, status="Success")
Пример #9
0
    def get(self):
        user_email = self.request.get(IDENTIFIER_USER_EMAIL)

        users = User.query(User.user_email == user_email).fetch()
        if len(users) == 0:
            response = {}
            response['error'] = 'the email: ' + user_email + ' has not registered yet'
            return self.respond(**response)

        cur_user = users[0]
        bank_account = cur_user.bank_account
        nick_name = cur_user.nick_name
        owe = cur_user.cost
        owed = cur_user.borrow
        balance = cur_user.owe

        print("user information collected. e.g. bankaccount="+bank_account)

        tasks = cur_user.getAlltasks()
        finished_task_lst = []
        unfinished_task_lst = []

        # for task in tasks:
        #     cur_task = {}
        #     cur_task['task_id'] = task.task_id
        #     cur_task['task_name'] = task.task_name
        #     if task.finished:
        #         finished_task_lst.append(cur_task)
        #     else:
        #         unfinished_task_lst.append(cur_task)

        taskinfo = {}
        taskinfo['finished_task_lst'] = finished_task_lst
        taskinfo['unfinished_task_lst'] = unfinished_task_lst

        print("task collected")

        apt_id = cur_user.apt_id

        apts = Apartment.query(Apartment.apt_id == apt_id).fetch()

        apt_info = {}
        if len(apts) > 0:
            apt = apts[0]
            apt_info['apt_name'] = apt.apt_name
            apt_info['apt_id'] = apt.apt_id
            apt_info['roommates_lst'] = apt.get_all_memebers_nickname()
            apt_info['apt_photo'] = apt.cover_url

        # usr_photo = cur_user.cover_url

        print("apartment information collected. now respond.")

        self.respond(status="Success", bank_account=bank_account, nick_name = nick_name,
                     user_email = user_email, owe=owe, owed = owed, balance = balance, apt_info = apt_info,
                     task_info = taskinfo, registered=True)
Пример #10
0
    def get(self):
        apt_name = self.request.get(IDENTIFIER_APT_NAME)
        user_email = self.request.get(IDENTIFIER_USER_EMAIL)
        apt_lst = Apartment.query(Apartment.apt_name == apt_name).fetch()

        # print "called: " + user_email + ", " + apt_name
        cur_apt = None
        for apt in apt_lst:
            if user_email in apt.user_email_lst:
                cur_apt = apt

        user_lst = User.query(User.apt_id == cur_apt.apt_id).fetch()

        sorted_user_lst = sorted(user_lst, key=lambda user: user.owe)

        first = 0
        end = len(sorted_user_lst) - 1

        payment_lst = []

        print "sorted_lst: " + str(sorted_user_lst)

        while first < end:
            first_user = sorted_user_lst[first]
            end_user = sorted_user_lst[end]
            if first_user.owe == 0:
                first += 1
                continue
            if end_user.owe == 0:
                end -= 1
                continue
            payment = {}

            payment['from'] = first_user.user_email
            payment['to'] = end_user.user_email

            if abs(first_user.owe) > end_user.owe:
                payment['amount'] = end_user.owe
                first_user.owe += end_user.owe
                end_user.owe = 0

            else:
                payment['amount'] = abs(first_user.owe)
                end_user.owe -= abs(first_user.owe)
                first_user.owe = 0

            print payment
            print first_user.user_email + ": " + str(first_user.owe)
            print end_user.user_email + ": " + str(end_user.owe)

            payment_lst.append(payment)
            first_user.put()
            end_user.put()

        self.respond(payment_lst=payment_lst, status="Success")
def add_apartment():
    location = request.form.get('location')
    if request.method == 'POST':
        if location or location != '':
            try:
                apartment = Apartment(
                    a_name=request.form.get('a_name'),
                    location=request.form.get('location'),
                    address=request.form.get('address'),
                    postcode=request.form.get('postcode'),
                    longtitude=request.form.get('longtitude'),
                    altitude=request.form.get('altitude'),
                    bedroom=request.form.get('bedroom'),
                    guest=request.form.get('guest'),
                    wifi=True if request.form.get('wifi') == '1' else False,
                    parking=True
                    if request.form.get('parking') == '1' else False,
                    tv=True if request.form.get('tv') == '1' else False,
                    bathroom=True
                    if request.form.get('bathroom') == '1' else False,
                    coffee=True
                    if request.form.get('coffee') == '1' else False,
                    price=request.form.get('price'),
                    type=request.form.get('type'),
                    description=request.form.get('description'),
                    owner_id=current_user.id)
                db.session.add(apartment)
                db.session.flush()

                images = request.files.getlist('images')
                for img in images:
                    fname = secure_filename(img.filename)
                    if fname.find('.jpg') != -1:
                        fpath = path.join(current_app.static_folder, 'upload',
                                          str(apartment.id))
                        if not path.exists(fpath):
                            mkdir(fpath)
                        img.save(path.join(fpath, fname))

                db.session.commit()
                flash('Your apartment is added.', 'success')
            except:
                db.session.rollback()
                flash('Something went worng.', 'warning')
            finally:
                db.session.close()

            return redirect(url_for('apartments'))
        else:
            flash('You should select a location.', 'warning')

    return render_template('admin/add_apartment.html')
Пример #12
0
    def get(self):

        expense_name = self.request.get(IDENTIFIER_EXPENSE_NAME)
        apt_name = self.request.get(IDENTIFIER_APT_NAME)
        user_email = self.request.get(IDENTIFIER_USER_EMAIL)
        apt_lst = Apartment.query(Apartment.apt_name == apt_name).fetch()

        cur_apt = None
        for apt in apt_lst:
            if user_email in apt.user_email_lst:
                cur_apt = apt

        if cur_apt == None:
            response = {}
            response[
                'error'] = 'the apt: ' + apt_name + ' is not available for user: '******'error'] = 'the apt: ' + apt_name + ' does not have a expense named: ' + expense_name
            return self.respond(**response)
        if cur_expense.is_paid:
            response = {}
            response[
                'error'] = 'the : ' + expense_name + ' has already been paid'
            return self.respond(**response)
        cur_expense.checkout()
        cur_apt.total_cost += cur_expense.total_cost
        cur_apt.put()

        user_info_lst = []
        for user_email in cur_apt.user_email_lst:
            users = User.query(User.user_email == user_email).fetch()
            user = users[0]
            user_info = {}
            user_info['email:'] = user_email
            user_info['nick_name'] = user.nick_name
            user_info['owe'] = user.cost
            user_info['owed'] = user.borrow
            user_info['balance'] = user.owe
            user_info_lst.append(user_info)

        self.respond(user_info_lst=user_info_lst, status="Success")
Пример #13
0
    def get(self):

        expense_name = self.request.get(IDENTIFIER_EXPENSE_NAME)
        apt_name = self.request.get(IDENTIFIER_APT_NAME)
        user_email = self.request.get(IDENTIFIER_USER_EMAIL)
        apt_lst = Apartment.query(Apartment.apt_name == apt_name).fetch()

        cur_apt = None
        for apt in apt_lst:
            if user_email in apt.user_email_lst:
                cur_apt = apt

        if cur_apt == None:
            response = {}
            response['error'] = 'the apt: ' + apt_name + ' is not available for user: '******'error'] = 'the apt: ' + apt_name + ' does not have a expense named: ' + expense_name
            return self.respond(**response)
        if cur_expense.is_paid:
            response = {}
            response['error'] = 'the : ' + expense_name + ' has already been paid'
            return self.respond(**response)
        cur_expense.checkout()
        cur_apt.total_cost += cur_expense.total_cost
        cur_apt.put()


        user_info_lst = []
        for user_email in cur_apt.user_email_lst:
            users = User.query(User.user_email == user_email).fetch()
            user = users[0]
            user_info = {}
            user_info['email:'] = user_email
            user_info['nick_name'] = user.nick_name
            user_info['owe'] = user.cost
            user_info['owed'] = user.borrow
            user_info['balance'] = user.owe
            user_info_lst.append(user_info)



        self.respond(user_info_lst = user_info_lst, status="Success")
Пример #14
0
    def get(self):

        # req_json = json.loads(self.request.body)

        # apt_name = req_json[IDENTIFIER_APT_NAME]
        apt_name = self.request.get(IDENTIFIER_APT_NAME)

        # # user_email = req_json[IDENTIFIER_USER_EMAIL]
        # user_email = self.request.get(IDENTIFIER_USER_EMAIL)

        # new_email = req_json[IDENTIFIER_NEW_EMAIL]
        new_email = self.request.get(IDENTIFIER_NEW_EMAIL)

        apt_lst = Apartment.query(Apartment.apt_name == apt_name).fetch()

        target_apt = None

        if len(apt_lst)!=0:
            target_apt = apt_lst[0]



        # for apt in apt_lst:
        #     if user_email in apt.user_email_lst:
        #         target_apt = apt
        #         break
        user_lst = User.query(User.user_email == new_email).fetch()

        # if target_apt == None:
        #     response = {}
        #     response['error'] = 'the email: ' + user_email + ' has not been registered'
        #     return self.respond(**response)
        if len(user_lst) == 0:
            response = {}
            response['error'] = 'the new email: ' + new_email + ' has not been registered'
            return self.respond(**response)

        new_user = user_lst[0]

        if not new_user.apt_id is None:
            response = {}
            response['error'] = 'the user: '******' cannot be added'
            return self.respond(**response)

        new_user.apt_id = target_apt.apt_id
        if not new_email in target_apt.user_email_lst:
            target_apt.user_email_lst.insert(0, new_email)
            target_apt.put()
        new_user.put()

        self.respond(apt_id = target_apt.apt_id, status="Success")
Пример #15
0
    def get(self):

        apt_id = self.request.get(IDENTIFIER_APT_ID)
        target_apt_lst = Apartment.query(Apartment.apt_id == apt_id).fetch()
        if len(target_apt_lst) != 1:
            print "target_apt_lst length error:" + str(len(target_apt_lst))
        query_apt = target_apt_lst[0]

        expense_id_lst = query_apt.expense_id_lst
        print "expense_id_lst length:" + str(len(expense_id_lst))

        unassigned_tasks_lst = []
        assigned_tasks_lst = []
        finished_tasks_lst = []

        for expense_id in expense_id_lst:
            # expense_id = self.request.get(IDENTIFIER_EXPENSE_ID)
            expenses = Expense.query(Expense.expense_id == expense_id).fetch()
            if len(expenses) == 0:
                continue
            expense = expenses[0]

            tasks = expense.getAllTasks()

            for task in tasks:
                cur_task = {}
                cur_task['photo_blobkey'] = str(task.photo_blobkey)
                cur_task['creator_nickname'] = task.getCreaterNickName()
                cur_task['creator_email'] = task.creater_email
                cur_task['task_name'] = task.task_name
                cur_task['description'] = task.description
                cur_task['task_id'] = str(task.task_id)
                cur_task['expense_id'] = str(task.expense_id)
                cur_task['candidate_lst_str'] = task.getCandidateListString()
                if task.assigned:
                    cur_task['charger_name'] = task.getChargerNickName()
                    cur_task['charger_email'] = task.charger_email
                    if task.finished:
                        finished_tasks_lst.append(cur_task)
                    else:
                        assigned_tasks_lst.append(cur_task)
                else:
                    unassigned_tasks_lst.append(cur_task)

        task_info = {}
        task_info['finished_tasks_lst'] = finished_tasks_lst
        task_info['unassigned_tasks_lst'] = unassigned_tasks_lst
        task_info['assigned_tasks_lst'] = assigned_tasks_lst

        self.respond(task_info=task_info, status="Success")
Пример #16
0
    def get(self):

        apt_id = self.request.get(IDENTIFIER_APT_ID)
        target_apt_lst = Apartment.query(Apartment.apt_id == apt_id).fetch()
        if len(target_apt_lst)!=1:
            print "target_apt_lst length error:" + str(len(target_apt_lst))
        query_apt = target_apt_lst[0]

        expense_id_lst = query_apt.expense_id_lst
        print "expense_id_lst length:" + str(len(expense_id_lst))

        unassigned_tasks_lst = []
        assigned_tasks_lst = []
        finished_tasks_lst = []

        for expense_id in expense_id_lst:
            # expense_id = self.request.get(IDENTIFIER_EXPENSE_ID)
            expenses = Expense.query(Expense.expense_id == expense_id).fetch()
            if len(expenses) == 0:
                continue
            expense = expenses[0]

            tasks = expense.getAllTasks()

            for task in tasks:
                cur_task = {}
                cur_task['photo_blobkey'] = str(task.photo_blobkey)
                cur_task['creator_nickname'] = task.getCreaterNickName()
                cur_task['creator_email'] = task.creater_email
                cur_task['task_name'] = task.task_name
                cur_task['description'] = task.description
                cur_task['task_id'] = str(task.task_id)
                cur_task['expense_id'] = str(task.expense_id)
                cur_task['candidate_lst_str'] = task.getCandidateListString()
                if task.assigned:
                    cur_task['charger_name'] = task.getChargerNickName()
                    cur_task['charger_email'] = task.charger_email
                    if task.finished:
                        finished_tasks_lst.append(cur_task)
                    else:
                        assigned_tasks_lst.append(cur_task)
                else:
                    unassigned_tasks_lst.append(cur_task)

        task_info = {}
        task_info['finished_tasks_lst'] = finished_tasks_lst
        task_info['unassigned_tasks_lst'] = unassigned_tasks_lst
        task_info['assigned_tasks_lst'] = assigned_tasks_lst

        self.respond(task_info=task_info, status="Success")
Пример #17
0
    def get(self):

        # req_json = json.loads(self.request.body)
        # user_email = req_json[IDENTIFIER_USER_EMAIL]
        user_email = self.request.get(IDENTIFIER_USER_EMAIL)
        # apt_name = req_json[IDENTIFIER_APT_NAME]
        apt_name = self.request.get(IDENTIFIER_APT_NAME)
        # description = req_json[IDENTIFIER_DESCRIPTION_NAME]
        description = self.request.get(IDENTIFIER_DESCRIPTION_NAME)

        apt_lst = Apartment.query(Apartment.apt_name == apt_name).fetch()

        cur_apt = None
        for apt in apt_lst:
            if user_email in apt.user_email_lst:
                cur_apt = apt

        if cur_apt == None:
            response = {}
            response[
                'error'] = 'the apt: ' + apt_name + ' is not available for user: '******'error'] = 'we dont have notebook for the apt: ' + apt_name
            return self.respond(**response)

        cur_note_book = cur_note_book_lst[0]

        note_id = uuid.uuid4()
        note = Note(id=str(note_id),
                    description=description,
                    author_email=user_email,
                    notebook_id=cur_note_book_id)

        cur_note_book.note_id_lst.append(str(note_id))

        cur_note_book.put()
        note.put()

        self.respond(note_id=str(note_id),
                     notebook_id=cur_note_book_id,
                     status="Success")
Пример #18
0
 def get(self):
     apt_id = self.request.get(IDENTIFIER_APT_ID)
     apts = Apartment.query(Apartment.apt_id == apt_id).fetch()
     user_nickname_lst=[]
     if apts[0]:
        apt = apts[0]
        for user_email in apt.user_email_lst:
            users = User.query(User.user_email == user_email).fetch()
            user = users[0]
            user_nickname_lst.append(user.nick_name)
        self.respond(status="success", apt_id=apt.apt_id, apt_name=apt.apt_name, creater_email=apt.user_email_lst, user_email_lst=apt.user_email_lst, user_nickname_lst=user_nickname_lst)
     else:
        print("cannot find the apartment with id :" + apt_id)
        self.respond(status="fail", error_msg="cannot find the apartment with id :" + apt_id)
Пример #19
0
    def get(self):

        # req_json = json.loads(self.request.body)

        # apt_name = req_json[IDENTIFIER_APT_NAME]
        apt_name = self.request.get(IDENTIFIER_APT_NAME)

        # # user_email = req_json[IDENTIFIER_USER_EMAIL]
        # user_email = self.request.get(IDENTIFIER_USER_EMAIL)

        # new_email = req_json[IDENTIFIER_NEW_EMAIL]
        new_email = self.request.get(IDENTIFIER_NEW_EMAIL)

        apt_lst = Apartment.query(Apartment.apt_name == apt_name).fetch()

        target_apt = None

        if len(apt_lst) != 0:
            target_apt = apt_lst[0]

        # for apt in apt_lst:
        #     if user_email in apt.user_email_lst:
        #         target_apt = apt
        #         break
        user_lst = User.query(User.user_email == new_email).fetch()

        # if target_apt == None:
        #     response = {}
        #     response['error'] = 'the email: ' + user_email + ' has not been registered'
        #     return self.respond(**response)
        if len(user_lst) == 0:
            response = {}
            response[
                'error'] = 'the new email: ' + new_email + ' has not been registered'
            return self.respond(**response)

        new_user = user_lst[0]

        if not new_user.apt_id is None:
            response = {}
            response['error'] = 'the user: '******' cannot be added'
            return self.respond(**response)

        new_user.apt_id = target_apt.apt_id
        if not new_email in target_apt.user_email_lst:
            target_apt.user_email_lst.insert(0, new_email)
            target_apt.put()
        new_user.put()

        self.respond(apt_id=target_apt.apt_id, status="Success")
Пример #20
0
    def get(self):

        # req_json = json.loads(self.request.body)
        # user_email = req_json[IDENTIFIER_USER_EMAIL]
        user_email = self.request.get(IDENTIFIER_USER_EMAIL)
        # apt_name = req_json[IDENTIFIER_APT_NAME]
        apt_name =  self.request.get(IDENTIFIER_APT_NAME)
        # description = req_json[IDENTIFIER_DESCRIPTION_NAME]
        description = self.request.get(IDENTIFIER_DESCRIPTION_NAME)

        apt_lst = Apartment.query(Apartment.apt_name == apt_name).fetch()

        cur_apt = None
        for apt in apt_lst:
            if user_email in apt.user_email_lst:
                cur_apt = apt

        if cur_apt == None:
            response = {}
            response['error'] = 'the apt: ' + apt_name + ' is not available for user: '******'error'] = 'we dont have notebook for the apt: ' + apt_name
            return self.respond(**response)

        cur_note_book = cur_note_book_lst[0]

        note_id = uuid.uuid4()
        note = Note(id = str(note_id), description = description, author_email = user_email, notebook_id = cur_note_book_id)

        cur_note_book.note_id_lst.append(str(note_id))

        cur_note_book.put()
        note.put()

        self.respond(note_id = str(note_id), notebook_id = cur_note_book_id, status="Success")
Пример #21
0
 def get(self):
     apt_id = self.request.get(IDENTIFIER_APT_ID)
     apts = Apartment.query(Apartment.apt_id == apt_id).fetch()
     user_nickname_lst = []
     if apts[0]:
         apt = apts[0]
         for user_email in apt.user_email_lst:
             users = User.query(User.user_email == user_email).fetch()
             user = users[0]
             user_nickname_lst.append(user.nick_name)
         self.respond(status="success",
                      apt_id=apt.apt_id,
                      apt_name=apt.apt_name,
                      creater_email=apt.user_email_lst,
                      user_email_lst=apt.user_email_lst,
                      user_nickname_lst=user_nickname_lst)
     else:
         print("cannot find the apartment with id :" + apt_id)
         self.respond(status="fail",
                      error_msg="cannot find the apartment with id :" +
                      apt_id)
Пример #22
0
    def get(self):
        apt_name = self.request.get(IDENTIFIER_APT_NAME)
        user_email = self.request.get(IDENTIFIER_USER_EMAIL)
        apt_lst = Apartment.query(Apartment.apt_name == apt_name).fetch()
        cur_apt = None
        for apt in apt_lst:
            if user_email in apt.user_email_lst:
                cur_apt = apt
        if cur_apt == None:
            response = {}
            response['error'] = 'the apt: ' + apt_name + ' is not available for user: ' + user_email
            return self.respond(**response)

        for expense_id in cur_apt.expense_id_lst:
            expense_lst = Expense.query(Expense.expense_id == expense_id).fetch()
            if len(expense_lst) > 0:
                expense = expense_lst[0]
                if not expense.is_paid:
                    expense.checkout()
                    cur_apt.total_cost += expense.total_cost
                    cur_apt.put()

        self.respond(status="Success")
Пример #23
0
    def get(self):

        photo = None
        # if IDENTIFIER_TASK_PHOTO in req_json:
        #     photo = req_json[IDENTIFIER_TASK_PHOTO]


        task_id = uuid.uuid4()

        # req_json = json.loads(self.request.body)

        # task_name = req_json[IDENTIFIER_TASK_NAME]
        task_name = self.request.get(IDENTIFIER_TASK_NAME)

        # creater_email = req_json[IDENTIFIER_USER_EMAIL]
        creater_email = self.request.get(IDENTIFIER_USER_EMAIL)

        #create a new expense
        expense_id = uuid.uuid4()
        # req_json = json.loads(self.request.body)
        expense_name = "Task_"+task_name

        # candidate_lst= req_json[IDENTIFIER_USER_EMAIL_LIST]
        candidates = self.request.get(IDENTIFIER_USER_EMAIL_LIST)
        candidate_lst = candidates.split(",")

        # description = req_json[IDENTIFIER_DESCRIPTION_NAME]
        description = self.request.get(IDENTIFIER_DESCRIPTION_NAME)

        apt_id = self.request.get(IDENTIFIER_APT_ID)

        target_apt_lst = Apartment.query(Apartment.apt_id == apt_id).fetch()


        if len(target_apt_lst)!=0:
            target_apt = target_apt_lst[0]
            print "Found the target_apt " + target_apt.apt_name
            new_expense = Expense(apt_id = target_apt.apt_id,
                                  creater_email = creater_email,
                                  user_email_lst = candidate_lst,
                                  cover_url = None,
                                  expense_name = expense_name,
                                  total_cost = 0,
                                  is_paid = False,
                                  expense_id = str(expense_id ))

            target_apt.expense_id_lst.insert(0, str(expense_id))
            new_expense.put()
            target_apt.put()
            task_id_lst = new_expense.task_id_lst
            if not task_id_lst:
                task_id_lst = []
            task_id_lst.append(str(task_id))
            new_expense.task_id_lst = task_id_lst
            new_expense.put()

        # # expenses = Expense.query(Expense.expense_id == expense_id).fetch()
        # # expense = expenses[0]
        # expense.task_id_lst.append(str(task_id))
        # expense.put()
            new_task = Task(task_name = task_name, expense_id = str(expense_id), creater_email = creater_email,
                        candidate_lst = candidate_lst, description = description, photo_blobkey = photo, task_id = str(task_id),
                        finished = False, assigned = False)
            new_task.put()

            self.respond(task_id = str(task_id), status="Success")
Пример #24
0
    def get(self):
        user_email = self.request.get(IDENTIFIER_USER_EMAIL)
        apt_name = self.request.get(IDENTIFIER_APT_NAME)

        apt_lst = Apartment.query(Apartment.apt_name == apt_name).fetch()
        cur_apt = None
        for apt in apt_lst:
            if user_email in apt.user_email_lst:
                cur_apt = apt
        if cur_apt == None:
            response = {}
            response[
                'error'] = 'the apt: ' + apt_name + ' is not available for user: '******'id'] = str(note.id)
            cur_note['description'] = note.description
            author_email = note.author_email
            authors = User.query(User.user_email == author_email).fetch()
            author = authors[0]
            writer = author.nick_name
            cur_note['writer'] = writer
            cur_note['date'] = str(note.date)
            note_lst.append(cur_note)
        expenses_lst = []

        expenses = cur_apt.getAllexpenses()

        for expense in expenses:
            cur_expense = {}
            cur_expense['expense_id'] = str(expense.expense_id)
            creater_email = expense.creater_email
            creaters = User.query(User.user_email == creater_email).fetch()
            creater = creaters[0]
            creater_nick_name = creater.nick_name
            cur_expense['creater_nickname'] = creater_nick_name
            cur_expense['photo'] = expense.cover_url
            cur_expense['date'] = str(expense.last_edit)
            cur_expense['expense_name'] = expense.expense_name
            cur_expense['sharer_lst'] = expense.user_email_lst
            cur_expense['is_paid'] = expense.is_paid
            cur_expense['the_number_of_items'] = len(expense.item_id_lst)
            cur_expense['total_cost'] = str(expense.total_cost)
            expenses_lst.append(cur_expense)

        self.respond(roomates_email_lst=roomates_email_lst,
                     roomates_nickname_lst=roomates_nickname_lst,
                     apt_id=str(apt_id),
                     apt_name=apt_name,
                     cover_url=cover_url,
                     notes_lst=note_lst,
                     expenses_lst=expenses_lst,
                     status="Success")
Пример #25
0
    def get(self):
        user_email = self.request.get(IDENTIFIER_USER_EMAIL)

        users = User.query(User.user_email == user_email).fetch()
        if len(users) == 0:
            response = {}
            response[
                'error'] = 'the email: ' + user_email + ' has not registered yet'
            return self.respond(**response)

        cur_user = users[0]
        bank_account = cur_user.bank_account
        nick_name = cur_user.nick_name
        owe = cur_user.cost
        owed = cur_user.borrow
        balance = cur_user.owe

        print("user information collected. e.g. bankaccount=" + bank_account)

        tasks = cur_user.getAlltasks()
        finished_task_lst = []
        unfinished_task_lst = []

        # for task in tasks:
        #     cur_task = {}
        #     cur_task['task_id'] = task.task_id
        #     cur_task['task_name'] = task.task_name
        #     if task.finished:
        #         finished_task_lst.append(cur_task)
        #     else:
        #         unfinished_task_lst.append(cur_task)

        taskinfo = {}
        taskinfo['finished_task_lst'] = finished_task_lst
        taskinfo['unfinished_task_lst'] = unfinished_task_lst

        print("task collected")

        apt_id = cur_user.apt_id

        apts = Apartment.query(Apartment.apt_id == apt_id).fetch()

        apt_info = {}
        if len(apts) > 0:
            apt = apts[0]
            apt_info['apt_name'] = apt.apt_name
            apt_info['apt_id'] = apt.apt_id
            apt_info['roommates_lst'] = apt.get_all_memebers_nickname()
            apt_info['apt_photo'] = apt.cover_url

        # usr_photo = cur_user.cover_url

        print("apartment information collected. now respond.")

        self.respond(status="Success",
                     bank_account=bank_account,
                     nick_name=nick_name,
                     user_email=user_email,
                     owe=owe,
                     owed=owed,
                     balance=balance,
                     apt_info=apt_info,
                     task_info=taskinfo,
                     registered=True)
Пример #26
0
    def get(self):
        expense_id = uuid.uuid4()
        # req_json = json.loads(self.request.body)

        # expense_name = req_json[IDENTIFIER_EXPENSE_NAME ]
        expense_name = self.request.get(IDENTIFIER_EXPENSE_NAME)
        # user_email = req_json[IDENTIFIER_USER_EMAIL]
        user_email = self.request.get(IDENTIFIER_USER_EMAIL)

        # apt_name = req_json[IDENTIFIER_APT_NAME]
        apt_name = self.request.get(IDENTIFIER_APT_NAME)

        user_emails = self.request.get(IDENTIFIER_USER_LIST)
        user_email_lst = user_emails.split(",")

        target_apt_lst = Apartment.query(Apartment.apt_name == apt_name).fetch()

        target_apt = None

        for apt in target_apt_lst:
            if user_email in apt.user_email_lst:
                target_apt = apt
                break
        if target_apt == None:
            response = {}
            response['error'] = 'the user: '******' is not valid for apt: ' + apt_name
            return self.respond(**response)


        # user_email_lst.insert(0, user_email)


        # check whether this apt name is valid or not
        expense_lst = Expense.query(Expense.expense_name == expense_name)
        for expense in expense_lst:
            for user in user_email_lst:
                if user in expense.user_email_lst:
                    response = {}
                    response['error'] = 'the apartment name: ' + expense_name + ' has not been used for ' + user
                    return self.respond(**response)

        # check whether all of these email are valid users
        for user in user_email_lst:
            users = User.query(User.user_email == user).fetch()
            if len(users) == 0:
                response = {}
                response['error'] = 'the email: ' + user + ' has not been registered'
                return self.respond(**response)



        cover_url = None
        # if IDENTIFIER_APT_PHOTO in req_json:
        #     cover_url = req_json[IDENTIFIER_APT_PHOTO]


        new_expense = Expense(apt_id = target_apt.apt_id,
                              creater_email = user_email,
                              user_email_lst = user_email_lst,
                              cover_url = cover_url,
                              expense_name = expense_name,
                              total_cost = 0,
                              is_paid = False,
                              expense_id = str(expense_id ))

        target_apt.expense_id_lst.insert(0, str(expense_id))
        new_expense.put()
        target_apt.put()
        self.respond(expense_id = str(expense_id), status="Success")
Пример #27
0
    def get(self):
        apt_id = uuid.uuid4()
        # req_json = json.loads(self.request.body)

        # apt_name = req_json[IDENTIFIER_APT_NAME]
        apt_name = self.request.get(IDENTIFIER_APT_NAME)
        # user_email = req_json[IDENTIFIER_USER_EMAIL]
        user_email = self.request.get(IDENTIFIER_USER_EMAIL)

        # user_email_lst = req_json[IDENTIFIER_USER_EMAIL_LIST]
        user_emails = self.request.get(IDENTIFIER_USER_EMAIL_LIST)

        user_email_lst = user_emails.split(",")
        cover_url = None

        user_email_lst.insert(0, user_email)

        # get rid of empty entity
        print("user_email_lst before filtering" + str(user_email_lst))
        user_email_lst = filter(None, user_email_lst)
        print("user_email_lst after filtering" + str(user_email_lst))

        # print user_email_lst

        # if IDENTIFIER_APT_PHOTO in req_json:
        #     cover_url = req_json[IDENTIFIER_APT_PHOTO]

        # check whether all of these email are valid users
        for user in user_email_lst:
            print user
            # user = user.encode('utf8')
            users = User.query(User.user_email == user).fetch()
            print("query user result" + str(len(users)))
            if len(users) == 0:
                response = {}
                response['error'] = 'the email: ' + user + ' has not been registered'
                return self.respond(**response)
            if users[0].apt_id is not None:
                response = {}
                response['error'] = 'the email: ' + user + ' has already joined other apartment'
                return self.respond(**response)


        for user in user_email_lst:
            users = User.query(User.user_email == user).fetch()
            cur_user = users[0]
            cur_user.apt_id = str(apt_id)
            cur_user.put()

        note_book_id = uuid.uuid4()
        new_note_book = NoteBook(notebook_id = str(note_book_id),
                                 apt_id = str(apt_id))
        new_note_book.put()

        new_apt = Apartment(apt_id = str(apt_id),
                            apt_name = apt_name,
                            creater_email = user_email,
                            user_email_lst = user_email_lst,
                            cover_url = cover_url,
                            notebook_id = str(note_book_id),
                            total_cost = 0)
        new_apt.put()

        self.respond(apt_id = str(apt_id), status="Success")
Пример #28
0
    def get(self):
        apt_id = uuid.uuid4()
        # req_json = json.loads(self.request.body)

        # apt_name = req_json[IDENTIFIER_APT_NAME]
        apt_name = self.request.get(IDENTIFIER_APT_NAME)
        # user_email = req_json[IDENTIFIER_USER_EMAIL]
        user_email = self.request.get(IDENTIFIER_USER_EMAIL)

        # user_email_lst = req_json[IDENTIFIER_USER_EMAIL_LIST]
        user_emails = self.request.get(IDENTIFIER_USER_EMAIL_LIST)

        user_email_lst = user_emails.split(",")
        cover_url = None

        user_email_lst.insert(0, user_email)

        # get rid of empty entity
        print("user_email_lst before filtering" + str(user_email_lst))
        user_email_lst = filter(None, user_email_lst)
        print("user_email_lst after filtering" + str(user_email_lst))

        # print user_email_lst

        # if IDENTIFIER_APT_PHOTO in req_json:
        #     cover_url = req_json[IDENTIFIER_APT_PHOTO]

        # check whether all of these email are valid users
        for user in user_email_lst:
            print user
            # user = user.encode('utf8')
            users = User.query(User.user_email == user).fetch()
            print("query user result" + str(len(users)))
            if len(users) == 0:
                response = {}
                response[
                    'error'] = 'the email: ' + user + ' has not been registered'
                return self.respond(**response)
            if users[0].apt_id is not None:
                response = {}
                response[
                    'error'] = 'the email: ' + user + ' has already joined other apartment'
                return self.respond(**response)

        for user in user_email_lst:
            users = User.query(User.user_email == user).fetch()
            cur_user = users[0]
            cur_user.apt_id = str(apt_id)
            cur_user.put()

        note_book_id = uuid.uuid4()
        new_note_book = NoteBook(notebook_id=str(note_book_id),
                                 apt_id=str(apt_id))
        new_note_book.put()

        new_apt = Apartment(apt_id=str(apt_id),
                            apt_name=apt_name,
                            creater_email=user_email,
                            user_email_lst=user_email_lst,
                            cover_url=cover_url,
                            notebook_id=str(note_book_id),
                            total_cost=0)
        new_apt.put()

        self.respond(apt_id=str(apt_id), status="Success")
Пример #29
0
    def get(self):
        expense_id = uuid.uuid4()
        # req_json = json.loads(self.request.body)

        # expense_name = req_json[IDENTIFIER_EXPENSE_NAME ]
        expense_name = self.request.get(IDENTIFIER_EXPENSE_NAME)
        # user_email = req_json[IDENTIFIER_USER_EMAIL]
        user_email = self.request.get(IDENTIFIER_USER_EMAIL)

        # apt_name = req_json[IDENTIFIER_APT_NAME]
        apt_name = self.request.get(IDENTIFIER_APT_NAME)

        user_emails = self.request.get(IDENTIFIER_USER_LIST)
        user_email_lst = user_emails.split(",")

        target_apt_lst = Apartment.query(
            Apartment.apt_name == apt_name).fetch()

        target_apt = None

        for apt in target_apt_lst:
            if user_email in apt.user_email_lst:
                target_apt = apt
                break
        if target_apt == None:
            response = {}
            response[
                'error'] = 'the user: '******' is not valid for apt: ' + apt_name
            return self.respond(**response)

        # user_email_lst.insert(0, user_email)

        # check whether this apt name is valid or not
        expense_lst = Expense.query(Expense.expense_name == expense_name)
        for expense in expense_lst:
            for user in user_email_lst:
                if user in expense.user_email_lst:
                    response = {}
                    response[
                        'error'] = 'the apartment name: ' + expense_name + ' has not been used for ' + user
                    return self.respond(**response)

        # check whether all of these email are valid users
        for user in user_email_lst:
            users = User.query(User.user_email == user).fetch()
            if len(users) == 0:
                response = {}
                response[
                    'error'] = 'the email: ' + user + ' has not been registered'
                return self.respond(**response)

        cover_url = None
        # if IDENTIFIER_APT_PHOTO in req_json:
        #     cover_url = req_json[IDENTIFIER_APT_PHOTO]

        new_expense = Expense(apt_id=target_apt.apt_id,
                              creater_email=user_email,
                              user_email_lst=user_email_lst,
                              cover_url=cover_url,
                              expense_name=expense_name,
                              total_cost=0,
                              is_paid=False,
                              expense_id=str(expense_id))

        target_apt.expense_id_lst.insert(0, str(expense_id))
        new_expense.put()
        target_apt.put()
        self.respond(expense_id=str(expense_id), status="Success")
Пример #30
0
        def get(self):
            user_email = self.request.get(IDENTIFIER_USER_EMAIL)
            apt_name = self.request.get(IDENTIFIER_APT_NAME)

            apt_lst = Apartment.query(Apartment.apt_name == apt_name).fetch()
            cur_apt = None
            for apt in apt_lst:
                if user_email in apt.user_email_lst:
                    cur_apt = apt
            if cur_apt == None:
                response = {}
                response['error'] = 'the apt: ' + apt_name + ' is not available for user: '******'id'] = str(note.id)
                cur_note['description'] = note.description
                author_email = note.author_email
                authors = User.query(User.user_email == author_email).fetch()
                author = authors[0]
                writer = author.nick_name
                cur_note['writer'] = writer
                cur_note['date'] = str(note.date)
                note_lst.append(cur_note)
            expenses_lst = []

            expenses = cur_apt.getAllexpenses()

            for expense in expenses:
                cur_expense = {}
                cur_expense['expense_id'] = str(expense.expense_id)
                creater_email = expense.creater_email
                creaters = User.query(User.user_email == creater_email).fetch()
                creater = creaters[0]
                creater_nick_name = creater.nick_name
                cur_expense['creater_nickname'] = creater_nick_name
                cur_expense['photo'] = expense.cover_url
                cur_expense['date'] = str(expense.last_edit)
                cur_expense['expense_name'] = expense.expense_name
                cur_expense['sharer_lst'] = expense.user_email_lst
                cur_expense['is_paid'] = expense.is_paid
                cur_expense['the_number_of_items'] = len(expense.item_id_lst)
                cur_expense['total_cost'] = str(expense.total_cost)
                expenses_lst.append(cur_expense)


            self.respond(roomates_email_lst = roomates_email_lst,
                         roomates_nickname_lst = roomates_nickname_lst,
                         apt_id = str(apt_id),
                         apt_name = apt_name,
                         cover_url = cover_url,
                         notes_lst = note_lst,
                         expenses_lst = expenses_lst,
                         status="Success")
Пример #31
0
    def get(self):

        photo = None
        # if IDENTIFIER_TASK_PHOTO in req_json:
        #     photo = req_json[IDENTIFIER_TASK_PHOTO]

        task_id = uuid.uuid4()

        # req_json = json.loads(self.request.body)

        # task_name = req_json[IDENTIFIER_TASK_NAME]
        task_name = self.request.get(IDENTIFIER_TASK_NAME)

        # creater_email = req_json[IDENTIFIER_USER_EMAIL]
        creater_email = self.request.get(IDENTIFIER_USER_EMAIL)

        #create a new expense
        expense_id = uuid.uuid4()
        # req_json = json.loads(self.request.body)
        expense_name = "Task_" + task_name

        # candidate_lst= req_json[IDENTIFIER_USER_EMAIL_LIST]
        candidates = self.request.get(IDENTIFIER_USER_EMAIL_LIST)
        candidate_lst = candidates.split(",")

        # description = req_json[IDENTIFIER_DESCRIPTION_NAME]
        description = self.request.get(IDENTIFIER_DESCRIPTION_NAME)

        apt_id = self.request.get(IDENTIFIER_APT_ID)

        target_apt_lst = Apartment.query(Apartment.apt_id == apt_id).fetch()

        if len(target_apt_lst) != 0:
            target_apt = target_apt_lst[0]
            print "Found the target_apt " + target_apt.apt_name
            new_expense = Expense(apt_id=target_apt.apt_id,
                                  creater_email=creater_email,
                                  user_email_lst=candidate_lst,
                                  cover_url=None,
                                  expense_name=expense_name,
                                  total_cost=0,
                                  is_paid=False,
                                  expense_id=str(expense_id))

            target_apt.expense_id_lst.insert(0, str(expense_id))
            new_expense.put()
            target_apt.put()
            task_id_lst = new_expense.task_id_lst
            if not task_id_lst:
                task_id_lst = []
            task_id_lst.append(str(task_id))
            new_expense.task_id_lst = task_id_lst
            new_expense.put()

            # # expenses = Expense.query(Expense.expense_id == expense_id).fetch()
            # # expense = expenses[0]
            # expense.task_id_lst.append(str(task_id))
            # expense.put()
            new_task = Task(task_name=task_name,
                            expense_id=str(expense_id),
                            creater_email=creater_email,
                            candidate_lst=candidate_lst,
                            description=description,
                            photo_blobkey=photo,
                            task_id=str(task_id),
                            finished=False,
                            assigned=False)
            new_task.put()

            self.respond(task_id=str(task_id), status="Success")
    def add_val():
        # add user to database
        admin = User(username='******', phone='12345')
        admin.set_password('12345678')
        user = User(username='******', phone='0000')
        user.set_password('12345678')
        u1 = User(username='******', phone='0001')
        u1.set_password('test01')
        u2 = User(username='******', phone='0002')
        u2.set_password('test02')
        # add the data to session
        db.session.add_all([admin, user, u1, u2])
        db.session.flush()
        # add apartment to database
        a1 = Apartment(a_name='Stroll around Victoria Park from a Stylish Loft',
                       location='Ultimo',
                       address='348 Bulware Rd,Ultimo, New South Wales, Australia',
                       postcode='2007', longtitude='151.1993252', altitude='-33.8808471',
                       price='150', type='loft', bedroom= 1, guest= 2, wifi= True, owner_id=user.id,
                       description= "<p>4 guests  1 bedroom  1 bed  1 bath</p>" + \
                                    "<p> Entire loft</p>" + \
                                    "<p>This split-level modest but cozy studio has been recently renovated, making excellent use of the space with high ceilings and nice modern new flooring. Choice of queen bed (upstairs) or sofa bed (downstairs). Our unit is located in a large twin building complex (apartment, student accommodation, hotel, mall) and is perfectly located next to a bus stop (every 2-3min). 10-15min walk to Central station and Paddy's Market, 20min walk to Darling Harbor.</p>")
        a2 = Apartment(a_name='Designer Apartment close CBD & Airport & Beach',
                       location='Rosebery',
                       address='11 rosebery avenue, rosebery, 2018,Sydney',
                       postcode='2018', longtitude='151.2076137', altitude='-33.9137544',
                       price='130', type='apartment', bedroom=1, guest=3, wifi=True, parking=True, tv=True, bathroom=True, owner_id=admin.id,
                       description="<p>3 guests  1 bedroom  2 beds  1 bathroom</p>" + \
                                   "<p> Entire apartment</p>" + \
                                   "<p>Welcome to Rosebery!This modern town is just 5.5 km from Sydney. This one-bedroom apartment with special designer awards is limited to 1 minute walk to Sydney city centre / CBD, University of New South Wales and Bondi Junction / Bondi Beach / Coogee Beach (no transfer required)- 14 minutes walk to Green Square Station- 10 minutes drive from CBD and Sydney Airport- Walking distance to East Village Shopping Centre, public schools, restaurants, medical clinics and other facilities.</p>")
        a3 = Apartment(a_name='Newtown - Entire house, BEST location & parking',
                       location='Newtown',
                       address='267 king street,newtown,2042, Sydney',
                       postcode='2042', longtitude='151.1802630', altitude='-33.8960238',
                       price='141', type='townhouse', bedroom=2, guest=4, wifi=True, parking=True, tv=True, bathroom=True, owner_id=admin.id,
                       description="<p>4 guests  2 bedrooms   3 beds  1.5 bathrooms</p>" + \
                                   "<p>This cute 2 bedroom Victorian terrace is in the heart of Newtown's. 50 metres to the King St/ Enmore Rd junction - where you will find over 600 cafes, restaurants and bars to choose from as well as Newtown train station and buses. 2 minute walk to Enmore Theatre. 5 minute walk to Royal Prince Alfred (RPA) Hospital and 10 minutes to Sydney University.</p>")
        a4 = Apartment(a_name='The Lucky Dog Bondi Beach 3 Bed+ 2 Bath + garden',
                       location='Bondi',
                       address='3 Jaques avenue, Bondi Beach, 2036, Sydney',
                       postcode='2036', longtitude='151.2725109', altitude='-33.8910443',
                       price='412', type='house', bedroom=3, guest=7, wifi=True, parking=True, tv=True, bathroom=True, owner_id=user.id,
                       description="<p>7 guests   3 bedrooms    4 beds    2 bathrooms</p>" + \
                                   "<p>Cool, sleek and sophisticated, this newly renovated 3 bedroom, 2 bathroom home is enveloped in light and comfort. White interiors are complimented by accents of blue and yellow to radiate beach vibes. Walk to cafes, shops and the beach just minutes away<p/>")
        a5 = Apartment(a_name='Studio in the heart of Sydney CBD',
                       location='the rocks',
                       address='4 bridge street,the rocks,2000',
                       postcode='2000', longtitude='151.2078309', altitude='-33.8634198',
                       price='170', type='apartment', bedroom=1, guest=3, wifi=True, parking=False, tv=True, bathroom=True, owner_id=u1.id,
                       description="<p>3 guests  Studio   1 bedroom   1 bathroom</p>" + \
                                   "<p>My apartment is amazingly located in the heart of Sydney CBD, near Circular Quay, Opera House, Royal Botanic Garden and many restaurants, pubs and the shopping area, all the best Sydney can offer. The unit has everything you need to spend a great time in the city. Access to all public transport, unfortunately no parking on the building. *we may expect some noise coming from the street due to construction work on the new light rail*</p>")
        a6 = Apartment(a_name='Darling Harbour: Entire apartment one bedroom',
                       location='darling harbour',
                       address='243 pyrmont street,darling harbor,2007',
                       postcode='2007',longtitude='151.1971769',altitude='-33.8739808',
                       price='175',type='apartment', bedroom=1, guest=4, wifi=True, parking=False, tv=True, bathroom=True, owner_id=u2.id,
                       description="<p>4 guests  1 bedroom  2 beds   1 bathroom</p>" + \
                                   "<p>1 bedroom apartment sleeps 4. light filled , stylish with an internal courtyard Gym /Pool /Spa amenities/ WIFI in unit. 2nd level via lift access in the historic Goldsborough Mort Hotel Pyrmont 245 Pyrmont st, Superb position at Darling harbour with direct undercover access to The International Conference Centre ,Star City Casino ,shops & restaurants. Easy access Sydney City 10 minute walk. Major Attractions inc Harbour bridge ,Opera House, Galleries 30 mins walk Or 2 minute walk to Transport</p>")
        a7 = Apartment(a_name='1BR Apt close to Allianz Stadium & Centennial Park',
                       location='kensington',
                       address='10 anzac pde,kensington,2033',
                       postcode='2033', longtitude='151.2238032', altitude='-33.9031929',
                       price='130', type='apartment', bedroom=1, guest=4, wifi=True, parking=True, tv=True, bathroom=True, owner_id=admin.id,
                       description="<p>4 guests  1 bedroom  2 beds  1 bathroom</p>" + \
                                   "<p>This apartment is ideal for those on holiday, family visit and work trip. Walk to Centennial Park or Watch the NRL's Sydney Roosters, A-League powerhouse Sydney FC & NSW Super Rugby! It can accommodate 2-4 adults, with a Queen size bed in the bedroom and a sofa bed in the living area. Linen and towels are included. For those who drives, there is a private underground parking lot in the Building.</p>")
        a8 = Apartment(a_name='Savour Minimal, Designer Style in a Heritage-listed Terrace',
                       location='surry hills',
                       address='54 Cooper St, Surry Hills, New South Wales, Australia',
                       postcode='2010', longtitude='151.2101872',altitude='-33.8857102',
                       price='132', type='loft', bedroom=1, guest=2, wifi=True, parking=False, tv=True, bathroom=True,owner_id=user.id,
                       description="<p>2 guests  1 bedroom  1 bed  1 bath</p>" + \
                                   "<p>Entire apartment</p>" + \
                                   "<p>A uniquely spacious 1 bedroom flat — it is 1 of 2 flats in a charming heritage listed terrace nestled on a lovely residential street in Sydney's hippest hood. Your home away from home flows over the entire ground floor and you will have exclusive access to your own stylishly designed apartment with slouchy leather lounges, custom designed lighting and thoughtful design throughout.</p>")
        a9 = Apartment(a_name='Cosy 11th floor apartment in the heart of Sydney',
                       location='surry hills',
                       address='4 Little Riley St, New South Wales, Australia',
                       postcode='2010', longtitude='151.2132994', altitude='-33.8806270',
                       price='82', type='apartment', bedroom=1, guest=2, wifi=True, parking=False, tv=True, bathroom=True, owner_id=user.id,
                       description="<p>2 guests  1 bedroom  1 bed  1 bath</p>" + \
                                   "<p>Entire apartment</p>" + \
                                   "<p>Cosy 11th floor studio apartment close to Oxford Street. Walking distance to Hyde Park, surrounded by cafes, bars and restaurants. 7 minutes walk form Museum train station and 2 minutes walk for many bus stops. Entire private use of the apartment including kitchen and bathroom. Rooftop pool and terrace access on level 14 until midnight. Shared access to communal laundry for the building.</p>")
        a10 = Apartment(a_name='Architect Designed Private Studio',
                        location='Redfern',
                        address='767 Maddison Ln, Redfern New South Wales, Australia',
                        postcode='2016', longtitude='151.2157247',altitude='-33.8949822',
                        price='100', type='apartment', bedroom=1, guest=2, wifi=True, parking=False, tv=True, bathroom=True, owner_id=u1.id,
                        description="<p>2 guests  1 bedroom  1 bed  1 bath</p>" + \
                                    "<p>Latest news, just updated the bed to a queen sized bed. With brand new mattress and linen. Also, if there is more than one guest, please specify the amount of guests when requesting to book. Thank you. The Studio is your escape pad in the heart of Redfern / Surry Hills. Architecturally designed. Where industrial and urban combine to give a true inner city experience. Surrounded by wonderful parks and amenities. Close to transport. Walk everywhere</p>")
        a11 = Apartment(a_name='❤️Character Filled, Cosy Federation Terrace Home❤️',
                        location='Redfern',
                        address='28 Marriott St, Redfern, New South Wales, Australia',
                        postcode='2016', longtitude='151.2112483', altitude='-33.8923530',
                        price='65', type='house', bedroom=2, guest=6, wifi=True, parking=True, tv=True, bathroom=True, owner_id=u2.id,
                        description="<p>6 guests  2 bedrooms  3 beds  1 bath</p>" + \
                                    "<p>STAY LIKE A LOCAL. Discover the essence and secrets of Redfern & Surry Hills like locals do. If you enjoy living in a house where it is filled with characters then you won't disappoint!</p>")
        a12 = Apartment(a_name='Spacious Airy Apartment',
                        location='Redfern',
                        address='85 Redfern St,Redfern, New South Wales, Australia',
                        postcode='2016', longtitude='151.2046664', altitude='-33.8930867',
                        price='31', type='apartment', bedroom=1, guest=1, wifi=True, parking=False, tv=False, bathroom=True, owner_id=admin.id,
                        description="<p>1 guest  1 bedroom  1 bed  1 shared bath</p>" + \
                                    "<p>Private room in apartment</p>" + \
                                    "<p>The place is wonderfully situated in close proximity to Redfern station but just tucked in a quiet corner, allowing for both access to Sydney and comfortable, undisturbed sleep. It is also just a few blocks away from Woolies, so grocery shopping is no issue.</p>")
        a13 = Apartment(
            a_name='Luxury designer 2 bedrooms Apt @syd Olympic Park',
            location='Sydney olympic park',
            address=
            '4 Herb Elliott Ave, Sydney Olympic Park, New South Wales, Australia',
            postcode='2127',
            longtitude='151.0707466',
            altitude='-33.8477265',
            price='185',
            type='apartment',
            bedroom=2,
            guest=6,
            wifi=True,
            parking=False,
            tv=True,
            bathroom=True,
            owner_id=user.id,
            description=
            "<p>Complimentary tea and coffee for our guests. *5star two bedrooms high level luxury apartment *modern designer home for everyone *iconic Australia tower with amazing city views *two queen size beds and two additional single beds available *can accommodate up to 6 people *easy access to every event, transport and major facilities in Sydney Olympic Park</p>"
        )
        a14 = Apartment(
            a_name='l21 ”Amazing Sky view”Sydney Olympic Park”2bedroom',
            location='Sydney olympic park',
            address=
            '1 Bennelong Pkwy, Sydney Olympic Park, New South Wales, Australia',
            postcode='2127',
            longtitude='151.0741738',
            altitude='-33.8488338',
            price='70',
            type='apartment',
            bedroom=2,
            guest=5,
            wifi=True,
            parking=True,
            tv=True,
            bathroom=True,
            owner_id=u1.id,
            description=
            "<p>*Sydney olympic park / 2 bedroom / free parking Come and experience the relaxing Australian lifestyle and urban oasis that is Sydney Olympic Park. We are centrally located right in the geographic heart of the Greater Sydney Metropolitan area with world class amenities right at your door step.<p/>"
        )
        a15 = Apartment(
            a_name='Stunning views, great location, close to the CBD',
            location='Balmain',
            address='13 Gilchrist Pl, Balmain, New South Wales, Australia.',
            postcode='2041',
            longtitude='151.1906512',
            altitude='-33.8560522',
            price='60',
            type='apartment',
            bedroom=1,
            guest=2,
            wifi=True,
            parking=False,
            tv=True,
            bathroom=True,
            owner_id=u2.id,
            description=
            "<p>Private room with a queen size bed (shared bathroom and a second toilet) in a top floor apartment, ( the whole top floor ), 2 minutes walk to Balmain high street with lots of restaurants and cafes. You’ll love my place - the views are absolutely stunning - Cockatoo Island and the top of the Sydney Harbour Bridge. My place is good for couples, solo adventurers, and business travelers. The room can take a maximum of 2 people - there is a single mattress if you want to sleep separately.</p>"
        )
        # add the data to the session
        db.session.add_all(
            [a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15])
        db.session.flush()

        # add order to database
        o1 = Order(user_id=u1.id,
                   apartment_id=a1.id,
                   checkin_date=date.today(),
                   checkout_date=date.today() + timedelta(days=7),
                   status=0)
        o2 = Order(user_id=u2.id,
                   apartment_id=a1.id,
                   checkin_date=date.today() + timedelta(days=10),
                   checkout_date=date.today() + timedelta(days=11),
                   status=1)
        db.session.add_all([o1, o2])
        # add review to database
        r1 = Review(
            score=3,
            user_id=u1.id,
            apartment_id=a1.id,
            content=
            'Absolutely incredible hosts. Went out of their way to help me out and gave me some valuable info about some of the must see things in Sydney.'
        )
        r2 = Review(
            score=4,
            user_id=u2.id,
            apartment_id=a1.id,
            content=
            'Great little place to stay in Sydney. It was very clean and nicely decorated.'
        )
        db.session.add_all([r1, r2])
        db.session.flush()

        # add messages to database
        m1 = Message(content='test01', from_id=u1.id, to_id=u2.id)
        m2 = Message(content='test 02', from_id=admin.id, to_id=u2.id)
        db.session.add_all([m1, m2])
        db.session.flush()
        m3 = Message(content='test reply to test01',
                     from_id=u2.id,
                     to_id=u1.id,
                     parent_id=m1.id)
        m4 = Message(content='test reply to test02',
                     from_id=u2.id,
                     to_id=admin.id,
                     parent_id=m2.id)
        db.session.add_all([m3, m4])

        # commit the data to the database
        db.session.commit()