1import{n as e}from"./rolldown-runtime-DF2fYuay.js";import{M as t,N as n,P as r,j as i,nt as a,sn as o,yn as s}from"./lucide-FiUllUuf.js";import{U as c}from"./radix-DA0TVB9t.js";import{i as l,n as u,t as d}from"./tanstack-CXE1wJKK.js";import{t as f}from"./client-CgQ6iHoJ.js";import{t as p}from"./utils-CWd_IMVQ.js";import{t as m}from"./spinner-DBN64AJ6.js";import{t as h}from"./button-DWibT-Lh.js";import{t as g}from"./textarea-BLiD0cpI.js";import{t as _}from"./label-Cmbd6Sco.js";import{i as v,n as y}from"./errors-BVF_zu8c.js";import{t as b}from"./select-2FJm2fXs.js";import{t as x}from"./input-DMUCdaa7.js";import{a as S,n as C,o as w,r as T,t as E}from"./card-BS9mZtL8.js";import{t as D}from"./badge-DpGSl0Ur.js";import{t as O}from"./page-header-DzvZ5Pog.js";import{t as k}from"./NewOrganizationDialog-Bdms5MQc.js";var A=e(s(),1),j=c(),M={lp_school_inquiries:[`admin`,`school_inquiries`],lp_school_requests:[`admin`,`school_requests`]},N={demo:`Demo`,angebot:`Angebot`,trial:`Trial`},P={new:{label:`Neu`,variant:`default`},contacted:{label:`Kontaktiert`,variant:`secondary`},offer_sent:{label:`Angebot raus`,variant:`secondary`},won:{label:`Gewonnen`,variant:`success`},lost:{label:`Verloren`,variant:`destructive`}};function F(e){return(e/100).toLocaleString(`de-DE`,{style:`currency`,currency:`EUR`})}function I(){let e=l(),[r,i]=(0,A.useState)(``),[a,o]=(0,A.useState)(`all`),[s,c]=(0,A.useState)(null),p=u({queryKey:M.lp_school_inquiries,queryFn:async()=>{let{data:e,error:t}=await f.from(`lp_school_inquiries`).select(`*`).order(`created_at`,{ascending:!1}).limit(200);if(t)throw t;return e??[]}}),g=u({queryKey:M.lp_school_requests,queryFn:async()=>{let{data:e,error:t}=await f.from(`lp_school_requests`).select(`id, school_name, schulform, bundesland, lehrkraft_anzahl, anliegen, anmerkung, vorname, nachname, funktion, email, telefon, status, created_at`).order(`created_at`,{ascending:!1}).limit(200);if(t)throw t;return e??[]}}),_=d({mutationFn:async e=>{let{error:t}=await f.from(e.table).update({status:e.status}).eq(`id`,e.id);if(t)throw t},onSuccess:(t,n)=>{v(`Status aktualisiert`),e.invalidateQueries({queryKey:M[n.table]})},onError:e=>y(e,`Status aktualisieren`)}),b=d({mutationFn:async e=>{let{error:t}=await f.from(`lp_school_inquiries`).update({notes:e.notes.trim()||null}).eq(`id`,e.id);if(t)throw t},onSuccess:()=>{v(`Notizen gespeichert`),e.invalidateQueries({queryKey:[`admin`,`school_inquiries`]})},onError:e=>y(e,`Notizen speichern`)}),S=d({mutationFn:async e=>{let{data:t,error:n}=await f.functions.invoke(`lp-notify-school-inquiry`,{body:{inquiry_id:e}});if(n)throw n;let r=t;if(!r?.ok)throw Error(r?.error||`Unbekannter Fehler`)},onSuccess:()=>v(`Benachrichtigungs-Mail erneut gesendet`),onError:e=>y(e,`Mail erneut senden`)}),w=d({mutationFn:async e=>{let{error:t}=await f.rpc(`lp_admin_convert_inquiry_to_org`,{p_inquiry_id:e.inquiry_id,p_org_id:e.org_id});if(t)throw t},onSuccess:()=>{v(`In Organisation überführt â Owner + Trial-Sub angelegt, Status âGewonnen"`),e.invali
1dateQueries({queryKey:[`admin`,`school_inquiries`]}),e.invalidateQueries({queryKey:[`admin`,`organizations`]})},onError:e=>y(e,`Inquiry-Konvertierung`)});function T(e){return{name:e.school_name,org_type:e.org_type===`district`||e.org_type===`private`?e.org_type:`school`,bundesland:e.bundesland,contact_email:e.contact_email}}let N=r.trim().toLowerCase(),F=(e,t)=>(a===`all`||e===a)&&(!N||t.some(e=>(e??``).toLowerCase().includes(N))),I=(p.data??[]).filter(e=>F(e.status,[e.school_name,e.contact_email,e.contact_name])),L=(g.data??[]).filter(e=>F(e.status,[e.school_name,e.email,`${e.vorname} ${e.nachname}`])),B=[...p.data??[],...g.data??[]],V=B.reduce((e,t)=>(e[t.status]=(e[t.status]??0)+1,e),{new:0,contacted:0,offer_sent:0,won:0,lost:0});return(0,j.jsxs)(`div`,{className:`space-y-6`,children:[(0,j.jsx)(O,{title:`Schulanfragen`,description:`Anfragen aus dem öffentlichen Formular und aus dem Onboarding-Flow. Verträge werden hier getrackt, bevor eine richtige Organisation angelegt wird.`,icon:n}),(0,j.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[[`all`,`new`,`contacted`,`offer_sent`,`won`,`lost`].map(e=>{let t=e===`all`,n=t?B.length:V[e],r=t?`Alle`:P[e].label;return(0,j.jsxs)(h,{size:`sm`,variant:a===e?`default`:`outline`,onClick:()=>o(e),children:[r,` `,(0,j.jsx)(D,{variant:`outline`,className:`ml-2`,children:n})]},e)}),(0,j.jsxs)(`div`,{className:`ml-auto relative`,children:[(0,j.jsx)(t,{className:`pointer-events-none absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground`}),(0,j.jsx)(x,{value:r,onChange:e=>i(e.target.value),placeholder:`Schule oder Kontakt suchen â¦`,className:`pl-9 w-64`})]})]}),(0,j.jsxs)(`section`,{className:`space-y-4`,children:[(0,j.jsxs)(`h2`,{className:`text-lg font-semibold`,children:[`Ãffentliches Formular `,(0,j.jsx)(`span`,{className:`text-sm font-normal text-muted-foreground`,children:`(/schullizenz-anfrage, ohne Login)`})]}),g.isLoading?(0,j.jsx)(m,{}):g.isError?(0,j.jsx)(E,{children:(0,j.jsxs)(C,{className:`py-6 text-sm text-destructive`,children:[`Formular-Anfragen nicht lesbar: `,g.error instanceof Error?g.error.message:String(g.error)]})}):L.length===0?(0,j.jsx)(E,{children:(0,j.jsx)(C,{className:`py-8 text-center text-sm text-muted-foreground`,children:a===`all`&&!r?`Noch keine Anfragen über das Formular.`:`Keine Treffer für diesen Filter.`})}):(0,j.jsx)(`div`,{className:`space-y-4`,children:L.map(e=>(0,j.jsx)(R,{row:e,onStatusChange:t=>_.mutate({table:`lp_school_requests`,id:e.id,status:t})},e.id))})]}),(0,j.jsxs)(`section`,{className:`space-y-4`,children:[(0,j.jsxs)(`h2`,{className:`text-lg font-semibold`,children:[`Onboarding `,(0,j.jsx)(`span`,{className:`text-sm font-normal text-muted-foreground`,children:`(angemeldete Lehrkräfte)`})]}),p.isLoading?(0,j.jsx)(m,{}):p.isError?(0,j.jsx)(E,{children:(0,j.jsxs)(C,{className:`py-6 text-sm text-destructive`,children:[`Onboarding-Anfragen nicht lesbar: `,p.error instanceof Error?p.error.message:String(p.error)]})}):I.length===0?(0,j.jsx)(E,{children:(0,j.jsxs)(C,{className:`py-12 text-center text-sm text-muted-foreground`,children:[(0,j.jsx)(n,{className:`mx-auto mb-3 h-8 w-8`}),a===`all`&&!r?`Noch keine Schulanfragen.`:`Keine Treffer für diesen Filter.`]})}):(0,j.jsx)(`div`,{className:`space-y-4`,children:I.map(e=>(0,j.jsx)(z,{row:e,onStatusChange:t=>_.mutate({table:`lp_school_inquiries`,id:e.id,status:t}),onNotesSave:t=>b.mutate({id:e.id,notes:t}),onResend:()=>S.mutate(e.id),onConvert:()=>c(e),resending:S.isPending&&S.variables===e.id},e.id))})]}),(0,j.jsx)(k,{open:!!s,onOpenChange:e=>{e||c(null)},initial:s?T(s):void 0,onCreated:async e=>{s&&await w.mutateAsync({inquiry_id:s.id,org_id:e}),c(null)}})]})}function L({value:e,label:t,onChange:n}){return(0,j.jsx)(b,{value:e,"aria-label":t,onChange:e=>n(e.target.value),className:`flex h-9 rounded-md border border-input bg-background px-3 text-sm`,children:Object.keys(P).map(e=>(0,j.jsx)(`option`,{value:e,children:P[e].label},e))})}function R({row:e,onStatusChange:t}){let r=P[e.status],i=`mailto:${e.email}?subject=unterrichtsplanung.ai%20Schullizenz%20${encodeURIComponent(e.school_name)}`;return(0,j.jsxs)(E,{className:p(e.status===`new`&&`border-primary/50`),children:[(0,j.jsxs)(S,{className:`flex flex-row items-start justify-between gap-3 space-y-0`,children:[(0,j.jsxs)(`div`,{className:`flex-1`,children:[(0,j.jsxs)(w,{className:`flex flex-wrap items-center gap-2 text-lg`,children:[(0,j.jsx)(n,{className:`h-4 w-4 text-primary`}),e.school_name,(0,j.jsx)(D,{variant:r.variant,children:r.label}),(0,j.jsx)(D,{variant:`outline`,children:e.schulform})]}),(0,j.jsxs)(T,{className:`mt-1`,children:[`${e.vorname} ${e.nachname} (${e.funktion}) · `,(0,j.jsx)(`a`,{href:i,className:`text-primary hover:underline`,children:e.email}),e.telefon?` · ${e.telefon}`:``,` · ${e.bundesland}
1 · `,new Date(e.created_at).toLocaleString(`de-DE`)]})]}),(0,j.jsx)(`div`,{className:`flex shrink-0 gap-2`,children:(0,j.jsx)(L,{value:e.status,label:`Status ${e.school_name}`,onChange:t})})]}),(0,j.jsxs)(C,{className:`space-y-4`,children:[(0,j.jsxs)(`div`,{className:`grid gap-4 sm:grid-cols-3 text-sm`,children:[(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`div`,{className:`text-xs uppercase tracking-wider text-muted-foreground`,children:`Lehrkräfte`}),(0,j.jsx)(`div`,{className:`mt-1 text-lg font-semibold`,children:e.lehrkraft_anzahl})]}),(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`div`,{className:`text-xs uppercase tracking-wider text-muted-foreground`,children:`Anliegen`}),(0,j.jsx)(`div`,{className:`mt-1 text-lg font-semibold`,children:N[e.anliegen]??e.anliegen})]}),(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`div`,{className:`text-xs uppercase tracking-wider text-muted-foreground`,children:`Anmerkung`}),(0,j.jsx)(`div`,{className:`mt-1 whitespace-pre-wrap`,children:e.anmerkung||`â`})]})]}),(0,j.jsx)(h,{asChild:!0,size:`sm`,variant:`ghost`,children:(0,j.jsxs)(`a`,{href:i,children:[(0,j.jsx)(a,{className:`mr-2 h-3 w-3`}),` Mail`]})})]})]})}function z({row:e,onStatusChange:t,onNotesSave:s,onResend:c,onConvert:l,resending:u}){let[d,f]=(0,A.useState)(e.notes??``),[v,y]=(0,A.useState)(!1),b=P[e.status],x=e.billing_interval===`yearly`?Math.round(e.estimated_yearly_cents/12):e.estimated_monthly_cents;return(0,j.jsxs)(E,{className:p(e.status===`new`&&`border-primary/50`),children:[(0,j.jsxs)(S,{className:`flex flex-row items-start justify-between gap-3 space-y-0`,children:[(0,j.jsxs)(`div`,{className:`flex-1`,children:[(0,j.jsxs)(w,{className:`flex flex-wrap items-center gap-2 text-lg`,children:[(0,j.jsx)(n,{className:`h-4 w-4 text-primary`}),e.school_name,(0,j.jsx)(D,{variant:b.variant,children:b.label}),(0,j.jsx)(D,{variant:`outline`,children:e.org_type})]}),(0,j.jsxs)(T,{className:`mt-1`,children:[e.contact_name?`${e.contact_name} · `:``,(0,j.jsx)(`a`,{href:`mailto:${e.contact_email}?subject=unterrichtsplanung.ai%20Schullizenz%20${encodeURIComponent(e.school_name)}`,className:`text-primary hover:underline`,children:e.contact_email}),e.bundesland?` · ${e.bundesland}`:``,` · `,new Date(e.created_at).toLocaleString(`de-DE`)]})]}),(0,j.jsx)(`div`,{className:`flex shrink-0 gap-2`,children:(0,j.jsx)(L,{value:e.status,label:`Status ${e.school_name}`,onChange:t})})]}),(0,j.jsxs)(C,{className:`space-y-4`,children:[(0,j.jsxs)(`div`,{className:`grid gap-4 sm:grid-cols-3 text-sm`,children:[(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`div`,{className:`text-xs uppercase tracking-wider text-muted-foreground`,children:`Geplante Lehrkräfte`}),(0,j.jsx)(`div`,{className:`mt-1 text-lg font-semibold`,children:e.estimated_seats})]}),(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`div`,{className:`text-xs uppercase tracking-wider text-muted-foreground`,children:`Gewünschte Abrechnung`}),(0,j.jsx)(`div`,{className:`mt-1 text-lg font-semibold`,children:e.billing_interval===`yearly`?`Jährlich`:`Monatlich`})]}),(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`div`,{className:`text-xs uppercase tracking-wider text-muted-foreground`,children:`Kalkulierter Preis`}),(0,j.jsxs)(`div`,{className:`mt-1 text-lg font-semibold`,children:[F(x),(0,j.jsx)(`span`,{className:`text-xs font-normal text-muted-foreground`,children:`/Monat`})]}),e.billing_interval===`yearly`&&(0,j.jsxs)(`div`,{className:`text-xs text-muted-foreground`,children:[`jährlich `,F(e.estimated_yearly_cents)]})]})]}),(0,j.jsxs)(`div`,{className:`space-y-2`,children:[(0,j.jsx)(_,{children:`Notizen`}),(0,j.jsx)(g,{rows:2,value:d,onChange:e=>{f(e.target.value),y(!0)},placeholder:`Kontaktstand, Angebotsnummer, Entscheidungspfad â¦`}),(0,j.jsxs)(`div`,{className:`flex flex-wrap gap-2`,children:[(0,j.jsxs)(h,{size:`sm`,variant:`outline`,onClick:()=>{s(d),y(!1)},disabled:!v,children:[(0,j.jsx)(r,{className:`mr-2 h-3 w-3`}),` Notiz speichern`]}),(0,j.jsxs)(h,{size:`sm`,variant:`ghost`,onClick:c,disabled:u,children:[u?(0,j.jsx)(m,{className:`mr-2`}):(0,j.jsx)(i,{className:`mr-2 h-3 w-3`}),`Benachrichtigung neu senden`]}),(0,j.jsx)(h,{asChild:!0,size:`sm`,variant:`ghost`,children:(0,j.jsxs)(`a`,{href:`mailto:${e.contact_email}?subject=unterrichtsplanung.ai%20Schullizenz%20${encodeURIComponent(e.school_name)}`,children:[(0,j.jsx)(a,{className:`mr-2 h-3 w-3`}),` Mail`]})}),(0,j.jsxs)(h,{size:`sm`,variant:`default`,className:`ml-auto`,onClick:l,disabled:e.status===`won`,title:e.status===`won`?`Bereits in Organisation überführt`:`Aus dieser Anfrage eine echte lp_organizations-Zeile anlegen`,children:[(0,j.jsx)(o,{className:`mr-2 h-3 w-3`}),e.status===`won`?`Bereits überführt`:`â Organisation anlegen`]})]})]})]})]})}export{I 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.