def Post(self, car_id, expense_id = None): if expense_id: _expense = ndb.Key(Car, int(car_id), Expense, int(expense_id)).get() else: _expense = Expense( parent = self.rootKey(car_id), ) _expense.type = self.request.get('type') _expense.amount = float(self.request.get('amount')) _expense.date = datetime.strptime(self.request.get('date'), "%Y-%m-%d") _expense.address = self.request.get('address') _lng = self.request.get('lng') _lat = self.request.get('lat') if _lng and _lat: _expense.location = ndb.GeoPt(_lat, _lng) self.response.write(_expense.put()) if not self.request.get('ajax'): self.redirect('/car')
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")
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 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 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")
def response(): action = cgi_get("action", choices=["view", "pay", "service", "commitment", "request", "invite", "expense", "verify", "unverify", "apply", "join", "pod", "membership", "person", "enroll", "manage", "confcode", "mint", "balance", "responsibilities"]) if action == "view": ip = local("response").ip user = cgi_get("user", required=False) # key if user: user = db.get(user) else: user = Person.query(Person.ip == ip).get() if not user: user = Person() user.ip = ip user.put() views(user) elif action == "mint": user = db.get(cgi_get("user")) amount = cgi_get("amount") user.wallet.get().mint(amount) elif action == "balance": user = db.get(cgi_get("user")) succeed(user.wallet.get().balance()) elif action == "pay": payer = db.get(cgi_get("payer")) memship = db.get(cgi_get("membership")) person = memship.person.get() pod = memship.pod.get() pment = Payment() pment.membership = memship.key pment.payer = payer.key pment.amount = cgi_get("amount") pment.notes = cgi_get("notes") if payer.key.urlsafe() == person.key.urlsafe(): fail("pay yourself?") if payer.wallet.get().outstanding < pment.amount: fail("you don't have enough in your account!") pment.put() pkey = pment.key.urlsafe() pment.notify("confirm payment", lambda signer : PAYMENT%(pment.amount, person.firstName, pod.name, pment.notes, pkey, signer.urlsafe())) succeed(pkey) elif action == "service": succeed(reg_act(cgi_get("membership"), cgi_get("service"), cgi_get("workers"), cgi_get("beneficiaries"), cgi_get("notes"))) elif action == "commitment": comm = Commitment() comm.membership = cgi_get("membership") comm.service = cgi_get("service") comm.estimate = cgi_get("estimate") comm.notes = cgi_get("notes") comm.put() comm.verify(comm.membership.get().person) # (submitter already agrees) ckey = comm.key.urlsafe() service = comm.service.get() memship = comm.membership.get() person = memship.person.get() pod = memship.pod.get() comm.notify("affirm commitment", lambda signer : COMMITMENT%(person.email, pod.name, comm.estimate, service.name, comm.notes, ckey, signer.urlsafe())) succeed(ckey) elif action == "request": req = Request() req.membership = cgi_get("membership") req.change = cgi_get("change") req.person = cgi_get("person", required=False) req.notes = cgi_get("notes") req.put() req.remind() succeed(req.key.urlsafe()) elif action == "invite": inv = Invitation() inv.membership = cgi_get("membership") inv.email = cgi_get("email").lower() inv.notes = cgi_get("notes") inv.put() inv.invite() elif action == "expense": exp = Expense() exp.membership = cgi_get("membership") exp.executor = cgi_get("executor", required=False) exp.variety = cgi_get("variety", choices=["dividend", "reimbursement"]) exp.amount = cgi_get("amount") exp.recurring = cgi_get("recurring") exp.notes = cgi_get("notes") exp.put() memship = exp.membership.get() mpmail = memship.person.get().email pod = memship.pod.get() variety = exp.variety amount = exp.amount if exp.executor: variety = "%s - executor: %s"%(variety, exp.executor.get().email) else: amount = "%s%%"%(amount * 100,) exp.notify("approve expense", lambda signer: EXPENSE%(mpmail, pod.name, variety, amount, exp.recurring, exp.notes, signer.urlsafe())) succeed(exp.key.urlsafe()) elif action == "verify": verifiable = db.get(cgi_get("verifiable")) # act/request/commitment/expense/appointment verifiable.verify(db.KeyWrapper(cgi_get("person"))) redirect("/comp/pods.html", "you did it!") elif action == "unverify": # commitment only!!!!??! vkey = cgi_get("verifiable") verifiable = db.get(vkey) verifiable.unverify() service = verifiable.service.get() memship = verifiable.membership.get() person = memship.person.get() pod = memship.pod.get() for signer in pod.members(): send_mail(to=signer.get().email, subject="affirm commitment - estimate adjustment", body=COMMITMENT%(person.email, pod.name, verifiable.estimate, service.name, vkey, signer.urlsafe())) elif action == "apply": db.get(cgi_get("request")).apply() redirect("/comp/pods.html", "you did it!") elif action == "join": # support only pod = db.get(cgi_get("pod")) if pod.variety != "support": fail() person = db.get(cgi_get("person")) succeed(person.enroll(pod).urlsafe()) elif action == "pod": pod = db.get(cgi_get("pod")) succeed({ "services": [a.data() for a in pod.acts()], "requests": [r.data() for r in pod.requests()], "proposals": [p.data() for p in db.get_multi(pod.proposals())], "commitments": [c.data() for c in pod.commitments()], "memberships": [m.data() for m in pod.members(True)], "people": [p.data() for p in db.get_multi(pod.members())], "codebases": [c.data() for c in pod.codebases()], "expenses": [e.data() for e in pod.expenses()] }) elif action == "membership": memship = db.get(cgi_get("membership")) succeed({ "content": [c.data() for c in Content.query(Content.membership == memship.key).fetch()], "products": [p.data() for p in db.get_multi(memship.products)] }) elif action == "person": person = db.get(cgi_get("person")) succeed({ "services": len(person.acts()), # more efficient way? "memberships": [m.data() for m in person.memberships()], "commitments": sum([c.estimate for c in person.commitments()]) }) elif action == "responsibilities": person = db.get(cgi_get("person")) succeed([t.data() for t in person.tasks()]) elif action == "enroll": succeed(enroll(cgi_get("agent"), cgi_get("pod"), cgi_get("person")).urlsafe()) elif action == "manage": succeed(manage(cgi_get("agent"), cgi_get("membership"), cgi_get("content")).key.urlsafe()) elif action == "confcode": send_mail(to=cgi_get("email"), subject="carecoin confirmation code", body=CONFCODE%(cgi_get("code"),))