--commit -- автоматически переключить даты #44

Closed
opened 2026-06-30 08:06:22 +07:00 by artem.kokos · 0 comments
Owner

Контекст

Сейчас период отчёта задаётся через --date или берётся из .env. После генерации отчёта пользователь вручную обновляет даты, если хочет, чтобы следующий запуск захватил новый период.

Предложение

Добавить флаг --commit. После успешной генерации отчёта он фиксирует использованный период как новый период по умолчанию. Фиксация должна происходить в YAML-конфиге (~/.config/redmine-reporter/config.yml), см. #46.

Структура в конфиге

period:
  precision: datetime  # date | datetime, см. #47
  default_from: "2026-06-01"
  default_to: "2026-06-30"
  dynamic: true
  last_used:
    from: "2026-06-30T09:00:00"
    to: "2026-06-30T12:00:00"

Логика

  • Без --commit CLI использует period.default_from/period.default_to (или динамический период, если period.dynamic: true).
  • С --commit CLI:
    1. Генерирует отчёт за текущий период.
    2. Записывает этот период в period.last_used.from и period.last_used.to.
    3. При следующем запуске без --date использует period.last_used как отправную точку для вычисления «следующего» периода.

Точность периода

  • При period.precision: date (по умолчанию) last_used хранится как дата, следующий период начинается со следующего дня.
  • При period.precision: datetime last_used хранится как datetime с точностью до секунды. Это позволяет избежать дублирования time entries, если отчёт отправлялся внутри рабочего дня. Подробнее — в #47.

Правила переключения на следующий период

Если period.dynamic: true:

  • После --commit за июнь 2026 следующий запуск берёт июль 2026.
  • Если last_used — целый месяц, берётся следующий целый месяц.
  • Если last_used — произвольный диапазон, берётся диапазон той же длины, начиная со дня (или момента времени), следующего за last_used.to.

Если period.dynamic: false:

  • --commit просто перезаписывает default_from/default_to на только что использованный период.

Файл по умолчанию

При --commit удобно сразу сохранять отчёт в файл с именем по умолчанию из #43:

redmine-reporter --commit
# → генерирует отчёт, сохраняет в ~/reports/<author>_<from>_<to>.xlsx,
# → обновляет period.last_used в config.yml

Связанные задачи

  • #46 — YAML-конфиг, в котором хранится period.last_used.
  • #47 — поддержка datetime в периоде и дедупликация time entries.
  • #43 — имя файла и пути по умолчанию.
  • #45 — автоотправка по почте может запускаться вместе с --commit.

Критерии приёмки

  • Флаг --commit добавлен в CLI.
  • После --commit период сохраняется в ~/.config/redmine-reporter/config.yml.
  • Поддерживается period.precision (date / datetime).
  • При period.dynamic: true следующий запуск вычисляет период на основе last_used.
  • При period.dynamic: false перезаписываются default_from/default_to.
  • --commit совместим с --output, --email и другими флагами.
  • Добавлены тесты на запись и чтение period.last_used.
## Контекст Сейчас период отчёта задаётся через `--date` или берётся из `.env`. После генерации отчёта пользователь вручную обновляет даты, если хочет, чтобы следующий запуск захватил новый период. ## Предложение Добавить флаг `--commit`. После успешной генерации отчёта он фиксирует использованный период как новый период по умолчанию. Фиксация должна происходить в YAML-конфиге (`~/.config/redmine-reporter/config.yml`), см. #46. ## Структура в конфиге ```yaml period: precision: datetime # date | datetime, см. #47 default_from: "2026-06-01" default_to: "2026-06-30" dynamic: true last_used: from: "2026-06-30T09:00:00" to: "2026-06-30T12:00:00" ``` ### Логика - Без `--commit` CLI использует `period.default_from`/`period.default_to` (или динамический период, если `period.dynamic: true`). - С `--commit` CLI: 1. Генерирует отчёт за текущий период. 2. Записывает этот период в `period.last_used.from` и `period.last_used.to`. 3. При следующем запуске без `--date` использует `period.last_used` как отправную точку для вычисления «следующего» периода. ### Точность периода - При `period.precision: date` (по умолчанию) `last_used` хранится как дата, следующий период начинается со следующего дня. - При `period.precision: datetime` `last_used` хранится как `datetime` с точностью до секунды. Это позволяет избежать дублирования time entries, если отчёт отправлялся внутри рабочего дня. Подробнее — в #47. ## Правила переключения на следующий период Если `period.dynamic: true`: - После `--commit` за июнь 2026 следующий запуск берёт июль 2026. - Если `last_used` — целый месяц, берётся следующий целый месяц. - Если `last_used` — произвольный диапазон, берётся диапазон той же длины, начиная со дня (или момента времени), следующего за `last_used.to`. Если `period.dynamic: false`: - `--commit` просто перезаписывает `default_from`/`default_to` на только что использованный период. ## Файл по умолчанию При `--commit` удобно сразу сохранять отчёт в файл с именем по умолчанию из #43: ```bash redmine-reporter --commit # → генерирует отчёт, сохраняет в ~/reports/<author>_<from>_<to>.xlsx, # → обновляет period.last_used в config.yml ``` ## Связанные задачи - #46 — YAML-конфиг, в котором хранится `period.last_used`. - #47 — поддержка `datetime` в периоде и дедупликация time entries. - #43 — имя файла и пути по умолчанию. - #45 — автоотправка по почте может запускаться вместе с `--commit`. ## Критерии приёмки - [ ] Флаг `--commit` добавлен в CLI. - [ ] После `--commit` период сохраняется в `~/.config/redmine-reporter/config.yml`. - [ ] Поддерживается `period.precision` (`date` / `datetime`). - [ ] При `period.dynamic: true` следующий запуск вычисляет период на основе `last_used`. - [ ] При `period.dynamic: false` перезаписываются `default_from`/`default_to`. - [ ] `--commit` совместим с `--output`, `--email` и другими флагами. - [ ] Добавлены тесты на запись и чтение `period.last_used`.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: artem.kokos/redmine-reporter#44