def post(self): data = flatten_arguments(self.request.arguments) from models import Transaction, Invoice from pprint import pformat invoice_id = data.get('invoice') if invoice_id: invoice = Invoice.get_by_id(int(invoice_id, 10)) txn = Transaction(invoice=invoice) txn.identifier = data.get('txn_id') txn.subscription_id = data.get("subscr_id") txn.transaction_type = data.get('txn_type') txn.currency = data.get('mc_currency') txn.amount = data.get('mc_gross', data.get('mc_amount3')) txn.data = pformat(data) txn.put() if self.verify(data): r = self.process(data, txn=txn, invoice=invoice) else: r = self.process_invalid(data, txn=txn, invoice=invoice) if r: self.write(r) else: self.write('Nothing to see here.') else: # error. invoice id was not found. pass
def post(self): action = self.request.get('action', 'list') if action == 'list': self.sendTransactionList() elif action == 'update': # add a new or update a transaction tkey = self.request.get('transaction', 'None') if tkey == 'None': transaction = Transaction() transaction.project = self.project else: transaction = Transaction.get(tkey) if transaction.project.key() != self.project.key(): raise Exception("Project/Transaction mismatch") # update / set fields transaction.date = datetime.strptime(self.request.get('date', transaction.date.isoformat()), "%Y-%m-%d") transaction.source = Account.get(self.request.get('source', transaction.source and transaction.source.key())) transaction.dest = Account.get(self.request.get('dest', transaction.dest and transaction.dest.key())) transaction.ammount = float(self.request.get('ammount', str(transaction.ammount)).replace(',', '.')) transaction.check = self.request.get('check', 'False') == 'True' transaction.text = self.request.get('text', transaction.text) transaction.user = self.user # a None currency means we use the base currency! c = self.request.get('currency', transaction.currency and transaction.currency.key()) transaction.currency = Currency.get(c) if c != "None" else None # exchange source and dest, if the amount is negative if transaction.ammount < 0: tmp_src = transaction.source transaction.source = transaction.dest transaction.dest = tmp_src transaction.ammount = -transaction.ammount # put back into data store transaction.put() # retransmit all transactions self.sendTransactionList() elif action == 'delete': # add a new or update a transaction transaction = Transaction.get(self.request.get('transaction', 'None')) if transaction.project.key() != self.project.key(): raise Exception("Project/Transaction mismatch") transaction.delete() # retransmit all transactions self.sendTransactionList() else: raise Exception("Unknown action '%(action)s'!" % {'action':action})