bin fixes for reposting future entries
diff --git a/erpnext/stock/doctype/bin/bin.py b/erpnext/stock/doctype/bin/bin.py
index d1cf65e..9265af0 100644
--- a/erpnext/stock/doctype/bin/bin.py
+++ b/erpnext/stock/doctype/bin/bin.py
@@ -32,12 +32,12 @@
self.doc.save()
- # update valuation for post dated entry
if actual_qty:
# check actual qty with total number of serial no
if serial_no:
self.check_qty_with_serial_no()
-
+
+ # update valuation and qty after transaction for post dated entry
self.update_entries_after(dt, posting_time)
def check_qty_with_serial_no(self):
@@ -46,11 +46,19 @@
Temporary validation added on: 18-07-2011
"""
if sql("select name from `tabItem` where ifnull(has_serial_no, 'No') = 'Yes' and name = '%s'" % self.doc.item_code):
- sr_count = sql("select count(name) from `tabSerial No` where item_code = '%s' and warehouse = '%s' and status ='In Store' and docstatus != 2" % (self.doc.item_code, self.doc.warehouse))[0][0]
+ sr_count = sql("""select count(name) from `tabSerial No`
+ where item_code = '%s' and warehouse = '%s'
+ and status ='In Store' and docstatus != 2
+ """ % (self.doc.item_code, self.doc.warehouse))[0][0]
+
if sr_count != self.doc.actual_qty:
- msg = "Actual Qty(%s) in Bin is mismatched with total number(%s) of serial no in store for item: '%s' and warehouse: '%s'" % (self.doc.actual_qty, sr_count, self.doc.item_code, self.doc.warehouse)
+ msg = """Actual Qty(%s) in Bin is mismatched with total number(%s) of serial no in store
+ for item: '%s' and warehouse: '%s'""" % \
+ (self.doc.actual_qty, sr_count, self.doc.item_code, self.doc.warehouse)
+
if getattr(webnotes.defs,'admin_email_notification',1):
- sendmail(['developers@iwebnotes.com'], sender='automail@webnotestech.com', subject='Serial No Count vs Bin Actual Qty', parts=[['text/plain', msg]])
+ sendmail(['developers@iwebnotes.com'], sender='automail@webnotestech.com', \
+ subject='Serial No Count vs Bin Actual Qty', parts=[['text/plain', msg]])
msgprint(msg, raise_exception=1)
# --------------------------------
@@ -91,17 +99,21 @@
# --------------------------------------------------------------------------------------------------------------------------------------
- # validate negative stock (validate if stock is going -ve in between for back dated entries will consider only is_cancel = 'No' entries)
+ #
# --------------------------------------------------------------------------------------------------------------------------------------
def validate_negative_stock(self, cqty, s):
+ """
+ validate negative stock for entries current datetime onwards
+ will not consider cancelled entries
+ """
diff = cqty + s['actual_qty']
- if diff < 0 and (abs(diff) > 0.0001) and s['is_cancelled'] != 'Yes':
+ if diff < 0 and (abs(diff) > 0.0001) and s['is_cancelled'] == 'No':
msgprint("""
Negative stock error:
Cannot complete this transaction because stock will
become negative (%s) for Item <b>%s</b> in Warehouse
<b>%s</b> on <b>%s %s</b> in Transaction %s %s""" % \
- (str(diff), self.doc.item_code, self.doc.warehouse,
+ (str(diff), self.doc.item_code, self.doc.warehouse, \
s['posting_date'], s['posting_time'], s['voucher_type'], s['voucher_no']), \
raise_exception=1)
@@ -201,8 +213,10 @@
return stock_val
def update_entries_after(self, posting_date, posting_time):
- """update item valution from the give stock ledger entry (sle)
- onwards."""
+ """
+ update valution rate and qty after transaction
+ from the current time-bucket onwards
+ """
# Get prev sle
prev_sle = self.get_prev_sle(posting_date, posting_time)
@@ -244,7 +258,7 @@
# Get valuation rate
val_rate, stock_val = self.get_valuation_rate(val_method, serial_nos, \
- val_rate, in_rate, stock_val, cqty, s)
+ val_rate, in_rate, stock_val, cqty, sle)
# Qty upto the sle
cqty += sle['actual_qty']
diff --git a/erpnext/stock/doctype/warehouse/warehouse.py b/erpnext/stock/doctype/warehouse/warehouse.py
index 7384c19..b59ce75 100644
--- a/erpnext/stock/doctype/warehouse/warehouse.py
+++ b/erpnext/stock/doctype/warehouse/warehouse.py
@@ -68,7 +68,7 @@
bl = sql("select name from tabBin where warehouse=%s", self.doc.name)
for b in bl:
bobj = get_obj('Bin',b[0])
- bobj.update_entries_after(posting_date = '2000-01-01', posting_time = '12:00')
+ bobj.update_entries_after(posting_date = '0000-00-00', posting_time = '00:00')
sql("COMMIT")
sql("START TRANSACTION")