1import{r as l,j as e}from"./index-CLTM18rh.js";import{a as Z}from"./authFetch-u5HjDcUX.js";import{R as be}from"./Filterleiste-Dovi1-bW.js";import{u as de}from"./AdminContext-B2hLlcqc.js";import{b as I}from"./bestaetige-CpNFuPQa.js";const oe={privat:"Privatperson",schule:"Schule",kita:"Kita",organisation:"Organisation"},je={qv:"der Verein",schule:"Sammelrechnung der Schule",selbst:"selbst"},X={schule:"In der Schule",privat:"Privat oder anderer Standort"},Ne=t=>t.schnitz_ort?`ort:${t.schnitz_ort}`:t.schnitz_event_id??"",xe=t=>t.startsWith("ort:")?{schnitz_ort:t.slice(4),schnitz_event_id:""}:{schnitz_ort:"",schnitz_event_id:t};function he({termine:t,wert:o,onWahl:c,klasse:h}){return e.jsxs("select",{className:h,value:o,onChange:i=>c(i.target.value),children:[e.jsx("option",{value:"",children:"noch offen"}),e.jsx("optgroup",{label:"Schnitz-Nachmittage",children:t.map(i=>e.jsxs("option",{value:i.id,children:[i.ort??i.titel," · ",new Date(`${i.datum}T12:00:00`).toLocaleDateString("de-CH"),i.von?`, ${i.von}`:""]},i.id))}),e.jsxs("optgroup",{label:"Anderswo, wir liefern",children:[e.jsx("option",{value:"ort:schule",children:X.schule}),e.jsx("option",{value:"ort:privat",children:X.privat})]})]})}function me({orte:t,wert:o,onWahl:c,klasse:h}){return e.jsxs("select",{className:h,value:o,onChange:i=>c(i.target.value),children:[e.jsx("option",{value:"",children:"noch offen"}),t.map(i=>e.jsx("option",{value:i.id,children:i.name},i.id))]})}const W=t=>`Fr. ${Number(t).toFixed(2)}`,K=t=>t?new Date(t).toLocaleDateString("de-CH",{day:"2-digit",month:"2-digit",year:"2-digit"}):"â";function Me(){const{permissions:t}=de(),o=!!t.perm_vorstand,[c,h]=l.useState(null),[i,g]=l.useState(null),[v,n]=l.useState(null),[p,k]=l.useState("bestellungen"),m=l.useCallback(async()=>{const d=await Z("/api/admin/raeben"),b=await d.json().catch(()=>({}));if(!d.ok){g(b.error??`Fehler ${d.status}`);return}h(b),g(null)},[]);l.useEffect(()=>{m()},[m]);async function j(d){const b=await Z("/api/admin/raeben",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(d)}),S=await b.json().catch(()=>({}));return{ok:b.ok,data:S}}async function f(d){n(d);const{ok:b,data:S}=await j({aktion:"bestaetigung",id:d});if(n(null),!b){g(typeof S.error=="string"?S.error:"Fehler");return}await m()}async function r(d,b){n(d);const S=await Z("/api/admin/raeben",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({aktion:"stand",id:d,...b})});if(n(null),!S.ok){g((await S.json().catch(()=>({}))).error??"Fehler");return}await m()}if(i)return e.jsx("p",{className:"text-sm text-red-600",children:i});if(!c)return e.jsx("p",{className:"text-sm text-zinc-400",children:"Lade Räbenplanerâ¦"});const N=c.bestellungen.filter(d=>d.status!=="storniert");return e.jsxs("div",{className:"max-w-5xl",children:[e.jsxs("div",{className:"mb-4",children:[e.jsxs("h1",{className:"text-2xl font-bold text-zinc-900 dark:text-white",children:["Räbenplaner ",c.jahr]}),e.jsx("p",{className:"text-[13px] text-zinc-500 dark:text-zinc-400 mt-0.5",children:"Bestellungen von Schulen, Kitas und Organisationen für den Räbeliechtli-Umzug."})]}),e.jsx("div",{className:"grid grid-cols-2 sm:grid-cols-4 gap-3 mb-5",children:[{z:c.summe.raeben,t:"Räben zu besorgen",hell:!1},{z:c.summe.bestellungen,t:"Bestellungen",hell:!0},{z:`${c.summe.geliefert}/${N.length}`,t:"geliefert",hell:!0},{z:W(c.summe.offen),t:"noch nicht bezahlt",hell:!0}].map(d=>e.jsxs("div",{className:`rounded-xl border px-4 py-3 ${d.hell?"border-zinc-200 dark:border-zinc-700":"border-red-300 dark:border-red-900 bg-red-50 dark:bg-red-950/20"}`,children:[e.jsx("div",{className:"text-2xl font-bold tabular-nums text-zinc-900 dark:text-zinc-100",children:d.z}),e.jsx("div",{className:"text-[12.5px] text-zinc-500 dark:text-zinc-400",children:d.t})]},d.t))}),e.jsx(be,{aktiv:p,onWechsel:k,reiter:[{key:"bestellungen",label:"Bestellungen",anzahl:N.length},{key:"einkauf",label:"Einkauf"},{key:"lieferung",label:"Lieferliste",anzahl:(c.lieferorte??[]).length},{key:"abrechnung",label:"Abrechnung"},{key:"erfassen",label:"Bestellung erfassen"},{key:"einstellungen",label:"Einstellungen"}]}),p==="bestellungen"&&e.jsxs(e.Fragment,{children:[e.jsx(ie,{}),e.jsx(ke,{alle:c.bestellungen,d:c,darf:o,busy:v,onStand:r,onBestaetigen:f,onPost:j,onReload:m})]}),p==="einkauf"&&e.jsx(ze,{d:c,aktiv:N}),p==="lieferung"&&e.jsx(_e,{d:c,aktiv:N,darf:o,busy:v,onStand:r,onPost:j,onReload:m}),p==="abrechnung"&&e.jsx(Ce,{aktiv:N,rechnungen:c.rechnungen??[],darf:o,busy:v,onStand:r,onBestaetigen:f}),p==="erfassen"&&e.jsxs(e.Fragment,{children:[e.jsx(ie,{}),e.jsx(we,{d:c,darf:o,onPost:j,onFertig:async()=>{await m(),k("lieferung")}})]}
1),p==="einstellungen"&&e.jsx($e,{werte:c.einstellungen,darf:o,onGespeichert:m})]})}function ie(){return e.jsx("div",{className:"mb-4 rounded-xl border border-amber-300 dark:border-amber-900 bg-amber-50 dark:bg-amber-950/20 px-4 py-3",children:e.jsxs("p",{className:"text-[13px] leading-relaxed text-amber-900 dark:text-amber-200",children:[e.jsx("strong",{children:"Bestellungen für andere immer hier erfassen"}),", nicht über das Formular auf 8004.ch. Dort geht sofort eine automatische Bestätigung an die angegebene Adresse. Wer für eine ganze Schule mehrere Klassen eingibt, löst so eine Mail nach der anderen an dasselbe Sekretariat aus."]})})}function ke({alle:t,d:o,darf:c,busy:h,onStand:i,onBestaetigen:g,onPost:v,onReload:n}){const[p,k]=l.useState(null),[m,j]=l.useState(null);if(t.length===0)return e.jsx("p",{className:"text-[13px] text-zinc-400",children:"Noch keine Bestellung. Unter «Bestellung erfassen» kannst du eine aufnehmen."});async function f(r){if(!await I(`Bestellung von ${r.organisation||r.kontakt_name} über ${r.anzahl} Räben endgültig löschen? Für einen Rückzieher ist «stornieren» das Richtige, das behält die Zeile.`))return;const{ok:N,data:d}=await v({aktion:"bestellung-loeschen",id:r.id});if(!N){j(typeof d.error=="string"?d.error:"Fehler");return}j(null),k(null),await n()}return e.jsxs("div",{className:"flex flex-col gap-2",children:[m&&e.jsx("p",{className:"text-[13px] text-red-600",children:m}),t.map(r=>{const N=r.status==="storniert",d=r.schnitz_event_id?o.schnitz?.[r.schnitz_event_id]:null;return e.jsxs("div",{className:`rounded-xl border ${N?"border-zinc-200 dark:border-zinc-800 opacity-60":"border-zinc-200 dark:border-zinc-700"}`,children:[e.jsxs("div",{className:"flex flex-wrap items-baseline gap-x-3 gap-y-1 px-4 py-3",children:[e.jsx("span",{className:"font-semibold text-zinc-900 dark:text-zinc-100",children:r.organisation||r.kontakt_name}),r.klasse&&e.jsx("span",{className:"text-[13px] text-zinc-500",children:r.klasse}),e.jsx("span",{className:"text-[12.5px] text-zinc-400",children:oe[r.art]??r.art}),e.jsxs("span",{className:"text-[13px] font-semibold tabular-nums",children:[r.anzahl," Räben",r.reserve>0&&e.jsxs("span",{className:"font-normal text-zinc-500",children:[" + ",r.reserve," Reserve"]})]}),e.jsx("span",{className:"text-[13px] tabular-nums text-zinc-500",children:r.zahler==="qv"?"der Verein zahlt":W(r.betrag)}),d&&e.jsxs("span",{className:"text-[12.5px] text-amber-700 dark:text-amber-400",children:["Abholung ",d.ort??d.titel]}),r.lieferort_id&&e.jsxs("span",{className:"text-[12.5px] text-zinc-500",children:["Lieferung ",(o.lieferorte??[]).find(b=>b.id===r.lieferort_id)?.name??""]}),r.schnitz_ort&&e.jsxs("span",{className:"text-[12.5px] text-zinc-500",children:["Schnitzort: ",X[r.schnitz_ort]??r.sc
1hnitz_ort]}),N&&e.jsx("span",{className:"text-[12px] font-semibold text-zinc-500",children:"storniert"}),r.erfasst_von&&e.jsx("span",{className:"text-[12px] text-zinc-400",children:"von Hand erfasst"}),c&&e.jsx("button",{onClick:()=>k(p===r.id?null:r.id),className:"ml-auto text-[12.5px] underline underline-offset-2 hover:text-red-600",children:p===r.id?"schliessen":"bearbeiten"})]}),e.jsxs("div",{className:"px-4 pb-3 -mt-1 text-[12.5px] text-zinc-500",children:[r.kontakt_name," · ",r.kontakt_email,r.kontakt_telefon&&` · ${r.kontakt_telefon}`,r.lieferadresse&&` · ${r.lieferadresse}`,r.notiz&&e.jsx("span",{className:"block mt-0.5 text-zinc-400",children:r.notiz})]}),p===r.id&&c&&e.jsx(ve,{b:r,d:o,busy:h,onPost:v,onReload:n,onStand:i,onBestaetigen:g,onLoeschen:()=>{f(r)}})]},r.id)})]})}function ve({b:t,d:o,busy:c,onPost:h,onReload:i,onStand:g,onBestaetigen:v,onLoeschen:n}){const[p,k]=l.useState(String(t.anzahl)),[m,j]=l.useState(String(t.reserve??0)),[f,r]=l.useState(t.kontakt_name),[N,d]=l.useState(t.kontakt_email),[b,S]=l.useState(t.kontakt_telefon??""),[B,z]=l.useState(t.klasse??""),[C,L]=l.useState(t.lieferadresse??""),[y,R]=l.useState(t.notiz??""),[A,P]=l.useState(Ne(t)),[F,V]=l.useState(t.lieferort_id??""),[O,G]=l.useState(t.zahler==="qv"),[H,E]=l.useState(!1),[s,u]=l.useState(null),x="w-full px-2.5 py-1.5 rounded-lg border border-zinc-300 dark:border-zinc-600 bg-white dark:bg-zinc-900 text-[13px]",w="block text-[12px] text-zinc-500 mb-1";async function $(){E(!0),u(null);const{ok:_,data:J}=await h({aktion:"bestellung-aendern",id:t.id,anzahl:Number(p),reserve:Number(m||0),kontakt_name:f,kontakt_email:N,kontakt_telefon:b,klasse:B,lieferadresse:C,notiz:y,...xe(A),gratis:O,lieferort_id:F});if(E(!1),!_){u(typeof J.error=="string"?J.error:"Hat nicht geklappt.");return}await i()}return e.jsxs("div",{className:"border-t border-zinc-200 dark:border-zinc-700 px-4 py-3 bg-zinc-50/60 dark:bg-zinc-800/30",children:[e.jsxs("div",{className:"grid gap-3 sm:grid-cols-3",children:[e.jsxs("div",{children:[e.jsx("label",{className:w,children:"Anzahl"}),e.jsx("input",{className:x,inputMode:"numeric",value:p,onChange:_=>k(_.target.value)})]}),e.jsxs("div",{children:[e.jsx("label",{className:w,children:"Reserve (nicht verrechnet)"}),e.jsx("input",{className:x,inputMode:"numeric",value:m,onChange:_=>j(_.target.value)})]}),e.jsxs("div",{children:[e.jsx("label",{className:w,children:"Name"}),e.jsx("input",{className:x,value:f,onChange:_=>r(_.target.value)})]}),e.jsxs("div",{children:[e.jsx("label",{className:w,children:"E-Mail"}),e.jsx("input",{className:x,value:N,onChange:_=>d(_.target.value)})]}),e.jsxs("div",{children:[e.jsx("label",{className:w,children:"Telefon"}),e.jsx("input",{className:x,value:b,onChange:_=>S(_.target.value)})]}),t.art==="schule"&&e.jsxs("div",{children:[e.jsx("label",{className:w,children:"Klasse"}),e.jsx("input",{className:x,value:B,onChange:_=>z(_.target.value)})]}),e.jsxs("div",{children:[e.jsx("label",{className:w,children:"Wo geschnitzt wird"}),e.jsx(he,{termine:o.termine??[],wert:A,onWahl:P,klasse:x})]}),e.jsxs("div",{children:[e.jsx("label",{className:w,children:"Lieferort"}),e.jsx(me,{orte:o.lieferorte??[],wert:F,onWahl:V,klasse:x})]}),e.jsxs("div",{className:t.art==="schule"?"sm:col-span-3":"sm:col-span-1",children:[e.jsx("label",{className:w,children:"Adresse laut Bestellung"}),e.jsx("input",{className:x,value:C,onChange:_=>L(_.target.value)})]}),e.jsxs("div",{className:"sm:col-span-3",children:[e.jsx("label",{className:w,children:"Notiz"}),e.jsx("textarea",{className:x,rows:2,value:y,onChange:_=>R(_.target.value)})]})]}),t.art!=="privat"&&e.jsxs("label",{className:"mt-3 flex items-center gap-2 text-[13px] text-zinc-700 dark:text-zinc-300 cursor-pointer",children:[e.jsx("input",{type:"checkbox",checked:O,onChange:_=>G(_.target.checked)}),"Der Verein übernimmt die Räben"]}),e.jsxs("div",{className:"mt-3 flex flex-wrap items-center gap-3",children:[e.jsx("button",{disabled:H,onClick:()=>{$()},className:"px-3 py-1.5 rounded-lg bg-red-600 text-white text-[12.5px] font-semibold hover:bg-red-700 disabled:opacity-40",children:"Speichern"}),e.jsxs("button",{disabled:c===t.id,onClick:async()=>{t.bestaetigung_gesendet_am&&!await I(`Die Bestätigung ging am ${K(t.bestaetigung_gesendet_am)} schon raus. Nochmals senden?`)||v(t.id)},className:"text-[12.5px] underline underline-offset-2 hover:text-red-600 disabled:opacity-40",children:["Bestätigung senden",t.bestaetigung_gesendet_am&&` (zuletzt ${K(t.bestaetigung_gesendet_am)})`]}),e.jsx("button",{disabled:c===t.id,onClick:async()=>{await I(t.status==="storniert"?"Stornierung aufheben?":"Diese Bestellung stornieren? Die Zeile bleibt stehen.")&&g(t.id,{status:t.status==="storniert"?"offen":"storniert"})},className:"text-[12.5px] underline underline-offset-2 hover:text-red-600 disabled:opacity-40",children:t.status==="storniert"?"Stornierung aufheben":"stornieren"}),e.jsx("button",{onClick:n,className:"ml-auto text-[12.5px] text-zinc-400 underline underline-offset-2 hover:text-red-600",children:"löschen"})]}),s&&e.jsx("p",{className:"mt-2 text-[12.5px] text-red-600",children:s})]})}function ze({d:t,aktiv:o}){const c=["privat","schule","kita","organisation"].map(h=>({art:h,anzahl:o.filter(i=>i.art===h).reduce((i,g)=>i+g.anzahl+(g.reserve??0),0),stellen:o.filter(i=>i.art===h).length})).filter(h=>h.stellen>0);return e.jsxs("div",{className:"flex flex-col gap-5",children:[e.jsxs("div",{className:"rounded-xl border border-zinc-200 dark:border-zinc-700 px-5 py-4",children:[e.jsx("p",{className:"text-[13px] text-zinc-500 dark:text-zinc-400",children:"Für den Einkauf"}),e.jsxs("p",{className:"text-4xl font-bold tabular-nums text-zinc-900 dark:text-zinc-100 mt-1",children:[t.summe.raeben," ",e.jsx("span",{className:"text-xl font-semibold text-zinc-500",children:"Räben"})]}),e.jsxs("p",{className:"text-[13px] text-zinc-500 dark:text-zinc-400 mt-1",children:["aus ",t.summe.bestellungen," Bestellungen",(t.summe.reserve??0)>0&&`, davon ${t.summe.reserve} Reserve`," · Wert ",W(t.summe.betrag)]})]}),c.length>0&&e.jsx("div",{className:"rounded-xl border border-zinc-200 dark:border-zinc-700 overflow-hidden",children:c.map((h,i)=>e.jsxs("div",{className:`px-4 py-2.5 flex items-baseline gap-3 ${i>0?"border-t border-zinc-100 dark:border-zinc-800":""}`,children:[e.jsx("span",{className:"w-14 text-right font-semibold tabular-nums",children:h.anzahl}),e.jsx("span",{className:"text-[13px] text-zinc-700 dark:text-zinc-300",children:oe[h.art]}),e.jsxs("span",{className:"text-[12.5px] text-zinc-400",children:[h.stellen," ",h.stellen===1?"Stelle":"Stellen"]})]},h.art))}),o.length===0&&e.jsx("p",{className:"text-[13px] text-zinc-400",children:"Noch keine Bestellung. Sobald sich die erste Lehrperson meldet, steht die Zahl hier."})]})}function _e({d:t,aktiv:o,darf:c,busy:h,onStand:i,onPost:g,onReload:v}){const{displayName:n}=de(),p=t.lieferorte??[],[k,m]=l.useState(null),[j,f]=l.useState(null),[r,N]=l.useState(!1),d=new Map;for(const s of o){const u=s.lieferort_id&&p.some(x=>
1x.id===s.lieferort_id)?s.lieferort_id:"";d.set(u,[...d.get(u)??[],s])}const b=d.get("")??[],S=s=>s.reduce((u,x)=>u+x.anzahl+(x.reserve??0),0),B=s=>s.reduce((u,x)=>u+(x.reserve??0),0),z=p.filter(s=>(d.get(s.id)??[]).length>0),C=z.filter(s=>!s.kontakt_name?.trim()||!s.kontakt_telefon?.trim()),L=String(t.einstellungen.raebe_liefertag??""),y=String(t.einstellungen.raebe_lieferant_name??""),R=String(t.einstellungen.raebe_lieferant_email??""),A=L?new Date(`${L}T12:00:00`).toLocaleDateString("de-CH",{weekday:"long",day:"numeric",month:"long",year:"numeric"}):null;function P(){const s=z.reduce(($,_)=>$+S(d.get(_.id)??[]),0),u=z.map(($,_)=>[`${_+1}. ${$.name}: ${S(d.get($.id)??[])} Räben`,$.adresse?` ${$.adresse}`:null,` Kontakt: ${[$.kontakt_name,$.kontakt_telefon].filter(Boolean).join(", ")||"folgt"}`,$.notiz?` ${$.notiz}`:null].filter(Boolean).join(` 2`)),x=`Räbenlieferung Quartierverein Kreis 4${A?`, ${A}`:""}`,w=[`Guten Tag${y?` ${y}`:""}`,"",`Für den Räbeliechtli-Umzug ${t.jahr} bestellen wir insgesamt ${s} Räben. Bitte liefern Sie diese${A?` am ${A}`:""} an die folgenden ${z.length} Orte:`,"",u.join(` 3 4`),"","Vor Ort erreichen Sie jeweils die genannte Kontaktperson. Die Liste zum Ausdrucken finden Sie im Anhang.","","Vielen Dank und freundliche Grüsse",n||"Quartierverein Kreis 4","Quartierverein Kreis 4"].join(` 5`);return{betreff:x,text:w}}function F(){const{betreff:s,text:u}=P();window.location.assign(`mailto:${R.trim()}?subject=${encodeURIComponent(s)}&body=${encodeURIComponent(u.replace(/\n/g,`\r 6`))}`)}async function V(){const{betreff:s,text:u}=P();try{await navigator.clipboard.writeText(`${s} 7 8${u}`),N(!0),setTimeout(()=>N(!1),2e3)}catch{f("Kopieren ging nicht. Bitte die Mail-Vorlage verwenden.")}}async function O(s,u){for(const x of s)x.status==="geliefert"!==u&&await i(x.id,{status:u?"geliefert":"bestaetigt"})}async function G(s,u){const{ok:x,data:w}=await g({aktion:"bestellung-aendern",id:s.id,reserve:u});if(!x){f(typeof w.error=="string"?w.error:"Fehler");return}f(null),await v()}async function H(s,u){const{ok:x,data:w}=await g({aktion:"bestellung-aendern",id:s.id,lieferort_id:u});if(!x){f(typeof w.error=="string"?w.error:"Fehler");return}f(null),await v()}const E=s=>{const u=s.schnitz_event_id?t.schnitz?.[s.schnitz_event_id]:null;return e.jsxs("div",{className:"flex flex-wrap items-center gap-x-3 gap-y-1 text-[13px]",children:[e.jsx("span",{className:"tabular-nums font-semibold w-10 text-right",children:s.anzahl}),c?e.jsx(Se,{b:s,onSpeichern:x=>{G(s,x)}},`${s.id}-${s.reserve}`):s.reserve>0&&e.jsxs("span",{className:"text-zinc-500",children:["+ ",s.reserve," Reserve"]}),e.jsxs("span",{className:"text-zinc-700 dark:text-zinc-300",children:[s.organisation||s.kontakt_name,s.klasse?`, ${s.klasse}`:""]}),e.jsx("span",{className:"text-zinc-400",children:s.kontakt_name}),u&&e.jsxs("span",{className:"text-[12px] text-amber-700 dark:text-amber-400",children:["schnitzt: ",u.ort??u.titel]}),!s.lieferort_id&&s.lieferadresse&&e.jsxs("span",{className:"text-[12px] text-zinc-400",children:["angegeben: ",s.lieferadresse]}),c&&e.jsxs("span",{className:"ml-auto flex items-center gap-2",children:[e.jsxs("select",{value:s.lieferort_id??"",onChange:x=>{H(s,x.target.value)},title:"Anderer Lieferort",className:"px-2 py-1 rounded-lg border border-zinc-300 dark:border-zinc-600 bg-white dark:bg-zinc-900 text-[12px]",children:[e.jsx("option",{value:"",children:"noch offen"}),p.map(x=>e.jsx("option",{value:x.id,children:x.name},x.id))]}),e.jsx("button",{disabled:h===s.id,onClick:()=>i(s.id,{status:s.status==="geliefert"?"bestaetigt":"geliefert"}),className:`px-2.5 py-1 rounded-lg border text-[12px] font-medium disabled:opacity-40 ${s.status==="geliefert"?"border-green-600 text-green-700 dark:text-green-400":"border-zinc-300 dark:border-zinc-600 hover:border-green-500"}`,children:s.status==="geliefert"?"geliefert":"als geliefert markieren"})]})]},s.id)};return e.jsxs("div",{className:"flex flex-col gap-5",children:[j&&e.jsx("p",{className:"text-[13px] text-red-600",children:j}),e.jsx(ye,{d:t,darf:c,onReload:v}),c&&z.length>0&&e.jsxs("div",{className:"flex flex-col gap-2",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-3",children:[e.jsx("button",{onClick:F,className:"px-4 py-2 rounded-lg bg-red-600 text-white text-[13px] font-semibold hover:bg-red-700",children:"Mail an den Lieferanten vorbereiten"}),e.jsx("button",{onClick:()=>{V()},className:"text-[12.5px] underline underline-offset-2 hover:text-red-600",children:r?"kopiert":"Text kopieren"}),t.lieferliste_pdf&&e.jsxs(e.Fragment,{children:[e.jsx("a",{href:t.lieferliste_pdf,target:"_blank",rel:"noreferrer",className:"text-[12.5px] underline underline-offset-2 hover:text-red-600",children:"PDF ansehen"}),e.jsx("a",{href:`${t.lieferliste_pdf}
8&dl=1`,className:"text-[12.5px] underline underline-offset-2 hover:text-red-600",children:"PDF herunterladen"})]})]}),e.jsx("p",{className:"text-[12px] text-zinc-400 -mt-1",children:"Die Vorlage öffnet dein Mailprogramm mit fertigem Text; verschickt wird erst dort. Das PDF zum Ausdrucken hängst du von Hand an, ein Mail-Link kann keine Anhänge mitgeben."}),(b.length>0||C.length>0||!L||!R)&&e.jsxs("p",{className:"rounded-lg border border-amber-300 dark:border-amber-900 bg-amber-50 dark:bg-amber-950/20 px-3 py-2 text-[12.5px] text-amber-800 dark:text-amber-300",children:["Vor dem Versand:",!L&&" Liefertag fehlt.",!R&&" Mailadresse des Lieferanten fehlt.",b.length>0&&` ${b.length} ${b.length===1?"Bestellung hat":"Bestellungen haben"} noch keinen Lieferort und ${b.length===1?"fehlt":"fehlen"} in der Mail.`,C.length>0&&` Kontaktperson oder Handy fehlt bei ${C.map(s=>s.name).join(", ")}.`]})]}),b.length>0&&e.jsxs("div",{className:"rounded-xl border border-amber-300 dark:border-amber-900 bg-amber-50/60 dark:bg-amber-950/20 px-4 py-3",children:[e.jsxs("div",{className:"flex flex-wrap items-baseline gap-x-3",children:[e.jsx("span",{className:"font-semibold text-zinc-900 dark:text-zinc-100",children:"Noch ohne Lieferort"}),e.jsxs("span",{className:"text-[13px] font-semibold tabular-nums",children:[S(b)," Räben"]})]}),e.jsx("p",{className:"text-[12.5px] text-zinc-500 mt-0.5",children:"Rechts auswählen, wohin der Lieferant sie bringt."}),e.jsx("div",{className:"mt-2 flex flex-col gap-1.5",children:b.map(E)})]}),p.map(s=>{const u=d.get(s.id)??[],x=u.length>0&&u.every(w=>w.status==="geliefert");return k===s.id?e.jsx(ce,{ort:s,jahr:t.jahr,anzahl:u.length,onPost:g,onFertig:async()=>{m(null),await v()},onAbbrechen:()=>m(null)},s.id):e.jsxs("div",{className:`rounded-xl border px-4 py-3 ${x?"border-green-300 dark:border-green-900 bg-green-50/60 dark:bg-green-950/10":"border-zinc-200 dark:border-zinc-700"}`,children:[e.jsxs("div",{className:"flex flex-wrap items-baseline gap-x-3",children:[e.jsx("span",{className:"font-semibold text-zinc-900 dark:text-zinc-100",children:s.name}),e.jsxs("span",{className:"text-[13px] font-semibold tabular-nums",children:[S(u)," Räben"]}),B(u)>0&&e.jsxs("span",{className:"text-[12.5px] text-zinc-500",children:["davon ",B(u)," Reserve"]}),x&&e.jsx("span",{className:"text-[12px] font-semibold text-green-700 dark:text-green-400",children:"geliefert"}),c&&e.jsxs("span",{className:"ml-auto flex gap-3",children:[u.length>0&&e.jsx("button",{onClick:()=>{O(u,!x)},className:"text-[12.5px] underline underline-offset-2 hover:text-red-600",children:x?"Lieferung zurücknehmen":"alle als geliefert markieren"}),e.jsx("button",{onClick:()=>m(s.id),className:"text-[12.5px] underline underline-offset-2 hover:text-red-600",children:"bearbeiten"})]})]}),e.jsx("p",{className:"text-[13px] text-zinc-600 dark:text-zinc-400 mt-0.5",children:s.adresse??e.jsx("span",{className:"text-amber-700 dark:text-amber-400",children:"Adresse fehlt"})}),e.jsxs("p",{className:"text-[13px] mt-0.5",children:[s.kontakt_name||s.kontakt_telefon?e.jsxs("span",{className:"text-zinc-700 dark:text-zinc-300",children:["Kontakt: ",[s.kontakt_name,s.kontakt_telefon].filter(Boolean).join(", ")]}):e.jsx("span",{className:"text-amber-700 dark:text-amber-400",children:"Kontaktperson mit Handy fehlt"}),s.notiz&&e.jsxs("span",{className:"text-zinc-400",children:[" · ",s.notiz]})]}),u.length>0?e.jsx("div",{className:"mt-2 flex flex-col gap-1.5",children:u.map(E)}):e.jsx("p",{className:"mt-2 text-[12.5px] text-zinc-400",children:"Noch keine Bestellung an diesen Ort. Er fehlt in der Mail."})]},s.id)}),c&&(k==="neu"?e.jsx(ce,{ort:null,jahr:t.jahr,anzahl:0,onPost:g,onFertig:async()=>{m(null),await v()},onAbbrechen:()=>m(null)}):e.jsx("button",{onClick:()=>m("neu"),className:"self-start text-[13px] font-medium text-red-600 hover:underline underline-offset-2",children:"+ Lieferort anlegen"}))]})}function Se({b:t,onSpeichern:o}){const[c,h]=l.useState(t.reserve?String(t.reserve):""),i=()=>{const g=Math.max(0,Math.floor(Number(c)||0));g!==(t.reserve??0)&&o(g)};return e.jsxs("label",{className:"flex items-center gap-1 text-zinc-500",title:"Reserve, wird nicht verrechnet",children:["+",e.jsx("input",{value:c,inputMode:"numeric",placeholder:"0",onChange:g=>h(g.target.value.replace(/[^0-9]/g,"")),onBlur:i,onKeyDown:g=>{g.key==="Enter"&&g.target.blur()},className:"w-12 px-1.5 py-0.5 rounded-md border border-zinc-300 dark:border-zinc-600 bg-white dark:bg-zinc-900 text-[12.5px] tabular-nums text-right"}),e.jsx("span",{className:"text-[12px]",children:"Reserve"})]})}function ye({d:t,darf:o,onReload:c}){const[h,i]=l.useState(String(t.einstellungen.raebe_liefertag??"")),[g,v]=l.useState(String(t.einstellungen.raebe_lieferant_name??"")),[n,p]=l.useState(String(t.einstellungen.raebe_lieferant_email??"")),[k,m]=l.useState(null),j=h!==String(t.einstellungen.raebe_liefertag??"")||g!==String(t.einstellungen.raebe_lieferant_name??"")||n!==String(t.einstellungen.raebe_lieferant_email??"");async function f(){m(null);const d=await Z("/api/admin/raeben",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({aktion:"einstellungen",werte:{raebe_liefertag:h,raebe_lieferant_name:g.trim(),raebe_lieferant_email:n.trim()}})}),b=await d.json().catch(()=>({}));if(!d.ok){m(b.error??"Konnte nicht gespeichert werden.");return}await c()}const r="w-full px-2.5 py-1.5 rounded-lg border border-zinc-300 dark:border-zinc-600 bg-white dark:bg-zinc-900 text-[13px]",N="block text-[12px] text-zinc-500 mb-1";return e.jsxs("div",{className:"rounded-xl border border-zinc-200 dark:border-zinc-700 px-4 py-3",children:[e.jsxs("div",{className:"grid gap-3 sm:grid-cols-3",children:[e.jsxs("div",{children:[e.jsx("label",{className:N,children:"Liefertag"}),e.jsx("input",{type:"date",className:r,value:h,disabled:!o,onChange:d=>i(d.target.value)})]}),e.jsxs("div",{children:[e.jsx("label",{className:N,children:"Lieferant"}),e.jsx("input",{className:r,value:g,disabled:!o,onChange:d=>v(d.target.value),placeholder:"Name, für die Anrede"})]}),e.jsxs("div",{children:[e.jsx("label",{className:N,children:"E-Mail des Lieferanten"}),e.jsx("input",{type:"email",className:r,value:n,disabled:!o,onChange:d=>p(d.target.value)})]})]}),o&&j&&e.jsxs("div",{className:"mt-2 flex items-center gap-3",children:[e.jsx("button",{onClick:()=>{f()},className:"px-3 py-1.5 rounded-lg bg-red-600 text-white text-[12.5px] font-semibold hover:bg-red-700",children:"Speichern"}),k&&e.jsx("span",{className:"text-[12.5px] text-red-600",children:k})]})]})}function ce({ort:t,jahr:o,anzahl:c,onPost:h,onFertig:i,onAbbrechen:g}){const[v,n]=l.useState(t?.name??""),[p,k]=l.useState(t?.adresse??""),[m,j]=l.useState(t?.kontakt_name??""),[f,r]=l.useState(t?.kontakt_telefon??""),[N,d]=l.useState(t?.notiz??""),[b,S]=l.useState(null);async function B(){const{ok:y,data:R}=await h({aktion:"lieferort-speichern",id:t?.id??"",jahr:o,name:v,adresse:p,kontakt_name:m,kontakt_telefon:f,notiz:N});if(!y){S(typeof R.error=="string"?R.error:"Hat nicht geklappt.");return}await i()}async function z(){if(!t||!await I(c>0?`Lieferort «${t.name}» löschen? Die ${c}
8 Bestellungen bleiben und stehen danach unter «Noch ohne Lieferort».`:`Lieferort «${t.name}» löschen?`))return;const{ok:y,data:R}=await h({aktion:"lieferort-loeschen",id:t.id});if(!y){S(typeof R.error=="string"?R.error:"Hat nicht geklappt.");return}await i()}const C="w-full px-2.5 py-1.5 rounded-lg border border-zinc-300 dark:border-zinc-600 bg-white dark:bg-zinc-900 text-[13px]",L="block text-[12px] text-zinc-500 mb-1";return e.jsxs("div",{className:"rounded-xl border border-red-300 dark:border-red-900 px-4 py-3 bg-zinc-50/60 dark:bg-zinc-800/30",children:[e.jsx("p",{className:"text-[13px] font-semibold mb-2",children:t?"Lieferort bearbeiten":"Neuer Lieferort"}),e.jsxs("div",{className:"grid gap-3 sm:grid-cols-2",children:[e.jsxs("div",{children:[e.jsx("label",{className:L,children:"Name"}),e.jsx("input",{className:C,value:v,onChange:y=>n(y.target.value),placeholder:"Schulhaus Hardau"})]}),e.jsxs("div",{children:[e.jsx("label",{className:L,children:"Adresse"}),e.jsx("input",{className:C,value:p,onChange:y=>k(y.target.value),placeholder:"Strasse, PLZ Ort"})]}),e.jsxs("div",{children:[e.jsx("label",{className:L,children:"Kontaktperson vor Ort"}),e.jsx("input",{className:C,value:m,onChange:y=>j(y.target.value)})]}),e.jsxs("div",{children:[e.jsx("label",{className:L,children:"Handy"}),e.jsx("input",{className:C,value:f,onChange:y=>r(y.target.value),placeholder:"079 123 45 67"})]}),e.jsxs("div",{className:"sm:col-span-2",children:[e.jsx("label",{className:L,children:"Hinweis für den Lieferanten"}),e.jsx("input",{className:C,value:N,onChange:y=>d(y.target.value),placeholder:"z. B. Eingang Hof, beim Hauswart melden"})]})]}),e.jsxs("div",{className:"mt-3 flex flex-wrap items-center gap-3",children:[e.jsx("button",{disabled:!v.trim(),onClick:()=>{B()},className:"px-3 py-1.5 rounded-lg bg-red-600 text-white text-[12.5px] font-semibold hover:bg-red-700 disabled:opacity-40",children:"Speichern"}),e.jsx("button",{onClick:g,className:"text-[12.5px] underline underline-offset-2 hover:text-red-600",children:"Abbrechen"}),t&&e.jsx("button",{onClick:()=>{z()},className:"ml-auto text-[12.5px] text-zinc-400 underline underline-offset-2 hover:text-red-600",children:"löschen"})]}),b&&e.jsx("p",{className:"mt-2 text-[12.5px] text-red-600",children:b})]})}function we({d:t,darf:o,onPost:c,onFertig:h}){const[i,g]=l.useState("privat"),[v,n]=l.useState(""),[p,k]=l.useState([]),[m,j]=l.useState(null),[f,r]=l.useState(""),[N,d]=l.useState(""),[b,S]=l.useState(""),[B,z]=l.useState(""),[C,L]=l.useState(""),[y,R]=l.useState(""),[A,P]=l.useState(""),[F,V]=l.useState(""),[O,G]=l.useState(""),[H,E]=l.useState(""),[s,u]=l.useState(""),[x,w]=l.useState(""),[$,_]=l.useState(!1),[J,Y]=l.useState(!1),[ee,te]=l.useState(null),ne=Number(t.einstellungen.raebe_preis??1.8),U=String(t.einstellungen.raebe_frist??"")||null,se=Number(t.einstellungen.raebe_max_total??2e3),ae=t.bestellungen.filter(a=>a.status!=="storniert").reduce((a,T)=>a+T.anzahl+(T.reserve??0),0),ue=new Date().toISOString().slice(0,10),Q=!!A&&!A.startsWith("ort:"),re=!!(U&&ue>U),q=Number(F||0)+Number(O||0),le=q>0&&ae+q>se;if(!o)return e.jsx("p",{className:"text-[13px] text-zinc-400",children:"Dir fehlt das Recht dafür."});async function ge(a){if(n(a),j(null),a.trim().length<2){k([]);return}const{ok:T,data:fe}=await c({aktion:"kontakt-suche",q:a});T&&k(fe.treffer??[])}async function pe(){Y(!0),te(null);const{ok:a,data:T}=await c({aktion:"bestellung-neu",art:i,person_id:m?.person_id??"",membership_id:m?.membership_id??"",kontakt_name:f,kontakt_email:N,kontakt_telefon:b,organisation:B,schule_id:C,klasse:y,...xe(A),anzahl:Number(F),reserve:Number(O||0),lieferadresse:H,notiz:x,gratis:$,lieferort_id:s});if(Y(!1),!a){te(typeof T.error=="string"?T.error:"Hat nicht geklappt.");return}await h()}const D="w-full px-3 py-2 rounded-lg border border-zinc-300 dark:border-zinc-600 bg-white dark:bg-zinc-900 text-sm",M="block text-[12.5px] font-medium text-zinc-600 dark:text-zinc-400 mb-1";return e.jsxs("div",{className:"rounded-xl border border-zinc-200 dark:border-zinc-700 p-4 max-w-3xl",children:[e.jsx("div",{className:"flex flex-wrap gap-1.5",children:[["privat","Privatperson"],["schule","Schule"],["kita","Kita"],["organisation","Organisation"]].map(([a,T])=>e.jsx("button",{onClick:()=>g(a),className:`px-3 py-1.5 rounded-lg text-[12.5px] font-medium ${i===a?"bg-red-600 text-white":"border border-zinc-300 dark:border-zinc-600 hover:bg-zinc-50 dark:hover:bg-zinc-800"}`,children:T},a))}),e.jsxs("div",{className:"mt-4",children:[e.jsx("label",{className:M,children:"Kontakt suchen"}
8),e.jsx("input",{className:D,value:v,onChange:a=>{ge(a.target.value)},placeholder:"Name oder Mailadresse, ab zwei Buchstaben"}),p.length>0&&!m&&e.jsx("div",{className:"mt-1.5 flex flex-col gap-1",children:p.map(a=>e.jsxs("button",{onClick:()=>{j({person_id:a.person_id,membership_id:a.membership_id}),r(a.name),d(a.email),a.telefon&&S(a.telefon),a.adresse&&E(a.adresse),a.organisation&&z(a.organisation),n(a.name),k([])},className:"text-left px-3 py-1.5 rounded-lg border border-zinc-200 dark:border-zinc-700 text-[13px] hover:border-red-400",children:[e.jsx("span",{className:"font-medium",children:a.name}),a.email&&e.jsxs("span",{className:"text-zinc-400",children:[" · ",a.email]}),a.organisation&&a.organisation!==a.name&&e.jsxs("span",{className:"text-zinc-400",children:[" · ",a.organisation]}),a.member_no!=null&&e.jsxs("span",{className:"text-zinc-400",children:[" · Nr. ",a.member_no]}),a.adresse&&e.jsx("span",{className:"block text-[12px] text-zinc-400",children:a.adresse})]},`${a.person_id??""}-${a.membership_id??""}`))}),m&&e.jsxs("p",{className:"mt-1 text-[12px] text-green-700 dark:text-green-400",children:["Bestehender Kontakt gewählt."," ",e.jsx("button",{onClick:()=>{j(null),n(""),r(""),d("")},className:"underline underline-offset-2",children:"lösen"})]}),e.jsx("p",{className:"mt-1 text-[12px] text-zinc-400",children:"Nicht gefunden? Name und Mailadresse unten eintippen, dann entsteht ein neuer Kontakt."})]}),e.jsxs("div",{className:"mt-4 grid gap-3 sm:grid-cols-2",children:[e.jsxs("div",{children:[e.jsx("label",{className:M,children:i==="schule"?"Name der Lehrperson":"Name"}),e.jsx("input",{className:D,value:f,onChange:a=>r(a.target.value)})]}),e.jsxs("div",{children:[e.jsx("label",{className:M,children:"E-Mail"}),e.jsx("input",{className:D,type:"email",value:N,onChange:a=>d(a.target.value)})]}),e.jsxs("div",{children:[e.jsx("label",{className:M,children:"Telefon"}),e.jsx("input",{className:D,value:b,onChange:a=>S(a.target.value)})]}),e.jsxs("div",{children:[e.jsx("label",{className:M,children:"Anzahl Räben"}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("input",{className:D,inputMode:"numeric",value:F,onChange:a=>V(a.target.value)}),e.jsx("span",{className:"text-[12.5px] text-zinc-500 shrink-0",children:"+ Reserve"}),e.jsx("input",{className:`${D} !w-20`,inputMode:"numeric",value:O,placeholder:"0",onChange:a=>G(a.target.value.replace(/[^0-9]/g,""))})]})]}),i==="schule"&&e.jsxs(e.Fragment,{children:[e.jsxs("div",{children:[e.jsx("label",{className:M,children:"Schule"}),e.jsxs("select",{className:D,value:C,onChange:a=>L(a.target.value),children:[e.jsx("option",{value:"",children:"Bitte auswählen"}),(t.schulen??[]).map(a=>e.jsx("option",{value:a.id,children:a.name},a.id))]})]}),e.jsxs("div",{children:[e.jsx("label",{className:M,children:"Klasse"}),e.jsx("input",{className:D,value:y,onChange:a=>R(a.target.value),placeholder:"3b"})]})]}),(i==="kita"||i==="organisation")&&e.jsxs("div",{className:"sm:col-span-2",children:[e.jsx("label",{className:M,children:"Organisation"}),e.jsx("input",{className:D,value:B,onChange:a=>z(a.target.value)})]}),e.jsxs("div",{children:[e.jsx("label",{className:M,children:"Wo geschnitzt wird"}),e.jsx(he,{termine:t.termine??[],wert:A,onWahl:P,klasse:D})]}),e.jsxs("div",{children:[e.jsx("label",{className:M,children:"Lieferadresse"}),e.jsx("input",{className:D,value:H,onChange:a=>E(a.target.value),placeholder:Q?"wird abgeholt":"Strasse, PLZ Ort"}),Q&&e.jsx("p",{className:"mt-1 text-[12px] text-zinc-400",children:"Wird am Schnitz-Nachmittag abgeholt, eine Adresse braucht es nicht."}),!Q&&!H.trim()&&e.jsx("p",{className:"mt-1 text-[12px] text-amber-700 dark:text-amber-400",children:"Ohne Nachmittag müssen wir liefern. Bitte die Adresse eintragen."})]}),e.jsxs("div",{children:[e.jsx("label",{className:M,children:"Lieferort"}),e.jsx(me,{orte:t.lieferorte??[],wert:s,onWahl:u,klasse:D}),e.jsx("p",{className:"mt-1 text-[12px] text-zinc-400",children:"Wohin der Lieferant die Räben bringt. Neue Orte legst du in der Lieferliste an."})]}),e.jsxs("div",{className:"sm:col-span-2",children:[e.jsx("label",{className:M,children:"Notiz"}),e.jsx("textarea",{className:D,rows:2,value:x,onChange:a=>w(a.target.value),placeholder:"Woher die Bestellung kam, was besprochen wurde"})]})]}),i!=="privat"&&e.jsxs("label",{className:"mt-3 flex items-start gap-2.5 text-[13px] text-zinc-700 dark:text-zinc-300 cursor-pointer",children:[e.jsx("input",{type:"checkbox",checked:$,onChange:a=>_(a.target.checked),className:"mt-0.5"}),e.jsxs("span",{children:["Der Verein übernimmt die Räben",e.jsx("span",{className:"block text-[12px] text-zinc-500",children:"Preis null, keine Rechnung. Sie zählen im Einkauf trotzdem mit. Den Grund bitte in die Notiz."})]})]}),(re||le)&&e.jsxs("p",{className:"mt-3 rounded-lg border border-amber-300 dark:border-amber-900 bg-amber-50 dark:bg-amber-950/20 px-3 py-2 text-[12.5px] text-amber-800 dark:text-amber-300",children:[re&&`Die Bestellfrist war am ${new Date(`${U}T12:00:00`).toLocaleDateString("de-CH")}. `,le&&`Damit wären es ${ae+q} von höchstens ${se} Räben. `,"Erfassen geht trotzdem, du entscheidest."]}),e.jsxs("div",{className:"mt-4 flex flex-wrap items-center gap-3",children:[e.jsx("button",{disabled:J||!f.trim()||!N.trim()||!F||i==="privat"&&!A,onClick:()=>{pe()},className:"px-4 py-2 rounded-lg bg-red-600 text-white text-[13px] font-semibold hover:bg-red-700 disabled:opacity-40",children:"Bestellung erfassen"}),e.jsx("span",{className:"text-[12.5px] text-zinc-500",children:$||i==="privat"?"Der Verein übernimmt die Räben.":`${F||0} à ${W(ne)} = ${W(Number(F||0)*ne)}`}),e.jsx("span",{className:"text-[12px] text-zinc-400",children:"Die Bestätigung verschickst du danach in der Abrechnung."})]}),ee&&e.jsx("p",{className:"mt-2 text-[13px] text-red-600",children:ee})]})}function Ce({aktiv:t,rechnungen:o,darf:c,busy:h,onStand:i,onBestaetigen:g}){if(t.length===0)return e.jsx("p",{className:"text-[13px] text-zinc-400",children:"Nichts abzurechnen."});async function v(n,p,k){for(const m of n.zeilen){const j=t.find(r=>r.id===m.id),f=p==="rechnung"?!!j?.rechnung_gestellt_am:!!j?.bezahlt_am;j&&f!==k&&await i(j.id,{[p]:k})}}return e.jsxs("div",{className:"flex flex-col gap-5",children:[o.length>0&&e.jsxs("div",{className:"flex flex-col gap-3",children:[e.jsxs("div",{children:[e.jsx("p",{className:"text-[12px] font-semibold uppercase tracking-wide text-zinc-400",children:"Rechnungen"}),e.jsx("p",{className:"text-[12.5px] text-zinc-500 mt-0.5",children:"Je Schule eine Sammelrechnung mit allen Klassen, je Selbstzahler eine eigene, alle mit QR-Zahlteil. PDF herunterladen und verschicken. Die Reserve steht nicht darauf, was der Verein übernimmt, auch nicht."})]}),o.map(n=>{const p=n.zeilen.map(f=>t.find(r=>
8r.id===f.id)).filter(Boolean),k=p.length>0&&p.every(f=>f.rechnung_gestellt_am),m=p.length>0&&p.every(f=>f.bezahlt_am),j=!n.adresse||!n.zip||!n.city;return e.jsxs("div",{className:`rounded-xl border px-4 py-3 ${m?"border-green-300 dark:border-green-900 bg-green-50/60 dark:bg-green-950/10":"border-zinc-200 dark:border-zinc-700"}`,children:[e.jsxs("div",{className:"flex flex-wrap items-baseline gap-x-3 gap-y-1",children:[e.jsx("span",{className:"font-semibold text-zinc-900 dark:text-zinc-100",children:n.empfaenger}),e.jsxs("span",{className:"text-[12.5px] text-zinc-400",children:[n.art==="schule"?"Sammelrechnung Schule":"Selbstzahler",n.zusatz&&n.art!=="schule"?`, ${n.zusatz}`:""]}),e.jsxs("span",{className:"text-[13px] text-zinc-500",children:[n.zeilen.length," ",n.zeilen.length===1?"Position":"Positionen"," · ",n.anzahl," Räben"]}),e.jsx("span",{className:"text-[13px] font-semibold tabular-nums",children:W(n.betrag)}),m?e.jsx("span",{className:"text-[12px] font-semibold text-green-700 dark:text-green-400",children:"bezahlt"}):k&&e.jsx("span",{className:"text-[12px] font-semibold text-zinc-500",children:"gestellt, offen"}),e.jsxs("span",{className:"ml-auto flex flex-wrap gap-3",children:[e.jsx("a",{href:n.pdf,target:"_blank",rel:"noreferrer",className:"text-[12.5px] underline underline-offset-2 hover:text-red-600",children:"PDF ansehen"}),e.jsx("a",{href:`${n.pdf}&dl=1`,className:"text-[12.5px] underline underline-offset-2 hover:text-red-600",children:"herunterladen"})]})]}),e.jsx("div",{className:"mt-1.5 text-[12.5px] text-zinc-500",children:n.zeilen.map(f=>`${f.text}: ${f.anzahl}`).join(" · ")}),j&&e.jsxs("p",{className:"mt-1 text-[12.5px] text-amber-700 dark:text-amber-400",children:["Die Rechnungsadresse fehlt. Bitte beim Mitglied",n.member_no!=null?` Nr. ${n.member_no}`:""," ergänzen, sonst steht auf der Rechnung keine Adresse."]}),c&&e.jsxs("div",{className:"mt-2 flex flex-wrap gap-4",children:[e.jsx("button",{onClick:()=>{v(n,"rechnung",!k)},className:"text-[12.5px] underline underline-offset-2 hover:text-red-600",children:k?"doch nicht gestellt":"als gestellt markieren"}),e.jsx("button",{onClick:()=>{v(n,"bezahlt",!m)},className:"text-[12.5px] underline underline-offset-2 hover:text-red-600",children:m?"doch nicht bezahlt":"als bezahlt markieren"})]})]},`${n.art}-${n.empfaenger_id}`)})]}),e.jsx("div",{className:"rounded-xl border border-zinc-200 dark:border-zinc-700 overflow-x-auto",children:e.jsxs("table",{className:"w-full text-[13px]",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"text-left text-[11.5px] uppercase tracking-wide text-zinc-400",children:[e.jsx("th",{className:"px-4 py-2 font-semibold",children:"Wer"}),e.jsx("th",{className:"px-3 py-2 font-semibold text-right",children:"Räben"}),e.jsx("th",{className:"px-3 py-2 font-semibold text-right",children:"Betrag"}),e.jsx("th",{className:"px-3 py-2 font-semibold",children:"Rechnung"}),e.jsx("th",{className:"px-3 py-2 font-semibold",children:"Bezahlt"}),e.jsx("th",{className:"px-3 py-2 font-semibold",children:"Bestätigung"})]})}),e.jsx("tbody",{children:t.map(n=>e.jsxs("tr",{className:"border-t border-zinc-100 dark:border-zinc-800",children:[e.jsxs("td",{className:"px-4 py-2.5",children:[e.jsx("span",{className:"font-medium text-zinc-800 dark:text-zinc-200",children:n.organisation||n.kontakt_name}),n.klasse&&e.jsxs("span",{className:"text-zinc-400",children:[" · ",n.klasse]}),e.jsxs("div",{className:"text-[12px] text-zinc-400",children:[n.kontakt_email," · zahlt ",je[n.zahler]??n.zahler]})]}),e.jsx("td",{className:"px-3 py-2.5 text-right tabular-nums",children:n.anzahl}),e.jsx("td",{className:"px-3 py-2.5 text-right tabular-nums font-semibold",children:W(n.betrag)}),e.jsx("td",{className:"px-3 py-2.5",children:n.zahler==="qv"?e.jsx("span",{className:"text-[12.5px] text-zinc-400",children:"entfällt"}):c?e.jsx("button",{disabled:h===n.id,onClick:()=>i(n.id,{rechnung:!n.rechnung_gestellt_am}),className:"text-[12.5px] underline underline-offset-2 hover:text-red-600 disabled:opacity-40",children:n.rechnung_gestellt_am?K(n.rechnung_gestellt_am):"gestellt?"}):K(n.rechnung_gestellt_am)}),e.jsx("td",{className:"px-3 py-2.5",children:c?e.jsx("button",{disabled:h===n.id,onClick:()=>i(n.id,{bezahlt:!n.bezahlt_am}),className:`text-[12.5px] underline underline-offset-2 disabled:opacity-40 ${n.bezahlt_am?"text-green-700 dark:text-green-400":"hover:text-red-600"}`,children:n.bezahlt_am?K(n.bezahlt_am):"offen"}):K(n.bezahlt_am)}),e.jsx("td",{className:"px-3 py-2.5",children:c?e.jsx("button",{disabled:h===n.id,onClick:async()=>{n.bestaetigung_gesendet_am&&!await I(`Die Bestätigung wurde am ${K(n.bestaetigung_gesendet_am)} schon verschickt. Nochmals senden?`)||g(n.id)},className:`text-[12.5px] underline underline-offset-2 disabled:opacity-40 ${n.bestaetigung_gesendet_am?"text-zinc-500":"hover:text-red-600"}`,children:n.bestaetigung_gesendet_am?K(n.bestaetigung_gesendet_am):"senden"}):K(n.bestaetigung_gesendet_am)})]},n.id))})]})})]})}function $e({werte:t,darf:o,onGespeichert:c}){const[h,i]=l.useState(String(t.raebe_preis??"1.50")),[g,v]=l.useState(String(t.raebe_frist??"")==="null"?"":String(t.raebe_frist??"")),[n,p]=l.useState(String(t.raebe_max_pro_bestellung??"300")),[k,m]=l.useState(String(t.raebe_max_total??"2000")),[j,f]=l.useState(t.raebe_bestellung_offen===!0),[r,N]=l.useState(!1),[d,b]=l.useState(null);async function S(){N(!0),b(null);const z=await Z("/api/admin/raeben",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({aktion:"einstellungen",werte:{raebe_preis:Number(h)||0,raebe_frist:g||null,raebe_max_pro_bestellung:Number(n)||0,raebe_max_total:Number(k)||0,raebe_bestellung_offen:j}})});N(!1);const C=await z.json().catch(()=>({}));b(z.ok?"Gespeichert.":`Konnte nicht gespeichert werden${C?.error?`: ${C.error}`:"."}`),z.ok&&c()}const B="w-40 px-3 py-2 rounded-lg border border-zinc-300 dark:border-zinc-600 bg-white dark:bg-zinc-900 text-sm";return e.jsxs("div",{className:"flex flex-col gap-4 max-w-lg",children:[e.jsxs("label",{className:"flex items-center gap-2.5 text-sm",children:[e.jsx("input",{type:"checkbox",checked:j,disabled:!o,onChange:z=>f(z.target.checked)}),e.jsx("span",{className:"font-medium",children:"Bestellung ist offen"})]}),e.jsx("p",{className:"text-[12.5px] text-zinc-500 dark:text-zinc-400 -mt-2",children:"Solange dieser Haken fehlt, zeigt die öffentliche Seite kein Formular."}),e.jsxs("label",{className:"flex items-center justify-between gap-3 text-sm",children:[e.jsx("span",{children:"Preis je Räbe (inkl. LED-Kerze)"}),e.jsx("input",{value:h,onChange:z=>i(z.target.value),disabled:!o,inputMode:"decimal",className:B})]}),e.jsx("p",{className:"text-[12.5px] text-zinc-500 dark:text-zinc-400 -mt-2",children:"Wirkt nur auf neue Bestellungen. Bereits bestellte behalten ihren Preis."}),e.jsxs("label",{className:"flex items-center justify-between gap-3 text-sm",children:[e.jsx("span",{children:"Bestellfrist"}),e.jsx("input",{type:"date",value:g,onChange:z=>v(z.target.value),disabled:!o,className:B})]}),e.jsxs("label",{className:"flex items-center justify-between gap-3 text-sm",children:[e.jsx("span",{children:"Höchstens je Bestellung"}),e.jsx("input",{value:n,onChange:z=>p(z.target.value),disabled:!o,inputMode:"numeric",className:B})]}),e.jsxs("label",{className:"flex items-center justify-between gap-3 text-sm",children:[e.jsx("span",{children:"Höchstens insgesamt"}),e.jsx("input",{value:k,onChange:z=>m(z.target.value),disabled:!o,inputMode:"numeric",className:B})]}),o&&e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("button",{onClick:S,disabled:r,className:"px-4 py-2 rounded-lg bg-red-600 text-white text-sm font-semibold hover:bg-red-700 disabled:opacity-40",children:r?"Einen Momentâ¦":"Speichern"}),d&&e.jsx("span",{className:"text-[13px] text-zinc-500",children:d})]})]})}export{Me as AdminRaeben};
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.