From 2f20a7ac96c4ff5621815e8566966e29715297e5 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Mon, 1 Apr 2013 17:23:43 +0530 Subject: [PATCH] [patch][serial no] for striped serial nos --- patches/april_2013/__init__.py | 0 .../p01_update_serial_no_valuation_rate.py | 26 +++++++++++++++++++ .../march_2013/p07_update_valuation_rate.py | 4 +-- .../p10_update_against_expense_account.py | 8 +++--- patches/patch_list.py | 1 + .../landed_cost_wizard/landed_cost_wizard.py | 11 ++++---- stock/doctype/stock_ledger/stock_ledger.py | 5 ++-- 7 files changed, 42 insertions(+), 13 deletions(-) create mode 100644 patches/april_2013/__init__.py create mode 100644 patches/april_2013/p01_update_serial_no_valuation_rate.py diff --git a/patches/april_2013/__init__.py b/patches/april_2013/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/patches/april_2013/p01_update_serial_no_valuation_rate.py b/patches/april_2013/p01_update_serial_no_valuation_rate.py new file mode 100644 index 0000000000..1058473478 --- /dev/null +++ b/patches/april_2013/p01_update_serial_no_valuation_rate.py @@ -0,0 +1,26 @@ +import webnotes +from webnotes.utils import cstr +from stock.stock_ledger import update_entries_after + +def execute(): + pr_items = webnotes.conn.sql("""select item_code, warehouse, serial_no, valuation_rate, name + from `tabPurchase Receipt Item` where ifnull(serial_no, '') != '' and docstatus = 1""", + as_dict=True) + + item_warehouse = [] + + for item in pr_items: + serial_nos = cstr(item.serial_no).strip().split("\n") + serial_nos = map(lambda x: x.strip(), serial_nos) + + webnotes.conn.sql("""update `tabPurchase Receipt Item` set serial_no = %s + where name = %s""", ("\n".join(serial_nos), item.name)) + + webnotes.conn.sql("""update `tabSerial No` set purchase_rate = %s where name in (%s)""" % + ('%s', ', '.join(['%s']*len(serial_nos))), tuple([item.valuation_rate] + serial_nos)) + + if [item.item_code, item.warehouse] not in item_warehouse: + item_warehouse.append([item.item_code, item.warehouse]) + + for d in item_warehouse: + update_entries_after({"item_code": d[0], "warehouse": d[1] }) \ No newline at end of file diff --git a/patches/march_2013/p07_update_valuation_rate.py b/patches/march_2013/p07_update_valuation_rate.py index 51e556b328..7cc3e1137a 100644 --- a/patches/march_2013/p07_update_valuation_rate.py +++ b/patches/march_2013/p07_update_valuation_rate.py @@ -8,6 +8,6 @@ def execute(): pi.update_raw_material_cost() pi.update_valuation_rate("entries") for item in pi.doclist.get({"parentfield": "entries"}): - webnotes.conn.set_value("Purchase Invoice Item", item.name, "valuation_rate", - item.valuation_rate) + webnotes.conn.sql("""update `tabPurchase Invoice Item` set valuation_rate = %s + where name = %s""", (item.valuation_rate, item.name)) \ No newline at end of file diff --git a/patches/march_2013/p10_update_against_expense_account.py b/patches/march_2013/p10_update_against_expense_account.py index d1bad5cfed..3506ac4936 100644 --- a/patches/march_2013/p10_update_against_expense_account.py +++ b/patches/march_2013/p10_update_against_expense_account.py @@ -5,7 +5,7 @@ def execute(): where docstatus = 1 and ifnull(against_expense_account, '') = ''""") for pi in pi_list: - pi_obj = get_obj("Purchase Invoice", pi[0], with_children=1) - pi_obj.set_against_expense_account() - webnotes.conn.set_value("Purchase Invoice", pi[0], - "against_expense_account", pi_obj.doc.against_expense_account) \ No newline at end of file + pi_obj = get_obj("Purchase Invoice", pi[0], with_children=1) + pi_obj.set_against_expense_account() + webnotes.conn.sql("""update `tabPurchase Invoice` set against_expense_account = %s + where name = %s""", (pi_obj.doc.against_expense_account, pi[0])) \ No newline at end of file diff --git a/patches/patch_list.py b/patches/patch_list.py index 905ea290c9..544fc957e9 100644 --- a/patches/patch_list.py +++ b/patches/patch_list.py @@ -227,4 +227,5 @@ patch_list = [ "patches.march_2013.p10_update_against_expense_account", "patches.march_2013.p11_update_attach_files", "patches.march_2013.p12_set_item_tax_rate_in_json", + "patches.april_2013.p01_update_serial_no_valuation_rate", ] \ No newline at end of file diff --git a/stock/doctype/landed_cost_wizard/landed_cost_wizard.py b/stock/doctype/landed_cost_wizard/landed_cost_wizard.py index 1fb7b9a016..e5fd12ca62 100644 --- a/stock/doctype/landed_cost_wizard/landed_cost_wizard.py +++ b/stock/doctype/landed_cost_wizard/landed_cost_wizard.py @@ -212,7 +212,8 @@ class DocType: if flt(d.qty): d.valuation_rate = (flt(d.purchase_rate) + (flt(d.rm_supp_cost)/flt(d.qty)) + (flt(d.item_tax_amount)/flt(d.qty))) / flt(d.conversion_factor) d.save() - self.update_serial_no(d.serial_no, d.valuation_rate) + if d.serial_no: + self.update_serial_no(d.serial_no, d.valuation_rate) sql("update `tabStock Ledger Entry` set incoming_rate = '%s' where voucher_detail_no = '%s'"%(flt(d.valuation_rate), d.name)) res = sql("""select item_code, warehouse, posting_date, posting_time @@ -226,10 +227,10 @@ class DocType: def update_serial_no(self, sr_no, rate): """ update valuation rate in serial no""" - sr_no = cstr(sr_no).split('\n') - for d in sr_no: - sql("update `tabSerial No` set purchase_rate = %s where name = %s", (rate, d)) - + sr_no = map(lambda x: x.strip(), cstr(sr_no).split('\n')) + + webnotes.conn.sql("""update `tabSerial No` set purchase_rate = %s where name in (%s)""" % + ('%s', ', '.join(['%s']*len(sr_no))), tuple([rate] + sr_no)) def update_landed_cost(self): """ diff --git a/stock/doctype/stock_ledger/stock_ledger.py b/stock/doctype/stock_ledger/stock_ledger.py index fcb4a54a47..a90ed9041b 100644 --- a/stock/doctype/stock_ledger/stock_ledger.py +++ b/stock/doctype/stock_ledger/stock_ledger.py @@ -38,10 +38,10 @@ class DocType: for d in getlist(obj.doclist, table_name): if d.serial_no: - d.serial_no = cstr(d.serial_no).strip().replace(',', '\n') + serial_nos = cstr(d.serial_no).strip().replace(',', '\n').split('\n') + d.serial_nos = ", ".join(map(lambda x: x.strip(), serial_nos)) d.save() - def validate_serial_no_warehouse(self, obj, fname): for d in getlist(obj.doclist, fname): wh = d.warehouse or d.s_warehouse @@ -84,6 +84,7 @@ class DocType: item_details = webnotes.conn.sql("""select item_group, warranty_period 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), as_dict=1) + webnotes.errprint([d.item_code, d.valuation_rate]) s.purchase_document_type = obj.doc.doctype s.purchase_document_no = obj.doc.name