From 8941dc7e09ce22f6da42e965f21b41259681715b Mon Sep 17 00:00:00 2001 From: Matthias Hochmeister Date: Fri, 13 Mar 2026 21:35:12 +0100 Subject: [PATCH] update --- sync/src/scraper.ts | 47 +++++++++++++++++++++++---------------------- 1 file changed, 24 insertions(+), 23 deletions(-) diff --git a/sync/src/scraper.ts b/sync/src/scraper.ts index fb8507d..f387328 100644 --- a/sync/src/scraper.ts +++ b/sync/src/scraper.ts @@ -92,35 +92,34 @@ export async function scrapeAll(username: string, password: string): Promise<{ member.wohnort = profileFields.wohnort; member.plz = profileFields.plz; - // Extract mitgliedschaft params from the current URL for constructing sub-section URLs. - // PersonenForm.aspx is in the personen module; sub-sections are in mitgliedschaften module. - // The links to Beförderungen/Untersuchungen/Fahrgenehmigungen live in the navigation - // frame (not the content mainFrame), so we construct the URLs directly. + // Extract mitgliedschaft + person params from the current URL for constructing sub-section URLs. + // PersonenForm.aspx is in the personen module; sub-sections are each in their own module. + // URL pattern: ?search=1&searchid_mitgliedschaften=X&id_personen=Y&id_mitgliedschaften=X&searchid_personen=Y&searchid_maskmode= const currentUrl = mainFrame.url(); const urlObj = new URL(currentUrl); const idMitgliedschaft = urlObj.searchParams.get('id_mitgliedschaften'); - const idInstanzen = urlObj.searchParams.get('id_instanzen') ?? ID_INSTANZEN; - const idFeuerwehren = urlObj.searchParams.get('id_feuerwehren') ?? ID_FEUERWEHREN; + const idPersonen = urlObj.searchParams.get('id_personen'); + const idInstanzen = urlObj.searchParams.get('id_instanzen') ?? ID_INSTANZEN; // Ausbildungen const quals = await scrapeAusbildungenFromDetailPage(mainFrame, member); ausbildungen.push(...quals); // Beförderungen - const befos = idMitgliedschaft - ? await scrapeMemberBefoerderungen(mainFrame, member.standesbuchNr, idMitgliedschaft, idInstanzen, idFeuerwehren) + const befos = (idMitgliedschaft && idPersonen) + ? await scrapeMemberBefoerderungen(mainFrame, member.standesbuchNr, idMitgliedschaft, idPersonen) : []; befoerderungen.push(...befos); // Untersuchungen - const unters = idMitgliedschaft - ? await scrapeMemberUntersuchungen(mainFrame, member.standesbuchNr, idMitgliedschaft, idInstanzen, idFeuerwehren) + const unters = (idMitgliedschaft && idPersonen) + ? await scrapeMemberUntersuchungen(mainFrame, member.standesbuchNr, idMitgliedschaft, idPersonen) : []; untersuchungen.push(...unters); // Fahrgenehmigungen - const fahrg = idMitgliedschaft - ? await scrapeMemberFahrgenehmigungen(mainFrame, member.standesbuchNr, idMitgliedschaft, idInstanzen, idFeuerwehren) + const fahrg = (idMitgliedschaft && idPersonen) + ? await scrapeMemberFahrgenehmigungen(mainFrame, member.standesbuchNr, idMitgliedschaft, idPersonen, idInstanzen) : []; fahrgenehmigungen.push(...fahrg); @@ -677,11 +676,11 @@ async function scrapeMemberBefoerderungen( frame: Frame, standesbuchNr: string, idMitgliedschaft: string, - idInstanzen: string, - idFeuerwehren: string, + idPersonen: string, ): Promise { - const url = `${BASE_URL}/fdisk/module/mgvw/mitgliedschaften/befoerderungenList.aspx` - + `?id_mitgliedschaften=${idMitgliedschaft}&id_instanzen=${idInstanzen}&id_feuerwehren=${idFeuerwehren}`; + const url = `${BASE_URL}/fdisk/module/mgvw/befoerderungen/befoerderungenList.aspx` + + `?search=1&searchid_mitgliedschaften=${idMitgliedschaft}&id_personen=${idPersonen}` + + `&id_mitgliedschaften=${idMitgliedschaft}&searchid_personen=${idPersonen}&searchid_maskmode=`; const rows = await navigateAndGetTableRows(frame, url); if (!rows) return []; @@ -706,11 +705,11 @@ async function scrapeMemberUntersuchungen( frame: Frame, standesbuchNr: string, idMitgliedschaft: string, - idInstanzen: string, - idFeuerwehren: string, + idPersonen: string, ): Promise { - const url = `${BASE_URL}/fdisk/module/mgvw/mitgliedschaften/UntersuchungenList.aspx` - + `?id_mitgliedschaften=${idMitgliedschaft}&id_instanzen=${idInstanzen}&id_feuerwehren=${idFeuerwehren}`; + const url = `${BASE_URL}/fdisk/module/mgvw/untersuchungen/UntersuchungenList.aspx` + + `?search=1&searchid_mitgliedschaften=${idMitgliedschaft}&id_personen=${idPersonen}` + + `&id_mitgliedschaften=${idMitgliedschaft}&searchid_personen=${idPersonen}&searchid_maskmode=`; const rows = await navigateAndGetTableRows(frame, url); if (!rows) return []; @@ -743,11 +742,13 @@ async function scrapeMemberFahrgenehmigungen( frame: Frame, standesbuchNr: string, idMitgliedschaft: string, + idPersonen: string, idInstanzen: string, - idFeuerwehren: string, ): Promise { - const url = `${BASE_URL}/fdisk/module/mgvw/mitgliedschaften/Ges_fahrgenehmigungenListEdit.aspx` - + `?id_mitgliedschaften=${idMitgliedschaft}&id_instanzen=${idInstanzen}&id_feuerwehren=${idFeuerwehren}`; + const url = `${BASE_URL}/fdisk/module/mgvw/ges_fahrgenehmigungen/Ges_fahrgenehmigungenListEdit.aspx` + + `?search=1&searchid_mitgliedschaften=${idMitgliedschaft}&id_personen=${idPersonen}` + + `&id_mitgliedschaften=${idMitgliedschaft}&searchid_personen=${idPersonen}&searchid_maskmode=` + + `&searchid_instanzen=${idInstanzen}`; const rows = await navigateAndGetTableRows(frame, url); if (!rows) return [];