def do_transaction(self, source, dest, amount): transaction = Transaction() transaction.relation = self.relation transaction.date = datetime.strptime('2012-01-01:00:00:00', '%Y-%m-%d:%H:%M:%S') transaction.account = source transaction.transfer = dest transaction.description = 'Monies!' transaction.amount = amount transaction.save()
def transaction_data(request): """ AJAX handler for transaction data in the transaction view """ # New transactions come in through a POST request if request.method == "POST": response = json.loads(request.raw_post_data, parse_float=Decimal) # Catch phony record creation request. if response['date'] == None: return HttpResponse('') # Insert the main transaction transaction = Transaction() transaction.account = Account.objects.get(pk=int(request.GET['account'])) transaction.date = datetime.strptime(response['date'], '%Y-%m-%dT%H:%M:%S') transaction.transfer = Account.objects.get(pk=int(response['transfer'])) transaction.description = response['description'] if response['relation'] != 0: transaction.relation = Relation.objects.get(pk=int(response['relation'])) transaction.amount = Decimal(response['amount']) transaction.save() response['transfer_display'] = '%s %s' % (transaction.transfer.number, transaction.transfer.name) response['id'] = transaction.id if transaction.relation != None: response['relation_display'] = transaction.relation.displayname return HttpResponse(json.dumps({ 'success': True, 'data': response })) # Existing transactions come in through a PUT request on /transactiondata/id elif request.method == "PUT": response = json.loads(request.raw_post_data, parse_float=Decimal) transaction = Transaction.objects.get(pk=response['id']) transaction.date = datetime.strptime(response['date'], '%Y-%m-%dT%H:%M:%S') transaction.transfer = Account.objects.get(pk=int(response['transfer'])) transaction.description = response['description'] transaction.amount = Decimal(response['amount']) if response['relation']: transaction.relation = Relation.objects.get(pk=int(response['relation'])) transaction.save() response['transfer_display'] = '%s %s' % (transaction.transfer.number, transaction.transfer.name) if transaction.relation != None: response['relation_display'] = transaction.relation.displayname else: response['relation_display'] = '' return HttpResponse(json.dumps({ 'success': True, 'data': response })) # A delete is done via DELETE /transactiondata/id elif request.method == "DELETE": response = json.loads(request.raw_post_data, parse_float=Decimal) transaction = Transaction.objects.get(pk=response['id']) # Delete the related transaction first (There can be only one!) assert transaction.related.count() == 1 for related in transaction.related.all(): related.delete() transaction.delete() return HttpResponse(json.dumps({ 'success': True })) # Requesting transactions is done via GET /transactiondata?account=.. else: transactions = Transaction.objects.filter(account=request.GET['account']) # XXX May want to change this to use simplejson response = '{success:true,data:[' for transaction in transactions: response += '{id:%d,' % transaction.id response += 'date:"%s",' % transaction.date response += 'transfer:%d,' % transaction.transfer.id response += 'transfer_display:"%s %s",' % (transaction.transfer.number, transaction.transfer.name) response += 'description:"%s",' % transaction.description if transaction.relation != None: response += 'relation:%d,' % transaction.relation.id response += 'relation_display:"%s",' % transaction.relation.displayname else: response += 'relation:null,' response += 'relation_display:"",' response += 'amount:%s},' % transaction.amount response += ']}' return HttpResponse(response)