mirror of
https://github.com/frappe/erpnext.git
synced 2026-05-30 18:34:48 +00:00
Merge pull request #42221 from ruthra-kumar/fix_subscription_issue
fix: Force Fetching updates on old subscriptions
This commit is contained in:
@@ -38,6 +38,12 @@ frappe.ui.form.on("Subscription", {
|
|||||||
__("Actions")
|
__("Actions")
|
||||||
);
|
);
|
||||||
|
|
||||||
|
frm.add_custom_button(
|
||||||
|
__("Force-Fetch Subscription Updates"),
|
||||||
|
() => frm.trigger("force_fetch_subscription_updates"),
|
||||||
|
__("Actions")
|
||||||
|
);
|
||||||
|
|
||||||
frm.add_custom_button(
|
frm.add_custom_button(
|
||||||
__("Cancel Subscription"),
|
__("Cancel Subscription"),
|
||||||
() => frm.trigger("cancel_this_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();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -717,6 +717,31 @@ class Subscription(Document):
|
|||||||
self.update_subscription_period(posting_date or nowdate())
|
self.update_subscription_period(posting_date or nowdate())
|
||||||
self.save()
|
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'
|
||||||
|
"""
|
||||||
|
|
||||||
|
# Don't process future subscriptions
|
||||||
|
if nowdate() < self.current_invoice_start:
|
||||||
|
frappe.msgprint(_("Subscription for Future dates cannot be processed."))
|
||||||
|
return
|
||||||
|
|
||||||
|
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:
|
def is_prorate() -> int:
|
||||||
return cint(frappe.db.get_single_value("Subscription Settings", "prorate"))
|
return cint(frappe.db.get_single_value("Subscription Settings", "prorate"))
|
||||||
|
|||||||
@@ -521,6 +521,18 @@ class TestSubscription(FrappeTestCase):
|
|||||||
subscription.process(posting_date="2023-01-22")
|
subscription.process(posting_date="2023-01-22")
|
||||||
self.assertEqual(len(subscription.invoices), 2)
|
self.assertEqual(len(subscription.invoices), 2)
|
||||||
|
|
||||||
|
def test_future_subscription(self):
|
||||||
|
"""Force-Fetch should not process future subscriptions"""
|
||||||
|
subscription = create_subscription(
|
||||||
|
start_date=add_months(nowdate(), 1),
|
||||||
|
submit_invoice=0,
|
||||||
|
generate_new_invoices_past_due_date=1,
|
||||||
|
party="_Test Subscription Customer John Doe",
|
||||||
|
)
|
||||||
|
subscription.force_fetch_subscription_updates()
|
||||||
|
subscription.reload()
|
||||||
|
self.assertEqual(len(subscription.invoices), 0)
|
||||||
|
|
||||||
|
|
||||||
def make_plans():
|
def make_plans():
|
||||||
create_plan(plan_name="_Test Plan Name", cost=900, currency="INR")
|
create_plan(plan_name="_Test Plan Name", cost=900, currency="INR")
|
||||||
|
|||||||
Reference in New Issue
Block a user