mirror of
https://github.com/frappe/erpnext.git
synced 2026-02-16 08:05:00 +00:00
Merge pull request #49856 from frappe/mergify/bp/version-15-hotfix/pr-49806
fix: validate transfer_qty based on overproduction wo percentage (backport #49806)
This commit is contained in:
@@ -2900,6 +2900,39 @@ class TestWorkOrder(FrappeTestCase):
|
||||
self.assertLessEqual(row.qty, 20)
|
||||
self.assertGreaterEqual(row.qty, 0)
|
||||
|
||||
def test_overproduction_allowed_qty(self):
|
||||
"""Test overproduction allowed qty in work order"""
|
||||
allow_overproduction("overproduction_percentage_for_work_order", 50)
|
||||
|
||||
wo_order = make_wo_order_test_record(planned_start_date=now(), qty=10)
|
||||
|
||||
test_stock_entry.make_stock_entry(
|
||||
item_code="_Test Item", target="Stores - _TC", qty=100, basic_rate=100
|
||||
)
|
||||
test_stock_entry.make_stock_entry(
|
||||
item_code="_Test Item Home Desktop 100",
|
||||
target="_Test Warehouse - _TC",
|
||||
qty=100,
|
||||
basic_rate=1000.0,
|
||||
)
|
||||
|
||||
mt_stock_entry = frappe.get_doc(
|
||||
make_stock_entry(wo_order.name, "Material Transfer for Manufacture", 10)
|
||||
)
|
||||
mt_stock_entry.submit()
|
||||
|
||||
fg_stock_entry = frappe.get_doc(make_stock_entry(wo_order.name, "Manufacture", 10))
|
||||
fg_stock_entry.items[2].qty = 15
|
||||
fg_stock_entry.fg_completed_qty = 15
|
||||
fg_stock_entry.submit()
|
||||
|
||||
wo_order.reload()
|
||||
|
||||
self.assertEqual(wo_order.produced_qty, 15)
|
||||
self.assertEqual(wo_order.status, "Completed")
|
||||
|
||||
allow_overproduction("overproduction_percentage_for_work_order", 0)
|
||||
|
||||
|
||||
def make_stock_in_entries_and_get_batches(rm_item, source_warehouse, wip_warehouse):
|
||||
from erpnext.stock.doctype.stock_entry.test_stock_entry import (
|
||||
|
||||
@@ -823,9 +823,28 @@ frappe.ui.form.on("Stock Entry", {
|
||||
refresh_field("process_loss_qty");
|
||||
}
|
||||
},
|
||||
|
||||
set_fg_completed_qty(frm) {
|
||||
let fg_completed_qty = 0;
|
||||
|
||||
frm.doc.items.forEach((item) => {
|
||||
if (item.is_finished_item) {
|
||||
fg_completed_qty += flt(item.qty);
|
||||
}
|
||||
});
|
||||
|
||||
frm.doc.fg_completed_qty = fg_completed_qty;
|
||||
frm.refresh_field("fg_completed_qty");
|
||||
},
|
||||
});
|
||||
|
||||
frappe.ui.form.on("Stock Entry Detail", {
|
||||
items_add(frm, cdt, cdn) {
|
||||
let item = frappe.get_doc(cdt, cdn);
|
||||
if (item.is_finished_item) {
|
||||
frm.events.set_fg_completed_qty(frm);
|
||||
}
|
||||
},
|
||||
set_basic_rate_manually(frm, cdt, cdn) {
|
||||
let row = locals[cdt][cdn];
|
||||
frm.fields_dict.items.grid.update_docfield_property(
|
||||
@@ -837,6 +856,10 @@ frappe.ui.form.on("Stock Entry Detail", {
|
||||
|
||||
qty(frm, cdt, cdn) {
|
||||
frm.events.set_basic_rate(frm, cdt, cdn);
|
||||
let item = frappe.get_doc(cdt, cdn);
|
||||
if (item.is_finished_item) {
|
||||
frm.events.set_fg_completed_qty(frm);
|
||||
}
|
||||
},
|
||||
|
||||
conversion_factor(frm, cdt, cdn) {
|
||||
|
||||
@@ -1356,12 +1356,6 @@ class StockEntry(StockController):
|
||||
d.item_code, self.work_order
|
||||
)
|
||||
)
|
||||
elif flt(d.transfer_qty) > flt(self.fg_completed_qty):
|
||||
frappe.throw(
|
||||
_("Quantity in row {0} ({1}) must be same as manufactured quantity {2}").format(
|
||||
d.idx, d.transfer_qty, self.fg_completed_qty
|
||||
)
|
||||
)
|
||||
|
||||
finished_items.append(d.item_code)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user