refactor: Healthcare masters

This commit is contained in:
Rucha Mahabal 2020-02-02 23:21:18 +05:30
parent d089029bb4
commit 0a35b2207e
14 changed files with 622 additions and 2194 deletions

View File

@ -29,7 +29,7 @@ frappe.ui.form.on('Clinical Procedure', {
refresh: function(frm) { refresh: function(frm) {
frm.set_query("patient", function () { frm.set_query("patient", function () {
return { return {
filters: {"status": "Disabled"} filters: {"status": ["!=", "Disabled"]}
}; };
}); });
frm.set_query("appointment", function () { frm.set_query("appointment", function () {

View File

@ -4,7 +4,7 @@
frappe.ui.form.on('Healthcare Practitioner', { frappe.ui.form.on('Healthcare Practitioner', {
setup: function(frm) { setup: function(frm) {
frm.set_query('account', 'accounts', function(doc, cdt, cdn) { frm.set_query('account', 'accounts', function(doc, cdt, cdn) {
var d = locals[cdt][cdn]; let d = locals[cdt][cdn];
return { return {
filters: { filters: {
'root_type': 'Income', 'root_type': 'Income',
@ -16,23 +16,28 @@ frappe.ui.form.on('Healthcare Practitioner', {
}, },
refresh: function(frm) { refresh: function(frm) {
frappe.dynamic_link = {doc: frm.doc, fieldname: 'name', doctype: 'Healthcare Practitioner'}; frappe.dynamic_link = {doc: frm.doc, fieldname: 'name', doctype: 'Healthcare Practitioner'};
if(!frm.is_new()) {
if (!frm.is_new()) {
frappe.contacts.render_address_and_contact(frm); frappe.contacts.render_address_and_contact(frm);
} else {
frappe.contacts.clear_address_and_contact(frm);
} }
frm.set_query("service_unit", "practitioner_schedules", function(){
frm.set_query('service_unit', 'practitioner_schedules', function(){
return { return {
filters: { filters: {
"is_group": false, 'is_group': false,
"allow_appointments": true 'allow_appointments': true
} }
}; };
}); });
set_query_service_item(frm, 'inpatient_visit_charge_item'); set_query_service_item(frm, 'inpatient_visit_charge_item');
set_query_service_item(frm, 'op_consulting_charge_item'); set_query_service_item(frm, 'op_consulting_charge_item');
} }
}); });
var set_query_service_item = function(frm, service_item_field) { let set_query_service_item = function(frm, service_item_field) {
frm.set_query(service_item_field, function() { frm.set_query(service_item_field, function() {
return { return {
filters: { filters: {
@ -43,62 +48,62 @@ var set_query_service_item = function(frm, service_item_field) {
}); });
}; };
frappe.ui.form.on("Healthcare Practitioner", "user_id",function(frm) { frappe.ui.form.on('Healthcare Practitioner', 'user_id',function(frm) {
if(frm.doc.user_id){ if (frm.doc.user_id) {
frappe.call({ frappe.call({
"method": "frappe.client.get", 'method': 'frappe.client.get',
args: { args: {
doctype: "User", doctype: 'User',
name: frm.doc.user_id name: frm.doc.user_id
}, },
callback: function (data) { callback: function (data) {
frappe.model.get_value('Employee', {'user_id': frm.doc.user_id}, 'name', frappe.model.get_value('Employee', {'user_id': frm.doc.user_id}, 'name',
function(data) { function(data) {
if(data){ if (data) {
if(!frm.doc.employee || frm.doc.employee != data.name) if (!frm.doc.employee || frm.doc.employee != data.name)
frappe.model.set_value(frm.doctype,frm.docname, "employee", data.name); frappe.model.set_value(frm.doctype, frm.docname, 'employee', data.name);
}else{ } else {
frappe.model.set_value(frm.doctype,frm.docname, "employee", ""); frappe.model.set_value(frm.doctype, frm.docname, 'employee', '');
} }
} }
); );
if(!frm.doc.first_name || frm.doc.first_name != data.message.first_name) if (!frm.doc.first_name || frm.doc.first_name != data.message.first_name)
frappe.model.set_value(frm.doctype,frm.docname, "first_name", data.message.first_name); frappe.model.set_value(frm.doctype,frm.docname, 'first_name', data.message.first_name);
if(!frm.doc.middle_name || frm.doc.middle_name != data.message.middle_name) if (!frm.doc.middle_name || frm.doc.middle_name != data.message.middle_name)
frappe.model.set_value(frm.doctype,frm.docname, "middle_name", data.message.middle_name); frappe.model.set_value(frm.doctype,frm.docname, 'middle_name', data.message.middle_name);
if(!frm.doc.last_name || frm.doc.last_name != data.message.last_name) if (!frm.doc.last_name || frm.doc.last_name != data.message.last_name)
frappe.model.set_value(frm.doctype,frm.docname, "last_name", data.message.last_name); frappe.model.set_value(frm.doctype,frm.docname, 'last_name', data.message.last_name);
if(!frm.doc.mobile_phone || frm.doc.mobile_phone != data.message.mobile_no) if (!frm.doc.mobile_phone || frm.doc.mobile_phone != data.message.mobile_no)
frappe.model.set_value(frm.doctype,frm.docname, "mobile_phone", data.message.mobile_no); frappe.model.set_value(frm.doctype,frm.docname, 'mobile_phone', data.message.mobile_no);
} }
}); });
} }
}); });
frappe.ui.form.on("Healthcare Practitioner", "employee", function(frm) { frappe.ui.form.on('Healthcare Practitioner', 'employee', function(frm) {
if(frm.doc.employee){ if (frm.doc.employee){
frappe.call({ frappe.call({
"method": "frappe.client.get", 'method': 'frappe.client.get',
args: { args: {
doctype: "Employee", doctype: 'Employee',
name: frm.doc.employee name: frm.doc.employee
}, },
callback: function (data) { callback: function (data) {
if(!frm.doc.user_id || frm.doc.user_id != data.message.user_id) if (!frm.doc.user_id || frm.doc.user_id != data.message.user_id)
frm.set_value("user_id", data.message.user_id); frm.set_value('user_id', data.message.user_id);
if(!frm.doc.designation || frm.doc.designation != data.message.designation) if (!frm.doc.designation || frm.doc.designation != data.message.designation)
frappe.model.set_value(frm.doctype,frm.docname, "designation", data.message.designation); frappe.model.set_value(frm.doctype,frm.docname, 'designation', data.message.designation);
if(!frm.doc.first_name || !frm.doc.user_id){ if (!frm.doc.first_name || !frm.doc.user_id){
frappe.model.set_value(frm.doctype,frm.docname, "first_name", data.message.employee_name); frappe.model.set_value(frm.doctype,frm.docname, 'first_name', data.message.first_name);
frappe.model.set_value(frm.doctype,frm.docname, "middle_name", ""); frappe.model.set_value(frm.doctype,frm.docname, 'middle_name', '');
frappe.model.set_value(frm.doctype,frm.docname, "last_name", ""); frappe.model.set_value(frm.doctype,frm.docname, 'last_name', data.message.last_name);
} }
if(!frm.doc.mobile_phone || !frm.doc.user_id) if (!frm.doc.mobile_phone || !frm.doc.user_id)
frappe.model.set_value(frm.doctype,frm.docname, "mobile_phone", data.message.cell_number); frappe.model.set_value(frm.doctype,frm.docname, 'mobile_phone', data.message.cell_number);
if(!frm.doc.address || frm.doc.address != data.message.current_address) if (!frm.doc.address || frm.doc.address != data.message.current_address)
frappe.model.set_value(frm.doctype,frm.docname, "address", data.message.current_address); frappe.model.set_value(frm.doctype,frm.docname, 'address', data.message.current_address);
} }
}); });
} }

View File

@ -9,6 +9,7 @@ from frappe import throw, _
from frappe.utils import cstr from frappe.utils import cstr
from erpnext.accounts.party import validate_party_accounts from erpnext.accounts.party import validate_party_accounts
from frappe.contacts.address_and_contact import load_address_and_contact, delete_contact_and_address from frappe.contacts.address_and_contact import load_address_and_contact, delete_contact_and_address
from frappe.model.naming import append_number_if_name_exists
from frappe.desk.reportview import build_match_conditions, get_filters_cond from frappe.desk.reportview import build_match_conditions, get_filters_cond
class HealthcarePractitioner(Document): class HealthcarePractitioner(Document):
@ -16,63 +17,63 @@ class HealthcarePractitioner(Document):
load_address_and_contact(self) load_address_and_contact(self)
def autoname(self): def autoname(self):
# practitioner first_name and last_name # concat first and last name
self.name = " ".join(filter(None, self.name = self.practitioner_name
[cstr(self.get(f)).strip() for f in ["first_name","middle_name","last_name"]]))
if frappe.db.exists('Healthcare Practitioner', self.name):
self.name = append_number_if_name_exists('Contact', self.name)
def validate(self): def validate(self):
self.set_full_name()
validate_party_accounts(self) validate_party_accounts(self)
if self.inpatient_visit_charge_item: if self.inpatient_visit_charge_item:
validate_service_item(self.inpatient_visit_charge_item, "Configure a service Item for Inpatient Visit Charge Item") validate_service_item(self.inpatient_visit_charge_item, 'Configure a service Item for Inpatient Consulting Charge Item')
if self.op_consulting_charge_item: if self.op_consulting_charge_item:
validate_service_item(self.op_consulting_charge_item, "Configure a service Item for Out Patient Consulting Charge Item") validate_service_item(self.op_consulting_charge_item, 'Configure a service Item for Out Patient Consulting Charge Item')
if self.user_id: if self.user_id:
self.validate_for_enabled_user_id() self.validate_user_id()
self.validate_duplicate_user_id()
existing_user_id = frappe.db.get_value("Healthcare Practitioner", self.name, "user_id")
if self.user_id != existing_user_id:
frappe.permissions.remove_user_permission(
"Healthcare Practitioner", self.name, existing_user_id)
else: else:
existing_user_id = frappe.db.get_value("Healthcare Practitioner", self.name, "user_id") existing_user_id = frappe.db.get_value('Healthcare Practitioner', self.name, 'user_id')
if existing_user_id: if existing_user_id:
frappe.permissions.remove_user_permission( frappe.permissions.remove_user_permission(
"Healthcare Practitioner", self.name, existing_user_id) 'Healthcare Practitioner', self.name, existing_user_id)
def on_update(self): def on_update(self):
if self.user_id: if self.user_id:
frappe.permissions.add_user_permission("Healthcare Practitioner", self.name, self.user_id) frappe.permissions.add_user_permission('Healthcare Practitioner', self.name, self.user_id)
def set_full_name(self):
self.practitioner_name = ' '.join(filter(None, [self.first_name, self.last_name]))
def validate_for_enabled_user_id(self): def validate_user_id(self):
enabled = frappe.db.get_value("User", self.user_id, "enabled") if not frappe.db.exists('User', self.user_id):
if enabled is None: frappe.throw(_('User {0} does not exist').format(self.user_id))
frappe.throw(_("User {0} does not exist").format(self.user_id)) elif not frappe.db.exists('User', self.user_id, 'enabled'):
if enabled == 0: frappe.throw(_('User {0} is disabled').format(self.user_id))
frappe.throw(_("User {0} is disabled").format(self.user_id))
def validate_duplicate_user_id(self): # check duplicate
practitioner = frappe.db.sql_list("""select name from `tabHealthcare Practitioner` where practitioner = frappe.db.exists('Healthcare Practitioner', {
user_id=%s and name!=%s""", (self.user_id, self.name)) 'user_id': self.user_id,
'name': ('!=', self.name)
})
if practitioner: if practitioner:
throw(_("User {0} is already assigned to Healthcare Practitioner {1}").format( frappe.throw(_('User {0} is already assigned to Healthcare Practitioner {1}').format(
self.user_id, practitioner[0]), frappe.DuplicateEntryError) self.user_id, practitioner))
def on_trash(self): def on_trash(self):
delete_contact_and_address('Healthcare Practitioner', self.name) delete_contact_and_address('Healthcare Practitioner', self.name)
def validate_service_item(item, msg): def validate_service_item(item, msg):
if frappe.db.get_value("Item", item, "is_stock_item") == 1: if frappe.db.get_value('Item', item, 'is_stock_item'):
frappe.throw(_(msg)) frappe.throw(_(msg))
def get_practitioner_list(doctype, txt, searchfield, start, page_len, filters=None): def get_practitioner_list(doctype, txt, searchfield, start, page_len, filters=None):
fields = ["name", "first_name", "mobile_phone"] fields = ['name', 'practitioner_name', 'mobile_phone']
filters = { filters = {
'name': ("like", "%%%s%%" % txt) 'name': ('like', '%%%s%%' % txt)
} }
return frappe.get_all("Healthcare Practitioner", fields = fields, return frappe.get_all('Healthcare Practitioner', fields = fields,
filters = filters, start=start, page_length=page_len, order_by="name, first_name", as_list=1) filters = filters, start=start, page_length=page_len, order_by='name, practitioner_name', as_list=1)

View File

@ -3,7 +3,7 @@
frappe.ui.form.on('Healthcare Service Unit', { frappe.ui.form.on('Healthcare Service Unit', {
onload: function(frm) { onload: function(frm) {
frm.list_route = "Tree/Healthcare Service Unit"; frm.list_route = 'Tree/Healthcare Service Unit';
// get query select healthcare service unit // get query select healthcare service unit
frm.fields_dict['parent_healthcare_service_unit'].get_query = function(doc) { frm.fields_dict['parent_healthcare_service_unit'].get_query = function(doc) {
@ -16,32 +16,32 @@ frappe.ui.form.on('Healthcare Service Unit', {
}; };
}, },
refresh: function(frm) { refresh: function(frm) {
frm.trigger("set_root_readonly"); frm.trigger('set_root_readonly');
frm.set_df_property("service_unit_type", "reqd", 1); frm.set_df_property('service_unit_type', 'reqd', 1);
frm.add_custom_button(__("Healthcare Service Unit Tree"), function() { frm.add_custom_button(__('Healthcare Service Unit Tree'), function() {
frappe.set_route("Tree", "Healthcare Service Unit"); frappe.set_route('Tree', 'Healthcare Service Unit');
}); });
}, },
set_root_readonly: function(frm) { set_root_readonly: function(frm) {
// read-only for root healthcare service unit // read-only for root healthcare service unit
frm.set_intro(""); frm.set_intro('');
if(!frm.doc.parent_healthcare_service_unit) { if (!frm.doc.parent_healthcare_service_unit) {
frm.set_read_only(); frm.set_read_only();
frm.set_intro(__("This is a root healthcare service unit and cannot be edited."), true); frm.set_intro(__('This is a root healthcare service unit and cannot be edited.'), true);
} }
}, },
allow_appointments: function(frm) { allow_appointments: function(frm) {
if(!frm.doc.allow_appointments){ if (!frm.doc.allow_appointments) {
frm.set_value("overlap_appointments", false); frm.set_value('overlap_appointments', false);
} }
}, },
is_group: function(frm) { is_group: function(frm) {
if(frm.doc.is_group == 1){ if (frm.doc.is_group == 1) {
frm.set_value("allow_appointments", false); frm.set_value('allow_appointments', false);
frm.set_df_property("service_unit_type", "reqd", 0); frm.set_df_property('service_unit_type', 'reqd', 0);
} }
else{ else {
frm.set_df_property("service_unit_type", "reqd", 1); frm.set_df_property('service_unit_type', 'reqd', 1);
} }
} }
}); });

View File

@ -1,542 +1,209 @@
{ {
"allow_copy": 0, "actions": [],
"allow_events_in_timeline": 0,
"allow_guest_to_view": 0,
"allow_import": 1, "allow_import": 1,
"allow_rename": 1, "allow_rename": 1,
"autoname": "field:healthcare_service_unit_name", "autoname": "field:healthcare_service_unit_name",
"beta": 1, "beta": 1,
"creation": "2016-09-21 13:48:14.731437", "creation": "2016-09-21 13:48:14.731437",
"custom": 0,
"description": "Healthcare Service Unit", "description": "Healthcare Service Unit",
"docstatus": 0,
"doctype": "DocType", "doctype": "DocType",
"document_type": "Setup", "document_type": "Setup",
"editable_grid": 1, "editable_grid": 1,
"engine": "InnoDB",
"field_order": [
"healthcare_service_unit_name",
"parent_healthcare_service_unit",
"is_group",
"service_unit_type",
"allow_appointments",
"overlap_appointments",
"inpatient_occupancy",
"occupancy_status",
"column_break_9",
"warehouse",
"company",
"lft",
"rgt",
"old_parent"
],
"fields": [ "fields": [
{ {
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"fieldname": "healthcare_service_unit_name", "fieldname": "healthcare_service_unit_name",
"fieldtype": "Data", "fieldtype": "Data",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 1, "in_global_search": 1,
"in_list_view": 1, "in_list_view": 1,
"in_standard_filter": 0,
"label": "Service Unit", "label": "Service Unit",
"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, "reqd": 1,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 1 "unique": 1
}, },
{ {
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 1, "bold": 1,
"collapsible": 0,
"columns": 0,
"fieldname": "parent_healthcare_service_unit", "fieldname": "parent_healthcare_service_unit",
"fieldtype": "Link", "fieldtype": "Link",
"hidden": 0,
"ignore_user_permissions": 1, "ignore_user_permissions": 1,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 1, "in_list_view": 1,
"in_standard_filter": 0,
"label": "Parent Service Unit", "label": "Parent Service Unit",
"length": 0, "options": "Healthcare Service Unit"
"no_copy": 0,
"options": "Healthcare Service Unit",
"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": 1, "bold": 1,
"collapsible": 0,
"columns": 0,
"default": "0", "default": "0",
"depends_on": "eval:doc.inpatient_occupancy != 1 && doc.allow_appointments != 1", "depends_on": "eval:doc.inpatient_occupancy != 1 && doc.allow_appointments != 1",
"fieldname": "is_group", "fieldname": "is_group",
"fieldtype": "Check", "fieldtype": "Check",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 1, "in_list_view": 1,
"in_standard_filter": 0, "label": "Is Group"
"label": "Is Group",
"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": 1, "bold": 1,
"collapsible": 0,
"columns": 0,
"depends_on": "eval:doc.is_group != 1", "depends_on": "eval:doc.is_group != 1",
"fieldname": "service_unit_type", "fieldname": "service_unit_type",
"fieldtype": "Link", "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": "Service Unit Type", "label": "Service Unit Type",
"length": 0, "options": "Healthcare Service Unit Type"
"no_copy": 0,
"options": "Healthcare Service Unit 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_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 1, "bold": 1,
"collapsible": 0,
"columns": 0,
"default": "0", "default": "0",
"depends_on": "eval:doc.is_group != 1 && doc.inpatient_occupancy != 1", "depends_on": "eval:doc.is_group != 1 && doc.inpatient_occupancy != 1",
"fetch_from": "service_unit_type.allow_appointments", "fetch_from": "service_unit_type.allow_appointments",
"fieldname": "allow_appointments", "fieldname": "allow_appointments",
"fieldtype": "Check", "fieldtype": "Check",
"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": "Allow Appointments", "label": "Allow Appointments",
"length": 0,
"no_copy": 1, "no_copy": 1,
"permlevel": 0, "read_only": 1
"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": "0", "default": "0",
"depends_on": "eval:doc.is_group != 1 && doc.allow_appointments == 1 && doc.inpatient_occupany != 1", "depends_on": "eval:doc.is_group != 1 && doc.allow_appointments == 1 && doc.inpatient_occupany != 1",
"fetch_from": "service_unit_type.overlap_appointments", "fetch_from": "service_unit_type.overlap_appointments",
"fieldname": "overlap_appointments", "fieldname": "overlap_appointments",
"fieldtype": "Check", "fieldtype": "Check",
"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": "Allow Overlap", "label": "Allow Overlap",
"length": 0,
"no_copy": 1, "no_copy": 1,
"permlevel": 0, "read_only": 1
"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": 1, "bold": 1,
"collapsible": 0,
"columns": 0,
"default": "0", "default": "0",
"depends_on": "eval:doc.allow_appointments != 1 && doc.is_group != 1", "depends_on": "eval:doc.allow_appointments != 1 && doc.is_group != 1",
"fetch_from": "service_unit_type.inpatient_occupancy", "fetch_from": "service_unit_type.inpatient_occupancy",
"fieldname": "inpatient_occupancy", "fieldname": "inpatient_occupancy",
"fieldtype": "Check", "fieldtype": "Check",
"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": "Inpatient Occupancy", "label": "Inpatient Occupancy",
"length": 0,
"no_copy": 1, "no_copy": 1,
"permlevel": 0,
"precision": "",
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 1, "read_only": 1,
"remember_last_selected_value": 0, "search_index": 1
"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,
"default": "",
"depends_on": "eval:doc.inpatient_occupancy == 1", "depends_on": "eval:doc.inpatient_occupancy == 1",
"fieldname": "occupancy_status", "fieldname": "occupancy_status",
"fieldtype": "Select", "fieldtype": "Select",
"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": "Occupancy Status", "label": "Occupancy Status",
"length": 0,
"no_copy": 1, "no_copy": 1,
"options": "Vacant\nOccupied", "options": "Vacant\nOccupied",
"permlevel": 0, "read_only": 1
"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": 1, "bold": 1,
"collapsible": 0,
"columns": 0,
"depends_on": "eval:doc.is_group != 1", "depends_on": "eval:doc.is_group != 1",
"fieldname": "warehouse", "fieldname": "warehouse",
"fieldtype": "Link", "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": "Warehouse", "label": "Warehouse",
"length": 0,
"no_copy": 1, "no_copy": 1,
"options": "Warehouse", "options": "Warehouse"
"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": "company", "fieldname": "company",
"fieldtype": "Link", "fieldtype": "Link",
"hidden": 0,
"ignore_user_permissions": 1, "ignore_user_permissions": 1,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 1, "in_list_view": 1,
"in_standard_filter": 1, "in_standard_filter": 1,
"label": "Company", "label": "Company",
"length": 0,
"no_copy": 0,
"options": "Company", "options": "Company",
"permlevel": 0,
"precision": "",
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 0,
"remember_last_selected_value": 1, "remember_last_selected_value": 1,
"report_hide": 0,
"reqd": 1, "reqd": 1,
"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": "lft", "fieldname": "lft",
"fieldtype": "Int", "fieldtype": "Int",
"hidden": 1, "hidden": 1,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "lft", "label": "lft",
"length": 0,
"no_copy": 1, "no_copy": 1,
"permlevel": 0,
"precision": "",
"print_hide": 1, "print_hide": 1,
"print_hide_if_no_value": 0, "search_index": 1
"read_only": 0,
"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": "rgt", "fieldname": "rgt",
"fieldtype": "Int", "fieldtype": "Int",
"hidden": 1, "hidden": 1,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "rgt", "label": "rgt",
"length": 0,
"no_copy": 1, "no_copy": 1,
"permlevel": 0,
"precision": "",
"print_hide": 1, "print_hide": 1,
"print_hide_if_no_value": 0, "search_index": 1
"read_only": 0,
"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": "old_parent", "fieldname": "old_parent",
"fieldtype": "Link", "fieldtype": "Link",
"hidden": 1, "hidden": 1,
"ignore_user_permissions": 1, "ignore_user_permissions": 1,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Old Parent", "label": "Old Parent",
"length": 0,
"no_copy": 1, "no_copy": 1,
"options": "Healthcare Service Unit", "options": "Healthcare Service Unit",
"permlevel": 0,
"precision": "",
"print_hide": 1, "print_hide": 1,
"print_hide_if_no_value": 0, "report_hide": 1
"read_only": 0, },
"remember_last_selected_value": 0, {
"report_hide": 1, "fieldname": "column_break_9",
"reqd": 0, "fieldtype": "Column Break"
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
} }
], ],
"has_web_view": 0, "links": [],
"hide_heading": 0, "modified": "2020-01-30 18:03:29.031351",
"hide_toolbar": 0,
"idx": 0,
"image_view": 0,
"in_create": 0,
"is_submittable": 0,
"issingle": 0,
"istable": 0,
"max_attachments": 0,
"modified": "2018-10-04 21:09:52.261882",
"modified_by": "Administrator", "modified_by": "Administrator",
"module": "Healthcare", "module": "Healthcare",
"name": "Healthcare Service Unit", "name": "Healthcare Service Unit",
"name_case": "",
"owner": "Administrator", "owner": "Administrator",
"permissions": [ "permissions": [
{ {
"amend": 0,
"cancel": 0,
"create": 0,
"delete": 0,
"email": 1, "email": 1,
"export": 1, "export": 1,
"if_owner": 0,
"import": 0,
"permlevel": 0,
"print": 1, "print": 1,
"read": 1, "read": 1,
"report": 1, "report": 1,
"role": "Nursing User", "role": "Nursing User",
"set_user_permissions": 0, "share": 1
"share": 1,
"submit": 0,
"write": 0
}, },
{ {
"amend": 0,
"cancel": 0,
"create": 1, "create": 1,
"delete": 1, "delete": 1,
"email": 1, "email": 1,
"export": 1, "export": 1,
"if_owner": 0,
"import": 0,
"permlevel": 0,
"print": 1, "print": 1,
"read": 1, "read": 1,
"report": 1, "report": 1,
"role": "Healthcare Administrator", "role": "Healthcare Administrator",
"set_user_permissions": 0,
"share": 1, "share": 1,
"submit": 0,
"write": 1 "write": 1
}, },
{ {
"amend": 0,
"cancel": 0,
"create": 1, "create": 1,
"delete": 0,
"email": 1, "email": 1,
"export": 1, "export": 1,
"if_owner": 0,
"import": 0,
"permlevel": 0,
"print": 1, "print": 1,
"read": 1, "read": 1,
"report": 1, "report": 1,
"role": "Physician", "role": "Physician",
"set_user_permissions": 0,
"share": 1, "share": 1,
"submit": 0,
"write": 1 "write": 1
} }
], ],
"quick_entry": 1, "quick_entry": 1,
"read_only": 0,
"read_only_onload": 0,
"restrict_to_domain": "Healthcare", "restrict_to_domain": "Healthcare",
"search_fields": "healthcare_service_unit_name", "search_fields": "healthcare_service_unit_name",
"show_name_in_global_search": 0,
"sort_field": "modified", "sort_field": "modified",
"sort_order": "DESC", "sort_order": "DESC",
"title_field": "healthcare_service_unit_name", "title_field": "healthcare_service_unit_name",
"track_changes": 1, "track_changes": 1
"track_seen": 0,
"track_views": 0
} }

View File

@ -23,9 +23,9 @@ class HealthcareServiceUnit(NestedSet):
self.validate_one_root() self.validate_one_root()
def validate(self): def validate(self):
if self.is_group == 1: if self.is_group:
self.allow_appointments = 0 self.allow_appointments = 0
self.overlap_appointments = 0 self.overlap_appointments = 0
self.inpatient_occupancy = 0 self.inpatient_occupancy = 0
elif self.allow_appointments != 1: elif not self.allow_appointments:
self.overlap_appointments = 0 self.overlap_appointments = 0

View File

@ -2,118 +2,84 @@
// For license information, please see license.txt // For license information, please see license.txt
frappe.ui.form.on('Healthcare Service Unit Type', { frappe.ui.form.on('Healthcare Service Unit Type', {
refresh: function(frm) {
frm.set_df_property('item_code', 'read_only', frm.doc.__islocal ? 0 : 1);
if (!frm.doc.__islocal) {
frm.add_custom_button(__('Change Item Code'), function() {
change_item_code(cur_frm, frm.doc);
});
}
},
service_unit_type: function(frm) { service_unit_type: function(frm) {
set_item_details(frm); set_item_details(frm);
if(!frm.doc.__islocal){
if (!frm.doc.__islocal) {
frm.doc.change_in_item = 1; frm.doc.change_in_item = 1;
} }
}, },
is_billable: function(frm) { is_billable: function(frm) {
set_item_details(frm); set_item_details(frm);
}, },
refresh: function(frm) {
frm.set_df_property("item_code", "read_only", frm.doc.__islocal ? 0 : 1);
if(!frm.doc.__islocal) {
frm.add_custom_button(__('Change Item Code'), function() {
change_item_code(cur_frm,frm.doc);
} );
if(frm.doc.disabled == 1){
frm.add_custom_button(__('Enable'), function() {
enable(cur_frm);
} );
}
else{
frm.add_custom_button(__('Disable'), function() {
disable(cur_frm);
} );
}
}
},
rate: function(frm) { rate: function(frm) {
if(!frm.doc.__islocal){ if (!frm.doc.__islocal) {
frm.doc.change_in_item = 1; frm.doc.change_in_item = 1;
} }
}, },
item_group: function(frm) { item_group: function(frm) {
if(!frm.doc.__islocal){ if (!frm.doc.__islocal) {
frm.doc.change_in_item = 1; frm.doc.change_in_item = 1;
} }
}, },
description: function(frm) { description: function(frm) {
if(!frm.doc.__islocal){ if (!frm.doc.__islocal) {
frm.doc.change_in_item = 1; frm.doc.change_in_item = 1;
} }
} }
}); });
var disable = function(frm){ let set_item_details = function(frm) {
var doc = frm.doc; if (frm.doc.service_unit_type && frm.doc.is_billable) {
frappe.call({ if (!frm.doc.item_code)
method: "erpnext.healthcare.doctype.healthcare_service_unit_type.healthcare_service_unit_type.disable_enable", frm.set_value('item_code', frm.doc.service_unit_type);
args: {status: 1, doc_name: doc.name, item: doc.item, is_billable: doc.is_billable}, if (!frm.doc.description)
callback: function(){ frm.set_value('description', frm.doc.service_unit_type);
cur_frm.reload_doc(); if (!frm.doc.item_group)
} frm.set_value('item_group', 'Services');
}); }
}; };
var enable = function(frm){ let change_item_code = function(frm, doc) {
var doc = frm.doc; let d = new frappe.ui.Dialog({
frappe.call({ title: __('Change Item Code'),
method: "erpnext.healthcare.doctype.healthcare_service_unit_type.healthcare_service_unit_type.disable_enable", fields: [
args: {status: 0, doc_name: doc.name, item: doc.item, is_billable: doc.is_billable},
callback: function(){
cur_frm.reload_doc();
}
});
};
var change_item_code = function(frm, doc){
var d = new frappe.ui.Dialog({
title:__("Change Item Code"),
fields:[
{ {
"fieldtype": "Data", 'fieldtype': 'Data',
"label": "Item Code", 'label': 'Item Code',
"fieldname": "Item Code", 'fieldname': 'item_code',
reqd:1 reqd: 1
},
{
"fieldtype": "Button",
"label": __("Change Code"),
click: function() {
var values = d.get_values();
if(!values)
return;
change_item_code_from_unit_type(values["Item Code"], doc);
d.hide();
}
} }
] ],
primary_action: function() {
let values = d.get_values();
if (values) {
frappe.call({
"method": "erpnext.healthcare.doctype.healthcare_service_unit_type.healthcare_service_unit_type.change_item_code",
"args": {item: doc.item, item_code: values['item_code'], doc_name: doc.name},
callback: function () {
frm.reload_doc();
}
});
}
d.hide();
},
primary_action_label: __("Change Template Code")
}); });
d.show(); d.show();
d.set_values({ d.set_values({
'Item Code': frm.doc.item_code 'Item Code': frm.doc.item_code
}); });
var change_item_code_from_unit_type = function(item_code, doc){
frappe.call({
"method": "erpnext.healthcare.doctype.healthcare_service_unit_type.healthcare_service_unit_type.change_item_code",
"args": {item: doc.item, item_code: item_code, doc_name: doc.name},
callback: function () {
frm.reload_doc();
}
});
};
};
var set_item_details = function(frm) {
if(frm.doc.service_unit_type && frm.doc.is_billable == 1){
if(!frm.doc.item_code)
frm.set_value("item_code", frm.doc.service_unit_type);
if(!frm.doc.description)
frm.set_value("description", frm.doc.service_unit_type);
if(!frm.doc.item_group)
frm.set_value("item_group", 'Services');
}
}; };

View File

@ -1,588 +1,164 @@
{ {
"allow_copy": 0, "actions": [],
"allow_guest_to_view": 0, "allow_import": 1,
"allow_import": 1, "allow_rename": 1,
"allow_rename": 1, "autoname": "field:service_unit_type",
"autoname": "field:service_unit_type", "creation": "2018-07-11 16:47:51.414675",
"beta": 0, "doctype": "DocType",
"creation": "2018-07-11 16:47:51.414675", "editable_grid": 1,
"custom": 0, "engine": "InnoDB",
"docstatus": 0, "field_order": [
"doctype": "DocType", "disabled",
"document_type": "", "service_unit_type",
"editable_grid": 1, "allow_appointments",
"engine": "InnoDB", "overlap_appointments",
"inpatient_occupancy",
"is_billable",
"item_details",
"item",
"item_code",
"item_group",
"uom",
"no_of_hours",
"column_break_11",
"rate",
"description",
"change_in_item"
],
"fields": [ "fields": [
{ {
"allow_bulk_edit": 0, "fieldname": "service_unit_type",
"allow_in_quick_entry": 0, "fieldtype": "Data",
"allow_on_submit": 0, "in_list_view": 1,
"bold": 0, "label": "Service Unit Type",
"collapsible": 0, "reqd": 1,
"columns": 0,
"fieldname": "service_unit_type",
"fieldtype": "Data",
"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": "Service Unit Type",
"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": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 1 "unique": 1
}, },
{ {
"allow_bulk_edit": 0, "bold": 1,
"allow_in_quick_entry": 0, "default": "0",
"allow_on_submit": 0, "depends_on": "eval:doc.inpatient_occupancy != 1",
"bold": 1, "fieldname": "allow_appointments",
"collapsible": 0, "fieldtype": "Check",
"columns": 0, "label": "Allow Appointments",
"default": "0", "no_copy": 1
"depends_on": "eval:doc.inpatient_occupancy != 1", },
"fieldname": "allow_appointments",
"fieldtype": "Check",
"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": "Allow Appointments",
"length": 0,
"no_copy": 1,
"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, "bold": 1,
"allow_in_quick_entry": 0, "default": "0",
"allow_on_submit": 0, "depends_on": "eval:doc.allow_appointments == 1 && doc.inpatient_occupany != 1",
"bold": 1, "fieldname": "overlap_appointments",
"collapsible": 0, "fieldtype": "Check",
"columns": 0, "label": "Allow Overlap",
"default": "0", "no_copy": 1
"depends_on": "eval:doc.allow_appointments == 1 && doc.inpatient_occupany != 1", },
"fieldname": "overlap_appointments",
"fieldtype": "Check",
"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": "Allow Overlap",
"length": 0,
"no_copy": 1,
"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, "bold": 1,
"allow_in_quick_entry": 0, "default": "0",
"allow_on_submit": 0, "depends_on": "eval:doc.allow_appointments != 1",
"bold": 1, "fieldname": "inpatient_occupancy",
"collapsible": 0, "fieldtype": "Check",
"columns": 0, "label": "Inpatient Occupancy",
"default": "0", "no_copy": 1
"depends_on": "eval:doc.allow_appointments != 1", },
"fieldname": "inpatient_occupancy",
"fieldtype": "Check",
"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": "Inpatient Occupancy",
"length": 0,
"no_copy": 1,
"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, "bold": 1,
"allow_in_quick_entry": 0, "default": "0",
"allow_on_submit": 0, "depends_on": "eval:doc.inpatient_occupancy == 1 && doc.allow_appointments != 1",
"bold": 1, "fieldname": "is_billable",
"collapsible": 0, "fieldtype": "Check",
"columns": 0, "label": "Is Billable"
"depends_on": "eval:doc.inpatient_occupancy == 1 && doc.allow_appointments != 1", },
"fieldname": "is_billable",
"fieldtype": "Check",
"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": "Is Billable",
"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, "depends_on": "is_billable",
"allow_in_quick_entry": 0, "fieldname": "item_details",
"allow_on_submit": 0, "fieldtype": "Section Break",
"bold": 0, "label": "Item Details"
"collapsible": 0, },
"columns": 0,
"depends_on": "is_billable",
"fieldname": "item_details",
"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,
"label": "Item Details",
"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, "fieldname": "item",
"allow_in_quick_entry": 0, "fieldtype": "Link",
"allow_on_submit": 0, "label": "Item",
"bold": 0, "options": "Item",
"collapsible": 0, "read_only": 1
"columns": 0, },
"fieldname": "item",
"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": "Item",
"length": 0,
"no_copy": 0,
"options": "Item",
"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, "fieldname": "item_code",
"allow_in_quick_entry": 0, "fieldtype": "Data",
"allow_on_submit": 0, "label": "Item Code",
"bold": 0, "mandatory_depends_on": "eval: doc.is_billable == 1"
"collapsible": 0, },
"columns": 0,
"fieldname": "item_code",
"fieldtype": "Data",
"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": "Item Code",
"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, "fieldname": "item_group",
"allow_in_quick_entry": 0, "fieldtype": "Link",
"allow_on_submit": 0, "label": "Item Group",
"bold": 0, "mandatory_depends_on": "eval: doc.is_billable == 1",
"collapsible": 0, "options": "Item Group"
"columns": 0, },
"fieldname": "item_group",
"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": "Item Group",
"length": 0,
"no_copy": 0,
"options": "Item Group",
"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, "fieldname": "uom",
"allow_in_quick_entry": 0, "fieldtype": "Link",
"allow_on_submit": 0, "label": "UOM",
"bold": 0, "mandatory_depends_on": "eval: doc.is_billable == 1",
"collapsible": 0, "options": "UOM"
"columns": 0, },
"fieldname": "uom",
"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": "UOM",
"length": 0,
"no_copy": 0,
"options": "UOM",
"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, "fieldname": "no_of_hours",
"allow_in_quick_entry": 0, "fieldtype": "Int",
"allow_on_submit": 0, "label": "UOM Conversion in Hours",
"bold": 0, "mandatory_depends_on": "eval: doc.is_billable == 1"
"collapsible": 0, },
"columns": 0,
"fieldname": "no_of_hours",
"fieldtype": "Int",
"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": "UOM Conversion in Hours",
"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, "fieldname": "column_break_11",
"allow_in_quick_entry": 0, "fieldtype": "Column Break"
"allow_on_submit": 0, },
"bold": 0,
"collapsible": 0,
"columns": 0,
"fieldname": "column_break_11",
"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, "fieldname": "rate",
"allow_in_quick_entry": 0, "fieldtype": "Currency",
"allow_on_submit": 0, "label": "Rate / UOM"
"bold": 0, },
"collapsible": 0,
"columns": 0,
"fieldname": "rate",
"fieldtype": "Currency",
"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": "Rate / UOM",
"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, "default": "0",
"allow_in_quick_entry": 0, "fieldname": "disabled",
"allow_on_submit": 0, "fieldtype": "Check",
"bold": 0, "label": "Disabled",
"collapsible": 0, "no_copy": 1
"columns": 0, },
"default": "0",
"fieldname": "disabled",
"fieldtype": "Check",
"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": "Disabled",
"length": 0,
"no_copy": 1,
"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, "fieldname": "description",
"allow_in_quick_entry": 0, "fieldtype": "Small Text",
"allow_on_submit": 0, "label": "Description"
"bold": 0, },
"collapsible": 0,
"columns": 0,
"fieldname": "description",
"fieldtype": "Small Text",
"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": "Description",
"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, "default": "0",
"allow_in_quick_entry": 0, "fieldname": "change_in_item",
"allow_on_submit": 0, "fieldtype": "Check",
"bold": 0, "hidden": 1,
"collapsible": 0, "label": "Change in Item"
"columns": 0,
"fieldname": "change_in_item",
"fieldtype": "Check",
"hidden": 1,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Change in Item",
"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
} }
], ],
"has_web_view": 0, "links": [],
"hide_heading": 0, "modified": "2020-01-30 16:06:00.624496",
"hide_toolbar": 0, "modified_by": "Administrator",
"idx": 0, "module": "Healthcare",
"image_view": 0, "name": "Healthcare Service Unit Type",
"in_create": 0, "owner": "Administrator",
"is_submittable": 0,
"issingle": 0,
"istable": 0,
"max_attachments": 0,
"modified": "2018-08-08 13:00:23.751635",
"modified_by": "Administrator",
"module": "Healthcare",
"name": "Healthcare Service Unit Type",
"name_case": "",
"owner": "Administrator",
"permissions": [ "permissions": [
{ {
"amend": 0, "create": 1,
"cancel": 0, "delete": 1,
"create": 1, "email": 1,
"delete": 1, "export": 1,
"email": 1, "print": 1,
"export": 1, "read": 1,
"if_owner": 0, "report": 1,
"import": 0, "role": "Healthcare Administrator",
"permlevel": 0, "share": 1,
"print": 1,
"read": 1,
"report": 1,
"role": "Healthcare Administrator",
"set_user_permissions": 0,
"share": 1,
"submit": 0,
"write": 1 "write": 1
} }
], ],
"quick_entry": 0, "restrict_to_domain": "Healthcare",
"read_only": 0, "sort_field": "modified",
"read_only_onload": 0, "sort_order": "DESC",
"restrict_to_domain": "Healthcare", "title_field": "service_unit_type"
"show_name_in_global_search": 0,
"sort_field": "modified",
"sort_order": "DESC",
"title_field": "service_unit_type",
"track_changes": 0,
"track_seen": 0,
"track_views": 0
} }

View File

@ -10,109 +10,107 @@ from frappe.model.rename_doc import rename_doc
class HealthcareServiceUnitType(Document): class HealthcareServiceUnitType(Document):
def validate(self): def validate(self):
if self.is_billable == 1: if self.is_billable:
if not self.uom or not self.item_group or not self.description or not self.no_of_hours > 0: if self.disabled:
frappe.throw(_("Configure Item Fields like UOM, Item Group, Description and No of Hours.")) frappe.db.set_value('Item', self.item, 'disabled', 1)
else:
frappe.db.set_value('Item', self.item, 'disabled', 0)
def after_insert(self): def after_insert(self):
if self.inpatient_occupancy and self.is_billable: if self.inpatient_occupancy and self.is_billable:
create_item(self) create_item(self)
def on_trash(self): def on_trash(self):
if(self.item): if self.item:
try: try:
frappe.delete_doc("Item",self.item) frappe.delete_doc('Item', self.item)
except Exception: except Exception:
frappe.throw(_("""Not permitted. Please disable the Service Unit Type""")) frappe.throw(_('Not permitted. Please disable the Service Unit Type'))
def on_update(self): def on_update(self):
if(self.change_in_item and self.is_billable == 1 and self.item): if self.change_in_item and self.is_billable and self.item:
updating_item(self) update_item(self)
item_price = item_price_exist(self)
if not item_price:
if(self.rate != 0.0):
price_list_name = frappe.db.get_value("Price List", {"selling": 1})
if(self.rate):
make_item_price(self.item_code, price_list_name, self.rate)
else:
make_item_price(self.item_code, price_list_name, 0.0)
else:
frappe.db.set_value("Item Price", item_price, "price_list_rate", self.rate)
frappe.db.set_value(self.doctype,self.name,"change_in_item",0) item_price = item_price_exists(self)
elif(self.is_billable == 0 and self.item):
frappe.db.set_value("Item",self.item,"disabled",1) if not item_price:
price_list_name = frappe.db.get_value('Price List', {'selling': 1})
if self.rate:
make_item_price(self.item_code, price_list_name, self.rate)
else:
make_item_price(self.item_code, price_list_name, 0.0)
else:
frappe.db.set_value('Item Price', item_price, 'price_list_rate', self.rate)
frappe.db.set_value(self.doctype, self.name, 'change_in_item',0)
elif not self.is_billable and self.item:
frappe.db.set_value('Item', self.item, 'disabled', 1)
self.reload() self.reload()
def item_price_exist(doc):
item_price = frappe.db.exists({
"doctype": "Item Price",
"item_code": doc.item_code})
if(item_price):
return item_price[0][0]
else:
return False
def updating_item(doc): def item_price_exists(doc):
frappe.db.sql("""update `tabItem` set item_name=%s, item_group=%s, disabled=0, standard_rate=%s, if frappe.db.exists({'doctype': 'Item Price', 'item_code': doc.item_code}):
description=%s, modified=NOW() where item_code=%s""", return item_price[0][0]
(doc.service_unit_type, doc.item_group , doc.rate, doc.description, doc.item)) return False
def create_item(doc): def create_item(doc):
#insert item # insert item
item = frappe.get_doc({ item = frappe.get_doc({
"doctype": "Item", 'doctype': 'Item',
"item_code": doc.item_code, 'item_code': doc.item_code,
"item_name":doc.service_unit_type, 'item_name': doc.service_unit_type,
"item_group": doc.item_group, 'item_group': doc.item_group,
"description":doc.description, 'description': doc.description or doc.item_code,
"is_sales_item": 1, 'is_sales_item': 1,
"is_service_item": 1, 'is_service_item': 1,
"is_purchase_item": 0, 'is_purchase_item': 0,
"is_stock_item": 0, 'is_stock_item': 0,
"show_in_website": 0, 'show_in_website': 0,
"is_pro_applicable": 0, 'is_pro_applicable': 0,
"disabled": 0, 'disabled': 0,
"stock_uom": doc.uom 'stock_uom': doc.uom
}).insert(ignore_permissions=True) }).insert(ignore_permissions=True)
#insert item price # insert item price
#get item price list to insert item price # get item price list to insert item price
if(doc.rate != 0.0): price_list_name = frappe.db.get_value('Price List', {'selling': 1})
price_list_name = frappe.db.get_value("Price List", {"selling": 1}) if doc.rate:
if(doc.rate): make_item_price(item.name, price_list_name, doc.rate)
make_item_price(item.name, price_list_name, doc.rate) item.standard_rate = doc.rate
item.standard_rate = doc.rate else:
else: make_item_price(item.name, price_list_name, 0.0)
make_item_price(item.name, price_list_name, 0.0) item.standard_rate = 0.0
item.standard_rate = 0.0
item.save(ignore_permissions = True)
#Set item to the Doc
frappe.db.set_value("Healthcare Service Unit Type", doc.name, "item", item.name)
doc.reload() #refresh the doc after insert. item.save(ignore_permissions=True)
# Set item in the doc
frappe.db.set_value('Healthcare Service Unit Type', doc.name, 'item', item.name)
doc.reload()
def make_item_price(item, price_list_name, item_price): def make_item_price(item, price_list_name, item_price):
frappe.get_doc({ frappe.get_doc({
"doctype": "Item Price", 'doctype': 'Item Price',
"price_list": price_list_name, 'price_list': price_list_name,
"item_code": item, 'item_code': item,
"price_list_rate": item_price 'price_list_rate': item_price
}).insert(ignore_permissions=True) }).insert(ignore_permissions=True)
def update_item(doc):
item = frappe.get_doc("Item", doc.item)
if item:
item.update({
"item_name": doc.service_unit_type,
"item_group": doc.item_group,
"disabled": 0,
"standard_rate": doc.rate,
"description": doc.description
})
item.save()
@frappe.whitelist() @frappe.whitelist()
def change_item_code(item, item_code, doc_name): def change_item_code(item, item_code, doc_name):
item_exist = frappe.db.exists({ if frappe.db.exists({'doctype': 'Item', 'item_code': item_code}):
"doctype": "Item", frappe.throw(_('Item with Item Code {0} already exists').format(item_code))
"item_code": item_code})
if(item_exist):
frappe.throw(_("Code {0} already exist").format(item_code))
else: else:
rename_doc("Item", item, item_code, ignore_permissions=True) rename_doc('Item', item, item_code, ignore_permissions=True)
frappe.db.set_value("Healthcare Service Unit Type", doc_name, "item_code", item_code) frappe.db.set_value('Healthcare Service Unit Type', doc_name, 'item_code', item_code)
@frappe.whitelist()
def disable_enable(status, doc_name, item=None, is_billable=None):
frappe.db.set_value("Healthcare Service Unit Type", doc_name, "disabled", status)
if(is_billable == 1):
frappe.db.set_value("Item", item, "disabled", status)

View File

@ -1,145 +1,68 @@
{ {
"allow_copy": 1, "actions": [],
"allow_guest_to_view": 0, "allow_copy": 1,
"allow_import": 1, "allow_import": 1,
"allow_rename": 1, "allow_rename": 1,
"autoname": "field:sample", "autoname": "field:sample",
"beta": 1, "beta": 1,
"creation": "2016-04-04 17:35:44.823951", "creation": "2016-04-04 17:35:44.823951",
"custom": 0, "doctype": "DocType",
"docstatus": 0, "document_type": "Setup",
"doctype": "DocType", "engine": "InnoDB",
"document_type": "Setup", "field_order": [
"editable_grid": 0, "sample",
"sample_uom"
],
"fields": [ "fields": [
{ {
"allow_bulk_edit": 0, "fieldname": "sample",
"allow_on_submit": 0, "fieldtype": "Data",
"bold": 0, "in_list_view": 1,
"collapsible": 0, "label": "Sample",
"columns": 0, "reqd": 1,
"fieldname": "sample", "unique": 1
"fieldtype": "Data", },
"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": "Sample",
"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": 0,
"set_only_once": 0,
"unique": 0
},
{ {
"allow_bulk_edit": 0, "bold": 1,
"allow_on_submit": 0, "fieldname": "sample_uom",
"bold": 1, "fieldtype": "Link",
"collapsible": 0, "in_list_view": 1,
"columns": 0, "label": "UOM",
"fieldname": "sample_uom", "options": "Lab Test UOM"
"fieldtype": "Data",
"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": "UOM",
"length": 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,
"unique": 0
} }
], ],
"has_web_view": 0, "links": [],
"hide_heading": 0, "modified": "2020-01-29 23:02:02.249839",
"hide_toolbar": 0, "modified_by": "Administrator",
"idx": 0, "module": "Healthcare",
"image_view": 0, "name": "Lab Test Sample",
"in_create": 0, "owner": "Administrator",
"is_submittable": 0,
"issingle": 0,
"istable": 0,
"max_attachments": 0,
"modified": "2017-08-31 13:46:22.508908",
"modified_by": "Administrator",
"module": "Healthcare",
"name": "Lab Test Sample",
"name_case": "",
"owner": "Administrator",
"permissions": [ "permissions": [
{ {
"amend": 0, "create": 1,
"apply_user_permissions": 0, "email": 1,
"cancel": 0, "export": 1,
"create": 1, "print": 1,
"delete": 0, "read": 1,
"email": 1, "report": 1,
"export": 1, "role": "Healthcare Administrator",
"if_owner": 0, "share": 1,
"import": 0,
"permlevel": 0,
"print": 1,
"read": 1,
"report": 1,
"role": "Healthcare Administrator",
"set_user_permissions": 0,
"share": 1,
"submit": 0,
"write": 1 "write": 1
}, },
{ {
"amend": 0, "email": 1,
"apply_user_permissions": 0, "export": 1,
"cancel": 0, "print": 1,
"create": 0, "read": 1,
"delete": 0, "report": 1,
"email": 1, "role": "Laboratory User",
"export": 1, "share": 1
"if_owner": 0,
"import": 0,
"permlevel": 0,
"print": 1,
"read": 1,
"report": 1,
"role": "Laboratory User",
"set_user_permissions": 0,
"share": 1,
"submit": 0,
"write": 0
} }
], ],
"quick_entry": 1, "quick_entry": 1,
"read_only": 0, "restrict_to_domain": "Healthcare",
"read_only_onload": 0, "sort_field": "modified",
"restrict_to_domain": "Healthcare", "sort_order": "DESC",
"show_name_in_global_search": 0, "title_field": "sample",
"sort_field": "modified", "track_changes": 1
"sort_order": "DESC",
"title_field": "sample",
"track_changes": 1,
"track_seen": 0
} }

View File

@ -81,10 +81,11 @@
{ {
"fieldname": "naming_series", "fieldname": "naming_series",
"fieldtype": "Select", "fieldtype": "Select",
"label": "Patient ID", "label": "Series",
"options": "HLC-PAT-.YYYY.-", "options": "HLC-PAT-.YYYY.-",
"print_hide": 1, "print_hide": 1,
"report_hide": 1 "report_hide": 1,
"set_only_once": 1
}, },
{ {
"bold": 1, "bold": 1,
@ -362,7 +363,7 @@
"image_field": "image", "image_field": "image",
"links": [], "links": [],
"max_attachments": 50, "max_attachments": 50,
"modified": "2020-01-29 13:56:10.174897", "modified": "2020-01-31 17:50:59.797789",
"modified_by": "Administrator", "modified_by": "Administrator",
"module": "Healthcare", "module": "Healthcare",
"name": "Patient", "name": "Patient",

View File

@ -5,9 +5,9 @@ frappe.ui.form.on('Practitioner Schedule', {
refresh: function(frm) { refresh: function(frm) {
cur_frm.fields_dict["time_slots"].grid.wrapper.find('.grid-add-row').hide(); cur_frm.fields_dict["time_slots"].grid.wrapper.find('.grid-add-row').hide();
cur_frm.fields_dict["time_slots"].grid.add_custom_button(__('Add Time Slots'), () => { cur_frm.fields_dict["time_slots"].grid.add_custom_button(__('Add Time Slots'), () => {
var d = new frappe.ui.Dialog({ let d = new frappe.ui.Dialog({
fields: [ fields: [
{fieldname: 'days', label: __('Select Days'), fieldtype:'MultiSelect', {fieldname: 'days', label: __('Select Days'), fieldtype: 'MultiSelect',
options:[ options:[
{value:'Sunday', label:__('Sunday')}, {value:'Sunday', label:__('Sunday')},
{value:'Monday', label:__('Monday')}, {value:'Monday', label:__('Monday')},
@ -17,40 +17,41 @@ frappe.ui.form.on('Practitioner Schedule', {
{value:'Friday', label:__('Friday')}, {value:'Friday', label:__('Friday')},
{value:'Saturday', label:__('Saturday')}, {value:'Saturday', label:__('Saturday')},
], reqd: 1}, ], reqd: 1},
{fieldname: 'from_time', label:__('From'), fieldtype:'Time', {fieldname: 'from_time', label: __('From'), fieldtype: 'Time',
'default': '09:00:00', reqd: 1}, 'default': '09:00:00', reqd: 1},
{fieldname: 'to_time', label:__('To'), fieldtype:'Time', {fieldname: 'to_time', label: __('To'), fieldtype: 'Time',
'default': '12:00:00', reqd: 1}, 'default': '12:00:00', reqd: 1},
{fieldname: 'duration', label:__('Appointment Duration (mins)'), {fieldname: 'duration', label: __('Appointment Duration (mins)'),
fieldtype:'Int', 'default': 15, reqd: 1}, fieldtype:'Int', 'default': 15, reqd: 1},
], ],
primary_action_label: __('Add Timeslots'), primary_action_label: __('Add Timeslots'),
primary_action: () => { primary_action: () => {
var values = d.get_values(); let values = d.get_values();
if(values) { if (values) {
let slot_added = false; let slot_added = false;
values.days.split(',').forEach(function(day){ values.days.split(',').forEach(function(day){
day = $.trim(day); day = $.trim(day);
if(['Sunday', 'Monday', 'Tuesday', 'Wednesday', if (['Sunday', 'Monday', 'Tuesday', 'Wednesday',
'Thursday', 'Friday', 'Saturday'].includes(day)){ 'Thursday', 'Friday', 'Saturday'].includes(day)){
add_slots(day); add_slots(day);
} }
}); });
function check_overlap_or_add_slot(week_day, cur_time, end_time, add_slots_to_child){ function check_overlap_or_add_slot(week_day, cur_time, end_time, add_slots_to_child){
let overlap = false; let overlap = false;
while(cur_time < end_time) { while (cur_time < end_time) {
let add_to_child = true; let add_to_child = true;
let to_time = cur_time.clone().add(values.duration, 'minutes'); let to_time = cur_time.clone().add(values.duration, 'minutes');
if(to_time <= end_time) { if (to_time <= end_time) {
if(frm.doc.time_slots){ if (frm.doc.time_slots){
frm.doc.time_slots.forEach(function(slot) { frm.doc.time_slots.forEach(function(slot) {
if(slot.day == week_day){ if (slot.day == week_day){
let slot_from_moment = moment(slot.from_time, 'HH:mm:ss'); let slot_from_moment = moment(slot.from_time, 'HH:mm:ss');
let slot_to_moment = moment(slot.to_time, 'HH:mm:ss'); let slot_to_moment = moment(slot.to_time, 'HH:mm:ss');
if(cur_time.isSame(slot_from_moment) || cur_time.isBetween(slot_from_moment, slot_to_moment) || if (cur_time.isSame(slot_from_moment) || cur_time.isBetween(slot_from_moment, slot_to_moment) ||
to_time.isSame(slot_to_moment) || to_time.isBetween(slot_from_moment, slot_to_moment)){ to_time.isSame(slot_to_moment) || to_time.isBetween(slot_from_moment, slot_to_moment)) {
overlap = true; overlap = true;
if(add_slots_to_child){ if (add_slots_to_child) {
frappe.show_alert({ frappe.show_alert({
message:__('Time slot skiped, the slot {0} to {1} overlap exisiting slot {2} to {3}', message:__('Time slot skiped, the slot {0} to {1} overlap exisiting slot {2} to {3}',
[cur_time.format('HH:mm:ss'), to_time.format('HH:mm:ss'), slot.from_time, slot.to_time]), [cur_time.format('HH:mm:ss'), to_time.format('HH:mm:ss'), slot.from_time, slot.to_time]),
@ -63,7 +64,7 @@ frappe.ui.form.on('Practitioner Schedule', {
}); });
} }
// add a new timeslot // add a new timeslot
if(add_to_child && add_slots_to_child){ if (add_to_child && add_slots_to_child) {
frm.add_child('time_slots', { frm.add_child('time_slots', {
from_time: cur_time.format('HH:mm:ss'), from_time: cur_time.format('HH:mm:ss'),
to_time: to_time.format('HH:mm:ss'), to_time: to_time.format('HH:mm:ss'),
@ -76,10 +77,11 @@ frappe.ui.form.on('Practitioner Schedule', {
} }
return overlap; return overlap;
} }
function add_slots(week_day){
function add_slots(week_day) {
let cur_time = moment(values.from_time, 'HH:mm:ss'); let cur_time = moment(values.from_time, 'HH:mm:ss');
let end_time = moment(values.to_time, 'HH:mm:ss'); let end_time = moment(values.to_time, 'HH:mm:ss');
if(check_overlap_or_add_slot(week_day, cur_time, end_time, false)){ if (check_overlap_or_add_slot(week_day, cur_time, end_time, false)) {
frappe.confirm(__('Schedules for {0} overlaps, do you want to proceed after skiping overlaped slots ?', [week_day]), frappe.confirm(__('Schedules for {0} overlaps, do you want to proceed after skiping overlaped slots ?', [week_day]),
function() { function() {
// if Yes // if Yes
@ -88,21 +90,22 @@ frappe.ui.form.on('Practitioner Schedule', {
function() { function() {
// if No // if No
frappe.show_alert({ frappe.show_alert({
message:__('Slots for {0} are not added to the schedule', [week_day]), message: __('Slots for {0} are not added to the schedule', [week_day]),
indicator:'red' indicator: 'red'
}); });
} }
); );
} } else {
else{
check_overlap_or_add_slot(week_day, cur_time, end_time, true); check_overlap_or_add_slot(week_day, cur_time, end_time, true);
} }
} }
frm.refresh_field('time_slots'); frm.refresh_field('time_slots');
if(slot_added){
if (slot_added) {
frappe.show_alert({ frappe.show_alert({
message:__('Time slots added'), message: __('Time slots added'),
indicator:'green' indicator: 'green'
}); });
} }
} }

View File

@ -55,8 +55,8 @@ frappe.ui.form.on('Employee',{
}; };
}); });
}, },
prefered_contact_email:function(frm){ prefered_contact_email:function(frm){
frm.events.update_contact(frm) frm.events.update_contact(frm)
}, },
personal_email:function(frm){ personal_email:function(frm){
frm.events.update_contact(frm) frm.events.update_contact(frm)