feat: preview next numbers on naming series tool
This commit is contained in:
parent
82cd54b40b
commit
24d1bf5328
@ -54,5 +54,35 @@ frappe.ui.form.on("Naming Series", {
|
||||
frm.events.get_doc_and_prefix(frm);
|
||||
}
|
||||
});
|
||||
}
|
||||
},
|
||||
|
||||
naming_series_to_check(frm) {
|
||||
frappe.call({
|
||||
method: "preview_series",
|
||||
doc: frm.doc,
|
||||
callback: function(r) {
|
||||
if (!r.exc) {
|
||||
frm.set_value("preview", r.message);
|
||||
} else {
|
||||
frm.set_value("preview", __("Failed to generate preview of series"));
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
add_series(frm) {
|
||||
const series = frm.doc.naming_series_to_check;
|
||||
|
||||
if (!series) {
|
||||
frappe.show_alert(__("Please type a valid series."));
|
||||
return;
|
||||
}
|
||||
|
||||
if (!frm.doc.set_options.includes(series)) {
|
||||
const current_series = frm.doc.set_options;
|
||||
frm.set_value("set_options", `${current_series}\n${series}`);
|
||||
} else {
|
||||
frappe.show_alert(__("Series already added to transaction."));
|
||||
}
|
||||
},
|
||||
});
|
||||
|
@ -8,9 +8,13 @@
|
||||
"setup_series",
|
||||
"select_doc_for_series",
|
||||
"help_html",
|
||||
"naming_series_to_check",
|
||||
"preview",
|
||||
"add_series",
|
||||
"set_options",
|
||||
"user_must_always_select",
|
||||
"update",
|
||||
"column_break_13",
|
||||
"update_series",
|
||||
"prefix",
|
||||
"current_value",
|
||||
@ -33,7 +37,7 @@
|
||||
"fieldname": "help_html",
|
||||
"fieldtype": "HTML",
|
||||
"label": "Help HTML",
|
||||
"options": "<div class=\"well\">\nEdit list of Series in the box below. Rules:\n<ul>\n<li>Each Series Prefix on a new line.</li>\n<li>Allowed special characters are \"/\" and \"-\"</li>\n<li>Optionally, set the number of digits in the series using dot (.) followed by hashes (#). For example, \".####\" means that the series will have four digits. Default is five digits.</li>\n</ul>\nExamples:<br>\nINV-<br>\nINV-10-<br>\nINVK-<br>\nINV-.####<br>\n</div>"
|
||||
"options": "<div class=\"well\">\nEdit list of Series in the box below. Rules:\n<ul>\n<li>Each Series Prefix on a new line.</li>\n<li>Allowed special characters are \"/\" and \"-\"</li>\n<li>Optionally, set the number of digits in the series using dot (.) followed by hashes (#). For example, \".####\" means that the series will have four digits. Default is five digits.</li>\n</ul>\nExamples:<br>\nINV-<br>\nINV-10-<br>\nINVK-<br>\nINV-.####<br>\n</div>\n<br>"
|
||||
},
|
||||
{
|
||||
"depends_on": "select_doc_for_series",
|
||||
@ -77,6 +81,27 @@
|
||||
"fieldtype": "Button",
|
||||
"label": "Update Series Number",
|
||||
"options": "update_series_start"
|
||||
},
|
||||
{
|
||||
"fieldname": "naming_series_to_check",
|
||||
"fieldtype": "Data",
|
||||
"label": "Try a naming Series"
|
||||
},
|
||||
{
|
||||
"default": " ",
|
||||
"fieldname": "preview",
|
||||
"fieldtype": "Text",
|
||||
"label": "Preview of generated names",
|
||||
"read_only": 1
|
||||
},
|
||||
{
|
||||
"fieldname": "column_break_13",
|
||||
"fieldtype": "Column Break"
|
||||
},
|
||||
{
|
||||
"fieldname": "add_series",
|
||||
"fieldtype": "Button",
|
||||
"label": "Add this Series"
|
||||
}
|
||||
],
|
||||
"hide_toolbar": 1,
|
||||
@ -84,7 +109,7 @@
|
||||
"idx": 1,
|
||||
"issingle": 1,
|
||||
"links": [],
|
||||
"modified": "2022-05-26 03:13:05.357751",
|
||||
"modified": "2022-05-26 05:19:10.392657",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Setup",
|
||||
"name": "Naming Series",
|
||||
|
@ -6,7 +6,7 @@ import frappe
|
||||
from frappe import _, msgprint, throw
|
||||
from frappe.core.doctype.doctype.doctype import validate_series
|
||||
from frappe.model.document import Document
|
||||
from frappe.model.naming import parse_naming_series
|
||||
from frappe.model.naming import make_autoname, parse_naming_series
|
||||
from frappe.permissions import get_doctypes_with_read
|
||||
from frappe.utils import cint, cstr
|
||||
|
||||
@ -206,6 +206,35 @@ class NamingSeries(Document):
|
||||
prefix = parse_naming_series(parts)
|
||||
return prefix
|
||||
|
||||
@frappe.whitelist()
|
||||
def preview_series(self) -> str:
|
||||
"""Preview what the naming series will generate."""
|
||||
|
||||
generated_names = []
|
||||
series = self.naming_series_to_check
|
||||
if not series:
|
||||
return ""
|
||||
|
||||
try:
|
||||
doc = self._fetch_last_doc_if_available()
|
||||
for _count in range(3):
|
||||
generated_names.append(make_autoname(series, doc=doc))
|
||||
except Exception as e:
|
||||
if frappe.message_log:
|
||||
frappe.message_log.pop()
|
||||
return _("Failed to generate names from the series") + f"\n{str(e)}"
|
||||
|
||||
# Explcitly rollback in case any changes were made to series table.
|
||||
frappe.db.rollback() # nosemgrep
|
||||
return "\n".join(generated_names)
|
||||
|
||||
def _fetch_last_doc_if_available(self):
|
||||
"""Fetch last doc for evaluating naming series with fields."""
|
||||
try:
|
||||
return frappe.get_last_doc(self.select_doc_for_series)
|
||||
except Exception:
|
||||
return None
|
||||
|
||||
|
||||
def set_by_naming_series(
|
||||
doctype, fieldname, naming_series, hide_name_field=True, make_mandatory=1
|
||||
|
Loading…
x
Reference in New Issue
Block a user