Zuletzt bearbeitet vor 3 Monaten
von Xineohp1506

Modul:RezeptBerechnung: Unterschied zwischen den Versionen

Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
 
(14 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
local p = {}
local p = {}
-- Funktion zur Umrechnung von Brüchen in Dezimalzahlen
function p.convertFractionToDecimal(value)
    if value:find("/") then
        local numerator, denominator = value:match("(%d+)%s*/%s*(%d+)")
        if numerator and denominator then
            return tonumber(numerator) / tonumber(denominator)
        end
    end
    return tonumber(value) -- Falls kein Bruch, versuche, die Zahl direkt zu konvertieren
end


function p.calculateIngredients(frame)
function p.calculateIngredients(frame)
     local persons = tonumber(frame.args["persons"]) or 1
     local persons = tonumber(frame.args["persons"]) or 1
     local result = "== Angepasste Zutaten für " .. persons .. " Person(en) ==\n"
     local result = ""
      
      
     local group = nil
     local group = nil
     for i = 1, math.huge do
    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 newGroup = frame.args["ingredient" .. i .. "group"]
         local name = frame.args["ingredient" .. i .. "name"]
         local name = frame.args["ingredient" .. i .. "name"]
         local quantity = tonumber(frame.args["ingredient" .. i .. "quantity"])
         local quantity = frame.args["ingredient" .. i .. "quantity"]
         local unit = frame.args["ingredient" .. i .. "unit"]
         local unit = frame.args["ingredient" .. i .. "unit"]
       
        -- Wenn keine weiteren Zutaten existieren, Schleife beenden
        if not name then break end 


         -- Wenn eine neue Gruppe definiert ist, füge den Gruppennamen hinzu
         -- Überprüfen, ob der Name der Zutat definiert ist und kein Platzhalter ist
        if newGroup and newGroup ~= group then
        if name and name ~= "" and not name:find("{{{") then
            group = newGroup
            hasIngredients = true -- Es gibt mindestens eine Zutat
            result = result .. "\n=== " .. group .. " ===\n"
           
            -- 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 decimalQuantity = quantity and p.convertFractionToDecimal(quantity)
            local newQuantity = decimalQuantity and (decimalQuantity * 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
    end


        -- Berechne die Menge basierend auf der Personenanzahl
    -- Letzte Gruppe hinzufügen, falls sie nicht leer ist
        if quantity and unit then
    if groupContent ~= "" then
            local newQuantity = quantity * persons
        result = result .. (group and "\n=== " .. group .. " ===\n" or "") .. groupContent
            result = result .. "* " .. name .. ": " .. newQuantity .. " " .. unit .. "\n"
        end
     end
     end


     return result
     -- 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
end


return p
return p

Aktuelle Version vom 17. November 2024, 19:43 Uhr

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

local p = {}

-- Funktion zur Umrechnung von Brüchen in Dezimalzahlen
function p.convertFractionToDecimal(value)
    if value:find("/") then
        local numerator, denominator = value:match("(%d+)%s*/%s*(%d+)")
        if numerator and denominator then
            return tonumber(numerator) / tonumber(denominator)
        end
    end
    return tonumber(value) -- Falls kein Bruch, versuche, die Zahl direkt zu konvertieren
end

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 = frame.args["ingredient" .. i .. "quantity"]
        local unit = frame.args["ingredient" .. i .. "unit"]

        -- Überprüfen, ob der Name der Zutat definiert ist und kein Platzhalter ist
        if name and name ~= "" and not name:find("{{{") 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 decimalQuantity = quantity and p.convertFractionToDecimal(quantity)
            local newQuantity = decimalQuantity and (decimalQuantity * 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