要完成你需要
- 设置自定义票证字段任务
due_date
或相似(可能在你的案件已经完成)
- 使用上Trac的数据库表
ticket_custom
一个JOIN来获取领域值
- 检索当前的日期(时间戳)和DUE_DATE当前日期的
- 转换至少一个(可能两者)进行比较
这里我会跳过1 + 2,因为现在有关于StackOverflow的文档。见How to show due date column in the trac reports?)和其他地方。
到达NOW():根据报告中的authoritative wiki documentation,Trac报告中只有一个动态分配的变量:$ USER。所以你需要使用一个SQL函数。我没能找到一个便携的解决方案,所以这些都取决于你的数据库后端建议:
- 的SQLite(Trac系统默认):
current_date
或datetime('now','localtime')
- 的PostgreSQL:
current_timestamp
或now()
在最后子任务:可能你还没有(使用)真正的自定义时间字段,因为它是一个开发快照版本,并且仍然接近流血边缘。我只是指出它的完整性,因为它将为您节省使用字符串转换替代方法的麻烦,如下所述。
你现在可能使用的是一个字符串,也许有改进的输入法,由DateFieldPlugin提供。但是,在SQL语句中,字符串值最初是无用的直接比较。您必须将所有字符串转换为日期值或整数才能使您的报表正常工作。请参阅How to create report with tickets closed at certain date in Trac,因为它与时间戳转换有关。我建议你使用本地Trac的时间列格式(整数),这取决于你的Trac的版本:
- Trac的< = 0.11:POSIX秒
- Trac系统> = 0.12:POSIX 微 - 秒
但发布的示例提倡在SQL语句中使用date
函数(适用于SQLite)。根据您的日期字符串格式,这需要将字符串转换为适当的格式,即使用substr
(如sample report for DateFieldPlugin中所示)。
把拼在一起(例如对于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
Trac是否支持NOW()? – 2013-04-26 16:55:09
我不这么认为,但我是trac新手,所以仍在学习 – 2013-04-26 16:58:03
好奇什么是Trac,我查了一下,发现“Trac ....需要一个数据库,SQLite,PostgreSQL或MySQL。” (http://trac.edgewall.org/wiki/TracInstall)所以问题是,你的安装使用了哪个数据库? – 2013-04-26 21:16:59