要完成任务,您需要
- 设置自定义工单字段
due_date
或类似字段(在您的情况下可能已经完成)
- 在 Trac db 表上使用 JOIN
ticket_custom
来获取该字段值
- 检索当前日期(时间戳)
- 转换到期日期和当前日期(可能两者)中的至少一个以进行比较
我将在这里跳过 1 + 2,因为 StackOverflow 上有现有的文档(即参见如何在 trac 报告中显示截止日期列?)和其他地方。
到达NOW():根据关于报告的权威 wiki 文档,Trac 报告只有一个动态分配的变量:$USER。因此,您需要使用 SQL 函数。我找不到可移植的解决方案,因此这些建议取决于您的数据库后端:
- 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)。根据您的日期字符串格式,这将需要将字符串转换为适当的格式,即使用DateFieldPlugin 的示例报告中substr
所示的格式。
将各个部分放在一起(以 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