diff --git a/erpnext/controllers/stock_controller.py b/erpnext/controllers/stock_controller.py index 10bb62dd5850..51bd73285712 100644 --- a/erpnext/controllers/stock_controller.py +++ b/erpnext/controllers/stock_controller.py @@ -1510,6 +1510,7 @@ def make_quality_inspections(doctype, docname, items, inspection_type): "sample_size": flt(item.get("sample_size")), "item_serial_no": item.get("serial_no").split("\n")[0] if item.get("serial_no") else None, "batch_no": item.get("batch_no"), + "rowname": item.get("docname"), } ).insert() quality_inspection.save() diff --git a/erpnext/stock/doctype/quality_inspection/quality_inspection.json b/erpnext/stock/doctype/quality_inspection/quality_inspection.json index 103207f6762d..971bbbea50ba 100644 --- a/erpnext/stock/doctype/quality_inspection/quality_inspection.json +++ b/erpnext/stock/doctype/quality_inspection/quality_inspection.json @@ -22,6 +22,7 @@ "sample_size", "column_break1", "item_name", + "rowname", "description", "bom_no", "specification_details", @@ -238,6 +239,13 @@ "fieldname": "manual_inspection", "fieldtype": "Check", "label": "Manual Inspection" + }, + { + "fieldname": "rowname", + "fieldtype": "Data", + "hidden": 1, + "label": "Rowname", + "read_only": 1 } ], "icon": "fa fa-search", @@ -245,7 +253,7 @@ "index_web_pages_for_search": 1, "is_submittable": 1, "links": [], - "modified": "2024-03-27 13:10:28.680815", + "modified": "2024-07-08 12:08:50.904016", "modified_by": "Administrator", "module": "Stock", "name": "Quality Inspection", diff --git a/erpnext/stock/doctype/quality_inspection/quality_inspection.py b/erpnext/stock/doctype/quality_inspection/quality_inspection.py index 536a88fb868d..edd2ca8b9cba 100644 --- a/erpnext/stock/doctype/quality_inspection/quality_inspection.py +++ b/erpnext/stock/doctype/quality_inspection/quality_inspection.py @@ -52,6 +52,7 @@ class QualityInspection(Document): ] remarks: DF.Text | None report_date: DF.Date + rowname: DF.Data | None sample_size: DF.Float status: DF.Literal["", "Accepted", "Rejected"] verified_by: DF.Data | None @@ -124,46 +125,30 @@ def update_qc_reference(self): if self.reference_type == "Job Card": if self.reference_name: - frappe.db.sql( - f""" - UPDATE `tab{self.reference_type}` - SET quality_inspection = %s, modified = %s - WHERE name = %s and production_item = %s - """, - (quality_inspection, self.modified, self.reference_name, self.item_code), + frappe.db.set_value( + self.reference_type, self.reference_name, "quality_inspection", quality_inspection ) + frappe.db.set_value(self.reference_type, self.reference_name, "modified", self.modified) else: - args = [quality_inspection, self.modified, self.reference_name, self.item_code] - doctype = self.reference_type + " Item" + conditions = {"parent": self.reference_name, "item_code": self.item_code} + if self.batch_no and self.docstatus == 1: + conditions["batch_no"] = self.batch_no + + if self.docstatus == 2: # if cancel, then remove qi link wherever same name + conditions["quality_inspection"] = self.name + + if hasattr(self, "rowname") and self.rowname: + conditions["name"] = self.rowname if self.reference_type == "Stock Entry": doctype = "Stock Entry Detail" + else: + doctype = self.reference_type + " Item" - if self.reference_type and self.reference_name: - conditions = "" - if self.batch_no and self.docstatus == 1: - conditions += " and t1.batch_no = %s" - args.append(self.batch_no) - - if self.docstatus == 2: # if cancel, then remove qi link wherever same name - conditions += " and t1.quality_inspection = %s" - args.append(self.name) - - frappe.db.sql( - f""" - UPDATE - `tab{doctype}` t1, `tab{self.reference_type}` t2 - SET - t1.quality_inspection = %s, t2.modified = %s - WHERE - t1.parent = %s - and t1.item_code = %s - and t1.parent = t2.name - {conditions} - """, - args, - ) + frappe.db.set_value(doctype, conditions, "quality_inspection", quality_inspection) + + frappe.db.set_value(self.reference_type, self.reference_name, "modified", self.modified) def inspect_and_set_status(self): for reading in self.readings: diff --git a/erpnext/stock/doctype/quality_inspection/test_quality_inspection.py b/erpnext/stock/doctype/quality_inspection/test_quality_inspection.py index 9656a6252e7c..a1c9ce11093a 100644 --- a/erpnext/stock/doctype/quality_inspection/test_quality_inspection.py +++ b/erpnext/stock/doctype/quality_inspection/test_quality_inspection.py @@ -270,6 +270,10 @@ def test_delete_quality_inspection_linked_with_stock_entry(self): se.items[0].quality_inspection = qa.name se.save() + # Unlink the quality inspection from stock entry item + se.items[0].quality_inspection = None + se.save() + qa.delete() se.reload()