From 1ef890db732caff9fc77716fd3932ae9c4055b4f Mon Sep 17 00:00:00 2001 From: ruthra kumar Date: Mon, 12 Aug 2024 17:37:48 +0530 Subject: [PATCH] fix: force fetch updates for subcription --- .../doctype/subscription/subscription.js | 13 +++++++++++++ .../doctype/subscription/subscription.py | 19 +++++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/erpnext/accounts/doctype/subscription/subscription.js b/erpnext/accounts/doctype/subscription/subscription.js index b3e21abcaae..306b049220d 100644 --- a/erpnext/accounts/doctype/subscription/subscription.js +++ b/erpnext/accounts/doctype/subscription/subscription.js @@ -38,6 +38,12 @@ frappe.ui.form.on("Subscription", { __("Actions") ); + frm.add_custom_button( + __("Force Fetch Subscription Updates"), + () => frm.trigger("force_fetch_subscription_updates"), + __("Actions") + ); + frm.add_custom_button( __("Cancel Subscription"), () => frm.trigger("cancel_this_subscription"), @@ -82,4 +88,11 @@ frappe.ui.form.on("Subscription", { } }); }, + force_fetch_subscription_updates: function (frm) { + frm.call("force_fetch_subscription_updates").then((r) => { + if (!r.exec) { + frm.reload_doc(); + } + }); + }, }); diff --git a/erpnext/accounts/doctype/subscription/subscription.py b/erpnext/accounts/doctype/subscription/subscription.py index 3b1e594638b..7d3d7321c62 100644 --- a/erpnext/accounts/doctype/subscription/subscription.py +++ b/erpnext/accounts/doctype/subscription/subscription.py @@ -717,6 +717,25 @@ class Subscription(Document): self.update_subscription_period(posting_date or nowdate()) self.save() + @frappe.whitelist() + def force_fetch_subscription_updates(self): + """ + Process Subscription and create Invoices even if current date doesn't lie between current_invoice_start and currenct_invoice_end + It makes use of 'Proces Subscription' to force processing in a specific 'posting_date' + """ + processing_date = None + if self.generate_invoice_at == "Beginning of the current subscription period": + processing_date = self.current_invoice_start + elif self.generate_invoice_at == "End of the current subscription period": + processing_date = self.current_invoice_end + elif self.generate_invoice_at == "Days before the current subscription period": + processing_date = add_days(self.current_invoice_start, -self.number_of_days) + + process_subscription = frappe.new_doc("Process Subscription") + process_subscription.posting_date = processing_date + process_subscription.subscription = self.name + process_subscription.save().submit() + def is_prorate() -> int: return cint(frappe.db.get_single_value("Subscription Settings", "prorate"))