Contact and email fields in Payment Entry (#15490)
* Add contact_person and contact_email fields to Payment Entry * Minor fix * Map contact details while making Payment Entry * Update payment_entry.py
This commit is contained in:
		
							parent
							
								
									a7ae06eadb
								
							
						
					
					
						commit
						352e6494f3
					
				| @ -23,7 +23,6 @@ frappe.ui.form.on('Payment Entry', { | ||||
| 				} | ||||
| 			} | ||||
| 		}); | ||||
| 
 | ||||
| 		frm.set_query("party_type", function() { | ||||
| 			return{ | ||||
| 				"filters": { | ||||
| @ -31,7 +30,17 @@ frappe.ui.form.on('Payment Entry', { | ||||
| 				} | ||||
| 			} | ||||
| 		}); | ||||
| 
 | ||||
| 		frm.set_query("contact_person", function() { | ||||
| 			if (frm.doc.party) { | ||||
| 				return { | ||||
| 					query: 'frappe.contacts.doctype.contact.contact.contact_query', | ||||
| 					filters: { | ||||
| 						link_doctype: frm.doc.party_type, | ||||
| 						link_name: frm.doc.party | ||||
| 					} | ||||
| 				}; | ||||
| 			} | ||||
| 		}); | ||||
| 		frm.set_query("paid_to", function() { | ||||
| 			var account_types = in_list(["Receive", "Internal Transfer"], frm.doc.payment_type) ? | ||||
| 				["Bank", "Cash"] : [frappe.boot.party_account_types[frm.doc.party_type]]; | ||||
| @ -114,6 +123,11 @@ frappe.ui.form.on('Payment Entry', { | ||||
| 		frm.events.set_dynamic_labels(frm); | ||||
| 	}, | ||||
| 
 | ||||
| 	contact_person: function(frm) { | ||||
| 		frm.set_value("contact_email", ""); | ||||
| 		erpnext.utils.get_contact_details(frm); | ||||
| 	}, | ||||
| 
 | ||||
| 	hide_unhide_fields: function(frm) { | ||||
| 		var company_currency = frm.doc.company? frappe.get_doc(":Company", frm.doc.company).default_currency: ""; | ||||
| 
 | ||||
| @ -146,7 +160,7 @@ frappe.ui.form.on('Payment Entry', { | ||||
| 		frm.toggle_display("set_exchange_gain_loss", | ||||
| 			(frm.doc.paid_amount && frm.doc.received_amount && frm.doc.difference_amount && | ||||
| 				((frm.doc.paid_from_account_currency != company_currency || | ||||
| 					frm.doc.paid_to_account_currency != company_currency) &&  | ||||
| 					frm.doc.paid_to_account_currency != company_currency) && | ||||
| 					frm.doc.paid_from_account_currency != frm.doc.paid_to_account_currency))); | ||||
| 
 | ||||
| 		frm.refresh_fields(); | ||||
| @ -208,7 +222,7 @@ frappe.ui.form.on('Payment Entry', { | ||||
| 			}); | ||||
| 		} else { | ||||
| 			if(frm.doc.party) { | ||||
| 				frm.events.party(frm);	 | ||||
| 				frm.events.party(frm); | ||||
| 			} | ||||
| 
 | ||||
| 			if(frm.doc.mode_of_payment) { | ||||
| @ -230,13 +244,16 @@ frappe.ui.form.on('Payment Entry', { | ||||
| 	}, | ||||
| 
 | ||||
| 	party: function(frm) { | ||||
| 		if (frm.doc.contact_email || frm.doc.contact_person) { | ||||
| 			frm.set_value("contact_email", ""); | ||||
| 			frm.set_value("contact_person", ""); | ||||
| 		} | ||||
| 		if(frm.doc.payment_type && frm.doc.party_type && frm.doc.party) { | ||||
| 			if(!frm.doc.posting_date) { | ||||
| 				frappe.msgprint(__("Please select Posting Date before selecting Party")) | ||||
| 				frm.set_value("party", ""); | ||||
| 				return ; | ||||
| 			} | ||||
| 			 | ||||
| 			frm.set_party_account_based_on_party = true; | ||||
| 
 | ||||
| 			return frappe.call({ | ||||
| @ -302,7 +319,7 @@ frappe.ui.form.on('Payment Entry', { | ||||
| 							frm.set_value("target_exchange_rate", frm.doc.source_exchange_rate); | ||||
| 						} | ||||
| 						frm.set_value("received_amount", frm.doc.paid_amount); | ||||
| 						 | ||||
| 
 | ||||
| 					} else { | ||||
| 						frm.events.received_amount(frm); | ||||
| 					} | ||||
| @ -350,7 +367,7 @@ frappe.ui.form.on('Payment Entry', { | ||||
| 						]); | ||||
| 					} | ||||
| 				} | ||||
| 			});			 | ||||
| 			}); | ||||
| 		} | ||||
| 	}, | ||||
| 
 | ||||
| @ -402,7 +419,7 @@ frappe.ui.form.on('Payment Entry', { | ||||
| 			} | ||||
| 		}) | ||||
| 	}, | ||||
| 	 | ||||
| 
 | ||||
| 	posting_date: function(frm) { | ||||
| 		frm.events.paid_from_account_currency(frm); | ||||
| 	}, | ||||
| @ -415,7 +432,7 @@ frappe.ui.form.on('Payment Entry', { | ||||
| 				frm.set_value("target_exchange_rate", frm.doc.source_exchange_rate); | ||||
| 				frm.set_value("base_received_amount", frm.doc.base_paid_amount); | ||||
| 			} | ||||
| 			 | ||||
| 
 | ||||
| 			frm.events.set_unallocated_amount(frm); | ||||
| 		} | ||||
| 
 | ||||
| @ -425,17 +442,17 @@ frappe.ui.form.on('Payment Entry', { | ||||
| 
 | ||||
| 	target_exchange_rate: function(frm) { | ||||
| 		frm.set_paid_amount_based_on_received_amount = true; | ||||
| 		 | ||||
| 
 | ||||
| 		if (frm.doc.received_amount) { | ||||
| 			frm.set_value("base_received_amount", | ||||
| 				flt(frm.doc.received_amount) * flt(frm.doc.target_exchange_rate)); | ||||
| 				 | ||||
| 			if(!frm.doc.source_exchange_rate &&  | ||||
| 
 | ||||
| 			if(!frm.doc.source_exchange_rate && | ||||
| 					(frm.doc.paid_from_account_currency == frm.doc.paid_to_account_currency)) { | ||||
| 				frm.set_value("source_exchange_rate", frm.doc.target_exchange_rate); | ||||
| 				frm.set_value("base_paid_amount", frm.doc.base_received_amount); | ||||
| 			} | ||||
| 			 | ||||
| 
 | ||||
| 			frm.events.set_unallocated_amount(frm); | ||||
| 		} | ||||
| 		frm.set_paid_amount_based_on_received_amount = false; | ||||
| @ -468,14 +485,14 @@ frappe.ui.form.on('Payment Entry', { | ||||
| 			frm.events.allocate_party_amount_against_ref_docs(frm, frm.doc.received_amount); | ||||
| 		else | ||||
| 			frm.events.set_unallocated_amount(frm); | ||||
| 		 | ||||
| 
 | ||||
| 		frm.set_paid_amount_based_on_received_amount = false; | ||||
| 	}, | ||||
| 	 | ||||
| 
 | ||||
| 	reset_received_amount: function(frm) { | ||||
| 		if(!frm.set_paid_amount_based_on_received_amount && | ||||
| 				(frm.doc.paid_from_account_currency == frm.doc.paid_to_account_currency)) { | ||||
| 			 | ||||
| 
 | ||||
| 			frm.set_value("received_amount", frm.doc.paid_amount); | ||||
| 
 | ||||
| 			if(frm.doc.source_exchange_rate) { | ||||
| @ -483,7 +500,7 @@ frappe.ui.form.on('Payment Entry', { | ||||
| 			} | ||||
| 			frm.set_value("base_received_amount", frm.doc.base_paid_amount); | ||||
| 		} | ||||
| 		 | ||||
| 
 | ||||
| 		if(frm.doc.payment_type == "Receive") | ||||
| 			frm.events.allocate_party_amount_against_ref_docs(frm, frm.doc.paid_amount); | ||||
| 		else | ||||
| @ -549,7 +566,7 @@ frappe.ui.form.on('Payment Entry', { | ||||
| 						(frm.doc.payment_type=="Receive" && frm.doc.party_type=="Customer") || | ||||
| 						(frm.doc.payment_type=="Pay" && frm.doc.party_type=="Supplier")  || | ||||
| 						(frm.doc.payment_type=="Pay" && frm.doc.party_type=="Employee") || | ||||
| 						(frm.doc.payment_type=="Receive" && frm.doc.party_type=="Student")  | ||||
| 						(frm.doc.payment_type=="Receive" && frm.doc.party_type=="Student") | ||||
| 					) { | ||||
| 						if(total_positive_outstanding > total_negative_outstanding) | ||||
| 							frm.set_value("paid_amount", | ||||
| @ -694,7 +711,7 @@ frappe.ui.form.on('Payment Entry', { | ||||
| 		frm.set_value("unallocated_amount", unallocated_amount); | ||||
| 		frm.trigger("set_difference_amount"); | ||||
| 	}, | ||||
| 	 | ||||
| 
 | ||||
| 	set_difference_amount: function(frm) { | ||||
| 		var difference_amount = 0; | ||||
| 		var base_unallocated_amount = flt(frm.doc.unallocated_amount) * | ||||
| @ -753,7 +770,7 @@ frappe.ui.form.on('Payment Entry', { | ||||
| 				frappe.msgprint(__("Row #{0}: Reference Document Type must be one of Purchase Order, Purchase Invoice or Journal Entry", [row.idx])); | ||||
| 				return false; | ||||
| 			} | ||||
| 			 | ||||
| 
 | ||||
| 			if(frm.doc.party_type=="Employee" && | ||||
| 				!in_list(["Expense Claim", "Journal Entry"], row.reference_doctype) | ||||
| 			) { | ||||
|  | ||||
| @ -376,6 +376,40 @@ | ||||
|    "translatable": 0,  | ||||
|    "unique": 0 | ||||
|   },  | ||||
|   { | ||||
|    "allow_bulk_edit": 0,  | ||||
|    "allow_in_quick_entry": 0,  | ||||
|    "allow_on_submit": 0,  | ||||
|    "bold": 0,  | ||||
|    "collapsible": 0,  | ||||
|    "columns": 0,  | ||||
|    "depends_on": "party",  | ||||
|    "fieldname": "contact_person",  | ||||
|    "fieldtype": "Link",  | ||||
|    "hidden": 0,  | ||||
|    "ignore_user_permissions": 0,  | ||||
|    "ignore_xss_filter": 0,  | ||||
|    "in_filter": 0,  | ||||
|    "in_global_search": 0,  | ||||
|    "in_list_view": 0,  | ||||
|    "in_standard_filter": 0,  | ||||
|    "label": "Contact",  | ||||
|    "length": 0,  | ||||
|    "no_copy": 0,  | ||||
|    "options": "Contact",  | ||||
|    "permlevel": 0,  | ||||
|    "precision": "",  | ||||
|    "print_hide": 0,  | ||||
|    "print_hide_if_no_value": 0,  | ||||
|    "read_only": 0,  | ||||
|    "remember_last_selected_value": 0,  | ||||
|    "report_hide": 0,  | ||||
|    "reqd": 0,  | ||||
|    "search_index": 0,  | ||||
|    "set_only_once": 0,  | ||||
|    "translatable": 0,  | ||||
|    "unique": 0 | ||||
|   },  | ||||
|   { | ||||
|    "allow_bulk_edit": 0,  | ||||
|    "allow_in_quick_entry": 0,  | ||||
| @ -441,6 +475,40 @@ | ||||
|    "translatable": 0,  | ||||
|    "unique": 0 | ||||
|   },  | ||||
|   { | ||||
|    "allow_bulk_edit": 0,  | ||||
|    "allow_in_quick_entry": 0,  | ||||
|    "allow_on_submit": 0,  | ||||
|    "bold": 0,  | ||||
|    "collapsible": 0,  | ||||
|    "columns": 0,  | ||||
|    "depends_on": "contact_person",  | ||||
|    "fieldname": "contact_email",  | ||||
|    "fieldtype": "Data",  | ||||
|    "hidden": 0,  | ||||
|    "ignore_user_permissions": 0,  | ||||
|    "ignore_xss_filter": 0,  | ||||
|    "in_filter": 0,  | ||||
|    "in_global_search": 0,  | ||||
|    "in_list_view": 0,  | ||||
|    "in_standard_filter": 0,  | ||||
|    "label": "Email",  | ||||
|    "length": 0,  | ||||
|    "no_copy": 0,  | ||||
|    "options": "Email",  | ||||
|    "permlevel": 0,  | ||||
|    "precision": "",  | ||||
|    "print_hide": 0,  | ||||
|    "print_hide_if_no_value": 0,  | ||||
|    "read_only": 1,  | ||||
|    "remember_last_selected_value": 0,  | ||||
|    "report_hide": 0,  | ||||
|    "reqd": 0,  | ||||
|    "search_index": 0,  | ||||
|    "set_only_once": 0,  | ||||
|    "translatable": 0,  | ||||
|    "unique": 0 | ||||
|   },  | ||||
|   { | ||||
|    "allow_bulk_edit": 0,  | ||||
|    "allow_in_quick_entry": 0,  | ||||
| @ -1972,7 +2040,7 @@ | ||||
|  "issingle": 0,  | ||||
|  "istable": 0,  | ||||
|  "max_attachments": 0,  | ||||
|  "modified": "2018-09-11 15:44:28.647566",  | ||||
|  "modified": "2018-09-25 14:38:48.312629",  | ||||
|  "modified_by": "Administrator",  | ||||
|  "module": "Accounts",  | ||||
|  "name": "Payment Entry",  | ||||
|  | ||||
| @ -299,12 +299,12 @@ class PaymentEntry(AccountsController): | ||||
| 			if self.payment_type == "Receive" \ | ||||
| 				and self.base_total_allocated_amount < self.base_received_amount + total_deductions \ | ||||
| 				and self.total_allocated_amount < self.paid_amount + (total_deductions / self.source_exchange_rate): | ||||
| 					self.unallocated_amount = (self.base_received_amount + total_deductions -  | ||||
| 					self.unallocated_amount = (self.base_received_amount + total_deductions - | ||||
| 						self.base_total_allocated_amount) / self.source_exchange_rate | ||||
| 			elif self.payment_type == "Pay" \ | ||||
| 				and self.base_total_allocated_amount < (self.base_paid_amount - total_deductions) \ | ||||
| 				and self.total_allocated_amount < self.received_amount + (total_deductions / self.target_exchange_rate): | ||||
| 					self.unallocated_amount = (self.base_paid_amount - (total_deductions +  | ||||
| 					self.unallocated_amount = (self.base_paid_amount - (total_deductions + | ||||
| 						self.base_total_allocated_amount)) / self.target_exchange_rate | ||||
| 
 | ||||
| 	def set_difference_amount(self): | ||||
| @ -790,7 +790,6 @@ def get_reference_details(reference_doctype, reference_name, party_account_curre | ||||
| @frappe.whitelist() | ||||
| def get_payment_entry(dt, dn, party_amount=None, bank_account=None, bank_amount=None): | ||||
| 	doc = frappe.get_doc(dt, dn) | ||||
| 
 | ||||
| 	if dt in ("Sales Order", "Purchase Order") and flt(doc.per_billed, 2) > 0: | ||||
| 		frappe.throw(_("Can only make payment against unbilled {0}").format(dt)) | ||||
| 
 | ||||
| @ -877,7 +876,8 @@ def get_payment_entry(dt, dn, party_amount=None, bank_account=None, bank_amount= | ||||
| 	pe.mode_of_payment = doc.get("mode_of_payment") | ||||
| 	pe.party_type = party_type | ||||
| 	pe.party = doc.get(scrub(party_type)) | ||||
| 
 | ||||
| 	pe.contact_person = doc.get("contact_person") | ||||
| 	pe.contact_email = doc.get("contact_email") | ||||
| 	pe.ensure_supplier_is_not_blocked() | ||||
| 
 | ||||
| 	pe.paid_from = party_account if payment_type=="Receive" else bank.account | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user