feat: force cost center renaming from cost center form (#21503)

This commit is contained in:
Saqib 2020-04-30 11:28:43 +05:30 committed by GitHub
parent 090e6093f2
commit a8779872ee
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 39 additions and 41 deletions

View File

@ -18,7 +18,7 @@ frappe.ui.form.on('Cost Center', {
}, },
refresh: function(frm) { refresh: function(frm) {
if (!frm.is_new()) { if (!frm.is_new()) {
frm.add_custom_button(__('Update Cost Center Number'), function () { frm.add_custom_button(__('Update Cost Center Name / Number'), function () {
frm.trigger("update_cost_center_number"); frm.trigger("update_cost_center_number");
}); });
} }
@ -47,35 +47,45 @@ frappe.ui.form.on('Cost Center', {
}, },
update_cost_center_number: function(frm) { update_cost_center_number: function(frm) {
var d = new frappe.ui.Dialog({ var d = new frappe.ui.Dialog({
title: __('Update Cost Center Number'), title: __('Update Cost Center Name / Number'),
fields: [ fields: [
{ {
"label": 'Cost Center Number', "label": "Cost Center Name",
"fieldname": "cost_center_name",
"fieldtype": "Data",
"reqd": 1,
"default": frm.doc.cost_center_name
},
{
"label": "Cost Center Number",
"fieldname": "cost_center_number", "fieldname": "cost_center_number",
"fieldtype": "Data", "fieldtype": "Data",
"reqd": 1 "reqd": 1,
"default": frm.doc.cost_center_number
} }
], ],
primary_action: function() { primary_action: function() {
var data = d.get_values(); var data = d.get_values();
if(data.cost_center_number === frm.doc.cost_center_number) { if(data.cost_center_name === frm.doc.cost_center_name && data.cost_center_number === frm.doc.cost_center_number) {
d.hide(); d.hide();
return; return;
} }
frappe.dom.freeze();
frappe.call({ frappe.call({
method: "erpnext.accounts.utils.update_number_field", method: "erpnext.accounts.utils.update_cost_center",
args: { args: {
doctype_name: frm.doc.doctype, docname: frm.doc.name,
name: frm.doc.name, cost_center_name: data.cost_center_name,
field_name: d.fields[0].fieldname, cost_center_number: data.cost_center_number,
number_value: data.cost_center_number,
company: frm.doc.company company: frm.doc.company
}, },
callback: function(r) { callback: function(r) {
frappe.dom.unfreeze();
if(!r.exc) { if(!r.exc) {
if(r.message) { if(r.message) {
frappe.set_route("Form", "Cost Center", r.message); frappe.set_route("Form", "Cost Center", r.message);
} else { } else {
me.frm.set_value("cost_center_name", data.cost_center_name);
me.frm.set_value("cost_center_number", data.cost_center_number); me.frm.set_value("cost_center_number", data.cost_center_number);
} }
d.hide(); d.hide();

View File

@ -2,7 +2,6 @@
"actions": [], "actions": [],
"allow_copy": 1, "allow_copy": 1,
"allow_import": 1, "allow_import": 1,
"allow_rename": 1,
"creation": "2013-01-23 19:57:17", "creation": "2013-01-23 19:57:17",
"description": "Track separate Income and Expense for product verticals or divisions.", "description": "Track separate Income and Expense for product verticals or divisions.",
"doctype": "DocType", "doctype": "DocType",
@ -126,7 +125,7 @@
"idx": 1, "idx": 1,
"is_tree": 1, "is_tree": 1,
"links": [], "links": [],
"modified": "2020-03-18 17:59:04.321637", "modified": "2020-04-29 16:09:30.025214",
"modified_by": "Administrator", "modified_by": "Administrator",
"module": "Accounts", "module": "Accounts",
"name": "Cost Center", "name": "Cost Center",

View File

@ -817,48 +817,37 @@ def create_payment_gateway_account(gateway):
pass pass
@frappe.whitelist() @frappe.whitelist()
def update_number_field(doctype_name, name, field_name, number_value, company): def update_cost_center(docname, cost_center_name, cost_center_number, company):
''' '''
doctype_name = Name of the DocType
name = Docname being referred
field_name = Name of the field thats holding the 'number' attribute
number_value = Numeric value entered in field_name
Stores the number entered in the dialog to the DocType's field.
Renames the document by adding the number as a prefix to the current name and updates Renames the document by adding the number as a prefix to the current name and updates
all transaction where it was present. all transaction where it was present.
''' '''
doc_title = frappe.db.get_value(doctype_name, name, frappe.scrub(doctype_name)+"_name") validate_field_number("Cost Center", docname, cost_center_number, company, "cost_center_number")
validate_field_number(doctype_name, name, number_value, company, field_name) if cost_center_number:
frappe.db.set_value("Cost Center", docname, "cost_center_number", cost_center_number.strip())
else:
frappe.db.set_value("Cost Center", docname, "cost_center_number", "")
frappe.db.set_value(doctype_name, name, field_name, number_value) frappe.db.set_value("Cost Center", docname, "cost_center_name", cost_center_name.strip())
if doc_title[0].isdigit(): new_name = get_autoname_with_number(cost_center_number, cost_center_name, docname, company)
separator = " - " if " - " in doc_title else " " if docname != new_name:
doc_title = doc_title.split(separator, 1)[1] frappe.rename_doc("Cost Center", docname, new_name, force=1)
frappe.db.set_value(doctype_name, name, frappe.scrub(doctype_name)+"_name", doc_title)
new_name = get_autoname_with_number(number_value, doc_title, name, company)
if name != new_name:
frappe.rename_doc(doctype_name, name, new_name)
return new_name return new_name
def validate_field_number(doctype_name, name, number_value, company, field_name): def validate_field_number(doctype_name, docname, number_value, company, field_name):
''' Validate if the number entered isn't already assigned to some other document. ''' ''' Validate if the number entered isn't already assigned to some other document. '''
if number_value: if number_value:
filters = {field_name: number_value, "name": ["!=", docname]}
if company: if company:
doctype_with_same_number = frappe.db.get_value(doctype_name, filters["company"] = company
{field_name: number_value, "company": company, "name": ["!=", name]})
else: doctype_with_same_number = frappe.db.get_value(doctype_name, filters)
doctype_with_same_number = frappe.db.get_value(doctype_name,
{field_name: number_value, "name": ["!=", name]})
if doctype_with_same_number: if doctype_with_same_number:
frappe.throw(_("{0} Number {1} already used in account {2}") frappe.throw(_("{0} Number {1} is already used in {2} {3}")
.format(doctype_name, number_value, doctype_with_same_number)) .format(doctype_name, number_value, doctype_name.lower(), doctype_with_same_number))
def get_autoname_with_number(number_value, doc_title, name, company): def get_autoname_with_number(number_value, doc_title, name, company):
''' append title with prefix as number and suffix as company's abbreviation separated by '-' ''' ''' append title with prefix as number and suffix as company's abbreviation separated by '-' '''