fix: ensure correct-ish transfer against
This commit is contained in:
parent
251576a6bb
commit
86efa0dbfd
@ -149,6 +149,7 @@ class BOM(WebsiteGenerator):
|
||||
self.set_bom_material_details()
|
||||
self.set_bom_scrap_items_detail()
|
||||
self.validate_materials()
|
||||
self.validate_transfer_against()
|
||||
self.set_routing_operations()
|
||||
self.validate_operations()
|
||||
self.calculate_cost()
|
||||
@ -690,6 +691,12 @@ class BOM(WebsiteGenerator):
|
||||
if act_pbom and act_pbom[0][0]:
|
||||
frappe.throw(_("Cannot deactivate or cancel BOM as it is linked with other BOMs"))
|
||||
|
||||
def validate_transfer_against(self):
|
||||
if not self.with_operations:
|
||||
self.transfer_material_against = "Work Order"
|
||||
if not self.transfer_material_against and not self.is_new():
|
||||
frappe.throw(_("Setting {} is required").format(self.meta.get_label("transfer_material_against")), title=_("Missing value"))
|
||||
|
||||
def set_routing_operations(self):
|
||||
if self.routing and self.with_operations and not self.operations:
|
||||
self.get_routing()
|
||||
|
@ -403,6 +403,35 @@ class TestBOM(ERPNextTestCase):
|
||||
|
||||
new_bom.delete()
|
||||
|
||||
def test_valid_transfer_defaults(self):
|
||||
bom_with_op = frappe.db.get_value("BOM", {"item": "_Test FG Item 2", "with_operations": 1, "is_active": 1})
|
||||
bom = frappe.copy_doc(frappe.get_doc("BOM", bom_with_op), ignore_no_copy=False)
|
||||
|
||||
# test defaults
|
||||
bom.docstatus = 0
|
||||
bom.transfer_material_against = None
|
||||
bom.insert()
|
||||
self.assertEqual(bom.transfer_material_against, "Work Order")
|
||||
|
||||
bom.reload()
|
||||
bom.transfer_material_against = None
|
||||
with self.assertRaises(frappe.ValidationError):
|
||||
bom.save()
|
||||
bom.reload()
|
||||
|
||||
# test saner default
|
||||
bom.transfer_material_against = "Job Card"
|
||||
bom.with_operations = 0
|
||||
bom.save()
|
||||
self.assertEqual(bom.transfer_material_against, "Work Order")
|
||||
|
||||
# test no value on existing doc
|
||||
bom.transfer_material_against = None
|
||||
bom.with_operations = 0
|
||||
bom.save()
|
||||
self.assertEqual(bom.transfer_material_against, "Work Order")
|
||||
|
||||
|
||||
def get_default_bom(item_code="_Test FG Item 2"):
|
||||
return frappe.db.get_value("BOM", {"item": item_code, "is_active": 1, "is_default": 1})
|
||||
|
||||
|
@ -65,6 +65,7 @@ class WorkOrder(Document):
|
||||
self.validate_warehouse_belongs_to_company()
|
||||
self.calculate_operating_cost()
|
||||
self.validate_qty()
|
||||
self.validate_transfer_against()
|
||||
self.validate_operation_time()
|
||||
self.status = self.get_status()
|
||||
|
||||
@ -72,6 +73,7 @@ class WorkOrder(Document):
|
||||
|
||||
self.set_required_items(reset_only_qty = len(self.get("required_items")))
|
||||
|
||||
|
||||
def validate_sales_order(self):
|
||||
if self.sales_order:
|
||||
self.check_sales_order_on_hold_or_close()
|
||||
@ -625,6 +627,16 @@ class WorkOrder(Document):
|
||||
if not self.qty > 0:
|
||||
frappe.throw(_("Quantity to Manufacture must be greater than 0."))
|
||||
|
||||
def validate_transfer_against(self):
|
||||
if not self.docstatus == 1:
|
||||
# let user configure operations until they're ready to submit
|
||||
return
|
||||
if not self.operations:
|
||||
self.transfer_material_against = "Work Order"
|
||||
if not self.transfer_material_against:
|
||||
frappe.throw(_("Setting {} is required").format(self.meta.get_label("transfer_material_against")), title=_("Missing value"))
|
||||
|
||||
|
||||
def validate_operation_time(self):
|
||||
for d in self.operations:
|
||||
if not d.time_in_mins > 0:
|
||||
|
Loading…
Reference in New Issue
Block a user