Modul:Adresse: Unterschied zwischen den Versionen

Aus FürthWiki

(Erstversion)
 
(fix)
Zeile 64: Zeile 64:
-- Seite mit passender StraßeHnr suchen
-- Seite mit passender StraßeHnr suchen
local ask_result = mw.smw.ask("[[:+]][[Kategorie:Gebäude]][[StraßeHnr::" .. attr["StraßeHnr"] .. "]]|?#-|limit=1")
local ask_result = mw.smw.ask("[[:+]][[Kategorie:Gebäude]][[StraßeHnr::" .. attr["StraßeHnr"] .. "]]|?#-|limit=1")
if #ask_result > 0 then
if ask_result ~= nil and #ask_result > 0 then
attr["VonObjekt"] = ask_result[1][1]
attr["VonObjekt"] = ask_result[1][1]
end
end
Zeile 93: Zeile 93:


-- mw.log("t = " .. t)
-- mw.log("t = " .. t)
t = frame:preprocess(t)
return t
return t
end
end

Version vom 6. November 2025, 14:21 Uhr

Dieses Modul setzt die Subobjekte von Adressen.

Unterseiten

Siehe auch


local p = {}

local com = require("Modul:Common")
local dev = require("Modul:Development")
local str = require("Modul:String")
local geo = require("Modul:Geo")
local wik = require("Modul:Wiki")

function p.Adresse(frame)
--	mw.log("Adresse(frame)")
--	mw.logObject(frame)
	-- Konsolenzeile zum Debuggen:
	-- =p.Adresse{pargs={["Adressart"]="Wohnung", ["Straße"]="Schwabacher Straße", ["Hausnummer"]="12",["AdresseVon"]="b", ["AdresseBis"]="c",  ["Kommentar"]="f"}}
	-- =p.Adresse{pargs={["Adressart"]="Wohnung", ["Straße"]="Fichtenstraße", ["Hausnummer"]="44",["AdresseVon"]="b", ["AdresseBis"]="c",  ["Kommentar"]="f"}}
	local t = ""
	local fail = false
	local _, pargs = dev.GetFrameAndParentArgs(frame)
	
	-- nur benötigte Attribut-Werte aus Formular (ParentArgs) herausholen
	local attr = {}
	local attr_empty = true
	for _, a in ipairs{"Adressart", "AdresseVon", "AdresseBis", "Straße", "Hausnummer", "Kommentar"} do
		local v = pargs[a] or ""
		if v ~= "" then
			attr[a] = v
			attr_empty = false
		end
	end

	-- subobject-Name
	local subobject = {}
	table.insert(subobject, attr["Adressart"])
	table.insert(subobject, attr["Straße"])
	table.insert(subobject, attr["Hausnummer"])
	subobject = table.concat(subobject, " ")
	if subobject == "" then														-- subobject-Name fehlerhaft?
		fail = true
	else

		-- Straße/Hausnummer auswerten
		if attr["Straße"] ~= nil then
			if attr["Hausnummer"] ~= nil then
				attr["StraßeHnr"] = attr["Straße"] .. " " .. attr["Hausnummer"]
			else
				attr["StraßeHnr"] = attr["Straße"]
			end
		elseif attr["Hausnummer"] ~= nil then
			fail = true															-- Fehler Hausnummer ohne Straße
		end

		-- Postleitzahl ermitteln
		if attr["Straße"] ~= nil then
			local PLZ = geo.getPLZ(attr["Straße"], attr["Hausnummer"])
			if PLZ ~= "" then
				attr["PLZ"] = PLZ
			end
		end
		
		-- VonObjekt erstellen
		if attr["StraßeHnr"] ~= nil then
			if wik.pageExists(attr["StraßeHnr"]) then
				attr["VonObjekt"] = attr["StraßeHnr"]
			else
				-- Seite mit passender StraßeHnr suchen
				local ask_result = mw.smw.ask("[[:+]][[Kategorie:Gebäude]][[StraßeHnr::" .. attr["StraßeHnr"] .. "]]|?#-|limit=1")
				if ask_result ~= nil and #ask_result > 0 then
					attr["VonObjekt"] = ask_result[1][1]
				end
			end
		end
	
		-- subobject zusammenbauen
		if not attr_empty then
			t = t .. "{{#subobject:" .. subobject
			for a, v in pairs(attr) do
				t = t .. "|" .. a .. "=" .. v
			end
			t = t .. "}}"
		end
	
		-- Plausibilitätsprüfung von/bis
		if attr["AdresseVon"] ~= nil and attr["AdresseBis"] ~= nil and
		   p.smwDate2CompareIndex(attr["AdresseVon"], "von") > p.smwDate2CompareIndex(attr["AdresseBis"], "bis") then
		   	fail = true
		end

	end																			-- Ende if subobject-Name fehlerhaft?

	-- Kategorie:Fehlerhafte Adresse
	if fail then
		t = t .. "[[Kategorie:Fehlerhafte Adresse]]"
	end

--	mw.log("t = " .. t)
	t = frame:preprocess(t)
	return t
end

function p.smwDate2CompareIndex(date, vonbis)
--	mw.log("smwDate2CompareIndex(" .. date .. ")")
	-- Datum in Index wandeln
	-- Bsp.: 23 Apr. 1989 => 19890423
	-- Konsolenzeile zum Debuggen:
	-- =p.smwDate2CompareIndex("2000","von")
	-- =p.smwDate2CompareIndex("2000","bis")
	-- =p.smwDate2CompareIndex("Februar 2000","von")
	-- =p.smwDate2CompareIndex("Februar 2000","bis")
	-- =p.smwDate2CompareIndex("3. Februar 2000","von")
	-- =p.smwDate2CompareIndex("3. Februar 2000","bis")
	local index = ""
	local date=str.split2(date, " ")
	if #date == 1 then																		-- nur Jahr vorhanden
		index = tostring(date[1])
		if vonbis == "von" then
			index = index .. "0101"
		else
			index = index .. "1231"
		end
	elseif #date == 2 then																	-- nur Monat + Jahr vorhanden
		index = tostring(date[2]) .. string.format("%02d", com.getMonthnr(date[1]))
		if vonbis == "von" then
			index = index .. "01"
		else
			index = index .. "31"
		end
	elseif #date == 3 then																	-- komplettes Datum vorhanden
		index = tostring(date[3]) .. string.format("%02d",com.getMonthnr(date[2])) .. string.format("%02d", tonumber(string.match(date[1], "%d*")))
	end
	index = tonumber(index) or 0
--	mw.log("index = " .. tostring(index))
	return index
end

return p