PageSourceSearch

https://unterrichtsplanung.ai/assets/SchuladminReports-YyyJvBOU.js

js unterrichtsplanung.ai collected 2026-10-05 15:15:44 UTC 5,609 bytes, 1 lines download raw bytes

1import{X as e,cn as t,w as n,x as r}from"./lucide-FiUllUuf.js";import{U as i}from"./radix-DA0TVB9t.js";import{n as a}from"./tanstack-CXE1wJKK.js";import{t as o}from"./client-CgQ6iHoJ.js";import{t as s}from"./useSession-BdcD8JJU.js";import{t as c}from"./spinner-DBN64AJ6.js";import{a as l,n as u,o as d,r as f,t as p}from"./card-BS9mZtL8.js";import{t as m}from"./badge-DpGSl0Ur.js";import{t as h}from"./page-header-DzvZ5Pog.js";var g=i();function _(){let{session:i}=s(),_=a({queryKey:[`my_org_for_reports`],enabled:!!i,queryFn:async()=>{let{data:e}=await o.from(`lp_teacher_profiles`).select(`primary_org_id`).eq(`id`,i.user.id).maybeSingle();return e?.primary_org_id??null}}).data,y=a({queryKey:[`org_stats_for_reports`,_],enabled:!!_,queryFn:async()=>{let{data:e,error:t}=await o.rpc(`lp_org_stats`,{p_org:_});if(t)throw t;return e}}),b=a({queryKey:[`org_teacher_ai_usage`,_],enabled:!!_,queryFn:async()=>{let{data:e}=await o.from(`lp_organization_memberships`).select(`teacher_id`).eq(`organization_id`,_),t=e??[],n=t.map(e=>e.teacher_id);if(n.length===0)return[];let{data:r}=await o.from(`lp_teacher_profiles`).select(`id, email, display_name`).in(`id`,n),i=new Map((r??[]).map(e=>[e.id,e])),{data:a}=await o.from(`lp_ai_request_logs`).select(`teacher_id, cost_cents, cost_micro_cents`).in(`teacher_id`,n).gte(`created_at`,new Date(new Date().setDate(1)).toISOString().slice(0,10)),s=new Map;for(let e of a??[]){let t=s.get(e.teacher_id)??{calls:0,cost:0};t.calls+=1,t.cost+=e.cost_micro_cents!=null&&e.cost_micro_cents>0?e.cost_micro_cents/1e3:e.cost_cents??0,s.set(e.teacher_id,t)}return t.map(e=>({teacher_id:e.teacher_id,email:i.get(e.teacher_id)?.email??``,display_name:i.get(e.teacher_id)?.display_name??null,calls:s.get(e.teacher_id)?.calls??0,cost_cents:s.get(e.teacher_id)?.cost??0})).sort((e,t)=>t.calls-e.calls)}}),x=a({queryKey:[`org_bugs`,_],enabled:!!_,queryFn:async()=>{let{data:e}=await o.from(`lp_organization_memberships`).select(`teacher_id`).eq(`organization_id`,_),t=(e??[]).map(e=>e.teacher_id);if(t.length===0)return[];let{data:n}=await o.from(`lp_bug_reports`).select(`id, type, title, status, created_at, reporter_email`).in(`reporter_id`,t).in(`status`,[`open`,`in_progress`]).order(`created_at`,{ascending:!1}).limit(20);return n??[]}});return(0,g.jsxs)(`div`,{className:`space-y-6`,children:[(0,g.jsx)(h,{title:`Reporting`,description:`Übersicht über Aktivitäten und Kosten deiner Schule.`,icon:r}),y.data&&(0,g.jsxs)(`div`,{className:`grid gap-4 sm:grid-cols-2 lg:grid-cols-4`,children:[(0,g.jsx)(v,{icon:t,title:`Klassen`,value:y.data.classes}),(0,g.jsx)(v,{icon:t,title:`Planungen`,value:y.data.plans}),(0,g.jsx)(v,{icon:n,title:`KI-Anfragen (Monat)`,value:y.data.ai_calls_this_month}),(0,g.jsx)(v,{icon:r,title:`KI-Kosten (Monat)`,value:`${(y.data.ai_cost_this_month_cents/100).toLocaleString(`de-DE`,{style:`currency`,currency:`EUR`})}`})]}),(0,g.jsxs)(p,{children:[(0,g.jsxs)(l,{children:[(0,g.jsx)(d,{className:`text-lg`,children:`KI-Nutzung nach Lehrkraft`}),(0,g.jsx)(f,{children:`Aktueller Monat. Hilft bei Fair-Use-Einschätzung.`})]}),(0,g.jsx)(u,{children:b.isLoading?(0,g.jsx)(c,{}):b.data?.length===0?(0,g.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`Keine Lehrkräfte aktiv.`}):(0,g.jsx)(`div`,{className:`overflow-x-auto`,children:(0,g.jsxs)(`table`,{className:`w-full text-sm`,children:[(0,g.jsx)(`thead`,{children:(0,g.jsxs)(`tr`,{className:`border-b text-xs uppercase tracking-wider text-muted-foreground`,children:[(0,g.jsx)(`th`,{className:`py-2 pr-4 text-left`,children:`Lehrkraft`}),(0,g.jsx)(`th`,{className:`py-2 pr-4 text-left`,children:`KI-Anfragen`}),(0,g.jsx)(`th`,{className:`py-2 text-left`,children:`Kosten`})]})}),(0,g.jsx)(`tbody`,{children:b.data?.map(e=>(0,g.jsxs)(`tr`,{className:`border-b last:border-0`,children:[(0,g.jsxs)(`td`,{className:`py-2 pr-4`,children:[(0,g.jsx)(`div`,{className:`font-medium`,children:e.display_name||e.email}),e.display_name&&(0,g.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:e.email})]}),(0,g.jsx)(`td`,{className:`py-2 pr-4`,children:e.calls}),(0,g.jsx)(`td`,{className:`py-2`,children:(e.cost_cents/100).toLocaleStr
1ing(`de-DE`,{style:`currency`,currency:`EUR`})})]},e.teacher_id))})]})})})]}),(0,g.jsxs)(p,{children:[(0,g.jsxs)(l,{children:[(0,g.jsxs)(d,{className:`flex items-center gap-2 text-lg`,children:[(0,g.jsx)(e,{className:`h-5 w-5 text-primary`}),` Offene Reports der Schul-Mitglieder`]}),(0,g.jsx)(f,{children:`Bugs und Feature-Wünsche`})]}),(0,g.jsx)(u,{children:x.isLoading?(0,g.jsx)(c,{}):x.data?.length===0?(0,g.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`Keine offenen Reports.`}):(0,g.jsx)(`ul`,{className:`divide-y`,children:x.data?.map(e=>(0,g.jsxs)(`li`,{className:`py-2`,children:[(0,g.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,g.jsx)(m,{variant:e.type===`bug`?`destructive`:`default`,children:e.type}),(0,g.jsx)(`span`,{className:`font-medium`,children:e.title}),(0,g.jsx)(m,{variant:`outline`,children:e.status})]}),(0,g.jsxs)(`div`,{className:`text-xs text-muted-foreground`,children:[e.reporter_email,` · `,new Date(e.created_at).toLocaleDateString(`de-DE`)]})]},e.id))})})]})]})}function v({icon:e,title:t,value:n}){return(0,g.jsx)(p,{children:(0,g.jsxs)(u,{className:`pt-6`,children:[(0,g.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,g.jsx)(e,{className:`h-4 w-4 text-primary`}),(0,g.jsx)(`div`,{className:`text-xs uppercase tracking-wider text-muted-foreground`,children:t})]}),(0,g.jsx)(`div`,{className:`mt-1 text-2xl font-semibold`,children:n})]})})}export{_ as default};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.