Difference between revisions of "Module:Reports"
From cpt
No edit summary |
No edit summary |
||
Line 170: | Line 170: | ||
closed = closed + #result.results | closed = closed + #result.results | ||
end | end | ||
s = s .. 'Created ;' .. index .. ';' .. created .. ' | s = s .. 'Created ;' .. index .. ';' .. created .. '\n' | ||
s = s .. 'Closed ;' .. index .. ';' .. closed .. ' | s = s .. 'Closed ;' .. index .. ';' .. closed .. '\n' | ||
timestamp_start = timestamp_stop | timestamp_start = timestamp_stop | ||
end | end |
Revision as of 18:14, 16 July 2019
Documentation for this module may be created at Module:Reports/doc
local p = {}
function p.cleanse(frame)
local s = frame.args[1]
s = string.gsub( s, '{', '{' )
s = string.gsub( s, '}', '}' )
s = string.gsub( s, '%[', '[' )
s = string.gsub( s, '%]', ']' )
s = string.gsub( s, '|', '|' )
return s
end
function p.cptWorkboardsTableRow(frame)
local s = ''
local link = frame.args[1]
local category = frame.args[2]
local workboards = frame.args[3]
local backlog = frame.args[4]
if ( #category > 0 and ( #workboards == 0 and #backlog == 0 )) or
( #category == 0 and ( #workboards > 0 or ( #backlog > 0 and backlog ~= 'Watching / External' ))) then
s = s .. '\n|' .. link
s = s .. '\n|' .. category
s = s .. '\n|' .. workboards
s = s .. '\n|' .. backlog
s = s .. '\n|-'
end
return s
end
function p.priorityToNumber(priority)
local priority_map = {};
priority_map['pink'] = 1
priority_map['red'] = 2
priority_map['orange'] = 3
priority_map['yellow'] = 4
priority_map['sky'] = 5
priority_map['violet'] = 6
if priority_map[priority] then
return priority_map[priority]
else
return '7'
end
end
function p.priorityToColor(priority)
local priority_map = {};
priority_map[1] = '#da49be'
priority_map[2] = '#c0392b'
priority_map[3] = '#e67e22'
priority_map[4] = '#f1c40f'
priority_map[5] = '#3498db'
priority_map[6] = '#8e44ad'
priority_map[7] = '#000'
if priority_map[priority] then
return priority_map[priority]
else
return '#000'
end
end
function p.Workboard(frame)
local s = ''
local initiative = frame.args[1]
local result = mw.smw.getQueryResult(
'[[Has subobject::<q>[[Project::Core Platform Team]][[Column::' ..
initiative .. ']]</q>]][[Status::open||stalled]]' ..
'|?CPT Workboards Column|?CPT Backlog Column|?Priority|link=none|limit=500' )
if result ~= nil then
local tasks = {}
local columns = {}
local priorities = {}
local empty = true
local missing = false
for k1,v1 in pairs( result.results ) do
local workboards_column = v1.printouts['CPT Workboards Column'][1]
local backlog_column = v1.printouts['CPT Backlog Column'][1]
empty = false
if workboards_column ~= nil then
tasks[v1.fulltext] = workboards_column
columns[workboards_column] = true
elseif backlog_column ~= nil then
tasks[v1.fulltext] = backlog_column
columns[backlog_column] = true
else
tasks[v1.fulltext] = false
missing = true
end
priorities[v1.fulltext] = p.priorityToNumber( v1.printouts['Priority'][1] )
end
if ( empty ) then
s = 'No results'
else
local sorted_columns = {}
for k1,v1 in pairs ( columns ) do
table.insert( sorted_columns, k1 )
end
table.sort( sorted_columns )
s = s .. '{| style="border-spacing:10px;border-collapse:separate;"\n'
for k1,v1 in pairs( sorted_columns ) do
s = s .. '! style="border:1px solid #000;padding:5px;background-color:#bbb;text-align:center;" |' .. v1 .. '\n'
end
if ( missing ) then
s = s .. '! style="border:1px solid #000;padding:5px;background-color:#bbb;text-align:center;" |BACKLOG\n'
end
s = s .. '|-\n'
for k1,v1 in pairs( sorted_columns ) do
s = s .. '| style="vertical-align:top;min-width:200px;" |\n'
for priority = 1,7 do
for k2,v2 in pairs ( tasks ) do
if priorities[k2] == priority and v1 == v2 then
s = s .. '{| width=100% style="margin-bottom:10px;"\n| ' ..
'style="border:1px solid #000;border-left:4px solid ' ..
p.priorityToColor( priorities[k2] ) ..
';padding:5px;text-align:center;vertical-align:middle;" |' ..
'[[File:Phab.png|20px|link=https://phabricator.wikimedia.org/' ..
string.gsub( k2, 'Phab:', '' ) .. ']] [[' .. k2 .. ']]\n|}\n'
end
end
end
end
if ( missing ) then
s = s .. '| style="vertical-align:top;min-width:200px;" |\n'
for priority = 1,7 do
for k1,v1 in pairs ( tasks ) do
if priorities[k1] == priority and v1 == false then
s = s .. '{| width=100% style="margin-bottom:10px;"\n| ' ..
'style="border:1px solid #000;border-left:4px solid ' ..
p.priorityToColor( priorities[k1] ) ..
';padding:5px;text-align:center;vertical-align:middle;" |' ..
'[[File:Phab.png|20px|link=https://phabricator.wikimedia.org/' ..
string.gsub( k1, 'Phab:', '' ) .. ']] [[' .. k1 .. ']]\n|}\n'
end
end
end
end
s = s .. '|}'
end
end
return s
end
function p.burnupFromDate(frame)
local start = {
year = frame.args[1],
month = frame.args[2],
day = frame.args[3]
}
local step = frame.args[4]
local count = frame.args[5]
local timestamp_start = os.time( start )
local s = ''
local created = 0
local closed = 0
for index = 1, count do
local timestamp_stop = timestamp_start + (step * 86400)
local result = mw.smw.getQueryResult(
'[[Category:Phabricator Tasks]]' ..
'[[Task Created Timestamp::>' .. timestamp_start .. ']]' ..
'[[Task Created Timestamp::<<' .. timestamp_stop .. ']]' ..
'|limit=3000' )
if result ~= nil then
created = created + #result.results
end
result = mw.smw.getQueryResult(
'[[Category:Phabricator Tasks]]' ..
'[[Task Closed Timestamp::>' .. timestamp_start .. ']]' ..
'[[Task Closed Timestamp::<<' .. timestamp_stop .. ']]' ..
'|limit=3000' )
if result ~= nil then
closed = closed + #result.results
end
s = s .. 'Created ;' .. index .. ';' .. created .. '\n'
s = s .. 'Closed ;' .. index .. ';' .. closed .. '\n'
timestamp_start = timestamp_stop
end
return s
end
return p