コード例 #1
0
ファイル: views.py プロジェクト: xtranophilist/awecounting
def approve_cash_receipt(request):
    params = json.loads(request.body)
    dct = {}
    if params.get('id'):
        voucher = CashReceipt.objects.get(id=params.get('id'))
    else:
        dct['error_message'] = 'Voucher needs to be saved before being approved!'
        return HttpResponse(json.dumps(dct), mimetype="application/json")
    cash_account = Account.objects.get(name='Cash Account', company=request.company)
    discount_expenses_account = Account.objects.get(name='Discount Expenses', company=request.company)
    if voucher.rows.all().count() > 0:
        total_receipt = sum(row.receipt for row in voucher.rows.all())
        total_discount = sum(row.discount for row in voucher.rows.all())
        total = total_receipt + total_discount
        set_transactions(voucher, voucher.receipt_on,
                         ['dr', cash_account, total_receipt],
                         ['dr', discount_expenses_account, total_discount],
                         ['cr', voucher.party.customer_account, total]
                         )
    else:
        set_transactions(voucher, voucher.receipt_on,
                         ['dr', cash_account, voucher.amount],
                         ['cr', voucher.party.customer_account, voucher.amount]
                         )
    return HttpResponse(json.dumps(dct), mimetype="application/json")
コード例 #2
0
ファイル: views.py プロジェクト: xtranophilist/awecounting
def approve_cash_payment(request):
    params = json.loads(request.body)
    dct = {}
    if params.get('id'):
        voucher = CashPayment.objects.get(id=params.get('id'))
    else:
        dct['error_message'] = 'Voucher needs to be saved before being approved!'
        return HttpResponse(json.dumps(dct), mimetype="application/json")
    cash_account = Account.objects.get(name='Cash Account', company=request.company)
    discount_income_account = Account.objects.get(name='Discount Income', company=request.company)
    if voucher.rows.all().count() > 0:
        total_payment = sum(row.payment for row in voucher.rows.all())
        total_discount = sum(row.discount for row in voucher.rows.all())
        total = total_payment + total_discount
        set_transactions(voucher, voucher.payment_on,
                         ['dr', voucher.party.supplier_account, total],
                         ['cr', discount_income_account, total_discount],
                         ['cr', cash_account, total_payment]
                         )
    else:
        set_transactions(voucher, voucher.payment_on,
                         ['dr', cash_account, voucher.amount],
                         ['cr', voucher.party.supplier_account, voucher.amount]
                         )
    voucher.status = 'Approved'
    voucher.save()
    return HttpResponse(json.dumps(dct), mimetype="application/json")
コード例 #3
0
ファイル: views.py プロジェクト: xtranophilist/awecounting
def electronic_fund_transfer_out(request, id=None):
    if id:
        payment = get_object_or_404(ElectronicFundTransferOut, id=id, company=request.company)
        scenario = 'Update'
    else:
        payment = ElectronicFundTransferOut(date=date.today())
        scenario = 'New'
    if request.POST.get('action') == 'Approve':
        set_transactions(payment, payment.date,
                         ['cr', payment.bank_account, payment.amount],
                         ['dr', payment.beneficiary, payment.amount],
        )
        payment.status = 'Approved'
        payment.save()
        return redirect(reverse_lazy('update_electronic_fund_transfer_out', kwargs={'id': payment.id}))
    if request.POST:
        form = ElectronicFundTransferOutForm(request.POST, request.FILES, instance=payment, company=request.company)
        if form.is_valid():
            payment = form.save(commit=False)
            payment.company = request.company
            print request.POST
            if 'attachment' in request.FILES:
                payment.attachment = request.FILES['attachment']
            payment.status = 'Unapproved'
            payment.save()
            return redirect(reverse_lazy('update_electronic_fund_transfer_out', kwargs={'id': payment.id}))
    else:
        form = ElectronicFundTransferOutForm(instance=payment, company=request.company)
    return render(request, 'electronic_fund_transfer_out.html', {'form': form, 'scenario': scenario})
コード例 #4
0
ファイル: views.py プロジェクト: xtranophilist/awecounting
def approve_invoice(request):
    params = json.loads(request.body)
    dct = {}
    if params.get('id'):
        voucher = Invoice.objects.get(id=params.get('id'))
    else:
        dct['error_message'] = 'Voucher needs to be saved before being approved!'
        return HttpResponse(json.dumps(dct), mimetype="application/json")
        # cash_account = Account.objects.get(name='Cash Account', company=request.company)
    sales_tax_account = Account.objects.get(name='Sales Tax', company=request.company)
    for row in voucher.particulars.all():
        # print row
        ##sales-cr;tax-cr;cash-dr
        # TODO reduce db query by sending tax rate from client
        tax_percent = row.tax_scheme.percent
        wo_discount = row.quantity * row.unit_price
        amt = wo_discount - ((row.discount * wo_discount) / 100)
        if voucher.tax == 'inclusive':
            tax_amount = amt * (tax_percent / (100 + tax_percent))
            net_amount = amt
        elif voucher.tax == 'exclusive':
            tax_amount = amt * (tax_percent / 100)
            net_amount = amt - tax_amount
        elif voucher.tax == 'no':
            tax_amount = 0
            net_amount = amt
        sales_account = row.item.sales_account
        set_transactions(row, voucher.date,
                         ['dr', voucher.party.customer_account, amt],
                               ['cr', sales_account, net_amount],
                         ['cr', sales_tax_account, tax_amount],
                         )
    voucher.status = 'Approved'
    voucher.save()
    return HttpResponse(json.dumps(dct), mimetype="application/json")
コード例 #5
0
ファイル: views.py プロジェクト: xtranophilist/awecounting
def cash_deposit(request, id=None):
    if id:
        receipt = get_object_or_404(BankCashDeposit, id=id, company=request.company)
        scenario = 'Update'
    else:
        receipt = BankCashDeposit(date=date.today(), company=request.company)
        scenario = 'New'
    if request.POST.get('action') == 'Approve':
        set_transactions(receipt, receipt.date,
                         ['dr', receipt.bank_account, receipt.amount],
                         ['cr', receipt.benefactor, receipt.amount],
        )
        receipt.status = 'Approved'
        receipt.save()
        return redirect(reverse_lazy('update_cash_deposit', kwargs={'id': receipt.id}))
    if request.POST:
        form = BankCashDepositForm(request.POST, initial={'voucher_no': 20}, instance=receipt, company=request.company)
        if form.is_valid():
            receipt = form.save(commit=False)
            receipt.company = request.company
            if 'attachment' in request.FILES:
                receipt.attachment = request.FILES['attachment']
            receipt.status = 'Unapproved'
            receipt.save()
            return redirect(reverse_lazy('update_cash_deposit', kwargs={'id': receipt.id}))
    else:
        form = BankCashDepositForm(instance=receipt, company=request.company)
    return render(request, 'cash_deposit.html', {'form': form, 'scenario': scenario})
コード例 #6
0
ファイル: views.py プロジェクト: xtranophilist/awecounting
def approve_fixed_asset(request):
    params = json.loads(request.body)
    dct = {}
    if params.get('id'):
        voucher = FixedAsset.objects.get(id=params.get('id'))
    else:
        dct['error_message'] = 'Voucher needs to be saved before being approved!'
        return HttpResponse(json.dumps(dct), mimetype="application/json")
    for row in voucher.rows.all():
        set_transactions(row, voucher.date,
                         ['dr', row.asset_ledger, row.amount],
                         ['cr', voucher.from_account, row.amount])
    voucher.status = 'Approved'
    voucher.save()
    return HttpResponse(json.dumps(dct), mimetype="application/json")
コード例 #7
0
 def create(self, validated_data):
     rows_data = validated_data.pop('rows')
     sv = SalaryVoucher.objects.create(**validated_data)
     for row_data in rows_data:
         data = dict(row_data)
         row = SalaryVoucherRow()
         row.employee = data.get('employee')
         row.sn = data.get('sn',0)
         row.amount = data.get('amount',0)
         row.paid_date = data.get('paid_date', datetime.datetime.today)
         row.start_date = data.get('start_date', datetime.datetime.today)
         row.last_date = data.get('last_date', datetime.datetime.today)
         row.salary_voucher = sv
         row.save()
         set_transactions(row, sv.date, ['dr', Account.objects.get_or_create(name='Salaries Expenses')[0],row.amount])
         set_transactions(row, sv.date, ['cr', Account.objects.get_or_create(name='Cash')[0], row.amount])
     return sv
コード例 #8
0
ファイル: views.py プロジェクト: xtranophilist/awecounting
def approve_purchase(request):
    params = json.loads(request.body)
    dct = {}
    if params.get('id'):
        voucher = PurchaseVoucher.objects.get(id=params.get('id'))
    else:
        dct['error_message'] = 'Voucher needs to be saved before being approved!'
        return HttpResponse(json.dumps(dct), mimetype="application/json")
    for row in voucher.particulars.all():
        wo_discount = row.quantity * row.unit_price
        amt = wo_discount - ((row.discount * wo_discount) / 100)
        set_transactions(row, voucher.date,
                         ['dr', voucher.party.supplier_account, amt],
                         ['cr', row.item.purchase_account, amt],
                         )
    voucher.status = 'Approved'
    voucher.save()
    return HttpResponse(json.dumps(dct), mimetype="application/json")
コード例 #9
0
ファイル: views.py プロジェクト: xtranophilist/awecounting
def approve_cheque_deposit(request):
    params = json.loads(request.body)
    dct = {}
    if params.get('id'):
        voucher = ChequeDeposit.objects.get(id=params.get('id'))
    else:
        dct['error_message'] = 'Voucher needs to be saved before being approved!'
        return HttpResponse(json.dumps(dct), mimetype="application/json")
    bank_account = Account.objects.get(id=params.get('bank_account'))
    benefactor = Account.objects.get(id=params.get('benefactor'))
    for row in voucher.rows.all():
        set_transactions(row, params.get('date'),
                         ['dr', bank_account, row.amount],
                         ['cr', benefactor, row.amount],
        )
    voucher.status = 'Approved'
    voucher.save()
    return HttpResponse(json.dumps(dct), mimetype="application/json")
コード例 #10
0
ファイル: views.py プロジェクト: xtranophilist/awecounting
def approve_journal_voucher(request):
    params = json.loads(request.body)
    dct = {'rows': []}
    if params.get('id'):
        voucher = JournalVoucher.objects.get(id=params.get('id'))
    else:
        dct['error_message'] = 'Voucher needs to be saved before being approved!'
        return HttpResponse(json.dumps(dct), mimetype="application/json")
    for row in voucher.rows.all():
        if row.type == 'Dr':
            set_transactions(row, voucher.date,
                             ['dr', row.account, row.dr_amount],
                             )
        else:
            set_transactions(row, voucher.date,
                             ['cr', row.account, row.cr_amount],
                             )
        dct['rows'].append(row.id)
    voucher.status = 'Approved'
    voucher.save()
    return HttpResponse(json.dumps(dct), mimetype="application/json")
コード例 #11
0
ファイル: views.py プロジェクト: xtranophilist/awecounting
def approve_group_payroll_voucher(request):
    params = json.loads(request.body)
    dct = {}
    if params.get('id'):
        voucher = GroupPayroll.objects.get(id=params.get('id'))
    else:
        dct['error_message'] = 'Voucher needs to be saved before being approved!'
        return HttpResponse(json.dumps(dct), mimetype="application/json")
    payroll_tax = Account.objects.get(name='Payroll Tax', company=request.company)
    for row in voucher.rows.all():
        amount = row.rate_day * row.employee.get_unpaid_days() + row.rate_hour * row.employee.get_unpaid_hours() + row.rate_ot_hour * row.employee.get_unpaid_ot_hours()
        net_amount = amount - row.payroll_tax
        set_transactions(row, voucher.date,
                         ['dr', row.pay_head, amount],
                         ['cr', payroll_tax, row.payroll_tax],
                         ['cr', row.employee.account, net_amount]
        )
        row.employee.set_paid()
    voucher.status = 'Approved'
    voucher.save()
    return HttpResponse(json.dumps(dct), mimetype="application/json")
コード例 #12
0
ファイル: views.py プロジェクト: xtranophilist/awecounting
def save_entry(request):
    params = json.loads(request.body)
    dct = {'invalid_attributes': {}, 'saved': {}}
    values = {
        'company': request.company, 'entry_no': params.get('entry_no')
    }
    if params.get('id'):
        the_entry = Entry.objects.get(id=params.get('id'))
    else:
        the_entry = Entry()
        # if not created:
    if params.get('rows') != [{}] or params.get('deleted_rows') != []:
        the_entry = save_model(the_entry, values)
        dct['id'] = the_entry.id
    model = EntryRow
    payroll_tax_account = Account.objects.get(name='Payroll Tax', company=request.company)
    for index, row in enumerate(params.get('rows')):
        if invalid(row, ['pay_heading', 'account_id', 'amount']):
            continue
        if row.get('tax') == '':
            row['tax'] = 0
        values = {'sn': index + 1, 'employee_id': row.get('account_id'), 'pay_heading_id': row.get('pay_heading'),
                  'tax': row.get('tax'), 'remarks': row.get('remarks'), 'hours': row.get('hours'),
                  'amount': row.get('amount'), 'entry': the_entry}
        submodel, created = model.objects.get_or_create(id=row.get('id'), defaults=values)
        net_amount = float(row.get('amount')) - float(row.get('tax'))
        set_transactions(submodel, submodel.created,
                         ['dr', Account.objects.get(id=row.get('pay_heading'), company=request.company),
                          row.get('amount')],
                         ['cr', Account.objects.get(id=row.get('account_id'), company=request.company),
                          net_amount],
                         ['cr', payroll_tax_account, row.get('tax')],
        )
        if not created:
            submodel = save_model(submodel, values)
        dct['saved'][index] = submodel.id
    delete_rows(params.get('deleted_rows'), model)

    return HttpResponse(json.dumps(dct), mimetype="application/json")
コード例 #13
0
    def update(self, instance, validated_data):
        rows_data = validated_data.pop('rows')
        sv = SalaryVoucher.objects.get(pk=instance.id)
        sv.date = validated_data.pop('date',datetime.datetime.today)
        sv.voucher_no = validated_data.pop('voucher_no',1)
        sv.site = validated_data.pop('site')
        sv.save()
        for row_data in rows_data:
            data = dict(row_data)
            id = data.get('id', '')
            # if id:
            #     row = SalaryVoucherRow.objects.get(pk=id)
            #     row.employee = data.get('employee')
            #     row.sn = data.get('sn',1)
            #     row.amount = data.get('amount',0)
            #     row.paid_date = data.get('paid_date', datetime.datetime.today)
            #     row.start_date = data.get('start_date',datetime.datetime.today)
            #     row.last_date = data.get('last_date', datetime.datetime.today)
            #     row.salary_voucher = sv
            #     row.save()
            #     set_transactions(row, sv.date, ['dr', Account.objects.get_or_create(name='Salaries Expenses')[0], row.amount])
            #     set_transactions(row, sv.date, ['cr', Account.objects.get_or_create(name='Cash')[0], row.amount])
            #     row = SalaryVoucherRow()
            # else:
            if not id:
                row = SalaryVoucherRow()
                row.employee = data.get('employee')
                row.sn = data.get('sn',1)
                row.amount = data.get('amount',0)
                row.paid_date = data.get('paid_date',datetime.datetime.today)
                row.start_date = data.get('start_date',datetime.datetime.today)
                row.last_date = data.get('last_date',datetime.datetime.today)
                row.salary_voucher = sv
                row.save()
                set_transactions(row, sv.date, ['dr', Account.objects.get_or_create(name='Salaries Expenses')[0],row.amount])
                set_transactions(row, sv.date, ['cr', Account.objects.get_or_create(name='Cash')[0], row.amount])

        return sv
コード例 #14
0
ファイル: views.py プロジェクト: xtranophilist/awecounting
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,
    })
コード例 #15
0
ファイル: views.py プロジェクト: xtranophilist/awecounting
def approve_individual_payroll_voucher(request):
    params = json.loads(request.body)
    dct = {}
    if params.get('id'):
        voucher = IndividualPayroll.objects.get(id=params.get('id'))
    else:
        dct['error_message'] = 'Voucher needs to be saved before being approved!'
        return HttpResponse(json.dumps(dct), mimetype="application/json")

    total_inclusion = 0
    for row in voucher.inclusions.all():
        set_transactions(row, voucher.date,
                         ['dr', row.particular, row.amount]
        )
        total_inclusion += row.amount

    total_exclusion = 0
    for row in voucher.deductions.all():
        set_transactions(row, voucher.date,
                         ['cr', row.particular, row.amount]
        )
        total_exclusion += row.amount

    diff = total_inclusion - total_exclusion

    if diff > 0:
        set_transactions(voucher, voucher.date,
                         ['cr', voucher.employee.account, diff]
        )
    elif diff < 0:
        set_transactions(voucher, voucher.date,
                         ['dr', voucher.employee.account, diff * (-1)]
        )
    voucher.employee.set_paid()
    voucher.status = 'Approved'
    voucher.save()
    return HttpResponse(json.dumps(dct), mimetype="application/json")
コード例 #16
0
ファイル: views.py プロジェクト: xtranophilist/awecounting
def approve(request):
    params = json.loads(request.body)
    dct = {}
    try:
        journal = DayJournal.objects.get(date=params.get('date'), company=request.company)
    except DayJournal.DoesNotExist:
        dct['error_message'] = 'Day Journal needs to be saved before being approved!'
        return HttpResponse(json.dumps(dct), mimetype="application/json")
    cash_account = Account.objects.get(name='Cash Account', company=request.company)
    card_account = Account.objects.get(name='Card Account', company=request.company)
    total_amount = 0
    total_tax = 0
    for cash_sale in journal.cash_sales.all():
        tax_rate = cash_sale.sales_ledger.tax_rate or 0
        tax_amount = cash_sale.amount * zero_for_none(tax_rate) / 100
        net_amount = cash_sale.amount - tax_amount
        set_transactions(journal, journal.date,
                         ['cr', cash_sale.sales_ledger, net_amount],
        )
        total_amount += cash_sale.amount
        total_tax += tax_amount
    if journal.lotto_sales_dispenser_amount is None or journal.lotto_sales_dispenser_amount == 0:
        lotto_amount = journal.lotto_sales_register_amount
    else:
        lotto_amount = journal.lotto_sales_dispenser_amount
    total_amount += lotto_amount
    lotto_sales_ledger = Account.objects.get(name='Lotto Sales', company=request.company)
    lotto_tax_rate = lotto_sales_ledger.tax_rate
    lotto_tax = lotto_amount * zero_for_none(lotto_tax_rate) / 100
    net_lotto_amount = lotto_amount - lotto_tax
    total_tax += lotto_tax
    set_transactions(journal, journal.date,
                     ['cr', lotto_sales_ledger, net_lotto_amount],
    )
    scratch_off_total = 0
    for scratch_off in journal.lotto_detail.all():
        day_close = scratch_off.day_close
        if day_close == 0:
            day_close = scratch_off.pack_count
        sales = (scratch_off.pack_count * zero_for_none(scratch_off.addition) + (
            day_close - scratch_off.day_open)) * zero_for_none(scratch_off.rate)
        scratch_off_total += sales
    if scratch_off_total == 0:
        scratch_off_total = journal.scratch_off_sales_register_amount
    total_amount += scratch_off_total
    scratch_off_ledger = Account.objects.get(name='Scratch Off Sales', company=request.company)
    scratch_off_tax_rate = scratch_off_ledger.tax_rate
    scratch_off_tax = scratch_off_total * zero_for_none(scratch_off_tax_rate) / 100
    net_scratch_off_amount = scratch_off_total - scratch_off_tax
    total_tax += scratch_off_tax
    set_transactions(journal, journal.date,
                     ['cr', scratch_off_ledger, net_scratch_off_amount],
    )

    set_transactions(journal, journal.date,
                     ['cr', Account.objects.get(name='Sales Tax', company=request.company), total_tax],
    )

    non_cash = 0
    for card_sale in journal.card_sales.all():
        commission_out = card_sale.commission_out or 0
        net = card_sale.amount - commission_out
        set_transactions(journal, journal.date,
                         ['dr', Account.objects.get(name='Commission Out', company=request.company), commission_out],
        )
        set_transactions(journal, journal.date,
                         ['dr', card_account, net],
        )
        non_cash += card_sale.amount

    for cash_equivalent_sale in journal.cash_equivalent_sales.all():
        set_transactions(journal, journal.date,
                         ['dr', cash_equivalent_sale.account, cash_equivalent_sale.amount],
        )
        non_cash += cash_equivalent_sale.amount

    set_transactions(journal, journal.date,
                     ['dr', cash_account, total_amount - non_cash],
    )

    for row in journal.summary_transfer.all():
        # Cash - Dr	; Cheque - Dr	; Bill-payment - Cr; Card - Dr
        set_transactions(row, journal.date,
                         ['dr', cash_account, zero_for_none(row.cash)],
                         ['dr', card_account, zero_for_none(row.card)],
                         ['dr', Account.objects.get(name='Cheque Account', company=request.company),
                          zero_for_none(row.cheque)],
                         ['cr', row.transfer_type,
                          add(zero_for_none(row.cash), zero_for_none(row.card), zero_for_none(row.cheque))],
        )

    for row in journal.vendor_payout.all():
        if row.type == 'new':
            set_transactions(row, journal.date,
                             ['dr', row.purchase_ledger, row.amount],
                             ['cr', row.paid, row.amount],
            )
        else:
            set_transactions(row, journal.date,
                             ['dr', row.vendor, row.amount],
                             ['cr', row.paid, row.amount],
            )

    for row in journal.other_payout.all():
        set_transactions(row, journal.date,
                         ['dr', row.paid_to, row.amount],
                         ['cr', row.paid, row.amount],
        )





    #journal.status = 'Approved'
    #journal.save()
    return HttpResponse(json.dumps(dct), mimetype="application/json")