Keine Bearbeitungszusammenfassung |
Keine Bearbeitungszusammenfassung |
||
(6 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) | ||
Zeile 7: | Zeile 18: | ||
local group = nil | local group = nil | ||
local groupContent = "" -- Zwischenspeicher für Zutaten in der aktuellen Gruppe | local groupContent = "" -- Zwischenspeicher für Zutaten in der aktuellen Gruppe | ||
local hasIngredients = false | local hasIngredients = false -- Prüfen, ob Zutaten vorhanden sind | ||
for i = 1, 100 do | 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 = | local quantity = frame.args["ingredient" .. i .. "quantity"] | ||
local unit = frame.args["ingredient" .. i .. "unit"] | local unit = frame.args["ingredient" .. i .. "unit"] | ||
-- | -- Überprüfen, ob der Name der Zutat definiert ist und kein Platzhalter ist | ||
if name then | if name and name ~= "" and not name:find("{{{") then | ||
hasIngredients = true | 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 | -- Wenn eine neue Gruppe anfängt und `groupContent` gefüllt ist, wird die vorherige Gruppe zum Ergebnis hinzugefügt | ||
if newGroup and newGroup ~= group then | if newGroup and newGroup ~= "" and newGroup ~= group then | ||
if groupContent ~= "" then | if groupContent ~= "" then | ||
result = result .. "\n=== " .. group .. " ===\n" .. groupContent | result = result .. "\n=== " .. group .. " ===\n" .. groupContent | ||
end | end | ||
group = newGroup | group = newGroup | ||
groupContent = "" | groupContent = "" | ||
Zeile 30: | Zeile 40: | ||
-- Berechne die Menge basierend auf der Personenanzahl und füge sie zum `groupContent` hinzu | -- 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 | ||
Zeile 39: | Zeile 54: | ||
-- Letzte Gruppe hinzufügen, falls sie nicht leer ist | -- Letzte Gruppe hinzufügen, falls sie nicht leer ist | ||
if groupContent ~= "" then | if groupContent ~= "" then | ||
result = result .. "\n=== " .. group .. " ===\n" .. groupContent | result = result .. (group and "\n=== " .. group .. " ===\n" or "") .. groupContent | ||
end | end | ||
Zeile 46: | Zeile 61: | ||
return "== Zutaten für " .. persons .. " Person(en) ==\n" .. result | return "== Zutaten für " .. persons .. " Person(en) ==\n" .. result | ||
else | else | ||
return "" | return "" -- Gibt eine leere Zeichenkette zurück, wenn keine Zutaten vorhanden sind | ||
end | 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