negative stock fixes

This commit is contained in:
Nabin Hait 2012-04-18 16:18:20 +05:30
parent 97051ba79f
commit 6da191de03
2 changed files with 6 additions and 13 deletions

View File

@ -183,6 +183,7 @@ class DocType:
# get moving average inventory values
# ------------------------------------
def get_moving_average_inventory_values(self, val_rate, in_rate, opening_qty, actual_qty, is_cancelled):
#msgprint(actual_qty)
if flt(in_rate) <= 0: # In case of delivery/stock issue in_rate = 0 or wrong incoming rate
in_rate = val_rate
@ -191,9 +192,8 @@ class DocType:
# 2. cancelled entry
# 3. val_rate is negative
# Otherwise it will be calculated as per moving average
elif actual_qty > 0 and (opening_qty + actual_qty) > 0 and is_cancelled == 'No' and ((opening_qty * val_rate) + (actual_qty * in_rate)) > 0:
if opening_qty < 0:
opening_qty = 0
if actual_qty > 0 and (opening_qty + actual_qty) > 0 and is_cancelled == 'No' and ((opening_qty * val_rate) + (actual_qty * in_rate)) > 0:
opening_qty = opening_qty > 0 and opening_qty or 0
val_rate = ((opening_qty *val_rate) + (actual_qty * in_rate)) / (opening_qty + actual_qty)
elif (opening_qty + actual_qty) <= 0:
val_rate = 0
@ -250,8 +250,10 @@ class DocType:
# get stock value
# ----------------
def get_stock_value(self, val_method, cqty, stock_val, serial_nos):
if val_method == 'Moving Average' or serial_nos:
if serial_nos:
stock_val = flt(stock_val) * flt(cqty)
elif val_method == 'Moving Average':
stock_val = flt(cqty) > 0 and flt(stock_val) * flt(cqty) or 0
elif val_method == 'FIFO':
stock_val = sum([flt(d[0])*flt(d[1]) for d in self.fcfs_bal])
return stock_val

View File

@ -321,7 +321,6 @@ class DocType(TransactionBase):
def on_submit(self):
self.validate_packed_qty()
set(self.doc, 'message', 'Items against your Order #%s have been delivered. Delivery #%s: ' % (self.doc.po_no, self.doc.name))
self.check_qty_in_stock()
# Check for Approving Authority
get_obj('Authorization Control').validate_approving_authority(self.doc.doctype, self.doc.company, self.doc.grand_total, self)
sl_obj = get_obj("Stock Ledger")
@ -360,14 +359,6 @@ class DocType(TransactionBase):
webnotes.msgprint("Packing Error:\n" + err_msg, raise_exception=1)
# *********** Checks whether actual quantity is present in warehouse *************
def check_qty_in_stock(self):
for d in getlist(self.doclist, 'packing_details'):
is_stock_item = sql("select is_stock_item from `tabItem` where name = '%s'" % d.item_code)[0][0]
if is_stock_item == 'Yes' and d.warehouse and flt(d.qty) > flt(d.actual_qty):
msgprint("For Item: " + cstr(d.item_code) + " at Warehouse: " + cstr(d.warehouse) + " Quantity: " + cstr(d.qty) +" is not Available. (Must be less than or equal to " + cstr(d.actual_qty) + " )")
raise Exception, "Validation Error"
# ON CANCEL