diff --git a/erpnext/patches.txt b/erpnext/patches.txt index 1af75e8397..017eecc07b 100644 --- a/erpnext/patches.txt +++ b/erpnext/patches.txt @@ -563,3 +563,4 @@ erpnext.patches.v11_0.reset_publish_in_hub_for_all_items erpnext.patches.v11_0.update_hub_url # 2018-08-31 erpnext.patches.v10_0.set_discount_amount erpnext.patches.v10_0.recalculate_gross_margin_for_project +erpnext.patches.v11_0.redesign_healthcare_billing_work_flow diff --git a/erpnext/patches/v11_0/redesign_healthcare_billing_work_flow.py b/erpnext/patches/v11_0/redesign_healthcare_billing_work_flow.py new file mode 100644 index 0000000000..719d23eec6 --- /dev/null +++ b/erpnext/patches/v11_0/redesign_healthcare_billing_work_flow.py @@ -0,0 +1,53 @@ +import frappe +from frappe.custom.doctype.custom_field.custom_field import create_custom_fields +from erpnext.domains.healthcare import data +from frappe.modules import scrub, get_doctype_module + +sales_invoice_referenced_doc = { + "Patient Appointment": "sales_invoice", + "Patient Encounter": "invoice", + "Lab Test": "invoice", + "Lab Prescription": "invoice", + "Sample Collection": "invoice" +} + +def execute(): + healthcare_custom_field_in_sales_invoice() + for si_ref_doc in sales_invoice_referenced_doc: + if frappe.db.exists('DocType', si_ref_doc): + frappe.reload_doc(get_doctype_module(si_ref_doc), 'doctype', scrub(si_ref_doc)) + + if frappe.db.has_column(si_ref_doc, sales_invoice_referenced_doc[si_ref_doc]) \ + and frappe.db.has_column(si_ref_doc, 'invoiced'): + doc_list = frappe.db.sql(""" + select name from `tab{0}` + where {1} is not null + """.format(si_ref_doc, sales_invoice_referenced_doc[si_ref_doc])) + if doc_list: + frappe.reload_doc(get_doctype_module("Sales Invoice"), 'doctype', 'sales_invoice') + for doc_id in doc_list: + invoice_id = frappe.db.get_value(si_ref_doc, doc_id[0][0], sales_invoice_referenced_doc[si_ref_doc]) + invoice = frappe.get_doc("Sales Invoice", invoice_id) + if invoice.docstatus == 1 and invoice.items: + marked = False + if not marked: + for item_line in invoice.items: + marked = True + item_line.reference_dt = si_ref_doc + item_line.reference_dn = doc_id[0][0] + invoice.update() + + + frappe.db.sql(""" + update `tab{0}` set invoiced = 1 + where {1} is not null + """.format(si_ref_doc, sales_invoice_referenced_doc[si_ref_doc])) + +def healthcare_custom_field_in_sales_invoice(): + if data['custom_fields']: + create_custom_fields(data['custom_fields']) + + frappe.db.sql(""" + delete from `tabCustom Field` + where fieldname = 'appointment' and options = 'Patient Appointment' + """)