From 75626d63aa1bf7489bb1e60d1e0ed411bbf8e325 Mon Sep 17 00:00:00 2001 From: Rucha Mahabal Date: Mon, 2 Mar 2020 11:35:59 +0530 Subject: [PATCH] fix: set consumable entries on client side and not on validate --- .../clinical_procedure/clinical_procedure.js | 59 ++++++++++++++----- .../clinical_procedure/clinical_procedure.py | 22 ++++--- 2 files changed, 60 insertions(+), 21 deletions(-) diff --git a/erpnext/healthcare/doctype/clinical_procedure/clinical_procedure.js b/erpnext/healthcare/doctype/clinical_procedure/clinical_procedure.js index 1e2cb10989c..40f9c1cdda3 100644 --- a/erpnext/healthcare/doctype/clinical_procedure/clinical_procedure.js +++ b/erpnext/healthcare/doctype/clinical_procedure/clinical_procedure.js @@ -198,22 +198,10 @@ frappe.ui.form.on('Clinical Procedure', { callback: function (data) { frm.set_value('medical_department', data.message.medical_department); frm.set_value('consume_stock', data.message.consume_stock); - if (!frm.doc.warehouse) { - frappe.call({ - method: 'frappe.client.get_value', - args: { - doctype: 'Stock Settings', - fieldname: 'default_warehouse' - }, - callback: function (data) { - frm.set_value('warehouse', data.message.default_warehouse); - } - }); - } + frm.events.set_warehouse(frm); + frm.events.set_procedure_consumables(frm); } }); - } else { - frm.set_value('consume_stock', 0); } }, @@ -248,7 +236,50 @@ frappe.ui.form.on('Clinical Procedure', { } }); } + }, + + set_warehouse: function(frm) { + if (!frm.doc.warehouse) { + frappe.call({ + method: 'frappe.client.get_value', + args: { + doctype: 'Stock Settings', + fieldname: 'default_warehouse' + }, + callback: function (data) { + frm.set_value('warehouse', data.message.default_warehouse); + } + }); + } + }, + + set_procedure_consumables: function(frm) { + frappe.call({ + method: 'erpnext.healthcare.doctype.clinical_procedure.clinical_procedure.get_procedure_consumables', + args: { + procedure_template: frm.doc.procedure_template + }, + callback: function(data) { + if (data.message) { + frm.doc.items = [] + $.each(data.message, function(i, v) { + let item = frm.add_child('items'); + item.item_code = v.item_code; + item.item_name = v.item_name; + item.uom = v.uom; + item.stock_uom = v.stock_uom; + item.qty = flt(v.qty); + item.transfer_qty = v.transfer_qty; + item.conversion_factor = v.conversion_factor; + item.invoice_separately_as_consumables = v.invoice_separately_as_consumables; + item.batch_no = v.batch_no; + }); + refresh_field('items'); + } + } + }); } + }); cur_frm.set_query('procedure_template', function(doc) { diff --git a/erpnext/healthcare/doctype/clinical_procedure/clinical_procedure.py b/erpnext/healthcare/doctype/clinical_procedure/clinical_procedure.py index f45ea78e70f..708e041689f 100644 --- a/erpnext/healthcare/doctype/clinical_procedure/clinical_procedure.py +++ b/erpnext/healthcare/doctype/clinical_procedure/clinical_procedure.py @@ -15,7 +15,7 @@ from erpnext.stock.get_item_details import get_item_details class ClinicalProcedure(Document): def validate(self): self.set_status() - if self.consume_stock and not self.status == 'Draft': + if self.consume_stock: if not self.warehouse: frappe.throw(_('Set warehouse for Procedure {0} ').format(self.name)) self.set_actual_qty() @@ -28,7 +28,6 @@ class ClinicalProcedure(Document): def before_insert(self): if self.consume_stock: - set_stock_items(self, self.procedure_template, 'Clinical Procedure Template') self.set_actual_qty() def after_insert(self): @@ -145,11 +144,17 @@ def get_stock_qty(item_code, warehouse): 'posting_time': nowtime() }).get('qty_after_transaction') or 0 + +@frappe.whitelist() +def get_procedure_consumables(procedure_template): + return get_items('Clinical Procedure Item', procedure_template, 'Clinical Procedure Template') + + @frappe.whitelist() def set_stock_items(doc, stock_detail_parent, parenttype): - item_dict = get_item_dict('Clinical Procedure Item', stock_detail_parent, parenttype) + items = get_items('Clinical Procedure Item', stock_detail_parent, parenttype) - for d in item_dict: + for d in items: se_child = doc.append('items') se_child.item_code = d['item_code'] se_child.item_name = d['item_name'] @@ -165,10 +170,13 @@ def set_stock_items(doc, stock_detail_parent, parenttype): se_child.invoice_separately_as_consumables = d['invoice_separately_as_consumables'] return doc -def get_item_dict(table, parent, parenttype): - query = '''select * from `tab{table}` where parent = '{parent}' and parenttype = '{parenttype}' ''' +def get_items(table, parent, parenttype): + items = frappe.db.get_all(table, filters={ + 'parent': parent, + 'parenttype': parenttype + }, fields=['*']) - return frappe.db.sql(query.format(table=table, parent=parent, parenttype=parenttype), as_dict=True) + return items @frappe.whitelist() def make_stock_entry(doc):