feat: merge functionality
This commit is contained in:
parent
57a7633f9b
commit
75f8117daf
@ -4,5 +4,66 @@
|
|||||||
import frappe
|
import frappe
|
||||||
from frappe.model.document import Document
|
from frappe.model.document import Document
|
||||||
|
|
||||||
|
from erpnext.accounts.doctype.account.account import merge_account
|
||||||
|
|
||||||
|
|
||||||
class LedgerMerge(Document):
|
class LedgerMerge(Document):
|
||||||
pass
|
def start_merge(self):
|
||||||
|
from frappe.core.page.background_jobs.background_jobs import get_info
|
||||||
|
from frappe.utils.background_jobs import enqueue
|
||||||
|
from frappe.utils.scheduler import is_scheduler_inactive
|
||||||
|
|
||||||
|
if is_scheduler_inactive() and not frappe.flags.in_test:
|
||||||
|
frappe.throw(
|
||||||
|
_("Scheduler is inactive. Cannot merge accounts."), title=_("Scheduler Inactive")
|
||||||
|
)
|
||||||
|
|
||||||
|
enqueued_jobs = [d.get("job_name") for d in get_info()]
|
||||||
|
|
||||||
|
if self.name not in enqueued_jobs:
|
||||||
|
enqueue(
|
||||||
|
start_merge,
|
||||||
|
queue="default",
|
||||||
|
timeout=6000,
|
||||||
|
event="ledger_merge",
|
||||||
|
job_name=self.name,
|
||||||
|
docname=self.name,
|
||||||
|
now=frappe.conf.developer_mode or frappe.flags.in_test,
|
||||||
|
)
|
||||||
|
return True
|
||||||
|
|
||||||
|
return False
|
||||||
|
|
||||||
|
@frappe.whitelist()
|
||||||
|
def form_start_merge(docname):
|
||||||
|
return frappe.get_doc("Ledger Merge", docname).start_merge()
|
||||||
|
|
||||||
|
def start_merge(docname):
|
||||||
|
ledger_merge = frappe.get_doc("Ledger Merge", docname)
|
||||||
|
successful_merges = 0
|
||||||
|
total = len(ledger_merge.merge_accounts)
|
||||||
|
for row in ledger_merge.merge_accounts:
|
||||||
|
try:
|
||||||
|
merge_account(row.account, ledger_merge.account, 0, ledger_merge.root_type, ledger_merge.company)
|
||||||
|
row.db_set('merged', 1)
|
||||||
|
frappe.db.commit()
|
||||||
|
successful_merges += 1
|
||||||
|
frappe.publish_realtime("ledger_merge_progress", {
|
||||||
|
"ledger_merge": ledger_merge.name,
|
||||||
|
"current": successful_merges,
|
||||||
|
"total": total
|
||||||
|
}
|
||||||
|
)
|
||||||
|
except Exception:
|
||||||
|
frappe.db.rollback()
|
||||||
|
ledger_merge.db_set("status", "Error")
|
||||||
|
frappe.log_error(title=ledger_merge.name)
|
||||||
|
finally:
|
||||||
|
if successful_merges == total:
|
||||||
|
ledger_merge.db_set('status', 'Success')
|
||||||
|
elif successful_merges > 0:
|
||||||
|
ledger_merge.db_set('status', 'Partial Success')
|
||||||
|
else:
|
||||||
|
ledger_merge.db_set('status', 'Error')
|
||||||
|
|
||||||
|
frappe.publish_realtime("ledger_merge_refresh", {"ledger_merge": ledger_merge.name})
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user