[fix] validate negative quantity while creating purchase receipt
This commit is contained in:
parent
86cb0cc010
commit
4f4d0a8369
@ -111,6 +111,9 @@ erpnext.buying.BuyingController = erpnext.TransactionController.extend({
|
||||
var item = frappe.get_doc(cdt, cdn);
|
||||
if ((doc.doctype == "Purchase Receipt") || (doc.doctype == "Purchase Invoice" && doc.update_stock)) {
|
||||
frappe.model.round_floats_in(item, ["qty", "received_qty"]);
|
||||
|
||||
if(!doc.is_return && this.validate_negative_quantity(cdt, cdn, item, ["qty", "received_qty"])){ return }
|
||||
|
||||
if(!item.rejected_qty && item.qty) {
|
||||
item.received_qty = item.qty;
|
||||
}
|
||||
@ -134,10 +137,28 @@ erpnext.buying.BuyingController = erpnext.TransactionController.extend({
|
||||
var item = frappe.get_doc(cdt, cdn);
|
||||
frappe.model.round_floats_in(item, ["received_qty", "rejected_qty"]);
|
||||
|
||||
if(!doc.is_return && this.validate_negative_quantity(cdt, cdn, item, ["received_qty", "rejected_qty"])){ return }
|
||||
|
||||
item.qty = flt(item.received_qty - item.rejected_qty, precision("qty", item));
|
||||
this.qty(doc, cdt, cdn);
|
||||
},
|
||||
|
||||
validate_negative_quantity: function(cdt, cdn, item, fieldnames){
|
||||
if(!item || !fieldnames) { return }
|
||||
|
||||
var is_negative_qty = false;
|
||||
for(var i = 0; i<fieldnames.length; i++) {
|
||||
if(item[fieldnames[i]] < 0){
|
||||
frappe.msgprint(__("Row #{0}: {1} can not be negative for item {2}",
|
||||
[item.idx,__(frappe.meta.get_label(cdt, fieldnames[i], cdn)), item.item_code]));
|
||||
is_negative_qty = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return is_negative_qty
|
||||
},
|
||||
|
||||
warehouse: function(doc, cdt, cdn) {
|
||||
var item = frappe.get_doc(cdt, cdn);
|
||||
if(item.item_code && item.warehouse) {
|
||||
|
@ -306,6 +306,7 @@ class BuyingController(StockController):
|
||||
# validate accepted and rejected qty
|
||||
def validate_accepted_rejected_qty(self):
|
||||
for d in self.get("items"):
|
||||
self.validate_negative_quantity(d, ["received_qty","qty", "rejected_qty"])
|
||||
if not flt(d.received_qty) and flt(d.qty):
|
||||
d.received_qty = flt(d.qty) - flt(d.rejected_qty)
|
||||
|
||||
@ -319,6 +320,16 @@ class BuyingController(StockController):
|
||||
if ((flt(d.qty) + flt(d.rejected_qty)) != flt(d.received_qty)):
|
||||
frappe.throw(_("Accepted + Rejected Qty must be equal to Received quantity for Item {0}").format(d.item_code))
|
||||
|
||||
def validate_negative_quantity(self, item_row, field_list):
|
||||
if self.is_return:
|
||||
return
|
||||
|
||||
item_row = item_row.as_dict()
|
||||
for fieldname in field_list:
|
||||
if flt(item_row[fieldname]) < 0:
|
||||
frappe.throw(_("Row #{0}: {1} can not be negative for item {2}".format(item_row['idx'],
|
||||
frappe.get_meta(item_row.doctype).get_label(fieldname), item_row['item_code'])))
|
||||
|
||||
def update_stock_ledger(self, allow_negative_stock=False, via_landed_cost_voucher=False):
|
||||
self.update_ordered_qty()
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user