Merge branch 'master' of github.com:webnotes/erpnext

This commit is contained in:
Rushabh Mehta 2013-09-04 14:43:12 +05:30
commit 4515805b9a
5 changed files with 47 additions and 6 deletions

View File

@ -259,4 +259,5 @@ patch_list = [
"execute:webnotes.bean('Style Settings').save() #2013-08-20", "execute:webnotes.bean('Style Settings').save() #2013-08-20",
"patches.september_2013.p01_fix_buying_amount_gl_entries", "patches.september_2013.p01_fix_buying_amount_gl_entries",
"patches.september_2013.p01_update_communication", "patches.september_2013.p01_update_communication",
"patches.september_2013.p02_fix_serial_no_status",
] ]

View File

@ -0,0 +1,30 @@
# 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 sr in serial_nos:
serial_no = sr.strip()
if serial_no:
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()

View File

@ -343,10 +343,14 @@ class DocType(StockController):
def update_stock_ledger(self, is_cancelled=0): def update_stock_ledger(self, is_cancelled=0):
self.values = [] self.values = []
for d in getlist(self.doclist, 'mtn_details'): 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) self.add_to_values(d, cstr(d.s_warehouse), -flt(d.transfer_qty), is_cancelled)
if cstr(d.t_warehouse): if cstr(d.t_warehouse):
self.add_to_values(d, cstr(d.t_warehouse), flt(d.transfer_qty), is_cancelled) 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, get_obj('Stock Ledger', 'Stock Ledger').update_stock(self.values,
self.doc.amended_from and 'Yes' or 'No') self.doc.amended_from and 'Yes' or 'No')

View File

@ -648,6 +648,9 @@ class TestStockEntry(unittest.TestCase):
self.assertTrue(webnotes.conn.exists("Serial No", "ABCD")) self.assertTrue(webnotes.conn.exists("Serial No", "ABCD"))
self.assertTrue(webnotes.conn.exists("Serial No", "EFGH")) self.assertTrue(webnotes.conn.exists("Serial No", "EFGH"))
se.cancel()
self.assertFalse(webnotes.conn.get_value("Serial No", "ABCD", "warehouse"))
def test_serial_no_not_exists(self): def test_serial_no_not_exists(self):
se = webnotes.bean(copy=test_records[0]) se = webnotes.bean(copy=test_records[0])
se.doc.purpose = "Material Issue" se.doc.purpose = "Material Issue"
@ -699,6 +702,9 @@ class TestStockEntry(unittest.TestCase):
se.insert() se.insert()
se.submit() se.submit()
self.assertTrue(webnotes.conn.get_value("Serial No", serial_no, "warehouse"), "_Test Warehouse 1 - _TC") self.assertTrue(webnotes.conn.get_value("Serial No", serial_no, "warehouse"), "_Test Warehouse 1 - _TC")
se.cancel()
self.assertTrue(webnotes.conn.get_value("Serial No", serial_no, "warehouse"), "_Test Warehouse - _TC")
def test_serial_warehouse_error(self): def test_serial_warehouse_error(self):
make_serialized_item() make_serialized_item()
@ -720,7 +726,6 @@ class TestStockEntry(unittest.TestCase):
serial_no = get_serial_nos(se.doclist[1].serial_no)[0] serial_no = get_serial_nos(se.doclist[1].serial_no)[0]
self.assertFalse(webnotes.conn.get_value("Serial No", serial_no, "warehouse")) self.assertFalse(webnotes.conn.get_value("Serial No", serial_no, "warehouse"))
self.assertTrue(webnotes.conn.get_value("Serial No", serial_no, "status"), "Not Available")
def make_serialized_item(): def make_serialized_item():
se = webnotes.bean(copy=test_records[0]) se = webnotes.bean(copy=test_records[0])

View File

@ -119,13 +119,14 @@ class DocType(DocListController):
if self.doc.actual_qty < 0: if self.doc.actual_qty < 0:
if sr.doc.warehouse!=self.doc.warehouse: if sr.doc.warehouse!=self.doc.warehouse:
webnotes.throw(_("Warehouse does not belong to Item") + \ webnotes.throw(_("Serial No") + ": " + serial_no +
(": %s (%s)" % (self.doc.item_code, serial_no)), SerialNoWarehouseError) _(" does not belong to Warehouse") + ": " + self.doc.warehouse,
SerialNoWarehouseError)
if self.doc.voucher_type in ("Delivery Note", "Sales Invoice") \ if self.doc.voucher_type in ("Delivery Note", "Sales Invoice") \
and sr.doc.status != "Available": and sr.doc.status != "Available":
webnotes.throw(_("Serial No status must be 'Available' to Deliver") + \ webnotes.throw(_("Serial No status must be 'Available' to Deliver")
": " + serial_no, SerialNoStatusError) + ": " + serial_no, SerialNoStatusError)
sr.doc.warehouse = None sr.doc.warehouse = None