refactor: Lab Test Report

This commit is contained in:
Rucha Mahabal
2020-07-30 18:56:16 +05:30
parent ca1b389c99
commit c5ccf38cdf
4 changed files with 165 additions and 56 deletions

View File

@@ -248,8 +248,8 @@
{ {
"fieldname": "result_date", "fieldname": "result_date",
"fieldtype": "Date", "fieldtype": "Date",
"hidden": 1,
"label": "Result Date", "label": "Result Date",
"read_only": 1,
"search_index": 1 "search_index": 1
}, },
{ {
@@ -555,7 +555,7 @@
], ],
"is_submittable": 1, "is_submittable": 1,
"links": [], "links": [],
"modified": "2020-07-30 14:03:00.166003", "modified": "2020-07-30 18:18:38.516215",
"modified_by": "Administrator", "modified_by": "Administrator",
"module": "Healthcare", "module": "Healthcare",
"name": "Lab Test", "name": "Lab Test",

View File

@@ -4,29 +4,54 @@
frappe.query_reports["Lab Test Report"] = { frappe.query_reports["Lab Test Report"] = {
"filters": [ "filters": [
{ {
"fieldname":"from_date", "fieldname": "from_date",
"label": __("From Date"), "label": __("From Date"),
"fieldtype": "Date", "fieldtype": "Date",
"default": frappe.datetime.now_date(), "default": frappe.datetime.add_months(frappe.datetime.get_today(), -1),
"width": "80" "reqd": 1
}, },
{ {
"fieldname":"to_date", "fieldname": "to_date",
"label": __("To Date"), "label": __("To Date"),
"fieldtype": "Date", "fieldtype": "Date",
"default": frappe.datetime.now_date() "default": frappe.datetime.now_date(),
"reqd": 1
}, },
{ {
"fieldname":"patient", "fieldname": "company",
"label": __("Company"),
"fieldtype": "Link",
"default": frappe.defaults.get_default("Company"),
"options": "Company"
},
{
"fieldname": "template",
"label": __("Lab Test Template"),
"fieldtype": "Link",
"options": "Lab Test Template"
},
{
"fieldname": "patient",
"label": __("Patient"), "label": __("Patient"),
"fieldtype": "Link", "fieldtype": "Link",
"options": "Patient" "options": "Patient"
}, },
{ {
"fieldname":"department", "fieldname": "department",
"label": __("Medical Department"), "label": __("Medical Department"),
"fieldtype": "Link", "fieldtype": "Link",
"options": "Medical Department" "options": "Medical Department"
},
{
"fieldname": "status",
"label": __("Status"),
"fieldtype": "Select",
"options": "\nCompleted\nApproved\nRejected"
},
{
"fieldname": "invoiced",
"label": __("Invoiced"),
"fieldtype": "Check"
} }
] ]
}; };

View File

@@ -1,12 +1,13 @@
{ {
"add_total_row": 1, "add_total_row": 0,
"creation": "2013-04-23 18:15:29", "creation": "2013-04-23 18:15:29",
"disable_prepared_report": 0,
"disabled": 0, "disabled": 0,
"docstatus": 0, "docstatus": 0,
"doctype": "Report", "doctype": "Report",
"idx": 1, "idx": 1,
"is_standard": "Yes", "is_standard": "Yes",
"modified": "2018-08-06 11:41:50.218737", "modified": "2020-07-30 18:53:20.102873",
"modified_by": "Administrator", "modified_by": "Administrator",
"module": "Healthcare", "module": "Healthcare",
"name": "Lab Test Report", "name": "Lab Test Report",

View File

@@ -8,51 +8,134 @@ from frappe import msgprint, _
def execute(filters=None): def execute(filters=None):
if not filters: filters = {} if not filters: filters = {}
lab_test_list = get_lab_test(filters) data, columns = [], []
columns = get_columns() columns = get_columns()
lab_test_list = get_lab_tests(filters)
if not lab_test_list: if not lab_test_list:
msgprint(_("No record found")) msgprint(_("No records found"))
return columns, lab_test_list return columns, lab_test_list
data = [] data = []
for lab_test in lab_test_list: for lab_test in lab_test_list:
row = [ lab_test.lab_test_name, lab_test.patient, lab_test.practitioner, lab_test.invoiced, lab_test.status, lab_test.result_date, lab_test.department] row = frappe._dict({
'test': lab_test.name,
'template': lab_test.template,
'company': lab_test.company,
'patient': lab_test.patient,
'patient_name': lab_test.patient_name,
'practitioner': lab_test.practitioner,
'employee': lab_test.employee,
'status': lab_test.status,
'invoiced': lab_test.invoiced,
'result_date': lab_test.result_date,
'department': lab_test.department
})
data.append(row) data.append(row)
return columns, data return columns, data
def get_columns(): def get_columns():
columns = [ return [
_("Test") + ":Data:120", {
_("Patient") + ":Link/Patient:180", "fieldname": "test",
_("Healthcare Practitioner") + ":Link/Healthcare Practitioner:120", "label": _("Lab Test"),
_("Invoiced") + ":Check:100", "fieldtype": "Link",
_("Status") + ":Data:120", "options": "Lab Test",
_("Result Date") + ":Date:120", "width": "120"
_("Department") + ":Data:120", },
{
"fieldname": "template",
"label": _("Lab Test Template"),
"fieldtype": "Link",
"options": "Lab Test Template",
"width": "120"
},
{
"fieldname": "company",
"label": _("Company"),
"fieldtype": "Link",
"options": "Company",
"width": "120"
},
{
"fieldname": "patient",
"label": _("Patient"),
"fieldtype": "Link",
"options": "Patient",
"width": "120"
},
{
"fieldname": "patient_name",
"label": _("Patient Name"),
"fieldtype": "Data",
"width": "120"
},
{
"fieldname": "practitioner",
"label": _("Requesting Practitioner"),
"fieldtype": "Link",
"options": "Healthcare Practitioner",
"width": "120"
},
{
"fieldname": "employee",
"label": _("Lab Technician"),
"fieldtype": "Link",
"options": "Employee",
"width": "120"
},
{
"fieldname": "status",
"label": _("Status"),
"fieldtype": "Data",
"width": "100"
},
{
"fieldname": "invoiced",
"label": _("Invoiced"),
"fieldtype": "Check",
"width": "100"
},
{
"fieldname": "result_date",
"label": _("Result Date"),
"fieldtype": "Date",
"width": "100"
},
{
"fieldname": "department",
"label": _("Medical Department"),
"fieldtype": "Link",
"options": "Medical Department",
"width": "100"
}
] ]
return columns def get_lab_tests(filters):
conditions = get_conditions(filters)
data = frappe.get_all(
doctype='Lab Test',
fields=['name', 'template', 'company', 'patient', 'patient_name', 'practitioner', 'employee', 'status', 'invoiced', 'result_date', 'department'],
filters=conditions,
order_by='submitted_date desc'
)
return data
def get_conditions(filters): def get_conditions(filters):
conditions = "" conditions = {
'docstatus': ('=', 1)
}
if filters.get("patient"): if filters.get('from_date') and filters.get('to_date'):
conditions += "and patient = %(patient)s" conditions['result_date'] = ('between', (filters.get('from_date'), filters.get('to_date')))
if filters.get("from_date"): filters.pop('from_date')
conditions += "and result_date >= %(from_date)s" filters.pop('to_date')
if filters.get("to_date"):
conditions += " and result_date <= %(to_date)s" for key, value in filters.items():
if filters.get("department"): if filters.get(key):
conditions += " and department = %(department)s" conditions[key] = value
return conditions return conditions
def get_lab_test(filters):
conditions = get_conditions(filters)
return frappe.db.sql("""select name, patient, lab_test_name, patient_name, status, result_date, practitioner, invoiced, department
from `tabLab Test`
where docstatus<2 %s order by submitted_date desc, name desc""" %
conditions, filters, as_dict=1)