Item Rate in Sales Return must be less than or equal to reference doc (#8775)

* Item Rate in Sales Return must be less than or equal to reference doc

* Fix as rate field is not there in Packed Item
This commit is contained in:
Nabin Hait 2017-05-11 16:44:19 +05:30 committed by GitHub
parent 5ad6126832
commit 4f5ad50ecf

View File

@ -53,8 +53,8 @@ def validate_returned_items(doc):
valid_items = frappe._dict() valid_items = frappe._dict()
select_fields = "item_code, qty, parenttype" if doc.doctype=="Purchase Invoice" \ select_fields = "item_code, qty, rate, parenttype" if doc.doctype=="Purchase Invoice" \
else "item_code, qty, serial_no, batch_no, parenttype" else "item_code, qty, rate, serial_no, batch_no, parenttype"
if doc.doctype in ['Purchase Invoice', 'Purchase Receipt']: if doc.doctype in ['Purchase Invoice', 'Purchase Receipt']:
select_fields += ",rejected_qty, received_qty" select_fields += ",rejected_qty, received_qty"
@ -82,10 +82,15 @@ def validate_returned_items(doc):
else: else:
ref = valid_items.get(d.item_code, frappe._dict()) ref = valid_items.get(d.item_code, frappe._dict())
validate_quantity(doc, d, ref, valid_items, already_returned_items) validate_quantity(doc, d, ref, valid_items, already_returned_items)
if ref.batch_no and d.batch_no not in ref.batch_no: if ref.rate and doc.doctype in ("Delivery Note", "Sales Invoice") and flt(d.rate) > ref.rate:
frappe.throw(_("Row # {0}: Rate cannot be greater than the rate used in {1} {2}")
.format(d.idx, doc.doctype, doc.return_against))
elif ref.batch_no and d.batch_no not in ref.batch_no:
frappe.throw(_("Row # {0}: Batch No must be same as {1} {2}") frappe.throw(_("Row # {0}: Batch No must be same as {1} {2}")
.format(d.idx, doc.doctype, doc.return_against)) .format(d.idx, doc.doctype, doc.return_against))
elif ref.serial_no: elif ref.serial_no:
if not d.serial_no: if not d.serial_no:
frappe.throw(_("Row # {0}: Serial No is mandatory").format(d.idx)) frappe.throw(_("Row # {0}: Serial No is mandatory").format(d.idx))
@ -131,6 +136,7 @@ def get_ref_item_dict(valid_items, ref_item_row):
valid_items.setdefault(ref_item_row.item_code, frappe._dict({ valid_items.setdefault(ref_item_row.item_code, frappe._dict({
"qty": 0, "qty": 0,
"rate": 0,
"rejected_qty": 0, "rejected_qty": 0,
"received_qty": 0, "received_qty": 0,
"serial_no": [], "serial_no": [],
@ -138,6 +144,7 @@ def get_ref_item_dict(valid_items, ref_item_row):
})) }))
item_dict = valid_items[ref_item_row.item_code] item_dict = valid_items[ref_item_row.item_code]
item_dict["qty"] += ref_item_row.qty item_dict["qty"] += ref_item_row.qty
item_dict["rate"] = ref_item_row.get("rate", 0)
if ref_item_row.parenttype in ['Purchase Invoice', 'Purchase Receipt']: if ref_item_row.parenttype in ['Purchase Invoice', 'Purchase Receipt']:
item_dict["received_qty"] += ref_item_row.received_qty item_dict["received_qty"] += ref_item_row.received_qty