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, })