1import{r as c,j as e,Q as M,L as J,s as H}from"./index-CLTM18rh.js";import{a as F}from"./authFetch-u5HjDcUX.js";import{b as W}from"./bestaetige-CpNFuPQa.js";import{g as G,m as Q}from"./klappzustand-DoGK2Y88.js";import{A as X}from"./Aktivitaet-Blgc-LAk.js";import{D as Y}from"./DialogHuelle-BTuNtT3I.js";import{b as ee}from"./Vernehmlassung-BC7U7YjK.js";import{A as te}from"./AuditLogViewer-CgrB1xOp.js";import{R as ne}from"./Filterleiste-Dovi1-bW.js";import{u as re}from"./AdminContext-B2hLlcqc.js";import{C as ae}from"./chevron-right-D-hIC4R2.js";import"./Beteiligte-D6s97lAJ.js";const O=/M(\d+)[, ](\d+)\s*h(\d+)v1H\d+z/g;function se(){return e.jsxs("g",{children:[e.jsx("defs",{children:e.jsx("clipPath",{id:"raebe-koerper",children:e.jsx("path",{d:`M50 27 C76 27 88 39 88 53 C88 65 74 79 62 89 C57 93 53 96 50 99 2 C47 96 43 93 38 89 C26 79 12 65 12 53 C12 39 24 27 50 27 Z`})})}),e.jsx("path",{d:"M47 29 C41 13 29 6 16 9 C18 21 30 29 45 30 Z",fill:"#4d7c0f"}),e.jsx("path",{d:"M53 29 C59 12 71 5 84 8 C82 21 70 29 55 30 Z",fill:"#65a30d"}),e.jsx("path",{d:`M50 27 C76 27 88 39 88 53 C88 65 74 79 62 89 C57 93 53 96 50 99 3 C47 96 43 93 38 89 C26 79 12 65 12 53 C12 39 24 27 50 27 Z`,fill:"#FFFFFF",stroke:"#4a044e",strokeWidth:5,strokeLinejoin:"round"}),e.jsx("rect",{x:0,y:0,width:100,height:48,fill:"#a21caf",clipPath:"url(#raebe-koerper)"})]})}function le(){return e.jsx("g",{children:e.jsxs("g",{fill:"none",stroke:"#dc2626",strokeWidth:9,strokeLinecap:"round",strokeLinejoin:"round",children:[e.jsx("circle",{cx:"50",cy:"20",r:"9"}),e.jsx("path",{d:"M50 29 V86"}),e.jsx("path",{d:"M30 42 H70"}),e.jsx("path",{d:"M20 62 C20 82 34 90 50 90 C66 90 80 82 80 62"})]})})}function ie({wert:t,groesse:g,zeichen:k,stufe:u,farbe:h="#18181B"}){const b=c.useRef(null),[j,m]=c.useState(null);c.useEffect(()=>{const z=b.current?.querySelector("svg"),y=z?.querySelectorAll("path"),A=y&&y.length?y[y.length-1]:null,$=z?.getAttribute("viewBox")?.split(" ");if(!A||!$){m(null);return}m({d:A.getAttribute("d")??"",kante:Number($[3])})},[t,u]);const N=c.useMemo(()=>{if(!j)return[];const z=[];O.lastIndex=0;let y;for(;(y=O.exec(j.d))!==null;){const A=Number(y[1]),$=Number(y[2]),L=Number(y[3]);for(let w=0;w<L;w++)z.push({x:A+w,y:$})}return z},[j]);if(!j||N.length===0)return e.jsxs(e.Fragment,{children:[e.jsx("div",{ref:b,style:{position:"absolute",width:0,height:0,overflow:"hidden"},children:e.jsx(M,{value:t,size:200,level:u,marginSize:2})}),e.jsx(M,{"data-qr":"fertig",value:t,size:g,level:u,marginSize:2,fgColor:h})]});const s=j.kante,o=2,p=s-2*o,a=[{x:o,y:o},{x:o+p-7,y:o},{x:o,y:o+p-7}],f=(z,y)=>a.some(A=>z>=A.x&&z<A.x+7&&y>=A.y&&y<A.y+7),l=!!(k?.symbol||k?.bild),d=Math.round(s*.2),r=(s-d)/2,v=(z,y)=>l&&z>=r-1&&z<r+d+1&&y>=r-1&&y<r+d+1;return e.jsxs(e.Fragment,{children:[e.jsx("div",{ref:b,style:{position:"absolute",width:0,height:0,overflow:"hidden"},children:e.jsx(M,{value:t,size:200,level:u,marginSize:2})}),e.jsxs("svg",{"data-qr":"fertig",width:g,height:g,viewBox:`0 0 ${s} ${s}`,xmlns:"http://www.w3.org/2000/svg",role:"img",children:[e.jsx("rect",{width:s,height:s,fill:"#FFFFFF"}),N.filter(z=>!f(z.x,z.y)&&!v(z.x,z.y)).map(z=>e.jsx("circle",{cx:z.x+.5,cy:z.y+.5,r:.42,fill:h},`${z.x}-${z.y}`)),a.map(z=>e.jsxs("g",{children:[e.jsx("rect",{x:z.x+.5,y:z.y+.5,width:6,height:6,rx:1.8,fill:"none",stroke:h,strokeWidth:1}),e.jsx("rect",{x:z.x+2,y:z.y+2,width:3,height:3,rx:1,fill:h})]},`${z.x}-${z.y}`)),l&&e.jsx("svg",{x:r,y:r,width:d,height:d,viewBox:"0 0 100 100",children:k?.bild?e.jsx("image",{href:k.bild,x:0,y:0,width:100,height:100,preserveAspectRatio:"xMidYMid meet"}):k?.symbol==="anker"?e.jsx(le,{}):e.jsx(se,{})})]})]})}const de="https://8004.ch",ce="#dc2626",oe={werbemittel_created:"Werbemittel angelegt",werbemittel_updated:"Werbemittel geändert",werbemittel_deleted:"Werbemittel gelöscht",werbemittel_bewegung_created:"Lager gebucht",werbemittel_bewegung_updated:"Lagerbuchung geändert",werbemittel_bewegung_deleted:"Lagerbuchung gelöscht",vernehmlassung_created:"Vernehmlassung angelegt",vernehmlassung_updated:"Vernehmlassung geändert",ver
3nehmlassung_deleted:"Vernehmlassung gelöscht",vernehmlassung_datei_created:"Unterlage hinzugefügt",vernehmlassung_datei_deleted:"Unterlage entfernt",vernehmlassung_antwort_created:"Zum Kreis hinzugefügt",vernehmlassung_antwort_updated:"Rückmeldung eingetroffen",vernehmlassung_antwort_deleted:"Aus dem Kreis entfernt",vernehmlassung_rueckmeldung:"Rückmeldung",werbemittel_bestellung_created:"Nachbestellung erfasst",werbemittel_bestellung_updated:"Bestellung geändert",werbemittel_bestellung_deleted:"Bestellung entfernt",mail_sent:"Mail versendet",mail_failed:"Mail gescheitert",ablage_eintrag_created:"In die Ablage gelegt",ablage_eintrag_updated:"Ablage-Eintrag geändert",ablage_eintrag_deleted:"Aus der Ablage entfernt",ablage_fassung_created:"Neue Fassung",ablage_fassung_deleted:"Fassung entfernt",einstellung_updated:"Einstellung geändert",einstellung_created:"Einstellung gesetzt"},P={flyer:"Flyer",kleber:"Kleber",postkarte:"Postkarte",plakat:"Plakat",merch:"Merchandise",digital:"Digital",anderes:"Anderes"},K={idee:"Idee",beauftragt:"beauftragt",in_arbeit:"in Arbeit",freigabe:"zur Freigabe",freigegeben:"freigegeben",gedruckt:"gedruckt",verteilt:"verteilt"},R={idee:"bg-zinc-100 text-zinc-600 dark:bg-zinc-800 dark:text-zinc-300",beauftragt:"bg-amber-100 text-amber-700 dark:bg-amber-950/40 dark:text-amber-400",in_arbeit:"bg-amber-100 text-amber-700 dark:bg-amber-950/40 dark:text-amber-400",freigabe:"bg-orange-100 text-orange-700 dark:bg-orange-950/40 dark:text-orange-400",freigegeben:"bg-green-100 text-green-700 dark:bg-green-950/40 dark:text-green-400",gedruckt:"bg-green-100 text-green-700 dark:bg-green-950/40 dark:text-green-400",verteilt:"bg-zinc-100 text-zinc-500 dark:bg-zinc-800 dark:text-zinc-400"};function U(t){if(!t)return null;const g=new Date().toISOString().slice(0,10),k=new Date(t+"T12:00:00").toLocaleDateString("de-CH",{day:"2-digit",month:"2-digit"});return t<g?{text:`überfällig seit ${k}`,spaet:!0}:{text:`bis ${k}`,spaet:!1}}const T=t=>`Fr. ${t.toLocaleString("de-CH",{minimumFractionDigits:2,maximumFractionDigits:2})}`;function Ve(){const{permissions:t}=re(),g=!!t.perm_marketing,[k,u]=c.useState("werbemittel"),[h,b]=c.useState(null),[j,m]=c.useState([]),[N,s]=c.useState([]),[o,p]=c.useState([]),[a,f]=c.useState([]),[l,d]=c.useState([]),[r,v]=c.useState([]),[z,y]=c.useState(null),[A,$]=c.useState(null),L=c.useCallback(async()=>{const w=await F("/api/admin/werbemittel");if(!w.ok){$("Die Werbemittel konnten nicht geladen werden.");return}const _=await w.json();b(_.eintraege??[]),m((_.plaene??[]).map(C=>({id:C.id,label:C.event_date?`${C.title} (${C.event_date})`:C.title}))),s((_.produkte??[]).map(C=>({id:C.id,label:C.name}))),f(_.logos??[]),d((_.vorstand??[]).map(C=>({id:C.id,label:C.name}))),v(_.info_empfaenger??[]),y({vernehmlassung:_.vernehmlassung_anzahl??0,ablage:_.ablage_anzahl??0}),p((_.vernehmlassungen??[]).map(C=>({id:C.id,label:C.ergebnis==="freigegeben"?`${C.titel} (freigegeben)`:C.ergebnis==="ueberarbeiten"?`${C.titel} (zu überarbeiten)`:`${C.titel} (läuft)`}))),$(null)},[]);return c.useEffect(()=>{L()},[L]),e.jsxs("div",{className:"max-w-5xl",children:[e.jsxs("div",{className:"flex flex-wrap items-start justify-between gap-3 mb-4",children:[e.jsxs("div",{children:[e.jsx("h1",{className:"text-2xl font-bold text-zinc-900 dark:text-white",children:"Marketing"}),e.jsx("p",{className:"text-[13px] text-zinc-500 dark:text-zinc-400 mt-0.5",children:"Werbemittel und ihre Wirkung, Vernehmlassungen und die Ablage."})]}),e.jsx(X,{titel:"Marketing",hinweis:"Werbemittel, Lagerbewegungen, Vernehmlassungen mit ihren Rückmeldungen und die Ablage.",children:e.jsx(te,{filter:{or:"target_type.like.werbemittel%,target_type.like.vernehmlassung%,target_type.like.ablage_%,target_type.eq.mail_marketing,target_type.eq.mail_vernehmlassung,target_type.eq.einstellung"},labelFor:w=>oe[w]??w,colorFor:w=>w.endsWith("_deleted")?"bg-red-500":w.startsWith("werbemittel_bewegung")?"bg-sky-500":"bg-zinc-400",limit:300})})]}),e.jsx(ne,{aktiv:k,onWechsel:u,reiter:[{key:"werbemittel",label:"Werbemittel",anzahl:h?.length},{key:"vernehmlassung",label:"Vernehmlassung",anzahl:z?.vernehmlassung},{key:"ablage",label:"Ablage",anzahl:z?.ablage}]}),A&&e.jsx("p",{className:"rounded-lg border border-red-200 dark:border-red-900 bg-red-50 dark:bg-red-950/20 px-3 py-2 text-[13px] text-red-700 dark:text-red-400 mb-4",children:A}
3),k==="werbemittel"&&e.jsx(ue,{mittel:h,plaene:j,produkte:N,vernehmlassungen:o,logos:a,vorstand:l,canEdit:g,onReload:L,onZurAblage:()=>u("ablage"),infoEmpfaenger:r}),k==="vernehmlassung"&&e.jsx(pe,{canEdit:g}),k==="ablage"&&e.jsx(fe,{canEdit:g})]})}function ue({mittel:t,plaene:g,produkte:k,vernehmlassungen:u,logos:h,vorstand:b,canEdit:j,onReload:m,onZurAblage:N,infoEmpfaenger:s}){const[o,p]=c.useState(null),[a,f]=c.useState(null),[l,d]=c.useState(null),[r,v]=c.useState(null),[z,y]=c.useState(null),A=(t??[]).find(S=>S.id===z)??null,[$,L]=c.useState(null),[w,_]=c.useState(()=>new Set(G("marketing"))),C=S=>_(i=>{const n=new Set(i);return n.has(S)?n.delete(S):n.add(S),Q("marketing",n),n}),V=c.useMemo(()=>{const S=new Map;for(const n of t??[]){const x=n.plan?.id??"",B=S.get(x)??{titel:n.plan?.title??"Ohne Anlass",planId:n.plan?.id??null,liste:[]};B.liste.push(n),S.set(x,B)}const i=new Set(["idee","beauftragt","in_arbeit","freigabe"]);return[...S.entries()].sort((n,x)=>n[0]===""?1:x[0]===""?-1:n[1].titel.localeCompare(x[1].titel,"de")).map(([n,x])=>({schluessel:n,...x,offen:x.liste.filter(B=>B.aktiv&&i.has(B.status)).length}))},[t]);return t===null?e.jsx("p",{className:"text-sm text-zinc-400",children:"Lade Werbemittelâ¦"}):e.jsxs("div",{className:"flex flex-col gap-4",children:[j&&!o&&e.jsx("div",{children:e.jsx("button",{onClick:()=>p({art:"flyer",qr_mm:30,aktiv:!0,ausgabe:"pdf",status:"idee",ziel:"/mitmachen/mitglied-werden"}),className:"px-3.5 py-2 rounded-lg bg-red-600 text-white text-sm font-semibold hover:bg-red-700",children:"+ Neues Werbemittel"})}),j&&o&&!o.id&&e.jsx(q,{entwurf:o,plaene:g,produkte:k,vernehmlassungen:u,logos:h,vorstand:b,onZurAblage:N,onClose:()=>p(null),onFertig:async()=>{p(null),await m()}}),t.length===0?e.jsx("p",{className:"rounded-xl border border-dashed border-zinc-300 dark:border-zinc-700 p-6 text-[13.5px] text-zinc-500",children:"Noch kein Werbemittel. Lege eines an, drucke den QR-Code darauf, und ab dann siehst du hier, wie oft er gescannt wurde und wie viele Mitglieder daraus geworden sind."}):V.map(S=>e.jsxs("section",{className:"rounded-2xl border border-zinc-200 dark:border-zinc-700 overflow-hidden",children:[e.jsxs("div",{className:`flex flex-wrap items-baseline gap-x-2.5 gap-y-1 px-4 py-2.5 4 bg-zinc-50 dark:bg-zinc-800/60 border-b border-zinc-200 dark:border-zinc-700`,children:[e.jsx("h2",{className:"text-[13px] font-bold uppercase tracking-wide text-zinc-600 dark:text-zinc-300",children:S.titel}),e.jsxs("span",{className:"text-[12px] text-zinc-400",children:[S.liste.length," ",(S.liste.length===1,"Werbemittel")]}),S.offen>0&&e.jsxs("span",{className:"text-[12px] text-amber-700 dark:text-amber-400",children:[S.offen," noch nicht freigegeben"]}),S.planId&&e.jsx("a",{href:`/admin/veranstaltungsplaner?plan=${S.planId}`,className:"ml-auto text-[12px] text-red-600 hover:underline",children:"zum Anlass"})]}),e.jsx("div",{className:"divide-y divide-zinc-200 dark:divide-zinc-800",children:S.liste.map(i=>e.jsxs("div",{className:i.aktiv?"bg-white dark:bg-zinc-900":"bg-zinc-50 dark:bg-zinc-900/40 opacity-70",children:[e.jsxs("div",{onClick:()=>{o?.id!==i.id&&C(i.id)},role:"button",tabIndex:0,onKeyDown:n=>{(n.key==="Enter"||n.key===" ")&&o?.id!==i.id&&(n.preventDefault(),C(i.id))},className:`flex flex-wrap items-baseline gap-x-2.5 gap-y-1 px-4 py-3 ${o?.id===i.id?"":"cursor-pointer hover:bg-zinc-50 dark:hover:bg-zinc-800/40"}`,children:[e.jsx(ae,{"aria-hidden":!0,className:`w-3.5 h-3.5 shrink-0 self-center text-zinc-400 transition-transform ${w.has(i.id)?"rotate-90":""}`}),e.jsx("h2",{className:"text-[15px] font-bold text-zinc-900 dark:text-white",children:i.label}),e.jsx("span",{className:"text-[11.5px] px-1.5 py-0.5 rounded bg-zinc-100 dark:bg-zinc-800 text-zinc-600 dark:text-zinc-300",children:P[i.art]??i.art}),e.jsx("span",{className:`text-[11.5px] px-1.5 py-0.5 rounded font-semibold ${R[i.status]??R.idee}`,children:K[i.status]??i.status}),(()=>{const n=U(i.faellig_am);return n?e.jsx("span",{className:`text-[11.5px] font-semibold ${n.spaet?"text-red-600 dark:text-red-400":"text-zinc-500 dark:text-zinc-400"}`,children:n.text}):null})(),e.jsx("span",{className:"text-[11.5px] text-zinc-500 dark:text-zinc-400",children:i.ausgabe==="druck"?"Druck":"nur PDF"}),!i.aktiv&&e.jsx("span",{className:"text-[11.5px] text-zinc-400",children:"stillgelegt"}),!i.vernehmlassung&&!i.ohne_vernehmlassung_grund&&["freigabe","freigegeben","gedruckt","verteilt"].includes(i.status)&&e.jsx("span",{className:"text-[11.5px] px-1.5 py-0.5 rounded bg-amber-100 dar
4k:bg-amber-950/40 text-amber-700 dark:text-amber-400 font-semibold",children:"Vernehmlassung nicht angegeben"}),i.verantwortlich_name?e.jsx("span",{className:"text-[12px] text-zinc-500",children:i.verantwortlich_name}):e.jsx("span",{className:"text-[12px] text-amber-700 dark:text-amber-400",children:"verantwortlich noch offen"}),i.offene_pendenzen>0&&e.jsxs("a",{href:`/admin/pendenzen?werbemittel=${i.id}`,onClick:n=>n.stopPropagation(),className:"text-[12px] text-amber-700 dark:text-amber-400 hover:underline",children:[i.offene_pendenzen," offene ",i.offene_pendenzen===1?"Pendenz":"Pendenzen"]})]}),o?.id===i.id?e.jsx("div",{className:"px-4 pb-4 pl-[30px]",children:e.jsx(q,{entwurf:o,plaene:g,produkte:k,vernehmlassungen:u,logos:h,vorstand:b,onZurAblage:N,onClose:()=>p(null),onFertig:async()=>{p(null),await m()}})}):w.has(i.id)&&e.jsxs("div",{className:"px-4 pb-4 pl-[30px]",children:[e.jsxs("div",{className:"flex flex-wrap items-baseline gap-x-2.5 gap-y-1",children:[e.jsxs("code",{className:"text-[12px] text-zinc-500",children:["8004.ch/m/",i.schluessel]}),i.vernehmlassung?e.jsxs("span",{className:"text-[11.5px] px-1.5 py-0.5 rounded bg-green-100 dark:bg-green-950/40 text-green-700 dark:text-green-400",children:["Vernehmlassung: ",i.vernehmlassung.titel]}):i.ohne_vernehmlassung_grund?e.jsx("span",{className:"text-[11.5px] px-1.5 py-0.5 rounded bg-zinc-100 dark:bg-zinc-800 text-zinc-600 dark:text-zinc-300",children:"ohne Vernehmlassung"}):null,i.plan&&e.jsx("a",{href:`/admin/veranstaltungsplaner?plan=${i.plan.id}`,className:"text-[12px] text-red-600 hover:underline",children:i.plan.title})]}),i.notiz&&e.jsx("p",{className:"mt-1 text-[13px] text-zinc-500",children:i.notiz}),i.textvorschlag&&e.jsxs("div",{className:"mt-2 rounded-lg border border-zinc-200 dark:border-zinc-700 bg-zinc-50 dark:bg-zinc-800/40 px-3 py-2",children:[e.jsx("p",{className:"text-[11px] uppercase tracking-wide text-zinc-400 mb-0.5",children:"Textvorschlag"}),e.jsx("p",{className:"text-[13px] text-zinc-700 dark:text-zinc-300 whitespace-pre-wrap",children:i.textvorschlag})]}),!i.vernehmlassung&&i.ohne_vernehmlassung_grund&&e.jsxs("p",{className:"mt-1 text-[12.5px] text-zinc-500",children:["Ohne Vernehmlassung, weil: ",i.ohne_vernehmlassung_grund]}),(i.scans>0||i.mitglieder>0||i.kosten>0)&&e.jsxs("p",{className:"mt-2 text-[12.5px] text-zinc-500 dark:text-zinc-400",children:[[i.scans>0?`${i.scans} Scans`:null,i.mitglieder>0?`${i.mitglieder} Mitglieder daraus`:null,i.kosten>0?T(i.kosten):null].filter(Boolean).join(" · ")," · ",e.jsx(J,{to:"/admin/analyse?tab=resonanz",className:"text-red-600 hover:underline",children:"Wirkung in der Analyse"})]}),i.ausgabe==="druck"&&e.jsx("div",{className:"mt-3 grid grid-cols-2 sm:grid-cols-3 gap-3",children:e.jsx(he,{label:"Auf Lager",wert:i.auflage?`${i.bestand} von ${i.auflage}`:String(i.bestand),zusatz:i.letzte_bewegung?`Stand ${i.letzte_bewegung}`:"noch nichts erfasst"})}),i.bestellungen.some(n=>!n.geliefert_am)&&e.jsxs("p",{className:"mt-2 text-[12.5px] text-amber-700 dark:text-amber-400",children:["Unterwegs: ",i.bestellungen.filter(n=>!n.geliefert_am).map(n=>`${n.menge} seit ${n.bestellt_am}`).join(", ")]}),e.jsxs("div",{className:"mt-3 flex flex-wrap gap-2",children:[e.jsx("button",{onClick:()=>d(i),className:"px-2.5 py-1.5 rounded-lg border border-zinc-300 dark:border-zinc-600 text-[12.5px] font-medium hover:border-red-400 hover:text-red-600",children:"QR-Code"}),j&&e.jsxs(e.Fragment,{children:[i.ausgabe==="druck"&&e.jsx("button",{onClick:()=>y(i.id),className:"px-2.5 py-1.5 rounded-lg border border-zinc-300 dark:border-zinc-600 text-[12.5px] font-medium hover:border-red-400 hover:text-red-600",children:"Nachbestellen"}),e.jsx("button",{onClick:()=>v(i),className:"px-2.5 py-1.5 rounded-lg border border-zinc-300 dark:border-zinc-600 text-[12.5px] font-medium hover:border-red-400 hover:text-red-600",children:"Kosten"}),i.ausgabe==="druck"&&e.jsx("button",{onClick:()=>f(i),className:"px-2.5 py-1.5 rounded-lg border border-zinc-300 dark:border-zinc-600 text-[12.5px] font-medium hover:border-red-400 hover:text-red-600",children:"Lager buchen"}),e.jsx("button",{onClick:()=>p(i),className:"px-2.5 py-1.5 rounded-lg border border-zinc-300 dark:border-zinc-600 text-[12.5px] font-medium hover:border-red-400 hover:text-red-600",children:"Bearbeiten"}),e.jsx("button",{onClick:()=>L(i),title:i.verantwortlich_name?`${i.verantwortlich_name} um dieses Werbemittel bitten`:"Zuerst eine verantwortliche Person wÃ
4¤hlen",disabled:!i.verantwortlich_person_id,className:"px-2.5 py-1.5 rounded-lg border border-zinc-300 dark:border-zinc-600 text-[12.5px] font-medium hover:border-red-400 hover:text-red-600 disabled:opacity-40",children:i.verantwortlich_name?`${i.verantwortlich_name.split(" ")[0]} bitten`:"Bitten"})]})]})]})]},i.id))}),j&&S.planId&&e.jsx("div",{className:`px-4 py-2.5 border-t border-zinc-200 dark:border-zinc-700 5 bg-zinc-50/60 dark:bg-zinc-800/30`,children:e.jsxs("button",{onClick:()=>p({art:"flyer",qr_mm:30,aktiv:!0,ausgabe:"pdf",status:"idee",ziel:"/mitmachen/mitglied-werden",event_plan_id:S.planId}),className:"text-[12.5px] font-medium text-red-600 hover:underline",children:["+ Neues Werbemittel für ",S.titel]})})]},S.schluessel)),e.jsx(Ne,{adressen:s,canEdit:j,onReload:m}),l&&e.jsx(xe,{mittel:l,logos:h,onClose:()=>d(null)}),A&&e.jsx(ze,{mittel:A,onClose:()=>y(null),onReload:m}),r&&e.jsx(me,{mittel:r,onClose:()=>v(null),onFertig:async()=>{v(null),await m()}}),a&&e.jsx(ge,{mittel:a,onClose:()=>f(null),onFertig:async()=>{f(null),await m()}}),$&&e.jsx(be,{mittel:$,onClose:()=>L(null),onFertig:async()=>{L(null),await m()}})]})}function he({label:t,wert:g,zusatz:k,hervor:u}){return e.jsxs("div",{children:[e.jsx("p",{className:`text-[19px] font-bold tabular-nums ${u?"text-red-600 dark:text-red-400":"text-zinc-900 dark:text-white"}`,children:g}),e.jsx("p",{className:"text-[11.5px] text-zinc-500 dark:text-zinc-400",children:t}),k&&e.jsx("p",{className:"text-[11px] text-zinc-400",children:k})]})}function xe({mittel:t,logos:g,onClose:k}){const[u,h]=c.useState(t.qr_mm??30),b=c.useRef(null),j=`${de}/m/${t.schluessel}`,m=g.find(d=>d.id===t.logo_ablage_id)??null,[N,s]=c.useState(null);c.useEffect(()=>{if(!m){s(null);return}let d=!0;return fetch(m.url).then(r=>r.blob()).then(r=>new Promise((v,z)=>{const y=new FileReader;y.onload=()=>v(String(y.result)),y.onerror=z,y.readAsDataURL(r)})).then(r=>{d&&s(r)}).catch(()=>{d&&s(null)}),()=>{d=!1}},[m]);const o=N||t.qr_symbol?"H":"M",p=t.qr_farbe==="rot"?ce:"#18181B",a=c.useCallback(()=>{const d=b.current?.querySelector('svg[data-qr="fertig"]');if(!d)return null;const r=d.cloneNode(!0);return r.setAttribute("width",`${u}mm`),r.setAttribute("height",`${u}mm`),r.setAttribute("xmlns","http://www.w3.org/2000/svg"),new XMLSerializer().serializeToString(r)},[u]),f=()=>{const d=a();d&&E(new Blob([d],{type:"image/svg+xml"}),`qr-${t.schluessel}-${u}mm.svg`)},l=()=>{const d=a();if(!d)return;const r=Math.round(u/25.4*300),v=new Image;v.onload=()=>{const z=document.createElement("canvas");z.width=r,z.height=r;const y=z.getContext("2d");y&&(y.fillStyle="#fff",y.fillRect(0,0,r,r),y.drawImage(v,0,0,r,r),z.toBlob(A=>{A&&E(A,`qr-${t.schluessel}-${u}mm.png`)},"image/png"))},v.src=`data:image/svg+xml;base64,${btoa(unescape(encodeURIComponent(d)))}`};return e.jsxs(D,{titel:`QR-Code: ${t.label}`,onClose:k,children:[e.jsxs("p",{className:"text-[13px] text-zinc-500 dark:text-zinc-400 mb-3",children:["Führt auf ",e.jsx("code",{className:"text-zinc-700 dark:text-zinc-300",children:j}),", zählt den Scan und leitet weiter auf ",e.jsx("code",{className:"text-zinc-700 dark:text-zinc-300",children:t.ziel}),"."]}),e.jsx("div",{ref:b,className:"flex justify-center py-4 bg-white rounded-lg border border-zinc-200",children:t.qr_stil==="rund"?e.jsx(ie,{wert:j,groesse:200,stufe:o,farbe:p,zeichen:{symbol:t.qr_symbol,bild:N}}):e.jsx(M,{"data-qr":"fertig",value:j,size:200,level:o,marginSize:2,fgColor:p,imageSettings:N?{src:N,height:40,width:40,excavate:!0}:void 0})}),(m||t.qr_symbol)&&e.jsxs("p",{className:"mt-2 text-[12px] text-zinc-500 dark:text-zinc-400",children:["Mit ",m?`«${m.titel}» aus der Ablage`:t.qr_symbol==="anker"?"dem Anker":"der Räbe"," in der Mitte. Deswegen steht der Code auf der höchsten Fehlerkorrektur und ist feiner gerastert: Drucke ihn nicht kleiner als 30 mm, und prüfe ihn vor dem Druck mit dem eigenen Handy."]}),t.qr_farbe==="rot"&&e.jsx("p",{className:"mt-2 text-[12px] text-zinc-500 dark:text-zinc-400",children:"In QV-Rot. Rot auf Weiss hat rund ein Viertel des Helligkeitsunterschieds von Schwarz auf Weiss; zum Lesen reicht es, für schwierige Verhältnisse ist Schwarz die sicherere Wahl. Umstellen kannst du es unter «Bearbeiten»."}),e.jsxs("label",{className:"mt-4 block text-[12.5px] text-zinc-600 dark:text-zinc-300",children:["Kantenlänge im Druck: ",e.jsxs("strong",{className:"tabular-nums",children:[u," mm"]}),e.jsx("input",{type:"range",min:10,max:120,step:1,value:u,onChange:d=>h(Number(d.target.value)),className:"w-full mt-1 accent-red-600"})]}),e.jsx("p",{className:"text-[11.5px] text-zinc-400",children:"Unter 20 mm wird es auf Papier heikel: Viele Kameras kommen damit erst aus wenigen Zentimetern Abstand zurecht. Für einen Kleber sind 25 bis 30 mm eine sichere Wahl."}),e.jsxs("div",{className:"mt-4 flex flex-wrap gap-2",children:[e.jsx("button",{onClick:f,className:"px-3.5 py-2 rounded-lg bg-red-600 text-white text-sm font-semibold hover:bg-red-700",children:"SVG für den Druck"}),e.jsx("button",{onClick:l,className:"px-3.5 py-2 rounded-lg border border-zinc-300 dark:border-zinc-600 text-sm font-medium",children:"PNG (300 dpi)"})]})]})}function E(t,g){const k=URL.createObjectURL(t),u=document.createElement("a");u.href=k,u.download=g,document.body.appendChild(u),u.click(),u.remove(),setTimeout(()=>URL.revokeObjectURL(k),1e3)}function ge({mittel:t,onClose:g,onFertig:k}){const[u,h]=c.useState("entnahme"),[b,j]=c.useState(""),[m,N]=c.useState(""),[s,o]=c.useState(!1),[p,a]=c.useState(null),f=Math.round(Number(b)),l=Number.isFinite(f)&&f>0&&m.trim().length>=2,d=t.bestand+(u==="zugang"?f:-f);async function r(){o(!0),a(null);const v=await F("/api/admin/werbemittel",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({aktion:"bewegung",werbemittel_id:t.id,menge:u==="zugang"?f:-f,grund:m.trim()})});if(o(!1),!v.ok){a((await v.json().catch(()=>({}))).error??"Konnte nicht gespeichert werden.");return}await k()}return e.jsxs(D,{titel:`Lager: ${t.label}`,onClose:g,schmutzig:b.trim().length>0||m.trim().length>0,children:[e.jsxs("p",{className:"text-[13px] text-zinc-500 dark:text-zinc-400 mb-3",children:["Auf Lager sind ",e.jsx("strong",{className:"text-zinc-800 dark:text-zinc-200",children:t.bestand}),". Der Bestand wird aus den Buchungen gerechnet, nie überschrieben: Darum steht später auch, wohin etwas gegangen ist."]}),e.jsx("div",{className:"flex gap-2 mb-3",children:["entnahme","zugang"].map(v
5=>e.jsx("button",{type:"button",onClick:()=>h(v),className:`flex-1 px-3 py-2 rounded-lg border text-[13px] font-medium ${u===v?"border-red-500 bg-red-50 dark:bg-red-950/30 text-red-700 dark:text-red-400":"border-zinc-300 dark:border-zinc-600 text-zinc-600 dark:text-zinc-300"}`,children:v==="entnahme"?"Entnahme":"Zugang"},v))}),e.jsx("input",{type:"number",min:1,value:b,onChange:v=>j(v.target.value),placeholder:"Wie viele?",autoFocus:!0,className:"w-full rounded-lg border border-zinc-300 dark:border-zinc-600 bg-white dark:bg-zinc-900 px-3 py-2 text-sm mb-2"}),e.jsx("input",{value:m,onChange:v=>N(v.target.value),placeholder:u==="zugang"?"z. B. Lieferung Druckerei":"z. B. Räbeliechtli, im Quartier verteilt",className:"w-full rounded-lg border border-zinc-300 dark:border-zinc-600 bg-white dark:bg-zinc-900 px-3 py-2 text-sm"}),l&&e.jsxs("p",{className:`mt-2 text-[12.5px] ${d<0?"text-red-600":"text-zinc-500"}`,children:["Neuer Bestand: ",e.jsx("strong",{className:"tabular-nums",children:d}),d<0&&" â so viele sind gar nicht da."]}),p&&e.jsx("p",{className:"mt-2 text-sm text-red-600",children:p}),e.jsxs("div",{className:"mt-4 flex gap-2",children:[e.jsx("button",{disabled:s||!l||d<0,onClick:r,className:"px-3.5 py-2 rounded-lg bg-red-600 text-white text-sm font-semibold hover:bg-red-700 disabled:opacity-40",children:s?"Einen Momentâ¦":"Buchen"}),e.jsx("button",{onClick:g,className:"px-3.5 py-2 rounded-lg border border-zinc-300 dark:border-zinc-600 text-sm",children:"Abbrechen"})]})]})}function q({entwurf:t,plaene:g,produkte:k,vernehmlassungen:u,logos:h,vorstand:b,onZurAblage:j,onClose:m,onFertig:N}){const[s,o]=c.useState(t),[p,a]=c.useState(!1),[f,l]=c.useState(null),[d,r]=c.useState(null),v=!t.id,[z,y]=c.useState(!1),A=n=>n.toLowerCase().normalize("NFD").replace(/[\u0300-\u036f]/g,"").replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").slice(0,24),$=n=>o(x=>({...x,label:n,schluessel:v&&!z?A(n):x.schluessel})),L=n=>{y(!0),o(x=>({...x,schluessel:n}))},w="w-full rounded-lg border border-zinc-300 dark:border-zinc-600 bg-white dark:bg-zinc-900 px-3 py-2 text-sm",_="block text-[11.5px] uppercase tracking-wide text-zinc-400 mb-1 mt-3",C=["idee","beauftragt","in_arbeit"].includes(s.status??"idee");async function V(){const n=(s.label??"").trim();if(n.length<3){l("Zuerst den Namen des Werbemittels eintragen.");return}a(!0),l(null);const x=await F("/api/admin/vernehmlassung",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({bereich:"marketing",aktion:"speichern",titel:n,objekt_typ:"werbemittel",objekt_id:s.id??""})}),B=await x.json().catch(()=>({}));if(a(!1),!x.ok||!B.id){l(B.error??"Die Vernehmlassung liess sich nicht anlegen.");return}o(I=>({...I,vernehmlassung_id:B.id,ohne_vernehmlassung_grund:null})),r(n)}async function S(){a(!0),l(null);const n=await F("/api/admin/werbemittel",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({aktion:"speichern",...s})});if(a(!1),!n.ok){l((await n.json().catch(()=>({}))).error??"Konnte nicht gespeichert werden.");return}await N()}async function i(){if(!s.id)return;const n=s.scans??0,x=n>0?`«${s.label}» löschen? Die ${n} bisherigen Scans verschwinden mit.`:`«${s.label}» löschen?`;if(!await W(x,{jaLabel:"Löschen"}))return;a(!0),l(null);const B=await F("/api/admin/werbemittel",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({aktion:"loeschen",id:s.id})});if(a(!1),!B.ok){l((await B.json().catch(()=>({}))).error??"Konnte nicht gelöscht werden.");return}await N()}return e.jsxs("div",{className:"rounded-xl border border-red-200 dark:border-red-900/60 bg-red-50/30 dark:bg-red-950/10 p-4",children:[v&&e.jsx("h3",{className:"text-[13px] font-bold uppercase tracking-wide text-zinc-500 dark:text-zinc-400 mb-1",children:"Neues Werbemittel"}),e.jsx("label",{className:_,children:"Name"}),e.jsx("input",{value:s.label??"",onChange:n=>$(n.target.value),autoFocus:!0,placeholder:"z. B. Postkarte Mitgliederwerbung",className:w}),e.jsx("label",{className:_,children:"Schlüssel in der Adresse"}),e.jsxs("div",{className:"flex items-center gap-1.5",children:[e.jsx("span",{className:"text-[13px] text-zinc-400 shrink-0",children:"8004.ch/m/"}),e.jsx("input",{value:s.schluessel??"",onChange:n=>L(n.target.value),className:w})]}),!v&&e.jsx("p",{className:"mt-1 text-[11.5px] text-amber-700 dark:text-amber-400",children:"Ist der Code schon gedruckt, ändere den Schlüssel nicht mehr: Jeder gedruckte Code zeigt dann ins Leere."}),e.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[e.jsxs("div",{children:[e.jsx("label",{className:_,children:"Art"}),e.jsx("select",{value:s.art??"anderes",onChange:n=>o(x=>({...x,art:n.target.value})),className:w,children:Object.entries(P).map(([n,x])=>e.jsx("option",{value:n,children:x},n))})]}),e.jsxs("div",{children:[e.jsx("label",{className:_,children:"Auflage"}),e.jsx("input",{type:"number",min:0,value:s.auflage??"",onChange:n=>o(x=>({...x,auflage:n.target.value===""?null:Number(n.target.value)})),placeholder:"wie viele gedruckt",className:w})]})]}),e.jsx("label",{className:_,children:"Verantwortlich im Vorstand"}),e.jsxs("select",{value:s.verantwortlich_person_id??"",className:w,onChange:n=>o(x=>({...x,verantwortlich_person_id:n.target.value||null})),children:[e.jsx("option",{value:"",children:"noch offen"}),b.map(n=>e.jsx("option",{value:n.id,children:n.label},n.id))]}),e.jsx("label",{className:_,children:"Vernehmlassung"}),C?e.jsx("p",{className:"text-[13px] text-zinc-500 dark:text-zinc-400",children:"Kommt später. Sobald das Werbemittel auf «zur Freigabe» steht, fragt dieses Feld nach der Vernehmlassung oder nach dem Grund, warum es ohne geht."}):e.jsxs(e.Fragment,{children:[e.jsxs("select",{value:s.vernehmlassung_id??"",className:w,onChange:n=>{if(n.target.value==="neu"){V();return}o(x=>({...x,vernehmlassung_id:n.target.value||null}))},children:[e.jsx("option",{value:"",children:"ohne Vernehmlassung"}),u.map(n=>e.jsx("option",{value:n.id,children:n.label},n.id)),e.jsx("option",{value:"neu",children:"â neue Vernehmlassung starten â"})]}),!s.vernehmlassung_id&&e.jsxs(e.Fragment,{children:[e.jsx("input",{value:s.ohne_vernehmlassung_grund??"",className:`${w} mt-2`,onChange:n=>o(x=>({...x,ohne_vernehmlassung_grund:n.target.value})),placeholder:"Warum ohne? z. B. unveränderter Nachdruck, Kleinstauflage, eilig"}),e.jsx("p",{className:"mt-1 text-[11.5px] text-zinc-400",children:"Pflicht vor der Freigabe. Nachbestellungen bestehenden Materials brauchen keine Vernehmlassung; die erfasst du unten an der Karte als Bestellung."})]})]}),e.jsx("label",{className:_,children:"Der Scan führt auf"}),e.jsx("input",{value:s.ziel??"/mitmachen/mitglied-werden",onChange:n=>o(x=>({...x,ziel:n.target.value})),className:w}),e.jsx("p",{className:"mt-1 text-[11.5px] text-zinc-400",children:"Ein Weg auf 8004.ch, beginnend mit einem Schrägstrich. Für Mitgliederwerbung das Anmeldeformular, für ein Plakat vielleicht der Veranstaltungskalender."}),e.jsx("label",{className:_,children:"Ausgabe"}),e.jsx("div",{className:"flex flex-wrap gap-1.5",children:[["pdf","nur als PDF"],["druck","auch gedruckt"]].map(([n,x])=>e.jsx("button",{type:"button",onClick:()=>o(B=>({...B,ausgabe:n})),className:`px-3 py-1.5 rounded-lg text-[12.5px] font-medium border ${(s.ausgabe??"pdf")===n?"bg-red-600 border-red-600 text-white":"border-zinc-300 dark:border-zinc-600 hover:border-red-400"}`,children:x},n))}),e.jsx("p",{className:"mt-1 text-[11.5px] text-zinc-400",children:"Beim Druck kommen Auflage, Lager und Nachbestellung dazu, und die gestaltende Person weiss, dass sie Anschnitt und Druckdaten braucht."}),e.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[e.jsxs("div",{children:[e.jsx("label",{className:_,children:"Stand"}),e.jsx("select",{value:s.status??"idee",className:w,onChange:n=>o(x=>({...x,status:n.target.value})),children:Object.entries(K).map(([n,x])=>e.jsx("option",{value:n,children:x},n))})]}),e.jsxs("div",{children:[e.jsx("label",{className:_,children:"Bis wann"}),e.jsx("input",{type:"date",value:s.faellig_am??"",className:w,onChange:n=>o(x=>({...x,faellig_am:n.target.value||null}))})]})]}),e.jsx("p",{className:"mt-1 text-[11.5px] text-zinc-400",children:"Beim We
5chsel auf «freigegeben» entsteht der Eintrag in der Ablage, mit Anlass und Werbemittel schon verknüpft. Die Datei lädt danach jemand dort hoch."}),e.jsx("label",{className:_,children:"Textvorschlag"}),e.jsx("textarea",{rows:5,value:s.textvorschlag??"",className:w,onChange:n=>o(x=>({...x,textvorschlag:n.target.value})),placeholder:`Titel, Kernsatz, Aufruf. Zum Beispiel: 6 7Räbeliechtli-Umzug, Samstag 7. November 8Schnitzt mit uns! Räben bestellen bis 20. Oktober auf 8004.ch/raebeliechtli`}),e.jsx("p",{className:"mt-1 text-[11.5px] text-zinc-400",children:"Geht mit der Bitte an die verantwortliche Person und bleibt hier stehen, auch fürs nächste Jahr. Ein Vorschlag, kein Manuskript."}),e.jsx("label",{className:_,children:"Gehört zu einer geplanten Veranstaltung"}),e.jsxs("select",{value:s.event_plan_id??"",className:w,onChange:n=>o(x=>({...x,event_plan_id:n.target.value||null})),children:[e.jsx("option",{value:"",children:"zu keiner"}),g.map(n=>e.jsx("option",{value:n.id,children:n.label},n.id))]}),k.length>0&&e.jsxs(e.Fragment,{children:[e.jsx("label",{className:_,children:"Wird auch im Shop verkauft als"}),e.jsxs("select",{value:s.product_id??"",className:w,onChange:n=>o(x=>({...x,product_id:n.target.value||null})),children:[e.jsx("option",{value:"",children:"kein Shop-Produkt"}),k.map(n=>e.jsx("option",{value:n.id,children:n.label},n.id))]})]}),e.jsx("label",{className:_,children:"Aussehen des QR-Codes"}),e.jsxs("div",{className:"grid grid-cols-3 gap-3",children:[e.jsxs("select",{value:s.qr_farbe??"rot",className:w,onChange:n=>o(x=>({...x,qr_farbe:n.target.value})),children:[e.jsx("option",{value:"rot",children:"rot"}),e.jsx("option",{value:"schwarz",children:"schwarz"})]}),e.jsxs("select",{value:s.qr_stil??"klassisch",className:w,onChange:n=>o(x=>({...x,qr_stil:n.target.value})),children:[e.jsx("option",{value:"klassisch",children:"eckige Felder"}),e.jsx("option",{value:"rund",children:"runde Felder"})]}),e.jsxs("select",{value:s.qr_symbol??"",className:w,onChange:n=>o(x=>({...x,qr_symbol:n.target.value||null,logo_ablage_id:n.target.value?null:x.logo_ablage_id})),children:[e.jsx("option",{value:"",children:"nichts in der Mitte"}),e.jsx("option",{value:"raebe",children:"Räbe"}),e.jsx("option",{value:"anker",children:"Anker"})]})]}),h.length===0?e.jsxs(e.Fragment,{children:[e.jsx("label",{className:_,children:"Oder ein Logo aus der Ablage in der Mitte"}),e.jsx("p",{className:"text-[12.5px] text-zinc-500 dark:text-zinc-400",children:"Noch kein Logo in der Ablage. Lege es dort zuerst als Eintrag der Art «Logo» an und lade die Datei als Fassung hoch, dann steht es hier zur Wahl."}),e.jsx("button",{type:"button",onClick:()=>{m(),j()},className:"mt-1.5 text-[12.5px] text-red-600 hover:underline",children:"Zur Ablage"})]}):e.jsxs(e.Fragment,{children:[e.jsx("label",{className:_,children:"Oder ein Logo aus der Ablage in der Mitte"}),e.jsxs("select",{value:s.logo_ablage_id??"",className:w,onChange:n=>o(x=>({...x,logo_ablage_id:n.target.value||null,qr_symbol:n.target.value?null:x.qr_symbol})),children:[e.jsx("option",{value:"",children:"ohne Logo"}),h.map(n=>e.jsx("option",{value:n.id,children:n.titel},n.id))]}),e.jsx("p",{className:"mt-1 text-[11.5px] text-zinc-400",children:"Aus der Ablage, damit es nur an einem Ort gepflegt wird. Mit etwas in der Mitte wird der Code feiner gerastert; unter 30 mm ist er dann auf Papier heikel."})]}),e.jsx("label",{className:_,children:"Notiz"}),e.jsx("textarea",{value:s.notiz??"",onChange:n=>o(x=>({...x,notiz:n.target.value})),rows:2,placeholder:"Wofür, wo verteilt, was zu beachten ist",className:w}),e.jsxs("label",{className:"mt-3 flex items-center gap-2 text-[13px] text-zinc-600 dark:text-zinc-300",children:[e.jsx("input",{type:"checkbox",checked:s.aktiv!==!1,onChange:n=>o(x=>({...x,aktiv:n.target.checked})),className:"accent-red-600 w-4 h-4"}),"Aktiv. Stillgelegt führt der Code auf die Anmeldeseite und zählt nicht mehr mit."]}),v&&e.jsx("p",{className:"mt-3 text-[12px] text-zinc-400",children:"Beim Anlegen geht eine Meldung an die Kommission Marketing. Bei späteren Ãnderungen nicht."}),d&&e.jsxs("p",{className:"mt-3 rounded-lg border border-green-300 dark:border-green-900 bg-green-50 dark:bg-green-950/20 px-3 py-2 text-[12.5px] text-green-800 dark:text-green-300",children:["Vernehmlassung «",d,"» angelegt und verknüpft. Speichere hier, dann setzt du im Reiter «Vernehmlassung» den Kreis, die Frist und die Unterlagen und verschickst sie."]}),f&&e.jsx("p",{className:"mt-3 text-sm text-red-600",children:f}),e.jsxs("div",{className:"mt-4 flex flex-wrap gap-2",children:[e.jsx("button",{disabled:p||!(s.label??"").trim()||!(s.schluessel??"").trim()||!s.vernehmlassung_id&&(s.ohne_vernehmlassung_grund??"").trim().length<5,onClick:S,className:"px-3.5 py-2 rounded-lg bg-red-600 text-white text-sm font-semibold hover:bg-red-700 disabled:opacity-40",children:p?"Einen Momentâ¦":"Speichern"}),e.jsx("button",{onClick:async()=>{JSON.stringify(s)!==JSON.stringify(t)&&!await W("Abbrechen? Was du geändert hast, geht verloren.",{jaLabel:"Verwerfen"})||m()},className:"px-3.5 py-2 rounded-lg border border-zinc-300 dark:border-zinc-600 text-sm",children:"Abbrechen"}),!v&&e.jsx("button",{onClick:i,disabled:p,className:"ml-auto px-3 py-2 text-sm text-zinc-400 hover:text-red-600",children:"Löschen"})]})]})}function me({mittel:t,onClose:g,onFertig:k}){const[u,h]=c.useState(null),[b,j]=c.useState(""),[m,N]=c.useState(!1),s=c.useCallback(async()=>{const r=await F("/api/admin/werbemittel?kosten=1");if(!r.ok){h([]);return}h((await r.json()).zeilen??[])},[]);c.useEffect(()=>{s()},[s]);async function o(r,v){N(!0),await F("/api/admin/werbemittel",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({aktion:"kosten",line_id:r.id,werbemittel_id:v?t.id:null})}),await s(),N(!1)}const p=(u??[]).filter(r=>r.werbemittel_id===t.id),a=b.trim().toLowerCase(),f=a.length<2?[]:(u??[]).filter(r=>!r.werbemittel_id).filter(r=>[r.vendor,r.remark,r.expense_reports?.title,String(r.amount)].some(v=>(v??"").toLowerCase().includes(a))).slice(0,25),l=p.reduce((r,v)=>r+Number(v.amount),0),d=(r,v)=>e.jsxs("div",{className:"flex flex-wrap items-baseline gap-x-2 gap-y-0.5 py-1.5 border-b border-zinc-100 dark:border-zinc-800 text-[13px]",children:[e.jsx("span",{className:"tabular-nums text-zinc-400 w-[74px] shrink-0",children:r.booking_date??"â"}),e.jsx("span",{className:"font-medium text-zinc-800 dark:text-zinc-200",children:r.vendor||"ohne Anbieter"}),r.remark&&e.jsx("span",{className:"text-zinc-500",children:r.remark}),e.jsx("span",{className:"ml-auto tabular-nums font-semibold",children:T(Number(r.amount))}),e.jsx("button",{disabled:m,onClick:()=>o(r,v),className:`px-2 py-0.5 rounded-md border text-[12px] font-medium disabled:opacity-40 ${v?"border-zinc-300 dark:border-zinc-600 hover:border-red-400 hover:text-red-600":"border-zinc-300 dark:border-zinc-600 text-zinc-400 hover:text-red-600"}`,children:v?"zuordnen":"lösen"}),r.expense_reports&&e.jsxs("span",{className:"w-full text-[11.5px] text-zinc-400",children:["aus «",r.expense_reports.title||"Abrechnung","»",r.expense_reports.uploaded_by_name?` von ${r.expense_reports.uploaded_by_name}`:""]})]},r.id);return e.jsxs(D,{titel:`Kosten: ${t.label}`,onClose:g,children:[e.jsx("p",{className:"text-[13px] text-zinc-500 dark:text-zinc-400 mb-3",children:"Die Beträge kommen aus den Abrechnungen, damit sie nur an einem Ort stehen. Gestaltung und Druck dürfen zwei Zeilen sein."}),u===null?e.jsx("p",{className:"text-sm text-zinc-400",children:"Lade Ausgabenâ¦"}):e.jsxs(e.Fragment,{children:[e.jsxs("p",{className:"text-[11.5px] uppercase tracking-wide text-zinc-400 mb-1",children:["Zugeordnet",p.length>0&&e.jsxs("span",{className:"ml-1.5 normal-case text-zinc-500",children:["Summe ",T(l)]})]}),p.length===0?e.jsx("p",{className:"text-[13px] text-zinc-400 mb-3",children:"Noch nichts zugeordnet."}):e.jsx("div",{className:"mb-4",children:p.map(r=>d(r,!1))}),e.jsx("p",{className:"text-[11.5px] uppercase tracking-wide text-zinc-400 mb-1",children:"Ausgabe suchen"}),e.jsx("input",{value:b,onChange:r=>j(r.target.value),placeholder:"Druckerei, Betrag oder Stichwort",className:"w-full rounded-lg border border-zinc-300 dark:border-zinc-600 bg-white dark:bg-zinc-900 px-3 py-2 text-sm"}),a.length>=2&&(f.length===0?e.jsx("p",{className:"mt-2 text-[13px] text-zinc-400",children:"Keine freie Ausgabe gefunden. Sie muss zuerst als Abrechnung erfasst sein."}):e.jsx("div",{className:"mt-2",children:f.map(r=>d(r,!0))})),e.jsxs("p",{className:"mt-3 text-[11.5px] text-zinc-400",children:["Noch keine Abrechnung dazu? Erfasse sie unter ",e.jsx("a",{href:"/admin/abrechnungen",className:"text-red-600 hover:underline",children:"Abrechnungen"})," und ordne sie danach hier zu."]})]}),e.jsx("div",{className:"mt-4",children:e.jsx("button",{onClick:async()=>{await k()},className:"px-3.5 py-2 rounded-lg bg-red-600 text-white text-sm font-semibold hover:bg-red-700",children:"Fertig"})})]})}function be({mittel:t,onClose:g,onFertig:k}){const[u,h]=c.useState(t.notiz??""),[b,j]=c.useState(t.textvorschlag??""),[m,N]=c.useState(!1),[s,o]=c.useState(null),[p,a]=c.useState(null),f=U(t.faellig_am);async function l(){N(!0),o(null);const d=await F("/api/admin/werbemittel",{method:"POST",headers:{"Content-Type":"application/json"}
8,body:JSON.stringify({aktion:"bitten",id:t.id,text:u,textvorschlag:b})}),r=await d.json().catch(()=>({}));if(N(!1),!d.ok){o(r.error??"Hat nicht geklappt.");return}a(r.mail?`Mail ist raus, die Pendenz steht auf ${r.name??t.verantwortlich_name}.`:r.hinweis??"Pendenz angelegt.")}return e.jsxs(D,{titel:`${t.verantwortlich_name??"Verantwortliche Person"} bitten`,onClose:g,schmutzig:!p&&(u!==(t.notiz??"")||b!==(t.textvorschlag??"")),children:[e.jsxs("p",{className:"text-[13px] text-zinc-500 dark:text-zinc-400 mb-3",children:[t.label," · ",P[t.art]??t.art,t.ausgabe==="druck"?" · geht in den Druck":" · nur als PDF",t.plan?` · ${t.plan.title}`:"",f?` · ${f.text}`:" · ohne festen Termin"]}),p?e.jsxs(e.Fragment,{children:[e.jsx("p",{className:"text-[13.5px] text-green-700 dark:text-green-400",children:p}),e.jsx("div",{className:"mt-4",children:e.jsx("button",{onClick:async()=>{await k()},className:"px-3.5 py-2 rounded-lg bg-red-600 text-white text-sm font-semibold hover:bg-red-700",children:"Fertig"})})]}):e.jsxs(e.Fragment,{children:[e.jsx("label",{className:"block text-[11.5px] uppercase tracking-wide text-zinc-400 mb-1",children:"Was gebraucht wird"}),e.jsx("textarea",{rows:5,value:u,onChange:d=>h(d.target.value),placeholder:"Zweck, Zielgruppe, was draufstehe
8n soll, wo es verteilt wird.",className:"w-full rounded-lg border border-zinc-300 dark:border-zinc-600 bg-white dark:bg-zinc-900 px-3 py-2 text-sm"}),e.jsx("label",{className:"block text-[11.5px] uppercase tracking-wide text-zinc-400 mb-1 mt-3",children:"Textvorschlag"}),e.jsx("textarea",{rows:6,value:b,onChange:d=>j(d.target.value),placeholder:"Titel, Kernsatz, Aufruf. Sandra darf ihn frei ändern.",className:"w-full rounded-lg border border-zinc-300 dark:border-zinc-600 bg-white dark:bg-zinc-900 px-3 py-2 text-sm"}),e.jsx("p",{className:"mt-1 text-[11.5px] text-zinc-400",children:"Es entsteht eine Pendenz auf die verantwortliche Person, und sie bekommt beides per Mail. Der Vorschlag bleibt am Werbemittel stehen. Der Stand springt auf «beauftragt»."}),s&&e.jsx("p",{className:"mt-2 text-[13px] text-red-600",children:s}),e.jsxs("div",{className:"mt-4 flex gap-2",children:[e.jsx("button",{disabled:m,onClick:()=>{l()},className:"px-3.5 py-2 rounded-lg bg-red-600 text-white text-sm font-semibold hover:bg-red-700 disabled:opacity-50",children:m?"Schickeâ¦":"Bitte schicken"}),e.jsx("button",{onClick:g,className:"px-3.5 py-2 rounded-lg border border-zinc-300 dark:border-zinc-600 text-sm",children:"Abbrechen"})]})]})]})}function D({titel:t,children:g,onClose:k,schmutzig:u=!1}){return e.jsx(Y,{schmutzig:u,onClose:k,children:e.jsxs(e.Fragment,{children:[e.jsx("h2",{className:"text-base font-bold text-zinc-900 dark:text-white mb-1",children:t}),g]})})}function pe({canEdit:t}){return e.jsx(ee,{bereich:"marketing",canEdit:t,leerText:"Noch keine Vernehmlassung. Lade einen Entwurf hoch, wähle aus, wer ihn sehen soll, und verschicke ihn. Eine Rückmeldung ist für die Angeschriebenen freiwillig."})}const Z={logo:"Logo",flyer_postkarte:"Flyer / Postkarte",plakat:"Plakat",bekleidung:"Bekleidung",fahne:"Fahne / Roll-up",vorlage:"Vorlage",foto:"Foto",anderes:"Anderes"};function fe({canEdit:t}){const[g,k]=c.useState(null),[u,h]=c.useState(null),[b,j]=c.useState(null),[m,N]=c.useState(!0),s=c.useCallback(async()=>{const a=await F("/api/admin/marketing-ablage");if(!a.ok){h("Die Ablage konnte nicht geladen werden.");return}k(await a.json()),h(null)},[]);if(c.useEffect(()=>{s()},[s]),g===null)return e.jsx("p",{className:"text-sm text-zinc-400",children:"Lade Ablageâ¦"});const o=g.eintraege.filter(a=>a.veraltet).length,p=m?g.eintraege.filter(a=>!a.veraltet):g.eintraege;return e.jsxs("div",{className:"flex flex-col gap-4",children:[u&&e.jsx("p",{className:"text-sm text-red-600",children:u}),e.jsxs("div",{className:"flex flex-wrap items-center gap-3",children:[t&&e.jsx("button",{onClick:()=>j({art:"flyer_postkarte"}),className:"px-3.5 py-2 rounded-lg bg-red-600 text-white text-sm font-semibold hover:bg-red-700",children:"+ Neuer Eintrag"}),o>0&&e.jsx("button",{onClick:()=>N(a=>!a),className:"text-[12.5px] text-zinc-500 hover:text-red-600 underline underline-offset-2",children:m?`${o} veraltete anzeigen`:"veraltete ausblenden"})]}),p.length===0?e.jsx("p",{className:"rounded-xl border border-dashed border-zinc-300 dark:border-zinc-700 p-6 text-[13.5px] text-zinc-500",children:"Noch nichts abgelegt. Hierhin gehören Logos, freigegebene Flyer und Vorlagen, damit sie beim nächsten Mal niemand neu suchen muss."}):p.map(a=>e.jsx(ke,{e:a,canEdit:t,onBearbeiten:()=>j(a),onReload:s,setFehler:h},a.id)),b&&e.jsx(ve,{entwurf:b,daten:g,onClose:()=>j(null),onFertig:async()=>{j(null),await s()}})]})}function ke({e:t,canEdit:g,onBearbeiten:k,onReload:u,setFehler:h}){const[b,j]=c.useState(!1),[m,N]=c.useState(!1);async function s(a){j(!0),h(null);const f=await F("/api/admin/marketing-ablage",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(a)});return j(!1),f.ok?await f.json().catch(()=>({})):(h((await f.json().catch(()=>({}))).error??"Hat nicht geklappt."),null)}async function o(a){const f=window.open("","_blank");f&&(f.opener=null);const l=await s({aktion:"link",fassung_id:a.id});l?.url&&f?f.location.href=l.url:f?.close()}async function p(a,f){j(!0),h(null);try{const l=await F("/api/admin/marketing-ablage",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({aktion:"upload-url",ablage_id:t.id,dateiname:a.name})});if(!l.ok){h("Kein Upload-Link erhalten.");return}const{pfad:d,token:r}=await l.json(),{error:v}=await H.storage.from("documents-internal").uploadToSignedUrl(d,r,a);if(v){h(`Der Upload ist gescheitert: ${v.message}`);return}if(!(await F("/api/admin/marketing-ablage",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({aktion:"fassung",ablage_id:t.id,pfad:d,dateiname:a.name,content_type:a.type,size:a.size,notiz:f})})).ok){h("Die Datei liegt im Speicher, wurde aber nicht vermerkt.");return}await u()}finally{j(!1)}}return e.jsxs("div",{className:`rounded-xl border p-4 ${t.veraltet?"border-zinc-200 dark:border-zinc-800 bg-zinc-50 dark:bg-zinc-900/40":"border-zinc-200 dark:border-zinc-800 bg-white dark:bg-zinc-900"}`,children:[e.jsxs("div",{className:"flex flex-wrap items-baseline gap-x-2.5 gap-y-1",children:[e.jsx("h2",{className:`text-[15px] font-bold ${t.veraltet?"text-zinc-500":"text-zinc-900 dark:text-white"}`,children:t.titel}),e.jsx("span",{className:"text-[11.5px] px-1.5 py-0.5 rounded bg-zinc-100 dark:bg-zinc-800 text-zinc-600 dark:text-zinc-300",children:Z[t.art]??t.art}),t.freigegeben_am?e.jsxs("span",{className:"text-[11.5px] px-1.5 py-0.5 rounded bg-green-100 dark:bg-green-950/40 text-green-700 dark:text-green-400 font-semibold",children:["Freigegeben ",t.freigegeben_am]}):e.jsx("span",{className:"text-[11.5px] px-1.5 py-0.5 rounded bg-amber-100 dar
8k:bg-amber-950/40 text-amber-700 dark:text-amber-400 font-semibold",children:"Nicht freigegeben"}),t.aktuell&&e.jsxs("span",{className:"text-[12px] text-zinc-400",children:["Fassung ",t.aktuell.nummer]}),t.brief_rolle&&e.jsx("span",{className:"text-[11.5px] px-1.5 py-0.5 rounded bg-blue-100 dark:bg-blue-950/40 text-blue-700 dark:text-blue-400 font-semibold",children:t.brief_rolle==="logo"?"Briefkopf im Unterstützungsschreiben":"Unterschrift im Unterstützungsschreiben"}),t.vertraulich&&e.jsx("span",{className:"text-[11.5px] px-1.5 py-0.5 rounded bg-zinc-200 dark:bg-zinc-700 text-zinc-700 dark:text-zinc-200",children:"vertraulich"})]}),t.veraltet&&e.jsxs("p",{className:"mt-1.5 text-[12.5px] text-red-700 dark:text-red-400",children:["Nicht mehr verwenden:",t.ersetzt_durch_titel?` ersetzt durch «${t.ersetzt_durch_titel}».`:` gültig war bis ${t.gueltig_bis}.`]}),t.beschreibung&&e.jsx("p",{className:"mt-1 text-[13px] text-zinc-500",children:t.beschreibung}),e.jsxs("div",{className:"mt-1.5 flex flex-wrap gap-x-3 gap-y-1 text-[12px] text-zinc-400",children:[t.vernehmlassung&&e.jsxs("span",{children:["aus der Vernehmlassung «",t.vernehmlassung.titel,"»",t.vernehmlassung.ergebnis==="freigegeben"?", freigegeben":""]}),t.event&&e.jsxs("span",{children:["zu ",t.event.title]}),t.werbemittel&&e.jsxs("span",{children:["Werbemittel: ",t.werbemittel.label]}),t.gueltig_bis&&!t.veraltet&&e.jsxs("span",{children:["gültig bis ",t.gueltig_bis]})]}),e.jsxs("div",{className:"mt-3 flex flex-wrap gap-2",children:[t.aktuell?e.jsxs("button",{disabled:b,onClick:()=>o(t.aktuell),className:"px-2.5 py-1.5 rounded-lg border border-zinc-300 dark:border-zinc-600 text-[12.5px] font-medium hover:border-red-400 hover:text-red-600 disabled:opacity-40",children:[t.aktuell.file_name," herunterladen"]}):e.jsx("span",{className:"text-[12.5px] text-zinc-400 py-1.5",children:"Noch keine Datei."}),t.fassungen.length>1&&e.jsx("button",{onClick:()=>N(a=>!a),className:"px-2.5 py-1.5 text-[12.5px] text-zinc-500 hover:text-red-600",children:m?"Fassungen ausblenden":`${t.fassungen.length} Fassungen`}),g&&e.jsxs(e.Fragment,{children:[e.jsx(je,{busy:b,hatDatei:!!t.aktuell,onDatei:p}),e.jsx("button",{disabled:b,onClick:()=>s({aktion:"freigeben",id:t.id,zuruecknehmen:!!t.freigegeben_am}).then(a=>a&&u()),className:"px-2.5 py-1.5 rounded-lg border border-zinc-300 dark:border-zinc-600 text-[12.5px] font-medium hover:border-red-400 hover:text-red-600 disabled:opacity-40",children:t.freigegeben_am?"Freigabe zurücknehmen":"Freigeben"}),e.jsx("button",{onClick:k,className:"px-2.5 py-1.5 rounded-lg border border-zinc-300 dark:border-zinc-600 text-[12.5px] font-medium hover:border-red-400 hover:text-red-600",children:"Bearbeiten"}),t.aktuell&&e.jsxs("select",{value:t.brief_rolle??"",disabled:b,onChange:a=>{const f=a.target.value,l=t.brief_rolle;(async()=>(l&&l!==f&&await s({aktion:"brief",rolle:l,id:null}),f&&await s({aktion:"brief",rolle:f,id:t.id}),await u()))()},className:"px-2 py-1.5 rounded-lg border border-zinc-300 dark:border-zinc-600 text-[12.5px] bg-white dark:bg-zinc-900 disabled:opacity-40",children:[e.jsx("option",{value:"",children:"nicht im Brief"}),e.jsx("option",{value:"logo",children:"als Briefkopf"}),e.jsx("option",{value:"unterschrift",children:"als Unterschrift"})]})]})]}),m&&e.jsx("div",{className:"mt-3 pt-3 border-t border-zinc-100 dark:border-zinc-800 flex flex-col gap-1",children:t.fassungen.map(a=>e.jsxs("div",{className:"flex flex-wrap items-baseline gap-2 text-[12.5px]",children:[e.jsxs("span",{className:"tabular-nums text-zinc-400 w-[26px]",children:[a.nummer,"."]}),e.jsx("button",{disabled:b,onClick:()=>o(a),className:"text-zinc-700 dark:text-zinc-300 hover:text-red-600 hover:underline disabled:opacity-40",children:a.file_name}),a.notiz&&e.jsx("span",{className:"text-zinc-500",children:a.notiz}),e.jsxs("span",{className:"ml-auto text-[11.5px] text-zinc-400",children:[a.created_at.slice(0,10),a.hochgeladen_von?` · ${a.hochgeladen_von}`:""]})]},a.id))})]})}function je({busy:t,hatDatei:g,onDatei:k}){const[u,h]=c.useState(null),[b,j]=c.useState("");return u?e.jsxs("span",{className:"inline-flex flex-wrap items-center gap-1.5",children:[e.jsx("span",{className:"text-[12.5px] text-zinc-500",children:u.name}),e.jsx("input",{value:b,onChange:m=>j(m.target.value),autoFocus:!0,placeholder:g?"Was hat sich geändert?":"Kurze Bemerkung (freiwillig)",className:"rounded-lg border border-zinc-300 dark:border-zinc-600 bg-white dark:bg-zinc-900 px-2 py-1 text-[12.5px]"}),e.jsx("button",{disabled:t,onClick:async()=>{await k(u,b),h(null),j("")},className:"px-2.5 py-1.5 rounded-lg bg-red-600 text-white text-[12.5px] font-semibold disabled:opacity-40",children:"Hochladen"}),e.jsx("button",{onClick:()=>{h(null),j("")},className:"px-2 py-1.5 text-[12.5px] text-zinc-500",children:"Abbrechen"})]}):e.jsxs("label",{children:[e.jsx("span",{className:`inline-block px-2.5 py-1.5 rounded-lg text-[12.5px] font-medium cursor-pointer ${g?`border border-zinc-300 dark:border-zinc-600 hover:border-red-400 hover:text-red-600 ${t?"opacity-40":""}`:`bg-red-600 text-white hover:bg-red-700 ${t?"opacity-40":""}`}`,children:g?"Neue Fassung":"Datei anhängen"}),e.jsx("input",{type:"file",className:"hidden",disabled:t,onChange:m=>{const N=m.target.files?.[0];m.target.value="",N&&h(N)}})]})}function ve({entwurf:t,daten:g,onClose:k,onFertig:u}){const[h,b]=c.useState(t),[j,m]=c.useState(!1),[N,s]=c.useState(null),o=!t.id,p="w-full rounded-lg border border-zinc-300 dark:border-zinc-600 bg-white dark:bg-zinc-900 px-3 py-2 text-sm",a="block text-[11.5px] uppercase tracking-wide text-zinc-400 mb-1 mt-3";async function f(l){m(!0),s(null);const d=await F("/api/admin/marketing-ablage",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(l)});if(m(!1),!d.ok){s((await d.json().catch(()=>({}))).error??"Hat nicht geklappt.");return}await u()}return e.jsxs(D,{titel:o?"Neuer Eintrag":h.titel??"Eintrag",onClose:k,schmutzig:JSON.stringify(h)!==JSON.stringify(t),children:[e.jsx("label",{className:a,children:"Titel"}),e.jsx("input",{value:h.titel??"",onChange:l=>b(d=>({...d,titel:l.target.value})),autoFocus:!0,placeholder:"z. B. Logo Quartierverein, weiss auf rot",className:p}),e.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[e.jsxs("div",{children:[e.jsx("label",{className:a,children:"Art"}),e.jsx("select",{value:h.art??"anderes",onChange:l=>b(d=>({...d,art:l.target.value})),className:p,children:Object.entries(Z).map(([l,d])=>e.jsx("option",{value:l,children:d},l))})]}),e.jsxs("div",{children:[e.jsx("label",{className:a,children:"Gültig bis"}),e.jsx("input",{type:"date",value:h.gueltig_bis??"",onChange:l=>b(d=>({...d,gueltig_bis:l.target.value||null})),className:p})]})]}),e.jsx("p",{className:"mt-1 text-[11.5px] text-zinc-400",children:"Ein Datum setzen, wenn absehbar ist, dass es veraltet: alte Adresse, auslaufender Sponsor, Jahreszahl im Bild. Danach erscheint der Eintrag blass und mit Warnung."}),e.jsx("label",{className:a,children:"Beschreibung"}),e.jsx("textarea",{value:h.beschreibung??"",onChange:l=>b(d=>({...d,beschreibung:l.target.value})),rows:2,placeholder:"Wofür, worauf achten, welche Masse",className:p}
8),g.vernehmlassungen.length>0&&e.jsxs(e.Fragment,{children:[e.jsx("label",{className:a,children:"Stammt aus der Vernehmlassung"}),e.jsxs("select",{value:h.vernehmlassung_id??"",className:p,onChange:l=>b(d=>({...d,vernehmlassung_id:l.target.value||null})),children:[e.jsx("option",{value:"",children:"aus keiner"}),g.vernehmlassungen.map(l=>e.jsxs("option",{value:l.id,children:[l.titel,l.ergebnis==="freigegeben"?" (freigegeben)":" (zu überarbeiten)"]},l.id))]})]}),e.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[e.jsxs("div",{children:[e.jsx("label",{className:a,children:"Gehört zu"}),e.jsxs("select",{value:h.event_id??"",className:p,onChange:l=>b(d=>({...d,event_id:l.target.value||null})),children:[e.jsx("option",{value:"",children:"keiner Veranstaltung"}),g.events.map(l=>e.jsxs("option",{value:l.id,children:[l.title," (",l.date,")"]},l.id))]})]}),e.jsxs("div",{children:[e.jsx("label",{className:a,children:"Werbemittel"}),e.jsxs("select",{value:h.werbemittel_id??"",className:p,onChange:l=>b(d=>({...d,werbemittel_id:l.target.value||null})),children:[e.jsx("option",{value:"",children:"keines"}),g.werbemittel.map(l=>e.jsx("option",{value:l.id,children:l.label},l.id))]})]})]}),e.jsxs("label",{className:"mt-4 flex items-start gap-2 text-[13px] text-zinc-600 dark:text-zinc-300",children:[e.jsx("input",{type:"checkbox",checked:h.vertraulich===!0,className:"mt-0.5 accent-red-600 w-4 h-4",onChange:l=>b(d=>({...d,vertraulich:l.target.checked}))}),e.jsx("span",{children:"Vertraulich. Die Datei lässt sich dann nur mit dem Recht «Marketing bearbeiten» herunterladen. Für Unterschriften: Wer sie hat, kann sie unter jedes Dokument setzen."})]}),!o&&e.jsxs(e.Fragment,{children:[e.jsx("label",{className:a,children:"Ersetzt durch"}),e.jsxs("select",{value:h.ersetzt_durch??"",className:p,onChange:l=>b(d=>({...d,ersetzt_durch:l.target.value||null})),children:[e.jsx("option",{value:"",children:"nichts, gilt weiterhin"}),g.eintraege.filter(l=>l.id!==h.id).map(l=>e.jsx("option",{value:l.id,children:l.titel},l.id))]}),e.jsx("p",{className:"mt-1 text-[11.5px] text-zinc-400",children:"Der Weg für alles, was nicht mehr gilt: Der Eintrag bleibt auffindbar und zeigt auf den Nachfolger, statt spurlos zu verschwinden."})]}),N&&e.jsx("p",{className:"mt-3 text-sm text-red-600",children:N}),e.jsxs("div",{className:"mt-4 flex flex-wrap gap-2",children:[e.jsx("button",{disabled:j||!(h.titel??"").trim(),onClick:()=>f({aktion:"speichern",...h}),className:"px-3.5 py-2 rounded-lg bg-red-600 text-white text-sm font-semibold hover:bg-red-700 disabled:opacity-40",children:j?"Einen Momentâ¦":"Speichern"}),e.jsx("button",{onClick:k,className:"px-3.5 py-2 rounded-lg border border-zinc-300 dark:border-zinc-600 text-sm",children:"Abbrechen"}),!o&&e.jsx("button",{disabled:j,onClick:async()=>{await W(`«${h.titel}» löschen?`,{jaLabel:"Löschen"})&&f({aktion:"loeschen",id:h.id})},className:"ml-auto px-3 py-2 text-sm text-zinc-400 hover:text-red-600",children:"Löschen"})]})]})}function ze({mittel:t,onClose:g,onReload:k}){const[u,h]=c.useState(""),[b,j]=c.useState(t.bestellungen.find(r=>r.lieferant)?.lieferant??""),[m,N]=c.useState(""),[s,o]=c.useState(!1),[p,a]=c.useState(null),f=Math.round(Number(u)),l=Number.isFinite(f)&&f>0;async function d(r){o(!0),a(null);const v=await F("/api/admin/werbemittel",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(r)});return o(!1),v.ok?(await k(),!0):(a((await v.json().catch(()=>({}))).error??"Hat nicht geklappt."),!1)}return e.jsxs(D,{titel:`Nachbestellen: ${t.label}`,onClose:g,schmutzig:u.trim().length>0||m.trim().length>0,children:[e.jsxs("p",{className:"text-[13px] text-zinc-500 dark:text-zinc-400 mb-3",children:["Dasselbe Material noch einmal. Das braucht keine Vernehmlassung, darüber wurde beim ersten Mal entschieden. Auf Lager sind ",e.jsx("strong",{className:"text-zinc-800 dark:text-zinc-200",children:t.bestand}),"."]}),e.jsxs("div",{className:"flex flex-wrap gap-2",children:[e.jsx("input",{type:"number",min:1,value:u,onChange:r=>h(r.target.value),autoFocus:!0,placeholder:"Wie viele?",className:"w-32 rounded-lg border border-zinc-300 dark:border-zinc-600 bg-white dark:bg-zinc-900 px-3 py-2 text-sm"}),e.jsx("input",{value:b,onChange:r=>j(r.target.value),placeholder:"Druckerei",className:"flex-1 min-w-[140px] rounded-lg border border-zinc-300 dark:border-zinc-600 bg-white dark:bg-zinc-900 px-3 py-2 text-sm"})]}),e.jsx("input",{value:m,onChange:r=>N(r.target.value),placeholder:"Notiz (freiwillig)",className:"w-full mt-2 rounded-lg border border-zinc-300 dark:border-zinc-600 bg-white dark:bg-zinc-900 px-3 py-2 text-sm"}),p&&e.jsx("p",{className:"mt-2 text-sm text-red-600",children:p}),e.jsxs("div",{className:"mt-3 flex gap-2",children:[e.jsx("button",{disabled:s||!l,onClick:async()=>{await d({aktion:"bestellen",werbemittel_id:t.id,menge:f,lieferant:b,notiz:m})&&(h(""),N(""))},className:"px-3.5 py-2 rounded-lg bg-red-600 text-white text-sm font-semibold hover:bg-red-700 disabled:opacity-40",children:"Bestellung erfassen"}),e.jsx("button",{onClick:g,className:"px-3.5 py-2 rounded-lg border border-zinc-300 dark:border-zinc-600 text-sm",children:"Schliessen"})]}),t.bestellungen.length>0&&e.jsxs("div",{className:"mt-4 pt-3 border-t border-zinc-100 dark:border-zinc-800",children:[e.jsx("p",{className:"text-[11.5px] uppercase tracking-wide text-zinc-400 mb-1.5",children:"Bisherige Bestellungen"}),e.jsx("div",{className:"flex flex-col gap-1",children:t.bestellungen.map(r=>e.jsxs("div",{className:"flex flex-wrap items-baseline gap-2 text-[13px]",children:[e.jsx("span",{className:"tabular-nums text-zinc-400 w-[74px]",children:r.bestellt_am}),e.jsx("span",{className:"font-medium text-zinc-800 dark:text-zinc-200",children:r.menge}),r.lieferant&&e.jsx("span",{className:"text-zinc-500",children:r.lieferant}),r.geliefert_am?e.jsxs("span",{className:"ml-auto text-[12px] text-green-700 dark:text-green-400",children:["geliefert ",r.geliefert_am]}):e.jsx("button",{disabled:s,onClick:()=>d({aktion:"geliefert",id:r.id}),className:"ml-auto px-2 py-0.5 rounded-md border border-zinc-300 dark:border-zinc-600 text-[12px] font-medium hover:border-green-500 hover:text-green-700 disabled:opacity-40",children:"geliefert, ins Lager buchen"})]},r.id))}),e.jsx("p",{className:"mt-2 text-[11.5px] text-zinc-400",children:"Die Rechnung dazu erfasst du unter Abrechnungen und ordnest sie hier über «Kosten» zu."})]})]})}function Ne({adressen:t,canEdit:g,onReload:k}){const[u,h]=c.useState(!1),[b,j]=c.useState(t.join(", ")),[m,N]=c.useState(!1),[s,o]=c.useState(null);async function p(){N(!0),o(null);const a=await F("/api/admin/werbemittel",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({aktion:"empfaenger",empfaenger:b.split(/[,;\n]/).map(f=>
8f.trim()).filter(Boolean)})});if(N(!1),!a.ok){o((await a.json().catch(()=>({}))).error??"Hat nicht geklappt.");return}await k(),h(!1)}return u?e.jsxs("div",{className:"mt-2 rounded-xl border border-zinc-200 dark:border-zinc-700 p-3",children:[e.jsx("p",{className:"text-[11.5px] uppercase tracking-wide text-zinc-400 mb-1.5",children:"Meldung bei einem neuen Werbemittel"}),e.jsx("input",{value:b,onChange:a=>j(a.target.value),autoFocus:!0,placeholder:"[email protected], [email protected]",className:"w-full rounded-lg border border-zinc-300 dark:border-zinc-600 bg-white dark:bg-zinc-900 px-3 py-2 text-sm"}),e.jsx("p",{className:"mt-1 text-[11.5px] text-zinc-400",children:"Mit Komma getrennt. Bleibt das Feld leer, geht die Meldung an alle in der Kommission Marketing â sie fällt also nicht einfach aus."}),s&&e.jsx("p",{className:"mt-1.5 text-sm text-red-600",children:s}),e.jsxs("div",{className:"mt-2 flex gap-2",children:[e.jsx("button",{disabled:m,onClick:p,className:"px-3 py-1.5 rounded-lg bg-red-600 text-white text-[13px] font-semibold hover:bg-red-700 disabled:opacity-40",children:m?"Einen Momentâ¦":"Speichern"}),e.jsx("button",{onClick:()=>h(!1),className:"px-3 py-1.5 rounded-lg border border-zinc-300 dark:border-zinc-600 text-[13px]",children:"Abbrechen"})]})]}):e.jsxs("p",{className:"mt-2 text-[12px] text-zinc-400",children:["Meldung bei einem neuen Werbemittel geht an"," ",t.length>0?e.jsx("span",{className:"text-zinc-500 dark:text-zinc-400",children:t.join(", ")}):e.jsx("span",{className:"text-amber-700 dark:text-amber-400",children:"niemanden"}),".",g&&e.jsx("button",{onClick:()=>{j(t.join(", ")),h(!0)},className:"ml-1.5 text-red-600 hover:underline",children:"ändern"})]})}export{fe as AblageReiter,Ve as AdminMarketing,pe as VernehmlassungReiter};
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.