137 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			137 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| import frappe
 | |
| from frappe.model.utils.rename_field import rename_field
 | |
| from frappe.modules import get_doctype_module, scrub
 | |
| 
 | |
| field_rename_map = {
 | |
| 	'Healthcare Settings': [
 | |
| 		['patient_master_name', 'patient_name_by'],
 | |
| 		['max_visit', 'max_visits'],
 | |
| 		['reg_sms', 'send_registration_msg'],
 | |
| 		['reg_msg', 'registration_msg'],
 | |
| 		['app_con', 'send_appointment_confirmation'],
 | |
| 		['app_con_msg', 'appointment_confirmation_msg'],
 | |
| 		['no_con', 'avoid_confirmation'],
 | |
| 		['app_rem', 'send_appointment_reminder'],
 | |
| 		['app_rem_msg', 'appointment_reminder_msg'],
 | |
| 		['rem_before', 'remind_before'],
 | |
| 		['manage_customer', 'link_customer_to_patient'],
 | |
| 		['create_test_on_si_submit', 'create_lab_test_on_si_submit'],
 | |
| 		['require_sample_collection', 'create_sample_collection_for_lab_test'],
 | |
| 		['require_test_result_approval', 'lab_test_approval_required'],
 | |
| 		['manage_appointment_invoice_automatically', 'automate_appointment_invoicing']
 | |
| 	],
 | |
| 	'Drug Prescription':[
 | |
| 		['use_interval', 'usage_interval'],
 | |
| 		['in_every', 'interval_uom']
 | |
| 	],
 | |
| 	'Lab Test Template':[
 | |
| 		['sample_quantity', 'sample_qty'],
 | |
| 		['sample_collection_details', 'sample_details']
 | |
| 	],
 | |
| 	'Sample Collection':[
 | |
| 		['sample_quantity', 'sample_qty'],
 | |
| 		['sample_collection_details', 'sample_details']
 | |
| 	],
 | |
| 	'Fee Validity': [
 | |
| 		['max_visit', 'max_visits']
 | |
| 	]
 | |
| }
 | |
| 
 | |
| def execute():
 | |
| 	for dn in field_rename_map:
 | |
| 		if frappe.db.exists('DocType', dn):
 | |
| 			if dn == 'Healthcare Settings':
 | |
| 				frappe.reload_doctype('Healthcare Settings')
 | |
| 			else:
 | |
| 				frappe.reload_doc(get_doctype_module(dn), "doctype", scrub(dn))
 | |
| 
 | |
| 	for dt, field_list in field_rename_map.items():
 | |
| 		if frappe.db.exists('DocType', dt):
 | |
| 			for field in field_list:
 | |
| 				if dt == 'Healthcare Settings':
 | |
| 					rename_field(dt, field[0], field[1])
 | |
| 				elif frappe.db.has_column(dt, field[0]):
 | |
| 					rename_field(dt, field[0], field[1])
 | |
| 
 | |
| 	# first name mandatory in Patient
 | |
| 	if frappe.db.exists('DocType', 'Patient'):
 | |
| 		patients = frappe.db.sql("select name, patient_name from `tabPatient`", as_dict=1)
 | |
| 		frappe.reload_doc('healthcare', 'doctype', 'patient')
 | |
| 		for entry in patients:
 | |
| 			name = entry.patient_name.split(' ')
 | |
| 			frappe.db.set_value('Patient', entry.name, 'first_name', name[0])
 | |
| 
 | |
| 	# mark Healthcare Practitioner status as Disabled
 | |
| 	if frappe.db.exists('DocType', 'Healthcare Practitioner'):
 | |
| 		practitioners = frappe.db.sql("select name from `tabHealthcare Practitioner` where 'active'= 0", as_dict=1)
 | |
| 		practitioners_lst = [p.name for p in practitioners]
 | |
| 		frappe.reload_doc('healthcare', 'doctype', 'healthcare_practitioner')
 | |
| 		if practitioners_lst:
 | |
| 			frappe.db.sql("update `tabHealthcare Practitioner` set status = 'Disabled' where name IN %(practitioners)s""", {"practitioners": practitioners_lst})
 | |
| 
 | |
| 	# set Clinical Procedure status
 | |
| 	if frappe.db.exists('DocType', 'Clinical Procedure'):
 | |
| 		frappe.reload_doc('healthcare', 'doctype', 'clinical_procedure')
 | |
| 		frappe.db.sql("""
 | |
| 			UPDATE
 | |
| 				`tabClinical Procedure`
 | |
| 			SET
 | |
| 				docstatus = (CASE WHEN status = 'Cancelled' THEN 2
 | |
| 								WHEN status = 'Draft' THEN 0
 | |
| 								ELSE 1
 | |
| 							END)
 | |
| 		""")
 | |
| 
 | |
| 	# set complaints and diagnosis in table multiselect in Patient Encounter
 | |
| 	if frappe.db.exists('DocType', 'Patient Encounter'):
 | |
| 		field_list = [
 | |
| 			['visit_department', 'medical_department'],
 | |
| 			['type', 'appointment_type']
 | |
| 		]
 | |
| 		encounter_details = frappe.db.sql("""select symptoms, diagnosis, name from `tabPatient Encounter`""", as_dict=True)
 | |
| 		frappe.reload_doc('healthcare', 'doctype', 'patient_encounter')
 | |
| 		frappe.reload_doc('healthcare', 'doctype', 'patient_encounter_symptom')
 | |
| 		frappe.reload_doc('healthcare', 'doctype', 'patient_encounter_diagnosis')
 | |
| 
 | |
| 		for field in field_list:
 | |
| 			if frappe.db.has_column(dt, field[0]):
 | |
| 				rename_field(dt, field[0], field[1])
 | |
| 
 | |
| 		for entry in encounter_details:
 | |
| 			doc = frappe.get_doc('Patient Encounter', entry.name)
 | |
| 			symptoms = entry.symptoms.split('\n') if entry.symptoms else []
 | |
| 			for symptom in symptoms:
 | |
| 				if not frappe.db.exists('Complaint', symptom):
 | |
| 					frappe.get_doc({
 | |
| 						'doctype': 'Complaint',
 | |
| 						'complaints': symptom
 | |
| 					}).insert()
 | |
| 				row = doc.append('symptoms', {
 | |
| 					'complaint': symptom
 | |
| 				})
 | |
| 				row.db_update()
 | |
| 
 | |
| 			diagnosis = entry.diagnosis.split('\n') if entry.diagnosis else []
 | |
| 			for d in diagnosis:
 | |
| 				if not frappe.db.exists('Diagnosis', d):
 | |
| 					frappe.get_doc({
 | |
| 						'doctype': 'Diagnosis',
 | |
| 						'diagnosis': d
 | |
| 					}).insert()
 | |
| 				row = doc.append('diagnosis', {
 | |
| 					'diagnosis': d
 | |
| 				})
 | |
| 				row.db_update()
 | |
| 			doc.db_update()
 | |
| 
 | |
| 	if frappe.db.exists('DocType', 'Fee Validity'):
 | |
| 		# update fee validity status
 | |
| 		frappe.db.sql("""
 | |
| 			UPDATE
 | |
| 				`tabFee Validity`
 | |
| 			SET
 | |
| 				status = (CASE WHEN visited >= max_visits THEN 'Completed'
 | |
| 								ELSE 'Pending'
 | |
| 							END)
 | |
| 		""")
 |