From c055091dc7adcba62ca9646e3555bf20119bb5fb Mon Sep 17 00:00:00 2001 From: Erik Date: Wed, 12 Aug 2026 15:06:45 +0200 Subject: [PATCH] =?UTF-8?q?PDF=20Export=20Design=20an=20neues=20Design=20a?= =?UTF-8?q?ngepasst=20und=20PDF=20gr=C3=B6=C3=9Fe=20verringert?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .DS_Store | Bin 10244 -> 6148 bytes node_modules/.DS_Store | Bin 18436 -> 18436 bytes node_modules/math-intrinsics/.DS_Store | Bin 6148 -> 6148 bytes node_modules/object-inspect/.DS_Store | Bin 6148 -> 6148 bytes node_modules/qs/.DS_Store | Bin 6148 -> 6148 bytes node_modules/side-channel-list/.DS_Store | Bin 6148 -> 6148 bytes node_modules/side-channel-map/.DS_Store | Bin 6148 -> 6148 bytes node_modules/side-channel-weakmap/.DS_Store | Bin 6148 -> 6148 bytes node_modules/side-channel/.DS_Store | Bin 6148 -> 6148 bytes public/main.v2.js | 128 ++++++++++++++------ sessions/.DS_Store | Bin 10244 -> 10244 bytes sessions/ELT/KW_33___2026.csv | 8 +- 12 files changed, 93 insertions(+), 43 deletions(-) diff --git a/.DS_Store b/.DS_Store index 4284e7a6aab3f0733dcde27f70198cc40bd4ffaf..b51b8ab1cebb60131cde2f40866483f80747ee3d 100644 GIT binary patch delta 469 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 O@@9uWK`z^*_kIH& zS(qWL_Mq^?NSbKOOy+{Ypg$}N@fVmzMH9b7adtXIx4Dp*Okxc2zIWTc`=|sKA7=A*f!Rd<+u$>~arJz%0+SxrOhgN8nf&-@FyVpoB?#veEwGUP z~BiTY0`9|O6Z~~1H3P@Lyy^u{_Oiz zPPl2-!!g_Xn}WmmF^B9yo3y=K;I5mk-g`+R-MAc3oxUpfvJ;bL(Z^*3zDB?U_=z*|C8 zHG)siB-(kgMAGv`@dj{P+mZJ>*%RKf7AD1ytY`4b($B15bEy?hm1ZIaz;tOpy09qQ zV7t_m6bo$~sNDUFjE>o)qDR5_|!pE)n^;? z%kO}4EoTTlbd%^f3VnP+<^g>Vh0suuQnOg2-GdZ7iJbFFC%(DIBL#=h7g3oZ2=5Ug zu!pE>r#1K`<4#%CUSa6oQDAmRa|ZBLSAu4<)1;YR-T=$ac6)p?RUZ=iD4EA;;1k+A zfcZe}-eDA-REWB?*QSaRR8;PQjM^vg&AW-&aMbc^$H5}RYTfv+GpvWOP)qOMI-&*Y z>pW=g4JFTVod}oeh^kJamJ}JpX3F)zrm)8w7m@>lq&1^Jy8V#&@=$Q?^a`j+CtsI!%n42yUI`SQ%qH1yl sQx03>X^@7=ub5O|OcCZ7HGVOEm@zCs15z1^8A^~1fXHv2#+)Yt0GC!C`2YX_ delta 122 zcmZoMXffE}!=$r;?^6CPp%ab_3=HfHdJO3dnG7Wi84RTiNxAtcE=f80NkAD6h^omI sOgU^D7(f~(zhY8>F-4eT)Jm6JfEmLAG$56sn4tvO0EqnNY0P;d08L*fu>b%7 diff --git a/node_modules/object-inspect/.DS_Store b/node_modules/object-inspect/.DS_Store index b90bf749193594d24f93994a9d50cb021cfa9690..941206381d3972919dd19d20e51358c9148c5000 100644 GIT binary patch delta 149 zcmZoMXffE}!=y8F2Y;rc*a=4l1_pKpJ%)6KOokGM42DvMq}==zm!zEhB%lljMAhU9 zrWBp(6G$3T87deO8FCp47;+d=ku^Y6P3B;ZP%Hfb*T4caJC&iBp#)heM1FG{bDanP DrI08A delta 149 zcmZoMXffE}!=$s%>QeqKp%ab_3=HfHdJO3dnG7Wi84RTiNxAtcE=f80NkAD6h^omI zOes3Ig^@I*GE^`mGUPH8Fyt_#B5Q!Cn#{o*q4q@su7L$;b}BQ8l@O zDMIa}16%_OLkduNF+&NmQi%NIZ%lqFMnQ0;%nUg|r6^`XWG81Z2e3U&04bcjk68-J K+DXk3@Je6#SA6LN+I%-zcKl#>{|#|%FK`hRElCIM0Ropa{yb)Dv-j-`SQ%qH1yl dQ-s>}mv9X%K&7b+#SA6LN+I%_zcKNN0suJO8)N_g delta 100 zcmZoMXffE}!=$rq`GfphLMI#<7#P?Y^cd0^G8sx3G8jr3l5+D?T#|C~lYlZD5LJ^a em?G4~-rt95U;!#kWhiDSK~@Tp-~5eiWTg=K&EJ^#L;*_u8NL7j delta 100 zcmZoMXffE}!=y92`(pkrp%ab_3=HfHdJO3dnG7Wi84RTiNxAtcE=f80NkAD6h^omI eOc83K`!2vVumF{&G88kEAS;E)Z~n%_Ckg;Jv>)&Q diff --git a/node_modules/side-channel-weakmap/.DS_Store b/node_modules/side-channel-weakmap/.DS_Store index 0a9be26522a60e21b043eea3c268265c98c791db..138a8bf3cf6a350fecfef76cb1b260d8c0b65fb5 100644 GIT binary patch delta 100 zcmZoMXffE}!=$r-S1{92?1Uo&0|PsQ9z!}qCPN8B216-BQf_{VOHxjL5>SQ%qH1yl cQ-qqeB3uItP-!YdF+&NmQi%NKZ%llm0M61FCIA2c delta 100 zcmZoMXffE}!=y8};9~wQp%ab_3=HfHdJO3dnG7Wi84RTiNxAtcE=f80NkAD6h^omI eOc83Q_g#Q#U;!#kWhiDSK~@Tp-~5eSQ%qH1yl cQ-s=f3%CXrpwd)^VuliAr4aee-Logo` : `
⚡
`; cover.innerHTML = ` ${logoHtml} -

Projektübersicht ${DEPARTMENTS[currentDepartment].label}

-
${esc(w.label)}
- ${w.date ? `
Datum: ${esc(formatWeekDate(w.date))}
` : ''} -
Erstellt am ${new Date().toLocaleDateString('de-DE')}
+

Projektübersicht ${DEPARTMENTS[currentDepartment].label}

+
${esc(w.label)}
+ ${w.date ? `
Datum: ${esc(formatWeekDate(w.date))}
` : ''} +
Erstellt am ${new Date().toLocaleDateString('de-DE')}
`; container.appendChild(cover); @@ -2313,11 +2313,14 @@ async function exportPDF(){ const landscapePageW = pageHeightPx - marginPx * 2; const landscapePageH = pageWidthPx - marginPx * 2; + // JPEG quality (0.1 - 1.0) - lower = smaller file + const JPEG_QUALITY = 1; + async function addImageToLandscapePage(canvas){ const imgW = landscapePageW; const imgH = (canvas.height * imgW) / canvas.width; pdf.addPage([pageHeightPx, pageWidthPx], 'landscape'); - pdf.addImage(canvas.toDataURL('image/png'), 'PNG', marginPx, marginPx, imgW, imgH); + pdf.addImage(canvas.toDataURL('image/jpeg', JPEG_QUALITY), 'JPEG', marginPx, marginPx, imgW, imgH); } async function drawBlockOnLandscapePage(blockHTML){ @@ -2328,7 +2331,7 @@ async function exportPDF(){ wrapper.style.background = '#fff'; wrapper.innerHTML = blockHTML; container.appendChild(wrapper); - const canvas = await html2canvas(wrapper, { scale: 2, useCORS: true, backgroundColor: '#ffffff', width: 1123 }); + const canvas = await html2canvas(wrapper, { scale: 1.5, useCORS: true, backgroundColor: '#ffffff', width: 1123 }); const imgH = (canvas.height * landscapePageW) / canvas.width; wrapper.remove(); return { canvas, imgH }; @@ -2336,12 +2339,12 @@ async function exportPDF(){ try { // Deckblatt (Hochkant) zeichnen - const coverCanvas = await html2canvas(cover, { scale: 2, useCORS: true, backgroundColor: '#ffffff', width: 595, height: 842 }); + const coverCanvas = await html2canvas(cover, { scale: 1.5, useCORS: true, backgroundColor: '#ffffff', width: 595, height: 842 }); if(pdf.internal.getNumberOfPages() > 0) pdf.addPage(); const coverW = pageWidthPx - marginPx * 2; const coverH = (coverCanvas.height * coverW) / coverCanvas.width; const coverX = marginPx + (coverW - (coverCanvas.width * coverW / coverCanvas.width)) / 2; - pdf.addImage(coverCanvas.toDataURL('image/png'), 'PNG', marginPx, marginPx + ((pageHeightPx - marginPx * 2 - coverH) / 2), coverW, coverH); + pdf.addImage(coverCanvas.toDataURL('image/jpeg', JPEG_QUALITY), 'JPEG', marginPx, marginPx + ((pageHeightPx - marginPx * 2 - coverH) / 2), coverW, coverH); const headerRows = buildPdfTableHeaderRows(allPeople); @@ -2356,7 +2359,7 @@ async function exportPDF(){ // Hilfsfunktion: misst Höhe einer Tabelle mit gegebenen Zeilen async function measureBlockWithRows(titleRow, bodyRows){ const wrapper = renderSinglePdfBlock(container, headerRows, titleRow, bodyRows); - const canvas = await html2canvas(wrapper, { scale: 2, useCORS: true, backgroundColor: '#ffffff', width: 1123 }); + const canvas = await html2canvas(wrapper, { scale: 1.5, useCORS: true, backgroundColor: '#ffffff', width: 1123 }); const imgH = (canvas.height * landscapePageW) / canvas.width; wrapper.remove(); return { canvas, imgH }; @@ -2375,7 +2378,10 @@ async function exportPDF(){ for(let i = 0; i < projects.length; i++){ const rowHTML = buildPdfProjectRow(projects[i], allPeople); - const testRows = currentRows + rowHTML; + // Alternating row background to match project board design + const rowBg = i % 2 === 0 ? ' style="background:#fafafc"' : ''; + const rowHTMLWithBg = rowHTML.replace('', ``); + const testRows = currentRows + rowHTMLWithBg; const { imgH: testImgH } = await measureBlockWithRows(titleRow, testRows); // Wenn die aktuelle Seite überschritten würde und wir bereits Zeilen haben, @@ -2396,7 +2402,7 @@ async function exportPDF(){ // Projektboard-Blöcke zeichnen for(const block of groupBlocks){ const wrapper = renderSinglePdfBlock(container, headerRows, block.titleRow, block.bodyRows); - const canvas = await html2canvas(wrapper, { scale: 2, useCORS: true, backgroundColor: '#ffffff', width: 1123 }); + const canvas = await html2canvas(wrapper, { scale: 1.5, useCORS: true, backgroundColor: '#ffffff', width: 1123 }); await addImageToLandscapePage(canvas); wrapper.remove(); } @@ -2424,25 +2430,36 @@ async function exportPDF(){ // buildPdfTableHeaderRows: baut die Kopfzeilen der Projektübersichts-Tabelle als HTML-String (zwei Zeilen). function buildPdfTableHeaderRows(allPeople){ - let h1 = `Pr.-Nr.BezeichnungStatus`; + let h1 = `Pr.-Nr.BezeichnungStatus`; const grouped = peopleByRole(currentWeek()); ROLES.forEach(r => { const count = Math.max(1, grouped[r].length); - h1 += `${r}`; + // Rollen-spezifische Hintergrundfarben aus dem Projektboard + let roleBg; + if(r === 'Planung') roleBg = 'rgb(212, 245, 224)'; + else if(r === 'Projektleitung') roleBg = 'rgb(255, 219, 219)'; + else if(r === 'Bauüberwachung') roleBg = 'rgb(203, 238, 255)'; + else roleBg = '#f0f0f2'; + h1 += `${r}`; }); - h1 += `Leistungsphasen (%)`; + h1 += `Leistungsphasen (%)`; let h2 = ``; ROLES.forEach(r => { + let roleBg; + if(r === 'Planung') roleBg = 'rgb(212, 245, 224)'; + else if(r === 'Projektleitung') roleBg = 'rgb(255, 219, 219)'; + else if(r === 'Bauüberwachung') roleBg = 'rgb(203, 238, 255)'; + else roleBg = '#fafafc'; if(grouped[r].length === 0){ - h2 += `–`; + h2 += `–`; } else { grouped[r].forEach(entry => { - h2 += `${esc(entry.person.name)}`; + h2 += `${esc(entry.person.name)}`; }); } }); - LPHS.forEach(l => h2 += `${l}`); + LPHS.forEach(l => h2 += `${l}`); h2 += ``; return h1 + h2; } @@ -2450,28 +2467,61 @@ function buildPdfTableHeaderRows(allPeople){ // buildPdfProjectRow: baut eine einzelne Projektzeile als HTML-String. function buildPdfProjectRow(p, allPeople){ let body = ``; - body += `${esc(p.nr)}`; - body += `${esc(p.name)}`; + body += `${esc(p.nr)}`; + body += `${esc(p.name)}`; const statusText = pdfStatusText(p.status); - body += `${statusText}`; + body += `${statusText}`; allPeople.forEach(entry => { const s = p.assign[assignKey(entry.person.id, entry.role)] || 0; const txt = s === 1 ? 'X' : s === 2 ? '(X)' : ''; - const bg = s === 1 ? '#9ae6b4' : s === 2 ? '#fbd38d' : '#fff'; - body += `${txt}`; + let roleBg = '#fff'; + if(entry.role === 'Planung') roleBg = 'rgb(212, 245, 224)'; + else if(entry.role === 'Projektleitung') roleBg = 'rgb(255, 219, 219)'; + else if(entry.role === 'Bauüberwachung') roleBg = 'rgb(203, 238, 255)'; + const textColor = (s === 1 || s === 2) ? '#fff' : '#1d1d1f'; + const cellBg = s === 1 ? '#248a3d' : s === 2 ? '#d18b00' : roleBg; + body += `${txt}`; }); LPHS.forEach(l => { const v = (p.lph[l] !== undefined && p.lph[l] !== '') ? String(p.lph[l]).replace('%','') : ''; - body += `${esc(v ? v + '%' : '')}`; + body += `${esc(v ? v + '%' : '')}`; }); body += ``; return body; } +// Build PDF group body rows with alternating background colors +function buildPdfGroupBodyRows(projectRows, allPeople) { + let html = ''; + projectRows.forEach((pr, i) => { + const s = pr.assign ? Object.values(pr.assign)[0] || 0 : 0; + const isEven = i % 2 === 0; + const rowBg = isEven ? '#fafafc' : '#fff'; + html += ``; + html += `${esc(pr.nr)}`; + html += `${esc(pr.name)}`; + const statusText = pdfStatusText(pr.status); + html += `${statusText}`; + allPeople.forEach(entry => { + const assignKey = `${entry.person.id}-${entry.role}`; + const assign = pr.assign ? pr.assign[assignKey] : 0; + const txt = assign === 1 ? 'X' : assign === 2 ? '(X)' : ''; + const bg = assign === 1 ? '#248a3d' : assign === 2 ? '#d18b00' : '#fff'; + html += `${txt}`; + }); + LPHS.forEach(l => { + const v = (pr.lph && pr.lph[l] !== undefined && pr.lph[l] !== '') ? String(pr.lph[l]).replace('%','') : ''; + html += `${esc(v ? v + '%' : '')}`; + }); + html += ``; + }); + return html; +} + // buildPdfGroupTitleRow: baut die Zeile mit dem Gruppentitel. function buildPdfGroupTitleRow(groupName, allPeople){ const colCount = 3 + allPeople.length + LPHS.length; - return `${esc(groupName)}`; + return `${esc(groupName)}`; } // renderSinglePdfBlock: erzeugt einen DOM-Wrapper mit einer einzelnen Tabelle @@ -2490,7 +2540,7 @@ function renderSinglePdfBlock(container, headerRows, titleRow, bodyRows){ // buildPdfAttendanceBlock: baut den Anwesenheits-Block als HTML-String. function buildPdfAttendanceBlock(presentList, absentList){ return `
-
Anwesenheit
+
Anwesenheit
Anwesend: ${presentList || '—'}
Abwesend: ${absentList || '—'}
`; @@ -2545,33 +2595,33 @@ function buildPdfLoadSection(allPeople){ if(l > maxLoad) maxLoad = l; }); - let html = `
Auslastung der Projektbeteiligten (aktuelle Sitzung)
`; - html += ''; + let html = `
Auslastung der Projektbeteiligten (aktuelle Sitzung)
`; + html += '
RolleKürzelPunkteBalkenProjektdetails
'; ROLES.forEach(r => { grouped[r].forEach(entry => { const s = stats[assignKey(entry.person.id, r)]; const load = s.main + s.opt * 0.5 + s.kleine * 0.3; const pct = Math.round(load / maxLoad * 100); - const color = pct > 75 ? '#c53030' : pct > 45 ? '#d69e2e' : '#2f855a'; + const color = pct > 75 ? '#d70015' : pct > 45 ? '#b25000' : '#248a3d'; const detail = Object.keys(s.projects).map(k => `${esc(k)} (${s.projects[k]}×)`).join(', ') || '—'; html += ` - - - - + + + - + `; }); }); html += '
RolleKürzelPunkteBalkenProjektdetails
${r}${esc(entry.person.name)}${load.toString().replace('.',',')} -
+
${r}${esc(entry.person.name)}${load.toString().replace('.',',')} +
-
${pct}%
+
${pct}%
${detail}${s.anbahnung ? `
In Anbahnung: ${s.anbahnung}` : ''}
${detail}${s.anbahnung ? `
In Anbahnung: ${s.anbahnung}` : ''}
'; - html += '
Haupt=1 · Optional=0,5 · Kleine Projekte=0,3 · In Anbahnung wird nicht in der Punktzahl gezählt.
'; + html += '
Haupt=1 · Optional=0,5 · Kleine Projekte=0,3 · In Anbahnung wird nicht in der Punktzahl gezählt.
'; html += '
'; return html; } diff --git a/sessions/.DS_Store b/sessions/.DS_Store index 3903cb370a0f9a6e12f80a5d0e725642a10f9fe8..0ac50907c649210e284e9584497da0d911ddee89 100644 GIT binary patch delta 183 zcmZn(XbIThAfTr6K`_%%?1Uo&0|N_#BSR2_GlNHNeu_&{PJR+li~}OSIZZ&Ek;$fS zbG@KFo5~V7A($R!23H0jh7e>O5ZTF(#FJE7)R7c=02Kx!D}=~y&X5S>C)P+M0K0=N A)Bpeg delta 183 zcmZn(XbIThAfR?V)#Kt1p%ab_3=Av`jtoHz&I}&8`6(_*Ir&LIF%F3Q<}?9uMkZU4 z&GmxzY$`LSo9-zS0qbFAaAoje2tn2Xk)8ZVJV`}90d6=mg9lJyFtS33?B)!KFn(f< GR006%2R7vZ diff --git a/sessions/ELT/KW_33___2026.csv b/sessions/ELT/KW_33___2026.csv index 6961169..638bbc4 100644 --- a/sessions/ELT/KW_33___2026.csv +++ b/sessions/ELT/KW_33___2026.csv @@ -4,15 +4,15 @@ Pr.-Nr.;Bezeichnung;Status;AP;AK;ED;SK;SE;WS;ED;SP;THK;RR;MK;TW;SG;ED;SK;SP;THK; ANWESENHEIT;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 18-4007;Janusz-Korczak-Gesamtsch. Bottrop;- KW 35 NW Raum Planung
- KW 44 Möbel
;;;;;;;;;;;;;;;;;;;100%;100%;100%;;90%;;;;;Aktive Projekte;0;"{""start"":"""",""end"":"""",""milestones"":[],""people"":[],""progress"":0}" 21-4030;NSHV Köln Immobilienprüfung in Hof;- Thorsten W. klärt und übernimmt Schriftverkehr
- LV liegt zur Sichtung bei T.W.
;;;;;;;;;;;;;;;;;;;100%;100%;100%;;100%;100%;;;;Aktive Projekte;2; -22-4066;DSW 21, Umbau E-Mobilität;"- Elt-Montagen ab KW 33.";;;;;;;;;;;;;;;;;;;100%;100%;100%;;100%;100%;100%;20%;;Aktive Projekte;6; +22-4066;DSW 21, Umbau E-Mobilität;- Elt-Montagen ab KW 33.;;;;;;;;;;;;;;;;;;;100%;100%;100%;;100%;100%;100%;20%;;Aktive Projekte;6; 24-4043;S-K ODL-Heim Sanierung Krefeld;- Vorraussichtlich LV-Abgabe XX.XX
- LPH5 mündlich freigegeben
- Neuer EG Grundriss mit diversen Änderungen kommt noch von Architekten
;;;;;;;;;;;;;;;;;;;100%;100%;100%;;100%;;;;;Aktive Projekte;10; -21-4001;Feuerwehrgeräteh. Rodenkirchen;"- KNX muß noch programmiert werden. Abnahme 27.07
- Fertigstellung Ende Juli
- Abnahmen laufen bis Ende KW31
- Blackbuilding Test 26.07
";X;;X;;;;X;X;;;;;;X;;;;;;;;;100%;100%;100%;;;Aktive Projekte;1;"{""start"":"""",""end"":"""",""milestones"":[{""id"":""mslrvh7hjau1e"",""name"":""Übergabe"",""date"":""2026-09-12"",""dependsOn"":[""mslv6h76cmx8k""],""position"":""after:mslv6h76cmx8k""}],""people"":[""p_ap"",""p_ak"",""p_sk"",""p_sg""],""progress"":""0"",""todos"":[{""id"":""msluufbp114g1"",""title"":""Test"",""start"":""2026-08-10"",""end"":""2026-08-14"",""done"":false,""dependsOn"":[],""assignees"":[""p_ap"",""p_ed""],""progress"":0},{""id"":""mslv6h76cmx8k"",""title"":""Test 2"",""start"":""2026-08-24"",""end"":""2026-09-04"",""done"":false,""dependsOn"":[""msluufbp114g1""],""assignees"":[""p_ap""],""progress"":41},{""id"":""mslw4l3qp1v18"",""title"":""Test 3"",""start"":""2026-09-14"",""end"":""2026-09-22"",""done"":false,""dependsOn"":[""m_mslrvh7hjau1e""],""assignees"":[],""progress"":0},{""id"":""msoltaa1itx48"",""title"":""Gehen"",""start"":""2026-09-23"",""end"":""2026-09-25"",""done"":false,""progress"":0,""dependsOn"":[""mslw4l3qp1v18""],""assignees"":[""p_ws""]}]}" +21-4001;Feuerwehrgeräteh. Rodenkirchen;- KNX muß noch programmiert werden. Abnahme 27.07
- Fertigstellung Ende Juli
- Abnahmen laufen bis Ende KW31
- Blackbuilding Test 26.07
;X;;X;;;;X;X;;;;;;X;;;;;;;;;100%;100%;100%;;;Aktive Projekte;1;"{""start"":"""",""end"":"""",""milestones"":[{""id"":""mslrvh7hjau1e"",""name"":""Übergabe"",""date"":""2026-09-12"",""dependsOn"":[""mslv6h76cmx8k""],""position"":""after:mslv6h76cmx8k""}],""people"":[""p_ap"",""p_ak"",""p_sk"",""p_sg""],""progress"":""0"",""todos"":[{""id"":""msluufbp114g1"",""title"":""Test"",""start"":""2026-08-10"",""end"":""2026-08-14"",""done"":false,""dependsOn"":[],""assignees"":[""p_ap"",""p_ed""],""progress"":0},{""id"":""mslv6h76cmx8k"",""title"":""Test 2"",""start"":""2026-08-24"",""end"":""2026-09-04"",""done"":false,""dependsOn"":[""msluufbp114g1""],""assignees"":[""p_ap""],""progress"":41},{""id"":""mslw4l3qp1v18"",""title"":""Test 3"",""start"":""2026-09-14"",""end"":""2026-09-22"",""done"":false,""dependsOn"":[""m_mslrvh7hjau1e""],""assignees"":[],""progress"":0},{""id"":""msoltaa1itx48"",""title"":""Gehen"",""start"":""2026-09-23"",""end"":""2026-09-25"",""done"":false,""progress"":0,""dependsOn"":[""mslw4l3qp1v18""],""assignees"":[""p_ws""]}]}" 22-4027;Sporthalle Soest;- SV und VOB Abnahme erfolgt.
- Nachprüfung VOB 24.07
- Keine Infos über Nachprüfung
;;;;;;;;;;;;;;;;;;;100%;100%;100%;;100%;100%;100%;90%;;Aktive Projekte;3; 22-4056;Gymnasium Hemer;;;;;;;;;;;;;;;;;;;;100%;100%;100%;;100%;100%;100%;90%;;Aktive Projekte;4; 22-4056-1;Gymnasium Hemer (Deckensanierung);- Beginn der Arbeiten vorraussichtlich KW 30 (KW 32 Kickoff);;;;;;;;;;;;;;;;;;;;;100%;;100%;100%;;;;Aktive Projekte;5; -23-4042;GWK Neufelder Straße;"- Nachweis für E-30 Leitungen notwendig. Rechnungen wurden nicht anerkannt.
- 22.07 Aufschaltung BMA und Amok
- KW 31 VOB Abnahme
";;;;;;;;;;;;;;;;;;;100%;100%;100%;;100%;100%;100%;95%;;Aktive Projekte;7; +23-4042;GWK Neufelder Straße;- Nachweis für E-30 Leitungen notwendig. Rechnungen wurden nicht anerkannt.
- 22.07 Aufschaltung BMA und Amok
- KW 31 VOB Abnahme
;;;;;;;;;;;;;;;;;;;100%;100%;100%;;100%;100%;100%;95%;;Aktive Projekte;7; 23-4070;Umbau Bürogebäude NEW, MV10;"- neue NSHV anbieten(Warten auf Infos),
- 28.07 Sachverständiger Abnahme ELT&SiBe
- 30.07 Sachverständigen Abnahme BMA
";;;;;;;;;;;;;;;;;;;100%;100%;100%;;100%;100%;100%;90%;;Aktive Projekte;8; -23-4072;S-K OGS-Kaldenkirchen Schulanbau;"- Feininstallation beginnt, Fertigstellung voraussichtlich 01.08";;;;;;;;;;;;;;;;;;;;;;;;;;70%;;Aktive Projekte;9; +23-4072;S-K OGS-Kaldenkirchen Schulanbau;- Feininstallation beginnt, Fertigstellung voraussichtlich 01.08;;;;;;;;;;;;;;;;;;;;;;;;;;70%;;Aktive Projekte;9; 24-4049;BMA Remscheid;"- Feuerwehrabnahme organisiert die Errichterfirma.
- SV-Abnahmen 15 & 16.07: nicht abgenommen
";;;;;;;;;;;;;;;;;;;100%;100%;100%;;100%;100%;100%;90%;;Aktive Projekte;11; 24-4069;S-K Erw. GS Blankenheim Neubau;- nur backup;;;;;;;;;;;;;;;;;;;;;;;100%;100%;;;;Kleine Projekte;0; 24-4096;Umbau Wohngebäude Kirchhoff;- Position HA wird von uns bestimmt.
- Notwendiges Leerrohr für Leuchten im Vordach ist zu klären.
- Abgabe Kostenberechnung bis Ende KW29
- LV Fertig bis Ende KW 32
;;;;;;;;;;;;;;;;;;;100%;100%;100%;;95%;85%;0%;;;Aktive Projekte;12;