diff --git a/erpnext/accounts/doctype/process_subscription/process_subscription.py b/erpnext/accounts/doctype/process_subscription/process_subscription.py index b4d18a3c0a8..0cc3fae58a8 100644 --- a/erpnext/accounts/doctype/process_subscription/process_subscription.py +++ b/erpnext/accounts/doctype/process_subscription/process_subscription.py @@ -3,7 +3,7 @@ import frappe from frappe.model.document import Document -from frappe.utils import getdate +from frappe.utils import create_batch, getdate from erpnext.accounts.doctype.subscription.subscription import DateTimeLikeObject, process_all @@ -23,7 +23,23 @@ class ProcessSubscription(Document): # end: auto-generated types def on_submit(self): - process_all(subscription=self.subscription, posting_date=self.posting_date) + self.process_all_subscription() + + def process_all_subscription(self): + filters = {"status": ("!=", "Cancelled")} + + if self.subscription: + filters["name"] = self.subscription + + subscriptions = frappe.get_all("Subscription", filters, pluck="name") + + for subscription in create_batch(subscriptions, 500): + frappe.enqueue( + method="erpnext.accounts.doctype.subscription.subscription.process_all", + queue="long", + subscription=subscription, + posting_date=self.posting_date, + ) def create_subscription_process( diff --git a/erpnext/accounts/doctype/subscription/subscription.py b/erpnext/accounts/doctype/subscription/subscription.py index 7323c819d7e..8c4d21ac3fb 100644 --- a/erpnext/accounts/doctype/subscription/subscription.py +++ b/erpnext/accounts/doctype/subscription/subscription.py @@ -756,18 +756,14 @@ def get_prorata_factor( return diff / plan_days -def process_all(subscription: str | None = None, posting_date: DateTimeLikeObject | None = None) -> None: +def process_all(subscription: list, posting_date: DateTimeLikeObject | None = None) -> None: """ Task to updates the status of all `Subscription` apart from those that are cancelled """ - filters = {"status": ("!=", "Cancelled")} - if subscription: - filters["name"] = subscription - - for subscription in frappe.get_all("Subscription", filters, pluck="name"): + for subscription_name in subscription: try: - subscription = frappe.get_doc("Subscription", subscription) + subscription = frappe.get_doc("Subscription", subscription_name) subscription.process(posting_date) frappe.db.commit() except frappe.ValidationError: