From ddb9f948ee6e7384c2d17843c63f9bd266fc7ba5 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Wed, 18 Jul 2012 18:12:34 +0530 Subject: [PATCH] repost stock due to incorrect packing list --- .../repost_stock_due_to_wrong_packing_list.py | 75 +++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 erpnext/patches/july_2012/repost_stock_due_to_wrong_packing_list.py diff --git a/erpnext/patches/july_2012/repost_stock_due_to_wrong_packing_list.py b/erpnext/patches/july_2012/repost_stock_due_to_wrong_packing_list.py new file mode 100644 index 0000000000..a96d37b43c --- /dev/null +++ b/erpnext/patches/july_2012/repost_stock_due_to_wrong_packing_list.py @@ -0,0 +1,75 @@ +def repost_reserved_qty(): + import webnotes + bins = webnotes.conn.sql("select item_code, warehouse, name, reserved_qty from `tabBin`") + for d in bins: + reserved_qty = webnotes.conn.sql(""" + select sum((dnpi.qty/so_item.qty)*(so_item.qty - ifnull(so_item.delivered_qty, 0))) + + from `tabDelivery Note Packing Item` dnpi, `tabSales Order Item` so_item, `tabSales Order` so + + where dnpi.parent = so.name + and so_item.parent = so.name + and dnpi.parenttype = 'Sales Order' + and dnpi.parent_detail_docname = so_item.name + and dnpi.parent_item = so_item.item_code + and so.docstatus = 1 + and so.status != 'Stopped' + and dnpi.item_code = %s + and dnpi.warehouse = %s + """, (d[0], d[1])) + if flt(d[3]) != reserved_qty: + print d, reserved_qty + # webnotes.conn.sql(""" + # update `tabBin` set reserved_qty = %s where name = %s + # """, (reserved_qty and reserved_qty[0][0] or 0, d[2])) + + +def cleanup_wrong_sle(): + sle = webnotes.conn.sql(""" + select item_code, warehouse, voucher_no, name + from `tabStock Ledger Entry` sle + where voucher_type = 'Delivery Note' + and not exists( + select name from `tabDelivery Note Packing Item` + where item_code = sle.item_code + and qty = abs(sle.actual_qty) + and parent = sle.voucher_no + ) and not exists ( + select name from `tabDelivery Note Item` + where item_code = sle.item_code + and qty = abs(sle.actual_qty) + and parent = sle.voucher_no + ) + """) + if sle: + print sle + # for d in sle: + # webnotes.conn.sql("update `tabStock Ledger Entry` set is_cancelled = 'Yes' where name = %s", d[3]) + # create_comment(d[3]) + # repost_bin(d[0], d[1]) + +def create_comment(dn): + from webnotes.model.doc import Document + cmt = Document('Comment') + for arg in ['comment', 'comment_by', 'comment_by_fullname', 'comment_doctype', \ + 'comment_docname']: + cmt.fields[arg] = args[arg] + cmt.comment = 'Cancelled by administrator due to wrong entry in packing list' + cmt.comment_by = 'Administrator' + cmt.comment_by_fullname = 'Administrator' + cmt.comment_doctype = 'Stock Ledger Entry' + cmt.comment_docname = dn + cmt.save(1) + + +def repost_bin(item, wh): + from webnotes.model.code import get_obj + bin = webnotes.conn.sql("select name from `tabBin` \ + where item_code = %s and warehouse = %s", (item, wh)) + + get_obj('Bin', bin[0][0]).update_entries_after(posting_date = '2012-07-01', posting_time = '12:05') + + +def execute(): + repost_reserved_qty() + cleanup_wrong_sle()