feat: Doctype filter for Patient History
This commit is contained in:
parent
cbdbb9e65d
commit
fc1e352adf
@ -109,6 +109,11 @@
|
||||
padding-right: 0px;
|
||||
}
|
||||
|
||||
.patient-history-filter {
|
||||
margin-left: 35px;
|
||||
width: 25%;
|
||||
}
|
||||
|
||||
#page-medical_record .plot-wrapper {
|
||||
padding: 20px 15px;
|
||||
border-bottom: 1px solid #d1d8dd;
|
||||
|
@ -10,6 +10,14 @@
|
||||
<div id="chart" class="col-sm-12 patient_vital_charts">
|
||||
</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>
|
||||
<div class="col-sm-12 text-center py-3">
|
||||
|
@ -20,14 +20,16 @@ frappe.pages['patient_history'].on_page_load = function(wrapper) {
|
||||
placeholder: __('Select Patient'),
|
||||
only_select: true,
|
||||
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.page.main.find('.patient_documents_list').html('');
|
||||
get_documents(patient.get_value(), me);
|
||||
show_patient_info(patient.get_value(), me);
|
||||
show_patient_vital_charts(patient.get_value(), me, 'bp', 'mmHg', 'Blood Pressure');
|
||||
setup_filters(patient_id, me)
|
||||
get_documents(patient_id, me);
|
||||
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.xcall(
|
||||
'erpnext.healthcare.page.patient_history.patient_history.get_patient_history_doctypes'
|
||||
).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,
|
||||
start: me.start,
|
||||
page_length: 20
|
||||
};
|
||||
if (document_types)
|
||||
filters['document_types'] = document_types;
|
||||
|
||||
frappe.call({
|
||||
'method': 'erpnext.healthcare.page.patient_history.patient_history.get_feed',
|
||||
args: {
|
||||
name: patient,
|
||||
start: me.start,
|
||||
page_length: 20
|
||||
},
|
||||
args: filters,
|
||||
callback: function(r) {
|
||||
let data = r.message;
|
||||
if (data.length) {
|
||||
|
@ -4,36 +4,53 @@
|
||||
|
||||
from __future__ import unicode_literals
|
||||
import frappe
|
||||
import json
|
||||
from frappe.utils import cint
|
||||
from erpnext.healthcare.utils import render_docs_as_html
|
||||
|
||||
@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"""
|
||||
result = frappe.db.sql("""select name, owner, creation,
|
||||
reference_doctype, reference_name, subject
|
||||
from `tabPatient Medical Record`
|
||||
where patient=%(patient)s
|
||||
order by creation desc
|
||||
limit %(start)s, %(page_length)s""",
|
||||
{
|
||||
"patient": name,
|
||||
"start": cint(start),
|
||||
"page_length": cint(page_length)
|
||||
}, as_dict=True)
|
||||
filters = {'patient': name}
|
||||
if document_types:
|
||||
document_types = json.loads(document_types)
|
||||
filters['reference_doctype'] = ['IN', document_types]
|
||||
|
||||
result = frappe.db.get_all('Patient Medical Record',
|
||||
fields=['name', 'owner', 'creation',
|
||||
'reference_doctype', 'reference_name', 'subject'],
|
||||
filters=filters,
|
||||
order_by='creation DESC',
|
||||
limit=cint(page_length),
|
||||
start=cint(start)
|
||||
)
|
||||
|
||||
return result
|
||||
|
||||
@frappe.whitelist()
|
||||
def get_feed_for_dt(doctype, docname):
|
||||
"""get feed"""
|
||||
result = frappe.db.sql("""select name, owner, modified, creation,
|
||||
reference_doctype, reference_name, subject
|
||||
from `tabPatient Medical Record`
|
||||
where reference_name=%(docname)s and reference_doctype=%(doctype)s
|
||||
order by creation desc""",
|
||||
{
|
||||
"docname": docname,
|
||||
"doctype": doctype
|
||||
}, as_dict=True)
|
||||
result = frappe.db.get_all('Patient Medical Record',
|
||||
fields=['name', 'owner', 'creation',
|
||||
'reference_doctype', 'reference_name', 'subject'],
|
||||
filters={
|
||||
'reference_doctype': doctype,
|
||||
'reference_name': docname
|
||||
},
|
||||
order_by='creation DESC'
|
||||
)
|
||||
|
||||
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
|
Loading…
x
Reference in New Issue
Block a user