diff --git a/erpnext/__init__.py b/erpnext/__init__.py index 777b7bdc2f6..178d7e803d5 100644 --- a/erpnext/__init__.py +++ b/erpnext/__init__.py @@ -5,7 +5,7 @@ import frappe from erpnext.hooks import regional_overrides from frappe.utils import getdate -__version__ = '10.1.23' +__version__ = '10.1.24' def get_default_company(user=None): '''Get default company for user''' diff --git a/erpnext/accounts/doctype/account/account_tree.js b/erpnext/accounts/doctype/account/account_tree.js index 9f06ada2603..fe1977c16ed 100644 --- a/erpnext/accounts/doctype/account/account_tree.js +++ b/erpnext/accounts/doctype/account/account_tree.js @@ -71,7 +71,7 @@ frappe.treeview_settings["Account"] = { // financial statements for (let report of ['Trial Balance', 'General Ledger', 'Balance Sheet', - 'Profit and Loss', 'Cash Flow Statement', 'Accounts Payable', 'Accounts Receivable']) { + 'Profit and Loss Statement', 'Cash Flow Statement', 'Accounts Payable', 'Accounts Receivable']) { treeview.page.add_inner_button(__(report), function() { frappe.set_route('query-report', report, {company: get_company()}); }, __('Financial Statements')); diff --git a/erpnext/accounts/doctype/account/chart_of_accounts/chart_of_accounts.py b/erpnext/accounts/doctype/account/chart_of_accounts/chart_of_accounts.py index dc98db141ee..737b34ae71d 100644 --- a/erpnext/accounts/doctype/account/chart_of_accounts/chart_of_accounts.py +++ b/erpnext/accounts/doctype/account/chart_of_accounts/chart_of_accounts.py @@ -165,7 +165,7 @@ def build_account_tree(tree, parent, all_accounts): tree[child.account_name] = {} # assign account_type and root_type - if child.account_type: + if child.account_number: tree[child.account_name]["account_number"] = child.account_number if child.account_type: tree[child.account_name]["account_type"] = child.account_type @@ -175,4 +175,4 @@ def build_account_tree(tree, parent, all_accounts): tree[child.account_name]["root_type"] = child.root_type # call recursively to build a subtree for current account - build_account_tree(tree[child.account_name], child, all_accounts) \ No newline at end of file + build_account_tree(tree[child.account_name], child, all_accounts) diff --git a/erpnext/accounts/doctype/cheque_print_template/cheque_print_template.py b/erpnext/accounts/doctype/cheque_print_template/cheque_print_template.py index 5b7d73f2bd7..0556e9b9924 100644 --- a/erpnext/accounts/doctype/cheque_print_template/cheque_print_template.py +++ b/erpnext/accounts/doctype/cheque_print_template/cheque_print_template.py @@ -29,11 +29,11 @@ def create_or_update_cheque_print_format(template_name): cheque_print.html = """
- %(message_to_show)s - {{ frappe.utils.formatdate(doc.reference_date) or '' }} diff --git a/erpnext/education/doctype/student_group/student_group.js b/erpnext/education/doctype/student_group/student_group.js index f3f8c886247..5373df9124c 100644 --- a/erpnext/education/doctype/student_group/student_group.js +++ b/erpnext/education/doctype/student_group/student_group.js @@ -82,36 +82,39 @@ frappe.ui.form.on("Student Group", { max_roll_no = d.group_roll_number; } }); - frappe.call({ - method: "erpnext.education.doctype.student_group.student_group.get_students", - args: { - "academic_year": frm.doc.academic_year, - "academic_term": frm.doc.academic_term, - "group_based_on": frm.doc.group_based_on, - "program": frm.doc.program, - "batch" : frm.doc.batch, - "course": frm.doc.course - }, - callback: function(r) { - if(r.message) { - $.each(r.message, function(i, d) { - if(!in_list(student_list, d.student)) { - var s = frm.add_child("students"); - s.student = d.student; - s.student_name = d.student_name; - if (d.active === 0) { - s.active = 0; + + if(frm.doc.academic_year) { + frappe.call({ + method: "erpnext.education.doctype.student_group.student_group.get_students", + args: { + "academic_year": frm.doc.academic_year, + "academic_term": frm.doc.academic_term, + "group_based_on": frm.doc.group_based_on, + "program": frm.doc.program, + "batch" : frm.doc.batch, + "course": frm.doc.course + }, + callback: function(r) { + if(r.message) { + $.each(r.message, function(i, d) { + if(!in_list(student_list, d.student)) { + var s = frm.add_child("students"); + s.student = d.student; + s.student_name = d.student_name; + if (d.active === 0) { + s.active = 0; + } + s.group_roll_number = ++max_roll_no; } - s.group_roll_number = ++max_roll_no; - } - }); - refresh_field("students"); - frm.save(); - } else { - frappe.msgprint(__("Student Group is already updated.")) + }); + refresh_field("students"); + frm.save(); + } else { + frappe.msgprint(__("Student Group is already updated.")) + } } - } - }) + }) + } } else { frappe.msgprint(__("Select students manually for the Activity based Group")); } diff --git a/erpnext/healthcare/doctype/patient_appointment/patient_appointment_calendar.js b/erpnext/healthcare/doctype/patient_appointment/patient_appointment_calendar.js index bfb53b83b8e..0b62d8e3684 100644 --- a/erpnext/healthcare/doctype/patient_appointment/patient_appointment_calendar.js +++ b/erpnext/healthcare/doctype/patient_appointment/patient_appointment_calendar.js @@ -1,8 +1,8 @@ frappe.views.calendar["Patient Appointment"] = { field_map: { - "start": "start", - "end": "end", + "start": "appointment_date", + "end": "appointment_datetime", "id": "name", "title": "patient", "allDay": "allDay" diff --git a/erpnext/hr/doctype/holiday_list/holiday_list_calendar.js b/erpnext/hr/doctype/holiday_list/holiday_list_calendar.js index 3cc8dd5036f..507d070444b 100644 --- a/erpnext/hr/doctype/holiday_list/holiday_list_calendar.js +++ b/erpnext/hr/doctype/holiday_list/holiday_list_calendar.js @@ -3,8 +3,8 @@ frappe.views.calendar["Holiday List"] = { field_map: { - "start": "holiday_date", - "end": "holiday_date", + "start": "from_date", + "end": "to_date", "id": "name", "title": "description", "allDay": "allDay" diff --git a/erpnext/selling/page/point_of_sale/point_of_sale.js b/erpnext/selling/page/point_of_sale/point_of_sale.js index 0fa082fddc2..aa78b85bdbd 100644 --- a/erpnext/selling/page/point_of_sale/point_of_sale.js +++ b/erpnext/selling/page/point_of_sale/point_of_sale.js @@ -774,7 +774,7 @@ class POSCart { }); this.numpad.reset_value(); } else { - const item_code = this.selected_item.attr('data-item-code'); + const item_code = unescape(this.selected_item.attr('data-item-code')); const field = this.selected_item.active_field; const value = this.numpad.get_value(); @@ -819,7 +819,7 @@ class POSCart { } update_item(item) { - const $item = this.$cart_items.find(`[data-item-code="${item.item_code}"]`); + const $item = this.$cart_items.find(`[data-item-code="${escape(item.item_code)}"]`); if(item.qty > 0) { const is_stock_item = this.get_item_details(item.item_code).is_stock_item; @@ -841,7 +841,7 @@ class POSCart { const rate = format_currency(item.rate, this.frm.doc.currency); const indicator_class = (!is_stock_item || item.actual_qty >= item.qty) ? 'green' : 'red'; return ` -
+
${item.item_name}
@@ -883,18 +883,18 @@ class POSCart { } exists(item_code) { - let $item = this.$cart_items.find(`[data-item-code="${item_code}"]`); + let $item = this.$cart_items.find(`[data-item-code="${escape(item_code)}"]`); return $item.length > 0; } highlight_item(item_code) { - const $item = this.$cart_items.find(`[data-item-code="${item_code}"]`); + const $item = this.$cart_items.find(`[data-item-code="${escape(item_code)}"]`); $item.addClass('highlight'); setTimeout(() => $item.removeClass('highlight'), 1000); } scroll_to_item(item_code) { - const $item = this.$cart_items.find(`[data-item-code="${item_code}"]`); + const $item = this.$cart_items.find(`[data-item-code="${escape(item_code)}"]`); if ($item.length === 0) return; const scrollTop = $item.offset().top - this.$cart_items.offset().top + this.$cart_items.scrollTop(); this.$cart_items.animate({ scrollTop }); @@ -909,7 +909,7 @@ class POSCart { '[data-action="increment"], [data-action="decrement"]', function() { const $btn = $(this); const $item = $btn.closest('.list-item[data-item-code]'); - const item_code = $item.attr('data-item-code'); + const item_code = unescape($item.attr('data-item-code')); const action = $btn.attr('data-action'); if(action === 'increment') { @@ -932,7 +932,7 @@ class POSCart { this.$cart_items.on('change', '.quantity input', function() { const $input = $(this); const $item = $input.closest('.list-item[data-item-code]'); - const item_code = $item.attr('data-item-code'); + const item_code = unescape($item.attr('data-item-code')); events.on_field_change(item_code, 'qty', flt($input.val())); }); @@ -1200,7 +1200,7 @@ class POSItems { var me = this; this.wrapper.on('click', '.pos-item-wrapper', function() { const $item = $(this); - const item_code = $item.attr('data-item-code'); + const item_code = unescape($item.attr('data-item-code')); me.events.update_cart(item_code, 'qty', '+1'); }); } @@ -1226,7 +1226,7 @@ class POSItems { const item_title = item_name || item_code; const template = ` -
+
diff --git a/erpnext/stock/report/stock_balance/stock_balance.py b/erpnext/stock/report/stock_balance/stock_balance.py index 45035f25eb1..3e05716af59 100644 --- a/erpnext/stock/report/stock_balance/stock_balance.py +++ b/erpnext/stock/report/stock_balance/stock_balance.py @@ -200,13 +200,14 @@ def get_item_details(items, sle, filters): item_details = {} if not items: items = list(set([d.item_code for d in sle])) - - for item in frappe.db.sql(""" - select name, item_name, description, item_group, brand, stock_uom - from `tabItem` - where name in ({0}) - """.format(', '.join(['"' + frappe.db.escape(i, percent=False) + '"' for i in items])), as_dict=1): - item_details.setdefault(item.name, item) + + if items: + for item in frappe.db.sql(""" + select name, item_name, description, item_group, brand, stock_uom + from `tabItem` + where name in ({0}) + """.format(', '.join(['"' + frappe.db.escape(i, percent=False) + '"' for i in items])), as_dict=1): + item_details.setdefault(item.name, item) if filters.get('show_variant_attributes', 0) == 1: variant_values = get_variant_values_for(item_details.keys()) @@ -215,11 +216,14 @@ def get_item_details(items, sle, filters): return item_details def get_item_reorder_details(items): - item_reorder_details = frappe.db.sql(""" - select parent, warehouse, warehouse_reorder_qty, warehouse_reorder_level - from `tabItem Reorder` - where parent in ({0}) - """.format(', '.join(['"' + frappe.db.escape(i, percent=False) + '"' for i in items])), as_dict=1) + item_reorder_details = frappe._dict() + + if items: + item_reorder_details = frappe.db.sql(""" + select parent, warehouse, warehouse_reorder_qty, warehouse_reorder_level + from `tabItem Reorder` + where parent in ({0}) + """.format(', '.join(['"' + frappe.db.escape(i, percent=False) + '"' for i in items])), as_dict=1) return dict((d.parent + d.warehouse, d) for d in item_reorder_details) diff --git a/erpnext/stock/report/stock_ledger/stock_ledger.py b/erpnext/stock/report/stock_ledger/stock_ledger.py index 5e185e05337..e29f50a5496 100644 --- a/erpnext/stock/report/stock_ledger/stock_ledger.py +++ b/erpnext/stock/report/stock_ledger/stock_ledger.py @@ -93,11 +93,14 @@ def get_item_details(items, sl_entries): if not items: items = list(set([d.item_code for d in sl_entries])) + if not items: + return item_details + for item in frappe.db.sql(""" select name, item_name, description, item_group, brand, stock_uom from `tabItem` where name in ({0}) - """.format(', '.join(['"' + frappe.db.escape(i,percent=False) + '"' for i in items])), as_dict=1): + """.format(', '.join(['"' + frappe.db.escape(i,percent=False) + '"' for i in items])), as_dict=1, debug=1): item_details.setdefault(item.name, item) return item_details diff --git a/erpnext/utilities/page/leaderboard/leaderboard.js b/erpnext/utilities/page/leaderboard/leaderboard.js index 746ac794884..1a9efd587bb 100644 --- a/erpnext/utilities/page/leaderboard/leaderboard.js +++ b/erpnext/utilities/page/leaderboard/leaderboard.js @@ -24,7 +24,7 @@ frappe.Leaderboard = Class.extend({ "Item": ["total_sales_amount", "total_qty_sold", "total_purchase_amount", "total_qty_purchased", "available_stock_qty", "available_stock_value"], "Supplier": ["total_purchase_amount", "total_qty_purchased", "outstanding_amount"], - "Sales Partner": ["total_sales_amount", "total_commision"], + "Sales Partner": ["total_sales_amount", "total_commission"], "Sales Person": ["total_sales_amount"], };