Example #1
0
def delete_gl_entries(gl_entries=None, voucher_type=None, voucher_no=None, adv_adj=False, update_outstanding="Yes"):

    from accounts.doctype.gl_entry.gl_entry import (
        check_negative_balance,
        check_freezing_date,
        update_outstanding_amt,
        validate_frozen_account,
    )

    if not gl_entries:
        gl_entries = webnotes.conn.sql(
            """select * from `tabGL Entry` 
			where voucher_type=%s and voucher_no=%s""",
            (voucher_type, voucher_no),
            as_dict=True,
        )
    if gl_entries:
        check_freezing_date(gl_entries[0]["posting_date"], adv_adj)

    webnotes.conn.sql(
        """delete from `tabGL Entry` where voucher_type=%s and voucher_no=%s""",
        (voucher_type or gl_entries[0]["voucher_type"], voucher_no or gl_entries[0]["voucher_no"]),
    )

    for entry in gl_entries:
        validate_frozen_account(entry["account"], adv_adj)
        check_negative_balance(entry["account"], adv_adj)
        validate_expense_against_budget(entry)

        if entry.get("against_voucher") and entry.get("against_voucher_type") != "POS" and update_outstanding == "Yes":
            update_outstanding_amt(
                entry["account"], entry.get("against_voucher_type"), entry.get("against_voucher"), on_cancel=True
            )
Example #2
0
def save_entries(gl_map, adv_adj, update_outstanding):
    validate_account_for_auto_accounting_for_stock(gl_map)

    total_debit = total_credit = 0.0
    for entry in gl_map:
        make_entry(entry, adv_adj, update_outstanding)
        # check against budget
        validate_expense_against_budget(entry)

        # update total debit / credit
        total_debit += flt(entry.debit)
        total_credit += flt(entry.credit)

    validate_total_debit_credit(total_debit, total_credit)