mirror of
https://github.com/frappe/erpnext.git
synced 2026-05-30 02:14:48 +00:00
Merge pull request #16005 from ESS-LLP/pr_staging_fixes
[Feature][Fix] Healthcare - Patient Appointment
This commit is contained in:
@@ -39,7 +39,9 @@ frappe.ui.form.on('Patient Appointment', {
|
|||||||
frm.add_custom_button(__('Cancel'), function() {
|
frm.add_custom_button(__('Cancel'), function() {
|
||||||
btn_update_status(frm, "Cancelled");
|
btn_update_status(frm, "Cancelled");
|
||||||
});
|
});
|
||||||
|
frm.add_custom_button(__('Reschedule'), function() {
|
||||||
|
check_and_set_availability(frm);
|
||||||
|
});
|
||||||
if(frm.doc.procedure_template){
|
if(frm.doc.procedure_template){
|
||||||
frm.add_custom_button(__("Procedure"),function(){
|
frm.add_custom_button(__("Procedure"),function(){
|
||||||
btn_create_procedure(frm);
|
btn_create_procedure(frm);
|
||||||
@@ -59,7 +61,9 @@ frappe.ui.form.on('Patient Appointment', {
|
|||||||
frm.add_custom_button(__('Cancel'), function() {
|
frm.add_custom_button(__('Cancel'), function() {
|
||||||
btn_update_status(frm, "Cancelled");
|
btn_update_status(frm, "Cancelled");
|
||||||
});
|
});
|
||||||
|
frm.add_custom_button(__('Reschedule'), function() {
|
||||||
|
check_and_set_availability(frm);
|
||||||
|
});
|
||||||
if(frm.doc.procedure_template){
|
if(frm.doc.procedure_template){
|
||||||
frm.add_custom_button(__("Procedure"),function(){
|
frm.add_custom_button(__("Procedure"),function(){
|
||||||
btn_create_procedure(frm);
|
btn_create_procedure(frm);
|
||||||
@@ -100,117 +104,7 @@ frappe.ui.form.on('Patient Appointment', {
|
|||||||
});
|
});
|
||||||
},
|
},
|
||||||
check_availability: function(frm) {
|
check_availability: function(frm) {
|
||||||
var { practitioner, appointment_date } = frm.doc;
|
check_and_set_availability(frm);
|
||||||
if(!(practitioner && appointment_date)) {
|
|
||||||
frappe.throw(__("Please select Healthcare Practitioner and Date"));
|
|
||||||
}
|
|
||||||
|
|
||||||
// show booking modal
|
|
||||||
frm.call({
|
|
||||||
method: 'get_availability_data',
|
|
||||||
args: {
|
|
||||||
practitioner: practitioner,
|
|
||||||
date: appointment_date
|
|
||||||
},
|
|
||||||
callback: (r) => {
|
|
||||||
var data = r.message;
|
|
||||||
if(data.slot_details.length > 0){
|
|
||||||
show_availability(data);
|
|
||||||
}else{
|
|
||||||
show_empty_state();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
function show_empty_state() {
|
|
||||||
frappe.msgprint({
|
|
||||||
title: __('Not Available'),
|
|
||||||
message: __("Healthcare Practitioner {0} not available on {1}", [practitioner.bold(), appointment_date.bold()]),
|
|
||||||
indicator: 'red'
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function show_availability(data) {
|
|
||||||
var d = new frappe.ui.Dialog({
|
|
||||||
title: __("Available slots"),
|
|
||||||
fields: [{ fieldtype: 'HTML', fieldname: 'available_slots'}],
|
|
||||||
primary_action_label: __("Book"),
|
|
||||||
primary_action: function() {
|
|
||||||
// book slot
|
|
||||||
var btn_selected = $wrapper.find('button.btn-selected-slot');
|
|
||||||
frm.set_value('appointment_time', btn_selected.attr('data-name'));
|
|
||||||
frm.set_value('service_unit', btn_selected.attr('data-service-unit') || '');
|
|
||||||
frm.set_value('duration', btn_selected.attr('data-duration'));
|
|
||||||
d.hide();
|
|
||||||
frm.enable_save();
|
|
||||||
frm.save();
|
|
||||||
frm.enable_save();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
var $wrapper = d.fields_dict.available_slots.$wrapper;
|
|
||||||
|
|
||||||
// disable dialog action initially
|
|
||||||
d.get_primary_btn().attr('disabled', true);
|
|
||||||
|
|
||||||
var slot_details = data.slot_details;
|
|
||||||
var slot_html = "";
|
|
||||||
var duration = frm.doc.duration | 0;
|
|
||||||
$.each(slot_details, function(i, slot_detail){
|
|
||||||
slot_html = slot_html + `<label>${slot_detail['slot_name']}</label>`;
|
|
||||||
slot_html = slot_html + `<br/>` + slot_detail['avail_slot'].map(slot => {
|
|
||||||
let disabled = '';
|
|
||||||
let start_str = slot.from_time;
|
|
||||||
let slot_start_time = moment(slot.from_time, 'HH:mm:ss');
|
|
||||||
let slot_to_time = moment(slot.to_time, 'HH:mm:ss');
|
|
||||||
let interval = (slot_to_time - slot_start_time)/60000 | 0;
|
|
||||||
// iterate in all booked appointments, update the start time and duration
|
|
||||||
slot_detail['appointments'].forEach(function(booked) {
|
|
||||||
let booked_moment = moment(booked.appointment_time, 'HH:mm:ss');
|
|
||||||
let end_time = booked_moment.clone().add(booked.duration, 'minutes');
|
|
||||||
// Deal with 0 duration appointments
|
|
||||||
if(booked_moment.isSame(slot_start_time) || booked_moment.isBetween(slot_start_time, slot_to_time)){
|
|
||||||
if(booked.duration == 0){
|
|
||||||
disabled = 'disabled="disabled"';
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Check for overlaps considering appointment duration
|
|
||||||
if(slot_start_time.isBefore(end_time) && slot_to_time.isAfter(booked_moment)){
|
|
||||||
// There is an overlap
|
|
||||||
disabled = 'disabled="disabled"';
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
return `<button class="btn btn-default"
|
|
||||||
data-name=${start_str}
|
|
||||||
data-duration=${duration || interval}
|
|
||||||
data-service-unit="${slot_detail['service_unit'] || ''}"
|
|
||||||
style="margin: 0 10px 10px 0; width: 72px;" ${disabled}>
|
|
||||||
${start_str.substring(0, start_str.length - 3)}
|
|
||||||
</button>`;
|
|
||||||
}).join("");
|
|
||||||
slot_html = slot_html + `<br/>`;
|
|
||||||
});
|
|
||||||
|
|
||||||
$wrapper
|
|
||||||
.css('margin-bottom', 0)
|
|
||||||
.addClass('text-center')
|
|
||||||
.html(slot_html);
|
|
||||||
|
|
||||||
// blue button when clicked
|
|
||||||
$wrapper.on('click', 'button', function() {
|
|
||||||
var $btn = $(this);
|
|
||||||
$wrapper.find('button').removeClass('btn-primary');
|
|
||||||
$wrapper.find('button').removeClass('btn-selected-slot');
|
|
||||||
$btn.addClass('btn-primary');
|
|
||||||
$btn.addClass('btn-selected-slot');
|
|
||||||
// enable dialog action
|
|
||||||
d.get_primary_btn().attr('disabled', null);
|
|
||||||
});
|
|
||||||
|
|
||||||
d.show();
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
onload:function(frm){
|
onload:function(frm){
|
||||||
if(frm.is_new()) {
|
if(frm.is_new()) {
|
||||||
@@ -223,6 +117,176 @@ frappe.ui.form.on('Patient Appointment', {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
var check_and_set_availability = function(frm) {
|
||||||
|
var selected_slot = null;
|
||||||
|
var service_unit = null;
|
||||||
|
var duration = null;
|
||||||
|
|
||||||
|
show_availability();
|
||||||
|
|
||||||
|
function show_empty_state(practitioner, appointment_date) {
|
||||||
|
frappe.msgprint({
|
||||||
|
title: __('Not Available'),
|
||||||
|
message: __("Healthcare Practitioner {0} not available on {1}", [practitioner.bold(), appointment_date.bold()]),
|
||||||
|
indicator: 'red'
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function show_availability() {
|
||||||
|
let selected_practitioner = '';
|
||||||
|
var d = new frappe.ui.Dialog({
|
||||||
|
title: __("Available slots"),
|
||||||
|
fields: [
|
||||||
|
{ fieldtype: 'Link', options: 'Medical Department', reqd:1, fieldname: 'department', label: 'Medical Department'},
|
||||||
|
{ fieldtype: 'Column Break'},
|
||||||
|
{ fieldtype: 'Link', options: 'Healthcare Practitioner', reqd:1, fieldname: 'practitioner', label: 'Healthcare Practitioner'},
|
||||||
|
{ fieldtype: 'Column Break'},
|
||||||
|
{ fieldtype: 'Date', reqd:1, fieldname: 'appointment_date', label: 'Date'},
|
||||||
|
{ fieldtype: 'Section Break'},
|
||||||
|
{ fieldtype: 'HTML', fieldname: 'available_slots'}
|
||||||
|
],
|
||||||
|
primary_action_label: __("Book"),
|
||||||
|
primary_action: function() {
|
||||||
|
frm.set_value('appointment_time', selected_slot);
|
||||||
|
frm.set_value('service_unit', service_unit || '');
|
||||||
|
frm.set_value('duration', duration);
|
||||||
|
frm.set_value('practitioner', d.get_value('practitioner'));
|
||||||
|
frm.set_value('department', d.get_value('department'));
|
||||||
|
frm.set_value('appointment_date', d.get_value('appointment_date'));
|
||||||
|
d.hide();
|
||||||
|
frm.enable_save();
|
||||||
|
frm.save();
|
||||||
|
frm.enable_save();
|
||||||
|
d.get_primary_btn().attr('disabled', true);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
d.set_values({
|
||||||
|
'department': frm.doc.department,
|
||||||
|
'practitioner': frm.doc.practitioner,
|
||||||
|
'appointment_date': frm.doc.appointment_date
|
||||||
|
});
|
||||||
|
|
||||||
|
d.fields_dict["department"].df.onchange = () => {
|
||||||
|
d.set_values({
|
||||||
|
'practitioner': ''
|
||||||
|
});
|
||||||
|
var department = d.get_value('department');
|
||||||
|
if(department){
|
||||||
|
d.fields_dict.practitioner.get_query = function() {
|
||||||
|
return {
|
||||||
|
filters: {
|
||||||
|
"department": department
|
||||||
|
}
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// disable dialog action initially
|
||||||
|
d.get_primary_btn().attr('disabled', true);
|
||||||
|
|
||||||
|
// Field Change Handler
|
||||||
|
|
||||||
|
var fd = d.fields_dict;
|
||||||
|
|
||||||
|
d.fields_dict["appointment_date"].df.onchange = () => {
|
||||||
|
show_slots(d, fd);
|
||||||
|
};
|
||||||
|
d.fields_dict["practitioner"].df.onchange = () => {
|
||||||
|
if(d.get_value('practitioner') && d.get_value('practitioner') != selected_practitioner){
|
||||||
|
selected_practitioner = d.get_value('practitioner');
|
||||||
|
show_slots(d, fd);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
d.show();
|
||||||
|
}
|
||||||
|
|
||||||
|
function show_slots(d, fd) {
|
||||||
|
if (d.get_value('appointment_date') && d.get_value('practitioner')){
|
||||||
|
fd.available_slots.html("");
|
||||||
|
frappe.call({
|
||||||
|
method: 'erpnext.healthcare.doctype.patient_appointment.patient_appointment.get_availability_data',
|
||||||
|
args: {
|
||||||
|
practitioner: d.get_value('practitioner'),
|
||||||
|
date: d.get_value('appointment_date')
|
||||||
|
},
|
||||||
|
callback: (r) => {
|
||||||
|
var data = r.message;
|
||||||
|
if(data.slot_details.length > 0) {
|
||||||
|
var $wrapper = d.fields_dict.available_slots.$wrapper;
|
||||||
|
|
||||||
|
// make buttons for each slot
|
||||||
|
var slot_details = data.slot_details;
|
||||||
|
var slot_html = "";
|
||||||
|
for (let i = 0; i < slot_details.length; i++) {
|
||||||
|
slot_html = slot_html + `<label>${slot_details[i].slot_name}</label>`;
|
||||||
|
slot_html = slot_html + `<br/>` + slot_details[i].avail_slot.map(slot => {
|
||||||
|
let disabled = '';
|
||||||
|
let start_str = slot.from_time;
|
||||||
|
let slot_start_time = moment(slot.from_time, 'HH:mm:ss');
|
||||||
|
let slot_to_time = moment(slot.to_time, 'HH:mm:ss');
|
||||||
|
let interval = (slot_to_time - slot_start_time)/60000 | 0;
|
||||||
|
// iterate in all booked appointments, update the start time and duration
|
||||||
|
slot_details[i].appointments.forEach(function(booked) {
|
||||||
|
let booked_moment = moment(booked.appointment_time, 'HH:mm:ss');
|
||||||
|
let end_time = booked_moment.clone().add(booked.duration, 'minutes');
|
||||||
|
// Deal with 0 duration appointments
|
||||||
|
if(booked_moment.isSame(slot_start_time) || booked_moment.isBetween(slot_start_time, slot_to_time)){
|
||||||
|
if(booked.duration == 0){
|
||||||
|
disabled = 'disabled="disabled"';
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Check for overlaps considering appointment duration
|
||||||
|
if(slot_start_time.isBefore(end_time) && slot_to_time.isAfter(booked_moment)){
|
||||||
|
// There is an overlap
|
||||||
|
disabled = 'disabled="disabled"';
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return `<button class="btn btn-default"
|
||||||
|
data-name=${start_str}
|
||||||
|
data-duration=${interval}
|
||||||
|
data-service-unit="${slot_details[i].service_unit || ''}"
|
||||||
|
style="margin: 0 10px 10px 0; width: 72px;" ${disabled}>
|
||||||
|
${start_str.substring(0, start_str.length - 3)}
|
||||||
|
</button>`;
|
||||||
|
}).join("");
|
||||||
|
slot_html = slot_html + `<br/>`;
|
||||||
|
}
|
||||||
|
|
||||||
|
$wrapper
|
||||||
|
.css('margin-bottom', 0)
|
||||||
|
.addClass('text-center')
|
||||||
|
.html(slot_html);
|
||||||
|
|
||||||
|
// blue button when clicked
|
||||||
|
$wrapper.on('click', 'button', function() {
|
||||||
|
var $btn = $(this);
|
||||||
|
$wrapper.find('button').removeClass('btn-primary');
|
||||||
|
$btn.addClass('btn-primary');
|
||||||
|
selected_slot = $btn.attr('data-name');
|
||||||
|
service_unit = $btn.attr('data-service-unit');
|
||||||
|
duration = $btn.attr('data-duration');
|
||||||
|
// enable dialog action
|
||||||
|
d.get_primary_btn().attr('disabled', null);
|
||||||
|
});
|
||||||
|
|
||||||
|
}else {
|
||||||
|
// fd.available_slots.html("Please select a valid date.".bold())
|
||||||
|
show_empty_state(d.get_value('practitioner'), d.get_value('appointment_date'));
|
||||||
|
}
|
||||||
|
},
|
||||||
|
freeze: true,
|
||||||
|
freeze_message: __("Fetching records......")
|
||||||
|
});
|
||||||
|
}else{
|
||||||
|
fd.available_slots.html("Appointment date and Healthcare Practitioner are Mandatory".bold());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
var get_procedure_prescribed = function(frm){
|
var get_procedure_prescribed = function(frm){
|
||||||
if(frm.doc.patient){
|
if(frm.doc.patient){
|
||||||
frappe.call({
|
frappe.call({
|
||||||
|
|||||||
@@ -1,9 +1,10 @@
|
|||||||
{
|
{
|
||||||
"allow_copy": 1,
|
"allow_copy": 1,
|
||||||
|
"allow_events_in_timeline": 0,
|
||||||
"allow_guest_to_view": 0,
|
"allow_guest_to_view": 0,
|
||||||
"allow_import": 1,
|
"allow_import": 1,
|
||||||
"allow_rename": 0,
|
"allow_rename": 0,
|
||||||
"autoname": "HLC-APP-.YYYY.-.#####",
|
"autoname": "OP-.######",
|
||||||
"beta": 1,
|
"beta": 1,
|
||||||
"creation": "2017-05-04 11:52:40.941507",
|
"creation": "2017-05-04 11:52:40.941507",
|
||||||
"custom": 0,
|
"custom": 0,
|
||||||
@@ -88,19 +89,19 @@
|
|||||||
"bold": 0,
|
"bold": 0,
|
||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
"columns": 0,
|
"columns": 0,
|
||||||
"fieldname": "department",
|
"fieldname": "appointment_type",
|
||||||
"fieldtype": "Link",
|
"fieldtype": "Link",
|
||||||
"hidden": 0,
|
"hidden": 0,
|
||||||
"ignore_user_permissions": 1,
|
"ignore_user_permissions": 1,
|
||||||
"ignore_xss_filter": 0,
|
"ignore_xss_filter": 0,
|
||||||
"in_filter": 0,
|
"in_filter": 0,
|
||||||
"in_global_search": 0,
|
"in_global_search": 0,
|
||||||
"in_list_view": 1,
|
"in_list_view": 0,
|
||||||
"in_standard_filter": 1,
|
"in_standard_filter": 0,
|
||||||
"label": "Department",
|
"label": "Appointment Type",
|
||||||
"length": 0,
|
"length": 0,
|
||||||
"no_copy": 0,
|
"no_copy": 0,
|
||||||
"options": "Medical Department",
|
"options": "Appointment Type",
|
||||||
"permlevel": 0,
|
"permlevel": 0,
|
||||||
"precision": "",
|
"precision": "",
|
||||||
"print_hide": 0,
|
"print_hide": 0,
|
||||||
@@ -109,7 +110,7 @@
|
|||||||
"remember_last_selected_value": 0,
|
"remember_last_selected_value": 0,
|
||||||
"report_hide": 0,
|
"report_hide": 0,
|
||||||
"reqd": 0,
|
"reqd": 0,
|
||||||
"search_index": 1,
|
"search_index": 0,
|
||||||
"set_only_once": 1,
|
"set_only_once": 1,
|
||||||
"translatable": 0,
|
"translatable": 0,
|
||||||
"unique": 0
|
"unique": 0
|
||||||
@@ -121,19 +122,19 @@
|
|||||||
"bold": 0,
|
"bold": 0,
|
||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
"columns": 0,
|
"columns": 0,
|
||||||
"fieldname": "practitioner",
|
"description": "In Minutes",
|
||||||
"fieldtype": "Link",
|
"fieldname": "duration",
|
||||||
|
"fieldtype": "Int",
|
||||||
"hidden": 0,
|
"hidden": 0,
|
||||||
"ignore_user_permissions": 1,
|
"ignore_user_permissions": 0,
|
||||||
"ignore_xss_filter": 0,
|
"ignore_xss_filter": 0,
|
||||||
"in_filter": 0,
|
"in_filter": 1,
|
||||||
"in_global_search": 0,
|
"in_global_search": 0,
|
||||||
"in_list_view": 1,
|
"in_list_view": 0,
|
||||||
"in_standard_filter": 1,
|
"in_standard_filter": 0,
|
||||||
"label": "Healthcare Practitioner",
|
"label": "Duration",
|
||||||
"length": 0,
|
"length": 0,
|
||||||
"no_copy": 0,
|
"no_copy": 0,
|
||||||
"options": "Healthcare Practitioner",
|
|
||||||
"permlevel": 0,
|
"permlevel": 0,
|
||||||
"precision": "",
|
"precision": "",
|
||||||
"print_hide": 0,
|
"print_hide": 0,
|
||||||
@@ -141,8 +142,109 @@
|
|||||||
"read_only": 0,
|
"read_only": 0,
|
||||||
"remember_last_selected_value": 0,
|
"remember_last_selected_value": 0,
|
||||||
"report_hide": 0,
|
"report_hide": 0,
|
||||||
"reqd": 1,
|
"reqd": 0,
|
||||||
|
"search_index": 0,
|
||||||
|
"set_only_once": 0,
|
||||||
|
"translatable": 0,
|
||||||
|
"unique": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"allow_bulk_edit": 0,
|
||||||
|
"allow_in_quick_entry": 0,
|
||||||
|
"allow_on_submit": 0,
|
||||||
|
"bold": 0,
|
||||||
|
"collapsible": 0,
|
||||||
|
"columns": 0,
|
||||||
|
"fieldname": "column_break_1",
|
||||||
|
"fieldtype": "Column Break",
|
||||||
|
"hidden": 0,
|
||||||
|
"ignore_user_permissions": 0,
|
||||||
|
"ignore_xss_filter": 0,
|
||||||
|
"in_filter": 0,
|
||||||
|
"in_global_search": 0,
|
||||||
|
"in_list_view": 0,
|
||||||
|
"in_standard_filter": 0,
|
||||||
|
"label": "",
|
||||||
|
"length": 0,
|
||||||
|
"no_copy": 0,
|
||||||
|
"options": "",
|
||||||
|
"permlevel": 0,
|
||||||
|
"precision": "",
|
||||||
|
"print_hide": 0,
|
||||||
|
"print_hide_if_no_value": 0,
|
||||||
|
"read_only": 1,
|
||||||
|
"remember_last_selected_value": 0,
|
||||||
|
"report_hide": 0,
|
||||||
|
"reqd": 0,
|
||||||
|
"search_index": 0,
|
||||||
|
"set_only_once": 0,
|
||||||
|
"translatable": 0,
|
||||||
|
"unique": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"allow_bulk_edit": 0,
|
||||||
|
"allow_in_quick_entry": 0,
|
||||||
|
"allow_on_submit": 0,
|
||||||
|
"bold": 0,
|
||||||
|
"collapsible": 0,
|
||||||
|
"columns": 0,
|
||||||
|
"default": "Scheduled",
|
||||||
|
"depends_on": "eval:!doc.__islocal",
|
||||||
|
"fieldname": "status",
|
||||||
|
"fieldtype": "Select",
|
||||||
|
"hidden": 0,
|
||||||
|
"ignore_user_permissions": 0,
|
||||||
|
"ignore_xss_filter": 0,
|
||||||
|
"in_filter": 1,
|
||||||
|
"in_global_search": 0,
|
||||||
|
"in_list_view": 0,
|
||||||
|
"in_standard_filter": 0,
|
||||||
|
"label": "Status",
|
||||||
|
"length": 0,
|
||||||
|
"no_copy": 0,
|
||||||
|
"options": "\nScheduled\nOpen\nClosed\nPending\nCancelled",
|
||||||
|
"permlevel": 0,
|
||||||
|
"precision": "",
|
||||||
|
"print_hide": 0,
|
||||||
|
"print_hide_if_no_value": 0,
|
||||||
|
"read_only": 1,
|
||||||
|
"remember_last_selected_value": 0,
|
||||||
|
"report_hide": 0,
|
||||||
|
"reqd": 0,
|
||||||
"search_index": 1,
|
"search_index": 1,
|
||||||
|
"set_only_once": 0,
|
||||||
|
"translatable": 0,
|
||||||
|
"unique": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"allow_bulk_edit": 0,
|
||||||
|
"allow_in_quick_entry": 0,
|
||||||
|
"allow_on_submit": 0,
|
||||||
|
"bold": 0,
|
||||||
|
"collapsible": 0,
|
||||||
|
"columns": 0,
|
||||||
|
"fieldname": "procedure_template",
|
||||||
|
"fieldtype": "Link",
|
||||||
|
"hidden": 0,
|
||||||
|
"ignore_user_permissions": 0,
|
||||||
|
"ignore_xss_filter": 0,
|
||||||
|
"in_filter": 0,
|
||||||
|
"in_global_search": 0,
|
||||||
|
"in_list_view": 0,
|
||||||
|
"in_standard_filter": 0,
|
||||||
|
"label": "Procedure",
|
||||||
|
"length": 0,
|
||||||
|
"no_copy": 0,
|
||||||
|
"options": "Clinical Procedure Template",
|
||||||
|
"permlevel": 0,
|
||||||
|
"precision": "",
|
||||||
|
"print_hide": 0,
|
||||||
|
"print_hide_if_no_value": 0,
|
||||||
|
"read_only": 0,
|
||||||
|
"remember_last_selected_value": 0,
|
||||||
|
"report_hide": 0,
|
||||||
|
"reqd": 0,
|
||||||
|
"search_index": 0,
|
||||||
"set_only_once": 1,
|
"set_only_once": 1,
|
||||||
"translatable": 0,
|
"translatable": 0,
|
||||||
"unique": 0
|
"unique": 0
|
||||||
@@ -219,7 +321,7 @@
|
|||||||
"bold": 0,
|
"bold": 0,
|
||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
"columns": 0,
|
"columns": 0,
|
||||||
"fieldname": "procedure_template",
|
"fieldname": "service_unit",
|
||||||
"fieldtype": "Link",
|
"fieldtype": "Link",
|
||||||
"hidden": 0,
|
"hidden": 0,
|
||||||
"ignore_user_permissions": 0,
|
"ignore_user_permissions": 0,
|
||||||
@@ -228,10 +330,10 @@
|
|||||||
"in_global_search": 0,
|
"in_global_search": 0,
|
||||||
"in_list_view": 0,
|
"in_list_view": 0,
|
||||||
"in_standard_filter": 0,
|
"in_standard_filter": 0,
|
||||||
"label": "Procedure",
|
"label": "Service Unit",
|
||||||
"length": 0,
|
"length": 0,
|
||||||
"no_copy": 0,
|
"no_copy": 0,
|
||||||
"options": "Clinical Procedure Template",
|
"options": "Healthcare Service Unit",
|
||||||
"permlevel": 0,
|
"permlevel": 0,
|
||||||
"precision": "",
|
"precision": "",
|
||||||
"print_hide": 0,
|
"print_hide": 0,
|
||||||
@@ -245,103 +347,6 @@
|
|||||||
"translatable": 0,
|
"translatable": 0,
|
||||||
"unique": 0
|
"unique": 0
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"allow_bulk_edit": 0,
|
|
||||||
"allow_in_quick_entry": 0,
|
|
||||||
"allow_on_submit": 0,
|
|
||||||
"bold": 0,
|
|
||||||
"collapsible": 0,
|
|
||||||
"columns": 0,
|
|
||||||
"fieldname": "appointment_date",
|
|
||||||
"fieldtype": "Date",
|
|
||||||
"hidden": 0,
|
|
||||||
"ignore_user_permissions": 0,
|
|
||||||
"ignore_xss_filter": 0,
|
|
||||||
"in_filter": 0,
|
|
||||||
"in_global_search": 0,
|
|
||||||
"in_list_view": 0,
|
|
||||||
"in_standard_filter": 1,
|
|
||||||
"label": "Date",
|
|
||||||
"length": 0,
|
|
||||||
"no_copy": 0,
|
|
||||||
"permlevel": 0,
|
|
||||||
"precision": "",
|
|
||||||
"print_hide": 0,
|
|
||||||
"print_hide_if_no_value": 0,
|
|
||||||
"read_only": 0,
|
|
||||||
"remember_last_selected_value": 0,
|
|
||||||
"report_hide": 0,
|
|
||||||
"reqd": 1,
|
|
||||||
"search_index": 1,
|
|
||||||
"set_only_once": 1,
|
|
||||||
"translatable": 0,
|
|
||||||
"unique": 0
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"allow_bulk_edit": 0,
|
|
||||||
"allow_in_quick_entry": 0,
|
|
||||||
"allow_on_submit": 0,
|
|
||||||
"bold": 0,
|
|
||||||
"collapsible": 0,
|
|
||||||
"columns": 0,
|
|
||||||
"fieldname": "appointment_time",
|
|
||||||
"fieldtype": "Time",
|
|
||||||
"hidden": 0,
|
|
||||||
"ignore_user_permissions": 0,
|
|
||||||
"ignore_xss_filter": 0,
|
|
||||||
"in_filter": 0,
|
|
||||||
"in_global_search": 0,
|
|
||||||
"in_list_view": 0,
|
|
||||||
"in_standard_filter": 0,
|
|
||||||
"label": "Time",
|
|
||||||
"length": 0,
|
|
||||||
"no_copy": 0,
|
|
||||||
"permlevel": 0,
|
|
||||||
"precision": "",
|
|
||||||
"print_hide": 0,
|
|
||||||
"print_hide_if_no_value": 0,
|
|
||||||
"read_only": 1,
|
|
||||||
"remember_last_selected_value": 0,
|
|
||||||
"report_hide": 0,
|
|
||||||
"reqd": 0,
|
|
||||||
"search_index": 0,
|
|
||||||
"set_only_once": 0,
|
|
||||||
"translatable": 0,
|
|
||||||
"unique": 0
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"allow_bulk_edit": 0,
|
|
||||||
"allow_in_quick_entry": 0,
|
|
||||||
"allow_on_submit": 0,
|
|
||||||
"bold": 0,
|
|
||||||
"collapsible": 0,
|
|
||||||
"columns": 0,
|
|
||||||
"description": "In Minutes",
|
|
||||||
"fieldname": "duration",
|
|
||||||
"fieldtype": "Int",
|
|
||||||
"hidden": 0,
|
|
||||||
"ignore_user_permissions": 0,
|
|
||||||
"ignore_xss_filter": 0,
|
|
||||||
"in_filter": 1,
|
|
||||||
"in_global_search": 0,
|
|
||||||
"in_list_view": 1,
|
|
||||||
"in_standard_filter": 0,
|
|
||||||
"label": "Duration",
|
|
||||||
"length": 0,
|
|
||||||
"no_copy": 0,
|
|
||||||
"permlevel": 0,
|
|
||||||
"precision": "",
|
|
||||||
"print_hide": 0,
|
|
||||||
"print_hide_if_no_value": 0,
|
|
||||||
"read_only": 0,
|
|
||||||
"remember_last_selected_value": 0,
|
|
||||||
"report_hide": 0,
|
|
||||||
"reqd": 0,
|
|
||||||
"search_index": 0,
|
|
||||||
"set_only_once": 0,
|
|
||||||
"translatable": 0,
|
|
||||||
"unique": 0
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"allow_bulk_edit": 0,
|
"allow_bulk_edit": 0,
|
||||||
"allow_in_quick_entry": 0,
|
"allow_in_quick_entry": 0,
|
||||||
@@ -382,7 +387,104 @@
|
|||||||
"bold": 0,
|
"bold": 0,
|
||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
"columns": 0,
|
"columns": 0,
|
||||||
"fieldname": "column_break_1",
|
"fieldname": "section_break_12",
|
||||||
|
"fieldtype": "Section Break",
|
||||||
|
"hidden": 0,
|
||||||
|
"ignore_user_permissions": 0,
|
||||||
|
"ignore_xss_filter": 0,
|
||||||
|
"in_filter": 0,
|
||||||
|
"in_global_search": 0,
|
||||||
|
"in_list_view": 0,
|
||||||
|
"in_standard_filter": 0,
|
||||||
|
"length": 0,
|
||||||
|
"no_copy": 0,
|
||||||
|
"permlevel": 0,
|
||||||
|
"precision": "",
|
||||||
|
"print_hide": 0,
|
||||||
|
"print_hide_if_no_value": 0,
|
||||||
|
"read_only": 0,
|
||||||
|
"remember_last_selected_value": 0,
|
||||||
|
"report_hide": 0,
|
||||||
|
"reqd": 0,
|
||||||
|
"search_index": 0,
|
||||||
|
"set_only_once": 0,
|
||||||
|
"translatable": 0,
|
||||||
|
"unique": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"allow_bulk_edit": 0,
|
||||||
|
"allow_in_quick_entry": 0,
|
||||||
|
"allow_on_submit": 0,
|
||||||
|
"bold": 0,
|
||||||
|
"collapsible": 0,
|
||||||
|
"columns": 0,
|
||||||
|
"fieldname": "practitioner",
|
||||||
|
"fieldtype": "Link",
|
||||||
|
"hidden": 0,
|
||||||
|
"ignore_user_permissions": 1,
|
||||||
|
"ignore_xss_filter": 0,
|
||||||
|
"in_filter": 0,
|
||||||
|
"in_global_search": 0,
|
||||||
|
"in_list_view": 0,
|
||||||
|
"in_standard_filter": 1,
|
||||||
|
"label": "Healthcare Practitioner",
|
||||||
|
"length": 0,
|
||||||
|
"no_copy": 0,
|
||||||
|
"options": "Healthcare Practitioner",
|
||||||
|
"permlevel": 0,
|
||||||
|
"precision": "",
|
||||||
|
"print_hide": 0,
|
||||||
|
"print_hide_if_no_value": 0,
|
||||||
|
"read_only": 1,
|
||||||
|
"remember_last_selected_value": 0,
|
||||||
|
"report_hide": 0,
|
||||||
|
"reqd": 1,
|
||||||
|
"search_index": 1,
|
||||||
|
"set_only_once": 1,
|
||||||
|
"translatable": 0,
|
||||||
|
"unique": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"allow_bulk_edit": 0,
|
||||||
|
"allow_in_quick_entry": 0,
|
||||||
|
"allow_on_submit": 0,
|
||||||
|
"bold": 0,
|
||||||
|
"collapsible": 0,
|
||||||
|
"columns": 0,
|
||||||
|
"fieldname": "department",
|
||||||
|
"fieldtype": "Link",
|
||||||
|
"hidden": 0,
|
||||||
|
"ignore_user_permissions": 1,
|
||||||
|
"ignore_xss_filter": 0,
|
||||||
|
"in_filter": 0,
|
||||||
|
"in_global_search": 0,
|
||||||
|
"in_list_view": 1,
|
||||||
|
"in_standard_filter": 1,
|
||||||
|
"label": "Department",
|
||||||
|
"length": 0,
|
||||||
|
"no_copy": 0,
|
||||||
|
"options": "Medical Department",
|
||||||
|
"permlevel": 0,
|
||||||
|
"precision": "",
|
||||||
|
"print_hide": 0,
|
||||||
|
"print_hide_if_no_value": 0,
|
||||||
|
"read_only": 1,
|
||||||
|
"remember_last_selected_value": 0,
|
||||||
|
"report_hide": 0,
|
||||||
|
"reqd": 0,
|
||||||
|
"search_index": 1,
|
||||||
|
"set_only_once": 1,
|
||||||
|
"translatable": 0,
|
||||||
|
"unique": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"allow_bulk_edit": 0,
|
||||||
|
"allow_in_quick_entry": 0,
|
||||||
|
"allow_on_submit": 0,
|
||||||
|
"bold": 0,
|
||||||
|
"collapsible": 0,
|
||||||
|
"columns": 0,
|
||||||
|
"fieldname": "column_break_17",
|
||||||
"fieldtype": "Column Break",
|
"fieldtype": "Column Break",
|
||||||
"hidden": 0,
|
"hidden": 0,
|
||||||
"ignore_user_permissions": 0,
|
"ignore_user_permissions": 0,
|
||||||
@@ -391,10 +493,72 @@
|
|||||||
"in_global_search": 0,
|
"in_global_search": 0,
|
||||||
"in_list_view": 0,
|
"in_list_view": 0,
|
||||||
"in_standard_filter": 0,
|
"in_standard_filter": 0,
|
||||||
"label": "",
|
|
||||||
"length": 0,
|
"length": 0,
|
||||||
"no_copy": 0,
|
"no_copy": 0,
|
||||||
"options": "",
|
"permlevel": 0,
|
||||||
|
"precision": "",
|
||||||
|
"print_hide": 0,
|
||||||
|
"print_hide_if_no_value": 0,
|
||||||
|
"read_only": 0,
|
||||||
|
"remember_last_selected_value": 0,
|
||||||
|
"report_hide": 0,
|
||||||
|
"reqd": 0,
|
||||||
|
"search_index": 0,
|
||||||
|
"set_only_once": 0,
|
||||||
|
"translatable": 0,
|
||||||
|
"unique": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"allow_bulk_edit": 0,
|
||||||
|
"allow_in_quick_entry": 0,
|
||||||
|
"allow_on_submit": 0,
|
||||||
|
"bold": 0,
|
||||||
|
"collapsible": 0,
|
||||||
|
"columns": 0,
|
||||||
|
"fieldname": "appointment_date",
|
||||||
|
"fieldtype": "Date",
|
||||||
|
"hidden": 0,
|
||||||
|
"ignore_user_permissions": 0,
|
||||||
|
"ignore_xss_filter": 0,
|
||||||
|
"in_filter": 0,
|
||||||
|
"in_global_search": 0,
|
||||||
|
"in_list_view": 1,
|
||||||
|
"in_standard_filter": 1,
|
||||||
|
"label": "Date",
|
||||||
|
"length": 0,
|
||||||
|
"no_copy": 0,
|
||||||
|
"permlevel": 0,
|
||||||
|
"precision": "",
|
||||||
|
"print_hide": 0,
|
||||||
|
"print_hide_if_no_value": 0,
|
||||||
|
"read_only": 1,
|
||||||
|
"remember_last_selected_value": 0,
|
||||||
|
"report_hide": 0,
|
||||||
|
"reqd": 1,
|
||||||
|
"search_index": 1,
|
||||||
|
"set_only_once": 0,
|
||||||
|
"translatable": 0,
|
||||||
|
"unique": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"allow_bulk_edit": 0,
|
||||||
|
"allow_in_quick_entry": 0,
|
||||||
|
"allow_on_submit": 0,
|
||||||
|
"bold": 0,
|
||||||
|
"collapsible": 0,
|
||||||
|
"columns": 0,
|
||||||
|
"fieldname": "appointment_time",
|
||||||
|
"fieldtype": "Time",
|
||||||
|
"hidden": 0,
|
||||||
|
"ignore_user_permissions": 0,
|
||||||
|
"ignore_xss_filter": 0,
|
||||||
|
"in_filter": 0,
|
||||||
|
"in_global_search": 0,
|
||||||
|
"in_list_view": 1,
|
||||||
|
"in_standard_filter": 0,
|
||||||
|
"label": "Time",
|
||||||
|
"length": 0,
|
||||||
|
"no_copy": 0,
|
||||||
"permlevel": 0,
|
"permlevel": 0,
|
||||||
"precision": "",
|
"precision": "",
|
||||||
"print_hide": 0,
|
"print_hide": 0,
|
||||||
@@ -415,8 +579,8 @@
|
|||||||
"bold": 0,
|
"bold": 0,
|
||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
"columns": 0,
|
"columns": 0,
|
||||||
"fieldname": "service_unit",
|
"fieldname": "section_break_16",
|
||||||
"fieldtype": "Link",
|
"fieldtype": "Section Break",
|
||||||
"hidden": 0,
|
"hidden": 0,
|
||||||
"ignore_user_permissions": 0,
|
"ignore_user_permissions": 0,
|
||||||
"ignore_xss_filter": 0,
|
"ignore_xss_filter": 0,
|
||||||
@@ -424,10 +588,8 @@
|
|||||||
"in_global_search": 0,
|
"in_global_search": 0,
|
||||||
"in_list_view": 0,
|
"in_list_view": 0,
|
||||||
"in_standard_filter": 0,
|
"in_standard_filter": 0,
|
||||||
"label": "Service Unit",
|
|
||||||
"length": 0,
|
"length": 0,
|
||||||
"no_copy": 0,
|
"no_copy": 0,
|
||||||
"options": "Healthcare Service Unit",
|
|
||||||
"permlevel": 0,
|
"permlevel": 0,
|
||||||
"precision": "",
|
"precision": "",
|
||||||
"print_hide": 0,
|
"print_hide": 0,
|
||||||
@@ -437,7 +599,7 @@
|
|||||||
"report_hide": 0,
|
"report_hide": 0,
|
||||||
"reqd": 0,
|
"reqd": 0,
|
||||||
"search_index": 0,
|
"search_index": 0,
|
||||||
"set_only_once": 1,
|
"set_only_once": 0,
|
||||||
"translatable": 0,
|
"translatable": 0,
|
||||||
"unique": 0
|
"unique": 0
|
||||||
},
|
},
|
||||||
@@ -510,6 +672,37 @@
|
|||||||
"translatable": 0,
|
"translatable": 0,
|
||||||
"unique": 0
|
"unique": 0
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"allow_bulk_edit": 0,
|
||||||
|
"allow_in_quick_entry": 0,
|
||||||
|
"allow_on_submit": 0,
|
||||||
|
"bold": 0,
|
||||||
|
"collapsible": 0,
|
||||||
|
"columns": 0,
|
||||||
|
"fieldname": "column_break_21",
|
||||||
|
"fieldtype": "Column Break",
|
||||||
|
"hidden": 0,
|
||||||
|
"ignore_user_permissions": 0,
|
||||||
|
"ignore_xss_filter": 0,
|
||||||
|
"in_filter": 0,
|
||||||
|
"in_global_search": 0,
|
||||||
|
"in_list_view": 0,
|
||||||
|
"in_standard_filter": 0,
|
||||||
|
"length": 0,
|
||||||
|
"no_copy": 0,
|
||||||
|
"permlevel": 0,
|
||||||
|
"precision": "",
|
||||||
|
"print_hide": 0,
|
||||||
|
"print_hide_if_no_value": 0,
|
||||||
|
"read_only": 0,
|
||||||
|
"remember_last_selected_value": 0,
|
||||||
|
"report_hide": 0,
|
||||||
|
"reqd": 0,
|
||||||
|
"search_index": 0,
|
||||||
|
"set_only_once": 0,
|
||||||
|
"translatable": 0,
|
||||||
|
"unique": 0
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"allow_bulk_edit": 0,
|
"allow_bulk_edit": 0,
|
||||||
"allow_in_quick_entry": 0,
|
"allow_in_quick_entry": 0,
|
||||||
@@ -543,73 +736,6 @@
|
|||||||
"translatable": 0,
|
"translatable": 0,
|
||||||
"unique": 0
|
"unique": 0
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"allow_bulk_edit": 0,
|
|
||||||
"allow_in_quick_entry": 0,
|
|
||||||
"allow_on_submit": 0,
|
|
||||||
"bold": 0,
|
|
||||||
"collapsible": 0,
|
|
||||||
"columns": 0,
|
|
||||||
"default": "Scheduled",
|
|
||||||
"fieldname": "status",
|
|
||||||
"fieldtype": "Select",
|
|
||||||
"hidden": 0,
|
|
||||||
"ignore_user_permissions": 0,
|
|
||||||
"ignore_xss_filter": 0,
|
|
||||||
"in_filter": 1,
|
|
||||||
"in_global_search": 0,
|
|
||||||
"in_list_view": 1,
|
|
||||||
"in_standard_filter": 0,
|
|
||||||
"label": "Status",
|
|
||||||
"length": 0,
|
|
||||||
"no_copy": 0,
|
|
||||||
"options": "\nScheduled\nOpen\nClosed\nPending\nCancelled",
|
|
||||||
"permlevel": 0,
|
|
||||||
"precision": "",
|
|
||||||
"print_hide": 0,
|
|
||||||
"print_hide_if_no_value": 0,
|
|
||||||
"read_only": 1,
|
|
||||||
"remember_last_selected_value": 0,
|
|
||||||
"report_hide": 0,
|
|
||||||
"reqd": 0,
|
|
||||||
"search_index": 1,
|
|
||||||
"set_only_once": 0,
|
|
||||||
"translatable": 0,
|
|
||||||
"unique": 0
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"allow_bulk_edit": 0,
|
|
||||||
"allow_in_quick_entry": 0,
|
|
||||||
"allow_on_submit": 0,
|
|
||||||
"bold": 0,
|
|
||||||
"collapsible": 0,
|
|
||||||
"columns": 0,
|
|
||||||
"fieldname": "appointment_type",
|
|
||||||
"fieldtype": "Link",
|
|
||||||
"hidden": 0,
|
|
||||||
"ignore_user_permissions": 1,
|
|
||||||
"ignore_xss_filter": 0,
|
|
||||||
"in_filter": 0,
|
|
||||||
"in_global_search": 0,
|
|
||||||
"in_list_view": 0,
|
|
||||||
"in_standard_filter": 0,
|
|
||||||
"label": "Type",
|
|
||||||
"length": 0,
|
|
||||||
"no_copy": 0,
|
|
||||||
"options": "Appointment Type",
|
|
||||||
"permlevel": 0,
|
|
||||||
"precision": "",
|
|
||||||
"print_hide": 0,
|
|
||||||
"print_hide_if_no_value": 0,
|
|
||||||
"read_only": 0,
|
|
||||||
"remember_last_selected_value": 0,
|
|
||||||
"report_hide": 0,
|
|
||||||
"reqd": 0,
|
|
||||||
"search_index": 0,
|
|
||||||
"set_only_once": 0,
|
|
||||||
"translatable": 0,
|
|
||||||
"unique": 0
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"allow_bulk_edit": 0,
|
"allow_bulk_edit": 0,
|
||||||
"allow_in_quick_entry": 0,
|
"allow_in_quick_entry": 0,
|
||||||
@@ -978,7 +1104,7 @@
|
|||||||
"issingle": 0,
|
"issingle": 0,
|
||||||
"istable": 0,
|
"istable": 0,
|
||||||
"max_attachments": 0,
|
"max_attachments": 0,
|
||||||
"modified": "2018-09-13 10:15:45.704550",
|
"modified": "2018-11-14 13:24:01.529536",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "Healthcare",
|
"module": "Healthcare",
|
||||||
"name": "Patient Appointment",
|
"name": "Patient Appointment",
|
||||||
|
|||||||
Reference in New Issue
Block a user