def proj_report(update, l_date, r_date, proj): em = EmployeeModel(db.get_connection()) pm = ProjectModel(db.get_connection()) pid = pm.get_id(proj) tm = TaskModel(db.get_connection()) all_tasks = tm.get_by_project(pid) done_task_counter = 0 for task in all_tasks: if not task[5]: continue if l_date <= task[6] <= r_date: done_task_counter += 1 date = datetime.fromordinal(task[6]) update.message.reply_text(f''' <b>Проект: {pm.get_name(task[4])}</b> <b>Задача: {task[1]}</b> <b>Описание: {task[2]}</b> <b>Сотрудник: {em.get(task[3])[1]}</b> <b>Время выполнения: {task[8]}</b> <b>Статус: Выполнена</b> <b>Дата выполнения: {'.'.join(map(str, [date.day, date.month, date.year]))}</b>''', parse_mode='HTML') update.message.reply_text(f'<b>Выполнено {done_task_counter} задач из {len(all_tasks)}</b>', reply_markup=create_back_to_reports_keyboard(), parse_mode='HTML')
def delete_project(name): pm = ProjectModel(db.get_connection()) pid = pm.get_id(name) pm.delete(pid) tm = TaskModel(db.get_connection()) tm.delete_by_project(pid)
def set_done(bot, name, project, time): tm = TaskModel(db.get_connection()) pm = ProjectModel(db.get_connection()) um = UserModel(db.get_connection()) em = EmployeeModel(db.get_connection()) project_id = pm.get_id(project) tid = tm.search(name, project_id) boss_id = um.get_boss_id() if tid: tm.set_done(tid) tm.set_done_date(tid) tm.set_timer(tid, time) task = tm.get(tid) bot.sendMessage(boss_id, f''' <b>Задача выполнена <u>Исполнитель</u>: {em.get(task[3])[1]} <u>Проект:</u> {pm.get_name(task[4])} <u>Задача:</u> {task[1]} <u>Описание задачи:</u> {task[2]} <u>Время выполнения:</u> {task[8].split(':')[0]} часа(-ов) {task[8].split(':')[1]} минут </b>''', parse_mode='HTML') else: raise TaskNotFound
def project_preview(update, project): tm = TaskModel(db.get_connection()) pm = ProjectModel(db.get_connection()) em = EmployeeModel(db.get_connection()) tasks = sorted(tm.get_by_project(pm.get_id(project)), key=lambda t: t[5]) for task in tasks: update.message.reply_text( f''' <b>Задача: <u>{task[1]}</u></b> <b>Описание:</b> {task[2]} <b>Исполнитель:</b> {em.get(task[3])[1]} <b>Время выполнения: {'-' if not task[5] else task[8]}</b> <b>Статус: {'Выполнена' if task[5] else 'В процессе'}</b> ''', reply_markup=create_tasks_in_project_boss_keyboard(), parse_mode='HTML')
def create_projects_boss_keyboard(db): pm = ProjectModel(db.get_connection()) projects = [el[1] for el in pm.get_all()] boss_reply_keyboard3 = [] temp = [] for p in projects: temp.append(p) if len(temp) == 4: boss_reply_keyboard3.append(temp) temp = [] if temp: boss_reply_keyboard3.append(temp) boss_reply_keyboard3.append(['Главное меню']) boss_markup3 = ReplyKeyboardMarkup(boss_reply_keyboard3, one_time_keyboard=False) return boss_markup3
def add_task(bot, name, description, emp_name, project_name, boss_link): em = EmployeeModel(db.get_connection()) pm = ProjectModel(db.get_connection()) tm = TaskModel(db.get_connection()) emp_id = em.get_id(emp_name) if not emp_id: raise UserNotFound proj_id = pm.get_id(project_name) if not proj_id: raise ProjectNotFound tm.insert(name, description, emp_id, proj_id, boss_link, 0) em.add_project(emp_id, pm.get_id(project_name)) bot.sendMessage(emp_id, f''' У Вас новая задача <b><u>Проект:</u> {project_name} <u>Задача:</u> {name} <u>Описание задачи:</u> {description} <u>Контакты Лидера Команды:</u> {boss_link}</b>''', parse_mode='HTML')
def init_tm_db(): db = DB('tm.db') um = UserModel(db.get_connection()) um.init_table() um.insert(394406731, 'Danya', boss=True) um.insert(1027909953, 'Maxim', boss=False) # um.insert(1027909953, 'Maxim') # um.insert(1579583, 'Евгений Викторович', boss=True) # um.insert(60880374, 'Виталий Викторович', boss=True) pm = ProjectModel(db.get_connection()) pm.init_table() tm = TaskModel(db.get_connection()) tm.init_table() em = EmployeeModel(db.get_connection()) em.init_table() em.auto_update()
def view_tm_db(): db = DB('tm.db') um = UserModel(db.get_connection()) print('Пользователи: ', um.get_all()) print('-----------------------------------------------') pm = ProjectModel(db.get_connection()) print('Проекты: ', pm.get_all()) print('-----------------------------------------------') em = EmployeeModel(db.get_connection()) print('Сотрудники: ', em.get_all()) print('-----------------------------------------------') tm = TaskModel(db.get_connection()) print('Задачи: ', tm.get_all())
def employee_task_preview(bot, update): tm = TaskModel(db.get_connection()) pm = ProjectModel(db.get_connection()) tasks = (task for task in tm.get_by_emp(update.message.from_user.id) if not task[5]) for task in tasks: update.message.reply_text(f''' <b>Задача: <u>{task[1]}</u></b> <b>Описание:</b> {task[2]} <b>Проект: {pm.get_name(task[4])}</b> <b>Контакты Лидера Команды: {task[7]}</b> <b>Статус:</b> {'Выполнена' if task[5] else 'В процессе'}''', reply_markup=create_main_employee_keyboard(), parse_mode='HTML')
def task_preview(bot, update): tm = TaskModel(db.get_connection()) em = EmployeeModel(db.get_connection()) pm = ProjectModel(db.get_connection()) tasks = sorted(tm.get_all(), key=lambda t: t[5]) for task in tasks: update.message.reply_text(f''' <b>Задача: <u>{task[1]}</u></b> <b>Проект: {pm.get_name(task[4])}</b> <b>Описание: {task[2]}</b> <b>Сотрудник: {em.get(task[3])[1]}</b> <b>Время выполнения: {'-' if not task[5] else task[8]}</b> <b>Статус:</b> {'Выполнена' if task[5] else 'В процессе'}''', reply_markup=create_menu_keyboard(), parse_mode='HTML')
def create_tasks_employee_keyboard(db, emp_id): tm = TaskModel(db.get_connection()) pm = ProjectModel(db.get_connection()) emp_tasks = (f'{pm.get_name(t[4])}: {t[1]}' for t in tm.get_by_emp(emp_id) if not t[5]) employee_tasks_keyboard = [] temp = [] for t in emp_tasks: temp.append(t) if len(temp) == 2: employee_tasks_keyboard.append(temp) temp = [] if temp: employee_tasks_keyboard.append(temp) employee_tasks_markup = ReplyKeyboardMarkup(employee_tasks_keyboard, one_time_keyboard=False) return employee_tasks_markup
dp.add_handler(MessageHandler(Filters.regex('Просмотр ИНН'), kpz_inn_preview)) # Клавиатура сотрудника dp.add_handler( MessageHandler(Filters.regex('Просмотр моих задач'), employee_task_preview)) dp.add_handler(MessageHandler(Filters.regex('Выполнено'), select_done_task)) # Создаём и удаляем тестовый обработчик текстовых сообщений (команд) projects_list = [] employee_list = [] em = EmployeeModel(db.get_connection()) for e in em.get_all(): employee_list.append(e[1]) pm = ProjectModel(db.get_connection()) for p in pm.get_all(): projects_list.append(p[1]) # Создаём обработчик текстовых сообщений типа Filters.text text_handler = MessageHandler(Filters.text, global_function) # Регистрируем обработчик в диспетчере. dp.add_handler(text_handler) # Запускаем цикл приема и обработки сообщений updater.start_polling() # Ждём завершения приложения при нажатии клавиш Ctrl+C updater.idle()
def delete_task(project_name, task_name): pm = ProjectModel(db.get_connection()) pid = pm.get_id(project_name) tm = TaskModel(db.get_connection()) tm.delete(pid, task_name)
def add_project(name): pm = ProjectModel(db.get_connection()) if pm.get_id(name): raise ProjectAlreadyExist else: pm.insert(name)