From 6da191de03a484b9283e98d31f34ba4df5059b72 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Wed, 18 Apr 2012 16:18:20 +0530 Subject: [PATCH] negative stock fixes --- erpnext/stock/doctype/bin/bin.py | 10 ++++++---- erpnext/stock/doctype/delivery_note/delivery_note.py | 9 --------- 2 files changed, 6 insertions(+), 13 deletions(-) diff --git a/erpnext/stock/doctype/bin/bin.py b/erpnext/stock/doctype/bin/bin.py index 860653317b..8e1c949b6d 100644 --- a/erpnext/stock/doctype/bin/bin.py +++ b/erpnext/stock/doctype/bin/bin.py @@ -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 diff --git a/erpnext/stock/doctype/delivery_note/delivery_note.py b/erpnext/stock/doctype/delivery_note/delivery_note.py index 3d8a1011fc..aeccc43fa1 100644 --- a/erpnext/stock/doctype/delivery_note/delivery_note.py +++ b/erpnext/stock/doctype/delivery_note/delivery_note.py @@ -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