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 + ) )