Aller au contenu

Module:Sandbox2/Rousseaulambertlp

Une page de Wikipédia, l'encyclopédie libre.

 Documentation[créer] [purger]
--
-- Created by IntelliJ IDEA.
-- User: afsslor
-- Date: 2/13/18
-- Time: 4:07 PM
-- To change this template use File | Settings | File Templates.
--

local p = {}
local getArgs = require('Module:Arguments').getArgs
local datePattern = "^(%d+)-(%d+)$"
local weatherTemplate = 'Modèle:Graphique_polygonal'
local wrapsTemplate = 'Utilisateur:Rousseaulambertlp/GraphBox'

function p.weathergraph( frame )
    local args = getArgs(frame, { wrappers = wrapsTemplate })

    local EHPage = assert(args.dataEH, 'Missing "EHdata" parameter')
    args.dataEH = nil

    local BAGPage = assert(args.dataBAG, 'Missing "BAGdata" parameter')
    args.dataBAG = nil

    local monthlyHigh_bag, monthlyLow_bag = {}, {}
    local highSum_bag, highCount_bag = {}, {}
    local lowSum_bag, lowCount_bag = {}, {}
    local avgHighSum_bag, avgHighCount_bag = {}, {}
    local avgLowSum_bag, avgLowCount_bag = {}, {}
    local DJC_bag = {}
    local monthlyHigh_EH, monthlyLow_EH = {}, {}
    local highSum_EH, highCount_EH = {}, {}
    local lowSum_EH, lowCount_EH = {}, {}
    local avgHighSum_EH, avgHighCount_EH = {}, {}
    local avgLowSum_EH, avgLowCount_EH = {}, {}
    local DJC_EH = {}

   for key, row in pairs(mw.ext.data.get(EHPage).data) do
        local date_EH, avgHighTemp_EH, avgLowTemp_EH, avgTemp_EH, extHighTemp_EH, extLowTemp_EH, precipTotalRain_EH, precipTotalSnow_EH, precipTotal_EH, snowGrndLastDay_EH, windDirMaxGust_EH, windSpeedMaxGust_EH = unpack(row)

        local year, month = date_EH:match(datePattern)
        month = tonumber(month)
        recordAvg(avgHighSum_EH, avgHighCount_EH, month, avgHighTemp_EH)
        recordAvg(avgLowSum_EH, avgLowCount_EH, month, avgLowTemp_EH)
    end

    for key, row in pairs(mw.ext.data.get(BAGPage).data) do
        local date_bag, avgHighTemp_bag, avgLowTemp_bag, avgTemp_bag, extHighTemp_bag, extLowTemp_bag, precipTotalRain_bag, precipTotalSnow_bag, precipTotal_bag, snowGrndLastDay_bag, windDirMaxGust_bag, windSpeedMaxGust_bag = unpack(row)
        
        local year, month = date_bag:match(datePattern)
        month = tonumber(month)
        recordAvg(avgHighSum_bag, avgHighCount_bag, month, avgHighTemp_bag)
        recordAvg(avgLowSum_bag, avgLowCount_bag, month, avgLowTemp_bag)
    end

    for j=1, 12 do DJC_bag[j] = (((avgHighSum_bag[j] / avgHighCount_bag[j]) + (avgLowSum_bag[j] / avgLowCount_bag[j])) / 2) - 6 end
    for j=1, 12 do DJC_EH[j] = (((avgHighSum_EH[j] / avgHighCount_EH[j]) + (avgLowSum_EH[j] / avgLowCount_EH[j])) / 2) - 6 end
  
    for k=1, 12 do 
    	if DJC_bag[k] < 0 then DJC_bag[k] = 0 end
    	if DJC_EH[k] < 0 then DJC_EH[k] = 0 end
    end
  
    for i=1, 10 do args['S01V0' .. i] = string.format("%.1f", DJC_bag[i]) end
    for i=10, 12 do args['S01V' .. i] = string.format("%.1f", DJC_bag[i]) end
    for i=1, 10 do args['S02V0' .. i] = string.format("%.1f", DJC_EH[i]) end
    for i=10, 12 do args['S02V' .. i] = string.format("%.1f", DJC_EH[i]) end

    return frame:expandTemplate{ title = weatherTemplate, args = args }
end

function recordAvg(sumTbl, countTbl, month, value)
    if value ~= nil then
        sumTbl[month] = (sumTbl[month] or 0) + value
        countTbl[month] = (countTbl[month] or 0) + 1
    end
end

return p