diff --git a/erpnext/accounts/doctype/payment_entry/payment_entry.json b/erpnext/accounts/doctype/payment_entry/payment_entry.json
index 3a0a4a8d065..c7e05f70d7f 100644
--- a/erpnext/accounts/doctype/payment_entry/payment_entry.json
+++ b/erpnext/accounts/doctype/payment_entry/payment_entry.json
@@ -203,14 +203,14 @@
"fieldtype": "Column Break"
},
{
- "depends_on": "party",
+ "depends_on": "eval: doc.party && doc.party_type !== \"Employee\"",
"fieldname": "contact_person",
"fieldtype": "Link",
"label": "Contact",
"options": "Contact"
},
{
- "depends_on": "contact_person",
+ "depends_on": "eval: (doc.contact_person || doc.party_type === \"Employee\") && doc.contact_email",
"fieldname": "contact_email",
"fieldtype": "Data",
"label": "Email",
@@ -809,7 +809,7 @@
"table_fieldname": "payment_entries"
}
],
- "modified": "2025-01-31 17:27:28.555246",
+ "modified": "2025-03-24 16:18:19.920701",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Payment Entry",
diff --git a/erpnext/accounts/doctype/payment_entry/payment_entry.py b/erpnext/accounts/doctype/payment_entry/payment_entry.py
index 4e9e3c4c042..57e36a04bf2 100644
--- a/erpnext/accounts/doctype/payment_entry/payment_entry.py
+++ b/erpnext/accounts/doctype/payment_entry/payment_entry.py
@@ -38,7 +38,11 @@ from erpnext.accounts.general_ledger import (
make_reverse_gl_entries,
process_gl_map,
)
-from erpnext.accounts.party import complete_contact_details, get_party_account, set_contact_details
+from erpnext.accounts.party import (
+ complete_contact_details,
+ get_default_contact,
+ get_party_account,
+)
from erpnext.accounts.utils import (
cancel_exchange_gain_loss_journal,
get_account_currency,
@@ -441,12 +445,12 @@ class PaymentEntry(AccountsController):
self.party_name = frappe.db.get_value(self.party_type, self.party, "name")
if self.party:
- if not self.contact_person:
- set_contact_details(
- self, party=frappe._dict({"name": self.party}), party_type=self.party_type
- )
- else:
- complete_contact_details(self)
+ if self.party_type == "Employee":
+ self.contact_person = None
+ elif not self.contact_person:
+ self.contact_person = get_default_contact(self.party_type, self.party)
+
+ complete_contact_details(self)
if not self.party_balance:
self.party_balance = get_balance_on(
party_type=self.party_type, party=self.party, date=self.posting_date, company=self.company
diff --git a/erpnext/accounts/party.py b/erpnext/accounts/party.py
index 37b5b884234..5ca50b8d7c6 100644
--- a/erpnext/accounts/party.py
+++ b/erpnext/accounts/party.py
@@ -280,32 +280,50 @@ def get_regional_address_details(party_details, doctype, company):
def complete_contact_details(party_details):
- if not party_details.contact_person:
- party_details.update(
- {
- "contact_person": None,
- "contact_display": None,
- "contact_email": None,
- "contact_mobile": None,
- "contact_phone": None,
- "contact_designation": None,
- "contact_department": None,
- }
+ contact_details = frappe._dict()
+
+ if party_details.party_type == "Employee":
+ contact_details = frappe.db.get_value(
+ "Employee",
+ party_details.party,
+ [
+ "employee_name as contact_display",
+ "prefered_email as contact_email",
+ "cell_number as contact_mobile",
+ "designation as contact_designation",
+ "department as contact_department",
+ ],
+ as_dict=True,
+ )
+
+ contact_details.update({"contact_person": None, "contact_phone": None})
+ elif party_details.contact_person:
+ contact_details = frappe.db.get_value(
+ "Contact",
+ party_details.contact_person,
+ [
+ "name as contact_person",
+ "full_name as contact_display",
+ "email_id as contact_email",
+ "mobile_no as contact_mobile",
+ "phone as contact_phone",
+ "designation as contact_designation",
+ "department as contact_department",
+ ],
+ as_dict=True,
)
else:
- fields = [
- "name as contact_person",
- "full_name as contact_display",
- "email_id as contact_email",
- "mobile_no as contact_mobile",
- "phone as contact_phone",
- "designation as contact_designation",
- "department as contact_department",
- ]
+ contact_details = {
+ "contact_person": None,
+ "contact_display": None,
+ "contact_email": None,
+ "contact_mobile": None,
+ "contact_phone": None,
+ "contact_designation": None,
+ "contact_department": None,
+ }
- contact_details = frappe.db.get_value("Contact", party_details.contact_person, fields, as_dict=True)
-
- party_details.update(contact_details)
+ party_details.update(contact_details)
def set_contact_details(party_details, party, party_type):
@@ -771,9 +789,9 @@ def validate_account_party_type(self):
account_type = frappe.get_cached_value("Account", self.account, "account_type")
if account_type and (account_type not in ["Receivable", "Payable", "Equity"]):
frappe.throw(
- _(
- "Party Type and Party can only be set for Receivable / Payable account
" "{0}"
- ).format(self.account)
+ _("Party Type and Party can only be set for Receivable / Payable account
{0}").format(
+ self.account
+ )
)