From d681c88d798597e14d95b837a6f1fc21db0d327b Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Thu, 6 Apr 2017 13:09:40 +0530 Subject: [PATCH] validate returned qty only if there is reference qty --- .../controllers/sales_and_purchase_return.py | 25 ++++++++++--------- 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/erpnext/controllers/sales_and_purchase_return.py b/erpnext/controllers/sales_and_purchase_return.py index 4ea2a5f341..d8f28af1d6 100644 --- a/erpnext/controllers/sales_and_purchase_return.py +++ b/erpnext/controllers/sales_and_purchase_return.py @@ -106,24 +106,25 @@ def validate_returned_items(doc): def validate_quantity(doc, args, ref, valid_items, already_returned_items): fields = ['qty'] - if doc.doctype in ['Purchase Invoice', 'Purchase Receipt']: + if doc.doctype in ['Purchase Receipt', 'Purchase Invoice']: fields.extend(['received_qty', 'rejected_qty']) already_returned_data = already_returned_items.get(args.item_code) or {} for column in fields: - return_qty = flt(already_returned_data.get(column, 0)) if len(already_returned_data) > 0 else 0 - referenced_qty = ref.get(column) - max_return_qty = flt(referenced_qty) - return_qty + returned_qty = flt(already_returned_data.get(column, 0)) if len(already_returned_data) > 0 else 0 + reference_qty = ref.get(column) + max_returnable_qty = flt(reference_qty) - returned_qty label = column.replace('_', ' ').title() - - if flt(args.get(column)) > 0: - frappe.throw(_("{0} must be negative in return document").format(label)) - elif return_qty >= referenced_qty and flt(args.get(column)) != 0: - frappe.throw(_("Item {0} has already been returned").format(args.item_code), StockOverReturnError) - elif abs(args.get(column)) > max_return_qty: - frappe.throw(_("Row # {0}: Cannot return more than {1} for Item {2}") - .format(args.idx, referenced_qty, args.item_code), StockOverReturnError) + if reference_qty: + if flt(args.get(column)) > 0: + frappe.throw(_("{0} must be negative in return document").format(label)) + elif returned_qty >= reference_qty and args.get(column): + frappe.throw(_("Item {0} has already been returned") + .format(args.item_code), StockOverReturnError) + elif abs(args.get(column)) > max_returnable_qty: + frappe.throw(_("Row # {0}: Cannot return more than {1} for Item {2}") + .format(args.idx, reference_qty, args.item_code), StockOverReturnError) def get_ref_item_dict(valid_items, ref_item_row): from erpnext.stock.doctype.serial_no.serial_no import get_serial_nos