예제 #1
0
def year_def(message, month, keyboard):
    year = message.text
    try:
        year = int(year)
        if year in range(18, 99):
            unit = unit_salfe_def(message)
            bot.send_message(message.from_user.id,
                             'Выберите подразделение',
                             reply_markup=bot_key.keyboard(unit, 'Выход'))
            bot.register_next_step_handler(message, report_def, month, year,
                                           keyboard)
        else:
            bot.reply_to(
                message,
                'Здесь необходимо ввести цифру от 18 до 99, попробуйте еще раз'
            )
            bot.register_next_step_handler(message, year_def, month, keyboard)
    except ValueError:
        if message.text == 'Выход':
            bot.reply_to(message,
                         'Выберите что необходимо сделать',
                         reply_markup=keyboard)
            return
        else:
            bot.reply_to(
                message,
                'Здесь необходимо ввести последние 2 цифры года, например 20, попробуйте еще раз'
            )
            bot.register_next_step_handler(message, year_def, month, keyboard)
예제 #2
0
def vyhod(*args):
    """Кнопка выход"""
    e = "Выход"
    try:
        if args[0].text.lower() == e.lower():
            bot.send_message(args[0].from_user.id,
                             'Выберете что необходимо сделать',
                             reply_markup=args[1])
            return True
        else:
            return False
    except AttributeError:
        return False
예제 #3
0
def list_staff_def(message, keyboard):
    """Список сотрудников"""
    unit = message.text
    my_unit = unit_salfe_def(message)
    if unit == 'Выход':
        bot.reply_to(message,
                     'Выберите что необходимо сделать',
                     reply_markup=keyboard)
        return
    else:
        try:
            unit = int(unit)
            bot.reply_to(message,
                         'Здесь необходимо ввести название подразделения')
            bot.register_next_step_handler(message, list_staff_def, keyboard)
            return
        except ValueError:
            if unit == my_unit:
                unit = unit.lower()
                sql_request = "SELECT fio, adm FROM staff WHERE unit='{}'".format(
                    unit)
                records = Counter(
                    sql_ps.connect_bd(message, sql_request, 'select'))
                list_staff = sorted([i for i in records])
                send_xlsx = {}
                for i in list_staff:
                    send_xlsx[i[0]] = i[1]
                file = excel.send_xlsx(send_xlsx)
                if file is None:
                    bot.send_message(
                        message.from_user.id,
                        'Файл xlsx не сформирован, попробуйте еще раз.',
                        reply_markup=keyboard)
                else:
                    file_open = open(file, 'rb')
                    bot.send_document(message.from_user.id,
                                      file_open,
                                      reply_markup=keyboard)
                    file_open.close()
                    try:
                        os.remove(file)
                    except FileNotFoundError and PermissionError:
                        pass
            else:
                bot.send_message(message.from_user.id,
                                 'Вы не можете смотреть дургое подразделение',
                                 reply_markup=keyboard)
예제 #4
0
def balance_month(message, keyboard):
    if message.text == 'Выход':
        bot.reply_to(message,
                     'Выберите что необходимо сделать',
                     reply_markup=keyboard)
        return
    elif message.text == logic.time_def()[5]:
        month = logic.time_def()[0]
        threading.Thread(logic.kredit_def(message, month, keyboard))
    elif message.text == logic.time_def()[6]:
        month = logic.time_def()[4]
        threading.Thread(logic.kredit_def(message, month, keyboard))
    else:
        bot.send_message(message.from_user.id,
                         'Необходимо выбрать месяц, попробуйте еще раз.',
                         reply_markup=keyboard)
        return
예제 #5
0
def id_telegramm_def(message, keyboard):
    id_telegramm = message.text
    if id_telegramm == 'Выход':
        bot.reply_to(message,
                     'Выберите что необходимо сделать',
                     reply_markup=keyboard)
        return
    else:
        try:
            id_telegramm = int(id_telegramm)
            bot.send_message(message.from_user.id, 'Введите ФИО сотрудника')
            bot.register_next_step_handler(message, fio_def, id_telegramm,
                                           keyboard)
        except ValueError:
            bot.send_message(
                message.from_user.id,
                'Здесь необходимо ввести id из телеграмма, цифрами')
            bot.register_next_step_handler(message, id_telegramm_def, keyboard)
            return
예제 #6
0
def new_staff_def(message, id_telegramm, fio, unit, keyboard):
    """Добавление нового сотрудника"""
    try:
        if message.text == 'Выход':
            bot.reply_to(message,
                         'Выберите что необходимо сделать',
                         reply_markup=keyboard)
            return
        else:
            int(message.text)
            bot.reply_to(message,
                         'Необходимо ввести Да или Нет, попробуйте еще раз.')
            bot.register_next_step_handler(message, new_staff_def,
                                           id_telegramm, fio, unit, keyboard)
            return
    except ValueError:
        adm = message.text
        if adm.lower() == 'да':
            adm = 'Yes'
        elif adm.lower() == 'нет':
            adm = 'No'
        else:
            bot.reply_to(message,
                         'Необходимо ввести Да или Нет, попробуйте еще раз.')
            bot.register_next_step_handler(message, new_staff_def,
                                           id_telegramm, fio, unit, keyboard)
            return
        sql_request = 'SELECT id_telegramm FROM staff'
        records = sql_ps.connect_bd(message, sql_request, 'select')
        if str(id_telegramm) not in parse(records, 'string'):
            sql_request = "INSERT INTO staff(id_telegramm, fio, unit, install_date, adm) " \
                          "VALUES ('{}', '{}', '{}', '{}', '{}')".format(id_telegramm, fio, unit, time_def()[2], adm)
            sql_ps.connect_bd(message, sql_request, 'insert')
            bot.send_message(message.from_user.id,
                             'Сотрудник успешно добавлен',
                             reply_markup=keyboard)
            return
        else:
            bot.send_message(message.from_user.id,
                             'Сотрудник с таким id уже добавлен',
                             reply_markup=keyboard)
            return
예제 #7
0
def registration(message):
    """Взять талон в столовую"""
    sql_request = 'SELECT id_telegramm FROM staff'
    records = sql_ps.connect_bd(message, sql_request, 'select')
    if str(message.from_user.id) in parse(records, 'string'):
        sql_request = "SELECT unit FROM staff WHERE id_telegramm = '{}'".format(
            str(message.from_user.id))
        records = sql_ps.connect_bd(message, sql_request, 'select')
        unit = translit_def(records[0][0])
        if unit == '':
            bot.send_message(message.from_user.id,
                             'Подразделение указано неверно!')
            return
        data_name = time_def()[0] + time_def()[1] + unit
        records = sql_ps.all_table_list()
        if data_name.lower() not in records:
            sql_ps.create_new_table(data_name)
        sql_request = "SELECT install_date FROM {} WHERE id_telegramm = '{}'".format(
            data_name, str(message.from_user.id))
        records = sql_ps.connect_bd(message, sql_request, 'select')
        if str(time_def()[3]) not in parse(records, 'string_slice'):
            sql_request = "SELECT * FROM staff WHERE id_telegramm = '{}'".format(
                str(message.from_user.id))
            records = sql_ps.connect_bd(message, sql_request, 'select')
            try:
                fio = records[0][2]
                sql_request = "INSERT INTO {}(id_telegramm, fio, unit, install_date, adm) " \
                              "VALUES ('{}', '{}', '{}', '{}', '{}')".format(data_name, records[0][1], records[0][2],
                                                                             records[0][3], time_def()[2], records[0][5]
                                                                             )
                sql_ps.connect_bd(message, sql_request, 'insert')
                color = 'green'
                txt = fio + "\n" + str(time_def()[2])
                image_path = image_pillow.image(txt, color)
                photo = open(image_path, 'rb')
                bot.send_photo(message.from_user.id, photo)
            except:
                bot.send_message(
                    message.from_user.id,
                    'Если вы не получили талон попробуйте еще раз')
                return
            try:
                os.remove(image_path)
            except FileNotFoundError:
                return
        else:
            bot.send_message(message.from_user.id, 'Вы уже ели сегодня')
            return
    else:
        txt = 'Вы не зарегистрированы' + '\n' + 'Ваш id - ' + str(
            message.from_user.id)
        color = 'red'
        image_path = image_pillow.image(txt, color)
        photo = open(image_path, 'rb')
        bot.send_photo(message.from_user.id, photo)
        try:
            os.remove(image_path)
        except FileNotFoundError:
            return
    return
예제 #8
0
def delete_def(message, keyboard):
    """Удаление сотрудника"""
    sql_request = 'SELECT fio FROM staff'
    records = sql_ps.connect_bd(message, sql_request, 'select')
    my_unit = unit_salfe_def(message)
    if message.text in parse(records, 'string'):
        sql_request = "SELECT unit FROM staff WHERE fio = '{}'".format(
            message.text)
        staff_unit = sql_ps.connect_bd(message, sql_request, 'select')
        if my_unit == staff_unit[0][0]:
            sql_request = "DELETE FROM staff WHERE fio = '{}'".format(
                message.text)
            sql_ps.connect_bd(message, sql_request, 'delete')
            bot.send_message(message.from_user.id,
                             'Сотрудник успешно удален',
                             reply_markup=keyboard)
        else:
            bot.send_message(
                message.from_user.id,
                'Вы не можете удалить сотрудника с другого подразделения',
                reply_markup=keyboard)
            return
    elif message.text == 'Выход':
        bot.reply_to(message,
                     'Выберите что необходимо сделать',
                     reply_markup=keyboard)
        return
    else:
        bot.send_message(
            message.from_user.id,
            'Такого сотрудника нету в списке, попробуйте еще раз или нажмите "Выход"'
        )
        bot.register_next_step_handler(message, delete_def, keyboard)
        return
예제 #9
0
def fio_def(message, id_telegramm, keyboard):
    fio = message.text
    if fio == 'Выход':
        bot.reply_to(message,
                     'Выберите что необходимо сделать',
                     reply_markup=keyboard)
        return
    else:
        try:
            fio = int(fio)
            bot.send_message(message.from_user.id,
                             'Здесь необходимо ввести ФИО, буквами')
            bot.register_next_step_handler(message, fio_def, id_telegramm,
                                           keyboard)
            return
        except ValueError:
            unit = unit_salfe_def(message)
            bot.send_message(message.from_user.id,
                             'Выберите подразделение',
                             reply_markup=bot_key.keyboard(unit, 'Выход'))
            bot.register_next_step_handler(message, unit_def, id_telegramm,
                                           fio, keyboard)
예제 #10
0
def report_def(message, month, year, keyboard):
    """Отчет"""
    unit = message.text
    my_unit = unit_salfe_def(message)
    try:
        unit = unit.lower()
    except AttributeError:
        bot.reply_to(message, 'Здесь необходимо ввести подразделение')
        bot.register_next_step_handler(message, report_def, month, year,
                                       keyboard)
    if unit == '':
        bot.send_message(message.from_user.id,
                         'Подразделение указано неверно!',
                         reply_markup=keyboard)
        return
    elif unit != my_unit:
        bot.send_message(message.from_user.id,
                         'Вы не можете смотреть отчет других подразделений',
                         reply_markup=keyboard)
        return
    unit = translit_def(unit)
    data_name = month + str(year) + unit
    records = sql_ps.all_table_list()
    answer = 'Отчета за этот период нету.'
    if data_name.lower() in records:
        sql_request = 'SELECT fio, id_telegramm FROM {}'.format(data_name)
        records = sql_ps.connect_bd(message, sql_request, 'select')
        records = Counter(records)
        list_keys = sorted(list(records.keys()))
        send_xlsx = {i[0]: records[i] * 100 for i in list_keys}
        file = excel.send_xlsx(send_xlsx)
        if file is None:
            bot.send_message(message.from_user.id,
                             'Файл xlsx не сформирован, попробуйте еще раз.',
                             reply_markup=keyboard)
        else:
            file_open = open(file, 'rb')
            bot.send_document(message.from_user.id,
                              file_open,
                              reply_markup=keyboard)
            file_open.close()
            try:
                os.remove(file)
            except FileNotFoundError and PermissionError:
                print('Не прошло удаление файла!')
                pass
    else:
        bot.send_message(message.from_user.id, answer, reply_markup=keyboard)
        return
예제 #11
0
def unit_def(message, id_telegramm, fio, keyboard):
    unit = message.text
    if unit == 'Выход':
        bot.reply_to(message,
                     'Выберите что необходимо сделать',
                     reply_markup=keyboard)
        return
    else:
        try:
            unit = int(unit)
            bot.reply_to(
                message,
                'Здесь необходимо ввести название подразделения на русском языке'
            )
            bot.register_next_step_handler(message, unit_def, id_telegramm,
                                           fio, keyboard)
            return
        except ValueError:
            unit = unit.lower()
            my_unit = unit_salfe_def(message)
            sql_request = 'SELECT unit FROM staff'
            records = sql_ps.connect_bd(message, sql_request, 'select')
            if str(unit) in parse(records, 'string'):
                if unit == my_unit:
                    bot.send_message(message.from_user.id,
                                     'Является ли сотрудник администратором?')
                    bot.register_next_step_handler(message, new_staff_def,
                                                   id_telegramm, fio, unit,
                                                   keyboard)
                else:
                    bot.send_message(
                        message.from_user.id,
                        'Вы не можете добавить сотрудника в другое подразделение',
                        reply_markup=keyboard)
                    return
            else:
                bot.reply_to(message, 'Такого подразделения еще не создано')
                return
예제 #12
0
def kredit_def(message, month, keyboard):
    """Баланс"""
    sql_request = 'SELECT id_telegramm FROM staff'
    records = sql_ps.connect_bd(message, sql_request, 'select')
    if str(message.from_user.id) in parse(records, 'string'):
        sql_request = "SELECT unit FROM staff WHERE id_telegramm = '{}'".format(
            str(message.from_user.id))
        unit = translit_def(
            sql_ps.connect_bd(message, sql_request, 'select')[0][0])
        if unit == '':
            bot.send_message(message.from_user.id,
                             'Подразделение указано неверно!')
            return
        data_name = month + time_def()[1] + unit
        records = sql_ps.all_table_list()
        if data_name.lower() not in records:
            sql_ps.create_new_table(data_name)
        sql_request = "SELECT id_telegramm FROM {} WHERE id_telegramm = '{}'".format(
            data_name, str(message.from_user.id))
        records = Counter(sql_ps.connect_bd(message, sql_request, 'select'))
        n = [records[i] * 100 for i in records]
        try:
            answer = 'Вы должны - ' + str(n[0]) + ' рублей'
        except IndexError:
            answer = 'Вы должны 0 рублей'
        bot.send_message(message.from_user.id, answer, reply_markup=keyboard)
    else:
        txt = 'Вы не зарегистрированы' + '\n' + 'Ваш id - ' + str(
            message.from_user.id)
        color = 'red'
        image_path = image_pillow.image(txt, color)
        photo = open(image_path, 'rb')
        bot.send_photo(message.from_user.id, photo, reply_markup=keyboard)
        try:
            os.remove(image_path)
        except FileNotFoundError:
            return
예제 #13
0
def user_id_def(message, keyboard1, keyboard):
    """Меню Действия"""
    if message.text == 'Отчет':
        bot.send_message(message.from_user.id,
                         'Выберите месяц или введите от 1 до 12',
                         reply_markup=bot_key.keyboard(logic.time_def()[5],
                                                       logic.time_def()[6],
                                                       'Выход'))
        bot.register_next_step_handler(message, logic.month_def, keyboard)
        return
    elif message.text == 'Добавление сотрудника':
        bot.send_message(message.from_user.id, 'Введите ID телеграмм')
        bot.register_next_step_handler(message, logic.id_telegramm_def,
                                       keyboard)
    elif message.text == 'Список сотрудников':
        unit = logic.unit_salfe_def(message)
        bot.send_message(message.from_user.id,
                         'Выберите подразделение',
                         reply_markup=bot_key.keyboard(unit, 'Выход'))
        bot.register_next_step_handler(message, logic.list_staff_def, keyboard)
        return
    elif message.text == 'Удаление сотрудника':
        bot.send_message(message.from_user.id, 'Введите ФИО сотрудника')
        bot.register_next_step_handler(message, logic.delete_def, keyboard)
        return
    elif message.text == 'Выход':
        bot.send_message(message.from_user.id,
                         'Выберите что необходимо сделать',
                         reply_markup=keyboard)
        return
    else:
        bot.reply_to(message,
                     'Выберете что необходимо сделать',
                     reply_markup=keyboard1)
        bot.register_next_step_handler(message, user_id_def, keyboard1,
                                       keyboard)
예제 #14
0
def choice(message):
    """Основное меню"""
    key1 = 'Взять талон в столовую'
    key2 = 'Баланс'
    key3 = 'Действия'
    key4 = 'Отчет'
    key5 = 'Добавление сотрудника'
    key6 = 'Удаление сотрудника'
    key7 = 'Список сотрудников'
    key8 = 'Выход'
    keyboard1 = bot_key.keyboard(key4, key5, key6, key7, key8)
    if logic.access_def(message) is True:
        keyboard = bot_key.keyboard(key1, key2, key3)
    else:
        keyboard = bot_key.keyboard(key1, key2)
    if message.text == key1:
        threading.Thread(logic.registration(message))
    elif message.text == key2:
        bot.send_message(message.from_user.id,
                         'Выберите месяц',
                         reply_markup=bot_key.keyboard(logic.time_def()[5],
                                                       logic.time_def()[6],
                                                       'Выход'))
        bot.register_next_step_handler(message, balance_month, keyboard)
    elif message.text == key3:
        if logic.access_def(message) is True:
            bot.send_message(message.from_user.id,
                             'Выберите что необходимо сделать',
                             reply_markup=keyboard1)
            threading.Thread(
                bot.register_next_step_handler(message, user_id_def, keyboard1,
                                               keyboard))
        else:
            bot.send_message(message.from_user.id,
                             'Доступ запрещен',
                             reply_markup=keyboard)
    elif logic.vyhod(message, keyboard) is True:
        bot.send_message(message.from_user.id, 'Выход', reply_markup=keyboard)
        return
    else:
        bot.reply_to(message, 'Нажмите на кнопку', reply_markup=keyboard)
        return
예제 #15
0
def month_def(message, keyboard):
    month = message.text
    year = time_def()[1]
    last_year = int(year) - 1
    try:
        month = int(month)
        if month in range(1, 13):
            month = calendar.month_name[int(month)]
            bot.send_message(message.from_user.id,
                             'Выберите год',
                             reply_markup=bot_key.keyboard(
                                 last_year, int(year), 'Выход'))
            bot.register_next_step_handler(message, year_def, month, keyboard)
        else:
            bot.reply_to(
                message,
                'Здесь необходимо ввести цифру от 1 до 12, попробуйте еще раз')
            bot.register_next_step_handler(message, month_def, keyboard)
    except ValueError:
        if message.text == 'Выход':
            bot.reply_to(message,
                         'Выберите что необходимо сделать',
                         reply_markup=keyboard)
            return
        elif month == time_def()[5]:
            month = time_def()[0]
            bot.send_message(message.from_user.id,
                             'Выберите год',
                             reply_markup=bot_key.keyboard(
                                 last_year, int(year), 'Выход'))
            bot.register_next_step_handler(message, year_def, month, keyboard)
        elif month == time_def()[6]:
            month = time_def()[4]
            bot.send_message(message.from_user.id,
                             'Выберите год',
                             reply_markup=bot_key.keyboard(
                                 last_year, int(year), 'Выход'))
            bot.register_next_step_handler(message, year_def, month, keyboard)
        else:
            bot.reply_to(
                message,
                'Здесь необходимо ввести цифру от 1 до 12, попробуйте еще раз')
            bot.register_next_step_handler(message, month_def, keyboard)