Allow user to change page_name in Item and Item Group #2397
diff --git a/erpnext/setup/doctype/item_group/item_group.js b/erpnext/setup/doctype/item_group/item_group.js
index 717c7d6..67e4e99 100644
--- a/erpnext/setup/doctype/item_group/item_group.js
+++ b/erpnext/setup/doctype/item_group/item_group.js
@@ -1,30 +1,36 @@
// Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
// License: GNU General Public License v3. See license.txt
-cur_frm.list_route = "Sales Browser/Item Group";
+frappe.ui.form.on("Item Group", {
+ onload: function(frm) {
+ frm.list_route = "Sales Browser/Item Group";
-cur_frm.cscript.refresh = function(doc, cdt, cdn) {
- cur_frm.cscript.set_root_readonly(doc);
- cur_frm.add_custom_button(__("Item Group Tree"), function() {
- frappe.set_route("Sales Browser", "Item Group");
- }, "icon-sitemap")
-}
+ //get query select item group
+ frm.fields_dict['parent_item_group'].get_query = function(doc,cdt,cdn) {
+ return{
+ filters:[
+ ['Item Group', 'is_group', '=', 'Yes'],
+ ['Item Group', 'name', '!=', doc.item_group_name]
+ ]
+ }
+ }
+ },
-cur_frm.cscript.set_root_readonly = function(doc) {
- // read-only for root item group
- cur_frm.set_intro("");
- if(!doc.parent_item_group) {
- cur_frm.set_read_only();
- cur_frm.set_intro(__("This is a root item group and cannot be edited."), true);
- }
-}
+ refresh: function(frm) {
+ frm.trigger("set_root_readonly");
+ frm.add_custom_button(__("Item Group Tree"), function() {
+ frappe.set_route("Sales Browser", "Item Group");
+ }, "icon-sitemap");
+ },
-//get query select item group
-cur_frm.fields_dict['parent_item_group'].get_query = function(doc,cdt,cdn) {
- return{
- filters:[
- ['Item Group', 'is_group', '=', 'Yes'],
- ['Item Group', 'name', '!=', doc.item_group_name]
- ]
- }
-}
+ set_root_readonly: function(frm) {
+ // read-only for root item group
+ frm.set_intro("");
+ if(!frm.doc.parent_item_group) {
+ frm.set_read_only();
+ frm.set_intro(__("This is a root item group and cannot be edited."), true);
+ }
+ },
+
+ page_name: frappe.utils.warn_page_name_change
+});
diff --git a/erpnext/stock/doctype/item/item.js b/erpnext/stock/doctype/item/item.js
index 33b1720..df15891 100644
--- a/erpnext/stock/doctype/item/item.js
+++ b/erpnext/stock/doctype/item/item.js
@@ -3,200 +3,207 @@
frappe.provide("erpnext.item");
-frappe.ui.form.on("Item", "refresh", function(frm) {
- if(frm.doc.is_stock_item) {
- frm.add_custom_button(__("Show Balance"), function() {
- frappe.route_options = {
- "item_code": frm.doc.name
- }
- frappe.set_route("query-report", "Stock Balance");
- });
- }
-})
-
-cur_frm.cscript.refresh = function(doc) {
- // make sensitive fields(has_serial_no, is_stock_item, valuation_method)
- // read only if any stock ledger entry exists
-
- cur_frm.cscript.make_dashboard();
-
- if (cur_frm.doc.has_variants) {
- cur_frm.set_intro(__("This Item is a Template and cannot be used in transactions. Item attributes will be copied over into the variants unless 'No Copy' is set"), true);
- cur_frm.add_custom_button(__("Show Variants"), function() {
- frappe.set_route("List", "Item", {"variant_of": cur_frm.doc.name});
- }, "icon-list", "btn-default");
- }
- if (cur_frm.doc.variant_of) {
- cur_frm.set_intro(__("This Item is a Variant of {0} (Template). Attributes will be copied over from the template unless 'No Copy' is set", [cur_frm.doc.variant_of]), true);
- }
-
- if (frappe.defaults.get_default("item_naming_by")!="Naming Series") {
- cur_frm.toggle_display("naming_series", false);
- } else {
- erpnext.toggle_naming_series();
- }
-
-
- cur_frm.cscript.edit_prices_button();
-
- if (!doc.__islocal && doc.is_stock_item == 'Yes') {
- cur_frm.toggle_enable(['has_serial_no', 'is_stock_item', 'valuation_method', 'has_batch_no'],
- (doc.__onload && doc.__onload.sle_exists=="exists") ? false : true);
- }
-
- erpnext.item.toggle_reqd(cur_frm);
-}
-
-erpnext.item.toggle_reqd = function(frm) {
- frm.toggle_reqd("default_warehouse", frm.doc.is_stock_item==="Yes");
-};
-
-frappe.ui.form.on("Item", "onload", function(frm) {
- var df = frappe.meta.get_docfield("Item Variant", "item_attribute_value");
- df.on_make = function(field) {
- field.$input.autocomplete({
- minLength: 0,
- minChars: 0,
- source: function(request, response) {
- frappe.call({
- method:"frappe.client.get_list",
- args:{
- doctype:"Item Attribute Value",
- filters: [
- ["parent","=", field.doc.item_attribute],
- ["attribute_value", "like", request.term + "%"]
- ],
- fields: ["attribute_value"]
- },
- callback: function(r) {
- response($.map(r.message, function(d) { return d.attribute_value; }));
+frappe.ui.form.on("Item", {
+ onload: function(frm) {
+ var df = frappe.meta.get_docfield("Item Variant", "item_attribute_value");
+ df.on_make = function(field) {
+ field.$input.autocomplete({
+ minLength: 0,
+ minChars: 0,
+ source: function(request, response) {
+ frappe.call({
+ method:"frappe.client.get_list",
+ args:{
+ doctype:"Item Attribute Value",
+ filters: [
+ ["parent","=", field.doc.item_attribute],
+ ["attribute_value", "like", request.term + "%"]
+ ],
+ fields: ["attribute_value"]
+ },
+ callback: function(r) {
+ response($.map(r.message, function(d) { return d.attribute_value; }));
+ }
+ });
+ },
+ select: function(event, ui) {
+ field.$input.val(ui.item.value);
+ field.$input.trigger("change");
+ },
+ focus: function( event, ui ) {
+ if(ui.item.action) {
+ return false;
}
- });
- },
- select: function(event, ui) {
- field.$input.val(ui.item.value);
- field.$input.trigger("change");
- },
- focus: function( event, ui ) {
- if(ui.item.action) {
- return false;
+ },
+ });
+ }
+
+ erpnext.item.setup_queries(frm);
+ },
+
+ refresh: function(frm) {
+ if(frm.doc.is_stock_item) {
+ frm.add_custom_button(__("Show Balance"), function() {
+ frappe.route_options = {
+ "item_code": frm.doc.name
}
- },
+ frappe.set_route("query-report", "Stock Balance");
+ });
+ }
+
+ // make sensitive fields(has_serial_no, is_stock_item, valuation_method)
+ // read only if any stock ledger entry exists
+ erpnext.item.make_dashboard(frm);
+
+ if (frm.doc.has_variants) {
+ frm.set_intro(__("This Item is a Template and cannot be used in transactions. Item attributes will be copied over into the variants unless 'No Copy' is set"), true);
+ frm.add_custom_button(__("Show Variants"), function() {
+ frappe.set_route("List", "Item", {"variant_of": frm.doc.name});
+ }, "icon-list", "btn-default");
+ }
+ if (frm.doc.variant_of) {
+ frm.set_intro(__("This Item is a Variant of {0} (Template). Attributes will be copied over from the template unless 'No Copy' is set", [frm.doc.variant_of]), true);
+ }
+
+ if (frappe.defaults.get_default("item_naming_by")!="Naming Series") {
+ frm.toggle_display("naming_series", false);
+ } else {
+ erpnext.toggle_naming_series();
+ }
+
+ erpnext.item.edit_prices_button(frm);
+
+ if (!frm.doc.__islocal && frm.doc.is_stock_item == 'Yes') {
+ frm.toggle_enable(['has_serial_no', 'is_stock_item', 'valuation_method', 'has_batch_no'],
+ (frm.doc.__onload && frm.doc.__onload.sle_exists=="exists") ? false : true);
+ }
+
+ erpnext.item.toggle_reqd(frm);
+ },
+
+ validate: function(frm){
+ erpnext.item.weight_to_validate(frm);
+ },
+
+ image: function(frm) {
+ refresh_field("image_view");
+ },
+
+ page_name: frappe.utils.warn_page_name_change
+
+ item_code: function(frm) {
+ if(!frm.doc.item_name)
+ frm.set_value("item_name", frm.doc.item_code);
+ if(!frm.doc.description)
+ frm.set_value("description", frm.doc.item_code);
+ },
+
+ tax_type: function(frm, cdt, cdn){
+ var d = locals[cdt][cdn];
+ return get_server_fields('get_tax_rate', d.tax_type, 'taxes', doc, cdt, cdn, 1);
+ },
+
+ copy_from_item_group: function(frm) {
+ return frm.call({
+ doc: frm.doc,
+ method: "copy_specification_from_item_group"
});
- }
+ },
});
-cur_frm.cscript.make_dashboard = function() {
- cur_frm.dashboard.reset();
- if(cur_frm.doc.__islocal)
- return;
-}
-
-cur_frm.cscript.edit_prices_button = function() {
- cur_frm.add_custom_button(__("Add / Edit Prices"), function() {
- frappe.set_route("Report", "Item Price", {"item_code": cur_frm.doc.name});
- }, "icon-money", "btn-default");
-}
-
-cur_frm.cscript.item_code = function(doc) {
- if(!doc.item_name)
- cur_frm.set_value("item_name", doc.item_code);
- if(!doc.description)
- cur_frm.set_value("description", doc.item_code);
-}
-
-// Expense Account
-// ---------------------------------
-cur_frm.fields_dict['expense_account'].get_query = function(doc) {
- return {
- filters: {
- "report_type": "Profit and Loss",
- "group_or_ledger": "Ledger"
+$.extend(erpnext.item, {
+ setup_queries: function(frm) {
+ // Expense Account
+ // ---------------------------------
+ frm.fields_dict['expense_account'].get_query = function(doc) {
+ return {
+ filters: {
+ "report_type": "Profit and Loss",
+ "group_or_ledger": "Ledger"
+ }
+ }
}
- }
-}
-// Income Account
-// --------------------------------
-cur_frm.fields_dict['income_account'].get_query = function(doc) {
- return {
- filters: {
- "report_type": "Profit and Loss",
- 'group_or_ledger': "Ledger",
- 'account_type': "Income Account"
+ // Income Account
+ // --------------------------------
+ frm.fields_dict['income_account'].get_query = function(doc) {
+ return {
+ filters: {
+ "report_type": "Profit and Loss",
+ 'group_or_ledger': "Ledger",
+ 'account_type': "Income Account"
+ }
+ }
}
- }
-}
-// Purchase Cost Center
-// -----------------------------
-cur_frm.fields_dict['buying_cost_center'].get_query = function(doc) {
- return {
- filters:{ 'group_or_ledger': "Ledger" }
- }
-}
+ // Purchase Cost Center
+ // -----------------------------
+ frm.fields_dict['buying_cost_center'].get_query = function(doc) {
+ return {
+ filters:{ 'group_or_ledger': "Ledger" }
+ }
+ }
-// Sales Cost Center
-// -----------------------------
-cur_frm.fields_dict['selling_cost_center'].get_query = function(doc) {
- return {
- filters:{ 'group_or_ledger': "Ledger" }
- }
-}
+ // Sales Cost Center
+ // -----------------------------
+ frm.fields_dict['selling_cost_center'].get_query = function(doc) {
+ return {
+ filters:{ 'group_or_ledger': "Ledger" }
+ }
+ }
-cur_frm.fields_dict['taxes'].grid.get_field("tax_type").get_query = function(doc, cdt, cdn) {
- return {
- filters: [
- ['Account', 'account_type', 'in',
- 'Tax, Chargeable, Income Account, Expense Account'],
- ['Account', 'docstatus', '!=', 2]
- ]
- }
-}
+ frm.fields_dict['taxes'].grid.get_field("tax_type").get_query = function(doc, cdt, cdn) {
+ return {
+ filters: [
+ ['Account', 'account_type', 'in',
+ 'Tax, Chargeable, Income Account, Expense Account'],
+ ['Account', 'docstatus', '!=', 2]
+ ]
+ }
+ }
-cur_frm.cscript.tax_type = function(doc, cdt, cdn){
- var d = locals[cdt][cdn];
- return get_server_fields('get_tax_rate', d.tax_type, 'taxes', doc, cdt, cdn, 1);
-}
+ frm.fields_dict['item_group'].get_query = function(doc,cdt,cdn) {
+ return {
+ filters: [
+ ['Item Group', 'docstatus', '!=', 2]
+ ]
+ }
+ }
-cur_frm.fields_dict['item_group'].get_query = function(doc,cdt,cdn) {
- return {
- filters: [
- ['Item Group', 'docstatus', '!=', 2]
- ]
- }
-}
+ frm.fields_dict.customer_items.grid.get_field("customer_name").get_query = function(doc, cdt, cdn) {
+ return { query: "erpnext.controllers.queries.customer_query" }
+ }
-// Quotation to validation - either customer or lead mandatory
-cur_frm.cscript.weight_to_validate = function(doc, cdt, cdn){
- if((doc.nett_weight || doc.gross_weight) && !doc.weight_uom) {
- msgprint(__('Weight is mentioned,\nPlease mention "Weight UOM" too'));
- validated = 0;
- }
-}
+ frm.fields_dict.supplier_items.grid.get_field("supplier").get_query = function(doc, cdt, cdn) {
+ return { query: "erpnext.controllers.queries.supplier_query" }
+ }
-cur_frm.cscript.validate = function(doc, cdt, cdn){
- cur_frm.cscript.weight_to_validate(doc, cdt, cdn);
-}
+ },
-cur_frm.fields_dict.customer_items.grid.get_field("customer_name").get_query = function(doc, cdt, cdn) {
- return { query: "erpnext.controllers.queries.customer_query" }
-}
+ toggle_reqd: function(frm) {
+ frm.toggle_reqd("default_warehouse", frm.doc.is_stock_item==="Yes");
+ },
-cur_frm.fields_dict.supplier_items.grid.get_field("supplier").get_query = function(doc, cdt, cdn) {
- return { query: "erpnext.controllers.queries.supplier_query" }
-}
+ make_dashboard: function(frm) {
+ frm.dashboard.reset();
+ if(frm.doc.__islocal)
+ return;
+ },
-cur_frm.cscript.copy_from_item_group = function(doc) {
- return cur_frm.call({
- doc: doc,
- method: "copy_specification_from_item_group"
- });
-}
+ edit_prices_button: function(frm) {
+ frm.add_custom_button(__("Add / Edit Prices"), function() {
+ frappe.set_route("Report", "Item Price", {"item_code": frm.doc.name});
+ }, "icon-money", "btn-default");
+ },
-cur_frm.cscript.image = function() {
- refresh_field("image_view");
-}
+ weight_to_validate: function(frm){
+ if((frm.doc.nett_weight || frm.doc.gross_weight) && !frm.doc.weight_uom) {
+ msgprint(__('Weight is mentioned,\nPlease mention "Weight UOM" too'));
+ validated = 0;
+ }
+ },
+
+});
diff --git a/erpnext/stock/doctype/item/item.json b/erpnext/stock/doctype/item/item.json
index 70826fb..28bfb5a 100644
--- a/erpnext/stock/doctype/item/item.json
+++ b/erpnext/stock/doctype/item/item.json
@@ -772,7 +772,7 @@
"label": "Page Name",
"no_copy": 1,
"permlevel": 0,
- "read_only": 1
+ "read_only": 0
},
{
"depends_on": "show_in_website",
@@ -876,7 +876,7 @@
"icon": "icon-tag",
"idx": 1,
"max_attachments": 1,
- "modified": "2015-02-24 05:19:07.382483",
+ "modified": "2015-02-25 02:46:14.483577",
"modified_by": "Administrator",
"module": "Stock",
"name": "Item",