Skip to content

Commit

Permalink
Merge branch 'develop' into fixed-order-of-reposting-entry
Browse files Browse the repository at this point in the history
  • Loading branch information
rohitwaghchaure authored May 6, 2023
2 parents c8a4791 + c3ca5d0 commit 40e3747
Show file tree
Hide file tree
Showing 23 changed files with 32,132 additions and 32,136 deletions.
36 changes: 36 additions & 0 deletions erpnext/manufacturing/doctype/job_card/test_job_card.py
Original file line number Diff line number Diff line change
Expand Up @@ -272,6 +272,42 @@ def test_job_card_excess_material_transfer_block(self):
transfer_entry_2.insert()
self.assertRaises(JobCardOverTransferError, transfer_entry_2.submit)

@change_settings("Manufacturing Settings", {"job_card_excess_transfer": 0})
def test_job_card_excess_material_transfer_with_no_reference(self):

self.transfer_material_against = "Job Card"
self.source_warehouse = "Stores - _TC"

self.generate_required_stock(self.work_order)

job_card_name = frappe.db.get_value("Job Card", {"work_order": self.work_order.name})

# fully transfer both RMs
transfer_entry_1 = make_stock_entry_from_jc(job_card_name)
row = transfer_entry_1.items[0]

# Add new row without reference of the job card item
transfer_entry_1.append(
"items",
{
"item_code": row.item_code,
"item_name": row.item_name,
"item_group": row.item_group,
"qty": row.qty,
"uom": row.uom,
"conversion_factor": row.conversion_factor,
"stock_uom": row.stock_uom,
"basic_rate": row.basic_rate,
"basic_amount": row.basic_amount,
"expense_account": row.expense_account,
"cost_center": row.cost_center,
"s_warehouse": row.s_warehouse,
"t_warehouse": row.t_warehouse,
},
)

self.assertRaises(frappe.ValidationError, transfer_entry_1.insert)

def test_job_card_partial_material_transfer(self):
"Test partial material transfer against Job Card"
self.transfer_material_against = "Job Card"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -587,6 +587,7 @@ def make_subcontracted_purchase_order(self, subcontracted_po, purchase_orders):
"production_plan_sub_assembly_item": row.name,
"bom": row.bom_no,
"production_plan": self.name,
"fg_item_qty": row.qty,
}

for field in [
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -307,6 +307,43 @@ def test_production_plan_subassembly_default_supplier(self):

self.assertEqual(plan.sub_assembly_items[0].supplier, "_Test Supplier")

def test_production_plan_for_subcontracting_po(self):
from erpnext.manufacturing.doctype.bom.test_bom import create_nested_bom

bom_tree_1 = {"Test Laptop 1": {"Test Motherboard 1": {"Test Motherboard Wires 1": {}}}}
create_nested_bom(bom_tree_1, prefix="")

item_doc = frappe.get_doc("Item", "Test Motherboard 1")
company = "_Test Company"

item_doc.is_sub_contracted_item = 1
for row in item_doc.item_defaults:
if row.company == company and not row.default_supplier:
row.default_supplier = "_Test Supplier"

if not item_doc.item_defaults:
item_doc.append("item_defaults", {"company": company, "default_supplier": "_Test Supplier"})

item_doc.save()

plan = create_production_plan(
item_code="Test Laptop 1", planned_qty=10, use_multi_level_bom=1, do_not_submit=True
)
plan.get_sub_assembly_items()
plan.set_default_supplier_for_subcontracting_order()
plan.submit()

self.assertEqual(plan.sub_assembly_items[0].supplier, "_Test Supplier")
plan.make_work_order()

po = frappe.db.get_value("Purchase Order Item", {"production_plan": plan.name}, "parent")
po_doc = frappe.get_doc("Purchase Order", po)
self.assertEqual(po_doc.supplier, "_Test Supplier")
self.assertEqual(po_doc.items[0].qty, 10.0)
self.assertEqual(po_doc.items[0].fg_item_qty, 10.0)
self.assertEqual(po_doc.items[0].fg_item_qty, 10.0)
self.assertEqual(po_doc.items[0].fg_item, "Test Motherboard 1")

def test_production_plan_combine_subassembly(self):
"""
Test combining Sub assembly items belonging to the same BOM in Prod Plan.
Expand Down
19 changes: 19 additions & 0 deletions erpnext/stock/doctype/stock_entry/stock_entry.py
Original file line number Diff line number Diff line change
Expand Up @@ -127,6 +127,7 @@ def validate(self):
self.validate_fg_completed_qty()
self.validate_difference_account()
self.set_job_card_data()
self.validate_job_card_item()
self.set_purpose_for_stock_entry()
self.clean_serial_nos()
self.validate_duplicate_serial_no()
Expand Down Expand Up @@ -211,6 +212,24 @@ def set_job_card_data(self):
self.from_bom = 1
self.bom_no = data.bom_no

def validate_job_card_item(self):
if not self.job_card:
return

if cint(frappe.db.get_single_value("Manufacturing Settings", "job_card_excess_transfer")):
return

for row in self.items:
if row.job_card_item:
continue

msg = f"""Row #{0}: The job card item reference
is missing. Kindly create the stock entry
from the job card. If you have added the row manually
then you won't be able to add job card item reference."""

frappe.throw(_(msg))

def validate_work_order_status(self):
pro_doc = frappe.get_doc("Work Order", self.work_order)
if pro_doc.status == "Completed":
Expand Down
Loading

0 comments on commit 40e3747

Please sign in to comment.