mirror of
https://github.com/frappe/erpnext.git
synced 2026-05-19 13:09:17 +00:00
Merge pull request #48996 from frappe/mergify/bp/version-14-hotfix/pr-48901
fix: do not split round off when there is a cost center allocation (backport #48901)
This commit is contained in:
@@ -4,6 +4,8 @@
|
|||||||
import unittest
|
import unittest
|
||||||
|
|
||||||
import frappe
|
import frappe
|
||||||
|
from frappe.query_builder.functions import Sum
|
||||||
|
from frappe.tests.utils import change_settings
|
||||||
from frappe.utils import add_days, today
|
from frappe.utils import add_days, today
|
||||||
|
|
||||||
from erpnext.accounts.doctype.cost_center.test_cost_center import create_cost_center
|
from erpnext.accounts.doctype.cost_center.test_cost_center import create_cost_center
|
||||||
@@ -190,6 +192,31 @@ class TestCostCenterAllocation(unittest.TestCase):
|
|||||||
coa2.cancel()
|
coa2.cancel()
|
||||||
jv.cancel()
|
jv.cancel()
|
||||||
|
|
||||||
|
@change_settings("System Settings", {"rounding_method": "Commercial Rounding"})
|
||||||
|
def test_debit_credit_on_cost_center_allocation_for_commercial_rounding(self):
|
||||||
|
from erpnext.accounts.doctype.sales_invoice.test_sales_invoice import create_sales_invoice
|
||||||
|
|
||||||
|
cca = create_cost_center_allocation(
|
||||||
|
"_Test Company",
|
||||||
|
"Main Cost Center 1 - _TC",
|
||||||
|
{"Sub Cost Center 2 - _TC": 50, "Sub Cost Center 3 - _TC": 50},
|
||||||
|
)
|
||||||
|
|
||||||
|
si = create_sales_invoice(rate=145.65, cost_center="Main Cost Center 1 - _TC")
|
||||||
|
|
||||||
|
gl_entry = frappe.qb.DocType("GL Entry")
|
||||||
|
gl_entries = (
|
||||||
|
frappe.qb.from_(gl_entry)
|
||||||
|
.select(Sum(gl_entry.credit).as_("cr"), Sum(gl_entry.debit).as_("dr"))
|
||||||
|
.where(gl_entry.voucher_type == "Sales Invoice")
|
||||||
|
.where(gl_entry.voucher_no == si.name)
|
||||||
|
).run(as_dict=1)
|
||||||
|
|
||||||
|
self.assertEqual(gl_entries[0].cr, gl_entries[0].dr)
|
||||||
|
|
||||||
|
si.cancel()
|
||||||
|
cca.cancel()
|
||||||
|
|
||||||
|
|
||||||
def create_cost_center_allocation(
|
def create_cost_center_allocation(
|
||||||
company,
|
company,
|
||||||
|
|||||||
@@ -179,6 +179,15 @@ def process_gl_map(gl_map, merge_entries=True, precision=None):
|
|||||||
|
|
||||||
|
|
||||||
def distribute_gl_based_on_cost_center_allocation(gl_map, precision=None):
|
def distribute_gl_based_on_cost_center_allocation(gl_map, precision=None):
|
||||||
|
round_off_account, default_currency = frappe.get_cached_value(
|
||||||
|
"Company", gl_map[0].company, ["round_off_account", "default_currency"]
|
||||||
|
)
|
||||||
|
if not precision:
|
||||||
|
precision = get_field_precision(
|
||||||
|
frappe.get_meta("GL Entry").get_field("debit"),
|
||||||
|
currency=default_currency,
|
||||||
|
)
|
||||||
|
|
||||||
new_gl_map = []
|
new_gl_map = []
|
||||||
for d in gl_map:
|
for d in gl_map:
|
||||||
cost_center = d.get("cost_center")
|
cost_center = d.get("cost_center")
|
||||||
@@ -192,6 +201,11 @@ def distribute_gl_based_on_cost_center_allocation(gl_map, precision=None):
|
|||||||
new_gl_map.append(d)
|
new_gl_map.append(d)
|
||||||
continue
|
continue
|
||||||
|
|
||||||
|
if d.account == round_off_account:
|
||||||
|
d.cost_center = cost_center_allocation[0][0]
|
||||||
|
new_gl_map.append(d)
|
||||||
|
continue
|
||||||
|
|
||||||
for sub_cost_center, percentage in cost_center_allocation:
|
for sub_cost_center, percentage in cost_center_allocation:
|
||||||
gle = copy.deepcopy(d)
|
gle = copy.deepcopy(d)
|
||||||
gle.cost_center = sub_cost_center
|
gle.cost_center = sub_cost_center
|
||||||
|
|||||||
Reference in New Issue
Block a user