69 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			69 lines
		
	
	
		
			1.9 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")
 | |
| 
 | |
| 	i = 0
 | |
| 	company_wise_order = {}
 | |
| 	for pcv in frappe.db.get_all(
 | |
| 		"Period Closing Voucher",
 | |
| 		fields=["company", "posting_date", "name"],
 | |
| 		filters={"docstatus": 1},
 | |
| 		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
 | |
| 
 | |
| 			# 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",
 | |
| 				},
 | |
| 				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"},
 | |
| 					fields=["*"],
 | |
| 				)
 | |
| 
 | |
| 			for entry in closing_entries:
 | |
| 				entry["closing_date"] = pcv_doc.posting_date
 | |
| 				entry["period_closing_voucher"] = pcv_doc.name
 | |
| 
 | |
| 			make_closing_entries(gl_entries + closing_entries, voucher_name=pcv.name)
 | |
| 			company_wise_order[pcv.company].append(pcv.posting_date)
 | |
| 
 | |
| 			i += 1
 |