feat: Doctype filter for Patient History

This commit is contained in:
Rucha Mahabal 2020-11-29 22:38:14 +05:30
parent cbdbb9e65d
commit fc1e352adf
4 changed files with 98 additions and 32 deletions

View File

@ -109,6 +109,11 @@
padding-right: 0px; padding-right: 0px;
} }
.patient-history-filter {
margin-left: 35px;
width: 25%;
}
#page-medical_record .plot-wrapper { #page-medical_record .plot-wrapper {
padding: 20px 15px; padding: 20px 15px;
border-bottom: 1px solid #d1d8dd; border-bottom: 1px solid #d1d8dd;

View File

@ -10,6 +10,14 @@
<div id="chart" class="col-sm-12 patient_vital_charts"> <div id="chart" class="col-sm-12 patient_vital_charts">
</div> </div>
</div> </div>
<div class="col-sm-12 d-flex border-bottom py-3"></div>
<div class="row">
<div class="col-sm-12 d-flex">
<div class="patient-history-filter doctype-filter"></div>
<div class="patient-history-filter from-date-filter"></div>
<div class="patient-history-filter to-date-filter"></div>
</div>
</div>
<div class="col-sm-12 patient_documents_list"> <div class="col-sm-12 patient_documents_list">
</div> </div>
<div class="col-sm-12 text-center py-3"> <div class="col-sm-12 text-center py-3">

View File

@ -20,14 +20,16 @@ frappe.pages['patient_history'].on_page_load = function(wrapper) {
placeholder: __('Select Patient'), placeholder: __('Select Patient'),
only_select: true, only_select: true,
change: function(){ change: function(){
if (pid != patient.get_value() && patient.get_value()) { let patient_id = patient.get_value();
if (pid != patient_id && patient_id) {
me.start = 0; me.start = 0;
me.page.main.find('.patient_documents_list').html(''); me.page.main.find('.patient_documents_list').html('');
get_documents(patient.get_value(), me); setup_filters(patient_id, me)
show_patient_info(patient.get_value(), me); get_documents(patient_id, me);
show_patient_vital_charts(patient.get_value(), me, 'bp', 'mmHg', 'Blood Pressure'); show_patient_info(patient_id, me);
show_patient_vital_charts(patient_id, me, 'bp', 'mmHg', 'Blood Pressure');
} }
pid = patient.get_value(); pid = patient_id;
} }
}, },
}); });
@ -93,14 +95,48 @@ frappe.pages['patient_history'].on_page_load = function(wrapper) {
}); });
}; };
let get_documents = function(patient, me) { let setup_filters = function(patient, me) {
frappe.call({ frappe.xcall(
'method': 'erpnext.healthcare.page.patient_history.patient_history.get_feed', 'erpnext.healthcare.page.patient_history.patient_history.get_patient_history_doctypes'
args: { ).then(document_types => {
let doctype_filter = frappe.ui.form.make_control({
parent: $('.doctype-filter'),
df: {
fieldtype: 'MultiSelectList',
fieldname: 'document_type',
placeholder: __('Select Document Type'),
input_class: 'input-xs',
change: () => {
me.start = 0;
me.page.main.find('.patient_documents_list').html('');
get_documents(patient, me, doctype_filter.get_value());
},
get_data: () => {
return document_types.map(document_type => {
return {
description: document_type,
value: document_type
};
});
},
}
});
doctype_filter.refresh();
})
}
let get_documents = function(patient, me, document_types="") {
let filters = {
name: patient, name: patient,
start: me.start, start: me.start,
page_length: 20 page_length: 20
}, };
if (document_types)
filters['document_types'] = document_types;
frappe.call({
'method': 'erpnext.healthcare.page.patient_history.patient_history.get_feed',
args: filters,
callback: function(r) { callback: function(r) {
let data = r.message; let data = r.message;
if (data.length) { if (data.length) {

View File

@ -4,36 +4,53 @@
from __future__ import unicode_literals from __future__ import unicode_literals
import frappe import frappe
import json
from frappe.utils import cint from frappe.utils import cint
from erpnext.healthcare.utils import render_docs_as_html from erpnext.healthcare.utils import render_docs_as_html
@frappe.whitelist() @frappe.whitelist()
def get_feed(name, start=0, page_length=20): def get_feed(name, document_types=None, start=0, page_length=20):
"""get feed""" """get feed"""
result = frappe.db.sql("""select name, owner, creation, filters = {'patient': name}
reference_doctype, reference_name, subject if document_types:
from `tabPatient Medical Record` document_types = json.loads(document_types)
where patient=%(patient)s filters['reference_doctype'] = ['IN', document_types]
order by creation desc
limit %(start)s, %(page_length)s""", result = frappe.db.get_all('Patient Medical Record',
{ fields=['name', 'owner', 'creation',
"patient": name, 'reference_doctype', 'reference_name', 'subject'],
"start": cint(start), filters=filters,
"page_length": cint(page_length) order_by='creation DESC',
}, as_dict=True) limit=cint(page_length),
start=cint(start)
)
return result return result
@frappe.whitelist() @frappe.whitelist()
def get_feed_for_dt(doctype, docname): def get_feed_for_dt(doctype, docname):
"""get feed""" """get feed"""
result = frappe.db.sql("""select name, owner, modified, creation, result = frappe.db.get_all('Patient Medical Record',
reference_doctype, reference_name, subject fields=['name', 'owner', 'creation',
from `tabPatient Medical Record` 'reference_doctype', 'reference_name', 'subject'],
where reference_name=%(docname)s and reference_doctype=%(doctype)s filters={
order by creation desc""", 'reference_doctype': doctype,
{ 'reference_name': docname
"docname": docname, },
"doctype": doctype order_by='creation DESC'
}, as_dict=True) )
return result return result
@frappe.whitelist()
def get_patient_history_doctypes():
document_types = []
settings = frappe.get_single("Patient History Settings")
for entry in settings.standard_doctypes:
document_types.append(entry.document_type)
for entry in settings.custom_doctypes:
document_types.append(entry.document_type)
return document_types