def update_contact(self, req): message = "Contact has been saved" success = True isAdmin, s = tools.checkAuthentication(self, True, from_endpoints=True) c = tools.getKey(req.contact_key).get() a = req.address address = [a.street, a.city, a.state, a.zipcode] # Check to see if a new email was added and see if it already exists list_diff = tools.listDiff(c.email, req.email) if list_diff: email_exists = s.exists.contact(email=list_diff)[0] else: email_exists = False if email_exists == True: success = False message = "Whoops! You entered an email address already in use by another contact." else: c.update(req.name, req.email, req.phone, req.notes, address) return SuccessMessage_Out(success=success, message=message)
def semi_get_individual_donations(self, req): isAdmin, s = tools.checkAuthentication(self, False, from_endpoints=True) query = "individual_key:" + str(req.individual_key) results = s.search.donation(query, query_cursor=req.query_cursor) logging.info("Getting individual donations with query: " + query) donations = [] new_cursor = tools.getWebsafeCursor(results[1]) for d in results[0]: f = d.fields team_name = f[6].value if team_name == None: team_name = "" donation = Donation_Data(key=f[0].value, formatted_donation_date=f[9].value, name=f[2].value, email=tools.truncateEmail(f[3].value), payment_type=f[5].value, amount_donated=tools.moneyAmount(f[4].value), team_name=team_name) donations.append(donation) return Donations_Out(objects=donations, new_cursor=new_cursor)
def new_offline_donation(self, req): message = "Offline donation created" success = True isAdmin, s = tools.checkAuthentication(self, True, from_endpoints=True) # Make req variables local name, email, amount_donated, notes, address, team_key, individual_key, \ add_deposit = req.name, req.email, tools.toDecimal(req.amount_donated), req.notes, \ req.address, req.team_key, req.individual_key, req.add_deposit # Check for null value in individual field if individual_key == "none": individual_key = None if address: address = [address.street, address.city, address.state, address.zipcode] if team_key: team_key = tools.getKey(team_key) if individual_key: individual_key = tools.getKey(individual_key) s.create.donation(name, email, amount_donated, "offline", address=address, team_key=team_key, individual_key=individual_key, add_deposit=add_deposit, special_notes=notes) return SuccessMessage_Out(success=success, message=message)
def get_team_donation_total(self, req): isAdmin, s = tools.checkAuthentication(self, True, from_endpoints=True) t = tools.getKey(req.team_key).get() donation_total = tools.moneyAmount(t.data.donation_total) return GetTeamDonationTotal_Out(donation_total=donation_total)
def new_team(self, req): message = "<b>" + req.name + "</b> created" success = True isAdmin, s = tools.checkAuthentication(self, True, from_endpoints=True) s.create.team(req.name) return SuccessMessage_Out(success=success, message=message)
def get(self): # By default, need admin priveleges to view isAdmin, s = tools.checkAuthentication(self, True) if isAdmin == None and s == None: self.redirect("/login") else: return self.task(isAdmin, s)
def contact_delete(self, req): message = "Contact deleted" success = True isAdmin, s = tools.checkAuthentication(self, True, from_endpoints=True) tools.getKey(req.contact_key).delete() return SuccessMessage_Out(success=success, message=message)
def deleteTeam(self, req): message = "Team deleted" success = True isAdmin, s = tools.checkAuthentication(self, True, from_endpoints=True) tools.getKey(req.team_key).delete() return SuccessMessage_Out(success=success, message=message)
def confirmation_annual_report(self, req): message = "Annual report sent" success = True isAdmin, s = tools.checkAuthentication(self, True, from_endpoints=True) taskqueue.add(queue_name="annualreport", url="/tasks/annualreport", params={'contact_key': req.contact_key, 'year': req.year}) return SuccessMessage_Out(success=success, message=message)
def new_impression(self, req): message = "Impression saved" success = True isAdmin, s = tools.checkAuthentication(self, True, from_endpoints=True) c = tools.getKey(req.contact_key).get() c.create.impression(req.impression, req.notes) return SuccessMessage_Out(success=success, message=message)
def donation_archive(self, req): message = "Donation archived" success = True isAdmin, s = tools.checkAuthentication(self, True, from_endpoints=True) d = tools.getKey(req.donation_key).get() d.review.archive() return SuccessMessage_Out(success=success, message=message)
def donation_mark_unreviewed(self, req): message = "Donation marked as unreviewed" success = True isAdmin, s = tools.checkAuthentication(self, True, from_endpoints=True) d = tools.getKey(req.donation_key).get() d.review.markUnreviewed() return SuccessMessage_Out(success=success, message=message)
def update_team(self, req): message = "Team has been updated" success = True isAdmin, s = tools.checkAuthentication(self, True, from_endpoints=True) t = tools.getKey(req.team_key).get() t.update(req.name, req.show_team) return SuccessMessage_Out(success=success, message=message)
def update_settings(self, req): message = "Settings have been updated" success = True isAdmin, s = tools.checkAuthentication(self, True, from_endpoints=True) s.update(req.name, req.email, req.mc_use, req.mc_apikey, req.mc_donorlist, req.paypal_id, req.impressions, req.donate_parent, req.amount1, req.amount2, req.amount3, req.amount4, req.use_custom, req.confirmation_header, req.confirmation_info, req.confirmation_footer, req.confirmation_text, req.donor_report_text) return SuccessMessage_Out(success=success, message=message)
def get(self): isAdmin, s = tools.checkAuthentication(self, True) str_blob_key = urllib.unquote(self.request.get("blob_key")) blob_key = blobstore.BlobInfo.get(str_blob_key) if not blobstore.get(str_blob_key): logging.error("404 on blob key: " + str_blob_key) self.error(404) else: logging.info("Serving blob: " + str_blob_key) self.send_blob(blob_key, save_as=True)
def spreadsheet_check(self, req): isAdmin, s = tools.checkAuthentication(self, True, from_endpoints=True) completed, gcs_file_key = tools.checkTaskCompletion(s, req.job_id) status = tools.pipelineStatus(req.job_id) if completed: download_url = "http://commondatastorage.googleapis.com/" + gcs_file_key[1:] else: download_url = None return SpreadsheetCheck_Out(completed=completed, download_url=download_url, status=status)
def printReceipt(self, req): message = "Receipt open for printing" success = True isAdmin, s = tools.checkAuthentication(self, True, from_endpoints=True) d = tools.getKey(req.donation_key).get() # Print receipt to donor d.review.archive() print_url = d.confirmation.print_url(None) return ConfirmationPrint_Out(success=success, message=message, print_url=print_url)
def merge_contacts(self, req): message = "Contacts merged" success = True isAdmin, s = tools.checkAuthentication(self, True, from_endpoints=True) c1 = tools.getKey(req.contact1) c2 = tools.getKey(req.contact2) tools.mergeContacts(c1, c2) return SuccessMessage_Out(success=success, message=message)
def semi_get_team_members(self, req): # Returns team information isAdmin, s = tools.checkAuthentication(self, False, from_endpoints=True) t = tools.getKey(req.team_key).get() members_list = t.data.members_list members = [] for m in members_list: member = SemiGetTeamMembers_Data(key=m[2], name=m[0]) members.append(member) return SemiGetTeamMembers_Out(objects=members)
def deposits_remove(self, req): message = "Donations removed from deposits." success = True isAdmin, s = tools.checkAuthentication(self, True, from_endpoints=True) if req.donation_keys != []: donation_keys = [] for k in req.donation_keys: donation_keys.append(str(k)) deferred.defer(s.deposits.remove, donation_keys, _queue="backend") return SuccessMessage_Out(success=success, message=message)
def mailchimp_lists(self, req): isAdmin, s = tools.checkAuthentication(self, True, from_endpoints=True) response = tools.getMailchimpLists(self, req.mc_apikey) mc_lists = None error_message = None if response[0] == True: mc_lists = json.dumps(response[1]) else: mc_lists = None error_message = response[1] return MailchimpLists_Out(success=response[0], mc_lists=mc_lists, error_message=error_message)
def spreadsheet_start(self, req): isAdmin, s = tools.checkAuthentication(self, True, from_endpoints=True) if req.mode not in ["contacts", "donations", "individuals"]: raise endpoints.NotFoundException("Incorrect spreadsheet mode") # Create unique identifier for this job job_id = str(uuid.uuid4()) memcache.set(job_id, 0) stage = spreadsheet_pipelines.GenerateReport(s.websafe, req.mode, job_id) stage.start(queue_name='spreadsheet') pipeline_id = stage.pipeline_id memcache.set("id" + job_id, pipeline_id) return SpreadsheetStart_Out(job_id=job_id)
def get_contacts(self, req): isAdmin, s = tools.checkAuthentication(self, True, from_endpoints=True) if req.query == None: req.query = "" results = s.search.contact(req.query, query_cursor=req.query_cursor) logging.info("Getting contacts with query: " + req.query) contacts = [] new_cursor = tools.getWebsafeCursor(results[1]) for c in results[0]: f = c.fields contact = Contact_Data(key=f[0].value, name=f[1].value, email=tools.truncateEmail(f[2].value)) contacts.append(contact) return Contacts_Out(objects=contacts, new_cursor=new_cursor)
def get_team_members(self, req): isAdmin, s = tools.checkAuthentication(self, True, from_endpoints=True) query = "team_key:" + str(req.team_key) results = s.search.individual(query, query_cursor=req.query_cursor) logging.info("Getting team members with query: " + query) individuals = [] new_cursor = tools.getWebsafeCursor(results[1]) for i in results[0]: f = i.fields individual = Individual_Data(key=f[0].value, name=f[1].value, email=f[2].value, raised=tools.moneyAmount(f[4].value)) individuals.append(individual) return Individuals_Out(objects=individuals, new_cursor=new_cursor)
def new_contact(self, req): message = "<b>" + req.name + "</b> created" success = True isAdmin, s = tools.checkAuthentication(self, True, from_endpoints=True) contact_exists = s.exists.contact(email=req.email) address = [req.address.street, req.address.city, req.address.state, req.address.zipcode] if contact_exists[0] == False: s.create.contact(req.name, email=req.email, phone=req.phone, address=address, notes=req.notes, add_mc=True) else: # If this email address already exists for a user message = "Whoops! You entered an email address already in use by another contact." success = False return SuccessMessage_Out(success=success, message=message)
def confirmation_email(self, req): message = "Email sent" success = True isAdmin, s = tools.checkAuthentication(self, True, from_endpoints=True) d = tools.getKey(req.donation_key).get() if not d.email or d.email == ['']: success = False message = "Email not sent. Contact doesn't have an email address." else: # Email receipt to donor d.review.archive() d.confirmation.task(60) return SuccessMessage_Out(success=success, message=message)
def deposits_add(self, req): message = "Donations deposited." success = True isAdmin, s = tools.checkAuthentication(self, True, from_endpoints=True) if req.donation_keys != []: donation_keys = [] for k in req.donation_keys: donation_keys.append(str(k)) deferred.defer(s.deposits.deposit, donation_keys, _queue="backend") else: message = "No donations to deposit." success = False return SuccessMessage_Out(success=success, message=message)
def get_deposits(self, req): isAdmin, s = tools.checkAuthentication(self, True, from_endpoints=True) if req.query == None: req.query = "" results = s.search.deposit(req.query, query_cursor=req.query_cursor) logging.info("Getting deposits with query: " + req.query) deposits = [] new_cursor = tools.getWebsafeCursor(results[1]) for de in results[0]: f = de.fields deposit = Deposit_Data(key=f[0].value, time_deposited=f[1].value) deposits.append(deposit) return Deposits_Out(objects=deposits, new_cursor=new_cursor)
def get_teams(self, req): isAdmin, s = tools.checkAuthentication(self, True, from_endpoints=True) if req.query == None: req.query = "" results = s.search.team(req.query, query_cursor=req.query_cursor) logging.info("Getting teams with query: " + req.query) teams = [] new_cursor = tools.getWebsafeCursor(results[1]) for t in results[0]: f = t.fields team = Team_Data(key=f[0].value, name=f[1].value, donation_total=tools.moneyAmount(f[2].value)) teams.append(team) return Teams_Out(objects=teams, new_cursor=new_cursor)
def new_individual(self, req): message = "<b>" + req.name + "</b> created" success = True isAdmin, s = tools.checkAuthentication(self, True, from_endpoints=True) exists = s.exists.individual(req.email) email, team_key = req.email, req.team_key if email == "": email = None if team_key == "team": team_key = None if email == None or exists[0] == False: s.create.individual(req.name, tools.getKey(team_key), email, req.password, admin=req.admin) else: # If this email address already exists for a user message = "Sorry, but this email address is already being used." success = False return SuccessMessage_Out(success=success, message=message)