mirror of
https://github.com/frappe/erpnext.git
synced 2026-05-25 16:04:46 +00:00
Lab Test - Create Multiple from Sales Invoice or from Patient Encounter
This commit is contained in:
@@ -4,6 +4,7 @@
|
|||||||
|
|
||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
import frappe
|
import frappe
|
||||||
|
from frappe import _
|
||||||
from frappe.model.document import Document
|
from frappe.model.document import Document
|
||||||
from frappe.utils import getdate, cstr
|
from frappe.utils import getdate, cstr
|
||||||
|
|
||||||
@@ -59,6 +60,100 @@ def update_status(status, name):
|
|||||||
def update_lab_test_print_sms_email_status(print_sms_email, name):
|
def update_lab_test_print_sms_email_status(print_sms_email, name):
|
||||||
frappe.db.set_value("Lab Test",name,print_sms_email,1)
|
frappe.db.set_value("Lab Test",name,print_sms_email,1)
|
||||||
|
|
||||||
|
@frappe.whitelist()
|
||||||
|
def create_multiple(doctype, docname):
|
||||||
|
lab_test_created = False
|
||||||
|
if doctype == "Sales Invoice":
|
||||||
|
lab_test_created = create_lab_test_from_invoice(docname)
|
||||||
|
elif doctype == "Patient Encounter":
|
||||||
|
lab_test_created = create_lab_test_from_encounter(docname)
|
||||||
|
|
||||||
|
if lab_test_created:
|
||||||
|
frappe.msgprint(_("Lab Test(s) "+lab_test_created+" created."))
|
||||||
|
else:
|
||||||
|
frappe.msgprint(_("No Lab Test created"))
|
||||||
|
|
||||||
|
def create_lab_test_from_encounter(encounter_id):
|
||||||
|
lab_test_created = False
|
||||||
|
encounter = frappe.get_doc("Patient Encounter", encounter_id)
|
||||||
|
|
||||||
|
lab_test_ids = frappe.db.sql("""select lp.name, lp.test_code, lp.invoiced
|
||||||
|
from `tabPatient Encounter` et, `tabLab Prescription` lp
|
||||||
|
where et.patient=%s and lp.parent=%s and
|
||||||
|
lp.parent=et.name and lp.test_created=0 and et.docstatus=1""", (encounter.patient, encounter_id))
|
||||||
|
|
||||||
|
if lab_test_ids:
|
||||||
|
patient = frappe.get_doc("Patient", encounter.patient)
|
||||||
|
for lab_test_id in lab_test_ids:
|
||||||
|
template = get_lab_test_template(lab_test_id[1])
|
||||||
|
if template:
|
||||||
|
lab_test = create_lab_test_doc(lab_test_id[2], encounter.practitioner, patient, template)
|
||||||
|
lab_test.save(ignore_permissions = True)
|
||||||
|
frappe.db.set_value("Lab Prescription", lab_test_id[0], "test_created", 1)
|
||||||
|
if not lab_test_created:
|
||||||
|
lab_test_created = lab_test.name
|
||||||
|
else:
|
||||||
|
lab_test_created += ", "+lab_test.name
|
||||||
|
return lab_test_created
|
||||||
|
|
||||||
|
|
||||||
|
def create_lab_test_from_invoice(invoice_name):
|
||||||
|
lab_test_created = False
|
||||||
|
invoice = frappe.get_doc("Sales Invoice", invoice_name)
|
||||||
|
if invoice.patient:
|
||||||
|
patient = frappe.get_doc("Patient", invoice.patient)
|
||||||
|
for item in invoice.items:
|
||||||
|
test_created = 0
|
||||||
|
if item.reference_dt == "Lab Prescription":
|
||||||
|
test_created = frappe.db.get_value("Lab Prescription", item.reference_dn, "test_created")
|
||||||
|
elif item.reference_dt == "Lab Test":
|
||||||
|
test_created = 1
|
||||||
|
if test_created != 1:
|
||||||
|
template = get_lab_test_template(item.item_code)
|
||||||
|
if template:
|
||||||
|
lab_test = create_lab_test_doc(True, invoice.ref_practitioner, patient, template)
|
||||||
|
lab_test.save(ignore_permissions = True)
|
||||||
|
frappe.db.set_value("Sales Invoice Item", item.name, "reference_dt", "Lab Test")
|
||||||
|
frappe.db.set_value("Sales Invoice Item", item.name, "reference_dn", lab_test.name)
|
||||||
|
if not lab_test_created:
|
||||||
|
lab_test_created = lab_test.name
|
||||||
|
else:
|
||||||
|
lab_test_created += ", "+lab_test.name
|
||||||
|
return lab_test_created
|
||||||
|
|
||||||
|
def get_lab_test_template(item):
|
||||||
|
template_id = check_template_exists(item)
|
||||||
|
if template_id:
|
||||||
|
return frappe.get_doc("Lab Test Template", template_id)
|
||||||
|
return False
|
||||||
|
|
||||||
|
def check_template_exists(item):
|
||||||
|
template_exists = frappe.db.exists(
|
||||||
|
"Lab Test Template",
|
||||||
|
{
|
||||||
|
'item': item
|
||||||
|
}
|
||||||
|
)
|
||||||
|
if template_exists:
|
||||||
|
return template_exists
|
||||||
|
return False
|
||||||
|
|
||||||
|
def create_lab_test_doc(invoiced, practitioner, patient, template):
|
||||||
|
lab_test = frappe.new_doc("Lab Test")
|
||||||
|
lab_test.invoiced = invoiced
|
||||||
|
lab_test.practitioner = practitioner
|
||||||
|
lab_test.patient = patient.name
|
||||||
|
lab_test.patient_age = patient.get_age()
|
||||||
|
lab_test.patient_sex = patient.sex
|
||||||
|
lab_test.email = patient.email
|
||||||
|
lab_test.mobile = patient.mobile
|
||||||
|
lab_test.department = template.department
|
||||||
|
lab_test.template = template.name
|
||||||
|
lab_test.test_group = template.test_group
|
||||||
|
lab_test.result_date = getdate()
|
||||||
|
lab_test.report_preference = patient.report_preference
|
||||||
|
return lab_test
|
||||||
|
|
||||||
def create_normals(template, lab_test):
|
def create_normals(template, lab_test):
|
||||||
lab_test.normal_toggle = "1"
|
lab_test.normal_toggle = "1"
|
||||||
normal = lab_test.append("normal_test_items")
|
normal = lab_test.append("normal_test_items")
|
||||||
|
|||||||
@@ -11,5 +11,52 @@ frappe.listview_settings['Lab Test'] = {
|
|||||||
if(doc.status=="Rejected"){
|
if(doc.status=="Rejected"){
|
||||||
return [__("Rejected"), "yellow", "status,=,Rejected"];
|
return [__("Rejected"), "yellow", "status,=,Rejected"];
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
onload: function(listview) {
|
||||||
|
listview.page.add_menu_item(__("Create Multiple"), function() {
|
||||||
|
create_multiple_dialog(listview);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
var create_multiple_dialog = function(listview){
|
||||||
|
var dialog = new frappe.ui.Dialog({
|
||||||
|
title: 'Create Multiple Lab Test',
|
||||||
|
width: 100,
|
||||||
|
fields: [
|
||||||
|
{fieldtype: "Link", label: "Patient", fieldname: "patient", options: "Patient", reqd: 1},
|
||||||
|
{fieldtype: "Select", label: "Invoice / Patient Encounter", fieldname: "doctype",
|
||||||
|
options: "\nSales Invoice\nPatient Encounter", reqd: 1},
|
||||||
|
{fieldtype: "Dynamic Link", fieldname: "docname", options: "doctype", reqd: 1,
|
||||||
|
get_query: function(){
|
||||||
|
return {
|
||||||
|
filters: {
|
||||||
|
"patient": dialog.get_value("patient"),
|
||||||
|
"docstatus": 1
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
primary_action_label: __("Create Lab Test"),
|
||||||
|
primary_action : function(){
|
||||||
|
frappe.call({
|
||||||
|
method: 'erpnext.healthcare.doctype.lab_test.lab_test.create_multiple',
|
||||||
|
args:{
|
||||||
|
'doctype': dialog.get_value("doctype"),
|
||||||
|
'docname': dialog.get_value("docname")
|
||||||
|
},
|
||||||
|
callback: function(data) {
|
||||||
|
if(!data.exc){
|
||||||
|
listview.refresh();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
freeze: true,
|
||||||
|
freeze_message: "Creating Lab Test..."
|
||||||
|
});
|
||||||
|
dialog.hide();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
dialog.show();
|
||||||
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user