Skip to content

Latest commit

 

History

History
230 lines (174 loc) · 12.1 KB

File metadata and controls

230 lines (174 loc) · 12.1 KB

Changelog - Bot Polya

Версия 2.1 - Добавлена функция перерегистрации

✅ Что добавлено:

  1. Кнопка "✏️ Изменить имя" в главном меню

    • Позволяет пользователям изменить своё имя в формате "Фамилия Имя"
    • Доступна всем зарегистрированным пользователям
  2. Обработчик изменения имени (cb_menu_name)

    • Переводит пользователя в состояние NameFSM.waiting_name
    • Показывает форму для ввода нового имени
  3. Улучшенная функция регистрации (capture_full_name)

    • Теперь автоматически определяет, регистрируется ли новый пользователь или изменяет имя
    • Для новых пользователей: показывает приветствие и кнопку меню
    • Для существующих: обновляет имя и возвращает в главное меню

🔧 Как работает:

  1. Первоначальная регистрация (при первом запуске /start):

    • Бот просит ввести "Фамилию Имя"
    • После ввода показывает приветствие и кнопку "🧰 Меню"
    • Пользователь регистрируется в системе
  2. Изменение имени (через кнопку "✏️ Изменить имя"):

    • Пользователь нажимает кнопку в главном меню
    • Бот просит ввести новое имя
    • После ввода обновляет данные и возвращает в главное меню
    • Показывает подтверждение: "✏️ Имя изменено на: [новое имя]"

📱 Интерфейс:

  • Главное меню теперь содержит 4 кнопки:
    • 🚜 Работа
    • 📊 Статистика
    • 📝 Перепись
    • ✏️ Изменить имя
    • ⚙️ Админ (только для администраторов)

🗄️ База данных:

  • Функция upsert_user() автоматически создаёт или обновляет пользователя
  • Все существующие пользователи могут изменить своё имя
  • Сохраняется история изменений (время последнего обновления)

🧪 Тестирование:

  • Синтаксис проверен: python -m py_compile bot_polya.py
  • Все функции корректно импортируются
  • Структура базы данных соответствует ожиданиям

Версия 2.2 - Упрощен выбор склада

✅ Что изменено:

Упрощен выбор локации "Склад":

  • При выборе "Склад" больше не показывается дополнительное меню
  • Сразу устанавливается локация "Склад" и переход к выбору даты
  • Для полей по-прежнему показывается список конкретных полей

🔧 Как работает теперь:

  1. Выбор "Поля" → показывает список конкретных полей (Северное, Фазенда, 5 га и т.д.)
  2. Выбор "Склад" → сразу устанавливает "Склад" и переходит к выбору даты

📱 Улучшение UX:

  • Убрано лишнее окно выбора для склада
  • Ускорен процесс создания записи для складских работ
  • Сохранена детализация для полевых работ

Версия 2.3 - Исправлены админ-функции и улучшен выбор дат

✅ Что исправлено:

Админ-функции:

  • ✅ Функции добавления и удаления локаций работают корректно
  • ✅ Функции добавления и удаления работ работают корректно
  • ✅ Все админ-команды обрабатываются правильно
  • ✅ Исправлена ошибка BUTTON_DATA_INVALID в админ-панели

Выбор дат:

  • ✅ Окно дат теперь показывает: "Сегодня", "Вчера", "Позавчера"
  • ✅ Добавлены даты: -3, -4 дня назад
  • ✅ Убраны будущие даты (+1, +2, +3, +4, +5 дней)
  • ✅ Улучшена читаемость (вместо "01.01.25 (сегодня)" теперь "Сегодня")

🔧 Как работает теперь:

Админ-панель:

  1. ➕ Добавить работу → выбор группы (техника/ручная) → ввод названия
  2. ➕ Добавить локацию → выбор группы (поля/склад) → ввод названия
  3. ➖ Удалить работу → выбор группы → выбор конкретной работы
  4. ➖ Удалить локацию → выбор группы → выбор конкретной локации

Выбор дат:

  • Сегодня - текущая дата
  • Вчера - вчерашняя дата
  • Позавчера - позавчерашняя дата
  • 01.01.25 - остальные даты в формате ДД.ММ.ГГ
  • Всего 5 дат: сегодня + 4 дня назад

🔧 Техническое исправление:

Проблема BUTTON_DATA_INVALID:

  • В названиях работ/локаций могли быть символы : и пробелы
  • Telegram не принимает такие символы в callback_data
  • Решение: создание безопасных callback_data с заменой спецсимволов на _
  • Ограничение длины до 20 символов для совместимости

Версия 3.0 - Экспорт отчетов в Google Sheets

✅ Что добавлено:

Интеграция с Google Sheets:

  • ✅ Автоматический экспорт отчетов в Google Sheets
  • ✅ Ручной экспорт через админ меню по кнопке "📤 Экспорт в Google Sheets"
  • ✅ Умная проверка дубликатов - каждый отчет экспортируется только один раз
  • ✅ Автоматическое создание месячных таблиц за 3 дня до конца текущего месяца
  • ✅ Группировка отчетов по месяцам (отдельная таблица для каждого месяца)

Формат таблицы:

  • Дата
  • Фамилия Имя
  • Место работы
  • Вид работы
  • Количество часов

Автоматизация:

  • ✅ Планировщик задач для автоматического экспорта по расписанию (cron)
  • ✅ Настройка через переменные окружения (.env)
  • ✅ Возможность включить/выключить автоматический экспорт
  • ✅ Настройка расписания (например, раз в неделю, раз в месяц)

База данных:

  • ✅ Таблица google_exports - отслеживает экспортированные отчеты
  • ✅ Таблица monthly_sheets - хранит информацию о месячных таблицах
  • ✅ Связи между отчетами и строками в Google Sheets

🔧 Как работает:

Ручной экспорт:

  1. Админ открывает меню → "⚙️ Админ" → "📤 Экспорт в Google Sheets"
  2. Бот находит все отчеты, которые еще не были экспортированы
  3. Группирует их по месяцам
  4. Создает таблицы для новых месяцев (если нужно)
  5. Добавляет данные в соответствующие таблицы
  6. Отмечает отчеты как экспортированные в БД
  7. Показывает результат: "✅ Экспортировано записей: X"

Автоматический экспорт:

  • Настраивается через переменную AUTO_EXPORT_ENABLED=true
  • Расписание задается в AUTO_EXPORT_CRON (формат cron)
  • Примеры расписаний:
    • 0 9 * * 1 - каждый понедельник в 9:00
    • 0 0 * * 0 - каждое воскресенье в 00:00
    • 0 18 * * 5 - каждую пятницу в 18:00

Создание месячных таблиц:

  • За 3 дня до конца месяца автоматически создается таблица для следующего месяца
  • Формат названия: WorkLog_YYYY_MM (например, WorkLog_2025_10)
  • Таблицы создаются в указанной папке на Google Drive
  • Первая строка содержит заголовки (жирным шрифтом)

Проверка дубликатов:

  • Каждый экспортированный отчет записывается в таблицу google_exports
  • При следующем экспорте бот пропускает уже экспортированные отчеты
  • Это предотвращает дублирование данных в таблицах

📱 Интерфейс:

Админ-меню теперь содержит:

  • ➕ Добавить работу
  • ➖ Удалить работу
  • ➕ Добавить локацию
  • ➖ Удалить локацию
  • 📤 Экспорт в Google Sheets ← НОВОЕ
  • 🔙 Назад

🔧 Настройка (.env):

# Google Sheets настройки
OAUTH_CLIENT_JSON=oauth_client.json
TOKEN_JSON_PATH=token.json
DRIVE_FOLDER_ID=ваш_folder_id
EXPORT_PREFIX=WorkLog
AUTO_EXPORT_ENABLED=true
AUTO_EXPORT_CRON=0 9 * * 1

📦 Новые зависимости:

pip install apscheduler

Или установите все зависимости:

pip install -r requirements.txt

📚 Документация:

Подробная инструкция по настройке: GOOGLE_SHEETS_SETUP.md

🔐 Авторизация:

  • Используется OAuth 2.0 для доступа к Google API
  • При первом запуске откроется браузер для авторизации
  • Токен доступа сохраняется в token.json и обновляется автоматически
  • Требуется файл oauth_client.json с учетными данными OAuth клиента

📊 Логирование:

Все операции экспорта логируются:

  • INFO: Exported X reports to YYYY-MM - успешный экспорт
  • INFO: Created new sheet for YYYY-MM - создание новой таблицы
  • ERROR: ... - ошибки при экспорте

✨ Преимущества:

  1. Автоматизация - больше не нужно вручную выгружать данные
  2. Без дубликатов - каждый отчет экспортируется только один раз
  3. Организация - отдельные таблицы для каждого месяца
  4. Гибкость - настраиваемое расписание экспорта
  5. Удобство - формат Excel, готовый для анализа
  6. Надежность - отслеживание экспортированных записей в БД