Merge branch 'develop' into make-against-field-dynamic
diff --git a/erpnext/accounts/deferred_revenue.py b/erpnext/accounts/deferred_revenue.py
index d0940c7..00d5ea3 100644
--- a/erpnext/accounts/deferred_revenue.py
+++ b/erpnext/accounts/deferred_revenue.py
@@ -358,9 +358,11 @@
account_currency = get_account_currency(item.expense_account or item.income_account)
if doc.doctype == "Sales Invoice":
+ against_type = "Customer"
against, project = doc.customer, doc.project
credit_account, debit_account = item.income_account, item.deferred_revenue_account
else:
+ against_type = "Supplier"
against, project = doc.supplier, item.project
credit_account, debit_account = item.deferred_expense_account, item.expense_account
@@ -413,6 +415,7 @@
doc,
credit_account,
debit_account,
+ against_type,
against,
amount,
base_amount,
@@ -494,6 +497,7 @@
doc,
credit_account,
debit_account,
+ against_type,
against,
amount,
base_amount,
@@ -515,6 +519,7 @@
doc.get_gl_dict(
{
"account": credit_account,
+ "against_type": against_type,
"against": against,
"credit": base_amount,
"credit_in_account_currency": amount,
@@ -534,6 +539,7 @@
doc.get_gl_dict(
{
"account": debit_account,
+ "against_type": against_type,
"against": against,
"debit": base_amount,
"debit_in_account_currency": amount,
diff --git a/erpnext/accounts/doctype/gl_entry/gl_entry.json b/erpnext/accounts/doctype/gl_entry/gl_entry.json
index 5063ec6..1adeaa5 100644
--- a/erpnext/accounts/doctype/gl_entry/gl_entry.json
+++ b/erpnext/accounts/doctype/gl_entry/gl_entry.json
@@ -17,6 +17,7 @@
"account_currency",
"debit_in_account_currency",
"credit_in_account_currency",
+ "against_type",
"against",
"against_voucher_type",
"against_voucher",
@@ -129,12 +130,20 @@
"options": "account_currency"
},
{
+ "fieldname": "against_type",
+ "fieldtype": "Link",
+ "in_filter": 1,
+ "label": "Against Type",
+ "options": "DocType"
+ },
+ {
"fieldname": "against",
- "fieldtype": "Text",
+ "fieldtype": "Dynamic Link",
"in_filter": 1,
"label": "Against",
"oldfieldname": "against",
- "oldfieldtype": "Text"
+ "oldfieldtype": "Text",
+ "options": "against_type"
},
{
"fieldname": "against_voucher_type",
@@ -286,7 +295,7 @@
"idx": 1,
"in_create": 1,
"links": [],
- "modified": "2023-08-16 21:38:44.072267",
+ "modified": "2023-09-25 12:03:23.031733",
"modified_by": "Administrator",
"module": "Accounts",
"name": "GL Entry",
diff --git a/erpnext/accounts/doctype/invoice_discounting/invoice_discounting.py b/erpnext/accounts/doctype/invoice_discounting/invoice_discounting.py
index 5bd4585..744dff4 100644
--- a/erpnext/accounts/doctype/invoice_discounting/invoice_discounting.py
+++ b/erpnext/accounts/doctype/invoice_discounting/invoice_discounting.py
@@ -125,6 +125,7 @@
"account": inv.debit_to,
"party_type": "Customer",
"party": d.customer,
+ "against_type": "Account",
"against": self.accounts_receivable_credit,
"credit": outstanding_in_company_currency,
"credit_in_account_currency": outstanding_in_company_currency
@@ -145,6 +146,7 @@
"account": self.accounts_receivable_credit,
"party_type": "Customer",
"party": d.customer,
+ "against_type": "Account",
"against": inv.debit_to,
"debit": outstanding_in_company_currency,
"debit_in_account_currency": outstanding_in_company_currency
diff --git a/erpnext/accounts/doctype/journal_entry/journal_entry.py b/erpnext/accounts/doctype/journal_entry/journal_entry.py
index 85ef6f7..1b7b82b 100644
--- a/erpnext/accounts/doctype/journal_entry/journal_entry.py
+++ b/erpnext/accounts/doctype/journal_entry/journal_entry.py
@@ -676,27 +676,52 @@
)
def set_against_account(self):
- accounts_debited, accounts_credited = [], []
if self.voucher_type in ("Deferred Revenue", "Deferred Expense"):
for d in self.get("accounts"):
if d.reference_type == "Sales Invoice":
- field = "customer"
+ against_type = "Customer"
else:
- field = "supplier"
+ against_type = "Supplier"
- d.against_account = frappe.db.get_value(d.reference_type, d.reference_name, field)
+ d.against_type = against_type
+ d.against_account = frappe.db.get_value(
+ d.reference_type, d.reference_name, against_type.lower()
+ )
else:
- for d in self.get("accounts"):
- if flt(d.debit) > 0:
- accounts_debited.append(d.party or d.account)
- if flt(d.credit) > 0:
- accounts_credited.append(d.party or d.account)
+ self.get_against_accounts()
- for d in self.get("accounts"):
- if flt(d.debit) > 0:
- d.against_account = ", ".join(list(set(accounts_credited)))
- if flt(d.credit) > 0:
- d.against_account = ", ".join(list(set(accounts_debited)))
+ def get_against_accounts(self):
+ accounts_debited, accounts_credited, against_accounts = [], [], []
+ split_account = {}
+ separate_against_account_entries = 1
+ for d in self.get("accounts"):
+ if flt(d.debit) > 0 or flt(d.debit_in_account_currency) > 0:
+ accounts_debited.append(d)
+ elif flt(d.credit) > 0 or flt(d.credit_in_account_currency) > 0:
+ accounts_credited.append(d)
+
+ if d.against_account:
+ separate_against_account_entries = 0
+ break
+
+ if separate_against_account_entries:
+ if len(accounts_credited) > 1 and len(accounts_debited) > 1:
+ frappe.msgprint(
+ _(
+ "Unable to automatically determine {0} accounts. Set them up in the {1} table if needed.".format(
+ frappe.bold("against"), frappe.bold("Accounting Entries")
+ )
+ ),
+ alert=True,
+ )
+ elif len(accounts_credited) == 1:
+ against_accounts = accounts_debited
+ split_account = accounts_credited[0]
+ elif len(accounts_debited) == 1:
+ against_accounts = accounts_credited
+ split_account = accounts_debited[0]
+
+ return separate_against_account_entries, against_accounts, split_account
def validate_debit_credit_amount(self):
if not (self.voucher_type == "Exchange Gain Or Loss" and self.multi_currency):
@@ -893,40 +918,75 @@
def build_gl_map(self):
gl_map = []
+ separate_against_account_entries, against_accounts, split_account = self.get_against_accounts()
for d in self.get("accounts"):
if d.debit or d.credit or (self.voucher_type == "Exchange Gain Or Loss"):
r = [d.user_remark, self.remark]
r = [x for x in r if x]
remarks = "\n".join(r)
- gl_map.append(
- self.get_gl_dict(
- {
- "account": d.account,
- "party_type": d.party_type,
- "due_date": self.due_date,
- "party": d.party,
- "against": d.against_account,
- "debit": flt(d.debit, d.precision("debit")),
- "credit": flt(d.credit, d.precision("credit")),
- "account_currency": d.account_currency,
- "debit_in_account_currency": flt(
- d.debit_in_account_currency, d.precision("debit_in_account_currency")
- ),
- "credit_in_account_currency": flt(
- d.credit_in_account_currency, d.precision("credit_in_account_currency")
- ),
- "against_voucher_type": d.reference_type,
- "against_voucher": d.reference_name,
- "remarks": remarks,
- "voucher_detail_no": d.reference_detail_no,
- "cost_center": d.cost_center,
- "project": d.project,
- "finance_book": self.finance_book,
- },
- item=d,
- )
+ gl_dict = self.get_gl_dict(
+ {
+ "account": d.account,
+ "party_type": d.party_type,
+ "due_date": self.due_date,
+ "party": d.party,
+ "debit": flt(d.debit, d.precision("debit")),
+ "credit": flt(d.credit, d.precision("credit")),
+ "account_currency": d.account_currency,
+ "debit_in_account_currency": flt(
+ d.debit_in_account_currency, d.precision("debit_in_account_currency")
+ ),
+ "credit_in_account_currency": flt(
+ d.credit_in_account_currency, d.precision("credit_in_account_currency")
+ ),
+ "against_voucher_type": d.reference_type,
+ "against_voucher": d.reference_name,
+ "remarks": remarks,
+ "voucher_detail_no": d.reference_detail_no,
+ "cost_center": d.cost_center,
+ "project": d.project,
+ "finance_book": self.finance_book,
+ },
+ item=d,
)
+
+ if not separate_against_account_entries:
+ gl_dict.update({"against_type": d.against_type, "against_account": d.against_account})
+ gl_map.append(gl_dict)
+
+ elif d in against_accounts:
+ gl_dict.update(
+ {
+ "against_type": split_account.party_type or "Account",
+ "against_account": split_account.party or split_account.account,
+ }
+ )
+ gl_map.append(gl_dict)
+
+ else:
+ for against_account in against_accounts:
+ against_account = against_account.as_dict()
+ debit = against_account.credit or against_account.credit_in_account_currency
+ credit = against_account.debit or against_account.debit_in_account_currency
+ gl_dict = gl_dict.copy()
+ gl_dict.update(
+ {
+ "against_type": against_account.party_type or "Account",
+ "against": against_account.party or against_account.account,
+ "debit": flt(debit, d.precision("debit")),
+ "credit": flt(credit, d.precision("credit")),
+ "account_currency": d.account_currency,
+ "debit_in_account_currency": flt(
+ debit / d.exchange_rate, d.precision("debit_in_account_currency")
+ ),
+ "credit_in_account_currency": flt(
+ credit / d.exchange_rate, d.precision("credit_in_account_currency")
+ ),
+ }
+ )
+ gl_map.append(gl_dict)
+
return gl_map
def make_gl_entries(self, cancel=0, adv_adj=0):
diff --git a/erpnext/accounts/doctype/journal_entry_account/journal_entry_account.json b/erpnext/accounts/doctype/journal_entry_account/journal_entry_account.json
index 3ba8cea..0e5dde0 100644
--- a/erpnext/accounts/doctype/journal_entry_account/journal_entry_account.json
+++ b/erpnext/accounts/doctype/journal_entry_account/journal_entry_account.json
@@ -37,6 +37,7 @@
"col_break3",
"is_advance",
"user_remark",
+ "against_type",
"against_account"
],
"fields": [
@@ -249,12 +250,13 @@
},
{
"fieldname": "against_account",
- "fieldtype": "Text",
+ "fieldtype": "Dynamic Link",
"hidden": 1,
"label": "Against Account",
"no_copy": 1,
"oldfieldname": "against_account",
"oldfieldtype": "Text",
+ "options": "against_type",
"print_hide": 1
},
{
@@ -279,12 +281,20 @@
"hidden": 1,
"label": "Reference Detail No",
"no_copy": 1
+ },
+ {
+ "fieldname": "against_type",
+ "fieldtype": "Link",
+ "hidden": 1,
+ "label": "Against Type",
+ "options": "DocType",
+ "print_hide": 1
}
],
"idx": 1,
"istable": 1,
"links": [],
- "modified": "2023-06-16 14:11:13.507807",
+ "modified": "2023-10-11 13:05:21.489496",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Journal Entry Account",
diff --git a/erpnext/accounts/doctype/payment_entry/payment_entry.py b/erpnext/accounts/doctype/payment_entry/payment_entry.py
index e6403fd..ff558b2 100644
--- a/erpnext/accounts/doctype/payment_entry/payment_entry.py
+++ b/erpnext/accounts/doctype/payment_entry/payment_entry.py
@@ -1076,6 +1076,7 @@
"account": self.party_account,
"party_type": self.party_type,
"party": self.party,
+ "against_type": "Account",
"against": against_account,
"account_currency": self.party_account_currency,
"cost_center": self.cost_center,
@@ -1234,6 +1235,7 @@
{
"account": self.paid_from,
"account_currency": self.paid_from_account_currency,
+ "against_type": self.party_type if self.payment_type == "Pay" else "Account",
"against": self.party if self.payment_type == "Pay" else self.paid_to,
"credit_in_account_currency": self.paid_amount,
"credit": self.base_paid_amount,
@@ -1249,6 +1251,7 @@
{
"account": self.paid_to,
"account_currency": self.paid_to_account_currency,
+ "against_type": self.party_type if self.payment_type == "Receive" else "Account",
"against": self.party if self.payment_type == "Receive" else self.paid_from,
"debit_in_account_currency": self.received_amount,
"debit": self.base_received_amount,
@@ -1273,6 +1276,7 @@
rev_dr_or_cr = "credit" if dr_or_cr == "debit" else "debit"
against = self.party or self.paid_to
+ against_type = self.party_type or "Account"
payment_account = self.get_party_account_for_taxes()
tax_amount = d.tax_amount
base_tax_amount = d.base_tax_amount
@@ -1281,6 +1285,7 @@
self.get_gl_dict(
{
"account": d.account_head,
+ "against_type": against_type,
"against": against,
dr_or_cr: tax_amount,
dr_or_cr + "_in_account_currency": base_tax_amount
@@ -1306,6 +1311,7 @@
self.get_gl_dict(
{
"account": payment_account,
+ "against_type": against_type,
"against": against,
rev_dr_or_cr: tax_amount,
rev_dr_or_cr + "_in_account_currency": base_tax_amount
@@ -1331,6 +1337,7 @@
{
"account": d.account,
"account_currency": account_currency,
+ "against_type": self.party_type or "Account",
"against": self.party or self.paid_from,
"debit_in_account_currency": d.amount,
"debit": d.amount,
diff --git a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py
index e1f0f19..99b9c4e 100644
--- a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py
+++ b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py
@@ -641,6 +641,7 @@
"party_type": "Supplier",
"party": self.supplier,
"due_date": self.due_date,
+ "against_type": "Account",
"against": self.against_expense_account,
"credit": base_grand_total,
"credit_in_account_currency": base_grand_total
@@ -714,6 +715,7 @@
self.get_gl_dict(
{
"account": warehouse_account[item.warehouse]["account"],
+ "against_type": "Account",
"against": warehouse_account[item.from_warehouse]["account"],
"cost_center": item.cost_center,
"project": item.project or self.project,
@@ -734,6 +736,7 @@
self.get_gl_dict(
{
"account": warehouse_account[item.from_warehouse]["account"],
+ "against_type": "Account",
"against": warehouse_account[item.warehouse]["account"],
"cost_center": item.cost_center,
"project": item.project or self.project,
@@ -751,6 +754,7 @@
self.get_gl_dict(
{
"account": item.expense_account,
+ "against_type": "Supplier",
"against": self.supplier,
"debit": flt(item.base_net_amount, item.precision("base_net_amount")),
"remarks": self.get("remarks") or _("Accounting Entry for Stock"),
@@ -768,6 +772,7 @@
self.get_gl_dict(
{
"account": item.expense_account,
+ "against_type": "Supplier",
"against": self.supplier,
"debit": warehouse_debit_amount,
"remarks": self.get("remarks") or _("Accounting Entry for Stock"),
@@ -787,6 +792,7 @@
self.get_gl_dict(
{
"account": account,
+ "against_type": "Account",
"against": item.expense_account,
"cost_center": item.cost_center,
"remarks": self.get("remarks") or _("Accounting Entry for Stock"),
@@ -807,6 +813,7 @@
self.get_gl_dict(
{
"account": supplier_warehouse_account,
+ "against_type": "Account",
"against": item.expense_account,
"cost_center": item.cost_center,
"project": item.project or self.project,
@@ -862,6 +869,7 @@
self.get_gl_dict(
{
"account": expense_account,
+ "against_type": "Supplier",
"against": self.supplier,
"debit": amount,
"cost_center": item.cost_center,
@@ -888,6 +896,7 @@
self.get_gl_dict(
{
"account": expense_account,
+ "against_type": "Supplier",
"against": self.supplier,
"debit": discrepancy_caused_by_exchange_rate_difference,
"cost_center": item.cost_center,
@@ -901,6 +910,7 @@
self.get_gl_dict(
{
"account": self.get_company_default("exchange_gain_loss_account"),
+ "against_type": "Supplier",
"against": self.supplier,
"credit": discrepancy_caused_by_exchange_rate_difference,
"cost_center": item.cost_center,
@@ -910,7 +920,7 @@
item=item,
)
)
-
+
# update gross amount of asset bought through this document
assets = frappe.db.get_all(
"Asset", filters={"purchase_invoice": self.name, "item_code": item.item_code}
@@ -946,6 +956,7 @@
self.get_gl_dict(
{
"account": stock_rbnb,
+ "against_type": "Supplier",
"against": self.supplier,
"debit": flt(item.item_tax_amount, item.precision("item_tax_amount")),
"remarks": self.remarks or _("Accounting Entry for Stock"),
@@ -994,6 +1005,7 @@
self.get_gl_dict(
{
"account": cost_of_goods_sold_account,
+ "against_type": "Account",
"against": item.expense_account,
"debit": stock_adjustment_amt,
"remarks": self.get("remarks") or _("Stock Adjustment"),
@@ -1024,6 +1036,7 @@
self.get_gl_dict(
{
"account": tax.account_head,
+ "against_type": "Supplier",
"against": self.supplier,
dr_or_cr: base_amount,
dr_or_cr + "_in_account_currency": base_amount
@@ -1072,6 +1085,7 @@
self.get_gl_dict(
{
"account": tax.account_head,
+ "against_type": "Supplier",
"cost_center": tax.cost_center,
"against": self.supplier,
"credit": applicable_amount,
@@ -1091,6 +1105,7 @@
{
"account": tax.account_head,
"cost_center": tax.cost_center,
+ "against_type": "Supplier",
"against": self.supplier,
"credit": valuation_tax[tax.name],
"remarks": self.remarks or _("Accounting Entry for Stock"),
@@ -1106,6 +1121,7 @@
self.get_gl_dict(
{
"account": self.unrealized_profit_loss_account,
+ "against_type": "Supplier",
"against": self.supplier,
"credit": flt(self.total_taxes_and_charges),
"credit_in_account_currency": flt(self.base_total_taxes_and_charges),
@@ -1127,6 +1143,7 @@
"account": self.credit_to,
"party_type": "Supplier",
"party": self.supplier,
+ "against_type": "Account",
"against": self.cash_bank_account,
"debit": self.base_paid_amount,
"debit_in_account_currency": self.base_paid_amount
@@ -1148,6 +1165,7 @@
self.get_gl_dict(
{
"account": self.cash_bank_account,
+ "against_type": "Supplier",
"against": self.supplier,
"credit": self.base_paid_amount,
"credit_in_account_currency": self.base_paid_amount
@@ -1172,6 +1190,7 @@
"account": self.credit_to,
"party_type": "Supplier",
"party": self.supplier,
+ "against_type": "Account",
"against": self.write_off_account,
"debit": self.base_write_off_amount,
"debit_in_account_currency": self.base_write_off_amount
@@ -1192,6 +1211,7 @@
self.get_gl_dict(
{
"account": self.write_off_account,
+ "against_type": "Supplier",
"against": self.supplier,
"credit": flt(self.base_write_off_amount),
"credit_in_account_currency": self.base_write_off_amount
@@ -1219,6 +1239,7 @@
self.get_gl_dict(
{
"account": round_off_account,
+ "against_type": "Supplier",
"against": self.supplier,
"debit_in_account_currency": self.rounding_adjustment,
"debit": self.base_rounding_adjustment,
diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
index fa95ccd..8033dbf 100644
--- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
+++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
@@ -1040,6 +1040,7 @@
"party_type": "Customer",
"party": self.customer,
"due_date": self.due_date,
+ "against_type": "Account",
"against": self.against_income_account,
"debit": base_grand_total,
"debit_in_account_currency": base_grand_total
@@ -1069,6 +1070,7 @@
self.get_gl_dict(
{
"account": tax.account_head,
+ "against_type": "Customer",
"against": self.customer,
"credit": flt(base_amount, tax.precision("tax_amount_after_discount_amount")),
"credit_in_account_currency": (
@@ -1090,6 +1092,7 @@
self.get_gl_dict(
{
"account": self.unrealized_profit_loss_account,
+ "against_type": "Customer",
"against": self.customer,
"debit": flt(self.total_taxes_and_charges),
"debit_in_account_currency": flt(self.base_total_taxes_and_charges),
@@ -1158,6 +1161,7 @@
add_asset_activity(asset.name, _("Asset sold"))
for gle in fixed_asset_gl_entries:
+ gle["against_type"] = "Customer"
gle["against"] = self.customer
gl_entries.append(self.get_gl_dict(gle, item=item))
@@ -1179,6 +1183,7 @@
self.get_gl_dict(
{
"account": income_account,
+ "against_type": "Customer",
"against": self.customer,
"credit": flt(base_amount, item.precision("base_net_amount")),
"credit_in_account_currency": (
@@ -1233,6 +1238,7 @@
"account": self.debit_to,
"party_type": "Customer",
"party": self.customer,
+ "against_type": "Account",
"against": "Expense account - "
+ cstr(self.loyalty_redemption_account)
+ " for the Loyalty Program",
@@ -1249,6 +1255,7 @@
{
"account": self.loyalty_redemption_account,
"cost_center": self.cost_center or self.loyalty_redemption_cost_center,
+ "against_type": "Customer",
"against": self.customer,
"debit": self.loyalty_amount,
"remark": "Loyalty Points redeemed by the customer",
@@ -1276,6 +1283,7 @@
"account": self.debit_to,
"party_type": "Customer",
"party": self.customer,
+ "against_type": "Account",
"against": payment_mode.account,
"credit": payment_mode.base_amount,
"credit_in_account_currency": payment_mode.base_amount
@@ -1297,6 +1305,7 @@
self.get_gl_dict(
{
"account": payment_mode.account,
+ "against_type": "Customer",
"against": self.customer,
"debit": payment_mode.base_amount,
"debit_in_account_currency": payment_mode.base_amount
@@ -1321,6 +1330,7 @@
"account": self.debit_to,
"party_type": "Customer",
"party": self.customer,
+ "against_type": "Account",
"against": self.account_for_change_amount,
"debit": flt(self.base_change_amount),
"debit_in_account_currency": flt(self.base_change_amount)
@@ -1342,6 +1352,7 @@
self.get_gl_dict(
{
"account": self.account_for_change_amount,
+ "against_type": "Customer",
"against": self.customer,
"credit": self.base_change_amount,
"cost_center": self.cost_center,
@@ -1368,6 +1379,7 @@
"account": self.debit_to,
"party_type": "Customer",
"party": self.customer,
+ "against_type": "Account",
"against": self.write_off_account,
"credit": flt(self.base_write_off_amount, self.precision("base_write_off_amount")),
"credit_in_account_currency": (
@@ -1388,6 +1400,7 @@
self.get_gl_dict(
{
"account": self.write_off_account,
+ "against_type": "Customer",
"against": self.customer,
"debit": flt(self.base_write_off_amount, self.precision("base_write_off_amount")),
"debit_in_account_currency": (
@@ -1416,6 +1429,7 @@
self.get_gl_dict(
{
"account": round_off_account,
+ "against_type": "Customer",
"against": self.customer,
"credit_in_account_currency": flt(
self.rounding_adjustment, self.precision("rounding_adjustment")
diff --git a/erpnext/assets/doctype/asset/asset.py b/erpnext/assets/doctype/asset/asset.py
index 3c570d1..32518a1 100644
--- a/erpnext/assets/doctype/asset/asset.py
+++ b/erpnext/assets/doctype/asset/asset.py
@@ -608,6 +608,7 @@
self.get_gl_dict(
{
"account": cwip_account,
+ "against_type": "Account",
"against": fixed_asset_account,
"remarks": self.get("remarks") or _("Accounting Entry for Asset"),
"posting_date": self.available_for_use_date,
@@ -623,6 +624,7 @@
self.get_gl_dict(
{
"account": fixed_asset_account,
+ "against_type": "Account",
"against": cwip_account,
"remarks": self.get("remarks") or _("Accounting Entry for Asset"),
"posting_date": self.available_for_use_date,
diff --git a/erpnext/assets/doctype/asset_capitalization/asset_capitalization.py b/erpnext/assets/doctype/asset_capitalization/asset_capitalization.py
index 728764b..229c16d 100644
--- a/erpnext/assets/doctype/asset_capitalization/asset_capitalization.py
+++ b/erpnext/assets/doctype/asset_capitalization/asset_capitalization.py
@@ -430,6 +430,7 @@
self.get_gl_dict(
{
"account": account,
+ "against_type": "Account",
"against": target_account,
"cost_center": item_row.cost_center,
"project": item_row.get("project") or self.get("project"),
@@ -471,6 +472,7 @@
self.set_consumed_asset_status(asset)
for gle in fixed_asset_gl_entries:
+ gle["against_type"] = "Account"
gle["against"] = target_account
gl_entries.append(self.get_gl_dict(gle, item=item))
target_against.add(gle["account"])
@@ -487,6 +489,7 @@
self.get_gl_dict(
{
"account": item_row.expense_account,
+ "against_type": "Account",
"against": target_account,
"cost_center": item_row.cost_center,
"project": item_row.get("project") or self.get("project"),
@@ -498,41 +501,44 @@
)
def get_gl_entries_for_target_item(self, gl_entries, target_against, precision):
- if self.target_is_fixed_asset:
- # Capitalization
- gl_entries.append(
- self.get_gl_dict(
- {
- "account": self.target_fixed_asset_account,
- "against": ", ".join(target_against),
- "remarks": self.get("remarks") or _("Accounting Entry for Asset"),
- "debit": flt(self.total_value, precision),
- "cost_center": self.get("cost_center"),
- },
- item=self,
- )
- )
- else:
- # Target Stock Item
- sle_list = self.sle_map.get(self.name)
- for sle in sle_list:
- stock_value_difference = flt(sle.stock_value_difference, precision)
- account = self.warehouse_account[sle.warehouse]["account"]
-
+ for target_account in target_against:
+ if self.target_is_fixed_asset:
+ # Capitalization
gl_entries.append(
self.get_gl_dict(
{
- "account": account,
- "against": ", ".join(target_against),
- "cost_center": self.cost_center,
- "project": self.get("project"),
- "remarks": self.get("remarks") or "Accounting Entry for Stock",
- "debit": stock_value_difference,
+ "account": self.target_fixed_asset_account,
+ "against_type": "Account",
+ "against": target_account,
+ "remarks": self.get("remarks") or _("Accounting Entry for Asset"),
+ "debit": flt(self.total_value, precision) / len(target_against),
+ "cost_center": self.get("cost_center"),
},
- self.warehouse_account[sle.warehouse]["account_currency"],
item=self,
)
)
+ else:
+ # Target Stock Item
+ sle_list = self.sle_map.get(self.name)
+ for sle in sle_list:
+ stock_value_difference = flt(sle.stock_value_difference, precision)
+ account = self.warehouse_account[sle.warehouse]["account"]
+
+ gl_entries.append(
+ self.get_gl_dict(
+ {
+ "account": account,
+ "against_type": "Account",
+ "against": target_account,
+ "cost_center": self.cost_center,
+ "project": self.get("project"),
+ "remarks": self.get("remarks") or "Accounting Entry for Stock",
+ "debit": stock_value_difference / len(target_against),
+ },
+ self.warehouse_account[sle.warehouse]["account_currency"],
+ item=self,
+ )
+ )
def create_target_asset(self):
if (
diff --git a/erpnext/assets/doctype/asset_capitalization/test_asset_capitalization.py b/erpnext/assets/doctype/asset_capitalization/test_asset_capitalization.py
index ac7c90d..7a7a10d 100644
--- a/erpnext/assets/doctype/asset_capitalization/test_asset_capitalization.py
+++ b/erpnext/assets/doctype/asset_capitalization/test_asset_capitalization.py
@@ -98,12 +98,12 @@
# Test General Ledger Entries
expected_gle = {
- "_Test Fixed Asset - TCP1": 3000,
+ "_Test Fixed Asset - TCP1": 2999.99,
"Expenses Included In Asset Valuation - TCP1": -1000,
"_Test Warehouse - TCP1": -2000,
+ "Round Off - TCP1": 0.01,
}
actual_gle = get_actual_gle_dict(asset_capitalization.name)
-
self.assertEqual(actual_gle, expected_gle)
# Test Stock Ledger Entries
@@ -189,9 +189,10 @@
# Test General Ledger Entries
default_expense_account = frappe.db.get_value("Company", company, "default_expense_account")
expected_gle = {
- "_Test Fixed Asset - _TC": 3000,
+ "_Test Fixed Asset - _TC": 2999.99,
"Expenses Included In Asset Valuation - _TC": -1000,
default_expense_account: -2000,
+ "Round Off - _TC": 0.01,
}
actual_gle = get_actual_gle_dict(asset_capitalization.name)
@@ -376,9 +377,10 @@
# Test General Ledger Entries
expected_gle = {
- "_Test Warehouse - TCP1": consumed_asset_value_before_disposal,
"_Test Accumulated Depreciations - TCP1": accumulated_depreciation,
"_Test Fixed Asset - TCP1": -consumed_asset_purchase_value,
+ "_Test Warehouse - TCP1": consumed_asset_value_before_disposal - 0.01,
+ "Round Off - TCP1": 0.01,
}
actual_gle = get_actual_gle_dict(asset_capitalization.name)
self.assertEqual(actual_gle, expected_gle)
diff --git a/erpnext/assets/doctype/asset_repair/asset_repair.py b/erpnext/assets/doctype/asset_repair/asset_repair.py
index 9c2b8bc..65d2f8e 100644
--- a/erpnext/assets/doctype/asset_repair/asset_repair.py
+++ b/erpnext/assets/doctype/asset_repair/asset_repair.py
@@ -241,6 +241,7 @@
"account": fixed_asset_account,
"debit": self.repair_cost,
"debit_in_account_currency": self.repair_cost,
+ "against_type": "Account",
"against": pi_expense_account,
"voucher_type": self.doctype,
"voucher_no": self.name,
@@ -260,6 +261,7 @@
"account": pi_expense_account,
"credit": self.repair_cost,
"credit_in_account_currency": self.repair_cost,
+ "against_type": "Account",
"against": fixed_asset_account,
"voucher_type": self.doctype,
"voucher_no": self.name,
@@ -294,6 +296,7 @@
"account": item.expense_account or default_expense_account,
"credit": item.amount,
"credit_in_account_currency": item.amount,
+ "against_type": "Account",
"against": fixed_asset_account,
"voucher_type": self.doctype,
"voucher_no": self.name,
@@ -311,6 +314,7 @@
"account": fixed_asset_account,
"debit": item.amount,
"debit_in_account_currency": item.amount,
+ "against_type": "Account",
"against": item.expense_account or default_expense_account,
"voucher_type": self.doctype,
"voucher_no": self.name,
diff --git a/erpnext/controllers/accounts_controller.py b/erpnext/controllers/accounts_controller.py
index 38c1e82..e984730 100644
--- a/erpnext/controllers/accounts_controller.py
+++ b/erpnext/controllers/accounts_controller.py
@@ -1088,6 +1088,7 @@
)
credit_or_debit = "credit" if self.doctype == "Purchase Invoice" else "debit"
+ against_type = "Supplier" if self.doctype == "Purchase Invoice" else "Customer"
against = self.supplier if self.doctype == "Purchase Invoice" else self.customer
if precision_loss:
@@ -1095,6 +1096,7 @@
self.get_gl_dict(
{
"account": round_off_account,
+ "against_type": against_type,
"against": against,
credit_or_debit: precision_loss,
"cost_center": round_off_cost_center
@@ -1444,11 +1446,13 @@
if self.doctype == "Purchase Invoice":
dr_or_cr = "credit"
rev_dr_cr = "debit"
+ against_type = "Supplier"
supplier_or_customer = self.supplier
else:
dr_or_cr = "debit"
rev_dr_cr = "credit"
+ against_type = "Customer"
supplier_or_customer = self.customer
if enable_discount_accounting:
@@ -1473,6 +1477,7 @@
self.get_gl_dict(
{
"account": item.discount_account,
+ "against_type": against_type,
"against": supplier_or_customer,
dr_or_cr: flt(
discount_amount * self.get("conversion_rate"), item.precision("discount_amount")
@@ -1491,6 +1496,7 @@
self.get_gl_dict(
{
"account": income_or_expense_account,
+ "against_type": against_type,
"against": supplier_or_customer,
rev_dr_cr: flt(
discount_amount * self.get("conversion_rate"), item.precision("discount_amount")
@@ -1514,6 +1520,7 @@
self.get_gl_dict(
{
"account": self.additional_discount_account,
+ "against_type": against_type,
"against": supplier_or_customer,
dr_or_cr: self.base_discount_amount,
"cost_center": self.cost_center or erpnext.get_default_cost_center(self.company),
diff --git a/erpnext/controllers/stock_controller.py b/erpnext/controllers/stock_controller.py
index fc45c7a..335f2b0 100644
--- a/erpnext/controllers/stock_controller.py
+++ b/erpnext/controllers/stock_controller.py
@@ -162,6 +162,7 @@
self.get_gl_dict(
{
"account": warehouse_account[sle.warehouse]["account"],
+ "against_type": "Account",
"against": expense_account,
"cost_center": item_row.cost_center,
"project": item_row.project or self.get("project"),
@@ -178,6 +179,7 @@
self.get_gl_dict(
{
"account": expense_account,
+ "against_type": "Account",
"against": warehouse_account[sle.warehouse]["account"],
"cost_center": item_row.cost_center,
"remarks": self.get("remarks") or _("Accounting Entry for Stock"),
@@ -210,6 +212,7 @@
self.get_gl_dict(
{
"account": expense_account,
+ "against_type": "Account",
"against": warehouse_asset_account,
"cost_center": item_row.cost_center,
"project": item_row.project or self.get("project"),
@@ -226,6 +229,7 @@
self.get_gl_dict(
{
"account": warehouse_asset_account,
+ "against_type": "Account",
"against": expense_account,
"cost_center": item_row.cost_center,
"remarks": _("Rounding gain/loss Entry for Stock Transfer"),
@@ -826,6 +830,7 @@
credit,
remarks,
against_account,
+ against_type="Account",
debit_in_account_currency=None,
credit_in_account_currency=None,
account_currency=None,
@@ -840,6 +845,7 @@
"cost_center": cost_center,
"debit": debit,
"credit": credit,
+ "against_type": against_type,
"against": against_account,
"remarks": remarks,
}
diff --git a/erpnext/regional/united_arab_emirates/utils.py b/erpnext/regional/united_arab_emirates/utils.py
index efeaeed..a850d5b 100644
--- a/erpnext/regional/united_arab_emirates/utils.py
+++ b/erpnext/regional/united_arab_emirates/utils.py
@@ -153,6 +153,7 @@
"account": tax.account_head,
"cost_center": tax.cost_center,
"posting_date": doc.posting_date,
+ "against_type": "Supplier",
"against": doc.supplier,
dr_or_cr: tax.base_tax_amount_after_discount_amount,
dr_or_cr + "_in_account_currency": tax.base_tax_amount_after_discount_amount
diff --git a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py
index cbc1693..6874044 100644
--- a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py
+++ b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py
@@ -411,7 +411,7 @@
account_currency=account_currency,
item=item,
)
-
+
self.add_gl_entry(
gl_entries=gl_entries,
account=self.get_company_default("exchange_gain_loss_account"),
@@ -716,16 +716,17 @@
)
amount_including_divisional_loss -= applicable_amount
- self.add_gl_entry(
- gl_entries=gl_entries,
- account=account,
- cost_center=tax.cost_center,
- debit=0.0,
- credit=applicable_amount,
- remarks=self.remarks or _("Accounting Entry for Stock"),
- against_account=against_account,
- item=tax,
- )
+ for against in against_accounts:
+ self.add_gl_entry(
+ gl_entries=gl_entries,
+ account=account,
+ cost_center=tax.cost_center,
+ debit=0.0,
+ credit=flt(applicable_amount) / len(against_accounts),
+ remarks=self.remarks or _("Accounting Entry for Stock"),
+ against_account=against,
+ item=tax,
+ )
i += 1
diff --git a/erpnext/stock/doctype/stock_entry/stock_entry.py b/erpnext/stock/doctype/stock_entry/stock_entry.py
index c41349f..1ed2f98 100644
--- a/erpnext/stock/doctype/stock_entry/stock_entry.py
+++ b/erpnext/stock/doctype/stock_entry/stock_entry.py
@@ -1386,6 +1386,7 @@
self.get_gl_dict(
{
"account": account,
+ "against_type": "Account",
"against": d.expense_account,
"cost_center": d.cost_center,
"remarks": self.get("remarks") or _("Accounting Entry for Stock"),
@@ -1400,6 +1401,7 @@
self.get_gl_dict(
{
"account": d.expense_account,
+ "against_type": "Account",
"against": account,
"cost_center": d.cost_center,
"remarks": self.get("remarks") or _("Accounting Entry for Stock"),