Zuletzt bearbeitet vor 3 Monaten
von Xineohp1506

Modul:RezeptBerechnung: Unterschied zwischen den Versionen

Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
Zeile 1: Zeile 1:
local p = {}
local p = {}


-- Funktion zur Berechnung der angepassten Menge
function p.calculateIngredients(frame)
function p.calculateAmount(amount, portions, newPortions)
     local persons = tonumber(frame.args["persons"]) or 1
     local adjustedAmount = (tonumber(amount) or 0) * (newPortions / portions)
     local result = ""
     return string.format("%.2f", adjustedAmount) -- Formatiert auf 2 Dezimalstellen
      
end
     local group = nil
 
     local groupContent = "" -- Zwischenspeicher für Zutaten in der aktuellen Gruppe
-- Funktion zur Anzeige der Zutatenliste
     local hasIngredients = false -- Prüfen, ob Zutaten vorhanden sind
function p.renderIngredients(frame)
     local args = frame.args
     local portions = tonumber(args["portions"]) or 1
     local newPortions = tonumber(args["newPortions"]) or portions
 
     local ingredients = {}


     for i = 1, 100 do
     for i = 1, 100 do
         local group = args["group" .. i]
         local newGroup = frame.args["ingredient" .. i .. "group"]
         local ingredientName = args["ingredient" .. i .. "name"]
         local name = frame.args["ingredient" .. i .. "name"]
         local ingredientAmount = args["ingredient" .. i .. "amount"]
         local quantity = tonumber(frame.args["ingredient" .. i .. "quantity"])
         local ingredientUnit = args["ingredient" .. i .. "unit"]
         local unit = frame.args["ingredient" .. i .. "unit"]


         if ingredientName then
         if name then
             -- Optional: Gruppentitel nur anzeigen, wenn er nicht leer ist
            hasIngredients = true -- Es gibt mindestens eine Zutat
             if group ~= "" and group ~= nil then
           
                 if not ingredients[group] then
             -- Wenn eine neue Gruppe anfängt und `groupContent` gefüllt ist, wird die vorherige Gruppe zum Ergebnis hinzugefügt
                     ingredients[group] = {}
             if newGroup and newGroup ~= "" and newGroup ~= group then
                 if groupContent ~= "" then
                     result = result .. "\n=== " .. group .. " ===\n" .. groupContent
                 end
                 end
                 table.insert(ingredients[group], p.getIngredientText(ingredientName, ingredientAmount, ingredientUnit, portions, newPortions))
                 group = newGroup
                groupContent = ""
            end
 
            -- Berechne die Menge basierend auf der Personenanzahl und füge sie zum `groupContent` hinzu
            local newQuantity = quantity and quantity * persons or ""
            local ingredientText = "* [[Has Ingredient::" .. name .. "]]: " .. (newQuantity ~= "" and (newQuantity .. " " .. (unit or "")) or "") .. "\n"
           
            if newGroup and newGroup ~= "" then
                groupContent = groupContent .. ingredientText
             else
             else
                 table.insert(ingredients, p.getIngredientText(ingredientName, ingredientAmount, ingredientUnit, portions, newPortions))
                 result = result .. ingredientText -- Falls keine Gruppe definiert ist, direkt zur Hauptliste hinzufügen
             end
             end
         end
         end
     end
     end


     -- Aufbau der Ausgabe
     -- Letzte Gruppe hinzufügen, falls sie nicht leer ist
    local output = {}
     if groupContent ~= "" then
    table.insert(output, "== Angepasste Zutaten für " .. newPortions .. " Portion(en) ==")
        result = result .. (group and "\n=== " .. group .. " ===\n" or "") .. groupContent
     for group, items in pairs(ingredients) do
        if type(group) == "string" then
            table.insert(output, "=== " .. group .. " ===")
            for _, item in ipairs(items) do
                table.insert(output, "* " .. item)
            end
        else
            table.insert(output, "* " .. items) -- Für Zutaten ohne Gruppenname
        end
     end
     end


     return table.concat(output, "\n")
     -- Füge die Hauptüberschrift nur hinzu, wenn Zutaten vorhanden sind
end
     if hasIngredients then
 
        return "== Zutaten für " .. persons .. " Person(en) ==\n" .. result
-- Hilfsfunktion zur Formatierung der Zutat mit semantischem Attribut
     else
function p.getIngredientText(name, amount, unit, portions, newPortions)
        return "" -- Gibt eine leere Zeichenkette zurück, wenn keine Zutaten vorhanden sind
     local adjustedAmount = p.calculateAmount(amount, portions, newPortions)
    end
    local ingredientText = adjustedAmount .. " " .. (unit or "") .. " " .. name
     return "[[Has Ingredient::" .. name .. "|" .. ingredientText .. "]]"
end
end


return p
return p

Version vom 14. November 2024, 02:20 Uhr

Die Dokumentation für dieses Modul kann unter Modul:RezeptBerechnung/Doku erstellt werden

local p = {}

function p.calculateIngredients(frame)
    local persons = tonumber(frame.args["persons"]) or 1
    local result = ""
    
    local group = nil
    local groupContent = "" -- Zwischenspeicher für Zutaten in der aktuellen Gruppe
    local hasIngredients = false -- Prüfen, ob Zutaten vorhanden sind

    for i = 1, 100 do
        local newGroup = frame.args["ingredient" .. i .. "group"]
        local name = frame.args["ingredient" .. i .. "name"]
        local quantity = tonumber(frame.args["ingredient" .. i .. "quantity"])
        local unit = frame.args["ingredient" .. i .. "unit"]

        if name then  
            hasIngredients = true -- Es gibt mindestens eine Zutat
            
            -- Wenn eine neue Gruppe anfängt und `groupContent` gefüllt ist, wird die vorherige Gruppe zum Ergebnis hinzugefügt
            if newGroup and newGroup ~= "" and newGroup ~= group then
                if groupContent ~= "" then
                    result = result .. "\n=== " .. group .. " ===\n" .. groupContent
                end
                group = newGroup
                groupContent = ""
            end

            -- Berechne die Menge basierend auf der Personenanzahl und füge sie zum `groupContent` hinzu
            local newQuantity = quantity and quantity * persons or ""
            local ingredientText = "* [[Has Ingredient::" .. name .. "]]: " .. (newQuantity ~= "" and (newQuantity .. " " .. (unit or "")) or "") .. "\n"
            
            if newGroup and newGroup ~= "" then
                groupContent = groupContent .. ingredientText
            else
                result = result .. ingredientText -- Falls keine Gruppe definiert ist, direkt zur Hauptliste hinzufügen
            end
        end
    end

    -- Letzte Gruppe hinzufügen, falls sie nicht leer ist
    if groupContent ~= "" then
        result = result .. (group and "\n=== " .. group .. " ===\n" or "") .. groupContent
    end

    -- Füge die Hauptüberschrift nur hinzu, wenn Zutaten vorhanden sind
    if hasIngredients then
        return "== Zutaten für " .. persons .. " Person(en) ==\n" .. result
    else
        return "" -- Gibt eine leere Zeichenkette zurück, wenn keine Zutaten vorhanden sind
    end
end

return p