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 | import frappe | ||||||
| 
 | 
 | ||||||
| def execute(): | def execute(): | ||||||
| 	frappe.reload_doc("accounts", "doctype", "account") | 	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 | 	frappe.db.sql("""update tabAccount set warehouse=master_name | ||||||
| 		where ifnull(account_type, '') = 'Warehouse' and ifnull(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