From a9ba7343c4a4a19ac68cb583796582a9eaaeb128 Mon Sep 17 00:00:00 2001 From: Saurabh Date: Tue, 21 Jun 2016 12:33:12 +0530 Subject: [PATCH] [fix] deprecate browser pages for accounts, cost_center, sales , bom, item group --- .../doctype/account/account_treeview.js | 2 +- .../cost_center/cost_center_treeview.js | 2 +- .../accounts/page/accounts_browser/README.md | 1 - .../page/accounts_browser/__init__.py | 1 - .../page/accounts_browser/accounts_browser.js | 334 ------------------ .../accounts_browser/accounts_browser.json | 22 -- .../page/accounts_browser/accounts_browser.py | 57 --- erpnext/accounts/utils.py | 51 ++- erpnext/manufacturing/doctype/bom/bom.py | 11 + .../manufacturing/doctype/bom/bom_treeview.js | 2 +- .../page/bom_browser/__init__.py | 0 .../page/bom_browser/bom_browser.js | 89 ----- .../page/bom_browser/bom_browser.json | 21 -- .../page/bom_browser/bom_browser.py | 16 - erpnext/selling/page/sales_browser/README.md | 1 - .../selling/page/sales_browser/__init__.py | 1 - .../page/sales_browser/sales_browser.json | 37 -- .../page/sales_browser/sales_browser.py | 37 -- erpnext/selling/page/sales_browser/tree.js | 166 --------- 19 files changed, 64 insertions(+), 787 deletions(-) delete mode 100644 erpnext/accounts/page/accounts_browser/README.md delete mode 100644 erpnext/accounts/page/accounts_browser/__init__.py delete mode 100644 erpnext/accounts/page/accounts_browser/accounts_browser.js delete mode 100644 erpnext/accounts/page/accounts_browser/accounts_browser.json delete mode 100644 erpnext/accounts/page/accounts_browser/accounts_browser.py delete mode 100644 erpnext/manufacturing/page/bom_browser/__init__.py delete mode 100644 erpnext/manufacturing/page/bom_browser/bom_browser.js delete mode 100644 erpnext/manufacturing/page/bom_browser/bom_browser.json delete mode 100644 erpnext/manufacturing/page/bom_browser/bom_browser.py delete mode 100644 erpnext/selling/page/sales_browser/README.md delete mode 100644 erpnext/selling/page/sales_browser/__init__.py delete mode 100644 erpnext/selling/page/sales_browser/sales_browser.json delete mode 100644 erpnext/selling/page/sales_browser/sales_browser.py delete mode 100644 erpnext/selling/page/sales_browser/tree.js diff --git a/erpnext/accounts/doctype/account/account_treeview.js b/erpnext/accounts/doctype/account/account_treeview.js index ce5eb8fa7c4..3ee1c42fcb2 100644 --- a/erpnext/accounts/doctype/account/account_treeview.js +++ b/erpnext/accounts/doctype/account/account_treeview.js @@ -10,7 +10,7 @@ frappe.treeview_settings["Account"] = { default: frappe.defaults.get_default('company') ? frappe.defaults.get_default('company'): "" }], root_label: "Accounts", - get_tree_nodes: 'erpnext.accounts.page.accounts_browser.accounts_browser.get_children', + get_tree_nodes: 'erpnext.accounts.utils.get_children', add_tree_node: 'erpnext.accounts.utils.add_ac', menu_items:[ { diff --git a/erpnext/accounts/doctype/cost_center/cost_center_treeview.js b/erpnext/accounts/doctype/cost_center/cost_center_treeview.js index eddf048446c..3ca5232e3f1 100644 --- a/erpnext/accounts/doctype/cost_center/cost_center_treeview.js +++ b/erpnext/accounts/doctype/cost_center/cost_center_treeview.js @@ -9,7 +9,7 @@ frappe.treeview_settings["Cost Center"] = { default: frappe.defaults.get_default('company') ? frappe.defaults.get_default('company'): "" }], root_label: "Cost Centers", - get_tree_nodes: 'erpnext.accounts.page.accounts_browser.accounts_browser.get_children', + get_tree_nodes: 'erpnext.accounts.utils.get_children', add_tree_node: 'erpnext.accounts.utils.add_cc', menu_items:[ { diff --git a/erpnext/accounts/page/accounts_browser/README.md b/erpnext/accounts/page/accounts_browser/README.md deleted file mode 100644 index b8795613fcb..00000000000 --- a/erpnext/accounts/page/accounts_browser/README.md +++ /dev/null @@ -1 +0,0 @@ -Tree view browser for Chart of Accounts and Chart of Cost Centers \ No newline at end of file diff --git a/erpnext/accounts/page/accounts_browser/__init__.py b/erpnext/accounts/page/accounts_browser/__init__.py deleted file mode 100644 index baffc488252..00000000000 --- a/erpnext/accounts/page/accounts_browser/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from __future__ import unicode_literals diff --git a/erpnext/accounts/page/accounts_browser/accounts_browser.js b/erpnext/accounts/page/accounts_browser/accounts_browser.js deleted file mode 100644 index ec906f87988..00000000000 --- a/erpnext/accounts/page/accounts_browser/accounts_browser.js +++ /dev/null @@ -1,334 +0,0 @@ -// Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors -// License: GNU General Public License v3. See license.txt - -// tree of chart of accounts / cost centers -// multiple companies -// add node -// edit node -// see ledger - -frappe.pages["Accounts Browser"].on_page_load = function(wrapper){ - frappe.ui.make_app_page({ - parent: wrapper, - single_column: true - }) - - frappe.breadcrumbs.add("Accounts"); - - var main = wrapper.page.main, - chart_area = $("
") - .css({"margin-bottom": "15px", "min-height": "200px"}) - .appendTo(main), - help_area = $('
'+ - '

'+__('Quick Help')+'

'+ - '
    '+ - '
  1. '+__('To add child nodes, explore tree and click on the node under which you want to add more nodes.')+'
  2. '+ - '
  3. '+ - __('Accounting Entries can be made against leaf nodes. Entries against Groups are not allowed.')+ - '
  4. '+ - '
  5. '+__('Please do NOT create Accounts for Customers and Suppliers. They are created directly from the Customer / Supplier masters.')+'
  6. '+ - '
  7. '+ - ''+__('To create a Bank Account')+': '+ - __('Go to the appropriate group (usually Application of Funds > Current Assets > Bank Accounts and create a new Account (by clicking on Add Child) of type "Bank"')+ - '
  8. '+ - '
  9. '+ - ''+__('To create a Tax Account') +': '+ - __('Go to the appropriate group (usually Source of Funds > Current Liabilities > Taxes and Duties and create a new Account (by clicking on Add Child) of type "Tax" and do mention the Tax rate.')+ - '
  10. '+ - '
'+ - '

'+__('Please setup your chart of accounts before you start Accounting Entries')+'

').appendTo(main); - - if (frappe.boot.user.can_create.indexOf("Company") !== -1) { - wrapper.page.add_menu_item(__('New Company'), function() { newdoc('Company'); }, true); - } - - wrapper.page.add_menu_item(__('Refresh'), function() { - wrapper.$company_select.change(); - }); - - wrapper.page.set_primary_action(__('New'), function() { - erpnext.account_chart && erpnext.account_chart.make_new(); - }, "octicon octicon-plus"); - - var company_list = $.map(locals[':Company'], function(c) { return c.name; }).sort(); - - // company-select - wrapper.$company_select = wrapper.page.add_select("Company", company_list) - .change(function() { - var ctype = frappe.get_route()[1] || 'Account'; - erpnext.account_chart = new erpnext.AccountsChart(ctype, $(this).val(), - chart_area.get(0), wrapper.page); - }) - - if(frappe.defaults.get_default('company')) { - wrapper.$company_select.val(frappe.defaults.get_default('company')); - } - wrapper.$company_select.change(); -} - -frappe.pages["Accounts Browser"].on_page_show = function(wrapper){ - // set route - var ctype = frappe.get_route()[1] || 'Account'; - - if(frappe.route_options) { - if(frappe.route_options.company) { - wrapper.$company_select.val(frappe.route_options.company).change(); - } - frappe.route_options = null; - } else if(erpnext.account_chart && erpnext.account_chart.ctype != ctype) { - wrapper.$company_select.change(); - } - -} - -erpnext.AccountsChart = Class.extend({ - init: function(ctype, company, wrapper, page) { - $(wrapper).empty(); - var me = this; - me.ctype = ctype; - me.can_create = frappe.model.can_create(this.ctype); - me.can_delete = frappe.model.can_delete(this.ctype); - me.can_write = frappe.model.can_write(this.ctype); - me.page = page; - me.set_title(); - - // __("Accounts"), __("Cost Centers") - - me.company = company; - this.tree = new frappe.ui.Tree({ - parent: $(wrapper), - label: ctype==="Account" ? "Accounts" : "Cost Centers", - args: {ctype: ctype, comp: company}, - method: 'erpnext.accounts.page.accounts_browser.accounts_browser.get_children', - click: function(link) { - // bold - $('.bold').removeClass('bold'); // deselect - $(link).parent().find('.balance-area:first').addClass('bold'); // select - - }, - toolbar: [ - { toggle_btn: true }, - { - label: __("Open"), - condition: function(node) { return !node.root }, - click: function(node, btn) { - frappe.set_route("Form", me.ctype, node.label); - } - }, - { - condition: function(node) { return node.expandable; }, - label: __("Add Child"), - click: function() { - me.make_new() - }, - btnClass: "hidden-xs" - }, - { - condition: function(node) { - return !node.root && me.ctype === 'Account' - && frappe.boot.user.can_read.indexOf("GL Entry") !== -1 - }, - label: __("View Ledger"), - click: function(node, btn) { - frappe.route_options = { - "account": node.label, - "from_date": sys_defaults.year_start_date, - "to_date": sys_defaults.year_end_date, - "company": me.company - }; - frappe.set_route("query-report", "General Ledger"); - }, - btnClass: "hidden-xs" - }, - { - condition: function(node) { return !node.root && me.can_write }, - label: __("Rename"), - click: function(node) { - frappe.model.rename_doc(me.ctype, node.label, function(new_name) { - node.reload_parent(); - }); - }, - btnClass: "hidden-xs" - }, - { - condition: function(node) { return !node.root && me.can_delete }, - label: __("Delete"), - click: function(node) { - frappe.model.delete_doc(me.ctype, node.label, function() { - node.parent.remove(); - }); - }, - btnClass: "hidden-xs" - } - ], - onrender: function(node) { - var dr_or_cr = node.data.balance < 0 ? "Cr" : "Dr"; - if (me.ctype == 'Account' && node.data && node.data.balance!==undefined) { - $('' - + (node.data.balance_in_account_currency ? - (format_currency(Math.abs(node.data.balance_in_account_currency), - node.data.account_currency) + " / ") : "") - + format_currency(Math.abs(node.data.balance), node.data.company_currency) - + " " + dr_or_cr - + '').insertBefore(node.$ul); - } - } - }); - }, - set_title: function(val) { - var chart_str = this.ctype=="Account" ? __("Chart of Accounts") : __("Chart of Cost Centers"); - if(val) { - this.page.set_title(chart_str + " - " + cstr(val)); - } else { - this.page.set_title(chart_str); - } - }, - - make_new: function() { - if(this.ctype=='Account') { - this.new_account(); - } else { - this.new_cost_center(); - } - }, - - new_account: function() { - var me = this; - - var node = me.tree.get_selected_node(); - - if(!(node && node.expandable)) { - frappe.msgprint(__("Select a group node first.")); - return; - } - - // the dialog - var d = new frappe.ui.Dialog({ - title:__('New Account'), - fields: [ - {fieldtype:'Data', fieldname:'account_name', label:__('New Account Name'), reqd:true, - description: __("Name of new Account. Note: Please don't create accounts for Customers and Suppliers")}, - {fieldtype:'Check', fieldname:'is_group', label:__('Is Group'), - description: __('Further accounts can be made under Groups, but entries can be made against non-Groups')}, - {fieldtype:'Select', fieldname:'root_type', label:__('Root Type'), - options: ['Asset', 'Liability', 'Equity', 'Income', 'Expense'].join('\n'), - }, - {fieldtype:'Select', fieldname:'account_type', label:__('Account Type'), - options: ['', 'Bank', 'Cash', 'Warehouse', 'Tax', 'Chargeable'].join('\n'), - description: __("Optional. This setting will be used to filter in various transactions.") }, - {fieldtype:'Float', fieldname:'tax_rate', label:__('Tax Rate')}, - {fieldtype:'Link', fieldname:'warehouse', label:__('Warehouse'), options:"Warehouse"}, - {fieldtype:'Link', fieldname:'account_currency', label:__('Currency'), options:"Currency", - description: __("Optional. Sets company's default currency, if not specified.")} - ] - }) - - var fd = d.fields_dict; - - // account type if ledger - $(fd.is_group.input).change(function() { - if($(this).prop("checked")) { - $(fd.account_type.wrapper).toggle(false); - $(fd.tax_rate.wrapper).toggle(false); - $(fd.warehouse.wrapper).toggle(false); - } else { - $(fd.account_type.wrapper).toggle(node.root ? false : true); - fd.account_type.$input.trigger("change"); - } - }); - - // tax rate if tax - $(fd.account_type.input).change(function() { - $(fd.tax_rate.wrapper).toggle(fd.account_type.get_value()==='Tax'); - $(fd.warehouse.wrapper).toggle(fd.account_type.get_value()==='Warehouse'); - }) - - // create - d.set_primary_action(__("Create New"), function() { - var btn = this; - var v = d.get_values(); - if(!v) return; - - if(v.account_type==="Warehouse" && !v.warehouse) { - msgprint(__("Warehouse is required")); - return; - } - - var node = me.tree.get_selected_node(); - v.parent_account = node.label; - v.company = me.company; - - if(node.root) { - v.is_root = 1; - v.parent_account = null; - } else { - v.is_root = 0; - v.root_type = null; - } - - return frappe.call({ - args: v, - method: 'erpnext.accounts.utils.add_ac', - callback: function(r) { - d.hide(); - if(node.expanded) { - node.toggle_node(); - } - node.load(); - } - }); - }); - - // show - d.on_page_show = function() { - $(fd.is_group.input).change(); - $(fd.account_type.input).change(); - } - - $(fd.is_group.input).prop("checked", false).change(); - - // In case of root, show root type and hide account_type, is_group - $(fd.root_type.wrapper).toggle(node.root); - $(fd.is_group.wrapper).toggle(!node.root); - - d.show(); - }, - - new_cost_center: function(){ - var me = this; - // the dialog - var d = new frappe.ui.Dialog({ - title:__('New Cost Center'), - fields: [ - {fieldtype:'Data', fieldname:'cost_center_name', label:__('New Cost Center Name'), reqd:true}, - {fieldtype:'Check', fieldname:'is_group', label:__('Is Group'), - description:__('Further cost centers can be made under Groups but entries can be made against non-Groups')}, - {fieldtype:'Button', fieldname:'create_new', label:__('Create New') } - ] - }); - - // create - $(d.fields_dict.create_new.input).click(function() { - var v = d.get_values(); - if(!v) return; - - var node = me.tree.get_selected_node(); - - v.parent_cost_center = node.label; - v.company = me.company; - - return frappe.call({ - args: v, - method: 'erpnext.accounts.utils.add_cc', - callback: function(r) { - d.hide(); - if(node.expanded) { - node.toggle_node(); - } - node.load(); - } - }); - }); - d.show(); - } -}); diff --git a/erpnext/accounts/page/accounts_browser/accounts_browser.json b/erpnext/accounts/page/accounts_browser/accounts_browser.json deleted file mode 100644 index f0fe2e82885..00000000000 --- a/erpnext/accounts/page/accounts_browser/accounts_browser.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "creation": "2012-06-14 15:07:28.000000", - "docstatus": 0, - "doctype": "Page", - "icon": "icon-sitemap", - "idx": 1, - "modified": "2013-07-11 14:39:42.000000", - "modified_by": "Administrator", - "module": "Accounts", - "name": "accounts-browser", - "owner": "Administrator", - "page_name": "Accounts Browser", - "roles": [ - { - "role": "Accounts User" - }, - { - "role": "Accounts Manager" - } - ], - "standard": "Yes" -} diff --git a/erpnext/accounts/page/accounts_browser/accounts_browser.py b/erpnext/accounts/page/accounts_browser/accounts_browser.py deleted file mode 100644 index d96b21355fc..00000000000 --- a/erpnext/accounts/page/accounts_browser/accounts_browser.py +++ /dev/null @@ -1,57 +0,0 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors -# License: GNU General Public License v3. See license.txt - -from __future__ import unicode_literals -import frappe -import frappe.defaults -from frappe.utils import flt -from erpnext.accounts.utils import get_balance_on -from erpnext.accounts.report.financial_statements import sort_root_accounts - -@frappe.whitelist() -def get_companies(): - """get a list of companies based on permission""" - return [d.name for d in frappe.get_list("Company", fields=["name"], - order_by="name")] - -@frappe.whitelist() -def get_children(): - args = frappe.local.form_dict - ctype, company = args['ctype'], args['comp'] - fieldname = frappe.db.escape(ctype.lower().replace(' ','_')) - doctype = frappe.db.escape(ctype) - - # root - if args['parent'] in ("Accounts", "Cost Centers"): - fields = ", root_type, report_type, account_currency" if ctype=="Account" else "" - acc = frappe.db.sql(""" select - name as value, is_group as expandable {fields} - from `tab{doctype}` - where ifnull(`parent_{fieldname}`,'') = '' - and `company` = %s and docstatus<2 - order by name""".format(fields=fields, fieldname = fieldname, doctype=doctype), - company, as_dict=1) - - if args["parent"]=="Accounts": - sort_root_accounts(acc) - else: - # other - fields = ", account_currency" if ctype=="Account" else "" - acc = frappe.db.sql("""select - name as value, is_group as expandable, parent_{fieldname} as parent {fields} - from `tab{doctype}` - where ifnull(`parent_{fieldname}`,'') = %s - and docstatus<2 - order by name""".format(fields=fields, fieldname=fieldname, doctype=doctype), - args['parent'], as_dict=1) - - if ctype == 'Account': - company_currency = frappe.db.get_value("Company", company, "default_currency") - for each in acc: - each["company_currency"] = company_currency - each["balance"] = flt(get_balance_on(each.get("value"), in_account_currency=False)) - - if each.account_currency != company_currency: - each["balance_in_account_currency"] = flt(get_balance_on(each.get("value"))) - - return acc diff --git a/erpnext/accounts/utils.py b/erpnext/accounts/utils.py index 06c15d7d962..78e07619b6e 100644 --- a/erpnext/accounts/utils.py +++ b/erpnext/accounts/utils.py @@ -9,7 +9,8 @@ from frappe import throw, _ from frappe.utils import formatdate # imported to enable erpnext.accounts.utils.get_account_currency -from erpnext.accounts.doctype.account.account import get_account_currency +import frappe.defaults +from erpnext.accounts.report.financial_statements import sort_root_accounts class FiscalYearError(frappe.ValidationError): pass @@ -436,3 +437,51 @@ def get_account_name(account_type=None, root_type=None, is_group=None, account_c "account_currency": account_currency or frappe.defaults.get_defaults().currency, "company": company or frappe.defaults.get_defaults().company }, "name") + +@frappe.whitelist() +def get_companies(): + """get a list of companies based on permission""" + return [d.name for d in frappe.get_list("Company", fields=["name"], + order_by="name")] + +@frappe.whitelist() +def get_children(): + args = frappe.local.form_dict + ctype, company = args['ctype'], args['comp'] + fieldname = frappe.db.escape(ctype.lower().replace(' ','_')) + doctype = frappe.db.escape(ctype) + + # root + if args['parent'] in ("Accounts", "Cost Centers"): + fields = ", root_type, report_type, account_currency" if ctype=="Account" else "" + acc = frappe.db.sql(""" select + name as value, is_group as expandable {fields} + from `tab{doctype}` + where ifnull(`parent_{fieldname}`,'') = '' + and `company` = %s and docstatus<2 + order by name""".format(fields=fields, fieldname = fieldname, doctype=doctype), + company, as_dict=1) + + if args["parent"]=="Accounts": + sort_root_accounts(acc) + else: + # other + fields = ", account_currency" if ctype=="Account" else "" + acc = frappe.db.sql("""select + name as value, is_group as expandable, parent_{fieldname} as parent {fields} + from `tab{doctype}` + where ifnull(`parent_{fieldname}`,'') = %s + and docstatus<2 + order by name""".format(fields=fields, fieldname=fieldname, doctype=doctype), + args['parent'], as_dict=1) + + if ctype == 'Account': + company_currency = frappe.db.get_value("Company", company, "default_currency") + for each in acc: + each["company_currency"] = company_currency + each["balance"] = flt(get_balance_on(each.get("value"), in_account_currency=False)) + + if each.account_currency != company_currency: + each["balance_in_account_currency"] = flt(get_balance_on(each.get("value"))) + + return acc diff --git a/erpnext/manufacturing/doctype/bom/bom.py b/erpnext/manufacturing/doctype/bom/bom.py index 67301411db0..287ee9b2f7f 100644 --- a/erpnext/manufacturing/doctype/bom/bom.py +++ b/erpnext/manufacturing/doctype/bom/bom.py @@ -438,3 +438,14 @@ def validate_bom_no(item, bom_no): if item and not (bom.item.lower() == item.lower() or \ bom.item.lower() == cstr(frappe.db.get_value("Item", item, "variant_of")).lower()): frappe.throw(_("BOM {0} does not belong to Item {1}").format(bom_no, item)) + +@frappe.whitelist() +def get_children(parent=None): + if parent: + return frappe.db.sql("""select item_code, + bom_no as value, qty, + if(ifnull(bom_no, "")!="", 1, 0) as expandable + from `tabBOM Item` + where parent=%s + order by idx + """, parent, as_dict=True) \ No newline at end of file diff --git a/erpnext/manufacturing/doctype/bom/bom_treeview.js b/erpnext/manufacturing/doctype/bom/bom_treeview.js index 68ed4e26293..0404360ee41 100644 --- a/erpnext/manufacturing/doctype/bom/bom_treeview.js +++ b/erpnext/manufacturing/doctype/bom/bom_treeview.js @@ -1,5 +1,5 @@ frappe.treeview_settings["BOM"] = { - get_tree_nodes: 'erpnext.manufacturing.page.bom_browser.bom_browser.get_children', + get_tree_nodes: 'erpnext.manufacturing.doctype.bom.bom.get_children', filters: [ { fieldname: "bom", diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/manufacturing/page/bom_browser/__init__.py deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/erpnext/manufacturing/page/bom_browser/bom_browser.js b/erpnext/manufacturing/page/bom_browser/bom_browser.js deleted file mode 100644 index 3c13905caf1..00000000000 --- a/erpnext/manufacturing/page/bom_browser/bom_browser.js +++ /dev/null @@ -1,89 +0,0 @@ -// Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors -// License: GNU General Public License v3. See license.txt - -frappe.pages['bom-browser'].on_page_load = function(wrapper) { - var page = frappe.ui.make_app_page({ - parent: wrapper, - title: 'BOM Browser', - single_column: true - }); - - page.main.css({ - "min-height": "300px", - "padding-bottom": "25px" - }); - - page.tree_area = $('

'+ - __("Select BOM to start") - +'

').appendTo(page.main); - - frappe.breadcrumbs.add(frappe.breadcrumbs.last_module || "Manufacturing"); - - var make_tree = function() { - erpnext.bom_tree = new erpnext.BOMTree(page.$bom_select.val(), page, page.tree_area); - } - - page.$bom_select = wrapper.page.add_field({fieldname: "bom", - fieldtype:"Link", options: "BOM", label: __("BOM")}).$input - .change(function() { - make_tree(); - }); - - page.set_secondary_action(__('Refresh'), function() { - make_tree(); - }); -} - - -frappe.pages['bom-browser'].on_page_show = function(wrapper){ - // set from route - var bom = null; - if(frappe.get_route()[1]) { - var bom = frappe.get_route().splice(1).join("/"); - } - if(frappe.route_options && frappe.route_options.bom) { - var bom = frappe.route_options.bom; - } - if(bom) { - wrapper.page.$bom_select.val(bom).trigger("change"); - } -}; - -erpnext.BOMTree = Class.extend({ - init: function(root, page, parent) { - $(parent).empty(); - var me = this; - me.page = page; - me.bom = page.$bom_select.val(); - me.can_read = frappe.model.can_read("BOM"); - me.can_create = frappe.boot.user.can_create.indexOf("BOM") !== -1 || - frappe.boot.user.in_create.indexOf("BOM") !== -1; - me.can_write = frappe.model.can_write("BOM"); - me.can_delete = frappe.model.can_delete("BOM"); - this.tree = new frappe.ui.Tree({ - parent: $(parent), - label: me.bom, - args: {parent: me.bom}, - method: 'erpnext.manufacturing.page.bom_browser.bom_browser.get_children', - toolbar: [ - {toggle_btn: true}, - { - label:__("Edit"), - condition: function(node) { - return node.expandable; - }, - click: function(node) { - frappe.set_route("Form", "BOM", node.data.value); - } - } - ], - get_label: function(node) { - if(node.data.qty) { - return node.data.qty + " x " + node.data.item_code; - } else { - return node.data.item_code || node.data.value; - } - } - }); - } -}); diff --git a/erpnext/manufacturing/page/bom_browser/bom_browser.json b/erpnext/manufacturing/page/bom_browser/bom_browser.json deleted file mode 100644 index 5b75463457b..00000000000 --- a/erpnext/manufacturing/page/bom_browser/bom_browser.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "content": null, - "creation": "2015-05-25 02:57:33.472044", - "docstatus": 0, - "doctype": "Page", - "modified": "2015-05-25 02:57:33.472044", - "modified_by": "Administrator", - "module": "Manufacturing", - "name": "bom-browser", - "owner": "Administrator", - "page_name": "bom-browser", - "roles": [ - { - "role": "Manufacturing User" - } - ], - "script": null, - "standard": "Yes", - "style": null, - "title": "BOM Browser" -} \ No newline at end of file diff --git a/erpnext/manufacturing/page/bom_browser/bom_browser.py b/erpnext/manufacturing/page/bom_browser/bom_browser.py deleted file mode 100644 index 3437ab4ae9d..00000000000 --- a/erpnext/manufacturing/page/bom_browser/bom_browser.py +++ /dev/null @@ -1,16 +0,0 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors -# License: GNU General Public License v3. See license.txt - -from __future__ import unicode_literals -import frappe - -@frappe.whitelist() -def get_children(): - parent = frappe.local.form_dict.get('bom') - return frappe.db.sql("""select item_code, - bom_no as value, qty, - if(ifnull(bom_no, "")!="", 1, 0) as expandable - from `tabBOM Item` - where parent=%s - order by idx - """, parent, as_dict=True) diff --git a/erpnext/selling/page/sales_browser/README.md b/erpnext/selling/page/sales_browser/README.md deleted file mode 100644 index d6a20e10e7e..00000000000 --- a/erpnext/selling/page/sales_browser/README.md +++ /dev/null @@ -1 +0,0 @@ -Tree editor for Territory, Customer Group, Item Group, Sales Partner \ No newline at end of file diff --git a/erpnext/selling/page/sales_browser/__init__.py b/erpnext/selling/page/sales_browser/__init__.py deleted file mode 100644 index baffc488252..00000000000 --- a/erpnext/selling/page/sales_browser/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from __future__ import unicode_literals diff --git a/erpnext/selling/page/sales_browser/sales_browser.json b/erpnext/selling/page/sales_browser/sales_browser.json deleted file mode 100644 index 54cac650c51..00000000000 --- a/erpnext/selling/page/sales_browser/sales_browser.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "creation": "2012-06-14 15:07:26.000000", - "docstatus": 0, - "doctype": "Page", - "icon": "icon-sitemap", - "idx": 1, - "modified": "2013-07-11 14:43:56.000000", - "modified_by": "Administrator", - "module": "Selling", - "name": "sales-browser", - "owner": "Administrator", - "page_name": "Sales Browser", - "roles": [ - { - "role": "Sales Master Manager" - }, - { - "role": "Material Master Manager" - }, - { - "role": "Accounts Manager" - }, - { - "role": "Sales Master Manager" - }, - { - "role": "Purchase Manager" - }, - { - "role": "Purchase Master Manager" - }, - { - "role": "Material Manager" - } - ], - "standard": "Yes" -} diff --git a/erpnext/selling/page/sales_browser/sales_browser.py b/erpnext/selling/page/sales_browser/sales_browser.py deleted file mode 100644 index 018ba3b0811..00000000000 --- a/erpnext/selling/page/sales_browser/sales_browser.py +++ /dev/null @@ -1,37 +0,0 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors -# License: GNU General Public License v3. See license.txt - -from __future__ import unicode_literals -import frappe - - -@frappe.whitelist() -def get_children(): - ctype = frappe.local.form_dict.get('ctype') - parent_field = 'parent_' + ctype.lower().replace(' ', '_') - parent = frappe.form_dict.get("parent") or "" - - return frappe.db.sql("""select name as value, - if(is_group='Yes', 1, 0) as expandable - from `tab{ctype}` - where docstatus < 2 - and ifnull(`{parent_field}`,'') = %s - order by name""".format(ctype=frappe.db.escape(ctype), parent_field=frappe.db.escape(parent_field)), - parent, as_dict=1) - -@frappe.whitelist() -def add_node(): - ctype = frappe.form_dict.get('ctype') - parent_field = 'parent_' + ctype.lower().replace(' ', '_') - name_field = ctype.lower().replace(' ', '_') + '_name' - - doc = frappe.new_doc(ctype) - doc.update({ - name_field: frappe.form_dict['name_field'], - parent_field: frappe.form_dict['parent'], - "is_group": frappe.form_dict['is_group'] - }) - if ctype == "Sales Person": - doc.employee = frappe.form_dict.get('employee') - - doc.save() diff --git a/erpnext/selling/page/sales_browser/tree.js b/erpnext/selling/page/sales_browser/tree.js deleted file mode 100644 index a99fe728724..00000000000 --- a/erpnext/selling/page/sales_browser/tree.js +++ /dev/null @@ -1,166 +0,0 @@ -// Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors -// License: GNU General Public License v3. See license.txt - -frappe.pages["Sales Browser"].on_page_load = function(wrapper){ - var page = frappe.ui.make_app_page({ - parent: wrapper, - single_column: true, - }); - - wrapper.page.add_menu_item(__('Refresh'), function() { - wrapper.make_tree(); - }); - - wrapper.make_tree = function() { - var ctype = frappe.get_route()[1] || 'Territory'; - return frappe.call({ - method: 'erpnext.selling.page.sales_browser.sales_browser.get_children', - args: {ctype: ctype}, - callback: function(r) { - var root = r.message[0]["value"]; - erpnext.sales_chart = new erpnext.SalesChart(ctype, root, page, - page.main.css({ - "min-height": "300px", - "padding-bottom": "25px" - })); - } - }); - } - - wrapper.make_tree(); -} - -frappe.pages['Sales Browser'].on_page_show = function(wrapper){ - // set route - var ctype = frappe.get_route()[1] || 'Territory'; - - wrapper.page.set_title(__('{0} Tree',[__(ctype)])); - - if(erpnext.sales_chart && erpnext.sales_chart.ctype != ctype) { - wrapper.make_tree(); - } - - frappe.breadcrumbs.add(frappe.breadcrumbs.last_module || "Selling"); -}; - -erpnext.SalesChart = Class.extend({ - init: function(ctype, root, page, parent) { - $(parent).empty(); - var me = this; - me.ctype = ctype; - me.page = page; - me.can_read = frappe.model.can_read(this.ctype); - me.can_create = frappe.boot.user.can_create.indexOf(this.ctype) !== -1 || - frappe.boot.user.in_create.indexOf(this.ctype) !== -1; - me.can_write = frappe.model.can_write(this.ctype); - me.can_delete = frappe.model.can_delete(this.ctype); - - me.page.set_primary_action(__("New"), function() { - me.new_node(); - }, "octicon octicon-plus"); - - this.tree = new frappe.ui.Tree({ - parent: $(parent), - label: __(root), - args: {ctype: ctype}, - method: 'erpnext.selling.page.sales_browser.sales_browser.get_children', - toolbar: [ - {toggle_btn: true}, - { - label:__("Edit"), - condition: function(node) { - return !node.root && me.can_read; - }, - click: function(node) { - frappe.set_route("Form", me.ctype, node.label); - } - }, - { - label:__("Add Child"), - condition: function(node) { return me.can_create && node.expandable; }, - click: function(node) { - me.new_node(); - }, - btnClass: "hidden-xs" - }, - { - label:__("Rename"), - condition: function(node) { return !node.root && me.can_write; }, - click: function(node) { - frappe.model.rename_doc(me.ctype, node.label, function(new_name) { - node.$a.html(new_name); - }); - }, - btnClass: "hidden-xs" - }, - { - label:__("Delete"), - condition: function(node) { return !node.root && me.can_delete; }, - click: function(node) { - frappe.model.delete_doc(me.ctype, node.label, function() { - node.parent.remove(); - }); - }, - btnClass: "hidden-xs" - } - - ] - }); - }, - new_node: function() { - var me = this; - var node = me.tree.get_selected_node(); - - if(!(node && node.expandable)) { - frappe.msgprint(__("Select a group node first.")); - return; - } - - var fields = [ - {fieldtype:'Data', fieldname: 'name_field', - label:__('New {0} Name',[__(me.ctype)]), reqd:true}, - {fieldtype:'Select', fieldname:'is_group', label:__('Group Node'), options:'No\nYes', - description: __("Further nodes can be only created under 'Group' type nodes")} - ] - - if(me.ctype == "Sales Person") { - fields.splice(-1, 0, {fieldtype:'Link', fieldname:'employee', label:__('Employee'), - options:'Employee', description: __("Please enter Employee Id of this sales person")}); - } - - // the dialog - var d = new frappe.ui.Dialog({ - title: __('New {0}',[__(me.ctype)]), - fields: fields - }) - - d.set_value("is_group", "No"); - // create - d.set_primary_action(__("Create New"), function() { - var btn = this; - var v = d.get_values(); - if(!v) return; - - var node = me.tree.get_selected_node(); - - v.parent = node.label; - v.ctype = me.ctype; - - return frappe.call({ - method: 'erpnext.selling.page.sales_browser.sales_browser.add_node', - args: v, - callback: function(r) { - if(!r.exc) { - d.hide(); - if(node.expanded) { - node.toggle_node(); - } - node.reload(); - } - } - }); - }); - - d.show(); - }, -});