fix: check for debit credit difference even after round-off adjustment (#30050)

This commit is contained in:
Saqib Ansari 2022-04-01 11:03:16 +05:30 committed by GitHub
parent 8598d64d2c
commit bfc34e1084
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -253,7 +253,7 @@ def save_entries(gl_map, adv_adj, update_outstanding, from_repost=False):
if not from_repost:
validate_cwip_accounts(gl_map)
round_off_debit_credit(gl_map)
process_debit_credit_difference(gl_map)
if gl_map:
check_freezing_date(gl_map[0]["posting_date"], adv_adj)
@ -302,12 +302,29 @@ def validate_cwip_accounts(gl_map):
)
def round_off_debit_credit(gl_map):
def process_debit_credit_difference(gl_map):
precision = get_field_precision(
frappe.get_meta("GL Entry").get_field("debit"),
currency=frappe.get_cached_value("Company", gl_map[0].company, "default_currency"),
)
voucher_type = gl_map[0].voucher_type
voucher_no = gl_map[0].voucher_no
allowance = get_debit_credit_allowance(voucher_type, precision)
debit_credit_diff = get_debit_credit_difference(gl_map, precision)
if abs(debit_credit_diff) > allowance:
raise_debit_credit_not_equal_error(debit_credit_diff, voucher_type, voucher_no)
elif abs(debit_credit_diff) >= (1.0 / (10**precision)):
make_round_off_gle(gl_map, debit_credit_diff, precision)
debit_credit_diff = get_debit_credit_difference(gl_map, precision)
if abs(debit_credit_diff) > allowance:
raise_debit_credit_not_equal_error(debit_credit_diff, voucher_type, voucher_no)
def get_debit_credit_difference(gl_map, precision):
debit_credit_diff = 0.0
for entry in gl_map:
entry.debit = flt(entry.debit, precision)
@ -316,20 +333,24 @@ def round_off_debit_credit(gl_map):
debit_credit_diff = flt(debit_credit_diff, precision)
if gl_map[0]["voucher_type"] in ("Journal Entry", "Payment Entry"):
return debit_credit_diff
def get_debit_credit_allowance(voucher_type, precision):
if voucher_type in ("Journal Entry", "Payment Entry"):
allowance = 5.0 / (10**precision)
else:
allowance = 0.5
if abs(debit_credit_diff) > allowance:
frappe.throw(
_("Debit and Credit not equal for {0} #{1}. Difference is {2}.").format(
gl_map[0].voucher_type, gl_map[0].voucher_no, debit_credit_diff
)
)
return allowance
elif abs(debit_credit_diff) >= (1.0 / (10**precision)):
make_round_off_gle(gl_map, debit_credit_diff, precision)
def raise_debit_credit_not_equal_error(debit_credit_diff, voucher_type, voucher_no):
frappe.throw(
_("Debit and Credit not equal for {0} #{1}. Difference is {2}.").format(
voucher_type, voucher_no, debit_credit_diff
)
)
def make_round_off_gle(gl_map, debit_credit_diff, precision):