Party model patch
- Create receivable / payable account, set them in company - Set party in JV and GL Entry - Delete all exisintg individual party account
This commit is contained in:
		
							parent
							
								
									db030d1761
								
							
						
					
					
						commit
						8f44f03cba
					
				| @ -5,6 +5,85 @@ from __future__ import unicode_literals | ||||
| import frappe | ||||
| 
 | ||||
| def execute(): | ||||
| 	try: | ||||
| 		frappe.reload_doc("accounts", "doctype", "account") | ||||
| 		receivable_payable_accounts = create_receivable_payable_account() | ||||
| 		set_party_in_jv_and_gl_entry(receivable_payable_accounts) | ||||
| 		delete_individual_party_account(receivable_payable_accounts) | ||||
| 	except: | ||||
| 		print frappe.get_traceback() | ||||
| 		pass | ||||
| 
 | ||||
| 
 | ||||
| def link_warehouse_account(): | ||||
| 	frappe.db.sql("""update tabAccount set warehouse=master_name | ||||
| 		where ifnull(account_type, '') = 'Warehouse' and ifnull(master_name, '') != ''""") | ||||
| 
 | ||||
| def create_receivable_payable_account(): | ||||
| 	receivable_payable_accounts = frappe._dict() | ||||
| 
 | ||||
| 	def _create_account(args): | ||||
| 		account = frappe.new_doc("Account") | ||||
| 		account.group_or_ledger = "Ledger" | ||||
| 		account.update(args) | ||||
| 		account.insert() | ||||
| 
 | ||||
| 		frappe.db.set_value("Company", args["company"], | ||||
| 			("receivables_group" if args["account_type"]=="Receivable" else "payables_group"), account.name) | ||||
| 
 | ||||
| 		receivable_payable_accounts.setdefault(args["company"], {}).setdefault(args["account_type"], account.name) | ||||
| 
 | ||||
| 	for company in frappe.db.sql_list("select name from tabCompany"): | ||||
| 		_create_account({ | ||||
| 				"account_name": "Debtors", | ||||
| 				"account_type": "Receivable", | ||||
| 				"company": company, | ||||
| 				"parent_account": get_parent_account(company, "Customer") | ||||
| 			}) | ||||
| 
 | ||||
| 		_create_account({ | ||||
| 			"account_name": "Creditors", | ||||
| 			"account_type": "Payable", | ||||
| 			"company": company, | ||||
| 			"parent_account": get_parent_account(company, "Supplier") | ||||
| 		}) | ||||
| 
 | ||||
| 	return receivable_payable_accounts | ||||
| 
 | ||||
| def get_parent_account(company, master_type): | ||||
| 	parent_account = frappe.db.get_value("Company", company, | ||||
| 		"receivables_group" if master_type=="Customer" else "payables_group") | ||||
| 	if not parent_account: | ||||
| 		parent_account = frappe.db.get_value("Account", {"company": company, | ||||
| 			"account_name": "Accounts Receivable" if master_type=="Customer" else "Accounts Payable"}) | ||||
| 
 | ||||
| 	if not parent_account: | ||||
| 		parent_account = frappe.db.sql_list("""select parent_account from tabAccount | ||||
| 			where company=%s and ifnull(master_type, '')=%s and ifnull(master_name, '')!='' limit 1""", | ||||
| 			(company, master_type)) | ||||
| 		parent_account = parent_account[0][0] if parent_account else None | ||||
| 
 | ||||
| 	return parent_account | ||||
| 
 | ||||
| def set_party_in_jv_and_gl_entry(receivable_payable_accounts): | ||||
| 	accounts = frappe.db.sql("""select name, master_type, master_name, company from `tabAccount` | ||||
| 		where ifnull(master_type, '') in ('Customer', 'Supplier') and ifnull(master_name, '') != ''""", as_dict=1) | ||||
| 
 | ||||
| 	account_map = frappe._dict() | ||||
| 	for d in accounts: | ||||
| 		account_map.setdefault(d.name, d) | ||||
| 
 | ||||
| 	for dt in ["Journal Voucher Detail", "GL Entry"]: | ||||
| 		records = frappe.db.sql("""select name, account from `tab%s` where account in (%s)""" % | ||||
| 			(dt, ", ".join(['%s']*len(account_map))), tuple(account_map.keys())) | ||||
| 		for d in records: | ||||
| 			account_details = account_map.get(d.account, {}) | ||||
| 			account_type = "Receivable" if account_details.get("master_type")=="Customer" else "Payable" | ||||
| 			new_account = receivable_payable_accounts[account_details.get("company")][account_type] | ||||
| 
 | ||||
| 			frappe.db.sql("update `tab{0}` set account=%s, party_type=%s, party=%s where name=%s".format(dt), | ||||
| 				(new_account, account_details.get("master_type"), account_details.get("master_name"), d.name)) | ||||
| 
 | ||||
| def delete_individual_party_account(): | ||||
| 	frappe.db.sql("""delete from `tabAccount` where ifnull(master_type, '') in ('Customer', 'Supplier') | ||||
| 		and ifnull(master_name, '') != ''""") | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user