Ejemplo n.º 1
0
 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()
Ejemplo n.º 2
0
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)