[fix] [minor] serial no status update for material transfer
diff --git a/patches/patch_list.py b/patches/patch_list.py
index 320614a..ff28031 100644
--- a/patches/patch_list.py
+++ b/patches/patch_list.py
@@ -259,4 +259,5 @@
"execute:webnotes.bean('Style Settings').save() #2013-08-20",
"patches.september_2013.p01_fix_buying_amount_gl_entries",
"patches.september_2013.p01_update_communication",
+ "patches.september_2013.p02_fix_serial_no_status",
]
\ No newline at end of file
diff --git a/patches/september_2013/p02_fix_serial_no_status.py b/patches/september_2013/p02_fix_serial_no_status.py
new file mode 100644
index 0000000..8c91d72
--- /dev/null
+++ b/patches/september_2013/p02_fix_serial_no_status.py
@@ -0,0 +1,28 @@
+# 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():
+ stock_entries = webnotes.conn.sql("""select ste_item.serial_no, ste.name
+ from `tabStock Entry Detail` ste_item, `tabStock Entry` ste
+ where ste.name = ste_item.parent
+ and ifnull(ste_item.serial_no, '') != ''
+ and ste.purpose='Material Transfer'
+ and ste.modified>='2013-08-14'
+ order by ste.posting_date desc, ste.posting_time desc, ste.name desc""", as_dict=1)
+
+ for d in stock_entries:
+ serial_nos = d.serial_no.split("\n")
+ for serial_no in serial_nos:
+ serial_bean = webnotes.bean("Serial No", serial_no)
+ if serial_bean.doc.status == "Not Available":
+ latest_sle = webnotes.conn.sql("""select voucher_no from `tabStock Ledger Entry`
+ where item_code=%s and warehouse=%s and serial_no like %s
+ order by name desc limit 1""",
+ (serial_bean.doc.item_code, serial_bean.doc.warehouse, "%%%s%%" % serial_no))
+
+ if latest_sle and latest_sle[0][0] == d.name:
+ serial_bean.doc.status = "Available"
+ serial_bean.save()
\ No newline at end of file
diff --git a/stock/doctype/stock_entry/stock_entry.py b/stock/doctype/stock_entry/stock_entry.py
index e3fc67e..6a61461 100644
--- a/stock/doctype/stock_entry/stock_entry.py
+++ b/stock/doctype/stock_entry/stock_entry.py
@@ -343,10 +343,14 @@
def update_stock_ledger(self, is_cancelled=0):
self.values = []
for d in getlist(self.doclist, 'mtn_details'):
- if cstr(d.s_warehouse):
+ if cstr(d.s_warehouse) and not is_cancelled:
self.add_to_values(d, cstr(d.s_warehouse), -flt(d.transfer_qty), is_cancelled)
+
if cstr(d.t_warehouse):
self.add_to_values(d, cstr(d.t_warehouse), flt(d.transfer_qty), is_cancelled)
+
+ if cstr(d.s_warehouse) and is_cancelled:
+ self.add_to_values(d, cstr(d.s_warehouse), -flt(d.transfer_qty), is_cancelled)
get_obj('Stock Ledger', 'Stock Ledger').update_stock(self.values,
self.doc.amended_from and 'Yes' or 'No')
diff --git a/stock/doctype/stock_ledger_entry/stock_ledger_entry.py b/stock/doctype/stock_ledger_entry/stock_ledger_entry.py
index 58fc828..2f36538 100644
--- a/stock/doctype/stock_ledger_entry/stock_ledger_entry.py
+++ b/stock/doctype/stock_ledger_entry/stock_ledger_entry.py
@@ -119,13 +119,14 @@
if self.doc.actual_qty < 0:
if sr.doc.warehouse!=self.doc.warehouse:
- webnotes.throw(_("Warehouse does not belong to Item") + \
- (": %s (%s)" % (self.doc.item_code, serial_no)), SerialNoWarehouseError)
+ webnotes.throw(_("Serial No") + ": " + serial_no +
+ _(" does not belong to Warehouse") + ": " + self.doc.warehouse,
+ SerialNoWarehouseError)
if self.doc.voucher_type in ("Delivery Note", "Sales Invoice") \
and sr.doc.status != "Available":
- webnotes.throw(_("Serial No status must be 'Available' to Deliver") + \
- ": " + serial_no, SerialNoStatusError)
+ webnotes.throw(_("Serial No status must be 'Available' to Deliver")
+ + ": " + serial_no, SerialNoStatusError)
sr.doc.warehouse = None