diff --git a/accounts/doctype/sales_invoice/pos.js b/accounts/doctype/sales_invoice/pos.js index f04328fd09c..8837aed14b0 100644 --- a/accounts/doctype/sales_invoice/pos.js +++ b/accounts/doctype/sales_invoice/pos.js @@ -193,7 +193,7 @@ erpnext.POS = Class.extend({ ', { item_code: obj.name, - item_price: format_currency(obj.ref_rate, obj.ref_currency), + item_price: format_currency(obj.ref_rate, obj.currency), item_name: obj.name===obj.item_name ? "" : obj.item_name, item_image: image })).appendTo($wrap); diff --git a/accounts/doctype/sales_invoice/pos.py b/accounts/doctype/sales_invoice/pos.py index 1b867cb8dbc..08340f76c5e 100644 --- a/accounts/doctype/sales_invoice/pos.py +++ b/accounts/doctype/sales_invoice/pos.py @@ -15,11 +15,14 @@ def get_items(price_list, item=None, item_group=None): if item: condition = "and i.name='%s'" % item - return webnotes.conn.sql("""select - i.name, i.item_name, i.image, ip.ref_rate, ip.ref_currency - from `tabItem` i LEFT JOIN `tabItem Price` ip - ON ip.parent=i.name - and ip.price_list=%s + return webnotes.conn.sql("""select i.name, i.item_name, i.image, + pl_items.ref_rate, pl_items.currency + from `tabItem` i LEFT JOIN + (select ip.item_code, ip.ref_rate, pl.currency from + `tabItem Price` ip, `tabPrice List` pl + where ip.parent=%s and ip.parent = pl.name) pl_items + ON + pl_items.item_code=i.name where i.is_sales_item='Yes'%s""" % ('%s', condition), (price_list), as_dict=1) diff --git a/buying/doctype/purchase_common/purchase_common.js b/buying/doctype/purchase_common/purchase_common.js index 5785b1a9d57..2dfe65515a8 100644 --- a/buying/doctype/purchase_common/purchase_common.js +++ b/buying/doctype/purchase_common/purchase_common.js @@ -24,16 +24,6 @@ erpnext.buying.BuyingController = erpnext.TransactionController.extend({ filters: { 'buying_or_selling': "Buying" } } }); - - this.frm.set_query("price_list_currency", function() { - return{ - query: "controllers.queries.get_price_list_currency", - filters: { - 'price_list': me.frm.doc.buying_price_list, - 'buying_or_selling': "Buying" - } - } - }); } $.each([["supplier", "supplier"], @@ -152,7 +142,7 @@ erpnext.buying.BuyingController = erpnext.TransactionController.extend({ }, buying_price_list: function() { - this.get_price_list_currency("buying"); + this.get_price_list_currency("Buying"); }, import_ref_rate: function(doc, cdt, cdn) { diff --git a/buying/utils.py b/buying/utils.py index 33326d9e59c..f4fb2f3ff87 100644 --- a/buying/utils.py +++ b/buying/utils.py @@ -89,12 +89,15 @@ 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 = item_bean.doclist.get({ - "parentfield": "ref_rate_details", - "price_list": args.buying_price_list, - "ref_currency": args.price_list_currency, - "buying_or_selling": "Buying"}) + price_list_rate = webnotes.conn.sql("""select ip.ref_rate from `tabItem Price` ip, + `tabPrice List` pl where ip.parent = pl.name and ip.parent=%s and + ip.item_code=%s and pl.buying_or_selling='Buying'""", + (args.buying_price_list, args.item_code), as_dict=1) + if price_list_rate: + from utilities.transaction_base import validate_currency + validate_currency(args, item_bean.doc, meta) + out.import_ref_rate = \ flt(price_list_rate[0].ref_rate * args.plc_conversion_rate / args.conversion_rate) diff --git a/controllers/accounts_controller.py b/controllers/accounts_controller.py index eb71f21ce73..1247e668c09 100644 --- a/controllers/accounts_controller.py +++ b/controllers/accounts_controller.py @@ -59,13 +59,13 @@ class AccountsController(TransactionBase): # TODO - change this, since price list now has only one currency allowed if self.meta.get_field(fieldname) and self.doc.fields.get(fieldname): - if not self.doc.price_list_currency: - self.doc.fields.update(get_price_list_currency(self.doc.fields.get(fieldname))) + self.doc.fields.update(get_price_list_currency(self.doc.fields.get(fieldname))) if self.doc.price_list_currency: if self.doc.price_list_currency == company_currency: self.doc.plc_conversion_rate = 1.0 - elif not self.doc.plc_conversion_rate: + elif not self.doc.plc_conversion_rate or \ + (flt(self.doc.plc_conversion_rate)==1 and company_currency!= self.doc.price_list_currency): exchange = self.doc.price_list_currency + "-" + company_currency self.doc.plc_conversion_rate = flt(webnotes.conn.get_value("Currency Exchange", exchange, "exchange_rate")) diff --git a/controllers/queries.py b/controllers/queries.py index 02c992b729a..637d5e18cd8 100644 --- a/controllers/queries.py +++ b/controllers/queries.py @@ -157,14 +157,6 @@ def get_project_name(doctype, txt, searchfield, start, page_len, filters): order by `tabProject`.name asc limit %(start)s, %(page_len)s """ % {'cond': cond,'txt': "%%%s%%" % txt, 'mcond':get_match_cond(doctype, searchfield),'start': start, 'page_len': page_len}) - -def get_price_list_currency(doctype, txt, searchfield, start, page_len, filters): - return webnotes.conn.sql("""select ref_currency from `tabItem Price` - where price_list = %s and buying_or_selling = %s - and `%s` like %s order by ref_currency asc limit %s, %s""" % - ("%s", "%s", searchfield, "%s", "%s", "%s"), - (filters["price_list"], filters['buying_or_selling'], "%%%s%%" % txt, - start, page_len)) def get_delivery_notes_to_be_billed(doctype, txt, searchfield, start, page_len, filters): return webnotes.conn.sql("""select `tabDelivery Note`.name, `tabDelivery Note`.customer_name diff --git a/manufacturing/doctype/bom/bom.py b/manufacturing/doctype/bom/bom.py index cb4b8c52365..9a566123c78 100644 --- a/manufacturing/doctype/bom/bom.py +++ b/manufacturing/doctype/bom/bom.py @@ -121,8 +121,8 @@ class DocType: elif self.doc.rm_cost_as_per == "Price List": if not self.doc.buying_price_list: webnotes.throw(_("Please select Price List")) - rate = webnotes.conn.get_value("Item Price", {"price_list": self.doc.buying_price_list, - "parent": arg["item_code"]}, "ref_rate") or 0 + rate = webnotes.conn.get_value("Item Price", {"parent": self.doc.buying_price_list, + "item_code": arg["item_code"]}, "ref_rate") or 0 elif self.doc.rm_cost_as_per == 'Standard Rate': rate = arg['standard_rate'] diff --git a/patches/january_2013/purchase_price_list.py b/patches/january_2013/purchase_price_list.py deleted file mode 100644 index 89509cf0874..00000000000 --- a/patches/january_2013/purchase_price_list.py +++ /dev/null @@ -1,12 +0,0 @@ -# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. -# License: GNU General Public License v3. See license.txt - -import webnotes - -def execute(): - webnotes.reload_doc("stock", "doctype", "item_price") - - # check for selling - webnotes.conn.sql("""update `tabItem Price` set buying_or_selling = "Selling" - where ifnull(buying_or_selling, '')=''""") - \ No newline at end of file diff --git a/patches/june_2013/p03_buying_selling_for_price_list.py b/patches/june_2013/p03_buying_selling_for_price_list.py index c71646a8f50..1998d7ea624 100644 --- a/patches/june_2013/p03_buying_selling_for_price_list.py +++ b/patches/june_2013/p03_buying_selling_for_price_list.py @@ -6,7 +6,7 @@ from webnotes.utils import cint def execute(): webnotes.reload_doc("setup", "doctype", "price_list") - webnotes.reload_doc("stock", "doctype", "item_price") + webnotes.reload_doc("setup", "doctype", "item_price") for price_list in webnotes.conn.sql_list("""select name from `tabPrice List`"""): buying, selling = False, False @@ -15,7 +15,5 @@ def execute(): buying = buying or cint(b) selling = selling or cint(s) - buying_or_selling = "Selling" if selling else "Buying" + buying_or_selling = "Buying" if buying else "Selling" webnotes.conn.set_value("Price List", price_list, "buying_or_selling", buying_or_selling) - webnotes.conn.sql("""update `tabItem Price` set buying_or_selling=%s - where price_list_name=%s""", (buying_or_selling, price_list)) diff --git a/patches/patch_list.py b/patches/patch_list.py index 3c13e0eb471..7d9f839c2e1 100644 --- a/patches/patch_list.py +++ b/patches/patch_list.py @@ -121,7 +121,6 @@ patch_list = [ "patches.january_2013.update_country_info", "patches.january_2013.remove_tds_entry_from_gl_mapper", "patches.january_2013.update_number_format", - "patches.january_2013.purchase_price_list", "execute:webnotes.reload_doc('core', 'doctype', 'print_format') #2013-01", "execute:webnotes.reload_doc('accounts','Print Format','Payment Receipt Voucher')", "patches.january_2013.update_fraction_for_usd", @@ -263,4 +262,5 @@ patch_list = [ "patches.september_2013.p01_update_communication", "execute:webnotes.reload_doc('setup', 'doctype', 'features_setup') # 2013-09-05", "patches.september_2013.p02_fix_serial_no_status", + "patches.september_2013.p03_modify_item_price_include_in_price_list", ] \ No newline at end of file diff --git a/patches/september_2013/p03_modify_item_price_include_in_price_list.py b/patches/september_2013/p03_modify_item_price_include_in_price_list.py new file mode 100644 index 00000000000..f29f8f5bf06 --- /dev/null +++ b/patches/september_2013/p03_modify_item_price_include_in_price_list.py @@ -0,0 +1,18 @@ +# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. +# License: GNU General Public License v3. See license.txt + +from __future__ import unicode_literals +import webnotes + +def execute(): + webnotes.reload_doc("setup", "doctype", "price_list") + webnotes.reload_doc("setup", "doctype", "item_price") + webnotes.conn.sql("""update `tabItem Price` set parenttype='Price List', + parentfield='item_prices', item_code=parent""") + + # re-arranging idx of items + webnotes.conn.sql("""update `tabItem Price` set parent=price_list, idx=0""") + for pl in webnotes.conn.sql("""select name from `tabPrice List`"""): + webnotes.conn.sql("""set @name=0""") + webnotes.conn.sql("""update `tabItem Price` set idx = @name := IF(ISNULL( @name ), 0, @name + 1) + where idx=0 and parent=%s""", pl[0]) \ No newline at end of file diff --git a/public/js/transaction.js b/public/js/transaction.js index 0ff957a820b..3f0f9e5a0d7 100644 --- a/public/js/transaction.js +++ b/public/js/transaction.js @@ -149,6 +149,7 @@ erpnext.TransactionController = erpnext.stock.StockController.extend({ }, price_list_currency: function() { + var me=this; this.set_dynamic_labels(); var company_currency = this.get_company_currency(); @@ -156,7 +157,7 @@ erpnext.TransactionController = erpnext.stock.StockController.extend({ this.get_exchange_rate(this.frm.doc.price_list_currency, company_currency, function(exchange_rate) { if(exchange_rate) { - me.frm.set_value("price_list_currency", exchange_rate); + me.frm.set_value("plc_conversion_rate", exchange_rate); me.plc_conversion_rate(); } }); @@ -348,8 +349,6 @@ erpnext.TransactionController = erpnext.stock.StockController.extend({ } }); - console.log(distinct_items); - var rows = $.map(distinct_items, function(item) { var item_tax_record = item_tax[item.item_code || item.item_name]; if(!item_tax_record) { return null; } diff --git a/selling/doctype/sales_bom/sales_bom.py b/selling/doctype/sales_bom/sales_bom.py index 15d8fd1e5b7..2e56f2a10fb 100644 --- a/selling/doctype/sales_bom/sales_bom.py +++ b/selling/doctype/sales_bom/sales_bom.py @@ -31,13 +31,9 @@ class DocType: def get_item_details(self, name): det = webnotes.conn.sql("""select description, stock_uom from `tabItem` where name = %s""", name) - rate = webnotes.conn.sql("""select ref_rate from `tabItem Price` - where price_list = %s and parent = %s - and ref_currency = %s""", (self.doc.price_list, name, self.doc.currency)) return { 'description' : det and det[0][0] or '', - 'uom': det and det[0][1] or '', - 'rate': rate and flt(rate[0][0]) or 0.00 + 'uom': det and det[0][1] or '' } def check_duplicate(self, finder=0): diff --git a/selling/doctype/sales_bom_item/sales_bom_item.txt b/selling/doctype/sales_bom_item/sales_bom_item.txt index 1bd456b9e7d..9e880bc8cde 100644 --- a/selling/doctype/sales_bom_item/sales_bom_item.txt +++ b/selling/doctype/sales_bom_item/sales_bom_item.txt @@ -2,7 +2,7 @@ { "creation": "2013-05-23 16:55:51", "docstatus": 0, - "modified": "2013-07-10 14:54:19", + "modified": "2013-09-09 15:47:56", "modified_by": "Administrator", "owner": "Administrator" }, @@ -53,17 +53,18 @@ "label": "Description", "oldfieldname": "description", "oldfieldtype": "Text", - "print_width": "300px", - "width": "300px" + "print_width": "300px" }, { "doctype": "DocField", "fieldname": "rate", "fieldtype": "Float", - "in_list_view": 1, + "hidden": 1, + "in_list_view": 0, "label": "Rate", "oldfieldname": "rate", - "oldfieldtype": "Currency" + "oldfieldtype": "Currency", + "print_hide": 1 }, { "doctype": "DocField", diff --git a/selling/doctype/sales_common/sales_common.js b/selling/doctype/sales_common/sales_common.js index 0308dfcd259..dc58377e4bf 100644 --- a/selling/doctype/sales_common/sales_common.js +++ b/selling/doctype/sales_common/sales_common.js @@ -49,16 +49,6 @@ erpnext.selling.SellingController = erpnext.TransactionController.extend({ this.frm.set_query("selling_price_list", function() { return { filters: { buying_or_selling: "Selling" } }; }); - - this.frm.set_query("price_list_currency", function() { - return { - query: "controllers.queries.get_price_list_currency", - filters: { - price_list: me.frm.doc.selling_price_list, - buying_or_selling: "Selling" - } - }; - }); } if(!this.fname) { diff --git a/selling/utils.py b/selling/utils.py index ca995125d19..224944dd884 100644 --- a/selling/utils.py +++ b/selling/utils.py @@ -141,20 +141,19 @@ def _get_basic_details(args, item_bean, warehouse_fieldname): return out def _get_price_list_rate(args, item_bean, meta): - base_ref_rate = item_bean.doclist.get({ - "parentfield": "ref_rate_details", - "price_list": args.selling_price_list, - "ref_currency": args.price_list_currency, - "buying_or_selling": "Selling"}) + ref_rate = webnotes.conn.sql("""select ip.ref_rate from `tabItem Price` ip, + `tabPrice List` pl where ip.parent = pl.name and ip.parent=%s and + ip.item_code=%s and pl.buying_or_selling='Selling'""", + (args.selling_price_list, args.item_code), as_dict=1) - if not base_ref_rate: + if not ref_rate: return {} # found price list rate - now we can validate from utilities.transaction_base import validate_currency validate_currency(args, item_bean.doc, meta) - return {"ref_rate": flt(base_ref_rate[0].ref_rate) * flt(args.plc_conversion_rate) / flt(args.conversion_rate)} + return {"ref_rate": flt(ref_rate[0].ref_rate) * flt(args.plc_conversion_rate) / flt(args.conversion_rate)} def _get_item_discount(item_group, customer): parent_item_groups = [x[0] for x in webnotes.conn.sql("""SELECT parent.name diff --git a/setup/doctype/currency_exchange/currency_exchange.js b/setup/doctype/currency_exchange/currency_exchange.js index 5fd43050dfe..bf9c5163677 100644 --- a/setup/doctype/currency_exchange/currency_exchange.js +++ b/setup/doctype/currency_exchange/currency_exchange.js @@ -23,8 +23,6 @@ $.extend(cur_frm.cscript, { set_exchange_rate_label: function() { if(cur_frm.doc.from_currency && cur_frm.doc.to_currency) { var default_label = wn._(wn.meta.docfield_map[cur_frm.doctype]["exchange_rate"].label); - console.log(default_label + - repl(" (1 %(from_currency)s = [?] %(to_currency)s)", cur_frm.doc)); cur_frm.fields_dict.exchange_rate.set_label(default_label + repl(" (1 %(from_currency)s = [?] %(to_currency)s)", cur_frm.doc)); } diff --git a/stock/doctype/item_price/README.md b/setup/doctype/item_price/README.md similarity index 100% rename from stock/doctype/item_price/README.md rename to setup/doctype/item_price/README.md diff --git a/stock/doctype/item_price/__init__.py b/setup/doctype/item_price/__init__.py similarity index 100% rename from stock/doctype/item_price/__init__.py rename to setup/doctype/item_price/__init__.py diff --git a/stock/doctype/item_price/item_price.py b/setup/doctype/item_price/item_price.py similarity index 57% rename from stock/doctype/item_price/item_price.py rename to setup/doctype/item_price/item_price.py index 26d0f769688..3256c80d422 100644 --- a/stock/doctype/item_price/item_price.py +++ b/setup/doctype/item_price/item_price.py @@ -1,5 +1,7 @@ # Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. -# License: GNU General Public License v3. See license.txt +# MIT License. See license.txt + +# For license information, please see license.txt from __future__ import unicode_literals import webnotes diff --git a/stock/doctype/item_price/item_price.txt b/setup/doctype/item_price/item_price.txt similarity index 53% rename from stock/doctype/item_price/item_price.txt rename to setup/doctype/item_price/item_price.txt index 3a73a00602e..2964cd96f4c 100644 --- a/stock/doctype/item_price/item_price.txt +++ b/setup/doctype/item_price/item_price.txt @@ -2,7 +2,7 @@ { "creation": "2013-05-02 16:29:48", "docstatus": 0, - "modified": "2013-08-09 14:46:58", + "modified": "2013-09-11 12:38:24", "modified_by": "Administrator", "owner": "Administrator" }, @@ -11,18 +11,20 @@ "doctype": "DocType", "in_create": 0, "istable": 1, - "module": "Stock", + "module": "Setup", "name": "__common__", "read_only": 0 }, { "doctype": "DocField", + "in_filter": 1, "in_list_view": 1, "name": "__common__", "parent": "Item Price", "parentfield": "fields", "parenttype": "DocType", - "permlevel": 0 + "permlevel": 0, + "reqd": 1 }, { "doctype": "DocType", @@ -30,49 +32,22 @@ }, { "doctype": "DocField", - "fieldname": "price_list", + "fieldname": "item_code", "fieldtype": "Link", - "in_filter": 1, - "label": "Price List Name", + "label": "Item Code", "oldfieldname": "price_list_name", "oldfieldtype": "Select", - "options": "Price List", - "reqd": 1, + "options": "Item", "search_index": 1 }, { "doctype": "DocField", "fieldname": "ref_rate", "fieldtype": "Currency", - "in_filter": 1, "label": "Ref Rate", "oldfieldname": "ref_rate", "oldfieldtype": "Currency", - "options": "ref_currency", - "reqd": 1, + "options": "currency", "search_index": 0 - }, - { - "doctype": "DocField", - "fieldname": "ref_currency", - "fieldtype": "Link", - "in_filter": 1, - "label": "Currency", - "oldfieldname": "ref_currency", - "oldfieldtype": "Select", - "options": "Currency", - "read_only": 1, - "reqd": 0, - "search_index": 1 - }, - { - "default": "Selling", - "doctype": "DocField", - "fieldname": "buying_or_selling", - "fieldtype": "Select", - "label": "Valid for Buying or Selling?", - "options": "Buying\nSelling", - "read_only": 1, - "reqd": 1 } ] \ No newline at end of file diff --git a/setup/doctype/price_list/price_list.js b/setup/doctype/price_list/price_list.js index 5de8da5585e..f3adc727579 100644 --- a/setup/doctype/price_list/price_list.js +++ b/setup/doctype/price_list/price_list.js @@ -3,44 +3,6 @@ $.extend(cur_frm.cscript, { onload: function() { - cur_frm.cscript.show_item_prices(); erpnext.add_for_territory(); }, - - refresh: function(doc) { - cur_frm.set_intro(""); - if(doc.__islocal) { - cur_frm.toggle_display("item_prices_section", false); - cur_frm.set_intro("Save this list to begin."); - return; - } else { - cur_frm.cscript.show_item_prices(); - } - }, - - show_item_prices: function() { - var item_price = wn.model.get("Item Price", {price_list: cur_frm.doc.name}); - - var show = item_price && item_price.length; - - cur_frm.toggle_display("item_prices_section", show); - $(cur_frm.fields_dict.item_prices.wrapper).empty(); - if (!show) return; - - var out = '
| ' + wn._("Item Code") + ' | \ -' + wn._("Price") + ' | \ -
|---|---|
| ' + d.parent + ' | ' - + '' + format_currency(d.ref_rate, d.ref_currency) + ' | ' - + '