add feature/customer-statements to erpnext #22

Merged
norman merged 11 commits from feature/customer-statements into production 2026-07-09 12:53:51 +00:00
3 changed files with 28 additions and 8 deletions
Showing only changes of commit 326adf865a - Show all commits

View File

@@ -16,6 +16,11 @@ doctype_js = {
"Sales Invoice": "public/js/sales_invoice.js"
}
# Load on Customer list view (merges the "Generate Statements" action)
doctype_list_js = {
"Customer": "public/js/customer_list.js"
}
# Ensure custom fields exist after every migrate
after_migrate = "ns_app.setup.after_migrate"

View File

@@ -0,0 +1,20 @@
// Customer list action: "Generate Statements". Registered as a doctype_list_js
// so it loads alongside ERPNext's own Customer list settings (in app order,
// after them). We MERGE into listview_settings — preserving any existing
// onload / add_fields — instead of reassigning the object, which would clobber
// ERPNext's settings (and be clobbered by them). The shared generate/print
// helpers live on `ns_statements` (public/js/customer_statements.js).
frappe.listview_settings["Customer"] = frappe.listview_settings["Customer"] || {};
(function () {
const settings = frappe.listview_settings["Customer"];
const original_onload = settings.onload;
settings.onload = function (listview) {
if (original_onload) original_onload(listview);
listview.page.add_inner_button(__("Generate Statements"), () => {
ns_statements.pick_and_generate();
});
};
})();

View File

@@ -6,14 +6,9 @@
frappe.provide("ns_statements");
// ── Entry point: Customer list ───────────────────────────────────────────────
frappe.listview_settings["Customer"] = {
onload(listview) {
listview.page.add_inner_button(__("Generate Statements"), () => {
ns_statements.pick_and_generate();
});
}
};
// The Customer list button is registered separately in customer_list.js
// (a doctype_list_js) so it merges with — rather than overwrites — ERPNext's
// own listview_settings["Customer"]. Shared helpers live here on ns_statements.
// ── Entry point: Customer form ───────────────────────────────────────────────
frappe.ui.form.on("Customer", {