def generic_view_value(select_ports,
                       view_ports,
                       table_fields,
                       delete_check,
                       combo,
                       datefield1="",
                       datefield2="",
                       jointype="LEFT JOIN"):

    another = "Y"
    field_array = []
    data_array = []
    while (another.lower() == "y"):
        print("Enter field: \n")
        f_no = db.select_make(select_ports)

        field_name = select_ports[f_no - 1]

        field_array.append(field_name)

        if field_name == datefield1 or field_name == datefield2:
            data = db.quote_str(
                db.date_process(input("Enter Date(DD-MM-YYYY): ")))

        else:
            data = db.quote_str(
                input("Enter {field}: ".format(field=select_ports[f_no - 1])))

        data_array.append(data)

        another = input("Do you want to enter another field ? [Y/N]")

    db.view_entry(delete_check, field_array, data_array, view_ports,
                  table_fields, combo)
def generic_view_singletable(select_ports, view_ports, table_fields, table):
    table_name = [table]

    another = "Y"
    field_array = []
    data_array = []
    while (another.lower() == "y"):
        print("Enter field: \n")
        f_no = db.select_make(select_ports)

        field_name = select_ports[f_no - 1]

        field_array.append(field_name)

        if field_name == "date":
            data = db.quote_str(
                db.date_process(input("Enter Date(DD-MM-YYYY): ")))

        else:
            data = db.quote_str(
                input("Enter {field}: ".format(field=select_ports[f_no - 1])))

        data_array.append(data)

        another = input("Do you want to enter another field ? [Y/N]")

    db.view_entry(table_name, field_array, data_array, view_ports,
                  table_fields)
def doctor_view_admin():
    table_name = ['doctorsmanagement']

    another = "Y"
    field_array = []
    data_array = []
    while (another.lower() == "y"):
        print("Enter field: \n")
        f_no = db.select_make(select_ports['dview:doctorsmanagement'])

        field_name = select_ports['dview:doctorsmanagement'][f_no - 1]

        field_array.append(field_name)

        data = db.quote_str(
            input("Enter {field}: ".format(
                field=select_ports['dview:doctorsmanagement'][f_no - 1])))

        data_array.append(data)

        another = input("Do you want to enter another field ? [Y/N]")

    db.view_entry(table_name, field_array, data_array,
                  select_ports['dview:doctorsmanagement'],
                  table_fields['doctorsmanagement'])
def generic_view_range(select_ports,
                       view_ports,
                       table_fields,
                       delete_check,
                       combo,
                       datefield1="",
                       datefield2="",
                       jointype="LEFT JOIN"):

    another = "Y"
    field_array = []
    data_array = []
    inequality_array = []
    while (another.lower() == "y"):
        print("Enter field: \n")
        f_no = db.select_make(select_ports)

        field_name = select_ports[f_no - 1]

        if field_name == datefield1 or field_name == datefield2:
            data_lesser = db.quote_str(
                db.date_process(input("Date(DD-MM-YYYY) > ")))

        else:
            data_lesser = db.quote_str(
                input("{field} > ".format(field=field_name)))

        if data_lesser != '""':
            data_array.append(data_lesser)
            field_array.append(field_name)
            inequality_array.append(" > ")

        if field_name == datefield1 or field_name == datefield2:
            data_greater = db.quote_str(
                db.date_process(input("Enter Date(DD-MM-YYYY) < ")))

        else:
            data_greater = db.quote_str(
                input("{field} < ".format(field=field_name)))

        if data_greater != '""':
            data_array.append(data_greater)
            field_array.append(field_name)
            inequality_array.append(" < ")

        another = input("Do you want to enter another field ? [Y/N]")

    db.view_range(delete_check,
                  field_array,
                  data_array,
                  view_ports,
                  table_fields,
                  inequality_array,
                  combo,
                  jointype=jointype)
def generic_delete_value(select_ports,
                         view_ports,
                         table_fields,
                         delete_check,
                         combo,
                         datefield1="",
                         datefield2="",
                         jointype="LEFT JOIN",
                         deletetype=""):

    table_name = [delete_check[0]]

    another = "Y"
    field_array = []
    data_array = []
    print("\nSearch for the entry: \n")
    while (another.lower() == "y"):

        print("Enter field: \n")
        f_no = db.select_make(select_ports)

        field_name = select_ports[f_no - 1]

        field_array.append(field_name)

        if field_name == "date":
            data = db.quote_str(
                db.date_process(input("Enter Date(DD-MM-YYYY): ")))

        else:
            data = db.quote_str(
                input("Enter {field}: ".format(field=select_ports[f_no - 1])))

        data_array.append(data)

        another = input("Do you want to enter another field ? [Y/N]")

    sel = db.check_entry(delete_check, field_array, data_array, view_ports,
                         table_fields, combo)

    if (sel):
        x = input("Are you sure you want to delete this entry ? : [Y/N]")
        if (x.lower() == "y"):
            if (deletetype == "admin"):
                p = db.choice_make("Soft Delete", "Hard Delete")
            else:
                p = 1

            if p == 1:
                db.update_data(table_name, sel, ['is_deleted'], ['1'])
                print("Entry Deleted")
            elif p == 2:
                db.delete_data(table_name, sel)
        else:
            print("Entry was NOT deleted")
def generic_range_singletable(select_ports, view_ports, table_fields, table):
    table_name = [table]

    another = "Y"
    field_array = []
    data_array = []
    inequality_array = []

    while (another.lower() == "y"):
        print("Enter field: \n")
        f_no = db.select_make(select_ports)

        field_name = select_ports[f_no - 1]

        if field_name == "date":
            data_lesser = db.quote_str(
                db.date_process(input("Date(DD-MM-YYYY) > ")))

        else:
            data_lesser = db.quote_str(
                input("{field} > ".format(field=field_name)))

        if data_lesser != '""':
            data_array.append(data_lesser)
            field_array.append(field_name)
            inequality_array.append(" > ")

        if field_name == "date":
            data_greater = db.quote_str(
                db.date_process(input("Enter Date(DD-MM-YYYY) < ")))

        else:
            data_greater = db.quote_str(
                input("{field} < ".format(field=field_name)))

        if data_greater != '""':
            data_array.append(data_greater)
            field_array.append(field_name)
            inequality_array.append(" < ")

        another = input("Do you want to enter another field ? [Y/N]")

    db.view_range(table_name, field_array, data_array, view_ports,
                  table_fields, inequality_array)
def patient_view_admin():
    table_name = ['patientmanagement']
    another = "Y"
    field_array = []
    data_array = []
    while (another.lower() == "y"):
        print("Enter field: \n")
        f_no = db.select_make(select_ports['admin:patientmanagement'])

        field_name = select_ports['admin:patientmanagement'][f_no - 1]

        field_array.append(field_name)

        data = db.quote_str(
            input("Enter {field}: ".format(
                field=select_ports['admin:patientmanagement'][f_no - 1])))

        data_array.append(data)

        another = input("Do you want to enter another field ? [Y/N]")

    db.view_entry(table_name, field_array, data_array,
                  view_ports['admin:patientmanagement'],
                  table_fields['patientmanagement'])
    print("\nLatest Prescription: ")
    delete_check = ['prescription', 'patientmanagement', 'doctorsmanagement']
    combo = [["prescription", 'patientmanagement', "patientid"],
             ["prescription", "doctorsmanagement", "docid"],
             ["prescription", "diagnostictests", "testid"],
             ["prescription", "medicine", "medid"]]
    db.view_entry(delete_check, field_array, data_array,
                  view_ports['admin:last-pres'],
                  table_fields['admin:last-pres'], combo, "prescription.date")

    print("\nLatest Report: ")
    delete_check = ['prescription', 'patientmanagement']
    combo = [["prescription", 'patientmanagement', "patientid"],
             ["prescription", "diagnosticreport", "presid"],
             ["prescription", "diagnostictests", "testid"],
             ["diagnosticreport", "doctorsmanagement", "docid"]]
    db.view_entry(delete_check, field_array, data_array,
                  view_ports['admin:last-rep'], table_fields['admin:last-rep'],
                  combo, "prescription.date")
def doctor_range_admin():
    table_name = ['doctorsmanagement']

    another = "Y"
    field_array = []
    data_array = []
    inequality_array = []

    while (another.lower() == "y"):
        print("Enter field: \n")
        f_no = db.select_make(select_ports['drange:doctorsmanagement'])

        data_lesser = db.quote_str(
            input("{field} > ".format(
                field=select_ports['drange:doctorsmanagement'][f_no - 1])))

        if data_lesser != '""':
            data_array.append(data_lesser)
            field_array.append(select_ports['drange:doctorsmanagement'][f_no -
                                                                        1])
            inequality_array.append(" > ")

        data_greater = db.quote_str(
            input("{field} < ".format(
                field=select_ports['drange:doctorsmanagement'][f_no - 1])))

        if data_greater != '""':
            data_array.append(data_greater)
            field_array.append(select_ports['drange:doctorsmanagement'][f_no -
                                                                        1])
            inequality_array.append(" < ")

        another = input("Do you want to enter another field ? [Y/N]")

    db.view_range(table_name, field_array, data_array,
                  view_ports['dview:doctorsmanagement'],
                  table_fields[table_name[0]], inequality_array)
def generic_update_value(select_ports,
                         view_ports,
                         table_fields,
                         delete_check,
                         combo,
                         datefield1="",
                         datefield2="",
                         jointype="LEFT JOIN",
                         update_ports=select_ports):

    table_name = [delete_check[0]]

    another = "Y"
    field_array = []
    data_array = []
    print("\nSearch for the entry: \n")
    while (another.lower() == "y"):

        print("Enter field: \n")
        f_no = db.select_make(select_ports)

        field_name = select_ports[f_no - 1]

        field_array.append(field_name)

        if field_name == "date":
            data = db.quote_str(
                db.date_process(input("Enter Date(DD-MM-YYYY): ")))

        else:
            data = db.quote_str(
                input("Enter {field}: ".format(field=select_ports[f_no - 1])))

        data_array.append(data)

        another = input("Do you want to enter another field ? [Y/N]")

    sel = db.check_entry(delete_check, field_array, data_array, view_ports,
                         table_fields, combo)

    if (sel):

        print("Select the field you want to update? ")

        select_fields = update_ports.copy()

        primary_key_check = [
            'patientmanagement', 'doctorsmanagement', 'medicine',
            'medequipment', 'staffmanagement', 'diagnostictests', 'room'
        ]

        table_name = [delete_check[0]]

        for table in primary_key_check:
            if table_name[0] == table:
                select_fields.pop(0)

        another = "Y"
        field_array = []
        data_array = []
        while (another.lower() == "y" and len(select_fields) != 0):
            print("Enter field: \n")
            f_no = db.select_make(select_fields)

            field_name = select_fields[f_no - 1]

            select_fields.pop(f_no - 1)

            field_array.append(field_name)

            if field_name == "date":
                data = db.quote_str(
                    db.date_process(input("Enter Date(DD-MM-YYYY): ")))

            else:
                data = db.quote_str(
                    input("Enter {field}: ".format(field=field_name)))

            data_array.append(data)

            another = input("Do you want to enter another field ? [Y/N]")

        db.update_data(table_name, sel, field_array, data_array)