def execute(): frappe.reload_doc("accounts", "doctype", "loyalty_program") frappe.reload_doc("accounts", "doctype", "sales_invoice_item") if "Healthcare" not in frappe.get_active_domains(): return 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"): # Set Reference DocType and Reference Docname 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], sales_invoice_referenced_doc[si_ref_doc]) if frappe.db.exists("Sales Invoice", invoice_id): if si_ref_doc == "Lab Test": template = frappe.db.get_value( "Lab Test", doc_id[0], "template") if template: item = frappe.db.get_value( "Lab Test Template", template, "item") if item: frappe.db.sql( """update `tabSales Invoice Item` set reference_dt = '{0}', reference_dn = '{1}' where parent = '{2}' and item_code='{3}'""". format(si_ref_doc, doc_id[0], invoice_id, item)) else: invoice = frappe.get_doc( "Sales Invoice", invoice_id) for item_line in invoice.items: if not item_line.reference_dn: item_line.db_set({ "reference_dt": si_ref_doc, "reference_dn": doc_id[0] }) break # Documents mark invoiced for submitted sales invoice frappe.db.sql("""update `tab{0}` doc, `tabSales Invoice` si set doc.invoiced = 1 where si.docstatus = 1 and doc.{1} = si.name """.format(si_ref_doc, sales_invoice_referenced_doc[si_ref_doc]))
def execute(): # rename doctypes tables = frappe.db.sql_list("show tables") for old_dt, new_dt in [["Journal Voucher Detail", "Journal Entry Account"], ["Journal Voucher", "Journal Entry"], ["Budget Distribution Detail", "Monthly Distribution Percentage"], ["Budget Distribution", "Monthly Distribution"]]: if "tab"+new_dt not in tables: frappe.rename_doc("DocType", old_dt, new_dt, force=True) # reload new child doctypes frappe.reload_doc("manufacturing", "doctype", "production_order_operation") frappe.reload_doc("manufacturing", "doctype", "workstation_working_hour") frappe.reload_doc("stock", "doctype", "item_variant") frappe.reload_doc("accounts", "doctype", "party_account") frappe.reload_doc("accounts", "doctype", "fiscal_year_company") frappe.reload_doc("workflow", "doctype", "workflow") #rename table fieldnames for dn in rename_map: frappe.reload_doc(get_doctype_module(dn), "doctype", scrub(dn)) for dt, field_list in rename_map.items(): for field in field_list: rename_field(dt, field[0], field[1]) # update voucher type for old, new in [["Bank Voucher", "Bank Entry"], ["Cash Voucher", "Cash Entry"], ["Credit Card Voucher", "Credit Card Entry"], ["Contra Voucher", "Contra Entry"], ["Write Off Voucher", "Write Off Entry"], ["Excise Voucher", "Excise Entry"]]: frappe.db.sql("update `tabJournal Entry` set voucher_type=%s where voucher_type=%s", (new, old))
def execute(): for dt in doc_rename_map: if frappe.db.exists('DocType', dt): frappe.rename_doc('DocType', dt, doc_rename_map[dt], force=True) for dn in field_rename_map: if frappe.db.exists('DocType', dn): 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 frappe.db.has_column(dt, field[0]): rename_field(dt, field[0], field[1]) if frappe.db.exists('DocType', 'Practitioner Service Unit Schedule'): if frappe.db.has_column('Practitioner Service Unit Schedule', 'parentfield'): frappe.db.sql(""" update `tabPractitioner Service Unit Schedule` set parentfield = 'practitioner_schedules' where parentfield = 'physician_schedules' and parenttype = 'Healthcare Practitioner' """) if frappe.db.exists("DocType", "Healthcare Practitioner"): frappe.reload_doc("healthcare", "doctype", "healthcare_practitioner") frappe.reload_doc("healthcare", "doctype", "practitioner_service_unit_schedule") if frappe.db.has_column('Healthcare Practitioner', 'physician_schedule'): for doc in frappe.get_all('Healthcare Practitioner'): _doc = frappe.get_doc('Healthcare Practitioner', doc.name) if _doc.physician_schedule: _doc.append('practitioner_schedules', {'schedule': _doc.physician_schedule}) _doc.save()
def execute(): for dn in rename_map: frappe.reload_doc(get_doctype_module(dn), "doctype", scrub(dn)) for dt, field_list in rename_map.items(): for field in field_list: rename_field(dt, field[0], field[1])
def execute(): # rename doctypes tables = frappe.db.sql_list("show tables") for old_dt, new_dt in [["Journal Voucher Detail", "Journal Entry Account"], ["Journal Voucher", "Journal Entry"], ["Budget Distribution Detail", "Monthly Distribution Percentage"], ["Budget Distribution", "Monthly Distribution"]]: if "tab"+new_dt not in tables: frappe.rename_doc("DocType", old_dt, new_dt, force=True) # reload new child doctypes frappe.reload_doc("manufacturing", "doctype", "work_order_operation") frappe.reload_doc("manufacturing", "doctype", "workstation_working_hour") frappe.reload_doc("stock", "doctype", "item_variant") frappe.reload_doc("hr", "doctype", "salary_detail") frappe.reload_doc("accounts", "doctype", "party_account") frappe.reload_doc("accounts", "doctype", "fiscal_year_company") #rename table fieldnames for dn in rename_map: if not frappe.db.exists("DocType", dn): continue frappe.reload_doc(get_doctype_module(dn), "doctype", scrub(dn)) for dt, field_list in rename_map.items(): if not frappe.db.exists("DocType", dt): continue for field in field_list: rename_field(dt, field[0], field[1]) # update voucher type for old, new in [["Bank Voucher", "Bank Entry"], ["Cash Voucher", "Cash Entry"], ["Credit Card Voucher", "Credit Card Entry"], ["Contra Voucher", "Contra Entry"], ["Write Off Voucher", "Write Off Entry"], ["Excise Voucher", "Excise Entry"]]: frappe.db.sql("update `tabJournal Entry` set voucher_type=%s where voucher_type=%s", (new, old))
def get_test_records(doctype): from frappe.modules import get_doctype_module, get_module_path path = os.path.join(get_module_path(get_doctype_module(doctype)), "doctype", scrub(doctype), "test_records.json") if os.path.exists(path): with open(path, "r") as f: return json.loads(f.read()) else: return []
def execute(): frappe.reload_doc('accounts', 'doctype', 'loyalty_program') frappe.reload_doc('accounts', 'doctype', 'sales_invoice_item') if "healthcare" not in frappe.get_active_domains(): return 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'): # Set Reference DocType and Reference Docname 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], sales_invoice_referenced_doc[si_ref_doc]) invoice = frappe.get_doc("Sales Invoice", invoice_id) if invoice.items: marked = False if not marked: for item_line in invoice.items: marked = True frappe.db.sql(""" update `tabSales Invoice Item` set reference_dt = '{0}', reference_dn = '{1}' where name = '{2}' """.format(si_ref_doc, doc_id[0], item_line.name)) # Documents mark invoiced for submitted sales invoice frappe.db.sql(""" update `tab{0}` doc, `tabSales Invoice` si set doc.invoiced = 1 where si.docstatus = 1 and doc.{1} = si.name """.format(si_ref_doc, sales_invoice_referenced_doc[si_ref_doc]))
def get_test_records(doctype): """Returns list of objects from `test_records.json` in the given doctype's folder.""" from frappe.modules import get_doctype_module, get_module_path path = os.path.join(get_module_path(get_doctype_module(doctype)), "doctype", scrub(doctype), "test_records.json") if os.path.exists(path): with open(path, "r") as f: return json.loads(f.read()) else: return []
def execute(): frappe.reload_doc('accounts', 'doctype', 'loyalty_program') frappe.reload_doc('accounts', 'doctype', 'sales_invoice_item') if "Healthcare" not in frappe.get_active_domains(): return 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'): # Set Reference DocType and Reference Docname 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], sales_invoice_referenced_doc[si_ref_doc]) if frappe.db.exists("Sales Invoice", invoice_id): if si_ref_doc == "Lab Test": template = frappe.db.get_value("Lab Test", doc_id[0], "template") if template: item = frappe.db.get_value("Lab Test Template", template, "item") if item: frappe.db.sql("""update `tabSales Invoice Item` set reference_dt = '{0}', reference_dn = '{1}' where parent = '{2}' and item_code='{3}'""".format\ (si_ref_doc, doc_id[0], invoice_id, item)) else: invoice = frappe.get_doc("Sales Invoice", invoice_id) for item_line in invoice.items: if not item_line.reference_dn: item_line.db_set({"reference_dt":si_ref_doc, "reference_dn": doc_id[0]}) break # Documents mark invoiced for submitted sales invoice frappe.db.sql("""update `tab{0}` doc, `tabSales Invoice` si set doc.invoiced = 1 where si.docstatus = 1 and doc.{1} = si.name """.format(si_ref_doc, sales_invoice_referenced_doc[si_ref_doc]))
def reload_docs(docs): for dn in docs: frappe.reload_doc(get_doctype_module(dn), "doctype", scrub(dn)) # reload all standard print formats for pf in frappe.db.sql("""select name, module from `tabPrint Format` where ifnull(standard, 'No') = 'Yes'""", as_dict=1): try: frappe.reload_doc(pf.module, "Print Format", pf.name) except Exception, e: print e pass
def reload_docs(docs): for dn in docs: frappe.reload_doc(get_doctype_module(dn), "doctype", scrub(dn)) # reload all standard print formats for pf in frappe.db.sql( """select name, module from `tabPrint Format` where ifnull(standard, 'No') = 'Yes'""", as_dict=1, ): try: frappe.reload_doc(pf.module, "Print Format", pf.name) except Exception, e: print e pass
def execute(): for doctypes, fields in [[selling_doctypes, selling_renamed_fields], [buying_doctypes, buying_renamed_fields]]: for dt in doctypes: frappe.reload_doc(get_doctype_module(dt), "doctype", scrub(dt)) table_columns = frappe.db.get_table_columns(dt) base_net_total = frappe.db.sql("select sum(ifnull({0}, 0)) from `tab{1}`".format(fields[0][1], dt))[0][0] if not base_net_total: for f in fields: if f[0] in table_columns: rename_field(dt, f[0], f[1]) # Added new field "total_taxes_and_charges" in buying cycle, updating value if dt in ("Supplier Quotation", "Purchase Order", "Purchase Receipt", "Purchase Invoice"): frappe.db.sql("""update `tab{0}` set total_taxes_and_charges = round(base_total_taxes_and_charges/conversion_rate, 2)""".format(dt))
def execute(): for doctypes, fields in [[selling_doctypes, selling_renamed_fields], [buying_doctypes, buying_renamed_fields]]: for dt in doctypes: meta = frappe.get_meta(dt) frappe.reload_doc(get_doctype_module(dt), "doctype", scrub(dt)) base_net_total = frappe.db.sql( "select sum(ifnull({0}, 0)) from `tab{1}`".format( fields[0][1], dt))[0][0] if not base_net_total: for f in fields: if meta.get_field(f[0]): rename_field(dt, f[0], f[1]) # Added new field "total_taxes_and_charges" in buying cycle, updating value if dt in ("Supplier Quotation", "Purchase Order", "Purchase Receipt", "Purchase Invoice"): frappe.db.sql( """update `tab{0}` set total_taxes_and_charges = round(base_total_taxes_and_charges/conversion_rate, 2)""".format(dt))
def execute(): for dt, field_list in field_rename_map.items(): if frappe.db.exists('DocType', dt): frappe.reload_doc(get_doctype_module(dt), "doctype", scrub(dt)) for field in field_list: if frappe.db.has_column(dt, field[0]): rename_field(dt, field[0], field[1]) if frappe.db.exists('DocType', 'Lab Prescription'): if frappe.db.has_column('Lab Prescription', 'parentfield'): frappe.db.sql(""" update `tabLab Prescription` set parentfield = 'lab_test_prescription' where parentfield = 'test_prescription' """) if frappe.db.exists('DocType', 'Lab Test Groups'): if frappe.db.has_column('Lab Test Groups', 'parentfield'): frappe.db.sql(""" update `tabLab Test Groups` set parentfield = 'lab_test_groups' where parentfield = 'test_groups' """)
def execute(): for dt in doc_rename_map: if frappe.db.exists('DocType', dt): rename_doc('DocType', dt, doc_rename_map[dt], force=True) for dn in field_rename_map: if frappe.db.exists('DocType', dn): 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 frappe.db.has_column(dt, field[0]): rename_field(dt, field[0], field[1]) if frappe.db.exists('DocType', 'Practitioner Service Unit Schedule'): if frappe.db.has_column('Practitioner Service Unit Schedule', 'parentfield'): frappe.db.sql(""" update `tabPractitioner Service Unit Schedule` set parentfield = 'practitioner_schedules' where parentfield = 'physician_schedules' and parenttype = 'Healthcare Practitioner' """)
def load_doctype_module(doctype, module=None, prefix=""): if not module: module = get_doctype_module(doctype) return frappe.get_module(get_module_name(doctype, module, prefix))
def get_server_obj(doc, doclist=[], basedoctype=''): # for test module = get_doctype_module(doc.doctype) return load_doctype_module(doc.doctype, module).DocType(doc, doclist)
for dt, field_list in rename_map.items(): for field in field_list: rename_field(dt, field[0], field[1]) def reload_docs(docs): for dn in docs: frappe.reload_doc(get_doctype_module(dn), "doctype", scrub(dn)) # reload all standard print formats for pf in frappe.db.sql("""select name, module from `tabPrint Format` where ifnull(standard, 'No') = 'Yes'""", as_dict=1): try: frappe.reload_doc(pf.module, "Print Format", pf.name) except Exception, e: print e pass # reload all standard reports for r in frappe.db.sql("""select name, ref_doctype from `tabReport` where ifnull(is_standard, 'No') = 'Yes' and report_type in ('Report Builder', 'Query Report')""", as_dict=1): try: frappe.reload_doc(get_doctype_module(r.ref_doctype), "Report", r.name) except Exception, e: print e pass
def reload_docs(docs): for dn in docs: frappe.reload_doc(get_doctype_module(dn), "doctype", scrub(dn)) # reload all standard print formats for pf in frappe.db.sql( """select name, module from `tabPrint Format` where ifnull(standard, 'No') = 'Yes'""", as_dict=1, ): try: frappe.reload_doc(pf.module, "Print Format", pf.name) except Exception, e: print e pass # reload all standard reports for r in frappe.db.sql( """select name, ref_doctype from `tabReport` where ifnull(is_standard, 'No') = 'Yes' and report_type in ('Report Builder', 'Query Report')""", as_dict=1, ): try: frappe.reload_doc(get_doctype_module(r.ref_doctype), "Report", r.name) except Exception, e: print e pass
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) """)
def execute(): for dt in ["Quotation", "Sales Order", "Delivery Note", "Sales Invoice"]: frappe.reload_doc(get_doctype_module(dt), "doctype", scrub(dt)) frappe.db.sql( """update `tab{0}` set base_discount_amount=discount_amount, discount_amount=discount_amount/conversion_rate""".format(dt))
def execute(): for dt in ["Quotation", "Sales Order", "Delivery Note", "Sales Invoice"]: frappe.reload_doc(get_doctype_module(dt), "doctype", scrub(dt)) frappe.db.sql("""update `tab{0}` set base_discount_amount=discount_amount, discount_amount=discount_amount/conversion_rate""".format(dt))
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) """)