diff --git a/erpnext/accounts/doctype/sales_invoice/pos.js b/erpnext/accounts/doctype/sales_invoice/pos.js index 8909d8539e4..991dad8b5ac 100644 --- a/erpnext/accounts/doctype/sales_invoice/pos.js +++ b/erpnext/accounts/doctype/sales_invoice/pos.js @@ -127,6 +127,7 @@ erpnext.POS = Class.extend({ this.party = party; this.price_list = (party == "Customer" ? this.frm.doc.selling_price_list : this.frm.doc.buying_price_list); + this.price_list_field = (party == "Customer" ? "selling_price_list" : "buying_price_list"); this.sales_or_purchase = (party == "Customer" ? "Sales" : "Purchase"); this.net_total = "net_total_" + export_or_import; this.grand_total = "grand_total_" + export_or_import; @@ -287,22 +288,17 @@ erpnext.POS = Class.extend({ this.frm.cscript.fname, this.frm.doctype), function(i, d) { if (d.item_code == item_code) { caught = true; - if (serial_no) { - d.serial_no += '\n' + serial_no; - me.frm.script_manager.trigger("serial_no", d.doctype, d.name); - } - else { - d.qty += 1; - me.frm.script_manager.trigger("qty", d.doctype, d.name); - } + if (serial_no) + wn.model.set_value(d.doctype, d.name, "serial_no", d.serial_no + '\n' + serial_no); + else + wn.model.set_value(d.doctype, d.name, "qty", d.qty + 1); } }); } // if item not found then add new item - if (!caught) { + if (!caught) this.add_new_item_to_grid(item_code, serial_no); - } this.refresh(); this.refresh_search_box(); @@ -337,15 +333,16 @@ erpnext.POS = Class.extend({ wn.model.clear_doc(d.doctype, d.name); me.refresh_grid(); } else { - d.qty = qty; - me.frm.script_manager.trigger("qty", d.doctype, d.name); + wn.model.set_value(d.doctype, d.name, "qty", qty); } } }); - me.refresh(); + this.refresh(); }, refresh: function() { var me = this; + + this.refresh_item_list(); this.party_field.set_input(this.frm.doc[this.party.toLowerCase()]); this.wrapper.find('input.discount-amount').val(this.frm.doc.discount_amount); this.barcode.set_input(""); @@ -369,6 +366,14 @@ erpnext.POS = Class.extend({ this.make_party(); } }, + refresh_item_list: function() { + var me = this; + // refresh item list on change of price list + if (this.frm.doc[this.price_list_field] != this.price_list) { + this.price_list = this.frm.doc[this.price_list_field]; + this.make_item_list(); + } + }, show_items_in_item_cart: function() { var me = this; var $items = this.wrapper.find("#cart tbody").empty(); @@ -402,9 +407,8 @@ erpnext.POS = Class.extend({ )).appendTo($items); }); - this.wrapper.find(".increase-qty, .decrease-qty").on("click", function() { - var item_code = $(this).closest("tr").attr("id"); - me.selected_item_qty_operation(item_code, $(this).attr("class")); + this.wrapper.find("input.qty").on("focus", function() { + $(this).select(); }); }, show_taxes: function() { @@ -441,10 +445,16 @@ erpnext.POS = Class.extend({ // append quantity to the respective item after change from input box $(this.wrapper).find("input.qty").on("change", function() { - var item_code = $(this).closest("tr")[0].id; + var item_code = $(this).closest("tr").attr("id"); me.update_qty(item_code, $(this).val()); }); + // increase/decrease qty on plus/minus button + $(this.wrapper).find(".increase-qty, .decrease-qty").on("click", function() { + var tr = $(this).closest("tr"); + me.increase_decrease_qty(tr, $(this).attr("class")); + }); + // on td click toggle the highlighting of row $(this.wrapper).find("#cart tbody tr td").on("click", function() { var row = $(this).closest("tr"); @@ -462,6 +472,15 @@ erpnext.POS = Class.extend({ me.refresh_delete_btn(); this.barcode.$input.focus(); }, + increase_decrease_qty: function(tr, operation) { + var item_code = tr.attr("id"); + var item_qty = cint(tr.find("input.qty").val()); + + if (operation == "increase-qty") + this.update_qty(item_code, item_qty + 1); + else if (operation == "decrease-qty" && item_qty != 1) + this.update_qty(item_code, item_qty - 1); + }, disable_text_box_and_button: function() { var me = this; // if form is submitted & cancelled then disable all input box & buttons @@ -533,26 +552,11 @@ erpnext.POS = Class.extend({ this.refresh_grid(); }, refresh_grid: function() { + this.frm.dirty(); this.frm.fields_dict[this.frm.cscript.fname].grid.refresh(); this.frm.script_manager.trigger("calculate_taxes_and_totals"); this.refresh(); }, - selected_item_qty_operation: function(item_code, operation) { - var me = this; - var child = wn.model.get_children(this.frm.doctype + " Item", this.frm.doc.name, - this.frm.cscript.fname, this.frm.doctype); - - $.each(child, function(i, d) { - if (d.item_code == item_code) { - if (operation == "increase-qty") - d.qty += 1; - else if (operation == "decrease-qty") - d.qty != 1 ? d.qty -= 1 : d.qty = 1; - - me.refresh(); - } - }); - }, make_payment: function() { var me = this; var no_of_items = $(this.wrapper).find("#cart tbody tr").length; diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py index 2259bbefbf6..1292507a65b 100644 --- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py +++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py @@ -320,12 +320,9 @@ class DocType(SellingController): item = webnotes.conn.sql("select name,is_asset_item,is_sales_item from `tabItem` where name = '%s' and (ifnull(end_of_life,'')='' or end_of_life = '0000-00-00' or end_of_life > now())"% d.item_code) acc = webnotes.conn.sql("select account_type from `tabAccount` where name = '%s' and docstatus != 2" % d.income_account) if not acc: - msgprint("Account: "+d.income_account+" does not exist in the system") - raise Exception + msgprint("Account: "+d.income_account+" does not exist in the system", raise_exception=True) elif item and item[0][1] == 'Yes' and not acc[0][0] == 'Fixed Asset Account': - msgprint("Please select income head with account type 'Fixed Asset Account' as Item %s is an asset item" % d.item_code) - raise Exception - + msgprint("Please select income head with account type 'Fixed Asset Account' as Item %s is an asset item" % d.item_code, raise_exception=True) def validate_with_previous_doc(self): super(DocType, self).validate_with_previous_doc(self.tname, { diff --git a/erpnext/accounts/report/accounts_receivable/accounts_receivable.py b/erpnext/accounts/report/accounts_receivable/accounts_receivable.py index de96abb7d74..085595e9cc3 100644 --- a/erpnext/accounts/report/accounts_receivable/accounts_receivable.py +++ b/erpnext/accounts/report/accounts_receivable/accounts_receivable.py @@ -37,12 +37,15 @@ class AccountsReceivableReport(object): return columns def get_data(self, customer_naming_by): + from erpnext.accounts.utils import get_currency_precision + currency_precision = get_currency_precision() or 2 + data = [] future_vouchers = self.get_entries_after(self.filters.report_date) for gle in self.get_entries_till(self.filters.report_date): if self.is_receivable(gle, future_vouchers): outstanding_amount = self.get_outstanding_amount(gle, self.filters.report_date) - if abs(outstanding_amount) > 0.0: + if abs(outstanding_amount) > 0.1/10**currency_precision: due_date = self.get_due_date(gle) invoiced_amount = gle.debit if (gle.debit > 0) else 0 payment_received = invoiced_amount - outstanding_amount diff --git a/erpnext/accounts/report/general_ledger/general_ledger.py b/erpnext/accounts/report/general_ledger/general_ledger.py index a22a114a7ea..ccdba064b3a 100644 --- a/erpnext/accounts/report/general_ledger/general_ledger.py +++ b/erpnext/accounts/report/general_ledger/general_ledger.py @@ -34,7 +34,7 @@ def validate_filters(filters, account_details): def get_columns(): return ["Posting Date:Date:100", "Account:Link/Account:200", "Debit:Float:100", "Credit:Float:100", "Voucher Type::120", "Voucher No::160", "Link::20", - "Against Account::120", "Cost Center:Link/Cost Center:100", "Remarks::200"] + "Against Account::120", "Cost Center:Link/Cost Center:100", "Remarks::400"] def get_result(filters, account_details): gl_entries = get_gl_entries(filters) @@ -51,7 +51,7 @@ def get_gl_entries(filters): gl_entries = webnotes.conn.sql("""select posting_date, account, sum(ifnull(debit, 0)) as debit, sum(ifnull(credit, 0)) as credit, - voucher_type, voucher_no, cost_center, remarks, is_advance, against + voucher_type, voucher_no, cost_center, remarks, is_opening, against from `tabGL Entry` where company=%(company)s {conditions} {group_by_condition} @@ -138,7 +138,7 @@ def get_accountwise_gle(filters, gl_entries, gle_map): for gle in gl_entries: amount = flt(gle.debit) - flt(gle.credit) if filters.get("account") and (gle.posting_date < filters.from_date - or cstr(gle.is_advance) == "Yes"): + or cstr(gle.is_opening) == "Yes"): gle_map[gle.account].opening += amount opening += amount elif gle.posting_date <= filters.to_date: diff --git a/erpnext/accounts/utils.py b/erpnext/accounts/utils.py index 5d9c09bccec..d9cb516c317 100644 --- a/erpnext/accounts/utils.py +++ b/erpnext/accounts/utils.py @@ -379,3 +379,12 @@ def get_account_for(account_for_doctype, account_for): return webnotes.conn.get_value("Account", {account_for_field: account_for_doctype, "master_name": account_for}) + +def get_currency_precision(currency=None): + if not currency: + currency = webnotes.conn.get_value("Company", + webnotes.conn.get_default("company"), "default_currency") + currency_format = webnotes.conn.get_value("Currency", currency, "number_format") + + from webnotes.utils import get_number_format_info + return get_number_format_info(currency_format)[2] diff --git a/erpnext/buying/doctype/supplier/supplier.js b/erpnext/buying/doctype/supplier/supplier.js index b3dec80cfac..4eb04792fcd 100644 --- a/erpnext/buying/doctype/supplier/supplier.js +++ b/erpnext/buying/doctype/supplier/supplier.js @@ -3,7 +3,7 @@ {% include 'setup/doctype/contact_control/contact_control.js' %}; -cur_frm.cscript.refresh = function(doc,dt,dn) { +cur_frm.cscript.refresh = function(doc, dt, dn) { cur_frm.cscript.make_dashboard(doc); erpnext.hide_naming_series(); @@ -93,7 +93,7 @@ cur_frm.cscript.make_contact = function() { cur_frm.contact_list.run(); } -cur_frm.fields_dict['default_price_list'].get_query = function(doc,cdt,cdn) { +cur_frm.fields_dict['default_price_list'].get_query = function(doc, cdt, cdn) { return{ filters:{'buying': 1} } diff --git a/erpnext/buying/report/requested_items_to_be_ordered/requested_items_to_be_ordered.txt b/erpnext/buying/report/requested_items_to_be_ordered/requested_items_to_be_ordered.txt index 49c747854aa..4d3558ca680 100644 --- a/erpnext/buying/report/requested_items_to_be_ordered/requested_items_to_be_ordered.txt +++ b/erpnext/buying/report/requested_items_to_be_ordered/requested_items_to_be_ordered.txt @@ -2,7 +2,7 @@ { "creation": "2013-05-13 16:10:02", "docstatus": 0, - "modified": "2013-05-13 16:21:07", + "modified": "2014-01-24 18:19:11", "modified_by": "Administrator", "owner": "Administrator" }, @@ -11,7 +11,7 @@ "doctype": "Report", "is_standard": "Yes", "name": "__common__", - "query": "select \n mr.name as \"Material Request:Link/Material Request:120\",\n\tmr.transaction_date as \"Date:Date:100\",\n\tmr_item.item_code as \"Item Code:Link/Item:120\",\n\tmr_item.qty as \"Qty:Float:100\",\n\tmr_item.ordered_qty as \"Ordered Qty:Float:100\", \n\t(mr_item.qty - ifnull(mr_item.ordered_qty, 0)) as \"Qty to Order:Float:100\",\n\tmr_item.item_name as \"Item Name::150\",\n\tmr_item.description as \"Description::200\"\nfrom\n\t`tabMaterial Request` mr, `tabMaterial Request Item` mr_item\nwhere\n\tmr_item.parent = mr.name\n\tand mr.material_request_type = \"Purchase\"\n\tand mr.docstatus = 1\n\tand mr.status != \"Stopped\"\n\tand ifnull(mr_item.ordered_qty, 0) < ifnull(mr_item.qty, 0)\norder by mr.transaction_date asc", + "query": "select \n mr.name as \"Material Request:Link/Material Request:120\",\n\tmr.transaction_date as \"Date:Date:100\",\n\tmr_item.item_code as \"Item Code:Link/Item:120\",\n\tsum(ifnull(mr_item.qty, 0)) as \"Qty:Float:100\",\n\tsum(ifnull(mr_item.ordered_qty, 0)) as \"Ordered Qty:Float:100\", \n\t(sum(mr_item.qty) - sum(ifnull(mr_item.ordered_qty, 0))) as \"Qty to Order:Float:100\",\n\tmr_item.item_name as \"Item Name::150\",\n\tmr_item.description as \"Description::200\"\nfrom\n\t`tabMaterial Request` mr, `tabMaterial Request Item` mr_item\nwhere\n\tmr_item.parent = mr.name\n\tand mr.material_request_type = \"Purchase\"\n\tand mr.docstatus = 1\n\tand mr.status != \"Stopped\"\ngroup by mr.name, mr_item.item_code\nhaving\n\tsum(ifnull(mr_item.ordered_qty, 0)) < sum(ifnull(mr_item.qty, 0))\norder by mr.transaction_date asc", "ref_doctype": "Purchase Order", "report_name": "Requested Items To Be Ordered", "report_type": "Query Report" diff --git a/erpnext/buying/utils.py b/erpnext/buying/utils.py index d7e3d817769..1bb31544e8e 100644 --- a/erpnext/buying/utils.py +++ b/erpnext/buying/utils.py @@ -89,8 +89,10 @@ def _get_price_list_rate(args, item_bean, meta): # try fetching from price list if args.buying_price_list and args.price_list_currency: - price_list_rate = webnotes.conn.sql("""select ref_rate from `tabItem Price` - where price_list=%s and item_code=%s and buying=1""", + price_list_rate = webnotes.conn.sql("""select ip.ref_rate from + `tabItem Price` ip, `tabPrice List` pl + where ip.price_list=pl.name and ip.price_list=%s and + ip.item_code=%s and ip.buying=1 and pl.enabled=1""", (args.buying_price_list, args.item_code), as_dict=1) if price_list_rate: diff --git a/erpnext/patches.txt b/erpnext/patches.txt index f39e2142456..a1614aad0c0 100644 --- a/erpnext/patches.txt +++ b/erpnext/patches.txt @@ -1,3 +1,4 @@ +erpnext.patches.1401.enable_all_price_list erpnext.patches.4_0.update_user_properties erpnext.patches.4_0.move_warehouse_user_to_restrictions erpnext.patches.4_0.new_permissions @@ -18,4 +19,4 @@ execute:webnotes.reload_doc('selling', 'Print Format', 'Sales Order Modern') # 2 execute:webnotes.reload_doc('selling', 'Print Format', 'Sales Order Spartan') # 2014-01-03 execute:webnotes.reload_doc('stock', 'Print Format', 'Delivery Note Classic') # 2014-01-03 execute:webnotes.reload_doc('stock', 'Print Format', 'Delivery Note Modern') # 2014-01-03 -execute:webnotes.reload_doc('stock', 'Print Format', 'Delivery Note Spartan') # 2014-01-03 \ No newline at end of file +execute:webnotes.reload_doc('stock', 'Print Format', 'Delivery Note Spartan') # 2014-01-03 diff --git a/erpnext/patches/1401/enable_all_price_list.py b/erpnext/patches/1401/enable_all_price_list.py new file mode 100644 index 00000000000..9cf141fe678 --- /dev/null +++ b/erpnext/patches/1401/enable_all_price_list.py @@ -0,0 +1,9 @@ +# Copyright (c) 2014, Web Notes Technologies Pvt. Ltd. and Contributors +# License: GNU General Public License v3. See license.txt + +from __future__ import unicode_literals +import webnotes + +def execute(): + webnotes.reload_doc("stock", "doctype", "price_list") + webnotes.conn.sql("""update `tabPrice List` set enabled=1""") \ No newline at end of file diff --git a/erpnext/patches/patch_list.py b/erpnext/patches/patch_list.py index 789954b8988..6e276287323 100644 --- a/erpnext/patches/patch_list.py +++ b/erpnext/patches/patch_list.py @@ -270,4 +270,5 @@ patch_list = [ "execute:webnotes.reload_doc('selling', 'doctype', 'sales_order') # 2013-12-26", "execute:webnotes.reload_doc('selling', 'doctype', 'quotation') # 2013-12-26", "execute:webnotes.reload_doc('stock', 'doctype', 'delivery_note') # 2013-12-26", + "patches.1401.enable_all_price_list", ] \ No newline at end of file diff --git a/erpnext/selling/doctype/customer/customer.js b/erpnext/selling/doctype/customer/customer.js index 9578558484f..f2568d68549 100644 --- a/erpnext/selling/doctype/customer/customer.js +++ b/erpnext/selling/doctype/customer/customer.js @@ -18,7 +18,7 @@ cur_frm.cscript.load_defaults = function(doc, dt, dn) { cur_frm.add_fetch('lead_name', 'company_name', 'customer_name'); cur_frm.add_fetch('default_sales_partner','commission_rate','default_commission_rate'); -cur_frm.cscript.refresh = function(doc,dt,dn) { +cur_frm.cscript.refresh = function(doc, dt, dn) { cur_frm.cscript.setup_dashboard(doc); erpnext.hide_naming_series(); @@ -107,20 +107,20 @@ cur_frm.cscript.make_contact = function() { } -cur_frm.fields_dict['customer_group'].get_query = function(doc,dt,dn) { +cur_frm.fields_dict['customer_group'].get_query = function(doc, dt, dn) { return{ filters:{'is_group': 'No'} } } -cur_frm.fields_dict.lead_name.get_query = function(doc,cdt,cdn) { +cur_frm.fields_dict.lead_name.get_query = function(doc, cdt, cdn) { return{ query: "erpnext.controllers.queries.lead_query" } } -cur_frm.fields_dict['default_price_list'].get_query = function(doc,cdt,cdn) { +cur_frm.fields_dict['default_price_list'].get_query = function(doc, cdt, cdn) { return{ filters:{'selling': 1} } diff --git a/erpnext/selling/utils.py b/erpnext/selling/utils.py index 118318f5b43..ed3711d32cf 100644 --- a/erpnext/selling/utils.py +++ b/erpnext/selling/utils.py @@ -150,8 +150,10 @@ def _get_basic_details(args, item_bean, warehouse_fieldname): return out def _get_price_list_rate(args, item_bean, meta): - ref_rate = webnotes.conn.sql("""select ref_rate from `tabItem Price` - where price_list=%s and item_code=%s and selling=1""", + ref_rate = webnotes.conn.sql("""select ip.ref_rate from + `tabItem Price` ip, `tabPrice List` pl + where ip.price_list=pl.name and ip.price_list=%s and + ip.item_code=%s and ip.selling=1 and pl.enabled=1""", (args.selling_price_list, args.item_code), as_dict=1) if not ref_rate: diff --git a/erpnext/setup/page/setup_wizard/setup_wizard.py b/erpnext/setup/page/setup_wizard/setup_wizard.py index eec92aad687..47e22dfc381 100644 --- a/erpnext/setup/page/setup_wizard/setup_wizard.py +++ b/erpnext/setup/page/setup_wizard/setup_wizard.py @@ -98,6 +98,7 @@ def create_price_lists(args): { "doctype": "Price List", "price_list_name": "Standard " + pl_type, + "enabled": 1, "buying": 1 if pl_type == "Buying" else 0, "selling": 1 if pl_type == "Selling" else 0, "currency": args["currency"] diff --git a/erpnext/setup/utils.py b/erpnext/setup/utils.py index 0571c15a54d..68a5a5ab45c 100644 --- a/erpnext/setup/utils.py +++ b/erpnext/setup/utils.py @@ -3,7 +3,7 @@ from __future__ import unicode_literals import webnotes -from webnotes import _, msgprint +from webnotes import _, msgprint, throw import json def get_company_currency(company): @@ -11,8 +11,8 @@ def get_company_currency(company): if not currency: currency = webnotes.conn.get_default("currency") if not currency: - msgprint(_('Please specify Default Currency in Company Master \ - and Global Defaults'), raise_exception=True) + throw(_('Please specify Default Currency in Company Master \ + and Global Defaults')) return currency @@ -32,5 +32,14 @@ def get_ancestors_of(doctype, name): @webnotes.whitelist() def get_price_list_currency(price_list): - return {"price_list_currency": webnotes.conn.get_value("Price List", price_list, - "currency")} \ No newline at end of file + price_list_currency = webnotes.conn.get_value("Price List", {"name": price_list, + "enabled": 1}, "currency") + + if not price_list_currency: + throw("{message}: {price_list} {disabled}".format(**{ + "message": _("Price List"), + "price_list": price_list, + "disabled": _("is disabled.") + })) + else: + return {"price_list_currency": price_list_currency} \ No newline at end of file diff --git a/erpnext/stock/doctype/item_price/item_price.py b/erpnext/stock/doctype/item_price/item_price.py index e2c9f2fcb04..cb07e706cf4 100644 --- a/erpnext/stock/doctype/item_price/item_price.py +++ b/erpnext/stock/doctype/item_price/item_price.py @@ -3,7 +3,7 @@ from __future__ import unicode_literals import webnotes -from webnotes import _ +from webnotes import throw, _ class ItemPriceDuplicateItem(webnotes.ValidationError): pass @@ -12,26 +12,36 @@ class DocType: self.doc, self.doclist = d, dl def validate(self): + self.validate_price_list() self.check_duplicate_item() self.update_price_list_details() self.update_item_details() - def update_price_list_details(self): - self.doc.buying, self.doc.selling, self.doc.currency = webnotes.conn.get_value("Price List", - self.doc.price_list, ["buying", "selling", "currency"]) - - def update_item_details(self): - self.doc.item_name, self.doc.item_description = webnotes.conn.get_value("Item", - self.doc.item_code, ["item_name", "description"]) + def validate_price_list(self): + enabled = webnotes.conn.get_value("Price List", self.doc.price_list, "enabled") + if not enabled: + throw("{message}: {price_list} {disabled}".format(**{ + "message": _("Price List"), + "price_list": self.doc.price_list, + "disabled": _("is disabled.") + })) def check_duplicate_item(self): if webnotes.conn.sql("""select name from `tabItem Price` where item_code=%s and price_list=%s and name!=%s""", (self.doc.item_code, self.doc.price_list, self.doc.name)): - webnotes.throw("{duplicate_item}: {item_code}, {already}: {price_list}".format(**{ + throw("{duplicate_item}: {item_code}, {already}: {price_list}".format(**{ "duplicate_item": _("Duplicate Item"), "item_code": self.doc.item_code, "already": _("already available in Price List"), "price_list": self.doc.price_list }), ItemPriceDuplicateItem) + + def update_price_list_details(self): + self.doc.buying, self.doc.selling, self.doc.currency = webnotes.conn.get_value("Price List", + {"name": self.doc.price_list, "enabled": 1}, ["buying", "selling", "currency"]) + + def update_item_details(self): + self.doc.item_name, self.doc.item_description = webnotes.conn.get_value("Item", + self.doc.item_code, ["item_name", "description"]) \ No newline at end of file diff --git a/erpnext/stock/doctype/price_list/price_list.txt b/erpnext/stock/doctype/price_list/price_list.txt index 41d9c47400c..7f8b3a192e4 100644 --- a/erpnext/stock/doctype/price_list/price_list.txt +++ b/erpnext/stock/doctype/price_list/price_list.txt @@ -2,7 +2,7 @@ { "creation": "2013-01-25 11:35:09", "docstatus": 0, - "modified": "2014-01-20 17:48:59", + "modified": "2014-01-20 17:50:00", "modified_by": "Administrator", "owner": "Administrator" }, @@ -41,6 +41,18 @@ "doctype": "DocType", "name": "Price List" }, + { + "default": "1", + "doctype": "DocField", + "fieldname": "enabled", + "fieldtype": "Check", + "label": "Enabled" + }, + { + "doctype": "DocField", + "fieldname": "sb_1", + "fieldtype": "Section Break" + }, { "doctype": "DocField", "fieldname": "price_list_name", diff --git a/erpnext/stock/doctype/price_list/test_price_list.py b/erpnext/stock/doctype/price_list/test_price_list.py index bdcacc34528..803be27e5ca 100644 --- a/erpnext/stock/doctype/price_list/test_price_list.py +++ b/erpnext/stock/doctype/price_list/test_price_list.py @@ -11,6 +11,7 @@ test_records = [ { "doctype": "Price List", "price_list_name": "_Test Price List", + "enabled": 1, "currency": "INR", "selling": 1 }, @@ -24,6 +25,7 @@ test_records = [ { "doctype": "Price List", "price_list_name": "_Test Price List 2", + "enabled": 1, "currency": "INR", "selling": 1 }, @@ -37,6 +39,7 @@ test_records = [ { "doctype": "Price List", "price_list_name": "_Test Price List India", + "enabled": 1, "currency": "INR", "selling": 1 }, @@ -50,6 +53,7 @@ test_records = [ { "doctype": "Price List", "price_list_name": "_Test Price List Rest of the World", + "enabled": 1, "currency": "USD", "selling": 1 }, diff --git a/erpnext/stock/doctype/warehouse/warehouse.py b/erpnext/stock/doctype/warehouse/warehouse.py index 7729b2e59e8..0f2d138a062 100644 --- a/erpnext/stock/doctype/warehouse/warehouse.py +++ b/erpnext/stock/doctype/warehouse/warehouse.py @@ -4,7 +4,7 @@ from __future__ import unicode_literals import webnotes from webnotes.utils import cint, validate_email_add -from webnotes import msgprint, _ +from webnotes import throw, msgprint, _ class DocType: def __init__(self, doc, doclist=[]): @@ -18,7 +18,7 @@ class DocType: def validate(self): if self.doc.email_id and not validate_email_add(self.doc.email_id): - msgprint("Please enter valid Email Id", raise_exception=1) + throw(_("Please enter valid Email Id")) self.update_parent_account() @@ -76,8 +76,8 @@ class DocType: for d in bins: if d['actual_qty'] or d['reserved_qty'] or d['ordered_qty'] or \ d['indented_qty'] or d['projected_qty'] or d['planned_qty']: - msgprint("""Warehouse: %s can not be deleted as qty exists for item: %s""" - % (self.doc.name, d['item_code']), raise_exception=1) + throw("""Warehouse: %s can not be deleted as qty exists for item: %s""" + % (self.doc.name, d['item_code'])) else: webnotes.conn.sql("delete from `tabBin` where name = %s", d['name']) @@ -88,8 +88,8 @@ class DocType: if webnotes.conn.sql("""select name from `tabStock Ledger Entry` where warehouse = %s""", self.doc.name): - msgprint("""Warehouse can not be deleted as stock ledger entry - exists for this warehouse.""", raise_exception=1) + throw(_("""Warehouse can not be deleted as stock ledger entry + exists for this warehouse.""")) def before_rename(self, olddn, newdn, merge=False): # Add company abbr if not provided @@ -97,8 +97,8 @@ class DocType: new_warehouse = get_name_with_abbr(newdn, self.doc.company) if merge: - if not webnotes.conn.exists("Warehouse", newdn): - webnotes.throw(_("Warehouse ") + newdn +_(" does not exists")) + if not webnotes.conn.exists("Warehouse", new_warehouse): + webnotes.throw(_("Warehouse ") + new_warehouse +_(" does not exists")) if self.doc.company != webnotes.conn.get_value("Warehouse", new_warehouse, "company"): webnotes.throw(_("Both Warehouse must belong to same Company")) diff --git a/erpnext/stock/report/item_prices/item_prices.py b/erpnext/stock/report/item_prices/item_prices.py index 5eee7df42d8..323277dc0b8 100644 --- a/erpnext/stock/report/item_prices/item_prices.py +++ b/erpnext/stock/report/item_prices/item_prices.py @@ -15,8 +15,8 @@ def execute(filters=None): bom_rate = get_item_bom_rate() val_rate_map = get_valuation_rate() + from erpnext.accounts.utils import get_currency_precision precision = get_currency_precision() or 2 - data = [] for item in sorted(item_map): data.append([item, item_map[item]["item_name"], @@ -30,14 +30,6 @@ def execute(filters=None): ]) return columns, data - -def get_currency_precision(): - company_currency = webnotes.conn.get_value("Company", - webnotes.conn.get_default("company"), "default_currency") - currency_format = webnotes.conn.get_value("Currency", company_currency, "number_format") - - from webnotes.utils import get_number_format_info - return get_number_format_info(currency_format)[2] def get_columns(filters): """return columns based on filters""" @@ -65,9 +57,10 @@ def get_price_list(): rate = {} - price_list = webnotes.conn.sql("""select item_code, buying, selling, - concat(price_list, " - ", currency, " ", ref_rate) as price - from `tabItem Price`""", as_dict=1) + price_list = webnotes.conn.sql("""select ip.item_code, ip.buying, ip.selling, + concat(ip.price_list, " - ", ip.currency, " ", ip.ref_rate) as price + from `tabItem Price` ip, `tabPrice List` pl + where ip.price_list=pl.name and pl.enabled=1""", as_dict=1) for j in price_list: if j.price: