タスクを達成するには、次のことを行う必要があります
- カスタムチケットフィールド
due_date
などをセットアップします(おそらくあなたのケースではすでに行われています)
- Trac db テーブルで JOIN を使用して、
ticket_custom
そのフィールド値を取得します
- 現在の日付を取得 (タイムスタンプ)
- due_date と現在の日付の少なくとも 1 つ (おそらく両方) を比較のために変換します
ここでは 1 + 2 をスキップします。StackOverflow に関する既存のドキュメントがあるためです (つまり、trac レポートで期日列を表示する方法を参照してください)。
NOW()へのアクセス:レポートに関する信頼できる wiki ドキュメントによると、Trac レポートに動的に割り当てられる変数は $USER のみです。そのため、SQL 関数を使用する必要があります。移植可能なソリューションが見つからなかったため、db バックエンドに応じた提案を以下に示します。
- SQLite (Trac のデフォルト):
current_date
またはdatetime('now','localtime')
- PostgreSQL:
current_timestamp
またはnow()
最後のサブタスクについて: Trac 1.1.1 以降でサポートされているように、おそらく (まだ) 真のカスタム時間フィールドを使用していません。これは、開発スナップショット リリースであり、まだ最先端に近いためです。以下で説明するように、文字列変換の回避策を使用する手間が省けるため、完全を期すために指摘するだけです。
今のところおそらく使用しているのは文字列ですが、DateFieldPluginによって提供される入力方法が改善されている可能性があります。ただし、文字列値は、最初は SQL ステートメント内での直接比較には役に立ちません。レポートを機能させるには、すべての文字列を日付値または整数に変換する必要があります。タイムスタンプの変換に関連するため、Trac で特定の日付にクローズされたチケットを含むレポートを作成する方法を参照してください。Trac のバージョンに応じて、ネイティブの Trac 時間列形式 (整数値) を使用することをお勧めします。
- Trac <= 0.11: POSIX 秒
- Trac >= 0.12: POSIXマイクロ秒
しかし、公開された例date
では、SQL ステートメントで関数を使用することを推奨しています (SQLite 用)。日付文字列の形式によっては、文字列を適切な形式に変換する必要があります。つまり、 DateFieldPluginsubstr
のサンプル レポートに示されているように使用します。
ピースをまとめる (SQLite の例、MM/DD/YYYY
due_date 文字列形式と仮定):
SELECT id AS ticket, status, priority, reporter, owner,
time AS created, summary, tc.value as date
FROM ticket t
LEFT JOIN ticket_custom tc on t.id = tc.ticket and tc.name= 'due_date'
WHERE status IN ('new', 'assigned', 'reopened') and reporter = $USER
and date(substr(tc.value,7,4)||"-"||substr(tc.value,1,2)||"-"||substr(tc.value,4,2)) < current_date
ORDER BY time, priority