76 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			76 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| # Copyright (c) 2023, Frappe Technologies Pvt. Ltd. and Contributors
 | |
| # License: MIT. See LICENSE
 | |
| 
 | |
| 
 | |
| import frappe
 | |
| 
 | |
| from erpnext.accounts.doctype.account_closing_balance.account_closing_balance import (
 | |
| 	make_closing_entries,
 | |
| )
 | |
| from erpnext.accounts.utils import get_fiscal_year
 | |
| 
 | |
| 
 | |
| def execute():
 | |
| 	frappe.db.truncate("Account Closing Balance")
 | |
| 
 | |
| 	for company in frappe.get_all("Company", pluck="name"):
 | |
| 		i = 0
 | |
| 		company_wise_order = {}
 | |
| 		for pcv in frappe.db.get_all(
 | |
| 			"Period Closing Voucher",
 | |
| 			fields=["company", "posting_date", "name"],
 | |
| 			filters={"docstatus": 1, "company": company},
 | |
| 			order_by="posting_date",
 | |
| 		):
 | |
| 
 | |
| 			company_wise_order.setdefault(pcv.company, [])
 | |
| 			if pcv.posting_date not in company_wise_order[pcv.company]:
 | |
| 				pcv_doc = frappe.get_doc("Period Closing Voucher", pcv.name)
 | |
| 				pcv_doc.year_start_date = get_fiscal_year(
 | |
| 					pcv.posting_date, pcv.fiscal_year, company=pcv.company
 | |
| 				)[1]
 | |
| 
 | |
| 				# get gl entries against pcv
 | |
| 				gl_entries = frappe.db.get_all(
 | |
| 					"GL Entry", filters={"voucher_no": pcv.name, "is_cancelled": 0}, fields=["*"]
 | |
| 				)
 | |
| 				for entry in gl_entries:
 | |
| 					entry["is_period_closing_voucher_entry"] = 1
 | |
| 					entry["closing_date"] = pcv_doc.posting_date
 | |
| 					entry["period_closing_voucher"] = pcv_doc.name
 | |
| 
 | |
| 				closing_entries = []
 | |
| 
 | |
| 				if pcv.posting_date not in company_wise_order[pcv.company]:
 | |
| 					# get all gl entries for the year
 | |
| 					closing_entries = frappe.db.get_all(
 | |
| 						"GL Entry",
 | |
| 						filters={
 | |
| 							"is_cancelled": 0,
 | |
| 							"voucher_no": ["!=", pcv.name],
 | |
| 							"posting_date": ["between", [pcv_doc.year_start_date, pcv.posting_date]],
 | |
| 							"is_opening": "No",
 | |
| 							"company": company,
 | |
| 						},
 | |
| 						fields=["*"],
 | |
| 					)
 | |
| 
 | |
| 				if i == 0:
 | |
| 					# add opening entries only for the first pcv
 | |
| 					closing_entries += frappe.db.get_all(
 | |
| 						"GL Entry",
 | |
| 						filters={"is_cancelled": 0, "is_opening": "Yes", "company": company},
 | |
| 						fields=["*"],
 | |
| 					)
 | |
| 
 | |
| 				for entry in closing_entries:
 | |
| 					entry["closing_date"] = pcv_doc.posting_date
 | |
| 					entry["period_closing_voucher"] = pcv_doc.name
 | |
| 
 | |
| 				entries = gl_entries + closing_entries
 | |
| 
 | |
| 				if entries:
 | |
| 					make_closing_entries(entries, voucher_name=pcv.name)
 | |
| 					i += 1
 | |
| 					company_wise_order[pcv.company].append(pcv.posting_date)
 |