コード例 #1
0
def AddExpense(request, ledgerid=0):
    ### check if the ledger exists, bail out if not
    try:
        ledger = Ledger.objects.get(pk = ledgerid)
    except Ledger.DoesNotExist:
        response = render_to_response('ledgerdoesnotexist.html')
        return response

    ### check if the ledger is open
    if ledger.closed:
        response = render_to_response('ledger_is_closed.html')
        return response

    ### get all people associated with this ledger
    people = Person.objects.filter(ledger_id=ledgerid).order_by('name')
    
    if request.method == 'POST':
        form = ExpenseForm(request.POST, people=people)
        if form.is_valid(): # All validation rules pass
            expense = Expense(
                ledger_id=ledgerid,
                name=form['name'].data,
                amount=Decimal(form['amount'].data),
                amount_native=ConvertCurrency(Decimal(form['amount'].data),
                form['currency'].data,
                ledger.currency.id),
                currency_id=form['currency'].data,
                date=form['date'].data
            )
            
            ### get the expenseparts
            expenseparts = form.get_expense_parts()
            
            ### get totals
            totals = GetTotals(expenseparts)
            if not totals:
                return render_to_response('invalid_expense.html')
            customtotal, autocount, paymenttotal = totals
            
            ### get splitpart (and remainder if any)
            splitpart, remainder = GetSplitParts(expense, customtotal, autocount)
            
            ### validate ledger
            if not ValidateExpense(customtotal, splitpart, autocount, remainder, expense, paymenttotal):
                return render_to_response('invalid_expense.html')
            
            ### OK, save the expense
            expense.save() # save the new expense
                
            ### loop through the expenseparts again and save each
            CreateExpenseParts(expenseparts, expense, ledger, splitpart, remainder)
            
            ### return to the ledger page, expense tab
            return HttpResponseRedirect('/ledger/%s/#expenses' % ledger.id)
        else:
            ### form not valid
            form = ExpenseForm(request.POST, people=people)
    else:
        ### page not POSTed
        form = ExpenseForm(
            initial={'currency': ledger.currency.id, 'date': datetime.date.today}, 
            people=people
        )

    return render(request, 'add_expense.html', {
        'form': form,
        'people': people,
        'ledger': ledger
    })
コード例 #2
0
def EditExpense(request, expenseid=0):
    ### Check if the expense exists - bail out if not
    try:
        expense = Expense.objects.get(pk = expenseid)
    except Expense.DoesNotExist:
        response = render_to_response('expense_does_not_exist.html')
        return response

    ### check if the ledger is open
    if expense.ledger.closed:
        response = render_to_response('ledger_is_closed.html')
        return response

    ### get all people associated with this ledger
    people = Person.objects.filter(ledger=expense.ledger).order_by('name')
    
    ### get all people associated with this expense
    expensepeople = Person.objects.filter(expense=expense).order_by('name')

    form = ExpenseForm(request.POST or None, people=people, expenseparts=expense.expenseparts.all(), initial={
        'name': expense.name, 
        'amount': expense.amount,
        'currency': expense.currency.id,
        'date': expense.date,
    })
    if form.is_valid(): # All validation rules pass
        expense.name = form['name'].data
        expense.amount = Decimal(form['amount'].data)
        expense.amount_native=ConvertCurrency(Decimal(form['amount'].data),form['currency'].data,expense.ledger.currency.id)
        expense.currency = Currency.objects.get(pk = form['currency'].data)

        ### get the expenseparts
        expenseparts = form.get_expense_parts()

        ### get totals
        totals = GetTotals(expenseparts)
        if not totals:
            return render_to_response('invalid_expense.html')
        customtotal, autocount, paymenttotal = totals
        
        ### get splitpart (and remainder if any)
        splitpart, remainder = GetSplitParts(expense, customtotal, autocount)
        
        ### validate expense
        if not ValidateExpense(customtotal, splitpart, autocount, remainder, expense, paymenttotal):
            return render_to_response('invalid_expense.html')
        
        ### OK, save the expense
        expense.save() # save the expense
            
        ### loop through the expenseparts again and save each
        for ep in expense.expenseparts.all():
            ep.delete()
        CreateExpenseParts(expenseparts, expense, expense.ledger, splitpart, remainder)
        
        ### return response
        return HttpResponseRedirect('/ledger/%s/#expenses' % expense.ledger.id)
    
    return render(request, 'edit_expense.html', {
        'form': form,
        'expense': expense,
        'people': people,
        'expensepeople': expensepeople,
        'expenseparts': expense.expenseparts.all(),
    })