Merge pull request #35562 from rohitwaghchaure/fixed-validation-for-stock-entry
fix: added validation for insufficient stock during stock transfer
This commit is contained in:
commit
9e650a004a
@ -68,6 +68,26 @@ erpnext.SerialBatchPackageSelector = class SerialNoBatchBundleUpdate {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
if (this.frm.doc.doctype === 'Stock Entry'
|
||||||
|
&& this.frm.doc.purpose === 'Manufacture') {
|
||||||
|
fields.push({
|
||||||
|
fieldtype: 'Column Break',
|
||||||
|
});
|
||||||
|
|
||||||
|
fields.push({
|
||||||
|
fieldtype: 'Link',
|
||||||
|
fieldname: 'work_order',
|
||||||
|
label: __('For Work Order'),
|
||||||
|
options: 'Work Order',
|
||||||
|
read_only: 1,
|
||||||
|
default: this.frm.doc.work_order,
|
||||||
|
});
|
||||||
|
|
||||||
|
fields.push({
|
||||||
|
fieldtype: 'Section Break',
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
fields.push({
|
fields.push({
|
||||||
fieldtype: 'Column Break',
|
fieldtype: 'Column Break',
|
||||||
});
|
});
|
||||||
@ -101,22 +121,6 @@ erpnext.SerialBatchPackageSelector = class SerialNoBatchBundleUpdate {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.frm.doc.doctype === 'Stock Entry'
|
|
||||||
&& this.frm.doc.purpose === 'Manufacture') {
|
|
||||||
fields.push({
|
|
||||||
fieldtype: 'Column Break',
|
|
||||||
});
|
|
||||||
|
|
||||||
fields.push({
|
|
||||||
fieldtype: 'Link',
|
|
||||||
fieldname: 'work_order',
|
|
||||||
label: __('For Work Order'),
|
|
||||||
options: 'Work Order',
|
|
||||||
read_only: 1,
|
|
||||||
default: this.frm.doc.work_order,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this.item?.outward) {
|
if (this.item?.outward) {
|
||||||
fields = [...this.get_filter_fields(), ...fields];
|
fields = [...this.get_filter_fields(), ...fields];
|
||||||
} else {
|
} else {
|
||||||
|
@ -2351,7 +2351,11 @@ class StockEntry(StockController):
|
|||||||
return
|
return
|
||||||
|
|
||||||
for d in self.items:
|
for d in self.items:
|
||||||
if d.is_finished_item and d.item_code == self.pro_doc.production_item:
|
if (
|
||||||
|
d.is_finished_item
|
||||||
|
and d.item_code == self.pro_doc.production_item
|
||||||
|
and not d.serial_and_batch_bundle
|
||||||
|
):
|
||||||
serial_nos = self.get_available_serial_nos()
|
serial_nos = self.get_available_serial_nos()
|
||||||
if serial_nos:
|
if serial_nos:
|
||||||
row = frappe._dict({"serial_nos": serial_nos[0 : cint(d.qty)]})
|
row = frappe._dict({"serial_nos": serial_nos[0 : cint(d.qty)]})
|
||||||
|
@ -738,6 +738,7 @@ class SerialBatchCreation:
|
|||||||
return frappe._dict({})
|
return frappe._dict({})
|
||||||
|
|
||||||
doc.save()
|
doc.save()
|
||||||
|
self.validate_qty(doc)
|
||||||
|
|
||||||
if not hasattr(self, "do_not_submit") or not self.do_not_submit:
|
if not hasattr(self, "do_not_submit") or not self.do_not_submit:
|
||||||
doc.flags.ignore_voucher_validation = True
|
doc.flags.ignore_voucher_validation = True
|
||||||
@ -767,6 +768,17 @@ class SerialBatchCreation:
|
|||||||
doc.save()
|
doc.save()
|
||||||
return doc
|
return doc
|
||||||
|
|
||||||
|
def validate_qty(self, doc):
|
||||||
|
if doc.type_of_transaction == "Outward":
|
||||||
|
precision = doc.precision("total_qty")
|
||||||
|
|
||||||
|
total_qty = abs(flt(doc.total_qty, precision))
|
||||||
|
required_qty = abs(flt(self.actual_qty, precision))
|
||||||
|
|
||||||
|
if required_qty - total_qty > 0:
|
||||||
|
msg = f"For the item {bold(doc.item_code)}, the Avaliable qty {bold(total_qty)} is less than the Required Qty {bold(required_qty)} in the warehouse {bold(doc.warehouse)}. Please add sufficient qty in the warehouse."
|
||||||
|
frappe.throw(msg, title=_("Insufficient Stock"))
|
||||||
|
|
||||||
def set_auto_serial_batch_entries_for_outward(self):
|
def set_auto_serial_batch_entries_for_outward(self):
|
||||||
from erpnext.stock.doctype.batch.batch import get_available_batches
|
from erpnext.stock.doctype.batch.batch import get_available_batches
|
||||||
from erpnext.stock.doctype.serial_no.serial_no import get_serial_nos_for_outward
|
from erpnext.stock.doctype.serial_no.serial_no import get_serial_nos_for_outward
|
||||||
|
Loading…
x
Reference in New Issue
Block a user