def ask_table_row(table_id, root, account):
    table_name = INTERFACE_TABLE_NAMES[table_id].upper()

    window = Toplevel(root)
    window.title('Выбор записи в таблице ' + table_name + ' [' + account.get_rights() + ']')
    window.resizable(width=True, height=True)
    window.state('zoomed')

    toolbar = Frame(window)
    toolbar.pack(side=BOTTOM, expand=NO, fill=X)

    column_names = INTERFACE_TABLE_COLUMN_NAMES[table_id]
    table_data = db_helper.select_all_from(DATABASE_TABLE_NAMES[table_id])

    constraint = db_viewer.get_table_constraint(table_id, account)

    grid_viewer = db_viewer.ScrolledGridViewer(window, column_names, table_data, constraint)
    grid_viewer.pack(expand=YES, fill=BOTH)

    table_name_label = Label(toolbar)
    table_name_label.config(text='Выберите запись в таблице ' + table_name, font=TOOLBAR_BUTTON_FONT)
    table_name_label.pack(side=LEFT, expand=NO, fill=Y)

    def cancel():
        nonlocal cancel_button_pressed, window
        cancel_button_pressed = True
        window.destroy()

    cancel_button = main_window.ToolbarButton(toolbar, text='Отмена')
    cancel_button.config(width=20)
    cancel_button.config(font=TOOLBAR_BUTTON_FONT, bg='#F55', fg='#000')
    cancel_button.config(command=cancel)
    cancel_button.pack(side=RIGHT, expand=NO, fill=X, padx=10, pady=10)

    def confirm():
        return not (grid_viewer.selected_item is None)  # and len(grid_viewer.selected_item['values']) > 0

    confirm_button = main_window.ToolbarButton(toolbar, text='ОК')
    confirm_button.config(width=20)
    confirm_button.config(font=TOOLBAR_BUTTON_FONT, bg='#0F0', fg='#000')
    confirm_button.config(command=(lambda: confirm() and window.destroy()))
    confirm_button.pack(side=RIGHT, expand=NO, fill=Y, padx=10, pady=10)

    cancel_button_pressed = False

    window.protocol('WM_DELETE_WINDOW', lambda: cancel())
    window.focus_set()
    window.grab_set()
    window.wait_window()

    if not cancel_button_pressed:
        return grid_viewer.selected_item['values']
    return None
def year_profit_statistics(report_name, root, account):
    """статистика доходов предприятия по годам за все время(ResultCursor OUTPUT)"""
    print('Формируется отчет "' + report_name + '"')

    main_window.status_label['text'] = 'Отчет : ' + report_name

    global report_frame
    clear_report_frame()

    report_data = db_helper.year_profit_statistics()
    column_names = [
        'Год', 'Прибыль', 'Абсолютный рост', 'Относительный рост, %'
    ]

    grid = db_viewer.ScrolledGridViewer(report_frame, column_names,
                                        report_data)
    grid.pack(expand=YES, fill=BOTH)
def get_number_of_kilometers_traveled(report_name, root, account):
    print('Report getting window 0')
    # main.root.title()
    main_window.status_label['text'] = 'Отчет : ' + report_name
    # window = Toplevel()
    # window.title(report_name + ' [' + account.get_rights() + ']')
    # window.focus_set()

    driver_table_id = 4

    selected_item = dialogs.ask_table_row(driver_table_id, root, account)
    if selected_item is None:
        print('Ничего не выбрано')
        return

    global report_frame
    clear_report_frame()

    # begin, end = (12, 1, 2015), (12, 4, 2015)
    driver_id = selected_item[0]
    report_data = db_helper.get_number_of_kilometers_traveled(driver_id)
    column_names = ['Результат']

    grid = db_viewer.ScrolledGridViewer(report_frame, column_names,
                                        report_data)
    grid.pack(expand=YES, fill=BOTH)

    # print(selected_items)

    # report_arguments_frame = Frame(report_frame)
    # report_frame.pack()

    # report_viewer_frame = Frame(report_frame)
    # report_frame.pack()

    # lframe = tix.LabelFrame(report_frame)

    return

    paned_window = PanedWindow(report_frame)
    paned_window.pack(fill=BOTH, expand=YES, side=LEFT)

    paned_window.config(orient=VERTICAL)
    paned_window.config(sashrelief=GROOVE, sashwidth=10)
def count_costs_on_company_development(report_name, root, account):
    """процедура расчета затрат на развитие предприятия за период(begin, end, Cost OUTPUT)"""
    print('Формируется отчет "' + report_name + '"')

    main_window.status_label['text'] = 'Отчет : ' + report_name

    begin, end = dialogs.ask_date_period()
    if begin is None:
        return

    global report_frame
    clear_report_frame()

    # begin, end = (12, 1, 2015), (12, 4, 2015)

    report_data = db_helper.count_costs_on_company_development(begin, end)
    column_names = ['Результат']

    grid = db_viewer.ScrolledGridViewer(report_frame, column_names,
                                        report_data)
    grid.pack(expand=YES, fill=BOTH)
def get_driver_path_lengths(report_name, root, account):
    print("""Запушена процедура, возвращающая множество четверок
        'id водителя, имя водителя, фамилия водителя, количество проезженных километров'"""
          )
    main_window.status_label['text'] = 'Отчет : ' + report_name
    # window = Toplevel()
    # window.title(report_name + ' [' + account.get_rights() + ']')
    # window.focus_set()
    global report_frame
    clear_report_frame()

    global report_viewer_frame

    report_data = db_helper.get_driver_path_lengths()
    column_names = ['Идентификатор', 'Имя', 'Фамилия', 'Длина пути']

    # print(report_data)
    constraint = [True] * 4
    if account.is_user():
        constraint[0] = False

    grid = db_viewer.ScrolledGridViewer(report_frame, column_names,
                                        report_data, constraint)
    grid.pack(expand=YES, fill=BOTH)

    # report_viewer_frame = ScrolledFrame(report_frame)
    # report_viewer_frame.pack(expand=YES, fill=BOTH)
    # scrolled_canvas = ScrolledCanvas(report_frame)
    # scrolled_canvas.pack(expand=YES, fill=BOTH)
    # report_viewer_frame = Frame(scrolled_canvas)
    # scrolled_canvas.create_window((0, 0), window=report_viewer_frame, anchor=NW)

    # report_viewer_frame.config(bg='red')

    # report_viewer_frame.config(width=500, height=2000)

    # import tkinter.tix as tix
    # bln = tix.Balloon(report_viewer_frame)
    # b = Button(report_viewer_frame, text='ASD:AKD')

    # tix.Tli
    import Pmw.Pmw_2_0_1.demos.Balloon
    return

    report_data = db_helper.get_driver_path_lengths()

    # canvas = ScrolledCanvas(report_viewer_frame)  # , bg='green')#, width=200, height=300, bg='green')
    # canvas.pack(expand=YES, fill=BOTH)

    column_names = ['Идентификатор', 'Имя', 'Фамилия', 'Длина пути']
    column_count = len(column_names)

    for j in range(len(column_names)):
        label = Label(report_viewer_frame)
        label.grid(row=0, column=j, sticky=NSEW)
        label.config(text=column_names[j])
        label.config(relief=GROOVE)  # SUNKEN FLAT RIDGE RAISED GROOVE SOLID
        report_viewer_frame.columnconfigure(j, weight=1)

    print(len(report_data))

    for i in range(30):
        for j in range(column_count):
            entry = Entry(report_viewer_frame)
            entry.grid(row=i + 1, column=j, sticky=NSEW)
            entry.insert(END, report_data[i][j])
            entry.config(justify=CENTER)
            report_viewer_frame.columnconfigure(j, weight=1)
        report_viewer_frame.rowconfigure(i, weight=1)