fix: PCV posting issues (#37029)
* fix: PCV posting issues * fix: process closing entries separately in a background job * test: Update tests * chore: fix broken ci
This commit is contained in:
parent
a223935f14
commit
8c5fcb8257
@ -268,8 +268,7 @@
|
|||||||
"fieldname": "email_to",
|
"fieldname": "email_to",
|
||||||
"fieldtype": "Data",
|
"fieldtype": "Data",
|
||||||
"in_global_search": 1,
|
"in_global_search": 1,
|
||||||
"label": "To",
|
"label": "To"
|
||||||
"options": "Email"
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"depends_on": "eval: doc.payment_channel != \"Phone\"",
|
"depends_on": "eval: doc.payment_channel != \"Phone\"",
|
||||||
@ -340,8 +339,8 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"fieldname": "payment_url",
|
"fieldname": "payment_url",
|
||||||
"hidden": 1,
|
|
||||||
"fieldtype": "Data",
|
"fieldtype": "Data",
|
||||||
|
"hidden": 1,
|
||||||
"length": 500,
|
"length": 500,
|
||||||
"options": "URL",
|
"options": "URL",
|
||||||
"read_only": 1
|
"read_only": 1
|
||||||
@ -396,7 +395,7 @@
|
|||||||
"index_web_pages_for_search": 1,
|
"index_web_pages_for_search": 1,
|
||||||
"is_submittable": 1,
|
"is_submittable": 1,
|
||||||
"links": [],
|
"links": [],
|
||||||
"modified": "2023-09-16 14:15:02.510890",
|
"modified": "2023-09-27 09:51:42.277638",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "Accounts",
|
"module": "Accounts",
|
||||||
"name": "Payment Request",
|
"name": "Payment Request",
|
||||||
|
@ -8,6 +8,7 @@
|
|||||||
"transaction_date",
|
"transaction_date",
|
||||||
"posting_date",
|
"posting_date",
|
||||||
"fiscal_year",
|
"fiscal_year",
|
||||||
|
"year_start_date",
|
||||||
"amended_from",
|
"amended_from",
|
||||||
"company",
|
"company",
|
||||||
"column_break1",
|
"column_break1",
|
||||||
@ -100,16 +101,22 @@
|
|||||||
"fieldtype": "Text",
|
"fieldtype": "Text",
|
||||||
"label": "Error Message",
|
"label": "Error Message",
|
||||||
"read_only": 1
|
"read_only": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fieldname": "year_start_date",
|
||||||
|
"fieldtype": "Date",
|
||||||
|
"label": "Year Start Date"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"icon": "fa fa-file-text",
|
"icon": "fa fa-file-text",
|
||||||
"idx": 1,
|
"idx": 1,
|
||||||
"is_submittable": 1,
|
"is_submittable": 1,
|
||||||
"links": [],
|
"links": [],
|
||||||
"modified": "2022-07-20 14:51:04.714154",
|
"modified": "2023-09-11 20:19:11.810533",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "Accounts",
|
"module": "Accounts",
|
||||||
"name": "Period Closing Voucher",
|
"name": "Period Closing Voucher",
|
||||||
|
"naming_rule": "Expression (old style)",
|
||||||
"owner": "Administrator",
|
"owner": "Administrator",
|
||||||
"permissions": [
|
"permissions": [
|
||||||
{
|
{
|
||||||
@ -144,5 +151,6 @@
|
|||||||
"search_fields": "posting_date, fiscal_year",
|
"search_fields": "posting_date, fiscal_year",
|
||||||
"sort_field": "modified",
|
"sort_field": "modified",
|
||||||
"sort_order": "DESC",
|
"sort_order": "DESC",
|
||||||
|
"states": [],
|
||||||
"title_field": "closing_account_head"
|
"title_field": "closing_account_head"
|
||||||
}
|
}
|
@ -95,15 +95,23 @@ class PeriodClosingVoucher(AccountsController):
|
|||||||
|
|
||||||
self.check_if_previous_year_closed()
|
self.check_if_previous_year_closed()
|
||||||
|
|
||||||
pce = frappe.db.sql(
|
pcv = frappe.qb.DocType("Period Closing Voucher")
|
||||||
"""select name from `tabPeriod Closing Voucher`
|
existing_entry = (
|
||||||
where posting_date > %s and fiscal_year = %s and docstatus = 1 and company = %s""",
|
frappe.qb.from_(pcv)
|
||||||
(self.posting_date, self.fiscal_year, self.company),
|
.select(pcv.name)
|
||||||
|
.where(
|
||||||
|
(pcv.posting_date >= self.posting_date)
|
||||||
|
& (pcv.fiscal_year == self.fiscal_year)
|
||||||
|
& (pcv.docstatus == 1)
|
||||||
|
& (pcv.company == self.company)
|
||||||
|
)
|
||||||
|
.run()
|
||||||
)
|
)
|
||||||
if pce and pce[0][0]:
|
|
||||||
|
if existing_entry and existing_entry[0][0]:
|
||||||
frappe.throw(
|
frappe.throw(
|
||||||
_("Another Period Closing Entry {0} has been made after {1}").format(
|
_("Another Period Closing Entry {0} has been made after {1}").format(
|
||||||
pce[0][0], self.posting_date
|
existing_entry[0][0], self.posting_date
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -130,18 +138,27 @@ class PeriodClosingVoucher(AccountsController):
|
|||||||
frappe.enqueue(
|
frappe.enqueue(
|
||||||
process_gl_entries,
|
process_gl_entries,
|
||||||
gl_entries=gl_entries,
|
gl_entries=gl_entries,
|
||||||
|
voucher_name=self.name,
|
||||||
|
timeout=3000,
|
||||||
|
)
|
||||||
|
|
||||||
|
frappe.enqueue(
|
||||||
|
process_closing_entries,
|
||||||
|
gl_entries=gl_entries,
|
||||||
closing_entries=closing_entries,
|
closing_entries=closing_entries,
|
||||||
voucher_name=self.name,
|
voucher_name=self.name,
|
||||||
company=self.company,
|
company=self.company,
|
||||||
closing_date=self.posting_date,
|
closing_date=self.posting_date,
|
||||||
queue="long",
|
timeout=3000,
|
||||||
)
|
)
|
||||||
|
|
||||||
frappe.msgprint(
|
frappe.msgprint(
|
||||||
_("The GL Entries will be processed in the background, it can take a few minutes."),
|
_("The GL Entries will be processed in the background, it can take a few minutes."),
|
||||||
alert=True,
|
alert=True,
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
process_gl_entries(gl_entries, closing_entries, self.name, self.company, self.posting_date)
|
process_gl_entries(gl_entries, self.name)
|
||||||
|
process_closing_entries(gl_entries, closing_entries, self.name, self.company, self.posting_date)
|
||||||
|
|
||||||
def get_grouped_gl_entries(self, get_opening_entries=False):
|
def get_grouped_gl_entries(self, get_opening_entries=False):
|
||||||
closing_entries = []
|
closing_entries = []
|
||||||
@ -322,17 +339,12 @@ class PeriodClosingVoucher(AccountsController):
|
|||||||
return query.run(as_dict=1)
|
return query.run(as_dict=1)
|
||||||
|
|
||||||
|
|
||||||
def process_gl_entries(gl_entries, closing_entries, voucher_name, company, closing_date):
|
def process_gl_entries(gl_entries, voucher_name):
|
||||||
from erpnext.accounts.doctype.account_closing_balance.account_closing_balance import (
|
|
||||||
make_closing_entries,
|
|
||||||
)
|
|
||||||
from erpnext.accounts.general_ledger import make_gl_entries
|
from erpnext.accounts.general_ledger import make_gl_entries
|
||||||
|
|
||||||
try:
|
try:
|
||||||
if gl_entries:
|
if gl_entries:
|
||||||
make_gl_entries(gl_entries, merge_entries=False)
|
make_gl_entries(gl_entries, merge_entries=False)
|
||||||
|
|
||||||
make_closing_entries(gl_entries + closing_entries, voucher_name, company, closing_date)
|
|
||||||
frappe.db.set_value("Period Closing Voucher", voucher_name, "gle_processing_status", "Completed")
|
frappe.db.set_value("Period Closing Voucher", voucher_name, "gle_processing_status", "Completed")
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
frappe.db.rollback()
|
frappe.db.rollback()
|
||||||
@ -340,6 +352,19 @@ def process_gl_entries(gl_entries, closing_entries, voucher_name, company, closi
|
|||||||
frappe.db.set_value("Period Closing Voucher", voucher_name, "gle_processing_status", "Failed")
|
frappe.db.set_value("Period Closing Voucher", voucher_name, "gle_processing_status", "Failed")
|
||||||
|
|
||||||
|
|
||||||
|
def process_closing_entries(gl_entries, closing_entries, voucher_name, company, closing_date):
|
||||||
|
from erpnext.accounts.doctype.account_closing_balance.account_closing_balance import (
|
||||||
|
make_closing_entries,
|
||||||
|
)
|
||||||
|
|
||||||
|
try:
|
||||||
|
if gl_entries + closing_entries:
|
||||||
|
make_closing_entries(gl_entries + closing_entries, voucher_name, company, closing_date)
|
||||||
|
except Exception as e:
|
||||||
|
frappe.db.rollback()
|
||||||
|
frappe.log_error(e)
|
||||||
|
|
||||||
|
|
||||||
def make_reverse_gl_entries(voucher_type, voucher_no):
|
def make_reverse_gl_entries(voucher_type, voucher_no):
|
||||||
from erpnext.accounts.general_ledger import make_reverse_gl_entries
|
from erpnext.accounts.general_ledger import make_reverse_gl_entries
|
||||||
|
|
||||||
|
@ -10,7 +10,7 @@ from frappe.utils import today
|
|||||||
from erpnext.accounts.doctype.finance_book.test_finance_book import create_finance_book
|
from erpnext.accounts.doctype.finance_book.test_finance_book import create_finance_book
|
||||||
from erpnext.accounts.doctype.journal_entry.test_journal_entry import make_journal_entry
|
from erpnext.accounts.doctype.journal_entry.test_journal_entry import make_journal_entry
|
||||||
from erpnext.accounts.doctype.sales_invoice.test_sales_invoice import create_sales_invoice
|
from erpnext.accounts.doctype.sales_invoice.test_sales_invoice import create_sales_invoice
|
||||||
from erpnext.accounts.utils import get_fiscal_year, now
|
from erpnext.accounts.utils import get_fiscal_year
|
||||||
|
|
||||||
|
|
||||||
class TestPeriodClosingVoucher(unittest.TestCase):
|
class TestPeriodClosingVoucher(unittest.TestCase):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user