Example #1
0
def account_form(request, id=None):
    obd = Account.objects.get(name='Opening Balance Difference', company=request.company)
    if id:
        account = get_object_or_404(Account, id=id, company=request.company)
        scenario = 'Update'
    else:
        account = Account()
        scenario = 'Create'
    for query in request.GET:
        setattr(account, query, request.GET[query])
    if request.POST:
        form = AccountForm(data=request.POST, instance=account, company=request.company, scenario=scenario)
        if form.is_valid():
            opening_dr = form.cleaned_data.get('opening_dr')
            opening_cr = form.cleaned_data.get('opening_cr')
            item = form.save(commit=False)
            item.company = request.company
            item.save()
            form.save_m2m()
            if scenario == 'Create' or scenario == 'Update':
                if not opening_dr == 0:
                    set_transactions(item, date.today(),
                                     ['dr', item, form.cleaned_data['opening_dr']])
                    set_transactions(item, date.today(),
                                     ['cr', obd, form.cleaned_data['opening_dr']])
                if not opening_cr == 0:
                    set_transactions(item, date.today(),
                                     ['cr', item, form.cleaned_data['opening_cr']])
                    set_transactions(item, date.today(),
                                     ['dr', obd, form.cleaned_data['opening_cr']])
            if request.is_ajax():
                return render(request, 'callback.html', {'obj': AccountSerializer(item).data})
            return redirect('/ledger/')
    else:
        form = AccountForm(instance=account, company=request.company, scenario=scenario)
        form.hide_field(request)
    if request.is_ajax():
        base_template = 'modal.html'
    else:
        base_template = 'dashboard.html'
    return render(request, 'account_form.html', {
        'scenario': scenario,
        'form': form,
        'base_template': base_template,
    })