Module:Sandbox/User:The Gaffer/Modules/Infobox Recipe: Difference between revisions

Jump to navigation Jump to search
Content added Content deleted
No edit summary
No edit summary
Line 7: Line 7:
local currency = require('Module:Currency').parse
local currency = require('Module:Currency').parse


-- Define raw material costs based on Semantic MediaWiki queries
-- get the buy price from the query result
local function getCost(queryResult)
local function getCost(queryResult)
if type(queryResult) == "table" and queryResult[1]['Shop buy price'] then
if type(queryResult) == "table" and queryResult[1]['Shop buy price'] then
Line 15: Line 15:
end
end


-- Get buy prices of raw materials
local rawmat1cost = args.rawmat1 and getCost(mw.smw.ask('[[:+]][[Sold item::' .. args.rawmat1 .. ']]|?Shop buy price|sort=Shop buy price|order=asc|limit=1')) or 0
local rawmat1cost = args.rawmat1 and getCost(mw.smw.ask('[[:+]][[Sold item::' .. args.rawmat1 .. ']]|?Shop buy price|sort=Shop buy price|order=asc|limit=1')) or 0
local rawmat2cost = args.rawmat2 and getCost(mw.smw.ask('[[:+]][[Sold item::' .. args.rawmat2 .. ']]|?Shop buy price|sort=Shop buy price|order=asc|limit=1')) or 0
local rawmat2cost = args.rawmat2 and getCost(mw.smw.ask('[[:+]][[Sold item::' .. args.rawmat2 .. ']]|?Shop buy price|sort=Shop buy price|order=asc|limit=1')) or 0
local rawmat3cost = args.rawmat3 and getCost(mw.smw.ask('[[:+]][[Sold item::' .. args.rawmat3 .. ']]|?Shop buy price|sort=Shop buy price|order=asc|limit=1')) or 0
local rawmat3cost = args.rawmat3 and getCost(mw.smw.ask('[[:+]][[Sold item::' .. args.rawmat3 .. ']]|?Shop buy price|sort=Shop buy price|order=asc|limit=1')) or 0


-- Calculate total cost and output cost
-- Calculate total cost
local totalCost = (rawmat1cost * (tonumber(args.rawmat1qty) or 1)) +
local totalCost = (rawmat1cost * (tonumber(args.rawmat1qty) or 1)) +
(rawmat2cost * (tonumber(args.rawmat2qty) or 1)) +
(rawmat2cost * (tonumber(args.rawmat2qty) or 1)) +
(rawmat3cost * (tonumber(args.rawmat3qty) or 1))
(rawmat3cost * (tonumber(args.rawmat3qty) or 1))
local output1cost = args.output1 and getCost(mw.smw.ask('[[:+]][[' .. args.output1 .. ']]|?Value|limit=1')) or 0

-- Calculate output cost total and profit
-- Calculate output cost total and profit
local output1costTotal = output1cost * (tonumber(args.output1qty) or 1)
local output1cost = args.output1 and mw.smw.ask('[[:+]][[' .. args.output1 .. ']]|?Value|limit=1')
local output1costTotal = output1cost[1]['Value'] * (tonumber(args.output1qty) or 1)
local profit = output1costTotal - totalCost
local profit = output1costTotal - totalCost


-- Generate the output table
-- Recipe Table Head
local out = {}
local out = {}
table.insert(out, '{| class="wikitable"')
table.insert(out, '{| class="wikitable"')
Line 35: Line 36:
table.insert(out, '|-')
table.insert(out, '|-')
table.insert(out, '! colspan="2" | Facility')
table.insert(out, '! colspan="2" | Facility')
table.insert(out, '! colspan="2" | ' .. (args.facility and '[[' .. args.facility .. ']]' or 'Unknown'))
table.insert(out, '| colspan="2" | ' .. (args.facility and '[[' .. args.facility .. ']]' or 'Unknown'))
table.insert(out, '|-')
table.insert(out, '|-')
table.insert(out, '! colspan="2" | Profession')
table.insert(out, '! colspan="2" | Profession')
Line 41: Line 42:
table.insert(out, '! XP')
table.insert(out, '! XP')
table.insert(out, '|-')
table.insert(out, '|-')
table.insert(out, '| colspan="2" | ' .. (args.profession and '[[' .. args.profession .. ']]' or 'Unknown'))
table.insert(out, '| colspan="2" style="text-align:center;" | ' .. (args.profession and '[[' .. args.profession .. ']]' or 'Unknown'))
table.insert(out, '| style="text-align: center;" | ' .. (args.level or 'Unknown'))
table.insert(out, '| style="text-align: center;" | ' .. (args.level or 'Unknown'))
table.insert(out, '| style="text-align: center;" | ' .. (args.exp or 'Unknown'))
table.insert(out, '| style="text-align: center;" | ' .. (args.exp or 'Unknown'))
table.insert(out, '|-')
table.insert(out, '|-')
-- Add raw materials
-- Headers
table.insert(out, '! colspan="2" | Raw Ingredient')
table.insert(out, '! colspan="2" | Raw Ingredient')
table.insert(out, '! Quantity')
table.insert(out, '! Quantity')
Line 50: Line 54:
table.insert(out, '|-')
table.insert(out, '|-')


-- Values
-- Add each raw material to the table
if args.rawmat1 then
if args.rawmat1 then
table.insert(out, '| [[File:' .. args.rawmat1 .. '.png|30px]]')
table.insert(out, '| [[File:' .. args.rawmat1 .. '.png|30px]]')
Line 75: Line 79:
-- Add total raw cost
-- Add total raw cost
table.insert(out, '! colspan="3" | Total Raw cost')
table.insert(out, '! colspan="3" | Total Raw cost')
table.insert(out, '| style="text-align: right;" | ' .. totalCost)
table.insert(out, '| style="text-align: right;" | ' .. currency(totalCost))
table.insert(out, '|-')
table.insert(out, '|-')
Line 87: Line 91:
-- Values
-- Values
if args.preparedmat1 then
if args.preparedmat1 then
table.insert(out, '| [[File:' .. args.preparedmat1 .. '.png|30px]] [[' .. args.preparedmat1 .. ']]')
table.insert(out, '| [[File:' .. args.preparedmat1 .. '.png|30px]]')
table.insert(out, '| [[' .. args.preparedmat1 .. ']]')
table.insert(out, '| style="text-align: right;" | ' .. (args.preparedmat1qty or 1))
table.insert(out, '| style="text-align: right;" | ' .. (args.preparedmat1qty or 1))
table.insert(out, '| style="text-align: right;" | [[File:' .. args.preparedmat1fac .. '.png|30px]] [[' .. args.preparedmat1fac .. ']]')
table.insert(out, '| style="text-align: right;" | [[File:' .. args.preparedmat1fac .. '.png|30px]] [[' .. args.preparedmat1fac .. ']]')
table.insert(out, '|-')
end
if args.preparedmat2 then
table.insert(out, '| [[File:' .. args.preparedmat2 .. '.png|30px]]')
table.insert(out, '| [[' .. args.preparedmat2 .. ']]')
table.insert(out, '| style="text-align: right;" | ' .. (args.preparedmat2qty or 1))
table.insert(out, '| style="text-align: right;" | [[File:' .. args.preparedmat2fac .. '.png|30px]] [[' .. args.preparedmat2fac .. ']]')
table.insert(out, '|-')
end
if args.preparedmat3 then
table.insert(out, '| [[File:' .. args.preparedmat3 .. '.png|30px]]')
table.insert(out, '| [[' .. args.preparedmat3 .. ']]')
table.insert(out, '| style="text-align: right;" | ' .. (args.preparedmat3qty or 1))
table.insert(out, '| style="text-align: right;" | [[File:' .. args.preparedmat3fac .. '.png|30px]] [[' .. args.preparedmat3fac .. ']]')
table.insert(out, '|-')
table.insert(out, '|-')
end
end


-- Add output data and profit
-- Add output data
-- Headers
table.insert(out, '! colspan="2" | Output')
table.insert(out, '! colspan="2" | Output')
table.insert(out, '! Quantity')
table.insert(out, '! Quantity')
table.insert(out, '! Value')
table.insert(out, '! Value')
table.insert(out, '|-')
table.insert(out, '|-')
-- Values
table.insert(out, '| [[File:' .. args.output1 .. '.png|30px]]')
table.insert(out, '| ' .. (args.output1 and '[[' .. args.output1 .. ']]' or 'Unknown'))
table.insert(out, '| ' .. (args.output1 and '[[' .. args.output1 .. ']]' or 'Unknown'))
table.insert(out, '| style="text-align: right;" | ' .. (args.output1qty or 1))
table.insert(out, '| style="text-align: right;" | ' .. (args.output1qty or 1))
table.insert(out, '| style="text-align: right;" | ' .. output1costTotal)
table.insert(out, '| style="text-align: right;" | ' .. currency(output1costTotal))
table.insert(out, '|-')
table.insert(out, '|-')
-- Add profit data
table.insert(out, '! colspan="3" | Profit')
table.insert(out, '! colspan="3" | Profit')
table.insert(out, '| style="text-align: right;" | ' .. profit)
table.insert(out, '| style="text-align: right;" | ' .. currency(profit))
table.insert(out, '|}')
table.insert(out, '|}')

-- Add debug information to the output as a simple paragraph
local debugMessage = 'Debug Info:<br>' ..
'rawmat1query: ' .. (rawmat1query or 'nil') .. '<br>' ..
'rawmat1cost: ' .. tostring(rawmat1cost) .. '<br>' ..
'rawmat2query: ' .. (rawmat2query or 'nil') .. '<br>' ..
'rawmat2cost: ' .. tostring(rawmat2cost) .. '<br>' ..
'rawmat3query: ' .. (rawmat3query or 'nil') .. '<br>' ..
'rawmat3cost: ' .. tostring(rawmat3cost) .. '<br>' ..
'totalCost: ' .. tostring(totalCost) .. '<br>' ..
'output1query: ' .. (output1query or 'nil') .. '<br>' ..
'output1cost: ' .. tostring(output1cost) .. '<br>' ..
'output1costTotal: ' .. tostring(output1costTotal) .. '<br>' ..
'profit: ' .. tostring(profit)

table.insert(out, debugMessage)


return table.concat(out, '\n')
return table.concat(out, '\n')